@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
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../../hls-js-
|
|
1
|
+
import{t as e}from"../../hls-js-CATW7NBm.js";export{e as MuxVideoElement};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as CustomMediaElement } from "../../custom-media-element-D2JoODKd.js";
|
|
2
2
|
import { i as safeDefine } from "../../context-OhQY847V.js";
|
|
3
|
-
import { t as HlsVideoMedia } from "../../media-
|
|
3
|
+
import { t as HlsVideoMedia } from "../../media-oa3nyL2o.js";
|
|
4
4
|
import { t as MediaAttachMixin } from "../../media-attach-mixin-uThv5NL_.js";
|
|
5
5
|
import { t as MuxMediaMixin } from "../../adapter-XTen-YVQ.js";
|
|
6
6
|
import { t as MuxVideoMixin } from "../../mixin-NrVEcofN.js";
|
|
@@ -46,4 +46,5 @@ var MuxVideoElement = class extends MuxVideo {
|
|
|
46
46
|
safeDefine(MuxVideoElement);
|
|
47
47
|
|
|
48
48
|
//#endregion
|
|
49
|
+
export { MuxVideoElement };
|
|
49
50
|
//# sourceMappingURL=spf.dev.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"../../custom-media-element-8pSkwn42.js";import{i as t}from"../../context-C2rsoDxk.js";import{t as n}from"../../media-
|
|
1
|
+
import{t as e}from"../../custom-media-element-8pSkwn42.js";import{i as t}from"../../context-C2rsoDxk.js";import{t as n}from"../../media-CPVSKLdk.js";import{t as r}from"../../media-attach-mixin-Igi3-1UG.js";import{t as i}from"../../adapter-Bk03SAxn.js";import{t as a}from"../../mixin-BXfRWfYu.js";const o=i(n),s=a(r(e(`video`,class extends o{})));var c=class extends s{},l=class extends c{static{this.tagName=`mux-video`}};t(l);export{l as MuxVideoElement};
|
|
2
2
|
//# sourceMappingURL=spf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spf.js","names":[],"sources":["../../../../spf/dist/default/playback/adapters/mux-video/media.js","../../../src/media/mux-video/spf.ts","../../../src/define/media/mux-video/spf.ts"],"sourcesContent":["import { HlsVideoMedia } from \"../hls-video/media.js\";\nimport { MuxMediaMixin } from \"./adapter.js\";\n//#region src/playback/adapters/mux-video/media.ts\nconst MuxVideoMediaBase = MuxMediaMixin(HlsVideoMedia);\n/**\n* The Mux Media over the SPF HLS engine.\n*\n* Mirrors `@videojs/media/dom/mux`'s hls.js-backed `MuxMedia` — same class shape,\n* same `src`/`source` relationship, same derived `contentData` — over a different\n* engine, though named for the flavor rather than sharing that class's name. It\n* carries no `engine` or `preferPlayback`: SPF publishes no\n* engine-shaped config for a consumer to pass, so the source is Mux identity and\n* nothing else.\n*\n* `source.drm` is accepted but inert. SPF prunes encrypted renditions and reports\n* unsupported DRM, and `alternativeMediaSuggestion` points at the hls.js-backed\n* import, so a protected source fails with copy that says where to go.\n*/\nvar MuxVideoMedia = class extends MuxVideoMediaBase {};\n//#endregion\nexport { MuxVideoMedia };\n\n//# sourceMappingURL=media.js.map","import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { MuxVideoMedia } from '@videojs/spf/mux-video';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\nimport { MuxVideoMixin } from './mixin';\n\nconst MuxVideoBase = MuxVideoMixin(MediaAttachMixin(CustomMediaElement('video', MuxVideoMedia)));\n\n/**\n * `<mux-video>` over the SPF-backed Mux Media instead of the hls.js-backed one.\n *\n * Shares its name with the flavor in `./hls-js` on purpose: the import path picks\n * the engine, and nothing else about the surface moves. Deliberately not exported\n * from this directory's barrel, so importing one flavor never pulls the other's\n * engine in with it.\n */\nexport class MuxVideo extends MuxVideoBase {}\n","import { MuxVideo } from '../../../media/mux-video/spf';\nimport { safeDefine } from '../../safe-define';\n\nexport class MuxVideoElement extends MuxVideo {\n static readonly tagName = 'mux-video';\n}\n\nsafeDefine(MuxVideoElement);\n\ndeclare global {\n /**\n * The Mux video flavors in the build, keyed by engine.\n *\n * Both flavors are the same element over a different engine, so both claim\n * `<mux-video>` and the import path is what chooses. Each flavor's define entry\n * adds its own key here, so the tag types as the flavor that was imported — or as\n * the union of both when both were, which is the load-order coin flip that a\n * single type per key cannot describe any better.\n *\n * Importing both is not a supported configuration: one registration wins and the\n * other is dropped. `safeDefine`'s tag-name override is the escape hatch for\n * putting the loser somewhere reachable, `<mux-video-spf>` by convention.\n */\n interface MuxVideoFlavors {\n spf: MuxVideoElement;\n }\n\n interface HTMLElementTagNameMap {\n 'mux-video': MuxVideoFlavors[keyof MuxVideoFlavors];\n // Only reachable once another flavor holds the primary tag, and only via the\n // override — so it types as `never` in a build where this is the lone flavor.\n 'mux-video-spf': Exclude<keyof MuxVideoFlavors, 'spf'> extends never ? never : MuxVideoElement;\n }\n}\n"],"mappings":"wSAGA,MAAM,EAAoB,EAAc,CAAa,ECE/C,EAAe,EAAc,EAAiB,EAAmB,QAAS,cDa9C,CAAkB,CAAC,CCbwC,CAAC,CAAC,EAU/F,IAAa,EAAb,cAA8B,CAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"spf.js","names":[],"sources":["../../../../spf/dist/default/playback/adapters/mux-video/media.js","../../../src/media/mux-video/spf.ts","../../../src/define/media/mux-video/spf.ts"],"sourcesContent":["import { HlsVideoMedia } from \"../hls-video/media.js\";\nimport { MuxMediaMixin } from \"./adapter.js\";\n//#region src/playback/adapters/mux-video/media.ts\nconst MuxVideoMediaBase = MuxMediaMixin(HlsVideoMedia);\n/**\n* The Mux Media over the SPF HLS engine.\n*\n* Mirrors `@videojs/media/dom/mux`'s hls.js-backed `MuxMedia` — same class shape,\n* same `src`/`source` relationship, same derived `contentData` — over a different\n* engine, though named for the flavor rather than sharing that class's name. It\n* carries no `engine` or `preferPlayback`: SPF publishes no\n* engine-shaped config for a consumer to pass, so the source is Mux identity and\n* nothing else.\n*\n* `source.drm` is accepted but inert. SPF prunes encrypted renditions and reports\n* unsupported DRM, and `alternativeMediaSuggestion` points at the hls.js-backed\n* import, so a protected source fails with copy that says where to go.\n*/\nvar MuxVideoMedia = class extends MuxVideoMediaBase {};\n//#endregion\nexport { MuxVideoMedia };\n\n//# sourceMappingURL=media.js.map","import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { MuxVideoMedia } from '@videojs/spf/mux-video';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\nimport { MuxVideoMixin } from './mixin';\n\nconst MuxVideoBase = MuxVideoMixin(MediaAttachMixin(CustomMediaElement('video', MuxVideoMedia)));\n\n/**\n * `<mux-video>` over the SPF-backed Mux Media instead of the hls.js-backed one.\n *\n * Shares its name with the flavor in `./hls-js` on purpose: the import path picks\n * the engine, and nothing else about the surface moves. Deliberately not exported\n * from this directory's barrel, so importing one flavor never pulls the other's\n * engine in with it.\n */\nexport class MuxVideo extends MuxVideoBase {}\n","import { MuxVideo } from '../../../media/mux-video/spf';\nimport { safeDefine } from '../../safe-define';\n\nexport class MuxVideoElement extends MuxVideo {\n static readonly tagName = 'mux-video';\n}\n\nsafeDefine(MuxVideoElement);\n\ndeclare global {\n /**\n * The Mux video flavors in the build, keyed by engine.\n *\n * Both flavors are the same element over a different engine, so both claim\n * `<mux-video>` and the import path is what chooses. Each flavor's define entry\n * adds its own key here, so the tag types as the flavor that was imported — or as\n * the union of both when both were, which is the load-order coin flip that a\n * single type per key cannot describe any better.\n *\n * Importing both is not a supported configuration: one registration wins and the\n * other is dropped. `safeDefine`'s tag-name override is the escape hatch for\n * putting the loser somewhere reachable, `<mux-video-spf>` by convention.\n */\n interface MuxVideoFlavors {\n spf: MuxVideoElement;\n }\n\n interface HTMLElementTagNameMap {\n 'mux-video': MuxVideoFlavors[keyof MuxVideoFlavors];\n // Only reachable once another flavor holds the primary tag, and only via the\n // override — so it types as `never` in a build where this is the lone flavor.\n 'mux-video-spf': Exclude<keyof MuxVideoFlavors, 'spf'> extends never ? never : MuxVideoElement;\n }\n}\n"],"mappings":"wSAGA,MAAM,EAAoB,EAAc,CAAa,ECE/C,EAAe,EAAc,EAAiB,EAAmB,QAAS,cDa9C,CAAkB,CAAC,CCbwC,CAAC,CAAC,EAU/F,IAAa,EAAb,cAA8B,CAAa,CAAC,ECZ/B,EAAb,cAAqC,CAAS,QAClB,KAAA,QAAA,YAC5B,EAEA,EAAW,CAAe"}
|
package/cdn/media/mux-video.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"../hls-js-
|
|
1
|
+
import{t as e}from"../hls-js-CATW7NBm.js";export{e as MuxVideoElement};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"../custom-media-element-8pSkwn42.js";import{i as t}from"../context-C2rsoDxk.js";import{t as n}from"../media-Cr1OXUVt.js";import{t as r}from"../media-attach-mixin-Igi3-1UG.js";var i=class extends r(e(`video`,n)){}
|
|
1
|
+
import{t as e}from"../custom-media-element-8pSkwn42.js";import{i as t}from"../context-C2rsoDxk.js";import{t as n}from"../media-Cr1OXUVt.js";import{t as r}from"../media-attach-mixin-Igi3-1UG.js";var i=class extends r(e(`video`,n)){},a=class extends i{static{this.tagName=`native-hls-video`}};t(a);export{a as NativeHlsVideoElement};
|
|
2
2
|
//# sourceMappingURL=native-hls-video.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-hls-video.js","names":[],"sources":["../../src/media/native-hls-video/media.ts","../../src/define/media/native-hls-video.ts"],"sourcesContent":["import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { NativeHlsMedia } from '@videojs/media/dom/native-hls';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\n\nexport class NativeHlsVideo extends MediaAttachMixin(CustomMediaElement('video', NativeHlsMedia)) {}\n","import { NativeHlsVideo } from '../../media/native-hls-video';\nimport { safeDefine } from '../safe-define';\n\nexport class NativeHlsVideoElement extends NativeHlsVideo {\n static readonly tagName = 'native-hls-video';\n}\n\nsafeDefine(NativeHlsVideoElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [NativeHlsVideoElement.tagName]: NativeHlsVideoElement;\n }\n}\n"],"mappings":"kMAIA,IAAa,EAAb,cAAoC,EAAiB,EAAmB,QAAS,CAAc,CAAC,CAAC,AAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"native-hls-video.js","names":[],"sources":["../../src/media/native-hls-video/media.ts","../../src/define/media/native-hls-video.ts"],"sourcesContent":["import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { NativeHlsMedia } from '@videojs/media/dom/native-hls';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\n\nexport class NativeHlsVideo extends MediaAttachMixin(CustomMediaElement('video', NativeHlsMedia)) {}\n","import { NativeHlsVideo } from '../../media/native-hls-video';\nimport { safeDefine } from '../safe-define';\n\nexport class NativeHlsVideoElement extends NativeHlsVideo {\n static readonly tagName = 'native-hls-video';\n}\n\nsafeDefine(NativeHlsVideoElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [NativeHlsVideoElement.tagName]: NativeHlsVideoElement;\n }\n}\n"],"mappings":"kMAIA,IAAa,EAAb,cAAoC,EAAiB,EAAmB,QAAS,CAAc,CAAC,CAAC,AAAC,CAAC,ECDtF,EAAb,cAA2C,CAAe,QAC9B,KAAA,QAAA,mBAC5B,EAEA,EAAW,CAAqB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
import { o as isNumber } from "../predicate-faYxAB6Z.js";
|
|
2
|
+
import { t as deepEqual } from "../deep-equal-DOfcXiSw.js";
|
|
3
|
+
import { t as CustomMediaElement } from "../custom-media-element-D2JoODKd.js";
|
|
4
|
+
import { a as escapeHtml } from "../attributes-c6az3W3y.js";
|
|
5
|
+
import { i as safeDefine } from "../context-OhQY847V.js";
|
|
6
|
+
import { t as loadScript } from "../script-erPJaaTz.js";
|
|
7
|
+
import { n as createTimeRange, r as createPublicPromise, t as MediaPlayedRangesMixin } from "../media-played-ranges-Yd9acuMt.js";
|
|
8
|
+
import { n as tryCall, t as serializeEmbedParams } from "../embed-params-W6T88S8x.js";
|
|
9
|
+
import { n as EMPTY_TEXT_TRACKS, r as EMPTY_TIME_RANGES } from "../constants-CsSwyIX6.js";
|
|
10
|
+
import { t as MediaError } from "../media-error-zO-Hg4un.js";
|
|
11
|
+
import { t as MediaAttachMixin } from "../media-attach-mixin-uThv5NL_.js";
|
|
12
|
+
|
|
13
|
+
//#region ../media/dist/dev/dom/spotify/props.js
|
|
14
|
+
const spotifyMediaDefaultProps = {
|
|
15
|
+
src: "",
|
|
16
|
+
autoplay: false,
|
|
17
|
+
loop: false,
|
|
18
|
+
controls: false,
|
|
19
|
+
playsInline: true,
|
|
20
|
+
preload: "metadata",
|
|
21
|
+
poster: "",
|
|
22
|
+
source: null
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region ../media/dist/dev/dom/spotify/source.js
|
|
27
|
+
/**
|
|
28
|
+
* Parse a Spotify source string. Recognizes `open.spotify.com` URLs for every
|
|
29
|
+
* embeddable entity — including the localized (`/intl-de/`) and already-embedded
|
|
30
|
+
* (`/embed/`) forms, since the entity type and id sit in the same place in all of
|
|
31
|
+
* them — `spotify:<type>:<id>` URIs, and start positions via the `t` parameter.
|
|
32
|
+
*/
|
|
33
|
+
function parseSpotifySource(src) {
|
|
34
|
+
if (!src) return null;
|
|
35
|
+
const match = MATCH_URI.exec(src) ?? MATCH_SRC.exec(src);
|
|
36
|
+
const type = match?.[1]?.toLowerCase();
|
|
37
|
+
const id = match?.[2];
|
|
38
|
+
if (!type || !id) return null;
|
|
39
|
+
return {
|
|
40
|
+
type,
|
|
41
|
+
id,
|
|
42
|
+
startTime: parseStartTime(src)
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** Build the iframe `src` URL for an initial Spotify embed from the given props. */
|
|
46
|
+
function buildSpotifyIframeSrc(src, props = {}) {
|
|
47
|
+
const parsed = parseSpotifySource(src);
|
|
48
|
+
if (!parsed) return "";
|
|
49
|
+
const { preferVideo, referrerPolicy: _referrerPolicy, ...spotify } = props.source?.engine?.spotify ?? {};
|
|
50
|
+
const params = {
|
|
51
|
+
t: parsed.startTime,
|
|
52
|
+
...spotify
|
|
53
|
+
};
|
|
54
|
+
const videoPath = preferVideo ? "/video" : "";
|
|
55
|
+
const query = serializeEmbedParams(params);
|
|
56
|
+
return `${EMBED_BASE}/embed/${parsed.type}/${parsed.id}${videoPath}${query ? `?${query}` : ""}`;
|
|
57
|
+
}
|
|
58
|
+
/** Parse the `t` parameter from a Spotify share URL. Spotify spells it in seconds. */
|
|
59
|
+
function parseStartTime(url) {
|
|
60
|
+
const value = /[?&]t=(\d+)/.exec(url)?.[1];
|
|
61
|
+
return value ? Number.parseInt(value, 10) : null;
|
|
62
|
+
}
|
|
63
|
+
const EMBED_BASE = "https://open.spotify.com";
|
|
64
|
+
const MATCH_SRC = /open\.spotify\.com\/(?:[\w-]+\/)*?(track|episode|album|playlist|show|artist)\/(\w+)/i;
|
|
65
|
+
const MATCH_URI = /^spotify:(track|episode|album|playlist|show|artist):(\w+)$/i;
|
|
66
|
+
|
|
67
|
+
//#endregion
|
|
68
|
+
//#region ../media/dist/dev/dom/spotify/iframe-api.js
|
|
69
|
+
const API_URL = "https://open.spotify.com/embed/iframe-api/v1";
|
|
70
|
+
let apiPromise = null;
|
|
71
|
+
/** Load the iframe API once, reusing it if another host already pulled it in. */
|
|
72
|
+
function loadSpotifyIframeApi() {
|
|
73
|
+
const globals = globalThis;
|
|
74
|
+
const existing = globals.SpotifyIframeApi;
|
|
75
|
+
if (existing) return Promise.resolve(existing);
|
|
76
|
+
apiPromise ??= new Promise((resolve, reject) => {
|
|
77
|
+
const hostReady = globals.onSpotifyIframeApiReady;
|
|
78
|
+
globals.onSpotifyIframeApiReady = (api) => {
|
|
79
|
+
resolve(api);
|
|
80
|
+
hostReady?.(api);
|
|
81
|
+
};
|
|
82
|
+
loadScript(API_URL).catch(reject);
|
|
83
|
+
}).catch((error) => {
|
|
84
|
+
apiPromise = null;
|
|
85
|
+
throw error;
|
|
86
|
+
});
|
|
87
|
+
return apiPromise;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region ../media/dist/dev/dom/spotify/media.js
|
|
92
|
+
const SpotifyMediaBase = MediaPlayedRangesMixin(EventTarget);
|
|
93
|
+
/**
|
|
94
|
+
* @fires sourcechange - Fired when `source` changes, either directly or by resolving a new `src`. Read `source` for the new value.
|
|
95
|
+
*/
|
|
96
|
+
var SpotifyMedia = class extends SpotifyMediaBase {
|
|
97
|
+
#target = null;
|
|
98
|
+
#controller = null;
|
|
99
|
+
#controllerReady = false;
|
|
100
|
+
#pendingLoad = false;
|
|
101
|
+
#creatingController = false;
|
|
102
|
+
#loadComplete = createPublicPromise();
|
|
103
|
+
#attachId = 0;
|
|
104
|
+
#src = spotifyMediaDefaultProps.src;
|
|
105
|
+
#autoplay = spotifyMediaDefaultProps.autoplay;
|
|
106
|
+
#loop = spotifyMediaDefaultProps.loop;
|
|
107
|
+
#controls = spotifyMediaDefaultProps.controls;
|
|
108
|
+
#playsInline = spotifyMediaDefaultProps.playsInline;
|
|
109
|
+
#preload = spotifyMediaDefaultProps.preload;
|
|
110
|
+
#poster = spotifyMediaDefaultProps.poster;
|
|
111
|
+
#source = spotifyMediaDefaultProps.source;
|
|
112
|
+
#paused = true;
|
|
113
|
+
#ended = false;
|
|
114
|
+
#seeking = false;
|
|
115
|
+
#loaded = false;
|
|
116
|
+
#currentTime = 0;
|
|
117
|
+
#duration = NaN;
|
|
118
|
+
#readyState = READY_STATE_HAVE_NOTHING;
|
|
119
|
+
#error = null;
|
|
120
|
+
#waiting = false;
|
|
121
|
+
#pauseRequested = false;
|
|
122
|
+
#closeToEnded = false;
|
|
123
|
+
static PLAYER_SOFTWARE_NAME = "spotify-audio";
|
|
124
|
+
/** Underlying Spotify iframe API controller (null until the API loads). */
|
|
125
|
+
get engine() {
|
|
126
|
+
return this.#controller;
|
|
127
|
+
}
|
|
128
|
+
/** The iframe holding the embed, which everything from the embed URL down is written to. */
|
|
129
|
+
get target() {
|
|
130
|
+
return this.#target;
|
|
131
|
+
}
|
|
132
|
+
/** Bind the iframe hosting the embed; the API and controller follow as soon as an embed URL resolves. */
|
|
133
|
+
attach(target) {
|
|
134
|
+
if (!target || this.#target === target) return;
|
|
135
|
+
if (this.#target) this.detach();
|
|
136
|
+
this.#target = target;
|
|
137
|
+
this.#beginLoad();
|
|
138
|
+
this.#createPlayer();
|
|
139
|
+
}
|
|
140
|
+
detach() {
|
|
141
|
+
if (!this.#target) return;
|
|
142
|
+
this.#attachId++;
|
|
143
|
+
tryCall(() => {
|
|
144
|
+
if (this.#controller) {
|
|
145
|
+
this.#controller.iframeElement = createControllerPlaceholderFrame();
|
|
146
|
+
this.#controller.destroy();
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
this.#controller = null;
|
|
150
|
+
this.#controllerReady = false;
|
|
151
|
+
this.#pendingLoad = false;
|
|
152
|
+
this.#creatingController = false;
|
|
153
|
+
this.#target = null;
|
|
154
|
+
this.#loadComplete.resolve();
|
|
155
|
+
this.#resetState();
|
|
156
|
+
}
|
|
157
|
+
destroy() {
|
|
158
|
+
this.detach();
|
|
159
|
+
super.destroy();
|
|
160
|
+
}
|
|
161
|
+
get src() {
|
|
162
|
+
return this.#src;
|
|
163
|
+
}
|
|
164
|
+
/** Spotify URL or URI. Setting it re-derives `source`, carrying its embed options over. */
|
|
165
|
+
set src(value) {
|
|
166
|
+
const { engine } = this.#source ?? {};
|
|
167
|
+
const next = {
|
|
168
|
+
...engine && { engine },
|
|
169
|
+
...value && { src: value }
|
|
170
|
+
};
|
|
171
|
+
this.source = Object.keys(next).length > 0 ? next : null;
|
|
172
|
+
}
|
|
173
|
+
get currentSrc() {
|
|
174
|
+
return this.#target?.getAttribute("src") ?? "";
|
|
175
|
+
}
|
|
176
|
+
get readyState() {
|
|
177
|
+
return this.#readyState;
|
|
178
|
+
}
|
|
179
|
+
/** Reload the current source via the iframe API; deferred until the controller is ready. */
|
|
180
|
+
async load() {
|
|
181
|
+
if (!this.#controller || !this.#controllerReady) {
|
|
182
|
+
this.#pendingLoad = !!this.#target;
|
|
183
|
+
if (this.#target && !this.#controller && !this.#creatingController) {
|
|
184
|
+
const load = this.#beginLoad();
|
|
185
|
+
await Promise.resolve();
|
|
186
|
+
if (load !== this.#loadComplete) return;
|
|
187
|
+
this.#createPlayer();
|
|
188
|
+
}
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const load = this.#beginLoad();
|
|
192
|
+
this.#resetState();
|
|
193
|
+
this.dispatchEvent(new Event("emptied"));
|
|
194
|
+
if (!this.#src) {
|
|
195
|
+
load.resolve();
|
|
196
|
+
tryCall(() => this.#controller?.pause());
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
this.dispatchEvent(new Event("loadstart"));
|
|
200
|
+
const parsed = parseSpotifySource(this.#src);
|
|
201
|
+
if (!parsed) {
|
|
202
|
+
this.#error = new MediaError(`Unrecognized Spotify source: ${this.#src}`, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
|
|
203
|
+
this.dispatchEvent(new Event("error"));
|
|
204
|
+
load.resolve();
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const target = this.#target;
|
|
208
|
+
const embedSrc = buildSpotifyIframeSrc(this.#src, this.#snapshotProps());
|
|
209
|
+
const embeddedSrc = target?.getAttribute("src") ?? "";
|
|
210
|
+
const rebuild = embedOptionsOf(embedSrc) !== embedOptionsOf(embeddedSrc) || isVideoEmbed(embedSrc) && embedPathOf(embedSrc) !== embedPathOf(embeddedSrc);
|
|
211
|
+
if (target && embedSrc && rebuild) {
|
|
212
|
+
target.src = embedSrc;
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
this.#controller.loadUri(`spotify:${parsed.type}:${parsed.id}`);
|
|
216
|
+
const startTime = this.#source?.engine?.spotify?.t ?? parsed.startTime;
|
|
217
|
+
if (isNumber(startTime)) this.currentTime = startTime;
|
|
218
|
+
}
|
|
219
|
+
#beginLoad() {
|
|
220
|
+
this.#loadComplete.resolve();
|
|
221
|
+
this.#loadComplete = createPublicPromise();
|
|
222
|
+
return this.#loadComplete;
|
|
223
|
+
}
|
|
224
|
+
get paused() {
|
|
225
|
+
return this.#paused;
|
|
226
|
+
}
|
|
227
|
+
get ended() {
|
|
228
|
+
return this.#ended;
|
|
229
|
+
}
|
|
230
|
+
get seeking() {
|
|
231
|
+
return this.#seeking;
|
|
232
|
+
}
|
|
233
|
+
async play() {
|
|
234
|
+
await this.#loadComplete;
|
|
235
|
+
if (!this.#src) return;
|
|
236
|
+
this.#controller?.resume();
|
|
237
|
+
}
|
|
238
|
+
pause() {
|
|
239
|
+
this.#pauseRequested = true;
|
|
240
|
+
this.#controller?.pause();
|
|
241
|
+
}
|
|
242
|
+
get currentTime() {
|
|
243
|
+
return this.#currentTime;
|
|
244
|
+
}
|
|
245
|
+
set currentTime(value) {
|
|
246
|
+
if (this.#currentTime === value) return;
|
|
247
|
+
this.#seeking = true;
|
|
248
|
+
this.#closeToEnded = false;
|
|
249
|
+
this.#ended = false;
|
|
250
|
+
this.#currentTime = value;
|
|
251
|
+
this.dispatchEvent(new Event("seeking"));
|
|
252
|
+
this.dispatchEvent(new Event("timeupdate"));
|
|
253
|
+
this.#afterLoad((controller) => controller.seek(value));
|
|
254
|
+
}
|
|
255
|
+
get duration() {
|
|
256
|
+
return this.#duration;
|
|
257
|
+
}
|
|
258
|
+
get autoplay() {
|
|
259
|
+
return this.#autoplay;
|
|
260
|
+
}
|
|
261
|
+
set autoplay(value) {
|
|
262
|
+
this.#autoplay = value;
|
|
263
|
+
}
|
|
264
|
+
get loop() {
|
|
265
|
+
return this.#loop;
|
|
266
|
+
}
|
|
267
|
+
set loop(value) {
|
|
268
|
+
this.#loop = value;
|
|
269
|
+
}
|
|
270
|
+
get controls() {
|
|
271
|
+
return this.#controls;
|
|
272
|
+
}
|
|
273
|
+
set controls(value) {
|
|
274
|
+
this.#controls = value;
|
|
275
|
+
}
|
|
276
|
+
get playsInline() {
|
|
277
|
+
return this.#playsInline;
|
|
278
|
+
}
|
|
279
|
+
set playsInline(value) {
|
|
280
|
+
this.#playsInline = value;
|
|
281
|
+
}
|
|
282
|
+
get preload() {
|
|
283
|
+
return this.#preload;
|
|
284
|
+
}
|
|
285
|
+
set preload(value) {
|
|
286
|
+
this.#preload = value;
|
|
287
|
+
}
|
|
288
|
+
get poster() {
|
|
289
|
+
return this.#poster;
|
|
290
|
+
}
|
|
291
|
+
set poster(value) {
|
|
292
|
+
this.#poster = value;
|
|
293
|
+
}
|
|
294
|
+
/** Spotify URL or URI in `src`, plus embed options under `engine.spotify`. Replacing it re-derives `src`. */
|
|
295
|
+
get source() {
|
|
296
|
+
return this.#source;
|
|
297
|
+
}
|
|
298
|
+
set source(value) {
|
|
299
|
+
const source = value ?? null;
|
|
300
|
+
if (source === this.#source) return;
|
|
301
|
+
const src = source?.src ?? "";
|
|
302
|
+
const srcChanged = this.#src !== src;
|
|
303
|
+
const engineChanged = !deepEqual(this.#source?.engine?.spotify ?? null, source?.engine?.spotify ?? null);
|
|
304
|
+
this.#source = source;
|
|
305
|
+
this.#src = src;
|
|
306
|
+
if (srcChanged || engineChanged) this.load();
|
|
307
|
+
this.dispatchEvent(new Event("sourcechange"));
|
|
308
|
+
}
|
|
309
|
+
get buffered() {
|
|
310
|
+
return this.#currentTime > 0 ? createTimeRange(0, this.#currentTime) : EMPTY_TIME_RANGES;
|
|
311
|
+
}
|
|
312
|
+
get seekable() {
|
|
313
|
+
return this.#duration > 0 && Number.isFinite(this.#duration) ? createTimeRange(0, this.#duration) : EMPTY_TIME_RANGES;
|
|
314
|
+
}
|
|
315
|
+
get error() {
|
|
316
|
+
return this.#error;
|
|
317
|
+
}
|
|
318
|
+
/** Always empty: the embed exposes no captions or other text tracks. */
|
|
319
|
+
get textTracks() {
|
|
320
|
+
return EMPTY_TEXT_TRACKS;
|
|
321
|
+
}
|
|
322
|
+
#createPlayer() {
|
|
323
|
+
const target = this.#target;
|
|
324
|
+
if (!target || this.#controller || this.#creatingController) return false;
|
|
325
|
+
if (!target.getAttribute("src")) {
|
|
326
|
+
const initialSrc = buildSpotifyIframeSrc(this.#src, this.#snapshotProps());
|
|
327
|
+
if (!initialSrc) {
|
|
328
|
+
this.#loadComplete.resolve();
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
331
|
+
target.src = initialSrc;
|
|
332
|
+
}
|
|
333
|
+
this.#creatingController = true;
|
|
334
|
+
this.dispatchEvent(new Event("loadstart"));
|
|
335
|
+
this.#createControllerApi(target);
|
|
336
|
+
return true;
|
|
337
|
+
}
|
|
338
|
+
async #createControllerApi(target) {
|
|
339
|
+
const attachId = this.#attachId;
|
|
340
|
+
let api;
|
|
341
|
+
try {
|
|
342
|
+
api = await loadSpotifyIframeApi();
|
|
343
|
+
} catch {
|
|
344
|
+
if (this.#isStale(attachId)) return;
|
|
345
|
+
this.#creatingController = false;
|
|
346
|
+
this.#error = new MediaError("Failed to load the Spotify iframe API", MediaError.MEDIA_ERR_NETWORK);
|
|
347
|
+
this.dispatchEvent(new Event("error"));
|
|
348
|
+
this.#loadComplete.resolve();
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
if (this.#isStale(attachId) || this.#target !== target) return;
|
|
352
|
+
const { referrerPolicy: _referrerPolicy, ...options } = this.#source?.engine?.spotify ?? {};
|
|
353
|
+
const controller = await new Promise((resolve) => api.createController(createControllerPlaceholder(), options, resolve));
|
|
354
|
+
if (this.#isStale(attachId) || this.#target !== target) {
|
|
355
|
+
tryCall(() => controller.destroy());
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
controller.iframeElement = target;
|
|
359
|
+
this.#controller = controller;
|
|
360
|
+
this.#creatingController = false;
|
|
361
|
+
this.#bindControllerEvents(controller, attachId);
|
|
362
|
+
}
|
|
363
|
+
#isStale(attachId) {
|
|
364
|
+
return attachId !== this.#attachId;
|
|
365
|
+
}
|
|
366
|
+
#afterLoad(fn) {
|
|
367
|
+
this.#loadComplete.then(() => {
|
|
368
|
+
const controller = this.#controller;
|
|
369
|
+
if (controller) tryCall(() => fn(controller));
|
|
370
|
+
}, () => {});
|
|
371
|
+
}
|
|
372
|
+
#snapshotProps() {
|
|
373
|
+
return {
|
|
374
|
+
autoplay: this.#autoplay,
|
|
375
|
+
loop: this.#loop,
|
|
376
|
+
controls: this.#controls,
|
|
377
|
+
playsInline: this.#playsInline,
|
|
378
|
+
preload: this.#preload || spotifyMediaDefaultProps.preload,
|
|
379
|
+
source: this.#source
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
#resetState() {
|
|
383
|
+
this.#currentTime = 0;
|
|
384
|
+
this.#duration = NaN;
|
|
385
|
+
this.#paused = !this.#autoplay;
|
|
386
|
+
this.#ended = false;
|
|
387
|
+
this.#readyState = READY_STATE_HAVE_NOTHING;
|
|
388
|
+
this.#seeking = false;
|
|
389
|
+
this.#loaded = false;
|
|
390
|
+
this.#waiting = false;
|
|
391
|
+
this.#pauseRequested = false;
|
|
392
|
+
this.#closeToEnded = false;
|
|
393
|
+
this.#error = null;
|
|
394
|
+
}
|
|
395
|
+
#onControllerReady() {
|
|
396
|
+
this.#controllerReady = true;
|
|
397
|
+
if (this.#pendingLoad) {
|
|
398
|
+
this.#pendingLoad = false;
|
|
399
|
+
this.load();
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
this.#onLoaded();
|
|
403
|
+
}
|
|
404
|
+
#onLoaded() {
|
|
405
|
+
if (this.#loaded) return;
|
|
406
|
+
this.#loaded = true;
|
|
407
|
+
this.#readyState = READY_STATE_HAVE_METADATA;
|
|
408
|
+
for (const type of [
|
|
409
|
+
"loadedmetadata",
|
|
410
|
+
"durationchange",
|
|
411
|
+
"loadcomplete"
|
|
412
|
+
]) this.dispatchEvent(new Event(type));
|
|
413
|
+
this.#loadComplete.resolve();
|
|
414
|
+
if (this.#autoplay) this.play();
|
|
415
|
+
}
|
|
416
|
+
#bindControllerEvents(controller, attachId) {
|
|
417
|
+
controller.addListener("ready", () => {
|
|
418
|
+
if (this.#isStale(attachId)) return;
|
|
419
|
+
this.#onControllerReady();
|
|
420
|
+
});
|
|
421
|
+
controller.addListener("playback_update", (event) => {
|
|
422
|
+
if (this.#isStale(attachId)) return;
|
|
423
|
+
this.#onPlaybackUpdate(event.data);
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
#onPlaybackUpdate(data) {
|
|
427
|
+
if (this.#src && !this.#loaded) this.#onLoaded();
|
|
428
|
+
if (this.#restartFromEnd(data)) return;
|
|
429
|
+
this.#syncDuration(data.duration);
|
|
430
|
+
this.#syncPosition(data.position);
|
|
431
|
+
if (this.#syncPlayState(data)) return;
|
|
432
|
+
this.#checkEnded();
|
|
433
|
+
}
|
|
434
|
+
#isStarting(data) {
|
|
435
|
+
return data.isBuffering || !data.isPaused;
|
|
436
|
+
}
|
|
437
|
+
#restartFromEnd(data) {
|
|
438
|
+
if (!this.#closeToEnded || !this.#paused || !this.#isStarting(data)) return false;
|
|
439
|
+
this.#closeToEnded = false;
|
|
440
|
+
this.currentTime = REPLAY_POSITION;
|
|
441
|
+
return true;
|
|
442
|
+
}
|
|
443
|
+
#syncDuration(duration) {
|
|
444
|
+
const seconds = duration / 1e3;
|
|
445
|
+
if (seconds === this.#duration) return;
|
|
446
|
+
this.#closeToEnded = false;
|
|
447
|
+
this.#duration = seconds;
|
|
448
|
+
this.dispatchEvent(new Event("durationchange"));
|
|
449
|
+
}
|
|
450
|
+
#syncPosition(position) {
|
|
451
|
+
const seconds = position / 1e3;
|
|
452
|
+
if (this.#seeking) {
|
|
453
|
+
if (seconds < Math.floor(this.#currentTime) || seconds > this.#currentTime + SNAPSHOT_INTERVAL) return;
|
|
454
|
+
this.#seeking = false;
|
|
455
|
+
this.dispatchEvent(new Event("seeked"));
|
|
456
|
+
}
|
|
457
|
+
if (seconds === this.#currentTime) return;
|
|
458
|
+
if (Math.ceil(seconds) < this.#duration) {
|
|
459
|
+
this.#closeToEnded = false;
|
|
460
|
+
this.#ended = false;
|
|
461
|
+
}
|
|
462
|
+
this.#currentTime = seconds;
|
|
463
|
+
this.dispatchEvent(new Event("timeupdate"));
|
|
464
|
+
}
|
|
465
|
+
#syncPlayState(data) {
|
|
466
|
+
if (!this.#paused && data.isPaused) {
|
|
467
|
+
if (data.isBuffering && !this.#pauseRequested) {
|
|
468
|
+
if (this.#waiting) return false;
|
|
469
|
+
this.#waiting = true;
|
|
470
|
+
this.dispatchEvent(new Event("waiting"));
|
|
471
|
+
return true;
|
|
472
|
+
}
|
|
473
|
+
this.#pauseRequested = false;
|
|
474
|
+
this.#waiting = false;
|
|
475
|
+
this.#paused = true;
|
|
476
|
+
this.dispatchEvent(new Event("pause"));
|
|
477
|
+
return true;
|
|
478
|
+
}
|
|
479
|
+
if (this.#paused && this.#isStarting(data)) {
|
|
480
|
+
this.#pauseRequested = false;
|
|
481
|
+
this.#paused = false;
|
|
482
|
+
this.#ended = false;
|
|
483
|
+
this.dispatchEvent(new Event("play"));
|
|
484
|
+
this.#waiting = data.isBuffering;
|
|
485
|
+
if (!this.#waiting) this.#readyState = READY_STATE_HAVE_FUTURE_DATA;
|
|
486
|
+
this.dispatchEvent(new Event(this.#waiting ? "waiting" : "playing"));
|
|
487
|
+
return true;
|
|
488
|
+
}
|
|
489
|
+
if (this.#waiting && !data.isPaused) {
|
|
490
|
+
this.#waiting = false;
|
|
491
|
+
this.#readyState = READY_STATE_HAVE_FUTURE_DATA;
|
|
492
|
+
this.dispatchEvent(new Event("playing"));
|
|
493
|
+
return true;
|
|
494
|
+
}
|
|
495
|
+
return false;
|
|
496
|
+
}
|
|
497
|
+
#checkEnded() {
|
|
498
|
+
if (this.#paused || this.#seeking || this.#closeToEnded) return;
|
|
499
|
+
if (!(this.#duration > 0) || !Number.isFinite(this.#duration)) return;
|
|
500
|
+
if (Math.ceil(this.#currentTime) < this.#duration) return;
|
|
501
|
+
this.#closeToEnded = true;
|
|
502
|
+
if (this.#loop) {
|
|
503
|
+
this.currentTime = REPLAY_POSITION;
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
this.#paused = true;
|
|
507
|
+
this.#ended = true;
|
|
508
|
+
this.pause();
|
|
509
|
+
this.dispatchEvent(new Event("pause"));
|
|
510
|
+
this.dispatchEvent(new Event("ended"));
|
|
511
|
+
}
|
|
512
|
+
};
|
|
513
|
+
function createControllerPlaceholder() {
|
|
514
|
+
return globalThis.document.createElement("div");
|
|
515
|
+
}
|
|
516
|
+
function createControllerPlaceholderFrame() {
|
|
517
|
+
return globalThis.document.createElement("iframe");
|
|
518
|
+
}
|
|
519
|
+
function embedOptionsOf(src) {
|
|
520
|
+
const [, query] = src.split("?");
|
|
521
|
+
const params = new URLSearchParams(query);
|
|
522
|
+
params.delete("t");
|
|
523
|
+
params.sort();
|
|
524
|
+
return `${isVideoEmbed(src) ? "video" : "audio"}?${params}`;
|
|
525
|
+
}
|
|
526
|
+
function embedPathOf(src) {
|
|
527
|
+
return src.split("?")[0] ?? "";
|
|
528
|
+
}
|
|
529
|
+
function isVideoEmbed(src) {
|
|
530
|
+
return embedPathOf(src).endsWith("/video");
|
|
531
|
+
}
|
|
532
|
+
const READY_STATE_HAVE_NOTHING = 0;
|
|
533
|
+
const READY_STATE_HAVE_METADATA = 1;
|
|
534
|
+
const READY_STATE_HAVE_FUTURE_DATA = 3;
|
|
535
|
+
const REPLAY_POSITION = 1;
|
|
536
|
+
const SNAPSHOT_INTERVAL = 1;
|
|
537
|
+
|
|
538
|
+
//#endregion
|
|
539
|
+
//#region src/media/spotify-audio/media.ts
|
|
540
|
+
var SpotifyCustomMediaElement = class extends CustomMediaElement("iframe", SpotifyMedia) {
|
|
541
|
+
static {
|
|
542
|
+
this.getTemplateHTML = (attrs) => {
|
|
543
|
+
const initialSrc = buildSpotifyIframeSrc(attrs.src ?? "", templateAttrsToEmbedProps(attrs));
|
|
544
|
+
return `
|
|
545
|
+
<style>
|
|
546
|
+
:host {
|
|
547
|
+
display: block;
|
|
548
|
+
min-width: 160px;
|
|
549
|
+
min-height: 80px;
|
|
550
|
+
position: relative;
|
|
551
|
+
}
|
|
552
|
+
iframe {
|
|
553
|
+
position: absolute;
|
|
554
|
+
inset: 0;
|
|
555
|
+
width: 100%;
|
|
556
|
+
height: 100%;
|
|
557
|
+
border: 0;
|
|
558
|
+
}
|
|
559
|
+
/*
|
|
560
|
+
* Without Spotify's own chrome the embed is a transport and nothing else:
|
|
561
|
+
* its player UI would otherwise show through whatever skin is drawn over
|
|
562
|
+
* it. Hidden rather than merely inert, and important so a consumer's own
|
|
563
|
+
* display rule cannot put it back on screen. An iframe in a hidden subtree
|
|
564
|
+
* still loads and plays its src.
|
|
565
|
+
*/
|
|
566
|
+
:host(:not([controls])) {
|
|
567
|
+
display: none !important;
|
|
568
|
+
}
|
|
569
|
+
</style>
|
|
570
|
+
<iframe
|
|
571
|
+
part="iframe"
|
|
572
|
+
${initialSrc ? ` src="${escapeHtml(initialSrc)}"` : ""}
|
|
573
|
+
allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture"
|
|
574
|
+
frameborder="0"
|
|
575
|
+
width="100%"
|
|
576
|
+
height="100%"
|
|
577
|
+
referrerpolicy="${escapeHtml(attrs.referrerpolicy ?? "")}"
|
|
578
|
+
></iframe>
|
|
579
|
+
`;
|
|
580
|
+
};
|
|
581
|
+
}
|
|
582
|
+
};
|
|
583
|
+
function templateAttrsToEmbedProps(attrs) {
|
|
584
|
+
return {
|
|
585
|
+
autoplay: attrs.autoplay !== void 0,
|
|
586
|
+
loop: attrs.loop !== void 0,
|
|
587
|
+
controls: attrs.controls !== void 0,
|
|
588
|
+
playsInline: attrs.playsinline !== void 0,
|
|
589
|
+
preload: attrs.preload ?? "metadata"
|
|
590
|
+
};
|
|
591
|
+
}
|
|
592
|
+
var SpotifyAudio = class extends MediaAttachMixin(SpotifyCustomMediaElement) {};
|
|
593
|
+
|
|
594
|
+
//#endregion
|
|
595
|
+
//#region src/define/media/spotify-audio.ts
|
|
596
|
+
var SpotifyAudioElement = class extends SpotifyAudio {
|
|
597
|
+
static {
|
|
598
|
+
this.tagName = "spotify-audio";
|
|
599
|
+
}
|
|
600
|
+
};
|
|
601
|
+
safeDefine(SpotifyAudioElement);
|
|
602
|
+
|
|
603
|
+
//#endregion
|
|
604
|
+
export { SpotifyAudioElement };
|
|
605
|
+
//# sourceMappingURL=spotify-audio.dev.js.map
|