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