UNPKG

@7sage/vidstack

Version:

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

1 lines 158 kB
import{u as M,c as st,V as U,e as h,s as T,E as A,p as u,l as H,i as S,a as Q,b as qe,S as it,f as ot,t as J,d as Rs,D as V,w as Os,o as k,g as qt,h as Le,j as Ns,k as p,m as Lt,n as It,q as Fs,r as Hs,v as B,x as Gs,y as Bs,z as Ks,A as _s,B as Ie,C as Us,F as j,G as ht,H as zt,I as g,J as $,K as q,L as K,M as bt,N as Qs,O as Ws,P as Y,Q as b,R as Ve,T as f,U as lt,W as Vt,X as zs,Y as De,Z as js,_ as Ys,$ as Xs,a0 as G,a1 as Js,a2 as Zs,a3 as yt,a4 as ti,a5 as ei,a6 as si,a7 as Re,a8 as ii}from"./vidstack-CYF5HBsg.js";import{c as Oe,I as Ne,a as ai,b as ni,d as ri,e as oi,f as hi,i as li,g as Fe}from"./vidstack-0lhgLM-q.js";import{T as Dt,g as dt,a as He,u as di}from"./vidstack-BgkHvjzX.js";import{i as R,T as O,a as Rt,w as ci,b as jt,c as ui}from"./vidstack-DI6EtP9D.js";import{L as P}from"./vidstack-C_AxqLKV.js";import{Q as W}from"./vidstack-DRH_1tFW.js";import{c as Yt,a as Z}from"./vidstack-BfBBPhXV.js";import{c as pi,a as Xt,i as mi,b as fi,d as Jt,e as Zt,r as L,g as gi}from"./vidstack-D3XUwguk.js";import{p as St,g as Ot}from"./vidstack-BH4h6ty-.js";import"https://cdn.vidstack.io/icons";const te=Symbol(0),bi=["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"],Ge=st();function w(){return M(Ge)}function yi(n){return n instanceof HTMLAudioElement}function wi(n){return n instanceof HTMLVideoElement}function Ti(n){return yi(n)||wi(n)}class ct extends U{}const $i={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:"<"},Pt=new Set(["Shift","Alt","Meta","Ctrl"]),vi='button, [role="button"]',Be='input, textarea, select, [contenteditable], [role^="menuitem"], [role="timer"]';class ki extends ct{#t;constructor(t){super(),this.#t=t}onConnect(){h(this.#e.bind(this))}#e(){const{keyDisabled:t,keyTarget:e}=this.$props;if(t())return;const s=e()==="player"?this.el:document,i=T(!1);s===this.el?new A(this.el).add("focusin",()=>i.set(!0)).add("focusout",a=>{this.el.contains(a.target)||i.set(!1)}):(u(i)||i.set(document.querySelector("[data-media-player]")===this.el),H(document,"focusin",a=>{const r=a.composedPath().find(o=>o instanceof Element&&o.localName==="media-player");r!==void 0&&i.set(this.el===r)})),h(()=>{i()&&new A(s).add("keyup",this.#s.bind(this)).add("keydown",this.#i.bind(this)).add("keydown",this.#a.bind(this),{capture:!0})})}#s(t){const e=document.activeElement;if(!t.key||!this.$state.canSeek()||e?.matches(Be))return;let{method:s,value:i}=this.#n(t);if(!S(i)&&!Q(i)){i?.onKeyUp?.({event:t,player:this.#t.player,remote:this.#t.remote}),i?.callback?.(t,this.#t.remote);return}s?.startsWith("seek")&&(t.preventDefault(),t.stopPropagation(),this.#h?(this.#d(t,s==="seekForward"),this.#h=null):(this.#t.remote.seek(this.#r,t),this.#r=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}))}#i(t){if(!t.key||Pt.has(t.key))return;const e=document.activeElement;if(e?.matches(Be)||qe(t)&&e?.matches(vi))return;let{method:s,value:i}=this.#n(t),a=!t.metaKey&&/^[0-9]$/.test(t.key);if(!S(i)&&!Q(i)&&!a){i?.onKeyDown?.({event:t,player:this.#t.player,remote:this.#t.remote}),i?.callback?.(t,this.#t.remote);return}if(!s&&a&&!xi(t)){t.preventDefault(),t.stopPropagation(),this.#t.remote.seek(this.$state.duration()/10*Number(t.key),t);return}if(s){switch(t.preventDefault(),t.stopPropagation(),s){case"seekForward":case"seekBackward":this.#c(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.#t.remote.changeVolume(this.$state.volume()+(s==="volumeUp"?+l:-l),t)}break;case"toggleFullscreen":this.#t.remote.toggleFullscreen("prefer-media",t);break;case"speedUp":case"slowDown":const o=this.$state.playbackRate();this.#t.remote.changePlaybackRate(Math.max(.25,Math.min(2,o+(s==="speedUp"?.25:-.25))),t);break;default:this.#t.remote[s]?.(t)}this.$state.lastKeyboardAction.set({action:s,event:t})}}#a(t){Ti(t.target)&&this.#n(t).method&&t.preventDefault()}#n(t){const e={...this.$props.keyShortcuts(),...this.#t.ariaKeys},s=Object.keys(e).find(i=>{const a=e[i],r=Q(a)?a.join(" "):S(a)?a:a?.keys;return(Q(r)?r:r?.split(" "))?.map(l=>Pi(l).replace(/Control/g,"Ctrl").split("+"))?.some(l=>{const d=new Set(l.filter(c=>Pt.has(c)));for(const c of Pt){const m=c.toLowerCase()+"Key";if(!d.has(c)&&t[m])return!1}return l.every(c=>Pt.has(c)?t[c.toLowerCase()+"Key"]:t.key===c.replace("Space"," "))})});return{method:s,value:s?e[s]:null}}#r;#o(t,e){const s=t.shiftKey?10:5;return this.#r=Math.max(0,Math.min((this.#r??this.$state.currentTime())+(e==="seekForward"?+s:-s),this.$state.duration()))}#h=null;#d(t,e){this.#h?.dispatchEvent(new KeyboardEvent(t.type,{key:e?"Right":"Left",shiftKey:t.shiftKey,trigger:t}))}#c(t,e,s){this.$state.canSeek()&&(this.#h||(this.#h=this.el.querySelector("[data-media-time-slider]")),this.#h?this.#d(t,s):this.#t.remote.seeking(this.#o(t,e),t))}}const Si=["!","@","#","$","%","^","&","*","(",")"];function Pi(n){return n.replace(/Shift\+(\d)/g,(t,e)=>Si[e-1])}function xi(n){for(const t of Pt)if(n[t.toLowerCase()+"Key"])return!0;return!1}const Ci={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:$i,storage:null},Ke=new it({artist:"",artwork:null,audioTrack:null,audioTracks:[],autoPlay:!1,autoPlayError:null,audioGain:null,buffered:new Dt,canLoad:!1,canLoadPoster:!1,canFullscreen:!1,canOrientScreen:Oe(),canPictureInPicture:!1,canPlay:!1,clipStartTime:0,clipEndTime:0,controls:!1,get iOSControls(){return Ne&&this.mediaType==="video"&&(!this.playsInline||!ot.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 Dt,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 Dt,seeking:!1,source:{src:"",type:""},sources:[],started:!1,textTracks:[],textTrack:null,get hasCaptions(){return this.textTracks.filter(R).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 duration(){return this.seekableWindow},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 n=He(this.buffered)??0;return Math.max(n,this.clipStartTime)},get bufferedEnd(){const n=dt(this.buffered)??0;return Math.min(this.seekableEnd,Math.max(0,n-this.clipStartTime))},get bufferedWindow(){return Math.max(0,this.bufferedEnd-this.bufferedStart)},get seekableStart(){if(this.isLiveDVR&&this.liveDVRWindow>0)return Math.max(0,this.seekableEnd-this.liveDVRWindow);const n=He(this.seekable)??0;return Math.max(n,this.clipStartTime)},get seekableEnd(){if(this.providedDuration>0)return this.providedDuration;const n=this.liveSyncPosition>0?this.liveSyncPosition:this.canPlay?dt(this.seekable)??1/0:0;return this.clipEndTime>0?Math.min(this.clipEndTime,n):n},get seekableWindow(){const n=this.seekableEnd-this.seekableStart;return isNaN(n)?1/0:Math.max(0,n)},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.duration)&&(!this.isLiveDVR||this.duration>=this.liveDVRWindow)},get live(){return this.streamType.includes("live")||!Number.isFinite(this.duration)},get liveEdgeStart(){return this.live&&Number.isFinite(this.seekableEnd)?Math.max(0,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},get isLiveDVR(){return/:dvr/.test(this.streamType)},get liveDVRWindow(){return Math.max(this.inferredLiveDVRWindow,this.minLiveDVRWindow)},autoPlaying:!1,providedTitle:"",inferredTitle:"",providedLoop:!1,userPrefersLoop:!1,providedPoster:"",inferredPoster:"",inferredViewType:"unknown",providedViewType:"unknown",providedStreamType:"unknown",inferredStreamType:"unknown",liveSyncPosition:null,inferredLiveDVRWindow:0,savedState:null}),_e=new Set(["autoPlayError","autoPlaying","buffered","canPlay","error","paused","played","playing","seekable","seeking","waiting"]),Ei=new Set([..._e,"ended","inferredPoster","inferredStreamType","inferredTitle","intrinsicDuration","inferredLiveDVRWindow","liveSyncPosition","realCurrentTime","savedState","started","userBehindLiveEdge"]);function Ue(n,t=!1){const e=t?_e:Ei;Ke.reset(n,s=>e.has(s)),J()}function Qe(n,t){const e=n+t.clipStartTime(),s=Math.floor(n)===Math.floor(t.seekableStart()),i=Math.floor(e)===Math.floor(t.seekableEnd());return s?t.seekableStart():i?t.seekableEnd():t.isLiveDVR()&&t.liveDVRWindow()>0&&e<t.seekableEnd()-t.liveDVRWindow()?t.bufferedStart():Math.min(Math.max(t.seekableStart()+.1,e),t.seekableEnd()-.1)}class We extends Rs{items=[];[P.readonly]=!1;get length(){return this.items.length}get readonly(){return this[P.readonly]}indexOf(t){return this.items.indexOf(t)}getById(t){return t===""?null:this.items.find(e=>e.id===t)??null}toArray(){return[...this.items]}[Symbol.iterator](){return this.items.values()}[P.add](t,e){const s=this.items.length;""+s in this||Object.defineProperty(this,s,{get(){return this.items[s]}}),!this.items.includes(t)&&(this.items.push(t),this.dispatchEvent(new V("add",{detail:t,trigger:e})))}[P.remove](t,e){const s=this.items.indexOf(t);s>=0&&(this[P.onRemove]?.(t,e),this.items.splice(s,1),this.dispatchEvent(new V("remove",{detail:t,trigger:e})))}[P.reset](t){for(const e of[...this.items])this[P.remove](e,t);this.items=[],this[P.setReadonly](!1,t),this[P.onReset]?.()}[P.setReadonly](t,e){this[P.readonly]!==t&&(this[P.readonly]=t,this.dispatchEvent(new V("readonly-change",{detail:t,trigger:e})))}}const xt=Symbol(0);class ze extends We{get selected(){return this.items.find(t=>t.selected)??null}get selectedIndex(){return this.items.findIndex(t=>t.selected)}[P.onRemove](t,e){this[P.select](t,!1,e)}[P.add](t,e){t[xt]=!1,Object.defineProperty(t,"selected",{get(){return this[xt]},set:s=>{this.readonly||(this[P.onUserSelect]?.(),this[P.select](t,s))}}),super[P.add](t,e)}[P.select](t,e,s){if(e===t?.[xt])return;const i=this.selected;t&&(t[xt]=e),(e?i!==t:i===t)&&(i&&(i[xt]=!1),this.dispatchEvent(new V("change",{detail:{prev:i,current:this.selected},trigger:s})))}}class Ai extends ze{#t=!1;switch="current";get auto(){return this.#t||this.readonly}[W.enableAuto];[P.onUserSelect](){this[W.setAuto](!1)}[P.onReset](t){this[W.enableAuto]=void 0,this[W.setAuto](!1,t)}autoSelect(t){this.readonly||this.#t||!this[W.enableAuto]||(this[W.enableAuto]?.(t),this[W.setAuto](!0,t))}getBySrc(t){return this.items.find(e=>e.src===t)}[W.setAuto](t,e){this.#t!==t&&(this.#t=t,this.dispatchEvent(new V("auto-change",{detail:t,trigger:e})))}}class je extends ct{#t;#e;constructor(t,e){super(),this.#t=t,this.#e=e}async onAttach(t){const e=this.$props[this.#t]();if(e==="eager")requestAnimationFrame(this.#e);else if(e==="idle")Os(this.#e);else if(e==="visible"){let s,i=new IntersectionObserver(a=>{this.scope&&a[0].isIntersecting&&(s?.(),s=void 0,this.#e())});i.observe(t),s=k(()=>i.disconnect())}}}class Mi{#t;#e;constructor(t,e){this.#t=t,this.#e=e}notify(t,...e){this.#t(new V(t,{detail:e?.[0],trigger:e?.[1]}))}async ready(t,e){return qt(async()=>{const{logger:s}=this.#e,{autoPlay:i,canPlay:a,started:r,duration:o,seekable:l,buffered:d,remotePlaybackInfo:c,playsInline:m,savedState:y,source:v}=this.#e.$state;if(a())return;const E={duration:t?.duration??o(),seekable:t?.seekable??l(),buffered:t?.buffered??d(),provider:this.#e.$provider()};this.notify("can-play",E,e),J();let F=this.#e.$provider(),{storage:X,qualities:xe}=this.#e,{muted:Ms,volume:qs,clipStartTime:Ls,playbackRate:Is}=this.#e.$props;await X?.onLoad?.(v());const Vs=y()?.currentTime,Ce=y()?.paused,Wt=await X?.getTime(),Ee=Vs??Wt??Ls(),Ds=Ce===!1||Ce!==!0&&!r()&&i();if(F){F.setVolume(await X?.getVolume()??qs()),F.setMuted(Ms()||!!await X?.getMuted());const gt=await X?.getAudioGain()??1;gt>1&&F.audioGain?.setGain?.(gt),F.setPlaybackRate?.(await X?.getPlaybackRate()??Is()),F.setPlaysInline?.(m()),Ee>0&&F.setCurrentTime(Ee)}const kt=await X?.getVideoQuality();if(kt&&xe.length){let gt=null,Ae=1/0;for(const Mt of xe){const Me=Math.abs(kt.width-Mt.width)+Math.abs(kt.height-Mt.height)+(kt.bitrate?Math.abs(kt.bitrate-(Mt.bitrate??0)):0);Me<Ae&&(gt=Mt,Ae=Me)}gt&&(gt.selected=!0)}a()&&Ds?await this.#s(e):Wt&&Wt>0&&this.notify("started",void 0,e),c.set(null)})}async#s(t){const{player:e,$state:{autoPlaying:s,muted:i}}=this.#e;s.set(!0);const a=new V("auto-play-attempt",{trigger:t});try{await e.play(a)}catch{}}}const ee=ot.fullscreenEnabled;class qi extends U{#t=!1;#e=!1;get active(){return this.#e}get supported(){return ee}onConnect(){new A(ot).add("fullscreenchange",this.#i.bind(this)).add("fullscreenerror",this.#a.bind(this)),k(this.#s.bind(this))}async#s(){ee&&await this.exit()}#i(t){const e=se(this.el);e!==this.#e&&(e||(this.#t=!1),this.#e=e,this.dispatch("fullscreen-change",{detail:e,trigger:t}))}#a(t){this.#t&&(this.dispatch("fullscreen-error",{detail:null,trigger:t}),this.#t=!1)}async enter(){try{return this.#t=!0,!this.el||se(this.el)?void 0:(Ye(),ot.requestFullscreen(this.el))}catch(t){throw this.#t=!1,t}}async exit(){if(!(!this.el||!se(this.el)))return Ye(),ot.exitFullscreen()}}function se(n){if(ot.fullscreenElement===n)return!0;try{return n.matches(ot.fullscreenPseudoClass)}catch{return!1}}function Ye(){if(!ee)throw Error("[vidstack] no fullscreen API")}class Qt extends U{#t=T(this.#r());#e=T(!1);#s;get type(){return this.#t()}get locked(){return this.#e()}get portrait(){return this.#t().startsWith("portrait")}get landscape(){return this.#t().startsWith("landscape")}static supported=Oe();get supported(){return Qt.supported}onConnect(){if(this.supported)H(screen.orientation,"change",this.#a.bind(this));else{const t=window.matchMedia("(orientation: landscape)");t.onchange=this.#a.bind(this),k(()=>t.onchange=null)}k(this.#i.bind(this))}async#i(){this.supported&&this.#e()&&await this.unlock()}#a(t){this.#t.set(this.#r()),this.dispatch("orientation-change",{detail:{orientation:u(this.#t),lock:this.#s},trigger:t})}async lock(t){u(this.#e)||this.#s===t||(this.#n(),await screen.orientation.lock(t),this.#e.set(!0),this.#s=t)}async unlock(){u(this.#e)&&(this.#n(),this.#s=void 0,await screen.orientation.unlock(),this.#e.set(!1))}#n(){if(!this.supported)throw Error("[vidstack] no orientation API")}#r(){return this.supported?window.screen.orientation.type:window.innerWidth>=window.innerHeight?"landscape-primary":"portrait-primary"}}class Li{#t=new Map;enqueue(t,e){this.#t.set(t,e)}serve(t){const e=this.peek(t);return this.#t.delete(t),e}peek(t){return this.#t.get(t)}delete(t){this.#t.delete(t)}clear(){this.#t.clear()}}class Xe{#t=!1;#e=Le();#s=new Map;get size(){return this.#s.size}get isServing(){return this.#t}async waitForFlush(){this.#t||await this.#e.promise}enqueue(t,e){if(this.#t){e();return}this.#s.delete(t),this.#s.set(t,e)}serve(t){this.#s.get(t)?.(),this.#s.delete(t)}start(){this.#i(),this.#t=!0,this.#s.size>0&&this.#i()}stop(){this.#t=!1}reset(){this.stop(),this.#s.clear(),this.#a()}#i(){for(const t of this.#s.keys())this.serve(t);this.#a()}#a(){this.#e.resolve(),this.#e=Le()}}function Je(n,t){const e=t.composedPath()[0];return Hs(e)&&n.contains(e)}const ie=new Set;{let n=function(){for(const t of ie)try{t()}catch{}window.requestAnimationFrame(n)};n()}function Ii(n){return ie.add(n),()=>ie.delete(n)}function x(n,t,e){n.hasAttribute(t)||n.setAttribute(t,e)}function at(n,t){if(n.hasAttribute("aria-label")||n.hasAttribute("data-no-label"))return;if(!Ns(t)){p(n,"aria-label",t);return}function e(){p(n,"aria-label",t())}h(e)}function Ze(n){const t=getComputedStyle(n);return t.display!=="none"&&parseInt(t.opacity)>0}function Vi(n){return!!n&&("checkVisibility"in n?n.checkVisibility({checkOpacity:!0,checkVisibilityCSS:!0}):Ze(n))}function ts(n,t){return Ii(()=>t(Vi(n)))}function es(n,t,e){for(;t;){if(t===n)return!0;if(e?.(t))break;t=t.parentElement}return!1}function nt(n,t){return new A(n).add("pointerup",e=>{e.button===0&&!e.defaultPrevented&&t(e)}).add("keydown",e=>{qe(e)&&t(e)})}function ae(n){return Lt(n)&&(n.touches.length>1||n.changedTouches.length>1)}function tt(n){let t=Fs(),e=window.requestAnimationFrame(()=>{It(n,t),e=-1});return()=>void window.cancelAnimationFrame(e)}function ne(n,t,e){let s,i=n,a=n.parentElement,r=n.content.firstElementChild,o=[];!r&&n.firstElementChild&&(n.innerHTML=n.firstElementChild.outerHTML,n.firstElementChild.remove(),r=n.content.firstElementChild);for(let l=0;l<t;l++)s=document.importNode(r,!0),e?.(s,l),a.insertBefore(s,i.nextSibling),o.push(s),i=s;return k(()=>{for(let l=0;l<o.length;l++)o[l].remove()}),o}function re(n){const t=document.createElement("template");return t.innerHTML=n,t.content}function oe(n){return n.cloneNode(!0).firstElementChild}function ss(n,t,e,{offsetVarName:s,xOffset:i,yOffset:a,...r}){if(!n)return;const o=e.replace(" ","-").replace("-center","");if(B(n,"visibility",t?null:"hidden"),!t)return;let l=e.includes("top");const d=m=>e.includes("left")?`calc(-1 * ${m})`:m,c=m=>l?`calc(-1 * ${m})`:m;return Gs(t,n,()=>{Bs(t,n,{placement:o,middleware:[...r.middleware??[],Ks({fallbackAxisSideDirection:"start",crossAxis:!1}),_s()],...r}).then(({x:m,y,middlewareData:v})=>{const E=!!v.flip?.index;l=e.includes(E?"bottom":"top"),n.setAttribute("data-placement",E?e.startsWith("top")?e.replace("top","bottom"):e.replace("bottom","top"):e),Object.assign(n.style,{top:`calc(${y+"px"} + ${c(a?a+"px":`var(--${s}-y-offset, 0px)`)})`,left:`calc(${m+"px"} + ${d(i?i+"px":`var(--${s}-x-offset, 0px)`)})`})})})}function Di(n){return getComputedStyle(n).animationName!=="none"}function ut(n){return n instanceof HTMLElement}class Ri extends ct{#t=-2;#e=!1;#s=T(!1);#i=T(!1);#a=null;#n=T(!0);defaultDelay=2e3;get canIdle(){return this.#n()}set canIdle(t){this.#n.set(t)}get hideOnMouseLeave(){const{hideControlsOnMouseLeave:t}=this.$props;return this.#s()||t()}set hideOnMouseLeave(t){this.#s.set(t)}get showing(){return this.$state.controlsVisible()}show(t=0,e){this.#m(),this.#e||this.#g(!0,t,e)}hide(t=this.defaultDelay,e){this.#m(),this.#e||this.#g(!1,t,e)}pause(t){this.#e=!0,this.#m(),this.#g(!0,0,t)}resume(t){this.#e=!1,!this.$state.paused()&&this.#g(!1,this.defaultDelay,t)}onConnect(){h(this.#r.bind(this))}#r(){const{viewType:t}=this.$state;if(!this.el||!this.#n())return;if(t()==="audio"){this.show();return}h(this.#o.bind(this)),h(this.#h.bind(this));const e=this.#d.bind(this),s=this.#c.bind(this),i=this.#u.bind(this);new A(this.el).add("can-play",a=>this.show(0,a)).add("play",e).add("pause",s).add("end",i).add("auto-play-fail",s)}#o(){if(!this.el)return;const{started:t,pointer:e,paused:s}=this.$state;if(!t()||e()!=="fine")return;const i=new A(this.el),a=this.hideOnMouseLeave;(!a||!this.#i())&&h(()=>{s()||i.add("pointermove",this.#b.bind(this))}),a&&i.add("mouseenter",this.#l.bind(this)).add("mouseleave",this.#p.bind(this))}#h(){const{paused:t,started:e,autoPlayError:s}=this.$state;if(t()||s()&&!e())return;const i=this.#b.bind(this);h(()=>{if(!this.el)return;const a=this.$state.pointer(),r=a==="coarse",o=new A(this.el),l=[r?"touchend":"pointerup","keydown"];for(const d of l)o.add(d,i,{passive:!1})})}#d(t){t.triggers.hasType("ended")||(this.show(0,t),this.hide(void 0,t))}#c(t){this.show(0,t)}#u(t){const{loop:e}=this.$state;e()&&this.hide(0,t)}#l(t){this.#i.set(!1),this.show(0,t),this.hide(void 0,t)}#p(t){this.#i.set(!0),this.hide(0,t)}#m(){window.clearTimeout(this.#t),this.#t=-1}#b(t){t.MEDIA_GESTURE||this.#e||ae(t)||(Ie(t)&&(t.key==="Escape"?(this.el?.focus(),this.#a=null):this.#a&&(t.preventDefault(),requestAnimationFrame(()=>{this.#a?.focus(),this.#a=null}))),this.show(0,t),this.hide(this.defaultDelay,t))}#g(t,e,s){if(e===0){this.#y(t,s);return}this.#t=window.setTimeout(()=>{this.scope&&this.#y(t&&!this.#e,s)},e)}#y(t,e){this.$state.controlsVisible()!==t&&(this.$state.controlsVisible.set(t),!t&&document.activeElement&&this.el?.contains(document.activeElement)&&(this.#a=document.activeElement,requestAnimationFrame(()=>{this.el?.focus({preventScroll:!0})})),this.dispatch("controls-change",{detail:t,trigger:e}))}}function Oi(n){return n?"true":"false"}function D(n){return()=>Oi(n())}function Ni(){return typeof window>"u"?!1:window.matchMedia("(prefers-reduced-motion: reduce)").matches}class Fi extends ct{#t;#e;#s;controls;#i;#a;#n;#r=new Xe;constructor(t,e,s){super(),this.#t=t,this.#e=e,this.#s=s,this.#n=s.$provider,this.controls=new Ri,this.#i=new qi,this.#a=new Qt}onAttach(){this.listen("fullscreen-change",this.#P.bind(this))}onConnect(t){const e=Object.getOwnPropertyNames(Object.getPrototypeOf(this)),s=new A(t),i=this.#d.bind(this);for(const a of e)a.startsWith("media-")&&s.add(a,i);this.#o(),h(this.#h.bind(this)),h(this.#m.bind(this)),h(this.#b.bind(this)),h(this.#g.bind(this)),h(this.#y.bind(this)),h(this.#T.bind(this)),h(this.#$.bind(this))}onDestroy(){try{const t=this.createEvent("destroy"),{pictureInPicture:e,fullscreen:s}=this.$state;s()&&this.exitFullscreen("prefer-media",t),e()&&this.exitPictureInPicture(t)}catch{}this.#r.reset()}#o(){const{load:t}=this.$props,{canLoad:e}=this.$state;if(t()!=="play"||e())return;const s=this.listen("media-play-request",i=>{this.#c(i),s()})}#h(){const t=this.#n(),e=this.$state.canPlay();return t&&e&&this.#r.start(),()=>{this.#r.stop()}}#d(t){t.stopPropagation(),!t.defaultPrevented&&this[t.type]&&(u(this.#n)?this[t.type](t):this.#r.enqueue(t.type,()=>{u(this.#n)&&this[t.type](t)}))}async play(t){const{canPlay:e,paused:s,autoPlaying:i}=this.$state;if(this.#c(t)||!u(s))return;t&&this.#e.queue.enqueue("media-play-request",t);const a=u(i);try{const r=u(this.#n);return he(r,u(e)),Hi(a),await r.play()}catch(r){const o=this.createEvent("play-fail",{detail:Yt(r),trigger:t});throw o.autoPlay=a,this.#t.handle(o),r}}#c(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.#r.enqueue("media-play-request",async()=>{try{await this.play(i)}catch{}}),!0}return!1}async pause(t){const{canPlay:e,paused:s}=this.$state;if(!u(s)){t&&this.#e.queue.enqueue("media-pause-request",t);try{const i=u(this.#n);return he(i,u(e)),await i.pause()}catch(i){throw this.#e.queue.delete("media-pause-request"),i}}}setAudioGain(t,e){const{audioGain:s,canSetAudioGain:i}=this.$state;if(s()===t)return;const a=this.#n();if(!a?.audioGain||!i())throw Error("[vidstack] audio gain api not available");e&&this.#e.queue.enqueue("media-audio-gain-change-request",e),a.audioGain.setGain(t)}seekToLiveEdge(t){const{canPlay:e,live:s,liveEdge:i,canSeek:a,liveSyncPosition:r,seekableEnd:o,userBehindLiveEdge:l}=this.$state;if(l.set(!1),u(()=>!s()||i()||!a()))return;const d=u(this.#n);he(d,u(e)),t&&this.#e.queue.enqueue("media-seek-request",t);const c=o()-2;d.setCurrentTime(Math.min(c,r()??c))}#u=!1;async enterFullscreen(t="prefer-media",e){const s=this.#l(t);if(is(t,s),!s.active)return u(this.$state.pictureInPicture)&&(this.#u=!0,await this.exitPictureInPicture(e)),e&&this.#e.queue.enqueue("media-enter-fullscreen-request",e),s.enter()}async exitFullscreen(t="prefer-media",e){const s=this.#l(t);if(is(t,s),!!s.active){e&&this.#e.queue.enqueue("media-exit-fullscreen-request",e);try{const i=await s.exit();return this.#u&&u(this.$state.canPictureInPicture)&&await this.enterPictureInPicture(),i}finally{this.#u=!1}}}#l(t){const e=u(this.#n);return t==="prefer-media"&&this.#i.supported||t==="media"?this.#i:e?.fullscreen}async enterPictureInPicture(t){if(this.#p(),!this.$state.pictureInPicture())return t&&this.#e.queue.enqueue("media-enter-pip-request",t),await this.#n().pictureInPicture.enter()}async exitPictureInPicture(t){if(this.#p(),!!this.$state.pictureInPicture())return t&&this.#e.queue.enqueue("media-exit-pip-request",t),await this.#n().pictureInPicture.exit()}#p(){if(!this.$state.canPictureInPicture())throw Error("[vidstack] no pip support")}#m(){this.controls.defaultDelay=this.$props.controlsDelay()}#b(){const{canSetAudioGain:t}=this.$state,e=!!this.#n()?.audioGain?.supported;t.set(e)}#g(){const{canAirPlay:t}=this.$state,e=!!this.#n()?.airPlay?.supported;t.set(e)}#y(){const{canGoogleCast:t,source:e}=this.$state,s=ai&&!ni&&pi(e());t.set(s)}#T(){const{canFullscreen:t}=this.$state,e=this.#i.supported||!!this.#n()?.fullscreen?.supported;t.set(e)}#$(){const{canPictureInPicture:t}=this.$state,e=!!this.#n()?.pictureInPicture?.supported;t.set(e)}async"media-airplay-request"(t){try{await this.requestAirPlay(t)}catch{}}async requestAirPlay(t){try{const e=this.#n()?.airPlay;if(!e?.supported)throw Error("No AirPlay adapter.");return t&&this.#e.queue.enqueue("media-airplay-request",t),await e.prompt()}catch(e){throw this.#e.queue.delete("media-airplay-request"),e}}async"media-google-cast-request"(t){try{await this.requestGoogleCast(t)}catch{}}#w;async requestGoogleCast(t){try{const{canGoogleCast:e}=this.$state;if(!u(e)){const i=Error("Cast not available.");throw i.code="CAST_NOT_AVAILABLE",i}if(St("https://www.gstatic.com"),!this.#w){const i=await import("./vidstack-CbLirLK7.js");this.#w=new i.GoogleCastLoader}await this.#w.prompt(this.#s),t&&this.#e.queue.enqueue("media-google-cast-request",t);const s=u(this.$state.remotePlaybackState)!=="disconnected";s&&this.$state.savedState.set({paused:u(this.$state.paused),currentTime:u(this.$state.currentTime)}),this.$state.remotePlaybackLoader.set(s?this.#w:null)}catch(e){throw this.#e.queue.delete("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.#s;if(s.readonly)return;const i=t.detail,a=s[i];if(a){const r=t.type;this.#e.queue.enqueue(r,t),a.selected=!0}}async"media-enter-fullscreen-request"(t){try{await this.enterFullscreen(t.detail,t)}catch(e){this.#f(e,t)}}async"media-exit-fullscreen-request"(t){try{await this.exitFullscreen(t.detail,t)}catch(e){this.#f(e,t)}}async#P(t){const e=u(this.$props.fullscreenOrientation),s=t.detail;if(!(Us(e)||e==="none"||!this.#a.supported))if(s){if(this.#a.locked)return;this.dispatch("media-orientation-lock-request",{detail:e,trigger:t})}else this.#a.locked&&this.dispatch("media-orientation-unlock-request",{trigger:t})}#f(t,e){this.#t.handle(this.createEvent("fullscreen-error",{detail:Yt(t)}))}async"media-orientation-lock-request"(t){const e=t.type;try{this.#e.queue.enqueue(e,t),await this.#a.lock(t.detail)}catch{this.#e.queue.delete(e)}}async"media-orientation-unlock-request"(t){const e=t.type;try{this.#e.queue.enqueue(e,t),await this.#a.unlock()}catch{this.#e.queue.delete(e)}}async"media-enter-pip-request"(t){try{await this.enterPictureInPicture(t)}catch(e){this.#v(e,t)}}async"media-exit-pip-request"(t){try{await this.exitPictureInPicture(t)}catch(e){this.#v(e,t)}}#v(t,e){this.#t.handle(this.createEvent("picture-in-picture-error",{detail:Yt(t)}))}"media-live-edge-request"(t){const{live:e,liveEdge:s,canSeek:i}=this.$state;if(!(!e()||s()||!i())){this.#e.queue.enqueue("media-seek-request",t);try{this.seekToLiveEdge()}catch{this.#e.queue.delete("media-seek-request")}}}async"media-loop-request"(t){try{this.#e.looping=!0,this.#e.replaying=!0,await this.play(t)}catch{this.#e.looping=!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.pause(t)}catch{}}async"media-play-request"(t){if(this.$state.paused())try{await this.play(t)}catch{}}"media-rate-change-request"(t){const{playbackRate:e,canSetPlaybackRate:s}=this.$state;if(e()===t.detail||!s())return;const i=this.#n();i?.setPlaybackRate&&(this.#e.queue.enqueue("media-rate-change-request",t),i.setPlaybackRate(t.detail))}"media-audio-gain-change-request"(t){try{this.setAudioGain(t.detail,t)}catch{}}"media-quality-change-request"(t){const{qualities:e,storage:s,logger:i}=this.#s;if(e.readonly)return;this.#e.queue.enqueue("media-quality-change-request",t);const a=t.detail;if(a<0)e.autoSelect(t),t.isOriginTrusted&&s?.setVideoQuality?.(null);else{const r=e[a];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.#e.queue.enqueue(e,t),this.controls.pause(t)}"media-resume-controls-request"(t){const e=t.type;this.#e.queue.enqueue(e,t),this.controls.resume(t)}"media-seek-request"(t){const{canSeek:e,ended:s,live:i,seekableEnd:a,userBehindLiveEdge:r}=this.$state,o=t.detail;s()&&(this.#e.replaying=!0);const l=t.type;this.#e.seeking=!1,this.#e.queue.delete(l);const d=Qe(o,this.$state);!Number.isFinite(d)||!e()||(this.#e.queue.enqueue(l,t),this.#n().setCurrentTime(d),i()&&t.isOriginTrusted&&Math.abs(a()-d)>=2&&r.set(!0))}"media-seeking-request"(t){const e=t.type;this.#e.queue.enqueue(e,t),this.$state.seeking.set(!0),this.#e.seeking=!0}"media-start-loading"(t){if(this.$state.canLoad())return;const e=t.type;this.#e.queue.enqueue(e,t),this.#t.handle(this.createEvent("can-load"))}"media-poster-start-loading"(t){if(this.$state.canLoadPoster())return;const e=t.type;this.#e.queue.enqueue(e,t),this.#t.handle(this.createEvent("can-load-poster"))}"media-text-track-change-request"(t){const{index:e,mode:s}=t.detail,i=this.#s.textTracks[e];if(i){const a=t.type;this.#e.queue.enqueue(a,t),i.setMode(s,t)}}"media-mute-request"(t){if(this.$state.muted())return;const e=t.type;this.#e.queue.enqueue(e,t),this.#n().setMuted(!0)}"media-unmute-request"(t){const{muted:e,volume:s}=this.$state;if(!e())return;const i=t.type;this.#e.queue.enqueue(i,t),this.#s.$provider().setMuted(!1),s()===0&&(this.#e.queue.enqueue(i,t),this.#n().setVolume(.25))}"media-volume-change-request"(t){const{muted:e,volume:s}=this.$state,i=t.detail;if(s()===i)return;const a=t.type;this.#e.queue.enqueue(a,t),this.#n().setVolume(i),i>0&&e()&&(this.#e.queue.enqueue(a,t),this.#n().setMuted(!1))}#k(t,e,s){}}function he(n,t){if(!(n&&t))throw Error("[vidstack] media not ready")}function is(n,t){if(!t?.supported)throw Error("[vidstack] no fullscreen support")}function Hi(n){if(!(!Ni()||!n))throw Error("[vidstack] autoplay blocked")}class Gi{seeking=!1;looping=!1;replaying=!1;queue=new Li}function le(n){return!S(n)&&"width"in n&&"height"in n&&j(n.width)&&j(n.height)}const Bi=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 Ki extends ct{#t;#e;#s=new Map;#i=!1;#a=[];#n=[-1,-1];#r=!1;#o;constructor(t,e){super(),this.#t=t,this.#e=e}onAttach(t){t.setAttribute("aria-busy","true"),new A(this).add("fullscreen-change",this["fullscreen-change"].bind(this)).add("fullscreen-error",this["fullscreen-error"].bind(this)).add("orientation-change",this["orientation-change"].bind(this))}onConnect(t){h(this.#E.bind(this)),this.#p(),this.#m(),this.#b(),this.#d(),k(this.#c.bind(this))}onDestroy(){const{audioTracks:t,qualities:e,textTracks:s}=this.#e;t[P.reset](),e[P.reset](),s[P.reset](),this.#S()}handle(t){if(!this.scope)return;const e=t.type;qt(()=>this[t.type]?.(t)),Bi.has(e)&&this.#s.set(e,t),this.dispatch(t)}#h=!1;#d(){this.#h&&(requestAnimationFrame(()=>{this.scope&&this.#e.remote.play(new V("dom-connect"))}),this.#h=!1)}#c(){this.#h||(this.#h=!this.$state.paused(),this.#e.$provider()?.pause())}#u(){this.#D(),this.#i=!1,this.#t.replaying=!1,this.#t.looping=!1,this.#r=!1,this.#o=void 0,this.#s.clear()}#l(t,e){const s=this.#t.queue.serve(t);s&&(e.request=s,e.triggers.add(s))}#p(){this.#g(),this.#y();const t=this.#e.textTracks;new A(t).add("add",this.#g.bind(this)).add("remove",this.#g.bind(this)).add("mode-change",this.#y.bind(this))}#m(){const t=this.#e.qualities;new A(t).add("add",this.#w.bind(this)).add("remove",this.#w.bind(this)).add("change",this.#P.bind(this)).add("auto-change",this.#f.bind(this)).add("readonly-change",this.#x.bind(this))}#b(){const t=this.#e.audioTracks;new A(t).add("add",this.#T.bind(this)).add("remove",this.#T.bind(this)).add("change",this.#$.bind(this))}#g(t){const{textTracks:e}=this.$state;e.set(this.#e.textTracks.toArray()),this.dispatch("text-tracks-change",{detail:e(),trigger:t})}#y(t){t&&this.#l("media-text-track-change-request",t);const e=this.#e.textTracks.selected,{textTrack:s}=this.$state;s()!==e&&(s.set(e),this.dispatch("text-track-change",{detail:e,trigger:t}))}#T(t){const{audioTracks:e}=this.$state;e.set(this.#e.audioTracks.toArray()),this.dispatch("audio-tracks-change",{detail:e(),trigger:t})}#$(t){const{audioTrack:e}=this.$state;e.set(this.#e.audioTracks.selected),t&&this.#l("media-audio-track-change-request",t),this.dispatch("audio-track-change",{detail:e(),trigger:t})}#w(t){const{qualities:e}=this.$state;e.set(this.#e.qualities.toArray()),this.dispatch("qualities-change",{detail:e(),trigger:t})}#P(t){const{quality:e}=this.$state;e.set(this.#e.qualities.selected),t&&this.#l("media-quality-change-request",t),this.dispatch("quality-change",{detail:e(),trigger:t})}#f(){const{qualities:t}=this.#e,e=t.auto;this.$state.autoQuality.set(e),e||this.#S()}#v=null;#k(){this.#S(),this.#v=h(()=>{const{qualities:t}=this.#e,{mediaWidth:e,mediaHeight:s}=this.$state,i=e(),a=s();if(i===0||a===0)return;let r=null,o=1/0;for(const l of t){const d=Math.abs(l.width-i)+Math.abs(l.height-a);d<o&&(o=d,r=l)}r&&t[P.select](r,!0,new V("resize",{detail:{width:i,height:a}}))})}#S(){this.#v?.(),this.#v=null}#x(){this.$state.canSetQuality.set(!this.#e.qualities.readonly)}#E(){const{canSetVolume:t,isGoogleCastConnected:e}=this.$state;if(e()){t.set(!1);return}ri().then(t.set)}"provider-change"(t){const e=this.#e.$provider(),s=t.detail;e?.type!==s?.type&&(e?.destroy?.(),e?.scope?.dispose(),this.#e.$provider.set(t.detail),e&&t.detail===null&&this.#C(t))}"provider-loader-change"(t){}"auto-play"(t){this.$state.autoPlayError.set(null)}"auto-play-fail"(t){this.$state.autoPlayError.set(t.detail),this.#u()}"can-load"(t){this.$state.canLoad.set(!0),this.#s.set("can-load",t),this.#e.textTracks[O.canLoad](),this.#l("media-start-loading",t)}"can-load-poster"(t){this.$state.canLoadPoster.set(!0),this.#s.set("can-load-poster",t),this.#l("media-poster-start-loading",t)}"media-type-change"(t){const e=this.#s.get("source-change");e&&t.triggers.add(e);const s=this.$state.viewType();this.$state.mediaType.set(t.detail);const i=this.$state.providedViewType(),a=i==="unknown"?t.detail:i;s!==a&&setTimeout(()=>{requestAnimationFrame(()=>{this.scope&&(this.$state.inferredViewType.set(t.detail),this.dispatch("view-type-change",{detail:a,trigger:t}))})},0)}"stream-type-change"(t){const e=this.#s.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.#e,{canPlay:s}=this.$state;this.$state.playbackRate.set(t.detail),this.#l("media-rate-change-request",t),s()&&e?.setPlaybackRate?.(t.detail)}"remote-playback-change"(t){const{remotePlaybackState:e,remotePlaybackType:s}=this.$state,{type:i,state:a}=t.detail,r=a==="connected";s.set(i),e.set(a);const o=i==="airplay"?"media-airplay-request":"media-google-cast-request";if(r)this.#l(o,t);else{const l=this.#t.queue.peek(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.#A(e,s,t)}#A(t,e,s){let{qualities:i}=this.#e,a=!1,r=!1;for(const o of t){if(!le(o))continue;if(!e.some(d=>d.src===o.src)){const d=i.getBySrc(o.src);d&&(i[P.remove](d,s),r=!0)}}r&&!i.length&&(this.$state.savedState.set(null),i[P.reset](s));for(const o of e){if(!le(o)||i.getBySrc(o.src))continue;const l={id:o.id??o.height+"p",bitrate:null,codec:null,...o,selected:!1};i[P.add](l,s),a=!0}a&&!i[W.enableAuto]&&(this.#k(),i[W.enableAuto]=this.#k.bind(this),i[W.setAuto](!0,s))}"source-change"(t){t.isQualityChange=t.originEvent?.type==="quality-change";const e=t.detail;this.#C(t,t.isQualityChange),this.#s.set(t.type,t),this.$state.source.set(e),this.el?.setAttribute("aria-busy","true")}#C(t,e=!1){const{audioTracks:s,qualities:i}=this.#e;if(!e){this.#a=[],this.#n=[-1,-1],s[P.reset](t),i[P.reset](t),Ue(this.$state,e),this.#u();return}Ue(this.$state,e),this.#u()}abort(t){const e=this.#s.get("source-change");e&&t.triggers.add(e);const s=this.#s.get("can-load");s&&!t.triggers.hasType("can-load")&&t.triggers.add(s)}"load-start"(t){const e=this.#s.get("source-change");e&&t.triggers.add(e)}error(t){this.$state.error.set(t.detail);const e=this.#s.get("abort");e&&t.triggers.add(e)}"loaded-metadata"(t){const e=this.#s.get("load-start");e&&t.triggers.add(e)}"loaded-data"(t){const e=this.#s.get("load-start");e&&t.triggers.add(e)}"can-play"(t){const e=this.#s.get("loaded-metadata");e&&t.triggers.add(e),this.#M(t.detail),this.el?.setAttribute("aria-busy","false")}"can-play-through"(t){this.#M(t.detail);const e=this.#s.get("can-play");e&&t.triggers.add(e)}#M(t){const{seekable:e,buffered:s,intrinsicDuration:i,canPlay:a}=this.$state;a.set(!0),s.set(t.buffered),e.set(t.seekable);const r=dt(t.seekable)??1/0;i.set(r)}"duration-change"(t){const{live:e,intrinsicDuration:s,providedDuration:i,clipEndTime:a,ended:r}=this.$state,o=t.detail;if(!e()){const l=Number.isNaN(o)?0:o;s.set(l),r()&&this.#I(t)}(i()>0||a()>0)&&t.stopImmediatePropagation()}progress(t){const{buffered:e,seekable:s}=this.$state,{buffered:i,seekable:a}=t.detail,r=dt(i),o=i.length!==e().length,l=r!==dt(e()),d=dt(a),c=a.length!==s().length,m=d!==dt(s());(o||l)&&e.set(i),(c||m)&&s.set(a)}play(t){const{paused:e,autoPlayError:s,ended:i,autoPlaying:a,playsInline:r,pointer:o,muted:l,viewType:d,live:c,userBehindLiveEdge:m}=this.$state;if(this.#L(),!e()){t.stopImmediatePropagation();return}t.autoPlay=a();const y=this.#s.get("waiting");y&&t.triggers.add(y),this.#l("media-play-request",t),this.#s.set("play",t),e.set(!1),s.set(null),t.autoPlay&&(this.handle(this.createEvent("auto-play",{detail:{muted:l()},trigger:t})),a.set(!1)),(i()||this.#t.replaying)&&(this.#t.replaying=!1,i.set(!1),this.handle(this.createEvent("replay",{trigger:t}))),!r()&&d()==="video"&&o()==="coarse"&&this.#e.remote.enterFullscreen("prefer-media",t),c()&&!m()&&this.#e.remote.seekToLiveEdge(t)}#L(t){if(!u(this.#e.$provider))return;const{ended:s,seekableStart:i,clipEndTime:a,currentTime:r,realCurrentTime:o,duration:l}=this.$state,d=s()||o()<i()||a()>0&&o()>=a()||Math.abs(r()-l())<.1;return d&&this.dispatch("media-seek-request",{detail:i(),trigger:t}),d}"play-fail"(t){const{muted:e,autoPlaying:s}=this.$state,i=this.#s.get("play");i&&t.triggers.add(i),this.#l("media-play-request",t);const{paused:a,playing:r}=this.$state;a.set(!0),r.set(!1),this.#u(),this.#s.set("play-fail",t),t.autoPlay&&(this.handle(this.createEvent("auto-play-fail",{detail:{muted:e(),error:t.detail},trigger:t})),s.set(!1))}playing(t){const e=this.#s.get("play"),s=this.#s.get("seeked");e?t.triggers.add(e):s&&t.triggers.add(s),setTimeout(()=>this.#u(),0);const{paused:i,playing:a,live:r,liveSyncPosition:o,seekableEnd:l,started:d,currentTime:c,seeking:m,ended:y}=this.$state;if(i.set(!1),a.set(!0),m.set(!1),y.set(!1),this.#t.looping){this.#t.looping=!1;return}if(r()&&!d()&&c()===0){const v=o()??l()-2;Number.isFinite(v)&&this.#e.$provider().setCurrentTime(v)}this.started(t)}started(t){const{started:e}=this.$state;e()||(e.set(!0),this.handle(this.createEvent("started",{trigger:t})))}pause(t){this.el?.isConnected||(this.#h=!0),this.#l("media-pause-request",t);const e=this.#s.get("seeked");e&&t.triggers.add(e);const{paused:s,playing:i}=this.$state;s.set(!0),i.set(!1),this.#i&&setTimeout(()=>{this.handle(this.createEvent("end",{trigger:t})),this.#i=!1},0),this.#u()}"time-change"(t){if(this.#t.looping){t.stopImmediatePropagation();return}let{waiting:e,played:s,clipEndTime:i,realCurrentTime:a,currentTime:r}=this.$state,o=t.detail,l=i();a.set(o),this.#V(),e.set(!1);for(const d of this.#e.textTracks)d[O.updateActiveCues](o,t);l>0&&o>=l&&(this.#i=!0,this.dispatch("media-pause-request",{trigger:t})),this.#R(),this.dispatch("time-update",{detail:{currentTime:r(),played:s()},trigger:t})}#V(){const{currentTime:t,played:e,paused:s}=this.$state;s()||(this.#n=di(this.#a,this.#n,t()),e.set(new Dt(this.#a)))}#I(t){const{clipStartTime:e,clipEndTime:s,duration:i}=this.$state;e()>0||s()>0||this.handle(this.createEvent("time-change",{detail:i(),trigger:t}))}#R(){const{storage:t}=this.#e,{canPlay:e,realCurrentTime:s}=this.$state;e()&&t?.setTime?.(s())}"audio-gain-change"(t){const{storage:e}=this.#e,{canPlay:s,audioGain:i}=this.$state;i.set(t.detail),this.#l("media-audio-gain-change-request",t),s()&&e?.setAudioGain?.(i())}"volume-change"(t){const{storage:e}=this.#e,{volume:s,muted:i,canPlay:a}=this.$state,r=t.detail;s.set(r.volume),i.set(r.muted||r.volume===0),this.#l("media-volume-change-request",t),this.#l(r.muted?"media-mute-request":"media-unmute-request",t),a()&&(e?.setVolume?.(s()),e?.setMuted?.(i()))}seeking=ht(t=>{const{seeking:e,realCurrentTime:s,paused:i}=this.$state;e.set(!0),s.set(t.detail),this.#l("media-seeking-request",t),i()&&(this.#o=t,this.#q()),this.#n=[-1,-1]},150,{leading:!0});seeked(t){const{seeking:e,currentTime:s,realCurrentTime:i,paused:a,seekableEnd:r,ended:o,live:l}=this.$state;if(this.#t.seeking)e.set(!0),t.stopImmediatePropagation();else if(e()){const d=this.#s.get("waiting");d&&t.triggers.add(d);const c=this.#s.get("seeking");c&&!t.triggers.has(c)&&t.triggers.add(c),a()&&this.#D(),e.set(!1),i.set(t.detail),this.#l("media-seek-request",t);const m=t?.originEvent;m?.isTrusted&&!(m instanceof MessageEvent)&&!/seek/.test(m.type)&&this.started(t)}l()||(Math.floor(s())!==Math.floor(r())?o.set(!1):this.end(t))}waiting(t){this.#r||this.#t.seeking||(t.stopImmediatePropagation(),this.#o=t,this.#q())}#q=zt(()=>{if(!this.#o)return;this.#r=!0;const{waiting:t,playing:e}=this.$state;t.set(!0),e.set(!1);const s=this.createEvent("waiting",{trigger:this.#o});this.#s.set("waiting",s),this.dispatch(s),this.#o=void 0,this.#r=!1},300);end(t){const{loop:e,ended:s}=this.$state;if(!(!e()&&s())){if(e()){setTimeout(()=>{requestAnimationFrame(()=>{this.#L(t),this.dispatch("media-loop-request",{trigger:t})})},10);return}setTimeout(()=>this.#O(t),0)}}#O(t){const{storage:e}=this.#e,{paused:s,seeking:i,ended:a,duration:r}=this.$state;this.#I(t),s()||this.dispatch("pause",{trigger:t}),i()&&this.dispatch("seeked",{detail:r(),trigger:t}),a.set(!0),this.#u(),e?.setTime?.(r(),!0),this.dispatch("ended",{trigger:t})}#D(){this.#q.cancel(),this.$state.waiting.set(!1)}"fullscreen-change"(t){const e=t.detail;this.$state.fullscreen.set(e),this.#l(e?"media-enter-fullscreen-request":"media-exit-fullscreen-request",t)}"fullscreen-error"(t){this.#l("media-enter-fullscreen-request",t),this.#l("media-exit-fullscreen-request",t)}"orientation-change"(t){const e=t.detail.lock;this.#l(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.#l(e?"media-enter-pip-request":"media-exit-pip-request",t)}"picture-in-picture-error"(t){this.#l("media-enter-pip-request",t),this.#l("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 _i extends ct{onSetup(){this.#t();const t=[this.#i,this.#n,this.#l,this.#p,this.#o,this.#d,this.#c,this.#m,this.#g,this.#b,this.#r,this.#u,this.#h,this.#e,this.#a];for(const e of t)h(e.bind(this))}#t(){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)}#e(){const{viewType:t,streamType:e,title:s,poster:i,loop:a}=this.$props,r=this.$state;r.providedPoster.set(i()),r.providedStreamType.set(e()),r.providedViewType.set(t()),r.providedTitle.set(s()),r.providedLoop.set(a())}#s(){}#i(){const{artist:t,artwork:e}=this.$props;this.$state.artist.set(t()),this.$state.artwork.set(e())}#a(){const{title:t}=this.$state;this.dispatch("title-change",{detail:t()})}#n(){const t=this.$props.autoPlay()||this.$props.autoplay();this.$state.autoPlay.set(t),this.dispatch("auto-play-change",{detail:t})}#r(){const t=this.$state.loop();this.dispatch("loop-change",{detail:t})}#o(){const t=this.$props.controls();this.$state.controls.set(t)}#h(){const{poster:t}=this.$state;this.dispatch("poster-change",{detail:t()})}#d(){const t=this.$props.crossOrigin()??this.$props.crossorigin(),e=t===!0?"":t;this.$state.crossOrigin.set(e)}#c(){const{duration:t}=this.$props;this.dispatch("media-duration-change-request",{detail:t()})}#u(){const t=this.$props.playsInline()||this.$props.playsinline();this.$state.playsInline.set(t),this.dispatch("plays-inline-change",{detail:t})}#l(){const{clipStartTime:t}=this.$props;this.dispatch("media-clip-start-change-request",{detail:t()})}#p(){const{clipEndTime:t}=this.$props;this.dispatch("media-clip-end-change-request",{detail:t()})}#m(){this.dispatch("live-change",{detail:this.$state.live()})}#b(){this.$state.liveEdgeTolerance.set(this.$props.liveEdgeTolerance()),this.$state.minLiveDVRWindow.set(this.$props.minLiveDVRWindow())}#g(){this.dispatch("live-edge-change",{detail:this.$state.liveEdge()})}}class Ui{playerId="vds-player";mediaId=null;#t={volume:null,muted:null,audioGain:null,time:null,lang:null,captions:null,rate:null,quality:null};async getVolume(){return this.#t.volume}async setVolume(t){this.#t.volume=t,this.save()}async getMuted(){return this.#t.muted}async setMuted(t){this.#t.muted=t,this.save()}async getTime(){return this.#t.time}async setTime(t,e){const s=t<0;this.#t.time=s?null:t,s||e?this.saveTime():this.saveTimeThrottled()}async getLang(){return this.#t.lang}async setLang(t){this.#t.lang=t,this.save()}async getCaptions(){return this.#t.captions}async setCaptions(t){this.#t.captions=t,this.save()}async getPlaybackRate(){return this.#t.rate}async setPlaybackRate(t){this.#t.rate=t,this.save()}async getAudioGain(){return this.#t.audioGain}async setAudioGain(t){this.#t.audioGain=t,this.save()}async getVideoQuality(){return this.#t.quality}async setVideoQuality(t){this.#t.quality=t,this.save()}onChange(t,e,s="vds-player"){const i=s?localStorage.getItem(s):null,a=e?localStorage.getItem(e):null;this.playerId=s,this.mediaId=e,this.#t={volume:null,muted:null,audioGain:null,lang:null,captions:null,rate:null,quality:null,...i?JSON.parse(i):{},time:a?+a:null}}save(){if(!this.playerId)return;const t=JSON.stringify({...this.#t,time:void 0});localStorage.setItem(this.playerId,t)}saveTimeThrottled=ht(this.saveTime.bind(this),1e3);saveTime(){if(!this.mediaId)return;const t=(this.#t.time??0).toString();localStorage.setItem(this.mediaId,t)}}const as=["play","pause","seekforward","seekbackward","seekto"];class Qi extends ct{onConnect(){h(this.#e.bind(this)),h(this.#s.bind(this));const t=this.#i.bind(this);for(const e of as)navigator.mediaSession.setActionHandler(e,t);k(this.#t.bind(this))}#t(){for(const t of as)navigator.mediaSession.setActionHandler(t,null)}#e(){const{title:t,artist:e,artwork:s,post