UNPKG

@ktt45678/vidstack

Version:

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

1 lines 213 kB
import{u as j,c as lt,V as at,e as h,s as v,p as m,l as $,i as E,a as V,b as re,S as vt,f as $t,t as ht,E as Un,D as K,w as Xn,o as A,d as oe,g as ai,h as le,j as Yn,k as ct,m as Ct,n as Qe,C as x,q as f,r as J,v as kt,x as Ke,y as Nt,z as nt,A as L,B as M,F as R,H as T,G as he,I as Ue,J as w,K as ni,L as zn,M as Jn,N as ri,O as Zn,P as Xe,Q as ce,R as tr,T as u,U as er,W as de,X as Ye,Y as ue,Z as sr,_ as ir,$ as ar,a0 as nr,a1 as oi,a2 as li,a3 as Mt,a4 as pe,a5 as rr,a6 as hi,a7 as ze,a8 as or,a9 as lr,aa as Z,ab as hr,ac as cr,ad as jt,ae as dr,af as ur,ag as pr}from"./chunks/vidstack-DgnIG4vb.js";import{c as ci,I as di,a as mr,b as gr,d as br,e as fr,i as yr,f as vr,g as $r,h as kr,j as wr,k as Je,l as ui,m as Ze}from"./chunks/vidstack-ClFi43dj.js";import{T as me,g as pi,a as Bt,u as Tr}from"./chunks/vidstack-ERkdI6Km.js";import{i as U,T as Y,a as ge,w as Wt,b as xr,c as Sr}from"./chunks/vidstack-Du1WmuaF.js";import{L as _}from"./chunks/vidstack-ClIUVQwo.js";import{Q as dt}from"./chunks/vidstack-dclo3F73.js";import{c as ts,a as ut}from"./chunks/vidstack-CYZ2CtI4.js";import{p as Qt,g as be,a as mi}from"./chunks/vidstack-5Q7s4lUC.js";import{i as es,a as wt,s as q,w as gi,u as bi,b as Pr,c as Cr,d as Mr,o as Tt,e as xt,r as pt,f as ss,h as Er,g as fi,j as yi,k as Ar,l as vi,m as $i,n as ki,p as wi}from"./chunks/vidstack-nZNas-dv.js";import{c as is,r as W,g as Lr}from"./chunks/vidstack-Bxv1Qnxe.js";import"https://cdn.vidstack.io/icons";import"https://cdn.jsdelivr.net/npm/media-captions@next/dist/prod.js";const as=Symbol(0),_r=["autoPlay","canAirPlay","canFullscreen","canGoogleCast","canLoad","canLoadPoster","canPictureInPicture","canPlay","canSeek","ended","fullscreen","isAirPlayConnected","isGoogleCastConnected","live","liveEdge","loop","mediaType","muted","paused","pictureInPicture","playing","playsInline","remotePlaybackState","remotePlaybackType","seeking","started","streamType","viewType","waiting"],Ti=lt();function b(){return j(Ti)}function G(){return b().$state}function qr(a){return a instanceof HTMLAudioElement}function Or(a){return a instanceof HTMLVideoElement}function Dr(a){return qr(a)||Or(a)}class Et extends at{}const Ir={togglePaused:"k Space",toggleMuted:"m",toggleFullscreen:"f",togglePictureInPicture:"i",toggleCaptions:"c",seekBackward:"j J ArrowLeft",seekForward:"l L ArrowRight",volumeUp:"ArrowUp",volumeDown:"ArrowDown",speedUp:">",slowDown:"<"},fe=new Set(["Shift","Alt","Meta","Ctrl"]),Nr='button, [role="button"]',xi='input, textarea, select, [contenteditable], [role^="menuitem"], [role="timer"]';class jr extends Et{constructor(t){super(),this.a=t,this.Ib=null}onConnect(){h(this.ii.bind(this))}ii(){const{keyDisabled:t,keyTarget:e}=this.$props;if(t())return;const s=e()==="player"?this.el:document,i=v(!1);s===this.el?(this.listen("focusin",()=>i.set(!0)),this.listen("focusout",n=>{this.el.contains(n.target)||i.set(!1)})):(m(i)||i.set(document.querySelector("[data-media-player]")===this.el),$(document,"focusin",n=>{const r=n.composedPath().find(o=>o instanceof Element&&o.localName==="media-player");r!==void 0&&i.set(this.el===r)})),h(()=>{i()&&($(s,"keyup",this.hc.bind(this)),$(s,"keydown",this.ic.bind(this)),$(s,"keydown",this.ji.bind(this),{capture:!0}))})}hc(t){const e=document.activeElement;if(!t.key||!this.$state.canSeek()||e?.matches(xi))return;let{method:s,value:i}=this._d(t);if(!E(i)&&!V(i)){i?.onKeyUp?.({event:t,player:this.a.player,remote:this.a.remote}),i?.callback?.(t,this.a.remote);return}s?.startsWith("seek")&&(t.preventDefault(),t.stopPropagation(),this.Ib?(this.dg(t,s==="seekForward"),this.Ib=null):(this.a.remote.seek(this.dd,t),this.dd=void 0)),s?.startsWith("volume")&&this.el.querySelector("[data-media-volume-slider]")?.dispatchEvent(new KeyboardEvent("keyup",{key:s==="volumeUp"?"Up":"Down",shiftKey:t.shiftKey,trigger:t}))}ic(t){if(!t.key||fe.has(t.key))return;const e=document.activeElement;if(e?.matches(xi)||re(t)&&e?.matches(Nr))return;let{method:s,value:i}=this._d(t),n=!t.metaKey&&/^[0-9]$/.test(t.key);if(!E(i)&&!V(i)&&!n){i?.onKeyDown?.({event:t,player:this.a.player,remote:this.a.remote}),i?.callback?.(t,this.a.remote);return}if(!s&&n){t.preventDefault(),t.stopPropagation(),this.a.remote.seek(this.$state.duration()/10*Number(t.key),t);return}if(s){switch(t.preventDefault(),t.stopPropagation(),s){case"seekForward":case"seekBackward":this.Ja(t,s,s==="seekForward");break;case"volumeUp":case"volumeDown":const r=this.el.querySelector("[data-media-volume-slider]");if(r)r.dispatchEvent(new KeyboardEvent("keydown",{key:s==="volumeUp"?"Up":"Down",shiftKey:t.shiftKey,trigger:t}));else{const l=t.shiftKey?.1:.05;this.a.remote.changeVolume(this.$state.volume()+(s==="volumeUp"?+l:-l),t)}break;case"toggleFullscreen":this.a.remote.toggleFullscreen("prefer-media",t);break;case"speedUp":case"slowDown":const o=this.$state.playbackRate();this.a.remote.changePlaybackRate(Math.max(.25,Math.min(2,o+(s==="speedUp"?.25:-.25))),t);break;default:this.a.remote[s]?.(t)}this.$state.lastKeyboardAction.set({action:s,event:t})}}ji(t){Dr(t.target)&&this._d(t).method&&t.preventDefault()}_d(t){const e={...this.$props.keyShortcuts(),...this.a.ariaKeys},s=Object.keys(e).find(i=>{const n=e[i],r=V(n)?n.join(" "):E(n)?n:n?.keys;return(V(r)?r:r?.split(" "))?.map(o=>Gr(o).replace(/Control/g,"Ctrl").split("+"))?.some(o=>{const l=new Set(o.filter(c=>fe.has(c)));for(const c of fe){const d=c.toLowerCase()+"Key";if(!l.has(c)&&t[d])return!1}return o.every(c=>fe.has(c)?t[c.toLowerCase()+"Key"]:t.key===c.replace("Space"," "))})});return{method:s,value:s?e[s]:null}}ki(t,e){const s=t.shiftKey?10:5;return this.dd=Math.max(0,Math.min((this.dd??this.$state.currentTime())+(e==="seekForward"?+s:-s),this.$state.duration()))}dg(t,e){this.Ib?.dispatchEvent(new KeyboardEvent(t.type,{key:e?"Right":"Left",shiftKey:t.shiftKey,trigger:t}))}Ja(t,e,s){this.$state.canSeek()&&(this.Ib||(this.Ib=this.el.querySelector("[data-media-time-slider]")),this.Ib?this.dg(t,s):this.a.remote.seeking(this.ki(t,e),t))}}const Hr=["!","@","#","$","%","^","&","*","(",")"];function Gr(a){return a.replace(/Shift\+(\d)/g,(t,e)=>Hr[e-1])}const Rr={artist:"",artwork:null,autoplay:!1,autoPlay:!1,clipStartTime:0,clipEndTime:0,controls:!1,currentTime:0,crossorigin:null,crossOrigin:null,duration:-1,fullscreenOrientation:"landscape",googleCast:{},load:"visible",posterLoad:"visible",logLevel:"silent",loop:!1,muted:!1,paused:!0,playsinline:!1,playsInline:!1,playbackRate:1,poster:"",preload:"metadata",preferNativeHLS:!1,src:"",title:"",controlsDelay:2e3,hideControlsOnMouseLeave:!1,viewType:"unknown",streamType:"unknown",volume:1,liveEdgeTolerance:10,minLiveDVRWindow:60,keyDisabled:!1,keyTarget:"player",keyShortcuts:Ir,storage:null},Si=new vt({artist:"",artwork:null,audioTrack:null,audioTracks:[],autoPlay:!1,autoPlayError:null,audioGain:null,buffered:new me,canLoad:!1,canLoadPoster:!1,canFullscreen:!1,canOrientScreen:ci(),canPictureInPicture:!1,canPlay:!1,clipStartTime:0,clipEndTime:0,controls:!1,get iOSControls(){return di&&this.mediaType==="video"&&(!this.playsInline||!$t.fullscreenEnabled&&this.fullscreen)},get nativeControls(){return this.controls||this.iOSControls},controlsVisible:!1,get controlsHidden(){return!this.controlsVisible},crossOrigin:null,ended:!1,error:null,fullscreen:!1,get loop(){return this.providedLoop||this.userPrefersLoop},logLevel:"silent",mediaType:"unknown",muted:!1,paused:!0,played:new me,playing:!1,playsInline:!1,pictureInPicture:!1,preload:"metadata",playbackRate:1,qualities:[],quality:null,autoQuality:!1,canSetQuality:!0,canSetPlaybackRate:!0,canSetVolume:!1,canSetAudioGain:!1,seekable:new me,seeking:!1,source:{src:"",type:""},sources:[],started:!1,textTracks:[],textTrack:null,get hasCaptions(){return this.textTracks.filter(U).length>0},volume:1,waiting:!1,realCurrentTime:0,get currentTime(){return this.ended?this.duration:this.clipStartTime>0?Math.max(0,Math.min(this.realCurrentTime-this.clipStartTime,this.duration)):this.realCurrentTime},providedDuration:-1,intrinsicDuration:0,get realDuration(){return this.providedDuration>0?this.providedDuration:this.intrinsicDuration},get duration(){return this.clipEndTime>0?this.clipEndTime-this.clipStartTime:Math.max(0,this.realDuration-this.clipStartTime)},get title(){return this.providedTitle||this.inferredTitle},get poster(){return this.providedPoster||this.inferredPoster},get viewType(){return this.providedViewType!=="unknown"?this.providedViewType:this.inferredViewType},get streamType(){return this.providedStreamType!=="unknown"?this.providedStreamType:this.inferredStreamType},get currentSrc(){return this.source},get bufferedStart(){const a=pi(this.buffered)??0;return Math.max(0,a-this.clipStartTime)},get bufferedEnd(){const a=Bt(this.buffered)??0;return Math.min(this.duration,Math.max(0,a-this.clipStartTime))},get seekableStart(){const a=pi(this.seekable)??0;return Math.max(0,a-this.clipStartTime)},get seekableEnd(){const a=this.canPlay?Bt(this.seekable)??1/0:0;return this.clipEndTime>0?Math.max(this.clipEndTime,Math.max(0,a-this.clipStartTime)):a},get seekableWindow(){return Math.max(0,this.seekableEnd-this.seekableStart)},canAirPlay:!1,canGoogleCast:!1,remotePlaybackState:"disconnected",remotePlaybackType:"none",remotePlaybackLoader:null,remotePlaybackInfo:null,get isAirPlayConnected(){return this.remotePlaybackType==="airplay"&&this.remotePlaybackState==="connected"},get isGoogleCastConnected(){return this.remotePlaybackType==="google-cast"&&this.remotePlaybackState==="connected"},pointer:"fine",orientation:"landscape",width:0,height:0,mediaWidth:0,mediaHeight:0,lastKeyboardAction:null,userBehindLiveEdge:!1,liveEdgeTolerance:10,minLiveDVRWindow:60,get canSeek(){return/unknown|on-demand|:dvr/.test(this.streamType)&&Number.isFinite(this.seekableWindow)&&(!this.live||/:dvr/.test(this.streamType)&&this.seekableWindow>=this.minLiveDVRWindow)},get live(){return this.streamType.includes("live")||!Number.isFinite(this.realDuration)},get liveEdgeStart(){return this.live&&Number.isFinite(this.seekableEnd)?Math.max(0,(this.liveSyncPosition??this.seekableEnd)-this.liveEdgeTolerance):0},get liveEdge(){return this.live&&(!this.canSeek||!this.userBehindLiveEdge&&this.currentTime>=this.liveEdgeStart)},get liveEdgeWindow(){return this.live&&Number.isFinite(this.seekableEnd)?this.seekableEnd-this.liveEdgeStart:0},autoPlaying:!1,providedTitle:"",inferredTitle:"",providedLoop:!1,userPrefersLoop:!1,providedPoster:"",inferredPoster:"",inferredViewType:"unknown",providedViewType:"unknown",providedStreamType:"unknown",inferredStreamType:"unknown",liveSyncPosition:null,savedState:null}),Pi=new Set(["autoPlayError","autoPlaying","buffered","canPlay","error","paused","played","playing","seekable","seeking","waiting"]),Fr=new Set([...Pi,"ended","inferredPoster","inferredStreamType","inferredTitle","intrinsicDuration","liveSyncPosition","realCurrentTime","savedState","started","userBehindLiveEdge"]);function Ci(a,t=!1){const e=t?Pi:Fr;Si.reset(a,s=>e.has(s)),ht()}var Mi;class Ei extends Un{constructor(){super(...arguments),this.A=[],this[Mi]=!1}get length(){return this.A.length}get readonly(){return this[_.Yc]}indexOf(t){return this.A.indexOf(t)}getById(t){return t===""?null:this.A.find(e=>e.id===t)??null}toArray(){return[...this.A]}[(Mi=_.Yc,Symbol.iterator)](){return this.A.values()}[_.da](t,e){const s=this.A.length;""+s in this||Object.defineProperty(this,s,{get(){return this.A[s]}}),!this.A.includes(t)&&(this.A.push(t),this.dispatchEvent(new K("add",{detail:t,trigger:e})))}[_.cc](t,e){const s=this.A.indexOf(t);s>=0&&(this[_.Hf]?.(t,e),this.A.splice(s,1),this.dispatchEvent(new K("remove",{detail:t,trigger:e})))}[_.z](t){for(const e of[...this.A])this[_.cc](e,t);this.A=[],this[_.Od](!1,t),this[_.Gf]?.()}[_.Od](t,e){this[_.Yc]!==t&&(this[_.Yc]=t,this.dispatchEvent(new K("readonly-change",{detail:t,trigger:e})))}}const Kt=Symbol(0);class Ai extends Ei{get selected(){return this.A.find(t=>t.selected)??null}get selectedIndex(){return this.A.findIndex(t=>t.selected)}[_.Hf](t,e){this[_.ea](t,!1,e)}[_.da](t,e){t[Kt]=!1,Object.defineProperty(t,"selected",{get(){return this[Kt]},set:s=>{this.readonly||(this[_.If]?.(),this[_.ea](t,s))}}),super[_.da](t,e)}[_.ea](t,e,s){if(e===t?.[Kt])return;const i=this.selected;t&&(t[Kt]=e),(e?i!==t:i===t)&&(i&&(i[Kt]=!1),this.dispatchEvent(new K("change",{detail:{prev:i,current:this.selected},trigger:s})))}}class Vr extends Ai{constructor(){super(...arguments),this.cd=!1,this.switch="current"}get auto(){return this.cd||this.readonly}[_.If](){this[dt.Wa](!1)}[_.Gf](t){this[dt.Ia]=void 0,this[dt.Wa](!1,t)}autoSelect(t){this.readonly||this.cd||!this[dt.Ia]||(this[dt.Ia]?.(t),this[dt.Wa](!0,t))}getBySrc(t){return this.A.find(e=>e.src===t)}[dt.Wa](t,e){this.cd!==t&&(this.cd=t,this.dispatchEvent(new K("auto-change",{detail:t,trigger:e})))}}class Li extends Et{constructor(t,e){super(),this.la=t,this.La=e}async onAttach(t){const e=this.$props[this.la]();if(e==="eager")requestAnimationFrame(this.La);else if(e==="idle")Xn(this.La);else if(e==="visible"){let s,i=new IntersectionObserver(n=>{this.scope&&n[0].isIntersecting&&(s?.(),s=void 0,this.La())});i.observe(t),s=A(()=>i.disconnect())}}}class Br{constructor(t,e){this.V=t,this.a=e,this.c=(s,...i)=>{this.V(new K(s,{detail:i?.[0],trigger:i?.[1]}))}}async Ga(t,e){return oe(async()=>{this.a;const{autoPlay:s,canPlay:i,started:n,duration:r,seekable:o,buffered:l,remotePlaybackInfo:c,playsInline:d,savedState:g,source:k}=this.a.$state;if(i())return;const y={duration:t?.duration??r(),seekable:t?.seekable??o(),buffered:t?.buffered??l(),provider:this.a.$provider()};this.c("can-play",y,e),ht();let S=this.a.$provider(),{storage:D,qualities:F}=this.a,{muted:ot,volume:St,clipStartTime:Pt,playbackRate:it}=this.a.$props;await D?.onLoad?.(k());const ft=g()?.currentTime,yt=g()?.paused,We=await D?.getTime(),ei=ft??We??Pt(),Kn=yt||yt!==!1&&!n()&&s();if(S){S.setVolume(await D?.getVolume()??St()),S.setMuted(ot()||!!await D?.getMuted());const It=await D?.getAudioGain()??1;It>1&&S.audioGain?.setGain?.(It),S.setPlaybackRate?.(await D?.getPlaybackRate()??it()),S.setPlaysInline?.(d()),ei>0&&S.setCurrentTime(ei)}const Vt=await D?.getVideoQuality();if(Vt&&F.length){let It=null,si=1/0;for(const ne of F){const ii=Math.abs(Vt.width-ne.width)+Math.abs(Vt.height-ne.height)+(Vt.bitrate?Math.abs(Vt.bitrate-(ne.bitrate??0)):0);ii<si&&(It=ne,si=ii)}It&&(It.selected=!0)}i()&&Kn?await this.kj(e):We&&We>0&&this.c("started",void 0,e),c.set(null)})}async kj(t){const{player:e,$state:{autoPlaying:s,muted:i}}=this.a;s.set(!0);const n=new K("auto-play-attempt",{trigger:t});try{await e.play(n)}catch{}}}const ns=$t.fullscreenEnabled;class Wr extends at{constructor(){super(...arguments),this.dc=!1,this.Pd=!1}get active(){return this.Pd}get supported(){return ns}onConnect(){$($t,"fullscreenchange",this.E.bind(this)),$($t,"fullscreenerror",this.Q.bind(this)),A(this.Fa.bind(this))}async Fa(){ns&&await this.exit()}E(t){const e=rs(this.el);e!==this.Pd&&(e||(this.dc=!1),this.Pd=e,this.dispatch("fullscreen-change",{detail:e,trigger:t}))}Q(t){this.dc&&(this.dispatch("fullscreen-error",{detail:null,trigger:t}),this.dc=!1)}async enter(){try{return this.dc=!0,!this.el||rs(this.el)?void 0:(_i(),$t.requestFullscreen(this.el))}catch(t){throw this.dc=!1,t}}async exit(){if(!(!this.el||!rs(this.el)))return _i(),$t.exitFullscreen()}}function rs(a){if($t.fullscreenElement===a)return!0;try{return a.matches($t.fullscreenPseudoClass)}catch{return!1}}function _i(){if(!ns)throw Error("[vidstack] no fullscreen API")}const qi=class Vn extends at{constructor(){super(...arguments),this.la=v(this.Jf()),this.Cb=v(!1)}get type(){return this.la()}get locked(){return this.Cb()}get portrait(){return this.la().startsWith("portrait")}get landscape(){return this.la().startsWith("landscape")}get supported(){return Vn.supported}onConnect(){if(this.supported)$(screen.orientation,"change",this.Kf.bind(this));else{const t=window.matchMedia("(orientation: landscape)");t.onchange=this.Kf.bind(this),A(()=>t.onchange=null)}A(this.Fa.bind(this))}async Fa(){this.supported&&this.Cb()&&await this.unlock()}Kf(t){this.la.set(this.Jf()),this.dispatch("orientation-change",{detail:{orientation:m(this.la),lock:this._c},trigger:t})}async lock(t){m(this.Cb)||this._c===t||(this.Lf(),await screen.orientation.lock(t),this.Cb.set(!0),this._c=t)}async unlock(){m(this.Cb)&&(this.Lf(),this._c=void 0,await screen.orientation.unlock(),this.Cb.set(!1))}Lf(){if(!this.supported)throw Error("[vidstack] no orientation API")}Jf(){return this.supported?window.screen.orientation.type:window.innerWidth>=window.innerHeight?"landscape-primary":"portrait-primary"}};qi.supported=ci();let Oi=qi;class Qr{constructor(){this.i=new Map}k(t,e){this.i.set(t,e)}xe(t){const e=this.rg(t);return this.i.delete(t),e}rg(t){return this.i.get(t)}ub(t){this.i.delete(t)}Pm(){this.i.clear()}}class Di{constructor(){this.wc=!1,this.ye=ai(),this.i=new Map}get Qm(){return this.i.size}get Rm(){return this.wc}async Sm(){this.wc||await this.ye.promise}k(t,e){if(this.wc){e();return}this.i.delete(t),this.i.set(t,e)}xe(t){this.i.get(t)?.(),this.i.delete(t)}Xa(){this.sg(),this.wc=!0,this.i.size>0&&this.sg()}$(){this.wc=!1}z(){this.$(),this.i.clear(),this.tg()}sg(){for(const t of this.i.keys())this.xe(t);this.tg()}tg(){this.ye.resolve(),this.ye=ai()}}class Kr extends Et{constructor(){super(...arguments),this.Sd=-2,this.Gb=!1,this.Sf=v(!1),this.Td=v(!1),this.ec=null,this.Ud=v(!0),this.defaultDelay=2e3}get canIdle(){return this.Ud()}set canIdle(t){this.Ud.set(t)}get hideOnMouseLeave(){const{hideControlsOnMouseLeave:t}=this.$props;return this.Sf()||t()}set hideOnMouseLeave(t){this.Sf.set(t)}get showing(){return this.$state.controlsVisible()}show(t=0,e){this.Vd(),this.Gb||this.ad(!0,t,e)}hide(t=this.defaultDelay,e){this.Vd(),this.Gb||this.ad(!1,t,e)}pause(t){this.Gb=!0,this.Vd(),this.ad(!0,0,t)}resume(t){this.Gb=!1,!this.$state.paused()&&this.ad(!1,this.defaultDelay,t)}onConnect(){h(this.Hb.bind(this))}Hb(){const{viewType:t}=this.$state;if(!this.Ud())return;if(t()==="audio"){this.show();return}h(this.$h.bind(this)),h(this.fc.bind(this));const e=this.gc.bind(this),s=this.ib.bind(this);this.listen("can-play",i=>this.show(0,i)),this.listen("play",e),this.listen("pause",s),this.listen("auto-play-fail",s)}$h(){const{started:t,pointer:e,paused:s}=this.$state;if(!t()||e()!=="fine")return;const i=this.hideOnMouseLeave;(!i||!this.Td())&&h(()=>{s()||this.listen("pointermove",this.Tf.bind(this))}),i&&(this.listen("mouseenter",this.ai.bind(this)),this.listen("mouseleave",this.bi.bind(this)))}fc(){const{paused:t,started:e,autoPlayError:s}=this.$state;if(t()||s()&&!e())return;const i=this.Tf.bind(this);h(()=>{const n=this.$state.pointer(),r=n==="coarse",o=[r?"touchend":"pointerup","keydown"];for(const l of o)this.listen(l,i,{passive:!1})})}gc(t){this.show(0,t),this.hide(void 0,t)}ib(t){this.show(0,t)}ai(t){this.Td.set(!1),this.show(0,t),this.hide(void 0,t)}bi(t){this.Td.set(!0),this.hide(0,t)}Vd(){window.clearTimeout(this.Sd),this.Sd=-1}Tf(t){t.MEDIA_GESTURE||this.Gb||es(t)||(le(t)&&(t.key==="Escape"?(this.el?.focus(),this.ec=null):this.ec&&(t.preventDefault(),requestAnimationFrame(()=>{this.ec?.focus(),this.ec=null}))),this.show(0,t),this.hide(this.defaultDelay,t))}ad(t,e,s){if(e===0){this.E(t,s);return}this.Sd=window.setTimeout(()=>{this.scope&&this.E(t&&!this.Gb,s)},e)}E(t,e){this.$state.controlsVisible()!==t&&(this.$state.controlsVisible.set(t),!t&&document.activeElement&&this.el?.contains(document.activeElement)&&(this.ec=document.activeElement,requestAnimationFrame(()=>{this.el?.focus({preventScroll:!0})})),this.dispatch("controls-change",{detail:t,trigger:e}))}}class Ur extends Et{constructor(t,e,s){super(),this.Ba=t,this.g=e,this.a=s,this.zc=new Di,this.Fe=!1,this.C=s.$provider,this.yc=new Kr,this.pd=new Wr,this.bb=new Oi}onAttach(){this.listen("fullscreen-change",this.Qd.bind(this))}onConnect(){const t=Object.getOwnPropertyNames(Object.getPrototypeOf(this)),e=this.Hj.bind(this);for(const s of t)s.startsWith("media-")&&this.listen(s,e);this.Ij(),h(this.Jj.bind(this)),h(this.Kj.bind(this)),h(this.Lj.bind(this)),h(this.Mj.bind(this)),h(this.Nj.bind(this)),h(this.Oj.bind(this)),h(this.Pj.bind(this))}onDestroy(){try{const t=this.createEvent("destroy"),{pictureInPicture:e,fullscreen:s}=this.$state;s()&&this.Lg("prefer-media",t),e()&&this.Ge(t)}catch{}this.zc.z()}Ij(){const{load:t}=this.$props,{canLoad:e}=this.$state;if(t()!=="play"||e())return;const s=this.listen("media-play-request",i=>{this.Gg(i),s()})}Jj(){const t=this.C(),e=this.$state.canPlay();return t&&e&&this.zc.Xa(),()=>{this.zc.$()}}Hj(t){t.stopPropagation(),!t.defaultPrevented&&this[t.type]&&(m(this.C)?this[t.type](t):this.zc.k(t.type,()=>{m(this.C)&&this[t.type](t)}))}async Ac(t){const{canPlay:e,paused:s,autoPlaying:i}=this.$state;if(this.Gg(t)||!m(s))return;t&&this.g.i.k("media-play-request",t);const n=m(i);try{const r=m(this.C);return os(r,m(e)),await r.play()}catch(r){const o=this.createEvent("play-fail",{detail:ts(r),trigger:t});throw o.autoPlay=n,this.Ba.V(o),r}}Gg(t){const{load:e}=this.$props,{canLoad:s}=this.$state;if(e()==="play"&&!s()){const i=this.createEvent("media-start-loading",{trigger:t});return this.dispatchEvent(i),this.zc.k("media-play-request",async()=>{try{await this.Ac(i)}catch{}}),!0}return!1}async Ee(t){const{canPlay:e,paused:s}=this.$state;if(!m(s)){t&&this.g.i.k("media-pause-request",t);try{const i=m(this.C);return os(i,m(e)),await i.pause()}catch(i){throw this.g.i.ub("media-pause-request"),i}}}Hg(t,e){const{audioGain:s,canSetAudioGain:i}=this.$state;if(s()===t)return;const n=this.C();if(!n?.audioGain||!i())throw Error("[vidstack] audio gain api not available");e&&this.g.i.k("media-audio-gain-change-request",e),n.audioGain.setGain(t)}Ig(t){const{canPlay:e,live:s,liveEdge:i,canSeek:n,liveSyncPosition:r,seekableEnd:o,userBehindLiveEdge:l}=this.$state;if(l.set(!1),m(()=>!s()||i()||!n()))return;const c=m(this.C);os(c,m(e)),t&&this.g.i.k("media-seek-request",t);const d=o()-2;c.setCurrentTime(Math.min(d,r()??d))}async Jg(t="prefer-media",e){const s=this.Kg(t);if(Ii(t,s),!s.active)return m(this.$state.pictureInPicture)&&(this.Fe=!0,await this.Ge(e)),e&&this.g.i.k("media-enter-fullscreen-request",e),s.enter()}async Lg(t="prefer-media",e){const s=this.Kg(t);if(Ii(t,s),!!s.active){e&&this.g.i.k("media-exit-fullscreen-request",e);try{const i=await s.exit();return this.Fe&&m(this.$state.canPictureInPicture)&&await this.He(),i}finally{this.Fe=!1}}}Kg(t){const e=m(this.C);return t==="prefer-media"&&this.pd.supported||t==="media"?this.pd:e?.fullscreen}async He(t){if(this.Mg(),!this.$state.pictureInPicture())return t&&this.g.i.k("media-enter-pip-request",t),await this.C().pictureInPicture.enter()}async Ge(t){if(this.Mg(),!!this.$state.pictureInPicture())return t&&this.g.i.k("media-exit-pip-request",t),await this.C().pictureInPicture.exit()}Mg(){if(!this.$state.canPictureInPicture())throw Error("[vidstack] no pip support")}Kj(){this.yc.defaultDelay=this.$props.controlsDelay()}Lj(){const{canSetAudioGain:t}=this.$state,e=!!this.C()?.audioGain?.supported;t.set(e)}Mj(){const{canAirPlay:t}=this.$state,e=!!this.C()?.airPlay?.supported;t.set(e)}Nj(){const{canGoogleCast:t,source:e}=this.$state,s=mr&&!gr&&br(e());t.set(s)}Oj(){const{canFullscreen:t}=this.$state,e=this.pd.supported||!!this.C()?.fullscreen?.supported;t.set(e)}Pj(){const{canPictureInPicture:t}=this.$state,e=!!this.C()?.pictureInPicture?.supported;t.set(e)}async"media-airplay-request"(t){try{await this.Ng(t)}catch{}}async Ng(t){try{const e=this.C()?.airPlay;if(!e?.supported)throw Error("No AirPlay adapter.");return t&&this.g.i.k("media-airplay-request",t),await e.prompt()}catch(e){throw this.g.i.ub("media-airplay-request"),e}}async"media-google-cast-request"(t){try{await this.Og(t)}catch{}}async Og(t){try{const{canGoogleCast:e}=this.$state;if(!m(e)){const i=Error("Cast not available.");throw i.code="CAST_NOT_AVAILABLE",i}if(Qt("https://www.gstatic.com"),!this.qd){const i=await import("./chunks/vidstack-BWdb0z4f.js");this.qd=new i.GoogleCastLoader}await this.qd.prompt(this.a),t&&this.g.i.k("media-google-cast-request",t);const s=m(this.$state.remotePlaybackState)!=="disconnected";s&&this.$state.savedState.set({paused:m(this.$state.paused),currentTime:m(this.$state.currentTime)}),this.$state.remotePlaybackLoader.set(s?this.qd:null)}catch(e){throw this.g.i.ub("media-google-cast-request"),e}}"media-clip-start-change-request"(t){const{clipStartTime:e}=this.$state;e.set(t.detail)}"media-clip-end-change-request"(t){const{clipEndTime:e}=this.$state;e.set(t.detail),this.dispatch("duration-change",{detail:t.detail,trigger:t})}"media-duration-change-request"(t){const{providedDuration:e,clipEndTime:s}=this.$state;e.set(t.detail),s()<=0&&this.dispatch("duration-change",{detail:t.detail,trigger:t})}"media-audio-track-change-request"(t){const{logger:e,audioTracks:s}=this.a;if(s.readonly)return;const i=t.detail,n=s[i];if(n){const r=t.type;this.g.i.k(r,t),n.selected=!0}}async"media-enter-fullscreen-request"(t){try{await this.Jg(t.detail,t)}catch(e){this.Zc(e,t)}}async"media-exit-fullscreen-request"(t){try{await this.Lg(t.detail,t)}catch(e){this.Zc(e,t)}}async Qd(t){const e=m(this.$props.fullscreenOrientation),s=t.detail;if(!(Yn(e)||e==="none"||!this.bb.supported))if(s){if(this.bb.locked)return;this.dispatch("media-orientation-lock-request",{detail:e,trigger:t})}else this.bb.locked&&this.dispatch("media-orientation-unlock-request",{trigger:t})}Zc(t,e){this.Ba.V(this.createEvent("fullscreen-error",{detail:ts(t)}))}async"media-orientation-lock-request"(t){const e=t.type;try{this.g.i.k(e,t),await this.bb.lock(t.detail)}catch{this.g.i.ub(e)}}async"media-orientation-unlock-request"(t){const e=t.type;try{this.g.i.k(e,t),await this.bb.unlock()}catch{this.g.i.ub(e)}}async"media-enter-pip-request"(t){try{await this.He(t)}catch(e){this.Pg(e,t)}}async"media-exit-pip-request"(t){try{await this.Ge(t)}catch(e){this.Pg(e,t)}}Pg(t,e){this.Ba.V(this.createEvent("picture-in-picture-error",{detail:ts(t)}))}"media-live-edge-request"(t){const{live:e,liveEdge:s,canSeek:i}=this.$state;if(!(!e()||s()||!i())){this.g.i.k("media-seek-request",t);try{this.Ig()}catch{this.g.i.ub("media-seek-request")}}}async"media-loop-request"(t){try{this.g.Ob=!0,this.g.Bc=!0,await this.Ac(t)}catch{this.g.Ob=!1}}"media-user-loop-change-request"(t){this.$state.userPrefersLoop.set(t.detail)}async"media-pause-request"(t){if(!this.$state.paused())try{await this.Ee(t)}catch{}}async"media-play-request"(t){if(this.$state.paused())try{await this.Ac(t)}catch{}}"media-rate-change-request"(t){const{playbackRate:e,canSetPlaybackRate:s}=this.$state;if(e()===t.detail||!s())return;const i=this.C();i?.setPlaybackRate&&(this.g.i.k("media-rate-change-request",t),i.setPlaybackRate(t.detail))}"media-audio-gain-change-request"(t){try{this.Hg(t.detail,t)}catch{}}"media-quality-change-request"(t){const{qualities:e,storage:s,logger:i}=this.a;if(e.readonly)return;this.g.i.k("media-quality-change-request",t);const n=t.detail;if(n<0)e.autoSelect(t),t.isOriginTrusted&&s?.setVideoQuality?.(null);else{const r=e[n];r&&(r.selected=!0,t.isOriginTrusted&&s?.setVideoQuality?.({id:r.id,width:r.width,height:r.height,bitrate:r.bitrate}))}}"media-pause-controls-request"(t){const e=t.type;this.g.i.k(e,t),this.yc.pause(t)}"media-resume-controls-request"(t){const e=t.type;this.g.i.k(e,t),this.yc.resume(t)}"media-seek-request"(t){const{seekableStart:e,seekableEnd:s,ended:i,canSeek:n,live:r,userBehindLiveEdge:o,clipStartTime:l}=this.$state,c=t.detail;i()&&(this.g.Bc=!0);const d=t.type;this.g.Ja=!1,this.g.i.ub(d);const g=c+l(),k=Math.floor(g)===Math.floor(s()),y=k?s():Math.min(Math.max(e()+.1,g),s()-.1);!Number.isFinite(y)||!n()||(this.g.i.k(d,t),this.C().setCurrentTime(y),r()&&t.isOriginTrusted&&Math.abs(s()-y)>=2&&o.set(!0))}"media-seeking-request"(t){const e=t.type;this.g.i.k(e,t),this.$state.seeking.set(!0),this.g.Ja=!0}"media-start-loading"(t){if(this.$state.canLoad())return;const e=t.type;this.g.i.k(e,t),this.Ba.V(this.createEvent("can-load"))}"media-poster-start-loading"(t){if(this.$state.canLoadPoster())return;const e=t.type;this.g.i.k(e,t),this.Ba.V(this.createEvent("can-load-poster"))}"media-text-track-change-request"(t){const{index:e,mode:s}=t.detail,i=this.a.textTracks[e];if(i){const n=t.type;this.g.i.k(n,t),i.setMode(s,t)}}"media-mute-request"(t){if(this.$state.muted())return;const e=t.type;this.g.i.k(e,t),this.C().setMuted(!0)}"media-unmute-request"(t){const{muted:e,volume:s}=this.$state;if(!e())return;const i=t.type;this.g.i.k(i,t),this.a.$provider().setMuted(!1),s()===0&&(this.g.i.k(i,t),this.C().setVolume(.25))}"media-volume-change-request"(t){const{muted:e,volume:s}=this.$state,i=t.detail;if(s()===i)return;const n=t.type;this.g.i.k(n,t),this.C().setVolume(i),i>0&&e()&&(this.g.i.k(n,t),this.C().setMuted(!1))}Qa(t,e,s){}}function os(a,t){if(!(a&&t))throw Error("[vidstack] media not ready")}function Ii(a,t){if(!t?.supported)throw Error("[vidstack] no fullscreen support")}class Xr{constructor(){this.Ja=!1,this.Ob=!1,this.Bc=!1,this.i=new Qr}}function ls(a){return!E(a)&&"width"in a&&"height"in a&&ct(a.width)&&ct(a.height)}const Yr=new Set(["auto-play","auto-play-fail","can-load","sources-change","source-change","load-start","abort","error","loaded-metadata","loaded-data","can-play","play","play-fail","pause","playing","seeking","seeked","waiting"]);class zr extends Et{constructor(t,e){super(),this.g=t,this.a=e,this.u=new Map,this.rd=!1,this.On=[],this.Ln=[-1,-1],this.sd=!1,this.Cc=!1,this.Ke=null,this.seeking=Ct(s=>{const{seeking:i,realCurrentTime:n,paused:r}=this.$state;i.set(!0),n.set(s.detail),this.D("media-seeking-request",s),r()&&(this.Pb=s,this.Le()),this.Ln=[-1,-1]},150,{leading:!0}),this.Le=Qe(()=>{if(!this.Pb)return;this.sd=!0;const{waiting:s,playing:i}=this.$state;s.set(!0),i.set(!1);const n=this.createEvent("waiting",{trigger:this.Pb});this.u.set("waiting",n),this.dispatch(n),this.Pb=void 0,this.sd=!1},300)}onAttach(t){t.setAttribute("aria-busy","true"),this.listen("fullscreen-change",this["fullscreen-change"].bind(this)),this.listen("fullscreen-error",this["fullscreen-error"].bind(this)),this.listen("orientation-change",this["orientation-change"].bind(this))}onConnect(t){h(this.Qj.bind(this)),this.Rj(),this.Sj(),this.Tj(),this.Uj(),A(this.Vj.bind(this))}onDestroy(){const{audioTracks:t,qualities:e,textTracks:s}=this.a;t[_.z](),e[_.z](),s[_.z](),this.Ie()}V(t){if(!this.scope)return;const e=t.type;oe(()=>this[t.type]?.(t)),Yr.has(e)&&this.u.set(e,t),this.dispatch(t)}Uj(){this.Cc&&(requestAnimationFrame(()=>{this.scope&&this.a.remote.play(new K("dom-connect"))}),this.Cc=!1)}Vj(){this.Cc||(this.Cc=!this.$state.paused(),this.a.$provider()?.pause())}vb(){this.Qg(),this.rd=!1,this.g.Bc=!1,this.g.Ob=!1,this.sd=!1,this.Pb=void 0,this.u.clear()}D(t,e){const s=this.g.i.xe(t);s&&(e.request=s,e.triggers.add(s))}Rj(){this.Je(),this.Rg();const t=this.a.textTracks;$(t,"add",this.Je.bind(this)),$(t,"remove",this.Je.bind(this)),$(t,"mode-change",this.Rg.bind(this))}Sj(){const t=this.a.qualities;$(t,"add",this.ld.bind(this)),$(t,"remove",this.ld.bind(this)),$(t,"change",this.Za.bind(this)),$(t,"auto-change",this.Wj.bind(this)),$(t,"readonly-change",this.Xj.bind(this))}Tj(){const t=this.a.audioTracks;$(t,"add",this.Sg.bind(this)),$(t,"remove",this.Sg.bind(this)),$(t,"change",this.Yj.bind(this))}Je(t){const{textTracks:e}=this.$state;e.set(this.a.textTracks.toArray()),this.dispatch("text-tracks-change",{detail:e(),trigger:t})}Rg(t){t&&this.D("media-text-track-change-request",t);const e=this.a.textTracks.selected,{textTrack:s}=this.$state;s()!==e&&(s.set(e),this.dispatch("text-track-change",{detail:e,trigger:t}))}Sg(t){const{audioTracks:e}=this.$state;e.set(this.a.audioTracks.toArray()),this.dispatch("audio-tracks-change",{detail:e(),trigger:t})}Yj(t){const{audioTrack:e}=this.$state;e.set(this.a.audioTracks.selected),t&&this.D("media-audio-track-change-request",t),this.dispatch("audio-track-change",{detail:e(),trigger:t})}ld(t){const{qualities:e}=this.$state;e.set(this.a.qualities.toArray()),this.dispatch("qualities-change",{detail:e(),trigger:t})}Za(t){const{quality:e}=this.$state;e.set(this.a.qualities.selected),t&&this.D("media-quality-change-request",t),this.dispatch("quality-change",{detail:e(),trigger:t})}Wj(){const{qualities:t}=this.a,e=t.auto;this.$state.autoQuality.set(e),e||this.Ie()}Tg(){this.Ie(),this.Ke=h(()=>{const{qualities:t}=this.a,{mediaWidth:e,mediaHeight:s}=this.$state,i=e(),n=s();if(i===0||n===0)return;let r=null,o=1/0;for(const l of t){const c=Math.abs(l.width-i)+Math.abs(l.height-n);c<o&&(o=c,r=l)}r&&t[_.ea](r,!0,new K("resize",{detail:{width:i,height:n}}))})}Ie(){this.Ke?.(),this.Ke=null}Xj(){this.$state.canSetQuality.set(!this.a.qualities.readonly)}Qj(){const{canSetVolume:t,isGoogleCastConnected:e}=this.$state;if(e()){t.set(!1);return}fr().then(t.set)}"provider-change"(t){const e=this.a.$provider(),s=t.detail;e?.type!==s?.type&&(e?.destroy?.(),e?.scope?.dispose(),this.a.$provider.set(t.detail),e&&t.detail===null&&this.Ug(t))}"provider-loader-change"(t){}"auto-play"(t){this.$state.autoPlayError.set(null)}"auto-play-fail"(t){this.$state.autoPlayError.set(t.detail),this.vb()}"can-load"(t){this.$state.canLoad.set(!0),this.u.set("can-load",t),this.a.textTracks[Y.Z](),this.D("media-start-loading",t)}"can-load-poster"(t){this.$state.canLoadPoster.set(!0),this.u.set("can-load-poster",t),this.D("media-poster-start-loading",t)}"media-type-change"(t){const e=this.u.get("source-change");e&&t.triggers.add(e);const s=this.$state.viewType();this.$state.mediaType.set(t.detail);const i=this.$state.providedViewType(),n=i==="unknown"?t.detail:i;s!==n&&setTimeout(()=>{requestAnimationFrame(()=>{this.scope&&(this.$state.inferredViewType.set(t.detail),this.dispatch("view-type-change",{detail:n,trigger:t}))})},0)}"stream-type-change"(t){const e=this.u.get("source-change");e&&t.triggers.add(e);const{streamType:s,inferredStreamType:i}=this.$state;i.set(t.detail),t.detail=s()}"rate-change"(t){const{storage:e}=this.a,{canPlay:s}=this.$state;this.$state.playbackRate.set(t.detail),this.D("media-rate-change-request",t),s()&&e?.setPlaybackRate?.(t.detail)}"remote-playback-change"(t){const{remotePlaybackState:e,remotePlaybackType:s}=this.$state,{type:i,state:n}=t.detail,r=n==="connected";s.set(i),e.set(n);const o=i==="airplay"?"media-airplay-request":"media-google-cast-request";if(r)this.D(o,t);else{const l=this.g.i.rg(o);l&&(t.request=l,t.triggers.add(l))}}"sources-change"(t){const e=this.$state.sources(),s=t.detail;this.$state.sources.set(s),this.Zj(e,s,t)}Zj(t,e,s){let{qualities:i}=this.a,n=!1,r=!1;for(const o of t)if(ls(o)&&!e.some(l=>l.src===o.src)){const l=i.getBySrc(o.src);l&&(i[_.cc](l,s),r=!0)}r&&!i.length&&(this.$state.savedState.set(null),i[_.z](s));for(const o of e){if(!ls(o)||i.getBySrc(o.src))continue;const l={id:o.id??o.height+"p",bitrate:null,codec:null,...o,selected:!1};i[_.da](l,s),n=!0}n&&!i[dt.Ia]&&(this.Tg(),i[dt.Ia]=this.Tg.bind(this),i[dt.Wa](!0,s))}"source-change"(t){t.isQualityChange=t.originEvent?.type==="quality-change";const e=t.detail;this.Ug(t,t.isQualityChange),this.u.set(t.type,t),this.$state.source.set(e),this.el?.setAttribute("aria-busy","true")}Ug(t,e=!1){const{audioTracks:s,qualities:i,textRenderers:n}=this.a;if(!e){this.On=[],this.Ln=[-1,-1],s[_.z](t),i[_.z](t),Ci(this.$state,e),this.vb(),n.resetCustomRenderer();return}Ci(this.$state,e),this.vb()}abort(t){const e=this.u.get("source-change");e&&t.triggers.add(e);const s=this.u.get("can-load");s&&!t.triggers.hasType("can-load")&&t.triggers.add(s)}"load-start"(t){const e=this.u.get("source-change");e&&t.triggers.add(e)}error(t){this.$state.error.set(t.detail);const e=this.u.get("abort");e&&t.triggers.add(e)}"loaded-metadata"(t){const e=this.u.get("load-start");e&&t.triggers.add(e)}"loaded-data"(t){const e=this.u.get("load-start");e&&t.triggers.add(e)}"can-play"(t){const e=this.u.get("loaded-metadata");e&&t.triggers.add(e),this.Vg(t.detail),this.el?.setAttribute("aria-busy","false")}"can-play-through"(t){this.Vg(t.detail);const e=this.u.get("can-play");e&&t.triggers.add(e)}Vg(t){const{seekable:e,buffered:s,intrinsicDuration:i,canPlay:n}=this.$state;n.set(!0),s.set(t.buffered),e.set(t.seekable);const r=Bt(t.seekable)??1/0;i.set(r)}"duration-change"(t){const{live:e,intrinsicDuration:s,providedDuration:i,clipEndTime:n,ended:r}=this.$state,o=t.detail;if(!e()){const l=Number.isNaN(o)?0:o;s.set(l),r()&&this.Wg(t)}(i()>0||n()>0)&&t.stopImmediatePropagation()}progress(t){const{buffered:e,bufferedEnd:s,seekable:i,seekableEnd:n,live:r,intrinsicDuration:o}=this.$state,{buffered:l,seekable:c}=t.detail,d=Bt(l)??1/0,g=l.length!==e().length,k=d>s(),y=Bt(c)??1/0,S=c.length!==i().length,D=y>n();(g||k)&&e.set(l),(S||D)&&i.set(c),r()&&(o.set(y),this.dispatch("duration-change",{detail:y,trigger:t}))}play(t){const{paused:e,autoPlayError:s,ended:i,autoPlaying:n,playsInline:r,pointer:o,muted:l,viewType:c,live:d,userBehindLiveEdge:g}=this.$state;if(this._j(),!e()){t.stopImmediatePropagation();return}t.autoPlay=n();const k=this.u.get("waiting");k&&t.triggers.add(k),this.D("media-play-request",t),this.u.set("play",t),e.set(!1),s.set(null),t.autoPlay&&(this.V(this.createEvent("auto-play",{detail:{muted:l()},trigger:t})),n.set(!1)),(i()||this.g.Bc)&&(this.g.Bc=!1,i.set(!1),this.V(this.createEvent("replay",{trigger:t}))),!r()&&c()==="video"&&o()==="coarse"&&this.a.remote.enterFullscreen("prefer-media",t),d()&&!g()&&this.a.remote.seekToLiveEdge(t)}_j(t){if(!m(this.a.$provider))return;const{ended:e,seekableStart:s,clipStartTime:i,clipEndTime:n,realCurrentTime:r,duration:o}=this.$state,l=r()<i()||n()>0&&r()>=n()||Math.abs(r()-o())<.1||e();return l&&this.dispatch("media-seek-request",{detail:(i()>0?0:s())+.1,trigger:t}),l}"play-fail"(t){const{muted:e,autoPlaying:s}=this.$state,i=this.u.get("play");i&&t.triggers.add(i),this.D("media-play-request",t);const{paused:n,playing:r}=this.$state;n.set(!0),r.set(!1),this.vb(),this.u.set("play-fail",t),t.autoPlay&&(this.V(this.createEvent("auto-play-fail",{detail:{muted:e(),error:t.detail},trigger:t})),s.set(!1))}playing(t){const e=this.u.get("play"),s=this.u.get("seeked");e?t.triggers.add(e):s&&t.triggers.add(s),setTimeout(()=>this.vb(),0);const{paused:i,playing:n,live:r,liveSyncPosition:o,seekableEnd:l,started:c,currentTime:d,seeking:g,ended:k}=this.$state;if(i.set(!1),n.set(!0),g.set(!1),k.set(!1),this.g.Ob){this.g.Ob=!1;return}if(r()&&!c()&&d()===0){const y=o()??l()-2;Number.isFinite(y)&&this.a.$provider().setCurrentTime(y)}this.started(t)}started(t){const{started:e}=this.$state;e()||(e.set(!0),this.V(this.createEvent("started",{trigger:t})))}pause(t){this.el?.isConnected||(this.Cc=!0),this.D("media-pause-request",t);const e=this.u.get("seeked");e&&t.triggers.add(e);const{paused:s,playing:i}=this.$state;s.set(!0),i.set(!1),this.rd&&setTimeout(()=>{this.V(this.createEvent("end",{trigger:t})),this.rd=!1},0),this.vb()}"time-change"(t){if(this.g.Ob){t.stopImmediatePropagation();return}let{waiting:e,played:s,clipEndTime:i,realCurrentTime:n,currentTime:r}=this.$state,o=t.detail,l=i();n.set(o),this.Pn(),e.set(!1);for(const c of this.a.textTracks)c[Y.Eb](o,t);l>0&&o>=l&&(this.rd=!0,this.dispatch("media-pause-request",{trigger:t})),this.$j(),this.dispatch("time-update",{detail:{currentTime:r(),played:s()},trigger:t})}Pn(){const{currentTime:t,played:e,paused:s}=this.$state;s()||(this.Ln=Tr(this.On,this.Ln,t()),e.set(new me(this.On)))}Wg(t){const{clipStartTime:e,clipEndTime:s,duration:i}=this.$state;e()>0||s()>0||this.V(this.createEvent("time-change",{detail:i(),trigger:t}))}$j(){const{storage:t}=this.a,{canPlay:e,realCurrentTime:s}=this.$state;e()&&t?.setTime?.(s())}"audio-gain-change"(t){const{storage:e}=this.a,{canPlay:s,audioGain:i}=this.$state;i.set(t.detail),this.D("media-audio-gain-change-request",t),s()&&e?.setAudioGain?.(i())}"volume-change"(t){const{storage:e}=this.a,{volume:s,muted:i,canPlay:n}=this.$state,r=t.detail;s.set(r.volume),i.set(r.muted||r.volume===0),this.D("media-volume-change-request",t),this.D(r.muted?"media-mute-request":"media-unmute-request",t),n()&&(e?.setVolume?.(s()),e?.setMuted?.(i()))}seeked(t){const{seeking:e,currentTime:s,realCurrentTime:i,paused:n,seekableEnd:r,ended:o}=this.$state;if(this.g.Ja)e.set(!0),t.stopImmediatePropagation();else if(e()){const l=this.u.get("waiting");l&&t.triggers.add(l);const c=this.u.get("seeking");c&&!t.triggers.has(c)&&t.triggers.add(c),n()&&this.Qg(),e.set(!1),i.set(t.detail),this.D("media-seek-request",t);const d=t?.originEvent;d?.isTrusted&&!/seek/.test(d.type)&&this.started(t)}Math.floor(s())!==Math.floor(r())?o.set(!1):this.end(t)}waiting(t){this.sd||this.g.Ja||(t.stopImmediatePropagation(),this.Pb=t,this.Le())}end(t){const{loop:e,ended:s}=this.$state;if(!(!e()&&s())){if(e()){setTimeout(()=>{requestAnimationFrame(()=>{this._j(t),this.dispatch("media-loop-request",{trigger:t})})},10);return}setTimeout(()=>this.lc(t),0)}}lc(t){const{storage:e}=this.a,{paused:s,seeking:i,ended:n,duration:r}=this.$state;this.Wg(t),s()||this.dispatch("pause",{trigger:t}),i()&&this.dispatch("seeked",{detail:r(),trigger:t}),n.set(!0),this.vb(),e?.setTime?.(r(),!0),this.dispatch("ended",{trigger:t})}Qg(){this.Le.cancel(),this.$state.waiting.set(!1)}"fullscreen-change"(t){const e=t.detail;this.$state.fullscreen.set(e),this.D(e?"media-enter-fullscreen-request":"media-exit-fullscreen-request",t)}"fullscreen-error"(t){this.D("media-enter-fullscreen-request",t),this.D("media-exit-fullscreen-request",t)}"orientation-change"(t){const e=t.detail.lock;this.D(e?"media-orientation-lock-request":"media-orientation-unlock-request",t)}"picture-in-picture-change"(t){const e=t.detail;this.$state.pictureInPicture.set(e),this.D(e?"media-enter-pip-request":"media-exit-pip-request",t)}"picture-in-picture-error"(t){this.D("media-enter-pip-request",t),this.D("media-exit-pip-request",t)}"title-change"(t){t.trigger&&(t.stopImmediatePropagation(),this.$state.inferredTitle.set(t.detail))}"poster-change"(t){t.trigger&&(t.stopImmediatePropagation(),this.$state.inferredPoster.set(t.detail))}}class Jr extends Et{onSetup(){this.Hb();const t=[this.bk,this.ck,this.Jn,this.Kn,this.Xd,this.Ca,this.ek,this.fk,this.gk,this.hk,this.ik,this.Me,this.jk,this.kk,this.td];for(const e of t)h(e.bind(this))}Hb(){const t={duration:"providedDuration",loop:"providedLoop",poster:"providedPoster",streamType:"providedStreamType",title:"providedTitle",viewType:"providedViewType"},e=new Set(["currentTime","paused","playbackRate","volume"]);for(const s of Object.keys(this.$props))e.has(s)||this.$state[t[s]??s]?.set(this.$props[s]());this.$state.muted.set(this.$props.muted()||this.$props.volume()===0)}kk(){const{viewType:t,streamType:e,title:s,poster:i,loop:n}=this.$props,r=this.$state;r.providedPoster.set(i()),r.providedStreamType.set(e()),r.providedViewType.set(t()),r.providedTitle.set(s()),r.providedLoop.set(n())}ak(){}bk(){const{artist:t,artwork:e}=this.$props;this.$state.artist.set(t()),this.$state.artwork.set(e())}td(){const{title:t}=this.$state;this.dispatch("title-change",{detail:t()})}ck(){const t=this.$props.autoPlay()||this.$props.autoplay();this.$state.autoPlay.set(t),this.dispatch("auto-play-change",{detail:t})}ik(){const t=this.$state.loop();this.dispatch("loop-change",{detail:t})}Xd(){const t=this.$props.controls();this.$state.controls.set(t)}jk(){const{poster:t}=this.$state;this.dispatch("poster-change",{detail:t()})}Ca(){const t=this.$props.crossOrigin()??this.$props.crossorigin(),e=t===!0?"":t;this.$state.crossOrigin.set(e)}ek(){const{duration:t}=this.$props;this.dispatch("media-duration-change-request",{detail:t()})}Me(){const t=this.$props.playsInline()||this.$props.playsinline();this.$state.playsInline.set(t),this.dispatch("plays-inline-change",{detail:t})}Jn(){const{clipStartTime:t}=this.$props;this.dispatch("media-clip-start-change-request",{detail:t()})}Kn(){const{clipEndTime:t}=this.$props;this.dispatch("media-clip-end-change-request",{detail:t()})}fk(){this.dispatch("live-change",{detail:this.$state.live()})}hk(){this.$state.liveEdgeTolerance.set(this.$props.liveEdgeTolerance()),this.$state.minLiveDVRWindow.set(this.$props.minLiveDVRWindow())}gk(){this.dispatch("live-edge-change",{detail:this.$state.liveEdge()})}}class Zr{constructor(){this.playerId="vds-player",this.mediaId=null,this.H={volume:null,muted:null,audioGain:null,time:null,lang:null,captions:null,rate:null,quality:null},this.saveTimeThrottled=Ct(this.saveTime.bind(this),1e3)}async getVolume(){return this.H.volume}async setVolume(t){this.H.volume=t,this.save()}async getMuted(){return this.H.muted}async setMuted(t){this.H.muted=t,this.save()}async getTime(){return this.H.time}async setTime(t,e){const s=t<0;this.H.time=s?null:t,s||e?this.saveTime():this.saveTimeThrottled()}async getLang(){return this.H.lang}async setLang(t){this.H.lang=t,this.save()}async getCaptions(){return this.H.captions}async setCaptions(t){this.H.captions=t,this.save()}async getPlaybackRate(){return this.H.rate}async setPlaybackRate(t){this.H.rate=t,this.save()}async getAudioGain(){return this.H.audioGain}async setAudioGain(t){this.H.audioGain=t,this.save()}async getVideoQuality(){return this.H.quality}async setVideoQuality(t){this.H.quality=t,this.save()}onChange(t,e,s="vds-player"){const i=s?localStorage.getItem(s):null,n=e?localStorage.getItem(e):null;this.playerId=s,this.mediaId=e,this.H={volume:null,muted:null,audioGain:null,lang:null,captions:null,rate:null,quality:null,...i?JSON.parse(i):{},time:n?+n:null}}save(){if(!this.playerId)return;const t=JSON.stringify({...this.H,time:void 0});localStorage.setItem(this.playerId,t)}saveTime(){if(!this.mediaId)return;const t=(this.H.time??0).toString();localStorage.setItem(this.mediaId,t)}}const Ni=class Zs extends Et{constructor(){super()}onConnect(){h(this.lk.bind(this)),h(this.mk.bind(this));const t=this.nk.bind(this);for(const e of Zs.Xg)navigator.mediaSession.setActionHandler(e,t);A(this.Fa.bind(this))}Fa(){for(const t of Zs.Xg)navigator.mediaSession.setActionHandler(t,null)}lk(){const{title:t,artist:e,artwork:s,poster:i}=this.$state;navigator.mediaSession.metadata=new MediaMetadata({title:t(),artist:e(),artwork:s()??[{src:i()}]})}mk(){const{canPlay:t,paused:e}=this.$state;navigator.mediaSession.playbackState=t()?e()?"paused":"playing":"none"}nk(t){const e=new K("media-session-action",{detail:t});switch(t.action){case"play":this.dispatch("media-play-request",{trigger:e});break;case"pause":this.dispatch("media-pause-request",{trigger:e});break;case"seekto":case"seekforward":case"seekbackward":this.dispatch("media-seek-request",{detail:ct(t.seekTime)?t.seekTime:this.$state.currentTime()+(t.seekOffset??10),trigger:e});break}}};Ni.Xg=["play","pause","seekforward","seekbackward","seekto"];let to=Ni;class eo{constructor(t=void 0){this.bc=t,this.G=null,this.f=null,this.Rd=-1}setTarget(t){this.G=t}getPlayer(t){return this.f?this.f:((t??this.G)?.dispatchEvent(new K("find-media-player",{detail:e=>void(this.f=e),bubbles:!0,composed:!0})),this.f)}setPlayer(t){this.f=t}startLoading(t){this.s("media-start-loading",t)}startLoadingPoster(t){this.s("media-poster-start-loading",t)}requestAirPlay(t){this.s("media-airplay-request",t)}requestGoogleCast(t){this.s("media-google-cast-request",t)}play(t){this.s("media-play-request",t)}pause(t){this.s("media-pause-request",t)}mute(t){this.s("media-mute-request",t)}unmute(t){this.s("media-unmute-request",t)}enterFullscreen(t,e){this.s("media-enter-fullscreen-request",e,t)}exitFullscreen(t,e){this.s("media-exit-fullscreen-request",e,t)}lockScreenOrientation(t,e){this.s("media-orientation-lock-request",e,t)}unlockScreenOrientation(t){this.s("media-orientation-unlock-request",t)}enterPictureInPicture(t){this.s("media-enter-pip-request",t)}exitPictureInPicture(t){this.s("media-exit-pip-request",t)}seeking(t,e){this.s("media-seeking-request",e,t)}seek(t,e){this.s("media-seek-request",e,t)}seekToLiveEdge(t){this.s("media-live-edge-request",t)}changeDuration(t,e){this.s("media-duration-change-request",e,t)}changeClipStart(t,e){this.s("media-clip-start-change-request",e,t)}changeClipEnd(t,e){this.s("media-clip-end-change-request",e,t)}changeVolume(t,e){this.s("media-volume-change-request",e,Math.max(0,Math.min(1,t)))}changeAudioTrack(t,e){this.s("media-audio-track-change-request",e,t)}changeQuality(t,e){this.s("media-quality-change-request",e,t)}requestAutoQuality(t){this.changeQuality(-1,t)}changeTextTrackMode(t,e,s){this.s("media-text-track-change-request",s,{index:t,mode:e})}changePlaybackRate(t,e){this.s("media-rate-change-request",e,t)}changeAudioGain(t,e){this.s("media-audio-gain-change-request",e,t)}resumeControls(t){this.s("media-resume-controls-request",t)}pauseControls(t){this.s("media-pause-controls-request",t)}togglePaused(t){const e=this.getPlayer(t?.target);e&&(e.state.paused?this.play(t):this.pause(t))}toggleControls(t){const e=this.getPlayer(t?.target);e&&(e.controls.showing?e.controls.hide(0,t):e.controls.show(0,t))}toggleMuted(t){const e=this.getPlayer(t?.target);e&&(e.state.muted?this.unmute(t):this.mute(t))}toggleFullscreen(t,e){const s=this.getPlayer(e?.target);s&&(s.state.fullscreen?this.exitFullscreen(t,e):this.enterFullscreen(t,e))}togglePictureInPicture(t){const e=this.getPlayer(t?.target);e&&(e.state.pictureInPicture?this.exitPictureInPicture(t):this.enterPictureInPicture(t))}showCaptions(t){const e=this.getPlayer(t?.target);if(!e)return;let s=e.state.textTracks,i=this.Rd;(!s[i]||!U(s[i]))&&(i=-1),i===-1&&(i=s.findIndex(n=>U(n)&&n.default)),i===-1&&(i=s.findIndex(n=>U(n))),i>=0&&this.changeTextTrackMode(i,"showing",t),this.Rd=-1}disableCaptions(t){const e=this.getPlayer(t?.target);if(!e)return;const s=e.state.textTracks,i=e.state.textTrack;if(i){const n=s.indexOf(i);this.changeTextTrackMode(n,"disabled",t),this.Rd=n}}toggleCaptions(t){const e=this.getPlayer(t?.target);e&&(e.state.textTrack?this.disableCaptions():this.showCaptions())}userPrefersLoopChange(t,e){this.s("media-user-loop-change-request",e,t)}s(t,e,s){const i=new K(t,{bubbles:!0,composed:!0,cancelable:!0,detail:s,trigger:e});let n=e?.target||null;n&&n i