@videojs/html 10.0.0-beta.5 → 10.0.0-beta.7

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 (370) hide show
  1. package/cdn/audio-minimal.css +1 -1
  2. package/cdn/audio-minimal.dev.d.ts +1 -0
  3. package/cdn/audio-minimal.dev.js +9 -5328
  4. package/cdn/audio-minimal.dev.js.map +1 -1
  5. package/cdn/audio-minimal.js +1 -24
  6. package/cdn/audio-minimal.js.map +1 -1
  7. package/cdn/audio.css +1 -1
  8. package/cdn/audio.dev.d.ts +1 -0
  9. package/cdn/audio.dev.js +9 -5328
  10. package/cdn/audio.dev.js.map +1 -1
  11. package/cdn/audio.js +1 -24
  12. package/cdn/audio.js.map +1 -1
  13. package/cdn/background.css +1 -1
  14. package/cdn/background.dev.d.ts +1 -0
  15. package/cdn/background.dev.js +100 -2026
  16. package/cdn/background.dev.js.map +1 -1
  17. package/cdn/background.js +1 -18
  18. package/cdn/background.js.map +1 -1
  19. package/cdn/context-C_e06fGU.js +13 -0
  20. package/cdn/context-C_e06fGU.js.map +1 -0
  21. package/cdn/context-DTY0nOpS.js +98 -0
  22. package/cdn/context-DTY0nOpS.js.map +1 -0
  23. package/cdn/create-player-Dv7K1Ezk.js +3214 -0
  24. package/cdn/create-player-Dv7K1Ezk.js.map +1 -0
  25. package/cdn/create-player-QjiNZlh7.js +7 -0
  26. package/cdn/create-player-QjiNZlh7.js.map +1 -0
  27. package/cdn/default-GgKND7a8.js +2 -0
  28. package/cdn/default-GgKND7a8.js.map +1 -0
  29. package/cdn/default-cLso8BHO.js +28 -0
  30. package/cdn/default-cLso8BHO.js.map +1 -0
  31. package/cdn/listen-BXAYCbZA.js +9 -0
  32. package/cdn/listen-BXAYCbZA.js.map +1 -0
  33. package/cdn/listen-DX5vU4s4.js +2 -0
  34. package/cdn/listen-DX5vU4s4.js.map +1 -0
  35. package/cdn/media/dash-video.dev.d.ts +1 -0
  36. package/cdn/media/dash-video.dev.js +39165 -0
  37. package/cdn/media/dash-video.dev.js.map +1 -0
  38. package/cdn/media/dash-video.js +21 -0
  39. package/cdn/media/dash-video.js.map +1 -0
  40. package/cdn/media/hls-video.dev.d.ts +1 -0
  41. package/cdn/media/hls-video.dev.js +6 -376
  42. package/cdn/media/hls-video.dev.js.map +1 -1
  43. package/cdn/media/hls-video.js +21 -63
  44. package/cdn/media/hls-video.js.map +1 -1
  45. package/cdn/media/simple-hls-video.dev.d.ts +1 -0
  46. package/cdn/media/simple-hls-video.dev.js +6 -375
  47. package/cdn/media/simple-hls-video.dev.js.map +1 -1
  48. package/cdn/media/simple-hls-video.js +1 -43
  49. package/cdn/media/simple-hls-video.js.map +1 -1
  50. package/cdn/media-attach-mixin-ChyNp2eK.js +44 -0
  51. package/cdn/media-attach-mixin-ChyNp2eK.js.map +1 -0
  52. package/cdn/media-attach-mixin-tFNcHnvo.js +2 -0
  53. package/cdn/media-attach-mixin-tFNcHnvo.js.map +1 -0
  54. package/cdn/minimal-BJfleQcQ.js +2 -0
  55. package/cdn/minimal-BJfleQcQ.js.map +1 -0
  56. package/cdn/minimal-DBMdC_0I.js +28 -0
  57. package/cdn/minimal-DBMdC_0I.js.map +1 -0
  58. package/cdn/player-CztIlNio.js +2 -0
  59. package/cdn/player-CztIlNio.js.map +1 -0
  60. package/cdn/player-Dvj38jlr.js +15 -0
  61. package/cdn/player-Dvj38jlr.js.map +1 -0
  62. package/cdn/poster-C4WHg3BH.js +2 -0
  63. package/cdn/poster-C4WHg3BH.js.map +1 -0
  64. package/cdn/poster-O0SI05LC.js +195 -0
  65. package/cdn/poster-O0SI05LC.js.map +1 -0
  66. package/cdn/predicate-BG-dj_kF.js +26 -0
  67. package/cdn/predicate-BG-dj_kF.js.map +1 -0
  68. package/cdn/predicate-Y9jDHLpX.js +2 -0
  69. package/cdn/predicate-Y9jDHLpX.js.map +1 -0
  70. package/cdn/proxy-2oO2ph3m.js +47 -0
  71. package/cdn/proxy-2oO2ph3m.js.map +1 -0
  72. package/cdn/proxy-6KS6wy69.js +2 -0
  73. package/cdn/proxy-6KS6wy69.js.map +1 -0
  74. package/cdn/proxy-XzDf9gyk.js +66 -0
  75. package/cdn/proxy-XzDf9gyk.js.map +1 -0
  76. package/cdn/proxy-dR7IDk37.js +349 -0
  77. package/cdn/proxy-dR7IDk37.js.map +1 -0
  78. package/cdn/safe-define-B8lHgj_K.js +9 -0
  79. package/cdn/safe-define-B8lHgj_K.js.map +1 -0
  80. package/cdn/safe-define-GrHW3P9e.js +2 -0
  81. package/cdn/safe-define-GrHW3P9e.js.map +1 -0
  82. package/cdn/video-minimal.css +1 -1
  83. package/cdn/video-minimal.dev.d.ts +1 -0
  84. package/cdn/video-minimal.dev.js +24 -5642
  85. package/cdn/video-minimal.dev.js.map +1 -1
  86. package/cdn/video-minimal.js +1 -24
  87. package/cdn/video-minimal.js.map +1 -1
  88. package/cdn/video.css +1 -1
  89. package/cdn/video.dev.d.ts +1 -0
  90. package/cdn/video.dev.js +30 -5701
  91. package/cdn/video.dev.js.map +1 -1
  92. package/cdn/video.js +1 -24
  93. package/cdn/video.js.map +1 -1
  94. package/cdn/volume-slider-BqzTytgB.js +8 -0
  95. package/cdn/volume-slider-BqzTytgB.js.map +1 -0
  96. package/cdn/volume-slider-CfhOO9RM.js +2453 -0
  97. package/cdn/volume-slider-CfhOO9RM.js.map +1 -0
  98. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  99. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  100. package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
  101. package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  102. package/dist/default/_virtual/inline-css_src/define/base.js +1 -1
  103. package/dist/default/_virtual/inline-css_src/define/base.js.map +1 -1
  104. package/dist/default/_virtual/inline-css_src/define/shared.js +6 -0
  105. package/dist/default/_virtual/inline-css_src/define/shared.js.map +1 -0
  106. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  107. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  108. package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
  109. package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  110. package/dist/default/define/audio/minimal-skin.css +77 -24
  111. package/dist/default/define/audio/minimal-skin.js +1 -1
  112. package/dist/default/define/audio/minimal-skin.js.map +1 -1
  113. package/dist/default/define/audio/minimal-skin.tailwind.js +1 -1
  114. package/dist/default/define/audio/minimal-skin.tailwind.js.map +1 -1
  115. package/dist/default/define/audio/skin.css +74 -28
  116. package/dist/default/define/audio/skin.js +1 -1
  117. package/dist/default/define/audio/skin.js.map +1 -1
  118. package/dist/default/define/audio/skin.tailwind.js +3 -4
  119. package/dist/default/define/audio/skin.tailwind.js.map +1 -1
  120. package/dist/default/define/background/skin.css +1 -1
  121. package/dist/default/define/background/skin.js +1 -1
  122. package/dist/default/define/background/skin.js.map +1 -1
  123. package/dist/default/define/base.css +10 -12
  124. package/dist/default/define/media/dash-video.js +14 -0
  125. package/dist/default/define/media/dash-video.js.map +1 -0
  126. package/dist/default/define/shared.css +10 -0
  127. package/dist/default/define/skin-mixin.js +8 -3
  128. package/dist/default/define/skin-mixin.js.map +1 -1
  129. package/dist/default/define/video/minimal-skin.css +257 -79
  130. package/dist/default/define/video/minimal-skin.js +2 -1
  131. package/dist/default/define/video/minimal-skin.js.map +1 -1
  132. package/dist/default/define/video/minimal-skin.tailwind.js +5 -3
  133. package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
  134. package/dist/default/define/video/skin.css +242 -74
  135. package/dist/default/define/video/skin.js +2 -1
  136. package/dist/default/define/video/skin.js.map +1 -1
  137. package/dist/default/define/video/skin.tailwind.js +5 -3
  138. package/dist/default/define/video/skin.tailwind.js.map +1 -1
  139. package/dist/default/icons/dist/render/default/index.js +2 -1
  140. package/dist/default/icons/dist/render/default/index.js.map +1 -1
  141. package/dist/default/icons/dist/render/minimal/index.js +2 -1
  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 +5 -1
  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 +2 -1
  153. package/dist/default/media/simple-hls-video/index.js.map +1 -1
  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/skins/dist/default/default/tailwind/audio.tailwind.js +6 -5
  159. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  160. package/dist/default/skins/dist/default/default/tailwind/components/button.js +1 -1
  161. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  162. package/dist/default/skins/dist/default/default/tailwind/components/controls.js +1 -1
  163. package/dist/default/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  164. package/dist/default/skins/dist/default/default/tailwind/components/error.js +1 -1
  165. package/dist/default/skins/dist/default/default/tailwind/components/error.js.map +1 -1
  166. package/dist/default/skins/dist/default/default/tailwind/components/popup.js +3 -3
  167. package/dist/default/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  168. package/dist/default/skins/dist/default/default/tailwind/components/poster.js +16 -0
  169. package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
  170. package/dist/default/skins/dist/default/default/tailwind/components/preview.js +13 -0
  171. package/dist/default/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  172. package/dist/default/skins/dist/default/default/tailwind/components/root.js +1 -1
  173. package/dist/default/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  174. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +1 -1
  175. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  176. package/dist/default/skins/dist/default/default/tailwind/components/surface.js +1 -1
  177. package/dist/default/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
  178. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +21 -15
  179. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  180. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +2 -2
  181. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  182. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +1 -1
  183. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  184. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js +1 -1
  185. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  186. package/dist/default/skins/dist/default/minimal/tailwind/components/playback-rate.js +6 -0
  187. package/dist/default/skins/dist/default/minimal/tailwind/components/playback-rate.js.map +1 -0
  188. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js +4 -3
  189. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  190. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +16 -0
  191. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
  192. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js +14 -0
  193. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  194. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +1 -1
  195. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  196. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +1 -1
  197. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  198. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js +1 -1
  199. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  200. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +23 -15
  201. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  202. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +5 -0
  203. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  204. package/dist/default/store/container-mixin.js +16 -72
  205. package/dist/default/store/container-mixin.js.map +1 -1
  206. package/dist/default/store/media-attach-mixin.js +45 -0
  207. package/dist/default/store/media-attach-mixin.js.map +1 -0
  208. package/dist/default/store/provider-mixin.js +99 -9
  209. package/dist/default/store/provider-mixin.js.map +1 -1
  210. package/dist/default/ui/popover/popover-element.js +54 -3
  211. package/dist/default/ui/popover/popover-element.js.map +1 -1
  212. package/dist/default/ui/time-slider/time-slider-element.js +1 -1
  213. package/dist/default/ui/time-slider/time-slider-element.js.map +1 -1
  214. package/dist/default/ui/tooltip/tooltip-element.js +53 -3
  215. package/dist/default/ui/tooltip/tooltip-element.js.map +1 -1
  216. package/dist/default/ui/volume-slider/volume-slider-element.js +3 -3
  217. package/dist/default/ui/volume-slider/volume-slider-element.js.map +1 -1
  218. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  219. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  220. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
  221. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  222. package/dist/dev/_virtual/inline-css_src/define/base.js +1 -1
  223. package/dist/dev/_virtual/inline-css_src/define/base.js.map +1 -1
  224. package/dist/dev/_virtual/inline-css_src/define/shared.js +6 -0
  225. package/dist/dev/_virtual/inline-css_src/define/shared.js.map +1 -0
  226. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  227. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  228. package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
  229. package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  230. package/dist/dev/define/audio/minimal-skin.css +77 -24
  231. package/dist/dev/define/audio/minimal-skin.d.ts.map +1 -1
  232. package/dist/dev/define/audio/minimal-skin.js +2 -0
  233. package/dist/dev/define/audio/minimal-skin.js.map +1 -1
  234. package/dist/dev/define/audio/minimal-skin.tailwind.d.ts.map +1 -1
  235. package/dist/dev/define/audio/minimal-skin.tailwind.js +3 -1
  236. package/dist/dev/define/audio/minimal-skin.tailwind.js.map +1 -1
  237. package/dist/dev/define/audio/skin.css +74 -28
  238. package/dist/dev/define/audio/skin.d.ts.map +1 -1
  239. package/dist/dev/define/audio/skin.js +2 -0
  240. package/dist/dev/define/audio/skin.js.map +1 -1
  241. package/dist/dev/define/audio/skin.tailwind.d.ts.map +1 -1
  242. package/dist/dev/define/audio/skin.tailwind.js +5 -4
  243. package/dist/dev/define/audio/skin.tailwind.js.map +1 -1
  244. package/dist/dev/define/background/skin.css +1 -1
  245. package/dist/dev/define/background/skin.d.ts.map +1 -1
  246. package/dist/dev/define/background/skin.js +3 -1
  247. package/dist/dev/define/background/skin.js.map +1 -1
  248. package/dist/dev/define/base.css +10 -12
  249. package/dist/dev/define/media/dash-video.d.ts +14 -0
  250. package/dist/dev/define/media/dash-video.d.ts.map +1 -0
  251. package/dist/dev/define/media/dash-video.js +14 -0
  252. package/dist/dev/define/media/dash-video.js.map +1 -0
  253. package/dist/dev/define/shared.css +10 -0
  254. package/dist/dev/define/skin-mixin.d.ts.map +1 -1
  255. package/dist/dev/define/skin-mixin.js +8 -3
  256. package/dist/dev/define/skin-mixin.js.map +1 -1
  257. package/dist/dev/define/video/minimal-skin.css +257 -79
  258. package/dist/dev/define/video/minimal-skin.d.ts.map +1 -1
  259. package/dist/dev/define/video/minimal-skin.js +18 -2
  260. package/dist/dev/define/video/minimal-skin.js.map +1 -1
  261. package/dist/dev/define/video/minimal-skin.tailwind.d.ts.map +1 -1
  262. package/dist/dev/define/video/minimal-skin.tailwind.js +22 -5
  263. package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
  264. package/dist/dev/define/video/skin.css +242 -74
  265. package/dist/dev/define/video/skin.d.ts.map +1 -1
  266. package/dist/dev/define/video/skin.js +15 -1
  267. package/dist/dev/define/video/skin.js.map +1 -1
  268. package/dist/dev/define/video/skin.tailwind.d.ts.map +1 -1
  269. package/dist/dev/define/video/skin.tailwind.js +20 -5
  270. package/dist/dev/define/video/skin.tailwind.js.map +1 -1
  271. package/dist/dev/icons/dist/render/default/index.js +2 -1
  272. package/dist/dev/icons/dist/render/default/index.js.map +1 -1
  273. package/dist/dev/icons/dist/render/minimal/index.js +2 -1
  274. package/dist/dev/icons/dist/render/minimal/index.js.map +1 -1
  275. package/dist/dev/index.d.ts +5 -4
  276. package/dist/dev/index.js +3 -2
  277. package/dist/dev/media/background-video/index.d.ts +8 -1
  278. package/dist/dev/media/background-video/index.d.ts.map +1 -1
  279. package/dist/dev/media/background-video/index.js +5 -1
  280. package/dist/dev/media/background-video/index.js.map +1 -1
  281. package/dist/dev/media/container-element.js +5 -2
  282. package/dist/dev/media/container-element.js.map +1 -1
  283. package/dist/dev/media/dash-video/index.d.ts +13 -0
  284. package/dist/dev/media/dash-video/index.d.ts.map +1 -0
  285. package/dist/dev/media/dash-video/index.js +26 -0
  286. package/dist/dev/media/dash-video/index.js.map +1 -0
  287. package/dist/dev/media/hls-video/index.d.ts +2 -1
  288. package/dist/dev/media/hls-video/index.d.ts.map +1 -1
  289. package/dist/dev/media/hls-video/index.js +2 -1
  290. package/dist/dev/media/hls-video/index.js.map +1 -1
  291. package/dist/dev/media/simple-hls-video/index.d.ts +2 -1
  292. package/dist/dev/media/simple-hls-video/index.d.ts.map +1 -1
  293. package/dist/dev/media/simple-hls-video/index.js +2 -1
  294. package/dist/dev/media/simple-hls-video/index.js.map +1 -1
  295. package/dist/dev/player/context.d.ts +16 -2
  296. package/dist/dev/player/context.d.ts.map +1 -1
  297. package/dist/dev/player/context.js +6 -2
  298. package/dist/dev/player/context.js.map +1 -1
  299. package/dist/dev/player/create-player.d.ts +1 -1
  300. package/dist/dev/player/create-player.js +11 -3
  301. package/dist/dev/player/create-player.js.map +1 -1
  302. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js +6 -5
  303. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  304. package/dist/dev/skins/dist/default/default/tailwind/components/button.js +1 -1
  305. package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  306. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js +1 -1
  307. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  308. package/dist/dev/skins/dist/default/default/tailwind/components/error.js +1 -1
  309. package/dist/dev/skins/dist/default/default/tailwind/components/error.js.map +1 -1
  310. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js +3 -3
  311. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  312. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js +16 -0
  313. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
  314. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js +13 -0
  315. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  316. package/dist/dev/skins/dist/default/default/tailwind/components/root.js +1 -1
  317. package/dist/dev/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  318. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +1 -1
  319. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  320. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js +1 -1
  321. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
  322. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +21 -15
  323. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  324. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js +2 -2
  325. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  326. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +1 -1
  327. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  328. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js +1 -1
  329. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  330. package/dist/dev/skins/dist/default/minimal/tailwind/components/playback-rate.js +6 -0
  331. package/dist/dev/skins/dist/default/minimal/tailwind/components/playback-rate.js.map +1 -0
  332. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js +4 -3
  333. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  334. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js +16 -0
  335. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
  336. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js +14 -0
  337. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  338. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +1 -1
  339. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  340. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +1 -1
  341. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  342. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js +1 -1
  343. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  344. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +23 -15
  345. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  346. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js +5 -0
  347. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  348. package/dist/dev/store/container-mixin.d.ts +10 -5
  349. package/dist/dev/store/container-mixin.d.ts.map +1 -1
  350. package/dist/dev/store/container-mixin.js +16 -72
  351. package/dist/dev/store/container-mixin.js.map +1 -1
  352. package/dist/dev/store/media-attach-mixin.d.ts +19 -0
  353. package/dist/dev/store/media-attach-mixin.d.ts.map +1 -0
  354. package/dist/dev/store/media-attach-mixin.js +45 -0
  355. package/dist/dev/store/media-attach-mixin.js.map +1 -0
  356. package/dist/dev/store/provider-mixin.d.ts +19 -6
  357. package/dist/dev/store/provider-mixin.d.ts.map +1 -1
  358. package/dist/dev/store/provider-mixin.js +99 -9
  359. package/dist/dev/store/provider-mixin.js.map +1 -1
  360. package/dist/dev/ui/popover/popover-element.d.ts.map +1 -1
  361. package/dist/dev/ui/popover/popover-element.js +54 -3
  362. package/dist/dev/ui/popover/popover-element.js.map +1 -1
  363. package/dist/dev/ui/time-slider/time-slider-element.js +1 -1
  364. package/dist/dev/ui/time-slider/time-slider-element.js.map +1 -1
  365. package/dist/dev/ui/tooltip/tooltip-element.d.ts.map +1 -1
  366. package/dist/dev/ui/tooltip/tooltip-element.js +53 -3
  367. package/dist/dev/ui/tooltip/tooltip-element.js.map +1 -1
  368. package/dist/dev/ui/volume-slider/volume-slider-element.js +3 -3
  369. package/dist/dev/ui/volume-slider/volume-slider-element.js.map +1 -1
  370. package/package.json +20 -9
@@ -0,0 +1,14 @@
1
+ import { safeDefine } from "../safe-define.js";
2
+ import { DashVideo } from "../../media/dash-video/index.js";
3
+
4
+ //#region src/define/media/dash-video.ts
5
+ var DashVideoElement = class extends DashVideo {
6
+ static {
7
+ this.tagName = "dash-video";
8
+ }
9
+ };
10
+ safeDefine(DashVideoElement);
11
+
12
+ //#endregion
13
+ export { DashVideoElement };
14
+ //# sourceMappingURL=dash-video.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dash-video.js","names":[],"sources":["../../../../src/define/media/dash-video.ts"],"sourcesContent":["import { DashVideo } from '../../media/dash-video';\nimport { safeDefine } from '../safe-define';\n\nexport class DashVideoElement extends DashVideo {\n static readonly tagName = 'dash-video';\n}\n\nsafeDefine(DashVideoElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [DashVideoElement.tagName]: DashVideoElement;\n }\n}\n"],"mappings":";;;;AAGA,IAAa,mBAAb,cAAsC,UAAU;;iBACpB;;;AAG5B,WAAW,iBAAiB"}
@@ -1,3 +1,13 @@
1
1
  media-tooltip-group {
2
2
  display: contents;
3
3
  }
4
+
5
+ /* Fixes a weird issue with Safari when setting aspect-ratio */
6
+ :host {
7
+ display: grid;
8
+ }
9
+
10
+ /* Hide volume popover when volume control is unsupported (e.g., iOS Safari). */
11
+ .media-popover--volume:has(media-volume-slider[data-availability="unsupported"]) {
12
+ display: none;
13
+ }
@@ -1,14 +1,17 @@
1
1
  import base_default from "../_virtual/inline-css_src/define/base.js";
2
+ import shared_default from "../_virtual/inline-css_src/define/shared.js";
2
3
 
3
4
  //#region src/define/skin-mixin.ts
4
5
  const STYLES_ID = "__media-styles";
5
- function ensureStyles() {
6
+ function ensureRootStyles() {
6
7
  if (document.getElementById(STYLES_ID)) return;
7
8
  const style = document.createElement("style");
8
9
  style.id = STYLES_ID;
9
10
  style.textContent = base_default;
10
11
  document.head.appendChild(style);
11
12
  }
13
+ const sharedSheet = new CSSStyleSheet();
14
+ sharedSheet.replaceSync(shared_default);
12
15
  /**
13
16
  * Mixin for skin elements that renders the template from a static
14
17
  * `getTemplateHTML` method into a shadow root. Native `<slot>` elements
@@ -24,11 +27,13 @@ function SkinMixin(BaseClass) {
24
27
  }
25
28
  constructor(...args) {
26
29
  super(...args);
27
- ensureStyles();
30
+ ensureRootStyles();
28
31
  if (!this.shadowRoot) {
29
32
  const ctor = this.constructor;
30
33
  this.attachShadow(ctor.shadowRootOptions);
31
- if (ctor.styles) this.shadowRoot.adoptedStyleSheets = [ctor.styles];
34
+ const sheets = [sharedSheet];
35
+ if (ctor.styles) sheets.push(ctor.styles);
36
+ this.shadowRoot.adoptedStyleSheets = sheets;
32
37
  if (ctor.getTemplateHTML) this.shadowRoot.innerHTML = ctor.getTemplateHTML();
33
38
  }
34
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"skin-mixin.js","names":["styles"],"sources":["../../../src/define/skin-mixin.ts"],"sourcesContent":["import type { ReactiveElement } from '@videojs/element';\nimport type { Constructor } from '@videojs/utils/types';\nimport styles from './base.css?inline';\n\nconst STYLES_ID = '__media-styles';\n\nfunction ensureStyles(): void {\n if (document.getElementById(STYLES_ID)) return;\n const style = document.createElement('style');\n style.id = STYLES_ID;\n style.textContent = styles;\n document.head.appendChild(style);\n}\n\n/**\n * Mixin for skin elements that renders the template from a static\n * `getTemplateHTML` method into a shadow root. Native `<slot>` elements\n * handle light DOM projection automatically.\n *\n * When `static styles` is set, the stylesheet is adopted into the\n * shadow root via `adoptedStyleSheets`.\n */\nexport function SkinMixin<Base extends Constructor<ReactiveElement>>(\n BaseClass: Base\n): Base & { shadowRootOptions: ShadowRootInit; styles?: CSSStyleSheet } {\n class SkinElement extends (BaseClass as Constructor<ReactiveElement>) {\n static shadowRootOptions: ShadowRootInit = { mode: 'open' };\n static styles?: CSSStyleSheet;\n\n constructor(...args: any[]) {\n super(...args);\n\n ensureStyles();\n\n if (!this.shadowRoot) {\n const ctor = this.constructor as typeof SkinElement & { getTemplateHTML?: () => string };\n this.attachShadow(ctor.shadowRootOptions);\n\n if (ctor.styles) {\n this.shadowRoot!.adoptedStyleSheets = [ctor.styles];\n }\n\n if (ctor.getTemplateHTML) {\n this.shadowRoot!.innerHTML = ctor.getTemplateHTML();\n }\n }\n }\n }\n\n return SkinElement as unknown as Base & { shadowRootOptions: ShadowRootInit; styles?: CSSStyleSheet };\n}\n\n/** Create a shared `CSSStyleSheet` from a CSS string. */\nexport function createStyles(css: string): CSSStyleSheet {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n return sheet;\n}\n"],"mappings":";;;AAIA,MAAM,YAAY;AAElB,SAAS,eAAqB;AAC5B,KAAI,SAAS,eAAe,UAAU,CAAE;CACxC,MAAM,QAAQ,SAAS,cAAc,QAAQ;AAC7C,OAAM,KAAK;AACX,OAAM,cAAcA;AACpB,UAAS,KAAK,YAAY,MAAM;;;;;;;;;;AAWlC,SAAgB,UACd,WACsE;CACtE,MAAM,oBAAqB,UAA2C;;4BACzB,EAAE,MAAM,QAAQ;;EAG3D,YAAY,GAAG,MAAa;AAC1B,SAAM,GAAG,KAAK;AAEd,iBAAc;AAEd,OAAI,CAAC,KAAK,YAAY;IACpB,MAAM,OAAO,KAAK;AAClB,SAAK,aAAa,KAAK,kBAAkB;AAEzC,QAAI,KAAK,OACP,MAAK,WAAY,qBAAqB,CAAC,KAAK,OAAO;AAGrD,QAAI,KAAK,gBACP,MAAK,WAAY,YAAY,KAAK,iBAAiB;;;;AAM3D,QAAO;;;AAIT,SAAgB,aAAa,KAA4B;CACvD,MAAM,QAAQ,IAAI,eAAe;AACjC,OAAM,YAAY,IAAI;AACtB,QAAO"}
1
+ {"version":3,"file":"skin-mixin.js","names":["rootStyles","sharedStyles"],"sources":["../../../src/define/skin-mixin.ts"],"sourcesContent":["import type { ReactiveElement } from '@videojs/element';\nimport type { Constructor } from '@videojs/utils/types';\nimport rootStyles from './base.css?inline';\nimport sharedStyles from './shared.css?inline';\n\nconst STYLES_ID = '__media-styles';\n\nfunction ensureRootStyles(): void {\n if (document.getElementById(STYLES_ID)) return;\n const style = document.createElement('style');\n style.id = STYLES_ID;\n style.textContent = rootStyles;\n document.head.appendChild(style);\n}\n\nconst sharedSheet = new CSSStyleSheet();\nsharedSheet.replaceSync(sharedStyles);\n\n/**\n * Mixin for skin elements that renders the template from a static\n * `getTemplateHTML` method into a shadow root. Native `<slot>` elements\n * handle light DOM projection automatically.\n *\n * When `static styles` is set, the stylesheet is adopted into the\n * shadow root via `adoptedStyleSheets`.\n */\nexport function SkinMixin<Base extends Constructor<ReactiveElement>>(\n BaseClass: Base\n): Base & { shadowRootOptions: ShadowRootInit; styles?: CSSStyleSheet } {\n class SkinElement extends (BaseClass as Constructor<ReactiveElement>) {\n static shadowRootOptions: ShadowRootInit = { mode: 'open' };\n static styles?: CSSStyleSheet;\n\n constructor(...args: any[]) {\n super(...args);\n\n ensureRootStyles();\n\n if (!this.shadowRoot) {\n const ctor = this.constructor as typeof SkinElement & { getTemplateHTML?: () => string };\n this.attachShadow(ctor.shadowRootOptions);\n\n const sheets: CSSStyleSheet[] = [sharedSheet];\n if (ctor.styles) {\n sheets.push(ctor.styles);\n }\n this.shadowRoot!.adoptedStyleSheets = sheets;\n\n if (ctor.getTemplateHTML) {\n this.shadowRoot!.innerHTML = ctor.getTemplateHTML();\n }\n }\n }\n }\n\n return SkinElement as unknown as Base & { shadowRootOptions: ShadowRootInit; styles?: CSSStyleSheet };\n}\n\n/** Create a shared `CSSStyleSheet` from a CSS string. */\nexport function createStyles(css: string): CSSStyleSheet {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n return sheet;\n}\n"],"mappings":";;;;AAKA,MAAM,YAAY;AAElB,SAAS,mBAAyB;AAChC,KAAI,SAAS,eAAe,UAAU,CAAE;CACxC,MAAM,QAAQ,SAAS,cAAc,QAAQ;AAC7C,OAAM,KAAK;AACX,OAAM,cAAcA;AACpB,UAAS,KAAK,YAAY,MAAM;;AAGlC,MAAM,cAAc,IAAI,eAAe;AACvC,YAAY,YAAYC,eAAa;;;;;;;;;AAUrC,SAAgB,UACd,WACsE;CACtE,MAAM,oBAAqB,UAA2C;;4BACzB,EAAE,MAAM,QAAQ;;EAG3D,YAAY,GAAG,MAAa;AAC1B,SAAM,GAAG,KAAK;AAEd,qBAAkB;AAElB,OAAI,CAAC,KAAK,YAAY;IACpB,MAAM,OAAO,KAAK;AAClB,SAAK,aAAa,KAAK,kBAAkB;IAEzC,MAAM,SAA0B,CAAC,YAAY;AAC7C,QAAI,KAAK,OACP,QAAO,KAAK,KAAK,OAAO;AAE1B,SAAK,WAAY,qBAAqB;AAEtC,QAAI,KAAK,gBACP,MAAK,WAAY,YAAY,KAAK,iBAAiB;;;;AAM3D,QAAO;;;AAIT,SAAgB,aAAa,KAA4B;CACvD,MAAM,QAAQ,IAAI,eAAe;AACjC,OAAM,YAAY,IAAI;AACtB,QAAO"}
@@ -16,6 +16,8 @@
16
16
  .media-button--mute .media-icon--volume-high,
17
17
  .media-button--fullscreen .media-icon--fullscreen-enter,
18
18
  .media-button--fullscreen .media-icon--fullscreen-exit,
19
+ .media-button--pip .media-icon--pip-enter,
20
+ .media-button--pip .media-icon--pip-exit,
19
21
  .media-button--captions .media-icon--captions-off,
20
22
  .media-button--captions .media-icon--captions-on {
21
23
  display: none;
@@ -40,6 +42,10 @@
40
42
  .media-button--fullscreen:not([data-fullscreen]) .media-icon--fullscreen-enter,
41
43
  /* Fullscreen: fullscreen → exit */
42
44
  .media-button--fullscreen[data-fullscreen] .media-icon--fullscreen-exit,
45
+ /* Picture-in-Picture: not active → enter */
46
+ .media-button--pip:not([data-pip]) .media-icon--pip-enter,
47
+ /* Picture-in-Picture: active → exit */
48
+ .media-button--pip[data-pip] .media-icon--pip-exit,
43
49
  /* Captions: not active → captions off */
44
50
  .media-button--captions:not([data-active]) .media-icon--captions-off,
45
51
  /* Captions: active → captions on */
@@ -100,7 +106,6 @@
100
106
  .media-minimal-skin *::before,
101
107
  .media-minimal-skin *::after {
102
108
  box-sizing: border-box;
103
- margin: 0;
104
109
  }
105
110
  .media-minimal-skin img,
106
111
  .media-minimal-skin video,
@@ -151,45 +156,20 @@
151
156
  display: block;
152
157
  width: 100%;
153
158
  height: 100%;
159
+ object-fit: var(--media-object-fit, contain);
160
+ object-position: var(--media-object-position, center);
154
161
  }
155
162
  .media-minimal-skin ::slotted(video) {
156
- border-radius: var(--media-border-radius, 0.75rem);
163
+ border-radius: var(--media-video-border-radius);
157
164
  }
158
165
  .media-minimal-skin video {
159
166
  border-radius: inherit;
160
167
  }
161
168
 
162
- /* ==========================================================================
163
- Poster Image
164
- ========================================================================== */
165
-
166
- .media-minimal-skin > img {
167
- position: absolute;
168
- inset: 0;
169
- width: 100%;
170
- height: 100%;
171
- border-radius: inherit;
172
- object-fit: cover;
173
- transition: opacity 0.25s;
174
- pointer-events: none;
175
-
176
- &:not([data-visible]) {
177
- opacity: 0;
178
- }
179
- }
180
-
181
- /* ==========================================================================
182
- Fullscreen
183
- ========================================================================== */
184
-
185
- .media-minimal-skin:fullscreen video,
186
169
  .media-minimal-skin:fullscreen ::slotted(video),
187
- .media-minimal-skin:fullscreen > img {
170
+ .media-minimal-skin:fullscreen video {
188
171
  object-fit: contain;
189
172
  }
190
- .media-minimal-skin:fullscreen ::slotted(video) {
191
- border-radius: 0;
192
- }
193
173
 
194
174
  /* ==========================================================================
195
175
  Overlay / Scrim
@@ -271,7 +251,7 @@
271
251
  color: oklch(1 0 0);
272
252
  font-size: 0.875rem;
273
253
  text-shadow: 0 1px 0 oklch(0 0 0 / 0.5);
274
- transition-property: opacity, transform;
254
+ transition-property: opacity, scale;
275
255
  transition-duration: 500ms;
276
256
  transition-delay: 100ms;
277
257
  transition-timing-function: linear(
@@ -297,7 +277,7 @@
297
277
  .media-minimal-skin .media-error[data-starting-style] .media-error__dialog,
298
278
  .media-minimal-skin .media-error[data-ending-style] .media-error__dialog {
299
279
  opacity: 0;
300
- transform: scale(0.5);
280
+ scale: 0.5;
301
281
  }
302
282
 
303
283
  .media-minimal-skin .media-error__content {
@@ -314,6 +294,7 @@
314
294
 
315
295
  .media-minimal-skin .media-error__description {
316
296
  opacity: 0.7;
297
+ overflow-wrap: anywhere;
317
298
  }
318
299
 
319
300
  .media-minimal-skin .media-error__actions {
@@ -333,12 +314,12 @@
333
314
  container: media-controls / inline-size;
334
315
  display: flex;
335
316
  align-items: center;
336
- --media-controls-current-shadow-color: oklch(from currentColor 0 0 0 / clamp(0, calc((l - 0.5) * 0.5), 0.25));
317
+ --media-controls-current-shadow-color: oklch(from currentColor 0 0 0 / clamp(0, calc((l - 0.5) * 0.5), 0.15));
337
318
  --media-controls-current-shadow-color-subtle: oklch(
338
319
  from var(--media-controls-current-shadow-color) l c h /
339
320
  calc(alpha * 0.4)
340
321
  );
341
- text-shadow: 0 0 1px var(--media-controls-current-shadow-color);
322
+ text-shadow: 0 1px 0 var(--media-controls-current-shadow-color);
342
323
  }
343
324
 
344
325
  /* ==========================================================================
@@ -412,11 +393,12 @@
412
393
  font-weight: 500;
413
394
  text-align: center;
414
395
  text-shadow: inherit;
415
- transition-property: background-color, color, outline-offset, transform;
396
+ transition-property: background-color, color, outline-offset, scale;
416
397
  transition-duration: 150ms;
417
398
  transition-timing-function: ease-out;
418
399
  cursor: pointer;
419
400
  user-select: none;
401
+ touch-action: manipulation;
420
402
 
421
403
  &:focus-visible {
422
404
  outline-color: currentColor;
@@ -451,7 +433,7 @@
451
433
  }
452
434
 
453
435
  &:active {
454
- transform: scale(0.9);
436
+ scale: 0.9;
455
437
  }
456
438
 
457
439
  & .media-icon {
@@ -513,6 +495,91 @@
513
495
  scale: -1 1;
514
496
  }
515
497
 
498
+ /* ==========================================================================
499
+ Poster Image
500
+ ========================================================================== */
501
+
502
+ .media-minimal-skin media-poster,
503
+ .media-minimal-skin > img {
504
+ position: absolute;
505
+ inset: 0;
506
+ width: 100%;
507
+ height: 100%;
508
+ transition: opacity 0.25s;
509
+ pointer-events: none;
510
+ }
511
+ .media-minimal-skin media-poster:not([data-visible]),
512
+ .media-minimal-skin > img:not([data-visible]) {
513
+ opacity: 0;
514
+ }
515
+ .media-minimal-skin media-poster ::slotted(img) {
516
+ position: absolute;
517
+ inset: 0;
518
+ width: 100%;
519
+ height: 100%;
520
+ object-fit: var(--media-object-fit, contain);
521
+ object-position: var(--media-object-position, center);
522
+ border-radius: var(--media-video-border-radius);
523
+ }
524
+ .media-minimal-skin > img {
525
+ object-fit: var(--media-object-fit, contain);
526
+ object-position: var(--media-object-position, center);
527
+ border-radius: inherit;
528
+ }
529
+
530
+ .media-minimal-skin:fullscreen media-poster ::slotted(img),
531
+ .media-minimal-skin:fullscreen > img {
532
+ object-fit: contain;
533
+ }
534
+
535
+ /* ==========================================================================
536
+ Media preview
537
+ ========================================================================== */
538
+ .media-minimal-skin .media-preview {
539
+ & .media-preview__thumbnail-wrapper {
540
+ position: relative;
541
+ border-radius: 0.5rem;
542
+ background-color: oklch(0 0 0 / 0.9);
543
+ }
544
+ & .media-preview__thumbnail {
545
+ display: block;
546
+ border-radius: inherit;
547
+ }
548
+
549
+ & .media-preview__timestamp {
550
+ display: block;
551
+ font-variant-numeric: tabular-nums;
552
+ text-align: center;
553
+ margin-top: 0.5rem;
554
+ }
555
+
556
+ & .media-overlay {
557
+ opacity: 1;
558
+ }
559
+
560
+ & .media-preview__spinner {
561
+ position: absolute;
562
+ top: 50%;
563
+ left: 50%;
564
+ translate: -50% -50%;
565
+ opacity: 0;
566
+ }
567
+
568
+ & .media-preview__thumbnail,
569
+ & .media-preview__spinner {
570
+ transition: opacity 150ms ease-out;
571
+ }
572
+
573
+ &:has(.media-preview__thumbnail[data-loading]) {
574
+ & .media-preview__thumbnail {
575
+ opacity: 0;
576
+ }
577
+ & .media-preview__spinner {
578
+ opacity: 1;
579
+ }
580
+ }
581
+ }
582
+
516
583
  /* ==========================================================================
517
584
  Slider
518
585
  ========================================================================== */
@@ -525,6 +592,7 @@
525
592
  flex: 1;
526
593
  border-radius: calc(infinity * 1px);
527
594
  outline: none;
595
+ cursor: pointer;
528
596
 
529
597
  &[data-orientation="horizontal"] {
530
598
  min-width: 5rem;
@@ -561,7 +629,7 @@
561
629
  /* Thumb */
562
630
  .media-minimal-skin .media-slider__thumb {
563
631
  position: absolute;
564
- transform: translate(-50%, -50%);
632
+ translate: -50% -50%;
565
633
  z-index: 10;
566
634
  width: 0.75rem;
567
635
  height: 0.75rem;
@@ -654,11 +722,6 @@
654
722
  }
655
723
  }
656
724
 
657
- /* Time display within slider */
658
- .media-minimal-skin .media-slider__time-display {
659
- font-variant-numeric: tabular-nums;
660
- }
661
-
662
725
  /* ==========================================================================
663
726
  Popups & Animations
664
727
  ========================================================================== */
@@ -669,13 +732,13 @@
669
732
  border: 0;
670
733
  color: inherit;
671
734
  overflow: visible;
672
- transition-property: transform, scale, opacity, filter;
673
- transition-duration: 200ms;
735
+ transition-property: scale, opacity, filter;
736
+ transition-duration: 150ms;
674
737
 
675
738
  &[data-starting-style],
676
739
  &[data-ending-style] {
677
740
  opacity: 0;
678
- transform: scale(0);
741
+ scale: 0.5;
679
742
  filter: blur(8px);
680
743
  }
681
744
 
@@ -695,6 +758,48 @@
695
758
  &[data-side="right"] {
696
759
  transform-origin: left;
697
760
  }
761
+
762
+ /* Safe area between trigger and popup */
763
+ &::before {
764
+ content: "";
765
+ position: absolute;
766
+ pointer-events: inherit;
767
+ }
768
+
769
+ &[data-side="top"]::before,
770
+ &[data-side="bottom"]::before {
771
+ width: 100%;
772
+ inset-inline: 0;
773
+ }
774
+ &[data-side="top"]::before {
775
+ top: 100%;
776
+ }
777
+ &[data-side="bottom"]::before {
778
+ bottom: 100%;
779
+ }
780
+
781
+ &[data-side="left"]::before,
782
+ &[data-side="right"]::before {
783
+ height: 100%;
784
+ inset-block: 0;
785
+ }
786
+ &[data-side="left"]::before {
787
+ left: 100%;
788
+ }
789
+ &[data-side="right"]::before {
790
+ right: 100%;
791
+ }
792
+ }
793
+
794
+ .media-minimal-skin .media-popover {
795
+ &[data-side="top"]::before,
796
+ &[data-side="bottom"]::before {
797
+ height: var(--media-popover-side-offset);
798
+ }
799
+ &[data-side="left"]::before,
800
+ &[data-side="right"]::before {
801
+ width: var(--media-popover-side-offset);
802
+ }
698
803
  }
699
804
 
700
805
  .media-minimal-skin .media-tooltip {
@@ -707,7 +812,16 @@
707
812
  0 2px 4px -2px oklch(0 0 0 / 0.1);
708
813
  font-size: 0.75rem;
709
814
  white-space: nowrap;
710
- --media-tooltip-side-offset: 0.5rem;
815
+ --media-tooltip-side-offset: 0.75rem;
816
+
817
+ &[data-side="top"]::before,
818
+ &[data-side="bottom"]::before {
819
+ height: var(--media-tooltip-side-offset);
820
+ }
821
+ &[data-side="left"]::before,
822
+ &[data-side="right"]::before {
823
+ width: var(--media-tooltip-side-offset);
824
+ }
711
825
 
712
826
  @media (prefers-reduced-transparency: reduce) {
713
827
  background-color: oklch(0 0 0 / 0.7);
@@ -718,48 +832,64 @@
718
832
  }
719
833
  }
720
834
 
835
+ .media-minimal-skin .media-popover--volume:has(media-volume-slider[data-availability="unsupported"]) {
836
+ display: none;
837
+ }
838
+
721
839
  /* ==========================================================================
722
840
  Native Caption Track
723
841
  ========================================================================== */
724
842
 
725
843
  .media-minimal-skin {
726
- --media-caption-track-delay: 600ms;
844
+ --media-caption-track-duration: var(--media-controls-transition-duration);
845
+ --media-caption-track-delay: calc(var(--media-controls-transition-delay) + 25ms);
727
846
  --media-caption-track-y: -0.5rem;
728
847
 
729
848
  &:has(.media-controls[data-visible]) {
730
- --media-caption-track-delay: 25ms;
731
849
  --media-caption-track-y: -3rem;
732
850
  }
733
851
  }
734
852
 
735
853
  .media-minimal-skin video::-webkit-media-text-track-container {
736
- /* NOTE: The delay must account for the controls delay/duration */
737
- transition: transform 150ms ease-out;
854
+ transition: translate var(--media-caption-track-duration) ease-out;
738
855
  transition-delay: var(--media-caption-track-delay);
739
- transform: translateY(var(--media-caption-track-y)) scale(0.98);
856
+ translate: 0 var(--media-caption-track-y);
857
+ scale: 0.98;
740
858
  z-index: 1;
741
859
  font-family: inherit;
742
860
  }
743
861
 
744
- @media (prefers-reduced-motion: reduce) {
745
- .media-minimal-skin video::-webkit-media-text-track-container {
746
- transition-duration: 50ms;
747
- }
748
- }
749
-
750
862
 
751
863
  /* ==========================================================================
752
864
  Root
753
865
  ========================================================================== */
754
866
 
755
867
  .media-minimal-skin--video {
868
+ overflow: clip;
756
869
  background: oklch(0 0 0);
757
870
  --media-border-color: oklch(0 0 0 / 0.15);
871
+ --media-video-border-radius: var(--media-border-radius, 0.75rem);
872
+ --media-controls-transition-duration: 100ms;
873
+ --media-controls-transition-delay: 0ms;
758
874
 
759
875
  @media (prefers-color-scheme: dark) {
760
876
  --media-border-color: oklch(1 0 0 / 0.15);
761
877
  }
762
878
 
879
+ &:has(.media-controls:not([data-visible])) {
880
+ /* Slight delay to hide controls on non-touch devices after interaction */
881
+ @media (pointer: fine) {
882
+ --media-controls-transition-delay: 500ms;
883
+ --media-controls-transition-duration: 300ms;
884
+ }
885
+ @media (pointer: coarse) {
886
+ --media-controls-transition-duration: 150ms;
887
+ }
888
+ @media (prefers-reduced-motion: reduce) {
889
+ --media-controls-transition-duration: 100ms;
890
+ }
891
+ }
892
+
763
893
  /* Inner border ring */
764
894
  &::after {
765
895
  content: "";
@@ -773,7 +903,7 @@
773
903
 
774
904
  /* Fullscreen */
775
905
  &:fullscreen {
776
- border-radius: 0;
906
+ --media-border-radius: 0;
777
907
  }
778
908
  }
779
909
 
@@ -788,41 +918,47 @@
788
918
  z-index: 10;
789
919
  gap: 0.5rem;
790
920
  padding: 2rem 0.375rem 0.375rem 0.375rem;
791
- color: oklch(1 0 0);
921
+ color: var(--media-color-primary, oklch(1 0 0));
922
+ transition-duration: var(--media-controls-transition-duration);
923
+ transition-delay: var(--media-controls-transition-delay);
924
+ transition-timing-function: ease-out;
792
925
 
793
926
  @media (pointer: fine) {
794
- will-change: transform, filter, opacity;
795
- transition-property: transform, filter, opacity;
796
- transition-duration: 75ms;
797
- transition-delay: 0ms;
798
- transition-timing-function: ease-out;
927
+ will-change: translate, filter, opacity;
928
+ transition-property: translate, filter, opacity;
799
929
  }
800
930
 
801
- @container media-root (width > 40rem) {
802
- gap: 0.875rem;
803
- padding: 2.5rem 0.75rem 0.75rem 0.75rem;
931
+ @media (pointer: coarse) {
932
+ will-change: translate, opacity;
933
+ transition-property: translate, opacity;
804
934
  }
805
935
 
806
936
  &:not([data-visible]) {
807
937
  opacity: 0;
808
938
  pointer-events: none;
939
+ translate: 0 100%;
809
940
 
810
941
  @media (pointer: fine) {
811
- transform: translateY(100%);
812
942
  filter: blur(8px);
813
- transition-duration: 500ms;
814
- transition-delay: 500ms;
815
-
816
- @media (prefers-reduced-motion: reduce) {
817
- scale: 1;
818
- transform: translateY(0);
819
- filter: blur(0);
820
- transition-duration: 100ms;
821
- }
822
943
  }
944
+
945
+ @media (prefers-reduced-motion: reduce) {
946
+ translate: 0 0;
947
+ filter: blur(0);
948
+ }
949
+ }
950
+
951
+ @container media-root (width > 40rem) {
952
+ gap: 0.875rem;
953
+ padding: 2.5rem 0.75rem 0.75rem 0.75rem;
823
954
  }
824
955
  }
825
956
 
957
+ /* Hide cursor when controls are hidden in fullscreen */
958
+ .media-minimal-skin--video:fullscreen:has(.media-controls:not([data-visible])) {
959
+ cursor: none;
960
+ }
961
+
826
962
  /* ==========================================================================
827
963
  Sliders
828
964
  ========================================================================== */
@@ -841,7 +977,49 @@
841
977
  padding: 0.25rem;
842
978
  }
843
979
 
844
- media-tooltip-group {
845
- display: contents;
980
+ /* ==========================================================================
981
+ Slider preview
982
+ ========================================================================== */
983
+
984
+ .media-minimal-skin .media-slider__preview {
985
+ position: absolute;
986
+ left: var(--media-slider-pointer);
987
+ bottom: calc(100% + 0.5rem);
988
+ translate: -50%;
989
+ opacity: 0;
990
+ scale: 0.8;
991
+ filter: blur(8px);
992
+ transition-property: scale, opacity, filter;
993
+ transition-duration: 150ms;
994
+ transition-timing-function: ease-out;
995
+ transform-origin: bottom;
996
+
997
+ & .media-preview__thumbnail-wrapper {
998
+ position: relative;
999
+
1000
+ &::after {
1001
+ content: "";
1002
+ position: absolute;
1003
+ inset: 0;
1004
+ border-radius: inherit;
1005
+ box-shadow:
1006
+ 0 0 0 1px oklch(0 0 0 / 0.05),
1007
+ 0 1px 3px 0 oklch(0 0 0 / 0.2),
1008
+ 0 1px 2px -1px oklch(0 0 0 / 0.2);
1009
+ }
1010
+ }
1011
+
1012
+ & .media-preview__thumbnail {
1013
+ max-width: 11rem;
1014
+ }
1015
+
1016
+ &:has(.media-preview__thumbnail[data-loading]) {
1017
+ max-height: 6rem;
1018
+ }
1019
+ }
1020
+ .media-minimal-skin .media-slider[data-pointing] .media-slider__preview:has([role="img"]:not([data-hidden])) {
1021
+ opacity: 1;
1022
+ scale: 1;
1023
+ filter: blur(0);
846
1024
  }
847
1025
 
@@ -9,6 +9,7 @@ import "../ui/pip-button.js";
9
9
  import "../ui/play-button.js";
10
10
  import "../ui/playback-rate-button.js";
11
11
  import "../ui/popover.js";
12
+ import "../ui/poster.js";
12
13
  import "../ui/seek-button.js";
13
14
  import "../ui/time.js";
14
15
  import "../ui/time-slider.js";
@@ -21,7 +22,7 @@ import { ReactiveElement } from "@videojs/element";
21
22
  //#region src/define/video/minimal-skin.ts
22
23
  const SEEK_TIME = 10;
23
24
  function getTemplateHTML() {
24
- return `<media-container class="media-minimal-skin media-minimal-skin--video"><slot name="media"></slot><media-buffering-indicator class="media-buffering-indicator"> ${renderIcon("spinner", { class: "media-icon" })} </media-buffering-indicator><media-controls class="media-controls"><media-tooltip-group><div class="media-button-group"><media-play-button commandfor="play-tooltip" class="media-button media-button--icon media-button--play"> ${renderIcon("restart", { class: "media-icon media-icon--restart" })} ${renderIcon("play", { class: "media-icon media-icon--play" })} ${renderIcon("pause", { class: "media-icon media-icon--pause" })} </media-play-button><media-tooltip id="play-tooltip" side="top" class="media-tooltip"><span class="media-tooltip-label media-tooltip-label--replay">Replay</span><span class="media-tooltip-label media-tooltip-label--play">Play</span><span class="media-tooltip-label media-tooltip-label--pause">Pause</span></media-tooltip><media-seek-button commandfor="seek-backward-tooltip" seconds="${-SEEK_TIME}" class="media-button media-button--icon media-button--seek"><span class="media-icon__container"> ${renderIcon("seek", { class: "media-icon media-icon--flipped" })} <span class="media-icon__label">${SEEK_TIME}</span></span></media-seek-button><media-tooltip id="seek-backward-tooltip" side="top" class="media-tooltip"> Seek backward ${SEEK_TIME} seconds </media-tooltip><media-seek-button commandfor="seek-forward-tooltip" seconds="${SEEK_TIME}" class="media-button media-button--icon media-button--seek"><span class="media-icon__container"> ${renderIcon("seek", { class: "media-icon" })} <span class="media-icon__label">${SEEK_TIME}</span></span></media-seek-button><media-tooltip id="seek-forward-tooltip" side="top" class="media-tooltip"> Seek forward ${SEEK_TIME} seconds </media-tooltip></div><div class="media-time-controls"><media-time-group class="media-time"><media-time type="current" class="media-time__value media-time__value--current"></media-time><media-time-separator class="media-time__separator"></media-time-separator><media-time type="duration" class="media-time__value media-time__value--duration"></media-time></media-time-group><media-time-slider class="media-slider"><media-slider-track class="media-slider__track"><media-slider-fill class="media-slider__fill"></media-slider-fill><media-slider-buffer class="media-slider__buffer"></media-slider-buffer></media-slider-track><media-slider-thumb class="media-slider__thumb"></media-slider-thumb></media-time-slider></div><div class="media-button-group"><media-playback-rate-button commandfor="playback-rate-tooltip" class="media-button media-button--icon media-button--playback-rate"></media-playback-rate-button><media-tooltip id="playback-rate-tooltip" side="top" class="media-tooltip"> Toggle playback rate </media-tooltip><media-mute-button commandfor="video-volume-popover" class="media-button media-button--icon media-button--mute"> ${renderIcon("volume-off", { class: "media-icon media-icon--volume-off" })} ${renderIcon("volume-low", { class: "media-icon media-icon--volume-low" })} ${renderIcon("volume-high", { class: "media-icon media-icon--volume-high" })} </media-mute-button><media-popover id="video-volume-popover" open-on-hover delay="200" close-delay="100" side="top" class="media-popover media-popover--volume"><media-volume-slider class="media-slider" orientation="vertical" thumb-alignment="edge"><media-slider-track class="media-slider__track"><media-slider-fill class="media-slider__fill"></media-slider-fill></media-slider-track><media-slider-thumb class="media-slider__thumb media-slider__thumb--persistent"></media-slider-thumb></media-volume-slider></media-popover><media-captions-button commandfor="captions-tooltip" class="media-button media-button--icon media-button--captions"> ${renderIcon("captions-off", { class: "media-icon media-icon--captions-off" })} ${renderIcon("captions-on", { class: "media-icon media-icon--captions-on" })} </media-captions-button><media-tooltip id="captions-tooltip" side="top" class="media-tooltip"> Toggle captions </media-tooltip><media-pip-button commandfor="pip-tooltip" class="media-button media-button--icon"> ${renderIcon("pip", { class: "media-icon" })} </media-pip-button><media-tooltip id="pip-tooltip" side="top" class="media-tooltip"><span class="media-tooltip-label media-tooltip-label--enter-pip">Enter picture-in-picture</span><span class="media-tooltip-label media-tooltip-label--exit-pip">Exit picture-in-picture</span></media-tooltip><media-fullscreen-button commandfor="fullscreen-tooltip" class="media-button media-button--icon media-button--fullscreen"> ${renderIcon("fullscreen-enter", { class: "media-icon media-icon--fullscreen-enter" })} ${renderIcon("fullscreen-exit", { class: "media-icon media-icon--fullscreen-exit" })} </media-fullscreen-button><media-tooltip id="fullscreen-tooltip" side="top" class="media-tooltip"><span class="media-tooltip-label media-tooltip-label--enter-fullscreen">Enter fullscreen</span><span class="media-tooltip-label media-tooltip-label--exit-fullscreen">Exit fullscreen</span></media-tooltip></div></media-tooltip-group></media-controls><div class="media-overlay"></div></media-container>`;
25
+ return `<media-container class="media-minimal-skin media-minimal-skin--video"><slot name="media"></slot><slot></slot><media-poster><slot name="poster"></slot></media-poster><media-buffering-indicator class="media-buffering-indicator"> ${renderIcon("spinner", { class: "media-icon" })} </media-buffering-indicator><media-controls class="media-controls"><media-tooltip-group><div class="media-button-group"><media-play-button commandfor="play-tooltip" class="media-button media-button--icon media-button--play"> ${renderIcon("restart", { class: "media-icon media-icon--restart" })} ${renderIcon("play", { class: "media-icon media-icon--play" })} ${renderIcon("pause", { class: "media-icon media-icon--pause" })} </media-play-button><media-tooltip id="play-tooltip" side="top" class="media-tooltip"><span class="media-tooltip-label media-tooltip-label--replay">Replay</span><span class="media-tooltip-label media-tooltip-label--play">Play</span><span class="media-tooltip-label media-tooltip-label--pause">Pause</span></media-tooltip><media-seek-button commandfor="seek-backward-tooltip" seconds="${-SEEK_TIME}" class="media-button media-button--icon media-button--seek"><span class="media-icon__container"> ${renderIcon("seek", { class: "media-icon media-icon--flipped" })} <span class="media-icon__label">${SEEK_TIME}</span></span></media-seek-button><media-tooltip id="seek-backward-tooltip" side="top" class="media-tooltip"> Seek backward ${SEEK_TIME} seconds </media-tooltip><media-seek-button commandfor="seek-forward-tooltip" seconds="${SEEK_TIME}" class="media-button media-button--icon media-button--seek"><span class="media-icon__container"> ${renderIcon("seek", { class: "media-icon" })} <span class="media-icon__label">${SEEK_TIME}</span></span></media-seek-button><media-tooltip id="seek-forward-tooltip" side="top" class="media-tooltip"> Seek forward ${SEEK_TIME} seconds </media-tooltip></div><div class="media-time-controls"><media-time-group class="media-time"><media-time type="current" class="media-time__value media-time__value--current"></media-time><media-time-separator class="media-time__separator"></media-time-separator><media-time type="duration" class="media-time__value media-time__value--duration"></media-time></media-time-group><media-time-slider class="media-slider"><media-slider-track class="media-slider__track"><media-slider-fill class="media-slider__fill"></media-slider-fill><media-slider-buffer class="media-slider__buffer"></media-slider-buffer></media-slider-track><media-slider-thumb class="media-slider__thumb"></media-slider-thumb><div class="media-preview media-slider__preview"><div class="media-preview__thumbnail-wrapper"><media-slider-thumbnail class="media-preview__thumbnail"></media-slider-thumbnail></div><media-slider-value type="pointer" class="media-preview__timestamp"></media-slider-value> ${renderIcon("spinner", { class: "media-preview__spinner media-icon" })} </div></media-time-slider></div><div class="media-button-group"><media-playback-rate-button commandfor="playback-rate-tooltip" class="media-button media-button--icon media-button--playback-rate"></media-playback-rate-button><media-tooltip id="playback-rate-tooltip" side="top" class="media-tooltip"> Toggle playback rate </media-tooltip><media-mute-button commandfor="video-volume-popover" class="media-button media-button--icon media-button--mute"> ${renderIcon("volume-off", { class: "media-icon media-icon--volume-off" })} ${renderIcon("volume-low", { class: "media-icon media-icon--volume-low" })} ${renderIcon("volume-high", { class: "media-icon media-icon--volume-high" })} </media-mute-button><media-popover id="video-volume-popover" open-on-hover delay="200" close-delay="100" side="top" class="media-popover media-popover--volume"><media-volume-slider class="media-slider" orientation="vertical" thumb-alignment="edge"><media-slider-track class="media-slider__track"><media-slider-fill class="media-slider__fill"></media-slider-fill></media-slider-track><media-slider-thumb class="media-slider__thumb media-slider__thumb--persistent"></media-slider-thumb></media-volume-slider></media-popover><media-captions-button commandfor="captions-tooltip" class="media-button media-button--icon media-button--captions"> ${renderIcon("captions-off", { class: "media-icon media-icon--captions-off" })} ${renderIcon("captions-on", { class: "media-icon media-icon--captions-on" })} </media-captions-button><media-tooltip id="captions-tooltip" side="top" class="media-tooltip"> Toggle captions </media-tooltip><media-pip-button commandfor="pip-tooltip" class="media-button media-button--icon media-button--pip"> ${renderIcon("pip-enter", { class: "media-icon media-icon--pip-enter" })} ${renderIcon("pip-exit", { class: "media-icon media-icon--pip-exit" })} </media-pip-button><media-tooltip id="pip-tooltip" side="top" class="media-tooltip"><span class="media-tooltip-label media-tooltip-label--enter-pip">Enter picture-in-picture</span><span class="media-tooltip-label media-tooltip-label--exit-pip">Exit picture-in-picture</span></media-tooltip><media-fullscreen-button commandfor="fullscreen-tooltip" class="media-button media-button--icon media-button--fullscreen"> ${renderIcon("fullscreen-enter", { class: "media-icon media-icon--fullscreen-enter" })} ${renderIcon("fullscreen-exit", { class: "media-icon media-icon--fullscreen-exit" })} </media-fullscreen-button><media-tooltip id="fullscreen-tooltip" side="top" class="media-tooltip"><span class="media-tooltip-label media-tooltip-label--enter-fullscreen">Enter fullscreen</span><span class="media-tooltip-label media-tooltip-label--exit-fullscreen">Exit fullscreen</span></media-tooltip></div></media-tooltip-group></media-controls><div class="media-overlay"></div></media-container>`;
25
26
  }
26
27
  var MinimalVideoSkinElement = class extends SkinMixin(ReactiveElement) {
27
28
  static {