UNPKG

@ktt45678/vidstack

Version:

UI component library for building high-quality, accessible video and audio experiences on the web.

2 lines (1 loc) 4.41 kB
import{Z as p,s as b,e as m,i as g,g as v,j as f,_ as y,k as h,T as k}from"../chunks/vidstack-B1PqmCkk.js";import{T as u}from"../chunks/vidstack-BRxZ8PR0.js";import{p as w}from"../chunks/vidstack-Ds9fx5AB.js";import{E as S}from"../chunks/vidstack-W2762mNx.js";import{resolveYouTubeVideoId as T}from"../chunks/vidstack-BPxi4x2R.js";import"../chunks/vidstack-BC0sXP__.js";const r={Om:-1,pg:0,qg:1,gj:2,hj:3,ij:5};class R extends S{constructor(t,e){super(t),this.b=e,this.$$PROVIDER_TYPE="YOUTUBE",this.scope=p(),this.ha=b(""),this.za=-1,this.K=null,this.md=-1,this.vc=!1,this.Rn=new Map,this.language="en",this.color="red",this.cookies=!1}get c(){return this.b.delegate.c}get currentSrc(){return this.K}get type(){return"youtube"}get videoId(){return this.ha()}preconnect(){w(this.Nb())}setup(){super.setup(),m(this.we.bind(this)),this.c("provider-setup",this)}destroy(){this.z();const t="provider destroyed";for(const e of this.Rn.values())for(const{reject:s}of e)s(t);this.Rn.clear()}async play(){return this.t("playVideo")}Hn(t){this.Sn("playVideo")?.reject(t)}async pause(){return this.t("pauseVideo")}In(t){this.Sn("pauseVideo")?.reject(t)}setMuted(t){t?this.t("mute"):this.t("unMute")}setCurrentTime(t){this.vc=this.b.$state.paused(),this.t("seekTo",t),this.c("seeking",t)}setVolume(t){this.t("setVolume",t*100)}setPlaybackRate(t){this.t("setPlaybackRate",t)}async loadSource(t){if(!g(t.src)){this.K=null,this.ha.set("");return}const e=T(t.src);this.ha.set(e??""),this.K=t}Nb(){return this.cookies?"https://www.youtube.com":"https://www.youtube-nocookie.com"}we(){this.z();const t=this.ha();if(!t){this.sc.set("");return}this.sc.set(`${this.Nb()}/embed/${t}`),this.c("load-start")}mg(){const{keyDisabled:t}=this.b.$props,{muted:e,playsInline:s,nativeControls:a}=this.b.$state,o=a();return{autoplay:0,cc_lang_pref:this.language,cc_load_policy:o?1:void 0,color:this.color,controls:o?1:0,disablekb:!o||t()?1:0,enablejsapi:1,fs:1,hl:this.language,iv_load_policy:o?1:3,mute:e()?1:0,playsinline:s()?1:0}}t(t,e){let s=v(),a=this.Rn.get(t);return a||this.Rn.set(t,a=[]),a.push(s),this.se({event:"command",func:t,args:e?[e]:void 0}),s.promise}gd(){window.setTimeout(()=>this.se({event:"listening"}),100)}kd(t){this.c("loaded-metadata"),this.c("loaded-data"),this.b.delegate.Ga(void 0,t)}ib(t){this.Sn("pauseVideo")?.resolve(),this.c("pause",void 0,t)}mc(t,e){const{duration:s,realCurrentTime:a}=this.b.$state,o=this.za===r.pg,i=o?s():t;this.c("time-change",i,e),!o&&Math.abs(i-a())>1&&this.c("seeking",i,e)}nb(t,e,s){const a={buffered:new u(0,t),seekable:e};this.c("progress",a,s);const{seeking:o,realCurrentTime:i}=this.b.$state;o()&&t>i()&&this.ob(s)}ob(t){const{paused:e,realCurrentTime:s}=this.b.$state;window.clearTimeout(this.md),this.md=window.setTimeout(()=>{this.c("seeked",s(),t),this.md=-1},e()?100:0),this.vc=!1}lc(t){const{seeking:e}=this.b.$state;e()&&this.ob(t),this.c("pause",void 0,t),this.c("end",void 0,t)}ie(t,e){const{started:s,paused:a,seeking:o}=this.b.$state,i=t===r.qg,n=t===r.hj,d=!f(this.Sn("playVideo")),c=(a()||d)&&(n||i);if(n&&this.c("waiting",void 0,e),o()&&i&&this.ob(e),!s()&&c&&this.vc){this.Hn("invalid internal play operation"),i&&(this.pause(),this.vc=!1);return}switch(c&&(this.Sn("playVideo")?.resolve(),this.c("play",void 0,e)),t){case r.Om:this.Hn("provider rejected"),this.In("provider rejected"),this.c("pause",void 0,e);break;case r.ij:this.kd(e);break;case r.qg:this.c("playing",void 0,e);break;case r.gj:this.ib(e);break;case r.pg:this.lc(e);break}this.za=t}te({info:t},e){if(!t)return;const{title:s,intrinsicDuration:a,playbackRate:o}=this.b.$state;if(y(t.videoData)&&t.videoData.title!==s()&&this.c("title-change",t.videoData.title,e),h(t.duration)&&t.duration!==a()){if(h(t.videoLoadedFraction)){const i=t.progressState?.loaded??t.videoLoadedFraction*t.duration,n=new u(0,t.duration);this.nb(i,n,e)}this.c("duration-change",t.duration,e)}if(h(t.playbackRate)&&t.playbackRate!==o()&&this.c("rate-change",t.playbackRate,e),t.progressState){const{current:i,seekableStart:n,seekableEnd:d,loaded:c,duration:l}=t.progressState;this.mc(i,e),this.nb(c,new u(n,d),e),l!==a()&&this.c("duration-change",l,e)}if(h(t.volume)&&k(t.muted)){const i={muted:t.muted,volume:t.volume/100};this.c("volume-change",i,e)}h(t.playerState)&&t.playerState!==this.za&&this.ie(t.playerState,e)}z(){this.za=-1,this.md=-1,this.vc=!1}Sn(t){return this.Rn.get(t)?.shift()}}export{R as YouTubeProvider};