@videojs/html 10.0.0-beta.27 → 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-video-WKumpp49.js +59 -0
- package/cdn/background-video-WKumpp49.js.map +1 -0
- package/cdn/background-video-YHY_3-lX.js +2 -0
- package/cdn/background-video-YHY_3-lX.js.map +1 -0
- package/cdn/background.dev.js +3 -56
- package/cdn/background.dev.js.map +1 -1
- package/cdn/background.js +1 -1
- package/cdn/background.js.map +1 -1
- package/cdn/bn-CcLIScl6.js +108 -0
- package/cdn/bn-CcLIScl6.js.map +1 -0
- package/cdn/bn-KcCmQhYd.js +2 -0
- package/cdn/bn-KcCmQhYd.js.map +1 -0
- package/cdn/compounds-C4YYLyL2.js +8 -0
- package/cdn/compounds-C4YYLyL2.js.map +1 -0
- package/cdn/{compounds-CCvdpvge.js → compounds-C73u1MeO.js} +68 -71
- package/cdn/compounds-C73u1MeO.js.map +1 -0
- package/cdn/container-element-Dd0ZCdhK.js +14 -0
- package/cdn/container-element-Dd0ZCdhK.js.map +1 -0
- package/cdn/container-element-HHK_KZOE.js +376 -0
- package/cdn/container-element-HHK_KZOE.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-BHFyOnWi.js → create-player-Db1CIvlK.js} +76 -424
- 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/embed-params-D2e8u0d4.js +2 -0
- package/cdn/embed-params-D2e8u0d4.js.map +1 -0
- package/cdn/embed-params-W6T88S8x.js +39 -0
- package/cdn/embed-params-W6T88S8x.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-BNfMI8eh.js → gesture-element-CeRy1IVs.js} +2 -2
- package/cdn/gesture-element-CeRy1IVs.js.map +1 -0
- package/cdn/{gesture-element-CG-Sx_5t.js → gesture-element-DB67OYCE.js} +3 -3
- package/cdn/gesture-element-DB67OYCE.js.map +1 -0
- package/cdn/hls-js-CiE4wOrG.js +2 -0
- package/cdn/{hls-js-6lW7L4th.js.map → hls-js-CiE4wOrG.js.map} +1 -1
- package/cdn/hls-js-DBKRCbQm.js +2 -0
- package/cdn/{hls-js-DCQzjzB5.js.map → hls-js-DBKRCbQm.js.map} +1 -1
- package/cdn/{hls-js-g1zdcyvE.js → hls-js-DX2NGCAr.js} +3 -2
- package/cdn/{hls-js-g1zdcyvE.js.map → hls-js-DX2NGCAr.js.map} +1 -1
- package/cdn/{hls-js-Cwj8UBx9.js → hls-js-JeH8yvsP.js} +3 -2
- package/cdn/{hls-js-Cwj8UBx9.js.map → hls-js-JeH8yvsP.js.map} +1 -1
- package/cdn/i18n-CE4KxKuj.js +2 -0
- package/cdn/i18n-CE4KxKuj.js.map +1 -0
- package/cdn/i18n-CpBDXf6M.js +2 -0
- package/cdn/{i18n-DfKGl5Rh.js.map → i18n-CpBDXf6M.js.map} +1 -1
- package/cdn/{i18n-Mtlmj1AA.js → i18n-D0nhPa0m.js} +2 -2
- package/cdn/{i18n-Mtlmj1AA.js.map → i18n-D0nhPa0m.js.map} +1 -1
- package/cdn/i18n-DyF_NfCk.js +157 -0
- package/cdn/i18n-DyF_NfCk.js.map +1 -0
- package/cdn/i18n.dev.js +3 -152
- package/cdn/i18n.dev.js.map +1 -1
- package/cdn/i18n.js +1 -1
- package/cdn/i18n.js.map +1 -1
- package/cdn/live-button-element-Co8z2LkI.js +2 -0
- package/cdn/{live-button-element-CWfkQUoy.js.map → live-button-element-Co8z2LkI.js.map} +1 -1
- package/cdn/{live-button-element-B_y-ZJBy.js → live-button-element-zE-8uoR2.js} +5 -4
- package/cdn/live-button-element-zE-8uoR2.js.map +1 -0
- package/cdn/live-video-minimal.dev.js +12 -10
- 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 +13 -11
- 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/locales/bn.dev.js +1 -1
- package/cdn/locales/bn.js +1 -1
- package/cdn/media/background-video.dev.d.ts +1 -0
- package/cdn/media/background-video.dev.js +3 -0
- package/cdn/media/background-video.js +1 -0
- package/cdn/media/cloudflare-video.dev.d.ts +1 -0
- package/cdn/media/cloudflare-video.dev.js +668 -0
- package/cdn/media/cloudflare-video.dev.js.map +1 -0
- package/cdn/media/cloudflare-video.js +2 -0
- package/cdn/media/cloudflare-video.js.map +1 -0
- package/cdn/media/container.dev.d.ts +1 -0
- package/cdn/media/container.dev.js +8 -0
- package/cdn/media/container.dev.js.map +1 -0
- package/cdn/media/container.js +2 -0
- package/cdn/media/container.js.map +1 -0
- package/cdn/media/dash-video.dev.js +2 -1
- package/cdn/media/dash-video.js +2 -2
- package/cdn/media/dash-video.js.map +1 -1
- package/cdn/media/google-cast.dev.js +2 -31
- package/cdn/media/google-cast.dev.js.map +1 -1
- package/cdn/media/google-cast.js +3 -3
- package/cdn/media/google-cast.js.map +1 -1
- package/cdn/media/hls-audio.dev.js +2 -1
- package/cdn/media/hls-audio.js +1 -1
- package/cdn/media/hls-audio.js.map +1 -1
- package/cdn/media/hls-background-video.dev.js +2 -1
- package/cdn/media/hls-background-video.js +1 -1
- package/cdn/media/hls-background-video.js.map +1 -1
- package/cdn/media/hls-video.dev.js +2 -1
- package/cdn/media/hls-video.js +1 -1
- package/cdn/media/hls-video.js.map +1 -1
- package/cdn/media/hlsjs-video.dev.js +2 -1
- package/cdn/media/hlsjs-video.js +1 -1
- package/cdn/media/hlsjs-video.js.map +1 -1
- package/cdn/media/mux-audio/hls-js.dev.js +3 -1
- package/cdn/media/mux-audio/hls-js.js +1 -1
- package/cdn/media/mux-audio/spf.dev.js +3 -2
- package/cdn/media/mux-audio/spf.js +1 -1
- package/cdn/media/mux-audio/spf.js.map +1 -1
- package/cdn/media/mux-audio.dev.js +3 -1
- package/cdn/media/mux-audio.js +1 -1
- package/cdn/media/mux-background-video.dev.js +2 -1
- package/cdn/media/mux-background-video.js +1 -1
- package/cdn/media/mux-background-video.js.map +1 -1
- package/cdn/media/mux-data.dev.js +2 -1
- package/cdn/media/mux-data.dev.js.map +1 -1
- package/cdn/media/mux-data.js +2 -2
- package/cdn/media/mux-data.js.map +1 -1
- package/cdn/media/mux-video/hls-js.dev.js +3 -1
- package/cdn/media/mux-video/hls-js.js +1 -1
- package/cdn/media/mux-video/spf.dev.js +3 -2
- package/cdn/media/mux-video/spf.js +1 -1
- package/cdn/media/mux-video/spf.js.map +1 -1
- package/cdn/media/mux-video.dev.js +3 -1
- package/cdn/media/mux-video.js +1 -1
- package/cdn/media/native-hls-video.dev.js +1 -0
- package/cdn/media/native-hls-video.js +1 -1
- package/cdn/media/native-hls-video.js.map +1 -1
- package/cdn/media/spotify-audio.dev.d.ts +1 -0
- package/cdn/media/spotify-audio.dev.js +605 -0
- package/cdn/media/spotify-audio.dev.js.map +1 -0
- package/cdn/media/spotify-audio.js +2 -0
- package/cdn/media/spotify-audio.js.map +1 -0
- package/cdn/media/tiktok-video.dev.d.ts +1 -0
- package/cdn/media/tiktok-video.dev.js +636 -0
- package/cdn/media/tiktok-video.dev.js.map +1 -0
- package/cdn/media/tiktok-video.js +2 -0
- package/cdn/media/tiktok-video.js.map +1 -0
- package/cdn/media/twitch-video.dev.d.ts +1 -0
- package/cdn/media/twitch-video.dev.js +627 -0
- package/cdn/media/twitch-video.dev.js.map +1 -0
- package/cdn/media/twitch-video.js +2 -0
- package/cdn/media/twitch-video.js.map +1 -0
- package/cdn/media/vimeo-video.dev.d.ts +1 -0
- package/cdn/media/vimeo-video.dev.js +3011 -0
- package/cdn/media/vimeo-video.dev.js.map +1 -0
- package/cdn/media/vimeo-video.js +16 -0
- package/cdn/media/vimeo-video.js.map +1 -0
- package/cdn/media/youtube-video.dev.d.ts +1 -0
- package/cdn/media/youtube-video.dev.js +713 -0
- package/cdn/media/youtube-video.dev.js.map +1 -0
- package/cdn/media/youtube-video.js +2 -0
- package/cdn/media/youtube-video.js.map +1 -0
- 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-B_gQXwri.js → media-BNuI0Im7.js} +30 -8
- package/cdn/media-BNuI0Im7.js.map +1 -0
- package/cdn/{media-Cp3acYc8.js → media-BavrGKqa.js} +274 -5
- package/cdn/media-BavrGKqa.js.map +1 -0
- package/cdn/media-CQxFuDcv.js +2 -0
- package/cdn/{media-CbWsJJhU.js.map → media-CQxFuDcv.js.map} +1 -1
- package/cdn/media-CanBm0Jh.js +41 -0
- package/cdn/media-CanBm0Jh.js.map +1 -0
- package/cdn/media-D4tG62L5.js +2 -0
- package/cdn/{media-BTipOcKo.js.map → media-D4tG62L5.js.map} +1 -1
- package/cdn/{media-DRo3n8tM.js → media-DI6DvYm3.js} +4 -4
- package/cdn/{media-DRo3n8tM.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-played-ranges-CM2zeOGr.js +2 -0
- package/cdn/media-played-ranges-CM2zeOGr.js.map +1 -0
- package/cdn/media-played-ranges-Yd9acuMt.js +156 -0
- package/cdn/media-played-ranges-Yd9acuMt.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-Bxcpf5Mb.js → minimal-ui-BCIESK8f.js} +9 -9
- package/cdn/{minimal-ui-Bxcpf5Mb.js.map → minimal-ui-BCIESK8f.js.map} +1 -1
- package/cdn/minimal-ui-BXrq3z4U.js +2 -0
- package/cdn/{minimal-ui-BVKu9LWj.js.map → minimal-ui-BXrq3z4U.js.map} +1 -1
- package/cdn/{minimal-ui--JsmpU2q.js → minimal-ui-DEalpMk6.js} +5 -5
- package/cdn/{minimal-ui--JsmpU2q.js.map → minimal-ui-DEalpMk6.js.map} +1 -1
- package/cdn/minimal-ui-vY3QgohH.js +2 -0
- package/cdn/{minimal-ui-AFk6Ut5f.js.map → minimal-ui-vY3QgohH.js.map} +1 -1
- package/cdn/mixin-BqN0V06a.js +2 -0
- package/cdn/{mixin-DiB7dIef.js.map → mixin-BqN0V06a.js.map} +1 -1
- package/cdn/{mixin-CkNZwQXF.js → mixin-C193v40v.js} +67 -67
- package/cdn/mixin-C193v40v.js.map +1 -0
- package/cdn/noop-BxkeRIz9.js +6 -0
- package/cdn/noop-BxkeRIz9.js.map +1 -0
- package/cdn/noop-Ch0IHcOP.js +2 -0
- package/cdn/noop-Ch0IHcOP.js.map +1 -0
- package/cdn/{player-C4ix6TQq.js → player-B3GlPF90.js} +3 -2
- package/cdn/{player-C4ix6TQq.js.map → player-B3GlPF90.js.map} +1 -1
- package/cdn/player-CtTC7qa5.js +2 -0
- package/cdn/{player-B0ccW5-n.js.map → player-CtTC7qa5.js.map} +1 -1
- package/cdn/player-DKkph8UM.js +2 -0
- package/cdn/{player-srq1RGTj.js.map → player-DKkph8UM.js.map} +1 -1
- package/cdn/{player-B0qnepD5.js → player-DPDmTRvg.js} +3 -2
- package/cdn/{player-B0qnepD5.js.map → player-DPDmTRvg.js.map} +1 -1
- package/cdn/player-DrDd7LJi.js +2 -0
- package/cdn/{player-iIewo8Y9.js.map → player-DrDd7LJi.js.map} +1 -1
- package/cdn/{player-D4fdOLLk.js → player-L5UpZmT4.js} +3 -2
- package/cdn/{player-D4fdOLLk.js.map → player-L5UpZmT4.js.map} +1 -1
- package/cdn/{poster-element-BP1Ypgbf.js → poster-element-B5tdJ2ub.js} +192 -39
- 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/script-D3ZkiqwO.js +2 -0
- package/cdn/script-D3ZkiqwO.js.map +1 -0
- package/cdn/script-erPJaaTz.js +33 -0
- package/cdn/script-erPJaaTz.js.map +1 -0
- package/cdn/{seek-button-element-TErrbilI.js → seek-button-element-5co-k0Dx.js} +7 -6
- package/cdn/seek-button-element-5co-k0Dx.js.map +1 -0
- package/cdn/seek-button-element-B8TkILg-.js +2 -0
- package/cdn/seek-button-element-B8TkILg-.js.map +1 -0
- 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-wPSb4AAs.js → skin-element-DrkI8xuM.js} +2 -2
- package/cdn/{skin-element-wPSb4AAs.js.map → skin-element-DrkI8xuM.js.map} +1 -1
- package/cdn/{skin-element-1_MG2zgS.js → skin-element-DvX6Bxsv.js} +2 -2
- package/cdn/{skin-element-1_MG2zgS.js.map → skin-element-DvX6Bxsv.js.map} +1 -1
- package/cdn/text-element-BoY6AhMn.js +2 -0
- package/cdn/{text-element-Bsyglab8.js.map → text-element-BoY6AhMn.js.map} +1 -1
- package/cdn/{text-element-DTB9_2HX.js → text-element-cg6l21cd.js} +3 -3
- package/cdn/{text-element-DTB9_2HX.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-DPgaLdBt.js → time-slider-chapters-element-CznFQWFm.js} +7 -6
- package/cdn/time-slider-chapters-element-CznFQWFm.js.map +1 -0
- package/cdn/{translate-text-DP0CzUCC.js → translate-text-BWvoW5-r.js} +2 -7
- package/cdn/translate-text-BWvoW5-r.js.map +1 -0
- package/cdn/translate-text-TzSgu_oe.js +2 -0
- package/cdn/translate-text-TzSgu_oe.js.map +1 -0
- package/cdn/{ui-D0AokGxw.js → ui-BwzqkJNK.js} +8 -8
- package/cdn/{ui-D0AokGxw.js.map → ui-BwzqkJNK.js.map} +1 -1
- package/cdn/ui-DayfItun.js +2 -0
- package/cdn/{ui-CecDxhTX.js.map → ui-DayfItun.js.map} +1 -1
- package/cdn/ui-PSnD-pv8.js +2 -0
- package/cdn/{ui-ChWM6Xz2.js.map → ui-PSnD-pv8.js.map} +1 -1
- package/cdn/{ui-p36Szn71.js → ui-fnKp94a7.js} +10 -10
- package/cdn/{ui-p36Szn71.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 +117 -118
- package/dist/default/define/audio/skin.css +95 -99
- package/dist/default/define/live-audio/minimal-skin.css +117 -118
- package/dist/default/define/live-audio/skin.css +95 -99
- package/dist/default/define/live-video/minimal-skin.css +158 -137
- 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 +120 -106
- 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 +158 -137
- 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 +120 -106
- 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/media/tiktok-video/media.js +3 -2
- package/dist/default/media/tiktok-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 +13 -13
- 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 +3 -3
- 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 +7 -6
- 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-button/playback-rate-button-element.js +1 -2
- package/dist/default/ui/playback-rate-button/playback-rate-button-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 +117 -118
- package/dist/dev/define/audio/skin.css +95 -99
- package/dist/dev/define/live-audio/minimal-skin.css +117 -118
- package/dist/dev/define/live-audio/skin.css +95 -99
- package/dist/dev/define/live-video/minimal-skin.css +158 -137
- 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 +120 -106
- 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 +158 -137
- 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 +120 -106
- 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/media/tiktok-video/media.d.ts.map +1 -1
- package/dist/dev/media/tiktok-video/media.js +10 -7
- package/dist/dev/media/tiktok-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 +13 -13
- 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 +3 -3
- 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 +7 -6
- 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-button/playback-rate-button-element.d.ts.map +1 -1
- package/dist/dev/ui/playback-rate-button/playback-rate-button-element.js +1 -2
- package/dist/dev/ui/playback-rate-button/playback-rate-button-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/features.md +2 -2
- package/docs/concepts/media-sources.md +79 -1
- package/docs/concepts/skins.md +122 -108
- package/docs/how-to/build-your-own-component.md +1 -1
- package/docs/how-to/customize-skins.md +499 -469
- package/docs/how-to/migrate-from-media-chrome.md +359 -0
- package/docs/how-to/migrate-from-mux-player.md +535 -0
- package/docs/how-to/migrate-from-plyr.md +394 -0
- package/docs/how-to/migrate-from-video-js-8.md +594 -0
- package/docs/llms.txt +9 -0
- package/docs/reference/feature-volume.md +3 -1
- package/docs/reference/menu.md +3 -19
- package/docs/reference/mute-button.md +34 -0
- 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 +2 -2
- package/package.json +15 -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/bn-DdelKD_n.js +0 -108
- package/cdn/bn-DdelKD_n.js.map +0 -1
- package/cdn/bn-YS8ruMcO.js +0 -2
- package/cdn/bn-YS8ruMcO.js.map +0 -1
- package/cdn/compounds-CCvdpvge.js.map +0 -1
- package/cdn/compounds-CJ6SbYAh.js +0 -8
- package/cdn/compounds-CJ6SbYAh.js.map +0 -1
- package/cdn/create-player-BHFyOnWi.js.map +0 -1
- package/cdn/create-player-CbpxjDaZ.js +0 -14
- package/cdn/create-player-CbpxjDaZ.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-BNfMI8eh.js.map +0 -1
- package/cdn/gesture-element-CG-Sx_5t.js.map +0 -1
- package/cdn/hls-js-6lW7L4th.js +0 -2
- package/cdn/hls-js-DCQzjzB5.js +0 -2
- package/cdn/i18n-DfKGl5Rh.js +0 -2
- package/cdn/live-button-element-B_y-ZJBy.js.map +0 -1
- package/cdn/live-button-element-CWfkQUoy.js +0 -2
- package/cdn/media-5ODYtX1-.js +0 -2
- package/cdn/media-5ODYtX1-.js.map +0 -1
- package/cdn/media-BTipOcKo.js +0 -2
- package/cdn/media-B_gQXwri.js.map +0 -1
- package/cdn/media-CPWNSZFX.js +0 -41
- package/cdn/media-CPWNSZFX.js.map +0 -1
- package/cdn/media-CbWsJJhU.js +0 -2
- package/cdn/media-Cp3acYc8.js.map +0 -1
- package/cdn/media-Dq4zmIJa2.js +0 -2
- package/cdn/media-Dq4zmIJa2.js.map +0 -1
- package/cdn/media-suYcjCG22.js +0 -445
- package/cdn/media-suYcjCG22.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-AFk6Ut5f.js +0 -2
- package/cdn/minimal-ui-BVKu9LWj.js +0 -2
- package/cdn/mixin-CkNZwQXF.js.map +0 -1
- package/cdn/mixin-DiB7dIef.js +0 -2
- package/cdn/player-B0ccW5-n.js +0 -2
- package/cdn/player-iIewo8Y9.js +0 -2
- package/cdn/player-srq1RGTj.js +0 -2
- package/cdn/poster-element-BP1Ypgbf.js.map +0 -1
- package/cdn/poster-element-S-rr412t.js +0 -2
- package/cdn/poster-element-S-rr412t.js.map +0 -1
- package/cdn/seek-button-element-DxLmm58Y.js +0 -2
- package/cdn/seek-button-element-DxLmm58Y.js.map +0 -1
- package/cdn/seek-button-element-TErrbilI.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/text-element-Bsyglab8.js +0 -2
- package/cdn/time-slider-chapters-element-DPgaLdBt.js.map +0 -1
- package/cdn/time-slider-chapters-element-MdlcovBu.js +0 -2
- package/cdn/time-slider-chapters-element-MdlcovBu.js.map +0 -1
- package/cdn/translate-text-BPMWpzFm.js +0 -2
- package/cdn/translate-text-BPMWpzFm.js.map +0 -1
- package/cdn/translate-text-DP0CzUCC.js.map +0 -1
- package/cdn/ui-CecDxhTX.js +0 -2
- package/cdn/ui-ChWM6Xz2.js +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poster-element-B8QwXSU_.js","names":["prefix","startText","stopText","prefix","#props","stopText","startText","#media","resolveText","prefix","#props","#media","resolveText","getCaptionTrackCount","#props","#media","resolveText","#props","#media","resolveText","#props","exitText","enterText","#media","resolveText","#props","#media","resolveText","#media","#loadState","#defaultCommandfor","#syncCommandFor","#mediaState","#core","#i18n","#options","#core","#children","#playback","#metadata","#disconnect","#adopt","#loadState","#image","#imageLoadState","#applySource","#owned","#imageEvents"],"sources":["../../core/dist/default/i18n/text/airplay.js","../../core/dist/default/i18n/text/cast.js","../../core/dist/default/core/ui/airplay-button/airplay-button-core.js","../../core/dist/default/core/ui/airplay-button/airplay-button-data-attrs.js","../../core/dist/default/i18n/text/captions.js","../../core/dist/default/core/ui/captions-button/captions-button-core.js","../../core/dist/default/core/ui/captions-button/captions-button-data-attrs.js","../../core/dist/default/core/ui/captions-radio-group/captions-radio-group-core.js","../../core/dist/default/core/ui/captions-radio-group/captions-radio-group-data-attrs.js","../../core/dist/default/core/ui/cast-button/cast-button-core.js","../../core/dist/default/core/ui/cast-button/cast-button-data-attrs.js","../../core/dist/default/core/ui/fullscreen-button/fullscreen-button-core.js","../../core/dist/default/core/ui/fullscreen-button/fullscreen-button-data-attrs.js","../../core/dist/default/i18n/text/pip.js","../../core/dist/default/core/ui/pip-button/pip-button-core.js","../../core/dist/default/core/ui/pip-button/pip-button-data-attrs.js","../../core/dist/default/core/ui/poster/poster-core.js","../../core/dist/default/core/ui/poster/poster-data-attrs.js","../src/ui/airplay-button/airplay-button-element.ts","../src/ui/command-for.ts","../src/ui/captions-button/captions-button-element.ts","../src/ui/captions-radio-group/captions-radio-group-element.ts","../src/ui/cast-button/cast-button-element.ts","../src/ui/fullscreen-button/fullscreen-button-element.ts","../src/ui/pip-button/pip-button-element.ts","../src/ui/poster/poster-element.ts"],"sourcesContent":["//#region src/core/i18n/text/airplay.ts\nconst prefix = \"airplay.\";\nconst startText = {\n\tkey: `${prefix}start`,\n\ttext: \"Start AirPlay\"\n};\nconst stopText = {\n\tkey: `${prefix}stop`,\n\ttext: \"Stop AirPlay\"\n};\n//#endregion\nexport { startText, stopText };\n\n//# sourceMappingURL=airplay.js.map","//#region src/core/i18n/text/cast.ts\nconst prefix = \"cast.\";\nconst startText = {\n\tkey: `${prefix}start`,\n\ttext: \"Start casting\"\n};\nconst stopText = {\n\tkey: `${prefix}stop`,\n\ttext: \"Stop casting\"\n};\nconst connectingText = {\n\tkey: `${prefix}connecting`,\n\ttext: \"Connecting\"\n};\n//#endregion\nexport { connectingText, startText, stopText };\n\n//# sourceMappingURL=cast.js.map","import { resolveText } from \"../../i18n/resolve-text.js\";\nimport { startText, stopText } from \"../../../i18n/text/airplay.js\";\nimport { connectingText } from \"../../../i18n/text/cast.js\";\nimport { resolveLabel } from \"../utils/resolve-label.js\";\nimport { createState } from \"@videojs/store\";\nimport { supportsWebKitAirPlay } from \"@videojs/utils/dom\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/airplay-button/airplay-button-core.ts\nvar AirPlayButtonCore = class AirPlayButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tstate: \"disconnected\",\n\t\tavailability: \"unsupported\",\n\t\tdisabled: true,\n\t\thidden: true,\n\t\tlabel: \"\"\n\t});\n\t#props = { ...AirPlayButtonCore.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, AirPlayButtonCore.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.state === \"connected\") return stopText;\n\t\tif (state.state === \"connecting\") return connectingText;\n\t\treturn startText;\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": state.disabled ? \"true\" : void 0,\n\t\t\thidden: state.hidden ? \"\" : 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 availability = supportsWebKitAirPlay() ? media.remotePlaybackAvailability : \"unsupported\";\n\t\tthis.state.patch({\n\t\t\tstate: media.remotePlaybackState,\n\t\t\tavailability,\n\t\t\tdisabled: this.#props.disabled || availability !== \"available\",\n\t\t\thidden: availability !== \"available\"\n\t\t});\n\t\tthis.state.patch({ label: resolveText(this.getLabel(this.state.current)) });\n\t\treturn this.state.current;\n\t}\n\tasync toggle(media) {\n\t\tthis.setMedia(media);\n\t\tif (this.getState().disabled) return;\n\t\ttry {\n\t\t\tawait media.toggleRemotePlayback();\n\t\t} catch {}\n\t}\n};\n//#endregion\nexport { AirPlayButtonCore };\n\n//# sourceMappingURL=airplay-button-core.js.map","//#region src/core/ui/airplay-button/airplay-button-data-attrs.ts\nconst AirPlayButtonDataAttrs = {\n\t/**\n\t* Current AirPlay connection state.\n\t*\n\t* @see https://developer.mozilla.org/en-US/docs/Web/API/RemotePlayback/state\n\t*/\n\tstate: \"data-airplay-state\",\n\t/**\n\t* Whether AirPlay is available on the active platform and media.\n\t*\n\t* @see https://developer.mozilla.org/en-US/docs/Web/API/RemotePlayback\n\t*/\n\tavailability: \"data-availability\",\n\t/** Present when the button is non-interactive (mirrors `aria-disabled`). */\n\tdisabled: \"data-disabled\",\n\t/** Present when the button is hidden because AirPlay is unavailable. */\n\thidden: \"data-hidden\"\n};\n//#endregion\nexport { AirPlayButtonDataAttrs };\n\n//# sourceMappingURL=airplay-button-data-attrs.js.map","//#region src/core/i18n/text/captions.ts\nconst prefix = \"captions.\";\nconst enableText = {\n\tkey: `${prefix}enable`,\n\ttext: \"Enable captions\"\n};\nconst disableText = {\n\tkey: `${prefix}disable`,\n\ttext: \"Disable captions\"\n};\n//#endregion\nexport { disableText, enableText };\n\n//# sourceMappingURL=captions.js.map","import { resolveText } from \"../../i18n/resolve-text.js\";\nimport { resolveLabel } from \"../utils/resolve-label.js\";\nimport { disableText, enableText } from \"../../../i18n/text/captions.js\";\nimport { createState } from \"@videojs/store\";\nimport { isCaptionOrSubtitleTrack } from \"@videojs/utils/dom\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/captions-button/captions-button-core.ts\nvar CaptionsButtonCore = class CaptionsButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false,\n\t\tmenuTrigger: false\n\t};\n\tstate = createState({\n\t\tsubtitlesShowing: false,\n\t\tavailability: \"unavailable\",\n\t\tdisabled: true,\n\t\thidden: true,\n\t\tlabel: \"\"\n\t});\n\t#props = { ...CaptionsButtonCore.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, CaptionsButtonCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst label = resolveLabel(this.#props.label, state);\n\t\tif (label) return label;\n\t\treturn state.subtitlesShowing ? disableText : enableText;\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": state.disabled ? \"true\" : void 0,\n\t\t\thidden: state.hidden ? \"\" : 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 availability = media.textTrackList.some(isCaptionOrSubtitleTrack) ? \"available\" : \"unavailable\";\n\t\tthis.state.patch({\n\t\t\tsubtitlesShowing: media.subtitlesShowing,\n\t\t\tavailability,\n\t\t\tdisabled: this.#props.disabled || availability !== \"available\",\n\t\t\thidden: availability === \"unavailable\"\n\t\t});\n\t\tthis.state.patch({ label: resolveText(this.getLabel(this.state.current)) });\n\t\treturn this.state.current;\n\t}\n\ttoggle(media) {\n\t\tthis.setMedia(media);\n\t\tif (this.getState().disabled) return;\n\t\tif (this.#props.menuTrigger && getCaptionTrackCount(media) > 1) return;\n\t\tmedia.toggleSubtitles();\n\t}\n};\nfunction getCaptionTrackCount(media) {\n\treturn media.textTrackList.filter(isCaptionOrSubtitleTrack).length;\n}\n//#endregion\nexport { CaptionsButtonCore };\n\n//# sourceMappingURL=captions-button-core.js.map","//#region src/core/ui/captions-button/captions-button-data-attrs.ts\nconst CaptionsButtonDataAttrs = {\n\t/** Present when captions are enabled. */\n\tsubtitlesShowing: \"data-active\",\n\t/** Indicates captions availability (`available` or `unavailable`). */\n\tavailability: \"data-availability\",\n\t/** Present when the button is non-interactive (mirrors `aria-disabled`). */\n\tdisabled: \"data-disabled\",\n\t/** Present when the button is hidden because no caption tracks are present. */\n\thidden: \"data-hidden\"\n};\n//#endregion\nexport { CaptionsButtonDataAttrs };\n\n//# sourceMappingURL=captions-button-data-attrs.js.map","import { resolveText } from \"../../i18n/resolve-text.js\";\nimport { resolveLabel } from \"../utils/resolve-label.js\";\nimport { captionsText, offText, subtitlesText } from \"../../../i18n/text/menu.js\";\nimport { createState } from \"@videojs/store\";\nimport { isCaptionOrSubtitleTrack } from \"@videojs/utils/dom\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/captions-radio-group/captions-radio-group-core.ts\nconst CAPTIONS_OFF_VALUE = \"off\";\nfunction formatTrackLabel(track) {\n\tif (track.label) return track.label;\n\tif (track.language) return track.language;\n\treturn track.kind === \"captions\" ? captionsText : subtitlesText;\n}\nfunction sortCaptionTracks(a, b) {\n\treturn a.kind > b.kind ? 1 : a.kind < b.kind ? -1 : 0;\n}\nfunction getCaptionTracks(textTrackList) {\n\treturn textTrackList.filter(isCaptionOrSubtitleTrack).sort(sortCaptionTracks);\n}\nvar CaptionsRadioGroupCore = class CaptionsRadioGroupCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tformatTrack: formatTrackLabel,\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\toptions: [{\n\t\t\tvalue: \"off\",\n\t\t\tlabel: offText,\n\t\t\tdisabled: false\n\t\t}],\n\t\tvalue: \"off\",\n\t\tsubtitlesShowing: false,\n\t\tdisabled: true,\n\t\thidden: true,\n\t\tavailability: \"unavailable\",\n\t\tlabel: \"\"\n\t});\n\t#props = { ...CaptionsRadioGroupCore.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, CaptionsRadioGroupCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst label = resolveLabel(this.#props.label, state);\n\t\tif (label) return label;\n\t\treturn captionsText;\n\t}\n\tgetTrackLabel(track) {\n\t\treturn this.#props.formatTrack(track);\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": state.disabled ? \"true\" : void 0,\n\t\t\thidden: state.hidden ? \"\" : 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 captionTracks = getCaptionTracks(media.textTrackList);\n\t\tconst showingIndex = captionTracks.findIndex((track) => track.mode === \"showing\");\n\t\tconst options = [{\n\t\t\tvalue: \"off\",\n\t\t\tlabel: offText,\n\t\t\tdisabled: false\n\t\t}, ...captionTracks.map((track, index) => ({\n\t\t\tvalue: track.id || String(index),\n\t\t\tlabel: this.getTrackLabel(track),\n\t\t\tdisabled: false\n\t\t}))];\n\t\tconst availability = captionTracks.length > 0 ? \"available\" : \"unavailable\";\n\t\tthis.state.patch({\n\t\t\toptions,\n\t\t\tvalue: showingIndex === -1 ? \"off\" : captionTracks[showingIndex].id || String(showingIndex),\n\t\t\tsubtitlesShowing: media.subtitlesShowing,\n\t\t\tdisabled: this.#props.disabled || captionTracks.length === 0,\n\t\t\thidden: availability === \"unavailable\",\n\t\t\tavailability\n\t\t});\n\t\tthis.state.patch({ label: resolveText(this.getLabel(this.state.current)) });\n\t\treturn this.state.current;\n\t}\n\tselect(media, value) {\n\t\tif (this.#props.disabled) return;\n\t\tconst captionTracks = getCaptionTracks(media.textTrackList);\n\t\tif (!captionTracks.length) return;\n\t\tif (value === \"off\") {\n\t\t\tmedia.selectSubtitlesTrack(\"off\");\n\t\t\treturn;\n\t\t}\n\t\tif (!captionTracks.some((track, index) => (track.id || String(index)) === value)) return;\n\t\tmedia.selectSubtitlesTrack(value);\n\t}\n\tselectValue(media, value) {\n\t\tthis.select(media, value);\n\t}\n};\n//#endregion\nexport { CAPTIONS_OFF_VALUE, CaptionsRadioGroupCore };\n\n//# sourceMappingURL=captions-radio-group-core.js.map","//#region src/core/ui/captions-radio-group/captions-radio-group-data-attrs.ts\nconst CaptionsRadioGroupDataAttrs = {\n\t/** Present when captions are enabled. */\n\tsubtitlesShowing: \"data-active\",\n\t/** Present when track selection is disabled. */\n\tdisabled: \"data-disabled\",\n\t/** Present when track selection is unavailable. */\n\thidden: \"data-hidden\",\n\t/** Indicates captions availability (`available` or `unavailable`). */\n\tavailability: \"data-availability\"\n};\n//#endregion\nexport { CaptionsRadioGroupDataAttrs };\n\n//# sourceMappingURL=captions-radio-group-data-attrs.js.map","import { resolveText } from \"../../i18n/resolve-text.js\";\nimport { connectingText, startText, stopText } from \"../../../i18n/text/cast.js\";\nimport { resolveLabel } from \"../utils/resolve-label.js\";\nimport { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/cast-button/cast-button-core.ts\nvar CastButtonCore = class CastButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tconnection: \"disconnected\",\n\t\tavailability: \"unsupported\",\n\t\tdisabled: true,\n\t\thidden: true,\n\t\tlabel: \"\"\n\t});\n\t#props = { ...CastButtonCore.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, CastButtonCore.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.connection === \"connected\") return stopText;\n\t\tif (state.connection === \"connecting\") return connectingText;\n\t\treturn startText;\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": state.disabled ? \"true\" : void 0,\n\t\t\thidden: state.hidden ? \"\" : 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 availability = !!globalThis.chrome ? media.remotePlaybackAvailability : \"unsupported\";\n\t\tthis.state.patch({\n\t\t\tconnection: media.remotePlaybackState,\n\t\t\tavailability,\n\t\t\tdisabled: this.#props.disabled || availability !== \"available\",\n\t\t\thidden: availability === \"unsupported\"\n\t\t});\n\t\tthis.state.patch({ label: resolveText(this.getLabel(this.state.current)) });\n\t\treturn this.state.current;\n\t}\n\tasync toggle(media) {\n\t\tthis.setMedia(media);\n\t\tif (this.getState().disabled) return;\n\t\treturn media.toggleRemotePlayback();\n\t}\n};\n//#endregion\nexport { CastButtonCore };\n\n//# sourceMappingURL=cast-button-core.js.map","//#region src/core/ui/cast-button/cast-button-data-attrs.ts\nconst CastButtonDataAttrs = {\n\t/**\n\t* Current remote playback connection state.\n\t*\n\t* @see https://developer.mozilla.org/en-US/docs/Web/API/RemotePlayback/state\n\t*/\n\tconnection: \"data-cast-state\",\n\t/**\n\t* Whether remote playback can be requested on this platform.\n\t*\n\t* @see https://developer.mozilla.org/en-US/docs/Web/API/RemotePlayback\n\t*/\n\tavailability: \"data-availability\",\n\t/** Present when the button is non-interactive (mirrors `aria-disabled`). */\n\tdisabled: \"data-disabled\",\n\t/** Present when the button is hidden because the feature is unsupported. */\n\thidden: \"data-hidden\"\n};\n//#endregion\nexport { CastButtonDataAttrs };\n\n//# sourceMappingURL=cast-button-data-attrs.js.map","import { resolveText } from \"../../i18n/resolve-text.js\";\nimport { resolveLabel } from \"../utils/resolve-label.js\";\nimport { enterText, exitText } from \"../../../i18n/text/fullscreen.js\";\nimport { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/fullscreen-button/fullscreen-button-core.ts\nvar FullscreenButtonCore = class FullscreenButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tfullscreen: false,\n\t\tavailability: \"unavailable\",\n\t\tdisabled: true,\n\t\thidden: true,\n\t\tlabel: \"\"\n\t});\n\t#props = { ...FullscreenButtonCore.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, FullscreenButtonCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst label = resolveLabel(this.#props.label, state);\n\t\tif (label) return label;\n\t\treturn state.fullscreen ? exitText : enterText;\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": state.disabled ? \"true\" : void 0,\n\t\t\thidden: state.hidden ? \"\" : 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 availability = media.fullscreenAvailability;\n\t\tthis.state.patch({\n\t\t\tfullscreen: media.fullscreen,\n\t\t\tavailability,\n\t\t\tdisabled: this.#props.disabled || availability !== \"available\",\n\t\t\thidden: availability !== \"available\"\n\t\t});\n\t\tthis.state.patch({ label: resolveText(this.getLabel(this.state.current)) });\n\t\treturn this.state.current;\n\t}\n\tasync toggle(media) {\n\t\tthis.setMedia(media);\n\t\tif (this.getState().disabled) return;\n\t\treturn media.fullscreen ? media.exitFullscreen() : media.requestFullscreen();\n\t}\n};\n//#endregion\nexport { FullscreenButtonCore };\n\n//# sourceMappingURL=fullscreen-button-core.js.map","//#region src/core/ui/fullscreen-button/fullscreen-button-data-attrs.ts\nconst FullscreenButtonDataAttrs = {\n\t/** Present when fullscreen mode is active. */\n\tfullscreen: \"data-fullscreen\",\n\t/** Indicates fullscreen availability (`available`, `unavailable`, `unsupported`). */\n\tavailability: \"data-availability\",\n\t/** Present when the button is non-interactive (mirrors `aria-disabled`). */\n\tdisabled: \"data-disabled\",\n\t/** Present when the button is hidden because fullscreen is not available. */\n\thidden: \"data-hidden\"\n};\n//#endregion\nexport { FullscreenButtonDataAttrs };\n\n//# sourceMappingURL=fullscreen-button-data-attrs.js.map","//#region src/core/i18n/text/pip.ts\nconst prefix = \"pip.\";\nconst enterText = {\n\tkey: `${prefix}enter`,\n\ttext: \"Enter picture-in-picture\"\n};\nconst exitText = {\n\tkey: `${prefix}exit`,\n\ttext: \"Exit picture-in-picture\"\n};\n//#endregion\nexport { enterText, exitText };\n\n//# sourceMappingURL=pip.js.map","import { resolveText } from \"../../i18n/resolve-text.js\";\nimport { resolveLabel } from \"../utils/resolve-label.js\";\nimport { enterText, exitText } from \"../../../i18n/text/pip.js\";\nimport { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/pip-button/pip-button-core.ts\nvar PiPButtonCore = class PiPButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tpip: false,\n\t\tavailability: \"unavailable\",\n\t\tdisabled: true,\n\t\thidden: true,\n\t\tlabel: \"\"\n\t});\n\t#props = { ...PiPButtonCore.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, PiPButtonCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst label = resolveLabel(this.#props.label, state);\n\t\tif (label) return label;\n\t\treturn state.pip ? exitText : enterText;\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": state.disabled ? \"true\" : void 0,\n\t\t\thidden: state.hidden ? \"\" : 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 availability = media.pipAvailability;\n\t\tthis.state.patch({\n\t\t\tpip: media.pip,\n\t\t\tavailability,\n\t\t\tdisabled: this.#props.disabled || availability !== \"available\",\n\t\t\thidden: availability !== \"available\"\n\t\t});\n\t\tthis.state.patch({ label: resolveText(this.getLabel(this.state.current)) });\n\t\treturn this.state.current;\n\t}\n\tasync toggle(media) {\n\t\tthis.setMedia(media);\n\t\tif (this.getState().disabled) return;\n\t\treturn media.pip ? media.exitPictureInPicture() : media.requestPictureInPicture();\n\t}\n};\n//#endregion\nexport { PiPButtonCore };\n\n//# sourceMappingURL=pip-button-core.js.map","//#region src/core/ui/pip-button/pip-button-data-attrs.ts\nconst PiPButtonDataAttrs = {\n\t/** Present when picture-in-picture mode is active. */\n\tpip: \"data-pip\",\n\t/** Indicates picture-in-picture availability (`available`, `unavailable`, `unsupported`). */\n\tavailability: \"data-availability\",\n\t/** Present when the button is non-interactive (mirrors `aria-disabled`). */\n\tdisabled: \"data-disabled\",\n\t/** Present when the button is hidden because picture-in-picture is not available. */\n\thidden: \"data-hidden\"\n};\n//#endregion\nexport { PiPButtonDataAttrs };\n\n//# sourceMappingURL=pip-button-data-attrs.js.map","//#region src/core/ui/poster/poster-core.ts\n/**\n* Turns playback and metadata into poster presentation state.\n*\n* Owns no image of its own: a binding finds one, supplies how it is faring\n* through {@link PosterCore.setImageLoadState}, and paints the result.\n*/\nvar PosterCore = class {\n\t#media = null;\n\t#loadState = \"none\";\n\t/** Supply the latest player state. Call before reading {@link PosterCore.getState}. */\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\t/** Supply how the binding's image is faring. */\n\tsetImageLoadState(loadState) {\n\t\tthis.#loadState = loadState;\n\t}\n\t/** Derive the presentation state to paint. */\n\tgetState() {\n\t\tconst media = this.#media;\n\t\treturn {\n\t\t\tvisible: !media.started,\n\t\t\tsrc: media.poster,\n\t\t\tloading: this.#loadState === \"loading\",\n\t\t\tloaded: this.#loadState === \"loaded\",\n\t\t\terror: this.#loadState === \"error\"\n\t\t};\n\t}\n};\n//#endregion\nexport { PosterCore };\n\n//# sourceMappingURL=poster-core.js.map","//#region src/core/ui/poster/poster-data-attrs.ts\nconst PosterDataAttrs = {\n\t/** Present until playback starts. */\n\tvisible: \"data-visible\",\n\t/** Present while the poster image is fetching. */\n\tloading: \"data-loading\",\n\t/** Present once the poster image has decoded. */\n\tloaded: \"data-loaded\",\n\t/** Present when the poster image failed. */\n\terror: \"data-error\"\n};\n//#endregion\nexport { PosterDataAttrs };\n\n//# sourceMappingURL=poster-data-attrs.js.map","import { AirPlayButtonCore, AirPlayButtonDataAttrs } from '@videojs/core';\nimport { selectRemotePlayback } from '@videojs/core/dom';\nimport type { MediaRemotePlaybackState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class AirPlayButtonElement extends MediaButtonElement<AirPlayButtonCore> {\n static readonly tagName = 'media-airplay-button';\n\n protected readonly core = new AirPlayButtonCore();\n protected readonly stateAttrMap = AirPlayButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectRemotePlayback);\n\n protected activate(state: MediaRemotePlaybackState): void {\n this.core.toggle(state);\n }\n}\n","/** Toggle a popup host linked via `commandfor` (menu, popover, etc.). */\nexport function toggleCommandTarget(host: HTMLElement, commandfor: string): void {\n const root = host.getRootNode() as Document | ShadowRoot;\n const target =\n ('getElementById' in root ? root.getElementById(commandfor) : null) ??\n root.querySelector<HTMLElement>(`#${CSS.escape(commandfor)}`);\n\n if (!target || !('open' in target)) return;\n\n const popup = target as { open: boolean };\n popup.open = !popup.open;\n}\n","import { CaptionsButtonCore, CaptionsButtonDataAttrs } from '@videojs/core';\nimport { applyElementProps, selectTextTrack, type UIEvent } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { MediaTextTrackState } from '@videojs/media';\nimport { isCaptionOrSubtitleTrack } from '@videojs/utils/dom';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { toggleCommandTarget } from '../command-for';\nimport { MediaButtonElement } from '../media-button-element';\n\nfunction getCaptionTrackCount(state: MediaTextTrackState): number {\n return state.textTrackList.filter(isCaptionOrSubtitleTrack).length;\n}\n\nexport class CaptionsButtonElement extends MediaButtonElement<CaptionsButtonCore> {\n static readonly tagName = 'media-captions-button';\n\n static override properties = {\n label: { type: String },\n disabled: { type: Boolean },\n commandfor: { type: String },\n menuFor: { type: String, attribute: 'menu-for' },\n } satisfies PropertyDeclarationMap<'label' | 'disabled' | 'commandfor' | 'menuFor'>;\n\n commandfor: string | undefined = undefined;\n menuFor: string | undefined = undefined;\n #defaultCommandfor: string | undefined = undefined;\n\n protected readonly core = new CaptionsButtonCore();\n protected readonly stateAttrMap = CaptionsButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectTextTrack);\n protected override readonly hotkeyAction = 'toggleSubtitles';\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.commandfor && this.commandfor !== this.menuFor) {\n this.#defaultCommandfor = this.commandfor;\n }\n }\n\n protected activate(state: MediaTextTrackState, event?: UIEvent): void {\n if (this.menuFor && getCaptionTrackCount(state) > 1) {\n if (event instanceof KeyboardEvent) {\n toggleCommandTarget(this, this.menuFor);\n }\n return;\n }\n\n this.core.toggle(state);\n }\n\n protected override getIsButtonDisabled(): boolean {\n const media = this.mediaState.value;\n if (super.getIsButtonDisabled()) return true;\n if (media && getCaptionTrackCount(media) === 0) return true;\n return false;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n\n if (changed.has('commandfor') && this.commandfor !== this.menuFor) {\n this.#defaultCommandfor = this.commandfor;\n }\n\n if (changed.has('commandfor') || changed.has('menuFor')) {\n this.#syncCommandFor();\n }\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.mediaState.value;\n if (!media) return;\n\n this.#syncCommandFor(media);\n\n if (this.menuFor && getCaptionTrackCount(media) > 1) {\n applyElementProps(this, {\n 'aria-disabled': this.getIsButtonDisabled() ? 'true' : undefined,\n });\n }\n }\n\n #syncCommandFor(media?: MediaTextTrackState): void {\n const state = media ?? this.mediaState.value;\n const target = state && this.menuFor && getCaptionTrackCount(state) > 1 ? this.menuFor : this.#defaultCommandfor;\n\n if (target) {\n this.setAttribute('commandfor', target);\n } else {\n this.removeAttribute('commandfor');\n }\n }\n}\n\nexport namespace CaptionsButtonElement {\n export type State = CaptionsButtonCore.State;\n}\n","import { CaptionsRadioGroupCore, CaptionsRadioGroupDataAttrs, type CaptionsRadioGroupOption } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectTextTrack } from '@videojs/core/dom';\nimport { type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MenuRadioGroupElement } from '../menu/menu-radio-group-element';\nimport { RadioOptionsController } from '../radio-options/radio-options-controller';\n\nexport class CaptionsRadioGroupElement extends MenuRadioGroupElement {\n static override readonly tagName = 'media-captions-radio-group';\n\n static override properties = {\n ...MenuRadioGroupElement.properties,\n disabled: { type: Boolean },\n label: { type: String },\n } satisfies PropertyDeclarationMap<'value' | 'label' | 'disabled'>;\n\n disabled = false;\n label: Text | string = '';\n formatTrack = CaptionsRadioGroupCore.defaultProps.formatTrack;\n\n readonly #core = new CaptionsRadioGroupCore();\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #mediaState = new PlayerController(this, playerContext, selectTextTrack);\n readonly #options = new RadioOptionsController<CaptionsRadioGroupOption>(this, {\n setItemAttributes: (item, option) => item.setAttribute('data-track', option.value),\n onValueChange: (value) => {\n const media = this.#mediaState.value;\n if (media) this.#core.selectValue(media, value);\n },\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n if (__DEV__ && !this.#mediaState.value && this.#mediaState.displayName) {\n logMissingFeature(this.localName, this.#mediaState.displayName);\n }\n }\n\n protected override update(changed: PropertyValues): void {\n const media = this.#mediaState.value;\n let state: CaptionsRadioGroupCore.State | null = null;\n\n if (media) {\n this.#core.setProps({ formatTrack: this.formatTrack, disabled: this.disabled, label: this.label });\n this.#core.setMedia(media);\n state = this.#core.getState();\n\n this.applyDefaultAriaLabel(translateText(this.#core.getLabel(state), this.#i18n.value));\n this.#options.sync(state, this.#i18n.value, this.#i18n.locale);\n this.publishMenuTriggerState(state.disabled, state.availability);\n }\n\n super.update(changed);\n\n if (state) applyStateDataAttrs(this, state, CaptionsRadioGroupDataAttrs);\n }\n}\n\nexport namespace CaptionsRadioGroupElement {\n export type State = CaptionsRadioGroupCore.State;\n}\n","import { CastButtonCore, CastButtonDataAttrs } from '@videojs/core';\nimport { selectRemotePlayback } from '@videojs/core/dom';\nimport type { MediaRemotePlaybackState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class CastButtonElement extends MediaButtonElement<CastButtonCore> {\n static readonly tagName = 'media-cast-button';\n\n protected readonly core = new CastButtonCore();\n protected readonly stateAttrMap = CastButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectRemotePlayback);\n\n protected activate(state: MediaRemotePlaybackState): Promise<void> {\n return this.core.toggle(state);\n }\n}\n","import { FullscreenButtonCore, FullscreenButtonDataAttrs } from '@videojs/core';\nimport { selectFullscreen } from '@videojs/core/dom';\nimport type { MediaFullscreenState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class FullscreenButtonElement extends MediaButtonElement<FullscreenButtonCore> {\n static readonly tagName = 'media-fullscreen-button';\n\n protected readonly core = new FullscreenButtonCore();\n protected readonly stateAttrMap = FullscreenButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectFullscreen);\n protected override readonly hotkeyAction = 'toggleFullscreen';\n\n protected activate(state: MediaFullscreenState): Promise<void> {\n return this.core.toggle(state);\n }\n}\n","import { PiPButtonCore, PiPButtonDataAttrs } from '@videojs/core';\nimport { selectPiP } from '@videojs/core/dom';\nimport type { MediaPictureInPictureState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class PiPButtonElement extends MediaButtonElement<PiPButtonCore> {\n static readonly tagName = 'media-pip-button';\n\n protected readonly core = new PiPButtonCore();\n protected readonly stateAttrMap = PiPButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectPiP);\n protected override readonly hotkeyAction = 'togglePictureInPicture';\n\n protected activate(state: MediaPictureInPictureState): Promise<void> {\n return this.core.toggle(state);\n }\n}\n","import { PosterCore, PosterDataAttrs, type PosterImageLoadState } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectMetadata, selectPlayback } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\n/** What an element composes: whatever fills a slot, or the element's own children. */\nfunction composedChildren(element: Element): Element[] {\n if (element instanceof HTMLSlotElement) {\n const assigned = element.assignedElements();\n if (assigned.length > 0) return assigned;\n }\n\n return [...element.children];\n}\n\n/**\n * The first image an element composes. A skin forwards its own\n * `<slot name=\"poster\">` in, so the image is a slot or two down and may be\n * wrapped in a `<picture>` or a framework image component.\n */\nfunction findImage(element: Element): HTMLImageElement | null {\n for (const child of composedChildren(element)) {\n if (child instanceof HTMLImageElement) return child;\n\n const nested = findImage(child);\n if (nested) return nested;\n }\n\n return null;\n}\n\n/**\n * Whether anything already points this image somewhere, which answers both\n * whether the author owns the source and whether there is a download to wait\n * for. A `<source>` counts: inside a `<picture>` it can win over the `src`.\n */\nfunction hasSource(img: HTMLImageElement): boolean {\n if (img.hasAttribute('src') || img.hasAttribute('srcset')) return true;\n\n const parent = img.parentElement;\n return parent?.localName === 'picture' && parent.querySelector('source') !== null;\n}\n\n/**\n * Whether `complete` on this image describes a request. It is also true for one\n * that omits both `src` and `srcset`, whatever a parent `<picture>` is fetching\n * on its behalf, so only an image sourced from its own attributes can be read.\n */\nfunction hasOwnSource(img: HTMLImageElement): boolean {\n return !!img.getAttribute('src') || img.hasAttribute('srcset');\n}\n\n/** How the current source is faring. */\ntype ImageLoadState = 'pending' | 'loaded' | 'error';\n\n/**\n * `<media-poster>` — sets `src` on a poster image it does not own.\n *\n * The image is a child, as in `<picture>`, but sourcing runs the other way\n * around: `<picture>` treats the `src` on its `<img>` as the fallback, while\n * here an image with no source of its own is the one this element fills in.\n * Give the child a `src`, a `srcset`, or `<source>` candidates and it is yours,\n * left alone.\n *\n * Renders no image of its own, so include one:\n * `<media-poster><img alt=\"\"></media-poster>`. Inside a skin, an\n * `<img slot=\"poster\">` of yours replaces the one the skin carries.\n */\nexport class PosterElement extends MediaElement {\n static readonly tagName = 'media-poster';\n\n static get observedAttributes(): string[] {\n // biome-ignore lint/complexity/noThisInStatic: intentional use of super\n return [...super.observedAttributes, 'placeholdersrc'];\n }\n\n readonly #core = new PosterCore();\n readonly #children = new MutationObserver(() => this.requestUpdate());\n\n readonly #playback = new PlayerController(this, playerContext, selectPlayback);\n readonly #metadata = new PlayerController(this, playerContext, selectMetadata);\n\n #image: HTMLImageElement | null = null;\n /** Whether `#image` had no source of its own when it became active. */\n #owned = false;\n #imageLoadState: ImageLoadState = 'pending';\n\n #imageEvents: AbortController | null = null;\n #disconnect: AbortController | null = null;\n #warnedMissingImage = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#disconnect = new AbortController();\n const { signal } = this.#disconnect;\n\n // Two ways the image can change: a skin's forwarding slot fills or empties,\n // which bubbles here, or a child is added or removed, which announces nothing.\n this.addEventListener('slotchange', () => this.requestUpdate(), { signal });\n this.#children.observe(this, { childList: true, subtree: true });\n\n if (__DEV__ && !this.#playback.value) {\n logMissingFeature(this.localName, this.#playback.displayName ?? 'playback');\n }\n }\n\n override attributeChangedCallback(attr: string, oldValue: string | null, newValue: string | null): void {\n super.attributeChangedCallback(attr, oldValue, newValue);\n\n if (attr === 'placeholdersrc') {\n if (newValue) {\n this.style.setProperty('--media-poster-placeholder', `url(${newValue})`);\n } else {\n this.style.removeProperty('--media-poster-placeholder');\n }\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.#adopt(null);\n this.#children.disconnect();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n get #loadState(): PosterImageLoadState {\n if (!this.#image || !hasSource(this.#image)) return 'none';\n return this.#imageLoadState === 'pending' ? 'loading' : this.#imageLoadState;\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const playback = this.#playback.value;\n if (!playback) return;\n\n // `metadata` is optional: without it nothing resolves a URL, and this stays\n // a visibility wrapper around whatever the author supplied.\n this.#core.setMedia({\n started: playback.started,\n poster: this.#metadata.value?.poster ?? '',\n });\n\n const { src } = this.#core.getState();\n\n this.#adopt(findImage(this));\n this.#applySource(src);\n\n this.#core.setImageLoadState(this.#loadState);\n applyStateDataAttrs(this, this.#core.getState(), PosterDataAttrs);\n }\n\n /**\n * Ownership is settled once, when an image becomes active: after the first fill\n * the `src` we set would itself look authored. Re-slot an image with a source\n * to hand it back, the way React decides a field is controlled at mount.\n */\n #adopt(next: HTMLImageElement | null): void {\n if (next === this.#image) return;\n\n // An image that steps aside keeps downloading whatever we pointed it at.\n if (this.#owned) this.#image?.removeAttribute('src');\n this.#imageEvents?.abort();\n this.#imageEvents = null;\n\n this.#image = next;\n this.#owned = next !== null && !hasSource(next);\n this.#imageLoadState = 'pending';\n\n if (!next) return;\n\n // An image that finished before we started listening never fires again, so\n // its load state has to be read off it. Decoded pixels stand on their own;\n // the absence of them only means failure once `complete` can be trusted.\n if (next.naturalWidth > 0) this.#imageLoadState = 'loaded';\n else if (next.complete && hasOwnSource(next)) this.#imageLoadState = 'error';\n\n this.#imageEvents = new AbortController();\n const { signal } = this.#imageEvents;\n const settle = (loadState: ImageLoadState) => () => {\n this.#imageLoadState = loadState;\n this.requestUpdate();\n };\n\n next.addEventListener('load', settle('loaded'), { signal });\n next.addEventListener('error', settle('error'), { signal });\n }\n\n #applySource(src: string): void {\n const img = this.#image;\n\n if (!img) {\n if (__DEV__ && src && !this.#warnedMissingImage) {\n this.#warnedMissingImage = true;\n console.warn(\n `<${this.localName}> resolved a poster but has no image to put it in. ` +\n `Add one as a child: <${this.localName}><img alt=\"\"></${this.localName}>`\n );\n }\n return;\n }\n\n if (!this.#owned) return;\n\n if (!src) {\n this.#imageLoadState = 'pending';\n img.removeAttribute('src');\n } else if (img.getAttribute('src') !== src) {\n // Reset before the write, not after: how the last source fared says\n // nothing about this one, and the write itself can settle it.\n this.#imageLoadState = 'pending';\n img.setAttribute('src', src);\n }\n }\n}\n"],"mappings":"qiBACA,MAAMA,EAAS,WACTC,EAAY,CACjB,IAAK,GAAGD,EAAO,OACf,KAAM,eACP,EACME,EAAW,CAChB,IAAK,GAAGF,EAAO,MACf,KAAM,cACP,ECRMG,EAAS,QACT,EAAY,CACjB,IAAK,GAAGA,EAAO,OACf,KAAM,eACP,EACM,EAAW,CAChB,IAAK,GAAGA,EAAO,MACf,KAAM,cACP,EACM,EAAiB,CACtB,IAAK,GAAGA,EAAO,YACf,KAAM,YACP,ECLA,IAAI,EAAoB,MAAM,CAAkB,CAC/C,OAAO,aAAe,CACrB,MAAO,GACP,SAAU,EACX,EACA,MAAQ,EAAY,CACnB,MAAO,eACP,aAAc,cACd,SAAU,GACV,OAAQ,GACR,MAAO,EACR,CAAC,EACD,GAAS,CAAE,GAAG,EAAkB,YAAa,EAC7C,GAAS,KACT,YAAY,EAAO,CACd,GAAO,KAAK,SAAS,CAAK,CAC/B,CACA,SAAS,EAAO,CACf,KAAKC,GAAS,EAAS,EAAO,EAAkB,YAAY,CAC7D,CACA,SAAS,EAAO,CAKf,OAJc,EAAa,KAAKA,GAAO,MAAO,CAC1C,IACA,EAAM,QAAU,YAAoBC,EACpC,EAAM,QAAU,aAAqB,EAClCC,EACR,CACA,SAAS,EAAO,CACf,MAAO,CACN,aAAc,KAAK,SAAS,CAAK,EACjC,gBAAiB,EAAM,SAAW,OAAS,IAAK,GAChD,OAAQ,EAAM,OAAS,GAAK,IAAK,EAClC,CACD,CACA,SAAS,EAAO,CACf,KAAKC,GAAS,CACf,CACA,UAAW,CACV,IAAM,EAAQ,KAAKA,GACb,EAAe,GAAsB,EAAI,EAAM,2BAA6B,cAQlF,OAPA,KAAK,MAAM,MAAM,CAChB,MAAO,EAAM,oBACb,eACA,SAAU,KAAKH,GAAO,UAAY,IAAiB,YACnD,OAAQ,IAAiB,WAC1B,CAAC,EACD,KAAK,MAAM,MAAM,CAAE,MAAOI,EAAY,KAAK,SAAS,KAAK,MAAM,OAAO,CAAC,CAAE,CAAC,EACnE,KAAK,MAAM,OACnB,CACA,MAAM,OAAO,EAAO,CACnB,QAAK,SAAS,CAAK,EACf,MAAK,SAAS,CAAC,CAAC,SACpB,GAAI,CACH,MAAM,EAAM,qBAAqB,CAClC,MAAQ,CAAC,CACV,CACD,EC/DA,MAAM,EAAyB,CAM9B,MAAO,qBAMP,aAAc,oBAEd,SAAU,gBAEV,OAAQ,aACT,ECjBMC,EAAS,YACT,EAAa,CAClB,IAAK,GAAGA,EAAO,QACf,KAAM,iBACP,EACM,EAAc,CACnB,IAAK,GAAGA,EAAO,SACf,KAAM,kBACP,ECFA,IAAI,EAAqB,MAAM,CAAmB,CACjD,OAAO,aAAe,CACrB,MAAO,GACP,SAAU,GACV,YAAa,EACd,EACA,MAAQ,EAAY,CACnB,iBAAkB,GAClB,aAAc,cACd,SAAU,GACV,OAAQ,GACR,MAAO,EACR,CAAC,EACD,GAAS,CAAE,GAAG,EAAmB,YAAa,EAC9C,GAAS,KACT,YAAY,EAAO,CACd,GAAO,KAAK,SAAS,CAAK,CAC/B,CACA,SAAS,EAAO,CACf,KAAKC,GAAS,EAAS,EAAO,EAAmB,YAAY,CAC9D,CACA,SAAS,EAAO,CAGf,OAFc,EAAa,KAAKA,GAAO,MAAO,CAC1C,IACG,EAAM,iBAAmB,EAAc,EAC/C,CACA,SAAS,EAAO,CACf,MAAO,CACN,aAAc,KAAK,SAAS,CAAK,EACjC,gBAAiB,EAAM,SAAW,OAAS,IAAK,GAChD,OAAQ,EAAM,OAAS,GAAK,IAAK,EAClC,CACD,CACA,SAAS,EAAO,CACf,KAAKC,GAAS,CACf,CACA,UAAW,CACV,IAAM,EAAQ,KAAKA,GACb,EAAe,EAAM,cAAc,KAAK,CAAwB,EAAI,YAAc,cAQxF,OAPA,KAAK,MAAM,MAAM,CAChB,iBAAkB,EAAM,iBACxB,eACA,SAAU,KAAKD,GAAO,UAAY,IAAiB,YACnD,OAAQ,IAAiB,aAC1B,CAAC,EACD,KAAK,MAAM,MAAM,CAAE,MAAOE,EAAY,KAAK,SAAS,KAAK,MAAM,OAAO,CAAC,CAAE,CAAC,EACnE,KAAK,MAAM,OACnB,CACA,OAAO,EAAO,CACb,KAAK,SAAS,CAAK,EACf,MAAK,SAAS,CAAC,CAAC,WAChB,KAAKF,GAAO,aAAeG,EAAqB,CAAK,EAAI,GAC7D,EAAM,gBAAgB,EACvB,CACD,EACA,SAASA,EAAqB,EAAO,CACpC,OAAO,EAAM,cAAc,OAAO,CAAwB,CAAC,CAAC,MAC7D,CC/DA,MAAM,EAA0B,CAE/B,iBAAkB,cAElB,aAAc,oBAEd,SAAU,gBAEV,OAAQ,aACT,ECFA,SAAS,EAAiB,EAAO,CAGhC,OAFI,EAAM,MAAc,EAAM,MAC1B,EAAM,SAAiB,EAAM,SAC1B,EAAM,OAAS,WAAa,EAAe,CACnD,CACA,SAAS,EAAkB,EAAG,EAAG,CAChC,OAAO,EAAE,KAAO,EAAE,KAAO,EAAI,EAAE,KAAO,EAAE,KAAO,GAAK,CACrD,CACA,SAAS,EAAiB,EAAe,CACxC,OAAO,EAAc,OAAO,CAAwB,CAAC,CAAC,KAAK,CAAiB,CAC7E,CACA,IAAI,EAAyB,MAAM,CAAuB,CACzD,OAAO,aAAe,CACrB,MAAO,GACP,YAAa,EACb,SAAU,EACX,EACA,MAAQ,EAAY,CACnB,QAAS,CAAC,CACT,MAAO,MACP,MAAO,EACP,SAAU,EACX,CAAC,EACD,MAAO,MACP,iBAAkB,GAClB,SAAU,GACV,OAAQ,GACR,aAAc,cACd,MAAO,EACR,CAAC,EACD,GAAS,CAAE,GAAG,EAAuB,YAAa,EAClD,GAAS,KACT,YAAY,EAAO,CACd,GAAO,KAAK,SAAS,CAAK,CAC/B,CACA,SAAS,EAAO,CACf,KAAKC,GAAS,EAAS,EAAO,EAAuB,YAAY,CAClE,CACA,SAAS,EAAO,CAGf,OAFc,EAAa,KAAKA,GAAO,MAAO,CAC1C,GACG,CACR,CACA,cAAc,EAAO,CACpB,OAAO,KAAKA,GAAO,YAAY,CAAK,CACrC,CACA,SAAS,EAAO,CACf,MAAO,CACN,aAAc,KAAK,SAAS,CAAK,EACjC,gBAAiB,EAAM,SAAW,OAAS,IAAK,GAChD,OAAQ,EAAM,OAAS,GAAK,IAAK,EAClC,CACD,CACA,SAAS,EAAO,CACf,KAAKC,GAAS,CACf,CACA,UAAW,CACV,IAAM,EAAQ,KAAKA,GACb,EAAgB,EAAiB,EAAM,aAAa,EACpD,EAAe,EAAc,UAAW,GAAU,EAAM,OAAS,SAAS,EAC1E,EAAU,CAAC,CAChB,MAAO,MACP,MAAO,EACP,SAAU,EACX,EAAG,GAAG,EAAc,KAAK,EAAO,KAAW,CAC1C,MAAO,EAAM,IAAM,OAAO,CAAK,EAC/B,MAAO,KAAK,cAAc,CAAK,EAC/B,SAAU,EACX,EAAE,CAAC,EACG,EAAe,EAAc,OAAS,EAAI,YAAc,cAU9D,OATA,KAAK,MAAM,MAAM,CAChB,UACA,MAAO,IAAiB,GAAK,MAAQ,EAAc,EAAa,CAAC,IAAM,OAAO,CAAY,EAC1F,iBAAkB,EAAM,iBACxB,SAAU,KAAKD,GAAO,UAAY,EAAc,SAAW,EAC3D,OAAQ,IAAiB,cACzB,cACD,CAAC,EACD,KAAK,MAAM,MAAM,CAAE,MAAOE,EAAY,KAAK,SAAS,KAAK,MAAM,OAAO,CAAC,CAAE,CAAC,EACnE,KAAK,MAAM,OACnB,CACA,OAAO,EAAO,EAAO,CACpB,GAAI,KAAKF,GAAO,SAAU,OAC1B,IAAM,EAAgB,EAAiB,EAAM,aAAa,EACrD,KAAc,OACnB,IAAI,IAAU,MAAO,CACpB,EAAM,qBAAqB,KAAK,EAChC,MACD,CACK,EAAc,MAAM,EAAO,KAAW,EAAM,IAAM,OAAO,CAAK,KAAO,CAAK,GAC/E,EAAM,qBAAqB,CAAK,CAFhC,CAGD,CACA,YAAY,EAAO,EAAO,CACzB,KAAK,OAAO,EAAO,CAAK,CACzB,CACD,ECtGA,MAAM,EAA8B,CAEnC,iBAAkB,cAElB,SAAU,gBAEV,OAAQ,cAER,aAAc,mBACf,ECJA,IAAI,GAAiB,MAAM,CAAe,CACzC,OAAO,aAAe,CACrB,MAAO,GACP,SAAU,EACX,EACA,MAAQ,EAAY,CACnB,WAAY,eACZ,aAAc,cACd,SAAU,GACV,OAAQ,GACR,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,KAAKG,GAAS,EAAS,EAAO,EAAe,YAAY,CAC1D,CACA,SAAS,EAAO,CAKf,OAJc,EAAa,KAAKA,GAAO,MAAO,CAC1C,IACA,EAAM,aAAe,YAAoB,EACzC,EAAM,aAAe,aAAqB,EACvC,EACR,CACA,SAAS,EAAO,CACf,MAAO,CACN,aAAc,KAAK,SAAS,CAAK,EACjC,gBAAiB,EAAM,SAAW,OAAS,IAAK,GAChD,OAAQ,EAAM,OAAS,GAAK,IAAK,EAClC,CACD,CACA,SAAS,EAAO,CACf,KAAKC,GAAS,CACf,CACA,UAAW,CACV,IAAM,EAAQ,KAAKA,GACb,EAAiB,WAAW,OAAS,EAAM,2BAA6B,cAQ9E,OAPA,KAAK,MAAM,MAAM,CAChB,WAAY,EAAM,oBAClB,eACA,SAAU,KAAKD,GAAO,UAAY,IAAiB,YACnD,OAAQ,IAAiB,aAC1B,CAAC,EACD,KAAK,MAAM,MAAM,CAAE,MAAOE,EAAY,KAAK,SAAS,KAAK,MAAM,OAAO,CAAC,CAAE,CAAC,EACnE,KAAK,MAAM,OACnB,CACA,MAAM,OAAO,EAAO,CACnB,QAAK,SAAS,CAAK,EACf,MAAK,SAAS,CAAC,CAAC,SACpB,OAAO,EAAM,qBAAqB,CACnC,CACD,EC3DA,MAAM,EAAsB,CAM3B,WAAY,kBAMZ,aAAc,oBAEd,SAAU,gBAEV,OAAQ,aACT,ECZA,IAAI,EAAuB,MAAM,CAAqB,CACrD,OAAO,aAAe,CACrB,MAAO,GACP,SAAU,EACX,EACA,MAAQ,EAAY,CACnB,WAAY,GACZ,aAAc,cACd,SAAU,GACV,OAAQ,GACR,MAAO,EACR,CAAC,EACD,GAAS,CAAE,GAAG,EAAqB,YAAa,EAChD,GAAS,KACT,YAAY,EAAO,CACd,GAAO,KAAK,SAAS,CAAK,CAC/B,CACA,SAAS,EAAO,CACf,KAAKC,GAAS,EAAS,EAAO,EAAqB,YAAY,CAChE,CACA,SAAS,EAAO,CAGf,OAFc,EAAa,KAAKA,GAAO,MAAO,CAC1C,IACG,EAAM,WAAaC,GAAWC,EACtC,CACA,SAAS,EAAO,CACf,MAAO,CACN,aAAc,KAAK,SAAS,CAAK,EACjC,gBAAiB,EAAM,SAAW,OAAS,IAAK,GAChD,OAAQ,EAAM,OAAS,GAAK,IAAK,EAClC,CACD,CACA,SAAS,EAAO,CACf,KAAKC,GAAS,CACf,CACA,UAAW,CACV,IAAM,EAAQ,KAAKA,GACb,EAAe,EAAM,uBAQ3B,OAPA,KAAK,MAAM,MAAM,CAChB,WAAY,EAAM,WAClB,eACA,SAAU,KAAKH,GAAO,UAAY,IAAiB,YACnD,OAAQ,IAAiB,WAC1B,CAAC,EACD,KAAK,MAAM,MAAM,CAAE,MAAOI,EAAY,KAAK,SAAS,KAAK,MAAM,OAAO,CAAC,CAAE,CAAC,EACnE,KAAK,MAAM,OACnB,CACA,MAAM,OAAO,EAAO,CACnB,QAAK,SAAS,CAAK,EACf,MAAK,SAAS,CAAC,CAAC,SACpB,OAAO,EAAM,WAAa,EAAM,eAAe,EAAI,EAAM,kBAAkB,CAC5E,CACD,ECzDA,MAAM,EAA4B,CAEjC,WAAY,kBAEZ,aAAc,oBAEd,SAAU,gBAEV,OAAQ,aACT,ECTM,EAAS,OACT,EAAY,CACjB,IAAK,GAAG,EAAO,OACf,KAAM,0BACP,EACM,EAAW,CAChB,IAAK,GAAG,EAAO,MACf,KAAM,yBACP,ECHA,IAAI,GAAgB,MAAM,CAAc,CACvC,OAAO,aAAe,CACrB,MAAO,GACP,SAAU,EACX,EACA,MAAQ,EAAY,CACnB,IAAK,GACL,aAAc,cACd,SAAU,GACV,OAAQ,GACR,MAAO,EACR,CAAC,EACD,GAAS,CAAE,GAAG,EAAc,YAAa,EACzC,GAAS,KACT,YAAY,EAAO,CACd,GAAO,KAAK,SAAS,CAAK,CAC/B,CACA,SAAS,EAAO,CACf,KAAKC,GAAS,EAAS,EAAO,EAAc,YAAY,CACzD,CACA,SAAS,EAAO,CAGf,OAFc,EAAa,KAAKA,GAAO,MAAO,CAC1C,IACG,EAAM,IAAM,EAAW,EAC/B,CACA,SAAS,EAAO,CACf,MAAO,CACN,aAAc,KAAK,SAAS,CAAK,EACjC,gBAAiB,EAAM,SAAW,OAAS,IAAK,GAChD,OAAQ,EAAM,OAAS,GAAK,IAAK,EAClC,CACD,CACA,SAAS,EAAO,CACf,KAAKC,GAAS,CACf,CACA,UAAW,CACV,IAAM,EAAQ,KAAKA,GACb,EAAe,EAAM,gBAQ3B,OAPA,KAAK,MAAM,MAAM,CAChB,IAAK,EAAM,IACX,eACA,SAAU,KAAKD,GAAO,UAAY,IAAiB,YACnD,OAAQ,IAAiB,WAC1B,CAAC,EACD,KAAK,MAAM,MAAM,CAAE,MAAOE,EAAY,KAAK,SAAS,KAAK,MAAM,OAAO,CAAC,CAAE,CAAC,EACnE,KAAK,MAAM,OACnB,CACA,MAAM,OAAO,EAAO,CACnB,QAAK,SAAS,CAAK,EACf,MAAK,SAAS,CAAC,CAAC,SACpB,OAAO,EAAM,IAAM,EAAM,qBAAqB,EAAI,EAAM,wBAAwB,CACjF,CACD,ECzDA,MAAM,GAAqB,CAE1B,IAAK,WAEL,aAAc,oBAEd,SAAU,gBAEV,OAAQ,aACT,ECHA,IAAI,GAAa,KAAM,CACtB,GAAS,KACT,GAAa,OAEb,SAAS,EAAO,CACf,KAAKC,GAAS,CACf,CAEA,kBAAkB,EAAW,CAC5B,KAAKC,GAAa,CACnB,CAEA,UAAW,CACV,IAAM,EAAQ,KAAKD,GACnB,MAAO,CACN,QAAS,CAAC,EAAM,QAChB,IAAK,EAAM,OACX,QAAS,KAAKC,KAAe,UAC7B,OAAQ,KAAKA,KAAe,SAC5B,MAAO,KAAKA,KAAe,OAC5B,CACD,CACD,EC5BA,MAAM,GAAkB,CAEvB,QAAS,eAET,QAAS,eAET,OAAQ,cAER,MAAO,YACR,ECFA,IAAa,GAAb,cAA0C,CAAsC,+BAGpD,KAAA,KAAA,IAAI,EACI,KAAA,aAAA,EACF,KAAA,WAAA,IAAI,EAAiB,KAAM,EAAe,CAAoB,SAJpE,KAAA,QAAA,uBAM1B,SAAmB,EAAuC,CACxD,KAAK,KAAK,OAAO,CAAK,CACxB,CACF,ECjBA,SAAgB,GAAoB,EAAmB,EAA0B,CAC/E,IAAM,EAAO,EAAK,YAAY,EACxB,GACH,mBAAoB,EAAO,EAAK,eAAe,CAAU,EAAI,OAC9D,EAAK,cAA2B,IAAI,IAAI,OAAO,CAAU,GAAG,EAE9D,GAAI,CAAC,GAAU,EAAE,SAAU,GAAS,OAEpC,IAAM,EAAQ,EACd,EAAM,KAAO,CAAC,EAAM,IACtB,CCAA,SAAS,EAAqB,EAAoC,CAChE,OAAO,EAAM,cAAc,OAAO,CAAwB,CAAC,CAAC,MAC9D,CAEA,IAAa,GAAb,cAA2C,CAAuC,+BAU/C,KAAA,WAAA,IAAA,GACH,KAAA,QAAA,IAAA,GACW,KAAA,GAAA,IAAA,GAEf,KAAA,KAAA,IAAI,EACI,KAAA,aAAA,EACF,KAAA,WAAA,IAAI,EAAiB,KAAM,EAAe,CAAe,EAC9C,KAAA,aAAA,yBAhBjB,KAAA,QAAA,+BAEG,KAAA,WAAA,CAC3B,MAAO,CAAE,KAAM,MAAO,EACtB,SAAU,CAAE,KAAM,OAAQ,EAC1B,WAAY,CAAE,KAAM,MAAO,EAC3B,QAAS,CAAE,KAAM,OAAQ,UAAW,UAAW,CACjD,EAIA,GAOA,mBAAmC,CACjC,MAAM,kBAAkB,EACpB,KAAK,YAAc,KAAK,aAAe,KAAK,UAC9C,KAAKC,GAAqB,KAAK,WAEnC,CAEA,SAAmB,EAA4B,EAAuB,CACpE,GAAI,KAAK,SAAW,EAAqB,CAAK,EAAI,EAAG,CAC/C,aAAiB,eACnB,GAAoB,KAAM,KAAK,OAAO,EAExC,MACF,CAEA,KAAK,KAAK,OAAO,CAAK,CACxB,CAEA,qBAAkD,CAChD,IAAM,EAAQ,KAAK,WAAW,MAG9B,MADA,GADI,MAAM,oBAAoB,GAC1B,GAAS,EAAqB,CAAK,IAAM,EAE/C,CAEA,WAA8B,EAA+B,CAC3D,MAAM,WAAW,CAAO,EAEpB,EAAQ,IAAI,YAAY,GAAK,KAAK,aAAe,KAAK,UACxD,KAAKA,GAAqB,KAAK,aAG7B,EAAQ,IAAI,YAAY,GAAK,EAAQ,IAAI,SAAS,IACpD,KAAKC,GAAgB,CAEzB,CAEA,OAA0B,EAA+B,CACvD,MAAM,OAAO,CAAO,EAEpB,IAAM,EAAQ,KAAK,WAAW,MACzB,IAEL,KAAKA,GAAgB,CAAK,EAEtB,KAAK,SAAW,EAAqB,CAAK,EAAI,GAChD,GAAkB,KAAM,CACtB,gBAAiB,KAAK,oBAAoB,EAAI,OAAS,IAAA,EACzD,CAAC,EAEL,CAEA,GAAgB,EAAmC,CACjD,IAAM,EAAQ,GAAS,KAAK,WAAW,MACjC,EAAS,GAAS,KAAK,SAAW,EAAqB,CAAK,EAAI,EAAI,KAAK,QAAU,KAAKD,GAE1F,EACF,KAAK,aAAa,aAAc,CAAM,EAEtC,KAAK,gBAAgB,YAAY,CAErC,CACF,ECrFa,GAAb,cAA+C,CAAsB,+BASxD,KAAA,SAAA,GACY,KAAA,MAAA,GACT,KAAA,YAAA,EAAuB,aAAa,YAEjC,KAAA,GAAA,IAAI,EACJ,KAAA,GAAA,IAAI,EAAe,KAAM,CAAW,EAC9B,KAAA,GAAA,IAAI,EAAiB,KAAM,EAAe,CAAe,EAC5D,KAAA,GAAA,IAAI,EAAiD,KAAM,CAC7E,mBAAoB,EAAM,IAAW,EAAK,aAAa,aAAc,EAAO,KAAK,EACjF,cAAgB,GAAU,CACxB,IAAM,EAAQ,KAAKE,GAAY,MAC3B,GAAO,KAAKC,GAAM,YAAY,EAAO,CAAK,CAChD,CACF,CAAC,SArBkC,KAAA,QAAA,oCAEN,KAAA,WAAA,CAC3B,GAAG,EAAsB,WACzB,SAAU,CAAE,KAAM,OAAQ,EAC1B,MAAO,CAAE,KAAM,MAAO,CACxB,EAMA,GACA,GACA,GACA,GAQA,mBAAmC,CACjC,MAAM,kBAAkB,EACpB,KAAK,SAKX,CAEA,OAA0B,EAA+B,CACvD,IAAM,EAAQ,KAAKD,GAAY,MAC3B,EAA6C,KAE7C,IACF,KAAKC,GAAM,SAAS,CAAE,YAAa,KAAK,YAAa,SAAU,KAAK,SAAU,MAAO,KAAK,KAAM,CAAC,EACjG,KAAKA,GAAM,SAAS,CAAK,EACzB,EAAQ,KAAKA,GAAM,SAAS,EAE5B,KAAK,sBAAsB,GAAc,KAAKA,GAAM,SAAS,CAAK,EAAG,KAAKC,GAAM,KAAK,CAAC,EACtF,KAAKC,GAAS,KAAK,EAAO,KAAKD,GAAM,MAAO,KAAKA,GAAM,MAAM,EAC7D,KAAK,wBAAwB,EAAM,SAAU,EAAM,YAAY,GAGjE,MAAM,OAAO,CAAO,EAEhB,GAAO,EAAoB,KAAM,EAAO,CAA2B,CACzE,CACF,ECtDa,GAAb,cAAuC,CAAmC,+BAG9C,KAAA,KAAA,IAAI,GACI,KAAA,aAAA,EACF,KAAA,WAAA,IAAI,EAAiB,KAAM,EAAe,CAAoB,SAJpE,KAAA,QAAA,oBAM1B,SAAmB,EAAgD,CACjE,OAAO,KAAK,KAAK,OAAO,CAAK,CAC/B,CACF,ECVa,GAAb,cAA6C,CAAyC,+BAG1D,KAAA,KAAA,IAAI,EACI,KAAA,aAAA,EACF,KAAA,WAAA,IAAI,EAAiB,KAAM,EAAe,CAAgB,EAC/C,KAAA,aAAA,0BALjB,KAAA,QAAA,0BAO1B,SAAmB,EAA4C,CAC7D,OAAO,KAAK,KAAK,OAAO,CAAK,CAC/B,CACF,ECXa,GAAb,cAAsC,CAAkC,+BAG5C,KAAA,KAAA,IAAI,GACI,KAAA,aAAA,GACF,KAAA,WAAA,IAAI,EAAiB,KAAM,EAAe,CAAS,EACxC,KAAA,aAAA,gCALjB,KAAA,QAAA,mBAO1B,SAAmB,EAAkD,CACnE,OAAO,KAAK,KAAK,OAAO,CAAK,CAC/B,CACF,ECVA,SAAS,EAAiB,EAA6B,CACrD,GAAI,aAAmB,gBAAiB,CACtC,IAAM,EAAW,EAAQ,iBAAiB,EAC1C,GAAI,EAAS,OAAS,EAAG,OAAO,CAClC,CAEA,MAAO,CAAC,GAAG,EAAQ,QAAQ,CAC7B,CAOA,SAAS,EAAU,EAA2C,CAC5D,IAAK,IAAM,KAAS,EAAiB,CAAO,EAAG,CAC7C,GAAI,aAAiB,iBAAkB,OAAO,EAE9C,IAAM,EAAS,EAAU,CAAK,EAC9B,GAAI,EAAQ,OAAO,CACrB,CAEA,OAAO,IACT,CAOA,SAAS,EAAU,EAAgC,CACjD,GAAI,EAAI,aAAa,KAAK,GAAK,EAAI,aAAa,QAAQ,EAAG,MAAO,GAElE,IAAM,EAAS,EAAI,cACnB,OAAO,GAAQ,YAAc,WAAa,EAAO,cAAc,QAAQ,IAAM,IAC/E,CAOA,SAAS,GAAa,EAAgC,CACpD,MAAO,CAAC,CAAC,EAAI,aAAa,KAAK,GAAK,EAAI,aAAa,QAAQ,CAC/D,CAkBA,IAAa,GAAb,cAAmC,CAAa,QACpB,KAAA,QAAA,eAE1B,WAAW,oBAA+B,CAExC,MAAO,CAAC,GAAG,MAAM,mBAAoB,gBAAgB,CACvD,CAEA,GAAiB,IAAI,GACrB,GAAqB,IAAI,qBAAuB,KAAK,cAAc,CAAC,EAEpE,GAAqB,IAAI,EAAiB,KAAM,EAAe,CAAc,EAC7E,GAAqB,IAAI,EAAiB,KAAM,EAAe,CAAc,EAE7E,GAAkC,KAElC,GAAS,GACT,GAAkC,UAElC,GAAuC,KACvC,GAAsC,KAGtC,mBAAmC,CAEjC,GADA,MAAM,kBAAkB,EACpB,KAAK,UAAW,OAEpB,KAAKM,GAAc,IAAI,gBACvB,GAAM,CAAE,UAAW,KAAKA,GAIxB,KAAK,iBAAiB,iBAAoB,KAAK,cAAc,EAAG,CAAE,QAAO,CAAC,EAC1E,KAAKH,GAAU,QAAQ,KAAM,CAAE,UAAW,GAAM,QAAS,EAAK,CAAC,CAKjE,CAEA,yBAAkC,EAAc,EAAyB,EAA+B,CACtG,MAAM,yBAAyB,EAAM,EAAU,CAAQ,EAEnD,IAAS,mBACP,EACF,KAAK,MAAM,YAAY,6BAA8B,OAAO,EAAS,EAAE,EAEvE,KAAK,MAAM,eAAe,4BAA4B,EAG5D,CAEA,sBAAsC,CACpC,MAAM,qBAAqB,EAE3B,KAAKI,GAAO,IAAI,EAChB,KAAKJ,GAAU,WAAW,EAC1B,KAAKG,IAAa,MAAM,EACxB,KAAKA,GAAc,IACrB,CAEA,GAAIE,IAAmC,CAErC,MADI,CAAC,KAAKC,IAAU,CAAC,EAAU,KAAKA,EAAM,EAAU,OAC7C,KAAKC,KAAoB,UAAY,UAAY,KAAKA,EAC/D,CAEA,OAA0B,EAA+B,CACvD,MAAM,OAAO,CAAO,EAEpB,IAAM,EAAW,KAAKN,GAAU,MAChC,GAAI,CAAC,EAAU,OAIf,KAAKF,GAAM,SAAS,CAClB,QAAS,EAAS,QAClB,OAAQ,KAAKG,GAAU,OAAO,QAAU,EAC1C,CAAC,EAED,GAAM,CAAE,OAAQ,KAAKH,GAAM,SAAS,EAEpC,KAAKK,GAAO,EAAU,IAAI,CAAC,EAC3B,KAAKI,GAAa,CAAG,EAErB,KAAKT,GAAM,kBAAkB,KAAKM,EAAU,EAC5C,EAAoB,KAAM,KAAKN,GAAM,SAAS,EAAG,EAAe,CAClE,CAOA,GAAO,EAAqC,CAY1C,GAXI,IAAS,KAAKO,KAGd,KAAKG,IAAQ,KAAKH,IAAQ,gBAAgB,KAAK,EACnD,KAAKI,IAAc,MAAM,EACzB,KAAKA,GAAe,KAEpB,KAAKJ,GAAS,EACd,KAAKG,GAAS,IAAS,MAAQ,CAAC,EAAU,CAAI,EAC9C,KAAKF,GAAkB,UAEnB,CAAC,GAAM,OAKP,EAAK,aAAe,EAAG,KAAKA,GAAkB,SACzC,EAAK,UAAY,GAAa,CAAI,IAAG,KAAKA,GAAkB,SAErE,KAAKG,GAAe,IAAI,gBACxB,GAAM,CAAE,UAAW,KAAKA,GAClB,EAAU,OAAoC,CAClD,KAAKH,GAAkB,EACvB,KAAK,cAAc,CACrB,EAEA,EAAK,iBAAiB,OAAQ,EAAO,QAAQ,EAAG,CAAE,QAAO,CAAC,EAC1D,EAAK,iBAAiB,QAAS,EAAO,OAAO,EAAG,CAAE,QAAO,CAAC,CAC5D,CAEA,GAAa,EAAmB,CAC9B,IAAM,EAAM,KAAKD,GAEZ,GAWA,KAAKG,KAEL,EAGM,EAAI,aAAa,KAAK,IAAM,IAGrC,KAAKF,GAAkB,UACvB,EAAI,aAAa,MAAO,CAAG,IAN3B,KAAKA,GAAkB,UACvB,EAAI,gBAAgB,KAAK,GAO7B,CACF"}
|
|
@@ -1,49 +1,8 @@
|
|
|
1
1
|
import { u as isUndefined } from "./predicate-faYxAB6Z.js";
|
|
2
2
|
import { t as listen } from "./listen-CdeggIF8.js";
|
|
3
3
|
import { t as isWebKitAirPlayCapable } from "./webkit-C682yTT7.js";
|
|
4
|
-
import {
|
|
4
|
+
import { $ as getTracksByType, D as dispatchStep, F as getMinBufferedEnd, I as getCdnId, L as getOrderedCdnIds, M as DEFAULT_BANDWIDTH_CONFIG, N as getBandwidthEstimate, O as fetchStep, Q as findTrackById, S as isStandardPreload, at as isResolvedTrack, bt as effect, d as excludeUnplayableTracks, dt as computed, f as sameCandidateSet, ft as peek, g as pickTextTrackFromTracks, gt as SVTA_NO_SUPPORTED_VIDEO_TRACK, ht as SVTA_NO_SUPPORTED_AUDIO_TRACK, it as isResolvedPresentation, l as applyConstraints, m as matchesPartialTrack, mt as update, ot as createMachineReactor, u as applyRules, ut as defineBehavior, z as emitError } from "./error-surface-D0bo71gD.js";
|
|
5
5
|
|
|
6
|
-
//#region ../spf/dist/dev/media/errors.js
|
|
7
|
-
/** SVTA 1 [Media Content] 004 — the video is in a format we can't play (e.g. an MPEG-TS container). */
|
|
8
|
-
const SVTA_UNSUPPORTED_VIDEO_FORMAT = 1004;
|
|
9
|
-
/** SVTA 1 [Media Content] 005 — the audio counterpart of {@link SVTA_UNSUPPORTED_VIDEO_FORMAT}. */
|
|
10
|
-
const SVTA_UNSUPPORTED_AUDIO_FORMAT = 1005;
|
|
11
|
-
/**
|
|
12
|
-
* SVTA 4 [Content Protection] 008 — unsupported or unavailable DRM system. Used
|
|
13
|
-
* for "this source is encrypted and we have no decryption pipeline," which is
|
|
14
|
-
* detection, not a license failure.
|
|
15
|
-
*/
|
|
16
|
-
const SVTA_UNSUPPORTED_DRM_SYSTEM = 4008;
|
|
17
|
-
/**
|
|
18
|
-
* SVTA 2 [Playback] 011 — no video track the environment can play. For a source
|
|
19
|
-
* that *has* video renditions where every one was excluded as unplayable.
|
|
20
|
-
*/
|
|
21
|
-
const SVTA_NO_SUPPORTED_VIDEO_TRACK = 2011;
|
|
22
|
-
/** SVTA 2 [Playback] 012 — the audio counterpart of {@link SVTA_NO_SUPPORTED_VIDEO_TRACK}. */
|
|
23
|
-
const SVTA_NO_SUPPORTED_AUDIO_TRACK = 2012;
|
|
24
|
-
/**
|
|
25
|
-
* SVTA 99 [Custom] 001 — this engine has no pipeline for something the source
|
|
26
|
-
* requires, so the source is unplayable *here* rather than broken.
|
|
27
|
-
*
|
|
28
|
-
* Custom rather than standard because the standard codes available describe
|
|
29
|
-
* either narrower or wider things. The causes (1004/1005 unsupported format,
|
|
30
|
-
* 4008 unsupported DRM) say what one rendition hit; the verdicts (2011/2012 no
|
|
31
|
-
* supported track) say a type emptied without saying why it's unfixable. And
|
|
32
|
-
* 2039 "Manifest feature unsupported" covers features that are unsupported but
|
|
33
|
-
* still *playable* — LL-HLS degrading to standard live is a 2039 — so
|
|
34
|
-
* overloading it for a fatal condition would make it useless for the notices it
|
|
35
|
-
* belongs on.
|
|
36
|
-
*
|
|
37
|
-
* Index `001`: the spec defines only `99000` (Unknown) for the custom category
|
|
38
|
-
* and leaves the rest to the publisher, so this is the first code we define.
|
|
39
|
-
*
|
|
40
|
-
* Five digits, and deliberately not special-cased anywhere: {@link svtaCategory}
|
|
41
|
-
* and {@link svtaIndex} decompose it correctly by arithmetic alone, because
|
|
42
|
-
* every standard category is below `8000` and custom starts at `99000`.
|
|
43
|
-
*/
|
|
44
|
-
const SVTA_UNSUPPORTED_PLAYBACK_FEATURE = 99001;
|
|
45
|
-
|
|
46
|
-
//#endregion
|
|
47
6
|
//#region ../spf/dist/dev/playback/behaviors/dom/track-load-triggers.js
|
|
48
7
|
/**
|
|
49
8
|
* Slot-driven FSM. The slot `loadActivated` is the canonical externally-
|
|
@@ -303,73 +262,6 @@ const establishStartMediaTime = {
|
|
|
303
262
|
setup: establishStartMediaTimeSetup
|
|
304
263
|
};
|
|
305
264
|
|
|
306
|
-
//#endregion
|
|
307
|
-
//#region ../spf/dist/dev/media/dom/capabilities.js
|
|
308
|
-
/**
|
|
309
|
-
* Capability probing — the engine's foundation for asking the browser what it
|
|
310
|
-
* can actually decode before committing a rendition to the pipeline.
|
|
311
|
-
*
|
|
312
|
-
* Today this is the synchronous codec half: `canPlayTrack` answers "can this
|
|
313
|
-
* environment play this track?" by building the track's MIME codec string and
|
|
314
|
-
* passing it to `MediaSource.isTypeSupported` (via `isCodecSupported`). It's the
|
|
315
|
-
* DOM implementation of the DOM-free `CanPlayTrack` predicate the
|
|
316
|
-
* track-switching hard-constraint pre-pass consumes — injected through engine
|
|
317
|
-
* config so the (DOM-free) behavior never imports a DOM API directly.
|
|
318
|
-
*
|
|
319
|
-
* Results are memoized by built MIME string: codec support is a pure function
|
|
320
|
-
* of (codec, environment) and never changes after load, so probing is lazy
|
|
321
|
-
* (per candidate, at constraint-apply time) but each unique MIME is asked once.
|
|
322
|
-
*
|
|
323
|
-
* Future cluster-D phases (async `requestMediaKeySystemAccess` key-system
|
|
324
|
-
* probing, `SourceBuffer.changeType()` availability) extend this surface; the
|
|
325
|
-
* async ones land as a state-slot writer behavior rather than a config
|
|
326
|
-
* predicate, since their verdict resolves asynchronously.
|
|
327
|
-
*/
|
|
328
|
-
const codecSupportCache = /* @__PURE__ */ new Map();
|
|
329
|
-
/**
|
|
330
|
-
* Whether the environment can decode `track`, by codec. Builds the track's
|
|
331
|
-
* MIME codec string and checks `MediaSource.isTypeSupported`, memoized by MIME.
|
|
332
|
-
* A track without enough to probe — no `mimeType`, or no declared `codecs`
|
|
333
|
-
* (CODECS is optional per the HLS spec) — is unprobeable and passes through as
|
|
334
|
-
* playable (`true`) rather than being dropped; the late `createSourceBuffer`
|
|
335
|
-
* check stays as the backstop for those.
|
|
336
|
-
*
|
|
337
|
-
* Detected non-fMP4 containers (`video/mp2t`, `audio/aac`) are asserted
|
|
338
|
-
* unsupported regardless of the probe, so they're pruned before selection
|
|
339
|
-
* (the type makes no pick) instead of failing/stalling deep in the pipeline.
|
|
340
|
-
* Two different reasons, neither UA-based:
|
|
341
|
-
*
|
|
342
|
-
* - **MPEG-TS** can't be played at all here: `isTypeSupported('video/mp2t…')` is
|
|
343
|
-
* a genuine false positive on Chromium (reports `true` but appends produce no
|
|
344
|
-
* buffered range), and this engine has no TS transmux pipeline.
|
|
345
|
-
* - **Raw ADTS AAC** is a *temporary* limitation. The browser genuinely
|
|
346
|
-
* supports it (Chrome/Safari decode `audio/aac`; Firefox doesn't), so it could
|
|
347
|
-
* be made playable — but our segment actors / loading behaviors / append
|
|
348
|
-
* pipeline assume every rendition has an `EXT-X-MAP` init segment (e.g. an
|
|
349
|
-
* `append-init` task with an empty URL, fMP4-shaped append handling). Until
|
|
350
|
-
* that init-segment assumption is removed, ADTS would fetch but never buffer
|
|
351
|
-
* (a silent stall), so we assert it unplayable for now. FOLLOW-UP: drop the
|
|
352
|
-
* init-required assumption in the pipeline and switch this to a bare-MIME
|
|
353
|
-
* probe (`buildMimeCodec` would project `audio/aac` with no codecs) so it
|
|
354
|
-
* plays where the browser supports it.
|
|
355
|
-
*
|
|
356
|
-
* Override via the engine's `canPlayTrack` config when those pipelines land.
|
|
357
|
-
*/
|
|
358
|
-
const canPlayTrack = (track) => {
|
|
359
|
-
if (track.mimeType && NON_FMP4_CONTAINER_MIMES.has(track.mimeType)) return false;
|
|
360
|
-
if (getMediaPlaylistMetadata(track)?.encrypted) return false;
|
|
361
|
-
if (!track.mimeType || !track.codecs?.length) return true;
|
|
362
|
-
const mimeCodec = buildMimeCodec({
|
|
363
|
-
mimeType: track.mimeType,
|
|
364
|
-
codecs: track.codecs
|
|
365
|
-
});
|
|
366
|
-
const cached = codecSupportCache.get(mimeCodec);
|
|
367
|
-
if (cached !== void 0) return cached;
|
|
368
|
-
const supported = isCodecSupported(mimeCodec);
|
|
369
|
-
codecSupportCache.set(mimeCodec, supported);
|
|
370
|
-
return supported;
|
|
371
|
-
};
|
|
372
|
-
|
|
373
265
|
//#endregion
|
|
374
266
|
//#region ../spf/dist/dev/playback/behaviors/derive-cdn-priority.js
|
|
375
267
|
/**
|
|
@@ -895,49 +787,6 @@ function resolutionArea(track) {
|
|
|
895
787
|
//#endregion
|
|
896
788
|
//#region ../spf/dist/dev/playback/behaviors/track-switching.js
|
|
897
789
|
/**
|
|
898
|
-
* Apply rules to a candidate list in order; the pick is the first survivor.
|
|
899
|
-
* Two responsibilities the rules don't carry: a rule that returns nothing is
|
|
900
|
-
* skipped (fall-through — a preference never empties the set), and once one
|
|
901
|
-
* survivor remains the chain stops (early-bail — later rules, including the
|
|
902
|
-
* bandwidth ranker, never run, so the effect doesn't subscribe to their
|
|
903
|
-
* signals while the choice is fixed).
|
|
904
|
-
*
|
|
905
|
-
* @param rules - Rules to apply, most authoritative first
|
|
906
|
-
* @param tracks - Candidate tracks
|
|
907
|
-
* @param deps - The behavior's `{ state, context, config }`, passed through to each rule
|
|
908
|
-
* @returns The surviving candidates, pick first
|
|
909
|
-
*/
|
|
910
|
-
function applyRules(rules, tracks, deps) {
|
|
911
|
-
let current = tracks;
|
|
912
|
-
for (const rule of rules) {
|
|
913
|
-
const remaining = rule(current, deps);
|
|
914
|
-
if (remaining.length === 0) continue;
|
|
915
|
-
current = remaining;
|
|
916
|
-
if (current.length === 1) break;
|
|
917
|
-
}
|
|
918
|
-
return current;
|
|
919
|
-
}
|
|
920
|
-
/**
|
|
921
|
-
* Apply hard constraints to a candidate list — the pre-pass that runs before the
|
|
922
|
-
* rule chain. A constraint shares a rule's signature but its exclusion is
|
|
923
|
-
* *hard*: it removes the unplayable (a codec the environment can't decode, a CDN
|
|
924
|
-
* in failover cooldown) and a removed track is never attempted. Unlike
|
|
925
|
-
* `applyRules`, this never skips an empty result and never early-bails — every
|
|
926
|
-
* constraint always applies, and an empty survivor set is a real outcome
|
|
927
|
-
* ("nothing playable here"), not a fall-through. Because each constraint only
|
|
928
|
-
* removes, the order they run in can't change the result.
|
|
929
|
-
*
|
|
930
|
-
* @param constraints - Constraints to apply (pooled, order-independent)
|
|
931
|
-
* @param tracks - Candidate tracks
|
|
932
|
-
* @param deps - The behavior's `{ state, context, config }`, passed to each constraint
|
|
933
|
-
* @returns The playable survivors (possibly empty)
|
|
934
|
-
*/
|
|
935
|
-
function applyConstraints(constraints, tracks, deps) {
|
|
936
|
-
let current = tracks;
|
|
937
|
-
for (const constraint of constraints) current = constraint(current, deps);
|
|
938
|
-
return current;
|
|
939
|
-
}
|
|
940
|
-
/**
|
|
941
790
|
* User intent — a soft filter. Narrows to tracks matching the partial-track
|
|
942
791
|
* selection in `user*TrackSelection`; an empty match falls through (the
|
|
943
792
|
* composer skips it) to the unfiltered set — e.g. a stale id from a previous
|
|
@@ -969,27 +818,6 @@ function excludeFailedCdns(tracks, { state, config }) {
|
|
|
969
818
|
return tracks.filter((track) => !failedSet.has(getCdnId$1(track.url)));
|
|
970
819
|
}
|
|
971
820
|
/**
|
|
972
|
-
* Capability constraint — a *hard* filter (constraints pre-pass), shared by
|
|
973
|
-
* video and audio. Removes renditions this environment can't decode, probed via
|
|
974
|
-
* the injected `canPlayTrack` (codec → `MediaSource.isTypeSupported`). Moving
|
|
975
|
-
* the check here — before selection — means an unplayable variant (e.g. HEVC on
|
|
976
|
-
* a browser without HEVC) is pruned upstream and never picked, instead of
|
|
977
|
-
* surviving into the pipeline to fail late at `createSourceBuffer`. That late
|
|
978
|
-
* throw stays as a defensive structural guarantee; with this constraint it
|
|
979
|
-
* should rarely fire.
|
|
980
|
-
*
|
|
981
|
-
* Passes everything through when there's no `canPlayTrack` probe (a composition
|
|
982
|
-
* that didn't wire it, or DOM-free tests). When it prunes *every* track (no
|
|
983
|
-
* decodable rendition), the empty result is preserved (per `applyConstraints`)
|
|
984
|
-
* — "nothing playable," so the behavior clears the selection (no pick) and the
|
|
985
|
-
* late `createSourceBuffer` check stays as the backstop.
|
|
986
|
-
*/
|
|
987
|
-
function excludeUnplayableTracks(tracks, { config }) {
|
|
988
|
-
const canPlay = config.canPlayTrack;
|
|
989
|
-
if (!canPlay) return tracks;
|
|
990
|
-
return tracks.filter((track) => canPlay(track));
|
|
991
|
-
}
|
|
992
|
-
/**
|
|
993
821
|
* Active-CDN scope — a soft filter, shared by video and audio. Narrows to the
|
|
994
822
|
* highest-priority CDN in `cdnPriority` (owned by `deriveCdnPriority`) that
|
|
995
823
|
* still has tracks, so every track type stays on one CDN. A redundant-streams
|
|
@@ -1076,7 +904,7 @@ function selectChainHead(candidates) {
|
|
|
1076
904
|
* stale pick whose match is gone (e.g. the language dropped on a source
|
|
1077
905
|
* change) falls through to the default policy.
|
|
1078
906
|
* - auto (`undefined`) → the opt-in default policy (`preferredSubtitleLanguage`
|
|
1079
|
-
* → `DEFAULT=YES + AUTOSELECT=YES` → none),
|
|
907
|
+
* → `DEFAULT=YES + AUTOSELECT=YES` → none), via `pickTextTrackFromTracks`.
|
|
1080
908
|
*
|
|
1081
909
|
* Returning `undefined` is a real outcome (captions are opt-in), which is why the
|
|
1082
910
|
* text variant relies on `setupTrackSwitching`'s no-selection seam.
|
|
@@ -1098,7 +926,7 @@ function setupTrackSwitching(deps) {
|
|
|
1098
926
|
const presentation = state.presentation.get();
|
|
1099
927
|
if (!isResolvedPresentation(presentation)) return [];
|
|
1100
928
|
return applyConstraints(config.constraints ?? [], getTracks(presentation), deps);
|
|
1101
|
-
}, { equals:
|
|
929
|
+
}, { equals: sameCandidateSet });
|
|
1102
930
|
return createMachineReactor({
|
|
1103
931
|
initial: "presentation-unresolved",
|
|
1104
932
|
monitor: () => derivedStateSignal.get(),
|
|
@@ -1719,171 +1547,5 @@ const relocatingTextPipelines = () => [
|
|
|
1719
1547
|
];
|
|
1720
1548
|
|
|
1721
1549
|
//#endregion
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
* The seam `resolve-track` uses to report conditions discovered in a freshly
|
|
1725
|
-
* parsed media playlist.
|
|
1726
|
-
*
|
|
1727
|
-
* Injected rather than baked in so `resolve-track` stays free of format and
|
|
1728
|
-
* policy knowledge: it parses and commits, and whatever the composition wants
|
|
1729
|
-
* noticed about the result is this function's business. Which conditions matter,
|
|
1730
|
-
* and which codes they carry, therefore vary per composition — a provider that
|
|
1731
|
-
* never ships MPEG-TS can drop that check, and future playlist-derived notices
|
|
1732
|
-
* (LL-HLS or DVR support that's partial rather than absent) attach here without
|
|
1733
|
-
* touching the resolver.
|
|
1734
|
-
*
|
|
1735
|
-
* Reported **per rendition, as it resolves**, which is why these are causes and
|
|
1736
|
-
* not verdicts: one rendition being unplayable doesn't make the source
|
|
1737
|
-
* unplayable. The verdict is `track-switching`'s, which reports
|
|
1738
|
-
* `SVTA_NO_SUPPORTED_{VIDEO,AUDIO}_TRACK` when a type's candidates actually
|
|
1739
|
-
* empty. Keeping the two apart is what lets a mixed source — some renditions
|
|
1740
|
-
* encrypted or MPEG-TS, others playable — log its causes and still play.
|
|
1741
|
-
*/
|
|
1742
|
-
/** Unsupported-format code per type; text has none — absent captions aren't a failure. */
|
|
1743
|
-
const UNSUPPORTED_FORMAT_CODE = {
|
|
1744
|
-
video: SVTA_UNSUPPORTED_VIDEO_FORMAT,
|
|
1745
|
-
audio: SVTA_UNSUPPORTED_AUDIO_FORMAT
|
|
1746
|
-
};
|
|
1747
|
-
/**
|
|
1748
|
-
* The types a reported cause can legitimately describe: the ones whose candidates
|
|
1749
|
-
* `canPlayTrack` actually prunes, via `track-switching`'s `excludeUnplayableTracks`
|
|
1750
|
-
* pre-pass.
|
|
1751
|
-
*
|
|
1752
|
-
* Text is outside it by design — its switching chain runs failed-CDN constraints
|
|
1753
|
-
* alone, because an MSE codec probe is the wrong question for a WebVTT rendition
|
|
1754
|
-
* (see `track-switching.ts`). So nothing prunes a text rendition, no verdict can
|
|
1755
|
-
* follow from one, and a cause reported against it would be an orphan: the
|
|
1756
|
-
* adapter's unsupported-feature substitution scans the sequence as a whole, so a
|
|
1757
|
-
* lone encrypted subtitle would otherwise recode an unrelated verdict — an
|
|
1758
|
-
* all-CDN cooldown among them — as "this engine can't play the source".
|
|
1759
|
-
*/
|
|
1760
|
-
const CAPABILITY_PRUNED_TYPES = /* @__PURE__ */ new Set(["video", "audio"]);
|
|
1761
|
-
/**
|
|
1762
|
-
* The default: report what makes a rendition unplayable *to this engine* — a
|
|
1763
|
-
* container MSE can't accept, or encryption with no decryption pipeline. Both
|
|
1764
|
-
* mirror what `canPlayTrack` prunes on, so a reported cause always has a
|
|
1765
|
-
* corresponding exclusion.
|
|
1766
|
-
*
|
|
1767
|
-
* A condition carries its code and its context, not copy. `data.mimeType` is
|
|
1768
|
-
* what preserves the specificity — the format codes cover every non-fMP4
|
|
1769
|
-
* container, so "which one" lives there for a consumer that wants to say, rather
|
|
1770
|
-
* than being flattened into an English sentence here.
|
|
1771
|
-
*
|
|
1772
|
-
* Both carry `trackType`, redundantly for the format codes (1004/1005 are
|
|
1773
|
-
* already per type) but not for 4008, which isn't per type — SVTA has one
|
|
1774
|
-
* content-protection code for both. Nothing branches on the tag: it's diagnostic
|
|
1775
|
-
* context, reaching a developer through the logged sequence and `error.data`,
|
|
1776
|
-
* which is why it goes on every condition rather than only where the code can't
|
|
1777
|
-
* carry it. `trackId` alongside it is what distinguishes two renditions of the
|
|
1778
|
-
* same type.
|
|
1779
|
-
*/
|
|
1780
|
-
function reportUnsupportedTrackConditions(track) {
|
|
1781
|
-
if (!CAPABILITY_PRUNED_TYPES.has(track.type)) return [];
|
|
1782
|
-
const conditions = [];
|
|
1783
|
-
const data = {
|
|
1784
|
-
trackType: track.type,
|
|
1785
|
-
trackId: track.id
|
|
1786
|
-
};
|
|
1787
|
-
const formatCode = UNSUPPORTED_FORMAT_CODE[track.type];
|
|
1788
|
-
if (formatCode !== void 0 && NON_FMP4_CONTAINER_MIMES.has(track.mimeType)) conditions.push({
|
|
1789
|
-
code: formatCode,
|
|
1790
|
-
data: {
|
|
1791
|
-
...data,
|
|
1792
|
-
mimeType: track.mimeType
|
|
1793
|
-
}
|
|
1794
|
-
});
|
|
1795
|
-
if (getMediaPlaylistMetadata(track)?.encrypted) conditions.push({
|
|
1796
|
-
code: SVTA_UNSUPPORTED_DRM_SYSTEM,
|
|
1797
|
-
data
|
|
1798
|
-
});
|
|
1799
|
-
return conditions;
|
|
1800
|
-
}
|
|
1801
|
-
|
|
1802
|
-
//#endregion
|
|
1803
|
-
//#region ../spf/dist/dev/playback/primitives/error-messages.js
|
|
1804
|
-
/**
|
|
1805
|
-
* Developer-facing copy for what this engine reports.
|
|
1806
|
-
*
|
|
1807
|
-
* Everything here reaches a **console**, never a viewer. Viewer-facing copy for
|
|
1808
|
-
* a fatal condition is the presentation layer's to compose: the engine reports a
|
|
1809
|
-
* code, and a consumer maps that code to localized text it owns.
|
|
1810
|
-
*
|
|
1811
|
-
* Plain string constants, one export each. Nothing is parameterized — a message
|
|
1812
|
-
* that names the engine has to be built at the call site from state the engine
|
|
1813
|
-
* carries around solely to say it, which is a lot of plumbing for a console
|
|
1814
|
-
* prefix. Separate exports rather than one object so a composition that logs
|
|
1815
|
-
* neither notice doesn't carry their bytes.
|
|
1816
|
-
*/
|
|
1817
|
-
/**
|
|
1818
|
-
* Logged when a fatal `SVTA_UNSUPPORTED_PLAYBACK_FEATURE` is surfaced.
|
|
1819
|
-
*
|
|
1820
|
-
* The developer's half of that event; the viewer gets the localized copy the
|
|
1821
|
-
* code maps to. One sentence is enough because the specifics — which container,
|
|
1822
|
-
* which rendition, whether it was DRM — stay structured on the reported
|
|
1823
|
-
* conditions logged beside it.
|
|
1824
|
-
*/
|
|
1825
|
-
const UNSUPPORTED_PLAYBACK_FEATURE_MESSAGE = "Can't play this source: it requires an unsupported playback feature.";
|
|
1826
|
-
/**
|
|
1827
|
-
* LL-HLS delivery, played as standard live. The parser ignores partial segments
|
|
1828
|
-
* and the loader fetches whole ones, so latency lands wherever `HOLD-BACK` puts
|
|
1829
|
-
* it — the stream plays, just not at the latency it was published for.
|
|
1830
|
-
*/
|
|
1831
|
-
const LOW_LATENCY_UNSUPPORTED_MESSAGE = "Low-Latency HLS is unsupported; playing as standard live at higher latency.";
|
|
1832
|
-
/**
|
|
1833
|
-
* `#EXT-X-PLAYLIST-TYPE:EVENT` — a growing window, which is how DVR is
|
|
1834
|
-
* delivered. It plays, but the seekable-range and live-edge handling for it is
|
|
1835
|
-
* newer and less exercised than sliding-window live.
|
|
1836
|
-
*/
|
|
1837
|
-
const DVR_EXPERIMENTAL_MESSAGE = "DVR support for EVENT playlists is experimental.";
|
|
1838
|
-
|
|
1839
|
-
//#endregion
|
|
1840
|
-
//#region ../spf/dist/dev/playback/adapters/hls-video/error-surface.js
|
|
1841
|
-
/**
|
|
1842
|
-
* `message`, plus the alternative-Media sentence when `media`'s class names one.
|
|
1843
|
-
*
|
|
1844
|
-
* Read off the class rather than passed in so a subclass can point at a
|
|
1845
|
-
* better-equipped sibling — the SPF Mux Medias name the hls.js-backed one, which
|
|
1846
|
-
* plays the MPEG-TS and DRM sources SPF doesn't — without either adapter knowing
|
|
1847
|
-
* that sibling exists.
|
|
1848
|
-
*/
|
|
1849
|
-
function withAlternativeMediaSuggestion(message, media) {
|
|
1850
|
-
const { alternativeMediaSuggestion } = media.constructor;
|
|
1851
|
-
const suggestion = alternativeMediaSuggestion?.trim();
|
|
1852
|
-
return suggestion ? `${message} ${suggestion}` : message;
|
|
1853
|
-
}
|
|
1854
|
-
/** The first condition `fatalCodes` covers — the root cause, not its consequences. */
|
|
1855
|
-
function firstFatal(errors, fatalCodes) {
|
|
1856
|
-
return errors?.find((error) => fatalCodes.has(error.code));
|
|
1857
|
-
}
|
|
1858
|
-
/**
|
|
1859
|
-
* The causes that mean the engine has no pipeline for what the source delivers —
|
|
1860
|
-
* a container it can't append, or encryption it can't decrypt.
|
|
1861
|
-
*
|
|
1862
|
-
* What these have in common is that no retry, no other CDN, and no other
|
|
1863
|
-
* rendition of the same source fixes them: the source needs a capability this
|
|
1864
|
-
* engine doesn't have. That's the distinction the surfaced code exists to draw,
|
|
1865
|
-
* and it's why the set is these three rather than "every cause".
|
|
1866
|
-
*/
|
|
1867
|
-
const UNSUPPORTED_FEATURE_CAUSES = /* @__PURE__ */ new Set([
|
|
1868
|
-
SVTA_UNSUPPORTED_VIDEO_FORMAT,
|
|
1869
|
-
SVTA_UNSUPPORTED_AUDIO_FORMAT,
|
|
1870
|
-
SVTA_UNSUPPORTED_DRM_SYSTEM
|
|
1871
|
-
]);
|
|
1872
|
-
/**
|
|
1873
|
-
* Whether anything in the sequence is a cause of the "we don't implement this"
|
|
1874
|
-
* kind.
|
|
1875
|
-
*
|
|
1876
|
-
* Deliberately `some` over the whole sequence rather than a per-type match
|
|
1877
|
-
* against the verdict. A verdict means one type's candidates emptied, but the
|
|
1878
|
-
* *reason* the source is unplayable can sit on another type — an audio-only
|
|
1879
|
-
* source whose sole rendition is encrypted empties the audio candidates, and a
|
|
1880
|
-
* video source with encrypted video empties the video ones. Both are the same
|
|
1881
|
-
* answer to the viewer, so both get the same code.
|
|
1882
|
-
*/
|
|
1883
|
-
function hasUnsupportedFeatureCause(errors) {
|
|
1884
|
-
return errors?.some((error) => UNSUPPORTED_FEATURE_CAUSES.has(error.code)) ?? false;
|
|
1885
|
-
}
|
|
1886
|
-
|
|
1887
|
-
//#endregion
|
|
1888
|
-
export { gateFirstParseOnAnchor as C, SVTA_UNSUPPORTED_PLAYBACK_FEATURE as D, SVTA_NO_SUPPORTED_VIDEO_TRACK as E, establishStartMediaTime as S, SVTA_NO_SUPPORTED_AUDIO_TRACK as T, applyStartPosition as _, LOW_LATENCY_UNSUPPORTED_MESSAGE as a, canPlayTrack as b, relocatingTextPipelines as c, switchAudioTrack as d, switchTextTrack as f, recoverEndStall as g, setupFailoverMonitor as h, DVR_EXPERIMENTAL_MESSAGE as i, relocationPipelinesFor as l, syncPreload as m, hasUnsupportedFeatureCause as n, UNSUPPORTED_PLAYBACK_FEATURE_MESSAGE as o, switchVideoTrack as p, withAlternativeMediaSuggestion as r, reportUnsupportedTrackConditions as s, firstFatal as t, DEFAULT_TEXT_MESSAGE_PIPELINES as u, setupAirPlay as v, trackLoadTriggers as w, deriveSharedMinStartMediaTime as x, deriveCdnPriority as y };
|
|
1889
|
-
//# sourceMappingURL=error-surface-drmCvBVW.js.map
|
|
1550
|
+
export { switchTextTrack as a, setupFailoverMonitor as c, setupAirPlay as d, deriveCdnPriority as f, trackLoadTriggers as g, gateFirstParseOnAnchor as h, switchAudioTrack as i, recoverEndStall as l, establishStartMediaTime as m, relocationPipelinesFor as n, switchVideoTrack as o, deriveSharedMinStartMediaTime as p, DEFAULT_TEXT_MESSAGE_PIPELINES as r, syncPreload as s, relocatingTextPipelines as t, applyStartPosition as u };
|
|
1551
|
+
//# sourceMappingURL=relocation-pipelines-Dh8CcgHw.js.map
|