@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
|
@@ -1,38 +1,8 @@
|
|
|
1
1
|
import { i as safeDefine } from "../context-OhQY847V.js";
|
|
2
|
+
import { t as loadScript } from "../script-erPJaaTz.js";
|
|
2
3
|
import { n as isCaptionOrSubtitleTrack } from "../text-track-DMA7pa8W.js";
|
|
3
4
|
import { t as MediaComponentElement } from "../media-component-element-BckgOtvB.js";
|
|
4
5
|
|
|
5
|
-
//#region ../utils/dist/dom/script.js
|
|
6
|
-
const cache = /* @__PURE__ */ new Map();
|
|
7
|
-
function hasScript(src) {
|
|
8
|
-
for (const script of document.scripts) if (script.getAttribute("src") === src) return true;
|
|
9
|
-
return false;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Load a script once. Concurrent and repeat calls for the same `src` share a
|
|
13
|
-
* single promise; failed loads are evicted (and the tag removed) so they can
|
|
14
|
-
* be retried.
|
|
15
|
-
*/
|
|
16
|
-
function loadScript(src) {
|
|
17
|
-
let promise = cache.get(src);
|
|
18
|
-
if (promise) return promise;
|
|
19
|
-
if (hasScript(src)) return Promise.resolve();
|
|
20
|
-
promise = new Promise((resolve, reject) => {
|
|
21
|
-
const script = document.createElement("script");
|
|
22
|
-
script.src = src;
|
|
23
|
-
script.onload = () => resolve();
|
|
24
|
-
script.onerror = () => {
|
|
25
|
-
script.remove();
|
|
26
|
-
reject(/* @__PURE__ */ new Error(`Failed to load script: ${src}`));
|
|
27
|
-
};
|
|
28
|
-
document.head.appendChild(script);
|
|
29
|
-
});
|
|
30
|
-
cache.set(src, promise);
|
|
31
|
-
promise.catch(() => cache.delete(src));
|
|
32
|
-
return promise;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
//#endregion
|
|
36
6
|
//#region ../media/dist/dev/dom/google-cast/utils.js
|
|
37
7
|
var InvalidStateError = class extends Error {};
|
|
38
8
|
var NotSupportedError = class extends Error {};
|
|
@@ -815,4 +785,5 @@ var GoogleCastElement = class extends MediaComponentElement {
|
|
|
815
785
|
safeDefine(GoogleCastElement);
|
|
816
786
|
|
|
817
787
|
//#endregion
|
|
788
|
+
export { GoogleCastElement };
|
|
818
789
|
//# sourceMappingURL=google-cast.dev.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-cast.dev.js","names":["#seen","#refs","#provider","#setState","#setAvailable","#state","#assertEnabled","#callbacks","#available","#updateRemoteTextTrack","#checkPlaybackRate","#googleCast","#remotePlayback","#onTextTrackChange","#onMediaUpdate","#detachRemoteListeners","#isCasting","#isInit","#hooks","#isCastApiAvailable","#applyCastOptions","#attachRemoteListeners","#localPaused","#remotePlayer","#seeking","#notifySeeking","#remoteListeners","#disconnect","#notifySeeked","#onRemoteMediaLoaded","#listenersAttached","#playbackRate","#media","#provider","#onStateChange","#override","#createRemoteOverride","#src","#load","#contentType","#streamType","#receiver","#customData"],"sources":["../../../utils/dist/dom/script.js","../../../media/dist/dev/dom/google-cast/utils.js","../../../media/dist/dev/dom/google-cast/registry.js","../../../media/dist/dev/dom/google-cast/remote-playback.js","../../../media/dist/dev/dom/google-cast/google-cast-provider.js","../../../media/dist/dev/dom/google-cast/media.js","../../src/media/google-cast/google-cast-element.ts","../../src/define/media/google-cast.ts"],"sourcesContent":["//#region src/dom/script.ts\nconst cache = /* @__PURE__ */ new Map();\nfunction hasScript(src) {\n\tfor (const script of document.scripts) if (script.getAttribute(\"src\") === src) return true;\n\treturn false;\n}\n/**\n* Load a script once. Concurrent and repeat calls for the same `src` share a\n* single promise; failed loads are evicted (and the tag removed) so they can\n* be retried.\n*/\nfunction loadScript(src) {\n\tlet promise = cache.get(src);\n\tif (promise) return promise;\n\tif (hasScript(src)) return Promise.resolve();\n\tpromise = new Promise((resolve, reject) => {\n\t\tconst script = document.createElement(\"script\");\n\t\tscript.src = src;\n\t\tscript.onload = () => resolve();\n\t\tscript.onerror = () => {\n\t\t\tscript.remove();\n\t\t\treject(/* @__PURE__ */ new Error(`Failed to load script: ${src}`));\n\t\t};\n\t\tdocument.head.appendChild(script);\n\t});\n\tcache.set(src, promise);\n\tpromise.catch(() => cache.delete(src));\n\treturn promise;\n}\n//#endregion\nexport { hasScript, loadScript };\n\n//# sourceMappingURL=script.js.map","import { loadScript } from \"@videojs/utils/dom\";\n//#region src/dom/google-cast/utils.ts\nvar InvalidStateError = class extends Error {};\nvar NotSupportedError = class extends Error {};\nvar NotFoundError = class extends Error {};\nconst GOOGLE_CAST_FRAMEWORK_URL = \"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1\";\nconst HLS_RESPONSE_HEADERS = [\n\t\"application/x-mpegURL\",\n\t\"application/vnd.apple.mpegurl\",\n\t\"audio/mpegurl\"\n];\nvar IterableWeakSet = class {\n\t#refs = /* @__PURE__ */ new Set();\n\t#seen = /* @__PURE__ */ new WeakMap();\n\tadd(value) {\n\t\tif (this.#seen.has(value)) return this;\n\t\tconst ref = new WeakRef(value);\n\t\tthis.#seen.set(value, ref);\n\t\tthis.#refs.add(ref);\n\t\treturn this;\n\t}\n\tdelete(value) {\n\t\tconst ref = this.#seen.get(value);\n\t\tif (!ref) return false;\n\t\tthis.#seen.delete(value);\n\t\treturn this.#refs.delete(ref);\n\t}\n\tforEach(fn) {\n\t\tfor (const ref of this.#refs) {\n\t\t\tconst value = ref.deref();\n\t\t\tif (value) fn(value);\n\t\t\telse this.#refs.delete(ref);\n\t\t}\n\t}\n};\nfunction onCastApiAvailable(callback) {\n\tconst whenDefined = () => customElements.whenDefined(\"google-cast-button\").then(callback);\n\tif (!globalThis.chrome?.cast?.isAvailable) globalThis.__onGCastApiAvailable = whenDefined;\n\telse if (typeof cast === \"undefined\" || !cast.framework) whenDefined();\n\telse callback();\n}\nfunction requiresCastFramework() {\n\treturn Boolean(globalThis.chrome);\n}\nasync function loadCastFramework() {\n\tif (globalThis.chrome?.cast) return;\n\tawait loadScript(GOOGLE_CAST_FRAMEWORK_URL);\n}\nfunction getCastContext() {\n\treturn typeof cast === \"undefined\" ? void 0 : cast.framework?.CastContext.getInstance();\n}\nfunction currentSession() {\n\treturn getCastContext()?.getCurrentSession();\n}\nfunction currentMedia() {\n\treturn currentSession()?.getSessionObj().media[0] ?? void 0;\n}\nfunction editTracksInfo(request) {\n\treturn new Promise((resolve, reject) => {\n\t\tcurrentMedia().editTracksInfo(request, resolve, reject);\n\t});\n}\nfunction getMediaStatus(request) {\n\treturn new Promise((resolve, reject) => {\n\t\tcurrentMedia().getStatus(request, resolve, reject);\n\t});\n}\nconst MEDIA_NAMESPACE = \"urn:x-cast:com.google.cast.media\";\nlet requestId = 0;\nfunction setPlaybackRate(rate) {\n\tconst media = currentMedia();\n\treturn currentSession().sendMessage(MEDIA_NAMESPACE, {\n\t\ttype: \"SET_PLAYBACK_RATE\",\n\t\tplaybackRate: rate,\n\t\tmediaSessionId: media?.mediaSessionId,\n\t\trequestId: ++requestId\n\t});\n}\nfunction setCastOptions(options) {\n\tgetCastContext().setOptions({\n\t\t...getDefaultCastOptions(),\n\t\t...options\n\t});\n}\nfunction getDefaultCastOptions() {\n\treturn {\n\t\treceiverApplicationId: \"CC1AD845\",\n\t\tautoJoinPolicy: globalThis.chrome?.cast?.AutoJoinPolicy?.ORIGIN_SCOPED ?? \"origin_scoped\",\n\t\tandroidReceiverCompatible: false,\n\t\tlanguage: \"en-US\",\n\t\tresumeSavedSession: true\n\t};\n}\nfunction getFormat(segment) {\n\tif (!segment) return void 0;\n\tconst match = segment.match(/\\.([a-zA-Z0-9]+)(?:\\?.*)?$/);\n\treturn match ? match[1] : null;\n}\nfunction parsePlaylistUrls(playlistContent) {\n\tconst lines = playlistContent.split(\"\\n\");\n\tconst urls = [];\n\tfor (let i = 0; i < lines.length; i++) if (lines[i].trim().startsWith(\"#EXT-X-STREAM-INF\")) {\n\t\tconst nextLine = lines[i + 1] ? lines[i + 1].trim() : \"\";\n\t\tif (nextLine && !nextLine.startsWith(\"#\")) urls.push(nextLine);\n\t}\n\treturn urls;\n}\nfunction parseSegment(playlistContent) {\n\treturn playlistContent.split(\"\\n\").find((line) => !line.trim().startsWith(\"#\") && line.trim() !== \"\");\n}\nasync function isHls(url) {\n\tif (!url) return false;\n\tif (/\\.m3u8?(\\?.*)?$/i.test(url)) return true;\n\tif (url.startsWith(\"blob:\")) return false;\n\ttry {\n\t\tconst contentType = (await fetch(url, { method: \"HEAD\" })).headers.get(\"Content-Type\");\n\t\tif (!contentType) return false;\n\t\tconst normalizedContentType = contentType.toLowerCase().split(\";\")[0].trim();\n\t\treturn HLS_RESPONSE_HEADERS.some((header) => normalizedContentType === header.toLowerCase());\n\t} catch (err) {\n\t\tconsole.error(\"Error while trying to get the Content-Type of the manifest\", err);\n\t\treturn false;\n\t}\n}\nasync function getPlaylistSegmentFormat(url) {\n\ttry {\n\t\tconst mainManifestContent = await (await fetch(url)).text();\n\t\tlet availableChunksContent = mainManifestContent;\n\t\tconst playlists = parsePlaylistUrls(mainManifestContent);\n\t\tif (playlists.length > 0) {\n\t\t\tconst chosenPlaylistUrl = new URL(playlists[0], url).toString();\n\t\t\tavailableChunksContent = await (await fetch(chosenPlaylistUrl)).text();\n\t\t}\n\t\treturn getFormat(parseSegment(availableChunksContent));\n\t} catch (err) {\n\t\tconsole.error(\"Error while trying to parse the manifest playlist\", err);\n\t\treturn;\n\t}\n}\n//#endregion\nexport { InvalidStateError, IterableWeakSet, NotFoundError, NotSupportedError, currentMedia, currentSession, editTracksInfo, getCastContext, getMediaStatus, getPlaylistSegmentFormat, isHls, loadCastFramework, onCastApiAvailable, requiresCastFramework, setCastOptions, setPlaybackRate };\n\n//# sourceMappingURL=utils.js.map","import { IterableWeakSet, getCastContext, loadCastFramework, onCastApiAvailable } from \"./utils.js\";\n//#region src/dom/google-cast/registry.ts\nconst googleCastInstances = new IterableWeakSet();\nlet castFramework;\nlet pendingCastFramework = null;\nasync function ensureCastFramework() {\n\tif (castFramework) return castFramework;\n\tif (!pendingCastFramework) {\n\t\tpendingCastFramework = loadCastFramework().then(() => new Promise((resolve, reject) => {\n\t\t\tonCastApiAvailable(() => {\n\t\t\t\tregisterCastFramework();\n\t\t\t\tif (castFramework) {\n\t\t\t\t\tresolve(castFramework);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treject(new DOMException(\"Google Cast framework is unavailable.\", \"NotSupportedError\"));\n\t\t\t});\n\t\t}));\n\t\tpendingCastFramework.catch(() => {\n\t\t\tpendingCastFramework = null;\n\t\t});\n\t}\n\treturn pendingCastFramework;\n}\nfunction registerCastFramework() {\n\tif (!globalThis.chrome?.cast?.isAvailable) {\n\t\tconsole.debug(\"chrome.cast.isAvailable\", globalThis.chrome?.cast?.isAvailable);\n\t\treturn;\n\t}\n\tif (!castFramework) {\n\t\tcastFramework = cast.framework;\n\t\tgetCastContext().addEventListener(castFramework.CastContextEventType.CAST_STATE_CHANGED, () => {\n\t\t\tgoogleCastInstances.forEach((provider) => provider.onCastStateChanged());\n\t\t});\n\t\tgetCastContext().addEventListener(castFramework.CastContextEventType.SESSION_STATE_CHANGED, () => {\n\t\t\tgoogleCastInstances.forEach((provider) => provider.onSessionStateChanged());\n\t\t});\n\t\tgoogleCastInstances.forEach((provider) => provider.onCastFrameworkAvailable());\n\t}\n}\n//#endregion\nexport { castFramework, ensureCastFramework, googleCastInstances };\n\n//# sourceMappingURL=registry.js.map","import { InvalidStateError, NotFoundError } from \"./utils.js\";\n//#region src/dom/google-cast/remote-playback.ts\nlet callbackIdCount = 0;\n/**\n* Implementation of the W3C [`RemotePlayback`](https://developer.mozilla.org/en-US/docs/Web/API/RemotePlayback)\n* interface backed by Google Cast.\n*\n* Surfaced via `host.remote` while the {@link GoogleCastProvider} is in the\n* provider chain. The public API must strictly conform to the W3C spec:\n*\n* - Properties: `state`\n* - Methods: `watchAvailability`, `cancelWatchAvailability`, `prompt`\n* - Events: `connecting`, `connect`, `disconnect`\n*\n* Internal state mutations are pushed by {@link GoogleCastProvider} through\n* private callbacks registered via `provider.bindHooks(...)` in the constructor —\n* do not add public methods or properties that aren't part of the spec.\n*/\nvar RemotePlayback = class extends EventTarget {\n\t#provider;\n\t#state = \"disconnected\";\n\t#available = false;\n\t#callbacks = /* @__PURE__ */ new Map();\n\tconstructor(provider) {\n\t\tsuper();\n\t\tthis.#provider = provider;\n\t\tprovider.bindHooks({\n\t\t\tsetState: (next) => this.#setState(next),\n\t\t\tsetAvailable: (available) => this.#setAvailable(available)\n\t\t});\n\t}\n\tget state() {\n\t\treturn this.#state;\n\t}\n\tasync watchAvailability(callback) {\n\t\tthis.#assertEnabled();\n\t\tconst id = ++callbackIdCount;\n\t\tthis.#callbacks.set(id, callback);\n\t\tqueueMicrotask(() => callback(this.#provider.hasDevicesAvailable()));\n\t\treturn id;\n\t}\n\tasync cancelWatchAvailability(callbackId) {\n\t\tthis.#assertEnabled();\n\t\tif (callbackId === void 0) {\n\t\t\tthis.#callbacks.clear();\n\t\t\treturn;\n\t\t}\n\t\tif (!this.#callbacks.delete(callbackId)) throw new NotFoundError(`Callback not found for id ${callbackId}.`);\n\t}\n\tasync prompt() {\n\t\tthis.#assertEnabled();\n\t\tawait this.#provider.requestCastSession();\n\t}\n\t#assertEnabled() {\n\t\tif (this.#provider.target?.disableRemotePlayback) throw new InvalidStateError(\"disableRemotePlayback attribute is present.\");\n\t}\n\t#setState(next) {\n\t\tif (this.#state === next) return;\n\t\tthis.#state = next;\n\t\tif (next === \"connecting\") this.dispatchEvent(new Event(\"connecting\"));\n\t\telse if (next === \"connected\") this.dispatchEvent(new Event(\"connect\"));\n\t\telse this.dispatchEvent(new Event(\"disconnect\"));\n\t}\n\t#setAvailable(available) {\n\t\tif (this.#available === available) return;\n\t\tthis.#available = available;\n\t\tfor (const callback of this.#callbacks.values()) callback(available);\n\t}\n};\n//#endregion\nexport { RemotePlayback };\n\n//# sourceMappingURL=remote-playback.js.map","import { InvalidStateError, NotSupportedError, currentMedia, currentSession, editTracksInfo, getCastContext, getMediaStatus, getPlaylistSegmentFormat, isHls, setCastOptions, setPlaybackRate } from \"./utils.js\";\nimport { castFramework, ensureCastFramework, googleCastInstances } from \"./registry.js\";\nimport { RemotePlayback } from \"./remote-playback.js\";\nimport { isCaptionOrSubtitleTrack } from \"@videojs/utils/dom\";\n//#region src/dom/google-cast/google-cast-provider.ts\n/**\n* Cast provider + lifecycle. Created by the {@link GoogleCast} component and\n* installed as the host's `targetOverride` while a cast session is connected,\n* so its getters/setters route through the cast receiver; when disconnected the\n* host falls through to the attached target. Also owns the cast framework\n* integration, the `RemotePlayback` instance exposed via\n* {@link GoogleCastProvider#remote}, and dispatches media events on the attached\n* target (forwarded by the host) while casting.\n*/\nvar GoogleCastProvider = class {\n\ttarget = null;\n\t#googleCast;\n\t#hooks = {};\n\t#remotePlayback;\n\t#isInit = false;\n\t#isCasting = false;\n\t#seeking = false;\n\t#remotePlayer;\n\t#remoteListeners;\n\t#listenersAttached = false;\n\t#playbackRate = 1;\n\t#localPaused = false;\n\t#onTextTrackChange = () => this.#updateRemoteTextTrack();\n\t#onMediaUpdate = () => this.#checkPlaybackRate();\n\tconstructor(googleCast) {\n\t\tthis.#googleCast = googleCast;\n\t\tthis.#remotePlayback = new RemotePlayback(this);\n\t\tgoogleCastInstances.add(this);\n\t\tthis.onCastFrameworkAvailable();\n\t}\n\tget remote() {\n\t\tif (this.target && !this.target.disableRemotePlayback) ensureCastFramework();\n\t\treturn this.#remotePlayback;\n\t}\n\tattach(target) {\n\t\tthis.target = target;\n\t\ttarget.textTracks.addEventListener(\"change\", this.#onTextTrackChange);\n\t}\n\tdetach() {\n\t\tthis.target?.textTracks.removeEventListener(\"change\", this.#onTextTrackChange);\n\t\tthis.target = null;\n\t}\n\tdestroy() {\n\t\tthis.detach();\n\t\tgoogleCastInstances.delete(this);\n\t\tcurrentMedia()?.removeUpdateListener(this.#onMediaUpdate);\n\t\tthis.#detachRemoteListeners();\n\t\tthis.#isCasting = false;\n\t\tthis.#isInit = false;\n\t}\n\t/** @internal Wires up callbacks pushed from {@link RemotePlayback}; not part of the public surface. */\n\tbindHooks(hooks) {\n\t\tObject.assign(this.#hooks, hooks);\n\t}\n\thasDevicesAvailable() {\n\t\tconst state = getCastContext()?.getCastState();\n\t\treturn !!state && state !== cast.framework.CastState.NO_DEVICES_AVAILABLE;\n\t}\n\tasync requestCastSession() {\n\t\tif (this.target?.disableRemotePlayback) throw new InvalidStateError(\"disableRemotePlayback attribute is present.\");\n\t\tawait ensureCastFramework();\n\t\tif (!this.#isCastApiAvailable()) throw new NotSupportedError(\"The RemotePlayback API is disabled on this platform.\");\n\t\tconst willDisconnect = this.#isCasting;\n\t\tthis.#isCasting = true;\n\t\tthis.#applyCastOptions();\n\t\tthis.#attachRemoteListeners();\n\t\ttry {\n\t\t\tawait getCastContext().requestSession();\n\t\t} catch (err) {\n\t\t\tif (!willDisconnect) this.#isCasting = false;\n\t\t\tif (err === \"cancel\") return;\n\t\t\tthrow new Error(err);\n\t\t}\n\t\tthis.#localPaused = this.target?.paused ?? true;\n\t\tthis.target?.pause();\n\t\tthis.muted = this.target?.muted ?? false;\n\t\ttry {\n\t\t\tawait this.load();\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\tasync load() {\n\t\tif (!this.#isCasting) {\n\t\t\tawait this.target?.load();\n\t\t\treturn;\n\t\t}\n\t\tif (!this.#googleCast.src) return;\n\t\tconst mediaInfo = new chrome.cast.media.MediaInfo(this.#googleCast.src, this.#googleCast.contentType ?? \"\");\n\t\tmediaInfo.customData = this.#googleCast.customData ?? null;\n\t\tconst { target } = this;\n\t\tconst subtitles = [...target?.querySelectorAll(\"track\") ?? []].filter((el) => el.src && isCaptionOrSubtitleTrack(el));\n\t\tconst { Track, TrackType, TextTrackType } = chrome.cast.media;\n\t\tconst activeTrackIds = [];\n\t\tif (subtitles.length) mediaInfo.tracks = subtitles.map((el, i) => {\n\t\t\tconst trackId = i + 1;\n\t\t\tif (!activeTrackIds.length && el.track.mode === \"showing\") activeTrackIds.push(trackId);\n\t\t\tconst track = new Track(trackId, TrackType.TEXT);\n\t\t\ttrack.trackContentId = el.src;\n\t\t\ttrack.trackContentType = \"text/vtt\";\n\t\t\ttrack.subtype = el.kind === \"captions\" ? TextTrackType.CAPTIONS : TextTrackType.SUBTITLES;\n\t\t\ttrack.name = el.label;\n\t\t\ttrack.language = el.srclang;\n\t\t\treturn track;\n\t\t});\n\t\tmediaInfo.streamType = this.#googleCast.streamType === \"live\" ? chrome.cast.media.StreamType.LIVE : chrome.cast.media.StreamType.BUFFERED;\n\t\tmediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata();\n\t\tmediaInfo.metadata.images = [new chrome.cast.Image(target?.poster ?? \"\")];\n\t\tif (await isHls(this.#googleCast.src)) {\n\t\t\tmediaInfo.contentType ||= \"application/x-mpegURL\";\n\t\t\tconst fmt = await getPlaylistSegmentFormat(this.#googleCast.src) ?? \"\";\n\t\t\tconst { HlsSegmentFormat: HS, HlsVideoSegmentFormat: HVS } = chrome.cast.media;\n\t\t\tif (fmt.includes(\"m4s\") || fmt.includes(\"mp4\")) {\n\t\t\t\tmediaInfo.hlsSegmentFormat = HS.FMP4;\n\t\t\t\tmediaInfo.hlsVideoSegmentFormat = HVS.FMP4;\n\t\t\t} else if (fmt.includes(\"ts\")) {\n\t\t\t\tmediaInfo.hlsSegmentFormat = HS.TS;\n\t\t\t\tmediaInfo.hlsVideoSegmentFormat = HVS.TS;\n\t\t\t}\n\t\t}\n\t\tconst request = new chrome.cast.media.LoadRequest(mediaInfo);\n\t\trequest.currentTime = this.target?.currentTime ?? 0;\n\t\trequest.autoplay = !this.#localPaused;\n\t\trequest.activeTrackIds = activeTrackIds;\n\t\tawait currentSession()?.loadMedia(request);\n\t\tthis.target?.dispatchEvent(new Event(\"volumechange\"));\n\t}\n\tget paused() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) return this.target?.paused ?? true;\n\t\treturn this.#remotePlayer.isPaused || this.ended;\n\t}\n\tget ended() {\n\t\treturn this.#remotePlayer.playerState === chrome.cast.media.PlayerState.IDLE && currentMedia()?.idleReason === chrome.cast.media.IdleReason.FINISHED;\n\t}\n\tget seeking() {\n\t\treturn this.#seeking;\n\t}\n\tget readyState() {\n\t\tswitch (this.#remotePlayer.playerState) {\n\t\t\tcase chrome.cast.media.PlayerState.IDLE: return 0;\n\t\t\tcase chrome.cast.media.PlayerState.BUFFERING: return 2;\n\t\t\tdefault: return 3;\n\t\t}\n\t}\n\tget duration() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) return this.target?.duration ?? NaN;\n\t\treturn this.#remotePlayer.duration ?? NaN;\n\t}\n\tget currentTime() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) return this.target?.currentTime ?? 0;\n\t\treturn this.#remotePlayer.currentTime ?? 0;\n\t}\n\tset currentTime(value) {\n\t\tthis.#remotePlayer.currentTime = value;\n\t\tthis.#notifySeeking();\n\t\tthis.#remotePlayer.controller?.seek();\n\t}\n\tget muted() {\n\t\treturn this.#remotePlayer.isMuted;\n\t}\n\tset muted(value) {\n\t\tif (value !== this.#remotePlayer.isMuted) this.#remotePlayer.controller?.muteOrUnmute();\n\t}\n\tget volume() {\n\t\treturn this.#remotePlayer.volumeLevel ?? 1;\n\t}\n\tset volume(value) {\n\t\tthis.#remotePlayer.volumeLevel = +value;\n\t\tthis.#remotePlayer.controller?.setVolumeLevel();\n\t}\n\tget playbackRate() {\n\t\treturn currentMedia()?.playbackRate ?? 1;\n\t}\n\tset playbackRate(value) {\n\t\tsetPlaybackRate(value);\n\t}\n\tasync play() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) {\n\t\t\tthis.#localPaused = false;\n\t\t\tawait this.load();\n\t\t\treturn;\n\t\t}\n\t\tif (this.paused) {\n\t\t\tthis.#remotePlayer.controller?.playOrPause();\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.target?.addEventListener(\"play\", () => resolve(), { once: true });\n\t\t\t});\n\t\t}\n\t}\n\tpause() {\n\t\tif (!this.paused) this.#remotePlayer.controller?.playOrPause();\n\t}\n\tonCastFrameworkAvailable() {\n\t\tif (!castFramework || this.#isInit) return;\n\t\tthis.#isInit = true;\n\t\tthis.#applyCastOptions();\n\t\tthis.onCastStateChanged();\n\t\tthis.#remotePlayer = new castFramework.RemotePlayer();\n\t\tnew castFramework.RemotePlayerController(this.#remotePlayer);\n\t\tthis.#remoteListeners = {\n\t\t\t[castFramework.RemotePlayerEventType.IS_CONNECTED_CHANGED]: (event) => {\n\t\t\t\tif (event?.value === true) this.#hooks.setState?.(\"connected\");\n\t\t\t\telse {\n\t\t\t\t\tthis.#disconnect();\n\t\t\t\t\tthis.#hooks.setState?.(\"disconnected\");\n\t\t\t\t}\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.DURATION_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"durationchange\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"volumechange\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.IS_MUTED_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"volumechange\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.CURRENT_TIME_CHANGED]: () => {\n\t\t\t\tif (!this.#isCasting || !this.#remotePlayer.isMediaLoaded) return;\n\t\t\t\tthis.#notifySeeked();\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"timeupdate\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.VIDEO_INFO_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"resize\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.IS_PAUSED_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(this.#isCasting && this.#remotePlayer.isPaused ? \"pause\" : \"play\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.PLAYER_STATE_CHANGED]: () => {\n\t\t\t\tconst PS = chrome.cast.media.PlayerState;\n\t\t\t\tconst state = this.#isCasting ? this.#remotePlayer.playerState : void 0;\n\t\t\t\tif (state !== PS.BUFFERING) this.#notifySeeked();\n\t\t\t\tif (state === PS.PAUSED) return;\n\t\t\t\tif (state === PS.IDLE) {\n\t\t\t\t\tconst finished = currentMedia()?.idleReason === chrome.cast.media.IdleReason.FINISHED;\n\t\t\t\t\tthis.target?.dispatchEvent(new Event(finished ? \"ended\" : \"emptied\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (state === PS.PLAYING) this.target?.dispatchEvent(new Event(\"playing\"));\n\t\t\t\telse if (state === PS.BUFFERING) this.target?.dispatchEvent(new Event(\"waiting\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED]: async () => {\n\t\t\t\tif (!this.#isCasting || !this.#remotePlayer.isMediaLoaded) return;\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tthis.#onRemoteMediaLoaded();\n\t\t\t}\n\t\t};\n\t}\n\tonCastStateChanged() {\n\t\tif (!this.#isInit) return;\n\t\tconst CS = cast.framework.CastState;\n\t\tconst state = getCastContext().getCastState();\n\t\tif (this.#isCasting && state === CS.CONNECTING) this.#hooks.setState?.(\"connecting\");\n\t\tthis.#hooks.setAvailable?.(!!state && state !== CS.NO_DEVICES_AVAILABLE);\n\t}\n\tasync onSessionStateChanged() {\n\t\tif (!this.#isInit) return;\n\t\tconst { SESSION_RESUMED } = castFramework.SessionState;\n\t\tif (getCastContext().getSessionState() === SESSION_RESUMED) {\n\t\t\tif (this.#googleCast.src === currentMedia()?.media?.contentId) {\n\t\t\t\tthis.#isCasting = true;\n\t\t\t\tthis.#attachRemoteListeners();\n\t\t\t\ttry {\n\t\t\t\t\tawait getMediaStatus(new chrome.cast.media.GetStatusRequest());\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t}\n\t\t\t\tthis.#remoteListeners[castFramework.RemotePlayerEventType.IS_PAUSED_CHANGED]();\n\t\t\t\tthis.#remoteListeners[castFramework.RemotePlayerEventType.PLAYER_STATE_CHANGED]();\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"ratechange\"));\n\t\t\t}\n\t\t}\n\t}\n\t#isCastApiAvailable() {\n\t\treturn Boolean(globalThis.chrome?.cast?.isAvailable);\n\t}\n\t#applyCastOptions() {\n\t\tconst { receiver } = this.#googleCast;\n\t\tsetCastOptions(receiver ? { receiverApplicationId: receiver } : {});\n\t}\n\t#attachRemoteListeners() {\n\t\tif (this.#listenersAttached) return;\n\t\tconst controller = this.#remotePlayer?.controller;\n\t\tif (!controller) return;\n\t\tfor (const [type, handler] of Object.entries(this.#remoteListeners)) controller.addEventListener(type, handler);\n\t\tthis.#listenersAttached = true;\n\t}\n\t#detachRemoteListeners() {\n\t\tif (!this.#listenersAttached) return;\n\t\tconst controller = this.#remotePlayer?.controller;\n\t\tif (controller) for (const [type, handler] of Object.entries(this.#remoteListeners)) controller.removeEventListener(type, handler);\n\t\tthis.#listenersAttached = false;\n\t}\n\t#disconnect() {\n\t\tif (!this.#isCasting) return;\n\t\tcurrentMedia()?.removeUpdateListener(this.#onMediaUpdate);\n\t\tthis.#detachRemoteListeners();\n\t\tthis.#seeking = false;\n\t\tthis.#playbackRate = 1;\n\t\tthis.#isCasting = false;\n\t\tif (this.target) this.target.muted = this.#remotePlayer.isMuted;\n\t\tconst saved = this.#remotePlayer.savedPlayerState;\n\t\tif (saved) {\n\t\t\tif (this.target) this.target.currentTime = saved.currentTime;\n\t\t\tif (saved.isPaused === false && this.target) this.target.play();\n\t\t}\n\t}\n\t#notifySeeking() {\n\t\tthis.#seeking = true;\n\t\tthis.target?.dispatchEvent(new Event(\"seeking\"));\n\t}\n\t#notifySeeked() {\n\t\tif (!this.#seeking) return;\n\t\tthis.#seeking = false;\n\t\tthis.target?.dispatchEvent(new Event(\"seeked\"));\n\t}\n\t#onRemoteMediaLoaded() {\n\t\tthis.#playbackRate = currentMedia()?.playbackRate ?? 1;\n\t\tcurrentMedia()?.addUpdateListener(this.#onMediaUpdate);\n\t\tthis.#updateRemoteTextTrack();\n\t}\n\t#checkPlaybackRate() {\n\t\tconst rate = currentMedia()?.playbackRate ?? 1;\n\t\tif (rate !== this.#playbackRate) {\n\t\t\tthis.#playbackRate = rate;\n\t\t\tthis.target?.dispatchEvent(new Event(\"ratechange\"));\n\t\t}\n\t}\n\tasync #updateRemoteTextTrack() {\n\t\tif (!this.#isCasting || !this.target) return;\n\t\tconst localSubs = [...this.target.textTracks].filter(isCaptionOrSubtitleTrack);\n\t\tconst matched = (this.#remotePlayer.mediaInfo?.tracks ?? []).filter(({ type }) => type === chrome.cast.media.TrackType.TEXT).flatMap(({ language, name, trackId }) => {\n\t\t\tconst local = localSubs.find((l) => l.language === language && l.label === name);\n\t\t\treturn local?.mode ? [{\n\t\t\t\tmode: local.mode,\n\t\t\t\ttrackId\n\t\t\t}] : [];\n\t\t});\n\t\tconst hidden = new Set(matched.filter((m) => m.mode !== \"showing\").map((m) => m.trackId));\n\t\tconst showing = matched.find((m) => m.mode === \"showing\")?.trackId;\n\t\tconst active = currentSession()?.getSessionObj().media[0]?.activeTrackIds ?? [];\n\t\tconst next = new Set(active.filter((id) => !hidden.has(id)));\n\t\tif (showing) next.add(showing);\n\t\tif (next.size === active.length && active.every((id) => next.has(id))) return;\n\t\ttry {\n\t\t\tawait editTracksInfo(new chrome.cast.media.EditTracksInfoRequest([...next]));\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n//#endregion\nexport { GoogleCastProvider };\n\n//# sourceMappingURL=google-cast-provider.js.map","import { requiresCastFramework } from \"./utils.js\";\nimport { GoogleCastProvider } from \"./google-cast-provider.js\";\n//#region src/dom/google-cast/media.ts\nconst googleCastDefaultProps = {\n\tsrc: void 0,\n\tcontentType: void 0,\n\tstreamType: void 0,\n\treceiver: void 0,\n\tcustomData: void 0\n};\nvar GoogleCast = class {\n\t#src;\n\t#contentType;\n\t#streamType;\n\t#receiver;\n\t#customData;\n\t#media = null;\n\t#provider = null;\n\t#override = null;\n\tconstructor(props = {}) {\n\t\tObject.assign(this, props);\n\t}\n\tsetMedia(host) {\n\t\tif (!requiresCastFramework()) return;\n\t\tthis.#media = host;\n\t\tif (!this.#provider) {\n\t\t\tthis.#provider = new GoogleCastProvider(this);\n\t\t\tthis.#provider.remote.addEventListener(\"connect\", this.#onStateChange);\n\t\t\tthis.#provider.remote.addEventListener(\"disconnect\", this.#onStateChange);\n\t\t\tthis.#override = this.#createRemoteOverride();\n\t\t}\n\t}\n\tattach(target) {\n\t\tthis.#provider?.attach(target);\n\t}\n\tdetach() {\n\t\tthis.#provider?.detach();\n\t}\n\tdestroy() {\n\t\tthis.#provider?.destroy();\n\t\tthis.#provider = null;\n\t\tthis.#media = null;\n\t}\n\t#onStateChange = () => {\n\t\tif (!this.#provider) return;\n\t\tif (this.#provider.remote.state === \"connected\") this.#override = this.#provider;\n\t\telse this.#override = this.#createRemoteOverride();\n\t};\n\t#createRemoteOverride() {\n\t\tconst provider = this.#provider;\n\t\treturn { get remote() {\n\t\t\treturn provider.remote;\n\t\t} };\n\t}\n\tget targetOverride() {\n\t\treturn this.#override;\n\t}\n\t/** Source URL loaded on the Cast receiver. Falls back to a `<source>` child, `src`, then `currentSrc`. */\n\tget src() {\n\t\treturn this.#src ?? this.#media?.querySelector(\"source\")?.src ?? this.#media?.src ?? this.#media?.currentSrc ?? \"\";\n\t}\n\tset src(value) {\n\t\tif (this.#src === value) return;\n\t\tthis.#src = value;\n\t\tthis.#load();\n\t}\n\t/** MIME type of the Cast source. When unset, the receiver infers it from the URL. */\n\tget contentType() {\n\t\treturn this.#contentType;\n\t}\n\tset contentType(value) {\n\t\tif (this.#contentType === value) return;\n\t\tthis.#contentType = value;\n\t\tthis.#load();\n\t}\n\t/** Stream type used on the Cast receiver. Falls back to the host's `streamType` if it exposes one. */\n\tget streamType() {\n\t\treturn this.#streamType ?? this.#media?.streamType;\n\t}\n\tset streamType(value) {\n\t\tif (this.#streamType === value) return;\n\t\tthis.#streamType = value;\n\t\tthis.#load();\n\t}\n\t/** Cast receiver application ID. Read on session start; falls back to the layer's default. */\n\tget receiver() {\n\t\treturn this.#receiver;\n\t}\n\tset receiver(value) {\n\t\tif (this.#receiver === value) return;\n\t\tthis.#receiver = value;\n\t\tthis.#load();\n\t}\n\t/** Custom data sent to the Cast receiver with the load request. */\n\tget customData() {\n\t\treturn this.#customData;\n\t}\n\tset customData(value) {\n\t\tif (this.#customData === value) return;\n\t\tthis.#customData = value;\n\t\tthis.#load();\n\t}\n\t#load() {\n\t\tif (this.#media?.remote.state === \"connected\") this.#media.load();\n\t}\n};\n//#endregion\nexport { GoogleCast, googleCastDefaultProps };\n\n//# sourceMappingURL=media.js.map","import type { PropertyDeclarationMap } from '@videojs/element';\nimport { GoogleCast, type GoogleCastProps } from '@videojs/media/dom/google-cast';\n\nimport { MediaComponentElement } from '../media-component-element';\n\n/**\n * Adds Google Cast support to the surrounding player's media.\n *\n * Renders nothing — place it inside the player as a sibling of the media\n * element and it registers a {@link GoogleCast} media component with the\n * active media host.\n *\n * @example\n * ```html\n * <video-player>\n * <hlsjs-video src=\"https://example.com/stream.m3u8\"></hlsjs-video>\n * <google-cast receiver=\"YOUR_APP_ID\"></google-cast>\n * </video-player>\n * ```\n */\nexport class GoogleCastElement extends MediaComponentElement<GoogleCast> {\n static readonly tagName = 'google-cast';\n\n static override properties = {\n src: { type: String },\n contentType: { type: String, attribute: 'content-type' },\n streamType: { type: String, attribute: 'stream-type' },\n receiver: { type: String },\n // `customData` takes an object, so it's a property-only prop.\n } satisfies PropertyDeclarationMap<Exclude<keyof GoogleCastProps, 'customData'>>;\n\n protected createComponent(): GoogleCast {\n return new GoogleCast();\n }\n\n /** Source URL loaded on the Cast receiver. Falls back to the media's `src` / `currentSrc`. */\n get src(): string {\n return this.component.src ?? '';\n }\n\n set src(value: string | null | undefined) {\n this.component.src = value ?? undefined;\n }\n\n /** MIME type of the Cast source. When unset, the receiver infers it from the URL. */\n get contentType(): string | undefined {\n return this.component.contentType;\n }\n\n set contentType(value: string | null | undefined) {\n this.component.contentType = value ?? undefined;\n }\n\n /** Stream type used on the Cast receiver. Falls back to the media's `streamType`. */\n get streamType(): GoogleCastProps['streamType'] {\n return this.component.streamType;\n }\n\n set streamType(value: GoogleCastProps['streamType'] | null) {\n this.component.streamType = value ?? undefined;\n }\n\n /** Cast receiver application ID. Defaults to Google's default media receiver. */\n get receiver(): string | undefined {\n return this.component.receiver;\n }\n\n set receiver(value: string | null | undefined) {\n this.component.receiver = value ?? undefined;\n }\n\n /** Custom data sent to the Cast receiver with the load request. */\n get customData(): GoogleCastProps['customData'] {\n return this.component.customData;\n }\n\n set customData(value: GoogleCastProps['customData']) {\n this.component.customData = value;\n }\n}\n","import { GoogleCastElement } from '../../media/google-cast';\nimport { safeDefine } from '../safe-define';\n\nexport { GoogleCastElement };\n\nsafeDefine(GoogleCastElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [GoogleCastElement.tagName]: GoogleCastElement;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"google-cast.dev.js","names":["#seen","#refs","#provider","#setState","#setAvailable","#state","#assertEnabled","#callbacks","#available","#updateRemoteTextTrack","#checkPlaybackRate","#googleCast","#remotePlayback","#onTextTrackChange","#onMediaUpdate","#detachRemoteListeners","#isCasting","#isInit","#hooks","#isCastApiAvailable","#applyCastOptions","#attachRemoteListeners","#localPaused","#remotePlayer","#seeking","#notifySeeking","#remoteListeners","#disconnect","#notifySeeked","#onRemoteMediaLoaded","#listenersAttached","#playbackRate","#media","#provider","#onStateChange","#override","#createRemoteOverride","#src","#load","#contentType","#streamType","#receiver","#customData"],"sources":["../../../media/dist/dev/dom/google-cast/utils.js","../../../media/dist/dev/dom/google-cast/registry.js","../../../media/dist/dev/dom/google-cast/remote-playback.js","../../../media/dist/dev/dom/google-cast/google-cast-provider.js","../../../media/dist/dev/dom/google-cast/media.js","../../src/media/google-cast/google-cast-element.ts","../../src/define/media/google-cast.ts"],"sourcesContent":["import { loadScript } from \"@videojs/utils/dom\";\n//#region src/dom/google-cast/utils.ts\nvar InvalidStateError = class extends Error {};\nvar NotSupportedError = class extends Error {};\nvar NotFoundError = class extends Error {};\nconst GOOGLE_CAST_FRAMEWORK_URL = \"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1\";\nconst HLS_RESPONSE_HEADERS = [\n\t\"application/x-mpegURL\",\n\t\"application/vnd.apple.mpegurl\",\n\t\"audio/mpegurl\"\n];\nvar IterableWeakSet = class {\n\t#refs = /* @__PURE__ */ new Set();\n\t#seen = /* @__PURE__ */ new WeakMap();\n\tadd(value) {\n\t\tif (this.#seen.has(value)) return this;\n\t\tconst ref = new WeakRef(value);\n\t\tthis.#seen.set(value, ref);\n\t\tthis.#refs.add(ref);\n\t\treturn this;\n\t}\n\tdelete(value) {\n\t\tconst ref = this.#seen.get(value);\n\t\tif (!ref) return false;\n\t\tthis.#seen.delete(value);\n\t\treturn this.#refs.delete(ref);\n\t}\n\tforEach(fn) {\n\t\tfor (const ref of this.#refs) {\n\t\t\tconst value = ref.deref();\n\t\t\tif (value) fn(value);\n\t\t\telse this.#refs.delete(ref);\n\t\t}\n\t}\n};\nfunction onCastApiAvailable(callback) {\n\tconst whenDefined = () => customElements.whenDefined(\"google-cast-button\").then(callback);\n\tif (!globalThis.chrome?.cast?.isAvailable) globalThis.__onGCastApiAvailable = whenDefined;\n\telse if (typeof cast === \"undefined\" || !cast.framework) whenDefined();\n\telse callback();\n}\nfunction requiresCastFramework() {\n\treturn Boolean(globalThis.chrome);\n}\nasync function loadCastFramework() {\n\tif (globalThis.chrome?.cast) return;\n\tawait loadScript(GOOGLE_CAST_FRAMEWORK_URL);\n}\nfunction getCastContext() {\n\treturn typeof cast === \"undefined\" ? void 0 : cast.framework?.CastContext.getInstance();\n}\nfunction currentSession() {\n\treturn getCastContext()?.getCurrentSession();\n}\nfunction currentMedia() {\n\treturn currentSession()?.getSessionObj().media[0] ?? void 0;\n}\nfunction editTracksInfo(request) {\n\treturn new Promise((resolve, reject) => {\n\t\tcurrentMedia().editTracksInfo(request, resolve, reject);\n\t});\n}\nfunction getMediaStatus(request) {\n\treturn new Promise((resolve, reject) => {\n\t\tcurrentMedia().getStatus(request, resolve, reject);\n\t});\n}\nconst MEDIA_NAMESPACE = \"urn:x-cast:com.google.cast.media\";\nlet requestId = 0;\nfunction setPlaybackRate(rate) {\n\tconst media = currentMedia();\n\treturn currentSession().sendMessage(MEDIA_NAMESPACE, {\n\t\ttype: \"SET_PLAYBACK_RATE\",\n\t\tplaybackRate: rate,\n\t\tmediaSessionId: media?.mediaSessionId,\n\t\trequestId: ++requestId\n\t});\n}\nfunction setCastOptions(options) {\n\tgetCastContext().setOptions({\n\t\t...getDefaultCastOptions(),\n\t\t...options\n\t});\n}\nfunction getDefaultCastOptions() {\n\treturn {\n\t\treceiverApplicationId: \"CC1AD845\",\n\t\tautoJoinPolicy: globalThis.chrome?.cast?.AutoJoinPolicy?.ORIGIN_SCOPED ?? \"origin_scoped\",\n\t\tandroidReceiverCompatible: false,\n\t\tlanguage: \"en-US\",\n\t\tresumeSavedSession: true\n\t};\n}\nfunction getFormat(segment) {\n\tif (!segment) return void 0;\n\tconst match = segment.match(/\\.([a-zA-Z0-9]+)(?:\\?.*)?$/);\n\treturn match ? match[1] : null;\n}\nfunction parsePlaylistUrls(playlistContent) {\n\tconst lines = playlistContent.split(\"\\n\");\n\tconst urls = [];\n\tfor (let i = 0; i < lines.length; i++) if (lines[i].trim().startsWith(\"#EXT-X-STREAM-INF\")) {\n\t\tconst nextLine = lines[i + 1] ? lines[i + 1].trim() : \"\";\n\t\tif (nextLine && !nextLine.startsWith(\"#\")) urls.push(nextLine);\n\t}\n\treturn urls;\n}\nfunction parseSegment(playlistContent) {\n\treturn playlistContent.split(\"\\n\").find((line) => !line.trim().startsWith(\"#\") && line.trim() !== \"\");\n}\nasync function isHls(url) {\n\tif (!url) return false;\n\tif (/\\.m3u8?(\\?.*)?$/i.test(url)) return true;\n\tif (url.startsWith(\"blob:\")) return false;\n\ttry {\n\t\tconst contentType = (await fetch(url, { method: \"HEAD\" })).headers.get(\"Content-Type\");\n\t\tif (!contentType) return false;\n\t\tconst normalizedContentType = contentType.toLowerCase().split(\";\")[0].trim();\n\t\treturn HLS_RESPONSE_HEADERS.some((header) => normalizedContentType === header.toLowerCase());\n\t} catch (err) {\n\t\tconsole.error(\"Error while trying to get the Content-Type of the manifest\", err);\n\t\treturn false;\n\t}\n}\nasync function getPlaylistSegmentFormat(url) {\n\ttry {\n\t\tconst mainManifestContent = await (await fetch(url)).text();\n\t\tlet availableChunksContent = mainManifestContent;\n\t\tconst playlists = parsePlaylistUrls(mainManifestContent);\n\t\tif (playlists.length > 0) {\n\t\t\tconst chosenPlaylistUrl = new URL(playlists[0], url).toString();\n\t\t\tavailableChunksContent = await (await fetch(chosenPlaylistUrl)).text();\n\t\t}\n\t\treturn getFormat(parseSegment(availableChunksContent));\n\t} catch (err) {\n\t\tconsole.error(\"Error while trying to parse the manifest playlist\", err);\n\t\treturn;\n\t}\n}\n//#endregion\nexport { InvalidStateError, IterableWeakSet, NotFoundError, NotSupportedError, currentMedia, currentSession, editTracksInfo, getCastContext, getMediaStatus, getPlaylistSegmentFormat, isHls, loadCastFramework, onCastApiAvailable, requiresCastFramework, setCastOptions, setPlaybackRate };\n\n//# sourceMappingURL=utils.js.map","import { IterableWeakSet, getCastContext, loadCastFramework, onCastApiAvailable } from \"./utils.js\";\n//#region src/dom/google-cast/registry.ts\nconst googleCastInstances = new IterableWeakSet();\nlet castFramework;\nlet pendingCastFramework = null;\nasync function ensureCastFramework() {\n\tif (castFramework) return castFramework;\n\tif (!pendingCastFramework) {\n\t\tpendingCastFramework = loadCastFramework().then(() => new Promise((resolve, reject) => {\n\t\t\tonCastApiAvailable(() => {\n\t\t\t\tregisterCastFramework();\n\t\t\t\tif (castFramework) {\n\t\t\t\t\tresolve(castFramework);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treject(new DOMException(\"Google Cast framework is unavailable.\", \"NotSupportedError\"));\n\t\t\t});\n\t\t}));\n\t\tpendingCastFramework.catch(() => {\n\t\t\tpendingCastFramework = null;\n\t\t});\n\t}\n\treturn pendingCastFramework;\n}\nfunction registerCastFramework() {\n\tif (!globalThis.chrome?.cast?.isAvailable) {\n\t\tconsole.debug(\"chrome.cast.isAvailable\", globalThis.chrome?.cast?.isAvailable);\n\t\treturn;\n\t}\n\tif (!castFramework) {\n\t\tcastFramework = cast.framework;\n\t\tgetCastContext().addEventListener(castFramework.CastContextEventType.CAST_STATE_CHANGED, () => {\n\t\t\tgoogleCastInstances.forEach((provider) => provider.onCastStateChanged());\n\t\t});\n\t\tgetCastContext().addEventListener(castFramework.CastContextEventType.SESSION_STATE_CHANGED, () => {\n\t\t\tgoogleCastInstances.forEach((provider) => provider.onSessionStateChanged());\n\t\t});\n\t\tgoogleCastInstances.forEach((provider) => provider.onCastFrameworkAvailable());\n\t}\n}\n//#endregion\nexport { castFramework, ensureCastFramework, googleCastInstances };\n\n//# sourceMappingURL=registry.js.map","import { InvalidStateError, NotFoundError } from \"./utils.js\";\n//#region src/dom/google-cast/remote-playback.ts\nlet callbackIdCount = 0;\n/**\n* Implementation of the W3C [`RemotePlayback`](https://developer.mozilla.org/en-US/docs/Web/API/RemotePlayback)\n* interface backed by Google Cast.\n*\n* Surfaced via `host.remote` while the {@link GoogleCastProvider} is in the\n* provider chain. The public API must strictly conform to the W3C spec:\n*\n* - Properties: `state`\n* - Methods: `watchAvailability`, `cancelWatchAvailability`, `prompt`\n* - Events: `connecting`, `connect`, `disconnect`\n*\n* Internal state mutations are pushed by {@link GoogleCastProvider} through\n* private callbacks registered via `provider.bindHooks(...)` in the constructor —\n* do not add public methods or properties that aren't part of the spec.\n*/\nvar RemotePlayback = class extends EventTarget {\n\t#provider;\n\t#state = \"disconnected\";\n\t#available = false;\n\t#callbacks = /* @__PURE__ */ new Map();\n\tconstructor(provider) {\n\t\tsuper();\n\t\tthis.#provider = provider;\n\t\tprovider.bindHooks({\n\t\t\tsetState: (next) => this.#setState(next),\n\t\t\tsetAvailable: (available) => this.#setAvailable(available)\n\t\t});\n\t}\n\tget state() {\n\t\treturn this.#state;\n\t}\n\tasync watchAvailability(callback) {\n\t\tthis.#assertEnabled();\n\t\tconst id = ++callbackIdCount;\n\t\tthis.#callbacks.set(id, callback);\n\t\tqueueMicrotask(() => callback(this.#provider.hasDevicesAvailable()));\n\t\treturn id;\n\t}\n\tasync cancelWatchAvailability(callbackId) {\n\t\tthis.#assertEnabled();\n\t\tif (callbackId === void 0) {\n\t\t\tthis.#callbacks.clear();\n\t\t\treturn;\n\t\t}\n\t\tif (!this.#callbacks.delete(callbackId)) throw new NotFoundError(`Callback not found for id ${callbackId}.`);\n\t}\n\tasync prompt() {\n\t\tthis.#assertEnabled();\n\t\tawait this.#provider.requestCastSession();\n\t}\n\t#assertEnabled() {\n\t\tif (this.#provider.target?.disableRemotePlayback) throw new InvalidStateError(\"disableRemotePlayback attribute is present.\");\n\t}\n\t#setState(next) {\n\t\tif (this.#state === next) return;\n\t\tthis.#state = next;\n\t\tif (next === \"connecting\") this.dispatchEvent(new Event(\"connecting\"));\n\t\telse if (next === \"connected\") this.dispatchEvent(new Event(\"connect\"));\n\t\telse this.dispatchEvent(new Event(\"disconnect\"));\n\t}\n\t#setAvailable(available) {\n\t\tif (this.#available === available) return;\n\t\tthis.#available = available;\n\t\tfor (const callback of this.#callbacks.values()) callback(available);\n\t}\n};\n//#endregion\nexport { RemotePlayback };\n\n//# sourceMappingURL=remote-playback.js.map","import { InvalidStateError, NotSupportedError, currentMedia, currentSession, editTracksInfo, getCastContext, getMediaStatus, getPlaylistSegmentFormat, isHls, setCastOptions, setPlaybackRate } from \"./utils.js\";\nimport { castFramework, ensureCastFramework, googleCastInstances } from \"./registry.js\";\nimport { RemotePlayback } from \"./remote-playback.js\";\nimport { isCaptionOrSubtitleTrack } from \"@videojs/utils/dom\";\n//#region src/dom/google-cast/google-cast-provider.ts\n/**\n* Cast provider + lifecycle. Created by the {@link GoogleCast} component and\n* installed as the host's `targetOverride` while a cast session is connected,\n* so its getters/setters route through the cast receiver; when disconnected the\n* host falls through to the attached target. Also owns the cast framework\n* integration, the `RemotePlayback` instance exposed via\n* {@link GoogleCastProvider#remote}, and dispatches media events on the attached\n* target (forwarded by the host) while casting.\n*/\nvar GoogleCastProvider = class {\n\ttarget = null;\n\t#googleCast;\n\t#hooks = {};\n\t#remotePlayback;\n\t#isInit = false;\n\t#isCasting = false;\n\t#seeking = false;\n\t#remotePlayer;\n\t#remoteListeners;\n\t#listenersAttached = false;\n\t#playbackRate = 1;\n\t#localPaused = false;\n\t#onTextTrackChange = () => this.#updateRemoteTextTrack();\n\t#onMediaUpdate = () => this.#checkPlaybackRate();\n\tconstructor(googleCast) {\n\t\tthis.#googleCast = googleCast;\n\t\tthis.#remotePlayback = new RemotePlayback(this);\n\t\tgoogleCastInstances.add(this);\n\t\tthis.onCastFrameworkAvailable();\n\t}\n\tget remote() {\n\t\tif (this.target && !this.target.disableRemotePlayback) ensureCastFramework();\n\t\treturn this.#remotePlayback;\n\t}\n\tattach(target) {\n\t\tthis.target = target;\n\t\ttarget.textTracks.addEventListener(\"change\", this.#onTextTrackChange);\n\t}\n\tdetach() {\n\t\tthis.target?.textTracks.removeEventListener(\"change\", this.#onTextTrackChange);\n\t\tthis.target = null;\n\t}\n\tdestroy() {\n\t\tthis.detach();\n\t\tgoogleCastInstances.delete(this);\n\t\tcurrentMedia()?.removeUpdateListener(this.#onMediaUpdate);\n\t\tthis.#detachRemoteListeners();\n\t\tthis.#isCasting = false;\n\t\tthis.#isInit = false;\n\t}\n\t/** @internal Wires up callbacks pushed from {@link RemotePlayback}; not part of the public surface. */\n\tbindHooks(hooks) {\n\t\tObject.assign(this.#hooks, hooks);\n\t}\n\thasDevicesAvailable() {\n\t\tconst state = getCastContext()?.getCastState();\n\t\treturn !!state && state !== cast.framework.CastState.NO_DEVICES_AVAILABLE;\n\t}\n\tasync requestCastSession() {\n\t\tif (this.target?.disableRemotePlayback) throw new InvalidStateError(\"disableRemotePlayback attribute is present.\");\n\t\tawait ensureCastFramework();\n\t\tif (!this.#isCastApiAvailable()) throw new NotSupportedError(\"The RemotePlayback API is disabled on this platform.\");\n\t\tconst willDisconnect = this.#isCasting;\n\t\tthis.#isCasting = true;\n\t\tthis.#applyCastOptions();\n\t\tthis.#attachRemoteListeners();\n\t\ttry {\n\t\t\tawait getCastContext().requestSession();\n\t\t} catch (err) {\n\t\t\tif (!willDisconnect) this.#isCasting = false;\n\t\t\tif (err === \"cancel\") return;\n\t\t\tthrow new Error(err);\n\t\t}\n\t\tthis.#localPaused = this.target?.paused ?? true;\n\t\tthis.target?.pause();\n\t\tthis.muted = this.target?.muted ?? false;\n\t\ttry {\n\t\t\tawait this.load();\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\tasync load() {\n\t\tif (!this.#isCasting) {\n\t\t\tawait this.target?.load();\n\t\t\treturn;\n\t\t}\n\t\tif (!this.#googleCast.src) return;\n\t\tconst mediaInfo = new chrome.cast.media.MediaInfo(this.#googleCast.src, this.#googleCast.contentType ?? \"\");\n\t\tmediaInfo.customData = this.#googleCast.customData ?? null;\n\t\tconst { target } = this;\n\t\tconst subtitles = [...target?.querySelectorAll(\"track\") ?? []].filter((el) => el.src && isCaptionOrSubtitleTrack(el));\n\t\tconst { Track, TrackType, TextTrackType } = chrome.cast.media;\n\t\tconst activeTrackIds = [];\n\t\tif (subtitles.length) mediaInfo.tracks = subtitles.map((el, i) => {\n\t\t\tconst trackId = i + 1;\n\t\t\tif (!activeTrackIds.length && el.track.mode === \"showing\") activeTrackIds.push(trackId);\n\t\t\tconst track = new Track(trackId, TrackType.TEXT);\n\t\t\ttrack.trackContentId = el.src;\n\t\t\ttrack.trackContentType = \"text/vtt\";\n\t\t\ttrack.subtype = el.kind === \"captions\" ? TextTrackType.CAPTIONS : TextTrackType.SUBTITLES;\n\t\t\ttrack.name = el.label;\n\t\t\ttrack.language = el.srclang;\n\t\t\treturn track;\n\t\t});\n\t\tmediaInfo.streamType = this.#googleCast.streamType === \"live\" ? chrome.cast.media.StreamType.LIVE : chrome.cast.media.StreamType.BUFFERED;\n\t\tmediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata();\n\t\tmediaInfo.metadata.images = [new chrome.cast.Image(target?.poster ?? \"\")];\n\t\tif (await isHls(this.#googleCast.src)) {\n\t\t\tmediaInfo.contentType ||= \"application/x-mpegURL\";\n\t\t\tconst fmt = await getPlaylistSegmentFormat(this.#googleCast.src) ?? \"\";\n\t\t\tconst { HlsSegmentFormat: HS, HlsVideoSegmentFormat: HVS } = chrome.cast.media;\n\t\t\tif (fmt.includes(\"m4s\") || fmt.includes(\"mp4\")) {\n\t\t\t\tmediaInfo.hlsSegmentFormat = HS.FMP4;\n\t\t\t\tmediaInfo.hlsVideoSegmentFormat = HVS.FMP4;\n\t\t\t} else if (fmt.includes(\"ts\")) {\n\t\t\t\tmediaInfo.hlsSegmentFormat = HS.TS;\n\t\t\t\tmediaInfo.hlsVideoSegmentFormat = HVS.TS;\n\t\t\t}\n\t\t}\n\t\tconst request = new chrome.cast.media.LoadRequest(mediaInfo);\n\t\trequest.currentTime = this.target?.currentTime ?? 0;\n\t\trequest.autoplay = !this.#localPaused;\n\t\trequest.activeTrackIds = activeTrackIds;\n\t\tawait currentSession()?.loadMedia(request);\n\t\tthis.target?.dispatchEvent(new Event(\"volumechange\"));\n\t}\n\tget paused() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) return this.target?.paused ?? true;\n\t\treturn this.#remotePlayer.isPaused || this.ended;\n\t}\n\tget ended() {\n\t\treturn this.#remotePlayer.playerState === chrome.cast.media.PlayerState.IDLE && currentMedia()?.idleReason === chrome.cast.media.IdleReason.FINISHED;\n\t}\n\tget seeking() {\n\t\treturn this.#seeking;\n\t}\n\tget readyState() {\n\t\tswitch (this.#remotePlayer.playerState) {\n\t\t\tcase chrome.cast.media.PlayerState.IDLE: return 0;\n\t\t\tcase chrome.cast.media.PlayerState.BUFFERING: return 2;\n\t\t\tdefault: return 3;\n\t\t}\n\t}\n\tget duration() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) return this.target?.duration ?? NaN;\n\t\treturn this.#remotePlayer.duration ?? NaN;\n\t}\n\tget currentTime() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) return this.target?.currentTime ?? 0;\n\t\treturn this.#remotePlayer.currentTime ?? 0;\n\t}\n\tset currentTime(value) {\n\t\tthis.#remotePlayer.currentTime = value;\n\t\tthis.#notifySeeking();\n\t\tthis.#remotePlayer.controller?.seek();\n\t}\n\tget muted() {\n\t\treturn this.#remotePlayer.isMuted;\n\t}\n\tset muted(value) {\n\t\tif (value !== this.#remotePlayer.isMuted) this.#remotePlayer.controller?.muteOrUnmute();\n\t}\n\tget volume() {\n\t\treturn this.#remotePlayer.volumeLevel ?? 1;\n\t}\n\tset volume(value) {\n\t\tthis.#remotePlayer.volumeLevel = +value;\n\t\tthis.#remotePlayer.controller?.setVolumeLevel();\n\t}\n\tget playbackRate() {\n\t\treturn currentMedia()?.playbackRate ?? 1;\n\t}\n\tset playbackRate(value) {\n\t\tsetPlaybackRate(value);\n\t}\n\tasync play() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) {\n\t\t\tthis.#localPaused = false;\n\t\t\tawait this.load();\n\t\t\treturn;\n\t\t}\n\t\tif (this.paused) {\n\t\t\tthis.#remotePlayer.controller?.playOrPause();\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.target?.addEventListener(\"play\", () => resolve(), { once: true });\n\t\t\t});\n\t\t}\n\t}\n\tpause() {\n\t\tif (!this.paused) this.#remotePlayer.controller?.playOrPause();\n\t}\n\tonCastFrameworkAvailable() {\n\t\tif (!castFramework || this.#isInit) return;\n\t\tthis.#isInit = true;\n\t\tthis.#applyCastOptions();\n\t\tthis.onCastStateChanged();\n\t\tthis.#remotePlayer = new castFramework.RemotePlayer();\n\t\tnew castFramework.RemotePlayerController(this.#remotePlayer);\n\t\tthis.#remoteListeners = {\n\t\t\t[castFramework.RemotePlayerEventType.IS_CONNECTED_CHANGED]: (event) => {\n\t\t\t\tif (event?.value === true) this.#hooks.setState?.(\"connected\");\n\t\t\t\telse {\n\t\t\t\t\tthis.#disconnect();\n\t\t\t\t\tthis.#hooks.setState?.(\"disconnected\");\n\t\t\t\t}\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.DURATION_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"durationchange\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"volumechange\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.IS_MUTED_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"volumechange\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.CURRENT_TIME_CHANGED]: () => {\n\t\t\t\tif (!this.#isCasting || !this.#remotePlayer.isMediaLoaded) return;\n\t\t\t\tthis.#notifySeeked();\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"timeupdate\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.VIDEO_INFO_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"resize\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.IS_PAUSED_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(this.#isCasting && this.#remotePlayer.isPaused ? \"pause\" : \"play\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.PLAYER_STATE_CHANGED]: () => {\n\t\t\t\tconst PS = chrome.cast.media.PlayerState;\n\t\t\t\tconst state = this.#isCasting ? this.#remotePlayer.playerState : void 0;\n\t\t\t\tif (state !== PS.BUFFERING) this.#notifySeeked();\n\t\t\t\tif (state === PS.PAUSED) return;\n\t\t\t\tif (state === PS.IDLE) {\n\t\t\t\t\tconst finished = currentMedia()?.idleReason === chrome.cast.media.IdleReason.FINISHED;\n\t\t\t\t\tthis.target?.dispatchEvent(new Event(finished ? \"ended\" : \"emptied\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (state === PS.PLAYING) this.target?.dispatchEvent(new Event(\"playing\"));\n\t\t\t\telse if (state === PS.BUFFERING) this.target?.dispatchEvent(new Event(\"waiting\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED]: async () => {\n\t\t\t\tif (!this.#isCasting || !this.#remotePlayer.isMediaLoaded) return;\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tthis.#onRemoteMediaLoaded();\n\t\t\t}\n\t\t};\n\t}\n\tonCastStateChanged() {\n\t\tif (!this.#isInit) return;\n\t\tconst CS = cast.framework.CastState;\n\t\tconst state = getCastContext().getCastState();\n\t\tif (this.#isCasting && state === CS.CONNECTING) this.#hooks.setState?.(\"connecting\");\n\t\tthis.#hooks.setAvailable?.(!!state && state !== CS.NO_DEVICES_AVAILABLE);\n\t}\n\tasync onSessionStateChanged() {\n\t\tif (!this.#isInit) return;\n\t\tconst { SESSION_RESUMED } = castFramework.SessionState;\n\t\tif (getCastContext().getSessionState() === SESSION_RESUMED) {\n\t\t\tif (this.#googleCast.src === currentMedia()?.media?.contentId) {\n\t\t\t\tthis.#isCasting = true;\n\t\t\t\tthis.#attachRemoteListeners();\n\t\t\t\ttry {\n\t\t\t\t\tawait getMediaStatus(new chrome.cast.media.GetStatusRequest());\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t}\n\t\t\t\tthis.#remoteListeners[castFramework.RemotePlayerEventType.IS_PAUSED_CHANGED]();\n\t\t\t\tthis.#remoteListeners[castFramework.RemotePlayerEventType.PLAYER_STATE_CHANGED]();\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"ratechange\"));\n\t\t\t}\n\t\t}\n\t}\n\t#isCastApiAvailable() {\n\t\treturn Boolean(globalThis.chrome?.cast?.isAvailable);\n\t}\n\t#applyCastOptions() {\n\t\tconst { receiver } = this.#googleCast;\n\t\tsetCastOptions(receiver ? { receiverApplicationId: receiver } : {});\n\t}\n\t#attachRemoteListeners() {\n\t\tif (this.#listenersAttached) return;\n\t\tconst controller = this.#remotePlayer?.controller;\n\t\tif (!controller) return;\n\t\tfor (const [type, handler] of Object.entries(this.#remoteListeners)) controller.addEventListener(type, handler);\n\t\tthis.#listenersAttached = true;\n\t}\n\t#detachRemoteListeners() {\n\t\tif (!this.#listenersAttached) return;\n\t\tconst controller = this.#remotePlayer?.controller;\n\t\tif (controller) for (const [type, handler] of Object.entries(this.#remoteListeners)) controller.removeEventListener(type, handler);\n\t\tthis.#listenersAttached = false;\n\t}\n\t#disconnect() {\n\t\tif (!this.#isCasting) return;\n\t\tcurrentMedia()?.removeUpdateListener(this.#onMediaUpdate);\n\t\tthis.#detachRemoteListeners();\n\t\tthis.#seeking = false;\n\t\tthis.#playbackRate = 1;\n\t\tthis.#isCasting = false;\n\t\tif (this.target) this.target.muted = this.#remotePlayer.isMuted;\n\t\tconst saved = this.#remotePlayer.savedPlayerState;\n\t\tif (saved) {\n\t\t\tif (this.target) this.target.currentTime = saved.currentTime;\n\t\t\tif (saved.isPaused === false && this.target) this.target.play();\n\t\t}\n\t}\n\t#notifySeeking() {\n\t\tthis.#seeking = true;\n\t\tthis.target?.dispatchEvent(new Event(\"seeking\"));\n\t}\n\t#notifySeeked() {\n\t\tif (!this.#seeking) return;\n\t\tthis.#seeking = false;\n\t\tthis.target?.dispatchEvent(new Event(\"seeked\"));\n\t}\n\t#onRemoteMediaLoaded() {\n\t\tthis.#playbackRate = currentMedia()?.playbackRate ?? 1;\n\t\tcurrentMedia()?.addUpdateListener(this.#onMediaUpdate);\n\t\tthis.#updateRemoteTextTrack();\n\t}\n\t#checkPlaybackRate() {\n\t\tconst rate = currentMedia()?.playbackRate ?? 1;\n\t\tif (rate !== this.#playbackRate) {\n\t\t\tthis.#playbackRate = rate;\n\t\t\tthis.target?.dispatchEvent(new Event(\"ratechange\"));\n\t\t}\n\t}\n\tasync #updateRemoteTextTrack() {\n\t\tif (!this.#isCasting || !this.target) return;\n\t\tconst localSubs = [...this.target.textTracks].filter(isCaptionOrSubtitleTrack);\n\t\tconst matched = (this.#remotePlayer.mediaInfo?.tracks ?? []).filter(({ type }) => type === chrome.cast.media.TrackType.TEXT).flatMap(({ language, name, trackId }) => {\n\t\t\tconst local = localSubs.find((l) => l.language === language && l.label === name);\n\t\t\treturn local?.mode ? [{\n\t\t\t\tmode: local.mode,\n\t\t\t\ttrackId\n\t\t\t}] : [];\n\t\t});\n\t\tconst hidden = new Set(matched.filter((m) => m.mode !== \"showing\").map((m) => m.trackId));\n\t\tconst showing = matched.find((m) => m.mode === \"showing\")?.trackId;\n\t\tconst active = currentSession()?.getSessionObj().media[0]?.activeTrackIds ?? [];\n\t\tconst next = new Set(active.filter((id) => !hidden.has(id)));\n\t\tif (showing) next.add(showing);\n\t\tif (next.size === active.length && active.every((id) => next.has(id))) return;\n\t\ttry {\n\t\t\tawait editTracksInfo(new chrome.cast.media.EditTracksInfoRequest([...next]));\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n//#endregion\nexport { GoogleCastProvider };\n\n//# sourceMappingURL=google-cast-provider.js.map","import { requiresCastFramework } from \"./utils.js\";\nimport { GoogleCastProvider } from \"./google-cast-provider.js\";\n//#region src/dom/google-cast/media.ts\nconst googleCastDefaultProps = {\n\tsrc: void 0,\n\tcontentType: void 0,\n\tstreamType: void 0,\n\treceiver: void 0,\n\tcustomData: void 0\n};\nvar GoogleCast = class {\n\t#src;\n\t#contentType;\n\t#streamType;\n\t#receiver;\n\t#customData;\n\t#media = null;\n\t#provider = null;\n\t#override = null;\n\tconstructor(props = {}) {\n\t\tObject.assign(this, props);\n\t}\n\tsetMedia(host) {\n\t\tif (!requiresCastFramework()) return;\n\t\tthis.#media = host;\n\t\tif (!this.#provider) {\n\t\t\tthis.#provider = new GoogleCastProvider(this);\n\t\t\tthis.#provider.remote.addEventListener(\"connect\", this.#onStateChange);\n\t\t\tthis.#provider.remote.addEventListener(\"disconnect\", this.#onStateChange);\n\t\t\tthis.#override = this.#createRemoteOverride();\n\t\t}\n\t}\n\tattach(target) {\n\t\tthis.#provider?.attach(target);\n\t}\n\tdetach() {\n\t\tthis.#provider?.detach();\n\t}\n\tdestroy() {\n\t\tthis.#provider?.destroy();\n\t\tthis.#provider = null;\n\t\tthis.#media = null;\n\t}\n\t#onStateChange = () => {\n\t\tif (!this.#provider) return;\n\t\tif (this.#provider.remote.state === \"connected\") this.#override = this.#provider;\n\t\telse this.#override = this.#createRemoteOverride();\n\t};\n\t#createRemoteOverride() {\n\t\tconst provider = this.#provider;\n\t\treturn { get remote() {\n\t\t\treturn provider.remote;\n\t\t} };\n\t}\n\tget targetOverride() {\n\t\treturn this.#override;\n\t}\n\t/** Source URL loaded on the Cast receiver. Falls back to a `<source>` child, `src`, then `currentSrc`. */\n\tget src() {\n\t\treturn this.#src ?? this.#media?.querySelector(\"source\")?.src ?? this.#media?.src ?? this.#media?.currentSrc ?? \"\";\n\t}\n\tset src(value) {\n\t\tif (this.#src === value) return;\n\t\tthis.#src = value;\n\t\tthis.#load();\n\t}\n\t/** MIME type of the Cast source. When unset, the receiver infers it from the URL. */\n\tget contentType() {\n\t\treturn this.#contentType;\n\t}\n\tset contentType(value) {\n\t\tif (this.#contentType === value) return;\n\t\tthis.#contentType = value;\n\t\tthis.#load();\n\t}\n\t/** Stream type used on the Cast receiver. Falls back to the host's `streamType` if it exposes one. */\n\tget streamType() {\n\t\treturn this.#streamType ?? this.#media?.streamType;\n\t}\n\tset streamType(value) {\n\t\tif (this.#streamType === value) return;\n\t\tthis.#streamType = value;\n\t\tthis.#load();\n\t}\n\t/** Cast receiver application ID. Read on session start; falls back to the layer's default. */\n\tget receiver() {\n\t\treturn this.#receiver;\n\t}\n\tset receiver(value) {\n\t\tif (this.#receiver === value) return;\n\t\tthis.#receiver = value;\n\t\tthis.#load();\n\t}\n\t/** Custom data sent to the Cast receiver with the load request. */\n\tget customData() {\n\t\treturn this.#customData;\n\t}\n\tset customData(value) {\n\t\tif (this.#customData === value) return;\n\t\tthis.#customData = value;\n\t\tthis.#load();\n\t}\n\t#load() {\n\t\tif (this.#media?.remote.state === \"connected\") this.#media.load();\n\t}\n};\n//#endregion\nexport { GoogleCast, googleCastDefaultProps };\n\n//# sourceMappingURL=media.js.map","import type { PropertyDeclarationMap } from '@videojs/element';\nimport { GoogleCast, type GoogleCastProps } from '@videojs/media/dom/google-cast';\n\nimport { MediaComponentElement } from '../media-component-element';\n\n/**\n * Adds Google Cast support to the surrounding player's media.\n *\n * Renders nothing — place it inside the player as a sibling of the media\n * element and it registers a {@link GoogleCast} media component with the\n * active media host.\n *\n * @example\n * ```html\n * <video-player>\n * <hlsjs-video src=\"https://example.com/stream.m3u8\"></hlsjs-video>\n * <google-cast receiver=\"YOUR_APP_ID\"></google-cast>\n * </video-player>\n * ```\n */\nexport class GoogleCastElement extends MediaComponentElement<GoogleCast> {\n static readonly tagName = 'google-cast';\n\n static override properties = {\n src: { type: String },\n contentType: { type: String, attribute: 'content-type' },\n streamType: { type: String, attribute: 'stream-type' },\n receiver: { type: String },\n // `customData` takes an object, so it's a property-only prop.\n } satisfies PropertyDeclarationMap<Exclude<keyof GoogleCastProps, 'customData'>>;\n\n protected createComponent(): GoogleCast {\n return new GoogleCast();\n }\n\n /** Source URL loaded on the Cast receiver. Falls back to the media's `src` / `currentSrc`. */\n get src(): string {\n return this.component.src ?? '';\n }\n\n set src(value: string | null | undefined) {\n this.component.src = value ?? undefined;\n }\n\n /** MIME type of the Cast source. When unset, the receiver infers it from the URL. */\n get contentType(): string | undefined {\n return this.component.contentType;\n }\n\n set contentType(value: string | null | undefined) {\n this.component.contentType = value ?? undefined;\n }\n\n /** Stream type used on the Cast receiver. Falls back to the media's `streamType`. */\n get streamType(): GoogleCastProps['streamType'] {\n return this.component.streamType;\n }\n\n set streamType(value: GoogleCastProps['streamType'] | null) {\n this.component.streamType = value ?? undefined;\n }\n\n /** Cast receiver application ID. Defaults to Google's default media receiver. */\n get receiver(): string | undefined {\n return this.component.receiver;\n }\n\n set receiver(value: string | null | undefined) {\n this.component.receiver = value ?? undefined;\n }\n\n /** Custom data sent to the Cast receiver with the load request. */\n get customData(): GoogleCastProps['customData'] {\n return this.component.customData;\n }\n\n set customData(value: GoogleCastProps['customData']) {\n this.component.customData = value;\n }\n}\n","import { GoogleCastElement } from '../../media/google-cast';\nimport { safeDefine } from '../safe-define';\n\nexport { GoogleCastElement };\n\nsafeDefine(GoogleCastElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [GoogleCastElement.tagName]: GoogleCastElement;\n }\n}\n"],"mappings":"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"}
|
package/cdn/media/google-cast.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e}from"../context-C2rsoDxk.js";import{
|
|
2
|
-
`),n=[];for(let e=0;e<t.length;e++)if(t[e].trim().startsWith(`#EXT-X-STREAM-INF`)){let r=t[e+1]?t[e+1].trim():``;r&&!r.startsWith(`#`)&&n.push(r)}return n}function
|
|
3
|
-
`).find(e=>!e.trim().startsWith(`#`)&&e.trim()!==``)}async function E(e){if(!e)return!1;if(/\.m3u8?(\?.*)?$/i.test(e))return!0;if(e.startsWith(`blob:`))return!1;try{let t=(await fetch(e,{method:`HEAD`})).headers.get(`Content-Type`);if(!t)return!1;let n=t.toLowerCase().split(`;`)[0].trim();return l.some(e=>n===e.toLowerCase())}catch(e){return console.error(`Error while trying to get the Content-Type of the manifest`,e),!1}}async function D(e){try{let t=await(await fetch(e)).text(),n=t,r=w(t);if(r.length>0){let t=new URL(r[0],e).toString();n=await(await fetch(t)).text()}return C(T(n))}catch(e){console.error(`Error while trying to parse the manifest playlist`,e);return}}const O=new u;let k,A=null;async function j(){return k||(A||(A=p().then(()=>new Promise((e,t)=>{d(()=>{if(M(),k){e(k);return}t(new DOMException(`Google Cast framework is unavailable.`,`NotSupportedError`))})})),A.catch(()=>{A=null})),A)}function M(){globalThis.chrome?.cast?.isAvailable&&(k||(k=cast.framework,m().addEventListener(k.CastContextEventType.CAST_STATE_CHANGED,()=>{O.forEach(e=>e.onCastStateChanged())}),m().addEventListener(k.CastContextEventType.SESSION_STATE_CHANGED,()=>{O.forEach(e=>e.onSessionStateChanged())}),O.forEach(e=>e.onCastFrameworkAvailable())))}let N=0;var P=class extends EventTarget{#e;#t=`disconnected`;#n=!1;#r=new Map;constructor(e){super(),this.#e=e,e.bindHooks({setState:e=>this.#a(e),setAvailable:e=>this.#o(e)})}get state(){return this.#t}async watchAvailability(e){this.#i();let t=++N;return this.#r.set(t,e),queueMicrotask(()=>e(this.#e.hasDevicesAvailable())),t}async cancelWatchAvailability(e){if(this.#i(),e===void 0){this.#r.clear();return}if(!this.#r.delete(e))throw new c(`Callback not found for id ${e}.`)}async prompt(){this.#i(),await this.#e.requestCastSession()}#i(){if(this.#e.target?.disableRemotePlayback)throw new o(`disableRemotePlayback attribute is present.`)}#a(e){this.#t!==e&&(this.#t=e,e===`connecting`?this.dispatchEvent(new Event(`connecting`)):e===`connected`?this.dispatchEvent(new Event(`connect`)):this.dispatchEvent(new Event(`disconnect`)))}#o(e){if(this.#n!==e){this.#n=e;for(let t of this.#r.values())t(e)}}},F=class{target=null;#e;#t={};#n;#r=!1;#i=!1;#a=!1;#o;#s;#c=!1;#l=1;#u=!1;#d=()=>this.#S();#f=()=>this.#x();constructor(e){this.#e=e,this.#n=new P(this),O.add(this),this.onCastFrameworkAvailable()}get remote(){return this.target&&!this.target.disableRemotePlayback&&j(),this.#n}attach(e){this.target=e,e.textTracks.addEventListener(`change`,this.#d)}detach(){this.target?.textTracks.removeEventListener(`change`,this.#d),this.target=null}destroy(){this.detach(),O.delete(this),g()?.removeUpdateListener(this.#f),this.#g(),this.#i=!1,this.#r=!1}bindHooks(e){Object.assign(this.#t,e)}hasDevicesAvailable(){let e=m()?.getCastState();return!!e&&e!==cast.framework.CastState.NO_DEVICES_AVAILABLE}async requestCastSession(){if(this.target?.disableRemotePlayback)throw new o(`disableRemotePlayback attribute is present.`);if(await j(),!this.#p())throw new s(`The RemotePlayback API is disabled on this platform.`);let e=this.#i;this.#i=!0,this.#m(),this.#h();try{await m().requestSession()}catch(t){if(e||(this.#i=!1),t===`cancel`)return;throw Error(t)}this.#u=this.target?.paused??!0,this.target?.pause(),this.muted=this.target?.muted??!1;try{await this.load()}catch(e){console.error(e)}}async load(){if(!this.#i){await this.target?.load();return}if(!this.#e.src)return;let e=new chrome.cast.media.MediaInfo(this.#e.src,this.#e.contentType??``);e.customData=this.#e.customData??null;let{target:n}=this,r=[...n?.querySelectorAll(`track`)??[]].filter(e=>e.src&&t(e)),{Track:i,TrackType:a,TextTrackType:o}=chrome.cast.media,s=[];if(r.length&&(e.tracks=r.map((e,t)=>{let n=t+1;!s.length&&e.track.mode===`showing`&&s.push(n);let r=new i(n,a.TEXT);return r.trackContentId=e.src,r.trackContentType=`text/vtt`,r.subtype=e.kind===`captions`?o.CAPTIONS:o.SUBTITLES,r.name=e.label,r.language=e.srclang,r})),e.streamType=this.#e.streamType===`live`?chrome.cast.media.StreamType.LIVE:chrome.cast.media.StreamType.BUFFERED,e.metadata=new chrome.cast.media.GenericMediaMetadata,e.metadata.images=[new chrome.cast.Image(n?.poster??``)],await E(this.#e.src)){e.contentType||=`application/x-mpegURL`;let t=await D(this.#e.src)??``,{HlsSegmentFormat:n,HlsVideoSegmentFormat:r}=chrome.cast.media;t.includes(`m4s`)||t.includes(`mp4`)?(e.hlsSegmentFormat=n.FMP4,e.hlsVideoSegmentFormat=r.FMP4):t.includes(`ts`)&&(e.hlsSegmentFormat=n.TS,e.hlsVideoSegmentFormat=r.TS)}let c=new chrome.cast.media.LoadRequest(e);c.currentTime=this.target?.currentTime??0,c.autoplay=!this.#u,c.activeTrackIds=s,await h()?.loadMedia(c),this.target?.dispatchEvent(new Event(`volumechange`))}get paused(){return this.#o.isMediaLoaded?this.#o.isPaused||this.ended:this.target?.paused??!0}get ended(){return this.#o.playerState===chrome.cast.media.PlayerState.IDLE&&g()?.idleReason===chrome.cast.media.IdleReason.FINISHED}get seeking(){return this.#a}get readyState(){switch(this.#o.playerState){case chrome.cast.media.PlayerState.IDLE:return 0;case chrome.cast.media.PlayerState.BUFFERING:return 2;default:return 3}}get duration(){return this.#o.isMediaLoaded?this.#o.duration??NaN:this.target?.duration??NaN}get currentTime(){return this.#o.isMediaLoaded?this.#o.currentTime??0:this.target?.currentTime??0}set currentTime(e){this.#o.currentTime=e,this.#v(),this.#o.controller?.seek()}get muted(){return this.#o.isMuted}set muted(e){e!==this.#o.isMuted&&this.#o.controller?.muteOrUnmute()}get volume(){return this.#o.volumeLevel??1}set volume(e){this.#o.volumeLevel=+e,this.#o.controller?.setVolumeLevel()}get playbackRate(){return g()?.playbackRate??1}set playbackRate(e){b(e)}async play(){if(!this.#o.isMediaLoaded){this.#u=!1,await this.load();return}if(this.paused)return this.#o.controller?.playOrPause(),new Promise(e=>{this.target?.addEventListener(`play`,()=>e(),{once:!0})})}pause(){this.paused||this.#o.controller?.playOrPause()}onCastFrameworkAvailable(){!k||this.#r||(this.#r=!0,this.#m(),this.onCastStateChanged(),this.#o=new k.RemotePlayer,new k.RemotePlayerController(this.#o),this.#s={[k.RemotePlayerEventType.IS_CONNECTED_CHANGED]:e=>{e?.value===!0?this.#t.setState?.(`connected`):(this.#_(),this.#t.setState?.(`disconnected`))},[k.RemotePlayerEventType.DURATION_CHANGED]:()=>{this.target?.dispatchEvent(new Event(`durationchange`))},[k.RemotePlayerEventType.VOLUME_LEVEL_CHANGED]:()=>{this.target?.dispatchEvent(new Event(`volumechange`))},[k.RemotePlayerEventType.IS_MUTED_CHANGED]:()=>{this.target?.dispatchEvent(new Event(`volumechange`))},[k.RemotePlayerEventType.CURRENT_TIME_CHANGED]:()=>{!this.#i||!this.#o.isMediaLoaded||(this.#y(),this.target?.dispatchEvent(new Event(`timeupdate`)))},[k.RemotePlayerEventType.VIDEO_INFO_CHANGED]:()=>{this.target?.dispatchEvent(new Event(`resize`))},[k.RemotePlayerEventType.IS_PAUSED_CHANGED]:()=>{this.target?.dispatchEvent(new Event(this.#i&&this.#o.isPaused?`pause`:`play`))},[k.RemotePlayerEventType.PLAYER_STATE_CHANGED]:()=>{let e=chrome.cast.media.PlayerState,t=this.#i?this.#o.playerState:void 0;if(t!==e.BUFFERING&&this.#y(),t!==e.PAUSED){if(t===e.IDLE){let e=g()?.idleReason===chrome.cast.media.IdleReason.FINISHED;this.target?.dispatchEvent(new Event(e?`ended`:`emptied`));return}t===e.PLAYING?this.target?.dispatchEvent(new Event(`playing`)):t===e.BUFFERING&&this.target?.dispatchEvent(new Event(`waiting`))}},[k.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED]:async()=>{!this.#i||!this.#o.isMediaLoaded||(await Promise.resolve(),this.#b())}})}onCastStateChanged(){if(!this.#r)return;let e=cast.framework.CastState,t=m().getCastState();this.#i&&t===e.CONNECTING&&this.#t.setState?.(`connecting`),this.#t.setAvailable?.(!!t&&t!==e.NO_DEVICES_AVAILABLE)}async onSessionStateChanged(){if(!this.#r)return;let{SESSION_RESUMED:e}=k.SessionState;if(m().getSessionState()===e&&this.#e.src===g()?.media?.contentId){this.#i=!0,this.#h();try{await v(new chrome.cast.media.GetStatusRequest)}catch(e){console.error(e)}this.#s[k.RemotePlayerEventType.IS_PAUSED_CHANGED](),this.#s[k.RemotePlayerEventType.PLAYER_STATE_CHANGED](),this.target?.dispatchEvent(new Event(`ratechange`))}}#p(){return!!globalThis.chrome?.cast?.isAvailable}#m(){let{receiver:e}=this.#e;x(e?{receiverApplicationId:e}:{})}#h(){if(this.#c)return;let e=this.#o?.controller;if(e){for(let[t,n]of Object.entries(this.#s))e.addEventListener(t,n);this.#c=!0}}#g(){if(!this.#c)return;let e=this.#o?.controller;if(e)for(let[t,n]of Object.entries(this.#s))e.removeEventListener(t,n);this.#c=!1}#_(){if(!this.#i)return;g()?.removeUpdateListener(this.#f),this.#g(),this.#a=!1,this.#l=1,this.#i=!1,this.target&&(this.target.muted=this.#o.isMuted);let e=this.#o.savedPlayerState;e&&(this.target&&(this.target.currentTime=e.currentTime),e.isPaused===!1&&this.target&&this.target.play())}#v(){this.#a=!0,this.target?.dispatchEvent(new Event(`seeking`))}#y(){this.#a&&(this.#a=!1,this.target?.dispatchEvent(new Event(`seeked`)))}#b(){this.#l=g()?.playbackRate??1,g()?.addUpdateListener(this.#f),this.#S()}#x(){let e=g()?.playbackRate??1;e!==this.#l&&(this.#l=e,this.target?.dispatchEvent(new Event(`ratechange`)))}async#S(){if(!this.#i||!this.target)return;let e=[...this.target.textTracks].filter(t),n=(this.#o.mediaInfo?.tracks??[]).filter(({type:e})=>e===chrome.cast.media.TrackType.TEXT).flatMap(({language:t,name:n,trackId:r})=>{let i=e.find(e=>e.language===t&&e.label===n);return i?.mode?[{mode:i.mode,trackId:r}]:[]}),r=new Set(n.filter(e=>e.mode!==`showing`).map(e=>e.trackId)),i=n.find(e=>e.mode===`showing`)?.trackId,a=h()?.getSessionObj().media[0]?.activeTrackIds??[],o=new Set(a.filter(e=>!r.has(e)));if(i&&o.add(i),!(o.size===a.length&&a.every(e=>o.has(e))))try{await _(new chrome.cast.media.EditTracksInfoRequest([...o]))}catch(e){console.error(e)}}},I=class{#e;#t;#n;#r;#i;#a=null;#o=null;#s=null;constructor(e={}){Object.assign(this,e)}setMedia(e){f()&&(this.#a=e,this.#o||(this.#o=new F(this),this.#o.remote.addEventListener(`connect`,this.#c),this.#o.remote.addEventListener(`disconnect`,this.#c),this.#s=this.#l()))}attach(e){this.#o?.attach(e)}detach(){this.#o?.detach()}destroy(){this.#o?.destroy(),this.#o=null,this.#a=null}#c=()=>{this.#o&&(this.#o.remote.state===`connected`?this.#s=this.#o:this.#s=this.#l())};#l(){let e=this.#o;return{get remote(){return e.remote}}}get targetOverride(){return this.#s}get src(){return this.#e??this.#a?.querySelector(`source`)?.src??this.#a?.src??this.#a?.currentSrc??``}set src(e){this.#e!==e&&(this.#e=e,this.#u())}get contentType(){return this.#t}set contentType(e){this.#t!==e&&(this.#t=e,this.#u())}get streamType(){return this.#n??this.#a?.streamType}set streamType(e){this.#n!==e&&(this.#n=e,this.#u())}get receiver(){return this.#r}set receiver(e){this.#r!==e&&(this.#r=e,this.#u())}get customData(){return this.#i}set customData(e){this.#i!==e&&(this.#i=e,this.#u())}#u(){this.#a?.remote.state===`connected`&&this.#a.load()}};e(class extends n{static{this.tagName=`google-cast`}static{this.properties={src:{type:String},contentType:{type:String,attribute:`content-type`},streamType:{type:String,attribute:`stream-type`},receiver:{type:String}}}createComponent(){return new I}get src(){return this.component.src??``}set src(e){this.component.src=e??void 0}get contentType(){return this.component.contentType}set contentType(e){this.component.contentType=e??void 0}get streamType(){return this.component.streamType}set streamType(e){this.component.streamType=e??void 0}get receiver(){return this.component.receiver}set receiver(e){this.component.receiver=e??void 0}get customData(){return this.component.customData}set customData(e){this.component.customData=e}});
|
|
1
|
+
import{i as e}from"../context-C2rsoDxk.js";import{t}from"../script-D3ZkiqwO.js";import{n}from"../text-track-CG8USvNG.js";import{t as r}from"../media-component-element-DhYyT5tf.js";var i=class extends Error{},a=class extends Error{},o=class extends Error{};const s=[`application/x-mpegURL`,`application/vnd.apple.mpegurl`,`audio/mpegurl`];var c=class{#e=new Set;#t=new WeakMap;add(e){if(this.#t.has(e))return this;let t=new WeakRef(e);return this.#t.set(e,t),this.#e.add(t),this}delete(e){let t=this.#t.get(e);return t?(this.#t.delete(e),this.#e.delete(t)):!1}forEach(e){for(let t of this.#e){let n=t.deref();n?e(n):this.#e.delete(t)}}};function l(e){let t=()=>customElements.whenDefined(`google-cast-button`).then(e);globalThis.chrome?.cast?.isAvailable?typeof cast>`u`||!cast.framework?t():e():globalThis.__onGCastApiAvailable=t}function u(){return!!globalThis.chrome}async function d(){globalThis.chrome?.cast||await t(`https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1`)}function f(){return typeof cast>`u`?void 0:cast.framework?.CastContext.getInstance()}function p(){return f()?.getCurrentSession()}function m(){return p()?.getSessionObj().media[0]??void 0}function h(e){return new Promise((t,n)=>{m().editTracksInfo(e,t,n)})}function g(e){return new Promise((t,n)=>{m().getStatus(e,t,n)})}let _=0;function v(e){let t=m();return p().sendMessage(`urn:x-cast:com.google.cast.media`,{type:`SET_PLAYBACK_RATE`,playbackRate:e,mediaSessionId:t?.mediaSessionId,requestId:++_})}function y(e){f().setOptions({...b(),...e})}function b(){return{receiverApplicationId:`CC1AD845`,autoJoinPolicy:globalThis.chrome?.cast?.AutoJoinPolicy?.ORIGIN_SCOPED??`origin_scoped`,androidReceiverCompatible:!1,language:`en-US`,resumeSavedSession:!0}}function x(e){if(!e)return;let t=e.match(/\.([a-zA-Z0-9]+)(?:\?.*)?$/);return t?t[1]:null}function S(e){let t=e.split(`
|
|
2
|
+
`),n=[];for(let e=0;e<t.length;e++)if(t[e].trim().startsWith(`#EXT-X-STREAM-INF`)){let r=t[e+1]?t[e+1].trim():``;r&&!r.startsWith(`#`)&&n.push(r)}return n}function C(e){return e.split(`
|
|
3
|
+
`).find(e=>!e.trim().startsWith(`#`)&&e.trim()!==``)}async function w(e){if(!e)return!1;if(/\.m3u8?(\?.*)?$/i.test(e))return!0;if(e.startsWith(`blob:`))return!1;try{let t=(await fetch(e,{method:`HEAD`})).headers.get(`Content-Type`);if(!t)return!1;let n=t.toLowerCase().split(`;`)[0].trim();return s.some(e=>n===e.toLowerCase())}catch(e){return console.error(`Error while trying to get the Content-Type of the manifest`,e),!1}}async function T(e){try{let t=await(await fetch(e)).text(),n=t,r=S(t);if(r.length>0){let t=new URL(r[0],e).toString();n=await(await fetch(t)).text()}return x(C(n))}catch(e){console.error(`Error while trying to parse the manifest playlist`,e);return}}const E=new c;let D,O=null;async function k(){return D||(O||(O=d().then(()=>new Promise((e,t)=>{l(()=>{if(A(),D){e(D);return}t(new DOMException(`Google Cast framework is unavailable.`,`NotSupportedError`))})})),O.catch(()=>{O=null})),O)}function A(){globalThis.chrome?.cast?.isAvailable&&(D||(D=cast.framework,f().addEventListener(D.CastContextEventType.CAST_STATE_CHANGED,()=>{E.forEach(e=>e.onCastStateChanged())}),f().addEventListener(D.CastContextEventType.SESSION_STATE_CHANGED,()=>{E.forEach(e=>e.onSessionStateChanged())}),E.forEach(e=>e.onCastFrameworkAvailable())))}let j=0;var M=class extends EventTarget{#e;#t=`disconnected`;#n=!1;#r=new Map;constructor(e){super(),this.#e=e,e.bindHooks({setState:e=>this.#a(e),setAvailable:e=>this.#o(e)})}get state(){return this.#t}async watchAvailability(e){this.#i();let t=++j;return this.#r.set(t,e),queueMicrotask(()=>e(this.#e.hasDevicesAvailable())),t}async cancelWatchAvailability(e){if(this.#i(),e===void 0){this.#r.clear();return}if(!this.#r.delete(e))throw new o(`Callback not found for id ${e}.`)}async prompt(){this.#i(),await this.#e.requestCastSession()}#i(){if(this.#e.target?.disableRemotePlayback)throw new i(`disableRemotePlayback attribute is present.`)}#a(e){this.#t!==e&&(this.#t=e,e===`connecting`?this.dispatchEvent(new Event(`connecting`)):e===`connected`?this.dispatchEvent(new Event(`connect`)):this.dispatchEvent(new Event(`disconnect`)))}#o(e){if(this.#n!==e){this.#n=e;for(let t of this.#r.values())t(e)}}},N=class{target=null;#e;#t={};#n;#r=!1;#i=!1;#a=!1;#o;#s;#c=!1;#l=1;#u=!1;#d=()=>this.#S();#f=()=>this.#x();constructor(e){this.#e=e,this.#n=new M(this),E.add(this),this.onCastFrameworkAvailable()}get remote(){return this.target&&!this.target.disableRemotePlayback&&k(),this.#n}attach(e){this.target=e,e.textTracks.addEventListener(`change`,this.#d)}detach(){this.target?.textTracks.removeEventListener(`change`,this.#d),this.target=null}destroy(){this.detach(),E.delete(this),m()?.removeUpdateListener(this.#f),this.#g(),this.#i=!1,this.#r=!1}bindHooks(e){Object.assign(this.#t,e)}hasDevicesAvailable(){let e=f()?.getCastState();return!!e&&e!==cast.framework.CastState.NO_DEVICES_AVAILABLE}async requestCastSession(){if(this.target?.disableRemotePlayback)throw new i(`disableRemotePlayback attribute is present.`);if(await k(),!this.#p())throw new a(`The RemotePlayback API is disabled on this platform.`);let e=this.#i;this.#i=!0,this.#m(),this.#h();try{await f().requestSession()}catch(t){if(e||(this.#i=!1),t===`cancel`)return;throw Error(t)}this.#u=this.target?.paused??!0,this.target?.pause(),this.muted=this.target?.muted??!1;try{await this.load()}catch(e){console.error(e)}}async load(){if(!this.#i){await this.target?.load();return}if(!this.#e.src)return;let e=new chrome.cast.media.MediaInfo(this.#e.src,this.#e.contentType??``);e.customData=this.#e.customData??null;let{target:t}=this,r=[...t?.querySelectorAll(`track`)??[]].filter(e=>e.src&&n(e)),{Track:i,TrackType:a,TextTrackType:o}=chrome.cast.media,s=[];if(r.length&&(e.tracks=r.map((e,t)=>{let n=t+1;!s.length&&e.track.mode===`showing`&&s.push(n);let r=new i(n,a.TEXT);return r.trackContentId=e.src,r.trackContentType=`text/vtt`,r.subtype=e.kind===`captions`?o.CAPTIONS:o.SUBTITLES,r.name=e.label,r.language=e.srclang,r})),e.streamType=this.#e.streamType===`live`?chrome.cast.media.StreamType.LIVE:chrome.cast.media.StreamType.BUFFERED,e.metadata=new chrome.cast.media.GenericMediaMetadata,e.metadata.images=[new chrome.cast.Image(t?.poster??``)],await w(this.#e.src)){e.contentType||=`application/x-mpegURL`;let t=await T(this.#e.src)??``,{HlsSegmentFormat:n,HlsVideoSegmentFormat:r}=chrome.cast.media;t.includes(`m4s`)||t.includes(`mp4`)?(e.hlsSegmentFormat=n.FMP4,e.hlsVideoSegmentFormat=r.FMP4):t.includes(`ts`)&&(e.hlsSegmentFormat=n.TS,e.hlsVideoSegmentFormat=r.TS)}let c=new chrome.cast.media.LoadRequest(e);c.currentTime=this.target?.currentTime??0,c.autoplay=!this.#u,c.activeTrackIds=s,await p()?.loadMedia(c),this.target?.dispatchEvent(new Event(`volumechange`))}get paused(){return this.#o.isMediaLoaded?this.#o.isPaused||this.ended:this.target?.paused??!0}get ended(){return this.#o.playerState===chrome.cast.media.PlayerState.IDLE&&m()?.idleReason===chrome.cast.media.IdleReason.FINISHED}get seeking(){return this.#a}get readyState(){switch(this.#o.playerState){case chrome.cast.media.PlayerState.IDLE:return 0;case chrome.cast.media.PlayerState.BUFFERING:return 2;default:return 3}}get duration(){return this.#o.isMediaLoaded?this.#o.duration??NaN:this.target?.duration??NaN}get currentTime(){return this.#o.isMediaLoaded?this.#o.currentTime??0:this.target?.currentTime??0}set currentTime(e){this.#o.currentTime=e,this.#v(),this.#o.controller?.seek()}get muted(){return this.#o.isMuted}set muted(e){e!==this.#o.isMuted&&this.#o.controller?.muteOrUnmute()}get volume(){return this.#o.volumeLevel??1}set volume(e){this.#o.volumeLevel=+e,this.#o.controller?.setVolumeLevel()}get playbackRate(){return m()?.playbackRate??1}set playbackRate(e){v(e)}async play(){if(!this.#o.isMediaLoaded){this.#u=!1,await this.load();return}if(this.paused)return this.#o.controller?.playOrPause(),new Promise(e=>{this.target?.addEventListener(`play`,()=>e(),{once:!0})})}pause(){this.paused||this.#o.controller?.playOrPause()}onCastFrameworkAvailable(){!D||this.#r||(this.#r=!0,this.#m(),this.onCastStateChanged(),this.#o=new D.RemotePlayer,new D.RemotePlayerController(this.#o),this.#s={[D.RemotePlayerEventType.IS_CONNECTED_CHANGED]:e=>{e?.value===!0?this.#t.setState?.(`connected`):(this.#_(),this.#t.setState?.(`disconnected`))},[D.RemotePlayerEventType.DURATION_CHANGED]:()=>{this.target?.dispatchEvent(new Event(`durationchange`))},[D.RemotePlayerEventType.VOLUME_LEVEL_CHANGED]:()=>{this.target?.dispatchEvent(new Event(`volumechange`))},[D.RemotePlayerEventType.IS_MUTED_CHANGED]:()=>{this.target?.dispatchEvent(new Event(`volumechange`))},[D.RemotePlayerEventType.CURRENT_TIME_CHANGED]:()=>{!this.#i||!this.#o.isMediaLoaded||(this.#y(),this.target?.dispatchEvent(new Event(`timeupdate`)))},[D.RemotePlayerEventType.VIDEO_INFO_CHANGED]:()=>{this.target?.dispatchEvent(new Event(`resize`))},[D.RemotePlayerEventType.IS_PAUSED_CHANGED]:()=>{this.target?.dispatchEvent(new Event(this.#i&&this.#o.isPaused?`pause`:`play`))},[D.RemotePlayerEventType.PLAYER_STATE_CHANGED]:()=>{let e=chrome.cast.media.PlayerState,t=this.#i?this.#o.playerState:void 0;if(t!==e.BUFFERING&&this.#y(),t!==e.PAUSED){if(t===e.IDLE){let e=m()?.idleReason===chrome.cast.media.IdleReason.FINISHED;this.target?.dispatchEvent(new Event(e?`ended`:`emptied`));return}t===e.PLAYING?this.target?.dispatchEvent(new Event(`playing`)):t===e.BUFFERING&&this.target?.dispatchEvent(new Event(`waiting`))}},[D.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED]:async()=>{!this.#i||!this.#o.isMediaLoaded||(await Promise.resolve(),this.#b())}})}onCastStateChanged(){if(!this.#r)return;let e=cast.framework.CastState,t=f().getCastState();this.#i&&t===e.CONNECTING&&this.#t.setState?.(`connecting`),this.#t.setAvailable?.(!!t&&t!==e.NO_DEVICES_AVAILABLE)}async onSessionStateChanged(){if(!this.#r)return;let{SESSION_RESUMED:e}=D.SessionState;if(f().getSessionState()===e&&this.#e.src===m()?.media?.contentId){this.#i=!0,this.#h();try{await g(new chrome.cast.media.GetStatusRequest)}catch(e){console.error(e)}this.#s[D.RemotePlayerEventType.IS_PAUSED_CHANGED](),this.#s[D.RemotePlayerEventType.PLAYER_STATE_CHANGED](),this.target?.dispatchEvent(new Event(`ratechange`))}}#p(){return!!globalThis.chrome?.cast?.isAvailable}#m(){let{receiver:e}=this.#e;y(e?{receiverApplicationId:e}:{})}#h(){if(this.#c)return;let e=this.#o?.controller;if(e){for(let[t,n]of Object.entries(this.#s))e.addEventListener(t,n);this.#c=!0}}#g(){if(!this.#c)return;let e=this.#o?.controller;if(e)for(let[t,n]of Object.entries(this.#s))e.removeEventListener(t,n);this.#c=!1}#_(){if(!this.#i)return;m()?.removeUpdateListener(this.#f),this.#g(),this.#a=!1,this.#l=1,this.#i=!1,this.target&&(this.target.muted=this.#o.isMuted);let e=this.#o.savedPlayerState;e&&(this.target&&(this.target.currentTime=e.currentTime),e.isPaused===!1&&this.target&&this.target.play())}#v(){this.#a=!0,this.target?.dispatchEvent(new Event(`seeking`))}#y(){this.#a&&(this.#a=!1,this.target?.dispatchEvent(new Event(`seeked`)))}#b(){this.#l=m()?.playbackRate??1,m()?.addUpdateListener(this.#f),this.#S()}#x(){let e=m()?.playbackRate??1;e!==this.#l&&(this.#l=e,this.target?.dispatchEvent(new Event(`ratechange`)))}async#S(){if(!this.#i||!this.target)return;let e=[...this.target.textTracks].filter(n),t=(this.#o.mediaInfo?.tracks??[]).filter(({type:e})=>e===chrome.cast.media.TrackType.TEXT).flatMap(({language:t,name:n,trackId:r})=>{let i=e.find(e=>e.language===t&&e.label===n);return i?.mode?[{mode:i.mode,trackId:r}]:[]}),r=new Set(t.filter(e=>e.mode!==`showing`).map(e=>e.trackId)),i=t.find(e=>e.mode===`showing`)?.trackId,a=p()?.getSessionObj().media[0]?.activeTrackIds??[],o=new Set(a.filter(e=>!r.has(e)));if(i&&o.add(i),!(o.size===a.length&&a.every(e=>o.has(e))))try{await h(new chrome.cast.media.EditTracksInfoRequest([...o]))}catch(e){console.error(e)}}},P=class{#e;#t;#n;#r;#i;#a=null;#o=null;#s=null;constructor(e={}){Object.assign(this,e)}setMedia(e){u()&&(this.#a=e,this.#o||(this.#o=new N(this),this.#o.remote.addEventListener(`connect`,this.#c),this.#o.remote.addEventListener(`disconnect`,this.#c),this.#s=this.#l()))}attach(e){this.#o?.attach(e)}detach(){this.#o?.detach()}destroy(){this.#o?.destroy(),this.#o=null,this.#a=null}#c=()=>{this.#o&&(this.#o.remote.state===`connected`?this.#s=this.#o:this.#s=this.#l())};#l(){let e=this.#o;return{get remote(){return e.remote}}}get targetOverride(){return this.#s}get src(){return this.#e??this.#a?.querySelector(`source`)?.src??this.#a?.src??this.#a?.currentSrc??``}set src(e){this.#e!==e&&(this.#e=e,this.#u())}get contentType(){return this.#t}set contentType(e){this.#t!==e&&(this.#t=e,this.#u())}get streamType(){return this.#n??this.#a?.streamType}set streamType(e){this.#n!==e&&(this.#n=e,this.#u())}get receiver(){return this.#r}set receiver(e){this.#r!==e&&(this.#r=e,this.#u())}get customData(){return this.#i}set customData(e){this.#i!==e&&(this.#i=e,this.#u())}#u(){this.#a?.remote.state===`connected`&&this.#a.load()}},F=class extends r{static{this.tagName=`google-cast`}static{this.properties={src:{type:String},contentType:{type:String,attribute:`content-type`},streamType:{type:String,attribute:`stream-type`},receiver:{type:String}}}createComponent(){return new P}get src(){return this.component.src??``}set src(e){this.component.src=e??void 0}get contentType(){return this.component.contentType}set contentType(e){this.component.contentType=e??void 0}get streamType(){return this.component.streamType}set streamType(e){this.component.streamType=e??void 0}get receiver(){return this.component.receiver}set receiver(e){this.component.receiver=e??void 0}get customData(){return this.component.customData}set customData(e){this.component.customData=e}};e(F);export{F as GoogleCastElement};
|
|
4
4
|
//# sourceMappingURL=google-cast.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-cast.js","names":["#seen","#refs","#provider","#setState","#setAvailable","#state","#assertEnabled","#callbacks","#available","#updateRemoteTextTrack","#checkPlaybackRate","#googleCast","#remotePlayback","#onTextTrackChange","#onMediaUpdate","#detachRemoteListeners","#isCasting","#isInit","#hooks","#isCastApiAvailable","#applyCastOptions","#attachRemoteListeners","#localPaused","#remotePlayer","#seeking","#notifySeeking","#remoteListeners","#disconnect","#notifySeeked","#onRemoteMediaLoaded","#listenersAttached","#playbackRate","#media","#provider","#onStateChange","#override","#createRemoteOverride","#src","#load","#contentType","#streamType","#receiver","#customData"],"sources":["../../../utils/dist/dom/script.js","../../../media/dist/default/dom/google-cast/utils.js","../../../media/dist/default/dom/google-cast/registry.js","../../../media/dist/default/dom/google-cast/remote-playback.js","../../../media/dist/default/dom/google-cast/google-cast-provider.js","../../../media/dist/default/dom/google-cast/media.js","../../src/media/google-cast/google-cast-element.ts","../../src/define/media/google-cast.ts"],"sourcesContent":["//#region src/dom/script.ts\nconst cache = /* @__PURE__ */ new Map();\nfunction hasScript(src) {\n\tfor (const script of document.scripts) if (script.getAttribute(\"src\") === src) return true;\n\treturn false;\n}\n/**\n* Load a script once. Concurrent and repeat calls for the same `src` share a\n* single promise; failed loads are evicted (and the tag removed) so they can\n* be retried.\n*/\nfunction loadScript(src) {\n\tlet promise = cache.get(src);\n\tif (promise) return promise;\n\tif (hasScript(src)) return Promise.resolve();\n\tpromise = new Promise((resolve, reject) => {\n\t\tconst script = document.createElement(\"script\");\n\t\tscript.src = src;\n\t\tscript.onload = () => resolve();\n\t\tscript.onerror = () => {\n\t\t\tscript.remove();\n\t\t\treject(/* @__PURE__ */ new Error(`Failed to load script: ${src}`));\n\t\t};\n\t\tdocument.head.appendChild(script);\n\t});\n\tcache.set(src, promise);\n\tpromise.catch(() => cache.delete(src));\n\treturn promise;\n}\n//#endregion\nexport { hasScript, loadScript };\n\n//# sourceMappingURL=script.js.map","import { loadScript } from \"@videojs/utils/dom\";\n//#region src/dom/google-cast/utils.ts\nvar InvalidStateError = class extends Error {};\nvar NotSupportedError = class extends Error {};\nvar NotFoundError = class extends Error {};\nconst GOOGLE_CAST_FRAMEWORK_URL = \"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1\";\nconst HLS_RESPONSE_HEADERS = [\n\t\"application/x-mpegURL\",\n\t\"application/vnd.apple.mpegurl\",\n\t\"audio/mpegurl\"\n];\nvar IterableWeakSet = class {\n\t#refs = /* @__PURE__ */ new Set();\n\t#seen = /* @__PURE__ */ new WeakMap();\n\tadd(value) {\n\t\tif (this.#seen.has(value)) return this;\n\t\tconst ref = new WeakRef(value);\n\t\tthis.#seen.set(value, ref);\n\t\tthis.#refs.add(ref);\n\t\treturn this;\n\t}\n\tdelete(value) {\n\t\tconst ref = this.#seen.get(value);\n\t\tif (!ref) return false;\n\t\tthis.#seen.delete(value);\n\t\treturn this.#refs.delete(ref);\n\t}\n\tforEach(fn) {\n\t\tfor (const ref of this.#refs) {\n\t\t\tconst value = ref.deref();\n\t\t\tif (value) fn(value);\n\t\t\telse this.#refs.delete(ref);\n\t\t}\n\t}\n};\nfunction onCastApiAvailable(callback) {\n\tconst whenDefined = () => customElements.whenDefined(\"google-cast-button\").then(callback);\n\tif (!globalThis.chrome?.cast?.isAvailable) globalThis.__onGCastApiAvailable = whenDefined;\n\telse if (typeof cast === \"undefined\" || !cast.framework) whenDefined();\n\telse callback();\n}\nfunction requiresCastFramework() {\n\treturn Boolean(globalThis.chrome);\n}\nasync function loadCastFramework() {\n\tif (globalThis.chrome?.cast) return;\n\tawait loadScript(GOOGLE_CAST_FRAMEWORK_URL);\n}\nfunction getCastContext() {\n\treturn typeof cast === \"undefined\" ? void 0 : cast.framework?.CastContext.getInstance();\n}\nfunction currentSession() {\n\treturn getCastContext()?.getCurrentSession();\n}\nfunction currentMedia() {\n\treturn currentSession()?.getSessionObj().media[0] ?? void 0;\n}\nfunction editTracksInfo(request) {\n\treturn new Promise((resolve, reject) => {\n\t\tcurrentMedia().editTracksInfo(request, resolve, reject);\n\t});\n}\nfunction getMediaStatus(request) {\n\treturn new Promise((resolve, reject) => {\n\t\tcurrentMedia().getStatus(request, resolve, reject);\n\t});\n}\nconst MEDIA_NAMESPACE = \"urn:x-cast:com.google.cast.media\";\nlet requestId = 0;\nfunction setPlaybackRate(rate) {\n\tconst media = currentMedia();\n\treturn currentSession().sendMessage(MEDIA_NAMESPACE, {\n\t\ttype: \"SET_PLAYBACK_RATE\",\n\t\tplaybackRate: rate,\n\t\tmediaSessionId: media?.mediaSessionId,\n\t\trequestId: ++requestId\n\t});\n}\nfunction setCastOptions(options) {\n\tgetCastContext().setOptions({\n\t\t...getDefaultCastOptions(),\n\t\t...options\n\t});\n}\nfunction getDefaultCastOptions() {\n\treturn {\n\t\treceiverApplicationId: \"CC1AD845\",\n\t\tautoJoinPolicy: globalThis.chrome?.cast?.AutoJoinPolicy?.ORIGIN_SCOPED ?? \"origin_scoped\",\n\t\tandroidReceiverCompatible: false,\n\t\tlanguage: \"en-US\",\n\t\tresumeSavedSession: true\n\t};\n}\nfunction getFormat(segment) {\n\tif (!segment) return void 0;\n\tconst match = segment.match(/\\.([a-zA-Z0-9]+)(?:\\?.*)?$/);\n\treturn match ? match[1] : null;\n}\nfunction parsePlaylistUrls(playlistContent) {\n\tconst lines = playlistContent.split(\"\\n\");\n\tconst urls = [];\n\tfor (let i = 0; i < lines.length; i++) if (lines[i].trim().startsWith(\"#EXT-X-STREAM-INF\")) {\n\t\tconst nextLine = lines[i + 1] ? lines[i + 1].trim() : \"\";\n\t\tif (nextLine && !nextLine.startsWith(\"#\")) urls.push(nextLine);\n\t}\n\treturn urls;\n}\nfunction parseSegment(playlistContent) {\n\treturn playlistContent.split(\"\\n\").find((line) => !line.trim().startsWith(\"#\") && line.trim() !== \"\");\n}\nasync function isHls(url) {\n\tif (!url) return false;\n\tif (/\\.m3u8?(\\?.*)?$/i.test(url)) return true;\n\tif (url.startsWith(\"blob:\")) return false;\n\ttry {\n\t\tconst contentType = (await fetch(url, { method: \"HEAD\" })).headers.get(\"Content-Type\");\n\t\tif (!contentType) return false;\n\t\tconst normalizedContentType = contentType.toLowerCase().split(\";\")[0].trim();\n\t\treturn HLS_RESPONSE_HEADERS.some((header) => normalizedContentType === header.toLowerCase());\n\t} catch (err) {\n\t\tconsole.error(\"Error while trying to get the Content-Type of the manifest\", err);\n\t\treturn false;\n\t}\n}\nasync function getPlaylistSegmentFormat(url) {\n\ttry {\n\t\tconst mainManifestContent = await (await fetch(url)).text();\n\t\tlet availableChunksContent = mainManifestContent;\n\t\tconst playlists = parsePlaylistUrls(mainManifestContent);\n\t\tif (playlists.length > 0) {\n\t\t\tconst chosenPlaylistUrl = new URL(playlists[0], url).toString();\n\t\t\tavailableChunksContent = await (await fetch(chosenPlaylistUrl)).text();\n\t\t}\n\t\treturn getFormat(parseSegment(availableChunksContent));\n\t} catch (err) {\n\t\tconsole.error(\"Error while trying to parse the manifest playlist\", err);\n\t\treturn;\n\t}\n}\n//#endregion\nexport { InvalidStateError, IterableWeakSet, NotFoundError, NotSupportedError, currentMedia, currentSession, editTracksInfo, getCastContext, getMediaStatus, getPlaylistSegmentFormat, isHls, loadCastFramework, onCastApiAvailable, requiresCastFramework, setCastOptions, setPlaybackRate };\n\n//# sourceMappingURL=utils.js.map","import { IterableWeakSet, getCastContext, loadCastFramework, onCastApiAvailable } from \"./utils.js\";\n//#region src/dom/google-cast/registry.ts\nconst googleCastInstances = new IterableWeakSet();\nlet castFramework;\nlet pendingCastFramework = null;\nasync function ensureCastFramework() {\n\tif (castFramework) return castFramework;\n\tif (!pendingCastFramework) {\n\t\tpendingCastFramework = loadCastFramework().then(() => new Promise((resolve, reject) => {\n\t\t\tonCastApiAvailable(() => {\n\t\t\t\tregisterCastFramework();\n\t\t\t\tif (castFramework) {\n\t\t\t\t\tresolve(castFramework);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treject(new DOMException(\"Google Cast framework is unavailable.\", \"NotSupportedError\"));\n\t\t\t});\n\t\t}));\n\t\tpendingCastFramework.catch(() => {\n\t\t\tpendingCastFramework = null;\n\t\t});\n\t}\n\treturn pendingCastFramework;\n}\nfunction registerCastFramework() {\n\tif (!globalThis.chrome?.cast?.isAvailable) return;\n\tif (!castFramework) {\n\t\tcastFramework = cast.framework;\n\t\tgetCastContext().addEventListener(castFramework.CastContextEventType.CAST_STATE_CHANGED, () => {\n\t\t\tgoogleCastInstances.forEach((provider) => provider.onCastStateChanged());\n\t\t});\n\t\tgetCastContext().addEventListener(castFramework.CastContextEventType.SESSION_STATE_CHANGED, () => {\n\t\t\tgoogleCastInstances.forEach((provider) => provider.onSessionStateChanged());\n\t\t});\n\t\tgoogleCastInstances.forEach((provider) => provider.onCastFrameworkAvailable());\n\t}\n}\n//#endregion\nexport { castFramework, ensureCastFramework, googleCastInstances };\n\n//# sourceMappingURL=registry.js.map","import { InvalidStateError, NotFoundError } from \"./utils.js\";\n//#region src/dom/google-cast/remote-playback.ts\nlet callbackIdCount = 0;\n/**\n* Implementation of the W3C [`RemotePlayback`](https://developer.mozilla.org/en-US/docs/Web/API/RemotePlayback)\n* interface backed by Google Cast.\n*\n* Surfaced via `host.remote` while the {@link GoogleCastProvider} is in the\n* provider chain. The public API must strictly conform to the W3C spec:\n*\n* - Properties: `state`\n* - Methods: `watchAvailability`, `cancelWatchAvailability`, `prompt`\n* - Events: `connecting`, `connect`, `disconnect`\n*\n* Internal state mutations are pushed by {@link GoogleCastProvider} through\n* private callbacks registered via `provider.bindHooks(...)` in the constructor —\n* do not add public methods or properties that aren't part of the spec.\n*/\nvar RemotePlayback = class extends EventTarget {\n\t#provider;\n\t#state = \"disconnected\";\n\t#available = false;\n\t#callbacks = /* @__PURE__ */ new Map();\n\tconstructor(provider) {\n\t\tsuper();\n\t\tthis.#provider = provider;\n\t\tprovider.bindHooks({\n\t\t\tsetState: (next) => this.#setState(next),\n\t\t\tsetAvailable: (available) => this.#setAvailable(available)\n\t\t});\n\t}\n\tget state() {\n\t\treturn this.#state;\n\t}\n\tasync watchAvailability(callback) {\n\t\tthis.#assertEnabled();\n\t\tconst id = ++callbackIdCount;\n\t\tthis.#callbacks.set(id, callback);\n\t\tqueueMicrotask(() => callback(this.#provider.hasDevicesAvailable()));\n\t\treturn id;\n\t}\n\tasync cancelWatchAvailability(callbackId) {\n\t\tthis.#assertEnabled();\n\t\tif (callbackId === void 0) {\n\t\t\tthis.#callbacks.clear();\n\t\t\treturn;\n\t\t}\n\t\tif (!this.#callbacks.delete(callbackId)) throw new NotFoundError(`Callback not found for id ${callbackId}.`);\n\t}\n\tasync prompt() {\n\t\tthis.#assertEnabled();\n\t\tawait this.#provider.requestCastSession();\n\t}\n\t#assertEnabled() {\n\t\tif (this.#provider.target?.disableRemotePlayback) throw new InvalidStateError(\"disableRemotePlayback attribute is present.\");\n\t}\n\t#setState(next) {\n\t\tif (this.#state === next) return;\n\t\tthis.#state = next;\n\t\tif (next === \"connecting\") this.dispatchEvent(new Event(\"connecting\"));\n\t\telse if (next === \"connected\") this.dispatchEvent(new Event(\"connect\"));\n\t\telse this.dispatchEvent(new Event(\"disconnect\"));\n\t}\n\t#setAvailable(available) {\n\t\tif (this.#available === available) return;\n\t\tthis.#available = available;\n\t\tfor (const callback of this.#callbacks.values()) callback(available);\n\t}\n};\n//#endregion\nexport { RemotePlayback };\n\n//# sourceMappingURL=remote-playback.js.map","import { InvalidStateError, NotSupportedError, currentMedia, currentSession, editTracksInfo, getCastContext, getMediaStatus, getPlaylistSegmentFormat, isHls, setCastOptions, setPlaybackRate } from \"./utils.js\";\nimport { castFramework, ensureCastFramework, googleCastInstances } from \"./registry.js\";\nimport { RemotePlayback } from \"./remote-playback.js\";\nimport { isCaptionOrSubtitleTrack } from \"@videojs/utils/dom\";\n//#region src/dom/google-cast/google-cast-provider.ts\n/**\n* Cast provider + lifecycle. Created by the {@link GoogleCast} component and\n* installed as the host's `targetOverride` while a cast session is connected,\n* so its getters/setters route through the cast receiver; when disconnected the\n* host falls through to the attached target. Also owns the cast framework\n* integration, the `RemotePlayback` instance exposed via\n* {@link GoogleCastProvider#remote}, and dispatches media events on the attached\n* target (forwarded by the host) while casting.\n*/\nvar GoogleCastProvider = class {\n\ttarget = null;\n\t#googleCast;\n\t#hooks = {};\n\t#remotePlayback;\n\t#isInit = false;\n\t#isCasting = false;\n\t#seeking = false;\n\t#remotePlayer;\n\t#remoteListeners;\n\t#listenersAttached = false;\n\t#playbackRate = 1;\n\t#localPaused = false;\n\t#onTextTrackChange = () => this.#updateRemoteTextTrack();\n\t#onMediaUpdate = () => this.#checkPlaybackRate();\n\tconstructor(googleCast) {\n\t\tthis.#googleCast = googleCast;\n\t\tthis.#remotePlayback = new RemotePlayback(this);\n\t\tgoogleCastInstances.add(this);\n\t\tthis.onCastFrameworkAvailable();\n\t}\n\tget remote() {\n\t\tif (this.target && !this.target.disableRemotePlayback) ensureCastFramework();\n\t\treturn this.#remotePlayback;\n\t}\n\tattach(target) {\n\t\tthis.target = target;\n\t\ttarget.textTracks.addEventListener(\"change\", this.#onTextTrackChange);\n\t}\n\tdetach() {\n\t\tthis.target?.textTracks.removeEventListener(\"change\", this.#onTextTrackChange);\n\t\tthis.target = null;\n\t}\n\tdestroy() {\n\t\tthis.detach();\n\t\tgoogleCastInstances.delete(this);\n\t\tcurrentMedia()?.removeUpdateListener(this.#onMediaUpdate);\n\t\tthis.#detachRemoteListeners();\n\t\tthis.#isCasting = false;\n\t\tthis.#isInit = false;\n\t}\n\t/** @internal Wires up callbacks pushed from {@link RemotePlayback}; not part of the public surface. */\n\tbindHooks(hooks) {\n\t\tObject.assign(this.#hooks, hooks);\n\t}\n\thasDevicesAvailable() {\n\t\tconst state = getCastContext()?.getCastState();\n\t\treturn !!state && state !== cast.framework.CastState.NO_DEVICES_AVAILABLE;\n\t}\n\tasync requestCastSession() {\n\t\tif (this.target?.disableRemotePlayback) throw new InvalidStateError(\"disableRemotePlayback attribute is present.\");\n\t\tawait ensureCastFramework();\n\t\tif (!this.#isCastApiAvailable()) throw new NotSupportedError(\"The RemotePlayback API is disabled on this platform.\");\n\t\tconst willDisconnect = this.#isCasting;\n\t\tthis.#isCasting = true;\n\t\tthis.#applyCastOptions();\n\t\tthis.#attachRemoteListeners();\n\t\ttry {\n\t\t\tawait getCastContext().requestSession();\n\t\t} catch (err) {\n\t\t\tif (!willDisconnect) this.#isCasting = false;\n\t\t\tif (err === \"cancel\") return;\n\t\t\tthrow new Error(err);\n\t\t}\n\t\tthis.#localPaused = this.target?.paused ?? true;\n\t\tthis.target?.pause();\n\t\tthis.muted = this.target?.muted ?? false;\n\t\ttry {\n\t\t\tawait this.load();\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\tasync load() {\n\t\tif (!this.#isCasting) {\n\t\t\tawait this.target?.load();\n\t\t\treturn;\n\t\t}\n\t\tif (!this.#googleCast.src) return;\n\t\tconst mediaInfo = new chrome.cast.media.MediaInfo(this.#googleCast.src, this.#googleCast.contentType ?? \"\");\n\t\tmediaInfo.customData = this.#googleCast.customData ?? null;\n\t\tconst { target } = this;\n\t\tconst subtitles = [...target?.querySelectorAll(\"track\") ?? []].filter((el) => el.src && isCaptionOrSubtitleTrack(el));\n\t\tconst { Track, TrackType, TextTrackType } = chrome.cast.media;\n\t\tconst activeTrackIds = [];\n\t\tif (subtitles.length) mediaInfo.tracks = subtitles.map((el, i) => {\n\t\t\tconst trackId = i + 1;\n\t\t\tif (!activeTrackIds.length && el.track.mode === \"showing\") activeTrackIds.push(trackId);\n\t\t\tconst track = new Track(trackId, TrackType.TEXT);\n\t\t\ttrack.trackContentId = el.src;\n\t\t\ttrack.trackContentType = \"text/vtt\";\n\t\t\ttrack.subtype = el.kind === \"captions\" ? TextTrackType.CAPTIONS : TextTrackType.SUBTITLES;\n\t\t\ttrack.name = el.label;\n\t\t\ttrack.language = el.srclang;\n\t\t\treturn track;\n\t\t});\n\t\tmediaInfo.streamType = this.#googleCast.streamType === \"live\" ? chrome.cast.media.StreamType.LIVE : chrome.cast.media.StreamType.BUFFERED;\n\t\tmediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata();\n\t\tmediaInfo.metadata.images = [new chrome.cast.Image(target?.poster ?? \"\")];\n\t\tif (await isHls(this.#googleCast.src)) {\n\t\t\tmediaInfo.contentType ||= \"application/x-mpegURL\";\n\t\t\tconst fmt = await getPlaylistSegmentFormat(this.#googleCast.src) ?? \"\";\n\t\t\tconst { HlsSegmentFormat: HS, HlsVideoSegmentFormat: HVS } = chrome.cast.media;\n\t\t\tif (fmt.includes(\"m4s\") || fmt.includes(\"mp4\")) {\n\t\t\t\tmediaInfo.hlsSegmentFormat = HS.FMP4;\n\t\t\t\tmediaInfo.hlsVideoSegmentFormat = HVS.FMP4;\n\t\t\t} else if (fmt.includes(\"ts\")) {\n\t\t\t\tmediaInfo.hlsSegmentFormat = HS.TS;\n\t\t\t\tmediaInfo.hlsVideoSegmentFormat = HVS.TS;\n\t\t\t}\n\t\t}\n\t\tconst request = new chrome.cast.media.LoadRequest(mediaInfo);\n\t\trequest.currentTime = this.target?.currentTime ?? 0;\n\t\trequest.autoplay = !this.#localPaused;\n\t\trequest.activeTrackIds = activeTrackIds;\n\t\tawait currentSession()?.loadMedia(request);\n\t\tthis.target?.dispatchEvent(new Event(\"volumechange\"));\n\t}\n\tget paused() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) return this.target?.paused ?? true;\n\t\treturn this.#remotePlayer.isPaused || this.ended;\n\t}\n\tget ended() {\n\t\treturn this.#remotePlayer.playerState === chrome.cast.media.PlayerState.IDLE && currentMedia()?.idleReason === chrome.cast.media.IdleReason.FINISHED;\n\t}\n\tget seeking() {\n\t\treturn this.#seeking;\n\t}\n\tget readyState() {\n\t\tswitch (this.#remotePlayer.playerState) {\n\t\t\tcase chrome.cast.media.PlayerState.IDLE: return 0;\n\t\t\tcase chrome.cast.media.PlayerState.BUFFERING: return 2;\n\t\t\tdefault: return 3;\n\t\t}\n\t}\n\tget duration() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) return this.target?.duration ?? NaN;\n\t\treturn this.#remotePlayer.duration ?? NaN;\n\t}\n\tget currentTime() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) return this.target?.currentTime ?? 0;\n\t\treturn this.#remotePlayer.currentTime ?? 0;\n\t}\n\tset currentTime(value) {\n\t\tthis.#remotePlayer.currentTime = value;\n\t\tthis.#notifySeeking();\n\t\tthis.#remotePlayer.controller?.seek();\n\t}\n\tget muted() {\n\t\treturn this.#remotePlayer.isMuted;\n\t}\n\tset muted(value) {\n\t\tif (value !== this.#remotePlayer.isMuted) this.#remotePlayer.controller?.muteOrUnmute();\n\t}\n\tget volume() {\n\t\treturn this.#remotePlayer.volumeLevel ?? 1;\n\t}\n\tset volume(value) {\n\t\tthis.#remotePlayer.volumeLevel = +value;\n\t\tthis.#remotePlayer.controller?.setVolumeLevel();\n\t}\n\tget playbackRate() {\n\t\treturn currentMedia()?.playbackRate ?? 1;\n\t}\n\tset playbackRate(value) {\n\t\tsetPlaybackRate(value);\n\t}\n\tasync play() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) {\n\t\t\tthis.#localPaused = false;\n\t\t\tawait this.load();\n\t\t\treturn;\n\t\t}\n\t\tif (this.paused) {\n\t\t\tthis.#remotePlayer.controller?.playOrPause();\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.target?.addEventListener(\"play\", () => resolve(), { once: true });\n\t\t\t});\n\t\t}\n\t}\n\tpause() {\n\t\tif (!this.paused) this.#remotePlayer.controller?.playOrPause();\n\t}\n\tonCastFrameworkAvailable() {\n\t\tif (!castFramework || this.#isInit) return;\n\t\tthis.#isInit = true;\n\t\tthis.#applyCastOptions();\n\t\tthis.onCastStateChanged();\n\t\tthis.#remotePlayer = new castFramework.RemotePlayer();\n\t\tnew castFramework.RemotePlayerController(this.#remotePlayer);\n\t\tthis.#remoteListeners = {\n\t\t\t[castFramework.RemotePlayerEventType.IS_CONNECTED_CHANGED]: (event) => {\n\t\t\t\tif (event?.value === true) this.#hooks.setState?.(\"connected\");\n\t\t\t\telse {\n\t\t\t\t\tthis.#disconnect();\n\t\t\t\t\tthis.#hooks.setState?.(\"disconnected\");\n\t\t\t\t}\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.DURATION_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"durationchange\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"volumechange\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.IS_MUTED_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"volumechange\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.CURRENT_TIME_CHANGED]: () => {\n\t\t\t\tif (!this.#isCasting || !this.#remotePlayer.isMediaLoaded) return;\n\t\t\t\tthis.#notifySeeked();\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"timeupdate\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.VIDEO_INFO_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"resize\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.IS_PAUSED_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(this.#isCasting && this.#remotePlayer.isPaused ? \"pause\" : \"play\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.PLAYER_STATE_CHANGED]: () => {\n\t\t\t\tconst PS = chrome.cast.media.PlayerState;\n\t\t\t\tconst state = this.#isCasting ? this.#remotePlayer.playerState : void 0;\n\t\t\t\tif (state !== PS.BUFFERING) this.#notifySeeked();\n\t\t\t\tif (state === PS.PAUSED) return;\n\t\t\t\tif (state === PS.IDLE) {\n\t\t\t\t\tconst finished = currentMedia()?.idleReason === chrome.cast.media.IdleReason.FINISHED;\n\t\t\t\t\tthis.target?.dispatchEvent(new Event(finished ? \"ended\" : \"emptied\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (state === PS.PLAYING) this.target?.dispatchEvent(new Event(\"playing\"));\n\t\t\t\telse if (state === PS.BUFFERING) this.target?.dispatchEvent(new Event(\"waiting\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED]: async () => {\n\t\t\t\tif (!this.#isCasting || !this.#remotePlayer.isMediaLoaded) return;\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tthis.#onRemoteMediaLoaded();\n\t\t\t}\n\t\t};\n\t}\n\tonCastStateChanged() {\n\t\tif (!this.#isInit) return;\n\t\tconst CS = cast.framework.CastState;\n\t\tconst state = getCastContext().getCastState();\n\t\tif (this.#isCasting && state === CS.CONNECTING) this.#hooks.setState?.(\"connecting\");\n\t\tthis.#hooks.setAvailable?.(!!state && state !== CS.NO_DEVICES_AVAILABLE);\n\t}\n\tasync onSessionStateChanged() {\n\t\tif (!this.#isInit) return;\n\t\tconst { SESSION_RESUMED } = castFramework.SessionState;\n\t\tif (getCastContext().getSessionState() === SESSION_RESUMED) {\n\t\t\tif (this.#googleCast.src === currentMedia()?.media?.contentId) {\n\t\t\t\tthis.#isCasting = true;\n\t\t\t\tthis.#attachRemoteListeners();\n\t\t\t\ttry {\n\t\t\t\t\tawait getMediaStatus(new chrome.cast.media.GetStatusRequest());\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t}\n\t\t\t\tthis.#remoteListeners[castFramework.RemotePlayerEventType.IS_PAUSED_CHANGED]();\n\t\t\t\tthis.#remoteListeners[castFramework.RemotePlayerEventType.PLAYER_STATE_CHANGED]();\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"ratechange\"));\n\t\t\t}\n\t\t}\n\t}\n\t#isCastApiAvailable() {\n\t\treturn Boolean(globalThis.chrome?.cast?.isAvailable);\n\t}\n\t#applyCastOptions() {\n\t\tconst { receiver } = this.#googleCast;\n\t\tsetCastOptions(receiver ? { receiverApplicationId: receiver } : {});\n\t}\n\t#attachRemoteListeners() {\n\t\tif (this.#listenersAttached) return;\n\t\tconst controller = this.#remotePlayer?.controller;\n\t\tif (!controller) return;\n\t\tfor (const [type, handler] of Object.entries(this.#remoteListeners)) controller.addEventListener(type, handler);\n\t\tthis.#listenersAttached = true;\n\t}\n\t#detachRemoteListeners() {\n\t\tif (!this.#listenersAttached) return;\n\t\tconst controller = this.#remotePlayer?.controller;\n\t\tif (controller) for (const [type, handler] of Object.entries(this.#remoteListeners)) controller.removeEventListener(type, handler);\n\t\tthis.#listenersAttached = false;\n\t}\n\t#disconnect() {\n\t\tif (!this.#isCasting) return;\n\t\tcurrentMedia()?.removeUpdateListener(this.#onMediaUpdate);\n\t\tthis.#detachRemoteListeners();\n\t\tthis.#seeking = false;\n\t\tthis.#playbackRate = 1;\n\t\tthis.#isCasting = false;\n\t\tif (this.target) this.target.muted = this.#remotePlayer.isMuted;\n\t\tconst saved = this.#remotePlayer.savedPlayerState;\n\t\tif (saved) {\n\t\t\tif (this.target) this.target.currentTime = saved.currentTime;\n\t\t\tif (saved.isPaused === false && this.target) this.target.play();\n\t\t}\n\t}\n\t#notifySeeking() {\n\t\tthis.#seeking = true;\n\t\tthis.target?.dispatchEvent(new Event(\"seeking\"));\n\t}\n\t#notifySeeked() {\n\t\tif (!this.#seeking) return;\n\t\tthis.#seeking = false;\n\t\tthis.target?.dispatchEvent(new Event(\"seeked\"));\n\t}\n\t#onRemoteMediaLoaded() {\n\t\tthis.#playbackRate = currentMedia()?.playbackRate ?? 1;\n\t\tcurrentMedia()?.addUpdateListener(this.#onMediaUpdate);\n\t\tthis.#updateRemoteTextTrack();\n\t}\n\t#checkPlaybackRate() {\n\t\tconst rate = currentMedia()?.playbackRate ?? 1;\n\t\tif (rate !== this.#playbackRate) {\n\t\t\tthis.#playbackRate = rate;\n\t\t\tthis.target?.dispatchEvent(new Event(\"ratechange\"));\n\t\t}\n\t}\n\tasync #updateRemoteTextTrack() {\n\t\tif (!this.#isCasting || !this.target) return;\n\t\tconst localSubs = [...this.target.textTracks].filter(isCaptionOrSubtitleTrack);\n\t\tconst matched = (this.#remotePlayer.mediaInfo?.tracks ?? []).filter(({ type }) => type === chrome.cast.media.TrackType.TEXT).flatMap(({ language, name, trackId }) => {\n\t\t\tconst local = localSubs.find((l) => l.language === language && l.label === name);\n\t\t\treturn local?.mode ? [{\n\t\t\t\tmode: local.mode,\n\t\t\t\ttrackId\n\t\t\t}] : [];\n\t\t});\n\t\tconst hidden = new Set(matched.filter((m) => m.mode !== \"showing\").map((m) => m.trackId));\n\t\tconst showing = matched.find((m) => m.mode === \"showing\")?.trackId;\n\t\tconst active = currentSession()?.getSessionObj().media[0]?.activeTrackIds ?? [];\n\t\tconst next = new Set(active.filter((id) => !hidden.has(id)));\n\t\tif (showing) next.add(showing);\n\t\tif (next.size === active.length && active.every((id) => next.has(id))) return;\n\t\ttry {\n\t\t\tawait editTracksInfo(new chrome.cast.media.EditTracksInfoRequest([...next]));\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n//#endregion\nexport { GoogleCastProvider };\n\n//# sourceMappingURL=google-cast-provider.js.map","import { requiresCastFramework } from \"./utils.js\";\nimport { GoogleCastProvider } from \"./google-cast-provider.js\";\n//#region src/dom/google-cast/media.ts\nconst googleCastDefaultProps = {\n\tsrc: void 0,\n\tcontentType: void 0,\n\tstreamType: void 0,\n\treceiver: void 0,\n\tcustomData: void 0\n};\nvar GoogleCast = class {\n\t#src;\n\t#contentType;\n\t#streamType;\n\t#receiver;\n\t#customData;\n\t#media = null;\n\t#provider = null;\n\t#override = null;\n\tconstructor(props = {}) {\n\t\tObject.assign(this, props);\n\t}\n\tsetMedia(host) {\n\t\tif (!requiresCastFramework()) return;\n\t\tthis.#media = host;\n\t\tif (!this.#provider) {\n\t\t\tthis.#provider = new GoogleCastProvider(this);\n\t\t\tthis.#provider.remote.addEventListener(\"connect\", this.#onStateChange);\n\t\t\tthis.#provider.remote.addEventListener(\"disconnect\", this.#onStateChange);\n\t\t\tthis.#override = this.#createRemoteOverride();\n\t\t}\n\t}\n\tattach(target) {\n\t\tthis.#provider?.attach(target);\n\t}\n\tdetach() {\n\t\tthis.#provider?.detach();\n\t}\n\tdestroy() {\n\t\tthis.#provider?.destroy();\n\t\tthis.#provider = null;\n\t\tthis.#media = null;\n\t}\n\t#onStateChange = () => {\n\t\tif (!this.#provider) return;\n\t\tif (this.#provider.remote.state === \"connected\") this.#override = this.#provider;\n\t\telse this.#override = this.#createRemoteOverride();\n\t};\n\t#createRemoteOverride() {\n\t\tconst provider = this.#provider;\n\t\treturn { get remote() {\n\t\t\treturn provider.remote;\n\t\t} };\n\t}\n\tget targetOverride() {\n\t\treturn this.#override;\n\t}\n\t/** Source URL loaded on the Cast receiver. Falls back to a `<source>` child, `src`, then `currentSrc`. */\n\tget src() {\n\t\treturn this.#src ?? this.#media?.querySelector(\"source\")?.src ?? this.#media?.src ?? this.#media?.currentSrc ?? \"\";\n\t}\n\tset src(value) {\n\t\tif (this.#src === value) return;\n\t\tthis.#src = value;\n\t\tthis.#load();\n\t}\n\t/** MIME type of the Cast source. When unset, the receiver infers it from the URL. */\n\tget contentType() {\n\t\treturn this.#contentType;\n\t}\n\tset contentType(value) {\n\t\tif (this.#contentType === value) return;\n\t\tthis.#contentType = value;\n\t\tthis.#load();\n\t}\n\t/** Stream type used on the Cast receiver. Falls back to the host's `streamType` if it exposes one. */\n\tget streamType() {\n\t\treturn this.#streamType ?? this.#media?.streamType;\n\t}\n\tset streamType(value) {\n\t\tif (this.#streamType === value) return;\n\t\tthis.#streamType = value;\n\t\tthis.#load();\n\t}\n\t/** Cast receiver application ID. Read on session start; falls back to the layer's default. */\n\tget receiver() {\n\t\treturn this.#receiver;\n\t}\n\tset receiver(value) {\n\t\tif (this.#receiver === value) return;\n\t\tthis.#receiver = value;\n\t\tthis.#load();\n\t}\n\t/** Custom data sent to the Cast receiver with the load request. */\n\tget customData() {\n\t\treturn this.#customData;\n\t}\n\tset customData(value) {\n\t\tif (this.#customData === value) return;\n\t\tthis.#customData = value;\n\t\tthis.#load();\n\t}\n\t#load() {\n\t\tif (this.#media?.remote.state === \"connected\") this.#media.load();\n\t}\n};\n//#endregion\nexport { GoogleCast, googleCastDefaultProps };\n\n//# sourceMappingURL=media.js.map","import type { PropertyDeclarationMap } from '@videojs/element';\nimport { GoogleCast, type GoogleCastProps } from '@videojs/media/dom/google-cast';\n\nimport { MediaComponentElement } from '../media-component-element';\n\n/**\n * Adds Google Cast support to the surrounding player's media.\n *\n * Renders nothing — place it inside the player as a sibling of the media\n * element and it registers a {@link GoogleCast} media component with the\n * active media host.\n *\n * @example\n * ```html\n * <video-player>\n * <hlsjs-video src=\"https://example.com/stream.m3u8\"></hlsjs-video>\n * <google-cast receiver=\"YOUR_APP_ID\"></google-cast>\n * </video-player>\n * ```\n */\nexport class GoogleCastElement extends MediaComponentElement<GoogleCast> {\n static readonly tagName = 'google-cast';\n\n static override properties = {\n src: { type: String },\n contentType: { type: String, attribute: 'content-type' },\n streamType: { type: String, attribute: 'stream-type' },\n receiver: { type: String },\n // `customData` takes an object, so it's a property-only prop.\n } satisfies PropertyDeclarationMap<Exclude<keyof GoogleCastProps, 'customData'>>;\n\n protected createComponent(): GoogleCast {\n return new GoogleCast();\n }\n\n /** Source URL loaded on the Cast receiver. Falls back to the media's `src` / `currentSrc`. */\n get src(): string {\n return this.component.src ?? '';\n }\n\n set src(value: string | null | undefined) {\n this.component.src = value ?? undefined;\n }\n\n /** MIME type of the Cast source. When unset, the receiver infers it from the URL. */\n get contentType(): string | undefined {\n return this.component.contentType;\n }\n\n set contentType(value: string | null | undefined) {\n this.component.contentType = value ?? undefined;\n }\n\n /** Stream type used on the Cast receiver. Falls back to the media's `streamType`. */\n get streamType(): GoogleCastProps['streamType'] {\n return this.component.streamType;\n }\n\n set streamType(value: GoogleCastProps['streamType'] | null) {\n this.component.streamType = value ?? undefined;\n }\n\n /** Cast receiver application ID. Defaults to Google's default media receiver. */\n get receiver(): string | undefined {\n return this.component.receiver;\n }\n\n set receiver(value: string | null | undefined) {\n this.component.receiver = value ?? undefined;\n }\n\n /** Custom data sent to the Cast receiver with the load request. */\n get customData(): GoogleCastProps['customData'] {\n return this.component.customData;\n }\n\n set customData(value: GoogleCastProps['customData']) {\n this.component.customData = value;\n }\n}\n","import { GoogleCastElement } from '../../media/google-cast';\nimport { safeDefine } from '../safe-define';\n\nexport { GoogleCastElement };\n\nsafeDefine(GoogleCastElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [GoogleCastElement.tagName]: GoogleCastElement;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"google-cast.js","names":["#seen","#refs","#provider","#setState","#setAvailable","#state","#assertEnabled","#callbacks","#available","#updateRemoteTextTrack","#checkPlaybackRate","#googleCast","#remotePlayback","#onTextTrackChange","#onMediaUpdate","#detachRemoteListeners","#isCasting","#isInit","#hooks","#isCastApiAvailable","#applyCastOptions","#attachRemoteListeners","#localPaused","#remotePlayer","#seeking","#notifySeeking","#remoteListeners","#disconnect","#notifySeeked","#onRemoteMediaLoaded","#listenersAttached","#playbackRate","#media","#provider","#onStateChange","#override","#createRemoteOverride","#src","#load","#contentType","#streamType","#receiver","#customData"],"sources":["../../../media/dist/default/dom/google-cast/utils.js","../../../media/dist/default/dom/google-cast/registry.js","../../../media/dist/default/dom/google-cast/remote-playback.js","../../../media/dist/default/dom/google-cast/google-cast-provider.js","../../../media/dist/default/dom/google-cast/media.js","../../src/media/google-cast/google-cast-element.ts","../../src/define/media/google-cast.ts"],"sourcesContent":["import { loadScript } from \"@videojs/utils/dom\";\n//#region src/dom/google-cast/utils.ts\nvar InvalidStateError = class extends Error {};\nvar NotSupportedError = class extends Error {};\nvar NotFoundError = class extends Error {};\nconst GOOGLE_CAST_FRAMEWORK_URL = \"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1\";\nconst HLS_RESPONSE_HEADERS = [\n\t\"application/x-mpegURL\",\n\t\"application/vnd.apple.mpegurl\",\n\t\"audio/mpegurl\"\n];\nvar IterableWeakSet = class {\n\t#refs = /* @__PURE__ */ new Set();\n\t#seen = /* @__PURE__ */ new WeakMap();\n\tadd(value) {\n\t\tif (this.#seen.has(value)) return this;\n\t\tconst ref = new WeakRef(value);\n\t\tthis.#seen.set(value, ref);\n\t\tthis.#refs.add(ref);\n\t\treturn this;\n\t}\n\tdelete(value) {\n\t\tconst ref = this.#seen.get(value);\n\t\tif (!ref) return false;\n\t\tthis.#seen.delete(value);\n\t\treturn this.#refs.delete(ref);\n\t}\n\tforEach(fn) {\n\t\tfor (const ref of this.#refs) {\n\t\t\tconst value = ref.deref();\n\t\t\tif (value) fn(value);\n\t\t\telse this.#refs.delete(ref);\n\t\t}\n\t}\n};\nfunction onCastApiAvailable(callback) {\n\tconst whenDefined = () => customElements.whenDefined(\"google-cast-button\").then(callback);\n\tif (!globalThis.chrome?.cast?.isAvailable) globalThis.__onGCastApiAvailable = whenDefined;\n\telse if (typeof cast === \"undefined\" || !cast.framework) whenDefined();\n\telse callback();\n}\nfunction requiresCastFramework() {\n\treturn Boolean(globalThis.chrome);\n}\nasync function loadCastFramework() {\n\tif (globalThis.chrome?.cast) return;\n\tawait loadScript(GOOGLE_CAST_FRAMEWORK_URL);\n}\nfunction getCastContext() {\n\treturn typeof cast === \"undefined\" ? void 0 : cast.framework?.CastContext.getInstance();\n}\nfunction currentSession() {\n\treturn getCastContext()?.getCurrentSession();\n}\nfunction currentMedia() {\n\treturn currentSession()?.getSessionObj().media[0] ?? void 0;\n}\nfunction editTracksInfo(request) {\n\treturn new Promise((resolve, reject) => {\n\t\tcurrentMedia().editTracksInfo(request, resolve, reject);\n\t});\n}\nfunction getMediaStatus(request) {\n\treturn new Promise((resolve, reject) => {\n\t\tcurrentMedia().getStatus(request, resolve, reject);\n\t});\n}\nconst MEDIA_NAMESPACE = \"urn:x-cast:com.google.cast.media\";\nlet requestId = 0;\nfunction setPlaybackRate(rate) {\n\tconst media = currentMedia();\n\treturn currentSession().sendMessage(MEDIA_NAMESPACE, {\n\t\ttype: \"SET_PLAYBACK_RATE\",\n\t\tplaybackRate: rate,\n\t\tmediaSessionId: media?.mediaSessionId,\n\t\trequestId: ++requestId\n\t});\n}\nfunction setCastOptions(options) {\n\tgetCastContext().setOptions({\n\t\t...getDefaultCastOptions(),\n\t\t...options\n\t});\n}\nfunction getDefaultCastOptions() {\n\treturn {\n\t\treceiverApplicationId: \"CC1AD845\",\n\t\tautoJoinPolicy: globalThis.chrome?.cast?.AutoJoinPolicy?.ORIGIN_SCOPED ?? \"origin_scoped\",\n\t\tandroidReceiverCompatible: false,\n\t\tlanguage: \"en-US\",\n\t\tresumeSavedSession: true\n\t};\n}\nfunction getFormat(segment) {\n\tif (!segment) return void 0;\n\tconst match = segment.match(/\\.([a-zA-Z0-9]+)(?:\\?.*)?$/);\n\treturn match ? match[1] : null;\n}\nfunction parsePlaylistUrls(playlistContent) {\n\tconst lines = playlistContent.split(\"\\n\");\n\tconst urls = [];\n\tfor (let i = 0; i < lines.length; i++) if (lines[i].trim().startsWith(\"#EXT-X-STREAM-INF\")) {\n\t\tconst nextLine = lines[i + 1] ? lines[i + 1].trim() : \"\";\n\t\tif (nextLine && !nextLine.startsWith(\"#\")) urls.push(nextLine);\n\t}\n\treturn urls;\n}\nfunction parseSegment(playlistContent) {\n\treturn playlistContent.split(\"\\n\").find((line) => !line.trim().startsWith(\"#\") && line.trim() !== \"\");\n}\nasync function isHls(url) {\n\tif (!url) return false;\n\tif (/\\.m3u8?(\\?.*)?$/i.test(url)) return true;\n\tif (url.startsWith(\"blob:\")) return false;\n\ttry {\n\t\tconst contentType = (await fetch(url, { method: \"HEAD\" })).headers.get(\"Content-Type\");\n\t\tif (!contentType) return false;\n\t\tconst normalizedContentType = contentType.toLowerCase().split(\";\")[0].trim();\n\t\treturn HLS_RESPONSE_HEADERS.some((header) => normalizedContentType === header.toLowerCase());\n\t} catch (err) {\n\t\tconsole.error(\"Error while trying to get the Content-Type of the manifest\", err);\n\t\treturn false;\n\t}\n}\nasync function getPlaylistSegmentFormat(url) {\n\ttry {\n\t\tconst mainManifestContent = await (await fetch(url)).text();\n\t\tlet availableChunksContent = mainManifestContent;\n\t\tconst playlists = parsePlaylistUrls(mainManifestContent);\n\t\tif (playlists.length > 0) {\n\t\t\tconst chosenPlaylistUrl = new URL(playlists[0], url).toString();\n\t\t\tavailableChunksContent = await (await fetch(chosenPlaylistUrl)).text();\n\t\t}\n\t\treturn getFormat(parseSegment(availableChunksContent));\n\t} catch (err) {\n\t\tconsole.error(\"Error while trying to parse the manifest playlist\", err);\n\t\treturn;\n\t}\n}\n//#endregion\nexport { InvalidStateError, IterableWeakSet, NotFoundError, NotSupportedError, currentMedia, currentSession, editTracksInfo, getCastContext, getMediaStatus, getPlaylistSegmentFormat, isHls, loadCastFramework, onCastApiAvailable, requiresCastFramework, setCastOptions, setPlaybackRate };\n\n//# sourceMappingURL=utils.js.map","import { IterableWeakSet, getCastContext, loadCastFramework, onCastApiAvailable } from \"./utils.js\";\n//#region src/dom/google-cast/registry.ts\nconst googleCastInstances = new IterableWeakSet();\nlet castFramework;\nlet pendingCastFramework = null;\nasync function ensureCastFramework() {\n\tif (castFramework) return castFramework;\n\tif (!pendingCastFramework) {\n\t\tpendingCastFramework = loadCastFramework().then(() => new Promise((resolve, reject) => {\n\t\t\tonCastApiAvailable(() => {\n\t\t\t\tregisterCastFramework();\n\t\t\t\tif (castFramework) {\n\t\t\t\t\tresolve(castFramework);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treject(new DOMException(\"Google Cast framework is unavailable.\", \"NotSupportedError\"));\n\t\t\t});\n\t\t}));\n\t\tpendingCastFramework.catch(() => {\n\t\t\tpendingCastFramework = null;\n\t\t});\n\t}\n\treturn pendingCastFramework;\n}\nfunction registerCastFramework() {\n\tif (!globalThis.chrome?.cast?.isAvailable) return;\n\tif (!castFramework) {\n\t\tcastFramework = cast.framework;\n\t\tgetCastContext().addEventListener(castFramework.CastContextEventType.CAST_STATE_CHANGED, () => {\n\t\t\tgoogleCastInstances.forEach((provider) => provider.onCastStateChanged());\n\t\t});\n\t\tgetCastContext().addEventListener(castFramework.CastContextEventType.SESSION_STATE_CHANGED, () => {\n\t\t\tgoogleCastInstances.forEach((provider) => provider.onSessionStateChanged());\n\t\t});\n\t\tgoogleCastInstances.forEach((provider) => provider.onCastFrameworkAvailable());\n\t}\n}\n//#endregion\nexport { castFramework, ensureCastFramework, googleCastInstances };\n\n//# sourceMappingURL=registry.js.map","import { InvalidStateError, NotFoundError } from \"./utils.js\";\n//#region src/dom/google-cast/remote-playback.ts\nlet callbackIdCount = 0;\n/**\n* Implementation of the W3C [`RemotePlayback`](https://developer.mozilla.org/en-US/docs/Web/API/RemotePlayback)\n* interface backed by Google Cast.\n*\n* Surfaced via `host.remote` while the {@link GoogleCastProvider} is in the\n* provider chain. The public API must strictly conform to the W3C spec:\n*\n* - Properties: `state`\n* - Methods: `watchAvailability`, `cancelWatchAvailability`, `prompt`\n* - Events: `connecting`, `connect`, `disconnect`\n*\n* Internal state mutations are pushed by {@link GoogleCastProvider} through\n* private callbacks registered via `provider.bindHooks(...)` in the constructor —\n* do not add public methods or properties that aren't part of the spec.\n*/\nvar RemotePlayback = class extends EventTarget {\n\t#provider;\n\t#state = \"disconnected\";\n\t#available = false;\n\t#callbacks = /* @__PURE__ */ new Map();\n\tconstructor(provider) {\n\t\tsuper();\n\t\tthis.#provider = provider;\n\t\tprovider.bindHooks({\n\t\t\tsetState: (next) => this.#setState(next),\n\t\t\tsetAvailable: (available) => this.#setAvailable(available)\n\t\t});\n\t}\n\tget state() {\n\t\treturn this.#state;\n\t}\n\tasync watchAvailability(callback) {\n\t\tthis.#assertEnabled();\n\t\tconst id = ++callbackIdCount;\n\t\tthis.#callbacks.set(id, callback);\n\t\tqueueMicrotask(() => callback(this.#provider.hasDevicesAvailable()));\n\t\treturn id;\n\t}\n\tasync cancelWatchAvailability(callbackId) {\n\t\tthis.#assertEnabled();\n\t\tif (callbackId === void 0) {\n\t\t\tthis.#callbacks.clear();\n\t\t\treturn;\n\t\t}\n\t\tif (!this.#callbacks.delete(callbackId)) throw new NotFoundError(`Callback not found for id ${callbackId}.`);\n\t}\n\tasync prompt() {\n\t\tthis.#assertEnabled();\n\t\tawait this.#provider.requestCastSession();\n\t}\n\t#assertEnabled() {\n\t\tif (this.#provider.target?.disableRemotePlayback) throw new InvalidStateError(\"disableRemotePlayback attribute is present.\");\n\t}\n\t#setState(next) {\n\t\tif (this.#state === next) return;\n\t\tthis.#state = next;\n\t\tif (next === \"connecting\") this.dispatchEvent(new Event(\"connecting\"));\n\t\telse if (next === \"connected\") this.dispatchEvent(new Event(\"connect\"));\n\t\telse this.dispatchEvent(new Event(\"disconnect\"));\n\t}\n\t#setAvailable(available) {\n\t\tif (this.#available === available) return;\n\t\tthis.#available = available;\n\t\tfor (const callback of this.#callbacks.values()) callback(available);\n\t}\n};\n//#endregion\nexport { RemotePlayback };\n\n//# sourceMappingURL=remote-playback.js.map","import { InvalidStateError, NotSupportedError, currentMedia, currentSession, editTracksInfo, getCastContext, getMediaStatus, getPlaylistSegmentFormat, isHls, setCastOptions, setPlaybackRate } from \"./utils.js\";\nimport { castFramework, ensureCastFramework, googleCastInstances } from \"./registry.js\";\nimport { RemotePlayback } from \"./remote-playback.js\";\nimport { isCaptionOrSubtitleTrack } from \"@videojs/utils/dom\";\n//#region src/dom/google-cast/google-cast-provider.ts\n/**\n* Cast provider + lifecycle. Created by the {@link GoogleCast} component and\n* installed as the host's `targetOverride` while a cast session is connected,\n* so its getters/setters route through the cast receiver; when disconnected the\n* host falls through to the attached target. Also owns the cast framework\n* integration, the `RemotePlayback` instance exposed via\n* {@link GoogleCastProvider#remote}, and dispatches media events on the attached\n* target (forwarded by the host) while casting.\n*/\nvar GoogleCastProvider = class {\n\ttarget = null;\n\t#googleCast;\n\t#hooks = {};\n\t#remotePlayback;\n\t#isInit = false;\n\t#isCasting = false;\n\t#seeking = false;\n\t#remotePlayer;\n\t#remoteListeners;\n\t#listenersAttached = false;\n\t#playbackRate = 1;\n\t#localPaused = false;\n\t#onTextTrackChange = () => this.#updateRemoteTextTrack();\n\t#onMediaUpdate = () => this.#checkPlaybackRate();\n\tconstructor(googleCast) {\n\t\tthis.#googleCast = googleCast;\n\t\tthis.#remotePlayback = new RemotePlayback(this);\n\t\tgoogleCastInstances.add(this);\n\t\tthis.onCastFrameworkAvailable();\n\t}\n\tget remote() {\n\t\tif (this.target && !this.target.disableRemotePlayback) ensureCastFramework();\n\t\treturn this.#remotePlayback;\n\t}\n\tattach(target) {\n\t\tthis.target = target;\n\t\ttarget.textTracks.addEventListener(\"change\", this.#onTextTrackChange);\n\t}\n\tdetach() {\n\t\tthis.target?.textTracks.removeEventListener(\"change\", this.#onTextTrackChange);\n\t\tthis.target = null;\n\t}\n\tdestroy() {\n\t\tthis.detach();\n\t\tgoogleCastInstances.delete(this);\n\t\tcurrentMedia()?.removeUpdateListener(this.#onMediaUpdate);\n\t\tthis.#detachRemoteListeners();\n\t\tthis.#isCasting = false;\n\t\tthis.#isInit = false;\n\t}\n\t/** @internal Wires up callbacks pushed from {@link RemotePlayback}; not part of the public surface. */\n\tbindHooks(hooks) {\n\t\tObject.assign(this.#hooks, hooks);\n\t}\n\thasDevicesAvailable() {\n\t\tconst state = getCastContext()?.getCastState();\n\t\treturn !!state && state !== cast.framework.CastState.NO_DEVICES_AVAILABLE;\n\t}\n\tasync requestCastSession() {\n\t\tif (this.target?.disableRemotePlayback) throw new InvalidStateError(\"disableRemotePlayback attribute is present.\");\n\t\tawait ensureCastFramework();\n\t\tif (!this.#isCastApiAvailable()) throw new NotSupportedError(\"The RemotePlayback API is disabled on this platform.\");\n\t\tconst willDisconnect = this.#isCasting;\n\t\tthis.#isCasting = true;\n\t\tthis.#applyCastOptions();\n\t\tthis.#attachRemoteListeners();\n\t\ttry {\n\t\t\tawait getCastContext().requestSession();\n\t\t} catch (err) {\n\t\t\tif (!willDisconnect) this.#isCasting = false;\n\t\t\tif (err === \"cancel\") return;\n\t\t\tthrow new Error(err);\n\t\t}\n\t\tthis.#localPaused = this.target?.paused ?? true;\n\t\tthis.target?.pause();\n\t\tthis.muted = this.target?.muted ?? false;\n\t\ttry {\n\t\t\tawait this.load();\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\tasync load() {\n\t\tif (!this.#isCasting) {\n\t\t\tawait this.target?.load();\n\t\t\treturn;\n\t\t}\n\t\tif (!this.#googleCast.src) return;\n\t\tconst mediaInfo = new chrome.cast.media.MediaInfo(this.#googleCast.src, this.#googleCast.contentType ?? \"\");\n\t\tmediaInfo.customData = this.#googleCast.customData ?? null;\n\t\tconst { target } = this;\n\t\tconst subtitles = [...target?.querySelectorAll(\"track\") ?? []].filter((el) => el.src && isCaptionOrSubtitleTrack(el));\n\t\tconst { Track, TrackType, TextTrackType } = chrome.cast.media;\n\t\tconst activeTrackIds = [];\n\t\tif (subtitles.length) mediaInfo.tracks = subtitles.map((el, i) => {\n\t\t\tconst trackId = i + 1;\n\t\t\tif (!activeTrackIds.length && el.track.mode === \"showing\") activeTrackIds.push(trackId);\n\t\t\tconst track = new Track(trackId, TrackType.TEXT);\n\t\t\ttrack.trackContentId = el.src;\n\t\t\ttrack.trackContentType = \"text/vtt\";\n\t\t\ttrack.subtype = el.kind === \"captions\" ? TextTrackType.CAPTIONS : TextTrackType.SUBTITLES;\n\t\t\ttrack.name = el.label;\n\t\t\ttrack.language = el.srclang;\n\t\t\treturn track;\n\t\t});\n\t\tmediaInfo.streamType = this.#googleCast.streamType === \"live\" ? chrome.cast.media.StreamType.LIVE : chrome.cast.media.StreamType.BUFFERED;\n\t\tmediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata();\n\t\tmediaInfo.metadata.images = [new chrome.cast.Image(target?.poster ?? \"\")];\n\t\tif (await isHls(this.#googleCast.src)) {\n\t\t\tmediaInfo.contentType ||= \"application/x-mpegURL\";\n\t\t\tconst fmt = await getPlaylistSegmentFormat(this.#googleCast.src) ?? \"\";\n\t\t\tconst { HlsSegmentFormat: HS, HlsVideoSegmentFormat: HVS } = chrome.cast.media;\n\t\t\tif (fmt.includes(\"m4s\") || fmt.includes(\"mp4\")) {\n\t\t\t\tmediaInfo.hlsSegmentFormat = HS.FMP4;\n\t\t\t\tmediaInfo.hlsVideoSegmentFormat = HVS.FMP4;\n\t\t\t} else if (fmt.includes(\"ts\")) {\n\t\t\t\tmediaInfo.hlsSegmentFormat = HS.TS;\n\t\t\t\tmediaInfo.hlsVideoSegmentFormat = HVS.TS;\n\t\t\t}\n\t\t}\n\t\tconst request = new chrome.cast.media.LoadRequest(mediaInfo);\n\t\trequest.currentTime = this.target?.currentTime ?? 0;\n\t\trequest.autoplay = !this.#localPaused;\n\t\trequest.activeTrackIds = activeTrackIds;\n\t\tawait currentSession()?.loadMedia(request);\n\t\tthis.target?.dispatchEvent(new Event(\"volumechange\"));\n\t}\n\tget paused() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) return this.target?.paused ?? true;\n\t\treturn this.#remotePlayer.isPaused || this.ended;\n\t}\n\tget ended() {\n\t\treturn this.#remotePlayer.playerState === chrome.cast.media.PlayerState.IDLE && currentMedia()?.idleReason === chrome.cast.media.IdleReason.FINISHED;\n\t}\n\tget seeking() {\n\t\treturn this.#seeking;\n\t}\n\tget readyState() {\n\t\tswitch (this.#remotePlayer.playerState) {\n\t\t\tcase chrome.cast.media.PlayerState.IDLE: return 0;\n\t\t\tcase chrome.cast.media.PlayerState.BUFFERING: return 2;\n\t\t\tdefault: return 3;\n\t\t}\n\t}\n\tget duration() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) return this.target?.duration ?? NaN;\n\t\treturn this.#remotePlayer.duration ?? NaN;\n\t}\n\tget currentTime() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) return this.target?.currentTime ?? 0;\n\t\treturn this.#remotePlayer.currentTime ?? 0;\n\t}\n\tset currentTime(value) {\n\t\tthis.#remotePlayer.currentTime = value;\n\t\tthis.#notifySeeking();\n\t\tthis.#remotePlayer.controller?.seek();\n\t}\n\tget muted() {\n\t\treturn this.#remotePlayer.isMuted;\n\t}\n\tset muted(value) {\n\t\tif (value !== this.#remotePlayer.isMuted) this.#remotePlayer.controller?.muteOrUnmute();\n\t}\n\tget volume() {\n\t\treturn this.#remotePlayer.volumeLevel ?? 1;\n\t}\n\tset volume(value) {\n\t\tthis.#remotePlayer.volumeLevel = +value;\n\t\tthis.#remotePlayer.controller?.setVolumeLevel();\n\t}\n\tget playbackRate() {\n\t\treturn currentMedia()?.playbackRate ?? 1;\n\t}\n\tset playbackRate(value) {\n\t\tsetPlaybackRate(value);\n\t}\n\tasync play() {\n\t\tif (!this.#remotePlayer.isMediaLoaded) {\n\t\t\tthis.#localPaused = false;\n\t\t\tawait this.load();\n\t\t\treturn;\n\t\t}\n\t\tif (this.paused) {\n\t\t\tthis.#remotePlayer.controller?.playOrPause();\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.target?.addEventListener(\"play\", () => resolve(), { once: true });\n\t\t\t});\n\t\t}\n\t}\n\tpause() {\n\t\tif (!this.paused) this.#remotePlayer.controller?.playOrPause();\n\t}\n\tonCastFrameworkAvailable() {\n\t\tif (!castFramework || this.#isInit) return;\n\t\tthis.#isInit = true;\n\t\tthis.#applyCastOptions();\n\t\tthis.onCastStateChanged();\n\t\tthis.#remotePlayer = new castFramework.RemotePlayer();\n\t\tnew castFramework.RemotePlayerController(this.#remotePlayer);\n\t\tthis.#remoteListeners = {\n\t\t\t[castFramework.RemotePlayerEventType.IS_CONNECTED_CHANGED]: (event) => {\n\t\t\t\tif (event?.value === true) this.#hooks.setState?.(\"connected\");\n\t\t\t\telse {\n\t\t\t\t\tthis.#disconnect();\n\t\t\t\t\tthis.#hooks.setState?.(\"disconnected\");\n\t\t\t\t}\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.DURATION_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"durationchange\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"volumechange\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.IS_MUTED_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"volumechange\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.CURRENT_TIME_CHANGED]: () => {\n\t\t\t\tif (!this.#isCasting || !this.#remotePlayer.isMediaLoaded) return;\n\t\t\t\tthis.#notifySeeked();\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"timeupdate\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.VIDEO_INFO_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"resize\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.IS_PAUSED_CHANGED]: () => {\n\t\t\t\tthis.target?.dispatchEvent(new Event(this.#isCasting && this.#remotePlayer.isPaused ? \"pause\" : \"play\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.PLAYER_STATE_CHANGED]: () => {\n\t\t\t\tconst PS = chrome.cast.media.PlayerState;\n\t\t\t\tconst state = this.#isCasting ? this.#remotePlayer.playerState : void 0;\n\t\t\t\tif (state !== PS.BUFFERING) this.#notifySeeked();\n\t\t\t\tif (state === PS.PAUSED) return;\n\t\t\t\tif (state === PS.IDLE) {\n\t\t\t\t\tconst finished = currentMedia()?.idleReason === chrome.cast.media.IdleReason.FINISHED;\n\t\t\t\t\tthis.target?.dispatchEvent(new Event(finished ? \"ended\" : \"emptied\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (state === PS.PLAYING) this.target?.dispatchEvent(new Event(\"playing\"));\n\t\t\t\telse if (state === PS.BUFFERING) this.target?.dispatchEvent(new Event(\"waiting\"));\n\t\t\t},\n\t\t\t[castFramework.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED]: async () => {\n\t\t\t\tif (!this.#isCasting || !this.#remotePlayer.isMediaLoaded) return;\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tthis.#onRemoteMediaLoaded();\n\t\t\t}\n\t\t};\n\t}\n\tonCastStateChanged() {\n\t\tif (!this.#isInit) return;\n\t\tconst CS = cast.framework.CastState;\n\t\tconst state = getCastContext().getCastState();\n\t\tif (this.#isCasting && state === CS.CONNECTING) this.#hooks.setState?.(\"connecting\");\n\t\tthis.#hooks.setAvailable?.(!!state && state !== CS.NO_DEVICES_AVAILABLE);\n\t}\n\tasync onSessionStateChanged() {\n\t\tif (!this.#isInit) return;\n\t\tconst { SESSION_RESUMED } = castFramework.SessionState;\n\t\tif (getCastContext().getSessionState() === SESSION_RESUMED) {\n\t\t\tif (this.#googleCast.src === currentMedia()?.media?.contentId) {\n\t\t\t\tthis.#isCasting = true;\n\t\t\t\tthis.#attachRemoteListeners();\n\t\t\t\ttry {\n\t\t\t\t\tawait getMediaStatus(new chrome.cast.media.GetStatusRequest());\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t}\n\t\t\t\tthis.#remoteListeners[castFramework.RemotePlayerEventType.IS_PAUSED_CHANGED]();\n\t\t\t\tthis.#remoteListeners[castFramework.RemotePlayerEventType.PLAYER_STATE_CHANGED]();\n\t\t\t\tthis.target?.dispatchEvent(new Event(\"ratechange\"));\n\t\t\t}\n\t\t}\n\t}\n\t#isCastApiAvailable() {\n\t\treturn Boolean(globalThis.chrome?.cast?.isAvailable);\n\t}\n\t#applyCastOptions() {\n\t\tconst { receiver } = this.#googleCast;\n\t\tsetCastOptions(receiver ? { receiverApplicationId: receiver } : {});\n\t}\n\t#attachRemoteListeners() {\n\t\tif (this.#listenersAttached) return;\n\t\tconst controller = this.#remotePlayer?.controller;\n\t\tif (!controller) return;\n\t\tfor (const [type, handler] of Object.entries(this.#remoteListeners)) controller.addEventListener(type, handler);\n\t\tthis.#listenersAttached = true;\n\t}\n\t#detachRemoteListeners() {\n\t\tif (!this.#listenersAttached) return;\n\t\tconst controller = this.#remotePlayer?.controller;\n\t\tif (controller) for (const [type, handler] of Object.entries(this.#remoteListeners)) controller.removeEventListener(type, handler);\n\t\tthis.#listenersAttached = false;\n\t}\n\t#disconnect() {\n\t\tif (!this.#isCasting) return;\n\t\tcurrentMedia()?.removeUpdateListener(this.#onMediaUpdate);\n\t\tthis.#detachRemoteListeners();\n\t\tthis.#seeking = false;\n\t\tthis.#playbackRate = 1;\n\t\tthis.#isCasting = false;\n\t\tif (this.target) this.target.muted = this.#remotePlayer.isMuted;\n\t\tconst saved = this.#remotePlayer.savedPlayerState;\n\t\tif (saved) {\n\t\t\tif (this.target) this.target.currentTime = saved.currentTime;\n\t\t\tif (saved.isPaused === false && this.target) this.target.play();\n\t\t}\n\t}\n\t#notifySeeking() {\n\t\tthis.#seeking = true;\n\t\tthis.target?.dispatchEvent(new Event(\"seeking\"));\n\t}\n\t#notifySeeked() {\n\t\tif (!this.#seeking) return;\n\t\tthis.#seeking = false;\n\t\tthis.target?.dispatchEvent(new Event(\"seeked\"));\n\t}\n\t#onRemoteMediaLoaded() {\n\t\tthis.#playbackRate = currentMedia()?.playbackRate ?? 1;\n\t\tcurrentMedia()?.addUpdateListener(this.#onMediaUpdate);\n\t\tthis.#updateRemoteTextTrack();\n\t}\n\t#checkPlaybackRate() {\n\t\tconst rate = currentMedia()?.playbackRate ?? 1;\n\t\tif (rate !== this.#playbackRate) {\n\t\t\tthis.#playbackRate = rate;\n\t\t\tthis.target?.dispatchEvent(new Event(\"ratechange\"));\n\t\t}\n\t}\n\tasync #updateRemoteTextTrack() {\n\t\tif (!this.#isCasting || !this.target) return;\n\t\tconst localSubs = [...this.target.textTracks].filter(isCaptionOrSubtitleTrack);\n\t\tconst matched = (this.#remotePlayer.mediaInfo?.tracks ?? []).filter(({ type }) => type === chrome.cast.media.TrackType.TEXT).flatMap(({ language, name, trackId }) => {\n\t\t\tconst local = localSubs.find((l) => l.language === language && l.label === name);\n\t\t\treturn local?.mode ? [{\n\t\t\t\tmode: local.mode,\n\t\t\t\ttrackId\n\t\t\t}] : [];\n\t\t});\n\t\tconst hidden = new Set(matched.filter((m) => m.mode !== \"showing\").map((m) => m.trackId));\n\t\tconst showing = matched.find((m) => m.mode === \"showing\")?.trackId;\n\t\tconst active = currentSession()?.getSessionObj().media[0]?.activeTrackIds ?? [];\n\t\tconst next = new Set(active.filter((id) => !hidden.has(id)));\n\t\tif (showing) next.add(showing);\n\t\tif (next.size === active.length && active.every((id) => next.has(id))) return;\n\t\ttry {\n\t\t\tawait editTracksInfo(new chrome.cast.media.EditTracksInfoRequest([...next]));\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n//#endregion\nexport { GoogleCastProvider };\n\n//# sourceMappingURL=google-cast-provider.js.map","import { requiresCastFramework } from \"./utils.js\";\nimport { GoogleCastProvider } from \"./google-cast-provider.js\";\n//#region src/dom/google-cast/media.ts\nconst googleCastDefaultProps = {\n\tsrc: void 0,\n\tcontentType: void 0,\n\tstreamType: void 0,\n\treceiver: void 0,\n\tcustomData: void 0\n};\nvar GoogleCast = class {\n\t#src;\n\t#contentType;\n\t#streamType;\n\t#receiver;\n\t#customData;\n\t#media = null;\n\t#provider = null;\n\t#override = null;\n\tconstructor(props = {}) {\n\t\tObject.assign(this, props);\n\t}\n\tsetMedia(host) {\n\t\tif (!requiresCastFramework()) return;\n\t\tthis.#media = host;\n\t\tif (!this.#provider) {\n\t\t\tthis.#provider = new GoogleCastProvider(this);\n\t\t\tthis.#provider.remote.addEventListener(\"connect\", this.#onStateChange);\n\t\t\tthis.#provider.remote.addEventListener(\"disconnect\", this.#onStateChange);\n\t\t\tthis.#override = this.#createRemoteOverride();\n\t\t}\n\t}\n\tattach(target) {\n\t\tthis.#provider?.attach(target);\n\t}\n\tdetach() {\n\t\tthis.#provider?.detach();\n\t}\n\tdestroy() {\n\t\tthis.#provider?.destroy();\n\t\tthis.#provider = null;\n\t\tthis.#media = null;\n\t}\n\t#onStateChange = () => {\n\t\tif (!this.#provider) return;\n\t\tif (this.#provider.remote.state === \"connected\") this.#override = this.#provider;\n\t\telse this.#override = this.#createRemoteOverride();\n\t};\n\t#createRemoteOverride() {\n\t\tconst provider = this.#provider;\n\t\treturn { get remote() {\n\t\t\treturn provider.remote;\n\t\t} };\n\t}\n\tget targetOverride() {\n\t\treturn this.#override;\n\t}\n\t/** Source URL loaded on the Cast receiver. Falls back to a `<source>` child, `src`, then `currentSrc`. */\n\tget src() {\n\t\treturn this.#src ?? this.#media?.querySelector(\"source\")?.src ?? this.#media?.src ?? this.#media?.currentSrc ?? \"\";\n\t}\n\tset src(value) {\n\t\tif (this.#src === value) return;\n\t\tthis.#src = value;\n\t\tthis.#load();\n\t}\n\t/** MIME type of the Cast source. When unset, the receiver infers it from the URL. */\n\tget contentType() {\n\t\treturn this.#contentType;\n\t}\n\tset contentType(value) {\n\t\tif (this.#contentType === value) return;\n\t\tthis.#contentType = value;\n\t\tthis.#load();\n\t}\n\t/** Stream type used on the Cast receiver. Falls back to the host's `streamType` if it exposes one. */\n\tget streamType() {\n\t\treturn this.#streamType ?? this.#media?.streamType;\n\t}\n\tset streamType(value) {\n\t\tif (this.#streamType === value) return;\n\t\tthis.#streamType = value;\n\t\tthis.#load();\n\t}\n\t/** Cast receiver application ID. Read on session start; falls back to the layer's default. */\n\tget receiver() {\n\t\treturn this.#receiver;\n\t}\n\tset receiver(value) {\n\t\tif (this.#receiver === value) return;\n\t\tthis.#receiver = value;\n\t\tthis.#load();\n\t}\n\t/** Custom data sent to the Cast receiver with the load request. */\n\tget customData() {\n\t\treturn this.#customData;\n\t}\n\tset customData(value) {\n\t\tif (this.#customData === value) return;\n\t\tthis.#customData = value;\n\t\tthis.#load();\n\t}\n\t#load() {\n\t\tif (this.#media?.remote.state === \"connected\") this.#media.load();\n\t}\n};\n//#endregion\nexport { GoogleCast, googleCastDefaultProps };\n\n//# sourceMappingURL=media.js.map","import type { PropertyDeclarationMap } from '@videojs/element';\nimport { GoogleCast, type GoogleCastProps } from '@videojs/media/dom/google-cast';\n\nimport { MediaComponentElement } from '../media-component-element';\n\n/**\n * Adds Google Cast support to the surrounding player's media.\n *\n * Renders nothing — place it inside the player as a sibling of the media\n * element and it registers a {@link GoogleCast} media component with the\n * active media host.\n *\n * @example\n * ```html\n * <video-player>\n * <hlsjs-video src=\"https://example.com/stream.m3u8\"></hlsjs-video>\n * <google-cast receiver=\"YOUR_APP_ID\"></google-cast>\n * </video-player>\n * ```\n */\nexport class GoogleCastElement extends MediaComponentElement<GoogleCast> {\n static readonly tagName = 'google-cast';\n\n static override properties = {\n src: { type: String },\n contentType: { type: String, attribute: 'content-type' },\n streamType: { type: String, attribute: 'stream-type' },\n receiver: { type: String },\n // `customData` takes an object, so it's a property-only prop.\n } satisfies PropertyDeclarationMap<Exclude<keyof GoogleCastProps, 'customData'>>;\n\n protected createComponent(): GoogleCast {\n return new GoogleCast();\n }\n\n /** Source URL loaded on the Cast receiver. Falls back to the media's `src` / `currentSrc`. */\n get src(): string {\n return this.component.src ?? '';\n }\n\n set src(value: string | null | undefined) {\n this.component.src = value ?? undefined;\n }\n\n /** MIME type of the Cast source. When unset, the receiver infers it from the URL. */\n get contentType(): string | undefined {\n return this.component.contentType;\n }\n\n set contentType(value: string | null | undefined) {\n this.component.contentType = value ?? undefined;\n }\n\n /** Stream type used on the Cast receiver. Falls back to the media's `streamType`. */\n get streamType(): GoogleCastProps['streamType'] {\n return this.component.streamType;\n }\n\n set streamType(value: GoogleCastProps['streamType'] | null) {\n this.component.streamType = value ?? undefined;\n }\n\n /** Cast receiver application ID. Defaults to Google's default media receiver. */\n get receiver(): string | undefined {\n return this.component.receiver;\n }\n\n set receiver(value: string | null | undefined) {\n this.component.receiver = value ?? undefined;\n }\n\n /** Custom data sent to the Cast receiver with the load request. */\n get customData(): GoogleCastProps['customData'] {\n return this.component.customData;\n }\n\n set customData(value: GoogleCastProps['customData']) {\n this.component.customData = value;\n }\n}\n","import { GoogleCastElement } from '../../media/google-cast';\nimport { safeDefine } from '../safe-define';\n\nexport { GoogleCastElement };\n\nsafeDefine(GoogleCastElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [GoogleCastElement.tagName]: GoogleCastElement;\n }\n}\n"],"mappings":"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"}
|