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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1021) hide show
  1. package/dist/default/define/audio/compat-skin.css +1923 -0
  2. package/dist/default/define/audio/compat-skin.js +6 -0
  3. package/dist/default/define/audio/compat-skin2.js +4 -0
  4. package/dist/default/define/audio/neutral-skin.css +1855 -0
  5. package/dist/default/define/audio/neutral-skin.js +6 -0
  6. package/dist/default/define/audio/neutral-skin2.js +4 -0
  7. package/dist/default/define/audio/{minimal-ui.js → neutral-ui.js} +1 -1
  8. package/dist/default/define/audio/skin.css +1220 -1411
  9. package/dist/default/define/audio/skin2.js +1 -1
  10. package/dist/default/define/background/skin.css +8 -19
  11. package/dist/default/define/global.css +5 -21
  12. package/dist/default/define/live-audio/compat-skin.css +1708 -0
  13. package/dist/default/define/live-audio/compat-skin.js +6 -0
  14. package/dist/default/define/live-audio/compat-skin2.js +4 -0
  15. package/dist/default/define/live-audio/neutral-skin.css +1270 -0
  16. package/dist/default/define/live-audio/neutral-skin.js +6 -0
  17. package/dist/default/define/live-audio/neutral-skin2.js +4 -0
  18. package/dist/default/define/live-audio/{minimal-ui.js → neutral-ui.js} +1 -1
  19. package/dist/default/define/live-audio/skin.css +849 -959
  20. package/dist/default/define/live-audio/skin2.js +1 -1
  21. package/dist/default/define/live-video/compat-skin.css +2251 -0
  22. package/dist/default/define/live-video/compat-skin.js +6 -0
  23. package/dist/default/define/live-video/compat-skin2.js +4 -0
  24. package/dist/default/define/live-video/neutral-skin.css +2101 -0
  25. package/dist/default/define/live-video/neutral-skin.js +6 -0
  26. package/dist/default/define/live-video/neutral-skin2.js +4 -0
  27. package/dist/default/define/live-video/{minimal-ui.js → neutral-ui.js} +1 -1
  28. package/dist/default/define/live-video/skin.css +1565 -1784
  29. package/dist/default/define/live-video/skin2.js +1 -1
  30. package/dist/default/define/media/dash-video.js +5 -1
  31. package/dist/default/define/media/shaka-video.js +1 -0
  32. package/dist/default/define/shadow.css +2 -12
  33. package/dist/default/define/video/compat-skin.css +2529 -0
  34. package/dist/default/define/video/compat-skin.js +6 -0
  35. package/dist/default/define/video/compat-skin2.js +4 -0
  36. package/dist/default/define/video/neutral-skin.css +2849 -0
  37. package/dist/default/define/video/neutral-skin.js +6 -0
  38. package/dist/default/define/video/neutral-skin2.js +4 -0
  39. package/dist/default/define/video/{minimal-ui.js → neutral-ui.js} +1 -1
  40. package/dist/default/define/video/skin.css +2046 -2454
  41. package/dist/default/define/video/skin2.js +1 -1
  42. package/dist/default/extensions/google-cast/extension.js +18 -17
  43. package/dist/default/extensions/mux-data/extension.js +24 -24
  44. package/dist/default/extensions/player-extension-element.js +49 -0
  45. package/dist/default/i18n/index.js +2 -2
  46. package/dist/default/i18n/locale.js +10 -2
  47. package/dist/default/i18n/provider-element.js +1 -0
  48. package/dist/default/i18n/provider-mixin.js +11 -9
  49. package/dist/default/i18n/render-text.js +5 -1
  50. package/dist/default/i18n/text/airplay.js +1 -0
  51. package/dist/default/i18n/text/buttons.js +1 -0
  52. package/dist/default/i18n/text/captions.js +1 -0
  53. package/dist/default/i18n/text/cast.js +1 -0
  54. package/dist/default/i18n/text/common.js +1 -0
  55. package/dist/default/i18n/text/container.js +1 -0
  56. package/dist/default/i18n/text/errors.js +1 -0
  57. package/dist/default/i18n/text/fullscreen.js +1 -0
  58. package/dist/default/i18n/text/live.js +1 -0
  59. package/dist/default/i18n/text/menu.js +1 -0
  60. package/dist/default/i18n/text/pip.js +1 -0
  61. package/dist/default/i18n/text/playback.js +1 -0
  62. package/dist/default/i18n/text/seek.js +1 -0
  63. package/dist/default/i18n/text/slider.js +1 -0
  64. package/dist/default/i18n/text/status.js +1 -0
  65. package/dist/default/i18n/text/time.js +1 -0
  66. package/dist/default/i18n/text/volume.js +1 -0
  67. package/dist/default/icons/compat/index.js +26 -0
  68. package/dist/default/icons/dist/element/compat/icons.js +30 -0
  69. package/dist/default/icons/dist/element/{minimal → compat}/index.js +2 -2
  70. package/dist/default/icons/dist/element/index.js +2 -1
  71. package/dist/default/icons/dist/element/{minimal → neutral}/icons.js +1 -1
  72. package/dist/default/icons/dist/element/neutral/index.js +8 -0
  73. package/dist/default/icons/dist/html/compat/airplay-enter.js +4 -0
  74. package/dist/default/icons/dist/html/compat/airplay-exit.js +4 -0
  75. package/dist/default/icons/dist/html/compat/captions-off.js +4 -0
  76. package/dist/default/icons/dist/html/compat/captions-on.js +4 -0
  77. package/dist/default/icons/dist/html/compat/cast-enter.js +4 -0
  78. package/dist/default/icons/dist/html/compat/cast-exit.js +4 -0
  79. package/dist/default/icons/dist/html/compat/check.js +4 -0
  80. package/dist/default/icons/dist/html/compat/chevron.js +4 -0
  81. package/dist/default/icons/dist/html/compat/fullscreen-enter.js +4 -0
  82. package/dist/default/icons/dist/html/compat/fullscreen-exit.js +4 -0
  83. package/dist/default/icons/dist/html/compat/gear.js +4 -0
  84. package/dist/default/icons/dist/html/compat/pause.js +4 -0
  85. package/dist/default/icons/dist/html/compat/pip-enter.js +4 -0
  86. package/dist/default/icons/dist/html/compat/pip-exit.js +4 -0
  87. package/dist/default/icons/dist/html/compat/play.js +4 -0
  88. package/dist/default/icons/dist/html/compat/quality.js +4 -0
  89. package/dist/default/icons/dist/html/compat/restart.js +4 -0
  90. package/dist/default/icons/dist/html/compat/seek.js +4 -0
  91. package/dist/default/icons/dist/html/compat/speech.js +4 -0
  92. package/dist/default/icons/dist/html/compat/speed.js +4 -0
  93. package/dist/default/icons/dist/html/{minimal → compat}/spinner.js +1 -1
  94. package/dist/default/icons/dist/html/compat/switches.js +4 -0
  95. package/dist/default/icons/dist/html/compat/volume-high.js +4 -0
  96. package/dist/default/icons/dist/html/compat/volume-low.js +4 -0
  97. package/dist/default/icons/dist/html/compat/volume-off.js +4 -0
  98. package/dist/default/icons/dist/html/{minimal → neutral}/airplay-enter.js +1 -1
  99. package/dist/default/icons/dist/html/{minimal → neutral}/airplay-exit.js +1 -1
  100. package/dist/default/icons/dist/html/{minimal → neutral}/captions-off.js +1 -1
  101. package/dist/default/icons/dist/html/{minimal → neutral}/captions-on.js +1 -1
  102. package/dist/default/icons/dist/html/{minimal → neutral}/cast-enter.js +1 -1
  103. package/dist/default/icons/dist/html/{minimal → neutral}/cast-exit.js +1 -1
  104. package/dist/default/icons/dist/html/{minimal → neutral}/check.js +1 -1
  105. package/dist/default/icons/dist/html/{minimal → neutral}/chevron.js +1 -1
  106. package/dist/default/icons/dist/html/{minimal → neutral}/fullscreen-enter.js +1 -1
  107. package/dist/default/icons/dist/html/{minimal → neutral}/fullscreen-exit.js +1 -1
  108. package/dist/default/icons/dist/html/{minimal → neutral}/gear.js +1 -1
  109. package/dist/default/icons/dist/html/{minimal → neutral}/pause.js +1 -1
  110. package/dist/default/icons/dist/html/{minimal → neutral}/pip-enter.js +1 -1
  111. package/dist/default/icons/dist/html/{minimal → neutral}/pip-exit.js +1 -1
  112. package/dist/default/icons/dist/html/{minimal → neutral}/play.js +1 -1
  113. package/dist/default/icons/dist/html/{minimal → neutral}/quality.js +1 -1
  114. package/dist/default/icons/dist/html/{minimal → neutral}/restart.js +1 -1
  115. package/dist/default/icons/dist/html/{minimal → neutral}/seek.js +1 -1
  116. package/dist/default/icons/dist/html/{minimal → neutral}/speech.js +1 -1
  117. package/dist/default/icons/dist/html/{minimal → neutral}/speed.js +1 -1
  118. package/dist/default/icons/dist/html/neutral/spinner.js +4 -0
  119. package/dist/default/icons/dist/html/{minimal → neutral}/switches.js +1 -1
  120. package/dist/default/icons/dist/html/{minimal → neutral}/volume-high.js +1 -1
  121. package/dist/default/icons/dist/html/{minimal → neutral}/volume-low.js +1 -1
  122. package/dist/default/icons/dist/html/{minimal → neutral}/volume-off.js +1 -1
  123. package/dist/default/icons/element/compat/index.js +1 -0
  124. package/dist/default/icons/element/neutral/index.js +1 -0
  125. package/dist/default/icons/neutral/index.js +26 -0
  126. package/dist/default/index.js +4 -3
  127. package/dist/default/internal/skins/compat-audio/register.js +70 -0
  128. package/dist/default/internal/skins/compat-audio/skin.css +1891 -0
  129. package/dist/default/internal/skins/compat-audio/template.js +215 -0
  130. package/dist/default/internal/skins/compat-live-audio/register.js +50 -0
  131. package/dist/default/internal/skins/compat-live-audio/skin.css +1676 -0
  132. package/dist/default/internal/skins/compat-live-audio/template.js +112 -0
  133. package/dist/default/internal/skins/compat-live-video/register.js +86 -0
  134. package/dist/default/internal/skins/compat-live-video/skin.css +2219 -0
  135. package/dist/default/internal/skins/compat-live-video/template.js +237 -0
  136. package/dist/default/internal/skins/compat-video/register.js +115 -0
  137. package/dist/default/internal/skins/compat-video/skin.css +2497 -0
  138. package/dist/default/internal/skins/compat-video/template.js +457 -0
  139. package/dist/default/internal/skins/default-audio/register.js +8 -8
  140. package/dist/default/internal/skins/default-audio/skin.css +1213 -1365
  141. package/dist/default/internal/skins/default-live-audio/register.js +4 -4
  142. package/dist/default/internal/skins/default-live-audio/skin.css +842 -913
  143. package/dist/default/internal/skins/default-live-video/register.js +8 -8
  144. package/dist/default/internal/skins/default-live-video/skin.css +1548 -1728
  145. package/dist/default/internal/skins/default-video/register.js +13 -13
  146. package/dist/default/internal/skins/default-video/skin.css +2034 -2403
  147. package/dist/default/internal/skins/{minimal-audio → neutral-audio}/register.js +20 -20
  148. package/dist/default/internal/skins/neutral-audio/skin.css +1823 -0
  149. package/dist/default/internal/skins/{minimal-audio → neutral-audio}/template.js +24 -24
  150. package/dist/default/internal/skins/{minimal-live-audio → neutral-live-audio}/register.js +13 -13
  151. package/dist/default/internal/skins/neutral-live-audio/skin.css +1238 -0
  152. package/dist/default/internal/skins/{minimal-live-audio → neutral-live-audio}/template.js +14 -14
  153. package/dist/default/internal/skins/{minimal-live-video → neutral-live-video}/register.js +28 -28
  154. package/dist/default/internal/skins/neutral-live-video/skin.css +2069 -0
  155. package/dist/default/internal/skins/{minimal-live-video → neutral-live-video}/template.js +47 -47
  156. package/dist/default/internal/skins/{minimal-video → neutral-video}/register.js +40 -40
  157. package/dist/default/internal/skins/neutral-video/skin.css +2817 -0
  158. package/dist/default/internal/skins/{minimal-video → neutral-video}/template.js +75 -75
  159. package/dist/default/player/context.js +9 -1
  160. package/dist/default/player/create-player.js +2 -1
  161. package/dist/default/player/element.js +47 -10
  162. package/dist/default/presets/audio/compat-skin.js +19 -0
  163. package/dist/default/presets/audio/index.js +3 -2
  164. package/dist/default/presets/audio/neutral-skin.js +19 -0
  165. package/dist/default/presets/live-audio/compat-skin.js +19 -0
  166. package/dist/default/presets/live-audio/index.js +3 -2
  167. package/dist/default/presets/live-audio/neutral-skin.js +19 -0
  168. package/dist/default/presets/live-video/compat-skin.js +19 -0
  169. package/dist/default/presets/live-video/index.js +3 -2
  170. package/dist/default/presets/live-video/neutral-skin.js +19 -0
  171. package/dist/default/presets/video/compat-skin.js +19 -0
  172. package/dist/default/presets/video/index.js +3 -2
  173. package/dist/default/presets/video/neutral-skin.js +19 -0
  174. package/dist/default/store/media-attach-mixin.js +2 -0
  175. package/dist/default/ui/airplay-button/element.js +1 -1
  176. package/dist/default/ui/buffering-indicator/element.js +4 -0
  177. package/dist/default/ui/dialog/context.js +1 -0
  178. package/dist/default/ui/dialog/element.js +4 -2
  179. package/dist/default/ui/media-button-element.js +7 -6
  180. package/dist/default/ui/media-ui-element.js +6 -1
  181. package/dist/default/ui/menu/context.js +2 -0
  182. package/dist/default/ui/play-button/element.js +1 -1
  183. package/dist/default/ui/playback-rate-button/element.js +4 -2
  184. package/dist/default/ui/popover/element.js +4 -2
  185. package/dist/default/ui/radio-group/context.js +1 -0
  186. package/dist/default/ui/seek-indicator/element.js +7 -1
  187. package/dist/default/ui/slider/context.js +1 -0
  188. package/dist/default/ui/status-indicator/element.js +14 -1
  189. package/dist/default/ui/text/element.js +1 -0
  190. package/dist/default/ui/thumbnail/element.js +3 -2
  191. package/dist/default/ui/tooltip/context.js +1 -0
  192. package/dist/default/ui/tooltip/element.js +4 -2
  193. package/dist/default/ui/volume-popover/element.js +1 -1
  194. package/dist/default/ui/volume-slider/element.js +1 -1
  195. package/dist/default/version.js +27 -0
  196. package/dist/dev/define/audio/compat-skin.css +1923 -0
  197. package/dist/dev/define/audio/compat-skin.d.ts +1 -0
  198. package/dist/dev/define/audio/compat-skin.js +8 -0
  199. package/dist/dev/define/audio/compat-skin.js.map +1 -0
  200. package/dist/dev/define/audio/compat-skin2.js +6 -0
  201. package/dist/dev/define/audio/compat-skin2.js.map +1 -0
  202. package/dist/dev/define/audio/neutral-skin.css +1855 -0
  203. package/dist/dev/define/audio/neutral-skin.d.ts +1 -0
  204. package/dist/dev/define/audio/neutral-skin.js +8 -0
  205. package/dist/dev/define/audio/neutral-skin.js.map +1 -0
  206. package/dist/dev/define/audio/neutral-skin2.js +6 -0
  207. package/dist/dev/define/audio/neutral-skin2.js.map +1 -0
  208. package/dist/dev/define/audio/{minimal-ui.js → neutral-ui.js} +2 -2
  209. package/dist/dev/define/audio/{minimal-ui.js.map → neutral-ui.js.map} +1 -1
  210. package/dist/dev/define/audio/skin.css +1220 -1411
  211. package/dist/dev/define/audio/skin2.js +1 -1
  212. package/dist/dev/define/audio/skin2.js.map +1 -1
  213. package/dist/dev/define/background/skin.css +8 -19
  214. package/dist/dev/define/global.css +5 -21
  215. package/dist/dev/define/live-audio/compat-skin.css +1708 -0
  216. package/dist/dev/define/live-audio/compat-skin.d.ts +1 -0
  217. package/dist/dev/define/live-audio/compat-skin.js +8 -0
  218. package/dist/dev/define/live-audio/compat-skin.js.map +1 -0
  219. package/dist/dev/define/live-audio/compat-skin2.js +6 -0
  220. package/dist/dev/define/live-audio/compat-skin2.js.map +1 -0
  221. package/dist/dev/define/live-audio/neutral-skin.css +1270 -0
  222. package/dist/dev/define/live-audio/neutral-skin.d.ts +1 -0
  223. package/dist/dev/define/live-audio/neutral-skin.js +8 -0
  224. package/dist/dev/define/live-audio/neutral-skin.js.map +1 -0
  225. package/dist/dev/define/live-audio/neutral-skin2.js +6 -0
  226. package/dist/dev/define/live-audio/neutral-skin2.js.map +1 -0
  227. package/dist/dev/define/live-audio/{minimal-ui.js → neutral-ui.js} +2 -2
  228. package/dist/dev/define/live-audio/{minimal-ui.js.map → neutral-ui.js.map} +1 -1
  229. package/dist/dev/define/live-audio/skin.css +849 -959
  230. package/dist/dev/define/live-audio/skin2.js +1 -1
  231. package/dist/dev/define/live-audio/skin2.js.map +1 -1
  232. package/dist/dev/define/live-video/compat-skin.css +2251 -0
  233. package/dist/dev/define/live-video/compat-skin.d.ts +1 -0
  234. package/dist/dev/define/live-video/compat-skin.js +8 -0
  235. package/dist/dev/define/live-video/compat-skin.js.map +1 -0
  236. package/dist/dev/define/live-video/compat-skin2.js +6 -0
  237. package/dist/dev/define/live-video/compat-skin2.js.map +1 -0
  238. package/dist/dev/define/live-video/neutral-skin.css +2101 -0
  239. package/dist/dev/define/live-video/neutral-skin.d.ts +1 -0
  240. package/dist/dev/define/live-video/neutral-skin.js +8 -0
  241. package/dist/dev/define/live-video/neutral-skin.js.map +1 -0
  242. package/dist/dev/define/live-video/neutral-skin2.js +6 -0
  243. package/dist/dev/define/live-video/neutral-skin2.js.map +1 -0
  244. package/dist/dev/define/live-video/{minimal-ui.js → neutral-ui.js} +2 -2
  245. package/dist/dev/define/live-video/{minimal-ui.js.map → neutral-ui.js.map} +1 -1
  246. package/dist/dev/define/live-video/skin.css +1565 -1784
  247. package/dist/dev/define/live-video/skin2.js +1 -1
  248. package/dist/dev/define/live-video/skin2.js.map +1 -1
  249. package/dist/dev/define/media/background-video.d.ts +1 -2
  250. package/dist/dev/define/media/cloudflare-video.d.ts +3 -2
  251. package/dist/dev/define/media/cloudflare-video.js.map +1 -1
  252. package/dist/dev/define/media/dash-video.d.ts +8 -3
  253. package/dist/dev/define/media/dash-video.js +5 -1
  254. package/dist/dev/define/media/dash-video.js.map +1 -1
  255. package/dist/dev/define/media/hls-audio.d.ts +1 -2
  256. package/dist/dev/define/media/hls-background-video.d.ts +1 -2
  257. package/dist/dev/define/media/hls-video.d.ts +1 -2
  258. package/dist/dev/define/media/hlsjs-video.d.ts +3 -2
  259. package/dist/dev/define/media/hlsjs-video.js.map +1 -1
  260. package/dist/dev/define/media/mux-audio/hls-js.d.ts +3 -2
  261. package/dist/dev/define/media/mux-audio/hls-js.js.map +1 -1
  262. package/dist/dev/define/media/mux-audio/index.d.ts +2 -2
  263. package/dist/dev/define/media/mux-audio/spf.d.ts +3 -2
  264. package/dist/dev/define/media/mux-audio/spf.js.map +1 -1
  265. package/dist/dev/define/media/mux-background-video.d.ts +1 -2
  266. package/dist/dev/define/media/mux-video/hls-js.d.ts +3 -2
  267. package/dist/dev/define/media/mux-video/hls-js.js.map +1 -1
  268. package/dist/dev/define/media/mux-video/index.d.ts +2 -2
  269. package/dist/dev/define/media/mux-video/spf.d.ts +3 -2
  270. package/dist/dev/define/media/mux-video/spf.js.map +1 -1
  271. package/dist/dev/define/media/native-hls-video.d.ts +3 -2
  272. package/dist/dev/define/media/native-hls-video.js.map +1 -1
  273. package/dist/dev/define/media/shaka-video.d.ts +4 -2
  274. package/dist/dev/define/media/shaka-video.js +1 -0
  275. package/dist/dev/define/media/shaka-video.js.map +1 -1
  276. package/dist/dev/define/media/spotify-audio.d.ts +3 -2
  277. package/dist/dev/define/media/spotify-audio.js.map +1 -1
  278. package/dist/dev/define/media/tiktok-video.d.ts +3 -2
  279. package/dist/dev/define/media/tiktok-video.js.map +1 -1
  280. package/dist/dev/define/media/twitch-video.d.ts +3 -2
  281. package/dist/dev/define/media/twitch-video.js.map +1 -1
  282. package/dist/dev/define/media/vimeo-video.d.ts +3 -2
  283. package/dist/dev/define/media/vimeo-video.js.map +1 -1
  284. package/dist/dev/define/media/wistia-video.d.ts +3 -2
  285. package/dist/dev/define/media/wistia-video.js.map +1 -1
  286. package/dist/dev/define/media/youtube-video.d.ts +3 -2
  287. package/dist/dev/define/media/youtube-video.js.map +1 -1
  288. package/dist/dev/define/shadow.css +2 -12
  289. package/dist/dev/define/ui/menu-radio-group.d.ts +1 -0
  290. package/dist/dev/define/ui/menu.d.ts +1 -0
  291. package/dist/dev/define/ui/popover.d.ts +1 -0
  292. package/dist/dev/define/video/compat-skin.css +2529 -0
  293. package/dist/dev/define/video/compat-skin.d.ts +1 -0
  294. package/dist/dev/define/video/compat-skin.js +8 -0
  295. package/dist/dev/define/video/compat-skin.js.map +1 -0
  296. package/dist/dev/define/video/compat-skin2.js +6 -0
  297. package/dist/dev/define/video/compat-skin2.js.map +1 -0
  298. package/dist/dev/define/video/neutral-skin.css +2849 -0
  299. package/dist/dev/define/video/neutral-skin.d.ts +1 -0
  300. package/dist/dev/define/video/neutral-skin.js +8 -0
  301. package/dist/dev/define/video/neutral-skin.js.map +1 -0
  302. package/dist/dev/define/video/neutral-skin2.js +6 -0
  303. package/dist/dev/define/video/neutral-skin2.js.map +1 -0
  304. package/dist/dev/define/video/{minimal-ui.js → neutral-ui.js} +2 -2
  305. package/dist/dev/define/video/{minimal-ui.js.map → neutral-ui.js.map} +1 -1
  306. package/dist/dev/define/video/skin.css +2046 -2454
  307. package/dist/dev/define/video/skin2.js +1 -1
  308. package/dist/dev/define/video/skin2.js.map +1 -1
  309. package/dist/dev/extensions/google-cast/extension.d.ts +8 -7
  310. package/dist/dev/extensions/google-cast/extension.js +18 -17
  311. package/dist/dev/extensions/google-cast/extension.js.map +1 -1
  312. package/dist/dev/extensions/mux-data/extension.d.ts +6 -6
  313. package/dist/dev/extensions/mux-data/extension.js +24 -24
  314. package/dist/dev/extensions/mux-data/extension.js.map +1 -1
  315. package/dist/dev/extensions/player-extension-element.d.ts +30 -0
  316. package/dist/dev/extensions/player-extension-element.js +51 -0
  317. package/dist/dev/extensions/player-extension-element.js.map +1 -0
  318. package/dist/dev/i18n/context.d.ts +4 -5
  319. package/dist/dev/i18n/controller.d.ts +3 -4
  320. package/dist/dev/i18n/controller.js.map +1 -1
  321. package/dist/dev/i18n/create-i18n.d.ts +3 -4
  322. package/dist/dev/i18n/index.d.ts +2 -2
  323. package/dist/dev/i18n/index.js +2 -2
  324. package/dist/dev/i18n/locale.d.ts +12 -5
  325. package/dist/dev/i18n/locale.js +10 -2
  326. package/dist/dev/i18n/locale.js.map +1 -1
  327. package/dist/dev/i18n/provider-element.d.ts +4 -3
  328. package/dist/dev/i18n/provider-element.js +1 -0
  329. package/dist/dev/i18n/provider-element.js.map +1 -1
  330. package/dist/dev/i18n/provider-mixin.d.ts +1 -2
  331. package/dist/dev/i18n/provider-mixin.js +11 -9
  332. package/dist/dev/i18n/provider-mixin.js.map +1 -1
  333. package/dist/dev/i18n/render-text.d.ts +6 -3
  334. package/dist/dev/i18n/render-text.js +5 -1
  335. package/dist/dev/i18n/render-text.js.map +1 -1
  336. package/dist/dev/i18n/text/airplay.d.ts +1 -0
  337. package/dist/dev/i18n/text/airplay.js +1 -0
  338. package/dist/dev/i18n/text/buttons.d.ts +1 -0
  339. package/dist/dev/i18n/text/buttons.js +1 -0
  340. package/dist/dev/i18n/text/captions.d.ts +1 -0
  341. package/dist/dev/i18n/text/captions.js +1 -0
  342. package/dist/dev/i18n/text/cast.d.ts +1 -0
  343. package/dist/dev/i18n/text/cast.js +1 -0
  344. package/dist/dev/i18n/text/common.d.ts +1 -0
  345. package/dist/dev/i18n/text/common.js +1 -0
  346. package/dist/dev/i18n/text/container.d.ts +1 -0
  347. package/dist/dev/i18n/text/container.js +1 -0
  348. package/dist/dev/i18n/text/errors.d.ts +1 -0
  349. package/dist/dev/i18n/text/errors.js +1 -0
  350. package/dist/dev/i18n/text/fullscreen.d.ts +1 -0
  351. package/dist/dev/i18n/text/fullscreen.js +1 -0
  352. package/dist/dev/i18n/text/live.d.ts +1 -0
  353. package/dist/dev/i18n/text/live.js +1 -0
  354. package/dist/dev/i18n/text/menu.d.ts +1 -0
  355. package/dist/dev/i18n/text/menu.js +1 -0
  356. package/dist/dev/i18n/text/pip.d.ts +1 -0
  357. package/dist/dev/i18n/text/pip.js +1 -0
  358. package/dist/dev/i18n/text/playback.d.ts +1 -0
  359. package/dist/dev/i18n/text/playback.js +1 -0
  360. package/dist/dev/i18n/text/seek.d.ts +1 -0
  361. package/dist/dev/i18n/text/seek.js +1 -0
  362. package/dist/dev/i18n/text/slider.d.ts +1 -0
  363. package/dist/dev/i18n/text/slider.js +1 -0
  364. package/dist/dev/i18n/text/status.d.ts +1 -0
  365. package/dist/dev/i18n/text/status.js +1 -0
  366. package/dist/dev/i18n/text/time.d.ts +1 -0
  367. package/dist/dev/i18n/text/time.js +1 -0
  368. package/dist/dev/i18n/text/volume.d.ts +1 -0
  369. package/dist/dev/i18n/text/volume.js +1 -0
  370. package/dist/dev/i18n/text-mixin.d.ts +1 -2
  371. package/dist/dev/i18n/text-mixin.js.map +1 -1
  372. package/dist/dev/i18n/types.d.ts +2 -3
  373. package/dist/dev/icons/{minimal → compat}/index.d.ts +1 -1
  374. package/dist/dev/icons/compat/index.js +26 -0
  375. package/dist/dev/icons/dist/element/base.d.ts +1 -2
  376. package/dist/dev/icons/dist/element/base.js.map +1 -1
  377. package/dist/dev/icons/dist/element/compat/icons.js +32 -0
  378. package/dist/dev/icons/dist/element/compat/icons.js.map +1 -0
  379. package/dist/dev/icons/dist/element/{minimal → compat}/index.js +2 -2
  380. package/dist/dev/icons/dist/element/compat/index.js.map +1 -0
  381. package/dist/dev/icons/dist/element/index.js +2 -1
  382. package/dist/dev/icons/dist/element/index.js.map +1 -1
  383. package/dist/dev/icons/dist/element/{minimal → neutral}/icons.js +1 -1
  384. package/dist/dev/icons/dist/element/{minimal → neutral}/icons.js.map +1 -1
  385. package/dist/dev/icons/dist/element/neutral/index.d.ts +1 -0
  386. package/dist/dev/icons/dist/element/neutral/index.js +10 -0
  387. package/dist/dev/icons/dist/element/{minimal → neutral}/index.js.map +1 -1
  388. package/dist/dev/icons/dist/html/compat/airplay-enter.js +6 -0
  389. package/dist/dev/icons/dist/html/compat/airplay-enter.js.map +1 -0
  390. package/dist/dev/icons/dist/html/compat/airplay-exit.js +6 -0
  391. package/dist/dev/icons/dist/html/compat/airplay-exit.js.map +1 -0
  392. package/dist/dev/icons/dist/html/compat/captions-off.js +6 -0
  393. package/dist/dev/icons/dist/html/compat/captions-off.js.map +1 -0
  394. package/dist/dev/icons/dist/html/compat/captions-on.js +6 -0
  395. package/dist/dev/icons/dist/html/compat/captions-on.js.map +1 -0
  396. package/dist/dev/icons/dist/html/compat/cast-enter.js +6 -0
  397. package/dist/dev/icons/dist/html/compat/cast-enter.js.map +1 -0
  398. package/dist/dev/icons/dist/html/compat/cast-exit.js +6 -0
  399. package/dist/dev/icons/dist/html/compat/cast-exit.js.map +1 -0
  400. package/dist/dev/icons/dist/html/compat/check.js +6 -0
  401. package/dist/dev/icons/dist/html/compat/check.js.map +1 -0
  402. package/dist/dev/icons/dist/html/compat/chevron.js +6 -0
  403. package/dist/dev/icons/dist/html/compat/chevron.js.map +1 -0
  404. package/dist/dev/icons/dist/html/compat/fullscreen-enter.js +6 -0
  405. package/dist/dev/icons/dist/html/compat/fullscreen-enter.js.map +1 -0
  406. package/dist/dev/icons/dist/html/compat/fullscreen-exit.js +6 -0
  407. package/dist/dev/icons/dist/html/compat/fullscreen-exit.js.map +1 -0
  408. package/dist/dev/icons/dist/html/compat/gear.js +6 -0
  409. package/dist/dev/icons/dist/html/compat/gear.js.map +1 -0
  410. package/dist/dev/icons/dist/html/compat/index.d.ts +28 -0
  411. package/dist/dev/icons/dist/html/compat/pause.js +6 -0
  412. package/dist/dev/icons/dist/html/compat/pause.js.map +1 -0
  413. package/dist/dev/icons/dist/html/compat/pip-enter.js +6 -0
  414. package/dist/dev/icons/dist/html/compat/pip-enter.js.map +1 -0
  415. package/dist/dev/icons/dist/html/compat/pip-exit.js +6 -0
  416. package/dist/dev/icons/dist/html/compat/pip-exit.js.map +1 -0
  417. package/dist/dev/icons/dist/html/compat/play.js +6 -0
  418. package/dist/dev/icons/dist/html/compat/play.js.map +1 -0
  419. package/dist/dev/icons/dist/html/compat/quality.js +6 -0
  420. package/dist/dev/icons/dist/html/compat/quality.js.map +1 -0
  421. package/dist/dev/icons/dist/html/compat/restart.js +6 -0
  422. package/dist/dev/icons/dist/html/compat/restart.js.map +1 -0
  423. package/dist/dev/icons/dist/html/compat/seek.js +6 -0
  424. package/dist/dev/icons/dist/html/compat/seek.js.map +1 -0
  425. package/dist/dev/icons/dist/html/compat/speech.js +6 -0
  426. package/dist/dev/icons/dist/html/compat/speech.js.map +1 -0
  427. package/dist/dev/icons/dist/html/compat/speed.js +6 -0
  428. package/dist/dev/icons/dist/html/compat/speed.js.map +1 -0
  429. package/dist/dev/icons/dist/html/{minimal → compat}/spinner.js +1 -1
  430. package/dist/dev/icons/dist/html/compat/spinner.js.map +1 -0
  431. package/dist/dev/icons/dist/html/compat/switches.js +6 -0
  432. package/dist/dev/icons/dist/html/compat/switches.js.map +1 -0
  433. package/dist/dev/icons/dist/html/compat/volume-high.js +6 -0
  434. package/dist/dev/icons/dist/html/compat/volume-high.js.map +1 -0
  435. package/dist/dev/icons/dist/html/compat/volume-low.js +6 -0
  436. package/dist/dev/icons/dist/html/compat/volume-low.js.map +1 -0
  437. package/dist/dev/icons/dist/html/compat/volume-off.js +6 -0
  438. package/dist/dev/icons/dist/html/compat/volume-off.js.map +1 -0
  439. package/dist/dev/icons/dist/html/default/index.d.ts +25 -26
  440. package/dist/dev/icons/dist/html/{minimal → neutral}/airplay-enter.js +1 -1
  441. package/dist/dev/icons/dist/html/{minimal → neutral}/airplay-enter.js.map +1 -1
  442. package/dist/dev/icons/dist/html/{minimal → neutral}/airplay-exit.js +1 -1
  443. package/dist/dev/icons/dist/html/{minimal → neutral}/airplay-exit.js.map +1 -1
  444. package/dist/dev/icons/dist/html/{minimal → neutral}/captions-off.js +1 -1
  445. package/dist/dev/icons/dist/html/{minimal → neutral}/captions-off.js.map +1 -1
  446. package/dist/dev/icons/dist/html/{minimal → neutral}/captions-on.js +1 -1
  447. package/dist/dev/icons/dist/html/{minimal → neutral}/captions-on.js.map +1 -1
  448. package/dist/dev/icons/dist/html/{minimal → neutral}/cast-enter.js +1 -1
  449. package/dist/dev/icons/dist/html/{minimal → neutral}/cast-enter.js.map +1 -1
  450. package/dist/dev/icons/dist/html/{minimal → neutral}/cast-exit.js +1 -1
  451. package/dist/dev/icons/dist/html/{minimal → neutral}/cast-exit.js.map +1 -1
  452. package/dist/dev/icons/dist/html/{minimal → neutral}/check.js +1 -1
  453. package/dist/dev/icons/dist/html/{minimal → neutral}/check.js.map +1 -1
  454. package/dist/dev/icons/dist/html/{minimal → neutral}/chevron.js +1 -1
  455. package/dist/dev/icons/dist/html/{minimal → neutral}/chevron.js.map +1 -1
  456. package/dist/dev/icons/dist/html/{minimal → neutral}/fullscreen-enter.js +1 -1
  457. package/dist/dev/icons/dist/html/{minimal → neutral}/fullscreen-enter.js.map +1 -1
  458. package/dist/dev/icons/dist/html/{minimal → neutral}/fullscreen-exit.js +1 -1
  459. package/dist/dev/icons/dist/html/{minimal → neutral}/fullscreen-exit.js.map +1 -1
  460. package/dist/dev/icons/dist/html/{minimal → neutral}/gear.js +1 -1
  461. package/dist/dev/icons/dist/html/{minimal → neutral}/gear.js.map +1 -1
  462. package/dist/dev/icons/dist/html/neutral/index.d.ts +28 -0
  463. package/dist/dev/icons/dist/html/{minimal → neutral}/pause.js +1 -1
  464. package/dist/dev/icons/dist/html/{minimal → neutral}/pause.js.map +1 -1
  465. package/dist/dev/icons/dist/html/{minimal → neutral}/pip-enter.js +1 -1
  466. package/dist/dev/icons/dist/html/{minimal → neutral}/pip-enter.js.map +1 -1
  467. package/dist/dev/icons/dist/html/{minimal → neutral}/pip-exit.js +1 -1
  468. package/dist/dev/icons/dist/html/{minimal → neutral}/pip-exit.js.map +1 -1
  469. package/dist/dev/icons/dist/html/{minimal → neutral}/play.js +1 -1
  470. package/dist/dev/icons/dist/html/{minimal → neutral}/play.js.map +1 -1
  471. package/dist/dev/icons/dist/html/{minimal → neutral}/quality.js +1 -1
  472. package/dist/dev/icons/dist/html/{minimal → neutral}/quality.js.map +1 -1
  473. package/dist/dev/icons/dist/html/{minimal → neutral}/restart.js +1 -1
  474. package/dist/dev/icons/dist/html/{minimal → neutral}/restart.js.map +1 -1
  475. package/dist/dev/icons/dist/html/{minimal → neutral}/seek.js +1 -1
  476. package/dist/dev/icons/dist/html/{minimal → neutral}/seek.js.map +1 -1
  477. package/dist/dev/icons/dist/html/{minimal → neutral}/speech.js +1 -1
  478. package/dist/dev/icons/dist/html/{minimal → neutral}/speech.js.map +1 -1
  479. package/dist/dev/icons/dist/html/{minimal → neutral}/speed.js +1 -1
  480. package/dist/dev/icons/dist/html/{minimal → neutral}/speed.js.map +1 -1
  481. package/dist/dev/icons/dist/html/neutral/spinner.js +6 -0
  482. package/dist/dev/icons/dist/html/{minimal → neutral}/spinner.js.map +1 -1
  483. package/dist/dev/icons/dist/html/{minimal → neutral}/switches.js +1 -1
  484. package/dist/dev/icons/dist/html/{minimal → neutral}/switches.js.map +1 -1
  485. package/dist/dev/icons/dist/html/{minimal → neutral}/volume-high.js +1 -1
  486. package/dist/dev/icons/dist/html/{minimal → neutral}/volume-high.js.map +1 -1
  487. package/dist/dev/icons/dist/html/{minimal → neutral}/volume-low.js +1 -1
  488. package/dist/dev/icons/dist/html/{minimal → neutral}/volume-low.js.map +1 -1
  489. package/dist/dev/icons/dist/html/{minimal → neutral}/volume-off.js +1 -1
  490. package/dist/dev/icons/dist/html/{minimal → neutral}/volume-off.js.map +1 -1
  491. package/dist/dev/icons/element/compat/index.d.ts +1 -0
  492. package/dist/dev/icons/element/compat/index.js +1 -0
  493. package/dist/dev/icons/element/neutral/index.d.ts +1 -0
  494. package/dist/dev/icons/element/neutral/index.js +1 -0
  495. package/dist/dev/icons/element/register/index.d.ts +1 -2
  496. package/dist/dev/icons/neutral/index.d.ts +2 -0
  497. package/dist/dev/icons/neutral/index.js +26 -0
  498. package/dist/dev/index.d.ts +12 -7
  499. package/dist/dev/index.js +4 -3
  500. package/dist/dev/internal/skins/compat-audio/register.d.ts +43 -0
  501. package/dist/dev/internal/skins/compat-audio/register.js +72 -0
  502. package/dist/dev/internal/skins/compat-audio/register.js.map +1 -0
  503. package/dist/dev/internal/skins/compat-audio/skin.css +1891 -0
  504. package/dist/dev/internal/skins/compat-audio/template.js +217 -0
  505. package/dist/dev/internal/skins/compat-audio/template.js.map +1 -0
  506. package/dist/dev/internal/skins/compat-live-audio/register.d.ts +27 -0
  507. package/dist/dev/internal/skins/compat-live-audio/register.js +52 -0
  508. package/dist/dev/internal/skins/compat-live-audio/register.js.map +1 -0
  509. package/dist/dev/internal/skins/compat-live-audio/skin.css +1676 -0
  510. package/dist/dev/internal/skins/compat-live-audio/template.js +114 -0
  511. package/dist/dev/internal/skins/compat-live-audio/template.js.map +1 -0
  512. package/dist/dev/internal/skins/compat-live-video/register.d.ts +45 -0
  513. package/dist/dev/internal/skins/compat-live-video/register.js +88 -0
  514. package/dist/dev/internal/skins/compat-live-video/register.js.map +1 -0
  515. package/dist/dev/internal/skins/compat-live-video/skin.css +2219 -0
  516. package/dist/dev/internal/skins/compat-live-video/template.js +239 -0
  517. package/dist/dev/internal/skins/compat-live-video/template.js.map +1 -0
  518. package/dist/dev/internal/skins/compat-video/register.d.ts +62 -0
  519. package/dist/dev/internal/skins/compat-video/register.js +117 -0
  520. package/dist/dev/internal/skins/compat-video/register.js.map +1 -0
  521. package/dist/dev/internal/skins/compat-video/skin.css +2497 -0
  522. package/dist/dev/internal/skins/compat-video/template.js +459 -0
  523. package/dist/dev/internal/skins/compat-video/template.js.map +1 -0
  524. package/dist/dev/internal/skins/default-audio/register.d.ts +12 -12
  525. package/dist/dev/internal/skins/default-audio/register.js +8 -8
  526. package/dist/dev/internal/skins/default-audio/skin.css +1213 -1365
  527. package/dist/dev/internal/skins/default-live-audio/register.d.ts +4 -4
  528. package/dist/dev/internal/skins/default-live-audio/register.js +4 -4
  529. package/dist/dev/internal/skins/default-live-audio/skin.css +842 -913
  530. package/dist/dev/internal/skins/default-live-video/register.d.ts +10 -10
  531. package/dist/dev/internal/skins/default-live-video/register.js +8 -8
  532. package/dist/dev/internal/skins/default-live-video/skin.css +1548 -1728
  533. package/dist/dev/internal/skins/default-video/register.d.ts +18 -18
  534. package/dist/dev/internal/skins/default-video/register.js +13 -13
  535. package/dist/dev/internal/skins/default-video/skin.css +2034 -2403
  536. package/dist/dev/internal/skins/{minimal-audio → neutral-audio}/register.d.ts +14 -14
  537. package/dist/dev/internal/skins/{minimal-audio → neutral-audio}/register.js +20 -20
  538. package/dist/dev/internal/skins/{minimal-audio → neutral-audio}/register.js.map +1 -1
  539. package/dist/dev/internal/skins/neutral-audio/skin.css +1823 -0
  540. package/dist/dev/internal/skins/{minimal-audio → neutral-audio}/template.js +24 -24
  541. package/dist/dev/internal/skins/{minimal-audio → neutral-audio}/template.js.map +1 -1
  542. package/dist/dev/internal/skins/{minimal-live-audio → neutral-live-audio}/register.d.ts +4 -4
  543. package/dist/dev/internal/skins/{minimal-live-audio → neutral-live-audio}/register.js +13 -13
  544. package/dist/dev/internal/skins/{minimal-live-audio → neutral-live-audio}/register.js.map +1 -1
  545. package/dist/dev/internal/skins/neutral-live-audio/skin.css +1238 -0
  546. package/dist/dev/internal/skins/{minimal-live-audio → neutral-live-audio}/template.js +14 -14
  547. package/dist/dev/internal/skins/{minimal-live-audio → neutral-live-audio}/template.js.map +1 -1
  548. package/dist/dev/internal/skins/{minimal-live-video → neutral-live-video}/register.d.ts +10 -10
  549. package/dist/dev/internal/skins/{minimal-live-video → neutral-live-video}/register.js +28 -28
  550. package/dist/dev/internal/skins/{minimal-live-video → neutral-live-video}/register.js.map +1 -1
  551. package/dist/dev/internal/skins/neutral-live-video/skin.css +2069 -0
  552. package/dist/dev/internal/skins/{minimal-live-video → neutral-live-video}/template.js +47 -47
  553. package/dist/dev/internal/skins/{minimal-live-video → neutral-live-video}/template.js.map +1 -1
  554. package/dist/dev/internal/skins/{minimal-video → neutral-video}/register.d.ts +20 -20
  555. package/dist/dev/internal/skins/{minimal-video → neutral-video}/register.js +40 -40
  556. package/dist/dev/internal/skins/{minimal-video → neutral-video}/register.js.map +1 -1
  557. package/dist/dev/internal/skins/neutral-video/skin.css +2817 -0
  558. package/dist/dev/internal/skins/{minimal-video → neutral-video}/template.js +75 -75
  559. package/dist/dev/internal/skins/{minimal-video → neutral-video}/template.js.map +1 -1
  560. package/dist/dev/media/background-video/adapter.d.ts +1 -2
  561. package/dist/dev/media/background-video/template.d.ts +1 -2
  562. package/dist/dev/media/cloudflare-video/adapter.d.ts +3 -15
  563. package/dist/dev/media/dash-video/adapter.d.ts +3 -15
  564. package/dist/dev/media/hls-audio/adapter.d.ts +3 -15
  565. package/dist/dev/media/hls-background-video/adapter.d.ts +8 -5
  566. package/dist/dev/media/hls-background-video/adapter.js.map +1 -1
  567. package/dist/dev/media/hls-video/adapter.d.ts +3 -15
  568. package/dist/dev/media/hlsjs-video/adapter.d.ts +3 -15
  569. package/dist/dev/media/mux-audio/hls-js.d.ts +3 -15
  570. package/dist/dev/media/mux-audio/mixin.js.map +1 -1
  571. package/dist/dev/media/mux-audio/spf.d.ts +3 -15
  572. package/dist/dev/media/mux-video/hls-js.d.ts +3 -15
  573. package/dist/dev/media/mux-video/mixin.js.map +1 -1
  574. package/dist/dev/media/mux-video/spf.d.ts +3 -15
  575. package/dist/dev/media/native-hls-video/adapter.d.ts +3 -15
  576. package/dist/dev/media/shaka-video/adapter.d.ts +3 -15
  577. package/dist/dev/media/spotify-audio/adapter.d.ts +3 -15
  578. package/dist/dev/media/tiktok-video/adapter.d.ts +3 -15
  579. package/dist/dev/media/twitch-video/adapter.d.ts +3 -15
  580. package/dist/dev/media/vimeo-video/adapter.d.ts +3 -15
  581. package/dist/dev/media/wistia-video/adapter.d.ts +1 -2
  582. package/dist/dev/media/youtube-video/adapter.d.ts +3 -15
  583. package/dist/dev/player/context.d.ts +34 -15
  584. package/dist/dev/player/context.js +9 -1
  585. package/dist/dev/player/context.js.map +1 -1
  586. package/dist/dev/player/controller.d.ts +3 -4
  587. package/dist/dev/player/controller.js.map +1 -1
  588. package/dist/dev/player/create-player.d.ts +5 -6
  589. package/dist/dev/player/create-player.js +2 -1
  590. package/dist/dev/player/create-player.js.map +1 -1
  591. package/dist/dev/player/element.js +47 -10
  592. package/dist/dev/player/element.js.map +1 -1
  593. package/dist/dev/presets/audio/compat-skin.d.ts +15 -0
  594. package/dist/dev/presets/audio/compat-skin.js +21 -0
  595. package/dist/dev/presets/audio/compat-skin.js.map +1 -0
  596. package/dist/dev/presets/audio/index.d.ts +3 -2
  597. package/dist/dev/presets/audio/index.js +3 -2
  598. package/dist/dev/presets/audio/neutral-skin.d.ts +15 -0
  599. package/dist/dev/presets/audio/neutral-skin.js +21 -0
  600. package/dist/dev/presets/audio/neutral-skin.js.map +1 -0
  601. package/dist/dev/presets/audio/player.d.ts +2 -3
  602. package/dist/dev/presets/audio/skin.d.ts +2 -3
  603. package/dist/dev/presets/audio/skin.js.map +1 -1
  604. package/dist/dev/presets/background/player.d.ts +2 -3
  605. package/dist/dev/presets/background/skin.d.ts +1 -2
  606. package/dist/dev/presets/live-audio/compat-skin.d.ts +15 -0
  607. package/dist/dev/presets/live-audio/compat-skin.js +21 -0
  608. package/dist/dev/presets/live-audio/compat-skin.js.map +1 -0
  609. package/dist/dev/presets/live-audio/index.d.ts +3 -2
  610. package/dist/dev/presets/live-audio/index.js +3 -2
  611. package/dist/dev/presets/live-audio/neutral-skin.d.ts +15 -0
  612. package/dist/dev/presets/live-audio/neutral-skin.js +21 -0
  613. package/dist/dev/presets/live-audio/neutral-skin.js.map +1 -0
  614. package/dist/dev/presets/live-audio/player.d.ts +2 -3
  615. package/dist/dev/presets/live-audio/skin.d.ts +2 -3
  616. package/dist/dev/presets/live-audio/skin.js.map +1 -1
  617. package/dist/dev/presets/live-video/compat-skin.d.ts +15 -0
  618. package/dist/dev/presets/live-video/compat-skin.js +21 -0
  619. package/dist/dev/presets/live-video/compat-skin.js.map +1 -0
  620. package/dist/dev/presets/live-video/index.d.ts +3 -2
  621. package/dist/dev/presets/live-video/index.js +3 -2
  622. package/dist/dev/presets/live-video/neutral-skin.d.ts +15 -0
  623. package/dist/dev/presets/live-video/neutral-skin.js +21 -0
  624. package/dist/dev/presets/live-video/neutral-skin.js.map +1 -0
  625. package/dist/dev/presets/live-video/player.d.ts +2 -3
  626. package/dist/dev/presets/live-video/skin.d.ts +2 -3
  627. package/dist/dev/presets/live-video/skin.js.map +1 -1
  628. package/dist/dev/presets/skin.d.ts +1 -2
  629. package/dist/dev/presets/video/compat-skin.d.ts +15 -0
  630. package/dist/dev/presets/video/compat-skin.js +21 -0
  631. package/dist/dev/presets/video/compat-skin.js.map +1 -0
  632. package/dist/dev/presets/video/index.d.ts +3 -2
  633. package/dist/dev/presets/video/index.js +3 -2
  634. package/dist/dev/presets/video/neutral-skin.d.ts +15 -0
  635. package/dist/dev/presets/video/neutral-skin.js +21 -0
  636. package/dist/dev/presets/video/neutral-skin.js.map +1 -0
  637. package/dist/dev/presets/video/player.d.ts +2 -3
  638. package/dist/dev/presets/video/skin.d.ts +2 -3
  639. package/dist/dev/presets/video/skin.js.map +1 -1
  640. package/dist/dev/store/media-attach-mixin.d.ts +6 -4
  641. package/dist/dev/store/media-attach-mixin.js +2 -0
  642. package/dist/dev/store/media-attach-mixin.js.map +1 -1
  643. package/dist/dev/store/types.d.ts +2 -4
  644. package/dist/dev/ui/airplay-button/element.d.ts +4 -5
  645. package/dist/dev/ui/airplay-button/element.js +1 -1
  646. package/dist/dev/ui/airplay-button/element.js.map +1 -1
  647. package/dist/dev/ui/alert-dialog/element.d.ts +1 -2
  648. package/dist/dev/ui/audio-track-radio-group/element.d.ts +4 -5
  649. package/dist/dev/ui/audio-track-radio-group/element.js.map +1 -1
  650. package/dist/dev/ui/buffering-indicator/element.d.ts +2 -2
  651. package/dist/dev/ui/buffering-indicator/element.js +4 -0
  652. package/dist/dev/ui/buffering-indicator/element.js.map +1 -1
  653. package/dist/dev/ui/captions-button/element.d.ts +7 -10
  654. package/dist/dev/ui/captions-button/element.js.map +1 -1
  655. package/dist/dev/ui/captions-radio-group/element.d.ts +4 -5
  656. package/dist/dev/ui/captions-radio-group/element.js.map +1 -1
  657. package/dist/dev/ui/cast-button/element.d.ts +3 -4
  658. package/dist/dev/ui/cast-button/element.js.map +1 -1
  659. package/dist/dev/ui/container/element.d.ts +1 -2
  660. package/dist/dev/ui/container/element.js.map +1 -1
  661. package/dist/dev/ui/context-part-element.d.ts +2 -3
  662. package/dist/dev/ui/context-part-element.js.map +1 -1
  663. package/dist/dev/ui/controls/backdrop.d.ts +1 -2
  664. package/dist/dev/ui/controls/content.d.ts +1 -2
  665. package/dist/dev/ui/controls/context.d.ts +1 -2
  666. package/dist/dev/ui/controls/element.d.ts +1 -2
  667. package/dist/dev/ui/controls/element.js.map +1 -1
  668. package/dist/dev/ui/controls/group.d.ts +1 -2
  669. package/dist/dev/ui/dialog/backdrop.d.ts +1 -2
  670. package/dist/dev/ui/dialog/close.d.ts +1 -2
  671. package/dist/dev/ui/dialog/close.js.map +1 -1
  672. package/dist/dev/ui/dialog/context.d.ts +4 -3
  673. package/dist/dev/ui/dialog/context.js +1 -0
  674. package/dist/dev/ui/dialog/context.js.map +1 -1
  675. package/dist/dev/ui/dialog/description.d.ts +1 -2
  676. package/dist/dev/ui/dialog/element.d.ts +5 -4
  677. package/dist/dev/ui/dialog/element.js +4 -2
  678. package/dist/dev/ui/dialog/element.js.map +1 -1
  679. package/dist/dev/ui/dialog/popup.d.ts +1 -2
  680. package/dist/dev/ui/dialog/popup.js.map +1 -1
  681. package/dist/dev/ui/dialog/title.d.ts +1 -2
  682. package/dist/dev/ui/error-dialog/element.d.ts +1 -2
  683. package/dist/dev/ui/error-dialog/element.js.map +1 -1
  684. package/dist/dev/ui/fullscreen-button/element.d.ts +3 -5
  685. package/dist/dev/ui/fullscreen-button/element.js.map +1 -1
  686. package/dist/dev/ui/gesture/element.d.ts +1 -2
  687. package/dist/dev/ui/gesture/element.js.map +1 -1
  688. package/dist/dev/ui/hotkey/aria-key-shortcuts-controller.d.ts +2 -3
  689. package/dist/dev/ui/hotkey/aria-key-shortcuts-controller.js.map +1 -1
  690. package/dist/dev/ui/hotkey/element.d.ts +1 -2
  691. package/dist/dev/ui/hotkey/element.js.map +1 -1
  692. package/dist/dev/ui/input-indicator/element.d.ts +5 -4
  693. package/dist/dev/ui/input-indicator/element.js.map +1 -1
  694. package/dist/dev/ui/input-indicator/live-indicator.d.ts +2 -3
  695. package/dist/dev/ui/input-indicator/live-indicator.js.map +1 -1
  696. package/dist/dev/ui/live-button/element.d.ts +4 -4
  697. package/dist/dev/ui/live-button/element.js.map +1 -1
  698. package/dist/dev/ui/media-button-element.d.ts +17 -8
  699. package/dist/dev/ui/media-button-element.js +7 -6
  700. package/dist/dev/ui/media-button-element.js.map +1 -1
  701. package/dist/dev/ui/media-ui-element.d.ts +15 -7
  702. package/dist/dev/ui/media-ui-element.js +6 -1
  703. package/dist/dev/ui/media-ui-element.js.map +1 -1
  704. package/dist/dev/ui/menu/checkbox-item.d.ts +1 -2
  705. package/dist/dev/ui/menu/checkbox-item.js.map +1 -1
  706. package/dist/dev/ui/menu/content.d.ts +1 -2
  707. package/dist/dev/ui/menu/content.js.map +1 -1
  708. package/dist/dev/ui/menu/context.d.ts +9 -5
  709. package/dist/dev/ui/menu/context.js +2 -0
  710. package/dist/dev/ui/menu/context.js.map +1 -1
  711. package/dist/dev/ui/menu/element.d.ts +1 -2
  712. package/dist/dev/ui/menu/element.js.map +1 -1
  713. package/dist/dev/ui/menu/group-controller.js.map +1 -1
  714. package/dist/dev/ui/menu/group-label.d.ts +1 -2
  715. package/dist/dev/ui/menu/group-label.js.map +1 -1
  716. package/dist/dev/ui/menu/group.d.ts +1 -2
  717. package/dist/dev/ui/menu/group.js.map +1 -1
  718. package/dist/dev/ui/menu/item-indicator.d.ts +1 -2
  719. package/dist/dev/ui/menu/item.d.ts +1 -2
  720. package/dist/dev/ui/menu/item.js.map +1 -1
  721. package/dist/dev/ui/menu/radio-group.d.ts +1 -2
  722. package/dist/dev/ui/menu/radio-group.js.map +1 -1
  723. package/dist/dev/ui/menu/radio-item.d.ts +1 -2
  724. package/dist/dev/ui/menu/radio-item.js.map +1 -1
  725. package/dist/dev/ui/menu/separator.d.ts +1 -2
  726. package/dist/dev/ui/mute-button/element.d.ts +3 -4
  727. package/dist/dev/ui/mute-button/element.js.map +1 -1
  728. package/dist/dev/ui/pip-button/element.d.ts +4 -6
  729. package/dist/dev/ui/pip-button/element.js.map +1 -1
  730. package/dist/dev/ui/play-button/element.d.ts +3 -5
  731. package/dist/dev/ui/play-button/element.js +1 -1
  732. package/dist/dev/ui/play-button/element.js.map +1 -1
  733. package/dist/dev/ui/playback-rate-button/element.d.ts +4 -5
  734. package/dist/dev/ui/playback-rate-button/element.js +4 -2
  735. package/dist/dev/ui/playback-rate-button/element.js.map +1 -1
  736. package/dist/dev/ui/playback-rate-radio-group/element.d.ts +4 -5
  737. package/dist/dev/ui/playback-rate-radio-group/element.js.map +1 -1
  738. package/dist/dev/ui/popover/element.d.ts +1 -2
  739. package/dist/dev/ui/popover/element.js +4 -2
  740. package/dist/dev/ui/popover/element.js.map +1 -1
  741. package/dist/dev/ui/position-controller.js.map +1 -1
  742. package/dist/dev/ui/poster/element.d.ts +1 -2
  743. package/dist/dev/ui/poster/element.js.map +1 -1
  744. package/dist/dev/ui/quality-radio-group/element.d.ts +4 -5
  745. package/dist/dev/ui/quality-radio-group/element.js.map +1 -1
  746. package/dist/dev/ui/radio-group/context.d.ts +4 -3
  747. package/dist/dev/ui/radio-group/context.js +1 -0
  748. package/dist/dev/ui/radio-group/context.js.map +1 -1
  749. package/dist/dev/ui/radio-group/element.d.ts +1 -2
  750. package/dist/dev/ui/radio-group/element.js.map +1 -1
  751. package/dist/dev/ui/radio-options/controller.js.map +1 -1
  752. package/dist/dev/ui/seek-button/element.d.ts +2 -3
  753. package/dist/dev/ui/seek-button/element.js.map +1 -1
  754. package/dist/dev/ui/seek-indicator/element.d.ts +3 -4
  755. package/dist/dev/ui/seek-indicator/element.js +7 -1
  756. package/dist/dev/ui/seek-indicator/element.js.map +1 -1
  757. package/dist/dev/ui/seek-indicator/value.d.ts +1 -2
  758. package/dist/dev/ui/slider/buffer.d.ts +1 -2
  759. package/dist/dev/ui/slider/context.d.ts +4 -3
  760. package/dist/dev/ui/slider/context.js +1 -0
  761. package/dist/dev/ui/slider/context.js.map +1 -1
  762. package/dist/dev/ui/slider/element.d.ts +1 -2
  763. package/dist/dev/ui/slider/element.js.map +1 -1
  764. package/dist/dev/ui/slider/events.d.ts +4 -3
  765. package/dist/dev/ui/slider/fill.d.ts +1 -2
  766. package/dist/dev/ui/slider/preview.d.ts +1 -2
  767. package/dist/dev/ui/slider/preview.js.map +1 -1
  768. package/dist/dev/ui/slider/thumb.d.ts +1 -2
  769. package/dist/dev/ui/slider/thumb.js.map +1 -1
  770. package/dist/dev/ui/slider/thumbnail.d.ts +1 -2
  771. package/dist/dev/ui/slider/thumbnail.js.map +1 -1
  772. package/dist/dev/ui/slider/track.d.ts +1 -2
  773. package/dist/dev/ui/slider/value.d.ts +1 -2
  774. package/dist/dev/ui/slider/value.js.map +1 -1
  775. package/dist/dev/ui/status-announcer/element.d.ts +1 -2
  776. package/dist/dev/ui/status-announcer/element.js.map +1 -1
  777. package/dist/dev/ui/status-indicator/element.d.ts +9 -4
  778. package/dist/dev/ui/status-indicator/element.js +14 -1
  779. package/dist/dev/ui/status-indicator/element.js.map +1 -1
  780. package/dist/dev/ui/status-indicator/value.d.ts +1 -2
  781. package/dist/dev/ui/text/element.d.ts +4 -3
  782. package/dist/dev/ui/text/element.js +1 -0
  783. package/dist/dev/ui/text/element.js.map +1 -1
  784. package/dist/dev/ui/thumbnail/element.d.ts +5 -6
  785. package/dist/dev/ui/thumbnail/element.js +3 -2
  786. package/dist/dev/ui/thumbnail/element.js.map +1 -1
  787. package/dist/dev/ui/time/element.d.ts +1 -2
  788. package/dist/dev/ui/time/element.js.map +1 -1
  789. package/dist/dev/ui/time/group.d.ts +1 -2
  790. package/dist/dev/ui/time/separator.d.ts +1 -2
  791. package/dist/dev/ui/time-slider/chapter-title.d.ts +1 -2
  792. package/dist/dev/ui/time-slider/chapter-title.js.map +1 -1
  793. package/dist/dev/ui/time-slider/chapters.d.ts +1 -2
  794. package/dist/dev/ui/time-slider/chapters.js.map +1 -1
  795. package/dist/dev/ui/time-slider/element.d.ts +1 -2
  796. package/dist/dev/ui/time-slider/element.js.map +1 -1
  797. package/dist/dev/ui/title/element.d.ts +1 -2
  798. package/dist/dev/ui/title/element.js.map +1 -1
  799. package/dist/dev/ui/tooltip/context.d.ts +2 -2
  800. package/dist/dev/ui/tooltip/context.js +1 -0
  801. package/dist/dev/ui/tooltip/context.js.map +1 -1
  802. package/dist/dev/ui/tooltip/element.d.ts +1 -2
  803. package/dist/dev/ui/tooltip/element.js +4 -2
  804. package/dist/dev/ui/tooltip/element.js.map +1 -1
  805. package/dist/dev/ui/tooltip/group.d.ts +1 -2
  806. package/dist/dev/ui/tooltip/group.js.map +1 -1
  807. package/dist/dev/ui/tooltip/label.d.ts +1 -2
  808. package/dist/dev/ui/tooltip/label.js.map +1 -1
  809. package/dist/dev/ui/tooltip/shortcut.d.ts +1 -2
  810. package/dist/dev/ui/ui-element.d.ts +3 -3
  811. package/dist/dev/ui/ui-element.js.map +1 -1
  812. package/dist/dev/ui/volume-indicator/element.d.ts +3 -4
  813. package/dist/dev/ui/volume-indicator/element.js.map +1 -1
  814. package/dist/dev/ui/volume-indicator/fill.d.ts +1 -2
  815. package/dist/dev/ui/volume-indicator/value.d.ts +1 -2
  816. package/dist/dev/ui/volume-popover/element.d.ts +1 -2
  817. package/dist/dev/ui/volume-popover/element.js +1 -1
  818. package/dist/dev/ui/volume-popover/element.js.map +1 -1
  819. package/dist/dev/ui/volume-slider/element.d.ts +1 -2
  820. package/dist/dev/ui/volume-slider/element.js +1 -1
  821. package/dist/dev/ui/volume-slider/element.js.map +1 -1
  822. package/dist/dev/version.d.ts +21 -0
  823. package/dist/dev/version.js +29 -0
  824. package/dist/dev/version.js.map +1 -0
  825. package/docs/README.md +1 -1
  826. package/docs/guides/autoplay.md +10 -21
  827. package/docs/guides/background-video.md +74 -7
  828. package/docs/guides/browser-support.md +48 -36
  829. package/docs/guides/build-with-ai.md +1 -1
  830. package/docs/guides/build-your-own-component.md +5 -5
  831. package/docs/guides/captions.md +46 -6
  832. package/docs/guides/casting.md +24 -8
  833. package/docs/guides/cdn.md +11 -10
  834. package/docs/guides/content-security-policy.md +29 -5
  835. package/docs/guides/controls.md +25 -10
  836. package/docs/guides/customize-skins.md +2 -2
  837. package/docs/guides/features.md +3 -1
  838. package/docs/guides/fullscreen.md +35 -8
  839. package/docs/guides/installation-cdn.md +7 -7
  840. package/docs/guides/installation-shadcn.md +5 -5
  841. package/docs/guides/installation-svelte.md +6 -6
  842. package/docs/guides/installation-vue.md +6 -6
  843. package/docs/guides/installation.md +7 -7
  844. package/docs/guides/internationalization.md +37 -28
  845. package/docs/guides/keyboard-shortcuts.md +27 -15
  846. package/docs/guides/live-streams.md +51 -13
  847. package/docs/guides/llms.txt +6 -5
  848. package/docs/guides/media-sources.md +13 -6
  849. package/docs/guides/migrate-from-media-chrome.md +182 -51
  850. package/docs/guides/migrate-from-mux-player.md +191 -116
  851. package/docs/guides/migrate-from-plyr.md +171 -81
  852. package/docs/guides/migrate-from-video-js-8.md +256 -191
  853. package/docs/guides/migrate-from-vidstack.md +865 -0
  854. package/docs/guides/mux-data.md +23 -9
  855. package/docs/guides/picture-in-picture.md +22 -16
  856. package/docs/guides/playback-errors.md +10 -7
  857. package/docs/guides/poster.md +32 -11
  858. package/docs/guides/presets.md +15 -5
  859. package/docs/guides/quality.md +44 -5
  860. package/docs/guides/self-hosting.md +5 -5
  861. package/docs/guides/skins.md +6 -4
  862. package/docs/guides/thumbnails.md +24 -14
  863. package/docs/guides/ui-components.md +1 -1
  864. package/docs/guides/user-preferences.md +38 -15
  865. package/docs/guides/v10-roadmap.md +1 -1
  866. package/docs/llms.txt +45 -11
  867. package/docs/reference/api/create-i18n.md +3 -3
  868. package/docs/reference/api/create-translator.md +1 -1
  869. package/docs/reference/api/feature-audio-track.md +1 -1
  870. package/docs/reference/api/feature-controls.md +2 -2
  871. package/docs/reference/api/feature-fullscreen.md +1 -2
  872. package/docs/reference/api/feature-pip.md +3 -4
  873. package/docs/reference/api/feature-playback.md +2 -3
  874. package/docs/reference/api/feature-quality.md +2 -2
  875. package/docs/reference/api/feature-remote-playback.md +1 -1
  876. package/docs/reference/api/feature-source.md +2 -8
  877. package/docs/reference/api/feature-text-tracks.md +6 -8
  878. package/docs/reference/api/feature-volume.md +1 -1
  879. package/docs/reference/api/find-locale-keys.md +32 -0
  880. package/docs/reference/api/get-locale-key.md +32 -0
  881. package/docs/reference/api/html-create-player.md +24 -26
  882. package/docs/reference/api/i18n-controller.md +1 -1
  883. package/docs/reference/api/is-text.md +33 -0
  884. package/docs/reference/api/llms.txt +23 -2
  885. package/docs/reference/api/load-locale.md +36 -0
  886. package/docs/reference/api/media-capabilities.md +255 -0
  887. package/docs/reference/api/player-controller.md +39 -20
  888. package/docs/reference/api/player-store.md +112 -0
  889. package/docs/reference/api/preset-audio.md +116 -0
  890. package/docs/reference/api/preset-background.md +103 -0
  891. package/docs/reference/api/preset-live-audio.md +119 -0
  892. package/docs/reference/api/preset-live-video.md +124 -0
  893. package/docs/reference/api/preset-video.md +123 -0
  894. package/docs/reference/api/register-i18n.md +13 -0
  895. package/docs/reference/api/resolve-adapter-type.md +98 -0
  896. package/docs/reference/api/resolve-mime-type.md +48 -0
  897. package/docs/reference/api/resolve-translation.md +36 -0
  898. package/docs/reference/api/translate-text.md +56 -0
  899. package/docs/reference/api/translation-phrases.md +13 -0
  900. package/docs/reference/api/ui-element.md +296 -0
  901. package/docs/reference/components/audio-compat-skin.md +33 -0
  902. package/docs/reference/components/{audio-minimal-skin.md → audio-neutral-skin.md} +7 -7
  903. package/docs/reference/components/audio-skin.md +3 -3
  904. package/docs/reference/components/background-video-skin.md +1 -1
  905. package/docs/reference/components/background-video.md +1 -1
  906. package/docs/reference/components/captions-button.md +1 -1
  907. package/docs/reference/components/captions-radio-group.md +1 -1
  908. package/docs/reference/components/cloudflare-video.md +1 -1
  909. package/docs/reference/components/controls.md +2 -2
  910. package/docs/reference/components/dash-video.md +1 -1
  911. package/docs/reference/components/fullscreen-button.md +1 -1
  912. package/docs/reference/components/google-cast.md +4 -4
  913. package/docs/reference/components/hls-audio.md +1 -1
  914. package/docs/reference/components/hls-background-video.md +1 -1
  915. package/docs/reference/components/hls-video.md +1 -1
  916. package/docs/reference/components/hlsjs-video.md +2 -2
  917. package/docs/reference/components/icons.md +130 -0
  918. package/docs/reference/components/live-audio-compat-skin.md +35 -0
  919. package/docs/reference/components/{live-audio-minimal-skin.md → live-audio-neutral-skin.md} +7 -7
  920. package/docs/reference/components/live-audio-skin.md +3 -3
  921. package/docs/reference/components/live-video-compat-skin.md +41 -0
  922. package/docs/reference/components/{live-video-minimal-skin.md → live-video-neutral-skin.md} +7 -7
  923. package/docs/reference/components/live-video-skin.md +3 -3
  924. package/docs/reference/components/llms.txt +16 -6
  925. package/docs/reference/components/menu.md +7 -2
  926. package/docs/reference/components/mux-audio.md +2 -2
  927. package/docs/reference/components/mux-background-video.md +1 -1
  928. package/docs/reference/components/mux-data.md +4 -4
  929. package/docs/reference/components/mux-video.md +4 -4
  930. package/docs/reference/components/native-hls-video.md +1 -1
  931. package/docs/reference/components/pip-button.md +2 -2
  932. package/docs/reference/components/player.md +26 -2
  933. package/docs/reference/components/popover.md +6 -8
  934. package/docs/reference/components/shaka-video.md +1 -1
  935. package/docs/reference/components/spotify-audio.md +1 -1
  936. package/docs/reference/components/status-indicator.md +27 -4
  937. package/docs/reference/components/thumbnail.md +1 -1
  938. package/docs/reference/components/tiktok-video.md +1 -1
  939. package/docs/reference/components/twitch-video.md +1 -1
  940. package/docs/reference/components/video-compat-skin.md +45 -0
  941. package/docs/reference/components/{video-minimal-skin.md → video-neutral-skin.md} +7 -7
  942. package/docs/reference/components/video-skin.md +3 -3
  943. package/docs/reference/components/vimeo-video.md +1 -1
  944. package/docs/reference/components/wistia-video.md +1 -1
  945. package/docs/reference/components/youtube-video.md +1 -1
  946. package/package.json +54 -42
  947. package/dist/default/define/audio/minimal-skin.css +0 -2048
  948. package/dist/default/define/audio/minimal-skin.js +0 -6
  949. package/dist/default/define/audio/minimal-skin2.js +0 -4
  950. package/dist/default/define/live-audio/minimal-skin.css +0 -1378
  951. package/dist/default/define/live-audio/minimal-skin.js +0 -6
  952. package/dist/default/define/live-audio/minimal-skin2.js +0 -4
  953. package/dist/default/define/live-video/minimal-skin.css +0 -2311
  954. package/dist/default/define/live-video/minimal-skin.js +0 -6
  955. package/dist/default/define/live-video/minimal-skin2.js +0 -4
  956. package/dist/default/define/video/minimal-skin.css +0 -3232
  957. package/dist/default/define/video/minimal-skin.js +0 -6
  958. package/dist/default/define/video/minimal-skin2.js +0 -4
  959. package/dist/default/extensions/media-extension-element.js +0 -54
  960. package/dist/default/icons/element/minimal/index.js +0 -1
  961. package/dist/default/icons/minimal/index.js +0 -26
  962. package/dist/default/internal/skins/minimal-audio/skin.css +0 -1977
  963. package/dist/default/internal/skins/minimal-live-audio/skin.css +0 -1307
  964. package/dist/default/internal/skins/minimal-live-video/skin.css +0 -2240
  965. package/dist/default/internal/skins/minimal-video/skin.css +0 -3161
  966. package/dist/default/presets/audio/minimal-skin.js +0 -19
  967. package/dist/default/presets/live-audio/minimal-skin.js +0 -19
  968. package/dist/default/presets/live-video/minimal-skin.js +0 -19
  969. package/dist/default/presets/video/minimal-skin.js +0 -19
  970. package/dist/dev/define/audio/minimal-skin.css +0 -2048
  971. package/dist/dev/define/audio/minimal-skin.d.ts +0 -1
  972. package/dist/dev/define/audio/minimal-skin.js +0 -8
  973. package/dist/dev/define/audio/minimal-skin.js.map +0 -1
  974. package/dist/dev/define/audio/minimal-skin2.js +0 -6
  975. package/dist/dev/define/audio/minimal-skin2.js.map +0 -1
  976. package/dist/dev/define/live-audio/minimal-skin.css +0 -1378
  977. package/dist/dev/define/live-audio/minimal-skin.d.ts +0 -1
  978. package/dist/dev/define/live-audio/minimal-skin.js +0 -8
  979. package/dist/dev/define/live-audio/minimal-skin.js.map +0 -1
  980. package/dist/dev/define/live-audio/minimal-skin2.js +0 -6
  981. package/dist/dev/define/live-audio/minimal-skin2.js.map +0 -1
  982. package/dist/dev/define/live-video/minimal-skin.css +0 -2311
  983. package/dist/dev/define/live-video/minimal-skin.d.ts +0 -1
  984. package/dist/dev/define/live-video/minimal-skin.js +0 -8
  985. package/dist/dev/define/live-video/minimal-skin.js.map +0 -1
  986. package/dist/dev/define/live-video/minimal-skin2.js +0 -6
  987. package/dist/dev/define/live-video/minimal-skin2.js.map +0 -1
  988. package/dist/dev/define/video/minimal-skin.css +0 -3232
  989. package/dist/dev/define/video/minimal-skin.d.ts +0 -1
  990. package/dist/dev/define/video/minimal-skin.js +0 -8
  991. package/dist/dev/define/video/minimal-skin.js.map +0 -1
  992. package/dist/dev/define/video/minimal-skin2.js +0 -6
  993. package/dist/dev/define/video/minimal-skin2.js.map +0 -1
  994. package/dist/dev/extensions/media-extension-element.d.ts +0 -29
  995. package/dist/dev/extensions/media-extension-element.js +0 -56
  996. package/dist/dev/extensions/media-extension-element.js.map +0 -1
  997. package/dist/dev/icons/dist/html/minimal/index.d.ts +0 -29
  998. package/dist/dev/icons/element/minimal/index.d.ts +0 -1
  999. package/dist/dev/icons/element/minimal/index.js +0 -1
  1000. package/dist/dev/icons/minimal/index.js +0 -26
  1001. package/dist/dev/internal/skins/minimal-audio/skin.css +0 -1977
  1002. package/dist/dev/internal/skins/minimal-live-audio/skin.css +0 -1307
  1003. package/dist/dev/internal/skins/minimal-live-video/skin.css +0 -2240
  1004. package/dist/dev/internal/skins/minimal-video/skin.css +0 -3161
  1005. package/dist/dev/presets/audio/minimal-skin.d.ts +0 -16
  1006. package/dist/dev/presets/audio/minimal-skin.js +0 -21
  1007. package/dist/dev/presets/audio/minimal-skin.js.map +0 -1
  1008. package/dist/dev/presets/live-audio/minimal-skin.d.ts +0 -16
  1009. package/dist/dev/presets/live-audio/minimal-skin.js +0 -21
  1010. package/dist/dev/presets/live-audio/minimal-skin.js.map +0 -1
  1011. package/dist/dev/presets/live-video/minimal-skin.d.ts +0 -16
  1012. package/dist/dev/presets/live-video/minimal-skin.js +0 -21
  1013. package/dist/dev/presets/live-video/minimal-skin.js.map +0 -1
  1014. package/dist/dev/presets/video/minimal-skin.d.ts +0 -16
  1015. package/dist/dev/presets/video/minimal-skin.js +0 -21
  1016. package/dist/dev/presets/video/minimal-skin.js.map +0 -1
  1017. /package/dist/dev/define/audio/{minimal-ui.d.ts → neutral-ui.d.ts} +0 -0
  1018. /package/dist/dev/define/live-audio/{minimal-ui.d.ts → neutral-ui.d.ts} +0 -0
  1019. /package/dist/dev/define/live-video/{minimal-ui.d.ts → neutral-ui.d.ts} +0 -0
  1020. /package/dist/dev/define/video/{minimal-ui.d.ts → neutral-ui.d.ts} +0 -0
  1021. /package/dist/dev/icons/dist/element/{minimal → compat}/index.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["#core","#provider","#popupId","#titleId","#descriptionId","#errorState","#i18n","#container","#dialog","#snapshot","#modalitySnapshot","#lastError","#syncDialogCopy","#lastDescription","#hasAuthoredCopy","#seenCopyParts","#authoredCopyParts"],"sources":["../../../../src/ui/error-dialog/element.ts"],"sourcesContent":["import {\n type DialogInput,\n ErrorDialogCore,\n ErrorDialogDataAttrs,\n getErrorDialogDismissText,\n getErrorDialogTitleText,\n getErrorDialogUnexpectedText,\n resolveErrorDialogDescription,\n} from '@videojs/core';\nimport {\n applyStateDataAttrs,\n createDialog,\n createTransition,\n type DialogApi,\n type DialogModality,\n selectError,\n} from '@videojs/core/dom';\nimport { translateText } from '@videojs/core/i18n';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer, ContextProvider } from '@videojs/element/context';\nimport type { ErrorLike } from '@videojs/media';\nimport { SnapshotController } from '@videojs/store/html';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { dialogContext } from '../dialog/context';\nimport { UIElement } from '../ui-element';\n\nlet idCounter = 0;\n\nfunction hasAuthoredContent(host: HTMLElement): boolean {\n return Array.from(host.childNodes).some((node) => !!node.textContent?.trim());\n}\n\nexport class ErrorDialogElement extends UIElement {\n static readonly tagName = 'media-error-dialog';\n\n readonly #core = new ErrorDialogCore();\n readonly #provider = new ContextProvider(this, { context: dialogContext });\n readonly #popupId = `vjs-error-dialog-popup-${idCounter++}`;\n readonly #titleId = `vjs-error-dialog-title-${idCounter++}`;\n readonly #descriptionId = `vjs-error-dialog-desc-${idCounter++}`;\n readonly #errorState = new PlayerController(this, playerContext, selectError);\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #container = new ContextConsumer(this, { context: containerContext, subscribe: true });\n\n #dialog: DialogApi | null = null;\n #snapshot: SnapshotController<DialogInput> | null = null;\n #modalitySnapshot: SnapshotController<DialogModality> | null = null;\n #lastError: ErrorLike | null = null;\n #lastDescription: ReturnType<typeof resolveErrorDialogDescription> | null = null;\n #seenCopyParts = new WeakSet<HTMLElement>();\n #authoredCopyParts = new WeakSet<HTMLElement>();\n\n constructor() {\n super();\n this.#core.setTitleId(this.#titleId);\n this.#core.setDescriptionId(this.#descriptionId);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#dialog = createDialog({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen) {\n this.#errorState.value?.dismissError();\n }\n },\n });\n\n if (this.#snapshot) {\n this.#snapshot.track(this.#dialog.input);\n } else {\n this.#snapshot = new SnapshotController(this, this.#dialog.input);\n }\n\n if (this.#modalitySnapshot) {\n this.#modalitySnapshot.track(this.#dialog.modality);\n } else {\n this.#modalitySnapshot = new SnapshotController(this, this.#dialog.modality);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#dialog?.destroy();\n this.#dialog = null;\n }\n\n protected override willUpdate(_changed: PropertyValues): void {\n super.willUpdate(_changed);\n\n if (!this.#dialog) return;\n\n this.#dialog.setInteractionRoot(this.#container.value?.container ?? null);\n\n const errorState = this.#errorState.value;\n const hasError = Boolean(errorState?.error);\n const { active: isOpen } = this.#dialog.input.current;\n\n if (errorState?.error) {\n this.#lastError = errorState.error;\n }\n\n const errorForCopy = errorState?.error ?? (isOpen ? this.#lastError : null);\n\n this.#syncDialogCopy(errorForCopy);\n\n if (!hasError && !isOpen) {\n this.#lastError = null;\n this.#lastDescription = null;\n }\n\n if (hasError && !isOpen) {\n this.#dialog.open();\n } else if (!hasError && isOpen) {\n this.#dialog.close();\n }\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n if (!this.#dialog) return;\n\n const input = this.#dialog.input.current;\n\n this.#core.setInput(input);\n this.#core.setDocumentModal(this.#dialog.modality.current.documentModal);\n const state = this.#core.getState();\n\n applyStateDataAttrs(this, state, ErrorDialogDataAttrs);\n\n this.#provider.setValue({\n state,\n stateAttrMap: ErrorDialogDataAttrs,\n dialog: this.#dialog,\n popupId: this.#popupId,\n popupAttrs: this.#core.getPopupAttrs(state),\n close: () => this.#dialog?.close(),\n });\n }\n\n #syncDialogCopy(error: ErrorLike | null): void {\n const t = this.#i18n.value;\n const title = this.querySelector<HTMLElement>('media-dialog-title');\n\n if (title && !this.#hasAuthoredCopy(title)) {\n title.textContent = translateText(getErrorDialogTitleText(), t);\n }\n\n const desc = this.querySelector<HTMLElement>('media-dialog-description');\n\n if (desc && !this.#hasAuthoredCopy(desc)) {\n const description = error ? resolveErrorDialogDescription(error) : null;\n\n if (description) {\n this.#lastDescription = description;\n }\n\n const copy = description ?? this.#lastDescription;\n\n desc.textContent = copy ? translateText(copy, t) : translateText(getErrorDialogUnexpectedText(), t);\n }\n\n const close = this.querySelector<HTMLElement>('media-dialog-close');\n\n if (close && !this.#hasAuthoredCopy(close)) {\n close.textContent = translateText(getErrorDialogDismissText(), t);\n }\n }\n\n #hasAuthoredCopy(el: HTMLElement): boolean {\n if (!this.#seenCopyParts.has(el)) {\n this.#seenCopyParts.add(el);\n\n if (hasAuthoredContent(el)) {\n this.#authoredCopyParts.add(el);\n }\n }\n\n return this.#authoredCopyParts.has(el);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"element.js","names":[],"sources":["../../../../src/ui/error-dialog/element.ts"],"sourcesContent":["import {\n type DialogInput,\n ErrorDialogCore,\n ErrorDialogDataAttrs,\n getErrorDialogDismissText,\n getErrorDialogTitleText,\n getErrorDialogUnexpectedText,\n resolveErrorDialogDescription,\n} from '@videojs/core';\nimport {\n applyStateDataAttrs,\n createDialog,\n createTransition,\n type DialogApi,\n type DialogModality,\n selectError,\n} from '@videojs/core/dom';\nimport { translateText } from '@videojs/core/i18n';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer, ContextProvider } from '@videojs/element/context';\nimport type { ErrorLike } from '@videojs/media';\nimport { SnapshotController } from '@videojs/store/html';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { dialogContext } from '../dialog/context';\nimport { UIElement } from '../ui-element';\n\nlet idCounter = 0;\n\nfunction hasAuthoredContent(host: HTMLElement): boolean {\n return Array.from(host.childNodes).some((node) => !!node.textContent?.trim());\n}\n\nexport class ErrorDialogElement extends UIElement {\n static readonly tagName = 'media-error-dialog';\n\n readonly #core = new ErrorDialogCore();\n readonly #provider = new ContextProvider(this, { context: dialogContext });\n readonly #popupId = `vjs-error-dialog-popup-${idCounter++}`;\n readonly #titleId = `vjs-error-dialog-title-${idCounter++}`;\n readonly #descriptionId = `vjs-error-dialog-desc-${idCounter++}`;\n readonly #errorState = new PlayerController(this, playerContext, selectError);\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #container = new ContextConsumer(this, { context: containerContext, subscribe: true });\n\n #dialog: DialogApi | null = null;\n #snapshot: SnapshotController<DialogInput> | null = null;\n #modalitySnapshot: SnapshotController<DialogModality> | null = null;\n #lastError: ErrorLike | null = null;\n #lastDescription: ReturnType<typeof resolveErrorDialogDescription> | null = null;\n #seenCopyParts = new WeakSet<HTMLElement>();\n #authoredCopyParts = new WeakSet<HTMLElement>();\n\n constructor() {\n super();\n this.#core.setTitleId(this.#titleId);\n this.#core.setDescriptionId(this.#descriptionId);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#dialog = createDialog({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen) {\n this.#errorState.value?.dismissError();\n }\n },\n });\n\n if (this.#snapshot) {\n this.#snapshot.track(this.#dialog.input);\n } else {\n this.#snapshot = new SnapshotController(this, this.#dialog.input);\n }\n\n if (this.#modalitySnapshot) {\n this.#modalitySnapshot.track(this.#dialog.modality);\n } else {\n this.#modalitySnapshot = new SnapshotController(this, this.#dialog.modality);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#dialog?.destroy();\n this.#dialog = null;\n }\n\n protected override willUpdate(_changed: PropertyValues): void {\n super.willUpdate(_changed);\n\n if (!this.#dialog) return;\n\n this.#dialog.setInteractionRoot(this.#container.value?.container ?? null);\n\n const errorState = this.#errorState.value;\n const hasError = Boolean(errorState?.error);\n const { active: isOpen } = this.#dialog.input.current;\n\n if (errorState?.error) {\n this.#lastError = errorState.error;\n }\n\n const errorForCopy = errorState?.error ?? (isOpen ? this.#lastError : null);\n\n this.#syncDialogCopy(errorForCopy);\n\n if (!hasError && !isOpen) {\n this.#lastError = null;\n this.#lastDescription = null;\n }\n\n if (hasError && !isOpen) {\n this.#dialog.open();\n } else if (!hasError && isOpen) {\n this.#dialog.close();\n }\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n if (!this.#dialog) return;\n\n const input = this.#dialog.input.current;\n\n this.#core.setInput(input);\n this.#core.setDocumentModal(this.#dialog.modality.current.documentModal);\n const state = this.#core.getState();\n\n applyStateDataAttrs(this, state, ErrorDialogDataAttrs);\n\n this.#provider.setValue({\n state,\n stateAttrMap: ErrorDialogDataAttrs,\n dialog: this.#dialog,\n popupId: this.#popupId,\n popupAttrs: this.#core.getPopupAttrs(state),\n close: () => this.#dialog?.close(),\n });\n }\n\n #syncDialogCopy(error: ErrorLike | null): void {\n const t = this.#i18n.value;\n const title = this.querySelector<HTMLElement>('media-dialog-title');\n\n if (title && !this.#hasAuthoredCopy(title)) {\n title.textContent = translateText(getErrorDialogTitleText(), t);\n }\n\n const desc = this.querySelector<HTMLElement>('media-dialog-description');\n\n if (desc && !this.#hasAuthoredCopy(desc)) {\n const description = error ? resolveErrorDialogDescription(error) : null;\n\n if (description) {\n this.#lastDescription = description;\n }\n\n const copy = description ?? this.#lastDescription;\n\n desc.textContent = copy ? translateText(copy, t) : translateText(getErrorDialogUnexpectedText(), t);\n }\n\n const close = this.querySelector<HTMLElement>('media-dialog-close');\n\n if (close && !this.#hasAuthoredCopy(close)) {\n close.textContent = translateText(getErrorDialogDismissText(), t);\n }\n }\n\n #hasAuthoredCopy(el: HTMLElement): boolean {\n if (!this.#seenCopyParts.has(el)) {\n this.#seenCopyParts.add(el);\n\n if (hasAuthoredContent(el)) {\n this.#authoredCopyParts.add(el);\n }\n }\n\n return this.#authoredCopyParts.has(el);\n }\n}\n"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { PlayerController } from "../../player/controller.js";
2
2
  import { MediaButtonElement } from "../media-button-element.js";
3
3
  import { index_d_exports } from "../../index.js";
4
- import { FullscreenButtonCore } from "@videojs/core";
4
+ import { FullscreenButtonCore, FullscreenButtonState } from "@videojs/core";
5
5
  import { ButtonActivationSource, UIEvent } from "@videojs/core/dom";
6
6
  import { MediaFullscreenState } from "@videojs/media";
7
7
  //#region src/ui/fullscreen-button/element.d.ts
8
- declare class FullscreenButtonElement extends MediaButtonElement<FullscreenButtonCore> {
8
+ export declare class FullscreenButtonElement extends MediaButtonElement<FullscreenButtonState, MediaFullscreenState> {
9
9
  #private;
10
10
  static readonly tagName = "media-fullscreen-button";
11
11
  protected readonly core: FullscreenButtonCore;
@@ -16,15 +16,13 @@ declare class FullscreenButtonElement extends MediaButtonElement<FullscreenButto
16
16
  readonly hidden: 'data-hidden';
17
17
  };
18
18
  protected readonly mediaState: PlayerController<index_d_exports.AnyPlayerStore, {
19
- fullscreen: boolean;
19
+ isFullscreen: boolean;
20
20
  fullscreenAvailability: import("@videojs/media").MediaFeatureAvailability;
21
21
  requestFullscreen: () => Promise<void>;
22
22
  exitFullscreen: () => Promise<void>;
23
- toggleFullscreen: () => Promise<void>;
24
23
  } | undefined>;
25
24
  protected readonly hotkeyAction = "toggleFullscreen";
26
25
  protected activate(state: MediaFullscreenState, _event: UIEvent, source: ButtonActivationSource): Promise<void>;
27
26
  }
28
27
  //#endregion
29
- export { FullscreenButtonElement };
30
28
  //# sourceMappingURL=element.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["#container"],"sources":["../../../../src/ui/fullscreen-button/element.ts"],"sourcesContent":["import { FullscreenButtonCore, FullscreenButtonDataAttrs } from '@videojs/core';\nimport { type ButtonActivationSource, selectFullscreen, type UIEvent } from '@videojs/core/dom';\nimport { ContextConsumer } from '@videojs/element/context';\nimport type { MediaFullscreenState } from '@videojs/media';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class FullscreenButtonElement extends MediaButtonElement<FullscreenButtonCore> {\n static readonly tagName = 'media-fullscreen-button';\n\n protected readonly core = new FullscreenButtonCore();\n protected readonly stateAttrMap = FullscreenButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectFullscreen);\n protected override readonly hotkeyAction = 'toggleFullscreen';\n readonly #container = new ContextConsumer(this, { context: containerContext, subscribe: true });\n\n protected activate(state: MediaFullscreenState, _event: UIEvent, source: ButtonActivationSource): Promise<void> {\n if (source === 'pointer') {\n this.#container.value?.container?.focus({ preventScroll: true });\n }\n\n return this.core.toggle(state);\n }\n}\n"],"mappings":";;;;;;;AASA,IAAa,0BAAb,cAA6C,mBAAyC;;;EAG1D,KAAA,OAAA,IAAI,qBAAqB;EACjB,KAAA,eAAA;EACF,KAAA,aAAA,IAAI,iBAAiB,MAAM,eAAe,gBAAgB;EAC/C,KAAA,eAAA;EACrB,KAAA,aAAA,IAAI,gBAAgB,MAAM;GAAE,SAAS;GAAkB,WAAW;EAAK,CAAC;;;EANpE,KAAA,UAAA;;CAM1B;CAEA,SAAmB,OAA6B,QAAiB,QAA+C;EAC9G,IAAI,WAAW,WACb,KAAKA,WAAW,OAAO,WAAW,MAAM,EAAE,eAAe,KAAK,CAAC;EAGjE,OAAO,KAAK,KAAK,OAAO,KAAK;CAC/B;AACF"}
1
+ {"version":3,"file":"element.js","names":[],"sources":["../../../../src/ui/fullscreen-button/element.ts"],"sourcesContent":["import { FullscreenButtonCore, FullscreenButtonDataAttrs, type FullscreenButtonState } from '@videojs/core';\nimport { type ButtonActivationSource, selectFullscreen, type UIEvent } from '@videojs/core/dom';\nimport { ContextConsumer } from '@videojs/element/context';\nimport type { MediaFullscreenState } from '@videojs/media';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class FullscreenButtonElement extends MediaButtonElement<FullscreenButtonState, MediaFullscreenState> {\n static readonly tagName = 'media-fullscreen-button';\n\n protected readonly core = new FullscreenButtonCore();\n protected readonly stateAttrMap = FullscreenButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectFullscreen);\n protected override readonly hotkeyAction = 'toggleFullscreen';\n readonly #container = new ContextConsumer(this, { context: containerContext, subscribe: true });\n\n protected activate(state: MediaFullscreenState, _event: UIEvent, source: ButtonActivationSource): Promise<void> {\n if (source === 'pointer') {\n this.#container.value?.container?.focus({ preventScroll: true });\n }\n\n return this.core.toggle(state);\n }\n}\n"],"mappings":";;;;;;;AASA,IAAa,0BAAb,cAA6C,mBAAgE;;;EAGjF,KAAA,OAAA,IAAI,qBAAqB;EACjB,KAAA,eAAA;EACF,KAAA,aAAA,IAAI,iBAAiB,MAAM,eAAe,gBAAgB;EAC/C,KAAA,eAAA;EACrB,KAAA,aAAA,IAAI,gBAAgB,MAAM;GAAE,SAAS;GAAkB,WAAW;EAAK,CAAC;;;EANpE,KAAA,UAAA;;CAM1B;CAEA,SAAmB,OAA6B,QAAiB,QAA+C;EAC9G,IAAI,WAAW,WACb,KAAK,WAAW,OAAO,WAAW,MAAM,EAAE,eAAe,KAAK,CAAC;EAGjE,OAAO,KAAK,KAAK,OAAO,KAAK;CAC/B;AACF"}
@@ -2,7 +2,7 @@ import { UIElement } from "../ui-element.js";
2
2
  import { GestureProps } from "@videojs/core";
3
3
  import { PropertyDeclarationMap, PropertyValues } from "@videojs/element";
4
4
  //#region src/ui/gesture/element.d.ts
5
- declare class GestureElement extends UIElement {
5
+ export declare class GestureElement extends UIElement {
6
6
  #private;
7
7
  static readonly tagName = "media-gesture";
8
8
  static properties: PropertyDeclarationMap;
@@ -17,5 +17,4 @@ declare class GestureElement extends UIElement {
17
17
  protected update(changed: PropertyValues): void;
18
18
  }
19
19
  //#endregion
20
- export { GestureElement };
21
20
  //# sourceMappingURL=element.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["#player","#container","#register","#unregister","#cleanup"],"sources":["../../../../src/ui/gesture/element.ts"],"sourcesContent":["import type { GestureProps } from '@videojs/core';\nimport {\n createDoubleTapGesture,\n createTapGesture,\n getGestureActionValue,\n resolveGestureAction,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\nexport class GestureElement extends UIElement {\n static readonly tagName = 'media-gesture';\n\n static override properties: PropertyDeclarationMap = {\n type: { type: String },\n action: { type: String },\n value: { type: Number },\n pointer: { type: String },\n region: { type: String },\n disabled: { type: Boolean },\n };\n\n type: GestureProps['type'] | '' = '';\n action: GestureProps['action'] = '';\n value: GestureProps['value'] = undefined;\n pointer: GestureProps['pointer'] = undefined;\n region: GestureProps['region'] = undefined;\n disabled: NonNullable<GestureProps['disabled']> = false;\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.type || !this.action || !store || !container) return;\n\n const resolver = resolveGestureAction(this.action);\n if (!resolver) return;\n\n const { value, region } = this;\n const actionValue = getGestureActionValue(this.action, region, value);\n\n const onActivate = (event: PointerEvent) => {\n resolver({ store, value: actionValue, event });\n };\n\n const options = {\n pointer: this.pointer,\n region,\n disabled: this.disabled,\n action: this.action,\n value: actionValue,\n };\n\n if (this.type === 'doubletap') {\n this.#cleanup = createDoubleTapGesture(container, onActivate, options);\n } else if (this.type === 'tap') {\n this.#cleanup = createTapGesture(container, onActivate, options);\n }\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":";;;;;;AAcA,IAAa,iBAAb,cAAoC,UAAU;;;EAYV,KAAA,OAAA;EACD,KAAA,SAAA;EACF,KAAA,QAAA,KAAA;EACI,KAAA,UAAA,KAAA;EACF,KAAA,SAAA,KAAA;EACiB,KAAA,WAAA;EAE/B,KAAA,UAAA,IAAI,iBAAiB,MAAM,aAAa;EACrC,KAAA,aAAA,IAAI,gBAAgB,MAAM;GAC9C,SAAS;GACT,gBAAgB,KAAK,cAAc;GACnC,WAAW;EACb,CAAC;EAC+B,KAAA,WAAA;;;EAxBN,KAAA,UAAA;;;EAE2B,KAAA,aAAA;GACnD,MAAM,EAAE,MAAM,OAAO;GACrB,QAAQ,EAAE,MAAM,OAAO;GACvB,OAAO,EAAE,MAAM,OAAO;GACtB,SAAS,EAAE,MAAM,OAAO;GACxB,QAAQ,EAAE,MAAM,OAAO;GACvB,UAAU,EAAE,MAAM,QAAQ;EAC5B;;CASA;CACA;CAKA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,KAAK,MAAM,UAAU;EACrB,KAAKE,UAAU;CACjB;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAKC,YAAY;CACnB;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAGpB,IAAI,KAAK,aAAa;GACpB,KAAKA,YAAY;GACjB,KAAKD,UAAU;EACjB;CACF;CAEA,YAAkB;EAChB,MAAM,QAAQ,KAAKF,QAAQ;EAC3B,MAAM,YAAY,KAAKC,WAAW,OAAO;EACzC,IAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,UAAU,CAAC,SAAS,CAAC,WAAW;EAExD,MAAM,WAAW,qBAAqB,KAAK,MAAM;EACjD,IAAI,CAAC,UAAU;EAEf,MAAM,EAAE,OAAO,WAAW;EAC1B,MAAM,cAAc,sBAAsB,KAAK,QAAQ,QAAQ,KAAK;EAEpE,MAAM,cAAc,UAAwB;GAC1C,SAAS;IAAE;IAAO,OAAO;IAAa;GAAM,CAAC;EAC/C;EAEA,MAAM,UAAU;GACd,SAAS,KAAK;GACd;GACA,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,OAAO;EACT;EAEA,IAAI,KAAK,SAAS,aAChB,KAAKG,WAAW,uBAAuB,WAAW,YAAY,OAAO;OAChE,IAAI,KAAK,SAAS,OACvB,KAAKA,WAAW,iBAAiB,WAAW,YAAY,OAAO;CAEnE;CAEA,cAAoB;EAClB,KAAKA,WAAW;EAChB,KAAKA,WAAW;CAClB;AACF"}
1
+ {"version":3,"file":"element.js","names":[],"sources":["../../../../src/ui/gesture/element.ts"],"sourcesContent":["import type { GestureProps } from '@videojs/core';\nimport {\n createDoubleTapGesture,\n createTapGesture,\n getGestureActionValue,\n resolveGestureAction,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\nexport class GestureElement extends UIElement {\n static readonly tagName = 'media-gesture';\n\n static override properties: PropertyDeclarationMap = {\n type: { type: String },\n action: { type: String },\n value: { type: Number },\n pointer: { type: String },\n region: { type: String },\n disabled: { type: Boolean },\n };\n\n type: GestureProps['type'] | '' = '';\n action: GestureProps['action'] = '';\n value: GestureProps['value'] = undefined;\n pointer: GestureProps['pointer'] = undefined;\n region: GestureProps['region'] = undefined;\n disabled: NonNullable<GestureProps['disabled']> = false;\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.type || !this.action || !store || !container) return;\n\n const resolver = resolveGestureAction(this.action);\n if (!resolver) return;\n\n const { value, region } = this;\n const actionValue = getGestureActionValue(this.action, region, value);\n\n const onActivate = (event: PointerEvent) => {\n resolver({ store, value: actionValue, event });\n };\n\n const options = {\n pointer: this.pointer,\n region,\n disabled: this.disabled,\n action: this.action,\n value: actionValue,\n };\n\n if (this.type === 'doubletap') {\n this.#cleanup = createDoubleTapGesture(container, onActivate, options);\n } else if (this.type === 'tap') {\n this.#cleanup = createTapGesture(container, onActivate, options);\n }\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":";;;;;;AAcA,IAAa,iBAAb,cAAoC,UAAU;;;EAYV,KAAA,OAAA;EACD,KAAA,SAAA;EACF,KAAA,QAAA,KAAA;EACI,KAAA,UAAA,KAAA;EACF,KAAA,SAAA,KAAA;EACiB,KAAA,WAAA;EAE/B,KAAA,UAAA,IAAI,iBAAiB,MAAM,aAAa;EACrC,KAAA,aAAA,IAAI,gBAAgB,MAAM;GAC9C,SAAS;GACT,gBAAgB,KAAK,cAAc;GACnC,WAAW;EACb,CAAC;EAC+B,KAAA,WAAA;;;EAxBN,KAAA,UAAA;;;EAE2B,KAAA,aAAA;GACnD,MAAM,EAAE,MAAM,OAAO;GACrB,QAAQ,EAAE,MAAM,OAAO;GACvB,OAAO,EAAE,MAAM,OAAO;GACtB,SAAS,EAAE,MAAM,OAAO;GACxB,QAAQ,EAAE,MAAM,OAAO;GACvB,UAAU,EAAE,MAAM,QAAQ;EAC5B;;CASA;CACA;CAKA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,KAAK,MAAM,UAAU;EACrB,KAAK,UAAU;CACjB;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAK,YAAY;CACnB;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAGpB,IAAI,KAAK,aAAa;GACpB,KAAK,YAAY;GACjB,KAAK,UAAU;EACjB;CACF;CAEA,YAAkB;EAChB,MAAM,QAAQ,KAAK,QAAQ;EAC3B,MAAM,YAAY,KAAK,WAAW,OAAO;EACzC,IAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,UAAU,CAAC,SAAS,CAAC,WAAW;EAExD,MAAM,WAAW,qBAAqB,KAAK,MAAM;EACjD,IAAI,CAAC,UAAU;EAEf,MAAM,EAAE,OAAO,WAAW;EAC1B,MAAM,cAAc,sBAAsB,KAAK,QAAQ,QAAQ,KAAK;EAEpE,MAAM,cAAc,UAAwB;GAC1C,SAAS;IAAE;IAAO,OAAO;IAAa;GAAM,CAAC;EAC/C;EAEA,MAAM,UAAU;GACd,SAAS,KAAK;GACd;GACA,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,OAAO;EACT;EAEA,IAAI,KAAK,SAAS,aAChB,KAAK,WAAW,uBAAuB,WAAW,YAAY,OAAO;OAChE,IAAI,KAAK,SAAS,OACvB,KAAK,WAAW,iBAAiB,WAAW,YAAY,OAAO;CAEnE;CAEA,cAAoB;EAClB,KAAK,WAAW;EAChB,KAAK,WAAW;CAClB;AACF"}
@@ -2,11 +2,11 @@ import { PlayerControllerHost } from "../../player/controller.js";
2
2
  import { HotkeyShortcutDetails } from "@videojs/core/dom";
3
3
  import { ReactiveController } from "@videojs/element";
4
4
  //#region src/ui/hotkey/aria-key-shortcuts-controller.d.ts
5
- interface AriaKeyShortcutsControllerOptions {
5
+ export interface AriaKeyShortcutsControllerOptions {
6
6
  value?: (() => number | undefined) | undefined;
7
7
  }
8
8
  /** Provides hotkey shortcut metadata for a given hotkey action name. */
9
- declare class AriaKeyShortcutsController implements ReactiveController {
9
+ export declare class AriaKeyShortcutsController implements ReactiveController {
10
10
  #private;
11
11
  /**
12
12
  * @param host - Host element whose nearest player container supplies hotkey registrations.
@@ -22,5 +22,4 @@ declare class AriaKeyShortcutsController implements ReactiveController {
22
22
  hostDisconnected(): void;
23
23
  }
24
24
  //#endregion
25
- export { AriaKeyShortcutsController, AriaKeyShortcutsControllerOptions };
26
25
  //# sourceMappingURL=aria-key-shortcuts-controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"aria-key-shortcuts-controller.js","names":["#host","#action","#getValue","#container","#connect","#disconnect","#unsubscribe"],"sources":["../../../../src/ui/hotkey/aria-key-shortcuts-controller.ts"],"sourcesContent":["import { getHotkeyCoordinator, type HotkeyShortcutDetails } from '@videojs/core/dom';\nimport type { ReactiveController } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport type { ContainerContextConsumer } from '../../player/context';\nimport { containerContext } from '../../player/context';\nimport type { PlayerControllerHost } from '../../player/controller';\n\nexport interface AriaKeyShortcutsControllerOptions {\n value?: (() => number | undefined) | undefined;\n}\n\n/** Provides hotkey shortcut metadata for a given hotkey action name. */\nexport class AriaKeyShortcutsController implements ReactiveController {\n #host: PlayerControllerHost;\n #action: string;\n #getValue: (() => number | undefined) | undefined;\n #container: ContainerContextConsumer;\n #unsubscribe: (() => void) | null = null;\n\n /**\n * @param host - Host element whose nearest player container supplies hotkey registrations.\n * @param action - Registered hotkey action to look up.\n * @param options - Optional value resolver for value-dependent shortcuts.\n */\n constructor(host: PlayerControllerHost, action: string, options: AriaKeyShortcutsControllerOptions = {}) {\n this.#host = host;\n this.#action = action;\n this.#getValue = options.value;\n this.#container = new ContextConsumer(host, {\n context: containerContext,\n callback: (ctx) => this.#connect(ctx?.container),\n subscribe: true,\n });\n host.addController(this);\n }\n\n get value(): string | undefined {\n return this.aria;\n }\n\n get aria(): string | undefined {\n return this.details.aria;\n }\n\n get shortcut(): string | undefined {\n return this.details.shortcut;\n }\n\n get details(): HotkeyShortcutDetails {\n const container = this.#container.value?.container;\n if (!container) return {};\n\n return getHotkeyCoordinator(container).getShortcut(this.#action, this.#getValue?.());\n }\n\n hostConnected(): void {\n this.#connect(this.#container.value?.container);\n }\n\n hostDisconnected(): void {\n this.#disconnect();\n }\n\n #connect(container: HTMLElement | null | undefined): void {\n this.#disconnect();\n\n if (!container) return;\n\n const coordinator = getHotkeyCoordinator(container);\n const notify = () => {\n this.#host.requestUpdate();\n };\n\n this.#unsubscribe = coordinator.subscribeShortcutChanges(notify);\n notify();\n }\n\n #disconnect(): void {\n this.#unsubscribe?.();\n this.#unsubscribe = null;\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,6BAAb,MAAsE;CACpE;CACA;CACA;CACA;CACA,eAAoC;;;;;;CAOpC,YAAY,MAA4B,QAAgB,UAA6C,CAAC,GAAG;EACvG,KAAKA,QAAQ;EACb,KAAKC,UAAU;EACf,KAAKC,YAAY,QAAQ;EACzB,KAAKC,aAAa,IAAI,gBAAgB,MAAM;GAC1C,SAAS;GACT,WAAW,QAAQ,KAAKC,SAAS,KAAK,SAAS;GAC/C,WAAW;EACb,CAAC;EACD,KAAK,cAAc,IAAI;CACzB;CAEA,IAAI,QAA4B;EAC9B,OAAO,KAAK;CACd;CAEA,IAAI,OAA2B;EAC7B,OAAO,KAAK,QAAQ;CACtB;CAEA,IAAI,WAA+B;EACjC,OAAO,KAAK,QAAQ;CACtB;CAEA,IAAI,UAAiC;EACnC,MAAM,YAAY,KAAKD,WAAW,OAAO;EACzC,IAAI,CAAC,WAAW,OAAO,CAAC;EAExB,OAAO,qBAAqB,SAAS,CAAC,CAAC,YAAY,KAAKF,SAAS,KAAKC,YAAY,CAAC;CACrF;CAEA,gBAAsB;EACpB,KAAKE,SAAS,KAAKD,WAAW,OAAO,SAAS;CAChD;CAEA,mBAAyB;EACvB,KAAKE,YAAY;CACnB;CAEA,SAAS,WAAiD;EACxD,KAAKA,YAAY;EAEjB,IAAI,CAAC,WAAW;EAEhB,MAAM,cAAc,qBAAqB,SAAS;EAClD,MAAM,eAAe;GACnB,KAAKL,MAAM,cAAc;EAC3B;EAEA,KAAKM,eAAe,YAAY,yBAAyB,MAAM;EAC/D,OAAO;CACT;CAEA,cAAoB;EAClB,KAAKA,eAAe;EACpB,KAAKA,eAAe;CACtB;AACF"}
1
+ {"version":3,"file":"aria-key-shortcuts-controller.js","names":[],"sources":["../../../../src/ui/hotkey/aria-key-shortcuts-controller.ts"],"sourcesContent":["import { getHotkeyCoordinator, type HotkeyShortcutDetails } from '@videojs/core/dom';\nimport type { ReactiveController } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport type { ContainerContextConsumer } from '../../player/context';\nimport { containerContext } from '../../player/context';\nimport type { PlayerControllerHost } from '../../player/controller';\n\nexport interface AriaKeyShortcutsControllerOptions {\n value?: (() => number | undefined) | undefined;\n}\n\n/** Provides hotkey shortcut metadata for a given hotkey action name. */\nexport class AriaKeyShortcutsController implements ReactiveController {\n #host: PlayerControllerHost;\n #action: string;\n #getValue: (() => number | undefined) | undefined;\n #container: ContainerContextConsumer;\n #unsubscribe: (() => void) | null = null;\n\n /**\n * @param host - Host element whose nearest player container supplies hotkey registrations.\n * @param action - Registered hotkey action to look up.\n * @param options - Optional value resolver for value-dependent shortcuts.\n */\n constructor(host: PlayerControllerHost, action: string, options: AriaKeyShortcutsControllerOptions = {}) {\n this.#host = host;\n this.#action = action;\n this.#getValue = options.value;\n this.#container = new ContextConsumer(host, {\n context: containerContext,\n callback: (ctx) => this.#connect(ctx?.container),\n subscribe: true,\n });\n host.addController(this);\n }\n\n get value(): string | undefined {\n return this.aria;\n }\n\n get aria(): string | undefined {\n return this.details.aria;\n }\n\n get shortcut(): string | undefined {\n return this.details.shortcut;\n }\n\n get details(): HotkeyShortcutDetails {\n const container = this.#container.value?.container;\n if (!container) return {};\n\n return getHotkeyCoordinator(container).getShortcut(this.#action, this.#getValue?.());\n }\n\n hostConnected(): void {\n this.#connect(this.#container.value?.container);\n }\n\n hostDisconnected(): void {\n this.#disconnect();\n }\n\n #connect(container: HTMLElement | null | undefined): void {\n this.#disconnect();\n\n if (!container) return;\n\n const coordinator = getHotkeyCoordinator(container);\n const notify = () => {\n this.#host.requestUpdate();\n };\n\n this.#unsubscribe = coordinator.subscribeShortcutChanges(notify);\n notify();\n }\n\n #disconnect(): void {\n this.#unsubscribe?.();\n this.#unsubscribe = null;\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,6BAAb,MAAsE;CACpE;CACA;CACA;CACA;CACA,eAAoC;;;;;;CAOpC,YAAY,MAA4B,QAAgB,UAA6C,CAAC,GAAG;EACvG,KAAK,QAAQ;EACb,KAAK,UAAU;EACf,KAAK,YAAY,QAAQ;EACzB,KAAK,aAAa,IAAI,gBAAgB,MAAM;GAC1C,SAAS;GACT,WAAW,QAAQ,KAAK,SAAS,KAAK,SAAS;GAC/C,WAAW;EACb,CAAC;EACD,KAAK,cAAc,IAAI;CACzB;CAEA,IAAI,QAA4B;EAC9B,OAAO,KAAK;CACd;CAEA,IAAI,OAA2B;EAC7B,OAAO,KAAK,QAAQ;CACtB;CAEA,IAAI,WAA+B;EACjC,OAAO,KAAK,QAAQ;CACtB;CAEA,IAAI,UAAiC;EACnC,MAAM,YAAY,KAAK,WAAW,OAAO;EACzC,IAAI,CAAC,WAAW,OAAO,CAAC;EAExB,OAAO,qBAAqB,SAAS,CAAC,CAAC,YAAY,KAAK,SAAS,KAAK,YAAY,CAAC;CACrF;CAEA,gBAAsB;EACpB,KAAK,SAAS,KAAK,WAAW,OAAO,SAAS;CAChD;CAEA,mBAAyB;EACvB,KAAK,YAAY;CACnB;CAEA,SAAS,WAAiD;EACxD,KAAK,YAAY;EAEjB,IAAI,CAAC,WAAW;EAEhB,MAAM,cAAc,qBAAqB,SAAS;EAClD,MAAM,eAAe;GACnB,KAAK,MAAM,cAAc;EAC3B;EAEA,KAAK,eAAe,YAAY,yBAAyB,MAAM;EAC/D,OAAO;CACT;CAEA,cAAoB;EAClB,KAAK,eAAe;EACpB,KAAK,eAAe;CACtB;AACF"}
@@ -2,7 +2,7 @@ import { UIElement } from "../ui-element.js";
2
2
  import { HotkeyProps } from "@videojs/core";
3
3
  import { PropertyDeclarationMap, PropertyValues } from "@videojs/element";
4
4
  //#region src/ui/hotkey/element.d.ts
5
- declare class HotkeyElement extends UIElement {
5
+ export declare class HotkeyElement extends UIElement {
6
6
  #private;
7
7
  static readonly tagName = "media-hotkey";
8
8
  static properties: PropertyDeclarationMap;
@@ -16,5 +16,4 @@ declare class HotkeyElement extends UIElement {
16
16
  protected update(changed: PropertyValues): void;
17
17
  }
18
18
  //#endregion
19
- export { HotkeyElement };
20
19
  //# sourceMappingURL=element.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["#player","#container","#register","#unregister","#cleanup"],"sources":["../../../../src/ui/hotkey/element.ts"],"sourcesContent":["import type { HotkeyProps } from '@videojs/core';\nimport { createHotkey, isHotkeyToggleAction, resolveHotkeyAction } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\nexport class HotkeyElement extends UIElement {\n static readonly tagName = 'media-hotkey';\n\n static override properties: PropertyDeclarationMap = {\n keys: { type: String },\n action: { type: String },\n value: { type: Number },\n disabled: { type: Boolean },\n target: { type: String },\n };\n\n keys: HotkeyProps['keys'] = '';\n action: HotkeyProps['action'] | '' = '';\n value: HotkeyProps['value'] = undefined;\n disabled: NonNullable<HotkeyProps['disabled']> = false;\n target: NonNullable<HotkeyProps['target']> = 'player';\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.keys || !this.action || !store || !container) return;\n\n const resolver = resolveHotkeyAction(this.action);\n if (!resolver) return;\n\n const { value, action } = this;\n\n this.#cleanup = createHotkey(container, {\n keys: this.keys,\n action,\n value,\n target: this.target,\n disabled: this.disabled,\n repeatable: !isHotkeyToggleAction(action),\n onActivate: (_event, key) => {\n resolver({ store, key, value });\n },\n });\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":";;;;;;AASA,IAAa,gBAAb,cAAmC,UAAU;;;EAWf,KAAA,OAAA;EACS,KAAA,SAAA;EACP,KAAA,QAAA,KAAA;EACmB,KAAA,WAAA;EACJ,KAAA,SAAA;EAE1B,KAAA,UAAA,IAAI,iBAAiB,MAAM,aAAa;EACrC,KAAA,aAAA,IAAI,gBAAgB,MAAM;GAC9C,SAAS;GACT,gBAAgB,KAAK,cAAc;GACnC,WAAW;EACb,CAAC;EAC+B,KAAA,WAAA;;;EAtBN,KAAA,UAAA;;;EAE2B,KAAA,aAAA;GACnD,MAAM,EAAE,MAAM,OAAO;GACrB,QAAQ,EAAE,MAAM,OAAO;GACvB,OAAO,EAAE,MAAM,OAAO;GACtB,UAAU,EAAE,MAAM,QAAQ;GAC1B,QAAQ,EAAE,MAAM,OAAO;EACzB;;CAQA;CACA;CAKA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,KAAK,MAAM,UAAU;EACrB,KAAKE,UAAU;CACjB;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAKC,YAAY;CACnB;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAGpB,IAAI,KAAK,aAAa;GACpB,KAAKA,YAAY;GACjB,KAAKD,UAAU;EACjB;CACF;CAEA,YAAkB;EAChB,MAAM,QAAQ,KAAKF,QAAQ;EAC3B,MAAM,YAAY,KAAKC,WAAW,OAAO;EACzC,IAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,UAAU,CAAC,SAAS,CAAC,WAAW;EAExD,MAAM,WAAW,oBAAoB,KAAK,MAAM;EAChD,IAAI,CAAC,UAAU;EAEf,MAAM,EAAE,OAAO,WAAW;EAE1B,KAAKG,WAAW,aAAa,WAAW;GACtC,MAAM,KAAK;GACX;GACA;GACA,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,YAAY,CAAC,qBAAqB,MAAM;GACxC,aAAa,QAAQ,QAAQ;IAC3B,SAAS;KAAE;KAAO;KAAK;IAAM,CAAC;GAChC;EACF,CAAC;CACH;CAEA,cAAoB;EAClB,KAAKA,WAAW;EAChB,KAAKA,WAAW;CAClB;AACF"}
1
+ {"version":3,"file":"element.js","names":[],"sources":["../../../../src/ui/hotkey/element.ts"],"sourcesContent":["import type { HotkeyProps } from '@videojs/core';\nimport { createHotkey, isHotkeyToggleAction, resolveHotkeyAction } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\nexport class HotkeyElement extends UIElement {\n static readonly tagName = 'media-hotkey';\n\n static override properties: PropertyDeclarationMap = {\n keys: { type: String },\n action: { type: String },\n value: { type: Number },\n disabled: { type: Boolean },\n target: { type: String },\n };\n\n keys: HotkeyProps['keys'] = '';\n action: HotkeyProps['action'] | '' = '';\n value: HotkeyProps['value'] = undefined;\n disabled: NonNullable<HotkeyProps['disabled']> = false;\n target: NonNullable<HotkeyProps['target']> = 'player';\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.keys || !this.action || !store || !container) return;\n\n const resolver = resolveHotkeyAction(this.action);\n if (!resolver) return;\n\n const { value, action } = this;\n\n this.#cleanup = createHotkey(container, {\n keys: this.keys,\n action,\n value,\n target: this.target,\n disabled: this.disabled,\n repeatable: !isHotkeyToggleAction(action),\n onActivate: (_event, key) => {\n resolver({ store, key, value });\n },\n });\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":";;;;;;AASA,IAAa,gBAAb,cAAmC,UAAU;;;EAWf,KAAA,OAAA;EACS,KAAA,SAAA;EACP,KAAA,QAAA,KAAA;EACmB,KAAA,WAAA;EACJ,KAAA,SAAA;EAE1B,KAAA,UAAA,IAAI,iBAAiB,MAAM,aAAa;EACrC,KAAA,aAAA,IAAI,gBAAgB,MAAM;GAC9C,SAAS;GACT,gBAAgB,KAAK,cAAc;GACnC,WAAW;EACb,CAAC;EAC+B,KAAA,WAAA;;;EAtBN,KAAA,UAAA;;;EAE2B,KAAA,aAAA;GACnD,MAAM,EAAE,MAAM,OAAO;GACrB,QAAQ,EAAE,MAAM,OAAO;GACvB,OAAO,EAAE,MAAM,OAAO;GACtB,UAAU,EAAE,MAAM,QAAQ;GAC1B,QAAQ,EAAE,MAAM,OAAO;EACzB;;CAQA;CACA;CAKA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,KAAK,MAAM,UAAU;EACrB,KAAK,UAAU;CACjB;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAK,YAAY;CACnB;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAGpB,IAAI,KAAK,aAAa;GACpB,KAAK,YAAY;GACjB,KAAK,UAAU;EACjB;CACF;CAEA,YAAkB;EAChB,MAAM,QAAQ,KAAK,QAAQ;EAC3B,MAAM,YAAY,KAAK,WAAW,OAAO;EACzC,IAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,UAAU,CAAC,SAAS,CAAC,WAAW;EAExD,MAAM,WAAW,oBAAoB,KAAK,MAAM;EAChD,IAAI,CAAC,UAAU;EAEf,MAAM,EAAE,OAAO,WAAW;EAE1B,KAAK,WAAW,aAAa,WAAW;GACtC,MAAM,KAAK;GACX;GACA;GACA,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,YAAY,CAAC,qBAAqB,MAAM;GACxC,aAAa,QAAQ,QAAQ;IAC3B,SAAS;KAAE;KAAO;KAAK;IAAM,CAAC;GAChC;EACF,CAAC;CACH;CAEA,cAAoB;EAClB,KAAK,WAAW;EAChB,KAAK,WAAW;CAClB;AACF"}
@@ -10,23 +10,25 @@ import { State } from "@videojs/store";
10
10
  import { ContextConsumer } from "@videojs/element/context";
11
11
  //#region src/ui/input-indicator/element.d.ts
12
12
  /** Shared imperative API for status / volume / seek indicator cores. */
13
- interface InputIndicatorCoreApi<IndicatorState extends IndicatorLifecycleState> {
13
+ export interface InputIndicatorCoreApi<IndicatorState extends IndicatorLifecycleState> {
14
14
  readonly state: State<IndicatorState>;
15
15
  destroy(): void;
16
16
  close(): void;
17
17
  processEvent(event: InputActionEvent, snapshot: MediaSnapshot): boolean;
18
18
  }
19
- interface InputIndicatorOptions {
19
+ export interface InputIndicatorOptions {
20
20
  replayOnUpdate?: boolean | undefined;
21
21
  }
22
- declare abstract class InputIndicatorElement<IndicatorState extends IndicatorLifecycleState> extends UIElement {
22
+ export declare abstract class InputIndicatorElement<IndicatorState extends IndicatorLifecycleState> extends UIElement {
23
23
  #private;
24
24
  protected abstract get core(): InputIndicatorCoreApi<IndicatorState>;
25
+ /** @internal */
25
26
  protected abstract get transition(): TransitionApi;
26
27
  protected abstract get liveIndicator(): LiveIndicator<IndicatorState>;
27
28
  protected get options(): InputIndicatorOptions;
28
29
  protected abstract syncCoreProps(): void;
29
30
  protected readonly player: PlayerController<index_d_exports.AnyPlayerStore, index_d_exports.AnyPlayerStore>;
31
+ /** @internal */
30
32
  protected readonly container: ContextConsumer<import("@lit/context").Context<typeof CONTAINER_CONTEXT_KEY, ContainerContextValue>, this>;
31
33
  connectedCallback(): void;
32
34
  disconnectedCallback(): void;
@@ -35,5 +37,4 @@ declare abstract class InputIndicatorElement<IndicatorState extends IndicatorLif
35
37
  protected update(changed: PropertyValues): void;
36
38
  }
37
39
  //#endregion
38
- export { InputIndicatorCoreApi, InputIndicatorElement, InputIndicatorOptions };
39
40
  //# sourceMappingURL=element.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["#reconnect","#visibilityHandle","#snapshot","#disconnect","#inputActionUnsubscribe","#visibilityUnsubscribe","#syncTransition","#payloadSnapshot","#lastGeneration","#getVisibilityHandle"],"sources":["../../../../src/ui/input-indicator/element.ts"],"sourcesContent":["import {\n getRenderedIndicatorState,\n type IndicatorLifecycleState,\n type IndicatorVisibilityHandle,\n type InputActionEvent,\n isIndicatorPresent,\n type MediaSnapshot,\n} from '@videojs/core';\nimport {\n getIndicatorVisibilityCoordinator,\n getMediaSnapshot,\n subscribeToInputActions,\n type TransitionApi,\n} from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport type { State as StoreState } from '@videojs/store';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\nimport type { LiveIndicator } from './live-indicator';\n\n/** Shared imperative API for status / volume / seek indicator cores. */\nexport interface InputIndicatorCoreApi<IndicatorState extends IndicatorLifecycleState> {\n readonly state: StoreState<IndicatorState>;\n destroy(): void;\n close(): void;\n processEvent(event: InputActionEvent, snapshot: MediaSnapshot): boolean;\n}\n\nexport interface InputIndicatorOptions {\n replayOnUpdate?: boolean | undefined;\n}\n\nexport abstract class InputIndicatorElement<IndicatorState extends IndicatorLifecycleState> extends UIElement {\n protected abstract get core(): InputIndicatorCoreApi<IndicatorState>;\n protected abstract get transition(): TransitionApi;\n protected abstract get liveIndicator(): LiveIndicator<IndicatorState>;\n protected get options(): InputIndicatorOptions {\n return {};\n }\n\n protected abstract syncCoreProps(): void;\n\n protected readonly player = new PlayerController(this, playerContext);\n protected readonly container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.#reconnect(),\n subscribe: true,\n });\n\n #disconnect: AbortController | null = null;\n #inputActionUnsubscribe: (() => void) | null = null;\n #visibilityUnsubscribe: (() => void) | null = null;\n #visibilityHandle: IndicatorVisibilityHandle | null = null;\n #lastGeneration = 0;\n #snapshot: IndicatorState | null = null;\n\n #getVisibilityHandle(): IndicatorVisibilityHandle {\n return (this.#visibilityHandle ??= { close: () => this.core.close() });\n }\n\n #payloadSnapshot(): IndicatorState {\n return this.#snapshot ?? this.core.state.current;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#snapshot = this.core.state.current;\n\n this.#disconnect = new AbortController();\n this.core.state.subscribe(() => this.requestUpdate(), { signal: this.#disconnect.signal });\n this.transition.state.subscribe(() => this.requestUpdate(), { signal: this.#disconnect.signal });\n this.hidden = true;\n this.#reconnect();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#inputActionUnsubscribe?.();\n this.#visibilityUnsubscribe?.();\n this.#inputActionUnsubscribe = null;\n this.#visibilityUnsubscribe = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#inputActionUnsubscribe?.();\n this.#visibilityUnsubscribe?.();\n this.core.destroy();\n this.transition.destroy();\n this.liveIndicator.remove();\n super.destroyCallback();\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.syncCoreProps();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n this.#syncTransition();\n\n const currentState = this.core.state.current;\n const transitionState = this.transition.state.current;\n const present = isIndicatorPresent(currentState, transitionState);\n\n if (!present) {\n this.liveIndicator.remove();\n return;\n }\n\n const state = getRenderedIndicatorState(currentState, this.#payloadSnapshot(), transitionState);\n\n this.liveIndicator.render(state);\n }\n\n #syncTransition(): void {\n const currentState = this.core.state.current;\n\n if (currentState.open) {\n this.#snapshot = currentState;\n\n if (this.#lastGeneration !== currentState.generation) {\n this.#lastGeneration = currentState.generation;\n const transitionState = this.transition.state.current;\n\n if (!transitionState.active || this.options.replayOnUpdate !== false) {\n void this.transition.open(this.liveIndicator.element);\n } else if (transitionState.status === 'ending') {\n this.transition.cancel();\n }\n }\n\n return;\n }\n\n const { active, status } = this.transition.state.current;\n\n if (active && status !== 'ending') {\n void this.transition.close(this.liveIndicator.element);\n }\n }\n\n #reconnect(): void {\n // Context can resolve before this field assignment completes.\n if (!this.container) return;\n\n this.#inputActionUnsubscribe?.();\n this.#visibilityUnsubscribe?.();\n this.#inputActionUnsubscribe = null;\n this.#visibilityUnsubscribe = null;\n\n const container = this.container.value?.container;\n if (!container) return;\n\n const visibility = getIndicatorVisibilityCoordinator(container);\n const visibilityHandle = this.#getVisibilityHandle();\n\n this.#visibilityUnsubscribe = visibility.register(visibilityHandle);\n\n this.#inputActionUnsubscribe = subscribeToInputActions(container, (event) => {\n if (this.core.processEvent(event, getMediaSnapshot(this.player.value))) {\n visibility.show(visibilityHandle);\n }\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"element.js","names":[],"sources":["../../../../src/ui/input-indicator/element.ts"],"sourcesContent":["import {\n getRenderedIndicatorState,\n type IndicatorLifecycleState,\n type IndicatorVisibilityHandle,\n type InputActionEvent,\n isIndicatorPresent,\n type MediaSnapshot,\n} from '@videojs/core';\nimport {\n getIndicatorVisibilityCoordinator,\n getMediaSnapshot,\n subscribeToInputActions,\n type TransitionApi,\n} from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport type { State as StoreState } from '@videojs/store';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\nimport type { LiveIndicator } from './live-indicator';\n\n/** Shared imperative API for status / volume / seek indicator cores. */\nexport interface InputIndicatorCoreApi<IndicatorState extends IndicatorLifecycleState> {\n readonly state: StoreState<IndicatorState>;\n destroy(): void;\n close(): void;\n processEvent(event: InputActionEvent, snapshot: MediaSnapshot): boolean;\n}\n\nexport interface InputIndicatorOptions {\n replayOnUpdate?: boolean | undefined;\n}\n\nexport abstract class InputIndicatorElement<IndicatorState extends IndicatorLifecycleState> extends UIElement {\n protected abstract get core(): InputIndicatorCoreApi<IndicatorState>;\n /** @internal */\n protected abstract get transition(): TransitionApi;\n protected abstract get liveIndicator(): LiveIndicator<IndicatorState>;\n protected get options(): InputIndicatorOptions {\n return {};\n }\n\n protected abstract syncCoreProps(): void;\n\n protected readonly player = new PlayerController(this, playerContext);\n /** @internal */\n protected readonly container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.#reconnect(),\n subscribe: true,\n });\n\n #disconnect: AbortController | null = null;\n #inputActionUnsubscribe: (() => void) | null = null;\n #visibilityUnsubscribe: (() => void) | null = null;\n #visibilityHandle: IndicatorVisibilityHandle | null = null;\n #lastGeneration = 0;\n #snapshot: IndicatorState | null = null;\n\n #getVisibilityHandle(): IndicatorVisibilityHandle {\n return (this.#visibilityHandle ??= { close: () => this.core.close() });\n }\n\n #payloadSnapshot(): IndicatorState {\n return this.#snapshot ?? this.core.state.current;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#snapshot = this.core.state.current;\n\n this.#disconnect = new AbortController();\n this.core.state.subscribe(() => this.requestUpdate(), { signal: this.#disconnect.signal });\n this.transition.state.subscribe(() => this.requestUpdate(), { signal: this.#disconnect.signal });\n this.hidden = true;\n this.#reconnect();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#inputActionUnsubscribe?.();\n this.#visibilityUnsubscribe?.();\n this.#inputActionUnsubscribe = null;\n this.#visibilityUnsubscribe = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#inputActionUnsubscribe?.();\n this.#visibilityUnsubscribe?.();\n this.core.destroy();\n this.transition.destroy();\n this.liveIndicator.remove();\n super.destroyCallback();\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.syncCoreProps();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n this.#syncTransition();\n\n const currentState = this.core.state.current;\n const transitionState = this.transition.state.current;\n const present = isIndicatorPresent(currentState, transitionState);\n\n if (!present) {\n this.liveIndicator.remove();\n return;\n }\n\n const state = getRenderedIndicatorState(currentState, this.#payloadSnapshot(), transitionState);\n\n this.liveIndicator.render(state);\n }\n\n #syncTransition(): void {\n const currentState = this.core.state.current;\n\n if (currentState.open) {\n this.#snapshot = currentState;\n\n if (this.#lastGeneration !== currentState.generation) {\n this.#lastGeneration = currentState.generation;\n const transitionState = this.transition.state.current;\n\n if (!transitionState.active || this.options.replayOnUpdate !== false) {\n void this.transition.open(this.liveIndicator.element);\n } else if (transitionState.status === 'ending') {\n this.transition.cancel();\n }\n }\n\n return;\n }\n\n const { active, status } = this.transition.state.current;\n\n if (active && status !== 'ending') {\n void this.transition.close(this.liveIndicator.element);\n }\n }\n\n #reconnect(): void {\n // Context can resolve before this field assignment completes.\n if (!this.container) return;\n\n this.#inputActionUnsubscribe?.();\n this.#visibilityUnsubscribe?.();\n this.#inputActionUnsubscribe = null;\n this.#visibilityUnsubscribe = null;\n\n const container = this.container.value?.container;\n if (!container) return;\n\n const visibility = getIndicatorVisibilityCoordinator(container);\n const visibilityHandle = this.#getVisibilityHandle();\n\n this.#visibilityUnsubscribe = visibility.register(visibilityHandle);\n\n this.#inputActionUnsubscribe = subscribeToInputActions(container, (event) => {\n if (this.core.processEvent(event, getMediaSnapshot(this.player.value))) {\n visibility.show(visibilityHandle);\n }\n });\n }\n}\n"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { StateAttrMap } from "@videojs/core";
2
2
  //#region src/ui/input-indicator/live-indicator.d.ts
3
- interface LiveIndicatorOptions<State extends object> {
3
+ export interface LiveIndicatorOptions<State extends object> {
4
4
  host: HTMLElement;
5
5
  dataAttrs: StateAttrMap<State>;
6
6
  render: (element: HTMLElement, state: State) => void;
7
7
  }
8
- declare class LiveIndicator<State extends object> {
8
+ export declare class LiveIndicator<State extends object> {
9
9
  #private;
10
10
  constructor(options: LiveIndicatorOptions<State>);
11
11
  get element(): HTMLElement;
@@ -13,5 +13,4 @@ declare class LiveIndicator<State extends object> {
13
13
  remove(): void;
14
14
  }
15
15
  //#endregion
16
- export { LiveIndicator, LiveIndicatorOptions };
17
16
  //# sourceMappingURL=live-indicator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"live-indicator.js","names":["#host","#dataAttrs","#render"],"sources":["../../../../src/ui/input-indicator/live-indicator.ts"],"sourcesContent":["import type { StateAttrMap } from '@videojs/core';\nimport { applyStateDataAttrs } from '@videojs/core/dom';\n\nexport interface LiveIndicatorOptions<State extends object> {\n host: HTMLElement;\n dataAttrs: StateAttrMap<State>;\n render: (element: HTMLElement, state: State) => void;\n}\n\nexport class LiveIndicator<State extends object> {\n readonly #host: HTMLElement;\n readonly #dataAttrs: StateAttrMap<State>;\n readonly #render: (element: HTMLElement, state: State) => void;\n\n constructor(options: LiveIndicatorOptions<State>) {\n this.#host = options.host;\n this.#dataAttrs = options.dataAttrs;\n this.#render = options.render;\n }\n\n get element(): HTMLElement {\n return this.#host;\n }\n\n render(state: State): HTMLElement {\n this.#host.hidden = false;\n applyStateDataAttrs(this.#host, state, this.#dataAttrs);\n this.#render(this.#host, state);\n\n return this.#host;\n }\n\n remove(): void {\n this.#host.hidden = true;\n\n for (const key in this.#dataAttrs) {\n const name = this.#dataAttrs[key];\n\n if (name) this.#host.removeAttribute(name);\n }\n }\n}\n"],"mappings":";;AASA,IAAa,gBAAb,MAAiD;CAC/C;CACA;CACA;CAEA,YAAY,SAAsC;EAChD,KAAKA,QAAQ,QAAQ;EACrB,KAAKC,aAAa,QAAQ;EAC1B,KAAKC,UAAU,QAAQ;CACzB;CAEA,IAAI,UAAuB;EACzB,OAAO,KAAKF;CACd;CAEA,OAAO,OAA2B;EAChC,KAAKA,MAAM,SAAS;EACpB,oBAAoB,KAAKA,OAAO,OAAO,KAAKC,UAAU;EACtD,KAAKC,QAAQ,KAAKF,OAAO,KAAK;EAE9B,OAAO,KAAKA;CACd;CAEA,SAAe;EACb,KAAKA,MAAM,SAAS;EAEpB,KAAK,MAAM,OAAO,KAAKC,YAAY;GACjC,MAAM,OAAO,KAAKA,WAAW;GAE7B,IAAI,MAAM,KAAKD,MAAM,gBAAgB,IAAI;EAC3C;CACF;AACF"}
1
+ {"version":3,"file":"live-indicator.js","names":[],"sources":["../../../../src/ui/input-indicator/live-indicator.ts"],"sourcesContent":["import type { StateAttrMap } from '@videojs/core';\nimport { applyStateDataAttrs } from '@videojs/core/dom';\n\nexport interface LiveIndicatorOptions<State extends object> {\n host: HTMLElement;\n dataAttrs: StateAttrMap<State>;\n render: (element: HTMLElement, state: State) => void;\n}\n\nexport class LiveIndicator<State extends object> {\n readonly #host: HTMLElement;\n readonly #dataAttrs: StateAttrMap<State>;\n readonly #render: (element: HTMLElement, state: State) => void;\n\n constructor(options: LiveIndicatorOptions<State>) {\n this.#host = options.host;\n this.#dataAttrs = options.dataAttrs;\n this.#render = options.render;\n }\n\n get element(): HTMLElement {\n return this.#host;\n }\n\n render(state: State): HTMLElement {\n this.#host.hidden = false;\n applyStateDataAttrs(this.#host, state, this.#dataAttrs);\n this.#render(this.#host, state);\n\n return this.#host;\n }\n\n remove(): void {\n this.#host.hidden = true;\n\n for (const key in this.#dataAttrs) {\n const name = this.#dataAttrs[key];\n\n if (name) this.#host.removeAttribute(name);\n }\n }\n}\n"],"mappings":";;AASA,IAAa,gBAAb,MAAiD;CAC/C;CACA;CACA;CAEA,YAAY,SAAsC;EAChD,KAAK,QAAQ,QAAQ;EACrB,KAAK,aAAa,QAAQ;EAC1B,KAAK,UAAU,QAAQ;CACzB;CAEA,IAAI,UAAuB;EACzB,OAAO,KAAK;CACd;CAEA,OAAO,OAA2B;EAChC,KAAK,MAAM,SAAS;EACpB,oBAAoB,KAAK,OAAO,OAAO,KAAK,UAAU;EACtD,KAAK,QAAQ,KAAK,OAAO,KAAK;EAE9B,OAAO,KAAK;CACd;CAEA,SAAe;EACb,KAAK,MAAM,SAAS;EAEpB,KAAK,MAAM,OAAO,KAAK,YAAY;GACjC,MAAM,OAAO,KAAK,WAAW;GAE7B,IAAI,MAAM,KAAK,MAAM,gBAAgB,IAAI;EAC3C;CACF;AACF"}
@@ -1,7 +1,7 @@
1
1
  import { UIElement } from "../ui-element.js";
2
2
  import { PlayerController } from "../../player/controller.js";
3
3
  import { index_d_exports } from "../../index.js";
4
- import { LiveButtonCore } from "@videojs/core";
4
+ import { LiveButtonCore, LiveButtonState } from "@videojs/core";
5
5
  import { PropertyDeclarationMap, PropertyValues } from "@videojs/element";
6
6
  import { State } from "@videojs/store";
7
7
  import { Text } from "@videojs/core/i18n";
@@ -13,12 +13,13 @@ import { Text } from "@videojs/core/i18n";
13
13
  * Doesn't extend `MediaButtonElement` because that base couples a button to a single feature selector; the LiveButton
14
14
  * needs three.
15
15
  */
16
- declare class LiveButtonElement extends UIElement {
16
+ export declare class LiveButtonElement extends UIElement {
17
17
  #private;
18
18
  static readonly tagName = "media-live-button";
19
19
  static properties: PropertyDeclarationMap;
20
20
  disabled: boolean;
21
21
  label: Text | string;
22
+ /** @internal */
22
23
  protected readonly core: LiveButtonCore;
23
24
  protected readonly live: PlayerController<index_d_exports.AnyPlayerStore, {
24
25
  liveEdgeStart: number;
@@ -34,7 +35,7 @@ declare class LiveButtonElement extends UIElement {
34
35
  buffered: [number, number][];
35
36
  seekable: [number, number][];
36
37
  } | undefined>;
37
- get $state(): State<LiveButtonCore.State>;
38
+ get $state(): State<LiveButtonState>;
38
39
  connectedCallback(): void;
39
40
  disconnectedCallback(): void;
40
41
  /** Returns the button's current label derived from media state. */
@@ -45,5 +46,4 @@ declare class LiveButtonElement extends UIElement {
45
46
  protected update(changed: PropertyValues): void;
46
47
  }
47
48
  //#endregion
48
- export { LiveButtonElement };
49
49
  //# sourceMappingURL=element.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":["#i18n","#defaultContent","#disconnect","#getMedia"],"sources":["../../../../src/ui/live-button/element.ts"],"sourcesContent":["import { LiveButtonCore, LiveButtonDataAttrs, type LiveButtonMediaState } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createButton,\n logMissingFeature,\n selectBuffer,\n selectLive,\n selectTime,\n} from '@videojs/core/dom';\nimport { resolveText, type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { State } from '@videojs/store';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\n/**\n * `<media-live-button>` — selects from `live`, `time`, and `buffer` features and composes them into the\n * `LiveButtonMediaState` consumed by `LiveButtonCore`.\n *\n * Doesn't extend `MediaButtonElement` because that base couples a button to a single feature selector; the LiveButton\n * needs three.\n */\nexport class LiveButtonElement extends UIElement {\n static readonly tagName = 'media-live-button';\n\n static override properties: PropertyDeclarationMap = {\n label: { type: String },\n disabled: { type: Boolean },\n };\n\n disabled = false;\n label: Text | string = '';\n\n protected readonly core = new LiveButtonCore();\n\n protected readonly live = new PlayerController(this, playerContext, selectLive);\n protected readonly time = new PlayerController(this, playerContext, selectTime);\n protected readonly buffer = new PlayerController(this, playerContext, selectBuffer);\n readonly #i18n = new I18nController(this, i18nContext);\n\n get $state(): State<LiveButtonCore.State> {\n return this.core.state;\n }\n\n #defaultContent = false;\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#defaultContent ||= !this.textContent?.trim();\n\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: () => {\n const media = this.#getMedia();\n\n if (media) this.core.seekToLive(media);\n },\n isDisabled: () => this.disabled || !this.#getMedia(),\n });\n\n applyElementProps(this, buttonProps, { signal: this.#disconnect.signal });\n\n if (__DEV__ && !this.#getMedia()) {\n logMissingFeature(this.localName, this.live.displayName ?? 'live');\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n /** Returns the button's current label derived from media state. */\n getLabel(): string | undefined {\n return this.core.state.current.label ? resolveText(this.core.state.current.label) : undefined;\n }\n\n /** Resolved label for tooltips and other display surfaces. */\n getResolvedLabel(): string | undefined {\n const media = this.#getMedia();\n if (!media) return undefined;\n\n const state = this.core.getState();\n\n return translateText(this.core.getLabel(state), this.#i18n.value);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n const media = this.#getMedia();\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n const attrs = this.core.getAttrs(state);\n\n applyElementProps(this, {\n ...attrs,\n 'aria-label': translateText(attrs['aria-label'], this.#i18n.value),\n });\n applyStateDataAttrs(this, state, LiveButtonDataAttrs);\n }\n\n /**\n * Compose the LiveButton media state from the three feature slices. Returns `null` when any are missing so the button\n * stays disabled until all three features are registered on the player.\n */\n #getMedia(): LiveButtonMediaState | null {\n const live = this.live.value;\n const time = this.time.value;\n const buffer = this.buffer.value;\n if (!live || !time || !buffer) return null;\n\n return {\n currentTime: time.currentTime,\n seek: time.seek,\n seekable: buffer.seekable,\n liveEdgeStart: live.liveEdgeStart,\n targetLiveWindow: live.targetLiveWindow,\n };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA2BA,IAAa,oBAAb,cAAuC,UAAU;;;EAQpC,KAAA,WAAA;EACY,KAAA,QAAA;EAEG,KAAA,OAAA,IAAI,eAAe;EAEnB,KAAA,OAAA,IAAI,iBAAiB,MAAM,eAAe,UAAU;EACpD,KAAA,OAAA,IAAI,iBAAiB,MAAM,eAAe,UAAU;EAClD,KAAA,SAAA,IAAI,iBAAiB,MAAM,eAAe,YAAY;EACjE,KAAA,QAAA,IAAI,eAAe,MAAM,WAAW;EAMnC,KAAA,kBAAA;EACoB,KAAA,cAAA;;;EAtBZ,KAAA,UAAA;;;EAE2B,KAAA,aAAA;GACnD,OAAO,EAAE,MAAM,OAAO;GACtB,UAAU,EAAE,MAAM,QAAQ;EAC5B;;CAUA;CAEA,IAAI,SAAsC;EACxC,OAAO,KAAK,KAAK;CACnB;CAEA;CACA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EAExB,IAAI,KAAK,WAAW;EAEpB,KAAKC,oBAAoB,CAAC,KAAK,aAAa,KAAK;EAEjD,IAAI,KAAKA,iBACP,KAAK,cAAc,cAAc,eAAe,aAAa,KAAKD,MAAM,KAAK;EAG/E,KAAKE,cAAc,IAAI,gBAAgB;EAEvC,MAAM,cAAc,aAAa;GAC/B,kBAAkB;IAChB,MAAM,QAAQ,KAAKC,UAAU;IAE7B,IAAI,OAAO,KAAK,KAAK,WAAW,KAAK;GACvC;GACA,kBAAkB,KAAK,YAAY,CAAC,KAAKA,UAAU;EACrD,CAAC;EAED,kBAAkB,MAAM,aAAa,EAAE,QAAQ,KAAKD,YAAY,OAAO,CAAC;EAExE,IAAe,CAAC,KAAKC,UAAU,GAC7B,kBAAkB,KAAK,WAAW,KAAK,KAAK,eAAe,MAAM;CAErE;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAKD,aAAa,MAAM;EACxB,KAAKA,cAAc;CACrB;;CAGA,WAA+B;EAC7B,OAAO,KAAK,KAAK,MAAM,QAAQ,QAAQ,YAAY,KAAK,KAAK,MAAM,QAAQ,KAAK,IAAI,KAAA;CACtF;;CAGA,mBAAuC;EAErC,IAAI,CADU,KAAKC,UACV,GAAG,OAAO,KAAA;EAEnB,MAAM,QAAQ,KAAK,KAAK,SAAS;EAEjC,OAAO,cAAc,KAAK,KAAK,SAAS,KAAK,GAAG,KAAKH,MAAM,KAAK;CAClE;CAEA,WAA8B,SAA+B;EAC3D,MAAM,WAAW,OAAO;EACxB,KAAK,KAAK,SAAS,IAAI;CACzB;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAEpB,IAAI,KAAKC,iBACP,KAAK,cAAc,cAAc,eAAe,aAAa,KAAKD,MAAM,KAAK;EAG/E,MAAM,QAAQ,KAAKG,UAAU;EAC7B,IAAI,CAAC,OAAO;EAEZ,KAAK,KAAK,SAAS,KAAK;EACxB,MAAM,QAAQ,KAAK,KAAK,SAAS;EACjC,MAAM,QAAQ,KAAK,KAAK,SAAS,KAAK;EAEtC,kBAAkB,MAAM;GACtB,GAAG;GACH,cAAc,cAAc,MAAM,eAAe,KAAKH,MAAM,KAAK;EACnE,CAAC;EACD,oBAAoB,MAAM,OAAO,mBAAmB;CACtD;;;;;CAMA,YAAyC;EACvC,MAAM,OAAO,KAAK,KAAK;EACvB,MAAM,OAAO,KAAK,KAAK;EACvB,MAAM,SAAS,KAAK,OAAO;EAC3B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,OAAO;EAEtC,OAAO;GACL,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,UAAU,OAAO;GACjB,eAAe,KAAK;GACpB,kBAAkB,KAAK;EACzB;CACF;AACF"}
1
+ {"version":3,"file":"element.js","names":[],"sources":["../../../../src/ui/live-button/element.ts"],"sourcesContent":["import { LiveButtonCore, LiveButtonDataAttrs, type LiveButtonMediaState, type LiveButtonState } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createButton,\n logMissingFeature,\n selectBuffer,\n selectLive,\n selectTime,\n} from '@videojs/core/dom';\nimport { resolveText, type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { State } from '@videojs/store';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\n/**\n * `<media-live-button>` — selects from `live`, `time`, and `buffer` features and composes them into the\n * `LiveButtonMediaState` consumed by `LiveButtonCore`.\n *\n * Doesn't extend `MediaButtonElement` because that base couples a button to a single feature selector; the LiveButton\n * needs three.\n */\nexport class LiveButtonElement extends UIElement {\n static readonly tagName = 'media-live-button';\n\n static override properties: PropertyDeclarationMap = {\n label: { type: String },\n disabled: { type: Boolean },\n };\n\n disabled = false;\n label: Text | string = '';\n\n /** @internal */\n protected readonly core = new LiveButtonCore();\n\n protected readonly live = new PlayerController(this, playerContext, selectLive);\n protected readonly time = new PlayerController(this, playerContext, selectTime);\n protected readonly buffer = new PlayerController(this, playerContext, selectBuffer);\n readonly #i18n = new I18nController(this, i18nContext);\n\n get $state(): State<LiveButtonState> {\n return this.core.state;\n }\n\n #defaultContent = false;\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#defaultContent ||= !this.textContent?.trim();\n\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: () => {\n const media = this.#getMedia();\n\n if (media) this.core.seekToLive(media);\n },\n isDisabled: () => this.disabled || !this.#getMedia(),\n });\n\n applyElementProps(this, buttonProps, { signal: this.#disconnect.signal });\n\n if (__DEV__ && !this.#getMedia()) {\n logMissingFeature(this.localName, this.live.displayName ?? 'live');\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n /** Returns the button's current label derived from media state. */\n getLabel(): string | undefined {\n return this.core.state.current.label ? resolveText(this.core.state.current.label) : undefined;\n }\n\n /** Resolved label for tooltips and other display surfaces. */\n getResolvedLabel(): string | undefined {\n const media = this.#getMedia();\n if (!media) return undefined;\n\n const state = this.core.getState();\n\n return translateText(this.core.getLabel(state), this.#i18n.value);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n const media = this.#getMedia();\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n const attrs = this.core.getAttrs(state);\n\n applyElementProps(this, {\n ...attrs,\n 'aria-label': translateText(attrs['aria-label'], this.#i18n.value),\n });\n applyStateDataAttrs(this, state, LiveButtonDataAttrs);\n }\n\n /**\n * Compose the LiveButton media state from the three feature slices. Returns `null` when any are missing so the button\n * stays disabled until all three features are registered on the player.\n */\n #getMedia(): LiveButtonMediaState | null {\n const live = this.live.value;\n const time = this.time.value;\n const buffer = this.buffer.value;\n if (!live || !time || !buffer) return null;\n\n return {\n currentTime: time.currentTime,\n seek: time.seek,\n seekable: buffer.seekable,\n liveEdgeStart: live.liveEdgeStart,\n targetLiveWindow: live.targetLiveWindow,\n };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA2BA,IAAa,oBAAb,cAAuC,UAAU;;;EAQpC,KAAA,WAAA;EACY,KAAA,QAAA;EAGG,KAAA,OAAA,IAAI,eAAe;EAEnB,KAAA,OAAA,IAAI,iBAAiB,MAAM,eAAe,UAAU;EACpD,KAAA,OAAA,IAAI,iBAAiB,MAAM,eAAe,UAAU;EAClD,KAAA,SAAA,IAAI,iBAAiB,MAAM,eAAe,YAAY;EACjE,KAAA,QAAA,IAAI,eAAe,MAAM,WAAW;EAMnC,KAAA,kBAAA;EACoB,KAAA,cAAA;;;EAvBZ,KAAA,UAAA;;;EAE2B,KAAA,aAAA;GACnD,OAAO,EAAE,MAAM,OAAO;GACtB,UAAU,EAAE,MAAM,QAAQ;EAC5B;;CAWA;CAEA,IAAI,SAAiC;EACnC,OAAO,KAAK,KAAK;CACnB;CAEA;CACA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EAExB,IAAI,KAAK,WAAW;EAEpB,KAAK,oBAAoB,CAAC,KAAK,aAAa,KAAK;EAEjD,IAAI,KAAK,iBACP,KAAK,cAAc,cAAc,eAAe,aAAa,KAAK,MAAM,KAAK;EAG/E,KAAK,cAAc,IAAI,gBAAgB;EAEvC,MAAM,cAAc,aAAa;GAC/B,kBAAkB;IAChB,MAAM,QAAQ,KAAK,UAAU;IAE7B,IAAI,OAAO,KAAK,KAAK,WAAW,KAAK;GACvC;GACA,kBAAkB,KAAK,YAAY,CAAC,KAAK,UAAU;EACrD,CAAC;EAED,kBAAkB,MAAM,aAAa,EAAE,QAAQ,KAAK,YAAY,OAAO,CAAC;EAExE,IAAe,CAAC,KAAK,UAAU,GAC7B,kBAAkB,KAAK,WAAW,KAAK,KAAK,eAAe,MAAM;CAErE;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAK,aAAa,MAAM;EACxB,KAAK,cAAc;CACrB;;CAGA,WAA+B;EAC7B,OAAO,KAAK,KAAK,MAAM,QAAQ,QAAQ,YAAY,KAAK,KAAK,MAAM,QAAQ,KAAK,IAAI,KAAA;CACtF;;CAGA,mBAAuC;EAErC,IAAI,CADU,KAAK,UACV,GAAG,OAAO,KAAA;EAEnB,MAAM,QAAQ,KAAK,KAAK,SAAS;EAEjC,OAAO,cAAc,KAAK,KAAK,SAAS,KAAK,GAAG,KAAK,MAAM,KAAK;CAClE;CAEA,WAA8B,SAA+B;EAC3D,MAAM,WAAW,OAAO;EACxB,KAAK,KAAK,SAAS,IAAI;CACzB;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAEpB,IAAI,KAAK,iBACP,KAAK,cAAc,cAAc,eAAe,aAAa,KAAK,MAAM,KAAK;EAG/E,MAAM,QAAQ,KAAK,UAAU;EAC7B,IAAI,CAAC,OAAO;EAEZ,KAAK,KAAK,SAAS,KAAK;EACxB,MAAM,QAAQ,KAAK,KAAK,SAAS;EACjC,MAAM,QAAQ,KAAK,KAAK,SAAS,KAAK;EAEtC,kBAAkB,MAAM;GACtB,GAAG;GACH,cAAc,cAAc,MAAM,eAAe,KAAK,MAAM,KAAK;EACnE,CAAC;EACD,oBAAoB,MAAM,OAAO,mBAAmB;CACtD;;;;;CAMA,YAAyC;EACvC,MAAM,OAAO,KAAK,KAAK;EACvB,MAAM,OAAO,KAAK,KAAK;EACvB,MAAM,SAAS,KAAK,OAAO;EAC3B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,OAAO;EAEtC,OAAO;GACL,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,UAAU,OAAO;GACjB,eAAe,KAAK;GACpB,kBAAkB,KAAK;EACzB;CACF;AACF"}
@@ -1,21 +1,31 @@
1
1
  import { UIElement } from "./ui-element.js";
2
2
  import { PlayerController } from "../player/controller.js";
3
- import { ButtonState, InferComponentState, InferMediaState, MediaButtonComponent, StateAttrMap } from "@videojs/core";
3
+ import { ButtonState, MediaButtonComponent, StateAttrMap } from "@videojs/core";
4
4
  import { ButtonActivationSource, UIEvent } from "@videojs/core/dom";
5
5
  import { PropertyDeclarationMap, PropertyValues } from "@videojs/element";
6
6
  import { State } from "@videojs/store";
7
7
  import { Text } from "@videojs/core/i18n";
8
8
  //#region src/ui/media-button-element.d.ts
9
- /** Abstract base for HTML custom elements that render a media-control button. */
10
- declare abstract class MediaButtonElement<Core extends MediaButtonComponent> extends UIElement {
9
+ type LabelParams = Record<string, string | number>;
10
+ /** The core a media button element drives: it reads `MediaState` and computes `ComponentState`. */
11
+ type MediaButtonCore<ComponentState extends ButtonState, MediaState> = MediaButtonComponent<object, ComponentState> & {
12
+ setMedia(media: MediaState): void;
13
+ getLabelParams?: (state: ComponentState) => LabelParams | undefined;
14
+ };
15
+ /**
16
+ * Abstract base for HTML custom elements that render a media-control button. `ComponentState` is the state the button
17
+ * reflects to data attributes, and `MediaState` is the player state it reads and acts on. Pass both: a subclass that
18
+ * omits them still compiles, but types `activate(state)` and `mediaState` as the `ButtonState` and `object` defaults.
19
+ */
20
+ export declare abstract class MediaButtonElement<ComponentState extends ButtonState = ButtonState, MediaState extends object = object> extends UIElement {
11
21
  #private;
12
22
  static properties: PropertyDeclarationMap;
13
23
  disabled: boolean;
14
24
  label: Text | string;
15
- protected abstract readonly core: Core;
16
- protected abstract readonly stateAttrMap: StateAttrMap<InferComponentState<Core>>;
17
- protected abstract readonly mediaState: PlayerController<any, InferMediaState<Core> | undefined>;
18
- protected abstract activate(state: InferMediaState<Core>, event: UIEvent, source: ButtonActivationSource): void | Promise<void>;
25
+ protected abstract readonly core: MediaButtonCore<ComponentState, MediaState>;
26
+ protected abstract readonly stateAttrMap: StateAttrMap<ComponentState>;
27
+ protected abstract readonly mediaState: PlayerController<any, MediaState | undefined>;
28
+ protected abstract activate(state: MediaState, event: UIEvent, source: ButtonActivationSource): void | Promise<void>;
19
29
  protected getIsButtonDisabled(): boolean;
20
30
  protected handleActivate(event: UIEvent, source: ButtonActivationSource): void;
21
31
  /** Override to set the hotkey action name for `aria-keyshortcuts`. */
@@ -34,5 +44,4 @@ declare abstract class MediaButtonElement<Core extends MediaButtonComponent> ext
34
44
  protected update(changed: PropertyValues): void;
35
45
  }
36
46
  //#endregion
37
- export { MediaButtonElement };
38
47
  //# sourceMappingURL=media-button-element.d.ts.map
@@ -6,10 +6,11 @@ import { HOTKEY_SHORTCUT_CHANGE_EVENT, applyElementProps, applyStateDataAttrs, c
6
6
  import { isText, resolveText, translateText } from "@videojs/core/i18n";
7
7
  import { isBoolean, isObject } from "@videojs/utils/predicate";
8
8
  //#region src/ui/media-button-element.ts
9
- function getLabelParams(core, state) {
10
- return core.getLabelParams?.(state);
11
- }
12
- /** Abstract base for HTML custom elements that render a media-control button. */
9
+ /**
10
+ * Abstract base for HTML custom elements that render a media-control button. `ComponentState` is the state the button
11
+ * reflects to data attributes, and `MediaState` is the player state it reads and acts on. Pass both: a subclass that
12
+ * omits them still compiles, but types `activate(state)` and `mediaState` as the `ButtonState` and `object` defaults.
13
+ */
13
14
  var MediaButtonElement = class extends UIElement {
14
15
  constructor(..._args) {
15
16
  super(..._args);
@@ -73,7 +74,7 @@ var MediaButtonElement = class extends UIElement {
73
74
  if (!media) return void 0;
74
75
  this.core.setMedia(media);
75
76
  const state = this.core.getState();
76
- return translateText(this.core.getLabel(state), this.#i18n.value, getLabelParams(this.core, state));
77
+ return translateText(this.core.getLabel(state), this.#i18n.value, this.core.getLabelParams?.(state));
77
78
  }
78
79
  willUpdate(changed) {
79
80
  super.willUpdate(changed);
@@ -87,7 +88,7 @@ var MediaButtonElement = class extends UIElement {
87
88
  this.core.setMedia(media);
88
89
  const state = this.core.getState();
89
90
  const attrs = this.core.getAttrs?.(state) ?? {};
90
- if (isText(attrs["aria-label"])) attrs["aria-label"] = translateText(attrs["aria-label"], this.#i18n.value, getLabelParams(this.core, state));
91
+ if (isText(attrs["aria-label"])) attrs["aria-label"] = translateText(attrs["aria-label"], this.#i18n.value, this.core.getLabelParams?.(state));
91
92
  applyElementProps(this, {
92
93
  ...attrs,
93
94
  "aria-keyshortcuts": this.#hotkeyRegistry?.aria,
@@ -1 +1 @@
1
- {"version":3,"file":"media-button-element.js","names":["#i18n","#hotkeyRegistry","#disconnect","#syncHotkeyShortcut","#lastHotkeyShortcut"],"sources":["../../../src/ui/media-button-element.ts"],"sourcesContent":["import type {\n ButtonState,\n InferComponentState,\n InferMediaState,\n MediaButtonComponent,\n StateAttrMap,\n} from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n type ButtonActivationSource,\n createButton,\n HOTKEY_SHORTCUT_CHANGE_EVENT,\n logMissingFeature,\n type UIEvent,\n} from '@videojs/core/dom';\nimport { isText, resolveText, type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { State } from '@videojs/store';\nimport { isBoolean, isObject } from '@videojs/utils/predicate';\n\nimport { i18nContext } from '../i18n/context';\nimport { I18nController } from '../i18n/controller';\nimport type { PlayerController } from '../player/controller';\nimport { AriaKeyShortcutsController } from './hotkey/aria-key-shortcuts-controller';\nimport { UIElement } from './ui-element';\n\ntype LabelParams = Record<string, string | number>;\ntype LabelParamsCore<Core extends MediaButtonComponent> = Core & {\n getLabelParams?: (state: InferComponentState<Core>) => LabelParams | undefined;\n};\n\nfunction getLabelParams<Core extends MediaButtonComponent>(\n core: Core,\n state: InferComponentState<Core>\n): LabelParams | undefined {\n return (core as LabelParamsCore<Core>).getLabelParams?.(state);\n}\n\n/** Abstract base for HTML custom elements that render a media-control button. */\nexport abstract class MediaButtonElement<Core extends MediaButtonComponent> extends UIElement {\n static override properties: PropertyDeclarationMap = {\n label: { type: String },\n disabled: { type: Boolean },\n };\n\n disabled = false;\n label: Text | string = '';\n\n protected abstract readonly core: Core;\n protected abstract readonly stateAttrMap: StateAttrMap<InferComponentState<Core>>;\n protected abstract readonly mediaState: PlayerController<any, InferMediaState<Core> | undefined>;\n\n protected abstract activate(\n state: InferMediaState<Core>,\n event: UIEvent,\n source: ButtonActivationSource\n ): void | Promise<void>;\n\n protected getIsButtonDisabled(): boolean {\n return this.disabled || !this.mediaState.value;\n }\n\n protected handleActivate(event: UIEvent, source: ButtonActivationSource): void {\n // `createButton` invokes `onActivate` synchronously from click/keyup\n // handlers, so any rejection here would be unhandled. Log in dev for\n // visibility but absorb the failure at this UI boundary.\n Promise.resolve(this.activate(this.mediaState.value!, event, source)).catch((error) => {\n if (__DEV__) console.error(`[${this.localName}]`, error);\n });\n }\n\n /** Override to set the hotkey action name for `aria-keyshortcuts`. */\n protected readonly hotkeyAction: string | undefined = undefined;\n\n /** Override to match hotkeys that use action values, such as seek steps. */\n protected get hotkeyValue(): number | undefined {\n return undefined;\n }\n\n get $state(): State<ButtonState> {\n return this.core.state;\n }\n\n #disconnect: AbortController | null = null;\n #hotkeyRegistry: AriaKeyShortcutsController | null = null;\n #lastHotkeyShortcut: string | undefined;\n readonly #i18n = new I18nController(this, i18nContext);\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n if (this.hotkeyAction && !this.#hotkeyRegistry) {\n this.#hotkeyRegistry = new AriaKeyShortcutsController(this, this.hotkeyAction, {\n value: () => this.hotkeyValue,\n });\n }\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: (event, source) => this.handleActivate(event, source),\n isDisabled: () => this.getIsButtonDisabled(),\n });\n\n applyElementProps(this, buttonProps, { signal: this.#disconnect.signal });\n\n if (__DEV__ && !this.mediaState.value && this.mediaState.displayName) {\n logMissingFeature(this.localName, this.mediaState.displayName);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n /** Returns the button's current label derived from media state. */\n getLabel(): string | undefined {\n return this.core.state.current.label ? resolveText(this.core.state.current.label) : undefined;\n }\n\n getShortcut(): string | undefined {\n return this.#hotkeyRegistry?.shortcut;\n }\n\n /** Resolved label for tooltips and other display surfaces. */\n getResolvedLabel(): string | undefined {\n const media = this.mediaState.value;\n if (!media) return undefined;\n\n this.core.setMedia(media);\n const state = this.core.getState() as InferComponentState<Core>;\n\n return translateText(this.core.getLabel(state), this.#i18n.value, getLabelParams(this.core, state));\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.core.setProps?.(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.mediaState.value;\n\n this.#syncHotkeyShortcut();\n\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState() as InferComponentState<Core>;\n const attrs = (this.core.getAttrs?.(state) ?? {}) as Record<string, unknown>;\n\n if (isText(attrs['aria-label'])) {\n attrs['aria-label'] = translateText(attrs['aria-label'], this.#i18n.value, getLabelParams(this.core, state));\n }\n\n applyElementProps(this, {\n ...attrs,\n 'aria-keyshortcuts': this.#hotkeyRegistry?.aria,\n // A button whose core reports itself hidden takes the real attribute, not\n // just the data one: `data-hidden` is a styling hook a skin may or may not\n // act on, where `hidden` removes the control the way the React components\n // do by rendering nothing.\n ...(isHideable(state) && { hidden: state.hidden ? '' : undefined }),\n });\n applyStateDataAttrs(this, state, this.stateAttrMap);\n }\n\n #syncHotkeyShortcut(): void {\n const shortcut = this.getShortcut();\n if (shortcut === this.#lastHotkeyShortcut) return;\n\n this.#lastHotkeyShortcut = shortcut;\n this.dispatchEvent(new CustomEvent(HOTKEY_SHORTCUT_CHANGE_EVENT));\n }\n}\n\n/** Whether a button's core reports whether it should be shown at all. */\nfunction isHideable(state: unknown): state is { hidden: boolean } {\n return isObject(state) && isBoolean((state as { hidden?: unknown }).hidden);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"media-button-element.js","names":[],"sources":["../../../src/ui/media-button-element.ts"],"sourcesContent":["import type { ButtonState, MediaButtonComponent, StateAttrMap } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n type ButtonActivationSource,\n createButton,\n HOTKEY_SHORTCUT_CHANGE_EVENT,\n logMissingFeature,\n type UIEvent,\n} from '@videojs/core/dom';\nimport { isText, resolveText, type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { State } from '@videojs/store';\nimport { isBoolean, isObject } from '@videojs/utils/predicate';\n\nimport { i18nContext } from '../i18n/context';\nimport { I18nController } from '../i18n/controller';\nimport type { PlayerController } from '../player/controller';\nimport { AriaKeyShortcutsController } from './hotkey/aria-key-shortcuts-controller';\nimport { UIElement } from './ui-element';\n\ntype LabelParams = Record<string, string | number>;\n\n/** The core a media button element drives: it reads `MediaState` and computes `ComponentState`. */\ntype MediaButtonCore<ComponentState extends ButtonState, MediaState> = MediaButtonComponent<object, ComponentState> & {\n setMedia(media: MediaState): void;\n getLabelParams?: (state: ComponentState) => LabelParams | undefined;\n};\n\n/**\n * Abstract base for HTML custom elements that render a media-control button. `ComponentState` is the state the button\n * reflects to data attributes, and `MediaState` is the player state it reads and acts on. Pass both: a subclass that\n * omits them still compiles, but types `activate(state)` and `mediaState` as the `ButtonState` and `object` defaults.\n */\nexport abstract class MediaButtonElement<\n ComponentState extends ButtonState = ButtonState,\n MediaState extends object = object,\n> extends UIElement {\n static override properties: PropertyDeclarationMap = {\n label: { type: String },\n disabled: { type: Boolean },\n };\n\n disabled = false;\n label: Text | string = '';\n\n protected abstract readonly core: MediaButtonCore<ComponentState, MediaState>;\n protected abstract readonly stateAttrMap: StateAttrMap<ComponentState>;\n protected abstract readonly mediaState: PlayerController<any, MediaState | undefined>;\n\n protected abstract activate(state: MediaState, event: UIEvent, source: ButtonActivationSource): void | Promise<void>;\n\n protected getIsButtonDisabled(): boolean {\n return this.disabled || !this.mediaState.value;\n }\n\n protected handleActivate(event: UIEvent, source: ButtonActivationSource): void {\n // `createButton` invokes `onActivate` synchronously from click/keyup\n // handlers, so any rejection here would be unhandled. Log in dev for\n // visibility but absorb the failure at this UI boundary.\n Promise.resolve(this.activate(this.mediaState.value!, event, source)).catch((error) => {\n if (__DEV__) console.error(`[${this.localName}]`, error);\n });\n }\n\n /** Override to set the hotkey action name for `aria-keyshortcuts`. */\n protected readonly hotkeyAction: string | undefined = undefined;\n\n /** Override to match hotkeys that use action values, such as seek steps. */\n protected get hotkeyValue(): number | undefined {\n return undefined;\n }\n\n get $state(): State<ButtonState> {\n return this.core.state;\n }\n\n #disconnect: AbortController | null = null;\n #hotkeyRegistry: AriaKeyShortcutsController | null = null;\n #lastHotkeyShortcut: string | undefined;\n readonly #i18n = new I18nController(this, i18nContext);\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n if (this.hotkeyAction && !this.#hotkeyRegistry) {\n this.#hotkeyRegistry = new AriaKeyShortcutsController(this, this.hotkeyAction, {\n value: () => this.hotkeyValue,\n });\n }\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: (event, source) => this.handleActivate(event, source),\n isDisabled: () => this.getIsButtonDisabled(),\n });\n\n applyElementProps(this, buttonProps, { signal: this.#disconnect.signal });\n\n if (__DEV__ && !this.mediaState.value && this.mediaState.displayName) {\n logMissingFeature(this.localName, this.mediaState.displayName);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n /** Returns the button's current label derived from media state. */\n getLabel(): string | undefined {\n return this.core.state.current.label ? resolveText(this.core.state.current.label) : undefined;\n }\n\n getShortcut(): string | undefined {\n return this.#hotkeyRegistry?.shortcut;\n }\n\n /** Resolved label for tooltips and other display surfaces. */\n getResolvedLabel(): string | undefined {\n const media = this.mediaState.value;\n if (!media) return undefined;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n\n return translateText(this.core.getLabel(state), this.#i18n.value, this.core.getLabelParams?.(state));\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.core.setProps?.(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.mediaState.value;\n\n this.#syncHotkeyShortcut();\n\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n const attrs = (this.core.getAttrs?.(state) ?? {}) as Record<string, unknown>;\n\n if (isText(attrs['aria-label'])) {\n attrs['aria-label'] = translateText(attrs['aria-label'], this.#i18n.value, this.core.getLabelParams?.(state));\n }\n\n applyElementProps(this, {\n ...attrs,\n 'aria-keyshortcuts': this.#hotkeyRegistry?.aria,\n // A button whose core reports itself hidden takes the real attribute, not\n // just the data one: `data-hidden` is a styling hook a skin may or may not\n // act on, where `hidden` removes the control the way the React components\n // do by rendering nothing.\n ...(isHideable(state) && { hidden: state.hidden ? '' : undefined }),\n });\n applyStateDataAttrs(this, state, this.stateAttrMap);\n }\n\n #syncHotkeyShortcut(): void {\n const shortcut = this.getShortcut();\n if (shortcut === this.#lastHotkeyShortcut) return;\n\n this.#lastHotkeyShortcut = shortcut;\n this.dispatchEvent(new CustomEvent(HOTKEY_SHORTCUT_CHANGE_EVENT));\n }\n}\n\n/** Whether a button's core reports whether it should be shown at all. */\nfunction isHideable(state: unknown): state is { hidden: boolean } {\n return isObject(state) && isBoolean((state as { hidden?: unknown }).hidden);\n}\n"],"mappings":"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"}
@@ -1,17 +1,25 @@
1
1
  import { UIElement } from "./ui-element.js";
2
2
  import { PlayerController } from "../player/controller.js";
3
- import { InferComponentState, InferMediaState, MediaUIComponent, StateAttrMap } from "@videojs/core";
3
+ import { MediaUIComponent, StateAttrMap } from "@videojs/core";
4
4
  import { PropertyValues } from "@videojs/element";
5
5
  //#region src/ui/media-ui-element.d.ts
6
- /** Abstract base for HTML custom elements that display media state with data attributes. */
7
- declare abstract class MediaUIElement<Core extends MediaUIComponent> extends UIElement {
6
+ /** The core a media UI element drives: it reads `MediaState` and computes `ComponentState`. */
7
+ type MediaUICore<ComponentState extends object, MediaState> = MediaUIComponent<object, ComponentState> & {
8
+ setMedia(media: MediaState): void;
9
+ };
10
+ /**
11
+ * Abstract base for HTML custom elements that display media state with data attributes. `ComponentState` is the state
12
+ * the element reflects to data attributes, and `MediaState` is the player state it reads.
13
+ *
14
+ * @internal
15
+ */
16
+ export declare abstract class MediaUIElement<ComponentState extends object = object, MediaState extends object = object> extends UIElement {
8
17
  #private;
9
- protected abstract readonly core: Core;
10
- protected abstract readonly stateAttrMap: StateAttrMap<InferComponentState<Core>>;
11
- protected abstract readonly mediaState: PlayerController<any, InferMediaState<Core> | undefined>;
18
+ protected abstract readonly core: MediaUICore<ComponentState, MediaState>;
19
+ protected abstract readonly stateAttrMap: StateAttrMap<ComponentState>;
20
+ protected abstract readonly mediaState: PlayerController<any, MediaState | undefined>;
12
21
  connectedCallback(): void;
13
22
  protected update(changed: PropertyValues): void;
14
23
  }
15
24
  //#endregion
16
- export { MediaUIElement };
17
25
  //# sourceMappingURL=media-ui-element.d.ts.map
@@ -5,7 +5,12 @@ import { applyElementProps, applyStateDataAttrs, logMissingFeature } from "@vide
5
5
  import { isText, translateText } from "@videojs/core/i18n";
6
6
  import { isFunction } from "@videojs/utils/predicate";
7
7
  //#region src/ui/media-ui-element.ts
8
- /** Abstract base for HTML custom elements that display media state with data attributes. */
8
+ /**
9
+ * Abstract base for HTML custom elements that display media state with data attributes. `ComponentState` is the state
10
+ * the element reflects to data attributes, and `MediaState` is the player state it reads.
11
+ *
12
+ * @internal
13
+ */
9
14
  var MediaUIElement = class extends UIElement {
10
15
  #i18n = new I18nController(this, i18nContext);
11
16
  connectedCallback() {
@@ -1 +1 @@
1
- {"version":3,"file":"media-ui-element.js","names":["#i18n"],"sources":["../../../src/ui/media-ui-element.ts"],"sourcesContent":["import type { InferComponentState, InferMediaState, MediaUIComponent, StateAttrMap } from '@videojs/core';\nimport { applyElementProps, applyStateDataAttrs, logMissingFeature } from '@videojs/core/dom';\nimport { isText, translateText } from '@videojs/core/i18n';\nimport type { PropertyValues } from '@videojs/element';\nimport { isFunction } from '@videojs/utils/predicate';\n\nimport { i18nContext } from '../i18n/context';\nimport { I18nController } from '../i18n/controller';\nimport type { PlayerController } from '../player/controller';\nimport { UIElement } from './ui-element';\n\n/** Abstract base for HTML custom elements that display media state with data attributes. */\nexport abstract class MediaUIElement<Core extends MediaUIComponent> extends UIElement {\n readonly #i18n = new I18nController(this, i18nContext);\n\n protected abstract readonly core: Core;\n protected abstract readonly stateAttrMap: StateAttrMap<InferComponentState<Core>>;\n protected abstract readonly mediaState: PlayerController<any, InferMediaState<Core> | undefined>;\n\n override connectedCallback(): void {\n super.connectedCallback();\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 super.update(changed);\n\n const media = this.mediaState.value;\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n\n if (isFunction(this.core.getAttrs)) {\n const attrs = this.core.getAttrs(state) as Record<string, unknown>;\n\n if (isText(attrs['aria-label'])) {\n attrs['aria-label'] = translateText(attrs['aria-label'], this.#i18n.value);\n }\n\n applyElementProps(this, attrs);\n }\n\n applyStateDataAttrs(this, state, this.stateAttrMap);\n }\n}\n"],"mappings":";;;;;;;;AAYA,IAAsB,iBAAtB,cAA4E,UAAU;CACpF,QAAiB,IAAI,eAAe,MAAM,WAAW;CAMrD,oBAAmC;EACjC,MAAM,kBAAkB;EAExB,IAAe,CAAC,KAAK,WAAW,SAAS,KAAK,WAAW,aACvD,kBAAkB,KAAK,WAAW,KAAK,WAAW,WAAW;CAEjE;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAEpB,MAAM,QAAQ,KAAK,WAAW;EAC9B,IAAI,CAAC,OAAO;EAEZ,KAAK,KAAK,SAAS,KAAK;EACxB,MAAM,QAAQ,KAAK,KAAK,SAAS;EAEjC,IAAI,WAAW,KAAK,KAAK,QAAQ,GAAG;GAClC,MAAM,QAAQ,KAAK,KAAK,SAAS,KAAK;GAEtC,IAAI,OAAO,MAAM,aAAa,GAC5B,MAAM,gBAAgB,cAAc,MAAM,eAAe,KAAKA,MAAM,KAAK;GAG3E,kBAAkB,MAAM,KAAK;EAC/B;EAEA,oBAAoB,MAAM,OAAO,KAAK,YAAY;CACpD;AACF"}
1
+ {"version":3,"file":"media-ui-element.js","names":[],"sources":["../../../src/ui/media-ui-element.ts"],"sourcesContent":["import type { MediaUIComponent, StateAttrMap } from '@videojs/core';\nimport { applyElementProps, applyStateDataAttrs, logMissingFeature } from '@videojs/core/dom';\nimport { isText, translateText } from '@videojs/core/i18n';\nimport type { PropertyValues } from '@videojs/element';\nimport { isFunction } from '@videojs/utils/predicate';\n\nimport { i18nContext } from '../i18n/context';\nimport { I18nController } from '../i18n/controller';\nimport type { PlayerController } from '../player/controller';\nimport { UIElement } from './ui-element';\n\n/** The core a media UI element drives: it reads `MediaState` and computes `ComponentState`. */\ntype MediaUICore<ComponentState extends object, MediaState> = MediaUIComponent<object, ComponentState> & {\n setMedia(media: MediaState): void;\n};\n\n/**\n * Abstract base for HTML custom elements that display media state with data attributes. `ComponentState` is the state\n * the element reflects to data attributes, and `MediaState` is the player state it reads.\n *\n * @internal\n */\nexport abstract class MediaUIElement<\n ComponentState extends object = object,\n MediaState extends object = object,\n> extends UIElement {\n readonly #i18n = new I18nController(this, i18nContext);\n\n protected abstract readonly core: MediaUICore<ComponentState, MediaState>;\n protected abstract readonly stateAttrMap: StateAttrMap<ComponentState>;\n protected abstract readonly mediaState: PlayerController<any, MediaState | undefined>;\n\n override connectedCallback(): void {\n super.connectedCallback();\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 super.update(changed);\n\n const media = this.mediaState.value;\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n\n if (isFunction(this.core.getAttrs)) {\n const attrs = this.core.getAttrs(state) as Record<string, unknown>;\n\n if (isText(attrs['aria-label'])) {\n attrs['aria-label'] = translateText(attrs['aria-label'], this.#i18n.value);\n }\n\n applyElementProps(this, attrs);\n }\n\n applyStateDataAttrs(this, state, this.stateAttrMap);\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAsBA,IAAsB,iBAAtB,cAGU,UAAU;CAClB,QAAiB,IAAI,eAAe,MAAM,WAAW;CAMrD,oBAAmC;EACjC,MAAM,kBAAkB;EAExB,IAAe,CAAC,KAAK,WAAW,SAAS,KAAK,WAAW,aACvD,kBAAkB,KAAK,WAAW,KAAK,WAAW,WAAW;CAEjE;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAEpB,MAAM,QAAQ,KAAK,WAAW;EAC9B,IAAI,CAAC,OAAO;EAEZ,KAAK,KAAK,SAAS,KAAK;EACxB,MAAM,QAAQ,KAAK,KAAK,SAAS;EAEjC,IAAI,WAAW,KAAK,KAAK,QAAQ,GAAG;GAClC,MAAM,QAAQ,KAAK,KAAK,SAAS,KAAK;GAEtC,IAAI,OAAO,MAAM,aAAa,GAC5B,MAAM,gBAAgB,cAAc,MAAM,eAAe,KAAK,MAAM,KAAK;GAG3E,kBAAkB,MAAM,KAAK;EAC/B;EAEA,oBAAoB,MAAM,OAAO,KAAK,YAAY;CACpD;AACF"}