@openplayerjs/player 3.4.1 → 3.4.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=[]}createMediaSurfaceShim(e){return{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)}}}bindMediaEvents(e,t){const r=this.createMediaSurfaceShim(e);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 s={startTime:0,duration:0};class a{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 s=Math.floor(n/60),a=e=>{const t=e.toString();return e<10?e<=0?"00":`0${t}`:t};return n%=60,r%=60,`${s>0?`${a(s)}:`:""}${a(n)}:${a(r)}${i?`:${a(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={...s,...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 a;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){return function(e,t){if(0===t.length)throw new Error("Player cannot resolve media with an empty source");for(const i of t)for(const t of e)if(t.canPlay?.(i))return{engine:t,source:i};throw new Error("No compatible media engine found")}([...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)),e)}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){return function(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}(e)}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:a,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,"_playIntentAfterEnd",{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 this._playIntentAfterEnd=this._ended,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._ended&&!this._playIntentAfterEnd||this.internalBus.emit("waiting");break;case"playing":if(this._ended&&!this._playIntentAfterEnd)break;this._paused=!1,this._ended=!1,this._playIntentAfterEnd=!1,this.internalBus.emit("play"),this.internalBus.emit("playing");break;case"paused":this._paused=!0,this.internalBus.emit("pause");break;case"ended":{const e=2;if(Number.isFinite(this._duration)&&this._currentTime<this._duration-e)break;this._paused=!0,this._ended=!0,this.internalBus.emit("ended"),Promise.resolve(this.adapter.pause());break}}}onAdapterError(e){this.internalBus.emit("error",e)}applyTime(e){Number.isFinite(e)&&(this._currentTime=e,this._paused||this._ended||this.internalBus.emit("timeupdate"))}applyDuration(e){!Number.isFinite(e)||e<=0||e!==this._duration&&(this._duration=e,this.internalBus.emit("durationchange"))}applyRate(e){!Number.isFinite(e)||e<=0||e!==this._playbackRate&&(this._playbackRate=e,this.internalBus.emit("ratechange"))}applyVolume(e,t){if(!Number.isFinite(e))return;const i=Math.min(1,Math.max(0,e));i===this._volume&&!!t===this._muted||(this._volume=i,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=()=>{if(this.applyTime(this.safeNum(this.adapter.getCurrentTime())),this.applyDuration(this.safeNum(this.adapter.getDuration())),this.adapter.getVolume||this.adapter.isMuted){const e=this.adapter.getVolume?this.safeNum(this.adapter.getVolume()):this._volume,t=this.adapter.isMuted?!!this.adapter.isMuted():this._muted;this.applyVolume(e,t)}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 T(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 L(e,t){const i=j("top"),r=j("center"),n=j("bottom");return e.append(i.section,r.section,n.section),{place(e,s){const a=e.region?.trim();if("main"===a&&t)return void t.appendChild(s);const o="top"===e.v?i:"middle"===e.v?r:n;("left"===e.h?o.left:"center"===e.h?o.center:o.right).appendChild(s)}}}function x(e,t){S.set(e,t)}function C(e){const t=[],i=T(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 s=null;if(n){const e=document.getElementById(n);e&&e instanceof HTMLSpanElement&&(s=e)}s||(s=document.createElement("span"),s.className="op-player__sr-only",s.id=(R+=1,`op-player-sr-${R}`),e.parentElement===r&&r.contains(e)?r.insertBefore(s,e):r.appendChild(s),e.setAttribute("aria-labelledby",s.id)),s.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=new WeakMap;function I(e){let t=F.get(e);if(!t){const{announce:i,destroy:r}=function(e){const t=[];let i=0;for(let i=0;i<2;i++){const i=document.createElement("div");i.setAttribute("role","status"),i.setAttribute("aria-live","polite"),i.setAttribute("aria-atomic","true"),i.className="op-player__sr-only op-player__announcer",i.setAttribute("aria-hidden","true"),e.appendChild(i),t.push(i)}const r=e=>{const r=t[i%2],n=t[(i+1)%2];i++,n.textContent="",n.setAttribute("aria-hidden","true"),r.setAttribute("aria-hidden","false"),r.textContent=e},n=()=>{t.forEach(e=>e.remove())};return{announce:r,destroy:n}}(e);t={announce:i,refs:0,_destroy:r},F.set(e,t)}t.refs+=1;const i=t;return{announce:t.announce,destroy:()=>{i.refs-=1,i.refs<=0&&(i._destroy(),F.delete(e))}}}const B=0,D=!0,V=!0,q=Object.freeze({auto:"Auto",back:"Back",captions:"CC/Subtitles",captionsOff:"Captions off",captionsOn:"Captions on",click:"Click to unmute",container:"Media player",enterFullscreen:"Enter Fullscreen",exitFullscreen:"Exit Fullscreen",fullscreen:"Fullscreen",live:"Live",loading:"Loading...",media:"Media",mute:"Mute",off:"Off",pause:"Pause",play:"Play",progressRail:"Time Rail",progressSlider:"Time Slider",restart:"Restart",seekTo:"Seek to %s",settings:"Player Settings",speed:"Speed",speedNormal:"Normal",tap:"Tap to unmute",toggleCaptions:"Toggle Captions",unmute:"Unmute",volume:"Volume",volumeControl:"Volume Control",volumePercent:"Volume: %s%",volumeSlider:"Volume Slider"});function $(e){const t=e.config?e.config:e,i=t.allowSkip??D,r=t.allowRewind??V,n=t.step??B,s=t.width,a=t.height,o={...q,...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:s,height:a,labels:o}}const H=Symbol.for("openplayerjs.settings.registry");class z{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 U(e){const t=e;if(t[H])return t[H];const i=new z;return t[H]=i,i}class W{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 a})}onOverlayChanged(e){}create(e){return this.dispose.dispose(),this.dispose=new a,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 X(e){return"captions"===e||"subtitles"===e}function J(e,t){return e.label&&e.label.trim()||e.language&&e.language.trim().toUpperCase()||`Track ${t+1}`}function K(e){const t=e.textTracks??null;if(!t)return[];const i=[];for(let e=0;e<t.length;e++){const r=t[e];r&&(X(String(r.kind))&&i.push({index:e,track:r}))}return i}function Y(e){for(const t of K(e))if("showing"===t.track.mode)return t.index;return"off"}function G(e){for(const t of K(e))t.track.mode="disabled"}function Q(e){for(const t of K(e))t.track.mode="hidden"}function Z(e,t,i="disabled"){for(const r of K(e))r.track.mode=r.index===t?"showing":i}class ee extends W{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=$(t).labels,r=i.captions,n=i.toggleCaptions,{announce:s,destroy:a}=I(this.resolvePlayerRoot());this.dispose.add(a),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 o=()=>E(t),l=()=>{const e=this.activeOverlay?.fullscreenVideoEl;return e instanceof HTMLVideoElement?e:null},c=()=>{const e=l();if(this.activeOverlay){if(e){const t=K(e);if(this.button.style.display=t.length>0?"":"none",t.length>0){const t="off"!==Y(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=o(),r=K(t.media),n=i?.getTracks()??[],s=r.length>0||n.length>0;this.button.style.display=s?"":"none";const a=i?null!==i.getActiveTrack():"off"!==Y(t.media);this.button.classList.toggle("op-controls__captions--on",a),this.button.setAttribute("aria-pressed",a?"true":"false")};this.listen(this.button,"click",e=>{const n=e,a=l();if(this.activeOverlay&&a){if("off"===Y(a)){const e=K(a),t=this.lastAdTrackIndex??e[0]?.index;"number"==typeof t&&Z(a,t,"hidden")}else Q(a)}else{const e=o();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"===Y(t.media)){const e=K(t.media),i=this.lastSelectedIndex??e[0]?.index;"number"==typeof i&&Z(t.media,i)}else G(t.media)}}c();const u="true"===this.button.getAttribute("aria-pressed");s(u?i.captionsOn??`${r} on`:i.captionsOff??`${r} off`),n.preventDefault(),n.stopPropagation()},e);const u={id:"captions",label:r,getSubmenu:()=>{const e=l();if(this.activeOverlay&&e){const t=K(e);if(!t.length)return null;const n=Y(e);return{id:"captions",label:r,items:[{id:"off",label:i.off,checked:"off"===n,onSelect:()=>{Q(e),c()}},...t.map(t=>({id:String(t.index),label:J(t.track,t.index),checked:t.index===n,onSelect:()=>{Z(e,t.index,"hidden"),this.lastAdTrackIndex=t.index,c()}}))]}}if(this.activeOverlay)return null;const n=o(),s=K(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),c()}},...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,c()}}))]}}if(!s.length)return null;const a=Y(t.media);return{id:"captions",label:r,items:[{id:"off",label:i.off,checked:"off"===a,onSelect:()=>{G(t.media),c()}},...s.map(e=>({id:String(e.index),label:J(e.track,e.index),checked:e.index===a,onSelect:()=>{Z(t.media,e.index),this.lastSelectedIndex=e.index,c()}}))]}}};return U(t).register(u),this.dispose.add(this.overlayMgr.bus.on("overlay:changed",e=>{e?Promise.resolve().then(()=>c()):(this.lastAdTrackIndex=null,c())})),this.onPlayer("loadedmetadata",()=>{const e=o();c(),e?.subscribe&&this.dispose.add(e.subscribe(()=>c()))}),c(),this.button}}function te(e){const t=new ee;return e&&(t.placement=e),t}class ie extends W{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 re(e){const t=new ie;return e&&(t.placement=e),t}class ne extends W{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("aria-live","off"),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=$(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 se(e){const t=new ne;return e&&(t.placement=e),t}function ae(){const e=document;return document.fullscreenElement||e.webkitFullscreenElement||e.mozFullScreenElement||e.msFullscreenElement||null}function oe(){const e=document;return document.exitFullscreen?document.exitFullscreen():e.mozCancelFullScreen?e.mozCancelFullScreen():e.webkitCancelFullScreen?e.webkitCancelFullScreen():e.msExitFullscreen?e.msExitFullscreen():void 0}class le extends W{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=$(this.core).labels,i=document.createElement("button"),{announce:r,destroy:n}=I(this.resolvePlayerRoot());this.dispose.add(n),i.tabIndex=0,i.type="button",i.className="op-controls__fullscreen",N(i,t.fullscreen),i.setAttribute("aria-pressed","false");const s=(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"))},a=()=>{const e=ae(),t=this.resolveFullscreenContainer(),r=!!e&&(e===t||e.contains?.(t));var n;(n=r)?i.classList.add("op-controls__fullscreen--out"):i.classList.remove("op-controls__fullscreen--out"),i.setAttribute("aria-pressed",n?"true":"false"),r?document.body.classList.add("op-fullscreen__on"):document.body.classList.remove("op-fullscreen__on"),s(r?this.screenW:void 0,r?this.screenH:void 0),this.isFullscreen=r};return["fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange"].forEach(t=>{this.listen(document,t,a,e)}),this.listen(document,"keydown",e=>{"Escape"===e.key&&this.isFullscreen&&oe()},e),this.listen(i,"click",async e=>{const t=e;if(this.screenW=window.screen.width,this.screenH=window.screen.height,ae())return void oe();!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),this.onPlayer("player:fullscreenchange",()=>{const e=ae()?"enterFullscreen":"exitFullscreen";r(t[e]??e)}),a(),i}onOverlayChanged(){if(ae()){ae()&&document.dispatchEvent(new Event("fullscreenchange"))}}}function ce(e){const t=new le;return e&&(t.placement=e),t}function ue(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 de(e){const t=ue(e);t.paused||t.ended?await e.play():e.pause()}class he extends W{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=$(t).labels,r=i.play,n=i.pause,s=i.restart,{announce:a,destroy:o}=I(this.resolvePlayerRoot());this.dispose.add(o);let l=!1;const c=document.createElement("button");c.tabIndex=0,c.type="button",c.className="op-controls__playpause",N(c,r),c.setAttribute("aria-pressed","false"),this.listen(c,"click",async e=>{const i=e;if(i.preventDefault(),i.stopPropagation(),l){ue(t).currentTime=0}await de(t)},e);const u=e=>{c.classList.toggle("op-controls__playpause--pause",e),c.classList.toggle("op-controls__playpause--replay",l&&!e),c.setAttribute("aria-pressed",e?"true":"false"),N(c,l&&!e?s:e?n:r)};return this.onPlayer("play",()=>{l=!1,u(!0)}),this.onPlayer("playing",()=>{l=!1,u(!0),t.media.seeking||a(i.pause?((e,t)=>{const r=i[e]??e;return null!=t?r.replace("%s",t):r})("play"):"Playing")}),this.onPlayer("pause",()=>{u(!1),a(i.pause??"Paused")}),this.onPlayer("ended",()=>{l=!0,u(!1)}),c}}function pe(e){const t=new he;return e&&(t.placement=e),t}class me extends W{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=$(t),{allowRewind:r,allowSkip:n,labels:s}=i,a=s,{announce:o,destroy:l}=I(this.resolvePlayerRoot());this.dispose.add(l);const c=(e,t)=>{const i=a[e]??e;return null!=t?i.replace("%s",t):i},u=s.progressSlider,h=s.progressRail,m=document.createElement("div");m.className="op-controls__progress",m.role="group",N(m,u);const f=document.createElement("input");f.type="range",f.role="slider",f.className="op-controls__progress--seek",f.tabIndex=0,f.min="0",f.step="0.1",f.value="0",N(f,h,{container:m}),f.setAttribute("aria-valuemin","0"),f.setAttribute("aria-valuenow","0");const v=document.createElement("progress");v.className="op-controls__progress--buffer",v.max=100,v.value=0;const y=document.createElement("progress");let g;y.className="op-controls__progress--played",y.max=100,y.value=0,m.appendChild(f),m.appendChild(y),m.appendChild(v),b()||(g=document.createElement("span"),g.className="op-controls__tooltip",g.tabIndex=-1,g.textContent="00:00",m.appendChild(g));const w=e=>{e?f.classList.add("op-progress--pressed"):f.classList.remove("op-progress--pressed")};this.listen(f,"pointerdown",()=>w(!0)),this.listen(f,"pointerup",()=>w(!1)),this.listen(f,"pointercancel",()=>w(!1)),this.listen(f,"mouseleave",()=>w(!1)),this.listen(f,"touchstart",()=>w(!0),e),this.listen(f,"touchend",()=>w(!1),e),this.listen(f,"mousedown",()=>w(!0),e),this.listen(f,"mouseup",()=>w(!1),e);const P=()=>w(!1);this.listen(document,"pointerup",P,e),this.listen(document,"pointercancel",P,e),this.listen(document,"mouseup",P,e),this.listen(document,"touchend",P,e);const _=e=>{f.disabled=!e,f.classList.toggle("op-progress--disabled",!e),m.setAttribute("aria-disabled",(!e).toString())},k=()=>this.activeOverlay?this.activeOverlay.duration:t.surface?.duration??t.duration,E=()=>this.activeOverlay?this.activeOverlay.value:t.surface?.currentTime??t.currentTime,O=()=>this.activeOverlay?this.activeOverlay.mode:"normal",S=()=>{const e=k(),i=E(),r=O();if((t.isLive||e===1/0)&&!this.activeOverlay)return void m.setAttribute("aria-hidden","true");if(m.setAttribute("aria-hidden","false"),Number.isFinite(e)&&e>0&&(f.max&&"0"!==f.max&&parseFloat(f.max||"-1")===e||(f.max=String(e),f.setAttribute("aria-valuemax",String(e)))),this.repaint=S,this.activeOverlay?_(this.activeOverlay.canSeek):_(!t.isLive&&t.surface?.duration!==1/0),f.classList.contains("op-progress--pressed"))return;const n=Number.isFinite(e)&&e>0?e:0,s=Number.isFinite(i)&&i>=0?i:0;f.value=String(s),f.setAttribute("aria-valuenow",String(s));const a=parseFloat(f.min),o=parseFloat(f.max);if(Number.isFinite(a)&&Number.isFinite(o)&&o>a){const e="countdown"===r?100*(o-s-a)/(o-a):100*(s-a)/(o-a);f.style.backgroundSize=`${e}% 100%`}y.value=n?"countdown"===r?(n-s)/n*100:s/n*100:0,this.activeOverlay&&Number.isFinite(this.activeOverlay.bufferedPct)&&(v.value=Math.max(0,Math.min(100,this.activeOverlay.bufferedPct)))},A=e=>{if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=k();if((t.isLive||i===1/0)&&!this.activeOverlay)return;if(!Number.isFinite(i)||i<=0)return;const s=m.getBoundingClientRect(),a=e-s.left,o=Math.max(0,Math.min(1,a/s.width))*i,l=E();o<l&&!r||o>l&&!n||Number.isFinite(o)&&(f.value=String(o),t.currentTime=o)};return this.listen(m,"click",e=>{const t=e,i=e.target;i&&i.closest('input[type="range"]')||A(t.clientX)},e),this.listen(m,"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(),A(r.clientX))},e),this.listen(f,"change",e=>{if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=e.target,s=parseFloat(i.value),a=E();s<a&&!r||s>a&&!n||(Number.isFinite(s)&&(t.currentTime=s),w(!1))},e),this.listen(f,"input",e=>{if(!f.classList.contains("op-progress--pressed")&&!b())return;if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=e.target,s=parseFloat(i.min),a=parseFloat(i.max),o=parseFloat(i.value),l=E();if(o<l&&!r||o>l&&!n)return;Number.isFinite(s)&&Number.isFinite(a)&&a>s&&(f.style.backgroundSize=100*(o-s)/(a-s)+"% 100%");const c=k(),u=Number.isFinite(c)&&c>0?c:0;y.value=u?o/u*100:0,t.currentTime=o},e),this.onPlayer("durationchange",S),this.onPlayer("timeupdate",S),this.onPlayer("seeked",()=>{const e=d(t.currentTime),i=isFinite(t.duration)?d(t.duration):void 0;o(i?`${c("seekTo",e)} of ${i}`:c("seekTo",e))}),this.onPlayer("waiting",()=>{f.classList.contains("loading")||f.classList.add("loading"),f.classList.contains("error")&&f.classList.remove("error")}),this.onPlayer("play",()=>{f.classList.contains("loading")&&f.classList.remove("loading"),f.classList.contains("error")&&f.classList.remove("error"),t.isLive||t.surface.duration===1/0||(m.removeAttribute("aria-valuenow"),m.removeAttribute("aria-valuetext"))}),this.onPlayer("playing",()=>{f.classList.contains("loading")&&f.classList.remove("loading"),f.classList.contains("error")&&f.classList.remove("error")}),this.onPlayer("ended",()=>{f.style.backgroundSize="0% 100%",f.max&&(f.max="0"),v.value=0,y.value=0}),this.listen(m,"pointermove",e=>{const i=e;if(b())return;if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const r=k();if((t.isLive||r===1/0)&&!this.activeOverlay)return;const n=i.pageX;let s=n-p(m).left;const a=g.offsetWidth/2,o=s/m.offsetWidth,l=o*r,c=this.resolvePlayerRoot(),u=c.offsetWidth-g.offsetWidth;s<=0||n-p(c).left<=a?s=0:n-p(c).left>=u?s=u-p(f).left-10:s-=a,o>=0&&o<=1?g.classList.add("op-controls__tooltip--visible"):g.classList.remove("op-controls__tooltip--visible"),g.style.left=`${s}px`,g.textContent=Number.isNaN(l)?"00:00":d(l)},e),this.listen(document,"pointermove",e=>{e.target.closest(".op-controls__progress")||g.classList.remove("op-controls__tooltip--visible")},e),S(),m}onOverlayChanged(){this.repaint?.()}}function be(e){const t=new me;return e&&(t.placement=e),t}class fe extends W{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=$(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()})),U(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=U(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{labels:n}=$(this.core),s=document.createElement("button");s.type="button",s.className="op-submenu__back",N(s,n.back),this.listen(s,"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(s,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 s=document.createElement("button");s.type="button",s.className="op-controls__menu-item",s.setAttribute("role","menuitem"),s.setAttribute("aria-disabled",n?"true":"false"),s.setAttribute("aria-checked",r?"true":"false");const a=document.createElement("span");a.className="op-controls__menu-item-label",a.textContent=t;const o=document.createElement("span");return o.className="op-menu__item-check "+(r?"checked":""),s.append(o,a),this.listen(s,"click",e=>{const t=e;i(),t.preventDefault(),t.stopPropagation()},e),s}}function ve(e){const t=new fe;return e&&(t.placement=e),t}class ye extends W{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="/",t.setAttribute("aria-hidden","true");const i=document.createElement("span");i.className="op-controls-time";const r=(new ie).create(e),n=(new ne).create(e);return i.appendChild(r),i.appendChild(t),i.appendChild(n),i}}function ge(e){const t=new ye;return e&&(t.placement=e),t}class we extends W{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=$(t).labels,r=i,n=i.mute,s=i.unmute,a=i.volume,o=i.volumeControl,l=i.volumeSlider,{announce:c,destroy:u}=I(this.resolvePlayerRoot());this.dispose.add(u);const d=(e,t)=>{const i=r[e]??e;return null!=t?i.replace("%s",t):i};let h=null;this.dispose.add(()=>{h&&clearTimeout(h)});const p=document.createElement("div");p.className="op-controls__volume",p.tabIndex=0,p.setAttribute("aria-valuemin","0"),p.setAttribute("aria-valuemax","100"),p.setAttribute("aria-valuenow",`${t.volume}`),N(p,o),p.setAttribute("aria-orientation","vertical"),p.setAttribute("role","slider");const m=document.createElement("input");m.className="op-controls__volume--input",m.tabIndex=-1,m.type="range",m.value=t.volume.toString(),m.min="0",m.max="1",m.step="0.1",N(m,l,{container:p});const b=document.createElement("progress");b.className="op-controls__volume--display",b.max=10,b.value=10*t.volume,p.appendChild(m),p.appendChild(b);const f=document.createElement("button");f.tabIndex=0,f.type="button",f.title=n,f.className="op-controls__mute",N(f,n),f.setAttribute("aria-pressed","false");let v=t.volume;const y=e=>e>=1?1:e<=0?0:e,g=e=>{const t=y(e);b.value=10*t;const i=Math.floor(100*t);p.setAttribute("aria-valuenow",`${i}`),p.setAttribute("aria-valuetext",`${a}: ${i}`)},w=e=>{const t=y(e);t<=.5&&t>0?(f.classList.remove("op-controls__mute--muted"),f.classList.add("op-controls__mute--half")):0===t?(f.classList.add("op-controls__mute--muted"),f.classList.remove("op-controls__mute--half")):(f.classList.remove("op-controls__mute--muted"),f.classList.remove("op-controls__mute--half"))};this.listen(m,"input",e=>{const i=Number(e.target.value),r=y(i);v=r,t.volume=r,t.muted=0===r;const n=ue(t);if(n&&n!==t.surface)try{n.volume=r,n.muted=0===r}catch{}g(r),w(r),h&&clearTimeout(h),h=setTimeout(()=>{c(d("volumePercent",String(Math.round(100*r)))),h=null},400)},e),this.listen(f,"click",e=>{const i=e,r=ue(t);let a;if(t.muted){const e=v>0?v:1;if(t.volume=e,t.muted=!1,a=Math.round(100*e),r&&r!==t.surface)try{r.volume=e,r.muted=!1,f.title=s,N(f,s)}catch{}}else if(t.volume>0&&(v=t.volume),t.volume=0,t.muted=!0,a=0,r&&r!==t.surface)try{r.volume=0,r.muted=!0,f.title=n,N(f,n)}catch{}h&&clearTimeout(h),h=null,c(d("volumePercent",String(a))),i.preventDefault(),i.stopPropagation()},e);let P=!1;const _=(e,i)=>{if(P)return;const r=ue(t);if(r&&r!==t.surface){P=!0;try{r.muted!==e&&(r.muted=e),e||r.volume===i||(r.volume=i)}catch{}finally{P=!1}}};this.onPlayer("loadedmetadata",()=>{const e=t.muted||0===t.volume,i=y(t.volume);i>0&&(v=i),m.value=(e?0:i).toString(),g(e?0:i),w(e?0:i),_(e,i)}),this.onPlayer("volumechange",()=>{if(P)return;const e=t.muted||0===t.volume,i=y(t.volume);i>0&&(v=i),m.value=(e?0:i).toString(),g(e?0:i),w(e?0:i),f.setAttribute("aria-pressed",e?"true":"false"),_(e,i)});const k=document.createElement("div");return k.className="op-controls__volume--container",k.appendChild(f),k.appendChild(p),k}}function Pe(e){if(b())return null;const t=new we;return e&&(t.placement=e),t}let _e=0;function ke(e,t){const i=e.querySelector(":scope > span.op-player__sr-only"),r=i??document.createElement("span");i||(_e+=1,r.className="op-player__sr-only",r.id=`op-player-sr-el-${_e}`,e.insertBefore(r,e.firstChild),e.setAttribute("aria-labelledby",r.id),e.removeAttribute("aria-label")),r.textContent=t}function Ee(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=$(t).labels,s=b()?n.tap:n.click,a=document.createElement("button");a.type="button",a.className="op-player__unmute",a.textContent=s,a.tabIndex=0;const o=()=>{try{l?.()}catch{}try{a.remove()}catch{}},l=t.events.on("volumechange",()=>{t.muted||o()});a.addEventListener("click",()=>{t.userInteracted||(t.userInteracted=!0,t.emit("player:interacted")),t.muted=!1,t.volume=r,t.play().catch(()=>{}),o()},e),i.insertBefore(a,i.firstChild),t.events.on("player:destroy",o)}catch{}}))}function Oe(t,i,r,n={}){const s=!0===n.alwaysVisible,a=$(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(a.width){h+=`width: ${"number"==typeof a.width?`${a.width}px`:a.width} !important;`}if(a.height){h+=`height: ${"number"==typeof a.height?`${a.height}px`:a.height} !important;`}h&&d.setAttribute("style",h),i.controls=!1,i.replaceWith(d),ke(d,a.labels.container);const p=document.createElement("div");p.className="op-media",p.tabIndex=0,p.setAttribute("role","group"),p.appendChild(o),ke(p,a.labels.media);const f=document.createElement("div");let v;f.className="op-media__main",l||(p.appendChild(f),v=function(t){const i=$(t).labels,r=i.play,n=i.pause,s=i.loading,a=document.createElement("button");a.className="op-player__play",a.tabIndex=0,a.type="button",a.setAttribute("aria-pressed","false"),a.setAttribute("aria-hidden","false"),N(a,r),a.setAttribute("aria-keyshortcuts","K Enter"),a.addEventListener("click",async e=>{await de(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=s,o.appendChild(l);let u=!1;const d=()=>{c&&(window.clearTimeout(c),c=void 0),u=!1,a.classList.remove("op-player__play--flash")},h=e=>{if(e){if(u)return;a.classList.remove("op-player__play--paused"),a.setAttribute("aria-hidden","false"),a.removeAttribute("inert"),N(a,r),a.inert=!1,a.tabIndex=0}else{u&&d();const e=document.activeElement;e&&(e===a||a.contains(e))&&e.blur?.(),a.classList.add("op-player__play--paused"),a.setAttribute("aria-hidden","true"),a.setAttribute("inert",""),N(a,n),a.inert=!0,a.tabIndex=-1}};return{button:a,loader:o,showButton:h,showLoader:e=>{o.style.display=e?"":"none",o.setAttribute("aria-hidden",e?"false":"true")},flashPause:e=>{d(),u=!0,a.classList.remove("op-player__play--paused"),a.classList.add("op-player__play--flash"),a.setAttribute("aria-hidden","false"),a.removeAttribute("inert"),a.inert=!1,a.tabIndex=-1,N(a,n),c=window.setTimeout(()=>{a.classList.remove("op-player__play--flash"),c=void 0,u=!1,h(!0)},e)}}}(t),p.appendChild(v.button),p.appendChild(v.loader));const y=function(t,i,r){let n=t.volume||1;const s=()=>{i.classList.contains("op-player__keyboard--inactive")&&i.classList.remove("op-player__keyboard--inactive")},a=()=>{i.classList.contains("op-player__keyboard--inactive")||i.classList.add("op-player__keyboard--inactive")};i.addEventListener("click",a,e),i.addEventListener("pointerdown",a,e),i.addEventListener("pointerleave",a,e),window.addEventListener("click",a,e),window.addEventListener("pointerdown",a,e),window.addEventListener("keydown",s,e);const o=async e=>{const i=e.key;s();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 a=$(t).step,o=a&&a>0?a:5;switch(i){case"k":case"K":case"Enter":case" ":case"Spacebar":await de(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);try{const e=ue(t);e&&e!==t.surface&&(e.volume=i,e.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);try{const e=ue(t);e&&e!==t.surface&&(e.volume=i,e.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":if(t.muted){const e=n>0?n:1;t.volume=e,t.muted=!1;try{const i=ue(t);i&&i!==t.surface&&(i.volume=e,i.muted=!1)}catch{}}else{t.volume>0&&(n=t.volume),t.volume=0,t.muted=!0;try{const e=ue(t);e&&e!==t.surface&&(e.volume=0,e.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()}};i.addEventListener("keydown",o,e);const l=t.events.on("waiting",()=>{r?.showLoader(!0),r?.showButton(!1)}),c=t.events.on("seeking",()=>{r?.showLoader(!0),r?.showButton(!1)}),u=t.events.on("seeked",()=>{r?.showLoader(!1),r?.showButton(t.media?.paused??!1)}),d=t.events.on("play",()=>{r?.showLoader(!1),r?.showButton(!1)}),h=t.events.on("pause",()=>{r?.showLoader(!1),r?.showButton(!0)}),p=t.events.on("playing",()=>{r?.showLoader(!1),r?.showButton(!1)}),m=t.events.on("ended",()=>{r?.showLoader(!1),r?.showButton(!0)});return()=>{i.removeEventListener("click",a),i.removeEventListener("pointerdown",a),i.removeEventListener("pointerleave",a),i.removeEventListener("keydown",o),window.removeEventListener("click",a),window.removeEventListener("pointerdown",a),window.removeEventListener("keydown",s),l(),c(),u(),d(),h(),p(),m()}}(t,d,v),g=document.createElement("div");if(g.className="op-controls",g.setAttribute("aria-hidden","false"),g.inert=!1,l){const e=L(g);d.appendChild(p),d.appendChild(g);const n=[];r.forEach(i=>{const r=i.create(t);r.dataset.controlId=i.id,e.place(i.placement,r),n.push(i)});const s={wrapper:d,mediaContainer:p,controlsRoot:g,placeholder:c,grid:e},a=t.events.on("player:destroy",()=>{try{n.forEach(e=>e.destroy?.())}catch{}try{d.replaceWith(i)}catch{}try{c.remove()}catch{}try{y(),o(),l(),a()}catch{}}),o=t.events.on("ui:addElement",e=>{if(!e?.el)return;const t=e.placement||{v:"bottom",h:"right"};s.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,s.grid?.place(i.placement,r),e.el=r,n.push(i)});return Ee(t,d),s}const w=b(),P=3e3,k=6500;let E,O="pointer",S=!1;const A=()=>g.contains(document.activeElement),T=()=>{d.classList.remove("op-controls--hidden"),p.classList.remove("op-media--controls-hidden"),E&&window.clearTimeout(E),g.setAttribute("aria-hidden","false"),g.inert=!1,t.events.emit("ui:controls:show")},j=e=>{s||S||t.surface.paused||t.surface.ended||(E&&window.clearTimeout(E),E=window.setTimeout(()=>(()=>{if(!t.surface.paused&&!t.surface.ended){if(A()){if("keyboard"!==O)return;d.focus()}d.classList.add("op-controls--hidden"),p.classList.add("op-media--controls-hidden"),g.setAttribute("aria-hidden","true"),g.inert=!0,t.events.emit("ui:controls:hide")}})(),e??P))},x=()=>{O="pointer",T(),j(P)},C=[],R=(e,t,i,r)=>{e.addEventListener(t,i,r),C.push(()=>e.removeEventListener(t,i,r))};R(g,"focusin",()=>{O="keyboard",T(),j(k)}),R(g,"focusout",()=>{window.setTimeout(()=>{A()||j("keyboard"===O?k:P)},0)});const M=()=>{const e=document.activeElement;return!!e&&(d.contains(e)&&!g.contains(e))};if(R(d,"focusin",()=>{M()&&(T(),E&&window.clearTimeout(E))},e),R(d,"focusout",()=>{window.setTimeout(()=>{d.contains(document.activeElement)||A()||j()},0)},e),R(d,"keydown",()=>{O="keyboard",M()?(T(),E&&window.clearTimeout(E)):A()&&(T(),j(k))},e),w){R(d,"pointerdown",()=>{O="pointer",T(),j(P)},e)}else{const t=()=>j(P);R(d,"pointermove",x,e),R(d,"pointerenter",x,e),R(g,"pointerenter",x,e),R(g,"pointermove",x,e),R(g,"pointerleave",t,e)}const F=L(g,f);d.appendChild(p),d.appendChild(g);const I=[];r.forEach(e=>{const i=e.create(t);i.dataset.controlId=e.id,F.place(e.placement,i),I.push(e)});const B={wrapper:d,mediaContainer:p,controlsRoot:g,placeholder:c,grid:F};Ee(t,d);R(d,"click",async e=>{if(_(t).active?.fullscreenVideoEl)return;const i=e.target;if(i&&g.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 D=t.events.on("playing",()=>j(P)),V=t.events.on("pause",()=>T()),q=t.events.on("ended",()=>T()),H=t.events.on("ui:menu:open",()=>{S=!0,E&&window.clearTimeout(E)}),z=t.events.on("ui:menu:close",()=>{S=!1,j()}),U=t.events.on("player:destroy",()=>{try{I.forEach(e=>e.destroy?.())}catch{}try{d.replaceWith(i)}catch{}try{c.remove()}catch{}try{C.forEach(e=>e()),y(),D?.(),V?.(),q?.(),H?.(),z?.(),W?.(),X?.(),U()}catch{}}),W=t.events.on("ui:addElement",e=>{if(!e?.el)return;const t=e.placement||{v:"bottom",h:"right"};B.grid?.place(t,e.el)}),X=t.events.on("ui:addControl",e=>{const i=e?.control;if(!i)return;const r=i.create(t);r.dataset.controlId=i.id,B.grid?.place(i.placement,r),e.el=r,I.push(i)});return B}function Se(e){return{play:pe,volume:Pe,captions:te,fullscreen:ce,currentTime:re,duration:se,time:ge,progress:be,settings:ve}[e]}function Ae(e){const t=function(e){const t=T(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=Se(e);t&&x(e,t)}}function Te(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 je{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=T(e),i=!0===e?.alwaysVisible;Ae(t),this.createdPlugins=this.createDetectedPlugins();for(const e of this.createdPlugins)Te(e.entry,je);this.core=new y(this.media,{...this.config,plugins:this.createdPlugins.map(e=>e.plugin)});const r=C(t);Oe(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,s=this.config?.[t],n?s?"object"!=typeof n||"object"!=typeof s?s:{...n,...s}:{...n}:s??{});var n,s;const a=i.factory(r);return{entry:{...i,name:t},plugin:a,cfg:r}}).filter(Boolean)}}const Le=je;try{Object.assign(Le,O)}catch{}return je});
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=[]}createMediaSurfaceShim(e){return{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)}}}bindMediaEvents(e,t){const r=this.createMediaSurfaceShim(e);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(e){this.unbindCommands(),this.unbindSurfaceEvents()}}const s={startTime:0,duration:0};class a{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 s=Math.floor(n/60),a=e=>{const t=e.toString();return e<10?e<=0?"00":`0${t}`:t};return n%=60,r%=60,`${s>0?`${a(s)}:`:""}${a(n)}:${a(r)}${i?`:${a(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={...s,...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 a;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){return function(e,t){if(0===t.length)throw new Error("Player cannot resolve media with an empty source");for(const i of t)for(const t of e)if(t.canPlay?.(i))return{engine:t,source:i};throw new Error("No compatible media engine found")}([...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)),e)}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){return function(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}(e)}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:a,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,"_playIntentAfterEnd",{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 this._playIntentAfterEnd=this._ended,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._ended&&!this._playIntentAfterEnd||this.internalBus.emit("waiting");break;case"playing":if(this._ended&&!this._playIntentAfterEnd)break;this._paused=!1,this._ended=!1,this._playIntentAfterEnd=!1,this.internalBus.emit("play"),this.internalBus.emit("playing");break;case"paused":this._paused=!0,this.internalBus.emit("pause");break;case"ended":{const e=2;if(Number.isFinite(this._duration)&&this._currentTime<this._duration-e)break;this._paused=!0,this._ended=!0,this.internalBus.emit("ended"),Promise.resolve(this.adapter.pause());break}}}onAdapterError(e){this.internalBus.emit("error",e)}applyTime(e){Number.isFinite(e)&&(this._currentTime=e,this._paused||this._ended||this.internalBus.emit("timeupdate"))}applyDuration(e){!Number.isFinite(e)||e<=0||e!==this._duration&&(this._duration=e,this.internalBus.emit("durationchange"))}applyRate(e){!Number.isFinite(e)||e<=0||e!==this._playbackRate&&(this._playbackRate=e,this.internalBus.emit("ratechange"))}applyVolume(e,t){if(!Number.isFinite(e))return;const i=Math.min(1,Math.max(0,e));i===this._volume&&!!t===this._muted||(this._volume=i,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=()=>{if(this.applyTime(this.safeNum(this.adapter.getCurrentTime())),this.applyDuration(this.safeNum(this.adapter.getDuration())),this.adapter.getVolume||this.adapter.isMuted){const e=this.adapter.getVolume?this.safeNum(this.adapter.getVolume()):this._volume,t=this.adapter.isMuted?!!this.adapter.isMuted():this._muted;this.applyVolume(e,t)}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 T(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 L(e,t){const i=j("top"),r=j("center"),n=j("bottom");return e.append(i.section,r.section,n.section),{place(e,s){const a=e.region?.trim();if("main"===a&&t)return void t.appendChild(s);const o="top"===e.v?i:"middle"===e.v?r:n;("left"===e.h?o.left:"center"===e.h?o.center:o.right).appendChild(s)}}}function x(e,t){S.set(e,t)}function C(e){const t=[],i=T(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 s=null;if(n){const e=document.getElementById(n);e&&e instanceof HTMLSpanElement&&(s=e)}s||(s=document.createElement("span"),s.className="op-player__sr-only",s.id=(R+=1,`op-player-sr-${R}`),e.parentElement===r&&r.contains(e)?r.insertBefore(s,e):r.appendChild(s),e.setAttribute("aria-labelledby",s.id)),s.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=new WeakMap;function I(e){let t=F.get(e);if(!t){const{announce:i,destroy:r}=function(e){const t=[];let i=0;for(let i=0;i<2;i++){const i=document.createElement("div");i.setAttribute("role","status"),i.setAttribute("aria-live","polite"),i.setAttribute("aria-atomic","true"),i.className="op-player__sr-only op-player__announcer",i.setAttribute("aria-hidden","true"),e.appendChild(i),t.push(i)}const r=e=>{const r=t[i%2],n=t[(i+1)%2];i++,n.textContent="",n.setAttribute("aria-hidden","true"),r.setAttribute("aria-hidden","false"),r.textContent=e},n=()=>{t.forEach(e=>e.remove())};return{announce:r,destroy:n}}(e);t={announce:i,refs:0,_destroy:r},F.set(e,t)}t.refs+=1;const i=t;return{announce:t.announce,destroy:()=>{i.refs-=1,i.refs<=0&&(i._destroy(),F.delete(e))}}}const B=0,D=!0,V=!0,q=Object.freeze({auto:"Auto",back:"Back",captions:"CC/Subtitles",captionsOff:"Captions off",captionsOn:"Captions on",click:"Click to unmute",container:"Media player",enterFullscreen:"Enter Fullscreen",exitFullscreen:"Exit Fullscreen",fullscreen:"Fullscreen",live:"Live",loading:"Loading...",media:"Media",mute:"Mute",off:"Off",pause:"Pause",play:"Play",progressRail:"Time Rail",progressSlider:"Time Slider",restart:"Restart",seekTo:"Seek to %s",settings:"Player Settings",speed:"Speed",speedNormal:"Normal",tap:"Tap to unmute",toggleCaptions:"Toggle Captions",unmute:"Unmute",volume:"Volume",volumeControl:"Volume Control",volumePercent:"Volume: %s%",volumeSlider:"Volume Slider"});function $(e){const t=e.config?e.config:e,i=t.allowSkip??D,r=t.allowRewind??V,n=t.step??B,s=t.width,a=t.height,o={...q,...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:s,height:a,labels:o}}const H=Symbol.for("openplayerjs.settings.registry");class z{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 U(e){const t=e;if(t[H])return t[H];const i=new z;return t[H]=i,i}class W{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 a})}onOverlayChanged(e){}create(e){return this.dispose.dispose(),this.dispose=new a,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 X(e){return"captions"===e||"subtitles"===e}function J(e,t){return e.label&&e.label.trim()||e.language&&e.language.trim().toUpperCase()||`Track ${t+1}`}function K(e){const t=e.textTracks??null;if(!t)return[];const i=[];for(let e=0;e<t.length;e++){const r=t[e];r&&(X(String(r.kind))&&i.push({index:e,track:r}))}return i}function Y(e){for(const t of K(e))if("showing"===t.track.mode)return t.index;return"off"}function G(e){for(const t of K(e))t.track.mode="disabled"}function Q(e){for(const t of K(e))t.track.mode="hidden"}function Z(e,t,i="disabled"){for(const r of K(e))r.track.mode=r.index===t?"showing":i}class ee extends W{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=$(t).labels,r=i.captions,n=i.toggleCaptions,{announce:s,destroy:a}=I(this.resolvePlayerRoot());this.dispose.add(a),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 o=()=>E(t),l=()=>{const e=this.activeOverlay?.fullscreenVideoEl;return e instanceof HTMLVideoElement?e:null},c=()=>{const e=l();if(this.activeOverlay){if(e){const t=K(e);if(this.button.style.display=t.length>0?"":"none",t.length>0){const t="off"!==Y(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=o(),r=K(t.media),n=i?.getTracks()??[],s=r.length>0||n.length>0;this.button.style.display=s?"":"none";const a=i?null!==i.getActiveTrack():"off"!==Y(t.media);this.button.classList.toggle("op-controls__captions--on",a),this.button.setAttribute("aria-pressed",a?"true":"false")};this.listen(this.button,"click",e=>{const n=e,a=l();if(this.activeOverlay&&a){if("off"===Y(a)){const e=K(a),t=this.lastAdTrackIndex??e[0]?.index;"number"==typeof t&&Z(a,t,"hidden")}else Q(a)}else{const e=o();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"===Y(t.media)){const e=K(t.media),i=this.lastSelectedIndex??e[0]?.index;"number"==typeof i&&Z(t.media,i)}else G(t.media)}}c();const u="true"===this.button.getAttribute("aria-pressed");s(u?i.captionsOn??`${r} on`:i.captionsOff??`${r} off`),n.preventDefault(),n.stopPropagation()},e);const u={id:"captions",label:r,getSubmenu:()=>{const e=l();if(this.activeOverlay&&e){const t=K(e);if(!t.length)return null;const n=Y(e);return{id:"captions",label:r,items:[{id:"off",label:i.off,checked:"off"===n,onSelect:()=>{Q(e),c()}},...t.map(t=>({id:String(t.index),label:J(t.track,t.index),checked:t.index===n,onSelect:()=>{Z(e,t.index,"hidden"),this.lastAdTrackIndex=t.index,c()}}))]}}if(this.activeOverlay)return null;const n=o(),s=K(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),c()}},...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,c()}}))]}}if(!s.length)return null;const a=Y(t.media);return{id:"captions",label:r,items:[{id:"off",label:i.off,checked:"off"===a,onSelect:()=>{G(t.media),c()}},...s.map(e=>({id:String(e.index),label:J(e.track,e.index),checked:e.index===a,onSelect:()=>{Z(t.media,e.index),this.lastSelectedIndex=e.index,c()}}))]}}};return U(t).register(u),this.dispose.add(this.overlayMgr.bus.on("overlay:changed",e=>{e?Promise.resolve().then(()=>c()):(this.lastAdTrackIndex=null,c())})),this.onPlayer("loadedmetadata",()=>{const e=o();c(),e?.subscribe&&this.dispose.add(e.subscribe(()=>c()))}),c(),this.button}}function te(e){const t=new ee;return e&&(t.placement=e),t}class ie extends W{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 re(e){const t=new ie;return e&&(t.placement=e),t}class ne extends W{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("aria-live","off"),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=$(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 se(e){const t=new ne;return e&&(t.placement=e),t}function ae(){const e=document;return document.fullscreenElement||e.webkitFullscreenElement||e.mozFullScreenElement||e.msFullscreenElement||null}function oe(){const e=document;return document.exitFullscreen?document.exitFullscreen():e.mozCancelFullScreen?e.mozCancelFullScreen():e.webkitCancelFullScreen?e.webkitCancelFullScreen():e.msExitFullscreen?e.msExitFullscreen():void 0}class le extends W{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=$(this.core).labels,i=document.createElement("button"),{announce:r,destroy:n}=I(this.resolvePlayerRoot());this.dispose.add(n),i.tabIndex=0,i.type="button",i.className="op-controls__fullscreen",N(i,t.fullscreen),i.setAttribute("aria-pressed","false");const s=(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"))},a=()=>{const e=ae(),t=this.resolveFullscreenContainer(),r=!!e&&(e===t||e.contains?.(t));var n;(n=r)?i.classList.add("op-controls__fullscreen--out"):i.classList.remove("op-controls__fullscreen--out"),i.setAttribute("aria-pressed",n?"true":"false"),r?document.body.classList.add("op-fullscreen__on"):document.body.classList.remove("op-fullscreen__on"),s(r?this.screenW:void 0,r?this.screenH:void 0),this.isFullscreen=r};return["fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange"].forEach(t=>{this.listen(document,t,a,e)}),this.listen(document,"keydown",e=>{"Escape"===e.key&&this.isFullscreen&&oe()},e),this.listen(i,"click",async e=>{const t=e;if(this.screenW=window.screen.width,this.screenH=window.screen.height,ae())return void oe();!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),this.onPlayer("player:fullscreenchange",()=>{const e=ae()?"enterFullscreen":"exitFullscreen";r(t[e]??e)}),a(),i}onOverlayChanged(){if(ae()){ae()&&document.dispatchEvent(new Event("fullscreenchange"))}}}function ce(e){const t=new le;return e&&(t.placement=e),t}function ue(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 de(e){const t=ue(e);t.paused||t.ended?await e.play():e.pause()}class he extends W{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=$(t).labels,r=i.play,n=i.pause,s=i.restart,{announce:a,destroy:o}=I(this.resolvePlayerRoot());this.dispose.add(o);let l=!1;const c=document.createElement("button");c.tabIndex=0,c.type="button",c.className="op-controls__playpause",N(c,r),c.setAttribute("aria-pressed","false"),this.listen(c,"click",async e=>{const i=e;if(i.preventDefault(),i.stopPropagation(),l){ue(t).currentTime=0}await de(t)},e);const u=e=>{c.classList.toggle("op-controls__playpause--pause",e),c.classList.toggle("op-controls__playpause--replay",l&&!e),c.setAttribute("aria-pressed",e?"true":"false"),N(c,l&&!e?s:e?n:r)};return this.onPlayer("play",()=>{l=!1,u(!0)}),this.onPlayer("playing",()=>{l=!1,u(!0),t.media.seeking||a(i.pause?((e,t)=>{const r=i[e]??e;return null!=t?r.replace("%s",t):r})("play"):"Playing")}),this.onPlayer("pause",()=>{u(!1),a(i.pause??"Paused")}),this.onPlayer("ended",()=>{l=!0,u(!1)}),c}}function pe(e){const t=new he;return e&&(t.placement=e),t}class me extends W{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=$(t),{allowRewind:r,allowSkip:n,labels:s}=i,a=s,{announce:o,destroy:l}=I(this.resolvePlayerRoot());this.dispose.add(l);const c=(e,t)=>{const i=a[e]??e;return null!=t?i.replace("%s",t):i},u=s.progressSlider,h=s.progressRail,m=document.createElement("div");m.className="op-controls__progress",m.role="group",N(m,u);const f=document.createElement("input");f.type="range",f.role="slider",f.className="op-controls__progress--seek",f.tabIndex=0,f.min="0",f.step="0.1",f.value="0",N(f,h,{container:m}),f.setAttribute("aria-valuemin","0"),f.setAttribute("aria-valuenow","0");const v=document.createElement("progress");v.className="op-controls__progress--buffer",v.max=100,v.value=0;const y=document.createElement("progress");let g;y.className="op-controls__progress--played",y.max=100,y.value=0,m.appendChild(f),m.appendChild(y),m.appendChild(v),b()||(g=document.createElement("span"),g.className="op-controls__tooltip",g.tabIndex=-1,g.textContent="00:00",m.appendChild(g));const w=e=>{e?f.classList.add("op-progress--pressed"):f.classList.remove("op-progress--pressed")};this.listen(f,"pointerdown",()=>w(!0)),this.listen(f,"pointerup",()=>w(!1)),this.listen(f,"pointercancel",()=>w(!1)),this.listen(f,"mouseleave",()=>w(!1)),this.listen(f,"touchstart",()=>w(!0),e),this.listen(f,"touchend",()=>w(!1),e),this.listen(f,"mousedown",()=>w(!0),e),this.listen(f,"mouseup",()=>w(!1),e);const P=()=>w(!1);this.listen(document,"pointerup",P,e),this.listen(document,"pointercancel",P,e),this.listen(document,"mouseup",P,e),this.listen(document,"touchend",P,e);const _=e=>{f.disabled=!e,f.classList.toggle("op-progress--disabled",!e),m.setAttribute("aria-disabled",(!e).toString())},k=()=>this.activeOverlay?this.activeOverlay.duration:t.surface?.duration??t.duration,E=()=>this.activeOverlay?this.activeOverlay.value:t.surface?.currentTime??t.currentTime,O=()=>this.activeOverlay?this.activeOverlay.mode:"normal",S=()=>{const e=k(),i=E(),r=O();if((t.isLive||e===1/0)&&!this.activeOverlay)return void m.setAttribute("aria-hidden","true");if(m.setAttribute("aria-hidden","false"),Number.isFinite(e)&&e>0&&(f.max&&"0"!==f.max&&parseFloat(f.max||"-1")===e||(f.max=String(e),f.setAttribute("aria-valuemax",String(e)))),this.repaint=S,this.activeOverlay?_(this.activeOverlay.canSeek):_(!t.isLive&&t.surface?.duration!==1/0),f.classList.contains("op-progress--pressed"))return;const n=Number.isFinite(e)&&e>0?e:0,s=Number.isFinite(i)&&i>=0?i:0;f.value=String(s),f.setAttribute("aria-valuenow",String(s));const a=parseFloat(f.min),o=parseFloat(f.max);if(Number.isFinite(a)&&Number.isFinite(o)&&o>a){const e="countdown"===r?100*(o-s-a)/(o-a):100*(s-a)/(o-a);f.style.backgroundSize=`${e}% 100%`}y.value=n?"countdown"===r?(n-s)/n*100:s/n*100:0,this.activeOverlay&&Number.isFinite(this.activeOverlay.bufferedPct)&&(v.value=Math.max(0,Math.min(100,this.activeOverlay.bufferedPct)))},A=e=>{if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=k();if((t.isLive||i===1/0)&&!this.activeOverlay)return;if(!Number.isFinite(i)||i<=0)return;const s=m.getBoundingClientRect(),a=e-s.left,o=Math.max(0,Math.min(1,a/s.width))*i,l=E();o<l&&!r||o>l&&!n||Number.isFinite(o)&&(f.value=String(o),t.currentTime=o)};return this.listen(m,"click",e=>{const t=e,i=e.target;i&&i.closest('input[type="range"]')||A(t.clientX)},e),this.listen(m,"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(),A(r.clientX))},e),this.listen(f,"change",e=>{if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=e.target,s=parseFloat(i.value),a=E();s<a&&!r||s>a&&!n||(Number.isFinite(s)&&(t.currentTime=s),w(!1))},e),this.listen(f,"input",e=>{if(!f.classList.contains("op-progress--pressed")&&!b())return;if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=e.target,s=parseFloat(i.min),a=parseFloat(i.max),o=parseFloat(i.value),l=E();if(o<l&&!r||o>l&&!n)return;Number.isFinite(s)&&Number.isFinite(a)&&a>s&&(f.style.backgroundSize=100*(o-s)/(a-s)+"% 100%");const c=k(),u=Number.isFinite(c)&&c>0?c:0;y.value=u?o/u*100:0,t.currentTime=o},e),this.onPlayer("durationchange",S),this.onPlayer("timeupdate",S),this.onPlayer("seeked",()=>{const e=d(t.currentTime),i=isFinite(t.duration)?d(t.duration):void 0;o(i?`${c("seekTo",e)} of ${i}`:c("seekTo",e))}),this.onPlayer("waiting",()=>{f.classList.contains("loading")||f.classList.add("loading"),f.classList.contains("error")&&f.classList.remove("error")}),this.onPlayer("play",()=>{f.classList.contains("loading")&&f.classList.remove("loading"),f.classList.contains("error")&&f.classList.remove("error"),t.isLive||t.surface.duration===1/0||(m.removeAttribute("aria-valuenow"),m.removeAttribute("aria-valuetext"))}),this.onPlayer("playing",()=>{f.classList.contains("loading")&&f.classList.remove("loading"),f.classList.contains("error")&&f.classList.remove("error")}),this.onPlayer("ended",()=>{f.style.backgroundSize="0% 100%",f.max&&(f.max="0"),v.value=0,y.value=0}),this.listen(m,"pointermove",e=>{const i=e;if(b())return;if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const r=k();if((t.isLive||r===1/0)&&!this.activeOverlay)return;const n=i.pageX;let s=n-p(m).left;const a=g.offsetWidth/2,o=s/m.offsetWidth,l=o*r,c=this.resolvePlayerRoot(),u=c.offsetWidth-g.offsetWidth;s<=0||n-p(c).left<=a?s=0:n-p(c).left>=u?s=u-p(f).left-10:s-=a,o>=0&&o<=1?g.classList.add("op-controls__tooltip--visible"):g.classList.remove("op-controls__tooltip--visible"),g.style.left=`${s}px`,g.textContent=Number.isNaN(l)?"00:00":d(l)},e),this.listen(document,"pointermove",e=>{e.target.closest(".op-controls__progress")||g.classList.remove("op-controls__tooltip--visible")},e),S(),m}onOverlayChanged(){this.repaint?.()}}function be(e){const t=new me;return e&&(t.placement=e),t}class fe extends W{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=$(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()})),U(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=U(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{labels:n}=$(this.core),s=document.createElement("button");s.type="button",s.className="op-submenu__back",N(s,n.back),this.listen(s,"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(s,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 s=document.createElement("button");s.type="button",s.className="op-controls__menu-item",s.setAttribute("role","menuitem"),s.setAttribute("aria-disabled",n?"true":"false"),s.setAttribute("aria-checked",r?"true":"false");const a=document.createElement("span");a.className="op-controls__menu-item-label",a.textContent=t;const o=document.createElement("span");return o.className="op-menu__item-check "+(r?"checked":""),s.append(o,a),this.listen(s,"click",e=>{const t=e;i(),t.preventDefault(),t.stopPropagation()},e),s}}function ve(e){const t=new fe;return e&&(t.placement=e),t}class ye extends W{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="/",t.setAttribute("aria-hidden","true");const i=document.createElement("span");i.className="op-controls-time";const r=(new ie).create(e),n=(new ne).create(e);return i.appendChild(r),i.appendChild(t),i.appendChild(n),i}}function ge(e){const t=new ye;return e&&(t.placement=e),t}class we extends W{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=$(t).labels,r=i,n=i.mute,s=i.unmute,a=i.volume,o=i.volumeControl,l=i.volumeSlider,{announce:c,destroy:u}=I(this.resolvePlayerRoot());this.dispose.add(u);const d=(e,t)=>{const i=r[e]??e;return null!=t?i.replace("%s",t):i};let h=null;this.dispose.add(()=>{h&&clearTimeout(h)});const p=document.createElement("div");p.className="op-controls__volume",p.tabIndex=0,p.setAttribute("aria-valuemin","0"),p.setAttribute("aria-valuemax","100"),p.setAttribute("aria-valuenow",`${t.volume}`),N(p,o),p.setAttribute("aria-orientation","vertical"),p.setAttribute("role","slider");const m=document.createElement("input");m.className="op-controls__volume--input",m.tabIndex=-1,m.type="range",m.value=t.volume.toString(),m.min="0",m.max="1",m.step="0.1",N(m,l,{container:p});const b=document.createElement("progress");b.className="op-controls__volume--display",b.max=10,b.value=10*t.volume,p.appendChild(m),p.appendChild(b);const f=document.createElement("button");f.tabIndex=0,f.type="button",f.title=n,f.className="op-controls__mute",N(f,n),f.setAttribute("aria-pressed","false");let v=t.volume;const y=e=>e>=1?1:e<=0?0:e,g=e=>{const t=y(e);b.value=10*t;const i=Math.floor(100*t);p.setAttribute("aria-valuenow",`${i}`),p.setAttribute("aria-valuetext",`${a}: ${i}`)},w=e=>{const t=y(e);t<=.5&&t>0?(f.classList.remove("op-controls__mute--muted"),f.classList.add("op-controls__mute--half")):0===t?(f.classList.add("op-controls__mute--muted"),f.classList.remove("op-controls__mute--half")):(f.classList.remove("op-controls__mute--muted"),f.classList.remove("op-controls__mute--half"))};this.listen(m,"input",e=>{const i=Number(e.target.value),r=y(i);v=r,t.volume=r,t.muted=0===r;const n=ue(t);if(n&&n!==t.surface)try{n.volume=r,n.muted=0===r}catch{}g(r),w(r),h&&clearTimeout(h),h=setTimeout(()=>{c(d("volumePercent",String(Math.round(100*r)))),h=null},400)},e),this.listen(f,"click",e=>{const i=e,r=ue(t);let a;if(t.muted){const e=v>0?v:1;if(t.volume=e,t.muted=!1,a=Math.round(100*e),r&&r!==t.surface)try{r.volume=e,r.muted=!1,f.title=s,N(f,s)}catch{}}else if(t.volume>0&&(v=t.volume),t.volume=0,t.muted=!0,a=0,r&&r!==t.surface)try{r.volume=0,r.muted=!0,f.title=n,N(f,n)}catch{}h&&clearTimeout(h),h=null,c(d("volumePercent",String(a))),i.preventDefault(),i.stopPropagation()},e);let P=!1;const _=(e,i)=>{if(P)return;const r=ue(t);if(r&&r!==t.surface){P=!0;try{r.muted!==e&&(r.muted=e),e||r.volume===i||(r.volume=i)}catch{}finally{P=!1}}};this.onPlayer("loadedmetadata",()=>{const e=t.muted||0===t.volume,i=y(t.volume);i>0&&(v=i),m.value=(e?0:i).toString(),g(e?0:i),w(e?0:i),_(e,i)}),this.onPlayer("volumechange",()=>{if(P)return;const e=t.muted||0===t.volume,i=y(t.volume);i>0&&(v=i),m.value=(e?0:i).toString(),g(e?0:i),w(e?0:i),f.setAttribute("aria-pressed",e?"true":"false"),_(e,i)});const k=document.createElement("div");return k.className="op-controls__volume--container",k.appendChild(f),k.appendChild(p),k}}function Pe(e){if(b())return null;const t=new we;return e&&(t.placement=e),t}let _e=0;function ke(e,t){const i=e.querySelector(":scope > span.op-player__sr-only"),r=i??document.createElement("span");i||(_e+=1,r.className="op-player__sr-only",r.id=`op-player-sr-el-${_e}`,e.insertBefore(r,e.firstChild),e.setAttribute("aria-labelledby",r.id),e.removeAttribute("aria-label")),r.textContent=t}function Ee(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=$(t).labels,s=b()?n.tap:n.click,a=document.createElement("button");a.type="button",a.className="op-player__unmute",a.textContent=s,a.tabIndex=0;const o=()=>{try{l?.()}catch{}try{a.remove()}catch{}},l=t.events.on("volumechange",()=>{t.muted||o()});a.addEventListener("click",()=>{t.userInteracted||(t.userInteracted=!0,t.emit("player:interacted")),t.muted=!1,t.volume=r,t.play().catch(()=>{}),o()},e),i.insertBefore(a,i.firstChild),t.events.on("player:destroy",o)}catch{}}))}function Oe(t,i,r,n={}){const s=!0===n.alwaysVisible,a=$(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(a.width){h+=`width: ${"number"==typeof a.width?`${a.width}px`:a.width} !important;`}if(a.height){h+=`height: ${"number"==typeof a.height?`${a.height}px`:a.height} !important;`}h&&d.setAttribute("style",h),i.controls=!1,i.replaceWith(d),ke(d,a.labels.container);const p=document.createElement("div");p.className="op-media",p.tabIndex=0,p.setAttribute("role","group"),p.appendChild(o),ke(p,a.labels.media);const f=document.createElement("div");let v;f.className="op-media__main",l||(p.appendChild(f),v=function(t){const i=$(t).labels,r=i.play,n=i.pause,s=i.loading,a=document.createElement("button");a.className="op-player__play",a.tabIndex=0,a.type="button",a.setAttribute("aria-pressed","false"),a.setAttribute("aria-hidden","false"),N(a,r),a.setAttribute("aria-keyshortcuts","K Enter"),a.addEventListener("click",async e=>{await de(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=s,o.appendChild(l);let u=!1;const d=()=>{c&&(window.clearTimeout(c),c=void 0),u=!1,a.classList.remove("op-player__play--flash")},h=e=>{if(e){if(u)return;a.classList.remove("op-player__play--paused"),a.setAttribute("aria-hidden","false"),a.removeAttribute("inert"),N(a,r),a.inert=!1,a.tabIndex=0}else{u&&d();const e=document.activeElement;e&&(e===a||a.contains(e))&&e.blur?.(),a.classList.add("op-player__play--paused"),a.setAttribute("aria-hidden","true"),a.setAttribute("inert",""),N(a,n),a.inert=!0,a.tabIndex=-1}};return{button:a,loader:o,showButton:h,showLoader:e=>{o.style.display=e?"":"none",o.setAttribute("aria-hidden",e?"false":"true")},flashPause:e=>{d(),u=!0,a.classList.remove("op-player__play--paused"),a.classList.add("op-player__play--flash"),a.setAttribute("aria-hidden","false"),a.removeAttribute("inert"),a.inert=!1,a.tabIndex=-1,N(a,n),c=window.setTimeout(()=>{a.classList.remove("op-player__play--flash"),c=void 0,u=!1,h(!0)},e)}}}(t),p.appendChild(v.button),p.appendChild(v.loader));const y=function(t,i,r){let n=t.volume||1;const s=()=>{i.classList.contains("op-player__keyboard--inactive")&&i.classList.remove("op-player__keyboard--inactive")},a=()=>{i.classList.contains("op-player__keyboard--inactive")||i.classList.add("op-player__keyboard--inactive")};i.addEventListener("click",a,e),i.addEventListener("pointerdown",a,e),i.addEventListener("pointerleave",a,e),window.addEventListener("click",a,e),window.addEventListener("pointerdown",a,e),window.addEventListener("keydown",s,e);const o=async e=>{const i=e.key;s();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 a=$(t).step,o=a&&a>0?a:5;switch(i){case"k":case"K":case"Enter":case" ":case"Spacebar":await de(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);try{const e=ue(t);e&&e!==t.surface&&(e.volume=i,e.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);try{const e=ue(t);e&&e!==t.surface&&(e.volume=i,e.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":if(t.muted){const e=n>0?n:1;t.volume=e,t.muted=!1;try{const i=ue(t);i&&i!==t.surface&&(i.volume=e,i.muted=!1)}catch{}}else{t.volume>0&&(n=t.volume),t.volume=0,t.muted=!0;try{const e=ue(t);e&&e!==t.surface&&(e.volume=0,e.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()}};i.addEventListener("keydown",o,e);const l=t.events.on("waiting",()=>{r?.showLoader(!0),r?.showButton(!1)}),c=t.events.on("seeking",()=>{r?.showLoader(!0),r?.showButton(!1)}),u=t.events.on("seeked",()=>{r?.showLoader(!1),r?.showButton(t.media?.paused??!1)}),d=t.events.on("play",()=>{r?.showLoader(!1),r?.showButton(!1)}),h=t.events.on("pause",()=>{r?.showLoader(!1),r?.showButton(!0)}),p=t.events.on("playing",()=>{r?.showLoader(!1),r?.showButton(!1)}),m=t.events.on("ended",()=>{r?.showLoader(!1),r?.showButton(!0)});return()=>{i.removeEventListener("click",a),i.removeEventListener("pointerdown",a),i.removeEventListener("pointerleave",a),i.removeEventListener("keydown",o),window.removeEventListener("click",a),window.removeEventListener("pointerdown",a),window.removeEventListener("keydown",s),l(),c(),u(),d(),h(),p(),m()}}(t,d,v),g=document.createElement("div");if(g.className="op-controls",g.setAttribute("aria-hidden","false"),g.inert=!1,l){const e=L(g);d.appendChild(p),d.appendChild(g);const n=[];r.forEach(i=>{const r=i.create(t);r.dataset.controlId=i.id,e.place(i.placement,r),n.push(i)});const s={wrapper:d,mediaContainer:p,controlsRoot:g,placeholder:c,grid:e},a=t.events.on("player:destroy",()=>{try{n.forEach(e=>e.destroy?.())}catch{}try{d.replaceWith(i)}catch{}try{c.remove()}catch{}try{y(),o(),l(),a()}catch{}}),o=t.events.on("ui:addElement",e=>{if(!e?.el)return;const t=e.placement||{v:"bottom",h:"right"};s.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,s.grid?.place(i.placement,r),e.el=r,n.push(i)});return Ee(t,d),s}const w=b(),P=3e3,k=6500;let E,O="pointer",S=!1;const A=()=>g.contains(document.activeElement),T=()=>{d.classList.remove("op-controls--hidden"),p.classList.remove("op-media--controls-hidden"),E&&window.clearTimeout(E),g.setAttribute("aria-hidden","false"),g.inert=!1,t.events.emit("ui:controls:show")},j=e=>{s||S||t.surface.paused||t.surface.ended||(E&&window.clearTimeout(E),E=window.setTimeout(()=>(()=>{if(!t.surface.paused&&!t.surface.ended){if(A()){if("keyboard"!==O)return;d.focus()}d.classList.add("op-controls--hidden"),p.classList.add("op-media--controls-hidden"),g.setAttribute("aria-hidden","true"),g.inert=!0,t.events.emit("ui:controls:hide")}})(),e??P))},x=()=>{O="pointer",T(),j(P)},C=[],R=(e,t,i,r)=>{e.addEventListener(t,i,r),C.push(()=>e.removeEventListener(t,i,r))};R(g,"focusin",()=>{O="keyboard",T(),j(k)}),R(g,"focusout",()=>{window.setTimeout(()=>{A()||j("keyboard"===O?k:P)},0)});const M=()=>{const e=document.activeElement;return!!e&&(d.contains(e)&&!g.contains(e))};if(R(d,"focusin",()=>{M()&&(T(),E&&window.clearTimeout(E))},e),R(d,"focusout",()=>{window.setTimeout(()=>{d.contains(document.activeElement)||A()||j()},0)},e),R(d,"keydown",()=>{O="keyboard",M()?(T(),E&&window.clearTimeout(E)):A()&&(T(),j(k))},e),w){R(d,"pointerdown",()=>{O="pointer",T(),j(P)},e)}else{const t=()=>j(P);R(d,"pointermove",x,e),R(d,"pointerenter",x,e),R(g,"pointerenter",x,e),R(g,"pointermove",x,e),R(g,"pointerleave",t,e)}const F=L(g,f);d.appendChild(p),d.appendChild(g);const I=[];r.forEach(e=>{const i=e.create(t);i.dataset.controlId=e.id,F.place(e.placement,i),I.push(e)});const B={wrapper:d,mediaContainer:p,controlsRoot:g,placeholder:c,grid:F};Ee(t,d);R(d,"click",async e=>{if(_(t).active?.fullscreenVideoEl)return;const i=e.target;if(i&&g.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 D=t.events.on("playing",()=>j(P)),V=t.events.on("pause",()=>T()),q=t.events.on("ended",()=>T()),H=t.events.on("ui:menu:open",()=>{S=!0,E&&window.clearTimeout(E)}),z=t.events.on("ui:menu:close",()=>{S=!1,j()}),U=t.events.on("player:destroy",()=>{try{I.forEach(e=>e.destroy?.())}catch{}try{d.replaceWith(i)}catch{}try{c.remove()}catch{}try{C.forEach(e=>e()),y(),D?.(),V?.(),q?.(),H?.(),z?.(),W?.(),X?.(),U()}catch{}}),W=t.events.on("ui:addElement",e=>{if(!e?.el)return;const t=e.placement||{v:"bottom",h:"right"};B.grid?.place(t,e.el)}),X=t.events.on("ui:addControl",e=>{const i=e?.control;if(!i)return;const r=i.create(t);r.dataset.controlId=i.id,B.grid?.place(i.placement,r),e.el=r,I.push(i)});return B}function Se(e){return{play:pe,volume:Pe,captions:te,fullscreen:ce,currentTime:re,duration:se,time:ge,progress:be,settings:ve}[e]}function Ae(e){const t=function(e){const t=T(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=Se(e);t&&x(e,t)}}function Te(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 je{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=T(e),i=!0===e?.alwaysVisible;Ae(t),this.createdPlugins=this.createDetectedPlugins();for(const e of this.createdPlugins)Te(e.entry,je);this.core=new y(this.media,{...this.config,plugins:this.createdPlugins.map(e=>e.plugin)});const r=C(t);Oe(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,s=this.config?.[t],n?s?"object"!=typeof n||"object"!=typeof s?s:{...n,...s}:{...n}:s??{});var n,s;const a=i.factory(r);return{entry:{...i,name:t},plugin:a,cfg:r}}).filter(Boolean)}}const Le=je;try{Object.assign(Le,O)}catch{}return je});
2
2
  //# sourceMappingURL=openplayer.js.map