@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":"spotify-audio.dev.js","names":["#controller","#target","#beginLoad","#createPlayer","#attachId","#controllerReady","#pendingLoad","#creatingController","#loadComplete","#resetState","#src","#source","#readyState","#error","#snapshotProps","#paused","#ended","#seeking","#pauseRequested","#currentTime","#closeToEnded","#afterLoad","#duration","#autoplay","#loop","#controls","#playsInline","#preload","#poster","#createControllerApi","#isStale","#bindControllerEvents","#loaded","#waiting","#onLoaded","#onControllerReady","#onPlaybackUpdate","#restartFromEnd","#syncDuration","#syncPosition","#syncPlayState","#checkEnded","#isStarting"],"sources":["../../../media/dist/dev/dom/spotify/props.js","../../../media/dist/dev/dom/spotify/source.js","../../../media/dist/dev/dom/spotify/iframe-api.js","../../../media/dist/dev/dom/spotify/media.js","../../src/media/spotify-audio/media.ts","../../src/define/media/spotify-audio.ts"],"sourcesContent":["//#region src/dom/spotify/props.ts\nconst spotifyMediaDefaultProps = {\n\tsrc: \"\",\n\tautoplay: false,\n\tloop: false,\n\tcontrols: false,\n\tplaysInline: true,\n\tpreload: \"metadata\",\n\tposter: \"\",\n\tsource: null\n};\n//#endregion\nexport { spotifyMediaDefaultProps };\n\n//# sourceMappingURL=props.js.map","import { serializeEmbedParams } from \"../utils/embed-params.js\";\n//#region src/dom/spotify/source.ts\n/** Extract a Spotify entity id from any recognized URL or `spotify:` URI. */\nfunction parseSpotifyEntityId(src) {\n\treturn parseSpotifySource(src)?.id ?? null;\n}\n/**\n* Parse a Spotify source string. Recognizes `open.spotify.com` URLs for every\n* embeddable entity — including the localized (`/intl-de/`) and already-embedded\n* (`/embed/`) forms, since the entity type and id sit in the same place in all of\n* them — `spotify:<type>:<id>` URIs, and start positions via the `t` parameter.\n*/\nfunction parseSpotifySource(src) {\n\tif (!src) return null;\n\tconst match = MATCH_URI.exec(src) ?? MATCH_SRC.exec(src);\n\tconst type = match?.[1]?.toLowerCase();\n\tconst id = match?.[2];\n\tif (!type || !id) return null;\n\treturn {\n\t\ttype,\n\t\tid,\n\t\tstartTime: parseStartTime(src)\n\t};\n}\n/** Build the iframe `src` URL for an initial Spotify embed from the given props. */\nfunction buildSpotifyIframeSrc(src, props = {}) {\n\tconst parsed = parseSpotifySource(src);\n\tif (!parsed) return \"\";\n\tconst { preferVideo, referrerPolicy: _referrerPolicy, ...spotify } = props.source?.engine?.spotify ?? {};\n\tconst params = {\n\t\tt: parsed.startTime,\n\t\t...spotify\n\t};\n\tconst videoPath = preferVideo ? \"/video\" : \"\";\n\tconst query = serializeEmbedParams(params);\n\treturn `${EMBED_BASE}/embed/${parsed.type}/${parsed.id}${videoPath}${query ? `?${query}` : \"\"}`;\n}\n/** Parse the `t` parameter from a Spotify share URL. Spotify spells it in seconds. */\nfunction parseStartTime(url) {\n\tconst value = /[?&]t=(\\d+)/.exec(url)?.[1];\n\treturn value ? Number.parseInt(value, 10) : null;\n}\nconst EMBED_BASE = \"https://open.spotify.com\";\nconst MATCH_SRC = /open\\.spotify\\.com\\/(?:[\\w-]+\\/)*?(track|episode|album|playlist|show|artist)\\/(\\w+)/i;\nconst MATCH_URI = /^spotify:(track|episode|album|playlist|show|artist):(\\w+)$/i;\n//#endregion\nexport { buildSpotifyIframeSrc, parseSpotifyEntityId, parseSpotifySource };\n\n//# sourceMappingURL=source.js.map","import { loadScript } from \"@videojs/utils/dom\";\n//#region src/dom/spotify/iframe-api.ts\nconst API_URL = \"https://open.spotify.com/embed/iframe-api/v1\";\nlet apiPromise = null;\n/** Load the iframe API once, reusing it if another host already pulled it in. */\nfunction loadSpotifyIframeApi() {\n\tconst globals = globalThis;\n\tconst existing = globals.SpotifyIframeApi;\n\tif (existing) return Promise.resolve(existing);\n\tapiPromise ??= new Promise((resolve, reject) => {\n\t\tconst hostReady = globals.onSpotifyIframeApiReady;\n\t\tglobals.onSpotifyIframeApiReady = (api) => {\n\t\t\tresolve(api);\n\t\t\thostReady?.(api);\n\t\t};\n\t\tloadScript(API_URL).catch(reject);\n\t}).catch((error) => {\n\t\tapiPromise = null;\n\t\tthrow error;\n\t});\n\treturn apiPromise;\n}\n//#endregion\nexport { loadSpotifyIframeApi };\n\n//# sourceMappingURL=iframe-api.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 { loadSpotifyIframeApi } from \"./iframe-api.js\";\nimport { spotifyMediaDefaultProps } from \"./props.js\";\nimport { buildSpotifyIframeSrc, parseSpotifySource } from \"./source.js\";\nimport { isNumber } from \"@videojs/utils/predicate\";\nimport { deepEqual } from \"@videojs/utils/object\";\nimport { createPublicPromise, tryCall } from \"@videojs/utils/function\";\n//#region src/dom/spotify/media.ts\nconst SpotifyMediaBase = 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 SpotifyMedia = class extends SpotifyMediaBase {\n\t#target = null;\n\t#controller = null;\n\t#controllerReady = false;\n\t#pendingLoad = false;\n\t#creatingController = false;\n\t#loadComplete = createPublicPromise();\n\t#attachId = 0;\n\t#src = spotifyMediaDefaultProps.src;\n\t#autoplay = spotifyMediaDefaultProps.autoplay;\n\t#loop = spotifyMediaDefaultProps.loop;\n\t#controls = spotifyMediaDefaultProps.controls;\n\t#playsInline = spotifyMediaDefaultProps.playsInline;\n\t#preload = spotifyMediaDefaultProps.preload;\n\t#poster = spotifyMediaDefaultProps.poster;\n\t#source = spotifyMediaDefaultProps.source;\n\t#paused = true;\n\t#ended = false;\n\t#seeking = false;\n\t#loaded = false;\n\t#currentTime = 0;\n\t#duration = NaN;\n\t#readyState = READY_STATE_HAVE_NOTHING;\n\t#error = null;\n\t#waiting = false;\n\t#pauseRequested = false;\n\t#closeToEnded = false;\n\tstatic PLAYER_SOFTWARE_NAME = \"spotify-audio\";\n\t/** Underlying Spotify iframe API controller (null until the API loads). */\n\tget engine() {\n\t\treturn this.#controller;\n\t}\n\t/** The iframe holding the embed, which everything from the embed URL down is written to. */\n\tget target() {\n\t\treturn this.#target;\n\t}\n\t/** Bind the iframe hosting the embed; the API and controller follow as soon as an embed URL resolves. */\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\ttryCall(() => {\n\t\t\tif (this.#controller) {\n\t\t\t\tthis.#controller.iframeElement = createControllerPlaceholderFrame();\n\t\t\t\tthis.#controller.destroy();\n\t\t\t}\n\t\t});\n\t\tthis.#controller = null;\n\t\tthis.#controllerReady = false;\n\t\tthis.#pendingLoad = false;\n\t\tthis.#creatingController = false;\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/** Spotify URL or URI. Setting it re-derives `source`, carrying its embed options 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 via the iframe API; deferred until the controller is ready. */\n\tasync load() {\n\t\tif (!this.#controller || !this.#controllerReady) {\n\t\t\tthis.#pendingLoad = !!this.#target;\n\t\t\tif (this.#target && !this.#controller && !this.#creatingController) {\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.#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\ttryCall(() => this.#controller?.pause());\n\t\t\treturn;\n\t\t}\n\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\tconst parsed = parseSpotifySource(this.#src);\n\t\tif (!parsed) {\n\t\t\tthis.#error = new MediaError(`Unrecognized Spotify 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\tconst target = this.#target;\n\t\tconst embedSrc = buildSpotifyIframeSrc(this.#src, this.#snapshotProps());\n\t\tconst embeddedSrc = target?.getAttribute(\"src\") ?? \"\";\n\t\tconst rebuild = embedOptionsOf(embedSrc) !== embedOptionsOf(embeddedSrc) || isVideoEmbed(embedSrc) && embedPathOf(embedSrc) !== embedPathOf(embeddedSrc);\n\t\tif (target && embedSrc && rebuild) {\n\t\t\ttarget.src = embedSrc;\n\t\t\treturn;\n\t\t}\n\t\tthis.#controller.loadUri(`spotify:${parsed.type}:${parsed.id}`);\n\t\tconst startTime = this.#source?.engine?.spotify?.t ?? parsed.startTime;\n\t\tif (isNumber(startTime)) this.currentTime = startTime;\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\treturn this.#paused;\n\t}\n\tget ended() {\n\t\treturn this.#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.#controller?.resume();\n\t}\n\tpause() {\n\t\tthis.#pauseRequested = true;\n\t\tthis.#controller?.pause();\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.#seeking = true;\n\t\tthis.#closeToEnded = false;\n\t\tthis.#ended = false;\n\t\tthis.#currentTime = value;\n\t\tthis.dispatchEvent(new Event(\"seeking\"));\n\t\tthis.dispatchEvent(new Event(\"timeupdate\"));\n\t\tthis.#afterLoad((controller) => controller.seek(value));\n\t}\n\tget duration() {\n\t\treturn this.#duration;\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 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/** Spotify URL or URI in `src`, plus embed options under `engine.spotify`. 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?.spotify ?? null, source?.engine?.spotify ?? 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.#currentTime > 0 ? createTimeRange(0, this.#currentTime) : 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\t/** Always empty: the embed exposes no captions or other text tracks. */\n\tget textTracks() {\n\t\treturn EMPTY_TEXT_TRACKS;\n\t}\n\t#createPlayer() {\n\t\tconst target = this.#target;\n\t\tif (!target || this.#controller || this.#creatingController) return false;\n\t\tif (!target.getAttribute(\"src\")) {\n\t\t\tconst initialSrc = buildSpotifyIframeSrc(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}\n\t\tthis.#creatingController = true;\n\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\tthis.#createControllerApi(target);\n\t\treturn true;\n\t}\n\tasync #createControllerApi(target) {\n\t\tconst attachId = this.#attachId;\n\t\tlet api;\n\t\ttry {\n\t\t\tapi = await loadSpotifyIframeApi();\n\t\t} catch {\n\t\t\tif (this.#isStale(attachId)) return;\n\t\t\tthis.#creatingController = false;\n\t\t\tthis.#error = new MediaError(\"Failed to load the Spotify iframe API\", MediaError.MEDIA_ERR_NETWORK);\n\t\t\tthis.dispatchEvent(new Event(\"error\"));\n\t\t\tthis.#loadComplete.resolve();\n\t\t\treturn;\n\t\t}\n\t\tif (this.#isStale(attachId) || this.#target !== target) return;\n\t\tconst { referrerPolicy: _referrerPolicy, ...options } = this.#source?.engine?.spotify ?? {};\n\t\tconst controller = await new Promise((resolve) => api.createController(createControllerPlaceholder(), options, resolve));\n\t\tif (this.#isStale(attachId) || this.#target !== target) {\n\t\t\ttryCall(() => controller.destroy());\n\t\t\treturn;\n\t\t}\n\t\tcontroller.iframeElement = target;\n\t\tthis.#controller = controller;\n\t\tthis.#creatingController = false;\n\t\tthis.#bindControllerEvents(controller, attachId);\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\tconst controller = this.#controller;\n\t\t\tif (controller) tryCall(() => fn(controller));\n\t\t}, () => {});\n\t}\n\t#snapshotProps() {\n\t\treturn {\n\t\t\tautoplay: this.#autoplay,\n\t\t\tloop: this.#loop,\n\t\t\tcontrols: this.#controls,\n\t\t\tplaysInline: this.#playsInline,\n\t\t\tpreload: this.#preload || spotifyMediaDefaultProps.preload,\n\t\t\tsource: this.#source\n\t\t};\n\t}\n\t#resetState() {\n\t\tthis.#currentTime = 0;\n\t\tthis.#duration = NaN;\n\t\tthis.#paused = !this.#autoplay;\n\t\tthis.#ended = false;\n\t\tthis.#readyState = READY_STATE_HAVE_NOTHING;\n\t\tthis.#seeking = false;\n\t\tthis.#loaded = false;\n\t\tthis.#waiting = false;\n\t\tthis.#pauseRequested = false;\n\t\tthis.#closeToEnded = false;\n\t\tthis.#error = null;\n\t}\n\t#onControllerReady() {\n\t\tthis.#controllerReady = true;\n\t\tif (this.#pendingLoad) {\n\t\t\tthis.#pendingLoad = false;\n\t\t\tthis.load();\n\t\t\treturn;\n\t\t}\n\t\tthis.#onLoaded();\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\tfor (const type of [\n\t\t\t\"loadedmetadata\",\n\t\t\t\"durationchange\",\n\t\t\t\"loadcomplete\"\n\t\t]) this.dispatchEvent(new Event(type));\n\t\tthis.#loadComplete.resolve();\n\t\tif (this.#autoplay) this.play();\n\t}\n\t#bindControllerEvents(controller, attachId) {\n\t\tcontroller.addListener(\"ready\", () => {\n\t\t\tif (this.#isStale(attachId)) return;\n\t\t\tthis.#onControllerReady();\n\t\t});\n\t\tcontroller.addListener(\"playback_update\", (event) => {\n\t\t\tif (this.#isStale(attachId)) return;\n\t\t\tthis.#onPlaybackUpdate(event.data);\n\t\t});\n\t}\n\t#onPlaybackUpdate(data) {\n\t\tif (this.#src && !this.#loaded) this.#onLoaded();\n\t\tif (this.#restartFromEnd(data)) return;\n\t\tthis.#syncDuration(data.duration);\n\t\tthis.#syncPosition(data.position);\n\t\tif (this.#syncPlayState(data)) return;\n\t\tthis.#checkEnded();\n\t}\n\t#isStarting(data) {\n\t\treturn data.isBuffering || !data.isPaused;\n\t}\n\t#restartFromEnd(data) {\n\t\tif (!this.#closeToEnded || !this.#paused || !this.#isStarting(data)) return false;\n\t\tthis.#closeToEnded = false;\n\t\tthis.currentTime = REPLAY_POSITION;\n\t\treturn true;\n\t}\n\t#syncDuration(duration) {\n\t\tconst seconds = duration / 1e3;\n\t\tif (seconds === this.#duration) return;\n\t\tthis.#closeToEnded = false;\n\t\tthis.#duration = seconds;\n\t\tthis.dispatchEvent(new Event(\"durationchange\"));\n\t}\n\t#syncPosition(position) {\n\t\tconst seconds = position / 1e3;\n\t\tif (this.#seeking) {\n\t\t\tif (seconds < Math.floor(this.#currentTime) || seconds > this.#currentTime + SNAPSHOT_INTERVAL) return;\n\t\t\tthis.#seeking = false;\n\t\t\tthis.dispatchEvent(new Event(\"seeked\"));\n\t\t}\n\t\tif (seconds === this.#currentTime) return;\n\t\tif (Math.ceil(seconds) < this.#duration) {\n\t\t\tthis.#closeToEnded = false;\n\t\t\tthis.#ended = false;\n\t\t}\n\t\tthis.#currentTime = seconds;\n\t\tthis.dispatchEvent(new Event(\"timeupdate\"));\n\t}\n\t#syncPlayState(data) {\n\t\tif (!this.#paused && data.isPaused) {\n\t\t\tif (data.isBuffering && !this.#pauseRequested) {\n\t\t\t\tif (this.#waiting) return false;\n\t\t\t\tthis.#waiting = true;\n\t\t\t\tthis.dispatchEvent(new Event(\"waiting\"));\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tthis.#pauseRequested = false;\n\t\t\tthis.#waiting = false;\n\t\t\tthis.#paused = true;\n\t\t\tthis.dispatchEvent(new Event(\"pause\"));\n\t\t\treturn true;\n\t\t}\n\t\tif (this.#paused && this.#isStarting(data)) {\n\t\t\tthis.#pauseRequested = false;\n\t\t\tthis.#paused = false;\n\t\t\tthis.#ended = false;\n\t\t\tthis.dispatchEvent(new Event(\"play\"));\n\t\t\tthis.#waiting = data.isBuffering;\n\t\t\tif (!this.#waiting) this.#readyState = READY_STATE_HAVE_FUTURE_DATA;\n\t\t\tthis.dispatchEvent(new Event(this.#waiting ? \"waiting\" : \"playing\"));\n\t\t\treturn true;\n\t\t}\n\t\tif (this.#waiting && !data.isPaused) {\n\t\t\tthis.#waiting = false;\n\t\t\tthis.#readyState = READY_STATE_HAVE_FUTURE_DATA;\n\t\t\tthis.dispatchEvent(new Event(\"playing\"));\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t#checkEnded() {\n\t\tif (this.#paused || this.#seeking || this.#closeToEnded) return;\n\t\tif (!(this.#duration > 0) || !Number.isFinite(this.#duration)) return;\n\t\tif (Math.ceil(this.#currentTime) < this.#duration) return;\n\t\tthis.#closeToEnded = true;\n\t\tif (this.#loop) {\n\t\t\tthis.currentTime = REPLAY_POSITION;\n\t\t\treturn;\n\t\t}\n\t\tthis.#paused = true;\n\t\tthis.#ended = true;\n\t\tthis.pause();\n\t\tthis.dispatchEvent(new Event(\"pause\"));\n\t\tthis.dispatchEvent(new Event(\"ended\"));\n\t}\n};\nfunction createControllerPlaceholder() {\n\treturn globalThis.document.createElement(\"div\");\n}\nfunction createControllerPlaceholderFrame() {\n\treturn globalThis.document.createElement(\"iframe\");\n}\nfunction embedOptionsOf(src) {\n\tconst [, query] = src.split(\"?\");\n\tconst params = new URLSearchParams(query);\n\tparams.delete(\"t\");\n\tparams.sort();\n\treturn `${isVideoEmbed(src) ? \"video\" : \"audio\"}?${params}`;\n}\nfunction embedPathOf(src) {\n\treturn src.split(\"?\")[0] ?? \"\";\n}\nfunction isVideoEmbed(src) {\n\treturn embedPathOf(src).endsWith(\"/video\");\n}\nconst READY_STATE_HAVE_NOTHING = 0;\nconst READY_STATE_HAVE_METADATA = 1;\nconst READY_STATE_HAVE_FUTURE_DATA = 3;\nconst REPLAY_POSITION = 1;\nconst SNAPSHOT_INTERVAL = 1;\n//#endregion\nexport { SpotifyMedia };\n\n//# sourceMappingURL=media.js.map","import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { buildSpotifyIframeSrc, SpotifyMedia } from '@videojs/media/dom/spotify';\nimport { escapeHtml } from '@videojs/utils/string';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\n\nclass SpotifyCustomMediaElement extends CustomMediaElement('iframe', SpotifyMedia) {\n static override getTemplateHTML = (attrs: Record<string, string>): string => {\n const initialSrc = buildSpotifyIframeSrc(attrs.src ?? '', templateAttrsToEmbedProps(attrs));\n const srcAttr = initialSrc ? ` src=\"${escapeHtml(initialSrc)}\"` : '';\n return /*html*/ `\n <style>\n :host {\n display: block;\n min-width: 160px;\n min-height: 80px;\n position: relative;\n }\n iframe {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n /*\n * Without Spotify's own chrome the embed is a transport and nothing else:\n * its player UI would otherwise show through whatever skin is drawn over\n * it. Hidden rather than merely inert, and important so a consumer's own\n * display rule cannot put it back on screen. An iframe in a hidden subtree\n * still loads and plays its src.\n */\n :host(:not([controls])) {\n display: none !important;\n }\n </style>\n <iframe\n part=\"iframe\"\n ${srcAttr}\n allow=\"autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture\"\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 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 SpotifyAudio extends MediaAttachMixin(SpotifyCustomMediaElement) {}\n","import { SpotifyAudio } from '../../media/spotify-audio';\nimport { safeDefine } from '../safe-define';\n\nexport class SpotifyAudioElement extends SpotifyAudio {\n static readonly tagName = 'spotify-audio';\n}\n\nsafeDefine(SpotifyAudioElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [SpotifyAudioElement.tagName]: SpotifyAudioElement;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{o as e}from"../predicate-LbFu-fPH.js";import{t}from"../deep-equal-CcwdHo6t.js";import{t as n}from"../custom-media-element-8pSkwn42.js";import{a as r}from"../attributes-CwICYz98.js";import{i}from"../context-C2rsoDxk.js";import{t as a}from"../script-D3ZkiqwO.js";import{n as o,r as s,t as c}from"../media-played-ranges-CM2zeOGr.js";import{n as l,t as u}from"../embed-params-D2e8u0d4.js";import{n as d,r as f}from"../constants-B4LD5zrj.js";import{t as p}from"../media-error-CtsbOTR1.js";import{t as m}from"../media-attach-mixin-Igi3-1UG.js";const h={src:``,autoplay:!1,loop:!1,controls:!1,playsInline:!0,preload:`metadata`,poster:``,source:null};function g(e){if(!e)return null;let t=x.exec(e)??b.exec(e),n=t?.[1]?.toLowerCase(),r=t?.[2];return!n||!r?null:{type:n,id:r,startTime:v(e)}}function _(e,t={}){let n=g(e);if(!n)return``;let{preferVideo:r,referrerPolicy:i,...a}=t.source?.engine?.spotify??{},o={t:n.startTime,...a},s=r?`/video`:``,c=u(o);return`${y}/embed/${n.type}/${n.id}${s}${c?`?${c}`:``}`}function v(e){let t=/[?&]t=(\d+)/.exec(e)?.[1];return t?Number.parseInt(t,10):null}const y=`https://open.spotify.com`,b=/open\.spotify\.com\/(?:[\w-]+\/)*?(track|episode|album|playlist|show|artist)\/(\w+)/i,x=/^spotify:(track|episode|album|playlist|show|artist):(\w+)$/i;let S=null;function C(){let e=globalThis,t=e.SpotifyIframeApi;return t?Promise.resolve(t):(S??=new Promise((t,n)=>{let r=e.onSpotifyIframeApiReady;e.onSpotifyIframeApiReady=e=>{t(e),r?.(e)},a(`https://open.spotify.com/embed/iframe-api/v1`).catch(n)}).catch(e=>{throw S=null,e}),S)}const w=c(EventTarget);var T=class extends w{#e=null;#t=null;#n=!1;#r=!1;#i=!1;#a=s();#o=0;#s=h.src;#c=h.autoplay;#l=h.loop;#u=h.controls;#d=h.playsInline;#f=h.preload;#p=h.poster;#m=h.source;#h=!0;#g=!1;#_=!1;#v=!1;#y=0;#b=NaN;#x=j;#S=null;#C=!1;#w=!1;#T=!1;static PLAYER_SOFTWARE_NAME=`spotify-audio`;get engine(){return this.#t}get target(){return this.#e}attach(e){!e||this.#e===e||(this.#e&&this.detach(),this.#e=e,this.#E(),this.#D())}detach(){this.#e&&(this.#o++,l(()=>{this.#t&&(this.#t.iframeElement=D(),this.#t.destroy())}),this.#t=null,this.#n=!1,this.#r=!1,this.#i=!1,this.#e=null,this.#a.resolve(),this.#M())}destroy(){this.detach(),super.destroy()}get src(){return this.#s}set src(e){let{engine:t}=this.#m??{},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.#x}async load(){if(!this.#t||!this.#n){if(this.#r=!!this.#e,this.#e&&!this.#t&&!this.#i){let e=this.#E();if(await Promise.resolve(),e!==this.#a)return;this.#D()}return}let t=this.#E();if(this.#M(),this.dispatchEvent(new Event(`emptied`)),!this.#s){t.resolve(),l(()=>this.#t?.pause());return}this.dispatchEvent(new Event(`loadstart`));let n=g(this.#s);if(!n){this.#S=new p(`Unrecognized Spotify source: ${this.#s}`,p.MEDIA_ERR_SRC_NOT_SUPPORTED),this.dispatchEvent(new Event(`error`)),t.resolve();return}let r=this.#e,i=_(this.#s,this.#j()),a=r?.getAttribute(`src`)??``,o=O(i)!==O(a)||A(i)&&k(i)!==k(a);if(r&&i&&o){r.src=i;return}this.#t.loadUri(`spotify:${n.type}:${n.id}`);let s=this.#m?.engine?.spotify?.t??n.startTime;e(s)&&(this.currentTime=s)}#E(){return this.#a.resolve(),this.#a=s(),this.#a}get paused(){return this.#h}get ended(){return this.#g}get seeking(){return this.#_}async play(){await this.#a,this.#s&&this.#t?.resume()}pause(){this.#w=!0,this.#t?.pause()}get currentTime(){return this.#y}set currentTime(e){this.#y!==e&&(this.#_=!0,this.#T=!1,this.#g=!1,this.#y=e,this.dispatchEvent(new Event(`seeking`)),this.dispatchEvent(new Event(`timeupdate`)),this.#A(t=>t.seek(e)))}get duration(){return this.#b}get autoplay(){return this.#c}set autoplay(e){this.#c=e}get loop(){return this.#l}set loop(e){this.#l=e}get controls(){return this.#u}set controls(e){this.#u=e}get playsInline(){return this.#d}set playsInline(e){this.#d=e}get preload(){return this.#f}set preload(e){this.#f=e}get poster(){return this.#p}set poster(e){this.#p=e}get source(){return this.#m}set source(e){let n=e??null;if(n===this.#m)return;let r=n?.src??``,i=this.#s!==r,a=!t(this.#m?.engine?.spotify??null,n?.engine?.spotify??null);this.#m=n,this.#s=r,(i||a)&&this.load(),this.dispatchEvent(new Event(`sourcechange`))}get buffered(){return this.#y>0?o(0,this.#y):f}get seekable(){return this.#b>0&&Number.isFinite(this.#b)?o(0,this.#b):f}get error(){return this.#S}get textTracks(){return d}#D(){let e=this.#e;if(!e||this.#t||this.#i)return!1;if(!e.getAttribute(`src`)){let t=_(this.#s,this.#j());if(!t)return this.#a.resolve(),!1;e.src=t}return this.#i=!0,this.dispatchEvent(new Event(`loadstart`)),this.#O(e),!0}async#O(e){let t=this.#o,n;try{n=await C()}catch{if(this.#k(t))return;this.#i=!1,this.#S=new p(`Failed to load the Spotify iframe API`,p.MEDIA_ERR_NETWORK),this.dispatchEvent(new Event(`error`)),this.#a.resolve();return}if(this.#k(t)||this.#e!==e)return;let{referrerPolicy:r,...i}=this.#m?.engine?.spotify??{},a=await new Promise(e=>n.createController(E(),i,e));if(this.#k(t)||this.#e!==e){l(()=>a.destroy());return}a.iframeElement=e,this.#t=a,this.#i=!1,this.#F(a,t)}#k(e){return e!==this.#o}#A(e){this.#a.then(()=>{let t=this.#t;t&&l(()=>e(t))},()=>{})}#j(){return{autoplay:this.#c,loop:this.#l,controls:this.#u,playsInline:this.#d,preload:this.#f||h.preload,source:this.#m}}#M(){this.#y=0,this.#b=NaN,this.#h=!this.#c,this.#g=!1,this.#x=j,this.#_=!1,this.#v=!1,this.#C=!1,this.#w=!1,this.#T=!1,this.#S=null}#N(){if(this.#n=!0,this.#r){this.#r=!1,this.load();return}this.#P()}#P(){if(!this.#v){this.#v=!0,this.#x=M;for(let e of[`loadedmetadata`,`durationchange`,`loadcomplete`])this.dispatchEvent(new Event(e));this.#a.resolve(),this.#c&&this.play()}}#F(e,t){e.addListener(`ready`,()=>{this.#k(t)||this.#N()}),e.addListener(`playback_update`,e=>{this.#k(t)||this.#I(e.data)})}#I(e){this.#s&&!this.#v&&this.#P(),!this.#R(e)&&(this.#z(e.duration),this.#B(e.position),!this.#V(e)&&this.#H())}#L(e){return e.isBuffering||!e.isPaused}#R(e){return!this.#T||!this.#h||!this.#L(e)?!1:(this.#T=!1,this.currentTime=P,!0)}#z(e){let t=e/1e3;t!==this.#b&&(this.#T=!1,this.#b=t,this.dispatchEvent(new Event(`durationchange`)))}#B(e){let t=e/1e3;if(this.#_){if(t<Math.floor(this.#y)||t>this.#y+F)return;this.#_=!1,this.dispatchEvent(new Event(`seeked`))}t!==this.#y&&(Math.ceil(t)<this.#b&&(this.#T=!1,this.#g=!1),this.#y=t,this.dispatchEvent(new Event(`timeupdate`)))}#V(e){return!this.#h&&e.isPaused?e.isBuffering&&!this.#w?this.#C?!1:(this.#C=!0,this.dispatchEvent(new Event(`waiting`)),!0):(this.#w=!1,this.#C=!1,this.#h=!0,this.dispatchEvent(new Event(`pause`)),!0):this.#h&&this.#L(e)?(this.#w=!1,this.#h=!1,this.#g=!1,this.dispatchEvent(new Event(`play`)),this.#C=e.isBuffering,this.#C||(this.#x=N),this.dispatchEvent(new Event(this.#C?`waiting`:`playing`)),!0):this.#C&&!e.isPaused?(this.#C=!1,this.#x=N,this.dispatchEvent(new Event(`playing`)),!0):!1}#H(){if(!(this.#h||this.#_||this.#T)&&!(!(this.#b>0)||!Number.isFinite(this.#b))&&!(Math.ceil(this.#y)<this.#b)){if(this.#T=!0,this.#l){this.currentTime=P;return}this.#h=!0,this.#g=!0,this.pause(),this.dispatchEvent(new Event(`pause`)),this.dispatchEvent(new Event(`ended`))}}};function E(){return globalThis.document.createElement(`div`)}function D(){return globalThis.document.createElement(`iframe`)}function O(e){let[,t]=e.split(`?`),n=new URLSearchParams(t);return n.delete(`t`),n.sort(),`${A(e)?`video`:`audio`}?${n}`}function k(e){return e.split(`?`)[0]??``}function A(e){return k(e).endsWith(`/video`)}const j=0,M=1,N=3,P=1,F=1;var I=class extends n(`iframe`,T){static{this.getTemplateHTML=e=>{let t=_(e.src??``,L(e));return`<style> :host { display: block; min-width: 160px; min-height: 80px; position: relative; } iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; } /* * Without Spotify's own chrome the embed is a transport and nothing else: * its player UI would otherwise show through whatever skin is drawn over * it. Hidden rather than merely inert, and important so a consumer's own * display rule cannot put it back on screen. An iframe in a hidden subtree * still loads and plays its src. */ :host(:not([controls])) { display: none !important; } </style><iframe part="iframe" ${t?` src="${r(t)}"`:``} allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" frameborder="0" width="100%" height="100%" referrerpolicy="${r(e.referrerpolicy??``)}" ></iframe>`}}};function L(e){return{autoplay:e.autoplay!==void 0,loop:e.loop!==void 0,controls:e.controls!==void 0,playsInline:e.playsinline!==void 0,preload:e.preload??`metadata`}}var R=class extends m(I){},z=class extends R{static{this.tagName=`spotify-audio`}};i(z);export{z as SpotifyAudioElement};
|
|
2
|
+
//# sourceMappingURL=spotify-audio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spotify-audio.js","names":["#controller","#target","#beginLoad","#createPlayer","#attachId","#controllerReady","#pendingLoad","#creatingController","#loadComplete","#resetState","#src","#source","#readyState","#error","#snapshotProps","#paused","#ended","#seeking","#pauseRequested","#currentTime","#closeToEnded","#afterLoad","#duration","#autoplay","#loop","#controls","#playsInline","#preload","#poster","#createControllerApi","#isStale","#bindControllerEvents","#loaded","#waiting","#onLoaded","#onControllerReady","#onPlaybackUpdate","#restartFromEnd","#syncDuration","#syncPosition","#syncPlayState","#checkEnded","#isStarting"],"sources":["../../../media/dist/default/dom/spotify/props.js","../../../media/dist/default/dom/spotify/source.js","../../../media/dist/default/dom/spotify/iframe-api.js","../../../media/dist/default/dom/spotify/media.js","../../src/media/spotify-audio/media.ts","../../src/define/media/spotify-audio.ts"],"sourcesContent":["//#region src/dom/spotify/props.ts\nconst spotifyMediaDefaultProps = {\n\tsrc: \"\",\n\tautoplay: false,\n\tloop: false,\n\tcontrols: false,\n\tplaysInline: true,\n\tpreload: \"metadata\",\n\tposter: \"\",\n\tsource: null\n};\n//#endregion\nexport { spotifyMediaDefaultProps };\n\n//# sourceMappingURL=props.js.map","import { serializeEmbedParams } from \"../utils/embed-params.js\";\n//#region src/dom/spotify/source.ts\n/** Extract a Spotify entity id from any recognized URL or `spotify:` URI. */\nfunction parseSpotifyEntityId(src) {\n\treturn parseSpotifySource(src)?.id ?? null;\n}\n/**\n* Parse a Spotify source string. Recognizes `open.spotify.com` URLs for every\n* embeddable entity — including the localized (`/intl-de/`) and already-embedded\n* (`/embed/`) forms, since the entity type and id sit in the same place in all of\n* them — `spotify:<type>:<id>` URIs, and start positions via the `t` parameter.\n*/\nfunction parseSpotifySource(src) {\n\tif (!src) return null;\n\tconst match = MATCH_URI.exec(src) ?? MATCH_SRC.exec(src);\n\tconst type = match?.[1]?.toLowerCase();\n\tconst id = match?.[2];\n\tif (!type || !id) return null;\n\treturn {\n\t\ttype,\n\t\tid,\n\t\tstartTime: parseStartTime(src)\n\t};\n}\n/** Build the iframe `src` URL for an initial Spotify embed from the given props. */\nfunction buildSpotifyIframeSrc(src, props = {}) {\n\tconst parsed = parseSpotifySource(src);\n\tif (!parsed) return \"\";\n\tconst { preferVideo, referrerPolicy: _referrerPolicy, ...spotify } = props.source?.engine?.spotify ?? {};\n\tconst params = {\n\t\tt: parsed.startTime,\n\t\t...spotify\n\t};\n\tconst videoPath = preferVideo ? \"/video\" : \"\";\n\tconst query = serializeEmbedParams(params);\n\treturn `${EMBED_BASE}/embed/${parsed.type}/${parsed.id}${videoPath}${query ? `?${query}` : \"\"}`;\n}\n/** Parse the `t` parameter from a Spotify share URL. Spotify spells it in seconds. */\nfunction parseStartTime(url) {\n\tconst value = /[?&]t=(\\d+)/.exec(url)?.[1];\n\treturn value ? Number.parseInt(value, 10) : null;\n}\nconst EMBED_BASE = \"https://open.spotify.com\";\nconst MATCH_SRC = /open\\.spotify\\.com\\/(?:[\\w-]+\\/)*?(track|episode|album|playlist|show|artist)\\/(\\w+)/i;\nconst MATCH_URI = /^spotify:(track|episode|album|playlist|show|artist):(\\w+)$/i;\n//#endregion\nexport { buildSpotifyIframeSrc, parseSpotifyEntityId, parseSpotifySource };\n\n//# sourceMappingURL=source.js.map","import { loadScript } from \"@videojs/utils/dom\";\n//#region src/dom/spotify/iframe-api.ts\nconst API_URL = \"https://open.spotify.com/embed/iframe-api/v1\";\nlet apiPromise = null;\n/** Load the iframe API once, reusing it if another host already pulled it in. */\nfunction loadSpotifyIframeApi() {\n\tconst globals = globalThis;\n\tconst existing = globals.SpotifyIframeApi;\n\tif (existing) return Promise.resolve(existing);\n\tapiPromise ??= new Promise((resolve, reject) => {\n\t\tconst hostReady = globals.onSpotifyIframeApiReady;\n\t\tglobals.onSpotifyIframeApiReady = (api) => {\n\t\t\tresolve(api);\n\t\t\thostReady?.(api);\n\t\t};\n\t\tloadScript(API_URL).catch(reject);\n\t}).catch((error) => {\n\t\tapiPromise = null;\n\t\tthrow error;\n\t});\n\treturn apiPromise;\n}\n//#endregion\nexport { loadSpotifyIframeApi };\n\n//# sourceMappingURL=iframe-api.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 { loadSpotifyIframeApi } from \"./iframe-api.js\";\nimport { spotifyMediaDefaultProps } from \"./props.js\";\nimport { buildSpotifyIframeSrc, parseSpotifySource } from \"./source.js\";\nimport { isNumber } from \"@videojs/utils/predicate\";\nimport { deepEqual } from \"@videojs/utils/object\";\nimport { createPublicPromise, tryCall } from \"@videojs/utils/function\";\n//#region src/dom/spotify/media.ts\nconst SpotifyMediaBase = 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 SpotifyMedia = class extends SpotifyMediaBase {\n\t#target = null;\n\t#controller = null;\n\t#controllerReady = false;\n\t#pendingLoad = false;\n\t#creatingController = false;\n\t#loadComplete = createPublicPromise();\n\t#attachId = 0;\n\t#src = spotifyMediaDefaultProps.src;\n\t#autoplay = spotifyMediaDefaultProps.autoplay;\n\t#loop = spotifyMediaDefaultProps.loop;\n\t#controls = spotifyMediaDefaultProps.controls;\n\t#playsInline = spotifyMediaDefaultProps.playsInline;\n\t#preload = spotifyMediaDefaultProps.preload;\n\t#poster = spotifyMediaDefaultProps.poster;\n\t#source = spotifyMediaDefaultProps.source;\n\t#paused = true;\n\t#ended = false;\n\t#seeking = false;\n\t#loaded = false;\n\t#currentTime = 0;\n\t#duration = NaN;\n\t#readyState = READY_STATE_HAVE_NOTHING;\n\t#error = null;\n\t#waiting = false;\n\t#pauseRequested = false;\n\t#closeToEnded = false;\n\tstatic PLAYER_SOFTWARE_NAME = \"spotify-audio\";\n\t/** Underlying Spotify iframe API controller (null until the API loads). */\n\tget engine() {\n\t\treturn this.#controller;\n\t}\n\t/** The iframe holding the embed, which everything from the embed URL down is written to. */\n\tget target() {\n\t\treturn this.#target;\n\t}\n\t/** Bind the iframe hosting the embed; the API and controller follow as soon as an embed URL resolves. */\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\ttryCall(() => {\n\t\t\tif (this.#controller) {\n\t\t\t\tthis.#controller.iframeElement = createControllerPlaceholderFrame();\n\t\t\t\tthis.#controller.destroy();\n\t\t\t}\n\t\t});\n\t\tthis.#controller = null;\n\t\tthis.#controllerReady = false;\n\t\tthis.#pendingLoad = false;\n\t\tthis.#creatingController = false;\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/** Spotify URL or URI. Setting it re-derives `source`, carrying its embed options 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 via the iframe API; deferred until the controller is ready. */\n\tasync load() {\n\t\tif (!this.#controller || !this.#controllerReady) {\n\t\t\tthis.#pendingLoad = !!this.#target;\n\t\t\tif (this.#target && !this.#controller && !this.#creatingController) {\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.#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\ttryCall(() => this.#controller?.pause());\n\t\t\treturn;\n\t\t}\n\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\tconst parsed = parseSpotifySource(this.#src);\n\t\tif (!parsed) {\n\t\t\tthis.#error = new MediaError(`Unrecognized Spotify 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\tconst target = this.#target;\n\t\tconst embedSrc = buildSpotifyIframeSrc(this.#src, this.#snapshotProps());\n\t\tconst embeddedSrc = target?.getAttribute(\"src\") ?? \"\";\n\t\tconst rebuild = embedOptionsOf(embedSrc) !== embedOptionsOf(embeddedSrc) || isVideoEmbed(embedSrc) && embedPathOf(embedSrc) !== embedPathOf(embeddedSrc);\n\t\tif (target && embedSrc && rebuild) {\n\t\t\ttarget.src = embedSrc;\n\t\t\treturn;\n\t\t}\n\t\tthis.#controller.loadUri(`spotify:${parsed.type}:${parsed.id}`);\n\t\tconst startTime = this.#source?.engine?.spotify?.t ?? parsed.startTime;\n\t\tif (isNumber(startTime)) this.currentTime = startTime;\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\treturn this.#paused;\n\t}\n\tget ended() {\n\t\treturn this.#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.#controller?.resume();\n\t}\n\tpause() {\n\t\tthis.#pauseRequested = true;\n\t\tthis.#controller?.pause();\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.#seeking = true;\n\t\tthis.#closeToEnded = false;\n\t\tthis.#ended = false;\n\t\tthis.#currentTime = value;\n\t\tthis.dispatchEvent(new Event(\"seeking\"));\n\t\tthis.dispatchEvent(new Event(\"timeupdate\"));\n\t\tthis.#afterLoad((controller) => controller.seek(value));\n\t}\n\tget duration() {\n\t\treturn this.#duration;\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 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/** Spotify URL or URI in `src`, plus embed options under `engine.spotify`. 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?.spotify ?? null, source?.engine?.spotify ?? 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.#currentTime > 0 ? createTimeRange(0, this.#currentTime) : 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\t/** Always empty: the embed exposes no captions or other text tracks. */\n\tget textTracks() {\n\t\treturn EMPTY_TEXT_TRACKS;\n\t}\n\t#createPlayer() {\n\t\tconst target = this.#target;\n\t\tif (!target || this.#controller || this.#creatingController) return false;\n\t\tif (!target.getAttribute(\"src\")) {\n\t\t\tconst initialSrc = buildSpotifyIframeSrc(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}\n\t\tthis.#creatingController = true;\n\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\tthis.#createControllerApi(target);\n\t\treturn true;\n\t}\n\tasync #createControllerApi(target) {\n\t\tconst attachId = this.#attachId;\n\t\tlet api;\n\t\ttry {\n\t\t\tapi = await loadSpotifyIframeApi();\n\t\t} catch {\n\t\t\tif (this.#isStale(attachId)) return;\n\t\t\tthis.#creatingController = false;\n\t\t\tthis.#error = new MediaError(\"Failed to load the Spotify iframe API\", MediaError.MEDIA_ERR_NETWORK);\n\t\t\tthis.dispatchEvent(new Event(\"error\"));\n\t\t\tthis.#loadComplete.resolve();\n\t\t\treturn;\n\t\t}\n\t\tif (this.#isStale(attachId) || this.#target !== target) return;\n\t\tconst { referrerPolicy: _referrerPolicy, ...options } = this.#source?.engine?.spotify ?? {};\n\t\tconst controller = await new Promise((resolve) => api.createController(createControllerPlaceholder(), options, resolve));\n\t\tif (this.#isStale(attachId) || this.#target !== target) {\n\t\t\ttryCall(() => controller.destroy());\n\t\t\treturn;\n\t\t}\n\t\tcontroller.iframeElement = target;\n\t\tthis.#controller = controller;\n\t\tthis.#creatingController = false;\n\t\tthis.#bindControllerEvents(controller, attachId);\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\tconst controller = this.#controller;\n\t\t\tif (controller) tryCall(() => fn(controller));\n\t\t}, () => {});\n\t}\n\t#snapshotProps() {\n\t\treturn {\n\t\t\tautoplay: this.#autoplay,\n\t\t\tloop: this.#loop,\n\t\t\tcontrols: this.#controls,\n\t\t\tplaysInline: this.#playsInline,\n\t\t\tpreload: this.#preload || spotifyMediaDefaultProps.preload,\n\t\t\tsource: this.#source\n\t\t};\n\t}\n\t#resetState() {\n\t\tthis.#currentTime = 0;\n\t\tthis.#duration = NaN;\n\t\tthis.#paused = !this.#autoplay;\n\t\tthis.#ended = false;\n\t\tthis.#readyState = READY_STATE_HAVE_NOTHING;\n\t\tthis.#seeking = false;\n\t\tthis.#loaded = false;\n\t\tthis.#waiting = false;\n\t\tthis.#pauseRequested = false;\n\t\tthis.#closeToEnded = false;\n\t\tthis.#error = null;\n\t}\n\t#onControllerReady() {\n\t\tthis.#controllerReady = true;\n\t\tif (this.#pendingLoad) {\n\t\t\tthis.#pendingLoad = false;\n\t\t\tthis.load();\n\t\t\treturn;\n\t\t}\n\t\tthis.#onLoaded();\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\tfor (const type of [\n\t\t\t\"loadedmetadata\",\n\t\t\t\"durationchange\",\n\t\t\t\"loadcomplete\"\n\t\t]) this.dispatchEvent(new Event(type));\n\t\tthis.#loadComplete.resolve();\n\t\tif (this.#autoplay) this.play();\n\t}\n\t#bindControllerEvents(controller, attachId) {\n\t\tcontroller.addListener(\"ready\", () => {\n\t\t\tif (this.#isStale(attachId)) return;\n\t\t\tthis.#onControllerReady();\n\t\t});\n\t\tcontroller.addListener(\"playback_update\", (event) => {\n\t\t\tif (this.#isStale(attachId)) return;\n\t\t\tthis.#onPlaybackUpdate(event.data);\n\t\t});\n\t}\n\t#onPlaybackUpdate(data) {\n\t\tif (this.#src && !this.#loaded) this.#onLoaded();\n\t\tif (this.#restartFromEnd(data)) return;\n\t\tthis.#syncDuration(data.duration);\n\t\tthis.#syncPosition(data.position);\n\t\tif (this.#syncPlayState(data)) return;\n\t\tthis.#checkEnded();\n\t}\n\t#isStarting(data) {\n\t\treturn data.isBuffering || !data.isPaused;\n\t}\n\t#restartFromEnd(data) {\n\t\tif (!this.#closeToEnded || !this.#paused || !this.#isStarting(data)) return false;\n\t\tthis.#closeToEnded = false;\n\t\tthis.currentTime = REPLAY_POSITION;\n\t\treturn true;\n\t}\n\t#syncDuration(duration) {\n\t\tconst seconds = duration / 1e3;\n\t\tif (seconds === this.#duration) return;\n\t\tthis.#closeToEnded = false;\n\t\tthis.#duration = seconds;\n\t\tthis.dispatchEvent(new Event(\"durationchange\"));\n\t}\n\t#syncPosition(position) {\n\t\tconst seconds = position / 1e3;\n\t\tif (this.#seeking) {\n\t\t\tif (seconds < Math.floor(this.#currentTime) || seconds > this.#currentTime + SNAPSHOT_INTERVAL) return;\n\t\t\tthis.#seeking = false;\n\t\t\tthis.dispatchEvent(new Event(\"seeked\"));\n\t\t}\n\t\tif (seconds === this.#currentTime) return;\n\t\tif (Math.ceil(seconds) < this.#duration) {\n\t\t\tthis.#closeToEnded = false;\n\t\t\tthis.#ended = false;\n\t\t}\n\t\tthis.#currentTime = seconds;\n\t\tthis.dispatchEvent(new Event(\"timeupdate\"));\n\t}\n\t#syncPlayState(data) {\n\t\tif (!this.#paused && data.isPaused) {\n\t\t\tif (data.isBuffering && !this.#pauseRequested) {\n\t\t\t\tif (this.#waiting) return false;\n\t\t\t\tthis.#waiting = true;\n\t\t\t\tthis.dispatchEvent(new Event(\"waiting\"));\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tthis.#pauseRequested = false;\n\t\t\tthis.#waiting = false;\n\t\t\tthis.#paused = true;\n\t\t\tthis.dispatchEvent(new Event(\"pause\"));\n\t\t\treturn true;\n\t\t}\n\t\tif (this.#paused && this.#isStarting(data)) {\n\t\t\tthis.#pauseRequested = false;\n\t\t\tthis.#paused = false;\n\t\t\tthis.#ended = false;\n\t\t\tthis.dispatchEvent(new Event(\"play\"));\n\t\t\tthis.#waiting = data.isBuffering;\n\t\t\tif (!this.#waiting) this.#readyState = READY_STATE_HAVE_FUTURE_DATA;\n\t\t\tthis.dispatchEvent(new Event(this.#waiting ? \"waiting\" : \"playing\"));\n\t\t\treturn true;\n\t\t}\n\t\tif (this.#waiting && !data.isPaused) {\n\t\t\tthis.#waiting = false;\n\t\t\tthis.#readyState = READY_STATE_HAVE_FUTURE_DATA;\n\t\t\tthis.dispatchEvent(new Event(\"playing\"));\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t#checkEnded() {\n\t\tif (this.#paused || this.#seeking || this.#closeToEnded) return;\n\t\tif (!(this.#duration > 0) || !Number.isFinite(this.#duration)) return;\n\t\tif (Math.ceil(this.#currentTime) < this.#duration) return;\n\t\tthis.#closeToEnded = true;\n\t\tif (this.#loop) {\n\t\t\tthis.currentTime = REPLAY_POSITION;\n\t\t\treturn;\n\t\t}\n\t\tthis.#paused = true;\n\t\tthis.#ended = true;\n\t\tthis.pause();\n\t\tthis.dispatchEvent(new Event(\"pause\"));\n\t\tthis.dispatchEvent(new Event(\"ended\"));\n\t}\n};\nfunction createControllerPlaceholder() {\n\treturn globalThis.document.createElement(\"div\");\n}\nfunction createControllerPlaceholderFrame() {\n\treturn globalThis.document.createElement(\"iframe\");\n}\nfunction embedOptionsOf(src) {\n\tconst [, query] = src.split(\"?\");\n\tconst params = new URLSearchParams(query);\n\tparams.delete(\"t\");\n\tparams.sort();\n\treturn `${isVideoEmbed(src) ? \"video\" : \"audio\"}?${params}`;\n}\nfunction embedPathOf(src) {\n\treturn src.split(\"?\")[0] ?? \"\";\n}\nfunction isVideoEmbed(src) {\n\treturn embedPathOf(src).endsWith(\"/video\");\n}\nconst READY_STATE_HAVE_NOTHING = 0;\nconst READY_STATE_HAVE_METADATA = 1;\nconst READY_STATE_HAVE_FUTURE_DATA = 3;\nconst REPLAY_POSITION = 1;\nconst SNAPSHOT_INTERVAL = 1;\n//#endregion\nexport { SpotifyMedia };\n\n//# sourceMappingURL=media.js.map","import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport { buildSpotifyIframeSrc, SpotifyMedia } from '@videojs/media/dom/spotify';\nimport { escapeHtml } from '@videojs/utils/string';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\n\nclass SpotifyCustomMediaElement extends CustomMediaElement('iframe', SpotifyMedia) {\n static override getTemplateHTML = (attrs: Record<string, string>): string => {\n const initialSrc = buildSpotifyIframeSrc(attrs.src ?? '', templateAttrsToEmbedProps(attrs));\n const srcAttr = initialSrc ? ` src=\"${escapeHtml(initialSrc)}\"` : '';\n return /*html*/ `\n <style>\n :host {\n display: block;\n min-width: 160px;\n min-height: 80px;\n position: relative;\n }\n iframe {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n /*\n * Without Spotify's own chrome the embed is a transport and nothing else:\n * its player UI would otherwise show through whatever skin is drawn over\n * it. Hidden rather than merely inert, and important so a consumer's own\n * display rule cannot put it back on screen. An iframe in a hidden subtree\n * still loads and plays its src.\n */\n :host(:not([controls])) {\n display: none !important;\n }\n </style>\n <iframe\n part=\"iframe\"\n ${srcAttr}\n allow=\"autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture\"\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 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 SpotifyAudio extends MediaAttachMixin(SpotifyCustomMediaElement) {}\n","import { SpotifyAudio } from '../../media/spotify-audio';\nimport { safeDefine } from '../safe-define';\n\nexport class SpotifyAudioElement extends SpotifyAudio {\n static readonly tagName = 'spotify-audio';\n}\n\nsafeDefine(SpotifyAudioElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [SpotifyAudioElement.tagName]: SpotifyAudioElement;\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|