@videojs/html 10.0.0-rc.2 → 10.0.0-rc.4

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 (1438) hide show
  1. package/README.md +12 -2
  2. package/dist/default/define/audio/minimal-skin.css +663 -414
  3. package/dist/default/define/audio/minimal-skin.js +0 -2
  4. package/dist/default/define/audio/minimal-skin2.js +1 -3
  5. package/dist/default/define/audio/minimal-ui.js +0 -2
  6. package/dist/default/define/audio/player.js +0 -2
  7. package/dist/default/define/audio/skin.css +409 -205
  8. package/dist/default/define/audio/skin.js +0 -2
  9. package/dist/default/define/audio/skin2.js +1 -3
  10. package/dist/default/define/audio/ui.js +0 -2
  11. package/dist/default/define/background/player.js +0 -2
  12. package/dist/default/define/background/skin.js +0 -2
  13. package/dist/default/define/background/skin2.js +1 -3
  14. package/dist/default/define/extensions/google-cast.js +0 -2
  15. package/dist/default/define/extensions/mux-data.js +0 -2
  16. package/dist/default/define/global.css +13 -0
  17. package/dist/default/define/global.js +1 -3
  18. package/dist/default/define/i18n.js +0 -2
  19. package/dist/default/define/live-audio/minimal-skin.css +458 -368
  20. package/dist/default/define/live-audio/minimal-skin.js +0 -2
  21. package/dist/default/define/live-audio/minimal-skin2.js +1 -3
  22. package/dist/default/define/live-audio/minimal-ui.js +0 -2
  23. package/dist/default/define/live-audio/player.js +0 -2
  24. package/dist/default/define/live-audio/skin.css +221 -159
  25. package/dist/default/define/live-audio/skin.js +0 -2
  26. package/dist/default/define/live-audio/skin2.js +1 -3
  27. package/dist/default/define/live-audio/ui.js +0 -2
  28. package/dist/default/define/live-video/minimal-skin.css +1002 -863
  29. package/dist/default/define/live-video/minimal-skin.js +0 -2
  30. package/dist/default/define/live-video/minimal-skin2.js +1 -3
  31. package/dist/default/define/live-video/minimal-ui.js +0 -2
  32. package/dist/default/define/live-video/player.js +0 -2
  33. package/dist/default/define/live-video/skin.css +804 -687
  34. package/dist/default/define/live-video/skin.js +0 -2
  35. package/dist/default/define/live-video/skin2.js +1 -3
  36. package/dist/default/define/live-video/ui.js +0 -2
  37. package/dist/default/define/media/background-video.js +0 -2
  38. package/dist/default/define/media/cloudflare-video.js +0 -2
  39. package/dist/default/define/media/dash-video.js +0 -2
  40. package/dist/default/define/media/hls-audio.js +0 -2
  41. package/dist/default/define/media/hls-background-video.js +0 -2
  42. package/dist/default/define/media/hls-video.js +0 -2
  43. package/dist/default/define/media/hlsjs-video.js +0 -2
  44. package/dist/default/define/media/mux-audio/hls-js.js +0 -2
  45. package/dist/default/define/media/mux-audio/spf.js +0 -2
  46. package/dist/default/define/media/mux-background-video.js +0 -2
  47. package/dist/default/define/media/mux-video/hls-js.js +0 -2
  48. package/dist/default/define/media/mux-video/spf.js +0 -2
  49. package/dist/default/define/media/native-hls-video.js +0 -2
  50. package/dist/default/define/media/shaka-video.js +0 -2
  51. package/dist/default/define/media/spotify-audio.js +0 -2
  52. package/dist/default/define/media/tiktok-video.js +0 -2
  53. package/dist/default/define/media/twitch-video.js +0 -2
  54. package/dist/default/define/media/vimeo-video.js +0 -2
  55. package/dist/default/define/media/wistia-video.js +0 -2
  56. package/dist/default/define/media/youtube-video.js +0 -2
  57. package/dist/default/define/shadow.css +22 -0
  58. package/dist/default/define/shadow.js +4 -0
  59. package/dist/default/define/ui/airplay-button.js +0 -2
  60. package/dist/default/define/ui/alert-dialog.js +0 -2
  61. package/dist/default/define/ui/audio-track-radio-group.js +0 -2
  62. package/dist/default/define/ui/buffering-indicator.js +0 -2
  63. package/dist/default/define/ui/captions-button.js +0 -2
  64. package/dist/default/define/ui/captions-radio-group.js +0 -2
  65. package/dist/default/define/ui/cast-button.js +0 -2
  66. package/dist/default/define/ui/container.js +0 -2
  67. package/dist/default/define/ui/controls-backdrop.js +0 -2
  68. package/dist/default/define/ui/controls-content.js +0 -2
  69. package/dist/default/define/ui/controls-group.js +0 -2
  70. package/dist/default/define/ui/controls.js +0 -2
  71. package/dist/default/define/ui/dialog-backdrop.js +0 -2
  72. package/dist/default/define/ui/dialog-close.js +0 -2
  73. package/dist/default/define/ui/dialog-description.js +0 -2
  74. package/dist/default/define/ui/dialog-popup.js +0 -2
  75. package/dist/default/define/ui/dialog-title.js +0 -2
  76. package/dist/default/define/ui/dialog.js +0 -2
  77. package/dist/default/define/ui/error-dialog.js +0 -2
  78. package/dist/default/define/ui/fullscreen-button.js +0 -2
  79. package/dist/default/define/ui/gesture.js +0 -2
  80. package/dist/default/define/ui/hotkey.js +0 -2
  81. package/dist/default/define/ui/live-button.js +0 -2
  82. package/dist/default/define/ui/menu-checkbox-item.js +0 -2
  83. package/dist/default/define/ui/menu-content.js +0 -2
  84. package/dist/default/define/ui/menu-group-label.js +0 -2
  85. package/dist/default/define/ui/menu-group.js +0 -2
  86. package/dist/default/define/ui/menu-item-indicator.js +0 -2
  87. package/dist/default/define/ui/menu-item.js +0 -2
  88. package/dist/default/define/ui/menu-radio-group.js +0 -2
  89. package/dist/default/define/ui/menu-radio-item.js +0 -2
  90. package/dist/default/define/ui/menu-separator.js +0 -2
  91. package/dist/default/define/ui/menu.js +0 -2
  92. package/dist/default/define/ui/mute-button.js +0 -2
  93. package/dist/default/define/ui/pip-button.js +0 -2
  94. package/dist/default/define/ui/play-button.js +0 -2
  95. package/dist/default/define/ui/playback-rate-button.js +0 -2
  96. package/dist/default/define/ui/playback-rate-radio-group.js +0 -2
  97. package/dist/default/define/ui/popover.js +0 -2
  98. package/dist/default/define/ui/poster.js +0 -2
  99. package/dist/default/define/ui/quality-radio-group.js +0 -2
  100. package/dist/default/define/ui/seek-button.js +0 -2
  101. package/dist/default/define/ui/seek-indicator-value.js +0 -2
  102. package/dist/default/define/ui/seek-indicator.js +0 -2
  103. package/dist/default/define/ui/slider-buffer.js +0 -2
  104. package/dist/default/define/ui/slider-fill.js +0 -2
  105. package/dist/default/define/ui/slider-preview.js +0 -2
  106. package/dist/default/define/ui/slider-thumb.js +0 -2
  107. package/dist/default/define/ui/slider-thumbnail.js +0 -2
  108. package/dist/default/define/ui/slider-track.js +0 -2
  109. package/dist/default/define/ui/slider-value.js +0 -2
  110. package/dist/default/define/ui/slider.js +0 -2
  111. package/dist/default/define/ui/status-announcer.js +0 -2
  112. package/dist/default/define/ui/status-indicator-value.js +0 -2
  113. package/dist/default/define/ui/status-indicator.js +0 -2
  114. package/dist/default/define/ui/thumbnail.js +0 -2
  115. package/dist/default/define/ui/time-group.js +0 -2
  116. package/dist/default/define/ui/time-separator.js +0 -2
  117. package/dist/default/define/ui/time-slider-chapter-title.js +0 -2
  118. package/dist/default/define/ui/time-slider-chapters.js +0 -2
  119. package/dist/default/define/ui/time-slider.js +0 -2
  120. package/dist/default/define/ui/time.js +0 -2
  121. package/dist/default/define/ui/title.js +0 -2
  122. package/dist/default/define/ui/tooltip-group.js +0 -2
  123. package/dist/default/define/ui/tooltip-label.js +0 -2
  124. package/dist/default/define/ui/tooltip-shortcut.js +0 -2
  125. package/dist/default/define/ui/tooltip.js +0 -2
  126. package/dist/default/define/ui/volume-indicator-fill.js +0 -2
  127. package/dist/default/define/ui/volume-indicator-value.js +0 -2
  128. package/dist/default/define/ui/volume-indicator.js +0 -2
  129. package/dist/default/define/ui/volume-popover.js +0 -2
  130. package/dist/default/define/ui/volume-slider.js +0 -2
  131. package/dist/default/define/video/minimal-skin.css +764 -647
  132. package/dist/default/define/video/minimal-skin.js +0 -2
  133. package/dist/default/define/video/minimal-skin2.js +1 -3
  134. package/dist/default/define/video/minimal-ui.js +0 -2
  135. package/dist/default/define/video/player.js +0 -2
  136. package/dist/default/define/video/skin.css +528 -441
  137. package/dist/default/define/video/skin.js +0 -2
  138. package/dist/default/define/video/skin2.js +1 -3
  139. package/dist/default/define/video/ui.js +0 -2
  140. package/dist/default/extensions/google-cast/extension.js +0 -2
  141. package/dist/default/extensions/media-extension-element.js +0 -2
  142. package/dist/default/extensions/mux-data/extension.js +0 -2
  143. package/dist/default/i18n/cache-key.js +0 -2
  144. package/dist/default/i18n/context.js +0 -2
  145. package/dist/default/i18n/controller.js +0 -2
  146. package/dist/default/i18n/create-i18n.js +0 -2
  147. package/dist/default/i18n/index.js +2 -2
  148. package/dist/default/i18n/locale.js +0 -2
  149. package/dist/default/i18n/locales/all/register.js +0 -2
  150. package/dist/default/i18n/locales/ar/register.js +0 -2
  151. package/dist/default/i18n/locales/az/register.js +0 -2
  152. package/dist/default/i18n/locales/bg/register.js +0 -2
  153. package/dist/default/i18n/locales/bn/register.js +0 -2
  154. package/dist/default/i18n/locales/bs/register.js +0 -2
  155. package/dist/default/i18n/locales/ca/register.js +0 -2
  156. package/dist/default/i18n/locales/cs/register.js +0 -2
  157. package/dist/default/i18n/locales/cy/register.js +0 -2
  158. package/dist/default/i18n/locales/da/register.js +0 -2
  159. package/dist/default/i18n/locales/de/register.js +0 -2
  160. package/dist/default/i18n/locales/el/register.js +0 -2
  161. package/dist/default/i18n/locales/en/register.js +0 -2
  162. package/dist/default/i18n/locales/es/register.js +0 -2
  163. package/dist/default/i18n/locales/et/register.js +0 -2
  164. package/dist/default/i18n/locales/eu/register.js +0 -2
  165. package/dist/default/i18n/locales/fa/register.js +0 -2
  166. package/dist/default/i18n/locales/fi/register.js +0 -2
  167. package/dist/default/i18n/locales/fr/register.js +0 -2
  168. package/dist/default/i18n/locales/gd/register.js +0 -2
  169. package/dist/default/i18n/locales/gl/register.js +0 -2
  170. package/dist/default/i18n/locales/he/register.js +0 -2
  171. package/dist/default/i18n/locales/hi/register.js +0 -2
  172. package/dist/default/i18n/locales/hr/register.js +0 -2
  173. package/dist/default/i18n/locales/hu/register.js +0 -2
  174. package/dist/default/i18n/locales/id/register.js +0 -2
  175. package/dist/default/i18n/locales/it/register.js +0 -2
  176. package/dist/default/i18n/locales/ja/register.js +0 -2
  177. package/dist/default/i18n/locales/ko/register.js +0 -2
  178. package/dist/default/i18n/locales/lt/register.js +0 -2
  179. package/dist/default/i18n/locales/lv/register.js +0 -2
  180. package/dist/default/i18n/locales/mr/register.js +0 -2
  181. package/dist/default/i18n/locales/nb/register.js +0 -2
  182. package/dist/default/i18n/locales/ne/register.js +0 -2
  183. package/dist/default/i18n/locales/nl/register.js +0 -2
  184. package/dist/default/i18n/locales/nn/register.js +0 -2
  185. package/dist/default/i18n/locales/oc/register.js +0 -2
  186. package/dist/default/i18n/locales/pl/register.js +0 -2
  187. package/dist/default/i18n/locales/pt/register.js +0 -2
  188. package/dist/default/i18n/locales/pt-BR/register.js +0 -2
  189. package/dist/default/i18n/locales/pt-PT/register.js +0 -2
  190. package/dist/default/i18n/locales/ro/register.js +0 -2
  191. package/dist/default/i18n/locales/ru/register.js +0 -2
  192. package/dist/default/i18n/locales/sk/register.js +0 -2
  193. package/dist/default/i18n/locales/sl/register.js +0 -2
  194. package/dist/default/i18n/locales/sr/register.js +0 -2
  195. package/dist/default/i18n/locales/sv/register.js +0 -2
  196. package/dist/default/i18n/locales/te/register.js +0 -2
  197. package/dist/default/i18n/locales/th/register.js +0 -2
  198. package/dist/default/i18n/locales/tr/register.js +0 -2
  199. package/dist/default/i18n/locales/uk/register.js +0 -2
  200. package/dist/default/i18n/locales/vi/register.js +0 -2
  201. package/dist/default/i18n/locales/zh/register.js +0 -2
  202. package/dist/default/i18n/locales/zh-CN/register.js +0 -2
  203. package/dist/default/i18n/locales/zh-TW/register.js +0 -2
  204. package/dist/default/i18n/provider-element.js +0 -2
  205. package/dist/default/i18n/provider-mixin.js +0 -2
  206. package/dist/default/i18n/render-text.js +0 -2
  207. package/dist/default/i18n/text-mixin.js +0 -2
  208. package/dist/default/icons/dist/element/base.js +0 -2
  209. package/dist/default/icons/dist/element/default/icons.js +0 -2
  210. package/dist/default/icons/dist/element/default/index.js +0 -2
  211. package/dist/default/icons/dist/element/index.js +0 -2
  212. package/dist/default/icons/dist/element/minimal/icons.js +0 -2
  213. package/dist/default/icons/dist/element/minimal/index.js +0 -2
  214. package/dist/default/icons/dist/html/default/airplay-enter.js +0 -2
  215. package/dist/default/icons/dist/html/default/airplay-exit.js +0 -2
  216. package/dist/default/icons/dist/html/default/captions-off.js +0 -2
  217. package/dist/default/icons/dist/html/default/captions-on.js +0 -2
  218. package/dist/default/icons/dist/html/default/cast-enter.js +0 -2
  219. package/dist/default/icons/dist/html/default/cast-exit.js +0 -2
  220. package/dist/default/icons/dist/html/default/check.js +0 -2
  221. package/dist/default/icons/dist/html/default/chevron.js +0 -2
  222. package/dist/default/icons/dist/html/default/fullscreen-enter.js +0 -2
  223. package/dist/default/icons/dist/html/default/fullscreen-exit.js +0 -2
  224. package/dist/default/icons/dist/html/default/gear.js +0 -2
  225. package/dist/default/icons/dist/html/default/pause.js +0 -2
  226. package/dist/default/icons/dist/html/default/pip-enter.js +0 -2
  227. package/dist/default/icons/dist/html/default/pip-exit.js +0 -2
  228. package/dist/default/icons/dist/html/default/play.js +0 -2
  229. package/dist/default/icons/dist/html/default/quality.js +0 -2
  230. package/dist/default/icons/dist/html/default/restart.js +0 -2
  231. package/dist/default/icons/dist/html/default/seek.js +0 -2
  232. package/dist/default/icons/dist/html/default/speech.js +0 -2
  233. package/dist/default/icons/dist/html/default/speed.js +0 -2
  234. package/dist/default/icons/dist/html/default/spinner.js +0 -2
  235. package/dist/default/icons/dist/html/default/switches.js +0 -2
  236. package/dist/default/icons/dist/html/default/volume-high.js +0 -2
  237. package/dist/default/icons/dist/html/default/volume-low.js +0 -2
  238. package/dist/default/icons/dist/html/default/volume-off.js +0 -2
  239. package/dist/default/icons/dist/html/minimal/airplay-enter.js +0 -2
  240. package/dist/default/icons/dist/html/minimal/airplay-exit.js +0 -2
  241. package/dist/default/icons/dist/html/minimal/captions-off.js +0 -2
  242. package/dist/default/icons/dist/html/minimal/captions-on.js +0 -2
  243. package/dist/default/icons/dist/html/minimal/cast-enter.js +0 -2
  244. package/dist/default/icons/dist/html/minimal/cast-exit.js +0 -2
  245. package/dist/default/icons/dist/html/minimal/check.js +0 -2
  246. package/dist/default/icons/dist/html/minimal/chevron.js +0 -2
  247. package/dist/default/icons/dist/html/minimal/fullscreen-enter.js +0 -2
  248. package/dist/default/icons/dist/html/minimal/fullscreen-exit.js +0 -2
  249. package/dist/default/icons/dist/html/minimal/gear.js +0 -2
  250. package/dist/default/icons/dist/html/minimal/pause.js +0 -2
  251. package/dist/default/icons/dist/html/minimal/pip-enter.js +0 -2
  252. package/dist/default/icons/dist/html/minimal/pip-exit.js +0 -2
  253. package/dist/default/icons/dist/html/minimal/play.js +0 -2
  254. package/dist/default/icons/dist/html/minimal/quality.js +0 -2
  255. package/dist/default/icons/dist/html/minimal/restart.js +0 -2
  256. package/dist/default/icons/dist/html/minimal/seek.js +0 -2
  257. package/dist/default/icons/dist/html/minimal/speech.js +0 -2
  258. package/dist/default/icons/dist/html/minimal/speed.js +0 -2
  259. package/dist/default/icons/dist/html/minimal/spinner.js +0 -2
  260. package/dist/default/icons/dist/html/minimal/switches.js +0 -2
  261. package/dist/default/icons/dist/html/minimal/volume-high.js +0 -2
  262. package/dist/default/icons/dist/html/minimal/volume-low.js +0 -2
  263. package/dist/default/icons/dist/html/minimal/volume-off.js +0 -2
  264. package/dist/default/icons/element/register/index.js +0 -2
  265. package/dist/default/index.js +2 -2
  266. package/dist/default/internal/skins/default-audio/register.js +0 -2
  267. package/dist/default/internal/skins/default-audio/skin.css +387 -191
  268. package/dist/default/internal/skins/default-audio/template.js +12 -14
  269. package/dist/default/internal/skins/default-live-audio/register.js +0 -2
  270. package/dist/default/internal/skins/default-live-audio/skin.css +199 -145
  271. package/dist/default/internal/skins/default-live-audio/template.js +5 -7
  272. package/dist/default/internal/skins/default-live-video/register.js +1 -2
  273. package/dist/default/internal/skins/default-live-video/skin.css +713 -604
  274. package/dist/default/internal/skins/default-live-video/template.js +18 -19
  275. package/dist/default/internal/skins/default-video/register.js +1 -2
  276. package/dist/default/internal/skins/default-video/skin.css +506 -427
  277. package/dist/default/internal/skins/default-video/template.js +33 -33
  278. package/dist/default/internal/skins/minimal-audio/register.js +0 -2
  279. package/dist/default/internal/skins/minimal-audio/skin.css +641 -400
  280. package/dist/default/internal/skins/minimal-audio/template.js +12 -14
  281. package/dist/default/internal/skins/minimal-live-audio/register.js +0 -2
  282. package/dist/default/internal/skins/minimal-live-audio/skin.css +436 -354
  283. package/dist/default/internal/skins/minimal-live-audio/template.js +5 -7
  284. package/dist/default/internal/skins/minimal-live-video/register.js +1 -2
  285. package/dist/default/internal/skins/minimal-live-video/skin.css +916 -785
  286. package/dist/default/internal/skins/minimal-live-video/template.js +18 -19
  287. package/dist/default/internal/skins/minimal-video/register.js +1 -2
  288. package/dist/default/internal/skins/minimal-video/skin.css +742 -633
  289. package/dist/default/internal/skins/minimal-video/template.js +33 -33
  290. package/dist/default/internal/skins/properties.css +11 -0
  291. package/dist/default/media/background-video/adapter.js +0 -2
  292. package/dist/default/media/background-video/template.js +0 -2
  293. package/dist/default/media/cloudflare-video/adapter.js +0 -2
  294. package/dist/default/media/dash-video/adapter.js +0 -2
  295. package/dist/default/media/hls-audio/adapter.js +0 -2
  296. package/dist/default/media/hls-background-video/adapter.js +0 -2
  297. package/dist/default/media/hls-video/adapter.js +0 -2
  298. package/dist/default/media/hlsjs-video/adapter.js +0 -2
  299. package/dist/default/media/mux-audio/hls-js.js +0 -2
  300. package/dist/default/media/mux-audio/mixin.js +0 -2
  301. package/dist/default/media/mux-audio/spf.js +0 -2
  302. package/dist/default/media/mux-video/hls-js.js +0 -2
  303. package/dist/default/media/mux-video/mixin.js +0 -2
  304. package/dist/default/media/mux-video/spf.js +0 -2
  305. package/dist/default/media/native-hls-video/adapter.js +0 -2
  306. package/dist/default/media/shaka-video/adapter.js +0 -2
  307. package/dist/default/media/spotify-audio/adapter.js +0 -2
  308. package/dist/default/media/tiktok-video/adapter.js +0 -2
  309. package/dist/default/media/twitch-video/adapter.js +0 -2
  310. package/dist/default/media/vimeo-video/adapter.js +0 -2
  311. package/dist/default/media/wistia-video/adapter.js +0 -2
  312. package/dist/default/media/youtube-video/adapter.js +0 -2
  313. package/dist/default/player/context.js +0 -2
  314. package/dist/default/player/controller.js +0 -2
  315. package/dist/default/player/create-player.js +0 -2
  316. package/dist/default/player/element.js +0 -2
  317. package/dist/default/player/popup-group-context.js +0 -2
  318. package/dist/default/presets/audio/minimal-skin.js +0 -2
  319. package/dist/default/presets/audio/player.js +0 -2
  320. package/dist/default/presets/audio/skin.js +0 -2
  321. package/dist/default/presets/background/player.js +0 -2
  322. package/dist/default/presets/background/skin.js +2 -2
  323. package/dist/default/presets/live-audio/minimal-skin.js +0 -2
  324. package/dist/default/presets/live-audio/player.js +0 -2
  325. package/dist/default/presets/live-audio/skin.js +0 -2
  326. package/dist/default/presets/live-video/minimal-skin.js +0 -2
  327. package/dist/default/presets/live-video/player.js +0 -2
  328. package/dist/default/presets/live-video/skin.js +0 -2
  329. package/dist/default/presets/skin.js +14 -5
  330. package/dist/default/presets/video/minimal-skin.js +0 -2
  331. package/dist/default/presets/video/player.js +0 -2
  332. package/dist/default/presets/video/skin.js +0 -2
  333. package/dist/default/registration/safe-define.js +0 -2
  334. package/dist/default/registration/ui-compounds.js +0 -2
  335. package/dist/default/store/media-attach-mixin.js +0 -2
  336. package/dist/default/ui/airplay-button/element.js +0 -2
  337. package/dist/default/ui/alert-dialog/element.js +0 -2
  338. package/dist/default/ui/audio-track-radio-group/element.js +5 -2
  339. package/dist/default/ui/buffering-indicator/element.js +0 -2
  340. package/dist/default/ui/captions-button/element.js +0 -2
  341. package/dist/default/ui/captions-radio-group/element.js +5 -2
  342. package/dist/default/ui/cast-button/element.js +0 -2
  343. package/dist/default/ui/command-for.js +0 -2
  344. package/dist/default/ui/container/element.js +0 -2
  345. package/dist/default/ui/context-part-element.js +0 -2
  346. package/dist/default/ui/controls/backdrop.js +0 -2
  347. package/dist/default/ui/controls/content.js +0 -2
  348. package/dist/default/ui/controls/context.js +0 -2
  349. package/dist/default/ui/controls/element.js +4 -2
  350. package/dist/default/ui/controls/group.js +0 -2
  351. package/dist/default/ui/dialog/backdrop.js +0 -2
  352. package/dist/default/ui/dialog/close.js +1 -2
  353. package/dist/default/ui/dialog/context.js +0 -2
  354. package/dist/default/ui/dialog/description.js +4 -2
  355. package/dist/default/ui/dialog/element.js +0 -2
  356. package/dist/default/ui/dialog/popup.js +0 -2
  357. package/dist/default/ui/dialog/title.js +1 -2
  358. package/dist/default/ui/error-dialog/element.js +0 -2
  359. package/dist/default/ui/fullscreen-button/element.js +0 -2
  360. package/dist/default/ui/gesture/element.js +0 -2
  361. package/dist/default/ui/hotkey/aria-key-shortcuts-controller.js +0 -2
  362. package/dist/default/ui/hotkey/element.js +0 -2
  363. package/dist/default/ui/input-indicator/element.js +0 -2
  364. package/dist/default/ui/input-indicator/live-indicator.js +0 -2
  365. package/dist/default/ui/live-button/element.js +0 -2
  366. package/dist/default/ui/media-button-element.js +0 -2
  367. package/dist/default/ui/media-ui-element.js +0 -2
  368. package/dist/default/ui/menu/checkbox-item.js +6 -3
  369. package/dist/default/ui/menu/content.js +1 -3
  370. package/dist/default/ui/menu/context.js +0 -2
  371. package/dist/default/ui/menu/element.js +0 -2
  372. package/dist/default/ui/menu/group-controller.js +0 -2
  373. package/dist/default/ui/menu/group-label.js +1 -2
  374. package/dist/default/ui/menu/group.js +4 -2
  375. package/dist/default/ui/menu/item-indicator.js +4 -2
  376. package/dist/default/ui/menu/item.js +4 -2
  377. package/dist/default/ui/menu/radio-group.js +1 -2
  378. package/dist/default/ui/menu/radio-item.js +4 -2
  379. package/dist/default/ui/menu/separator.js +1 -2
  380. package/dist/default/ui/mute-button/element.js +0 -2
  381. package/dist/default/ui/pip-button/element.js +0 -2
  382. package/dist/default/ui/play-button/element.js +0 -2
  383. package/dist/default/ui/playback-rate-button/element.js +0 -2
  384. package/dist/default/ui/playback-rate-radio-group/element.js +5 -2
  385. package/dist/default/ui/popover/element.js +0 -2
  386. package/dist/default/ui/position-controller.js +0 -2
  387. package/dist/default/ui/poster/element.js +0 -2
  388. package/dist/default/ui/quality-radio-group/element.js +6 -2
  389. package/dist/default/ui/radio-group/context.js +0 -2
  390. package/dist/default/ui/radio-group/element.js +0 -2
  391. package/dist/default/ui/radio-options/controller.js +0 -2
  392. package/dist/default/ui/seek-button/element.js +0 -2
  393. package/dist/default/ui/seek-indicator/element.js +0 -2
  394. package/dist/default/ui/seek-indicator/value.js +0 -2
  395. package/dist/default/ui/slider/buffer.js +0 -2
  396. package/dist/default/ui/slider/context.js +0 -2
  397. package/dist/default/ui/slider/element.js +0 -2
  398. package/dist/default/ui/slider/fill.js +0 -2
  399. package/dist/default/ui/slider/preview.js +0 -2
  400. package/dist/default/ui/slider/thumb.js +0 -2
  401. package/dist/default/ui/slider/thumbnail.js +4 -2
  402. package/dist/default/ui/slider/track.js +0 -2
  403. package/dist/default/ui/slider/value.js +1 -2
  404. package/dist/default/ui/status-announcer/element.js +0 -2
  405. package/dist/default/ui/status-indicator/element.js +0 -2
  406. package/dist/default/ui/status-indicator/value.js +0 -2
  407. package/dist/default/ui/text/element.js +0 -2
  408. package/dist/default/ui/thumbnail/element.js +28 -8
  409. package/dist/default/ui/time/element.js +0 -2
  410. package/dist/default/ui/time/group.js +1 -2
  411. package/dist/default/ui/time/separator.js +0 -2
  412. package/dist/default/ui/time-slider/chapter-title.js +0 -2
  413. package/dist/default/ui/time-slider/chapters.js +0 -2
  414. package/dist/default/ui/time-slider/element.js +5 -4
  415. package/dist/default/ui/title/element.js +5 -9
  416. package/dist/default/ui/tooltip/context.js +0 -2
  417. package/dist/default/ui/tooltip/element.js +0 -2
  418. package/dist/default/ui/tooltip/group.js +0 -2
  419. package/dist/default/ui/tooltip/label.js +0 -2
  420. package/dist/default/ui/tooltip/shortcut.js +0 -2
  421. package/dist/default/ui/ui-element.js +0 -2
  422. package/dist/default/ui/volume-indicator/element.js +0 -2
  423. package/dist/default/ui/volume-indicator/fill.js +0 -2
  424. package/dist/default/ui/volume-indicator/value.js +0 -2
  425. package/dist/default/ui/volume-popover/element.js +0 -2
  426. package/dist/default/ui/volume-slider/element.js +0 -2
  427. package/dist/dev/define/audio/minimal-skin.css +663 -414
  428. package/dist/dev/define/audio/minimal-skin2.js +1 -1
  429. package/dist/dev/define/audio/minimal-skin2.js.map +1 -1
  430. package/dist/dev/define/audio/skin.css +409 -205
  431. package/dist/dev/define/audio/skin2.js +1 -1
  432. package/dist/dev/define/audio/skin2.js.map +1 -1
  433. package/dist/dev/define/global.css +13 -0
  434. package/dist/dev/define/global.js +1 -1
  435. package/dist/dev/define/global.js.map +1 -1
  436. package/dist/dev/define/live-audio/minimal-skin.css +458 -368
  437. package/dist/dev/define/live-audio/minimal-skin2.js +1 -1
  438. package/dist/dev/define/live-audio/minimal-skin2.js.map +1 -1
  439. package/dist/dev/define/live-audio/skin.css +221 -159
  440. package/dist/dev/define/live-audio/skin2.js +1 -1
  441. package/dist/dev/define/live-audio/skin2.js.map +1 -1
  442. package/dist/dev/define/live-video/minimal-skin.css +1002 -863
  443. package/dist/dev/define/live-video/minimal-skin2.js +1 -1
  444. package/dist/dev/define/live-video/minimal-skin2.js.map +1 -1
  445. package/dist/dev/define/live-video/skin.css +804 -687
  446. package/dist/dev/define/live-video/skin2.js +1 -1
  447. package/dist/dev/define/live-video/skin2.js.map +1 -1
  448. package/dist/dev/define/shadow.css +22 -0
  449. package/dist/dev/define/shadow.js +6 -0
  450. package/dist/dev/define/shadow.js.map +1 -0
  451. package/dist/dev/define/video/minimal-skin.css +764 -647
  452. package/dist/dev/define/video/minimal-skin2.js +1 -1
  453. package/dist/dev/define/video/minimal-skin2.js.map +1 -1
  454. package/dist/dev/define/video/skin.css +528 -441
  455. package/dist/dev/define/video/skin2.js +1 -1
  456. package/dist/dev/define/video/skin2.js.map +1 -1
  457. package/dist/dev/i18n/index.d.ts +2 -2
  458. package/dist/dev/i18n/index.js +2 -2
  459. package/dist/dev/index.d.ts +3 -3
  460. package/dist/dev/index.js +2 -2
  461. package/dist/dev/internal/skins/default-audio/skin.css +387 -191
  462. package/dist/dev/internal/skins/default-audio/template.js +12 -12
  463. package/dist/dev/internal/skins/default-audio/template.js.map +1 -1
  464. package/dist/dev/internal/skins/default-live-audio/skin.css +199 -145
  465. package/dist/dev/internal/skins/default-live-audio/template.js +5 -5
  466. package/dist/dev/internal/skins/default-live-audio/template.js.map +1 -1
  467. package/dist/dev/internal/skins/default-live-video/register.d.ts +1 -0
  468. package/dist/dev/internal/skins/default-live-video/register.js +1 -0
  469. package/dist/dev/internal/skins/default-live-video/register.js.map +1 -1
  470. package/dist/dev/internal/skins/default-live-video/skin.css +713 -604
  471. package/dist/dev/internal/skins/default-live-video/template.js +18 -17
  472. package/dist/dev/internal/skins/default-live-video/template.js.map +1 -1
  473. package/dist/dev/internal/skins/default-video/register.d.ts +1 -0
  474. package/dist/dev/internal/skins/default-video/register.js +1 -0
  475. package/dist/dev/internal/skins/default-video/register.js.map +1 -1
  476. package/dist/dev/internal/skins/default-video/skin.css +506 -427
  477. package/dist/dev/internal/skins/default-video/template.js +33 -31
  478. package/dist/dev/internal/skins/default-video/template.js.map +1 -1
  479. package/dist/dev/internal/skins/minimal-audio/skin.css +641 -400
  480. package/dist/dev/internal/skins/minimal-audio/template.js +12 -12
  481. package/dist/dev/internal/skins/minimal-audio/template.js.map +1 -1
  482. package/dist/dev/internal/skins/minimal-live-audio/skin.css +436 -354
  483. package/dist/dev/internal/skins/minimal-live-audio/template.js +5 -5
  484. package/dist/dev/internal/skins/minimal-live-audio/template.js.map +1 -1
  485. package/dist/dev/internal/skins/minimal-live-video/register.d.ts +1 -0
  486. package/dist/dev/internal/skins/minimal-live-video/register.js +1 -0
  487. package/dist/dev/internal/skins/minimal-live-video/register.js.map +1 -1
  488. package/dist/dev/internal/skins/minimal-live-video/skin.css +916 -785
  489. package/dist/dev/internal/skins/minimal-live-video/template.js +18 -17
  490. package/dist/dev/internal/skins/minimal-live-video/template.js.map +1 -1
  491. package/dist/dev/internal/skins/minimal-video/register.d.ts +1 -0
  492. package/dist/dev/internal/skins/minimal-video/register.js +1 -0
  493. package/dist/dev/internal/skins/minimal-video/register.js.map +1 -1
  494. package/dist/dev/internal/skins/minimal-video/skin.css +742 -633
  495. package/dist/dev/internal/skins/minimal-video/template.js +33 -31
  496. package/dist/dev/internal/skins/minimal-video/template.js.map +1 -1
  497. package/dist/dev/internal/skins/properties.css +11 -0
  498. package/dist/dev/player/context.d.ts +1 -0
  499. package/dist/dev/player/context.js.map +1 -1
  500. package/dist/dev/presets/background/skin.js +2 -0
  501. package/dist/dev/presets/background/skin.js.map +1 -1
  502. package/dist/dev/presets/skin.js +14 -3
  503. package/dist/dev/presets/skin.js.map +1 -1
  504. package/dist/dev/ui/audio-track-radio-group/element.d.ts +5 -0
  505. package/dist/dev/ui/audio-track-radio-group/element.js +5 -0
  506. package/dist/dev/ui/audio-track-radio-group/element.js.map +1 -1
  507. package/dist/dev/ui/captions-radio-group/element.d.ts +5 -0
  508. package/dist/dev/ui/captions-radio-group/element.js +5 -0
  509. package/dist/dev/ui/captions-radio-group/element.js.map +1 -1
  510. package/dist/dev/ui/controls/element.d.ts +4 -0
  511. package/dist/dev/ui/controls/element.js +4 -0
  512. package/dist/dev/ui/controls/element.js.map +1 -1
  513. package/dist/dev/ui/dialog/close.d.ts +1 -0
  514. package/dist/dev/ui/dialog/close.js +1 -0
  515. package/dist/dev/ui/dialog/close.js.map +1 -1
  516. package/dist/dev/ui/dialog/description.d.ts +4 -0
  517. package/dist/dev/ui/dialog/description.js +4 -0
  518. package/dist/dev/ui/dialog/description.js.map +1 -1
  519. package/dist/dev/ui/dialog/title.d.ts +1 -0
  520. package/dist/dev/ui/dialog/title.js +1 -0
  521. package/dist/dev/ui/dialog/title.js.map +1 -1
  522. package/dist/dev/ui/menu/checkbox-item.d.ts +6 -1
  523. package/dist/dev/ui/menu/checkbox-item.js +6 -1
  524. package/dist/dev/ui/menu/checkbox-item.js.map +1 -1
  525. package/dist/dev/ui/menu/content.js +1 -1
  526. package/dist/dev/ui/menu/content.js.map +1 -1
  527. package/dist/dev/ui/menu/group-label.d.ts +1 -0
  528. package/dist/dev/ui/menu/group-label.js +1 -0
  529. package/dist/dev/ui/menu/group-label.js.map +1 -1
  530. package/dist/dev/ui/menu/group.d.ts +4 -0
  531. package/dist/dev/ui/menu/group.js +4 -0
  532. package/dist/dev/ui/menu/group.js.map +1 -1
  533. package/dist/dev/ui/menu/item-indicator.d.ts +4 -0
  534. package/dist/dev/ui/menu/item-indicator.js +4 -0
  535. package/dist/dev/ui/menu/item-indicator.js.map +1 -1
  536. package/dist/dev/ui/menu/item.d.ts +4 -0
  537. package/dist/dev/ui/menu/item.js +4 -0
  538. package/dist/dev/ui/menu/item.js.map +1 -1
  539. package/dist/dev/ui/menu/radio-group.d.ts +1 -0
  540. package/dist/dev/ui/menu/radio-group.js +1 -0
  541. package/dist/dev/ui/menu/radio-group.js.map +1 -1
  542. package/dist/dev/ui/menu/radio-item.d.ts +4 -0
  543. package/dist/dev/ui/menu/radio-item.js +4 -0
  544. package/dist/dev/ui/menu/radio-item.js.map +1 -1
  545. package/dist/dev/ui/menu/separator.d.ts +1 -0
  546. package/dist/dev/ui/menu/separator.js +1 -0
  547. package/dist/dev/ui/menu/separator.js.map +1 -1
  548. package/dist/dev/ui/playback-rate-radio-group/element.d.ts +5 -0
  549. package/dist/dev/ui/playback-rate-radio-group/element.js +5 -0
  550. package/dist/dev/ui/playback-rate-radio-group/element.js.map +1 -1
  551. package/dist/dev/ui/quality-radio-group/element.d.ts +6 -0
  552. package/dist/dev/ui/quality-radio-group/element.js +6 -0
  553. package/dist/dev/ui/quality-radio-group/element.js.map +1 -1
  554. package/dist/dev/ui/slider/thumbnail.d.ts +4 -0
  555. package/dist/dev/ui/slider/thumbnail.js +4 -0
  556. package/dist/dev/ui/slider/thumbnail.js.map +1 -1
  557. package/dist/dev/ui/slider/value.d.ts +1 -0
  558. package/dist/dev/ui/slider/value.js +1 -0
  559. package/dist/dev/ui/slider/value.js.map +1 -1
  560. package/dist/dev/ui/thumbnail/element.d.ts +3 -1
  561. package/dist/dev/ui/thumbnail/element.js +28 -6
  562. package/dist/dev/ui/thumbnail/element.js.map +1 -1
  563. package/dist/dev/ui/time/group.d.ts +1 -0
  564. package/dist/dev/ui/time/group.js +1 -0
  565. package/dist/dev/ui/time/group.js.map +1 -1
  566. package/dist/dev/ui/time-slider/element.js +5 -2
  567. package/dist/dev/ui/time-slider/element.js.map +1 -1
  568. package/dist/dev/ui/title/element.d.ts +1 -2
  569. package/dist/dev/ui/title/element.js +5 -7
  570. package/dist/dev/ui/title/element.js.map +1 -1
  571. package/docs/README.md +1 -1
  572. package/docs/guides/accessibility.md +93 -0
  573. package/docs/{concepts/overview.md → guides/architecture.md} +20 -21
  574. package/docs/{how-to → guides}/autoplay.md +42 -47
  575. package/docs/{how-to/add-a-background-video.md → guides/background-video.md} +36 -51
  576. package/docs/guides/browser-support.md +145 -0
  577. package/docs/guides/build-with-ai.md +167 -0
  578. package/docs/guides/build-your-own-component.md +245 -0
  579. package/docs/{concepts → guides}/bundlers.md +13 -5
  580. package/docs/guides/captions.md +140 -0
  581. package/docs/{how-to/cast-to-airplay-and-chromecast.md → guides/casting.md} +40 -39
  582. package/docs/guides/cdn.md +102 -0
  583. package/docs/guides/content-security-policy.md +37 -0
  584. package/docs/{how-to/show-and-hide-controls.md → guides/controls.md} +38 -37
  585. package/docs/guides/customize-skins.md +141 -0
  586. package/docs/{concepts → guides}/features.md +22 -46
  587. package/docs/guides/fullscreen.md +145 -0
  588. package/docs/guides/installation-cdn.md +164 -0
  589. package/docs/guides/installation-shadcn.md +305 -0
  590. package/docs/guides/installation-svelte.md +198 -0
  591. package/docs/guides/installation-vue.md +229 -0
  592. package/docs/guides/installation.md +186 -0
  593. package/docs/{how-to/internationalize-the-player.md → guides/internationalization.md} +84 -103
  594. package/docs/guides/keyboard-shortcuts.md +98 -0
  595. package/docs/guides/live-streams.md +110 -0
  596. package/docs/guides/llms.txt +79 -0
  597. package/docs/{concepts → guides}/media-sources.md +66 -260
  598. package/docs/{how-to → guides}/migrate-from-media-chrome.md +79 -249
  599. package/docs/{how-to → guides}/migrate-from-mux-player.md +146 -321
  600. package/docs/guides/migrate-from-plyr.md +296 -0
  601. package/docs/guides/migrate-from-video-js-8.md +467 -0
  602. package/docs/{concepts → guides}/mux-data.md +26 -27
  603. package/docs/{how-to/use-picture-in-picture.md → guides/picture-in-picture.md} +31 -33
  604. package/docs/guides/playback-errors.md +129 -0
  605. package/docs/{how-to/add-a-poster-and-loading-placeholder.md → guides/poster.md} +24 -34
  606. package/docs/{concepts → guides}/presets.md +17 -131
  607. package/docs/{how-to/add-quality-selector.md → guides/quality.md} +41 -41
  608. package/docs/{how-to/self-host-the-player.md → guides/self-hosting.md} +31 -41
  609. package/docs/guides/skins.md +68 -0
  610. package/docs/{how-to/use-videojs-with-svelte.md → guides/svelte.md} +15 -18
  611. package/docs/guides/thumbnails.md +183 -0
  612. package/docs/{concepts → guides}/typescript.md +10 -3
  613. package/docs/{concepts → guides}/ui-components.md +8 -14
  614. package/docs/{how-to/remember-user-preferences.md → guides/user-preferences.md} +25 -28
  615. package/docs/guides/v10-roadmap.md +92 -0
  616. package/docs/{how-to/use-videojs-with-vue.md → guides/vue.md} +19 -22
  617. package/docs/{concepts → guides}/why-videojs.md +36 -17
  618. package/docs/llms.txt +253 -181
  619. package/docs/reference/api/aria-key-shortcuts-controller.md +50 -0
  620. package/docs/reference/{create-i18n.md → api/create-i18n.md} +13 -52
  621. package/docs/reference/{create-selector.md → api/create-selector.md} +11 -33
  622. package/docs/reference/api/create-translator.md +36 -0
  623. package/docs/reference/api/error-codes.md +25 -0
  624. package/docs/reference/{feature-audio-track.md → api/feature-audio-track.md} +10 -36
  625. package/docs/reference/{feature-buffer.md → api/feature-buffer.md} +8 -31
  626. package/docs/reference/{feature-controls.md → api/feature-controls.md} +12 -58
  627. package/docs/reference/{feature-error.md → api/feature-error.md} +10 -36
  628. package/docs/reference/{feature-fullscreen.md → api/feature-fullscreen.md} +14 -69
  629. package/docs/reference/{feature-live.md → api/feature-live.md} +15 -42
  630. package/docs/reference/{feature-metadata.md → api/feature-metadata.md} +20 -80
  631. package/docs/reference/{feature-orientation-lock.md → api/feature-orientation-lock.md} +16 -64
  632. package/docs/reference/{feature-pip.md → api/feature-pip.md} +13 -66
  633. package/docs/reference/{feature-playback-rate.md → api/feature-playback-rate.md} +11 -46
  634. package/docs/reference/{feature-playback.md → api/feature-playback.md} +15 -86
  635. package/docs/reference/{feature-quality.md → api/feature-quality.md} +11 -46
  636. package/docs/reference/{feature-remote-playback.md → api/feature-remote-playback.md} +12 -47
  637. package/docs/reference/{feature-source.md → api/feature-source.md} +11 -46
  638. package/docs/reference/{feature-stream-type.md → api/feature-stream-type.md} +7 -23
  639. package/docs/reference/api/feature-text-tracks.md +54 -0
  640. package/docs/reference/{feature-time.md → api/feature-time.md} +12 -56
  641. package/docs/reference/{feature-volume.md → api/feature-volume.md} +14 -76
  642. package/docs/reference/{get-i18n-translations.md → api/get-i18n-translations.md} +11 -41
  643. package/docs/reference/{has-registered-locale.md → api/has-registered-locale.md} +7 -29
  644. package/docs/reference/{html-create-player.md → api/html-create-player.md} +45 -203
  645. package/docs/reference/{i-18-n-controller.md → api/i18n-controller.md} +12 -62
  646. package/docs/reference/api/llms.txt +74 -0
  647. package/docs/reference/{media-i18n.md → api/media-i18n.md} +8 -16
  648. package/docs/reference/{media-text.md → api/media-text.md} +3 -7
  649. package/docs/reference/{on-i18n-registry-change.md → api/on-i18n-registry-change.md} +9 -37
  650. package/docs/reference/{player-controller.md → api/player-controller.md} +36 -142
  651. package/docs/reference/{register-i18n.md → api/register-i18n.md} +9 -42
  652. package/docs/reference/api/snapshot-controller.md +95 -0
  653. package/docs/reference/api/store-controller.md +85 -0
  654. package/docs/reference/{subscription-controller.md → api/subscription-controller.md} +12 -70
  655. package/docs/reference/api/translation-phrases.md +107 -0
  656. package/docs/reference/api/vjs8-legacy-component.md +21 -0
  657. package/docs/reference/api/vjs8-legacy-get-player.md +21 -0
  658. package/docs/reference/api/vjs8-legacy-init.md +21 -0
  659. package/docs/reference/api/vjs8-legacy-options.md +21 -0
  660. package/docs/reference/api/vjs8-legacy-plugin.md +21 -0
  661. package/docs/reference/{airplay-button.md → components/airplay-button.md} +41 -194
  662. package/docs/reference/{alert-dialog.md → components/alert-dialog.md} +91 -280
  663. package/docs/reference/components/audio-minimal-skin.md +39 -0
  664. package/docs/reference/components/audio-skin.md +39 -0
  665. package/docs/reference/{audio-track-radio-group.md → components/audio-track-radio-group.md} +47 -219
  666. package/docs/reference/{audio.md → components/audio.md} +16 -17
  667. package/docs/reference/components/background-video-skin.md +37 -0
  668. package/docs/reference/{background-video.md → components/background-video.md} +25 -53
  669. package/docs/reference/{buffering-indicator.md → components/buffering-indicator.md} +21 -65
  670. package/docs/reference/{captions-button.md → components/captions-button.md} +35 -171
  671. package/docs/reference/{captions-radio-group.md → components/captions-radio-group.md} +48 -227
  672. package/docs/reference/{cast-button.md → components/cast-button.md} +39 -179
  673. package/docs/reference/components/cloudflare-video.md +157 -0
  674. package/docs/reference/{controls.md → components/controls.md} +52 -171
  675. package/docs/reference/components/dash-video.md +111 -0
  676. package/docs/reference/{dialog.md → components/dialog.md} +101 -314
  677. package/docs/reference/{error-dialog.md → components/error-dialog.md} +66 -162
  678. package/docs/reference/{fullscreen-button.md → components/fullscreen-button.md} +35 -153
  679. package/docs/reference/{gesture.md → components/gesture.md} +28 -130
  680. package/docs/reference/components/google-cast.md +47 -0
  681. package/docs/reference/components/hls-audio.md +87 -0
  682. package/docs/reference/components/hls-background-video.md +51 -0
  683. package/docs/reference/components/hls-video.md +110 -0
  684. package/docs/reference/components/hlsjs-video.md +126 -0
  685. package/docs/reference/{hotkey.md → components/hotkey.md} +28 -115
  686. package/docs/reference/{live-audio-minimal-skin.md → components/live-audio-minimal-skin.md} +12 -16
  687. package/docs/reference/{live-audio-skin.md → components/live-audio-skin.md} +12 -16
  688. package/docs/reference/{live-button.md → components/live-button.md} +36 -156
  689. package/docs/reference/components/live-video-minimal-skin.md +47 -0
  690. package/docs/reference/components/live-video-skin.md +47 -0
  691. package/docs/reference/components/llms.txt +122 -0
  692. package/docs/reference/{menu.md → components/menu.md} +123 -541
  693. package/docs/reference/{mute-button.md → components/mute-button.md} +50 -200
  694. package/docs/reference/components/mux-audio.md +127 -0
  695. package/docs/reference/{mux-background-video.md → components/mux-background-video.md} +9 -15
  696. package/docs/reference/components/mux-data.md +51 -0
  697. package/docs/reference/components/mux-video.md +220 -0
  698. package/docs/reference/components/native-hls-video.md +128 -0
  699. package/docs/reference/{pip-button.md → components/pip-button.md} +35 -153
  700. package/docs/reference/{play-button.md → components/play-button.md} +30 -134
  701. package/docs/reference/{playback-rate-button.md → components/playback-rate-button.md} +25 -105
  702. package/docs/reference/{playback-rate-radio-group.md → components/playback-rate-radio-group.md} +47 -223
  703. package/docs/reference/{player-container.md → components/player-container.md} +16 -27
  704. package/docs/reference/{player.md → components/player.md} +14 -24
  705. package/docs/reference/components/popover.md +193 -0
  706. package/docs/reference/{poster.md → components/poster.md} +42 -162
  707. package/docs/reference/{quality-radio-group.md → components/quality-radio-group.md} +47 -219
  708. package/docs/reference/{seek-button.md → components/seek-button.md} +26 -127
  709. package/docs/reference/{seek-indicator.md → components/seek-indicator.md} +55 -233
  710. package/docs/reference/components/shaka-video.md +161 -0
  711. package/docs/reference/components/slider.md +414 -0
  712. package/docs/reference/components/spotify-audio.md +144 -0
  713. package/docs/reference/{status-announcer.md → components/status-announcer.md} +37 -122
  714. package/docs/reference/{status-indicator.md → components/status-indicator.md} +57 -278
  715. package/docs/reference/components/thumbnail.md +321 -0
  716. package/docs/reference/components/tiktok-video.md +165 -0
  717. package/docs/reference/{time-slider.md → components/time-slider.md} +136 -595
  718. package/docs/reference/{time.md → components/time.md} +96 -286
  719. package/docs/reference/{title.md → components/title.md} +31 -70
  720. package/docs/reference/components/tooltip.md +274 -0
  721. package/docs/reference/components/twitch-video.md +161 -0
  722. package/docs/reference/components/video-minimal-skin.md +51 -0
  723. package/docs/reference/components/video-skin.md +51 -0
  724. package/docs/reference/{video.md → components/video.md} +14 -17
  725. package/docs/reference/components/vimeo-video.md +173 -0
  726. package/docs/reference/{volume-indicator.md → components/volume-indicator.md} +78 -291
  727. package/docs/reference/components/volume-popover.md +232 -0
  728. package/docs/reference/components/volume-slider.md +331 -0
  729. package/docs/reference/{wistia-video.md → components/wistia-video.md} +22 -30
  730. package/docs/reference/components/youtube-video.md +163 -0
  731. package/package.json +39 -38
  732. package/dist/default/define/audio/minimal-skin.js.map +0 -1
  733. package/dist/default/define/audio/minimal-skin2.js.map +0 -1
  734. package/dist/default/define/audio/minimal-ui.js.map +0 -1
  735. package/dist/default/define/audio/player.js.map +0 -1
  736. package/dist/default/define/audio/skin.js.map +0 -1
  737. package/dist/default/define/audio/skin2.js.map +0 -1
  738. package/dist/default/define/audio/ui.js.map +0 -1
  739. package/dist/default/define/background/player.js.map +0 -1
  740. package/dist/default/define/background/skin.js.map +0 -1
  741. package/dist/default/define/background/skin2.js.map +0 -1
  742. package/dist/default/define/extensions/google-cast.js.map +0 -1
  743. package/dist/default/define/extensions/mux-data.js.map +0 -1
  744. package/dist/default/define/global.js.map +0 -1
  745. package/dist/default/define/i18n.js.map +0 -1
  746. package/dist/default/define/live-audio/minimal-skin.js.map +0 -1
  747. package/dist/default/define/live-audio/minimal-skin2.js.map +0 -1
  748. package/dist/default/define/live-audio/minimal-ui.js.map +0 -1
  749. package/dist/default/define/live-audio/player.js.map +0 -1
  750. package/dist/default/define/live-audio/skin.js.map +0 -1
  751. package/dist/default/define/live-audio/skin2.js.map +0 -1
  752. package/dist/default/define/live-audio/ui.js.map +0 -1
  753. package/dist/default/define/live-video/minimal-skin.js.map +0 -1
  754. package/dist/default/define/live-video/minimal-skin2.js.map +0 -1
  755. package/dist/default/define/live-video/minimal-ui.js.map +0 -1
  756. package/dist/default/define/live-video/player.js.map +0 -1
  757. package/dist/default/define/live-video/skin.js.map +0 -1
  758. package/dist/default/define/live-video/skin2.js.map +0 -1
  759. package/dist/default/define/live-video/ui.js.map +0 -1
  760. package/dist/default/define/media/background-video.js.map +0 -1
  761. package/dist/default/define/media/cloudflare-video.js.map +0 -1
  762. package/dist/default/define/media/dash-video.js.map +0 -1
  763. package/dist/default/define/media/hls-audio.js.map +0 -1
  764. package/dist/default/define/media/hls-background-video.js.map +0 -1
  765. package/dist/default/define/media/hls-video.js.map +0 -1
  766. package/dist/default/define/media/hlsjs-video.js.map +0 -1
  767. package/dist/default/define/media/mux-audio/hls-js.js.map +0 -1
  768. package/dist/default/define/media/mux-audio/spf.js.map +0 -1
  769. package/dist/default/define/media/mux-background-video.js.map +0 -1
  770. package/dist/default/define/media/mux-video/hls-js.js.map +0 -1
  771. package/dist/default/define/media/mux-video/spf.js.map +0 -1
  772. package/dist/default/define/media/native-hls-video.js.map +0 -1
  773. package/dist/default/define/media/shaka-video.js.map +0 -1
  774. package/dist/default/define/media/spotify-audio.js.map +0 -1
  775. package/dist/default/define/media/tiktok-video.js.map +0 -1
  776. package/dist/default/define/media/twitch-video.js.map +0 -1
  777. package/dist/default/define/media/vimeo-video.js.map +0 -1
  778. package/dist/default/define/media/wistia-video.js.map +0 -1
  779. package/dist/default/define/media/youtube-video.js.map +0 -1
  780. package/dist/default/define/shared.css +0 -27
  781. package/dist/default/define/shared.js +0 -6
  782. package/dist/default/define/shared.js.map +0 -1
  783. package/dist/default/define/ui/airplay-button.js.map +0 -1
  784. package/dist/default/define/ui/alert-dialog.js.map +0 -1
  785. package/dist/default/define/ui/audio-track-radio-group.js.map +0 -1
  786. package/dist/default/define/ui/buffering-indicator.js.map +0 -1
  787. package/dist/default/define/ui/captions-button.js.map +0 -1
  788. package/dist/default/define/ui/captions-radio-group.js.map +0 -1
  789. package/dist/default/define/ui/cast-button.js.map +0 -1
  790. package/dist/default/define/ui/container.js.map +0 -1
  791. package/dist/default/define/ui/controls-backdrop.js.map +0 -1
  792. package/dist/default/define/ui/controls-content.js.map +0 -1
  793. package/dist/default/define/ui/controls-group.js.map +0 -1
  794. package/dist/default/define/ui/controls.js.map +0 -1
  795. package/dist/default/define/ui/dialog-backdrop.js.map +0 -1
  796. package/dist/default/define/ui/dialog-close.js.map +0 -1
  797. package/dist/default/define/ui/dialog-description.js.map +0 -1
  798. package/dist/default/define/ui/dialog-popup.js.map +0 -1
  799. package/dist/default/define/ui/dialog-title.js.map +0 -1
  800. package/dist/default/define/ui/dialog.js.map +0 -1
  801. package/dist/default/define/ui/error-dialog.js.map +0 -1
  802. package/dist/default/define/ui/fullscreen-button.js.map +0 -1
  803. package/dist/default/define/ui/gesture.js.map +0 -1
  804. package/dist/default/define/ui/hotkey.js.map +0 -1
  805. package/dist/default/define/ui/live-button.js.map +0 -1
  806. package/dist/default/define/ui/menu-checkbox-item.js.map +0 -1
  807. package/dist/default/define/ui/menu-content.js.map +0 -1
  808. package/dist/default/define/ui/menu-group-label.js.map +0 -1
  809. package/dist/default/define/ui/menu-group.js.map +0 -1
  810. package/dist/default/define/ui/menu-item-indicator.js.map +0 -1
  811. package/dist/default/define/ui/menu-item.js.map +0 -1
  812. package/dist/default/define/ui/menu-radio-group.js.map +0 -1
  813. package/dist/default/define/ui/menu-radio-item.js.map +0 -1
  814. package/dist/default/define/ui/menu-separator.js.map +0 -1
  815. package/dist/default/define/ui/menu.js.map +0 -1
  816. package/dist/default/define/ui/mute-button.js.map +0 -1
  817. package/dist/default/define/ui/pip-button.js.map +0 -1
  818. package/dist/default/define/ui/play-button.js.map +0 -1
  819. package/dist/default/define/ui/playback-rate-button.js.map +0 -1
  820. package/dist/default/define/ui/playback-rate-radio-group.js.map +0 -1
  821. package/dist/default/define/ui/popover.js.map +0 -1
  822. package/dist/default/define/ui/poster.js.map +0 -1
  823. package/dist/default/define/ui/quality-radio-group.js.map +0 -1
  824. package/dist/default/define/ui/seek-button.js.map +0 -1
  825. package/dist/default/define/ui/seek-indicator-value.js.map +0 -1
  826. package/dist/default/define/ui/seek-indicator.js.map +0 -1
  827. package/dist/default/define/ui/slider-buffer.js.map +0 -1
  828. package/dist/default/define/ui/slider-fill.js.map +0 -1
  829. package/dist/default/define/ui/slider-preview.js.map +0 -1
  830. package/dist/default/define/ui/slider-thumb.js.map +0 -1
  831. package/dist/default/define/ui/slider-thumbnail.js.map +0 -1
  832. package/dist/default/define/ui/slider-track.js.map +0 -1
  833. package/dist/default/define/ui/slider-value.js.map +0 -1
  834. package/dist/default/define/ui/slider.js.map +0 -1
  835. package/dist/default/define/ui/status-announcer.js.map +0 -1
  836. package/dist/default/define/ui/status-indicator-value.js.map +0 -1
  837. package/dist/default/define/ui/status-indicator.js.map +0 -1
  838. package/dist/default/define/ui/thumbnail.js.map +0 -1
  839. package/dist/default/define/ui/time-group.js.map +0 -1
  840. package/dist/default/define/ui/time-separator.js.map +0 -1
  841. package/dist/default/define/ui/time-slider-chapter-title.js.map +0 -1
  842. package/dist/default/define/ui/time-slider-chapters.js.map +0 -1
  843. package/dist/default/define/ui/time-slider.js.map +0 -1
  844. package/dist/default/define/ui/time.js.map +0 -1
  845. package/dist/default/define/ui/title.js.map +0 -1
  846. package/dist/default/define/ui/tooltip-group.js.map +0 -1
  847. package/dist/default/define/ui/tooltip-label.js.map +0 -1
  848. package/dist/default/define/ui/tooltip-shortcut.js.map +0 -1
  849. package/dist/default/define/ui/tooltip.js.map +0 -1
  850. package/dist/default/define/ui/volume-indicator-fill.js.map +0 -1
  851. package/dist/default/define/ui/volume-indicator-value.js.map +0 -1
  852. package/dist/default/define/ui/volume-indicator.js.map +0 -1
  853. package/dist/default/define/ui/volume-popover.js.map +0 -1
  854. package/dist/default/define/ui/volume-slider.js.map +0 -1
  855. package/dist/default/define/video/minimal-skin.js.map +0 -1
  856. package/dist/default/define/video/minimal-skin2.js.map +0 -1
  857. package/dist/default/define/video/minimal-ui.js.map +0 -1
  858. package/dist/default/define/video/player.js.map +0 -1
  859. package/dist/default/define/video/skin.js.map +0 -1
  860. package/dist/default/define/video/skin2.js.map +0 -1
  861. package/dist/default/define/video/ui.js.map +0 -1
  862. package/dist/default/extensions/google-cast/extension.js.map +0 -1
  863. package/dist/default/extensions/media-extension-element.js.map +0 -1
  864. package/dist/default/extensions/mux-data/extension.js.map +0 -1
  865. package/dist/default/i18n/cache-key.js.map +0 -1
  866. package/dist/default/i18n/context.js.map +0 -1
  867. package/dist/default/i18n/controller.js.map +0 -1
  868. package/dist/default/i18n/create-i18n.js.map +0 -1
  869. package/dist/default/i18n/locale.js.map +0 -1
  870. package/dist/default/i18n/locales/all/register.js.map +0 -1
  871. package/dist/default/i18n/locales/ar/register.js.map +0 -1
  872. package/dist/default/i18n/locales/az/register.js.map +0 -1
  873. package/dist/default/i18n/locales/bg/register.js.map +0 -1
  874. package/dist/default/i18n/locales/bn/register.js.map +0 -1
  875. package/dist/default/i18n/locales/bs/register.js.map +0 -1
  876. package/dist/default/i18n/locales/ca/register.js.map +0 -1
  877. package/dist/default/i18n/locales/cs/register.js.map +0 -1
  878. package/dist/default/i18n/locales/cy/register.js.map +0 -1
  879. package/dist/default/i18n/locales/da/register.js.map +0 -1
  880. package/dist/default/i18n/locales/de/register.js.map +0 -1
  881. package/dist/default/i18n/locales/el/register.js.map +0 -1
  882. package/dist/default/i18n/locales/en/register.js.map +0 -1
  883. package/dist/default/i18n/locales/es/register.js.map +0 -1
  884. package/dist/default/i18n/locales/et/register.js.map +0 -1
  885. package/dist/default/i18n/locales/eu/register.js.map +0 -1
  886. package/dist/default/i18n/locales/fa/register.js.map +0 -1
  887. package/dist/default/i18n/locales/fi/register.js.map +0 -1
  888. package/dist/default/i18n/locales/fr/register.js.map +0 -1
  889. package/dist/default/i18n/locales/gd/register.js.map +0 -1
  890. package/dist/default/i18n/locales/gl/register.js.map +0 -1
  891. package/dist/default/i18n/locales/he/register.js.map +0 -1
  892. package/dist/default/i18n/locales/hi/register.js.map +0 -1
  893. package/dist/default/i18n/locales/hr/register.js.map +0 -1
  894. package/dist/default/i18n/locales/hu/register.js.map +0 -1
  895. package/dist/default/i18n/locales/id/register.js.map +0 -1
  896. package/dist/default/i18n/locales/it/register.js.map +0 -1
  897. package/dist/default/i18n/locales/ja/register.js.map +0 -1
  898. package/dist/default/i18n/locales/ko/register.js.map +0 -1
  899. package/dist/default/i18n/locales/lt/register.js.map +0 -1
  900. package/dist/default/i18n/locales/lv/register.js.map +0 -1
  901. package/dist/default/i18n/locales/mr/register.js.map +0 -1
  902. package/dist/default/i18n/locales/nb/register.js.map +0 -1
  903. package/dist/default/i18n/locales/ne/register.js.map +0 -1
  904. package/dist/default/i18n/locales/nl/register.js.map +0 -1
  905. package/dist/default/i18n/locales/nn/register.js.map +0 -1
  906. package/dist/default/i18n/locales/oc/register.js.map +0 -1
  907. package/dist/default/i18n/locales/pl/register.js.map +0 -1
  908. package/dist/default/i18n/locales/pt/register.js.map +0 -1
  909. package/dist/default/i18n/locales/pt-BR/register.js.map +0 -1
  910. package/dist/default/i18n/locales/pt-PT/register.js.map +0 -1
  911. package/dist/default/i18n/locales/ro/register.js.map +0 -1
  912. package/dist/default/i18n/locales/ru/register.js.map +0 -1
  913. package/dist/default/i18n/locales/sk/register.js.map +0 -1
  914. package/dist/default/i18n/locales/sl/register.js.map +0 -1
  915. package/dist/default/i18n/locales/sr/register.js.map +0 -1
  916. package/dist/default/i18n/locales/sv/register.js.map +0 -1
  917. package/dist/default/i18n/locales/te/register.js.map +0 -1
  918. package/dist/default/i18n/locales/th/register.js.map +0 -1
  919. package/dist/default/i18n/locales/tr/register.js.map +0 -1
  920. package/dist/default/i18n/locales/uk/register.js.map +0 -1
  921. package/dist/default/i18n/locales/vi/register.js.map +0 -1
  922. package/dist/default/i18n/locales/zh/register.js.map +0 -1
  923. package/dist/default/i18n/locales/zh-CN/register.js.map +0 -1
  924. package/dist/default/i18n/locales/zh-TW/register.js.map +0 -1
  925. package/dist/default/i18n/provider-element.js.map +0 -1
  926. package/dist/default/i18n/provider-mixin.js.map +0 -1
  927. package/dist/default/i18n/render-text.js.map +0 -1
  928. package/dist/default/i18n/text-mixin.js.map +0 -1
  929. package/dist/default/icons/dist/element/base.js.map +0 -1
  930. package/dist/default/icons/dist/element/default/icons.js.map +0 -1
  931. package/dist/default/icons/dist/element/default/index.js.map +0 -1
  932. package/dist/default/icons/dist/element/index.js.map +0 -1
  933. package/dist/default/icons/dist/element/minimal/icons.js.map +0 -1
  934. package/dist/default/icons/dist/element/minimal/index.js.map +0 -1
  935. package/dist/default/icons/dist/html/default/airplay-enter.js.map +0 -1
  936. package/dist/default/icons/dist/html/default/airplay-exit.js.map +0 -1
  937. package/dist/default/icons/dist/html/default/captions-off.js.map +0 -1
  938. package/dist/default/icons/dist/html/default/captions-on.js.map +0 -1
  939. package/dist/default/icons/dist/html/default/cast-enter.js.map +0 -1
  940. package/dist/default/icons/dist/html/default/cast-exit.js.map +0 -1
  941. package/dist/default/icons/dist/html/default/check.js.map +0 -1
  942. package/dist/default/icons/dist/html/default/chevron.js.map +0 -1
  943. package/dist/default/icons/dist/html/default/fullscreen-enter.js.map +0 -1
  944. package/dist/default/icons/dist/html/default/fullscreen-exit.js.map +0 -1
  945. package/dist/default/icons/dist/html/default/gear.js.map +0 -1
  946. package/dist/default/icons/dist/html/default/pause.js.map +0 -1
  947. package/dist/default/icons/dist/html/default/pip-enter.js.map +0 -1
  948. package/dist/default/icons/dist/html/default/pip-exit.js.map +0 -1
  949. package/dist/default/icons/dist/html/default/play.js.map +0 -1
  950. package/dist/default/icons/dist/html/default/quality.js.map +0 -1
  951. package/dist/default/icons/dist/html/default/restart.js.map +0 -1
  952. package/dist/default/icons/dist/html/default/seek.js.map +0 -1
  953. package/dist/default/icons/dist/html/default/speech.js.map +0 -1
  954. package/dist/default/icons/dist/html/default/speed.js.map +0 -1
  955. package/dist/default/icons/dist/html/default/spinner.js.map +0 -1
  956. package/dist/default/icons/dist/html/default/switches.js.map +0 -1
  957. package/dist/default/icons/dist/html/default/volume-high.js.map +0 -1
  958. package/dist/default/icons/dist/html/default/volume-low.js.map +0 -1
  959. package/dist/default/icons/dist/html/default/volume-off.js.map +0 -1
  960. package/dist/default/icons/dist/html/minimal/airplay-enter.js.map +0 -1
  961. package/dist/default/icons/dist/html/minimal/airplay-exit.js.map +0 -1
  962. package/dist/default/icons/dist/html/minimal/captions-off.js.map +0 -1
  963. package/dist/default/icons/dist/html/minimal/captions-on.js.map +0 -1
  964. package/dist/default/icons/dist/html/minimal/cast-enter.js.map +0 -1
  965. package/dist/default/icons/dist/html/minimal/cast-exit.js.map +0 -1
  966. package/dist/default/icons/dist/html/minimal/check.js.map +0 -1
  967. package/dist/default/icons/dist/html/minimal/chevron.js.map +0 -1
  968. package/dist/default/icons/dist/html/minimal/fullscreen-enter.js.map +0 -1
  969. package/dist/default/icons/dist/html/minimal/fullscreen-exit.js.map +0 -1
  970. package/dist/default/icons/dist/html/minimal/gear.js.map +0 -1
  971. package/dist/default/icons/dist/html/minimal/pause.js.map +0 -1
  972. package/dist/default/icons/dist/html/minimal/pip-enter.js.map +0 -1
  973. package/dist/default/icons/dist/html/minimal/pip-exit.js.map +0 -1
  974. package/dist/default/icons/dist/html/minimal/play.js.map +0 -1
  975. package/dist/default/icons/dist/html/minimal/quality.js.map +0 -1
  976. package/dist/default/icons/dist/html/minimal/restart.js.map +0 -1
  977. package/dist/default/icons/dist/html/minimal/seek.js.map +0 -1
  978. package/dist/default/icons/dist/html/minimal/speech.js.map +0 -1
  979. package/dist/default/icons/dist/html/minimal/speed.js.map +0 -1
  980. package/dist/default/icons/dist/html/minimal/spinner.js.map +0 -1
  981. package/dist/default/icons/dist/html/minimal/switches.js.map +0 -1
  982. package/dist/default/icons/dist/html/minimal/volume-high.js.map +0 -1
  983. package/dist/default/icons/dist/html/minimal/volume-low.js.map +0 -1
  984. package/dist/default/icons/dist/html/minimal/volume-off.js.map +0 -1
  985. package/dist/default/icons/element/register/index.js.map +0 -1
  986. package/dist/default/internal/skins/default-audio/register.js.map +0 -1
  987. package/dist/default/internal/skins/default-audio/template.js.map +0 -1
  988. package/dist/default/internal/skins/default-live-audio/register.js.map +0 -1
  989. package/dist/default/internal/skins/default-live-audio/template.js.map +0 -1
  990. package/dist/default/internal/skins/default-live-video/register.js.map +0 -1
  991. package/dist/default/internal/skins/default-live-video/template.js.map +0 -1
  992. package/dist/default/internal/skins/default-video/register.js.map +0 -1
  993. package/dist/default/internal/skins/default-video/template.js.map +0 -1
  994. package/dist/default/internal/skins/minimal-audio/register.js.map +0 -1
  995. package/dist/default/internal/skins/minimal-audio/template.js.map +0 -1
  996. package/dist/default/internal/skins/minimal-live-audio/register.js.map +0 -1
  997. package/dist/default/internal/skins/minimal-live-audio/template.js.map +0 -1
  998. package/dist/default/internal/skins/minimal-live-video/register.js.map +0 -1
  999. package/dist/default/internal/skins/minimal-live-video/template.js.map +0 -1
  1000. package/dist/default/internal/skins/minimal-video/register.js.map +0 -1
  1001. package/dist/default/internal/skins/minimal-video/template.js.map +0 -1
  1002. package/dist/default/media/background-video/adapter.js.map +0 -1
  1003. package/dist/default/media/background-video/template.js.map +0 -1
  1004. package/dist/default/media/cloudflare-video/adapter.js.map +0 -1
  1005. package/dist/default/media/dash-video/adapter.js.map +0 -1
  1006. package/dist/default/media/hls-audio/adapter.js.map +0 -1
  1007. package/dist/default/media/hls-background-video/adapter.js.map +0 -1
  1008. package/dist/default/media/hls-video/adapter.js.map +0 -1
  1009. package/dist/default/media/hlsjs-video/adapter.js.map +0 -1
  1010. package/dist/default/media/mux-audio/hls-js.js.map +0 -1
  1011. package/dist/default/media/mux-audio/mixin.js.map +0 -1
  1012. package/dist/default/media/mux-audio/spf.js.map +0 -1
  1013. package/dist/default/media/mux-video/hls-js.js.map +0 -1
  1014. package/dist/default/media/mux-video/mixin.js.map +0 -1
  1015. package/dist/default/media/mux-video/spf.js.map +0 -1
  1016. package/dist/default/media/native-hls-video/adapter.js.map +0 -1
  1017. package/dist/default/media/shaka-video/adapter.js.map +0 -1
  1018. package/dist/default/media/spotify-audio/adapter.js.map +0 -1
  1019. package/dist/default/media/tiktok-video/adapter.js.map +0 -1
  1020. package/dist/default/media/twitch-video/adapter.js.map +0 -1
  1021. package/dist/default/media/vimeo-video/adapter.js.map +0 -1
  1022. package/dist/default/media/wistia-video/adapter.js.map +0 -1
  1023. package/dist/default/media/youtube-video/adapter.js.map +0 -1
  1024. package/dist/default/player/context.js.map +0 -1
  1025. package/dist/default/player/controller.js.map +0 -1
  1026. package/dist/default/player/create-player.js.map +0 -1
  1027. package/dist/default/player/element.js.map +0 -1
  1028. package/dist/default/player/popup-group-context.js.map +0 -1
  1029. package/dist/default/presets/audio/minimal-skin.js.map +0 -1
  1030. package/dist/default/presets/audio/player.js.map +0 -1
  1031. package/dist/default/presets/audio/skin.js.map +0 -1
  1032. package/dist/default/presets/background/player.js.map +0 -1
  1033. package/dist/default/presets/background/skin.js.map +0 -1
  1034. package/dist/default/presets/live-audio/minimal-skin.js.map +0 -1
  1035. package/dist/default/presets/live-audio/player.js.map +0 -1
  1036. package/dist/default/presets/live-audio/skin.js.map +0 -1
  1037. package/dist/default/presets/live-video/minimal-skin.js.map +0 -1
  1038. package/dist/default/presets/live-video/player.js.map +0 -1
  1039. package/dist/default/presets/live-video/skin.js.map +0 -1
  1040. package/dist/default/presets/skin.js.map +0 -1
  1041. package/dist/default/presets/video/minimal-skin.js.map +0 -1
  1042. package/dist/default/presets/video/player.js.map +0 -1
  1043. package/dist/default/presets/video/skin.js.map +0 -1
  1044. package/dist/default/registration/safe-define.js.map +0 -1
  1045. package/dist/default/registration/ui-compounds.js.map +0 -1
  1046. package/dist/default/store/media-attach-mixin.js.map +0 -1
  1047. package/dist/default/ui/airplay-button/element.js.map +0 -1
  1048. package/dist/default/ui/alert-dialog/element.js.map +0 -1
  1049. package/dist/default/ui/audio-track-radio-group/element.js.map +0 -1
  1050. package/dist/default/ui/buffering-indicator/element.js.map +0 -1
  1051. package/dist/default/ui/captions-button/element.js.map +0 -1
  1052. package/dist/default/ui/captions-radio-group/element.js.map +0 -1
  1053. package/dist/default/ui/cast-button/element.js.map +0 -1
  1054. package/dist/default/ui/command-for.js.map +0 -1
  1055. package/dist/default/ui/container/element.js.map +0 -1
  1056. package/dist/default/ui/context-part-element.js.map +0 -1
  1057. package/dist/default/ui/controls/backdrop.js.map +0 -1
  1058. package/dist/default/ui/controls/content.js.map +0 -1
  1059. package/dist/default/ui/controls/context.js.map +0 -1
  1060. package/dist/default/ui/controls/element.js.map +0 -1
  1061. package/dist/default/ui/controls/group.js.map +0 -1
  1062. package/dist/default/ui/dialog/backdrop.js.map +0 -1
  1063. package/dist/default/ui/dialog/close.js.map +0 -1
  1064. package/dist/default/ui/dialog/context.js.map +0 -1
  1065. package/dist/default/ui/dialog/description.js.map +0 -1
  1066. package/dist/default/ui/dialog/element.js.map +0 -1
  1067. package/dist/default/ui/dialog/popup.js.map +0 -1
  1068. package/dist/default/ui/dialog/title.js.map +0 -1
  1069. package/dist/default/ui/error-dialog/element.js.map +0 -1
  1070. package/dist/default/ui/fullscreen-button/element.js.map +0 -1
  1071. package/dist/default/ui/gesture/element.js.map +0 -1
  1072. package/dist/default/ui/hotkey/aria-key-shortcuts-controller.js.map +0 -1
  1073. package/dist/default/ui/hotkey/element.js.map +0 -1
  1074. package/dist/default/ui/input-indicator/element.js.map +0 -1
  1075. package/dist/default/ui/input-indicator/live-indicator.js.map +0 -1
  1076. package/dist/default/ui/live-button/element.js.map +0 -1
  1077. package/dist/default/ui/media-button-element.js.map +0 -1
  1078. package/dist/default/ui/media-ui-element.js.map +0 -1
  1079. package/dist/default/ui/menu/checkbox-item.js.map +0 -1
  1080. package/dist/default/ui/menu/content.js.map +0 -1
  1081. package/dist/default/ui/menu/context.js.map +0 -1
  1082. package/dist/default/ui/menu/element.js.map +0 -1
  1083. package/dist/default/ui/menu/group-controller.js.map +0 -1
  1084. package/dist/default/ui/menu/group-label.js.map +0 -1
  1085. package/dist/default/ui/menu/group.js.map +0 -1
  1086. package/dist/default/ui/menu/item-indicator.js.map +0 -1
  1087. package/dist/default/ui/menu/item.js.map +0 -1
  1088. package/dist/default/ui/menu/radio-group.js.map +0 -1
  1089. package/dist/default/ui/menu/radio-item.js.map +0 -1
  1090. package/dist/default/ui/menu/separator.js.map +0 -1
  1091. package/dist/default/ui/mute-button/element.js.map +0 -1
  1092. package/dist/default/ui/pip-button/element.js.map +0 -1
  1093. package/dist/default/ui/play-button/element.js.map +0 -1
  1094. package/dist/default/ui/playback-rate-button/element.js.map +0 -1
  1095. package/dist/default/ui/playback-rate-radio-group/element.js.map +0 -1
  1096. package/dist/default/ui/popover/element.js.map +0 -1
  1097. package/dist/default/ui/position-controller.js.map +0 -1
  1098. package/dist/default/ui/poster/element.js.map +0 -1
  1099. package/dist/default/ui/quality-radio-group/element.js.map +0 -1
  1100. package/dist/default/ui/radio-group/context.js.map +0 -1
  1101. package/dist/default/ui/radio-group/element.js.map +0 -1
  1102. package/dist/default/ui/radio-options/controller.js.map +0 -1
  1103. package/dist/default/ui/seek-button/element.js.map +0 -1
  1104. package/dist/default/ui/seek-indicator/element.js.map +0 -1
  1105. package/dist/default/ui/seek-indicator/value.js.map +0 -1
  1106. package/dist/default/ui/slider/buffer.js.map +0 -1
  1107. package/dist/default/ui/slider/context.js.map +0 -1
  1108. package/dist/default/ui/slider/element.js.map +0 -1
  1109. package/dist/default/ui/slider/fill.js.map +0 -1
  1110. package/dist/default/ui/slider/preview.js.map +0 -1
  1111. package/dist/default/ui/slider/thumb.js.map +0 -1
  1112. package/dist/default/ui/slider/thumbnail.js.map +0 -1
  1113. package/dist/default/ui/slider/track.js.map +0 -1
  1114. package/dist/default/ui/slider/value.js.map +0 -1
  1115. package/dist/default/ui/status-announcer/element.js.map +0 -1
  1116. package/dist/default/ui/status-indicator/element.js.map +0 -1
  1117. package/dist/default/ui/status-indicator/value.js.map +0 -1
  1118. package/dist/default/ui/text/element.js.map +0 -1
  1119. package/dist/default/ui/thumbnail/element.js.map +0 -1
  1120. package/dist/default/ui/time/element.js.map +0 -1
  1121. package/dist/default/ui/time/group.js.map +0 -1
  1122. package/dist/default/ui/time/separator.js.map +0 -1
  1123. package/dist/default/ui/time-slider/chapter-title.js.map +0 -1
  1124. package/dist/default/ui/time-slider/chapters.js.map +0 -1
  1125. package/dist/default/ui/time-slider/element.js.map +0 -1
  1126. package/dist/default/ui/title/element.js.map +0 -1
  1127. package/dist/default/ui/tooltip/context.js.map +0 -1
  1128. package/dist/default/ui/tooltip/element.js.map +0 -1
  1129. package/dist/default/ui/tooltip/group.js.map +0 -1
  1130. package/dist/default/ui/tooltip/label.js.map +0 -1
  1131. package/dist/default/ui/tooltip/shortcut.js.map +0 -1
  1132. package/dist/default/ui/ui-element.js.map +0 -1
  1133. package/dist/default/ui/volume-indicator/element.js.map +0 -1
  1134. package/dist/default/ui/volume-indicator/fill.js.map +0 -1
  1135. package/dist/default/ui/volume-indicator/value.js.map +0 -1
  1136. package/dist/default/ui/volume-popover/element.js.map +0 -1
  1137. package/dist/default/ui/volume-slider/element.js.map +0 -1
  1138. package/dist/dev/define/extensions/google-cast.d.ts.map +0 -1
  1139. package/dist/dev/define/extensions/mux-data.d.ts.map +0 -1
  1140. package/dist/dev/define/i18n.d.ts.map +0 -1
  1141. package/dist/dev/define/media/background-video.d.ts.map +0 -1
  1142. package/dist/dev/define/media/cloudflare-video.d.ts.map +0 -1
  1143. package/dist/dev/define/media/dash-video.d.ts.map +0 -1
  1144. package/dist/dev/define/media/hls-audio.d.ts.map +0 -1
  1145. package/dist/dev/define/media/hls-background-video.d.ts.map +0 -1
  1146. package/dist/dev/define/media/hls-video.d.ts.map +0 -1
  1147. package/dist/dev/define/media/hlsjs-video.d.ts.map +0 -1
  1148. package/dist/dev/define/media/mux-audio/hls-js.d.ts.map +0 -1
  1149. package/dist/dev/define/media/mux-audio/spf.d.ts.map +0 -1
  1150. package/dist/dev/define/media/mux-background-video.d.ts.map +0 -1
  1151. package/dist/dev/define/media/mux-video/hls-js.d.ts.map +0 -1
  1152. package/dist/dev/define/media/mux-video/spf.d.ts.map +0 -1
  1153. package/dist/dev/define/media/native-hls-video.d.ts.map +0 -1
  1154. package/dist/dev/define/media/shaka-video.d.ts.map +0 -1
  1155. package/dist/dev/define/media/spotify-audio.d.ts.map +0 -1
  1156. package/dist/dev/define/media/tiktok-video.d.ts.map +0 -1
  1157. package/dist/dev/define/media/twitch-video.d.ts.map +0 -1
  1158. package/dist/dev/define/media/vimeo-video.d.ts.map +0 -1
  1159. package/dist/dev/define/media/wistia-video.d.ts.map +0 -1
  1160. package/dist/dev/define/media/youtube-video.d.ts.map +0 -1
  1161. package/dist/dev/define/shared.css +0 -27
  1162. package/dist/dev/define/shared.js +0 -6
  1163. package/dist/dev/define/shared.js.map +0 -1
  1164. package/dist/dev/define/ui/airplay-button.d.ts.map +0 -1
  1165. package/dist/dev/define/ui/alert-dialog.d.ts.map +0 -1
  1166. package/dist/dev/define/ui/audio-track-radio-group.d.ts.map +0 -1
  1167. package/dist/dev/define/ui/buffering-indicator.d.ts.map +0 -1
  1168. package/dist/dev/define/ui/captions-button.d.ts.map +0 -1
  1169. package/dist/dev/define/ui/captions-radio-group.d.ts.map +0 -1
  1170. package/dist/dev/define/ui/cast-button.d.ts.map +0 -1
  1171. package/dist/dev/define/ui/container.d.ts.map +0 -1
  1172. package/dist/dev/define/ui/controls-backdrop.d.ts.map +0 -1
  1173. package/dist/dev/define/ui/controls-content.d.ts.map +0 -1
  1174. package/dist/dev/define/ui/controls-group.d.ts.map +0 -1
  1175. package/dist/dev/define/ui/controls.d.ts.map +0 -1
  1176. package/dist/dev/define/ui/dialog-backdrop.d.ts.map +0 -1
  1177. package/dist/dev/define/ui/dialog-close.d.ts.map +0 -1
  1178. package/dist/dev/define/ui/dialog-description.d.ts.map +0 -1
  1179. package/dist/dev/define/ui/dialog-popup.d.ts.map +0 -1
  1180. package/dist/dev/define/ui/dialog-title.d.ts.map +0 -1
  1181. package/dist/dev/define/ui/dialog.d.ts.map +0 -1
  1182. package/dist/dev/define/ui/error-dialog.d.ts.map +0 -1
  1183. package/dist/dev/define/ui/fullscreen-button.d.ts.map +0 -1
  1184. package/dist/dev/define/ui/gesture.d.ts.map +0 -1
  1185. package/dist/dev/define/ui/hotkey.d.ts.map +0 -1
  1186. package/dist/dev/define/ui/live-button.d.ts.map +0 -1
  1187. package/dist/dev/define/ui/menu-checkbox-item.d.ts.map +0 -1
  1188. package/dist/dev/define/ui/menu-content.d.ts.map +0 -1
  1189. package/dist/dev/define/ui/menu-group-label.d.ts.map +0 -1
  1190. package/dist/dev/define/ui/menu-group.d.ts.map +0 -1
  1191. package/dist/dev/define/ui/menu-item-indicator.d.ts.map +0 -1
  1192. package/dist/dev/define/ui/menu-item.d.ts.map +0 -1
  1193. package/dist/dev/define/ui/menu-radio-group.d.ts.map +0 -1
  1194. package/dist/dev/define/ui/menu-radio-item.d.ts.map +0 -1
  1195. package/dist/dev/define/ui/menu-separator.d.ts.map +0 -1
  1196. package/dist/dev/define/ui/menu.d.ts.map +0 -1
  1197. package/dist/dev/define/ui/mute-button.d.ts.map +0 -1
  1198. package/dist/dev/define/ui/pip-button.d.ts.map +0 -1
  1199. package/dist/dev/define/ui/play-button.d.ts.map +0 -1
  1200. package/dist/dev/define/ui/playback-rate-button.d.ts.map +0 -1
  1201. package/dist/dev/define/ui/playback-rate-radio-group.d.ts.map +0 -1
  1202. package/dist/dev/define/ui/popover.d.ts.map +0 -1
  1203. package/dist/dev/define/ui/poster.d.ts.map +0 -1
  1204. package/dist/dev/define/ui/quality-radio-group.d.ts.map +0 -1
  1205. package/dist/dev/define/ui/seek-button.d.ts.map +0 -1
  1206. package/dist/dev/define/ui/seek-indicator-value.d.ts.map +0 -1
  1207. package/dist/dev/define/ui/seek-indicator.d.ts.map +0 -1
  1208. package/dist/dev/define/ui/slider-buffer.d.ts.map +0 -1
  1209. package/dist/dev/define/ui/slider-fill.d.ts.map +0 -1
  1210. package/dist/dev/define/ui/slider-preview.d.ts.map +0 -1
  1211. package/dist/dev/define/ui/slider-thumb.d.ts.map +0 -1
  1212. package/dist/dev/define/ui/slider-thumbnail.d.ts.map +0 -1
  1213. package/dist/dev/define/ui/slider-track.d.ts.map +0 -1
  1214. package/dist/dev/define/ui/slider-value.d.ts.map +0 -1
  1215. package/dist/dev/define/ui/slider.d.ts.map +0 -1
  1216. package/dist/dev/define/ui/status-announcer.d.ts.map +0 -1
  1217. package/dist/dev/define/ui/status-indicator-value.d.ts.map +0 -1
  1218. package/dist/dev/define/ui/status-indicator.d.ts.map +0 -1
  1219. package/dist/dev/define/ui/thumbnail.d.ts.map +0 -1
  1220. package/dist/dev/define/ui/time-group.d.ts.map +0 -1
  1221. package/dist/dev/define/ui/time-separator.d.ts.map +0 -1
  1222. package/dist/dev/define/ui/time-slider-chapter-title.d.ts.map +0 -1
  1223. package/dist/dev/define/ui/time-slider-chapters.d.ts.map +0 -1
  1224. package/dist/dev/define/ui/time-slider.d.ts.map +0 -1
  1225. package/dist/dev/define/ui/time.d.ts.map +0 -1
  1226. package/dist/dev/define/ui/title.d.ts.map +0 -1
  1227. package/dist/dev/define/ui/tooltip-group.d.ts.map +0 -1
  1228. package/dist/dev/define/ui/tooltip-label.d.ts.map +0 -1
  1229. package/dist/dev/define/ui/tooltip-shortcut.d.ts.map +0 -1
  1230. package/dist/dev/define/ui/tooltip.d.ts.map +0 -1
  1231. package/dist/dev/define/ui/volume-indicator-fill.d.ts.map +0 -1
  1232. package/dist/dev/define/ui/volume-indicator-value.d.ts.map +0 -1
  1233. package/dist/dev/define/ui/volume-indicator.d.ts.map +0 -1
  1234. package/dist/dev/define/ui/volume-popover.d.ts.map +0 -1
  1235. package/dist/dev/define/ui/volume-slider.d.ts.map +0 -1
  1236. package/dist/dev/extensions/google-cast/extension.d.ts.map +0 -1
  1237. package/dist/dev/extensions/media-extension-element.d.ts.map +0 -1
  1238. package/dist/dev/extensions/mux-data/extension.d.ts.map +0 -1
  1239. package/dist/dev/i18n/context.d.ts.map +0 -1
  1240. package/dist/dev/i18n/controller.d.ts.map +0 -1
  1241. package/dist/dev/i18n/create-i18n.d.ts.map +0 -1
  1242. package/dist/dev/i18n/locale.d.ts.map +0 -1
  1243. package/dist/dev/i18n/provider-element.d.ts.map +0 -1
  1244. package/dist/dev/i18n/provider-mixin.d.ts.map +0 -1
  1245. package/dist/dev/i18n/render-text.d.ts.map +0 -1
  1246. package/dist/dev/i18n/text-mixin.d.ts.map +0 -1
  1247. package/dist/dev/i18n/types.d.ts.map +0 -1
  1248. package/dist/dev/icons/dist/element/base.d.ts.map +0 -1
  1249. package/dist/dev/icons/dist/html/default/index.d.ts.map +0 -1
  1250. package/dist/dev/icons/dist/html/minimal/index.d.ts.map +0 -1
  1251. package/dist/dev/icons/element/register/index.d.ts.map +0 -1
  1252. package/dist/dev/index.d.ts.map +0 -1
  1253. package/dist/dev/media/background-video/adapter.d.ts.map +0 -1
  1254. package/dist/dev/media/background-video/template.d.ts.map +0 -1
  1255. package/dist/dev/media/cloudflare-video/adapter.d.ts.map +0 -1
  1256. package/dist/dev/media/dash-video/adapter.d.ts.map +0 -1
  1257. package/dist/dev/media/hls-audio/adapter.d.ts.map +0 -1
  1258. package/dist/dev/media/hls-background-video/adapter.d.ts.map +0 -1
  1259. package/dist/dev/media/hls-video/adapter.d.ts.map +0 -1
  1260. package/dist/dev/media/hlsjs-video/adapter.d.ts.map +0 -1
  1261. package/dist/dev/media/mux-audio/hls-js.d.ts.map +0 -1
  1262. package/dist/dev/media/mux-audio/spf.d.ts.map +0 -1
  1263. package/dist/dev/media/mux-video/hls-js.d.ts.map +0 -1
  1264. package/dist/dev/media/mux-video/spf.d.ts.map +0 -1
  1265. package/dist/dev/media/native-hls-video/adapter.d.ts.map +0 -1
  1266. package/dist/dev/media/shaka-video/adapter.d.ts.map +0 -1
  1267. package/dist/dev/media/spotify-audio/adapter.d.ts.map +0 -1
  1268. package/dist/dev/media/tiktok-video/adapter.d.ts.map +0 -1
  1269. package/dist/dev/media/twitch-video/adapter.d.ts.map +0 -1
  1270. package/dist/dev/media/vimeo-video/adapter.d.ts.map +0 -1
  1271. package/dist/dev/media/wistia-video/adapter.d.ts.map +0 -1
  1272. package/dist/dev/media/youtube-video/adapter.d.ts.map +0 -1
  1273. package/dist/dev/player/context.d.ts.map +0 -1
  1274. package/dist/dev/player/controller.d.ts.map +0 -1
  1275. package/dist/dev/player/create-player.d.ts.map +0 -1
  1276. package/dist/dev/presets/audio/minimal-skin.d.ts.map +0 -1
  1277. package/dist/dev/presets/audio/player.d.ts.map +0 -1
  1278. package/dist/dev/presets/audio/skin.d.ts.map +0 -1
  1279. package/dist/dev/presets/background/player.d.ts.map +0 -1
  1280. package/dist/dev/presets/background/skin.d.ts.map +0 -1
  1281. package/dist/dev/presets/live-audio/minimal-skin.d.ts.map +0 -1
  1282. package/dist/dev/presets/live-audio/player.d.ts.map +0 -1
  1283. package/dist/dev/presets/live-audio/skin.d.ts.map +0 -1
  1284. package/dist/dev/presets/live-video/minimal-skin.d.ts.map +0 -1
  1285. package/dist/dev/presets/live-video/player.d.ts.map +0 -1
  1286. package/dist/dev/presets/live-video/skin.d.ts.map +0 -1
  1287. package/dist/dev/presets/skin.d.ts.map +0 -1
  1288. package/dist/dev/presets/video/minimal-skin.d.ts.map +0 -1
  1289. package/dist/dev/presets/video/player.d.ts.map +0 -1
  1290. package/dist/dev/presets/video/skin.d.ts.map +0 -1
  1291. package/dist/dev/store/media-attach-mixin.d.ts.map +0 -1
  1292. package/dist/dev/store/types.d.ts.map +0 -1
  1293. package/dist/dev/ui/airplay-button/element.d.ts.map +0 -1
  1294. package/dist/dev/ui/alert-dialog/element.d.ts.map +0 -1
  1295. package/dist/dev/ui/audio-track-radio-group/element.d.ts.map +0 -1
  1296. package/dist/dev/ui/buffering-indicator/element.d.ts.map +0 -1
  1297. package/dist/dev/ui/captions-button/element.d.ts.map +0 -1
  1298. package/dist/dev/ui/captions-radio-group/element.d.ts.map +0 -1
  1299. package/dist/dev/ui/cast-button/element.d.ts.map +0 -1
  1300. package/dist/dev/ui/container/element.d.ts.map +0 -1
  1301. package/dist/dev/ui/context-part-element.d.ts.map +0 -1
  1302. package/dist/dev/ui/controls/backdrop.d.ts.map +0 -1
  1303. package/dist/dev/ui/controls/content.d.ts.map +0 -1
  1304. package/dist/dev/ui/controls/context.d.ts.map +0 -1
  1305. package/dist/dev/ui/controls/element.d.ts.map +0 -1
  1306. package/dist/dev/ui/controls/group.d.ts.map +0 -1
  1307. package/dist/dev/ui/dialog/backdrop.d.ts.map +0 -1
  1308. package/dist/dev/ui/dialog/close.d.ts.map +0 -1
  1309. package/dist/dev/ui/dialog/context.d.ts.map +0 -1
  1310. package/dist/dev/ui/dialog/description.d.ts.map +0 -1
  1311. package/dist/dev/ui/dialog/element.d.ts.map +0 -1
  1312. package/dist/dev/ui/dialog/popup.d.ts.map +0 -1
  1313. package/dist/dev/ui/dialog/title.d.ts.map +0 -1
  1314. package/dist/dev/ui/error-dialog/element.d.ts.map +0 -1
  1315. package/dist/dev/ui/fullscreen-button/element.d.ts.map +0 -1
  1316. package/dist/dev/ui/gesture/element.d.ts.map +0 -1
  1317. package/dist/dev/ui/hotkey/aria-key-shortcuts-controller.d.ts.map +0 -1
  1318. package/dist/dev/ui/hotkey/element.d.ts.map +0 -1
  1319. package/dist/dev/ui/input-indicator/element.d.ts.map +0 -1
  1320. package/dist/dev/ui/input-indicator/live-indicator.d.ts.map +0 -1
  1321. package/dist/dev/ui/live-button/element.d.ts.map +0 -1
  1322. package/dist/dev/ui/media-button-element.d.ts.map +0 -1
  1323. package/dist/dev/ui/media-ui-element.d.ts.map +0 -1
  1324. package/dist/dev/ui/menu/checkbox-item.d.ts.map +0 -1
  1325. package/dist/dev/ui/menu/content.d.ts.map +0 -1
  1326. package/dist/dev/ui/menu/context.d.ts.map +0 -1
  1327. package/dist/dev/ui/menu/element.d.ts.map +0 -1
  1328. package/dist/dev/ui/menu/group-label.d.ts.map +0 -1
  1329. package/dist/dev/ui/menu/group.d.ts.map +0 -1
  1330. package/dist/dev/ui/menu/item-indicator.d.ts.map +0 -1
  1331. package/dist/dev/ui/menu/item.d.ts.map +0 -1
  1332. package/dist/dev/ui/menu/radio-group.d.ts.map +0 -1
  1333. package/dist/dev/ui/menu/radio-item.d.ts.map +0 -1
  1334. package/dist/dev/ui/menu/separator.d.ts.map +0 -1
  1335. package/dist/dev/ui/mute-button/element.d.ts.map +0 -1
  1336. package/dist/dev/ui/pip-button/element.d.ts.map +0 -1
  1337. package/dist/dev/ui/play-button/element.d.ts.map +0 -1
  1338. package/dist/dev/ui/playback-rate-button/element.d.ts.map +0 -1
  1339. package/dist/dev/ui/playback-rate-radio-group/element.d.ts.map +0 -1
  1340. package/dist/dev/ui/popover/element.d.ts.map +0 -1
  1341. package/dist/dev/ui/poster/element.d.ts.map +0 -1
  1342. package/dist/dev/ui/quality-radio-group/element.d.ts.map +0 -1
  1343. package/dist/dev/ui/radio-group/context.d.ts.map +0 -1
  1344. package/dist/dev/ui/radio-group/element.d.ts.map +0 -1
  1345. package/dist/dev/ui/seek-button/element.d.ts.map +0 -1
  1346. package/dist/dev/ui/seek-indicator/element.d.ts.map +0 -1
  1347. package/dist/dev/ui/seek-indicator/value.d.ts.map +0 -1
  1348. package/dist/dev/ui/slider/buffer.d.ts.map +0 -1
  1349. package/dist/dev/ui/slider/context.d.ts.map +0 -1
  1350. package/dist/dev/ui/slider/element.d.ts.map +0 -1
  1351. package/dist/dev/ui/slider/events.d.ts.map +0 -1
  1352. package/dist/dev/ui/slider/fill.d.ts.map +0 -1
  1353. package/dist/dev/ui/slider/preview.d.ts.map +0 -1
  1354. package/dist/dev/ui/slider/thumb.d.ts.map +0 -1
  1355. package/dist/dev/ui/slider/thumbnail.d.ts.map +0 -1
  1356. package/dist/dev/ui/slider/track.d.ts.map +0 -1
  1357. package/dist/dev/ui/slider/value.d.ts.map +0 -1
  1358. package/dist/dev/ui/status-announcer/element.d.ts.map +0 -1
  1359. package/dist/dev/ui/status-indicator/element.d.ts.map +0 -1
  1360. package/dist/dev/ui/status-indicator/value.d.ts.map +0 -1
  1361. package/dist/dev/ui/text/element.d.ts.map +0 -1
  1362. package/dist/dev/ui/thumbnail/element.d.ts.map +0 -1
  1363. package/dist/dev/ui/time/element.d.ts.map +0 -1
  1364. package/dist/dev/ui/time/group.d.ts.map +0 -1
  1365. package/dist/dev/ui/time/separator.d.ts.map +0 -1
  1366. package/dist/dev/ui/time-slider/chapter-title.d.ts.map +0 -1
  1367. package/dist/dev/ui/time-slider/chapters.d.ts.map +0 -1
  1368. package/dist/dev/ui/time-slider/element.d.ts.map +0 -1
  1369. package/dist/dev/ui/title/element.d.ts.map +0 -1
  1370. package/dist/dev/ui/tooltip/context.d.ts.map +0 -1
  1371. package/dist/dev/ui/tooltip/element.d.ts.map +0 -1
  1372. package/dist/dev/ui/tooltip/group.d.ts.map +0 -1
  1373. package/dist/dev/ui/tooltip/label.d.ts.map +0 -1
  1374. package/dist/dev/ui/tooltip/shortcut.d.ts.map +0 -1
  1375. package/dist/dev/ui/ui-element.d.ts.map +0 -1
  1376. package/dist/dev/ui/volume-indicator/element.d.ts.map +0 -1
  1377. package/dist/dev/ui/volume-indicator/fill.d.ts.map +0 -1
  1378. package/dist/dev/ui/volume-indicator/value.d.ts.map +0 -1
  1379. package/dist/dev/ui/volume-popover/element.d.ts.map +0 -1
  1380. package/dist/dev/ui/volume-slider/element.d.ts.map +0 -1
  1381. package/docs/concepts/accessibility.md +0 -68
  1382. package/docs/concepts/browser-support.md +0 -45
  1383. package/docs/concepts/cdn.md +0 -119
  1384. package/docs/concepts/custom-element-lifecycle.md +0 -115
  1385. package/docs/concepts/security.md +0 -32
  1386. package/docs/concepts/skins.md +0 -188
  1387. package/docs/concepts/v10-roadmap.md +0 -75
  1388. package/docs/how-to/add-keyboard-shortcuts-and-gestures.md +0 -98
  1389. package/docs/how-to/build-with-ai.md +0 -39
  1390. package/docs/how-to/build-your-own-component.md +0 -350
  1391. package/docs/how-to/customize-skins.md +0 -358
  1392. package/docs/how-to/go-fullscreen-and-lock-orientation.md +0 -147
  1393. package/docs/how-to/handle-playback-errors.md +0 -88
  1394. package/docs/how-to/installation.md +0 -165
  1395. package/docs/how-to/migrate-from-plyr.md +0 -406
  1396. package/docs/how-to/migrate-from-video-js-8.md +0 -626
  1397. package/docs/how-to/play-live-streams.md +0 -116
  1398. package/docs/how-to/show-captions-and-subtitles.md +0 -140
  1399. package/docs/how-to/show-timeline-thumbnail-previews.md +0 -164
  1400. package/docs/reference/aria-key-shortcuts-controller.md +0 -117
  1401. package/docs/reference/audio-minimal-skin.md +0 -43
  1402. package/docs/reference/audio-skin.md +0 -43
  1403. package/docs/reference/background-video-skin.md +0 -39
  1404. package/docs/reference/cloudflare-video.md +0 -513
  1405. package/docs/reference/create-translator.md +0 -81
  1406. package/docs/reference/dash-video.md +0 -363
  1407. package/docs/reference/feature-text-tracks.md +0 -134
  1408. package/docs/reference/google-cast.md +0 -83
  1409. package/docs/reference/hls-audio.md +0 -212
  1410. package/docs/reference/hls-background-video.md +0 -100
  1411. package/docs/reference/hls-video.md +0 -339
  1412. package/docs/reference/hlsjs-video.md +0 -1047
  1413. package/docs/reference/html-i-18-n-context.md +0 -55
  1414. package/docs/reference/live-video-minimal-skin.md +0 -51
  1415. package/docs/reference/live-video-skin.md +0 -51
  1416. package/docs/reference/media-attach-mixin.md +0 -101
  1417. package/docs/reference/mux-audio.md +0 -951
  1418. package/docs/reference/mux-data.md +0 -107
  1419. package/docs/reference/mux-video.md +0 -1152
  1420. package/docs/reference/native-hls-video.md +0 -375
  1421. package/docs/reference/player-context.md +0 -60
  1422. package/docs/reference/popover.md +0 -505
  1423. package/docs/reference/shaka-video.md +0 -642
  1424. package/docs/reference/slider.md +0 -859
  1425. package/docs/reference/snapshot-controller.md +0 -244
  1426. package/docs/reference/spotify-audio.md +0 -424
  1427. package/docs/reference/store-controller.md +0 -208
  1428. package/docs/reference/thumbnail.md +0 -386
  1429. package/docs/reference/tiktok-video.md +0 -534
  1430. package/docs/reference/tooltip.md +0 -631
  1431. package/docs/reference/translation-phrases.md +0 -453
  1432. package/docs/reference/twitch-video.md +0 -477
  1433. package/docs/reference/video-minimal-skin.md +0 -49
  1434. package/docs/reference/video-skin.md +0 -49
  1435. package/docs/reference/vimeo-video.md +0 -1056
  1436. package/docs/reference/volume-popover.md +0 -527
  1437. package/docs/reference/volume-slider.md +0 -759
  1438. package/docs/reference/youtube-video.md +0 -603
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["#mediaState","#core","#i18n","#options"],"sources":["../../../../src/ui/playback-rate-radio-group/element.ts"],"sourcesContent":["import {\n PlaybackRateRadioGroupCore,\n PlaybackRateRadioGroupDataAttrs,\n type PlaybackRateRadioGroupOption,\n} from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectPlaybackRate } from '@videojs/core/dom';\nimport { translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MenuRadioGroupElement } from '../menu/radio-group';\nimport { RadioOptionsController } from '../radio-options/controller';\n\nexport class PlaybackRateRadioGroupElement extends MenuRadioGroupElement {\n static override readonly tagName = 'media-playback-rate-radio-group';\n\n static override properties = {\n ...MenuRadioGroupElement.properties,\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<'value' | 'disabled'>;\n\n disabled = false;\n formatRate = PlaybackRateRadioGroupCore.defaultProps.formatRate;\n\n readonly #core = new PlaybackRateRadioGroupCore();\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #mediaState = new PlayerController(this, playerContext, selectPlaybackRate);\n readonly #options = new RadioOptionsController<PlaybackRateRadioGroupOption>(this, {\n setItemAttributes: (item, option) => item.setAttribute('data-rate', option.value),\n onValueChange: (value) => {\n const media = this.#mediaState.value;\n\n if (media) this.#core.selectValue(media, value);\n },\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n if (__DEV__ && !this.#mediaState.value && this.#mediaState.displayName) {\n logMissingFeature(this.localName, this.#mediaState.displayName);\n }\n }\n\n protected override update(changed: PropertyValues): void {\n const media = this.#mediaState.value;\n let state: PlaybackRateRadioGroupCore.State | null = null;\n\n if (media) {\n this.#core.setProps({ formatRate: this.formatRate, disabled: this.disabled });\n this.#core.setMedia(media);\n state = this.#core.getState();\n\n this.applyDefaultAriaLabel(\n translateText(this.#core.getLabel(state), this.#i18n.value, this.#core.getLabelParams(state))\n );\n this.#options.sync(state, this.#i18n.value, this.#i18n.locale);\n this.publishMenuOptionState(state.disabled, state.hidden, state.availability);\n } else {\n this.publishMenuOptionState(true, true, 'unsupported');\n }\n\n super.update(changed);\n\n if (state) applyStateDataAttrs(this, state, PlaybackRateRadioGroupDataAttrs);\n }\n}\n\nexport namespace PlaybackRateRadioGroupElement {\n export type State = PlaybackRateRadioGroupCore.State;\n}\n"],"mappings":";;;;;;;;;;AAgBA,IAAa,gCAAb,cAAmD,sBAAsB;;;EAQ5D,KAAA,WAAA;EACE,KAAA,aAAA,2BAA2B,aAAa;EAEpC,KAAA,QAAA,IAAI,2BAA2B;EAC/B,KAAA,QAAA,IAAI,eAAe,MAAM,WAAW;EAC9B,KAAA,cAAA,IAAI,iBAAiB,MAAM,eAAe,kBAAkB;EAC/D,KAAA,WAAA,IAAI,uBAAqD,MAAM;GACjF,oBAAoB,MAAM,WAAW,KAAK,aAAa,aAAa,OAAO,KAAK;GAChF,gBAAgB,UAAU;IACxB,MAAM,QAAQ,KAAKA,YAAY;IAE/B,IAAI,OAAO,KAAKC,MAAM,YAAY,OAAO,KAAK;GAChD;EACF,CAAC;;;EApBkC,KAAA,UAAA;;;EAEN,KAAA,aAAA;GAC3B,GAAG,sBAAsB;GACzB,UAAU,EAAE,MAAM,QAAQ;EAC5B;;CAKA;CACA;CACA;CACA;CASA,oBAAmC;EACjC,MAAM,kBAAkB;EAExB,IAAI,KAAK,WAAW;EAEpB,IAAe,CAAC,KAAKD,YAAY,SAAS,KAAKA,YAAY,aACzD,kBAAkB,KAAK,WAAW,KAAKA,YAAY,WAAW;CAElE;CAEA,OAA0B,SAA+B;EACvD,MAAM,QAAQ,KAAKA,YAAY;EAC/B,IAAI,QAAiD;EAErD,IAAI,OAAO;GACT,KAAKC,MAAM,SAAS;IAAE,YAAY,KAAK;IAAY,UAAU,KAAK;GAAS,CAAC;GAC5E,KAAKA,MAAM,SAAS,KAAK;GACzB,QAAQ,KAAKA,MAAM,SAAS;GAE5B,KAAK,sBACH,cAAc,KAAKA,MAAM,SAAS,KAAK,GAAG,KAAKC,MAAM,OAAO,KAAKD,MAAM,eAAe,KAAK,CAAC,CAC9F;GACA,KAAKE,SAAS,KAAK,OAAO,KAAKD,MAAM,OAAO,KAAKA,MAAM,MAAM;GAC7D,KAAK,uBAAuB,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY;EAC9E,OACE,KAAK,uBAAuB,MAAM,MAAM,aAAa;EAGvD,MAAM,OAAO,OAAO;EAEpB,IAAI,OAAO,oBAAoB,MAAM,OAAO,+BAA+B;CAC7E;AACF"}
1
+ {"version":3,"file":"element.js","names":["#mediaState","#core","#i18n","#options"],"sources":["../../../../src/ui/playback-rate-radio-group/element.ts"],"sourcesContent":["import {\n PlaybackRateRadioGroupCore,\n PlaybackRateRadioGroupDataAttrs,\n type PlaybackRateRadioGroupOption,\n} from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectPlaybackRate } from '@videojs/core/dom';\nimport { translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MenuRadioGroupElement } from '../menu/radio-group';\nimport { RadioOptionsController } from '../radio-options/controller';\n\n/**\n * Menu radio group that generates a `<media-menu-radio-item>` per available playback rate and shares the selected label\n * and availability with an enclosing menu. An optional `<template>` holding one `<media-menu-radio-item>` customizes\n * each generated item.\n */\nexport class PlaybackRateRadioGroupElement extends MenuRadioGroupElement {\n static override readonly tagName = 'media-playback-rate-radio-group';\n\n static override properties = {\n ...MenuRadioGroupElement.properties,\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<'value' | 'disabled'>;\n\n disabled = false;\n formatRate = PlaybackRateRadioGroupCore.defaultProps.formatRate;\n\n readonly #core = new PlaybackRateRadioGroupCore();\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #mediaState = new PlayerController(this, playerContext, selectPlaybackRate);\n readonly #options = new RadioOptionsController<PlaybackRateRadioGroupOption>(this, {\n setItemAttributes: (item, option) => item.setAttribute('data-rate', option.value),\n onValueChange: (value) => {\n const media = this.#mediaState.value;\n\n if (media) this.#core.selectValue(media, value);\n },\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n if (__DEV__ && !this.#mediaState.value && this.#mediaState.displayName) {\n logMissingFeature(this.localName, this.#mediaState.displayName);\n }\n }\n\n protected override update(changed: PropertyValues): void {\n const media = this.#mediaState.value;\n let state: PlaybackRateRadioGroupCore.State | null = null;\n\n if (media) {\n this.#core.setProps({ formatRate: this.formatRate, disabled: this.disabled });\n this.#core.setMedia(media);\n state = this.#core.getState();\n\n this.applyDefaultAriaLabel(\n translateText(this.#core.getLabel(state), this.#i18n.value, this.#core.getLabelParams(state))\n );\n this.#options.sync(state, this.#i18n.value, this.#i18n.locale);\n this.publishMenuOptionState(state.disabled, state.hidden, state.availability);\n } else {\n this.publishMenuOptionState(true, true, 'unsupported');\n }\n\n super.update(changed);\n\n if (state) applyStateDataAttrs(this, state, PlaybackRateRadioGroupDataAttrs);\n }\n}\n\nexport namespace PlaybackRateRadioGroupElement {\n export type State = PlaybackRateRadioGroupCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAqBA,IAAa,gCAAb,cAAmD,sBAAsB;;;EAQ5D,KAAA,WAAA;EACE,KAAA,aAAA,2BAA2B,aAAa;EAEpC,KAAA,QAAA,IAAI,2BAA2B;EAC/B,KAAA,QAAA,IAAI,eAAe,MAAM,WAAW;EAC9B,KAAA,cAAA,IAAI,iBAAiB,MAAM,eAAe,kBAAkB;EAC/D,KAAA,WAAA,IAAI,uBAAqD,MAAM;GACjF,oBAAoB,MAAM,WAAW,KAAK,aAAa,aAAa,OAAO,KAAK;GAChF,gBAAgB,UAAU;IACxB,MAAM,QAAQ,KAAKA,YAAY;IAE/B,IAAI,OAAO,KAAKC,MAAM,YAAY,OAAO,KAAK;GAChD;EACF,CAAC;;;EApBkC,KAAA,UAAA;;;EAEN,KAAA,aAAA;GAC3B,GAAG,sBAAsB;GACzB,UAAU,EAAE,MAAM,QAAQ;EAC5B;;CAKA;CACA;CACA;CACA;CASA,oBAAmC;EACjC,MAAM,kBAAkB;EAExB,IAAI,KAAK,WAAW;EAEpB,IAAe,CAAC,KAAKD,YAAY,SAAS,KAAKA,YAAY,aACzD,kBAAkB,KAAK,WAAW,KAAKA,YAAY,WAAW;CAElE;CAEA,OAA0B,SAA+B;EACvD,MAAM,QAAQ,KAAKA,YAAY;EAC/B,IAAI,QAAiD;EAErD,IAAI,OAAO;GACT,KAAKC,MAAM,SAAS;IAAE,YAAY,KAAK;IAAY,UAAU,KAAK;GAAS,CAAC;GAC5E,KAAKA,MAAM,SAAS,KAAK;GACzB,QAAQ,KAAKA,MAAM,SAAS;GAE5B,KAAK,sBACH,cAAc,KAAKA,MAAM,SAAS,KAAK,GAAG,KAAKC,MAAM,OAAO,KAAKD,MAAM,eAAe,KAAK,CAAC,CAC9F;GACA,KAAKE,SAAS,KAAK,OAAO,KAAKD,MAAM,OAAO,KAAKA,MAAM,MAAM;GAC7D,KAAK,uBAAuB,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY;EAC9E,OACE,KAAK,uBAAuB,MAAM,MAAM,aAAa;EAGvD,MAAM,OAAO,OAAO;EAEpB,IAAI,OAAO,oBAAoB,MAAM,OAAO,+BAA+B;CAC7E;AACF"}
@@ -3,6 +3,12 @@ import { QualityRadioGroupCore } from "@videojs/core";
3
3
  import { PropertyValues } from "@videojs/element";
4
4
  import { Text } from "@videojs/core/i18n";
5
5
  //#region src/ui/quality-radio-group/element.d.ts
6
+ /**
7
+ * Menu radio group that generates an Auto `<media-menu-radio-item>` plus one per video rendition, and shares the
8
+ * selected label and availability with an enclosing menu. An optional `<template>` holding one
9
+ * `<media-menu-radio-item>` customizes each generated item; its `data-part` `label`, `tier`, and `badge` descendants
10
+ * receive the rendition's text.
11
+ */
6
12
  declare class QualityRadioGroupElement extends MenuRadioGroupElement {
7
13
  #private;
8
14
  static readonly tagName = "media-quality-radio-group";
@@ -8,6 +8,12 @@ import { QualityRadioGroupCore, QualityRadioGroupDataAttrs } from "@videojs/core
8
8
  import { applyStateDataAttrs, logMissingFeature, selectQuality } from "@videojs/core/dom";
9
9
  import { translateText } from "@videojs/core/i18n";
10
10
  //#region src/ui/quality-radio-group/element.ts
11
+ /**
12
+ * Menu radio group that generates an Auto `<media-menu-radio-item>` plus one per video rendition, and shares the
13
+ * selected label and availability with an enclosing menu. An optional `<template>` holding one
14
+ * `<media-menu-radio-item>` customizes each generated item; its `data-part` `label`, `tier`, and `badge` descendants
15
+ * receive the rendition's text.
16
+ */
11
17
  var QualityRadioGroupElement = class extends MenuRadioGroupElement {
12
18
  constructor(..._args) {
13
19
  super(..._args);
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["#setContent","#mediaState","#core","#i18n","#options"],"sources":["../../../../src/ui/quality-radio-group/element.ts"],"sourcesContent":["import { QualityRadioGroupCore, QualityRadioGroupDataAttrs, type QualityRadioGroupOption } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectQuality } from '@videojs/core/dom';\nimport { type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MenuRadioGroupElement } from '../menu/radio-group';\nimport type { MenuRadioItemElement } from '../menu/radio-item';\nimport { RadioOptionsController } from '../radio-options/controller';\n\nexport class QualityRadioGroupElement extends MenuRadioGroupElement {\n static override readonly tagName = 'media-quality-radio-group';\n\n static override properties = {\n ...MenuRadioGroupElement.properties,\n disabled: { type: Boolean },\n label: { type: String },\n } satisfies PropertyDeclarationMap<'value' | 'label' | 'disabled'>;\n\n disabled = false;\n label: Text | string = '';\n formatRendition = QualityRadioGroupCore.defaultProps.formatRendition;\n\n readonly #core = new QualityRadioGroupCore();\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #mediaState = new PlayerController(this, playerContext, selectQuality);\n readonly #options = new RadioOptionsController<QualityRadioGroupOption>(this, {\n renderItem: (item, label, option) => this.#setContent(item, label, option.tier, option.badge),\n setItemAttributes: (item, option) => item.setAttribute('data-rendition', option.value),\n getOptionCacheKey: (option) => `${option.tier ?? ''}:${option.badge ?? ''}`,\n onValueChange: (value) => {\n const media = this.#mediaState.value;\n\n if (media) this.#core.selectValue(media, value);\n },\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n if (__DEV__ && !this.#mediaState.value && this.#mediaState.displayName) {\n logMissingFeature(this.localName, this.#mediaState.displayName);\n }\n }\n\n protected override update(changed: PropertyValues): void {\n const media = this.#mediaState.value;\n let state: QualityRadioGroupCore.State | null = null;\n\n if (media) {\n this.#core.setProps({ formatRendition: this.formatRendition, disabled: this.disabled, label: this.label });\n this.#core.setMedia(media);\n state = this.#core.getState();\n\n this.applyDefaultAriaLabel(translateText(this.#core.getLabel(state), this.#i18n.value));\n this.#options.sync(state, this.#i18n.value, this.#i18n.locale);\n this.publishMenuOptionState(state.disabled, state.hidden, state.availability);\n } else {\n this.publishMenuOptionState(true, true, 'unsupported');\n }\n\n super.update(changed);\n\n if (state) applyStateDataAttrs(this, state, QualityRadioGroupDataAttrs);\n }\n\n #setContent(item: MenuRadioItemElement, label: string, tier: string | undefined, badge: string | undefined): void {\n const labelPart = item.querySelector<HTMLElement>('[data-part~=\"label\"]');\n const tierPart = item.querySelector<HTMLElement>('[data-part~=\"tier\"]');\n const badgePart = item.querySelector<HTMLElement>('[data-part~=\"badge\"]');\n\n if (labelPart) {\n labelPart.textContent = label;\n }\n\n if (tierPart) {\n tierPart.textContent = tier ?? '';\n tierPart.hidden = !tier;\n }\n\n if (badgePart) {\n badgePart.textContent = badge ?? '';\n badgePart.hidden = !badge;\n }\n\n if (!labelPart && !tierPart && !badgePart) {\n item.textContent = [label, tier, badge].filter(Boolean).join(' ');\n }\n }\n}\n\nexport namespace QualityRadioGroupElement {\n export type State = QualityRadioGroupCore.State;\n}\n"],"mappings":";;;;;;;;;;AAaA,IAAa,2BAAb,cAA8C,sBAAsB;;;EASvD,KAAA,WAAA;EACY,KAAA,QAAA;EACL,KAAA,kBAAA,sBAAsB,aAAa;EAEpC,KAAA,QAAA,IAAI,sBAAsB;EAC1B,KAAA,QAAA,IAAI,eAAe,MAAM,WAAW;EAC9B,KAAA,cAAA,IAAI,iBAAiB,MAAM,eAAe,aAAa;EAC1D,KAAA,WAAA,IAAI,uBAAgD,MAAM;GAC5E,aAAa,MAAM,OAAO,WAAW,KAAKA,YAAY,MAAM,OAAO,OAAO,MAAM,OAAO,KAAK;GAC5F,oBAAoB,MAAM,WAAW,KAAK,aAAa,kBAAkB,OAAO,KAAK;GACrF,oBAAoB,WAAW,GAAG,OAAO,QAAQ,GAAG,GAAG,OAAO,SAAS;GACvE,gBAAgB,UAAU;IACxB,MAAM,QAAQ,KAAKC,YAAY;IAE/B,IAAI,OAAO,KAAKC,MAAM,YAAY,OAAO,KAAK;GAChD;EACF,CAAC;;;EAxBkC,KAAA,UAAA;;;EAEN,KAAA,aAAA;GAC3B,GAAG,sBAAsB;GACzB,UAAU,EAAE,MAAM,QAAQ;GAC1B,OAAO,EAAE,MAAM,OAAO;EACxB;;CAMA;CACA;CACA;CACA;CAWA,oBAAmC;EACjC,MAAM,kBAAkB;EAExB,IAAI,KAAK,WAAW;EAEpB,IAAe,CAAC,KAAKD,YAAY,SAAS,KAAKA,YAAY,aACzD,kBAAkB,KAAK,WAAW,KAAKA,YAAY,WAAW;CAElE;CAEA,OAA0B,SAA+B;EACvD,MAAM,QAAQ,KAAKA,YAAY;EAC/B,IAAI,QAA4C;EAEhD,IAAI,OAAO;GACT,KAAKC,MAAM,SAAS;IAAE,iBAAiB,KAAK;IAAiB,UAAU,KAAK;IAAU,OAAO,KAAK;GAAM,CAAC;GACzG,KAAKA,MAAM,SAAS,KAAK;GACzB,QAAQ,KAAKA,MAAM,SAAS;GAE5B,KAAK,sBAAsB,cAAc,KAAKA,MAAM,SAAS,KAAK,GAAG,KAAKC,MAAM,KAAK,CAAC;GACtF,KAAKC,SAAS,KAAK,OAAO,KAAKD,MAAM,OAAO,KAAKA,MAAM,MAAM;GAC7D,KAAK,uBAAuB,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY;EAC9E,OACE,KAAK,uBAAuB,MAAM,MAAM,aAAa;EAGvD,MAAM,OAAO,OAAO;EAEpB,IAAI,OAAO,oBAAoB,MAAM,OAAO,0BAA0B;CACxE;CAEA,YAAY,MAA4B,OAAe,MAA0B,OAAiC;EAChH,MAAM,YAAY,KAAK,cAA2B,wBAAsB;EACxE,MAAM,WAAW,KAAK,cAA2B,uBAAqB;EACtE,MAAM,YAAY,KAAK,cAA2B,wBAAsB;EAExE,IAAI,WACF,UAAU,cAAc;EAG1B,IAAI,UAAU;GACZ,SAAS,cAAc,QAAQ;GAC/B,SAAS,SAAS,CAAC;EACrB;EAEA,IAAI,WAAW;GACb,UAAU,cAAc,SAAS;GACjC,UAAU,SAAS,CAAC;EACtB;EAEA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAC9B,KAAK,cAAc;GAAC;GAAO;GAAM;EAAK,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAEpE;AACF"}
1
+ {"version":3,"file":"element.js","names":["#setContent","#mediaState","#core","#i18n","#options"],"sources":["../../../../src/ui/quality-radio-group/element.ts"],"sourcesContent":["import { QualityRadioGroupCore, QualityRadioGroupDataAttrs, type QualityRadioGroupOption } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectQuality } from '@videojs/core/dom';\nimport { type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MenuRadioGroupElement } from '../menu/radio-group';\nimport type { MenuRadioItemElement } from '../menu/radio-item';\nimport { RadioOptionsController } from '../radio-options/controller';\n\n/**\n * Menu radio group that generates an Auto `<media-menu-radio-item>` plus one per video rendition, and shares the\n * selected label and availability with an enclosing menu. An optional `<template>` holding one\n * `<media-menu-radio-item>` customizes each generated item; its `data-part` `label`, `tier`, and `badge` descendants\n * receive the rendition's text.\n */\nexport class QualityRadioGroupElement extends MenuRadioGroupElement {\n static override readonly tagName = 'media-quality-radio-group';\n\n static override properties = {\n ...MenuRadioGroupElement.properties,\n disabled: { type: Boolean },\n label: { type: String },\n } satisfies PropertyDeclarationMap<'value' | 'label' | 'disabled'>;\n\n disabled = false;\n label: Text | string = '';\n formatRendition = QualityRadioGroupCore.defaultProps.formatRendition;\n\n readonly #core = new QualityRadioGroupCore();\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #mediaState = new PlayerController(this, playerContext, selectQuality);\n readonly #options = new RadioOptionsController<QualityRadioGroupOption>(this, {\n renderItem: (item, label, option) => this.#setContent(item, label, option.tier, option.badge),\n setItemAttributes: (item, option) => item.setAttribute('data-rendition', option.value),\n getOptionCacheKey: (option) => `${option.tier ?? ''}:${option.badge ?? ''}`,\n onValueChange: (value) => {\n const media = this.#mediaState.value;\n\n if (media) this.#core.selectValue(media, value);\n },\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n if (__DEV__ && !this.#mediaState.value && this.#mediaState.displayName) {\n logMissingFeature(this.localName, this.#mediaState.displayName);\n }\n }\n\n protected override update(changed: PropertyValues): void {\n const media = this.#mediaState.value;\n let state: QualityRadioGroupCore.State | null = null;\n\n if (media) {\n this.#core.setProps({ formatRendition: this.formatRendition, disabled: this.disabled, label: this.label });\n this.#core.setMedia(media);\n state = this.#core.getState();\n\n this.applyDefaultAriaLabel(translateText(this.#core.getLabel(state), this.#i18n.value));\n this.#options.sync(state, this.#i18n.value, this.#i18n.locale);\n this.publishMenuOptionState(state.disabled, state.hidden, state.availability);\n } else {\n this.publishMenuOptionState(true, true, 'unsupported');\n }\n\n super.update(changed);\n\n if (state) applyStateDataAttrs(this, state, QualityRadioGroupDataAttrs);\n }\n\n #setContent(item: MenuRadioItemElement, label: string, tier: string | undefined, badge: string | undefined): void {\n const labelPart = item.querySelector<HTMLElement>('[data-part~=\"label\"]');\n const tierPart = item.querySelector<HTMLElement>('[data-part~=\"tier\"]');\n const badgePart = item.querySelector<HTMLElement>('[data-part~=\"badge\"]');\n\n if (labelPart) {\n labelPart.textContent = label;\n }\n\n if (tierPart) {\n tierPart.textContent = tier ?? '';\n tierPart.hidden = !tier;\n }\n\n if (badgePart) {\n badgePart.textContent = badge ?? '';\n badgePart.hidden = !badge;\n }\n\n if (!labelPart && !tierPart && !badgePart) {\n item.textContent = [label, tier, badge].filter(Boolean).join(' ');\n }\n }\n}\n\nexport namespace QualityRadioGroupElement {\n export type State = QualityRadioGroupCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAmBA,IAAa,2BAAb,cAA8C,sBAAsB;;;EASvD,KAAA,WAAA;EACY,KAAA,QAAA;EACL,KAAA,kBAAA,sBAAsB,aAAa;EAEpC,KAAA,QAAA,IAAI,sBAAsB;EAC1B,KAAA,QAAA,IAAI,eAAe,MAAM,WAAW;EAC9B,KAAA,cAAA,IAAI,iBAAiB,MAAM,eAAe,aAAa;EAC1D,KAAA,WAAA,IAAI,uBAAgD,MAAM;GAC5E,aAAa,MAAM,OAAO,WAAW,KAAKA,YAAY,MAAM,OAAO,OAAO,MAAM,OAAO,KAAK;GAC5F,oBAAoB,MAAM,WAAW,KAAK,aAAa,kBAAkB,OAAO,KAAK;GACrF,oBAAoB,WAAW,GAAG,OAAO,QAAQ,GAAG,GAAG,OAAO,SAAS;GACvE,gBAAgB,UAAU;IACxB,MAAM,QAAQ,KAAKC,YAAY;IAE/B,IAAI,OAAO,KAAKC,MAAM,YAAY,OAAO,KAAK;GAChD;EACF,CAAC;;;EAxBkC,KAAA,UAAA;;;EAEN,KAAA,aAAA;GAC3B,GAAG,sBAAsB;GACzB,UAAU,EAAE,MAAM,QAAQ;GAC1B,OAAO,EAAE,MAAM,OAAO;EACxB;;CAMA;CACA;CACA;CACA;CAWA,oBAAmC;EACjC,MAAM,kBAAkB;EAExB,IAAI,KAAK,WAAW;EAEpB,IAAe,CAAC,KAAKD,YAAY,SAAS,KAAKA,YAAY,aACzD,kBAAkB,KAAK,WAAW,KAAKA,YAAY,WAAW;CAElE;CAEA,OAA0B,SAA+B;EACvD,MAAM,QAAQ,KAAKA,YAAY;EAC/B,IAAI,QAA4C;EAEhD,IAAI,OAAO;GACT,KAAKC,MAAM,SAAS;IAAE,iBAAiB,KAAK;IAAiB,UAAU,KAAK;IAAU,OAAO,KAAK;GAAM,CAAC;GACzG,KAAKA,MAAM,SAAS,KAAK;GACzB,QAAQ,KAAKA,MAAM,SAAS;GAE5B,KAAK,sBAAsB,cAAc,KAAKA,MAAM,SAAS,KAAK,GAAG,KAAKC,MAAM,KAAK,CAAC;GACtF,KAAKC,SAAS,KAAK,OAAO,KAAKD,MAAM,OAAO,KAAKA,MAAM,MAAM;GAC7D,KAAK,uBAAuB,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY;EAC9E,OACE,KAAK,uBAAuB,MAAM,MAAM,aAAa;EAGvD,MAAM,OAAO,OAAO;EAEpB,IAAI,OAAO,oBAAoB,MAAM,OAAO,0BAA0B;CACxE;CAEA,YAAY,MAA4B,OAAe,MAA0B,OAAiC;EAChH,MAAM,YAAY,KAAK,cAA2B,wBAAsB;EACxE,MAAM,WAAW,KAAK,cAA2B,uBAAqB;EACtE,MAAM,YAAY,KAAK,cAA2B,wBAAsB;EAExE,IAAI,WACF,UAAU,cAAc;EAG1B,IAAI,UAAU;GACZ,SAAS,cAAc,QAAQ;GAC/B,SAAS,SAAS,CAAC;EACrB;EAEA,IAAI,WAAW;GACb,UAAU,cAAc,SAAS;GACjC,UAAU,SAAS,CAAC;EACtB;EAEA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAC9B,KAAK,cAAc;GAAC;GAAO;GAAM;EAAK,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAEpE;AACF"}
@@ -1,6 +1,10 @@
1
1
  import { ThumbnailElement } from "../thumbnail/element.js";
2
2
  import { PropertyValues } from "@videojs/element";
3
3
  //#region src/ui/slider/thumbnail.d.ts
4
+ /**
5
+ * `<media-thumbnail>` whose `time` follows the slider pointer. Left empty, it draws an image of its own; supply an
6
+ * `<img>` child to compose overlays or loading indicators beside the image it controls.
7
+ */
4
8
  declare class SliderThumbnailElement extends ThumbnailElement {
5
9
  #private;
6
10
  static readonly tagName = "media-slider-thumbnail";
@@ -2,6 +2,10 @@ import { sliderContext } from "./context.js";
2
2
  import { ThumbnailElement } from "../thumbnail/element.js";
3
3
  import { ContextConsumer } from "@videojs/element/context";
4
4
  //#region src/ui/slider/thumbnail.ts
5
+ /**
6
+ * `<media-thumbnail>` whose `time` follows the slider pointer. Left empty, it draws an image of its own; supply an
7
+ * `<img>` child to compose overlays or loading indicators beside the image it controls.
8
+ */
5
9
  var SliderThumbnailElement = class extends ThumbnailElement {
6
10
  static {
7
11
  this.tagName = "media-slider-thumbnail";
@@ -1 +1 @@
1
- {"version":3,"file":"thumbnail.js","names":["#ctx"],"sources":["../../../../src/ui/slider/thumbnail.ts"],"sourcesContent":["import type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ThumbnailElement } from '../thumbnail/element';\nimport { sliderContext } from './context';\n\n// @ts-expect-error TS2417 — tagName narrows to a different literal for custom element registration.\nexport class SliderThumbnailElement extends ThumbnailElement {\n static override readonly tagName = 'media-slider-thumbnail';\n\n readonly #ctx = new ContextConsumer(this, {\n context: sliderContext,\n subscribe: true,\n });\n\n protected override update(changed: PropertyValues): void {\n const ctx = this.#ctx.value;\n\n if (ctx) this.time = ctx.pointerValue;\n\n super.update(changed);\n }\n}\n"],"mappings":";;;;AAOA,IAAa,yBAAb,cAA4C,iBAAiB;;EACxB,KAAA,UAAA;;CAEnC,OAAgB,IAAI,gBAAgB,MAAM;EACxC,SAAS;EACT,WAAW;CACb,CAAC;CAED,OAA0B,SAA+B;EACvD,MAAM,MAAM,KAAKA,KAAK;EAEtB,IAAI,KAAK,KAAK,OAAO,IAAI;EAEzB,MAAM,OAAO,OAAO;CACtB;AACF"}
1
+ {"version":3,"file":"thumbnail.js","names":["#ctx"],"sources":["../../../../src/ui/slider/thumbnail.ts"],"sourcesContent":["import type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ThumbnailElement } from '../thumbnail/element';\nimport { sliderContext } from './context';\n\n/**\n * `<media-thumbnail>` whose `time` follows the slider pointer. Left empty, it draws an image of its own; supply an\n * `<img>` child to compose overlays or loading indicators beside the image it controls.\n */\n// @ts-expect-error TS2417 — tagName narrows to a different literal for custom element registration.\nexport class SliderThumbnailElement extends ThumbnailElement {\n static override readonly tagName = 'media-slider-thumbnail';\n\n readonly #ctx = new ContextConsumer(this, {\n context: sliderContext,\n subscribe: true,\n });\n\n protected override update(changed: PropertyValues): void {\n const ctx = this.#ctx.value;\n\n if (ctx) this.time = ctx.pointerValue;\n\n super.update(changed);\n }\n}\n"],"mappings":";;;;;;;;AAWA,IAAa,yBAAb,cAA4C,iBAAiB;;EACxB,KAAA,UAAA;;CAEnC,OAAgB,IAAI,gBAAgB,MAAM;EACxC,SAAS;EACT,WAAW;CACb,CAAC;CAED,OAA0B,SAA+B;EACvD,MAAM,MAAM,KAAKA,KAAK;EAEtB,IAAI,KAAK,KAAK,OAAO,IAAI;EAEzB,MAAM,OAAO,OAAO;CACtB;AACF"}
@@ -1,6 +1,7 @@
1
1
  import { UIElement } from "../ui-element.js";
2
2
  import { PropertyValues } from "@videojs/element";
3
3
  //#region src/ui/slider/value.d.ts
4
+ /** Writes the formatted current or pointer slider value into its own text content, replacing any children. */
4
5
  declare class SliderValueElement extends UIElement {
5
6
  #private;
6
7
  static readonly tagName = "media-slider-value";
@@ -3,6 +3,7 @@ import { sliderContext } from "./context.js";
3
3
  import { applyStateDataAttrs } from "@videojs/core/dom";
4
4
  import { ContextConsumer } from "@videojs/element/context";
5
5
  //#region src/ui/slider/value.ts
6
+ /** Writes the formatted current or pointer slider value into its own text content, replacing any children. */
6
7
  var SliderValueElement = class extends UIElement {
7
8
  constructor(..._args) {
8
9
  super(..._args);
@@ -1 +1 @@
1
- {"version":3,"file":"value.js","names":["#ctx"],"sources":["../../../../src/ui/slider/value.ts"],"sourcesContent":["import { applyStateDataAttrs } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { UIElement } from '../ui-element';\nimport { sliderContext } from './context';\n\nexport class SliderValueElement extends UIElement {\n static readonly tagName = 'media-slider-value';\n\n static override properties = {\n type: { type: String },\n } satisfies PropertyDeclarationMap<'type'>;\n\n type: 'current' | 'pointer' = 'current';\n\n readonly #ctx = new ContextConsumer(this, {\n context: sliderContext,\n subscribe: true,\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute('aria-live', 'off');\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const ctx = this.#ctx.value;\n if (!ctx) return;\n\n const value = this.type === 'pointer' ? ctx.pointerValue : ctx.state.value;\n\n this.textContent = ctx.formatValue ? ctx.formatValue(value, this.type) : String(Math.round(value));\n\n applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n"],"mappings":";;;;;AAOA,IAAa,qBAAb,cAAwC,UAAU;;;EAOlB,KAAA,OAAA;EAEd,KAAA,OAAA,IAAI,gBAAgB,MAAM;GACxC,SAAS;GACT,WAAW;EACb,CAAC;;;EAXyB,KAAA,UAAA;;;EAEG,KAAA,aAAA,EAC3B,MAAM,EAAE,MAAM,OAAO,EACvB;;CAIA;CAKA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,KAAK,aAAa,aAAa,KAAK;CACtC;CAEA,OAA0B,UAAgC;EACxD,MAAM,OAAO,QAAQ;EAErB,MAAM,MAAM,KAAKA,KAAK;EACtB,IAAI,CAAC,KAAK;EAEV,MAAM,QAAQ,KAAK,SAAS,YAAY,IAAI,eAAe,IAAI,MAAM;EAErE,KAAK,cAAc,IAAI,cAAc,IAAI,YAAY,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,KAAK,CAAC;EAEjG,oBAAoB,MAAM,IAAI,OAAO,IAAI,YAAY;CACvD;AACF"}
1
+ {"version":3,"file":"value.js","names":["#ctx"],"sources":["../../../../src/ui/slider/value.ts"],"sourcesContent":["import { applyStateDataAttrs } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { UIElement } from '../ui-element';\nimport { sliderContext } from './context';\n\n/** Writes the formatted current or pointer slider value into its own text content, replacing any children. */\nexport class SliderValueElement extends UIElement {\n static readonly tagName = 'media-slider-value';\n\n static override properties = {\n type: { type: String },\n } satisfies PropertyDeclarationMap<'type'>;\n\n type: 'current' | 'pointer' = 'current';\n\n readonly #ctx = new ContextConsumer(this, {\n context: sliderContext,\n subscribe: true,\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute('aria-live', 'off');\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const ctx = this.#ctx.value;\n if (!ctx) return;\n\n const value = this.type === 'pointer' ? ctx.pointerValue : ctx.state.value;\n\n this.textContent = ctx.formatValue ? ctx.formatValue(value, this.type) : String(Math.round(value));\n\n applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n"],"mappings":";;;;;;AAQA,IAAa,qBAAb,cAAwC,UAAU;;;EAOlB,KAAA,OAAA;EAEd,KAAA,OAAA,IAAI,gBAAgB,MAAM;GACxC,SAAS;GACT,WAAW;EACb,CAAC;;;EAXyB,KAAA,UAAA;;;EAEG,KAAA,aAAA,EAC3B,MAAM,EAAE,MAAM,OAAO,EACvB;;CAIA;CAKA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,KAAK,aAAa,aAAa,KAAK;CACtC;CAEA,OAA0B,UAAgC;EACxD,MAAM,OAAO,QAAQ;EAErB,MAAM,MAAM,KAAKA,KAAK;EACtB,IAAI,CAAC,KAAK;EAEV,MAAM,QAAQ,KAAK,SAAS,YAAY,IAAI,eAAe,IAAI,MAAM;EAErE,KAAK,cAAc,IAAI,cAAc,IAAI,YAAY,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,KAAK,CAAC;EAEjG,oBAAoB,MAAM,IAAI,OAAO,IAAI,YAAY;CACvD;AACF"}
@@ -7,7 +7,9 @@ import { PropertyValues } from "@videojs/element";
7
7
  *
8
8
  * The element owns `src` and `srcset` on the active image. Left empty, it draws an image of its own in its shadow root.
9
9
  * Supply an `<img>` child instead — `<media-thumbnail time="12"><img alt=""></media-thumbnail>` — to compose overlays
10
- * or loading indicators beside the image the element controls.
10
+ * or loading indicators beside the image the element controls. Any `crossorigin`, `loading`, or `fetchpriority` the
11
+ * child already carries wins over the element's own; the rest are filled in. Inside a skin, an `<img slot="thumbnail">`
12
+ * of yours replaces the one the skin carries.
11
13
  */
12
14
  declare class ThumbnailElement extends UIElement {
13
15
  #private;
@@ -14,6 +14,15 @@ img,
14
14
  ::slotted(img) {
15
15
  display: block;
16
16
  }`;
17
+ /**
18
+ * Image attributes the element fills in from its own properties. Ones already on an image when it is adopted are the
19
+ * author's and are left alone, so an `<img slot="thumbnail" loading="lazy">` keeps its settings inside a skin.
20
+ */
21
+ const IMAGE_ATTRIBUTES = [
22
+ "crossorigin",
23
+ "loading",
24
+ "fetchpriority"
25
+ ];
17
26
  /** The image the element draws when none is supplied, reachable from outside as `::part(image)`. */
18
27
  function createFallbackImage() {
19
28
  const img = document.createElement("img");
@@ -28,7 +37,9 @@ function createFallbackImage() {
28
37
  *
29
38
  * The element owns `src` and `srcset` on the active image. Left empty, it draws an image of its own in its shadow root.
30
39
  * Supply an `<img>` child instead — `<media-thumbnail time="12"><img alt=""></media-thumbnail>` — to compose overlays
31
- * or loading indicators beside the image the element controls.
40
+ * or loading indicators beside the image the element controls. Any `crossorigin`, `loading`, or `fetchpriority` the
41
+ * child already carries wins over the element's own; the rest are filled in. Inside a skin, an `<img slot="thumbnail">`
42
+ * of yours replaces the one the skin carries.
32
43
  */
33
44
  var ThumbnailElement = class extends UIElement {
34
45
  static {
@@ -56,6 +67,8 @@ var ThumbnailElement = class extends UIElement {
56
67
  #textTracks;
57
68
  #slots;
58
69
  #img;
70
+ /** Attributes `#img` already carried when adopted, which the author owns. */
71
+ #authored;
59
72
  #thumbnails;
60
73
  #externalThumbnails;
61
74
  #lastTextTrack;
@@ -71,6 +84,7 @@ var ThumbnailElement = class extends UIElement {
71
84
  this.#textTracks = new PlayerController(this, playerContext, selectTextTrack);
72
85
  this.#slots = null;
73
86
  this.#img = null;
87
+ this.#authored = /* @__PURE__ */ new Set();
74
88
  this.#thumbnails = [];
75
89
  this.#api = null;
76
90
  const style = document.createElement("style");
@@ -130,11 +144,7 @@ var ThumbnailElement = class extends UIElement {
130
144
  const thumbnail = this.#core.findActiveThumbnail(this.#thumbnails, this.time);
131
145
  const img = findComposedElement(this, isHTMLImageElement) ?? this.#fallback;
132
146
  this.#adopt(img);
133
- applyElementProps(img, {
134
- crossorigin: this.#core.resolveCrossOrigin(this.crossOrigin, this.#inheritedCrossOrigin(textTrack)),
135
- loading: this.loading,
136
- fetchpriority: this.fetchPriority
137
- });
147
+ this.#applyImageAttributes(img, textTrack);
138
148
  this.#api?.updateSrc(thumbnail?.url);
139
149
  this.#applySource(thumbnail?.url);
140
150
  this.#api?.connect();
@@ -163,6 +173,16 @@ var ThumbnailElement = class extends UIElement {
163
173
  #inheritedCrossOrigin(textTrack) {
164
174
  return this.#externalThumbnails ? void 0 : textTrack?.thumbnailTrackCrossOrigin;
165
175
  }
176
+ /** Sync image attributes from element properties, leaving the ones the author put on the image alone. */
177
+ #applyImageAttributes(img, textTrack) {
178
+ const props = {
179
+ crossorigin: this.#core.resolveCrossOrigin(this.crossOrigin, this.#inheritedCrossOrigin(textTrack)),
180
+ loading: this.loading,
181
+ fetchpriority: this.fetchPriority
182
+ };
183
+ for (const name of this.#authored) delete props[name];
184
+ applyElementProps(img, props);
185
+ }
166
186
  #applyResize(result) {
167
187
  this.style.width = `${result.containerWidth}px`;
168
188
  this.style.height = `${result.containerHeight}px`;
@@ -191,8 +211,10 @@ var ThumbnailElement = class extends UIElement {
191
211
  this.#resetStyles();
192
212
  previous.removeAttribute("src");
193
213
  previous.removeAttribute("srcset");
214
+ for (const name of IMAGE_ATTRIBUTES) if (!this.#authored.has(name)) previous.removeAttribute(name);
194
215
  }
195
216
  this.#img = next;
217
+ this.#authored = new Set(next ? IMAGE_ATTRIBUTES.filter((name) => next.hasAttribute(name)) : []);
196
218
  this.#imageAttributes.disconnect();
197
219
  if (next && next !== this.#fallback) this.#imageAttributes.observe(next, {
198
220
  attributes: true,
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["#core","#shadow","#fallback","#children","#imageAttributes","#textTracks","#externalThumbnails","#api","#img","#slots","#adopt","#thumbnails","#lastTextTrack","#inheritedCrossOrigin","#applySource","#resetStyles","#applyResize"],"sources":["../../../../src/ui/thumbnail/element.ts"],"sourcesContent":["import {\n mapCuesToThumbnails,\n ThumbnailCore,\n ThumbnailDataAttrs,\n type ThumbnailImage,\n type ThumbnailResizeResult,\n} from '@videojs/core';\nimport type { ThumbnailApi } from '@videojs/core/dom';\nimport { applyElementProps, applyStateDataAttrs, createThumbnail, selectTextTrack } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { MediaTextTrackState } from '@videojs/media';\nimport { findComposedElement, isHTMLImageElement, listen } from '@videojs/utils/dom';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\nconst SHADOW_CSS = `\\\n:host {\n display: inline-block;\n overflow: hidden;\n}\nimg,\n::slotted(img) {\n display: block;\n}`;\n\n/** The image the element draws when none is supplied, reachable from outside as `::part(image)`. */\nfunction createFallbackImage(): HTMLImageElement {\n const img = document.createElement('img');\n\n img.alt = '';\n img.setAttribute('part', 'image');\n img.setAttribute('aria-hidden', 'true');\n img.setAttribute('decoding', 'async');\n\n return img;\n}\n\n/**\n * `<media-thumbnail>` — resolves and sizes a time-based thumbnail into an image.\n *\n * The element owns `src` and `srcset` on the active image. Left empty, it draws an image of its own in its shadow root.\n * Supply an `<img>` child instead — `<media-thumbnail time=\"12\"><img alt=\"\"></media-thumbnail>` — to compose overlays\n * or loading indicators beside the image the element controls.\n */\nexport class ThumbnailElement extends UIElement {\n static readonly tagName = 'media-thumbnail';\n\n static override properties = {\n time: { type: Number },\n crossOrigin: { type: String, attribute: 'crossorigin' },\n loading: { type: String },\n fetchPriority: { type: String, attribute: 'fetchpriority' },\n } satisfies PropertyDeclarationMap<Exclude<keyof ThumbnailCore.Props, 'thumbnails'>>;\n\n time = 0;\n crossOrigin: ThumbnailCore.Props['crossOrigin'];\n loading: ThumbnailCore.Props['loading'];\n fetchPriority: ThumbnailCore.Props['fetchPriority'];\n\n readonly #core = new ThumbnailCore();\n readonly #shadow = this.attachShadow({ mode: 'open' });\n readonly #fallback = createFallbackImage();\n readonly #children = new MutationObserver(() => this.requestUpdate());\n // An image assigned through a forwarding slot lives outside this subtree, so its\n // attributes are watched on the image itself.\n readonly #imageAttributes = new MutationObserver(() => this.requestUpdate());\n readonly #textTracks = new PlayerController(this, playerContext, selectTextTrack);\n\n #slots: AbortController | null = null;\n #img: HTMLImageElement | null = null;\n #thumbnails: ThumbnailImage[] = [];\n #externalThumbnails: ThumbnailImage[] | undefined;\n #lastTextTrack: MediaTextTrackState | undefined;\n #api: ThumbnailApi | null = null;\n\n constructor() {\n super();\n\n const style = document.createElement('style');\n\n style.textContent = SHADOW_CSS;\n this.#shadow.append(style, document.createElement('slot'), this.#fallback);\n }\n\n /**\n * Set thumbnail images directly, bypassing the automatic `<track>` detection. When set, this takes priority over the\n * text track path.\n */\n get thumbnails(): ThumbnailImage[] | undefined {\n return this.#externalThumbnails;\n }\n\n set thumbnails(value: ThumbnailImage[] | undefined) {\n this.#externalThumbnails = value;\n this.requestUpdate();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#api = createThumbnail({\n getContainer: () => this,\n getImg: () => this.#img,\n onStateChange: () => this.requestUpdate(),\n });\n this.#children.observe(this, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['src', 'srcset'],\n });\n\n // Nodes assigned to a forwarding slot are not children of this subtree, so an image slotted\n // in later never shows up as a mutation. The slot announces it with `slotchange` instead.\n this.#slots = new AbortController();\n listen(this, 'slotchange', () => this.requestUpdate(), { signal: this.#slots.signal });\n\n // Disconnecting let go of the image, and reconnecting alone schedules no update,\n // so a moved element adopts its image and reapplies the source here.\n this.requestUpdate();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.#adopt(null);\n this.#children.disconnect();\n this.#slots?.abort();\n this.#slots = null;\n this.#api?.destroy();\n this.#api = null;\n }\n\n override destroyCallback(): void {\n this.#api?.destroy();\n super.destroyCallback();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const textTrack = this.#textTracks.value;\n\n // Resolve thumbnails: external prop takes priority over auto <track> path.\n if (this.#externalThumbnails) {\n this.#thumbnails = this.#externalThumbnails;\n } else if (textTrack !== this.#lastTextTrack) {\n this.#lastTextTrack = textTrack;\n this.#thumbnails =\n textTrack && textTrack.thumbnailCues.length > 0\n ? mapCuesToThumbnails(textTrack.thumbnailCues, textTrack.thumbnailTrackSrc ?? undefined)\n : [];\n }\n\n const thumbnail = this.#core.findActiveThumbnail(this.#thumbnails, this.time);\n const img = findComposedElement(this, isHTMLImageElement) ?? this.#fallback;\n\n this.#adopt(img);\n\n // Sync img attributes from element properties.\n applyElementProps(img, {\n crossorigin: this.#core.resolveCrossOrigin(this.crossOrigin, this.#inheritedCrossOrigin(textTrack)),\n loading: this.loading,\n fetchpriority: this.fetchPriority,\n });\n\n // Track src changes via the thumbnail API.\n this.#api?.updateSrc(thumbnail?.url);\n this.#applySource(thumbnail?.url);\n this.#api?.connect();\n\n if (!thumbnail) {\n this.#resetStyles();\n\n const state = this.#core.getState(false, false, undefined);\n\n applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, ThumbnailDataAttrs);\n return;\n }\n\n const api = this.#api;\n const state = this.#core.getState(api?.loading ?? false, api?.error ?? false, thumbnail);\n\n applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, ThumbnailDataAttrs);\n\n if (api?.naturalWidth && api.naturalHeight) {\n const constraints = api.readConstraints();\n const result = this.#core.resize(thumbnail, api.naturalWidth, api.naturalHeight, constraints);\n\n if (result) {\n this.#applyResize(result);\n }\n }\n }\n\n /**\n * Leaving `crossOrigin` unset means \"follow the media element\", so thumbnails keep working on a CORS-enabled player\n * without a skin having to thread an attribute through. Only the `<track>` path inherits: `thumbnails` set directly\n * may point at a host that has nothing to do with the media element.\n */\n #inheritedCrossOrigin(textTrack: MediaTextTrackState | undefined): ThumbnailCore.Props['crossOrigin'] {\n return this.#externalThumbnails ? undefined : textTrack?.thumbnailTrackCrossOrigin;\n }\n\n #applyResize(result: ThumbnailResizeResult): void {\n this.style.width = `${result.containerWidth}px`;\n this.style.height = `${result.containerHeight}px`;\n\n const imgStyle = this.#img?.style;\n if (!imgStyle) return;\n\n imgStyle.width = `${result.imageWidth}px`;\n imgStyle.height = `${result.imageHeight}px`;\n imgStyle.maxWidth = 'none';\n imgStyle.transform =\n result.offsetX || result.offsetY ? `translate(-${result.offsetX}px, -${result.offsetY}px)` : '';\n }\n\n #resetStyles(): void {\n this.style.width = '';\n this.style.height = '';\n\n const imgStyle = this.#img?.style;\n if (!imgStyle) return;\n\n imgStyle.width = '';\n imgStyle.height = '';\n imgStyle.maxWidth = '';\n imgStyle.transform = '';\n }\n\n #adopt(next: HTMLImageElement | null): void {\n if (next === this.#img) return;\n\n const previous = this.#img;\n\n if (previous) {\n this.#api?.disconnectImg(previous);\n this.#resetStyles();\n previous.removeAttribute('src');\n previous.removeAttribute('srcset');\n }\n\n this.#img = next;\n this.#imageAttributes.disconnect();\n\n if (next && next !== this.#fallback) {\n this.#imageAttributes.observe(next, { attributes: true, attributeFilter: ['src', 'srcset'] });\n }\n\n // The fallback only occupies the shadow root while it is the active image,\n // so a supplied image never sits beside a hidden one.\n if (next === this.#fallback) this.#shadow.append(this.#fallback);\n else if (next) this.#fallback.remove();\n\n // Reset the request even when the next image will receive the same URL. A\n // replacement image is a new download with its own lifecycle.\n this.#api?.updateSrc(undefined);\n }\n\n #applySource(src: string | undefined): void {\n const img = this.#img;\n if (!img) return;\n\n // A srcset candidate wins over src, so the root has to clear both parts of\n // the source contract before applying the selected thumbnail URL.\n img.removeAttribute('srcset');\n\n if (!src) img.removeAttribute('src');\n else if (img.getAttribute('src') !== src) img.setAttribute('src', src);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"element.js","names":["#core","#shadow","#fallback","#children","#imageAttributes","#textTracks","#externalThumbnails","#api","#img","#slots","#adopt","#thumbnails","#lastTextTrack","#applyImageAttributes","#applySource","#resetStyles","#applyResize","#inheritedCrossOrigin","#authored"],"sources":["../../../../src/ui/thumbnail/element.ts"],"sourcesContent":["import {\n mapCuesToThumbnails,\n ThumbnailCore,\n ThumbnailDataAttrs,\n type ThumbnailImage,\n type ThumbnailResizeResult,\n} from '@videojs/core';\nimport type { ThumbnailApi } from '@videojs/core/dom';\nimport { applyElementProps, applyStateDataAttrs, createThumbnail, selectTextTrack } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { MediaTextTrackState } from '@videojs/media';\nimport { findComposedElement, isHTMLImageElement, listen } from '@videojs/utils/dom';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\nconst SHADOW_CSS = `\\\n:host {\n display: inline-block;\n overflow: hidden;\n}\nimg,\n::slotted(img) {\n display: block;\n}`;\n\n/**\n * Image attributes the element fills in from its own properties. Ones already on an image when it is adopted are the\n * author's and are left alone, so an `<img slot=\"thumbnail\" loading=\"lazy\">` keeps its settings inside a skin.\n */\nconst IMAGE_ATTRIBUTES = ['crossorigin', 'loading', 'fetchpriority'] as const;\n\ntype ImageAttribute = (typeof IMAGE_ATTRIBUTES)[number];\n\n/** The image the element draws when none is supplied, reachable from outside as `::part(image)`. */\nfunction createFallbackImage(): HTMLImageElement {\n const img = document.createElement('img');\n\n img.alt = '';\n img.setAttribute('part', 'image');\n img.setAttribute('aria-hidden', 'true');\n img.setAttribute('decoding', 'async');\n\n return img;\n}\n\n/**\n * `<media-thumbnail>` — resolves and sizes a time-based thumbnail into an image.\n *\n * The element owns `src` and `srcset` on the active image. Left empty, it draws an image of its own in its shadow root.\n * Supply an `<img>` child instead — `<media-thumbnail time=\"12\"><img alt=\"\"></media-thumbnail>` — to compose overlays\n * or loading indicators beside the image the element controls. Any `crossorigin`, `loading`, or `fetchpriority` the\n * child already carries wins over the element's own; the rest are filled in. Inside a skin, an `<img slot=\"thumbnail\">`\n * of yours replaces the one the skin carries.\n */\nexport class ThumbnailElement extends UIElement {\n static readonly tagName = 'media-thumbnail';\n\n static override properties = {\n time: { type: Number },\n crossOrigin: { type: String, attribute: 'crossorigin' },\n loading: { type: String },\n fetchPriority: { type: String, attribute: 'fetchpriority' },\n } satisfies PropertyDeclarationMap<Exclude<keyof ThumbnailCore.Props, 'thumbnails'>>;\n\n time = 0;\n crossOrigin: ThumbnailCore.Props['crossOrigin'];\n loading: ThumbnailCore.Props['loading'];\n fetchPriority: ThumbnailCore.Props['fetchPriority'];\n\n readonly #core = new ThumbnailCore();\n readonly #shadow = this.attachShadow({ mode: 'open' });\n readonly #fallback = createFallbackImage();\n readonly #children = new MutationObserver(() => this.requestUpdate());\n // An image assigned through a forwarding slot lives outside this subtree, so its\n // attributes are watched on the image itself.\n readonly #imageAttributes = new MutationObserver(() => this.requestUpdate());\n readonly #textTracks = new PlayerController(this, playerContext, selectTextTrack);\n\n #slots: AbortController | null = null;\n #img: HTMLImageElement | null = null;\n /** Attributes `#img` already carried when adopted, which the author owns. */\n #authored = new Set<ImageAttribute>();\n #thumbnails: ThumbnailImage[] = [];\n #externalThumbnails: ThumbnailImage[] | undefined;\n #lastTextTrack: MediaTextTrackState | undefined;\n #api: ThumbnailApi | null = null;\n\n constructor() {\n super();\n\n const style = document.createElement('style');\n\n style.textContent = SHADOW_CSS;\n this.#shadow.append(style, document.createElement('slot'), this.#fallback);\n }\n\n /**\n * Set thumbnail images directly, bypassing the automatic `<track>` detection. When set, this takes priority over the\n * text track path.\n */\n get thumbnails(): ThumbnailImage[] | undefined {\n return this.#externalThumbnails;\n }\n\n set thumbnails(value: ThumbnailImage[] | undefined) {\n this.#externalThumbnails = value;\n this.requestUpdate();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#api = createThumbnail({\n getContainer: () => this,\n getImg: () => this.#img,\n onStateChange: () => this.requestUpdate(),\n });\n this.#children.observe(this, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['src', 'srcset'],\n });\n\n // Nodes assigned to a forwarding slot are not children of this subtree, so an image slotted\n // in later never shows up as a mutation. The slot announces it with `slotchange` instead.\n this.#slots = new AbortController();\n listen(this, 'slotchange', () => this.requestUpdate(), { signal: this.#slots.signal });\n\n // Disconnecting let go of the image, and reconnecting alone schedules no update,\n // so a moved element adopts its image and reapplies the source here.\n this.requestUpdate();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.#adopt(null);\n this.#children.disconnect();\n this.#slots?.abort();\n this.#slots = null;\n this.#api?.destroy();\n this.#api = null;\n }\n\n override destroyCallback(): void {\n this.#api?.destroy();\n super.destroyCallback();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const textTrack = this.#textTracks.value;\n\n // Resolve thumbnails: external prop takes priority over auto <track> path.\n if (this.#externalThumbnails) {\n this.#thumbnails = this.#externalThumbnails;\n } else if (textTrack !== this.#lastTextTrack) {\n this.#lastTextTrack = textTrack;\n this.#thumbnails =\n textTrack && textTrack.thumbnailCues.length > 0\n ? mapCuesToThumbnails(textTrack.thumbnailCues, textTrack.thumbnailTrackSrc ?? undefined)\n : [];\n }\n\n const thumbnail = this.#core.findActiveThumbnail(this.#thumbnails, this.time);\n const img = findComposedElement(this, isHTMLImageElement) ?? this.#fallback;\n\n this.#adopt(img);\n this.#applyImageAttributes(img, textTrack);\n\n // Track src changes via the thumbnail API.\n this.#api?.updateSrc(thumbnail?.url);\n this.#applySource(thumbnail?.url);\n this.#api?.connect();\n\n if (!thumbnail) {\n this.#resetStyles();\n\n const state = this.#core.getState(false, false, undefined);\n\n applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, ThumbnailDataAttrs);\n return;\n }\n\n const api = this.#api;\n const state = this.#core.getState(api?.loading ?? false, api?.error ?? false, thumbnail);\n\n applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, ThumbnailDataAttrs);\n\n if (api?.naturalWidth && api.naturalHeight) {\n const constraints = api.readConstraints();\n const result = this.#core.resize(thumbnail, api.naturalWidth, api.naturalHeight, constraints);\n\n if (result) {\n this.#applyResize(result);\n }\n }\n }\n\n /**\n * Leaving `crossOrigin` unset means \"follow the media element\", so thumbnails keep working on a CORS-enabled player\n * without a skin having to thread an attribute through. Only the `<track>` path inherits: `thumbnails` set directly\n * may point at a host that has nothing to do with the media element.\n */\n #inheritedCrossOrigin(textTrack: MediaTextTrackState | undefined): ThumbnailCore.Props['crossOrigin'] {\n return this.#externalThumbnails ? undefined : textTrack?.thumbnailTrackCrossOrigin;\n }\n\n /** Sync image attributes from element properties, leaving the ones the author put on the image alone. */\n #applyImageAttributes(img: HTMLImageElement, textTrack: MediaTextTrackState | undefined): void {\n const props: Partial<Record<ImageAttribute, string | undefined>> = {\n crossorigin: this.#core.resolveCrossOrigin(this.crossOrigin, this.#inheritedCrossOrigin(textTrack)),\n loading: this.loading,\n fetchpriority: this.fetchPriority,\n };\n\n for (const name of this.#authored) delete props[name];\n\n applyElementProps(img, props);\n }\n\n #applyResize(result: ThumbnailResizeResult): void {\n this.style.width = `${result.containerWidth}px`;\n this.style.height = `${result.containerHeight}px`;\n\n const imgStyle = this.#img?.style;\n if (!imgStyle) return;\n\n imgStyle.width = `${result.imageWidth}px`;\n imgStyle.height = `${result.imageHeight}px`;\n imgStyle.maxWidth = 'none';\n imgStyle.transform =\n result.offsetX || result.offsetY ? `translate(-${result.offsetX}px, -${result.offsetY}px)` : '';\n }\n\n #resetStyles(): void {\n this.style.width = '';\n this.style.height = '';\n\n const imgStyle = this.#img?.style;\n if (!imgStyle) return;\n\n imgStyle.width = '';\n imgStyle.height = '';\n imgStyle.maxWidth = '';\n imgStyle.transform = '';\n }\n\n #adopt(next: HTMLImageElement | null): void {\n if (next === this.#img) return;\n\n const previous = this.#img;\n\n if (previous) {\n this.#api?.disconnectImg(previous);\n this.#resetStyles();\n previous.removeAttribute('src');\n previous.removeAttribute('srcset');\n\n for (const name of IMAGE_ATTRIBUTES) {\n if (!this.#authored.has(name)) previous.removeAttribute(name);\n }\n }\n\n // Ownership is settled once, when an image becomes active: after the first\n // sync the attributes we set would themselves look authored.\n this.#img = next;\n this.#authored = new Set(next ? IMAGE_ATTRIBUTES.filter((name) => next.hasAttribute(name)) : []);\n this.#imageAttributes.disconnect();\n\n if (next && next !== this.#fallback) {\n this.#imageAttributes.observe(next, { attributes: true, attributeFilter: ['src', 'srcset'] });\n }\n\n // The fallback only occupies the shadow root while it is the active image,\n // so a supplied image never sits beside a hidden one.\n if (next === this.#fallback) this.#shadow.append(this.#fallback);\n else if (next) this.#fallback.remove();\n\n // Reset the request even when the next image will receive the same URL. A\n // replacement image is a new download with its own lifecycle.\n this.#api?.updateSrc(undefined);\n }\n\n #applySource(src: string | undefined): void {\n const img = this.#img;\n if (!img) return;\n\n // A srcset candidate wins over src, so the root has to clear both parts of\n // the source contract before applying the selected thumbnail URL.\n img.removeAttribute('srcset');\n\n if (!src) img.removeAttribute('src');\n else if (img.getAttribute('src') !== src) img.setAttribute('src', src);\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { UIElement } from "../ui-element.js";
2
2
  //#region src/ui/time/group.d.ts
3
+ /** Container for composed `<media-time>` and `<media-time-separator>` displays. */
3
4
  declare class TimeGroupElement extends UIElement {
4
5
  static readonly tagName = "media-time-group";
5
6
  }
@@ -1,5 +1,6 @@
1
1
  import { UIElement } from "../ui-element.js";
2
2
  //#region src/ui/time/group.ts
3
+ /** Container for composed `<media-time>` and `<media-time-separator>` displays. */
3
4
  var TimeGroupElement = class extends UIElement {
4
5
  static {
5
6
  this.tagName = "media-time-group";
@@ -1 +1 @@
1
- {"version":3,"file":"group.js","names":[],"sources":["../../../../src/ui/time/group.ts"],"sourcesContent":["import { UIElement } from '../ui-element';\n\nexport class TimeGroupElement extends UIElement {\n static readonly tagName = 'media-time-group';\n\n // Future: Could provide context for hoursDisplay to children via Lit context\n}\n"],"mappings":";;AAEA,IAAa,mBAAb,cAAsC,UAAU;;EACpB,KAAA,UAAA;;AAG5B"}
1
+ {"version":3,"file":"group.js","names":[],"sources":["../../../../src/ui/time/group.ts"],"sourcesContent":["import { UIElement } from '../ui-element';\n\n/** Container for composed `<media-time>` and `<media-time-separator>` displays. */\nexport class TimeGroupElement extends UIElement {\n static readonly tagName = 'media-time-group';\n\n // Future: Could provide context for hoursDisplay to children via Lit context\n}\n"],"mappings":";;;AAGA,IAAa,mBAAb,cAAsC,UAAU;;EACpB,KAAA,UAAA;;AAG5B"}
@@ -87,9 +87,12 @@ var TimeSliderElement = class extends UIElement {
87
87
  isDisabled: () => {
88
88
  const time = this.#timeState.value;
89
89
  const buffer = this.#bufferState.value;
90
- return this.disabled || !time || !buffer || !hasTimeRange({
90
+ return this.disabled || !time || !hasTimeRange({
91
91
  ...time,
92
- ...buffer
92
+ ...buffer ?? {
93
+ buffered: [],
94
+ seekable: []
95
+ }
93
96
  });
94
97
  },
95
98
  getPercent: () => {
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["#core","#controlsState","#provider","#timeState","#bufferState","#playbackState","#i18n","#disconnect","#slider","#releaseControlsLock","#releaseControlsVisibilityLock","#resumeIfDragPaused"],"sources":["../../../../src/ui/time-slider/element.ts"],"sourcesContent":["import { TimeSliderCore, TimeSliderDataAttrs } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createSlider,\n getTimeSliderCSSVars,\n logMissingFeature,\n type SliderApi,\n selectBuffer,\n selectControls,\n selectPlayback,\n selectTime,\n} from '@videojs/core/dom';\nimport { type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport { hasTimeRange } from '@videojs/media';\nimport { applyStyles } from '@videojs/utils/dom';\nimport { formatTime } from '@videojs/utils/time';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { sliderContext } from '../slider/context';\nimport { UIElement } from '../ui-element';\n\n/**\n * @fires drag-start - Fired when a pointer drag starts.\n * @fires drag-end - Fired when a pointer drag ends.\n */\nexport class TimeSliderElement extends UIElement {\n static readonly tagName = 'media-time-slider';\n\n static override properties = {\n label: { type: String },\n changeThrottle: { type: Number, attribute: 'change-throttle' },\n step: { type: Number },\n largeStep: { type: Number, attribute: 'large-step' },\n orientation: { type: String },\n disabled: { type: Boolean },\n thumbAlignment: { type: String, attribute: 'thumb-alignment' },\n pauseOnDrag: { type: Boolean, attribute: 'pause-on-drag' },\n } satisfies PropertyDeclarationMap<Exclude<keyof TimeSliderCore.Props, 'value' | 'min' | 'max'>>;\n\n label: Text | string = '';\n changeThrottle = TimeSliderCore.defaultProps.changeThrottle;\n step = TimeSliderCore.defaultProps.step;\n largeStep = TimeSliderCore.defaultProps.largeStep;\n orientation = TimeSliderCore.defaultProps.orientation;\n disabled = TimeSliderCore.defaultProps.disabled;\n thumbAlignment = TimeSliderCore.defaultProps.thumbAlignment;\n pauseOnDrag = TimeSliderCore.defaultProps.pauseOnDrag;\n\n readonly #core = new TimeSliderCore();\n readonly #controlsState = new PlayerController(this, playerContext, selectControls);\n readonly #provider = new ContextProvider(this, { context: sliderContext });\n readonly #timeState = new PlayerController(this, playerContext, selectTime);\n readonly #bufferState = new PlayerController(this, playerContext, selectBuffer);\n readonly #playbackState = new PlayerController(this, playerContext, selectPlayback);\n readonly #i18n = new I18nController(this, i18nContext);\n\n #slider: SliderApi | null = null;\n #disconnect: AbortController | null = null;\n #releaseControlsLock: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#disconnect = new AbortController();\n const signal = this.#disconnect.signal;\n\n this.#slider = createSlider({\n getElement: () => this,\n getThumbElement: () => this.querySelector<HTMLElement>('media-slider-thumb'),\n getOrientation: () => this.orientation,\n isDisabled: () => {\n const time = this.#timeState.value;\n const buffer = this.#bufferState.value;\n\n return this.disabled || !time || !buffer || !hasTimeRange({ ...time, ...buffer });\n },\n getPercent: () => {\n const media = this.#timeState.value;\n if (!media) return 0;\n\n return this.#core.percentFromValue(media.currentTime);\n },\n getStepPercent: () => this.#core.getStepPercent(),\n getLargeStepPercent: () => this.#core.getLargeStepPercent(),\n onValueCommit: (percent) => {\n const media = this.#timeState.value;\n\n if (media) media.seek(this.#core.rawValueFromPercent(percent));\n },\n changeThrottle: this.changeThrottle,\n onPressStart: () => {\n this.#releaseControlsLock ??= this.#controlsState.value?.requestControlsLock() ?? null;\n },\n onPressEnd: () => this.#releaseControlsVisibilityLock(),\n onDragStart: () => {\n this.#core.startDrag(this.#playbackState.value);\n this.dispatchEvent(new CustomEvent('drag-start', { bubbles: true }));\n },\n onDragEnd: () => {\n this.#core.endDrag(this.#playbackState.value);\n this.dispatchEvent(new CustomEvent('drag-end', { bubbles: true }));\n },\n adjustPercent: (raw, thumbSize, trackSize) => this.#core.adjustPercentForAlignment(raw, thumbSize, trackSize),\n onResize: () => this.requestUpdate(),\n });\n\n applyElementProps(this, this.#slider.rootProps, { signal });\n applyStyles(this, this.#slider.rootStyle);\n this.#slider.input.subscribe(() => this.requestUpdate(), { signal });\n\n if (__DEV__ && !this.#timeState.value) {\n logMissingFeature(this.localName, this.#timeState.displayName!);\n }\n }\n\n override disconnectedCallback(): void {\n this.#releaseControlsVisibilityLock();\n this.#resumeIfDragPaused();\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#releaseControlsVisibilityLock();\n this.#resumeIfDragPaused();\n this.#slider?.destroy();\n super.destroyCallback();\n }\n\n // createSlider's destroy() does not fire onDragEnd, so a teardown mid-drag\n // would leave playback paused. Called from both disconnect and destroy paths\n // before super so the PlayerController is still attached.\n #resumeIfDragPaused(): void {\n this.#core.endDrag(this.#playbackState.value);\n }\n\n #releaseControlsVisibilityLock(): void {\n this.#releaseControlsLock?.();\n this.#releaseControlsLock = null;\n }\n\n protected override willUpdate(_changed: PropertyValues): void {\n super.willUpdate(_changed);\n this.#core.setProps({\n label: this.label,\n changeThrottle: this.changeThrottle,\n step: this.step,\n largeStep: this.largeStep,\n orientation: this.orientation,\n disabled: this.disabled,\n thumbAlignment: this.thumbAlignment,\n pauseOnDrag: this.pauseOnDrag,\n });\n this.#core.setFormatLocale(this.#i18n.locale);\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n if (!this.#slider) return;\n\n const time = this.#timeState.value;\n const buffer = this.#bufferState.value;\n\n if (!time) return;\n\n this.#core.setInput(this.#slider.input.current);\n const media = { ...time, ...(buffer ?? { buffered: [], seekable: [] }) };\n\n this.#core.setMedia(media);\n const state = this.#core.getState();\n\n const cssVars = getTimeSliderCSSVars(this.#slider.adjustForAlignment(state));\n const thumbAttrs = this.#core.getAttrs(state);\n\n applyStyles(this, cssVars);\n\n // Domain-specific data attributes on root (includes data-seeking).\n applyStateDataAttrs(this, state, TimeSliderDataAttrs);\n\n // Provide context to child elements with base slider data attrs.\n this.#provider.setValue({\n state,\n stateAttrMap: TimeSliderDataAttrs,\n pointerValue: this.#core.rawValueFromPercent(state.pointerPercent),\n thumbAttrs: {\n ...thumbAttrs,\n 'aria-label': translateText(thumbAttrs['aria-label'], this.#i18n.value),\n 'aria-valuetext': translateText(\n thumbAttrs['aria-valuetext'],\n this.#i18n.value,\n this.#core.getValueTextParams(state)\n ),\n },\n thumbProps: this.#slider.thumbProps,\n formatValue: (value) => formatTime(value, state.duration, { locale: this.#i18n.locale }),\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"element.js","names":["#core","#controlsState","#provider","#timeState","#bufferState","#playbackState","#i18n","#disconnect","#slider","#releaseControlsLock","#releaseControlsVisibilityLock","#resumeIfDragPaused"],"sources":["../../../../src/ui/time-slider/element.ts"],"sourcesContent":["import { TimeSliderCore, TimeSliderDataAttrs } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createSlider,\n getTimeSliderCSSVars,\n logMissingFeature,\n type SliderApi,\n selectBuffer,\n selectControls,\n selectPlayback,\n selectTime,\n} from '@videojs/core/dom';\nimport { type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport { hasTimeRange } from '@videojs/media';\nimport { applyStyles } from '@videojs/utils/dom';\nimport { formatTime } from '@videojs/utils/time';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { sliderContext } from '../slider/context';\nimport { UIElement } from '../ui-element';\n\n/**\n * @fires drag-start - Fired when a pointer drag starts.\n * @fires drag-end - Fired when a pointer drag ends.\n */\nexport class TimeSliderElement extends UIElement {\n static readonly tagName = 'media-time-slider';\n\n static override properties = {\n label: { type: String },\n changeThrottle: { type: Number, attribute: 'change-throttle' },\n step: { type: Number },\n largeStep: { type: Number, attribute: 'large-step' },\n orientation: { type: String },\n disabled: { type: Boolean },\n thumbAlignment: { type: String, attribute: 'thumb-alignment' },\n pauseOnDrag: { type: Boolean, attribute: 'pause-on-drag' },\n } satisfies PropertyDeclarationMap<Exclude<keyof TimeSliderCore.Props, 'value' | 'min' | 'max'>>;\n\n label: Text | string = '';\n changeThrottle = TimeSliderCore.defaultProps.changeThrottle;\n step = TimeSliderCore.defaultProps.step;\n largeStep = TimeSliderCore.defaultProps.largeStep;\n orientation = TimeSliderCore.defaultProps.orientation;\n disabled = TimeSliderCore.defaultProps.disabled;\n thumbAlignment = TimeSliderCore.defaultProps.thumbAlignment;\n pauseOnDrag = TimeSliderCore.defaultProps.pauseOnDrag;\n\n readonly #core = new TimeSliderCore();\n readonly #controlsState = new PlayerController(this, playerContext, selectControls);\n readonly #provider = new ContextProvider(this, { context: sliderContext });\n readonly #timeState = new PlayerController(this, playerContext, selectTime);\n readonly #bufferState = new PlayerController(this, playerContext, selectBuffer);\n readonly #playbackState = new PlayerController(this, playerContext, selectPlayback);\n readonly #i18n = new I18nController(this, i18nContext);\n\n #slider: SliderApi | null = null;\n #disconnect: AbortController | null = null;\n #releaseControlsLock: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#disconnect = new AbortController();\n const signal = this.#disconnect.signal;\n\n this.#slider = createSlider({\n getElement: () => this,\n getThumbElement: () => this.querySelector<HTMLElement>('media-slider-thumb'),\n getOrientation: () => this.orientation,\n isDisabled: () => {\n const time = this.#timeState.value;\n const buffer = this.#bufferState.value;\n\n // `bufferFeature` is optional: compositions that omit it still get a working slider, with an empty buffer.\n return this.disabled || !time || !hasTimeRange({ ...time, ...(buffer ?? { buffered: [], seekable: [] }) });\n },\n getPercent: () => {\n const media = this.#timeState.value;\n if (!media) return 0;\n\n return this.#core.percentFromValue(media.currentTime);\n },\n getStepPercent: () => this.#core.getStepPercent(),\n getLargeStepPercent: () => this.#core.getLargeStepPercent(),\n onValueCommit: (percent) => {\n const media = this.#timeState.value;\n\n if (media) media.seek(this.#core.rawValueFromPercent(percent));\n },\n changeThrottle: this.changeThrottle,\n onPressStart: () => {\n this.#releaseControlsLock ??= this.#controlsState.value?.requestControlsLock() ?? null;\n },\n onPressEnd: () => this.#releaseControlsVisibilityLock(),\n onDragStart: () => {\n this.#core.startDrag(this.#playbackState.value);\n this.dispatchEvent(new CustomEvent('drag-start', { bubbles: true }));\n },\n onDragEnd: () => {\n this.#core.endDrag(this.#playbackState.value);\n this.dispatchEvent(new CustomEvent('drag-end', { bubbles: true }));\n },\n adjustPercent: (raw, thumbSize, trackSize) => this.#core.adjustPercentForAlignment(raw, thumbSize, trackSize),\n onResize: () => this.requestUpdate(),\n });\n\n applyElementProps(this, this.#slider.rootProps, { signal });\n applyStyles(this, this.#slider.rootStyle);\n this.#slider.input.subscribe(() => this.requestUpdate(), { signal });\n\n if (__DEV__ && !this.#timeState.value) {\n logMissingFeature(this.localName, this.#timeState.displayName!);\n }\n }\n\n override disconnectedCallback(): void {\n this.#releaseControlsVisibilityLock();\n this.#resumeIfDragPaused();\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#releaseControlsVisibilityLock();\n this.#resumeIfDragPaused();\n this.#slider?.destroy();\n super.destroyCallback();\n }\n\n // createSlider's destroy() does not fire onDragEnd, so a teardown mid-drag\n // would leave playback paused. Called from both disconnect and destroy paths\n // before super so the PlayerController is still attached.\n #resumeIfDragPaused(): void {\n this.#core.endDrag(this.#playbackState.value);\n }\n\n #releaseControlsVisibilityLock(): void {\n this.#releaseControlsLock?.();\n this.#releaseControlsLock = null;\n }\n\n protected override willUpdate(_changed: PropertyValues): void {\n super.willUpdate(_changed);\n this.#core.setProps({\n label: this.label,\n changeThrottle: this.changeThrottle,\n step: this.step,\n largeStep: this.largeStep,\n orientation: this.orientation,\n disabled: this.disabled,\n thumbAlignment: this.thumbAlignment,\n pauseOnDrag: this.pauseOnDrag,\n });\n this.#core.setFormatLocale(this.#i18n.locale);\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n if (!this.#slider) return;\n\n const time = this.#timeState.value;\n const buffer = this.#bufferState.value;\n\n if (!time) return;\n\n this.#core.setInput(this.#slider.input.current);\n const media = { ...time, ...(buffer ?? { buffered: [], seekable: [] }) };\n\n this.#core.setMedia(media);\n const state = this.#core.getState();\n\n const cssVars = getTimeSliderCSSVars(this.#slider.adjustForAlignment(state));\n const thumbAttrs = this.#core.getAttrs(state);\n\n applyStyles(this, cssVars);\n\n // Domain-specific data attributes on root (includes data-seeking).\n applyStateDataAttrs(this, state, TimeSliderDataAttrs);\n\n // Provide context to child elements with base slider data attrs.\n this.#provider.setValue({\n state,\n stateAttrMap: TimeSliderDataAttrs,\n pointerValue: this.#core.rawValueFromPercent(state.pointerPercent),\n thumbAttrs: {\n ...thumbAttrs,\n 'aria-label': translateText(thumbAttrs['aria-label'], this.#i18n.value),\n 'aria-valuetext': translateText(\n thumbAttrs['aria-valuetext'],\n this.#i18n.value,\n this.#core.getValueTextParams(state)\n ),\n },\n thumbProps: this.#slider.thumbProps,\n formatValue: (value) => formatTime(value, state.duration, { locale: this.#i18n.locale }),\n });\n }\n}\n"],"mappings":"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"}
@@ -4,8 +4,7 @@ import { PropertyValues } from "@videojs/element";
4
4
  /**
5
5
  * Displays the resolved content title.
6
6
  *
7
- * The element owns its text content. Set the title through the player's `content-title` attribute rather than by
8
- * writing children.
7
+ * The element owns its text content. Set the title through the player's `content-title` attribute.
9
8
  */
10
9
  declare class TitleElement extends UIElement {
11
10
  #private;
@@ -2,13 +2,12 @@ import { playerContext } from "../../player/context.js";
2
2
  import { PlayerController } from "../../player/controller.js";
3
3
  import { UIElement } from "../ui-element.js";
4
4
  import { TitleCore, TitleDataAttrs } from "@videojs/core";
5
- import { applyStateDataAttrs, logMissingFeature, selectMetadata } from "@videojs/core/dom";
5
+ import { applyStateDataAttrs, logMissingFeature, selectControls, selectMetadata } from "@videojs/core/dom";
6
6
  //#region src/ui/title/element.ts
7
7
  /**
8
8
  * Displays the resolved content title.
9
9
  *
10
- * The element owns its text content. Set the title through the player's `content-title` attribute rather than by
11
- * writing children.
10
+ * The element owns its text content. Set the title through the player's `content-title` attribute.
12
11
  */
13
12
  var TitleElement = class extends UIElement {
14
13
  static {
@@ -16,18 +15,17 @@ var TitleElement = class extends UIElement {
16
15
  }
17
16
  #core = new TitleCore();
18
17
  #metadataState = new PlayerController(this, playerContext, selectMetadata);
19
- #textNode = new Text();
18
+ #controlsState = new PlayerController(this, playerContext, selectControls);
20
19
  connectedCallback() {
21
20
  super.connectedCallback();
22
- if (!this.#textNode.parentNode) this.append(this.#textNode);
23
21
  if (!this.#metadataState.value) logMissingFeature(this.localName, this.#metadataState.displayName);
24
22
  }
25
23
  update(changed) {
26
24
  super.update(changed);
27
25
  const metadata = this.#metadataState.value;
28
26
  if (!metadata) return;
29
- const state = this.#core.getState(metadata);
30
- this.#textNode.textContent = state.title;
27
+ const state = this.#core.getState(metadata, this.#controlsState.value);
28
+ if (this.textContent !== state.title) this.textContent = state.title;
31
29
  this.hidden = state.hidden;
32
30
  applyStateDataAttrs(this, state, TitleDataAttrs);
33
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["#core","#metadataState","#textNode"],"sources":["../../../../src/ui/title/element.ts"],"sourcesContent":["import { TitleCore, TitleDataAttrs } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectMetadata } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\n/**\n * Displays the resolved content title.\n *\n * The element owns its text content. Set the title through the player's `content-title` attribute rather than by\n * writing children.\n */\nexport class TitleElement extends UIElement {\n static readonly tagName = 'media-title';\n\n readonly #core = new TitleCore();\n readonly #metadataState = new PlayerController(this, playerContext, selectMetadata);\n\n readonly #textNode = new Text();\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.#textNode.parentNode) {\n this.append(this.#textNode);\n }\n\n if (__DEV__ && !this.#metadataState.value) {\n logMissingFeature(this.localName, this.#metadataState.displayName!);\n }\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const metadata = this.#metadataState.value;\n if (!metadata) return;\n\n const state = this.#core.getState(metadata);\n\n this.#textNode.textContent = state.title;\n this.hidden = state.hidden;\n\n applyStateDataAttrs(this, state, TitleDataAttrs);\n }\n}\n"],"mappings":";;;;;;;;;;;;AAcA,IAAa,eAAb,cAAkC,UAAU;;EAChB,KAAA,UAAA;;CAE1B,QAAiB,IAAI,UAAU;CAC/B,iBAA0B,IAAI,iBAAiB,MAAM,eAAe,cAAc;CAElF,YAAqB,IAAI,KAAK;CAE9B,oBAAmC;EACjC,MAAM,kBAAkB;EAExB,IAAI,CAAC,KAAKE,UAAU,YAClB,KAAK,OAAO,KAAKA,SAAS;EAG5B,IAAe,CAAC,KAAKD,eAAe,OAClC,kBAAkB,KAAK,WAAW,KAAKA,eAAe,WAAY;CAEtE;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAEpB,MAAM,WAAW,KAAKA,eAAe;EACrC,IAAI,CAAC,UAAU;EAEf,MAAM,QAAQ,KAAKD,MAAM,SAAS,QAAQ;EAE1C,KAAKE,UAAU,cAAc,MAAM;EACnC,KAAK,SAAS,MAAM;EAEpB,oBAAoB,MAAM,OAAO,cAAc;CACjD;AACF"}
1
+ {"version":3,"file":"element.js","names":["#core","#metadataState","#controlsState"],"sources":["../../../../src/ui/title/element.ts"],"sourcesContent":["import { TitleCore, TitleDataAttrs } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectControls, selectMetadata } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\n/**\n * Displays the resolved content title.\n *\n * The element owns its text content. Set the title through the player's `content-title` attribute.\n */\nexport class TitleElement extends UIElement {\n static readonly tagName = 'media-title';\n\n readonly #core = new TitleCore();\n readonly #metadataState = new PlayerController(this, playerContext, selectMetadata);\n readonly #controlsState = new PlayerController(this, playerContext, selectControls);\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (__DEV__ && !this.#metadataState.value) {\n logMissingFeature(this.localName, this.#metadataState.displayName!);\n }\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const metadata = this.#metadataState.value;\n if (!metadata) return;\n\n const state = this.#core.getState(metadata, this.#controlsState.value);\n\n // Controls visibility also triggers updates, so only touch the text node when the title changed.\n // Replacing it needlessly makes assistive tech re-announce a title that should stay put.\n if (this.textContent !== state.title) this.textContent = state.title;\n\n this.hidden = state.hidden;\n\n applyStateDataAttrs(this, state, TitleDataAttrs);\n }\n}\n"],"mappings":";;;;;;;;;;;AAaA,IAAa,eAAb,cAAkC,UAAU;;EAChB,KAAA,UAAA;;CAE1B,QAAiB,IAAI,UAAU;CAC/B,iBAA0B,IAAI,iBAAiB,MAAM,eAAe,cAAc;CAClF,iBAA0B,IAAI,iBAAiB,MAAM,eAAe,cAAc;CAElF,oBAAmC;EACjC,MAAM,kBAAkB;EAExB,IAAe,CAAC,KAAKC,eAAe,OAClC,kBAAkB,KAAK,WAAW,KAAKA,eAAe,WAAY;CAEtE;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAEpB,MAAM,WAAW,KAAKA,eAAe;EACrC,IAAI,CAAC,UAAU;EAEf,MAAM,QAAQ,KAAKD,MAAM,SAAS,UAAU,KAAKE,eAAe,KAAK;EAIrE,IAAI,KAAK,gBAAgB,MAAM,OAAO,KAAK,cAAc,MAAM;EAE/D,KAAK,SAAS,MAAM;EAEpB,oBAAoB,MAAM,OAAO,cAAc;CACjD;AACF"}
package/docs/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @videojs/html documentation
2
2
 
3
- Bundled markdown documentation for `@videojs/html` v10.0.0-rc.2.
3
+ Bundled markdown documentation for `@videojs/html` v10.0.0-rc.4.
4
4
 
5
5
  Start at [`./llms.txt`](./llms.txt) — it's the structured index of every page in this directory.
6
6
 
@@ -0,0 +1,93 @@
1
+ # Accessibility
2
+
3
+ How Video.js approaches accessibility, and what you should consider if you're deeply customizing your player
4
+
5
+ Video.js is built with accessibility in mind so your player can reach the widest possible audience.
6
+
7
+ Here are some of the accessibility aspects we consider. You should consider them too if you’re performing deeper customization.
8
+
9
+ ## Standards we target
10
+
11
+ - [**WAI-ARIA 1.2**](https://www.w3.org/TR/wai-aria-1.2/) defines roles, states, and properties that [assistive technologies](https://www.w3.org/WAI/people-use-web/tools-techniques/) use to understand controls.
12
+ - [**WCAG 2.2**](https://www.w3.org/TR/WCAG22/) provides success criteria for perceivable, operable, understandable, and robust web content.
13
+ - [**CVAA**](https://www.fcc.gov/consumers/guides/21st-century-communications-and-video-accessibility-act-cvaa) is a U.S. federal law requiring closed captioning and accessible controls for video content.
14
+ - [**ADA**](https://www.ada.gov/) is a U.S. civil rights law that prohibits disability discrimination. Courts increasingly apply it to websites, including video players.
15
+ - [**European Accessibility Act**](https://eur-lex.europa.eu/eli/dir/2019/882/oj) applies across the EU from June 28, 2025, and covers services such as e-commerce and audiovisual media. [**EN 301 549**](https://www.etsi.org/human-factors-accessibility/en-301-549-v3-the-harmonized-european-standard-for-ict-accessibility) is the European standard for meeting it, and it incorporates WCAG.
16
+
17
+ These standards and laws are listed for context, not as legal advice. Check which ones apply to your product.
18
+
19
+ ## ARIA roles and labels
20
+
21
+ Components set ARIA roles and attributes automatically. For example, sliders render with `role="slider"` and value attributes, buttons update their `aria-label` based on player state, and decorative elements like time separators are hidden with `aria-hidden="true"`.
22
+
23
+ Built-in labels are translated. See [Internationalize the player](./internationalization.md) to add or switch locales, and verify that labels are contextually correct for your content. Each component’s reference page documents the attributes it sets.
24
+
25
+ Tooltips are visual only. They are not linked to their trigger with `aria-describedby`, so a custom trigger needs its own accessible name. Built-in media buttons already have one.
26
+
27
+ ## Keyboard interaction
28
+
29
+ All interactive components support keyboard control. For example, buttons activate with Enter and Space, sliders respond to Arrow keys, Home, End, and Page Up/Page Down, and popovers close with Escape. Each component’s reference page lists its full keyboard support. We follow the patterns in the [WAI-ARIA Authoring Practices Guide](https://www.w3.org/WAI/ARIA/apg/).
30
+
31
+ Player-wide shortcuts, such as Space to play or M to mute, and tap gestures come from hotkey and gesture components. The skins ship a full set, and custom UI declares its own. See [Add keyboard shortcuts and gestures](./keyboard-shortcuts.md).
32
+
33
+ ## Focus management
34
+
35
+ Interactive elements are focusable when enabled and leave the [tab order](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) when disabled. Popover triggers link to their popups with `aria-controls` and `aria-expanded`. Menus and popovers close when focus moves away.
36
+
37
+ Dialogs move focus inside when they open, keep Tab within the dialog, and make the content behind them inert. Closing a dialog returns focus to its trigger, or to the element that had focus before it opened.
38
+
39
+ The player container is focusable and labeled: it takes `role="group"`, `tabindex="0"`, and an `aria-label` you can override. Keyboard users can tab to the player as a whole, and screen readers announce it as a named group.
40
+
41
+ ## Status announcements
42
+
43
+ The player announces confirmed state changes through a visually hidden live region (`role="status"`), so screen reader users hear when playback starts or pauses, captions turn on or off, fullscreen, picture-in-picture, playback rate, or volume change, and where a seek lands.
44
+
45
+ Announcements follow confirmed state from the player store rather than requested changes, so routine time updates never reach the live region. Rapid volume and seek changes are grouped into a single announcement, and the player stays quiet while one of its sliders has focus, since the slider already announces its own value. The skins include the [status announcer](../reference/components/status-announcer.md). A custom layout needs to add it. State the store tracks is covered once it’s there; a custom control that tracks its own state needs its own live region.
46
+
47
+ ## Captions and subtitles
48
+
49
+ The [text tracks feature](../reference/api/feature-text-tracks.md) supports captions and subtitles. Closed captions in the U.S. are governed by the [FCC](https://www.fcc.gov/) under the [CVAA](https://www.fcc.gov/consumers/guides/21st-century-communications-and-video-accessibility-act-cvaa), which requires both captioning and viewer control over caption appearance (font, size, color, opacity, and edge style). Non-compliance carries legal risk.
50
+
51
+ Video.js leaves caption rendering to the browser, and you style cues with the `::cue` pseudo-element. It doesn’t include a menu for caption appearance, so viewers rely on the caption preferences their browser and operating system provide. The [WebKit Caption Display Settings explainer](https://github.com/WebKit/explainers/tree/main/CaptionDisplaySettings) tracks how browsers are bringing these preferences into the web platform. See [Show captions and subtitles](./captions.md) to add tracks and a captions control.
52
+
53
+ ## Transcripts and audio description
54
+
55
+ Captions don’t cover every viewer. [WCAG 2.2](https://www.w3.org/WAI/WCAG22/Understanding/audio-description-or-media-alternative-prerecorded) also expects audio description or a text alternative for prerecorded video. A transcript can live inside the [player](../reference/components/player.md) but outside its container, so it reads player state without going fullscreen with the video. When a stream includes a described audio track, an [audio track menu](../reference/components/audio-track-radio-group.md) lets viewers choose it.
56
+
57
+ ## Color contrast
58
+
59
+ Skins respond to [`prefers-contrast: more`](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-contrast) by increasing background opacity on overlays and controls, and to [`prefers-reduced-transparency: reduce`](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-transparency) by raising baseline opacity so text stays readable over video.
60
+
61
+ Video is harder than most UI for contrast because the background is always changing. A control that passes checks over a dark frame can disappear over a bright title card. Automated tools won’t catch this, so test your controls against light, dark, and mixed video content. Custom components should test against [WCAG 1.4.3 (contrast minimum)](https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum) and [1.4.11 (non-text contrast)](https://www.w3.org/WAI/WCAG22/Understanding/non-text-contrast).
62
+
63
+ ## Touch targets
64
+
65
+ Skin controls size from `--media-scale-unit`, which defaults to `16px`, so they don’t grow with the user’s font size preference. Set it to `1rem` to scale with the document root font size. See [Customize skins](./customize-skins.md#scale-from-the-document-font-size).
66
+
67
+ Skin buttons set [`touch-action: manipulation`](https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action) to remove tap delay on touch devices, and sliders set `touch-action: none` so dragging doesn’t scroll the page. Skins use [`pointer: fine` and `pointer: coarse`](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/pointer) to adapt transitions for mouse and touch input.
68
+
69
+ If you build custom controls, target at least 24x24 CSS pixels per [WCAG 2.5.8 (target size minimum)](https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum). Larger is better on touch-first surfaces.
70
+
71
+ ## Color scheme
72
+
73
+ The audio skins switch their palette for light and dark mode with [`light-dark()`](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/light-dark), which follows the inherited [`color-scheme`](https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme), not the user’s preference directly. Set `color-scheme: light dark` on the page or the player to follow the user’s setting. The video skins keep dark controls in both schemes; only their border follows it. See [Customize skins](./customize-skins.md#set-the-color-scheme).
74
+
75
+ ## Reduced motion
76
+
77
+ Skins respect [`prefers-reduced-motion`](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion) by simplifying or removing animations and transitions. Follow the same pattern in custom components.
78
+
79
+ That covers the controls, not the video. Video.js doesn’t pause or hide autoplaying video for reduced-motion users; your page decides that.
80
+
81
+ ## Autoplay and moving video
82
+
83
+ [WCAG 2.2.2](https://www.w3.org/WAI/WCAG22/Understanding/pause-stop-hide) requires a way to pause, stop, or hide motion that starts automatically and lasts more than five seconds. A muted, looping hero video counts. Give it a pause control, or keep it short.
84
+
85
+ A purely decorative video should be hidden from assistive technology with `aria-hidden="true"` on its wrapper. If the video carries information, give it an accessible name and controls, and use a regular player. See [Add a background video](./background-video.md) and [Autoplay](./autoplay.md).
86
+
87
+ ## Test with assistive technology
88
+
89
+ Automated tools catch markup issues but miss real usability problems. Test your player with a [screen reader](https://www.w3.org/WAI/people-use-web/tools-techniques/) ([VoiceOver](https://support.apple.com/guide/voiceover/welcome/mac) on macOS, [NVDA](https://www.nvaccess.org/about-nvda/) or [JAWS](https://www.freedomscientific.com/products/software/jaws/) on Windows) and keyboard-only navigation. Verify that every control is reachable, operable, and announces its purpose and state. The [WAI “Easy Checks”](https://www.w3.org/WAI/test-evaluate/preliminary/) are a good starting point.
90
+
91
+ ## Further reading
92
+
93
+ The W3C WAI guides on [making audio and video media accessible](https://www.w3.org/WAI/media/av/) and [accessible media players](https://www.w3.org/WAI/media/av/player/) go deeper on everything covered here.