@openplayerjs/player 3.1.1 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).OpenPlayerJS=t()}(this,function(){"use strict";const e={passive:!1};class t{constructor(e){Object.defineProperty(this,"media",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"element",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.element=e}get currentSrc(){return this.media.currentSrc||this.media.src||""}get currentTime(){return this.media.currentTime||0}set currentTime(e){this.media.currentTime=e}get duration(){return this.media.duration}set duration(e){}get volume(){return this.media.volume}set volume(e){this.media.volume=e}get muted(){return this.media.muted}set muted(e){this.media.muted=e}get playbackRate(){return this.media.playbackRate}set playbackRate(e){this.media.playbackRate=e}get paused(){return this.media.paused}get ended(){return this.media.ended}load(e){e?.src&&this.media.src!==e.src&&(this.media.src=e.src),this.media.load()}play(){return this.media.play()}pause(){this.media.pause()}on(e,t,i){const r=i=>{t("error"!==e?void 0:this.media.error??i)};return this.media.addEventListener(e,r,i),()=>this.media.removeEventListener(e,r,i)}}function i(t,i){return[t.on("loadstart",()=>i.emit("loadstart"),e),t.on("loadedmetadata",()=>i.emit("loadedmetadata"),e),t.on("durationchange",()=>i.emit("durationchange"),e),t.on("timeupdate",()=>i.emit("timeupdate"),e),t.on("waiting",()=>i.emit("waiting"),e),t.on("seeking",()=>i.emit("seeking"),e),t.on("seeked",()=>i.emit("seeked"),e),t.on("ended",()=>i.emit("ended"),e),t.on("error",e=>i.emit("error",e),e),t.on("play",()=>i.emit("play"),e),t.on("playing",()=>i.emit("playing"),e),t.on("pause",()=>i.emit("pause"),e),t.on("volumechange",()=>i.emit("volumechange"),e),t.on("ratechange",()=>i.emit("ratechange"),e)]}class r{constructor(){Object.defineProperty(this,"surface",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"commands",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"surfaceListeners",{enumerable:!0,configurable:!0,writable:!0,value:[]})}bindSurfaceEvents(e,t){this.surface=e,this.events=t,this.surfaceListeners=i(e,t)}unbindSurfaceEvents(){this.surfaceListeners.forEach(e=>e()),this.surfaceListeners=[]}bindMediaEvents(e,t){const r={get currentTime(){return e.currentTime},set currentTime(t){e.currentTime=t},get duration(){return e.duration},set duration(e){},get volume(){return e.volume},set volume(t){e.volume=t},get muted(){return e.muted},set muted(t){e.muted=t},get playbackRate(){return e.playbackRate},set playbackRate(t){e.playbackRate=t},get paused(){return e.paused},get ended(){return e.ended},play:()=>e.play(),pause:()=>e.pause(),on:(t,i)=>{const r=()=>i();return e.addEventListener(t,r),()=>e.removeEventListener(t,r)}};this.surfaceListeners=i(r,t)}unbindMediaEvents(){this.unbindSurfaceEvents()}addMediaListener(e,t,i,r){e.addEventListener(t,i,r),this.surfaceListeners.push(()=>e.removeEventListener(t,i,r))}canHandlePlayback(e){const t=e.core.leases.owner("playback");return!t||t===this.name}bindCommands(e){const{events:t}=e;this.commands.push(t.on("cmd:seek",t=>{if(this.canHandlePlayback(e))try{e.surface.currentTime=t}catch{}})),this.commands.push(t.on("cmd:setVolume",t=>{try{e.surface.volume=t}catch{}})),this.commands.push(t.on("cmd:setMuted",t=>{try{e.surface.muted=t}catch{}})),this.commands.push(t.on("cmd:setRate",t=>{if(this.canHandlePlayback(e))try{e.surface.playbackRate=t}catch{}})),this.bindPlayPauseCommands(e)}unbindCommands(){for(const e of this.commands)e();this.commands=[]}bindPlayPauseCommands(e){const{events:t}=e;this.commands.push(t.on("cmd:play",()=>{this.canHandlePlayback(e)&&this.playImpl(e.surface)})),this.commands.push(t.on("cmd:pause",()=>{this.canHandlePlayback(e)&&this.pauseImpl(e.surface)}))}playImpl(e){const t=e.play();t&&"function"==typeof t.catch&&t.catch(()=>{})}pauseImpl(e){e.pause()}}class n extends r{constructor(){super(...arguments),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"default-engine"}),Object.defineProperty(this,"version",{enumerable:!0,configurable:!0,writable:!0,value:"1.0.0"}),Object.defineProperty(this,"capabilities",{enumerable:!0,configurable:!0,writable:!0,value:["media-engine"]}),Object.defineProperty(this,"priority",{enumerable:!0,configurable:!0,writable:!0,value:0})}canPlay(e){return""!==document.createElement("video").canPlayType(e.type||"")}attach(e){const t=e.resetSurface();try{t.load?.(e.activeSource)}catch{}this.bindSurfaceEvents(t,e.events),this.bindCommands(e),this.commands.push(e.events.on("cmd:startLoad",()=>{const i=e.core.state.current;if(!["ready","playing","paused","waiting","seeking","ended"].includes(i)&&"none"===e.media.preload){e.media.preload="metadata";try{t.load?.(e.activeSource)}catch{}}}))}detach(){this.unbindCommands(),this.unbindSurfaceEvents()}}const a={startTime:0,duration:0};class s{constructor(){Object.defineProperty(this,"disposers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"disposed",{enumerable:!0,configurable:!0,writable:!0,value:!1})}get isDisposed(){return this.disposed}add(e){const t=e??(()=>{});if(this.disposed){try{t()}catch{}return()=>{}}return this.disposers.push(t),t}addEventListener(e,t,i,r){return e.addEventListener(t,i,r),this.add(()=>e.removeEventListener(t,i,r))}dispose(){if(!this.disposed){this.disposed=!0;for(let e=this.disposers.length-1;e>=0;e--)try{this.disposers[e]()}catch{}this.disposers=[]}}}class o{constructor(){Object.defineProperty(this,"listeners",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}on(e,t){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t),()=>this.listeners.get(e).delete(t)}emit(e,t){this.listeners.get(e)?.forEach(e=>e(t))}listenerCount(e){return this.listeners.get(e)?.size??0}clear(){this.listeners.clear()}}class l{constructor(){Object.defineProperty(this,"owners",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"listeners",{enumerable:!0,configurable:!0,writable:!0,value:[]})}onChange(e){return this.listeners.push(e),()=>{this.listeners=this.listeners.filter(t=>t!==e)}}notify(e){const t=this.owners.get(e);for(const i of this.listeners)try{i(e,t)}catch{}}acquire(e,t){return!this.owners.has(e)&&(this.owners.set(e,t),this.notify(e),!0)}release(e,t){this.owners.get(e)===t&&(this.owners.delete(e),this.notify(e))}owner(e){return this.owners.get(e)}}class c{constructor(){Object.defineProperty(this,"plugins",{enumerable:!0,configurable:!0,writable:!0,value:[]})}register(e){this.plugins.push(e)}all(){return this.plugins}}class u{constructor(e){Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:e})}get current(){return this.state}transition(e){this.state=e}}function d(e,t){const i=Math.floor(e%1*(t||0));let r=Math.floor(e),n=Math.floor(r/60);const a=Math.floor(n/60),s=e=>{const t=e.toString();return e<10?e<=0?"00":`0${t}`:t};return n%=60,r%=60,`${a>0?`${s(a)}:`:""}${s(n)}:${s(r)}${i?`:${s(i)}`:""}`}const h=e=>{const t=Number.isFinite(e)?Math.max(0,e):0,i=Math.floor(t),r=Math.floor(i/3600),n=Math.floor(i%3600/60);return`PT${r?`${r}H`:""}${n?`${n}M`:""}${i%60}S`};function p(e){const t=e.getBoundingClientRect();return{left:t.left+(window.pageXOffset||document.documentElement.scrollLeft),top:t.top+(window.pageYOffset||document.documentElement.scrollTop)}}function m(e){return e instanceof HTMLAudioElement}function b(){return/ipad|iphone|ipod/i.test(window.navigator.userAgent)&&!window.MSStream||/android/i.test(window.navigator.userAgent)}function f(e,t){let i;try{i=new URL(t).pathname}catch{return m(e)?"audio/mp3":"video/mp4"}const r=i.split("."),n=r.length>1?r.pop().toLowerCase():"";if(!n)return m(e)?"audio/mp3":"video/mp4";switch(n){case"m3u8":case"m3u":return"application/x-mpegURL";case"mpd":return"application/dash+xml";case"mp4":return m(e)?"audio/mp4":"video/mp4";case"mp3":return"audio/mp3";case"webm":return m(e)?"audio/webm":"video/webm";case"ogg":return m(e)?"audio/ogg":"video/ogg";case"ogv":return"video/ogg";case"oga":return"audio/ogg";case"3gp":return"audio/3gpp";case"wav":return"audio/wav";case"aac":return"audio/aac";case"flac":return"audio/flac";default:return m(e)?"audio/mp3":"video/mp4"}}const v=e=>Math.min(1,Math.max(0,e));class y{constructor(e,i={}){if(Object.defineProperty(this,"media",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isLive",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:new o}),Object.defineProperty(this,"leases",{enumerable:!0,configurable:!0,writable:!0,value:new l}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:new u("idle")}),Object.defineProperty(this,"config",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"userInteracted",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"canAutoplay",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"canAutoplayMuted",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"nativeSurface",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"activeSurface",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"interactionUnsubs",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"plugins",{enumerable:!0,configurable:!0,writable:!0,value:new c}),Object.defineProperty(this,"pluginDisposables",{enumerable:!0,configurable:!0,writable:!0,value:new WeakMap}),Object.defineProperty(this,"_src",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_volume",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"_playbackRate",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"_currentTime",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_muted",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_duration",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"detectedSources",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"activeEngine",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"playerContext",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"autoplaySupport",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"autoplaySupportPromise",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"readyPromise",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"readyResolve",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"readyReject",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"playRequestPromise",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),"string"==typeof e){const t=document.querySelector(e);if(!(t&&t instanceof HTMLMediaElement))throw new Error(`OpenPlayer: could not find media element for selector: ${e}`);this.media=t}else this.media=e;this.nativeSurface=new t(this.media),this.activeSurface=this.nativeSurface,this.registerPlugin(new n),this.config={...a,...i},this.media.currentTime=this.config.startTime||this.media.currentTime,this._currentTime=this.config.startTime||this.activeSurface.currentTime,this._duration=this.config.duration||this.activeSurface.duration;const r=v(this.config.startVolume??this.activeSurface.volume);this.activeSurface.volume=r,this._volume=r,void 0!==this.config.startVolume?(this.activeSurface.muted=r<=0,this._muted=r<=0):this._muted=this.activeSurface.muted,this.activeSurface.playbackRate=this.config.startPlaybackRate||this.activeSurface.playbackRate,this._playbackRate=this.config.startPlaybackRate||this.activeSurface.playbackRate,(this.config.plugins||[]).forEach(e=>this.registerPlugin(e)),this.bindStateTransitions(),this.bindSurfaceSync(),this.bindLeaseSync(),this.bindFirstInteraction(),queueMicrotask(()=>this.maybeAutoLoad())}get surface(){return this.activeSurface}on(e,t){return this.events.on(e,t)}emit(e,t){this.events.emit(e,t),this.plugins.all().filter(e=>!e.capabilities?.includes("media-engine")).forEach(i=>{i.onEvent?.(e,t)})}registerPlugin(e){this.plugins.register(e);const t=new s;this.pluginDisposables.set(e,t),e.setup?.({core:this,media:this.media,events:this.events,state:this.state,leases:this.leases,dispose:t,add:e=>t.add(e??void 0),on:(e,i)=>t.add(this.events.on(e,i)),listen:(e,i,r,n)=>t.addEventListener(e,i,r,n)})}set src(e){this._src=e,e&&(this.detectedSources=[{src:e,type:f(this.media,e)}],this.emit("source:set",e),this.playerContext&&(this.activeEngine?.detach?.(this.playerContext),this.activeEngine=void 0,this.playerContext=null),this.state.transition("idle"),this.readyPromise=void 0,this.readyResolve=void 0,this.readyReject=void 0,this.playRequestPromise=void 0,queueMicrotask(()=>this.load()))}get src(){return this._src}get volume(){return this._volume}set volume(e){const t=v(e);this._volume=t,this.emit("cmd:setVolume",t)}get muted(){return this._muted}set muted(e){this._muted=e,this.emit("cmd:setMuted",e)}set playbackRate(e){this._playbackRate=e,this.emit("cmd:setRate",e)}get playbackRate(){return this._playbackRate}set currentTime(e){this._currentTime=e,this.emit("cmd:seek",e)}get currentTime(){return this._currentTime}get duration(){return this._duration}load(){if("idle"!==this.state.current)return;this.emit("cmd:startLoad"),this.createReadyPromise();const e=this.detectedSources??this.readMediaSources(this.media);this.detectedSources=e;const{engine:t,source:i}=this.resolveMediaEngine(e);this.playerContext=this.createPlayerContext(i),this.activeEngine?.detach?.(this.playerContext),this.activeEngine=t,this.emit("loadstart"),this.emit("cmd:load"),this.activeEngine.attach(this.playerContext),this.emit("cmd:setVolume",this._volume),this.emit("cmd:setMuted",this._muted),this.emit("cmd:setRate",this._playbackRate),this._currentTime&&this.emit("cmd:seek",this._currentTime)}async whenReady(){if("ready"!==this.state.current&&"playing"!==this.state.current&&"paused"!==this.state.current&&"waiting"!==this.state.current&&"seeking"!==this.state.current&&"ended"!==this.state.current)return this.activeEngine||this.load(),this.createReadyPromise(),this.readyPromise??Promise.resolve()}async play(){return this.playRequestPromise||(this.activeEngine||this.load(),this.emit("cmd:play"),this.playRequestPromise=this.whenReady().finally(()=>{this.playRequestPromise=void 0})),this.playRequestPromise}async determineAutoplaySupport(){if(this.autoplaySupport)return this.autoplaySupport;if(this.autoplaySupportPromise)return this.autoplaySupportPromise;await this.whenReady().catch(()=>{});const e=this.media,t=e.volume,i=e.muted,r=()=>{try{e.volume=t}catch{}try{e.muted=i}catch{}this._volume=t,this._muted=i};return this.autoplaySupportPromise=(async()=>{try{try{const t=e.play();void 0!==t&&await t;try{e.pause()}catch{}return this.canAutoplay=!0,this.canAutoplayMuted=!1,{autoplay:!0,muted:!1}}catch{try{e.volume=0,e.muted=!0,this._volume=0,this._muted=!0}catch{}try{const t=e.play();void 0!==t&&await t;try{e.pause()}catch{}return this.canAutoplay=!0,this.canAutoplayMuted=!0,{autoplay:!0,muted:!0}}catch{return this.canAutoplay=!1,this.canAutoplayMuted=!1,{autoplay:!1,muted:!1}}}}finally{r()}})(),this.autoplaySupport=await this.autoplaySupportPromise,this.autoplaySupportPromise}pause(){"idle"!==this.state.current&&"loading"!==this.state.current&&this.emit("cmd:pause")}destroy(){this.events.emit("player:destroy"),this.playerContext&&this.activeEngine?.detach?.(this.playerContext),this.playerContext=null,this.plugins.all().forEach(e=>{try{this.pluginDisposables.get(e)?.dispose()}catch{}try{e.destroy?.()}catch{}}),this.interactionUnsubs.forEach(e=>e()),this.interactionUnsubs=[],this.events.clear()}addCaptions(e){const t=document.createElement("track");return t.kind=e.kind||"captions",t.src=e.src,e.srclang&&(t.srclang=e.srclang),e.label&&(t.label=e.label),e.default&&(t.default=!0),this.media.appendChild(t),this.emit("texttrack:add",t),this.emit("texttrack:listchange"),t}getPlugin(e){return this.plugins.all().find(t=>t?.name===e)}extend(e){if(!e||"object"!=typeof e)return this;for(const t of Object.keys(e))if(void 0===this[t])this[t]=e[t];else if(this[t]&&"object"==typeof this[t]&&e[t]&&"object"==typeof e[t]){const i=this[t],r=e[t];for(const e of Object.keys(r))void 0===i[e]&&(i[e]=r[e])}return this}bindFirstInteraction(){const e="undefined"!=typeof document?document:null;if(!e)return;const t=()=>{this.userInteracted||(this.userInteracted=!0,this.emit("player:interacted"),this.interactionUnsubs.forEach(e=>e()),this.interactionUnsubs=[])},i={capture:!0,passive:!0},r={capture:!0},n=n=>{e.addEventListener(n,t,i),this.interactionUnsubs.push(()=>e.removeEventListener(n,t,r))};n("pointerdown"),n("mousedown"),n("touchstart"),n("keydown")}resolveMediaEngine(e){if(0===e.length)throw new Error("Player cannot resolve media with an empty source");const t=[...this.plugins.all().filter(e=>!(!e||!e.capabilities?.includes("media-engine")||"function"!=typeof e.canPlay))].sort((e,t)=>(t.priority??0)-(e.priority??0)||e.name.localeCompare(t.name));for(const i of e)for(const e of t)if(e.canPlay?.(i))return{engine:e,source:i};throw new Error("No compatible media engine found")}bindStateTransitions(){this.events.on("loadstart",()=>this.state.transition("loading")),this.events.on("loadedmetadata",()=>{this.state.transition("ready"),this.readyResolve&&(this.readyResolve(),this.readyResolve=void 0,this.readyReject=void 0)}),this.events.on("playing",()=>this.state.transition("playing")),this.events.on("pause",()=>this.state.transition("paused")),this.events.on("waiting",()=>this.state.transition("waiting")),this.events.on("seeking",()=>this.state.transition("seeking")),this.events.on("seeked",()=>this.state.transition("ready")),this.events.on("ended",()=>this.state.transition("ended")),this.events.on("error",e=>{this.state.transition("error"),this.readyReject&&(this.readyReject(e),this.readyResolve=void 0,this.readyReject=void 0)})}bindSurfaceSync(){const e=()=>{try{this._currentTime=this.activeSurface.currentTime||0}catch{}try{const e=this.config.duration||this.activeSurface.duration;this._duration=e}catch{}try{this._muted=Boolean(this.activeSurface.muted);const e=this.activeSurface.volume;Number.isFinite(e)&&(this._volume=e)}catch{}try{const e=this.activeSurface.playbackRate;Number.isFinite(e)&&(this._playbackRate=e)}catch{}};this.events.on("loadedmetadata",()=>e()),this.events.on("durationchange",()=>e()),this.events.on("timeupdate",()=>e()),this.events.on("volumechange",()=>e()),this.events.on("ratechange",()=>e())}createPlayerContext(e){const t={media:this.media,container:this.media.parentElement??this.media,events:this.events,config:this.config,activeSource:e,core:this,surface:this.activeSurface,setSurface:e=>(this.activeSurface=e,this.activeSurface),resetSurface:()=>(this.activeSurface=this.nativeSurface,this.nativeSurface)};return Object.defineProperty(t,"surface",{get:()=>this.activeSurface,enumerable:!0,configurable:!0}),t}bindLeaseSync(){this.leases.onChange(e=>{"playback"===e&&queueMicrotask(()=>{this.emit("cmd:setVolume",this._volume),this.emit("cmd:setMuted",this._muted),this.emit("cmd:setRate",this._playbackRate),this._currentTime&&this.emit("cmd:seek",this._currentTime)})})}createReadyPromise(){this.readyPromise||(this.readyPromise=new Promise((e,t)=>{this.readyResolve=e,this.readyReject=t}))}readMediaSources(e){const t=[];e.src&&t.push({src:e.src,type:f(e,e.src)});try{e.querySelectorAll("source").forEach(i=>{t.push({src:i.src,type:i.type||f(e,i.src)})})}catch{}return t}maybeAutoLoad(){if("idle"!==this.state.current)return;if(!this.plugins.all().some(e=>e.capabilities?.includes("media-engine")))return;const e=this.readMediaSources(this.media);if(0===e.length)return;this.detectedSources=e;const t=this.media.autoplay;try{this.media.querySelectorAll("source").forEach(e=>e.remove()),this.media.getAttribute("src")&&this.media.removeAttribute("src"),this.media.src&&(this.media.src=""),this.load(),t&&(this.media.autoplay=!1,queueMicrotask(()=>this.emit("cmd:play")))}catch{}}}class g{constructor(e){Object.defineProperty(this,"bus",{enumerable:!0,configurable:!0,writable:!0,value:e})}on(e,t){return this.bus.on(e,t)}emit(e,...t){this.bus.emit(e,...t)}clear(){this.bus.clear()}}const w="__op::overlay::manager";class P{constructor(){Object.defineProperty(this,"bus",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"active",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"overlays",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),this.bus=new g(new o)}dispose(){this.overlays.clear(),this.active=null,this.bus.clear()}activate(e){this.overlays.set(e.id,e),this.recomputeAndEmit()}update(e,t){const i=this.overlays.get(e);if(!i)return;const r={...i,...t,id:i.id};this.overlays.set(e,r),this.recomputeAndEmit()}deactivate(e){this.overlays.delete(e)&&this.recomputeAndEmit()}recomputeAndEmit(){const e=this.pickActive();this.active=e,this.bus.emit("overlay:changed",this.active)}pickActive(){let e=null;for(const t of this.overlays.values())(!e||t.priority>e.priority)&&(e=t);return e}}function _(e){if(e[w])return e[w];const t=new P;e[w]=t;try{if(e?.events?.on&&e?.events?.emit){const i=t.bus.on("overlay:changed",t=>e.events.emit("overlay:changed",t));e.events.on("player:destroy",()=>{try{i()}catch{}try{t.dispose()}catch{}try{delete e[w]}catch{}})}}catch{}return t}const E=Symbol.for("openplayerjs.caption.provider");var O=Object.freeze({__proto__:null,BaseMediaEngine:r,Core:y,DVR_THRESHOLD:120,DefaultMediaEngine:n,DisposableStore:s,EVENT_OPTIONS:e,EventBus:o,HtmlMediaSurface:t,IframeMediaSurface:class{constructor(e,t={}){Object.defineProperty(this,"kind",{enumerable:!0,configurable:!0,writable:!0,value:"iframe"}),Object.defineProperty(this,"element",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"currentSrc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"internalBus",{enumerable:!0,configurable:!0,writable:!0,value:new o}),Object.defineProperty(this,"adapter",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pollIntervalMs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pollTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_paused",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"_ended",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_duration",{enumerable:!0,configurable:!0,writable:!0,value:NaN}),Object.defineProperty(this,"_currentTime",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_volume",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"_muted",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_playbackRate",{enumerable:!0,configurable:!0,writable:!0,value:1}),this.adapter=e,this.pollIntervalMs=t.pollIntervalMs??250,this.onAdapterReady=this.onAdapterReady.bind(this),this.onAdapterState=this.onAdapterState.bind(this),this.onAdapterError=this.onAdapterError.bind(this),this.adapter.on("ready",this.onAdapterReady),this.adapter.on("state",this.onAdapterState),this.adapter.on("error",this.onAdapterError),this.adapter.on("timeupdate",e=>this.applyTime(e)),this.adapter.on("durationchange",e=>this.applyDuration(e)),this.adapter.on("ratechange",e=>this.applyRate(e)),this.adapter.on("volumechange",(e,t)=>this.applyVolume(e,t)),this.adapter.on("ended",()=>this.applyEnded())}get currentTime(){return this._currentTime}set currentTime(e){this._currentTime=e,this.internalBus.emit("seeking"),Promise.resolve(this.adapter.seekTo(e)).then(()=>{this.internalBus.emit("seeked")})}get duration(){return this._duration}set duration(e){}get volume(){return this._volume}set volume(e){const t=Math.min(1,Math.max(0,e));this.adapter.setVolume(t),this.applyVolume(t,this._muted)}get muted(){return this._muted}set muted(e){e?this.adapter.mute():this.adapter.unmute(),this.applyVolume(this._volume,e)}get playbackRate(){return this._playbackRate}set playbackRate(e){this.adapter.setPlaybackRate(e),this.applyRate(e)}get paused(){return this._paused}get ended(){return this._ended}load(e){}play(){return Promise.resolve(this.adapter.play()).then(()=>{})}pause(){Promise.resolve(this.adapter.pause())}on(e,t,i){return this.internalBus.on(e,t)}async mount(e){await this.adapter.mount(e)}destroy(){this.stopPolling(),this.adapter.off("ready",this.onAdapterReady),this.adapter.off("state",this.onAdapterState),this.adapter.off("error",this.onAdapterError),this.adapter.destroy(),this.internalBus.clear()}onAdapterReady(){this.applyDuration(this.safeNum(this.adapter.getDuration())),this.applyTime(this.safeNum(this.adapter.getCurrentTime())),this.adapter.getVolume&&this.applyVolume(this.safeNum(this.adapter.getVolume()),this._muted),this.adapter.isMuted&&this.applyVolume(this._volume,!!this.adapter.isMuted()),this.adapter.getPlaybackRate&&this.applyRate(this.safeNum(this.adapter.getPlaybackRate())),this.adapter.getElement&&(this.element=this.adapter.getElement()),this.startPolling(),this.internalBus.emit("loadedmetadata")}onAdapterState(e){switch(e){case"loading":case"buffering":this.internalBus.emit("waiting");break;case"playing":this._paused=!1,this._ended=!1,this.internalBus.emit("play"),this.internalBus.emit("playing");break;case"paused":this._paused=!0,this.internalBus.emit("pause");break;case"ended":this._paused=!0,this._ended=!0,this.internalBus.emit("ended")}}onAdapterError(e){this.internalBus.emit("error",e)}applyTime(e){Number.isFinite(e)&&(this._currentTime=e,this.internalBus.emit("timeupdate"))}applyDuration(e){!Number.isFinite(e)||e<=0||(this._duration=e,this.internalBus.emit("durationchange"))}applyRate(e){!Number.isFinite(e)||e<=0||(this._playbackRate=e,this.internalBus.emit("ratechange"))}applyVolume(e,t){Number.isFinite(e)&&(this._volume=Math.min(1,Math.max(0,e)),this._muted=!!t,this.internalBus.emit("volumechange"))}applyEnded(){this._ended=!0,this._paused=!0,this.internalBus.emit("ended")}startPolling(){if(null!=this.pollTimer)return;const e=()=>{this.applyTime(this.safeNum(this.adapter.getCurrentTime())),this.applyDuration(this.safeNum(this.adapter.getDuration())),this.adapter.getVolume&&this.applyVolume(this.safeNum(this.adapter.getVolume()),this._muted),this.adapter.isMuted&&this.applyVolume(this._volume,!!this.adapter.isMuted()),this.adapter.getPlaybackRate&&this.applyRate(this.safeNum(this.adapter.getPlaybackRate())),this.pollTimer=window.setTimeout(e,this.pollIntervalMs)};this.pollTimer=window.setTimeout(e,this.pollIntervalMs)}stopPolling(){null!=this.pollTimer&&(window.clearTimeout(this.pollTimer),this.pollTimer=null)}safeNum(e){const t=Number(e);return Number.isFinite(t)?t:NaN}},Lease:l,PluginRegistry:c,StateManager:u,formatTime:d,generateISODateTime:h,getCaptionTrackProvider:function(e){return e[E]??null},getOverlayManager:_,isAudio:m,isMobile:b,offset:p,setCaptionTrackProvider:function(e,t){e[E]=t}});const k=new Map,S={top:["progress"],"bottom-left":["play","time","volume"],"bottom-right":["captions","settings","fullscreen"]};function L(e){if(!e||"object"!=typeof e)return{...S};if(e.layers&&"object"==typeof e.layers){const t={},{left:i,middle:r,right:n}=e.layers;return Array.isArray(i)&&(t["bottom-left"]=i),Array.isArray(r)&&(t.top=r),Array.isArray(n)&&(t["bottom-right"]=n),Object.keys(t).length>0?t:{...S}}const t={};for(const[i,r]of Object.entries(e))Array.isArray(r)&&(t[i]=r);return Object.keys(t).length>0?t:{...S}}function j(e){const t=document.createElement("div");t.className=`op-controls__layer op-controls-layer__${e}`;const i=document.createElement("div");i.className="op-controls__left";const r=document.createElement("div");r.className="op-controls__middle";const n=document.createElement("div");return n.className="op-controls__right",t.append(i,r,n),{section:t,left:i,center:r,right:n}}function A(e,t){const i=j("top"),r=j("center"),n=j("bottom");return e.append(i.section,r.section,n.section),{place(e,a){const s=e.region?.trim();if("main"===s&&t)return void t.appendChild(a);const o="top"===e.v?i:"middle"===e.v?r:n;("left"===e.h?o.left:"center"===e.h?o.center:o.right).appendChild(a)}}}function C(e,t){k.set(e,t)}function R(e){const t=[],i=L(e);return Object.entries(i).forEach(([e,i])=>{if(!Array.isArray(i))return;const r=function(e){if("main"===e)return{v:"middle",h:"center",region:"main"};const t=e.split("-");let i="middle",r="center";for(const e of t)"top"!==e&&"bottom"!==e||(i=e),"left"!==e&&"right"!==e||(r=e),"middle"!==e&&"center"!==e||(r="center");return{v:i,h:r}}(e);i.forEach(e=>{const i=function(e){const t=k.get(e);return t?.()||null}(e);i&&(i.placement=r,t.push(i))})}),t}let x=0;function T(e,t,i){const r=e.parentElement??i?.container;if(!r)return void e.setAttribute("aria-label",t);const n=e.getAttribute("aria-labelledby");let a=null;if(n){const e=document.getElementById(n);e&&e instanceof HTMLSpanElement&&(a=e)}a||(a=document.createElement("span"),a.className="op-player__sr-only",a.id=(x+=1,`op-player-sr-${x}`),e.parentElement===r&&r.contains(e)?r.insertBefore(a,e):r.appendChild(a),e.setAttribute("aria-labelledby",a.id)),a.textContent=t,e.removeAttribute("aria-label")}function M(e,t,i){if("button"===e.tagName.toLowerCase()||"button"===e.getAttribute("role"))return function(e,t){const i=e.querySelector(":scope > span.op-player__sr-only"),r=i??document.createElement("span");i||(r.className="op-player__sr-only",e.appendChild(r)),r.textContent=t}(e,t),void e.removeAttribute("aria-label");T(e,t,i)}const N=0,F=!0,I=!0,B=Object.freeze({auto:"Auto",captions:"CC/Subtitles",click:"Click to unmute",container:"Media player",fullscreen:"Fullscreen",levels:"Quality Levels",live:"Live",loading:"Loading...",media:"Media",mute:"Mute",off:"Off",pause:"Pause",play:"Play",progressRail:"Time Rail",progressSlider:"Time Slider",settings:"Player Settings",speed:"Speed",speedNormal:"Normal",tap:"Tap to unmute",toggleCaptions:"Toggle Captions",unmute:"Unmute",volume:"Volume",volumeControl:"Volume Control",volumeSlider:"Volume Slider"});function D(e){const t=e.config?e.config:e,i=t.allowSkip??F,r=t.allowRewind??I,n=t.step??N,a=t.width,s=t.height,o={...B,...t.labels||{}};if(e.config)try{t.labels=o,t.allowSkip=i,t.allowRewind=r,t.step=n}catch{}return{allowSkip:i,allowRewind:r,step:n,width:a,height:s,labels:o}}function q(e){try{if(!!0)return e.surface;const t=_(e)?.active,i=t?.fullscreenVideoEl;return i&&"function"==typeof i.play?i:e.surface}catch{return e.surface}}async function V(e){const t=q(e);t.paused||t.ended?await e.play():e.pause()}const $=Symbol.for("openplayerjs.settings.registry");class H{constructor(){Object.defineProperty(this,"providers",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}register(e){return this.providers.set(e.id,e),()=>this.providers.delete(e.id)}list(){return Array.from(this.providers.values()).sort((e,t)=>e.label.localeCompare(t.label))}}function z(e){const t=e;if(t[$])return t[$];const i=new H;return t[$]=i,i}class U{constructor(){Object.defineProperty(this,"core",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"overlayMgr",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"activeOverlay",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"dispose",{enumerable:!0,configurable:!0,writable:!0,value:new s})}onOverlayChanged(e){}create(e){return this.dispose.dispose(),this.dispose=new s,this.core=e,this.overlayMgr=_(e),this.activeOverlay=this.overlayMgr.active??null,this.dispose.add(this.overlayMgr.bus.on("overlay:changed",e=>{this.activeOverlay=e,this.onOverlayChanged(e)})),this.build()}destroy(){this.dispose.dispose()}onPlayer(e,t){return this.dispose.add(this.core.events.on(e,t))}listen(e,t,i,r){return this.dispose.addEventListener(e,t,i,r)}resolvePlayerRoot(){const e=this.core.media;return e&&(e.closest(".op-player")||e.parentElement)||document.body}resolveFullscreenContainer(){return this.activeOverlay?.fullscreenEl||this.resolvePlayerRoot()}resolveFullscreenVideoEl(){return this.activeOverlay?.fullscreenVideoEl||(this.core.media??null)}}function W(e){return"captions"===e||"subtitles"===e}function X(e){const t=e.textTracks??null;if(!t)return[];const i=[];for(let e=0;e<t.length;e++){const r=t[e];r&&(W(String(r.kind))&&i.push({index:e,track:r}))}return i}function J(e){const t=X(e);for(const e of t)if("showing"===e.track.mode)return e.index;return"off"}function K(e){for(const t of X(e))t.track.mode="disabled"}function Q(e,t){for(const i of X(e))i.track.mode=i.index===t?"showing":"disabled"}class Y extends U{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"captions"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"right"}}),Object.defineProperty(this,"button",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"lastSelectedIndex",{enumerable:!0,configurable:!0,writable:!0,value:null})}build(){const t=this.core,i=D(t).labels,r=i.captions,n=i.toggleCaptions;this.button=document.createElement("button"),this.button.type="button",this.button.className="op-controls__captions",M(this.button,n),this.button.setAttribute("aria-pressed","false");const a=()=>{const e=q(t),i=X(e);this.button.style.display=i.length?"":"none";const r=J(e),n="off"!==r;"number"==typeof r&&(this.lastSelectedIndex=r),this.button.classList.toggle("op-controls__captions--on",n),this.button.setAttribute("aria-pressed",n?"true":"false")};this.listen(this.button,"click",e=>{const i=e,r=q(t);if("off"===J(r)){const e=X(r),t=this.lastSelectedIndex??e[0]?.index;"number"==typeof t&&Q(r,t)}else K(r);a(),i.preventDefault(),i.stopPropagation()},e);const s={id:"captions",label:r,getSubmenu:()=>{const e=q(t),n=X(e);if(!n.length)return null;const s=J(e);return{id:"captions",label:r,items:[{id:"off",label:i.off,checked:"off"===s,onSelect:()=>{K(e),a()}},...n.map(t=>{return{id:String(t.index),label:(i=t.track,r=t.index,i.label&&i.label.trim()||i.language&&i.language.trim().toUpperCase()||`Track ${r+1}`),checked:t.index===s,onSelect:()=>{Q(e,t.index),this.lastSelectedIndex=t.index,a()}};var i,r})]}}};return z(t).register(s),this.dispose.add(this.overlayMgr.bus.on("overlay:changed",a)),this.onPlayer("loadedmetadata",a),a(),this.button}}function G(e){const t=new Y;return e&&(t.placement=e),t}class Z extends U{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"currentTime"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"top",h:"left"}})}build(){const e=this.core,t=document.createElement("time");t.className="op-controls__current",t.setAttribute("role","timer"),t.setAttribute("aria-live","off"),t.setAttribute("aria-hidden","false"),t.setAttribute("datetime","PT0M0S"),t.innerText="0:00";const i=()=>{if(this.activeOverlay)return t.setAttribute("aria-hidden","false"),void(t.innerText=d(Math.ceil(this.activeOverlay.value)));if(e.isLive)return void t.setAttribute("aria-hidden","true");const i=e.currentTime;t.setAttribute("aria-hidden","false");const r=Number.isFinite(i)?Math.max(0,i):0,n=d(r);t.innerText=n,t.setAttribute("datetime",h(r))};return this.onPlayer("timeupdate",()=>i()),this.onPlayer("seeked",()=>i()),this.onPlayer("durationchange",()=>i()),this.overlayMgr.bus.on("overlay:changed",()=>i()),i(),t}}function ee(e){const t=new Z;return e&&(t.placement=e),t}class te extends U{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"duration"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"top",h:"right"}})}build(){const e=this.core,t=document.createElement("time");t.className="op-controls__duration",t.setAttribute("aria-hidden","false"),t.setAttribute("datetime","PT0M0S");const i=()=>{if(this.activeOverlay)return t.setAttribute("aria-hidden","false"),void(t.innerText=d(this.activeOverlay.duration));const i=e.duration;if(e.isLive||i===1/0)return t.removeAttribute("datetime"),void(t.textContent=D(e).labels.live);t.setAttribute("aria-hidden","false");const r=Number.isFinite(i)?Math.max(0,i):e.config?.duration||0,n=d(r);t.textContent=n,t.setAttribute("datetime",h(r))};return this.onPlayer("durationchange",i),this.onPlayer("timeupdate",i),this.overlayMgr.bus.on("overlay:changed",i),i(),t}}function ie(e){const t=new te;return e&&(t.placement=e),t}function re(){const e=document;return document.fullscreenElement||e.webkitFullscreenElement||e.mozFullScreenElement||e.msFullscreenElement||null}function ne(){const e=document;return document.exitFullscreen?document.exitFullscreen():e.mozCancelFullScreen?e.mozCancelFullScreen():e.webkitCancelFullScreen?e.webkitCancelFullScreen():e.msExitFullscreen?e.msExitFullscreen():void 0}class ae extends U{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"fullscreen"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"right"}}),Object.defineProperty(this,"isFullscreen",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"screenW",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"screenH",{enumerable:!0,configurable:!0,writable:!0,value:0})}build(){const t=D(this.core).labels,i=document.createElement("button");i.tabIndex=0,i.type="button",i.className="op-controls__fullscreen",M(i,t.fullscreen),i.setAttribute("aria-pressed","false");const r=(e,t)=>{const i=this.resolveFullscreenContainer(),r=this.resolveFullscreenVideoEl();e?(i.style.width="100%",r&&(r.style.width="100%")):(i.style.removeProperty("width"),r&&r.style.removeProperty("width")),t?(i.style.height="100%",r&&(r.style.height="100%")):(i.style.removeProperty("height"),r&&r.style.removeProperty("height"))},n=()=>{const e=re(),t=this.resolveFullscreenContainer(),n=!!e&&(e===t||e.contains?.(t));var a;(a=n)?i.classList.add("op-controls__fullscreen--out"):i.classList.remove("op-controls__fullscreen--out"),i.setAttribute("aria-pressed",a?"true":"false"),n?document.body.classList.add("op-fullscreen__on"):document.body.classList.remove("op-fullscreen__on"),r(n?this.screenW:void 0,n?this.screenH:void 0),this.isFullscreen=n};return["fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange"].forEach(t=>{this.listen(document,t,n,e)}),this.listen(document,"keydown",e=>{"Escape"===e.key&&this.isFullscreen&&ne()},e),this.listen(i,"click",async e=>{const t=e;if(this.screenW=window.screen.width,this.screenH=window.screen.height,re())return void ne();!function(e){if(e)e.requestFullscreen?e.requestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullScreen?e.webkitRequestFullScreen():e.msRequestFullscreen?e.msRequestFullscreen():e.webkitEnterFullscreen&&e.webkitEnterFullscreen()}(this.resolveFullscreenContainer());try{await(window.screen.orientation?.lock("landscape"))}catch{}t.preventDefault(),t.stopPropagation()},e),n(),i}onOverlayChanged(){if(re()){re()&&document.dispatchEvent(new Event("fullscreenchange"))}}}function se(e){const t=new ae;return e&&(t.placement=e),t}class oe extends U{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"play"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"left"}})}build(){const t=this.core,i=D(t).labels,r=i.play,n=i.pause,a=i.restart;let s=!1;const o=document.createElement("button");o.tabIndex=0,o.type="button",o.className="op-controls__playpause",M(o,r),o.setAttribute("aria-pressed","false"),this.listen(o,"click",async e=>{const i=e;if(i.preventDefault(),i.stopPropagation(),s){q(t).currentTime=0}await V(t)},e);const l=e=>{o.classList.toggle("op-controls__playpause--pause",e),o.classList.toggle("op-controls__playpause--replay",s&&!e),o.setAttribute("aria-pressed",e?"true":"false"),M(o,s&&!e?a:e?n:r)};return this.onPlayer("play",()=>{s=!1,l(!0)}),this.onPlayer("playing",()=>{s=!1,l(!0)}),this.onPlayer("pause",()=>l(!1)),this.onPlayer("ended",()=>{s=!0,l(!1)}),o}}function le(e){const t=new oe;return e&&(t.placement=e),t}class ce extends U{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"progress"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"top",h:"center"}}),Object.defineProperty(this,"repaint",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}build(){const t=this.core,i=D(t),{allowRewind:r,allowSkip:n,labels:a}=i,s=a.progressSlider,o=a.progressRail,l=document.createElement("div");l.className="op-controls__progress",l.role="group",M(l,s);const c=document.createElement("input");c.type="range",c.role="slider",c.className="op-controls__progress--seek",c.tabIndex=0,c.min="0",c.step="0.1",c.value="0",M(c,o,{container:l}),c.setAttribute("aria-valuemin","0"),c.setAttribute("aria-valuenow","0");const u=document.createElement("progress");u.className="op-controls__progress--buffer",u.max=100,u.value=0;const h=document.createElement("progress");let m;h.className="op-controls__progress--played",h.max=100,h.value=0,l.appendChild(c),l.appendChild(h),l.appendChild(u),b()||(m=document.createElement("span"),m.className="op-controls__tooltip",m.tabIndex=-1,m.textContent="00:00",l.appendChild(m));const f=e=>{e?c.classList.add("op-progress--pressed"):c.classList.remove("op-progress--pressed")};this.listen(c,"pointerdown",()=>f(!0)),this.listen(c,"pointerup",()=>f(!1)),this.listen(c,"pointercancel",()=>f(!1)),this.listen(c,"mouseleave",()=>f(!1)),this.listen(c,"touchstart",()=>f(!0),e),this.listen(c,"touchend",()=>f(!1),e),this.listen(c,"mousedown",()=>f(!0),e),this.listen(c,"mouseup",()=>f(!1),e);const v=()=>f(!1);this.listen(document,"pointerup",v,e),this.listen(document,"pointercancel",v,e),this.listen(document,"mouseup",v,e),this.listen(document,"touchend",v,e);const y=e=>{c.disabled=!e,c.classList.toggle("op-progress--disabled",!e),l.setAttribute("aria-disabled",(!e).toString())},g=()=>this.activeOverlay?this.activeOverlay.duration:t.surface?.duration??t.duration,w=()=>this.activeOverlay?this.activeOverlay.value:t.surface?.currentTime??t.currentTime,P=()=>this.activeOverlay?this.activeOverlay.mode:"normal",_=()=>{const e=g(),i=w(),r=P();if((t.isLive||e===1/0)&&!this.activeOverlay)return void l.setAttribute("aria-hidden","true");if(l.setAttribute("aria-hidden","false"),Number.isFinite(e)&&e>0&&(c.max&&"0"!==c.max&&parseFloat(c.max||"-1")===e||(c.max=String(e),c.setAttribute("aria-valuemax",String(e)))),this.repaint=_,this.activeOverlay?y(this.activeOverlay.canSeek):y(!t.isLive&&t.surface?.duration!==1/0),c.classList.contains("op-progress--pressed"))return;const n=Number.isFinite(e)&&e>0?e:0,a=Number.isFinite(i)&&i>=0?i:0;c.value=String(a),c.setAttribute("aria-valuenow",String(a));const s=parseFloat(c.min),o=parseFloat(c.max);if(Number.isFinite(s)&&Number.isFinite(o)&&o>s){const e="countdown"===r?100*(o-a-s)/(o-s):100*(a-s)/(o-s);c.style.backgroundSize=`${e}% 100%`}h.value=n?"countdown"===r?(n-a)/n*100:a/n*100:0,this.activeOverlay&&Number.isFinite(this.activeOverlay.bufferedPct)&&(u.value=Math.max(0,Math.min(100,this.activeOverlay.bufferedPct)))},E=e=>{if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=g();if((t.isLive||i===1/0)&&!this.activeOverlay)return;if(!Number.isFinite(i)||i<=0)return;const a=l.getBoundingClientRect(),s=e-a.left,o=Math.max(0,Math.min(1,s/a.width))*i,u=w();o<u&&!r||o>u&&!n||Number.isFinite(o)&&(c.value=String(o),t.currentTime=o)};return this.listen(l,"click",e=>{const t=e,i=e.target;i&&i.closest('input[type="range"]')||E(t.clientX)},e),this.listen(l,"touchstart",e=>{const t=e,i=e.target;if(i&&i.closest('input[type="range"]'))return;const r=t.touches&&t.touches[0];r&&(t.preventDefault(),E(r.clientX))},e),this.listen(c,"change",e=>{if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=e.target,a=parseFloat(i.value),s=w();a<s&&!r||a>s&&!n||(Number.isFinite(a)&&(t.currentTime=a),f(!1))},e),this.listen(c,"input",e=>{if(!c.classList.contains("op-progress--pressed")&&!b())return;if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=e.target,a=parseFloat(i.min),s=parseFloat(i.max),o=parseFloat(i.value),l=w();if(o<l&&!r||o>l&&!n)return;Number.isFinite(a)&&Number.isFinite(s)&&s>a&&(c.style.backgroundSize=100*(o-a)/(s-a)+"% 100%");const u=g(),d=Number.isFinite(u)&&u>0?u:0;h.value=d?o/d*100:0,t.currentTime=o},e),this.onPlayer("durationchange",_),this.onPlayer("timeupdate",_),this.onPlayer("waiting",()=>{c.classList.contains("loading")||c.classList.add("loading"),c.classList.contains("error")&&c.classList.remove("error")}),this.onPlayer("play",()=>{c.classList.contains("loading")&&c.classList.remove("loading"),c.classList.contains("error")&&c.classList.remove("error"),t.isLive||t.surface.duration===1/0||(l.removeAttribute("aria-valuenow"),l.removeAttribute("aria-valuetext"))}),this.onPlayer("playing",()=>{c.classList.contains("loading")&&c.classList.remove("loading"),c.classList.contains("error")&&c.classList.remove("error")}),this.onPlayer("ended",()=>{c.style.backgroundSize="0% 100%",c.max&&(c.max="0"),u.value=0,h.value=0}),this.listen(l,"pointermove",e=>{const i=e;if(b())return;if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const r=g();if((t.isLive||r===1/0)&&!this.activeOverlay)return;const n=i.pageX;let a=n-p(l).left;const s=m.offsetWidth/2,o=a/l.offsetWidth,u=o*r,h=this.resolvePlayerRoot(),f=h.offsetWidth-m.offsetWidth;a<=0||n-p(h).left<=s?a=0:n-p(h).left>=f?a=f-p(c).left-10:a-=s,o>=0&&o<=1?m.classList.add("op-controls__tooltip--visible"):m.classList.remove("op-controls__tooltip--visible"),m.style.left=`${a}px`,m.textContent=Number.isNaN(u)?"00:00":d(u)},e),this.listen(document,"pointermove",e=>{e.target.closest(".op-controls__progress")||m.classList.remove("op-controls__tooltip--visible")},e),_(),l}onOverlayChanged(){this.repaint?.()}}function ue(e){const t=new ce;return e&&(t.placement=e),t}class de extends U{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"settings"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"right"}}),Object.defineProperty(this,"root",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"button",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"panel",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"view",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isOpen",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"activeSubmenuId",{enumerable:!0,configurable:!0,writable:!0,value:null})}build(){const t=D(this.core).labels;this.root=document.createElement("div"),this.root.className="op-menu--container",this.button=document.createElement("button"),this.button.type="button",this.button.className="op-controls__settings",this.button.setAttribute("aria-haspopup","menu"),this.button.setAttribute("aria-expanded","false"),M(this.button,t.settings),this.panel=document.createElement("div"),this.panel.className="op-menu",this.panel.setAttribute("role","menu"),this.panel.tabIndex=-1,this.panel.style.display="none",this.view=document.createElement("div"),this.view.className="op-menu__submenu",this.panel.appendChild(this.view),this.root.appendChild(this.button),this.root.appendChild(this.panel),this.listen(this.button,"click",e=>{const t=e;this.toggle(),t.preventDefault(),t.stopPropagation()},e),this.listen(document,"click",e=>{if(!this.isOpen)return;e.target.closest(".op-menu--container")||this.close()},e),this.listen(document,"keydown",e=>{if(!this.isOpen)return;"Escape"===e.key&&this.close()},e),this.listen(document,"focusout",()=>{this.isOpen&&window.setTimeout(()=>{const e=this.button.closest(".op-player");e&&!e.contains(document.activeElement)&&this.close()},0)},e);let i=null;return this.dispose.add(this.overlayMgr.bus.on("overlay:changed",e=>{const t=e?.id??null;t!==i?(i=t,this.activeSubmenuId=null,this.isOpen?this.close():this.render()):this.isOpen||this.render()})),z(this.core).register({id:"speed",label:t.speed,getSubmenu:e=>{const i=this.overlayMgr.active;if("ads"===i?.id)return null;const r=e.playbackRate||1;return{id:"speed",label:t.speed,items:[.25,.5,.75,1,1.25,1.5,2,2.5].map(i=>({id:String(i),label:1===i?t.speedNormal:`${i}x`,checked:Math.abs(r-i)<1e-6,onSelect:()=>{e.playbackRate=i}}))}}}),this.onPlayer("loadedmetadata",()=>{this.isOpen&&this.render()}),this.root}toggle(){this.isOpen?this.close():this.open()}open(){this.isOpen=!0,this.button.setAttribute("aria-expanded","true"),this.panel.style.display="block",this.render(),this.core.events.emit("ui:menu:open")}close(){this.isOpen=!1,this.activeSubmenuId=null,this.button.setAttribute("aria-expanded","false"),this.panel.style.display="none",this.core.events.emit("ui:menu:close")}render(){this.isOpen&&this.root.contains(document.activeElement)&&this.panel.focus({preventScroll:!0});const t=z(this.core).list().map(e=>({p:e,submenu:e.getSubmenu(this.core)})).filter(e=>e.submenu&&e.submenu.items.length);for(this.root.style.display=t.length?"":"none";this.view.firstChild;)this.view.removeChild(this.view.firstChild);const i=this.activeSubmenuId?t.find(e=>e.submenu.id===this.activeSubmenuId)?.submenu??null:null;if(!i){for(const{submenu:e}of t)this.view.appendChild(this.makeRow(e.label,()=>{this.activeSubmenuId=e.id,this.render()}));return}const r=document.createElement("div");r.className="op-menu__header";const n=document.createElement("button");n.type="button",n.className="op-submenu__back",M(n,"Back"),this.listen(n,"click",e=>{const t=e;this.activeSubmenuId=null,this.render(),t.preventDefault(),t.stopPropagation()},e);const a=document.createElement("div");a.className="op-controls__settings-title",a.textContent=i.label,r.append(n,a),this.view.appendChild(r);for(const e of i.items)this.view.appendChild(this.makeRow(e.label,()=>{e.disabled||(e.onSelect(),this.render())},e.checked,e.disabled))}makeRow(t,i,r=!1,n=!1){const a=document.createElement("button");a.type="button",a.className="op-controls__menu-item",a.setAttribute("role","menuitem"),a.setAttribute("aria-disabled",n?"true":"false"),a.setAttribute("aria-checked",r?"true":"false");const s=document.createElement("span");s.className="op-controls__menu-item-label",s.textContent=t;const o=document.createElement("span");return o.className="op-menu__item-check "+(r?"checked":""),a.append(o,s),this.listen(a,"click",e=>{const t=e;i(),t.preventDefault(),t.stopPropagation()},e),a}}function he(e){const t=new de;return e&&(t.placement=e),t}class pe extends U{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"time"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"left"}})}build(){const e=this.core,t=document.createElement("span");t.className="op-controls__time-delimiter",t.textContent="/";const i=document.createElement("span");i.className="op-controls-time";const r=(new Z).create(e),n=(new te).create(e);return i.appendChild(r),i.appendChild(t),i.appendChild(n),i}}function me(e){const t=new pe;return e&&(t.placement=e),t}class be extends U{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"volume"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"right"}})}build(){const t=this.core,i=D(t).labels,r=i.mute,n=i.unmute,a=i.volume,s=i.volumeControl,o=i.volumeSlider,l=document.createElement("div");l.className="op-controls__volume",l.tabIndex=0,l.setAttribute("aria-valuemin","0"),l.setAttribute("aria-valuemax","100"),l.setAttribute("aria-valuenow",`${t.volume}`),M(l,s),l.setAttribute("aria-orientation","vertical"),l.setAttribute("role","slider");const c=document.createElement("input");c.className="op-controls__volume--input",c.tabIndex=-1,c.type="range",c.value=t.volume.toString(),c.min="0",c.max="1",c.step="0.1",M(c,o,{container:l});const u=document.createElement("progress");u.className="op-controls__volume--display",u.max=10,u.value=10*t.volume,l.appendChild(c),l.appendChild(u);const d=document.createElement("button");d.tabIndex=0,d.type="button",d.title=r,d.className="op-controls__mute",M(d,r),d.setAttribute("aria-pressed","false");let h=t.volume;const p=e=>e>=1?1:e<=0?0:e,m=e=>{const t=p(e);u.value=10*t;const i=Math.floor(100*t);l.setAttribute("aria-valuenow",`${i}`),l.setAttribute("aria-valuetext",`${a}: ${i}`)},b=e=>{const t=p(e);t<=.5&&t>0?(d.classList.remove("op-controls__mute--muted"),d.classList.add("op-controls__mute--half")):0===t?(d.classList.add("op-controls__mute--muted"),d.classList.remove("op-controls__mute--half")):(d.classList.remove("op-controls__mute--muted"),d.classList.remove("op-controls__mute--half"))};this.listen(c,"input",e=>{const i=Number(e.target.value),r=p(i);h=r,t.volume=r,t.muted=0===r;const n=q(t);if(n&&n!==t.surface)try{n.volume=r,n.muted=0===r}catch{}m(r),b(r)},e),this.listen(d,"click",e=>{const i=e,a=q(t);if(t.muted){const e=h>0?h:1;if(t.volume=e,t.muted=!1,a&&a!==t.surface)try{a.volume=e,a.muted=!1,d.title=n,M(d,n)}catch{}}else if(t.volume>0&&(h=t.volume),t.volume=0,t.muted=!0,a&&a!==t.surface)try{a.volume=0,a.muted=!0,d.title=r,M(d,r)}catch{}i.preventDefault(),i.stopPropagation()},e),this.onPlayer("loadedmetadata",()=>{const e=t.muted||0===t.volume,i=p(t.volume);i>0&&(h=i),c.value=(e?0:i).toString(),m(e?0:i),b(e?0:i);const r=q(t);if(r&&r!==t.surface)try{r.muted=e,e||(r.volume=i)}catch{}}),this.onPlayer("volumechange",()=>{const e=t.muted||0===t.volume,i=p(t.volume);i>0&&(h=i),c.value=(e?0:i).toString(),m(e?0:i),b(e?0:i),d.setAttribute("aria-pressed",e?"true":"false");const r=q(t);if(r&&r!==t.surface)try{r.muted=e,e||(r.volume=i)}catch{}});const f=document.createElement("div");return f.className="op-controls__volume--container",f.appendChild(d),f.appendChild(l),f}}function fe(e){if(b())return null;const t=new be;return e&&(t.placement=e),t}let ve=0;function ye(e,t){const i=e.querySelector(":scope > span.op-player__sr-only"),r=i??document.createElement("span");i||(ve+=1,r.className="op-player__sr-only",r.id=`op-player-sr-el-${ve}`,e.insertBefore(r,e.firstChild),e.setAttribute("aria-labelledby",r.id),e.removeAttribute("aria-label")),r.textContent=t}function ge(t,i){(!!t.media.autoplay||t.canAutoplay||t.canAutoplayMuted)&&(t.canAutoplay&&!t.canAutoplayMuted||queueMicrotask(async()=>{try{const r=t.volume>0?t.volume:1;t.muted=!0,t.volume=0,await t.play();const n=D(t).labels,a=b()?n.tap:n.click,s=document.createElement("button");s.type="button",s.className="op-player__unmute",s.textContent=a,s.tabIndex=0;const o=()=>{try{l?.()}catch{}try{s.remove()}catch{}},l=t.events.on("volumechange",()=>{t.muted||o()});s.addEventListener("click",()=>{t.userInteracted||(t.userInteracted=!0,t.emit("player:interacted")),t.muted=!1,t.volume=r,t.play().catch(()=>{}),o()},e),i.insertBefore(s,i.firstChild),t.events.on("player:destroy",o)}catch{}}))}function we(t,i,r,n={}){const a=!0===n.alwaysVisible,s=D(t);i.tabIndex=-1;const o=i,l=m(o);o.classList.contains("op-player__media")||o.classList.add("op-player__media");const c=document.createComment("op-player-placeholder"),u=o.parentNode;u&&u.insertBefore(c,o);const d=document.createElement("div");d.className="op-player op-player__keyboard--inactive "+(l?"op-player__audio":"op-player__video"),d.setAttribute("role","region"),d.tabIndex=0;let h="";if(s.width){h+=`width: ${"number"==typeof s.width?`${s.width}px`:s.width} !important;`}if(s.height){h+=`height: ${"number"==typeof s.height?`${s.height}px`:s.height} !important;`}h&&d.setAttribute("style",h),i.controls=!1,i.replaceWith(d),ye(d,s.labels.container);const p=document.createElement("div");p.className="op-media",p.tabIndex=0,p.setAttribute("role","group"),p.appendChild(o),ye(p,s.labels.media);const f=document.createElement("div");let v;f.className="op-media__main",l||(p.appendChild(f),v=function(t){const i=D(t).labels,r=i.play,n=i.pause,a=i.loading,s=document.createElement("button");s.className="op-player__play",s.tabIndex=0,s.type="button",s.setAttribute("aria-pressed","false"),s.setAttribute("aria-hidden","false"),M(s,r),s.setAttribute("aria-keyshortcuts","K Enter"),s.addEventListener("click",async e=>{await V(t),e.preventDefault(),e.stopPropagation()},e);const o=document.createElement("span");o.className="op-player__loader",o.tabIndex=-1,o.setAttribute("aria-hidden","true"),o.setAttribute("role","status"),o.setAttribute("aria-live","polite");const l=document.createElement("span");let c;l.className="op-player__sr-only",l.textContent=a,o.appendChild(l);let u=!1;const d=()=>{c&&(window.clearTimeout(c),c=void 0),u=!1,s.classList.remove("op-player__play--flash")},h=e=>{if(e){if(u)return;s.classList.remove("op-player__play--paused"),s.setAttribute("aria-hidden","false"),s.removeAttribute("inert"),M(s,r),s.inert=!1,s.tabIndex=0}else{u&&d();const e=document.activeElement;e&&(e===s||s.contains(e))&&e.blur?.(),s.classList.add("op-player__play--paused"),s.setAttribute("aria-hidden","true"),s.setAttribute("inert",""),M(s,n),s.inert=!0,s.tabIndex=-1}};return{button:s,loader:o,showButton:h,showLoader:e=>{o.style.display=e?"":"none",o.setAttribute("aria-hidden",e?"false":"true")},flashPause:e=>{d(),u=!0,s.classList.remove("op-player__play--paused"),s.classList.add("op-player__play--flash"),s.setAttribute("aria-hidden","false"),s.removeAttribute("inert"),s.inert=!1,s.tabIndex=-1,M(s,n),c=window.setTimeout(()=>{s.classList.remove("op-player__play--flash"),c=void 0,u=!1,h(!0)},e)}}}(t),p.appendChild(v.button),p.appendChild(v.loader)),function(t,i,r){let n=t.volume||1;const a=()=>{i.classList.contains("op-player__keyboard--inactive")&&i.classList.remove("op-player__keyboard--inactive")},s=()=>{i.classList.contains("op-player__keyboard--inactive")||i.classList.add("op-player__keyboard--inactive")};i.addEventListener("click",s,e),i.addEventListener("pointerdown",s,e),i.addEventListener("pointerleave",s,e),window.addEventListener("click",s,e),window.addEventListener("pointerdown",s,e),window.addEventListener("keydown",a,e),i.addEventListener("keydown",async e=>{const i=e.key;a();const r=document.activeElement;if(r&&(" "===i||"Enter"===i||"Spacebar"===i)&&("BUTTON"===r.tagName||"button"===r.getAttribute("role")))return r.click(),e.preventDefault(),void e.stopPropagation();const s=D(t).step,o=s&&s>0?s:5;switch(i){case"k":case"K":case"Enter":case" ":case"Spacebar":await V(t),e.preventDefault(),e.stopPropagation();break;case"End":t.duration!==1/0&&(t.currentTime=t.duration,e.preventDefault(),e.stopPropagation());break;case"Home":t.currentTime=0,e.preventDefault(),e.stopPropagation();break;case"ArrowUp":{const i=Math.min(t.volume+.1,1);t.volume=i,t.muted=!(i>0),i>0&&(n=i);const r=q(t);if(r&&r!==t.surface)try{r.volume=i,r.muted=!(i>0)}catch{}e.preventDefault(),e.stopPropagation();break}case"ArrowDown":{const i=Math.max(t.volume-.1,0);t.volume=i,t.muted=!(i>0),i>0&&(n=i);const r=q(t);if(r&&r!==t.surface)try{r.volume=i,r.muted=!(i>0)}catch{}e.preventDefault(),e.stopPropagation();break}case"f":case"F":{const t=e.target;t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullScreen?t.webkitRequestFullScreen():t.msRequestFullscreen?t.msRequestFullscreen():t.webkitEnterFullscreen&&t.webkitEnterFullscreen(),e.preventDefault(),e.stopPropagation();break}case"m":case"M":{const i=q(t);if(t.muted){const e=n>0?n:1;if(t.volume=e,t.muted=!1,i&&i!==t.surface)try{i.volume=e,i.muted=!1}catch{}}else if(t.volume>0&&(n=t.volume),t.volume=0,t.muted=!0,i&&i!==t.surface)try{i.volume=0,i.muted=!0}catch{}e.preventDefault(),e.stopPropagation();break}case"J":case"j":case"ArrowLeft":t.duration!==1/0&&(t.currentTime=Math.max(0,t.currentTime-o),e.preventDefault(),e.stopPropagation());break;case"L":case"l":case"ArrowRight":t.duration!==1/0&&(t.currentTime=Math.min(t.duration,t.currentTime+o),e.preventDefault(),e.stopPropagation());break;case"<":t.playbackRate=Math.max(t.playbackRate-.25,.25),e.preventDefault(),e.stopPropagation();break;case">":t.playbackRate=Math.min(t.playbackRate+.25,2),e.preventDefault(),e.stopPropagation()}},e),t.events.on("waiting",()=>{r?.showLoader(!0),r?.showButton(!1)}),t.events.on("seeking",()=>{r?.showLoader(!0),r?.showButton(!1)}),t.events.on("seeked",()=>{r?.showLoader(!1),r?.showButton(t.media?.paused??!1)}),t.events.on("play",()=>{r?.showLoader(!1),r?.showButton(!1)}),t.events.on("pause",()=>{r?.showLoader(!1),r?.showButton(!0)}),t.events.on("playing",()=>{r?.showLoader(!1),r?.showButton(!1)}),t.events.on("ended",()=>{r?.showLoader(!1),r?.showButton(!0)})}(t,d,v);const y=document.createElement("div");if(y.className="op-controls",y.setAttribute("aria-hidden","false"),l){const e=A(y);d.appendChild(p),d.appendChild(y);const n=[];r.forEach(i=>{const r=i.create(t);r.dataset.controlId=i.id,e.place(i.placement,r),n.push(i)});const a={wrapper:d,mediaContainer:p,controlsRoot:y,placeholder:c,grid:e},s=t.events.on("player:destroy",()=>{try{n.forEach(e=>e.destroy?.())}catch{}try{d.replaceWith(i)}catch{}try{c.remove()}catch{}try{o(),l(),s()}catch{}}),o=t.events.on("ui:addElement",e=>{if(!e?.el)return;const t=e.placement||{v:"bottom",h:"right"};a.grid?.place(t,e.el)}),l=t.events.on("ui:addControl",e=>{const i=e?.control;if(!i)return;const r=i.create(t);r.dataset.controlId=i.id,a.grid?.place(i.placement,r),e.el=r,n.push(i)});return ge(t,d),a}const g=b(),w=3e3,P=6500;let E,O="pointer",k=!1;const S=()=>y.contains(document.activeElement),L=()=>{d.classList.remove("op-controls--hidden"),p.classList.remove("op-media--controls-hidden"),E&&window.clearTimeout(E),y.setAttribute("aria-hidden","false"),t.events.emit("ui:controls:show")},j=e=>{a||k||t.surface.paused||t.surface.ended||(E&&window.clearTimeout(E),E=window.setTimeout(()=>(()=>{if(!t.surface.paused&&!t.surface.ended){if(S()){if("keyboard"!==O)return;d.focus()}d.classList.add("op-controls--hidden"),p.classList.add("op-media--controls-hidden"),y.setAttribute("aria-hidden","true"),t.events.emit("ui:controls:hide")}})(),e??w))},C=()=>{O="pointer",L(),j(w)};y.addEventListener("focusin",()=>{O="keyboard",L(),j(P)}),y.addEventListener("focusout",()=>{window.setTimeout(()=>{S()||j("keyboard"===O?P:w)},0)});const R=()=>{const e=document.activeElement;return!!e&&(d.contains(e)&&!y.contains(e))};d.addEventListener("focusin",()=>{R()&&(L(),E&&window.clearTimeout(E))},e),d.addEventListener("focusout",()=>{window.setTimeout(()=>{d.contains(document.activeElement)||S()||j()},0)},e),d.addEventListener("keydown",()=>{O="keyboard",R()?(L(),E&&window.clearTimeout(E)):S()&&(L(),j(P))},e),g?d.addEventListener("pointerdown",()=>{O="pointer",L(),j(w)},e):(d.addEventListener("pointermove",C,e),d.addEventListener("pointerenter",C,e),y.addEventListener("pointerenter",C,e),y.addEventListener("pointermove",C,e),y.addEventListener("pointerleave",()=>j(w),e));const x=A(y,f);d.appendChild(p),d.appendChild(y);const T=[];r.forEach(e=>{const i=e.create(t);i.dataset.controlId=e.id,x.place(e.placement,i),T.push(e)});const N={wrapper:d,mediaContainer:p,controlsRoot:y,placeholder:c,grid:x};ge(t,d),d.addEventListener("click",async e=>{if(_(t).active?.fullscreenVideoEl)return;const i=e.target;if(i&&y.contains(i))return;if(i&&i!==d&&i.closest('button, [role="button"], a'))return;!t.surface.paused&&!t.surface.ended?(v?.flashPause(350),t.pause()):await t.play().catch(()=>{})},e);const F=t.events.on("playing",()=>j(w)),I=t.events.on("pause",()=>L()),B=t.events.on("ended",()=>L()),$=t.events.on("ui:menu:open",()=>{k=!0,E&&window.clearTimeout(E)}),H=t.events.on("ui:menu:close",()=>{k=!1,j()}),z=t.events.on("player:destroy",()=>{try{T.forEach(e=>e.destroy?.())}catch{}try{d.replaceWith(i)}catch{}try{c.remove()}catch{}try{F?.(),I?.(),B?.(),$?.(),H?.(),U(),W(),z()}catch{}}),U=t.events.on("ui:addElement",e=>{if(!e?.el)return;const t=e.placement||{v:"bottom",h:"right"};N.grid?.place(t,e.el)}),W=t.events.on("ui:addControl",e=>{const i=e?.control;if(!i)return;const r=i.create(t);r.dataset.controlId=i.id,N.grid?.place(i.placement,r),e.el=r,T.push(i)});return N}function Pe(e){return{play:le,volume:fe,captions:G,fullscreen:se,currentTime:ee,duration:ie,time:me,progress:ue,settings:he}[e]}function _e(e){const t=function(e){const t=L(e),i=new Set;for(const e of Object.values(t))for(const t of e)"string"==typeof t&&i.add(t);return[...i]}(e);for(const e of t){const t=Pe(e);t&&C(e,t)}}function Ee(e,t){if(!e.install)return;!!window.OpenPlayerConfig?.extendPlayerPrototype&&(window.__OpenPlayerInstalledPlugins=window.__OpenPlayerInstalledPlugins||{},window.__OpenPlayerInstalledPlugins[e.name]||(e.install(t),window.__OpenPlayerInstalledPlugins[e.name]=!0))}class Oe{constructor(e,t={}){Object.defineProperty(this,"config",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"media",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"core",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingListeners",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"createdPlugins",{enumerable:!0,configurable:!0,writable:!0,value:[]}),this.media=function(e){if(e instanceof HTMLMediaElement)return e;const t=document.getElementById(e)??document.querySelector(e);if(!t)throw new Error(`OpenPlayer: target "${e}" not found. Pass an HTMLMediaElement or a valid id ("video") or selector ("#video").`);if(!(t instanceof HTMLMediaElement))throw new Error(`OpenPlayer: target "${e}" is not an HTMLMediaElement.`);return t}(e)}getCore(){return this.core}init(){const e=this.config.controls,t=L(e),i=!0===e?.alwaysVisible;_e(t),this.createdPlugins=this.createDetectedPlugins();for(const e of this.createdPlugins)Ee(e.entry,Oe);this.core=new y(this.media,{...this.config,plugins:this.createdPlugins.map(e=>e.plugin)});const r=R(t);we(this.core,this.media,r,{alwaysVisible:i}),function(e){const t={addElement(t,i={v:"bottom",h:"right"}){if(0===e.events.listenerCount("ui:addElement"))throw new Error("UI not initialized; cannot addElement");return e.events.emit("ui:addElement",{el:t,placement:i}),e.emit("controls:changed"),t},addControl(t){if(0===e.events.listenerCount("ui:addControl"))throw new Error("UI not initialized; cannot addControl");const i={control:t,el:void 0};return e.events.emit("ui:addControl",i),e.emit("controls:changed"),i.el}};Object.assign(e,{controls:t})}(this.core);for(const e of this.createdPlugins)try{e.entry.extend?.(this.core,e.plugin,e.cfg)}catch{}for(const e of this.pendingListeners)e.off=this.core.on(e.event,e.cb);return this.core}on(e,t){if(this.core&&"function"==typeof this.core.on)return this.core.on(e,t);const i={event:e,cb:t};return this.pendingListeners.push(i),()=>{if(i.off)return i.off();const e=this.pendingListeners.indexOf(i);e>=0&&this.pendingListeners.splice(e,1)}}emit(e,...t){if(!this.core||"function"!=typeof this.core.emit)throw new Error("OpenPlayer.emit() called before init()");this.core.emit(e,...t)}async play(){if(!this.core)throw new Error("OpenPlayer.play() called before init()");await this.core.play()}pause(){if(!this.core)throw new Error("OpenPlayer.play() called before init()");this.core.pause()}load(){if(!this.core)throw new Error("OpenPlayer.load() called before init()");this.core.load()}destroy(){if(!this.core)throw new Error("OpenPlayer.destroy() called before init()");this.core.destroy()}addCaptions(e){if(!this.core)throw new Error("OpenPlayer.addCaptions() called before init()");return this.core.addCaptions(e)}addElement(e,t={v:"bottom",h:"right"}){this.core.controls.addElement(e,t)}addControl(e){if(!this.core)throw new Error("OpenPlayer.addControl() called before init()");this.core.controls.addControl(e)}get currentTime(){return this.core?.currentTime??0}set currentTime(e){if(!this.core)throw new Error("OpenPlayer.currentTime must be set after init()");this.core.currentTime=e}get duration(){return this.core?.duration??0}set src(e){if(!this.core)throw new Error("OpenPlayer.src must be set after init()");this.core.src=e}get src(){return this.core?.src??""}set volume(e){if(!this.core)throw new Error("OpenPlayer.volume must be set after init()");this.core.volume=e}get volume(){return this.core?.volume??1}set muted(e){if(!this.core)throw new Error("OpenPlayer.muted must be set after init()");this.core.muted=e}get muted(){return this.core?.muted??!1}set playbackRate(e){if(!this.core)throw new Error("OpenPlayer.playbackRate must be set after init()");this.core.playbackRate=e}get playbackRate(){return this.core?.playbackRate??1}createDetectedPlugins(){const e=window.OpenPlayerPlugins||{};return Object.keys(e).map(t=>{const i=e[t];if(!i?.factory)return;const r=(n=i.defaults,a=this.config?.[t],n?a?"object"!=typeof n||"object"!=typeof a?a:{...n,...a}:{...n}:a??{});var n,a;const s=i.factory(r);return{entry:{...i,name:t},plugin:s,cfg:r}}).filter(Boolean)}}const ke=Oe;try{Object.assign(ke,O)}catch{}return Oe});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).OpenPlayerJS=t()}(this,function(){"use strict";const e={passive:!1};class t{constructor(e){Object.defineProperty(this,"media",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"element",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.element=e}get currentSrc(){return this.media.currentSrc||this.media.src||""}get currentTime(){return this.media.currentTime||0}set currentTime(e){this.media.currentTime=e}get duration(){return this.media.duration}set duration(e){}get volume(){return this.media.volume}set volume(e){this.media.volume=e}get muted(){return this.media.muted}set muted(e){this.media.muted=e}get playbackRate(){return this.media.playbackRate}set playbackRate(e){this.media.playbackRate=e}get paused(){return this.media.paused}get ended(){return this.media.ended}load(e){e?.src&&this.media.src!==e.src&&(this.media.src=e.src),this.media.load()}play(){return this.media.play()}pause(){this.media.pause()}on(e,t,i){const r=i=>{t("error"!==e?void 0:this.media.error??i)};return this.media.addEventListener(e,r,i),()=>this.media.removeEventListener(e,r,i)}}function i(t,i){return[t.on("loadstart",()=>i.emit("loadstart"),e),t.on("loadedmetadata",()=>i.emit("loadedmetadata"),e),t.on("durationchange",()=>i.emit("durationchange"),e),t.on("timeupdate",()=>i.emit("timeupdate"),e),t.on("waiting",()=>i.emit("waiting"),e),t.on("seeking",()=>i.emit("seeking"),e),t.on("seeked",()=>i.emit("seeked"),e),t.on("ended",()=>i.emit("ended"),e),t.on("error",e=>i.emit("error",e),e),t.on("play",()=>i.emit("play"),e),t.on("playing",()=>i.emit("playing"),e),t.on("pause",()=>i.emit("pause"),e),t.on("volumechange",()=>i.emit("volumechange"),e),t.on("ratechange",()=>i.emit("ratechange"),e)]}class r{constructor(){Object.defineProperty(this,"surface",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"commands",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"surfaceListeners",{enumerable:!0,configurable:!0,writable:!0,value:[]})}bindSurfaceEvents(e,t){this.surface=e,this.events=t,this.surfaceListeners=i(e,t)}unbindSurfaceEvents(){this.surfaceListeners.forEach(e=>e()),this.surfaceListeners=[]}bindMediaEvents(e,t){const r={get currentTime(){return e.currentTime},set currentTime(t){e.currentTime=t},get duration(){return e.duration},set duration(e){},get volume(){return e.volume},set volume(t){e.volume=t},get muted(){return e.muted},set muted(t){e.muted=t},get playbackRate(){return e.playbackRate},set playbackRate(t){e.playbackRate=t},get paused(){return e.paused},get ended(){return e.ended},play:()=>e.play(),pause:()=>e.pause(),on:(t,i)=>{const r=()=>i();return e.addEventListener(t,r),()=>e.removeEventListener(t,r)}};this.surfaceListeners=i(r,t)}unbindMediaEvents(){this.unbindSurfaceEvents()}addMediaListener(e,t,i,r){e.addEventListener(t,i,r),this.surfaceListeners.push(()=>e.removeEventListener(t,i,r))}canHandlePlayback(e){const t=e.core.leases.owner("playback");return!t||t===this.name}bindCommands(e){const{events:t}=e;this.commands.push(t.on("cmd:seek",t=>{if(this.canHandlePlayback(e))try{e.surface.currentTime=t}catch{}})),this.commands.push(t.on("cmd:setVolume",t=>{try{e.surface.volume=t}catch{}})),this.commands.push(t.on("cmd:setMuted",t=>{try{e.surface.muted=t}catch{}})),this.commands.push(t.on("cmd:setRate",t=>{if(this.canHandlePlayback(e))try{e.surface.playbackRate=t}catch{}})),this.bindPlayPauseCommands(e)}unbindCommands(){for(const e of this.commands)e();this.commands=[]}bindPlayPauseCommands(e){const{events:t}=e;this.commands.push(t.on("cmd:play",()=>{this.canHandlePlayback(e)&&this.playImpl(e.surface)})),this.commands.push(t.on("cmd:pause",()=>{this.canHandlePlayback(e)&&this.pauseImpl(e.surface)}))}playImpl(e){const t=e.play();t&&"function"==typeof t.catch&&t.catch(()=>{})}pauseImpl(e){e.pause()}}class n extends r{constructor(){super(...arguments),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"default-engine"}),Object.defineProperty(this,"version",{enumerable:!0,configurable:!0,writable:!0,value:"1.0.0"}),Object.defineProperty(this,"capabilities",{enumerable:!0,configurable:!0,writable:!0,value:["media-engine"]}),Object.defineProperty(this,"priority",{enumerable:!0,configurable:!0,writable:!0,value:0})}canPlay(e){return""!==document.createElement("video").canPlayType(e.type||"")}attach(e){const t=e.resetSurface();try{t.load?.(e.activeSource)}catch{}this.bindSurfaceEvents(t,e.events),this.bindCommands(e),this.commands.push(e.events.on("cmd:startLoad",()=>{const i=e.core.state.current;if(!["ready","playing","paused","waiting","seeking","ended"].includes(i)&&"none"===e.media.preload){e.media.preload="metadata";try{t.load?.(e.activeSource)}catch{}}}))}detach(){this.unbindCommands(),this.unbindSurfaceEvents()}}const a={startTime:0,duration:0};class s{constructor(){Object.defineProperty(this,"disposers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"disposed",{enumerable:!0,configurable:!0,writable:!0,value:!1})}get isDisposed(){return this.disposed}add(e){const t=e??(()=>{});if(this.disposed){try{t()}catch{}return()=>{}}return this.disposers.push(t),t}addEventListener(e,t,i,r){return e.addEventListener(t,i,r),this.add(()=>e.removeEventListener(t,i,r))}dispose(){if(!this.disposed){this.disposed=!0;for(let e=this.disposers.length-1;e>=0;e--)try{this.disposers[e]()}catch{}this.disposers=[]}}}class o{constructor(){Object.defineProperty(this,"listeners",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}on(e,t){return this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t),()=>this.listeners.get(e).delete(t)}emit(e,t){this.listeners.get(e)?.forEach(e=>e(t))}listenerCount(e){return this.listeners.get(e)?.size??0}clear(){this.listeners.clear()}}class l{constructor(){Object.defineProperty(this,"owners",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"listeners",{enumerable:!0,configurable:!0,writable:!0,value:[]})}onChange(e){return this.listeners.push(e),()=>{this.listeners=this.listeners.filter(t=>t!==e)}}notify(e){const t=this.owners.get(e);for(const i of this.listeners)try{i(e,t)}catch{}}acquire(e,t){return!this.owners.has(e)&&(this.owners.set(e,t),this.notify(e),!0)}release(e,t){this.owners.get(e)===t&&(this.owners.delete(e),this.notify(e))}owner(e){return this.owners.get(e)}}class c{constructor(){Object.defineProperty(this,"plugins",{enumerable:!0,configurable:!0,writable:!0,value:[]})}register(e){this.plugins.push(e)}all(){return this.plugins}}class u{constructor(e){Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:e})}get current(){return this.state}transition(e){this.state=e}}function d(e,t){const i=Math.floor(e%1*(t||0));let r=Math.floor(e),n=Math.floor(r/60);const a=Math.floor(n/60),s=e=>{const t=e.toString();return e<10?e<=0?"00":`0${t}`:t};return n%=60,r%=60,`${a>0?`${s(a)}:`:""}${s(n)}:${s(r)}${i?`:${s(i)}`:""}`}const h=e=>{const t=Number.isFinite(e)?Math.max(0,e):0,i=Math.floor(t),r=Math.floor(i/3600),n=Math.floor(i%3600/60);return`PT${r?`${r}H`:""}${n?`${n}M`:""}${i%60}S`};function p(e){const t=e.getBoundingClientRect();return{left:t.left+(window.pageXOffset||document.documentElement.scrollLeft),top:t.top+(window.pageYOffset||document.documentElement.scrollTop)}}function m(e){return e instanceof HTMLAudioElement}function b(){return/ipad|iphone|ipod/i.test(window.navigator.userAgent)&&!window.MSStream||/android/i.test(window.navigator.userAgent)}function f(e,t){let i;try{i=new URL(t).pathname}catch{return m(e)?"audio/mp3":"video/mp4"}const r=i.split("."),n=r.length>1?r.pop().toLowerCase():"";if(!n)return m(e)?"audio/mp3":"video/mp4";switch(n){case"m3u8":case"m3u":return"application/x-mpegURL";case"mpd":return"application/dash+xml";case"mp4":return m(e)?"audio/mp4":"video/mp4";case"mp3":return"audio/mp3";case"webm":return m(e)?"audio/webm":"video/webm";case"ogg":return m(e)?"audio/ogg":"video/ogg";case"ogv":return"video/ogg";case"oga":return"audio/ogg";case"3gp":return"audio/3gpp";case"wav":return"audio/wav";case"aac":return"audio/aac";case"flac":return"audio/flac";default:return m(e)?"audio/mp3":"video/mp4"}}const v=e=>Math.min(1,Math.max(0,e));class y{constructor(e,i={}){if(Object.defineProperty(this,"media",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isLive",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:new o}),Object.defineProperty(this,"leases",{enumerable:!0,configurable:!0,writable:!0,value:new l}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:new u("idle")}),Object.defineProperty(this,"config",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"userInteracted",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"canAutoplay",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"canAutoplayMuted",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"nativeSurface",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"activeSurface",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"interactionUnsubs",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"plugins",{enumerable:!0,configurable:!0,writable:!0,value:new c}),Object.defineProperty(this,"pluginDisposables",{enumerable:!0,configurable:!0,writable:!0,value:new WeakMap}),Object.defineProperty(this,"_src",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_volume",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"_playbackRate",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"_currentTime",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_muted",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_duration",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"detectedSources",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"activeEngine",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"playerContext",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"autoplaySupport",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"autoplaySupportPromise",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"readyPromise",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"readyResolve",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"readyReject",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"playRequestPromise",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),"string"==typeof e){const t=document.querySelector(e);if(!(t&&t instanceof HTMLMediaElement))throw new Error(`OpenPlayer: could not find media element for selector: ${e}`);this.media=t}else this.media=e;this.nativeSurface=new t(this.media),this.activeSurface=this.nativeSurface,this.registerPlugin(new n),this.config={...a,...i},this.media.currentTime=this.config.startTime||this.media.currentTime,this._currentTime=this.config.startTime||this.activeSurface.currentTime,this._duration=this.config.duration||this.activeSurface.duration;const r=v(this.config.startVolume??this.activeSurface.volume);this.activeSurface.volume=r,this._volume=r,void 0!==this.config.startVolume?(this.activeSurface.muted=r<=0,this._muted=r<=0):this._muted=this.activeSurface.muted,this.activeSurface.playbackRate=this.config.startPlaybackRate||this.activeSurface.playbackRate,this._playbackRate=this.config.startPlaybackRate||this.activeSurface.playbackRate,(this.config.plugins||[]).forEach(e=>this.registerPlugin(e)),this.bindStateTransitions(),this.bindSurfaceSync(),this.bindLeaseSync(),this.bindFirstInteraction(),queueMicrotask(()=>this.maybeAutoLoad())}get surface(){return this.activeSurface}on(e,t){return this.events.on(e,t)}emit(e,t){this.events.emit(e,t),this.plugins.all().filter(e=>!e.capabilities?.includes("media-engine")).forEach(i=>{i.onEvent?.(e,t)})}registerPlugin(e){this.plugins.register(e);const t=new s;this.pluginDisposables.set(e,t),e.setup?.({core:this,media:this.media,events:this.events,state:this.state,leases:this.leases,dispose:t,add:e=>t.add(e??void 0),on:(e,i)=>t.add(this.events.on(e,i)),listen:(e,i,r,n)=>t.addEventListener(e,i,r,n)})}set src(e){this._src=e,e&&(this.detectedSources=[{src:e,type:f(this.media,e)}],this.emit("source:set",e),this.playerContext&&(this.activeEngine?.detach?.(this.playerContext),this.activeEngine=void 0,this.playerContext=null),this.state.transition("idle"),this.readyPromise=void 0,this.readyResolve=void 0,this.readyReject=void 0,this.playRequestPromise=void 0,queueMicrotask(()=>this.load()))}get src(){return this._src}get volume(){return this._volume}set volume(e){const t=v(e);this._volume=t,this.emit("cmd:setVolume",t)}get muted(){return this._muted}set muted(e){this._muted=e,this.emit("cmd:setMuted",e)}set playbackRate(e){this._playbackRate=e,this.emit("cmd:setRate",e)}get playbackRate(){return this._playbackRate}set currentTime(e){this._currentTime=e,this.emit("cmd:seek",e)}get currentTime(){return this._currentTime}get duration(){return this._duration}load(){if("idle"!==this.state.current)return;this.emit("cmd:startLoad"),this.createReadyPromise();const e=this.detectedSources??this.readMediaSources(this.media);this.detectedSources=e;const{engine:t,source:i}=this.resolveMediaEngine(e);this.playerContext=this.createPlayerContext(i),this.activeEngine?.detach?.(this.playerContext),this.activeEngine=t,this.emit("loadstart"),this.emit("cmd:load"),this.activeEngine.attach(this.playerContext),this.emit("cmd:setVolume",this._volume),this.emit("cmd:setMuted",this._muted),this.emit("cmd:setRate",this._playbackRate),this._currentTime&&this.emit("cmd:seek",this._currentTime)}async whenReady(){if("ready"!==this.state.current&&"playing"!==this.state.current&&"paused"!==this.state.current&&"waiting"!==this.state.current&&"seeking"!==this.state.current&&"ended"!==this.state.current)return this.activeEngine||this.load(),this.createReadyPromise(),this.readyPromise??Promise.resolve()}async play(){return this.playRequestPromise||(this.activeEngine||this.load(),this.emit("cmd:play"),this.playRequestPromise=this.whenReady().finally(()=>{this.playRequestPromise=void 0})),this.playRequestPromise}async determineAutoplaySupport(){if(this.autoplaySupport)return this.autoplaySupport;if(this.autoplaySupportPromise)return this.autoplaySupportPromise;await this.whenReady().catch(()=>{});const e=this.media,t=e.volume,i=e.muted,r=()=>{try{e.volume=t}catch{}try{e.muted=i}catch{}this._volume=t,this._muted=i};return this.autoplaySupportPromise=(async()=>{try{try{const t=e.play();void 0!==t&&await t;try{e.pause()}catch{}return this.canAutoplay=!0,this.canAutoplayMuted=!1,{autoplay:!0,muted:!1}}catch{try{e.volume=0,e.muted=!0,this._volume=0,this._muted=!0}catch{}try{const t=e.play();void 0!==t&&await t;try{e.pause()}catch{}return this.canAutoplay=!0,this.canAutoplayMuted=!0,{autoplay:!0,muted:!0}}catch{return this.canAutoplay=!1,this.canAutoplayMuted=!1,{autoplay:!1,muted:!1}}}}finally{r()}})(),this.autoplaySupport=await this.autoplaySupportPromise,this.autoplaySupportPromise}pause(){"idle"!==this.state.current&&"loading"!==this.state.current&&this.emit("cmd:pause")}destroy(){this.events.emit("player:destroy"),this.playerContext&&this.activeEngine?.detach?.(this.playerContext),this.playerContext=null,this.plugins.all().forEach(e=>{try{this.pluginDisposables.get(e)?.dispose()}catch{}try{e.destroy?.()}catch{}}),this.interactionUnsubs.forEach(e=>e()),this.interactionUnsubs=[],this.events.clear()}addCaptions(e){const t=document.createElement("track");return t.kind=e.kind||"captions",t.src=e.src,e.srclang&&(t.srclang=e.srclang),e.label&&(t.label=e.label),e.default&&(t.default=!0),this.media.appendChild(t),this.emit("texttrack:add",t),this.emit("texttrack:listchange"),t}getPlugin(e){return this.plugins.all().find(t=>t?.name===e)}extend(e){if(!e||"object"!=typeof e)return this;for(const t of Object.keys(e))if(void 0===this[t])this[t]=e[t];else if(this[t]&&"object"==typeof this[t]&&e[t]&&"object"==typeof e[t]){const i=this[t],r=e[t];for(const e of Object.keys(r))void 0===i[e]&&(i[e]=r[e])}return this}bindFirstInteraction(){const e="undefined"!=typeof document?document:null;if(!e)return;const t=()=>{this.userInteracted||(this.userInteracted=!0,this.emit("player:interacted"),this.interactionUnsubs.forEach(e=>e()),this.interactionUnsubs=[])},i={capture:!0,passive:!0},r={capture:!0},n=n=>{e.addEventListener(n,t,i),this.interactionUnsubs.push(()=>e.removeEventListener(n,t,r))};n("pointerdown"),n("mousedown"),n("touchstart"),n("keydown")}resolveMediaEngine(e){if(0===e.length)throw new Error("Player cannot resolve media with an empty source");const t=[...this.plugins.all().filter(e=>!(!e||!e.capabilities?.includes("media-engine")||"function"!=typeof e.canPlay))].sort((e,t)=>(t.priority??0)-(e.priority??0)||e.name.localeCompare(t.name));for(const i of e)for(const e of t)if(e.canPlay?.(i))return{engine:e,source:i};throw new Error("No compatible media engine found")}bindStateTransitions(){this.events.on("loadstart",()=>this.state.transition("loading")),this.events.on("loadedmetadata",()=>{this.state.transition("ready"),this.readyResolve&&(this.readyResolve(),this.readyResolve=void 0,this.readyReject=void 0)}),this.events.on("playing",()=>this.state.transition("playing")),this.events.on("pause",()=>this.state.transition("paused")),this.events.on("waiting",()=>this.state.transition("waiting")),this.events.on("seeking",()=>this.state.transition("seeking")),this.events.on("seeked",()=>this.state.transition("ready")),this.events.on("ended",()=>this.state.transition("ended")),this.events.on("error",e=>{this.state.transition("error"),this.readyReject&&(this.readyReject(e),this.readyResolve=void 0,this.readyReject=void 0)})}bindSurfaceSync(){const e=()=>{try{this._currentTime=this.activeSurface.currentTime||0}catch{}try{const e=this.config.duration||this.activeSurface.duration;this._duration=e}catch{}try{this._muted=Boolean(this.activeSurface.muted);const e=this.activeSurface.volume;Number.isFinite(e)&&(this._volume=e)}catch{}try{const e=this.activeSurface.playbackRate;Number.isFinite(e)&&(this._playbackRate=e)}catch{}};this.events.on("loadedmetadata",()=>e()),this.events.on("durationchange",()=>e()),this.events.on("timeupdate",()=>e()),this.events.on("volumechange",()=>e()),this.events.on("ratechange",()=>e())}createPlayerContext(e){const t={media:this.media,container:this.media.parentElement??this.media,events:this.events,config:this.config,activeSource:e,core:this,surface:this.activeSurface,setSurface:e=>(this.activeSurface=e,this.activeSurface),resetSurface:()=>(this.activeSurface=this.nativeSurface,this.nativeSurface)};return Object.defineProperty(t,"surface",{get:()=>this.activeSurface,enumerable:!0,configurable:!0}),t}bindLeaseSync(){this.leases.onChange(e=>{"playback"===e&&queueMicrotask(()=>{this.emit("cmd:setVolume",this._volume),this.emit("cmd:setMuted",this._muted),this.emit("cmd:setRate",this._playbackRate),this._currentTime&&this.emit("cmd:seek",this._currentTime)})})}createReadyPromise(){this.readyPromise||(this.readyPromise=new Promise((e,t)=>{this.readyResolve=e,this.readyReject=t}))}readMediaSources(e){const t=[];e.src&&t.push({src:e.src,type:f(e,e.src)});try{e.querySelectorAll("source").forEach(i=>{t.push({src:i.src,type:i.type||f(e,i.src)})})}catch{}return t}maybeAutoLoad(){if("idle"!==this.state.current)return;if(!this.plugins.all().some(e=>e.capabilities?.includes("media-engine")))return;const e=this.readMediaSources(this.media);if(0===e.length)return;this.detectedSources=e;const t=this.media.autoplay;try{this.media.querySelectorAll("source").forEach(e=>e.remove()),this.media.getAttribute("src")&&this.media.removeAttribute("src"),this.media.src&&(this.media.src=""),this.load(),t&&(this.media.autoplay=!1,queueMicrotask(()=>this.emit("cmd:play")))}catch{}}}class g{constructor(e){Object.defineProperty(this,"bus",{enumerable:!0,configurable:!0,writable:!0,value:e})}on(e,t){return this.bus.on(e,t)}emit(e,...t){this.bus.emit(e,...t)}clear(){this.bus.clear()}}const w="__op::overlay::manager";class P{constructor(){Object.defineProperty(this,"bus",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"active",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"overlays",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),this.bus=new g(new o)}dispose(){this.overlays.clear(),this.active=null,this.bus.clear()}activate(e){this.overlays.set(e.id,e),this.recomputeAndEmit()}update(e,t){const i=this.overlays.get(e);if(!i)return;const r={...i,...t,id:i.id};this.overlays.set(e,r),this.recomputeAndEmit()}deactivate(e){this.overlays.delete(e)&&this.recomputeAndEmit()}recomputeAndEmit(){const e=this.pickActive();this.active=e,this.bus.emit("overlay:changed",this.active)}pickActive(){let e=null;for(const t of this.overlays.values())(!e||t.priority>e.priority)&&(e=t);return e}}function _(e){if(e[w])return e[w];const t=new P;e[w]=t;try{if(e?.events?.on&&e?.events?.emit){const i=t.bus.on("overlay:changed",t=>e.events.emit("overlay:changed",t));e.events.on("player:destroy",()=>{try{i()}catch{}try{t.dispose()}catch{}try{delete e[w]}catch{}})}}catch{}return t}const k=Symbol.for("openplayerjs.caption.provider");function E(e){return e[k]??null}var O=Object.freeze({__proto__:null,BaseMediaEngine:r,Core:y,DVR_THRESHOLD:120,DefaultMediaEngine:n,DisposableStore:s,EVENT_OPTIONS:e,EventBus:o,HtmlMediaSurface:t,IframeMediaSurface:class{constructor(e,t={}){Object.defineProperty(this,"kind",{enumerable:!0,configurable:!0,writable:!0,value:"iframe"}),Object.defineProperty(this,"element",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"currentSrc",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"internalBus",{enumerable:!0,configurable:!0,writable:!0,value:new o}),Object.defineProperty(this,"adapter",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pollIntervalMs",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pollTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"_paused",{enumerable:!0,configurable:!0,writable:!0,value:!0}),Object.defineProperty(this,"_ended",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_duration",{enumerable:!0,configurable:!0,writable:!0,value:NaN}),Object.defineProperty(this,"_currentTime",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_volume",{enumerable:!0,configurable:!0,writable:!0,value:1}),Object.defineProperty(this,"_muted",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_playbackRate",{enumerable:!0,configurable:!0,writable:!0,value:1}),this.adapter=e,this.pollIntervalMs=t.pollIntervalMs??250,this.onAdapterReady=this.onAdapterReady.bind(this),this.onAdapterState=this.onAdapterState.bind(this),this.onAdapterError=this.onAdapterError.bind(this),this.adapter.on("ready",this.onAdapterReady),this.adapter.on("state",this.onAdapterState),this.adapter.on("error",this.onAdapterError),this.adapter.on("timeupdate",e=>this.applyTime(e)),this.adapter.on("durationchange",e=>this.applyDuration(e)),this.adapter.on("ratechange",e=>this.applyRate(e)),this.adapter.on("volumechange",(e,t)=>this.applyVolume(e,t)),this.adapter.on("ended",()=>this.applyEnded())}get currentTime(){return this._currentTime}set currentTime(e){this._currentTime=e,this.internalBus.emit("seeking"),Promise.resolve(this.adapter.seekTo(e)).then(()=>{this.internalBus.emit("seeked")})}get duration(){return this._duration}set duration(e){}get volume(){return this._volume}set volume(e){const t=Math.min(1,Math.max(0,e));this.adapter.setVolume(t),this.applyVolume(t,this._muted)}get muted(){return this._muted}set muted(e){e?this.adapter.mute():this.adapter.unmute(),this.applyVolume(this._volume,e)}get playbackRate(){return this._playbackRate}set playbackRate(e){this.adapter.setPlaybackRate(e),this.applyRate(e)}get paused(){return this._paused}get ended(){return this._ended}load(e){}play(){return Promise.resolve(this.adapter.play()).then(()=>{})}pause(){Promise.resolve(this.adapter.pause())}on(e,t,i){return this.internalBus.on(e,t)}async mount(e){await this.adapter.mount(e)}destroy(){this.stopPolling(),this.adapter.off("ready",this.onAdapterReady),this.adapter.off("state",this.onAdapterState),this.adapter.off("error",this.onAdapterError),this.adapter.destroy(),this.internalBus.clear()}onAdapterReady(){this.applyDuration(this.safeNum(this.adapter.getDuration())),this.applyTime(this.safeNum(this.adapter.getCurrentTime())),this.adapter.getVolume&&this.applyVolume(this.safeNum(this.adapter.getVolume()),this._muted),this.adapter.isMuted&&this.applyVolume(this._volume,!!this.adapter.isMuted()),this.adapter.getPlaybackRate&&this.applyRate(this.safeNum(this.adapter.getPlaybackRate())),this.adapter.getElement&&(this.element=this.adapter.getElement()),this.startPolling(),this.internalBus.emit("loadedmetadata")}onAdapterState(e){switch(e){case"loading":case"buffering":this.internalBus.emit("waiting");break;case"playing":this._paused=!1,this._ended=!1,this.internalBus.emit("play"),this.internalBus.emit("playing");break;case"paused":this._paused=!0,this.internalBus.emit("pause");break;case"ended":this._paused=!0,this._ended=!0,this.internalBus.emit("ended")}}onAdapterError(e){this.internalBus.emit("error",e)}applyTime(e){Number.isFinite(e)&&(this._currentTime=e,this.internalBus.emit("timeupdate"))}applyDuration(e){!Number.isFinite(e)||e<=0||(this._duration=e,this.internalBus.emit("durationchange"))}applyRate(e){!Number.isFinite(e)||e<=0||(this._playbackRate=e,this.internalBus.emit("ratechange"))}applyVolume(e,t){Number.isFinite(e)&&(this._volume=Math.min(1,Math.max(0,e)),this._muted=!!t,this.internalBus.emit("volumechange"))}applyEnded(){this._ended=!0,this._paused=!0,this.internalBus.emit("ended")}startPolling(){if(null!=this.pollTimer)return;const e=()=>{this.applyTime(this.safeNum(this.adapter.getCurrentTime())),this.applyDuration(this.safeNum(this.adapter.getDuration())),this.adapter.getVolume&&this.applyVolume(this.safeNum(this.adapter.getVolume()),this._muted),this.adapter.isMuted&&this.applyVolume(this._volume,!!this.adapter.isMuted()),this.adapter.getPlaybackRate&&this.applyRate(this.safeNum(this.adapter.getPlaybackRate())),this.pollTimer=window.setTimeout(e,this.pollIntervalMs)};this.pollTimer=window.setTimeout(e,this.pollIntervalMs)}stopPolling(){null!=this.pollTimer&&(window.clearTimeout(this.pollTimer),this.pollTimer=null)}safeNum(e){const t=Number(e);return Number.isFinite(t)?t:NaN}},Lease:l,PluginRegistry:c,StateManager:u,formatTime:d,generateISODateTime:h,getCaptionTrackProvider:E,getOverlayManager:_,isAudio:m,isMobile:b,offset:p,setCaptionTrackProvider:function(e,t){e[k]=t}});const S=new Map,A={top:["progress"],"bottom-left":["play","time","volume"],"bottom-right":["captions","settings","fullscreen"]};function L(e){if(!e||"object"!=typeof e)return{...A};if(e.layers&&"object"==typeof e.layers){const t={},{left:i,middle:r,right:n}=e.layers;return Array.isArray(i)&&(t["bottom-left"]=i),Array.isArray(r)&&(t.top=r),Array.isArray(n)&&(t["bottom-right"]=n),Object.keys(t).length>0?t:{...A}}const t={};for(const[i,r]of Object.entries(e))Array.isArray(r)&&(t[i]=r);return Object.keys(t).length>0?t:{...A}}function j(e){const t=document.createElement("div");t.className=`op-controls__layer op-controls-layer__${e}`;const i=document.createElement("div");i.className="op-controls__left";const r=document.createElement("div");r.className="op-controls__middle";const n=document.createElement("div");return n.className="op-controls__right",t.append(i,r,n),{section:t,left:i,center:r,right:n}}function T(e,t){const i=j("top"),r=j("center"),n=j("bottom");return e.append(i.section,r.section,n.section),{place(e,a){const s=e.region?.trim();if("main"===s&&t)return void t.appendChild(a);const o="top"===e.v?i:"middle"===e.v?r:n;("left"===e.h?o.left:"center"===e.h?o.center:o.right).appendChild(a)}}}function x(e,t){S.set(e,t)}function C(e){const t=[],i=L(e);return Object.entries(i).forEach(([e,i])=>{if(!Array.isArray(i))return;const r=function(e){if("main"===e)return{v:"middle",h:"center",region:"main"};const t=e.split("-");let i="middle",r="center";for(const e of t)"top"!==e&&"bottom"!==e||(i=e),"left"!==e&&"right"!==e||(r=e),"middle"!==e&&"center"!==e||(r="center");return{v:i,h:r}}(e);i.forEach(e=>{const i=function(e){const t=S.get(e);return t?.()||null}(e);i&&(i.placement=r,t.push(i))})}),t}let R=0;function M(e,t,i){const r=e.parentElement??i?.container;if(!r)return void e.setAttribute("aria-label",t);const n=e.getAttribute("aria-labelledby");let a=null;if(n){const e=document.getElementById(n);e&&e instanceof HTMLSpanElement&&(a=e)}a||(a=document.createElement("span"),a.className="op-player__sr-only",a.id=(R+=1,`op-player-sr-${R}`),e.parentElement===r&&r.contains(e)?r.insertBefore(a,e):r.appendChild(a),e.setAttribute("aria-labelledby",a.id)),a.textContent=t,e.removeAttribute("aria-label")}function N(e,t,i){if("button"===e.tagName.toLowerCase()||"button"===e.getAttribute("role"))return function(e,t){const i=e.querySelector(":scope > span.op-player__sr-only"),r=i??document.createElement("span");i||(r.className="op-player__sr-only",e.appendChild(r)),r.textContent=t}(e,t),void e.removeAttribute("aria-label");M(e,t,i)}const F=0,I=!0,B=!0,D=Object.freeze({auto:"Auto",captions:"CC/Subtitles",click:"Click to unmute",container:"Media player",fullscreen:"Fullscreen",levels:"Quality Levels",live:"Live",loading:"Loading...",media:"Media",mute:"Mute",off:"Off",pause:"Pause",play:"Play",progressRail:"Time Rail",progressSlider:"Time Slider",restart:"Restart",settings:"Player Settings",speed:"Speed",speedNormal:"Normal",tap:"Tap to unmute",toggleCaptions:"Toggle Captions",unmute:"Unmute",volume:"Volume",volumeControl:"Volume Control",volumeSlider:"Volume Slider"});function q(e){const t=e.config?e.config:e,i=t.allowSkip??I,r=t.allowRewind??B,n=t.step??F,a=t.width,s=t.height,o={...D,...t.labels||{}};if(e.config)try{t.labels=o,t.allowSkip=i,t.allowRewind=r,t.step=n}catch{}return{allowSkip:i,allowRewind:r,step:n,width:a,height:s,labels:o}}const V=Symbol.for("openplayerjs.settings.registry");class ${constructor(){Object.defineProperty(this,"providers",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}register(e){return this.providers.set(e.id,e),()=>this.providers.delete(e.id)}list(){return Array.from(this.providers.values()).sort((e,t)=>e.label.localeCompare(t.label))}}function H(e){const t=e;if(t[V])return t[V];const i=new $;return t[V]=i,i}class z{constructor(){Object.defineProperty(this,"core",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"overlayMgr",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"activeOverlay",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"dispose",{enumerable:!0,configurable:!0,writable:!0,value:new s})}onOverlayChanged(e){}create(e){return this.dispose.dispose(),this.dispose=new s,this.core=e,this.overlayMgr=_(e),this.activeOverlay=this.overlayMgr.active??null,this.dispose.add(this.overlayMgr.bus.on("overlay:changed",e=>{this.activeOverlay=e,this.onOverlayChanged(e)})),this.build()}destroy(){this.dispose.dispose()}onPlayer(e,t){return this.dispose.add(this.core.events.on(e,t))}listen(e,t,i,r){return this.dispose.addEventListener(e,t,i,r)}resolvePlayerRoot(){const e=this.core.media;return e&&(e.closest(".op-player")||e.parentElement)||document.body}resolveFullscreenContainer(){return this.activeOverlay?.fullscreenEl||this.resolvePlayerRoot()}resolveFullscreenVideoEl(){return this.activeOverlay?.fullscreenVideoEl||(this.core.media??null)}}function U(e){return"captions"===e||"subtitles"===e}function W(e,t){return e.label&&e.label.trim()||e.language&&e.language.trim().toUpperCase()||`Track ${t+1}`}function X(e){const t=e.textTracks??null;if(!t)return[];const i=[];for(let e=0;e<t.length;e++){const r=t[e];r&&(U(String(r.kind))&&i.push({index:e,track:r}))}return i}function J(e){for(const t of X(e))if("showing"===t.track.mode)return t.index;return"off"}function K(e){for(const t of X(e))t.track.mode="disabled"}function Q(e){for(const t of X(e))t.track.mode="hidden"}function Y(e,t,i="disabled"){for(const r of X(e))r.track.mode=r.index===t?"showing":i}class G extends z{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"captions"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"right"}}),Object.defineProperty(this,"button",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"lastSelectedIndex",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"lastAdTrackIndex",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"lastSelectedProviderId",{enumerable:!0,configurable:!0,writable:!0,value:null})}build(){const t=this.core,i=q(t).labels,r=i.captions,n=i.toggleCaptions;this.button=document.createElement("button"),this.button.type="button",this.button.className="op-controls__captions",N(this.button,n),this.button.setAttribute("aria-pressed","false");const a=()=>E(t),s=()=>{const e=this.activeOverlay?.fullscreenVideoEl;return e instanceof HTMLVideoElement?e:null},o=()=>{const e=s();if(this.activeOverlay){if(e){const t=X(e);if(this.button.style.display=t.length>0?"":"none",t.length>0){const t="off"!==J(e);this.button.classList.toggle("op-controls__captions--on",t),this.button.setAttribute("aria-pressed",t?"true":"false")}}else this.button.style.display="none";return}const i=a(),r=X(t.media),n=i?.getTracks()??[],o=r.length>0||n.length>0;this.button.style.display=o?"":"none";const l=i?null!==i.getActiveTrack():"off"!==J(t.media);this.button.classList.toggle("op-controls__captions--on",l),this.button.setAttribute("aria-pressed",l?"true":"false")};this.listen(this.button,"click",e=>{const i=e,r=s();if(this.activeOverlay&&r){if("off"===J(r)){const e=X(r),t=this.lastAdTrackIndex??e[0]?.index;"number"==typeof t&&Y(r,t,"hidden")}else Q(r)}else{const e=a();if(e){if(null!==e.getActiveTrack())e.setTrack(null);else{const t=e.getTracks(),i=this.lastSelectedProviderId??t[0]?.id??null;e.setTrack(i),i&&(this.lastSelectedProviderId=i)}}else{if("off"===J(t.media)){const e=X(t.media),i=this.lastSelectedIndex??e[0]?.index;"number"==typeof i&&Y(t.media,i)}else K(t.media)}}o(),i.preventDefault(),i.stopPropagation()},e);const l={id:"captions",label:r,getSubmenu:()=>{const e=s();if(this.activeOverlay&&e){const t=X(e);if(!t.length)return null;const n=J(e);return{id:"captions",label:r,items:[{id:"off",label:i.off,checked:"off"===n,onSelect:()=>{Q(e),o()}},...t.map(t=>({id:String(t.index),label:W(t.track,t.index),checked:t.index===n,onSelect:()=>{Y(e,t.index,"hidden"),this.lastAdTrackIndex=t.index,o()}}))]}}if(this.activeOverlay)return null;const n=a(),l=X(t.media);if(n){const e=n.getTracks();if(!e.length)return null;const t=n.getActiveTrack();return{id:"captions",label:r,items:[{id:"off",label:i.off,checked:null===t,onSelect:()=>{n.setTrack(null),o()}},...e.map(e=>({id:e.id,label:e.label||e.language||e.id,checked:e.id===t,onSelect:()=>{n.setTrack(e.id),this.lastSelectedProviderId=e.id,o()}}))]}}if(!l.length)return null;const c=J(t.media);return{id:"captions",label:r,items:[{id:"off",label:i.off,checked:"off"===c,onSelect:()=>{K(t.media),o()}},...l.map(e=>({id:String(e.index),label:W(e.track,e.index),checked:e.index===c,onSelect:()=>{Y(t.media,e.index),this.lastSelectedIndex=e.index,o()}}))]}}};return H(t).register(l),this.dispose.add(this.overlayMgr.bus.on("overlay:changed",e=>{e?Promise.resolve().then(()=>o()):(this.lastAdTrackIndex=null,o())})),this.onPlayer("loadedmetadata",()=>{const e=a();o(),e?.subscribe&&this.dispose.add(e.subscribe(()=>o()))}),o(),this.button}}function Z(e){const t=new G;return e&&(t.placement=e),t}class ee extends z{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"currentTime"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"top",h:"left"}})}build(){const e=this.core,t=document.createElement("time");t.className="op-controls__current",t.setAttribute("role","timer"),t.setAttribute("aria-live","off"),t.setAttribute("aria-hidden","false"),t.setAttribute("datetime","PT0M0S"),t.innerText="0:00";const i=()=>{if(this.activeOverlay)return t.setAttribute("aria-hidden","false"),void(t.innerText=d(Math.ceil(this.activeOverlay.value)));if(e.isLive)return void t.setAttribute("aria-hidden","true");const i=e.currentTime;t.setAttribute("aria-hidden","false");const r=Number.isFinite(i)?Math.max(0,i):0,n=d(r);t.innerText=n,t.setAttribute("datetime",h(r))};return this.onPlayer("timeupdate",()=>i()),this.onPlayer("seeked",()=>i()),this.onPlayer("durationchange",()=>i()),this.overlayMgr.bus.on("overlay:changed",()=>i()),i(),t}}function te(e){const t=new ee;return e&&(t.placement=e),t}class ie extends z{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"duration"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"top",h:"right"}})}build(){const e=this.core,t=document.createElement("time");t.className="op-controls__duration",t.setAttribute("aria-hidden","false"),t.setAttribute("datetime","PT0M0S");const i=()=>{if(this.activeOverlay)return t.setAttribute("aria-hidden","false"),void(t.innerText=d(this.activeOverlay.duration));const i=e.duration;if(e.isLive||i===1/0)return t.removeAttribute("datetime"),void(t.textContent=q(e).labels.live);t.setAttribute("aria-hidden","false");const r=Number.isFinite(i)?Math.max(0,i):e.config?.duration||0,n=d(r);t.textContent=n,t.setAttribute("datetime",h(r))};return this.onPlayer("durationchange",i),this.onPlayer("timeupdate",i),this.overlayMgr.bus.on("overlay:changed",i),i(),t}}function re(e){const t=new ie;return e&&(t.placement=e),t}function ne(){const e=document;return document.fullscreenElement||e.webkitFullscreenElement||e.mozFullScreenElement||e.msFullscreenElement||null}function ae(){const e=document;return document.exitFullscreen?document.exitFullscreen():e.mozCancelFullScreen?e.mozCancelFullScreen():e.webkitCancelFullScreen?e.webkitCancelFullScreen():e.msExitFullscreen?e.msExitFullscreen():void 0}class se extends z{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"fullscreen"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"right"}}),Object.defineProperty(this,"isFullscreen",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"screenW",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"screenH",{enumerable:!0,configurable:!0,writable:!0,value:0})}build(){const t=q(this.core).labels,i=document.createElement("button");i.tabIndex=0,i.type="button",i.className="op-controls__fullscreen",N(i,t.fullscreen),i.setAttribute("aria-pressed","false");const r=(e,t)=>{const i=this.resolveFullscreenContainer(),r=this.resolveFullscreenVideoEl(),n=r?.parentElement??null;e?(i.style.width="100%",r&&(r.style.width="100%"),n&&n!==i&&(n.style.width="100%")):(i.style.removeProperty("width"),r&&r.style.removeProperty("width"),n&&n!==i&&n.style.removeProperty("width")),t?(i.style.height="100%",r&&(r.style.height="100%"),n&&n!==i&&(n.style.height="100%")):(i.style.removeProperty("height"),r&&r.style.removeProperty("height"),n&&n!==i&&n.style.removeProperty("height"))},n=()=>{const e=ne(),t=this.resolveFullscreenContainer(),n=!!e&&(e===t||e.contains?.(t));var a;(a=n)?i.classList.add("op-controls__fullscreen--out"):i.classList.remove("op-controls__fullscreen--out"),i.setAttribute("aria-pressed",a?"true":"false"),n?document.body.classList.add("op-fullscreen__on"):document.body.classList.remove("op-fullscreen__on"),r(n?this.screenW:void 0,n?this.screenH:void 0),this.isFullscreen=n};return["fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange"].forEach(t=>{this.listen(document,t,n,e)}),this.listen(document,"keydown",e=>{"Escape"===e.key&&this.isFullscreen&&ae()},e),this.listen(i,"click",async e=>{const t=e;if(this.screenW=window.screen.width,this.screenH=window.screen.height,ne())return void ae();!function(e){if(e)e.requestFullscreen?e.requestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.webkitRequestFullScreen?e.webkitRequestFullScreen():e.msRequestFullscreen?e.msRequestFullscreen():e.webkitEnterFullscreen&&e.webkitEnterFullscreen()}(this.resolveFullscreenContainer());try{await(window.screen.orientation?.lock("landscape"))}catch{}t.preventDefault(),t.stopPropagation()},e),n(),i}onOverlayChanged(){if(ne()){ne()&&document.dispatchEvent(new Event("fullscreenchange"))}}}function oe(e){const t=new se;return e&&(t.placement=e),t}function le(e){try{if(!!0)return e.surface;const t=_(e)?.active,i=t?.fullscreenVideoEl;return i&&"function"==typeof i.play?i:e.surface}catch{return e.surface}}async function ce(e){const t=le(e);t.paused||t.ended?await e.play():e.pause()}class ue extends z{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"play"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"left"}})}build(){const t=this.core,i=q(t).labels,r=i.play,n=i.pause,a=i.restart;let s=!1;const o=document.createElement("button");o.tabIndex=0,o.type="button",o.className="op-controls__playpause",N(o,r),o.setAttribute("aria-pressed","false"),this.listen(o,"click",async e=>{const i=e;if(i.preventDefault(),i.stopPropagation(),s){le(t).currentTime=0}await ce(t)},e);const l=e=>{o.classList.toggle("op-controls__playpause--pause",e),o.classList.toggle("op-controls__playpause--replay",s&&!e),o.setAttribute("aria-pressed",e?"true":"false"),N(o,s&&!e?a:e?n:r)};return this.onPlayer("play",()=>{s=!1,l(!0)}),this.onPlayer("playing",()=>{s=!1,l(!0)}),this.onPlayer("pause",()=>l(!1)),this.onPlayer("ended",()=>{s=!0,l(!1)}),o}}function de(e){const t=new ue;return e&&(t.placement=e),t}class he extends z{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"progress"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"top",h:"center"}}),Object.defineProperty(this,"repaint",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}build(){const t=this.core,i=q(t),{allowRewind:r,allowSkip:n,labels:a}=i,s=a.progressSlider,o=a.progressRail,l=document.createElement("div");l.className="op-controls__progress",l.role="group",N(l,s);const c=document.createElement("input");c.type="range",c.role="slider",c.className="op-controls__progress--seek",c.tabIndex=0,c.min="0",c.step="0.1",c.value="0",N(c,o,{container:l}),c.setAttribute("aria-valuemin","0"),c.setAttribute("aria-valuenow","0");const u=document.createElement("progress");u.className="op-controls__progress--buffer",u.max=100,u.value=0;const h=document.createElement("progress");let m;h.className="op-controls__progress--played",h.max=100,h.value=0,l.appendChild(c),l.appendChild(h),l.appendChild(u),b()||(m=document.createElement("span"),m.className="op-controls__tooltip",m.tabIndex=-1,m.textContent="00:00",l.appendChild(m));const f=e=>{e?c.classList.add("op-progress--pressed"):c.classList.remove("op-progress--pressed")};this.listen(c,"pointerdown",()=>f(!0)),this.listen(c,"pointerup",()=>f(!1)),this.listen(c,"pointercancel",()=>f(!1)),this.listen(c,"mouseleave",()=>f(!1)),this.listen(c,"touchstart",()=>f(!0),e),this.listen(c,"touchend",()=>f(!1),e),this.listen(c,"mousedown",()=>f(!0),e),this.listen(c,"mouseup",()=>f(!1),e);const v=()=>f(!1);this.listen(document,"pointerup",v,e),this.listen(document,"pointercancel",v,e),this.listen(document,"mouseup",v,e),this.listen(document,"touchend",v,e);const y=e=>{c.disabled=!e,c.classList.toggle("op-progress--disabled",!e),l.setAttribute("aria-disabled",(!e).toString())},g=()=>this.activeOverlay?this.activeOverlay.duration:t.surface?.duration??t.duration,w=()=>this.activeOverlay?this.activeOverlay.value:t.surface?.currentTime??t.currentTime,P=()=>this.activeOverlay?this.activeOverlay.mode:"normal",_=()=>{const e=g(),i=w(),r=P();if((t.isLive||e===1/0)&&!this.activeOverlay)return void l.setAttribute("aria-hidden","true");if(l.setAttribute("aria-hidden","false"),Number.isFinite(e)&&e>0&&(c.max&&"0"!==c.max&&parseFloat(c.max||"-1")===e||(c.max=String(e),c.setAttribute("aria-valuemax",String(e)))),this.repaint=_,this.activeOverlay?y(this.activeOverlay.canSeek):y(!t.isLive&&t.surface?.duration!==1/0),c.classList.contains("op-progress--pressed"))return;const n=Number.isFinite(e)&&e>0?e:0,a=Number.isFinite(i)&&i>=0?i:0;c.value=String(a),c.setAttribute("aria-valuenow",String(a));const s=parseFloat(c.min),o=parseFloat(c.max);if(Number.isFinite(s)&&Number.isFinite(o)&&o>s){const e="countdown"===r?100*(o-a-s)/(o-s):100*(a-s)/(o-s);c.style.backgroundSize=`${e}% 100%`}h.value=n?"countdown"===r?(n-a)/n*100:a/n*100:0,this.activeOverlay&&Number.isFinite(this.activeOverlay.bufferedPct)&&(u.value=Math.max(0,Math.min(100,this.activeOverlay.bufferedPct)))},k=e=>{if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=g();if((t.isLive||i===1/0)&&!this.activeOverlay)return;if(!Number.isFinite(i)||i<=0)return;const a=l.getBoundingClientRect(),s=e-a.left,o=Math.max(0,Math.min(1,s/a.width))*i,u=w();o<u&&!r||o>u&&!n||Number.isFinite(o)&&(c.value=String(o),t.currentTime=o)};return this.listen(l,"click",e=>{const t=e,i=e.target;i&&i.closest('input[type="range"]')||k(t.clientX)},e),this.listen(l,"touchstart",e=>{const t=e,i=e.target;if(i&&i.closest('input[type="range"]'))return;const r=t.touches&&t.touches[0];r&&(t.preventDefault(),k(r.clientX))},e),this.listen(c,"change",e=>{if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=e.target,a=parseFloat(i.value),s=w();a<s&&!r||a>s&&!n||(Number.isFinite(a)&&(t.currentTime=a),f(!1))},e),this.listen(c,"input",e=>{if(!c.classList.contains("op-progress--pressed")&&!b())return;if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=e.target,a=parseFloat(i.min),s=parseFloat(i.max),o=parseFloat(i.value),l=w();if(o<l&&!r||o>l&&!n)return;Number.isFinite(a)&&Number.isFinite(s)&&s>a&&(c.style.backgroundSize=100*(o-a)/(s-a)+"% 100%");const u=g(),d=Number.isFinite(u)&&u>0?u:0;h.value=d?o/d*100:0,t.currentTime=o},e),this.onPlayer("durationchange",_),this.onPlayer("timeupdate",_),this.onPlayer("waiting",()=>{c.classList.contains("loading")||c.classList.add("loading"),c.classList.contains("error")&&c.classList.remove("error")}),this.onPlayer("play",()=>{c.classList.contains("loading")&&c.classList.remove("loading"),c.classList.contains("error")&&c.classList.remove("error"),t.isLive||t.surface.duration===1/0||(l.removeAttribute("aria-valuenow"),l.removeAttribute("aria-valuetext"))}),this.onPlayer("playing",()=>{c.classList.contains("loading")&&c.classList.remove("loading"),c.classList.contains("error")&&c.classList.remove("error")}),this.onPlayer("ended",()=>{c.style.backgroundSize="0% 100%",c.max&&(c.max="0"),u.value=0,h.value=0}),this.listen(l,"pointermove",e=>{const i=e;if(b())return;if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const r=g();if((t.isLive||r===1/0)&&!this.activeOverlay)return;const n=i.pageX;let a=n-p(l).left;const s=m.offsetWidth/2,o=a/l.offsetWidth,u=o*r,h=this.resolvePlayerRoot(),f=h.offsetWidth-m.offsetWidth;a<=0||n-p(h).left<=s?a=0:n-p(h).left>=f?a=f-p(c).left-10:a-=s,o>=0&&o<=1?m.classList.add("op-controls__tooltip--visible"):m.classList.remove("op-controls__tooltip--visible"),m.style.left=`${a}px`,m.textContent=Number.isNaN(u)?"00:00":d(u)},e),this.listen(document,"pointermove",e=>{e.target.closest(".op-controls__progress")||m.classList.remove("op-controls__tooltip--visible")},e),_(),l}onOverlayChanged(){this.repaint?.()}}function pe(e){const t=new he;return e&&(t.placement=e),t}class me extends z{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"settings"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"right"}}),Object.defineProperty(this,"root",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"button",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"panel",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"view",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isOpen",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"activeSubmenuId",{enumerable:!0,configurable:!0,writable:!0,value:null})}build(){const t=q(this.core).labels;this.root=document.createElement("div"),this.root.className="op-menu--container",this.button=document.createElement("button"),this.button.type="button",this.button.className="op-controls__settings",this.button.setAttribute("aria-haspopup","menu"),this.button.setAttribute("aria-expanded","false"),N(this.button,t.settings),this.panel=document.createElement("div"),this.panel.className="op-menu",this.panel.setAttribute("role","menu"),this.panel.tabIndex=-1,this.panel.style.display="none",this.view=document.createElement("div"),this.view.className="op-menu__submenu",this.panel.appendChild(this.view),this.root.appendChild(this.button),this.root.appendChild(this.panel),this.listen(this.button,"click",e=>{const t=e;this.toggle(),t.preventDefault(),t.stopPropagation()},e),this.listen(document,"click",e=>{if(!this.isOpen)return;e.target.closest(".op-menu--container")||this.close()},e),this.listen(document,"keydown",e=>{if(!this.isOpen)return;"Escape"===e.key&&this.close()},e),this.listen(document,"focusout",()=>{this.isOpen&&window.setTimeout(()=>{const e=this.button.closest(".op-player");e&&!e.contains(document.activeElement)&&this.close()},0)},e);let i=null;return this.dispose.add(this.overlayMgr.bus.on("overlay:changed",e=>{const t=e?.id??null;t!==i?(i=t,this.activeSubmenuId=null,this.isOpen?this.close():this.render()):this.isOpen||this.render()})),H(this.core).register({id:"speed",label:t.speed,getSubmenu:e=>{const i=this.overlayMgr.active;if("ads"===i?.id)return null;const r=e.playbackRate||1;return{id:"speed",label:t.speed,items:[.25,.5,.75,1,1.25,1.5,2,2.5].map(i=>({id:String(i),label:1===i?t.speedNormal:`${i}x`,checked:Math.abs(r-i)<1e-6,onSelect:()=>{e.playbackRate=i}}))}}}),this.onPlayer("loadedmetadata",()=>{this.isOpen&&this.render()}),this.root}toggle(){this.isOpen?this.close():this.open()}open(){this.isOpen=!0,this.button.setAttribute("aria-expanded","true"),this.panel.style.display="block",this.render(),this.core.events.emit("ui:menu:open")}close(){this.isOpen=!1,this.activeSubmenuId=null,this.button.setAttribute("aria-expanded","false"),this.panel.style.display="none",this.core.events.emit("ui:menu:close")}render(){this.isOpen&&this.root.contains(document.activeElement)&&this.panel.focus({preventScroll:!0});const t=H(this.core).list().map(e=>({p:e,submenu:e.getSubmenu(this.core)})).filter(e=>e.submenu&&e.submenu.items.length);for(this.root.style.display=t.length?"":"none";this.view.firstChild;)this.view.removeChild(this.view.firstChild);const i=this.activeSubmenuId?t.find(e=>e.submenu.id===this.activeSubmenuId)?.submenu??null:null;if(!i){for(const{submenu:e}of t)this.view.appendChild(this.makeRow(e.label,()=>{this.activeSubmenuId=e.id,this.render()}));return}const r=document.createElement("div");r.className="op-menu__header";const n=document.createElement("button");n.type="button",n.className="op-submenu__back",N(n,"Back"),this.listen(n,"click",e=>{const t=e;this.activeSubmenuId=null,this.render(),t.preventDefault(),t.stopPropagation()},e);const a=document.createElement("div");a.className="op-controls__settings-title",a.textContent=i.label,r.append(n,a),this.view.appendChild(r);for(const e of i.items)this.view.appendChild(this.makeRow(e.label,()=>{e.disabled||(e.onSelect(),this.render())},e.checked,e.disabled))}makeRow(t,i,r=!1,n=!1){const a=document.createElement("button");a.type="button",a.className="op-controls__menu-item",a.setAttribute("role","menuitem"),a.setAttribute("aria-disabled",n?"true":"false"),a.setAttribute("aria-checked",r?"true":"false");const s=document.createElement("span");s.className="op-controls__menu-item-label",s.textContent=t;const o=document.createElement("span");return o.className="op-menu__item-check "+(r?"checked":""),a.append(o,s),this.listen(a,"click",e=>{const t=e;i(),t.preventDefault(),t.stopPropagation()},e),a}}function be(e){const t=new me;return e&&(t.placement=e),t}class fe extends z{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"time"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"left"}})}build(){const e=this.core,t=document.createElement("span");t.className="op-controls__time-delimiter",t.textContent="/";const i=document.createElement("span");i.className="op-controls-time";const r=(new ee).create(e),n=(new ie).create(e);return i.appendChild(r),i.appendChild(t),i.appendChild(n),i}}function ve(e){const t=new fe;return e&&(t.placement=e),t}class ye extends z{constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"volume"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"right"}})}build(){const t=this.core,i=q(t).labels,r=i.mute,n=i.unmute,a=i.volume,s=i.volumeControl,o=i.volumeSlider,l=document.createElement("div");l.className="op-controls__volume",l.tabIndex=0,l.setAttribute("aria-valuemin","0"),l.setAttribute("aria-valuemax","100"),l.setAttribute("aria-valuenow",`${t.volume}`),N(l,s),l.setAttribute("aria-orientation","vertical"),l.setAttribute("role","slider");const c=document.createElement("input");c.className="op-controls__volume--input",c.tabIndex=-1,c.type="range",c.value=t.volume.toString(),c.min="0",c.max="1",c.step="0.1",N(c,o,{container:l});const u=document.createElement("progress");u.className="op-controls__volume--display",u.max=10,u.value=10*t.volume,l.appendChild(c),l.appendChild(u);const d=document.createElement("button");d.tabIndex=0,d.type="button",d.title=r,d.className="op-controls__mute",N(d,r),d.setAttribute("aria-pressed","false");let h=t.volume;const p=e=>e>=1?1:e<=0?0:e,m=e=>{const t=p(e);u.value=10*t;const i=Math.floor(100*t);l.setAttribute("aria-valuenow",`${i}`),l.setAttribute("aria-valuetext",`${a}: ${i}`)},b=e=>{const t=p(e);t<=.5&&t>0?(d.classList.remove("op-controls__mute--muted"),d.classList.add("op-controls__mute--half")):0===t?(d.classList.add("op-controls__mute--muted"),d.classList.remove("op-controls__mute--half")):(d.classList.remove("op-controls__mute--muted"),d.classList.remove("op-controls__mute--half"))};this.listen(c,"input",e=>{const i=Number(e.target.value),r=p(i);h=r,t.volume=r,t.muted=0===r;const n=le(t);if(n&&n!==t.surface)try{n.volume=r,n.muted=0===r}catch{}m(r),b(r)},e),this.listen(d,"click",e=>{const i=e,a=le(t);if(t.muted){const e=h>0?h:1;if(t.volume=e,t.muted=!1,a&&a!==t.surface)try{a.volume=e,a.muted=!1,d.title=n,N(d,n)}catch{}}else if(t.volume>0&&(h=t.volume),t.volume=0,t.muted=!0,a&&a!==t.surface)try{a.volume=0,a.muted=!0,d.title=r,N(d,r)}catch{}i.preventDefault(),i.stopPropagation()},e),this.onPlayer("loadedmetadata",()=>{const e=t.muted||0===t.volume,i=p(t.volume);i>0&&(h=i),c.value=(e?0:i).toString(),m(e?0:i),b(e?0:i);const r=le(t);if(r&&r!==t.surface)try{r.muted=e,e||(r.volume=i)}catch{}}),this.onPlayer("volumechange",()=>{const e=t.muted||0===t.volume,i=p(t.volume);i>0&&(h=i),c.value=(e?0:i).toString(),m(e?0:i),b(e?0:i),d.setAttribute("aria-pressed",e?"true":"false");const r=le(t);if(r&&r!==t.surface)try{r.muted=e,e||(r.volume=i)}catch{}});const f=document.createElement("div");return f.className="op-controls__volume--container",f.appendChild(d),f.appendChild(l),f}}function ge(e){if(b())return null;const t=new ye;return e&&(t.placement=e),t}let we=0;function Pe(e,t){const i=e.querySelector(":scope > span.op-player__sr-only"),r=i??document.createElement("span");i||(we+=1,r.className="op-player__sr-only",r.id=`op-player-sr-el-${we}`,e.insertBefore(r,e.firstChild),e.setAttribute("aria-labelledby",r.id),e.removeAttribute("aria-label")),r.textContent=t}function _e(t,i){(!!t.media.autoplay||t.canAutoplay||t.canAutoplayMuted)&&(t.canAutoplay&&!t.canAutoplayMuted||queueMicrotask(async()=>{try{const r=t.volume>0?t.volume:1;t.muted=!0,t.volume=0,await t.play();const n=q(t).labels,a=b()?n.tap:n.click,s=document.createElement("button");s.type="button",s.className="op-player__unmute",s.textContent=a,s.tabIndex=0;const o=()=>{try{l?.()}catch{}try{s.remove()}catch{}},l=t.events.on("volumechange",()=>{t.muted||o()});s.addEventListener("click",()=>{t.userInteracted||(t.userInteracted=!0,t.emit("player:interacted")),t.muted=!1,t.volume=r,t.play().catch(()=>{}),o()},e),i.insertBefore(s,i.firstChild),t.events.on("player:destroy",o)}catch{}}))}function ke(t,i,r,n={}){const a=!0===n.alwaysVisible,s=q(t);i.tabIndex=-1;const o=i,l=m(o);o.classList.contains("op-player__media")||o.classList.add("op-player__media");const c=document.createComment("op-player-placeholder"),u=o.parentNode;u&&u.insertBefore(c,o);const d=document.createElement("div");d.className="op-player op-player__keyboard--inactive "+(l?"op-player__audio":"op-player__video"),d.setAttribute("role","region"),d.tabIndex=0;let h="";if(s.width){h+=`width: ${"number"==typeof s.width?`${s.width}px`:s.width} !important;`}if(s.height){h+=`height: ${"number"==typeof s.height?`${s.height}px`:s.height} !important;`}h&&d.setAttribute("style",h),i.controls=!1,i.replaceWith(d),Pe(d,s.labels.container);const p=document.createElement("div");p.className="op-media",p.tabIndex=0,p.setAttribute("role","group"),p.appendChild(o),Pe(p,s.labels.media);const f=document.createElement("div");let v;f.className="op-media__main",l||(p.appendChild(f),v=function(t){const i=q(t).labels,r=i.play,n=i.pause,a=i.loading,s=document.createElement("button");s.className="op-player__play",s.tabIndex=0,s.type="button",s.setAttribute("aria-pressed","false"),s.setAttribute("aria-hidden","false"),N(s,r),s.setAttribute("aria-keyshortcuts","K Enter"),s.addEventListener("click",async e=>{await ce(t),e.preventDefault(),e.stopPropagation()},e);const o=document.createElement("span");o.className="op-player__loader",o.tabIndex=-1,o.setAttribute("aria-hidden","true"),o.setAttribute("role","status"),o.setAttribute("aria-live","polite");const l=document.createElement("span");let c;l.className="op-player__sr-only",l.textContent=a,o.appendChild(l);let u=!1;const d=()=>{c&&(window.clearTimeout(c),c=void 0),u=!1,s.classList.remove("op-player__play--flash")},h=e=>{if(e){if(u)return;s.classList.remove("op-player__play--paused"),s.setAttribute("aria-hidden","false"),s.removeAttribute("inert"),N(s,r),s.inert=!1,s.tabIndex=0}else{u&&d();const e=document.activeElement;e&&(e===s||s.contains(e))&&e.blur?.(),s.classList.add("op-player__play--paused"),s.setAttribute("aria-hidden","true"),s.setAttribute("inert",""),N(s,n),s.inert=!0,s.tabIndex=-1}};return{button:s,loader:o,showButton:h,showLoader:e=>{o.style.display=e?"":"none",o.setAttribute("aria-hidden",e?"false":"true")},flashPause:e=>{d(),u=!0,s.classList.remove("op-player__play--paused"),s.classList.add("op-player__play--flash"),s.setAttribute("aria-hidden","false"),s.removeAttribute("inert"),s.inert=!1,s.tabIndex=-1,N(s,n),c=window.setTimeout(()=>{s.classList.remove("op-player__play--flash"),c=void 0,u=!1,h(!0)},e)}}}(t),p.appendChild(v.button),p.appendChild(v.loader)),function(t,i,r){let n=t.volume||1;const a=()=>{i.classList.contains("op-player__keyboard--inactive")&&i.classList.remove("op-player__keyboard--inactive")},s=()=>{i.classList.contains("op-player__keyboard--inactive")||i.classList.add("op-player__keyboard--inactive")};i.addEventListener("click",s,e),i.addEventListener("pointerdown",s,e),i.addEventListener("pointerleave",s,e),window.addEventListener("click",s,e),window.addEventListener("pointerdown",s,e),window.addEventListener("keydown",a,e),i.addEventListener("keydown",async e=>{const i=e.key;a();const r=document.activeElement;if(r&&(" "===i||"Enter"===i||"Spacebar"===i)&&("BUTTON"===r.tagName||"button"===r.getAttribute("role")))return r.click(),e.preventDefault(),void e.stopPropagation();const s=q(t).step,o=s&&s>0?s:5;switch(i){case"k":case"K":case"Enter":case" ":case"Spacebar":await ce(t),e.preventDefault(),e.stopPropagation();break;case"End":t.duration!==1/0&&(t.currentTime=t.duration,e.preventDefault(),e.stopPropagation());break;case"Home":t.currentTime=0,e.preventDefault(),e.stopPropagation();break;case"ArrowUp":{const i=Math.min(t.volume+.1,1);t.volume=i,t.muted=!(i>0),i>0&&(n=i);const r=le(t);if(r&&r!==t.surface)try{r.volume=i,r.muted=!(i>0)}catch{}e.preventDefault(),e.stopPropagation();break}case"ArrowDown":{const i=Math.max(t.volume-.1,0);t.volume=i,t.muted=!(i>0),i>0&&(n=i);const r=le(t);if(r&&r!==t.surface)try{r.volume=i,r.muted=!(i>0)}catch{}e.preventDefault(),e.stopPropagation();break}case"f":case"F":{const t=e.target;t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullScreen?t.webkitRequestFullScreen():t.msRequestFullscreen?t.msRequestFullscreen():t.webkitEnterFullscreen&&t.webkitEnterFullscreen(),e.preventDefault(),e.stopPropagation();break}case"m":case"M":{const i=le(t);if(t.muted){const e=n>0?n:1;if(t.volume=e,t.muted=!1,i&&i!==t.surface)try{i.volume=e,i.muted=!1}catch{}}else if(t.volume>0&&(n=t.volume),t.volume=0,t.muted=!0,i&&i!==t.surface)try{i.volume=0,i.muted=!0}catch{}e.preventDefault(),e.stopPropagation();break}case"J":case"j":case"ArrowLeft":t.duration!==1/0&&(t.currentTime=Math.max(0,t.currentTime-o),e.preventDefault(),e.stopPropagation());break;case"L":case"l":case"ArrowRight":t.duration!==1/0&&(t.currentTime=Math.min(t.duration,t.currentTime+o),e.preventDefault(),e.stopPropagation());break;case"<":t.playbackRate=Math.max(t.playbackRate-.25,.25),e.preventDefault(),e.stopPropagation();break;case">":t.playbackRate=Math.min(t.playbackRate+.25,2),e.preventDefault(),e.stopPropagation()}},e),t.events.on("waiting",()=>{r?.showLoader(!0),r?.showButton(!1)}),t.events.on("seeking",()=>{r?.showLoader(!0),r?.showButton(!1)}),t.events.on("seeked",()=>{r?.showLoader(!1),r?.showButton(t.media?.paused??!1)}),t.events.on("play",()=>{r?.showLoader(!1),r?.showButton(!1)}),t.events.on("pause",()=>{r?.showLoader(!1),r?.showButton(!0)}),t.events.on("playing",()=>{r?.showLoader(!1),r?.showButton(!1)}),t.events.on("ended",()=>{r?.showLoader(!1),r?.showButton(!0)})}(t,d,v);const y=document.createElement("div");if(y.className="op-controls",y.setAttribute("aria-hidden","false"),l){const e=T(y);d.appendChild(p),d.appendChild(y);const n=[];r.forEach(i=>{const r=i.create(t);r.dataset.controlId=i.id,e.place(i.placement,r),n.push(i)});const a={wrapper:d,mediaContainer:p,controlsRoot:y,placeholder:c,grid:e},s=t.events.on("player:destroy",()=>{try{n.forEach(e=>e.destroy?.())}catch{}try{d.replaceWith(i)}catch{}try{c.remove()}catch{}try{o(),l(),s()}catch{}}),o=t.events.on("ui:addElement",e=>{if(!e?.el)return;const t=e.placement||{v:"bottom",h:"right"};a.grid?.place(t,e.el)}),l=t.events.on("ui:addControl",e=>{const i=e?.control;if(!i)return;const r=i.create(t);r.dataset.controlId=i.id,a.grid?.place(i.placement,r),e.el=r,n.push(i)});return _e(t,d),a}const g=b(),w=3e3,P=6500;let k,E="pointer",O=!1;const S=()=>y.contains(document.activeElement),A=()=>{d.classList.remove("op-controls--hidden"),p.classList.remove("op-media--controls-hidden"),k&&window.clearTimeout(k),y.setAttribute("aria-hidden","false"),t.events.emit("ui:controls:show")},L=e=>{a||O||t.surface.paused||t.surface.ended||(k&&window.clearTimeout(k),k=window.setTimeout(()=>(()=>{if(!t.surface.paused&&!t.surface.ended){if(S()){if("keyboard"!==E)return;d.focus()}d.classList.add("op-controls--hidden"),p.classList.add("op-media--controls-hidden"),y.setAttribute("aria-hidden","true"),t.events.emit("ui:controls:hide")}})(),e??w))},j=()=>{E="pointer",A(),L(w)};y.addEventListener("focusin",()=>{E="keyboard",A(),L(P)}),y.addEventListener("focusout",()=>{window.setTimeout(()=>{S()||L("keyboard"===E?P:w)},0)});const x=()=>{const e=document.activeElement;return!!e&&(d.contains(e)&&!y.contains(e))};d.addEventListener("focusin",()=>{x()&&(A(),k&&window.clearTimeout(k))},e),d.addEventListener("focusout",()=>{window.setTimeout(()=>{d.contains(document.activeElement)||S()||L()},0)},e),d.addEventListener("keydown",()=>{E="keyboard",x()?(A(),k&&window.clearTimeout(k)):S()&&(A(),L(P))},e),g?d.addEventListener("pointerdown",()=>{E="pointer",A(),L(w)},e):(d.addEventListener("pointermove",j,e),d.addEventListener("pointerenter",j,e),y.addEventListener("pointerenter",j,e),y.addEventListener("pointermove",j,e),y.addEventListener("pointerleave",()=>L(w),e));const C=T(y,f);d.appendChild(p),d.appendChild(y);const R=[];r.forEach(e=>{const i=e.create(t);i.dataset.controlId=e.id,C.place(e.placement,i),R.push(e)});const M={wrapper:d,mediaContainer:p,controlsRoot:y,placeholder:c,grid:C};_e(t,d),d.addEventListener("click",async e=>{if(_(t).active?.fullscreenVideoEl)return;const i=e.target;if(i&&y.contains(i))return;if(i&&i!==d&&i.closest('button, [role="button"], a'))return;!t.surface.paused&&!t.surface.ended?(v?.flashPause(350),t.pause()):await t.play().catch(()=>{})},e);const F=t.events.on("playing",()=>L(w)),I=t.events.on("pause",()=>A()),B=t.events.on("ended",()=>A()),D=t.events.on("ui:menu:open",()=>{O=!0,k&&window.clearTimeout(k)}),V=t.events.on("ui:menu:close",()=>{O=!1,L()}),$=t.events.on("player:destroy",()=>{try{R.forEach(e=>e.destroy?.())}catch{}try{d.replaceWith(i)}catch{}try{c.remove()}catch{}try{F?.(),I?.(),B?.(),D?.(),V?.(),H(),z(),$()}catch{}}),H=t.events.on("ui:addElement",e=>{if(!e?.el)return;const t=e.placement||{v:"bottom",h:"right"};M.grid?.place(t,e.el)}),z=t.events.on("ui:addControl",e=>{const i=e?.control;if(!i)return;const r=i.create(t);r.dataset.controlId=i.id,M.grid?.place(i.placement,r),e.el=r,R.push(i)});return M}function Ee(e){return{play:de,volume:ge,captions:Z,fullscreen:oe,currentTime:te,duration:re,time:ve,progress:pe,settings:be}[e]}function Oe(e){const t=function(e){const t=L(e),i=new Set;for(const e of Object.values(t))for(const t of e)"string"==typeof t&&i.add(t);return[...i]}(e);for(const e of t){const t=Ee(e);t&&x(e,t)}}function Se(e,t){if(!e.install)return;!!window.OpenPlayerConfig?.extendPlayerPrototype&&(window.__OpenPlayerInstalledPlugins=window.__OpenPlayerInstalledPlugins||{},window.__OpenPlayerInstalledPlugins[e.name]||(e.install(t),window.__OpenPlayerInstalledPlugins[e.name]=!0))}class Ae{constructor(e,t={}){Object.defineProperty(this,"config",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"media",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"core",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingListeners",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"createdPlugins",{enumerable:!0,configurable:!0,writable:!0,value:[]}),this.media=function(e){if(e instanceof HTMLMediaElement)return e;const t=document.getElementById(e)??document.querySelector(e);if(!t)throw new Error(`OpenPlayer: target "${e}" not found. Pass an HTMLMediaElement or a valid id ("video") or selector ("#video").`);if(!(t instanceof HTMLMediaElement))throw new Error(`OpenPlayer: target "${e}" is not an HTMLMediaElement.`);return t}(e)}getCore(){return this.core}init(){const e=this.config.controls,t=L(e),i=!0===e?.alwaysVisible;Oe(t),this.createdPlugins=this.createDetectedPlugins();for(const e of this.createdPlugins)Se(e.entry,Ae);this.core=new y(this.media,{...this.config,plugins:this.createdPlugins.map(e=>e.plugin)});const r=C(t);ke(this.core,this.media,r,{alwaysVisible:i}),function(e){const t={addElement(t,i={v:"bottom",h:"right"}){if(0===e.events.listenerCount("ui:addElement"))throw new Error("UI not initialized; cannot addElement");return e.events.emit("ui:addElement",{el:t,placement:i}),e.emit("controls:changed"),t},addControl(t){if(0===e.events.listenerCount("ui:addControl"))throw new Error("UI not initialized; cannot addControl");const i={control:t,el:void 0};return e.events.emit("ui:addControl",i),e.emit("controls:changed"),i.el}};Object.assign(e,{controls:t})}(this.core);for(const e of this.createdPlugins)try{e.entry.extend?.(this.core,e.plugin,e.cfg)}catch{}for(const e of this.pendingListeners)e.off=this.core.on(e.event,e.cb);return this.core}on(e,t){if(this.core&&"function"==typeof this.core.on)return this.core.on(e,t);const i={event:e,cb:t};return this.pendingListeners.push(i),()=>{if(i.off)return i.off();const e=this.pendingListeners.indexOf(i);e>=0&&this.pendingListeners.splice(e,1)}}emit(e,...t){if(!this.core||"function"!=typeof this.core.emit)throw new Error("OpenPlayer.emit() called before init()");this.core.emit(e,...t)}async play(){if(!this.core)throw new Error("OpenPlayer.play() called before init()");await this.core.play()}pause(){if(!this.core)throw new Error("OpenPlayer.play() called before init()");this.core.pause()}load(){if(!this.core)throw new Error("OpenPlayer.load() called before init()");this.core.load()}destroy(){if(!this.core)throw new Error("OpenPlayer.destroy() called before init()");this.core.destroy()}addCaptions(e){if(!this.core)throw new Error("OpenPlayer.addCaptions() called before init()");return this.core.addCaptions(e)}addElement(e,t={v:"bottom",h:"right"}){this.core.controls.addElement(e,t)}addControl(e){if(!this.core)throw new Error("OpenPlayer.addControl() called before init()");this.core.controls.addControl(e)}get currentTime(){return this.core?.currentTime??0}set currentTime(e){if(!this.core)throw new Error("OpenPlayer.currentTime must be set after init()");this.core.currentTime=e}get duration(){return this.core?.duration??0}set src(e){if(!this.core)throw new Error("OpenPlayer.src must be set after init()");this.core.src=e}get src(){return this.core?.src??""}set volume(e){if(!this.core)throw new Error("OpenPlayer.volume must be set after init()");this.core.volume=e}get volume(){return this.core?.volume??1}set muted(e){if(!this.core)throw new Error("OpenPlayer.muted must be set after init()");this.core.muted=e}get muted(){return this.core?.muted??!1}set playbackRate(e){if(!this.core)throw new Error("OpenPlayer.playbackRate must be set after init()");this.core.playbackRate=e}get playbackRate(){return this.core?.playbackRate??1}createDetectedPlugins(){const e=window.OpenPlayerPlugins||{};return Object.keys(e).map(t=>{const i=e[t];if(!i?.factory)return;const r=(n=i.defaults,a=this.config?.[t],n?a?"object"!=typeof n||"object"!=typeof a?a:{...n,...a}:{...n}:a??{});var n,a;const s=i.factory(r);return{entry:{...i,name:t},plugin:s,cfg:r}}).filter(Boolean)}}const Le=Ae;try{Object.assign(Le,O)}catch{}return Ae});
2
2
  //# sourceMappingURL=openplayer.js.map