@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.
- package/cdn/{adapter-XTen-YVQ.js → adapter-CEnNWvii.js} +17 -4
- package/cdn/adapter-CEnNWvii.js.map +1 -0
- package/cdn/adapter-DaKW8NzI.js +2 -0
- package/cdn/adapter-DaKW8NzI.js.map +1 -0
- package/cdn/audio-headless.dev.js +1 -1
- package/cdn/audio-headless.js +1 -1
- package/cdn/audio-minimal-ui.dev.js +2 -2
- package/cdn/audio-minimal-ui.js +1 -1
- package/cdn/audio-minimal.dev.js +5 -5
- package/cdn/audio-minimal.dev.js.map +1 -1
- package/cdn/audio-minimal.js +1 -1
- package/cdn/audio-minimal.js.map +1 -1
- package/cdn/audio-ui.dev.js +2 -2
- package/cdn/audio-ui.js +1 -1
- package/cdn/audio.dev.js +5 -5
- package/cdn/audio.dev.js.map +1 -1
- package/cdn/audio.js +1 -1
- package/cdn/audio.js.map +1 -1
- package/cdn/background.dev.js +1 -1
- package/cdn/background.js +1 -1
- package/cdn/background.js.map +1 -1
- package/cdn/compounds-C4YYLyL2.js +8 -0
- package/cdn/compounds-C4YYLyL2.js.map +1 -0
- package/cdn/{compounds-nk9RJtBK.js → compounds-C73u1MeO.js} +63 -59
- package/cdn/compounds-C73u1MeO.js.map +1 -0
- package/cdn/create-player-BU8LDJDL.js +2 -0
- package/cdn/create-player-BU8LDJDL.js.map +1 -0
- package/cdn/{create-player-DK9WOywd.js → create-player-Db1CIvlK.js} +58 -46
- package/cdn/create-player-Db1CIvlK.js.map +1 -0
- package/cdn/{default-BqQDVloS.js → default-A3aM0skz.js} +2 -2
- package/cdn/default-A3aM0skz.js.map +1 -0
- package/cdn/default-BDyhiTCm.js +2 -0
- package/cdn/default-BDyhiTCm.js.map +1 -0
- package/cdn/{default-I2LasfxC.js → default-C1_k1NeB.js} +2 -2
- package/cdn/default-C1_k1NeB.js.map +1 -0
- package/cdn/default-DHrMd4ie.js +2 -0
- package/cdn/default-DHrMd4ie.js.map +1 -0
- package/cdn/error-surface-BID4D3DW.js +59 -0
- package/cdn/error-surface-BID4D3DW.js.map +1 -0
- package/cdn/{select-tracks-nRPBa1NC.js → error-surface-D0bo71gD.js} +442 -48
- package/cdn/error-surface-D0bo71gD.js.map +1 -0
- package/cdn/gesture-element-CeRy1IVs.js +2 -0
- package/cdn/gesture-element-CeRy1IVs.js.map +1 -0
- package/cdn/{gesture-element-6Ld1YwIL.js → gesture-element-DB67OYCE.js} +3 -3
- package/cdn/gesture-element-DB67OYCE.js.map +1 -0
- package/cdn/{hls-js-C4P_b2tT.js → hls-js-CiE4wOrG.js} +2 -2
- package/cdn/{hls-js-C4P_b2tT.js.map → hls-js-CiE4wOrG.js.map} +1 -1
- package/cdn/{hls-js-CATW7NBm.js → hls-js-DBKRCbQm.js} +2 -2
- package/cdn/{hls-js-CATW7NBm.js.map → hls-js-DBKRCbQm.js.map} +1 -1
- package/cdn/{hls-js-BEuVm0u9.js → hls-js-DX2NGCAr.js} +2 -2
- package/cdn/{hls-js-BEuVm0u9.js.map → hls-js-DX2NGCAr.js.map} +1 -1
- package/cdn/{hls-js-WCNy9MVh.js → hls-js-JeH8yvsP.js} +2 -2
- package/cdn/{hls-js-WCNy9MVh.js.map → hls-js-JeH8yvsP.js.map} +1 -1
- package/cdn/i18n-CpBDXf6M.js +2 -0
- package/cdn/{i18n-Dc7WM2xd.js.map → i18n-CpBDXf6M.js.map} +1 -1
- package/cdn/{i18n-Ch4t6EjV.js → i18n-D0nhPa0m.js} +2 -2
- package/cdn/{i18n-Ch4t6EjV.js.map → i18n-D0nhPa0m.js.map} +1 -1
- package/cdn/{live-button-element-DaHgnYdw.js → live-button-element-Co8z2LkI.js} +2 -2
- package/cdn/{live-button-element-DaHgnYdw.js.map → live-button-element-Co8z2LkI.js.map} +1 -1
- package/cdn/{live-button-element-Bae44kBN.js → live-button-element-zE-8uoR2.js} +3 -3
- package/cdn/{live-button-element-Bae44kBN.js.map → live-button-element-zE-8uoR2.js.map} +1 -1
- package/cdn/live-video-minimal.dev.js +11 -9
- package/cdn/live-video-minimal.dev.js.map +1 -1
- package/cdn/live-video-minimal.js +1 -1
- package/cdn/live-video-minimal.js.map +1 -1
- package/cdn/live-video.dev.js +12 -10
- package/cdn/live-video.dev.js.map +1 -1
- package/cdn/live-video.js +1 -1
- package/cdn/live-video.js.map +1 -1
- package/cdn/media/hls-audio.dev.js +1 -1
- package/cdn/media/hls-audio.js +1 -1
- package/cdn/media/hls-background-video.dev.js +1 -1
- package/cdn/media/hls-background-video.js +1 -1
- package/cdn/media/hls-video.dev.js +1 -1
- package/cdn/media/hls-video.js +1 -1
- package/cdn/media/mux-audio/hls-js.dev.js +1 -1
- package/cdn/media/mux-audio/hls-js.js +1 -1
- package/cdn/media/mux-audio/spf.dev.js +2 -2
- package/cdn/media/mux-audio/spf.js +1 -1
- package/cdn/media/mux-audio.dev.js +1 -1
- package/cdn/media/mux-audio.js +1 -1
- package/cdn/media/mux-background-video.dev.js +1 -1
- package/cdn/media/mux-background-video.js +1 -1
- package/cdn/media/mux-data.dev.js +1 -1
- package/cdn/media/mux-data.dev.js.map +1 -1
- package/cdn/media/mux-data.js +1 -1
- package/cdn/media/mux-data.js.map +1 -1
- package/cdn/media/mux-video/hls-js.dev.js +1 -1
- package/cdn/media/mux-video/hls-js.js +1 -1
- package/cdn/media/mux-video/spf.dev.js +2 -2
- package/cdn/media/mux-video/spf.js +1 -1
- package/cdn/media/mux-video.dev.js +1 -1
- package/cdn/media/mux-video.js +1 -1
- package/cdn/media/vimeo-video.dev.js +27 -5
- package/cdn/media/vimeo-video.dev.js.map +1 -1
- package/cdn/media/vimeo-video.js +1 -1
- package/cdn/media/vimeo-video.js.map +1 -1
- package/cdn/{media-Uxm0d3Vx.js → media-BI8caj07.js} +3 -3
- package/cdn/{media-Uxm0d3Vx.js.map → media-BI8caj07.js.map} +1 -1
- package/cdn/{media-COIe3uI5.js → media-BNuI0Im7.js} +19 -6
- package/cdn/media-BNuI0Im7.js.map +1 -0
- package/cdn/media-CQxFuDcv.js +2 -0
- package/cdn/{media-CPVSKLdk.js.map → media-CQxFuDcv.js.map} +1 -1
- package/cdn/media-D4tG62L5.js +2 -0
- package/cdn/{media-BTipOcKo.js.map → media-D4tG62L5.js.map} +1 -1
- package/cdn/{media-oa3nyL2o.js → media-DI6DvYm3.js} +3 -3
- package/cdn/{media-oa3nyL2o.js.map → media-DI6DvYm3.js.map} +1 -1
- package/cdn/media-DU3Xf5XR.js +2 -0
- package/cdn/media-DU3Xf5XR.js.map +1 -0
- package/cdn/media-mYKOAsk3.js +825 -0
- package/cdn/media-mYKOAsk3.js.map +1 -0
- package/cdn/media-zReLnePj.js +2 -0
- package/cdn/media-zReLnePj.js.map +1 -0
- package/cdn/{minimal-DQCLKRyR.js → minimal-3OmH0xQS.js} +2 -2
- package/cdn/minimal-3OmH0xQS.js.map +1 -0
- package/cdn/{minimal-DLosvq31.js → minimal-6w_Vyyl9.js} +2 -2
- package/cdn/minimal-6w_Vyyl9.js.map +1 -0
- package/cdn/minimal-BWLTn7oQ.js +2 -0
- package/cdn/minimal-BWLTn7oQ.js.map +1 -0
- package/cdn/minimal-DIGrklyh.js +2 -0
- package/cdn/minimal-DIGrklyh.js.map +1 -0
- package/cdn/{minimal-ui-CRKvUmB8.js → minimal-ui-BCIESK8f.js} +8 -8
- package/cdn/{minimal-ui-CRKvUmB8.js.map → minimal-ui-BCIESK8f.js.map} +1 -1
- package/cdn/minimal-ui-BXrq3z4U.js +2 -0
- package/cdn/{minimal-ui-Et2Wcn7r.js.map → minimal-ui-BXrq3z4U.js.map} +1 -1
- package/cdn/{minimal-ui-BpHxIo4z.js → minimal-ui-DEalpMk6.js} +4 -4
- package/cdn/{minimal-ui-BpHxIo4z.js.map → minimal-ui-DEalpMk6.js.map} +1 -1
- package/cdn/{minimal-ui-8iRZf_72.js → minimal-ui-vY3QgohH.js} +2 -2
- package/cdn/{minimal-ui-8iRZf_72.js.map → minimal-ui-vY3QgohH.js.map} +1 -1
- package/cdn/{player-DM9rUXg-.js → player-B3GlPF90.js} +2 -2
- package/cdn/{player-DM9rUXg-.js.map → player-B3GlPF90.js.map} +1 -1
- package/cdn/player-CtTC7qa5.js +2 -0
- package/cdn/{player-rCFqzWrA.js.map → player-CtTC7qa5.js.map} +1 -1
- package/cdn/player-DKkph8UM.js +2 -0
- package/cdn/{player-BRQLp5bX.js.map → player-DKkph8UM.js.map} +1 -1
- package/cdn/{player-CKTAtwit.js → player-DPDmTRvg.js} +2 -2
- package/cdn/{player-CKTAtwit.js.map → player-DPDmTRvg.js.map} +1 -1
- package/cdn/player-DrDd7LJi.js +2 -0
- package/cdn/{player-BloX4l6F.js.map → player-DrDd7LJi.js.map} +1 -1
- package/cdn/{player-B2oraRyD.js → player-L5UpZmT4.js} +2 -2
- package/cdn/{player-B2oraRyD.js.map → player-L5UpZmT4.js.map} +1 -1
- package/cdn/{poster-element-BGr1VQJB.js → poster-element-B5tdJ2ub.js} +179 -38
- package/cdn/poster-element-B5tdJ2ub.js.map +1 -0
- package/cdn/poster-element-B8QwXSU_.js +2 -0
- package/cdn/poster-element-B8QwXSU_.js.map +1 -0
- package/cdn/{error-surface-drmCvBVW.js → relocation-pipelines-Dh8CcgHw.js} +5 -343
- package/cdn/relocation-pipelines-Dh8CcgHw.js.map +1 -0
- package/cdn/relocation-pipelines-DunE4gcV.js +2 -0
- package/cdn/relocation-pipelines-DunE4gcV.js.map +1 -0
- package/cdn/{seek-button-element-XMTLIxZj.js → seek-button-element-5co-k0Dx.js} +4 -4
- package/cdn/seek-button-element-5co-k0Dx.js.map +1 -0
- package/cdn/{seek-button-element-FlgBVoGM.js → seek-button-element-B8TkILg-.js} +2 -2
- package/cdn/{seek-button-element-FlgBVoGM.js.map → seek-button-element-B8TkILg-.js.map} +1 -1
- package/cdn/shallow-equal-C7S8rj2f.js +16 -0
- package/cdn/shallow-equal-C7S8rj2f.js.map +1 -0
- package/cdn/shallow-equal-KV1zFqZi.js +2 -0
- package/cdn/shallow-equal-KV1zFqZi.js.map +1 -0
- package/cdn/{skin-element-DL-Kqa5f.js → skin-element-DrkI8xuM.js} +2 -2
- package/cdn/{skin-element-DL-Kqa5f.js.map → skin-element-DrkI8xuM.js.map} +1 -1
- package/cdn/{skin-element-DNytI-uu.js → skin-element-DvX6Bxsv.js} +2 -2
- package/cdn/{skin-element-DNytI-uu.js.map → skin-element-DvX6Bxsv.js.map} +1 -1
- package/cdn/{text-element-DeWBNKXb.js → text-element-BoY6AhMn.js} +2 -2
- package/cdn/{text-element-DeWBNKXb.js.map → text-element-BoY6AhMn.js.map} +1 -1
- package/cdn/{text-element-D88ArbZz.js → text-element-cg6l21cd.js} +2 -2
- package/cdn/{text-element-D88ArbZz.js.map → text-element-cg6l21cd.js.map} +1 -1
- package/cdn/time-slider-chapters-element-BfLjdnU4.js +2 -0
- package/cdn/time-slider-chapters-element-BfLjdnU4.js.map +1 -0
- package/cdn/{time-slider-chapters-element-DJ0abZXI.js → time-slider-chapters-element-CznFQWFm.js} +5 -5
- package/cdn/time-slider-chapters-element-CznFQWFm.js.map +1 -0
- package/cdn/{ui-BU3_2gDQ.js → ui-BwzqkJNK.js} +7 -7
- package/cdn/{ui-BU3_2gDQ.js.map → ui-BwzqkJNK.js.map} +1 -1
- package/cdn/ui-DayfItun.js +2 -0
- package/cdn/{ui-C0isALTQ.js.map → ui-DayfItun.js.map} +1 -1
- package/cdn/ui-PSnD-pv8.js +2 -0
- package/cdn/{ui-DVpkE1MN.js.map → ui-PSnD-pv8.js.map} +1 -1
- package/cdn/{ui-BsaWWE4y.js → ui-fnKp94a7.js} +9 -9
- package/cdn/{ui-BsaWWE4y.js.map → ui-fnKp94a7.js.map} +1 -1
- package/cdn/video-headless.dev.js +1 -1
- package/cdn/video-headless.js +1 -1
- package/cdn/video-minimal-ui.dev.js +2 -2
- package/cdn/video-minimal-ui.js +1 -1
- package/cdn/video-minimal.dev.js +8 -6
- package/cdn/video-minimal.dev.js.map +1 -1
- package/cdn/video-minimal.js +1 -1
- package/cdn/video-minimal.js.map +1 -1
- package/cdn/video-ui.dev.js +2 -2
- package/cdn/video-ui.js +1 -1
- package/cdn/video.dev.js +9 -7
- package/cdn/video.dev.js.map +1 -1
- package/cdn/video.js +1 -1
- package/cdn/video.js.map +1 -1
- package/dist/default/__generated__/skins/default-video/styles/buttons.css +132 -18
- package/dist/default/__generated__/skins/default-video/styles/captions.css +22 -0
- package/dist/default/__generated__/skins/default-video/styles/container.css +121 -8
- package/dist/default/__generated__/skins/default-video/styles/controls.css +436 -21
- package/dist/default/__generated__/skins/default-video/styles/dialog.css +169 -0
- package/dist/default/__generated__/skins/default-video/styles/indicator.css +459 -0
- package/dist/default/__generated__/skins/default-video/styles/menus.css +254 -0
- package/dist/default/__generated__/skins/default-video/styles/overlays.css +26 -2
- package/dist/default/__generated__/skins/default-video/styles/popups.css +338 -12
- package/dist/default/__generated__/skins/default-video/styles/poster.css +4 -4
- package/dist/default/__generated__/skins/default-video/styles/sliders.css +355 -31
- package/dist/default/__generated__/skins/default-video/styles/styles.css +2455 -216
- package/dist/default/__generated__/skins/default-video/styles/theme.css +4 -19
- package/dist/default/__generated__/skins/default-video/styles/video.css +29 -0
- package/dist/default/__generated__/skins/minimal-video/styles/base.css +25 -0
- package/dist/default/__generated__/skins/minimal-video/styles/buttons.css +266 -0
- package/dist/default/__generated__/skins/minimal-video/styles/captions.css +22 -0
- package/dist/default/__generated__/skins/minimal-video/styles/container.css +158 -0
- package/dist/default/__generated__/skins/minimal-video/styles/controls.css +182 -0
- package/dist/default/__generated__/skins/minimal-video/styles/dialog.css +77 -0
- package/dist/default/__generated__/skins/minimal-video/styles/indicator.css +322 -0
- package/dist/default/__generated__/skins/minimal-video/styles/menus.css +254 -0
- package/dist/default/__generated__/skins/minimal-video/styles/overlays.css +35 -0
- package/dist/default/__generated__/skins/minimal-video/styles/popups.css +371 -0
- package/dist/default/__generated__/skins/minimal-video/styles/poster.css +47 -0
- package/dist/default/__generated__/skins/minimal-video/styles/sliders.css +436 -0
- package/dist/default/__generated__/skins/minimal-video/styles/styles.css +2246 -0
- package/dist/default/__generated__/skins/minimal-video/styles/theme.css +7 -0
- package/dist/default/__generated__/skins/minimal-video/styles/video.css +29 -0
- package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
- package/dist/default/define/audio/minimal-skin.css +103 -101
- package/dist/default/define/audio/skin.css +68 -69
- package/dist/default/define/live-audio/minimal-skin.css +103 -101
- package/dist/default/define/live-audio/skin.css +68 -69
- package/dist/default/define/live-video/minimal-skin.css +140 -120
- package/dist/default/define/live-video/minimal-skin.js +1 -1
- package/dist/default/define/live-video/minimal-skin.js.map +1 -1
- package/dist/default/define/live-video/minimal-skin.tailwind.js +1 -1
- package/dist/default/define/live-video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/define/live-video/skin.css +89 -76
- package/dist/default/define/live-video/skin.js +1 -1
- package/dist/default/define/live-video/skin.js.map +1 -1
- package/dist/default/define/live-video/skin.tailwind.js +1 -1
- package/dist/default/define/live-video/skin.tailwind.js.map +1 -1
- package/dist/default/define/ui/gesture.js +7 -0
- package/dist/default/define/ui/gesture.js.map +1 -0
- package/dist/default/define/video/minimal-skin.css +140 -120
- package/dist/default/define/video/minimal-skin.js +1 -1
- package/dist/default/define/video/minimal-skin.js.map +1 -1
- package/dist/default/define/video/minimal-skin.tailwind.js +1 -1
- package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/define/video/skin.css +89 -76
- package/dist/default/define/video/skin.js +1 -1
- package/dist/default/define/video/skin.js.map +1 -1
- package/dist/default/define/video/skin.tailwind.js +1 -1
- package/dist/default/define/video/skin.tailwind.js.map +1 -1
- package/dist/default/icons/dist/element/default/icons.js +1 -1
- package/dist/default/icons/dist/element/default/icons.js.map +1 -1
- package/dist/default/icons/dist/element/minimal/icons.js +1 -1
- package/dist/default/icons/dist/element/minimal/icons.js.map +1 -1
- package/dist/default/icons/dist/html/default/airplay-exit.js +1 -1
- package/dist/default/icons/dist/html/default/airplay-exit.js.map +1 -1
- package/dist/default/icons/dist/html/minimal/airplay-exit.js +1 -1
- package/dist/default/icons/dist/html/minimal/airplay-exit.js.map +1 -1
- package/dist/default/icons/dist/render/default/index.js +1 -1
- package/dist/default/icons/dist/render/default/index.js.map +1 -1
- package/dist/default/icons/dist/render/minimal/index.js +1 -1
- package/dist/default/icons/dist/render/minimal/index.js.map +1 -1
- package/dist/default/media/hls-background-video/media.js +18 -0
- package/dist/default/media/hls-background-video/media.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js +3 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/poster.js +8 -1
- package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js +10 -10
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +4 -4
- package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
- package/dist/default/store/provider-mixin.js +22 -8
- package/dist/default/store/provider-mixin.js.map +1 -1
- package/dist/default/ui/audio-track-radio-group/audio-track-radio-group-element.js +1 -1
- package/dist/default/ui/audio-track-radio-group/audio-track-radio-group-element.js.map +1 -1
- package/dist/default/ui/captions-radio-group/captions-radio-group-element.js +1 -1
- package/dist/default/ui/captions-radio-group/captions-radio-group-element.js.map +1 -1
- package/dist/default/ui/gesture/gesture-element.js.map +1 -1
- package/dist/default/ui/hotkey/hotkey-element.js.map +1 -1
- package/dist/default/ui/menu/context.js.map +1 -1
- package/dist/default/ui/menu/menu-element.js +28 -27
- package/dist/default/ui/menu/menu-element.js.map +1 -1
- package/dist/default/ui/menu/menu-radio-group-element.js +14 -14
- package/dist/default/ui/menu/menu-radio-group-element.js.map +1 -1
- package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group-element.js +1 -1
- package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group-element.js.map +1 -1
- package/dist/default/ui/poster/poster-element.js +138 -8
- package/dist/default/ui/poster/poster-element.js.map +1 -1
- package/dist/default/ui/quality-radio-group/quality-radio-group-element.js +1 -1
- package/dist/default/ui/quality-radio-group/quality-radio-group-element.js.map +1 -1
- package/dist/default/ui/slider/slider-preview-element.js.map +1 -1
- package/dist/dev/__generated__/skins/default-video/styles/buttons.css +132 -18
- package/dist/dev/__generated__/skins/default-video/styles/captions.css +22 -0
- package/dist/dev/__generated__/skins/default-video/styles/container.css +121 -8
- package/dist/dev/__generated__/skins/default-video/styles/controls.css +436 -21
- package/dist/dev/__generated__/skins/default-video/styles/dialog.css +169 -0
- package/dist/dev/__generated__/skins/default-video/styles/indicator.css +459 -0
- package/dist/dev/__generated__/skins/default-video/styles/menus.css +254 -0
- package/dist/dev/__generated__/skins/default-video/styles/overlays.css +26 -2
- package/dist/dev/__generated__/skins/default-video/styles/popups.css +338 -12
- package/dist/dev/__generated__/skins/default-video/styles/poster.css +4 -4
- package/dist/dev/__generated__/skins/default-video/styles/sliders.css +355 -31
- package/dist/dev/__generated__/skins/default-video/styles/styles.css +2455 -216
- package/dist/dev/__generated__/skins/default-video/styles/theme.css +4 -19
- package/dist/dev/__generated__/skins/default-video/styles/video.css +29 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/base.css +25 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/buttons.css +266 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/captions.css +22 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/container.css +158 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/controls.css +182 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/dialog.css +77 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/indicator.css +322 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/menus.css +254 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/overlays.css +35 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/popups.css +371 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/poster.css +47 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/sliders.css +436 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/styles.css +2246 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/theme.css +7 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/video.css +29 -0
- package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
- package/dist/dev/define/audio/minimal-skin.css +103 -101
- package/dist/dev/define/audio/skin.css +68 -69
- package/dist/dev/define/live-audio/minimal-skin.css +103 -101
- package/dist/dev/define/live-audio/skin.css +68 -69
- package/dist/dev/define/live-video/minimal-skin.css +140 -120
- package/dist/dev/define/live-video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/live-video/minimal-skin.js +3 -1
- package/dist/dev/define/live-video/minimal-skin.js.map +1 -1
- package/dist/dev/define/live-video/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/live-video/minimal-skin.tailwind.js +3 -1
- package/dist/dev/define/live-video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/define/live-video/skin.css +89 -76
- package/dist/dev/define/live-video/skin.d.ts.map +1 -1
- package/dist/dev/define/live-video/skin.js +3 -1
- package/dist/dev/define/live-video/skin.js.map +1 -1
- package/dist/dev/define/live-video/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/live-video/skin.tailwind.js +4 -2
- package/dist/dev/define/live-video/skin.tailwind.js.map +1 -1
- package/dist/dev/define/ui/gesture.d.ts +8 -0
- package/dist/dev/define/ui/gesture.d.ts.map +1 -0
- package/dist/dev/define/ui/gesture.js +7 -0
- package/dist/dev/define/ui/gesture.js.map +1 -0
- package/dist/dev/define/video/minimal-skin.css +140 -120
- package/dist/dev/define/video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/video/minimal-skin.js +3 -1
- package/dist/dev/define/video/minimal-skin.js.map +1 -1
- package/dist/dev/define/video/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/video/minimal-skin.tailwind.js +3 -1
- package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/define/video/skin.css +89 -76
- package/dist/dev/define/video/skin.d.ts.map +1 -1
- package/dist/dev/define/video/skin.js +3 -1
- package/dist/dev/define/video/skin.js.map +1 -1
- package/dist/dev/define/video/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/video/skin.tailwind.js +4 -2
- package/dist/dev/define/video/skin.tailwind.js.map +1 -1
- package/dist/dev/media/hls-background-video/media.d.ts +16 -0
- package/dist/dev/media/hls-background-video/media.d.ts.map +1 -1
- package/dist/dev/media/hls-background-video/media.js +18 -0
- package/dist/dev/media/hls-background-video/media.js.map +1 -1
- package/dist/dev/packages/icons/dist/element/default/icons.js +1 -1
- package/dist/dev/packages/icons/dist/element/default/icons.js.map +1 -1
- package/dist/dev/packages/icons/dist/element/minimal/icons.js +1 -1
- package/dist/dev/packages/icons/dist/element/minimal/icons.js.map +1 -1
- package/dist/dev/packages/icons/dist/html/default/airplay-exit.js +1 -1
- package/dist/dev/packages/icons/dist/html/default/airplay-exit.js.map +1 -1
- package/dist/dev/packages/icons/dist/html/minimal/airplay-exit.js +1 -1
- package/dist/dev/packages/icons/dist/html/minimal/airplay-exit.js.map +1 -1
- package/dist/dev/packages/icons/dist/render/default/index.js +1 -1
- package/dist/dev/packages/icons/dist/render/default/index.js.map +1 -1
- package/dist/dev/packages/icons/dist/render/minimal/index.js +1 -1
- package/dist/dev/packages/icons/dist/render/minimal/index.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js +3 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js +8 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js +10 -10
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
- package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/shared/tailwind/icon-state.js +4 -4
- package/dist/dev/packages/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
- package/dist/dev/store/provider-mixin.d.ts.map +1 -1
- package/dist/dev/store/provider-mixin.js +24 -8
- package/dist/dev/store/provider-mixin.js.map +1 -1
- package/dist/dev/store/types.d.ts +2 -2
- package/dist/dev/store/types.d.ts.map +1 -1
- package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group-element.js +1 -1
- package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group-element.js.map +1 -1
- package/dist/dev/ui/captions-radio-group/captions-radio-group-element.js +1 -1
- package/dist/dev/ui/captions-radio-group/captions-radio-group-element.js.map +1 -1
- package/dist/dev/ui/gesture/gesture-element.d.ts +7 -7
- package/dist/dev/ui/gesture/gesture-element.d.ts.map +1 -1
- package/dist/dev/ui/gesture/gesture-element.js.map +1 -1
- package/dist/dev/ui/hotkey/hotkey-element.d.ts +6 -6
- package/dist/dev/ui/hotkey/hotkey-element.d.ts.map +1 -1
- package/dist/dev/ui/hotkey/hotkey-element.js.map +1 -1
- package/dist/dev/ui/menu/context.d.ts +8 -8
- package/dist/dev/ui/menu/context.d.ts.map +1 -1
- package/dist/dev/ui/menu/context.js.map +1 -1
- package/dist/dev/ui/menu/menu-element.d.ts.map +1 -1
- package/dist/dev/ui/menu/menu-element.js +28 -27
- package/dist/dev/ui/menu/menu-element.js.map +1 -1
- package/dist/dev/ui/menu/menu-radio-group-element.d.ts +1 -1
- package/dist/dev/ui/menu/menu-radio-group-element.d.ts.map +1 -1
- package/dist/dev/ui/menu/menu-radio-group-element.js +14 -14
- package/dist/dev/ui/menu/menu-radio-group-element.js.map +1 -1
- package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group-element.js +1 -1
- package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group-element.js.map +1 -1
- package/dist/dev/ui/poster/poster-element.d.ts +20 -18
- package/dist/dev/ui/poster/poster-element.d.ts.map +1 -1
- package/dist/dev/ui/poster/poster-element.js +145 -8
- package/dist/dev/ui/poster/poster-element.js.map +1 -1
- package/dist/dev/ui/quality-radio-group/quality-radio-group-element.js +1 -1
- package/dist/dev/ui/quality-radio-group/quality-radio-group-element.js.map +1 -1
- package/dist/dev/ui/slider/slider-preview-element.d.ts +2 -2
- package/dist/dev/ui/slider/slider-preview-element.d.ts.map +1 -1
- package/dist/dev/ui/slider/slider-preview-element.js.map +1 -1
- package/docs/README.md +1 -1
- package/docs/concepts/skins.md +91 -78
- package/docs/how-to/customize-skins.md +411 -377
- package/docs/reference/menu.md +3 -19
- package/docs/reference/popover.md +2 -2
- package/docs/reference/poster.md +211 -21
- package/docs/reference/slider.md +1 -1
- package/docs/reference/time-slider.md +1 -1
- package/docs/reference/tooltip.md +6 -6
- package/docs/reference/volume-slider.md +1 -1
- package/package.json +14 -9
- package/cdn/adapter-Bk03SAxn.js +0 -2
- package/cdn/adapter-Bk03SAxn.js.map +0 -1
- package/cdn/adapter-XTen-YVQ.js.map +0 -1
- package/cdn/compounds-BEO1d3ZM.js +0 -8
- package/cdn/compounds-BEO1d3ZM.js.map +0 -1
- package/cdn/compounds-nk9RJtBK.js.map +0 -1
- package/cdn/create-player-DK9WOywd.js.map +0 -1
- package/cdn/create-player-hSdQMP5p.js +0 -2
- package/cdn/create-player-hSdQMP5p.js.map +0 -1
- package/cdn/default-BqQDVloS.js.map +0 -1
- package/cdn/default-CXWVp2oG.js +0 -2
- package/cdn/default-CXWVp2oG.js.map +0 -1
- package/cdn/default-Dw6cIEqT.js +0 -2
- package/cdn/default-Dw6cIEqT.js.map +0 -1
- package/cdn/default-I2LasfxC.js.map +0 -1
- package/cdn/error-surface-DCT1m2p1.js +0 -2
- package/cdn/error-surface-DCT1m2p1.js.map +0 -1
- package/cdn/error-surface-drmCvBVW.js.map +0 -1
- package/cdn/gesture-element-6Ld1YwIL.js.map +0 -1
- package/cdn/gesture-element-BC48ucj9.js +0 -2
- package/cdn/gesture-element-BC48ucj9.js.map +0 -1
- package/cdn/i18n-Dc7WM2xd.js +0 -2
- package/cdn/media-BTipOcKo.js +0 -2
- package/cdn/media-Bmablv4g.js +0 -2
- package/cdn/media-Bmablv4g.js.map +0 -1
- package/cdn/media-COIe3uI5.js.map +0 -1
- package/cdn/media-CPVSKLdk.js +0 -2
- package/cdn/media-Dq4zmIJa.js +0 -2
- package/cdn/media-Dq4zmIJa.js.map +0 -1
- package/cdn/media-suYcjCG2.js +0 -445
- package/cdn/media-suYcjCG2.js.map +0 -1
- package/cdn/minimal-BedCvMBG.js +0 -2
- package/cdn/minimal-BedCvMBG.js.map +0 -1
- package/cdn/minimal-BoP112ye.js +0 -2
- package/cdn/minimal-BoP112ye.js.map +0 -1
- package/cdn/minimal-DLosvq31.js.map +0 -1
- package/cdn/minimal-DQCLKRyR.js.map +0 -1
- package/cdn/minimal-ui-Et2Wcn7r.js +0 -2
- package/cdn/player-BRQLp5bX.js +0 -2
- package/cdn/player-BloX4l6F.js +0 -2
- package/cdn/player-rCFqzWrA.js +0 -2
- package/cdn/poster-element-BGr1VQJB.js.map +0 -1
- package/cdn/poster-element-DBmgOyep.js +0 -2
- package/cdn/poster-element-DBmgOyep.js.map +0 -1
- package/cdn/seek-button-element-XMTLIxZj.js.map +0 -1
- package/cdn/select-tracks-nRPBa1NC.js.map +0 -1
- package/cdn/select-tracks-xV1s28xD.js +0 -59
- package/cdn/select-tracks-xV1s28xD.js.map +0 -1
- package/cdn/time-slider-chapters-element-DJ0abZXI.js.map +0 -1
- package/cdn/time-slider-chapters-element-DW8YyJn8.js +0 -2
- package/cdn/time-slider-chapters-element-DW8YyJn8.js.map +0 -1
- package/cdn/ui-C0isALTQ.js +0 -2
- 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-
|
|
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-
|
|
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-
|
|
2
|
-
//# sourceMappingURL=hls-js-
|
|
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-
|
|
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-
|
|
2
|
-
//# sourceMappingURL=hls-js-
|
|
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-
|
|
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-
|
|
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-
|
|
22
|
+
//# sourceMappingURL=hls-js-DX2NGCAr.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hls-js-
|
|
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-
|
|
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-
|
|
22
|
+
//# sourceMappingURL=hls-js-JeH8yvsP.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hls-js-
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n-
|
|
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-
|
|
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-
|
|
9
|
+
//# sourceMappingURL=i18n-D0nhPa0m.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n-
|
|
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,
|
|
2
|
-
//# sourceMappingURL=live-button-element-
|
|
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":"sZACA,MAAM,EAAS,QACT,EAAc,CACnB,IAAK,GAAG,EAAO,SACf,KAAM,cACP,EACM,EAAiB,CACtB,IAAK,GAAG,EAAO,YACf,KAAM,mBACP,EACM,EAAY,CACjB,IAAK,GAAG,EAAO,OACf,KAAM,MACP,ECWA,IAAI,EAAiB,MAAM,CAAe,CAEzC,OAAO,YAAc,EACrB,OAAO,aAAe,CACrB,MAAO,GACP,SAAU,EACX,EACA,MAAQ,EAAY,CACnB,KAAM,GACN,SAAU,GACV,MAAO,EACR,CAAC,EACD,GAAS,CAAE,GAAG,EAAe,YAAa,EAC1C,GAAS,KACT,YAAY,EAAO,CACd,GAAO,KAAK,SAAS,CAAK,CAC/B,CACA,SAAS,EAAO,CACf,KAAKA,GAAS,EAAS,EAAO,EAAe,YAAY,CAC1D,CACA,SAAS,EAAO,CAIf,OAHc,EAAa,KAAKA,GAAO,MAAO,CAC1C,IACA,EAAM,SAAiB,EACpB,EACR,CACA,SAAS,EAAO,CACf,IAAM,EAAW,KAAKA,GAAO,UAAY,EAAM,SAC/C,MAAO,CACN,aAAc,KAAK,SAAS,CAAK,EACjC,gBAAiB,EAAW,OAAS,IAAK,EAC3C,CACD,CACA,SAAS,EAAO,CACf,KAAKC,GAAS,CACf,CACA,UAAW,CACV,IAAM,EAAQ,KAAKA,GACb,EAAO,EAAY,CAAK,EACxB,EAAW,GAAQ,KAAKC,GAAc,CAAK,EAMjD,OALA,KAAK,MAAM,MAAM,CAChB,OACA,UACD,CAAC,EACD,KAAK,MAAM,MAAM,CAAE,MAAOC,EAAY,KAAK,SAAS,KAAK,MAAM,OAAO,CAAC,CAAE,CAAC,EACnE,KAAK,MAAM,OACnB,CAEA,MAAM,WAAW,EAAO,CAGvB,GAFI,KAAKH,GAAO,UACZ,CAAC,EAAY,CAAK,GAClB,KAAKE,GAAc,CAAK,EAAG,OAC/B,IAAM,EAAS,EAAe,CAAK,EAC/B,GAAU,MACd,MAAM,EAAM,KAAK,CAAM,CACxB,CACA,GAAc,EAAO,CACpB,GAAM,CAAE,cAAa,iBAAkB,EACvC,GAAI,OAAO,SAAS,CAAa,EAAG,OAAO,GAAe,EAAgB,EAC1E,IAAM,EAAS,EAAe,CAAK,EAEnC,OADI,GAAU,MACP,GAAe,EAAS,EAChC,CACD,EACA,SAAS,EAAY,EAAO,CAC3B,MAAO,CAAC,OAAO,MAAM,EAAM,gBAAgB,CAC5C,CACA,SAAS,EAAe,EAAO,CAC9B,GAAM,CAAE,YAAa,EACrB,GAAI,EAAS,SAAW,EAAG,OAAO,KAClC,IAAM,EAAM,EAAS,EAAS,OAAS,EAAE,CAAC,GAC1C,OAAO,OAAO,SAAS,CAAG,EAAI,EAAM,IACrC,CC/FA,MAAM,EAAsB,CAE3B,KAAM,YAEN,SAAU,gBACX,ECsBA,IAAa,EAAb,cAAuC,CAAa,+BAQvC,KAAA,SAAA,GACY,KAAA,MAAA,GAEG,KAAA,KAAA,IAAI,EAEJ,KAAA,KAAA,IAAI,EAAiB,KAAM,EAAe,CAAU,EACpD,KAAA,KAAA,IAAI,EAAiB,KAAM,EAAe,CAAU,EAClD,KAAA,OAAA,IAAI,EAAiB,KAAM,EAAe,CAAY,EACjE,KAAA,GAAA,IAAI,EAAe,KAAM,CAAW,EAMnC,KAAA,GAAA,GACoB,KAAA,GAAA,YAtBZ,KAAA,QAAA,2BAE2B,KAAA,WAAA,CACnD,MAAO,CAAE,KAAM,MAAO,EACtB,SAAU,CAAE,KAAM,OAAQ,CAC5B,EAUA,GAEA,IAAI,QAAsC,CACxC,OAAO,KAAK,KAAK,KACnB,CAEA,GACA,GAEA,mBAAmC,CAEjC,GADA,MAAM,kBAAkB,EACpB,KAAK,UAAW,OAEpB,KAAKG,KAAoB,CAAC,KAAK,aAAa,KAAK,EAC7C,KAAKA,KACP,KAAK,YAAc,EAAc,EAAe,YAAa,KAAKD,GAAM,KAAK,GAG/E,KAAKE,GAAc,IAAI,gBAEvB,IAAM,EAAc,EAAa,CAC/B,eAAkB,CAChB,IAAM,EAAQ,KAAKC,GAAU,EACzB,GAAO,KAAK,KAAK,WAAW,CAAK,CACvC,EACA,eAAkB,KAAK,UAAY,CAAC,KAAKA,GAAU,CACrD,CAAC,EAED,EAAkB,KAAM,EAAa,CAAE,OAAQ,KAAKD,GAAY,MAAO,CAAC,CAK1E,CAEA,sBAAsC,CACpC,MAAM,qBAAqB,EAC3B,KAAKA,IAAa,MAAM,EACxB,KAAKA,GAAc,IACrB,CAGA,UAA+B,CAC7B,OAAO,KAAK,KAAK,MAAM,QAAQ,MAAQ,EAAY,KAAK,KAAK,MAAM,QAAQ,KAAK,EAAI,IAAA,EACtF,CAGA,kBAAuC,CAErC,GAAI,CADU,KAAKC,GACV,EAAG,OACZ,IAAM,EAAQ,KAAK,KAAK,SAAS,EACjC,OAAO,EAAc,KAAK,KAAK,SAAS,CAAK,EAAG,KAAKH,GAAM,KAAK,CAClE,CAEA,WAA8B,EAA+B,CAC3D,MAAM,WAAW,CAAO,EACxB,KAAK,KAAK,SAAS,IAAI,CACzB,CAEA,OAA0B,EAA+B,CACvD,MAAM,OAAO,CAAO,EAEhB,KAAKC,KACP,KAAK,YAAc,EAAc,EAAe,YAAa,KAAKD,GAAM,KAAK,GAG/E,IAAM,EAAQ,KAAKG,GAAU,EAC7B,GAAI,CAAC,EAAO,OAEZ,KAAK,KAAK,SAAS,CAAK,EACxB,IAAM,EAAQ,KAAK,KAAK,SAAS,EAC3B,EAAQ,KAAK,KAAK,SAAS,CAAK,EACtC,EAAkB,KAAM,CACtB,GAAG,EACH,aAAc,EAAc,EAAM,cAAe,KAAKH,GAAM,KAAK,CACnE,CAAC,EACD,EAAoB,KAAM,EAAO,CAAmB,CACtD,CAOA,IAAyC,CACvC,IAAM,EAAO,KAAK,KAAK,MACjB,EAAO,KAAK,KAAK,MACjB,EAAS,KAAK,OAAO,MAE3B,MADI,CAAC,GAAQ,CAAC,GAAQ,CAAC,EAAe,KAC/B,CACL,YAAa,EAAK,YAClB,KAAM,EAAK,KACX,SAAU,EAAO,SACjB,cAAe,EAAK,cACpB,iBAAkB,EAAK,gBACzB,CACF,CACF"}
|
|
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 {
|
|
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-
|
|
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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"}
|