@openplayerjs/player 3.0.0-beta.1 → 3.0.0-beta.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(){Object.defineProperty(this,"media",{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,"mediaListeners",{enumerable:!0,configurable:!0,writable:!0,value:[]})}bindMediaEvents(t,i){this.media=t,this.events=i;this.addMediaListener(t,"loadedmetadata",()=>i.emit("loadedmetadata"),e),this.addMediaListener(t,"durationchange",()=>i.emit("durationchange"),e),this.addMediaListener(t,"timeupdate",()=>i.emit("timeupdate"),e),this.addMediaListener(t,"waiting",()=>i.emit("waiting"),e),this.addMediaListener(t,"seeking",()=>i.emit("seeking"),e),this.addMediaListener(t,"seeked",()=>i.emit("seeked"),e),this.addMediaListener(t,"ended",()=>i.emit("ended"),e),this.addMediaListener(t,"error",()=>i.emit("error",t.error),e),this.addMediaListener(t,"playing",()=>i.emit("playing"),e),this.addMediaListener(t,"pause",()=>i.emit("pause"),e),this.addMediaListener(t,"play",()=>i.emit("play"),e),this.addMediaListener(t,"volumechange",()=>i.emit("volumechange"),e),this.addMediaListener(t,"ratechange",()=>i.emit("ratechange"),e)}unbindMediaEvents(){if(this.media){for(const e of this.mediaListeners)this.media.removeEventListener(e.type,e.handler,e.options);this.mediaListeners=[]}}addMediaListener(e,t,i,n){e.addEventListener(t,i,n),this.mediaListeners.push({type:t,handler:i,options:n})}canHandlePlayback(e){const t=e.core.leases.owner("playback");return!t||t===this.name}bindCommands(e){const{media:t,events:i}=e;this.commands.push(i.on("cmd:seek",i=>{if(this.canHandlePlayback(e))try{t.currentTime=i}catch{}})),this.commands.push(i.on("cmd:setVolume",e=>{t.volume=e})),this.commands.push(i.on("cmd:setMuted",e=>{t.muted=e})),this.commands.push(i.on("cmd:setRate",i=>{this.canHandlePlayback(e)&&(t.playbackRate=i)})),this.bindPlayPauseCommands(e)}unbindCommands(){for(const e of this.commands)e();this.commands=[]}bindPlayPauseCommands(e){const{media:t,events:i}=e;this.commands.push(i.on("cmd:play",()=>{this.canHandlePlayback(e)&&this.playImpl(t)})),this.commands.push(i.on("cmd:pause",()=>{this.canHandlePlayback(e)&&this.pauseImpl(t)}))}playImpl(e){e.play().catch(()=>{})}pauseImpl(e){e.pause()}}class i extends t{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){e.activeSource?.src&&e.media.src!==e.activeSource.src&&(e.media.src=e.activeSource.src);try{e.media.load()}catch{}this.bindMediaEvents(e.media,e.events),this.bindCommands(e),this.commands.push(e.events.on("cmd:startLoad",()=>{const t=e.core.state.current;if(!["ready","playing","paused","waiting","seeking","ended"].includes(t)&&"none"===e.media.preload){e.media.preload="metadata";try{e.media.load()}catch{}}}))}detach(){this.unbindCommands(),this.unbindMediaEvents()}}const n={startTime:0,duration:0};class s{constructor(){Object.defineProperty(this,"disposers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"disposed",{enumerable:!0,configurable:!0,writable:!0,value:!1})}get isDisposed(){return this.disposed}add(e){const t=e??(()=>{});if(this.disposed){try{t()}catch{}return()=>{}}return this.disposers.push(t),t}addEventListener(e,t,i,n){return e.addEventListener(t,i,n),this.add(()=>e.removeEventListener(t,i,n))}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 r{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 a{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 o{constructor(){Object.defineProperty(this,"plugins",{enumerable:!0,configurable:!0,writable:!0,value:[]})}register(e){this.plugins.push(e)}all(){return this.plugins}}class l{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 c(e,t){const i=Math.floor(e%1*(t||0));let n=Math.floor(e),s=Math.floor(n/60);const r=Math.floor(s/60),a=e=>{const t=e.toString();return e<10?e<=0?"00":`0${t}`:t};return s%=60,n%=60,`${r>0?`${a(r)}:`:""}${a(s)}:${a(n)}${i?`:${a(i)}`:""}`}const u=e=>{const t=Number.isFinite(e)?Math.max(0,e):0,i=Math.floor(t),n=Math.floor(i/3600),s=Math.floor(i%3600/60);return`PT${n?`${n}H`:""}${s?`${s}M`:""}${i%60}S`};function d(e){const t=e.getBoundingClientRect();return{left:t.left+(window.pageXOffset||document.documentElement.scrollLeft),top:t.top+(window.pageYOffset||document.documentElement.scrollTop)}}function h(e){return e instanceof HTMLAudioElement}function m(){return/ipad|iphone|ipod/i.test(window.navigator.userAgent)&&!window.MSStream||/android/i.test(window.navigator.userAgent)}function p(e,t){const i=new URL(t).pathname.split("."),n=i.length>1?i.pop().toLowerCase():"";if(!n)return h(e)?"audio/mp3":"video/mp4";switch(n){case"m3u8":case"m3u":return"application/x-mpegURL";case"mpd":return"application/dash+xml";case"mp4":return h(e)?"audio/mp4":"video/mp4";case"mp3":return"audio/mp3";case"webm":return h(e)?"audio/webm":"video/webm";case"ogg":return h(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 h(e)?"audio/mp3":"video/mp4"}}const b=e=>Math.min(1,Math.max(0,e));class v{constructor(e,t={}){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 r}),Object.defineProperty(this,"leases",{enumerable:!0,configurable:!0,writable:!0,value:new a}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:new l("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,"interactionUnsubs",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"plugins",{enumerable:!0,configurable:!0,writable:!0,value:new o}),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.registerPlugin(new i),this.config={...n,...t},this.media.currentTime=this.config.startTime||this.media.currentTime,this._currentTime=this.config.startTime||this.media.currentTime,this._duration=this.config.duration||this.media.duration;const s=b(this.config.startVolume??this.media.volume);this.media.volume=s,this._volume=s,void 0!==this.config.startVolume?(this.media.muted=s<=0,this._muted=s<=0):this._muted=this.media.muted,this._volume=s,this._muted=s<=0,this.media.playbackRate=this.config.startPlaybackRate||this.media.playbackRate,this._playbackRate=this.config.startPlaybackRate||this.media.playbackRate,(this.config.plugins||[]).forEach(e=>this.registerPlugin(e)),this.bindStateTransitions(),this.bindMediaSync(),this.bindLeaseSync(),this.bindFirstInteraction(),this.maybeAutoLoad()}on(e,t){return this.events.on(e,t)}emit(e,t){this.events.emit(e,t),this.plugins.all().filter(e=>!e.capabilities?.includes("media-engine")).forEach(i=>{i.onEvent?.(e,t)})}registerPlugin(e){this.plugins.register(e);const t=new s;this.pluginDisposables.set(e,t),e.setup?.({core:this,media:this.media,events:this.events,state:this.state,leases:this.leases,dispose:t,add:e=>t.add(e??void 0),on:(e,i)=>t.add(this.events.on(e,i)),listen:(e,i,n,s)=>t.addEventListener(e,i,n,s)})}set src(e){this._src=e,e&&(this.detectedSources=[{src:e,type:p(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=b(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={media:this.media,events:this.events,config:this.config,activeSource:i,core:this},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,n=()=>{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{n()}})(),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],n=e[t];for(const e of Object.keys(n))void 0===i[e]&&(i[e]=n[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},n={capture:!0},s=s=>{e.addEventListener(s,t,i),this.interactionUnsubs.push(()=>e.removeEventListener(s,t,n))};s("pointerdown"),s("mousedown"),s("touchstart"),s("keydown")}resolveMediaEngine(e){if(0===e.length)throw new Error("Player cannot resolve media with an empty source");const t=[...this.plugins.all().filter(e=>!(!e||!e.capabilities?.includes("media-engine")||"function"!=typeof e.canPlay))].sort((e,t)=>(t.priority??0)-(e.priority??0)||e.name.localeCompare(t.name));for(const i of e)for(const e of t)if(e.canPlay?.(i))return{engine:e,source:i};throw new Error("No compatible media engine found")}bindStateTransitions(){this.events.on("loadstart",()=>this.state.transition("loading")),this.events.on("loadedmetadata",()=>{this.state.transition("ready"),this.readyResolve&&(this.readyResolve(),this.readyResolve=void 0,this.readyReject=void 0)}),this.events.on("playing",()=>this.state.transition("playing")),this.events.on("pause",()=>this.state.transition("paused")),this.events.on("waiting",()=>this.state.transition("waiting")),this.events.on("seeking",()=>this.state.transition("seeking")),this.events.on("seeked",()=>this.state.transition("ready")),this.events.on("ended",()=>this.state.transition("ended")),this.events.on("error",e=>{this.state.transition("error"),this.readyReject&&(this.readyReject(e),this.readyResolve=void 0,this.readyReject=void 0)})}bindMediaSync(){const e=()=>{try{this._currentTime=this.media.currentTime||0}catch{}try{const e=this.media.duration;this._duration=e}catch{}try{this._muted=Boolean(this.media.muted);const e=this.media.volume;Number.isFinite(e)&&(this._volume=e)}catch{}try{const e=this.media.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())}bindLeaseSync(){this.leases.onChange(e=>{"playback"===e&&queueMicrotask(()=>{this.emit("cmd:setVolume",this._volume),this.emit("cmd:setMuted",this._muted),this.emit("cmd:setRate",this._playbackRate),this._currentTime&&this.emit("cmd:seek",this._currentTime)})})}createReadyPromise(){this.readyPromise||(this.readyPromise=new Promise((e,t)=>{this.readyResolve=e,this.readyReject=t}))}readMediaSources(e){const t=[];e.src&&t.push({src:e.src,type:p(e,e.src)});try{e.querySelectorAll("source").forEach(i=>{t.push({src:i.src,type:i.type||p(e,i.src)})})}catch{}return t}maybeAutoLoad(){if("idle"!==this.state.current)return;if(!this.plugins.all().some(e=>e.capabilities?.includes("media-engine")))return;const e=this.readMediaSources(this.media);if(0!==e.length){this.detectedSources=e;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()}catch{}}}}class f{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 y="__op::overlay::manager";class g{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 f(new r)}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 n={...i,...t,id:i.id};this.overlays.set(e,n),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 w(e){if(e[y])return e[y];const t=new g;e[y]=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[y]}catch{}})}}catch{}return t}var P=Object.freeze({__proto__:null,BaseMediaEngine:t,Core:v,DVR_THRESHOLD:120,DefaultMediaEngine:i,DisposableStore:s,EVENT_OPTIONS:e,EventBus:r,Lease:a,PluginRegistry:o,StateManager:l,formatTime:c,generateISODateTime:u,getOverlayManager:w,isAudio:h,isMobile:m,offset:d});const _=new Map;function E(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 n=document.createElement("div");n.className="op-controls__middle";const s=document.createElement("div");return s.className="op-controls__right",t.append(i,n,s),{section:t,left:i,center:n,right:s}}function O(e,t){const i=E("top"),n=E("center"),s=E("bottom");return e.append(i.section,n.section,s.section),{place(e,r){const a=e.region?.trim();if("main"===a&&t)return void t.appendChild(r);const o="top"===e.v?i:"middle"===e.v?n:s;("left"===e.h?o.left:"center"===e.h?o.center:o.right).appendChild(r)}}}function k(e,t){_.set(e,t)}function L(e){const t=[];return Object.entries(e||{}).forEach(([e,i])=>{if(!Array.isArray(i))return;const n=function(e){if("main"===e)return{v:"middle",h:"center",region:"main"};const t=e.split("-");let i="middle",n="center";for(const e of t)"top"!==e&&"bottom"!==e||(i=e),"left"!==e&&"right"!==e||(n=e),"middle"!==e&&"center"!==e||(n="center");return{v:i,h:n}}(e);i.forEach(e=>{const i=function(e){const t=_.get(e);return t?.()||null}(e);i&&(i.placement=n,t.push(i))})}),t}let C=0;function S(e,t,i){const n=e.parentElement??i?.container;if(!n)return void e.setAttribute("aria-label",t);const s=e.getAttribute("aria-labelledby");let r=null;if(s){const e=document.getElementById(s);e&&e instanceof HTMLSpanElement&&(r=e)}r||(r=document.createElement("span"),r.className="op-player__sr-only",r.id=(C+=1,`op-player-sr-${C}`),e.parentElement===n&&n.contains(e)?n.insertBefore(r,e):n.appendChild(r),e.setAttribute("aria-labelledby",r.id)),r.textContent=t,e.removeAttribute("aria-label")}function A(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"),n=i??document.createElement("span");i||(n.className="op-player__sr-only",e.appendChild(n)),n.textContent=t}(e,t),void e.removeAttribute("aria-label");S(e,t,i)}const x=0,j=!0,M=!0,R=Object.freeze({auto:"Auto",captions:"CC/Subtitles",click:"Click to unmute",container:"Media player",fullscreen:"Fullscreen",levels:"Quality Levels",live:"Live",loading:"Loading...",media:"Media",mute:"Mute",off:"Off",pause:"Pause",play:"Play",progressRail:"Time Rail",progressSlider:"Time Slider",settings:"Player Settings",speed:"Speed",speedNormal:"Normal",tap:"Tap to unmute",toggleCaptions:"Toggle Captions",unmute:"Unmute",volume:"Volume",volumeControl:"Volume Control",volumeSlider:"Volume Slider"});function T(e){const t=e.config?e.config:e,i=t.allowSkip??j,n=t.allowRewind??M,s=t.step??x,r=t.width,a=t.height,o={...R,...t.labels||{}};if(e.config)try{t.labels=o,t.allowSkip=i,t.allowRewind=n,t.step=s}catch{}return{allowSkip:i,allowRewind:n,step:s,width:r,height:a,labels:o}}function N(e){try{if(!!0)return e.media;const t=w(e)?.active,i=t?.fullscreenVideoEl;return i&&"function"==typeof i.play?i:e.media}catch{return e.media}}async function F(e){const t=N(e);t.paused||t.ended?await e.play():e.pause()}const I=Symbol.for("openplayerjs.settings.registry");class D{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 q(e){const t=e;if(t[I])return t[I];const i=new D;return t[I]=i,i}class ${constructor(){Object.defineProperty(this,"core",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"overlayMgr",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"activeOverlay",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"dispose",{enumerable:!0,configurable:!0,writable:!0,value:new s})}onOverlayChanged(e){}create(e){return this.core=e,this.overlayMgr=w(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,n){return this.dispose.addEventListener(e,t,i,n)}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 B(e){return"captions"===e||"subtitles"===e}function H(e){const t=e.textTracks??null;if(!t)return[];const i=[];for(let e=0;e<t.length;e++){const n=t[e];n&&(B(String(n.kind))&&i.push({index:e,track:n}))}return i}function z(e){const t=H(e);for(const e of t)if("showing"===e.track.mode)return e.index;return"off"}function V(e){for(const t of H(e))t.track.mode="disabled"}function U(e,t){for(const i of H(e))i.track.mode=i.index===t?"showing":"disabled"}class W extends ${constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"captions"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"right"}}),Object.defineProperty(this,"button",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"lastSelectedIndex",{enumerable:!0,configurable:!0,writable:!0,value:null})}build(){const t=this.core,i=T(t).labels,n=i.captions,s=i.toggleCaptions;this.button=document.createElement("button"),this.button.type="button",this.button.className="op-controls__captions",A(this.button,s),this.button.setAttribute("aria-pressed","false");const r=()=>{const e=N(t),i=H(e);this.button.style.display=i.length?"":"none";const n=z(e),s="off"!==n;"number"==typeof n&&(this.lastSelectedIndex=n),this.button.classList.toggle("op-controls__captions--on",s),this.button.setAttribute("aria-pressed",s?"true":"false")};this.listen(this.button,"click",e=>{const i=e,n=N(t);if("off"===z(n)){const e=H(n),t=this.lastSelectedIndex??e[0]?.index;"number"==typeof t&&U(n,t)}else V(n);r(),i.preventDefault(),i.stopPropagation()},e);const a={id:"captions",label:n,getSubmenu:()=>{const e=N(t),s=H(e);if(!s.length)return null;const a=z(e);return{id:"captions",label:n,items:[{id:"off",label:i.off,checked:"off"===a,onSelect:()=>{V(e),r()}},...s.map(t=>{return{id:String(t.index),label:(i=t.track,n=t.index,i.label&&i.label.trim()||i.language&&i.language.trim().toUpperCase()||`Track ${n+1}`),checked:t.index===a,onSelect:()=>{U(e,t.index),this.lastSelectedIndex=t.index,r()}};var i,n})]}}};return q(t).register(a),this.dispose.add(this.overlayMgr.bus.on("overlay:changed",r)),this.onPlayer("loadedmetadata",r),r(),this.button}}function X(e){const t=new W;return e&&(t.placement=e),t}class J extends ${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=c(this.activeOverlay.value));if(e.isLive)return void t.setAttribute("aria-hidden","true");const i=e.currentTime;t.setAttribute("aria-hidden","false");const n=Number.isFinite(i)?Math.max(0,i):0,s=c(n);t.innerText=s,t.setAttribute("datetime",u(n))};return this.onPlayer("timeupdate",()=>i()),this.onPlayer("seeked",()=>i()),this.onPlayer("durationchange",()=>i()),this.overlayMgr.bus.on("overlay:changed",()=>i()),i(),t}}function K(e){const t=new J;return e&&(t.placement=e),t}class Q extends ${constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"duration"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"top",h:"right"}})}build(){const e=this.core,t=document.createElement("time");t.className="op-controls__duration",t.setAttribute("aria-hidden","false"),t.setAttribute("datetime","PT0M0S");const i=()=>{if(this.activeOverlay)return t.setAttribute("aria-hidden","false"),void(t.innerText=c(this.activeOverlay.duration));const i=e.duration;if(e.isLive||i===1/0)return t.removeAttribute("datetime"),void(t.textContent=T(e).labels.live);t.setAttribute("aria-hidden","false");const n=Number.isFinite(i)?Math.max(0,i):e.config?.duration||0,s=c(n);t.textContent=s,t.setAttribute("datetime",u(n))};return this.onPlayer("durationchange",i),this.onPlayer("timeupdate",i),this.overlayMgr.bus.on("overlay:changed",i),i(),t}}function Y(e){const t=new Q;return e&&(t.placement=e),t}function G(){const e=document;return document.fullscreenElement||e.webkitFullscreenElement||e.mozFullScreenElement||e.msFullscreenElement||null}function Z(){const e=document;return document.exitFullscreen?document.exitFullscreen():e.mozCancelFullScreen?e.mozCancelFullScreen():e.webkitCancelFullScreen?e.webkitCancelFullScreen():e.msExitFullscreen?e.msExitFullscreen():void 0}class ee extends ${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=T(this.core).labels,i=document.createElement("button");i.tabIndex=0,i.type="button",i.className="op-controls__fullscreen",A(i,t.fullscreen),i.setAttribute("aria-pressed","false");const n=(e,t)=>{const i=this.resolveFullscreenContainer(),n=this.resolveFullscreenVideoEl();e?(i.style.width="100%",n&&(n.style.width="100%")):(i.style.removeProperty("width"),n&&n.style.removeProperty("width")),t?(i.style.height="100%",n&&(n.style.height="100%")):(i.style.removeProperty("height"),n&&n.style.removeProperty("height"))},s=()=>{const e=G(),t=this.resolveFullscreenContainer(),s=!!e&&(e===t||e.contains?.(t));var r;(r=s)?i.classList.add("op-controls__fullscreen--out"):i.classList.remove("op-controls__fullscreen--out"),i.setAttribute("aria-pressed",r?"true":"false"),s?document.body.classList.add("op-fullscreen__on"):document.body.classList.remove("op-fullscreen__on"),n(s?this.screenW:void 0,s?this.screenH:void 0),this.isFullscreen=s};return["fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange"].forEach(t=>{this.listen(document,t,s,e)}),this.listen(document,"keydown",e=>{"Escape"===e.key&&this.isFullscreen&&Z()},e),this.listen(i,"click",async e=>{const t=e;if(this.screenW=window.screen.width,this.screenH=window.screen.height,G())return void Z();!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),s(),i}onOverlayChanged(){if(G()){G()&&document.dispatchEvent(new Event("fullscreenchange"))}}}function te(e){const t=new ee;return e&&(t.placement=e),t}class ie extends ${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(t).labels,n=i.play,s=i.pause,r=document.createElement("button");r.tabIndex=0,r.type="button",r.className="op-controls__playpause",A(r,n),r.setAttribute("aria-pressed","false"),this.listen(r,"click",async e=>{const i=e;await F(t),i.preventDefault(),i.stopPropagation()},e);const a=e=>{r.classList.toggle("op-controls__playpause--pause",e),r.setAttribute("aria-pressed",e?"true":"false"),A(r,e?s:n)};return this.onPlayer("play",()=>a(!0)),this.onPlayer("pause",()=>a(!1)),this.onPlayer("playing",()=>a(!0)),this.onPlayer("pause",()=>a(!1)),this.onPlayer("ended",()=>a(!1)),r}}function ne(e){const t=new ie;return e&&(t.placement=e),t}class se extends ${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(t),{allowRewind:n,allowSkip:s,labels:r}=i,a=r.progressSlider,o=r.progressRail,l=document.createElement("div");l.className="op-controls__progress",l.role="group",A(l,a);const u=document.createElement("input");u.type="range",u.role="slider",u.className="op-controls__progress--seek",u.tabIndex=0,u.min="0",u.step="0.1",u.value="0",A(u,o,{container:l}),u.setAttribute("aria-valuemin","0"),u.setAttribute("aria-valuenow","0");const h=document.createElement("progress");h.className="op-controls__progress--buffer",h.max=100,h.value=0;const p=document.createElement("progress");let b;p.className="op-controls__progress--played",p.max=100,p.value=0,l.appendChild(u),l.appendChild(p),l.appendChild(h),m()||(b=document.createElement("span"),b.className="op-controls__tooltip",b.tabIndex=-1,b.textContent="00:00",l.appendChild(b));const v=e=>{e?u.classList.add("op-progress--pressed"):u.classList.remove("op-progress--pressed")};this.listen(u,"pointerdown",()=>v(!0)),this.listen(u,"pointerup",()=>v(!1)),this.listen(u,"pointercancel",()=>v(!1)),this.listen(u,"mouseleave",()=>v(!1)),this.listen(u,"touchstart",()=>v(!0),e),this.listen(u,"touchend",()=>v(!1),e),this.listen(u,"mousedown",()=>v(!0),e),this.listen(u,"mouseup",()=>v(!1),e);const f=()=>v(!1);this.listen(document,"pointerup",f,e),this.listen(document,"pointercancel",f,e),this.listen(document,"mouseup",f,e),this.listen(document,"touchend",f,e);const y=e=>{u.disabled=!e,u.classList.toggle("op-progress--disabled",!e),l.setAttribute("aria-disabled",(!e).toString())},g=()=>this.activeOverlay?this.activeOverlay.duration:t.media?.duration??t.duration,w=()=>this.activeOverlay?this.activeOverlay.value:t.media?.currentTime??t.currentTime,P=()=>this.activeOverlay?this.activeOverlay.mode:"normal",_=()=>{const e=g(),i=w(),n=P();if((t.isLive||e===1/0)&&!this.activeOverlay)return void l.setAttribute("aria-hidden","true");if(l.setAttribute("aria-hidden","false"),Number.isFinite(e)&&e>0&&(u.max&&"0"!==u.max&&parseFloat(u.max||"-1")===e||(u.max=String(e),u.setAttribute("aria-valuemax",String(e)))),this.repaint=_,this.activeOverlay?y(this.activeOverlay.canSeek):y(!t.isLive&&t.media?.duration!==1/0),u.classList.contains("op-progress--pressed"))return;const s=Number.isFinite(e)&&e>0?e:0,r=Number.isFinite(i)&&i>=0?i:0;u.value=String(r),u.setAttribute("aria-valuenow",String(r));const a=parseFloat(u.min),o=parseFloat(u.max);if(Number.isFinite(a)&&Number.isFinite(o)&&o>a){const e="countdown"===n?100*(o-r-a)/(o-a):100*(r-a)/(o-a);u.style.backgroundSize=`${e}% 100%`}p.value=s?"countdown"===n?(s-r)/s*100:r/s*100:0,this.activeOverlay&&Number.isFinite(this.activeOverlay.bufferedPct)&&(h.value=Math.max(0,Math.min(100,this.activeOverlay.bufferedPct)))},E=e=>{if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=g();if((t.isLive||i===1/0)&&!this.activeOverlay)return;if(!Number.isFinite(i)||i<=0)return;const r=l.getBoundingClientRect(),a=e-r.left,o=Math.max(0,Math.min(1,a/r.width))*i,c=w();o<c&&!n||o>c&&!s||Number.isFinite(o)&&(u.value=String(o),t.currentTime=o)};return this.listen(l,"click",e=>{const t=e,i=e.target;i&&i.closest('input[type="range"]')||E(t.clientX)},e),this.listen(l,"touchstart",e=>{const t=e,i=e.target;if(i&&i.closest('input[type="range"]'))return;const n=t.touches&&t.touches[0];n&&(t.preventDefault(),E(n.clientX))},e),this.listen(u,"change",e=>{if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=e.target,r=parseFloat(i.value),a=w();r<a&&!n||r>a&&!s||(Number.isFinite(r)&&(t.currentTime=r),v(!1))},e),this.listen(u,"input",e=>{if(!u.classList.contains("op-progress--pressed")&&!m())return;if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=e.target,r=parseFloat(i.min),a=parseFloat(i.max),o=parseFloat(i.value),l=w();if(o<l&&!n||o>l&&!s)return;Number.isFinite(r)&&Number.isFinite(a)&&a>r&&(u.style.backgroundSize=100*(o-r)/(a-r)+"% 100%");const c=g(),d=Number.isFinite(c)&&c>0?c:0;p.value=d?o/d*100:0,t.currentTime=o},e),this.onPlayer("durationchange",_),this.onPlayer("timeupdate",_),this.onPlayer("waiting",()=>{u.classList.contains("loading")||u.classList.add("loading"),u.classList.contains("error")&&u.classList.remove("error")}),this.onPlayer("play",()=>{u.classList.contains("loading")&&u.classList.remove("loading"),u.classList.contains("error")&&u.classList.remove("error"),t.isLive||t.media.duration===1/0||(l.removeAttribute("aria-valuenow"),l.removeAttribute("aria-valuetext"))}),this.onPlayer("playing",()=>{u.classList.contains("loading")&&u.classList.remove("loading"),u.classList.contains("error")&&u.classList.remove("error")}),this.onPlayer("ended",()=>{u.style.backgroundSize="0% 100%",u.max&&(u.max="0"),h.value=0,p.value=0}),this.listen(l,"pointermove",e=>{const i=e;if(m())return;if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const n=g();if((t.isLive||n===1/0)&&!this.activeOverlay)return;const s=i.pageX;let r=s-d(l).left;const a=b.offsetWidth/2,o=r/l.offsetWidth,h=o*n,p=this.resolvePlayerRoot(),v=p.offsetWidth-b.offsetWidth;r<=0||s-d(p).left<=a?r=0:s-d(p).left>=v?r=v-d(u).left-10:r-=a,o>=0&&o<=1?b.classList.add("op-controls__tooltip--visible"):b.classList.remove("op-controls__tooltip--visible"),b.style.left=`${r}px`,b.textContent=Number.isNaN(h)?"00:00":c(h)},e),this.listen(document,"pointermove",e=>{e.target.closest(".op-controls__progress")||b.classList.remove("op-controls__tooltip--visible")},e),_(),l}onOverlayChanged(){this.repaint?.()}}function re(e){const t=new se;return e&&(t.placement=e),t}class ae extends ${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=T(this.core).labels;return 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"),A(this.button,t.settings),this.panel=document.createElement("div"),this.panel.className="op-menu",this.panel.setAttribute("role","menu"),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.dispose.add(this.overlayMgr.bus.on("overlay:changed",()=>{this.activeSubmenuId=null,this.render()})),q(this.core).register({id:"speed",label:t.speed,getSubmenu:e=>{const i=this.overlayMgr.active;if("ads"===i?.id)return null;const n=e.playbackRate||1;return{id:"speed",label:t.speed,items:[.5,.75,1,1.25,1.5,2].map(i=>({id:String(i),label:1===i?t.speedNormal:`${i}x`,checked:Math.abs(n-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()}close(){this.isOpen=!1,this.activeSubmenuId=null,this.button.setAttribute("aria-expanded","false"),this.panel.style.display="none"}render(){const t=q(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 n=document.createElement("div");n.className="op-menu__header";const s=document.createElement("button");s.type="button",s.className="op-submenu__back",A(s,"Back"),this.listen(s,"click",e=>{const t=e;this.activeSubmenuId=null,this.render(),t.preventDefault(),t.stopPropagation()},e);const r=document.createElement("div");r.className="op-controls__settings-title",r.textContent=i.label,n.append(s,r),this.view.appendChild(n);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,n=!1,s=!1){const r=document.createElement("button");r.type="button",r.className="op-controls__menu-item",r.setAttribute("role","menuitem"),r.setAttribute("aria-disabled",s?"true":"false"),r.setAttribute("aria-checked",n?"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 "+(n?"checked":""),r.append(o,a),this.listen(r,"click",e=>{const t=e;i(),t.preventDefault(),t.stopPropagation()},e),r}}function oe(e){const t=new ae;return e&&(t.placement=e),t}class le extends ${constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"time"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"left"}})}build(){const e=this.core,t=document.createElement("span");t.className="op-controls__time-delimiter",t.textContent="/";const i=document.createElement("span");i.className="op-controls-time";const n=(new J).create(e),s=(new Q).create(e);return i.appendChild(n),i.appendChild(t),i.appendChild(s),i}}function ce(e){const t=new le;return e&&(t.placement=e),t}class ue extends ${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(t).labels,n=i.mute,s=i.unmute,r=i.volume,a=i.volumeControl,o=i.volumeSlider,l=document.createElement("div");l.className="op-controls__volume",l.tabIndex=0,l.setAttribute("aria-valuemin","0"),l.setAttribute("aria-valuemax","100"),l.setAttribute("aria-valuenow",`${t.volume}`),A(l,a),l.setAttribute("aria-orientation","vertical"),l.setAttribute("role","slider");const c=document.createElement("input");c.className="op-controls__volume--input",c.tabIndex=-1,c.type="range",c.value=t.volume.toString(),c.min="0",c.max="1",c.step="0.1",A(c,o,{container:l});const u=document.createElement("progress");u.className="op-controls__volume--display",u.max=10,u.value=10*t.volume,l.appendChild(c),l.appendChild(u);let d=t.volume;const h=e=>e>=1?1:e<=0?0:e,m=e=>{const t=h(e);u.value=10*t;const i=Math.floor(100*t);l.setAttribute("aria-valuenow",`${i}`),l.setAttribute("aria-valuetext",`${r}: ${i}`)},p=e=>{const t=h(e);t<=.5&&t>0?(b.classList.remove("op-controls__mute--muted"),b.classList.add("op-controls__mute--half")):0===t?(b.classList.add("op-controls__mute--muted"),b.classList.remove("op-controls__mute--half")):(b.classList.remove("op-controls__mute--muted"),b.classList.remove("op-controls__mute--half"))};this.listen(c,"input",e=>{const i=Number(e.target.value),n=h(i);d=n,t.volume=n,t.muted=0===n;const s=N(t);if(s&&s!==t.media)try{s.volume=n,s.muted=0===n}catch{}m(n),p(n)},e);const b=document.createElement("button");b.tabIndex=0,b.type="button",b.title=n,b.className="op-controls__mute",A(b,n),b.setAttribute("aria-pressed","false"),this.listen(b,"click",e=>{const i=e,r=N(t);if(t.muted){const e=d>0?d:1;if(t.volume=e,t.muted=!1,r&&r!==t.media)try{r.volume=e,r.muted=!1,b.title=s,A(b,s)}catch{}}else if(t.volume>0&&(d=t.volume),t.volume=0,t.muted=!0,r&&r!==t.media)try{r.volume=0,r.muted=!0,b.title=n,A(b,n)}catch{}i.preventDefault(),i.stopPropagation()},e),this.onPlayer("volumechange",()=>{const e=t.muted||0===t.volume,i=h(t.volume);i>0&&(d=i),c.value=(e?0:i).toString(),m(e?0:i),p(e?0:i),b.setAttribute("aria-pressed",e?"true":"false");const n=N(t);if(n&&n!==t.media)try{n.muted=e,e||(n.volume=i)}catch{}});const v=document.createElement("div");return v.className="op-controls__volume--container",v.appendChild(b),v.appendChild(l),v}}function de(e){if(m())return null;const t=new ue;return e&&(t.placement=e),t}let he=0;function me(e,t){const i=e.querySelector(":scope > span.op-player__sr-only"),n=i??document.createElement("span");i||(he+=1,n.className="op-player__sr-only",n.id=`op-player-sr-el-${he}`,e.insertBefore(n,e.firstChild),e.setAttribute("aria-labelledby",n.id),e.removeAttribute("aria-label")),n.textContent=t}function pe(t,i){const n=t.media;(!(!n.autoplay&&"auto"!==n.preload)||t.canAutoplay||t.canAutoplayMuted)&&(t.canAutoplay&&!t.canAutoplayMuted||queueMicrotask(async()=>{try{const n=t.volume>0?t.volume:1;t.muted=!0,t.volume=0,await t.play();const s=T(t).labels,r=m()?s.tap:s.click,a=document.createElement("button");a.type="button",a.className="op-player__unmute",a.textContent=r,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=n,t.play().catch(()=>{}),o()},e),i.insertBefore(a,i.firstChild),t.events.on("player:destroy",o)}catch{}}))}function be(t,i,n){const s=T(t);i.tabIndex=-1;const r=i,a=h(r),o=document.createComment("op-player-placeholder"),l=r.parentNode;l&&l.insertBefore(o,r);const c=document.createElement("div");c.className="op-player op-player__keyboard--inactive "+(a?"op-player__audio":"op-player__video"),c.setAttribute("role","region"),c.tabIndex=0;let u="";if(s.width){u+=`width: ${"number"==typeof s.width?`${s.width}px`:s.width} !important;`}if(s.height){u+=`height: ${"number"==typeof s.height?`${s.height}px`:s.height} !important;`}u&&c.setAttribute("style",u),i.controls=!1,i.replaceWith(c),me(c,s.labels.container);const d=document.createElement("div");d.className="op-media",d.tabIndex=0,d.setAttribute("role","group"),d.appendChild(r),me(d,s.labels.media);const p=document.createElement("div");let b;p.className="op-media__main",a||(d.appendChild(p),b=function(t){const i=T(t).labels,n=i.play,s=i.pause,r=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"),A(a,n),a.setAttribute("aria-keyshortcuts","K Enter"),a.addEventListener("click",async e=>{await F(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=r,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"),A(a,n),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",""),A(a,s),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,A(a,s),c=window.setTimeout(()=>{a.classList.remove("op-player__play--flash"),c=void 0,u=!1,h(!0)},e)}}}(t),d.appendChild(b.button),d.appendChild(b.loader)),function(t,i,n){let s=t.volume||1;const r=()=>{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",r,e),i.addEventListener("keydown",async e=>{const i=e.key;r();const n=document.activeElement;if(n&&(" "===i||"Enter"===i||"Spacebar"===i)&&("BUTTON"===n.tagName||"button"===n.getAttribute("role")))return n.click(),e.preventDefault(),void e.stopPropagation();const a=T(t).step,o=a&&a>0?a:5;switch(i){case"k":case"K":case"Enter":case" ":case"Spacebar":await F(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&&(s=i);const n=N(t);if(n&&n!==t.media)try{n.volume=i,n.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&&(s=i);const n=N(t);if(n&&n!==t.media)try{n.volume=i,n.muted=!(i>0)}catch{}e.preventDefault(),e.stopPropagation();break}case"f":case"F":{const t=e.target;t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullScreen?t.webkitRequestFullScreen():t.msRequestFullscreen?t.msRequestFullscreen():t.webkitEnterFullscreen&&t.webkitEnterFullscreen(),e.preventDefault(),e.stopPropagation();break}case"m":case"M":{const i=N(t);if(t.muted){const e=s>0?s:1;if(t.volume=e,t.muted=!1,i&&i!==t.media)try{i.volume=e,i.muted=!1}catch{}}else if(t.volume>0&&(s=t.volume),t.volume=0,t.muted=!0,i&&i!==t.media)try{i.volume=0,i.muted=!0}catch{}e.preventDefault(),e.stopPropagation();break}case"J":case"j":case"ArrowLeft":t.duration!==1/0&&(t.currentTime=Math.max(0,t.currentTime-o),e.preventDefault(),e.stopPropagation());break;case"L":case"l":case"ArrowRight":t.duration!==1/0&&(t.currentTime=Math.min(t.duration,t.currentTime+o),e.preventDefault(),e.stopPropagation());break;case"<":t.playbackRate=Math.max(t.playbackRate-.25,.25),e.preventDefault(),e.stopPropagation();break;case">":t.playbackRate=Math.min(t.playbackRate+.25,2),e.preventDefault(),e.stopPropagation()}},e),t.events.on("waiting",()=>{n?.showLoader(!0),n?.showButton(!1)}),t.events.on("seeking",()=>{n?.showLoader(!0),n?.showButton(!1)}),t.events.on("seeked",()=>{n?.showLoader(!1),n?.showButton(t.media?.paused??!1)}),t.events.on("play",()=>{n?.showLoader(!1),n?.showButton(!1)}),t.events.on("pause",()=>{n?.showLoader(!1),n?.showButton(!0)}),t.events.on("playing",()=>{n?.showLoader(!1),n?.showButton(!1)}),t.events.on("ended",()=>{n?.showLoader(!1),n?.showButton(!0)})}(t,c,b);const v=document.createElement("div");if(v.className="op-controls",v.setAttribute("aria-hidden","false"),a){const e=O(v);c.appendChild(d),c.appendChild(v);const s=[];n.forEach(i=>{const n=i.create(t);n.dataset.controlId=i.id,e.place(i.placement,n),s.push(i)});const r={wrapper:c,mediaContainer:d,controlsRoot:v,placeholder:o,grid:e},a=t.events.on("player:destroy",()=>{try{s.forEach(e=>e.destroy?.())}catch{}try{c.replaceWith(i)}catch{}try{o.remove()}catch{}try{l(),u(),a()}catch{}}),l=t.events.on("ui:addElement",e=>{if(!e?.el)return;const t=e.placement||{v:"bottom",h:"right"};r.grid?.place(t,e.el)}),u=t.events.on("ui:addControl",e=>{const i=e?.control;if(!i)return;const n=i.create(t);n.dataset.controlId=i.id,r.grid?.place(i.placement,n),e.el=n,s.push(i)});return pe(t,c),r}const f=m(),y=3e3,g=6500;let P,_="pointer";const E=()=>v.contains(document.activeElement),k=()=>{c.classList.remove("op-controls--hidden"),d.classList.remove("op-media--controls-hidden"),P&&window.clearTimeout(P),v.setAttribute("aria-hidden","false")},L=e=>{t.media.paused||t.media.ended||(P&&window.clearTimeout(P),P=window.setTimeout(()=>(()=>{if(E()){if("keyboard"!==_)return;c.focus()}c.classList.add("op-controls--hidden"),d.classList.add("op-media--controls-hidden"),v.setAttribute("aria-hidden","true")})(),e??y))},C=()=>{_="pointer",k(),L(y)};v.addEventListener("focusin",()=>{_="keyboard",k(),L(g)}),v.addEventListener("focusout",()=>{window.setTimeout(()=>{E()||L("keyboard"===_?g:y)},0)});const S=()=>{const e=document.activeElement;return!!e&&(c.contains(e)&&!v.contains(e))};c.addEventListener("focusin",()=>{S()&&(k(),P&&window.clearTimeout(P))},e),c.addEventListener("focusout",()=>{window.setTimeout(()=>{c.contains(document.activeElement)||E()||L()},0)},e),c.addEventListener("keydown",()=>{_="keyboard",S()?(k(),P&&window.clearTimeout(P)):E()&&(k(),L(g))},e),f?c.addEventListener("pointerdown",()=>{_="pointer",k(),L(y)},e):(c.addEventListener("pointermove",C,e),c.addEventListener("pointerenter",C,e),v.addEventListener("pointerenter",C,e),v.addEventListener("pointermove",C,e),v.addEventListener("pointerleave",()=>L(y),e));const x=O(v,p);c.appendChild(d),c.appendChild(v);const j=[];n.forEach(e=>{const i=e.create(t);i.dataset.controlId=e.id,x.place(e.placement,i),j.push(e)});const M={wrapper:c,mediaContainer:d,controlsRoot:v,placeholder:o,grid:x};pe(t,c),c.addEventListener("click",async e=>{if(w(t).active?.fullscreenVideoEl)return;const i=e.target;if(i&&v.contains(i))return;if(i&&i!==c&&i.closest('button, [role="button"], a'))return;!t.media.paused&&!t.media.ended?(b?.flashPause(350),t.pause()):await t.play().catch(()=>{})},e);const R=t.events.on("playing",()=>L(y)),I=t.events.on("pause",()=>k()),D=t.events.on("ended",()=>k()),q=t.events.on("player:destroy",()=>{try{j.forEach(e=>e.destroy?.())}catch{}try{c.replaceWith(i)}catch{}try{o.remove()}catch{}try{R?.(),I?.(),D?.(),$(),B(),q()}catch{}}),$=t.events.on("ui:addElement",e=>{if(!e?.el)return;const t=e.placement||{v:"bottom",h:"right"};M.grid?.place(t,e.el)}),B=t.events.on("ui:addControl",e=>{const i=e?.control;if(!i)return;const n=i.create(t);n.dataset.controlId=i.id,M.grid?.place(i.placement,n),e.el=n,j.push(i)});return M}function ve(e){return{play:ne,volume:de,captions:X,fullscreen:te,currentTime:K,duration:Y,time:ce,progress:re,settings:oe}[e]}function fe(e){const t=function(e){if(!e||"object"!=typeof e)return[];const t=new Set;for(const i of Object.keys(e)){const n=e[i];if(Array.isArray(n))for(const e of n)"string"==typeof e&&t.add(e)}return[...t]}(e);for(const e of t){const t=ve(e);t&&k(e,t)}}function ye(e){if(!e.install)return;!!window.OpenPlayerConfig?.extendPlayerPrototype&&(window.__OpenPlayerInstalledPlugins=window.__OpenPlayerInstalledPlugins||{},window.__OpenPlayerInstalledPlugins[e.name]||(e.install(v),window.__OpenPlayerInstalledPlugins[e.name]=!0))}class ge{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(){this.config.controls&&fe(this.config.controls),this.createdPlugins=this.createDetectedPlugins();for(const e of this.createdPlugins)ye(e.entry);this.core=new v(this.media,{...this.config,plugins:this.createdPlugins.map(e=>e.plugin)});const e=L(this.config.controls);be(this.core,this.media,e),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)}set src(e){if(!this.core)throw new Error("OpenPlayer.src must be set after init()");this.core.src=e}createDetectedPlugins(){const e=window.OpenPlayerPlugins||{};return Object.keys(e).map(t=>{const i=e[t];if(!i?.factory)return;const n=(s=i.defaults,r=this.config?.[t],s?r?"object"!=typeof s||"object"!=typeof r?r:{...s,...r}:{...s}:r??{});var s,r;const a=i.factory(n);return{entry:{...i,name:t},plugin:a,cfg:n}}).filter(Boolean)}}const we=ge;try{Object.assign(we,P)}catch{}return ge});
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(){Object.defineProperty(this,"media",{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,"mediaListeners",{enumerable:!0,configurable:!0,writable:!0,value:[]})}bindMediaEvents(t,i){this.media=t,this.events=i;this.addMediaListener(t,"loadedmetadata",()=>i.emit("loadedmetadata"),e),this.addMediaListener(t,"durationchange",()=>i.emit("durationchange"),e),this.addMediaListener(t,"timeupdate",()=>i.emit("timeupdate"),e),this.addMediaListener(t,"waiting",()=>i.emit("waiting"),e),this.addMediaListener(t,"seeking",()=>i.emit("seeking"),e),this.addMediaListener(t,"seeked",()=>i.emit("seeked"),e),this.addMediaListener(t,"ended",()=>i.emit("ended"),e),this.addMediaListener(t,"error",()=>i.emit("error",t.error),e),this.addMediaListener(t,"playing",()=>i.emit("playing"),e),this.addMediaListener(t,"pause",()=>i.emit("pause"),e),this.addMediaListener(t,"play",()=>i.emit("play"),e),this.addMediaListener(t,"volumechange",()=>i.emit("volumechange"),e),this.addMediaListener(t,"ratechange",()=>i.emit("ratechange"),e)}unbindMediaEvents(){if(this.media){for(const e of this.mediaListeners)this.media.removeEventListener(e.type,e.handler,e.options);this.mediaListeners=[]}}addMediaListener(e,t,i,n){e.addEventListener(t,i,n),this.mediaListeners.push({type:t,handler:i,options:n})}canHandlePlayback(e){const t=e.core.leases.owner("playback");return!t||t===this.name}bindCommands(e){const{media:t,events:i}=e;this.commands.push(i.on("cmd:seek",i=>{if(this.canHandlePlayback(e))try{t.currentTime=i}catch{}})),this.commands.push(i.on("cmd:setVolume",e=>{t.volume=e})),this.commands.push(i.on("cmd:setMuted",e=>{t.muted=e})),this.commands.push(i.on("cmd:setRate",i=>{this.canHandlePlayback(e)&&(t.playbackRate=i)})),this.bindPlayPauseCommands(e)}unbindCommands(){for(const e of this.commands)e();this.commands=[]}bindPlayPauseCommands(e){const{media:t,events:i}=e;this.commands.push(i.on("cmd:play",()=>{this.canHandlePlayback(e)&&this.playImpl(t)})),this.commands.push(i.on("cmd:pause",()=>{this.canHandlePlayback(e)&&this.pauseImpl(t)}))}playImpl(e){e.play().catch(()=>{})}pauseImpl(e){e.pause()}}class i extends t{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){e.activeSource?.src&&e.media.src!==e.activeSource.src&&(e.media.src=e.activeSource.src);try{e.media.load()}catch{}this.bindMediaEvents(e.media,e.events),this.bindCommands(e),this.commands.push(e.events.on("cmd:startLoad",()=>{const t=e.core.state.current;if(!["ready","playing","paused","waiting","seeking","ended"].includes(t)&&"none"===e.media.preload){e.media.preload="metadata";try{e.media.load()}catch{}}}))}detach(){this.unbindCommands(),this.unbindMediaEvents()}}const n={startTime:0,duration:0};class s{constructor(){Object.defineProperty(this,"disposers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"disposed",{enumerable:!0,configurable:!0,writable:!0,value:!1})}get isDisposed(){return this.disposed}add(e){const t=e??(()=>{});if(this.disposed){try{t()}catch{}return()=>{}}return this.disposers.push(t),t}addEventListener(e,t,i,n){return e.addEventListener(t,i,n),this.add(()=>e.removeEventListener(t,i,n))}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 r{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 a{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 o{constructor(){Object.defineProperty(this,"plugins",{enumerable:!0,configurable:!0,writable:!0,value:[]})}register(e){this.plugins.push(e)}all(){return this.plugins}}class l{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 c(e,t){const i=Math.floor(e%1*(t||0));let n=Math.floor(e),s=Math.floor(n/60);const r=Math.floor(s/60),a=e=>{const t=e.toString();return e<10?e<=0?"00":`0${t}`:t};return s%=60,n%=60,`${r>0?`${a(r)}:`:""}${a(s)}:${a(n)}${i?`:${a(i)}`:""}`}const u=e=>{const t=Number.isFinite(e)?Math.max(0,e):0,i=Math.floor(t),n=Math.floor(i/3600),s=Math.floor(i%3600/60);return`PT${n?`${n}H`:""}${s?`${s}M`:""}${i%60}S`};function d(e){const t=e.getBoundingClientRect();return{left:t.left+(window.pageXOffset||document.documentElement.scrollLeft),top:t.top+(window.pageYOffset||document.documentElement.scrollTop)}}function h(e){return e instanceof HTMLAudioElement}function m(){return/ipad|iphone|ipod/i.test(window.navigator.userAgent)&&!window.MSStream||/android/i.test(window.navigator.userAgent)}function p(e,t){const i=new URL(t).pathname.split("."),n=i.length>1?i.pop().toLowerCase():"";if(!n)return h(e)?"audio/mp3":"video/mp4";switch(n){case"m3u8":case"m3u":return"application/x-mpegURL";case"mpd":return"application/dash+xml";case"mp4":return h(e)?"audio/mp4":"video/mp4";case"mp3":return"audio/mp3";case"webm":return h(e)?"audio/webm":"video/webm";case"ogg":return h(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 h(e)?"audio/mp3":"video/mp4"}}const b=e=>Math.min(1,Math.max(0,e));class v{constructor(e,t={}){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 r}),Object.defineProperty(this,"leases",{enumerable:!0,configurable:!0,writable:!0,value:new a}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:new l("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,"interactionUnsubs",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"plugins",{enumerable:!0,configurable:!0,writable:!0,value:new o}),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.registerPlugin(new i),this.config={...n,...t},this.media.currentTime=this.config.startTime||this.media.currentTime,this._currentTime=this.config.startTime||this.media.currentTime,this._duration=this.config.duration||this.media.duration;const s=b(this.config.startVolume??this.media.volume);this.media.volume=s,this._volume=s,void 0!==this.config.startVolume?(this.media.muted=s<=0,this._muted=s<=0):this._muted=this.media.muted,this.media.playbackRate=this.config.startPlaybackRate||this.media.playbackRate,this._playbackRate=this.config.startPlaybackRate||this.media.playbackRate,(this.config.plugins||[]).forEach(e=>this.registerPlugin(e)),this.bindStateTransitions(),this.bindMediaSync(),this.bindLeaseSync(),this.bindFirstInteraction(),queueMicrotask(()=>this.maybeAutoLoad())}on(e,t){return this.events.on(e,t)}emit(e,t){this.events.emit(e,t),this.plugins.all().filter(e=>!e.capabilities?.includes("media-engine")).forEach(i=>{i.onEvent?.(e,t)})}registerPlugin(e){this.plugins.register(e);const t=new s;this.pluginDisposables.set(e,t),e.setup?.({core:this,media:this.media,events:this.events,state:this.state,leases:this.leases,dispose:t,add:e=>t.add(e??void 0),on:(e,i)=>t.add(this.events.on(e,i)),listen:(e,i,n,s)=>t.addEventListener(e,i,n,s)})}set src(e){this._src=e,e&&(this.detectedSources=[{src:e,type:p(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=b(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={media:this.media,events:this.events,config:this.config,activeSource:i,core:this},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,n=()=>{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{n()}})(),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],n=e[t];for(const e of Object.keys(n))void 0===i[e]&&(i[e]=n[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},n={capture:!0},s=s=>{e.addEventListener(s,t,i),this.interactionUnsubs.push(()=>e.removeEventListener(s,t,n))};s("pointerdown"),s("mousedown"),s("touchstart"),s("keydown")}resolveMediaEngine(e){if(0===e.length)throw new Error("Player cannot resolve media with an empty source");const t=[...this.plugins.all().filter(e=>!(!e||!e.capabilities?.includes("media-engine")||"function"!=typeof e.canPlay))].sort((e,t)=>(t.priority??0)-(e.priority??0)||e.name.localeCompare(t.name));for(const i of e)for(const e of t)if(e.canPlay?.(i))return{engine:e,source:i};throw new Error("No compatible media engine found")}bindStateTransitions(){this.events.on("loadstart",()=>this.state.transition("loading")),this.events.on("loadedmetadata",()=>{this.state.transition("ready"),this.readyResolve&&(this.readyResolve(),this.readyResolve=void 0,this.readyReject=void 0)}),this.events.on("playing",()=>this.state.transition("playing")),this.events.on("pause",()=>this.state.transition("paused")),this.events.on("waiting",()=>this.state.transition("waiting")),this.events.on("seeking",()=>this.state.transition("seeking")),this.events.on("seeked",()=>this.state.transition("ready")),this.events.on("ended",()=>this.state.transition("ended")),this.events.on("error",e=>{this.state.transition("error"),this.readyReject&&(this.readyReject(e),this.readyResolve=void 0,this.readyReject=void 0)})}bindMediaSync(){const e=()=>{try{this._currentTime=this.media.currentTime||0}catch{}try{const e=this.media.duration;this._duration=e}catch{}try{this._muted=Boolean(this.media.muted);const e=this.media.volume;Number.isFinite(e)&&(this._volume=e)}catch{}try{const e=this.media.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())}bindLeaseSync(){this.leases.onChange(e=>{"playback"===e&&queueMicrotask(()=>{this.emit("cmd:setVolume",this._volume),this.emit("cmd:setMuted",this._muted),this.emit("cmd:setRate",this._playbackRate),this._currentTime&&this.emit("cmd:seek",this._currentTime)})})}createReadyPromise(){this.readyPromise||(this.readyPromise=new Promise((e,t)=>{this.readyResolve=e,this.readyReject=t}))}readMediaSources(e){const t=[];e.src&&t.push({src:e.src,type:p(e,e.src)});try{e.querySelectorAll("source").forEach(i=>{t.push({src:i.src,type:i.type||p(e,i.src)})})}catch{}return t}maybeAutoLoad(){if("idle"!==this.state.current)return;if(!this.plugins.all().some(e=>e.capabilities?.includes("media-engine")))return;const e=this.readMediaSources(this.media);if(0===e.length)return;this.detectedSources=e;const t=this.media.autoplay;try{this.media.querySelectorAll("source").forEach(e=>e.remove()),this.media.getAttribute("src")&&this.media.removeAttribute("src"),this.media.src&&(this.media.src=""),this.load(),t&&(this.media.autoplay=!1,queueMicrotask(()=>this.emit("cmd:play")))}catch{}}}class f{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 y="__op::overlay::manager";class g{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 f(new r)}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 n={...i,...t,id:i.id};this.overlays.set(e,n),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 w(e){if(e[y])return e[y];const t=new g;e[y]=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[y]}catch{}})}}catch{}return t}var P=Object.freeze({__proto__:null,BaseMediaEngine:t,Core:v,DVR_THRESHOLD:120,DefaultMediaEngine:i,DisposableStore:s,EVENT_OPTIONS:e,EventBus:r,Lease:a,PluginRegistry:o,StateManager:l,formatTime:c,generateISODateTime:u,getOverlayManager:w,isAudio:h,isMobile:m,offset:d});const _=new Map;function E(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 n=document.createElement("div");n.className="op-controls__middle";const s=document.createElement("div");return s.className="op-controls__right",t.append(i,n,s),{section:t,left:i,center:n,right:s}}function O(e,t){const i=E("top"),n=E("center"),s=E("bottom");return e.append(i.section,n.section,s.section),{place(e,r){const a=e.region?.trim();if("main"===a&&t)return void t.appendChild(r);const o="top"===e.v?i:"middle"===e.v?n:s;("left"===e.h?o.left:"center"===e.h?o.center:o.right).appendChild(r)}}}function k(e,t){_.set(e,t)}function L(e){const t=[];return Object.entries(e||{}).forEach(([e,i])=>{if(!Array.isArray(i))return;const n=function(e){if("main"===e)return{v:"middle",h:"center",region:"main"};const t=e.split("-");let i="middle",n="center";for(const e of t)"top"!==e&&"bottom"!==e||(i=e),"left"!==e&&"right"!==e||(n=e),"middle"!==e&&"center"!==e||(n="center");return{v:i,h:n}}(e);i.forEach(e=>{const i=function(e){const t=_.get(e);return t?.()||null}(e);i&&(i.placement=n,t.push(i))})}),t}let S=0;function C(e,t,i){const n=e.parentElement??i?.container;if(!n)return void e.setAttribute("aria-label",t);const s=e.getAttribute("aria-labelledby");let r=null;if(s){const e=document.getElementById(s);e&&e instanceof HTMLSpanElement&&(r=e)}r||(r=document.createElement("span"),r.className="op-player__sr-only",r.id=(S+=1,`op-player-sr-${S}`),e.parentElement===n&&n.contains(e)?n.insertBefore(r,e):n.appendChild(r),e.setAttribute("aria-labelledby",r.id)),r.textContent=t,e.removeAttribute("aria-label")}function A(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"),n=i??document.createElement("span");i||(n.className="op-player__sr-only",e.appendChild(n)),n.textContent=t}(e,t),void e.removeAttribute("aria-label");C(e,t,i)}const x=0,j=!0,M=!0,R=Object.freeze({auto:"Auto",captions:"CC/Subtitles",click:"Click to unmute",container:"Media player",fullscreen:"Fullscreen",levels:"Quality Levels",live:"Live",loading:"Loading...",media:"Media",mute:"Mute",off:"Off",pause:"Pause",play:"Play",progressRail:"Time Rail",progressSlider:"Time Slider",settings:"Player Settings",speed:"Speed",speedNormal:"Normal",tap:"Tap to unmute",toggleCaptions:"Toggle Captions",unmute:"Unmute",volume:"Volume",volumeControl:"Volume Control",volumeSlider:"Volume Slider"});function T(e){const t=e.config?e.config:e,i=t.allowSkip??j,n=t.allowRewind??M,s=t.step??x,r=t.width,a=t.height,o={...R,...t.labels||{}};if(e.config)try{t.labels=o,t.allowSkip=i,t.allowRewind=n,t.step=s}catch{}return{allowSkip:i,allowRewind:n,step:s,width:r,height:a,labels:o}}function N(e){try{if(!!0)return e.media;const t=w(e)?.active,i=t?.fullscreenVideoEl;return i&&"function"==typeof i.play?i:e.media}catch{return e.media}}async function F(e){const t=N(e);t.paused||t.ended?await e.play():e.pause()}const I=Symbol.for("openplayerjs.settings.registry");class q{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 D(e){const t=e;if(t[I])return t[I];const i=new q;return t[I]=i,i}class ${constructor(){Object.defineProperty(this,"core",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"overlayMgr",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"activeOverlay",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"dispose",{enumerable:!0,configurable:!0,writable:!0,value:new s})}onOverlayChanged(e){}create(e){return this.core=e,this.overlayMgr=w(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,n){return this.dispose.addEventListener(e,t,i,n)}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 B(e){return"captions"===e||"subtitles"===e}function H(e){const t=e.textTracks??null;if(!t)return[];const i=[];for(let e=0;e<t.length;e++){const n=t[e];n&&(B(String(n.kind))&&i.push({index:e,track:n}))}return i}function z(e){const t=H(e);for(const e of t)if("showing"===e.track.mode)return e.index;return"off"}function V(e){for(const t of H(e))t.track.mode="disabled"}function U(e,t){for(const i of H(e))i.track.mode=i.index===t?"showing":"disabled"}class W extends ${constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"captions"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"right"}}),Object.defineProperty(this,"button",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"lastSelectedIndex",{enumerable:!0,configurable:!0,writable:!0,value:null})}build(){const t=this.core,i=T(t).labels,n=i.captions,s=i.toggleCaptions;this.button=document.createElement("button"),this.button.type="button",this.button.className="op-controls__captions",A(this.button,s),this.button.setAttribute("aria-pressed","false");const r=()=>{const e=N(t),i=H(e);this.button.style.display=i.length?"":"none";const n=z(e),s="off"!==n;"number"==typeof n&&(this.lastSelectedIndex=n),this.button.classList.toggle("op-controls__captions--on",s),this.button.setAttribute("aria-pressed",s?"true":"false")};this.listen(this.button,"click",e=>{const i=e,n=N(t);if("off"===z(n)){const e=H(n),t=this.lastSelectedIndex??e[0]?.index;"number"==typeof t&&U(n,t)}else V(n);r(),i.preventDefault(),i.stopPropagation()},e);const a={id:"captions",label:n,getSubmenu:()=>{const e=N(t),s=H(e);if(!s.length)return null;const a=z(e);return{id:"captions",label:n,items:[{id:"off",label:i.off,checked:"off"===a,onSelect:()=>{V(e),r()}},...s.map(t=>{return{id:String(t.index),label:(i=t.track,n=t.index,i.label&&i.label.trim()||i.language&&i.language.trim().toUpperCase()||`Track ${n+1}`),checked:t.index===a,onSelect:()=>{U(e,t.index),this.lastSelectedIndex=t.index,r()}};var i,n})]}}};return D(t).register(a),this.dispose.add(this.overlayMgr.bus.on("overlay:changed",r)),this.onPlayer("loadedmetadata",r),r(),this.button}}function X(e){const t=new W;return e&&(t.placement=e),t}class J extends ${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=c(this.activeOverlay.value));if(e.isLive)return void t.setAttribute("aria-hidden","true");const i=e.currentTime;t.setAttribute("aria-hidden","false");const n=Number.isFinite(i)?Math.max(0,i):0,s=c(n);t.innerText=s,t.setAttribute("datetime",u(n))};return this.onPlayer("timeupdate",()=>i()),this.onPlayer("seeked",()=>i()),this.onPlayer("durationchange",()=>i()),this.overlayMgr.bus.on("overlay:changed",()=>i()),i(),t}}function K(e){const t=new J;return e&&(t.placement=e),t}class Q extends ${constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"duration"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"top",h:"right"}})}build(){const e=this.core,t=document.createElement("time");t.className="op-controls__duration",t.setAttribute("aria-hidden","false"),t.setAttribute("datetime","PT0M0S");const i=()=>{if(this.activeOverlay)return t.setAttribute("aria-hidden","false"),void(t.innerText=c(this.activeOverlay.duration));const i=e.duration;if(e.isLive||i===1/0)return t.removeAttribute("datetime"),void(t.textContent=T(e).labels.live);t.setAttribute("aria-hidden","false");const n=Number.isFinite(i)?Math.max(0,i):e.config?.duration||0,s=c(n);t.textContent=s,t.setAttribute("datetime",u(n))};return this.onPlayer("durationchange",i),this.onPlayer("timeupdate",i),this.overlayMgr.bus.on("overlay:changed",i),i(),t}}function Y(e){const t=new Q;return e&&(t.placement=e),t}function G(){const e=document;return document.fullscreenElement||e.webkitFullscreenElement||e.mozFullScreenElement||e.msFullscreenElement||null}function Z(){const e=document;return document.exitFullscreen?document.exitFullscreen():e.mozCancelFullScreen?e.mozCancelFullScreen():e.webkitCancelFullScreen?e.webkitCancelFullScreen():e.msExitFullscreen?e.msExitFullscreen():void 0}class ee extends ${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=T(this.core).labels,i=document.createElement("button");i.tabIndex=0,i.type="button",i.className="op-controls__fullscreen",A(i,t.fullscreen),i.setAttribute("aria-pressed","false");const n=(e,t)=>{const i=this.resolveFullscreenContainer(),n=this.resolveFullscreenVideoEl();e?(i.style.width="100%",n&&(n.style.width="100%")):(i.style.removeProperty("width"),n&&n.style.removeProperty("width")),t?(i.style.height="100%",n&&(n.style.height="100%")):(i.style.removeProperty("height"),n&&n.style.removeProperty("height"))},s=()=>{const e=G(),t=this.resolveFullscreenContainer(),s=!!e&&(e===t||e.contains?.(t));var r;(r=s)?i.classList.add("op-controls__fullscreen--out"):i.classList.remove("op-controls__fullscreen--out"),i.setAttribute("aria-pressed",r?"true":"false"),s?document.body.classList.add("op-fullscreen__on"):document.body.classList.remove("op-fullscreen__on"),n(s?this.screenW:void 0,s?this.screenH:void 0),this.isFullscreen=s};return["fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange"].forEach(t=>{this.listen(document,t,s,e)}),this.listen(document,"keydown",e=>{"Escape"===e.key&&this.isFullscreen&&Z()},e),this.listen(i,"click",async e=>{const t=e;if(this.screenW=window.screen.width,this.screenH=window.screen.height,G())return void Z();!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),s(),i}onOverlayChanged(){if(G()){G()&&document.dispatchEvent(new Event("fullscreenchange"))}}}function te(e){const t=new ee;return e&&(t.placement=e),t}class ie extends ${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(t).labels,n=i.play,s=i.pause,r=document.createElement("button");r.tabIndex=0,r.type="button",r.className="op-controls__playpause",A(r,n),r.setAttribute("aria-pressed","false"),this.listen(r,"click",async e=>{const i=e;await F(t),i.preventDefault(),i.stopPropagation()},e);const a=e=>{r.classList.toggle("op-controls__playpause--pause",e),r.setAttribute("aria-pressed",e?"true":"false"),A(r,e?s:n)};return this.onPlayer("play",()=>a(!0)),this.onPlayer("pause",()=>a(!1)),this.onPlayer("playing",()=>a(!0)),this.onPlayer("pause",()=>a(!1)),this.onPlayer("ended",()=>a(!1)),r}}function ne(e){const t=new ie;return e&&(t.placement=e),t}class se extends ${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(t),{allowRewind:n,allowSkip:s,labels:r}=i,a=r.progressSlider,o=r.progressRail,l=document.createElement("div");l.className="op-controls__progress",l.role="group",A(l,a);const u=document.createElement("input");u.type="range",u.role="slider",u.className="op-controls__progress--seek",u.tabIndex=0,u.min="0",u.step="0.1",u.value="0",A(u,o,{container:l}),u.setAttribute("aria-valuemin","0"),u.setAttribute("aria-valuenow","0");const h=document.createElement("progress");h.className="op-controls__progress--buffer",h.max=100,h.value=0;const p=document.createElement("progress");let b;p.className="op-controls__progress--played",p.max=100,p.value=0,l.appendChild(u),l.appendChild(p),l.appendChild(h),m()||(b=document.createElement("span"),b.className="op-controls__tooltip",b.tabIndex=-1,b.textContent="00:00",l.appendChild(b));const v=e=>{e?u.classList.add("op-progress--pressed"):u.classList.remove("op-progress--pressed")};this.listen(u,"pointerdown",()=>v(!0)),this.listen(u,"pointerup",()=>v(!1)),this.listen(u,"pointercancel",()=>v(!1)),this.listen(u,"mouseleave",()=>v(!1)),this.listen(u,"touchstart",()=>v(!0),e),this.listen(u,"touchend",()=>v(!1),e),this.listen(u,"mousedown",()=>v(!0),e),this.listen(u,"mouseup",()=>v(!1),e);const f=()=>v(!1);this.listen(document,"pointerup",f,e),this.listen(document,"pointercancel",f,e),this.listen(document,"mouseup",f,e),this.listen(document,"touchend",f,e);const y=e=>{u.disabled=!e,u.classList.toggle("op-progress--disabled",!e),l.setAttribute("aria-disabled",(!e).toString())},g=()=>this.activeOverlay?this.activeOverlay.duration:t.media?.duration??t.duration,w=()=>this.activeOverlay?this.activeOverlay.value:t.media?.currentTime??t.currentTime,P=()=>this.activeOverlay?this.activeOverlay.mode:"normal",_=()=>{const e=g(),i=w(),n=P();if((t.isLive||e===1/0)&&!this.activeOverlay)return void l.setAttribute("aria-hidden","true");if(l.setAttribute("aria-hidden","false"),Number.isFinite(e)&&e>0&&(u.max&&"0"!==u.max&&parseFloat(u.max||"-1")===e||(u.max=String(e),u.setAttribute("aria-valuemax",String(e)))),this.repaint=_,this.activeOverlay?y(this.activeOverlay.canSeek):y(!t.isLive&&t.media?.duration!==1/0),u.classList.contains("op-progress--pressed"))return;const s=Number.isFinite(e)&&e>0?e:0,r=Number.isFinite(i)&&i>=0?i:0;u.value=String(r),u.setAttribute("aria-valuenow",String(r));const a=parseFloat(u.min),o=parseFloat(u.max);if(Number.isFinite(a)&&Number.isFinite(o)&&o>a){const e="countdown"===n?100*(o-r-a)/(o-a):100*(r-a)/(o-a);u.style.backgroundSize=`${e}% 100%`}p.value=s?"countdown"===n?(s-r)/s*100:r/s*100:0,this.activeOverlay&&Number.isFinite(this.activeOverlay.bufferedPct)&&(h.value=Math.max(0,Math.min(100,this.activeOverlay.bufferedPct)))},E=e=>{if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=g();if((t.isLive||i===1/0)&&!this.activeOverlay)return;if(!Number.isFinite(i)||i<=0)return;const r=l.getBoundingClientRect(),a=e-r.left,o=Math.max(0,Math.min(1,a/r.width))*i,c=w();o<c&&!n||o>c&&!s||Number.isFinite(o)&&(u.value=String(o),t.currentTime=o)};return this.listen(l,"click",e=>{const t=e,i=e.target;i&&i.closest('input[type="range"]')||E(t.clientX)},e),this.listen(l,"touchstart",e=>{const t=e,i=e.target;if(i&&i.closest('input[type="range"]'))return;const n=t.touches&&t.touches[0];n&&(t.preventDefault(),E(n.clientX))},e),this.listen(u,"change",e=>{if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=e.target,r=parseFloat(i.value),a=w();r<a&&!n||r>a&&!s||(Number.isFinite(r)&&(t.currentTime=r),v(!1))},e),this.listen(u,"input",e=>{if(!u.classList.contains("op-progress--pressed")&&!m())return;if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const i=e.target,r=parseFloat(i.min),a=parseFloat(i.max),o=parseFloat(i.value),l=w();if(o<l&&!n||o>l&&!s)return;Number.isFinite(r)&&Number.isFinite(a)&&a>r&&(u.style.backgroundSize=100*(o-r)/(a-r)+"% 100%");const c=g(),d=Number.isFinite(c)&&c>0?c:0;p.value=d?o/d*100:0,t.currentTime=o},e),this.onPlayer("durationchange",_),this.onPlayer("timeupdate",_),this.onPlayer("waiting",()=>{u.classList.contains("loading")||u.classList.add("loading"),u.classList.contains("error")&&u.classList.remove("error")}),this.onPlayer("play",()=>{u.classList.contains("loading")&&u.classList.remove("loading"),u.classList.contains("error")&&u.classList.remove("error"),t.isLive||t.media.duration===1/0||(l.removeAttribute("aria-valuenow"),l.removeAttribute("aria-valuetext"))}),this.onPlayer("playing",()=>{u.classList.contains("loading")&&u.classList.remove("loading"),u.classList.contains("error")&&u.classList.remove("error")}),this.onPlayer("ended",()=>{u.style.backgroundSize="0% 100%",u.max&&(u.max="0"),h.value=0,p.value=0}),this.listen(l,"pointermove",e=>{const i=e;if(m())return;if(this.activeOverlay&&!this.activeOverlay.canSeek)return;const n=g();if((t.isLive||n===1/0)&&!this.activeOverlay)return;const s=i.pageX;let r=s-d(l).left;const a=b.offsetWidth/2,o=r/l.offsetWidth,h=o*n,p=this.resolvePlayerRoot(),v=p.offsetWidth-b.offsetWidth;r<=0||s-d(p).left<=a?r=0:s-d(p).left>=v?r=v-d(u).left-10:r-=a,o>=0&&o<=1?b.classList.add("op-controls__tooltip--visible"):b.classList.remove("op-controls__tooltip--visible"),b.style.left=`${r}px`,b.textContent=Number.isNaN(h)?"00:00":c(h)},e),this.listen(document,"pointermove",e=>{e.target.closest(".op-controls__progress")||b.classList.remove("op-controls__tooltip--visible")},e),_(),l}onOverlayChanged(){this.repaint?.()}}function re(e){const t=new se;return e&&(t.placement=e),t}class ae extends ${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=T(this.core).labels;return 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"),A(this.button,t.settings),this.panel=document.createElement("div"),this.panel.className="op-menu",this.panel.setAttribute("role","menu"),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.dispose.add(this.overlayMgr.bus.on("overlay:changed",()=>{this.activeSubmenuId=null,this.render()})),D(this.core).register({id:"speed",label:t.speed,getSubmenu:e=>{const i=this.overlayMgr.active;if("ads"===i?.id)return null;const n=e.playbackRate||1;return{id:"speed",label:t.speed,items:[.5,.75,1,1.25,1.5,2].map(i=>({id:String(i),label:1===i?t.speedNormal:`${i}x`,checked:Math.abs(n-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()}close(){this.isOpen=!1,this.activeSubmenuId=null,this.button.setAttribute("aria-expanded","false"),this.panel.style.display="none"}render(){const t=D(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 n=document.createElement("div");n.className="op-menu__header";const s=document.createElement("button");s.type="button",s.className="op-submenu__back",A(s,"Back"),this.listen(s,"click",e=>{const t=e;this.activeSubmenuId=null,this.render(),t.preventDefault(),t.stopPropagation()},e);const r=document.createElement("div");r.className="op-controls__settings-title",r.textContent=i.label,n.append(s,r),this.view.appendChild(n);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,n=!1,s=!1){const r=document.createElement("button");r.type="button",r.className="op-controls__menu-item",r.setAttribute("role","menuitem"),r.setAttribute("aria-disabled",s?"true":"false"),r.setAttribute("aria-checked",n?"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 "+(n?"checked":""),r.append(o,a),this.listen(r,"click",e=>{const t=e;i(),t.preventDefault(),t.stopPropagation()},e),r}}function oe(e){const t=new ae;return e&&(t.placement=e),t}class le extends ${constructor(){super(...arguments),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:"time"}),Object.defineProperty(this,"placement",{enumerable:!0,configurable:!0,writable:!0,value:{v:"bottom",h:"left"}})}build(){const e=this.core,t=document.createElement("span");t.className="op-controls__time-delimiter",t.textContent="/";const i=document.createElement("span");i.className="op-controls-time";const n=(new J).create(e),s=(new Q).create(e);return i.appendChild(n),i.appendChild(t),i.appendChild(s),i}}function ce(e){const t=new le;return e&&(t.placement=e),t}class ue extends ${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(t).labels,n=i.mute,s=i.unmute,r=i.volume,a=i.volumeControl,o=i.volumeSlider,l=document.createElement("div");l.className="op-controls__volume",l.tabIndex=0,l.setAttribute("aria-valuemin","0"),l.setAttribute("aria-valuemax","100"),l.setAttribute("aria-valuenow",`${t.volume}`),A(l,a),l.setAttribute("aria-orientation","vertical"),l.setAttribute("role","slider");const c=document.createElement("input");c.className="op-controls__volume--input",c.tabIndex=-1,c.type="range",c.value=t.volume.toString(),c.min="0",c.max="1",c.step="0.1",A(c,o,{container:l});const u=document.createElement("progress");u.className="op-controls__volume--display",u.max=10,u.value=10*t.volume,l.appendChild(c),l.appendChild(u);const d=document.createElement("button");d.tabIndex=0,d.type="button",d.title=n,d.className="op-controls__mute",A(d,n),d.setAttribute("aria-pressed","false");let h=t.volume;const m=e=>e>=1?1:e<=0?0:e,p=e=>{const t=m(e);u.value=10*t;const i=Math.floor(100*t);l.setAttribute("aria-valuenow",`${i}`),l.setAttribute("aria-valuetext",`${r}: ${i}`)},b=e=>{const t=m(e);t<=.5&&t>0?(d.classList.remove("op-controls__mute--muted"),d.classList.add("op-controls__mute--half")):0===t?(d.classList.add("op-controls__mute--muted"),d.classList.remove("op-controls__mute--half")):(d.classList.remove("op-controls__mute--muted"),d.classList.remove("op-controls__mute--half"))};this.listen(c,"input",e=>{const i=Number(e.target.value),n=m(i);h=n,t.volume=n,t.muted=0===n;const s=N(t);if(s&&s!==t.media)try{s.volume=n,s.muted=0===n}catch{}p(n),b(n)},e),this.listen(d,"click",e=>{const i=e,r=N(t);if(t.muted){const e=h>0?h:1;if(t.volume=e,t.muted=!1,r&&r!==t.media)try{r.volume=e,r.muted=!1,d.title=s,A(d,s)}catch{}}else if(t.volume>0&&(h=t.volume),t.volume=0,t.muted=!0,r&&r!==t.media)try{r.volume=0,r.muted=!0,d.title=n,A(d,n)}catch{}i.preventDefault(),i.stopPropagation()},e),this.onPlayer("loadedmetadata",()=>{const e=t.muted||0===t.volume,i=m(t.volume);i>0&&(h=i),c.value=(e?0:i).toString(),p(e?0:i),b(e?0:i);const n=N(t);if(n&&n!==t.media)try{n.muted=e,e||(n.volume=i)}catch{}}),this.onPlayer("volumechange",()=>{const e=t.muted||0===t.volume,i=m(t.volume);i>0&&(h=i),c.value=(e?0:i).toString(),p(e?0:i),b(e?0:i),d.setAttribute("aria-pressed",e?"true":"false");const n=N(t);if(n&&n!==t.media)try{n.muted=e,e||(n.volume=i)}catch{}});const v=document.createElement("div");return v.className="op-controls__volume--container",v.appendChild(d),v.appendChild(l),v}}function de(e){if(m())return null;const t=new ue;return e&&(t.placement=e),t}let he=0;function me(e,t){const i=e.querySelector(":scope > span.op-player__sr-only"),n=i??document.createElement("span");i||(he+=1,n.className="op-player__sr-only",n.id=`op-player-sr-el-${he}`,e.insertBefore(n,e.firstChild),e.setAttribute("aria-labelledby",n.id),e.removeAttribute("aria-label")),n.textContent=t}function pe(t,i){(!!t.media.autoplay||t.canAutoplay||t.canAutoplayMuted)&&(t.canAutoplay&&!t.canAutoplayMuted||queueMicrotask(async()=>{try{const n=t.volume>0?t.volume:1;t.muted=!0,t.volume=0,await t.play();const s=T(t).labels,r=m()?s.tap:s.click,a=document.createElement("button");a.type="button",a.className="op-player__unmute",a.textContent=r,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=n,t.play().catch(()=>{}),o()},e),i.insertBefore(a,i.firstChild),t.events.on("player:destroy",o)}catch{}}))}function be(t,i,n){const s=T(t);i.tabIndex=-1;const r=i,a=h(r);r.classList.contains("op-player__media")||r.classList.add("op-player__media");const o=document.createComment("op-player-placeholder"),l=r.parentNode;l&&l.insertBefore(o,r);const c=document.createElement("div");c.className="op-player op-player__keyboard--inactive "+(a?"op-player__audio":"op-player__video"),c.setAttribute("role","region"),c.tabIndex=0;let u="";if(s.width){u+=`width: ${"number"==typeof s.width?`${s.width}px`:s.width} !important;`}if(s.height){u+=`height: ${"number"==typeof s.height?`${s.height}px`:s.height} !important;`}u&&c.setAttribute("style",u),i.controls=!1,i.replaceWith(c),me(c,s.labels.container);const d=document.createElement("div");d.className="op-media",d.tabIndex=0,d.setAttribute("role","group"),d.appendChild(r),me(d,s.labels.media);const p=document.createElement("div");let b;p.className="op-media__main",a||(d.appendChild(p),b=function(t){const i=T(t).labels,n=i.play,s=i.pause,r=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"),A(a,n),a.setAttribute("aria-keyshortcuts","K Enter"),a.addEventListener("click",async e=>{await F(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=r,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"),A(a,n),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",""),A(a,s),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,A(a,s),c=window.setTimeout(()=>{a.classList.remove("op-player__play--flash"),c=void 0,u=!1,h(!0)},e)}}}(t),d.appendChild(b.button),d.appendChild(b.loader)),function(t,i,n){let s=t.volume||1;const r=()=>{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",r,e),i.addEventListener("keydown",async e=>{const i=e.key;r();const n=document.activeElement;if(n&&(" "===i||"Enter"===i||"Spacebar"===i)&&("BUTTON"===n.tagName||"button"===n.getAttribute("role")))return n.click(),e.preventDefault(),void e.stopPropagation();const a=T(t).step,o=a&&a>0?a:5;switch(i){case"k":case"K":case"Enter":case" ":case"Spacebar":await F(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&&(s=i);const n=N(t);if(n&&n!==t.media)try{n.volume=i,n.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&&(s=i);const n=N(t);if(n&&n!==t.media)try{n.volume=i,n.muted=!(i>0)}catch{}e.preventDefault(),e.stopPropagation();break}case"f":case"F":{const t=e.target;t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullScreen?t.webkitRequestFullScreen():t.msRequestFullscreen?t.msRequestFullscreen():t.webkitEnterFullscreen&&t.webkitEnterFullscreen(),e.preventDefault(),e.stopPropagation();break}case"m":case"M":{const i=N(t);if(t.muted){const e=s>0?s:1;if(t.volume=e,t.muted=!1,i&&i!==t.media)try{i.volume=e,i.muted=!1}catch{}}else if(t.volume>0&&(s=t.volume),t.volume=0,t.muted=!0,i&&i!==t.media)try{i.volume=0,i.muted=!0}catch{}e.preventDefault(),e.stopPropagation();break}case"J":case"j":case"ArrowLeft":t.duration!==1/0&&(t.currentTime=Math.max(0,t.currentTime-o),e.preventDefault(),e.stopPropagation());break;case"L":case"l":case"ArrowRight":t.duration!==1/0&&(t.currentTime=Math.min(t.duration,t.currentTime+o),e.preventDefault(),e.stopPropagation());break;case"<":t.playbackRate=Math.max(t.playbackRate-.25,.25),e.preventDefault(),e.stopPropagation();break;case">":t.playbackRate=Math.min(t.playbackRate+.25,2),e.preventDefault(),e.stopPropagation()}},e),t.events.on("waiting",()=>{n?.showLoader(!0),n?.showButton(!1)}),t.events.on("seeking",()=>{n?.showLoader(!0),n?.showButton(!1)}),t.events.on("seeked",()=>{n?.showLoader(!1),n?.showButton(t.media?.paused??!1)}),t.events.on("play",()=>{n?.showLoader(!1),n?.showButton(!1)}),t.events.on("pause",()=>{n?.showLoader(!1),n?.showButton(!0)}),t.events.on("playing",()=>{n?.showLoader(!1),n?.showButton(!1)}),t.events.on("ended",()=>{n?.showLoader(!1),n?.showButton(!0)})}(t,c,b);const v=document.createElement("div");if(v.className="op-controls",v.setAttribute("aria-hidden","false"),a){const e=O(v);c.appendChild(d),c.appendChild(v);const s=[];n.forEach(i=>{const n=i.create(t);n.dataset.controlId=i.id,e.place(i.placement,n),s.push(i)});const r={wrapper:c,mediaContainer:d,controlsRoot:v,placeholder:o,grid:e},a=t.events.on("player:destroy",()=>{try{s.forEach(e=>e.destroy?.())}catch{}try{c.replaceWith(i)}catch{}try{o.remove()}catch{}try{l(),u(),a()}catch{}}),l=t.events.on("ui:addElement",e=>{if(!e?.el)return;const t=e.placement||{v:"bottom",h:"right"};r.grid?.place(t,e.el)}),u=t.events.on("ui:addControl",e=>{const i=e?.control;if(!i)return;const n=i.create(t);n.dataset.controlId=i.id,r.grid?.place(i.placement,n),e.el=n,s.push(i)});return pe(t,c),r}const f=m(),y=3e3,g=6500;let P,_="pointer";const E=()=>v.contains(document.activeElement),k=()=>{c.classList.remove("op-controls--hidden"),d.classList.remove("op-media--controls-hidden"),P&&window.clearTimeout(P),v.setAttribute("aria-hidden","false")},L=e=>{t.media.paused||t.media.ended||(P&&window.clearTimeout(P),P=window.setTimeout(()=>(()=>{if(E()){if("keyboard"!==_)return;c.focus()}c.classList.add("op-controls--hidden"),d.classList.add("op-media--controls-hidden"),v.setAttribute("aria-hidden","true")})(),e??y))},S=()=>{_="pointer",k(),L(y)};v.addEventListener("focusin",()=>{_="keyboard",k(),L(g)}),v.addEventListener("focusout",()=>{window.setTimeout(()=>{E()||L("keyboard"===_?g:y)},0)});const C=()=>{const e=document.activeElement;return!!e&&(c.contains(e)&&!v.contains(e))};c.addEventListener("focusin",()=>{C()&&(k(),P&&window.clearTimeout(P))},e),c.addEventListener("focusout",()=>{window.setTimeout(()=>{c.contains(document.activeElement)||E()||L()},0)},e),c.addEventListener("keydown",()=>{_="keyboard",C()?(k(),P&&window.clearTimeout(P)):E()&&(k(),L(g))},e),f?c.addEventListener("pointerdown",()=>{_="pointer",k(),L(y)},e):(c.addEventListener("pointermove",S,e),c.addEventListener("pointerenter",S,e),v.addEventListener("pointerenter",S,e),v.addEventListener("pointermove",S,e),v.addEventListener("pointerleave",()=>L(y),e));const x=O(v,p);c.appendChild(d),c.appendChild(v);const j=[];n.forEach(e=>{const i=e.create(t);i.dataset.controlId=e.id,x.place(e.placement,i),j.push(e)});const M={wrapper:c,mediaContainer:d,controlsRoot:v,placeholder:o,grid:x};pe(t,c),c.addEventListener("click",async e=>{if(w(t).active?.fullscreenVideoEl)return;const i=e.target;if(i&&v.contains(i))return;if(i&&i!==c&&i.closest('button, [role="button"], a'))return;!t.media.paused&&!t.media.ended?(b?.flashPause(350),t.pause()):await t.play().catch(()=>{})},e);const R=t.events.on("playing",()=>L(y)),I=t.events.on("pause",()=>k()),q=t.events.on("ended",()=>k()),D=t.events.on("player:destroy",()=>{try{j.forEach(e=>e.destroy?.())}catch{}try{c.replaceWith(i)}catch{}try{o.remove()}catch{}try{R?.(),I?.(),q?.(),$(),B(),D()}catch{}}),$=t.events.on("ui:addElement",e=>{if(!e?.el)return;const t=e.placement||{v:"bottom",h:"right"};M.grid?.place(t,e.el)}),B=t.events.on("ui:addControl",e=>{const i=e?.control;if(!i)return;const n=i.create(t);n.dataset.controlId=i.id,M.grid?.place(i.placement,n),e.el=n,j.push(i)});return M}function ve(e){return{play:ne,volume:de,captions:X,fullscreen:te,currentTime:K,duration:Y,time:ce,progress:re,settings:oe}[e]}function fe(e){const t=function(e){if(!e||"object"!=typeof e)return[];const t=new Set;for(const i of Object.keys(e)){const n=e[i];if(Array.isArray(n))for(const e of n)"string"==typeof e&&t.add(e)}return[...t]}(e);for(const e of t){const t=ve(e);t&&k(e,t)}}function ye(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 ge{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(){this.config.controls&&fe(this.config.controls),this.createdPlugins=this.createDetectedPlugins();for(const e of this.createdPlugins)ye(e.entry,ge);this.core=new v(this.media,{...this.config,plugins:this.createdPlugins.map(e=>e.plugin)});const e=L(this.config.controls);be(this.core,this.media,e),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)}set src(e){if(!this.core)throw new Error("OpenPlayer.src must be set after init()");this.core.src=e}createDetectedPlugins(){const e=window.OpenPlayerPlugins||{};return Object.keys(e).map(t=>{const i=e[t];if(!i?.factory)return;const n=(s=i.defaults,r=this.config?.[t],s?r?"object"!=typeof s||"object"!=typeof r?r:{...s,...r}:{...s}:r??{});var s,r;const a=i.factory(n);return{entry:{...i,name:t},plugin:a,cfg:n}}).filter(Boolean)}}const we=ge;try{Object.assign(we,P)}catch{}return ge});
2
2
  //# sourceMappingURL=openplayer.js.map