@videojs/html 10.0.0-alpha.4 → 10.0.0-alpha.6

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 (441) hide show
  1. package/dist/default/define/audio/minimal-skin.css +11 -0
  2. package/dist/default/define/audio/minimal-skin.js +26 -0
  3. package/dist/default/define/audio/minimal-skin.js.map +1 -0
  4. package/dist/default/define/audio/player.js +8 -4
  5. package/dist/default/define/audio/player.js.map +1 -1
  6. package/dist/default/define/audio/skin.css +12 -0
  7. package/dist/default/define/audio/skin.js +26 -0
  8. package/dist/default/define/audio/skin.js.map +1 -0
  9. package/dist/default/define/background/player.js +8 -4
  10. package/dist/default/define/background/player.js.map +1 -1
  11. package/dist/default/define/background/skin.js +2 -1
  12. package/dist/default/define/background/skin.js.map +1 -1
  13. package/dist/default/define/media/background-video.js +2 -1
  14. package/dist/default/define/media/background-video.js.map +1 -1
  15. package/dist/default/define/media/container.js +8 -0
  16. package/dist/default/define/media/container.js.map +1 -0
  17. package/dist/default/define/media/hls-video.js +2 -1
  18. package/dist/default/define/media/hls-video.js.map +1 -1
  19. package/dist/default/define/safe-define.js +9 -0
  20. package/dist/default/define/safe-define.js.map +1 -0
  21. package/dist/default/define/skin-mixin.js +35 -0
  22. package/dist/default/define/skin-mixin.js.map +1 -0
  23. package/dist/default/define/ui/buffering-indicator.js +2 -1
  24. package/dist/default/define/ui/buffering-indicator.js.map +1 -1
  25. package/dist/default/define/ui/controls-group.js +8 -0
  26. package/dist/default/define/ui/controls-group.js.map +1 -0
  27. package/dist/default/define/ui/controls.js +3 -2
  28. package/dist/default/define/ui/controls.js.map +1 -1
  29. package/dist/default/define/ui/fullscreen-button.js +2 -1
  30. package/dist/default/define/ui/fullscreen-button.js.map +1 -1
  31. package/dist/default/define/ui/mute-button.js +2 -1
  32. package/dist/default/define/ui/mute-button.js.map +1 -1
  33. package/dist/default/define/ui/pip-button.js +2 -1
  34. package/dist/default/define/ui/pip-button.js.map +1 -1
  35. package/dist/default/define/ui/play-button.js +2 -1
  36. package/dist/default/define/ui/play-button.js.map +1 -1
  37. package/dist/default/define/ui/playback-rate-button.js +8 -0
  38. package/dist/default/define/ui/playback-rate-button.js.map +1 -0
  39. package/dist/default/define/ui/popover.js +8 -0
  40. package/dist/default/define/ui/popover.js.map +1 -0
  41. package/dist/default/define/ui/poster.js +2 -1
  42. package/dist/default/define/ui/poster.js.map +1 -1
  43. package/dist/default/define/ui/seek-button.js +2 -1
  44. package/dist/default/define/ui/seek-button.js.map +1 -1
  45. package/dist/default/define/ui/slider-buffer.js +8 -0
  46. package/dist/default/define/ui/slider-buffer.js.map +1 -0
  47. package/dist/default/define/ui/slider-fill.js +8 -0
  48. package/dist/default/define/ui/slider-fill.js.map +1 -0
  49. package/dist/default/define/ui/slider-thumb.js +8 -0
  50. package/dist/default/define/ui/slider-thumb.js.map +1 -0
  51. package/dist/default/define/ui/slider-track.js +8 -0
  52. package/dist/default/define/ui/slider-track.js.map +1 -0
  53. package/dist/default/define/ui/slider-value.js +8 -0
  54. package/dist/default/define/ui/slider-value.js.map +1 -0
  55. package/dist/default/define/ui/slider.js +16 -0
  56. package/dist/default/define/ui/slider.js.map +1 -0
  57. package/dist/default/define/ui/thumbnail.js +8 -0
  58. package/dist/default/define/ui/thumbnail.js.map +1 -0
  59. package/dist/default/define/ui/time-group.js +8 -0
  60. package/dist/default/define/ui/time-group.js.map +1 -0
  61. package/dist/default/define/ui/time-separator.js +8 -0
  62. package/dist/default/define/ui/time-separator.js.map +1 -0
  63. package/dist/default/define/ui/time-slider.js +18 -0
  64. package/dist/default/define/ui/time-slider.js.map +1 -0
  65. package/dist/default/define/ui/time.js +4 -3
  66. package/dist/default/define/ui/time.js.map +1 -1
  67. package/dist/default/define/ui/volume-slider.js +16 -0
  68. package/dist/default/define/ui/volume-slider.js.map +1 -0
  69. package/dist/default/define/video/minimal-skin.css +762 -0
  70. package/dist/default/define/video/minimal-skin.js +131 -0
  71. package/dist/default/define/video/minimal-skin.js.map +1 -0
  72. package/dist/default/define/video/minimal-skin.tailwind.js +134 -0
  73. package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -0
  74. package/dist/default/define/video/player.js +8 -4
  75. package/dist/default/define/video/player.js.map +1 -1
  76. package/dist/default/define/video/skin.css +763 -0
  77. package/dist/default/define/video/skin.js +125 -0
  78. package/dist/default/define/video/skin.js.map +1 -0
  79. package/dist/default/define/video/skin.tailwind.js +127 -0
  80. package/dist/default/define/video/skin.tailwind.js.map +1 -0
  81. package/dist/default/icons/dist/render/default/index.js +27 -0
  82. package/dist/default/icons/dist/render/default/index.js.map +1 -0
  83. package/dist/default/icons/dist/render/minimal/index.js +27 -0
  84. package/dist/default/icons/dist/render/minimal/index.js.map +1 -0
  85. package/dist/default/index.js +17 -3
  86. package/dist/default/media/container-element.js +15 -0
  87. package/dist/default/media/container-element.js.map +1 -0
  88. package/dist/default/player/create-player.js +0 -5
  89. package/dist/default/player/create-player.js.map +1 -1
  90. package/dist/default/player/player-controller.js +3 -0
  91. package/dist/default/player/player-controller.js.map +1 -1
  92. package/dist/default/presets/audio.js +5 -0
  93. package/dist/default/presets/background.js +3 -0
  94. package/dist/default/presets/video.js +7 -0
  95. package/dist/default/skins/dist/default/video/default.tailwind.js +90 -0
  96. package/dist/default/skins/dist/default/video/default.tailwind.js.map +1 -0
  97. package/dist/default/skins/dist/default/video/minimal.tailwind.js +86 -0
  98. package/dist/default/skins/dist/default/video/minimal.tailwind.js.map +1 -0
  99. package/dist/default/store/container-mixin.js +14 -7
  100. package/dist/default/store/container-mixin.js.map +1 -1
  101. package/dist/default/ui/buffering-indicator/buffering-indicator-element.js.map +1 -1
  102. package/dist/default/ui/context-part-element.js +28 -0
  103. package/dist/default/ui/context-part-element.js.map +1 -0
  104. package/dist/default/ui/controls/context.js +9 -0
  105. package/dist/default/ui/controls/context.js.map +1 -0
  106. package/dist/default/ui/controls/controls-element.js +15 -6
  107. package/dist/default/ui/controls/controls-element.js.map +1 -1
  108. package/dist/default/ui/controls/controls-group-element.js +11 -2
  109. package/dist/default/ui/controls/controls-group-element.js.map +1 -1
  110. package/dist/default/ui/fullscreen-button/fullscreen-button-element.js +8 -39
  111. package/dist/default/ui/fullscreen-button/fullscreen-button-element.js.map +1 -1
  112. package/dist/default/ui/media-button-element.js +50 -0
  113. package/dist/default/ui/media-button-element.js.map +1 -0
  114. package/dist/default/ui/media-ui-element.js +22 -0
  115. package/dist/default/ui/media-ui-element.js.map +1 -0
  116. package/dist/default/ui/mute-button/mute-button-element.js +8 -39
  117. package/dist/default/ui/mute-button/mute-button-element.js.map +1 -1
  118. package/dist/default/ui/pip-button/pip-button-element.js +8 -39
  119. package/dist/default/ui/pip-button/pip-button-element.js.map +1 -1
  120. package/dist/default/ui/play-button/play-button-element.js +8 -39
  121. package/dist/default/ui/play-button/play-button-element.js.map +1 -1
  122. package/dist/default/ui/playback-rate-button/playback-rate-button-element.js +25 -0
  123. package/dist/default/ui/playback-rate-button/playback-rate-button-element.js.map +1 -0
  124. package/dist/default/ui/popover/popover-element.js +163 -0
  125. package/dist/default/ui/popover/popover-element.js.map +1 -0
  126. package/dist/default/ui/poster/poster-element.js +9 -14
  127. package/dist/default/ui/poster/poster-element.js.map +1 -1
  128. package/dist/default/ui/seek-button/seek-button-element.js +10 -36
  129. package/dist/default/ui/seek-button/seek-button-element.js.map +1 -1
  130. package/dist/default/ui/slider/context.js +9 -0
  131. package/dist/default/ui/slider/context.js.map +1 -0
  132. package/dist/default/ui/slider/slider-buffer-element.js +21 -0
  133. package/dist/default/ui/slider/slider-buffer-element.js.map +1 -0
  134. package/dist/default/ui/slider/slider-element.js +117 -0
  135. package/dist/default/ui/slider/slider-element.js.map +1 -0
  136. package/dist/default/ui/slider/slider-fill-element.js +21 -0
  137. package/dist/default/ui/slider/slider-fill-element.js.map +1 -0
  138. package/dist/default/ui/slider/slider-thumb-element.js +43 -0
  139. package/dist/default/ui/slider/slider-thumb-element.js.map +1 -0
  140. package/dist/default/ui/slider/slider-track-element.js +21 -0
  141. package/dist/default/ui/slider/slider-track-element.js.map +1 -0
  142. package/dist/default/ui/slider/slider-value-element.js +38 -0
  143. package/dist/default/ui/slider/slider-value-element.js.map +1 -0
  144. package/dist/default/ui/thumbnail/thumbnail-element.js +136 -0
  145. package/dist/default/ui/thumbnail/thumbnail-element.js.map +1 -0
  146. package/dist/default/ui/time/time-element.js +8 -16
  147. package/dist/default/ui/time/time-element.js.map +1 -1
  148. package/dist/default/ui/time-slider/time-slider-element.js +128 -0
  149. package/dist/default/ui/time-slider/time-slider-element.js.map +1 -0
  150. package/dist/default/ui/volume-slider/volume-slider-element.js +117 -0
  151. package/dist/default/ui/volume-slider/volume-slider-element.js.map +1 -0
  152. package/dist/dev/define/audio/minimal-skin.css +11 -0
  153. package/dist/dev/define/audio/minimal-skin.d.ts +17 -0
  154. package/dist/dev/define/audio/minimal-skin.d.ts.map +1 -0
  155. package/dist/dev/define/audio/minimal-skin.js +26 -0
  156. package/dist/dev/define/audio/minimal-skin.js.map +1 -0
  157. package/dist/dev/define/audio/player.d.ts +4 -3
  158. package/dist/dev/define/audio/player.d.ts.map +1 -1
  159. package/dist/dev/define/audio/player.js +8 -4
  160. package/dist/dev/define/audio/player.js.map +1 -1
  161. package/dist/dev/define/audio/skin.css +12 -0
  162. package/dist/dev/define/audio/skin.d.ts +17 -1
  163. package/dist/dev/define/audio/skin.d.ts.map +1 -0
  164. package/dist/dev/define/audio/skin.js +26 -0
  165. package/dist/dev/define/audio/skin.js.map +1 -0
  166. package/dist/dev/define/background/player.d.ts +4 -3
  167. package/dist/dev/define/background/player.d.ts.map +1 -1
  168. package/dist/dev/define/background/player.js +8 -4
  169. package/dist/dev/define/background/player.js.map +1 -1
  170. package/dist/dev/define/background/skin.d.ts.map +1 -1
  171. package/dist/dev/define/background/skin.js +2 -1
  172. package/dist/dev/define/background/skin.js.map +1 -1
  173. package/dist/dev/define/media/background-video.d.ts.map +1 -1
  174. package/dist/dev/define/media/background-video.js +2 -1
  175. package/dist/dev/define/media/background-video.js.map +1 -1
  176. package/dist/dev/define/media/container.d.ts +9 -0
  177. package/dist/dev/define/media/container.d.ts.map +1 -0
  178. package/dist/dev/define/media/container.js +8 -0
  179. package/dist/dev/define/media/container.js.map +1 -0
  180. package/dist/dev/define/media/hls-video.d.ts.map +1 -1
  181. package/dist/dev/define/media/hls-video.js +2 -1
  182. package/dist/dev/define/media/hls-video.js.map +1 -1
  183. package/dist/dev/define/safe-define.d.ts +9 -0
  184. package/dist/dev/define/safe-define.d.ts.map +1 -0
  185. package/dist/dev/define/safe-define.js +9 -0
  186. package/dist/dev/define/safe-define.js.map +1 -0
  187. package/dist/dev/define/skin-mixin.d.ts +13 -0
  188. package/dist/dev/define/skin-mixin.d.ts.map +1 -0
  189. package/dist/dev/define/skin-mixin.js +35 -0
  190. package/dist/dev/define/skin-mixin.js.map +1 -0
  191. package/dist/dev/define/ui/buffering-indicator.d.ts.map +1 -1
  192. package/dist/dev/define/ui/buffering-indicator.js +2 -1
  193. package/dist/dev/define/ui/buffering-indicator.js.map +1 -1
  194. package/dist/dev/define/ui/controls-group.d.ts +9 -0
  195. package/dist/dev/define/ui/controls-group.d.ts.map +1 -0
  196. package/dist/dev/define/ui/controls-group.js +8 -0
  197. package/dist/dev/define/ui/controls-group.js.map +1 -0
  198. package/dist/dev/define/ui/controls.d.ts +0 -2
  199. package/dist/dev/define/ui/controls.d.ts.map +1 -1
  200. package/dist/dev/define/ui/controls.js +3 -2
  201. package/dist/dev/define/ui/controls.js.map +1 -1
  202. package/dist/dev/define/ui/fullscreen-button.d.ts.map +1 -1
  203. package/dist/dev/define/ui/fullscreen-button.js +2 -1
  204. package/dist/dev/define/ui/fullscreen-button.js.map +1 -1
  205. package/dist/dev/define/ui/mute-button.d.ts.map +1 -1
  206. package/dist/dev/define/ui/mute-button.js +2 -1
  207. package/dist/dev/define/ui/mute-button.js.map +1 -1
  208. package/dist/dev/define/ui/pip-button.d.ts.map +1 -1
  209. package/dist/dev/define/ui/pip-button.js +2 -1
  210. package/dist/dev/define/ui/pip-button.js.map +1 -1
  211. package/dist/dev/define/ui/play-button.d.ts.map +1 -1
  212. package/dist/dev/define/ui/play-button.js +2 -1
  213. package/dist/dev/define/ui/play-button.js.map +1 -1
  214. package/dist/dev/define/ui/playback-rate-button.d.ts +9 -0
  215. package/dist/dev/define/ui/playback-rate-button.d.ts.map +1 -0
  216. package/dist/dev/define/ui/playback-rate-button.js +8 -0
  217. package/dist/dev/define/ui/playback-rate-button.js.map +1 -0
  218. package/dist/dev/define/ui/popover.d.ts +9 -0
  219. package/dist/dev/define/ui/popover.d.ts.map +1 -0
  220. package/dist/dev/define/ui/popover.js +8 -0
  221. package/dist/dev/define/ui/popover.js.map +1 -0
  222. package/dist/dev/define/ui/poster.d.ts.map +1 -1
  223. package/dist/dev/define/ui/poster.js +2 -1
  224. package/dist/dev/define/ui/poster.js.map +1 -1
  225. package/dist/dev/define/ui/seek-button.d.ts.map +1 -1
  226. package/dist/dev/define/ui/seek-button.js +2 -1
  227. package/dist/dev/define/ui/seek-button.js.map +1 -1
  228. package/dist/dev/define/ui/slider-buffer.d.ts +9 -0
  229. package/dist/dev/define/ui/slider-buffer.d.ts.map +1 -0
  230. package/dist/dev/define/ui/slider-buffer.js +8 -0
  231. package/dist/dev/define/ui/slider-buffer.js.map +1 -0
  232. package/dist/dev/define/ui/slider-fill.d.ts +9 -0
  233. package/dist/dev/define/ui/slider-fill.d.ts.map +1 -0
  234. package/dist/dev/define/ui/slider-fill.js +8 -0
  235. package/dist/dev/define/ui/slider-fill.js.map +1 -0
  236. package/dist/dev/define/ui/slider-thumb.d.ts +9 -0
  237. package/dist/dev/define/ui/slider-thumb.d.ts.map +1 -0
  238. package/dist/dev/define/ui/slider-thumb.js +8 -0
  239. package/dist/dev/define/ui/slider-thumb.js.map +1 -0
  240. package/dist/dev/define/ui/slider-track.d.ts +9 -0
  241. package/dist/dev/define/ui/slider-track.d.ts.map +1 -0
  242. package/dist/dev/define/ui/slider-track.js +8 -0
  243. package/dist/dev/define/ui/slider-track.js.map +1 -0
  244. package/dist/dev/define/ui/slider-value.d.ts +9 -0
  245. package/dist/dev/define/ui/slider-value.d.ts.map +1 -0
  246. package/dist/dev/define/ui/slider-value.js +8 -0
  247. package/dist/dev/define/ui/slider-value.js.map +1 -0
  248. package/dist/dev/define/ui/slider.d.ts +9 -0
  249. package/dist/dev/define/ui/slider.d.ts.map +1 -0
  250. package/dist/dev/define/ui/slider.js +16 -0
  251. package/dist/dev/define/ui/slider.js.map +1 -0
  252. package/dist/dev/define/ui/thumbnail.d.ts +9 -0
  253. package/dist/dev/define/ui/thumbnail.d.ts.map +1 -0
  254. package/dist/dev/define/ui/thumbnail.js +8 -0
  255. package/dist/dev/define/ui/thumbnail.js.map +1 -0
  256. package/dist/dev/define/ui/time-group.d.ts +9 -0
  257. package/dist/dev/define/ui/time-group.d.ts.map +1 -0
  258. package/dist/dev/define/ui/time-group.js +8 -0
  259. package/dist/dev/define/ui/time-group.js.map +1 -0
  260. package/dist/dev/define/ui/time-separator.d.ts +9 -0
  261. package/dist/dev/define/ui/time-separator.d.ts.map +1 -0
  262. package/dist/dev/define/ui/time-separator.js +8 -0
  263. package/dist/dev/define/ui/time-separator.js.map +1 -0
  264. package/dist/dev/define/ui/time-slider.d.ts +9 -0
  265. package/dist/dev/define/ui/time-slider.d.ts.map +1 -0
  266. package/dist/dev/define/ui/time-slider.js +18 -0
  267. package/dist/dev/define/ui/time-slider.js.map +1 -0
  268. package/dist/dev/define/ui/time.d.ts +0 -4
  269. package/dist/dev/define/ui/time.d.ts.map +1 -1
  270. package/dist/dev/define/ui/time.js +4 -3
  271. package/dist/dev/define/ui/time.js.map +1 -1
  272. package/dist/dev/define/ui/volume-slider.d.ts +9 -0
  273. package/dist/dev/define/ui/volume-slider.d.ts.map +1 -0
  274. package/dist/dev/define/ui/volume-slider.js +16 -0
  275. package/dist/dev/define/ui/volume-slider.js.map +1 -0
  276. package/dist/dev/define/video/minimal-skin.css +762 -0
  277. package/dist/dev/define/video/minimal-skin.d.ts +30 -0
  278. package/dist/dev/define/video/minimal-skin.d.ts.map +1 -0
  279. package/dist/dev/define/video/minimal-skin.js +131 -0
  280. package/dist/dev/define/video/minimal-skin.js.map +1 -0
  281. package/dist/dev/define/video/minimal-skin.tailwind.d.ts +30 -0
  282. package/dist/dev/define/video/minimal-skin.tailwind.d.ts.map +1 -0
  283. package/dist/dev/define/video/minimal-skin.tailwind.js +134 -0
  284. package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -0
  285. package/dist/dev/define/video/player.d.ts +4 -3
  286. package/dist/dev/define/video/player.d.ts.map +1 -1
  287. package/dist/dev/define/video/player.js +8 -4
  288. package/dist/dev/define/video/player.js.map +1 -1
  289. package/dist/dev/define/video/skin.css +763 -0
  290. package/dist/dev/define/video/skin.d.ts +30 -1
  291. package/dist/dev/define/video/skin.d.ts.map +1 -0
  292. package/dist/dev/define/video/skin.js +125 -0
  293. package/dist/dev/define/video/skin.js.map +1 -0
  294. package/dist/dev/define/video/skin.tailwind.d.ts +30 -0
  295. package/dist/dev/define/video/skin.tailwind.d.ts.map +1 -0
  296. package/dist/dev/define/video/skin.tailwind.js +127 -0
  297. package/dist/dev/define/video/skin.tailwind.js.map +1 -0
  298. package/dist/dev/icons/dist/render/default/index.js +27 -0
  299. package/dist/dev/icons/dist/render/default/index.js.map +1 -0
  300. package/dist/dev/icons/dist/render/minimal/index.js +27 -0
  301. package/dist/dev/icons/dist/render/minimal/index.js.map +1 -0
  302. package/dist/dev/index.d.ts +19 -4
  303. package/dist/dev/index.js +17 -3
  304. package/dist/dev/media/container-element.d.ts +13 -0
  305. package/dist/dev/media/container-element.d.ts.map +1 -0
  306. package/dist/dev/media/container-element.js +15 -0
  307. package/dist/dev/media/container-element.js.map +1 -0
  308. package/dist/dev/player/create-player.d.ts +6 -14
  309. package/dist/dev/player/create-player.d.ts.map +1 -1
  310. package/dist/dev/player/create-player.js +0 -5
  311. package/dist/dev/player/create-player.js.map +1 -1
  312. package/dist/dev/player/player-controller.d.ts +1 -0
  313. package/dist/dev/player/player-controller.d.ts.map +1 -1
  314. package/dist/dev/player/player-controller.js +3 -0
  315. package/dist/dev/player/player-controller.js.map +1 -1
  316. package/dist/dev/presets/audio.d.ts +4 -0
  317. package/dist/dev/presets/audio.js +5 -0
  318. package/dist/dev/presets/background.d.ts +2 -0
  319. package/dist/dev/presets/background.js +3 -0
  320. package/dist/dev/presets/video.d.ts +6 -0
  321. package/dist/dev/presets/video.js +7 -0
  322. package/dist/dev/skins/dist/default/video/default.tailwind.js +90 -0
  323. package/dist/dev/skins/dist/default/video/default.tailwind.js.map +1 -0
  324. package/dist/dev/skins/dist/default/video/minimal.tailwind.js +86 -0
  325. package/dist/dev/skins/dist/default/video/minimal.tailwind.js.map +1 -0
  326. package/dist/dev/store/container-mixin.d.ts +1 -1
  327. package/dist/dev/store/container-mixin.js +14 -7
  328. package/dist/dev/store/container-mixin.js.map +1 -1
  329. package/dist/dev/store/provider-mixin.d.ts +1 -1
  330. package/dist/dev/store/types.d.ts +1 -3
  331. package/dist/dev/store/types.d.ts.map +1 -1
  332. package/dist/dev/ui/buffering-indicator/buffering-indicator-element.js +2 -2
  333. package/dist/dev/ui/buffering-indicator/buffering-indicator-element.js.map +1 -1
  334. package/dist/dev/ui/context-part-element.d.ts +32 -0
  335. package/dist/dev/ui/context-part-element.d.ts.map +1 -0
  336. package/dist/dev/ui/context-part-element.js +28 -0
  337. package/dist/dev/ui/context-part-element.js.map +1 -0
  338. package/dist/dev/ui/controls/context.d.ts +10 -0
  339. package/dist/dev/ui/controls/context.d.ts.map +1 -0
  340. package/dist/dev/ui/controls/context.js +9 -0
  341. package/dist/dev/ui/controls/context.js.map +1 -0
  342. package/dist/dev/ui/controls/controls-element.d.ts +1 -1
  343. package/dist/dev/ui/controls/controls-element.d.ts.map +1 -1
  344. package/dist/dev/ui/controls/controls-element.js +17 -8
  345. package/dist/dev/ui/controls/controls-element.js.map +1 -1
  346. package/dist/dev/ui/controls/controls-group-element.d.ts +8 -2
  347. package/dist/dev/ui/controls/controls-group-element.d.ts.map +1 -1
  348. package/dist/dev/ui/controls/controls-group-element.js +11 -2
  349. package/dist/dev/ui/controls/controls-group-element.js.map +1 -1
  350. package/dist/dev/ui/fullscreen-button/fullscreen-button-element.d.ts +11 -18
  351. package/dist/dev/ui/fullscreen-button/fullscreen-button-element.d.ts.map +1 -1
  352. package/dist/dev/ui/fullscreen-button/fullscreen-button-element.js +8 -40
  353. package/dist/dev/ui/fullscreen-button/fullscreen-button-element.js.map +1 -1
  354. package/dist/dev/ui/media-button-element.d.ts +24 -0
  355. package/dist/dev/ui/media-button-element.d.ts.map +1 -0
  356. package/dist/dev/ui/media-button-element.js +51 -0
  357. package/dist/dev/ui/media-button-element.js.map +1 -0
  358. package/dist/dev/ui/media-ui-element.d.ts +17 -0
  359. package/dist/dev/ui/media-ui-element.d.ts.map +1 -0
  360. package/dist/dev/ui/media-ui-element.js +23 -0
  361. package/dist/dev/ui/media-ui-element.js.map +1 -0
  362. package/dist/dev/ui/mute-button/mute-button-element.d.ts +11 -18
  363. package/dist/dev/ui/mute-button/mute-button-element.d.ts.map +1 -1
  364. package/dist/dev/ui/mute-button/mute-button-element.js +8 -40
  365. package/dist/dev/ui/mute-button/mute-button-element.js.map +1 -1
  366. package/dist/dev/ui/pip-button/pip-button-element.d.ts +11 -18
  367. package/dist/dev/ui/pip-button/pip-button-element.d.ts.map +1 -1
  368. package/dist/dev/ui/pip-button/pip-button-element.js +8 -40
  369. package/dist/dev/ui/pip-button/pip-button-element.js.map +1 -1
  370. package/dist/dev/ui/play-button/play-button-element.d.ts +12 -18
  371. package/dist/dev/ui/play-button/play-button-element.d.ts.map +1 -1
  372. package/dist/dev/ui/play-button/play-button-element.js +8 -40
  373. package/dist/dev/ui/play-button/play-button-element.js.map +1 -1
  374. package/dist/dev/ui/playback-rate-button/playback-rate-button-element.d.ts +18 -0
  375. package/dist/dev/ui/playback-rate-button/playback-rate-button-element.d.ts.map +1 -0
  376. package/dist/dev/ui/playback-rate-button/playback-rate-button-element.js +25 -0
  377. package/dist/dev/ui/playback-rate-button/playback-rate-button-element.js.map +1 -0
  378. package/dist/dev/ui/popover/popover-element.d.ts +65 -0
  379. package/dist/dev/ui/popover/popover-element.d.ts.map +1 -0
  380. package/dist/dev/ui/popover/popover-element.js +163 -0
  381. package/dist/dev/ui/popover/popover-element.js.map +1 -0
  382. package/dist/dev/ui/poster/poster-element.d.ts +11 -6
  383. package/dist/dev/ui/poster/poster-element.d.ts.map +1 -1
  384. package/dist/dev/ui/poster/poster-element.js +9 -15
  385. package/dist/dev/ui/poster/poster-element.js.map +1 -1
  386. package/dist/dev/ui/seek-button/seek-button-element.d.ts +14 -22
  387. package/dist/dev/ui/seek-button/seek-button-element.d.ts.map +1 -1
  388. package/dist/dev/ui/seek-button/seek-button-element.js +10 -37
  389. package/dist/dev/ui/seek-button/seek-button-element.js.map +1 -1
  390. package/dist/dev/ui/slider/context.d.ts +24 -0
  391. package/dist/dev/ui/slider/context.d.ts.map +1 -0
  392. package/dist/dev/ui/slider/context.js +9 -0
  393. package/dist/dev/ui/slider/context.js.map +1 -0
  394. package/dist/dev/ui/slider/slider-buffer-element.d.ts +15 -0
  395. package/dist/dev/ui/slider/slider-buffer-element.d.ts.map +1 -0
  396. package/dist/dev/ui/slider/slider-buffer-element.js +21 -0
  397. package/dist/dev/ui/slider/slider-buffer-element.js.map +1 -0
  398. package/dist/dev/ui/slider/slider-element.d.ts +56 -0
  399. package/dist/dev/ui/slider/slider-element.d.ts.map +1 -0
  400. package/dist/dev/ui/slider/slider-element.js +117 -0
  401. package/dist/dev/ui/slider/slider-element.js.map +1 -0
  402. package/dist/dev/ui/slider/slider-events.d.ts +18 -0
  403. package/dist/dev/ui/slider/slider-events.d.ts.map +1 -0
  404. package/dist/dev/ui/slider/slider-fill-element.d.ts +15 -0
  405. package/dist/dev/ui/slider/slider-fill-element.d.ts.map +1 -0
  406. package/dist/dev/ui/slider/slider-fill-element.js +21 -0
  407. package/dist/dev/ui/slider/slider-fill-element.js.map +1 -0
  408. package/dist/dev/ui/slider/slider-thumb-element.d.ts +14 -0
  409. package/dist/dev/ui/slider/slider-thumb-element.d.ts.map +1 -0
  410. package/dist/dev/ui/slider/slider-thumb-element.js +43 -0
  411. package/dist/dev/ui/slider/slider-thumb-element.js.map +1 -0
  412. package/dist/dev/ui/slider/slider-track-element.d.ts +15 -0
  413. package/dist/dev/ui/slider/slider-track-element.d.ts.map +1 -0
  414. package/dist/dev/ui/slider/slider-track-element.js +21 -0
  415. package/dist/dev/ui/slider/slider-track-element.js.map +1 -0
  416. package/dist/dev/ui/slider/slider-value-element.d.ts +19 -0
  417. package/dist/dev/ui/slider/slider-value-element.d.ts.map +1 -0
  418. package/dist/dev/ui/slider/slider-value-element.js +38 -0
  419. package/dist/dev/ui/slider/slider-value-element.js.map +1 -0
  420. package/dist/dev/ui/thumbnail/thumbnail-element.d.ts +42 -0
  421. package/dist/dev/ui/thumbnail/thumbnail-element.d.ts.map +1 -0
  422. package/dist/dev/ui/thumbnail/thumbnail-element.js +136 -0
  423. package/dist/dev/ui/thumbnail/thumbnail-element.js.map +1 -0
  424. package/dist/dev/ui/time/time-element.d.ts.map +1 -1
  425. package/dist/dev/ui/time/time-element.js +10 -18
  426. package/dist/dev/ui/time/time-element.js.map +1 -1
  427. package/dist/dev/ui/time-slider/time-slider-element.d.ts +49 -0
  428. package/dist/dev/ui/time-slider/time-slider-element.d.ts.map +1 -0
  429. package/dist/dev/ui/time-slider/time-slider-element.js +129 -0
  430. package/dist/dev/ui/time-slider/time-slider-element.js.map +1 -0
  431. package/dist/dev/ui/volume-slider/volume-slider-element.d.ts +44 -0
  432. package/dist/dev/ui/volume-slider/volume-slider-element.d.ts.map +1 -0
  433. package/dist/dev/ui/volume-slider/volume-slider-element.js +118 -0
  434. package/dist/dev/ui/volume-slider/volume-slider-element.js.map +1 -0
  435. package/package.json +41 -6
  436. package/dist/default/player/player-mixin.js +0 -23
  437. package/dist/default/player/player-mixin.js.map +0 -1
  438. package/dist/dev/player/player-mixin.d.ts +0 -20
  439. package/dist/dev/player/player-mixin.d.ts.map +0 -1
  440. package/dist/dev/player/player-mixin.js +0 -23
  441. package/dist/dev/player/player-mixin.js.map +0 -1
@@ -0,0 +1,3 @@
1
+ import { backgroundFeatures } from "@videojs/core/dom";
2
+
3
+ export { backgroundFeatures };
@@ -0,0 +1,7 @@
1
+ import { MinimalVideoSkinTailwindElement } from "../define/video/minimal-skin.tailwind.js";
2
+ import { MinimalVideoSkinElement } from "../define/video/minimal-skin.js";
3
+ import { VideoSkinTailwindElement } from "../define/video/skin.tailwind.js";
4
+ import { VideoSkinElement } from "../define/video/skin.js";
5
+ import { videoFeatures } from "@videojs/core/dom";
6
+
7
+ export { MinimalVideoSkinElement, MinimalVideoSkinTailwindElement, VideoSkinElement, VideoSkinTailwindElement, videoFeatures };
@@ -0,0 +1,90 @@
1
+ import { cn } from "@videojs/utils/style";
2
+
3
+ //#region ../skins/dist/default/video/default.tailwind.js
4
+ const surface = cn("bg-white/10", "backdrop-blur-3xl backdrop-brightness-90 backdrop-saturate-150", "ring ring-white/5 ring-inset shadow-sm shadow-black/15", "after:absolute after:inset-0 after:ring after:rounded-[inherit] after:ring-black/15 after:pointer-events-none after:z-10", "[@media(prefers-reduced-transparency:reduce)]:bg-black/70 [@media(prefers-reduced-transparency:reduce)]:ring-black [@media(prefers-reduced-transparency:reduce)]:after:ring-white/20", "contrast-more:bg-black/90 contrast-more:ring-black contrast-more:after:ring-white/20");
5
+ const icon = cn("block [grid-area:1/1] size-4.5 shrink-0", "drop-shadow-[0_1px_0_var(--tw-drop-shadow-color)] drop-shadow-black/25", "transition-discrete transition-[display,opacity] duration-150 ease-out");
6
+ const iconFlipped = "[scale:-1_1]";
7
+ const iconContainer = "relative";
8
+ const button = {
9
+ base: cn("items-center justify-center shrink-0 border-none cursor-pointer select-none text-center", "font-medium", "outline-2 outline-transparent -outline-offset-2", "transition-[background-color,color,outline-offset] duration-150 ease-out", "disabled:cursor-not-allowed disabled:opacity-50 disabled:grayscale", "focus-visible:outline-blue-500 focus-visible:outline-offset-2"),
10
+ icon: cn("grid w-[2.125rem] aspect-square bg-transparent rounded-full", "text-white/90", "text-shadow-2xs text-shadow-black/25", "hover:bg-white/10 hover:text-white hover:no-underline", "focus-visible:bg-white/10 focus-visible:text-white", "aria-expanded:bg-white/10 aria-expanded:text-white"),
11
+ default: cn("flex py-2 px-4 bg-white rounded-full", "text-black")
12
+ };
13
+ const slider = {
14
+ root: cn("group/slider relative flex flex-1 items-center justify-center rounded-full outline-none", "data-[orientation=horizontal]:min-w-20 data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-5", "data-[orientation=vertical]:w-5 data-[orientation=vertical]:h-20"),
15
+ track: cn("relative isolate overflow-hidden bg-white/20 rounded-[inherit]", "shadow-[0_0_0_1px_oklch(0_0_0/0.05)] select-none", "data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-1", "data-[orientation=vertical]:w-1 data-[orientation=vertical]:h-full"),
16
+ fill: {
17
+ base: "absolute rounded-[inherit] pointer-events-none",
18
+ fill: cn("bg-white", "data-[orientation=horizontal]:inset-y-0 data-[orientation=horizontal]:left-0", "data-[orientation=horizontal]:w-(--media-slider-fill)", "data-[orientation=vertical]:inset-x-0 data-[orientation=vertical]:bottom-0", "data-[orientation=vertical]:h-(--media-slider-fill)"),
19
+ buffer: cn("bg-white/20 duration-250 ease-out", "data-[orientation=horizontal]:inset-y-0 data-[orientation=horizontal]:left-0", "data-[orientation=horizontal]:transition-[width] data-[orientation=horizontal]:w-(--media-slider-buffer)", "data-[orientation=vertical]:inset-x-0 data-[orientation=vertical]:bottom-0", "data-[orientation=vertical]:transition-[height] data-[orientation=vertical]:h-(--media-slider-buffer)")
20
+ },
21
+ thumb: {
22
+ base: cn("z-10 absolute -translate-x-1/2 -translate-y-1/2", "bg-white rounded-full", "ring ring-black/10 shadow-sm shadow-black/15", "transition-[opacity,height,width,outline-offset] duration-150 ease-out select-none", "outline-2 outline-transparent -outline-offset-2", "focus-visible:outline-blue-500 focus-visible:outline-offset-2", "data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:left-(--media-slider-fill)", "data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:top-[calc(100%-var(--media-slider-fill))]"),
23
+ persistent: "size-3",
24
+ interactive: cn("size-2.5", "opacity-0 focus-visible:opacity-100 group-hover/slider:opacity-100", "group-active/slider:size-3")
25
+ }
26
+ };
27
+ const root = cn("block relative isolate overflow-clip @container/media-root", "rounded-(--media-border-radius,2rem) bg-black", "font-[Inter_Variable,Inter,ui-sans-serif,system-ui,sans-serif] text-[0.8125rem] leading-normal subpixel-antialiased", "**:box-border **:m-0", "[&_button]:font-[inherit]", "motion-safe:[interpolate-size:allow-keywords]", "before:absolute before:pointer-events-none before:rounded-[inherit] before:z-10", "before:inset-px before:ring-1 before:ring-inset before:ring-white/15", "after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10", "after:inset-0 after:ring-1 after:ring-inset after:ring-black/10", "[&>video]:block [&>video]:w-full [&>video]:h-full [&>video]:rounded-[inherit]", "[&>img]:absolute [&>img]:inset-0 [&>img]:w-full [&>img]:h-full [&>img]:rounded-[inherit]", "[&>img]:object-cover [&>img]:pointer-events-none", "[&>img]:transition-opacity [&>img]:duration-250", "[&>img:not([data-visible])]:opacity-0", "[--media-caption-track-delay:600ms]", "[--media-caption-track-y:-0.5rem]", "has-[[data-controls][data-visible]]:[--media-caption-track-delay:25ms]", "has-[[data-controls][data-visible]]:[--media-caption-track-y:-3.5rem]", "[&_video::-webkit-media-text-track-container]:transition-transform", "[&_video::-webkit-media-text-track-container]:duration-150", "[&_video::-webkit-media-text-track-container]:ease-out", "[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)", "[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)", "[&_video::-webkit-media-text-track-container]:scale-98", "[&_video::-webkit-media-text-track-container]:z-1", "[&_video::-webkit-media-text-track-container]:font-[inherit]", "motion-reduce:[&_video::-webkit-media-text-track-container]:duration-50", "[&:fullscreen]:rounded-none");
28
+ const controls = cn("peer/controls", surface, "absolute @container/media-controls bottom-3 inset-x-3", "p-[0.175rem] flex items-center gap-[0.075rem]", "text-white rounded-full z-10", "will-change-[scale,transform,filter,opacity]", "transition-[scale,transform,filter,opacity] ease-out", "delay-0 duration-100 origin-bottom", "not-data-visible:pointer-events-none not-data-visible:blur-sm", "not-data-visible:scale-90 not-data-visible:opacity-0", "not-data-visible:delay-500 not-data-visible:duration-300", "motion-reduce:not-data-visible:duration-100", "motion-reduce:not-data-visible:blur-none", "motion-reduce:not-data-visible:scale-100", "@2xl/media-root:p-1 @2xl/media-root:gap-0.5");
29
+ const overlay = cn("absolute inset-0 flex flex-col items-start", "pointer-events-none rounded-[inherit]", "opacity-0", "bg-linear-to-t from-black/50 via-black/30 to-transparent", "backdrop-blur-none backdrop-saturate-120 backdrop-brightness-90", "transition-[opacity,backdrop-filter] ease-out", "duration-300 delay-500", "peer-data-visible/controls:opacity-100", "peer-data-visible/controls:duration-150", "peer-data-visible/controls:delay-0", "peer-data-visible/error:opacity-100", "peer-data-visible/error:duration-150", "peer-data-visible/error:delay-0", "peer-data-visible/error:backdrop-blur-sm", "motion-reduce:duration-100");
30
+ const bufferingIndicator = {
31
+ root: "absolute inset-0 hidden items-center justify-center pointer-events-none z-10 text-white data-visible:flex",
32
+ container: cn("p-1 rounded-full", surface)
33
+ };
34
+ const error = {
35
+ root: "peer/error group/error absolute inset-0 z-20 items-center justify-center pointer-events-none hidden data-[visible]:flex",
36
+ dialog: cn("hidden flex-col gap-3 max-w-72 p-3 rounded-[1.75rem] text-white text-sm pointer-events-auto", "group-data-visible/error:flex", "transition-[display,opacity,scale,transform] duration-500 delay-100 transition-discrete", "starting:opacity-0 starting:scale-50", "ease-[linear(0,0.034_1.5%,0.763_9.7%,1.066_13.9%,1.198_19.9%,1.184_21.8%,0.963_37.5%,0.997_50.9%,1)]", surface),
37
+ content: "flex flex-col gap-2 px-2 pt-2 pb-1.5",
38
+ title: "font-semibold leading-tight",
39
+ description: "opacity-70",
40
+ actions: "flex gap-2 *:flex-1"
41
+ };
42
+ const time = {
43
+ group: "@container/media-time flex items-center flex-1 gap-3 px-2",
44
+ current: "hidden @2xs/media-time:block text-shadow-2xs text-shadow-black/25 tabular-nums",
45
+ duration: "text-shadow-2xs text-shadow-black/25 tabular-nums"
46
+ };
47
+ const popup = {
48
+ base: cn("m-0 border-0 [--media-popover-side-offset:0.5rem]", surface, "opacity-100 scale-100 origin-bottom blur-none", "transition-[transform,scale,opacity,filter] duration-200", "data-starting-style:opacity-0 data-starting-style:scale-0 data-starting-style:blur-sm", "data-ending-style:opacity-0 data-ending-style:scale-0 data-ending-style:blur-sm", "data-instant:duration-0"),
49
+ volume: "py-2.5 px-1 rounded-full"
50
+ };
51
+ const seek = {
52
+ button: "@max-md/media-controls:hidden",
53
+ label: "text-[0.75em] font-[480] tabular-nums",
54
+ labelForward: "absolute -right-px -bottom-0.75",
55
+ labelBackward: "absolute -left-px -bottom-0.75"
56
+ };
57
+ const playbackRate = { button: `after:content-[attr(data-rate)_'×'] after:w-[4ch] after:tabular-nums` };
58
+ const iconState = {
59
+ play: {
60
+ button: "group",
61
+ restart: "hidden opacity-0 group-data-ended:block group-data-ended:opacity-100",
62
+ play: "hidden opacity-0 group-not-data-ended:group-data-paused:block group-not-data-ended:group-data-paused:opacity-100",
63
+ pause: "hidden opacity-0 group-not-data-paused:group-not-data-ended:block group-not-data-paused:group-not-data-ended:opacity-100"
64
+ },
65
+ mute: {
66
+ button: "group",
67
+ volumeOff: "hidden opacity-0 group-data-muted:block group-data-muted:opacity-100",
68
+ volumeLow: "hidden opacity-0 group-not-data-muted:group-data-[volume-level=low]:block group-not-data-muted:group-data-[volume-level=low]:opacity-100",
69
+ volumeHigh: "hidden opacity-0 group-not-data-muted:group-not-data-[volume-level=low]:block group-not-data-muted:group-not-data-[volume-level=low]:opacity-100"
70
+ },
71
+ fullscreen: {
72
+ button: "group",
73
+ enter: "hidden opacity-0 group-not-data-fullscreen:block group-not-data-fullscreen:opacity-100",
74
+ exit: "hidden opacity-0 group-data-fullscreen:block group-data-fullscreen:opacity-100"
75
+ },
76
+ captions: {
77
+ button: "group",
78
+ off: "hidden opacity-0 group-not-data-active:block group-not-data-active:opacity-100",
79
+ on: "hidden opacity-0 group-data-active:block group-data-active:opacity-100"
80
+ }
81
+ };
82
+ const captions = {
83
+ root: cn("absolute z-20 pointer-events-none text-balance text-base", "inset-x-4 bottom-6", "transition-transform duration-150 ease-out delay-600", "motion-reduce:duration-50", "@xs/media-root:text-2xl", "@3xl/media-root:text-3xl", "@7xl/media-root:text-4xl", "peer-data-visible/controls:-translate-y-12 peer-data-visible/controls:delay-25"),
84
+ container: "max-w-[42ch] mx-auto text-center flex flex-col items-center",
85
+ cue: cn("block py-0.5 px-2 text-white text-center whitespace-pre-wrap leading-1.2", "[text-shadow:0_0_1px_oklab(0_0_0_/_0.7),0_0_8px_oklab(0_0_0_/_0.7)]", "contrast-more:[text-shadow:none] contrast-more:[box-decoration-break:clone] contrast-more:bg-black/70", "*:inline")
86
+ };
87
+
88
+ //#endregion
89
+ export { bufferingIndicator, button, controls, error, icon, iconContainer, iconFlipped, iconState, overlay, playbackRate, popup, root, seek, slider, time };
90
+ //# sourceMappingURL=default.tailwind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.tailwind.js","names":[],"sources":["../../../../../../../skins/dist/default/video/default.tailwind.js"],"sourcesContent":["import { cn } from \"@videojs/utils/style\";\n\n//#region src/video/default.tailwind.ts\nconst surface = cn(\"bg-white/10\", \"backdrop-blur-3xl backdrop-brightness-90 backdrop-saturate-150\", \"ring ring-white/5 ring-inset shadow-sm shadow-black/15\", \"after:absolute after:inset-0 after:ring after:rounded-[inherit] after:ring-black/15 after:pointer-events-none after:z-10\", \"[@media(prefers-reduced-transparency:reduce)]:bg-black/70 [@media(prefers-reduced-transparency:reduce)]:ring-black [@media(prefers-reduced-transparency:reduce)]:after:ring-white/20\", \"contrast-more:bg-black/90 contrast-more:ring-black contrast-more:after:ring-white/20\");\nconst icon = cn(\"block [grid-area:1/1] size-4.5 shrink-0\", \"drop-shadow-[0_1px_0_var(--tw-drop-shadow-color)] drop-shadow-black/25\", \"transition-discrete transition-[display,opacity] duration-150 ease-out\");\nconst iconHidden = \"hidden opacity-0\";\nconst iconFlipped = \"[scale:-1_1]\";\nconst iconContainer = \"relative\";\nconst button = {\n\tbase: cn(\"items-center justify-center shrink-0 border-none cursor-pointer select-none text-center\", \"font-medium\", \"outline-2 outline-transparent -outline-offset-2\", \"transition-[background-color,color,outline-offset] duration-150 ease-out\", \"disabled:cursor-not-allowed disabled:opacity-50 disabled:grayscale\", \"focus-visible:outline-blue-500 focus-visible:outline-offset-2\"),\n\ticon: cn(\"grid w-[2.125rem] aspect-square bg-transparent rounded-full\", \"text-white/90\", \"text-shadow-2xs text-shadow-black/25\", \"hover:bg-white/10 hover:text-white hover:no-underline\", \"focus-visible:bg-white/10 focus-visible:text-white\", \"aria-expanded:bg-white/10 aria-expanded:text-white\"),\n\tdefault: cn(\"flex py-2 px-4 bg-white rounded-full\", \"text-black\")\n};\nconst slider = {\n\troot: cn(\"group/slider relative flex flex-1 items-center justify-center rounded-full outline-none\", \"data-[orientation=horizontal]:min-w-20 data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-5\", \"data-[orientation=vertical]:w-5 data-[orientation=vertical]:h-20\"),\n\ttrack: cn(\"relative isolate overflow-hidden bg-white/20 rounded-[inherit]\", \"shadow-[0_0_0_1px_oklch(0_0_0/0.05)] select-none\", \"data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-1\", \"data-[orientation=vertical]:w-1 data-[orientation=vertical]:h-full\"),\n\tfill: {\n\t\tbase: \"absolute rounded-[inherit] pointer-events-none\",\n\t\tfill: cn(\"bg-white\", \"data-[orientation=horizontal]:inset-y-0 data-[orientation=horizontal]:left-0\", \"data-[orientation=horizontal]:w-(--media-slider-fill)\", \"data-[orientation=vertical]:inset-x-0 data-[orientation=vertical]:bottom-0\", \"data-[orientation=vertical]:h-(--media-slider-fill)\"),\n\t\tbuffer: cn(\"bg-white/20 duration-250 ease-out\", \"data-[orientation=horizontal]:inset-y-0 data-[orientation=horizontal]:left-0\", \"data-[orientation=horizontal]:transition-[width] data-[orientation=horizontal]:w-(--media-slider-buffer)\", \"data-[orientation=vertical]:inset-x-0 data-[orientation=vertical]:bottom-0\", \"data-[orientation=vertical]:transition-[height] data-[orientation=vertical]:h-(--media-slider-buffer)\")\n\t},\n\tthumb: {\n\t\tbase: cn(\"z-10 absolute -translate-x-1/2 -translate-y-1/2\", \"bg-white rounded-full\", \"ring ring-black/10 shadow-sm shadow-black/15\", \"transition-[opacity,height,width,outline-offset] duration-150 ease-out select-none\", \"outline-2 outline-transparent -outline-offset-2\", \"focus-visible:outline-blue-500 focus-visible:outline-offset-2\", \"data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:left-(--media-slider-fill)\", \"data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:top-[calc(100%-var(--media-slider-fill))]\"),\n\t\tpersistent: \"size-3\",\n\t\tinteractive: cn(\"size-2.5\", \"opacity-0 focus-visible:opacity-100 group-hover/slider:opacity-100\", \"group-active/slider:size-3\")\n\t}\n};\nconst root = cn(\"block relative isolate overflow-clip @container/media-root\", \"rounded-(--media-border-radius,2rem) bg-black\", \"font-[Inter_Variable,Inter,ui-sans-serif,system-ui,sans-serif] text-[0.8125rem] leading-normal subpixel-antialiased\", \"**:box-border **:m-0\", \"[&_button]:font-[inherit]\", \"motion-safe:[interpolate-size:allow-keywords]\", \"before:absolute before:pointer-events-none before:rounded-[inherit] before:z-10\", \"before:inset-px before:ring-1 before:ring-inset before:ring-white/15\", \"after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10\", \"after:inset-0 after:ring-1 after:ring-inset after:ring-black/10\", \"[&>video]:block [&>video]:w-full [&>video]:h-full [&>video]:rounded-[inherit]\", \"[&>img]:absolute [&>img]:inset-0 [&>img]:w-full [&>img]:h-full [&>img]:rounded-[inherit]\", \"[&>img]:object-cover [&>img]:pointer-events-none\", \"[&>img]:transition-opacity [&>img]:duration-250\", \"[&>img:not([data-visible])]:opacity-0\", \"[--media-caption-track-delay:600ms]\", \"[--media-caption-track-y:-0.5rem]\", \"has-[[data-controls][data-visible]]:[--media-caption-track-delay:25ms]\", \"has-[[data-controls][data-visible]]:[--media-caption-track-y:-3.5rem]\", \"[&_video::-webkit-media-text-track-container]:transition-transform\", \"[&_video::-webkit-media-text-track-container]:duration-150\", \"[&_video::-webkit-media-text-track-container]:ease-out\", \"[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)\", \"[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)\", \"[&_video::-webkit-media-text-track-container]:scale-98\", \"[&_video::-webkit-media-text-track-container]:z-1\", \"[&_video::-webkit-media-text-track-container]:font-[inherit]\", \"motion-reduce:[&_video::-webkit-media-text-track-container]:duration-50\", \"[&:fullscreen]:rounded-none\");\nconst controls = cn(\"peer/controls\", surface, \"absolute @container/media-controls bottom-3 inset-x-3\", \"p-[0.175rem] flex items-center gap-[0.075rem]\", \"text-white rounded-full z-10\", \"will-change-[scale,transform,filter,opacity]\", \"transition-[scale,transform,filter,opacity] ease-out\", \"delay-0 duration-100 origin-bottom\", \"not-data-visible:pointer-events-none not-data-visible:blur-sm\", \"not-data-visible:scale-90 not-data-visible:opacity-0\", \"not-data-visible:delay-500 not-data-visible:duration-300\", \"motion-reduce:not-data-visible:duration-100\", \"motion-reduce:not-data-visible:blur-none\", \"motion-reduce:not-data-visible:scale-100\", \"@2xl/media-root:p-1 @2xl/media-root:gap-0.5\");\nconst overlay = cn(\"absolute inset-0 flex flex-col items-start\", \"pointer-events-none rounded-[inherit]\", \"opacity-0\", \"bg-linear-to-t from-black/50 via-black/30 to-transparent\", \"backdrop-blur-none backdrop-saturate-120 backdrop-brightness-90\", \"transition-[opacity,backdrop-filter] ease-out\", \"duration-300 delay-500\", \"peer-data-visible/controls:opacity-100\", \"peer-data-visible/controls:duration-150\", \"peer-data-visible/controls:delay-0\", \"peer-data-visible/error:opacity-100\", \"peer-data-visible/error:duration-150\", \"peer-data-visible/error:delay-0\", \"peer-data-visible/error:backdrop-blur-sm\", \"motion-reduce:duration-100\");\nconst bufferingIndicator = {\n\troot: \"absolute inset-0 hidden items-center justify-center pointer-events-none z-10 text-white data-visible:flex\",\n\tcontainer: cn(\"p-1 rounded-full\", surface)\n};\nconst error = {\n\troot: \"peer/error group/error absolute inset-0 z-20 items-center justify-center pointer-events-none hidden data-[visible]:flex\",\n\tdialog: cn(\"hidden flex-col gap-3 max-w-72 p-3 rounded-[1.75rem] text-white text-sm pointer-events-auto\", \"group-data-visible/error:flex\", \"transition-[display,opacity,scale,transform] duration-500 delay-100 transition-discrete\", \"starting:opacity-0 starting:scale-50\", \"ease-[linear(0,0.034_1.5%,0.763_9.7%,1.066_13.9%,1.198_19.9%,1.184_21.8%,0.963_37.5%,0.997_50.9%,1)]\", surface),\n\tcontent: \"flex flex-col gap-2 px-2 pt-2 pb-1.5\",\n\ttitle: \"font-semibold leading-tight\",\n\tdescription: \"opacity-70\",\n\tactions: \"flex gap-2 *:flex-1\"\n};\nconst time = {\n\tgroup: \"@container/media-time flex items-center flex-1 gap-3 px-2\",\n\tcurrent: \"hidden @2xs/media-time:block text-shadow-2xs text-shadow-black/25 tabular-nums\",\n\tduration: \"text-shadow-2xs text-shadow-black/25 tabular-nums\"\n};\nconst popup = {\n\tbase: cn(\"m-0 border-0 [--media-popover-side-offset:0.5rem]\", surface, \"opacity-100 scale-100 origin-bottom blur-none\", \"transition-[transform,scale,opacity,filter] duration-200\", \"data-starting-style:opacity-0 data-starting-style:scale-0 data-starting-style:blur-sm\", \"data-ending-style:opacity-0 data-ending-style:scale-0 data-ending-style:blur-sm\", \"data-instant:duration-0\"),\n\tvolume: \"py-2.5 px-1 rounded-full\"\n};\nconst seek = {\n\tbutton: \"@max-md/media-controls:hidden\",\n\tlabel: \"text-[0.75em] font-[480] tabular-nums\",\n\tlabelForward: \"absolute -right-px -bottom-0.75\",\n\tlabelBackward: \"absolute -left-px -bottom-0.75\"\n};\nconst playbackRate = { button: `after:content-[attr(data-rate)_'×'] after:w-[4ch] after:tabular-nums` };\nconst iconState = {\n\tplay: {\n\t\tbutton: \"group\",\n\t\trestart: \"hidden opacity-0 group-data-ended:block group-data-ended:opacity-100\",\n\t\tplay: \"hidden opacity-0 group-not-data-ended:group-data-paused:block group-not-data-ended:group-data-paused:opacity-100\",\n\t\tpause: \"hidden opacity-0 group-not-data-paused:group-not-data-ended:block group-not-data-paused:group-not-data-ended:opacity-100\"\n\t},\n\tmute: {\n\t\tbutton: \"group\",\n\t\tvolumeOff: \"hidden opacity-0 group-data-muted:block group-data-muted:opacity-100\",\n\t\tvolumeLow: \"hidden opacity-0 group-not-data-muted:group-data-[volume-level=low]:block group-not-data-muted:group-data-[volume-level=low]:opacity-100\",\n\t\tvolumeHigh: \"hidden opacity-0 group-not-data-muted:group-not-data-[volume-level=low]:block group-not-data-muted:group-not-data-[volume-level=low]:opacity-100\"\n\t},\n\tfullscreen: {\n\t\tbutton: \"group\",\n\t\tenter: \"hidden opacity-0 group-not-data-fullscreen:block group-not-data-fullscreen:opacity-100\",\n\t\texit: \"hidden opacity-0 group-data-fullscreen:block group-data-fullscreen:opacity-100\"\n\t},\n\tcaptions: {\n\t\tbutton: \"group\",\n\t\toff: \"hidden opacity-0 group-not-data-active:block group-not-data-active:opacity-100\",\n\t\ton: \"hidden opacity-0 group-data-active:block group-data-active:opacity-100\"\n\t}\n};\nconst captions = {\n\troot: cn(\"absolute z-20 pointer-events-none text-balance text-base\", \"inset-x-4 bottom-6\", \"transition-transform duration-150 ease-out delay-600\", \"motion-reduce:duration-50\", \"@xs/media-root:text-2xl\", \"@3xl/media-root:text-3xl\", \"@7xl/media-root:text-4xl\", \"peer-data-visible/controls:-translate-y-12 peer-data-visible/controls:delay-25\"),\n\tcontainer: \"max-w-[42ch] mx-auto text-center flex flex-col items-center\",\n\tcue: cn(\"block py-0.5 px-2 text-white text-center whitespace-pre-wrap leading-1.2\", \"[text-shadow:0_0_1px_oklab(0_0_0_/_0.7),0_0_8px_oklab(0_0_0_/_0.7)]\", \"contrast-more:[text-shadow:none] contrast-more:[box-decoration-break:clone] contrast-more:bg-black/70\", \"*:inline\")\n};\n\n//#endregion\nexport { bufferingIndicator, button, captions, controls, error, icon, iconContainer, iconFlipped, iconHidden, iconState, overlay, playbackRate, popup, root, seek, slider, time };\n//# sourceMappingURL=default.tailwind.js.map"],"mappings":";;;AAGA,MAAM,UAAU,GAAG,eAAe,kEAAkE,0DAA0D,4HAA4H,wLAAwL,uFAAuF;AACziB,MAAM,OAAO,GAAG,2CAA2C,0EAA0E,yEAAyE;AAE9M,MAAM,cAAc;AACpB,MAAM,gBAAgB;AACtB,MAAM,SAAS;CACd,MAAM,GAAG,2FAA2F,eAAe,mDAAmD,4EAA4E,sEAAsE,gEAAgE;CACxX,MAAM,GAAG,+DAA+D,iBAAiB,wCAAwC,yDAAyD,sDAAsD,qDAAqD;CACrS,SAAS,GAAG,wCAAwC,aAAa;CACjE;AACD,MAAM,SAAS;CACd,MAAM,GAAG,2FAA2F,iHAAiH,mEAAmE;CACxR,OAAO,GAAG,kEAAkE,oDAAoD,0EAA0E,qEAAqE;CAC/Q,MAAM;EACL,MAAM;EACN,MAAM,GAAG,YAAY,gFAAgF,yDAAyD,8EAA8E,sDAAsD;EAClS,QAAQ,GAAG,qCAAqC,gFAAgF,4GAA4G,8EAA8E,wGAAwG;EACla;CACD,OAAO;EACN,MAAM,GAAG,mDAAmD,yBAAyB,gDAAgD,sFAAsF,mDAAmD,iEAAiE,kGAAkG,6GAA6G;EAC9hB,YAAY;EACZ,aAAa,GAAG,YAAY,sEAAsE,6BAA6B;EAC/H;CACD;AACD,MAAM,OAAO,GAAG,8DAA8D,iDAAiD,uHAAuH,wBAAwB,6BAA6B,iDAAiD,mFAAmF,wEAAwE,+EAA+E,mEAAmE,iFAAiF,4FAA4F,oDAAoD,mDAAmD,yCAAyC,uCAAuC,qCAAqC,0EAA0E,yEAAyE,sEAAsE,8DAA8D,0DAA0D,qFAAqF,uFAAuF,0DAA0D,qDAAqD,gEAAgE,2EAA2E,8BAA8B;AACvyD,MAAM,WAAW,GAAG,iBAAiB,SAAS,yDAAyD,iDAAiD,gCAAgC,gDAAgD,wDAAwD,sCAAsC,iEAAiE,wDAAwD,4DAA4D,+CAA+C,4CAA4C,4CAA4C,8CAA8C;AAChrB,MAAM,UAAU,GAAG,8CAA8C,yCAAyC,aAAa,4DAA4D,mEAAmE,iDAAiD,0BAA0B,0CAA0C,2CAA2C,sCAAsC,uCAAuC,wCAAwC,mCAAmC,4CAA4C,6BAA6B;AACvnB,MAAM,qBAAqB;CAC1B,MAAM;CACN,WAAW,GAAG,oBAAoB,QAAQ;CAC1C;AACD,MAAM,QAAQ;CACb,MAAM;CACN,QAAQ,GAAG,+FAA+F,iCAAiC,2FAA2F,wCAAwC,wGAAwG,QAAQ;CAC9X,SAAS;CACT,OAAO;CACP,aAAa;CACb,SAAS;CACT;AACD,MAAM,OAAO;CACZ,OAAO;CACP,SAAS;CACT,UAAU;CACV;AACD,MAAM,QAAQ;CACb,MAAM,GAAG,qDAAqD,SAAS,iDAAiD,4DAA4D,yFAAyF,mFAAmF,0BAA0B;CAC1X,QAAQ;CACR;AACD,MAAM,OAAO;CACZ,QAAQ;CACR,OAAO;CACP,cAAc;CACd,eAAe;CACf;AACD,MAAM,eAAe,EAAE,QAAQ,wEAAwE;AACvG,MAAM,YAAY;CACjB,MAAM;EACL,QAAQ;EACR,SAAS;EACT,MAAM;EACN,OAAO;EACP;CACD,MAAM;EACL,QAAQ;EACR,WAAW;EACX,WAAW;EACX,YAAY;EACZ;CACD,YAAY;EACX,QAAQ;EACR,OAAO;EACP,MAAM;EACN;CACD,UAAU;EACT,QAAQ;EACR,KAAK;EACL,IAAI;EACJ;CACD;AACD,MAAM,WAAW;CAChB,MAAM,GAAG,4DAA4D,sBAAsB,wDAAwD,6BAA6B,2BAA2B,4BAA4B,4BAA4B,iFAAiF;CACpV,WAAW;CACX,KAAK,GAAG,4EAA4E,uEAAuE,yGAAyG,WAAW;CAC/Q"}
@@ -0,0 +1,86 @@
1
+ import { cn } from "@videojs/utils/style";
2
+
3
+ //#region ../skins/dist/default/video/minimal.tailwind.js
4
+ const icon = cn("block [grid-area:1/1] size-4.5", "drop-shadow-[0_1px_0_var(--tw-drop-shadow-color)] drop-shadow-black/25", "transition-discrete transition-[display,opacity] duration-150 ease-out");
5
+ const iconFlipped = "[scale:-1_1]";
6
+ const iconContainer = "relative";
7
+ const button = {
8
+ base: cn("items-center justify-center shrink-0 border-none cursor-pointer select-none text-center", "outline-2 outline-transparent -outline-offset-2", "font-medium", "transition-[background-color,color,outline-offset] duration-150 ease-out", "focus-visible:outline-white focus-visible:outline-offset-2", "disabled:cursor-not-allowed disabled:opacity-50 disabled:grayscale"),
9
+ icon: cn("grid w-[2.375rem] aspect-square bg-transparent rounded-md", "text-white", "hover:text-white/80 hover:no-underline", "focus-visible:text-white/80", "aria-expanded:text-white/80"),
10
+ default: cn("flex py-2 px-4 bg-white rounded-lg", "text-black")
11
+ };
12
+ const slider = {
13
+ root: cn("group/slider relative flex flex-1 items-center justify-center rounded-full outline-none", "data-[orientation=horizontal]:min-w-20 data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-5", "data-[orientation=vertical]:w-5 data-[orientation=vertical]:h-[4.5rem]"),
14
+ track: cn("relative isolate overflow-hidden bg-white/20 rounded-[inherit]", "shadow-[0_0_0_1px_oklch(0_0_0/0.05)] select-none", "data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-0.75", "data-[orientation=vertical]:w-0.75 data-[orientation=vertical]:h-full"),
15
+ fill: {
16
+ base: "absolute rounded-[inherit] pointer-events-none",
17
+ fill: cn("bg-white", "data-[orientation=horizontal]:inset-y-0 data-[orientation=horizontal]:left-0", "data-[orientation=horizontal]:w-(--media-slider-fill,0)", "data-[orientation=vertical]:inset-x-0 data-[orientation=vertical]:bottom-0", "data-[orientation=vertical]:h-(--media-slider-fill,0)"),
18
+ buffer: cn("bg-white/20 duration-250 ease-out", "data-[orientation=horizontal]:inset-y-0 data-[orientation=horizontal]:left-0", "data-[orientation=horizontal]:transition-[width] data-[orientation=horizontal]:w-(--media-slider-buffer,0)", "data-[orientation=vertical]:inset-x-0 data-[orientation=vertical]:bottom-0", "data-[orientation=vertical]:transition-[height] data-[orientation=vertical]:h-(--media-slider-buffer)")
19
+ },
20
+ thumb: {
21
+ base: cn("z-10 absolute size-3 -translate-x-1/2 -translate-y-1/2", "bg-white rounded-full", "ring ring-black/10 shadow-sm shadow-black/15", "transition-[opacity,scale,outline-offset] duration-150 ease-out select-none", "outline-2 outline-transparent -outline-offset-2", "focus-visible:outline-white focus-visible:outline-offset-2", "data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:left-(--media-slider-fill,0)", "data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:top-[calc(100%-var(--media-slider-fill,0))]"),
22
+ interactive: cn("opacity-0 scale-70 origin-center", "group-hover/slider:opacity-100 group-hover/slider:scale-100", "group-focus-within/slider:opacity-100 group-focus-within/slider:scale-100")
23
+ }
24
+ };
25
+ const root = cn("block relative isolate overflow-clip @container/media-root", "rounded-(--media-border-radius,0.75rem) bg-black", "font-[Inter_Variable,Inter,ui-sans-serif,system-ui,sans-serif] text-[0.8125rem] leading-normal subpixel-antialiased", "**:box-border **:m-0", "[&_button]:font-[inherit]", "motion-safe:[interpolate-size:allow-keywords]", "after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10", "after:inset-0 after:ring-1 after:ring-inset after:ring-black/15", "dark:after:ring-white/15", "[&>video]:block [&>video]:w-full [&>video]:h-full [&>video]:rounded-[inherit]", "[&>img]:absolute [&>img]:inset-0 [&>img]:w-full [&>img]:h-full [&>img]:rounded-[inherit]", "[&>img]:object-cover [&>img]:pointer-events-none", "[&>img]:transition-opacity [&>img]:duration-250", "[&>img:not([data-visible])]:opacity-0", "[--media-caption-track-delay:600ms]", "[--media-caption-track-y:-0.5rem]", "has-[[data-controls][data-visible]]:[--media-caption-track-delay:25ms]", "has-[[data-controls][data-visible]]:[--media-caption-track-y:-3.5rem]", "[&_video::-webkit-media-text-track-container]:transition-transform", "[&_video::-webkit-media-text-track-container]:duration-150", "[&_video::-webkit-media-text-track-container]:ease-out", "[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)", "[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)", "[&_video::-webkit-media-text-track-container]:scale-98", "[&_video::-webkit-media-text-track-container]:z-1", "[&_video::-webkit-media-text-track-container]:font-[inherit]", "motion-reduce:[&_video::-webkit-media-text-track-container]:duration-50", "[&:fullscreen]:rounded-none");
26
+ const controls = cn("peer/controls", "absolute @container/media-controls bottom-0 inset-x-0", "pt-8 px-1.5 pb-1.5 flex items-center gap-2", "text-white z-10", "will-change-[translate,filter,opacity]", "transition-[translate,filter,opacity] ease-out", "delay-0 duration-75", "not-data-visible:opacity-0 not-data-visible:translate-y-full", "not-data-visible:blur-sm not-data-visible:pointer-events-none", "not-data-visible:delay-500 not-data-visible:duration-500", "motion-reduce:not-data-visible:duration-100", "motion-reduce:not-data-visible:translate-y-0", "motion-reduce:not-data-visible:blur-none motion-reduce:not-data-visible:scale-100", "@sm/media-root:pt-10 @sm/media-root:px-3 @sm/media-root:pb-3", "@sm/media-root:gap-3.5");
27
+ const overlay = cn("absolute inset-0 flex flex-col items-start", "pointer-events-none rounded-[inherit]", "opacity-0", "bg-linear-to-t from-black/70 via-black/50 via-[7.5rem] to-transparent", "backdrop-blur-none backdrop-saturate-120 backdrop-brightness-90", "transition-[opacity,backdrop-filter] ease-out", "duration-500 delay-500", "peer-data-visible/controls:opacity-100", "peer-data-visible/controls:duration-150", "peer-data-visible/controls:delay-0", "peer-data-visible/error:opacity-100", "peer-data-visible/error:duration-150", "peer-data-visible/error:delay-0", "peer-data-visible/error:backdrop-blur-sm", "motion-reduce:duration-100");
28
+ const bufferingIndicator = "absolute inset-0 hidden items-center justify-center pointer-events-none z-10 text-white data-visible:flex";
29
+ const error = {
30
+ root: "peer/error group/error absolute inset-0 z-20 items-center justify-center pointer-events-none hidden data-visible:flex",
31
+ dialog: cn("hidden flex-col gap-3 max-w-64 p-4 text-white text-sm pointer-events-auto", "group-data-visible/error:flex", "text-shadow-2xs text-shadow-black/50", "transition-[display,opacity,scale,transform] duration-500 delay-100 transition-discrete", "starting:opacity-0 starting:scale-50", "ease-[linear(0,0.034_1.5%,0.763_9.7%,1.066_13.9%,1.198_19.9%,1.184_21.8%,0.963_37.5%,0.997_50.9%,1)]"),
32
+ content: "flex flex-col gap-2 py-1.5",
33
+ title: "font-semibold leading-tight",
34
+ actions: "flex gap-2 *:flex-1"
35
+ };
36
+ const buttonGroup = cn("flex items-center gap-[0.075rem]", "@2xl/media-root:gap-0.5");
37
+ const time = {
38
+ group: "flex items-center gap-1",
39
+ current: cn("hidden tabular-nums text-shadow-2xs text-shadow-black/25", "@md/media-controls:inline"),
40
+ separator: cn("hidden", "@md/media-controls:inline @md/media-controls:text-white/50"),
41
+ duration: cn("tabular-nums text-shadow-2xs text-shadow-black/25", "@md/media-controls:text-white/50"),
42
+ controls: cn("flex flex-row-reverse items-center flex-1 gap-3", "@md/media-controls:flex-row")
43
+ };
44
+ const popup = {
45
+ base: cn("m-0 border-0 bg-transparent [--media-popover-side-offset:0.5rem]", "opacity-100 scale-100 origin-bottom blur-none", "transition-[transform,scale,opacity,filter] duration-200", "data-starting-style:opacity-0 data-starting-style:scale-0 data-starting-style:blur-sm", "data-ending-style:opacity-0 data-ending-style:scale-0 data-ending-style:blur-sm", "data-instant:duration-0"),
46
+ volume: "p-1"
47
+ };
48
+ const seek = {
49
+ button: "@max-md/media-controls:hidden",
50
+ label: "text-[0.75em] font-[480] tabular-nums",
51
+ labelForward: "absolute -right-px -bottom-0.75",
52
+ labelBackward: "absolute -left-px -bottom-0.75"
53
+ };
54
+ const iconState = {
55
+ play: {
56
+ button: "group",
57
+ restart: "hidden opacity-0 group-data-ended:block group-data-ended:opacity-100",
58
+ play: "hidden opacity-0 group-not-data-ended:group-data-paused:block group-not-data-ended:group-data-paused:opacity-100",
59
+ pause: "hidden opacity-0 group-not-data-paused:group-not-data-ended:block group-not-data-paused:group-not-data-ended:opacity-100"
60
+ },
61
+ mute: {
62
+ button: "group",
63
+ volumeOff: "hidden opacity-0 group-data-muted:block group-data-muted:opacity-100",
64
+ volumeLow: "hidden opacity-0 group-not-data-muted:group-data-[volume-level=low]:block group-not-data-muted:group-data-[volume-level=low]:opacity-100",
65
+ volumeHigh: "hidden opacity-0 group-not-data-muted:group-not-data-[volume-level=low]:block group-not-data-muted:group-not-data-[volume-level=low]:opacity-100"
66
+ },
67
+ fullscreen: {
68
+ button: "group",
69
+ enter: "hidden opacity-0 group-not-data-fullscreen:block group-not-data-fullscreen:opacity-100",
70
+ exit: "hidden opacity-0 group-data-fullscreen:block group-data-fullscreen:opacity-100"
71
+ },
72
+ captions: {
73
+ button: "group",
74
+ off: "hidden opacity-0 group-not-data-active:block group-not-data-active:opacity-100",
75
+ on: "hidden opacity-0 group-data-active:block group-data-active:opacity-100"
76
+ }
77
+ };
78
+ const captions = {
79
+ root: cn("absolute z-20 pointer-events-none text-balance text-base", "inset-x-4 bottom-6", "transition-transform duration-150 ease-out delay-600", "motion-reduce:duration-50", "@xs/media-root:text-2xl", "@3xl/media-root:text-3xl", "@7xl/media-root:text-4xl", "peer-data-visible/controls:-translate-y-10 peer-data-visible/controls:delay-25"),
80
+ container: "max-w-[42ch] mx-auto text-center flex flex-col items-center",
81
+ cue: cn("block py-0.5 px-2 text-white text-center whitespace-pre-wrap leading-1.2", "[text-shadow:0_0_1px_oklab(0_0_0_/_0.7),0_0_8px_oklab(0_0_0_/_0.7)]", "contrast-more:[text-shadow:none] contrast-more:[box-decoration-break:clone] contrast-more:bg-black/70", "*:inline")
82
+ };
83
+
84
+ //#endregion
85
+ export { bufferingIndicator, button, buttonGroup, controls, error, icon, iconContainer, iconFlipped, iconState, overlay, popup, root, seek, slider, time };
86
+ //# sourceMappingURL=minimal.tailwind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimal.tailwind.js","names":[],"sources":["../../../../../../../skins/dist/default/video/minimal.tailwind.js"],"sourcesContent":["import { cn } from \"@videojs/utils/style\";\n\n//#region src/video/minimal.tailwind.ts\nconst icon = cn(\"block [grid-area:1/1] size-4.5\", \"drop-shadow-[0_1px_0_var(--tw-drop-shadow-color)] drop-shadow-black/25\", \"transition-discrete transition-[display,opacity] duration-150 ease-out\");\nconst iconHidden = \"hidden opacity-0\";\nconst iconFlipped = \"[scale:-1_1]\";\nconst iconContainer = \"relative\";\nconst button = {\n\tbase: cn(\"items-center justify-center shrink-0 border-none cursor-pointer select-none text-center\", \"outline-2 outline-transparent -outline-offset-2\", \"font-medium\", \"transition-[background-color,color,outline-offset] duration-150 ease-out\", \"focus-visible:outline-white focus-visible:outline-offset-2\", \"disabled:cursor-not-allowed disabled:opacity-50 disabled:grayscale\"),\n\ticon: cn(\"grid w-[2.375rem] aspect-square bg-transparent rounded-md\", \"text-white\", \"hover:text-white/80 hover:no-underline\", \"focus-visible:text-white/80\", \"aria-expanded:text-white/80\"),\n\tdefault: cn(\"flex py-2 px-4 bg-white rounded-lg\", \"text-black\")\n};\nconst slider = {\n\troot: cn(\"group/slider relative flex flex-1 items-center justify-center rounded-full outline-none\", \"data-[orientation=horizontal]:min-w-20 data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-5\", \"data-[orientation=vertical]:w-5 data-[orientation=vertical]:h-[4.5rem]\"),\n\ttrack: cn(\"relative isolate overflow-hidden bg-white/20 rounded-[inherit]\", \"shadow-[0_0_0_1px_oklch(0_0_0/0.05)] select-none\", \"data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-0.75\", \"data-[orientation=vertical]:w-0.75 data-[orientation=vertical]:h-full\"),\n\tfill: {\n\t\tbase: \"absolute rounded-[inherit] pointer-events-none\",\n\t\tfill: cn(\"bg-white\", \"data-[orientation=horizontal]:inset-y-0 data-[orientation=horizontal]:left-0\", \"data-[orientation=horizontal]:w-(--media-slider-fill,0)\", \"data-[orientation=vertical]:inset-x-0 data-[orientation=vertical]:bottom-0\", \"data-[orientation=vertical]:h-(--media-slider-fill,0)\"),\n\t\tbuffer: cn(\"bg-white/20 duration-250 ease-out\", \"data-[orientation=horizontal]:inset-y-0 data-[orientation=horizontal]:left-0\", \"data-[orientation=horizontal]:transition-[width] data-[orientation=horizontal]:w-(--media-slider-buffer,0)\", \"data-[orientation=vertical]:inset-x-0 data-[orientation=vertical]:bottom-0\", \"data-[orientation=vertical]:transition-[height] data-[orientation=vertical]:h-(--media-slider-buffer)\")\n\t},\n\tthumb: {\n\t\tbase: cn(\"z-10 absolute size-3 -translate-x-1/2 -translate-y-1/2\", \"bg-white rounded-full\", \"ring ring-black/10 shadow-sm shadow-black/15\", \"transition-[opacity,scale,outline-offset] duration-150 ease-out select-none\", \"outline-2 outline-transparent -outline-offset-2\", \"focus-visible:outline-white focus-visible:outline-offset-2\", \"data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:left-(--media-slider-fill,0)\", \"data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:top-[calc(100%-var(--media-slider-fill,0))]\"),\n\t\tinteractive: cn(\"opacity-0 scale-70 origin-center\", \"group-hover/slider:opacity-100 group-hover/slider:scale-100\", \"group-focus-within/slider:opacity-100 group-focus-within/slider:scale-100\")\n\t}\n};\nconst root = cn(\"block relative isolate overflow-clip @container/media-root\", \"rounded-(--media-border-radius,0.75rem) bg-black\", \"font-[Inter_Variable,Inter,ui-sans-serif,system-ui,sans-serif] text-[0.8125rem] leading-normal subpixel-antialiased\", \"**:box-border **:m-0\", \"[&_button]:font-[inherit]\", \"motion-safe:[interpolate-size:allow-keywords]\", \"after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10\", \"after:inset-0 after:ring-1 after:ring-inset after:ring-black/15\", \"dark:after:ring-white/15\", \"[&>video]:block [&>video]:w-full [&>video]:h-full [&>video]:rounded-[inherit]\", \"[&>img]:absolute [&>img]:inset-0 [&>img]:w-full [&>img]:h-full [&>img]:rounded-[inherit]\", \"[&>img]:object-cover [&>img]:pointer-events-none\", \"[&>img]:transition-opacity [&>img]:duration-250\", \"[&>img:not([data-visible])]:opacity-0\", \"[--media-caption-track-delay:600ms]\", \"[--media-caption-track-y:-0.5rem]\", \"has-[[data-controls][data-visible]]:[--media-caption-track-delay:25ms]\", \"has-[[data-controls][data-visible]]:[--media-caption-track-y:-3.5rem]\", \"[&_video::-webkit-media-text-track-container]:transition-transform\", \"[&_video::-webkit-media-text-track-container]:duration-150\", \"[&_video::-webkit-media-text-track-container]:ease-out\", \"[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)\", \"[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)\", \"[&_video::-webkit-media-text-track-container]:scale-98\", \"[&_video::-webkit-media-text-track-container]:z-1\", \"[&_video::-webkit-media-text-track-container]:font-[inherit]\", \"motion-reduce:[&_video::-webkit-media-text-track-container]:duration-50\", \"[&:fullscreen]:rounded-none\");\nconst controls = cn(\"peer/controls\", \"absolute @container/media-controls bottom-0 inset-x-0\", \"pt-8 px-1.5 pb-1.5 flex items-center gap-2\", \"text-white z-10\", \"will-change-[translate,filter,opacity]\", \"transition-[translate,filter,opacity] ease-out\", \"delay-0 duration-75\", \"not-data-visible:opacity-0 not-data-visible:translate-y-full\", \"not-data-visible:blur-sm not-data-visible:pointer-events-none\", \"not-data-visible:delay-500 not-data-visible:duration-500\", \"motion-reduce:not-data-visible:duration-100\", \"motion-reduce:not-data-visible:translate-y-0\", \"motion-reduce:not-data-visible:blur-none motion-reduce:not-data-visible:scale-100\", \"@sm/media-root:pt-10 @sm/media-root:px-3 @sm/media-root:pb-3\", \"@sm/media-root:gap-3.5\");\nconst overlay = cn(\"absolute inset-0 flex flex-col items-start\", \"pointer-events-none rounded-[inherit]\", \"opacity-0\", \"bg-linear-to-t from-black/70 via-black/50 via-[7.5rem] to-transparent\", \"backdrop-blur-none backdrop-saturate-120 backdrop-brightness-90\", \"transition-[opacity,backdrop-filter] ease-out\", \"duration-500 delay-500\", \"peer-data-visible/controls:opacity-100\", \"peer-data-visible/controls:duration-150\", \"peer-data-visible/controls:delay-0\", \"peer-data-visible/error:opacity-100\", \"peer-data-visible/error:duration-150\", \"peer-data-visible/error:delay-0\", \"peer-data-visible/error:backdrop-blur-sm\", \"motion-reduce:duration-100\");\nconst bufferingIndicator = \"absolute inset-0 hidden items-center justify-center pointer-events-none z-10 text-white data-visible:flex\";\nconst error = {\n\troot: \"peer/error group/error absolute inset-0 z-20 items-center justify-center pointer-events-none hidden data-visible:flex\",\n\tdialog: cn(\"hidden flex-col gap-3 max-w-64 p-4 text-white text-sm pointer-events-auto\", \"group-data-visible/error:flex\", \"text-shadow-2xs text-shadow-black/50\", \"transition-[display,opacity,scale,transform] duration-500 delay-100 transition-discrete\", \"starting:opacity-0 starting:scale-50\", \"ease-[linear(0,0.034_1.5%,0.763_9.7%,1.066_13.9%,1.198_19.9%,1.184_21.8%,0.963_37.5%,0.997_50.9%,1)]\"),\n\tcontent: \"flex flex-col gap-2 py-1.5\",\n\ttitle: \"font-semibold leading-tight\",\n\tactions: \"flex gap-2 *:flex-1\"\n};\nconst buttonGroup = cn(\"flex items-center gap-[0.075rem]\", \"@2xl/media-root:gap-0.5\");\nconst time = {\n\tgroup: \"flex items-center gap-1\",\n\tcurrent: cn(\"hidden tabular-nums text-shadow-2xs text-shadow-black/25\", \"@md/media-controls:inline\"),\n\tseparator: cn(\"hidden\", \"@md/media-controls:inline @md/media-controls:text-white/50\"),\n\tduration: cn(\"tabular-nums text-shadow-2xs text-shadow-black/25\", \"@md/media-controls:text-white/50\"),\n\tcontrols: cn(\"flex flex-row-reverse items-center flex-1 gap-3\", \"@md/media-controls:flex-row\")\n};\nconst popup = {\n\tbase: cn(\"m-0 border-0 bg-transparent [--media-popover-side-offset:0.5rem]\", \"opacity-100 scale-100 origin-bottom blur-none\", \"transition-[transform,scale,opacity,filter] duration-200\", \"data-starting-style:opacity-0 data-starting-style:scale-0 data-starting-style:blur-sm\", \"data-ending-style:opacity-0 data-ending-style:scale-0 data-ending-style:blur-sm\", \"data-instant:duration-0\"),\n\tvolume: \"p-1\"\n};\nconst seek = {\n\tbutton: \"@max-md/media-controls:hidden\",\n\tlabel: \"text-[0.75em] font-[480] tabular-nums\",\n\tlabelForward: \"absolute -right-px -bottom-0.75\",\n\tlabelBackward: \"absolute -left-px -bottom-0.75\"\n};\nconst iconState = {\n\tplay: {\n\t\tbutton: \"group\",\n\t\trestart: \"hidden opacity-0 group-data-ended:block group-data-ended:opacity-100\",\n\t\tplay: \"hidden opacity-0 group-not-data-ended:group-data-paused:block group-not-data-ended:group-data-paused:opacity-100\",\n\t\tpause: \"hidden opacity-0 group-not-data-paused:group-not-data-ended:block group-not-data-paused:group-not-data-ended:opacity-100\"\n\t},\n\tmute: {\n\t\tbutton: \"group\",\n\t\tvolumeOff: \"hidden opacity-0 group-data-muted:block group-data-muted:opacity-100\",\n\t\tvolumeLow: \"hidden opacity-0 group-not-data-muted:group-data-[volume-level=low]:block group-not-data-muted:group-data-[volume-level=low]:opacity-100\",\n\t\tvolumeHigh: \"hidden opacity-0 group-not-data-muted:group-not-data-[volume-level=low]:block group-not-data-muted:group-not-data-[volume-level=low]:opacity-100\"\n\t},\n\tfullscreen: {\n\t\tbutton: \"group\",\n\t\tenter: \"hidden opacity-0 group-not-data-fullscreen:block group-not-data-fullscreen:opacity-100\",\n\t\texit: \"hidden opacity-0 group-data-fullscreen:block group-data-fullscreen:opacity-100\"\n\t},\n\tcaptions: {\n\t\tbutton: \"group\",\n\t\toff: \"hidden opacity-0 group-not-data-active:block group-not-data-active:opacity-100\",\n\t\ton: \"hidden opacity-0 group-data-active:block group-data-active:opacity-100\"\n\t}\n};\nconst captions = {\n\troot: cn(\"absolute z-20 pointer-events-none text-balance text-base\", \"inset-x-4 bottom-6\", \"transition-transform duration-150 ease-out delay-600\", \"motion-reduce:duration-50\", \"@xs/media-root:text-2xl\", \"@3xl/media-root:text-3xl\", \"@7xl/media-root:text-4xl\", \"peer-data-visible/controls:-translate-y-10 peer-data-visible/controls:delay-25\"),\n\tcontainer: \"max-w-[42ch] mx-auto text-center flex flex-col items-center\",\n\tcue: cn(\"block py-0.5 px-2 text-white text-center whitespace-pre-wrap leading-1.2\", \"[text-shadow:0_0_1px_oklab(0_0_0_/_0.7),0_0_8px_oklab(0_0_0_/_0.7)]\", \"contrast-more:[text-shadow:none] contrast-more:[box-decoration-break:clone] contrast-more:bg-black/70\", \"*:inline\")\n};\n\n//#endregion\nexport { bufferingIndicator, button, buttonGroup, captions, controls, error, icon, iconContainer, iconFlipped, iconHidden, iconState, overlay, popup, root, seek, slider, time };\n//# sourceMappingURL=minimal.tailwind.js.map"],"mappings":";;;AAGA,MAAM,OAAO,GAAG,kCAAkC,0EAA0E,yEAAyE;AAErM,MAAM,cAAc;AACpB,MAAM,gBAAgB;AACtB,MAAM,SAAS;CACd,MAAM,GAAG,2FAA2F,mDAAmD,eAAe,4EAA4E,8DAA8D,qEAAqE;CACrX,MAAM,GAAG,6DAA6D,cAAc,0CAA0C,+BAA+B,8BAA8B;CAC3L,SAAS,GAAG,sCAAsC,aAAa;CAC/D;AACD,MAAM,SAAS;CACd,MAAM,GAAG,2FAA2F,iHAAiH,yEAAyE;CAC9R,OAAO,GAAG,kEAAkE,oDAAoD,6EAA6E,wEAAwE;CACrR,MAAM;EACL,MAAM;EACN,MAAM,GAAG,YAAY,gFAAgF,2DAA2D,8EAA8E,wDAAwD;EACtS,QAAQ,GAAG,qCAAqC,gFAAgF,8GAA8G,8EAA8E,wGAAwG;EACpa;CACD,OAAO;EACN,MAAM,GAAG,0DAA0D,yBAAyB,gDAAgD,+EAA+E,mDAAmD,8DAA8D,oGAAoG,+GAA+G;EAC/hB,aAAa,GAAG,oCAAoC,+DAA+D,4EAA4E;EAC/L;CACD;AACD,MAAM,OAAO,GAAG,8DAA8D,oDAAoD,uHAAuH,wBAAwB,6BAA6B,iDAAiD,+EAA+E,mEAAmE,4BAA4B,iFAAiF,4FAA4F,oDAAoD,mDAAmD,yCAAyC,uCAAuC,qCAAqC,0EAA0E,yEAAyE,sEAAsE,8DAA8D,0DAA0D,qFAAqF,uFAAuF,0DAA0D,qDAAqD,gEAAgE,2EAA2E,8BAA8B;AAC3qD,MAAM,WAAW,GAAG,iBAAiB,yDAAyD,8CAA8C,mBAAmB,0CAA0C,kDAAkD,uBAAuB,gEAAgE,iEAAiE,4DAA4D,+CAA+C,gDAAgD,qFAAqF,gEAAgE,yBAAyB;AAC5tB,MAAM,UAAU,GAAG,8CAA8C,yCAAyC,aAAa,yEAAyE,mEAAmE,iDAAiD,0BAA0B,0CAA0C,2CAA2C,sCAAsC,uCAAuC,wCAAwC,mCAAmC,4CAA4C,6BAA6B;AACpoB,MAAM,qBAAqB;AAC3B,MAAM,QAAQ;CACb,MAAM;CACN,QAAQ,GAAG,6EAA6E,iCAAiC,wCAAwC,2FAA2F,wCAAwC,uGAAuG;CAC3Y,SAAS;CACT,OAAO;CACP,SAAS;CACT;AACD,MAAM,cAAc,GAAG,oCAAoC,0BAA0B;AACrF,MAAM,OAAO;CACZ,OAAO;CACP,SAAS,GAAG,4DAA4D,4BAA4B;CACpG,WAAW,GAAG,UAAU,6DAA6D;CACrF,UAAU,GAAG,qDAAqD,mCAAmC;CACrG,UAAU,GAAG,mDAAmD,8BAA8B;CAC9F;AACD,MAAM,QAAQ;CACb,MAAM,GAAG,oEAAoE,iDAAiD,4DAA4D,yFAAyF,mFAAmF,0BAA0B;CAChY,QAAQ;CACR;AACD,MAAM,OAAO;CACZ,QAAQ;CACR,OAAO;CACP,cAAc;CACd,eAAe;CACf;AACD,MAAM,YAAY;CACjB,MAAM;EACL,QAAQ;EACR,SAAS;EACT,MAAM;EACN,OAAO;EACP;CACD,MAAM;EACL,QAAQ;EACR,WAAW;EACX,WAAW;EACX,YAAY;EACZ;CACD,YAAY;EACX,QAAQ;EACR,OAAO;EACP,MAAM;EACN;CACD,UAAU;EACT,QAAQ;EACR,KAAK;EACL,IAAI;EACJ;CACD;AACD,MAAM,WAAW;CAChB,MAAM,GAAG,4DAA4D,sBAAsB,wDAAwD,6BAA6B,2BAA2B,4BAA4B,4BAA4B,iFAAiF;CACpV,WAAW;CACX,KAAK,GAAG,4EAA4E,uEAAuE,yGAAyG,WAAW;CAC/Q"}
@@ -12,13 +12,20 @@ function createContainerMixin(context) {
12
12
  class PlayerContainerElement extends BaseClass {
13
13
  #detach = noop;
14
14
  #observer = null;
15
- #consumer = new ContextConsumer(this, {
16
- context,
17
- callback: () => this.#attachMedia(),
18
- subscribe: true
19
- });
15
+ #contextStore = null;
16
+ constructor(...args) {
17
+ super(...args);
18
+ new ContextConsumer(this, {
19
+ context,
20
+ callback: (value) => {
21
+ this.#contextStore = value ?? null;
22
+ this.#attachMedia();
23
+ },
24
+ subscribe: true
25
+ });
26
+ }
20
27
  get store() {
21
- return this.#consumer.value ?? null;
28
+ return this.#contextStore;
22
29
  }
23
30
  connectedCallback() {
24
31
  super.connectedCallback();
@@ -38,7 +45,7 @@ function createContainerMixin(context) {
38
45
  this.#detach();
39
46
  }
40
47
  #attachMedia() {
41
- const store = this.#consumer.value ?? this.store;
48
+ const store = this.#contextStore ?? this.store;
42
49
  if (!store) return;
43
50
  const media = this.querySelector("video, audio");
44
51
  if (!media) {
@@ -1 +1 @@
1
- {"version":3,"file":"container-mixin.js","names":["#attachMedia","#consumer","#observer","#detach"],"sources":["../../../src/store/container-mixin.ts"],"sourcesContent":["import type { MediaContainer, PlayerStore, PlayerTarget } from '@videojs/core/dom';\nimport { ContextConsumer } from '@videojs/element/context';\nimport { noop } from '@videojs/utils/function';\nimport type { MediaElementConstructor } from '@/ui/media-element';\nimport type { PlayerContext } from '../player/context';\nimport type { PlayerConsumer, PlayerConsumerConstructor } from './types';\n\nexport type ContainerMixin<Store extends PlayerStore> = <Class extends MediaElementConstructor>(\n BaseClass: Class\n) => Class & PlayerConsumerConstructor<Store>;\n\n/**\n * Create a mixin that consumes player context and auto-attaches media elements.\n *\n * @param context - Player context to consume from an ancestor provider.\n */\nexport function createContainerMixin<Store extends PlayerStore>(context: PlayerContext<Store>): ContainerMixin<Store> {\n return <Class extends MediaElementConstructor>(BaseClass: Class) => {\n class PlayerContainerElement extends BaseClass implements PlayerConsumer<Store>, MediaContainer {\n #detach = noop;\n #observer: MutationObserver | null = null;\n\n #consumer = new ContextConsumer(this, {\n context,\n callback: () => this.#attachMedia(),\n subscribe: true,\n });\n\n get store(): Store | null {\n return this.#consumer.value ?? null;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n\n this.#observer = new MutationObserver((records) => {\n if (records.some(hasMediaNode)) this.#attachMedia();\n });\n\n this.#observer.observe(this, { childList: true, subtree: true });\n\n this.#attachMedia();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.#observer?.disconnect();\n this.#observer = null;\n this.#detach();\n }\n\n #attachMedia() {\n // Store will be overridden and set by provider mixin if consumer is empty.\n const store = this.#consumer.value ?? this.store;\n if (!store) return;\n\n const media = this.querySelector<HTMLMediaElement>('video, audio');\n\n if (!media) {\n this.#detach();\n this.#detach = noop;\n return;\n }\n\n const target: PlayerTarget = {\n media,\n container: this,\n };\n\n const hasMediaChanged = store.target?.media !== target.media,\n hasContainerChanged = store.target?.container !== target.container;\n\n if (hasMediaChanged || hasContainerChanged) {\n this.#detach();\n this.#detach = store.attach(target);\n }\n }\n }\n\n return PlayerContainerElement;\n };\n}\n\nfunction isMediaNode(node: Node): boolean {\n return node instanceof HTMLMediaElement;\n}\n\nfunction hasMediaNode(record: MutationRecord): boolean {\n for (const node of record.addedNodes) {\n if (isMediaNode(node)) return true;\n }\n\n for (const node of record.removedNodes) {\n if (isMediaNode(node)) return true;\n }\n\n return false;\n}\n"],"mappings":";;;;;;;;;AAgBA,SAAgB,qBAAgD,SAAsD;AACpH,SAA+C,cAAqB;EAClE,MAAM,+BAA+B,UAA2D;GAC9F,UAAU;GACV,YAAqC;GAErC,YAAY,IAAI,gBAAgB,MAAM;IACpC;IACA,gBAAgB,MAAKA,aAAc;IACnC,WAAW;IACZ,CAAC;GAEF,IAAI,QAAsB;AACxB,WAAO,MAAKC,SAAU,SAAS;;GAGjC,AAAS,oBAAoB;AAC3B,UAAM,mBAAmB;AAEzB,UAAKC,WAAY,IAAI,kBAAkB,YAAY;AACjD,SAAI,QAAQ,KAAK,aAAa,CAAE,OAAKF,aAAc;MACnD;AAEF,UAAKE,SAAU,QAAQ,MAAM;KAAE,WAAW;KAAM,SAAS;KAAM,CAAC;AAEhE,UAAKF,aAAc;;GAGrB,AAAS,uBAAuB;AAC9B,UAAM,sBAAsB;AAC5B,UAAKE,UAAW,YAAY;AAC5B,UAAKA,WAAY;AACjB,UAAKC,QAAS;;GAGhB,eAAe;IAEb,MAAM,QAAQ,MAAKF,SAAU,SAAS,KAAK;AAC3C,QAAI,CAAC,MAAO;IAEZ,MAAM,QAAQ,KAAK,cAAgC,eAAe;AAElE,QAAI,CAAC,OAAO;AACV,WAAKE,QAAS;AACd,WAAKA,SAAU;AACf;;IAGF,MAAM,SAAuB;KAC3B;KACA,WAAW;KACZ;IAED,MAAM,kBAAkB,MAAM,QAAQ,UAAU,OAAO,OACrD,sBAAsB,MAAM,QAAQ,cAAc,OAAO;AAE3D,QAAI,mBAAmB,qBAAqB;AAC1C,WAAKA,QAAS;AACd,WAAKA,SAAU,MAAM,OAAO,OAAO;;;;AAKzC,SAAO;;;AAIX,SAAS,YAAY,MAAqB;AACxC,QAAO,gBAAgB;;AAGzB,SAAS,aAAa,QAAiC;AACrD,MAAK,MAAM,QAAQ,OAAO,WACxB,KAAI,YAAY,KAAK,CAAE,QAAO;AAGhC,MAAK,MAAM,QAAQ,OAAO,aACxB,KAAI,YAAY,KAAK,CAAE,QAAO;AAGhC,QAAO"}
1
+ {"version":3,"file":"container-mixin.js","names":["#contextStore","#attachMedia","#observer","#detach"],"sources":["../../../src/store/container-mixin.ts"],"sourcesContent":["import type { MediaContainer, PlayerStore, PlayerTarget } from '@videojs/core/dom';\nimport { ContextConsumer } from '@videojs/element/context';\nimport { noop } from '@videojs/utils/function';\nimport type { MediaElementConstructor } from '@/ui/media-element';\nimport type { PlayerContext } from '../player/context';\nimport type { PlayerConsumer, PlayerConsumerConstructor } from './types';\n\nexport type ContainerMixin<Store extends PlayerStore> = <Class extends MediaElementConstructor>(\n BaseClass: Class\n) => Class & PlayerConsumerConstructor<Store>;\n\n/**\n * Create a mixin that consumes player context and auto-attaches media elements.\n *\n * @param context - Player context to consume from an ancestor provider.\n */\nexport function createContainerMixin<Store extends PlayerStore>(context: PlayerContext<Store>): ContainerMixin<Store> {\n return <Class extends MediaElementConstructor>(BaseClass: Class) => {\n class PlayerContainerElement extends BaseClass implements PlayerConsumer<Store>, MediaContainer {\n #detach = noop;\n #observer: MutationObserver | null = null;\n #contextStore: Store | null = null;\n\n constructor(...args: any[]) {\n super(...args);\n\n // Created in the constructor body (after all field initializers) so\n // that #contextStore's private slot exists if the callback fires\n // synchronously — which happens when the element is already connected.\n // The host's controller list keeps the consumer alive; no field needed.\n new ContextConsumer(this, {\n context,\n callback: (value) => {\n this.#contextStore = value ?? null;\n this.#attachMedia();\n },\n subscribe: true,\n });\n }\n\n get store(): Store | null {\n return this.#contextStore;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n\n this.#observer = new MutationObserver((records) => {\n if (records.some(hasMediaNode)) this.#attachMedia();\n });\n\n this.#observer.observe(this, { childList: true, subtree: true });\n\n this.#attachMedia();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.#observer?.disconnect();\n this.#observer = null;\n this.#detach();\n }\n\n #attachMedia() {\n // Prefer the cached context value; fall back to `this.store` which\n // ProviderMixin overrides when both mixins are applied to one element.\n const store = this.#contextStore ?? this.store;\n if (!store) return;\n\n const media = this.querySelector<HTMLMediaElement>('video, audio');\n\n if (!media) {\n this.#detach();\n this.#detach = noop;\n return;\n }\n\n const target: PlayerTarget = {\n media,\n container: this,\n };\n\n const hasMediaChanged = store.target?.media !== target.media,\n hasContainerChanged = store.target?.container !== target.container;\n\n if (hasMediaChanged || hasContainerChanged) {\n this.#detach();\n this.#detach = store.attach(target);\n }\n }\n }\n\n return PlayerContainerElement;\n };\n}\n\nfunction isMediaNode(node: Node): boolean {\n return node instanceof HTMLMediaElement;\n}\n\nfunction hasMediaNode(record: MutationRecord): boolean {\n for (const node of record.addedNodes) {\n if (isMediaNode(node)) return true;\n }\n\n for (const node of record.removedNodes) {\n if (isMediaNode(node)) return true;\n }\n\n return false;\n}\n"],"mappings":";;;;;;;;;AAgBA,SAAgB,qBAAgD,SAAsD;AACpH,SAA+C,cAAqB;EAClE,MAAM,+BAA+B,UAA2D;GAC9F,UAAU;GACV,YAAqC;GACrC,gBAA8B;GAE9B,YAAY,GAAG,MAAa;AAC1B,UAAM,GAAG,KAAK;AAMd,QAAI,gBAAgB,MAAM;KACxB;KACA,WAAW,UAAU;AACnB,YAAKA,eAAgB,SAAS;AAC9B,YAAKC,aAAc;;KAErB,WAAW;KACZ,CAAC;;GAGJ,IAAI,QAAsB;AACxB,WAAO,MAAKD;;GAGd,AAAS,oBAAoB;AAC3B,UAAM,mBAAmB;AAEzB,UAAKE,WAAY,IAAI,kBAAkB,YAAY;AACjD,SAAI,QAAQ,KAAK,aAAa,CAAE,OAAKD,aAAc;MACnD;AAEF,UAAKC,SAAU,QAAQ,MAAM;KAAE,WAAW;KAAM,SAAS;KAAM,CAAC;AAEhE,UAAKD,aAAc;;GAGrB,AAAS,uBAAuB;AAC9B,UAAM,sBAAsB;AAC5B,UAAKC,UAAW,YAAY;AAC5B,UAAKA,WAAY;AACjB,UAAKC,QAAS;;GAGhB,eAAe;IAGb,MAAM,QAAQ,MAAKH,gBAAiB,KAAK;AACzC,QAAI,CAAC,MAAO;IAEZ,MAAM,QAAQ,KAAK,cAAgC,eAAe;AAElE,QAAI,CAAC,OAAO;AACV,WAAKG,QAAS;AACd,WAAKA,SAAU;AACf;;IAGF,MAAM,SAAuB;KAC3B;KACA,WAAW;KACZ;IAED,MAAM,kBAAkB,MAAM,QAAQ,UAAU,OAAO,OACrD,sBAAsB,MAAM,QAAQ,cAAc,OAAO;AAE3D,QAAI,mBAAmB,qBAAqB;AAC1C,WAAKA,QAAS;AACd,WAAKA,SAAU,MAAM,OAAO,OAAO;;;;AAKzC,SAAO;;;AAIX,SAAS,YAAY,MAAqB;AACxC,QAAO,gBAAgB;;AAGzB,SAAS,aAAa,QAAiC;AACrD,MAAK,MAAM,QAAQ,OAAO,WACxB,KAAI,YAAY,KAAK,CAAE,QAAO;AAGhC,MAAK,MAAM,QAAQ,OAAO,aACxB,KAAI,YAAY,KAAK,CAAE,QAAO;AAGhC,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"buffering-indicator-element.js","names":["#core","#state","#disconnect"],"sources":["../../../../src/ui/buffering-indicator/buffering-indicator-element.ts"],"sourcesContent":["import { BufferingIndicatorCore, BufferingIndicatorDataAttrs } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectPlayback } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class BufferingIndicatorElement extends MediaElement {\n static readonly tagName = 'media-buffering-indicator';\n\n static override properties = {\n delay: { type: Number },\n } satisfies PropertyDeclarationMap<keyof BufferingIndicatorCore.Props>;\n\n delay = BufferingIndicatorCore.defaultProps.delay;\n\n readonly #core = new BufferingIndicatorCore();\n readonly #state = new PlayerController(this, playerContext, selectPlayback);\n\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.#disconnect = new AbortController();\n\n this.#core.state.subscribe(() => this.requestUpdate(), {\n signal: this.#disconnect.signal,\n });\n\n if (__DEV__ && !this.#state.value) {\n logMissingFeature(BufferingIndicatorElement.tagName, 'playback');\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.#state.value;\n\n if (!media) return;\n\n this.#core.update(media);\n applyStateDataAttrs(this, this.#core.state.current, BufferingIndicatorDataAttrs);\n }\n}\n"],"mappings":";;;;;;;AAQA,IAAa,4BAAb,cAA+C,aAAa;;;eAOlD,uBAAuB,aAAa;;;iBANlB;;;oBAEG,EAC3B,OAAO,EAAE,MAAM,QAAQ,EACxB;;CAID,CAASA,OAAQ,IAAI,wBAAwB;CAC7C,CAASC,QAAS,IAAI,iBAAiB,MAAM,eAAe,eAAe;CAE3E,cAAsC;CAEtC,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;AAEzB,QAAKC,aAAc,IAAI,iBAAiB;AAExC,QAAKF,KAAM,MAAM,gBAAgB,KAAK,eAAe,EAAE,EACrD,QAAQ,MAAKE,WAAY,QAC1B,CAAC;;CAOJ,AAAS,uBAA6B;AACpC,QAAM,sBAAsB;AAC5B,QAAKA,YAAa,OAAO;AACzB,QAAKA,aAAc;;CAGrB,AAAmB,WAAW,SAA+B;AAC3D,QAAM,WAAW,QAAQ;AACzB,QAAKF,KAAM,SAAS,KAAK;;CAG3B,AAAmB,OAAO,SAA+B;AACvD,QAAM,OAAO,QAAQ;EAErB,MAAM,QAAQ,MAAKC,MAAO;AAE1B,MAAI,CAAC,MAAO;AAEZ,QAAKD,KAAM,OAAO,MAAM;AACxB,sBAAoB,MAAM,MAAKA,KAAM,MAAM,SAAS,4BAA4B"}
1
+ {"version":3,"file":"buffering-indicator-element.js","names":["#core","#state","#disconnect"],"sources":["../../../../src/ui/buffering-indicator/buffering-indicator-element.ts"],"sourcesContent":["import { BufferingIndicatorCore, BufferingIndicatorDataAttrs } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectPlayback } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class BufferingIndicatorElement extends MediaElement {\n static readonly tagName = 'media-buffering-indicator';\n\n static override properties = {\n delay: { type: Number },\n } satisfies PropertyDeclarationMap<keyof BufferingIndicatorCore.Props>;\n\n delay = BufferingIndicatorCore.defaultProps.delay;\n\n readonly #core = new BufferingIndicatorCore();\n readonly #state = new PlayerController(this, playerContext, selectPlayback);\n\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.#disconnect = new AbortController();\n\n this.#core.state.subscribe(() => this.requestUpdate(), {\n signal: this.#disconnect.signal,\n });\n\n if (__DEV__ && !this.#state.value) {\n logMissingFeature(this.localName, this.#state.displayName!);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.#state.value;\n\n if (!media) return;\n\n this.#core.update(media);\n applyStateDataAttrs(this, this.#core.state.current, BufferingIndicatorDataAttrs);\n }\n}\n"],"mappings":";;;;;;;AAQA,IAAa,4BAAb,cAA+C,aAAa;;;eAOlD,uBAAuB,aAAa;;;iBANlB;;;oBAEG,EAC3B,OAAO,EAAE,MAAM,QAAQ,EACxB;;CAID,CAASA,OAAQ,IAAI,wBAAwB;CAC7C,CAASC,QAAS,IAAI,iBAAiB,MAAM,eAAe,eAAe;CAE3E,cAAsC;CAEtC,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;AAEzB,QAAKC,aAAc,IAAI,iBAAiB;AAExC,QAAKF,KAAM,MAAM,gBAAgB,KAAK,eAAe,EAAE,EACrD,QAAQ,MAAKE,WAAY,QAC1B,CAAC;;CAOJ,AAAS,uBAA6B;AACpC,QAAM,sBAAsB;AAC5B,QAAKA,YAAa,OAAO;AACzB,QAAKA,aAAc;;CAGrB,AAAmB,WAAW,SAA+B;AAC3D,QAAM,WAAW,QAAQ;AACzB,QAAKF,KAAM,SAAS,KAAK;;CAG3B,AAAmB,OAAO,SAA+B;AACvD,QAAM,OAAO,QAAQ;EAErB,MAAM,QAAQ,MAAKC,MAAO;AAE1B,MAAI,CAAC,MAAO;AAEZ,QAAKD,KAAM,OAAO,MAAM;AACxB,sBAAoB,MAAM,MAAKA,KAAM,MAAM,SAAS,4BAA4B"}
@@ -0,0 +1,28 @@
1
+ import { MediaElement } from "./media-element.js";
2
+ import { applyStateDataAttrs } from "@videojs/core/dom";
3
+
4
+ //#region src/ui/context-part-element.ts
5
+ /**
6
+ * Abstract base for compound-component part elements that consume a parent
7
+ * context and apply data attributes from `ctx.state` + `ctx.stateAttrMap`.
8
+ *
9
+ * Subclasses only need to declare the `consumer` property:
10
+ *
11
+ * ```ts
12
+ * export class SliderTrackElement extends ContextPartElement<SliderState> {
13
+ * static readonly tagName = 'media-slider-track';
14
+ * protected readonly consumer = new ContextConsumer(this, { context: sliderContext, subscribe: true });
15
+ * }
16
+ * ```
17
+ */
18
+ var ContextPartElement = class extends MediaElement {
19
+ update(_changed) {
20
+ super.update(_changed);
21
+ const ctx = this.consumer.value;
22
+ if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);
23
+ }
24
+ };
25
+
26
+ //#endregion
27
+ export { ContextPartElement };
28
+ //# sourceMappingURL=context-part-element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-part-element.js","names":[],"sources":["../../../src/ui/context-part-element.ts"],"sourcesContent":["import type { StateAttrMap } from '@videojs/core';\nimport { applyStateDataAttrs } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\n\nimport { MediaElement } from './media-element';\n\n/** Shape that compound context values must satisfy for parts to consume. */\nexport interface PartContextValue<State extends object> {\n state: State;\n stateAttrMap: StateAttrMap<State>;\n}\n\n/**\n * Abstract base for compound-component part elements that consume a parent\n * context and apply data attributes from `ctx.state` + `ctx.stateAttrMap`.\n *\n * Subclasses only need to declare the `consumer` property:\n *\n * ```ts\n * export class SliderTrackElement extends ContextPartElement<SliderState> {\n * static readonly tagName = 'media-slider-track';\n * protected readonly consumer = new ContextConsumer(this, { context: sliderContext, subscribe: true });\n * }\n * ```\n */\nexport abstract class ContextPartElement<State extends object> extends MediaElement {\n protected abstract readonly consumer: { value?: PartContextValue<State> | undefined };\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n const ctx = this.consumer.value;\n if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAyBA,IAAsB,qBAAtB,cAAuE,aAAa;CAGlF,AAAmB,OAAO,UAAgC;AACxD,QAAM,OAAO,SAAS;EACtB,MAAM,MAAM,KAAK,SAAS;AAC1B,MAAI,IAAK,qBAAoB,MAAM,IAAI,OAAO,IAAI,aAAa"}
@@ -0,0 +1,9 @@
1
+ import { createContext } from "@videojs/element/context";
2
+
3
+ //#region src/ui/controls/context.ts
4
+ const CONTROLS_CONTEXT_KEY = Symbol("@videojs/controls");
5
+ const controlsContext = createContext(CONTROLS_CONTEXT_KEY);
6
+
7
+ //#endregion
8
+ export { controlsContext };
9
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../../src/ui/controls/context.ts"],"sourcesContent":["import type { ControlsState, StateAttrMap } from '@videojs/core';\nimport { createContext } from '@videojs/element/context';\n\nexport interface ControlsContextValue {\n state: ControlsState;\n stateAttrMap: StateAttrMap<ControlsState>;\n}\n\nconst CONTROLS_CONTEXT_KEY = Symbol('@videojs/controls');\n\nexport const controlsContext = createContext<ControlsContextValue>(CONTROLS_CONTEXT_KEY);\n"],"mappings":";;;AAQA,MAAM,uBAAuB,OAAO,oBAAoB;AAExD,MAAa,kBAAkB,cAAoC,qBAAqB"}
@@ -1,7 +1,9 @@
1
1
  import { playerContext } from "../../player/context.js";
2
2
  import { MediaElement } from "../media-element.js";
3
3
  import { PlayerController } from "../../player/player-controller.js";
4
+ import { controlsContext } from "./context.js";
4
5
  import { applyStateDataAttrs, selectControls } from "@videojs/core/dom";
6
+ import { ContextProvider } from "@videojs/element/context";
5
7
  import { ControlsCore, ControlsDataAttrs } from "@videojs/core";
6
8
 
7
9
  //#region src/ui/controls/controls-element.ts
@@ -10,15 +12,22 @@ var ControlsElement = class extends MediaElement {
10
12
  this.tagName = "media-controls";
11
13
  }
12
14
  #core = new ControlsCore();
13
- #state = new PlayerController(this, playerContext, selectControls);
15
+ #mediaState = new PlayerController(this, playerContext, selectControls);
16
+ #provider = new ContextProvider(this, { context: controlsContext });
14
17
  connectedCallback() {
15
18
  super.connectedCallback();
16
19
  }
17
- update(changed) {
18
- super.update(changed);
19
- const controls = this.#state.value;
20
- if (!controls) return;
21
- applyStateDataAttrs(this, this.#core.getState(controls), ControlsDataAttrs);
20
+ update(_changed) {
21
+ super.update(_changed);
22
+ const media = this.#mediaState.value;
23
+ if (!media) return;
24
+ this.#core.setMedia(media);
25
+ const state = this.#core.getState();
26
+ applyStateDataAttrs(this, state, ControlsDataAttrs);
27
+ this.#provider.setValue({
28
+ state,
29
+ stateAttrMap: ControlsDataAttrs
30
+ });
22
31
  }
23
32
  };
24
33
 
@@ -1 +1 @@
1
- {"version":3,"file":"controls-element.js","names":["#core","#state"],"sources":["../../../../src/ui/controls/controls-element.ts"],"sourcesContent":["import { ControlsCore, ControlsDataAttrs } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectControls } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class ControlsElement extends MediaElement {\n static readonly tagName = 'media-controls';\n\n readonly #core = new ControlsCore();\n readonly #state = new PlayerController(this, playerContext, selectControls);\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (__DEV__ && !this.#state.value) {\n logMissingFeature(ControlsElement.tagName, 'controls');\n }\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const controls = this.#state.value;\n\n if (!controls) {\n return;\n }\n\n applyStateDataAttrs(this, this.#core.getState(controls), ControlsDataAttrs);\n }\n}\n"],"mappings":";;;;;;;AAQA,IAAa,kBAAb,cAAqC,aAAa;;iBACtB;;CAE1B,CAASA,OAAQ,IAAI,cAAc;CACnC,CAASC,QAAS,IAAI,iBAAiB,MAAM,eAAe,eAAe;CAE3E,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;;CAO3B,AAAmB,OAAO,SAA+B;AACvD,QAAM,OAAO,QAAQ;EAErB,MAAM,WAAW,MAAKA,MAAO;AAE7B,MAAI,CAAC,SACH;AAGF,sBAAoB,MAAM,MAAKD,KAAM,SAAS,SAAS,EAAE,kBAAkB"}
1
+ {"version":3,"file":"controls-element.js","names":["#core","#mediaState","#provider"],"sources":["../../../../src/ui/controls/controls-element.ts"],"sourcesContent":["import { ControlsCore, ControlsDataAttrs } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectControls } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\nimport { controlsContext } from './context';\n\nexport class ControlsElement extends MediaElement {\n static readonly tagName = 'media-controls';\n\n readonly #core = new ControlsCore();\n readonly #mediaState = new PlayerController(this, playerContext, selectControls);\n readonly #provider = new ContextProvider(this, { context: controlsContext });\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (__DEV__ && !this.#mediaState.value && this.#mediaState.displayName) {\n logMissingFeature(this.localName, this.#mediaState.displayName);\n }\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const media = this.#mediaState.value;\n if (!media) return;\n\n this.#core.setMedia(media);\n const state = this.#core.getState();\n\n applyStateDataAttrs(this, state, ControlsDataAttrs);\n\n this.#provider.setValue({\n state,\n stateAttrMap: ControlsDataAttrs,\n });\n }\n}\n"],"mappings":";;;;;;;;;AAUA,IAAa,kBAAb,cAAqC,aAAa;;iBACtB;;CAE1B,CAASA,OAAQ,IAAI,cAAc;CACnC,CAASC,aAAc,IAAI,iBAAiB,MAAM,eAAe,eAAe;CAChF,CAASC,WAAY,IAAI,gBAAgB,MAAM,EAAE,SAAS,iBAAiB,CAAC;CAE5E,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;;CAO3B,AAAmB,OAAO,UAAgC;AACxD,QAAM,OAAO,SAAS;EAEtB,MAAM,QAAQ,MAAKD,WAAY;AAC/B,MAAI,CAAC,MAAO;AAEZ,QAAKD,KAAM,SAAS,MAAM;EAC1B,MAAM,QAAQ,MAAKA,KAAM,UAAU;AAEnC,sBAAoB,MAAM,OAAO,kBAAkB;AAEnD,QAAKE,SAAU,SAAS;GACtB;GACA,cAAc;GACf,CAAC"}
@@ -1,7 +1,16 @@
1
- import { MediaElement } from "../media-element.js";
1
+ import { controlsContext } from "./context.js";
2
+ import { ContextPartElement } from "../context-part-element.js";
3
+ import { ContextConsumer } from "@videojs/element/context";
2
4
 
3
5
  //#region src/ui/controls/controls-group-element.ts
4
- var ControlsGroupElement = class extends MediaElement {
6
+ var ControlsGroupElement = class extends ContextPartElement {
7
+ constructor(..._args) {
8
+ super(..._args);
9
+ this.consumer = new ContextConsumer(this, {
10
+ context: controlsContext,
11
+ subscribe: true
12
+ });
13
+ }
5
14
  static {
6
15
  this.tagName = "media-controls-group";
7
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"controls-group-element.js","names":[],"sources":["../../../../src/ui/controls/controls-group-element.ts"],"sourcesContent":["import { MediaElement } from '../media-element';\n\nexport class ControlsGroupElement extends MediaElement {\n static readonly tagName = 'media-controls-group';\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.hasAttribute('aria-label') || this.hasAttribute('aria-labelledby')) {\n this.setAttribute('role', 'group');\n }\n }\n}\n"],"mappings":";;;AAEA,IAAa,uBAAb,cAA0C,aAAa;;iBAC3B;;CAE1B,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;AAEzB,MAAI,KAAK,aAAa,aAAa,IAAI,KAAK,aAAa,kBAAkB,CACzE,MAAK,aAAa,QAAQ,QAAQ"}
1
+ {"version":3,"file":"controls-group-element.js","names":[],"sources":["../../../../src/ui/controls/controls-group-element.ts"],"sourcesContent":["import type { ControlsState } from '@videojs/core';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ContextPartElement } from '../context-part-element';\nimport { controlsContext } from './context';\n\nexport class ControlsGroupElement extends ContextPartElement<ControlsState> {\n static readonly tagName = 'media-controls-group';\n\n protected readonly consumer = new ContextConsumer(this, { context: controlsContext, subscribe: true });\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.hasAttribute('aria-label') || this.hasAttribute('aria-labelledby')) {\n this.setAttribute('role', 'group');\n }\n }\n}\n"],"mappings":";;;;;AAMA,IAAa,uBAAb,cAA0C,mBAAkC;;;kBAG5C,IAAI,gBAAgB,MAAM;GAAE,SAAS;GAAiB,WAAW;GAAM,CAAC;;;iBAF5E;;CAI1B,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;AAEzB,MAAI,KAAK,aAAa,aAAa,IAAI,KAAK,aAAa,kBAAkB,CACzE,MAAK,aAAa,QAAQ,QAAQ"}
@@ -1,53 +1,22 @@
1
1
  import { playerContext } from "../../player/context.js";
2
- import { MediaElement } from "../media-element.js";
3
2
  import { PlayerController } from "../../player/player-controller.js";
4
- import { applyElementProps, applyStateDataAttrs, createButton, selectFullscreen } from "@videojs/core/dom";
3
+ import { MediaButtonElement } from "../media-button-element.js";
4
+ import { selectFullscreen } from "@videojs/core/dom";
5
5
  import { FullscreenButtonCore, FullscreenButtonDataAttrs } from "@videojs/core";
6
6
 
7
7
  //#region src/ui/fullscreen-button/fullscreen-button-element.ts
8
- var FullscreenButtonElement = class extends MediaElement {
8
+ var FullscreenButtonElement = class extends MediaButtonElement {
9
9
  constructor(..._args) {
10
10
  super(..._args);
11
- this.label = FullscreenButtonCore.defaultProps.label;
12
- this.disabled = FullscreenButtonCore.defaultProps.disabled;
11
+ this.core = new FullscreenButtonCore();
12
+ this.stateAttrMap = FullscreenButtonDataAttrs;
13
+ this.mediaState = new PlayerController(this, playerContext, selectFullscreen);
13
14
  }
14
15
  static {
15
16
  this.tagName = "media-fullscreen-button";
16
17
  }
17
- static {
18
- this.properties = {
19
- label: { type: String },
20
- disabled: { type: Boolean }
21
- };
22
- }
23
- #core = new FullscreenButtonCore();
24
- #state = new PlayerController(this, playerContext, selectFullscreen);
25
- #disconnect = null;
26
- connectedCallback() {
27
- super.connectedCallback();
28
- this.#disconnect = new AbortController();
29
- const buttonProps = createButton({
30
- onActivate: () => this.#core.toggle(this.#state.value),
31
- isDisabled: () => this.disabled || !this.#state.value
32
- });
33
- applyElementProps(this, buttonProps, this.#disconnect.signal);
34
- }
35
- disconnectedCallback() {
36
- super.disconnectedCallback();
37
- this.#disconnect?.abort();
38
- this.#disconnect = null;
39
- }
40
- willUpdate(changed) {
41
- super.willUpdate(changed);
42
- this.#core.setProps(this);
43
- }
44
- update(changed) {
45
- super.update(changed);
46
- const media = this.#state.value;
47
- if (!media) return;
48
- const state = this.#core.getState(media);
49
- applyElementProps(this, this.#core.getAttrs(state));
50
- applyStateDataAttrs(this, state, FullscreenButtonDataAttrs);
18
+ activate(state) {
19
+ this.core.toggle(state);
51
20
  }
52
21
  };
53
22
 
@@ -1 +1 @@
1
- {"version":3,"file":"fullscreen-button-element.js","names":["#core","#state","#disconnect"],"sources":["../../../../src/ui/fullscreen-button/fullscreen-button-element.ts"],"sourcesContent":["import { FullscreenButtonCore, FullscreenButtonDataAttrs } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createButton,\n logMissingFeature,\n selectFullscreen,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class FullscreenButtonElement extends MediaElement {\n static readonly tagName = 'media-fullscreen-button';\n\n static override properties = {\n label: { type: String },\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<keyof FullscreenButtonCore.Props>;\n\n label = FullscreenButtonCore.defaultProps.label;\n disabled = FullscreenButtonCore.defaultProps.disabled;\n\n readonly #core = new FullscreenButtonCore();\n readonly #state = new PlayerController(this, playerContext, selectFullscreen);\n\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: () => this.#core.toggle(this.#state.value!),\n isDisabled: () => this.disabled || !this.#state.value,\n });\n\n applyElementProps(this, buttonProps, this.#disconnect.signal);\n\n if (__DEV__ && !this.#state.value) {\n logMissingFeature(FullscreenButtonElement.tagName, 'fullscreen');\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.#state.value;\n\n if (!media) return;\n\n const state = this.#core.getState(media);\n applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, FullscreenButtonDataAttrs);\n }\n}\n"],"mappings":";;;;;;;AAcA,IAAa,0BAAb,cAA6C,aAAa;;;eAQhD,qBAAqB,aAAa;kBAC/B,qBAAqB,aAAa;;;iBARnB;;;oBAEG;GAC3B,OAAO,EAAE,MAAM,QAAQ;GACvB,UAAU,EAAE,MAAM,SAAS;GAC5B;;CAKD,CAASA,OAAQ,IAAI,sBAAsB;CAC3C,CAASC,QAAS,IAAI,iBAAiB,MAAM,eAAe,iBAAiB;CAE7E,cAAsC;CAEtC,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;AAEzB,QAAKC,aAAc,IAAI,iBAAiB;EAExC,MAAM,cAAc,aAAa;GAC/B,kBAAkB,MAAKF,KAAM,OAAO,MAAKC,MAAO,MAAO;GACvD,kBAAkB,KAAK,YAAY,CAAC,MAAKA,MAAO;GACjD,CAAC;AAEF,oBAAkB,MAAM,aAAa,MAAKC,WAAY,OAAO;;CAO/D,AAAS,uBAA6B;AACpC,QAAM,sBAAsB;AAC5B,QAAKA,YAAa,OAAO;AACzB,QAAKA,aAAc;;CAGrB,AAAmB,WAAW,SAA+B;AAC3D,QAAM,WAAW,QAAQ;AACzB,QAAKF,KAAM,SAAS,KAAK;;CAG3B,AAAmB,OAAO,SAA+B;AACvD,QAAM,OAAO,QAAQ;EAErB,MAAM,QAAQ,MAAKC,MAAO;AAE1B,MAAI,CAAC,MAAO;EAEZ,MAAM,QAAQ,MAAKD,KAAM,SAAS,MAAM;AACxC,oBAAkB,MAAM,MAAKA,KAAM,SAAS,MAAM,CAAC;AACnD,sBAAoB,MAAM,OAAO,0BAA0B"}
1
+ {"version":3,"file":"fullscreen-button-element.js","names":[],"sources":["../../../../src/ui/fullscreen-button/fullscreen-button-element.ts"],"sourcesContent":["import { FullscreenButtonCore, FullscreenButtonDataAttrs, type MediaFullscreenState } from '@videojs/core';\nimport { selectFullscreen } from '@videojs/core/dom';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class FullscreenButtonElement extends MediaButtonElement<FullscreenButtonCore> {\n static readonly tagName = 'media-fullscreen-button';\n\n protected readonly core = new FullscreenButtonCore();\n protected readonly stateAttrMap = FullscreenButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectFullscreen);\n\n protected activate(state: MediaFullscreenState): void {\n this.core.toggle(state);\n }\n}\n"],"mappings":";;;;;;;AAOA,IAAa,0BAAb,cAA6C,mBAAyC;;;cAG1D,IAAI,sBAAsB;sBAClB;oBACF,IAAI,iBAAiB,MAAM,eAAe,iBAAiB;;;iBAJjE;;CAM1B,AAAU,SAAS,OAAmC;AACpD,OAAK,KAAK,OAAO,MAAM"}