@videojs/html 10.0.0-alpha.9 → 10.0.0-beta.10

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