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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. package/README.md +2 -2
  2. package/cdn/audio-minimal.dev.d.ts +1 -0
  3. package/cdn/audio-minimal.dev.js +112 -0
  4. package/cdn/audio-minimal.dev.js.map +1 -0
  5. package/cdn/audio-minimal.js +2 -0
  6. package/cdn/audio-minimal.js.map +1 -0
  7. package/cdn/audio.dev.d.ts +1 -0
  8. package/cdn/audio.dev.js +103 -0
  9. package/cdn/audio.dev.js.map +1 -0
  10. package/cdn/audio.js +2 -0
  11. package/cdn/audio.js.map +1 -0
  12. package/cdn/background.dev.d.ts +1 -0
  13. package/cdn/background.dev.js +159 -0
  14. package/cdn/background.dev.js.map +1 -0
  15. package/cdn/background.js +2 -0
  16. package/cdn/background.js.map +1 -0
  17. package/cdn/context-C_e06fGU.js +13 -0
  18. package/cdn/context-C_e06fGU.js.map +1 -0
  19. package/cdn/context-DTY0nOpS.js +98 -0
  20. package/cdn/context-DTY0nOpS.js.map +1 -0
  21. package/cdn/create-player-BTIU8EwT.js +7 -0
  22. package/cdn/create-player-BTIU8EwT.js.map +1 -0
  23. package/cdn/create-player-Cwxvswyv.js +3218 -0
  24. package/cdn/create-player-Cwxvswyv.js.map +1 -0
  25. package/cdn/default-GgKND7a8.js +2 -0
  26. package/cdn/default-GgKND7a8.js.map +1 -0
  27. package/cdn/default-cLso8BHO.js +28 -0
  28. package/cdn/default-cLso8BHO.js.map +1 -0
  29. package/cdn/listen-BXAYCbZA.js +9 -0
  30. package/cdn/listen-BXAYCbZA.js.map +1 -0
  31. package/cdn/listen-DX5vU4s4.js +2 -0
  32. package/cdn/listen-DX5vU4s4.js.map +1 -0
  33. package/cdn/media/dash-video.dev.d.ts +1 -0
  34. package/cdn/media/dash-video.dev.js +39165 -0
  35. package/cdn/media/dash-video.dev.js.map +1 -0
  36. package/cdn/media/dash-video.js +21 -0
  37. package/cdn/media/dash-video.js.map +1 -0
  38. package/cdn/media/hls-video.dev.d.ts +1 -0
  39. package/cdn/media/hls-video.dev.js +28357 -0
  40. package/cdn/media/hls-video.dev.js.map +1 -0
  41. package/cdn/media/hls-video.js +41 -0
  42. package/cdn/media/hls-video.js.map +1 -0
  43. package/cdn/media/simple-hls-video.dev.d.ts +1 -0
  44. package/cdn/media/simple-hls-video.dev.js +3465 -0
  45. package/cdn/media/simple-hls-video.dev.js.map +1 -0
  46. package/cdn/media/simple-hls-video.js +2 -0
  47. package/cdn/media/simple-hls-video.js.map +1 -0
  48. package/cdn/media-attach-mixin-ChyNp2eK.js +44 -0
  49. package/cdn/media-attach-mixin-ChyNp2eK.js.map +1 -0
  50. package/cdn/media-attach-mixin-tFNcHnvo.js +2 -0
  51. package/cdn/media-attach-mixin-tFNcHnvo.js.map +1 -0
  52. package/cdn/minimal-BJfleQcQ.js +2 -0
  53. package/cdn/minimal-BJfleQcQ.js.map +1 -0
  54. package/cdn/minimal-DBMdC_0I.js +28 -0
  55. package/cdn/minimal-DBMdC_0I.js.map +1 -0
  56. package/cdn/player-BHhLXO-R.js +2 -0
  57. package/cdn/player-BHhLXO-R.js.map +1 -0
  58. package/cdn/player-DEfj0RU6.js +15 -0
  59. package/cdn/player-DEfj0RU6.js.map +1 -0
  60. package/cdn/poster-Dd0F1rRd.js +195 -0
  61. package/cdn/poster-Dd0F1rRd.js.map +1 -0
  62. package/cdn/poster-DwQ3RAch.js +2 -0
  63. package/cdn/poster-DwQ3RAch.js.map +1 -0
  64. package/cdn/predicate-BG-dj_kF.js +26 -0
  65. package/cdn/predicate-BG-dj_kF.js.map +1 -0
  66. package/cdn/predicate-Y9jDHLpX.js +2 -0
  67. package/cdn/predicate-Y9jDHLpX.js.map +1 -0
  68. package/cdn/proxy-2oO2ph3m.js +47 -0
  69. package/cdn/proxy-2oO2ph3m.js.map +1 -0
  70. package/cdn/proxy-6KS6wy69.js +2 -0
  71. package/cdn/proxy-6KS6wy69.js.map +1 -0
  72. package/cdn/proxy-XzDf9gyk.js +66 -0
  73. package/cdn/proxy-XzDf9gyk.js.map +1 -0
  74. package/cdn/proxy-dR7IDk37.js +349 -0
  75. package/cdn/proxy-dR7IDk37.js.map +1 -0
  76. package/cdn/safe-define-B8lHgj_K.js +9 -0
  77. package/cdn/safe-define-B8lHgj_K.js.map +1 -0
  78. package/cdn/safe-define-GrHW3P9e.js +2 -0
  79. package/cdn/safe-define-GrHW3P9e.js.map +1 -0
  80. package/cdn/video-minimal.dev.d.ts +1 -0
  81. package/cdn/video-minimal.dev.js +155 -0
  82. package/cdn/video-minimal.dev.js.map +1 -0
  83. package/cdn/video-minimal.js +2 -0
  84. package/cdn/video-minimal.js.map +1 -0
  85. package/cdn/video.dev.d.ts +1 -0
  86. package/cdn/video.dev.js +170 -0
  87. package/cdn/video.dev.js.map +1 -0
  88. package/cdn/video.js +2 -0
  89. package/cdn/video.js.map +1 -0
  90. package/cdn/volume-slider-DgJ0rAfC.js +2459 -0
  91. package/cdn/volume-slider-DgJ0rAfC.js.map +1 -0
  92. package/cdn/volume-slider-Pd0AMTCH.js +8 -0
  93. package/cdn/volume-slider-Pd0AMTCH.js.map +1 -0
  94. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +6 -0
  95. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -0
  96. package/dist/default/_virtual/inline-css_src/define/audio/skin.js +6 -0
  97. package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -0
  98. package/dist/default/_virtual/inline-css_src/define/background/skin.js +6 -0
  99. package/dist/default/_virtual/inline-css_src/define/background/skin.js.map +1 -0
  100. package/dist/default/_virtual/inline-css_src/define/base.js +6 -0
  101. package/dist/default/_virtual/inline-css_src/define/base.js.map +1 -0
  102. package/dist/default/_virtual/inline-css_src/define/shared.js +6 -0
  103. package/dist/default/_virtual/inline-css_src/define/shared.js.map +1 -0
  104. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +6 -0
  105. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -0
  106. package/dist/default/_virtual/inline-css_src/define/video/skin.js +6 -0
  107. package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -0
  108. package/dist/default/define/audio/minimal-skin.css +710 -5
  109. package/dist/default/define/audio/minimal-skin.js +20 -9
  110. package/dist/default/define/audio/minimal-skin.js.map +1 -1
  111. package/dist/default/define/audio/minimal-skin.tailwind.js +44 -0
  112. package/dist/default/define/audio/minimal-skin.tailwind.js.map +1 -0
  113. package/dist/default/define/audio/skin.css +736 -6
  114. package/dist/default/define/audio/skin.js +20 -9
  115. package/dist/default/define/audio/skin.js.map +1 -1
  116. package/dist/default/define/audio/skin.tailwind.js +42 -0
  117. package/dist/default/define/audio/skin.tailwind.js.map +1 -0
  118. package/dist/default/define/background/skin.css +1 -1
  119. package/dist/default/define/background/skin.js +11 -5
  120. package/dist/default/define/background/skin.js.map +1 -1
  121. package/dist/default/define/base.css +23 -0
  122. package/dist/default/define/media/dash-video.js +14 -0
  123. package/dist/default/define/media/dash-video.js.map +1 -0
  124. package/dist/default/define/media/simple-hls-video.js +13 -0
  125. package/dist/default/define/media/simple-hls-video.js.map +1 -0
  126. package/dist/default/define/shared.css +13 -0
  127. package/dist/default/define/skin-mixin.js +36 -19
  128. package/dist/default/define/skin-mixin.js.map +1 -1
  129. package/dist/default/define/video/minimal-skin.css +701 -397
  130. package/dist/default/define/video/minimal-skin.js +9 -98
  131. package/dist/default/define/video/minimal-skin.js.map +1 -1
  132. package/dist/default/define/video/minimal-skin.tailwind.js +17 -99
  133. package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
  134. package/dist/default/define/video/skin.css +744 -427
  135. package/dist/default/define/video/skin.js +10 -92
  136. package/dist/default/define/video/skin.js.map +1 -1
  137. package/dist/default/define/video/skin.tailwind.js +15 -92
  138. package/dist/default/define/video/skin.tailwind.js.map +1 -1
  139. package/dist/default/icons/dist/render/default/index.js +14 -13
  140. package/dist/default/icons/dist/render/default/index.js.map +1 -1
  141. package/dist/default/icons/dist/render/minimal/index.js +14 -13
  142. package/dist/default/icons/dist/render/minimal/index.js.map +1 -1
  143. package/dist/default/index.js +3 -2
  144. package/dist/default/media/background-video/index.js +6 -19
  145. package/dist/default/media/background-video/index.js.map +1 -1
  146. package/dist/default/media/container-element.js +5 -2
  147. package/dist/default/media/container-element.js.map +1 -1
  148. package/dist/default/media/dash-video/index.js +26 -0
  149. package/dist/default/media/dash-video/index.js.map +1 -0
  150. package/dist/default/media/hls-video/index.js +2 -1
  151. package/dist/default/media/hls-video/index.js.map +1 -1
  152. package/dist/default/media/simple-hls-video/index.js +23 -0
  153. package/dist/default/media/simple-hls-video/index.js.map +1 -0
  154. package/dist/default/player/context.js +6 -2
  155. package/dist/default/player/context.js.map +1 -1
  156. package/dist/default/player/create-player.js +11 -3
  157. package/dist/default/player/create-player.js.map +1 -1
  158. package/dist/default/presets/audio.js +3 -1
  159. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js +42 -0
  160. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -0
  161. package/dist/default/skins/dist/default/default/tailwind/components/buffering.js +9 -0
  162. package/dist/default/skins/dist/default/default/tailwind/components/buffering.js.map +1 -0
  163. package/dist/default/skins/dist/default/default/tailwind/components/button.js +13 -0
  164. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -0
  165. package/dist/default/skins/dist/default/default/tailwind/components/controls.js +8 -0
  166. package/dist/default/skins/dist/default/default/tailwind/components/controls.js.map +1 -0
  167. package/dist/default/skins/dist/default/default/tailwind/components/error.js +15 -0
  168. package/dist/default/skins/dist/default/default/tailwind/components/error.js.map +1 -0
  169. package/dist/default/skins/dist/default/default/tailwind/components/icon.js +10 -0
  170. package/dist/default/skins/dist/default/default/tailwind/components/icon.js.map +1 -0
  171. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js +8 -0
  172. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js.map +1 -0
  173. package/dist/default/skins/dist/default/default/tailwind/components/playback-rate.js +6 -0
  174. package/dist/default/skins/dist/default/default/tailwind/components/playback-rate.js.map +1 -0
  175. package/dist/default/skins/dist/default/default/tailwind/components/popup.js +13 -0
  176. package/dist/default/skins/dist/default/default/tailwind/components/popup.js.map +1 -0
  177. package/dist/default/skins/dist/default/default/tailwind/components/poster.js +16 -0
  178. package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
  179. package/dist/default/skins/dist/default/default/tailwind/components/preview.js +13 -0
  180. package/dist/default/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  181. package/dist/default/skins/dist/default/default/tailwind/components/root.js +8 -0
  182. package/dist/default/skins/dist/default/default/tailwind/components/root.js.map +1 -0
  183. package/dist/default/skins/dist/default/default/tailwind/components/seek.js +11 -0
  184. package/dist/default/skins/dist/default/default/tailwind/components/seek.js.map +1 -0
  185. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +21 -0
  186. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -0
  187. package/dist/default/skins/dist/default/default/tailwind/components/surface.js +8 -0
  188. package/dist/default/skins/dist/default/default/tailwind/components/surface.js.map +1 -0
  189. package/dist/default/skins/dist/default/default/tailwind/components/time.js +10 -0
  190. package/dist/default/skins/dist/default/default/tailwind/components/time.js.map +1 -0
  191. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +66 -0
  192. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -0
  193. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +31 -0
  194. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -0
  195. package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js +6 -0
  196. package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -0
  197. package/dist/default/skins/dist/default/minimal/tailwind/components/button-group.js +8 -0
  198. package/dist/default/skins/dist/default/minimal/tailwind/components/button-group.js.map +1 -0
  199. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +13 -0
  200. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -0
  201. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js +8 -0
  202. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -0
  203. package/dist/default/skins/dist/default/minimal/tailwind/components/error.js +15 -0
  204. package/dist/default/skins/dist/default/minimal/tailwind/components/error.js.map +1 -0
  205. package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js +10 -0
  206. package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -0
  207. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js +8 -0
  208. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -0
  209. package/dist/default/skins/dist/default/minimal/tailwind/components/playback-rate.js +6 -0
  210. package/dist/default/skins/dist/default/minimal/tailwind/components/playback-rate.js.map +1 -0
  211. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js +13 -0
  212. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -0
  213. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +16 -0
  214. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
  215. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js +14 -0
  216. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  217. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +8 -0
  218. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -0
  219. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js +11 -0
  220. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -0
  221. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +20 -0
  222. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -0
  223. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js +14 -0
  224. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js.map +1 -0
  225. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +61 -0
  226. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -0
  227. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +34 -0
  228. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -0
  229. package/dist/default/skins/dist/default/shared/tailwind/tooltip-state.js +28 -0
  230. package/dist/default/skins/dist/default/shared/tailwind/tooltip-state.js.map +1 -0
  231. package/dist/default/store/container-mixin.js +16 -46
  232. package/dist/default/store/container-mixin.js.map +1 -1
  233. package/dist/default/store/media-attach-mixin.js +45 -0
  234. package/dist/default/store/media-attach-mixin.js.map +1 -0
  235. package/dist/default/store/provider-mixin.js +99 -9
  236. package/dist/default/store/provider-mixin.js.map +1 -1
  237. package/dist/default/ui/popover/popover-element.js +57 -4
  238. package/dist/default/ui/popover/popover-element.js.map +1 -1
  239. package/dist/default/ui/slider/slider-element.js +3 -3
  240. package/dist/default/ui/slider/slider-element.js.map +1 -1
  241. package/dist/default/ui/time-slider/time-slider-element.js +4 -4
  242. package/dist/default/ui/time-slider/time-slider-element.js.map +1 -1
  243. package/dist/default/ui/tooltip/tooltip-element.js +56 -4
  244. package/dist/default/ui/tooltip/tooltip-element.js.map +1 -1
  245. package/dist/default/ui/tooltip/tooltip-group-element.js +4 -1
  246. package/dist/default/ui/tooltip/tooltip-group-element.js.map +1 -1
  247. package/dist/default/ui/volume-slider/volume-slider-element.js +6 -6
  248. package/dist/default/ui/volume-slider/volume-slider-element.js.map +1 -1
  249. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +6 -0
  250. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -0
  251. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +6 -0
  252. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -0
  253. package/dist/dev/_virtual/inline-css_src/define/background/skin.js +6 -0
  254. package/dist/dev/_virtual/inline-css_src/define/background/skin.js.map +1 -0
  255. package/dist/dev/_virtual/inline-css_src/define/base.js +6 -0
  256. package/dist/dev/_virtual/inline-css_src/define/base.js.map +1 -0
  257. package/dist/dev/_virtual/inline-css_src/define/shared.js +6 -0
  258. package/dist/dev/_virtual/inline-css_src/define/shared.js.map +1 -0
  259. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +6 -0
  260. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -0
  261. package/dist/dev/_virtual/inline-css_src/define/video/skin.js +6 -0
  262. package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -0
  263. package/dist/dev/define/audio/minimal-skin.css +710 -5
  264. package/dist/dev/define/audio/minimal-skin.d.ts +6 -2
  265. package/dist/dev/define/audio/minimal-skin.d.ts.map +1 -1
  266. package/dist/dev/define/audio/minimal-skin.js +102 -9
  267. package/dist/dev/define/audio/minimal-skin.js.map +1 -1
  268. package/dist/dev/define/audio/minimal-skin.tailwind.d.ts +20 -0
  269. package/dist/dev/define/audio/minimal-skin.tailwind.d.ts.map +1 -0
  270. package/dist/dev/define/audio/minimal-skin.tailwind.js +128 -0
  271. package/dist/dev/define/audio/minimal-skin.tailwind.js.map +1 -0
  272. package/dist/dev/define/audio/player.d.ts +0 -1
  273. package/dist/dev/define/audio/player.d.ts.map +1 -1
  274. package/dist/dev/define/audio/skin.css +736 -6
  275. package/dist/dev/define/audio/skin.d.ts +6 -2
  276. package/dist/dev/define/audio/skin.d.ts.map +1 -1
  277. package/dist/dev/define/audio/skin.js +93 -9
  278. package/dist/dev/define/audio/skin.js.map +1 -1
  279. package/dist/dev/define/audio/skin.tailwind.d.ts +20 -0
  280. package/dist/dev/define/audio/skin.tailwind.d.ts.map +1 -0
  281. package/dist/dev/define/audio/skin.tailwind.js +117 -0
  282. package/dist/dev/define/audio/skin.tailwind.js.map +1 -0
  283. package/dist/dev/define/background/player.d.ts +0 -1
  284. package/dist/dev/define/background/player.d.ts.map +1 -1
  285. package/dist/dev/define/background/skin.css +1 -1
  286. package/dist/dev/define/background/skin.d.ts.map +1 -1
  287. package/dist/dev/define/background/skin.js +13 -1
  288. package/dist/dev/define/background/skin.js.map +1 -1
  289. package/dist/dev/define/base.css +23 -0
  290. package/dist/dev/define/media/dash-video.d.ts +14 -0
  291. package/dist/dev/define/media/dash-video.d.ts.map +1 -0
  292. package/dist/dev/define/media/dash-video.js +14 -0
  293. package/dist/dev/define/media/dash-video.js.map +1 -0
  294. package/dist/dev/define/media/simple-hls-video.d.ts +14 -0
  295. package/dist/dev/define/media/simple-hls-video.d.ts.map +1 -0
  296. package/dist/dev/define/media/simple-hls-video.js +13 -0
  297. package/dist/dev/define/media/simple-hls-video.js.map +1 -0
  298. package/dist/dev/define/shared.css +13 -0
  299. package/dist/dev/define/skin-mixin.d.ts +12 -4
  300. package/dist/dev/define/skin-mixin.d.ts.map +1 -1
  301. package/dist/dev/define/skin-mixin.js +36 -19
  302. package/dist/dev/define/skin-mixin.js.map +1 -1
  303. package/dist/dev/define/video/minimal-skin.css +701 -397
  304. package/dist/dev/define/video/minimal-skin.d.ts +5 -14
  305. package/dist/dev/define/video/minimal-skin.d.ts.map +1 -1
  306. package/dist/dev/define/video/minimal-skin.js +119 -83
  307. package/dist/dev/define/video/minimal-skin.js.map +1 -1
  308. package/dist/dev/define/video/minimal-skin.tailwind.d.ts +4 -14
  309. package/dist/dev/define/video/minimal-skin.tailwind.d.ts.map +1 -1
  310. package/dist/dev/define/video/minimal-skin.tailwind.js +136 -83
  311. package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
  312. package/dist/dev/define/video/player.d.ts +0 -1
  313. package/dist/dev/define/video/player.d.ts.map +1 -1
  314. package/dist/dev/define/video/skin.css +744 -427
  315. package/dist/dev/define/video/skin.d.ts +5 -14
  316. package/dist/dev/define/video/skin.d.ts.map +1 -1
  317. package/dist/dev/define/video/skin.js +115 -79
  318. package/dist/dev/define/video/skin.js.map +1 -1
  319. package/dist/dev/define/video/skin.tailwind.d.ts +4 -14
  320. package/dist/dev/define/video/skin.tailwind.d.ts.map +1 -1
  321. package/dist/dev/define/video/skin.tailwind.js +125 -76
  322. package/dist/dev/define/video/skin.tailwind.js.map +1 -1
  323. package/dist/dev/icons/dist/render/default/index.js +14 -13
  324. package/dist/dev/icons/dist/render/default/index.js.map +1 -1
  325. package/dist/dev/icons/dist/render/minimal/index.js +14 -13
  326. package/dist/dev/icons/dist/render/minimal/index.js.map +1 -1
  327. package/dist/dev/index.d.ts +6 -5
  328. package/dist/dev/index.js +3 -2
  329. package/dist/dev/media/background-video/index.d.ts +8 -1
  330. package/dist/dev/media/background-video/index.d.ts.map +1 -1
  331. package/dist/dev/media/background-video/index.js +5 -1
  332. package/dist/dev/media/background-video/index.js.map +1 -1
  333. package/dist/dev/media/container-element.d.ts +0 -1
  334. package/dist/dev/media/container-element.d.ts.map +1 -1
  335. package/dist/dev/media/container-element.js +5 -2
  336. package/dist/dev/media/container-element.js.map +1 -1
  337. package/dist/dev/media/dash-video/index.d.ts +13 -0
  338. package/dist/dev/media/dash-video/index.d.ts.map +1 -0
  339. package/dist/dev/media/dash-video/index.js +26 -0
  340. package/dist/dev/media/dash-video/index.js.map +1 -0
  341. package/dist/dev/media/hls-video/index.d.ts +2 -1
  342. package/dist/dev/media/hls-video/index.d.ts.map +1 -1
  343. package/dist/dev/media/hls-video/index.js +2 -1
  344. package/dist/dev/media/hls-video/index.js.map +1 -1
  345. package/dist/dev/media/simple-hls-video/index.d.ts +12 -0
  346. package/dist/dev/media/simple-hls-video/index.d.ts.map +1 -0
  347. package/dist/dev/media/simple-hls-video/index.js +23 -0
  348. package/dist/dev/media/simple-hls-video/index.js.map +1 -0
  349. package/dist/dev/player/context.d.ts +16 -2
  350. package/dist/dev/player/context.d.ts.map +1 -1
  351. package/dist/dev/player/context.js +6 -2
  352. package/dist/dev/player/context.js.map +1 -1
  353. package/dist/dev/player/create-player.d.ts +2 -2
  354. package/dist/dev/player/create-player.js +11 -3
  355. package/dist/dev/player/create-player.js.map +1 -1
  356. package/dist/dev/presets/audio.d.ts +3 -1
  357. package/dist/dev/presets/audio.js +3 -1
  358. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js +42 -0
  359. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -0
  360. package/dist/dev/skins/dist/default/default/tailwind/components/buffering.js +9 -0
  361. package/dist/dev/skins/dist/default/default/tailwind/components/buffering.js.map +1 -0
  362. package/dist/dev/skins/dist/default/default/tailwind/components/button.js +13 -0
  363. package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -0
  364. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js +8 -0
  365. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js.map +1 -0
  366. package/dist/dev/skins/dist/default/default/tailwind/components/error.js +15 -0
  367. package/dist/dev/skins/dist/default/default/tailwind/components/error.js.map +1 -0
  368. package/dist/dev/skins/dist/default/default/tailwind/components/icon.js +10 -0
  369. package/dist/dev/skins/dist/default/default/tailwind/components/icon.js.map +1 -0
  370. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js +8 -0
  371. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js.map +1 -0
  372. package/dist/dev/skins/dist/default/default/tailwind/components/playback-rate.js +6 -0
  373. package/dist/dev/skins/dist/default/default/tailwind/components/playback-rate.js.map +1 -0
  374. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js +13 -0
  375. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js.map +1 -0
  376. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js +16 -0
  377. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
  378. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js +13 -0
  379. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  380. package/dist/dev/skins/dist/default/default/tailwind/components/root.js +8 -0
  381. package/dist/dev/skins/dist/default/default/tailwind/components/root.js.map +1 -0
  382. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js +11 -0
  383. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js.map +1 -0
  384. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +21 -0
  385. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -0
  386. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js +8 -0
  387. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js.map +1 -0
  388. package/dist/dev/skins/dist/default/default/tailwind/components/time.js +10 -0
  389. package/dist/dev/skins/dist/default/default/tailwind/components/time.js.map +1 -0
  390. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +66 -0
  391. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -0
  392. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js +31 -0
  393. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -0
  394. package/dist/dev/skins/dist/default/minimal/tailwind/components/buffering.js +6 -0
  395. package/dist/dev/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -0
  396. package/dist/dev/skins/dist/default/minimal/tailwind/components/button-group.js +8 -0
  397. package/dist/dev/skins/dist/default/minimal/tailwind/components/button-group.js.map +1 -0
  398. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +13 -0
  399. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +1 -0
  400. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js +8 -0
  401. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -0
  402. package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js +15 -0
  403. package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js.map +1 -0
  404. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js +10 -0
  405. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -0
  406. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js +8 -0
  407. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -0
  408. package/dist/dev/skins/dist/default/minimal/tailwind/components/playback-rate.js +6 -0
  409. package/dist/dev/skins/dist/default/minimal/tailwind/components/playback-rate.js.map +1 -0
  410. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js +13 -0
  411. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -0
  412. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js +16 -0
  413. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
  414. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js +14 -0
  415. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  416. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +8 -0
  417. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +1 -0
  418. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js +11 -0
  419. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -0
  420. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +20 -0
  421. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -0
  422. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js +14 -0
  423. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js.map +1 -0
  424. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +61 -0
  425. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -0
  426. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js +34 -0
  427. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +1 -0
  428. package/dist/dev/skins/dist/default/shared/tailwind/tooltip-state.js +28 -0
  429. package/dist/dev/skins/dist/default/shared/tailwind/tooltip-state.js.map +1 -0
  430. package/dist/dev/store/container-mixin.d.ts +10 -5
  431. package/dist/dev/store/container-mixin.d.ts.map +1 -1
  432. package/dist/dev/store/container-mixin.js +16 -46
  433. package/dist/dev/store/container-mixin.js.map +1 -1
  434. package/dist/dev/store/media-attach-mixin.d.ts +19 -0
  435. package/dist/dev/store/media-attach-mixin.d.ts.map +1 -0
  436. package/dist/dev/store/media-attach-mixin.js +45 -0
  437. package/dist/dev/store/media-attach-mixin.js.map +1 -0
  438. package/dist/dev/store/provider-mixin.d.ts +19 -6
  439. package/dist/dev/store/provider-mixin.d.ts.map +1 -1
  440. package/dist/dev/store/provider-mixin.js +99 -9
  441. package/dist/dev/store/provider-mixin.js.map +1 -1
  442. package/dist/dev/ui/popover/popover-element.d.ts.map +1 -1
  443. package/dist/dev/ui/popover/popover-element.js +57 -4
  444. package/dist/dev/ui/popover/popover-element.js.map +1 -1
  445. package/dist/dev/ui/slider/slider-element.d.ts.map +1 -1
  446. package/dist/dev/ui/slider/slider-element.js +3 -3
  447. package/dist/dev/ui/slider/slider-element.js.map +1 -1
  448. package/dist/dev/ui/time-slider/time-slider-element.d.ts.map +1 -1
  449. package/dist/dev/ui/time-slider/time-slider-element.js +4 -4
  450. package/dist/dev/ui/time-slider/time-slider-element.js.map +1 -1
  451. package/dist/dev/ui/tooltip/tooltip-element.d.ts.map +1 -1
  452. package/dist/dev/ui/tooltip/tooltip-element.js +56 -4
  453. package/dist/dev/ui/tooltip/tooltip-element.js.map +1 -1
  454. package/dist/dev/ui/tooltip/tooltip-group-element.js +4 -1
  455. package/dist/dev/ui/tooltip/tooltip-group-element.js.map +1 -1
  456. package/dist/dev/ui/volume-slider/volume-slider-element.d.ts.map +1 -1
  457. package/dist/dev/ui/volume-slider/volume-slider-element.js +6 -6
  458. package/dist/dev/ui/volume-slider/volume-slider-element.js.map +1 -1
  459. package/package.json +24 -10
  460. package/dist/default/skins/dist/default/video/default.tailwind.js +0 -90
  461. package/dist/default/skins/dist/default/video/default.tailwind.js.map +0 -1
  462. package/dist/default/skins/dist/default/video/minimal.tailwind.js +0 -86
  463. package/dist/default/skins/dist/default/video/minimal.tailwind.js.map +0 -1
  464. package/dist/dev/skins/dist/default/video/default.tailwind.js +0 -90
  465. package/dist/dev/skins/dist/default/video/default.tailwind.js.map +0 -1
  466. package/dist/dev/skins/dist/default/video/minimal.tailwind.js +0 -86
  467. package/dist/dev/skins/dist/default/video/minimal.tailwind.js.map +0 -1
@@ -0,0 +1,11 @@
1
+ //#region ../skins/dist/default/minimal/tailwind/components/seek.js
2
+ const seek = {
3
+ button: "@max-md/media-controls:hidden",
4
+ label: "text-[10px] font-[480] tabular-nums",
5
+ labelForward: "absolute -right-px -bottom-0.75",
6
+ labelBackward: "absolute -left-px -bottom-0.75"
7
+ };
8
+
9
+ //#endregion
10
+ export { seek };
11
+ //# sourceMappingURL=seek.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seek.js","names":[],"sources":["../../../../../../../../../skins/dist/default/minimal/tailwind/components/seek.js"],"sourcesContent":["//#region src/minimal/tailwind/components/seek.ts\nconst seek = {\n\tbutton: \"@max-md/media-controls:hidden\",\n\tlabel: \"text-[10px] font-[480] tabular-nums\",\n\tlabelForward: \"absolute -right-px -bottom-0.75\",\n\tlabelBackward: \"absolute -left-px -bottom-0.75\"\n};\n\n//#endregion\nexport { seek };\n//# sourceMappingURL=seek.js.map"],"mappings":";AACA,MAAM,OAAO;CACZ,QAAQ;CACR,OAAO;CACP,cAAc;CACd,eAAe;CACf"}
@@ -0,0 +1,20 @@
1
+ import { cn } from "@videojs/utils/style";
2
+
3
+ //#region ../skins/dist/default/minimal/tailwind/components/slider.js
4
+ const slider = {
5
+ root: cn("group/slider relative flex flex-1 items-center justify-center rounded-full outline-none cursor-pointer", "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]"),
6
+ track: cn("relative isolate overflow-hidden bg-current/20 rounded-[inherit] select-none", "data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-0.75", "data-[orientation=vertical]:w-0.75 data-[orientation=vertical]:h-full"),
7
+ fill: {
8
+ base: "absolute rounded-[inherit] pointer-events-none",
9
+ fill: cn("bg-current", "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)"),
10
+ buffer: cn("bg-current/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)")
11
+ },
12
+ thumb: {
13
+ base: cn("z-10 absolute size-3 -translate-x-1/2 -translate-y-1/2", "bg-current rounded-full", "shadow-[0_0_0_1px_var(--media-controls-current-shadow-color-subtle,oklch(0_0_0/0.1)),0_1px_3px_0_oklch(0_0_0/0.15),0_1px_2px_-1px_oklch(0_0_0/0.15)]", "transition-[opacity,scale,outline-offset] duration-150 ease-out select-none", "outline-2 outline-transparent -outline-offset-2", "focus-visible:outline-current 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))]"),
14
+ 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")
15
+ }
16
+ };
17
+
18
+ //#endregion
19
+ export { slider };
20
+ //# sourceMappingURL=slider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider.js","names":[],"sources":["../../../../../../../../../skins/dist/default/minimal/tailwind/components/slider.js"],"sourcesContent":["import { cn } from \"@videojs/utils/style\";\n\n//#region src/minimal/tailwind/components/slider.ts\nconst slider = {\n\troot: cn(\"group/slider relative flex flex-1 items-center justify-center rounded-full outline-none cursor-pointer\", \"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-current/20 rounded-[inherit] 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-current\", \"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-current/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-current rounded-full\", \"shadow-[0_0_0_1px_var(--media-controls-current-shadow-color-subtle,oklch(0_0_0/0.1)),0_1px_3px_0_oklch(0_0_0/0.15),0_1px_2px_-1px_oklch(0_0_0/0.15)]\", \"transition-[opacity,scale,outline-offset] duration-150 ease-out select-none\", \"outline-2 outline-transparent -outline-offset-2\", \"focus-visible:outline-current 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};\n\n//#endregion\nexport { slider };\n//# sourceMappingURL=slider.js.map"],"mappings":";;;AAGA,MAAM,SAAS;CACd,MAAM,GAAG,0GAA0G,iHAAiH,yEAAyE;CAC7S,OAAO,GAAG,gFAAgF,6EAA6E,wEAAwE;CAC/O,MAAM;EACL,MAAM;EACN,MAAM,GAAG,cAAc,gFAAgF,2DAA2D,8EAA8E,wDAAwD;EACxS,QAAQ,GAAG,uCAAuC,gFAAgF,8GAA8G,8EAA8E,wGAAwG;EACta;CACD,OAAO;EACN,MAAM,GAAG,0DAA0D,2BAA2B,wJAAwJ,+EAA+E,mDAAmD,gEAAgE,oGAAoG,+GAA+G;EAC3oB,aAAa,GAAG,oCAAoC,+DAA+D,4EAA4E;EAC/L;CACD"}
@@ -0,0 +1,14 @@
1
+ import { cn } from "@videojs/utils/style";
2
+
3
+ //#region ../skins/dist/default/minimal/tailwind/components/time.js
4
+ const time = {
5
+ group: "flex items-center gap-1",
6
+ current: cn("hidden tabular-nums", "@md/media-controls:inline"),
7
+ separator: cn("hidden", "@md/media-controls:inline @md/media-controls:text-current/60"),
8
+ duration: cn("tabular-nums", "@md/media-controls:text-current/60"),
9
+ controls: cn("flex flex-row-reverse items-center flex-1 gap-3", "@md/media-controls:flex-row")
10
+ };
11
+
12
+ //#endregion
13
+ export { time };
14
+ //# sourceMappingURL=time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.js","names":[],"sources":["../../../../../../../../../skins/dist/default/minimal/tailwind/components/time.js"],"sourcesContent":["import { cn } from \"@videojs/utils/style\";\n\n//#region src/minimal/tailwind/components/time.ts\nconst time = {\n\tgroup: \"flex items-center gap-1\",\n\tcurrent: cn(\"hidden tabular-nums\", \"@md/media-controls:inline\"),\n\tseparator: cn(\"hidden\", \"@md/media-controls:inline @md/media-controls:text-current/60\"),\n\tduration: cn(\"tabular-nums\", \"@md/media-controls:text-current/60\"),\n\tcontrols: cn(\"flex flex-row-reverse items-center flex-1 gap-3\", \"@md/media-controls:flex-row\")\n};\n\n//#endregion\nexport { time };\n//# sourceMappingURL=time.js.map"],"mappings":";;;AAGA,MAAM,OAAO;CACZ,OAAO;CACP,SAAS,GAAG,uBAAuB,4BAA4B;CAC/D,WAAW,GAAG,UAAU,+DAA+D;CACvF,UAAU,GAAG,gBAAgB,qCAAqC;CAClE,UAAU,GAAG,mDAAmD,8BAA8B;CAC9F"}
@@ -0,0 +1,61 @@
1
+ import { controls as controls$1 } from "./components/controls.js";
2
+ import { error as error$1 } from "./components/error.js";
3
+ import { popup as popup$1 } from "./components/popup.js";
4
+ import { root as root$1 } from "./components/root.js";
5
+ import { iconState } from "../../shared/tailwind/icon-state.js";
6
+ import { tooltipState } from "../../shared/tailwind/tooltip-state.js";
7
+ import { bufferingIndicator } from "./components/buffering.js";
8
+ import { button } from "./components/button.js";
9
+ import { buttonGroup } from "./components/button-group.js";
10
+ import { icon, iconContainer, iconFlipped } from "./components/icon.js";
11
+ import { seek } from "./components/seek.js";
12
+ import { slider as slider$1 } from "./components/slider.js";
13
+ import { time } from "./components/time.js";
14
+ import { preview as preview$1 } from "./components/preview.js";
15
+ import { overlay } from "./components/overlay.js";
16
+ import { playbackRate } from "./components/playback-rate.js";
17
+ import { poster } from "./components/poster.js";
18
+ import { cn } from "@videojs/utils/style";
19
+
20
+ //#region ../skins/dist/default/minimal/tailwind/video.tailwind.js
21
+ const root = (isShadowDOM) => cn(root$1, "bg-black overflow-clip", "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", {
22
+ "[&_::slotted(video)]:block [&_::slotted(video)]:w-full [&_::slotted(video)]:h-full [&_::slotted(video)]:rounded-(--media-video-border-radius) [&_::slotted(video)]:[object-fit:var(--media-object-fit,cover)] [&_::slotted(video)]:[object-position:var(--media-object-position,center)]": isShadowDOM,
23
+ "[&_video]:block [&_video]:w-full [&_video]:h-full [&_video]:rounded-[inherit] [&_video]:[object-fit:var(--media-object-fit,contain)] [&_video]:[object-position:var(--media-object-position,center)]": !isShadowDOM
24
+ }, "[--media-video-border-radius:var(--media-border-radius,0.75rem)]", "[--media-controls-padding:0.375rem]", "[--media-controls-transition-duration:100ms]", "[--media-controls-transition-delay:0ms]", "[--media-controls-transition-timing-function:ease-out]", "[--media-error-dialog-transition-duration:250ms]", "[--media-error-dialog-transition-delay:100ms]", "[--media-error-dialog-transition-timing-function:ease-out]", "[--media-popup-transition-duration:100ms]", "[--media-popup-transition-timing-function:ease-out]", "motion-reduce:[--media-error-dialog-transition-duration:50ms]", "motion-reduce:[--media-error-dialog-transition-delay:0ms]", "motion-reduce:[--media-popup-transition-duration:0ms]", "[@media(pointer:fine)]:has-[[data-controls]:not([data-visible])]:[--media-controls-transition-delay:500ms]", "[@media(pointer:fine)]:has-[[data-controls]:not([data-visible])]:[--media-controls-transition-duration:300ms]", "[@media(pointer:coarse)]:has-[[data-controls]:not([data-visible])]:[--media-controls-transition-duration:150ms]", "motion-reduce:has-[[data-controls]:not([data-visible])]:[--media-controls-transition-duration:50ms]", "[--media-caption-track-y:-0.5rem]", "[--media-caption-track-delay:calc(var(--media-controls-transition-delay)_+_25ms)]", "[--media-caption-track-duration:var(--media-controls-transition-duration)]", "has-[[data-controls][data-visible]]:[--media-caption-track-y:-3rem]", !isShadowDOM ? [
25
+ "[&_video::-webkit-media-text-track-container]:transition-[translate]",
26
+ "[&_video::-webkit-media-text-track-container]:duration-(--media-caption-track-duration)",
27
+ "[&_video::-webkit-media-text-track-container]:ease-out",
28
+ "[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)",
29
+ "[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)",
30
+ "[&_video::-webkit-media-text-track-container]:scale-98",
31
+ "[&_video::-webkit-media-text-track-container]:z-1",
32
+ "[&_video::-webkit-media-text-track-container]:font-[inherit]"
33
+ ] : [], "[&:fullscreen]:[--media-border-radius:0]", {
34
+ "[&:fullscreen_video]:object-contain": !isShadowDOM,
35
+ "[&:fullscreen_::slotted(video)]:object-contain": isShadowDOM
36
+ });
37
+ const controls = cn(controls$1, "absolute bottom-0 inset-x-0", "pt-8 px-(--media-controls-padding) pb-(--media-controls-padding) gap-2", "[color:var(--media-color-primary,oklch(1_0_0))] z-10", "peer-data-open/error:hidden", "ease-(--media-controls-transition-timing-function)", "duration-(--media-controls-transition-duration)", "delay-(--media-controls-transition-delay)", "[@media(pointer:fine)]:will-change-[translate,filter,opacity]", "[@media(pointer:fine)]:transition-[translate,filter,opacity]", "[@media(pointer:coarse)]:will-change-[translate,opacity]", "[@media(pointer:coarse)]:transition-[translate,opacity]", "not-data-visible:opacity-0 not-data-visible:pointer-events-none", "motion-safe:not-data-visible:translate-y-full", "[@media(pointer:fine)]:motion-safe:not-data-visible:blur-sm", "@sm/media-root:pt-10 @sm/media-root:px-3 @sm/media-root:pb-3", "@sm/media-root:gap-3.5");
38
+ const error = {
39
+ ...error$1,
40
+ root: cn(error$1.root, "pointer-events-none outline-none"),
41
+ dialog: cn(error$1.dialog, "pointer-events-auto"),
42
+ title: cn(error$1.title, "text-lg")
43
+ };
44
+ const preview = {
45
+ ...preview$1,
46
+ root: cn("absolute left-(--media-slider-pointer) bottom-[calc(100%+0.5rem)] -translate-x-1/2", "opacity-0 scale-80 blur-sm origin-bottom", "transition-[scale,opacity,filter] duration-150", "group-data-pointing/slider:opacity-100 group-data-pointing/slider:scale-100 group-data-pointing/slider:blur-none", "[&:has([role=img][data-hidden])]:opacity-0 [&:has([role=img][data-hidden])]:scale-80 [&:has([role=img][data-hidden])]:blur-sm", "[&:has([role=img][data-loading])]:max-h-24", preview$1.root),
47
+ thumbnailWrapper: cn(preview$1.thumbnailWrapper, "after:absolute after:inset-0 after:rounded-[inherit]", "after:ring-1 after:ring-black/5 after:shadow-sm after:shadow-black/20"),
48
+ thumbnail: cn(preview$1.thumbnail, "max-w-44")
49
+ };
50
+ const slider = {
51
+ ...slider$1,
52
+ track: cn(slider$1.track, "ring-1 ring-black/5")
53
+ };
54
+ const popup = {
55
+ ...popup$1,
56
+ volume: cn(popup$1.popover, "[--media-popover-side-offset:0.5rem] p-1 bg-transparent")
57
+ };
58
+
59
+ //#endregion
60
+ export { controls, popup, preview, root, slider };
61
+ //# sourceMappingURL=video.tailwind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.tailwind.js","names":[],"sources":["../../../../../../../../skins/dist/default/minimal/tailwind/video.tailwind.js"],"sourcesContent":["import { controls as controls$1 } from \"./components/controls.js\";\nimport { error as error$1 } from \"./components/error.js\";\nimport { popup as popup$1 } from \"./components/popup.js\";\nimport { root as root$1 } from \"./components/root.js\";\nimport { iconState } from \"../../shared/tailwind/icon-state.js\";\nimport { tooltipState } from \"../../shared/tailwind/tooltip-state.js\";\nimport { bufferingIndicator } from \"./components/buffering.js\";\nimport { button } from \"./components/button.js\";\nimport { buttonGroup } from \"./components/button-group.js\";\nimport { icon, iconContainer, iconFlipped, iconHidden } from \"./components/icon.js\";\nimport { seek } from \"./components/seek.js\";\nimport { slider as slider$1 } from \"./components/slider.js\";\nimport { time } from \"./components/time.js\";\nimport { preview as preview$1 } from \"./components/preview.js\";\nimport { overlay } from \"./components/overlay.js\";\nimport { playbackRate } from \"./components/playback-rate.js\";\nimport { poster } from \"./components/poster.js\";\nimport { cn } from \"@videojs/utils/style\";\n\n//#region src/minimal/tailwind/video.tailwind.ts\nconst root = (isShadowDOM) => cn(root$1, \"bg-black overflow-clip\", \"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\", {\n\t\"[&_::slotted(video)]:block [&_::slotted(video)]:w-full [&_::slotted(video)]:h-full [&_::slotted(video)]:rounded-(--media-video-border-radius) [&_::slotted(video)]:[object-fit:var(--media-object-fit,cover)] [&_::slotted(video)]:[object-position:var(--media-object-position,center)]\": isShadowDOM,\n\t\"[&_video]:block [&_video]:w-full [&_video]:h-full [&_video]:rounded-[inherit] [&_video]:[object-fit:var(--media-object-fit,contain)] [&_video]:[object-position:var(--media-object-position,center)]\": !isShadowDOM\n}, \"[--media-video-border-radius:var(--media-border-radius,0.75rem)]\", \"[--media-controls-padding:0.375rem]\", \"[--media-controls-transition-duration:100ms]\", \"[--media-controls-transition-delay:0ms]\", \"[--media-controls-transition-timing-function:ease-out]\", \"[--media-error-dialog-transition-duration:250ms]\", \"[--media-error-dialog-transition-delay:100ms]\", \"[--media-error-dialog-transition-timing-function:ease-out]\", \"[--media-popup-transition-duration:100ms]\", \"[--media-popup-transition-timing-function:ease-out]\", \"motion-reduce:[--media-error-dialog-transition-duration:50ms]\", \"motion-reduce:[--media-error-dialog-transition-delay:0ms]\", \"motion-reduce:[--media-popup-transition-duration:0ms]\", \"[@media(pointer:fine)]:has-[[data-controls]:not([data-visible])]:[--media-controls-transition-delay:500ms]\", \"[@media(pointer:fine)]:has-[[data-controls]:not([data-visible])]:[--media-controls-transition-duration:300ms]\", \"[@media(pointer:coarse)]:has-[[data-controls]:not([data-visible])]:[--media-controls-transition-duration:150ms]\", \"motion-reduce:has-[[data-controls]:not([data-visible])]:[--media-controls-transition-duration:50ms]\", \"[--media-caption-track-y:-0.5rem]\", \"[--media-caption-track-delay:calc(var(--media-controls-transition-delay)_+_25ms)]\", \"[--media-caption-track-duration:var(--media-controls-transition-duration)]\", \"has-[[data-controls][data-visible]]:[--media-caption-track-y:-3rem]\", !isShadowDOM ? [\n\t\"[&_video::-webkit-media-text-track-container]:transition-[translate]\",\n\t\"[&_video::-webkit-media-text-track-container]:duration-(--media-caption-track-duration)\",\n\t\"[&_video::-webkit-media-text-track-container]:ease-out\",\n\t\"[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)\",\n\t\"[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)\",\n\t\"[&_video::-webkit-media-text-track-container]:scale-98\",\n\t\"[&_video::-webkit-media-text-track-container]:z-1\",\n\t\"[&_video::-webkit-media-text-track-container]:font-[inherit]\"\n] : [], \"[&:fullscreen]:[--media-border-radius:0]\", {\n\t\"[&:fullscreen_video]:object-contain\": !isShadowDOM,\n\t\"[&:fullscreen_::slotted(video)]:object-contain\": isShadowDOM\n});\nconst controls = cn(controls$1, \"absolute bottom-0 inset-x-0\", \"pt-8 px-(--media-controls-padding) pb-(--media-controls-padding) gap-2\", \"[color:var(--media-color-primary,oklch(1_0_0))] z-10\", \"peer-data-open/error:hidden\", \"ease-(--media-controls-transition-timing-function)\", \"duration-(--media-controls-transition-duration)\", \"delay-(--media-controls-transition-delay)\", \"[@media(pointer:fine)]:will-change-[translate,filter,opacity]\", \"[@media(pointer:fine)]:transition-[translate,filter,opacity]\", \"[@media(pointer:coarse)]:will-change-[translate,opacity]\", \"[@media(pointer:coarse)]:transition-[translate,opacity]\", \"not-data-visible:opacity-0 not-data-visible:pointer-events-none\", \"motion-safe:not-data-visible:translate-y-full\", \"[@media(pointer:fine)]:motion-safe:not-data-visible:blur-sm\", \"@sm/media-root:pt-10 @sm/media-root:px-3 @sm/media-root:pb-3\", \"@sm/media-root:gap-3.5\");\nconst error = {\n\t...error$1,\n\troot: cn(error$1.root, \"pointer-events-none outline-none\"),\n\tdialog: cn(error$1.dialog, \"pointer-events-auto\"),\n\ttitle: cn(error$1.title, \"text-lg\")\n};\nconst preview = {\n\t...preview$1,\n\troot: cn(\"absolute left-(--media-slider-pointer) bottom-[calc(100%+0.5rem)] -translate-x-1/2\", \"opacity-0 scale-80 blur-sm origin-bottom\", \"transition-[scale,opacity,filter] duration-150\", \"group-data-pointing/slider:opacity-100 group-data-pointing/slider:scale-100 group-data-pointing/slider:blur-none\", \"[&:has([role=img][data-hidden])]:opacity-0 [&:has([role=img][data-hidden])]:scale-80 [&:has([role=img][data-hidden])]:blur-sm\", \"[&:has([role=img][data-loading])]:max-h-24\", preview$1.root),\n\tthumbnailWrapper: cn(preview$1.thumbnailWrapper, \"after:absolute after:inset-0 after:rounded-[inherit]\", \"after:ring-1 after:ring-black/5 after:shadow-sm after:shadow-black/20\"),\n\tthumbnail: cn(preview$1.thumbnail, \"max-w-44\")\n};\nconst slider = {\n\t...slider$1,\n\ttrack: cn(slider$1.track, \"ring-1 ring-black/5\")\n};\nconst popup = {\n\t...popup$1,\n\tvolume: cn(popup$1.popover, \"[--media-popover-side-offset:0.5rem] p-1 bg-transparent\")\n};\n\n//#endregion\nexport { bufferingIndicator, button, buttonGroup, controls, error, icon, iconContainer, iconFlipped, iconHidden, iconState, overlay, playbackRate, popup, poster, preview, root, seek, slider, time, tooltipState };\n//# sourceMappingURL=video.tailwind.js.map"],"mappings":";;;;;;;;;;;;;;;;;;;;AAoBA,MAAM,QAAQ,gBAAgB,GAAG,QAAQ,0BAA0B,+EAA+E,4FAA4F;CAC7O,4RAA4R;CAC5R,wMAAwM,CAAC;CACzM,EAAE,oEAAoE,uCAAuC,gDAAgD,2CAA2C,0DAA0D,oDAAoD,iDAAiD,8DAA8D,6CAA6C,uDAAuD,iEAAiE,6DAA6D,yDAAyD,8GAA8G,iHAAiH,mHAAmH,uGAAuG,qCAAqC,qFAAqF,8EAA8E,uEAAuE,CAAC,cAAc;CACv5C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,GAAG,EAAE,EAAE,4CAA4C;CACnD,uCAAuC,CAAC;CACxC,kDAAkD;CAClD,CAAC;AACF,MAAM,WAAW,GAAG,YAAY,+BAA+B,0EAA0E,wDAAwD,+BAA+B,sDAAsD,mDAAmD,6CAA6C,iEAAiE,gEAAgE,4DAA4D,2DAA2D,mEAAmE,iDAAiD,+DAA+D,gEAAgE,yBAAyB;AAC13B,MAAM,QAAQ;CACb,GAAG;CACH,MAAM,GAAG,QAAQ,MAAM,mCAAmC;CAC1D,QAAQ,GAAG,QAAQ,QAAQ,sBAAsB;CACjD,OAAO,GAAG,QAAQ,OAAO,UAAU;CACnC;AACD,MAAM,UAAU;CACf,GAAG;CACH,MAAM,GAAG,sFAAsF,4CAA4C,kDAAkD,oHAAoH,iIAAiI,8CAA8C,UAAU,KAAK;CAC/e,kBAAkB,GAAG,UAAU,kBAAkB,wDAAwD,wEAAwE;CACjL,WAAW,GAAG,UAAU,WAAW,WAAW;CAC9C;AACD,MAAM,SAAS;CACd,GAAG;CACH,OAAO,GAAG,SAAS,OAAO,sBAAsB;CAChD;AACD,MAAM,QAAQ;CACb,GAAG;CACH,QAAQ,GAAG,QAAQ,SAAS,0DAA0D;CACtF"}
@@ -0,0 +1,34 @@
1
+ //#region ../skins/dist/default/shared/tailwind/icon-state.js
2
+ const iconState = {
3
+ play: {
4
+ button: "group",
5
+ restart: "hidden opacity-0 group-data-ended:block group-data-ended:opacity-100",
6
+ play: "hidden opacity-0 group-not-data-ended:group-data-paused:block group-not-data-ended:group-data-paused:opacity-100",
7
+ pause: "hidden opacity-0 group-not-data-paused:group-not-data-ended:block group-not-data-paused:group-not-data-ended:opacity-100"
8
+ },
9
+ mute: {
10
+ button: "group",
11
+ volumeOff: "hidden opacity-0 group-data-muted:block group-data-muted:opacity-100",
12
+ 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",
13
+ 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"
14
+ },
15
+ fullscreen: {
16
+ button: "group",
17
+ enter: "hidden opacity-0 group-not-data-fullscreen:block group-not-data-fullscreen:opacity-100",
18
+ exit: "hidden opacity-0 group-data-fullscreen:block group-data-fullscreen:opacity-100"
19
+ },
20
+ captions: {
21
+ button: "group",
22
+ off: "hidden opacity-0 group-not-data-active:block group-not-data-active:opacity-100",
23
+ on: "hidden opacity-0 group-data-active:block group-data-active:opacity-100"
24
+ },
25
+ pip: {
26
+ button: "group",
27
+ off: "hidden opacity-0 group-not-data-pip:block group-not-data-pip:opacity-100",
28
+ on: "hidden opacity-0 group-data-pip:block group-data-pip:opacity-100"
29
+ }
30
+ };
31
+
32
+ //#endregion
33
+ export { iconState };
34
+ //# sourceMappingURL=icon-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-state.js","names":[],"sources":["../../../../../../../../skins/dist/default/shared/tailwind/icon-state.js"],"sourcesContent":["//#region src/shared/tailwind/icon-state.ts\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\tpip: {\n\t\tbutton: \"group\",\n\t\toff: \"hidden opacity-0 group-not-data-pip:block group-not-data-pip:opacity-100\",\n\t\ton: \"hidden opacity-0 group-data-pip:block group-data-pip:opacity-100\"\n\t}\n};\n\n//#endregion\nexport { iconState };\n//# sourceMappingURL=icon-state.js.map"],"mappings":";AACA,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,KAAK;EACJ,QAAQ;EACR,KAAK;EACL,IAAI;EACJ;CACD"}
@@ -0,0 +1,28 @@
1
+ //#region ../skins/dist/default/shared/tailwind/tooltip-state.js
2
+ const tooltipState = {
3
+ play: {
4
+ wrapper: "contents group/play-tip",
5
+ replay: "hidden group-has-data-ended/play-tip:block",
6
+ play: "hidden group-[:has([data-paused]):not(:has([data-ended]))]/play-tip:block",
7
+ pause: "hidden group-[:not(:has([data-paused])):not(:has([data-ended]))]/play-tip:block"
8
+ },
9
+ fullscreen: {
10
+ wrapper: "contents group/fullscreen-tip",
11
+ enter: "hidden group-[:not(:has([data-fullscreen]))]/fullscreen-tip:block",
12
+ exit: "hidden group-has-data-fullscreen/fullscreen-tip:block"
13
+ },
14
+ captions: {
15
+ wrapper: "contents group/captions-tip",
16
+ enable: "hidden group-[:not(:has([data-active]))]/captions-tip:block",
17
+ disable: "hidden group-has-data-active/captions-tip:block"
18
+ },
19
+ pip: {
20
+ wrapper: "contents group/pip-tip",
21
+ enter: "hidden group-[:not(:has([data-pip]))]/pip-tip:block",
22
+ exit: "hidden group-has-data-pip/pip-tip:block"
23
+ }
24
+ };
25
+
26
+ //#endregion
27
+ export { tooltipState };
28
+ //# sourceMappingURL=tooltip-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip-state.js","names":[],"sources":["../../../../../../../../skins/dist/default/shared/tailwind/tooltip-state.js"],"sourcesContent":["//#region src/shared/tailwind/tooltip-state.ts\nconst tooltipState = {\n\tplay: {\n\t\twrapper: \"contents group/play-tip\",\n\t\treplay: \"hidden group-has-data-ended/play-tip:block\",\n\t\tplay: \"hidden group-[:has([data-paused]):not(:has([data-ended]))]/play-tip:block\",\n\t\tpause: \"hidden group-[:not(:has([data-paused])):not(:has([data-ended]))]/play-tip:block\"\n\t},\n\tfullscreen: {\n\t\twrapper: \"contents group/fullscreen-tip\",\n\t\tenter: \"hidden group-[:not(:has([data-fullscreen]))]/fullscreen-tip:block\",\n\t\texit: \"hidden group-has-data-fullscreen/fullscreen-tip:block\"\n\t},\n\tcaptions: {\n\t\twrapper: \"contents group/captions-tip\",\n\t\tenable: \"hidden group-[:not(:has([data-active]))]/captions-tip:block\",\n\t\tdisable: \"hidden group-has-data-active/captions-tip:block\"\n\t},\n\tpip: {\n\t\twrapper: \"contents group/pip-tip\",\n\t\tenter: \"hidden group-[:not(:has([data-pip]))]/pip-tip:block\",\n\t\texit: \"hidden group-has-data-pip/pip-tip:block\"\n\t}\n};\n\n//#endregion\nexport { tooltipState };\n//# sourceMappingURL=tooltip-state.js.map"],"mappings":";AACA,MAAM,eAAe;CACpB,MAAM;EACL,SAAS;EACT,QAAQ;EACR,MAAM;EACN,OAAO;EACP;CACD,YAAY;EACX,SAAS;EACT,OAAO;EACP,MAAM;EACN;CACD,UAAU;EACT,SAAS;EACT,QAAQ;EACR,SAAS;EACT;CACD,KAAK;EACJ,SAAS;EACT,OAAO;EACP,MAAM;EACN;CACD"}
@@ -1,25 +1,31 @@
1
1
  import { ContextConsumer } from "@videojs/element/context";
2
- import { noop } from "@videojs/utils/function";
3
2
 
4
3
  //#region src/store/container-mixin.ts
5
4
  /**
6
- * Create a mixin that consumes player context and auto-attaches media elements.
5
+ * Create a mixin that consumes player context and registers itself as the
6
+ * container element with the provider via `containerContext`.
7
7
  *
8
- * @param context - Player context to consume from an ancestor provider.
8
+ * @param config - Container configuration with player and container contexts.
9
9
  */
10
- function createContainerMixin(context) {
10
+ function createContainerMixin(config) {
11
11
  return (BaseClass) => {
12
12
  class PlayerContainerElement extends BaseClass {
13
- #detach = noop;
14
- #observer = null;
15
13
  #contextStore = null;
14
+ #setContainer = null;
16
15
  constructor(...args) {
17
16
  super(...args);
18
17
  new ContextConsumer(this, {
19
- context,
18
+ context: config.playerContext,
20
19
  callback: (value) => {
21
20
  this.#contextStore = value ?? null;
22
- this.#attachMedia();
21
+ },
22
+ subscribe: true
23
+ });
24
+ new ContextConsumer(this, {
25
+ context: config.containerContext,
26
+ callback: (value) => {
27
+ this.#setContainer = value?.setContainer ?? null;
28
+ if (this.isConnected) this.#setContainer?.(this);
23
29
  },
24
30
  subscribe: true
25
31
  });
@@ -29,52 +35,16 @@ function createContainerMixin(context) {
29
35
  }
30
36
  connectedCallback() {
31
37
  super.connectedCallback();
32
- this.#observer = new MutationObserver((records) => {
33
- if (records.some(hasMediaNode)) this.#attachMedia();
34
- });
35
- this.#observer.observe(this, {
36
- childList: true,
37
- subtree: true
38
- });
39
- this.#attachMedia();
38
+ this.#setContainer?.(this);
40
39
  }
41
40
  disconnectedCallback() {
42
41
  super.disconnectedCallback();
43
- this.#observer?.disconnect();
44
- this.#observer = null;
45
- this.#detach();
46
- }
47
- #attachMedia() {
48
- const store = this.#contextStore ?? this.store;
49
- if (!store) return;
50
- const media = this.querySelector("video, audio");
51
- if (!media) {
52
- this.#detach();
53
- this.#detach = noop;
54
- return;
55
- }
56
- const target = {
57
- media,
58
- container: this
59
- };
60
- const hasMediaChanged = store.target?.media !== target.media, hasContainerChanged = store.target?.container !== target.container;
61
- if (hasMediaChanged || hasContainerChanged) {
62
- this.#detach();
63
- this.#detach = store.attach(target);
64
- }
42
+ this.#setContainer?.(null);
65
43
  }
66
44
  }
67
45
  return PlayerContainerElement;
68
46
  };
69
47
  }
70
- function isMediaNode(node) {
71
- return node instanceof HTMLMediaElement;
72
- }
73
- function hasMediaNode(record) {
74
- for (const node of record.addedNodes) if (isMediaNode(node)) return true;
75
- for (const node of record.removedNodes) if (isMediaNode(node)) return true;
76
- return false;
77
- }
78
48
 
79
49
  //#endregion
80
50
  export { createContainerMixin };
@@ -1 +1 @@
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
+ {"version":3,"file":"container-mixin.js","names":["#contextStore","#setContainer"],"sources":["../../../src/store/container-mixin.ts"],"sourcesContent":["import type { MediaContainer, PlayerStore } from '@videojs/core/dom';\nimport { ContextConsumer } from '@videojs/element/context';\nimport type { MediaElementConstructor } from '@/ui/media-element';\nimport type { ContainerContext, PlayerContext } from '../player/context';\nimport type { PlayerConsumer, PlayerConsumerConstructor } from './types';\n\nexport interface ContainerMixinConfig<Store extends PlayerStore> {\n playerContext: PlayerContext<Store>;\n containerContext: ContainerContext;\n}\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 registers itself as the\n * container element with the provider via `containerContext`.\n *\n * @param config - Container configuration with player and container contexts.\n */\nexport function createContainerMixin<Store extends PlayerStore>(\n config: ContainerMixinConfig<Store>\n): ContainerMixin<Store> {\n return <Class extends MediaElementConstructor>(BaseClass: Class) => {\n class PlayerContainerElement extends BaseClass implements PlayerConsumer<Store>, MediaContainer {\n #contextStore: Store | null = null;\n #setContainer: ((container: MediaContainer | null) => void) | null = null;\n\n constructor(...args: any[]) {\n super(...args);\n\n new ContextConsumer(this, {\n context: config.playerContext,\n callback: (value) => {\n this.#contextStore = value ?? null;\n },\n subscribe: true,\n });\n\n new ContextConsumer(this, {\n context: config.containerContext,\n callback: (value) => {\n this.#setContainer = value?.setContainer ?? null;\n if (this.isConnected) this.#setContainer?.(this);\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 this.#setContainer?.(this);\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.#setContainer?.(null);\n }\n }\n\n return PlayerContainerElement;\n };\n}\n"],"mappings":";;;;;;;;;AAqBA,SAAgB,qBACd,QACuB;AACvB,SAA+C,cAAqB;EAClE,MAAM,+BAA+B,UAA2D;GAC9F,gBAA8B;GAC9B,gBAAqE;GAErE,YAAY,GAAG,MAAa;AAC1B,UAAM,GAAG,KAAK;AAEd,QAAI,gBAAgB,MAAM;KACxB,SAAS,OAAO;KAChB,WAAW,UAAU;AACnB,YAAKA,eAAgB,SAAS;;KAEhC,WAAW;KACZ,CAAC;AAEF,QAAI,gBAAgB,MAAM;KACxB,SAAS,OAAO;KAChB,WAAW,UAAU;AACnB,YAAKC,eAAgB,OAAO,gBAAgB;AAC5C,UAAI,KAAK,YAAa,OAAKA,eAAgB,KAAK;;KAElD,WAAW;KACZ,CAAC;;GAGJ,IAAI,QAAsB;AACxB,WAAO,MAAKD;;GAGd,AAAS,oBAAoB;AAC3B,UAAM,mBAAmB;AACzB,UAAKC,eAAgB,KAAK;;GAG5B,AAAS,uBAAuB;AAC9B,UAAM,sBAAsB;AAC5B,UAAKA,eAAgB,KAAK;;;AAI9B,SAAO"}
@@ -0,0 +1,45 @@
1
+ import { mediaContext } from "../player/context.js";
2
+ import { ContextEvent } from "@videojs/element/context";
3
+
4
+ //#region src/store/media-attach-mixin.ts
5
+ /**
6
+ * Create a mixin that consumes `mediaContext` and registers the
7
+ * element as the media with the provider.
8
+ *
9
+ * Uses the raw context-request protocol so it works with any
10
+ * `HTMLElement` subclass — no `ReactiveControllerHost` required.
11
+ *
12
+ * @param context - The media context to consume.
13
+ */
14
+ function createMediaAttachMixin(context) {
15
+ return (BaseClass) => {
16
+ class MediaAttachElement extends BaseClass {
17
+ #setMedia = null;
18
+ #unsubscribe = null;
19
+ getMediaTarget() {
20
+ return this;
21
+ }
22
+ connectedCallback() {
23
+ super.connectedCallback?.();
24
+ this.dispatchEvent(new ContextEvent(context, this, (value, unsubscribe) => {
25
+ if (unsubscribe) this.#unsubscribe = unsubscribe;
26
+ this.#setMedia = value?.setMedia ?? null;
27
+ if (this.isConnected) this.#setMedia?.(this.getMediaTarget());
28
+ }, true));
29
+ }
30
+ disconnectedCallback() {
31
+ super.disconnectedCallback?.();
32
+ this.#setMedia?.(null);
33
+ this.#unsubscribe?.();
34
+ this.#unsubscribe = null;
35
+ this.#setMedia = null;
36
+ }
37
+ }
38
+ return MediaAttachElement;
39
+ };
40
+ }
41
+ const MediaAttachMixin = createMediaAttachMixin(mediaContext);
42
+
43
+ //#endregion
44
+ export { MediaAttachMixin, createMediaAttachMixin };
45
+ //# sourceMappingURL=media-attach-mixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-attach-mixin.js","names":["#unsubscribe","#setMedia"],"sources":["../../../src/store/media-attach-mixin.ts"],"sourcesContent":["import type { Media } from '@videojs/core/dom';\nimport { ContextEvent } from '@videojs/element/context';\nimport type { CustomElement } from '@videojs/utils/dom';\nimport type { AnyConstructor, Constructor } from '@videojs/utils/types';\nimport { type MediaContext, mediaContext } from '../player/context';\n\nexport type MediaAttachMixin = <Class extends AnyConstructor<HTMLElement>>(BaseClass: Class) => Class;\n\n/**\n * Create a mixin that consumes `mediaContext` and registers the\n * element as the media with the provider.\n *\n * Uses the raw context-request protocol so it works with any\n * `HTMLElement` subclass — no `ReactiveControllerHost` required.\n *\n * @param context - The media context to consume.\n */\nexport function createMediaAttachMixin(context: MediaContext): MediaAttachMixin {\n return <Class extends AnyConstructor<HTMLElement>>(BaseClass: Class) => {\n class MediaAttachElement extends (BaseClass as unknown as Constructor<CustomElement>) {\n #setMedia: ((media: Media | null) => void) | null = null;\n #unsubscribe: (() => void) | null = null;\n\n getMediaTarget(): Media | null {\n return this as unknown as Media;\n }\n\n override connectedCallback() {\n super.connectedCallback?.();\n\n this.dispatchEvent(\n new ContextEvent(\n context,\n this,\n (value, unsubscribe) => {\n if (unsubscribe) this.#unsubscribe = unsubscribe;\n this.#setMedia = value?.setMedia ?? null;\n if (this.isConnected) {\n this.#setMedia?.(this.getMediaTarget());\n }\n },\n true\n )\n );\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback?.();\n this.#setMedia?.(null);\n this.#unsubscribe?.();\n this.#unsubscribe = null;\n this.#setMedia = null;\n }\n }\n\n return MediaAttachElement as unknown as Class;\n };\n}\n\nexport const MediaAttachMixin = createMediaAttachMixin(mediaContext);\n"],"mappings":";;;;;;;;;;;;;AAiBA,SAAgB,uBAAuB,SAAyC;AAC9E,SAAmD,cAAqB;EACtE,MAAM,2BAA4B,UAAoD;GACpF,YAAoD;GACpD,eAAoC;GAEpC,iBAA+B;AAC7B,WAAO;;GAGT,AAAS,oBAAoB;AAC3B,UAAM,qBAAqB;AAE3B,SAAK,cACH,IAAI,aACF,SACA,OACC,OAAO,gBAAgB;AACtB,SAAI,YAAa,OAAKA,cAAe;AACrC,WAAKC,WAAY,OAAO,YAAY;AACpC,SAAI,KAAK,YACP,OAAKA,WAAY,KAAK,gBAAgB,CAAC;OAG3C,KACD,CACF;;GAGH,AAAS,uBAAuB;AAC9B,UAAM,wBAAwB;AAC9B,UAAKA,WAAY,KAAK;AACtB,UAAKD,eAAgB;AACrB,UAAKA,cAAe;AACpB,UAAKC,WAAY;;;AAIrB,SAAO;;;AAIX,MAAa,mBAAmB,uBAAuB,aAAa"}
@@ -3,32 +3,122 @@ import { isNull } from "@videojs/utils/predicate";
3
3
 
4
4
  //#region src/store/provider-mixin.ts
5
5
  /**
6
- * Create a mixin that provides player context to descendant elements.
6
+ * Create a mixin that provides player context to descendant elements and
7
+ * owns the `store.attach()` lifecycle.
7
8
  *
8
- * @param context - Player context to provide to descendants.
9
- * @param factory - Factory function that creates a store instance.
9
+ * Media and container elements register themselves via media/container
10
+ * contexts that carry both the current value and a setter. When a media
11
+ * element is available, the provider calls `store.attach({ media, container })`.
12
+ *
13
+ * As a fallback for plain `<video>`/`<audio>` that can't consume context,
14
+ * the provider queries its subtree after a microtask.
15
+ *
16
+ * @param config - Provider configuration with contexts and store factory.
10
17
  */
11
- function createProviderMixin(context, factory) {
18
+ function createProviderMixin(config) {
12
19
  return (BaseClass) => {
13
20
  class PlayerProviderElement extends BaseClass {
14
- #store = factory();
15
- #provider = new ContextProvider(this, {
16
- context,
21
+ #store = config.factory();
22
+ #detach = null;
23
+ #media = null;
24
+ #container = null;
25
+ #fallbackQueued = false;
26
+ #setMedia = (media) => {
27
+ if (this.#media === media) return;
28
+ this.#media = media;
29
+ this.#mediaProvider.setValue({
30
+ media,
31
+ setMedia: this.#setMedia
32
+ });
33
+ this.#tryAttach();
34
+ };
35
+ #setContainer = (container) => {
36
+ if (this.#container === container) return;
37
+ this.#container = container;
38
+ this.#containerProvider.setValue({
39
+ container,
40
+ setContainer: this.#setContainer
41
+ });
42
+ this.#tryAttach();
43
+ };
44
+ #playerProvider = new ContextProvider(this, {
45
+ context: config.playerContext,
17
46
  initialValue: this.store
18
47
  });
48
+ #mediaProvider = new ContextProvider(this, {
49
+ context: config.mediaContext,
50
+ initialValue: {
51
+ media: this.#media,
52
+ setMedia: this.#setMedia
53
+ }
54
+ });
55
+ #containerProvider = new ContextProvider(this, {
56
+ context: config.containerContext,
57
+ initialValue: {
58
+ container: this.#container,
59
+ setContainer: this.#setContainer
60
+ }
61
+ });
19
62
  get store() {
20
- if (isNull(this.#store)) this.#store = factory();
63
+ if (isNull(this.#store)) this.#store = config.factory();
21
64
  return this.#store;
22
65
  }
23
66
  connectedCallback() {
24
67
  super.connectedCallback();
25
- this.#provider.setValue(this.store);
68
+ this.#playerProvider.setValue(this.store);
69
+ this.#mediaProvider.setValue({
70
+ media: this.#media,
71
+ setMedia: this.#setMedia
72
+ });
73
+ this.#containerProvider.setValue({
74
+ container: this.#container,
75
+ setContainer: this.#setContainer
76
+ });
77
+ this.#tryAttach();
78
+ this.#queueFallbackDiscovery();
79
+ }
80
+ disconnectedCallback() {
81
+ super.disconnectedCallback();
82
+ this.#detachStore();
26
83
  }
27
84
  destroyCallback() {
85
+ this.#detachStore();
28
86
  this.#store?.destroy();
29
87
  this.#store = null;
30
88
  super.destroyCallback();
31
89
  }
90
+ #tryAttach() {
91
+ const store = this.#store;
92
+ if (!store) return;
93
+ if (!this.#media) {
94
+ this.#detachStore();
95
+ return;
96
+ }
97
+ const target = {
98
+ media: this.#media,
99
+ container: this.#container
100
+ };
101
+ const hasMediaChanged = store.target?.media !== target.media;
102
+ const hasContainerChanged = store.target?.container !== target.container;
103
+ if (hasMediaChanged || hasContainerChanged) {
104
+ this.#detachStore();
105
+ this.#detach = store.attach(target);
106
+ }
107
+ }
108
+ #detachStore() {
109
+ this.#detach?.();
110
+ this.#detach = null;
111
+ }
112
+ #queueFallbackDiscovery() {
113
+ if (this.#media || this.#fallbackQueued) return;
114
+ this.#fallbackQueued = true;
115
+ queueMicrotask(() => {
116
+ this.#fallbackQueued = false;
117
+ if (this.#media) return;
118
+ const media = this.querySelector("video, audio");
119
+ if (media) this.#setMedia(media);
120
+ });
121
+ }
32
122
  }
33
123
  return PlayerProviderElement;
34
124
  };
@@ -1 +1 @@
1
- {"version":3,"file":"provider-mixin.js","names":["#store","#provider"],"sources":["../../../src/store/provider-mixin.ts"],"sourcesContent":["import type { PlayerStore } from '@videojs/core/dom';\nimport { ContextProvider } from '@videojs/element/context';\nimport { isNull } from '@videojs/utils/predicate';\nimport type { MediaElementConstructor } from '@/ui/media-element';\nimport type { PlayerContext } from '../player/context';\nimport type { PlayerProvider, PlayerProviderConstructor } from './types';\n\nexport type ProviderMixin<Store extends PlayerStore> = <Class extends MediaElementConstructor>(\n BaseClass: Class\n) => Class & PlayerProviderConstructor<Store>;\n\n/**\n * Create a mixin that provides player context to descendant elements.\n *\n * @param context - Player context to provide to descendants.\n * @param factory - Factory function that creates a store instance.\n */\nexport function createProviderMixin<Store extends PlayerStore>(\n context: PlayerContext<Store>,\n factory: () => Store\n): ProviderMixin<Store> {\n return <Class extends MediaElementConstructor>(BaseClass: Class) => {\n class PlayerProviderElement extends BaseClass implements PlayerProvider<Store> {\n #store: Store | null = factory();\n\n #provider = new ContextProvider(this, {\n context,\n initialValue: this.store,\n });\n\n get store(): Store {\n if (isNull(this.#store)) {\n this.#store = factory();\n }\n\n return this.#store;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.#provider.setValue(this.store);\n }\n\n override destroyCallback() {\n this.#store?.destroy();\n this.#store = null;\n super.destroyCallback();\n }\n }\n\n return PlayerProviderElement;\n };\n}\n"],"mappings":";;;;;;;;;;AAiBA,SAAgB,oBACd,SACA,SACsB;AACtB,SAA+C,cAAqB;EAClE,MAAM,8BAA8B,UAA2C;GAC7E,SAAuB,SAAS;GAEhC,YAAY,IAAI,gBAAgB,MAAM;IACpC;IACA,cAAc,KAAK;IACpB,CAAC;GAEF,IAAI,QAAe;AACjB,QAAI,OAAO,MAAKA,MAAO,CACrB,OAAKA,QAAS,SAAS;AAGzB,WAAO,MAAKA;;GAGd,AAAS,oBAAoB;AAC3B,UAAM,mBAAmB;AACzB,UAAKC,SAAU,SAAS,KAAK,MAAM;;GAGrC,AAAS,kBAAkB;AACzB,UAAKD,OAAQ,SAAS;AACtB,UAAKA,QAAS;AACd,UAAM,iBAAiB;;;AAI3B,SAAO"}
1
+ {"version":3,"file":"provider-mixin.js","names":["#media","#mediaProvider","#setMedia","#tryAttach","#container","#containerProvider","#setContainer","#store","#playerProvider","#queueFallbackDiscovery","#detachStore","#detach","#fallbackQueued"],"sources":["../../../src/store/provider-mixin.ts"],"sourcesContent":["import type { Media, MediaContainer, PlayerStore, PlayerTarget } from '@videojs/core/dom';\nimport { ContextProvider } from '@videojs/element/context';\nimport { isNull } from '@videojs/utils/predicate';\nimport type { MediaElementConstructor } from '@/ui/media-element';\nimport type { ContainerContext, MediaContext, PlayerContext } from '../player/context';\nimport type { PlayerProvider, PlayerProviderConstructor } from './types';\n\nexport interface ProviderMixinConfig<Store extends PlayerStore> {\n playerContext: PlayerContext<Store>;\n mediaContext: MediaContext;\n containerContext: ContainerContext;\n factory: () => Store;\n}\n\nexport type ProviderMixin<Store extends PlayerStore> = <Class extends MediaElementConstructor>(\n BaseClass: Class\n) => Class & PlayerProviderConstructor<Store>;\n\n/**\n * Create a mixin that provides player context to descendant elements and\n * owns the `store.attach()` lifecycle.\n *\n * Media and container elements register themselves via media/container\n * contexts that carry both the current value and a setter. When a media\n * element is available, the provider calls `store.attach({ media, container })`.\n *\n * As a fallback for plain `<video>`/`<audio>` that can't consume context,\n * the provider queries its subtree after a microtask.\n *\n * @param config - Provider configuration with contexts and store factory.\n */\nexport function createProviderMixin<Store extends PlayerStore>(\n config: ProviderMixinConfig<Store>\n): ProviderMixin<Store> {\n return <Class extends MediaElementConstructor>(BaseClass: Class) => {\n class PlayerProviderElement extends BaseClass implements PlayerProvider<Store> {\n #store: Store | null = config.factory();\n #detach: (() => void) | null = null;\n #media: Media | null = null;\n #container: MediaContainer | null = null;\n #fallbackQueued = false;\n\n #setMedia = (media: Media | null): void => {\n if (this.#media === media) return;\n this.#media = media;\n this.#mediaProvider.setValue({ media, setMedia: this.#setMedia });\n this.#tryAttach();\n };\n\n #setContainer = (container: MediaContainer | null): void => {\n if (this.#container === container) return;\n this.#container = container;\n this.#containerProvider.setValue({ container, setContainer: this.#setContainer });\n this.#tryAttach();\n };\n\n #playerProvider = new ContextProvider(this, {\n context: config.playerContext,\n initialValue: this.store,\n });\n\n #mediaProvider = new ContextProvider(this, {\n context: config.mediaContext,\n initialValue: { media: this.#media, setMedia: this.#setMedia },\n });\n\n #containerProvider = new ContextProvider(this, {\n context: config.containerContext,\n initialValue: { container: this.#container, setContainer: this.#setContainer },\n });\n\n get store(): Store {\n if (isNull(this.#store)) {\n this.#store = config.factory();\n }\n\n return this.#store;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.#playerProvider.setValue(this.store);\n this.#mediaProvider.setValue({ media: this.#media, setMedia: this.#setMedia });\n this.#containerProvider.setValue({ container: this.#container, setContainer: this.#setContainer });\n this.#tryAttach();\n this.#queueFallbackDiscovery();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.#detachStore();\n }\n\n override destroyCallback() {\n this.#detachStore();\n this.#store?.destroy();\n this.#store = null;\n super.destroyCallback();\n }\n\n #tryAttach(): void {\n const store = this.#store;\n if (!store) return;\n\n if (!this.#media) {\n this.#detachStore();\n return;\n }\n\n const target: PlayerTarget = {\n media: this.#media,\n container: this.#container,\n };\n\n const hasMediaChanged = store.target?.media !== target.media;\n const hasContainerChanged = store.target?.container !== target.container;\n\n if (hasMediaChanged || hasContainerChanged) {\n this.#detachStore();\n this.#detach = store.attach(target);\n }\n }\n\n #detachStore(): void {\n this.#detach?.();\n this.#detach = null;\n }\n\n #queueFallbackDiscovery(): void {\n if (this.#media || this.#fallbackQueued) return;\n this.#fallbackQueued = true;\n\n queueMicrotask(() => {\n this.#fallbackQueued = false;\n\n // Context already registered media — skip fallback.\n if (this.#media) return;\n\n const media = this.querySelector<HTMLMediaElement>('video, audio');\n if (media) {\n this.#setMedia(media);\n }\n });\n }\n }\n\n return PlayerProviderElement;\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA+BA,SAAgB,oBACd,QACsB;AACtB,SAA+C,cAAqB;EAClE,MAAM,8BAA8B,UAA2C;GAC7E,SAAuB,OAAO,SAAS;GACvC,UAA+B;GAC/B,SAAuB;GACvB,aAAoC;GACpC,kBAAkB;GAElB,aAAa,UAA8B;AACzC,QAAI,MAAKA,UAAW,MAAO;AAC3B,UAAKA,QAAS;AACd,UAAKC,cAAe,SAAS;KAAE;KAAO,UAAU,MAAKC;KAAW,CAAC;AACjE,UAAKC,WAAY;;GAGnB,iBAAiB,cAA2C;AAC1D,QAAI,MAAKC,cAAe,UAAW;AACnC,UAAKA,YAAa;AAClB,UAAKC,kBAAmB,SAAS;KAAE;KAAW,cAAc,MAAKC;KAAe,CAAC;AACjF,UAAKH,WAAY;;GAGnB,kBAAkB,IAAI,gBAAgB,MAAM;IAC1C,SAAS,OAAO;IAChB,cAAc,KAAK;IACpB,CAAC;GAEF,iBAAiB,IAAI,gBAAgB,MAAM;IACzC,SAAS,OAAO;IAChB,cAAc;KAAE,OAAO,MAAKH;KAAQ,UAAU,MAAKE;KAAW;IAC/D,CAAC;GAEF,qBAAqB,IAAI,gBAAgB,MAAM;IAC7C,SAAS,OAAO;IAChB,cAAc;KAAE,WAAW,MAAKE;KAAY,cAAc,MAAKE;KAAe;IAC/E,CAAC;GAEF,IAAI,QAAe;AACjB,QAAI,OAAO,MAAKC,MAAO,CACrB,OAAKA,QAAS,OAAO,SAAS;AAGhC,WAAO,MAAKA;;GAGd,AAAS,oBAAoB;AAC3B,UAAM,mBAAmB;AACzB,UAAKC,eAAgB,SAAS,KAAK,MAAM;AACzC,UAAKP,cAAe,SAAS;KAAE,OAAO,MAAKD;KAAQ,UAAU,MAAKE;KAAW,CAAC;AAC9E,UAAKG,kBAAmB,SAAS;KAAE,WAAW,MAAKD;KAAY,cAAc,MAAKE;KAAe,CAAC;AAClG,UAAKH,WAAY;AACjB,UAAKM,wBAAyB;;GAGhC,AAAS,uBAAuB;AAC9B,UAAM,sBAAsB;AAC5B,UAAKC,aAAc;;GAGrB,AAAS,kBAAkB;AACzB,UAAKA,aAAc;AACnB,UAAKH,OAAQ,SAAS;AACtB,UAAKA,QAAS;AACd,UAAM,iBAAiB;;GAGzB,aAAmB;IACjB,MAAM,QAAQ,MAAKA;AACnB,QAAI,CAAC,MAAO;AAEZ,QAAI,CAAC,MAAKP,OAAQ;AAChB,WAAKU,aAAc;AACnB;;IAGF,MAAM,SAAuB;KAC3B,OAAO,MAAKV;KACZ,WAAW,MAAKI;KACjB;IAED,MAAM,kBAAkB,MAAM,QAAQ,UAAU,OAAO;IACvD,MAAM,sBAAsB,MAAM,QAAQ,cAAc,OAAO;AAE/D,QAAI,mBAAmB,qBAAqB;AAC1C,WAAKM,aAAc;AACnB,WAAKC,SAAU,MAAM,OAAO,OAAO;;;GAIvC,eAAqB;AACnB,UAAKA,UAAW;AAChB,UAAKA,SAAU;;GAGjB,0BAAgC;AAC9B,QAAI,MAAKX,SAAU,MAAKY,eAAiB;AACzC,UAAKA,iBAAkB;AAEvB,yBAAqB;AACnB,WAAKA,iBAAkB;AAGvB,SAAI,MAAKZ,MAAQ;KAEjB,MAAM,QAAQ,KAAK,cAAgC,eAAe;AAClE,SAAI,MACF,OAAKE,SAAU,MAAM;MAEvB;;;AAIN,SAAO"}