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