@videojs/html 10.0.0-beta.27 → 10.0.0-beta.28
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/audio-headless.dev.js +1 -1
- package/cdn/audio-headless.js +1 -1
- package/cdn/audio-minimal-ui.dev.js +1 -1
- package/cdn/audio-minimal-ui.js +1 -1
- package/cdn/audio-minimal.dev.js +4 -4
- 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 +1 -1
- package/cdn/audio-ui.js +1 -1
- package/cdn/audio.dev.js +4 -4
- 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-BEO1d3ZM.js +8 -0
- package/cdn/compounds-BEO1d3ZM.js.map +1 -0
- package/cdn/{compounds-CCvdpvge.js → compounds-nk9RJtBK.js} +8 -15
- package/cdn/compounds-nk9RJtBK.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-BHFyOnWi.js → create-player-DK9WOywd.js} +19 -379
- package/cdn/create-player-DK9WOywd.js.map +1 -0
- package/cdn/create-player-hSdQMP5p.js +2 -0
- package/cdn/create-player-hSdQMP5p.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/{gesture-element-CG-Sx_5t.js → gesture-element-6Ld1YwIL.js} +3 -3
- package/cdn/{gesture-element-CG-Sx_5t.js.map → gesture-element-6Ld1YwIL.js.map} +1 -1
- package/cdn/gesture-element-BC48ucj9.js +2 -0
- package/cdn/{gesture-element-BNfMI8eh.js.map → gesture-element-BC48ucj9.js.map} +1 -1
- package/cdn/{hls-js-g1zdcyvE.js → hls-js-BEuVm0u9.js} +3 -2
- package/cdn/{hls-js-g1zdcyvE.js.map → hls-js-BEuVm0u9.js.map} +1 -1
- package/cdn/hls-js-C4P_b2tT.js +2 -0
- package/cdn/{hls-js-6lW7L4th.js.map → hls-js-C4P_b2tT.js.map} +1 -1
- package/cdn/hls-js-CATW7NBm.js +2 -0
- package/cdn/{hls-js-DCQzjzB5.js.map → hls-js-CATW7NBm.js.map} +1 -1
- package/cdn/{hls-js-Cwj8UBx9.js → hls-js-WCNy9MVh.js} +3 -2
- package/cdn/{hls-js-Cwj8UBx9.js.map → hls-js-WCNy9MVh.js.map} +1 -1
- package/cdn/i18n-CE4KxKuj.js +2 -0
- package/cdn/i18n-CE4KxKuj.js.map +1 -0
- package/cdn/{i18n-Mtlmj1AA.js → i18n-Ch4t6EjV.js} +2 -2
- package/cdn/{i18n-Mtlmj1AA.js.map → i18n-Ch4t6EjV.js.map} +1 -1
- package/cdn/i18n-Dc7WM2xd.js +2 -0
- package/cdn/{i18n-DfKGl5Rh.js.map → i18n-Dc7WM2xd.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-B_y-ZJBy.js → live-button-element-Bae44kBN.js} +5 -4
- package/cdn/live-button-element-Bae44kBN.js.map +1 -0
- package/cdn/live-button-element-DaHgnYdw.js +2 -0
- package/cdn/{live-button-element-CWfkQUoy.js.map → live-button-element-DaHgnYdw.js.map} +1 -1
- package/cdn/live-video-minimal.dev.js +8 -8
- 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 +9 -9
- 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 +1 -0
- 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 +1 -0
- 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 +2 -1
- 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 +2989 -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-Cp3acYc8.js → media-BavrGKqa.js} +274 -5
- package/cdn/media-BavrGKqa.js.map +1 -0
- package/cdn/media-Bmablv4g.js +2 -0
- package/cdn/media-Bmablv4g.js.map +1 -0
- package/cdn/{media-B_gQXwri.js → media-COIe3uI5.js} +12 -3
- package/cdn/media-COIe3uI5.js.map +1 -0
- package/cdn/{media-CbWsJJhU.js → media-CPVSKLdk.js} +2 -2
- package/cdn/{media-CbWsJJhU.js.map → media-CPVSKLdk.js.map} +1 -1
- package/cdn/media-CanBm0Jh.js +41 -0
- package/cdn/media-CanBm0Jh.js.map +1 -0
- package/cdn/{media-Dq4zmIJa2.js → media-Dq4zmIJa.js} +1 -1
- package/cdn/media-Dq4zmIJa.js.map +1 -0
- package/cdn/{media-DRo3n8tM.js → media-oa3nyL2o.js} +3 -3
- package/cdn/{media-DRo3n8tM.js.map → media-oa3nyL2o.js.map} +1 -1
- 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-suYcjCG22.js → media-suYcjCG2.js} +1 -1
- package/cdn/media-suYcjCG2.js.map +1 -0
- package/cdn/minimal-ui-8iRZf_72.js +2 -0
- package/cdn/{minimal-ui-AFk6Ut5f.js.map → minimal-ui-8iRZf_72.js.map} +1 -1
- package/cdn/{minimal-ui--JsmpU2q.js → minimal-ui-BpHxIo4z.js} +5 -5
- package/cdn/{minimal-ui--JsmpU2q.js.map → minimal-ui-BpHxIo4z.js.map} +1 -1
- package/cdn/{minimal-ui-Bxcpf5Mb.js → minimal-ui-CRKvUmB8.js} +9 -9
- package/cdn/{minimal-ui-Bxcpf5Mb.js.map → minimal-ui-CRKvUmB8.js.map} +1 -1
- package/cdn/minimal-ui-Et2Wcn7r.js +2 -0
- package/cdn/{minimal-ui-BVKu9LWj.js.map → minimal-ui-Et2Wcn7r.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-D4fdOLLk.js → player-B2oraRyD.js} +3 -2
- package/cdn/{player-D4fdOLLk.js.map → player-B2oraRyD.js.map} +1 -1
- package/cdn/player-BRQLp5bX.js +2 -0
- package/cdn/{player-srq1RGTj.js.map → player-BRQLp5bX.js.map} +1 -1
- package/cdn/player-BloX4l6F.js +2 -0
- package/cdn/{player-iIewo8Y9.js.map → player-BloX4l6F.js.map} +1 -1
- package/cdn/{player-B0qnepD5.js → player-CKTAtwit.js} +3 -2
- package/cdn/{player-B0qnepD5.js.map → player-CKTAtwit.js.map} +1 -1
- package/cdn/{player-C4ix6TQq.js → player-DM9rUXg-.js} +3 -2
- package/cdn/{player-C4ix6TQq.js.map → player-DM9rUXg-.js.map} +1 -1
- package/cdn/player-rCFqzWrA.js +2 -0
- package/cdn/{player-B0ccW5-n.js.map → player-rCFqzWrA.js.map} +1 -1
- package/cdn/{poster-element-BP1Ypgbf.js → poster-element-BGr1VQJB.js} +16 -4
- package/cdn/poster-element-BGr1VQJB.js.map +1 -0
- package/cdn/poster-element-DBmgOyep.js +2 -0
- package/cdn/poster-element-DBmgOyep.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-FlgBVoGM.js +2 -0
- package/cdn/seek-button-element-FlgBVoGM.js.map +1 -0
- package/cdn/{seek-button-element-TErrbilI.js → seek-button-element-XMTLIxZj.js} +6 -5
- package/cdn/seek-button-element-XMTLIxZj.js.map +1 -0
- package/cdn/{skin-element-wPSb4AAs.js → skin-element-DL-Kqa5f.js} +2 -2
- package/cdn/{skin-element-wPSb4AAs.js.map → skin-element-DL-Kqa5f.js.map} +1 -1
- package/cdn/{skin-element-1_MG2zgS.js → skin-element-DNytI-uu.js} +2 -2
- package/cdn/{skin-element-1_MG2zgS.js.map → skin-element-DNytI-uu.js.map} +1 -1
- package/cdn/{text-element-DTB9_2HX.js → text-element-D88ArbZz.js} +3 -3
- package/cdn/{text-element-DTB9_2HX.js.map → text-element-D88ArbZz.js.map} +1 -1
- package/cdn/text-element-DeWBNKXb.js +2 -0
- package/cdn/{text-element-Bsyglab8.js.map → text-element-DeWBNKXb.js.map} +1 -1
- package/cdn/{time-slider-chapters-element-DPgaLdBt.js → time-slider-chapters-element-DJ0abZXI.js} +5 -4
- package/cdn/time-slider-chapters-element-DJ0abZXI.js.map +1 -0
- package/cdn/time-slider-chapters-element-DW8YyJn8.js +2 -0
- package/cdn/{time-slider-chapters-element-MdlcovBu.js.map → time-slider-chapters-element-DW8YyJn8.js.map} +1 -1
- 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-BU3_2gDQ.js} +8 -8
- package/cdn/{ui-D0AokGxw.js.map → ui-BU3_2gDQ.js.map} +1 -1
- package/cdn/{ui-p36Szn71.js → ui-BsaWWE4y.js} +10 -10
- package/cdn/{ui-p36Szn71.js.map → ui-BsaWWE4y.js.map} +1 -1
- package/cdn/ui-C0isALTQ.js +2 -0
- package/cdn/{ui-CecDxhTX.js.map → ui-C0isALTQ.js.map} +1 -1
- package/cdn/ui-DVpkE1MN.js +2 -0
- package/cdn/{ui-ChWM6Xz2.js.map → ui-DVpkE1MN.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 +1 -1
- package/cdn/video-minimal-ui.js +1 -1
- package/cdn/video-minimal.dev.js +4 -4
- 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 +1 -1
- package/cdn/video-ui.js +1 -1
- package/cdn/video.dev.js +5 -5
- package/cdn/video.dev.js.map +1 -1
- package/cdn/video.js +1 -1
- package/cdn/video.js.map +1 -1
- 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 +16 -19
- package/dist/default/define/audio/skin.css +27 -30
- package/dist/default/define/live-audio/minimal-skin.css +16 -19
- package/dist/default/define/live-audio/skin.css +27 -30
- package/dist/default/define/live-video/minimal-skin.css +20 -19
- package/dist/default/define/live-video/skin.css +31 -30
- package/dist/default/define/video/minimal-skin.css +20 -19
- package/dist/default/define/video/skin.css +31 -30
- 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/slider.js +6 -6
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +4 -4
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.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/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 +16 -19
- package/dist/dev/define/audio/skin.css +27 -30
- package/dist/dev/define/live-audio/minimal-skin.css +16 -19
- package/dist/dev/define/live-audio/skin.css +27 -30
- package/dist/dev/define/live-video/minimal-skin.css +20 -19
- package/dist/dev/define/live-video/skin.css +31 -30
- package/dist/dev/define/video/minimal-skin.css +20 -19
- package/dist/dev/define/video/skin.css +31 -30
- 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/skins/dist/default/default/tailwind/components/slider.js +6 -6
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js +1 -1
- 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/slider.js +4 -4
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.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/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 +31 -30
- package/docs/how-to/build-your-own-component.md +1 -1
- package/docs/how-to/customize-skins.md +94 -98
- 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/mute-button.md +34 -0
- package/docs/reference/volume-slider.md +1 -1
- package/package.json +10 -9
- 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/gesture-element-BNfMI8eh.js +0 -2
- 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-B_gQXwri.js.map +0 -1
- package/cdn/media-CPWNSZFX.js +0 -41
- package/cdn/media-CPWNSZFX.js.map +0 -1
- package/cdn/media-Cp3acYc8.js.map +0 -1
- package/cdn/media-Dq4zmIJa2.js.map +0 -1
- package/cdn/media-suYcjCG22.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/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/translate-text-BPMWpzFm.js +0 -2
- package/cdn/translate-text-BPMWpzFm.js.map +0 -1
- package/cdn/translate-text-DP0CzUCC.js.map +0 -1
- package/cdn/ui-CecDxhTX.js +0 -2
- package/cdn/ui-ChWM6Xz2.js +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twitch-video.dev.js","names":["#messages","#target","#beginLoad","#createPlayer","#attachId","#playerReady","#pendingLoad","#rebuilding","#embedSrc","#loadComplete","#resetState","#src","#source","#readyState","#sendCommand","#error","#kind","#snapshotProps","#playback","#paused","#seeking","#currentTime","#afterLoad","#duration","#volume","#muted","#playbackRate","#autoplay","#defaultMuted","#loop","#controls","#playsInline","#preload","#poster","#progress","#isFullscreen","#onMessage","#loaded","#isStale","#onEmbedEvent","#onUpdateState","#onLoaded"],"sources":["../../../media/dist/dev/dom/twitch/props.js","../../../media/dist/dev/dom/twitch/player-api.js","../../../media/dist/dev/dom/twitch/source.js","../../../media/dist/dev/dom/twitch/media.js","../../src/media/twitch-video/media.ts","../../src/define/media/twitch-video.ts"],"sourcesContent":["//#region src/dom/twitch/props.ts\nconst twitchMediaDefaultProps = {\n\tsrc: \"\",\n\tautoplay: false,\n\tdefaultMuted: false,\n\tmuted: false,\n\tloop: false,\n\tcontrols: false,\n\tplaysInline: true,\n\tpreload: \"metadata\",\n\tposter: \"\",\n\tsource: null\n};\n//#endregion\nexport { twitchMediaDefaultProps };\n\n//# sourceMappingURL=props.js.map","import { isObject, isString } from \"@videojs/utils/predicate\";\n//#region src/dom/twitch/player-api.ts\n/** Embed origin: where the embed is served from and where commands are posted. */\nconst TWITCH_PLAYER_ORIGIN = \"https://player.twitch.tv\";\n/** Namespace on the commands the host posts, and on the state snapshots that come back. */\nconst PLAYER_PROXY_NAMESPACE = \"twitch-embed-player-proxy\";\n/** Namespace on the lifecycle events the embed emits. */\nconst EMBED_NAMESPACE = \"twitch-embed\";\nconst PLAYBACK_BUFFERING = \"Buffering\";\nconst PLAYBACK_PLAYING = \"Playing\";\nconst PLAYBACK_ENDED = \"Ended\";\n/** Narrow a `message` payload to something the embed sent; any page can post here, so the namespace is the filter. */\nfunction isTwitchMessage(data) {\n\tif (!isObject(data)) return false;\n\tconst { namespace, eventName } = data;\n\treturn isString(eventName) && (namespace === \"twitch-embed\" || namespace === \"twitch-embed-player-proxy\");\n}\n//#endregion\nexport { EMBED_NAMESPACE, PLAYBACK_BUFFERING, PLAYBACK_ENDED, PLAYBACK_PLAYING, PLAYER_PROXY_NAMESPACE, TWITCH_PLAYER_ORIGIN, isTwitchMessage };\n\n//# sourceMappingURL=player-api.js.map","import { TWITCH_PLAYER_ORIGIN } from \"./player-api.js\";\nimport { twitchMediaDefaultProps } from \"./props.js\";\nimport { isNil, isString } from \"@videojs/utils/predicate\";\n//#region src/dom/twitch/source.ts\n/** Extract a Twitch VOD id from any recognized video URL. */\nfunction parseTwitchVideoId(src) {\n\treturn parseTwitchSource(src)?.id ?? null;\n}\n/**\n* Parse a Twitch source string. Recognizes VOD URLs (`twitch.tv/videos/<id>`\n* and `twitch.tv/?video=<id>`) and channel URLs (`twitch.tv/<channel>`), with\n* or without the `www.` and `go.` hosts, and with or without a trailing slash.\n*/\nfunction parseTwitchSource(src) {\n\tif (!src) return null;\n\tconst videoId = MATCH_VIDEO.exec(src)?.[1];\n\tif (videoId) return {\n\t\tkind: \"video\",\n\t\tid: videoId,\n\t\tchannel: null\n\t};\n\tconst channel = MATCH_CHANNEL.exec(src)?.[1];\n\tif (channel) return {\n\t\tkind: \"channel\",\n\t\tid: null,\n\t\tchannel\n\t};\n\treturn null;\n}\n/** Build the iframe `src` URL for an initial Twitch embed from the given props. */\nfunction buildTwitchIframeSrc(src, props = {}) {\n\tconst parsed = parseTwitchSource(src);\n\tif (!parsed) return \"\";\n\tconst { parent, referrerPolicy: _referrerPolicy, ...twitch } = props.source?.engine?.twitch ?? {};\n\tconst params = {\n\t\t...parsed.kind === \"video\" ? { video: `v${parsed.id}` } : { channel: parsed.channel },\n\t\tcontrols: props.controls === true ? null : false,\n\t\tautoplay: props.autoplay === true ? null : false,\n\t\tmuted: props.defaultMuted ?? twitchMediaDefaultProps.defaultMuted,\n\t\tpreload: props.preload ?? twitchMediaDefaultProps.preload,\n\t\t...twitch\n\t};\n\tconst query = new URLSearchParams();\n\tfor (const key in params) {\n\t\tconst value = params[key];\n\t\tif (isNil(value) || value === \"\") continue;\n\t\tquery.set(key, String(value));\n\t}\n\tfor (const host of resolveParentHosts(parent)) query.append(\"parent\", host);\n\tif (!query.has(\"parent\")) console.warn(\"[vjs-twitch] The Twitch embed refuses to play without a `parent` hostname. Set `engine.twitch.parent` to the host page.\");\n\treturn `${TWITCH_PLAYER_ORIGIN}/?${query.toString()}`;\n}\n/** The configured parent hostnames plus the page's own, deduplicated. */\nfunction resolveParentHosts(parent) {\n\tconst hosts = [...isString(parent) ? [parent] : parent ?? [], globalThis.location?.hostname];\n\treturn [...new Set(hosts.filter((host) => isString(host) && host !== \"\"))];\n}\nconst MATCH_VIDEO = /(?:^|\\/\\/)(?:www\\.|go\\.)?twitch\\.tv\\/(?:videos?\\/|\\?video=)(\\d+)\\/?(?:$|\\?)/;\nconst MATCH_CHANNEL = /(?:^|\\/\\/)(?:www\\.|go\\.)?twitch\\.tv\\/([a-zA-Z0-9_]+)\\/?(?:$|\\?)/;\n//#endregion\nexport { buildTwitchIframeSrc, parseTwitchSource, parseTwitchVideoId };\n\n//# sourceMappingURL=source.js.map","import { EMPTY_TEXT_TRACKS, EMPTY_TIME_RANGES } from \"../../core/constants.js\";\nimport { MediaError } from \"../../core/media-error.js\";\nimport { createTimeRange } from \"../utils/time-ranges.js\";\nimport { MediaPlayedRangesMixin } from \"../media-played-ranges/media-played-ranges.js\";\nimport { PLAYBACK_ENDED, PLAYER_PROXY_NAMESPACE, TWITCH_PLAYER_ORIGIN, isTwitchMessage } from \"./player-api.js\";\nimport { twitchMediaDefaultProps } from \"./props.js\";\nimport { buildTwitchIframeSrc, parseTwitchSource } from \"./source.js\";\nimport { isNumber, isUndefined } from \"@videojs/utils/predicate\";\nimport { deepEqual } from \"@videojs/utils/object\";\nimport { createPublicPromise } from \"@videojs/utils/function\";\n//#region src/dom/twitch/media.ts\nconst TwitchMediaBase = MediaPlayedRangesMixin(EventTarget);\n/**\n* @fires sourcechange - Fired when `source` changes, either directly or by resolving a new `src`. Read `source` for the new value.\n*/\nvar TwitchMedia = class extends TwitchMediaBase {\n\t#target = null;\n\t#messages = null;\n\t#playerReady = false;\n\t#pendingLoad = false;\n\t#rebuilding = false;\n\t#loadComplete = createPublicPromise();\n\t#attachId = 0;\n\t#embedSrc = \"\";\n\t#src = twitchMediaDefaultProps.src;\n\t#autoplay = twitchMediaDefaultProps.autoplay;\n\t#defaultMuted = twitchMediaDefaultProps.defaultMuted;\n\t#loop = twitchMediaDefaultProps.loop;\n\t#controls = twitchMediaDefaultProps.controls;\n\t#playsInline = twitchMediaDefaultProps.playsInline;\n\t#preload = twitchMediaDefaultProps.preload;\n\t#poster = twitchMediaDefaultProps.poster;\n\t#source = twitchMediaDefaultProps.source;\n\t#kind = null;\n\t#playback = null;\n\t#paused = true;\n\t#seeking = false;\n\t#loaded = false;\n\t#currentTime = 0;\n\t#duration = NaN;\n\t#volume = 1;\n\t#muted = false;\n\t#playbackRate = 1;\n\t#progress = 0;\n\t#readyState = READY_STATE_HAVE_NOTHING;\n\t#error = null;\n\t#isFullscreen = false;\n\tstatic PLAYER_SOFTWARE_NAME = \"twitch-video\";\n\t/** The embed's own window, which every command is posted to. Null until an embed is bound and in a document. */\n\tget engine() {\n\t\treturn this.#messages ? this.#target?.contentWindow ?? null : null;\n\t}\n\tget target() {\n\t\treturn this.#target;\n\t}\n\t/** Bind the iframe hosting the embed. The embed follows once a URL resolves; `load()` retries if none does yet. */\n\tattach(target) {\n\t\tif (!target || this.#target === target) return;\n\t\tif (this.#target) this.detach();\n\t\tthis.#target = target;\n\t\tthis.#beginLoad();\n\t\tthis.#createPlayer();\n\t}\n\tdetach() {\n\t\tif (!this.#target) return;\n\t\tthis.#attachId++;\n\t\tthis.#messages?.abort();\n\t\tthis.#messages = null;\n\t\tthis.#playerReady = false;\n\t\tthis.#pendingLoad = false;\n\t\tthis.#rebuilding = false;\n\t\tthis.#embedSrc = \"\";\n\t\tthis.#target = null;\n\t\tthis.#loadComplete.resolve();\n\t\tthis.#resetState();\n\t}\n\tdestroy() {\n\t\tthis.detach();\n\t\tsuper.destroy();\n\t}\n\tget src() {\n\t\treturn this.#src;\n\t}\n\t/** Twitch VOD or channel URL. Setting it re-derives `source`, carrying its embed parameters over. */\n\tset src(value) {\n\t\tconst { engine } = this.#source ?? {};\n\t\tconst next = {\n\t\t\t...engine && { engine },\n\t\t\t...value && { src: value }\n\t\t};\n\t\tthis.source = Object.keys(next).length > 0 ? next : null;\n\t}\n\tget currentSrc() {\n\t\treturn this.#target?.getAttribute(\"src\") ?? \"\";\n\t}\n\tget readyState() {\n\t\treturn this.#readyState;\n\t}\n\t/** Reload the current source, swapping it into the running embed where possible. */\n\tasync load() {\n\t\tif (!this.#messages || !this.#playerReady) {\n\t\t\tthis.#pendingLoad = !!this.#target;\n\t\t\tif (this.#target && !this.#messages) {\n\t\t\t\tconst load = this.#beginLoad();\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tif (load !== this.#loadComplete) return;\n\t\t\t\tthis.#pendingLoad = false;\n\t\t\t\tthis.#createPlayer();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst load = this.#beginLoad();\n\t\tthis.#resetState();\n\t\tthis.dispatchEvent(new Event(\"emptied\"));\n\t\tif (!this.#src) {\n\t\t\tload.resolve();\n\t\t\tthis.#sendCommand(2);\n\t\t\treturn;\n\t\t}\n\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\tconst parsed = parseTwitchSource(this.#src);\n\t\tif (!parsed) {\n\t\t\tthis.#error = new MediaError(`Unrecognized Twitch source: ${this.#src}`, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);\n\t\t\tthis.dispatchEvent(new Event(\"error\"));\n\t\t\tload.resolve();\n\t\t\treturn;\n\t\t}\n\t\tthis.#kind = parsed.kind;\n\t\tconst nextEmbedSrc = buildTwitchIframeSrc(this.#src, this.#snapshotProps());\n\t\tif (isContentOnlyChange(this.#embedSrc, nextEmbedSrc)) {\n\t\t\tthis.#embedSrc = nextEmbedSrc;\n\t\t\tif (parsed.kind === \"video\") this.#sendCommand(9, `v${parsed.id}`);\n\t\t\telse this.#sendCommand(5, parsed.channel);\n\t\t\treturn;\n\t\t}\n\t\tthis.#embedSrc = nextEmbedSrc;\n\t\tthis.#playerReady = false;\n\t\tthis.#rebuilding = true;\n\t\tif (this.#target) this.#target.src = nextEmbedSrc;\n\t}\n\t#beginLoad() {\n\t\tthis.#loadComplete.resolve();\n\t\tthis.#loadComplete = createPublicPromise();\n\t\treturn this.#loadComplete;\n\t}\n\tget paused() {\n\t\tif (!this.#playback) return this.#paused;\n\t\treturn this.#playback !== \"Playing\" && this.#playback !== \"Buffering\";\n\t}\n\tget ended() {\n\t\tif (this.#kind === \"channel\") return false;\n\t\treturn this.#playback === PLAYBACK_ENDED;\n\t}\n\tget seeking() {\n\t\treturn this.#seeking;\n\t}\n\tasync play() {\n\t\tawait this.#loadComplete;\n\t\tif (!this.#src) return;\n\t\tthis.#paused = false;\n\t\tthis.#sendCommand(3);\n\t}\n\tpause() {\n\t\tthis.#paused = true;\n\t\tthis.#sendCommand(2);\n\t}\n\tget currentTime() {\n\t\treturn this.#currentTime;\n\t}\n\tset currentTime(value) {\n\t\tif (this.#currentTime === value) return;\n\t\tthis.#currentTime = value;\n\t\tthis.#afterLoad(() => this.#sendCommand(4, value));\n\t}\n\tget duration() {\n\t\treturn this.#duration;\n\t}\n\tget volume() {\n\t\treturn this.#volume;\n\t}\n\tset volume(value) {\n\t\tif (this.#volume === value) return;\n\t\tthis.#volume = value;\n\t\tthis.dispatchEvent(new Event(\"volumechange\"));\n\t\tthis.#afterLoad(() => this.#sendCommand(11, value));\n\t}\n\tget muted() {\n\t\treturn this.#muted;\n\t}\n\tset muted(value) {\n\t\tif (this.#muted === value) return;\n\t\tthis.#muted = value;\n\t\tthis.dispatchEvent(new Event(\"volumechange\"));\n\t\tthis.#afterLoad(() => this.#sendCommand(10, value));\n\t}\n\tget playbackRate() {\n\t\treturn this.#playbackRate;\n\t}\n\tset playbackRate(value) {\n\t\tthis.#playbackRate = value;\n\t}\n\tget autoplay() {\n\t\treturn this.#autoplay;\n\t}\n\tset autoplay(value) {\n\t\tthis.#autoplay = value;\n\t}\n\tget defaultMuted() {\n\t\treturn this.#defaultMuted;\n\t}\n\tset defaultMuted(value) {\n\t\tthis.#defaultMuted = value;\n\t}\n\tget loop() {\n\t\treturn this.#loop;\n\t}\n\tset loop(value) {\n\t\tthis.#loop = value;\n\t}\n\tget controls() {\n\t\treturn this.#controls;\n\t}\n\tset controls(value) {\n\t\tthis.#controls = value;\n\t}\n\tget playsInline() {\n\t\treturn this.#playsInline;\n\t}\n\tset playsInline(value) {\n\t\tthis.#playsInline = value;\n\t}\n\tget preload() {\n\t\treturn this.#preload;\n\t}\n\tset preload(value) {\n\t\tthis.#preload = value;\n\t}\n\tget poster() {\n\t\treturn this.#poster;\n\t}\n\tset poster(value) {\n\t\tthis.#poster = value;\n\t}\n\t/** Twitch VOD or channel URL in `src`, plus embed parameters under `engine.twitch`. Replacing it re-derives `src`. */\n\tget source() {\n\t\treturn this.#source;\n\t}\n\tset source(value) {\n\t\tconst source = value ?? null;\n\t\tif (source === this.#source) return;\n\t\tconst src = source?.src ?? \"\";\n\t\tconst srcChanged = this.#src !== src;\n\t\tconst engineChanged = !deepEqual(this.#source?.engine?.twitch ?? null, source?.engine?.twitch ?? null);\n\t\tthis.#source = source;\n\t\tthis.#src = src;\n\t\tif (srcChanged || engineChanged) this.load();\n\t\tthis.dispatchEvent(new Event(\"sourcechange\"));\n\t}\n\tget buffered() {\n\t\treturn this.#progress > 0 ? createTimeRange(this.#currentTime, this.#currentTime + this.#progress) : EMPTY_TIME_RANGES;\n\t}\n\tget seekable() {\n\t\treturn this.#duration > 0 && Number.isFinite(this.#duration) ? createTimeRange(0, this.#duration) : EMPTY_TIME_RANGES;\n\t}\n\tget error() {\n\t\treturn this.#error;\n\t}\n\tget textTracks() {\n\t\treturn EMPTY_TEXT_TRACKS;\n\t}\n\tget isFullscreen() {\n\t\treturn this.#isFullscreen;\n\t}\n\tasync requestFullscreen() {\n\t\tif (!this.#target?.requestFullscreen) return;\n\t\tawait this.#target.requestFullscreen();\n\t\tthis.#isFullscreen = true;\n\t}\n\tasync exitFullscreen() {\n\t\tconst doc = globalThis.document;\n\t\tif (doc?.fullscreenElement && doc.fullscreenElement === this.#target) await doc.exitFullscreen();\n\t\tthis.#isFullscreen = false;\n\t}\n\t#createPlayer() {\n\t\tconst target = this.#target;\n\t\tif (!target || this.#messages) return false;\n\t\tconst existingSrc = target.getAttribute(\"src\");\n\t\tif (!existingSrc) {\n\t\t\tconst initialSrc = buildTwitchIframeSrc(this.#src, this.#snapshotProps());\n\t\t\tif (!initialSrc) {\n\t\t\t\tthis.#loadComplete.resolve();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ttarget.src = initialSrc;\n\t\t} else {\n\t\t\tconst withParent = withPageParent(existingSrc);\n\t\t\tif (withParent !== existingSrc) target.src = withParent;\n\t\t}\n\t\tthis.#kind = parseTwitchSource(this.#src)?.kind ?? null;\n\t\tthis.#embedSrc = target.getAttribute(\"src\") ?? \"\";\n\t\tconst attachId = this.#attachId;\n\t\tthis.#messages = new AbortController();\n\t\tglobalThis.addEventListener(\"message\", (event) => void this.#onMessage(event, attachId), { signal: this.#messages.signal });\n\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\treturn true;\n\t}\n\t#isStale(attachId) {\n\t\treturn attachId !== this.#attachId;\n\t}\n\t#afterLoad(fn) {\n\t\tthis.#loadComplete.then(() => {\n\t\t\tif (!this.#messages) return;\n\t\t\tfn();\n\t\t}, () => {});\n\t}\n\t#sendCommand(command, params) {\n\t\tconst embedWindow = this.#target?.contentWindow;\n\t\tif (!embedWindow) return;\n\t\tconst message = {\n\t\t\tnamespace: PLAYER_PROXY_NAMESPACE,\n\t\t\teventName: command,\n\t\t\tparams\n\t\t};\n\t\tembedWindow.postMessage(message, TWITCH_PLAYER_ORIGIN);\n\t}\n\t#snapshotProps() {\n\t\treturn {\n\t\t\tautoplay: this.#autoplay,\n\t\t\tdefaultMuted: this.#defaultMuted,\n\t\t\tloop: this.#loop,\n\t\t\tcontrols: this.#controls,\n\t\t\tplaysInline: this.#playsInline,\n\t\t\tpreload: this.#preload || twitchMediaDefaultProps.preload,\n\t\t\tsource: this.#source\n\t\t};\n\t}\n\t#resetState() {\n\t\tthis.#kind = null;\n\t\tthis.#playback = null;\n\t\tthis.#currentTime = 0;\n\t\tthis.#duration = NaN;\n\t\tthis.#muted = false;\n\t\tthis.#paused = !this.#autoplay;\n\t\tthis.#playbackRate = 1;\n\t\tthis.#progress = 0;\n\t\tthis.#readyState = READY_STATE_HAVE_NOTHING;\n\t\tthis.#seeking = false;\n\t\tthis.#loaded = false;\n\t\tthis.#volume = 1;\n\t\tthis.#error = null;\n\t\tthis.#isFullscreen = false;\n\t}\n\tasync #onMessage(event, attachId) {\n\t\tif (this.#isStale(attachId)) return;\n\t\tconst embedWindow = this.#target?.contentWindow;\n\t\tif (!embedWindow || event.source !== embedWindow) return;\n\t\tconst { data } = event;\n\t\tif (!isTwitchMessage(data)) return;\n\t\tif (data.namespace === \"twitch-embed\") {\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, STATE_SETTLE_MS));\n\t\t\tif (this.#isStale(attachId)) return;\n\t\t\tthis.#onEmbedEvent(data.eventName);\n\t\t\treturn;\n\t\t}\n\t\tif (data.eventName === \"UPDATE_STATE\") this.#onUpdateState(data.params ?? {});\n\t}\n\t#onEmbedEvent(eventName) {\n\t\tif (eventName !== \"ready\" && !this.#src) return;\n\t\tswitch (eventName) {\n\t\t\tcase \"ready\":\n\t\t\t\tthis.#playerReady = true;\n\t\t\t\tthis.#rebuilding = false;\n\t\t\t\tif (this.#pendingLoad) {\n\t\t\t\t\tthis.#pendingLoad = false;\n\t\t\t\t\tthis.load();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.#onLoaded();\n\t\t\t\treturn;\n\t\t\tcase \"seek\":\n\t\t\t\tthis.#seeking = true;\n\t\t\t\tthis.dispatchEvent(new Event(\"seeking\"));\n\t\t\t\treturn;\n\t\t\tcase \"playing\":\n\t\t\t\tif (this.#seeking) {\n\t\t\t\t\tthis.#seeking = false;\n\t\t\t\t\tthis.dispatchEvent(new Event(\"seeked\"));\n\t\t\t\t}\n\t\t\t\tthis.#readyState = READY_STATE_HAVE_FUTURE_DATA;\n\t\t\t\tthis.dispatchEvent(new Event(\"playing\"));\n\t\t\t\treturn;\n\t\t\tcase \"ended\":\n\t\t\t\tthis.dispatchEvent(new Event(\"ended\"));\n\t\t\t\tif (this.#loop) {\n\t\t\t\t\tthis.currentTime = 0;\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tdefault: this.dispatchEvent(new Event(eventName));\n\t\t}\n\t}\n\t#onUpdateState(state) {\n\t\tif (this.#rebuilding) return;\n\t\tif (!this.#src) return;\n\t\tif (this.#playerReady && !this.#loaded) this.#onLoaded();\n\t\tif (state.playback && state.playback !== this.#playback) {\n\t\t\tif (state.playback === \"Buffering\") this.dispatchEvent(new Event(\"waiting\"));\n\t\t\tthis.#playback = state.playback;\n\t\t}\n\t\tif (this.#kind !== \"channel\" && isNumber(state.duration) && state.duration !== this.#duration) {\n\t\t\tthis.#duration = state.duration;\n\t\t\tthis.dispatchEvent(new Event(\"durationchange\"));\n\t\t}\n\t\tif (isNumber(state.currentTime) && state.currentTime !== this.#currentTime) {\n\t\t\tthis.#currentTime = state.currentTime;\n\t\t\tthis.dispatchEvent(new Event(\"timeupdate\"));\n\t\t}\n\t\tconst volumeChanged = isNumber(state.volume) && state.volume !== this.#volume;\n\t\tconst mutedChanged = !isUndefined(state.muted) && state.muted !== this.#muted;\n\t\tif (volumeChanged || mutedChanged) {\n\t\t\tif (isNumber(state.volume)) this.#volume = state.volume;\n\t\t\tif (!isUndefined(state.muted)) this.#muted = state.muted;\n\t\t\tthis.dispatchEvent(new Event(\"volumechange\"));\n\t\t}\n\t\tconst bufferSize = state.stats?.videoStats?.bufferSize;\n\t\tif (isNumber(bufferSize) && bufferSize !== this.#progress) {\n\t\t\tthis.#progress = bufferSize;\n\t\t\tif (this.#readyState >= READY_STATE_HAVE_FUTURE_DATA && bufferSize > 0) this.#readyState = READY_STATE_HAVE_ENOUGH_DATA;\n\t\t\tthis.dispatchEvent(new Event(\"progress\"));\n\t\t}\n\t}\n\t#onLoaded() {\n\t\tif (this.#loaded) return;\n\t\tthis.#loaded = true;\n\t\tthis.#readyState = READY_STATE_HAVE_METADATA;\n\t\tthis.dispatchEvent(new Event(\"loadedmetadata\"));\n\t\tif (this.#kind === \"channel\") {\n\t\t\tthis.#duration = Number.POSITIVE_INFINITY;\n\t\t\tthis.dispatchEvent(new Event(\"durationchange\"));\n\t\t}\n\t\tthis.dispatchEvent(new Event(\"loadcomplete\"));\n\t\tthis.#loadComplete.resolve();\n\t}\n};\nfunction isContentOnlyChange(current, next) {\n\tconst currentBase = withoutContent(current);\n\tconst nextBase = withoutContent(next);\n\treturn currentBase !== null && currentBase === nextBase;\n}\nfunction withPageParent(embedSrc) {\n\tconst hostname = globalThis.location?.hostname;\n\tif (!hostname) return embedSrc;\n\tlet url;\n\ttry {\n\t\turl = new URL(embedSrc);\n\t} catch {\n\t\treturn embedSrc;\n\t}\n\tif (url.origin !== \"https://player.twitch.tv\") return embedSrc;\n\tif (url.searchParams.getAll(\"parent\").includes(hostname)) return embedSrc;\n\turl.searchParams.append(\"parent\", hostname);\n\treturn url.toString();\n}\nfunction withoutContent(embedSrc) {\n\tif (!embedSrc) return null;\n\ttry {\n\t\tconst url = new URL(embedSrc);\n\t\turl.searchParams.delete(\"video\");\n\t\turl.searchParams.delete(\"channel\");\n\t\treturn url.toString();\n\t} catch {\n\t\treturn null;\n\t}\n}\nconst STATE_SETTLE_MS = 10;\nconst READY_STATE_HAVE_NOTHING = 0;\nconst READY_STATE_HAVE_METADATA = 1;\nconst READY_STATE_HAVE_FUTURE_DATA = 3;\nconst READY_STATE_HAVE_ENOUGH_DATA = 4;\n//#endregion\nexport { TwitchMedia };\n\n//# sourceMappingURL=media.js.map","import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { buildTwitchIframeSrc, TwitchMedia } from '@videojs/media/dom/twitch';\nimport { escapeHtml } from '@videojs/utils/string';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\n\nclass TwitchCustomMediaElement extends CustomMediaElement('iframe', TwitchMedia) {\n static override getTemplateHTML = (attrs: Record<string, string>): string => {\n const initialSrc = buildTwitchIframeSrc(attrs.src ?? '', templateAttrsToEmbedProps(attrs));\n const srcAttr = initialSrc ? ` src=\"${escapeHtml(initialSrc)}\"` : '';\n return /*html*/ `\n <style>\n :host {\n display: inline-block;\n min-width: 300px;\n min-height: 150px;\n position: relative;\n }\n iframe {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n :host(:not([controls])) {\n pointer-events: none;\n }\n </style>\n <iframe\n part=\"iframe\"\n ${srcAttr}\n allow=\"accelerometer; fullscreen; autoplay; encrypted-media; picture-in-picture;\"\n sandbox=\"allow-modals allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox\"\n scrolling=\"no\"\n frameborder=\"0\"\n width=\"100%\"\n height=\"100%\"\n referrerpolicy=\"${escapeHtml(attrs.referrerpolicy ?? '')}\"\n ></iframe>\n `;\n };\n}\n\nfunction templateAttrsToEmbedProps(attrs: Record<string, string>) {\n return {\n autoplay: attrs.autoplay !== undefined,\n defaultMuted: attrs.muted !== undefined,\n loop: attrs.loop !== undefined,\n controls: attrs.controls !== undefined,\n playsInline: attrs.playsinline !== undefined,\n preload: (attrs.preload as 'none' | 'metadata' | 'auto' | undefined) ?? 'metadata',\n };\n}\n\nexport class TwitchVideo extends MediaAttachMixin(TwitchCustomMediaElement) {}\n","import { TwitchVideo } from '../../media/twitch-video';\nimport { safeDefine } from '../safe-define';\n\nexport class TwitchVideoElement extends TwitchVideo {\n static readonly tagName = 'twitch-video';\n}\n\nsafeDefine(TwitchVideoElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TwitchVideoElement.tagName]: TwitchVideoElement;\n }\n}\n"],"mappings":";;;;;;;;;;;AACA,MAAM,0BAA0B;CAC/B,KAAK;CACL,UAAU;CACV,cAAc;CACd,OAAO;CACP,MAAM;CACN,UAAU;CACV,aAAa;CACb,SAAS;CACT,QAAQ;CACR,QAAQ;AACT;;;;;ACTA,MAAM,uBAAuB;;AAE7B,MAAM,yBAAyB;AAK/B,MAAM,iBAAiB;;AAEvB,SAAS,gBAAgB,MAAM;CAC9B,IAAI,CAAC,SAAS,IAAI,GAAG,OAAO;CAC5B,MAAM,EAAE,WAAW,cAAc;CACjC,OAAO,SAAS,SAAS,MAAM,cAAc,kBAAkB,cAAc;AAC9E;;;;;;;;;ACHA,SAAS,kBAAkB,KAAK;CAC/B,IAAI,CAAC,KAAK,OAAO;CACjB,MAAM,UAAU,YAAY,KAAK,GAAG,CAAC,GAAG;CACxC,IAAI,SAAS,OAAO;EACnB,MAAM;EACN,IAAI;EACJ,SAAS;CACV;CACA,MAAM,UAAU,cAAc,KAAK,GAAG,CAAC,GAAG;CAC1C,IAAI,SAAS,OAAO;EACnB,MAAM;EACN,IAAI;EACJ;CACD;CACA,OAAO;AACR;;AAEA,SAAS,qBAAqB,KAAK,QAAQ,CAAC,GAAG;CAC9C,MAAM,SAAS,kBAAkB,GAAG;CACpC,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,EAAE,QAAQ,gBAAgB,iBAAiB,GAAG,WAAW,MAAM,QAAQ,QAAQ,UAAU,CAAC;CAChG,MAAM,SAAS;EACd,GAAG,OAAO,SAAS,UAAU,EAAE,OAAO,IAAI,OAAO,KAAK,IAAI,EAAE,SAAS,OAAO,QAAQ;EACpF,UAAU,MAAM,aAAa,OAAO,OAAO;EAC3C,UAAU,MAAM,aAAa,OAAO,OAAO;EAC3C,OAAO,MAAM,gBAAgB,wBAAwB;EACrD,SAAS,MAAM,WAAW,wBAAwB;EAClD,GAAG;CACJ;CACA,MAAM,QAAQ,IAAI,gBAAgB;CAClC,KAAK,MAAM,OAAO,QAAQ;EACzB,MAAM,QAAQ,OAAO;EACrB,IAAI,MAAM,KAAK,KAAK,UAAU,IAAI;EAClC,MAAM,IAAI,KAAK,OAAO,KAAK,CAAC;CAC7B;CACA,KAAK,MAAM,QAAQ,mBAAmB,MAAM,GAAG,MAAM,OAAO,UAAU,IAAI;CAC1E,IAAI,CAAC,MAAM,IAAI,QAAQ,GAAG,QAAQ,KAAK,yHAAyH;CAChK,OAAO,GAAG,qBAAqB,IAAI,MAAM,SAAS;AACnD;;AAEA,SAAS,mBAAmB,QAAQ;CACnC,MAAM,QAAQ,CAAC,GAAG,SAAS,MAAM,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,GAAG,WAAW,UAAU,QAAQ;CAC3F,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,QAAQ,SAAS,SAAS,IAAI,KAAK,SAAS,EAAE,CAAC,CAAC;AAC1E;AACA,MAAM,cAAc;AACpB,MAAM,gBAAgB;;;;AC/CtB,MAAM,kBAAkB,uBAAuB,WAAW;;;;AAI1D,IAAI,cAAc,cAAc,gBAAgB;CAC/C,UAAU;CACV,YAAY;CACZ,eAAe;CACf,eAAe;CACf,cAAc;CACd,gBAAgB,oBAAoB;CACpC,YAAY;CACZ,YAAY;CACZ,OAAO,wBAAwB;CAC/B,YAAY,wBAAwB;CACpC,gBAAgB,wBAAwB;CACxC,QAAQ,wBAAwB;CAChC,YAAY,wBAAwB;CACpC,eAAe,wBAAwB;CACvC,WAAW,wBAAwB;CACnC,UAAU,wBAAwB;CAClC,UAAU,wBAAwB;CAClC,QAAQ;CACR,YAAY;CACZ,UAAU;CACV,WAAW;CACX,UAAU;CACV,eAAe;CACf,YAAY;CACZ,UAAU;CACV,SAAS;CACT,gBAAgB;CAChB,YAAY;CACZ,cAAc;CACd,SAAS;CACT,gBAAgB;CAChB,OAAO,uBAAuB;;CAE9B,IAAI,SAAS;EACZ,OAAO,KAAKA,YAAY,KAAKC,SAAS,iBAAiB,OAAO;CAC/D;CACA,IAAI,SAAS;EACZ,OAAO,KAAKA;CACb;;CAEA,OAAO,QAAQ;EACd,IAAI,CAAC,UAAU,KAAKA,YAAY,QAAQ;EACxC,IAAI,KAAKA,SAAS,KAAK,OAAO;EAC9B,KAAKA,UAAU;EACf,KAAKC,WAAW;EAChB,KAAKC,cAAc;CACpB;CACA,SAAS;EACR,IAAI,CAAC,KAAKF,SAAS;EACnB,KAAKG;EACL,KAAKJ,WAAW,MAAM;EACtB,KAAKA,YAAY;EACjB,KAAKK,eAAe;EACpB,KAAKC,eAAe;EACpB,KAAKC,cAAc;EACnB,KAAKC,YAAY;EACjB,KAAKP,UAAU;EACf,KAAKQ,cAAc,QAAQ;EAC3B,KAAKC,YAAY;CAClB;CACA,UAAU;EACT,KAAK,OAAO;EACZ,MAAM,QAAQ;CACf;CACA,IAAI,MAAM;EACT,OAAO,KAAKC;CACb;;CAEA,IAAI,IAAI,OAAO;EACd,MAAM,EAAE,WAAW,KAAKC,WAAW,CAAC;EACpC,MAAM,OAAO;GACZ,GAAG,UAAU,EAAE,OAAO;GACtB,GAAG,SAAS,EAAE,KAAK,MAAM;EAC1B;EACA,KAAK,SAAS,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO;CACrD;CACA,IAAI,aAAa;EAChB,OAAO,KAAKX,SAAS,aAAa,KAAK,KAAK;CAC7C;CACA,IAAI,aAAa;EAChB,OAAO,KAAKY;CACb;;CAEA,MAAM,OAAO;EACZ,IAAI,CAAC,KAAKb,aAAa,CAAC,KAAKK,cAAc;GAC1C,KAAKC,eAAe,CAAC,CAAC,KAAKL;GAC3B,IAAI,KAAKA,WAAW,CAAC,KAAKD,WAAW;IACpC,MAAM,OAAO,KAAKE,WAAW;IAC7B,MAAM,QAAQ,QAAQ;IACtB,IAAI,SAAS,KAAKO,eAAe;IACjC,KAAKH,eAAe;IACpB,KAAKH,cAAc;GACpB;GACA;EACD;EACA,MAAM,OAAO,KAAKD,WAAW;EAC7B,KAAKQ,YAAY;EACjB,KAAK,cAAc,IAAI,MAAM,SAAS,CAAC;EACvC,IAAI,CAAC,KAAKC,MAAM;GACf,KAAK,QAAQ;GACb,KAAKG,aAAa,CAAC;GACnB;EACD;EACA,KAAK,cAAc,IAAI,MAAM,WAAW,CAAC;EACzC,MAAM,SAAS,kBAAkB,KAAKH,IAAI;EAC1C,IAAI,CAAC,QAAQ;GACZ,KAAKI,SAAS,IAAI,WAAW,+BAA+B,KAAKJ,QAAQ,WAAW,2BAA2B;GAC/G,KAAK,cAAc,IAAI,MAAM,OAAO,CAAC;GACrC,KAAK,QAAQ;GACb;EACD;EACA,KAAKK,QAAQ,OAAO;EACpB,MAAM,eAAe,qBAAqB,KAAKL,MAAM,KAAKM,eAAe,CAAC;EAC1E,IAAI,oBAAoB,KAAKT,WAAW,YAAY,GAAG;GACtD,KAAKA,YAAY;GACjB,IAAI,OAAO,SAAS,SAAS,KAAKM,aAAa,GAAG,IAAI,OAAO,IAAI;QAC5D,KAAKA,aAAa,GAAG,OAAO,OAAO;GACxC;EACD;EACA,KAAKN,YAAY;EACjB,KAAKH,eAAe;EACpB,KAAKE,cAAc;EACnB,IAAI,KAAKN,SAAS,KAAKA,QAAQ,MAAM;CACtC;CACA,aAAa;EACZ,KAAKQ,cAAc,QAAQ;EAC3B,KAAKA,gBAAgB,oBAAoB;EACzC,OAAO,KAAKA;CACb;CACA,IAAI,SAAS;EACZ,IAAI,CAAC,KAAKS,WAAW,OAAO,KAAKC;EACjC,OAAO,KAAKD,cAAc,aAAa,KAAKA,cAAc;CAC3D;CACA,IAAI,QAAQ;EACX,IAAI,KAAKF,UAAU,WAAW,OAAO;EACrC,OAAO,KAAKE,cAAc;CAC3B;CACA,IAAI,UAAU;EACb,OAAO,KAAKE;CACb;CACA,MAAM,OAAO;EACZ,MAAM,KAAKX;EACX,IAAI,CAAC,KAAKE,MAAM;EAChB,KAAKQ,UAAU;EACf,KAAKL,aAAa,CAAC;CACpB;CACA,QAAQ;EACP,KAAKK,UAAU;EACf,KAAKL,aAAa,CAAC;CACpB;CACA,IAAI,cAAc;EACjB,OAAO,KAAKO;CACb;CACA,IAAI,YAAY,OAAO;EACtB,IAAI,KAAKA,iBAAiB,OAAO;EACjC,KAAKA,eAAe;EACpB,KAAKC,iBAAiB,KAAKR,aAAa,GAAG,KAAK,CAAC;CAClD;CACA,IAAI,WAAW;EACd,OAAO,KAAKS;CACb;CACA,IAAI,SAAS;EACZ,OAAO,KAAKC;CACb;CACA,IAAI,OAAO,OAAO;EACjB,IAAI,KAAKA,YAAY,OAAO;EAC5B,KAAKA,UAAU;EACf,KAAK,cAAc,IAAI,MAAM,cAAc,CAAC;EAC5C,KAAKF,iBAAiB,KAAKR,aAAa,IAAI,KAAK,CAAC;CACnD;CACA,IAAI,QAAQ;EACX,OAAO,KAAKW;CACb;CACA,IAAI,MAAM,OAAO;EAChB,IAAI,KAAKA,WAAW,OAAO;EAC3B,KAAKA,SAAS;EACd,KAAK,cAAc,IAAI,MAAM,cAAc,CAAC;EAC5C,KAAKH,iBAAiB,KAAKR,aAAa,IAAI,KAAK,CAAC;CACnD;CACA,IAAI,eAAe;EAClB,OAAO,KAAKY;CACb;CACA,IAAI,aAAa,OAAO;EACvB,KAAKA,gBAAgB;CACtB;CACA,IAAI,WAAW;EACd,OAAO,KAAKC;CACb;CACA,IAAI,SAAS,OAAO;EACnB,KAAKA,YAAY;CAClB;CACA,IAAI,eAAe;EAClB,OAAO,KAAKC;CACb;CACA,IAAI,aAAa,OAAO;EACvB,KAAKA,gBAAgB;CACtB;CACA,IAAI,OAAO;EACV,OAAO,KAAKC;CACb;CACA,IAAI,KAAK,OAAO;EACf,KAAKA,QAAQ;CACd;CACA,IAAI,WAAW;EACd,OAAO,KAAKC;CACb;CACA,IAAI,SAAS,OAAO;EACnB,KAAKA,YAAY;CAClB;CACA,IAAI,cAAc;EACjB,OAAO,KAAKC;CACb;CACA,IAAI,YAAY,OAAO;EACtB,KAAKA,eAAe;CACrB;CACA,IAAI,UAAU;EACb,OAAO,KAAKC;CACb;CACA,IAAI,QAAQ,OAAO;EAClB,KAAKA,WAAW;CACjB;CACA,IAAI,SAAS;EACZ,OAAO,KAAKC;CACb;CACA,IAAI,OAAO,OAAO;EACjB,KAAKA,UAAU;CAChB;;CAEA,IAAI,SAAS;EACZ,OAAO,KAAKrB;CACb;CACA,IAAI,OAAO,OAAO;EACjB,MAAM,SAAS,SAAS;EACxB,IAAI,WAAW,KAAKA,SAAS;EAC7B,MAAM,MAAM,QAAQ,OAAO;EAC3B,MAAM,aAAa,KAAKD,SAAS;EACjC,MAAM,gBAAgB,CAAC,UAAU,KAAKC,SAAS,QAAQ,UAAU,MAAM,QAAQ,QAAQ,UAAU,IAAI;EACrG,KAAKA,UAAU;EACf,KAAKD,OAAO;EACZ,IAAI,cAAc,eAAe,KAAK,KAAK;EAC3C,KAAK,cAAc,IAAI,MAAM,cAAc,CAAC;CAC7C;CACA,IAAI,WAAW;EACd,OAAO,KAAKuB,YAAY,IAAI,gBAAgB,KAAKb,cAAc,KAAKA,eAAe,KAAKa,SAAS,IAAI;CACtG;CACA,IAAI,WAAW;EACd,OAAO,KAAKX,YAAY,KAAK,OAAO,SAAS,KAAKA,SAAS,IAAI,gBAAgB,GAAG,KAAKA,SAAS,IAAI;CACrG;CACA,IAAI,QAAQ;EACX,OAAO,KAAKR;CACb;CACA,IAAI,aAAa;EAChB,OAAO;CACR;CACA,IAAI,eAAe;EAClB,OAAO,KAAKoB;CACb;CACA,MAAM,oBAAoB;EACzB,IAAI,CAAC,KAAKlC,SAAS,mBAAmB;EACtC,MAAM,KAAKA,QAAQ,kBAAkB;EACrC,KAAKkC,gBAAgB;CACtB;CACA,MAAM,iBAAiB;EACtB,MAAM,MAAM,WAAW;EACvB,IAAI,KAAK,qBAAqB,IAAI,sBAAsB,KAAKlC,SAAS,MAAM,IAAI,eAAe;EAC/F,KAAKkC,gBAAgB;CACtB;CACA,gBAAgB;EACf,MAAM,SAAS,KAAKlC;EACpB,IAAI,CAAC,UAAU,KAAKD,WAAW,OAAO;EACtC,MAAM,cAAc,OAAO,aAAa,KAAK;EAC7C,IAAI,CAAC,aAAa;GACjB,MAAM,aAAa,qBAAqB,KAAKW,MAAM,KAAKM,eAAe,CAAC;GACxE,IAAI,CAAC,YAAY;IAChB,KAAKR,cAAc,QAAQ;IAC3B,OAAO;GACR;GACA,OAAO,MAAM;EACd,OAAO;GACN,MAAM,aAAa,eAAe,WAAW;GAC7C,IAAI,eAAe,aAAa,OAAO,MAAM;EAC9C;EACA,KAAKO,QAAQ,kBAAkB,KAAKL,IAAI,CAAC,EAAE,QAAQ;EACnD,KAAKH,YAAY,OAAO,aAAa,KAAK,KAAK;EAC/C,MAAM,WAAW,KAAKJ;EACtB,KAAKJ,YAAY,IAAI,gBAAgB;EACrC,WAAW,iBAAiB,YAAY,UAAU,KAAK,KAAKoC,WAAW,OAAO,QAAQ,GAAG,EAAE,QAAQ,KAAKpC,UAAU,OAAO,CAAC;EAC1H,KAAK,cAAc,IAAI,MAAM,WAAW,CAAC;EACzC,OAAO;CACR;CACA,SAAS,UAAU;EAClB,OAAO,aAAa,KAAKI;CAC1B;CACA,WAAW,IAAI;EACd,KAAKK,cAAc,WAAW;GAC7B,IAAI,CAAC,KAAKT,WAAW;GACrB,GAAG;EACJ,SAAS,CAAC,CAAC;CACZ;CACA,aAAa,SAAS,QAAQ;EAC7B,MAAM,cAAc,KAAKC,SAAS;EAClC,IAAI,CAAC,aAAa;EAClB,MAAM,UAAU;GACf,WAAW;GACX,WAAW;GACX;EACD;EACA,YAAY,YAAY,SAAS,oBAAoB;CACtD;CACA,iBAAiB;EAChB,OAAO;GACN,UAAU,KAAK0B;GACf,cAAc,KAAKC;GACnB,MAAM,KAAKC;GACX,UAAU,KAAKC;GACf,aAAa,KAAKC;GAClB,SAAS,KAAKC,YAAY,wBAAwB;GAClD,QAAQ,KAAKpB;EACd;CACD;CACA,cAAc;EACb,KAAKI,QAAQ;EACb,KAAKE,YAAY;EACjB,KAAKG,eAAe;EACpB,KAAKE,YAAY;EACjB,KAAKE,SAAS;EACd,KAAKN,UAAU,CAAC,KAAKQ;EACrB,KAAKD,gBAAgB;EACrB,KAAKQ,YAAY;EACjB,KAAKrB,cAAc;EACnB,KAAKO,WAAW;EAChB,KAAKiB,UAAU;EACf,KAAKb,UAAU;EACf,KAAKT,SAAS;EACd,KAAKoB,gBAAgB;CACtB;CACA,MAAMC,WAAW,OAAO,UAAU;EACjC,IAAI,KAAKE,SAAS,QAAQ,GAAG;EAC7B,MAAM,cAAc,KAAKrC,SAAS;EAClC,IAAI,CAAC,eAAe,MAAM,WAAW,aAAa;EAClD,MAAM,EAAE,SAAS;EACjB,IAAI,CAAC,gBAAgB,IAAI,GAAG;EAC5B,IAAI,KAAK,cAAc,gBAAgB;GACtC,MAAM,IAAI,SAAS,YAAY,WAAW,SAAS,eAAe,CAAC;GACnE,IAAI,KAAKqC,SAAS,QAAQ,GAAG;GAC7B,KAAKC,cAAc,KAAK,SAAS;GACjC;EACD;EACA,IAAI,KAAK,cAAc,gBAAgB,KAAKC,eAAe,KAAK,UAAU,CAAC,CAAC;CAC7E;CACA,cAAc,WAAW;EACxB,IAAI,cAAc,WAAW,CAAC,KAAK7B,MAAM;EACzC,QAAQ,WAAR;GACC,KAAK;IACJ,KAAKN,eAAe;IACpB,KAAKE,cAAc;IACnB,IAAI,KAAKD,cAAc;KACtB,KAAKA,eAAe;KACpB,KAAK,KAAK;KACV;IACD;IACA,KAAKmC,UAAU;IACf;GACD,KAAK;IACJ,KAAKrB,WAAW;IAChB,KAAK,cAAc,IAAI,MAAM,SAAS,CAAC;IACvC;GACD,KAAK;IACJ,IAAI,KAAKA,UAAU;KAClB,KAAKA,WAAW;KAChB,KAAK,cAAc,IAAI,MAAM,QAAQ,CAAC;IACvC;IACA,KAAKP,cAAc;IACnB,KAAK,cAAc,IAAI,MAAM,SAAS,CAAC;IACvC;GACD,KAAK;IACJ,KAAK,cAAc,IAAI,MAAM,OAAO,CAAC;IACrC,IAAI,KAAKgB,OAAO;KACf,KAAK,cAAc;KACnB,KAAK,KAAK;IACX;IACA;GACD,SAAS,KAAK,cAAc,IAAI,MAAM,SAAS,CAAC;EACjD;CACD;CACA,eAAe,OAAO;EACrB,IAAI,KAAKtB,aAAa;EACtB,IAAI,CAAC,KAAKI,MAAM;EAChB,IAAI,KAAKN,gBAAgB,CAAC,KAAKgC,SAAS,KAAKI,UAAU;EACvD,IAAI,MAAM,YAAY,MAAM,aAAa,KAAKvB,WAAW;GACxD,IAAI,MAAM,aAAa,aAAa,KAAK,cAAc,IAAI,MAAM,SAAS,CAAC;GAC3E,KAAKA,YAAY,MAAM;EACxB;EACA,IAAI,KAAKF,UAAU,aAAa,SAAS,MAAM,QAAQ,KAAK,MAAM,aAAa,KAAKO,WAAW;GAC9F,KAAKA,YAAY,MAAM;GACvB,KAAK,cAAc,IAAI,MAAM,gBAAgB,CAAC;EAC/C;EACA,IAAI,SAAS,MAAM,WAAW,KAAK,MAAM,gBAAgB,KAAKF,cAAc;GAC3E,KAAKA,eAAe,MAAM;GAC1B,KAAK,cAAc,IAAI,MAAM,YAAY,CAAC;EAC3C;EACA,MAAM,gBAAgB,SAAS,MAAM,MAAM,KAAK,MAAM,WAAW,KAAKG;EACtE,MAAM,eAAe,CAAC,YAAY,MAAM,KAAK,KAAK,MAAM,UAAU,KAAKC;EACvE,IAAI,iBAAiB,cAAc;GAClC,IAAI,SAAS,MAAM,MAAM,GAAG,KAAKD,UAAU,MAAM;GACjD,IAAI,CAAC,YAAY,MAAM,KAAK,GAAG,KAAKC,SAAS,MAAM;GACnD,KAAK,cAAc,IAAI,MAAM,cAAc,CAAC;EAC7C;EACA,MAAM,aAAa,MAAM,OAAO,YAAY;EAC5C,IAAI,SAAS,UAAU,KAAK,eAAe,KAAKS,WAAW;GAC1D,KAAKA,YAAY;GACjB,IAAI,KAAKrB,eAAe,gCAAgC,aAAa,GAAG,KAAKA,cAAc;GAC3F,KAAK,cAAc,IAAI,MAAM,UAAU,CAAC;EACzC;CACD;CACA,YAAY;EACX,IAAI,KAAKwB,SAAS;EAClB,KAAKA,UAAU;EACf,KAAKxB,cAAc;EACnB,KAAK,cAAc,IAAI,MAAM,gBAAgB,CAAC;EAC9C,IAAI,KAAKG,UAAU,WAAW;GAC7B,KAAKO,YAAY,OAAO;GACxB,KAAK,cAAc,IAAI,MAAM,gBAAgB,CAAC;EAC/C;EACA,KAAK,cAAc,IAAI,MAAM,cAAc,CAAC;EAC5C,KAAKd,cAAc,QAAQ;CAC5B;AACD;AACA,SAAS,oBAAoB,SAAS,MAAM;CAC3C,MAAM,cAAc,eAAe,OAAO;CAC1C,MAAM,WAAW,eAAe,IAAI;CACpC,OAAO,gBAAgB,QAAQ,gBAAgB;AAChD;AACA,SAAS,eAAe,UAAU;CACjC,MAAM,WAAW,WAAW,UAAU;CACtC,IAAI,CAAC,UAAU,OAAO;CACtB,IAAI;CACJ,IAAI;EACH,MAAM,IAAI,IAAI,QAAQ;CACvB,QAAQ;EACP,OAAO;CACR;CACA,IAAI,IAAI,WAAW,4BAA4B,OAAO;CACtD,IAAI,IAAI,aAAa,OAAO,QAAQ,CAAC,CAAC,SAAS,QAAQ,GAAG,OAAO;CACjE,IAAI,aAAa,OAAO,UAAU,QAAQ;CAC1C,OAAO,IAAI,SAAS;AACrB;AACA,SAAS,eAAe,UAAU;CACjC,IAAI,CAAC,UAAU,OAAO;CACtB,IAAI;EACH,MAAM,MAAM,IAAI,IAAI,QAAQ;EAC5B,IAAI,aAAa,OAAO,OAAO;EAC/B,IAAI,aAAa,OAAO,SAAS;EACjC,OAAO,IAAI,SAAS;CACrB,QAAQ;EACP,OAAO;CACR;AACD;AACA,MAAM,kBAAkB;AACxB,MAAM,2BAA2B;AACjC,MAAM,4BAA4B;AAClC,MAAM,+BAA+B;AACrC,MAAM,+BAA+B;;;;ACzdrC,IAAM,2BAAN,cAAuC,mBAAmB,UAAU,WAAW,CAAC,CAAC;;0BAC5C,UAA0C;GAC3E,MAAM,aAAa,qBAAqB,MAAM,OAAO,IAAI,0BAA0B,KAAK,CAAC;GAEzF,OAAgB;;;;;;;;;;;;;;;;;;;;;UADA,aAAa,SAAS,WAAW,UAAU,EAAE,KAAK,GAsBpD;;;;;;;0BAOQ,WAAW,MAAM,kBAAkB,EAAE,EAAE;;;EAG/D;;AACF;AAEA,SAAS,0BAA0B,OAA+B;CAChE,OAAO;EACL,UAAU,MAAM,aAAa;EAC7B,cAAc,MAAM,UAAU;EAC9B,MAAM,MAAM,SAAS;EACrB,UAAU,MAAM,aAAa;EAC7B,aAAa,MAAM,gBAAgB;EACnC,SAAU,MAAM,WAAwD;CAC1E;AACF;AAEA,IAAa,cAAb,cAAiC,iBAAiB,wBAAwB,CAAC,CAAC,CAAC;;;;ACnD7E,IAAa,qBAAb,cAAwC,YAAY;;iBACxB;;AAC5B;AAEA,WAAW,kBAAkB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e,l as t,o as n,s as r,u as i}from"../predicate-LbFu-fPH.js";import{t as a}from"../deep-equal-CcwdHo6t.js";import{t as o}from"../custom-media-element-8pSkwn42.js";import{a as s}from"../attributes-CwICYz98.js";import{i as c}from"../context-C2rsoDxk.js";import{n as l,r as u,t as d}from"../media-played-ranges-CM2zeOGr.js";import{n as f,r as p}from"../constants-B4LD5zrj.js";import{t as m}from"../media-error-CtsbOTR1.js";import{t as h}from"../media-attach-mixin-Igi3-1UG.js";const g={src:``,autoplay:!1,defaultMuted:!1,muted:!1,loop:!1,controls:!1,playsInline:!0,preload:`metadata`,poster:``,source:null},_=`https://player.twitch.tv`;function v(e){if(!r(e))return!1;let{namespace:n,eventName:i}=e;return t(i)&&(n===`twitch-embed`||n===`twitch-embed-player-proxy`)}function y(e){if(!e)return null;let t=S.exec(e)?.[1];if(t)return{kind:`video`,id:t,channel:null};let n=C.exec(e)?.[1];return n?{kind:`channel`,id:null,channel:n}:null}function b(t,n={}){let r=y(t);if(!r)return``;let{parent:i,referrerPolicy:a,...o}=n.source?.engine?.twitch??{},s={...r.kind===`video`?{video:`v${r.id}`}:{channel:r.channel},controls:n.controls===!0&&null,autoplay:n.autoplay===!0&&null,muted:n.defaultMuted??g.defaultMuted,preload:n.preload??g.preload,...o},c=new URLSearchParams;for(let t in s){let n=s[t];e(n)||n===``||c.set(t,String(n))}for(let e of x(i))c.append(`parent`,e);return`${_}/?${c.toString()}`}function x(e){let n=[...t(e)?[e]:e??[],globalThis.location?.hostname];return[...new Set(n.filter(e=>t(e)&&e!==``))]}const S=/(?:^|\/\/)(?:www\.|go\.)?twitch\.tv\/(?:videos?\/|\?video=)(\d+)\/?(?:$|\?)/,C=/(?:^|\/\/)(?:www\.|go\.)?twitch\.tv\/([a-zA-Z0-9_]+)\/?(?:$|\?)/,w=d(EventTarget);var T=class extends w{#e=null;#t=null;#n=!1;#r=!1;#i=!1;#a=u();#o=0;#s=``;#c=g.src;#l=g.autoplay;#u=g.defaultMuted;#d=g.loop;#f=g.controls;#p=g.playsInline;#m=g.preload;#h=g.poster;#g=g.source;#_=null;#v=null;#y=!0;#b=!1;#x=!1;#S=0;#C=NaN;#w=1;#T=!1;#E=1;#D=0;#O=A;#k=null;#A=!1;static PLAYER_SOFTWARE_NAME=`twitch-video`;get engine(){return this.#t?this.#e?.contentWindow??null:null}get target(){return this.#e}attach(e){!e||this.#e===e||(this.#e&&this.detach(),this.#e=e,this.#j(),this.#M())}detach(){this.#e&&(this.#o++,this.#t?.abort(),this.#t=null,this.#n=!1,this.#r=!1,this.#i=!1,this.#s=``,this.#e=null,this.#a.resolve(),this.#L())}destroy(){this.detach(),super.destroy()}get src(){return this.#c}set src(e){let{engine:t}=this.#g??{},n={...t&&{engine:t},...e&&{src:e}};this.source=Object.keys(n).length>0?n:null}get currentSrc(){return this.#e?.getAttribute(`src`)??``}get readyState(){return this.#O}async load(){if(!this.#t||!this.#n){if(this.#r=!!this.#e,this.#e&&!this.#t){let e=this.#j();if(await Promise.resolve(),e!==this.#a)return;this.#r=!1,this.#M()}return}let e=this.#j();if(this.#L(),this.dispatchEvent(new Event(`emptied`)),!this.#c){e.resolve(),this.#F(2);return}this.dispatchEvent(new Event(`loadstart`));let t=y(this.#c);if(!t){this.#k=new m(`Unrecognized Twitch source: ${this.#c}`,m.MEDIA_ERR_SRC_NOT_SUPPORTED),this.dispatchEvent(new Event(`error`)),e.resolve();return}this.#_=t.kind;let n=b(this.#c,this.#I());if(E(this.#s,n)){this.#s=n,t.kind===`video`?this.#F(9,`v${t.id}`):this.#F(5,t.channel);return}this.#s=n,this.#n=!1,this.#i=!0,this.#e&&(this.#e.src=n)}#j(){return this.#a.resolve(),this.#a=u(),this.#a}get paused(){return this.#v?this.#v!==`Playing`&&this.#v!==`Buffering`:this.#y}get ended(){return this.#_!==`channel`&&this.#v===`Ended`}get seeking(){return this.#b}async play(){await this.#a,this.#c&&(this.#y=!1,this.#F(3))}pause(){this.#y=!0,this.#F(2)}get currentTime(){return this.#S}set currentTime(e){this.#S!==e&&(this.#S=e,this.#P(()=>this.#F(4,e)))}get duration(){return this.#C}get volume(){return this.#w}set volume(e){this.#w!==e&&(this.#w=e,this.dispatchEvent(new Event(`volumechange`)),this.#P(()=>this.#F(11,e)))}get muted(){return this.#T}set muted(e){this.#T!==e&&(this.#T=e,this.dispatchEvent(new Event(`volumechange`)),this.#P(()=>this.#F(10,e)))}get playbackRate(){return this.#E}set playbackRate(e){this.#E=e}get autoplay(){return this.#l}set autoplay(e){this.#l=e}get defaultMuted(){return this.#u}set defaultMuted(e){this.#u=e}get loop(){return this.#d}set loop(e){this.#d=e}get controls(){return this.#f}set controls(e){this.#f=e}get playsInline(){return this.#p}set playsInline(e){this.#p=e}get preload(){return this.#m}set preload(e){this.#m=e}get poster(){return this.#h}set poster(e){this.#h=e}get source(){return this.#g}set source(e){let t=e??null;if(t===this.#g)return;let n=t?.src??``,r=this.#c!==n,i=!a(this.#g?.engine?.twitch??null,t?.engine?.twitch??null);this.#g=t,this.#c=n,(r||i)&&this.load(),this.dispatchEvent(new Event(`sourcechange`))}get buffered(){return this.#D>0?l(this.#S,this.#S+this.#D):p}get seekable(){return this.#C>0&&Number.isFinite(this.#C)?l(0,this.#C):p}get error(){return this.#k}get textTracks(){return f}get isFullscreen(){return this.#A}async requestFullscreen(){this.#e?.requestFullscreen&&(await this.#e.requestFullscreen(),this.#A=!0)}async exitFullscreen(){let e=globalThis.document;e?.fullscreenElement&&e.fullscreenElement===this.#e&&await e.exitFullscreen(),this.#A=!1}#M(){let e=this.#e;if(!e||this.#t)return!1;let t=e.getAttribute(`src`);if(t){let n=D(t);n!==t&&(e.src=n)}else{let t=b(this.#c,this.#I());if(!t)return this.#a.resolve(),!1;e.src=t}this.#_=y(this.#c)?.kind??null,this.#s=e.getAttribute(`src`)??``;let n=this.#o;return this.#t=new AbortController,globalThis.addEventListener(`message`,e=>void this.#R(e,n),{signal:this.#t.signal}),this.dispatchEvent(new Event(`loadstart`)),!0}#N(e){return e!==this.#o}#P(e){this.#a.then(()=>{this.#t&&e()},()=>{})}#F(e,t){let n=this.#e?.contentWindow;if(!n)return;let r={namespace:`twitch-embed-player-proxy`,eventName:e,params:t};n.postMessage(r,_)}#I(){return{autoplay:this.#l,defaultMuted:this.#u,loop:this.#d,controls:this.#f,playsInline:this.#p,preload:this.#m||g.preload,source:this.#g}}#L(){this.#_=null,this.#v=null,this.#S=0,this.#C=NaN,this.#T=!1,this.#y=!this.#l,this.#E=1,this.#D=0,this.#O=A,this.#b=!1,this.#x=!1,this.#w=1,this.#k=null,this.#A=!1}async#R(e,t){if(this.#N(t))return;let n=this.#e?.contentWindow;if(!n||e.source!==n)return;let{data:r}=e;if(v(r)){if(r.namespace===`twitch-embed`){if(await new Promise(e=>setTimeout(e,k)),this.#N(t))return;this.#z(r.eventName);return}r.eventName===`UPDATE_STATE`&&this.#B(r.params??{})}}#z(e){if(!(e!==`ready`&&!this.#c))switch(e){case`ready`:if(this.#n=!0,this.#i=!1,this.#r){this.#r=!1,this.load();return}this.#V();return;case`seek`:this.#b=!0,this.dispatchEvent(new Event(`seeking`));return;case`playing`:this.#b&&(this.#b=!1,this.dispatchEvent(new Event(`seeked`))),this.#O=M,this.dispatchEvent(new Event(`playing`));return;case`ended`:this.dispatchEvent(new Event(`ended`)),this.#d&&(this.currentTime=0,this.play());return;default:this.dispatchEvent(new Event(e))}}#B(e){if(this.#i||!this.#c)return;this.#n&&!this.#x&&this.#V(),e.playback&&e.playback!==this.#v&&(e.playback===`Buffering`&&this.dispatchEvent(new Event(`waiting`)),this.#v=e.playback),this.#_!==`channel`&&n(e.duration)&&e.duration!==this.#C&&(this.#C=e.duration,this.dispatchEvent(new Event(`durationchange`))),n(e.currentTime)&&e.currentTime!==this.#S&&(this.#S=e.currentTime,this.dispatchEvent(new Event(`timeupdate`)));let t=n(e.volume)&&e.volume!==this.#w,r=!i(e.muted)&&e.muted!==this.#T;(t||r)&&(n(e.volume)&&(this.#w=e.volume),i(e.muted)||(this.#T=e.muted),this.dispatchEvent(new Event(`volumechange`)));let a=e.stats?.videoStats?.bufferSize;n(a)&&a!==this.#D&&(this.#D=a,this.#O>=M&&a>0&&(this.#O=N),this.dispatchEvent(new Event(`progress`)))}#V(){this.#x||(this.#x=!0,this.#O=j,this.dispatchEvent(new Event(`loadedmetadata`)),this.#_===`channel`&&(this.#C=1/0,this.dispatchEvent(new Event(`durationchange`))),this.dispatchEvent(new Event(`loadcomplete`)),this.#a.resolve())}};function E(e,t){let n=O(e),r=O(t);return n!==null&&n===r}function D(e){let t=globalThis.location?.hostname;if(!t)return e;let n;try{n=new URL(e)}catch{return e}return n.origin!==`https://player.twitch.tv`||n.searchParams.getAll(`parent`).includes(t)?e:(n.searchParams.append(`parent`,t),n.toString())}function O(e){if(!e)return null;try{let t=new URL(e);return t.searchParams.delete(`video`),t.searchParams.delete(`channel`),t.toString()}catch{return null}}const k=10,A=0,j=1,M=3,N=4;var P=class extends o(`iframe`,T){static{this.getTemplateHTML=e=>{let t=b(e.src??``,F(e));return`<style> :host { display: inline-block; min-width: 300px; min-height: 150px; position: relative; } iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; } :host(:not([controls])) { pointer-events: none; } </style><iframe part="iframe" ${t?` src="${s(t)}"`:``} allow="accelerometer; fullscreen; autoplay; encrypted-media; picture-in-picture;" sandbox="allow-modals allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox" scrolling="no" frameborder="0" width="100%" height="100%" referrerpolicy="${s(e.referrerpolicy??``)}" ></iframe>`}}};function F(e){return{autoplay:e.autoplay!==void 0,defaultMuted:e.muted!==void 0,loop:e.loop!==void 0,controls:e.controls!==void 0,playsInline:e.playsinline!==void 0,preload:e.preload??`metadata`}}var I=class extends h(P){},L=class extends I{static{this.tagName=`twitch-video`}};c(L);export{L as TwitchVideoElement};
|
|
2
|
+
//# sourceMappingURL=twitch-video.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twitch-video.js","names":["#messages","#target","#beginLoad","#createPlayer","#attachId","#playerReady","#pendingLoad","#rebuilding","#embedSrc","#loadComplete","#resetState","#src","#source","#readyState","#sendCommand","#error","#kind","#snapshotProps","#playback","#paused","#seeking","#currentTime","#afterLoad","#duration","#volume","#muted","#playbackRate","#autoplay","#defaultMuted","#loop","#controls","#playsInline","#preload","#poster","#progress","#isFullscreen","#onMessage","#loaded","#isStale","#onEmbedEvent","#onUpdateState","#onLoaded"],"sources":["../../../media/dist/default/dom/twitch/props.js","../../../media/dist/default/dom/twitch/player-api.js","../../../media/dist/default/dom/twitch/source.js","../../../media/dist/default/dom/twitch/media.js","../../src/media/twitch-video/media.ts","../../src/define/media/twitch-video.ts"],"sourcesContent":["//#region src/dom/twitch/props.ts\nconst twitchMediaDefaultProps = {\n\tsrc: \"\",\n\tautoplay: false,\n\tdefaultMuted: false,\n\tmuted: false,\n\tloop: false,\n\tcontrols: false,\n\tplaysInline: true,\n\tpreload: \"metadata\",\n\tposter: \"\",\n\tsource: null\n};\n//#endregion\nexport { twitchMediaDefaultProps };\n\n//# sourceMappingURL=props.js.map","import { isObject, isString } from \"@videojs/utils/predicate\";\n//#region src/dom/twitch/player-api.ts\n/** Embed origin: where the embed is served from and where commands are posted. */\nconst TWITCH_PLAYER_ORIGIN = \"https://player.twitch.tv\";\n/** Namespace on the commands the host posts, and on the state snapshots that come back. */\nconst PLAYER_PROXY_NAMESPACE = \"twitch-embed-player-proxy\";\n/** Namespace on the lifecycle events the embed emits. */\nconst EMBED_NAMESPACE = \"twitch-embed\";\nconst PLAYBACK_BUFFERING = \"Buffering\";\nconst PLAYBACK_PLAYING = \"Playing\";\nconst PLAYBACK_ENDED = \"Ended\";\n/** Narrow a `message` payload to something the embed sent; any page can post here, so the namespace is the filter. */\nfunction isTwitchMessage(data) {\n\tif (!isObject(data)) return false;\n\tconst { namespace, eventName } = data;\n\treturn isString(eventName) && (namespace === \"twitch-embed\" || namespace === \"twitch-embed-player-proxy\");\n}\n//#endregion\nexport { EMBED_NAMESPACE, PLAYBACK_BUFFERING, PLAYBACK_ENDED, PLAYBACK_PLAYING, PLAYER_PROXY_NAMESPACE, TWITCH_PLAYER_ORIGIN, isTwitchMessage };\n\n//# sourceMappingURL=player-api.js.map","import { TWITCH_PLAYER_ORIGIN } from \"./player-api.js\";\nimport { twitchMediaDefaultProps } from \"./props.js\";\nimport { isNil, isString } from \"@videojs/utils/predicate\";\n//#region src/dom/twitch/source.ts\n/** Extract a Twitch VOD id from any recognized video URL. */\nfunction parseTwitchVideoId(src) {\n\treturn parseTwitchSource(src)?.id ?? null;\n}\n/**\n* Parse a Twitch source string. Recognizes VOD URLs (`twitch.tv/videos/<id>`\n* and `twitch.tv/?video=<id>`) and channel URLs (`twitch.tv/<channel>`), with\n* or without the `www.` and `go.` hosts, and with or without a trailing slash.\n*/\nfunction parseTwitchSource(src) {\n\tif (!src) return null;\n\tconst videoId = MATCH_VIDEO.exec(src)?.[1];\n\tif (videoId) return {\n\t\tkind: \"video\",\n\t\tid: videoId,\n\t\tchannel: null\n\t};\n\tconst channel = MATCH_CHANNEL.exec(src)?.[1];\n\tif (channel) return {\n\t\tkind: \"channel\",\n\t\tid: null,\n\t\tchannel\n\t};\n\treturn null;\n}\n/** Build the iframe `src` URL for an initial Twitch embed from the given props. */\nfunction buildTwitchIframeSrc(src, props = {}) {\n\tconst parsed = parseTwitchSource(src);\n\tif (!parsed) return \"\";\n\tconst { parent, referrerPolicy: _referrerPolicy, ...twitch } = props.source?.engine?.twitch ?? {};\n\tconst params = {\n\t\t...parsed.kind === \"video\" ? { video: `v${parsed.id}` } : { channel: parsed.channel },\n\t\tcontrols: props.controls === true ? null : false,\n\t\tautoplay: props.autoplay === true ? null : false,\n\t\tmuted: props.defaultMuted ?? twitchMediaDefaultProps.defaultMuted,\n\t\tpreload: props.preload ?? twitchMediaDefaultProps.preload,\n\t\t...twitch\n\t};\n\tconst query = new URLSearchParams();\n\tfor (const key in params) {\n\t\tconst value = params[key];\n\t\tif (isNil(value) || value === \"\") continue;\n\t\tquery.set(key, String(value));\n\t}\n\tfor (const host of resolveParentHosts(parent)) query.append(\"parent\", host);\n\treturn `${TWITCH_PLAYER_ORIGIN}/?${query.toString()}`;\n}\n/** The configured parent hostnames plus the page's own, deduplicated. */\nfunction resolveParentHosts(parent) {\n\tconst hosts = [...isString(parent) ? [parent] : parent ?? [], globalThis.location?.hostname];\n\treturn [...new Set(hosts.filter((host) => isString(host) && host !== \"\"))];\n}\nconst MATCH_VIDEO = /(?:^|\\/\\/)(?:www\\.|go\\.)?twitch\\.tv\\/(?:videos?\\/|\\?video=)(\\d+)\\/?(?:$|\\?)/;\nconst MATCH_CHANNEL = /(?:^|\\/\\/)(?:www\\.|go\\.)?twitch\\.tv\\/([a-zA-Z0-9_]+)\\/?(?:$|\\?)/;\n//#endregion\nexport { buildTwitchIframeSrc, parseTwitchSource, parseTwitchVideoId };\n\n//# sourceMappingURL=source.js.map","import { EMPTY_TEXT_TRACKS, EMPTY_TIME_RANGES } from \"../../core/constants.js\";\nimport { MediaError } from \"../../core/media-error.js\";\nimport { createTimeRange } from \"../utils/time-ranges.js\";\nimport { MediaPlayedRangesMixin } from \"../media-played-ranges/media-played-ranges.js\";\nimport { PLAYBACK_ENDED, PLAYER_PROXY_NAMESPACE, TWITCH_PLAYER_ORIGIN, isTwitchMessage } from \"./player-api.js\";\nimport { twitchMediaDefaultProps } from \"./props.js\";\nimport { buildTwitchIframeSrc, parseTwitchSource } from \"./source.js\";\nimport { isNumber, isUndefined } from \"@videojs/utils/predicate\";\nimport { deepEqual } from \"@videojs/utils/object\";\nimport { createPublicPromise } from \"@videojs/utils/function\";\n//#region src/dom/twitch/media.ts\nconst TwitchMediaBase = MediaPlayedRangesMixin(EventTarget);\n/**\n* @fires sourcechange - Fired when `source` changes, either directly or by resolving a new `src`. Read `source` for the new value.\n*/\nvar TwitchMedia = class extends TwitchMediaBase {\n\t#target = null;\n\t#messages = null;\n\t#playerReady = false;\n\t#pendingLoad = false;\n\t#rebuilding = false;\n\t#loadComplete = createPublicPromise();\n\t#attachId = 0;\n\t#embedSrc = \"\";\n\t#src = twitchMediaDefaultProps.src;\n\t#autoplay = twitchMediaDefaultProps.autoplay;\n\t#defaultMuted = twitchMediaDefaultProps.defaultMuted;\n\t#loop = twitchMediaDefaultProps.loop;\n\t#controls = twitchMediaDefaultProps.controls;\n\t#playsInline = twitchMediaDefaultProps.playsInline;\n\t#preload = twitchMediaDefaultProps.preload;\n\t#poster = twitchMediaDefaultProps.poster;\n\t#source = twitchMediaDefaultProps.source;\n\t#kind = null;\n\t#playback = null;\n\t#paused = true;\n\t#seeking = false;\n\t#loaded = false;\n\t#currentTime = 0;\n\t#duration = NaN;\n\t#volume = 1;\n\t#muted = false;\n\t#playbackRate = 1;\n\t#progress = 0;\n\t#readyState = READY_STATE_HAVE_NOTHING;\n\t#error = null;\n\t#isFullscreen = false;\n\tstatic PLAYER_SOFTWARE_NAME = \"twitch-video\";\n\t/** The embed's own window, which every command is posted to. Null until an embed is bound and in a document. */\n\tget engine() {\n\t\treturn this.#messages ? this.#target?.contentWindow ?? null : null;\n\t}\n\tget target() {\n\t\treturn this.#target;\n\t}\n\t/** Bind the iframe hosting the embed. The embed follows once a URL resolves; `load()` retries if none does yet. */\n\tattach(target) {\n\t\tif (!target || this.#target === target) return;\n\t\tif (this.#target) this.detach();\n\t\tthis.#target = target;\n\t\tthis.#beginLoad();\n\t\tthis.#createPlayer();\n\t}\n\tdetach() {\n\t\tif (!this.#target) return;\n\t\tthis.#attachId++;\n\t\tthis.#messages?.abort();\n\t\tthis.#messages = null;\n\t\tthis.#playerReady = false;\n\t\tthis.#pendingLoad = false;\n\t\tthis.#rebuilding = false;\n\t\tthis.#embedSrc = \"\";\n\t\tthis.#target = null;\n\t\tthis.#loadComplete.resolve();\n\t\tthis.#resetState();\n\t}\n\tdestroy() {\n\t\tthis.detach();\n\t\tsuper.destroy();\n\t}\n\tget src() {\n\t\treturn this.#src;\n\t}\n\t/** Twitch VOD or channel URL. Setting it re-derives `source`, carrying its embed parameters over. */\n\tset src(value) {\n\t\tconst { engine } = this.#source ?? {};\n\t\tconst next = {\n\t\t\t...engine && { engine },\n\t\t\t...value && { src: value }\n\t\t};\n\t\tthis.source = Object.keys(next).length > 0 ? next : null;\n\t}\n\tget currentSrc() {\n\t\treturn this.#target?.getAttribute(\"src\") ?? \"\";\n\t}\n\tget readyState() {\n\t\treturn this.#readyState;\n\t}\n\t/** Reload the current source, swapping it into the running embed where possible. */\n\tasync load() {\n\t\tif (!this.#messages || !this.#playerReady) {\n\t\t\tthis.#pendingLoad = !!this.#target;\n\t\t\tif (this.#target && !this.#messages) {\n\t\t\t\tconst load = this.#beginLoad();\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tif (load !== this.#loadComplete) return;\n\t\t\t\tthis.#pendingLoad = false;\n\t\t\t\tthis.#createPlayer();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst load = this.#beginLoad();\n\t\tthis.#resetState();\n\t\tthis.dispatchEvent(new Event(\"emptied\"));\n\t\tif (!this.#src) {\n\t\t\tload.resolve();\n\t\t\tthis.#sendCommand(2);\n\t\t\treturn;\n\t\t}\n\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\tconst parsed = parseTwitchSource(this.#src);\n\t\tif (!parsed) {\n\t\t\tthis.#error = new MediaError(`Unrecognized Twitch source: ${this.#src}`, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);\n\t\t\tthis.dispatchEvent(new Event(\"error\"));\n\t\t\tload.resolve();\n\t\t\treturn;\n\t\t}\n\t\tthis.#kind = parsed.kind;\n\t\tconst nextEmbedSrc = buildTwitchIframeSrc(this.#src, this.#snapshotProps());\n\t\tif (isContentOnlyChange(this.#embedSrc, nextEmbedSrc)) {\n\t\t\tthis.#embedSrc = nextEmbedSrc;\n\t\t\tif (parsed.kind === \"video\") this.#sendCommand(9, `v${parsed.id}`);\n\t\t\telse this.#sendCommand(5, parsed.channel);\n\t\t\treturn;\n\t\t}\n\t\tthis.#embedSrc = nextEmbedSrc;\n\t\tthis.#playerReady = false;\n\t\tthis.#rebuilding = true;\n\t\tif (this.#target) this.#target.src = nextEmbedSrc;\n\t}\n\t#beginLoad() {\n\t\tthis.#loadComplete.resolve();\n\t\tthis.#loadComplete = createPublicPromise();\n\t\treturn this.#loadComplete;\n\t}\n\tget paused() {\n\t\tif (!this.#playback) return this.#paused;\n\t\treturn this.#playback !== \"Playing\" && this.#playback !== \"Buffering\";\n\t}\n\tget ended() {\n\t\tif (this.#kind === \"channel\") return false;\n\t\treturn this.#playback === PLAYBACK_ENDED;\n\t}\n\tget seeking() {\n\t\treturn this.#seeking;\n\t}\n\tasync play() {\n\t\tawait this.#loadComplete;\n\t\tif (!this.#src) return;\n\t\tthis.#paused = false;\n\t\tthis.#sendCommand(3);\n\t}\n\tpause() {\n\t\tthis.#paused = true;\n\t\tthis.#sendCommand(2);\n\t}\n\tget currentTime() {\n\t\treturn this.#currentTime;\n\t}\n\tset currentTime(value) {\n\t\tif (this.#currentTime === value) return;\n\t\tthis.#currentTime = value;\n\t\tthis.#afterLoad(() => this.#sendCommand(4, value));\n\t}\n\tget duration() {\n\t\treturn this.#duration;\n\t}\n\tget volume() {\n\t\treturn this.#volume;\n\t}\n\tset volume(value) {\n\t\tif (this.#volume === value) return;\n\t\tthis.#volume = value;\n\t\tthis.dispatchEvent(new Event(\"volumechange\"));\n\t\tthis.#afterLoad(() => this.#sendCommand(11, value));\n\t}\n\tget muted() {\n\t\treturn this.#muted;\n\t}\n\tset muted(value) {\n\t\tif (this.#muted === value) return;\n\t\tthis.#muted = value;\n\t\tthis.dispatchEvent(new Event(\"volumechange\"));\n\t\tthis.#afterLoad(() => this.#sendCommand(10, value));\n\t}\n\tget playbackRate() {\n\t\treturn this.#playbackRate;\n\t}\n\tset playbackRate(value) {\n\t\tthis.#playbackRate = value;\n\t}\n\tget autoplay() {\n\t\treturn this.#autoplay;\n\t}\n\tset autoplay(value) {\n\t\tthis.#autoplay = value;\n\t}\n\tget defaultMuted() {\n\t\treturn this.#defaultMuted;\n\t}\n\tset defaultMuted(value) {\n\t\tthis.#defaultMuted = value;\n\t}\n\tget loop() {\n\t\treturn this.#loop;\n\t}\n\tset loop(value) {\n\t\tthis.#loop = value;\n\t}\n\tget controls() {\n\t\treturn this.#controls;\n\t}\n\tset controls(value) {\n\t\tthis.#controls = value;\n\t}\n\tget playsInline() {\n\t\treturn this.#playsInline;\n\t}\n\tset playsInline(value) {\n\t\tthis.#playsInline = value;\n\t}\n\tget preload() {\n\t\treturn this.#preload;\n\t}\n\tset preload(value) {\n\t\tthis.#preload = value;\n\t}\n\tget poster() {\n\t\treturn this.#poster;\n\t}\n\tset poster(value) {\n\t\tthis.#poster = value;\n\t}\n\t/** Twitch VOD or channel URL in `src`, plus embed parameters under `engine.twitch`. Replacing it re-derives `src`. */\n\tget source() {\n\t\treturn this.#source;\n\t}\n\tset source(value) {\n\t\tconst source = value ?? null;\n\t\tif (source === this.#source) return;\n\t\tconst src = source?.src ?? \"\";\n\t\tconst srcChanged = this.#src !== src;\n\t\tconst engineChanged = !deepEqual(this.#source?.engine?.twitch ?? null, source?.engine?.twitch ?? null);\n\t\tthis.#source = source;\n\t\tthis.#src = src;\n\t\tif (srcChanged || engineChanged) this.load();\n\t\tthis.dispatchEvent(new Event(\"sourcechange\"));\n\t}\n\tget buffered() {\n\t\treturn this.#progress > 0 ? createTimeRange(this.#currentTime, this.#currentTime + this.#progress) : EMPTY_TIME_RANGES;\n\t}\n\tget seekable() {\n\t\treturn this.#duration > 0 && Number.isFinite(this.#duration) ? createTimeRange(0, this.#duration) : EMPTY_TIME_RANGES;\n\t}\n\tget error() {\n\t\treturn this.#error;\n\t}\n\tget textTracks() {\n\t\treturn EMPTY_TEXT_TRACKS;\n\t}\n\tget isFullscreen() {\n\t\treturn this.#isFullscreen;\n\t}\n\tasync requestFullscreen() {\n\t\tif (!this.#target?.requestFullscreen) return;\n\t\tawait this.#target.requestFullscreen();\n\t\tthis.#isFullscreen = true;\n\t}\n\tasync exitFullscreen() {\n\t\tconst doc = globalThis.document;\n\t\tif (doc?.fullscreenElement && doc.fullscreenElement === this.#target) await doc.exitFullscreen();\n\t\tthis.#isFullscreen = false;\n\t}\n\t#createPlayer() {\n\t\tconst target = this.#target;\n\t\tif (!target || this.#messages) return false;\n\t\tconst existingSrc = target.getAttribute(\"src\");\n\t\tif (!existingSrc) {\n\t\t\tconst initialSrc = buildTwitchIframeSrc(this.#src, this.#snapshotProps());\n\t\t\tif (!initialSrc) {\n\t\t\t\tthis.#loadComplete.resolve();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ttarget.src = initialSrc;\n\t\t} else {\n\t\t\tconst withParent = withPageParent(existingSrc);\n\t\t\tif (withParent !== existingSrc) target.src = withParent;\n\t\t}\n\t\tthis.#kind = parseTwitchSource(this.#src)?.kind ?? null;\n\t\tthis.#embedSrc = target.getAttribute(\"src\") ?? \"\";\n\t\tconst attachId = this.#attachId;\n\t\tthis.#messages = new AbortController();\n\t\tglobalThis.addEventListener(\"message\", (event) => void this.#onMessage(event, attachId), { signal: this.#messages.signal });\n\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\treturn true;\n\t}\n\t#isStale(attachId) {\n\t\treturn attachId !== this.#attachId;\n\t}\n\t#afterLoad(fn) {\n\t\tthis.#loadComplete.then(() => {\n\t\t\tif (!this.#messages) return;\n\t\t\tfn();\n\t\t}, () => {});\n\t}\n\t#sendCommand(command, params) {\n\t\tconst embedWindow = this.#target?.contentWindow;\n\t\tif (!embedWindow) return;\n\t\tconst message = {\n\t\t\tnamespace: PLAYER_PROXY_NAMESPACE,\n\t\t\teventName: command,\n\t\t\tparams\n\t\t};\n\t\tembedWindow.postMessage(message, TWITCH_PLAYER_ORIGIN);\n\t}\n\t#snapshotProps() {\n\t\treturn {\n\t\t\tautoplay: this.#autoplay,\n\t\t\tdefaultMuted: this.#defaultMuted,\n\t\t\tloop: this.#loop,\n\t\t\tcontrols: this.#controls,\n\t\t\tplaysInline: this.#playsInline,\n\t\t\tpreload: this.#preload || twitchMediaDefaultProps.preload,\n\t\t\tsource: this.#source\n\t\t};\n\t}\n\t#resetState() {\n\t\tthis.#kind = null;\n\t\tthis.#playback = null;\n\t\tthis.#currentTime = 0;\n\t\tthis.#duration = NaN;\n\t\tthis.#muted = false;\n\t\tthis.#paused = !this.#autoplay;\n\t\tthis.#playbackRate = 1;\n\t\tthis.#progress = 0;\n\t\tthis.#readyState = READY_STATE_HAVE_NOTHING;\n\t\tthis.#seeking = false;\n\t\tthis.#loaded = false;\n\t\tthis.#volume = 1;\n\t\tthis.#error = null;\n\t\tthis.#isFullscreen = false;\n\t}\n\tasync #onMessage(event, attachId) {\n\t\tif (this.#isStale(attachId)) return;\n\t\tconst embedWindow = this.#target?.contentWindow;\n\t\tif (!embedWindow || event.source !== embedWindow) return;\n\t\tconst { data } = event;\n\t\tif (!isTwitchMessage(data)) return;\n\t\tif (data.namespace === \"twitch-embed\") {\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, STATE_SETTLE_MS));\n\t\t\tif (this.#isStale(attachId)) return;\n\t\t\tthis.#onEmbedEvent(data.eventName);\n\t\t\treturn;\n\t\t}\n\t\tif (data.eventName === \"UPDATE_STATE\") this.#onUpdateState(data.params ?? {});\n\t}\n\t#onEmbedEvent(eventName) {\n\t\tif (eventName !== \"ready\" && !this.#src) return;\n\t\tswitch (eventName) {\n\t\t\tcase \"ready\":\n\t\t\t\tthis.#playerReady = true;\n\t\t\t\tthis.#rebuilding = false;\n\t\t\t\tif (this.#pendingLoad) {\n\t\t\t\t\tthis.#pendingLoad = false;\n\t\t\t\t\tthis.load();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.#onLoaded();\n\t\t\t\treturn;\n\t\t\tcase \"seek\":\n\t\t\t\tthis.#seeking = true;\n\t\t\t\tthis.dispatchEvent(new Event(\"seeking\"));\n\t\t\t\treturn;\n\t\t\tcase \"playing\":\n\t\t\t\tif (this.#seeking) {\n\t\t\t\t\tthis.#seeking = false;\n\t\t\t\t\tthis.dispatchEvent(new Event(\"seeked\"));\n\t\t\t\t}\n\t\t\t\tthis.#readyState = READY_STATE_HAVE_FUTURE_DATA;\n\t\t\t\tthis.dispatchEvent(new Event(\"playing\"));\n\t\t\t\treturn;\n\t\t\tcase \"ended\":\n\t\t\t\tthis.dispatchEvent(new Event(\"ended\"));\n\t\t\t\tif (this.#loop) {\n\t\t\t\t\tthis.currentTime = 0;\n\t\t\t\t\tthis.play();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tdefault: this.dispatchEvent(new Event(eventName));\n\t\t}\n\t}\n\t#onUpdateState(state) {\n\t\tif (this.#rebuilding) return;\n\t\tif (!this.#src) return;\n\t\tif (this.#playerReady && !this.#loaded) this.#onLoaded();\n\t\tif (state.playback && state.playback !== this.#playback) {\n\t\t\tif (state.playback === \"Buffering\") this.dispatchEvent(new Event(\"waiting\"));\n\t\t\tthis.#playback = state.playback;\n\t\t}\n\t\tif (this.#kind !== \"channel\" && isNumber(state.duration) && state.duration !== this.#duration) {\n\t\t\tthis.#duration = state.duration;\n\t\t\tthis.dispatchEvent(new Event(\"durationchange\"));\n\t\t}\n\t\tif (isNumber(state.currentTime) && state.currentTime !== this.#currentTime) {\n\t\t\tthis.#currentTime = state.currentTime;\n\t\t\tthis.dispatchEvent(new Event(\"timeupdate\"));\n\t\t}\n\t\tconst volumeChanged = isNumber(state.volume) && state.volume !== this.#volume;\n\t\tconst mutedChanged = !isUndefined(state.muted) && state.muted !== this.#muted;\n\t\tif (volumeChanged || mutedChanged) {\n\t\t\tif (isNumber(state.volume)) this.#volume = state.volume;\n\t\t\tif (!isUndefined(state.muted)) this.#muted = state.muted;\n\t\t\tthis.dispatchEvent(new Event(\"volumechange\"));\n\t\t}\n\t\tconst bufferSize = state.stats?.videoStats?.bufferSize;\n\t\tif (isNumber(bufferSize) && bufferSize !== this.#progress) {\n\t\t\tthis.#progress = bufferSize;\n\t\t\tif (this.#readyState >= READY_STATE_HAVE_FUTURE_DATA && bufferSize > 0) this.#readyState = READY_STATE_HAVE_ENOUGH_DATA;\n\t\t\tthis.dispatchEvent(new Event(\"progress\"));\n\t\t}\n\t}\n\t#onLoaded() {\n\t\tif (this.#loaded) return;\n\t\tthis.#loaded = true;\n\t\tthis.#readyState = READY_STATE_HAVE_METADATA;\n\t\tthis.dispatchEvent(new Event(\"loadedmetadata\"));\n\t\tif (this.#kind === \"channel\") {\n\t\t\tthis.#duration = Number.POSITIVE_INFINITY;\n\t\t\tthis.dispatchEvent(new Event(\"durationchange\"));\n\t\t}\n\t\tthis.dispatchEvent(new Event(\"loadcomplete\"));\n\t\tthis.#loadComplete.resolve();\n\t}\n};\nfunction isContentOnlyChange(current, next) {\n\tconst currentBase = withoutContent(current);\n\tconst nextBase = withoutContent(next);\n\treturn currentBase !== null && currentBase === nextBase;\n}\nfunction withPageParent(embedSrc) {\n\tconst hostname = globalThis.location?.hostname;\n\tif (!hostname) return embedSrc;\n\tlet url;\n\ttry {\n\t\turl = new URL(embedSrc);\n\t} catch {\n\t\treturn embedSrc;\n\t}\n\tif (url.origin !== \"https://player.twitch.tv\") return embedSrc;\n\tif (url.searchParams.getAll(\"parent\").includes(hostname)) return embedSrc;\n\turl.searchParams.append(\"parent\", hostname);\n\treturn url.toString();\n}\nfunction withoutContent(embedSrc) {\n\tif (!embedSrc) return null;\n\ttry {\n\t\tconst url = new URL(embedSrc);\n\t\turl.searchParams.delete(\"video\");\n\t\turl.searchParams.delete(\"channel\");\n\t\treturn url.toString();\n\t} catch {\n\t\treturn null;\n\t}\n}\nconst STATE_SETTLE_MS = 10;\nconst READY_STATE_HAVE_NOTHING = 0;\nconst READY_STATE_HAVE_METADATA = 1;\nconst READY_STATE_HAVE_FUTURE_DATA = 3;\nconst READY_STATE_HAVE_ENOUGH_DATA = 4;\n//#endregion\nexport { TwitchMedia };\n\n//# sourceMappingURL=media.js.map","import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { buildTwitchIframeSrc, TwitchMedia } from '@videojs/media/dom/twitch';\nimport { escapeHtml } from '@videojs/utils/string';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\n\nclass TwitchCustomMediaElement extends CustomMediaElement('iframe', TwitchMedia) {\n static override getTemplateHTML = (attrs: Record<string, string>): string => {\n const initialSrc = buildTwitchIframeSrc(attrs.src ?? '', templateAttrsToEmbedProps(attrs));\n const srcAttr = initialSrc ? ` src=\"${escapeHtml(initialSrc)}\"` : '';\n return /*html*/ `\n <style>\n :host {\n display: inline-block;\n min-width: 300px;\n min-height: 150px;\n position: relative;\n }\n iframe {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n :host(:not([controls])) {\n pointer-events: none;\n }\n </style>\n <iframe\n part=\"iframe\"\n ${srcAttr}\n allow=\"accelerometer; fullscreen; autoplay; encrypted-media; picture-in-picture;\"\n sandbox=\"allow-modals allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox\"\n scrolling=\"no\"\n frameborder=\"0\"\n width=\"100%\"\n height=\"100%\"\n referrerpolicy=\"${escapeHtml(attrs.referrerpolicy ?? '')}\"\n ></iframe>\n `;\n };\n}\n\nfunction templateAttrsToEmbedProps(attrs: Record<string, string>) {\n return {\n autoplay: attrs.autoplay !== undefined,\n defaultMuted: attrs.muted !== undefined,\n loop: attrs.loop !== undefined,\n controls: attrs.controls !== undefined,\n playsInline: attrs.playsinline !== undefined,\n preload: (attrs.preload as 'none' | 'metadata' | 'auto' | undefined) ?? 'metadata',\n };\n}\n\nexport class TwitchVideo extends MediaAttachMixin(TwitchCustomMediaElement) {}\n","import { TwitchVideo } from '../../media/twitch-video';\nimport { safeDefine } from '../safe-define';\n\nexport class TwitchVideoElement extends TwitchVideo {\n static readonly tagName = 'twitch-video';\n}\n\nsafeDefine(TwitchVideoElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TwitchVideoElement.tagName]: TwitchVideoElement;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|