@videojs/html 10.0.0-beta.2 → 10.0.0-beta.22

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 (984) hide show
  1. package/cdn/abort-C9UiBdVU.js +2 -0
  2. package/cdn/abort-C9UiBdVU.js.map +1 -0
  3. package/cdn/abort-DsTff8mS.js +22 -0
  4. package/cdn/abort-DsTff8mS.js.map +1 -0
  5. package/cdn/audio-minimal-ui.dev.d.ts +1 -0
  6. package/cdn/audio-minimal-ui.dev.js +4 -0
  7. package/cdn/audio-minimal-ui.js +1 -0
  8. package/cdn/audio-minimal.dev.d.ts +1 -0
  9. package/cdn/audio-minimal.dev.js +93 -5331
  10. package/cdn/audio-minimal.dev.js.map +1 -1
  11. package/cdn/audio-minimal.js +1 -24
  12. package/cdn/audio-minimal.js.map +1 -1
  13. package/cdn/audio-ui.dev.d.ts +1 -0
  14. package/cdn/audio-ui.dev.js +4 -0
  15. package/cdn/audio-ui.js +1 -0
  16. package/cdn/audio.dev.d.ts +1 -0
  17. package/cdn/audio.dev.js +107 -5325
  18. package/cdn/audio.dev.js.map +1 -1
  19. package/cdn/audio.js +1 -24
  20. package/cdn/audio.js.map +1 -1
  21. package/cdn/background.dev.d.ts +1 -0
  22. package/cdn/background.dev.js +105 -2017
  23. package/cdn/background.dev.js.map +1 -1
  24. package/cdn/background.js +1 -18
  25. package/cdn/background.js.map +1 -1
  26. package/cdn/compounds-CCgS3IGo.js +8 -0
  27. package/cdn/compounds-CCgS3IGo.js.map +1 -0
  28. package/cdn/compounds-DD3MYkSc.js +4157 -0
  29. package/cdn/compounds-DD3MYkSc.js.map +1 -0
  30. package/cdn/context-0rI_P6jf.js +107 -0
  31. package/cdn/context-0rI_P6jf.js.map +1 -0
  32. package/cdn/context-CEFisYD0.js +14 -0
  33. package/cdn/context-CEFisYD0.js.map +1 -0
  34. package/cdn/create-player-B-PGzhq2.js +7 -0
  35. package/cdn/create-player-B-PGzhq2.js.map +1 -0
  36. package/cdn/create-player-BKLw7l1a.js +2246 -0
  37. package/cdn/create-player-BKLw7l1a.js.map +1 -0
  38. package/cdn/default-Djy9PEXm.js +2 -0
  39. package/cdn/default-Djy9PEXm.js.map +1 -0
  40. package/cdn/default-YzaLyoYg.js +30 -0
  41. package/cdn/default-YzaLyoYg.js.map +1 -0
  42. package/cdn/hls-CcSAx_3I.js +28632 -0
  43. package/cdn/hls-CcSAx_3I.js.map +1 -0
  44. package/cdn/hls-Dl2v35sW.js +41 -0
  45. package/cdn/hls-Dl2v35sW.js.map +1 -0
  46. package/cdn/hotkey-element-BONs_FyJ.js +369 -0
  47. package/cdn/hotkey-element-BONs_FyJ.js.map +1 -0
  48. package/cdn/hotkey-element-DWWkfH3A.js +2 -0
  49. package/cdn/hotkey-element-DWWkfH3A.js.map +1 -0
  50. package/cdn/listen-CJT7C4kM.js +9 -0
  51. package/cdn/listen-CJT7C4kM.js.map +1 -0
  52. package/cdn/listen-DFX-0NbX.js +2 -0
  53. package/cdn/listen-DFX-0NbX.js.map +1 -0
  54. package/cdn/media/dash-video.dev.d.ts +1 -0
  55. package/cdn/media/dash-video.dev.js +39153 -0
  56. package/cdn/media/dash-video.dev.js.map +1 -0
  57. package/cdn/media/dash-video.js +21 -0
  58. package/cdn/media/dash-video.js.map +1 -0
  59. package/cdn/media/hls-video.dev.d.ts +1 -0
  60. package/cdn/media/hls-video.dev.js +12 -28712
  61. package/cdn/media/hls-video.dev.js.map +1 -1
  62. package/cdn/media/hls-video.js +1 -82
  63. package/cdn/media/hls-video.js.map +1 -1
  64. package/cdn/media/mux-audio.dev.d.ts +1 -0
  65. package/cdn/media/mux-audio.dev.js +29 -0
  66. package/cdn/media/mux-audio.dev.js.map +1 -0
  67. package/cdn/media/mux-audio.js +2 -0
  68. package/cdn/media/mux-audio.js.map +1 -0
  69. package/cdn/media/mux-video.dev.d.ts +1 -0
  70. package/cdn/media/mux-video.dev.js +29 -0
  71. package/cdn/media/mux-video.dev.js.map +1 -0
  72. package/cdn/media/mux-video.js +2 -0
  73. package/cdn/media/mux-video.js.map +1 -0
  74. package/cdn/media/native-hls-video.dev.d.ts +1 -0
  75. package/cdn/media/native-hls-video.dev.js +19 -0
  76. package/cdn/media/native-hls-video.dev.js.map +1 -0
  77. package/cdn/media/native-hls-video.js +2 -0
  78. package/cdn/media/native-hls-video.js.map +1 -0
  79. package/cdn/media/simple-hls-video.dev.d.ts +1 -0
  80. package/cdn/media/simple-hls-video.dev.js +2887 -2605
  81. package/cdn/media/simple-hls-video.dev.js.map +1 -1
  82. package/cdn/media/simple-hls-video.js +58 -43
  83. package/cdn/media/simple-hls-video.js.map +1 -1
  84. package/cdn/media-attach-mixin-C2wz0Qbd.js +2 -0
  85. package/cdn/media-attach-mixin-C2wz0Qbd.js.map +1 -0
  86. package/cdn/media-attach-mixin-CYoNe7Sh.js +67 -0
  87. package/cdn/media-attach-mixin-CYoNe7Sh.js.map +1 -0
  88. package/cdn/minimal-AX_y2YBU.js +30 -0
  89. package/cdn/minimal-AX_y2YBU.js.map +1 -0
  90. package/cdn/minimal-Bc74CFqg.js +2 -0
  91. package/cdn/minimal-Bc74CFqg.js.map +1 -0
  92. package/cdn/minimal-ui-CE1sVxKB.js +22 -0
  93. package/cdn/minimal-ui-CE1sVxKB.js.map +1 -0
  94. package/cdn/minimal-ui-hC8-_9_F.js +2 -0
  95. package/cdn/minimal-ui-hC8-_9_F.js.map +1 -0
  96. package/cdn/minimal-ui-lnw8AjaS.js +2 -0
  97. package/cdn/minimal-ui-lnw8AjaS.js.map +1 -0
  98. package/cdn/minimal-ui-yKur3jyD.js +29 -0
  99. package/cdn/minimal-ui-yKur3jyD.js.map +1 -0
  100. package/cdn/mux-BgWl50KW.js +27 -0
  101. package/cdn/mux-BgWl50KW.js.map +1 -0
  102. package/cdn/mux-BhHIeG3e.js +3783 -0
  103. package/cdn/mux-BhHIeG3e.js.map +1 -0
  104. package/cdn/native-hls-lhip4tV9.js +123 -0
  105. package/cdn/native-hls-lhip4tV9.js.map +1 -0
  106. package/cdn/native-hls-odPBXxK7.js +2 -0
  107. package/cdn/native-hls-odPBXxK7.js.map +1 -0
  108. package/cdn/pick-CERGq1No.js +2 -0
  109. package/cdn/pick-CERGq1No.js.map +1 -0
  110. package/cdn/pick-D-wCJ3iA.js +23 -0
  111. package/cdn/pick-D-wCJ3iA.js.map +1 -0
  112. package/cdn/player-B7jISTmQ.js +2 -0
  113. package/cdn/player-B7jISTmQ.js.map +1 -0
  114. package/cdn/player-BVGWmIbQ.js +16 -0
  115. package/cdn/player-BVGWmIbQ.js.map +1 -0
  116. package/cdn/player-ChdQN3H5.js +2 -0
  117. package/cdn/player-ChdQN3H5.js.map +1 -0
  118. package/cdn/player-DX5Ka0vt.js +463 -0
  119. package/cdn/player-DX5Ka0vt.js.map +1 -0
  120. package/cdn/shadow-styles-BYZ6q3Q4.js +3 -0
  121. package/cdn/shadow-styles-BYZ6q3Q4.js.map +1 -0
  122. package/cdn/shadow-styles-DKXFMmyD.js +41 -0
  123. package/cdn/shadow-styles-DKXFMmyD.js.map +1 -0
  124. package/cdn/shallow-equal-Daj3-_LC.js +15 -0
  125. package/cdn/shallow-equal-Daj3-_LC.js.map +1 -0
  126. package/cdn/shallow-equal-xh6Wj-hj.js +2 -0
  127. package/cdn/shallow-equal-xh6Wj-hj.js.map +1 -0
  128. package/cdn/skin-element-D3iVinGP.js +55 -0
  129. package/cdn/skin-element-D3iVinGP.js.map +1 -0
  130. package/cdn/skin-element-DM82PPxz.js +2 -0
  131. package/cdn/skin-element-DM82PPxz.js.map +1 -0
  132. package/cdn/ui-BGvi0TNr.js +2 -0
  133. package/cdn/ui-BGvi0TNr.js.map +1 -0
  134. package/cdn/ui-BN57BxYZ.js +2 -0
  135. package/cdn/ui-BN57BxYZ.js.map +1 -0
  136. package/cdn/ui-CKR6dVbQ.js +25 -0
  137. package/cdn/ui-CKR6dVbQ.js.map +1 -0
  138. package/cdn/ui-CZ4yl3t3.js +32 -0
  139. package/cdn/ui-CZ4yl3t3.js.map +1 -0
  140. package/cdn/video-host-BtD61mpF.js +440 -0
  141. package/cdn/video-host-BtD61mpF.js.map +1 -0
  142. package/cdn/video-host-LeB1FKfO.js +47 -0
  143. package/cdn/video-host-LeB1FKfO.js.map +1 -0
  144. package/cdn/video-minimal-ui.dev.d.ts +1 -0
  145. package/cdn/video-minimal-ui.dev.js +4 -0
  146. package/cdn/video-minimal-ui.js +1 -0
  147. package/cdn/video-minimal.dev.d.ts +1 -0
  148. package/cdn/video-minimal.dev.js +120 -5669
  149. package/cdn/video-minimal.dev.js.map +1 -1
  150. package/cdn/video-minimal.js +1 -24
  151. package/cdn/video-minimal.js.map +1 -1
  152. package/cdn/video-ui.dev.d.ts +1 -0
  153. package/cdn/video-ui.dev.js +4 -0
  154. package/cdn/video-ui.js +1 -0
  155. package/cdn/video.dev.d.ts +1 -0
  156. package/cdn/video.dev.js +142 -5739
  157. package/cdn/video.dev.js.map +1 -1
  158. package/cdn/video.js +1 -24
  159. package/cdn/video.js.map +1 -1
  160. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +2 -2
  161. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  162. package/dist/default/_virtual/inline-css_src/define/audio/skin.js +2 -2
  163. package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  164. package/dist/default/_virtual/inline-css_src/define/background/skin.js +6 -0
  165. package/dist/default/_virtual/inline-css_src/define/background/skin.js.map +1 -0
  166. package/dist/default/_virtual/inline-css_src/define/base.js +6 -0
  167. package/dist/default/_virtual/inline-css_src/define/base.js.map +1 -0
  168. package/dist/default/_virtual/inline-css_src/define/shared.js +6 -0
  169. package/dist/default/_virtual/inline-css_src/define/shared.js.map +1 -0
  170. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +2 -2
  171. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  172. package/dist/default/_virtual/inline-css_src/define/video/skin.js +2 -2
  173. package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  174. package/dist/default/define/audio/minimal-skin.css +324 -182
  175. package/dist/default/define/audio/minimal-skin.js +10 -19
  176. package/dist/default/define/audio/minimal-skin.js.map +1 -1
  177. package/dist/default/define/audio/minimal-skin.tailwind.js +11 -19
  178. package/dist/default/define/audio/minimal-skin.tailwind.js.map +1 -1
  179. package/dist/default/define/audio/minimal-ui.js +28 -0
  180. package/dist/default/define/audio/minimal-ui.js.map +1 -0
  181. package/dist/default/define/audio/player.js +1 -2
  182. package/dist/default/define/audio/player.js.map +1 -1
  183. package/dist/default/define/audio/skin.css +307 -174
  184. package/dist/default/define/audio/skin.js +10 -19
  185. package/dist/default/define/audio/skin.js.map +1 -1
  186. package/dist/default/define/audio/skin.tailwind.js +13 -21
  187. package/dist/default/define/audio/skin.tailwind.js.map +1 -1
  188. package/dist/default/define/audio/ui.js +32 -0
  189. package/dist/default/define/audio/ui.js.map +1 -0
  190. package/dist/default/define/background/player.js +1 -2
  191. package/dist/default/define/background/player.js.map +1 -1
  192. package/dist/default/define/background/skin.css +1 -1
  193. package/dist/default/define/background/skin.js +6 -4
  194. package/dist/default/define/background/skin.js.map +1 -1
  195. package/dist/default/define/background/video.js +1 -2
  196. package/dist/default/define/base.css +27 -0
  197. package/dist/default/define/media/background-video.js +1 -2
  198. package/dist/default/define/media/background-video.js.map +1 -1
  199. package/dist/default/define/media/container.js +1 -2
  200. package/dist/default/define/media/container.js.map +1 -1
  201. package/dist/default/define/media/dash-video.js +13 -0
  202. package/dist/default/define/media/dash-video.js.map +1 -0
  203. package/dist/default/define/media/hls-video.js +1 -2
  204. package/dist/default/define/media/hls-video.js.map +1 -1
  205. package/dist/default/define/media/mux-audio.js +13 -0
  206. package/dist/default/define/media/mux-audio.js.map +1 -0
  207. package/dist/default/define/media/mux-video.js +13 -0
  208. package/dist/default/define/media/mux-video.js.map +1 -0
  209. package/dist/default/define/media/native-hls-video.js +13 -0
  210. package/dist/default/define/media/native-hls-video.js.map +1 -0
  211. package/dist/default/define/media/simple-hls-video.js +3 -3
  212. package/dist/default/define/media/simple-hls-video.js.map +1 -1
  213. package/dist/default/define/safe-define.js +4 -2
  214. package/dist/default/define/safe-define.js.map +1 -1
  215. package/dist/default/define/shared.css +14 -0
  216. package/dist/default/define/skin-element.js +33 -0
  217. package/dist/default/define/skin-element.js.map +1 -0
  218. package/dist/default/define/ui/alert-dialog-close.js +1 -2
  219. package/dist/default/define/ui/alert-dialog-close.js.map +1 -1
  220. package/dist/default/define/ui/alert-dialog-description.js +1 -2
  221. package/dist/default/define/ui/alert-dialog-description.js.map +1 -1
  222. package/dist/default/define/ui/alert-dialog-title.js +1 -2
  223. package/dist/default/define/ui/alert-dialog-title.js.map +1 -1
  224. package/dist/default/define/ui/alert-dialog.js +1 -2
  225. package/dist/default/define/ui/alert-dialog.js.map +1 -1
  226. package/dist/default/define/ui/buffering-indicator.js +1 -2
  227. package/dist/default/define/ui/buffering-indicator.js.map +1 -1
  228. package/dist/default/define/ui/captions-button.js +3 -3
  229. package/dist/default/define/ui/captions-button.js.map +1 -1
  230. package/dist/default/define/ui/cast-button.js +7 -0
  231. package/dist/default/define/ui/cast-button.js.map +1 -0
  232. package/dist/default/define/ui/compounds.js +62 -0
  233. package/dist/default/define/ui/compounds.js.map +1 -0
  234. package/dist/default/define/ui/controls-group.js +1 -2
  235. package/dist/default/define/ui/controls-group.js.map +1 -1
  236. package/dist/default/define/ui/controls.js +3 -7
  237. package/dist/default/define/ui/controls.js.map +1 -1
  238. package/dist/default/define/ui/error-dialog.js +6 -0
  239. package/dist/default/define/ui/error-dialog.js.map +1 -0
  240. package/dist/default/define/ui/fullscreen-button.js +1 -2
  241. package/dist/default/define/ui/fullscreen-button.js.map +1 -1
  242. package/dist/default/define/ui/hotkey.js +7 -0
  243. package/dist/default/define/ui/hotkey.js.map +1 -0
  244. package/dist/default/define/ui/mute-button.js +1 -2
  245. package/dist/default/define/ui/mute-button.js.map +1 -1
  246. package/dist/default/define/ui/pip-button.js +1 -2
  247. package/dist/default/define/ui/pip-button.js.map +1 -1
  248. package/dist/default/define/ui/play-button.js +1 -2
  249. package/dist/default/define/ui/play-button.js.map +1 -1
  250. package/dist/default/define/ui/playback-rate-button.js +1 -2
  251. package/dist/default/define/ui/playback-rate-button.js.map +1 -1
  252. package/dist/default/define/ui/popover.js +1 -2
  253. package/dist/default/define/ui/popover.js.map +1 -1
  254. package/dist/default/define/ui/poster.js +1 -2
  255. package/dist/default/define/ui/poster.js.map +1 -1
  256. package/dist/default/define/ui/seek-button.js +1 -2
  257. package/dist/default/define/ui/seek-button.js.map +1 -1
  258. package/dist/default/define/ui/slider-buffer.js +1 -2
  259. package/dist/default/define/ui/slider-buffer.js.map +1 -1
  260. package/dist/default/define/ui/slider-fill.js +1 -2
  261. package/dist/default/define/ui/slider-fill.js.map +1 -1
  262. package/dist/default/define/ui/slider-thumb.js +1 -2
  263. package/dist/default/define/ui/slider-thumb.js.map +1 -1
  264. package/dist/default/define/ui/slider-thumbnail.js +1 -2
  265. package/dist/default/define/ui/slider-thumbnail.js.map +1 -1
  266. package/dist/default/define/ui/slider-track.js +1 -2
  267. package/dist/default/define/ui/slider-track.js.map +1 -1
  268. package/dist/default/define/ui/slider-value.js +1 -2
  269. package/dist/default/define/ui/slider-value.js.map +1 -1
  270. package/dist/default/define/ui/slider.js +3 -15
  271. package/dist/default/define/ui/slider.js.map +1 -1
  272. package/dist/default/define/ui/thumbnail.js +1 -2
  273. package/dist/default/define/ui/thumbnail.js.map +1 -1
  274. package/dist/default/define/ui/time-group.js +1 -2
  275. package/dist/default/define/ui/time-group.js.map +1 -1
  276. package/dist/default/define/ui/time-separator.js +1 -2
  277. package/dist/default/define/ui/time-separator.js.map +1 -1
  278. package/dist/default/define/ui/time-slider.js +3 -19
  279. package/dist/default/define/ui/time-slider.js.map +1 -1
  280. package/dist/default/define/ui/time.js +3 -9
  281. package/dist/default/define/ui/time.js.map +1 -1
  282. package/dist/default/define/ui/tooltip-group.js +1 -2
  283. package/dist/default/define/ui/tooltip-group.js.map +1 -1
  284. package/dist/default/define/ui/tooltip.js +1 -2
  285. package/dist/default/define/ui/tooltip.js.map +1 -1
  286. package/dist/default/define/ui/volume-slider.js +3 -15
  287. package/dist/default/define/ui/volume-slider.js.map +1 -1
  288. package/dist/default/define/video/minimal-skin.css +624 -328
  289. package/dist/default/define/video/minimal-skin.js +10 -23
  290. package/dist/default/define/video/minimal-skin.js.map +1 -1
  291. package/dist/default/define/video/minimal-skin.tailwind.js +13 -30
  292. package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
  293. package/dist/default/define/video/minimal-ui.js +41 -0
  294. package/dist/default/define/video/minimal-ui.js.map +1 -0
  295. package/dist/default/define/video/player.js +1 -2
  296. package/dist/default/define/video/player.js.map +1 -1
  297. package/dist/default/define/video/skin.css +592 -311
  298. package/dist/default/define/video/skin.js +10 -24
  299. package/dist/default/define/video/skin.js.map +1 -1
  300. package/dist/default/define/video/skin.tailwind.js +13 -28
  301. package/dist/default/define/video/skin.tailwind.js.map +1 -1
  302. package/dist/default/define/video/ui.js +45 -0
  303. package/dist/default/define/video/ui.js.map +1 -0
  304. package/dist/default/icons/dist/render/default/index.js +5 -2
  305. package/dist/default/icons/dist/render/default/index.js.map +1 -1
  306. package/dist/default/icons/dist/render/minimal/index.js +5 -2
  307. package/dist/default/icons/dist/render/minimal/index.js.map +1 -1
  308. package/dist/default/index.js +11 -5
  309. package/dist/default/media/background-video/index.js +6 -3
  310. package/dist/default/media/background-video/index.js.map +1 -1
  311. package/dist/default/media/container-element.js +22 -4
  312. package/dist/default/media/container-element.js.map +1 -1
  313. package/dist/default/media/dash-video/index.js +9 -0
  314. package/dist/default/media/dash-video/index.js.map +1 -0
  315. package/dist/default/media/hls-video/index.js +12 -19
  316. package/dist/default/media/hls-video/index.js.map +1 -1
  317. package/dist/default/media/mux-audio/index.js +18 -0
  318. package/dist/default/media/mux-audio/index.js.map +1 -0
  319. package/dist/default/media/mux-video/index.js +18 -0
  320. package/dist/default/media/mux-video/index.js.map +1 -0
  321. package/dist/default/media/native-hls-video/index.js +9 -0
  322. package/dist/default/media/native-hls-video/index.js.map +1 -0
  323. package/dist/default/media/simple-hls-video/index.js +5 -17
  324. package/dist/default/media/simple-hls-video/index.js.map +1 -1
  325. package/dist/default/player/context.js +7 -4
  326. package/dist/default/player/context.js.map +1 -1
  327. package/dist/default/player/create-player.js +12 -5
  328. package/dist/default/player/create-player.js.map +1 -1
  329. package/dist/default/player/player-controller.js +1 -2
  330. package/dist/default/player/player-controller.js.map +1 -1
  331. package/dist/default/presets/audio.js +1 -2
  332. package/dist/default/presets/background.js +1 -2
  333. package/dist/default/presets/video.js +1 -2
  334. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js +17 -38
  335. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  336. package/dist/default/skins/dist/default/default/tailwind/components/buffering.js +1 -1
  337. package/dist/default/skins/dist/default/default/tailwind/components/buffering.js.map +1 -1
  338. package/dist/default/skins/dist/default/default/tailwind/components/button-group.js +7 -0
  339. package/dist/default/skins/dist/default/default/tailwind/components/button-group.js.map +1 -0
  340. package/dist/default/skins/dist/default/default/tailwind/components/button.js +5 -5
  341. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  342. package/dist/default/skins/dist/default/default/tailwind/components/controls.js +2 -3
  343. package/dist/default/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  344. package/dist/default/skins/dist/default/default/tailwind/components/error.js +4 -5
  345. package/dist/default/skins/dist/default/default/tailwind/components/error.js.map +1 -1
  346. package/dist/default/skins/dist/default/default/tailwind/components/icon.js +1 -2
  347. package/dist/default/skins/dist/default/default/tailwind/components/icon.js.map +1 -1
  348. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js +2 -3
  349. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  350. package/dist/default/skins/dist/default/default/tailwind/components/playback-rate.js +1 -1
  351. package/dist/default/skins/dist/default/default/tailwind/components/playback-rate.js.map +1 -1
  352. package/dist/default/skins/dist/default/default/tailwind/components/popup.js +5 -6
  353. package/dist/default/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  354. package/dist/default/skins/dist/default/default/tailwind/components/poster.js +15 -0
  355. package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
  356. package/dist/default/skins/dist/default/default/tailwind/components/preview.js +12 -0
  357. package/dist/default/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  358. package/dist/default/skins/dist/default/default/tailwind/components/root.js +2 -3
  359. package/dist/default/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  360. package/dist/default/skins/dist/default/default/tailwind/components/seek.js +2 -3
  361. package/dist/default/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
  362. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +2 -3
  363. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  364. package/dist/default/skins/dist/default/default/tailwind/components/surface.js +2 -3
  365. package/dist/default/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
  366. package/dist/default/skins/dist/default/default/tailwind/components/time.js +1 -1
  367. package/dist/default/skins/dist/default/default/tailwind/components/time.js.map +1 -1
  368. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +41 -26
  369. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  370. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +18 -33
  371. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  372. package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js +1 -1
  373. package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -1
  374. package/dist/default/skins/dist/default/minimal/tailwind/components/button-group.js +1 -2
  375. package/dist/default/skins/dist/default/minimal/tailwind/components/button-group.js.map +1 -1
  376. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +5 -5
  377. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  378. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js +2 -3
  379. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  380. package/dist/default/skins/dist/default/minimal/tailwind/components/error.js +4 -5
  381. package/dist/default/skins/dist/default/minimal/tailwind/components/error.js.map +1 -1
  382. package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js +1 -2
  383. package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -1
  384. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js +2 -3
  385. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  386. package/dist/default/skins/dist/default/minimal/tailwind/components/playback-rate.js +6 -0
  387. package/dist/default/skins/dist/default/minimal/tailwind/components/playback-rate.js.map +1 -0
  388. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js +5 -5
  389. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  390. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +15 -0
  391. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
  392. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js +13 -0
  393. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  394. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +2 -3
  395. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  396. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js +2 -3
  397. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
  398. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +2 -3
  399. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  400. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js +5 -6
  401. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  402. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +45 -24
  403. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  404. package/dist/{dev/skins/dist/default/default/tailwind/components → default/skins/dist/default/shared/tailwind}/icon-state.js +12 -2
  405. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -0
  406. package/dist/default/store/container-mixin.js +17 -62
  407. package/dist/default/store/container-mixin.js.map +1 -1
  408. package/dist/default/store/media-attach-mixin.js +44 -0
  409. package/dist/default/store/media-attach-mixin.js.map +1 -0
  410. package/dist/default/store/provider-mixin.js +100 -11
  411. package/dist/default/store/provider-mixin.js.map +1 -1
  412. package/dist/default/ui/alert-dialog/alert-dialog-close-element.js +1 -2
  413. package/dist/default/ui/alert-dialog/alert-dialog-close-element.js.map +1 -1
  414. package/dist/default/ui/alert-dialog/alert-dialog-description-element.js +1 -2
  415. package/dist/default/ui/alert-dialog/alert-dialog-description-element.js.map +1 -1
  416. package/dist/default/ui/alert-dialog/alert-dialog-element.js +2 -2
  417. package/dist/default/ui/alert-dialog/alert-dialog-element.js.map +1 -1
  418. package/dist/default/ui/alert-dialog/alert-dialog-title-element.js +1 -2
  419. package/dist/default/ui/alert-dialog/alert-dialog-title-element.js.map +1 -1
  420. package/dist/default/ui/alert-dialog/context.js +2 -5
  421. package/dist/default/ui/alert-dialog/context.js.map +1 -1
  422. package/dist/default/ui/buffering-indicator/buffering-indicator-element.js +2 -2
  423. package/dist/default/ui/buffering-indicator/buffering-indicator-element.js.map +1 -1
  424. package/dist/default/ui/captions-button/captions-button-element.js +2 -2
  425. package/dist/default/ui/captions-button/captions-button-element.js.map +1 -1
  426. package/dist/default/ui/cast-button/cast-button-element.js +24 -0
  427. package/dist/default/ui/cast-button/cast-button-element.js.map +1 -0
  428. package/dist/default/ui/context-part-element.js +1 -2
  429. package/dist/default/ui/context-part-element.js.map +1 -1
  430. package/dist/default/ui/controls/context.js +2 -5
  431. package/dist/default/ui/controls/context.js.map +1 -1
  432. package/dist/default/ui/controls/controls-element.js +1 -2
  433. package/dist/default/ui/controls/controls-element.js.map +1 -1
  434. package/dist/default/ui/controls/controls-group-element.js +1 -2
  435. package/dist/default/ui/controls/controls-group-element.js.map +1 -1
  436. package/dist/default/ui/error-dialog/error-dialog-element.js +77 -0
  437. package/dist/default/ui/error-dialog/error-dialog-element.js.map +1 -0
  438. package/dist/default/ui/fullscreen-button/fullscreen-button-element.js +2 -2
  439. package/dist/default/ui/fullscreen-button/fullscreen-button-element.js.map +1 -1
  440. package/dist/default/ui/gesture/gesture-element.js +84 -0
  441. package/dist/default/ui/gesture/gesture-element.js.map +1 -0
  442. package/dist/default/ui/hotkey/aria-key-shortcuts-controller.js +28 -0
  443. package/dist/default/ui/hotkey/aria-key-shortcuts-controller.js.map +1 -0
  444. package/dist/default/ui/hotkey/hotkey-element.js +81 -0
  445. package/dist/default/ui/hotkey/hotkey-element.js.map +1 -0
  446. package/dist/default/ui/media-button-element.js +17 -3
  447. package/dist/default/ui/media-button-element.js.map +1 -1
  448. package/dist/default/ui/media-element.js +1 -2
  449. package/dist/default/ui/media-element.js.map +1 -1
  450. package/dist/default/ui/media-ui-element.js +1 -2
  451. package/dist/default/ui/media-ui-element.js.map +1 -1
  452. package/dist/default/ui/mute-button/mute-button-element.js +2 -2
  453. package/dist/default/ui/mute-button/mute-button-element.js.map +1 -1
  454. package/dist/default/ui/pip-button/pip-button-element.js +2 -2
  455. package/dist/default/ui/pip-button/pip-button-element.js.map +1 -1
  456. package/dist/default/ui/play-button/play-button-element.js +2 -2
  457. package/dist/default/ui/play-button/play-button-element.js.map +1 -1
  458. package/dist/default/ui/playback-rate-button/playback-rate-button-element.js +1 -2
  459. package/dist/default/ui/playback-rate-button/playback-rate-button-element.js.map +1 -1
  460. package/dist/default/ui/popover/popover-element.js +13 -11
  461. package/dist/default/ui/popover/popover-element.js.map +1 -1
  462. package/dist/default/ui/position-controller.js +76 -0
  463. package/dist/default/ui/position-controller.js.map +1 -0
  464. package/dist/default/ui/poster/poster-element.js +1 -2
  465. package/dist/default/ui/poster/poster-element.js.map +1 -1
  466. package/dist/default/ui/seek-button/seek-button-element.js +1 -2
  467. package/dist/default/ui/seek-button/seek-button-element.js.map +1 -1
  468. package/dist/default/ui/slider/context.js +2 -5
  469. package/dist/default/ui/slider/context.js.map +1 -1
  470. package/dist/default/ui/slider/slider-buffer-element.js +1 -2
  471. package/dist/default/ui/slider/slider-buffer-element.js.map +1 -1
  472. package/dist/default/ui/slider/slider-element.js +2 -3
  473. package/dist/default/ui/slider/slider-element.js.map +1 -1
  474. package/dist/default/ui/slider/slider-fill-element.js +1 -2
  475. package/dist/default/ui/slider/slider-fill-element.js.map +1 -1
  476. package/dist/default/ui/slider/slider-preview-element.js +2 -3
  477. package/dist/default/ui/slider/slider-preview-element.js.map +1 -1
  478. package/dist/default/ui/slider/slider-thumb-element.js +1 -2
  479. package/dist/default/ui/slider/slider-thumb-element.js.map +1 -1
  480. package/dist/default/ui/slider/slider-thumbnail-element.js +1 -2
  481. package/dist/default/ui/slider/slider-thumbnail-element.js.map +1 -1
  482. package/dist/default/ui/slider/slider-track-element.js +1 -2
  483. package/dist/default/ui/slider/slider-track-element.js.map +1 -1
  484. package/dist/default/ui/slider/slider-value-element.js +1 -2
  485. package/dist/default/ui/slider/slider-value-element.js.map +1 -1
  486. package/dist/default/ui/thumbnail/thumbnail-element.js +1 -2
  487. package/dist/default/ui/thumbnail/thumbnail-element.js.map +1 -1
  488. package/dist/default/ui/time/time-element.js +13 -12
  489. package/dist/default/ui/time/time-element.js.map +1 -1
  490. package/dist/default/ui/time/time-group-element.js +1 -2
  491. package/dist/default/ui/time/time-group-element.js.map +1 -1
  492. package/dist/default/ui/time/time-separator-element.js +1 -2
  493. package/dist/default/ui/time/time-separator-element.js.map +1 -1
  494. package/dist/default/ui/time-slider/time-slider-element.js +7 -8
  495. package/dist/default/ui/time-slider/time-slider-element.js.map +1 -1
  496. package/dist/default/ui/tooltip/context.js +2 -5
  497. package/dist/default/ui/tooltip/context.js.map +1 -1
  498. package/dist/default/ui/tooltip/tooltip-element.js +25 -18
  499. package/dist/default/ui/tooltip/tooltip-element.js.map +1 -1
  500. package/dist/default/ui/tooltip/tooltip-group-element.js +5 -3
  501. package/dist/default/ui/tooltip/tooltip-group-element.js.map +1 -1
  502. package/dist/default/ui/volume-slider/volume-slider-element.js +27 -20
  503. package/dist/default/ui/volume-slider/volume-slider-element.js.map +1 -1
  504. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +2 -2
  505. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  506. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +2 -2
  507. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  508. package/dist/dev/_virtual/inline-css_src/define/background/skin.js +6 -0
  509. package/dist/dev/_virtual/inline-css_src/define/background/skin.js.map +1 -0
  510. package/dist/dev/_virtual/inline-css_src/define/base.js +6 -0
  511. package/dist/dev/_virtual/inline-css_src/define/base.js.map +1 -0
  512. package/dist/dev/_virtual/inline-css_src/define/shared.js +6 -0
  513. package/dist/dev/_virtual/inline-css_src/define/shared.js.map +1 -0
  514. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +2 -2
  515. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  516. package/dist/dev/_virtual/inline-css_src/define/video/skin.js +2 -2
  517. package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  518. package/dist/dev/define/audio/minimal-skin.css +324 -182
  519. package/dist/dev/define/audio/minimal-skin.d.ts +6 -10
  520. package/dist/dev/define/audio/minimal-skin.d.ts.map +1 -1
  521. package/dist/dev/define/audio/minimal-skin.js +85 -82
  522. package/dist/dev/define/audio/minimal-skin.js.map +1 -1
  523. package/dist/dev/define/audio/minimal-skin.tailwind.d.ts +4 -10
  524. package/dist/dev/define/audio/minimal-skin.tailwind.d.ts.map +1 -1
  525. package/dist/dev/define/audio/minimal-skin.tailwind.js +86 -84
  526. package/dist/dev/define/audio/minimal-skin.tailwind.js.map +1 -1
  527. package/dist/dev/define/audio/minimal-ui.d.ts +1 -0
  528. package/dist/dev/define/audio/minimal-ui.js +28 -0
  529. package/dist/dev/define/audio/minimal-ui.js.map +1 -0
  530. package/dist/dev/define/audio/player.js +1 -2
  531. package/dist/dev/define/audio/player.js.map +1 -1
  532. package/dist/dev/define/audio/skin.css +307 -174
  533. package/dist/dev/define/audio/skin.d.ts +6 -10
  534. package/dist/dev/define/audio/skin.d.ts.map +1 -1
  535. package/dist/dev/define/audio/skin.js +97 -74
  536. package/dist/dev/define/audio/skin.js.map +1 -1
  537. package/dist/dev/define/audio/skin.tailwind.d.ts +4 -10
  538. package/dist/dev/define/audio/skin.tailwind.d.ts.map +1 -1
  539. package/dist/dev/define/audio/skin.tailwind.js +84 -78
  540. package/dist/dev/define/audio/skin.tailwind.js.map +1 -1
  541. package/dist/dev/define/audio/ui.d.ts +1 -0
  542. package/dist/dev/define/audio/ui.js +32 -0
  543. package/dist/dev/define/audio/ui.js.map +1 -0
  544. package/dist/dev/define/background/player.js +1 -2
  545. package/dist/dev/define/background/player.js.map +1 -1
  546. package/dist/dev/define/background/skin.css +1 -1
  547. package/dist/dev/define/background/skin.d.ts.map +1 -1
  548. package/dist/dev/define/background/skin.js +8 -4
  549. package/dist/dev/define/background/skin.js.map +1 -1
  550. package/dist/dev/define/background/video.js +1 -2
  551. package/dist/dev/define/base.css +27 -0
  552. package/dist/dev/define/media/background-video.js +1 -2
  553. package/dist/dev/define/media/background-video.js.map +1 -1
  554. package/dist/dev/define/media/container.js +1 -2
  555. package/dist/dev/define/media/container.js.map +1 -1
  556. package/dist/dev/define/media/dash-video.d.ts +14 -0
  557. package/dist/dev/define/media/dash-video.d.ts.map +1 -0
  558. package/dist/dev/define/media/dash-video.js +13 -0
  559. package/dist/dev/define/media/dash-video.js.map +1 -0
  560. package/dist/dev/define/media/hls-video.js +1 -2
  561. package/dist/dev/define/media/hls-video.js.map +1 -1
  562. package/dist/dev/define/media/mux-audio.d.ts +14 -0
  563. package/dist/dev/define/media/mux-audio.d.ts.map +1 -0
  564. package/dist/dev/define/media/mux-audio.js +13 -0
  565. package/dist/dev/define/media/mux-audio.js.map +1 -0
  566. package/dist/dev/define/media/mux-video.d.ts +14 -0
  567. package/dist/dev/define/media/mux-video.d.ts.map +1 -0
  568. package/dist/dev/define/media/mux-video.js +13 -0
  569. package/dist/dev/define/media/mux-video.js.map +1 -0
  570. package/dist/dev/define/media/native-hls-video.d.ts +14 -0
  571. package/dist/dev/define/media/native-hls-video.d.ts.map +1 -0
  572. package/dist/dev/define/media/native-hls-video.js +13 -0
  573. package/dist/dev/define/media/native-hls-video.js.map +1 -0
  574. package/dist/dev/define/media/simple-hls-video.d.ts.map +1 -1
  575. package/dist/dev/define/media/simple-hls-video.js +3 -3
  576. package/dist/dev/define/media/simple-hls-video.js.map +1 -1
  577. package/dist/dev/define/safe-define.js +4 -2
  578. package/dist/dev/define/safe-define.js.map +1 -1
  579. package/dist/dev/define/shared.css +14 -0
  580. package/dist/dev/define/skin-element.d.ts +18 -0
  581. package/dist/dev/define/skin-element.d.ts.map +1 -0
  582. package/dist/dev/define/skin-element.js +33 -0
  583. package/dist/dev/define/skin-element.js.map +1 -0
  584. package/dist/dev/define/ui/alert-dialog-close.js +1 -2
  585. package/dist/dev/define/ui/alert-dialog-close.js.map +1 -1
  586. package/dist/dev/define/ui/alert-dialog-description.js +1 -2
  587. package/dist/dev/define/ui/alert-dialog-description.js.map +1 -1
  588. package/dist/dev/define/ui/alert-dialog-title.js +1 -2
  589. package/dist/dev/define/ui/alert-dialog-title.js.map +1 -1
  590. package/dist/dev/define/ui/alert-dialog.js +1 -2
  591. package/dist/dev/define/ui/alert-dialog.js.map +1 -1
  592. package/dist/dev/define/ui/buffering-indicator.js +1 -2
  593. package/dist/dev/define/ui/buffering-indicator.js.map +1 -1
  594. package/dist/dev/define/ui/captions-button.d.ts.map +1 -1
  595. package/dist/dev/define/ui/captions-button.js +3 -3
  596. package/dist/dev/define/ui/captions-button.js.map +1 -1
  597. package/dist/dev/define/ui/cast-button.d.ts +9 -0
  598. package/dist/dev/define/ui/cast-button.d.ts.map +1 -0
  599. package/dist/dev/define/ui/cast-button.js +7 -0
  600. package/dist/dev/define/ui/cast-button.js.map +1 -0
  601. package/dist/dev/define/ui/compounds.d.ts +12 -0
  602. package/dist/dev/define/ui/compounds.d.ts.map +1 -0
  603. package/dist/dev/define/ui/compounds.js +62 -0
  604. package/dist/dev/define/ui/compounds.js.map +1 -0
  605. package/dist/dev/define/ui/controls-group.js +1 -2
  606. package/dist/dev/define/ui/controls-group.js.map +1 -1
  607. package/dist/dev/define/ui/controls.d.ts +2 -0
  608. package/dist/dev/define/ui/controls.d.ts.map +1 -1
  609. package/dist/dev/define/ui/controls.js +3 -7
  610. package/dist/dev/define/ui/controls.js.map +1 -1
  611. package/dist/dev/define/ui/error-dialog.d.ts +15 -0
  612. package/dist/dev/define/ui/error-dialog.d.ts.map +1 -0
  613. package/dist/dev/define/ui/error-dialog.js +6 -0
  614. package/dist/dev/define/ui/error-dialog.js.map +1 -0
  615. package/dist/dev/define/ui/fullscreen-button.js +1 -2
  616. package/dist/dev/define/ui/fullscreen-button.js.map +1 -1
  617. package/dist/dev/define/ui/hotkey.d.ts +9 -0
  618. package/dist/dev/define/ui/hotkey.d.ts.map +1 -0
  619. package/dist/dev/define/ui/hotkey.js +7 -0
  620. package/dist/dev/define/ui/hotkey.js.map +1 -0
  621. package/dist/dev/define/ui/mute-button.js +1 -2
  622. package/dist/dev/define/ui/mute-button.js.map +1 -1
  623. package/dist/dev/define/ui/pip-button.js +1 -2
  624. package/dist/dev/define/ui/pip-button.js.map +1 -1
  625. package/dist/dev/define/ui/play-button.js +1 -2
  626. package/dist/dev/define/ui/play-button.js.map +1 -1
  627. package/dist/dev/define/ui/playback-rate-button.js +1 -2
  628. package/dist/dev/define/ui/playback-rate-button.js.map +1 -1
  629. package/dist/dev/define/ui/popover.js +1 -2
  630. package/dist/dev/define/ui/popover.js.map +1 -1
  631. package/dist/dev/define/ui/poster.js +1 -2
  632. package/dist/dev/define/ui/poster.js.map +1 -1
  633. package/dist/dev/define/ui/seek-button.js +1 -2
  634. package/dist/dev/define/ui/seek-button.js.map +1 -1
  635. package/dist/dev/define/ui/slider-buffer.js +1 -2
  636. package/dist/dev/define/ui/slider-buffer.js.map +1 -1
  637. package/dist/dev/define/ui/slider-fill.js +1 -2
  638. package/dist/dev/define/ui/slider-fill.js.map +1 -1
  639. package/dist/dev/define/ui/slider-thumb.js +1 -2
  640. package/dist/dev/define/ui/slider-thumb.js.map +1 -1
  641. package/dist/dev/define/ui/slider-thumbnail.js +1 -2
  642. package/dist/dev/define/ui/slider-thumbnail.js.map +1 -1
  643. package/dist/dev/define/ui/slider-track.js +1 -2
  644. package/dist/dev/define/ui/slider-track.js.map +1 -1
  645. package/dist/dev/define/ui/slider-value.js +1 -2
  646. package/dist/dev/define/ui/slider-value.js.map +1 -1
  647. package/dist/dev/define/ui/slider.d.ts +10 -0
  648. package/dist/dev/define/ui/slider.d.ts.map +1 -1
  649. package/dist/dev/define/ui/slider.js +3 -15
  650. package/dist/dev/define/ui/slider.js.map +1 -1
  651. package/dist/dev/define/ui/thumbnail.js +1 -2
  652. package/dist/dev/define/ui/thumbnail.js.map +1 -1
  653. package/dist/dev/define/ui/time-group.js +1 -2
  654. package/dist/dev/define/ui/time-group.js.map +1 -1
  655. package/dist/dev/define/ui/time-separator.js +1 -2
  656. package/dist/dev/define/ui/time-separator.js.map +1 -1
  657. package/dist/dev/define/ui/time-slider.d.ts +14 -0
  658. package/dist/dev/define/ui/time-slider.d.ts.map +1 -1
  659. package/dist/dev/define/ui/time-slider.js +3 -19
  660. package/dist/dev/define/ui/time-slider.js.map +1 -1
  661. package/dist/dev/define/ui/time.d.ts +4 -0
  662. package/dist/dev/define/ui/time.d.ts.map +1 -1
  663. package/dist/dev/define/ui/time.js +3 -9
  664. package/dist/dev/define/ui/time.js.map +1 -1
  665. package/dist/dev/define/ui/tooltip-group.js +1 -2
  666. package/dist/dev/define/ui/tooltip-group.js.map +1 -1
  667. package/dist/dev/define/ui/tooltip.js +1 -2
  668. package/dist/dev/define/ui/tooltip.js.map +1 -1
  669. package/dist/dev/define/ui/volume-slider.d.ts +10 -0
  670. package/dist/dev/define/ui/volume-slider.d.ts.map +1 -1
  671. package/dist/dev/define/ui/volume-slider.js +3 -15
  672. package/dist/dev/define/ui/volume-slider.js.map +1 -1
  673. package/dist/dev/define/video/minimal-skin.css +624 -328
  674. package/dist/dev/define/video/minimal-skin.d.ts +6 -10
  675. package/dist/dev/define/video/minimal-skin.d.ts.map +1 -1
  676. package/dist/dev/define/video/minimal-skin.js +119 -119
  677. package/dist/dev/define/video/minimal-skin.js.map +1 -1
  678. package/dist/dev/define/video/minimal-skin.tailwind.d.ts +4 -10
  679. package/dist/dev/define/video/minimal-skin.tailwind.d.ts.map +1 -1
  680. package/dist/dev/define/video/minimal-skin.tailwind.js +110 -129
  681. package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
  682. package/dist/dev/define/video/minimal-ui.d.ts +1 -0
  683. package/dist/dev/define/video/minimal-ui.js +41 -0
  684. package/dist/dev/define/video/minimal-ui.js.map +1 -0
  685. package/dist/dev/define/video/player.js +1 -2
  686. package/dist/dev/define/video/player.js.map +1 -1
  687. package/dist/dev/define/video/skin.css +592 -311
  688. package/dist/dev/define/video/skin.d.ts +6 -10
  689. package/dist/dev/define/video/skin.d.ts.map +1 -1
  690. package/dist/dev/define/video/skin.js +140 -116
  691. package/dist/dev/define/video/skin.js.map +1 -1
  692. package/dist/dev/define/video/skin.tailwind.d.ts +4 -10
  693. package/dist/dev/define/video/skin.tailwind.d.ts.map +1 -1
  694. package/dist/dev/define/video/skin.tailwind.js +106 -121
  695. package/dist/dev/define/video/skin.tailwind.js.map +1 -1
  696. package/dist/dev/define/video/ui.d.ts +1 -0
  697. package/dist/dev/define/video/ui.js +45 -0
  698. package/dist/dev/define/video/ui.js.map +1 -0
  699. package/dist/dev/icons/dist/render/default/index.js +5 -2
  700. package/dist/dev/icons/dist/render/default/index.js.map +1 -1
  701. package/dist/dev/icons/dist/render/minimal/index.js +5 -2
  702. package/dist/dev/icons/dist/render/minimal/index.js.map +1 -1
  703. package/dist/dev/index.d.ts +13 -5
  704. package/dist/dev/index.js +11 -5
  705. package/dist/dev/media/background-video/index.d.ts +8 -1
  706. package/dist/dev/media/background-video/index.d.ts.map +1 -1
  707. package/dist/dev/media/background-video/index.js +6 -3
  708. package/dist/dev/media/background-video/index.js.map +1 -1
  709. package/dist/dev/media/container-element.d.ts +3 -0
  710. package/dist/dev/media/container-element.d.ts.map +1 -1
  711. package/dist/dev/media/container-element.js +22 -4
  712. package/dist/dev/media/container-element.js.map +1 -1
  713. package/dist/dev/media/dash-video/index.d.ts +17 -0
  714. package/dist/dev/media/dash-video/index.d.ts.map +1 -0
  715. package/dist/dev/media/dash-video/index.js +9 -0
  716. package/dist/dev/media/dash-video/index.js.map +1 -0
  717. package/dist/dev/media/hls-video/index.d.ts +13 -6
  718. package/dist/dev/media/hls-video/index.d.ts.map +1 -1
  719. package/dist/dev/media/hls-video/index.js +12 -19
  720. package/dist/dev/media/hls-video/index.js.map +1 -1
  721. package/dist/dev/media/mux-audio/index.d.ts +19 -0
  722. package/dist/dev/media/mux-audio/index.d.ts.map +1 -0
  723. package/dist/dev/media/mux-audio/index.js +18 -0
  724. package/dist/dev/media/mux-audio/index.js.map +1 -0
  725. package/dist/dev/media/mux-video/index.d.ts +19 -0
  726. package/dist/dev/media/mux-video/index.d.ts.map +1 -0
  727. package/dist/dev/media/mux-video/index.js +18 -0
  728. package/dist/dev/media/mux-video/index.js.map +1 -0
  729. package/dist/dev/media/native-hls-video/index.d.ts +17 -0
  730. package/dist/dev/media/native-hls-video/index.d.ts.map +1 -0
  731. package/dist/dev/media/native-hls-video/index.js +9 -0
  732. package/dist/dev/media/native-hls-video/index.js.map +1 -0
  733. package/dist/dev/media/simple-hls-video/index.d.ts +12 -6
  734. package/dist/dev/media/simple-hls-video/index.d.ts.map +1 -1
  735. package/dist/dev/media/simple-hls-video/index.js +5 -17
  736. package/dist/dev/media/simple-hls-video/index.js.map +1 -1
  737. package/dist/dev/player/context.d.ts +19 -3
  738. package/dist/dev/player/context.d.ts.map +1 -1
  739. package/dist/dev/player/context.js +7 -4
  740. package/dist/dev/player/context.js.map +1 -1
  741. package/dist/dev/player/create-player.d.ts +1 -1
  742. package/dist/dev/player/create-player.js +12 -5
  743. package/dist/dev/player/create-player.js.map +1 -1
  744. package/dist/dev/player/player-controller.js +1 -2
  745. package/dist/dev/player/player-controller.js.map +1 -1
  746. package/dist/dev/presets/audio.js +1 -2
  747. package/dist/dev/presets/background.js +1 -2
  748. package/dist/dev/presets/video.js +1 -2
  749. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js +17 -38
  750. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  751. package/dist/dev/skins/dist/default/default/tailwind/components/buffering.js +1 -1
  752. package/dist/dev/skins/dist/default/default/tailwind/components/buffering.js.map +1 -1
  753. package/dist/dev/skins/dist/default/default/tailwind/components/button-group.js +7 -0
  754. package/dist/dev/skins/dist/default/default/tailwind/components/button-group.js.map +1 -0
  755. package/dist/dev/skins/dist/default/default/tailwind/components/button.js +5 -5
  756. package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  757. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js +2 -3
  758. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  759. package/dist/dev/skins/dist/default/default/tailwind/components/error.js +4 -5
  760. package/dist/dev/skins/dist/default/default/tailwind/components/error.js.map +1 -1
  761. package/dist/dev/skins/dist/default/default/tailwind/components/icon.js +1 -2
  762. package/dist/dev/skins/dist/default/default/tailwind/components/icon.js.map +1 -1
  763. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js +2 -3
  764. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  765. package/dist/dev/skins/dist/default/default/tailwind/components/playback-rate.js +1 -1
  766. package/dist/dev/skins/dist/default/default/tailwind/components/playback-rate.js.map +1 -1
  767. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js +5 -6
  768. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  769. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js +15 -0
  770. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
  771. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js +12 -0
  772. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  773. package/dist/dev/skins/dist/default/default/tailwind/components/root.js +2 -3
  774. package/dist/dev/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  775. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js +2 -3
  776. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
  777. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +2 -3
  778. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  779. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js +2 -3
  780. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
  781. package/dist/dev/skins/dist/default/default/tailwind/components/time.js +1 -1
  782. package/dist/dev/skins/dist/default/default/tailwind/components/time.js.map +1 -1
  783. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +41 -26
  784. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  785. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js +18 -33
  786. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  787. package/dist/dev/skins/dist/default/minimal/tailwind/components/buffering.js +1 -1
  788. package/dist/dev/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -1
  789. package/dist/dev/skins/dist/default/minimal/tailwind/components/button-group.js +1 -2
  790. package/dist/dev/skins/dist/default/minimal/tailwind/components/button-group.js.map +1 -1
  791. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +5 -5
  792. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  793. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js +2 -3
  794. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  795. package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js +4 -5
  796. package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js.map +1 -1
  797. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js +1 -2
  798. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -1
  799. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js +2 -3
  800. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  801. package/dist/dev/skins/dist/default/minimal/tailwind/components/playback-rate.js +6 -0
  802. package/dist/dev/skins/dist/default/minimal/tailwind/components/playback-rate.js.map +1 -0
  803. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js +5 -5
  804. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  805. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js +15 -0
  806. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
  807. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js +13 -0
  808. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  809. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +2 -3
  810. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  811. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js +2 -3
  812. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
  813. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +2 -3
  814. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  815. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js +5 -6
  816. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  817. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +45 -24
  818. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  819. package/dist/{default/skins/dist/default/default/tailwind/components → dev/skins/dist/default/shared/tailwind}/icon-state.js +12 -2
  820. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +1 -0
  821. package/dist/dev/store/container-mixin.d.ts +10 -5
  822. package/dist/dev/store/container-mixin.d.ts.map +1 -1
  823. package/dist/dev/store/container-mixin.js +17 -62
  824. package/dist/dev/store/container-mixin.js.map +1 -1
  825. package/dist/dev/store/media-attach-mixin.d.ts +19 -0
  826. package/dist/dev/store/media-attach-mixin.d.ts.map +1 -0
  827. package/dist/dev/store/media-attach-mixin.js +44 -0
  828. package/dist/dev/store/media-attach-mixin.js.map +1 -0
  829. package/dist/dev/store/provider-mixin.d.ts +19 -6
  830. package/dist/dev/store/provider-mixin.d.ts.map +1 -1
  831. package/dist/dev/store/provider-mixin.js +100 -11
  832. package/dist/dev/store/provider-mixin.js.map +1 -1
  833. package/dist/dev/ui/alert-dialog/alert-dialog-close-element.js +1 -2
  834. package/dist/dev/ui/alert-dialog/alert-dialog-close-element.js.map +1 -1
  835. package/dist/dev/ui/alert-dialog/alert-dialog-description-element.js +1 -2
  836. package/dist/dev/ui/alert-dialog/alert-dialog-description-element.js.map +1 -1
  837. package/dist/dev/ui/alert-dialog/alert-dialog-element.d.ts.map +1 -1
  838. package/dist/dev/ui/alert-dialog/alert-dialog-element.js +2 -2
  839. package/dist/dev/ui/alert-dialog/alert-dialog-element.js.map +1 -1
  840. package/dist/dev/ui/alert-dialog/alert-dialog-title-element.js +1 -2
  841. package/dist/dev/ui/alert-dialog/alert-dialog-title-element.js.map +1 -1
  842. package/dist/dev/ui/alert-dialog/context.js +2 -5
  843. package/dist/dev/ui/alert-dialog/context.js.map +1 -1
  844. package/dist/dev/ui/buffering-indicator/buffering-indicator-element.d.ts.map +1 -1
  845. package/dist/dev/ui/buffering-indicator/buffering-indicator-element.js +2 -2
  846. package/dist/dev/ui/buffering-indicator/buffering-indicator-element.js.map +1 -1
  847. package/dist/dev/ui/captions-button/captions-button-element.d.ts +1 -0
  848. package/dist/dev/ui/captions-button/captions-button-element.d.ts.map +1 -1
  849. package/dist/dev/ui/captions-button/captions-button-element.js +2 -2
  850. package/dist/dev/ui/captions-button/captions-button-element.js.map +1 -1
  851. package/dist/dev/ui/cast-button/cast-button-element.d.ts +19 -0
  852. package/dist/dev/ui/cast-button/cast-button-element.d.ts.map +1 -0
  853. package/dist/dev/ui/cast-button/cast-button-element.js +24 -0
  854. package/dist/dev/ui/cast-button/cast-button-element.js.map +1 -0
  855. package/dist/dev/ui/context-part-element.d.ts +1 -1
  856. package/dist/dev/ui/context-part-element.js +1 -2
  857. package/dist/dev/ui/context-part-element.js.map +1 -1
  858. package/dist/dev/ui/controls/context.js +2 -5
  859. package/dist/dev/ui/controls/context.js.map +1 -1
  860. package/dist/dev/ui/controls/controls-element.js +1 -2
  861. package/dist/dev/ui/controls/controls-element.js.map +1 -1
  862. package/dist/dev/ui/controls/controls-group-element.js +1 -2
  863. package/dist/dev/ui/controls/controls-group-element.js.map +1 -1
  864. package/dist/dev/ui/error-dialog/error-dialog-element.d.ts +16 -0
  865. package/dist/dev/ui/error-dialog/error-dialog-element.d.ts.map +1 -0
  866. package/dist/dev/ui/error-dialog/error-dialog-element.js +77 -0
  867. package/dist/dev/ui/error-dialog/error-dialog-element.js.map +1 -0
  868. package/dist/dev/ui/fullscreen-button/fullscreen-button-element.d.ts +1 -0
  869. package/dist/dev/ui/fullscreen-button/fullscreen-button-element.d.ts.map +1 -1
  870. package/dist/dev/ui/fullscreen-button/fullscreen-button-element.js +2 -2
  871. package/dist/dev/ui/fullscreen-button/fullscreen-button-element.js.map +1 -1
  872. package/dist/dev/ui/gesture/gesture-element.d.ts +22 -0
  873. package/dist/dev/ui/gesture/gesture-element.d.ts.map +1 -0
  874. package/dist/dev/ui/gesture/gesture-element.js +84 -0
  875. package/dist/dev/ui/gesture/gesture-element.js.map +1 -0
  876. package/dist/dev/ui/hotkey/aria-key-shortcuts-controller.d.ts +15 -0
  877. package/dist/dev/ui/hotkey/aria-key-shortcuts-controller.d.ts.map +1 -0
  878. package/dist/dev/ui/hotkey/aria-key-shortcuts-controller.js +28 -0
  879. package/dist/dev/ui/hotkey/aria-key-shortcuts-controller.js.map +1 -0
  880. package/dist/dev/ui/hotkey/hotkey-element.d.ts +21 -0
  881. package/dist/dev/ui/hotkey/hotkey-element.d.ts.map +1 -0
  882. package/dist/dev/ui/hotkey/hotkey-element.js +81 -0
  883. package/dist/dev/ui/hotkey/hotkey-element.js.map +1 -0
  884. package/dist/dev/ui/media-button-element.d.ts +8 -2
  885. package/dist/dev/ui/media-button-element.d.ts.map +1 -1
  886. package/dist/dev/ui/media-button-element.js +17 -3
  887. package/dist/dev/ui/media-button-element.js.map +1 -1
  888. package/dist/dev/ui/media-element.js +1 -2
  889. package/dist/dev/ui/media-element.js.map +1 -1
  890. package/dist/dev/ui/media-ui-element.js +1 -2
  891. package/dist/dev/ui/media-ui-element.js.map +1 -1
  892. package/dist/dev/ui/mute-button/mute-button-element.d.ts +1 -0
  893. package/dist/dev/ui/mute-button/mute-button-element.d.ts.map +1 -1
  894. package/dist/dev/ui/mute-button/mute-button-element.js +2 -2
  895. package/dist/dev/ui/mute-button/mute-button-element.js.map +1 -1
  896. package/dist/dev/ui/pip-button/pip-button-element.d.ts +1 -0
  897. package/dist/dev/ui/pip-button/pip-button-element.d.ts.map +1 -1
  898. package/dist/dev/ui/pip-button/pip-button-element.js +2 -2
  899. package/dist/dev/ui/pip-button/pip-button-element.js.map +1 -1
  900. package/dist/dev/ui/play-button/play-button-element.d.ts +1 -0
  901. package/dist/dev/ui/play-button/play-button-element.d.ts.map +1 -1
  902. package/dist/dev/ui/play-button/play-button-element.js +2 -2
  903. package/dist/dev/ui/play-button/play-button-element.js.map +1 -1
  904. package/dist/dev/ui/playback-rate-button/playback-rate-button-element.js +1 -2
  905. package/dist/dev/ui/playback-rate-button/playback-rate-button-element.js.map +1 -1
  906. package/dist/dev/ui/popover/popover-element.d.ts.map +1 -1
  907. package/dist/dev/ui/popover/popover-element.js +13 -11
  908. package/dist/dev/ui/popover/popover-element.js.map +1 -1
  909. package/dist/dev/ui/position-controller.js +76 -0
  910. package/dist/dev/ui/position-controller.js.map +1 -0
  911. package/dist/dev/ui/poster/poster-element.js +1 -2
  912. package/dist/dev/ui/poster/poster-element.js.map +1 -1
  913. package/dist/dev/ui/seek-button/seek-button-element.js +1 -2
  914. package/dist/dev/ui/seek-button/seek-button-element.js.map +1 -1
  915. package/dist/dev/ui/slider/context.js +2 -5
  916. package/dist/dev/ui/slider/context.js.map +1 -1
  917. package/dist/dev/ui/slider/slider-buffer-element.js +1 -2
  918. package/dist/dev/ui/slider/slider-buffer-element.js.map +1 -1
  919. package/dist/dev/ui/slider/slider-element.js +2 -3
  920. package/dist/dev/ui/slider/slider-element.js.map +1 -1
  921. package/dist/dev/ui/slider/slider-fill-element.js +1 -2
  922. package/dist/dev/ui/slider/slider-fill-element.js.map +1 -1
  923. package/dist/dev/ui/slider/slider-preview-element.d.ts +21 -0
  924. package/dist/dev/ui/slider/slider-preview-element.d.ts.map +1 -0
  925. package/dist/dev/ui/slider/slider-preview-element.js +2 -3
  926. package/dist/dev/ui/slider/slider-preview-element.js.map +1 -1
  927. package/dist/dev/ui/slider/slider-thumb-element.js +1 -2
  928. package/dist/dev/ui/slider/slider-thumb-element.js.map +1 -1
  929. package/dist/dev/ui/slider/slider-thumbnail-element.js +1 -2
  930. package/dist/dev/ui/slider/slider-thumbnail-element.js.map +1 -1
  931. package/dist/dev/ui/slider/slider-track-element.js +1 -2
  932. package/dist/dev/ui/slider/slider-track-element.js.map +1 -1
  933. package/dist/dev/ui/slider/slider-value-element.js +1 -2
  934. package/dist/dev/ui/slider/slider-value-element.js.map +1 -1
  935. package/dist/dev/ui/thumbnail/thumbnail-element.js +1 -2
  936. package/dist/dev/ui/thumbnail/thumbnail-element.js.map +1 -1
  937. package/dist/dev/ui/time/time-element.d.ts +0 -1
  938. package/dist/dev/ui/time/time-element.d.ts.map +1 -1
  939. package/dist/dev/ui/time/time-element.js +13 -12
  940. package/dist/dev/ui/time/time-element.js.map +1 -1
  941. package/dist/dev/ui/time/time-group-element.js +1 -2
  942. package/dist/dev/ui/time/time-group-element.js.map +1 -1
  943. package/dist/dev/ui/time/time-separator-element.js +1 -2
  944. package/dist/dev/ui/time/time-separator-element.js.map +1 -1
  945. package/dist/dev/ui/time-slider/time-slider-element.d.ts +2 -2
  946. package/dist/dev/ui/time-slider/time-slider-element.js +7 -8
  947. package/dist/dev/ui/time-slider/time-slider-element.js.map +1 -1
  948. package/dist/dev/ui/tooltip/context.js +2 -5
  949. package/dist/dev/ui/tooltip/context.js.map +1 -1
  950. package/dist/dev/ui/tooltip/tooltip-element.d.ts.map +1 -1
  951. package/dist/dev/ui/tooltip/tooltip-element.js +25 -18
  952. package/dist/dev/ui/tooltip/tooltip-element.js.map +1 -1
  953. package/dist/dev/ui/tooltip/tooltip-group-element.js +5 -3
  954. package/dist/dev/ui/tooltip/tooltip-group-element.js.map +1 -1
  955. package/dist/dev/ui/volume-slider/volume-slider-element.d.ts +5 -0
  956. package/dist/dev/ui/volume-slider/volume-slider-element.d.ts.map +1 -1
  957. package/dist/dev/ui/volume-slider/volume-slider-element.js +27 -20
  958. package/dist/dev/ui/volume-slider/volume-slider-element.js.map +1 -1
  959. package/package.json +25 -14
  960. package/cdn/audio-minimal.css +0 -1
  961. package/cdn/audio.css +0 -1
  962. package/cdn/background.css +0 -1
  963. package/cdn/video-minimal.css +0 -1
  964. package/cdn/video.css +0 -1
  965. package/dist/default/define/skin-mixin.js +0 -55
  966. package/dist/default/define/skin-mixin.js.map +0 -1
  967. package/dist/default/skins/dist/default/default/tailwind/components/icon-state.js.map +0 -1
  968. package/dist/default/skins/dist/default/default/tailwind/components/tooltip-state.js +0 -28
  969. package/dist/default/skins/dist/default/default/tailwind/components/tooltip-state.js.map +0 -1
  970. package/dist/default/skins/dist/default/minimal/tailwind/components/icon-state.js +0 -29
  971. package/dist/default/skins/dist/default/minimal/tailwind/components/icon-state.js.map +0 -1
  972. package/dist/default/skins/dist/default/minimal/tailwind/components/tooltip-state.js +0 -28
  973. package/dist/default/skins/dist/default/minimal/tailwind/components/tooltip-state.js.map +0 -1
  974. package/dist/dev/define/skin-mixin.d.ts +0 -21
  975. package/dist/dev/define/skin-mixin.d.ts.map +0 -1
  976. package/dist/dev/define/skin-mixin.js +0 -69
  977. package/dist/dev/define/skin-mixin.js.map +0 -1
  978. package/dist/dev/skins/dist/default/default/tailwind/components/icon-state.js.map +0 -1
  979. package/dist/dev/skins/dist/default/default/tailwind/components/tooltip-state.js +0 -28
  980. package/dist/dev/skins/dist/default/default/tailwind/components/tooltip-state.js.map +0 -1
  981. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon-state.js +0 -29
  982. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon-state.js.map +0 -1
  983. package/dist/dev/skins/dist/default/minimal/tailwind/components/tooltip-state.js +0 -28
  984. package/dist/dev/skins/dist/default/minimal/tailwind/components/tooltip-state.js.map +0 -1
@@ -0,0 +1,2246 @@
1
+ import { t as listen } from "./listen-CJT7C4kM.js";
2
+ import { a as ContextRequestEvent, n as mediaContext, r as playerContext, t as containerContext } from "./context-0rI_P6jf.js";
3
+ import { t as anyAbortSignal } from "./abort-DsTff8mS.js";
4
+ import { t as shallowEqual } from "./shallow-equal-Daj3-_LC.js";
5
+
6
+ //#region ../utils/dist/dom/event.js
7
+ /** Resolve the deepest event target, preferring composedPath for shadow DOM. */
8
+ function resolveEventTarget(event) {
9
+ const path = event.composedPath();
10
+ return path.length > 0 ? path[0] : event.target;
11
+ }
12
+ function onEvent(target, type, options) {
13
+ return new Promise((resolve, reject) => {
14
+ const handleAbort = () => {
15
+ reject(options?.signal?.reason ?? "Aborted");
16
+ };
17
+ if (options?.signal?.aborted) {
18
+ handleAbort();
19
+ return;
20
+ }
21
+ options?.signal?.addEventListener("abort", handleAbort, { once: true });
22
+ target.addEventListener(type, (event) => {
23
+ options?.signal?.removeEventListener("abort", handleAbort);
24
+ resolve(event);
25
+ }, {
26
+ ...options,
27
+ once: true
28
+ });
29
+ });
30
+ }
31
+
32
+ //#endregion
33
+ //#region ../utils/dist/dom/interactive.js
34
+ const INTERACTIVE_SELECTOR = "button,input,select,textarea,a[href],[role=\"slider\"],[role=\"button\"],[data-interactive]";
35
+ const EDITABLE_SELECTOR = [
36
+ "textarea",
37
+ "select",
38
+ "input:not([type])",
39
+ ...[
40
+ "text",
41
+ "search",
42
+ "url",
43
+ "tel",
44
+ "email",
45
+ "password",
46
+ "number"
47
+ ].map((type) => `input[type="${type}"]`),
48
+ "[contenteditable]:not([contenteditable=\"false\"])"
49
+ ].join(",");
50
+ function isEditableElement(el) {
51
+ return el.matches(EDITABLE_SELECTOR);
52
+ }
53
+ /** Whether the keyboard event target is an editable element (input, textarea, etc). */
54
+ function isEditableTarget(event) {
55
+ const target = resolveEventTarget(event);
56
+ return target instanceof Element && isEditableElement(target);
57
+ }
58
+ /** Whether the event originated from an interactive control (button, slider, etc). */
59
+ function isInteractiveTarget(event) {
60
+ const target = resolveEventTarget(event);
61
+ if (!(target instanceof Element)) return false;
62
+ return target.closest(INTERACTIVE_SELECTOR) !== null;
63
+ }
64
+ const ACTIVATION_KEYS = new Set([" ", "Enter"]);
65
+ /**
66
+ * Selector for elements that use Space/Enter as a native activation key.
67
+ * Narrower than `INTERACTIVE_SELECTOR` — excludes editable elements like
68
+ * `input`, `textarea`, `select` where Space/Enter is text input, not activation.
69
+ */
70
+ const ACTIVATABLE_SELECTOR = "button,a[href],[role=\"slider\"],[role=\"button\"]";
71
+ /** Whether the event is an activation key on an activatable element (button, link, slider). */
72
+ function isInteractiveActivation(event) {
73
+ if (!ACTIVATION_KEYS.has(event.key)) return false;
74
+ const target = resolveEventTarget(event);
75
+ return target instanceof Element && target.matches(ACTIVATABLE_SELECTOR);
76
+ }
77
+
78
+ //#endregion
79
+ //#region ../utils/dist/dom/text-track.js
80
+ /** Find the `<track>` element that owns the given `TextTrack`. */
81
+ function findTrackElement(media, track) {
82
+ if (!(media instanceof HTMLElement)) return null;
83
+ for (const el of media.querySelectorAll("track")) if (el.track === track) return el;
84
+ return null;
85
+ }
86
+ function getTextTrackList(media, filterPred) {
87
+ if (!media.textTracks) return [];
88
+ return Array.from(media.textTracks).filter(filterPred).sort(sortByKind);
89
+ }
90
+ function sortByKind(a, b) {
91
+ return a.kind > b.kind ? 1 : a.kind < b.kind ? -1 : 0;
92
+ }
93
+
94
+ //#endregion
95
+ //#region ../utils/dist/dom/time-ranges.js
96
+ /** Converts a TimeRanges object to an array of [start, end] tuples. */
97
+ function serializeTimeRanges(ranges) {
98
+ const result = [];
99
+ for (let i = 0; i < ranges.length; i++) result.push([ranges.start(i), ranges.end(i)]);
100
+ return result;
101
+ }
102
+
103
+ //#endregion
104
+ //#region ../element/dist/dev/destroy-mixin.js
105
+ /**
106
+ * Mixin that adds a deferred destruction lifecycle to a `ReactiveElement`.
107
+ *
108
+ * On disconnect, schedules destruction after two animation frames.
109
+ * If the element reconnects before the frames fire (e.g. DOM shuffling,
110
+ * framework reconciliation), the `isConnected` check prevents destruction.
111
+ *
112
+ * The `keep-alive` attribute prevents automatic destruction entirely —
113
+ * call `destroy()` manually when done.
114
+ *
115
+ * Subclasses override `destroyCallback()` (calling `super.destroyCallback()`)
116
+ * to release heavy resources like stores or imperative APIs.
117
+ *
118
+ * Mirrors `addController`/`removeController` to track controllers
119
+ * (needed because `ReactiveElement.#controllers` is hard-private),
120
+ * calls `hostDestroyed()` on all tracked controllers in `destroyCallback`,
121
+ * and guards `performUpdate()` so no updates run after destruction.
122
+ */
123
+ function DestroyMixin(SuperClass) {
124
+ class DestroyableElement extends SuperClass {
125
+ #destroyed = false;
126
+ #trackedControllers = /* @__PURE__ */ new Set();
127
+ get destroyed() {
128
+ return this.#destroyed;
129
+ }
130
+ destroy() {
131
+ if (this.#destroyed) return;
132
+ this.#destroyed = true;
133
+ this.destroyCallback();
134
+ }
135
+ destroyCallback() {
136
+ for (const c of this.#trackedControllers) c.hostDestroyed?.();
137
+ }
138
+ addController(controller) {
139
+ super.addController(controller);
140
+ this.#trackedControllers.add(controller);
141
+ }
142
+ removeController(controller) {
143
+ super.removeController(controller);
144
+ this.#trackedControllers.delete(controller);
145
+ }
146
+ connectedCallback() {
147
+ if (this.#destroyed) return;
148
+ super.connectedCallback();
149
+ }
150
+ disconnectedCallback() {
151
+ super.disconnectedCallback();
152
+ if (!this.#destroyed && !this.hasAttribute("keep-alive")) requestAnimationFrame(() => {
153
+ requestAnimationFrame(() => {
154
+ if (!this.isConnected) this.destroy();
155
+ });
156
+ });
157
+ }
158
+ performUpdate() {
159
+ if (this.#destroyed) return;
160
+ super.performUpdate();
161
+ }
162
+ }
163
+ return DestroyableElement;
164
+ }
165
+
166
+ //#endregion
167
+ //#region ../element/dist/dev/reactive-element.js
168
+ const cache = /* @__PURE__ */ new WeakMap();
169
+ const propertyKeys = /* @__PURE__ */ new Map();
170
+ /**
171
+ * Lightweight reactive custom element base class.
172
+ *
173
+ * Drop-in subset of Lit's `ReactiveElement` — supports `static properties`,
174
+ * attribute reflection, batched async updates, and reactive controllers.
175
+ * No Shadow DOM, no `static styles`, no decorators.
176
+ *
177
+ * Updates are batched using the same Promise-based scheduling as Lit:
178
+ * property changes enqueue a microtask, and the update is gated behind
179
+ * `connectedCallback` so the first update only runs once the element
180
+ * is in the document.
181
+ *
182
+ * Subclasses that extend another element with properties must spread them:
183
+ *
184
+ * @example
185
+ * ```ts
186
+ * class MyButton extends ReactiveElement {
187
+ * static override properties = {
188
+ * label: { type: String },
189
+ * disabled: { type: Boolean },
190
+ * };
191
+ *
192
+ * label = 'Click me';
193
+ * disabled = false;
194
+ *
195
+ * protected override update(changed: PropertyValues): void {
196
+ * super.update(changed);
197
+ * this.textContent = this.label;
198
+ * }
199
+ * }
200
+ *
201
+ * // Inheritance — spread parent properties
202
+ * class FancyButton extends MyButton {
203
+ * static override properties = {
204
+ * ...MyButton.properties,
205
+ * variant: { type: String },
206
+ * };
207
+ *
208
+ * variant = 'primary';
209
+ * }
210
+ * ```
211
+ */
212
+ var ReactiveElement = class extends HTMLElement {
213
+ static {
214
+ this.properties = {};
215
+ }
216
+ /**
217
+ * Returns a list of attributes corresponding to the registered properties.
218
+ */
219
+ static get observedAttributes() {
220
+ return [...resolve(this).attrToProp.keys()];
221
+ }
222
+ #controllers = /* @__PURE__ */ new Set();
223
+ #changedProperties = /* @__PURE__ */ new Map();
224
+ #instanceProperties;
225
+ /**
226
+ * Promise that gates the first update until `connectedCallback`. Also
227
+ * used to serialize updates — each `#enqueueUpdate` awaits the previous
228
+ * `#updatePromise`, so property changes are batched and updates never
229
+ * overlap. Matches Lit's scheduling model.
230
+ */
231
+ #updatePromise;
232
+ constructor() {
233
+ super();
234
+ this.isUpdatePending = false;
235
+ this.hasUpdated = false;
236
+ this.#updatePromise = new Promise((res) => this.enableUpdating = res);
237
+ const { props } = resolve(this.constructor);
238
+ for (const name of props.keys()) if (Object.hasOwn(this, name)) {
239
+ (this.#instanceProperties ??= /* @__PURE__ */ new Map()).set(name, this[name]);
240
+ delete this[name];
241
+ }
242
+ this.requestUpdate();
243
+ }
244
+ /**
245
+ * Note, this method should be considered final and not overridden. It is
246
+ * overridden on the element instance with a function that triggers the
247
+ * first update.
248
+ */
249
+ enableUpdating(_requestedUpdate) {}
250
+ /**
251
+ * Registers a {@linkcode ReactiveController} to participate in the
252
+ * element's reactive update cycle. The element automatically calls into
253
+ * any registered controllers during its lifecycle callbacks.
254
+ *
255
+ * If the element is connected when `addController()` is called, the
256
+ * controller's `hostConnected()` callback will be immediately called.
257
+ */
258
+ addController(controller) {
259
+ this.#controllers.add(controller);
260
+ if (this.isConnected) controller.hostConnected?.();
261
+ }
262
+ /** Removes a {@linkcode ReactiveController} from the element. */
263
+ removeController(controller) {
264
+ this.#controllers.delete(controller);
265
+ }
266
+ /**
267
+ * On first connection, enables updating and notifies controllers.
268
+ */
269
+ connectedCallback() {
270
+ this.enableUpdating(true);
271
+ for (const c of this.#controllers) c.hostConnected?.();
272
+ }
273
+ disconnectedCallback() {
274
+ for (const c of this.#controllers) c.hostDisconnected?.();
275
+ }
276
+ /**
277
+ * Synchronizes property values when attributes change.
278
+ *
279
+ * Specifically, when an attribute is set, the corresponding property is
280
+ * set. You should rarely need to implement this callback. If this method
281
+ * is overridden, `super.attributeChangedCallback(name, _old, value)` must
282
+ * be called.
283
+ */
284
+ attributeChangedCallback(attr, oldValue, newValue) {
285
+ if (oldValue === newValue) return;
286
+ const { props, attrToProp } = resolve(this.constructor);
287
+ const propName = attrToProp.get(attr);
288
+ if (!propName) return;
289
+ const decl = props.get(propName);
290
+ if (!decl) return;
291
+ let value = newValue;
292
+ if (decl.type === Boolean) value = newValue !== null;
293
+ else if (decl.type === Number) value = newValue === null ? null : Number(newValue);
294
+ this[propName] = value;
295
+ }
296
+ /**
297
+ * Requests an update which is processed asynchronously. This should be
298
+ * called when an element should update based on some state not triggered
299
+ * by setting a reactive property. In this case, pass no arguments. It
300
+ * should also be called when manually implementing a property setter. In
301
+ * this case, pass the property `name` and `oldValue` to ensure that any
302
+ * configured property options are honored.
303
+ */
304
+ requestUpdate(name, oldValue) {
305
+ if (name !== void 0) this.#changedProperties.set(name, oldValue);
306
+ if (this.isUpdatePending) return;
307
+ this.#updatePromise = this.#enqueueUpdate();
308
+ }
309
+ /**
310
+ * Sets up the element to asynchronously update. Awaits the previous
311
+ * `#updatePromise` which both serializes updates and (on first update)
312
+ * waits for `connectedCallback` to resolve the gate.
313
+ */
314
+ async #enqueueUpdate() {
315
+ this.isUpdatePending = true;
316
+ try {
317
+ await this.#updatePromise;
318
+ } catch (e) {
319
+ Promise.reject(e);
320
+ }
321
+ const result = this.scheduleUpdate();
322
+ if (result != null) await result;
323
+ return !this.isUpdatePending;
324
+ }
325
+ /**
326
+ * Schedules an element update. You can override this method to change the
327
+ * timing of updates by returning a Promise. The update will await the
328
+ * returned Promise, and you should resolve the Promise to allow the update
329
+ * to proceed. If this method is overridden, `super.scheduleUpdate()` must
330
+ * be called.
331
+ *
332
+ * For instance, to schedule updates to occur just before the next frame:
333
+ *
334
+ * ```ts
335
+ * override protected async scheduleUpdate(): Promise<unknown> {
336
+ * await new Promise((resolve) => requestAnimationFrame(() => resolve()));
337
+ * super.scheduleUpdate();
338
+ * }
339
+ * ```
340
+ */
341
+ scheduleUpdate() {
342
+ this.performUpdate();
343
+ }
344
+ /**
345
+ * Performs an element update. Note, if an exception is thrown during the
346
+ * update, `firstUpdated` and `updated` will not be called.
347
+ *
348
+ * Call `performUpdate()` to immediately process a pending update. This
349
+ * should generally not be needed, but it can be done in rare cases when
350
+ * you need to update synchronously.
351
+ */
352
+ performUpdate() {
353
+ if (!this.isUpdatePending) return;
354
+ if (!this.hasUpdated && this.#instanceProperties) {
355
+ for (const [name, value] of this.#instanceProperties) this[name] = value;
356
+ this.#instanceProperties = void 0;
357
+ }
358
+ const changed = this.#changedProperties;
359
+ this.willUpdate(changed);
360
+ for (const c of this.#controllers) c.hostUpdate?.();
361
+ this.update(changed);
362
+ this.#changedProperties = /* @__PURE__ */ new Map();
363
+ this.isUpdatePending = false;
364
+ for (const c of this.#controllers) c.hostUpdated?.();
365
+ if (!this.hasUpdated) {
366
+ this.hasUpdated = true;
367
+ this.firstUpdated(changed);
368
+ }
369
+ this.updated(changed);
370
+ }
371
+ /**
372
+ * Invoked before `update()` to compute values needed during the update.
373
+ *
374
+ * Implement `willUpdate` to compute property values that depend on other
375
+ * properties and are used in the rest of the update process.
376
+ *
377
+ * ```ts
378
+ * willUpdate(changed) {
379
+ * if (changed.has('firstName') || changed.has('lastName')) {
380
+ * this.sha = computeSHA(`${this.firstName} ${this.lastName}`);
381
+ * }
382
+ * }
383
+ * ```
384
+ */
385
+ willUpdate(_changed) {}
386
+ /**
387
+ * Updates the element. This method reflects property values to attributes
388
+ * and can be overridden to render and keep updated element DOM. Setting
389
+ * properties inside this method will *not* trigger another update.
390
+ */
391
+ update(_changed) {}
392
+ /**
393
+ * Invoked when the element is first updated. Implement to perform one
394
+ * time work on the element after update.
395
+ *
396
+ * Setting properties inside this method will trigger the element to
397
+ * update again after this update cycle completes.
398
+ */
399
+ firstUpdated(_changed) {}
400
+ /**
401
+ * Invoked whenever the element is updated. Implement to perform
402
+ * post-updating tasks via DOM APIs, for example, focusing an element.
403
+ *
404
+ * Setting properties inside this method will trigger the element to
405
+ * update again after this update cycle completes.
406
+ */
407
+ updated(_changed) {}
408
+ /**
409
+ * Returns a Promise that resolves when the element has completed updating.
410
+ * The Promise value is a boolean that is `true` if the element completed
411
+ * the update without triggering another update. The Promise result is
412
+ * `false` if a property was set inside `updated()`.
413
+ */
414
+ get updateComplete() {
415
+ return this.#updatePromise;
416
+ }
417
+ };
418
+ /**
419
+ * Resolve `ctor.properties` into lookup Maps and install reactive accessors
420
+ * on the prototype. Runs once per class, result is cached.
421
+ *
422
+ * Subclasses that need parent properties must spread them:
423
+ * `static override properties = { ...Parent.properties, ... }`.
424
+ */
425
+ function resolve(ctor) {
426
+ const existing = cache.get(ctor);
427
+ if (existing) return existing;
428
+ const props = /* @__PURE__ */ new Map();
429
+ const attrToProp = /* @__PURE__ */ new Map();
430
+ for (const [name, decl] of Object.entries(ctor.properties)) {
431
+ props.set(name, decl);
432
+ attrToProp.set(decl.attribute ?? name, name);
433
+ if (!Object.getOwnPropertyDescriptor(ctor.prototype, name)?.get) {
434
+ let key = propertyKeys.get(name);
435
+ if (!key) {
436
+ key = Symbol(name);
437
+ propertyKeys.set(name, key);
438
+ }
439
+ Object.defineProperty(ctor.prototype, name, {
440
+ get() {
441
+ return this[key];
442
+ },
443
+ set(value) {
444
+ const old = this[key];
445
+ this[key] = value;
446
+ if (!Object.is(old, value)) this.requestUpdate(name, old);
447
+ },
448
+ configurable: true,
449
+ enumerable: true
450
+ });
451
+ }
452
+ }
453
+ const meta = {
454
+ props,
455
+ attrToProp
456
+ };
457
+ cache.set(ctor, meta);
458
+ return meta;
459
+ }
460
+
461
+ //#endregion
462
+ //#region ../../node_modules/.pnpm/@lit+context@1.1.6/node_modules/@lit/context/development/lib/controllers/context-consumer.js
463
+ /**
464
+ * @license
465
+ * Copyright 2021 Google LLC
466
+ * SPDX-License-Identifier: BSD-3-Clause
467
+ */
468
+ /**
469
+ * A ReactiveController which adds context consuming behavior to a custom
470
+ * element by dispatching `context-request` events.
471
+ *
472
+ * When the host element is connected to the document it will emit a
473
+ * `context-request` event with its context key. When the context request
474
+ * is satisfied the controller will invoke the callback, if present, and
475
+ * trigger a host update so it can respond to the new value.
476
+ *
477
+ * It will also call the dispose method given by the provider when the
478
+ * host element is disconnected.
479
+ */
480
+ var ContextConsumer = class {
481
+ constructor(host, contextOrOptions, callback, subscribe) {
482
+ this.subscribe = false;
483
+ this.provided = false;
484
+ this.value = void 0;
485
+ this._callback = (value, unsubscribe) => {
486
+ if (this.unsubscribe) {
487
+ if (this.unsubscribe !== unsubscribe) {
488
+ this.provided = false;
489
+ this.unsubscribe();
490
+ }
491
+ if (!this.subscribe) this.unsubscribe();
492
+ }
493
+ this.value = value;
494
+ this.host.requestUpdate();
495
+ if (!this.provided || this.subscribe) {
496
+ this.provided = true;
497
+ if (this.callback) this.callback(value, unsubscribe);
498
+ }
499
+ this.unsubscribe = unsubscribe;
500
+ };
501
+ this.host = host;
502
+ if (contextOrOptions.context !== void 0) {
503
+ const options = contextOrOptions;
504
+ this.context = options.context;
505
+ this.callback = options.callback;
506
+ this.subscribe = options.subscribe ?? false;
507
+ } else {
508
+ this.context = contextOrOptions;
509
+ this.callback = callback;
510
+ this.subscribe = subscribe ?? false;
511
+ }
512
+ this.host.addController(this);
513
+ }
514
+ hostConnected() {
515
+ this.dispatchRequest();
516
+ }
517
+ hostDisconnected() {
518
+ if (this.unsubscribe) {
519
+ this.unsubscribe();
520
+ this.unsubscribe = void 0;
521
+ }
522
+ }
523
+ dispatchRequest() {
524
+ this.host.dispatchEvent(new ContextRequestEvent(this.context, this.host, this._callback, this.subscribe));
525
+ }
526
+ };
527
+
528
+ //#endregion
529
+ //#region ../../node_modules/.pnpm/@lit+context@1.1.6/node_modules/@lit/context/development/lib/value-notifier.js
530
+ /**
531
+ * @license
532
+ * Copyright 2021 Google LLC
533
+ * SPDX-License-Identifier: BSD-3-Clause
534
+ */
535
+ /**
536
+ * A simple class which stores a value, and triggers registered callbacks when
537
+ * the value is changed via its setter.
538
+ *
539
+ * An implementor might use other observable patterns such as MobX or Redux to
540
+ * get behavior like this. But this is a pretty minimal approach that will
541
+ * likely work for a number of use cases.
542
+ */
543
+ var ValueNotifier = class {
544
+ get value() {
545
+ return this._value;
546
+ }
547
+ set value(v) {
548
+ this.setValue(v);
549
+ }
550
+ setValue(v, force = false) {
551
+ const update = force || !Object.is(v, this._value);
552
+ this._value = v;
553
+ if (update) this.updateObservers();
554
+ }
555
+ constructor(defaultValue) {
556
+ this.subscriptions = /* @__PURE__ */ new Map();
557
+ this.updateObservers = () => {
558
+ for (const [callback, { disposer }] of this.subscriptions) callback(this._value, disposer);
559
+ };
560
+ if (defaultValue !== void 0) this.value = defaultValue;
561
+ }
562
+ addCallback(callback, consumerHost, subscribe) {
563
+ if (!subscribe) {
564
+ callback(this.value);
565
+ return;
566
+ }
567
+ if (!this.subscriptions.has(callback)) this.subscriptions.set(callback, {
568
+ disposer: () => {
569
+ this.subscriptions.delete(callback);
570
+ },
571
+ consumerHost
572
+ });
573
+ const { disposer } = this.subscriptions.get(callback);
574
+ callback(this.value, disposer);
575
+ }
576
+ clearCallbacks() {
577
+ this.subscriptions.clear();
578
+ }
579
+ };
580
+
581
+ //#endregion
582
+ //#region ../../node_modules/.pnpm/@lit+context@1.1.6/node_modules/@lit/context/development/lib/controllers/context-provider.js
583
+ /**
584
+ * @license
585
+ * Copyright 2021 Google LLC
586
+ * SPDX-License-Identifier: BSD-3-Clause
587
+ */
588
+ var ContextProviderEvent = class extends Event {
589
+ /**
590
+ *
591
+ * @param context the context which this provider can provide
592
+ * @param contextTarget the original context target of the provider
593
+ */
594
+ constructor(context, contextTarget) {
595
+ super("context-provider", {
596
+ bubbles: true,
597
+ composed: true
598
+ });
599
+ this.context = context;
600
+ this.contextTarget = contextTarget;
601
+ }
602
+ };
603
+ /**
604
+ * A ReactiveController which adds context provider behavior to a
605
+ * custom element.
606
+ *
607
+ * This controller simply listens to the `context-request` event when
608
+ * the host is connected to the DOM and registers the received callbacks
609
+ * against its observable Context implementation.
610
+ *
611
+ * The controller may also be attached to any HTML element in which case it's
612
+ * up to the user to call hostConnected() when attached to the DOM. This is
613
+ * done automatically for any custom elements implementing
614
+ * ReactiveControllerHost.
615
+ */
616
+ var ContextProvider = class extends ValueNotifier {
617
+ constructor(host, contextOrOptions, initialValue) {
618
+ super(contextOrOptions.context !== void 0 ? contextOrOptions.initialValue : initialValue);
619
+ this.onContextRequest = (ev) => {
620
+ if (ev.context !== this.context) return;
621
+ const consumerHost = ev.contextTarget ?? ev.composedPath()[0];
622
+ if (consumerHost === this.host) return;
623
+ ev.stopPropagation();
624
+ this.addCallback(ev.callback, consumerHost, ev.subscribe);
625
+ };
626
+ /**
627
+ * When we get a provider request event, that means a child of this element
628
+ * has just woken up. If it's a provider of our context, then we may need to
629
+ * re-parent our subscriptions, because is a more specific provider than us
630
+ * for its subtree.
631
+ */
632
+ this.onProviderRequest = (ev) => {
633
+ if (ev.context !== this.context) return;
634
+ if ((ev.contextTarget ?? ev.composedPath()[0]) === this.host) return;
635
+ const seen = /* @__PURE__ */ new Set();
636
+ for (const [callback, { consumerHost }] of this.subscriptions) {
637
+ if (seen.has(callback)) continue;
638
+ seen.add(callback);
639
+ consumerHost.dispatchEvent(new ContextRequestEvent(this.context, consumerHost, callback, true));
640
+ }
641
+ ev.stopPropagation();
642
+ };
643
+ this.host = host;
644
+ if (contextOrOptions.context !== void 0) this.context = contextOrOptions.context;
645
+ else this.context = contextOrOptions;
646
+ this.attachListeners();
647
+ this.host.addController?.(this);
648
+ }
649
+ attachListeners() {
650
+ this.host.addEventListener("context-request", this.onContextRequest);
651
+ this.host.addEventListener("context-provider", this.onProviderRequest);
652
+ }
653
+ hostConnected() {
654
+ this.host.dispatchEvent(new ContextProviderEvent(this.context, this.host));
655
+ }
656
+ };
657
+
658
+ //#endregion
659
+ //#region src/store/container-mixin.ts
660
+ /**
661
+ * Create a mixin that consumes player context and registers itself as the
662
+ * container element with the provider via `containerContext`.
663
+ *
664
+ * @param config - Container configuration with player and container contexts.
665
+ */
666
+ function createContainerMixin(config) {
667
+ return (BaseClass) => {
668
+ class PlayerContainerElement extends BaseClass {
669
+ #contextStore = null;
670
+ #setContainer = null;
671
+ constructor(...args) {
672
+ super(...args);
673
+ new ContextConsumer(this, {
674
+ context: config.playerContext,
675
+ callback: (value) => {
676
+ this.#contextStore = value ?? null;
677
+ },
678
+ subscribe: true
679
+ });
680
+ new ContextConsumer(this, {
681
+ context: config.containerContext,
682
+ callback: (value) => {
683
+ this.#setContainer = value?.setContainer ?? null;
684
+ if (this.isConnected) this.#setContainer?.(this);
685
+ },
686
+ subscribe: true
687
+ });
688
+ }
689
+ get store() {
690
+ return this.#contextStore;
691
+ }
692
+ connectedCallback() {
693
+ super.connectedCallback();
694
+ this.#setContainer?.(this);
695
+ }
696
+ disconnectedCallback() {
697
+ super.disconnectedCallback();
698
+ this.#setContainer?.(null);
699
+ }
700
+ }
701
+ return PlayerContainerElement;
702
+ };
703
+ }
704
+
705
+ //#endregion
706
+ //#region src/ui/media-element.ts
707
+ /** Base class for interactive media UI elements. */
708
+ var MediaElement = class extends DestroyMixin(ReactiveElement) {};
709
+
710
+ //#endregion
711
+ //#region src/media/container-element.ts
712
+ const ContainerMixin = createContainerMixin({
713
+ playerContext,
714
+ containerContext
715
+ });
716
+ var MediaContainerElement = class extends ContainerMixin(MediaElement) {
717
+ static {
718
+ this.tagName = "media-container";
719
+ }
720
+ #disconnect = null;
721
+ connectedCallback() {
722
+ super.connectedCallback();
723
+ if (!this.hasAttribute("tabindex")) this.setAttribute("tabindex", "0");
724
+ this.#disconnect = new AbortController();
725
+ listen(this, "pointerup", this.#onPointerUp, { signal: this.#disconnect.signal });
726
+ }
727
+ disconnectedCallback() {
728
+ super.disconnectedCallback();
729
+ this.#disconnect?.abort();
730
+ this.#disconnect = null;
731
+ }
732
+ #onPointerUp = () => {
733
+ if (!this.contains(document.activeElement) || document.activeElement === document.body) this.focus({ preventScroll: true });
734
+ };
735
+ };
736
+
737
+ //#endregion
738
+ //#region ../utils/dist/predicate/predicate.js
739
+ function isNumber(value) {
740
+ return typeof value === "number";
741
+ }
742
+ function isFunction(value) {
743
+ return typeof value === "function";
744
+ }
745
+ function isNull(value) {
746
+ return value === null;
747
+ }
748
+ function isUndefined(value) {
749
+ return typeof value === "undefined";
750
+ }
751
+ /**
752
+ * Check if a value is an object, excluding null.
753
+ */
754
+ function isObject(value) {
755
+ return value !== null && typeof value === "object";
756
+ }
757
+
758
+ //#endregion
759
+ //#region ../store/dist/dev/core/abort-controller-registry.js
760
+ var AbortControllerRegistry = class {
761
+ #base = new AbortController();
762
+ #keys = /* @__PURE__ */ new Map();
763
+ /** The attach-scoped signal. Aborts on detach or reattach. */
764
+ get base() {
765
+ return this.#base.signal;
766
+ }
767
+ /** Clears all keyed signals, leaving base intact. */
768
+ clear() {
769
+ for (const controller of this.#keys.values()) controller.abort();
770
+ this.#keys.clear();
771
+ }
772
+ /** Resets base and clears all keyed signals. */
773
+ reset() {
774
+ this.clear();
775
+ this.#base.abort();
776
+ this.#base = new AbortController();
777
+ }
778
+ /** Creates a new signal for the key, superseding any previous signal. */
779
+ supersede(key) {
780
+ this.#keys.get(key)?.abort();
781
+ const controller = new AbortController();
782
+ this.#keys.set(key, controller);
783
+ return anyAbortSignal([this.#base.signal, controller.signal]);
784
+ }
785
+ };
786
+
787
+ //#endregion
788
+ //#region ../store/dist/dev/core/combine.js
789
+ /**
790
+ * Combines multiple slices into a single slice.
791
+ *
792
+ * @param slices - The slices to combine.
793
+ * @returns A new slice that represents the combination of the input slices.
794
+ */
795
+ function combine(...slices) {
796
+ return {
797
+ state: (ctx) => {
798
+ const states = slices.map((slice) => slice.state(ctx));
799
+ {
800
+ const seen = /* @__PURE__ */ new Set();
801
+ for (const state of states) for (const key of Object.keys(state)) {
802
+ if (seen.has(key)) console.warn(`[vjs-store] combine(): duplicate state key "${key}" — later slice overwrites earlier one`);
803
+ seen.add(key);
804
+ }
805
+ }
806
+ return Object.assign({}, ...states);
807
+ },
808
+ attach: (ctx) => {
809
+ for (const slice of slices) try {
810
+ slice.attach?.(ctx);
811
+ } catch (err) {
812
+ ctx.reportError(err);
813
+ }
814
+ }
815
+ };
816
+ }
817
+
818
+ //#endregion
819
+ //#region ../store/dist/dev/core/errors.js
820
+ var StoreError = class extends Error {
821
+ code;
822
+ cause;
823
+ constructor(code, options) {
824
+ super(options?.message ?? code);
825
+ this.name = "StoreError";
826
+ this.code = code;
827
+ this.cause = options?.cause;
828
+ }
829
+ };
830
+ function throwNoTargetError() {
831
+ throw new StoreError("NO_TARGET");
832
+ }
833
+ function throwDestroyedError() {
834
+ throw new StoreError("DESTROYED");
835
+ }
836
+
837
+ //#endregion
838
+ //#region ../store/dist/dev/core/slice.js
839
+ function defineSlice() {
840
+ return (config) => config;
841
+ }
842
+
843
+ //#endregion
844
+ //#region ../utils/dist/function/noop.js
845
+ function noop(..._args) {}
846
+
847
+ //#endregion
848
+ //#region ../store/dist/dev/core/state.js
849
+ let isFlushScheduled = false;
850
+ function scheduleFlush() {
851
+ if (isFlushScheduled) return;
852
+ isFlushScheduled = true;
853
+ queueMicrotask(flush);
854
+ }
855
+ const pendingContainers = /* @__PURE__ */ new Set();
856
+ function flush() {
857
+ isFlushScheduled = false;
858
+ for (const container of pendingContainers) container.flush();
859
+ pendingContainers.clear();
860
+ }
861
+ const hasOwnProp = Object.prototype.hasOwnProperty;
862
+ var StateContainer = class {
863
+ #current;
864
+ #listeners = /* @__PURE__ */ new Set();
865
+ #pending = false;
866
+ constructor(initial) {
867
+ this.#current = Object.freeze({ ...initial });
868
+ }
869
+ get current() {
870
+ return this.#current;
871
+ }
872
+ patch(partial) {
873
+ const next = { ...this.#current };
874
+ let changed = false;
875
+ for (const key in partial) {
876
+ if (!hasOwnProp.call(partial, key)) continue;
877
+ const value = partial[key];
878
+ if (!Object.is(this.#current[key], value)) {
879
+ next[key] = value;
880
+ changed = true;
881
+ }
882
+ }
883
+ if (changed) {
884
+ this.#current = Object.freeze(next);
885
+ this.#markPending();
886
+ }
887
+ }
888
+ subscribe(callback, options) {
889
+ const signal = options?.signal;
890
+ if (signal?.aborted) return noop;
891
+ this.#listeners.add(callback);
892
+ if (!signal) return () => this.#listeners.delete(callback);
893
+ const onAbort = () => this.#listeners.delete(callback);
894
+ signal.addEventListener("abort", onAbort, { once: true });
895
+ return () => {
896
+ signal.removeEventListener("abort", onAbort);
897
+ this.#listeners.delete(callback);
898
+ };
899
+ }
900
+ flush() {
901
+ if (!this.#pending) return;
902
+ this.#pending = false;
903
+ for (const fn of this.#listeners) fn();
904
+ }
905
+ #markPending() {
906
+ this.#pending = true;
907
+ pendingContainers.add(this);
908
+ scheduleFlush();
909
+ }
910
+ };
911
+ function createState(initial) {
912
+ return new StateContainer(initial);
913
+ }
914
+
915
+ //#endregion
916
+ //#region ../store/dist/dev/core/store.js
917
+ const STORE_SYMBOL = Symbol("@videojs/store");
918
+ function createStore() {
919
+ return (slice, options = {}) => {
920
+ let target = null;
921
+ let destroyed = false;
922
+ const setupAbort = new AbortController();
923
+ const signals = new AbortControllerRegistry();
924
+ let state;
925
+ function validate() {
926
+ if (destroyed) throwDestroyedError();
927
+ if (!target) throwNoTargetError();
928
+ }
929
+ const initialState = slice.state({
930
+ target: () => {
931
+ validate();
932
+ return target;
933
+ },
934
+ signals,
935
+ get: () => state.current,
936
+ set: (partial) => state.patch(partial)
937
+ });
938
+ state = createState(initialState);
939
+ const store = {
940
+ [STORE_SYMBOL]: true,
941
+ get $state() {
942
+ return state;
943
+ },
944
+ get target() {
945
+ return target;
946
+ },
947
+ get destroyed() {
948
+ return destroyed;
949
+ },
950
+ get state() {
951
+ return state.current;
952
+ },
953
+ attach,
954
+ destroy,
955
+ subscribe
956
+ };
957
+ for (const key of Object.keys(initialState)) Object.defineProperty(store, key, {
958
+ get: () => state.current[key],
959
+ enumerable: true
960
+ });
961
+ try {
962
+ options.onSetup?.({
963
+ store,
964
+ signal: setupAbort.signal
965
+ });
966
+ } catch (error) {
967
+ reportError(error);
968
+ }
969
+ return store;
970
+ function attach(newTarget) {
971
+ if (destroyed) throwDestroyedError();
972
+ signals.reset();
973
+ target = newTarget;
974
+ const attachContext = {
975
+ target: newTarget,
976
+ signal: signals.base,
977
+ get: () => state.current,
978
+ set: (partial) => state.patch(partial),
979
+ reportError,
980
+ store: {
981
+ get state() {
982
+ return state.current;
983
+ },
984
+ subscribe
985
+ }
986
+ };
987
+ try {
988
+ slice.attach?.(attachContext);
989
+ } catch (error) {
990
+ reportError(error);
991
+ }
992
+ try {
993
+ options.onAttach?.({
994
+ store,
995
+ target: newTarget,
996
+ signal: signals.base
997
+ });
998
+ } catch (error) {
999
+ reportError(error);
1000
+ }
1001
+ return detach;
1002
+ }
1003
+ function detach() {
1004
+ if (isNull(target)) return;
1005
+ signals.reset();
1006
+ target = null;
1007
+ state.patch(initialState);
1008
+ }
1009
+ function destroy() {
1010
+ if (destroyed) return;
1011
+ destroyed = true;
1012
+ detach();
1013
+ setupAbort.abort();
1014
+ }
1015
+ function subscribe(callback, options) {
1016
+ return state.subscribe(callback, options);
1017
+ }
1018
+ function reportError(error) {
1019
+ if (options.onError) options.onError({
1020
+ store,
1021
+ error
1022
+ });
1023
+ else console.error("[vjs-store]", error);
1024
+ }
1025
+ };
1026
+ }
1027
+ function isStore(value) {
1028
+ return isObject(value) && STORE_SYMBOL in value;
1029
+ }
1030
+
1031
+ //#endregion
1032
+ //#region ../core/dist/dev/dom/feature.js
1033
+ const definePlayerFeature = defineSlice();
1034
+
1035
+ //#endregion
1036
+ //#region ../core/dist/dev/dom/media/predicate.js
1037
+ function hasMetadata(media) {
1038
+ return media.readyState >= 1;
1039
+ }
1040
+ function isMediaPauseCapable(value) {
1041
+ return isObject(value) && "paused" in value && "ended" in value && isFunction(value.pause);
1042
+ }
1043
+ function isMediaSeekCapable(value) {
1044
+ return isObject(value) && "currentTime" in value && "duration" in value && "seeking" in value;
1045
+ }
1046
+ function isMediaSourceCapable(value) {
1047
+ return isObject(value) && "src" in value && "currentSrc" in value && "readyState" in value && isFunction(value.load);
1048
+ }
1049
+ function isMediaVolumeCapable(value) {
1050
+ return isObject(value) && "volume" in value && "muted" in value;
1051
+ }
1052
+ function isMediaPlaybackRateCapable(value) {
1053
+ return isObject(value) && "playbackRate" in value;
1054
+ }
1055
+ function isMediaBufferCapable(value) {
1056
+ return isObject(value) && "buffered" in value && "seekable" in value;
1057
+ }
1058
+ function isMediaErrorCapable(value) {
1059
+ return isObject(value) && "error" in value;
1060
+ }
1061
+ function isMediaTextTrackCapable(value) {
1062
+ return isObject(value) && "textTracks" in value;
1063
+ }
1064
+ function isMediaRemotePlaybackCapable(value) {
1065
+ return isObject(value) && "remote" in value && isObject(value.remote);
1066
+ }
1067
+ function isQuerySelectorAllCapable(value) {
1068
+ return isObject(value) && "querySelectorAll" in value && isFunction(value.querySelectorAll);
1069
+ }
1070
+
1071
+ //#endregion
1072
+ //#region ../core/dist/dev/dom/store/features/buffer.js
1073
+ const bufferFeature = definePlayerFeature({
1074
+ name: "buffer",
1075
+ state: () => ({
1076
+ buffered: [],
1077
+ seekable: []
1078
+ }),
1079
+ attach({ target, signal, set }) {
1080
+ const { media } = target;
1081
+ if (!isMediaBufferCapable(media)) return;
1082
+ const sync = () => set({
1083
+ buffered: serializeTimeRanges(media.buffered),
1084
+ seekable: serializeTimeRanges(media.seekable)
1085
+ });
1086
+ sync();
1087
+ listen(media, "progress", sync, { signal });
1088
+ listen(media, "emptied", sync, { signal });
1089
+ }
1090
+ });
1091
+
1092
+ //#endregion
1093
+ //#region ../core/dist/dev/dom/presentation/cast.js
1094
+ function resolveRemote(media) {
1095
+ const target = media;
1096
+ if (isObject(target.remote) && "state" in target.remote && "prompt" in target.remote) return target.remote;
1097
+ }
1098
+ function isCastConnected(media) {
1099
+ return resolveRemote(media)?.state === "connected";
1100
+ }
1101
+ function isCastConnecting(media) {
1102
+ return resolveRemote(media)?.state === "connecting";
1103
+ }
1104
+ async function requestCast(media) {
1105
+ const remote = resolveRemote(media);
1106
+ if (!remote) throw new DOMException("Remote playback not supported", "NotSupportedError");
1107
+ return remote.prompt();
1108
+ }
1109
+
1110
+ //#endregion
1111
+ //#region ../core/dist/dev/dom/presentation/fullscreen.js
1112
+ function isFullscreenEnabled() {
1113
+ const doc = document;
1114
+ if (doc.fullscreenEnabled || doc.webkitFullscreenEnabled) return true;
1115
+ return isFunction(document.createElement("video").webkitEnterFullscreen);
1116
+ }
1117
+ function getFullscreenElement() {
1118
+ const doc = document;
1119
+ return doc.fullscreenElement ?? doc.webkitFullscreenElement ?? null;
1120
+ }
1121
+ function isFullscreenElement(container, media) {
1122
+ if (media instanceof HTMLMediaElement) {
1123
+ const video = media;
1124
+ if (video.webkitDisplayingFullscreen && video.webkitPresentationMode === "fullscreen") return true;
1125
+ }
1126
+ const target = container ?? media;
1127
+ if (getFullscreenElement() === target) return true;
1128
+ if (target instanceof Element) try {
1129
+ return target.matches(":fullscreen");
1130
+ } catch {
1131
+ return false;
1132
+ }
1133
+ return false;
1134
+ }
1135
+ async function requestFullscreen(container, media) {
1136
+ const doc = document;
1137
+ if (container && (doc.fullscreenEnabled || doc.webkitFullscreenEnabled)) {
1138
+ const el = container;
1139
+ if (isFunction(el.requestFullscreen)) return el.requestFullscreen();
1140
+ if (isFunction(el.webkitRequestFullscreen)) return el.webkitRequestFullscreen();
1141
+ }
1142
+ if (media instanceof HTMLMediaElement) {
1143
+ const video = media;
1144
+ if (isFunction(video.webkitEnterFullscreen)) {
1145
+ video.webkitEnterFullscreen();
1146
+ return;
1147
+ }
1148
+ if (isFunction(media.requestFullscreen)) return media.requestFullscreen();
1149
+ }
1150
+ throw new DOMException("Fullscreen not supported", "NotSupportedError");
1151
+ }
1152
+ async function exitFullscreen(media) {
1153
+ const doc = document;
1154
+ if (media instanceof HTMLMediaElement) {
1155
+ const video = media;
1156
+ if (isFunction(video.webkitExitFullscreen) && video.webkitDisplayingFullscreen) {
1157
+ video.webkitExitFullscreen();
1158
+ return;
1159
+ }
1160
+ }
1161
+ if (isFunction(doc.exitFullscreen)) return doc.exitFullscreen();
1162
+ if (isFunction(doc.webkitExitFullscreen)) return doc.webkitExitFullscreen();
1163
+ }
1164
+
1165
+ //#endregion
1166
+ //#region ../core/dist/dev/dom/store/features/cast.js
1167
+ const castFeature = definePlayerFeature({
1168
+ name: "cast",
1169
+ state: ({ target }) => ({
1170
+ castState: "disconnected",
1171
+ castAvailability: "unavailable",
1172
+ async toggleCast() {
1173
+ const { media, container } = target();
1174
+ if (isCastConnected(media)) return requestCast(media);
1175
+ if (isFullscreenElement(container, media)) await exitFullscreen();
1176
+ return requestCast(media);
1177
+ }
1178
+ }),
1179
+ attach({ target, signal, set }) {
1180
+ const { media } = target;
1181
+ if (!isMediaRemotePlaybackCapable(media)) return;
1182
+ const syncState = () => set({ castState: media.remote.state });
1183
+ syncState();
1184
+ listen(media.remote, "connect", syncState, { signal });
1185
+ listen(media.remote, "connecting", syncState, { signal });
1186
+ listen(media.remote, "disconnect", syncState, { signal });
1187
+ media.remote.watchAvailability((available) => {
1188
+ set({ castAvailability: available ? "available" : "unavailable" });
1189
+ }).catch(() => {
1190
+ set({ castAvailability: "unsupported" });
1191
+ });
1192
+ signal.addEventListener("abort", () => {
1193
+ media.remote?.cancelWatchAvailability().catch(() => {});
1194
+ });
1195
+ }
1196
+ });
1197
+
1198
+ //#endregion
1199
+ //#region ../core/dist/dev/dom/gesture/region.js
1200
+ /**
1201
+ * Determine which named region a pointer position falls into.
1202
+ *
1203
+ * Regions divide the container width equally based on how many are active:
1204
+ * - `left` + `right` → halves (50% / 50%)
1205
+ * - `left` + `center` + `right` → thirds (33% / 34% / 33%)
1206
+ *
1207
+ * Single region: `left` covers the left half, `right` the right half,
1208
+ * and `center` covers the full surface. Partial two-region combos
1209
+ * (e.g. `left` + `center`) use the same natural zones — positions outside
1210
+ * all active zones return `null` so full-surface gestures can handle them.
1211
+ */
1212
+ function resolveRegion(clientX, containerRect, activeRegions) {
1213
+ if (activeRegions.size === 0) return null;
1214
+ const relativeX = clientX - containerRect.left;
1215
+ const width = containerRect.width;
1216
+ if (width === 0) return null;
1217
+ const ratio = relativeX / width;
1218
+ if (activeRegions.size === 2 && activeRegions.has("left") && activeRegions.has("right")) return ratio < .5 ? "left" : "right";
1219
+ if (activeRegions.size === 3) {
1220
+ if (ratio < 1 / 3) return "left";
1221
+ if (ratio < 2 / 3) return "center";
1222
+ return "right";
1223
+ }
1224
+ if (activeRegions.has("left") && ratio < .5) return "left";
1225
+ if (activeRegions.has("right") && ratio >= .5) return "right";
1226
+ if (activeRegions.has("center")) {
1227
+ if (activeRegions.size === 1) return "center";
1228
+ if (ratio >= 1 / 3 && ratio < 2 / 3) return "center";
1229
+ }
1230
+ return null;
1231
+ }
1232
+
1233
+ //#endregion
1234
+ //#region ../core/dist/dev/dom/gesture/coordinator.js
1235
+ const TAP_THRESHOLD$1 = 250;
1236
+ var GestureCoordinator = class {
1237
+ #target;
1238
+ #bindings = [];
1239
+ #recognizers = /* @__PURE__ */ new Set();
1240
+ #disconnect = null;
1241
+ constructor(target) {
1242
+ this.#target = target;
1243
+ }
1244
+ get bindings() {
1245
+ return this.#bindings;
1246
+ }
1247
+ add(binding) {
1248
+ this.#bindings.push(binding);
1249
+ this.#recognizers.add(binding.recognizer);
1250
+ this.#connect();
1251
+ let removed = false;
1252
+ return () => {
1253
+ if (removed) return;
1254
+ removed = true;
1255
+ const idx = this.#bindings.indexOf(binding);
1256
+ if (idx !== -1) this.#bindings.splice(idx, 1);
1257
+ this.#maybeDisconnect();
1258
+ };
1259
+ }
1260
+ #connect() {
1261
+ if (this.#disconnect) return;
1262
+ this.#disconnect = new AbortController();
1263
+ const { signal } = this.#disconnect;
1264
+ let pointerDownTime = 0;
1265
+ listen(this.#target, "pointerdown", (event) => {
1266
+ if (event.button !== 0) return;
1267
+ pointerDownTime = Date.now();
1268
+ }, { signal });
1269
+ listen(this.#target, "pointerup", (event) => {
1270
+ if (event.button !== 0) return;
1271
+ if (Date.now() - pointerDownTime > TAP_THRESHOLD$1) return;
1272
+ if (isInteractiveTarget(event)) return;
1273
+ const pointerType = event.pointerType;
1274
+ const clientX = event.clientX;
1275
+ const target = this.#target;
1276
+ const bindings = this.#bindings;
1277
+ const matches = { resolve: (type) => matchBindings(bindings, type, pointerType, clientX, target) };
1278
+ for (const recognizer of this.#recognizers) recognizer.handleUp(matches, event);
1279
+ }, { signal });
1280
+ }
1281
+ #maybeDisconnect() {
1282
+ if (this.#bindings.length > 0) return;
1283
+ for (const recognizer of this.#recognizers) recognizer.reset();
1284
+ this.#recognizers.clear();
1285
+ this.#disconnect?.abort();
1286
+ this.#disconnect = null;
1287
+ }
1288
+ };
1289
+ const coordinators = /* @__PURE__ */ new WeakMap();
1290
+ /** Look up the gesture coordinator for a target element, if one exists. */
1291
+ function findGestureCoordinator(target) {
1292
+ return coordinators.get(target);
1293
+ }
1294
+ function getGestureCoordinator(target) {
1295
+ let coordinator = coordinators.get(target);
1296
+ if (!coordinator) {
1297
+ coordinator = new GestureCoordinator(target);
1298
+ coordinators.set(target, coordinator);
1299
+ }
1300
+ return coordinator;
1301
+ }
1302
+ function matchBindings(bindings, type, pointerType, clientX, target) {
1303
+ const rect = target.getBoundingClientRect();
1304
+ const activeRegions = getActiveRegions(bindings, type, pointerType);
1305
+ const region = activeRegions.size > 0 ? resolveRegion(clientX, rect, activeRegions) : null;
1306
+ const matches = [];
1307
+ for (const binding of bindings) {
1308
+ if (binding.disabled) continue;
1309
+ if (binding.type !== type) continue;
1310
+ if (binding.pointer && binding.pointer !== pointerType) continue;
1311
+ if (binding.region) {
1312
+ if (binding.region !== region) continue;
1313
+ } else if (region !== null) continue;
1314
+ matches.push(binding);
1315
+ }
1316
+ return matches;
1317
+ }
1318
+ function getActiveRegions(bindings, type, pointerType) {
1319
+ const regions = /* @__PURE__ */ new Set();
1320
+ for (const binding of bindings) {
1321
+ if (binding.disabled) continue;
1322
+ if (binding.type !== type) continue;
1323
+ if (binding.pointer && binding.pointer !== pointerType) continue;
1324
+ if (binding.region) regions.add(binding.region);
1325
+ }
1326
+ return regions;
1327
+ }
1328
+
1329
+ //#endregion
1330
+ //#region ../core/dist/dev/dom/store/features/controls.js
1331
+ const IDLE_DELAY = 2e3;
1332
+ const TAP_THRESHOLD = 250;
1333
+ const controlsFeature = definePlayerFeature({
1334
+ name: "controls",
1335
+ state: ({ get, set }) => ({
1336
+ userActive: true,
1337
+ controlsVisible: true,
1338
+ toggleControls() {
1339
+ const next = !get().userActive;
1340
+ set({
1341
+ userActive: next,
1342
+ controlsVisible: next
1343
+ });
1344
+ return next;
1345
+ }
1346
+ }),
1347
+ attach({ target, signal, get, set }) {
1348
+ const { media, container } = target;
1349
+ if (!isMediaPauseCapable(media) || isNull(container)) {
1350
+ if (isNull(container)) console.warn("[vjs] controlsFeature requires a container element for activity tracking.");
1351
+ return;
1352
+ }
1353
+ const computeVisible = (userActive) => {
1354
+ return userActive || media.paused || isCastConnected(media) || isCastConnecting(media);
1355
+ };
1356
+ let idleTimer;
1357
+ function clearIdle() {
1358
+ clearTimeout(idleTimer);
1359
+ idleTimer = void 0;
1360
+ }
1361
+ function scheduleIdle() {
1362
+ clearIdle();
1363
+ idleTimer = setTimeout(setInactive, IDLE_DELAY);
1364
+ }
1365
+ function setActive() {
1366
+ if (!get().userActive) set({
1367
+ userActive: true,
1368
+ controlsVisible: true
1369
+ });
1370
+ scheduleIdle();
1371
+ }
1372
+ function setInactive() {
1373
+ clearIdle();
1374
+ set({
1375
+ userActive: false,
1376
+ controlsVisible: computeVisible(false)
1377
+ });
1378
+ }
1379
+ set({ toggleControls() {
1380
+ if (get().controlsVisible) setInactive();
1381
+ else setActive();
1382
+ return get().controlsVisible;
1383
+ } });
1384
+ let pointerDownTime = 0;
1385
+ function onPointerDown() {
1386
+ pointerDownTime = Date.now();
1387
+ }
1388
+ function onPointerUp(event) {
1389
+ if (event.pointerType === "touch" && Date.now() - pointerDownTime < TAP_THRESHOLD) {
1390
+ if (findGestureCoordinator(container)?.bindings.some((b) => b.type === "tap" && b.action === "toggleControls" && (!b.pointer || b.pointer === "touch"))) return;
1391
+ const isMediaOrContainer = [media, container].includes(event.target);
1392
+ if (get().controlsVisible && isMediaOrContainer) setInactive();
1393
+ else setActive();
1394
+ } else setActive();
1395
+ }
1396
+ const onPlaybackChange = () => {
1397
+ const { userActive } = get();
1398
+ set({ controlsVisible: computeVisible(userActive) });
1399
+ if (!media.paused && userActive) scheduleIdle();
1400
+ };
1401
+ listen(container, "pointermove", setActive, { signal });
1402
+ listen(container, "pointerdown", onPointerDown, { signal });
1403
+ listen(container, "pointerup", onPointerUp, { signal });
1404
+ listen(container, "keyup", setActive, { signal });
1405
+ listen(container, "focusin", setActive, { signal });
1406
+ listen(container, "mouseleave", setInactive, { signal });
1407
+ listen(media, "play", onPlaybackChange, { signal });
1408
+ listen(media, "pause", onPlaybackChange, { signal });
1409
+ listen(media, "ended", onPlaybackChange, { signal });
1410
+ if (isMediaRemotePlaybackCapable(media)) {
1411
+ const onCastChange = () => {
1412
+ const { userActive } = get();
1413
+ set({ controlsVisible: computeVisible(userActive) });
1414
+ };
1415
+ listen(media.remote, "connect", onCastChange, { signal });
1416
+ listen(media.remote, "connecting", onCastChange, { signal });
1417
+ listen(media.remote, "disconnect", onCastChange, { signal });
1418
+ }
1419
+ signal.addEventListener("abort", clearIdle, { once: true });
1420
+ scheduleIdle();
1421
+ }
1422
+ });
1423
+
1424
+ //#endregion
1425
+ //#region ../core/dist/dev/dom/store/features/error.js
1426
+ const errorFeature = definePlayerFeature({
1427
+ name: "error",
1428
+ state: ({ set }) => ({
1429
+ error: null,
1430
+ dismissError() {
1431
+ set({ error: null });
1432
+ }
1433
+ }),
1434
+ attach({ target, signal, set }) {
1435
+ const { media } = target;
1436
+ if (!isMediaErrorCapable(media)) return;
1437
+ const syncError = () => set({ error: media.error });
1438
+ listen(media, "error", syncError, { signal });
1439
+ listen(media, "emptied", () => set({ error: null }), { signal });
1440
+ }
1441
+ });
1442
+
1443
+ //#endregion
1444
+ //#region ../core/dist/dev/dom/presentation/pip.js
1445
+ function resolveMediaTarget(media) {
1446
+ const target = media.target;
1447
+ return target instanceof HTMLMediaElement ? target : media;
1448
+ }
1449
+ function isPictureInPictureEnabled() {
1450
+ if (document.pictureInPictureEnabled) {
1451
+ const isSafari = /.*Version\/.*Safari\/.*/.test(navigator.userAgent);
1452
+ const isPWA = typeof matchMedia === "function" && matchMedia("(display-mode: standalone)").matches;
1453
+ return !isSafari || !isPWA;
1454
+ }
1455
+ return isFunction(document.createElement("video").webkitSetPresentationMode);
1456
+ }
1457
+ function isPictureInPictureElement(media) {
1458
+ const target = resolveMediaTarget(media);
1459
+ if (document.pictureInPictureElement === target) return true;
1460
+ if (target instanceof HTMLVideoElement) return target.webkitPresentationMode === "picture-in-picture";
1461
+ return false;
1462
+ }
1463
+ async function requestPictureInPicture(media) {
1464
+ const target = resolveMediaTarget(media);
1465
+ if (!(target instanceof HTMLVideoElement)) throw new DOMException("Picture-in-Picture not supported", "NotSupportedError");
1466
+ const video = target;
1467
+ if (isFunction(video.webkitSetPresentationMode)) {
1468
+ video.webkitSetPresentationMode("picture-in-picture");
1469
+ return;
1470
+ }
1471
+ if (isFunction(video.requestPictureInPicture)) {
1472
+ await video.requestPictureInPicture();
1473
+ return;
1474
+ }
1475
+ throw new DOMException("Picture-in-Picture not supported", "NotSupportedError");
1476
+ }
1477
+ async function exitPictureInPicture(media) {
1478
+ if (media) {
1479
+ const target = resolveMediaTarget(media);
1480
+ if (target instanceof HTMLVideoElement) {
1481
+ const video = target;
1482
+ if (isFunction(video.webkitSetPresentationMode) && video.webkitPresentationMode === "picture-in-picture") {
1483
+ video.webkitSetPresentationMode("inline");
1484
+ return;
1485
+ }
1486
+ }
1487
+ }
1488
+ if (isFunction(document.exitPictureInPicture)) return document.exitPictureInPicture();
1489
+ }
1490
+
1491
+ //#endregion
1492
+ //#region ../core/dist/dev/dom/store/features/fullscreen.js
1493
+ const fullscreenFeature = definePlayerFeature({
1494
+ name: "fullscreen",
1495
+ state: ({ target }) => ({
1496
+ fullscreen: false,
1497
+ fullscreenAvailability: "unavailable",
1498
+ async requestFullscreen() {
1499
+ const { media, container } = target();
1500
+ if (isPictureInPictureElement(media)) await exitPictureInPicture(media);
1501
+ return requestFullscreen(container, media);
1502
+ },
1503
+ async exitFullscreen() {
1504
+ const { media } = target();
1505
+ return exitFullscreen(media);
1506
+ },
1507
+ async toggleFullscreen() {
1508
+ const { media, container } = target();
1509
+ if (isFullscreenElement(container, media)) return exitFullscreen(media);
1510
+ if (isPictureInPictureElement(media)) await exitPictureInPicture(media);
1511
+ return requestFullscreen(container, media);
1512
+ }
1513
+ }),
1514
+ attach({ target, signal, set }) {
1515
+ const { media, container } = target;
1516
+ set({ fullscreenAvailability: isFullscreenEnabled() ? "available" : "unsupported" });
1517
+ const sync = () => set({ fullscreen: isFullscreenElement(container, media) });
1518
+ sync();
1519
+ listen(document, "fullscreenchange", sync, { signal });
1520
+ listen(document, "webkitfullscreenchange", sync, { signal });
1521
+ if ("webkitPresentationMode" in media) listen(media, "webkitpresentationmodechanged", sync, { signal });
1522
+ }
1523
+ });
1524
+
1525
+ //#endregion
1526
+ //#region ../core/dist/dev/dom/store/features/pip.js
1527
+ const pipFeature = definePlayerFeature({
1528
+ name: "pip",
1529
+ state: ({ target }) => ({
1530
+ pip: false,
1531
+ pipAvailability: "unavailable",
1532
+ async requestPictureInPicture() {
1533
+ const { media, container } = target();
1534
+ if (isFullscreenElement(container, media)) await exitFullscreen();
1535
+ return requestPictureInPicture(media);
1536
+ },
1537
+ async exitPictureInPicture() {
1538
+ const { media } = target();
1539
+ return exitPictureInPicture(media);
1540
+ },
1541
+ async togglePictureInPicture() {
1542
+ const { media, container } = target();
1543
+ if (isPictureInPictureElement(media)) return exitPictureInPicture(media);
1544
+ if (isFullscreenElement(container, media)) await exitFullscreen();
1545
+ return requestPictureInPicture(media);
1546
+ }
1547
+ }),
1548
+ attach({ target, signal, set }) {
1549
+ const { media } = target;
1550
+ set({ pipAvailability: isPictureInPictureEnabled() ? "available" : "unsupported" });
1551
+ const sync = () => set({ pip: isPictureInPictureElement(media) });
1552
+ sync();
1553
+ listen(media, "enterpictureinpicture", sync, { signal });
1554
+ listen(media, "leavepictureinpicture", sync, { signal });
1555
+ if ("webkitPresentationMode" in media) listen(media, "webkitpresentationmodechanged", sync, { signal });
1556
+ }
1557
+ });
1558
+
1559
+ //#endregion
1560
+ //#region ../core/dist/dev/dom/store/features/playback.js
1561
+ const playbackFeature = definePlayerFeature({
1562
+ name: "playback",
1563
+ state: ({ target }) => ({
1564
+ paused: true,
1565
+ ended: false,
1566
+ started: false,
1567
+ waiting: false,
1568
+ play() {
1569
+ return target().media.play();
1570
+ },
1571
+ pause() {
1572
+ const { media } = target();
1573
+ if (isMediaPauseCapable(media)) media.pause();
1574
+ },
1575
+ togglePaused() {
1576
+ const media = target().media;
1577
+ if (!isMediaPauseCapable(media)) return false;
1578
+ if (media.paused) {
1579
+ media.play();
1580
+ return true;
1581
+ }
1582
+ media.pause();
1583
+ return false;
1584
+ }
1585
+ }),
1586
+ attach({ target, signal, set }) {
1587
+ const { media } = target;
1588
+ if (!isMediaPauseCapable(media) || !isMediaSeekCapable(media) || !isMediaSourceCapable(media)) return;
1589
+ const sync = () => set({
1590
+ paused: media.paused,
1591
+ ended: media.ended,
1592
+ started: !media.paused || media.currentTime > 0,
1593
+ waiting: media.readyState < HTMLMediaElement.HAVE_FUTURE_DATA && !media.paused
1594
+ });
1595
+ sync();
1596
+ listen(media, "emptied", sync, { signal });
1597
+ listen(media, "play", sync, { signal });
1598
+ listen(media, "pause", sync, { signal });
1599
+ listen(media, "ended", sync, { signal });
1600
+ listen(media, "playing", sync, { signal });
1601
+ listen(media, "waiting", sync, { signal });
1602
+ listen(media, "seeked", sync, { signal });
1603
+ }
1604
+ });
1605
+
1606
+ //#endregion
1607
+ //#region ../core/dist/dev/dom/store/features/playback-rate.js
1608
+ const DEFAULT_RATES = [
1609
+ .2,
1610
+ .5,
1611
+ .7,
1612
+ 1,
1613
+ 1.2,
1614
+ 1.5,
1615
+ 1.7,
1616
+ 2
1617
+ ];
1618
+ const playbackRateFeature = definePlayerFeature({
1619
+ name: "playbackRate",
1620
+ state: ({ target }) => ({
1621
+ playbackRates: DEFAULT_RATES,
1622
+ playbackRate: 1,
1623
+ setPlaybackRate(rate) {
1624
+ const { media } = target();
1625
+ if (isMediaPlaybackRateCapable(media)) media.playbackRate = rate;
1626
+ }
1627
+ }),
1628
+ attach({ target, signal, set }) {
1629
+ const { media } = target;
1630
+ if (!isMediaPlaybackRateCapable(media)) return;
1631
+ const sync = () => set({ playbackRate: media.playbackRate });
1632
+ sync();
1633
+ listen(media, "ratechange", sync, { signal });
1634
+ }
1635
+ });
1636
+
1637
+ //#endregion
1638
+ //#region ../core/dist/dev/dom/store/features/source.js
1639
+ const sourceFeature = definePlayerFeature({
1640
+ name: "source",
1641
+ state: ({ target, signals }) => ({
1642
+ source: null,
1643
+ canPlay: false,
1644
+ loadSource(src) {
1645
+ signals.clear();
1646
+ const { media } = target();
1647
+ if (!isMediaSourceCapable(media)) return src;
1648
+ media.src = src;
1649
+ media.load();
1650
+ return src;
1651
+ }
1652
+ }),
1653
+ attach({ target, signal, set }) {
1654
+ const { media } = target;
1655
+ if (!isMediaSourceCapable(media)) return;
1656
+ const sync = () => set({
1657
+ source: media.currentSrc || media.src || null,
1658
+ canPlay: media.readyState >= HTMLMediaElement.HAVE_ENOUGH_DATA
1659
+ });
1660
+ sync();
1661
+ listen(media, "canplay", sync, { signal });
1662
+ listen(media, "canplaythrough", sync, { signal });
1663
+ listen(media, "loadstart", sync, { signal });
1664
+ listen(media, "emptied", sync, { signal });
1665
+ }
1666
+ });
1667
+
1668
+ //#endregion
1669
+ //#region ../core/dist/dev/dom/store/features/text-track.js
1670
+ const textTrackFeature = definePlayerFeature({
1671
+ name: "textTrack",
1672
+ state: ({ target }) => ({
1673
+ chaptersCues: [],
1674
+ thumbnailCues: [],
1675
+ thumbnailTrackSrc: null,
1676
+ textTrackList: [],
1677
+ subtitlesShowing: false,
1678
+ toggleSubtitles(forceShow) {
1679
+ const { media } = target();
1680
+ if (!isMediaTextTrackCapable(media)) return false;
1681
+ const subtitlesTracks = getTextTrackList(media, (track) => track.kind === "subtitles" || track.kind === "captions");
1682
+ if (!subtitlesTracks.length) return false;
1683
+ const showing = subtitlesTracks.some((track) => track.mode === "showing");
1684
+ const nextShowing = forceShow ?? !showing;
1685
+ for (const track of subtitlesTracks) track.mode = nextShowing ? "showing" : "disabled";
1686
+ return nextShowing;
1687
+ }
1688
+ }),
1689
+ attach({ target, signal, set }) {
1690
+ const { media } = target;
1691
+ if (!isMediaTextTrackCapable(media)) return;
1692
+ let trackCleanup = null;
1693
+ const sync = () => {
1694
+ trackCleanup?.abort();
1695
+ trackCleanup = new AbortController();
1696
+ let chaptersTrack = null;
1697
+ let thumbnailTrack = null;
1698
+ const textTrackList = [];
1699
+ let subtitlesShowing = false;
1700
+ for (let i = 0; i < media.textTracks.length; i++) {
1701
+ const track = media.textTracks[i];
1702
+ if (!chaptersTrack && track.kind === "chapters") chaptersTrack = track;
1703
+ if (!thumbnailTrack && track.kind === "metadata" && track.label === "thumbnails") thumbnailTrack = track;
1704
+ textTrackList.push({
1705
+ kind: track.kind,
1706
+ label: track.label,
1707
+ language: track.language,
1708
+ mode: track.mode
1709
+ });
1710
+ if ((track.kind === "captions" || track.kind === "subtitles") && track.mode === "showing") subtitlesShowing = true;
1711
+ }
1712
+ const chaptersCues = chaptersTrack?.cues ? Array.from(chaptersTrack.cues) : [];
1713
+ const thumbnailCues = thumbnailTrack?.cues ? Array.from(thumbnailTrack.cues) : [];
1714
+ let thumbnailTrackSrc = null;
1715
+ if (thumbnailTrack) thumbnailTrackSrc = findTrackElement(media, thumbnailTrack)?.src ?? null;
1716
+ const tracks = isQuerySelectorAllCapable(media) && media.querySelectorAll("track") || [];
1717
+ const shadowTracks = media instanceof HTMLElement && media.shadowRoot?.querySelectorAll("track") || [];
1718
+ for (const trackEl of [...tracks, ...shadowTracks]) if (!trackEl.track?.cues?.length) listen(trackEl, "load", sync, { signal: trackCleanup.signal });
1719
+ set({
1720
+ chaptersCues,
1721
+ thumbnailCues,
1722
+ thumbnailTrackSrc,
1723
+ textTrackList,
1724
+ subtitlesShowing
1725
+ });
1726
+ };
1727
+ sync();
1728
+ const textTracks = media.textTracks;
1729
+ if (textTracks instanceof EventTarget) {
1730
+ listen(textTracks, "addtrack", sync, { signal });
1731
+ listen(textTracks, "removetrack", sync, { signal });
1732
+ listen(textTracks, "change", sync, { signal });
1733
+ }
1734
+ listen(media, "loadstart", sync, { signal });
1735
+ signal.addEventListener("abort", () => trackCleanup?.abort(), { once: true });
1736
+ }
1737
+ });
1738
+
1739
+ //#endregion
1740
+ //#region ../core/dist/dev/dom/store/signal-keys.js
1741
+ const signalKeys = { seek: Symbol.for("@videojs/seek") };
1742
+
1743
+ //#endregion
1744
+ //#region ../core/dist/dev/dom/store/features/time.js
1745
+ const timeFeature = definePlayerFeature({
1746
+ name: "time",
1747
+ state: ({ target, signals, set }) => ({
1748
+ currentTime: 0,
1749
+ duration: 0,
1750
+ seeking: false,
1751
+ async seek(time) {
1752
+ const { media } = target(), signal = signals.supersede(signalKeys.seek);
1753
+ if (!isMediaSeekCapable(media) || !isMediaSourceCapable(media)) return 0;
1754
+ if (!hasMetadata(media)) {
1755
+ if (!await onEvent(media, "loadedmetadata", { signal }).catch(() => false)) return media.currentTime;
1756
+ }
1757
+ const clampedTime = Math.max(0, Math.min(time, media.duration || Infinity));
1758
+ set({
1759
+ currentTime: clampedTime,
1760
+ seeking: true
1761
+ });
1762
+ media.currentTime = clampedTime;
1763
+ await onEvent(media, "seeked", { signal }).catch(noop);
1764
+ return media.currentTime;
1765
+ }
1766
+ }),
1767
+ attach({ target, signal, set, get }) {
1768
+ const { media } = target;
1769
+ if (!isMediaSeekCapable(media)) return;
1770
+ const sync = () => set({
1771
+ currentTime: media.currentTime,
1772
+ duration: Number.isFinite(media.duration) ? media.duration : 0,
1773
+ seeking: media.seeking
1774
+ });
1775
+ const onTimeUpdate = () => {
1776
+ if (get().seeking) return;
1777
+ sync();
1778
+ };
1779
+ sync();
1780
+ listen(media, "timeupdate", onTimeUpdate, { signal });
1781
+ listen(media, "durationchange", sync, { signal });
1782
+ listen(media, "seeking", sync, { signal });
1783
+ listen(media, "seeked", sync, { signal });
1784
+ listen(media, "loadedmetadata", sync, { signal });
1785
+ listen(media, "emptied", sync, { signal });
1786
+ }
1787
+ });
1788
+
1789
+ //#endregion
1790
+ //#region ../core/dist/dev/dom/store/features/volume.js
1791
+ /** Volume to restore when unmuting at zero. */
1792
+ const UNMUTE_VOLUME = .25;
1793
+ const volumeFeature = definePlayerFeature({
1794
+ name: "volume",
1795
+ state: ({ target }) => ({
1796
+ volume: 1,
1797
+ muted: false,
1798
+ volumeAvailability: "unavailable",
1799
+ setVolume(volume) {
1800
+ const { media } = target();
1801
+ if (!isMediaVolumeCapable(media)) return 0;
1802
+ const clamped = Math.max(0, Math.min(1, volume));
1803
+ if (clamped > 0 && media.muted) media.muted = false;
1804
+ media.volume = clamped;
1805
+ return media.volume;
1806
+ },
1807
+ toggleMuted() {
1808
+ const { media } = target();
1809
+ if (!isMediaVolumeCapable(media)) return false;
1810
+ if (media.muted || media.volume === 0) {
1811
+ media.muted = false;
1812
+ if (media.volume === 0) media.volume = UNMUTE_VOLUME;
1813
+ } else media.muted = true;
1814
+ return media.muted;
1815
+ }
1816
+ }),
1817
+ attach({ target, signal, set }) {
1818
+ const { media } = target;
1819
+ if (!isMediaVolumeCapable(media)) return;
1820
+ set({ volumeAvailability: canSetVolume() });
1821
+ const sync = () => set({
1822
+ volume: media.volume,
1823
+ muted: media.muted
1824
+ });
1825
+ sync();
1826
+ listen(media, "volumechange", sync, { signal });
1827
+ }
1828
+ });
1829
+ /** Check if volume can be programmatically set (fails on iOS Safari). */
1830
+ function canSetVolume() {
1831
+ const video = document.createElement("video");
1832
+ try {
1833
+ video.volume = .5;
1834
+ return video.volume === .5 ? "available" : "unsupported";
1835
+ } catch {
1836
+ return "unsupported";
1837
+ }
1838
+ }
1839
+
1840
+ //#endregion
1841
+ //#region ../core/dist/dev/dom/store/features/presets.js
1842
+ const videoFeatures = [
1843
+ playbackFeature,
1844
+ playbackRateFeature,
1845
+ volumeFeature,
1846
+ timeFeature,
1847
+ sourceFeature,
1848
+ bufferFeature,
1849
+ fullscreenFeature,
1850
+ pipFeature,
1851
+ castFeature,
1852
+ controlsFeature,
1853
+ textTrackFeature,
1854
+ errorFeature
1855
+ ];
1856
+ const audioFeatures = [
1857
+ playbackFeature,
1858
+ playbackRateFeature,
1859
+ volumeFeature,
1860
+ timeFeature,
1861
+ sourceFeature,
1862
+ bufferFeature,
1863
+ errorFeature
1864
+ ];
1865
+ const backgroundFeatures = [];
1866
+
1867
+ //#endregion
1868
+ //#region ../store/dist/dev/html/controllers/snapshot-controller.js
1869
+ /**
1870
+ * Subscribe to a `State<T>` container with optional selector.
1871
+ *
1872
+ * Without selector: returns full state, re-renders on any state change.
1873
+ * With selector: returns selected slice, re-renders only when the slice changes (shallowEqual).
1874
+ *
1875
+ * @example
1876
+ * ```ts
1877
+ * #state = new SnapshotController(this, sliderState, (s) => s.value);
1878
+ * ```
1879
+ */
1880
+ var SnapshotController = class {
1881
+ #host;
1882
+ #selector;
1883
+ #state;
1884
+ #cached;
1885
+ #unsubscribe = noop;
1886
+ constructor(host, state, selector) {
1887
+ this.#host = host;
1888
+ this.#state = state;
1889
+ this.#selector = selector;
1890
+ host.addController(this);
1891
+ }
1892
+ get value() {
1893
+ if (!this.#selector) return this.#state.current;
1894
+ this.#cached ??= this.#selector(this.#state.current);
1895
+ return this.#cached;
1896
+ }
1897
+ /** Switch to tracking a different state container. */
1898
+ track(state) {
1899
+ this.#state = state;
1900
+ this.#subscribe();
1901
+ }
1902
+ hostConnected() {
1903
+ this.#subscribe();
1904
+ }
1905
+ hostDisconnected() {
1906
+ this.#unsubscribe();
1907
+ this.#unsubscribe = noop;
1908
+ this.#cached = void 0;
1909
+ }
1910
+ #subscribe() {
1911
+ this.#unsubscribe();
1912
+ if (!this.#selector) {
1913
+ this.#unsubscribe = this.#state.subscribe(() => this.#host.requestUpdate());
1914
+ return;
1915
+ }
1916
+ const selector = this.#selector;
1917
+ this.#cached = selector(this.#state.current);
1918
+ this.#unsubscribe = this.#state.subscribe(() => {
1919
+ const next = selector(this.#state.current);
1920
+ if (!shallowEqual(this.#cached, next)) {
1921
+ this.#cached = next;
1922
+ this.#host.requestUpdate();
1923
+ }
1924
+ });
1925
+ }
1926
+ };
1927
+
1928
+ //#endregion
1929
+ //#region ../store/dist/dev/html/store-accessor.js
1930
+ /**
1931
+ * Resolves a store from either a direct instance or context.
1932
+ *
1933
+ * When given a direct store, provides immediate access.
1934
+ * When given a context, sets up a ContextConsumer to receive the store.
1935
+ *
1936
+ * @example Direct store
1937
+ * ```ts
1938
+ * const accessor = new StoreAccessor(host, store, (s) => console.log('available', s));
1939
+ * accessor.value; // Store (immediately available)
1940
+ * ```
1941
+ *
1942
+ * @example Context source
1943
+ * ```ts
1944
+ * const accessor = new StoreAccessor(host, context, (s) => console.log('available', s));
1945
+ * accessor.value; // null until context provides store
1946
+ * ```
1947
+ */
1948
+ var StoreAccessor = class {
1949
+ #onAvailable;
1950
+ #consumer;
1951
+ #directStore;
1952
+ constructor(host, source, onAvailable) {
1953
+ this.#onAvailable = onAvailable ?? noop;
1954
+ if (isStore(source)) {
1955
+ this.#directStore = source;
1956
+ this.#consumer = null;
1957
+ } else {
1958
+ this.#directStore = null;
1959
+ this.#consumer = new ContextConsumer(host, {
1960
+ context: source,
1961
+ callback: (store) => this.#onAvailable(store),
1962
+ subscribe: false
1963
+ });
1964
+ }
1965
+ host.addController(this);
1966
+ }
1967
+ /** Returns the store, or null if not yet available from context. */
1968
+ get value() {
1969
+ if (this.#consumer) return this.#consumer.value ?? null;
1970
+ return this.#directStore;
1971
+ }
1972
+ hostConnected() {
1973
+ if (this.#directStore) this.#onAvailable(this.#directStore);
1974
+ }
1975
+ };
1976
+
1977
+ //#endregion
1978
+ //#region ../store/dist/dev/html/controllers/store-controller.js
1979
+ /**
1980
+ * Access store state and actions.
1981
+ *
1982
+ * Without selector: Returns the store, does NOT subscribe to changes.
1983
+ * With selector: Returns selected state, triggers update when selected state changes (shallowEqual).
1984
+ *
1985
+ * @example
1986
+ * ```ts
1987
+ * // Store access (no subscription) - access actions
1988
+ * class Controls extends LitElement {
1989
+ * #store = new StoreController(this, storeSource);
1990
+ *
1991
+ * handleClick() {
1992
+ * this.#store.value.setVolume(0.5);
1993
+ * }
1994
+ * }
1995
+ *
1996
+ * // Selector-based subscription - re-renders when playback changes
1997
+ * class PlayButton extends LitElement {
1998
+ * #playback = new StoreController(this, storeSource, selectPlayback);
1999
+ *
2000
+ * render() {
2001
+ * const playback = this.#playback.value;
2002
+ * if (!playback) return nothing;
2003
+ * return html`<button @click=${playback.toggle}>
2004
+ * ${playback.paused ? 'Play' : 'Pause'}
2005
+ * </button>`;
2006
+ * }
2007
+ * }
2008
+ * ```
2009
+ */
2010
+ var StoreController = class {
2011
+ #host;
2012
+ #selector;
2013
+ #accessor;
2014
+ #snapshot = null;
2015
+ constructor(host, source, selector) {
2016
+ this.#host = host;
2017
+ this.#selector = selector;
2018
+ this.#accessor = new StoreAccessor(host, source, (store) => this.#connect(store));
2019
+ host.addController(this);
2020
+ }
2021
+ get value() {
2022
+ const store = this.#accessor.value;
2023
+ if (isNull(store)) throw new Error("Store not available");
2024
+ if (isUndefined(this.#selector)) return store;
2025
+ return this.#snapshot.value;
2026
+ }
2027
+ hostConnected() {}
2028
+ #connect(store) {
2029
+ if (isUndefined(this.#selector)) return;
2030
+ if (!this.#snapshot) this.#snapshot = new SnapshotController(this.#host, store.$state, this.#selector);
2031
+ else this.#snapshot.track(store.$state);
2032
+ }
2033
+ };
2034
+
2035
+ //#endregion
2036
+ //#region src/player/player-controller.ts
2037
+ /**
2038
+ * Reactive controller for accessing player store state.
2039
+ *
2040
+ * Without selector: Returns the store, does NOT subscribe to changes.
2041
+ * With selector: Returns selected state, subscribes with shallowEqual comparison.
2042
+ *
2043
+ * @example
2044
+ * ```ts
2045
+ * // Store access (no subscription)
2046
+ * class Controls extends MediaElement {
2047
+ * #player = new PlayerController(this, playerContext);
2048
+ *
2049
+ * handleClick() {
2050
+ * this.#player.value.setVolume(0.5);
2051
+ * }
2052
+ * }
2053
+ *
2054
+ * // Selector-based subscription
2055
+ * class PlayButton extends MediaElement {
2056
+ * #playback = new PlayerController(this, playerContext, selectPlayback);
2057
+ * }
2058
+ * ```
2059
+ */
2060
+ var PlayerController = class {
2061
+ #host;
2062
+ #selector;
2063
+ #consumer;
2064
+ #store = null;
2065
+ constructor(host, context, selector) {
2066
+ this.#host = host;
2067
+ this.#selector = selector;
2068
+ this.#consumer = new ContextConsumer(host, {
2069
+ context,
2070
+ callback: (ctx) => this.#connect(ctx),
2071
+ subscribe: true
2072
+ });
2073
+ host.addController(this);
2074
+ }
2075
+ get value() {
2076
+ const store = this.#consumer.value;
2077
+ if (!store) return void 0;
2078
+ if (!this.#selector) return store;
2079
+ return this.#store?.value;
2080
+ }
2081
+ get displayName() {
2082
+ return this.#selector?.displayName;
2083
+ }
2084
+ hostConnected() {
2085
+ const store = this.#consumer.value;
2086
+ if (store) this.#connect(store);
2087
+ }
2088
+ hostDisconnected() {
2089
+ this.#store = null;
2090
+ }
2091
+ #connect(store) {
2092
+ if (!this.#store && this.#selector) this.#store = new StoreController(this.#host, store, this.#selector);
2093
+ }
2094
+ };
2095
+
2096
+ //#endregion
2097
+ //#region src/store/provider-mixin.ts
2098
+ /**
2099
+ * Create a mixin that provides player context to descendant elements and
2100
+ * owns the `store.attach()` lifecycle.
2101
+ *
2102
+ * Media and container elements register themselves via media/container
2103
+ * contexts that carry both the current value and a setter. When a media
2104
+ * element is available, the provider calls `store.attach({ media, container })`.
2105
+ *
2106
+ * As a fallback for plain `<video>`/`<audio>` that can't consume context,
2107
+ * the provider queries its subtree after a microtask.
2108
+ *
2109
+ * @param config - Provider configuration with contexts and store factory.
2110
+ */
2111
+ function createProviderMixin(config) {
2112
+ return (BaseClass) => {
2113
+ class PlayerProviderElement extends BaseClass {
2114
+ #store = config.factory();
2115
+ #detach = null;
2116
+ #media = null;
2117
+ #container = null;
2118
+ #fallbackQueued = false;
2119
+ #setMedia = (media) => {
2120
+ if (this.#media === media) return;
2121
+ this.#media = media;
2122
+ this.#mediaProvider.setValue({
2123
+ media,
2124
+ setMedia: this.#setMedia
2125
+ });
2126
+ this.#tryAttach();
2127
+ };
2128
+ #setContainer = (container) => {
2129
+ if (this.#container === container) return;
2130
+ this.#container = container;
2131
+ this.#containerProvider.setValue({
2132
+ container,
2133
+ setContainer: this.#setContainer
2134
+ });
2135
+ this.#tryAttach();
2136
+ };
2137
+ #playerProvider = new ContextProvider(this, {
2138
+ context: config.playerContext,
2139
+ initialValue: this.store
2140
+ });
2141
+ #mediaProvider = new ContextProvider(this, {
2142
+ context: config.mediaContext,
2143
+ initialValue: {
2144
+ media: this.#media,
2145
+ setMedia: this.#setMedia
2146
+ }
2147
+ });
2148
+ #containerProvider = new ContextProvider(this, {
2149
+ context: config.containerContext,
2150
+ initialValue: {
2151
+ container: this.#container,
2152
+ setContainer: this.#setContainer
2153
+ }
2154
+ });
2155
+ get store() {
2156
+ if (isNull(this.#store)) this.#store = config.factory();
2157
+ return this.#store;
2158
+ }
2159
+ connectedCallback() {
2160
+ super.connectedCallback();
2161
+ this.#playerProvider.setValue(this.store);
2162
+ this.#mediaProvider.setValue({
2163
+ media: this.#media,
2164
+ setMedia: this.#setMedia
2165
+ });
2166
+ this.#containerProvider.setValue({
2167
+ container: this.#container,
2168
+ setContainer: this.#setContainer
2169
+ });
2170
+ this.#tryAttach();
2171
+ this.#queueFallbackDiscovery();
2172
+ }
2173
+ disconnectedCallback() {
2174
+ super.disconnectedCallback();
2175
+ this.#detachStore();
2176
+ }
2177
+ destroyCallback() {
2178
+ this.#detachStore();
2179
+ this.#store?.destroy();
2180
+ this.#store = null;
2181
+ super.destroyCallback();
2182
+ }
2183
+ #tryAttach() {
2184
+ const store = this.#store;
2185
+ if (!store) return;
2186
+ if (!this.#media) {
2187
+ this.#detachStore();
2188
+ return;
2189
+ }
2190
+ const target = {
2191
+ media: this.#media,
2192
+ container: this.#container
2193
+ };
2194
+ const hasMediaChanged = store.target?.media !== target.media;
2195
+ const hasContainerChanged = store.target?.container !== target.container;
2196
+ if (hasMediaChanged || hasContainerChanged) {
2197
+ this.#detachStore();
2198
+ this.#detach = store.attach(target);
2199
+ }
2200
+ }
2201
+ #detachStore() {
2202
+ this.#detach?.();
2203
+ this.#detach = null;
2204
+ }
2205
+ #queueFallbackDiscovery() {
2206
+ if (this.#media || this.#fallbackQueued) return;
2207
+ this.#fallbackQueued = true;
2208
+ queueMicrotask(() => {
2209
+ this.#fallbackQueued = false;
2210
+ if (this.#media) return;
2211
+ const media = this.querySelector("video, audio");
2212
+ if (media) this.#setMedia(media);
2213
+ });
2214
+ }
2215
+ }
2216
+ return PlayerProviderElement;
2217
+ };
2218
+ }
2219
+
2220
+ //#endregion
2221
+ //#region src/player/create-player.ts
2222
+ function createPlayer(config) {
2223
+ const slice = combine(...config.features);
2224
+ function create() {
2225
+ return createStore()(slice);
2226
+ }
2227
+ return {
2228
+ context: playerContext,
2229
+ create,
2230
+ PlayerController,
2231
+ ProviderMixin: createProviderMixin({
2232
+ playerContext,
2233
+ mediaContext,
2234
+ containerContext,
2235
+ factory: create
2236
+ }),
2237
+ ContainerMixin: createContainerMixin({
2238
+ playerContext,
2239
+ containerContext
2240
+ })
2241
+ };
2242
+ }
2243
+
2244
+ //#endregion
2245
+ export { ContextProvider as A, AbortControllerRegistry as C, isUndefined as D, isNumber as E, ReactiveElement as M, isEditableTarget as N, MediaContainerElement as O, isInteractiveActivation as P, throwNoTargetError as S, isNull as T, getGestureCoordinator as _, backgroundFeatures as a, createState as b, timeFeature as c, playbackRateFeature as d, playbackFeature as f, controlsFeature as g, errorFeature as h, audioFeatures as i, ContextConsumer as j, MediaElement as k, textTrackFeature as l, fullscreenFeature as m, PlayerController as n, videoFeatures as o, pipFeature as p, SnapshotController as r, volumeFeature as s, createPlayer as t, sourceFeature as u, castFeature as v, isFunction as w, noop as x, bufferFeature as y };
2246
+ //# sourceMappingURL=create-player-BKLw7l1a.js.map