@videojs/react 10.0.0-beta.2 → 10.0.0-beta.21

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 (777) hide show
  1. package/dist/default/_virtual/_rolldown/runtime.js +6 -11
  2. package/dist/default/icons/dist/react/default/captions-off.js +1 -3
  3. package/dist/default/icons/dist/react/default/captions-off.js.map +1 -1
  4. package/dist/default/icons/dist/react/default/captions-on.js +1 -3
  5. package/dist/default/icons/dist/react/default/captions-on.js.map +1 -1
  6. package/dist/default/icons/dist/react/default/fullscreen-enter.js +1 -3
  7. package/dist/default/icons/dist/react/default/fullscreen-enter.js.map +1 -1
  8. package/dist/default/icons/dist/react/default/fullscreen-exit.js +1 -3
  9. package/dist/default/icons/dist/react/default/fullscreen-exit.js.map +1 -1
  10. package/dist/default/icons/dist/react/default/pause.js +1 -3
  11. package/dist/default/icons/dist/react/default/pause.js.map +1 -1
  12. package/dist/default/icons/dist/react/default/pip-enter.js +32 -0
  13. package/dist/default/icons/dist/react/default/pip-enter.js.map +1 -0
  14. package/dist/default/icons/dist/react/default/pip-exit.js +32 -0
  15. package/dist/default/icons/dist/react/default/pip-exit.js.map +1 -0
  16. package/dist/default/icons/dist/react/default/play.js +1 -3
  17. package/dist/default/icons/dist/react/default/play.js.map +1 -1
  18. package/dist/default/icons/dist/react/default/restart.js +1 -3
  19. package/dist/default/icons/dist/react/default/restart.js.map +1 -1
  20. package/dist/default/icons/dist/react/default/seek.js +1 -3
  21. package/dist/default/icons/dist/react/default/seek.js.map +1 -1
  22. package/dist/default/icons/dist/react/default/spinner.js +1 -3
  23. package/dist/default/icons/dist/react/default/spinner.js.map +1 -1
  24. package/dist/default/icons/dist/react/default/volume-high.js +1 -3
  25. package/dist/default/icons/dist/react/default/volume-high.js.map +1 -1
  26. package/dist/default/icons/dist/react/default/volume-low.js +1 -3
  27. package/dist/default/icons/dist/react/default/volume-low.js.map +1 -1
  28. package/dist/default/icons/dist/react/default/volume-off.js +1 -3
  29. package/dist/default/icons/dist/react/default/volume-off.js.map +1 -1
  30. package/dist/default/icons/dist/react/minimal/captions-off.js +1 -3
  31. package/dist/default/icons/dist/react/minimal/captions-off.js.map +1 -1
  32. package/dist/default/icons/dist/react/minimal/captions-on.js +1 -3
  33. package/dist/default/icons/dist/react/minimal/captions-on.js.map +1 -1
  34. package/dist/default/icons/dist/react/minimal/fullscreen-enter.js +1 -3
  35. package/dist/default/icons/dist/react/minimal/fullscreen-enter.js.map +1 -1
  36. package/dist/default/icons/dist/react/minimal/fullscreen-exit.js +1 -3
  37. package/dist/default/icons/dist/react/minimal/fullscreen-exit.js.map +1 -1
  38. package/dist/default/icons/dist/react/minimal/pause.js +1 -3
  39. package/dist/default/icons/dist/react/minimal/pause.js.map +1 -1
  40. package/dist/default/icons/dist/react/minimal/pip-enter.js +36 -0
  41. package/dist/default/icons/dist/react/minimal/pip-enter.js.map +1 -0
  42. package/dist/default/icons/dist/react/minimal/pip-exit.js +36 -0
  43. package/dist/default/icons/dist/react/minimal/pip-exit.js.map +1 -0
  44. package/dist/default/icons/dist/react/minimal/play.js +1 -3
  45. package/dist/default/icons/dist/react/minimal/play.js.map +1 -1
  46. package/dist/default/icons/dist/react/minimal/restart.js +1 -3
  47. package/dist/default/icons/dist/react/minimal/restart.js.map +1 -1
  48. package/dist/default/icons/dist/react/minimal/seek.js +1 -3
  49. package/dist/default/icons/dist/react/minimal/seek.js.map +1 -1
  50. package/dist/default/icons/dist/react/minimal/spinner.js +1 -3
  51. package/dist/default/icons/dist/react/minimal/spinner.js.map +1 -1
  52. package/dist/default/icons/dist/react/minimal/volume-high.js +1 -3
  53. package/dist/default/icons/dist/react/minimal/volume-high.js.map +1 -1
  54. package/dist/default/icons/dist/react/minimal/volume-low.js +1 -3
  55. package/dist/default/icons/dist/react/minimal/volume-low.js.map +1 -1
  56. package/dist/default/icons/dist/react/minimal/volume-off.js +1 -3
  57. package/dist/default/icons/dist/react/minimal/volume-off.js.map +1 -1
  58. package/dist/default/index.js +25 -14
  59. package/dist/default/media/audio.js +5 -10
  60. package/dist/default/media/audio.js.map +1 -1
  61. package/dist/default/media/background-video/index.js +4 -6
  62. package/dist/default/media/background-video/index.js.map +1 -1
  63. package/dist/default/media/dash-video/index.js +21 -0
  64. package/dist/default/media/dash-video/index.js.map +1 -0
  65. package/dist/default/media/hls-video/index.js +8 -13
  66. package/dist/default/media/hls-video/index.js.map +1 -1
  67. package/dist/default/media/mux-audio/index.js +20 -0
  68. package/dist/default/media/mux-audio/index.js.map +1 -0
  69. package/dist/default/media/mux-video/index.js +21 -0
  70. package/dist/default/media/mux-video/index.js.map +1 -0
  71. package/dist/default/media/native-hls-video/index.js +21 -0
  72. package/dist/default/media/native-hls-video/index.js.map +1 -0
  73. package/dist/default/media/simple-hls-video/index.js +8 -12
  74. package/dist/default/media/simple-hls-video/index.js.map +1 -1
  75. package/dist/default/media/video.js +5 -10
  76. package/dist/default/media/video.js.map +1 -1
  77. package/dist/default/player/context.js +27 -15
  78. package/dist/default/player/context.js.map +1 -1
  79. package/dist/default/player/create-player.js +18 -6
  80. package/dist/default/player/create-player.js.map +1 -1
  81. package/dist/default/presets/audio/index.js +1 -2
  82. package/dist/default/presets/audio/minimal-skin.css +293 -194
  83. package/dist/default/presets/audio/minimal-skin.js +144 -123
  84. package/dist/default/presets/audio/minimal-skin.js.map +1 -1
  85. package/dist/default/presets/audio/minimal-skin.tailwind.js +156 -137
  86. package/dist/default/presets/audio/minimal-skin.tailwind.js.map +1 -1
  87. package/dist/default/presets/audio/skin.css +276 -186
  88. package/dist/default/presets/audio/skin.js +218 -126
  89. package/dist/default/presets/audio/skin.js.map +1 -1
  90. package/dist/default/presets/audio/skin.tailwind.js +166 -141
  91. package/dist/default/presets/audio/skin.tailwind.js.map +1 -1
  92. package/dist/default/presets/background/index.js +1 -2
  93. package/dist/default/presets/background/skin.js +1 -2
  94. package/dist/default/presets/background/skin.js.map +1 -1
  95. package/dist/default/presets/video/index.js +1 -2
  96. package/dist/default/presets/video/minimal-skin.css +587 -340
  97. package/dist/default/presets/video/minimal-skin.js +139 -123
  98. package/dist/default/presets/video/minimal-skin.js.map +1 -1
  99. package/dist/default/presets/video/minimal-skin.tailwind.js +149 -138
  100. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
  101. package/dist/default/presets/video/skin.css +555 -323
  102. package/dist/default/presets/video/skin.js +299 -171
  103. package/dist/default/presets/video/skin.js.map +1 -1
  104. package/dist/default/presets/video/skin.tailwind.js +204 -186
  105. package/dist/default/presets/video/skin.tailwind.js.map +1 -1
  106. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js +17 -32
  107. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  108. package/dist/default/skins/dist/default/default/tailwind/components/buffering.js +1 -1
  109. package/dist/default/skins/dist/default/default/tailwind/components/buffering.js.map +1 -1
  110. package/dist/default/skins/dist/default/default/tailwind/components/button-group.js +7 -0
  111. package/dist/default/skins/dist/default/default/tailwind/components/button-group.js.map +1 -0
  112. package/dist/default/skins/dist/default/default/tailwind/components/button.js +5 -5
  113. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  114. package/dist/default/skins/dist/default/default/tailwind/components/controls.js +2 -3
  115. package/dist/default/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  116. package/dist/default/skins/dist/default/default/tailwind/components/error.js +4 -5
  117. package/dist/default/skins/dist/default/default/tailwind/components/error.js.map +1 -1
  118. package/dist/default/skins/dist/default/default/tailwind/components/icon.js +1 -2
  119. package/dist/default/skins/dist/default/default/tailwind/components/icon.js.map +1 -1
  120. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js +2 -3
  121. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  122. package/dist/default/skins/dist/default/default/tailwind/components/playback-rate.js +1 -1
  123. package/dist/default/skins/dist/default/default/tailwind/components/playback-rate.js.map +1 -1
  124. package/dist/default/skins/dist/default/default/tailwind/components/popup.js +5 -6
  125. package/dist/default/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  126. package/dist/default/skins/dist/default/default/tailwind/components/poster.js +15 -0
  127. package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
  128. package/dist/default/skins/dist/default/default/tailwind/components/preview.js +12 -0
  129. package/dist/default/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  130. package/dist/default/skins/dist/default/default/tailwind/components/root.js +2 -3
  131. package/dist/default/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  132. package/dist/default/skins/dist/default/default/tailwind/components/seek.js +2 -3
  133. package/dist/default/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
  134. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +2 -3
  135. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  136. package/dist/default/skins/dist/default/default/tailwind/components/surface.js +2 -3
  137. package/dist/default/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
  138. package/dist/default/skins/dist/default/default/tailwind/components/time.js +1 -1
  139. package/dist/default/skins/dist/default/default/tailwind/components/time.js.map +1 -1
  140. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +41 -25
  141. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  142. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +18 -27
  143. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  144. package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js +1 -1
  145. package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -1
  146. package/dist/default/skins/dist/default/minimal/tailwind/components/button-group.js +1 -2
  147. package/dist/default/skins/dist/default/minimal/tailwind/components/button-group.js.map +1 -1
  148. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +5 -5
  149. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  150. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js +2 -3
  151. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  152. package/dist/default/skins/dist/default/minimal/tailwind/components/error.js +4 -5
  153. package/dist/default/skins/dist/default/minimal/tailwind/components/error.js.map +1 -1
  154. package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js +1 -2
  155. package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -1
  156. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js +2 -3
  157. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  158. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js +5 -5
  159. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  160. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +15 -0
  161. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
  162. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js +13 -0
  163. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  164. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +2 -3
  165. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  166. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js +2 -3
  167. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
  168. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +2 -3
  169. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  170. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js +5 -6
  171. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  172. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +44 -23
  173. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  174. package/dist/{dev/skins/dist/default/default/tailwind/components → default/skins/dist/default/shared/tailwind}/icon-state.js +7 -2
  175. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -0
  176. package/dist/default/ui/alert-dialog/alert-dialog-close.js +2 -4
  177. package/dist/default/ui/alert-dialog/alert-dialog-close.js.map +1 -1
  178. package/dist/default/ui/alert-dialog/alert-dialog-description.js +2 -4
  179. package/dist/default/ui/alert-dialog/alert-dialog-description.js.map +1 -1
  180. package/dist/default/ui/alert-dialog/alert-dialog-popup.js +2 -4
  181. package/dist/default/ui/alert-dialog/alert-dialog-popup.js.map +1 -1
  182. package/dist/default/ui/alert-dialog/alert-dialog-root.js +5 -7
  183. package/dist/default/ui/alert-dialog/alert-dialog-root.js.map +1 -1
  184. package/dist/default/ui/alert-dialog/alert-dialog-title.js +2 -4
  185. package/dist/default/ui/alert-dialog/alert-dialog-title.js.map +1 -1
  186. package/dist/default/ui/alert-dialog/context.js +2 -4
  187. package/dist/default/ui/alert-dialog/context.js.map +1 -1
  188. package/dist/default/ui/alert-dialog/index.js +1 -2
  189. package/dist/default/ui/alert-dialog/index.parts.js +1 -2
  190. package/dist/default/ui/buffering-indicator/buffering-indicator.js +4 -4
  191. package/dist/default/ui/buffering-indicator/buffering-indicator.js.map +1 -1
  192. package/dist/default/ui/buffering-indicator/index.js +1 -2
  193. package/dist/default/ui/captions-button/captions-button.js +4 -5
  194. package/dist/default/ui/captions-button/captions-button.js.map +1 -1
  195. package/dist/default/ui/captions-button/index.js +1 -2
  196. package/dist/default/ui/controls/context.js +2 -4
  197. package/dist/default/ui/controls/context.js.map +1 -1
  198. package/dist/default/ui/controls/controls-group.js +2 -4
  199. package/dist/default/ui/controls/controls-group.js.map +1 -1
  200. package/dist/default/ui/controls/controls-root.js +2 -4
  201. package/dist/default/ui/controls/controls-root.js.map +1 -1
  202. package/dist/default/ui/controls/index.js +1 -2
  203. package/dist/default/ui/controls/index.parts.js +1 -2
  204. package/dist/default/ui/create-context-part.js +2 -4
  205. package/dist/default/ui/create-context-part.js.map +1 -1
  206. package/dist/default/ui/create-media-button.js +22 -10
  207. package/dist/default/ui/create-media-button.js.map +1 -1
  208. package/dist/default/ui/error-dialog/context.js +14 -0
  209. package/dist/default/ui/error-dialog/context.js.map +1 -0
  210. package/dist/default/ui/error-dialog/error-dialog-description.js +28 -0
  211. package/dist/default/ui/error-dialog/error-dialog-description.js.map +1 -0
  212. package/dist/default/ui/error-dialog/error-dialog-root.js +57 -0
  213. package/dist/default/ui/error-dialog/error-dialog-root.js.map +1 -0
  214. package/dist/default/ui/error-dialog/index.js +3 -0
  215. package/dist/default/ui/error-dialog/index.parts.js +18 -0
  216. package/dist/default/ui/error-dialog/index.parts.js.map +1 -0
  217. package/dist/default/ui/fullscreen-button/fullscreen-button.js +4 -5
  218. package/dist/default/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  219. package/dist/default/ui/fullscreen-button/index.js +1 -2
  220. package/dist/default/ui/gesture/media-gesture.js +42 -0
  221. package/dist/default/ui/gesture/media-gesture.js.map +1 -0
  222. package/dist/default/ui/gesture/use-doubletap-gesture.js +29 -0
  223. package/dist/default/ui/gesture/use-doubletap-gesture.js.map +1 -0
  224. package/dist/default/ui/gesture/use-tap-gesture.js +29 -0
  225. package/dist/default/ui/gesture/use-tap-gesture.js.map +1 -0
  226. package/dist/default/ui/hooks/use-button.js +2 -4
  227. package/dist/default/ui/hooks/use-button.js.map +1 -1
  228. package/dist/default/ui/hooks/use-slider.js +4 -6
  229. package/dist/default/ui/hooks/use-slider.js.map +1 -1
  230. package/dist/default/ui/hotkey/media-hotkey.js +41 -0
  231. package/dist/default/ui/hotkey/media-hotkey.js.map +1 -0
  232. package/dist/default/ui/hotkey/use-aria-key-shortcuts.js +16 -0
  233. package/dist/default/ui/hotkey/use-aria-key-shortcuts.js.map +1 -0
  234. package/dist/default/ui/hotkey/use-hotkey.js +32 -0
  235. package/dist/default/ui/hotkey/use-hotkey.js.map +1 -0
  236. package/dist/default/ui/mute-button/index.js +1 -2
  237. package/dist/default/ui/mute-button/mute-button.js +4 -5
  238. package/dist/default/ui/mute-button/mute-button.js.map +1 -1
  239. package/dist/default/ui/pip-button/index.js +1 -2
  240. package/dist/default/ui/pip-button/pip-button.js +4 -5
  241. package/dist/default/ui/pip-button/pip-button.js.map +1 -1
  242. package/dist/default/ui/play-button/index.js +1 -2
  243. package/dist/default/ui/play-button/play-button.js +4 -5
  244. package/dist/default/ui/play-button/play-button.js.map +1 -1
  245. package/dist/default/ui/playback-rate-button/index.js +1 -2
  246. package/dist/default/ui/playback-rate-button/playback-rate-button.js +2 -4
  247. package/dist/default/ui/playback-rate-button/playback-rate-button.js.map +1 -1
  248. package/dist/default/ui/popover/context.js +2 -4
  249. package/dist/default/ui/popover/context.js.map +1 -1
  250. package/dist/default/ui/popover/index.js +1 -2
  251. package/dist/default/ui/popover/index.parts.js +1 -2
  252. package/dist/default/ui/popover/popover-arrow.js +2 -4
  253. package/dist/default/ui/popover/popover-arrow.js.map +1 -1
  254. package/dist/default/ui/popover/popover-popup.js +13 -6
  255. package/dist/default/ui/popover/popover-popup.js.map +1 -1
  256. package/dist/default/ui/popover/popover-root.js +4 -6
  257. package/dist/default/ui/popover/popover-root.js.map +1 -1
  258. package/dist/default/ui/popover/popover-trigger.js +2 -4
  259. package/dist/default/ui/popover/popover-trigger.js.map +1 -1
  260. package/dist/default/ui/poster/index.js +1 -2
  261. package/dist/default/ui/poster/poster.js +2 -4
  262. package/dist/default/ui/poster/poster.js.map +1 -1
  263. package/dist/default/ui/seek-button/index.js +1 -2
  264. package/dist/default/ui/seek-button/seek-button.js +2 -4
  265. package/dist/default/ui/seek-button/seek-button.js.map +1 -1
  266. package/dist/default/ui/slider/context.js +2 -4
  267. package/dist/default/ui/slider/context.js.map +1 -1
  268. package/dist/default/ui/slider/index.js +1 -2
  269. package/dist/default/ui/slider/index.parts.js +1 -2
  270. package/dist/default/ui/slider/slider-buffer.js +2 -4
  271. package/dist/default/ui/slider/slider-buffer.js.map +1 -1
  272. package/dist/default/ui/slider/slider-fill.js +2 -4
  273. package/dist/default/ui/slider/slider-fill.js.map +1 -1
  274. package/dist/default/ui/slider/slider-preview.js +2 -4
  275. package/dist/default/ui/slider/slider-preview.js.map +1 -1
  276. package/dist/default/ui/slider/slider-root.js +2 -4
  277. package/dist/default/ui/slider/slider-root.js.map +1 -1
  278. package/dist/default/ui/slider/slider-thumb.js +2 -4
  279. package/dist/default/ui/slider/slider-thumb.js.map +1 -1
  280. package/dist/default/ui/slider/slider-thumbnail.js +2 -4
  281. package/dist/default/ui/slider/slider-thumbnail.js.map +1 -1
  282. package/dist/default/ui/slider/slider-track.js +2 -4
  283. package/dist/default/ui/slider/slider-track.js.map +1 -1
  284. package/dist/default/ui/slider/slider-value.js +2 -4
  285. package/dist/default/ui/slider/slider-value.js.map +1 -1
  286. package/dist/default/ui/thumbnail/index.js +2 -0
  287. package/dist/default/ui/thumbnail/thumbnail.js +3 -6
  288. package/dist/default/ui/thumbnail/thumbnail.js.map +1 -1
  289. package/dist/default/ui/time/index.js +1 -2
  290. package/dist/default/ui/time/index.parts.js +1 -2
  291. package/dist/default/ui/time/time-group.js +2 -4
  292. package/dist/default/ui/time/time-group.js.map +1 -1
  293. package/dist/default/ui/time/time-separator.js +2 -4
  294. package/dist/default/ui/time/time-separator.js.map +1 -1
  295. package/dist/default/ui/time/time-value.js +2 -4
  296. package/dist/default/ui/time/time-value.js.map +1 -1
  297. package/dist/default/ui/time-slider/index.js +1 -2
  298. package/dist/default/ui/time-slider/index.parts.js +1 -2
  299. package/dist/default/ui/time-slider/time-slider-root.js +6 -8
  300. package/dist/default/ui/time-slider/time-slider-root.js.map +1 -1
  301. package/dist/default/ui/tooltip/context.js +6 -5
  302. package/dist/default/ui/tooltip/context.js.map +1 -1
  303. package/dist/default/ui/tooltip/group-context.js +2 -4
  304. package/dist/default/ui/tooltip/group-context.js.map +1 -1
  305. package/dist/default/ui/tooltip/index.js +2 -3
  306. package/dist/default/ui/tooltip/index.parts.js +1 -2
  307. package/dist/default/ui/tooltip/tooltip-arrow.js +2 -4
  308. package/dist/default/ui/tooltip/tooltip-arrow.js.map +1 -1
  309. package/dist/default/ui/tooltip/tooltip-popup.js +15 -7
  310. package/dist/default/ui/tooltip/tooltip-popup.js.map +1 -1
  311. package/dist/default/ui/tooltip/tooltip-provider.js +2 -4
  312. package/dist/default/ui/tooltip/tooltip-provider.js.map +1 -1
  313. package/dist/default/ui/tooltip/tooltip-root.js +9 -7
  314. package/dist/default/ui/tooltip/tooltip-root.js.map +1 -1
  315. package/dist/default/ui/tooltip/tooltip-trigger.js +4 -9
  316. package/dist/default/ui/tooltip/tooltip-trigger.js.map +1 -1
  317. package/dist/default/ui/volume-slider/index.js +1 -2
  318. package/dist/default/ui/volume-slider/index.parts.js +1 -2
  319. package/dist/default/ui/volume-slider/volume-slider-root.js +36 -20
  320. package/dist/default/ui/volume-slider/volume-slider-root.js.map +1 -1
  321. package/dist/default/utils/attach-media-element.js +1 -1
  322. package/dist/default/utils/media-props.js +14 -6
  323. package/dist/default/utils/media-props.js.map +1 -1
  324. package/dist/default/utils/merge-props.js +2 -3
  325. package/dist/default/utils/merge-props.js.map +1 -1
  326. package/dist/default/utils/use-composed-refs.js +2 -4
  327. package/dist/default/utils/use-composed-refs.js.map +1 -1
  328. package/dist/default/utils/use-destroy.js +14 -8
  329. package/dist/default/utils/use-destroy.js.map +1 -1
  330. package/dist/default/utils/use-force-render.js +2 -4
  331. package/dist/default/utils/use-force-render.js.map +1 -1
  332. package/dist/default/utils/use-latest-ref.js +2 -4
  333. package/dist/default/utils/use-latest-ref.js.map +1 -1
  334. package/dist/default/utils/use-media-instance.js +22 -0
  335. package/dist/default/utils/use-media-instance.js.map +1 -0
  336. package/dist/default/utils/use-render.js +7 -5
  337. package/dist/default/utils/use-render.js.map +1 -1
  338. package/dist/default/utils/use-safe-id.js +3 -5
  339. package/dist/default/utils/use-safe-id.js.map +1 -1
  340. package/dist/dev/_virtual/_rolldown/runtime.js +6 -11
  341. package/dist/dev/icons/dist/react/default/captions-off.js +1 -3
  342. package/dist/dev/icons/dist/react/default/captions-off.js.map +1 -1
  343. package/dist/dev/icons/dist/react/default/captions-on.js +1 -3
  344. package/dist/dev/icons/dist/react/default/captions-on.js.map +1 -1
  345. package/dist/dev/icons/dist/react/default/fullscreen-enter.js +1 -3
  346. package/dist/dev/icons/dist/react/default/fullscreen-enter.js.map +1 -1
  347. package/dist/dev/icons/dist/react/default/fullscreen-exit.js +1 -3
  348. package/dist/dev/icons/dist/react/default/fullscreen-exit.js.map +1 -1
  349. package/dist/dev/icons/dist/react/default/pause.js +1 -3
  350. package/dist/dev/icons/dist/react/default/pause.js.map +1 -1
  351. package/dist/dev/icons/dist/react/default/pip-enter.js +32 -0
  352. package/dist/dev/icons/dist/react/default/pip-enter.js.map +1 -0
  353. package/dist/dev/icons/dist/react/default/pip-exit.js +32 -0
  354. package/dist/dev/icons/dist/react/default/pip-exit.js.map +1 -0
  355. package/dist/dev/icons/dist/react/default/play.js +1 -3
  356. package/dist/dev/icons/dist/react/default/play.js.map +1 -1
  357. package/dist/dev/icons/dist/react/default/restart.js +1 -3
  358. package/dist/dev/icons/dist/react/default/restart.js.map +1 -1
  359. package/dist/dev/icons/dist/react/default/seek.js +1 -3
  360. package/dist/dev/icons/dist/react/default/seek.js.map +1 -1
  361. package/dist/dev/icons/dist/react/default/spinner.js +1 -3
  362. package/dist/dev/icons/dist/react/default/spinner.js.map +1 -1
  363. package/dist/dev/icons/dist/react/default/volume-high.js +1 -3
  364. package/dist/dev/icons/dist/react/default/volume-high.js.map +1 -1
  365. package/dist/dev/icons/dist/react/default/volume-low.js +1 -3
  366. package/dist/dev/icons/dist/react/default/volume-low.js.map +1 -1
  367. package/dist/dev/icons/dist/react/default/volume-off.js +1 -3
  368. package/dist/dev/icons/dist/react/default/volume-off.js.map +1 -1
  369. package/dist/dev/icons/dist/react/minimal/captions-off.js +1 -3
  370. package/dist/dev/icons/dist/react/minimal/captions-off.js.map +1 -1
  371. package/dist/dev/icons/dist/react/minimal/captions-on.js +1 -3
  372. package/dist/dev/icons/dist/react/minimal/captions-on.js.map +1 -1
  373. package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js +1 -3
  374. package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js.map +1 -1
  375. package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js +1 -3
  376. package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js.map +1 -1
  377. package/dist/dev/icons/dist/react/minimal/pause.js +1 -3
  378. package/dist/dev/icons/dist/react/minimal/pause.js.map +1 -1
  379. package/dist/dev/icons/dist/react/minimal/pip-enter.js +36 -0
  380. package/dist/dev/icons/dist/react/minimal/pip-enter.js.map +1 -0
  381. package/dist/dev/icons/dist/react/minimal/pip-exit.js +36 -0
  382. package/dist/dev/icons/dist/react/minimal/pip-exit.js.map +1 -0
  383. package/dist/dev/icons/dist/react/minimal/play.js +1 -3
  384. package/dist/dev/icons/dist/react/minimal/play.js.map +1 -1
  385. package/dist/dev/icons/dist/react/minimal/restart.js +1 -3
  386. package/dist/dev/icons/dist/react/minimal/restart.js.map +1 -1
  387. package/dist/dev/icons/dist/react/minimal/seek.js +1 -3
  388. package/dist/dev/icons/dist/react/minimal/seek.js.map +1 -1
  389. package/dist/dev/icons/dist/react/minimal/spinner.js +1 -3
  390. package/dist/dev/icons/dist/react/minimal/spinner.js.map +1 -1
  391. package/dist/dev/icons/dist/react/minimal/volume-high.js +1 -3
  392. package/dist/dev/icons/dist/react/minimal/volume-high.js.map +1 -1
  393. package/dist/dev/icons/dist/react/minimal/volume-low.js +1 -3
  394. package/dist/dev/icons/dist/react/minimal/volume-low.js.map +1 -1
  395. package/dist/dev/icons/dist/react/minimal/volume-off.js +1 -3
  396. package/dist/dev/icons/dist/react/minimal/volume-off.js.map +1 -1
  397. package/dist/dev/index.d.ts +22 -8
  398. package/dist/dev/index.js +25 -14
  399. package/dist/dev/media/audio.d.ts.map +1 -1
  400. package/dist/dev/media/audio.js +5 -10
  401. package/dist/dev/media/audio.js.map +1 -1
  402. package/dist/dev/media/background-video/index.js +4 -6
  403. package/dist/dev/media/background-video/index.js.map +1 -1
  404. package/dist/dev/media/dash-video/index.d.ts +16 -0
  405. package/dist/dev/media/dash-video/index.d.ts.map +1 -0
  406. package/dist/dev/media/dash-video/index.js +21 -0
  407. package/dist/dev/media/dash-video/index.js.map +1 -0
  408. package/dist/dev/media/hls-video/index.d.ts +8 -3
  409. package/dist/dev/media/hls-video/index.d.ts.map +1 -1
  410. package/dist/dev/media/hls-video/index.js +8 -13
  411. package/dist/dev/media/hls-video/index.js.map +1 -1
  412. package/dist/dev/media/mux-audio/index.d.ts +13 -0
  413. package/dist/dev/media/mux-audio/index.d.ts.map +1 -0
  414. package/dist/dev/media/mux-audio/index.js +20 -0
  415. package/dist/dev/media/mux-audio/index.js.map +1 -0
  416. package/dist/dev/media/mux-video/index.d.ts +16 -0
  417. package/dist/dev/media/mux-video/index.d.ts.map +1 -0
  418. package/dist/dev/media/mux-video/index.js +21 -0
  419. package/dist/dev/media/mux-video/index.js.map +1 -0
  420. package/dist/dev/media/native-hls-video/index.d.ts +16 -0
  421. package/dist/dev/media/native-hls-video/index.d.ts.map +1 -0
  422. package/dist/dev/media/native-hls-video/index.js +21 -0
  423. package/dist/dev/media/native-hls-video/index.js.map +1 -0
  424. package/dist/dev/media/simple-hls-video/index.d.ts +4 -1
  425. package/dist/dev/media/simple-hls-video/index.d.ts.map +1 -1
  426. package/dist/dev/media/simple-hls-video/index.js +8 -12
  427. package/dist/dev/media/simple-hls-video/index.js.map +1 -1
  428. package/dist/dev/media/video.d.ts.map +1 -1
  429. package/dist/dev/media/video.js +5 -10
  430. package/dist/dev/media/video.js.map +1 -1
  431. package/dist/dev/player/context.d.ts +24 -7
  432. package/dist/dev/player/context.d.ts.map +1 -1
  433. package/dist/dev/player/context.js +27 -15
  434. package/dist/dev/player/context.js.map +1 -1
  435. package/dist/dev/player/create-player.js +18 -6
  436. package/dist/dev/player/create-player.js.map +1 -1
  437. package/dist/dev/presets/audio/index.js +1 -2
  438. package/dist/dev/presets/audio/minimal-skin.css +293 -194
  439. package/dist/dev/presets/audio/minimal-skin.d.ts.map +1 -1
  440. package/dist/dev/presets/audio/minimal-skin.js +144 -123
  441. package/dist/dev/presets/audio/minimal-skin.js.map +1 -1
  442. package/dist/dev/presets/audio/minimal-skin.tailwind.d.ts.map +1 -1
  443. package/dist/dev/presets/audio/minimal-skin.tailwind.js +156 -137
  444. package/dist/dev/presets/audio/minimal-skin.tailwind.js.map +1 -1
  445. package/dist/dev/presets/audio/skin.css +276 -186
  446. package/dist/dev/presets/audio/skin.d.ts.map +1 -1
  447. package/dist/dev/presets/audio/skin.js +218 -126
  448. package/dist/dev/presets/audio/skin.js.map +1 -1
  449. package/dist/dev/presets/audio/skin.tailwind.d.ts.map +1 -1
  450. package/dist/dev/presets/audio/skin.tailwind.js +166 -141
  451. package/dist/dev/presets/audio/skin.tailwind.js.map +1 -1
  452. package/dist/dev/presets/background/index.js +1 -2
  453. package/dist/dev/presets/background/skin.js +1 -2
  454. package/dist/dev/presets/background/skin.js.map +1 -1
  455. package/dist/dev/presets/types.d.ts +6 -1
  456. package/dist/dev/presets/types.d.ts.map +1 -1
  457. package/dist/dev/presets/video/index.js +1 -2
  458. package/dist/dev/presets/video/minimal-skin.css +587 -340
  459. package/dist/dev/presets/video/minimal-skin.d.ts +2 -2
  460. package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
  461. package/dist/dev/presets/video/minimal-skin.js +139 -123
  462. package/dist/dev/presets/video/minimal-skin.js.map +1 -1
  463. package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
  464. package/dist/dev/presets/video/minimal-skin.tailwind.js +149 -138
  465. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
  466. package/dist/dev/presets/video/skin.css +555 -323
  467. package/dist/dev/presets/video/skin.d.ts +2 -2
  468. package/dist/dev/presets/video/skin.d.ts.map +1 -1
  469. package/dist/dev/presets/video/skin.js +299 -171
  470. package/dist/dev/presets/video/skin.js.map +1 -1
  471. package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
  472. package/dist/dev/presets/video/skin.tailwind.js +204 -186
  473. package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
  474. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js +17 -32
  475. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  476. package/dist/dev/skins/dist/default/default/tailwind/components/buffering.js +1 -1
  477. package/dist/dev/skins/dist/default/default/tailwind/components/buffering.js.map +1 -1
  478. package/dist/dev/skins/dist/default/default/tailwind/components/button-group.js +7 -0
  479. package/dist/dev/skins/dist/default/default/tailwind/components/button-group.js.map +1 -0
  480. package/dist/dev/skins/dist/default/default/tailwind/components/button.js +5 -5
  481. package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  482. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js +2 -3
  483. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  484. package/dist/dev/skins/dist/default/default/tailwind/components/error.js +4 -5
  485. package/dist/dev/skins/dist/default/default/tailwind/components/error.js.map +1 -1
  486. package/dist/dev/skins/dist/default/default/tailwind/components/icon.js +1 -2
  487. package/dist/dev/skins/dist/default/default/tailwind/components/icon.js.map +1 -1
  488. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js +2 -3
  489. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  490. package/dist/dev/skins/dist/default/default/tailwind/components/playback-rate.js +1 -1
  491. package/dist/dev/skins/dist/default/default/tailwind/components/playback-rate.js.map +1 -1
  492. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js +5 -6
  493. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  494. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js +15 -0
  495. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
  496. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js +12 -0
  497. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  498. package/dist/dev/skins/dist/default/default/tailwind/components/root.js +2 -3
  499. package/dist/dev/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  500. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js +2 -3
  501. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
  502. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +2 -3
  503. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  504. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js +2 -3
  505. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
  506. package/dist/dev/skins/dist/default/default/tailwind/components/time.js +1 -1
  507. package/dist/dev/skins/dist/default/default/tailwind/components/time.js.map +1 -1
  508. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +41 -25
  509. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  510. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js +18 -27
  511. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  512. package/dist/dev/skins/dist/default/minimal/tailwind/components/buffering.js +1 -1
  513. package/dist/dev/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -1
  514. package/dist/dev/skins/dist/default/minimal/tailwind/components/button-group.js +1 -2
  515. package/dist/dev/skins/dist/default/minimal/tailwind/components/button-group.js.map +1 -1
  516. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +5 -5
  517. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  518. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js +2 -3
  519. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  520. package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js +4 -5
  521. package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js.map +1 -1
  522. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js +1 -2
  523. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -1
  524. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js +2 -3
  525. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  526. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js +5 -5
  527. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  528. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js +15 -0
  529. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
  530. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js +13 -0
  531. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  532. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +2 -3
  533. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  534. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js +2 -3
  535. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
  536. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +2 -3
  537. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  538. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js +5 -6
  539. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  540. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +44 -23
  541. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  542. package/dist/{default/skins/dist/default/default/tailwind/components → dev/skins/dist/default/shared/tailwind}/icon-state.js +7 -2
  543. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +1 -0
  544. package/dist/dev/ui/alert-dialog/alert-dialog-close.js +2 -4
  545. package/dist/dev/ui/alert-dialog/alert-dialog-close.js.map +1 -1
  546. package/dist/dev/ui/alert-dialog/alert-dialog-description.js +2 -4
  547. package/dist/dev/ui/alert-dialog/alert-dialog-description.js.map +1 -1
  548. package/dist/dev/ui/alert-dialog/alert-dialog-popup.js +2 -4
  549. package/dist/dev/ui/alert-dialog/alert-dialog-popup.js.map +1 -1
  550. package/dist/dev/ui/alert-dialog/alert-dialog-root.js +5 -7
  551. package/dist/dev/ui/alert-dialog/alert-dialog-root.js.map +1 -1
  552. package/dist/dev/ui/alert-dialog/alert-dialog-title.js +2 -4
  553. package/dist/dev/ui/alert-dialog/alert-dialog-title.js.map +1 -1
  554. package/dist/dev/ui/alert-dialog/context.js +2 -4
  555. package/dist/dev/ui/alert-dialog/context.js.map +1 -1
  556. package/dist/dev/ui/alert-dialog/index.js +1 -2
  557. package/dist/dev/ui/alert-dialog/index.parts.js +1 -2
  558. package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts.map +1 -1
  559. package/dist/dev/ui/buffering-indicator/buffering-indicator.js +4 -4
  560. package/dist/dev/ui/buffering-indicator/buffering-indicator.js.map +1 -1
  561. package/dist/dev/ui/buffering-indicator/index.js +1 -2
  562. package/dist/dev/ui/captions-button/captions-button.d.ts.map +1 -1
  563. package/dist/dev/ui/captions-button/captions-button.js +4 -5
  564. package/dist/dev/ui/captions-button/captions-button.js.map +1 -1
  565. package/dist/dev/ui/captions-button/index.js +1 -2
  566. package/dist/dev/ui/controls/context.js +2 -4
  567. package/dist/dev/ui/controls/context.js.map +1 -1
  568. package/dist/dev/ui/controls/controls-group.js +2 -4
  569. package/dist/dev/ui/controls/controls-group.js.map +1 -1
  570. package/dist/dev/ui/controls/controls-root.js +2 -4
  571. package/dist/dev/ui/controls/controls-root.js.map +1 -1
  572. package/dist/dev/ui/controls/index.js +1 -2
  573. package/dist/dev/ui/controls/index.parts.js +1 -2
  574. package/dist/dev/ui/create-context-part.js +2 -4
  575. package/dist/dev/ui/create-context-part.js.map +1 -1
  576. package/dist/dev/ui/create-media-button.js +22 -10
  577. package/dist/dev/ui/create-media-button.js.map +1 -1
  578. package/dist/dev/ui/error-dialog/context.d.ts +10 -0
  579. package/dist/dev/ui/error-dialog/context.d.ts.map +1 -0
  580. package/dist/dev/ui/error-dialog/context.js +14 -0
  581. package/dist/dev/ui/error-dialog/context.js.map +1 -0
  582. package/dist/dev/ui/error-dialog/error-dialog-description.d.ts +14 -0
  583. package/dist/dev/ui/error-dialog/error-dialog-description.d.ts.map +1 -0
  584. package/dist/dev/ui/error-dialog/error-dialog-description.js +28 -0
  585. package/dist/dev/ui/error-dialog/error-dialog-description.js.map +1 -0
  586. package/dist/dev/ui/error-dialog/error-dialog-root.d.ts +15 -0
  587. package/dist/dev/ui/error-dialog/error-dialog-root.d.ts.map +1 -0
  588. package/dist/dev/ui/error-dialog/error-dialog-root.js +57 -0
  589. package/dist/dev/ui/error-dialog/error-dialog-root.js.map +1 -0
  590. package/dist/dev/ui/error-dialog/index.d.ts +3 -0
  591. package/dist/dev/ui/error-dialog/index.js +3 -0
  592. package/dist/dev/ui/error-dialog/index.parts.d.ts +13 -0
  593. package/dist/dev/ui/error-dialog/index.parts.d.ts.map +1 -0
  594. package/dist/dev/ui/error-dialog/index.parts.js +18 -0
  595. package/dist/dev/ui/error-dialog/index.parts.js.map +1 -0
  596. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts.map +1 -1
  597. package/dist/dev/ui/fullscreen-button/fullscreen-button.js +4 -5
  598. package/dist/dev/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  599. package/dist/dev/ui/fullscreen-button/index.js +1 -2
  600. package/dist/dev/ui/gesture/media-gesture.d.ts +23 -0
  601. package/dist/dev/ui/gesture/media-gesture.d.ts.map +1 -0
  602. package/dist/dev/ui/gesture/media-gesture.js +42 -0
  603. package/dist/dev/ui/gesture/media-gesture.js.map +1 -0
  604. package/dist/dev/ui/gesture/use-doubletap-gesture.d.ts +14 -0
  605. package/dist/dev/ui/gesture/use-doubletap-gesture.d.ts.map +1 -0
  606. package/dist/dev/ui/gesture/use-doubletap-gesture.js +29 -0
  607. package/dist/dev/ui/gesture/use-doubletap-gesture.js.map +1 -0
  608. package/dist/dev/ui/gesture/use-tap-gesture.d.ts +14 -0
  609. package/dist/dev/ui/gesture/use-tap-gesture.d.ts.map +1 -0
  610. package/dist/dev/ui/gesture/use-tap-gesture.js +29 -0
  611. package/dist/dev/ui/gesture/use-tap-gesture.js.map +1 -0
  612. package/dist/dev/ui/hooks/use-button.js +2 -4
  613. package/dist/dev/ui/hooks/use-button.js.map +1 -1
  614. package/dist/dev/ui/hooks/use-slider.d.ts +1 -1
  615. package/dist/dev/ui/hooks/use-slider.js +4 -6
  616. package/dist/dev/ui/hooks/use-slider.js.map +1 -1
  617. package/dist/dev/ui/hotkey/media-hotkey.d.ts +21 -0
  618. package/dist/dev/ui/hotkey/media-hotkey.d.ts.map +1 -0
  619. package/dist/dev/ui/hotkey/media-hotkey.js +41 -0
  620. package/dist/dev/ui/hotkey/media-hotkey.js.map +1 -0
  621. package/dist/dev/ui/hotkey/use-aria-key-shortcuts.d.ts +5 -0
  622. package/dist/dev/ui/hotkey/use-aria-key-shortcuts.d.ts.map +1 -0
  623. package/dist/dev/ui/hotkey/use-aria-key-shortcuts.js +16 -0
  624. package/dist/dev/ui/hotkey/use-aria-key-shortcuts.js.map +1 -0
  625. package/dist/dev/ui/hotkey/use-hotkey.d.ts +12 -0
  626. package/dist/dev/ui/hotkey/use-hotkey.d.ts.map +1 -0
  627. package/dist/dev/ui/hotkey/use-hotkey.js +32 -0
  628. package/dist/dev/ui/hotkey/use-hotkey.js.map +1 -0
  629. package/dist/dev/ui/mute-button/index.js +1 -2
  630. package/dist/dev/ui/mute-button/mute-button.d.ts.map +1 -1
  631. package/dist/dev/ui/mute-button/mute-button.js +4 -5
  632. package/dist/dev/ui/mute-button/mute-button.js.map +1 -1
  633. package/dist/dev/ui/pip-button/index.js +1 -2
  634. package/dist/dev/ui/pip-button/pip-button.d.ts.map +1 -1
  635. package/dist/dev/ui/pip-button/pip-button.js +4 -5
  636. package/dist/dev/ui/pip-button/pip-button.js.map +1 -1
  637. package/dist/dev/ui/play-button/index.js +1 -2
  638. package/dist/dev/ui/play-button/play-button.d.ts.map +1 -1
  639. package/dist/dev/ui/play-button/play-button.js +4 -5
  640. package/dist/dev/ui/play-button/play-button.js.map +1 -1
  641. package/dist/dev/ui/playback-rate-button/index.js +1 -2
  642. package/dist/dev/ui/playback-rate-button/playback-rate-button.js +2 -4
  643. package/dist/dev/ui/playback-rate-button/playback-rate-button.js.map +1 -1
  644. package/dist/dev/ui/popover/context.js +2 -4
  645. package/dist/dev/ui/popover/context.js.map +1 -1
  646. package/dist/dev/ui/popover/index.js +1 -2
  647. package/dist/dev/ui/popover/index.parts.js +1 -2
  648. package/dist/dev/ui/popover/popover-arrow.js +2 -4
  649. package/dist/dev/ui/popover/popover-arrow.js.map +1 -1
  650. package/dist/dev/ui/popover/popover-popup.d.ts.map +1 -1
  651. package/dist/dev/ui/popover/popover-popup.js +13 -6
  652. package/dist/dev/ui/popover/popover-popup.js.map +1 -1
  653. package/dist/dev/ui/popover/popover-root.js +4 -6
  654. package/dist/dev/ui/popover/popover-root.js.map +1 -1
  655. package/dist/dev/ui/popover/popover-trigger.js +2 -4
  656. package/dist/dev/ui/popover/popover-trigger.js.map +1 -1
  657. package/dist/dev/ui/poster/index.js +1 -2
  658. package/dist/dev/ui/poster/poster.js +2 -4
  659. package/dist/dev/ui/poster/poster.js.map +1 -1
  660. package/dist/dev/ui/seek-button/index.js +1 -2
  661. package/dist/dev/ui/seek-button/seek-button.js +2 -4
  662. package/dist/dev/ui/seek-button/seek-button.js.map +1 -1
  663. package/dist/dev/ui/slider/context.js +2 -4
  664. package/dist/dev/ui/slider/context.js.map +1 -1
  665. package/dist/dev/ui/slider/index.js +1 -2
  666. package/dist/dev/ui/slider/index.parts.js +1 -2
  667. package/dist/dev/ui/slider/slider-buffer.js +2 -4
  668. package/dist/dev/ui/slider/slider-buffer.js.map +1 -1
  669. package/dist/dev/ui/slider/slider-fill.js +2 -4
  670. package/dist/dev/ui/slider/slider-fill.js.map +1 -1
  671. package/dist/dev/ui/slider/slider-preview.js +2 -4
  672. package/dist/dev/ui/slider/slider-preview.js.map +1 -1
  673. package/dist/dev/ui/slider/slider-root.js +2 -4
  674. package/dist/dev/ui/slider/slider-root.js.map +1 -1
  675. package/dist/dev/ui/slider/slider-thumb.js +2 -4
  676. package/dist/dev/ui/slider/slider-thumb.js.map +1 -1
  677. package/dist/dev/ui/slider/slider-thumbnail.js +2 -4
  678. package/dist/dev/ui/slider/slider-thumbnail.js.map +1 -1
  679. package/dist/dev/ui/slider/slider-track.js +2 -4
  680. package/dist/dev/ui/slider/slider-track.js.map +1 -1
  681. package/dist/dev/ui/slider/slider-value.js +2 -4
  682. package/dist/dev/ui/slider/slider-value.js.map +1 -1
  683. package/dist/dev/ui/thumbnail/index.d.ts +2 -0
  684. package/dist/dev/ui/thumbnail/index.js +2 -0
  685. package/dist/dev/ui/thumbnail/thumbnail.d.ts.map +1 -1
  686. package/dist/dev/ui/thumbnail/thumbnail.js +3 -6
  687. package/dist/dev/ui/thumbnail/thumbnail.js.map +1 -1
  688. package/dist/dev/ui/time/index.js +1 -2
  689. package/dist/dev/ui/time/index.parts.js +1 -2
  690. package/dist/dev/ui/time/time-group.js +2 -4
  691. package/dist/dev/ui/time/time-group.js.map +1 -1
  692. package/dist/dev/ui/time/time-separator.js +2 -4
  693. package/dist/dev/ui/time/time-separator.js.map +1 -1
  694. package/dist/dev/ui/time/time-value.js +2 -4
  695. package/dist/dev/ui/time/time-value.js.map +1 -1
  696. package/dist/dev/ui/time-slider/index.js +1 -2
  697. package/dist/dev/ui/time-slider/index.parts.js +1 -2
  698. package/dist/dev/ui/time-slider/time-slider-root.js +6 -8
  699. package/dist/dev/ui/time-slider/time-slider-root.js.map +1 -1
  700. package/dist/dev/ui/tooltip/context.d.ts +4 -1
  701. package/dist/dev/ui/tooltip/context.d.ts.map +1 -1
  702. package/dist/dev/ui/tooltip/context.js +6 -5
  703. package/dist/dev/ui/tooltip/context.js.map +1 -1
  704. package/dist/dev/ui/tooltip/group-context.js +2 -4
  705. package/dist/dev/ui/tooltip/group-context.js.map +1 -1
  706. package/dist/dev/ui/tooltip/index.d.ts +2 -2
  707. package/dist/dev/ui/tooltip/index.js +2 -3
  708. package/dist/dev/ui/tooltip/index.parts.js +1 -2
  709. package/dist/dev/ui/tooltip/tooltip-arrow.js +2 -4
  710. package/dist/dev/ui/tooltip/tooltip-arrow.js.map +1 -1
  711. package/dist/dev/ui/tooltip/tooltip-popup.d.ts.map +1 -1
  712. package/dist/dev/ui/tooltip/tooltip-popup.js +15 -7
  713. package/dist/dev/ui/tooltip/tooltip-popup.js.map +1 -1
  714. package/dist/dev/ui/tooltip/tooltip-provider.js +2 -4
  715. package/dist/dev/ui/tooltip/tooltip-provider.js.map +1 -1
  716. package/dist/dev/ui/tooltip/tooltip-root.d.ts.map +1 -1
  717. package/dist/dev/ui/tooltip/tooltip-root.js +9 -7
  718. package/dist/dev/ui/tooltip/tooltip-root.js.map +1 -1
  719. package/dist/dev/ui/tooltip/tooltip-trigger.d.ts.map +1 -1
  720. package/dist/dev/ui/tooltip/tooltip-trigger.js +4 -9
  721. package/dist/dev/ui/tooltip/tooltip-trigger.js.map +1 -1
  722. package/dist/dev/ui/volume-slider/index.js +1 -2
  723. package/dist/dev/ui/volume-slider/index.parts.js +1 -2
  724. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts.map +1 -1
  725. package/dist/dev/ui/volume-slider/volume-slider-root.js +36 -20
  726. package/dist/dev/ui/volume-slider/volume-slider-root.js.map +1 -1
  727. package/dist/dev/utils/attach-media-element.d.ts +9 -0
  728. package/dist/dev/utils/attach-media-element.d.ts.map +1 -0
  729. package/dist/dev/utils/attach-media-element.js +1 -1
  730. package/dist/dev/utils/media-props.d.ts +8 -0
  731. package/dist/dev/utils/media-props.d.ts.map +1 -0
  732. package/dist/dev/utils/media-props.js +14 -6
  733. package/dist/dev/utils/media-props.js.map +1 -1
  734. package/dist/dev/utils/merge-props.js +2 -3
  735. package/dist/dev/utils/merge-props.js.map +1 -1
  736. package/dist/dev/utils/use-composed-refs.d.ts +29 -0
  737. package/dist/dev/utils/use-composed-refs.d.ts.map +1 -0
  738. package/dist/dev/utils/use-composed-refs.js +2 -4
  739. package/dist/dev/utils/use-composed-refs.js.map +1 -1
  740. package/dist/dev/utils/use-destroy.d.ts +22 -0
  741. package/dist/dev/utils/use-destroy.d.ts.map +1 -0
  742. package/dist/dev/utils/use-destroy.js +14 -8
  743. package/dist/dev/utils/use-destroy.js.map +1 -1
  744. package/dist/dev/utils/use-force-render.js +2 -4
  745. package/dist/dev/utils/use-force-render.js.map +1 -1
  746. package/dist/dev/utils/use-latest-ref.d.ts +18 -0
  747. package/dist/dev/utils/use-latest-ref.d.ts.map +1 -0
  748. package/dist/dev/utils/use-latest-ref.js +2 -4
  749. package/dist/dev/utils/use-latest-ref.js.map +1 -1
  750. package/dist/dev/utils/use-media-instance.d.ts +16 -0
  751. package/dist/dev/utils/use-media-instance.d.ts.map +1 -0
  752. package/dist/dev/utils/use-media-instance.js +22 -0
  753. package/dist/dev/utils/use-media-instance.js.map +1 -0
  754. package/dist/dev/utils/use-render.d.ts.map +1 -1
  755. package/dist/dev/utils/use-render.js +7 -5
  756. package/dist/dev/utils/use-render.js.map +1 -1
  757. package/dist/dev/utils/use-safe-id.js +3 -5
  758. package/dist/dev/utils/use-safe-id.js.map +1 -1
  759. package/package.json +15 -15
  760. package/dist/default/icons/dist/react/default/pip.js +0 -27
  761. package/dist/default/icons/dist/react/default/pip.js.map +0 -1
  762. package/dist/default/icons/dist/react/minimal/pip.js +0 -27
  763. package/dist/default/icons/dist/react/minimal/pip.js.map +0 -1
  764. package/dist/default/presets/video/error-dialog.js +0 -51
  765. package/dist/default/presets/video/error-dialog.js.map +0 -1
  766. package/dist/default/skins/dist/default/default/tailwind/components/icon-state.js.map +0 -1
  767. package/dist/default/skins/dist/default/minimal/tailwind/components/icon-state.js +0 -29
  768. package/dist/default/skins/dist/default/minimal/tailwind/components/icon-state.js.map +0 -1
  769. package/dist/dev/icons/dist/react/default/pip.js +0 -27
  770. package/dist/dev/icons/dist/react/default/pip.js.map +0 -1
  771. package/dist/dev/icons/dist/react/minimal/pip.js +0 -27
  772. package/dist/dev/icons/dist/react/minimal/pip.js.map +0 -1
  773. package/dist/dev/presets/video/error-dialog.js +0 -51
  774. package/dist/dev/presets/video/error-dialog.js.map +0 -1
  775. package/dist/dev/skins/dist/default/default/tailwind/components/icon-state.js.map +0 -1
  776. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon-state.js +0 -29
  777. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon-state.js.map +0 -1
@@ -1,97 +1,3 @@
1
- /* ==========================================================================
2
- Icon State Visibility for Video Skins
3
-
4
- Data-attribute-driven visibility rules for multi-state icon buttons.
5
- Uses :is() with both element selectors (for HTML custom element wrappers)
6
- and class selectors (for React rendered SVG elements).
7
- ========================================================================== */
8
-
9
- /* --- All icons hidden by default --- */
10
-
11
- .media-button--play .media-icon--restart,
12
- .media-button--play .media-icon--play,
13
- .media-button--play .media-icon--pause,
14
- .media-button--mute .media-icon--volume-off,
15
- .media-button--mute .media-icon--volume-low,
16
- .media-button--mute .media-icon--volume-high,
17
- .media-button--fullscreen .media-icon--fullscreen-enter,
18
- .media-button--fullscreen .media-icon--fullscreen-exit,
19
- .media-button--captions .media-icon--captions-off,
20
- .media-button--captions .media-icon--captions-on {
21
- display: none;
22
- opacity: 0;
23
- }
24
-
25
- /* --- Active icon per state --- */
26
-
27
- /* Play: ended → restart */
28
- .media-button--play[data-ended] .media-icon--restart,
29
- /* Play: paused (not ended) → play */
30
- .media-button--play:not([data-ended])[data-paused] .media-icon--play,
31
- /* Play: playing (not paused, not ended) → pause */
32
- .media-button--play:not([data-paused]):not([data-ended]) .media-icon--pause,
33
- /* Mute: muted → volume off */
34
- .media-button--mute[data-muted] .media-icon--volume-off,
35
- /* Mute: volume low (not muted) → volume low */
36
- .media-button--mute:not([data-muted])[data-volume-level="low"] .media-icon--volume-low,
37
- /* Mute: volume high (not muted, not low) → volume high */
38
- .media-button--mute:not([data-muted]):not([data-volume-level="low"]) .media-icon--volume-high,
39
- /* Fullscreen: not fullscreen → enter */
40
- .media-button--fullscreen:not([data-fullscreen]) .media-icon--fullscreen-enter,
41
- /* Fullscreen: fullscreen → exit */
42
- .media-button--fullscreen[data-fullscreen] .media-icon--fullscreen-exit,
43
- /* Captions: not active → captions off */
44
- .media-button--captions:not([data-active]) .media-icon--captions-off,
45
- /* Captions: active → captions on */
46
- .media-button--captions[data-active] .media-icon--captions-on {
47
- display: block;
48
- opacity: 1;
49
- }
50
-
51
- /* ==========================================================================
52
- Tooltip Label State Visibility for Video Skins
53
-
54
- Data-attribute-driven visibility rules for multi-state tooltip labels.
55
- Uses adjacent sibling selectors to match button state → tooltip content.
56
- ========================================================================== */
57
-
58
- /* --- All multi-state labels hidden by default --- */
59
-
60
- .media-tooltip-label {
61
- display: none;
62
- }
63
-
64
- /* --- Active label per state --- */
65
-
66
- /* Play: ended → replay */
67
- .media-button--play[data-ended] + .media-tooltip .media-tooltip-label--replay,
68
- /* Play: paused (not ended) → play */
69
- .media-button--play:not([data-ended])[data-paused] + .media-tooltip
70
- .media-tooltip-label--play,
71
- /* Play: playing (not paused, not ended) → pause */
72
- .media-button--play:not([data-paused]):not([data-ended]) + .media-tooltip
73
- .media-tooltip-label--pause,
74
- /* Fullscreen: not fullscreen → enter */
75
- .media-button--fullscreen:not([data-fullscreen]) + .media-tooltip
76
- .media-tooltip-label--enter-fullscreen,
77
- /* Fullscreen: fullscreen → exit */
78
- .media-button--fullscreen[data-fullscreen] + .media-tooltip
79
- .media-tooltip-label--exit-fullscreen,
80
- /* Captions: not active → enable */
81
- .media-button--captions:not([data-active]) + .media-tooltip
82
- .media-tooltip-label--enable-captions,
83
- /* Captions: active → disable */
84
- .media-button--captions[data-active] + .media-tooltip
85
- .media-tooltip-label--disable-captions,
86
- /* PiP: not in pip → enter */
87
- .media-button--pip:not([data-pip]) + .media-tooltip
88
- .media-tooltip-label--enter-pip,
89
- /* PiP: in pip → exit */
90
- .media-button--pip[data-pip] + .media-tooltip
91
- .media-tooltip-label--exit-pip {
92
- display: block;
93
- }
94
-
95
1
  /* ==========================================================================
96
2
  Reset
97
3
  ========================================================================== */
@@ -100,7 +6,6 @@
100
6
  .media-minimal-skin *::before,
101
7
  .media-minimal-skin *::after {
102
8
  box-sizing: border-box;
103
- margin: 0;
104
9
  }
105
10
  .media-minimal-skin img,
106
11
  .media-minimal-skin video,
@@ -122,22 +27,39 @@
122
27
  ========================================================================== */
123
28
 
124
29
  .media-minimal-skin {
30
+ container: media-root / inline-size;
125
31
  position: relative;
126
32
  isolation: isolate;
127
33
  display: block;
128
- container: media-root / inline-size;
34
+ height: 100%;
35
+ width: 100%;
129
36
  border-radius: var(--media-border-radius, 0.75rem);
37
+ outline: 2px solid transparent;
38
+ outline-offset: 2px;
39
+
40
+ &:focus-visible {
41
+ outline-color: currentColor;
42
+ }
130
43
  font-family:
131
44
  Inter Variable,
132
45
  Inter,
133
46
  ui-sans-serif,
134
47
  system-ui,
135
48
  sans-serif;
136
- font-size: 0.8125rem;
137
49
  line-height: 1.5;
138
50
  letter-spacing: normal;
139
51
  -webkit-font-smoothing: auto;
140
52
  -moz-osx-font-smoothing: auto;
53
+
54
+ & > * {
55
+ font-size: 0.75rem; /* 12px at 100% font size */
56
+ }
57
+
58
+ @container media-root (width > 48rem) {
59
+ & > * {
60
+ font-size: 0.875rem; /* 14px at 100% font size */
61
+ }
62
+ }
141
63
  }
142
64
 
143
65
  /* ==========================================================================
@@ -149,26 +71,19 @@
149
71
  display: block;
150
72
  width: 100%;
151
73
  height: 100%;
152
- border-radius: var(--media-border-radius, 0.75rem);
74
+ object-fit: var(--media-object-fit, contain);
75
+ object-position: var(--media-object-position, center);
153
76
  }
154
-
155
- /* ==========================================================================
156
- Poster Image
157
- ========================================================================== */
158
-
159
- .media-minimal-skin > img {
160
- position: absolute;
161
- inset: 0;
162
- width: 100%;
163
- height: 100%;
77
+ .media-minimal-skin ::slotted(video) {
78
+ border-radius: var(--media-video-border-radius);
79
+ }
80
+ .media-minimal-skin video {
164
81
  border-radius: inherit;
165
- object-fit: cover;
166
- transition: opacity 0.25s;
167
- pointer-events: none;
82
+ }
168
83
 
169
- &:not([data-visible]) {
170
- opacity: 0;
171
- }
84
+ .media-minimal-skin:fullscreen ::slotted(video),
85
+ .media-minimal-skin:fullscreen video {
86
+ object-fit: contain;
172
87
  }
173
88
 
174
89
  /* ==========================================================================
@@ -180,28 +95,26 @@
180
95
  inset: 0;
181
96
  border-radius: inherit;
182
97
  background-image: linear-gradient(to top, oklch(0 0 0 / 0.7), oklch(0 0 0 / 0.5) 7.5rem, oklch(0 0 0 / 0));
183
- backdrop-filter: blur(0) saturate(1.2) brightness(0.9);
98
+ backdrop-filter: blur(0) saturate(1);
184
99
  opacity: 0;
100
+ pointer-events: none;
185
101
  transition-property: opacity, backdrop-filter;
186
- transition-duration: 500ms;
187
- transition-delay: 500ms;
102
+ transition-duration: var(--media-controls-transition-duration);
188
103
  transition-timing-function: ease-out;
189
- pointer-events: none;
104
+ }
190
105
 
191
- @media (prefers-reduced-motion: reduce) {
192
- transition-duration: 100ms;
193
- }
106
+ .media-minimal-skin .media-error ~ .media-overlay {
107
+ transition-duration: var(--media-error-dialog-transition-duration);
108
+ transition-delay: var(--media-error-dialog-transition-delay);
194
109
  }
195
110
 
196
111
  .media-minimal-skin .media-controls[data-visible] ~ .media-overlay,
197
112
  .media-minimal-skin .media-error[data-open] ~ .media-overlay {
198
113
  opacity: 1;
199
- transition-duration: 150ms;
200
- transition-delay: 0ms;
201
114
  }
202
115
 
203
116
  .media-minimal-skin .media-error[data-open] ~ .media-overlay {
204
- backdrop-filter: blur(8px) saturate(1.2) brightness(0.9);
117
+ backdrop-filter: blur(16px) saturate(1.2);
205
118
  }
206
119
 
207
120
  /* ==========================================================================
@@ -226,59 +139,8 @@
226
139
  Error Dialog
227
140
  ========================================================================== */
228
141
 
229
- .media-minimal-skin .media-error {
230
- position: absolute;
231
- inset: 0;
232
- z-index: 20;
233
- display: flex;
234
- align-items: center;
235
- justify-content: center;
236
- pointer-events: none;
237
- }
238
-
239
- .media-minimal-skin .media-error__dialog {
240
- display: flex;
241
- flex-direction: column;
242
- gap: 0.75rem;
243
- max-width: 16rem;
244
- padding: 1rem;
245
- color: oklch(1 0 0);
246
- font-size: 0.875rem;
247
- text-shadow: 0 1px 0 oklch(0 0 0 / 0.5);
248
- transition-property: opacity, transform;
249
- transition-duration: 500ms;
250
- transition-delay: 100ms;
251
- transition-timing-function: linear(
252
- 0,
253
- 0.034 1.5%,
254
- 0.763 9.7%,
255
- 1.066 13.9%,
256
- 1.198 19.9%,
257
- 1.184 21.8%,
258
- 0.963 37.5%,
259
- 0.997 50.9%,
260
- 1
261
- );
262
-
263
- /* Simple, fast transition for reduced motion users */
264
- @media (prefers-reduced-motion: reduce) {
265
- transition-duration: 100ms;
266
- transition-delay: 0ms;
267
- transition-timing-function: ease-out;
268
- }
269
- }
270
-
271
- .media-minimal-skin .media-error[data-starting-style] .media-error__dialog,
272
- .media-minimal-skin .media-error[data-ending-style] .media-error__dialog {
273
- opacity: 0;
274
- transform: scale(0.5);
275
- }
276
-
277
- .media-minimal-skin .media-error__content {
278
- display: flex;
279
- flex-direction: column;
280
- gap: 0.5rem;
281
- padding: 0.375rem 0;
142
+ .media-minimal-skin .media-error:not([data-open]) {
143
+ display: none;
282
144
  }
283
145
 
284
146
  .media-minimal-skin .media-error__title {
@@ -288,6 +150,7 @@
288
150
 
289
151
  .media-minimal-skin .media-error__description {
290
152
  opacity: 0.7;
153
+ overflow-wrap: anywhere;
291
154
  }
292
155
 
293
156
  .media-minimal-skin .media-error__actions {
@@ -299,6 +162,10 @@
299
162
  }
300
163
  }
301
164
 
165
+ .media-minimal-skin .media-error[data-open] ~ .media-controls * {
166
+ visibility: hidden;
167
+ }
168
+
302
169
  /* ==========================================================================
303
170
  Controls
304
171
  ========================================================================== */
@@ -307,12 +174,14 @@
307
174
  container: media-controls / inline-size;
308
175
  display: flex;
309
176
  align-items: center;
310
- --media-controls-current-shadow-color: oklch(from currentColor 0 0 0 / clamp(0, calc((l - 0.5) * 0.5), 0.25));
177
+ --media-controls-current-shadow-color: oklch(from currentColor 0 0 0 / clamp(0, calc((l - 0.5) * 0.5), 0.15));
311
178
  --media-controls-current-shadow-color-subtle: oklch(
312
179
  from var(--media-controls-current-shadow-color) l c h /
313
180
  calc(alpha * 0.4)
314
181
  );
315
- text-shadow: 0 0 1px var(--media-controls-current-shadow-color);
182
+ background-color: var(--media-controls-background-color);
183
+ backdrop-filter: var(--media-controls-backdrop-filter);
184
+ text-shadow: 0 1px 0 var(--media-controls-current-shadow-color);
316
185
  }
317
186
 
318
187
  /* ==========================================================================
@@ -320,49 +189,42 @@
320
189
  ========================================================================== */
321
190
 
322
191
  .media-minimal-skin .media-time-controls {
192
+ container: media-time-controls / inline-size;
323
193
  display: flex;
324
194
  flex-direction: row-reverse;
325
195
  align-items: center;
326
196
  flex: 1;
327
197
  gap: 0.75rem;
328
198
  }
329
- .media-minimal-skin .media-time {
199
+
200
+ .media-minimal-skin .media-time-group {
330
201
  display: flex;
331
202
  align-items: center;
332
203
  gap: 0.25rem;
333
204
  }
334
- .media-minimal-skin .media-time__value {
205
+
206
+ .media-minimal-skin .media-time {
335
207
  font-variant-numeric: tabular-nums;
336
208
  }
337
- .media-minimal-skin .media-time__value--current,
338
- .media-minimal-skin .media-time__separator {
209
+
210
+ .media-minimal-skin .media-time--current,
211
+ .media-minimal-skin .media-time-separator {
339
212
  display: none;
340
213
  }
341
- @container media-controls (width > 28rem) {
214
+
215
+ @container media-root (width > 42rem) {
342
216
  .media-minimal-skin .media-time-controls {
343
217
  flex-direction: row;
344
218
  }
345
- .media-minimal-skin .media-time__value--duration,
346
- .media-minimal-skin .media-time__separator {
219
+
220
+ .media-minimal-skin .media-time--duration,
221
+ .media-minimal-skin .media-time-separator {
347
222
  color: oklch(from currentColor l c h / 0.6);
348
223
  }
349
- .media-minimal-skin .media-time__value--current,
350
- .media-minimal-skin .media-time__separator {
351
- display: inline;
352
- }
353
- }
354
224
 
355
- /* ==========================================================================
356
- Button Groups
357
- ========================================================================== */
358
-
359
- .media-minimal-skin .media-button-group {
360
- display: flex;
361
- align-items: center;
362
- gap: 0.075rem;
363
-
364
- @container media-root (width > 40rem) {
365
- gap: 0.125rem;
225
+ .media-minimal-skin .media-time--current,
226
+ .media-minimal-skin .media-time-separator {
227
+ display: inline;
366
228
  }
367
229
  }
368
230
 
@@ -377,26 +239,29 @@
377
239
  justify-content: center;
378
240
  flex-shrink: 0;
379
241
  padding: 0.5rem 1rem;
380
- background: oklch(1 0 0);
381
242
  border: none;
382
243
  border-radius: 0.5rem;
383
244
  outline: 2px solid transparent;
384
245
  outline-offset: -2px;
385
- color: oklch(0 0 0);
386
- font-weight: 500;
387
- text-align: center;
388
- text-shadow: inherit;
389
- transition-property: background-color, color, outline-offset, transform;
246
+ transition-property: background-color, outline-offset, scale;
247
+ /* Fix weird jumping when clicking on the buttons in Safari. */
248
+ will-change: scale;
390
249
  transition-duration: 150ms;
391
250
  transition-timing-function: ease-out;
392
251
  cursor: pointer;
393
252
  user-select: none;
253
+ text-align: center;
254
+ touch-action: manipulation;
394
255
 
395
256
  &:focus-visible {
396
257
  outline-color: currentColor;
397
258
  outline-offset: 2px;
398
259
  }
399
260
 
261
+ &:active {
262
+ scale: 0.98;
263
+ }
264
+
400
265
  &[disabled] {
401
266
  opacity: 0.5;
402
267
  filter: grayscale(1);
@@ -408,24 +273,45 @@
408
273
  }
409
274
  }
410
275
 
411
- /* Icon button variant */
412
- .media-minimal-skin .media-button--icon {
413
- display: grid;
414
- width: 2.375rem;
415
- padding: 0;
416
- aspect-ratio: 1;
276
+ /* biome-ignore lint/correctness/noUnknownProperty: corner-shape is an emerging CSS spec */
277
+ @supports (corner-shape: squircle) {
278
+ .media-minimal-skin .media-button {
279
+ border-radius: 1rem;
280
+ /* biome-ignore lint/correctness/noUnknownProperty: corner-shape is an emerging CSS spec */
281
+ corner-shape: squircle;
282
+ }
283
+ }
284
+
285
+ /* Primary button variant */
286
+ .media-minimal-skin .media-button--primary {
287
+ background: oklch(1 0 0);
288
+ color: oklch(0 0 0);
289
+ font-weight: 500;
290
+ text-shadow: none;
291
+ }
292
+
293
+ /* Subtle button variant */
294
+ .media-minimal-skin .media-button--subtle {
417
295
  background: transparent;
418
296
  color: inherit;
297
+ text-shadow: inherit;
419
298
 
420
299
  &:hover,
421
300
  &:focus-visible,
422
301
  &[aria-expanded="true"] {
423
- color: oklch(from currentColor l c h / 0.8);
424
- text-decoration: none;
302
+ background: oklch(from currentColor l c h / 0.1);
425
303
  }
304
+ }
305
+
306
+ /* Icon button variant */
307
+ .media-minimal-skin .media-button--icon {
308
+ display: grid;
309
+ width: 2.375rem;
310
+ padding: 0;
311
+ aspect-ratio: 1;
426
312
 
427
313
  &:active {
428
- transform: scale(0.9);
314
+ scale: 0.9;
429
315
  }
430
316
 
431
317
  & .media-icon {
@@ -439,7 +325,7 @@
439
325
  position: absolute;
440
326
  right: -1px;
441
327
  bottom: -3px;
442
- font-size: 0.75em;
328
+ font-size: 10px; /* Hard coded due to size limitations. */
443
329
  font-weight: 480;
444
330
  font-variant-numeric: tabular-nums;
445
331
  }
@@ -448,10 +334,6 @@
448
334
  right: unset;
449
335
  left: -1px;
450
336
  }
451
-
452
- @container media-controls (width < 28rem) {
453
- display: none;
454
- }
455
337
  }
456
338
 
457
339
  /* Playback rate button */
@@ -465,6 +347,20 @@
465
347
  }
466
348
  }
467
349
 
350
+ /* ==========================================================================
351
+ Button Groups
352
+ ========================================================================== */
353
+
354
+ .media-minimal-skin .media-button-group {
355
+ display: flex;
356
+ align-items: center;
357
+ gap: 0.075rem;
358
+
359
+ @container media-root (width > 42rem) {
360
+ gap: 0.125rem;
361
+ }
362
+ }
363
+
468
364
  /* ==========================================================================
469
365
  Icons
470
366
  ========================================================================== */
@@ -487,6 +383,94 @@
487
383
  scale: -1 1;
488
384
  }
489
385
 
386
+ /* ==========================================================================
387
+ Poster Image
388
+ ========================================================================== */
389
+
390
+ .media-minimal-skin media-poster,
391
+ .media-minimal-skin > img {
392
+ position: absolute;
393
+ inset: 0;
394
+ width: 100%;
395
+ height: 100%;
396
+ transition: opacity 0.25s;
397
+ pointer-events: none;
398
+ }
399
+ .media-minimal-skin media-poster:not([data-visible]),
400
+ .media-minimal-skin > img:not([data-visible]) {
401
+ opacity: 0;
402
+ }
403
+ .media-minimal-skin media-poster ::slotted(img),
404
+ .media-minimal-skin media-poster img {
405
+ position: absolute;
406
+ inset: 0;
407
+ width: 100%;
408
+ height: 100%;
409
+ object-fit: var(--media-object-fit, contain);
410
+ object-position: var(--media-object-position, center);
411
+ border-radius: var(--media-video-border-radius);
412
+ }
413
+ .media-minimal-skin > img {
414
+ object-fit: var(--media-object-fit, contain);
415
+ object-position: var(--media-object-position, center);
416
+ border-radius: inherit;
417
+ }
418
+
419
+ .media-minimal-skin:fullscreen media-poster ::slotted(img),
420
+ .media-minimal-skin:fullscreen media-poster img,
421
+ .media-minimal-skin:fullscreen > img {
422
+ object-fit: contain;
423
+ }
424
+
425
+ /* ==========================================================================
426
+ Media preview
427
+ ========================================================================== */
428
+ .media-minimal-skin .media-preview {
429
+ pointer-events: none;
430
+
431
+ & .media-preview__thumbnail-wrapper {
432
+ position: relative;
433
+ border-radius: 0.5rem;
434
+ background-color: oklch(0 0 0 / 0.9);
435
+ }
436
+ & .media-preview__thumbnail {
437
+ display: block;
438
+ border-radius: inherit;
439
+ }
440
+
441
+ & .media-preview__time {
442
+ display: block;
443
+ text-align: center;
444
+ margin-top: 0.5rem;
445
+ }
446
+
447
+ & .media-overlay {
448
+ opacity: 1;
449
+ }
450
+
451
+ & .media-preview__spinner {
452
+ position: absolute;
453
+ top: 50%;
454
+ left: 50%;
455
+ translate: -50% -50%;
456
+ opacity: 0;
457
+ }
458
+
459
+ & .media-preview__thumbnail,
460
+ & .media-preview__spinner {
461
+ transition: opacity 150ms ease-out;
462
+ }
463
+
464
+ &:has(.media-preview__thumbnail[data-loading]) {
465
+ & .media-preview__thumbnail {
466
+ opacity: 0;
467
+ }
468
+ & .media-preview__spinner {
469
+ opacity: 1;
470
+ }
471
+ }
472
+ }
473
+
490
474
  /* ==========================================================================
491
475
  Slider
492
476
  ========================================================================== */
@@ -499,15 +483,16 @@
499
483
  flex: 1;
500
484
  border-radius: calc(infinity * 1px);
501
485
  outline: none;
486
+ cursor: pointer;
502
487
 
503
488
  &[data-orientation="horizontal"] {
504
489
  min-width: 5rem;
505
490
  width: 100%;
506
- height: 1.25rem;
491
+ height: 2rem;
507
492
  }
508
493
 
509
494
  &[data-orientation="vertical"] {
510
- width: 1.25rem;
495
+ width: 2rem;
511
496
  height: 4.5rem;
512
497
  }
513
498
  }
@@ -535,7 +520,7 @@
535
520
  /* Thumb */
536
521
  .media-minimal-skin .media-slider__thumb {
537
522
  position: absolute;
538
- transform: translate(-50%, -50%);
523
+ translate: -50% -50%;
539
524
  z-index: 10;
540
525
  width: 0.75rem;
541
526
  height: 0.75rem;
@@ -628,9 +613,21 @@
628
613
  }
629
614
  }
630
615
 
631
- /* Time display within slider */
632
- .media-minimal-skin .media-slider__time-display {
633
- font-variant-numeric: tabular-nums;
616
+ /* Dragging thumb and fill follow the pointer position */
617
+ .media-minimal-skin .media-slider[data-dragging] .media-slider__thumb[data-orientation="horizontal"] {
618
+ left: var(--media-slider-pointer);
619
+ }
620
+
621
+ .media-minimal-skin .media-slider[data-dragging] .media-slider__thumb[data-orientation="vertical"] {
622
+ top: calc(100% - var(--media-slider-pointer));
623
+ }
624
+
625
+ .media-minimal-skin .media-slider[data-dragging] .media-slider__fill[data-orientation="horizontal"] {
626
+ width: var(--media-slider-pointer);
627
+ }
628
+
629
+ .media-minimal-skin .media-slider[data-dragging] .media-slider__fill[data-orientation="vertical"] {
630
+ height: var(--media-slider-pointer);
634
631
  }
635
632
 
636
633
  /* ==========================================================================
@@ -643,13 +640,14 @@
643
640
  border: 0;
644
641
  color: inherit;
645
642
  overflow: visible;
646
- transition-property: transform, scale, opacity, filter;
647
- transition-duration: 200ms;
643
+ transition-property: scale, opacity, filter;
644
+ transition-duration: var(--media-popup-transition-duration);
645
+ transition-timing-function: var(--media-popup-transition-timing-function);
648
646
 
649
647
  &[data-starting-style],
650
648
  &[data-ending-style] {
651
649
  opacity: 0;
652
- transform: scale(0);
650
+ scale: 0.5;
653
651
  filter: blur(8px);
654
652
  }
655
653
 
@@ -669,119 +667,160 @@
669
667
  &[data-side="right"] {
670
668
  transform-origin: left;
671
669
  }
672
- }
673
670
 
674
- .media-minimal-skin .media-tooltip {
675
- padding: 0.25rem 0.5rem;
676
- border-radius: 0.25rem;
677
- background-color: oklch(1 0 0 / 0.1);
678
- backdrop-filter: blur(64px) brightness(0.9) saturate(1.5);
679
- box-shadow:
680
- 0 4px 6px -1px oklch(0 0 0 / 0.1),
681
- 0 2px 4px -2px oklch(0 0 0 / 0.1);
682
- font-size: 0.75rem;
683
- white-space: nowrap;
684
- --media-tooltip-side-offset: 0.5rem;
685
-
686
- @media (prefers-reduced-transparency: reduce) {
687
- background-color: oklch(0 0 0 / 0.7);
671
+ /* Safe area between trigger and popup */
672
+ &::before {
673
+ content: "";
674
+ position: absolute;
675
+ pointer-events: inherit;
688
676
  }
689
677
 
690
- @media (prefers-contrast: more) {
691
- background-color: oklch(0 0 0 / 0.9);
678
+ &[data-side="top"]::before,
679
+ &[data-side="bottom"]::before {
680
+ width: 100%;
681
+ inset-inline: 0;
692
682
  }
693
- }
694
-
695
- /* ==========================================================================
696
- Captions
697
- ========================================================================== */
698
-
699
- .media-minimal-skin .media-captions {
700
- position: absolute;
701
- inset: auto 1rem 1.5rem 1rem;
702
- z-index: 20;
703
- font-size: 1rem;
704
- text-wrap: balance;
705
- pointer-events: none;
706
-
707
- @container media-root (width > 20rem) {
708
- font-size: 1.5rem;
683
+ &[data-side="top"]::before {
684
+ top: 100%;
709
685
  }
710
-
711
- @container media-root (width > 48rem) {
712
- font-size: 1.875rem;
686
+ &[data-side="bottom"]::before {
687
+ bottom: 100%;
713
688
  }
714
689
 
715
- @container media-root (width > 80rem) {
716
- font-size: 2.25rem;
690
+ &[data-side="left"]::before,
691
+ &[data-side="right"]::before {
692
+ height: 100%;
693
+ inset-block: 0;
694
+ }
695
+ &[data-side="left"]::before {
696
+ left: 100%;
697
+ }
698
+ &[data-side="right"]::before {
699
+ right: 100%;
717
700
  }
718
701
  }
719
702
 
720
- .media-minimal-skin .media-captions__container {
721
- display: flex;
722
- flex-direction: column;
723
- align-items: center;
724
- max-width: 42ch;
725
- margin: 0 auto;
726
- text-align: center;
703
+ .media-minimal-skin .media-popover {
704
+ &[data-side="top"]::before,
705
+ &[data-side="bottom"]::before {
706
+ height: var(--media-popover-side-offset);
707
+ }
708
+ &[data-side="left"]::before,
709
+ &[data-side="right"]::before {
710
+ width: var(--media-popover-side-offset);
711
+ }
727
712
  }
728
713
 
729
- .media-minimal-skin .media-captions__text {
730
- display: block;
731
- padding: 0.125rem 0.5rem;
732
- color: oklch(1 0 0);
733
- text-shadow:
734
- 0 0 1px oklch(0 0 0 / 0.7),
735
- 0 0 8px oklch(0 0 0 / 0.7);
736
- text-align: center;
737
- white-space: pre-wrap;
738
- line-height: 1.2;
714
+ .media-minimal-skin .media-tooltip {
715
+ padding: 0.25rem 0.5rem;
716
+ border-radius: 0.5rem;
717
+ background-color: var(--media-tooltip-background-color);
718
+ backdrop-filter: var(--media-tooltip-backdrop-filter);
719
+ box-shadow:
720
+ 0 0 0 1px var(--media-tooltip-border-color),
721
+ 0 4px 6px -1px oklch(0 0 0 / 0.1),
722
+ 0 2px 4px -2px oklch(0 0 0 / 0.1);
723
+ color: var(--media-tooltip-text-color);
724
+ font-size: 0.75rem; /* 12px at 100% font size */
725
+ white-space: nowrap;
739
726
 
740
- @media (prefers-contrast: more) {
741
- background: oklch(0 0 0 / 0.7);
742
- text-shadow: none;
743
- box-decoration-break: clone;
727
+ &[data-side="top"]::before,
728
+ &[data-side="bottom"]::before {
729
+ height: var(--media-tooltip-side-offset);
744
730
  }
745
-
746
- & > * {
747
- display: inline;
731
+ &[data-side="left"]::before,
732
+ &[data-side="right"]::before {
733
+ width: var(--media-tooltip-side-offset);
748
734
  }
749
735
  }
750
736
 
751
- /* Caption shifting styles (custom and native) */
737
+ .media-minimal-skin .media-popover--volume:has(media-volume-slider[data-availability="unsupported"]) {
738
+ display: none;
739
+ }
740
+
741
+ /* ==========================================================================
742
+ Native Caption Track
743
+ ========================================================================== */
744
+
752
745
  .media-minimal-skin {
753
- --media-caption-track-delay: 600ms;
746
+ --media-caption-track-duration: var(--media-controls-transition-duration);
747
+ --media-caption-track-delay: 25ms;
754
748
  --media-caption-track-y: -0.5rem;
755
749
 
756
750
  &:has(.media-controls[data-visible]) {
757
- --media-caption-track-delay: 25ms;
758
- --media-caption-track-y: -3rem;
751
+ --media-caption-track-y: -5rem;
759
752
  }
760
- }
761
753
 
762
- .media-minimal-skin .media-captions,
763
- .media-minimal-skin video::-webkit-media-text-track-container {
764
- /* NOTE: The delay must account for the controls delay/duration */
765
- transition: transform 150ms ease-out;
766
- transition-delay: var(--media-caption-track-delay);
754
+ @container media-root (width > 42rem) {
755
+ &:has(.media-controls[data-visible]) > * {
756
+ --media-caption-track-y: -3rem;
757
+ }
758
+ }
767
759
  }
768
760
 
769
761
  .media-minimal-skin video::-webkit-media-text-track-container {
770
- transform: translateY(var(--media-caption-track-y)) scale(0.98);
762
+ transition: translate var(--media-caption-track-duration) ease-out;
763
+ transition-delay: var(--media-caption-track-delay);
764
+ translate: 0 var(--media-caption-track-y);
765
+ scale: 0.98;
771
766
  z-index: 1;
772
767
  font-family: inherit;
773
768
  }
774
769
 
775
- /* When controls are visible, shift captions up to avoid overlap */
776
- .media-minimal-skin .media-controls[data-visible] ~ .media-captions {
777
- transform: translateY(calc(var(--media-caption-track-y) - 0.5rem));
770
+ /* ==========================================================================
771
+ Icon State Visibility for Video Skins
772
+
773
+ Data-attribute-driven visibility rules for multi-state icon buttons.
774
+ Uses :is() with both element selectors (for HTML custom element wrappers)
775
+ and class selectors (for React rendered SVG elements).
776
+ ========================================================================== */
777
+
778
+ /* --- All icons hidden by default --- */
779
+
780
+ .media-button--play .media-icon--restart,
781
+ .media-button--play .media-icon--play,
782
+ .media-button--play .media-icon--pause,
783
+ .media-button--mute .media-icon--volume-off,
784
+ .media-button--mute .media-icon--volume-low,
785
+ .media-button--mute .media-icon--volume-high,
786
+ .media-button--fullscreen .media-icon--fullscreen-enter,
787
+ .media-button--fullscreen .media-icon--fullscreen-exit,
788
+ .media-button--pip .media-icon--pip-enter,
789
+ .media-button--pip .media-icon--pip-exit,
790
+ .media-button--captions .media-icon--captions-off,
791
+ .media-button--captions .media-icon--captions-on {
792
+ display: none;
793
+ opacity: 0;
778
794
  }
779
795
 
780
- @media (prefers-reduced-motion: reduce) {
781
- .media-minimal-skin .media-captions,
782
- .media-minimal-skin video::-webkit-media-text-track-container {
783
- transition-duration: 50ms;
784
- }
796
+ /* --- Active icon per state --- */
797
+
798
+ /* Play: ended → restart */
799
+ .media-button--play[data-ended] .media-icon--restart,
800
+ /* Play: paused (not ended) → play */
801
+ .media-button--play:not([data-ended])[data-paused] .media-icon--play,
802
+ /* Play: playing (not paused, not ended) → pause */
803
+ .media-button--play:not([data-paused]):not([data-ended]) .media-icon--pause,
804
+ /* Mute: muted → volume off */
805
+ .media-button--mute[data-muted] .media-icon--volume-off,
806
+ /* Mute: volume low (not muted) → volume low */
807
+ .media-button--mute:not([data-muted])[data-volume-level="low"] .media-icon--volume-low,
808
+ /* Mute: volume high (not muted, not low) → volume high */
809
+ .media-button--mute:not([data-muted]):not([data-volume-level="low"]) .media-icon--volume-high,
810
+ /* Fullscreen: not fullscreen → enter */
811
+ .media-button--fullscreen:not([data-fullscreen]) .media-icon--fullscreen-enter,
812
+ /* Fullscreen: fullscreen → exit */
813
+ .media-button--fullscreen[data-fullscreen] .media-icon--fullscreen-exit,
814
+ /* Picture-in-Picture: not active → enter */
815
+ .media-button--pip:not([data-pip]) .media-icon--pip-enter,
816
+ /* Picture-in-Picture: active → exit */
817
+ .media-button--pip[data-pip] .media-icon--pip-exit,
818
+ /* Captions: not active → captions off */
819
+ .media-button--captions:not([data-active]) .media-icon--captions-off,
820
+ /* Captions: active → captions on */
821
+ .media-button--captions[data-active] .media-icon--captions-on {
822
+ display: block;
823
+ opacity: 1;
785
824
  }
786
825
 
787
826
 
@@ -790,67 +829,208 @@
790
829
  ========================================================================== */
791
830
 
792
831
  .media-minimal-skin--video {
832
+ overflow: clip;
793
833
  background: oklch(0 0 0);
834
+ --media-border-color: oklch(0 0 0 / 0.15);
835
+ --media-video-border-radius: var(--media-border-radius, 0.75rem);
836
+ --media-controls-background-color: transparent;
837
+ --media-controls-transition-duration: 100ms;
838
+ --media-controls-transition-timing-function: ease-out;
839
+ --media-error-dialog-transition-duration: 150ms;
840
+ --media-error-dialog-transition-delay: 100ms;
841
+ --media-error-dialog-transition-timing-function: ease-out;
842
+ --media-popup-transition-duration: 100ms;
843
+ --media-popup-transition-timing-function: ease-out;
844
+ --media-tooltip-background-color: oklch(1 0 0 / 0.1);
845
+ --media-tooltip-border-color: transparent;
846
+ --media-tooltip-backdrop-filter: blur(16px) saturate(1.5);
847
+ --media-tooltip-text-color: currentColor;
848
+ --media-tooltip-side-offset: 0.5rem;
849
+ --media-popover-side-offset: 1.5rem;
850
+
851
+ @media (prefers-reduced-motion: reduce) {
852
+ --media-error-dialog-transition-duration: 50ms;
853
+ --media-error-dialog-transition-delay: 0ms;
854
+ --media-popup-transition-duration: 0ms;
855
+ }
856
+
857
+ @media (prefers-color-scheme: dark) {
858
+ --media-border-color: oklch(1 0 0 / 0.15);
859
+ }
794
860
 
795
- /* Border ring */
861
+ @media (prefers-reduced-transparency: reduce) or (prefers-contrast: more) {
862
+ --media-controls-background-color: oklch(0 0 0);
863
+ --media-tooltip-background-color: oklch(0 0 0);
864
+ }
865
+
866
+ @container media-root (width > 42rem) {
867
+ & > * {
868
+ --media-popover-side-offset: 0rem;
869
+ }
870
+ }
871
+
872
+ &:has(.media-controls:not([data-visible])) {
873
+ /* Slight delay to hide controls on non-touch devices after interaction */
874
+ @media (pointer: fine) {
875
+ --media-controls-transition-duration: 300ms;
876
+ }
877
+ @media (pointer: coarse) {
878
+ --media-controls-transition-duration: 150ms;
879
+ }
880
+ @media (prefers-reduced-motion: reduce) {
881
+ --media-controls-transition-duration: 50ms;
882
+ }
883
+ }
884
+
885
+ /* Inner border ring */
796
886
  &::after {
797
887
  content: "";
798
888
  position: absolute;
799
889
  inset: 0;
800
890
  z-index: 10;
801
891
  border-radius: inherit;
802
- box-shadow: inset 0 0 0 1px oklch(0 0 0 / 0.15);
892
+ box-shadow: inset 0 0 0 1px var(--media-border-color);
803
893
  pointer-events: none;
804
-
805
- @media (prefers-color-scheme: dark) {
806
- box-shadow: inset 0 0 0 1px oklch(1 0 0 / 0.15);
807
- }
808
894
  }
809
895
 
810
896
  /* Fullscreen */
811
897
  &:fullscreen {
812
- border-radius: 0;
898
+ --media-border-radius: 0;
813
899
  }
814
900
  }
815
901
 
902
+ /* ==========================================================================
903
+ Error Dialog
904
+ ========================================================================== */
905
+
906
+ .media-minimal-skin--video .media-error {
907
+ position: absolute;
908
+ inset: 0;
909
+ z-index: 20;
910
+ display: flex;
911
+ align-items: center;
912
+ justify-content: center;
913
+ pointer-events: none;
914
+ outline: none;
915
+ }
916
+
917
+ .media-minimal-skin--video .media-error__dialog {
918
+ display: flex;
919
+ flex-direction: column;
920
+ gap: 0.75rem;
921
+ max-width: 16rem;
922
+ padding: 1rem;
923
+ color: oklch(1 0 0);
924
+ text-shadow: 0 1px 0 oklch(0 0 0 / 0.5);
925
+ transition-property: opacity, scale;
926
+ transition-duration: var(--media-error-dialog-transition-duration);
927
+ transition-delay: var(--media-error-dialog-transition-delay);
928
+ transition-timing-function: var(--media-error-dialog-transition-timing-function);
929
+ pointer-events: auto;
930
+ }
931
+
932
+ .media-minimal-skin--video .media-error[data-starting-style] .media-error__dialog,
933
+ .media-minimal-skin--video .media-error[data-ending-style] .media-error__dialog {
934
+ opacity: 0;
935
+ scale: 0.5;
936
+ }
937
+ .media-minimal-skin--video .media-error[data-ending-style] .media-error__dialog {
938
+ transition-delay: 0ms;
939
+ }
940
+
941
+ .media-minimal-skin--video .media-error__content {
942
+ display: flex;
943
+ flex-direction: column;
944
+ gap: 0.5rem;
945
+ padding: 0.375rem 0;
946
+ }
947
+
948
+ .media-minimal-skin--video .media-error__title {
949
+ font-size: 1.125rem;
950
+ }
951
+
952
+ .media-minimal-skin--video .media-error[data-open] ~ .media-controls {
953
+ display: none;
954
+ }
955
+
816
956
  /* ==========================================================================
817
957
  Controls (hide/show behavior)
818
958
  ========================================================================== */
819
959
 
820
960
  .media-minimal-skin--video .media-controls {
961
+ padding: 0.25rem;
962
+ column-gap: 0.5rem;
963
+ flex-wrap: wrap;
821
964
  position: absolute;
822
- bottom: 0;
823
- inset-inline: 0;
965
+ bottom: 0.25rem;
966
+ inset-inline: 0.25rem;
824
967
  z-index: 10;
825
- gap: 0.5rem;
826
- padding: 2rem 0.375rem 0.375rem 0.375rem;
827
- will-change: transform, filter, opacity;
828
- transition-property: transform, filter, opacity;
829
- transition-duration: 75ms;
830
- transition-delay: 0ms;
831
- transition-timing-function: ease-out;
832
968
  color: oklch(1 0 0);
969
+ border-radius: 0.75rem;
970
+ transition-duration: var(--media-controls-transition-duration);
971
+ transition-timing-function: var(--media-controls-transition-timing-function);
972
+
973
+ @media (pointer: fine) {
974
+ will-change: translate, filter, opacity;
975
+ transition-property: translate, filter, opacity;
976
+ }
833
977
 
834
- @container media-root (width > 40rem) {
835
- gap: 0.875rem;
836
- padding: 2.5rem 0.75rem 0.75rem 0.75rem;
978
+ @media (pointer: coarse) {
979
+ will-change: translate, opacity;
980
+ transition-property: translate, opacity;
837
981
  }
838
982
 
839
983
  &:not([data-visible]) {
840
984
  opacity: 0;
841
- transform: translateY(100%);
842
- filter: blur(8px);
843
- transition-duration: 500ms;
844
- transition-delay: 500ms;
845
985
  pointer-events: none;
986
+ translate: 0 100%;
987
+
988
+ @media (pointer: fine) {
989
+ filter: blur(8px);
990
+ }
846
991
 
847
992
  @media (prefers-reduced-motion: reduce) {
848
- scale: 1;
849
- transform: translateY(0);
993
+ translate: 0 0;
850
994
  filter: blur(0);
851
- transition-duration: 100ms;
852
995
  }
853
996
  }
997
+
998
+ & .media-time-controls {
999
+ order: -1;
1000
+ flex: 0 0 100%;
1001
+ padding-inline: 0.625rem;
1002
+ }
1003
+
1004
+ & .media-button-group:first-child {
1005
+ flex: 1;
1006
+ text-align: left;
1007
+ }
1008
+
1009
+ & .media-button-group:last-child {
1010
+ flex: 1;
1011
+ justify-content: end;
1012
+ }
1013
+
1014
+ @container media-root (width > 42rem) {
1015
+ flex-wrap: nowrap;
1016
+ bottom: 0.5rem;
1017
+ inset-inline: 0.5rem;
1018
+
1019
+ & .media-time-controls {
1020
+ order: unset;
1021
+ flex: 1;
1022
+ }
1023
+
1024
+ & .media-button-group:first-child,
1025
+ & .media-button-group:last-child {
1026
+ flex: 0 0 auto;
1027
+ }
1028
+ }
1029
+ }
1030
+
1031
+ /* Hide cursor when controls are hidden */
1032
+ .media-minimal-skin--video:has(.media-controls:not([data-visible])) {
1033
+ cursor: none;
854
1034
  }
855
1035
 
856
1036
  /* ==========================================================================
@@ -866,8 +1046,75 @@
866
1046
  ========================================================================== */
867
1047
 
868
1048
  .media-minimal-skin--video .media-popover--volume {
869
- --media-popover-side-offset: 0.5rem;
870
1049
  background: transparent;
871
- padding: 0.25rem;
1050
+ padding-block: 0.75rem;
1051
+ border-radius: 0.75rem;
1052
+
1053
+ @media (prefers-reduced-transparency: reduce) or (prefers-contrast: more) {
1054
+ background: var(--media-controls-background-color);
1055
+ }
1056
+ }
1057
+
1058
+ /* ==========================================================================
1059
+ Slider preview
1060
+ ========================================================================== */
1061
+
1062
+ .media-minimal-skin--video .media-slider__preview {
1063
+ --media-preview-max-width: 11rem;
1064
+ --media-preview-padding: -0.5rem;
1065
+ /**
1066
+ Inset is the difference between the container width and the slider (100%) width.
1067
+ We only add to the end as we render the time there.
1068
+ */
1069
+ --media-preview-inset: calc(100cqi - 100%);
1070
+
1071
+ position: absolute;
1072
+ left: clamp(
1073
+ calc(var(--media-preview-max-width) / 2 + var(--media-preview-padding)),
1074
+ var(--media-slider-pointer),
1075
+ calc(100% - var(--media-preview-max-width) / 2 - var(--media-preview-padding) + var(--media-preview-inset))
1076
+ );
1077
+ bottom: 100%;
1078
+ translate: -50%;
1079
+ opacity: 0;
1080
+ scale: 0.8;
1081
+ filter: blur(8px);
1082
+ transition-property: scale, opacity, filter;
1083
+ transition-duration: 150ms;
1084
+ transition-timing-function: ease-out;
1085
+ transform-origin: bottom;
1086
+
1087
+ @container media-root (width > 42rem) {
1088
+ bottom: calc(100% + 0.25rem);
1089
+ left: var(--media-slider-pointer);
1090
+ }
1091
+
1092
+ & .media-preview__thumbnail-wrapper {
1093
+ position: relative;
1094
+
1095
+ &::after {
1096
+ content: "";
1097
+ position: absolute;
1098
+ inset: 0;
1099
+ border-radius: inherit;
1100
+ box-shadow:
1101
+ 0 0 0 1px oklch(0 0 0 / 0.05),
1102
+ 0 1px 3px 0 oklch(0 0 0 / 0.2),
1103
+ 0 1px 2px -1px oklch(0 0 0 / 0.2);
1104
+ }
1105
+ }
1106
+
1107
+ & .media-preview__thumbnail {
1108
+ max-width: var(--media-preview-max-width);
1109
+ }
1110
+
1111
+ &:has(.media-preview__thumbnail[data-loading]) {
1112
+ max-height: 6rem;
1113
+ }
1114
+ }
1115
+ .media-minimal-skin--video .media-slider[data-pointing] .media-slider__preview:has([role="img"]:not([data-hidden])) {
1116
+ opacity: 1;
1117
+ scale: 1;
1118
+ filter: blur(0);
872
1119
  }
873
1120