"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2141],{64765:function(e,t,i){i.d(t,{$P:function(){return preconnect},Be:function(){return PosterInstance},Cv:function(){return MuteButtonInstance},DR:function(){return coerceToError},Er:function(){return CaptionButtonInstance},Ew:function(){return canGoogleCastSrc},F$:function(){return MenuItemInstance},FA:function(){return HTMLMediaProvider},Fl:function(){return ToggleButtonInstance},G6:function(){return VideoProvider},G9:function(){return d},HV:function(){return Q},Id:function(){return GestureInstance},Je:function(){return FullscreenButtonInstance},LD:function(){return MenuButtonInstance},LK:function(){return RAFLoop},QF:function(){return LiveButtonInstance},Rt:function(){return AirPlayButtonInstance},S3:function(){return ControlsGroupInstance},TO:function(){return TooltipInstance},UP:function(){return MediaProviderInstance},Uf:function(){return isRemotionProvider},V6:function(){return formatSpokenTime},Vi:function(){return QualitySliderInstance},W6:function(){return r},WU:function(){return SpeedSliderInstance},WV:function(){return ez},WX:function(){return _},Xm:function(){return SliderPreviewInstance},ZJ:function(){return MenuItemsInstance},Zf:function(){return SliderChaptersInstance},_1:function(){return MediaPlayerInstance},_S:function(){return L},_e:function(){return AudioGainSliderInstance},a2:function(){return sortVideoQualities},al:function(){return CaptionsInstance},bj:function(){return TimeSliderInstance},bx:function(){return MediaAnnouncerInstance},cA:function(){return SliderInstance},cj:function(){return l},dc:function(){return SliderThumbnailInstance},e0:function(){return ThumbnailInstance},eV:function(){return SliderVideoInstance},fS:function(){return HTMLAirPlayAdapter},fZ:function(){return TooltipContentInstance},gU:function(){return getDownloadFile},gV:function(){return TimeInstance},gq:function(){return GoogleCastButtonInstance},hA:function(){return RadioInstance},ib:function(){return MenuInstance},il:function(){return ControlsInstance},j9:function(){return useMediaState},jh:function(){return RadioGroupInstance},kA:function(){return A},kH:function(){return useMediaContext},lk:function(){return watchActiveTextTrack},mr:function(){return formatTime},n8:function(){return TextTrack},nA:function(){return M},nQ:function(){return appendParamsToURL},nl:function(){return isTrackCaptionKind},ns:function(){return SeekButtonInstance},qG:function(){return TooltipTriggerInstance},r4:function(){return isRemotionSrc},tF:function(){return isHLSSupported},tn:function(){return TimeRange},u9:function(){return SliderValueInstance},v$:function(){return VolumeSliderInstance},ve:function(){return loadScript},xu:function(){return useSliderState},zY:function(){return PlayButtonInstance},zh:function(){return PIPButtonInstance}});var s=i(67294),a=i(34603),n=i(18573);function isVideoQualitySrc(e){return!(0,a.isString)(e)&&"width"in e&&"height"in e&&(0,a.isNumber)(e.width)&&(0,a.isNumber)(e.height)}let r="undefined"==typeof document,o=r?"":navigator?.userAgent.toLowerCase()||"",l=!r&&/iphone|ipad|ipod|ios|crios|fxios/i.test(o),h=!r&&/(iphone|ipod)/gi.test(navigator?.platform||""),d=!r&&!!window.chrome,u=!r&&(!!window.safari||l);function canOrientScreen(){return!r&&!(0,a.isUndefined)(window.screen.orientation)&&!(0,a.isUndefined)(window.screen.orientation.lock)&&(0,a.isFunction)(screen.orientation.unlock)}function canPlayAudioType(e,t){return!r&&(e||(e=document.createElement("audio")),e.canPlayType(t).length>0)}function canPlayVideoType(e,t){return!r&&(e||(e=document.createElement("video")),e.canPlayType(t).length>0)}function canPlayHLSNatively(e){return!r&&(e||(e=document.createElement("video")),e.canPlayType("application/vnd.apple.mpegurl").length>0)}function canUsePictureInPicture(e){return!r&&!!document.pictureInPictureEnabled&&!e?.disablePictureInPicture}function canUseVideoPresentation(e){return!r&&(0,a.isFunction)(e?.webkitSupportsPresentationMode)&&(0,a.isFunction)(e?.webkitSetPresentationMode)}async function canChangeVolume(){let e=document.createElement("video");return e.volume=.5,await (0,a.waitTimeout)(0),.5===e.volume}function isHLSSupported(){if(r)return!1;let e=r?void 0:window?.ManagedMediaSource??window?.MediaSource??window?.WebKitMediaSource;if((0,a.isUndefined)(e))return!1;let t=e&&(0,a.isFunction)(e.isTypeSupported)&&e.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"'),i=r?void 0:window?.SourceBuffer??window?.WebKitSourceBuffer,s=(0,a.isUndefined)(i)||!(0,a.isUndefined)(i.prototype)&&(0,a.isFunction)(i.prototype.appendBuffer)&&(0,a.isFunction)(i.prototype.remove);return!!t&&!!s}let TimeRange=class TimeRange{#e;get length(){return this.#e.length}constructor(e,t){(0,a.isArray)(e)?this.#e=e:(0,a.isUndefined)(e)||(0,a.isUndefined)(t)?this.#e=[]:this.#e=[[e,t]]}start(e){return this.#e[e][0]??1/0}end(e){return this.#e[e][1]??1/0}};function getTimeRangesStart(e){if(!e.length)return null;let t=e.start(0);for(let i=1;i<e.length;i++){let s=e.start(i);s<t&&(t=s)}return t}function getTimeRangesEnd(e){if(!e.length)return null;let t=e.end(0);for(let i=1;i<e.length;i++){let s=e.end(i);s>t&&(t=s)}return t}let c=/\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx|flac)($|\?)/i,p=new Set(["audio/mpeg","audio/ogg","audio/3gp","audio/mp3","audio/webm","audio/flac","audio/m4a","audio/m4b","audio/mp4a"]),m=/\.(mp4|og[gv]|webm|mov|m4v)(#t=[,\d+]+)?($|\?)/i,g=new Set(["video/mp4","video/webm","video/3gp","video/ogg","video/avi","video/mpeg"]),f=/\.(m3u8)($|\?)/i,y=/\.(mpd)($|\?)/i,b=new Set(["application/vnd.apple.mpegurl","audio/mpegurl","audio/x-mpegurl","application/x-mpegurl","video/x-mpegurl","video/mpegurl","application/mpegurl"]),v=new Set(["application/dash+xml"]);function isAudioSrc({src:e,type:t}){return(0,a.isString)(e)?c.test(e)||p.has(t)||e.startsWith("blob:")&&"audio/object"===t:"audio/object"===t}function isVideoSrc(e){return(0,a.isString)(e.src)?m.test(e.src)||g.has(e.type)||e.src.startsWith("blob:")&&"video/object"===e.type||isHLSSrc(e)&&(r||canPlayHLSNatively()):"video/object"===e.type}function isHLSSrc({src:e,type:t}){return(0,a.isString)(e)&&f.test(e)||b.has(t)}function isDASHSrc({src:e,type:t}){return(0,a.isString)(e)&&y.test(e)||v.has(t)}function canGoogleCastSrc(e){return(0,a.isString)(e.src)&&(isAudioSrc(e)||isVideoSrc(e)||isHLSSrc(e))}function appendParamsToURL(e,t){let i=new URLSearchParams;for(let e of Object.keys(t))i.set(e,t[e]+"");return e+"?"+i.toString()}function preconnect(e,t="preconnect"){if(r)return!1;let i=document.querySelector(`link[href="${e}"]`);if(!(0,a.isNull)(i))return!0;let s=document.createElement("link");return s.rel=t,s.href=e,s.crossOrigin="true",document.head.append(s),!0}let w={};function loadScript(e){if(w[e])return w[e].promise;let t=(0,a.deferredPromise)(),i=document.querySelector(`script[src="${e}"]`);if(!(0,a.isNull)(i))return t.resolve(),t.promise;let s=document.createElement("script");return s.src=e,s.onload=()=>{t.resolve(),delete w[e]},s.onerror=()=>{t.reject(),delete w[e]},setTimeout(()=>document.head.append(s),0),t.promise}function getRequestCredentials(e){return"use-credentials"===e?"include":(0,a.isString)(e)?"same-origin":void 0}function getDownloadFile({title:e,src:t,download:i}){let s=(0,a.isBoolean)(i)||""===i?t.src:(0,a.isString)(i)?i:i?.url;return!function({url:e,src:t,download:i}){return(0,a.isString)(e)&&(i&&!0!==i||isAudioSrc(t)||isVideoSrc(t))}({url:s,src:t,download:i})?null:{url:s,name:!(0,a.isBoolean)(i)&&!(0,a.isString)(i)&&i?.filename||e.toLowerCase()||"media"}}let T=Symbol(0),k=Symbol(0),S=Symbol(0),C=Symbol(0),$=Symbol(0),x=Symbol(0),P=Symbol(0),A={crossOrigin:T,readyState:k,updateActiveCues:S,canLoad:C,onModeChange:$,native:x,nativeHLS:P};function isCueActive(e,t){return t>=e.startTime&&t<e.endTime}function watchActiveTextTrack(e,t,i){let s=null,n=(0,a.getScope)();function onModeChange(){let r=(0,a.isString)(t)?[t]:t,o=e.toArray().find(e=>r.includes(e.kind)&&"showing"===e.mode);if(o!==s){if(!o){i(null),s=null;return}2==o.readyState?i(o):(i(null),(0,a.scoped)(()=>{let e=(0,a.listenEvent)(o,"load",()=>{i(o),e()},{once:!0})},n)),s=o}}return onModeChange(),(0,a.listenEvent)(e,"mode-change",onModeChange)}let TextTrack=class TextTrack extends a.EventsTarget{static createId(e){return`vds-${e.type}-${e.kind}-${e.src??e.label??"?"}`}src;content;type;encoding;id="";label="";language="";kind;default=!1;#t=!1;#i=0;#s="disabled";#a={};#n=[];#r=[];#o=[];[A.readyState]=0;[A.crossOrigin];[A.onModeChange]=null;[A.native]=null;get metadata(){return this.#a}get regions(){return this.#n}get cues(){return this.#r}get activeCues(){return this.#o}get readyState(){return this[A.readyState]}get mode(){return this.#s}set mode(e){this.setMode(e)}constructor(e){for(let t of(super(),Object.keys(e)))this[t]=e[t];this.type||(this.type="vtt"),!r&&e.content?this.#l(e):e.src||(this[A.readyState]=2)}addCue(e,t){let i=0,s=this.#r.length;for(i=0;i<s&&!(e.endTime<=this.#r[i].startTime);i++);i===s?this.#r.push(e):this.#r.splice(i,0,e),e instanceof TextTrackCue||this[A.native]?.track.addCue(e),this.dispatchEvent(new a.DOMEvent("add-cue",{detail:e,trigger:t})),isCueActive(e,this.#i)&&this[A.updateActiveCues](this.#i,t)}removeCue(e,t){let i=this.#r.indexOf(e);if(i>=0){let s=this.#o.includes(e);this.#r.splice(i,1),this[A.native]?.track.removeCue(e),this.dispatchEvent(new a.DOMEvent("remove-cue",{detail:e,trigger:t})),s&&this[A.updateActiveCues](this.#i,t)}}setMode(e,t){this.#s!==e&&(this.#s=e,"disabled"===e?(this.#o=[],this.#h()):2===this.readyState?this[A.updateActiveCues](this.#i,t):this.#d(),this.dispatchEvent(new a.DOMEvent("mode-change",{detail:this,trigger:t})),this[A.onModeChange]?.())}[A.updateActiveCues](e,t){if(this.#i=e,"disabled"===this.mode||!this.#r.length)return;let i=[];for(let t=0,s=this.#r.length;t<s;t++){let s=this.#r[t];isCueActive(s,e)&&i.push(s)}let s=i.length!==this.#o.length;if(!s){for(let e=0;e<i.length;e++)if(!this.#o.includes(i[e])){s=!0;break}}this.#o=i,s&&this.#h(t)}[A.canLoad](){this.#t=!0,"disabled"!==this.#s&&this.#d()}#l(e){i.e(409).then(i.bind(i,409)).then(({parseText:t,VTTCue:i,VTTRegion:s})=>{(0,a.isString)(e.content)&&"json"!==e.type?t(e.content,{type:e.type}).then(({cues:e,regions:t})=>{this.#r=e,this.#n=t,this.#u()}):(this.#c(e.content,i,s),3!==this.readyState&&this.#u())})}async #d(){if(this.#t&&!(this[A.readyState]>0)){if(this[A.readyState]=1,this.dispatchEvent(new a.DOMEvent("load-start")),!this.src){this.#u();return}try{let{parseResponse:e,VTTCue:t,VTTRegion:s}=await i.e(409).then(i.bind(i,409)),a=this[A.crossOrigin]?.(),n=fetch(this.src,{headers:"json"===this.type?{"Content-Type":"application/json"}:void 0,credentials:getRequestCredentials(a)});if("json"===this.type)this.#c(await (await n).text(),t,s);else{let{errors:t,metadata:i,regions:s,cues:a}=await e(n,{type:this.type,encoding:this.encoding});if(t[0]?.code===0)throw t[0];this.#a=i,this.#n=s,this.#r=a}this.#u()}catch(e){this.#p(e)}}}#u(){if(this[A.readyState]=2,!this.src||"vtt"!==this.type){let e=this[A.native];if(e&&!e.managed)for(let t of this.#r)e.track.addCue(t)}let e=new a.DOMEvent("load");this[A.updateActiveCues](this.#i,e),this.dispatchEvent(e)}#p(e){this[A.readyState]=3,this.dispatchEvent(new a.DOMEvent("error",{detail:e}))}#c(e,t,i){try{let{regions:s,cues:n}=function(e,t,i){let s=(0,a.isString)(e)?JSON.parse(e):e,n=[],r=[];return s.regions&&i&&(n=s.regions.map(e=>Object.assign(new i,e))),(s.cues||(0,a.isArray)(s))&&(r=((0,a.isArray)(s)?s:s.cues).filter(e=>(0,a.isNumber)(e.startTime)&&(0,a.isNumber)(e.endTime)).map(e=>Object.assign(new t(0,0,""),e))),{regions:n,cues:r}}(e,t,i);this.#n=s,this.#r=n}catch(e){this.#p(e)}}#h(e){this.dispatchEvent(new a.DOMEvent("cue-change",{trigger:e}))}};let E=/captions|subtitles/;function isTrackCaptionKind(e){return E.test(e.kind)}let M=new a.State({artist:"",artwork:null,audioTrack:null,audioTracks:[],autoPlay:!1,autoPlayError:null,audioGain:null,buffered:new TimeRange,canLoad:!1,canLoadPoster:!1,canFullscreen:!1,canOrientScreen:canOrientScreen(),canPictureInPicture:!1,canPlay:!1,clipStartTime:0,clipEndTime:0,controls:!1,get iOSControls(){return h&&"video"===this.mediaType&&(!this.playsInline||!a.fscreen.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 TimeRange,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 TimeRange,seeking:!1,source:{src:"",type:""},sources:[],started:!1,textTracks:[],textTrack:null,get hasCaptions(){return this.textTracks.filter(isTrackCaptionKind).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"unknown"!==this.providedViewType?this.providedViewType:this.inferredViewType},get streamType(){return"unknown"!==this.providedStreamType?this.providedStreamType:this.inferredStreamType},get currentSrc(){return this.source},get bufferedStart(){let e=getTimeRangesStart(this.buffered)??0;return Math.max(0,e-this.clipStartTime)},get bufferedEnd(){let e=getTimeRangesEnd(this.buffered)??0;return Math.min(this.duration,Math.max(0,e-this.clipStartTime))},get seekableStart(){let e=getTimeRangesStart(this.seekable)??0;return Math.max(0,Math.abs(e-this.clipStartTime))},get seekableEnd(){let e=this.canPlay?getTimeRangesEnd(this.seekable)??1/0:0;return this.clipEndTime>0?Math.max(this.clipEndTime,Math.max(0,e-this.clipStartTime)):e},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"airplay"===this.remotePlaybackType&&"connected"===this.remotePlaybackState},get isGoogleCastConnected(){return"google-cast"===this.remotePlaybackType&&"connected"===this.remotePlaybackState},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}),q=new Set(["autoPlayError","autoPlaying","buffered","canPlay","error","paused","played","playing","seekable","seeking","waiting"]),I=new Set([...q,"ended","inferredPoster","inferredStreamType","inferredTitle","intrinsicDuration","liveSyncPosition","realCurrentTime","savedState","started","userBehindLiveEdge"]);function softResetMediaState(e,t=!1){let i=t?q:I;M.reset(e,e=>i.has(e)),(0,a.tick)()}let L=(0,a.createContext)();function useMediaContext(){return(0,a.useContext)(L)}let MediaRemoteControl=class MediaRemoteControl{#m=null;#g=null;#f=-1;#y;constructor(e){this.#y=e}setTarget(e){this.#m=e}getPlayer(e){return this.#g||(e??this.#m)?.dispatchEvent(new a.DOMEvent("find-media-player",{detail:e=>void(this.#g=e),bubbles:!0,composed:!0})),this.#g}setPlayer(e){this.#g=e}startLoading(e){this.#b("media-start-loading",e)}startLoadingPoster(e){this.#b("media-poster-start-loading",e)}requestAirPlay(e){this.#b("media-airplay-request",e)}requestGoogleCast(e){this.#b("media-google-cast-request",e)}play(e){this.#b("media-play-request",e)}pause(e){this.#b("media-pause-request",e)}mute(e){this.#b("media-mute-request",e)}unmute(e){this.#b("media-unmute-request",e)}enterFullscreen(e,t){this.#b("media-enter-fullscreen-request",t,e)}exitFullscreen(e,t){this.#b("media-exit-fullscreen-request",t,e)}lockScreenOrientation(e,t){this.#b("media-orientation-lock-request",t,e)}unlockScreenOrientation(e){this.#b("media-orientation-unlock-request",e)}enterPictureInPicture(e){this.#b("media-enter-pip-request",e)}exitPictureInPicture(e){this.#b("media-exit-pip-request",e)}seeking(e,t){this.#b("media-seeking-request",t,e)}seek(e,t){this.#b("media-seek-request",t,e)}seekToLiveEdge(e){this.#b("media-live-edge-request",e)}changeDuration(e,t){this.#b("media-duration-change-request",t,e)}changeClipStart(e,t){this.#b("media-clip-start-change-request",t,e)}changeClipEnd(e,t){this.#b("media-clip-end-change-request",t,e)}changeVolume(e,t){this.#b("media-volume-change-request",t,Math.max(0,Math.min(1,e)))}changeAudioTrack(e,t){this.#b("media-audio-track-change-request",t,e)}changeQuality(e,t){this.#b("media-quality-change-request",t,e)}requestAutoQuality(e){this.changeQuality(-1,e)}changeTextTrackMode(e,t,i){this.#b("media-text-track-change-request",i,{index:e,mode:t})}changePlaybackRate(e,t){this.#b("media-rate-change-request",t,e)}changeAudioGain(e,t){this.#b("media-audio-gain-change-request",t,e)}resumeControls(e){this.#b("media-resume-controls-request",e)}pauseControls(e){this.#b("media-pause-controls-request",e)}togglePaused(e){let t=this.getPlayer(e?.target);t&&(t.state.paused?this.play(e):this.pause(e))}toggleControls(e){let t=this.getPlayer(e?.target);t&&(t.controls.showing?t.controls.hide(0,e):t.controls.show(0,e))}toggleMuted(e){let t=this.getPlayer(e?.target);t&&(t.state.muted?this.unmute(e):this.mute(e))}toggleFullscreen(e,t){let i=this.getPlayer(t?.target);i&&(i.state.fullscreen?this.exitFullscreen(e,t):this.enterFullscreen(e,t))}togglePictureInPicture(e){let t=this.getPlayer(e?.target);t&&(t.state.pictureInPicture?this.exitPictureInPicture(e):this.enterPictureInPicture(e))}showCaptions(e){let t=this.getPlayer(e?.target);if(!t)return;let i=t.state.textTracks,s=this.#f;i[s]&&isTrackCaptionKind(i[s])||(s=-1),-1===s&&(s=i.findIndex(e=>isTrackCaptionKind(e)&&e.default)),-1===s&&(s=i.findIndex(e=>isTrackCaptionKind(e))),s>=0&&this.changeTextTrackMode(s,"showing",e),this.#f=-1}disableCaptions(e){let t=this.getPlayer(e?.target);if(!t)return;let i=t.state.textTracks,s=t.state.textTrack;if(s){let t=i.indexOf(s);this.changeTextTrackMode(t,"disabled",e),this.#f=t}}toggleCaptions(e){let t=this.getPlayer(e?.target);t&&(t.state.textTrack?this.disableCaptions():this.showCaptions())}userPrefersLoopChange(e,t){this.#b("media-user-loop-change-request",t,e)}#b(e,t,i){let s=new a.DOMEvent(e,{bubbles:!0,composed:!0,cancelable:!0,detail:i,trigger:t}),n=t?.target||null;n&&n instanceof a.Component&&(n=n.el);let r=!n||n===document||n===window||n===document.body||this.#g?.el&&n instanceof Node&&!this.#g.el.contains(n);n=r?this.#m??this.getPlayer()?.el:n??this.#m,this.#g&&("media-play-request"!==e||this.#g.state.canLoad)?this.#g.canPlayQueue.enqueue(e,()=>n?.dispatchEvent(s)):n?.dispatchEvent(s)}#v(e){}};let LocalMediaStorage=class LocalMediaStorage{playerId="vds-player";mediaId=null;#w={volume:null,muted:null,audioGain:null,time:null,lang:null,captions:null,rate:null,quality:null};async getVolume(){return this.#w.volume}async setVolume(e){this.#w.volume=e,this.save()}async getMuted(){return this.#w.muted}async setMuted(e){this.#w.muted=e,this.save()}async getTime(){return this.#w.time}async setTime(e,t){let i=e<0;this.#w.time=i?null:e,i||t?this.saveTime():this.saveTimeThrottled()}async getLang(){return this.#w.lang}async setLang(e){this.#w.lang=e,this.save()}async getCaptions(){return this.#w.captions}async setCaptions(e){this.#w.captions=e,this.save()}async getPlaybackRate(){return this.#w.rate}async setPlaybackRate(e){this.#w.rate=e,this.save()}async getAudioGain(){return this.#w.audioGain}async setAudioGain(e){this.#w.audioGain=e,this.save()}async getVideoQuality(){return this.#w.quality}async setVideoQuality(e){this.#w.quality=e,this.save()}onChange(e,t,i="vds-player"){let s=i?localStorage.getItem(i):null,a=t?localStorage.getItem(t):null;this.playerId=i,this.mediaId=t,this.#w={volume:null,muted:null,audioGain:null,lang:null,captions:null,rate:null,quality:null,...s?JSON.parse(s):{},time:a?+a:null}}save(){if(r||!this.playerId)return;let e=JSON.stringify({...this.#w,time:void 0});localStorage.setItem(this.playerId,e)}saveTimeThrottled=(0,a.functionThrottle)(this.saveTime.bind(this),1e3);saveTime(){if(r||!this.mediaId)return;let e=(this.#w.time??0).toString();localStorage.setItem(this.mediaId,e)}};function round(e,t=2){return Number(e.toFixed(t))}function getNumberOfDecimalPlaces(e){return String(e).split(".")[1]?.length??0}function clampNumber(e,t,i){return Math.max(e,Math.min(i,t))}function isEventInside(e,t){let i=t.composedPath()[0];return(0,a.isDOMNode)(i)&&e.contains(i)}let R=new Set;if(!r){let processJobs=function(){for(let e of R)try{e()}catch(e){}window.requestAnimationFrame(processJobs)};processJobs()}function setAttributeIfEmpty(e,t,i){e.hasAttribute(t)||e.setAttribute(t,i)}function setARIALabel(e,t){if(!(e.hasAttribute("aria-label")||e.hasAttribute("data-no-label"))){if(!(0,a.isFunction)(t)){(0,a.setAttribute)(e,"aria-label",t);return}r?updateAriaDescription():(0,a.effect)(updateAriaDescription)}function updateAriaDescription(){(0,a.setAttribute)(e,"aria-label",t())}}function isElementVisible(e){let t=getComputedStyle(e);return"none"!==t.display&&parseInt(t.opacity)>0}function observeVisibility(e,t){var i;return i=()=>t(!!e&&("checkVisibility"in e?e.checkVisibility({checkOpacity:!0,checkVisibilityCSS:!0}):isElementVisible(e))),R.add(i),()=>R.delete(i)}function isElementParent(e,t,i){for(;t;){if(t===e)return!0;if(i?.(t))break;t=t.parentElement}return!1}function onPress(e,t){return new a.EventsController(e).add("pointerup",e=>{0!==e.button||e.defaultPrevented||t(e)}).add("keydown",e=>{(0,a.isKeyboardClick)(e)&&t(e)})}function isTouchPinchEvent(e){return(0,a.isTouchEvent)(e)&&(e.touches.length>1||e.changedTouches.length>1)}function requestScopedAnimationFrame(e){if(r)return e();let t=(0,a.getScope)(),i=window.requestAnimationFrame(()=>{(0,a.scoped)(e,t),i=-1});return()=>void window.cancelAnimationFrame(i)}function autoPlacement(e,t,i,{offsetVarName:s,xOffset:r,yOffset:o,...l}){if(!e)return;let h=i.replace(" ","-").replace("-center","");if((0,a.setStyle)(e,"visibility",t?null:"hidden"),!t)return;let d=i.includes("top"),negateX=e=>i.includes("left")?`calc(-1 * ${e})`:e,negateY=e=>d?`calc(-1 * ${e})`:e;return(0,n.Me)(t,e,()=>{(0,n.oo)(t,e,{placement:h,middleware:[...l.middleware??[],(0,n.RR)({fallbackAxisSideDirection:"start",crossAxis:!1}),(0,n.uY)()],...l}).then(({x:t,y:a,middlewareData:n})=>{let l=!!n.flip?.index;d=i.includes(l?"bottom":"top"),e.setAttribute("data-placement",l?i.startsWith("top")?i.replace("top","bottom"):i.replace("bottom","top"):i),Object.assign(e.style,{top:`calc(${a+"px"} + ${negateY(o?o+"px":`var(--${s}-y-offset, 0px)`)})`,left:`calc(${t+"px"} + ${negateX(r?r+"px":`var(--${s}-x-offset, 0px)`)})`})})})}function isHTMLElement(e){return e instanceof HTMLElement}let NativeTextRenderer=class NativeTextRenderer{priority=0;#T=!0;#k=null;#S=null;#C=new Set;canRender(e,t){return!!t}attach(e){this.#k=e,e&&(e.textTracks.onchange=this.#$.bind(this))}addTrack(e){this.#C.add(e),this.#x(e)}removeTrack(e){e[A.native]?.remove?.(),e[A.native]=null,this.#C.delete(e)}changeTrack(e){let t=e?.[A.native];t&&"showing"!==t.track.mode&&(t.track.mode="showing"),this.#S=e}setDisplay(e){this.#T=e,this.#$()}detach(){for(let e of(this.#k&&(this.#k.textTracks.onchange=null),this.#C))this.removeTrack(e);this.#C.clear(),this.#k=null,this.#S=null}#x(e){if(!this.#k)return;let t=e[A.native]??=this.#P(e);isHTMLElement(t)&&(this.#k.append(t),t.track.mode=t.default?"showing":"disabled")}#P(e){let t=document.createElement("track"),i=e.default||"showing"===e.mode,s=e.src&&"vtt"===e.type;return t.id=e.id,t.src=s?e.src:"",t.label=e.label,t.kind=e.kind,t.default=i,e.language&&(t.srclang=e.language),i&&!s&&this.#A(e,t.track),t}#A(e,t){if(!(e.src&&"vtt"===e.type||t.cues?.length))for(let i of e.cues)t.addCue(i)}#$(e){for(let t of this.#C){let i=t[A.native];if(!i)continue;if(!this.#T){i.track.mode=i.managed?"hidden":"disabled";continue}let s="showing"===i.track.mode;s&&this.#A(t,i.track),t.setMode(s?"showing":"disabled",e)}}};let TextRenderers=class TextRenderers{#k=null;#E;#M=[];#q;#I=!1;#L=null;#R=null;constructor(e){this.#q=e;let t=e.textTracks;this.#E=t,(0,a.effect)(this.#D.bind(this)),(0,a.onDispose)(this.#V.bind(this)),new a.EventsController(t).add("add",this.#O.bind(this)).add("remove",this.#F.bind(this)).add("mode-change",this.#N.bind(this))}#D(){let{nativeControls:e}=this.#q.$state;this.#I=e(),this.#N()}add(e){this.#M.push(e),(0,a.untrack)(this.#N.bind(this))}remove(e){e.detach(),this.#M.splice(this.#M.indexOf(e),1),(0,a.untrack)(this.#N.bind(this))}attachVideo(e){requestAnimationFrame(()=>{if(this.#k=e,e)for(let t of(this.#L=new NativeTextRenderer,this.#L.attach(e),this.#E))this.#B(t);this.#N()})}#B(e){isTrackCaptionKind(e)&&this.#L?.addTrack(e)}#H(e){isTrackCaptionKind(e)&&this.#L?.removeTrack(e)}#O(e){this.#B(e.detail)}#F(e){this.#H(e.detail)}#N(){let e=this.#E.selected;if(this.#k&&(this.#I||e?.[A.nativeHLS])){this.#R?.changeTrack(null),this.#L?.setDisplay(!0),this.#L?.changeTrack(e);return}if(this.#L?.setDisplay(!1),this.#L?.changeTrack(null),!e){this.#R?.changeTrack(null);return}let t=this.#M.sort((e,t)=>e.priority-t.priority).find(t=>t.canRender(e,this.#k));this.#R!==t&&(this.#R?.detach(),t?.attach(this.#k),this.#R=t??null),t?.changeTrack(e)}#V(){this.#L?.detach(),this.#L=null,this.#R?.detach(),this.#R=null}};let D=Symbol(0),V=Symbol(0),O=Symbol(0),F=Symbol(0),N=Symbol(0),B=Symbol(0),H=Symbol(0),G=Symbol(0),K=Symbol(0),Q={add:D,remove:V,reset:O,select:F,readonly:N,setReadonly:B,onReset:H,onRemove:G,onUserSelect:K};let List=class List extends a.EventsTarget{items=[];[Q.readonly]=!1;get length(){return this.items.length}get readonly(){return this[Q.readonly]}indexOf(e){return this.items.indexOf(e)}getById(e){return""===e?null:this.items.find(t=>t.id===e)??null}toArray(){return[...this.items]}[Symbol.iterator](){return this.items.values()}[Q.add](e,t){let i=this.items.length;""+i in this||Object.defineProperty(this,i,{get(){return this.items[i]}}),this.items.includes(e)||(this.items.push(e),this.dispatchEvent(new a.DOMEvent("add",{detail:e,trigger:t})))}[Q.remove](e,t){let i=this.items.indexOf(e);i>=0&&(this[Q.onRemove]?.(e,t),this.items.splice(i,1),this.dispatchEvent(new a.DOMEvent("remove",{detail:e,trigger:t})))}[Q.reset](e){for(let t of[...this.items])this[Q.remove](t,e);this.items=[],this[Q.setReadonly](!1,e),this[Q.onReset]?.()}[Q.setReadonly](e,t){this[Q.readonly]!==e&&(this[Q.readonly]=e,this.dispatchEvent(new a.DOMEvent("readonly-change",{detail:e,trigger:t})))}};let TextTrackList=class TextTrackList extends List{#t=!1;#G={};#K=null;#Q=null;[A.crossOrigin];constructor(){super()}get selected(){let e=this.items.find(e=>"showing"===e.mode&&isTrackCaptionKind(e));return e??null}get selectedIndex(){let e=this.selected;return e?this.indexOf(e):-1}get preferredLang(){return this.#Q}set preferredLang(e){this.#Q=e,this.#U(e)}add(e,t){let i=e instanceof TextTrack,s=i?e:new TextTrack(e),a="captions"===e.kind||"subtitles"===e.kind?"captions":e.kind;return this.#G[a]&&e.default&&delete e.default,s.addEventListener("mode-change",this.#W),this[Q.add](s,t),s[A.crossOrigin]=this[A.crossOrigin],this.#t&&s[A.canLoad](),e.default&&(this.#G[a]=s),this.#j(),this}remove(e,t){if(this.#_=e,this.items.includes(e))return e===this.#G[e.kind]&&delete this.#G[e.kind],e.mode="disabled",e[A.onModeChange]=null,e.removeEventListener("mode-change",this.#W),this[Q.remove](e,t),this.#_=null,this}clear(e){for(let t of[...this.items])this.remove(t,e);return this}getByKind(e){let t=Array.isArray(e)?e:[e];return this.items.filter(e=>t.includes(e.kind))}[A.canLoad](){if(!this.#t){for(let e of this.items)e[A.canLoad]();this.#t=!0,this.#j()}}#j=(0,a.functionDebounce)(async()=>{if(!this.#t)return;!this.#Q&&this.#K&&(this.#Q=await this.#K.getLang());let e=await this.#K?.getCaptions();for(let t of[["captions","subtitles"],"chapters","descriptions","metadata"]){let i=this.getByKind(t);if(i.find(e=>"showing"===e.mode))continue;let s=this.#Q?i.find(e=>e.language===this.#Q):null,n=(0,a.isArray)(t)?this.#G[t.find(e=>this.#G[e])||""]:this.#G[t],r=s??n,o=r&&isTrackCaptionKind(r);r&&(!o||!1!==e)&&(r.mode="showing",o&&this.#z(r))}},300);#_=null;#W=this.#X.bind(this);#X(e){let t=e.detail;if(this.#K&&isTrackCaptionKind(t)&&t!==this.#_&&this.#z(t),"showing"===t.mode){let e=isTrackCaptionKind(t)?["captions","subtitles"]:[t.kind];for(let i of this.items)"showing"===i.mode&&i!=t&&e.includes(i.kind)&&(i.mode="disabled")}this.dispatchEvent(new a.DOMEvent("mode-change",{detail:e.detail,trigger:e}))}#z(e){"disabled"!==e.mode&&this.#U(e.language),this.#K?.setCaptions?.("showing"===e.mode)}#U(e){this.#K?.setLang?.(this.#Q=e)}setStorage(e){this.#K=e}};let U=Symbol(0);let SelectList=class SelectList extends List{get selected(){return this.items.find(e=>e.selected)??null}get selectedIndex(){return this.items.findIndex(e=>e.selected)}[Q.onRemove](e,t){this[Q.select](e,!1,t)}[Q.add](e,t){e[U]=!1,Object.defineProperty(e,"selected",{get(){return this[U]},set:t=>{this.readonly||(this[Q.onUserSelect]?.(),this[Q.select](e,t))}}),super[Q.add](e,t)}[Q.select](e,t,i){if(t===e?.[U])return;let s=this.selected;e&&(e[U]=t);let n=t?s!==e:s===e;n&&(s&&(s[U]=!1),this.dispatchEvent(new a.DOMEvent("change",{detail:{prev:s,current:this.selected},trigger:i})))}};let AudioTrackList=class AudioTrackList extends SelectList{};let W=Symbol(0),j=Symbol(0),_={setAuto:W,enableAuto:j};let VideoQualityList=class VideoQualityList extends SelectList{#Y=!1;switch="current";get auto(){return this.#Y||this.readonly}[_.enableAuto];[Q.onUserSelect](){this[_.setAuto](!1)}[Q.onReset](e){this[_.enableAuto]=void 0,this[_.setAuto](!1,e)}autoSelect(e){this.readonly||this.#Y||!this[_.enableAuto]||(this[_.enableAuto]?.(e),this[_.setAuto](!0,e))}getBySrc(e){return this.items.find(t=>t.src===e)}[_.setAuto](e,t){this.#Y!==e&&(this.#Y=e,this.dispatchEvent(new a.DOMEvent("auto-change",{detail:e,trigger:t})))}};function sortVideoQualities(e,t){return[...e].sort(t?compareVideoQualityDesc:compareVideoQualityAsc)}function compareVideoQualityAsc(e,t){return e.height===t.height?(e.bitrate??0)-(t.bitrate??0):e.height-t.height}function compareVideoQualityDesc(e,t){return t.height===e.height?(t.bitrate??0)-(e.bitrate??0):t.height-e.height}let MediaPlayerController=class MediaPlayerController extends a.ViewController{};let z=new Set(["Shift","Alt","Meta","Ctrl"]),X='input, textarea, select, [contenteditable], [role^="menuitem"], [role="timer"]';let MediaKeyboardController=class MediaKeyboardController extends MediaPlayerController{#q;constructor(e){super(),this.#q=e}onConnect(){(0,a.effect)(this.#J.bind(this))}#J(){let{keyDisabled:e,keyTarget:t}=this.$props;if(e())return;let i="player"===t()?this.el:document,s=(0,a.signal)(!1);i===this.el?new a.EventsController(this.el).add("focusin",()=>s.set(!0)).add("focusout",e=>{this.el.contains(e.target)||s.set(!1)}):((0,a.peek)(s)||s.set(document.querySelector("[data-media-player]")===this.el),(0,a.listenEvent)(document,"focusin",e=>{let t=e.composedPath().find(e=>e instanceof Element&&"media-player"===e.localName);void 0!==t&&s.set(this.el===t)})),(0,a.effect)(()=>{s()&&new a.EventsController(i).add("keyup",this.#Z.bind(this)).add("keydown",this.#ee.bind(this)).add("keydown",this.#et.bind(this),{capture:!0})})}#Z(e){let t=document.activeElement;if(!e.key||!this.$state.canSeek()||t?.matches(X))return;let{method:i,value:s}=this.#ei(e);if(!(0,a.isString)(s)&&!(0,a.isArray)(s)){s?.onKeyUp?.({event:e,player:this.#q.player,remote:this.#q.remote}),s?.callback?.(e,this.#q.remote);return}if(i?.startsWith("seek")&&(e.preventDefault(),e.stopPropagation(),this.#es?(this.#ea(e,"seekForward"===i),this.#es=null):(this.#q.remote.seek(this.#en,e),this.#en=void 0)),i?.startsWith("volume")){let t=this.el.querySelector("[data-media-volume-slider]");t?.dispatchEvent(new KeyboardEvent("keyup",{key:"volumeUp"===i?"Up":"Down",shiftKey:e.shiftKey,trigger:e}))}}#ee(e){if(!e.key||z.has(e.key))return;let t=document.activeElement;if(t?.matches(X)||(0,a.isKeyboardClick)(e)&&t?.matches('button, [role="button"]'))return;let{method:i,value:s}=this.#ei(e),n=!e.metaKey&&/^[0-9]$/.test(e.key);if(!(0,a.isString)(s)&&!(0,a.isArray)(s)&&!n){s?.onKeyDown?.({event:e,player:this.#q.player,remote:this.#q.remote}),s?.callback?.(e,this.#q.remote);return}if(!i&&n){e.preventDefault(),e.stopPropagation(),this.#q.remote.seek(this.$state.duration()/10*Number(e.key),e);return}if(i){switch(e.preventDefault(),e.stopPropagation(),i){case"seekForward":case"seekBackward":this.#er(e,i,"seekForward"===i);break;case"volumeUp":case"volumeDown":let t=this.el.querySelector("[data-media-volume-slider]");if(t)t.dispatchEvent(new KeyboardEvent("keydown",{key:"volumeUp"===i?"Up":"Down",shiftKey:e.shiftKey,trigger:e}));else{let t=e.shiftKey?.1:.05;this.#q.remote.changeVolume(this.$state.volume()+("volumeUp"===i?+t:-t),e)}break;case"toggleFullscreen":this.#q.remote.toggleFullscreen("prefer-media",e);break;case"speedUp":case"slowDown":let s=this.$state.playbackRate();this.#q.remote.changePlaybackRate(Math.max(.25,Math.min(2,s+("speedUp"===i?.25:-.25))),e);break;default:this.#q.remote[i]?.(e)}this.$state.lastKeyboardAction.set({action:i,event:e})}}#et(e){var t,i;i=t=e.target,(!r&&i instanceof HTMLAudioElement||!r&&t instanceof HTMLVideoElement)&&this.#ei(e).method&&e.preventDefault()}#ei(e){let t={...this.$props.keyShortcuts(),...this.#q.ariaKeys},i=Object.keys(t).find(i=>{let s=t[i],n=(0,a.isArray)(s)?s.join(" "):(0,a.isString)(s)?s:s?.keys,r=(a.isArray(n)?n:n?.split(" "))?.map(e=>e.replace(/Shift\+(\d)/g,(e,t)=>Y[t-1]).replace(/Control/g,"Ctrl").split("+"));return r?.some(t=>{let i=new Set(t.filter(e=>z.has(e)));for(let t of z){let s=t.toLowerCase()+"Key";if(!i.has(t)&&e[s])return!1}return t.every(t=>z.has(t)?e[t.toLowerCase()+"Key"]:e.key===t.replace("Space"," "))})});return{method:i,value:i?t[i]:null}}#en;#eo(e,t){let i=e.shiftKey?10:5;return this.#en=Math.max(0,Math.min((this.#en??this.$state.currentTime())+("seekForward"===t?+i:-i),this.$state.duration()))}#es=null;#ea(e,t){this.#es?.dispatchEvent(new KeyboardEvent(e.type,{key:t?"Right":"Left",shiftKey:e.shiftKey,trigger:e}))}#er(e,t,i){this.$state.canSeek()&&(this.#es||(this.#es=this.el.querySelector("[data-media-time-slider]")),this.#es?this.#ea(e,i):this.#q.remote.seeking(this.#eo(e,t),e))}};let Y=["!","@","#","$","%","^","&","*","(",")"];let ARIAKeyShortcuts=class ARIAKeyShortcuts extends a.ViewController{#el;constructor(e){super(),this.#el=e}onAttach(e){let{$props:t,ariaKeys:i}=useMediaContext(),s=e.getAttribute("aria-keyshortcuts");if(s){i[this.#el]=s,r||(0,a.onDispose)(()=>{delete i[this.#el]});return}let n=t.keyShortcuts()[this.#el];if(n){let t=(0,a.isArray)(n)?n.join(" "):(0,a.isString)(n)?n:n?.keys;e.setAttribute("aria-keyshortcuts",(0,a.isArray)(t)?t.join(" "):t)}}};let MediaControls=class MediaControls extends MediaPlayerController{#eh=-2;#ed=!1;#eu=(0,a.signal)(!1);#ec=(0,a.signal)(!1);#ep=null;#em=(0,a.signal)(!0);defaultDelay=2e3;get canIdle(){return this.#em()}set canIdle(e){this.#em.set(e)}get hideOnMouseLeave(){let{hideControlsOnMouseLeave:e}=this.$props;return this.#eu()||e()}set hideOnMouseLeave(e){this.#eu.set(e)}get showing(){return this.$state.controlsVisible()}show(e=0,t){this.#eg(),this.#ed||this.#ef(!0,e,t)}hide(e=this.defaultDelay,t){this.#eg(),this.#ed||this.#ef(!1,e,t)}pause(e){this.#ed=!0,this.#eg(),this.#ef(!0,0,e)}resume(e){this.#ed=!1,this.$state.paused()||this.#ef(!1,this.defaultDelay,e)}onConnect(){(0,a.effect)(this.#ey.bind(this))}#ey(){let{viewType:e}=this.$state;if(!this.el||!this.#em())return;if("audio"===e()){this.show();return}(0,a.effect)(this.#eb.bind(this)),(0,a.effect)(this.#ev.bind(this));let t=this.#ew.bind(this),i=this.#eT.bind(this),s=this.#ek.bind(this);new a.EventsController(this.el).add("can-play",e=>this.show(0,e)).add("play",t).add("pause",i).add("end",s).add("auto-play-fail",i)}#eb(){if(!this.el)return;let{started:e,pointer:t,paused:i}=this.$state;if(!e()||"fine"!==t())return;let s=new a.EventsController(this.el),n=this.hideOnMouseLeave;n&&this.#ec()||(0,a.effect)(()=>{i()||s.add("pointermove",this.#eS.bind(this))}),n&&s.add("mouseenter",this.#eC.bind(this)).add("mouseleave",this.#e$.bind(this))}#ev(){let{paused:e,started:t,autoPlayError:i}=this.$state;if(e()||i()&&!t())return;let s=this.#eS.bind(this);(0,a.effect)(()=>{if(!this.el)return;let e=this.$state.pointer(),t=new a.EventsController(this.el);for(let i of["coarse"===e?"touchend":"pointerup","keydown"])t.add(i,s,{passive:!1})})}#ew(e){e.triggers.hasType("ended")||(this.show(0,e),this.hide(void 0,e))}#eT(e){this.show(0,e)}#ek(e){let{loop:t}=this.$state;t()&&this.hide(0,e)}#eC(e){this.#ec.set(!1),this.show(0,e),this.hide(void 0,e)}#e$(e){this.#ec.set(!0),this.hide(0,e)}#eg(){window.clearTimeout(this.#eh),this.#eh=-1}#eS(e){e.MEDIA_GESTURE||this.#ed||isTouchPinchEvent(e)||((0,a.isKeyboardEvent)(e)&&("Escape"===e.key?(this.el?.focus(),this.#ep=null):this.#ep&&(e.preventDefault(),requestAnimationFrame(()=>{this.#ep?.focus(),this.#ep=null}))),this.show(0,e),this.hide(this.defaultDelay,e))}#ef(e,t,i){if(0===t){this.#$(e,i);return}this.#eh=window.setTimeout(()=>{this.scope&&this.#$(e&&!this.#ed,i)},t)}#$(e,t){this.$state.controlsVisible()!==e&&(this.$state.controlsVisible.set(e),!e&&document.activeElement&&this.el?.contains(document.activeElement)&&(this.#ep=document.activeElement,requestAnimationFrame(()=>{this.el?.focus({preventScroll:!0})})),this.dispatch("controls-change",{detail:e,trigger:t}))}};let J=a.fscreen.fullscreenEnabled;let FullscreenController=class FullscreenController extends a.ViewController{#ex=!1;#eP=!1;get active(){return this.#eP}get supported(){return J}onConnect(){new a.EventsController(a.fscreen).add("fullscreenchange",this.#$.bind(this)).add("fullscreenerror",this.#eA.bind(this)),(0,a.onDispose)(this.#eE.bind(this))}async #eE(){J&&await this.exit()}#$(e){let t=isFullscreen(this.el);t!==this.#eP&&(t||(this.#ex=!1),this.#eP=t,this.dispatch("fullscreen-change",{detail:t,trigger:e}))}#eA(e){this.#ex&&(this.dispatch("fullscreen-error",{detail:null,trigger:e}),this.#ex=!1)}async enter(){try{if(this.#ex=!0,!this.el||isFullscreen(this.el))return;return assertFullscreenAPI(),a.fscreen.requestFullscreen(this.el)}catch(e){throw this.#ex=!1,e}}async exit(){if(this.el&&isFullscreen(this.el))return assertFullscreenAPI(),a.fscreen.exitFullscreen()}};function isFullscreen(e){if(a.fscreen.fullscreenElement===e)return!0;try{return e.matches(a.fscreen.fullscreenPseudoClass)}catch(e){return!1}}function assertFullscreenAPI(){if(!J)throw Error("[vidstack] no fullscreen API")}let ScreenOrientationController=class ScreenOrientationController extends a.ViewController{#eM=(0,a.signal)(this.#eq());#eI=(0,a.signal)(!1);#eL;get type(){return this.#eM()}get locked(){return this.#eI()}get portrait(){return this.#eM().startsWith("portrait")}get landscape(){return this.#eM().startsWith("landscape")}static supported=canOrientScreen();get supported(){return ScreenOrientationController.supported}onConnect(){if(this.supported)(0,a.listenEvent)(screen.orientation,"change",this.#eR.bind(this));else{let e=window.matchMedia("(orientation: landscape)");e.onchange=this.#eR.bind(this),(0,a.onDispose)(()=>e.onchange=null)}(0,a.onDispose)(this.#eE.bind(this))}async #eE(){this.supported&&this.#eI()&&await this.unlock()}#eR(e){this.#eM.set(this.#eq()),this.dispatch("orientation-change",{detail:{orientation:(0,a.peek)(this.#eM),lock:this.#eL},trigger:e})}async lock(e){(0,a.peek)(this.#eI)||this.#eL===e||(this.#eD(),await screen.orientation.lock(e),this.#eI.set(!0),this.#eL=e)}async unlock(){(0,a.peek)(this.#eI)&&(this.#eD(),this.#eL=void 0,await screen.orientation.unlock(),this.#eI.set(!1))}#eD(){if(!this.supported)throw Error("[vidstack] no orientation API")}#eq(){return r?"portrait-primary":this.supported?window.screen.orientation.type:window.innerWidth>=window.innerHeight?"landscape-primary":"portrait-primary"}};let AudioProviderLoader=class AudioProviderLoader{name="audio";target;canPlay(e){return!!isAudioSrc(e)&&(r||!(0,a.isString)(e.src)||"?"===e.type||canPlayAudioType(this.target,e.type))}mediaType(){return"audio"}async load(e){if(r)throw Error("[vidstack] can not load audio provider server-side");return new(await i.e(3419).then(i.bind(i,33419))).AudioProvider(this.target,e)}};let VideoProviderLoader=class VideoProviderLoader{name="video";target;canPlay(e){return!!isVideoSrc(e)&&(r||!(0,a.isString)(e.src)||"?"===e.type||canPlayVideoType(this.target,e.type))}mediaType(){return"video"}async load(e){if(r)throw Error("[vidstack] can not load video provider server-side");return new(await Promise.resolve().then(function(){return es})).VideoProvider(this.target,e)}};let HLSProviderLoader=class HLSProviderLoader extends VideoProviderLoader{static supported=isHLSSupported();name="hls";canPlay(e){return HLSProviderLoader.supported&&isHLSSrc(e)}async load(e){if(r)throw Error("[vidstack] can not load hls provider server-side");return new(await i.e(9317).then(i.bind(i,9317))).HLSProvider(this.target,e)}};let Z=null,ee=[],et=[];function getOrCreateAudioCtx(){return Z??=new AudioContext}function freeAudioCtxWhenAllResourcesFreed(){Z&&0===ee.length&&0===et.length&&Z.close().then(()=>{Z=null})}let AudioGain=class AudioGain{#q;#$;#eV=null;#eO=null;get currentGain(){return this.#eV?.gain?.value??null}get supported(){return!0}constructor(e,t){this.#q=e,this.#$=t}setGain(e){let t=this.currentGain;if(e!==this.currentGain){if(1===e&&1!==t){this.removeGain();return}!this.#eV&&(this.#eV=function(){let e=getOrCreateAudioCtx(),t=e.createGain();return t.connect(e.destination),ee.push(t),t}(),this.#eO&&this.#eO.connect(this.#eV)),this.#eO||(this.#eO=function(e,t){let i=getOrCreateAudioCtx(),s=i.createMediaElementSource(e);return t&&s.connect(t),et.push(s),s}(this.#q,this.#eV)),this.#eV.gain.value=e,this.#$(e)}}removeGain(){this.#eV&&(this.#eO&&this.#eO.connect(getOrCreateAudioCtx().destination),this.#eF(),this.#$(null))}destroy(){this.#eN(),this.#eF()}#eN(){if(this.#eO)try{!function(e){let t=et.indexOf(e);-1!==t&&(et.splice(t,1),e.disconnect(),freeAudioCtxWhenAllResourcesFreed())}(this.#eO)}catch(e){}finally{this.#eO=null}}#eF(){if(this.#eV)try{!function(e){let t=ee.indexOf(e);-1!==t&&(ee.splice(t,1),e.disconnect(),freeAudioCtxWhenAllResourcesFreed())}(this.#eV)}catch(e){}finally{this.#eV=null}}};let ei=["focus","blur","visibilitychange","pageshow","pagehide"];let PageVisibility=class PageVisibility{#eB=(0,a.signal)(determinePageState());#eH=(0,a.signal)(r?"visible":document.visibilityState);#eG;connect(){let e=new a.EventsController(window),t=this.#eK.bind(this);for(let i of ei)e.add(i,t);u&&e.add("beforeunload",e=>{this.#eG=setTimeout(()=>{e.defaultPrevented||e.returnValue.length>0||(this.#eB.set("hidden"),this.#eH.set("hidden"))},0)})}get pageState(){return this.#eB()}get visibility(){return this.#eH()}#eK(e){u&&window.clearTimeout(this.#eG),("blur"!==e.type||"active"===this.#eB())&&(this.#eB.set(determinePageState(e)),this.#eH.set("hidden"==document.visibilityState?"hidden":"visible"))}};function determinePageState(e){return r||e?.type==="blur"||"hidden"===document.visibilityState?"hidden":document.hasFocus()?"active":"passive"}let RAFLoop=class RAFLoop{#eQ;#eU;constructor(e){this.#eU=e}start(){(0,a.isUndefined)(this.#eQ)&&this.#eW()}stop(){(0,a.isNumber)(this.#eQ)&&window.cancelAnimationFrame(this.#eQ),this.#eQ=void 0}#eW(){this.#eQ=window.requestAnimationFrame(()=>{(0,a.isUndefined)(this.#eQ)||(this.#eU(),this.#eW())})}};let HTMLMediaEvents=class HTMLMediaEvents{#ej;#e_;#ez=!1;#eX=!1;#eY=!1;#eJ=new RAFLoop(this.#eZ.bind(this));#e0=new PageVisibility;#e1;get #q(){return this.#ej.media}constructor(e,t){this.#ej=e,this.#e_=t,this.#e1=new a.EventsController(e.media),this.#e2(),this.#e0.connect(),(0,a.effect)(this.#e3.bind(this)),(0,a.onDispose)(this.#e5.bind(this))}#e5(){this.#eX=!1,this.#eY=!1,this.#eJ.stop(),this.#e1.abort(),this.#e4?.clear()}#e9=0;#e7=-1;#eZ(){let e=this.#q.currentTime,t=u&&e-this.#e7<.35;t||this.#e9===e||(this.#e6(e),this.#e9=e)}#e2(){this.#e8("loadstart",this.#te),this.#e8("abort",this.#tt),this.#e8("emptied",this.#ti),this.#e8("error",this.#eA),this.#e8("volumechange",this.#ts)}#ta(){this.#eX||(this.#e8("loadeddata",this.#tn),this.#e8("loadedmetadata",this.#tr),this.#e8("canplay",this.#to),this.#e8("canplaythrough",this.#tl),this.#e8("durationchange",this.#th),this.#e8("play",this.#ew),this.#e8("progress",this.#td),this.#e8("stalled",this.#tu),this.#e8("suspend",this.#tc),this.#e8("ratechange",this.#tp),this.#eX=!0)}#tm(){this.#eY||(this.#e8("pause",this.#eT),this.#e8("playing",this.#tg),this.#e8("seeked",this.#tf),this.#e8("seeking",this.#ty),this.#e8("ended",this.#tb),this.#e8("waiting",this.#tv),this.#eY=!0)}#e4=void 0;#tw=void 0;#e8(e,t){this.#e1.add(e,t.bind(this))}#tT(e){}#e6(e,t){let i=Math.min(e,this.#e_.$state.seekableEnd());this.#e_.notify("time-change",i,t)}#te(e){if(3===this.#q.networkState){this.#tt(e);return}this.#ta(),this.#e_.notify("load-start",void 0,e)}#tt(e){this.#e_.notify("abort",void 0,e)}#ti(){this.#e_.notify("emptied",void 0,event)}#tn(e){this.#e_.notify("loaded-data",void 0,e)}#tr(e){this.#e9=0,this.#e7=-1,this.#tm(),this.#e_.notify("loaded-metadata",void 0,e),(l||u&&isHLSSrc(this.#e_.$state.source()))&&this.#e_.delegate.ready(this.#tk(),e)}#tk(){return{provider:(0,a.peek)(this.#e_.$provider),duration:this.#q.duration,buffered:this.#q.buffered,seekable:this.#q.seekable}}#ew(e){this.#e_.$state.canPlay&&this.#e_.notify("play",void 0,e)}#eT(e){(1!==this.#q.readyState||this.#ez)&&(this.#ez=!1,this.#eJ.stop(),this.#e_.notify("pause",void 0,e))}#to(e){this.#e_.delegate.ready(this.#tk(),e)}#tl(e){this.#e_.$state.started()||this.#e_.notify("can-play-through",this.#tk(),e)}#tg(e){this.#q.paused||(this.#ez=!1,this.#e_.notify("playing",void 0,e),this.#eJ.start())}#tu(e){this.#e_.notify("stalled",void 0,e),this.#q.readyState<3&&(this.#ez=!0,this.#e_.notify("waiting",void 0,e))}#tv(e){this.#q.readyState<3&&(this.#ez=!0,this.#e_.notify("waiting",void 0,e))}#tb(e){if(this.#eJ.stop(),this.#e6(this.#q.duration,e),this.#e_.notify("end",void 0,e),this.#e_.$state.loop()){let e=(0,a.isNil)(this.#q.controls);e&&(this.#q.controls=!1)}}#e3(){let e=this.#e_.$state.paused(),t="hidden"===this.#e0.visibility;(e||t)&&(0,a.listenEvent)(this.#q,"timeupdate",this.#tS.bind(this))}#tS(e){this.#e6(this.#q.currentTime,e)}#th(e){this.#e_.$state.ended()&&this.#e6(this.#q.duration,e),this.#e_.notify("duration-change",this.#q.duration,e)}#ts(e){let t={volume:this.#q.volume,muted:this.#q.muted};this.#e_.notify("volume-change",t,e)}#tf(e){this.#e7=this.#q.currentTime,this.#e6(this.#q.currentTime,e),this.#e_.notify("seeked",this.#q.currentTime,e),Math.trunc(this.#q.currentTime)===Math.trunc(this.#q.duration)&&getNumberOfDecimalPlaces(this.#q.duration)>getNumberOfDecimalPlaces(this.#q.currentTime)&&(this.#e6(this.#q.duration,e),this.#q.ended||this.#e_.player.dispatch(new a.DOMEvent("media-play-request",{trigger:e})))}#ty(e){this.#e_.notify("seeking",this.#q.currentTime,e)}#td(e){let t={buffered:this.#q.buffered,seekable:this.#q.seekable};this.#e_.notify("progress",t,e)}#tc(e){this.#e_.notify("suspend",void 0,e)}#tp(e){this.#e_.notify("rate-change",this.#q.playbackRate,e)}#eA(e){let t=this.#q.error;if(!t)return;let i={message:t.message,code:t.code,mediaError:t};this.#e_.notify("error",i,e)}};let NativeAudioTracks=class NativeAudioTracks{#ej;#e_;get #tC(){return this.#ej.media.audioTracks}constructor(e,t){this.#ej=e,this.#e_=t,this.#tC.onaddtrack=this.#t$.bind(this),this.#tC.onremovetrack=this.#tx.bind(this),this.#tC.onchange=this.#tP.bind(this),(0,a.listenEvent)(this.#e_.audioTracks,"change",this.#tA.bind(this))}#t$(e){let t=e.track;if(""===t.label)return;let i=t.id.toString()||`native-audio-${this.#e_.audioTracks.length}`,s={id:i,label:t.label,language:t.language,kind:t.kind,selected:!1};this.#e_.audioTracks[Q.add](s,e),t.enabled&&(s.selected=!0)}#tx(e){let t=this.#e_.audioTracks.getById(e.track.id);t&&this.#e_.audioTracks[Q.remove](t,e)}#tP(e){let t=this.#tE();if(!t)return;let i=this.#e_.audioTracks.getById(t.id);i&&this.#e_.audioTracks[Q.select](i,!0,e)}#tE(){return Array.from(this.#tC).find(e=>e.enabled)}#tA(e){let{current:t}=e.detail;if(!t)return;let i=this.#tC.getTrackById(t.id);if(i){let e=this.#tE();e&&(e.enabled=!1),i.enabled=!0}}};let HTMLMediaProvider=class HTMLMediaProvider{constructor(e,t){this.media=e,this.ctx=t,this.audioGain=new AudioGain(e,e=>{this.ctx.notify("audio-gain-change",e)})}scope=(0,a.createScope)();currentSrc=null;audioGain;setup(){new HTMLMediaEvents(this,this.ctx),"audioTracks"in this.media&&new NativeAudioTracks(this,this.ctx),(0,a.onDispose)(()=>{for(let e of(this.audioGain.destroy(),this.media.srcObject=null,this.media.removeAttribute("src"),this.media.querySelectorAll("source")))e.remove();this.media.load()})}get type(){return""}setPlaybackRate(e){this.media.playbackRate=e}async play(){return this.media.play()}async pause(){return this.media.pause()}setMuted(e){this.media.muted=e}setVolume(e){this.media.volume=e}setCurrentTime(e){this.media.currentTime=e}setPlaysInline(e){(0,a.setAttribute)(this.media,"playsinline",e)}async loadSource({src:e,type:t},i){(this.media.preload=i||"",!r&&void 0!==window.MediaStream&&e instanceof window.MediaStream)?(this.removeSource(),this.media.srcObject=e):(this.media.srcObject=null,(0,a.isString)(e)?"?"!==t?this.appendSource({src:e,type:t}):(this.removeSource(),this.media.src=this.#tM(e)):(this.removeSource(),this.media.src=window.URL.createObjectURL(e))),this.media.load(),this.currentSrc={src:e,type:t}}appendSource(e,t){let i=this.media.querySelector("source[data-vds]"),s=i??document.createElement("source");(0,a.setAttribute)(s,"src",this.#tM(e.src)),(0,a.setAttribute)(s,"type","?"!==e.type?e.type:t),(0,a.setAttribute)(s,"data-vds",""),i||this.media.append(s)}removeSource(){this.media.querySelector("source[data-vds]")?.remove()}#tM(e){let{clipStartTime:t,clipEndTime:i}=this.ctx.$state,s=t(),a=i();return s>0&&a>0?`${e}#t=${s},${a}`:s>0?`${e}#t=${s}`:a>0?`${e}#t=0,${a}`:e}};let HTMLRemotePlaybackAdapter=class HTMLRemotePlaybackAdapter{#q;#e_;#eB;#tq=(0,a.signal)(!1);get supported(){return this.#tq()}constructor(e,t){this.#q=e,this.#e_=t,this.#tI()}#tI(){!r&&this.#q?.remote&&this.canPrompt&&(this.#q.remote.watchAvailability(e=>{this.#tq.set(e)}).catch(()=>{this.#tq.set(!1)}),(0,a.effect)(this.#tL.bind(this)))}#tL(){if(!this.#tq())return;let e=this.#tR.bind(this);e(),(0,a.listenEvent)(this.#q,"playing",e);let t=new a.EventsController(this.#q.remote);for(let i of["connecting","connect","disconnect"])t.add(i,e)}async prompt(){if(!this.supported)throw Error("Not supported on this platform.");return"airplay"===this.type&&this.#q.webkitShowPlaybackTargetPicker?this.#q.webkitShowPlaybackTargetPicker():this.#q.remote.prompt()}#tR(e){let t=this.#q.remote.state;if(t===this.#eB)return;let i={type:this.type,state:t};this.#e_.notify("remote-playback-change",i,e),this.#eB=t}};let HTMLAirPlayAdapter=class HTMLAirPlayAdapter extends HTMLRemotePlaybackAdapter{type="airplay";get canPrompt(){return"WebKitPlaybackTargetAvailabilityEvent"in window}};let NativeHLSTextTracks=class NativeHLSTextTracks{#k;#e_;constructor(e,t){this.#k=e,this.#e_=t,e.textTracks.onaddtrack=this.#O.bind(this),(0,a.onDispose)(this.#e5.bind(this))}#O(e){let t=e.track;if(!t||Array.from(this.#k.children).find(e=>e.track===t))return;let i=new TextTrack({id:t.id,kind:t.kind,label:t.label??"",language:t.language,type:"vtt"});i[A.native]={track:t},i[A.readyState]=2,i[A.nativeHLS]=!0;let s=0,onCueChange=e=>{if(t.cues)for(let a=s;a<t.cues.length;a++)i.addCue(t.cues[a],e),s++};onCueChange(e),t.oncuechange=onCueChange,this.#e_.textTracks.add(i,e),i.setMode(t.mode,e)}#e5(){for(let e of(this.#k.textTracks.onaddtrack=null,this.#e_.textTracks)){let t=e[A.native]?.track;t?.oncuechange&&(t.oncuechange=null)}}};let VideoPictureInPicture=class VideoPictureInPicture{#k;#q;constructor(e,t){this.#k=e,this.#q=t,new a.EventsController(e).add("enterpictureinpicture",this.#tD.bind(this)).add("leavepictureinpicture",this.#tV.bind(this))}get active(){return document.pictureInPictureElement===this.#k}get supported(){return canUsePictureInPicture(this.#k)}async enter(){return this.#k.requestPictureInPicture()}exit(){return document.exitPictureInPicture()}#tD(e){this.#$(!0,e)}#tV(e){this.#$(!1,e)}#$=(e,t)=>{this.#q.notify("picture-in-picture-change",e,t)}};let VideoPresentation=class VideoPresentation{#k;#q;#s="inline";get mode(){return this.#s}constructor(e,t){this.#k=e,this.#q=t,(0,a.listenEvent)(e,"webkitpresentationmodechanged",this.#tO.bind(this))}get supported(){return canUseVideoPresentation(this.#k)}async setPresentationMode(e){this.#s!==e&&this.#k.webkitSetPresentationMode(e)}#tO(e){let t=this.#s;this.#s=this.#k.webkitPresentationMode,this.#q.player?.dispatch(new a.DOMEvent("video-presentation-change",{detail:this.#s,trigger:e})),["fullscreen","picture-in-picture"].forEach(i=>{(this.#s===i||t===i)&&this.#q.notify(`${i}-change`,this.#s===i,e)})}};let FullscreenPresentationAdapter=class FullscreenPresentationAdapter{#tF;get active(){return"fullscreen"===this.#tF.mode}get supported(){return this.#tF.supported}constructor(e){this.#tF=e}async enter(){this.#tF.setPresentationMode("fullscreen")}async exit(){this.#tF.setPresentationMode("inline")}};let PIPPresentationAdapter=class PIPPresentationAdapter{#tF;get active(){return"picture-in-picture"===this.#tF.mode}get supported(){return this.#tF.supported}constructor(e){this.#tF=e}async enter(){this.#tF.setPresentationMode("picture-in-picture")}async exit(){this.#tF.setPresentationMode("inline")}};let VideoProvider=class VideoProvider extends HTMLMediaProvider{$$PROVIDER_TYPE="VIDEO";get type(){return"video"}airPlay;fullscreen;pictureInPicture;constructor(e,t){super(e,t),(0,a.scoped)(()=>{if(this.airPlay=new HTMLAirPlayAdapter(e,t),canUseVideoPresentation(e)){let i=new VideoPresentation(e,t);this.fullscreen=new FullscreenPresentationAdapter(i),this.pictureInPicture=new PIPPresentationAdapter(i)}else canUsePictureInPicture(e)&&(this.pictureInPicture=new VideoPictureInPicture(e,t))},this.scope)}setup(){super.setup(),canPlayHLSNatively(this.video)&&new NativeHLSTextTracks(this.video,this.ctx),this.ctx.textRenderers.attachVideo(this.video),(0,a.onDispose)(()=>{this.ctx.textRenderers.attachVideo(null)}),"video"===this.type&&this.ctx.notify("provider-setup",this)}get video(){return this.media}};var es=Object.freeze({__proto__:null,VideoProvider:VideoProvider});function getLangName(e){try{let t=new Intl.DisplayNames(navigator.languages,{type:"language"}),i=t.of(e);return i??null}catch(e){return null}}let toDOMEventType=e=>`dash-${(0,a.camelToKebabCase)(e)}`;let DASHController=class DASHController{#k;#e_;#tN=null;#tB=new Set;#tH=null;config={};get instance(){return this.#tN}constructor(e,t){this.#k=e,this.#e_=t}setup(e){this.#tN=e().create();let t=this.#tG.bind(this);for(let i of Object.values(e.events))this.#tN.on(i,t);for(let t of(this.#tN.on(e.events.ERROR,this.#eA.bind(this)),this.#tB))t(this.#tN);this.#e_.player.dispatch("dash-instance",{detail:this.#tN}),this.#tN.initialize(this.#k,void 0,!1),this.#tN.updateSettings({streaming:{text:{defaultEnabled:!1,dispatchForManualRendering:!0},buffer:{fastSwitchEnabled:!0}},...this.config}),this.#tN.on(e.events.FRAGMENT_LOADING_STARTED,this.#tK.bind(this)),this.#tN.on(e.events.FRAGMENT_LOADING_COMPLETED,this.#tQ.bind(this)),this.#tN.on(e.events.MANIFEST_LOADED,this.#tU.bind(this)),this.#tN.on(e.events.QUALITY_CHANGE_RENDERED,this.#tW.bind(this)),this.#tN.on(e.events.TEXT_TRACKS_ADDED,this.#tj.bind(this)),this.#tN.on(e.events.TRACK_CHANGE_RENDERED,this.#t_.bind(this)),this.#e_.qualities[_.enableAuto]=this.#tz.bind(this),(0,a.listenEvent)(this.#e_.qualities,"change",this.#tX.bind(this)),(0,a.listenEvent)(this.#e_.audioTracks,"change",this.#tY.bind(this)),this.#tH=(0,a.effect)(this.#tJ.bind(this))}#tZ(e){return new a.DOMEvent(toDOMEventType(e.type),{detail:e})}#tJ(){if(!this.#e_.$state.live())return;let e=new RAFLoop(this.#t0.bind(this));return e.start(),e.stop.bind(e)}#t0(){if(!this.#tN)return;let e=this.#tN.duration()-this.#tN.time();this.#e_.$state.liveSyncPosition.set(isNaN(e)?1/0:e)}#tG(e){this.#e_.player?.dispatch(this.#tZ(e))}#t1=null;#t2={};#t3(e){let t=this.#t1?.[A.native],i=t?.track.cues;if(!t||!i)return;let s=this.#t1.id,a=this.#t2[s]??0,n=this.#tZ(e);for(let e=a;e<i.length;e++){let t=i[e];t.positionAlign||(t.positionAlign="auto"),this.#t1.addCue(t,n)}this.#t2[s]=i.length}#tj(e){if(!this.#tN)return;let t=e.tracks,i=[...this.#k.textTracks].filter(e=>"manualMode"in e),s=this.#tZ(e);for(let e=0;e<i.length;e++){let a=t[e],n=i[e],r=`dash-${a.kind}-${e}`,o=new TextTrack({id:r,label:a?.label??a.labels.find(e=>e.text)?.text??(a?.lang&&getLangName(a.lang))??a?.lang??void 0,language:a.lang??void 0,kind:a.kind,default:a.defaultTrack});o[A.native]={managed:!0,track:n},o[A.readyState]=2,o[A.onModeChange]=()=>{this.#tN&&("showing"===o.mode?(this.#tN.setTextTrack(e),this.#t1=o):(this.#tN.setTextTrack(-1),this.#t1=null))},this.#e_.textTracks.add(o,s)}}#t_(e){let{mediaType:t,newMediaInfo:i}=e;if("audio"===t){let t=this.#e_.audioTracks.getById(`dash-audio-${i.index}`);if(t){let i=this.#tZ(e);this.#e_.audioTracks[Q.select](t,!0,i)}}}#tW(e){if("video"!==e.mediaType)return;let t=this.#e_.qualities[e.newQuality];if(t){let i=this.#tZ(e);this.#e_.qualities[Q.select](t,!0,i)}}#tU(e){if(this.#e_.$state.canPlay()||!this.#tN)return;let{type:t,mediaPresentationDuration:i}=e.data,s=this.#tZ(e);this.#e_.notify("stream-type-change","static"!==t?"live":"on-demand",s),this.#e_.notify("duration-change",i,s),this.#e_.qualities[_.setAuto](!0,s);let n=this.#tN.getVideoElement(),r=this.#tN.getTracksForTypeFromManifest("video",e.data),o=[...new Set(r.map(e=>e.mimeType))].find(e=>e&&canPlayVideoType(n,e)),l=r.filter(e=>o===e.mimeType)[0],h=this.#tN.getTracksForTypeFromManifest("audio",e.data),d=[...new Set(h.map(e=>e.mimeType))].find(e=>e&&canPlayAudioType(n,e));if(h=h.filter(e=>d===e.mimeType),l.bitrateList.forEach((e,t)=>{let i={id:e.id?.toString()??`dash-bitrate-${t}`,width:e.width??0,height:e.height??0,bitrate:e.bandwidth??0,codec:l.codec,index:t};this.#e_.qualities[Q.add](i,s)}),(0,a.isNumber)(l.index)){let e=this.#e_.qualities[l.index];e&&this.#e_.qualities[Q.select](e,!0,s)}h.forEach((e,t)=>{let i=e.labels.find(e=>navigator.languages.some(t=>e.lang&&t.toLowerCase().startsWith(e.lang.toLowerCase()))),a=i||e.labels[0],n={id:`dash-audio-${e?.index}`,label:a?.text??(e.lang&&getLangName(e.lang))??e.lang??"",language:e.lang??"",kind:"main",mimeType:e.mimeType,codec:e.codec,index:t};this.#e_.audioTracks[Q.add](n,s)}),n.dispatchEvent(new a.DOMEvent("canplay",{trigger:s}))}#eA(e){let{type:t,error:i}=e;27===i.code?this.#t5(i):this.#t4(i)}#tK(){this.#t9>=0&&this.#t7()}#tQ(e){let t=e.mediaType;"text"===t&&requestAnimationFrame(this.#t3.bind(this,e))}#t9=-1;#t5(e){this.#t7(),this.#tN?.play(),this.#t9=window.setTimeout(()=>{this.#t9=-1,this.#t4(e)},5e3)}#t7(){clearTimeout(this.#t9),this.#t9=-1}#t4(e){this.#e_.notify("error",{message:e.message??"",code:1,error:e})}#tz(){this.#t6("video",!0);let{qualities:e}=this.#e_;this.#tN?.setQualityFor("video",e.selectedIndex,!0)}#t6(e,t){this.#tN?.updateSettings({streaming:{abr:{autoSwitchBitrate:{[e]:t}}}})}#tX(){let{qualities:e}=this.#e_;this.#tN&&!e.auto&&e.selected&&(this.#t6("video",!1),this.#tN.setQualityFor("video",e.selectedIndex,"current"===e.switch),d&&(this.#k.currentTime=this.#k.currentTime))}#tY(){if(!this.#tN)return;let{audioTracks:e}=this.#e_,t=this.#tN.getTracksFor("audio").find(t=>e.selected&&e.selected.id===`dash-audio-${t.index}`);t&&this.#tN.setCurrentTrack(t)}#t8(){this.#t7(),this.#t1=null,this.#t2={}}onInstance(e){return this.#tB.add(e),()=>this.#tB.delete(e)}loadSource(e){this.#t8(),(0,a.isString)(e.src)&&this.#tN?.attachSource(e.src)}destroy(){this.#t8(),this.#tN?.destroy(),this.#tN=null,this.#tH?.(),this.#tH=null}};function coerceToError(e){return e instanceof Error?e:Error("string"==typeof e?e:JSON.stringify(e))}function assert(e,t){if(!e)throw Error("Assertion failed.")}let DASHLibLoader=class DASHLibLoader{#ie;#e_;#eU;constructor(e,t,i){this.#ie=e,this.#e_=t,this.#eU=i,this.#it()}async #it(){let e={onLoadStart:this.#te.bind(this),onLoaded:this.#ii.bind(this),onLoadError:this.#is.bind(this)},t=await loadDASHScript(this.#ie,e);return((0,a.isUndefined)(t)&&!(0,a.isString)(this.#ie)&&(t=await importDASH(this.#ie,e)),t)?window.dashjs.supportsMediaSource()?t:(this.#e_.player.dispatch(new a.DOMEvent("dash-unsupported")),this.#e_.notify("error",{message:"[vidstack] `dash.js` is not supported in this environment",code:4}),null):null}#te(){this.#e_.player.dispatch(new a.DOMEvent("dash-lib-load-start"))}#ii(e){this.#e_.player.dispatch(new a.DOMEvent("dash-lib-loaded",{detail:e})),this.#eU(e)}#is(e){let t=coerceToError(e);this.#e_.player.dispatch(new a.DOMEvent("dash-lib-load-error",{detail:t})),this.#e_.notify("error",{message:t.message,code:4,error:t})}};async function importDASH(e,t={}){if(!(0,a.isUndefined)(e)){if(t.onLoadStart?.(),e&&e.prototype&&e.prototype!==Function)return t.onLoaded?.(e),e;if(isDASHNamespace(e)){let i=e.MediaPlayer;return t.onLoaded?.(i),i}try{let i=(await e())?.default;if(isDASHNamespace(i))return t.onLoaded?.(i.MediaPlayer),i.MediaPlayer;if(i)t.onLoaded?.(i);else throw Error("");return i}catch(e){t.onLoadError?.(e)}}}async function loadDASHScript(e,t={}){if((0,a.isString)(e)){t.onLoadStart?.();try{if(await loadScript(e),!(0,a.isFunction)(window.dashjs.MediaPlayer))throw Error("");let i=window.dashjs.MediaPlayer;return t.onLoaded?.(i),i}catch(e){t.onLoadError?.(e)}}}function isDASHNamespace(e){return e&&"MediaPlayer"in e}let DASHProvider=class DASHProvider extends VideoProvider{$$PROVIDER_TYPE="DASH";#ia=null;#ir=new DASHController(this.video,this.ctx);get ctor(){return this.#ia}get instance(){return this.#ir.instance}static supported=isHLSSupported();get type(){return"dash"}get canLiveSync(){return!0}#io="https://cdn.jsdelivr.net/npm/dashjs@4.7.4/dist/dash.all.min.js";get config(){return this.#ir.config}set config(e){this.#ir.config=e}get library(){return this.#io}set library(e){this.#io=e}preconnect(){(0,a.isString)(this.#io)&&preconnect(this.#io)}setup(){super.setup(),new DASHLibLoader(this.#io,this.ctx,e=>{this.#ia=e,this.#ir.setup(e),this.ctx.notify("provider-setup",this);let t=(0,a.peek)(this.ctx.$state.source);t&&this.loadSource(t)})}async loadSource(e,t){if(!(0,a.isString)(e.src)){this.removeSource();return}this.media.preload=t||"",this.appendSource(e,"application/x-mpegurl"),this.#ir.loadSource(e),this.currentSrc=e}onInstance(e){let t=this.#ir.instance;return t&&e(t),this.#ir.onInstance(e)}destroy(){this.#ir.destroy()}};var ea=Object.freeze({__proto__:null,DASHProvider:DASHProvider});let DASHProviderLoader=class DASHProviderLoader extends VideoProviderLoader{static supported=isHLSSupported();name="dash";canPlay(e){return DASHProviderLoader.supported&&isDASHSrc(e)}async load(e){if(r)throw Error("[vidstack] can not load dash provider server-side");return new(await Promise.resolve().then(function(){return ea})).DASHProvider(this.target,e)}};let VimeoProviderLoader=class VimeoProviderLoader{name="vimeo";target;preconnect(){for(let e of["https://i.vimeocdn.com","https://f.vimeocdn.com","https://fresnel.vimeocdn.com"])preconnect(e)}canPlay(e){return(0,a.isString)(e.src)&&"video/vimeo"===e.type}mediaType(){return"video"}async load(e){if(r)throw Error("[vidstack] can not load vimeo provider server-side");return new(await i.e(2977).then(i.bind(i,87134))).VimeoProvider(this.target,e)}async loadPoster(e,t,s){let{resolveVimeoVideoId:n,getVimeoVideoInfo:r}=await i.e(9888).then(i.bind(i,79888));if(!(0,a.isString)(e.src))return null;let{videoId:o,hash:l}=n(e.src);return o?r(o,s,l).then(e=>e?e.poster:null):null}};let YouTubeProviderLoader=class YouTubeProviderLoader{name="youtube";target;preconnect(){for(let e of["https://www.google.com","https://i.ytimg.com","https://googleads.g.doubleclick.net","https://static.doubleclick.net"])preconnect(e)}canPlay(e){return(0,a.isString)(e.src)&&"video/youtube"===e.type}mediaType(){return"video"}async load(e){if(r)throw Error("[vidstack] can not load youtube provider server-side");return new(await i.e(3079).then(i.bind(i,93079))).YouTubeProvider(this.target,e)}async loadPoster(e,t,s){let{findYouTubePoster:n,resolveYouTubeVideoId:r}=await i.e(3211).then(i.bind(i,63211)),o=(0,a.isString)(e.src)&&r(e.src);return o?n(o,s):null}};function padNumberWithZeroes(e,t){let i=String(e),s=i.length;if(s<t){let i="0".repeat(t-s);return`${i}${e}`}return i}function parseTime(e){let t=Number((e-Math.trunc(e)).toPrecision(3));return{hours:Math.trunc(e/3600),minutes:Math.trunc(e%3600/60),seconds:Math.trunc(e%60),fraction:t}}function formatTime(e,{padHrs:t=null,padMins:i=null,showHrs:s=!1,showMs:n=!1}={}){let{hours:r,minutes:o,seconds:l,fraction:h}=parseTime(e),d=t?padNumberWithZeroes(r,2):r,u=i||(0,a.isNull)(i)&&e>=3600?padNumberWithZeroes(o,2):o,c=padNumberWithZeroes(l,2),p=n&&h>0?`.${String(h).replace(/^0?\./,"")}`:"",m=`${u}:${c}${p}`;return r>0||s?`${d}:${m}`:m}function formatSpokenTime(e){let t=[],{hours:i,minutes:s,seconds:a}=parseTime(e);return i>0&&t.push(`${i} hour`),s>0&&t.push(`${s} min`),(a>0||0===t.length)&&t.push(`${a} sec`),t.join(" ")}let en=Symbol(0),er=["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"],eo={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:{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:"<"},storage:null};let MediaLoadController=class MediaLoadController extends MediaPlayerController{#eM;#eU;constructor(e,t){super(),this.#eM=e,this.#eU=t}async onAttach(e){if(r)return;let t=this.$props[this.#eM]();if("eager"===t)requestAnimationFrame(this.#eU);else if("idle"===t)(0,a.waitIdlePeriod)(this.#eU);else if("visible"===t){let t,i=new IntersectionObserver(e=>{this.scope&&e[0].isIntersecting&&(t?.(),t=void 0,this.#eU())});i.observe(e),t=(0,a.onDispose)(()=>i.disconnect())}}};let MediaPlayerDelegate=class MediaPlayerDelegate{#il;#q;constructor(e,t){this.#il=e,this.#q=t}notify(e,...t){r||this.#il(new a.DOMEvent(e,{detail:t?.[0],trigger:t?.[1]}))}async ready(e,t){if(!r)return(0,a.untrack)(async()=>{this.#q;let{autoPlay:i,canPlay:s,started:n,duration:r,seekable:o,buffered:l,remotePlaybackInfo:h,playsInline:d,savedState:u,source:c}=this.#q.$state;if(s())return;let p={duration:e?.duration??r(),seekable:e?.seekable??o(),buffered:e?.buffered??l(),provider:this.#q.$provider()};this.notify("can-play",p,t),(0,a.tick)();let m=this.#q.$provider(),{storage:g,qualities:f}=this.#q,{muted:y,volume:b,clipStartTime:v,playbackRate:w}=this.#q.$props;await g?.onLoad?.(c());let T=u()?.currentTime,k=u()?.paused,S=await g?.getTime(),C=T??S??v(),$=k||!1!==k&&!n()&&i();if(m){m.setVolume(await g?.getVolume()??b()),m.setMuted(y()||!!await g?.getMuted());let e=await g?.getAudioGain()??1;e>1&&m.audioGain?.setGain?.(e),m.setPlaybackRate?.(await g?.getPlaybackRate()??w()),m.setPlaysInline?.(d()),C>0&&m.setCurrentTime(C)}let x=await g?.getVideoQuality();if(x&&f.length){let e=null,t=1/0;for(let i of f){let s=Math.abs(x.width-i.width)+Math.abs(x.height-i.height)+(x.bitrate?Math.abs(x.bitrate-(i.bitrate??0)):0);s<t&&(e=i,t=s)}e&&(e.selected=!0)}s()&&$?await this.#ih(t):S&&S>0&&this.notify("started",void 0,t),h.set(null)})}async #ih(e){let{player:t,$state:{autoPlaying:i,muted:s}}=this.#q;i.set(!0);let n=new a.DOMEvent("auto-play-attempt",{trigger:e});try{await t.play(n)}catch(e){}}};let Queue=class Queue{#id=new Map;enqueue(e,t){this.#id.set(e,t)}serve(e){let t=this.peek(e);return this.#id.delete(e),t}peek(e){return this.#id.get(e)}delete(e){this.#id.delete(e)}clear(){this.#id.clear()}};let RequestQueue=class RequestQueue{#iu=!1;#ic=(0,a.deferredPromise)();#id=new Map;get size(){return this.#id.size}get isServing(){return this.#iu}async waitForFlush(){this.#iu||await this.#ic.promise}enqueue(e,t){if(this.#iu){t();return}this.#id.delete(e),this.#id.set(e,t)}serve(e){this.#id.get(e)?.(),this.#id.delete(e)}start(){this.#ip(),this.#iu=!0,this.#id.size>0&&this.#ip()}stop(){this.#iu=!1}reset(){this.stop(),this.#id.clear(),this.#im()}#ip(){for(let e of this.#id.keys())this.serve(e);this.#im()}#im(){this.#ic.resolve(),this.#ic=(0,a.deferredPromise)()}};let MediaRequestManager=class MediaRequestManager extends MediaPlayerController{#ig;#iy;#q;controls;#ib;#iv;#iw;#iT=new RequestQueue;constructor(e,t,i){super(),this.#ig=e,this.#iy=t,this.#q=i,this.#iw=i.$provider,this.controls=new MediaControls,this.#ib=new FullscreenController,this.#iv=new ScreenOrientationController}onAttach(){this.listen("fullscreen-change",this.#ik.bind(this))}onConnect(e){let t=Object.getOwnPropertyNames(Object.getPrototypeOf(this)),i=new a.EventsController(e),s=this.#iS.bind(this);for(let e of t)e.startsWith("media-")&&i.add(e,s);this.#iC(),(0,a.effect)(this.#i$.bind(this)),(0,a.effect)(this.#ix.bind(this)),(0,a.effect)(this.#iP.bind(this)),(0,a.effect)(this.#iA.bind(this)),(0,a.effect)(this.#iE.bind(this)),(0,a.effect)(this.#iM.bind(this)),(0,a.effect)(this.#iq.bind(this))}onDestroy(){try{let e=this.createEvent("destroy"),{pictureInPicture:t,fullscreen:i}=this.$state;i()&&this.exitFullscreen("prefer-media",e),t()&&this.exitPictureInPicture(e)}catch(e){}this.#iT.reset()}#iC(){let{load:e}=this.$props,{canLoad:t}=this.$state;if("play"!==e()||t())return;let i=this.listen("media-play-request",e=>{this.#iI(e),i()})}#i$(){let e=this.#iw(),t=this.$state.canPlay();return e&&t&&this.#iT.start(),()=>{this.#iT.stop()}}#iS(e){e.stopPropagation(),!e.defaultPrevented&&this[e.type]&&((0,a.peek)(this.#iw)?this[e.type](e):this.#iT.enqueue(e.type,()=>{(0,a.peek)(this.#iw)&&this[e.type](e)}))}async play(e){if(r)return;let{canPlay:t,paused:i,autoPlaying:s}=this.$state;if(this.#iI(e)||!(0,a.peek)(i))return;e&&this.#iy.queue.enqueue("media-play-request",e);let n=(0,a.peek)(s);try{let e=(0,a.peek)(this.#iw);return throwIfNotReadyForPlayback(e,(0,a.peek)(t)),await e.play()}catch(i){let t=this.createEvent("play-fail",{detail:coerceToError(i),trigger:e});throw t.autoPlay=n,this.#ig.handle(t),i}}#iI(e){let{load:t}=this.$props,{canLoad:i}=this.$state;if("play"===t()&&!i()){let t=this.createEvent("media-start-loading",{trigger:e});return this.dispatchEvent(t),this.#iT.enqueue("media-play-request",async()=>{try{await this.play(t)}catch(e){}}),!0}return!1}async pause(e){if(r)return;let{canPlay:t,paused:i}=this.$state;if(!(0,a.peek)(i)){e&&this.#iy.queue.enqueue("media-pause-request",e);try{let e=(0,a.peek)(this.#iw);return throwIfNotReadyForPlayback(e,(0,a.peek)(t)),await e.pause()}catch(e){throw this.#iy.queue.delete("media-pause-request"),e}}}setAudioGain(e,t){let{audioGain:i,canSetAudioGain:s}=this.$state;if(i()===e)return;let a=this.#iw();if(!a?.audioGain||!s())throw Error("[vidstack] audio gain api not available");t&&this.#iy.queue.enqueue("media-audio-gain-change-request",t),a.audioGain.setGain(e)}seekToLiveEdge(e){if(r)return;let{canPlay:t,live:i,liveEdge:s,canSeek:n,liveSyncPosition:o,seekableEnd:l,userBehindLiveEdge:h}=this.$state;if(h.set(!1),(0,a.peek)(()=>!i()||s()||!n()))return;let d=(0,a.peek)(this.#iw);throwIfNotReadyForPlayback(d,(0,a.peek)(t)),e&&this.#iy.queue.enqueue("media-seek-request",e);let u=l()-2;d.setCurrentTime(Math.min(u,o()??u))}#iL=!1;async enterFullscreen(e="prefer-media",t){if(r)return;let i=this.#iR(e);if(throwIfFullscreenNotSupported(e,i),!i.active)return(0,a.peek)(this.$state.pictureInPicture)&&(this.#iL=!0,await this.exitPictureInPicture(t)),t&&this.#iy.queue.enqueue("media-enter-fullscreen-request",t),i.enter()}async exitFullscreen(e="prefer-media",t){if(r)return;let i=this.#iR(e);if(throwIfFullscreenNotSupported(e,i),i.active){t&&this.#iy.queue.enqueue("media-exit-fullscreen-request",t);try{let e=await i.exit();return this.#iL&&(0,a.peek)(this.$state.canPictureInPicture)&&await this.enterPictureInPicture(),e}finally{this.#iL=!1}}}#iR(e){let t=(0,a.peek)(this.#iw);return"prefer-media"===e&&this.#ib.supported||"media"===e?this.#ib:t?.fullscreen}async enterPictureInPicture(e){if(!r&&(this.#iD(),!this.$state.pictureInPicture()))return e&&this.#iy.queue.enqueue("media-enter-pip-request",e),await this.#iw().pictureInPicture.enter()}async exitPictureInPicture(e){if(!r&&(this.#iD(),this.$state.pictureInPicture()))return e&&this.#iy.queue.enqueue("media-exit-pip-request",e),await this.#iw().pictureInPicture.exit()}#iD(){if(!this.$state.canPictureInPicture())throw Error("[vidstack] no pip support")}#ix(){this.controls.defaultDelay=this.$props.controlsDelay()}#iP(){let{canSetAudioGain:e}=this.$state,t=!!this.#iw()?.audioGain?.supported;e.set(t)}#iA(){let{canAirPlay:e}=this.$state,t=!!this.#iw()?.airPlay?.supported;e.set(t)}#iE(){let{canGoogleCast:e,source:t}=this.$state,i=d&&!l&&canGoogleCastSrc(t());e.set(i)}#iM(){let{canFullscreen:e}=this.$state,t=this.#ib.supported||!!this.#iw()?.fullscreen?.supported;e.set(t)}#iq(){let{canPictureInPicture:e}=this.$state,t=!!this.#iw()?.pictureInPicture?.supported;e.set(t)}async "media-airplay-request"(e){try{await this.requestAirPlay(e)}catch(e){}}async requestAirPlay(e){try{let t=this.#iw()?.airPlay;if(!t?.supported)throw Error("No AirPlay adapter.");return e&&this.#iy.queue.enqueue("media-airplay-request",e),await t.prompt()}catch(e){throw this.#iy.queue.delete("media-airplay-request"),e}}async "media-google-cast-request"(e){try{await this.requestGoogleCast(e)}catch(e){}}#iV;async requestGoogleCast(e){try{let{canGoogleCast:t}=this.$state;if(!(0,a.peek)(t)){let e=Error("Cast not available.");throw e.code="CAST_NOT_AVAILABLE",e}if(preconnect("https://www.gstatic.com"),!this.#iV){let e=await i.e(4095).then(i.bind(i,14095)).then(function(e){return e.loader});this.#iV=new e.GoogleCastLoader}await this.#iV.prompt(this.#q),e&&this.#iy.queue.enqueue("media-google-cast-request",e);let s="disconnected"!==(0,a.peek)(this.$state.remotePlaybackState);s&&this.$state.savedState.set({paused:(0,a.peek)(this.$state.paused),currentTime:(0,a.peek)(this.$state.currentTime)}),this.$state.remotePlaybackLoader.set(s?this.#iV:null)}catch(e){throw this.#iy.queue.delete("media-google-cast-request"),e}}"media-clip-start-change-request"(e){let{clipStartTime:t}=this.$state;t.set(e.detail)}"media-clip-end-change-request"(e){let{clipEndTime:t}=this.$state;t.set(e.detail),this.dispatch("duration-change",{detail:e.detail,trigger:e})}"media-duration-change-request"(e){let{providedDuration:t,clipEndTime:i}=this.$state;t.set(e.detail),0>=i()&&this.dispatch("duration-change",{detail:e.detail,trigger:e})}"media-audio-track-change-request"(e){let{logger:t,audioTracks:i}=this.#q;if(i.readonly)return;let s=e.detail,a=i[s];if(a){let t=e.type;this.#iy.queue.enqueue(t,e),a.selected=!0}}async "media-enter-fullscreen-request"(e){try{await this.enterFullscreen(e.detail,e)}catch(t){this.#iO(t,e)}}async "media-exit-fullscreen-request"(e){try{await this.exitFullscreen(e.detail,e)}catch(t){this.#iO(t,e)}}async #ik(e){let t=(0,a.peek)(this.$props.fullscreenOrientation),i=e.detail;if(!(0,a.isUndefined)(t)&&"none"!==t&&this.#iv.supported){if(i){if(this.#iv.locked)return;this.dispatch("media-orientation-lock-request",{detail:t,trigger:e})}else this.#iv.locked&&this.dispatch("media-orientation-unlock-request",{trigger:e})}}#iO(e,t){this.#ig.handle(this.createEvent("fullscreen-error",{detail:coerceToError(e)}))}async "media-orientation-lock-request"(e){let t=e.type;try{this.#iy.queue.enqueue(t,e),await this.#iv.lock(e.detail)}catch(e){this.#iy.queue.delete(t)}}async "media-orientation-unlock-request"(e){let t=e.type;try{this.#iy.queue.enqueue(t,e),await this.#iv.unlock()}catch(e){this.#iy.queue.delete(t)}}async "media-enter-pip-request"(e){try{await this.enterPictureInPicture(e)}catch(t){this.#iF(t,e)}}async "media-exit-pip-request"(e){try{await this.exitPictureInPicture(e)}catch(t){this.#iF(t,e)}}#iF(e,t){this.#ig.handle(this.createEvent("picture-in-picture-error",{detail:coerceToError(e)}))}"media-live-edge-request"(e){let{live:t,liveEdge:i,canSeek:s}=this.$state;if(!(!t()||i())&&s()){this.#iy.queue.enqueue("media-seek-request",e);try{this.seekToLiveEdge()}catch(e){this.#iy.queue.delete("media-seek-request")}}}async "media-loop-request"(e){try{this.#iy.looping=!0,this.#iy.replaying=!0,await this.play(e)}catch(e){this.#iy.looping=!1}}"media-user-loop-change-request"(e){this.$state.userPrefersLoop.set(e.detail)}async "media-pause-request"(e){if(!this.$state.paused())try{await this.pause(e)}catch(e){}}async "media-play-request"(e){if(this.$state.paused())try{await this.play(e)}catch(e){}}"media-rate-change-request"(e){let{playbackRate:t,canSetPlaybackRate:i}=this.$state;if(t()===e.detail||!i())return;let s=this.#iw();s?.setPlaybackRate&&(this.#iy.queue.enqueue("media-rate-change-request",e),s.setPlaybackRate(e.detail))}"media-audio-gain-change-request"(e){try{this.setAudioGain(e.detail,e)}catch(e){}}"media-quality-change-request"(e){let{qualities:t,storage:i,logger:s}=this.#q;if(t.readonly)return;this.#iy.queue.enqueue("media-quality-change-request",e);let a=e.detail;if(a<0)t.autoSelect(e),e.isOriginTrusted&&i?.setVideoQuality?.(null);else{let s=t[a];s&&(s.selected=!0,e.isOriginTrusted&&i?.setVideoQuality?.({id:s.id,width:s.width,height:s.height,bitrate:s.bitrate}))}}"media-pause-controls-request"(e){let t=e.type;this.#iy.queue.enqueue(t,e),this.controls.pause(e)}"media-resume-controls-request"(e){let t=e.type;this.#iy.queue.enqueue(t,e),this.controls.resume(e)}"media-seek-request"(e){let{seekableStart:t,seekableEnd:i,ended:s,canSeek:a,live:n,userBehindLiveEdge:r,clipStartTime:o}=this.$state,l=e.detail;s()&&(this.#iy.replaying=!0);let h=e.type;this.#iy.seeking=!1,this.#iy.queue.delete(h);let d=l+o(),u=Math.floor(l)===Math.floor(t()),c=Math.floor(d)===Math.floor(i()),p=u?t():c?i():Math.min(Math.max(t()+.1,d),i()-.1);Number.isFinite(p)&&a()&&(this.#iy.queue.enqueue(h,e),this.#iw().setCurrentTime(p),n()&&e.isOriginTrusted&&Math.abs(i()-p)>=2&&r.set(!0))}"media-seeking-request"(e){let t=e.type;this.#iy.queue.enqueue(t,e),this.$state.seeking.set(!0),this.#iy.seeking=!0}"media-start-loading"(e){if(this.$state.canLoad())return;let t=e.type;this.#iy.queue.enqueue(t,e),this.#ig.handle(this.createEvent("can-load"))}"media-poster-start-loading"(e){if(this.$state.canLoadPoster())return;let t=e.type;this.#iy.queue.enqueue(t,e),this.#ig.handle(this.createEvent("can-load-poster"))}"media-text-track-change-request"(e){let{index:t,mode:i}=e.detail,s=this.#q.textTracks[t];if(s){let t=e.type;this.#iy.queue.enqueue(t,e),s.setMode(i,e)}}"media-mute-request"(e){if(this.$state.muted())return;let t=e.type;this.#iy.queue.enqueue(t,e),this.#iw().setMuted(!0)}"media-unmute-request"(e){let{muted:t,volume:i}=this.$state;if(!t())return;let s=e.type;this.#iy.queue.enqueue(s,e),this.#q.$provider().setMuted(!1),0===i()&&(this.#iy.queue.enqueue(s,e),this.#iw().setVolume(.25))}"media-volume-change-request"(e){let{muted:t,volume:i}=this.$state,s=e.detail;if(i()===s)return;let a=e.type;this.#iy.queue.enqueue(a,e),this.#iw().setVolume(s),s>0&&t()&&(this.#iy.queue.enqueue(a,e),this.#iw().setMuted(!1))}#iN(e,t,i){}};function throwIfNotReadyForPlayback(e,t){if(!e||!t)throw Error("[vidstack] media not ready")}function throwIfFullscreenNotSupported(e,t){if(!t?.supported)throw Error("[vidstack] no fullscreen support")}let MediaRequestContext=class MediaRequestContext{seeking=!1;looping=!1;replaying=!1;queue=new Queue};let el=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"]);let MediaStateManager=class MediaStateManager extends MediaPlayerController{#iy;#q;#iB=new Map;#iH=!1;#iG=[];#iK=[-1,-1];#iQ=!1;#iU;constructor(e,t){super(),this.#iy=e,this.#q=t}onAttach(e){e.setAttribute("aria-busy","true"),new a.EventsController(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(e){(0,a.effect)(this.#iW.bind(this)),this.#ij(),this.#i_(),this.#iz(),this.#iX(),(0,a.onDispose)(this.#iY.bind(this))}onDestroy(){let{audioTracks:e,qualities:t,textTracks:i}=this.#q;e[Q.reset](),t[Q.reset](),i[Q.reset](),this.#iJ()}handle(e){if(!this.scope)return;let t=e.type;(0,a.untrack)(()=>this[e.type]?.(e)),r||(el.has(t)&&this.#iB.set(t,e),this.dispatch(e))}#iZ=!1;#iX(){this.#iZ&&(requestAnimationFrame(()=>{this.scope&&this.#q.remote.play(new a.DOMEvent("dom-connect"))}),this.#iZ=!1)}#iY(){this.#iZ||(this.#iZ=!this.$state.paused(),this.#q.$provider()?.pause())}#i0(){this.#i1(),this.#iH=!1,this.#iy.replaying=!1,this.#iy.looping=!1,this.#iQ=!1,this.#iU=void 0,this.#iB.clear()}#i2(e,t){let i=this.#iy.queue.serve(e);i&&(t.request=i,t.triggers.add(i))}#ij(){this.#i3(),this.#i5();let e=this.#q.textTracks;new a.EventsController(e).add("add",this.#i3.bind(this)).add("remove",this.#i3.bind(this)).add("mode-change",this.#i5.bind(this))}#i_(){let e=this.#q.qualities;new a.EventsController(e).add("add",this.#i4.bind(this)).add("remove",this.#i4.bind(this)).add("change",this.#tW.bind(this)).add("auto-change",this.#i9.bind(this)).add("readonly-change",this.#i7.bind(this))}#iz(){let e=this.#q.audioTracks;new a.EventsController(e).add("add",this.#i6.bind(this)).add("remove",this.#i6.bind(this)).add("change",this.#i8.bind(this))}#i3(e){let{textTracks:t}=this.$state;t.set(this.#q.textTracks.toArray()),this.dispatch("text-tracks-change",{detail:t(),trigger:e})}#i5(e){e&&this.#i2("media-text-track-change-request",e);let t=this.#q.textTracks.selected,{textTrack:i}=this.$state;i()!==t&&(i.set(t),this.dispatch("text-track-change",{detail:t,trigger:e}))}#i6(e){let{audioTracks:t}=this.$state;t.set(this.#q.audioTracks.toArray()),this.dispatch("audio-tracks-change",{detail:t(),trigger:e})}#i8(e){let{audioTrack:t}=this.$state;t.set(this.#q.audioTracks.selected),e&&this.#i2("media-audio-track-change-request",e),this.dispatch("audio-track-change",{detail:t(),trigger:e})}#i4(e){let{qualities:t}=this.$state;t.set(this.#q.qualities.toArray()),this.dispatch("qualities-change",{detail:t(),trigger:e})}#tW(e){let{quality:t}=this.$state;t.set(this.#q.qualities.selected),e&&this.#i2("media-quality-change-request",e),this.dispatch("quality-change",{detail:t(),trigger:e})}#i9(){let{qualities:e}=this.#q,t=e.auto;this.$state.autoQuality.set(t),t||this.#iJ()}#se=null;#st(){this.#iJ(),this.#se=(0,a.effect)(()=>{let{qualities:e}=this.#q,{mediaWidth:t,mediaHeight:i}=this.$state,s=t(),n=i();if(0===s||0===n)return;let r=null,o=1/0;for(let t of e){let e=Math.abs(t.width-s)+Math.abs(t.height-n);e<o&&(o=e,r=t)}r&&e[Q.select](r,!0,new a.DOMEvent("resize",{detail:{width:s,height:n}}))})}#iJ(){this.#se?.(),this.#se=null}#i7(){this.$state.canSetQuality.set(!this.#q.qualities.readonly)}#iW(){let{canSetVolume:e,isGoogleCastConnected:t}=this.$state;if(t()){e.set(!1);return}canChangeVolume().then(e.set)}"provider-change"(e){let t=this.#q.$provider(),i=e.detail;t?.type!==i?.type&&(t?.destroy?.(),t?.scope?.dispose(),this.#q.$provider.set(e.detail),t&&null===e.detail&&this.#si(e))}"provider-loader-change"(e){}"auto-play"(e){this.$state.autoPlayError.set(null)}"auto-play-fail"(e){this.$state.autoPlayError.set(e.detail),this.#i0()}"can-load"(e){this.$state.canLoad.set(!0),this.#iB.set("can-load",e),this.#q.textTracks[A.canLoad](),this.#i2("media-start-loading",e)}"can-load-poster"(e){this.$state.canLoadPoster.set(!0),this.#iB.set("can-load-poster",e),this.#i2("media-poster-start-loading",e)}"media-type-change"(e){let t=this.#iB.get("source-change");t&&e.triggers.add(t);let i=this.$state.viewType();this.$state.mediaType.set(e.detail);let s=this.$state.providedViewType(),a="unknown"===s?e.detail:s;i!==a&&(r?this.$state.inferredViewType.set(a):setTimeout(()=>{requestAnimationFrame(()=>{this.scope&&(this.$state.inferredViewType.set(e.detail),this.dispatch("view-type-change",{detail:a,trigger:e}))})},0))}"stream-type-change"(e){let t=this.#iB.get("source-change");t&&e.triggers.add(t);let{streamType:i,inferredStreamType:s}=this.$state;s.set(e.detail),e.detail=i()}"rate-change"(e){let{storage:t}=this.#q,{canPlay:i}=this.$state;this.$state.playbackRate.set(e.detail),this.#i2("media-rate-change-request",e),i()&&t?.setPlaybackRate?.(e.detail)}"remote-playback-change"(e){let{remotePlaybackState:t,remotePlaybackType:i}=this.$state,{type:s,state:a}=e.detail,n="connected"===a;i.set(s),t.set(a);let r="airplay"===s?"media-airplay-request":"media-google-cast-request";if(n)this.#i2(r,e);else{let t=this.#iy.queue.peek(r);t&&(e.request=t,e.triggers.add(t))}}"sources-change"(e){let t=this.$state.sources(),i=e.detail;this.$state.sources.set(i),this.#ss(t,i,e)}#ss(e,t,i){let{qualities:s}=this.#q,a=!1,n=!1;for(let a of e){if(!isVideoQualitySrc(a))continue;let e=t.some(e=>e.src===a.src);if(!e){let e=s.getBySrc(a.src);e&&(s[Q.remove](e,i),n=!0)}}for(let e of(n&&!s.length&&(this.$state.savedState.set(null),s[Q.reset](i)),t)){if(!isVideoQualitySrc(e)||s.getBySrc(e.src))continue;let t={id:e.id??e.height+"p",bitrate:null,codec:null,...e,selected:!1};s[Q.add](t,i),a=!0}a&&!s[_.enableAuto]&&(this.#st(),s[_.enableAuto]=this.#st.bind(this),s[_.setAuto](!0,i))}"source-change"(e){e.isQualityChange=e.originEvent?.type==="quality-change";let t=e.detail;this.#si(e,e.isQualityChange),this.#iB.set(e.type,e),this.$state.source.set(t),this.el?.setAttribute("aria-busy","true")}#si(e,t=!1){let{audioTracks:i,qualities:s}=this.#q;if(!t){this.#iG=[],this.#iK=[-1,-1],i[Q.reset](e),s[Q.reset](e),softResetMediaState(this.$state,t),this.#i0();return}softResetMediaState(this.$state,t),this.#i0()}abort(e){let t=this.#iB.get("source-change");t&&e.triggers.add(t);let i=this.#iB.get("can-load");i&&!e.triggers.hasType("can-load")&&e.triggers.add(i)}"load-start"(e){let t=this.#iB.get("source-change");t&&e.triggers.add(t)}error(e){this.$state.error.set(e.detail);let t=this.#iB.get("abort");t&&e.triggers.add(t)}"loaded-metadata"(e){let t=this.#iB.get("load-start");t&&e.triggers.add(t)}"loaded-data"(e){let t=this.#iB.get("load-start");t&&e.triggers.add(t)}"can-play"(e){let t=this.#iB.get("loaded-metadata");t&&e.triggers.add(t),this.#sa(e.detail),this.el?.setAttribute("aria-busy","false")}"can-play-through"(e){this.#sa(e.detail);let t=this.#iB.get("can-play");t&&e.triggers.add(t)}#sa(e){let{seekable:t,buffered:i,intrinsicDuration:s,canPlay:a}=this.$state;a.set(!0),i.set(e.buffered),t.set(e.seekable);let n=getTimeRangesEnd(e.seekable)??1/0;s.set(n)}"duration-change"(e){let{live:t,intrinsicDuration:i,providedDuration:s,clipEndTime:a,ended:n}=this.$state,r=e.detail;if(!t()){let t=Number.isNaN(r)?0:r;i.set(t),n()&&this.#sn(e)}(s()>0||a()>0)&&e.stopImmediatePropagation()}progress(e){let{buffered:t,bufferedEnd:i,seekable:s,seekableEnd:a,live:n,intrinsicDuration:r}=this.$state,{buffered:o,seekable:l}=e.detail,h=getTimeRangesEnd(o)??1/0,d=o.length!==t().length,u=h>i(),c=getTimeRangesEnd(l)??1/0,p=l.length!==s().length,m=c>a();(d||u)&&t.set(o),(p||m)&&s.set(l),n()&&(r.set(c),this.dispatch("duration-change",{detail:c,trigger:e}))}play(e){let{paused:t,autoPlayError:i,ended:s,autoPlaying:a,playsInline:n,pointer:r,muted:o,viewType:l,live:h,userBehindLiveEdge:d}=this.$state;if(this.#sr(),!t()){e.stopImmediatePropagation();return}e.autoPlay=a();let u=this.#iB.get("waiting");u&&e.triggers.add(u),this.#i2("media-play-request",e),this.#iB.set("play",e),t.set(!1),i.set(null),e.autoPlay&&(this.handle(this.createEvent("auto-play",{detail:{muted:o()},trigger:e})),a.set(!1)),(s()||this.#iy.replaying)&&(this.#iy.replaying=!1,s.set(!1),this.handle(this.createEvent("replay",{trigger:e}))),n()||"video"!==l()||"coarse"!==r()||this.#q.remote.enterFullscreen("prefer-media",e),h()&&!d()&&this.#q.remote.seekToLiveEdge(e)}#sr(e){let t=(0,a.peek)(this.#q.$provider);if(!t)return;let{ended:i,seekableStart:s,clipStartTime:n,clipEndTime:r,currentTime:o,realCurrentTime:l,duration:h}=this.$state,d=i()||l()<n()||r()>0&&l()>=r()||.1>Math.abs(o()-h());return d&&this.dispatch("media-seek-request",{detail:s(),trigger:e}),d}"play-fail"(e){let{muted:t,autoPlaying:i}=this.$state,s=this.#iB.get("play");s&&e.triggers.add(s),this.#i2("media-play-request",e);let{paused:a,playing:n}=this.$state;a.set(!0),n.set(!1),this.#i0(),this.#iB.set("play-fail",e),e.autoPlay&&(this.handle(this.createEvent("auto-play-fail",{detail:{muted:t(),error:e.detail},trigger:e})),i.set(!1))}playing(e){let t=this.#iB.get("play"),i=this.#iB.get("seeked");t?e.triggers.add(t):i&&e.triggers.add(i),setTimeout(()=>this.#i0(),0);let{paused:s,playing:a,live:n,liveSyncPosition:r,seekableEnd:o,started:l,currentTime:h,seeking:d,ended:u}=this.$state;if(s.set(!1),a.set(!0),d.set(!1),u.set(!1),this.#iy.looping){this.#iy.looping=!1;return}if(n()&&!l()&&0===h()){let e=r()??o()-2;Number.isFinite(e)&&this.#q.$provider().setCurrentTime(e)}this.started(e)}started(e){let{started:t}=this.$state;t()||(t.set(!0),this.handle(this.createEvent("started",{trigger:e})))}pause(e){this.el?.isConnected||(this.#iZ=!0),this.#i2("media-pause-request",e);let t=this.#iB.get("seeked");t&&e.triggers.add(t);let{paused:i,playing:s}=this.$state;i.set(!0),s.set(!1),this.#iH&&setTimeout(()=>{this.handle(this.createEvent("end",{trigger:e})),this.#iH=!1},0),this.#i0()}"time-change"(e){if(this.#iy.looping){e.stopImmediatePropagation();return}let{waiting:t,played:i,clipEndTime:s,realCurrentTime:a,currentTime:n}=this.$state,r=e.detail,o=s();for(let i of(a.set(r),this.#so(),t.set(!1),this.#q.textTracks))i[A.updateActiveCues](r,e);o>0&&r>=o&&(this.#iH=!0,this.dispatch("media-pause-request",{trigger:e})),this.#sl(),this.dispatch("time-update",{detail:{currentTime:n(),played:i()},trigger:e})}#so(){var e,t,i;let s,a;let{currentTime:n,played:r,paused:o}=this.$state;o()||(this.#iK=(e=this.#iG,t=this.#iK,i=n(),s=t[0],a=t[1],i<s?[i,-1]:(i===s||(-1===s?t[0]=i:(i>s&&(t[1]=i,-1===a&&e.push(t)),function(e){if(e.length<=1)return;e.sort((e,t)=>e[0]-t[0]);let t=[],i=e[0];for(let s=1;s<e.length;s++){let a=e[s];i[1]>=a[0]-1?i=[i[0],Math.max(i[1],a[1])]:(t.push(i),i=a)}t.push(i)}(e))),t)),r.set(new TimeRange(this.#iG)))}#sn(e){let{clipStartTime:t,clipEndTime:i,duration:s}=this.$state,a=t()>0||i()>0;a||this.handle(this.createEvent("time-change",{detail:s(),trigger:e}))}#sl(){let{storage:e}=this.#q,{canPlay:t,realCurrentTime:i}=this.$state;t()&&e?.setTime?.(i())}"audio-gain-change"(e){let{storage:t}=this.#q,{canPlay:i,audioGain:s}=this.$state;s.set(e.detail),this.#i2("media-audio-gain-change-request",e),i()&&t?.setAudioGain?.(s())}"volume-change"(e){let{storage:t}=this.#q,{volume:i,muted:s,canPlay:a}=this.$state,n=e.detail;i.set(n.volume),s.set(n.muted||0===n.volume),this.#i2("media-volume-change-request",e),this.#i2(n.muted?"media-mute-request":"media-unmute-request",e),a()&&(t?.setVolume?.(i()),t?.setMuted?.(s()))}seeking=(0,a.functionThrottle)(e=>{let{seeking:t,realCurrentTime:i,paused:s}=this.$state;t.set(!0),i.set(e.detail),this.#i2("media-seeking-request",e),s()&&(this.#iU=e,this.#sh()),this.#iK=[-1,-1]},150,{leading:!0});seeked(e){let{seeking:t,currentTime:i,realCurrentTime:s,paused:a,seekableEnd:n,ended:r}=this.$state;if(this.#iy.seeking)t.set(!0),e.stopImmediatePropagation();else if(t()){let i=this.#iB.get("waiting");i&&e.triggers.add(i);let n=this.#iB.get("seeking");n&&!e.triggers.has(n)&&e.triggers.add(n),a()&&this.#i1(),t.set(!1),s.set(e.detail),this.#i2("media-seek-request",e);let r=e?.originEvent;!r?.isTrusted||r instanceof MessageEvent||/seek/.test(r.type)||this.started(e)}Math.floor(i())!==Math.floor(n())?r.set(!1):this.end(e)}waiting(e){this.#iQ||this.#iy.seeking||(e.stopImmediatePropagation(),this.#iU=e,this.#sh())}#sh=(0,a.functionDebounce)(()=>{if(!this.#iU)return;this.#iQ=!0;let{waiting:e,playing:t}=this.$state;e.set(!0),t.set(!1);let i=this.createEvent("waiting",{trigger:this.#iU});this.#iB.set("waiting",i),this.dispatch(i),this.#iU=void 0,this.#iQ=!1},300);end(e){let{loop:t,ended:i}=this.$state;if(!(!t()&&i())){if(t()){setTimeout(()=>{requestAnimationFrame(()=>{this.#sr(e),this.dispatch("media-loop-request",{trigger:e})})},10);return}setTimeout(()=>this.#tb(e),0)}}#tb(e){let{storage:t}=this.#q,{paused:i,seeking:s,ended:a,duration:n}=this.$state;this.#sn(e),i()||this.dispatch("pause",{trigger:e}),s()&&this.dispatch("seeked",{detail:n(),trigger:e}),a.set(!0),this.#i0(),t?.setTime?.(n(),!0),this.dispatch("ended",{trigger:e})}#i1(){this.#sh.cancel(),this.$state.waiting.set(!1)}"fullscreen-change"(e){let t=e.detail;this.$state.fullscreen.set(t),this.#i2(t?"media-enter-fullscreen-request":"media-exit-fullscreen-request",e)}"fullscreen-error"(e){this.#i2("media-enter-fullscreen-request",e),this.#i2("media-exit-fullscreen-request",e)}"orientation-change"(e){let t=e.detail.lock;this.#i2(t?"media-orientation-lock-request":"media-orientation-unlock-request",e)}"picture-in-picture-change"(e){let t=e.detail;this.$state.pictureInPicture.set(t),this.#i2(t?"media-enter-pip-request":"media-exit-pip-request",e)}"picture-in-picture-error"(e){this.#i2("media-enter-pip-request",e),this.#i2("media-exit-pip-request",e)}"title-change"(e){e.trigger&&(e.stopImmediatePropagation(),this.$state.inferredTitle.set(e.detail))}"poster-change"(e){e.trigger&&(e.stopImmediatePropagation(),this.$state.inferredPoster.set(e.detail))}};let MediaStateSync=class MediaStateSync extends MediaPlayerController{onSetup(){if(this.#ey(),r)return;let e=[this.#sd,this.#su,this.#sc,this.#sp,this.#D,this.#sm,this.#sg,this.#sf,this.#sy,this.#sb,this.#sv,this.#sw,this.#sT,this.#sk,this.#sS];for(let t of e)(0,a.effect)(t.bind(this))}#ey(){let e={duration:"providedDuration",loop:"providedLoop",poster:"providedPoster",streamType:"providedStreamType",title:"providedTitle",viewType:"providedViewType"},t=new Set(["currentTime","paused","playbackRate","volume"]);for(let i of Object.keys(this.$props))t.has(i)||this.$state[e[i]??i]?.set(this.$props[i]());this.$state.muted.set(this.$props.muted()||0===this.$props.volume())}#sk(){let{viewType:e,streamType:t,title:i,poster:s,loop:a}=this.$props,n=this.$state;n.providedPoster.set(s()),n.providedStreamType.set(t()),n.providedViewType.set(e()),n.providedTitle.set(i()),n.providedLoop.set(a())}#sC(){}#sd(){let{artist:e,artwork:t}=this.$props;this.$state.artist.set(e()),this.$state.artwork.set(t())}#sS(){let{title:e}=this.$state;this.dispatch("title-change",{detail:e()})}#su(){let e=this.$props.autoPlay()||this.$props.autoplay();this.$state.autoPlay.set(e),this.dispatch("auto-play-change",{detail:e})}#sv(){let e=this.$state.loop();this.dispatch("loop-change",{detail:e})}#D(){let e=this.$props.controls();this.$state.controls.set(e)}#sT(){let{poster:e}=this.$state;this.dispatch("poster-change",{detail:e()})}#sm(){let e=this.$props.crossOrigin()??this.$props.crossorigin(),t=!0===e?"":e;this.$state.crossOrigin.set(t)}#sg(){let{duration:e}=this.$props;this.dispatch("media-duration-change-request",{detail:e()})}#sw(){let e=this.$props.playsInline()||this.$props.playsinline();this.$state.playsInline.set(e),this.dispatch("plays-inline-change",{detail:e})}#sc(){let{clipStartTime:e}=this.$props;this.dispatch("media-clip-start-change-request",{detail:e()})}#sp(){let{clipEndTime:e}=this.$props;this.dispatch("media-clip-end-change-request",{detail:e()})}#sf(){this.dispatch("live-change",{detail:this.$state.live()})}#sb(){this.$state.liveEdgeTolerance.set(this.$props.liveEdgeTolerance()),this.$state.minLiveDVRWindow.set(this.$props.minLiveDVRWindow())}#sy(){this.dispatch("live-edge-change",{detail:this.$state.liveEdge()})}};let eh=["play","pause","seekforward","seekbackward","seekto"];let NavigatorMediaSession=class NavigatorMediaSession extends MediaPlayerController{onConnect(){(0,a.effect)(this.#s$.bind(this)),(0,a.effect)(this.#sx.bind(this));let e=this.#sP.bind(this);for(let t of eh)navigator.mediaSession.setActionHandler(t,e);(0,a.onDispose)(this.#eE.bind(this))}#eE(){for(let e of eh)navigator.mediaSession.setActionHandler(e,null)}#s$(){let{title:e,artist:t,artwork:i,poster:s}=this.$state;navigator.mediaSession.metadata=new MediaMetadata({title:e(),artist:t(),artwork:i()??[{src:s()}]})}#sx(){let{canPlay:e,paused:t}=this.$state;navigator.mediaSession.playbackState=e()?t()?"paused":"playing":"none"}#sP(e){let t=new a.DOMEvent("media-session-action",{detail:e});switch(e.action){case"play":this.dispatch("media-play-request",{trigger:t});break;case"pause":this.dispatch("media-pause-request",{trigger:t});break;case"seekto":case"seekforward":case"seekbackward":this.dispatch("media-seek-request",{detail:(0,a.isNumber)(e.seekTime)?e.seekTime:this.$state.currentTime()+(e.seekOffset??("seekforward"===e.action?10:-10)),trigger:t})}}};let ed=(0,a.signal)(!1);r||((0,a.listenEvent)(document,"pointerdown",()=>{ed.set(!1)}),(0,a.listenEvent)(document,"keydown",e=>{e.metaKey||e.altKey||e.ctrlKey||ed.set(!0)}));let FocusVisibleController=class FocusVisibleController extends a.ViewController{#sA=(0,a.signal)(!1);onConnect(e){(0,a.effect)(()=>{let t=new a.EventsController(e);if(!ed()){this.#sA.set(!1),updateFocusAttr(e,!1),t.add("pointerenter",this.#sE.bind(this)).add("pointerleave",this.#sM.bind(this));return}let i=document.activeElement===e;this.#sA.set(i),updateFocusAttr(e,i),t.add("focus",this.#sq.bind(this)).add("blur",this.#sI.bind(this))})}focused(){return this.#sA()}#sq(){this.#sA.set(!0),updateFocusAttr(this.el,!0)}#sI(){this.#sA.set(!1),updateFocusAttr(this.el,!1)}#sE(){updateHoverAttr(this.el,!0)}#sM(){updateHoverAttr(this.el,!1)}};function updateFocusAttr(e,t){(0,a.setAttribute)(e,"data-focus",t),(0,a.setAttribute)(e,"data-hocus",t)}function updateHoverAttr(e,t){(0,a.setAttribute)(e,"data-hocus",t),(0,a.setAttribute)(e,"data-hover",t)}let MediaPlayer=class MediaPlayer extends a.Component{static props=eo;static state=M;#q;#ig;#sL;canPlayQueue=new RequestQueue;remoteControl;get #ej(){return this.#q.$provider()}get #sR(){return this.$props}constructor(){super(),new MediaStateSync;let e={player:this,qualities:new VideoQualityList,audioTracks:new AudioTrackList,storage:null,$provider:(0,a.signal)(null),$providerSetup:(0,a.signal)(!1),$props:this.$props,$state:this.$state};e.remote=this.remoteControl=new MediaRemoteControl(void 0),e.remote.setPlayer(this),e.textTracks=new TextTrackList,e.textTracks[A.crossOrigin]=this.$state.crossOrigin,e.textRenderers=new TextRenderers(e),e.ariaKeys={},this.#q=e,(0,a.provideContext)(L,e),this.orientation=new ScreenOrientationController,new FocusVisibleController,new MediaKeyboardController(e);let t=new MediaRequestContext;this.#ig=new MediaStateManager(t,e),this.#sL=new MediaRequestManager(this.#ig,t,e),e.delegate=new MediaPlayerDelegate(this.#ig.handle.bind(this.#ig),e),e.notify=e.delegate.notify.bind(e.delegate),"undefined"!=typeof navigator&&"mediaSession"in navigator&&new NavigatorMediaSession,new MediaLoadController("load",this.startLoading.bind(this)),new MediaLoadController("posterLoad",this.startLoadingPoster.bind(this))}onSetup(){this.#sD(),(0,a.effect)(this.#sV.bind(this)),(0,a.effect)(this.#sO.bind(this)),(0,a.effect)(this.#ev.bind(this)),(0,a.effect)(this.#sF.bind(this)),(0,a.effect)(this.#sN.bind(this)),(0,a.effect)(this.#sw.bind(this)),(0,a.effect)(this.#sB.bind(this))}onAttach(e){e.setAttribute("data-media-player",""),setAttributeIfEmpty(e,"tabindex","0"),setAttributeIfEmpty(e,"role","region"),(0,a.effect)(this.#sH.bind(this)),r?this.#sS():(0,a.effect)(this.#sS.bind(this)),r?this.#sG():(0,a.effect)(this.#sG.bind(this)),(0,a.listenEvent)(e,"find-media-player",this.#sK.bind(this))}onConnect(e){h&&(0,a.setAttribute)(e,"data-iphone","");let t=window.matchMedia("(pointer: coarse)");this.#sQ(t),t.onchange=this.#sQ.bind(this);let i=new ResizeObserver((0,a.animationFrameThrottle)(this.#sU.bind(this)));i.observe(e),(0,a.effect)(this.#sU.bind(this)),this.dispatch("media-player-connect",{detail:this,bubbles:!0,composed:!0}),(0,a.onDispose)(()=>{i.disconnect(),t.onchange=null})}onDestroy(){this.#q.player=null,this.canPlayQueue.reset()}#sW=!1;#sS(){let e=this.$el,{title:t,live:i,viewType:s,providedTitle:n}=this.$state,o=i(),l=(0,a.uppercaseFirstChar)(s()),h="Unknown"!==l?`${o?"Live ":""}${l}`:o?"Live":"Media",d=t();(0,a.setAttribute)(this.el,"aria-label",`${h} Player`+(d?` - ${d}`:"")),!r&&e?.hasAttribute("title")&&(this.#sW=!0,e?.removeAttribute("title"))}#sG(){let e=this.orientation.landscape?"landscape":"portrait";this.$state.orientation.set(e),(0,a.setAttribute)(this.el,"data-orientation",e),this.#sU()}#sV(){this.$state.canPlay()&&this.#ej?this.canPlayQueue.start():this.canPlayQueue.stop()}#sD(){if(MediaPlayer[en]){this.setAttributes(MediaPlayer[en]);return}let e={"data-load":function(){return this.$props.load()},"data-captions":function(){let e=this.$state.textTrack();return!!e&&isTrackCaptionKind(e)},"data-ios-controls":function(){return this.$state.iOSControls()},"data-controls":function(){return this.controls.showing},"data-buffering":function(){let{canLoad:e,canPlay:t,waiting:i}=this.$state;return e()&&(!t()||i())},"data-error":function(){let{error:e}=this.$state;return!!e()},"data-autoplay-error":function(){let{autoPlayError:e}=this.$state;return!!e()}},t={autoPlay:"autoplay",canAirPlay:"can-airplay",canPictureInPicture:"can-pip",pictureInPicture:"pip",playsInline:"playsinline",remotePlaybackState:"remote-state",remotePlaybackType:"remote-type",isAirPlayConnected:"airplay",isGoogleCastConnected:"google-cast"};for(let i of er){let s="data-"+(t[i]??(0,a.camelToKebabCase)(i));e[s]=function(){return this.$state[i]()}}delete e.title,MediaPlayer[en]=e,this.setAttributes(e)}#sK(e){e.detail(this)}#sU(){if(r||!this.el)return;let e=this.el.clientWidth,t=this.el.clientHeight;this.$state.width.set(e),this.$state.height.set(t),(0,a.setStyle)(this.el,"--player-width",e+"px"),(0,a.setStyle)(this.el,"--player-height",t+"px")}#sQ(e){if(r)return;let t=e.matches?"coarse":"fine";(0,a.setAttribute)(this.el,"data-pointer",t),this.$state.pointer.set(t),this.#sU()}get provider(){return this.#ej}get controls(){return this.#sL.controls}set controls(e){this.#sR.controls.set(e)}orientation;get title(){return(0,a.peek)(this.$state.title)}set title(e){if(this.#sW){this.#sW=!1;return}this.#sR.title.set(e)}get qualities(){return this.#q.qualities}get audioTracks(){return this.#q.audioTracks}get textTracks(){return this.#q.textTracks}get textRenderers(){return this.#q.textRenderers}get duration(){return this.$state.duration()}set duration(e){this.#sR.duration.set(e)}get paused(){return(0,a.peek)(this.$state.paused)}set paused(e){this.#sj(e)}#ev(){this.#sj(this.$props.paused())}#sj(e){e?this.canPlayQueue.enqueue("paused",()=>this.#sL.pause()):this.canPlayQueue.enqueue("paused",()=>this.#sL.play())}get muted(){return(0,a.peek)(this.$state.muted)}set muted(e){this.#s_(e)}#sO(){this.#s_(this.$props.muted())}#s_(e){this.canPlayQueue.enqueue("muted",()=>{this.#ej&&this.#ej.setMuted(e)})}get currentTime(){return(0,a.peek)(this.$state.currentTime)}set currentTime(e){this.#sz(e)}#sN(){this.#sz(this.$props.currentTime())}#sz(e){this.canPlayQueue.enqueue("currentTime",()=>{let{currentTime:t,clipStartTime:i,seekableStart:s,seekableEnd:n}=this.$state;e!==(0,a.peek)(t)&&(0,a.peek)(()=>{if(!this.#ej)return;let t=e+i(),a=Math.floor(e)===Math.floor(s()),r=Math.floor(t)===Math.floor(n()),o=a?s():r?n():Math.min(Math.max(s()+.1,t),n()-.1);Number.isFinite(o)&&this.#ej.setCurrentTime(o)})})}get volume(){return(0,a.peek)(this.$state.volume)}set volume(e){this.#sX(e)}#sF(){this.#sX(this.$props.volume())}#sX(e){let t=clampNumber(0,e,1);this.canPlayQueue.enqueue("volume",()=>{this.#ej&&this.#ej.setVolume(t)})}get playbackRate(){return(0,a.peek)(this.$state.playbackRate)}set playbackRate(e){this.#sY(e)}#sB(){this.#sY(this.$props.playbackRate())}#sY(e){this.canPlayQueue.enqueue("rate",()=>{this.#ej&&this.#ej.setPlaybackRate?.(e)})}#sw(){this.#sJ(this.$props.playsInline())}#sJ(e){this.canPlayQueue.enqueue("playsinline",()=>{this.#ej&&this.#ej.setPlaysInline?.(e)})}#sH(){let e=this.$props.storage(),t=(0,a.isString)(e)?new LocalMediaStorage:e;if(t?.onChange){let{source:i}=this.$state,s=(0,a.isString)(e)?e:this.el?.id,n=(0,a.computed)(this.#sZ.bind(this));(0,a.effect)(()=>t.onChange(i(),n(),s||void 0))}this.#q.storage=t,this.#q.textTracks.setStorage(t),(0,a.onDispose)(()=>{t?.onDestroy?.(),this.#q.storage=null,this.#q.textTracks.setStorage(null)})}#sZ(){let{clipStartTime:e,clipEndTime:t}=this.$props,{source:i}=this.$state,s=i();return s.src?`${s.src}:${e()}:${t()}`:null}async play(e){return this.#sL.play(e)}async pause(e){return this.#sL.pause(e)}async enterFullscreen(e,t){return this.#sL.enterFullscreen(e,t)}async exitFullscreen(e,t){return this.#sL.exitFullscreen(e,t)}enterPictureInPicture(e){return this.#sL.enterPictureInPicture(e)}exitPictureInPicture(e){return this.#sL.exitPictureInPicture(e)}seekToLiveEdge(e){this.#sL.seekToLiveEdge(e)}startLoading(e){this.#q.notify("can-load",void 0,e)}startLoadingPoster(e){this.#q.notify("can-load-poster",void 0,e)}requestAirPlay(e){return this.#sL.requestAirPlay(e)}requestGoogleCast(e){return this.#sL.requestGoogleCast(e)}setAudioGain(e,t){return this.#sL.setAudioGain(e,t)}destroy(){super.destroy(),this.#q.remote.setPlayer(null),this.dispatch("destroy")}};let eu=MediaPlayer.prototype;(0,a.prop)(eu,"canPlayQueue"),(0,a.prop)(eu,"remoteControl"),(0,a.prop)(eu,"provider"),(0,a.prop)(eu,"controls"),(0,a.prop)(eu,"orientation"),(0,a.prop)(eu,"title"),(0,a.prop)(eu,"qualities"),(0,a.prop)(eu,"audioTracks"),(0,a.prop)(eu,"textTracks"),(0,a.prop)(eu,"textRenderers"),(0,a.prop)(eu,"duration"),(0,a.prop)(eu,"paused"),(0,a.prop)(eu,"muted"),(0,a.prop)(eu,"currentTime"),(0,a.prop)(eu,"volume"),(0,a.prop)(eu,"playbackRate"),(0,a.method)(eu,"play"),(0,a.method)(eu,"pause"),(0,a.method)(eu,"enterFullscreen"),(0,a.method)(eu,"exitFullscreen"),(0,a.method)(eu,"enterPictureInPicture"),(0,a.method)(eu,"exitPictureInPicture"),(0,a.method)(eu,"seekToLiveEdge"),(0,a.method)(eu,"startLoading"),(0,a.method)(eu,"startLoadingPoster"),(0,a.method)(eu,"requestAirPlay"),(0,a.method)(eu,"requestGoogleCast"),(0,a.method)(eu,"setAudioGain");let ec=new Map;let SourceSelection=class SourceSelection{#s0=!1;#s1;#s2;#q;#s3;constructor(e,t,i,s=[]){this.#s2=e,this.#q=t,this.#s3=i;let n=new DASHProviderLoader,r=new HLSProviderLoader,o=new VideoProviderLoader,l=new AudioProviderLoader,h=new YouTubeProviderLoader,d=new VimeoProviderLoader,u=[h,d];this.#s1=(0,a.computed)(()=>{let e=t.$state.remotePlaybackLoader(),i=t.$props.preferNativeHLS()?[o,l,n,r,...u,...s]:[r,o,l,n,...u,...s];return e?[e,...i]:i});let{$state:c}=t;for(let e of(c.sources.set(normalizeSrc(t.$props.src())),c.sources())){let i=this.#s1().find(t=>t.canPlay(e));if(!i)continue;let s=i.mediaType(e);t.$state.source.set(e),t.$state.mediaType.set(s),t.$state.inferredViewType.set(s),this.#s3.set(i),this.#s0=!0;break}}connect(){let e=this.#s3();this.#s0&&(this.#s5(this.#q.$state.source(),e),this.#s4(e),this.#s0=!1),(0,a.effect)(this.#s9.bind(this)),(0,a.effect)(this.#s7.bind(this)),(0,a.effect)(this.#s6.bind(this)),(0,a.effect)(this.#s8.bind(this)),(0,a.effect)(this.#ae.bind(this))}#s9(){this.#q.notify("sources-change",[...normalizeSrc(this.#q.$props.src()),...this.#s2()])}#s7(){let{$state:e}=this.#q,t=e.sources(),i=(0,a.peek)(e.source),s=this.#at(i,t),n=t[0]?.src&&!s.src&&!s.type;if(n){let{crossOrigin:i}=e,s=getRequestCredentials(i()),n=new AbortController;return Promise.all(t.map(e=>(0,a.isString)(e.src)&&"?"===e.type?fetch(e.src,{method:"HEAD",credentials:s,signal:n.signal}).then(t=>(e.type=t.headers.get("content-type")||"??",ec.set(e.src,e.type),e)).catch(()=>e):e)).then(t=>{if(n.signal.aborted)return;let i=this.#at((0,a.peek)(e.source),t);(0,a.tick)(),i.src||this.#q.notify("error",{message:"Failed to load resource.",code:4})}),()=>n.abort()}(0,a.tick)()}#at(e,t){let i={src:"",type:""},s=null,n=new a.DOMEvent("sources-change",{detail:{sources:t}}),r=this.#s1(),{started:o,paused:l,currentTime:h,quality:d,savedState:u}=this.#q.$state;for(let e of t){let t=r.find(t=>t.canPlay(e));if(t){i=e,s=t;break}}if(isVideoQualitySrc(i)){let e=d(),s=t.find(t=>t.src===e?.src);(0,a.peek)(o)?u.set({paused:(0,a.peek)(l),currentTime:(0,a.peek)(h)}):u.set(null),s&&(i=s,n=new a.DOMEvent("quality-change",{detail:{quality:e}}))}return isSameSrc(e,i)||this.#s5(i,s,n),s!==(0,a.peek)(this.#s3)&&this.#s4(s,n),i}#s5(e,t,i){this.#q.notify("source-change",e,i),this.#q.notify("media-type-change",t?.mediaType(e)||"unknown",i)}#s4(e,t){this.#q.$providerSetup.set(!1),this.#q.notify("provider-change",null,t),e&&(0,a.peek)(()=>e.preconnect?.(this.#q)),this.#s3.set(e),this.#q.notify("provider-loader-change",e,t)}#s6(){let e=this.#q.$provider();if(!(!e||(0,a.peek)(this.#q.$providerSetup))){if(this.#q.$state.canLoad()){(0,a.scoped)(()=>e.setup(),e.scope),this.#q.$providerSetup.set(!0);return}(0,a.peek)(()=>e.preconnect?.())}}#s8(){if(!this.#q.$providerSetup())return;let e=this.#q.$provider(),t=this.#q.$state.source(),i=(0,a.peek)(this.#q.$state.crossOrigin),s=(0,a.peek)(this.#q.$props.preferNativeHLS);if(!isSameSrc(e?.currentSrc,t)){if(this.#q.$state.canLoad()){let o=new AbortController;if(isHLSSrc(t))(s||!isHLSSupported())&&(function resolveStreamTypeFromHLSManifest(e,t){return fetch(e,t).then(e=>e.text()).then(i=>{let s=function(e){let t=e.match(/#EXT-X-STREAM-INF:[^\n]+(\n[^\n]+)*/g);return t?t[0].split("\n")[1].trim():null}(i);if(s)return resolveStreamTypeFromHLSManifest(/^https?:/.test(s)?s:new URL(s,e).href,t);let a=/EXT-X-PLAYLIST-TYPE:\s*VOD/.test(i)?"on-demand":"live";return"live"===a&&function(e){let t=e.split("\n");for(let e of t)if(e.startsWith("#EXT-X-TARGETDURATION")){let t=parseFloat(e.split(":")[1]);if(!isNaN(t))return t}return -1}(i)>=10&&(/#EXT-X-DVR-ENABLED:\s*true/.test(i)||i.includes("#EXT-X-DISCONTINUITY"))?"live:dvr":a})})(t.src,{credentials:getRequestCredentials(i),signal:o.signal}).then(e=>{this.#q.notify("stream-type-change",e)}).catch(a.noop);else if(isDASHSrc(t)){var n,r;(n=t.src,r={credentials:getRequestCredentials(i),signal:o.signal},fetch(n,r).then(e=>e.text()).then(e=>/type="static"/.test(e)?"on-demand":"live")).then(e=>{this.#q.notify("stream-type-change",e)}).catch(a.noop)}else this.#q.notify("stream-type-change","on-demand");return(0,a.peek)(()=>{let i=(0,a.peek)(this.#q.$state.preload);return e?.loadSource(t,i).catch(e=>{})}),()=>o.abort()}try{(0,a.isString)(t.src)&&preconnect(new URL(t.src).origin)}catch(e){}}}#ae(){let e=this.#s3(),{providedPoster:t,source:i,canLoadPoster:s}=this.#q.$state;if(!e||!e.loadPoster||!i()||!s()||t())return;let n=new AbortController,r=new a.DOMEvent("source-change",{detail:i});return e.loadPoster(i(),this.#q,n).then(e=>{this.#q.notify("poster-change",e||"",r)}).catch(()=>{this.#q.notify("poster-change","",r)}),()=>{n.abort()}}};function normalizeSrc(e){return((0,a.isArray)(e)?e:[e]).map(e=>(0,a.isString)(e)?{src:e,type:inferType(e)}:{...e,type:inferType(e.src,e.type)})}function inferType(e,t){if((0,a.isString)(t)&&t.length)return t;if((0,a.isString)(e)&&ec.has(e))return ec.get(e);if(!t&&isHLSSrc({src:e,type:""}))return"application/x-mpegurl";if(!t&&isDASHSrc({src:e,type:""}))return"application/dash+xml";if(!(0,a.isString)(e)||e.startsWith("blob:"))return"video/object";if(e.includes("youtube")||e.includes("youtu.be"))return"video/youtube";if(e.includes("vimeo")&&!e.includes("progressive_redirect")&&!e.includes(".m3u8"))return"video/vimeo";return"?"}function isSameSrc(e,t){return e?.src===t?.src&&e?.type===t?.type}let Tracks=class Tracks{#ai;#q;#as=[];constructor(e,t){this.#ai=e,this.#q=t,(0,a.effect)(this.#aa.bind(this))}#aa(){let e=this.#ai();for(let t of this.#as)if(!e.some(e=>e.id===t.id)){let e=t.id&&this.#q.textTracks.getById(t.id);e&&this.#q.textTracks.remove(e)}for(let t of e){let e=t.id||TextTrack.createId(t);this.#q.textTracks.getById(e)||(t.id=e,this.#q.textTracks.add(t))}this.#as=e}};let MediaProvider=class MediaProvider extends a.Component{static props={loaders:[]};static state=new a.State({loader:null});#q;#an;#s2=(0,a.signal)([]);#ai=(0,a.signal)([]);#s3=null;onSetup(){this.#q=useMediaContext(),this.#an=new SourceSelection(this.#s2,this.#q,this.$state.loader,this.$props.loaders())}onAttach(e){e.setAttribute("data-media-provider","")}onConnect(e){this.#an.connect(),new Tracks(this.#ai,this.#q);let t=new ResizeObserver((0,a.animationFrameThrottle)(this.#sU.bind(this)));t.observe(e);let i=new MutationObserver(this.#ar.bind(this));i.observe(e,{attributes:!0,childList:!0}),this.#sU(),this.#ar(),(0,a.onDispose)(()=>{t.disconnect(),i.disconnect()})}#ao=-1;load(e){e?.setAttribute("aria-hidden","true"),window.cancelAnimationFrame(this.#ao),this.#ao=requestAnimationFrame(()=>this.#al(e)),(0,a.onDispose)(()=>{window.cancelAnimationFrame(this.#ao)})}#al(e){if(!this.scope)return;let t=this.$state.loader(),{$provider:i}=this.#q;!(this.#s3===t&&t?.target===e&&(0,a.peek)(i))&&(this.#ah(),this.#s3=t,t&&(t.target=e||null),t&&e&&t.load(this.#q).then(e=>{this.scope&&(0,a.peek)(this.$state.loader)===t&&this.#q.notify("provider-change",e)}))}onDestroy(){this.#s3=null,this.#ah()}#ah(){this.#q?.notify("provider-change",null)}#sU(){if(!this.el)return;let{player:e,$state:t}=this.#q,i=this.el.offsetWidth,s=this.el.offsetHeight;e&&(t.mediaWidth.set(i),t.mediaHeight.set(s),e.el&&((0,a.setStyle)(e.el,"--media-width",i+"px"),(0,a.setStyle)(e.el,"--media-height",s+"px")))}#ar(){let e=[],t=[],i=this.el.children;for(let s of i)if(!s.hasAttribute("data-vds")){if(s instanceof HTMLSourceElement){let t={id:s.id,src:s.src,type:s.type};for(let e of["id","src","width","height","bitrate","codec"]){let i=s.getAttribute(`data-${e}`);(0,a.isString)(i)&&(t[e]=/id|src|codec/.test(e)?i:Number(i))}e.push(t)}else if(s instanceof HTMLTrackElement){let e={src:s.src,kind:s.track.kind,language:s.srclang,label:s.label,default:s.default,type:s.getAttribute("data-type")};t.push({id:s.id||TextTrack.createId(e),...e})}}this.#s2.set(e),this.#ai.set(t),(0,a.tick)()}};let ep=MediaProvider.prototype;(0,a.method)(ep,"load");let MediaAnnouncer=class MediaAnnouncer extends a.Component{static props={translations:null};static state=new a.State({label:null,busy:!1});#q;#ad=!1;onSetup(){this.#q=useMediaContext()}onAttach(e){e.style.display="contents"}onConnect(e){e.setAttribute("data-media-announcer",""),setAttributeIfEmpty(e,"role","status"),setAttributeIfEmpty(e,"aria-live","polite");let{busy:t}=this.$state;this.setAttributes({"aria-busy":()=>t()?"true":null}),this.#ad=!0,(0,a.effect)(this.#ev.bind(this)),(0,a.effect)(this.#sF.bind(this)),(0,a.effect)(this.#au.bind(this)),(0,a.effect)(this.#ac.bind(this)),(0,a.effect)(this.#ap.bind(this)),(0,a.effect)(this.#am.bind(this)),(0,a.effect)(this.#ag.bind(this)),(0,a.tick)(),this.#ad=!1}#ev(){let{paused:e}=this.#q.$state;this.#af(e()?"Pause":"Play")}#ac(){let{fullscreen:e}=this.#q.$state;this.#af(e()?"Enter Fullscreen":"Exit Fullscreen")}#ap(){let{pictureInPicture:e}=this.#q.$state;this.#af(e()?"Enter PiP":"Exit PiP")}#au(){let{textTrack:e}=this.#q.$state;this.#af(e()?"Closed-Captions On":"Closed-Captions Off")}#sF(){let{muted:e,volume:t,audioGain:i}=this.#q.$state;this.#af(e()||0===t()?"Mute":`${Math.round(t()*(i()??1)*100)}% ${this.#ay("Volume")}`)}#ab=-1;#av=-1;#am(){let{seeking:e,currentTime:t}=this.#q.$state,i=e();this.#ab>0?(window.clearTimeout(this.#av),this.#av=window.setTimeout(()=>{if(!this.scope)return;let e=(0,a.peek)(t),i=Math.abs(e-this.#ab);if(i>=1){let t=e>=this.#ab,s=formatSpokenTime(i);this.#af(`${this.#ay(t?"Seek Forward":"Seek Backward")} ${s}`)}this.#ab=-1,this.#av=-1},300)):i&&(this.#ab=(0,a.peek)(t))}#ay(e){let{translations:t}=this.$props;return t?.()?.[e||""]??e}#ag(){let{label:e,busy:t}=this.$state,i=this.#ay(e());if(this.#ad)return;t.set(!0);let s=window.setTimeout(()=>void t.set(!1),150);return this.el&&(0,a.setAttribute)(this.el,"aria-label",i),(0,a.isString)(i)&&this.dispatch("change",{detail:i}),()=>window.clearTimeout(s)}#af(e){let{label:t}=this.$state;t.set(e)}};let Controls=class Controls extends a.Component{static props={hideDelay:2e3,hideOnMouseLeave:!1};#q;onSetup(){this.#q=useMediaContext(),(0,a.effect)(this.#aw.bind(this))}onAttach(e){let{pictureInPicture:t,fullscreen:i}=this.#q.$state;(0,a.setStyle)(e,"pointer-events","none"),setAttributeIfEmpty(e,"role","group"),this.setAttributes({"data-visible":this.#aT.bind(this),"data-fullscreen":i,"data-pip":t}),(0,a.effect)(()=>{this.dispatch("change",{detail:this.#aT()})}),(0,a.effect)(this.#ak.bind(this)),(0,a.effect)(()=>{let t=i();for(let i of["top","right","bottom","left"])(0,a.setStyle)(e,`padding-${i}`,t&&`env(safe-area-inset-${i})`)})}#ak(){if(!this.el)return;let{nativeControls:e}=this.#q.$state,t=e();(0,a.setAttribute)(this.el,"aria-hidden",t?"true":null),(0,a.setStyle)(this.el,"display",t?"none":null)}#aw(){let{controls:e}=this.#q.player,{hideDelay:t,hideOnMouseLeave:i}=this.$props;e.defaultDelay=2e3===t()?this.#q.$props.controlsDelay():t(),e.hideOnMouseLeave=i()}#aT(){let{controlsVisible:e}=this.#q.$state;return e()}};let ControlsGroup=class ControlsGroup extends a.Component{onAttach(e){e.style.pointerEvents||(0,a.setStyle)(e,"pointer-events","auto")}};let Popper=class Popper extends a.ViewController{#aS;constructor(e){super(),this.#aS=e,(0,a.effect)(this.#aC.bind(this))}onDestroy(){this.#a$?.(),this.#a$=null}#aC(){let e=this.#aS.trigger();if(!e){this.hide();return}let t=this.show.bind(this),i=this.hide.bind(this);this.#aS.listen(e,t,i)}#ax=-1;#aP=-1;#a$=null;show(e){this.#aA(),window.cancelAnimationFrame(this.#aP),this.#aP=-1,this.#a$?.(),this.#a$=null,this.#ax=window.setTimeout(()=>{this.#ax=-1;let t=this.#aS.content();t&&t.style.removeProperty("display"),(0,a.peek)(()=>this.#aS.onChange(!0,e))},this.#aS.showDelay?.()??0)}hide(e){this.#aA(),(0,a.peek)(()=>this.#aS.onChange(!1,e)),this.#aP=requestAnimationFrame(()=>{this.#aA(),this.#aP=-1;let e=this.#aS.content();if(e){let onHide=()=>{e.style.display="none",this.#a$=null},t=function(e){let t=getComputedStyle(e);return"none"!==t.animationName}(e);if(t){this.#a$?.();let t=(0,a.listenEvent)(e,"animationend",onHide,{once:!0});this.#a$=t}else onHide()}})}#aA(){window.clearTimeout(this.#ax),this.#ax=-1}};let em=(0,a.createContext)(),eg=0;let Tooltip=class Tooltip extends a.Component{static props={showDelay:700};#eQ=`media-tooltip-${++eg}`;#aE=(0,a.signal)(null);#aM=(0,a.signal)(null);#aq=(0,a.signal)(!1);constructor(){super(),new FocusVisibleController;let{showDelay:e}=this.$props;new Popper({trigger:this.#aE,content:this.#aM,showDelay:e,listen(e,t,i){(0,a.effect)(()=>{ed()&&(0,a.listenEvent)(e,"focus",t),(0,a.listenEvent)(e,"blur",i)}),new a.EventsController(e).add("touchstart",e=>e.preventDefault(),{passive:!1}).add("mouseenter",t).add("mouseleave",i)},onChange:this.#aI.bind(this)})}onAttach(e){e.style.setProperty("display","contents")}onSetup(){(0,a.provideContext)(em,{trigger:this.#aE,content:this.#aM,showing:this.#aq,attachTrigger:this.#aL.bind(this),detachTrigger:this.#aR.bind(this),attachContent:this.#aD.bind(this),detachContent:this.#aV.bind(this)})}#aL(e){this.#aE.set(e);let t=e.getAttribute("data-media-tooltip");t&&this.el?.setAttribute(`data-media-${t}-tooltip`,""),(0,a.setAttribute)(e,"data-describedby",this.#eQ)}#aR(e){e.removeAttribute("data-describedby"),e.removeAttribute("aria-describedby"),this.#aE.set(null)}#aD(e){e.setAttribute("id",this.#eQ),e.style.display="none",setAttributeIfEmpty(e,"role","tooltip"),this.#aM.set(e)}#aV(e){e.removeAttribute("id"),e.removeAttribute("role"),this.#aM.set(null)}#aI(e){let t=this.#aE(),i=this.#aM();for(let s of(t&&(0,a.setAttribute)(t,"aria-describedby",e?this.#eQ:null),[this.el,t,i]))s&&(0,a.setAttribute)(s,"data-visible",e);this.#aq.set(e)}};let TooltipTrigger=class TooltipTrigger extends a.Component{constructor(){super(),new FocusVisibleController}onConnect(e){(0,a.onDispose)(requestScopedAnimationFrame(()=>{if(!this.connectScope)return;this.#aO();let e=(0,a.useContext)(em);(0,a.onDispose)(()=>{let t=this.#aF();t&&e.detachTrigger(t)})}))}#aO(){let e=this.#aF(),t=(0,a.useContext)(em);e&&t.attachTrigger(e)}#aF(){let e=this.el.firstElementChild;return e?.localName==="button"||e?.getAttribute("role")==="button"?e:this.el}};let TooltipContent=class TooltipContent extends a.Component{static props={placement:"top center",offset:0,alignOffset:0};constructor(){super(),new FocusVisibleController;let{placement:e}=this.$props;this.setAttributes({"data-placement":e})}onAttach(e){this.#aO(e),Object.assign(e.style,{position:"absolute",top:0,left:0,width:"max-content"})}onConnect(e){this.#aO(e);let t=(0,a.useContext)(em);(0,a.onDispose)(()=>t.detachContent(e)),(0,a.onDispose)(requestScopedAnimationFrame(()=>{this.connectScope&&(0,a.effect)(this.#aN.bind(this))}))}#aO(e){let t=(0,a.useContext)(em);t.attachContent(e)}#aN(){let{showing:e}=(0,a.useContext)(em);if(!e())return;let{placement:t,offset:i,alignOffset:s}=this.$props;return autoPlacement(this.el,this.#aB(),t(),{offsetVarName:"media-tooltip",xOffset:s(),yOffset:i()})}#aB(){return(0,a.useContext)(em).trigger()}};let ToggleButtonController=class ToggleButtonController extends a.ViewController{static props={disabled:!1};#aS;constructor(e){super(),this.#aS=e,new FocusVisibleController,e.keyShortcut&&new ARIAKeyShortcuts(e.keyShortcut)}onSetup(){let{disabled:e}=this.$props;this.setAttributes({"data-pressed":this.#aS.isPresssed,"aria-pressed":this.#aH.bind(this),"aria-disabled":()=>e()?"true":null})}onAttach(e){setAttributeIfEmpty(e,"tabindex","0"),setAttributeIfEmpty(e,"role","button"),setAttributeIfEmpty(e,"type","button")}onConnect(e){let t=onPress(e,this.#aG.bind(this));for(let e of["click","touchstart"])t.add(e,this.#aK.bind(this),{passive:!0})}#aH(){return(0,a.ariaBool)(this.#aS.isPresssed())}#aQ(e){(0,a.isWriteSignal)(this.#aS.isPresssed)&&this.#aS.isPresssed.set(e=>!e)}#aG(e){let t=this.$props.disabled()||this.el.hasAttribute("data-disabled");if(t){e.preventDefault(),e.stopImmediatePropagation();return}e.preventDefault(),(this.#aS.onPress??this.#aQ).call(this,e)}#aK(e){this.$props.disabled()&&(e.preventDefault(),e.stopImmediatePropagation())}};let ToggleButton=class ToggleButton extends a.Component{static props={disabled:!1,defaultPressed:!1};#aU=(0,a.signal)(!1);get pressed(){return this.#aU()}constructor(){super(),new ToggleButtonController({isPresssed:this.#aU})}};let ef=ToggleButton.prototype;function $ariaBool(e){return()=>e()?"true":"false"}(0,a.prop)(ef,"pressed");let AirPlayButton=class AirPlayButton extends a.Component{static props=ToggleButtonController.props;#q;constructor(){super(),new ToggleButtonController({isPresssed:this.#aW.bind(this),onPress:this.#aj.bind(this)})}onSetup(){this.#q=useMediaContext();let{canAirPlay:e,isAirPlayConnected:t}=this.#q.$state;this.setAttributes({"data-active":t,"data-supported":e,"data-state":this.#a_.bind(this),"aria-hidden":$ariaBool(()=>!e())})}onAttach(e){e.setAttribute("data-media-tooltip","airplay"),setARIALabel(e,this.#az.bind(this))}#aj(e){let t=this.#q.remote;t.requestAirPlay(e)}#aW(){let{remotePlaybackType:e,remotePlaybackState:t}=this.#q.$state;return"airplay"===e()&&"disconnected"!==t()}#a_(){let{remotePlaybackType:e,remotePlaybackState:t}=this.#q.$state;return"airplay"===e()&&t()}#az(){let{remotePlaybackState:e}=this.#q.$state;return`AirPlay ${e()}`}};let GoogleCastButton=class GoogleCastButton extends a.Component{static props=ToggleButtonController.props;#q;constructor(){super(),new ToggleButtonController({isPresssed:this.#aW.bind(this),onPress:this.#aj.bind(this)})}onSetup(){this.#q=useMediaContext();let{canGoogleCast:e,isGoogleCastConnected:t}=this.#q.$state;this.setAttributes({"data-active":t,"data-supported":e,"data-state":this.#a_.bind(this),"aria-hidden":$ariaBool(()=>!e())})}onAttach(e){e.setAttribute("data-media-tooltip","google-cast"),setARIALabel(e,this.#az.bind(this))}#aj(e){let t=this.#q.remote;t.requestGoogleCast(e)}#aW(){let{remotePlaybackType:e,remotePlaybackState:t}=this.#q.$state;return"google-cast"===e()&&"disconnected"!==t()}#a_(){let{remotePlaybackType:e,remotePlaybackState:t}=this.#q.$state;return"google-cast"===e()&&t()}#az(){let{remotePlaybackState:e}=this.#q.$state;return`Google Cast ${e()}`}};let PlayButton=class PlayButton extends a.Component{static props=ToggleButtonController.props;#q;constructor(){super(),new ToggleButtonController({isPresssed:this.#aW.bind(this),keyShortcut:"togglePaused",onPress:this.#aj.bind(this)})}onSetup(){this.#q=useMediaContext();let{paused:e,ended:t}=this.#q.$state;this.setAttributes({"data-paused":e,"data-ended":t})}onAttach(e){e.setAttribute("data-media-tooltip","play"),setARIALabel(e,"Play")}#aj(e){let t=this.#q.remote;this.#aW()?t.pause(e):t.play(e)}#aW(){let{paused:e}=this.#q.$state;return!e()}};let CaptionButton=class CaptionButton extends a.Component{static props=ToggleButtonController.props;#q;constructor(){super(),new ToggleButtonController({isPresssed:this.#aW.bind(this),keyShortcut:"toggleCaptions",onPress:this.#aj.bind(this)})}onSetup(){this.#q=useMediaContext(),this.setAttributes({"data-active":this.#aW.bind(this),"data-supported":()=>!this.#aX(),"aria-hidden":$ariaBool(this.#aX.bind(this))})}onAttach(e){e.setAttribute("data-media-tooltip","caption"),setARIALabel(e,"Captions")}#aj(e){this.#q.remote.toggleCaptions(e)}#aW(){let{textTrack:e}=this.#q.$state,t=e();return!!t&&isTrackCaptionKind(t)}#aX(){let{hasCaptions:e}=this.#q.$state;return!e()}};let FullscreenButton=class FullscreenButton extends a.Component{static props={...ToggleButtonController.props,target:"prefer-media"};#q;constructor(){super(),new ToggleButtonController({isPresssed:this.#aW.bind(this),keyShortcut:"toggleFullscreen",onPress:this.#aj.bind(this)})}onSetup(){this.#q=useMediaContext();let{fullscreen:e}=this.#q.$state,t=this.#aY.bind(this);this.setAttributes({"data-active":e,"data-supported":t,"aria-hidden":$ariaBool(()=>!t())})}onAttach(e){e.setAttribute("data-media-tooltip","fullscreen"),setARIALabel(e,"Fullscreen")}#aj(e){let t=this.#q.remote,i=this.$props.target();this.#aW()?t.exitFullscreen(i,e):t.enterFullscreen(i,e)}#aW(){let{fullscreen:e}=this.#q.$state;return e()}#aY(){let{canFullscreen:e}=this.#q.$state;return e()}};let MuteButton=class MuteButton extends a.Component{static props=ToggleButtonController.props;#q;constructor(){super(),new ToggleButtonController({isPresssed:this.#aW.bind(this),keyShortcut:"toggleMuted",onPress:this.#aj.bind(this)})}onSetup(){this.#q=useMediaContext(),this.setAttributes({"data-muted":this.#aW.bind(this),"data-state":this.#a_.bind(this)})}onAttach(e){e.setAttribute("data-media-mute-button",""),e.setAttribute("data-media-tooltip","mute"),setARIALabel(e,"Mute")}#aj(e){let t=this.#q.remote;this.#aW()?t.unmute(e):t.mute(e)}#aW(){let{muted:e,volume:t}=this.#q.$state;return e()||0===t()}#a_(){let{muted:e,volume:t}=this.#q.$state,i=t();return e()||0===i?"muted":i>=.5?"high":i<.5?"low":void 0}};let PIPButton=class PIPButton extends a.Component{static props=ToggleButtonController.props;#q;constructor(){super(),new ToggleButtonController({isPresssed:this.#aW.bind(this),keyShortcut:"togglePictureInPicture",onPress:this.#aj.bind(this)})}onSetup(){this.#q=useMediaContext();let{pictureInPicture:e}=this.#q.$state,t=this.#aY.bind(this);this.setAttributes({"data-active":e,"data-supported":t,"aria-hidden":$ariaBool(()=>!t())})}onAttach(e){e.setAttribute("data-media-tooltip","pip"),setARIALabel(e,"PiP")}#aj(e){let t=this.#q.remote;this.#aW()?t.exitPictureInPicture(e):t.enterPictureInPicture(e)}#aW(){let{pictureInPicture:e}=this.#q.$state;return e()}#aY(){let{canPictureInPicture:e}=this.#q.$state;return e()}};let SeekButton=class SeekButton extends a.Component{static props={disabled:!1,seconds:30};#q;constructor(){super(),new FocusVisibleController}onSetup(){this.#q=useMediaContext();let{seeking:e}=this.#q.$state,{seconds:t}=this.$props,i=this.#aY.bind(this);this.setAttributes({seconds:t,"data-seeking":e,"data-supported":i,"aria-hidden":$ariaBool(()=>!i())})}onAttach(e){setAttributeIfEmpty(e,"tabindex","0"),setAttributeIfEmpty(e,"role","button"),setAttributeIfEmpty(e,"type","button"),e.setAttribute("data-media-tooltip","seek"),setARIALabel(e,this.#az.bind(this))}onConnect(e){onPress(e,this.#aj.bind(this))}#aY(){let{canSeek:e}=this.#q.$state;return e()}#az(){let{seconds:e}=this.$props;return`Seek ${e()>0?"forward":"backward"} ${e()} seconds`}#aj(e){let{seconds:t,disabled:i}=this.$props;if(i())return;let{currentTime:s}=this.#q.$state,a=s()+t();this.#q.remote.seek(a,e)}};let LiveButton=class LiveButton extends a.Component{static props={disabled:!1};#q;constructor(){super(),new FocusVisibleController}onSetup(){this.#q=useMediaContext();let{disabled:e}=this.$props,{live:t,liveEdge:i}=this.#q.$state,isHidden=()=>!t();this.setAttributes({"data-edge":i,"data-hidden":isHidden,"aria-disabled":$ariaBool(()=>e()||i()),"aria-hidden":$ariaBool(isHidden)})}onAttach(e){setAttributeIfEmpty(e,"tabindex","0"),setAttributeIfEmpty(e,"role","button"),setAttributeIfEmpty(e,"type","button"),e.setAttribute("data-media-tooltip","live")}onConnect(e){onPress(e,this.#aj.bind(this))}#aj(e){let{disabled:t}=this.$props,{liveEdge:i}=this.#q.$state;t()||i()||this.#q.remote.seekToLiveEdge(e)}};let ey=new a.State({min:0,max:100,value:0,step:1,pointerValue:0,focused:!1,dragging:!1,pointing:!1,hidden:!1,get active(){return this.dragging||this.focused||this.pointing},get fillRate(){return calcRate(this.min,this.max,this.value)},get fillPercent(){return 100*this.fillRate},get pointerRate(){return calcRate(this.min,this.max,this.pointerValue)},get pointerPercent(){return 100*this.pointerRate}});function calcRate(e,t,i){let s=t-e;return s>0?(i-e)/s:0}let IntersectionObserverController=class IntersectionObserverController extends a.ViewController{#ey;#aJ;constructor(e){super(),this.#ey=e}onConnect(e){this.#aJ=new IntersectionObserver(e=>{this.#ey.callback?.(e,this.#aJ)},this.#ey),this.#aJ.observe(e),(0,a.onDispose)(this.#eE.bind(this))}#eE(){this.#aJ?.disconnect(),this.#aJ=void 0}};let eb=(0,a.createContext)(),ev=(0,a.createContext)(),ew={Left:-1,ArrowLeft:-1,Up:1,ArrowUp:1,Right:1,ArrowRight:1,Down:-1,ArrowDown:-1};let SliderEventsController=class SliderEventsController extends a.ViewController{#aS;#q;#aJ;constructor(e,t){super(),this.#aS=e,this.#q=t}onSetup(){(0,a.hasProvidedContext)(ev)&&(this.#aJ=(0,a.useContext)(ev))}onConnect(e){(0,a.effect)(this.#aZ.bind(this,e)),(0,a.effect)(this.#a0.bind(this,e)),this.#aS.swipeGesture&&(0,a.effect)(this.#a1.bind(this))}#a1(){let{pointer:e}=this.#q.$state;if("coarse"!==e()||!this.#aS.swipeGesture()){this.#ej=null;return}this.#ej=this.#q.player.el?.querySelector("media-provider,[data-media-provider]"),this.#ej&&new a.EventsController(this.#ej).add("touchstart",this.#a2.bind(this),{passive:!0}).add("touchmove",this.#a3.bind(this),{passive:!1})}#ej=null;#a5=null;#a4=null;#a2(e){this.#a5=e.touches[0]}#a3(e){if((0,a.isNull)(this.#a5)||isTouchPinchEvent(e))return;let t=e.touches[0],i=t.clientX-this.#a5.clientX,s=t.clientY-this.#a5.clientY,n=this.$state.dragging();!n&&Math.abs(s)>5||n||(e.preventDefault(),Math.abs(i)>20&&(this.#a5=t,this.#a4=this.$state.value(),this.#a9(this.#a4,e)))}#aZ(e){let{hidden:t}=this.$props;new a.EventsController(e).add("focus",this.#sq.bind(this)).add("keyup",this.#Z.bind(this)).add("keydown",this.#ee.bind(this)),t()||this.#aS.isDisabled()||new a.EventsController(e).add("pointerenter",this.#sE.bind(this)).add("pointermove",this.#a7.bind(this)).add("pointerleave",this.#sM.bind(this)).add("pointerdown",this.#a6.bind(this))}#a0(e){!this.#aS.isDisabled()&&this.$state.dragging()&&new a.EventsController(document).add("pointerup",this.#a8.bind(this),{capture:!0}).add("pointermove",this.#ne.bind(this)).add("touchmove",this.#nt.bind(this),{passive:!1})}#sq(){this.#ni(this.$state.value())}#ns(e,t){let{value:i,min:s,max:a,dragging:n}=this.$state,r=Math.max(s(),Math.min(e,a()));i.set(r);let o=this.createEvent("value-change",{detail:r,trigger:t});if(this.dispatch(o),this.#aS.onValueChange?.(o),n()){let e=this.createEvent("drag-value-change",{detail:r,trigger:t});this.dispatch(e),this.#aS.onDragValueChange?.(e)}}#ni(e,t){let{pointerValue:i,dragging:s}=this.$state;i.set(e),this.dispatch("pointer-value-change",{detail:e,trigger:t}),s()&&this.#ns(e,t)}#na(e){let t,i=this.el.getBoundingClientRect(),{min:s,max:n}=this.$state;if("vertical"===this.$props.orientation()){let{bottom:s,height:a}=i;t=(s-e.clientY)/a}else if(this.#a5&&(0,a.isNumber)(this.#a4)){let{width:i}=this.#ej.getBoundingClientRect(),a=(e.clientX-this.#a5.clientX)/i,r=n()-s(),o=r*Math.abs(a);t=(a<0?this.#a4-o:this.#a4+o)/r}else{let{left:s,width:a}=i;t=(e.clientX-s)/a}return Math.max(s(),Math.min(n(),this.#aS.roundValue(function(e,t,i,s){let a=clampNumber(0,i,1);return e+s*Math.round((t-e)*a/s)}(s(),n(),t,this.#aS.getStep()))))}#sE(e){this.$state.pointing.set(!0)}#a7(e){let{dragging:t}=this.$state;t()||this.#ni(this.#na(e),e)}#sM(e){this.$state.pointing.set(!1)}#a6(e){if(0!==e.button)return;let t=this.#na(e);this.#a9(t,e),this.#ni(t,e)}#a9(e,t){let{dragging:i}=this.$state;if(i())return;i.set(!0),this.#q.remote.pauseControls(t);let s=this.createEvent("drag-start",{detail:e,trigger:t});this.dispatch(s),this.#aS.onDragStart?.(s),this.#aJ?.onDragStart?.()}#nn(e,t){let{dragging:i}=this.$state;if(!i())return;i.set(!1),this.#q.remote.resumeControls(t);let s=this.createEvent("drag-end",{detail:e,trigger:t});this.dispatch(s),this.#aS.onDragEnd?.(s),this.#a5=null,this.#a4=null,this.#aJ?.onDragEnd?.()}#nr;#no=!1;#ee(e){let t=Object.keys(ew).includes(e.key);if(!t)return;let{key:i}=e,s=this.#nl(e);if(!(0,a.isNull)(s)){this.#ni(s,e),this.#ns(s,e);return}let n=this.#nh(e);this.#no||(this.#no=i===this.#nr,!this.$state.dragging()&&this.#no&&this.#a9(n,e)),this.#ni(n,e),this.#nr=i}#Z(e){let t=Object.keys(ew).includes(e.key);if(!t||!(0,a.isNull)(this.#nl(e)))return;let i=this.#no?this.$state.pointerValue():this.#nh(e);this.#ns(i,e),this.#nn(i,e),this.#nr="",this.#no=!1}#nl(e){let t=e.key,{min:i,max:s}=this.$state;return"Home"===t||"PageUp"===t?i():"End"===t||"PageDown"===t?s():!e.metaKey&&/^[0-9]$/.test(t)?(s()-i())/10*Number(t):null}#nh(e){let{key:t,shiftKey:i}=e;e.preventDefault(),e.stopPropagation();let{shiftKeyMultiplier:s}=this.$props,{min:a,max:n,value:r,pointerValue:o}=this.$state,l=this.#aS.getStep(),h=this.#aS.getKeyStep(),d=i?h*s():h,u=Number(ew[t]),c=this.#no?o():this.#aS.getValue?.()??r();return Math.max(a(),Math.min(n(),Number((l*((c+d*u)/l)).toFixed(3))))}#a8(e){if(0!==e.button)return;e.preventDefault(),e.stopImmediatePropagation();let t=this.#na(e);this.#ni(t,e),this.#nn(t,e)}#nt(e){e.preventDefault()}#ne=(0,a.functionThrottle)(e=>{this.#ni(this.#na(e),e)},20,{leading:!0})};let eT=(0,a.createContext)(()=>({}));let SliderController=class SliderController extends a.ViewController{static props={hidden:!1,disabled:!1,step:1,keyStep:1,orientation:"horizontal",shiftKeyMultiplier:5};#q;#aS;#nd=(0,a.signal)(!0);#nu=(0,a.signal)(!0);constructor(e){super(),this.#aS=e}onSetup(){this.#q=useMediaContext();let e=new FocusVisibleController;e.attach(this),this.$state.focused=e.focused.bind(e),(0,a.hasProvidedContext)(eT)||(0,a.provideContext)(eT,{default:"value"}),(0,a.provideContext)(eb,{orientation:this.$props.orientation,disabled:this.#aS.isDisabled,preview:(0,a.signal)(null)}),(0,a.effect)(this.#nc.bind(this)),(0,a.effect)(this.#np.bind(this)),(0,a.effect)(this.#nm.bind(this)),this.#ng(),new SliderEventsController(this.#aS,this.#q).attach(this),new IntersectionObserverController({callback:this.#nf.bind(this)}).attach(this)}onAttach(e){setAttributeIfEmpty(e,"role","slider"),setAttributeIfEmpty(e,"tabindex","0"),setAttributeIfEmpty(e,"autocomplete","off"),r?this.#ny():(0,a.effect)(this.#ny.bind(this))}onConnect(e){(0,a.onDispose)(observeVisibility(e,this.#nd.set)),(0,a.effect)(this.#nb.bind(this))}#nf(e){this.#nu.set(e[0].isIntersecting)}#nb(){let{hidden:e}=this.$props;this.$state.hidden.set(e()||!this.#nd()||!this.#nu.bind(this))}#nc(){let{dragging:e,value:t,min:i,max:s}=this.$state;if(!(0,a.peek)(e)){var n,r;t.set((n=i(),r=s(),clampNumber(n,round(t(),getNumberOfDecimalPlaces(this.#aS.getStep())),r)))}}#np(){this.$state.step.set(this.#aS.getStep())}#nm(){if(!this.#aS.isDisabled())return;let{dragging:e,pointing:t}=this.$state;e.set(!1),t.set(!1)}#nv(){return(0,a.ariaBool)(this.#aS.isDisabled())}#ng(){let{orientation:e}=this.$props,{dragging:t,active:i,pointing:s}=this.$state;this.setAttributes({"data-dragging":t,"data-pointing":s,"data-active":i,"aria-disabled":this.#nv.bind(this),"aria-valuemin":this.#aS.aria.valueMin??this.$state.min,"aria-valuemax":this.#aS.aria.valueMax??this.$state.max,"aria-valuenow":this.#aS.aria.valueNow,"aria-valuetext":this.#aS.aria.valueText,"aria-orientation":e})}#ny(){let{fillPercent:e,pointerPercent:t}=this.$state;this.#nw(round(e(),3),round(t(),3))}#nw=(0,a.animationFrameThrottle)((e,t)=>{this.el?.style.setProperty("--slider-fill",e+"%"),this.el?.style.setProperty("--slider-pointer",t+"%")})};let Slider=class Slider extends a.Component{static props={...SliderController.props,min:0,max:100,value:0};static state=ey;constructor(){super(),new SliderController({getStep:this.$props.step,getKeyStep:this.$props.keyStep,roundValue:Math.round,isDisabled:this.$props.disabled,aria:{valueNow:this.#nT.bind(this),valueText:this.#nk.bind(this)}})}onSetup(){(0,a.effect)(this.#nc.bind(this)),(0,a.effect)(this.#nS.bind(this))}#nT(){let{value:e}=this.$state;return Math.round(e())}#nk(){let{value:e,max:t}=this.$state;return round(e()/t()*100,2)+"%"}#nc(){let{value:e}=this.$props;this.$state.value.set(e())}#nS(){let{min:e,max:t}=this.$props;this.$state.min.set(e()),this.$state.max.set(t())}};let ek=new Map,eS=new Map;let ThumbnailsLoader=class ThumbnailsLoader{#q;#nC;#n$;$images=(0,a.signal)([]);static create(e,t){let i=useMediaContext();return new ThumbnailsLoader(e,t,i)}constructor(e,t,i){this.#nC=e,this.#n$=t,this.#q=i,(0,a.effect)(this.#nx.bind(this))}#nx(){let{canLoad:e}=this.#q.$state;if(!e())return;let t=this.#nC();if(t){if((0,a.isString)(t)&&ek.has(t)){let e=ek.get(t);if(ek.delete(t),ek.set(t,e),ek.size>99){let e=ek.keys().next().value;ek.delete(e)}this.$images.set(ek.get(t))}else if((0,a.isString)(t)){let e=this.#n$(),s=t+"::"+e;if(!eS.has(s)){let n=new Promise(async(s,n)=>{try{let r=await fetch(t,{credentials:getRequestCredentials(e)}),o="application/json"===r.headers.get("content-type");if(o){let e=await r.json();if((0,a.isArray)(e)){if(e[0]&&"text"in e[0])s(this.#nP(e));else{for(let t=0;t<e.length;t++){let i=e[t];assert((0,a.isObject)(i),!1),assert("url"in i&&(0,a.isString)(i.url),!1),assert("startTime"in i&&(0,a.isNumber)(i.startTime),!1)}s(e)}}else s(this.#nA(e));return}i.e(409).then(i.bind(i,409)).then(async({parseResponse:e})=>{try{let{cues:t}=await e(r);s(this.#nP(t))}catch(e){n(e)}})}catch(e){n(e)}}).then(e=>(ek.set(s,e),e)).catch(e=>{this.#eA(t,e)}).finally(()=>{(0,a.isString)(s)&&eS.delete(s)});eS.set(s,n)}eS.get(s)?.then(e=>{this.$images.set(e||[])})}else if((0,a.isArray)(t))try{this.$images.set(this.#nE(t))}catch(e){this.#eA(t,e)}else try{this.$images.set(this.#nA(t))}catch(e){this.#eA(t,e)}return()=>{this.$images.set([])}}}#nE(e){let t=this.#nM();return e.map((e,i)=>(assert(e.url&&(0,a.isString)(e.url)),assert("startTime"in e&&(0,a.isNumber)(e.startTime)),{...e,url:(0,a.isString)(e.url)?this.#nq(e.url,t):e.url}))}#nA(e){assert((0,a.isString)(e.url)),assert((0,a.isArray)(e.tiles)&&e.tiles?.length);let t=new URL(e.url),i=[],s="tile_width"in e?e.tile_width:e.tileWidth,n="tile_height"in e?e.tile_height:e.tileHeight;for(let a of e.tiles)i.push({url:t,startTime:"start"in a?a.start:a.startTime,width:s,height:n,coords:{x:a.x,y:a.y}});return i}#nP(e){for(let t=0;t<e.length;t++){let i=e[t];assert("startTime"in i&&(0,a.isNumber)(i.startTime)),assert("text"in i&&(0,a.isString)(i.text))}let t=[],i=this.#nM();for(let s of e){let[e,n]=s.text.split("#"),r=this.#nI(n);t.push({url:this.#nq(e,i),startTime:s.startTime,endTime:s.endTime,width:r?.w,height:r?.h,coords:r&&(0,a.isNumber)(r.x)&&(0,a.isNumber)(r.y)?{x:r.x,y:r.y}:void 0})}return t}#nM(){let e=(0,a.peek)(this.#nC);return(0,a.isString)(e)&&/^https?:/.test(e)?e:location.href}#nq(e,t){return/^https?:/.test(e)?new URL(e):new URL(e,t)}#nI(e){if(!e)return{};let[t,i]=e.split("="),s=i?.split(","),a={};if(!t||!s)return null;for(let e=0;e<t.length;e++){let i=+s[e];isNaN(i)||(a[t[e]]=i)}return a}#eA(e,t){}};let Thumbnail=class Thumbnail extends a.Component{static props={src:null,time:0,crossOrigin:null};static state=new a.State({src:"",img:null,thumbnails:[],activeThumbnail:null,crossOrigin:null,loading:!1,error:null,hidden:!1});media;#s3;#nL=[];onSetup(){this.media=useMediaContext(),this.#s3=ThumbnailsLoader.create(this.$props.src,this.$state.crossOrigin),this.#sm(),this.setAttributes({"data-loading":this.#nR.bind(this),"data-error":this.#nD.bind(this),"data-hidden":this.$state.hidden,"aria-hidden":$ariaBool(this.$state.hidden)})}onConnect(e){(0,a.effect)(this.#nV.bind(this)),(0,a.effect)(this.#nb.bind(this)),(0,a.effect)(this.#sm.bind(this)),(0,a.effect)(this.#te.bind(this)),(0,a.effect)(this.#nO.bind(this)),(0,a.effect)(this.#nF.bind(this))}#nV(){let e=this.$state.img();e&&new a.EventsController(e).add("load",this.#ii.bind(this)).add("error",this.#eA.bind(this))}#sm(){let{crossOrigin:e}=this.$props,{crossOrigin:t}=this.$state,{crossOrigin:i}=this.media.$state,s=null!==e()?e():i();t.set(!0===s?"anonymous":s)}#te(){let{src:e,loading:t,error:i}=this.$state;return e()&&(t.set(!0),i.set(null)),()=>{this.#nN(),t.set(!1),i.set(null)}}#ii(){let{loading:e,error:t}=this.$state;this.#nF(),e.set(!1),t.set(null)}#eA(e){let{loading:t,error:i}=this.$state;t.set(!1),i.set(e)}#nR(){let{loading:e,hidden:t}=this.$state;return!t()&&e()}#nD(){let{error:e}=this.$state;return!(0,a.isNull)(e())}#nb(){let{hidden:e}=this.$state,{duration:t}=this.media.$state,i=this.#s3.$images();e.set(this.#nD()||!Number.isFinite(t())||0===i.length)}getTime(){return this.$props.time()}#nO(){let e=this.#s3.$images();if(!e.length)return;let t=this.getTime(),{src:i,activeThumbnail:s}=this.$state,a=-1,n=null;for(let i=e.length-1;i>=0;i--){let s=e[i];if(t>=s.startTime&&(!s.endTime||t<s.endTime)){a=i;break}}e[a]&&(n=e[a]),s.set(n),i.set(n?.url.href||"")}#nF(){if(!this.scope||this.$state.hidden())return;let e=this.el,t=this.$state.img(),i=this.$state.activeThumbnail();if(!t||!i||!e)return;let s=i.width??t.naturalWidth,a=i?.height??t.naturalHeight,{maxWidth:n,maxHeight:r,minWidth:o,minHeight:l,width:h,height:d}=getComputedStyle(this.el);"100%"===o&&(o=parseFloat(h)+""),"100%"===l&&(l=parseFloat(d)+"");let u=Math.max(parseInt(o)/s,parseInt(l)/a),c=Math.min(Math.max(parseInt(o),parseInt(n))/s,Math.max(parseInt(l),parseInt(r))/a),p=!isNaN(c)&&c<1?c:u>1?u:1;this.#nB(e,"--thumbnail-width",`${s*p}px`),this.#nB(e,"--thumbnail-height",`${a*p}px`),this.#nB(t,"width",`${t.naturalWidth*p}px`),this.#nB(t,"height",`${t.naturalHeight*p}px`),this.#nB(t,"transform",i.coords?`translate(-${i.coords.x*p}px, -${i.coords.y*p}px)`:""),this.#nB(t,"max-width","none")}#nB(e,t,i){e.style.setProperty(t,i),this.#nL.push(()=>e.style.removeProperty(t))}#nN(){for(let e of this.#nL)e();this.#nL=[]}};let SliderThumbnail=class SliderThumbnail extends Thumbnail{#nH;onAttach(e){this.#nH=(0,a.useState)(Slider.state)}getTime(){let{duration:e,clipStartTime:t}=this.media.$state;return t()+this.#nH.pointerRate()*e()}};let SliderVideo=class SliderVideo extends a.Component{static props={src:null,crossOrigin:null};static state=new a.State({video:null,src:null,crossOrigin:null,canPlay:!1,error:null,hidden:!1});#q;#nH;get video(){return this.$state.video()}onSetup(){this.#q=useMediaContext(),this.#nH=(0,a.useState)(Slider.state),this.#sm(),this.setAttributes({"data-loading":this.#nR.bind(this),"data-hidden":this.$state.hidden,"data-error":this.#nD.bind(this),"aria-hidden":$ariaBool(this.$state.hidden)})}onAttach(e){(0,a.effect)(this.#nG.bind(this)),(0,a.effect)(this.#nK.bind(this)),(0,a.effect)(this.#sm.bind(this)),(0,a.effect)(this.#nb.bind(this)),(0,a.effect)(this.#nQ.bind(this)),(0,a.effect)(this.#nU.bind(this))}#nG(){let e=this.$state.video();e&&(e.readyState>=2&&this.#to(),new a.EventsController(e).add("canplay",this.#to.bind(this)).add("error",this.#eA.bind(this)))}#nK(){let{src:e}=this.$state,{canLoad:t}=this.#q.$state;e.set(t()?this.$props.src():null)}#sm(){let{crossOrigin:e}=this.$props,{crossOrigin:t}=this.$state,{crossOrigin:i}=this.#q.$state,s=null!==e()?e():i();t.set(!0===s?"anonymous":s)}#nR(){let{canPlay:e,hidden:t}=this.$state;return!e()&&!t()}#nD(){let{error:e}=this.$state;return!(0,a.isNull)(e)}#nb(){let{src:e,hidden:t}=this.$state,{canLoad:i,duration:s}=this.#q.$state;t.set(i()&&(!e()||this.#nD()||!Number.isFinite(s())))}#nQ(){let{src:e,canPlay:t,error:i}=this.$state;e(),t.set(!1),i.set(null)}#to(e){let{canPlay:t,error:i}=this.$state;t.set(!0),i.set(null),this.dispatch("can-play",{trigger:e})}#eA(e){let{canPlay:t,error:i}=this.$state;t.set(!1),i.set(e),this.dispatch("error",{trigger:e})}#nU(){let{video:e,canPlay:t}=this.$state,{duration:i}=this.#q.$state,{pointerRate:s}=this.#nH,a=e(),n=t()&&a&&Number.isFinite(i())&&Number.isFinite(s());n&&(a.currentTime=s()*i())}};let eC=SliderVideo.prototype;(0,a.prop)(eC,"video");let SliderValue=class SliderValue extends a.Component{static props={type:"pointer",format:null,showHours:!1,showMs:!1,padHours:null,padMinutes:null,decimalPlaces:2};#nW;#nj;#nH;onSetup(){this.#nH=(0,a.useState)(Slider.state),this.#nW=(0,a.useContext)(eT),this.#nj=(0,a.computed)(this.getValueText.bind(this))}getValueText(){let{type:e,format:t,decimalPlaces:i,padHours:s,padMinutes:a,showHours:n,showMs:r}=this.$props,{value:o,pointerValue:l,min:h,max:d}=this.#nH,u=t?.()??this.#nW.default,c="current"===e()?o():l();if("percent"===u){let e=d()-h(),t=c/e*100;return(this.#nW.percent??round)(t,i())+"%"}return"time"===u?(this.#nW.time??formatTime)(c,{padHrs:s(),padMins:a(),showHrs:n(),showMs:r()}):(this.#nW.value?.(c)??c.toFixed(2))+""}};let e$=SliderValue.prototype;(0,a.method)(e$,"getValueText");let SliderPreview=class SliderPreview extends a.Component{static props={offset:0,noClamp:!1};#nH;onSetup(){this.#nH=(0,a.useContext)(eb);let{active:e}=(0,a.useState)(Slider.state);this.setAttributes({"data-visible":e})}onAttach(e){Object.assign(e.style,{position:"absolute",top:0,left:0,width:"max-content"})}onConnect(e){let{preview:t}=this.#nH;t.set(e),(0,a.onDispose)(()=>t.set(null)),(0,a.effect)(this.#n_.bind(this));let i=new ResizeObserver(this.#n_.bind(this));i.observe(e),(0,a.onDispose)(()=>i.disconnect())}#n_=(0,a.animationFrameThrottle)(()=>{let{disabled:e,orientation:t}=this.#nH;if(e())return;let i=this.el,{offset:s,noClamp:a}=this.$props;i&&function(e,{clamp:t,offset:i,orientation:s}){let a=getComputedStyle(e),n=parseFloat(a.width),r=parseFloat(a.height),o={top:null,right:null,bottom:null,left:null};if(o["horizontal"===s?"bottom":"left"]=`calc(100% + var(--media-slider-preview-offset, ${i}px))`,"horizontal"===s){let e=n/2;if(t){let t=`max(0px, calc(var(--slider-pointer) - ${e}px))`,i=`calc(100% - ${n}px)`;o.left=`min(${t}, ${i})`}else o.left=`calc(var(--slider-pointer) - ${e}px)`}else{let e=r/2;if(t){let t=`max(${e}px, calc(var(--slider-pointer) - ${e}px))`,i=`calc(100% - ${r}px)`;o.bottom=`min(${t}, ${i})`}else o.bottom=`calc(var(--slider-pointer) - ${e}px)`}Object.assign(e.style,o)}(i,{clamp:!a(),offset:s(),orientation:t()})})};let VolumeSlider=class VolumeSlider extends a.Component{static props={...SliderController.props,keyStep:5,shiftKeyMultiplier:2};static state=ey;#q;onSetup(){this.#q=useMediaContext();let{audioGain:e}=this.#q.$state;(0,a.provideContext)(eT,{default:"percent",value:t=>(t*(e()??1)).toFixed(2),percent:t=>Math.round(t*(e()??1))}),new SliderController({getStep:this.$props.step,getKeyStep:this.$props.keyStep,roundValue:Math.round,isDisabled:this.#nz.bind(this),aria:{valueMax:this.#nX.bind(this),valueNow:this.#nT.bind(this),valueText:this.#nk.bind(this)},onDragValueChange:this.#nY.bind(this),onValueChange:this.#nJ.bind(this)}).attach(this),(0,a.effect)(this.#sF.bind(this))}onAttach(e){e.setAttribute("data-media-volume-slider",""),setAttributeIfEmpty(e,"aria-label","Volume");let{canSetVolume:t}=this.#q.$state;this.setAttributes({"data-supported":t,"aria-hidden":$ariaBool(()=>!t())})}#nT(){let{value:e}=this.$state,{audioGain:t}=this.#q.$state;return Math.round(e()*(t()??1))}#nk(){let{value:e,max:t}=this.$state,{audioGain:i}=this.#q.$state;return round(e()/t()*(i()??1)*100,2)+"%"}#nX(){let{audioGain:e}=this.#q.$state;return this.$state.max()*(e()??1)}#nz(){let{disabled:e}=this.$props,{canSetVolume:t}=this.#q.$state;return e()||!t()}#sF(){let{muted:e,volume:t}=this.#q.$state,i=e()?0:100*t();this.$state.value.set(i),this.dispatch("value-change",{detail:i})}#nZ=(0,a.functionThrottle)(this.#ts.bind(this),25);#ts(e){if(!e.trigger)return;let t=round(e.detail/100,3);this.#q.remote.changeVolume(t,e)}#nJ(e){this.#nZ(e)}#nY(e){this.#nZ(e)}};let AudioGainSlider=class AudioGainSlider extends a.Component{static props={...SliderController.props,step:25,keyStep:25,shiftKeyMultiplier:2,min:0,max:300};static state=ey;#q;onSetup(){this.#q=useMediaContext(),(0,a.provideContext)(eT,{default:"percent",percent:(e,t)=>round(this.$state.value(),t)+"%"}),new SliderController({getStep:this.$props.step,getKeyStep:this.$props.keyStep,roundValue:Math.round,isDisabled:this.#nz.bind(this),aria:{valueNow:this.#nT.bind(this),valueText:this.#nk.bind(this)},onDragValueChange:this.#nY.bind(this),onValueChange:this.#nJ.bind(this)}).attach(this),(0,a.effect)(this.#nS.bind(this)),(0,a.effect)(this.#n0.bind(this))}onAttach(e){e.setAttribute("data-media-audio-gain-slider",""),setAttributeIfEmpty(e,"aria-label","Audio Boost");let{canSetAudioGain:t}=this.#q.$state;this.setAttributes({"data-supported":t,"aria-hidden":$ariaBool(()=>!t())})}#nT(){let{value:e}=this.$state;return Math.round(e())}#nk(){let{value:e}=this.$state;return e()+"%"}#nS(){let{min:e,max:t}=this.$props;this.$state.min.set(e()),this.$state.max.set(t())}#n0(){let{audioGain:e}=this.#q.$state,t=((e()??1)-1)*100;this.$state.value.set(t),this.dispatch("value-change",{detail:t})}#nz(){let{disabled:e}=this.$props,{canSetAudioGain:t}=this.#q.$state;return e()||!t()}#n1(e){if(!e.trigger)return;let t=round(1+e.detail/100,2);this.#q.remote.changeAudioGain(t,e)}#nJ(e){this.#n1(e)}#nY(e){this.#n1(e)}};let SpeedSlider=class SpeedSlider extends a.Component{static props={...SliderController.props,step:.25,keyStep:.25,shiftKeyMultiplier:2,min:0,max:2};static state=ey;#q;onSetup(){this.#q=useMediaContext(),new SliderController({getStep:this.$props.step,getKeyStep:this.$props.keyStep,roundValue:this.#n2,isDisabled:this.#nz.bind(this),aria:{valueNow:this.#nT.bind(this),valueText:this.#nk.bind(this)},onDragValueChange:this.#nY.bind(this),onValueChange:this.#nJ.bind(this)}).attach(this),(0,a.effect)(this.#nS.bind(this)),(0,a.effect)(this.#sB.bind(this))}onAttach(e){e.setAttribute("data-media-speed-slider",""),setAttributeIfEmpty(e,"aria-label","Speed");let{canSetPlaybackRate:t}=this.#q.$state;this.setAttributes({"data-supported":t,"aria-hidden":$ariaBool(()=>!t())})}#nT(){let{value:e}=this.$state;return e()}#nk(){let{value:e}=this.$state;return e()+"x"}#nS(){let{min:e,max:t}=this.$props;this.$state.min.set(e()),this.$state.max.set(t())}#sB(){let{playbackRate:e}=this.#q.$state,t=e();this.$state.value.set(t),this.dispatch("value-change",{detail:t})}#n2(e){return round(e,2)}#nz(){let{disabled:e}=this.$props,{canSetPlaybackRate:t}=this.#q.$state;return e()||!t()}#n3=(0,a.functionThrottle)(this.#n5.bind(this),25);#n5(e){if(!e.trigger)return;let t=e.detail;this.#q.remote.changePlaybackRate(t,e)}#nJ(e){this.#n3(e)}#nY(e){this.#n3(e)}};let QualitySlider=class QualitySlider extends a.Component{static props={...SliderController.props,step:1,keyStep:1,shiftKeyMultiplier:1};static state=ey;#q;#n4=(0,a.computed)(()=>{let{qualities:e}=this.#q.$state;return sortVideoQualities(e())});onSetup(){this.#q=useMediaContext(),new SliderController({getStep:this.$props.step,getKeyStep:this.$props.keyStep,roundValue:Math.round,isDisabled:this.#nz.bind(this),aria:{valueNow:this.#nT.bind(this),valueText:this.#nk.bind(this)},onDragValueChange:this.#nY.bind(this),onValueChange:this.#nJ.bind(this)}).attach(this),(0,a.effect)(this.#n9.bind(this)),(0,a.effect)(this.#n7.bind(this))}onAttach(e){e.setAttribute("data-media-quality-slider",""),setAttributeIfEmpty(e,"aria-label","Video Quality");let{qualities:t,canSetQuality:i}=this.#q.$state,s=(0,a.computed)(()=>i()&&t().length>0);this.setAttributes({"data-supported":s,"aria-hidden":$ariaBool(()=>!s())})}#nT(){let{value:e}=this.$state;return e()}#nk(){let{quality:e}=this.#q.$state;if(!e())return"";let{height:t,bitrate:i}=e(),s=i&&i>0?`${(i/1e6).toFixed(2)} Mbps`:null;return t?`${t}p${s?` (${s})`:""}`:"Auto"}#n9(){let e=this.#n4();this.$state.max.set(Math.max(0,e.length-1))}#n7(){let{quality:e}=this.#q.$state,t=Math.max(0,this.#n4().indexOf(e()));this.$state.value.set(t),this.dispatch("value-change",{detail:t})}#nz(){let{disabled:e}=this.$props,{canSetQuality:t,qualities:i}=this.#q.$state;return e()||i().length<=1||!t()}#n6=(0,a.functionThrottle)(this.#tW.bind(this),25);#tW(e){if(!e.trigger)return;let{qualities:t}=this.#q,i=(0,a.peek)(this.#n4)[e.detail];this.#q.remote.changeQuality(t.indexOf(i),e)}#nJ(e){this.#n6(e)}#nY(e){this.#n6(e)}};let TimeSlider=class TimeSlider extends a.Component{static props={...SliderController.props,step:.1,keyStep:5,shiftKeyMultiplier:2,pauseWhileDragging:!1,noSwipeGesture:!1,seekingRequestThrottle:100};static state=ey;#q;#n8;#re=(0,a.signal)(null);constructor(){super();let{noSwipeGesture:e}=this.$props;new SliderController({swipeGesture:()=>!e(),getValue:this.#rt.bind(this),getStep:this.#ri.bind(this),getKeyStep:this.#rs.bind(this),roundValue:this.#n2,isDisabled:this.#nz.bind(this),aria:{valueNow:this.#nT.bind(this),valueText:this.#nk.bind(this)},onDragStart:this.#ra.bind(this),onDragValueChange:this.#nY.bind(this),onDragEnd:this.#rn.bind(this),onValueChange:this.#nJ.bind(this)})}onSetup(){this.#q=useMediaContext(),(0,a.provideContext)(eT,{default:"time",value:this.#rr.bind(this),time:this.#ro.bind(this)}),this.setAttributes({"data-chapters":this.#rl.bind(this)}),this.setStyles({"--slider-progress":this.#rh.bind(this)}),(0,a.effect)(this.#sN.bind(this)),(0,a.effect)(this.#rd.bind(this))}onAttach(e){e.setAttribute("data-media-time-slider",""),setAttributeIfEmpty(e,"aria-label","Seek")}onConnect(e){(0,a.effect)(this.#ru.bind(this)),watchActiveTextTrack(this.#q.textTracks,"chapters",this.#re.set)}#rh(){let{bufferedEnd:e,duration:t}=this.#q.$state;return round(100*Math.min(e()/Math.max(t(),1),1),3)+"%"}#rl(){let{duration:e}=this.#q.$state;return this.#re()?.cues.length&&Number.isFinite(e())&&e()>0}#rd(){this.#n8=(0,a.functionThrottle)(this.#er.bind(this),this.$props.seekingRequestThrottle())}#sN(){if(this.$state.hidden())return;let{value:e,dragging:t}=this.$state,i=this.#rt();(0,a.peek)(t)||(e.set(i),this.dispatch("value-change",{detail:i}))}#ru(){let e=this.#q.player.el,{preview:t}=(0,a.useContext)(eb);e&&t()&&(0,a.setAttribute)(e,"data-preview",this.$state.active())}#er(e,t){this.#q.remote.seeking(e,t)}#rc(e,t,i){this.#n8.cancel();let{live:s}=this.#q.$state;if(s()&&t>=99){this.#q.remote.seekToLiveEdge(i);return}this.#q.remote.seek(e,i)}#rp=!1;#ra(e){let{pauseWhileDragging:t}=this.$props;if(t()){let{paused:t}=this.#q.$state;this.#rp=!t(),this.#q.remote.pause(e)}}#nY(e){this.#n8(this.#rm(e.detail),e)}#rn(e){let{seeking:t}=this.#q.$state;(0,a.peek)(t)||this.#er(this.#rm(e.detail),e);let i=e.detail;this.#rc(this.#rm(i),i,e);let{pauseWhileDragging:s}=this.$props;s()&&this.#rp&&(this.#q.remote.play(e),this.#rp=!1)}#nJ(e){let{dragging:t}=this.$state;!t()&&e.trigger&&this.#rn(e)}#rt(){let{currentTime:e}=this.#q.$state;return this.#rg(e())}#ri(){let e=this.$props.step()/this.#q.$state.duration()*100;return Number.isFinite(e)?e:1}#rs(){let e=this.$props.keyStep()/this.#q.$state.duration()*100;return Number.isFinite(e)?e:1}#n2(e){return round(e,3)}#nz(){let{disabled:e}=this.$props,{canSeek:t}=this.#q.$state;return e()||!t()}#nT(){let{value:e}=this.$state;return Math.round(e())}#nk(){let e=this.#rm(this.$state.value()),{duration:t}=this.#q.$state;return Number.isFinite(e)?`${formatSpokenTime(e)} out of ${formatSpokenTime(t())}`:"live"}#rm(e){let{duration:t}=this.#q.$state;return round(e/100*t(),5)}#rg(e){let{liveEdge:t,duration:i}=this.#q.$state,s=Math.max(0,Math.min(1,t()?1:Math.min(e,i())/i()));return Number.isNaN(s)?0:Number.isFinite(s)?100*s:100}#rr(e){let t=this.#rm(e),{live:i,duration:s}=this.#q.$state;return Number.isFinite(t)?(i()?t-s():t).toFixed(0):"LIVE"}#ro(e,t){let i=this.#rm(e),{live:s,duration:a}=this.#q.$state,n=s()?i-a():i;return Number.isFinite(i)?`${n<0?"-":""}${formatTime(Math.abs(n),t)}`:"LIVE"}};let SliderChapters=class SliderChapters extends a.Component{static props={disabled:!1};#q;#rf;#ry;#rb=null;#rv=[];#rw=(0,a.signal)(null);#rT=(0,a.signal)([]);#rk=(0,a.signal)(-1);#rS=(0,a.signal)(-1);#rC=0;get cues(){return this.#rT()}get activeCue(){return this.#rT()[this.#rk()]||null}get activePointerCue(){return this.#rT()[this.#rS()]||null}onSetup(){this.#q=useMediaContext(),this.#rf=(0,a.useState)(TimeSlider.state)}onAttach(e){watchActiveTextTrack(this.#q.textTracks,"chapters",this.#r$.bind(this)),(0,a.effect)(this.#rx.bind(this))}onConnect(){(0,a.onDispose)(()=>this.#t8.bind(this))}onDestroy(){this.#r$(null)}setRefs(e){if(this.#rv=e,this.#ry?.dispose(),1===this.#rv.length){let e=this.#rv[0];e.style.width="100%",e.style.setProperty("--chapter-fill","var(--slider-fill)"),e.style.setProperty("--chapter-progress","var(--slider-progress)")}else this.#rv.length>0&&(0,a.scoped)(()=>this.#rP(),this.#ry=(0,a.createScope)())}#r$(e){(0,a.peek)(this.#rw)!==e&&(this.#t8(),this.#rw.set(e))}#t8(){this.#rv=[],this.#rT.set([]),this.#rk.set(-1),this.#rS.set(-1),this.#rC=0,this.#ry?.dispose()}#rP(){this.#rv.length&&(0,a.effect)(this.#rA.bind(this))}#rA(){let{hidden:e}=this.#rf;e()||((0,a.effect)(this.#rE.bind(this)),(0,a.effect)(this.#rM.bind(this)),(0,a.effect)(this.#rq.bind(this)),(0,a.effect)(this.#rI.bind(this)))}#rE(){let e=this.#rT();if(!e.length)return;let t,{clipStartTime:i,clipEndTime:s}=this.#q.$state,a=i(),n=(s()||e[e.length-1].endTime)-a,r=100;for(let i=0;i<e.length;i++)if(t=e[i],this.#rv[i]){let s=i===e.length-1?r:round((t.endTime-Math.max(a,t.startTime))/n*100,3);this.#rv[i].style.width=s+"%",r-=s}}#rM(){let{liveEdge:e,clipStartTime:t,duration:i}=this.#q.$state,{fillPercent:s,value:n}=this.#rf,r=this.#rT(),o=e(),l=(0,a.peek)(this.#rk),h=r[l],d=o?this.#rT.length-1:this.#rL(h&&h.startTime/i()*100<=(0,a.peek)(n)?l:0,s());o||!h?this.#rR(0,r.length,100):d>l?this.#rR(l,d,100):d<l&&this.#rR(d+1,l+1,0);let u=o?100:this.#rD(r[d],s(),t(),this.#rV(r));this.#rO(this.#rv[d],u),this.#rk.set(d)}#rq(){let{pointing:e,pointerPercent:t}=this.#rf;if(!e()){this.#rS.set(-1);return}let i=this.#rL(0,t());this.#rS.set(i)}#rR(e,t,i){for(let s=e;s<t;s++)this.#rO(this.#rv[s],i)}#rO(e,t){e&&(e.style.setProperty("--chapter-fill",t+"%"),(0,a.setAttribute)(e,"data-active",t>0&&t<100),(0,a.setAttribute)(e,"data-ended",100===t))}#rL(e,t){let i=0,s=this.#rT();if(0===t)return 0;if(100===t)return s.length-1;let{clipStartTime:a}=this.#q.$state,n=a(),r=this.#rV(s);for(let a=e;a<s.length;a++)if((i=this.#rD(s[a],t,n,r))>=0&&i<100)return a;return 0}#rI(){this.#rF(this.#rN())}#rF=(0,a.animationFrameThrottle)(e=>{let t,i=this.#rT(),{clipStartTime:s}=this.#q.$state,a=s(),n=this.#rV(i);for(let s=this.#rC;s<this.#rv.length;s++)if(t=this.#rD(i[s],e,a,n),this.#rv[s]?.style.setProperty("--chapter-progress",t+"%"),t<100){this.#rC=s;break}});#rN=(0,a.computed)(this.#rB.bind(this));#rB(){let{bufferedEnd:e,duration:t}=this.#q.$state;return 100*round(Math.min(e()/Math.max(t(),1),1),3)}#rV(e){let{clipEndTime:t}=this.#q.$state,i=t();return i>0?i:e[e.length-1]?.endTime||0}#rD(e,t,i,s){let a=this.#rT();if(0===a.length)return 0;let n=s-i,r=Math.max(0,e.startTime-i),o=Math.min(s,e.endTime)-i,l=r/n,h=100*l,d=100*Math.min(1,l+(o-r)/n);return Math.max(0,round(t>=d?100:(t-h)/(d-h)*100,3))}#rH(e){let t=[],{clipStartTime:i,clipEndTime:s,duration:a}=this.#q.$state,n=i(),r=s()||1/0;e=e.filter(e=>e.startTime<=r&&e.endTime>=n);let o=e[0];o&&o.startTime>n&&t.push(new window.VTTCue(n,o.startTime,""));for(let i=0;i<e.length-1;i++){let s=e[i],a=e[i+1];if(t.push(s),a){let e=a.startTime-s.endTime;e>0&&t.push(new window.VTTCue(s.endTime,s.endTime+e,""))}}let l=e[e.length-1];if(l){t.push(l);let e=a();e>=0&&e-l.endTime>1&&t.push(new window.VTTCue(l.endTime,a(),""))}return t}#rx(){let{source:e}=this.#q.$state;e(),this.#t_()}#t_(){if(!this.scope)return;let{disabled:e}=this.$props;if(e()){this.#rT.set([]),this.#rk.set(0),this.#rC=0;return}let t=this.#rw();if(t){let e=this.#rG.bind(this);e(),new a.EventsController(t).add("add-cue",e).add("remove-cue",e),(0,a.effect)(this.#rK.bind(this))}return this.#rb=this.#rQ(),this.#rb&&(0,a.effect)(this.#rU.bind(this)),()=>{this.#rb&&(this.#rb.textContent="",this.#rb=null)}}#rK(){this.#q.$state.duration(),this.#rG()}#rG=(0,a.functionDebounce)(()=>{let e=(0,a.peek)(this.#rw);this.scope&&e&&e.cues.length&&(this.#rT.set(this.#rH(e.cues)),this.#rk.set(0),this.#rC=0)},150,!0);#rU(){let e=this.activePointerCue||this.activeCue;this.#rb&&(this.#rb.textContent=e?.text||"")}#rW(){let e=this.el;for(;e&&"slider"!==e.getAttribute("role");)e=e.parentElement;return e}#rQ(){let e=this.#rW();return e?e.querySelector('[data-part="chapter-title"]'):null}};let ex=SliderChapters.prototype;(0,a.prop)(ex,"cues"),(0,a.prop)(ex,"activeCue"),(0,a.prop)(ex,"activePointerCue"),(0,a.method)(ex,"setRefs");let eP=(0,a.createContext)(),eA=["a[href]","[tabindex]","input","select","button"].map(e=>`${e}:not([aria-hidden='true'])`).join(","),eE=new Set(["Escape","Tab","ArrowUp","ArrowDown","Home","PageUp","End","PageDown","Enter"," "]);let MenuFocusController=class MenuFocusController{#rj=-1;#r_=null;#rz=[];#aS;get items(){return this.#rz}constructor(e){this.#aS=e}attachMenu(e){(0,a.listenEvent)(e,"focus",this.#sq.bind(this)),this.#r_=e,(0,a.onDispose)(()=>{this.#r_=null})}listen(){this.#r_&&(this.update(),new a.EventsController(this.#r_).add("keyup",this.#Z.bind(this)).add("keydown",this.#ee.bind(this)),(0,a.onDispose)(()=>{this.#rj=-1,this.#rz=[]}))}update(){this.#rj=0,this.#rz=this.#rX()}scroll(e=this.#rY()){let t=this.#rz[e];t&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{!function(e,t={}){!function(e,t){let i=(0,a.r)(e,t);for(let{el:e,top:s,left:a}of i)e.scroll({top:s,left:a,behavior:t.behavior})}(e,{scrollMode:"if-needed",block:"center",inline:"center",...t})}(t,{behavior:"smooth",boundary:e=>!e.hasAttribute("data-root")})})})}focusActive(e=!0){let t=this.#rY();this.#rJ(t>=0?t:0,e)}#rJ(e,t=!0){this.#rj=e,this.#rz[e]?(this.#rz[e].focus({preventScroll:!0}),t&&this.scroll(e)):this.#r_?.focus({preventScroll:!0})}#rY(){return this.#rz.findIndex(e=>document.activeElement===e||"menuitemradio"===e.getAttribute("role")&&"true"===e.getAttribute("aria-checked"))}#sq(){this.#rj>=0||(this.update(),this.focusActive())}#rZ(e){let t=e.target;if((0,a.wasEnterKeyPressed)(e)&&t instanceof Element){let e=t.getAttribute("role");return!/a|input|select|button/.test(t.localName)&&!e}return eE.has(e.key)}#Z(e){this.#rZ(e)&&(e.stopPropagation(),e.preventDefault())}#ee(e){if(this.#rZ(e))switch(e.stopPropagation(),e.preventDefault(),e.key){case"Escape":this.#aS.closeMenu(e);break;case"Tab":this.#rJ(this.#r0(e.shiftKey?-1:1));break;case"ArrowUp":this.#rJ(this.#r0(-1));break;case"ArrowDown":this.#rJ(this.#r0(1));break;case"Home":case"PageUp":this.#rJ(0);break;case"End":case"PageDown":this.#rJ(this.#rz.length-1)}}#r0(e){let t=this.#rj;do t=(t+e+this.#rz.length)%this.#rz.length;while(this.#rz[t]?.offsetParent===null);return t}#rX(){if(!this.#r_)return[];let e=this.#r_.querySelectorAll(eA),t=[],is=e=>"menu"===e.getAttribute("role");for(let i of e)isHTMLElement(i)&&null!==i.offsetParent&&isElementParent(this.#r_,i,is)&&t.push(i);return t}};var eM=Object.defineProperty,eq=Object.getOwnPropertyDescriptor,__decorateClass$1=(e,t,i,s)=>{for(var a,n=eq(t,i),r=e.length-1;r>=0;r--)(a=e[r])&&(n=a(t,i,n)||n);return n&&eM(t,i,n),n};let eI=0;let Menu=class Menu extends a.Component{static props={showDelay:0};#q;#r1;#r2;#r3=(0,a.signal)(!1);#r5=(0,a.signal)(!1);#aE=(0,a.signal)(null);#aM=(0,a.signal)(null);#r4;#r9=new Set;#r7=null;#r6;#r8;#oe=!1;#ot=(0,a.signal)(!1);#oi=new Set;get triggerElement(){return this.#aE()}get contentElement(){return this.#aM()}get isSubmenu(){return!!this.#r4}constructor(){super();let{showDelay:e}=this.$props;this.#r6=new Popper({trigger:this.#aE,content:this.#aM,showDelay:e,listen:(e,t,i)=>{onPress(e,e=>{this.#r3()?i(e):t(e)});let s=this.#os();s&&onPress(s,e=>{e.stopPropagation(),i(e)})},onChange:this.#oa.bind(this)})}onSetup(){this.#q=useMediaContext();let e=++eI;this.#r1=`media-menu-${e}`,this.#r2=`media-menu-button-${e}`,this.#r8=new MenuFocusController({closeMenu:this.close.bind(this)}),(0,a.hasProvidedContext)(eP)&&(this.#r4=(0,a.useContext)(eP)),this.#on(),this.setAttributes({"data-open":this.#r3,"data-root":!this.isSubmenu,"data-submenu":this.isSubmenu,"data-disabled":this.#nz.bind(this)}),(0,a.provideContext)(eP,{button:this.#aE,content:this.#aM,expanded:this.#r3,hint:(0,a.signal)(""),submenu:!!this.#r4,disable:this.#or.bind(this),attachMenuButton:this.#oo.bind(this),attachMenuItems:this.#ol.bind(this),attachObserver:this.#oh.bind(this),disableMenuButton:this.#od.bind(this),addSubmenu:this.#ou.bind(this),onTransitionEvent:e=>{this.#oi.add(e),(0,a.onDispose)(()=>{this.#oi.delete(e)})}})}onAttach(e){e.style.setProperty("display","contents")}onConnect(e){(0,a.effect)(this.#oc.bind(this)),this.isSubmenu&&this.#r4?.addSubmenu(this)}onDestroy(){this.#aE.set(null),this.#aM.set(null),this.#r7=null,this.#oi.clear()}#on(){let e=-1,t=(0,a.hasProvidedContext)(ev)?(0,a.useContext)(ev):null;(0,a.provideContext)(ev,{onDragStart:()=>{t?.onDragStart?.(),window.clearTimeout(e),e=-1,this.#oe=!0},onDragEnd:()=>{t?.onDragEnd?.(),e=window.setTimeout(()=>{this.#oe=!1,e=-1},300)}})}#oc(){let e=this.#op();this.isSubmenu||this.#sU(),this.#om(e),e&&((0,a.effect)(()=>{let{height:e}=this.#q.$state,t=this.#aM();t&&(0,a.setStyle)(t,"--player-height",e()+"px")}),this.#r8.listen(),this.listen("pointerup",this.#og.bind(this)),(0,a.listenEvent)(window,"pointerup",this.#of.bind(this)))}#oo(e){let t=e.el,i=this.isSubmenu,s=$ariaBool(this.#nz.bind(this));setAttributeIfEmpty(t,"tabindex",i?"-1":"0"),setAttributeIfEmpty(t,"role",i?"menuitem":"button"),(0,a.setAttribute)(t,"id",this.#r2),(0,a.setAttribute)(t,"aria-haspopup","menu"),(0,a.setAttribute)(t,"aria-expanded","false"),(0,a.setAttribute)(t,"data-root",!this.isSubmenu),(0,a.setAttribute)(t,"data-submenu",this.isSubmenu);let watchAttrs=()=>{(0,a.setAttribute)(t,"data-open",this.#r3()),(0,a.setAttribute)(t,"aria-disabled",s())};r?watchAttrs():(0,a.effect)(watchAttrs),this.#aE.set(t),(0,a.onDispose)(()=>{this.#aE.set(null)})}#ol(e){let t=e.el;t.style.setProperty("display","none"),(0,a.setAttribute)(t,"id",this.#r1),setAttributeIfEmpty(t,"role","menu"),setAttributeIfEmpty(t,"tabindex","-1"),(0,a.setAttribute)(t,"data-root",!this.isSubmenu),(0,a.setAttribute)(t,"data-submenu",this.isSubmenu),this.#aM.set(t),(0,a.onDispose)(()=>this.#aM.set(null));let watchAttrs=()=>(0,a.setAttribute)(t,"data-open",this.#r3());r?watchAttrs():(0,a.effect)(watchAttrs),this.#r8.attachMenu(t),this.#om(!1);let i=this.#oy.bind(this);this.isSubmenu?this.#r4?.onTransitionEvent(i):(e.listen("transitionstart",i),e.listen("transitionend",i),e.listen("animationend",this.#sU),e.listen("vds-menu-resize",this.#sU))}#oh(e){this.#r7=e}#om(e){let t=(0,a.peek)(this.#aM);t&&(0,a.setAttribute)(t,"aria-hidden",(0,a.ariaBool)(!e))}#od(e){this.#ot.set(e)}#ob=!1;#oa(e,t){if(this.#ob=(0,a.isKeyboardEvent)(t),t?.stopPropagation(),this.#r3()===e)return;if(this.#nz()){e&&this.#r6.hide(t);return}this.el?.dispatchEvent(new Event("vds-menu-resize",{bubbles:!0,composed:!0}));let i=this.#aE(),s=this.#aM();if(i&&((0,a.setAttribute)(i,"aria-controls",e&&this.#r1),(0,a.setAttribute)(i,"aria-expanded",(0,a.ariaBool)(e))),s&&(0,a.setAttribute)(s,"aria-labelledby",e&&this.#r2),this.#r3.set(e),this.#ov(t),(0,a.tick)(),this.#ob)for(let t of(e?s?.focus():i?.focus(),[this.el,s]))t&&t.setAttribute("data-keyboard","");else for(let e of[this.el,s])e&&e.removeAttribute("data-keyboard");if(this.dispatch(e?"open":"close",{trigger:t}),e)this.isSubmenu||this.#q.activeMenu===this||(this.#q.activeMenu?.close(t),this.#q.activeMenu=this),this.#r7?.onOpen?.(t);else{if(this.isSubmenu)for(let e of this.#r9)e.close(t);else this.#q.activeMenu=null;this.#r7?.onClose?.(t)}e&&requestAnimationFrame(this.#ow.bind(this))}#ow(){this.#oT||this.#ok||(this.#r8.update(),requestAnimationFrame(()=>{this.#ob?this.#r8.focusActive():this.#r8.scroll()}))}#op(){return!this.#nz()&&this.#r3()}#nz(){return this.#r5()||this.#ot()}#or(e){this.#r5.set(e)}#og(e){let t=this.#aM();this.#oe||t&&isEventInside(t,e)||e.stopPropagation()}#of(e){let t=this.#aM();this.#oe||t&&isEventInside(t,e)||this.close(e)}#os(){let e=this.el?.querySelector('[data-part="close-target"]');return this.el&&e&&isElementParent(this.el,e,e=>"menu"===e.getAttribute("role"))?e:null}#ov(e){this.isSubmenu||(this.#r3()?this.#q.remote.pauseControls(e):this.#q.remote.resumeControls(e))}#ou(e){this.#r9.add(e),new a.EventsController(e).add("open",this.#oS).add("close",this.#oC),(0,a.onDispose)(this.#o$)}#o$=this.#ox.bind(this);#ox(e){this.#r9.delete(e)}#ok=!1;#oS=this.#oP.bind(this);#oP(e){this.#ok=!0;let t=this.#aM();for(let t of(this.isSubmenu&&this.triggerElement?.setAttribute("aria-hidden","true"),this.#r9))if(t!==e.target)for(let e of[t.el,t.triggerElement])e?.setAttribute("aria-hidden","true");if(t){let i=e.target.el;for(let e of t.children)e.contains(i)?e.setAttribute("data-open",""):e!==i&&e.setAttribute("data-hidden","")}}#oC=this.#oA.bind(this);#oA(e){this.#ok=!1;let t=this.#aM();for(let e of(this.isSubmenu&&this.triggerElement?.setAttribute("aria-hidden","false"),this.#r9))for(let t of[e.el,e.triggerElement])t?.setAttribute("aria-hidden","false");if(t)for(let e of t.children)e.removeAttribute("data-open"),e.removeAttribute("data-hidden")}#sU=(0,a.animationFrameThrottle)(()=>{let e=(0,a.peek)(this.#aM);if(!e||r)return;let t=0,i=getComputedStyle(e),s=[...e.children];for(let e of["paddingTop","paddingBottom","borderTopWidth","borderBottomWidth"])t+=parseFloat(i[e])||0;for(let e of s)if(isHTMLElement(e)&&"contents"===e.style.display)s.push(...e.children);else if(3===e.nodeType)t+=parseFloat(getComputedStyle(e).fontSize);else if(isHTMLElement(e)){if(!isElementVisible(e))continue;let i=getComputedStyle(e);t+=e.offsetHeight+(parseFloat(i.marginTop)||0)+(parseFloat(i.marginBottom)||0)}(0,a.setStyle)(e,"--menu-height",t+"px")});#oT=!1;#oy(e){let t=this.#aM();for(let i of(t&&"height"===e.propertyName&&(this.#oT="transitionstart"===e.type,(0,a.setAttribute)(t,"data-transition",this.#oT?"height":null),this.#r3()&&this.#ow()),this.#oi))i(e)}open(e){(0,a.peek)(this.#r3)||(this.#r6.show(e),(0,a.tick)())}close(e){(0,a.peek)(this.#r3)&&(this.#r6.hide(e),(0,a.tick)())}};__decorateClass$1([a.prop],Menu.prototype,"triggerElement"),__decorateClass$1([a.prop],Menu.prototype,"contentElement"),__decorateClass$1([a.prop],Menu.prototype,"isSubmenu"),__decorateClass$1([a.method],Menu.prototype,"open"),__decorateClass$1([a.method],Menu.prototype,"close");let MenuButton=class MenuButton extends a.Component{static props={disabled:!1};#oE;#oM=(0,a.signal)(null);get expanded(){return this.#oE?.expanded()??!1}constructor(){super(),new FocusVisibleController}onSetup(){this.#oE=(0,a.useContext)(eP)}onAttach(e){this.#oE.attachMenuButton(this),(0,a.effect)(this.#nm.bind(this)),setAttributeIfEmpty(e,"type","button")}onConnect(e){(0,a.effect)(this.#oq.bind(this)),this.#ar();let t=new MutationObserver(this.#ar.bind(this));t.observe(e,{attributeFilter:["data-part"],childList:!0,subtree:!0}),(0,a.onDispose)(()=>t.disconnect()),onPress(e,e=>{this.dispatch("select",{trigger:e})})}#nm(){this.#oE.disableMenuButton(this.$props.disabled())}#oq(){let e=this.#oM();e&&(0,a.effect)(()=>{let t=this.#oE.hint();t&&(e.textContent=t)})}#ar(){let e=this.el?.querySelector('[data-part="hint"]');this.#oM.set(e??null)}};let eL=MenuButton.prototype;(0,a.prop)(eL,"expanded");let MenuItem=class MenuItem extends MenuButton{};let eR=(0,a.createContext)();let MenuItems=class MenuItems extends a.Component{static props={placement:null,offset:0,alignOffset:0};#oE;constructor(){super(),new FocusVisibleController;let{placement:e}=this.$props;this.setAttributes({"data-placement":e})}onAttach(e){if(this.#oE=(0,a.useContext)(eP),this.#oE.attachMenuItems(this),(0,a.hasProvidedContext)(eR)){let t=(0,a.useContext)(eR);t&&((0,a.provideContext)(eR,null),t.attach(e),(0,a.onDispose)(()=>t.attach(null)))}}onConnect(e){(0,a.effect)(this.#aN.bind(this))}#aN(){let{expanded:e}=this.#oE;if(!this.el||!e())return;let t=this.$props.placement();if(!t)return;Object.assign(this.el.style,{position:"absolute",top:0,left:0,width:"max-content"});let{offset:i,alignOffset:s}=this.$props;(0,a.onDispose)(autoPlacement(this.el,this.#aF(),t,{offsetVarName:"media-menu",xOffset:s(),yOffset:i()})),(0,a.onDispose)(this.#oI.bind(this))}#oI(){this.el&&(this.el.removeAttribute("style"),this.el.style.display="none")}#aF(){return this.#oE.button()}};let eD=(0,a.createContext)();let RadioGroupController=class RadioGroupController extends a.ViewController{#oL=new Set;#oR=(0,a.signal)("");#ir=null;onValueChange;get values(){return Array.from(this.#oL).map(e=>e.value())}get value(){return this.#oR()}set value(e){this.#$(e)}onSetup(){(0,a.provideContext)(eD,{add:this.#oD.bind(this),remove:this.#oV.bind(this)})}onAttach(e){let t=(0,a.hasProvidedContext)(eP);t||setAttributeIfEmpty(e,"role","radiogroup"),this.setAttributes({value:this.#oR})}onDestroy(){this.#oL.clear()}#oD(e){this.#oL.has(e)||(this.#oL.add(e),e.onCheck=this.#oO,e.check(e.value()===this.#oR()))}#oV(e){e.onCheck=null,this.#oL.delete(e)}#oO=this.#$.bind(this);#$(e,t){let i=(0,a.peek)(this.#oR);if(!e||e===i)return;let s=this.#oF(i),n=this.#oF(e);s?.check(!1,t),n?.check(!0,t),this.#oR.set(e),this.onValueChange?.(e,t)}#oF(e){for(let t of this.#oL)if(e===(0,a.peek)(t.value))return t;return null}};let RadioGroup=class RadioGroup extends a.Component{static props={value:""};#ir;get values(){return this.#ir.values}get value(){return this.#ir.value}set value(e){this.#ir.value=e}constructor(){super(),this.#ir=new RadioGroupController,this.#ir.onValueChange=this.#nJ.bind(this)}onSetup(){r?this.#nc():(0,a.effect)(this.#nc.bind(this))}#nc(){this.#ir.value=this.$props.value()}#nJ(e,t){let i=this.createEvent("change",{detail:e,trigger:t});this.dispatch(i)}};let eV=RadioGroup.prototype;(0,a.prop)(eV,"values"),(0,a.prop)(eV,"value");let Radio=class Radio extends a.Component{static props={value:""};#oN=(0,a.signal)(!1);#ir={value:this.$props.value,check:this.#oB.bind(this),onCheck:null};get checked(){return this.#oN()}constructor(){super(),new FocusVisibleController}onSetup(){this.setAttributes({value:this.$props.value,"data-checked":this.#oN,"aria-checked":$ariaBool(this.#oN)})}onAttach(e){let t=(0,a.hasProvidedContext)(eP);setAttributeIfEmpty(e,"tabindex",t?"-1":"0"),setAttributeIfEmpty(e,"role",t?"menuitemradio":"radio"),(0,a.effect)(this.#nc.bind(this))}onConnect(e){this.#oH(),onPress(e,this.#aj.bind(this)),(0,a.onDispose)(this.#eE.bind(this))}#eE(){(0,a.scoped)(()=>{let e=(0,a.useContext)(eD);e.remove(this.#ir)},this.connectScope)}#oH(){let e=(0,a.useContext)(eD);e.add(this.#ir)}#nc(){let{value:e}=this.$props,t=e();(0,a.peek)(this.#oN)&&this.#ir.onCheck?.(t)}#aj(e){(0,a.peek)(this.#oN)||(this.#$(!0,e),this.#oG(e),this.#ir.onCheck?.(a.peek(this.$props.value),e))}#oB(e,t){(0,a.peek)(this.#oN)!==e&&this.#$(e,t)}#$(e,t){this.#oN.set(e),this.dispatch("change",{detail:e,trigger:t})}#oG(e){this.dispatch("select",{trigger:e})}};let eO=Radio.prototype;(0,a.prop)(eO,"checked");var eF=Object.defineProperty,eN=Object.getOwnPropertyDescriptor,__decorateClass=(e,t,i,s)=>{for(var a,n=eN(t,i),r=e.length-1;r>=0;r--)(a=e[r])&&(n=a(t,i,n)||n);return n&&eF(t,i,n),n};let ChaptersRadioGroup=class ChaptersRadioGroup extends a.Component{static props={thumbnails:null};#q;#oE;#ir;#S=(0,a.signal)(null);#r=(0,a.signal)([]);get value(){return this.#ir.value}get disabled(){return!this.#r()?.length}constructor(){super(),this.#ir=new RadioGroupController,this.#ir.onValueChange=this.#nJ.bind(this)}onSetup(){this.#q=useMediaContext(),(0,a.hasProvidedContext)(eP)&&(this.#oE=(0,a.useContext)(eP));let{thumbnails:e}=this.$props;this.setAttributes({"data-thumbnails":()=>!!e()})}onAttach(e){this.#oE?.attachObserver({onOpen:this.#oK.bind(this)})}getOptions(){let{clipStartTime:e,clipEndTime:t}=this.#q.$state,i=e(),s=t()||1/0;return this.#r().map((e,t)=>({cue:e,value:t.toString(),label:e.text,startTime:formatTime(Math.max(0,e.startTime-i)),duration:formatSpokenTime(Math.min(s,e.endTime)-Math.max(i,e.startTime))}))}#oK(){(0,a.peek)(()=>this.#sN())}onConnect(e){(0,a.effect)(this.#sN.bind(this)),(0,a.effect)(this.#oQ.bind(this)),(0,a.effect)(this.#oU.bind(this)),watchActiveTextTrack(this.#q.textTracks,"chapters",this.#S.set)}#oU(){let e=this.#S();if(!e)return;let t=this.#rG.bind(this,e);return t(),new a.EventsController(e).add("add-cue",t).add("remove-cue",t),()=>{this.#r.set([])}}#rG(e){let{clipStartTime:t,clipEndTime:i}=this.#q.$state,s=t(),a=i()||1/0;this.#r.set([...e.cues].filter(e=>e.startTime<=a&&e.endTime>=s))}#sN(){if(!this.#oE?.expanded())return;let e=this.#S();if(!e){this.#ir.value="-1";return}let{realCurrentTime:t,clipStartTime:i,clipEndTime:s}=this.#q.$state,n=i(),r=s()||1/0,o=t(),l=this.#r().findIndex(e=>isCueActive(e,o));this.#ir.value=l.toString(),l>=0&&requestScopedAnimationFrame(()=>{if(!this.connectScope)return;let e=this.#r()[l],t=this.el.querySelector("[aria-checked='true']"),i=Math.max(n,e.startTime),s=Math.min(r,e.endTime)-i,h=Math.max(0,o-i)/s*100;t&&(0,a.setStyle)(t,"--progress",round(h,3)+"%")})}#oQ(){this.#oE?.disable(this.disabled)}#nJ(e,t){if(this.disabled||!t)return;let i=+e,s=this.#r(),{clipStartTime:n}=this.#q.$state;(0,a.isNumber)(i)&&s?.[i]&&(this.#ir.value=i.toString(),this.#q.remote.seek(s[i].startTime-n(),t),this.dispatch("change",{detail:s[i],trigger:t}))}};__decorateClass([a.prop],ChaptersRadioGroup.prototype,"value"),__decorateClass([a.prop],ChaptersRadioGroup.prototype,"disabled"),__decorateClass([a.method],ChaptersRadioGroup.prototype,"getOptions");let AudioRadioGroup=class AudioRadioGroup extends a.Component{static props={emptyLabel:"Default"};#oE;#q;#ir;get value(){return this.#ir.value}get disabled(){let{audioTracks:e}=this.#q.$state;return e().length<=1}constructor(){super(),this.#ir=new RadioGroupController,this.#ir.onValueChange=this.#nJ.bind(this)}onSetup(){this.#q=useMediaContext(),(0,a.hasProvidedContext)(eP)&&(this.#oE=(0,a.useContext)(eP))}onConnect(e){(0,a.effect)(this.#nc.bind(this)),(0,a.effect)(this.#oQ.bind(this)),(0,a.effect)(this.#oW.bind(this))}getOptions(){let{audioTracks:e}=this.#q.$state;return e().map(e=>({track:e,label:e.label,value:e.label.toLowerCase()}))}#nc(){this.#ir.value=this.#rt()}#oW(){let{emptyLabel:e}=this.$props,{audioTrack:t}=this.#q.$state,i=t();this.#oE?.hint.set(i?.label??e())}#oQ(){this.#oE?.disable(this.disabled)}#rt(){let{audioTrack:e}=this.#q.$state,t=e();return t?t.label.toLowerCase():""}#nJ(e,t){if(this.disabled)return;let i=this.#q.audioTracks.toArray().findIndex(t=>t.label.toLowerCase()===e);if(i>=0){let e=this.#q.audioTracks[i];this.#q.remote.changeAudioTrack(i,t),this.dispatch("change",{detail:e,trigger:t})}}};let eB=AudioRadioGroup.prototype;(0,a.prop)(eB,"value"),(0,a.prop)(eB,"disabled"),(0,a.method)(eB,"getOptions");let eH=[1,1.25,1.5,1.75,2,2.5,3,4];let AudioGainRadioGroup=class AudioGainRadioGroup extends a.Component{static props={normalLabel:"Disabled",gains:eH};#q;#oE;#ir;get value(){return this.#ir.value}get disabled(){let{gains:e}=this.$props,{canSetAudioGain:t}=this.#q.$state;return!t()||0===e().length}constructor(){super(),this.#ir=new RadioGroupController,this.#ir.onValueChange=this.#nJ.bind(this)}onSetup(){this.#q=useMediaContext(),(0,a.hasProvidedContext)(eP)&&(this.#oE=(0,a.useContext)(eP))}onConnect(e){(0,a.effect)(this.#nc.bind(this)),(0,a.effect)(this.#oW.bind(this)),(0,a.effect)(this.#oQ.bind(this))}getOptions(){let{gains:e,normalLabel:t}=this.$props;return e().map(e=>({label:1===e||null===e?t:String(100*e)+"%",value:e.toString()}))}#nc(){this.#ir.value=this.#rt()}#oW(){let{normalLabel:e}=this.$props,{audioGain:t}=this.#q.$state,i=t();this.#oE?.hint.set(1===i||null==i?e():String(100*i)+"%")}#oQ(){this.#oE?.disable(this.disabled)}#rt(){let{audioGain:e}=this.#q.$state;return e()?.toString()??"1"}#nJ(e,t){if(this.disabled)return;let i=+e;this.#q.remote.changeAudioGain(i,t),this.dispatch("change",{detail:i,trigger:t})}};let eG=AudioGainRadioGroup.prototype;(0,a.prop)(eG,"value"),(0,a.prop)(eG,"disabled"),(0,a.method)(eG,"getOptions");let CaptionsRadioGroup=class CaptionsRadioGroup extends a.Component{static props={offLabel:"Off"};#q;#oE;#ir;get value(){return this.#ir.value}get disabled(){let{hasCaptions:e}=this.#q.$state;return!e()}constructor(){super(),this.#ir=new RadioGroupController,this.#ir.onValueChange=this.#nJ.bind(this)}onSetup(){this.#q=useMediaContext(),(0,a.hasProvidedContext)(eP)&&(this.#oE=(0,a.useContext)(eP))}onConnect(e){super.onConnect?.(e),(0,a.effect)(this.#nc.bind(this)),(0,a.effect)(this.#oQ.bind(this)),(0,a.effect)(this.#oW.bind(this))}getOptions(){let{offLabel:e}=this.$props,{textTracks:t}=this.#q.$state;return[{value:"off",label:e},...t().filter(isTrackCaptionKind).map(e=>({track:e,label:e.label,value:this.#oj(e)}))]}#nc(){this.#ir.value=this.#rt()}#oW(){let{offLabel:e}=this.$props,{textTrack:t}=this.#q.$state,i=t();this.#oE?.hint.set(i&&isTrackCaptionKind(i)&&"showing"===i.mode?i.label:e())}#oQ(){this.#oE?.disable(this.disabled)}#rt(){let{textTrack:e}=this.#q.$state,t=e();return t&&isTrackCaptionKind(t)&&"showing"===t.mode?this.#oj(t):"off"}#nJ(e,t){if(this.disabled)return;if("off"===e){let e=this.#q.textTracks.selected;if(e){let i=this.#q.textTracks.indexOf(e);this.#q.remote.changeTextTrackMode(i,"disabled",t),this.dispatch("change",{detail:null,trigger:t})}return}let i=this.#q.textTracks.toArray().findIndex(t=>this.#oj(t)===e);if(i>=0){let e=this.#q.textTracks[i];this.#q.remote.changeTextTrackMode(i,"showing",t),this.dispatch("change",{detail:e,trigger:t})}}#oj(e){return e.id+":"+e.kind+"-"+e.label.toLowerCase()}};let eK=CaptionsRadioGroup.prototype;(0,a.prop)(eK,"value"),(0,a.prop)(eK,"disabled"),(0,a.method)(eK,"getOptions");let eQ=[.25,.5,.75,1,1.25,1.5,1.75,2];let SpeedRadioGroup=class SpeedRadioGroup extends a.Component{static props={normalLabel:"Normal",rates:eQ};#q;#oE;#ir;get value(){return this.#ir.value}get disabled(){let{rates:e}=this.$props,{canSetPlaybackRate:t}=this.#q.$state;return!t()||0===e().length}constructor(){super(),this.#ir=new RadioGroupController,this.#ir.onValueChange=this.#nJ.bind(this)}onSetup(){this.#q=useMediaContext(),(0,a.hasProvidedContext)(eP)&&(this.#oE=(0,a.useContext)(eP))}onConnect(e){(0,a.effect)(this.#nc.bind(this)),(0,a.effect)(this.#oW.bind(this)),(0,a.effect)(this.#oQ.bind(this))}getOptions(){let{rates:e,normalLabel:t}=this.$props;return e().map(e=>({label:1===e?t:e+"\xd7",value:e.toString()}))}#nc(){this.#ir.value=this.#rt()}#oW(){let{normalLabel:e}=this.$props,{playbackRate:t}=this.#q.$state,i=t();this.#oE?.hint.set(1===i?e():i+"\xd7")}#oQ(){this.#oE?.disable(this.disabled)}#rt(){let{playbackRate:e}=this.#q.$state;return e().toString()}#nJ(e,t){if(this.disabled)return;let i=+e;this.#q.remote.changePlaybackRate(i,t),this.dispatch("change",{detail:i,trigger:t})}};let eU=SpeedRadioGroup.prototype;(0,a.prop)(eU,"value"),(0,a.prop)(eU,"disabled"),(0,a.method)(eU,"getOptions");let QualityRadioGroup=class QualityRadioGroup extends a.Component{static props={autoLabel:"Auto",hideBitrate:!1,sort:"descending"};#q;#oE;#ir;get value(){return this.#ir.value}get disabled(){let{canSetQuality:e,qualities:t}=this.#q.$state;return!e()||t().length<=1}#n4=(0,a.computed)(()=>{let{sort:e}=this.$props,{qualities:t}=this.#q.$state;return sortVideoQualities(t(),"descending"===e())});constructor(){super(),this.#ir=new RadioGroupController,this.#ir.onValueChange=this.#nJ.bind(this)}onSetup(){this.#q=useMediaContext(),(0,a.hasProvidedContext)(eP)&&(this.#oE=(0,a.useContext)(eP))}onConnect(e){(0,a.effect)(this.#nc.bind(this)),(0,a.effect)(this.#oQ.bind(this)),(0,a.effect)(this.#oW.bind(this))}getOptions(){let{autoLabel:e,hideBitrate:t}=this.$props;return[{value:"auto",label:e},...this.#n4().map(e=>{let i=e.bitrate&&e.bitrate>=0?`${round(e.bitrate/1e6,2)} Mbps`:null;return{quality:e,label:e.height+"p",value:this.#o_(e),bitrate:()=>t()?null:i}})]}#nc(){this.#ir.value=this.#rt()}#oW(){let{autoLabel:e}=this.$props,{autoQuality:t,quality:i}=this.#q.$state,s=i()?i().height+"p":"";this.#oE?.hint.set(t()?e()+(s?` (${s})`:""):s)}#oQ(){this.#oE?.disable(this.disabled)}#nJ(e,t){if(this.disabled)return;if("auto"===e){this.#q.remote.changeQuality(-1,t),this.dispatch("change",{detail:"auto",trigger:t});return}let{qualities:i}=this.#q.$state,s=(0,a.peek)(i).findIndex(t=>this.#o_(t)===e);if(s>=0){let e=(0,a.peek)(i)[s];this.#q.remote.changeQuality(s,t),this.dispatch("change",{detail:e,trigger:t})}}#rt(){let{quality:e,autoQuality:t}=this.#q.$state;if(t())return"auto";let i=e();return i?this.#o_(i):"auto"}#o_(e){return e.height+"_"+e.bitrate}};let eW=QualityRadioGroup.prototype;(0,a.prop)(eW,"value"),(0,a.prop)(eW,"disabled"),(0,a.method)(eW,"getOptions");let Gesture=class Gesture extends a.Component{static props={disabled:!1,event:void 0,action:void 0};#q;#ej=null;onSetup(){this.#q=useMediaContext();let{event:e,action:t}=this.$props;this.setAttributes({event:e,action:t})}onAttach(e){e.setAttribute("data-media-gesture",""),e.style.setProperty("pointer-events","none")}onConnect(e){this.#ej=this.#q.player.el?.querySelector("[data-media-provider]"),(0,a.effect)(this.#oz.bind(this))}#oz(){let e=this.$props.event(),t=this.$props.disabled();if(this.#ej&&e&&!t){if(/^dbl/.test(e)&&(e=e.split(/^dbl/)[1]),"pointerup"===e||"pointerdown"===e){let t=this.#q.$state.pointer();"coarse"===t&&(e="pointerup"===e?"touchend":"touchstart")}(0,a.listenEvent)(this.#ej,e,this.#oX.bind(this),{passive:!1})}}#oY=0;#oJ=-1;#oX(e){if(this.$props.disabled()||(0,a.isPointerEvent)(e)&&(0!==e.button||this.#q.activeMenu)||(0,a.isTouchEvent)(e)&&this.#q.activeMenu||isTouchPinchEvent(e)||!this.#oZ(e))return;e.MEDIA_GESTURE=!0,e.preventDefault();let t=(0,a.peek)(this.$props.event),i=t?.startsWith("dbl");if(i){if(1===this.#oY){queueMicrotask(()=>this.#o0(e)),clearTimeout(this.#oJ),this.#oY=0;return}}else 0===this.#oY&&setTimeout(()=>{1===this.#oY&&this.#o0(e)},250);0===this.#oY&&(this.#oJ=window.setTimeout(()=>{this.#oY=0},275)),this.#oY++}#o0(e){this.el.setAttribute("data-triggered",""),requestAnimationFrame(()=>{this.#o1()&&this.#o2((0,a.peek)(this.$props.action),e),requestAnimationFrame(()=>{this.el.removeAttribute("data-triggered")})})}#oZ(e){if(!this.el)return!1;if((0,a.isPointerEvent)(e)||(0,a.isMouseEvent)(e)||(0,a.isTouchEvent)(e)){let t=(0,a.isTouchEvent)(e)?e.changedTouches[0]??e.touches[0]:void 0,i=t?.clientX??e.clientX,s=t?.clientY??e.clientY,n=this.el.getBoundingClientRect(),r=s>=n.top&&s<=n.bottom&&i>=n.left&&i<=n.right;return e.type.includes("leave")?!r:r}return!0}#o1(){let e=this.#q.player.el.querySelectorAll("[data-media-gesture][data-triggered]");return Array.from(e).sort((e,t)=>+getComputedStyle(t).zIndex-+getComputedStyle(e).zIndex)[0]===this.el}#o2(e,t){if(!e)return;let i=new a.DOMEvent("will-trigger",{detail:e,cancelable:!0,trigger:t});if(this.dispatchEvent(i),i.defaultPrevented)return;let[s,n]=e.replace(/:([a-z])/,"-$1").split(":");e.includes(":fullscreen")?this.#q.remote.toggleFullscreen("prefer-media",t):e.includes("seek:")?this.#q.remote.seek((0,a.peek)(this.#q.$state.currentTime)+(+n||0),t):this.#q.remote[(0,a.kebabToCamelCase)(s)](t),this.dispatch("trigger",{detail:e,trigger:t})}};let CaptionsTextRenderer=class CaptionsTextRenderer{priority=10;#S=null;#o3;#e1;constructor(e){this.#o3=e}attach(){}canRender(){return!0}detach(){this.#e1?.abort(),this.#e1=void 0,this.#o3.reset(),this.#S=null}changeTrack(e){e&&this.#S!==e&&(this.#e1?.abort(),this.#e1=new a.EventsController(e),e.readyState<2?(this.#o3.reset(),this.#e1.add("load",()=>this.#o5(e),{once:!0})):this.#o5(e),this.#e1.add("add-cue",e=>{this.#o3.addCue(e.detail)}).add("remove-cue",e=>{this.#o3.removeCue(e.detail)}),this.#S=e)}#o5(e){this.#o3.changeTrack({cues:[...e.cues],regions:[...e.regions]})}};let Captions=class Captions extends a.Component{static props={textDir:"ltr",exampleText:"Captions look like this."};#q;static lib=(0,a.signal)(null);onSetup(){this.#q=useMediaContext(),this.setAttributes({"aria-hidden":$ariaBool(this.#aX.bind(this))})}onAttach(e){e.style.setProperty("pointer-events","none")}onConnect(e){Captions.lib()||i.e(409).then(i.bind(i,409)).then(e=>Captions.lib.set(e)),(0,a.effect)(this.#o4.bind(this))}#aX(){let{textTrack:e,remotePlaybackState:t,iOSControls:i}=this.#q.$state,s=e();return i()||"connected"===t()||!s||!isTrackCaptionKind(s)}#o4(){if(!Captions.lib())return;let{viewType:e}=this.#q.$state;return"audio"===e()?this.#o9():this.#o7()}#o9(){return(0,a.effect)(this.#t_.bind(this)),this.#o6(null),()=>{this.el.textContent=""}}#t_(){if(this.#aX())return;this.#o8();let{textTrack:e}=this.#q.$state;(0,a.listenEvent)(e(),"cue-change",this.#o8.bind(this)),(0,a.effect)(this.#le.bind(this))}#o8(){this.el.textContent="",this.#lt>=0&&this.#li();let{realCurrentTime:e,textTrack:t}=this.#q.$state,{renderVTTCueString:i}=Captions.lib(),s=(0,a.peek)(e),n=(0,a.peek)(t).activeCues;for(let e of n){let t=this.#ls(),a=this.#la();a.innerHTML=i(e,s),t.append(a),this.el.append(a)}}#le(){let{realCurrentTime:e}=this.#q.$state,{updateTimedVTTCueNodes:t}=Captions.lib();t(this.el,e())}#o7(){let{CaptionsRenderer:e}=Captions.lib(),t=new e(this.el),i=new CaptionsTextRenderer(t);return this.#q.textRenderers.add(i),(0,a.effect)(this.#ln.bind(this,t)),(0,a.effect)(this.#lr.bind(this,t)),this.#o6(t),()=>{this.el.textContent="",this.#q.textRenderers.remove(i),t.destroy()}}#ln(e){e.dir=this.$props.textDir()}#lr(e){if(this.#aX())return;let{realCurrentTime:t,textTrack:i}=this.#q.$state;e.currentTime=t(),this.#lt>=0&&i()?.activeCues[0]&&this.#li()}#o6(e){let t=this.#q.player;if(!t)return;let i=this.#lo.bind(this,e);(0,a.listenEvent)(t,"vds-font-change",i)}#lo(e){if(this.#lt>=0){this.#ll();return}let{textTrack:t}=this.#q.$state;t()?.activeCues[0]?e?.update(!0):this.#lh()}#lh(){let e=this.#ls();(0,a.setAttribute)(e,"data-example","");let t=this.#la();(0,a.setAttribute)(t,"data-example",""),t.textContent=this.$props.exampleText(),e?.append(t),this.el?.append(e),this.el?.setAttribute("data-example",""),this.#ll()}#lt=-1;#ll(){window.clearTimeout(this.#lt),this.#lt=window.setTimeout(this.#li.bind(this),2500)}#li(){this.el?.removeAttribute("data-example"),this.el?.querySelector("[data-example]")&&(this.el.textContent=""),this.#lt=-1}#ls(){let e=document.createElement("div");return(0,a.setAttribute)(e,"data-part","cue-display"),e}#la(){let e=document.createElement("div");return(0,a.setAttribute)(e,"data-part","cue"),e}};let Poster=class Poster extends a.Component{static props={src:null,alt:null,crossOrigin:null};static state=new a.State({img:null,src:null,alt:null,crossOrigin:null,loading:!0,error:null,hidden:!1});#q;onSetup(){this.#q=useMediaContext(),this.#nK(),this.#ld(),this.#sm(),this.#nb()}onAttach(e){e.style.setProperty("pointer-events","none"),(0,a.effect)(this.#nV.bind(this)),(0,a.effect)(this.#nK.bind(this)),(0,a.effect)(this.#ld.bind(this)),(0,a.effect)(this.#sm.bind(this)),(0,a.effect)(this.#nb.bind(this));let{started:t}=this.#q.$state;this.setAttributes({"data-visible":()=>!t()&&!this.$state.hidden(),"data-loading":this.#nR.bind(this),"data-error":this.#nD.bind(this),"data-hidden":this.$state.hidden})}onConnect(e){(0,a.effect)(this.#lu.bind(this)),(0,a.effect)(this.#te.bind(this))}#nD(){let{error:e}=this.$state;return!(0,a.isNull)(e())}#lu(){let{canLoadPoster:e,poster:t}=this.#q.$state;!e()&&t()&&preconnect(t(),"preconnect")}#nb(){let{src:e}=this.$props,{poster:t,nativeControls:i}=this.#q.$state;this.el&&(0,a.setAttribute)(this.el,"display",i()?"none":null),this.$state.hidden.set(this.#nD()||!(e()||t())||i())}#nR(){let{loading:e,hidden:t}=this.$state;return!t()&&e()}#nV(){let e=this.$state.img();e&&(new a.EventsController(e).add("load",this.#lc.bind(this)).add("error",this.#eA.bind(this)),e.complete&&this.#lc())}#lp="";#nK(){let{poster:e}=this.#q.$props,{canLoadPoster:t,providedPoster:i,inferredPoster:s}=this.#q.$state,a=this.$props.src()||"",n=a||e()||s();this.#lp===i()&&i.set(a),this.$state.src.set(t()&&n.length?n:null),this.#lp=a}#ld(){let{src:e}=this.$props,{alt:t}=this.$state,{poster:i}=this.#q.$state;t.set(e()||i()?this.$props.alt():null)}#sm(){let{crossOrigin:e}=this.$props,{crossOrigin:t}=this.$state,{crossOrigin:i,poster:s}=this.#q.$state,a=null!==e()?e():i();t.set(/ytimg\.com|vimeo/.test(s()||"")?null:!0===a?"anonymous":a)}#te(){let{loading:e,error:t}=this.$state,{canLoadPoster:i,poster:s}=this.#q.$state;e.set(i()&&!!s()),t.set(null)}#lc(){let{loading:e,error:t}=this.$state;e.set(!1),t.set(null)}#eA(e){let{loading:t,error:i}=this.$state;t.set(!1),i.set(e)}};let Time=class Time extends a.Component{static props={type:"current",showHours:!1,padHours:null,padMinutes:null,remainder:!1,toggle:!1,hidden:!1};static state=new a.State({timeText:"",hidden:!1});#q;#lm=(0,a.signal)(null);#nd=(0,a.signal)(!0);#nu=(0,a.signal)(!0);onSetup(){this.#q=useMediaContext(),this.#lg();let{type:e}=this.$props;this.setAttributes({"data-type":e,"data-remainder":this.#lf.bind(this)}),new IntersectionObserverController({callback:this.#nf.bind(this)}).attach(this)}onAttach(e){e.hasAttribute("role")||(0,a.effect)(this.#ly.bind(this)),(0,a.effect)(this.#lg.bind(this))}onConnect(e){(0,a.onDispose)(observeVisibility(e,this.#nd.set)),(0,a.effect)(this.#nb.bind(this)),(0,a.effect)(this.#lb.bind(this))}#nf(e){this.#nu.set(e[0].isIntersecting)}#nb(){let{hidden:e}=this.$props;this.$state.hidden.set(e()||!this.#nd()||!this.#nu())}#lb(){if(!this.$props.toggle()){this.#lm.set(null);return}this.el&&onPress(this.el,this.#lv.bind(this))}#lg(){let{hidden:e,timeText:t}=this.$state,{duration:i}=this.#q.$state;if(e())return;let{type:s,padHours:a,padMinutes:n,showHours:r}=this.$props,o=this.#lw(s()),l=i(),h=this.#lf();if(!Number.isFinite(o+l)){t.set("LIVE");return}let d=h?Math.max(0,l-o):o,u=formatTime(d,{padHrs:a(),padMins:n(),showHrs:r()});t.set((h?"-":"")+u)}#ly(){if(!this.el)return;let{toggle:e}=this.$props;(0,a.setAttribute)(this.el,"role",e()?"timer":null),(0,a.setAttribute)(this.el,"tabindex",e()?0:null)}#lw(e){let{bufferedEnd:t,duration:i,currentTime:s}=this.#q.$state;switch(e){case"buffered":return t();case"duration":return i();default:return s()}}#lf(){return this.$props.remainder()&&!1!==this.#lm()}#lv(e){if(e.preventDefault(),null===this.#lm()){this.#lm.set(!this.$props.remainder());return}this.#lm.set(e=>!e)}};let MediaPlayerInstance=class MediaPlayerInstance extends MediaPlayer{};let MediaProviderInstance=class MediaProviderInstance extends MediaProvider{};let MediaAnnouncerInstance=class MediaAnnouncerInstance extends MediaAnnouncer{};let ControlsInstance=class ControlsInstance extends Controls{};let ControlsGroupInstance=class ControlsGroupInstance extends ControlsGroup{};let ToggleButtonInstance=class ToggleButtonInstance extends ToggleButton{};let CaptionButtonInstance=class CaptionButtonInstance extends CaptionButton{};let FullscreenButtonInstance=class FullscreenButtonInstance extends FullscreenButton{};let LiveButtonInstance=class LiveButtonInstance extends LiveButton{};let MuteButtonInstance=class MuteButtonInstance extends MuteButton{};let PIPButtonInstance=class PIPButtonInstance extends PIPButton{};let PlayButtonInstance=class PlayButtonInstance extends PlayButton{};let AirPlayButtonInstance=class AirPlayButtonInstance extends AirPlayButton{};let GoogleCastButtonInstance=class GoogleCastButtonInstance extends GoogleCastButton{};let SeekButtonInstance=class SeekButtonInstance extends SeekButton{};let TooltipInstance=class TooltipInstance extends Tooltip{};let TooltipTriggerInstance=class TooltipTriggerInstance extends TooltipTrigger{};let TooltipContentInstance=class TooltipContentInstance extends TooltipContent{};let SliderInstance=class SliderInstance extends Slider{};let TimeSliderInstance=class TimeSliderInstance extends TimeSlider{};let VolumeSliderInstance=class VolumeSliderInstance extends VolumeSlider{};let AudioGainSliderInstance=class AudioGainSliderInstance extends AudioGainSlider{};let SpeedSliderInstance=class SpeedSliderInstance extends SpeedSlider{};let QualitySliderInstance=class QualitySliderInstance extends QualitySlider{};let SliderThumbnailInstance=class SliderThumbnailInstance extends SliderThumbnail{};let SliderValueInstance=class SliderValueInstance extends SliderValue{};let SliderVideoInstance=class SliderVideoInstance extends SliderVideo{};let SliderPreviewInstance=class SliderPreviewInstance extends SliderPreview{};let SliderChaptersInstance=class SliderChaptersInstance extends SliderChapters{};let MenuInstance=class MenuInstance extends Menu{};let MenuButtonInstance=class MenuButtonInstance extends MenuButton{};let MenuItemsInstance=class MenuItemsInstance extends MenuItems{};let MenuItemInstance=class MenuItemInstance extends MenuItem{};let RadioGroupInstance=class RadioGroupInstance extends RadioGroup{};let RadioInstance=class RadioInstance extends Radio{};let CaptionsInstance=class CaptionsInstance extends Captions{};let GestureInstance=class GestureInstance extends Gesture{};let PosterInstance=class PosterInstance extends Poster{};let ThumbnailInstance=class ThumbnailInstance extends Thumbnail{};let TimeInstance=class TimeInstance extends Time{};let ej=s.forwardRef((e,t)=>{let{children:i,...a}=e,n=s.Children.toArray(i),r=n.find(isSlottable);if(r){let e=r.props.children,i=n.map(t=>t!==r?t:s.Children.count(e)>1?s.Children.only(null):s.isValidElement(e)?e.props.children:null);return s.createElement(e_,{...a,ref:t},s.isValidElement(e)?s.cloneElement(e,void 0,i):null)}return s.createElement(e_,{...a,ref:t},i)});ej.displayName="Slot";let e_=s.forwardRef((e,t)=>{let{children:i,...n}=e;return s.isValidElement(i)?s.cloneElement(i,{...function(e,t){let i={...t};for(let s in t){let a=e[s],n=t[s],r=/^on[A-Z]/.test(s);r?a&&n?i[s]=(...e)=>{n(...e),a(...e)}:a&&(i[s]=a):"style"===s?i[s]={...a,...n}:"className"===s&&(i[s]=[a,n].filter(Boolean).join(" "))}return{...e,...i}}(n,i.props),ref:t?(0,a.composeRefs)(t,i.ref):i.ref}):s.Children.count(i)>1?s.Children.only(null):null});e_.displayName="SlotClone";let Slottable=({children:e})=>s.createElement(s.Fragment,null,e);function isSlottable(e){return s.isValidElement(e)&&e.type===Slottable}let ez=["button","div","span","img","video","audio"].reduce((e,t)=>{let i=s.forwardRef((e,i)=>{let{asChild:a,...n}=e,r=a?ej:t;return s.createElement(r,{...n,ref:i})});return i.displayName=`Primitive.${t}`,{...e,[t]:i}},{});function isRemotionProvider(e){return e?.$$PROVIDER_TYPE==="REMOTION"}function isRemotionSrc(e){return e?.type==="video/remotion"}let eX=SliderInstance.state.record,eY=Object.keys(eX).reduce((e,t)=>({...e,[t]:()=>eX[t]}),{});function useSliderState(e,t){let i=(0,a.useStateContext)(ey);return(0,a.useSignal)((t?.current?.$state||i||eY)[e])}let eJ=MediaPlayerInstance.state.record,eZ=Object.keys(eJ).reduce((e,t)=>({...e,[t]:()=>eJ[t]}),{});function useMediaState(e,t){let i=(0,a.useStateContext)(M);return(0,a.useSignal)((t?.current?.$state||i||eZ)[e])}}}]);