@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,636 @@
|
|
|
1
|
+
import { l as isString, o as isNumber, s as isObject, u as isUndefined } 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 { n as createTimeRange, r as createPublicPromise, t as MediaPlayedRangesMixin } from "../media-played-ranges-Yd9acuMt.js";
|
|
7
|
+
import { n as tryCall, t as serializeEmbedParams } from "../embed-params-W6T88S8x.js";
|
|
8
|
+
import { n as EMPTY_TEXT_TRACKS, r as EMPTY_TIME_RANGES } from "../constants-CsSwyIX6.js";
|
|
9
|
+
import { t as MediaError } from "../media-error-zO-Hg4un.js";
|
|
10
|
+
import { t as MediaAttachMixin } from "../media-attach-mixin-uThv5NL_.js";
|
|
11
|
+
|
|
12
|
+
//#region ../media/dist/dev/dom/tiktok/props.js
|
|
13
|
+
const tiktokMediaDefaultProps = {
|
|
14
|
+
src: "",
|
|
15
|
+
autoplay: false,
|
|
16
|
+
defaultMuted: false,
|
|
17
|
+
muted: false,
|
|
18
|
+
loop: false,
|
|
19
|
+
controls: false,
|
|
20
|
+
playsInline: true,
|
|
21
|
+
preload: "metadata",
|
|
22
|
+
poster: "",
|
|
23
|
+
source: null
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region ../media/dist/dev/dom/tiktok/source.js
|
|
28
|
+
/**
|
|
29
|
+
* Parse a TikTok source string. Recognizes raw numeric ids, `player/v1/` embed
|
|
30
|
+
* URLs, `share/video/` links, and the `@user/video/` URLs the app hands out.
|
|
31
|
+
*/
|
|
32
|
+
function parseTikTokSource(src) {
|
|
33
|
+
if (!src) return null;
|
|
34
|
+
if (MATCH_ID.test(src)) return { id: src };
|
|
35
|
+
const id = MATCH_SRC.exec(src)?.[1];
|
|
36
|
+
return id ? { id } : null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Whether the embed has to carry an `autoplay` nobody asked for. TikTok builds its player lazily: without one it
|
|
40
|
+
* creates no media element, never reports `onPlayerReady`, and drops every command silently, until something is
|
|
41
|
+
* clicked inside the frame — which a frame under a player skin never gets. The host parks the player as soon as it
|
|
42
|
+
* is up, so this buys one that answers commands, not a video that plays.
|
|
43
|
+
*/
|
|
44
|
+
function shouldBootstrapTikTokEmbed(props = {}) {
|
|
45
|
+
return !props.autoplay && props.preload !== "none" && props.controls !== true;
|
|
46
|
+
}
|
|
47
|
+
/** Build the iframe `src` URL for a TikTok embed from the given props. */
|
|
48
|
+
function buildTikTokIframeSrc(src, props = {}) {
|
|
49
|
+
const parsed = parseTikTokSource(src);
|
|
50
|
+
if (!parsed) return "";
|
|
51
|
+
const { referrerPolicy: _referrerPolicy, ...tiktok } = props.source?.engine?.tiktok ?? {};
|
|
52
|
+
const params = {
|
|
53
|
+
controls: props.controls === true ? null : 0,
|
|
54
|
+
autoplay: props.autoplay || shouldBootstrapTikTokEmbed(props) || null,
|
|
55
|
+
muted: props.defaultMuted || null,
|
|
56
|
+
loop: props.loop || null,
|
|
57
|
+
rel: 0,
|
|
58
|
+
...tiktok
|
|
59
|
+
};
|
|
60
|
+
return `${EMBED_BASE}/${parsed.id}?${serializeEmbedParams(params)}`;
|
|
61
|
+
}
|
|
62
|
+
const EMBED_BASE = "https://www.tiktok.com/player/v1";
|
|
63
|
+
const MATCH_ID = /^\d+$/;
|
|
64
|
+
const MATCH_SRC = /tiktok\.com\/(?:player\/v1\/|share\/video\/|@[^/]+\/video\/)(\d+)/;
|
|
65
|
+
|
|
66
|
+
//#endregion
|
|
67
|
+
//#region ../media/dist/dev/dom/tiktok/player-api.js
|
|
68
|
+
/** Marker every player message carries, whichever way it travels. */
|
|
69
|
+
const PLAYER_MESSAGE_KEY = "x-tiktok-player";
|
|
70
|
+
/** Whether a `message` event's data is one of the embed's; every frame posts here, so the marker tells them apart. */
|
|
71
|
+
function isTikTokPlayerMessage(data) {
|
|
72
|
+
if (!isObject(data)) return false;
|
|
73
|
+
const message = data;
|
|
74
|
+
return !!message["x-tiktok-player"] && isString(message.type);
|
|
75
|
+
}
|
|
76
|
+
/** Whether a value is the pair `onCurrentTime` reports. */
|
|
77
|
+
function isTikTokCurrentTime(value) {
|
|
78
|
+
return isObject(value) && isNumber(value.currentTime);
|
|
79
|
+
}
|
|
80
|
+
/** Whether a value is the payload `onPlayerError` reports. */
|
|
81
|
+
function isTikTokPlayerError(value) {
|
|
82
|
+
return isObject(value) && isNumber(value.errorCode);
|
|
83
|
+
}
|
|
84
|
+
/** Build a command message. A command without a value must not carry one at all. */
|
|
85
|
+
function createTikTokPlayerCommand(type, value) {
|
|
86
|
+
return {
|
|
87
|
+
[PLAYER_MESSAGE_KEY]: true,
|
|
88
|
+
type,
|
|
89
|
+
...isNumber(value) && { value }
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
//#endregion
|
|
94
|
+
//#region ../media/dist/dev/dom/tiktok/media.js
|
|
95
|
+
const TikTokMediaBase = MediaPlayedRangesMixin(EventTarget);
|
|
96
|
+
/**
|
|
97
|
+
* @fires sourcechange - Fired when `source` changes, either directly or by resolving a new `src`. Read `source` for the new value.
|
|
98
|
+
*/
|
|
99
|
+
var TikTokMedia = class extends TikTokMediaBase {
|
|
100
|
+
#target = null;
|
|
101
|
+
#loadComplete = createPublicPromise();
|
|
102
|
+
#messages = null;
|
|
103
|
+
#attachId = 0;
|
|
104
|
+
#src = tiktokMediaDefaultProps.src;
|
|
105
|
+
#autoplay = tiktokMediaDefaultProps.autoplay;
|
|
106
|
+
#defaultMuted = tiktokMediaDefaultProps.defaultMuted;
|
|
107
|
+
#loop = tiktokMediaDefaultProps.loop;
|
|
108
|
+
#controls = tiktokMediaDefaultProps.controls;
|
|
109
|
+
#playsInline = tiktokMediaDefaultProps.playsInline;
|
|
110
|
+
#preload = tiktokMediaDefaultProps.preload;
|
|
111
|
+
#poster = tiktokMediaDefaultProps.poster;
|
|
112
|
+
#source = tiktokMediaDefaultProps.source;
|
|
113
|
+
#paused = true;
|
|
114
|
+
#ended = false;
|
|
115
|
+
#seeking = false;
|
|
116
|
+
#loaded = false;
|
|
117
|
+
#srcUnsupported = false;
|
|
118
|
+
#playRequested = false;
|
|
119
|
+
#bootstrap = "off";
|
|
120
|
+
#parkPosition = 0;
|
|
121
|
+
#playFired = false;
|
|
122
|
+
#currentTime = 0;
|
|
123
|
+
#duration = NaN;
|
|
124
|
+
#muted = false;
|
|
125
|
+
#readyState = READY_STATE_HAVE_NOTHING;
|
|
126
|
+
#error = null;
|
|
127
|
+
#isFullscreen = false;
|
|
128
|
+
static PLAYER_SOFTWARE_NAME = "tiktok-video";
|
|
129
|
+
/** The embed's window. TikTok publishes no player object; commands are posted to the frame. Null until rendered. */
|
|
130
|
+
get engine() {
|
|
131
|
+
return this.#target?.contentWindow ?? null;
|
|
132
|
+
}
|
|
133
|
+
get target() {
|
|
134
|
+
return this.#target;
|
|
135
|
+
}
|
|
136
|
+
/** Bind the iframe hosting the embed. The embed follows once a `src` resolves, which may be after attach. */
|
|
137
|
+
attach(target) {
|
|
138
|
+
if (!target || this.#target === target) return;
|
|
139
|
+
if (this.#target) this.detach();
|
|
140
|
+
this.#target = target;
|
|
141
|
+
this.#listen(target);
|
|
142
|
+
this.#beginLoad();
|
|
143
|
+
this.#createPlayer();
|
|
144
|
+
}
|
|
145
|
+
detach() {
|
|
146
|
+
if (!this.#target) return;
|
|
147
|
+
this.#attachId++;
|
|
148
|
+
this.#messages?.abort();
|
|
149
|
+
this.#messages = null;
|
|
150
|
+
this.#target = null;
|
|
151
|
+
this.#playRequested = false;
|
|
152
|
+
this.#loadComplete.resolve();
|
|
153
|
+
this.#resetState();
|
|
154
|
+
}
|
|
155
|
+
destroy() {
|
|
156
|
+
this.detach();
|
|
157
|
+
super.destroy();
|
|
158
|
+
}
|
|
159
|
+
get src() {
|
|
160
|
+
return this.#src;
|
|
161
|
+
}
|
|
162
|
+
/** TikTok URL or id. Setting it re-derives `source`, carrying its player parameters over. */
|
|
163
|
+
set src(value) {
|
|
164
|
+
const { engine } = this.#source ?? {};
|
|
165
|
+
const next = {
|
|
166
|
+
...engine && { engine },
|
|
167
|
+
...value && { src: value }
|
|
168
|
+
};
|
|
169
|
+
this.source = Object.keys(next).length > 0 ? next : null;
|
|
170
|
+
}
|
|
171
|
+
get currentSrc() {
|
|
172
|
+
return this.#target?.getAttribute("src") ?? "";
|
|
173
|
+
}
|
|
174
|
+
get readyState() {
|
|
175
|
+
return this.#readyState;
|
|
176
|
+
}
|
|
177
|
+
/** Rebuild the embed for the current source; rewriting the iframe URL is the only load the protocol allows. */
|
|
178
|
+
async load() {
|
|
179
|
+
if (!this.#target) return;
|
|
180
|
+
const load = this.#beginLoad();
|
|
181
|
+
await Promise.resolve();
|
|
182
|
+
if (load !== this.#loadComplete) return;
|
|
183
|
+
const target = this.#target;
|
|
184
|
+
if (!target) return;
|
|
185
|
+
const embedSrc = this.#src ? buildTikTokIframeSrc(this.#src, this.#snapshotProps()) : "";
|
|
186
|
+
if (embedSrc && target.getAttribute("src") === embedSrc) {
|
|
187
|
+
if (this.#loaded) load.resolve();
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
this.#resetState();
|
|
191
|
+
this.dispatchEvent(new Event("emptied"));
|
|
192
|
+
if (!this.#src) {
|
|
193
|
+
load.resolve();
|
|
194
|
+
target.removeAttribute("src");
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
this.dispatchEvent(new Event("loadstart"));
|
|
198
|
+
if (!embedSrc) {
|
|
199
|
+
this.#srcUnsupported = true;
|
|
200
|
+
this.#error = new MediaError(`Unrecognized TikTok source: ${this.#src}`, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
|
|
201
|
+
this.dispatchEvent(new Event("error"));
|
|
202
|
+
load.resolve();
|
|
203
|
+
this.#post("pause");
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
this.#bootstrap = shouldBootstrapTikTokEmbed(this.#snapshotProps()) ? "parking" : "off";
|
|
207
|
+
target.src = embedSrc;
|
|
208
|
+
}
|
|
209
|
+
#beginLoad() {
|
|
210
|
+
this.#loadComplete.resolve();
|
|
211
|
+
this.#loadComplete = createPublicPromise();
|
|
212
|
+
return this.#loadComplete;
|
|
213
|
+
}
|
|
214
|
+
get #hasSource() {
|
|
215
|
+
return !!this.#src && !this.#srcUnsupported;
|
|
216
|
+
}
|
|
217
|
+
get paused() {
|
|
218
|
+
return this.#paused;
|
|
219
|
+
}
|
|
220
|
+
get ended() {
|
|
221
|
+
return this.#ended;
|
|
222
|
+
}
|
|
223
|
+
get seeking() {
|
|
224
|
+
return this.#seeking;
|
|
225
|
+
}
|
|
226
|
+
async play() {
|
|
227
|
+
if (!this.#hasSource) return;
|
|
228
|
+
this.#playRequested = true;
|
|
229
|
+
if (this.#bootstrap === "parking") return;
|
|
230
|
+
this.#takeOver();
|
|
231
|
+
this.#post("play");
|
|
232
|
+
}
|
|
233
|
+
pause() {
|
|
234
|
+
this.#playRequested = false;
|
|
235
|
+
this.#post("pause");
|
|
236
|
+
}
|
|
237
|
+
get currentTime() {
|
|
238
|
+
return this.#currentTime;
|
|
239
|
+
}
|
|
240
|
+
set currentTime(value) {
|
|
241
|
+
if (this.#currentTime === value) return;
|
|
242
|
+
if (this.#bootstrap !== "off") this.#parkPosition = value;
|
|
243
|
+
this.#seeking = true;
|
|
244
|
+
this.#currentTime = value;
|
|
245
|
+
this.dispatchEvent(new Event("seeking"));
|
|
246
|
+
this.dispatchEvent(new Event("timeupdate"));
|
|
247
|
+
this.#afterLoad(() => {
|
|
248
|
+
this.#post("seekTo", value);
|
|
249
|
+
if (this.#bootstrap === "parked") this.#settleSeek();
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
get duration() {
|
|
253
|
+
return this.#duration;
|
|
254
|
+
}
|
|
255
|
+
get muted() {
|
|
256
|
+
return this.#muted;
|
|
257
|
+
}
|
|
258
|
+
set muted(value) {
|
|
259
|
+
if (this.#muted === value) return;
|
|
260
|
+
this.#muted = value;
|
|
261
|
+
this.#afterLoad(() => this.#post(value ? "mute" : "unMute"));
|
|
262
|
+
}
|
|
263
|
+
get autoplay() {
|
|
264
|
+
return this.#autoplay;
|
|
265
|
+
}
|
|
266
|
+
set autoplay(value) {
|
|
267
|
+
this.#autoplay = value;
|
|
268
|
+
}
|
|
269
|
+
get defaultMuted() {
|
|
270
|
+
return this.#defaultMuted;
|
|
271
|
+
}
|
|
272
|
+
set defaultMuted(value) {
|
|
273
|
+
this.#defaultMuted = value;
|
|
274
|
+
if (!this.#loaded) this.#muted = value;
|
|
275
|
+
}
|
|
276
|
+
get loop() {
|
|
277
|
+
return this.#loop;
|
|
278
|
+
}
|
|
279
|
+
set loop(value) {
|
|
280
|
+
this.#loop = value;
|
|
281
|
+
}
|
|
282
|
+
get controls() {
|
|
283
|
+
return this.#controls;
|
|
284
|
+
}
|
|
285
|
+
set controls(value) {
|
|
286
|
+
this.#controls = value;
|
|
287
|
+
}
|
|
288
|
+
get playsInline() {
|
|
289
|
+
return this.#playsInline;
|
|
290
|
+
}
|
|
291
|
+
set playsInline(value) {
|
|
292
|
+
this.#playsInline = value;
|
|
293
|
+
}
|
|
294
|
+
get preload() {
|
|
295
|
+
return this.#preload;
|
|
296
|
+
}
|
|
297
|
+
set preload(value) {
|
|
298
|
+
this.#preload = value;
|
|
299
|
+
}
|
|
300
|
+
get poster() {
|
|
301
|
+
return this.#poster;
|
|
302
|
+
}
|
|
303
|
+
set poster(value) {
|
|
304
|
+
this.#poster = value;
|
|
305
|
+
}
|
|
306
|
+
/** TikTok URL or id in `src`, player params under `engine.tiktok`. Re-derives `src`; equal sources skip reload. */
|
|
307
|
+
get source() {
|
|
308
|
+
return this.#source;
|
|
309
|
+
}
|
|
310
|
+
set source(value) {
|
|
311
|
+
const source = value ?? null;
|
|
312
|
+
if (source === this.#source) return;
|
|
313
|
+
const src = source?.src ?? "";
|
|
314
|
+
const srcChanged = this.#src !== src;
|
|
315
|
+
const engineChanged = !deepEqual(this.#source?.engine?.tiktok ?? null, source?.engine?.tiktok ?? null);
|
|
316
|
+
this.#source = source;
|
|
317
|
+
this.#src = src;
|
|
318
|
+
if (srcChanged || engineChanged) this.load();
|
|
319
|
+
this.dispatchEvent(new Event("sourcechange"));
|
|
320
|
+
}
|
|
321
|
+
get buffered() {
|
|
322
|
+
return this.#currentTime > 0 ? createTimeRange(0, this.#currentTime) : EMPTY_TIME_RANGES;
|
|
323
|
+
}
|
|
324
|
+
get seekable() {
|
|
325
|
+
return this.#duration > 0 && Number.isFinite(this.#duration) ? createTimeRange(0, this.#duration) : EMPTY_TIME_RANGES;
|
|
326
|
+
}
|
|
327
|
+
get error() {
|
|
328
|
+
return this.#error;
|
|
329
|
+
}
|
|
330
|
+
/** Always empty: `closed_caption` is the embed's only say over captions. */
|
|
331
|
+
get textTracks() {
|
|
332
|
+
return EMPTY_TEXT_TRACKS;
|
|
333
|
+
}
|
|
334
|
+
get isFullscreen() {
|
|
335
|
+
return this.#isFullscreen;
|
|
336
|
+
}
|
|
337
|
+
async requestFullscreen() {
|
|
338
|
+
if (!this.#target?.requestFullscreen) return;
|
|
339
|
+
await this.#target.requestFullscreen();
|
|
340
|
+
this.#isFullscreen = true;
|
|
341
|
+
}
|
|
342
|
+
async exitFullscreen() {
|
|
343
|
+
const doc = globalThis.document;
|
|
344
|
+
if (doc?.fullscreenElement && doc.fullscreenElement === this.#target) await doc.exitFullscreen();
|
|
345
|
+
this.#isFullscreen = false;
|
|
346
|
+
}
|
|
347
|
+
#createPlayer() {
|
|
348
|
+
const target = this.#target;
|
|
349
|
+
if (!target) return false;
|
|
350
|
+
const props = this.#snapshotProps();
|
|
351
|
+
if (target.getAttribute("src")) {
|
|
352
|
+
this.#bootstrap = shouldBootstrapTikTokEmbed(props) ? "parking" : "off";
|
|
353
|
+
this.dispatchEvent(new Event("loadstart"));
|
|
354
|
+
return true;
|
|
355
|
+
}
|
|
356
|
+
const initialSrc = buildTikTokIframeSrc(this.#src, props);
|
|
357
|
+
if (!initialSrc) {
|
|
358
|
+
this.#loadComplete.resolve();
|
|
359
|
+
return false;
|
|
360
|
+
}
|
|
361
|
+
this.#bootstrap = shouldBootstrapTikTokEmbed(props) ? "parking" : "off";
|
|
362
|
+
target.src = initialSrc;
|
|
363
|
+
this.dispatchEvent(new Event("loadstart"));
|
|
364
|
+
return true;
|
|
365
|
+
}
|
|
366
|
+
#listen(target) {
|
|
367
|
+
const win = globalThis.window;
|
|
368
|
+
if (isUndefined(win)) return;
|
|
369
|
+
const attachId = this.#attachId;
|
|
370
|
+
this.#messages = new AbortController();
|
|
371
|
+
win.addEventListener("message", (event) => this.#onMessage(event, target, attachId), { signal: this.#messages.signal });
|
|
372
|
+
}
|
|
373
|
+
#onMessage(event, target, attachId) {
|
|
374
|
+
if (this.#isStale(attachId)) return;
|
|
375
|
+
const frame = target.contentWindow;
|
|
376
|
+
if (!frame || event.source !== frame) return;
|
|
377
|
+
const message = event.data;
|
|
378
|
+
if (!isTikTokPlayerMessage(message)) return;
|
|
379
|
+
if (this.#srcUnsupported) return;
|
|
380
|
+
if (this.#hasSource) this.#onLoaded();
|
|
381
|
+
switch (message.type) {
|
|
382
|
+
case "onPlayerReady": break;
|
|
383
|
+
case "onStateChange":
|
|
384
|
+
if (isNumber(message.value)) this.#onStateChange(message.value);
|
|
385
|
+
break;
|
|
386
|
+
case "onCurrentTime":
|
|
387
|
+
if (isTikTokCurrentTime(message.value)) this.#onCurrentTime(message.value.currentTime, message.value.duration);
|
|
388
|
+
break;
|
|
389
|
+
case "onVolumeChange": break;
|
|
390
|
+
case "onMute":
|
|
391
|
+
if (this.#bootstrap !== "off") break;
|
|
392
|
+
this.#muted = !!message.value;
|
|
393
|
+
this.dispatchEvent(new Event("volumechange"));
|
|
394
|
+
break;
|
|
395
|
+
case "onPlayerError":
|
|
396
|
+
if (isTikTokPlayerError(message.value)) this.#onPlayerError(message.value);
|
|
397
|
+
break;
|
|
398
|
+
case "onError":
|
|
399
|
+
this.#onError("TikTok player error; visit https://developers.tiktok.com/doc/embed-player for what the embed supports.", isMediaErrorCode(message.value) ? message.value : MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
|
|
400
|
+
break;
|
|
401
|
+
default:
|
|
402
|
+
console.warn(`Unhandled TikTok player message: ${message.type}`);
|
|
403
|
+
break;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
#isStale(attachId) {
|
|
407
|
+
return attachId !== this.#attachId;
|
|
408
|
+
}
|
|
409
|
+
#afterLoad(fn) {
|
|
410
|
+
this.#loadComplete.then(() => {
|
|
411
|
+
if (!this.#target) return;
|
|
412
|
+
tryCall(fn);
|
|
413
|
+
}, () => {});
|
|
414
|
+
}
|
|
415
|
+
#post(type, value) {
|
|
416
|
+
const frame = this.#target?.contentWindow;
|
|
417
|
+
if (!frame) return;
|
|
418
|
+
frame.postMessage(createTikTokPlayerCommand(type, value), "*");
|
|
419
|
+
}
|
|
420
|
+
get #nextMuted() {
|
|
421
|
+
return this.#defaultMuted || this.#muted;
|
|
422
|
+
}
|
|
423
|
+
#snapshotProps() {
|
|
424
|
+
return {
|
|
425
|
+
autoplay: this.#autoplay,
|
|
426
|
+
defaultMuted: this.#nextMuted,
|
|
427
|
+
loop: this.#loop,
|
|
428
|
+
controls: this.#controls,
|
|
429
|
+
preload: this.#preload,
|
|
430
|
+
source: this.#source
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
#resetState() {
|
|
434
|
+
this.#currentTime = 0;
|
|
435
|
+
this.#duration = NaN;
|
|
436
|
+
this.#muted = this.#nextMuted;
|
|
437
|
+
this.#paused = !this.#autoplay;
|
|
438
|
+
this.#ended = false;
|
|
439
|
+
this.#readyState = READY_STATE_HAVE_NOTHING;
|
|
440
|
+
this.#seeking = false;
|
|
441
|
+
this.#loaded = false;
|
|
442
|
+
this.#srcUnsupported = false;
|
|
443
|
+
this.#playFired = false;
|
|
444
|
+
this.#bootstrap = "off";
|
|
445
|
+
this.#parkPosition = 0;
|
|
446
|
+
this.#error = null;
|
|
447
|
+
this.#isFullscreen = false;
|
|
448
|
+
}
|
|
449
|
+
#onLoaded() {
|
|
450
|
+
if (this.#loaded) return;
|
|
451
|
+
this.#loaded = true;
|
|
452
|
+
this.#readyState = READY_STATE_HAVE_METADATA;
|
|
453
|
+
if (this.#muted) this.#post("mute");
|
|
454
|
+
if (this.#bootstrap === "parking") {
|
|
455
|
+
this.#post("pause");
|
|
456
|
+
this.#post("seekTo", this.#parkPosition);
|
|
457
|
+
} else if (this.#playRequested) {
|
|
458
|
+
this.#playRequested = false;
|
|
459
|
+
this.#post("play");
|
|
460
|
+
}
|
|
461
|
+
for (const type of ["loadedmetadata", "loadcomplete"]) this.dispatchEvent(new Event(type));
|
|
462
|
+
this.#loadComplete.resolve();
|
|
463
|
+
}
|
|
464
|
+
#park() {
|
|
465
|
+
if (this.#bootstrap === "parked") return;
|
|
466
|
+
this.#bootstrap = "parked";
|
|
467
|
+
this.#currentTime = this.#parkPosition;
|
|
468
|
+
this.#paused = true;
|
|
469
|
+
this.#playFired = false;
|
|
470
|
+
if (!this.#muted) this.#post("unMute");
|
|
471
|
+
this.#settleSeek();
|
|
472
|
+
if (this.#playRequested) {
|
|
473
|
+
this.#playRequested = false;
|
|
474
|
+
this.#takeOver();
|
|
475
|
+
this.#post("play");
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
#takeOver() {
|
|
479
|
+
if (this.#bootstrap === "parked") this.#bootstrap = "off";
|
|
480
|
+
}
|
|
481
|
+
#settleSeek() {
|
|
482
|
+
if (!this.#seeking) return;
|
|
483
|
+
this.#seeking = false;
|
|
484
|
+
this.dispatchEvent(new Event("seeked"));
|
|
485
|
+
}
|
|
486
|
+
#onPlayerError({ errorCode, errorType }) {
|
|
487
|
+
if (errorCode === 3002) {
|
|
488
|
+
console.warn("The TikTok embed refused to play: the browser blocked it. A cross-origin embed needs its own user activation, or a muted video, before it will start.");
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
const named = errorType ? ` (${errorType})` : "";
|
|
492
|
+
this.#onError(`TikTok player error ${errorCode}${named}; visit https://developers.tiktok.com/doc/embed-player for what the embed supports.`, toMediaErrorCode(errorCode));
|
|
493
|
+
}
|
|
494
|
+
#onError(message, code) {
|
|
495
|
+
this.#error = new MediaError(message, code);
|
|
496
|
+
this.dispatchEvent(new Event("error"));
|
|
497
|
+
this.#loadComplete.resolve();
|
|
498
|
+
}
|
|
499
|
+
#onStateChange(state) {
|
|
500
|
+
const emit = (type) => this.dispatchEvent(new Event(type));
|
|
501
|
+
if (this.#bootstrap !== "off") {
|
|
502
|
+
if (state === 1 || state === 3) this.#post("pause");
|
|
503
|
+
else if (state === 2 || state === 0) this.#park();
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
if (state === 1 || state === 3) {
|
|
507
|
+
if (!this.#playFired) {
|
|
508
|
+
this.#playFired = true;
|
|
509
|
+
this.#paused = false;
|
|
510
|
+
this.#ended = false;
|
|
511
|
+
emit("play");
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
if (state === 3) emit("waiting");
|
|
515
|
+
else if (state === 1) {
|
|
516
|
+
this.#readyState = READY_STATE_HAVE_FUTURE_DATA;
|
|
517
|
+
this.#paused = false;
|
|
518
|
+
emit("playing");
|
|
519
|
+
} else if (state === 2) {
|
|
520
|
+
this.#playFired = false;
|
|
521
|
+
this.#paused = true;
|
|
522
|
+
emit("pause");
|
|
523
|
+
} else if (state === 0) {
|
|
524
|
+
this.#playFired = false;
|
|
525
|
+
this.#paused = true;
|
|
526
|
+
emit("pause");
|
|
527
|
+
this.#ended = true;
|
|
528
|
+
emit("ended");
|
|
529
|
+
if (this.#loop) this.play();
|
|
530
|
+
} else if (state === -1) {
|
|
531
|
+
this.#playFired = false;
|
|
532
|
+
this.#paused = true;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
#onCurrentTime(currentTime, duration) {
|
|
536
|
+
if (this.#bootstrap === "off") {
|
|
537
|
+
if (currentTime !== this.#currentTime) {
|
|
538
|
+
this.#currentTime = currentTime;
|
|
539
|
+
this.dispatchEvent(new Event("timeupdate"));
|
|
540
|
+
}
|
|
541
|
+
if (this.#seeking) {
|
|
542
|
+
this.#seeking = false;
|
|
543
|
+
this.dispatchEvent(new Event("seeked"));
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
if (isNumber(duration) && duration > 0 && duration !== this.#duration) {
|
|
547
|
+
this.#duration = duration;
|
|
548
|
+
this.dispatchEvent(new Event("durationchange"));
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
};
|
|
552
|
+
/** Read a TikTok player error code as a `MediaError` one; TikTok groups codes by category, so the category is read. */
|
|
553
|
+
function toMediaErrorCode(errorCode) {
|
|
554
|
+
if (errorCode >= 2e3 && errorCode < 3e3) return MediaError.MEDIA_ERR_NETWORK;
|
|
555
|
+
if (errorCode >= 3e3 && errorCode < 4e3) return MediaError.MEDIA_ERR_DECODE;
|
|
556
|
+
return MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED;
|
|
557
|
+
}
|
|
558
|
+
/** Whether a reported value is one of the codes a `MediaError` can carry. */
|
|
559
|
+
function isMediaErrorCode(value) {
|
|
560
|
+
return isNumber(value) && value >= MediaError.MEDIA_ERR_ABORTED && value <= MediaError.MEDIA_ERR_ENCRYPTED;
|
|
561
|
+
}
|
|
562
|
+
const READY_STATE_HAVE_NOTHING = 0;
|
|
563
|
+
const READY_STATE_HAVE_METADATA = 1;
|
|
564
|
+
const READY_STATE_HAVE_FUTURE_DATA = 3;
|
|
565
|
+
|
|
566
|
+
//#endregion
|
|
567
|
+
//#region src/media/tiktok-video/media.ts
|
|
568
|
+
var TikTokCustomMediaElement = class extends CustomMediaElement("iframe", TikTokMedia) {
|
|
569
|
+
static {
|
|
570
|
+
this.getTemplateHTML = (attrs) => {
|
|
571
|
+
const initialSrc = buildTikTokIframeSrc(attrs.src ?? "", templateAttrsToEmbedProps(attrs));
|
|
572
|
+
return `
|
|
573
|
+
<style>
|
|
574
|
+
:host {
|
|
575
|
+
display: inline-block;
|
|
576
|
+
/* TikTok videos are portrait, and the player refuses to draw its chrome
|
|
577
|
+
below 325x578, so that is where this host starts rather than the
|
|
578
|
+
300x150 the landscape embeds use. */
|
|
579
|
+
min-width: 325px;
|
|
580
|
+
min-height: 578px;
|
|
581
|
+
position: relative;
|
|
582
|
+
}
|
|
583
|
+
iframe {
|
|
584
|
+
position: absolute;
|
|
585
|
+
inset: 0;
|
|
586
|
+
width: 100%;
|
|
587
|
+
height: 100%;
|
|
588
|
+
border: 0;
|
|
589
|
+
}
|
|
590
|
+
/* A cross-origin frame swallows every pointer event, so the skin above it
|
|
591
|
+
never sees the hover that reveals the controls. Kept out of hit-testing
|
|
592
|
+
except where the host leaves TikTok's player dormant, which is the same
|
|
593
|
+
pair of cases shouldBootstrapTikTokEmbed opts out of: then the frame's
|
|
594
|
+
own controls are the only thing that can still start it. */
|
|
595
|
+
:host(:not([controls]):not([preload="none"])) {
|
|
596
|
+
pointer-events: none;
|
|
597
|
+
}
|
|
598
|
+
</style>
|
|
599
|
+
<iframe
|
|
600
|
+
part="iframe"
|
|
601
|
+
title="TikTok video player"
|
|
602
|
+
${initialSrc ? ` src="${escapeHtml(initialSrc)}"` : ""}
|
|
603
|
+
allow="accelerometer; fullscreen; autoplay; encrypted-media; gyroscope; picture-in-picture"
|
|
604
|
+
allowfullscreen
|
|
605
|
+
frameborder="0"
|
|
606
|
+
width="100%"
|
|
607
|
+
height="100%"
|
|
608
|
+
referrerpolicy="${escapeHtml(attrs.referrerpolicy ?? "")}"
|
|
609
|
+
></iframe>
|
|
610
|
+
`;
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
};
|
|
614
|
+
function templateAttrsToEmbedProps(attrs) {
|
|
615
|
+
return {
|
|
616
|
+
autoplay: attrs.autoplay !== void 0,
|
|
617
|
+
defaultMuted: attrs.muted !== void 0,
|
|
618
|
+
loop: attrs.loop !== void 0,
|
|
619
|
+
controls: attrs.controls !== void 0,
|
|
620
|
+
preload: attrs.preload
|
|
621
|
+
};
|
|
622
|
+
}
|
|
623
|
+
var TikTokVideo = class extends MediaAttachMixin(TikTokCustomMediaElement) {};
|
|
624
|
+
|
|
625
|
+
//#endregion
|
|
626
|
+
//#region src/define/media/tiktok-video.ts
|
|
627
|
+
var TikTokVideoElement = class extends TikTokVideo {
|
|
628
|
+
static {
|
|
629
|
+
this.tagName = "tiktok-video";
|
|
630
|
+
}
|
|
631
|
+
};
|
|
632
|
+
safeDefine(TikTokVideoElement);
|
|
633
|
+
|
|
634
|
+
//#endregion
|
|
635
|
+
export { TikTokVideoElement };
|
|
636
|
+
//# sourceMappingURL=tiktok-video.dev.js.map
|