@videojs/react 10.0.0-beta.27 → 10.0.0-beta.29

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 (865) hide show
  1. package/dist/default/__generated__/skins/default-video/styles/buttons.css +132 -18
  2. package/dist/default/__generated__/skins/default-video/styles/captions.css +22 -0
  3. package/dist/default/__generated__/skins/default-video/styles/container.css +121 -8
  4. package/dist/default/__generated__/skins/default-video/styles/controls.css +436 -21
  5. package/dist/default/__generated__/skins/default-video/styles/dialog.css +169 -0
  6. package/dist/default/__generated__/skins/default-video/styles/indicator.css +459 -0
  7. package/dist/default/__generated__/skins/default-video/styles/menus.css +254 -0
  8. package/dist/default/__generated__/skins/default-video/styles/overlays.css +26 -2
  9. package/dist/default/__generated__/skins/default-video/styles/popups.css +338 -12
  10. package/dist/default/__generated__/skins/default-video/styles/poster.css +4 -4
  11. package/dist/default/__generated__/skins/default-video/styles/sliders.css +355 -31
  12. package/dist/default/__generated__/skins/default-video/styles/styles.css +2455 -216
  13. package/dist/default/__generated__/skins/default-video/styles/theme.css +4 -19
  14. package/dist/default/__generated__/skins/default-video/styles/video.css +29 -0
  15. package/dist/default/__generated__/skins/minimal-video/styles/base.css +25 -0
  16. package/dist/default/__generated__/skins/minimal-video/styles/buttons.css +266 -0
  17. package/dist/default/__generated__/skins/minimal-video/styles/captions.css +22 -0
  18. package/dist/default/__generated__/skins/minimal-video/styles/container.css +158 -0
  19. package/dist/default/__generated__/skins/minimal-video/styles/controls.css +182 -0
  20. package/dist/default/__generated__/skins/minimal-video/styles/dialog.css +77 -0
  21. package/dist/default/__generated__/skins/minimal-video/styles/indicator.css +322 -0
  22. package/dist/default/__generated__/skins/minimal-video/styles/menus.css +254 -0
  23. package/dist/default/__generated__/skins/minimal-video/styles/overlays.css +35 -0
  24. package/dist/default/__generated__/skins/minimal-video/styles/popups.css +371 -0
  25. package/dist/default/__generated__/skins/minimal-video/styles/poster.css +47 -0
  26. package/dist/default/__generated__/skins/minimal-video/styles/sliders.css +436 -0
  27. package/dist/default/__generated__/skins/minimal-video/styles/styles.css +2246 -0
  28. package/dist/default/__generated__/skins/minimal-video/styles/theme.css +7 -0
  29. package/dist/default/__generated__/skins/minimal-video/styles/video.css +29 -0
  30. package/dist/default/i18n/context.js +0 -1
  31. package/dist/default/i18n/context.js.map +1 -1
  32. package/dist/default/i18n/create-i18n.js +0 -1
  33. package/dist/default/i18n/create-i18n.js.map +1 -1
  34. package/dist/default/i18n/index.js +2 -1
  35. package/dist/default/i18n/text.js +20 -0
  36. package/dist/default/i18n/text.js.map +1 -0
  37. package/dist/default/icons/dist/react/default/airplay-exit.js +3 -3
  38. package/dist/default/icons/dist/react/default/airplay-exit.js.map +1 -1
  39. package/dist/default/icons/dist/react/minimal/airplay-exit.js +3 -3
  40. package/dist/default/icons/dist/react/minimal/airplay-exit.js.map +1 -1
  41. package/dist/default/index.js +2 -1
  42. package/dist/default/media/audio.js +0 -1
  43. package/dist/default/media/audio.js.map +1 -1
  44. package/dist/default/media/hls-background-video/media.js +18 -3
  45. package/dist/default/media/hls-background-video/media.js.map +1 -1
  46. package/dist/default/media/video.js +0 -1
  47. package/dist/default/media/video.js.map +1 -1
  48. package/dist/default/player/container.js +0 -1
  49. package/dist/default/player/container.js.map +1 -1
  50. package/dist/default/player/context.js +0 -1
  51. package/dist/default/player/context.js.map +1 -1
  52. package/dist/default/player/create-player.js +0 -1
  53. package/dist/default/player/create-player.js.map +1 -1
  54. package/dist/default/player/popup-group-context.js +0 -1
  55. package/dist/default/player/popup-group-context.js.map +1 -1
  56. package/dist/default/presets/audio/minimal-skin.css +117 -118
  57. package/dist/default/presets/audio/minimal-skin.js +2 -1
  58. package/dist/default/presets/audio/minimal-skin.js.map +1 -1
  59. package/dist/default/presets/audio/minimal-skin.tailwind.js +2 -1
  60. package/dist/default/presets/audio/minimal-skin.tailwind.js.map +1 -1
  61. package/dist/default/presets/audio/skin.css +95 -99
  62. package/dist/default/presets/audio/skin.js +2 -1
  63. package/dist/default/presets/audio/skin.js.map +1 -1
  64. package/dist/default/presets/audio/skin.tailwind.js +2 -1
  65. package/dist/default/presets/audio/skin.tailwind.js.map +1 -1
  66. package/dist/default/presets/background/skin.js +1 -0
  67. package/dist/default/presets/background/skin.js.map +1 -1
  68. package/dist/default/presets/live-audio/minimal-skin.css +117 -118
  69. package/dist/default/presets/live-audio/minimal-skin.js +1 -0
  70. package/dist/default/presets/live-audio/minimal-skin.js.map +1 -1
  71. package/dist/default/presets/live-audio/minimal-skin.tailwind.js +1 -0
  72. package/dist/default/presets/live-audio/minimal-skin.tailwind.js.map +1 -1
  73. package/dist/default/presets/live-audio/skin.css +95 -99
  74. package/dist/default/presets/live-audio/skin.js +1 -0
  75. package/dist/default/presets/live-audio/skin.js.map +1 -1
  76. package/dist/default/presets/live-audio/skin.tailwind.js +1 -0
  77. package/dist/default/presets/live-audio/skin.tailwind.js.map +1 -1
  78. package/dist/default/presets/live-video/minimal-skin.css +158 -137
  79. package/dist/default/presets/live-video/minimal-skin.js +4 -8
  80. package/dist/default/presets/live-video/minimal-skin.js.map +1 -1
  81. package/dist/default/presets/live-video/minimal-skin.tailwind.js +6 -8
  82. package/dist/default/presets/live-video/minimal-skin.tailwind.js.map +1 -1
  83. package/dist/default/presets/live-video/skin.css +120 -106
  84. package/dist/default/presets/live-video/skin.js +4 -8
  85. package/dist/default/presets/live-video/skin.js.map +1 -1
  86. package/dist/default/presets/live-video/skin.tailwind.js +8 -10
  87. package/dist/default/presets/live-video/skin.tailwind.js.map +1 -1
  88. package/dist/default/presets/video/minimal-skin.css +158 -137
  89. package/dist/default/presets/video/minimal-skin.js +4 -8
  90. package/dist/default/presets/video/minimal-skin.js.map +1 -1
  91. package/dist/default/presets/video/minimal-skin.tailwind.js +6 -8
  92. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
  93. package/dist/default/presets/video/skin.css +120 -106
  94. package/dist/default/presets/video/skin.js +4 -8
  95. package/dist/default/presets/video/skin.js.map +1 -1
  96. package/dist/default/presets/video/skin.tailwind.js +7 -9
  97. package/dist/default/presets/video/skin.tailwind.js.map +1 -1
  98. package/dist/default/skins/dist/default/default/tailwind/components/button.js +3 -1
  99. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  100. package/dist/default/skins/dist/default/default/tailwind/components/poster.js +8 -1
  101. package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  102. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +13 -13
  103. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  104. package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
  105. package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
  106. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +3 -3
  107. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  108. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
  109. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  110. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
  111. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  112. package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
  113. package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
  114. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +7 -6
  115. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  116. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +4 -4
  117. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  118. package/dist/default/ui/airplay-button/airplay-button.js +0 -1
  119. package/dist/default/ui/airplay-button/airplay-button.js.map +1 -1
  120. package/dist/default/ui/alert-dialog/alert-dialog-close.js +0 -1
  121. package/dist/default/ui/alert-dialog/alert-dialog-close.js.map +1 -1
  122. package/dist/default/ui/alert-dialog/alert-dialog-description.js +0 -1
  123. package/dist/default/ui/alert-dialog/alert-dialog-description.js.map +1 -1
  124. package/dist/default/ui/alert-dialog/alert-dialog-popup.js +0 -1
  125. package/dist/default/ui/alert-dialog/alert-dialog-popup.js.map +1 -1
  126. package/dist/default/ui/alert-dialog/alert-dialog-root.js +0 -1
  127. package/dist/default/ui/alert-dialog/alert-dialog-root.js.map +1 -1
  128. package/dist/default/ui/alert-dialog/alert-dialog-title.js +0 -1
  129. package/dist/default/ui/alert-dialog/alert-dialog-title.js.map +1 -1
  130. package/dist/default/ui/alert-dialog/context.js +0 -1
  131. package/dist/default/ui/alert-dialog/context.js.map +1 -1
  132. package/dist/default/ui/audio-track/use-audio-track-options.js +0 -1
  133. package/dist/default/ui/audio-track/use-audio-track-options.js.map +1 -1
  134. package/dist/default/ui/audio-track-radio-group/audio-track-radio-group.js +0 -1
  135. package/dist/default/ui/audio-track-radio-group/audio-track-radio-group.js.map +1 -1
  136. package/dist/default/ui/buffering-indicator/buffering-indicator.js +0 -1
  137. package/dist/default/ui/buffering-indicator/buffering-indicator.js.map +1 -1
  138. package/dist/default/ui/captions-button/captions-button.js +0 -1
  139. package/dist/default/ui/captions-button/captions-button.js.map +1 -1
  140. package/dist/default/ui/captions-radio-group/captions-radio-group.js +0 -1
  141. package/dist/default/ui/captions-radio-group/captions-radio-group.js.map +1 -1
  142. package/dist/default/ui/captions-radio-group/use-captions-options.js +0 -1
  143. package/dist/default/ui/captions-radio-group/use-captions-options.js.map +1 -1
  144. package/dist/default/ui/cast-button/cast-button.js +0 -1
  145. package/dist/default/ui/cast-button/cast-button.js.map +1 -1
  146. package/dist/default/ui/controls/context.js +0 -1
  147. package/dist/default/ui/controls/context.js.map +1 -1
  148. package/dist/default/ui/controls/controls-group.js +0 -1
  149. package/dist/default/ui/controls/controls-group.js.map +1 -1
  150. package/dist/default/ui/controls/controls-root.js +0 -1
  151. package/dist/default/ui/controls/controls-root.js.map +1 -1
  152. package/dist/default/ui/create-context-part.js +0 -1
  153. package/dist/default/ui/create-context-part.js.map +1 -1
  154. package/dist/default/ui/create-media-button.js +0 -1
  155. package/dist/default/ui/create-media-button.js.map +1 -1
  156. package/dist/default/ui/error-dialog/context.js +0 -1
  157. package/dist/default/ui/error-dialog/context.js.map +1 -1
  158. package/dist/default/ui/error-dialog/error-dialog-close.js +0 -1
  159. package/dist/default/ui/error-dialog/error-dialog-close.js.map +1 -1
  160. package/dist/default/ui/error-dialog/error-dialog-description.js +0 -1
  161. package/dist/default/ui/error-dialog/error-dialog-description.js.map +1 -1
  162. package/dist/default/ui/error-dialog/error-dialog-root.js +0 -1
  163. package/dist/default/ui/error-dialog/error-dialog-root.js.map +1 -1
  164. package/dist/default/ui/error-dialog/error-dialog-title.js +0 -1
  165. package/dist/default/ui/error-dialog/error-dialog-title.js.map +1 -1
  166. package/dist/default/ui/fullscreen-button/fullscreen-button.js +0 -1
  167. package/dist/default/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  168. package/dist/default/ui/gesture/gesture.js +0 -1
  169. package/dist/default/ui/gesture/gesture.js.map +1 -1
  170. package/dist/default/ui/gesture/use-doubletap-gesture.js +0 -1
  171. package/dist/default/ui/gesture/use-doubletap-gesture.js.map +1 -1
  172. package/dist/default/ui/gesture/use-tap-gesture.js +0 -1
  173. package/dist/default/ui/gesture/use-tap-gesture.js.map +1 -1
  174. package/dist/default/ui/hooks/create-radio-options-hook.js +0 -1
  175. package/dist/default/ui/hooks/create-radio-options-hook.js.map +1 -1
  176. package/dist/default/ui/hooks/use-button.js +0 -1
  177. package/dist/default/ui/hooks/use-button.js.map +1 -1
  178. package/dist/default/ui/hooks/use-positioned-state.js +0 -1
  179. package/dist/default/ui/hooks/use-positioned-state.js.map +1 -1
  180. package/dist/default/ui/hooks/use-slider.js +0 -1
  181. package/dist/default/ui/hooks/use-slider.js.map +1 -1
  182. package/dist/default/ui/hotkey/hotkey.js +0 -1
  183. package/dist/default/ui/hotkey/hotkey.js.map +1 -1
  184. package/dist/default/ui/hotkey/use-hotkey-shortcut.js +0 -1
  185. package/dist/default/ui/hotkey/use-hotkey-shortcut.js.map +1 -1
  186. package/dist/default/ui/hotkey/use-hotkey.js +0 -1
  187. package/dist/default/ui/hotkey/use-hotkey.js.map +1 -1
  188. package/dist/default/ui/input-indicator/use-indicator-visibility.js +0 -1
  189. package/dist/default/ui/input-indicator/use-indicator-visibility.js.map +1 -1
  190. package/dist/default/ui/input-indicator/use-input-action-subscription.js +0 -1
  191. package/dist/default/ui/input-indicator/use-input-action-subscription.js.map +1 -1
  192. package/dist/default/ui/input-indicator/use-input-indicator-root.js +0 -1
  193. package/dist/default/ui/input-indicator/use-input-indicator-root.js.map +1 -1
  194. package/dist/default/ui/input-indicator/use-rendered-indicator-state.js +0 -1
  195. package/dist/default/ui/input-indicator/use-rendered-indicator-state.js.map +1 -1
  196. package/dist/default/ui/live-button/live-button.js +0 -1
  197. package/dist/default/ui/live-button/live-button.js.map +1 -1
  198. package/dist/default/ui/menu/context.js +6 -2
  199. package/dist/default/ui/menu/context.js.map +1 -1
  200. package/dist/default/ui/menu/menu-checkbox-item.js +0 -1
  201. package/dist/default/ui/menu/menu-checkbox-item.js.map +1 -1
  202. package/dist/default/ui/menu/menu-content.js +0 -1
  203. package/dist/default/ui/menu/menu-content.js.map +1 -1
  204. package/dist/default/ui/menu/menu-group-label.js +0 -1
  205. package/dist/default/ui/menu/menu-group-label.js.map +1 -1
  206. package/dist/default/ui/menu/menu-group.js +0 -1
  207. package/dist/default/ui/menu/menu-group.js.map +1 -1
  208. package/dist/default/ui/menu/menu-item-indicator.js +3 -3
  209. package/dist/default/ui/menu/menu-item-indicator.js.map +1 -1
  210. package/dist/default/ui/menu/menu-item.js +0 -1
  211. package/dist/default/ui/menu/menu-item.js.map +1 -1
  212. package/dist/default/ui/menu/menu-radio-group.js +0 -1
  213. package/dist/default/ui/menu/menu-radio-group.js.map +1 -1
  214. package/dist/default/ui/menu/menu-radio-item.js +19 -16
  215. package/dist/default/ui/menu/menu-radio-item.js.map +1 -1
  216. package/dist/default/ui/menu/menu-root.js +5 -7
  217. package/dist/default/ui/menu/menu-root.js.map +1 -1
  218. package/dist/default/ui/menu/menu-separator.js +0 -1
  219. package/dist/default/ui/menu/menu-separator.js.map +1 -1
  220. package/dist/default/ui/menu/menu-trigger.js +26 -12
  221. package/dist/default/ui/menu/menu-trigger.js.map +1 -1
  222. package/dist/default/ui/menu/use-menu-group.js +0 -1
  223. package/dist/default/ui/menu/use-menu-group.js.map +1 -1
  224. package/dist/default/ui/mute-button/mute-button.js +0 -1
  225. package/dist/default/ui/mute-button/mute-button.js.map +1 -1
  226. package/dist/default/ui/pip-button/pip-button.js +0 -1
  227. package/dist/default/ui/pip-button/pip-button.js.map +1 -1
  228. package/dist/default/ui/play-button/play-button.js +0 -1
  229. package/dist/default/ui/play-button/play-button.js.map +1 -1
  230. package/dist/default/ui/playback-rate/use-playback-rate-options.js +0 -1
  231. package/dist/default/ui/playback-rate/use-playback-rate-options.js.map +1 -1
  232. package/dist/default/ui/playback-rate-button/playback-rate-button.js +0 -1
  233. package/dist/default/ui/playback-rate-button/playback-rate-button.js.map +1 -1
  234. package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group.js +0 -1
  235. package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group.js.map +1 -1
  236. package/dist/default/ui/popover/context.js +0 -1
  237. package/dist/default/ui/popover/context.js.map +1 -1
  238. package/dist/default/ui/popover/popover-arrow.js +0 -1
  239. package/dist/default/ui/popover/popover-arrow.js.map +1 -1
  240. package/dist/default/ui/popover/popover-popup.js +0 -1
  241. package/dist/default/ui/popover/popover-popup.js.map +1 -1
  242. package/dist/default/ui/popover/popover-root.js +0 -1
  243. package/dist/default/ui/popover/popover-root.js.map +1 -1
  244. package/dist/default/ui/popover/popover-trigger.js +0 -1
  245. package/dist/default/ui/popover/popover-trigger.js.map +1 -1
  246. package/dist/default/ui/popover/use-popup-position.js +0 -1
  247. package/dist/default/ui/popover/use-popup-position.js.map +1 -1
  248. package/dist/default/ui/poster/poster.js +64 -18
  249. package/dist/default/ui/poster/poster.js.map +1 -1
  250. package/dist/default/ui/quality/use-quality-options.js +0 -1
  251. package/dist/default/ui/quality/use-quality-options.js.map +1 -1
  252. package/dist/default/ui/quality-radio-group/quality-radio-group.js +0 -1
  253. package/dist/default/ui/quality-radio-group/quality-radio-group.js.map +1 -1
  254. package/dist/default/ui/seek-button/seek-button.js +0 -1
  255. package/dist/default/ui/seek-button/seek-button.js.map +1 -1
  256. package/dist/default/ui/seek-indicator/context.js +0 -1
  257. package/dist/default/ui/seek-indicator/context.js.map +1 -1
  258. package/dist/default/ui/seek-indicator/seek-indicator-root.js +0 -1
  259. package/dist/default/ui/seek-indicator/seek-indicator-root.js.map +1 -1
  260. package/dist/default/ui/seek-indicator/seek-indicator-value.js +0 -1
  261. package/dist/default/ui/seek-indicator/seek-indicator-value.js.map +1 -1
  262. package/dist/default/ui/slider/context.js +0 -1
  263. package/dist/default/ui/slider/context.js.map +1 -1
  264. package/dist/default/ui/slider/slider-buffer.js +0 -1
  265. package/dist/default/ui/slider/slider-buffer.js.map +1 -1
  266. package/dist/default/ui/slider/slider-fill.js +0 -1
  267. package/dist/default/ui/slider/slider-fill.js.map +1 -1
  268. package/dist/default/ui/slider/slider-preview.js +0 -1
  269. package/dist/default/ui/slider/slider-preview.js.map +1 -1
  270. package/dist/default/ui/slider/slider-root.js +0 -1
  271. package/dist/default/ui/slider/slider-root.js.map +1 -1
  272. package/dist/default/ui/slider/slider-thumb.js +0 -1
  273. package/dist/default/ui/slider/slider-thumb.js.map +1 -1
  274. package/dist/default/ui/slider/slider-thumbnail.js +0 -1
  275. package/dist/default/ui/slider/slider-thumbnail.js.map +1 -1
  276. package/dist/default/ui/slider/slider-track.js +0 -1
  277. package/dist/default/ui/slider/slider-track.js.map +1 -1
  278. package/dist/default/ui/slider/slider-value.js +0 -1
  279. package/dist/default/ui/slider/slider-value.js.map +1 -1
  280. package/dist/default/ui/status-announcer/status-announcer.js +0 -1
  281. package/dist/default/ui/status-announcer/status-announcer.js.map +1 -1
  282. package/dist/default/ui/status-indicator/context.js +0 -1
  283. package/dist/default/ui/status-indicator/context.js.map +1 -1
  284. package/dist/default/ui/status-indicator/status-indicator-root.js +0 -1
  285. package/dist/default/ui/status-indicator/status-indicator-root.js.map +1 -1
  286. package/dist/default/ui/status-indicator/status-indicator-value.js +0 -1
  287. package/dist/default/ui/status-indicator/status-indicator-value.js.map +1 -1
  288. package/dist/default/ui/thumbnail/thumbnail.js +0 -1
  289. package/dist/default/ui/thumbnail/thumbnail.js.map +1 -1
  290. package/dist/default/ui/time/time-group.js +0 -1
  291. package/dist/default/ui/time/time-group.js.map +1 -1
  292. package/dist/default/ui/time/time-separator.js +0 -1
  293. package/dist/default/ui/time/time-separator.js.map +1 -1
  294. package/dist/default/ui/time/time-value.js +0 -1
  295. package/dist/default/ui/time/time-value.js.map +1 -1
  296. package/dist/default/ui/time-slider/time-slider-chapters/slider-segments.js +0 -1
  297. package/dist/default/ui/time-slider/time-slider-chapters/slider-segments.js.map +1 -1
  298. package/dist/default/ui/time-slider/time-slider-chapters/time-slider-chapter-title.js +0 -1
  299. package/dist/default/ui/time-slider/time-slider-chapters/time-slider-chapter-title.js.map +1 -1
  300. package/dist/default/ui/time-slider/time-slider-chapters/time-slider-chapters.js +0 -1
  301. package/dist/default/ui/time-slider/time-slider-chapters/time-slider-chapters.js.map +1 -1
  302. package/dist/default/ui/time-slider/time-slider-root.js +0 -1
  303. package/dist/default/ui/time-slider/time-slider-root.js.map +1 -1
  304. package/dist/default/ui/tooltip/context.js +0 -1
  305. package/dist/default/ui/tooltip/context.js.map +1 -1
  306. package/dist/default/ui/tooltip/group-context.js +0 -1
  307. package/dist/default/ui/tooltip/group-context.js.map +1 -1
  308. package/dist/default/ui/tooltip/tooltip-arrow.js +0 -1
  309. package/dist/default/ui/tooltip/tooltip-arrow.js.map +1 -1
  310. package/dist/default/ui/tooltip/tooltip-label.js +0 -1
  311. package/dist/default/ui/tooltip/tooltip-label.js.map +1 -1
  312. package/dist/default/ui/tooltip/tooltip-popup.js +0 -1
  313. package/dist/default/ui/tooltip/tooltip-popup.js.map +1 -1
  314. package/dist/default/ui/tooltip/tooltip-provider.js +0 -1
  315. package/dist/default/ui/tooltip/tooltip-provider.js.map +1 -1
  316. package/dist/default/ui/tooltip/tooltip-root.js +0 -1
  317. package/dist/default/ui/tooltip/tooltip-root.js.map +1 -1
  318. package/dist/default/ui/tooltip/tooltip-shortcut.js +0 -1
  319. package/dist/default/ui/tooltip/tooltip-shortcut.js.map +1 -1
  320. package/dist/default/ui/tooltip/tooltip-trigger.js +0 -1
  321. package/dist/default/ui/tooltip/tooltip-trigger.js.map +1 -1
  322. package/dist/default/ui/volume-indicator/context.js +0 -1
  323. package/dist/default/ui/volume-indicator/context.js.map +1 -1
  324. package/dist/default/ui/volume-indicator/volume-indicator-fill.js +0 -1
  325. package/dist/default/ui/volume-indicator/volume-indicator-fill.js.map +1 -1
  326. package/dist/default/ui/volume-indicator/volume-indicator-root.js +0 -1
  327. package/dist/default/ui/volume-indicator/volume-indicator-root.js.map +1 -1
  328. package/dist/default/ui/volume-indicator/volume-indicator-value.js +0 -1
  329. package/dist/default/ui/volume-indicator/volume-indicator-value.js.map +1 -1
  330. package/dist/default/ui/volume-slider/volume-slider-root.js +0 -1
  331. package/dist/default/ui/volume-slider/volume-slider-root.js.map +1 -1
  332. package/dist/default/utils/merge-props.js +0 -1
  333. package/dist/default/utils/merge-props.js.map +1 -1
  334. package/dist/default/utils/use-attach-iframe.js +0 -1
  335. package/dist/default/utils/use-attach-iframe.js.map +1 -1
  336. package/dist/default/utils/use-attach-media.js +0 -1
  337. package/dist/default/utils/use-attach-media.js.map +1 -1
  338. package/dist/default/utils/use-composed-refs.js +0 -1
  339. package/dist/default/utils/use-composed-refs.js.map +1 -1
  340. package/dist/default/utils/use-destroy.js +0 -1
  341. package/dist/default/utils/use-destroy.js.map +1 -1
  342. package/dist/default/utils/use-force-render.js +0 -1
  343. package/dist/default/utils/use-force-render.js.map +1 -1
  344. package/dist/default/utils/use-latest-ref.js +0 -1
  345. package/dist/default/utils/use-latest-ref.js.map +1 -1
  346. package/dist/default/utils/use-media-component.js +0 -1
  347. package/dist/default/utils/use-media-component.js.map +1 -1
  348. package/dist/default/utils/use-media-instance.js +0 -1
  349. package/dist/default/utils/use-media-instance.js.map +1 -1
  350. package/dist/default/utils/use-render.js +2 -9
  351. package/dist/default/utils/use-render.js.map +1 -1
  352. package/dist/default/utils/use-safe-id.js +0 -1
  353. package/dist/default/utils/use-safe-id.js.map +1 -1
  354. package/dist/dev/__generated__/skins/default-video/styles/buttons.css +132 -18
  355. package/dist/dev/__generated__/skins/default-video/styles/captions.css +22 -0
  356. package/dist/dev/__generated__/skins/default-video/styles/container.css +121 -8
  357. package/dist/dev/__generated__/skins/default-video/styles/controls.css +436 -21
  358. package/dist/dev/__generated__/skins/default-video/styles/dialog.css +169 -0
  359. package/dist/dev/__generated__/skins/default-video/styles/indicator.css +459 -0
  360. package/dist/dev/__generated__/skins/default-video/styles/menus.css +254 -0
  361. package/dist/dev/__generated__/skins/default-video/styles/overlays.css +26 -2
  362. package/dist/dev/__generated__/skins/default-video/styles/popups.css +338 -12
  363. package/dist/dev/__generated__/skins/default-video/styles/poster.css +4 -4
  364. package/dist/dev/__generated__/skins/default-video/styles/sliders.css +355 -31
  365. package/dist/dev/__generated__/skins/default-video/styles/styles.css +2455 -216
  366. package/dist/dev/__generated__/skins/default-video/styles/theme.css +4 -19
  367. package/dist/dev/__generated__/skins/default-video/styles/video.css +29 -0
  368. package/dist/dev/__generated__/skins/minimal-video/styles/base.css +25 -0
  369. package/dist/dev/__generated__/skins/minimal-video/styles/buttons.css +266 -0
  370. package/dist/dev/__generated__/skins/minimal-video/styles/captions.css +22 -0
  371. package/dist/dev/__generated__/skins/minimal-video/styles/container.css +158 -0
  372. package/dist/dev/__generated__/skins/minimal-video/styles/controls.css +182 -0
  373. package/dist/dev/__generated__/skins/minimal-video/styles/dialog.css +77 -0
  374. package/dist/dev/__generated__/skins/minimal-video/styles/indicator.css +322 -0
  375. package/dist/dev/__generated__/skins/minimal-video/styles/menus.css +254 -0
  376. package/dist/dev/__generated__/skins/minimal-video/styles/overlays.css +35 -0
  377. package/dist/dev/__generated__/skins/minimal-video/styles/popups.css +371 -0
  378. package/dist/dev/__generated__/skins/minimal-video/styles/poster.css +47 -0
  379. package/dist/dev/__generated__/skins/minimal-video/styles/sliders.css +436 -0
  380. package/dist/dev/__generated__/skins/minimal-video/styles/styles.css +2246 -0
  381. package/dist/dev/__generated__/skins/minimal-video/styles/theme.css +7 -0
  382. package/dist/dev/__generated__/skins/minimal-video/styles/video.css +29 -0
  383. package/dist/dev/i18n/context.d.ts.map +1 -1
  384. package/dist/dev/i18n/context.js +0 -1
  385. package/dist/dev/i18n/context.js.map +1 -1
  386. package/dist/dev/i18n/create-i18n.d.ts.map +1 -1
  387. package/dist/dev/i18n/create-i18n.js +0 -1
  388. package/dist/dev/i18n/create-i18n.js.map +1 -1
  389. package/dist/dev/i18n/index.d.ts +2 -1
  390. package/dist/dev/i18n/index.js +2 -1
  391. package/dist/dev/i18n/text.d.ts +11 -0
  392. package/dist/dev/i18n/text.d.ts.map +1 -0
  393. package/dist/dev/i18n/text.js +20 -0
  394. package/dist/dev/i18n/text.js.map +1 -0
  395. package/dist/dev/icons/dist/react/default/airplay-exit.js +3 -3
  396. package/dist/dev/icons/dist/react/default/airplay-exit.js.map +1 -1
  397. package/dist/dev/icons/dist/react/minimal/airplay-exit.js +3 -3
  398. package/dist/dev/icons/dist/react/minimal/airplay-exit.js.map +1 -1
  399. package/dist/dev/icons/index.d.ts +6 -1
  400. package/dist/dev/icons/index.d.ts.map +1 -0
  401. package/dist/dev/icons/minimal/index.d.ts +6 -1
  402. package/dist/dev/icons/minimal/index.d.ts.map +1 -0
  403. package/dist/dev/index.d.ts +3 -2
  404. package/dist/dev/index.js +2 -1
  405. package/dist/dev/media/audio.d.ts.map +1 -1
  406. package/dist/dev/media/audio.js +0 -1
  407. package/dist/dev/media/audio.js.map +1 -1
  408. package/dist/dev/media/hls-background-video/media.d.ts +8 -0
  409. package/dist/dev/media/hls-background-video/media.d.ts.map +1 -1
  410. package/dist/dev/media/hls-background-video/media.js +18 -3
  411. package/dist/dev/media/hls-background-video/media.js.map +1 -1
  412. package/dist/dev/media/video.d.ts.map +1 -1
  413. package/dist/dev/media/video.js +0 -1
  414. package/dist/dev/media/video.js.map +1 -1
  415. package/dist/dev/player/container.d.ts.map +1 -1
  416. package/dist/dev/player/container.js +0 -1
  417. package/dist/dev/player/container.js.map +1 -1
  418. package/dist/dev/player/context.d.ts.map +1 -1
  419. package/dist/dev/player/context.js +0 -1
  420. package/dist/dev/player/context.js.map +1 -1
  421. package/dist/dev/player/create-player.d.ts.map +1 -1
  422. package/dist/dev/player/create-player.js +0 -1
  423. package/dist/dev/player/create-player.js.map +1 -1
  424. package/dist/dev/player/popup-group-context.js +0 -1
  425. package/dist/dev/player/popup-group-context.js.map +1 -1
  426. package/dist/dev/presets/audio/minimal-skin.css +117 -118
  427. package/dist/dev/presets/audio/minimal-skin.d.ts.map +1 -1
  428. package/dist/dev/presets/audio/minimal-skin.js +2 -1
  429. package/dist/dev/presets/audio/minimal-skin.js.map +1 -1
  430. package/dist/dev/presets/audio/minimal-skin.tailwind.d.ts.map +1 -1
  431. package/dist/dev/presets/audio/minimal-skin.tailwind.js +2 -1
  432. package/dist/dev/presets/audio/minimal-skin.tailwind.js.map +1 -1
  433. package/dist/dev/presets/audio/player.d.ts +2 -2
  434. package/dist/dev/presets/audio/skin.css +95 -99
  435. package/dist/dev/presets/audio/skin.d.ts.map +1 -1
  436. package/dist/dev/presets/audio/skin.js +2 -1
  437. package/dist/dev/presets/audio/skin.js.map +1 -1
  438. package/dist/dev/presets/audio/skin.tailwind.d.ts.map +1 -1
  439. package/dist/dev/presets/audio/skin.tailwind.js +2 -1
  440. package/dist/dev/presets/audio/skin.tailwind.js.map +1 -1
  441. package/dist/dev/presets/background/skin.d.ts.map +1 -1
  442. package/dist/dev/presets/background/skin.js +1 -0
  443. package/dist/dev/presets/background/skin.js.map +1 -1
  444. package/dist/dev/presets/live-audio/minimal-skin.css +117 -118
  445. package/dist/dev/presets/live-audio/minimal-skin.d.ts.map +1 -1
  446. package/dist/dev/presets/live-audio/minimal-skin.js +1 -0
  447. package/dist/dev/presets/live-audio/minimal-skin.js.map +1 -1
  448. package/dist/dev/presets/live-audio/minimal-skin.tailwind.d.ts.map +1 -1
  449. package/dist/dev/presets/live-audio/minimal-skin.tailwind.js +1 -0
  450. package/dist/dev/presets/live-audio/minimal-skin.tailwind.js.map +1 -1
  451. package/dist/dev/presets/live-audio/player.d.ts +2 -2
  452. package/dist/dev/presets/live-audio/skin.css +95 -99
  453. package/dist/dev/presets/live-audio/skin.d.ts.map +1 -1
  454. package/dist/dev/presets/live-audio/skin.js +1 -0
  455. package/dist/dev/presets/live-audio/skin.js.map +1 -1
  456. package/dist/dev/presets/live-audio/skin.tailwind.d.ts.map +1 -1
  457. package/dist/dev/presets/live-audio/skin.tailwind.js +1 -0
  458. package/dist/dev/presets/live-audio/skin.tailwind.js.map +1 -1
  459. package/dist/dev/presets/live-video/minimal-skin.css +158 -137
  460. package/dist/dev/presets/live-video/minimal-skin.js +4 -8
  461. package/dist/dev/presets/live-video/minimal-skin.js.map +1 -1
  462. package/dist/dev/presets/live-video/minimal-skin.tailwind.js +6 -8
  463. package/dist/dev/presets/live-video/minimal-skin.tailwind.js.map +1 -1
  464. package/dist/dev/presets/live-video/player.d.ts +2 -2
  465. package/dist/dev/presets/live-video/skin.css +120 -106
  466. package/dist/dev/presets/live-video/skin.js +4 -8
  467. package/dist/dev/presets/live-video/skin.js.map +1 -1
  468. package/dist/dev/presets/live-video/skin.tailwind.js +8 -10
  469. package/dist/dev/presets/live-video/skin.tailwind.js.map +1 -1
  470. package/dist/dev/presets/types.d.ts +15 -2
  471. package/dist/dev/presets/types.d.ts.map +1 -1
  472. package/dist/dev/presets/video/minimal-skin.css +158 -137
  473. package/dist/dev/presets/video/minimal-skin.js +4 -8
  474. package/dist/dev/presets/video/minimal-skin.js.map +1 -1
  475. package/dist/dev/presets/video/minimal-skin.tailwind.js +6 -8
  476. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
  477. package/dist/dev/presets/video/player.d.ts +2 -2
  478. package/dist/dev/presets/video/skin.css +120 -106
  479. package/dist/dev/presets/video/skin.js +4 -8
  480. package/dist/dev/presets/video/skin.js.map +1 -1
  481. package/dist/dev/presets/video/skin.tailwind.js +7 -9
  482. package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
  483. package/dist/dev/skins/dist/default/default/tailwind/components/button.js +3 -1
  484. package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  485. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js +8 -1
  486. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  487. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +13 -13
  488. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  489. package/dist/dev/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
  490. package/dist/dev/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
  491. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +3 -3
  492. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  493. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
  494. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  495. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
  496. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  497. package/dist/dev/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
  498. package/dist/dev/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
  499. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +7 -6
  500. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  501. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js +4 -4
  502. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  503. package/dist/dev/ui/airplay-button/airplay-button.d.ts.map +1 -1
  504. package/dist/dev/ui/airplay-button/airplay-button.js +0 -1
  505. package/dist/dev/ui/airplay-button/airplay-button.js.map +1 -1
  506. package/dist/dev/ui/alert-dialog/alert-dialog-close.d.ts.map +1 -1
  507. package/dist/dev/ui/alert-dialog/alert-dialog-close.js +0 -1
  508. package/dist/dev/ui/alert-dialog/alert-dialog-close.js.map +1 -1
  509. package/dist/dev/ui/alert-dialog/alert-dialog-description.d.ts.map +1 -1
  510. package/dist/dev/ui/alert-dialog/alert-dialog-description.js +0 -1
  511. package/dist/dev/ui/alert-dialog/alert-dialog-description.js.map +1 -1
  512. package/dist/dev/ui/alert-dialog/alert-dialog-popup.d.ts.map +1 -1
  513. package/dist/dev/ui/alert-dialog/alert-dialog-popup.js +0 -1
  514. package/dist/dev/ui/alert-dialog/alert-dialog-popup.js.map +1 -1
  515. package/dist/dev/ui/alert-dialog/alert-dialog-root.d.ts.map +1 -1
  516. package/dist/dev/ui/alert-dialog/alert-dialog-root.js +0 -1
  517. package/dist/dev/ui/alert-dialog/alert-dialog-root.js.map +1 -1
  518. package/dist/dev/ui/alert-dialog/alert-dialog-title.d.ts.map +1 -1
  519. package/dist/dev/ui/alert-dialog/alert-dialog-title.js +0 -1
  520. package/dist/dev/ui/alert-dialog/alert-dialog-title.js.map +1 -1
  521. package/dist/dev/ui/alert-dialog/context.d.ts.map +1 -1
  522. package/dist/dev/ui/alert-dialog/context.js +0 -1
  523. package/dist/dev/ui/alert-dialog/context.js.map +1 -1
  524. package/dist/dev/ui/audio-track/use-audio-track-options.d.ts.map +1 -1
  525. package/dist/dev/ui/audio-track/use-audio-track-options.js +0 -1
  526. package/dist/dev/ui/audio-track/use-audio-track-options.js.map +1 -1
  527. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group.d.ts.map +1 -1
  528. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group.js +0 -1
  529. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group.js.map +1 -1
  530. package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts.map +1 -1
  531. package/dist/dev/ui/buffering-indicator/buffering-indicator.js +0 -1
  532. package/dist/dev/ui/buffering-indicator/buffering-indicator.js.map +1 -1
  533. package/dist/dev/ui/captions-button/captions-button.d.ts.map +1 -1
  534. package/dist/dev/ui/captions-button/captions-button.js +0 -1
  535. package/dist/dev/ui/captions-button/captions-button.js.map +1 -1
  536. package/dist/dev/ui/captions-radio-group/captions-radio-group.d.ts.map +1 -1
  537. package/dist/dev/ui/captions-radio-group/captions-radio-group.js +0 -1
  538. package/dist/dev/ui/captions-radio-group/captions-radio-group.js.map +1 -1
  539. package/dist/dev/ui/captions-radio-group/use-captions-options.d.ts.map +1 -1
  540. package/dist/dev/ui/captions-radio-group/use-captions-options.js +0 -1
  541. package/dist/dev/ui/captions-radio-group/use-captions-options.js.map +1 -1
  542. package/dist/dev/ui/cast-button/cast-button.d.ts.map +1 -1
  543. package/dist/dev/ui/cast-button/cast-button.js +0 -1
  544. package/dist/dev/ui/cast-button/cast-button.js.map +1 -1
  545. package/dist/dev/ui/controls/context.js +0 -1
  546. package/dist/dev/ui/controls/context.js.map +1 -1
  547. package/dist/dev/ui/controls/controls-group.d.ts.map +1 -1
  548. package/dist/dev/ui/controls/controls-group.js +0 -1
  549. package/dist/dev/ui/controls/controls-group.js.map +1 -1
  550. package/dist/dev/ui/controls/controls-root.d.ts.map +1 -1
  551. package/dist/dev/ui/controls/controls-root.js +0 -1
  552. package/dist/dev/ui/controls/controls-root.js.map +1 -1
  553. package/dist/dev/ui/create-context-part.js +0 -1
  554. package/dist/dev/ui/create-context-part.js.map +1 -1
  555. package/dist/dev/ui/create-media-button.js +0 -1
  556. package/dist/dev/ui/create-media-button.js.map +1 -1
  557. package/dist/dev/ui/error-dialog/context.d.ts.map +1 -1
  558. package/dist/dev/ui/error-dialog/context.js +0 -1
  559. package/dist/dev/ui/error-dialog/context.js.map +1 -1
  560. package/dist/dev/ui/error-dialog/error-dialog-close.d.ts.map +1 -1
  561. package/dist/dev/ui/error-dialog/error-dialog-close.js +0 -1
  562. package/dist/dev/ui/error-dialog/error-dialog-close.js.map +1 -1
  563. package/dist/dev/ui/error-dialog/error-dialog-description.d.ts.map +1 -1
  564. package/dist/dev/ui/error-dialog/error-dialog-description.js +0 -1
  565. package/dist/dev/ui/error-dialog/error-dialog-description.js.map +1 -1
  566. package/dist/dev/ui/error-dialog/error-dialog-root.d.ts.map +1 -1
  567. package/dist/dev/ui/error-dialog/error-dialog-root.js +0 -1
  568. package/dist/dev/ui/error-dialog/error-dialog-root.js.map +1 -1
  569. package/dist/dev/ui/error-dialog/error-dialog-title.d.ts.map +1 -1
  570. package/dist/dev/ui/error-dialog/error-dialog-title.js +0 -1
  571. package/dist/dev/ui/error-dialog/error-dialog-title.js.map +1 -1
  572. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts.map +1 -1
  573. package/dist/dev/ui/fullscreen-button/fullscreen-button.js +0 -1
  574. package/dist/dev/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  575. package/dist/dev/ui/gesture/gesture.d.ts +6 -13
  576. package/dist/dev/ui/gesture/gesture.d.ts.map +1 -1
  577. package/dist/dev/ui/gesture/gesture.js +0 -1
  578. package/dist/dev/ui/gesture/gesture.js.map +1 -1
  579. package/dist/dev/ui/gesture/use-doubletap-gesture.d.ts +2 -5
  580. package/dist/dev/ui/gesture/use-doubletap-gesture.d.ts.map +1 -1
  581. package/dist/dev/ui/gesture/use-doubletap-gesture.js +0 -1
  582. package/dist/dev/ui/gesture/use-doubletap-gesture.js.map +1 -1
  583. package/dist/dev/ui/gesture/use-tap-gesture.d.ts +2 -5
  584. package/dist/dev/ui/gesture/use-tap-gesture.d.ts.map +1 -1
  585. package/dist/dev/ui/gesture/use-tap-gesture.js +0 -1
  586. package/dist/dev/ui/gesture/use-tap-gesture.js.map +1 -1
  587. package/dist/dev/ui/hooks/create-radio-options-hook.d.ts.map +1 -1
  588. package/dist/dev/ui/hooks/create-radio-options-hook.js +0 -1
  589. package/dist/dev/ui/hooks/create-radio-options-hook.js.map +1 -1
  590. package/dist/dev/ui/hooks/use-button.d.ts.map +1 -1
  591. package/dist/dev/ui/hooks/use-button.js +0 -1
  592. package/dist/dev/ui/hooks/use-button.js.map +1 -1
  593. package/dist/dev/ui/hooks/use-positioned-state.js +0 -1
  594. package/dist/dev/ui/hooks/use-positioned-state.js.map +1 -1
  595. package/dist/dev/ui/hooks/use-slider.d.ts.map +1 -1
  596. package/dist/dev/ui/hooks/use-slider.js +0 -1
  597. package/dist/dev/ui/hooks/use-slider.js.map +1 -1
  598. package/dist/dev/ui/hotkey/hotkey.d.ts +6 -12
  599. package/dist/dev/ui/hotkey/hotkey.d.ts.map +1 -1
  600. package/dist/dev/ui/hotkey/hotkey.js +0 -1
  601. package/dist/dev/ui/hotkey/hotkey.js.map +1 -1
  602. package/dist/dev/ui/hotkey/use-hotkey-shortcut.d.ts.map +1 -1
  603. package/dist/dev/ui/hotkey/use-hotkey-shortcut.js +0 -1
  604. package/dist/dev/ui/hotkey/use-hotkey-shortcut.js.map +1 -1
  605. package/dist/dev/ui/hotkey/use-hotkey.d.ts.map +1 -1
  606. package/dist/dev/ui/hotkey/use-hotkey.js +0 -1
  607. package/dist/dev/ui/hotkey/use-hotkey.js.map +1 -1
  608. package/dist/dev/ui/input-indicator/use-indicator-visibility.js +0 -1
  609. package/dist/dev/ui/input-indicator/use-indicator-visibility.js.map +1 -1
  610. package/dist/dev/ui/input-indicator/use-input-action-subscription.js +0 -1
  611. package/dist/dev/ui/input-indicator/use-input-action-subscription.js.map +1 -1
  612. package/dist/dev/ui/input-indicator/use-input-indicator-root.js +0 -1
  613. package/dist/dev/ui/input-indicator/use-input-indicator-root.js.map +1 -1
  614. package/dist/dev/ui/input-indicator/use-rendered-indicator-state.js +0 -1
  615. package/dist/dev/ui/input-indicator/use-rendered-indicator-state.js.map +1 -1
  616. package/dist/dev/ui/live-button/live-button.d.ts.map +1 -1
  617. package/dist/dev/ui/live-button/live-button.js +0 -1
  618. package/dist/dev/ui/live-button/live-button.js.map +1 -1
  619. package/dist/dev/ui/menu/context.d.ts.map +1 -1
  620. package/dist/dev/ui/menu/context.js +6 -2
  621. package/dist/dev/ui/menu/context.js.map +1 -1
  622. package/dist/dev/ui/menu/menu-checkbox-item.d.ts.map +1 -1
  623. package/dist/dev/ui/menu/menu-checkbox-item.js +0 -1
  624. package/dist/dev/ui/menu/menu-checkbox-item.js.map +1 -1
  625. package/dist/dev/ui/menu/menu-content.d.ts.map +1 -1
  626. package/dist/dev/ui/menu/menu-content.js +0 -1
  627. package/dist/dev/ui/menu/menu-content.js.map +1 -1
  628. package/dist/dev/ui/menu/menu-group-label.d.ts.map +1 -1
  629. package/dist/dev/ui/menu/menu-group-label.js +0 -1
  630. package/dist/dev/ui/menu/menu-group-label.js.map +1 -1
  631. package/dist/dev/ui/menu/menu-group.d.ts.map +1 -1
  632. package/dist/dev/ui/menu/menu-group.js +0 -1
  633. package/dist/dev/ui/menu/menu-group.js.map +1 -1
  634. package/dist/dev/ui/menu/menu-item-indicator.d.ts.map +1 -1
  635. package/dist/dev/ui/menu/menu-item-indicator.js +3 -3
  636. package/dist/dev/ui/menu/menu-item-indicator.js.map +1 -1
  637. package/dist/dev/ui/menu/menu-item.d.ts.map +1 -1
  638. package/dist/dev/ui/menu/menu-item.js +0 -1
  639. package/dist/dev/ui/menu/menu-item.js.map +1 -1
  640. package/dist/dev/ui/menu/menu-radio-group.d.ts.map +1 -1
  641. package/dist/dev/ui/menu/menu-radio-group.js +0 -1
  642. package/dist/dev/ui/menu/menu-radio-group.js.map +1 -1
  643. package/dist/dev/ui/menu/menu-radio-item.d.ts.map +1 -1
  644. package/dist/dev/ui/menu/menu-radio-item.js +19 -16
  645. package/dist/dev/ui/menu/menu-radio-item.js.map +1 -1
  646. package/dist/dev/ui/menu/menu-root.d.ts.map +1 -1
  647. package/dist/dev/ui/menu/menu-root.js +5 -7
  648. package/dist/dev/ui/menu/menu-root.js.map +1 -1
  649. package/dist/dev/ui/menu/menu-separator.d.ts.map +1 -1
  650. package/dist/dev/ui/menu/menu-separator.js +0 -1
  651. package/dist/dev/ui/menu/menu-separator.js.map +1 -1
  652. package/dist/dev/ui/menu/menu-trigger.d.ts.map +1 -1
  653. package/dist/dev/ui/menu/menu-trigger.js +26 -12
  654. package/dist/dev/ui/menu/menu-trigger.js.map +1 -1
  655. package/dist/dev/ui/menu/use-menu-group.js +0 -1
  656. package/dist/dev/ui/menu/use-menu-group.js.map +1 -1
  657. package/dist/dev/ui/mute-button/mute-button.d.ts.map +1 -1
  658. package/dist/dev/ui/mute-button/mute-button.js +0 -1
  659. package/dist/dev/ui/mute-button/mute-button.js.map +1 -1
  660. package/dist/dev/ui/pip-button/pip-button.d.ts.map +1 -1
  661. package/dist/dev/ui/pip-button/pip-button.js +0 -1
  662. package/dist/dev/ui/pip-button/pip-button.js.map +1 -1
  663. package/dist/dev/ui/play-button/play-button.d.ts.map +1 -1
  664. package/dist/dev/ui/play-button/play-button.js +0 -1
  665. package/dist/dev/ui/play-button/play-button.js.map +1 -1
  666. package/dist/dev/ui/playback-rate/use-playback-rate-options.d.ts.map +1 -1
  667. package/dist/dev/ui/playback-rate/use-playback-rate-options.js +0 -1
  668. package/dist/dev/ui/playback-rate/use-playback-rate-options.js.map +1 -1
  669. package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts.map +1 -1
  670. package/dist/dev/ui/playback-rate-button/playback-rate-button.js +0 -1
  671. package/dist/dev/ui/playback-rate-button/playback-rate-button.js.map +1 -1
  672. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group.d.ts.map +1 -1
  673. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group.js +0 -1
  674. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group.js.map +1 -1
  675. package/dist/dev/ui/popover/context.d.ts.map +1 -1
  676. package/dist/dev/ui/popover/context.js +0 -1
  677. package/dist/dev/ui/popover/context.js.map +1 -1
  678. package/dist/dev/ui/popover/popover-arrow.d.ts.map +1 -1
  679. package/dist/dev/ui/popover/popover-arrow.js +0 -1
  680. package/dist/dev/ui/popover/popover-arrow.js.map +1 -1
  681. package/dist/dev/ui/popover/popover-popup.d.ts.map +1 -1
  682. package/dist/dev/ui/popover/popover-popup.js +0 -1
  683. package/dist/dev/ui/popover/popover-popup.js.map +1 -1
  684. package/dist/dev/ui/popover/popover-root.d.ts.map +1 -1
  685. package/dist/dev/ui/popover/popover-root.js +0 -1
  686. package/dist/dev/ui/popover/popover-root.js.map +1 -1
  687. package/dist/dev/ui/popover/popover-trigger.d.ts.map +1 -1
  688. package/dist/dev/ui/popover/popover-trigger.js +0 -1
  689. package/dist/dev/ui/popover/popover-trigger.js.map +1 -1
  690. package/dist/dev/ui/popover/use-popup-position.js +0 -1
  691. package/dist/dev/ui/popover/use-popup-position.js.map +1 -1
  692. package/dist/dev/ui/poster/poster.d.ts +15 -4
  693. package/dist/dev/ui/poster/poster.d.ts.map +1 -1
  694. package/dist/dev/ui/poster/poster.js +64 -18
  695. package/dist/dev/ui/poster/poster.js.map +1 -1
  696. package/dist/dev/ui/quality/use-quality-options.d.ts.map +1 -1
  697. package/dist/dev/ui/quality/use-quality-options.js +0 -1
  698. package/dist/dev/ui/quality/use-quality-options.js.map +1 -1
  699. package/dist/dev/ui/quality-radio-group/quality-radio-group.d.ts.map +1 -1
  700. package/dist/dev/ui/quality-radio-group/quality-radio-group.js +0 -1
  701. package/dist/dev/ui/quality-radio-group/quality-radio-group.js.map +1 -1
  702. package/dist/dev/ui/seek-button/seek-button.d.ts.map +1 -1
  703. package/dist/dev/ui/seek-button/seek-button.js +0 -1
  704. package/dist/dev/ui/seek-button/seek-button.js.map +1 -1
  705. package/dist/dev/ui/seek-indicator/context.js +0 -1
  706. package/dist/dev/ui/seek-indicator/context.js.map +1 -1
  707. package/dist/dev/ui/seek-indicator/seek-indicator-root.d.ts.map +1 -1
  708. package/dist/dev/ui/seek-indicator/seek-indicator-root.js +0 -1
  709. package/dist/dev/ui/seek-indicator/seek-indicator-root.js.map +1 -1
  710. package/dist/dev/ui/seek-indicator/seek-indicator-value.d.ts.map +1 -1
  711. package/dist/dev/ui/seek-indicator/seek-indicator-value.js +0 -1
  712. package/dist/dev/ui/seek-indicator/seek-indicator-value.js.map +1 -1
  713. package/dist/dev/ui/slider/context.js +0 -1
  714. package/dist/dev/ui/slider/context.js.map +1 -1
  715. package/dist/dev/ui/slider/slider-buffer.d.ts.map +1 -1
  716. package/dist/dev/ui/slider/slider-buffer.js +0 -1
  717. package/dist/dev/ui/slider/slider-buffer.js.map +1 -1
  718. package/dist/dev/ui/slider/slider-fill.d.ts.map +1 -1
  719. package/dist/dev/ui/slider/slider-fill.js +0 -1
  720. package/dist/dev/ui/slider/slider-fill.js.map +1 -1
  721. package/dist/dev/ui/slider/slider-preview.d.ts +5 -9
  722. package/dist/dev/ui/slider/slider-preview.d.ts.map +1 -1
  723. package/dist/dev/ui/slider/slider-preview.js +0 -1
  724. package/dist/dev/ui/slider/slider-preview.js.map +1 -1
  725. package/dist/dev/ui/slider/slider-root.d.ts.map +1 -1
  726. package/dist/dev/ui/slider/slider-root.js +0 -1
  727. package/dist/dev/ui/slider/slider-root.js.map +1 -1
  728. package/dist/dev/ui/slider/slider-thumb.d.ts.map +1 -1
  729. package/dist/dev/ui/slider/slider-thumb.js +0 -1
  730. package/dist/dev/ui/slider/slider-thumb.js.map +1 -1
  731. package/dist/dev/ui/slider/slider-thumbnail.d.ts.map +1 -1
  732. package/dist/dev/ui/slider/slider-thumbnail.js +0 -1
  733. package/dist/dev/ui/slider/slider-thumbnail.js.map +1 -1
  734. package/dist/dev/ui/slider/slider-track.d.ts.map +1 -1
  735. package/dist/dev/ui/slider/slider-track.js +0 -1
  736. package/dist/dev/ui/slider/slider-track.js.map +1 -1
  737. package/dist/dev/ui/slider/slider-value.d.ts.map +1 -1
  738. package/dist/dev/ui/slider/slider-value.js +0 -1
  739. package/dist/dev/ui/slider/slider-value.js.map +1 -1
  740. package/dist/dev/ui/status-announcer/status-announcer.d.ts.map +1 -1
  741. package/dist/dev/ui/status-announcer/status-announcer.js +0 -1
  742. package/dist/dev/ui/status-announcer/status-announcer.js.map +1 -1
  743. package/dist/dev/ui/status-indicator/context.js +0 -1
  744. package/dist/dev/ui/status-indicator/context.js.map +1 -1
  745. package/dist/dev/ui/status-indicator/status-indicator-root.d.ts.map +1 -1
  746. package/dist/dev/ui/status-indicator/status-indicator-root.js +0 -1
  747. package/dist/dev/ui/status-indicator/status-indicator-root.js.map +1 -1
  748. package/dist/dev/ui/status-indicator/status-indicator-value.d.ts.map +1 -1
  749. package/dist/dev/ui/status-indicator/status-indicator-value.js +0 -1
  750. package/dist/dev/ui/status-indicator/status-indicator-value.js.map +1 -1
  751. package/dist/dev/ui/thumbnail/thumbnail.d.ts.map +1 -1
  752. package/dist/dev/ui/thumbnail/thumbnail.js +0 -1
  753. package/dist/dev/ui/thumbnail/thumbnail.js.map +1 -1
  754. package/dist/dev/ui/time/time-group.d.ts.map +1 -1
  755. package/dist/dev/ui/time/time-group.js +0 -1
  756. package/dist/dev/ui/time/time-group.js.map +1 -1
  757. package/dist/dev/ui/time/time-separator.d.ts.map +1 -1
  758. package/dist/dev/ui/time/time-separator.js +0 -1
  759. package/dist/dev/ui/time/time-separator.js.map +1 -1
  760. package/dist/dev/ui/time/time-value.d.ts.map +1 -1
  761. package/dist/dev/ui/time/time-value.js +0 -1
  762. package/dist/dev/ui/time/time-value.js.map +1 -1
  763. package/dist/dev/ui/time-slider/time-slider-chapters/slider-segments.js +0 -1
  764. package/dist/dev/ui/time-slider/time-slider-chapters/slider-segments.js.map +1 -1
  765. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapter-title.d.ts.map +1 -1
  766. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapter-title.js +0 -1
  767. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapter-title.js.map +1 -1
  768. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapters.d.ts.map +1 -1
  769. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapters.js +0 -1
  770. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapters.js.map +1 -1
  771. package/dist/dev/ui/time-slider/time-slider-root.d.ts.map +1 -1
  772. package/dist/dev/ui/time-slider/time-slider-root.js +0 -1
  773. package/dist/dev/ui/time-slider/time-slider-root.js.map +1 -1
  774. package/dist/dev/ui/tooltip/context.d.ts.map +1 -1
  775. package/dist/dev/ui/tooltip/context.js +0 -1
  776. package/dist/dev/ui/tooltip/context.js.map +1 -1
  777. package/dist/dev/ui/tooltip/group-context.js +0 -1
  778. package/dist/dev/ui/tooltip/group-context.js.map +1 -1
  779. package/dist/dev/ui/tooltip/tooltip-arrow.d.ts.map +1 -1
  780. package/dist/dev/ui/tooltip/tooltip-arrow.js +0 -1
  781. package/dist/dev/ui/tooltip/tooltip-arrow.js.map +1 -1
  782. package/dist/dev/ui/tooltip/tooltip-label.d.ts.map +1 -1
  783. package/dist/dev/ui/tooltip/tooltip-label.js +0 -1
  784. package/dist/dev/ui/tooltip/tooltip-label.js.map +1 -1
  785. package/dist/dev/ui/tooltip/tooltip-popup.d.ts.map +1 -1
  786. package/dist/dev/ui/tooltip/tooltip-popup.js +0 -1
  787. package/dist/dev/ui/tooltip/tooltip-popup.js.map +1 -1
  788. package/dist/dev/ui/tooltip/tooltip-provider.d.ts.map +1 -1
  789. package/dist/dev/ui/tooltip/tooltip-provider.js +0 -1
  790. package/dist/dev/ui/tooltip/tooltip-provider.js.map +1 -1
  791. package/dist/dev/ui/tooltip/tooltip-root.d.ts.map +1 -1
  792. package/dist/dev/ui/tooltip/tooltip-root.js +0 -1
  793. package/dist/dev/ui/tooltip/tooltip-root.js.map +1 -1
  794. package/dist/dev/ui/tooltip/tooltip-shortcut.d.ts.map +1 -1
  795. package/dist/dev/ui/tooltip/tooltip-shortcut.js +0 -1
  796. package/dist/dev/ui/tooltip/tooltip-shortcut.js.map +1 -1
  797. package/dist/dev/ui/tooltip/tooltip-trigger.d.ts.map +1 -1
  798. package/dist/dev/ui/tooltip/tooltip-trigger.js +0 -1
  799. package/dist/dev/ui/tooltip/tooltip-trigger.js.map +1 -1
  800. package/dist/dev/ui/volume-indicator/context.js +0 -1
  801. package/dist/dev/ui/volume-indicator/context.js.map +1 -1
  802. package/dist/dev/ui/volume-indicator/volume-indicator-fill.d.ts.map +1 -1
  803. package/dist/dev/ui/volume-indicator/volume-indicator-fill.js +0 -1
  804. package/dist/dev/ui/volume-indicator/volume-indicator-fill.js.map +1 -1
  805. package/dist/dev/ui/volume-indicator/volume-indicator-root.d.ts.map +1 -1
  806. package/dist/dev/ui/volume-indicator/volume-indicator-root.js +0 -1
  807. package/dist/dev/ui/volume-indicator/volume-indicator-root.js.map +1 -1
  808. package/dist/dev/ui/volume-indicator/volume-indicator-value.d.ts.map +1 -1
  809. package/dist/dev/ui/volume-indicator/volume-indicator-value.js +0 -1
  810. package/dist/dev/ui/volume-indicator/volume-indicator-value.js.map +1 -1
  811. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts.map +1 -1
  812. package/dist/dev/ui/volume-slider/volume-slider-root.js +0 -1
  813. package/dist/dev/ui/volume-slider/volume-slider-root.js.map +1 -1
  814. package/dist/dev/utils/merge-props.d.ts.map +1 -1
  815. package/dist/dev/utils/merge-props.js +0 -1
  816. package/dist/dev/utils/merge-props.js.map +1 -1
  817. package/dist/dev/utils/use-attach-iframe.js +0 -1
  818. package/dist/dev/utils/use-attach-iframe.js.map +1 -1
  819. package/dist/dev/utils/use-attach-media.d.ts.map +1 -1
  820. package/dist/dev/utils/use-attach-media.js +0 -1
  821. package/dist/dev/utils/use-attach-media.js.map +1 -1
  822. package/dist/dev/utils/use-composed-refs.d.ts.map +1 -1
  823. package/dist/dev/utils/use-composed-refs.js +0 -1
  824. package/dist/dev/utils/use-composed-refs.js.map +1 -1
  825. package/dist/dev/utils/use-destroy.d.ts.map +1 -1
  826. package/dist/dev/utils/use-destroy.js +0 -1
  827. package/dist/dev/utils/use-destroy.js.map +1 -1
  828. package/dist/dev/utils/use-force-render.js +0 -1
  829. package/dist/dev/utils/use-force-render.js.map +1 -1
  830. package/dist/dev/utils/use-latest-ref.d.ts.map +1 -1
  831. package/dist/dev/utils/use-latest-ref.js +0 -1
  832. package/dist/dev/utils/use-latest-ref.js.map +1 -1
  833. package/dist/dev/utils/use-media-component.d.ts.map +1 -1
  834. package/dist/dev/utils/use-media-component.js +0 -1
  835. package/dist/dev/utils/use-media-component.js.map +1 -1
  836. package/dist/dev/utils/use-media-instance.d.ts.map +1 -1
  837. package/dist/dev/utils/use-media-instance.js +0 -1
  838. package/dist/dev/utils/use-media-instance.js.map +1 -1
  839. package/dist/dev/utils/use-render.d.ts.map +1 -1
  840. package/dist/dev/utils/use-render.js +2 -9
  841. package/dist/dev/utils/use-render.js.map +1 -1
  842. package/dist/dev/utils/use-safe-id.js +0 -1
  843. package/dist/dev/utils/use-safe-id.js.map +1 -1
  844. package/docs/README.md +1 -1
  845. package/docs/concepts/features.md +2 -2
  846. package/docs/concepts/media-sources.md +79 -1
  847. package/docs/concepts/skins.md +128 -126
  848. package/docs/how-to/build-your-own-component.md +1 -1
  849. package/docs/how-to/customize-skins.md +511 -505
  850. package/docs/how-to/migrate-from-media-chrome.md +412 -0
  851. package/docs/how-to/migrate-from-mux-player.md +551 -0
  852. package/docs/how-to/migrate-from-plyr.md +385 -0
  853. package/docs/how-to/migrate-from-video-js-8.md +594 -0
  854. package/docs/llms.txt +9 -0
  855. package/docs/reference/create-player.md +2 -2
  856. package/docs/reference/feature-volume.md +4 -2
  857. package/docs/reference/menu.md +6 -18
  858. package/docs/reference/mute-button.md +34 -0
  859. package/docs/reference/popover.md +6 -6
  860. package/docs/reference/poster.md +187 -13
  861. package/docs/reference/slider.md +1 -1
  862. package/docs/reference/time-slider.md +1 -1
  863. package/docs/reference/tooltip.md +10 -10
  864. package/docs/reference/volume-slider.md +2 -2
  865. package/package.json +13 -8
@@ -1 +1 @@
1
- {"version":3,"file":"use-render.js","names":[],"sources":["../../../src/utils/use-render.tsx"],"sourcesContent":["'use client';\n\nimport { getStateDataAttrs, type StateAttrMap } from '@videojs/core/dom';\nimport { isFunction } from '@videojs/utils/predicate';\nimport type { CSSProperties, ReactElement, Ref } from 'react';\nimport { cloneElement, createElement, isValidElement } from 'react';\nimport { mergeProps } from './merge-props';\nimport type { HTMLProps, RenderProp } from './types';\nimport { composeRefs } from './use-composed-refs';\n\n/** Check if a value is a render prop (function or React element). */\nexport function isRenderProp(value: unknown): value is RenderProp<unknown> {\n return isFunction(value) || isValidElement(value);\n}\n\ntype IntrinsicTagName = keyof React.JSX.IntrinsicElements;\n\nexport interface UseRenderComponentProps<State> {\n className?: string | ((state: State) => string | undefined) | undefined;\n style?: CSSProperties | ((state: State) => CSSProperties | undefined) | undefined;\n render?: RenderProp<State> | undefined;\n}\n\nexport interface UseRenderParameters<State, RenderedElementType extends Element> {\n state: State;\n ref?: Ref<RenderedElementType> | Ref<RenderedElementType>[] | undefined;\n props?: object | object[] | undefined;\n stateAttrMap?: StateAttrMap<State> | undefined;\n}\n\nfunction resolveClassName<State>(\n className: string | ((state: State) => string | undefined) | undefined,\n state: State\n): string | undefined {\n return isFunction(className) ? className(state) : className;\n}\n\nfunction resolveStyle<State>(\n style: CSSProperties | ((state: State) => CSSProperties | undefined) | undefined,\n state: State\n): CSSProperties | undefined {\n return isFunction(style) ? style(state) : style;\n}\n\nfunction getElementRef(element: ReactElement): Ref<unknown> | undefined {\n // React 19+ uses element.props.ref, older versions use element.ref\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const elementAny = element as any;\n return elementAny.ref ?? elementAny.props?.ref;\n}\n\n/**\n * Render a UI component element.\n *\n * Handles:\n * - Default tag rendering\n * - Render prop (element or function)\n * - Props merging (event handlers chained, className concatenated, style merged)\n * - Ref composition\n * - className/style as functions of state\n *\n * @public\n * @example\n * ```tsx\n * return renderElement('button', componentProps, {\n * state,\n * ref: [forwardedRef, buttonRef],\n * props: [{ type: 'button' }, elementProps, getButtonProps],\n * });\n * ```\n */\nexport function renderElement<\n State extends object,\n RenderedElementType extends Element,\n TagName extends IntrinsicTagName,\n>(\n element: TagName,\n componentProps: UseRenderComponentProps<State>,\n params: UseRenderParameters<State, RenderedElementType>\n): ReactElement | null {\n const { className: classNameProp, style: styleProp, render } = componentProps;\n const { state, ref, props, stateAttrMap } = params;\n\n // Resolve className and style if they're functions\n const className = resolveClassName(classNameProp, state);\n const style = resolveStyle(styleProp, state);\n\n // Generate data attributes only when a component explicitly opts in with a\n // mapping. State is still passed to render/className/style callbacks.\n const stateDataAttrs = stateAttrMap ? getStateDataAttrs(state, stateAttrMap) : {};\n\n // Merge: state data attrs first, then props (so props can override)\n const propsArray = Array.isArray(props) ? props : props ? [props] : [];\n const mergedProps = mergeProps(stateDataAttrs, ...(propsArray as Record<string, unknown>[]));\n\n if (className !== undefined) {\n // Add resolved className and style\n mergedProps.className = mergedProps.className ? `${mergedProps.className} ${className}` : className;\n }\n\n if (style !== undefined) {\n mergedProps.style = mergedProps.style ? { ...(mergedProps.style as CSSProperties), ...style } : style;\n }\n\n if (isFunction(render)) {\n // Render function: call with props and state\n const mergedRef = composeRefs(ref, mergedProps.ref);\n return render({ ...mergedProps, ref: mergedRef } as HTMLProps, state);\n }\n\n if (isValidElement(render)) {\n const elementRef = getElementRef(render);\n\n const mergedRef = composeRefs(ref, mergedProps.ref, elementRef);\n\n const elementProps = mergeProps(mergedProps, render.props as Record<string, unknown>);\n elementProps.ref = mergedRef;\n\n return cloneElement(render, elementProps);\n }\n\n // Default tag\n const mergedRef = composeRefs(ref, mergedProps.ref);\n mergedProps.ref = mergedRef;\n\n return createElement(element, mergedProps);\n}\n\nexport namespace renderElement {\n export type ComponentProps<State> = UseRenderComponentProps<State>;\n export type Parameters<State, RenderedElementType extends Element> = UseRenderParameters<State, RenderedElementType>;\n}\n"],"mappings":";;;;;;;;AAWA,SAAgB,aAAa,OAA8C;CACzE,OAAO,WAAW,KAAK,KAAK,eAAe,KAAK;AAClD;AAiBA,SAAS,iBACP,WACA,OACoB;CACpB,OAAO,WAAW,SAAS,IAAI,UAAU,KAAK,IAAI;AACpD;AAEA,SAAS,aACP,OACA,OAC2B;CAC3B,OAAO,WAAW,KAAK,IAAI,MAAM,KAAK,IAAI;AAC5C;AAEA,SAAS,cAAc,SAAiD;CAGtE,MAAM,aAAa;CACnB,OAAO,WAAW,OAAO,WAAW,OAAO;AAC7C;;;;;;;;;;;;;;;;;;;;;AAsBA,SAAgB,cAKd,SACA,gBACA,QACqB;CACrB,MAAM,EAAE,WAAW,eAAe,OAAO,WAAW,WAAW;CAC/D,MAAM,EAAE,OAAO,KAAK,OAAO,iBAAiB;CAG5C,MAAM,YAAY,iBAAiB,eAAe,KAAK;CACvD,MAAM,QAAQ,aAAa,WAAW,KAAK;CAQ3C,MAAM,cAAc,WAJG,eAAe,kBAAkB,OAAO,YAAY,IAAI,CAAC,GAIjC,GAD5B,MAAM,QAAQ,KAAK,IAAI,QAAQ,QAAQ,CAAC,KAAK,IAAI,CAAC,CACsB;CAE3F,IAAI,cAAc,KAAA,GAEhB,YAAY,YAAY,YAAY,YAAY,GAAG,YAAY,UAAU,GAAG,cAAc;CAG5F,IAAI,UAAU,KAAA,GACZ,YAAY,QAAQ,YAAY,QAAQ;EAAE,GAAI,YAAY;EAAyB,GAAG;CAAM,IAAI;CAGlG,IAAI,WAAW,MAAM,GAAG;EAEtB,MAAM,YAAY,YAAY,KAAK,YAAY,GAAG;EAClD,OAAO,OAAO;GAAE,GAAG;GAAa,KAAK;EAAU,GAAgB,KAAK;CACtE;CAEA,IAAI,eAAe,MAAM,GAAG;EAC1B,MAAM,aAAa,cAAc,MAAM;EAEvC,MAAM,YAAY,YAAY,KAAK,YAAY,KAAK,UAAU;EAE9D,MAAM,eAAe,WAAW,aAAa,OAAO,KAAgC;EACpF,aAAa,MAAM;EAEnB,OAAO,aAAa,QAAQ,YAAY;CAC1C;CAIA,YAAY,MADM,YAAY,KAAK,YAAY,GACrB;CAE1B,OAAO,cAAc,SAAS,WAAW;AAC3C"}
1
+ {"version":3,"file":"use-render.js","names":[],"sources":["../../../src/utils/use-render.tsx"],"sourcesContent":["import { getStateDataAttrs, type StateAttrMap } from '@videojs/core/dom';\nimport { isFunction } from '@videojs/utils/predicate';\nimport { resolveClassName } from '@videojs/utils/style';\nimport type { CSSProperties, ReactElement, Ref } from 'react';\nimport { cloneElement, createElement, isValidElement } from 'react';\nimport { mergeProps } from './merge-props';\nimport type { HTMLProps, RenderProp } from './types';\nimport { composeRefs } from './use-composed-refs';\n\n/** Check if a value is a render prop (function or React element). */\nexport function isRenderProp(value: unknown): value is RenderProp<unknown> {\n return isFunction(value) || isValidElement(value);\n}\n\ntype IntrinsicTagName = keyof React.JSX.IntrinsicElements;\n\nexport interface UseRenderComponentProps<State> {\n className?: string | ((state: State) => string | undefined) | undefined;\n style?: CSSProperties | ((state: State) => CSSProperties | undefined) | undefined;\n render?: RenderProp<State> | undefined;\n}\n\nexport interface UseRenderParameters<State, RenderedElementType extends Element> {\n state: State;\n ref?: Ref<RenderedElementType> | Ref<RenderedElementType>[] | undefined;\n props?: object | object[] | undefined;\n stateAttrMap?: StateAttrMap<State> | undefined;\n}\n\nfunction resolveStyle<State>(\n style: CSSProperties | ((state: State) => CSSProperties | undefined) | undefined,\n state: State\n): CSSProperties | undefined {\n return isFunction(style) ? style(state) : style;\n}\n\nfunction getElementRef(element: ReactElement): Ref<unknown> | undefined {\n // React 19+ uses element.props.ref, older versions use element.ref\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const elementAny = element as any;\n return elementAny.ref ?? elementAny.props?.ref;\n}\n\n/**\n * Render a UI component element.\n *\n * Handles:\n * - Default tag rendering\n * - Render prop (element or function)\n * - Props merging (event handlers chained, className concatenated, style merged)\n * - Ref composition\n * - className/style as functions of state\n *\n * @public\n * @example\n * ```tsx\n * return renderElement('button', componentProps, {\n * state,\n * ref: [forwardedRef, buttonRef],\n * props: [{ type: 'button' }, elementProps, getButtonProps],\n * });\n * ```\n */\nexport function renderElement<\n State extends object,\n RenderedElementType extends Element,\n TagName extends IntrinsicTagName,\n>(\n element: TagName,\n componentProps: UseRenderComponentProps<State>,\n params: UseRenderParameters<State, RenderedElementType>\n): ReactElement | null {\n const { className: classNameProp, style: styleProp, render } = componentProps;\n const { state, ref, props, stateAttrMap } = params;\n\n // Resolve className and style if they're functions\n const className = resolveClassName(classNameProp, state);\n const style = resolveStyle(styleProp, state);\n\n // Generate data attributes only when a component explicitly opts in with a\n // mapping. State is still passed to render/className/style callbacks.\n const stateDataAttrs = stateAttrMap ? getStateDataAttrs(state, stateAttrMap) : {};\n\n // Merge: state data attrs first, then props (so props can override)\n const propsArray = Array.isArray(props) ? props : props ? [props] : [];\n const mergedProps = mergeProps(stateDataAttrs, ...(propsArray as Record<string, unknown>[]));\n\n if (className !== undefined) {\n // Add resolved className and style\n mergedProps.className = mergedProps.className ? `${mergedProps.className} ${className}` : className;\n }\n\n if (style !== undefined) {\n mergedProps.style = mergedProps.style ? { ...(mergedProps.style as CSSProperties), ...style } : style;\n }\n\n if (isFunction(render)) {\n // Render function: call with props and state\n const mergedRef = composeRefs(ref, mergedProps.ref);\n return render({ ...mergedProps, ref: mergedRef } as HTMLProps, state);\n }\n\n if (isValidElement(render)) {\n const elementRef = getElementRef(render);\n\n const mergedRef = composeRefs(ref, mergedProps.ref, elementRef);\n\n const elementProps = mergeProps(mergedProps, render.props as Record<string, unknown>);\n elementProps.ref = mergedRef;\n\n return cloneElement(render, elementProps);\n }\n\n // Default tag\n const mergedRef = composeRefs(ref, mergedProps.ref);\n mergedProps.ref = mergedRef;\n\n return createElement(element, mergedProps);\n}\n\nexport namespace renderElement {\n export type ComponentProps<State> = UseRenderComponentProps<State>;\n export type Parameters<State, RenderedElementType extends Element> = UseRenderParameters<State, RenderedElementType>;\n}\n"],"mappings":";;;;;;;AA6BA,SAAS,aACP,OACA,OAC2B;CAC3B,OAAO,WAAW,KAAK,IAAI,MAAM,KAAK,IAAI;AAC5C;AAEA,SAAS,cAAc,SAAiD;CAGtE,MAAM,aAAa;CACnB,OAAO,WAAW,OAAO,WAAW,OAAO;AAC7C;;;;;;;;;;;;;;;;;;;;;AAsBA,SAAgB,cAKd,SACA,gBACA,QACqB;CACrB,MAAM,EAAE,WAAW,eAAe,OAAO,WAAW,WAAW;CAC/D,MAAM,EAAE,OAAO,KAAK,OAAO,iBAAiB;CAG5C,MAAM,YAAY,iBAAiB,eAAe,KAAK;CACvD,MAAM,QAAQ,aAAa,WAAW,KAAK;CAQ3C,MAAM,cAAc,WAJG,eAAe,kBAAkB,OAAO,YAAY,IAAI,CAAC,GAIjC,GAD5B,MAAM,QAAQ,KAAK,IAAI,QAAQ,QAAQ,CAAC,KAAK,IAAI,CAAC,CACsB;CAE3F,IAAI,cAAc,KAAA,GAEhB,YAAY,YAAY,YAAY,YAAY,GAAG,YAAY,UAAU,GAAG,cAAc;CAG5F,IAAI,UAAU,KAAA,GACZ,YAAY,QAAQ,YAAY,QAAQ;EAAE,GAAI,YAAY;EAAyB,GAAG;CAAM,IAAI;CAGlG,IAAI,WAAW,MAAM,GAAG;EAEtB,MAAM,YAAY,YAAY,KAAK,YAAY,GAAG;EAClD,OAAO,OAAO;GAAE,GAAG;GAAa,KAAK;EAAU,GAAgB,KAAK;CACtE;CAEA,IAAI,eAAe,MAAM,GAAG;EAC1B,MAAM,aAAa,cAAc,MAAM;EAEvC,MAAM,YAAY,YAAY,KAAK,YAAY,KAAK,UAAU;EAE9D,MAAM,eAAe,WAAW,aAAa,OAAO,KAAgC;EACpF,aAAa,MAAM;EAEnB,OAAO,aAAa,QAAQ,YAAY;CAC1C;CAIA,YAAY,MADM,YAAY,KAAK,YAAY,GACrB;CAE1B,OAAO,cAAc,SAAS,WAAW;AAC3C"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useId } from "react";
3
2
  //#region src/utils/use-safe-id.ts
4
3
  const UNSAFE_CHARS = /[^a-zA-Z0-9_-]/g;
@@ -1 +1 @@
1
- {"version":3,"file":"use-safe-id.js","names":[],"sources":["../../../src/utils/use-safe-id.ts"],"sourcesContent":["'use client';\n\nimport { useId } from 'react';\n\nconst UNSAFE_CHARS = /[^a-zA-Z0-9_-]/g;\n\n/**\n * Generate a CSS-safe identifier from React's `useId()`.\n *\n * `useId()` returns values like `:r0:` which contain colons — invalid\n * in CSS `<dashed-ident>` tokens (used by `anchor-name` / `position-anchor`).\n * This hook strips non-alphanumeric/underscore/hyphen characters and\n * optionally prepends a prefix.\n */\nexport function useSafeId(prefix?: string): string {\n const raw = useId().replace(UNSAFE_CHARS, '');\n return prefix ? `${prefix}-${raw}` : raw;\n}\n"],"mappings":";;;AAIA,MAAM,eAAe;;;;;;;;;AAUrB,SAAgB,UAAU,QAAyB;CACjD,MAAM,MAAM,MAAM,CAAC,CAAC,QAAQ,cAAc,EAAE;CAC5C,OAAO,SAAS,GAAG,OAAO,GAAG,QAAQ;AACvC"}
1
+ {"version":3,"file":"use-safe-id.js","names":[],"sources":["../../../src/utils/use-safe-id.ts"],"sourcesContent":["import { useId } from 'react';\n\nconst UNSAFE_CHARS = /[^a-zA-Z0-9_-]/g;\n\n/**\n * Generate a CSS-safe identifier from React's `useId()`.\n *\n * `useId()` returns values like `:r0:` which contain colons — invalid\n * in CSS `<dashed-ident>` tokens (used by `anchor-name` / `position-anchor`).\n * This hook strips non-alphanumeric/underscore/hyphen characters and\n * optionally prepends a prefix.\n */\nexport function useSafeId(prefix?: string): string {\n const raw = useId().replace(UNSAFE_CHARS, '');\n return prefix ? `${prefix}-${raw}` : raw;\n}\n"],"mappings":";;AAEA,MAAM,eAAe;;;;;;;;;AAUrB,SAAgB,UAAU,QAAyB;CACjD,MAAM,MAAM,MAAM,CAAC,CAAC,QAAQ,cAAc,EAAE;CAC5C,OAAO,SAAS,GAAG,OAAO,GAAG,QAAQ;AACvC"}
package/docs/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @videojs/react documentation
2
2
 
3
- Bundled markdown documentation for `@videojs/react` v10.0.0-beta.27.
3
+ Bundled markdown documentation for `@videojs/react` v10.0.0-beta.29.
4
4
 
5
5
  Start at [`./llms.txt`](./llms.txt) — it's the structured index of every page in this directory.
6
6
 
@@ -91,7 +91,7 @@ playback?.play();
91
91
 
92
92
  ### Checking for feature support
93
93
 
94
- Volume, fullscreen, and picture-in-picture expose an `*Availability` property because platform support varies. For example, iOS Safari doesn’t allow programmatic volume control.
94
+ Volume, fullscreen, and picture-in-picture expose availability properties because platform support varies. Volume has two independent properties: `volumeAvailability` for changing the volume level and `mutedAvailability` for toggling mute. For example, iOS Safari allows muting but doesn’t allow programmatic volume control.
95
95
 
96
96
  Value
97
97
 
@@ -109,7 +109,7 @@ Could work, not ready yet
109
109
 
110
110
  Platform can never do this
111
111
 
112
- Components that depend on availability (like [`PiPButton`](../reference/pip-button.md) and [`FullscreenButton`](../reference/fullscreen-button.md)) handle the three states for you:
112
+ Components that depend on availability (like [`MuteButton`](../reference/mute-button.md), [`PiPButton`](../reference/pip-button.md), and [`FullscreenButton`](../reference/fullscreen-button.md)) handle the three states for you:
113
113
 
114
114
  * **`unsupported`** — the HTML custom element receives the native `hidden` attribute (and `data-hidden`); React buttons return `null`. No CSS needed.
115
115
  * **`unavailable`** — the presentation controls stay hidden while capability detection is unresolved. Cast remains visible but disabled when its API is supported and no device is reachable.
@@ -42,7 +42,7 @@ How Video.js plays it
42
42
 
43
43
  `source`, at the top level
44
44
 
45
- `preferPlayback`
45
+ `preferPlayback`, `maxAutoResolution`, `capRenditionToPlayerSize`
46
46
 
47
47
  How a specific engine behaves
48
48
 
@@ -192,6 +192,80 @@ tsx
192
192
 
193
193
  It’s a preference, not a demand — Video.js falls back to whichever path can actually play the source. `HlsJsVideo`, `MuxVideo`, and `MuxAudio` accept it; DASH and Vimeo have no second playback path.
194
194
 
195
+ `maxAutoResolution` caps the highest rendition adaptive bitrate selection reaches for on its own:
196
+
197
+ tsx
198
+
199
+ ```
200
+ <HlsJsVideo source={{ src: 'https://example.com/stream.m3u8', maxAutoResolution: '720p' }} />
201
+ ```
202
+
203
+ The cap limits automatic selection without hiding anything. Renditions above it stay in `videoRenditions`, so a viewer can still choose 1080p by hand. Reach for it to hold down bandwidth on a stream that would otherwise climb to 4K, or to keep a background or thumbnail player cheap.
204
+
205
+ Renditions are matched on pixel area rather than height, which keeps unusual aspect ratios honest: an ultrawide 2560×1080 rendition carries more pixels than 16:9 1080p, so a `'1080p'` cap leaves it out. When every rendition sits above the cap, the smallest one plays.
206
+
207
+ Changing the cap applies to the running engine, so playback continues uninterrupted. It needs the hls.js engine — native HLS playback ignores it, and audio-only streams have no video renditions to cap.
208
+
209
+ ### Capping to the player’s size
210
+
211
+ A 400px-wide player has no use for a 4K rendition, so `capRenditionToPlayerSize` holds automatic selection to the smallest rendition that still covers the element. It defaults to `true`, and the cap follows the element as it’s resized:
212
+
213
+ tsx
214
+
215
+ ```
216
+ <HlsJsVideo source={{ src: 'https://example.com/stream.m3u8', capRenditionToPlayerSize: false }} />
217
+ ```
218
+
219
+ The element is measured in device pixels, so a `2` device pixel ratio asks for twice the rendition a CSS measurement would — a 640px-wide player on a retina screen still gets 720p. Switch the cap off for a player whose layout size understates what it needs, such as one that goes fullscreen without a resize.
220
+
221
+ `minAutoResolution` bounds how far down that cap can reach, and defaults to `'720p'`:
222
+
223
+ tsx
224
+
225
+ ```
226
+ <HlsJsVideo source={{ src: 'https://example.com/stream.m3u8', minAutoResolution: '480p' }} />
227
+ ```
228
+
229
+ **It is not a quality floor.** It bounds the size-derived cap and nothing else. When bandwidth is poor, adaptive selection still drops below it — the cap is a ceiling, and selection stays free underneath. It also never raises an explicit `maxAutoResolution`: ask for at most `'360p'` alongside a `'720p'` floor and you get `'360p'`.
230
+
231
+ The default is there because the low rungs of a ladder exist for poor network conditions, and capping a small player down to them looks worse than its size suggests. Name a lower rung to weaken the floor, or `'270p'` to lift it for any real ladder.
232
+
233
+ ### Four things that sound alike
234
+
235
+ Four separate mechanisms bound which rendition plays, and they’re easy to mistake for each other:
236
+
237
+ Option
238
+
239
+ Side
240
+
241
+ What it does
242
+
243
+ `source.playback.maxResolution`
244
+
245
+ Server
246
+
247
+ A Mux query param. Trims the manifest, so higher renditions never arrive — not even by hand.
248
+
249
+ `source.maxAutoResolution`
250
+
251
+ Client
252
+
253
+ A ceiling on automatic selection. Everything still arrives and stays selectable by hand.
254
+
255
+ `source.capRenditionToPlayerSize`
256
+
257
+ Client
258
+
259
+ The same kind of ceiling, derived from the element’s rendered size and moving with it.
260
+
261
+ `source.minAutoResolution`
262
+
263
+ Client
264
+
265
+ A bound on the one above. Not a quality minimum, and not related to `playback.minResolution`.
266
+
267
+ `playback.maxResolution` and `playback.minResolution` are the server-side pair: they decide what the manifest carries. The other three only bound what adaptive selection picks from whatever does arrive.
268
+
195
269
  ## DRM protected sources
196
270
 
197
271
  Protected content is licensed through `source.drm`, keyed by EME key system id — alongside the URL rather than inside an engine’s namespace, because which engine plays the manifest is decided later and both paths read it:
@@ -265,6 +339,10 @@ tsx
265
339
  />
266
340
  ```
267
341
 
342
+ `playback` params ride along in the URL, so `playback.maxResolution` decides which renditions the manifest carries in the first place. `maxAutoResolution` is the other half of that pair: it caps what adaptive selection picks from the renditions that do arrive. Use `playback.maxResolution` when a viewer should never get 4K, and `maxAutoResolution` when they should be able to ask for it.
343
+
344
+ The same split applies at the bottom of the ladder, and the names are close enough to be worth restating: `playback.minResolution` asks Mux to leave the lowest renditions out of the manifest, while `minAutoResolution` is a client-side bound on the player-size cap. They are unrelated.
345
+
268
346
  Setting a Mux stream URL as `src` works too — the element parses the playback ID and query params back out into `source`. To play something Mux doesn’t host, name it with `src` inside `source`; engine options still apply.
269
347
 
270
348
  Two more source params describe images rather than playback. `source.storyboard` and `source.poster` carry the modifiers for the storyboard VTT and the poster still — both belong to the source, since a signed token scopes them to one playback ID:
@@ -64,10 +64,10 @@ skin.css
64
64
  ```
65
65
  'use client';
66
66
 
67
- import { type CSSProperties, type ComponentProps, forwardRef, type ReactNode, isValidElement } from 'react';
67
+ import { type CSSProperties, type ComponentProps, forwardRef, type ReactNode } from 'react';
68
68
  import { audioText, captionsText, playbackRateText, qualityText, settingsText, speedText } from '@videojs/core/i18n/text/menu';
69
69
  import { AirPlayEnterIcon, AirPlayExitIcon, CaptionsOffIcon, CaptionsOnIcon, CastEnterIcon, CastExitIcon, CheckIcon, ChevronIcon, FullscreenEnterIcon, FullscreenExitIcon, GearIcon, PauseIcon, PipEnterIcon, PipExitIcon, PlayIcon, QualityIcon, RestartIcon, SpeechIcon, SpeedIcon, SpinnerIcon, VolumeHighIcon, VolumeLowIcon, VolumeOffIcon } from '@videojs/react/icons';
70
- import { Poster, useTranslator, Container, usePlayer, AirPlayButton, useAudioTrackOptions, AudioTrackRadioGroup, BufferingIndicator, CaptionsButton, CaptionsRadioGroup, useCaptionsOptions, CastButton, Controls, ErrorDialog, FullscreenButton, Gesture, Hotkey, Menu, MuteButton, PiPButton, PlayButton, usePlaybackRateOptions, PlaybackRateRadioGroup, Popover, useQualityOptions, QualityRadioGroup, SeekIndicator, Slider, StatusAnnouncer, StatusIndicator, Time, TimeSlider, Tooltip, VolumeIndicator, VolumeSlider, type RenderProp } from '@videojs/react';
70
+ import { Poster, useTranslator, Container, usePlayer, AirPlayButton, useAudioTrackOptions, AudioTrackRadioGroup, BufferingIndicator, CaptionsButton, CaptionsRadioGroup, useCaptionsOptions, CastButton, Controls, ErrorDialog, FullscreenButton, Gesture, Hotkey, Menu, MuteButton, PiPButton, PlayButton, usePlaybackRateOptions, PlaybackRateRadioGroup, Popover, useQualityOptions, QualityRadioGroup, SeekIndicator, Slider, StatusAnnouncer, StatusIndicator, Time, TimeSlider, Tooltip, VolumeIndicator, VolumeSlider } from '@videojs/react';
71
71
  import { Video } from '@videojs/react/video';
72
72
  import './player.css';
73
73
  import { Player } from './player';
@@ -350,9 +350,11 @@ const SEEK_TIME = 10;
350
350
 
351
351
  export interface VideoPlayerProps {
352
352
  src: string;
353
+ poster?: string | undefined;
353
354
  style?: CSSProperties;
354
355
  className?: string;
355
- poster?: string | RenderProp<Poster.State> | undefined;
356
+ renderPoster?: Poster.Props['render'];
357
+ placeholder?: string | undefined;
356
358
  }
357
359
 
358
360
  /**
@@ -364,13 +366,13 @@ export interface VideoPlayerProps {
364
366
  * />
365
367
  * ```
366
368
  */
367
- export function VideoPlayer({ src, className, poster, placeholder, style, ...rest }: VideoPlayerProps): ReactNode {
369
+ export function VideoPlayer({ src, poster, className, renderPoster, placeholder, style, ...rest }: VideoPlayerProps): ReactNode {
368
370
  const containerStyle = placeholder
369
371
  ? ({ '--media-poster-placeholder': `url(${placeholder})`, ...style } as CSSProperties)
370
372
  : style;
371
373
 
372
374
  return (
373
- <Player>
375
+ <Player poster={poster}>
374
376
  <Container
375
377
  className={`media-default-skin media-default-skin--video ${className ?? ''}`}
376
378
  style={containerStyle}
@@ -378,9 +380,7 @@ export function VideoPlayer({ src, className, poster, placeholder, style, ...res
378
380
  >
379
381
  <Video src={src} playsInline />
380
382
 
381
- {poster && (
382
- <Poster src={isString(poster) ? poster : undefined} render={isRenderProp(poster) ? poster : undefined} />
383
- )}
383
+ <Poster render={renderPoster} />
384
384
 
385
385
  <BufferingIndicator
386
386
  render={(props) => (
@@ -604,18 +604,6 @@ function VolumePopover(): ReactNode {
604
604
  </Popover.Root>
605
605
  );
606
606
  }
607
-
608
- // ================================================================
609
- // Utilities
610
- // ================================================================
611
-
612
- function isString(value: unknown): value is string {
613
- return typeof value === 'string';
614
- }
615
-
616
- function isRenderProp(value: unknown): value is RenderProp<unknown> {
617
- return typeof value === 'function' || isValidElement(value);
618
- }
619
607
  ```
620
608
  ```
621
609
  import { createPlayer } from '@videojs/react';
@@ -1183,7 +1171,7 @@ export const { Player } = createPlayer({ features: videoFeatures });
1183
1171
  position: relative;
1184
1172
  display: block;
1185
1173
  max-width: var(--thumbnail-max-width);
1186
- max-height: var(--max-height);
1174
+ max-height: var(--thumbnail-max-height);
1187
1175
  overflow: clip;
1188
1176
  border-radius: inherit;
1189
1177
 
@@ -1235,9 +1223,13 @@ export const { Player } = createPlayer({ features: videoFeatures });
1235
1223
  }
1236
1224
 
1237
1225
  .media-default-skin .media-slider {
1238
- --thumb-size: calc(var(--spacing) * 2.5);
1239
- --thumb-active-size: calc(var(--spacing) * 3);
1240
- --track-border-radius: calc(Infinity * 1px);
1226
+ --track-size: calc(var(--spacing) * 1);
1227
+ --track-highlighted-size: calc(var(--spacing) * 1.75);
1228
+ --track-border-radius: 99px;
1229
+ --thumb-size: calc(var(--spacing) * 3);
1230
+ --chapter-gap: calc(var(--spacing) * 1);
1231
+ --chapter-inset-start: calc(var(--chapter-gap) / 2);
1232
+ --chapter-inset-end: calc(var(--chapter-gap) / 2);
1241
1233
 
1242
1234
  position: relative;
1243
1235
  display: flex;
@@ -1268,10 +1260,10 @@ export const { Player } = createPlayer({ features: videoFeatures });
1268
1260
 
1269
1261
  &[data-orientation="horizontal"] {
1270
1262
  width: 100%;
1271
- height: calc(var(--spacing) * 1);
1263
+ height: var(--track-size);
1272
1264
  }
1273
1265
  &[data-orientation="vertical"] {
1274
- width: calc(var(--spacing) * 1);
1266
+ width: var(--track-size);
1275
1267
  height: 100%;
1276
1268
  }
1277
1269
  }
@@ -1287,13 +1279,22 @@ export const { Player } = createPlayer({ features: videoFeatures });
1287
1279
  inset-block: 0;
1288
1280
  left: 0;
1289
1281
  width: 100%;
1290
- transition-property: clip-path;
1291
1282
  }
1292
1283
  &[data-orientation="vertical"] {
1293
1284
  inset-inline: 0;
1294
1285
  bottom: 0;
1295
1286
  height: 100%;
1296
- transition-property: clip-path;
1287
+ }
1288
+
1289
+ @media (prefers-reduced-motion: no-preference) {
1290
+ transition: clip-path 200ms ease-out;
1291
+ }
1292
+ }
1293
+ &[data-dragging],
1294
+ &[data-seeking] {
1295
+ .media-slider__fill,
1296
+ .media-slider__buffer {
1297
+ transition-duration: 0ms;
1297
1298
  }
1298
1299
  }
1299
1300
 
@@ -1320,6 +1321,14 @@ export const { Player } = createPlayer({ features: videoFeatures });
1320
1321
  clip-path: inset(calc(100% - var(--media-slider-fill)) 0 0 0 round var(--track-border-radius));
1321
1322
  }
1322
1323
  }
1324
+ &[data-dragging] {
1325
+ .media-slider__fill[data-orientation="horizontal"] {
1326
+ clip-path: inset(0 calc(100% - var(--media-slider-pointer)) 0 0 round var(--track-border-radius));
1327
+ }
1328
+ .media-slider__fill[data-orientation="vertical"] {
1329
+ clip-path: inset(calc(100% - var(--media-slider-pointer)) 0 0 0 round var(--track-border-radius));
1330
+ }
1331
+ }
1323
1332
 
1324
1333
  /* Chapters */
1325
1334
  .media-slider__chapters {
@@ -1343,10 +1352,6 @@ export const { Player } = createPlayer({ features: videoFeatures });
1343
1352
  }
1344
1353
 
1345
1354
  .media-slider__chapter {
1346
- --chapter-gap: calc(var(--spacing) * 1);
1347
- --chapter-inset-start: 0.5;
1348
- --chapter-inset-end: 0.5;
1349
-
1350
1355
  position: absolute;
1351
1356
  inset: 0;
1352
1357
  display: flex;
@@ -1357,16 +1362,13 @@ export const { Player } = createPlayer({ features: videoFeatures });
1357
1362
  border-radius: inherit;
1358
1363
 
1359
1364
  &:first-child {
1360
- --chapter-inset-start: 0;
1365
+ --chapter-inset-start: 0px;
1361
1366
  }
1362
1367
  &:last-child {
1363
- --chapter-inset-end: 0;
1368
+ --chapter-inset-end: 0px;
1364
1369
  }
1365
1370
 
1366
1371
  .media-slider__chapter-track {
1367
- --chapter-track-size: calc(var(--spacing) * 1);
1368
- --chapter-track-highlighted-size: calc(var(--spacing) * 1.75);
1369
-
1370
1372
  border-radius: inherit;
1371
1373
 
1372
1374
  @media (prefers-reduced-motion: no-preference) {
@@ -1379,16 +1381,15 @@ export const { Player } = createPlayer({ features: videoFeatures });
1379
1381
  clip-path: inset(0 calc(100% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start));
1380
1382
 
1381
1383
  .media-slider__chapter-track {
1382
- height: var(--chapter-track-size);
1384
+ height: var(--track-size);
1383
1385
  clip-path: inset(
1384
- 0 calc(100% - var(--media-slider-chapter-end) + var(--chapter-gap) * var(--chapter-inset-end)) 0
1385
- calc(var(--media-slider-chapter-start) + var(--chapter-gap) * var(--chapter-inset-start)) round
1386
- var(--track-border-radius)
1386
+ 0 calc(100% - var(--media-slider-chapter-end) + var(--chapter-inset-end)) 0
1387
+ calc(var(--media-slider-chapter-start) + var(--chapter-inset-start)) round var(--track-border-radius)
1387
1388
  );
1388
1389
  }
1389
1390
 
1390
1391
  &[data-highlighted] .media-slider__chapter-track {
1391
- height: var(--chapter-track-highlighted-size);
1392
+ height: var(--track-highlighted-size);
1392
1393
  }
1393
1394
  }
1394
1395
 
@@ -1396,59 +1397,19 @@ export const { Player } = createPlayer({ features: videoFeatures });
1396
1397
  clip-path: inset(calc(100% - var(--media-slider-chapter-end)) 0 var(--media-slider-chapter-start) 0);
1397
1398
 
1398
1399
  .media-slider__chapter-track {
1399
- width: var(--chapter-track-size);
1400
+ width: var(--track-size);
1400
1401
  clip-path: inset(
1401
- calc(100% - var(--media-slider-chapter-end) + var(--chapter-gap) * var(--chapter-inset-end)) 0
1402
- calc(var(--media-slider-chapter-start) + var(--chapter-gap) * var(--chapter-inset-start)) 0 round
1403
- var(--track-border-radius)
1402
+ calc(100% - var(--media-slider-chapter-end) + var(--chapter-inset-end)) 0
1403
+ calc(var(--media-slider-chapter-start) + var(--chapter-inset-start)) 0 round var(--track-border-radius)
1404
1404
  );
1405
1405
  }
1406
1406
 
1407
1407
  &[data-highlighted] .media-slider__chapter-track {
1408
- width: var(--chapter-track-highlighted-size);
1408
+ width: var(--track-highlighted-size);
1409
1409
  }
1410
1410
  }
1411
1411
  }
1412
1412
 
1413
- /* Dragging — thumb and fill follow the pointer position */
1414
- &[data-dragging] {
1415
- .media-slider__thumb[data-orientation="horizontal"] {
1416
- left: var(--media-slider-pointer);
1417
- }
1418
- .media-slider__thumb[data-orientation="vertical"] {
1419
- top: calc(100% - var(--media-slider-pointer));
1420
- }
1421
- .media-slider__fill[data-orientation="horizontal"] {
1422
- clip-path: inset(0 calc(100% - var(--media-slider-pointer)) 0 0 round var(--track-border-radius));
1423
- }
1424
- .media-slider__fill[data-orientation="vertical"] {
1425
- clip-path: inset(calc(100% - var(--media-slider-pointer)) 0 0 0 round var(--track-border-radius));
1426
- }
1427
- }
1428
-
1429
- @media (prefers-reduced-motion: no-preference) {
1430
- .media-slider__thumb {
1431
- transition-property: opacity, height, width, outline-offset, left, top;
1432
- }
1433
- .media-slider__fill {
1434
- transition-timing-function: linear;
1435
- transition-duration: 200ms;
1436
- }
1437
- .media-slider__buffer {
1438
- transition-timing-function: ease-out;
1439
- transition-duration: 250ms;
1440
- }
1441
- }
1442
-
1443
- &[data-dragging],
1444
- &[data-seeking] {
1445
- .media-slider__thumb,
1446
- .media-slider__fill,
1447
- .media-slider__buffer {
1448
- transition-duration: 0ms;
1449
- }
1450
- }
1451
-
1452
1413
  /* Thumb */
1453
1414
  .media-slider__thumb {
1454
1415
  position: absolute;
@@ -1465,10 +1426,8 @@ export const { Player } = createPlayer({ features: videoFeatures });
1465
1426
  0 1px 3px 0 oklch(0 0 0 / 0.35),
1466
1427
  0 1px 2px -1px oklch(0 0 0 / 0.35);
1467
1428
  opacity: 0;
1429
+ scale: 0.8;
1468
1430
  translate: -50% -50%;
1469
- transition-timing-function: ease-out;
1470
- transition-duration: 150ms;
1471
- transition-property: opacity, height, width, outline-offset;
1472
1431
 
1473
1432
  &[data-orientation="horizontal"] {
1474
1433
  top: 50%;
@@ -1485,22 +1444,12 @@ export const { Player } = createPlayer({ features: videoFeatures });
1485
1444
  opacity: 1;
1486
1445
  }
1487
1446
 
1488
- @media (hover: hover) and (pointer: fine) {
1489
- &:hover {
1490
- outline-color: oklch(from currentColor l c h / 0.15);
1491
- outline-offset: 0;
1492
- }
1493
- }
1494
-
1495
1447
  &::after {
1496
1448
  position: absolute;
1497
1449
  inset: -4px;
1498
1450
  content: "";
1499
1451
  border-radius: inherit;
1500
1452
  box-shadow: 0 0 0 2px currentColor;
1501
- transition-timing-function: ease-out;
1502
- transition-duration: 150ms;
1503
- transition-property: opacity, scale;
1504
1453
  }
1505
1454
 
1506
1455
  &:not(:focus-visible)::after {
@@ -1509,37 +1458,70 @@ export const { Player } = createPlayer({ features: videoFeatures });
1509
1458
  }
1510
1459
 
1511
1460
  &.media-slider__thumb--persistent {
1512
- width: var(--thumb-active-size);
1513
- height: var(--thumb-active-size);
1514
1461
  opacity: 1;
1462
+ scale: 1;
1515
1463
  }
1516
- }
1517
1464
 
1518
- &:active .media-slider__thumb,
1519
- &:focus-within .media-slider__thumb {
1520
- width: var(--thumb-active-size);
1521
- height: var(--thumb-active-size);
1465
+ @media (hover: hover) and (pointer: fine) {
1466
+ &:hover {
1467
+ outline-color: oklch(from currentColor l c h / 0.15);
1468
+ outline-offset: 0;
1469
+ }
1470
+ }
1471
+
1472
+ @media (prefers-reduced-motion: no-preference) {
1473
+ transition-timing-function: ease-out;
1474
+ transition-duration: 150ms;
1475
+ transition-property: opacity, outline-offset, left, top, scale;
1476
+
1477
+ &::after {
1478
+ transition-timing-function: ease-out;
1479
+ transition-duration: 150ms;
1480
+ transition-property: opacity, scale;
1481
+ }
1482
+ }
1522
1483
  }
1523
1484
 
1524
1485
  @media (hover: hover) and (pointer: fine) {
1525
1486
  &:hover .media-slider__thumb {
1526
1487
  opacity: 1;
1488
+ scale: 1;
1489
+ }
1490
+ }
1491
+
1492
+ &[data-dragging] .media-slider__thumb {
1493
+ opacity: 1;
1494
+ scale: 0.9;
1495
+
1496
+ @media (prefers-reduced-motion: no-preference) {
1497
+ transition-property: opacity, outline-offset, scale;
1498
+ }
1499
+
1500
+ &[data-orientation="horizontal"] {
1501
+ left: var(--media-slider-pointer);
1502
+ }
1503
+ &[data-orientation="vertical"] {
1504
+ top: calc(100% - var(--media-slider-pointer));
1527
1505
  }
1528
1506
  }
1529
1507
 
1530
1508
  /* Preview */
1531
1509
  .media-slider__preview {
1532
- --max-width: min(calc(var(--spacing) * 48), 100cqi);
1533
- --max-height: calc(var(--spacing) * 32);
1510
+ --max-size-factor: 36;
1511
+ --max-size: min(calc(var(--spacing) * var(--max-size-factor)), 100cqi);
1534
1512
 
1535
- min-width: var(--max-width);
1513
+ min-width: var(--max-size);
1536
1514
  height: calc(var(--spacing) * 1);
1537
1515
 
1516
+ @container media-root (width > 42rem) {
1517
+ --max-size-factor: 48;
1518
+ }
1519
+
1538
1520
  .media-slider__thumbnail,
1539
1521
  .media-slider__value {
1540
1522
  position: absolute;
1541
1523
  left: 50%;
1542
- max-width: var(--max-width);
1524
+ max-width: var(--max-size);
1543
1525
  opacity: 0;
1544
1526
  filter: blur(8px);
1545
1527
  transform-origin: bottom;
@@ -1550,7 +1532,8 @@ export const { Player } = createPlayer({ features: videoFeatures });
1550
1532
  }
1551
1533
 
1552
1534
  .media-slider__thumbnail {
1553
- --thumbnail-max-width: var(--max-width);
1535
+ --thumbnail-max-width: var(--max-size);
1536
+ --thumbnail-max-height: var(--max-size);
1554
1537
  bottom: calc(100% + (var(--spacing) * 9));
1555
1538
  }
1556
1539
 
@@ -1564,8 +1547,8 @@ export const { Player } = createPlayer({ features: videoFeatures });
1564
1547
 
1565
1548
  .media-slider__chapter-title {
1566
1549
  min-width: 0;
1567
- max-width: var(--max-width);
1568
- padding-inline: calc(var(--spacing) * 3);
1550
+ max-width: var(--max-size);
1551
+ padding-inline: calc(var(--spacing) * 6);
1569
1552
  overflow: hidden;
1570
1553
  text-overflow: ellipsis;
1571
1554
  white-space: nowrap;
@@ -1596,14 +1579,15 @@ export const { Player } = createPlayer({ features: videoFeatures });
1596
1579
  transition-duration: 200ms;
1597
1580
  transition-property: opacity, scale;
1598
1581
  }
1582
+ }
1599
1583
 
1600
- &[data-pointing]:not([data-dragging])::before,
1601
- &[data-pointing] :is(.media-slider__thumbnail, .media-slider__value),
1602
- &[data-interactive]:not([data-pointing]):not([data-dragging]) :is(.media-slider__value, .media-slider__thumbnail) {
1603
- opacity: 1;
1604
- filter: blur(0);
1605
- scale: 1;
1606
- }
1584
+ &:is([data-pointing], :has(:focus-visible))
1585
+ .media-slider__preview
1586
+ :is(.media-slider__value, .media-slider__thumbnail),
1587
+ .media-slider__preview[data-pointing]:not([data-dragging])::before {
1588
+ opacity: 1;
1589
+ filter: blur(0);
1590
+ scale: 1;
1607
1591
  }
1608
1592
  }
1609
1593
 
@@ -2310,8 +2294,8 @@ export const { Player } = createPlayer({ features: videoFeatures });
2310
2294
  still in the DOM — just `display: none` — so its animations would keep
2311
2295
  running. Set the variables to `none` to short-circuit the keyframes. */
2312
2296
  .media-button--airplay:not([data-airplay-state="connected"]) {
2313
- --media-icon--airplay__fill-animation: none;
2314
- --media-icon--airplay__triangle-animation: none;
2297
+ --media-icon-airplay-fill-animation: none;
2298
+ --media-icon-airplay-triangle-animation: none;
2315
2299
  }
2316
2300
 
2317
2301
  @media (prefers-reduced-motion: reduce) {
@@ -2407,6 +2391,10 @@ export const { Player } = createPlayer({ features: videoFeatures });
2407
2391
  --scale: 1.75;
2408
2392
  }
2409
2393
  }
2394
+
2395
+ * {
2396
+ --focus-ring-color: oklch(1 0 0);
2397
+ }
2410
2398
  }
2411
2399
 
2412
2400
  /* Error Dialog */
@@ -2474,6 +2462,12 @@ export const { Player } = createPlayer({ features: videoFeatures });
2474
2462
  .media-controls--primary,
2475
2463
  .media-controls--secondary {
2476
2464
  position: absolute;
2465
+ }
2466
+ /* Primary must be higher for the preview/thumbnail */
2467
+ .media-controls--primary {
2468
+ z-index: 20;
2469
+ }
2470
+ .media-controls--secondary {
2477
2471
  z-index: 10;
2478
2472
  }
2479
2473
 
@@ -2490,6 +2484,11 @@ export const { Player } = createPlayer({ features: videoFeatures });
2490
2484
  transform-origin: top;
2491
2485
  }
2492
2486
 
2487
+ .media-time-controls {
2488
+ flex: 1;
2489
+ padding-inline: calc(var(--spacing) * 2);
2490
+ }
2491
+
2493
2492
  @container media-root (width < 32rem) {
2494
2493
  .media-controls--primary,
2495
2494
  .media-controls--secondary {
@@ -2540,6 +2539,10 @@ export const { Player } = createPlayer({ features: videoFeatures });
2540
2539
  }
2541
2540
  }
2542
2541
  }
2542
+
2543
+ .media-button--captions {
2544
+ display: none;
2545
+ }
2543
2546
  }
2544
2547
 
2545
2548
  @container media-root (width >= 32rem) {
@@ -2576,11 +2579,10 @@ export const { Player } = createPlayer({ features: videoFeatures });
2576
2579
  translate: 0 4px;
2577
2580
  }
2578
2581
  }
2579
- }
2580
2582
 
2581
- .media-time-controls {
2582
- flex: 1;
2583
- padding-inline: calc(var(--spacing) * 3);
2583
+ .media-time-controls {
2584
+ padding-inline: calc(var(--spacing) * 3);
2585
+ }
2584
2586
  }
2585
2587
 
2586
2588
  @media (pointer: fine) {
@@ -50,7 +50,7 @@ Feature
50
50
 
51
51
  Browse the full list in the **Features** section of the sidebar.
52
52
 
53
- Each feature also has an **availability** property (`'available'`, `'unavailable'`, or `'unsupported'`) for hiding controls the platform does not support. See [Features](../concepts/features.md) for details.
53
+ Features for platform-dependent capabilities also expose one or more **availability** properties (`'available'`, `'unavailable'`, or `'unsupported'`) for hiding controls the platform does not support. See [Features](../concepts/features.md) for details.
54
54
 
55
55
  Access state and actions with [`usePlayer`](../reference/use-player.md):
56
56