@videojs/html 10.0.0-beta.28 → 10.0.0-beta.29

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 (533) hide show
  1. package/cdn/{adapter-XTen-YVQ.js → adapter-CEnNWvii.js} +17 -4
  2. package/cdn/adapter-CEnNWvii.js.map +1 -0
  3. package/cdn/adapter-DaKW8NzI.js +2 -0
  4. package/cdn/adapter-DaKW8NzI.js.map +1 -0
  5. package/cdn/audio-headless.dev.js +1 -1
  6. package/cdn/audio-headless.js +1 -1
  7. package/cdn/audio-minimal-ui.dev.js +2 -2
  8. package/cdn/audio-minimal-ui.js +1 -1
  9. package/cdn/audio-minimal.dev.js +5 -5
  10. package/cdn/audio-minimal.dev.js.map +1 -1
  11. package/cdn/audio-minimal.js +1 -1
  12. package/cdn/audio-minimal.js.map +1 -1
  13. package/cdn/audio-ui.dev.js +2 -2
  14. package/cdn/audio-ui.js +1 -1
  15. package/cdn/audio.dev.js +5 -5
  16. package/cdn/audio.dev.js.map +1 -1
  17. package/cdn/audio.js +1 -1
  18. package/cdn/audio.js.map +1 -1
  19. package/cdn/background.dev.js +1 -1
  20. package/cdn/background.js +1 -1
  21. package/cdn/background.js.map +1 -1
  22. package/cdn/compounds-C4YYLyL2.js +8 -0
  23. package/cdn/compounds-C4YYLyL2.js.map +1 -0
  24. package/cdn/{compounds-nk9RJtBK.js → compounds-C73u1MeO.js} +63 -59
  25. package/cdn/compounds-C73u1MeO.js.map +1 -0
  26. package/cdn/create-player-BU8LDJDL.js +2 -0
  27. package/cdn/create-player-BU8LDJDL.js.map +1 -0
  28. package/cdn/{create-player-DK9WOywd.js → create-player-Db1CIvlK.js} +58 -46
  29. package/cdn/create-player-Db1CIvlK.js.map +1 -0
  30. package/cdn/{default-BqQDVloS.js → default-A3aM0skz.js} +2 -2
  31. package/cdn/default-A3aM0skz.js.map +1 -0
  32. package/cdn/default-BDyhiTCm.js +2 -0
  33. package/cdn/default-BDyhiTCm.js.map +1 -0
  34. package/cdn/{default-I2LasfxC.js → default-C1_k1NeB.js} +2 -2
  35. package/cdn/default-C1_k1NeB.js.map +1 -0
  36. package/cdn/default-DHrMd4ie.js +2 -0
  37. package/cdn/default-DHrMd4ie.js.map +1 -0
  38. package/cdn/error-surface-BID4D3DW.js +59 -0
  39. package/cdn/error-surface-BID4D3DW.js.map +1 -0
  40. package/cdn/{select-tracks-nRPBa1NC.js → error-surface-D0bo71gD.js} +442 -48
  41. package/cdn/error-surface-D0bo71gD.js.map +1 -0
  42. package/cdn/gesture-element-CeRy1IVs.js +2 -0
  43. package/cdn/gesture-element-CeRy1IVs.js.map +1 -0
  44. package/cdn/{gesture-element-6Ld1YwIL.js → gesture-element-DB67OYCE.js} +3 -3
  45. package/cdn/gesture-element-DB67OYCE.js.map +1 -0
  46. package/cdn/{hls-js-C4P_b2tT.js → hls-js-CiE4wOrG.js} +2 -2
  47. package/cdn/{hls-js-C4P_b2tT.js.map → hls-js-CiE4wOrG.js.map} +1 -1
  48. package/cdn/{hls-js-CATW7NBm.js → hls-js-DBKRCbQm.js} +2 -2
  49. package/cdn/{hls-js-CATW7NBm.js.map → hls-js-DBKRCbQm.js.map} +1 -1
  50. package/cdn/{hls-js-BEuVm0u9.js → hls-js-DX2NGCAr.js} +2 -2
  51. package/cdn/{hls-js-BEuVm0u9.js.map → hls-js-DX2NGCAr.js.map} +1 -1
  52. package/cdn/{hls-js-WCNy9MVh.js → hls-js-JeH8yvsP.js} +2 -2
  53. package/cdn/{hls-js-WCNy9MVh.js.map → hls-js-JeH8yvsP.js.map} +1 -1
  54. package/cdn/i18n-CpBDXf6M.js +2 -0
  55. package/cdn/{i18n-Dc7WM2xd.js.map → i18n-CpBDXf6M.js.map} +1 -1
  56. package/cdn/{i18n-Ch4t6EjV.js → i18n-D0nhPa0m.js} +2 -2
  57. package/cdn/{i18n-Ch4t6EjV.js.map → i18n-D0nhPa0m.js.map} +1 -1
  58. package/cdn/{live-button-element-DaHgnYdw.js → live-button-element-Co8z2LkI.js} +2 -2
  59. package/cdn/{live-button-element-DaHgnYdw.js.map → live-button-element-Co8z2LkI.js.map} +1 -1
  60. package/cdn/{live-button-element-Bae44kBN.js → live-button-element-zE-8uoR2.js} +3 -3
  61. package/cdn/{live-button-element-Bae44kBN.js.map → live-button-element-zE-8uoR2.js.map} +1 -1
  62. package/cdn/live-video-minimal.dev.js +11 -9
  63. package/cdn/live-video-minimal.dev.js.map +1 -1
  64. package/cdn/live-video-minimal.js +1 -1
  65. package/cdn/live-video-minimal.js.map +1 -1
  66. package/cdn/live-video.dev.js +12 -10
  67. package/cdn/live-video.dev.js.map +1 -1
  68. package/cdn/live-video.js +1 -1
  69. package/cdn/live-video.js.map +1 -1
  70. package/cdn/media/hls-audio.dev.js +1 -1
  71. package/cdn/media/hls-audio.js +1 -1
  72. package/cdn/media/hls-background-video.dev.js +1 -1
  73. package/cdn/media/hls-background-video.js +1 -1
  74. package/cdn/media/hls-video.dev.js +1 -1
  75. package/cdn/media/hls-video.js +1 -1
  76. package/cdn/media/mux-audio/hls-js.dev.js +1 -1
  77. package/cdn/media/mux-audio/hls-js.js +1 -1
  78. package/cdn/media/mux-audio/spf.dev.js +2 -2
  79. package/cdn/media/mux-audio/spf.js +1 -1
  80. package/cdn/media/mux-audio.dev.js +1 -1
  81. package/cdn/media/mux-audio.js +1 -1
  82. package/cdn/media/mux-background-video.dev.js +1 -1
  83. package/cdn/media/mux-background-video.js +1 -1
  84. package/cdn/media/mux-data.dev.js +1 -1
  85. package/cdn/media/mux-data.dev.js.map +1 -1
  86. package/cdn/media/mux-data.js +1 -1
  87. package/cdn/media/mux-data.js.map +1 -1
  88. package/cdn/media/mux-video/hls-js.dev.js +1 -1
  89. package/cdn/media/mux-video/hls-js.js +1 -1
  90. package/cdn/media/mux-video/spf.dev.js +2 -2
  91. package/cdn/media/mux-video/spf.js +1 -1
  92. package/cdn/media/mux-video.dev.js +1 -1
  93. package/cdn/media/mux-video.js +1 -1
  94. package/cdn/media/vimeo-video.dev.js +27 -5
  95. package/cdn/media/vimeo-video.dev.js.map +1 -1
  96. package/cdn/media/vimeo-video.js +1 -1
  97. package/cdn/media/vimeo-video.js.map +1 -1
  98. package/cdn/{media-Uxm0d3Vx.js → media-BI8caj07.js} +3 -3
  99. package/cdn/{media-Uxm0d3Vx.js.map → media-BI8caj07.js.map} +1 -1
  100. package/cdn/{media-COIe3uI5.js → media-BNuI0Im7.js} +19 -6
  101. package/cdn/media-BNuI0Im7.js.map +1 -0
  102. package/cdn/media-CQxFuDcv.js +2 -0
  103. package/cdn/{media-CPVSKLdk.js.map → media-CQxFuDcv.js.map} +1 -1
  104. package/cdn/media-D4tG62L5.js +2 -0
  105. package/cdn/{media-BTipOcKo.js.map → media-D4tG62L5.js.map} +1 -1
  106. package/cdn/{media-oa3nyL2o.js → media-DI6DvYm3.js} +3 -3
  107. package/cdn/{media-oa3nyL2o.js.map → media-DI6DvYm3.js.map} +1 -1
  108. package/cdn/media-DU3Xf5XR.js +2 -0
  109. package/cdn/media-DU3Xf5XR.js.map +1 -0
  110. package/cdn/media-mYKOAsk3.js +825 -0
  111. package/cdn/media-mYKOAsk3.js.map +1 -0
  112. package/cdn/media-zReLnePj.js +2 -0
  113. package/cdn/media-zReLnePj.js.map +1 -0
  114. package/cdn/{minimal-DQCLKRyR.js → minimal-3OmH0xQS.js} +2 -2
  115. package/cdn/minimal-3OmH0xQS.js.map +1 -0
  116. package/cdn/{minimal-DLosvq31.js → minimal-6w_Vyyl9.js} +2 -2
  117. package/cdn/minimal-6w_Vyyl9.js.map +1 -0
  118. package/cdn/minimal-BWLTn7oQ.js +2 -0
  119. package/cdn/minimal-BWLTn7oQ.js.map +1 -0
  120. package/cdn/minimal-DIGrklyh.js +2 -0
  121. package/cdn/minimal-DIGrklyh.js.map +1 -0
  122. package/cdn/{minimal-ui-CRKvUmB8.js → minimal-ui-BCIESK8f.js} +8 -8
  123. package/cdn/{minimal-ui-CRKvUmB8.js.map → minimal-ui-BCIESK8f.js.map} +1 -1
  124. package/cdn/minimal-ui-BXrq3z4U.js +2 -0
  125. package/cdn/{minimal-ui-Et2Wcn7r.js.map → minimal-ui-BXrq3z4U.js.map} +1 -1
  126. package/cdn/{minimal-ui-BpHxIo4z.js → minimal-ui-DEalpMk6.js} +4 -4
  127. package/cdn/{minimal-ui-BpHxIo4z.js.map → minimal-ui-DEalpMk6.js.map} +1 -1
  128. package/cdn/{minimal-ui-8iRZf_72.js → minimal-ui-vY3QgohH.js} +2 -2
  129. package/cdn/{minimal-ui-8iRZf_72.js.map → minimal-ui-vY3QgohH.js.map} +1 -1
  130. package/cdn/{player-DM9rUXg-.js → player-B3GlPF90.js} +2 -2
  131. package/cdn/{player-DM9rUXg-.js.map → player-B3GlPF90.js.map} +1 -1
  132. package/cdn/player-CtTC7qa5.js +2 -0
  133. package/cdn/{player-rCFqzWrA.js.map → player-CtTC7qa5.js.map} +1 -1
  134. package/cdn/player-DKkph8UM.js +2 -0
  135. package/cdn/{player-BRQLp5bX.js.map → player-DKkph8UM.js.map} +1 -1
  136. package/cdn/{player-CKTAtwit.js → player-DPDmTRvg.js} +2 -2
  137. package/cdn/{player-CKTAtwit.js.map → player-DPDmTRvg.js.map} +1 -1
  138. package/cdn/player-DrDd7LJi.js +2 -0
  139. package/cdn/{player-BloX4l6F.js.map → player-DrDd7LJi.js.map} +1 -1
  140. package/cdn/{player-B2oraRyD.js → player-L5UpZmT4.js} +2 -2
  141. package/cdn/{player-B2oraRyD.js.map → player-L5UpZmT4.js.map} +1 -1
  142. package/cdn/{poster-element-BGr1VQJB.js → poster-element-B5tdJ2ub.js} +179 -38
  143. package/cdn/poster-element-B5tdJ2ub.js.map +1 -0
  144. package/cdn/poster-element-B8QwXSU_.js +2 -0
  145. package/cdn/poster-element-B8QwXSU_.js.map +1 -0
  146. package/cdn/{error-surface-drmCvBVW.js → relocation-pipelines-Dh8CcgHw.js} +5 -343
  147. package/cdn/relocation-pipelines-Dh8CcgHw.js.map +1 -0
  148. package/cdn/relocation-pipelines-DunE4gcV.js +2 -0
  149. package/cdn/relocation-pipelines-DunE4gcV.js.map +1 -0
  150. package/cdn/{seek-button-element-XMTLIxZj.js → seek-button-element-5co-k0Dx.js} +4 -4
  151. package/cdn/seek-button-element-5co-k0Dx.js.map +1 -0
  152. package/cdn/{seek-button-element-FlgBVoGM.js → seek-button-element-B8TkILg-.js} +2 -2
  153. package/cdn/{seek-button-element-FlgBVoGM.js.map → seek-button-element-B8TkILg-.js.map} +1 -1
  154. package/cdn/shallow-equal-C7S8rj2f.js +16 -0
  155. package/cdn/shallow-equal-C7S8rj2f.js.map +1 -0
  156. package/cdn/shallow-equal-KV1zFqZi.js +2 -0
  157. package/cdn/shallow-equal-KV1zFqZi.js.map +1 -0
  158. package/cdn/{skin-element-DL-Kqa5f.js → skin-element-DrkI8xuM.js} +2 -2
  159. package/cdn/{skin-element-DL-Kqa5f.js.map → skin-element-DrkI8xuM.js.map} +1 -1
  160. package/cdn/{skin-element-DNytI-uu.js → skin-element-DvX6Bxsv.js} +2 -2
  161. package/cdn/{skin-element-DNytI-uu.js.map → skin-element-DvX6Bxsv.js.map} +1 -1
  162. package/cdn/{text-element-DeWBNKXb.js → text-element-BoY6AhMn.js} +2 -2
  163. package/cdn/{text-element-DeWBNKXb.js.map → text-element-BoY6AhMn.js.map} +1 -1
  164. package/cdn/{text-element-D88ArbZz.js → text-element-cg6l21cd.js} +2 -2
  165. package/cdn/{text-element-D88ArbZz.js.map → text-element-cg6l21cd.js.map} +1 -1
  166. package/cdn/time-slider-chapters-element-BfLjdnU4.js +2 -0
  167. package/cdn/time-slider-chapters-element-BfLjdnU4.js.map +1 -0
  168. package/cdn/{time-slider-chapters-element-DJ0abZXI.js → time-slider-chapters-element-CznFQWFm.js} +5 -5
  169. package/cdn/time-slider-chapters-element-CznFQWFm.js.map +1 -0
  170. package/cdn/{ui-BU3_2gDQ.js → ui-BwzqkJNK.js} +7 -7
  171. package/cdn/{ui-BU3_2gDQ.js.map → ui-BwzqkJNK.js.map} +1 -1
  172. package/cdn/ui-DayfItun.js +2 -0
  173. package/cdn/{ui-C0isALTQ.js.map → ui-DayfItun.js.map} +1 -1
  174. package/cdn/ui-PSnD-pv8.js +2 -0
  175. package/cdn/{ui-DVpkE1MN.js.map → ui-PSnD-pv8.js.map} +1 -1
  176. package/cdn/{ui-BsaWWE4y.js → ui-fnKp94a7.js} +9 -9
  177. package/cdn/{ui-BsaWWE4y.js.map → ui-fnKp94a7.js.map} +1 -1
  178. package/cdn/video-headless.dev.js +1 -1
  179. package/cdn/video-headless.js +1 -1
  180. package/cdn/video-minimal-ui.dev.js +2 -2
  181. package/cdn/video-minimal-ui.js +1 -1
  182. package/cdn/video-minimal.dev.js +8 -6
  183. package/cdn/video-minimal.dev.js.map +1 -1
  184. package/cdn/video-minimal.js +1 -1
  185. package/cdn/video-minimal.js.map +1 -1
  186. package/cdn/video-ui.dev.js +2 -2
  187. package/cdn/video-ui.js +1 -1
  188. package/cdn/video.dev.js +9 -7
  189. package/cdn/video.dev.js.map +1 -1
  190. package/cdn/video.js +1 -1
  191. package/cdn/video.js.map +1 -1
  192. package/dist/default/__generated__/skins/default-video/styles/buttons.css +132 -18
  193. package/dist/default/__generated__/skins/default-video/styles/captions.css +22 -0
  194. package/dist/default/__generated__/skins/default-video/styles/container.css +121 -8
  195. package/dist/default/__generated__/skins/default-video/styles/controls.css +436 -21
  196. package/dist/default/__generated__/skins/default-video/styles/dialog.css +169 -0
  197. package/dist/default/__generated__/skins/default-video/styles/indicator.css +459 -0
  198. package/dist/default/__generated__/skins/default-video/styles/menus.css +254 -0
  199. package/dist/default/__generated__/skins/default-video/styles/overlays.css +26 -2
  200. package/dist/default/__generated__/skins/default-video/styles/popups.css +338 -12
  201. package/dist/default/__generated__/skins/default-video/styles/poster.css +4 -4
  202. package/dist/default/__generated__/skins/default-video/styles/sliders.css +355 -31
  203. package/dist/default/__generated__/skins/default-video/styles/styles.css +2455 -216
  204. package/dist/default/__generated__/skins/default-video/styles/theme.css +4 -19
  205. package/dist/default/__generated__/skins/default-video/styles/video.css +29 -0
  206. package/dist/default/__generated__/skins/minimal-video/styles/base.css +25 -0
  207. package/dist/default/__generated__/skins/minimal-video/styles/buttons.css +266 -0
  208. package/dist/default/__generated__/skins/minimal-video/styles/captions.css +22 -0
  209. package/dist/default/__generated__/skins/minimal-video/styles/container.css +158 -0
  210. package/dist/default/__generated__/skins/minimal-video/styles/controls.css +182 -0
  211. package/dist/default/__generated__/skins/minimal-video/styles/dialog.css +77 -0
  212. package/dist/default/__generated__/skins/minimal-video/styles/indicator.css +322 -0
  213. package/dist/default/__generated__/skins/minimal-video/styles/menus.css +254 -0
  214. package/dist/default/__generated__/skins/minimal-video/styles/overlays.css +35 -0
  215. package/dist/default/__generated__/skins/minimal-video/styles/popups.css +371 -0
  216. package/dist/default/__generated__/skins/minimal-video/styles/poster.css +47 -0
  217. package/dist/default/__generated__/skins/minimal-video/styles/sliders.css +436 -0
  218. package/dist/default/__generated__/skins/minimal-video/styles/styles.css +2246 -0
  219. package/dist/default/__generated__/skins/minimal-video/styles/theme.css +7 -0
  220. package/dist/default/__generated__/skins/minimal-video/styles/video.css +29 -0
  221. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  222. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  223. package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
  224. package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  225. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  226. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  227. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  228. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  229. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  230. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  231. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  232. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  233. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  234. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  235. package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
  236. package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  237. package/dist/default/define/audio/minimal-skin.css +103 -101
  238. package/dist/default/define/audio/skin.css +68 -69
  239. package/dist/default/define/live-audio/minimal-skin.css +103 -101
  240. package/dist/default/define/live-audio/skin.css +68 -69
  241. package/dist/default/define/live-video/minimal-skin.css +140 -120
  242. package/dist/default/define/live-video/minimal-skin.js +1 -1
  243. package/dist/default/define/live-video/minimal-skin.js.map +1 -1
  244. package/dist/default/define/live-video/minimal-skin.tailwind.js +1 -1
  245. package/dist/default/define/live-video/minimal-skin.tailwind.js.map +1 -1
  246. package/dist/default/define/live-video/skin.css +89 -76
  247. package/dist/default/define/live-video/skin.js +1 -1
  248. package/dist/default/define/live-video/skin.js.map +1 -1
  249. package/dist/default/define/live-video/skin.tailwind.js +1 -1
  250. package/dist/default/define/live-video/skin.tailwind.js.map +1 -1
  251. package/dist/default/define/ui/gesture.js +7 -0
  252. package/dist/default/define/ui/gesture.js.map +1 -0
  253. package/dist/default/define/video/minimal-skin.css +140 -120
  254. package/dist/default/define/video/minimal-skin.js +1 -1
  255. package/dist/default/define/video/minimal-skin.js.map +1 -1
  256. package/dist/default/define/video/minimal-skin.tailwind.js +1 -1
  257. package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
  258. package/dist/default/define/video/skin.css +89 -76
  259. package/dist/default/define/video/skin.js +1 -1
  260. package/dist/default/define/video/skin.js.map +1 -1
  261. package/dist/default/define/video/skin.tailwind.js +1 -1
  262. package/dist/default/define/video/skin.tailwind.js.map +1 -1
  263. package/dist/default/icons/dist/element/default/icons.js +1 -1
  264. package/dist/default/icons/dist/element/default/icons.js.map +1 -1
  265. package/dist/default/icons/dist/element/minimal/icons.js +1 -1
  266. package/dist/default/icons/dist/element/minimal/icons.js.map +1 -1
  267. package/dist/default/icons/dist/html/default/airplay-exit.js +1 -1
  268. package/dist/default/icons/dist/html/default/airplay-exit.js.map +1 -1
  269. package/dist/default/icons/dist/html/minimal/airplay-exit.js +1 -1
  270. package/dist/default/icons/dist/html/minimal/airplay-exit.js.map +1 -1
  271. package/dist/default/icons/dist/render/default/index.js +1 -1
  272. package/dist/default/icons/dist/render/default/index.js.map +1 -1
  273. package/dist/default/icons/dist/render/minimal/index.js +1 -1
  274. package/dist/default/icons/dist/render/minimal/index.js.map +1 -1
  275. package/dist/default/media/hls-background-video/media.js +18 -0
  276. package/dist/default/media/hls-background-video/media.js.map +1 -1
  277. package/dist/default/skins/dist/default/default/tailwind/components/button.js +3 -1
  278. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  279. package/dist/default/skins/dist/default/default/tailwind/components/poster.js +8 -1
  280. package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  281. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +10 -10
  282. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  283. package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
  284. package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
  285. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
  286. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  287. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
  288. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  289. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
  290. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  291. package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
  292. package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
  293. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
  294. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  295. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +4 -4
  296. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  297. package/dist/default/store/provider-mixin.js +22 -8
  298. package/dist/default/store/provider-mixin.js.map +1 -1
  299. package/dist/default/ui/audio-track-radio-group/audio-track-radio-group-element.js +1 -1
  300. package/dist/default/ui/audio-track-radio-group/audio-track-radio-group-element.js.map +1 -1
  301. package/dist/default/ui/captions-radio-group/captions-radio-group-element.js +1 -1
  302. package/dist/default/ui/captions-radio-group/captions-radio-group-element.js.map +1 -1
  303. package/dist/default/ui/gesture/gesture-element.js.map +1 -1
  304. package/dist/default/ui/hotkey/hotkey-element.js.map +1 -1
  305. package/dist/default/ui/menu/context.js.map +1 -1
  306. package/dist/default/ui/menu/menu-element.js +28 -27
  307. package/dist/default/ui/menu/menu-element.js.map +1 -1
  308. package/dist/default/ui/menu/menu-radio-group-element.js +14 -14
  309. package/dist/default/ui/menu/menu-radio-group-element.js.map +1 -1
  310. package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group-element.js +1 -1
  311. package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group-element.js.map +1 -1
  312. package/dist/default/ui/poster/poster-element.js +138 -8
  313. package/dist/default/ui/poster/poster-element.js.map +1 -1
  314. package/dist/default/ui/quality-radio-group/quality-radio-group-element.js +1 -1
  315. package/dist/default/ui/quality-radio-group/quality-radio-group-element.js.map +1 -1
  316. package/dist/default/ui/slider/slider-preview-element.js.map +1 -1
  317. package/dist/dev/__generated__/skins/default-video/styles/buttons.css +132 -18
  318. package/dist/dev/__generated__/skins/default-video/styles/captions.css +22 -0
  319. package/dist/dev/__generated__/skins/default-video/styles/container.css +121 -8
  320. package/dist/dev/__generated__/skins/default-video/styles/controls.css +436 -21
  321. package/dist/dev/__generated__/skins/default-video/styles/dialog.css +169 -0
  322. package/dist/dev/__generated__/skins/default-video/styles/indicator.css +459 -0
  323. package/dist/dev/__generated__/skins/default-video/styles/menus.css +254 -0
  324. package/dist/dev/__generated__/skins/default-video/styles/overlays.css +26 -2
  325. package/dist/dev/__generated__/skins/default-video/styles/popups.css +338 -12
  326. package/dist/dev/__generated__/skins/default-video/styles/poster.css +4 -4
  327. package/dist/dev/__generated__/skins/default-video/styles/sliders.css +355 -31
  328. package/dist/dev/__generated__/skins/default-video/styles/styles.css +2455 -216
  329. package/dist/dev/__generated__/skins/default-video/styles/theme.css +4 -19
  330. package/dist/dev/__generated__/skins/default-video/styles/video.css +29 -0
  331. package/dist/dev/__generated__/skins/minimal-video/styles/base.css +25 -0
  332. package/dist/dev/__generated__/skins/minimal-video/styles/buttons.css +266 -0
  333. package/dist/dev/__generated__/skins/minimal-video/styles/captions.css +22 -0
  334. package/dist/dev/__generated__/skins/minimal-video/styles/container.css +158 -0
  335. package/dist/dev/__generated__/skins/minimal-video/styles/controls.css +182 -0
  336. package/dist/dev/__generated__/skins/minimal-video/styles/dialog.css +77 -0
  337. package/dist/dev/__generated__/skins/minimal-video/styles/indicator.css +322 -0
  338. package/dist/dev/__generated__/skins/minimal-video/styles/menus.css +254 -0
  339. package/dist/dev/__generated__/skins/minimal-video/styles/overlays.css +35 -0
  340. package/dist/dev/__generated__/skins/minimal-video/styles/popups.css +371 -0
  341. package/dist/dev/__generated__/skins/minimal-video/styles/poster.css +47 -0
  342. package/dist/dev/__generated__/skins/minimal-video/styles/sliders.css +436 -0
  343. package/dist/dev/__generated__/skins/minimal-video/styles/styles.css +2246 -0
  344. package/dist/dev/__generated__/skins/minimal-video/styles/theme.css +7 -0
  345. package/dist/dev/__generated__/skins/minimal-video/styles/video.css +29 -0
  346. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  347. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  348. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
  349. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  350. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  351. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  352. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  353. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  354. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  355. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  356. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  357. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  358. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  359. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  360. package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
  361. package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  362. package/dist/dev/define/audio/minimal-skin.css +103 -101
  363. package/dist/dev/define/audio/skin.css +68 -69
  364. package/dist/dev/define/live-audio/minimal-skin.css +103 -101
  365. package/dist/dev/define/live-audio/skin.css +68 -69
  366. package/dist/dev/define/live-video/minimal-skin.css +140 -120
  367. package/dist/dev/define/live-video/minimal-skin.d.ts.map +1 -1
  368. package/dist/dev/define/live-video/minimal-skin.js +3 -1
  369. package/dist/dev/define/live-video/minimal-skin.js.map +1 -1
  370. package/dist/dev/define/live-video/minimal-skin.tailwind.d.ts.map +1 -1
  371. package/dist/dev/define/live-video/minimal-skin.tailwind.js +3 -1
  372. package/dist/dev/define/live-video/minimal-skin.tailwind.js.map +1 -1
  373. package/dist/dev/define/live-video/skin.css +89 -76
  374. package/dist/dev/define/live-video/skin.d.ts.map +1 -1
  375. package/dist/dev/define/live-video/skin.js +3 -1
  376. package/dist/dev/define/live-video/skin.js.map +1 -1
  377. package/dist/dev/define/live-video/skin.tailwind.d.ts.map +1 -1
  378. package/dist/dev/define/live-video/skin.tailwind.js +4 -2
  379. package/dist/dev/define/live-video/skin.tailwind.js.map +1 -1
  380. package/dist/dev/define/ui/gesture.d.ts +8 -0
  381. package/dist/dev/define/ui/gesture.d.ts.map +1 -0
  382. package/dist/dev/define/ui/gesture.js +7 -0
  383. package/dist/dev/define/ui/gesture.js.map +1 -0
  384. package/dist/dev/define/video/minimal-skin.css +140 -120
  385. package/dist/dev/define/video/minimal-skin.d.ts.map +1 -1
  386. package/dist/dev/define/video/minimal-skin.js +3 -1
  387. package/dist/dev/define/video/minimal-skin.js.map +1 -1
  388. package/dist/dev/define/video/minimal-skin.tailwind.d.ts.map +1 -1
  389. package/dist/dev/define/video/minimal-skin.tailwind.js +3 -1
  390. package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
  391. package/dist/dev/define/video/skin.css +89 -76
  392. package/dist/dev/define/video/skin.d.ts.map +1 -1
  393. package/dist/dev/define/video/skin.js +3 -1
  394. package/dist/dev/define/video/skin.js.map +1 -1
  395. package/dist/dev/define/video/skin.tailwind.d.ts.map +1 -1
  396. package/dist/dev/define/video/skin.tailwind.js +4 -2
  397. package/dist/dev/define/video/skin.tailwind.js.map +1 -1
  398. package/dist/dev/media/hls-background-video/media.d.ts +16 -0
  399. package/dist/dev/media/hls-background-video/media.d.ts.map +1 -1
  400. package/dist/dev/media/hls-background-video/media.js +18 -0
  401. package/dist/dev/media/hls-background-video/media.js.map +1 -1
  402. package/dist/dev/packages/icons/dist/element/default/icons.js +1 -1
  403. package/dist/dev/packages/icons/dist/element/default/icons.js.map +1 -1
  404. package/dist/dev/packages/icons/dist/element/minimal/icons.js +1 -1
  405. package/dist/dev/packages/icons/dist/element/minimal/icons.js.map +1 -1
  406. package/dist/dev/packages/icons/dist/html/default/airplay-exit.js +1 -1
  407. package/dist/dev/packages/icons/dist/html/default/airplay-exit.js.map +1 -1
  408. package/dist/dev/packages/icons/dist/html/minimal/airplay-exit.js +1 -1
  409. package/dist/dev/packages/icons/dist/html/minimal/airplay-exit.js.map +1 -1
  410. package/dist/dev/packages/icons/dist/render/default/index.js +1 -1
  411. package/dist/dev/packages/icons/dist/render/default/index.js.map +1 -1
  412. package/dist/dev/packages/icons/dist/render/minimal/index.js +1 -1
  413. package/dist/dev/packages/icons/dist/render/minimal/index.js.map +1 -1
  414. package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js +3 -1
  415. package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  416. package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js +8 -1
  417. package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  418. package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js +10 -10
  419. package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  420. package/dist/dev/packages/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
  421. package/dist/dev/packages/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
  422. package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
  423. package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  424. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
  425. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  426. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
  427. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  428. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
  429. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
  430. package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
  431. package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  432. package/dist/dev/packages/skins/dist/default/shared/tailwind/icon-state.js +4 -4
  433. package/dist/dev/packages/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  434. package/dist/dev/store/provider-mixin.d.ts.map +1 -1
  435. package/dist/dev/store/provider-mixin.js +24 -8
  436. package/dist/dev/store/provider-mixin.js.map +1 -1
  437. package/dist/dev/store/types.d.ts +2 -2
  438. package/dist/dev/store/types.d.ts.map +1 -1
  439. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group-element.js +1 -1
  440. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group-element.js.map +1 -1
  441. package/dist/dev/ui/captions-radio-group/captions-radio-group-element.js +1 -1
  442. package/dist/dev/ui/captions-radio-group/captions-radio-group-element.js.map +1 -1
  443. package/dist/dev/ui/gesture/gesture-element.d.ts +7 -7
  444. package/dist/dev/ui/gesture/gesture-element.d.ts.map +1 -1
  445. package/dist/dev/ui/gesture/gesture-element.js.map +1 -1
  446. package/dist/dev/ui/hotkey/hotkey-element.d.ts +6 -6
  447. package/dist/dev/ui/hotkey/hotkey-element.d.ts.map +1 -1
  448. package/dist/dev/ui/hotkey/hotkey-element.js.map +1 -1
  449. package/dist/dev/ui/menu/context.d.ts +8 -8
  450. package/dist/dev/ui/menu/context.d.ts.map +1 -1
  451. package/dist/dev/ui/menu/context.js.map +1 -1
  452. package/dist/dev/ui/menu/menu-element.d.ts.map +1 -1
  453. package/dist/dev/ui/menu/menu-element.js +28 -27
  454. package/dist/dev/ui/menu/menu-element.js.map +1 -1
  455. package/dist/dev/ui/menu/menu-radio-group-element.d.ts +1 -1
  456. package/dist/dev/ui/menu/menu-radio-group-element.d.ts.map +1 -1
  457. package/dist/dev/ui/menu/menu-radio-group-element.js +14 -14
  458. package/dist/dev/ui/menu/menu-radio-group-element.js.map +1 -1
  459. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group-element.js +1 -1
  460. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group-element.js.map +1 -1
  461. package/dist/dev/ui/poster/poster-element.d.ts +20 -18
  462. package/dist/dev/ui/poster/poster-element.d.ts.map +1 -1
  463. package/dist/dev/ui/poster/poster-element.js +145 -8
  464. package/dist/dev/ui/poster/poster-element.js.map +1 -1
  465. package/dist/dev/ui/quality-radio-group/quality-radio-group-element.js +1 -1
  466. package/dist/dev/ui/quality-radio-group/quality-radio-group-element.js.map +1 -1
  467. package/dist/dev/ui/slider/slider-preview-element.d.ts +2 -2
  468. package/dist/dev/ui/slider/slider-preview-element.d.ts.map +1 -1
  469. package/dist/dev/ui/slider/slider-preview-element.js.map +1 -1
  470. package/docs/README.md +1 -1
  471. package/docs/concepts/skins.md +91 -78
  472. package/docs/how-to/customize-skins.md +411 -377
  473. package/docs/reference/menu.md +3 -19
  474. package/docs/reference/popover.md +2 -2
  475. package/docs/reference/poster.md +211 -21
  476. package/docs/reference/slider.md +1 -1
  477. package/docs/reference/time-slider.md +1 -1
  478. package/docs/reference/tooltip.md +6 -6
  479. package/docs/reference/volume-slider.md +1 -1
  480. package/package.json +14 -9
  481. package/cdn/adapter-Bk03SAxn.js +0 -2
  482. package/cdn/adapter-Bk03SAxn.js.map +0 -1
  483. package/cdn/adapter-XTen-YVQ.js.map +0 -1
  484. package/cdn/compounds-BEO1d3ZM.js +0 -8
  485. package/cdn/compounds-BEO1d3ZM.js.map +0 -1
  486. package/cdn/compounds-nk9RJtBK.js.map +0 -1
  487. package/cdn/create-player-DK9WOywd.js.map +0 -1
  488. package/cdn/create-player-hSdQMP5p.js +0 -2
  489. package/cdn/create-player-hSdQMP5p.js.map +0 -1
  490. package/cdn/default-BqQDVloS.js.map +0 -1
  491. package/cdn/default-CXWVp2oG.js +0 -2
  492. package/cdn/default-CXWVp2oG.js.map +0 -1
  493. package/cdn/default-Dw6cIEqT.js +0 -2
  494. package/cdn/default-Dw6cIEqT.js.map +0 -1
  495. package/cdn/default-I2LasfxC.js.map +0 -1
  496. package/cdn/error-surface-DCT1m2p1.js +0 -2
  497. package/cdn/error-surface-DCT1m2p1.js.map +0 -1
  498. package/cdn/error-surface-drmCvBVW.js.map +0 -1
  499. package/cdn/gesture-element-6Ld1YwIL.js.map +0 -1
  500. package/cdn/gesture-element-BC48ucj9.js +0 -2
  501. package/cdn/gesture-element-BC48ucj9.js.map +0 -1
  502. package/cdn/i18n-Dc7WM2xd.js +0 -2
  503. package/cdn/media-BTipOcKo.js +0 -2
  504. package/cdn/media-Bmablv4g.js +0 -2
  505. package/cdn/media-Bmablv4g.js.map +0 -1
  506. package/cdn/media-COIe3uI5.js.map +0 -1
  507. package/cdn/media-CPVSKLdk.js +0 -2
  508. package/cdn/media-Dq4zmIJa.js +0 -2
  509. package/cdn/media-Dq4zmIJa.js.map +0 -1
  510. package/cdn/media-suYcjCG2.js +0 -445
  511. package/cdn/media-suYcjCG2.js.map +0 -1
  512. package/cdn/minimal-BedCvMBG.js +0 -2
  513. package/cdn/minimal-BedCvMBG.js.map +0 -1
  514. package/cdn/minimal-BoP112ye.js +0 -2
  515. package/cdn/minimal-BoP112ye.js.map +0 -1
  516. package/cdn/minimal-DLosvq31.js.map +0 -1
  517. package/cdn/minimal-DQCLKRyR.js.map +0 -1
  518. package/cdn/minimal-ui-Et2Wcn7r.js +0 -2
  519. package/cdn/player-BRQLp5bX.js +0 -2
  520. package/cdn/player-BloX4l6F.js +0 -2
  521. package/cdn/player-rCFqzWrA.js +0 -2
  522. package/cdn/poster-element-BGr1VQJB.js.map +0 -1
  523. package/cdn/poster-element-DBmgOyep.js +0 -2
  524. package/cdn/poster-element-DBmgOyep.js.map +0 -1
  525. package/cdn/seek-button-element-XMTLIxZj.js.map +0 -1
  526. package/cdn/select-tracks-nRPBa1NC.js.map +0 -1
  527. package/cdn/select-tracks-xV1s28xD.js +0 -59
  528. package/cdn/select-tracks-xV1s28xD.js.map +0 -1
  529. package/cdn/time-slider-chapters-element-DJ0abZXI.js.map +0 -1
  530. package/cdn/time-slider-chapters-element-DW8YyJn8.js +0 -2
  531. package/cdn/time-slider-chapters-element-DW8YyJn8.js.map +0 -1
  532. package/cdn/ui-C0isALTQ.js +0 -2
  533. package/cdn/ui-DVpkE1MN.js +0 -2
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./predicate-LbFu-fPH.js";import{O as t}from"./compounds-C4YYLyL2.js";import{n,t as r}from"./media-element-Cp5PrNre.js";import{r as i,t as a}from"./context-C2rsoDxk.js";import{S as o,n as s}from"./create-player-BU8LDJDL.js";const c={seekStep:t.seekStep,volumeStep:t.volumeStep,speedUp:t.speedUp,speedDown:t.speedDown};function l(t){return c[t]||(({store:n})=>{let r=n.state[t];e(r)&&r()})}var u=class{#e=0;#t=null;handleUp(e,t){if(e.resolve(`doubletap`).length>0){let n=Date.now();if(n-this.#e<200){this.#n(),this.#e=0,e.resolve(`doubletap`)[0]?.onActivate(t);return}this.#e=n,this.#n(),this.#t=setTimeout(()=>{this.#t=null,this.#e=0,e.resolve(`tap`)[0]?.onActivate(t)},200);return}e.resolve(`tap`)[0]?.onActivate(t)}#n(){this.#t!==null&&(clearTimeout(this.#t),this.#t=null)}reset(){this.#n(),this.#e=0}};const d=new WeakMap;function f(e){let t=d.get(e);return t||(t=new u,d.set(e,t),t)}function p(e,t,n){return o(e).add({type:`tap`,recognizer:f(e),onActivate:t,pointer:n?.pointer,region:n?.region,disabled:n?.disabled,action:n?.action,value:n?.value})}function m(e,t,n){return o(e).add({type:`doubletap`,recognizer:f(e),onActivate:t,pointer:n?.pointer,region:n?.region,disabled:n?.disabled,action:n?.action,value:n?.value})}var h=class extends r{constructor(...e){super(...e),this.type=``,this.action=``,this.value=void 0,this.pointer=void 0,this.region=void 0,this.disabled=!1,this.#e=new s(this,i),this.#t=new n(this,{context:a,callback:()=>this.requestUpdate(),subscribe:!0}),this.#n=null}static{this.tagName=`media-gesture`}static{this.properties={type:{type:String},action:{type:String},value:{type:Number},pointer:{type:String},region:{type:String},disabled:{type:Boolean}}}#e;#t;#n;connectedCallback(){super.connectedCallback(),this.style.display=`none`,this.#r()}disconnectedCallback(){super.disconnectedCallback(),this.#i()}update(e){super.update(e),this.isConnected&&(this.#i(),this.#r())}#r(){let e=this.#e.value,t=this.#t.value?.container;if(!this.type||!this.action||!e||!t)return;let n=l(this.action);if(!n)return;let{value:r}=this,i=t=>{n({store:e,value:r,event:t})},a={pointer:this.pointer,region:this.region,disabled:this.disabled,action:this.action,value:this.value};this.type===`doubletap`?this.#n=m(t,i,a):this.#n=p(t,i,a)}#i(){this.#n?.(),this.#n=null}};export{h as t};
2
+ //# sourceMappingURL=gesture-element-CeRy1IVs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gesture-element-CeRy1IVs.js","names":["#lastTapTime","#clearTimer","#tapTimer","ContextConsumer","#player","#container","#register","#unregister","#cleanup"],"sources":["../../core/dist/default/dom/gesture/actions.js","../../core/dist/default/dom/gesture/tap.js","../../core/dist/default/dom/gesture/create-tap-gesture.js","../src/ui/gesture/gesture-element.ts"],"sourcesContent":["import { MEDIA_INPUT_ACTION_OVERRIDES } from \"../media-actions.js\";\nimport { isFunction } from \"@videojs/utils/predicate\";\n//#region src/dom/gesture/actions.ts\n/** Actions that need custom logic beyond `store.state[action]()`. */\nconst GESTURE_ACTION_OVERRIDES = {\n\tseekStep: MEDIA_INPUT_ACTION_OVERRIDES.seekStep,\n\tvolumeStep: MEDIA_INPUT_ACTION_OVERRIDES.volumeStep,\n\tspeedUp: MEDIA_INPUT_ACTION_OVERRIDES.speedUp,\n\tspeedDown: MEDIA_INPUT_ACTION_OVERRIDES.speedDown\n};\nfunction resolveGestureAction(name) {\n\tconst override = GESTURE_ACTION_OVERRIDES[name];\n\tif (override) return override;\n\treturn ({ store }) => {\n\t\tconst method = store.state[name];\n\t\tif (isFunction(method)) method();\n\t};\n}\n//#endregion\nexport { resolveGestureAction };\n\n//# sourceMappingURL=actions.js.map","//#region src/dom/gesture/tap.ts\nconst DOUBLETAP_WINDOW = 200;\n/**\n* Recognizes tap vs doubletap from quick pointer-up events.\n*\n* Stateful recognizer — tracks tap count and doubletap timing.\n* The coordinator handles pointer-down timing (tap threshold) and\n* calls `handleUp()` only for quick taps that passed the threshold check.\n*/\nvar TapRecognizer = class {\n\t#lastTapTime = 0;\n\t#tapTimer = null;\n\thandleUp(matches, event) {\n\t\tif (matches.resolve(\"doubletap\").length > 0) {\n\t\t\tconst now = Date.now();\n\t\t\tif (now - this.#lastTapTime < DOUBLETAP_WINDOW) {\n\t\t\t\tthis.#clearTimer();\n\t\t\t\tthis.#lastTapTime = 0;\n\t\t\t\tmatches.resolve(\"doubletap\")[0]?.onActivate(event);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#lastTapTime = now;\n\t\t\tthis.#clearTimer();\n\t\t\tthis.#tapTimer = setTimeout(() => {\n\t\t\t\tthis.#tapTimer = null;\n\t\t\t\tthis.#lastTapTime = 0;\n\t\t\t\tmatches.resolve(\"tap\")[0]?.onActivate(event);\n\t\t\t}, DOUBLETAP_WINDOW);\n\t\t\treturn;\n\t\t}\n\t\tmatches.resolve(\"tap\")[0]?.onActivate(event);\n\t}\n\t#clearTimer() {\n\t\tif (this.#tapTimer !== null) {\n\t\t\tclearTimeout(this.#tapTimer);\n\t\t\tthis.#tapTimer = null;\n\t\t}\n\t}\n\treset() {\n\t\tthis.#clearTimer();\n\t\tthis.#lastTapTime = 0;\n\t}\n};\n//#endregion\nexport { TapRecognizer };\n\n//# sourceMappingURL=tap.js.map","import { getGestureCoordinator } from \"./coordinator.js\";\nimport { TapRecognizer } from \"./tap.js\";\n//#region src/dom/gesture/create-tap-gesture.ts\nconst recognizers = /* @__PURE__ */ new WeakMap();\nfunction getRecognizer(target) {\n\tlet recognizer = recognizers.get(target);\n\tif (recognizer) return recognizer;\n\trecognizer = new TapRecognizer();\n\trecognizers.set(target, recognizer);\n\treturn recognizer;\n}\n/**\n* Register a tap gesture on a target element.\n*\n* @example\n* ```ts\n* const cleanup = createTapGesture(container, (event) => {\n* store.paused ? store.play() : store.pause();\n* }, { pointer: 'mouse' });\n* ```\n*/\nfunction createTapGesture(target, onActivate, options) {\n\treturn getGestureCoordinator(target).add({\n\t\ttype: \"tap\",\n\t\trecognizer: getRecognizer(target),\n\t\tonActivate,\n\t\tpointer: options?.pointer,\n\t\tregion: options?.region,\n\t\tdisabled: options?.disabled,\n\t\taction: options?.action,\n\t\tvalue: options?.value\n\t});\n}\n/**\n* Register a doubletap gesture on a target element.\n*\n* @example\n* ```ts\n* const cleanup = createDoubleTapGesture(container, (event) => {\n* store.fullscreen ? store.exitFullscreen() : store.requestFullscreen();\n* }, { region: 'center' });\n* ```\n*/\nfunction createDoubleTapGesture(target, onActivate, options) {\n\treturn getGestureCoordinator(target).add({\n\t\ttype: \"doubletap\",\n\t\trecognizer: getRecognizer(target),\n\t\tonActivate,\n\t\tpointer: options?.pointer,\n\t\tregion: options?.region,\n\t\tdisabled: options?.disabled,\n\t\taction: options?.action,\n\t\tvalue: options?.value\n\t});\n}\n//#endregion\nexport { createDoubleTapGesture, createTapGesture };\n\n//# sourceMappingURL=create-tap-gesture.js.map","import type { GestureProps } from '@videojs/core';\nimport { createDoubleTapGesture, createTapGesture, resolveGestureAction } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class GestureElement extends MediaElement {\n static readonly tagName = 'media-gesture';\n\n static override properties: PropertyDeclarationMap = {\n type: { type: String },\n action: { type: String },\n value: { type: Number },\n pointer: { type: String },\n region: { type: String },\n disabled: { type: Boolean },\n };\n\n type: GestureProps['type'] | '' = '';\n action: GestureProps['action'] = '';\n value: GestureProps['value'] = undefined;\n pointer: GestureProps['pointer'] = undefined;\n region: GestureProps['region'] = undefined;\n disabled: NonNullable<GestureProps['disabled']> = false;\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.type || !this.action || !store || !container) return;\n\n const resolver = resolveGestureAction(this.action);\n if (!resolver) return;\n\n const { value } = this;\n\n const onActivate = (event: PointerEvent) => {\n resolver({ store, value, event });\n };\n\n const options = {\n pointer: this.pointer,\n region: this.region,\n disabled: this.disabled,\n action: this.action,\n value: this.value,\n };\n\n if (this.type === 'doubletap') {\n this.#cleanup = createDoubleTapGesture(container, onActivate, options);\n } else {\n this.#cleanup = createTapGesture(container, onActivate, options);\n }\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { r as isFunction } from "./predicate-faYxAB6Z.js";
2
- import { k as MEDIA_INPUT_ACTION_OVERRIDES } from "./compounds-nk9RJtBK.js";
3
- import { S as getGestureCoordinator, n as PlayerController } from "./create-player-DK9WOywd.js";
2
+ import { k as MEDIA_INPUT_ACTION_OVERRIDES } from "./compounds-C73u1MeO.js";
4
3
  import { n as ContextConsumer, t as MediaElement } from "./media-element-CJY3JIgc.js";
5
4
  import { r as playerContext, t as containerContext } from "./context-OhQY847V.js";
5
+ import { S as getGestureCoordinator, n as PlayerController } from "./create-player-Db1CIvlK.js";
6
6
 
7
7
  //#region ../core/dist/dev/dom/gesture/actions.js
8
8
  /** Actions that need custom logic beyond `store.state[action]()`. */
@@ -205,4 +205,4 @@ var GestureElement = class extends MediaElement {
205
205
 
206
206
  //#endregion
207
207
  export { GestureElement as t };
208
- //# sourceMappingURL=gesture-element-6Ld1YwIL.js.map
208
+ //# sourceMappingURL=gesture-element-DB67OYCE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gesture-element-DB67OYCE.js","names":["#lastTapTime","#clearTimer","#tapTimer","#player","#container","#register","#unregister","#cleanup"],"sources":["../../core/dist/dev/dom/gesture/actions.js","../../core/dist/dev/dom/gesture/tap.js","../../core/dist/dev/dom/gesture/create-tap-gesture.js","../src/ui/gesture/gesture-element.ts"],"sourcesContent":["import { MEDIA_INPUT_ACTION_OVERRIDES } from \"../media-actions.js\";\nimport { isFunction } from \"@videojs/utils/predicate\";\n//#region src/dom/gesture/actions.ts\n/** Actions that need custom logic beyond `store.state[action]()`. */\nconst GESTURE_ACTION_OVERRIDES = {\n\tseekStep: MEDIA_INPUT_ACTION_OVERRIDES.seekStep,\n\tvolumeStep: MEDIA_INPUT_ACTION_OVERRIDES.volumeStep,\n\tspeedUp: MEDIA_INPUT_ACTION_OVERRIDES.speedUp,\n\tspeedDown: MEDIA_INPUT_ACTION_OVERRIDES.speedDown\n};\nfunction resolveGestureAction(name) {\n\tconst override = GESTURE_ACTION_OVERRIDES[name];\n\tif (override) return override;\n\treturn ({ store }) => {\n\t\tconst method = store.state[name];\n\t\tif (isFunction(method)) method();\n\t\telse console.warn(`[vjs-gesture] Unknown action: \"${name}\"`);\n\t};\n}\n//#endregion\nexport { resolveGestureAction };\n\n//# sourceMappingURL=actions.js.map","//#region src/dom/gesture/tap.ts\nconst DOUBLETAP_WINDOW = 200;\n/**\n* Recognizes tap vs doubletap from quick pointer-up events.\n*\n* Stateful recognizer — tracks tap count and doubletap timing.\n* The coordinator handles pointer-down timing (tap threshold) and\n* calls `handleUp()` only for quick taps that passed the threshold check.\n*/\nvar TapRecognizer = class {\n\t#lastTapTime = 0;\n\t#tapTimer = null;\n\thandleUp(matches, event) {\n\t\tif (matches.resolve(\"doubletap\").length > 0) {\n\t\t\tconst now = Date.now();\n\t\t\tif (now - this.#lastTapTime < DOUBLETAP_WINDOW) {\n\t\t\t\tthis.#clearTimer();\n\t\t\t\tthis.#lastTapTime = 0;\n\t\t\t\tmatches.resolve(\"doubletap\")[0]?.onActivate(event);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#lastTapTime = now;\n\t\t\tthis.#clearTimer();\n\t\t\tthis.#tapTimer = setTimeout(() => {\n\t\t\t\tthis.#tapTimer = null;\n\t\t\t\tthis.#lastTapTime = 0;\n\t\t\t\tmatches.resolve(\"tap\")[0]?.onActivate(event);\n\t\t\t}, DOUBLETAP_WINDOW);\n\t\t\treturn;\n\t\t}\n\t\tmatches.resolve(\"tap\")[0]?.onActivate(event);\n\t}\n\t#clearTimer() {\n\t\tif (this.#tapTimer !== null) {\n\t\t\tclearTimeout(this.#tapTimer);\n\t\t\tthis.#tapTimer = null;\n\t\t}\n\t}\n\treset() {\n\t\tthis.#clearTimer();\n\t\tthis.#lastTapTime = 0;\n\t}\n};\n//#endregion\nexport { TapRecognizer };\n\n//# sourceMappingURL=tap.js.map","import { getGestureCoordinator } from \"./coordinator.js\";\nimport { TapRecognizer } from \"./tap.js\";\n//#region src/dom/gesture/create-tap-gesture.ts\nconst recognizers = /* @__PURE__ */ new WeakMap();\nfunction getRecognizer(target) {\n\tlet recognizer = recognizers.get(target);\n\tif (recognizer) return recognizer;\n\trecognizer = new TapRecognizer();\n\trecognizers.set(target, recognizer);\n\treturn recognizer;\n}\n/**\n* Register a tap gesture on a target element.\n*\n* @example\n* ```ts\n* const cleanup = createTapGesture(container, (event) => {\n* store.paused ? store.play() : store.pause();\n* }, { pointer: 'mouse' });\n* ```\n*/\nfunction createTapGesture(target, onActivate, options) {\n\treturn getGestureCoordinator(target).add({\n\t\ttype: \"tap\",\n\t\trecognizer: getRecognizer(target),\n\t\tonActivate,\n\t\tpointer: options?.pointer,\n\t\tregion: options?.region,\n\t\tdisabled: options?.disabled,\n\t\taction: options?.action,\n\t\tvalue: options?.value\n\t});\n}\n/**\n* Register a doubletap gesture on a target element.\n*\n* @example\n* ```ts\n* const cleanup = createDoubleTapGesture(container, (event) => {\n* store.fullscreen ? store.exitFullscreen() : store.requestFullscreen();\n* }, { region: 'center' });\n* ```\n*/\nfunction createDoubleTapGesture(target, onActivate, options) {\n\treturn getGestureCoordinator(target).add({\n\t\ttype: \"doubletap\",\n\t\trecognizer: getRecognizer(target),\n\t\tonActivate,\n\t\tpointer: options?.pointer,\n\t\tregion: options?.region,\n\t\tdisabled: options?.disabled,\n\t\taction: options?.action,\n\t\tvalue: options?.value\n\t});\n}\n//#endregion\nexport { createDoubleTapGesture, createTapGesture };\n\n//# sourceMappingURL=create-tap-gesture.js.map","import type { GestureProps } from '@videojs/core';\nimport { createDoubleTapGesture, createTapGesture, resolveGestureAction } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class GestureElement extends MediaElement {\n static readonly tagName = 'media-gesture';\n\n static override properties: PropertyDeclarationMap = {\n type: { type: String },\n action: { type: String },\n value: { type: Number },\n pointer: { type: String },\n region: { type: String },\n disabled: { type: Boolean },\n };\n\n type: GestureProps['type'] | '' = '';\n action: GestureProps['action'] = '';\n value: GestureProps['value'] = undefined;\n pointer: GestureProps['pointer'] = undefined;\n region: GestureProps['region'] = undefined;\n disabled: NonNullable<GestureProps['disabled']> = false;\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.type || !this.action || !store || !container) return;\n\n const resolver = resolveGestureAction(this.action);\n if (!resolver) return;\n\n const { value } = this;\n\n const onActivate = (event: PointerEvent) => {\n resolver({ store, value, event });\n };\n\n const options = {\n pointer: this.pointer,\n region: this.region,\n disabled: this.disabled,\n action: this.action,\n value: this.value,\n };\n\n if (this.type === 'doubletap') {\n this.#cleanup = createDoubleTapGesture(container, onActivate, options);\n } else {\n this.#cleanup = createTapGesture(container, onActivate, options);\n }\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{t as e}from"./custom-media-element-8pSkwn42.js";import{i as t}from"./context-C2rsoDxk.js";import{t as n}from"./media-attach-mixin-Igi3-1UG.js";import{t as r}from"./media-Bmablv4g.js";import{t as i}from"./mixin-ypVl8-O_.js";const a=i(n(e(`audio`,r)));var o=class extends a{},s=class extends o{static{this.tagName=`mux-audio`}};t(s);export{s as t};
2
- //# sourceMappingURL=hls-js-C4P_b2tT.js.map
1
+ import{t as e}from"./custom-media-element-8pSkwn42.js";import{i as t}from"./context-C2rsoDxk.js";import{t as n}from"./media-attach-mixin-Igi3-1UG.js";import{t as r}from"./media-DU3Xf5XR.js";import{t as i}from"./mixin-ypVl8-O_.js";const a=i(n(e(`audio`,r)));var o=class extends a{},s=class extends o{static{this.tagName=`mux-audio`}};t(s);export{s as t};
2
+ //# sourceMappingURL=hls-js-CiE4wOrG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hls-js-C4P_b2tT.js","names":[],"sources":["../src/media/mux-audio/hls-js.ts","../src/define/media/mux-audio/hls-js.ts"],"sourcesContent":["import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { MuxMedia } from '@videojs/media/dom/mux';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\nimport { MuxAudioMixin } from './mixin';\n\nconst MuxAudioBase = MuxAudioMixin(MediaAttachMixin(CustomMediaElement('audio', MuxMedia)));\n\nexport class MuxAudio extends MuxAudioBase {}\n","import { MuxAudio } from '../../../media/mux-audio/hls-js';\nimport { safeDefine } from '../../safe-define';\n\nexport class MuxAudioElement extends MuxAudio {\n static readonly tagName = 'mux-audio';\n}\n\nsafeDefine(MuxAudioElement);\n\ndeclare global {\n /** The Mux audio flavors in the build — see `../mux-video/spf` for why. */\n interface MuxAudioFlavors {\n 'hls-js': MuxAudioElement;\n }\n\n interface HTMLElementTagNameMap {\n // Spelled out rather than `[MuxAudioElement.tagName]` — see `../mux-video/hls-js`.\n 'mux-audio': MuxAudioFlavors[keyof MuxAudioFlavors];\n }\n}\n"],"mappings":"sOAKA,MAAM,EAAe,EAAc,EAAiB,EAAmB,QAAS,CAAQ,CAAC,CAAC,EAE1F,IAAa,EAAb,cAA8B,CAAa,CAAC,ECJ/B,EAAb,cAAqC,CAAS,QAClB,KAAA,QAAA,YAC5B,EAEA,EAAW,CAAe"}
1
+ {"version":3,"file":"hls-js-CiE4wOrG.js","names":[],"sources":["../src/media/mux-audio/hls-js.ts","../src/define/media/mux-audio/hls-js.ts"],"sourcesContent":["import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { MuxMedia } from '@videojs/media/dom/mux';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\nimport { MuxAudioMixin } from './mixin';\n\nconst MuxAudioBase = MuxAudioMixin(MediaAttachMixin(CustomMediaElement('audio', MuxMedia)));\n\nexport class MuxAudio extends MuxAudioBase {}\n","import { MuxAudio } from '../../../media/mux-audio/hls-js';\nimport { safeDefine } from '../../safe-define';\n\nexport class MuxAudioElement extends MuxAudio {\n static readonly tagName = 'mux-audio';\n}\n\nsafeDefine(MuxAudioElement);\n\ndeclare global {\n /** The Mux audio flavors in the build — see `../mux-video/spf` for why. */\n interface MuxAudioFlavors {\n 'hls-js': MuxAudioElement;\n }\n\n interface HTMLElementTagNameMap {\n // Spelled out rather than `[MuxAudioElement.tagName]` — see `../mux-video/hls-js`.\n 'mux-audio': MuxAudioFlavors[keyof MuxAudioFlavors];\n }\n}\n"],"mappings":"sOAKA,MAAM,EAAe,EAAc,EAAiB,EAAmB,QAAS,CAAQ,CAAC,CAAC,EAE1F,IAAa,EAAb,cAA8B,CAAa,CAAC,ECJ/B,EAAb,cAAqC,CAAS,QAClB,KAAA,QAAA,YAC5B,EAEA,EAAW,CAAe"}
@@ -1,2 +1,2 @@
1
- import{t as e}from"./custom-media-element-8pSkwn42.js";import{i as t}from"./context-C2rsoDxk.js";import{t as n}from"./media-attach-mixin-Igi3-1UG.js";import{t as r}from"./media-Bmablv4g.js";import{t as i}from"./mixin-BXfRWfYu.js";const a=i(n(e(`video`,r)));var o=class extends a{},s=class extends o{static{this.tagName=`mux-video`}};t(s);export{s as t};
2
- //# sourceMappingURL=hls-js-CATW7NBm.js.map
1
+ import{t as e}from"./custom-media-element-8pSkwn42.js";import{i as t}from"./context-C2rsoDxk.js";import{t as n}from"./media-attach-mixin-Igi3-1UG.js";import{t as r}from"./media-DU3Xf5XR.js";import{t as i}from"./mixin-BXfRWfYu.js";const a=i(n(e(`video`,r)));var o=class extends a{},s=class extends o{static{this.tagName=`mux-video`}};t(s);export{s as t};
2
+ //# sourceMappingURL=hls-js-DBKRCbQm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hls-js-CATW7NBm.js","names":[],"sources":["../src/media/mux-video/hls-js.ts","../src/define/media/mux-video/hls-js.ts"],"sourcesContent":["import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { MuxMedia } from '@videojs/media/dom/mux';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\nimport { MuxVideoMixin } from './mixin';\n\nconst MuxVideoBase = MuxVideoMixin(MediaAttachMixin(CustomMediaElement('video', MuxMedia)));\n\nexport class MuxVideo extends MuxVideoBase {}\n","import { MuxVideo } from '../../../media/mux-video/hls-js';\nimport { safeDefine } from '../../safe-define';\n\nexport class MuxVideoElement extends MuxVideo {\n static readonly tagName = 'mux-video';\n}\n\nsafeDefine(MuxVideoElement);\n\ndeclare global {\n /** The Mux video flavors in the build — see `./spf` for why. */\n interface MuxVideoFlavors {\n 'hls-js': MuxVideoElement;\n }\n\n interface HTMLElementTagNameMap {\n // Spelled out rather than `[MuxVideoElement.tagName]`: the sibling flavor\n // declares this same key, and the declaration bundler keeps only one key form\n // per property — a computed one next to a literal one is dropped from the\n // emitted types, taking the mapping with it.\n 'mux-video': MuxVideoFlavors[keyof MuxVideoFlavors];\n }\n}\n"],"mappings":"sOAKA,MAAM,EAAe,EAAc,EAAiB,EAAmB,QAAS,CAAQ,CAAC,CAAC,EAE1F,IAAa,EAAb,cAA8B,CAAa,CAAC,ECJ/B,EAAb,cAAqC,CAAS,QAClB,KAAA,QAAA,YAC5B,EAEA,EAAW,CAAe"}
1
+ {"version":3,"file":"hls-js-DBKRCbQm.js","names":[],"sources":["../src/media/mux-video/hls-js.ts","../src/define/media/mux-video/hls-js.ts"],"sourcesContent":["import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { MuxMedia } from '@videojs/media/dom/mux';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\nimport { MuxVideoMixin } from './mixin';\n\nconst MuxVideoBase = MuxVideoMixin(MediaAttachMixin(CustomMediaElement('video', MuxMedia)));\n\nexport class MuxVideo extends MuxVideoBase {}\n","import { MuxVideo } from '../../../media/mux-video/hls-js';\nimport { safeDefine } from '../../safe-define';\n\nexport class MuxVideoElement extends MuxVideo {\n static readonly tagName = 'mux-video';\n}\n\nsafeDefine(MuxVideoElement);\n\ndeclare global {\n /** The Mux video flavors in the build — see `./spf` for why. */\n interface MuxVideoFlavors {\n 'hls-js': MuxVideoElement;\n }\n\n interface HTMLElementTagNameMap {\n // Spelled out rather than `[MuxVideoElement.tagName]`: the sibling flavor\n // declares this same key, and the declaration bundler keeps only one key form\n // per property — a computed one next to a literal one is dropped from the\n // emitted types, taking the mapping with it.\n 'mux-video': MuxVideoFlavors[keyof MuxVideoFlavors];\n }\n}\n"],"mappings":"sOAKA,MAAM,EAAe,EAAc,EAAiB,EAAmB,QAAS,CAAQ,CAAC,CAAC,EAE1F,IAAa,EAAb,cAA8B,CAAa,CAAC,ECJ/B,EAAb,cAAqC,CAAS,QAClB,KAAA,QAAA,YAC5B,EAEA,EAAW,CAAe"}
@@ -1,7 +1,7 @@
1
1
  import { t as CustomMediaElement } from "./custom-media-element-D2JoODKd.js";
2
2
  import { i as safeDefine } from "./context-OhQY847V.js";
3
3
  import { t as MediaAttachMixin } from "./media-attach-mixin-uThv5NL_.js";
4
- import { t as MuxMedia } from "./media-COIe3uI5.js";
4
+ import { t as MuxMedia } from "./media-BNuI0Im7.js";
5
5
  import { t as MuxVideoMixin } from "./mixin-NrVEcofN.js";
6
6
 
7
7
  //#region src/media/mux-video/hls-js.ts
@@ -19,4 +19,4 @@ safeDefine(MuxVideoElement);
19
19
 
20
20
  //#endregion
21
21
  export { MuxVideoElement as t };
22
- //# sourceMappingURL=hls-js-BEuVm0u9.js.map
22
+ //# sourceMappingURL=hls-js-DX2NGCAr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hls-js-BEuVm0u9.js","names":[],"sources":["../src/media/mux-video/hls-js.ts","../src/define/media/mux-video/hls-js.ts"],"sourcesContent":["import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { MuxMedia } from '@videojs/media/dom/mux';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\nimport { MuxVideoMixin } from './mixin';\n\nconst MuxVideoBase = MuxVideoMixin(MediaAttachMixin(CustomMediaElement('video', MuxMedia)));\n\nexport class MuxVideo extends MuxVideoBase {}\n","import { MuxVideo } from '../../../media/mux-video/hls-js';\nimport { safeDefine } from '../../safe-define';\n\nexport class MuxVideoElement extends MuxVideo {\n static readonly tagName = 'mux-video';\n}\n\nsafeDefine(MuxVideoElement);\n\ndeclare global {\n /** The Mux video flavors in the build — see `./spf` for why. */\n interface MuxVideoFlavors {\n 'hls-js': MuxVideoElement;\n }\n\n interface HTMLElementTagNameMap {\n // Spelled out rather than `[MuxVideoElement.tagName]`: the sibling flavor\n // declares this same key, and the declaration bundler keeps only one key form\n // per property — a computed one next to a literal one is dropped from the\n // emitted types, taking the mapping with it.\n 'mux-video': MuxVideoFlavors[keyof MuxVideoFlavors];\n }\n}\n"],"mappings":";;;;;;;AAKA,MAAM,eAAe,cAAc,iBAAiB,mBAAmB,SAAS,QAAQ,CAAC,CAAC;AAE1F,IAAa,WAAb,cAA8B,aAAa,CAAC;;;;ACJ5C,IAAa,kBAAb,cAAqC,SAAS;;iBAClB;;AAC5B;AAEA,WAAW,eAAe"}
1
+ {"version":3,"file":"hls-js-DX2NGCAr.js","names":[],"sources":["../src/media/mux-video/hls-js.ts","../src/define/media/mux-video/hls-js.ts"],"sourcesContent":["import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { MuxMedia } from '@videojs/media/dom/mux';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\nimport { MuxVideoMixin } from './mixin';\n\nconst MuxVideoBase = MuxVideoMixin(MediaAttachMixin(CustomMediaElement('video', MuxMedia)));\n\nexport class MuxVideo extends MuxVideoBase {}\n","import { MuxVideo } from '../../../media/mux-video/hls-js';\nimport { safeDefine } from '../../safe-define';\n\nexport class MuxVideoElement extends MuxVideo {\n static readonly tagName = 'mux-video';\n}\n\nsafeDefine(MuxVideoElement);\n\ndeclare global {\n /** The Mux video flavors in the build — see `./spf` for why. */\n interface MuxVideoFlavors {\n 'hls-js': MuxVideoElement;\n }\n\n interface HTMLElementTagNameMap {\n // Spelled out rather than `[MuxVideoElement.tagName]`: the sibling flavor\n // declares this same key, and the declaration bundler keeps only one key form\n // per property — a computed one next to a literal one is dropped from the\n // emitted types, taking the mapping with it.\n 'mux-video': MuxVideoFlavors[keyof MuxVideoFlavors];\n }\n}\n"],"mappings":";;;;;;;AAKA,MAAM,eAAe,cAAc,iBAAiB,mBAAmB,SAAS,QAAQ,CAAC,CAAC;AAE1F,IAAa,WAAb,cAA8B,aAAa,CAAC;;;;ACJ5C,IAAa,kBAAb,cAAqC,SAAS;;iBAClB;;AAC5B;AAEA,WAAW,eAAe"}
@@ -1,7 +1,7 @@
1
1
  import { t as CustomMediaElement } from "./custom-media-element-D2JoODKd.js";
2
2
  import { i as safeDefine } from "./context-OhQY847V.js";
3
3
  import { t as MediaAttachMixin } from "./media-attach-mixin-uThv5NL_.js";
4
- import { t as MuxMedia } from "./media-COIe3uI5.js";
4
+ import { t as MuxMedia } from "./media-BNuI0Im7.js";
5
5
  import { t as MuxAudioMixin } from "./mixin-Co51mtM6.js";
6
6
 
7
7
  //#region src/media/mux-audio/hls-js.ts
@@ -19,4 +19,4 @@ safeDefine(MuxAudioElement);
19
19
 
20
20
  //#endregion
21
21
  export { MuxAudioElement as t };
22
- //# sourceMappingURL=hls-js-WCNy9MVh.js.map
22
+ //# sourceMappingURL=hls-js-JeH8yvsP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hls-js-WCNy9MVh.js","names":[],"sources":["../src/media/mux-audio/hls-js.ts","../src/define/media/mux-audio/hls-js.ts"],"sourcesContent":["import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { MuxMedia } from '@videojs/media/dom/mux';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\nimport { MuxAudioMixin } from './mixin';\n\nconst MuxAudioBase = MuxAudioMixin(MediaAttachMixin(CustomMediaElement('audio', MuxMedia)));\n\nexport class MuxAudio extends MuxAudioBase {}\n","import { MuxAudio } from '../../../media/mux-audio/hls-js';\nimport { safeDefine } from '../../safe-define';\n\nexport class MuxAudioElement extends MuxAudio {\n static readonly tagName = 'mux-audio';\n}\n\nsafeDefine(MuxAudioElement);\n\ndeclare global {\n /** The Mux audio flavors in the build — see `../mux-video/spf` for why. */\n interface MuxAudioFlavors {\n 'hls-js': MuxAudioElement;\n }\n\n interface HTMLElementTagNameMap {\n // Spelled out rather than `[MuxAudioElement.tagName]` — see `../mux-video/hls-js`.\n 'mux-audio': MuxAudioFlavors[keyof MuxAudioFlavors];\n }\n}\n"],"mappings":";;;;;;;AAKA,MAAM,eAAe,cAAc,iBAAiB,mBAAmB,SAAS,QAAQ,CAAC,CAAC;AAE1F,IAAa,WAAb,cAA8B,aAAa,CAAC;;;;ACJ5C,IAAa,kBAAb,cAAqC,SAAS;;iBAClB;;AAC5B;AAEA,WAAW,eAAe"}
1
+ {"version":3,"file":"hls-js-JeH8yvsP.js","names":[],"sources":["../src/media/mux-audio/hls-js.ts","../src/define/media/mux-audio/hls-js.ts"],"sourcesContent":["import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { MuxMedia } from '@videojs/media/dom/mux';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\nimport { MuxAudioMixin } from './mixin';\n\nconst MuxAudioBase = MuxAudioMixin(MediaAttachMixin(CustomMediaElement('audio', MuxMedia)));\n\nexport class MuxAudio extends MuxAudioBase {}\n","import { MuxAudio } from '../../../media/mux-audio/hls-js';\nimport { safeDefine } from '../../safe-define';\n\nexport class MuxAudioElement extends MuxAudio {\n static readonly tagName = 'mux-audio';\n}\n\nsafeDefine(MuxAudioElement);\n\ndeclare global {\n /** The Mux audio flavors in the build — see `../mux-video/spf` for why. */\n interface MuxAudioFlavors {\n 'hls-js': MuxAudioElement;\n }\n\n interface HTMLElementTagNameMap {\n // Spelled out rather than `[MuxAudioElement.tagName]` — see `../mux-video/hls-js`.\n 'mux-audio': MuxAudioFlavors[keyof MuxAudioFlavors];\n }\n}\n"],"mappings":";;;;;;;AAKA,MAAM,eAAe,cAAc,iBAAiB,mBAAmB,SAAS,QAAQ,CAAC,CAAC;AAE1F,IAAa,WAAb,cAA8B,aAAa,CAAC;;;;ACJ5C,IAAa,kBAAb,cAAqC,SAAS;;iBAClB;;AAC5B;AAEA,WAAW,eAAe"}
@@ -0,0 +1,2 @@
1
+ import{i as e}from"./context-C2rsoDxk.js";import{n as t,t as n}from"./text-element-BoY6AhMn.js";e(t),e(n);
2
+ //# sourceMappingURL=i18n-CpBDXf6M.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18n-Dc7WM2xd.js","names":[],"sources":["../src/define/i18n.ts"],"sourcesContent":["import { I18nProviderElement } from '../i18n/provider-element';\nimport { TextElement } from '../ui/text/text-element';\nimport { safeDefine } from './safe-define';\n\nsafeDefine(I18nProviderElement);\nsafeDefine(TextElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [I18nProviderElement.tagName]: I18nProviderElement;\n [TextElement.tagName]: TextElement;\n }\n}\n"],"mappings":"gGAIA,EAAW,CAAmB,EAC9B,EAAW,CAAW"}
1
+ {"version":3,"file":"i18n-CpBDXf6M.js","names":[],"sources":["../src/define/i18n.ts"],"sourcesContent":["import { I18nProviderElement } from '../i18n/provider-element';\nimport { TextElement } from '../ui/text/text-element';\nimport { safeDefine } from './safe-define';\n\nsafeDefine(I18nProviderElement);\nsafeDefine(TextElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [I18nProviderElement.tagName]: I18nProviderElement;\n [TextElement.tagName]: TextElement;\n }\n}\n"],"mappings":"gGAIA,EAAW,CAAmB,EAC9B,EAAW,CAAW"}
@@ -1,9 +1,9 @@
1
1
  import { i as safeDefine } from "./context-OhQY847V.js";
2
- import { n as I18nProviderElement, t as TextElement } from "./text-element-D88ArbZz.js";
2
+ import { n as I18nProviderElement, t as TextElement } from "./text-element-cg6l21cd.js";
3
3
 
4
4
  //#region src/define/i18n.ts
5
5
  safeDefine(I18nProviderElement);
6
6
  safeDefine(TextElement);
7
7
 
8
8
  //#endregion
9
- //# sourceMappingURL=i18n-Ch4t6EjV.js.map
9
+ //# sourceMappingURL=i18n-D0nhPa0m.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"i18n-Ch4t6EjV.js","names":[],"sources":["../src/define/i18n.ts"],"sourcesContent":["import { I18nProviderElement } from '../i18n/provider-element';\nimport { TextElement } from '../ui/text/text-element';\nimport { safeDefine } from './safe-define';\n\nsafeDefine(I18nProviderElement);\nsafeDefine(TextElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [I18nProviderElement.tagName]: I18nProviderElement;\n [TextElement.tagName]: TextElement;\n }\n}\n"],"mappings":";;;;AAIA,WAAW,mBAAmB;AAC9B,WAAW,WAAW"}
1
+ {"version":3,"file":"i18n-D0nhPa0m.js","names":[],"sources":["../src/define/i18n.ts"],"sourcesContent":["import { I18nProviderElement } from '../i18n/provider-element';\nimport { TextElement } from '../ui/text/text-element';\nimport { safeDefine } from './safe-define';\n\nsafeDefine(I18nProviderElement);\nsafeDefine(TextElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [I18nProviderElement.tagName]: I18nProviderElement;\n [TextElement.tagName]: TextElement;\n }\n}\n"],"mappings":";;;;AAIA,WAAW,mBAAmB;AAC9B,WAAW,WAAW"}
@@ -1,2 +1,2 @@
1
- import{A as e,C as t,D as n,M as r,S as i,nt as a,w as o,z as s}from"./compounds-BEO1d3ZM.js";import{k as c,n as l}from"./create-player-hSdQMP5p.js";import{r as u}from"./translate-text-TzSgu_oe.js";import{t as d}from"./media-element-Cp5PrNre.js";import{r as f}from"./context-C2rsoDxk.js";import{c as p,r as m}from"./container-element-Dd0ZCdhK.js";import{resolveText as h,translateText as g}from"./i18n.js";const _=`live.`,v={key:`${_}playing`,text:`Playing live`},y={key:`${_}seekToEdge`,text:`Seek to live edge`},b={key:`${_}badge`,text:`Live`};var x=class e{static defaultText=b;static defaultProps={label:``,disabled:!1};state=c({live:!1,liveEdge:!1,label:``});#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=a(t,e.defaultProps)}getLabel(e){return i(this.#e.label,e)||(e.liveEdge?v:y)}getAttrs(e){let t=this.#e.disabled||e.liveEdge;return{"aria-label":this.getLabel(e),"aria-disabled":t?`true`:void 0}}setMedia(e){this.#t=e}getState(){let e=this.#t,t=S(e),n=t&&this.#n(e);return this.state.patch({live:t,liveEdge:n}),this.state.patch({label:u(this.getLabel(this.state.current))}),this.state.current}async seekToLive(e){if(this.#e.disabled||!S(e)||this.#n(e))return;let t=C(e);t!=null&&await e.seek(t)}#n(e){let{currentTime:t,liveEdgeStart:n}=e;if(Number.isFinite(n))return t>=n-5;let r=C(e);return r!=null&&t>=r-10}};function S(e){return!Number.isNaN(e.targetLiveWindow)}function C(e){let{seekable:t}=e;if(t.length===0)return null;let n=t[t.length-1][1];return Number.isFinite(n)?n:null}const w={live:`data-live`,liveEdge:`data-live-edge`};var T=class extends d{constructor(...t){super(...t),this.disabled=!1,this.label=``,this.core=new x,this.live=new l(this,f,r),this.time=new l(this,f,s),this.buffer=new l(this,f,e),this.#e=new m(this,p),this.#t=!1,this.#n=null}static{this.tagName=`media-live-button`}static{this.properties={label:{type:String},disabled:{type:Boolean}}}#e;get $state(){return this.core.state}#t;#n;connectedCallback(){if(super.connectedCallback(),this.destroyed)return;this.#t||=!this.textContent?.trim(),this.#t&&(this.textContent=g(x.defaultText,this.#e.value)),this.#n=new AbortController;let e=n({onActivate:()=>{let e=this.#r();e&&this.core.seekToLive(e)},isDisabled:()=>this.disabled||!this.#r()});o(this,e,{signal:this.#n.signal})}disconnectedCallback(){super.disconnectedCallback(),this.#n?.abort(),this.#n=null}getLabel(){return this.core.state.current.label?h(this.core.state.current.label):void 0}getResolvedLabel(){if(!this.#r())return;let e=this.core.getState();return g(this.core.getLabel(e),this.#e.value)}willUpdate(e){super.willUpdate(e),this.core.setProps(this)}update(e){super.update(e),this.#t&&(this.textContent=g(x.defaultText,this.#e.value));let n=this.#r();if(!n)return;this.core.setMedia(n);let r=this.core.getState(),i=this.core.getAttrs(r);o(this,{...i,"aria-label":g(i[`aria-label`],this.#e.value)}),t(this,r,w)}#r(){let e=this.live.value,t=this.time.value,n=this.buffer.value;return!e||!t||!n?null:{currentTime:t.currentTime,seek:t.seek,seekable:n.seekable,liveEdgeStart:e.liveEdgeStart,targetLiveWindow:e.targetLiveWindow}}};export{T as t};
2
- //# sourceMappingURL=live-button-element-DaHgnYdw.js.map
1
+ import{A as e,B as t,C as n,D as r,M as i,S as a,rt as o,w as s}from"./compounds-C4YYLyL2.js";import{r as c}from"./translate-text-TzSgu_oe.js";import{t as l}from"./media-element-Cp5PrNre.js";import{r as u}from"./context-C2rsoDxk.js";import{c as d,r as f}from"./container-element-Dd0ZCdhK.js";import{k as p,n as m}from"./create-player-BU8LDJDL.js";import{resolveText as h,translateText as g}from"./i18n.js";const _=`live.`,v={key:`${_}playing`,text:`Playing live`},y={key:`${_}seekToEdge`,text:`Seek to live edge`},b={key:`${_}badge`,text:`Live`};var x=class e{static defaultText=b;static defaultProps={label:``,disabled:!1};state=p({live:!1,liveEdge:!1,label:``});#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=o(t,e.defaultProps)}getLabel(e){return a(this.#e.label,e)||(e.liveEdge?v:y)}getAttrs(e){let t=this.#e.disabled||e.liveEdge;return{"aria-label":this.getLabel(e),"aria-disabled":t?`true`:void 0}}setMedia(e){this.#t=e}getState(){let e=this.#t,t=S(e),n=t&&this.#n(e);return this.state.patch({live:t,liveEdge:n}),this.state.patch({label:c(this.getLabel(this.state.current))}),this.state.current}async seekToLive(e){if(this.#e.disabled||!S(e)||this.#n(e))return;let t=C(e);t!=null&&await e.seek(t)}#n(e){let{currentTime:t,liveEdgeStart:n}=e;if(Number.isFinite(n))return t>=n-5;let r=C(e);return r!=null&&t>=r-10}};function S(e){return!Number.isNaN(e.targetLiveWindow)}function C(e){let{seekable:t}=e;if(t.length===0)return null;let n=t[t.length-1][1];return Number.isFinite(n)?n:null}const w={live:`data-live`,liveEdge:`data-live-edge`};var T=class extends l{constructor(...n){super(...n),this.disabled=!1,this.label=``,this.core=new x,this.live=new m(this,u,i),this.time=new m(this,u,t),this.buffer=new m(this,u,e),this.#e=new f(this,d),this.#t=!1,this.#n=null}static{this.tagName=`media-live-button`}static{this.properties={label:{type:String},disabled:{type:Boolean}}}#e;get $state(){return this.core.state}#t;#n;connectedCallback(){if(super.connectedCallback(),this.destroyed)return;this.#t||=!this.textContent?.trim(),this.#t&&(this.textContent=g(x.defaultText,this.#e.value)),this.#n=new AbortController;let e=r({onActivate:()=>{let e=this.#r();e&&this.core.seekToLive(e)},isDisabled:()=>this.disabled||!this.#r()});s(this,e,{signal:this.#n.signal})}disconnectedCallback(){super.disconnectedCallback(),this.#n?.abort(),this.#n=null}getLabel(){return this.core.state.current.label?h(this.core.state.current.label):void 0}getResolvedLabel(){if(!this.#r())return;let e=this.core.getState();return g(this.core.getLabel(e),this.#e.value)}willUpdate(e){super.willUpdate(e),this.core.setProps(this)}update(e){super.update(e),this.#t&&(this.textContent=g(x.defaultText,this.#e.value));let t=this.#r();if(!t)return;this.core.setMedia(t);let r=this.core.getState(),i=this.core.getAttrs(r);s(this,{...i,"aria-label":g(i[`aria-label`],this.#e.value)}),n(this,r,w)}#r(){let e=this.live.value,t=this.time.value,n=this.buffer.value;return!e||!t||!n?null:{currentTime:t.currentTime,seek:t.seek,seekable:n.seekable,liveEdgeStart:e.liveEdgeStart,targetLiveWindow:e.targetLiveWindow}}};export{T as t};
2
+ //# sourceMappingURL=live-button-element-Co8z2LkI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"live-button-element-DaHgnYdw.js","names":["#props","#media","#isAtLiveEdge","resolveText","#i18n","#defaultContent","#disconnect","#getMedia"],"sources":["../../core/dist/default/i18n/text/live.js","../../core/dist/default/core/ui/live-button/live-button-core.js","../../core/dist/default/core/ui/live-button/live-button-data-attrs.js","../src/ui/live-button/live-button-element.ts"],"sourcesContent":["//#region src/core/i18n/text/live.ts\nconst prefix = \"live.\";\nconst playingText = {\n\tkey: `${prefix}playing`,\n\ttext: \"Playing live\"\n};\nconst seekToEdgeText = {\n\tkey: `${prefix}seekToEdge`,\n\ttext: \"Seek to live edge\"\n};\nconst badgeText = {\n\tkey: `${prefix}badge`,\n\ttext: \"Live\"\n};\n//#endregion\nexport { badgeText, playingText, seekToEdgeText };\n\n//# sourceMappingURL=live.js.map","import { resolveText } from \"../../i18n/resolve-text.js\";\nimport { resolveLabel } from \"../utils/resolve-label.js\";\nimport { badgeText, playingText, seekToEdgeText } from \"../../../i18n/text/live.js\";\nimport { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/live-button/live-button-core.ts\n/**\n* Fallback offset (in seconds) from the end of the seekable window used to\n* decide \"at live edge\" when `liveEdgeStart` is unavailable.\n*/\nconst LIVE_EDGE_OFFSET = 10;\n/**\n* Grace window (in seconds) before `liveEdgeStart` that still counts as\n* \"at the live edge\". Absorbs the small gap between the player's initial\n* playback position (e.g. hls.js `liveSyncDuration`) and the manifest's\n* `HOLD-BACK`, so autoplay reliably reports live.\n*/\nconst LIVE_EDGE_TOLERANCE = 5;\n/**\n* Core state machine for a \"Live\" button. Indicates whether the player is\n* playing at the live edge and seeks to the Seekable Live Edge when activated.\n*\n* @see https://github.com/video-dev/media-ui-extensions/blob/main/proposals/0007-live-edge.md\n*/\nvar LiveButtonCore = class LiveButtonCore {\n\t/** Default visible text used when no children are provided. */\n\tstatic defaultText = badgeText;\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tlive: false,\n\t\tliveEdge: false,\n\t\tlabel: \"\"\n\t});\n\t#props = { ...LiveButtonCore.defaultProps };\n\t#media = null;\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, LiveButtonCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst label = resolveLabel(this.#props.label, state);\n\t\tif (label) return label;\n\t\tif (state.liveEdge) return playingText;\n\t\treturn seekToEdgeText;\n\t}\n\tgetAttrs(state) {\n\t\tconst inactive = this.#props.disabled || state.liveEdge;\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": inactive ? \"true\" : void 0\n\t\t};\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\tconst live = isLiveMedia(media);\n\t\tconst liveEdge = live && this.#isAtLiveEdge(media);\n\t\tthis.state.patch({\n\t\t\tlive,\n\t\t\tliveEdge\n\t\t});\n\t\tthis.state.patch({ label: resolveText(this.getLabel(this.state.current)) });\n\t\treturn this.state.current;\n\t}\n\t/** Seek to the Seekable Live Edge. No-op when not live or already at edge. */\n\tasync seekToLive(media) {\n\t\tif (this.#props.disabled) return;\n\t\tif (!isLiveMedia(media)) return;\n\t\tif (this.#isAtLiveEdge(media)) return;\n\t\tconst target = liveEdgeTarget(media);\n\t\tif (target == null) return;\n\t\tawait media.seek(target);\n\t}\n\t#isAtLiveEdge(media) {\n\t\tconst { currentTime, liveEdgeStart } = media;\n\t\tif (Number.isFinite(liveEdgeStart)) return currentTime >= liveEdgeStart - LIVE_EDGE_TOLERANCE;\n\t\tconst target = liveEdgeTarget(media);\n\t\tif (target == null) return false;\n\t\treturn currentTime >= target - LIVE_EDGE_OFFSET;\n\t}\n};\nfunction isLiveMedia(media) {\n\treturn !Number.isNaN(media.targetLiveWindow);\n}\nfunction liveEdgeTarget(media) {\n\tconst { seekable } = media;\n\tif (seekable.length === 0) return null;\n\tconst end = seekable[seekable.length - 1][1];\n\treturn Number.isFinite(end) ? end : null;\n}\n//#endregion\nexport { LiveButtonCore };\n\n//# sourceMappingURL=live-button-core.js.map","//#region src/core/ui/live-button/live-button-data-attrs.ts\nconst LiveButtonDataAttrs = {\n\t/** Present when the stream is live (or DVR). */\n\tlive: \"data-live\",\n\t/** Present when playback is at the live edge. */\n\tliveEdge: \"data-live-edge\"\n};\n//#endregion\nexport { LiveButtonDataAttrs };\n\n//# sourceMappingURL=live-button-data-attrs.js.map","import { LiveButtonCore, LiveButtonDataAttrs, type LiveButtonMediaState } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createButton,\n logMissingFeature,\n selectBuffer,\n selectLive,\n selectTime,\n} from '@videojs/core/dom';\nimport { resolveText, type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { State } from '@videojs/store';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\n/**\n * `<media-live-button>` — selects from `live`, `time`, and `buffer` features\n * and composes them into the `LiveButtonMediaState` consumed by\n * `LiveButtonCore`.\n *\n * Doesn't extend `MediaButtonElement` because that base couples a button to\n * a single feature selector; the LiveButton needs three.\n */\nexport class LiveButtonElement extends MediaElement {\n static readonly tagName = 'media-live-button';\n\n static override properties: PropertyDeclarationMap = {\n label: { type: String },\n disabled: { type: Boolean },\n };\n\n disabled = false;\n label: Text | string = '';\n\n protected readonly core = new LiveButtonCore();\n\n protected readonly live = new PlayerController(this, playerContext, selectLive);\n protected readonly time = new PlayerController(this, playerContext, selectTime);\n protected readonly buffer = new PlayerController(this, playerContext, selectBuffer);\n readonly #i18n = new I18nController(this, i18nContext);\n\n get $state(): State<LiveButtonCore.State> {\n return this.core.state;\n }\n\n #defaultContent = false;\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#defaultContent ||= !this.textContent?.trim();\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: () => {\n const media = this.#getMedia();\n if (media) this.core.seekToLive(media);\n },\n isDisabled: () => this.disabled || !this.#getMedia(),\n });\n\n applyElementProps(this, buttonProps, { signal: this.#disconnect.signal });\n\n if (__DEV__ && !this.#getMedia()) {\n logMissingFeature(this.localName, this.live.displayName ?? 'live');\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n /** Returns the button's current label derived from media state. */\n getLabel(): string | undefined {\n return this.core.state.current.label ? resolveText(this.core.state.current.label) : undefined;\n }\n\n /** Resolved label for tooltips and other display surfaces. */\n getResolvedLabel(): string | undefined {\n const media = this.#getMedia();\n if (!media) return undefined;\n const state = this.core.getState();\n return translateText(this.core.getLabel(state), this.#i18n.value);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n const media = this.#getMedia();\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n const attrs = this.core.getAttrs(state);\n applyElementProps(this, {\n ...attrs,\n 'aria-label': translateText(attrs['aria-label'], this.#i18n.value),\n });\n applyStateDataAttrs(this, state, LiveButtonDataAttrs);\n }\n\n /**\n * Compose the LiveButton media state from the three feature slices.\n * Returns `null` when any are missing so the button stays disabled until\n * all three features are registered on the player.\n */\n #getMedia(): LiveButtonMediaState | null {\n const live = this.live.value;\n const time = this.time.value;\n const buffer = this.buffer.value;\n if (!live || !time || !buffer) return null;\n return {\n currentTime: time.currentTime,\n seek: time.seek,\n seekable: buffer.seekable,\n liveEdgeStart: live.liveEdgeStart,\n targetLiveWindow: live.targetLiveWindow,\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"live-button-element-Co8z2LkI.js","names":["#props","#media","#isAtLiveEdge","resolveText","#i18n","#defaultContent","#disconnect","#getMedia"],"sources":["../../core/dist/default/i18n/text/live.js","../../core/dist/default/core/ui/live-button/live-button-core.js","../../core/dist/default/core/ui/live-button/live-button-data-attrs.js","../src/ui/live-button/live-button-element.ts"],"sourcesContent":["//#region src/core/i18n/text/live.ts\nconst prefix = \"live.\";\nconst playingText = {\n\tkey: `${prefix}playing`,\n\ttext: \"Playing live\"\n};\nconst seekToEdgeText = {\n\tkey: `${prefix}seekToEdge`,\n\ttext: \"Seek to live edge\"\n};\nconst badgeText = {\n\tkey: `${prefix}badge`,\n\ttext: \"Live\"\n};\n//#endregion\nexport { badgeText, playingText, seekToEdgeText };\n\n//# sourceMappingURL=live.js.map","import { resolveText } from \"../../i18n/resolve-text.js\";\nimport { resolveLabel } from \"../utils/resolve-label.js\";\nimport { badgeText, playingText, seekToEdgeText } from \"../../../i18n/text/live.js\";\nimport { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/live-button/live-button-core.ts\n/**\n* Fallback offset (in seconds) from the end of the seekable window used to\n* decide \"at live edge\" when `liveEdgeStart` is unavailable.\n*/\nconst LIVE_EDGE_OFFSET = 10;\n/**\n* Grace window (in seconds) before `liveEdgeStart` that still counts as\n* \"at the live edge\". Absorbs the small gap between the player's initial\n* playback position (e.g. hls.js `liveSyncDuration`) and the manifest's\n* `HOLD-BACK`, so autoplay reliably reports live.\n*/\nconst LIVE_EDGE_TOLERANCE = 5;\n/**\n* Core state machine for a \"Live\" button. Indicates whether the player is\n* playing at the live edge and seeks to the Seekable Live Edge when activated.\n*\n* @see https://github.com/video-dev/media-ui-extensions/blob/main/proposals/0007-live-edge.md\n*/\nvar LiveButtonCore = class LiveButtonCore {\n\t/** Default visible text used when no children are provided. */\n\tstatic defaultText = badgeText;\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tlive: false,\n\t\tliveEdge: false,\n\t\tlabel: \"\"\n\t});\n\t#props = { ...LiveButtonCore.defaultProps };\n\t#media = null;\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, LiveButtonCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst label = resolveLabel(this.#props.label, state);\n\t\tif (label) return label;\n\t\tif (state.liveEdge) return playingText;\n\t\treturn seekToEdgeText;\n\t}\n\tgetAttrs(state) {\n\t\tconst inactive = this.#props.disabled || state.liveEdge;\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": inactive ? \"true\" : void 0\n\t\t};\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\tconst live = isLiveMedia(media);\n\t\tconst liveEdge = live && this.#isAtLiveEdge(media);\n\t\tthis.state.patch({\n\t\t\tlive,\n\t\t\tliveEdge\n\t\t});\n\t\tthis.state.patch({ label: resolveText(this.getLabel(this.state.current)) });\n\t\treturn this.state.current;\n\t}\n\t/** Seek to the Seekable Live Edge. No-op when not live or already at edge. */\n\tasync seekToLive(media) {\n\t\tif (this.#props.disabled) return;\n\t\tif (!isLiveMedia(media)) return;\n\t\tif (this.#isAtLiveEdge(media)) return;\n\t\tconst target = liveEdgeTarget(media);\n\t\tif (target == null) return;\n\t\tawait media.seek(target);\n\t}\n\t#isAtLiveEdge(media) {\n\t\tconst { currentTime, liveEdgeStart } = media;\n\t\tif (Number.isFinite(liveEdgeStart)) return currentTime >= liveEdgeStart - LIVE_EDGE_TOLERANCE;\n\t\tconst target = liveEdgeTarget(media);\n\t\tif (target == null) return false;\n\t\treturn currentTime >= target - LIVE_EDGE_OFFSET;\n\t}\n};\nfunction isLiveMedia(media) {\n\treturn !Number.isNaN(media.targetLiveWindow);\n}\nfunction liveEdgeTarget(media) {\n\tconst { seekable } = media;\n\tif (seekable.length === 0) return null;\n\tconst end = seekable[seekable.length - 1][1];\n\treturn Number.isFinite(end) ? end : null;\n}\n//#endregion\nexport { LiveButtonCore };\n\n//# sourceMappingURL=live-button-core.js.map","//#region src/core/ui/live-button/live-button-data-attrs.ts\nconst LiveButtonDataAttrs = {\n\t/** Present when the stream is live (or DVR). */\n\tlive: \"data-live\",\n\t/** Present when playback is at the live edge. */\n\tliveEdge: \"data-live-edge\"\n};\n//#endregion\nexport { LiveButtonDataAttrs };\n\n//# sourceMappingURL=live-button-data-attrs.js.map","import { LiveButtonCore, LiveButtonDataAttrs, type LiveButtonMediaState } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createButton,\n logMissingFeature,\n selectBuffer,\n selectLive,\n selectTime,\n} from '@videojs/core/dom';\nimport { resolveText, type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { State } from '@videojs/store';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\n/**\n * `<media-live-button>` — selects from `live`, `time`, and `buffer` features\n * and composes them into the `LiveButtonMediaState` consumed by\n * `LiveButtonCore`.\n *\n * Doesn't extend `MediaButtonElement` because that base couples a button to\n * a single feature selector; the LiveButton needs three.\n */\nexport class LiveButtonElement extends MediaElement {\n static readonly tagName = 'media-live-button';\n\n static override properties: PropertyDeclarationMap = {\n label: { type: String },\n disabled: { type: Boolean },\n };\n\n disabled = false;\n label: Text | string = '';\n\n protected readonly core = new LiveButtonCore();\n\n protected readonly live = new PlayerController(this, playerContext, selectLive);\n protected readonly time = new PlayerController(this, playerContext, selectTime);\n protected readonly buffer = new PlayerController(this, playerContext, selectBuffer);\n readonly #i18n = new I18nController(this, i18nContext);\n\n get $state(): State<LiveButtonCore.State> {\n return this.core.state;\n }\n\n #defaultContent = false;\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#defaultContent ||= !this.textContent?.trim();\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: () => {\n const media = this.#getMedia();\n if (media) this.core.seekToLive(media);\n },\n isDisabled: () => this.disabled || !this.#getMedia(),\n });\n\n applyElementProps(this, buttonProps, { signal: this.#disconnect.signal });\n\n if (__DEV__ && !this.#getMedia()) {\n logMissingFeature(this.localName, this.live.displayName ?? 'live');\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n /** Returns the button's current label derived from media state. */\n getLabel(): string | undefined {\n return this.core.state.current.label ? resolveText(this.core.state.current.label) : undefined;\n }\n\n /** Resolved label for tooltips and other display surfaces. */\n getResolvedLabel(): string | undefined {\n const media = this.#getMedia();\n if (!media) return undefined;\n const state = this.core.getState();\n return translateText(this.core.getLabel(state), this.#i18n.value);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n const media = this.#getMedia();\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n const attrs = this.core.getAttrs(state);\n applyElementProps(this, {\n ...attrs,\n 'aria-label': translateText(attrs['aria-label'], this.#i18n.value),\n });\n applyStateDataAttrs(this, state, LiveButtonDataAttrs);\n }\n\n /**\n * Compose the LiveButton media state from the three feature slices.\n * Returns `null` when any are missing so the button stays disabled until\n * all three features are registered on the player.\n */\n #getMedia(): LiveButtonMediaState | null {\n const live = this.live.value;\n const time = this.time.value;\n const buffer = this.buffer.value;\n if (!live || !time || !buffer) return null;\n return {\n currentTime: time.currentTime,\n seek: time.seek,\n seekable: buffer.seekable,\n liveEdgeStart: live.liveEdgeStart,\n targetLiveWindow: live.targetLiveWindow,\n };\n }\n}\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { B as selectTime, C as applyStateDataAttrs, N as selectLive, O as createButton, S as resolveLabel, T as applyElementProps, j as selectBuffer, rt as defaults, w as logMissingFeature } from "./compounds-nk9RJtBK.js";
2
- import { k as createState, n as PlayerController } from "./create-player-DK9WOywd.js";
1
+ import { C as applyStateDataAttrs, N as selectLive, O as createButton, S as resolveLabel, T as applyElementProps, V as selectTime, it as defaults, j as selectBuffer, w as logMissingFeature } from "./compounds-C73u1MeO.js";
3
2
  import { r as resolveText$1 } from "./translate-text-BWvoW5-r.js";
4
3
  import { t as MediaElement } from "./media-element-CJY3JIgc.js";
5
4
  import { r as playerContext } from "./context-OhQY847V.js";
6
5
  import { c as i18nContext, r as I18nController } from "./container-element-HHK_KZOE.js";
6
+ import { k as createState, n as PlayerController } from "./create-player-Db1CIvlK.js";
7
7
  import { resolveText, translateText } from "./i18n.dev.js";
8
8
 
9
9
  //#region ../core/dist/dev/i18n/text/live.js
@@ -233,4 +233,4 @@ var LiveButtonElement = class extends MediaElement {
233
233
 
234
234
  //#endregion
235
235
  export { LiveButtonElement as t };
236
- //# sourceMappingURL=live-button-element-Bae44kBN.js.map
236
+ //# sourceMappingURL=live-button-element-zE-8uoR2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"live-button-element-Bae44kBN.js","names":["#props","#media","#isAtLiveEdge","resolveText","#i18n","#defaultContent","#disconnect","#getMedia"],"sources":["../../core/dist/dev/i18n/text/live.js","../../core/dist/dev/core/ui/live-button/live-button-core.js","../../core/dist/dev/core/ui/live-button/live-button-data-attrs.js","../src/ui/live-button/live-button-element.ts"],"sourcesContent":["//#region src/core/i18n/text/live.ts\nconst prefix = \"live.\";\nconst playingText = {\n\tkey: `${prefix}playing`,\n\ttext: \"Playing live\"\n};\nconst seekToEdgeText = {\n\tkey: `${prefix}seekToEdge`,\n\ttext: \"Seek to live edge\"\n};\nconst badgeText = {\n\tkey: `${prefix}badge`,\n\ttext: \"Live\"\n};\n//#endregion\nexport { badgeText, playingText, seekToEdgeText };\n\n//# sourceMappingURL=live.js.map","import { resolveText } from \"../../i18n/resolve-text.js\";\nimport { resolveLabel } from \"../utils/resolve-label.js\";\nimport { badgeText, playingText, seekToEdgeText } from \"../../../i18n/text/live.js\";\nimport { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/live-button/live-button-core.ts\n/**\n* Fallback offset (in seconds) from the end of the seekable window used to\n* decide \"at live edge\" when `liveEdgeStart` is unavailable.\n*/\nconst LIVE_EDGE_OFFSET = 10;\n/**\n* Grace window (in seconds) before `liveEdgeStart` that still counts as\n* \"at the live edge\". Absorbs the small gap between the player's initial\n* playback position (e.g. hls.js `liveSyncDuration`) and the manifest's\n* `HOLD-BACK`, so autoplay reliably reports live.\n*/\nconst LIVE_EDGE_TOLERANCE = 5;\n/**\n* Core state machine for a \"Live\" button. Indicates whether the player is\n* playing at the live edge and seeks to the Seekable Live Edge when activated.\n*\n* @see https://github.com/video-dev/media-ui-extensions/blob/main/proposals/0007-live-edge.md\n*/\nvar LiveButtonCore = class LiveButtonCore {\n\t/** Default visible text used when no children are provided. */\n\tstatic defaultText = badgeText;\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tlive: false,\n\t\tliveEdge: false,\n\t\tlabel: \"\"\n\t});\n\t#props = { ...LiveButtonCore.defaultProps };\n\t#media = null;\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, LiveButtonCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst label = resolveLabel(this.#props.label, state);\n\t\tif (label) return label;\n\t\tif (state.liveEdge) return playingText;\n\t\treturn seekToEdgeText;\n\t}\n\tgetAttrs(state) {\n\t\tconst inactive = this.#props.disabled || state.liveEdge;\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": inactive ? \"true\" : void 0\n\t\t};\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\tconst live = isLiveMedia(media);\n\t\tconst liveEdge = live && this.#isAtLiveEdge(media);\n\t\tthis.state.patch({\n\t\t\tlive,\n\t\t\tliveEdge\n\t\t});\n\t\tthis.state.patch({ label: resolveText(this.getLabel(this.state.current)) });\n\t\treturn this.state.current;\n\t}\n\t/** Seek to the Seekable Live Edge. No-op when not live or already at edge. */\n\tasync seekToLive(media) {\n\t\tif (this.#props.disabled) return;\n\t\tif (!isLiveMedia(media)) return;\n\t\tif (this.#isAtLiveEdge(media)) return;\n\t\tconst target = liveEdgeTarget(media);\n\t\tif (target == null) return;\n\t\tawait media.seek(target);\n\t}\n\t#isAtLiveEdge(media) {\n\t\tconst { currentTime, liveEdgeStart } = media;\n\t\tif (Number.isFinite(liveEdgeStart)) return currentTime >= liveEdgeStart - LIVE_EDGE_TOLERANCE;\n\t\tconst target = liveEdgeTarget(media);\n\t\tif (target == null) return false;\n\t\treturn currentTime >= target - LIVE_EDGE_OFFSET;\n\t}\n};\nfunction isLiveMedia(media) {\n\treturn !Number.isNaN(media.targetLiveWindow);\n}\nfunction liveEdgeTarget(media) {\n\tconst { seekable } = media;\n\tif (seekable.length === 0) return null;\n\tconst end = seekable[seekable.length - 1][1];\n\treturn Number.isFinite(end) ? end : null;\n}\n//#endregion\nexport { LiveButtonCore };\n\n//# sourceMappingURL=live-button-core.js.map","//#region src/core/ui/live-button/live-button-data-attrs.ts\nconst LiveButtonDataAttrs = {\n\t/** Present when the stream is live (or DVR). */\n\tlive: \"data-live\",\n\t/** Present when playback is at the live edge. */\n\tliveEdge: \"data-live-edge\"\n};\n//#endregion\nexport { LiveButtonDataAttrs };\n\n//# sourceMappingURL=live-button-data-attrs.js.map","import { LiveButtonCore, LiveButtonDataAttrs, type LiveButtonMediaState } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createButton,\n logMissingFeature,\n selectBuffer,\n selectLive,\n selectTime,\n} from '@videojs/core/dom';\nimport { resolveText, type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { State } from '@videojs/store';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\n/**\n * `<media-live-button>` — selects from `live`, `time`, and `buffer` features\n * and composes them into the `LiveButtonMediaState` consumed by\n * `LiveButtonCore`.\n *\n * Doesn't extend `MediaButtonElement` because that base couples a button to\n * a single feature selector; the LiveButton needs three.\n */\nexport class LiveButtonElement extends MediaElement {\n static readonly tagName = 'media-live-button';\n\n static override properties: PropertyDeclarationMap = {\n label: { type: String },\n disabled: { type: Boolean },\n };\n\n disabled = false;\n label: Text | string = '';\n\n protected readonly core = new LiveButtonCore();\n\n protected readonly live = new PlayerController(this, playerContext, selectLive);\n protected readonly time = new PlayerController(this, playerContext, selectTime);\n protected readonly buffer = new PlayerController(this, playerContext, selectBuffer);\n readonly #i18n = new I18nController(this, i18nContext);\n\n get $state(): State<LiveButtonCore.State> {\n return this.core.state;\n }\n\n #defaultContent = false;\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#defaultContent ||= !this.textContent?.trim();\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: () => {\n const media = this.#getMedia();\n if (media) this.core.seekToLive(media);\n },\n isDisabled: () => this.disabled || !this.#getMedia(),\n });\n\n applyElementProps(this, buttonProps, { signal: this.#disconnect.signal });\n\n if (__DEV__ && !this.#getMedia()) {\n logMissingFeature(this.localName, this.live.displayName ?? 'live');\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n /** Returns the button's current label derived from media state. */\n getLabel(): string | undefined {\n return this.core.state.current.label ? resolveText(this.core.state.current.label) : undefined;\n }\n\n /** Resolved label for tooltips and other display surfaces. */\n getResolvedLabel(): string | undefined {\n const media = this.#getMedia();\n if (!media) return undefined;\n const state = this.core.getState();\n return translateText(this.core.getLabel(state), this.#i18n.value);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n const media = this.#getMedia();\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n const attrs = this.core.getAttrs(state);\n applyElementProps(this, {\n ...attrs,\n 'aria-label': translateText(attrs['aria-label'], this.#i18n.value),\n });\n applyStateDataAttrs(this, state, LiveButtonDataAttrs);\n }\n\n /**\n * Compose the LiveButton media state from the three feature slices.\n * Returns `null` when any are missing so the button stays disabled until\n * all three features are registered on the player.\n */\n #getMedia(): LiveButtonMediaState | null {\n const live = this.live.value;\n const time = this.time.value;\n const buffer = this.buffer.value;\n if (!live || !time || !buffer) return null;\n return {\n currentTime: time.currentTime,\n seek: time.seek,\n seekable: buffer.seekable,\n liveEdgeStart: live.liveEdgeStart,\n targetLiveWindow: live.targetLiveWindow,\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"live-button-element-zE-8uoR2.js","names":["#props","#media","#isAtLiveEdge","resolveText","#i18n","#defaultContent","#disconnect","#getMedia"],"sources":["../../core/dist/dev/i18n/text/live.js","../../core/dist/dev/core/ui/live-button/live-button-core.js","../../core/dist/dev/core/ui/live-button/live-button-data-attrs.js","../src/ui/live-button/live-button-element.ts"],"sourcesContent":["//#region src/core/i18n/text/live.ts\nconst prefix = \"live.\";\nconst playingText = {\n\tkey: `${prefix}playing`,\n\ttext: \"Playing live\"\n};\nconst seekToEdgeText = {\n\tkey: `${prefix}seekToEdge`,\n\ttext: \"Seek to live edge\"\n};\nconst badgeText = {\n\tkey: `${prefix}badge`,\n\ttext: \"Live\"\n};\n//#endregion\nexport { badgeText, playingText, seekToEdgeText };\n\n//# sourceMappingURL=live.js.map","import { resolveText } from \"../../i18n/resolve-text.js\";\nimport { resolveLabel } from \"../utils/resolve-label.js\";\nimport { badgeText, playingText, seekToEdgeText } from \"../../../i18n/text/live.js\";\nimport { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/live-button/live-button-core.ts\n/**\n* Fallback offset (in seconds) from the end of the seekable window used to\n* decide \"at live edge\" when `liveEdgeStart` is unavailable.\n*/\nconst LIVE_EDGE_OFFSET = 10;\n/**\n* Grace window (in seconds) before `liveEdgeStart` that still counts as\n* \"at the live edge\". Absorbs the small gap between the player's initial\n* playback position (e.g. hls.js `liveSyncDuration`) and the manifest's\n* `HOLD-BACK`, so autoplay reliably reports live.\n*/\nconst LIVE_EDGE_TOLERANCE = 5;\n/**\n* Core state machine for a \"Live\" button. Indicates whether the player is\n* playing at the live edge and seeks to the Seekable Live Edge when activated.\n*\n* @see https://github.com/video-dev/media-ui-extensions/blob/main/proposals/0007-live-edge.md\n*/\nvar LiveButtonCore = class LiveButtonCore {\n\t/** Default visible text used when no children are provided. */\n\tstatic defaultText = badgeText;\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tlive: false,\n\t\tliveEdge: false,\n\t\tlabel: \"\"\n\t});\n\t#props = { ...LiveButtonCore.defaultProps };\n\t#media = null;\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, LiveButtonCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst label = resolveLabel(this.#props.label, state);\n\t\tif (label) return label;\n\t\tif (state.liveEdge) return playingText;\n\t\treturn seekToEdgeText;\n\t}\n\tgetAttrs(state) {\n\t\tconst inactive = this.#props.disabled || state.liveEdge;\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": inactive ? \"true\" : void 0\n\t\t};\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\tconst live = isLiveMedia(media);\n\t\tconst liveEdge = live && this.#isAtLiveEdge(media);\n\t\tthis.state.patch({\n\t\t\tlive,\n\t\t\tliveEdge\n\t\t});\n\t\tthis.state.patch({ label: resolveText(this.getLabel(this.state.current)) });\n\t\treturn this.state.current;\n\t}\n\t/** Seek to the Seekable Live Edge. No-op when not live or already at edge. */\n\tasync seekToLive(media) {\n\t\tif (this.#props.disabled) return;\n\t\tif (!isLiveMedia(media)) return;\n\t\tif (this.#isAtLiveEdge(media)) return;\n\t\tconst target = liveEdgeTarget(media);\n\t\tif (target == null) return;\n\t\tawait media.seek(target);\n\t}\n\t#isAtLiveEdge(media) {\n\t\tconst { currentTime, liveEdgeStart } = media;\n\t\tif (Number.isFinite(liveEdgeStart)) return currentTime >= liveEdgeStart - LIVE_EDGE_TOLERANCE;\n\t\tconst target = liveEdgeTarget(media);\n\t\tif (target == null) return false;\n\t\treturn currentTime >= target - LIVE_EDGE_OFFSET;\n\t}\n};\nfunction isLiveMedia(media) {\n\treturn !Number.isNaN(media.targetLiveWindow);\n}\nfunction liveEdgeTarget(media) {\n\tconst { seekable } = media;\n\tif (seekable.length === 0) return null;\n\tconst end = seekable[seekable.length - 1][1];\n\treturn Number.isFinite(end) ? end : null;\n}\n//#endregion\nexport { LiveButtonCore };\n\n//# sourceMappingURL=live-button-core.js.map","//#region src/core/ui/live-button/live-button-data-attrs.ts\nconst LiveButtonDataAttrs = {\n\t/** Present when the stream is live (or DVR). */\n\tlive: \"data-live\",\n\t/** Present when playback is at the live edge. */\n\tliveEdge: \"data-live-edge\"\n};\n//#endregion\nexport { LiveButtonDataAttrs };\n\n//# sourceMappingURL=live-button-data-attrs.js.map","import { LiveButtonCore, LiveButtonDataAttrs, type LiveButtonMediaState } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createButton,\n logMissingFeature,\n selectBuffer,\n selectLive,\n selectTime,\n} from '@videojs/core/dom';\nimport { resolveText, type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { State } from '@videojs/store';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\n/**\n * `<media-live-button>` — selects from `live`, `time`, and `buffer` features\n * and composes them into the `LiveButtonMediaState` consumed by\n * `LiveButtonCore`.\n *\n * Doesn't extend `MediaButtonElement` because that base couples a button to\n * a single feature selector; the LiveButton needs three.\n */\nexport class LiveButtonElement extends MediaElement {\n static readonly tagName = 'media-live-button';\n\n static override properties: PropertyDeclarationMap = {\n label: { type: String },\n disabled: { type: Boolean },\n };\n\n disabled = false;\n label: Text | string = '';\n\n protected readonly core = new LiveButtonCore();\n\n protected readonly live = new PlayerController(this, playerContext, selectLive);\n protected readonly time = new PlayerController(this, playerContext, selectTime);\n protected readonly buffer = new PlayerController(this, playerContext, selectBuffer);\n readonly #i18n = new I18nController(this, i18nContext);\n\n get $state(): State<LiveButtonCore.State> {\n return this.core.state;\n }\n\n #defaultContent = false;\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#defaultContent ||= !this.textContent?.trim();\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: () => {\n const media = this.#getMedia();\n if (media) this.core.seekToLive(media);\n },\n isDisabled: () => this.disabled || !this.#getMedia(),\n });\n\n applyElementProps(this, buttonProps, { signal: this.#disconnect.signal });\n\n if (__DEV__ && !this.#getMedia()) {\n logMissingFeature(this.localName, this.live.displayName ?? 'live');\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n /** Returns the button's current label derived from media state. */\n getLabel(): string | undefined {\n return this.core.state.current.label ? resolveText(this.core.state.current.label) : undefined;\n }\n\n /** Resolved label for tooltips and other display surfaces. */\n getResolvedLabel(): string | undefined {\n const media = this.#getMedia();\n if (!media) return undefined;\n const state = this.core.getState();\n return translateText(this.core.getLabel(state), this.#i18n.value);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n const media = this.#getMedia();\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n const attrs = this.core.getAttrs(state);\n applyElementProps(this, {\n ...attrs,\n 'aria-label': translateText(attrs['aria-label'], this.#i18n.value),\n });\n applyStateDataAttrs(this, state, LiveButtonDataAttrs);\n }\n\n /**\n * Compose the LiveButton media state from the three feature slices.\n * Returns `null` when any are missing so the button stays disabled until\n * all three features are registered on the player.\n */\n #getMedia(): LiveButtonMediaState | null {\n const live = this.live.value;\n const time = this.time.value;\n const buffer = this.buffer.value;\n if (!live || !time || !buffer) return null;\n return {\n currentTime: time.currentTime,\n seek: time.seek,\n seekable: buffer.seekable,\n liveEdgeStart: live.liveEdgeStart,\n targetLiveWindow: live.targetLiveWindow,\n };\n }\n}\n"],"mappings":"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"}