vidply 1.0.25 → 1.0.26
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 +5 -0
- package/dist/dev/{vidply.HLSRenderer-PNP5OPES.js → vidply.HLSRenderer-X46P47LY.js} +7 -1
- package/dist/dev/{vidply.HLSRenderer-PNP5OPES.js.map → vidply.HLSRenderer-X46P47LY.js.map} +2 -2
- package/dist/dev/vidply.esm.js +5 -2
- package/dist/dev/vidply.esm.js.map +2 -2
- package/dist/legacy/vidply.js +10 -1
- package/dist/legacy/vidply.js.map +2 -2
- package/dist/legacy/vidply.min.js +1 -1
- package/dist/legacy/vidply.min.meta.json +5 -5
- package/dist/prod/{vidply.HLSRenderer-4PW35TCX.min.js → vidply.HLSRenderer-LDXSMWTI.min.js} +1 -1
- package/dist/prod/vidply.esm.min.js +1 -1
- package/dist/vidply.css +1 -1
- package/dist/vidply.esm.min.meta.json +8 -8
- package/dist/vidply.min.css +1 -1
- package/package.json +1 -1
- package/src/core/Player.js +7 -2
|
@@ -290,7 +290,7 @@
|
|
|
290
290
|
"format": "esm"
|
|
291
291
|
},
|
|
292
292
|
"src/renderers/HLSRenderer.js": {
|
|
293
|
-
"bytes":
|
|
293
|
+
"bytes": 9605,
|
|
294
294
|
"imports": [
|
|
295
295
|
{
|
|
296
296
|
"path": "src/renderers/HTML5Renderer.js",
|
|
@@ -301,7 +301,7 @@
|
|
|
301
301
|
"format": "esm"
|
|
302
302
|
},
|
|
303
303
|
"src/core/Player.js": {
|
|
304
|
-
"bytes":
|
|
304
|
+
"bytes": 208550,
|
|
305
305
|
"imports": [
|
|
306
306
|
{
|
|
307
307
|
"path": "src/utils/EventEmitter.js",
|
|
@@ -513,13 +513,13 @@
|
|
|
513
513
|
"bytesInOutput": 4334
|
|
514
514
|
},
|
|
515
515
|
"src/renderers/HLSRenderer.js": {
|
|
516
|
-
"bytesInOutput":
|
|
516
|
+
"bytesInOutput": 5771
|
|
517
517
|
},
|
|
518
518
|
"src/utils/EventEmitter.js": {
|
|
519
519
|
"bytesInOutput": 436
|
|
520
520
|
},
|
|
521
521
|
"src/core/Player.js": {
|
|
522
|
-
"bytesInOutput":
|
|
522
|
+
"bytesInOutput": 77631
|
|
523
523
|
},
|
|
524
524
|
"src/controls/ControlBar.js": {
|
|
525
525
|
"bytesInOutput": 58454
|
|
@@ -540,7 +540,7 @@
|
|
|
540
540
|
"bytesInOutput": 1877
|
|
541
541
|
}
|
|
542
542
|
},
|
|
543
|
-
"bytes":
|
|
543
|
+
"bytes": 298543
|
|
544
544
|
}
|
|
545
545
|
}
|
|
546
546
|
}
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* (c) 2025 Matthias Peltzer
|
|
4
4
|
* Released under GPL-2.0-or-later License
|
|
5
5
|
*/
|
|
6
|
-
var s=class{constructor(e){this.player=e,this.media=e.element,this.hls=null}async init(){this.canPlayNatively()?(this.player.log("Using native HLS support"),await this.initNative()):(this.player.log("Using hls.js for HLS support"),await this.initHlsJs())}canPlayNatively(){let e=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),t=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream;return!e&&!t?!1:document.createElement("video").canPlayType("application/vnd.apple.mpegurl")!==""}async initNative(){let e=(await import("./vidply.HTML5Renderer-XJCSUETP.min.js")).HTML5Renderer,t=new e(this.player);await t.init(),Object.getOwnPropertyNames(Object.getPrototypeOf(t)).forEach(i=>{i!=="constructor"&&typeof t[i]=="function"&&(this[i]=t[i].bind(t))})}async initHlsJs(){if(this.media.controls=!1,this.media.removeAttribute("controls"),window.Hls||await this.loadHlsJs(),!window.Hls.isSupported())throw new Error("HLS is not supported in this browser");this.hls=new window.Hls({debug:this.player.options.debug,enableWorker:!0,lowLatencyMode:!1,backBufferLength:90,maxBufferLength:30,maxMaxBufferLength:600,maxBufferSize:60*1e3*1e3,maxBufferHole:.5,manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:4,manifestLoadingRetryDelay:1e3,manifestLoadingMaxRetryTimeout:64e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,levelLoadingMaxRetryTimeout:64e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingMaxRetryTimeout:64e3}),this.hls.attachMedia(this.media);let e,t=this.player.element.querySelector("source");if(t?e=t.getAttribute("src"):e=this.player.element.getAttribute("src")||this.player.element.src,this.player.log(`Loading HLS source: ${e}`,"log"),!e)throw new Error("No HLS source found");this.hls.loadSource(e),this.attachHlsEvents(),this.attachMediaEvents()}async loadHlsJs(){return new Promise((e,t)=>{let i=document.createElement("script");i.src="https://cdn.jsdelivr.net/npm/hls.js@latest",i.onload=()=>e(),i.onerror=()=>t(new Error("Failed to load hls.js")),document.head.appendChild(i)})}attachHlsEvents(){this.hls.on(window.Hls.Events.MANIFEST_PARSED,(e,t)=>{this.player.log("HLS manifest loaded, found "+t.levels.length+" quality levels"),this.player.emit("hlsmanifestparsed",t)}),this.hls.on(window.Hls.Events.LEVEL_SWITCHED,(e,t)=>{this.player.log("HLS level switched to "+t.level),this.player.emit("hlslevelswitched",t)}),this.hls.on(window.Hls.Events.ERROR,(e,t)=>{this.handleHlsError(t)}),this.hls.on(window.Hls.Events.FRAG_BUFFERED,()=>{this.player.state.buffering=!1})}attachMediaEvents(){this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume)}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.media.addEventListener("error",()=>{this.player.handleError(this.media.error)})}handleHlsError(e){if(this.player.log(`HLS Error - Type: ${e.type}, Details: ${e.details}, Fatal: ${e.fatal}`,"warn"),e.response&&this.player.log(`Response code: ${e.response.code}, URL: ${e.response.url}`,"warn"),e.fatal)switch(e.type){case window.Hls.ErrorTypes.NETWORK_ERROR:this.player.log("Fatal network error, trying to recover...","error"),this.player.log(`Network error details: ${e.details}`,"error"),setTimeout(()=>{this.hls.startLoad()},1e3);break;case window.Hls.ErrorTypes.MEDIA_ERROR:this.player.log("Fatal media error, trying to recover...","error"),this.hls.recoverMediaError();break;default:this.player.log("Fatal error, cannot recover","error"),this.player.handleError(new Error(`HLS Error: ${e.type} - ${e.details}`)),this.hls.destroy();break}else this.player.log("Non-fatal HLS error: "+e.details,"warn")}play(){let e=window.scrollX,t=window.scrollY,i=this.media.play();window.scrollTo(e,t),i!==void 0&&i.catch(a=>{this.player.log("Play failed:",a,"warn")})}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}switchQuality(e){this.hls&&(this.hls.currentLevel=e)}getQualities(){return this.hls&&this.hls.levels?this.hls.levels.map((e,t)=>({index:t,height:e.height,width:e.width,bitrate:e.bitrate,name:`${e.height}p`})):[]}destroy(){this.hls&&(this.hls.destroy(),this.hls=null)}};export{s as HLSRenderer};
|
|
6
|
+
var s=class{constructor(e){this.player=e,this.media=e.element,this.hls=null}async init(){this.canPlayNatively()?(this.player.log("Using native HLS support"),await this.initNative()):(this.player.log("Using hls.js for HLS support"),await this.initHlsJs())}canPlayNatively(){let e=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),t=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream;return!e&&!t?!1:document.createElement("video").canPlayType("application/vnd.apple.mpegurl")!==""}async initNative(){let e=(await import("./vidply.HTML5Renderer-XJCSUETP.min.js")).HTML5Renderer,t=new e(this.player);await t.init(),Object.getOwnPropertyNames(Object.getPrototypeOf(t)).forEach(i=>{i!=="constructor"&&typeof t[i]=="function"&&(this[i]=t[i].bind(t))})}async initHlsJs(){if(this.media.controls=!1,this.media.removeAttribute("controls"),window.Hls||await this.loadHlsJs(),!window.Hls.isSupported())throw new Error("HLS is not supported in this browser");this.hls=new window.Hls({debug:this.player.options.debug,enableWorker:!0,lowLatencyMode:!1,backBufferLength:90,maxBufferLength:30,maxMaxBufferLength:600,maxBufferSize:60*1e3*1e3,maxBufferHole:.5,manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:4,manifestLoadingRetryDelay:1e3,manifestLoadingMaxRetryTimeout:64e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,levelLoadingMaxRetryTimeout:64e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingMaxRetryTimeout:64e3}),this.hls.attachMedia(this.media);let e,t=this.player.element.querySelector("source");if(t?e=t.getAttribute("src"):e=this.player.element.getAttribute("src")||this.player.element.src,this.player.log(`Loading HLS source: ${e}`,"log"),!e)throw new Error("No HLS source found");this.hls.loadSource(e),this.attachHlsEvents(),this.attachMediaEvents()}async loadHlsJs(){return new Promise((e,t)=>{let i=document.createElement("script");i.src="https://cdn.jsdelivr.net/npm/hls.js@latest",i.onload=()=>e(),i.onerror=()=>t(new Error("Failed to load hls.js")),document.head.appendChild(i)})}attachHlsEvents(){this.hls.on(window.Hls.Events.MANIFEST_PARSED,(e,t)=>{this.player.log("HLS manifest loaded, found "+t.levels.length+" quality levels"),this.player.emit("hlsmanifestparsed",t)}),this.hls.on(window.Hls.Events.LEVEL_SWITCHED,(e,t)=>{this.player.log("HLS level switched to "+t.level),this.player.emit("hlslevelswitched",t)}),this.hls.on(window.Hls.Events.ERROR,(e,t)=>{this.handleHlsError(t)}),this.hls.on(window.Hls.Events.FRAG_BUFFERED,()=>{this.player.state.buffering=!1})}attachMediaEvents(){this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume)}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.media.addEventListener("error",()=>{this.player.handleError(this.media.error)})}handleHlsError(e){if(this.player.log(`HLS Error - Type: ${e.type}, Details: ${e.details}, Fatal: ${e.fatal}`,"warn"),e.response&&this.player.log(`Response code: ${e.response.code}, URL: ${e.response.url}`,"warn"),e.fatal)switch(e.type){case window.Hls.ErrorTypes.NETWORK_ERROR:this.player.log("Fatal network error, trying to recover...","error"),this.player.log(`Network error details: ${e.details}`,"error"),setTimeout(()=>{this.hls.startLoad()},1e3);break;case window.Hls.ErrorTypes.MEDIA_ERROR:this.player.log("Fatal media error, trying to recover...","error"),this.hls.recoverMediaError();break;default:this.player.log("Fatal error, cannot recover","error"),this.player.handleError(new Error(`HLS Error: ${e.type} - ${e.details}`)),this.hls.destroy();break}else this.player.log("Non-fatal HLS error: "+e.details,"warn")}play(){let e=window.scrollX,t=window.scrollY,i=this.media.play();window.scrollTo(e,t),i!==void 0&&i.catch(a=>{this.player.log("Play failed:",a,"warn")})}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}switchQuality(e){this.hls&&(this.hls.currentLevel=e)}getQualities(){return this.hls&&this.hls.levels?this.hls.levels.map((e,t)=>({index:t,height:e.height,width:e.width,bitrate:e.bitrate,name:`${e.height}p`})):[]}getCurrentQuality(){return this.hls?this.hls.currentLevel:-1}destroy(){this.hls&&(this.hls.destroy(),this.hls=null)}};export{s as HLSRenderer};
|
|
@@ -9,7 +9,7 @@ import{a as ee}from"./vidply.chunk-BQBGEJF7.min.js";import{a as u,b as d,c as x,
|
|
|
9
9
|
width: 1px;
|
|
10
10
|
height: 1px;
|
|
11
11
|
overflow: hidden;
|
|
12
|
-
`,document.body.appendChild(i)),i.textContent="",setTimeout(()=>{i.textContent=e},100)}updateShortcut(e,t){Array.isArray(t)&&(this.shortcuts[e]=t)}destroy(){}};var ne=0,F=class P extends W{constructor(e,t={}){if(super(),this.element=typeof e=="string"?document.querySelector(e):e,!this.element)throw new Error("VidPly: Element not found");if(ne++,this.instanceId=ne,this.element.tagName!=="VIDEO"&&this.element.tagName!=="AUDIO"){let s=t.mediaType||"video",n=document.createElement(s);Array.from(this.element.attributes).forEach(o=>{o.name!=="id"&&o.name!=="class"&&!o.name.startsWith("data-")&&n.setAttribute(o.name,o.value)}),this.element.querySelectorAll("track").forEach(o=>{n.appendChild(o.cloneNode(!0))}),this.element.innerHTML="",this.element.appendChild(n),this.element=n}this.options={width:null,height:null,poster:null,responsive:!0,fillContainer:!1,autoplay:!1,loop:!1,muted:!1,volume:.8,playbackSpeed:1,preload:"metadata",startTime:0,playsInline:!0,controls:!0,hideControlsDelay:3e3,playPauseButton:!0,progressBar:!0,currentTime:!0,duration:!0,volumeControl:!0,muteButton:!0,chaptersButton:!0,qualityButton:!0,captionStyleButton:!0,speedButton:!0,captionsButton:!0,transcriptButton:!0,fullscreenButton:!0,pipButton:!1,seekInterval:10,seekIntervalLarge:30,captions:!0,captionsDefault:!1,captionsFontSize:"100%",captionsFontFamily:"sans-serif",captionsColor:"#FFFFFF",captionsBackgroundColor:"#000000",captionsOpacity:.8,audioDescription:!0,audioDescriptionSrc:null,audioDescriptionButton:!0,signLanguage:!0,signLanguageSrc:null,signLanguageButton:!0,signLanguagePosition:"bottom-right",transcript:!1,transcriptPosition:"external",transcriptContainer:null,keyboard:!0,keyboardShortcuts:{"play-pause":[" ","p","k"],"volume-up":["ArrowUp"],"volume-down":["ArrowDown"],"seek-forward":["ArrowRight"],"seek-backward":["ArrowLeft"],mute:["m"],fullscreen:["f"],captions:["c"],"caption-style-menu":["a"],"speed-up":[">"],"speed-down":["<"],"speed-menu":["s"],"quality-menu":["q"],"chapters-menu":["j"],"transcript-toggle":["t"]},ariaLabels:{},screenReaderAnnouncements:!0,highContrast:!1,focusHighlight:!0,metadataAlerts:{},metadataHashtags:{},language:"en",languages:["en"],debug:!1,classPrefix:"vidply",iconType:"svg",pauseOthersOnPlay:!0,onReady:null,onPlay:null,onPause:null,onEnded:null,onTimeUpdate:null,onVolumeChange:null,onError:null,...t},this.options.metadataAlerts=this.options.metadataAlerts||{},this.options.metadataHashtags=this.options.metadataHashtags||{},this.storage=new I("vidply");let i=this.storage.getPlayerPreferences();i&&(i.volume!==void 0&&(this.options.volume=i.volume),i.playbackSpeed!==void 0&&(this.options.playbackSpeed=i.playbackSpeed),i.muted!==void 0&&(this.options.muted=i.muted)),this.state={ready:!1,playing:!1,paused:!0,ended:!1,buffering:!1,seeking:!1,muted:this.options.muted,volume:this.options.volume,currentTime:0,duration:0,playbackSpeed:this.options.playbackSpeed,fullscreen:!1,pip:!1,captionsEnabled:this.options.captionsDefault,currentCaption:null,controlsVisible:!0,audioDescriptionEnabled:!1,signLanguageEnabled:!1},this.originalSrc=null,this.audioDescriptionSrc=this.options.audioDescriptionSrc,this.signLanguageSrc=this.options.signLanguageSrc,this.signLanguageSources=this.options.signLanguageSources||{},this.currentSignLanguage=null,this.signLanguageVideo=null,this.audioDescriptionSourceElement=null,this.originalAudioDescriptionSource=null,this.audioDescriptionCaptionTracks=[],this._audioDescriptionDesiredState=!1,this._textTracksCache=null,this._textTracksDirty=!0,this._sourceElementsCache=null,this._sourceElementsDirty=!0,this._trackElementsCache=null,this._trackElementsDirty=!0,this.timeouts=new Set,this.container=null,this.renderer=null,this.controlBar=null,this.captionManager=null,this.keyboardManager=null,this.settingsDialog=null,this.metadataCueChangeHandler=null,this.metadataAlertHandlers=new Map,this.init()}async init(){try{if(this.log("Initializing VidPly player"),this.options.languageFiles)try{await d.loadLanguagesFromUrls(this.options.languageFiles)}catch(t){console.warn("Failed to load some language files:",t)}if(this.options.languageFile&&this.options.languageFileUrl)try{await d.loadLanguageFromUrl(this.options.languageFile,this.options.languageFileUrl),this.log(`Custom language file loaded for ${this.options.languageFile}`)}catch(t){console.warn(`Failed to load language file for ${this.options.languageFile}:`,t)}if(!this.options.language||this.options.language==="en"){let t=this.detectHtmlLanguage();t&&(this.options.language=t,this.log(`Auto-detected language from HTML: ${t}`))}this.options.language||(this.options.language="en"),await d.ensureLanguage(this.options.language),d.setLanguage(this.options.language),this.createContainer(),this.element.src||this.element.querySelector("source")?.src?await this.initializeRenderer():this.log("No initial source - waiting for playlist or manual load"),this.options.controls&&(this.controlBar=new _(this),this.videoWrapper.appendChild(this.controlBar.element)),this.options.captions&&(this.captionManager=new R(this)),this.options.transcript&&await this.ensureTranscriptManager(),this.setupMetadataHandling(),this.options.keyboard&&(this.keyboardManager=new K(this)),this.setupResponsiveHandlers(),this.options.startTime>0&&this.seek(this.options.startTime),requestAnimationFrame(()=>{this.options.muted?this.mute():this.renderer&&this.renderer.media&&this.renderer.setMuted(!1),this.options.volume!==.8?this.setVolume(this.options.volume):this.renderer&&this.renderer.media&&this.renderer.setVolume(this.options.volume)}),this.state.ready=!0,this.emit("ready"),this.options.onReady&&this.options.onReady.call(this),this.options.autoplay&&this.play(),this.log("Player initialized successfully")}catch(e){this.handleError(e)}}async ensureTranscriptManager(){if(this.transcriptManager)return this.transcriptManager;if(!this.options.transcript&&!this.options.transcriptButton)return null;let e=await import("./vidply.TranscriptManager-UZ6DUFB6.min.js"),t=e.TranscriptManager||e.default;return t?(this.transcriptManager=new t(this),this.transcriptManager):null}async toggleTranscript(){let e=await this.ensureTranscriptManager();e&&(e.toggleTranscript(),this.controlBar&&this.controlBar.updateTranscriptButton())}detectHtmlLanguage(){let e=document.documentElement.lang||document.documentElement.getAttribute("lang");if(!e)return null;let t=e.toLowerCase().split("-")[0];return d.translations[t]?t:(this.log(`Language "${e}" not available, using English as fallback`),null)}createContainer(){let e=this.instanceId>1?`${d.t("player.label")} ${this.instanceId}`:d.t("player.label");this.container=u.createElement("div",{className:`${this.options.classPrefix}-player`,attributes:{role:"application","aria-label":e,tabindex:"0"}});let t=this.element.tagName.toLowerCase();this.container.classList.add(`${this.options.classPrefix}-${t}`),this.options.responsive&&this.container.classList.add(`${this.options.classPrefix}-responsive`),this.videoWrapper=u.createElement("div",{className:`${this.options.classPrefix}-video-wrapper`}),this.element.parentNode.insertBefore(this.container,this.element),this.element.tagName==="AUDIO"&&this.options.poster&&(this.trackArtworkElement=u.createElement("div",{className:`${this.options.classPrefix}-track-artwork`,attributes:{"aria-hidden":"true"}}),this.trackArtworkElement.style.backgroundImage=`url(${this.options.poster})`,this.container.appendChild(this.trackArtworkElement)),this.container.appendChild(this.videoWrapper),this.videoWrapper.appendChild(this.element),this.element.controls=!1,this.element.removeAttribute("controls"),this.element.setAttribute("tabindex","-1"),this.element.style.width="100%",this.element.style.height="100%",this.element.tagName==="VIDEO"&&this.options.playsInline&&(this.element.setAttribute("playsinline",""),this.element.playsInline=!0),this.options.width&&(this.container.style.width=typeof this.options.width=="number"?`${this.options.width}px`:this.options.width),this.options.height&&(this.container.style.height=typeof this.options.height=="number"?`${this.options.height}px`:this.options.height),this.options.poster&&this.element.tagName==="VIDEO"&&(this.element.poster=this.resolvePosterPath(this.options.poster)),this.element.tagName==="VIDEO"&&this.createPlayButtonOverlay(),this.element.vidply=this,P.instances.push(this),this.element.style.cursor="pointer",this.element.addEventListener("click",i=>{i.target===this.element&&this.toggle()}),this.on("play",()=>{this.hidePosterOverlay()}),this.on("timeupdate",()=>{this.state.currentTime>0&&this.hidePosterOverlay()}),this.element.addEventListener("loadeddata",()=>{(this.state.playing||this.state.currentTime>0)&&this.hidePosterOverlay()},{once:!0})}createPlayButtonOverlay(){this.playButtonOverlay=G(),this.playButtonOverlay.addEventListener("click",()=>{this.toggle()}),this.videoWrapper.appendChild(this.playButtonOverlay),this.on("play",()=>{this.playButtonOverlay.style.opacity="0",this.playButtonOverlay.style.pointerEvents="none"}),this.on("pause",()=>{this.playButtonOverlay.style.opacity="1",this.playButtonOverlay.style.pointerEvents="auto",this.positionPlayOverlayOnMobile()}),this.on("ended",()=>{this.playButtonOverlay.style.opacity="1",this.playButtonOverlay.style.pointerEvents="auto",this.positionPlayOverlayOnMobile()}),this.debouncedPositionPlayOverlay=U(()=>{this.positionPlayOverlayOnMobile()},150),window.addEventListener("resize",this.debouncedPositionPlayOverlay),this.on("loadedmetadata",()=>{this.positionPlayOverlayOnMobile()}),this.on("enterfullscreen",()=>{O(()=>this.positionPlayOverlayOnMobile(),100)}),this.on("exitfullscreen",()=>{O(()=>this.positionPlayOverlayOnMobile(),100)})}positionPlayOverlayOnMobile(){if(!this.playButtonOverlay||this.element.tagName!=="VIDEO")return;if(!Q()){this.playButtonOverlay.style.top="";return}let t=this.element.getBoundingClientRect(),i=this.videoWrapper.getBoundingClientRect(),s=t.top-i.top+t.height/2;this.playButtonOverlay.style.top=`${s}px`}async initializeRenderer(){let e=this.element.src||this.element.querySelector("source")?.src;if(!e)throw new Error("No media source found");let t=this.sourceElements;for(let n of t){let r=n.getAttribute("data-desc-src"),o=n.getAttribute("data-orig-src");if(r||o){if(this.audioDescriptionSourceElement||(this.audioDescriptionSourceElement=n),o)this.originalAudioDescriptionSource||(this.originalAudioDescriptionSource=o),this.originalSrc||(this.originalSrc=o);else{let h=n.getAttribute("src");!this.originalAudioDescriptionSource&&h&&(this.originalAudioDescriptionSource=h),!this.originalSrc&&h&&(this.originalSrc=h)}r&&!this.audioDescriptionSrc&&(this.audioDescriptionSrc=r)}}this.trackElements.forEach(n=>{let r=n.getAttribute("kind"),o=n.getAttribute("data-desc-src");(r==="captions"||r==="subtitles"||r==="chapters")&&o&&(this.audioDescriptionCaptionTracks.push({trackElement:n,originalSrc:n.getAttribute("src"),describedSrc:o,originalTrackSrc:n.getAttribute("data-orig-src")||n.getAttribute("src"),explicit:!0}),this.log(`Found explicit described ${r} track: ${n.getAttribute("src")} -> ${o}`))}),this.originalSrc||(this.originalSrc=e);let s=ee;if(e.includes("youtube.com")||e.includes("youtu.be")){let n=await import("./vidply.YouTubeRenderer-DGKKWB5M.min.js");s=n.YouTubeRenderer||n.default}else if(e.includes("vimeo.com")){let n=await import("./vidply.VimeoRenderer-P3PU27S7.min.js");s=n.VimeoRenderer||n.default}else if(e.includes(".m3u8")){let n=await import("./vidply.HLSRenderer-4PW35TCX.min.js");s=n.HLSRenderer||n.default}this.log(`Using ${s?.name||"HTML5Renderer"} renderer`),this.renderer=new s(this),await this.renderer.init(),this.invalidateTrackCache()}get textTracks(){return(!this._textTracksCache||this._textTracksDirty)&&(this._textTracksCache=Array.from(this.element.textTracks||[]),this._textTracksDirty=!1),this._textTracksCache}get sourceElements(){return(!this._sourceElementsCache||this._sourceElementsDirty)&&(this._sourceElementsCache=Array.from(this.element.querySelectorAll("source")),this._sourceElementsDirty=!1),this._sourceElementsCache}get trackElements(){return(!this._trackElementsCache||this._trackElementsDirty)&&(this._trackElementsCache=Array.from(this.element.querySelectorAll("track")),this._trackElementsDirty=!1),this._trackElementsCache}invalidateTrackCache(){this._textTracksDirty=!0,this._trackElementsDirty=!0,this._sourceElementsDirty=!0}findTextTrack(e,t=null){let i=this.textTracks;return t?i.find(s=>s.kind===e&&s.language===t):i.find(s=>s.kind===e)}findSourceElement(e,t=null){let i=this.sourceElements;return t?i.find(s=>s.getAttribute(e)===t):i.find(s=>s.hasAttribute(e))}findTrackElement(e){return this.trackElements.find(t=>t.track===e)}resolvePosterPath(e){if(!e||e.match(/^(https?:|\/)/))return e;try{return new URL(e,window.location.href).href}catch{return e}}showPosterOverlay(){if(!this.videoWrapper||this.element.tagName!=="VIDEO")return;let e=this.element.getAttribute("poster")||this.element.poster||this.options.poster;if(!e)return;let t=this.resolvePosterPath(e);this.videoWrapper.style.setProperty("--vidply-poster-image",`url("${t}")`),this.videoWrapper.classList.add("vidply-forced-poster")}hidePosterOverlay(){this.videoWrapper&&(this.videoWrapper.classList.remove("vidply-forced-poster"),this.videoWrapper.style.removeProperty("--vidply-poster-image"))}setManagedTimeout(e,t){let i=setTimeout(()=>{this.timeouts.delete(i),e()},t);return this.timeouts.add(i),i}clearManagedTimeout(e){e&&(clearTimeout(e),this.timeouts.delete(e))}async load(e){try{this.log("Loading new media:",e.src),this.renderer&&this.pause();let t=window.scrollX||window.pageXOffset,i=window.scrollY||window.pageYOffset;this.trackElements.forEach(h=>h.remove()),this.invalidateTrackCache(),this.element.src=e.src,e.type&&(this.element.type=e.type),e.poster&&this.element.tagName==="VIDEO"&&(this.element.poster=this.resolvePosterPath(e.poster)),e.tracks&&e.tracks.length>0&&(e.tracks.forEach(h=>{let l=document.createElement("track");l.src=h.src,l.kind=h.kind||"captions",l.srclang=h.srclang||"en",l.label=h.label||h.srclang,h.default&&(l.default=!0);let a=this.element.firstChild;a&&a.nodeType===Node.ELEMENT_NODE&&a.tagName!=="TRACK"?this.element.insertBefore(l,a):this.element.appendChild(l)}),this.invalidateTrackCache());let n=this.state.signLanguageEnabled,r=this.state.audioDescriptionEnabled;this.audioDescriptionSrc=e.audioDescriptionSrc||null,this.signLanguageSrc=e.signLanguageSrc||null,this.originalSrc=e.src,r&&this.disableAudioDescription(),n&&this.disableSignLanguage();let o=this.shouldChangeRenderer(e.src);if(o&&this.renderer&&(this.renderer.destroy(),this.renderer=null),!this.renderer||o?await this.initializeRenderer():(this.renderer.media=this.element,this.element.load()),window.scrollTo(t,i),this.captionManager&&(this.captionManager.destroy(),this.captionManager=new R(this)),this.transcriptManager){let h=this.transcriptManager.isVisible;this.transcriptManager.destroy(),this.transcriptManager=null,await this.ensureTranscriptManager(),h&&this.controlBar&&this.controlBar.hasCaptionTracks()&&this.transcriptManager?.showTranscript()}this.controlBar&&this.updateControlBar(),window.scrollTo(t,i),n&&this.signLanguageSrc&&setTimeout(()=>{this.enableSignLanguage(),window.scrollTo(t,i)},150),r&&this.audioDescriptionSrc&&setTimeout(()=>{this.enableAudioDescription(),window.scrollTo(t,i)},150),this.emit("sourcechange",e),this.log("Media loaded successfully")}catch(t){this.handleError(t)}}updateControlBar(){if(!this.controlBar)return;let e=this.controlBar;e.element.innerHTML="",e.createControls(),e.attachEvents(),e.setupAutoHide(),e.setupOverflowDetection()}shouldChangeRenderer(e){if(!this.renderer)return!0;let t=e.includes("youtube.com")||e.includes("youtu.be"),i=e.includes("vimeo.com"),s=e.includes(".m3u8"),n=this.renderer.constructor.name;return!!(t&&n!=="YouTubeRenderer"||i&&n!=="VimeoRenderer"||s&&n!=="HLSRenderer"||!t&&!i&&!s&&n!=="HTML5Renderer")}play(){this.renderer&&this.renderer.play()}pause(){this.renderer&&this.renderer.pause()}stop(){this.pause(),this.seek(0)}toggle(){this.state.playing?this.pause():this.play()}seek(e){this.renderer&&this.renderer.seek(e)}seekForward(e=this.options.seekInterval){this.seek(Math.min(this.state.currentTime+e,this.state.duration))}seekBackward(e=this.options.seekInterval){this.seek(Math.max(this.state.currentTime-e,0))}setVolume(e){let t=Math.max(0,Math.min(1,e));this.renderer&&this.renderer.setVolume(t),this.state.volume=t,t>0&&this.state.muted&&(this.state.muted=!1,this.renderer&&this.renderer.setMuted(!1),this.emit("volumechange")),this.savePlayerPreferences()}getVolume(){return this.state.volume}mute(){this.renderer&&this.renderer.setMuted(!0),this.state.muted=!0,this.savePlayerPreferences(),this.emit("volumechange")}unmute(){this.renderer&&this.renderer.setMuted(!1),this.state.muted=!1,this.savePlayerPreferences(),this.emit("volumechange")}toggleMute(){this.state.muted?this.unmute():this.mute()}setPlaybackSpeed(e){let t=Math.max(.25,Math.min(2,e));this.renderer&&this.renderer.setPlaybackSpeed(t),this.state.playbackSpeed=t,this.savePlayerPreferences(),this.emit("playbackspeedchange",t)}getPlaybackSpeed(){return this.state.playbackSpeed}savePlayerPreferences(){this.storage.savePlayerPreferences({volume:this.state.volume,muted:this.state.muted,playbackSpeed:this.state.playbackSpeed})}enterFullscreen(){let e=this.container,t=null;if(/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1){this._enablePseudoFullscreen();return}e.requestFullscreen?t=e.requestFullscreen():e.webkitRequestFullscreen?t=e.webkitRequestFullscreen():e.mozRequestFullScreen?t=e.mozRequestFullScreen():e.msRequestFullscreen&&(t=e.msRequestFullscreen()),t&&t.catch&&t.catch(s=>{this.log("Fullscreen API failed, using pseudo-fullscreen:",s.message),this._enablePseudoFullscreen()}),!e.requestFullscreen&&!e.webkitRequestFullscreen&&!e.mozRequestFullScreen&&!e.msRequestFullscreen?this._enablePseudoFullscreen():(this.state.fullscreen=!0,this.container.classList.add(`${this.options.classPrefix}-fullscreen`),this.emit("fullscreenchange",!0))}exitFullscreen(){!!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)?document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen():this._disablePseudoFullscreen(),this.state.fullscreen=!1,this.container.classList.remove(`${this.options.classPrefix}-fullscreen`),this.emit("fullscreenchange",!1)}toggleFullscreen(){this.state.fullscreen?this.exitFullscreen():this.enterFullscreen()}_enablePseudoFullscreen(){this.state.fullscreen=!0,this.container.classList.add(`${this.options.classPrefix}-fullscreen`),this._originalScrollX=window.scrollX||window.pageXOffset,this._originalScrollY=window.scrollY||window.pageYOffset,this._originalBodyOverflow=document.body.style.overflow,this._originalBodyPosition=document.body.style.position,this._originalBodyWidth=document.body.style.width,this._originalBodyHeight=document.body.style.height,this._originalHtmlOverflow=document.documentElement.style.overflow,document.body.style.overflow="hidden",document.body.style.width="100%",document.body.style.height="100%",document.documentElement.style.overflow="hidden",this._originalViewport=document.querySelector('meta[name="viewport"]')?.getAttribute("content");let e=document.querySelector('meta[name="viewport"]');e&&e.setAttribute("content","width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"),window.scrollTo(0,0),this.emit("fullscreenchange",!0),this.emit("enterfullscreen")}_disablePseudoFullscreen(){if(this._originalBodyOverflow!==void 0&&(document.body.style.overflow=this._originalBodyOverflow,delete this._originalBodyOverflow),this._originalBodyPosition!==void 0&&(document.body.style.position=this._originalBodyPosition,delete this._originalBodyPosition),this._originalBodyWidth!==void 0&&(document.body.style.width=this._originalBodyWidth,delete this._originalBodyWidth),this._originalBodyHeight!==void 0&&(document.body.style.height=this._originalBodyHeight,delete this._originalBodyHeight),this._originalHtmlOverflow!==void 0&&(document.documentElement.style.overflow=this._originalHtmlOverflow,delete this._originalHtmlOverflow),this._originalViewport!==void 0){let e=document.querySelector('meta[name="viewport"]');e&&e.setAttribute("content",this._originalViewport),delete this._originalViewport}this._originalScrollX!==void 0&&this._originalScrollY!==void 0&&(window.scrollTo(this._originalScrollX,this._originalScrollY),delete this._originalScrollX,delete this._originalScrollY),this.emit("exitfullscreen")}enterPiP(){this.element.requestPictureInPicture&&(this.element.requestPictureInPicture(),this.state.pip=!0,this.emit("pipchange",!0))}exitPiP(){document.pictureInPictureElement&&(document.exitPictureInPicture(),this.state.pip=!1,this.emit("pipchange",!1))}togglePiP(){this.state.pip?this.exitPiP():this.enterPiP()}enableCaptions(){this.captionManager&&(this.captionManager.enable(),this.state.captionsEnabled=!0)}disableCaptions(){this.captionManager&&(this.captionManager.disable(),this.state.captionsEnabled=!1)}toggleCaptions(){this.state.captionsEnabled?this.disableCaptions():this.enableCaptions()}async validateTrackExists(e){try{return(await fetch(e,{method:"HEAD",cache:"no-cache"})).ok}catch{return!1}}stripVTTFormatting(e){return e?e.replace(/<[^>]+>/g,"").replace(/\n/g," ").trim().toLowerCase():""}findMatchingCaptionTime(e,t){if(!e||!t||t.length===0)return null;let i=this.stripVTTFormatting(e);for(let s of t){if(s.kind!=="captions"&&s.kind!=="subtitles")continue;let n=s.track;if(!(!n||!n.cues))for(let r=0;r<n.cues.length;r++){let o=n.cues[r],h=this.stripVTTFormatting(o.text);if(h===i)return o.startTime;let l=i.split(/\s+/).filter(c=>c.length>2),a=h.split(/\s+/).filter(c=>c.length>2);if(l.length>0&&a.length>0&&l.filter(p=>a.includes(p)).length/l.length>=.8)return o.startTime}}return null}async enableAudioDescription(){let e=this.sourceElements.some(a=>a.getAttribute("data-desc-src")),t=this.audioDescriptionCaptionTracks.length>0;if(!this.audioDescriptionSrc&&!e&&!t){console.warn("VidPly: No audio description source, source elements, or tracks provided");return}let i=this.element.currentTime,s=this.state.playing,n=!s&&i===0,r=null;if(this.captionManager&&this.captionManager.currentTrack){let a=this.captionManager.currentTrack.track;if(a&&a.activeCues&&a.activeCues.length>0){let c=a.activeCues[0];r=this.stripVTTFormatting(c.text)}}let o=this.resolvePosterPath(this.element.getAttribute("poster")||this.element.poster||this.options.poster);n&&this.showPosterOverlay();let h=[];if(this.audioDescriptionSourceElement){let a=this.element.currentSrc||this.element.src,c=this.sourceElements,g=null,p=this.audioDescriptionSrc;for(let y of c){let v=y.getAttribute("src"),w=y.getAttribute("data-desc-src"),L=v?v.split("/").pop():"",S=a?a.split("/").pop():"";if(a&&(a===v||a.includes(v)||a.includes(L)||L&&S===L)){g=y,w?p=w:v&&(p=this.audioDescriptionSrc||p);break}}if(!g){g=this.audioDescriptionSourceElement;let y=g.getAttribute("data-desc-src");y&&(p=y)}if(this.audioDescriptionCaptionTracks.length>0){let y=this.audioDescriptionCaptionTracks.map(async L=>{if(L.trackElement&&L.describedSrc)if(L.explicit===!0)try{let S=await this.validateTrackExists(L.describedSrc);return{trackInfo:L,exists:S}}catch{return{trackInfo:L,exists:!1}}else return{trackInfo:L,exists:!1};return{trackInfo:L,exists:!1}}),v=await Promise.all(y),w=v.filter(L=>L.exists);if(w.length>0){let L=new Map;w.forEach(({trackInfo:T})=>{let B=T.trackElement.track;B?L.set(T,{wasShowing:B.mode==="showing",wasHidden:B.mode==="hidden"}):L.set(T,{wasShowing:!1,wasHidden:!1})});let S=w.map(({trackInfo:T})=>{let B=T.trackElement.getAttribute("src"),$=T.trackElement.parentNode,X=T.trackElement.nextSibling,A={};return Array.from(T.trackElement.attributes).forEach(D=>{A[D.name]=D.value}),{trackInfo:T,oldSrc:B,parent:$,nextSibling:X,attributes:A}});S.forEach(({trackInfo:T})=>{T.trackElement.remove()}),this.element.load(),await new Promise(T=>{setTimeout(()=>{S.forEach(({trackInfo:$,oldSrc:X,parent:A,nextSibling:D,attributes:H})=>{h.push($);let N=document.createElement("track");N.setAttribute("src",$.describedSrc),Object.keys(H).forEach(V=>{V!=="src"&&V!=="data-desc-src"&&N.setAttribute(V,H[V])}),D&&D.parentNode?A.insertBefore(N,D):A.appendChild(N),$.trackElement=N}),this.invalidateTrackCache();let B=()=>{this.setManagedTimeout(()=>{h.forEach($=>{let A=$.trackElement.track;if(A){let D=L.get($)||{wasShowing:!1,wasHidden:!1};A.mode="hidden";let H=()=>{D.wasShowing||D.wasHidden?A.mode="hidden":A.mode="disabled"};A.readyState>=2?H():(A.addEventListener("load",H,{once:!0}),A.addEventListener("error",H,{once:!0}))}})},300)};this.element.readyState>=1?setTimeout(B,200):(this.element.addEventListener("loadedmetadata",B,{once:!0}),setTimeout(B,2e3)),T()},100)});let C=v.length-w.length}}let f=this.sourceElements,b=[];f.forEach(y=>{let v=y.getAttribute("data-desc-src"),w=y.getAttribute("src");if(v){let L=y.getAttribute("type"),S=y.getAttribute("data-orig-src");S||(S=w),b.push({src:v,type:L,origSrc:S,descSrc:v})}else{let L=y.getAttribute("type"),S=y.getAttribute("src");b.push({src:S,type:L,origSrc:null,descSrc:null})}});let k=this.element.hasAttribute("src"),m=k?this.element.getAttribute("src"):null;k&&this.element.removeAttribute("src"),f.forEach(y=>{y.remove()}),b.forEach(y=>{let v=document.createElement("source");v.setAttribute("src",y.src),y.type&&v.setAttribute("type",y.type),y.origSrc&&v.setAttribute("data-orig-src",y.origSrc),y.descSrc&&v.setAttribute("data-desc-src",y.descSrc);let w=this.element.querySelector("track");w?this.element.insertBefore(v,w):this.element.appendChild(v)}),this._sourceElementsDirty=!0,this._sourceElementsCache=null,o&&this.element.tagName==="VIDEO"&&(this.element.poster=o),this.element.load(),await new Promise(y=>{let v=()=>{this.element.removeEventListener("loadedmetadata",v),y()};this.element.readyState>=1?y():this.element.addEventListener("loadedmetadata",v)}),await new Promise(y=>setTimeout(y,300)),(i>0||s)&&await new Promise(y=>{let v=()=>{this.element.removeEventListener("canplay",v),this.element.removeEventListener("canplaythrough",v),y()};this.element.readyState>=3?y():(this.element.addEventListener("canplay",v,{once:!0}),this.element.addEventListener("canplaythrough",v,{once:!0}),setTimeout(()=>{this.element.removeEventListener("canplay",v),this.element.removeEventListener("canplaythrough",v),y()},3e3))});let M=i;if(r&&this.captionManager&&this.captionManager.tracks.length>0){await new Promise(v=>setTimeout(v,500));let y=this.findMatchingCaptionTime(r,this.captionManager.tracks);y!==null&&(M=y,this.options.debug&&console.log(`[VidPly] Syncing via caption: ${i}s -> ${M}s`))}if(M>0&&(this.seek(M),await new Promise(y=>setTimeout(y,100))),s?(await this.play(),this.setManagedTimeout(()=>{this.hidePosterOverlay()},100)):(this.pause(),n||this.hidePosterOverlay()),!this._audioDescriptionDesiredState)return;this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled")}else{if(this.audioDescriptionCaptionTracks.length>0){let g=this.audioDescriptionCaptionTracks.map(async b=>{if(b.trackElement&&b.describedSrc)if(b.explicit===!0)try{let k=await this.validateTrackExists(b.describedSrc);return{trackInfo:b,exists:k}}catch{return{trackInfo:b,exists:!1}}else return{trackInfo:b,exists:!1};return{trackInfo:b,exists:!1}}),f=(await Promise.all(g)).filter(b=>b.exists);if(f.length>0){let b=new Map;f.forEach(({trackInfo:m})=>{let M=m.trackElement.track;M?b.set(m,{wasShowing:M.mode==="showing",wasHidden:M.mode==="hidden"}):b.set(m,{wasShowing:!1,wasHidden:!1})});let k=f.map(({trackInfo:m})=>{let M=m.trackElement.getAttribute("src"),y=m.trackElement.parentNode,v=m.trackElement.nextSibling,w={};return Array.from(m.trackElement.attributes).forEach(L=>{w[L.name]=L.value}),{trackInfo:m,oldSrc:M,parent:y,nextSibling:v,attributes:w}});k.forEach(({trackInfo:m})=>{m.trackElement.remove()}),this.element.load(),setTimeout(()=>{k.forEach(({trackInfo:M,oldSrc:y,parent:v,nextSibling:w,attributes:L})=>{h.push(M);let S=document.createElement("track");S.setAttribute("src",M.describedSrc),Object.keys(L).forEach(T=>{T!=="src"&&T!=="data-desc-src"&&S.setAttribute(T,L[T])});let C=v.firstChild;C&&C.nodeType===Node.ELEMENT_NODE&&C.tagName!=="TRACK"?v.insertBefore(S,C):w&&w.parentNode?v.insertBefore(S,w):v.appendChild(S),M.trackElement=S}),this.element.load();let m=()=>{setTimeout(()=>{h.forEach(M=>{let v=M.trackElement.track;if(v){let w=b.get(M)||{wasShowing:!1,wasHidden:!1};v.mode="hidden";let L=()=>{w.wasShowing||w.wasHidden?v.mode="hidden":v.mode="disabled"};v.readyState>=2?L():(v.addEventListener("load",L,{once:!0}),v.addEventListener("error",L,{once:!0}))}})},300)};this.element.readyState>=1?setTimeout(m,200):(this.element.addEventListener("loadedmetadata",m,{once:!0}),setTimeout(m,2e3))},100)}}let a=this.sourceElements;if(a.some(g=>g.getAttribute("data-desc-src"))){let g=[];a.forEach(p=>{let f=p.getAttribute("data-desc-src"),b=p.getAttribute("src");if(f){let k=p.getAttribute("type"),m=p.getAttribute("data-orig-src");m||(m=b),g.push({src:f,type:k,origSrc:m,descSrc:f})}else{let k=p.getAttribute("type"),m=p.getAttribute("src");g.push({src:m,type:k,origSrc:null,descSrc:null})}}),a.forEach(p=>{p.remove()}),g.forEach(p=>{let f=document.createElement("source");f.setAttribute("src",p.src),p.type&&f.setAttribute("type",p.type),p.origSrc&&f.setAttribute("data-orig-src",p.origSrc),p.descSrc&&f.setAttribute("data-desc-src",p.descSrc),this.element.appendChild(f)}),o&&this.element.tagName==="VIDEO"&&(this.element.poster=o),this.element.load(),this.invalidateTrackCache()}else o&&this.element.tagName==="VIDEO"&&(this.element.poster=o),this.element.src=this.audioDescriptionSrc}await new Promise(a=>{let c=()=>{this.element.removeEventListener("loadedmetadata",c),a()};this.element.readyState>=1?a():this.element.addEventListener("loadedmetadata",c)}),(i>0||s)&&await new Promise(a=>{let c=()=>{this.element.removeEventListener("canplay",c),this.element.removeEventListener("canplaythrough",c),a()};this.element.readyState>=3?a():(this.element.addEventListener("canplay",c,{once:!0}),this.element.addEventListener("canplaythrough",c,{once:!0}),setTimeout(()=>{this.element.removeEventListener("canplay",c),this.element.removeEventListener("canplaythrough",c),a()},3e3))}),this.element.tagName==="VIDEO"&&i===0&&!s&&this.element.readyState>=1&&(this.element.currentTime=.001,this.setManagedTimeout(()=>{this.element.currentTime=0},10));let l=i;if(r&&this.captionManager&&this.captionManager.tracks.length>0){await new Promise(c=>setTimeout(c,500));let a=this.findMatchingCaptionTime(r,this.captionManager.tracks);a!==null&&(l=a,this.options.debug&&console.log(`[VidPly] Syncing via caption: ${i}s -> ${l}s`))}if(l>0&&(this.seek(l),await new Promise(a=>setTimeout(a,100))),s?(await this.play(),this.setManagedTimeout(()=>{this.hidePosterOverlay()},100)):(this.pause(),n||this.hidePosterOverlay()),h.length>0&&this.captionManager){let a=this.state.captionsEnabled,c=null;if(this.captionManager.currentTrack){let p=this.captionManager.tracks.findIndex(f=>f.track===this.captionManager.currentTrack.track);p>=0&&(c={language:this.captionManager.tracks[p].language,kind:this.captionManager.tracks[p].kind})}setTimeout(()=>{if(this.captionManager.tracks=[],this.captionManager.loadTracks(),a&&c&&this.captionManager.tracks.length>0){let p=this.captionManager.tracks.findIndex(f=>f.language===c.language&&f.kind===c.kind);if(p>=0){let f=this.captionManager.tracks[p];if(f.track.readyState>=2)this.captionManager.enable(p);else{let b=()=>{f.track.removeEventListener("load",b),f.track.removeEventListener("error",b),this.captionManager&&this.captionManager.tracks.includes(f)&&this.captionManager.enable(p)};f.track.addEventListener("load",b,{once:!0}),f.track.addEventListener("error",b,{once:!0}),f.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(f)&&this.captionManager.enable(p)},1e3)}}else if(this.captionManager.tracks.length>0){let f=this.captionManager.tracks[0];if(f.track.readyState>=2)this.captionManager.enable(0);else{let b=()=>{f.track.removeEventListener("load",b),f.track.removeEventListener("error",b),this.captionManager&&this.captionManager.tracks.includes(f)&&this.captionManager.enable(0)};f.track.addEventListener("load",b,{once:!0}),f.track.addEventListener("error",b,{once:!0}),f.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(f)&&this.captionManager.enable(0)},1e3)}}}},600)}if(this.transcriptManager&&this.transcriptManager.isVisible){let a=typeof h<"u"?h:[];if(a.length>0){let c=()=>{this.invalidateTrackCache();let p=this.textTracks,f=a.map(m=>{let M=m.trackElement,y=M.getAttribute("src"),v=M.getAttribute("srclang"),w=M.getAttribute("kind"),L=p.find(S=>M.track===S);if(L||(L=p.find(S=>{if(S.language===v&&(S.kind===w||w==="captions"&&S.kind==="subtitles")){let C=this.findTrackElement(S);if(C&&C.getAttribute("src")===y)return!0}return!1})),L){let S=this.findTrackElement(L);if(S&&S.getAttribute("src")!==y)return null}return L}).filter(Boolean);if(f.length===0){this.setManagedTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},1e3);return}f.forEach(m=>{m.mode==="disabled"&&(m.mode="hidden")});let b=0,k=()=>{b++,b>=f.length&&this.setManagedTimeout(()=>{if(this.transcriptManager&&this.transcriptManager.loadTranscriptData){this.invalidateTrackCache();let m=this.textTracks,M=a.map(v=>v.describedSrc);(f.some(v=>{let w=this.findTrackElement(v);return w&&M.includes(w.getAttribute("src"))})||f.length>0)&&this.transcriptManager.loadTranscriptData()}},800)};f.forEach(m=>{m.mode==="disabled"&&(m.mode="hidden");let M=this.findTrackElement(m),y=M?M.getAttribute("src"):null,v=a.find(L=>{let S=L.trackElement;return S&&(S.track===m||S.getAttribute("srclang")===m.language&&S.getAttribute("kind")===m.kind)}),w=v?v.describedSrc:null;if(w&&y&&y!==w){k();return}if(m.readyState>=2&&m.cues&&m.cues.length>0)k();else{m.mode==="disabled"&&(m.mode="hidden");let L=()=>{this.setManagedTimeout(k,300)};m.readyState>=2?this.setManagedTimeout(()=>{m.cues&&m.cues.length>0?k():m.addEventListener("load",L,{once:!0})},100):(m.addEventListener("load",L,{once:!0}),m.addEventListener("error",()=>{k()},{once:!0}))}})};this.setManagedTimeout(()=>{this.element.readyState>=1?c():(this.element.addEventListener("loadedmetadata",c,{once:!0}),this.setManagedTimeout(c,2e3))},500),setTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},5e3)}else setTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},800)}n||this.hidePosterOverlay(),this._audioDescriptionDesiredState&&(this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled"))}async disableAudioDescription(){if(!this.originalSrc)return;let e=this.element.currentTime,t=this.state.playing,i=null;if(this.captionManager&&this.captionManager.currentTrack){let l=this.captionManager.currentTrack.track;if(l&&l.activeCues&&l.activeCues.length>0){let a=l.activeCues[0];i=this.stripVTTFormatting(a.text)}}let s=this.resolvePosterPath(this.element.getAttribute("poster")||this.element.poster||this.options.poster),n=[];if(this.audioDescriptionCaptionTracks.length>0){let l=this.audioDescriptionCaptionTracks.map(a=>{let c=a.trackElement;if(!c||!c.parentNode)return null;let g=c.parentNode,p=c.nextSibling,f={};return Array.from(c.attributes).forEach(b=>{f[b.name]=b.value}),{trackInfo:a,parent:g,nextSibling:p,attributes:f}}).filter(Boolean);l.forEach(({trackInfo:a})=>{a.trackElement&&a.trackElement.parentNode&&a.trackElement.remove()}),this.element.load(),await new Promise(a=>{setTimeout(()=>{l.forEach(({trackInfo:c,parent:g,nextSibling:p,attributes:f})=>{n.push(c);let b=document.createElement("track");b.setAttribute("src",c.originalTrackSrc),Object.keys(f).forEach(k=>{k!=="src"&&k!=="data-desc-src"&&b.setAttribute(k,f[k])}),c.describedSrc&&b.setAttribute("data-desc-src",c.describedSrc),p&&p.parentNode?g.insertBefore(b,p):g.appendChild(b),c.trackElement=b}),this.invalidateTrackCache(),a()},100)})}let r=this.sourceElements;if(r.some(l=>l.getAttribute("data-orig-src"))){let l=[];r.forEach(g=>{let p=g.getAttribute("data-orig-src"),f=g.getAttribute("data-desc-src");if(p){let b=g.getAttribute("type");l.push({src:p,type:b,origSrc:p,descSrc:f})}else{let b=g.getAttribute("type"),k=g.getAttribute("src");l.push({src:k,type:b,origSrc:null,descSrc:f})}});let a=this.element.hasAttribute("src"),c=a?this.element.getAttribute("src"):null;a&&this.element.removeAttribute("src"),r.forEach(g=>{g.remove()}),l.forEach(g=>{let p=document.createElement("source");p.setAttribute("src",g.src),g.type&&p.setAttribute("type",g.type),g.origSrc&&p.setAttribute("data-orig-src",g.origSrc),g.descSrc&&p.setAttribute("data-desc-src",g.descSrc);let f=this.element.querySelector("track");f?this.element.insertBefore(p,f):this.element.appendChild(p)}),this._sourceElementsDirty=!0,this._sourceElementsCache=null,s&&this.element.tagName==="VIDEO"&&(this.element.poster=s),this.element.load()}else{s&&this.element.tagName==="VIDEO"&&(this.element.poster=s);let l=this.originalAudioDescriptionSource||this.originalSrc;this.element.src=l,this.element.load()}await new Promise(l=>{let a=()=>{this.element.removeEventListener("loadedmetadata",a),l()};this.element.readyState>=1?l():this.element.addEventListener("loadedmetadata",a)}),(e>0||t)&&await new Promise(l=>{let a=()=>{this.element.removeEventListener("canplay",a),this.element.removeEventListener("canplaythrough",a),l()};this.element.readyState>=3?l():(this.element.addEventListener("canplay",a,{once:!0}),this.element.addEventListener("canplaythrough",a,{once:!0}),setTimeout(()=>{this.element.removeEventListener("canplay",a),this.element.removeEventListener("canplaythrough",a),l()},3e3))});let h=e;if(i&&this.captionManager&&this.captionManager.tracks.length>0){await new Promise(a=>setTimeout(a,500));let l=this.findMatchingCaptionTime(i,this.captionManager.tracks);l!==null&&(h=l,this.options.debug&&console.log(`[VidPly] Syncing via caption: ${e}s -> ${h}s`))}if(h>0&&(this.seek(h),await new Promise(l=>setTimeout(l,100))),t?(await this.play(),this.hidePosterOverlay()):(this.pause(),!t&&h===0?this.showPosterOverlay():this.hidePosterOverlay()),n.length>0&&this.captionManager){let l=this.state.captionsEnabled,a=null;if(this.captionManager.currentTrack){let g=this.captionManager.tracks.findIndex(p=>p.track===this.captionManager.currentTrack.track);g>=0&&(a={language:this.captionManager.tracks[g].language,kind:this.captionManager.tracks[g].kind})}setTimeout(()=>{if(this.captionManager.tracks=[],this.captionManager.loadTracks(),l&&a&&this.captionManager.tracks.length>0){let g=this.captionManager.tracks.findIndex(p=>p.language===a.language&&p.kind===a.kind);if(g>=0){let p=this.captionManager.tracks[g];if(p.track.readyState>=2)this.captionManager.enable(g);else{let f=()=>{p.track.removeEventListener("load",f),p.track.removeEventListener("error",f),this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(g)};p.track.addEventListener("load",f,{once:!0}),p.track.addEventListener("error",f,{once:!0}),p.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(g)},1e3)}}else if(this.captionManager.tracks.length>0){let p=this.captionManager.tracks[0];if(p.track.readyState>=2)this.captionManager.enable(0);else{let f=()=>{p.track.removeEventListener("load",f),p.track.removeEventListener("error",f),this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(0)};p.track.addEventListener("load",f,{once:!0}),p.track.addEventListener("error",f,{once:!0}),p.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(0)},1e3)}}}},600)}this.transcriptManager&&this.transcriptManager.isVisible&&this.setManagedTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},500),!this._audioDescriptionDesiredState&&(this.state.audioDescriptionEnabled=!1,this.emit("audiodescriptiondisabled"))}async toggleAudioDescription(){let e=this.findTextTrack("descriptions"),t=this.audioDescriptionSrc||this.sourceElements.some(i=>i.getAttribute("data-desc-src"));if(e&&t)if(this.state.audioDescriptionEnabled)this._audioDescriptionDesiredState=!1,e.mode="hidden",await this.disableAudioDescription();else{this._audioDescriptionDesiredState=!0,await this.enableAudioDescription();let i=()=>{this.invalidateTrackCache();let s=this.findTextTrack("descriptions");s?s.mode==="disabled"?(s.mode="hidden",this.setManagedTimeout(()=>{s.mode="showing"},50)):s.mode="showing":this.element.readyState<2&&this.setManagedTimeout(i,100)};this.element.readyState>=1?this.setManagedTimeout(i,200):this.element.addEventListener("loadedmetadata",()=>{this.setManagedTimeout(i,200)},{once:!0})}else e?e.mode==="showing"?(this._audioDescriptionDesiredState=!1,e.mode="hidden",this.state.audioDescriptionEnabled=!1,this.emit("audiodescriptiondisabled")):(this._audioDescriptionDesiredState=!0,e.mode="showing",this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled")):t&&(this.state.audioDescriptionEnabled?(this._audioDescriptionDesiredState=!1,await this.disableAudioDescription()):(this._audioDescriptionDesiredState=!0,await this.enableAudioDescription()))}enableSignLanguage(){let e=Object.keys(this.signLanguageSources).length>0,t=!!this.signLanguageSrc;if(!e&&!t){console.warn("No sign language video source provided");return}if(this.signLanguageWrapper){this.signLanguageWrapper.style.display="block",this.state.signLanguageEnabled=!0,this.emit("signlanguageenabled"),this.setManagedTimeout(()=>{this.signLanguageSettingsButton&&document.contains(this.signLanguageSettingsButton)&&this.signLanguageSettingsButton.focus({preventScroll:!0})},150);return}let i=null,s=null;if(e){if(this.captionManager&&this.captionManager.currentTrack){let c=this.captionManager.currentTrack.language?.toLowerCase().split("-")[0];c&&this.signLanguageSources[c]&&(i=c,s=this.signLanguageSources[c])}if(!i&&this.options.language){let c=this.options.language.toLowerCase().split("-")[0];this.signLanguageSources[c]&&(i=c,s=this.signLanguageSources[c])}i||(i=Object.keys(this.signLanguageSources)[0],s=this.signLanguageSources[i]),this.currentSignLanguage=i}else s=this.signLanguageSrc;this.signLanguageWrapper=document.createElement("div"),this.signLanguageWrapper.className="vidply-sign-language-wrapper",this.signLanguageWrapper.setAttribute("tabindex","0"),this.signLanguageWrapper.setAttribute("aria-label",d.t("player.signLanguageDragResize")),this.signLanguageHeader=u.createElement("div",{className:`${this.options.classPrefix}-sign-language-header`,attributes:{tabindex:"0"}});let n=u.createElement("div",{className:`${this.options.classPrefix}-sign-language-header-left`}),r=u.createElement("h3",{textContent:d.t("player.signLanguageVideo")}),o=d.t("player.signLanguageSettings");if(this.signLanguageSettingsButton=u.createElement("button",{className:`${this.options.classPrefix}-sign-language-settings`,attributes:{type:"button","aria-label":o,"aria-expanded":"false"}}),this.signLanguageSettingsButton.appendChild(E("settings")),u.attachTooltip(this.signLanguageSettingsButton,o,this.options.classPrefix),this.signLanguageSettingsHandlers={settingsClick:c=>{if(c.preventDefault(),c.stopPropagation(),this.signLanguageDocumentClickHandler){let g=this.signLanguageSettingsMenuJustOpened;this.signLanguageSettingsMenuJustOpened=!0,setTimeout(()=>{this.signLanguageSettingsMenuJustOpened=g},100)}this.signLanguageSettingsMenuVisible?this.hideSignLanguageSettingsMenu():this.showSignLanguageSettingsMenu()},settingsKeydown:c=>{c.key==="d"||c.key==="D"?(c.preventDefault(),c.stopPropagation(),this.toggleSignLanguageKeyboardDragMode()):c.key==="r"||c.key==="R"?(c.preventDefault(),c.stopPropagation(),this.toggleSignLanguageResizeMode()):c.key==="Escape"&&this.signLanguageSettingsMenuVisible&&(c.preventDefault(),c.stopPropagation(),this.hideSignLanguageSettingsMenu())}},this.signLanguageSettingsButton.addEventListener("click",this.signLanguageSettingsHandlers.settingsClick),this.signLanguageSettingsButton.addEventListener("keydown",this.signLanguageSettingsHandlers.settingsKeydown),n.appendChild(this.signLanguageSettingsButton),this.signLanguageSelector=null,e){let c=`${this.options.classPrefix}-sign-language-select-${Date.now()}`,g=Object.keys(this.signLanguageSources).map(k=>({value:k,text:this.getSignLanguageLabel(k),selected:k===i})),{label:p,select:f}=ie({classPrefix:this.options.classPrefix,labelClass:`${this.options.classPrefix}-sign-language-label`,selectClass:`${this.options.classPrefix}-sign-language-select`,labelText:"settings.language",selectId:c,options:g,onChange:k=>{k.stopPropagation();let m=k.target.value;this.switchSignLanguage(m)}});this.signLanguageSelector=f;let b=u.createElement("div",{className:`${this.options.classPrefix}-sign-language-selector-wrapper`});b.appendChild(p),b.appendChild(this.signLanguageSelector),se(b),n.appendChild(b)}n.appendChild(r);let h=d.t("player.closeSignLanguage"),l=u.createElement("button",{className:`${this.options.classPrefix}-sign-language-close`,attributes:{type:"button","aria-label":h}});l.appendChild(E("close")),u.attachTooltip(l,h,this.options.classPrefix),l.addEventListener("click",()=>{this.disableSignLanguage(),this.controlBar&&this.controlBar.controls&&this.controlBar.controls.signLanguage&&setTimeout(()=>{this.controlBar.controls.signLanguage.focus({preventScroll:!0})},0)}),this.signLanguageHeader.appendChild(n),this.signLanguageHeader.appendChild(l),this.signLanguageSettingsMenuVisible=!1,this.signLanguageSettingsMenu=null,this.signLanguageSettingsMenuJustOpened=!1,this.signLanguageResizeOptionButton=null,this.signLanguageResizeOptionText=null,this.signLanguageDragOptionButton=null,this.signLanguageDragOptionText=null,this.signLanguageDocumentClickHandler=null,this.signLanguageDocumentClickHandlerAdded=!1,this.signLanguageVideo=document.createElement("video"),this.signLanguageVideo.className="vidply-sign-language-video",this.signLanguageVideo.src=s,this.signLanguageVideo.setAttribute("aria-label",d.t("player.signLanguage")),this.signLanguageVideo.muted=!0,this.signLanguageVideo.setAttribute("playsinline",""),this.signLanguageResizeHandles=["n","s","e","w","ne","nw","se","sw"].map(c=>{let g=u.createElement("div",{className:`${this.options.classPrefix}-sign-resize-handle ${this.options.classPrefix}-sign-resize-${c}`,attributes:{"data-direction":c,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return g.style.display="none",g}),this.signLanguageWrapper.appendChild(this.signLanguageHeader),this.signLanguageWrapper.appendChild(this.signLanguageVideo),this.signLanguageResizeHandles.forEach(c=>this.signLanguageWrapper.appendChild(c));let a=this.storage.getSignLanguagePreferences();a&&a.size&&a.size.width?this.signLanguageWrapper.style.width=a.size.width:this.signLanguageWrapper.style.width="280px",this.signLanguageWrapper.style.height="auto",this.signLanguageDesiredPosition=this.options.signLanguagePosition||"bottom-right",this.container.appendChild(this.signLanguageWrapper),requestAnimationFrame(()=>{this.constrainSignLanguagePosition()}),this.signLanguageVideo.currentTime=this.state.currentTime,this.state.paused||this.signLanguageVideo.play(),this.setupSignLanguageInteraction(),this.signLanguageHandlers={play:()=>{this.signLanguageVideo&&this.signLanguageVideo.play()},pause:()=>{this.signLanguageVideo&&this.signLanguageVideo.pause()},timeupdate:()=>{this.signLanguageVideo&&Math.abs(this.signLanguageVideo.currentTime-this.state.currentTime)>.5&&(this.signLanguageVideo.currentTime=this.state.currentTime)},ratechange:()=>{this.signLanguageVideo&&(this.signLanguageVideo.playbackRate=this.state.playbackSpeed)}},this.on("play",this.signLanguageHandlers.play),this.on("pause",this.signLanguageHandlers.pause),this.on("timeupdate",this.signLanguageHandlers.timeupdate),this.on("ratechange",this.signLanguageHandlers.ratechange),e&&(this.signLanguageHandlers.captionChange=()=>{if(this.captionManager&&this.captionManager.currentTrack&&this.signLanguageSelector){let c=this.captionManager.currentTrack.language?.toLowerCase().split("-")[0];c&&this.signLanguageSources[c]&&this.currentSignLanguage!==c&&(this.switchSignLanguage(c),this.signLanguageSelector.value=c)}},this.on("captionsenabled",this.signLanguageHandlers.captionChange)),this.state.signLanguageEnabled=!0,this.emit("signlanguageenabled"),this.setManagedTimeout(()=>{this.signLanguageSettingsButton&&document.contains(this.signLanguageSettingsButton)&&this.signLanguageSettingsButton.focus({preventScroll:!0})},150)}disableSignLanguage(){this.signLanguageSettingsMenuVisible&&this.hideSignLanguageSettingsMenu({focusButton:!1}),this.signLanguageWrapper&&(this.signLanguageWrapper.style.display="none"),this.state.signLanguageEnabled=!1,this.emit("signlanguagedisabled")}toggleSignLanguage(){this.state.signLanguageEnabled?this.disableSignLanguage():this.enableSignLanguage()}setupSignLanguageInteraction(){if(!this.signLanguageWrapper)return;let e=window.innerWidth<768,t=this.state.fullscreen;if(e&&!t){this.signLanguageDraggable&&(this.signLanguageDraggable.destroy(),this.signLanguageDraggable=null);return}this.signLanguageDraggable||(this.signLanguageDraggable=new te(this.signLanguageWrapper,{dragHandle:this.signLanguageHeader,resizeHandles:this.signLanguageResizeHandles,constrainToViewport:!0,maintainAspectRatio:!0,minWidth:150,minHeight:100,classPrefix:`${this.options.classPrefix}-sign`,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:10,keyboardStepLarge:50,pointerResizeIndicatorText:d.t("player.signLanguageResizeActive"),onPointerResizeToggle:i=>{this.signLanguageResizeHandles.forEach(s=>{s.style.display=i?"block":"none"})},onDragStart:i=>!(i.target.closest(`.${this.options.classPrefix}-sign-language-close`)||i.target.closest(`.${this.options.classPrefix}-sign-language-settings`)||i.target.closest(`.${this.options.classPrefix}-sign-language-select`)||i.target.closest(`.${this.options.classPrefix}-sign-language-label`)||i.target.closest(`.${this.options.classPrefix}-sign-language-settings-menu`))}),this.signLanguageCustomKeyHandler=i=>{let s=i.key.toLowerCase();if(!this.signLanguageSettingsMenuVisible){if(s==="home"){i.preventDefault(),i.stopPropagation(),this.signLanguageDraggable&&(this.signLanguageDraggable.pointerResizeMode&&this.signLanguageDraggable.disablePointerResizeMode(),this.signLanguageDraggable.manuallyPositioned=!1,this.constrainSignLanguagePosition());return}if(s==="r"){i.preventDefault(),i.stopPropagation(),this.toggleSignLanguageResizeMode()&&this.signLanguageWrapper.focus({preventScroll:!0});return}if(s==="escape"){if(i.preventDefault(),i.stopPropagation(),this.signLanguageDraggable&&this.signLanguageDraggable.pointerResizeMode){this.signLanguageDraggable.disablePointerResizeMode();return}if(this.signLanguageDraggable&&this.signLanguageDraggable.keyboardDragMode){this.signLanguageDraggable.disableKeyboardDragMode();return}this.disableSignLanguage(),this.controlBar&&this.controlBar.controls&&this.controlBar.controls.signLanguage&&setTimeout(()=>{this.controlBar.controls.signLanguage.focus({preventScroll:!0})},0);return}}},this.signLanguageWrapper.addEventListener("keydown",this.signLanguageCustomKeyHandler),this.signLanguageInteractionHandlers={draggable:this.signLanguageDraggable,headerKeyHandler:this.signLanguageHeaderKeyHandler,customKeyHandler:this.signLanguageCustomKeyHandler})}toggleSignLanguageKeyboardDragMode(){if(this.signLanguageDraggable){let e=this.signLanguageDraggable.keyboardDragMode;this.signLanguageDraggable.toggleKeyboardDragMode();let t=this.signLanguageDraggable.keyboardDragMode;!e&&t&&this.enableSignLanguageMoveMode(),this.updateSignLanguageDragOptionState()}}enableSignLanguageMoveMode(){this.signLanguageWrapper.classList.add(`${this.options.classPrefix}-sign-move-mode`),this.updateSignLanguageResizeOptionState(),setTimeout(()=>{this.signLanguageWrapper.classList.remove(`${this.options.classPrefix}-sign-move-mode`)},2e3)}toggleSignLanguageResizeMode({focus:e=!0}={}){return this.signLanguageDraggable?this.signLanguageDraggable.pointerResizeMode?(this.signLanguageDraggable.disablePointerResizeMode({focus:e}),this.updateSignLanguageResizeOptionState(),!1):(this.signLanguageDraggable.enablePointerResizeMode({focus:e}),this.updateSignLanguageResizeOptionState(),!0):!1}getSignLanguageLabel(e){return{en:"English",de:"Deutsch",es:"Español",fr:"Français",it:"Italiano",ja:"日本語",pt:"Português",ar:"العربية",hi:"हिन्दी"}[e]||e.toUpperCase()}switchSignLanguage(e){if(!this.signLanguageSources[e]||!this.signLanguageVideo)return;let t=this.signLanguageVideo.currentTime,i=!this.signLanguageVideo.paused;this.signLanguageVideo.src=this.signLanguageSources[e],this.currentSignLanguage=e,this.signLanguageVideo.currentTime=t,i&&this.signLanguageVideo.play().catch(()=>{}),this.emit("signlanguagelanguagechanged",e)}showSignLanguageSettingsMenu(){if(this.signLanguageSettingsMenuJustOpened=!0,setTimeout(()=>{this.signLanguageSettingsMenuJustOpened=!1},350),this.signLanguageDocumentClickHandlerAdded||(this.signLanguageDocumentClickHandler=a=>{this.signLanguageSettingsMenuJustOpened||this.signLanguageSettingsButton&&(this.signLanguageSettingsButton===a.target||this.signLanguageSettingsButton.contains(a.target))||this.signLanguageSettingsMenu&&this.signLanguageSettingsMenu.contains(a.target)||this.signLanguageSettingsMenuVisible&&this.hideSignLanguageSettingsMenu()},setTimeout(()=>{document.addEventListener("mousedown",this.signLanguageDocumentClickHandler,!0),this.signLanguageDocumentClickHandlerAdded=!0},300)),this.signLanguageSettingsMenu){this.signLanguageSettingsMenu.style.display="block",this.signLanguageSettingsMenuVisible=!0,this.signLanguageSettingsButton&&this.signLanguageSettingsButton.setAttribute("aria-expanded","true"),this.signLanguageSettingsMenuKeyHandler=z(this.signLanguageSettingsMenu,this.signLanguageSettingsButton,`.${this.options.classPrefix}-sign-language-settings-item`,()=>this.hideSignLanguageSettingsMenu({focusButton:!0})),this.positionSignLanguageSettingsMenu(),this.updateSignLanguageDragOptionState(),this.updateSignLanguageResizeOptionState(),J(this.signLanguageSettingsMenu,`.${this.options.classPrefix}-sign-language-settings-item`);return}this.signLanguageSettingsMenu=u.createElement("div",{className:`${this.options.classPrefix}-sign-language-settings-menu`,attributes:{role:"menu"}});let e=q({classPrefix:this.options.classPrefix,itemClass:`${this.options.classPrefix}-sign-language-settings-item`,icon:"move",label:"player.enableSignDragMode",hasTextClass:!0,onClick:()=>{this.toggleSignLanguageKeyboardDragMode(),this.hideSignLanguageSettingsMenu()}});e.setAttribute("role","switch"),e.setAttribute("aria-checked","false");let t=e.querySelector(`.${this.options.classPrefix}-tooltip`);t&&t.remove();let i=e.querySelector(`.${this.options.classPrefix}-button-text`);i&&i.remove(),this.signLanguageDragOptionButton=e,this.signLanguageDragOptionText=e.querySelector(`.${this.options.classPrefix}-settings-text`),this.updateSignLanguageDragOptionState();let s=q({classPrefix:this.options.classPrefix,itemClass:`${this.options.classPrefix}-sign-language-settings-item`,icon:"resize",label:"player.enableSignResizeMode",hasTextClass:!0,onClick:a=>{a.preventDefault(),a.stopPropagation(),this.toggleSignLanguageResizeMode({focus:!1})?(this.hideSignLanguageSettingsMenu({focusButton:!1}),setTimeout(()=>{this.signLanguageWrapper&&this.signLanguageWrapper.focus({preventScroll:!0})},20)):this.hideSignLanguageSettingsMenu({focusButton:!0})}});s.setAttribute("role","switch"),s.setAttribute("aria-checked","false");let n=s.querySelector(`.${this.options.classPrefix}-tooltip`);n&&n.remove();let r=s.querySelector(`.${this.options.classPrefix}-button-text`);r&&r.remove(),this.signLanguageResizeOptionButton=s,this.signLanguageResizeOptionText=s.querySelector(`.${this.options.classPrefix}-settings-text`),this.updateSignLanguageResizeOptionState();let o=q({classPrefix:this.options.classPrefix,itemClass:`${this.options.classPrefix}-sign-language-settings-item`,icon:"close",label:"transcript.closeMenu",onClick:()=>{this.hideSignLanguageSettingsMenu()}}),h=o.querySelector(`.${this.options.classPrefix}-tooltip`);h&&h.remove();let l=o.querySelector(`.${this.options.classPrefix}-button-text`);l&&l.remove(),this.signLanguageSettingsMenu.appendChild(e),this.signLanguageSettingsMenu.appendChild(s),this.signLanguageSettingsMenu.appendChild(o),this.signLanguageSettingsMenu.style.visibility="hidden",this.signLanguageSettingsMenu.style.display="block",this.signLanguageSettingsButton&&this.signLanguageSettingsButton.parentNode?this.signLanguageSettingsButton.insertAdjacentElement("afterend",this.signLanguageSettingsMenu):this.signLanguageWrapper&&this.signLanguageWrapper.appendChild(this.signLanguageSettingsMenu),this.positionSignLanguageSettingsMenuImmediate(),requestAnimationFrame(()=>{this.signLanguageSettingsMenu&&(this.signLanguageSettingsMenu.style.visibility="visible")}),this.signLanguageSettingsMenuKeyHandler=z(this.signLanguageSettingsMenu,this.signLanguageSettingsButton,`.${this.options.classPrefix}-sign-language-settings-item`,()=>this.hideSignLanguageSettingsMenu({focusButton:!0})),this.signLanguageSettingsMenuVisible=!0,this.signLanguageSettingsButton&&this.signLanguageSettingsButton.setAttribute("aria-expanded","true"),this.updateSignLanguageDragOptionState(),this.updateSignLanguageResizeOptionState(),J(this.signLanguageSettingsMenu,`.${this.options.classPrefix}-sign-language-settings-item`)}hideSignLanguageSettingsMenu({focusButton:e=!0}={}){this.signLanguageSettingsMenu&&(this.signLanguageSettingsMenu.style.display="none",this.signLanguageSettingsMenuVisible=!1,this.signLanguageSettingsMenuJustOpened=!1,this.signLanguageSettingsMenuKeyHandler&&(this.signLanguageSettingsMenu.removeEventListener("keydown",this.signLanguageSettingsMenuKeyHandler),this.signLanguageSettingsMenuKeyHandler=null),Array.from(this.signLanguageSettingsMenu.querySelectorAll(`.${this.options.classPrefix}-sign-language-settings-item`)).forEach(i=>{i.setAttribute("tabindex","-1")}),this.signLanguageSettingsButton&&(this.signLanguageSettingsButton.setAttribute("aria-expanded","false"),e&&this.signLanguageSettingsButton.focus({preventScroll:!0})))}positionSignLanguageSettingsMenuImmediate(){if(!this.signLanguageSettingsMenu||!this.signLanguageSettingsButton)return;let e=this.signLanguageSettingsButton.getBoundingClientRect(),t=this.signLanguageSettingsMenu.getBoundingClientRect(),i=window.innerWidth,s=window.innerHeight,n=this.signLanguageSettingsButton.parentElement;if(!n)return;let r=n.getBoundingClientRect(),o=e.left+e.width/2-r.left,h=e.bottom-r.top,l=e.top-r.top,a=e.top,c=s-e.bottom,g=h+8,p=null;c<t.height+20&&a>c?(g=null,p=r.bottom-r.top-l+8,this.signLanguageSettingsMenu.classList.add("vidply-menu-above")):this.signLanguageSettingsMenu.classList.remove("vidply-menu-above");let f=o-t.width/2,b="auto",k="translateX(0)",m=e.left+e.width/2-t.width/2;m<10?(f=0,k="translateX(0)"):m+t.width>i-10?(f="auto",b=0,k="translateX(0)"):(f=o,k="translateX(-50%)"),g!==null?(this.signLanguageSettingsMenu.style.top=`${g}px`,this.signLanguageSettingsMenu.style.bottom="auto"):p!==null&&(this.signLanguageSettingsMenu.style.top="auto",this.signLanguageSettingsMenu.style.bottom=`${p}px`),f!=="auto"?(this.signLanguageSettingsMenu.style.left=`${f}px`,this.signLanguageSettingsMenu.style.right="auto"):(this.signLanguageSettingsMenu.style.left="auto",this.signLanguageSettingsMenu.style.right=`${b}px`),this.signLanguageSettingsMenu.style.transform=k}positionSignLanguageSettingsMenu(){!this.signLanguageSettingsMenu||!this.signLanguageSettingsButton||!this.signLanguageWrapper||requestAnimationFrame(()=>{setTimeout(()=>{this.positionSignLanguageSettingsMenuImmediate()},10)})}attachSignLanguageSettingsMenuKeyboardNavigation(){this.signLanguageSettingsMenu&&(this.signLanguageSettingsMenuKeyHandler&&this.signLanguageSettingsMenu.removeEventListener("keydown",this.signLanguageSettingsMenuKeyHandler),this.signLanguageSettingsMenuKeyHandler=z(this.signLanguageSettingsMenu,this.signLanguageSettingsButton,`.${this.options.classPrefix}-sign-language-settings-item`,()=>this.hideSignLanguageSettingsMenu({focusButton:!0})))}updateSignLanguageDragOptionState(){if(!this.signLanguageDragOptionButton)return;let e=!!(this.signLanguageDraggable&&this.signLanguageDraggable.keyboardDragMode),t=e?d.t("player.disableSignDragMode"):d.t("player.enableSignDragMode"),i=e?d.t("player.disableSignDragModeAria"):d.t("player.enableSignDragModeAria");this.signLanguageDragOptionButton.setAttribute("aria-checked",e?"true":"false"),this.signLanguageDragOptionButton.setAttribute("aria-label",i),this.signLanguageDragOptionText&&(this.signLanguageDragOptionText.textContent=t)}updateSignLanguageResizeOptionState(){if(!this.signLanguageResizeOptionButton)return;let e=!!(this.signLanguageDraggable&&this.signLanguageDraggable.pointerResizeMode),t=e?d.t("player.disableSignResizeMode"):d.t("player.enableSignResizeMode"),i=e?d.t("player.disableSignResizeModeAria"):d.t("player.enableSignResizeModeAria");this.signLanguageResizeOptionButton.setAttribute("aria-checked",e?"true":"false"),this.signLanguageResizeOptionButton.setAttribute("aria-label",i),this.signLanguageResizeOptionText&&(this.signLanguageResizeOptionText.textContent=t)}constrainSignLanguagePosition(){if(!this.signLanguageWrapper||!this.videoWrapper||this.signLanguageDraggable&&this.signLanguageDraggable.manuallyPositioned)return;(!this.signLanguageWrapper.style.width||this.signLanguageWrapper.style.width==="")&&(this.signLanguageWrapper.style.width="280px");let e=this.videoWrapper.getBoundingClientRect(),t=this.container.getBoundingClientRect(),i=this.signLanguageWrapper.getBoundingClientRect(),s=e.left-t.left,n=e.top-t.top,r=e.width,o=e.height,h=i.width||280,l=i.height||280*9/16,a,c,g=16,p=95;switch(this.signLanguageDesiredPosition||"bottom-right"){case"bottom-right":a=s+r-h-g,c=n+o-l-p;break;case"bottom-left":a=s+g,c=n+o-l-p;break;case"top-right":a=s+r-h-g,c=n+g;break;case"top-left":a=s+g,c=n+g;break;default:a=s+r-h-g,c=n+o-l-p}a=Math.max(s,Math.min(a,s+r-h)),c=Math.max(n,Math.min(c,n+o-l-p)),this.signLanguageWrapper.style.left=`${a}px`,this.signLanguageWrapper.style.top=`${c}px`,this.signLanguageWrapper.style.right="auto",this.signLanguageWrapper.style.bottom="auto",this.signLanguageWrapper.classList.remove(...Array.from(this.signLanguageWrapper.classList).filter(b=>b.startsWith("vidply-sign-position-")))}saveSignLanguagePreferences(){this.signLanguageWrapper&&this.storage.saveSignLanguagePreferences({size:{width:this.signLanguageWrapper.style.width}})}cleanupSignLanguage(){this.signLanguageSettingsMenuVisible&&this.hideSignLanguageSettingsMenu({focusButton:!1}),this.signLanguageDocumentClickHandler&&this.signLanguageDocumentClickHandlerAdded&&(document.removeEventListener("mousedown",this.signLanguageDocumentClickHandler,!0),this.signLanguageDocumentClickHandlerAdded=!1,this.signLanguageDocumentClickHandler=null),this.signLanguageSettingsHandlers&&(this.signLanguageSettingsButton&&(this.signLanguageSettingsButton.removeEventListener("click",this.signLanguageSettingsHandlers.settingsClick),this.signLanguageSettingsButton.removeEventListener("keydown",this.signLanguageSettingsHandlers.settingsKeydown)),this.signLanguageSettingsHandlers=null),this.signLanguageHandlers&&(this.off("play",this.signLanguageHandlers.play),this.off("pause",this.signLanguageHandlers.pause),this.off("timeupdate",this.signLanguageHandlers.timeupdate),this.off("ratechange",this.signLanguageHandlers.ratechange),this.signLanguageHandlers.captionChange&&this.off("captionsenabled",this.signLanguageHandlers.captionChange),this.signLanguageHandlers=null),this.signLanguageInteractionHandlers&&(this.signLanguageHeader&&this.signLanguageInteractionHandlers.headerKeyHandler&&this.signLanguageHeader.removeEventListener("keydown",this.signLanguageInteractionHandlers.headerKeyHandler),this.signLanguageWrapper&&this.signLanguageInteractionHandlers.customKeyHandler&&this.signLanguageWrapper.removeEventListener("keydown",this.signLanguageInteractionHandlers.customKeyHandler)),this.signLanguageDraggable&&(this.signLanguageDraggable.pointerResizeMode&&this.signLanguageDraggable.disablePointerResizeMode(),this.signLanguageDraggable.destroy(),this.signLanguageDraggable=null),this.signLanguageInteractionHandlers=null,this.signLanguageWrapper&&this.signLanguageWrapper.parentNode&&(this.signLanguageVideo&&(this.signLanguageVideo.pause(),this.signLanguageVideo.src=""),this.signLanguageWrapper.parentNode.removeChild(this.signLanguageWrapper)),this.signLanguageWrapper=null,this.signLanguageVideo=null,this.signLanguageSettingsButton=null,this.signLanguageSettingsMenu=null}showSettings(){console.warn("[VidPly] Settings dialog has been removed. Use individual control buttons (speed, captions, etc.)")}hideSettings(){}getCurrentTime(){return this.state.currentTime}getDuration(){return this.state.duration}isPlaying(){return this.state.playing}isPaused(){return this.state.paused}isEnded(){return this.state.ended}isMuted(){return this.state.muted}isFullscreen(){return this.state.fullscreen}handleError(e){this.log("Error:",e,"error"),this.emit("error",e),this.options.onError&&this.options.onError.call(this,e)}log(...e){if(!this.options.debug)return;let t="log";if(e.length>0){let i=e[e.length-1];typeof i=="string"&&console[i]&&(t=i,e=e.slice(0,-1))}e.length===0&&(e=[""]),typeof console[t]=="function"?console[t]("[VidPly]",...e):console.log("[VidPly]",...e)}setupResponsiveHandlers(){if(typeof ResizeObserver<"u"?(this.resizeObserver=new ResizeObserver(e=>{for(let t of e){let i=t.contentRect.width;this.controlBar&&typeof this.controlBar.updateControlsForViewport=="function"&&this.controlBar.updateControlsForViewport(i),this.transcriptManager&&this.transcriptManager.isVisible&&this.transcriptManager.positionTranscript()}}),this.resizeObserver.observe(this.container)):(this.resizeHandler=()=>{let e=this.container.clientWidth;this.controlBar&&typeof this.controlBar.updateControlsForViewport=="function"&&this.controlBar.updateControlsForViewport(e),this.transcriptManager&&this.transcriptManager.isVisible&&(!this.transcriptManager.draggableResizable||!this.transcriptManager.draggableResizable.manuallyPositioned)&&this.transcriptManager.positionTranscript()},window.addEventListener("resize",this.resizeHandler)),window.matchMedia){this.orientationHandler=t=>{setTimeout(()=>{this.transcriptManager&&this.transcriptManager.isVisible&&(!this.transcriptManager.draggableResizable||!this.transcriptManager.draggableResizable.manuallyPositioned)&&this.transcriptManager.positionTranscript()},100)};let e=window.matchMedia("(orientation: portrait)");e.addEventListener?e.addEventListener("change",this.orientationHandler):e.addListener&&e.addListener(this.orientationHandler),this.orientationQuery=e}this.fullscreenChangeHandler=()=>{let e=!!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement);this.state.fullscreen!==e&&(this.state.fullscreen=e,e?this.container.classList.add(`${this.options.classPrefix}-fullscreen`):(this.container.classList.remove(`${this.options.classPrefix}-fullscreen`),this._disablePseudoFullscreen()),this.emit("fullscreenchange",e),this.controlBar&&this.controlBar.updateFullscreenButton(),this.signLanguageWrapper&&this.signLanguageWrapper.style.display!=="none"&&(window.innerWidth<768&&this.setupSignLanguageInteraction(),this.setManagedTimeout(()=>{requestAnimationFrame(()=>{this.storage.saveSignLanguagePreferences({size:null}),this.signLanguageDesiredPosition="bottom-right",this.signLanguageWrapper.style.width=e?"400px":"280px",this.constrainSignLanguagePosition()})},500)))},document.addEventListener("fullscreenchange",this.fullscreenChangeHandler),document.addEventListener("webkitfullscreenchange",this.fullscreenChangeHandler),document.addEventListener("mozfullscreenchange",this.fullscreenChangeHandler),document.addEventListener("MSFullscreenChange",this.fullscreenChangeHandler)}destroy(){if(this.log("Destroying player"),this.renderer&&this.renderer.destroy(),this.controlBar&&this.controlBar.destroy(),this.captionManager&&this.captionManager.destroy(),this.keyboardManager&&this.keyboardManager.destroy(),this.transcriptManager&&this.transcriptManager.destroy(),this.cleanupSignLanguage(),this.playButtonOverlay&&this.playButtonOverlay.parentNode&&(this.playButtonOverlay.remove(),this.playButtonOverlay=null),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),this.resizeHandler&&(window.removeEventListener("resize",this.resizeHandler),this.resizeHandler=null),this.orientationQuery&&this.orientationHandler&&(this.orientationQuery.removeEventListener?this.orientationQuery.removeEventListener("change",this.orientationHandler):this.orientationQuery.removeListener&&this.orientationQuery.removeListener(this.orientationHandler),this.orientationQuery=null,this.orientationHandler=null),this.fullscreenChangeHandler&&(document.removeEventListener("fullscreenchange",this.fullscreenChangeHandler),document.removeEventListener("webkitfullscreenchange",this.fullscreenChangeHandler),document.removeEventListener("mozfullscreenchange",this.fullscreenChangeHandler),document.removeEventListener("MSFullscreenChange",this.fullscreenChangeHandler),this.fullscreenChangeHandler=null),this.timeouts.forEach(e=>clearTimeout(e)),this.timeouts.clear(),this.metadataCueChangeHandler){let t=this.textTracks.find(i=>i.kind==="metadata");t&&t.removeEventListener("cuechange",this.metadataCueChangeHandler),this.metadataCueChangeHandler=null}this.metadataAlertHandlers&&this.metadataAlertHandlers.size>0&&(this.metadataAlertHandlers.forEach(({button:e,handler:t})=>{e&&t&&e.removeEventListener("click",t)}),this.metadataAlertHandlers.clear()),this.container&&this.container.parentNode&&(this.container.parentNode.insertBefore(this.element,this.container),this.container.parentNode.removeChild(this.container)),this.removeAllListeners()}setupMetadataHandling(){let e=()=>{let i=this.textTracks.find(s=>s.kind==="metadata");if(i){if(i.mode==="disabled"&&(i.mode="hidden"),this.metadataCueChangeHandler&&i.removeEventListener("cuechange",this.metadataCueChangeHandler),this.metadataCueChangeHandler=()=>{let s=Array.from(i.activeCues||[]);s.length>0&&this.options.debug&&this.log("[Metadata] Active cues:",s.map(n=>({start:n.startTime,end:n.endTime,text:n.text}))),s.forEach(n=>{this.handleMetadataCue(n)})},i.addEventListener("cuechange",this.metadataCueChangeHandler),this.options.debug){let s=i.cues?i.cues.length:0;this.log("[Metadata] Track enabled,",s,"cues available")}}else this.options.debug&&this.log("[Metadata] No metadata track found")};e(),this.on("loadedmetadata",e)}normalizeMetadataSelector(e){if(!e)return null;let t=e.trim();return t?t.startsWith("#")||t.startsWith(".")||t.startsWith("[")?t:`#${t}`:null}resolveMetadataConfig(e,t){if(!e||!t)return null;if(Object.prototype.hasOwnProperty.call(e,t))return e[t];let i=t.replace(/^#/,"");return Object.prototype.hasOwnProperty.call(e,i)?e[i]:null}cacheMetadataAlertContent(e,t={}){if(!e)return;let i=t.titleSelector||"[data-vidply-alert-title], h3, header",s=t.messageSelector||"[data-vidply-alert-message], p",n=e.querySelector(i);n&&!n.dataset.vidplyAlertTitleOriginal&&(n.dataset.vidplyAlertTitleOriginal=n.textContent.trim());let r=e.querySelector(s);r&&!r.dataset.vidplyAlertMessageOriginal&&(r.dataset.vidplyAlertMessageOriginal=r.textContent.trim())}restoreMetadataAlertContent(e,t={}){if(!e)return;let i=t.titleSelector||"[data-vidply-alert-title], h3, header",s=t.messageSelector||"[data-vidply-alert-message], p",n=e.querySelector(i);n&&n.dataset.vidplyAlertTitleOriginal&&(n.textContent=n.dataset.vidplyAlertTitleOriginal);let r=e.querySelector(s);r&&r.dataset.vidplyAlertMessageOriginal&&(r.textContent=r.dataset.vidplyAlertMessageOriginal)}focusMetadataTarget(e,t=null){if(!(!e||e==="none")){if(e==="alert"&&t){t.focus({preventScroll:!0});return}if(e==="player"){this.container&&this.container.focus({preventScroll:!0});return}if(e==="media"){this.element.focus({preventScroll:!0});return}if(e==="playButton"){let i=this.controlBar?.controls?.playPause;i&&i.focus({preventScroll:!0});return}if(typeof e=="string"){let i=document.querySelector(e);i&&(i.tabIndex===-1&&!i.hasAttribute("tabindex")&&i.setAttribute("tabindex","-1"),i.focus({preventScroll:!0}))}}}handleMetadataAlert(e,t={}){if(!e)return;let i=this.resolveMetadataConfig(this.options.metadataAlerts,e)||{},s=t.element||document.querySelector(e);if(!s){this.options.debug&&this.log("[Metadata] Alert element not found:",e);return}this.options.debug&&this.log("[Metadata] Handling alert",e,{reason:t.reason,config:i}),this.cacheMetadataAlertContent(s,i),s.dataset.vidplyAlertOriginalDisplay||(s.dataset.vidplyAlertOriginalDisplay=s.style.display||""),s.dataset.vidplyAlertDisplay||(s.dataset.vidplyAlertDisplay=i.display||"block");let n=t.show!==void 0?t.show:i.show!==!1;if(n){let l=i.display||s.dataset.vidplyAlertDisplay||"block";s.style.display=l,s.hidden=!1,s.removeAttribute("hidden"),s.setAttribute("aria-hidden","false"),s.setAttribute("data-vidply-alert-active","true")}i.resetContent!==!1&&t.reason==="focus"&&this.restoreMetadataAlertContent(s,i);let o=t.focus!==void 0?t.focus:i.focusOnShow??t.reason!=="focus";n&&o&&(s.tabIndex===-1&&!s.hasAttribute("tabindex")&&s.setAttribute("tabindex","-1"),s.focus({preventScroll:!0})),n&&i.autoScroll!==!1&&t.autoScroll!==!1&&s.scrollIntoView({behavior:"smooth",block:"nearest"});let h=i.continueButton;if(h){let l=null;if(h==="self"||s.matches(h)?l=s:l=s.querySelector(h)||document.querySelector(h),l&&!this.metadataAlertHandlers.has(e)){let a=()=>{if(i.hideOnContinue!==!1){let p=s.dataset.vidplyAlertOriginalDisplay||"";s.style.display=i.hideDisplay||p||"none",s.setAttribute("aria-hidden","true"),s.removeAttribute("data-vidply-alert-active")}i.resume!==!1&&this.state.paused&&this.play();let g=i.focusTarget||"playButton";this.setManagedTimeout(()=>{this.focusMetadataTarget(g,s)},i.focusDelay??100)};l.addEventListener("click",a),this.metadataAlertHandlers.set(e,{button:l,handler:a})}}return s}handleMetadataHashtags(e){if(!Array.isArray(e)||e.length===0)return;let t=this.options.metadataHashtags;t&&e.forEach(i=>{let s=this.resolveMetadataConfig(t,i);if(!s)return;let n=this.normalizeMetadataSelector(s.alert||s.selector||s.target);if(!n)return;let r=document.querySelector(n);if(!r){this.options.debug&&this.log("[Metadata] Hashtag target not found:",n);return}if(this.options.debug&&this.log("[Metadata] Handling hashtag",i,{selector:n,config:s}),this.cacheMetadataAlertContent(r,s),s.title){let l=s.titleSelector||"[data-vidply-alert-title], h3, header",a=r.querySelector(l);a&&(a.textContent=s.title)}if(s.message){let l=s.messageSelector||"[data-vidply-alert-message], p",a=r.querySelector(l);a&&(a.textContent=s.message)}let o=s.show!==!1,h=s.focus!==void 0?s.focus:!1;this.handleMetadataAlert(n,{element:r,show:o,focus:h,autoScroll:s.autoScroll,reason:"hashtag"})})}handleMetadataCue(e){let t=e.text.trim();this.options.debug&&this.log("[Metadata] Processing cue:",{time:e.startTime,text:t}),this.emit("metadata",{time:e.startTime,endTime:e.endTime,text:t,cue:e}),t.includes("PAUSE")&&(this.state.paused||(this.options.debug&&this.log("[Metadata] Pausing video at",e.startTime),this.pause()),this.emit("metadata:pause",{time:e.startTime,text:t}));let i=t.match(/FOCUS:([\w#-]+)/);if(i){let n=i[1],r=this.normalizeMetadataSelector(n),o=r?document.querySelector(r):null;o?(this.options.debug&&this.log("[Metadata] Focusing element:",r),o.tabIndex===-1&&!o.hasAttribute("tabindex")&&o.setAttribute("tabindex","-1"),this.setManagedTimeout(()=>{o.focus({preventScroll:!0})},10)):this.options.debug&&this.log("[Metadata] Element not found:",r||n),this.emit("metadata:focus",{time:e.startTime,target:n,selector:r,element:o,text:t}),r&&this.handleMetadataAlert(r,{element:o,reason:"focus"})}let s=t.match(/#[\w-]+/g);s&&(this.options.debug&&this.log("[Metadata] Hashtags found:",s),this.emit("metadata:hashtags",{time:e.startTime,hashtags:s,text:t}),this.handleMetadataHashtags(s))}};F.instances=[];var re=0,Y=class{constructor(e,t={}){this.player=e,this.tracks=[],this.initialTracks=Array.isArray(t.tracks)?t.tracks:[],this.currentIndex=-1,this.instanceId=++re,this.uniqueId=`vidply-playlist-${this.instanceId}`,this.options={autoAdvance:t.autoAdvance!==!1,autoPlayFirst:t.autoPlayFirst!==!1,loop:t.loop||!1,showPanel:t.showPanel!==!1,...t},this.container=null,this.playlistPanel=null,this.trackInfoElement=null,this.navigationFeedback=null,this.isPanelVisible=this.options.showPanel!==!1,this.isChangingTrack=!1,this.handleTrackEnd=this.handleTrackEnd.bind(this),this.handleTrackError=this.handleTrackError.bind(this),this.player.playlistManager=this,this.init(),this.updatePlayerControls(),this.initialTracks.length>0&&this.loadPlaylist(this.initialTracks)}init(){this.player.on("ended",this.handleTrackEnd),this.player.on("error",this.handleTrackError),this.player.on("play",this.handlePlaybackStateChange.bind(this)),this.player.on("pause",this.handlePlaybackStateChange.bind(this)),this.player.on("ended",this.handlePlaybackStateChange.bind(this)),this.player.on("fullscreenchange",this.handleFullscreenChange.bind(this)),this.player.on("audiodescriptionenabled",this.handleAudioDescriptionChange.bind(this)),this.player.on("audiodescriptiondisabled",this.handleAudioDescriptionChange.bind(this)),this.options.showPanel&&this.createUI(),this.tracks.length===0&&this.initialTracks.length===0&&this.loadPlaylistFromAttribute()}loadPlaylistFromAttribute(){if(!this.player.element||!this.player.element.parentElement){console.log("VidPly Playlist: No player element found");return}let t=this.player.element.parentElement.parentElement,i=t?t.parentElement:null;if(!i){console.log("VidPly Playlist: No original element found");return}this.loadOptionsFromAttributes(i);let s=i.getAttribute("data-playlist");if(!s){console.log("VidPly Playlist: No data-playlist attribute found");return}console.log("VidPly Playlist: Found data-playlist attribute, parsing...");try{let n=JSON.parse(s);Array.isArray(n)&&n.length>0?(console.log(`VidPly Playlist: Loaded ${n.length} tracks from data-playlist`),this.loadPlaylist(n)):console.warn("VidPly Playlist: data-playlist is not a valid array or is empty")}catch(n){console.error("VidPly Playlist: Failed to parse data-playlist attribute",n)}}loadOptionsFromAttributes(e){let t=e.getAttribute("data-playlist-auto-advance");t!==null&&(this.options.autoAdvance=t==="true");let i=e.getAttribute("data-playlist-auto-play-first");i!==null&&(this.options.autoPlayFirst=i==="true");let s=e.getAttribute("data-playlist-loop");s!==null&&(this.options.loop=s==="true");let n=e.getAttribute("data-playlist-show-panel");n!==null&&(this.options.showPanel=n==="true"),console.log("VidPly Playlist: Options from attributes:",this.options)}updatePlayerControls(){if(!this.player.controlBar)return;let e=this.player.controlBar;e.element.innerHTML="",e.createControls(),e.attachEvents(),e.setupAutoHide()}loadPlaylist(e){this.tracks=e,this.currentIndex=-1,this.container&&this.container.classList.add("vidply-has-playlist"),this.playlistPanel&&this.renderPlaylist(),e.length>0&&(this.options.autoPlayFirst?this.play(0):this.loadTrack(0)),this.updatePlaylistVisibilityInFullscreen()}loadTrack(e){if(e<0||e>=this.tracks.length){console.warn("VidPly Playlist: Invalid track index",e);return}let t=this.tracks[e];this.isChangingTrack=!0,this.currentIndex=e,this.player.load({src:t.src,type:t.type,poster:t.poster,tracks:t.tracks||[],audioDescriptionSrc:t.audioDescriptionSrc||null,signLanguageSrc:t.signLanguageSrc||null}),this.updateTrackInfo(t),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:t,total:this.tracks.length}),setTimeout(()=>{this.isChangingTrack=!1},150)}play(e,t=!1){if(e<0||e>=this.tracks.length){console.warn("VidPly Playlist: Invalid track index",e);return}let i=this.tracks[e];this.isChangingTrack=!0,this.currentIndex=e,this.player.load({src:i.src,type:i.type,poster:i.poster,tracks:i.tracks||[],audioDescriptionSrc:i.audioDescriptionSrc||null,signLanguageSrc:i.signLanguageSrc||null}),this.updateTrackInfo(i),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:i,total:this.tracks.length}),setTimeout(()=>{this.player.play(),setTimeout(()=>{this.isChangingTrack=!1},50)},100)}next(){let e=this.currentIndex+1;if(e>=this.tracks.length)if(this.options.loop)e=0;else return;this.play(e)}previous(){let e=this.currentIndex-1;if(e<0)if(this.options.loop)e=this.tracks.length-1;else return;this.play(e)}handleTrackEnd(){this.isChangingTrack||this.options.autoAdvance&&this.next()}handleTrackError(e){console.error("VidPly Playlist: Track error",e),this.options.autoAdvance&&setTimeout(()=>{this.next()},1e3)}handlePlaybackStateChange(){this.updatePlaylistVisibilityInFullscreen()}handleFullscreenChange(){setTimeout(()=>{this.updatePlaylistVisibilityInFullscreen()},50)}handleAudioDescriptionChange(){let e=this.getCurrentTrack();e&&(this.updateTrackInfo(e),this.updatePlaylistUI(),this.updatePlaylistDurations())}updatePlaylistDurations(){if(!this.playlistPanel)return;this.playlistPanel.querySelectorAll(".vidply-playlist-item").forEach((t,i)=>{let s=this.tracks[i];if(!s)return;let n=this.getEffectiveDuration(s),r=n?x.formatTime(n):"",o=t.querySelector(".vidply-playlist-duration-badge");o&&(o.textContent=r);let h=t.querySelector(".vidply-playlist-item-duration");h&&(h.textContent=r)})}getEffectiveDuration(e){return e?this.player.state.audioDescriptionEnabled&&e.audioDescriptionDuration?e.audioDescriptionDuration:e.duration||null:null}updatePlaylistVisibilityInFullscreen(){if(!this.playlistPanel||!this.tracks.length)return;let e=this.player.state.fullscreen,t=this.player.state.playing;e?t?(this.playlistPanel.classList.remove("vidply-playlist-fullscreen-visible"),setTimeout(()=>{this.player.state.playing&&this.player.state.fullscreen&&(this.playlistPanel.style.display="none")},300)):(this.playlistPanel.classList.add("vidply-playlist-fullscreen-visible"),this.playlistPanel.style.display="block"):(this.playlistPanel.classList.remove("vidply-playlist-fullscreen-visible"),this.isPanelVisible&&this.tracks.length>0?this.playlistPanel.style.display="block":this.playlistPanel.style.display="none")}createUI(){if(this.container=this.player.container,!this.container){console.warn("VidPly Playlist: No container found");return}if(this.player.element.tagName==="AUDIO"){this.trackArtworkElement=u.createElement("div",{className:"vidply-track-artwork",attributes:{"aria-hidden":"true"}}),this.trackArtworkElement.style.display="none";let e=this.container.querySelector(".vidply-video-wrapper");e?this.container.insertBefore(this.trackArtworkElement,e):this.container.appendChild(this.trackArtworkElement)}this.trackInfoElement=u.createElement("div",{className:"vidply-track-info",attributes:{role:"status"}}),this.trackInfoElement.style.display="none",this.container.appendChild(this.trackInfoElement),this.navigationFeedback=u.createElement("div",{className:"vidply-sr-only",attributes:{role:"status","aria-live":"polite","aria-atomic":"true"}}),this.container.appendChild(this.navigationFeedback),this.playlistPanel=u.createElement("div",{className:"vidply-playlist-panel",attributes:{id:`${this.uniqueId}-panel`,role:"region","aria-label":d.t("playlist.title"),"aria-labelledby":`${this.uniqueId}-heading`}}),this.playlistPanel.style.display=(this.isPanelVisible,"none"),this.container.appendChild(this.playlistPanel)}updateTrackInfo(e){if(!this.trackInfoElement)return;let t=this.currentIndex+1,i=this.tracks.length,s=e.title||d.t("playlist.untitled"),n=e.artist||"",r=this.getEffectiveDuration(e),o=r?x.formatTime(r):"",h=r?x.formatDuration(r):"",l=n?d.t("playlist.by")+n:"",a=h?`. ${h}`:"",c=d.t("playlist.nowPlaying",{current:t,total:i,title:s,artist:l})+a,g=d.t("playlist.trackOf",{current:t,total:i}),p=o?`<span class="vidply-track-duration" aria-hidden="true">${u.escapeHTML(o)}</span>`:"",f=e.description||"";this.trackInfoElement.innerHTML=`
|
|
12
|
+
`,document.body.appendChild(i)),i.textContent="",setTimeout(()=>{i.textContent=e},100)}updateShortcut(e,t){Array.isArray(t)&&(this.shortcuts[e]=t)}destroy(){}};var ne=0,F=class P extends W{constructor(e,t={}){if(super(),this.element=typeof e=="string"?document.querySelector(e):e,!this.element)throw new Error("VidPly: Element not found");if(ne++,this.instanceId=ne,this.element.tagName!=="VIDEO"&&this.element.tagName!=="AUDIO"){let s=t.mediaType||"video",n=document.createElement(s);Array.from(this.element.attributes).forEach(o=>{o.name!=="id"&&o.name!=="class"&&!o.name.startsWith("data-")&&n.setAttribute(o.name,o.value)}),this.element.querySelectorAll("track").forEach(o=>{n.appendChild(o.cloneNode(!0))}),this.element.innerHTML="",this.element.appendChild(n),this.element=n}this.options={width:null,height:null,poster:null,responsive:!0,fillContainer:!1,autoplay:!1,loop:!1,muted:!1,volume:.8,playbackSpeed:1,preload:"metadata",startTime:0,playsInline:!0,controls:!0,hideControlsDelay:3e3,playPauseButton:!0,progressBar:!0,currentTime:!0,duration:!0,volumeControl:!0,muteButton:!0,chaptersButton:!0,qualityButton:!0,captionStyleButton:!0,speedButton:!0,captionsButton:!0,transcriptButton:!0,fullscreenButton:!0,pipButton:!1,seekInterval:10,seekIntervalLarge:30,captions:!0,captionsDefault:!1,captionsFontSize:"100%",captionsFontFamily:"sans-serif",captionsColor:"#FFFFFF",captionsBackgroundColor:"#000000",captionsOpacity:.8,audioDescription:!0,audioDescriptionSrc:null,audioDescriptionButton:!0,signLanguage:!0,signLanguageSrc:null,signLanguageButton:!0,signLanguagePosition:"bottom-right",transcript:!1,transcriptPosition:"external",transcriptContainer:null,keyboard:!0,keyboardShortcuts:{"play-pause":[" ","p","k"],"volume-up":["ArrowUp"],"volume-down":["ArrowDown"],"seek-forward":["ArrowRight"],"seek-backward":["ArrowLeft"],mute:["m"],fullscreen:["f"],captions:["c"],"caption-style-menu":["a"],"speed-up":[">"],"speed-down":["<"],"speed-menu":["s"],"quality-menu":["q"],"chapters-menu":["j"],"transcript-toggle":["t"]},ariaLabels:{},screenReaderAnnouncements:!0,highContrast:!1,focusHighlight:!0,metadataAlerts:{},metadataHashtags:{},language:"en",languages:["en"],debug:!1,classPrefix:"vidply",iconType:"svg",pauseOthersOnPlay:!0,onReady:null,onPlay:null,onPause:null,onEnded:null,onTimeUpdate:null,onVolumeChange:null,onError:null,...t},this.options.metadataAlerts=this.options.metadataAlerts||{},this.options.metadataHashtags=this.options.metadataHashtags||{},this.storage=new I("vidply");let i=this.storage.getPlayerPreferences();i&&(i.volume!==void 0&&(this.options.volume=i.volume),i.playbackSpeed!==void 0&&(this.options.playbackSpeed=i.playbackSpeed),i.muted!==void 0&&(this.options.muted=i.muted)),this.state={ready:!1,playing:!1,paused:!0,ended:!1,buffering:!1,seeking:!1,muted:this.options.muted,volume:this.options.volume,currentTime:0,duration:0,playbackSpeed:this.options.playbackSpeed,fullscreen:!1,pip:!1,captionsEnabled:this.options.captionsDefault,currentCaption:null,controlsVisible:!0,audioDescriptionEnabled:!1,signLanguageEnabled:!1},this.originalSrc=null,this.audioDescriptionSrc=this.options.audioDescriptionSrc,this.signLanguageSrc=this.options.signLanguageSrc,this.signLanguageSources=this.options.signLanguageSources||{},this.currentSignLanguage=null,this.signLanguageVideo=null,this.audioDescriptionSourceElement=null,this.originalAudioDescriptionSource=null,this.audioDescriptionCaptionTracks=[],this._audioDescriptionDesiredState=!1,this._textTracksCache=null,this._textTracksDirty=!0,this._sourceElementsCache=null,this._sourceElementsDirty=!0,this._trackElementsCache=null,this._trackElementsDirty=!0,this.timeouts=new Set,this.container=null,this.renderer=null,this.controlBar=null,this.captionManager=null,this.keyboardManager=null,this.settingsDialog=null,this.metadataCueChangeHandler=null,this.metadataAlertHandlers=new Map,this.init()}async init(){try{if(this.log("Initializing VidPly player"),this.options.languageFiles)try{await d.loadLanguagesFromUrls(this.options.languageFiles)}catch(t){console.warn("Failed to load some language files:",t)}if(this.options.languageFile&&this.options.languageFileUrl)try{await d.loadLanguageFromUrl(this.options.languageFile,this.options.languageFileUrl),this.log(`Custom language file loaded for ${this.options.languageFile}`)}catch(t){console.warn(`Failed to load language file for ${this.options.languageFile}:`,t)}if(!this.options.language||this.options.language==="en"){let t=this.detectHtmlLanguage();t&&(this.options.language=t,this.log(`Auto-detected language from HTML: ${t}`))}this.options.language||(this.options.language="en"),await d.ensureLanguage(this.options.language),d.setLanguage(this.options.language),this.createContainer(),this.element.src||this.element.querySelector("source")?.src?await this.initializeRenderer():this.log("No initial source - waiting for playlist or manual load"),this.options.controls&&(this.controlBar=new _(this),this.videoWrapper.appendChild(this.controlBar.element)),this.options.captions&&(this.captionManager=new R(this)),this.options.transcript&&await this.ensureTranscriptManager(),this.setupMetadataHandling(),this.options.keyboard&&(this.keyboardManager=new K(this)),this.setupResponsiveHandlers(),this.options.startTime>0&&this.seek(this.options.startTime),requestAnimationFrame(()=>{this.options.muted?this.mute():this.renderer&&this.renderer.media&&this.renderer.setMuted(!1),this.options.volume!==.8?this.setVolume(this.options.volume):this.renderer&&this.renderer.media&&this.renderer.setVolume(this.options.volume)}),this.state.ready=!0,this.emit("ready"),this.options.onReady&&this.options.onReady.call(this),this.options.autoplay&&this.play(),this.log("Player initialized successfully")}catch(e){this.handleError(e)}}async ensureTranscriptManager(){if(this.transcriptManager)return this.transcriptManager;if(!this.options.transcript&&!this.options.transcriptButton)return null;let e=await import("./vidply.TranscriptManager-UZ6DUFB6.min.js"),t=e.TranscriptManager||e.default;return t?(this.transcriptManager=new t(this),this.transcriptManager):null}async toggleTranscript(){let e=await this.ensureTranscriptManager();e&&(e.toggleTranscript(),this.controlBar&&this.controlBar.updateTranscriptButton())}detectHtmlLanguage(){let e=document.documentElement.lang||document.documentElement.getAttribute("lang");if(!e)return null;let t=e.toLowerCase().split("-")[0];return d.translations[t]||d.builtInLanguageLoaders&&d.builtInLanguageLoaders[t]?t:(this.log(`Language "${e}" not available, using English as fallback`),null)}createContainer(){let e=this.instanceId>1?`${d.t("player.label")} ${this.instanceId}`:d.t("player.label");this.container=u.createElement("div",{className:`${this.options.classPrefix}-player`,attributes:{role:"application","aria-label":e,tabindex:"0"}});let t=this.element.tagName.toLowerCase();this.container.classList.add(`${this.options.classPrefix}-${t}`),this.options.responsive&&this.container.classList.add(`${this.options.classPrefix}-responsive`),this.videoWrapper=u.createElement("div",{className:`${this.options.classPrefix}-video-wrapper`}),this.element.parentNode.insertBefore(this.container,this.element),this.element.tagName==="AUDIO"&&this.options.poster&&(this.trackArtworkElement=u.createElement("div",{className:`${this.options.classPrefix}-track-artwork`,attributes:{"aria-hidden":"true"}}),this.trackArtworkElement.style.backgroundImage=`url(${this.options.poster})`,this.container.appendChild(this.trackArtworkElement)),this.container.appendChild(this.videoWrapper),this.videoWrapper.appendChild(this.element),this.element.controls=!1,this.element.removeAttribute("controls"),this.element.setAttribute("tabindex","-1"),this.element.style.width="100%",this.element.style.height="100%",this.element.tagName==="VIDEO"&&this.options.playsInline&&(this.element.setAttribute("playsinline",""),this.element.playsInline=!0),this.options.width&&(this.container.style.width=typeof this.options.width=="number"?`${this.options.width}px`:this.options.width),this.options.height&&(this.container.style.height=typeof this.options.height=="number"?`${this.options.height}px`:this.options.height),this.options.poster&&this.element.tagName==="VIDEO"&&(this.element.poster=this.resolvePosterPath(this.options.poster)),this.element.tagName==="VIDEO"&&this.createPlayButtonOverlay(),this.element.vidply=this,P.instances.push(this),this.element.style.cursor="pointer",this.element.addEventListener("click",i=>{i.target===this.element&&this.toggle()}),this.on("play",()=>{this.hidePosterOverlay()}),this.on("timeupdate",()=>{this.state.currentTime>0&&this.hidePosterOverlay()}),this.element.addEventListener("loadeddata",()=>{(this.state.playing||this.state.currentTime>0)&&this.hidePosterOverlay()},{once:!0})}createPlayButtonOverlay(){this.playButtonOverlay=G(),this.playButtonOverlay.addEventListener("click",()=>{this.toggle()}),this.videoWrapper.appendChild(this.playButtonOverlay),this.on("play",()=>{this.playButtonOverlay.style.opacity="0",this.playButtonOverlay.style.pointerEvents="none"}),this.on("pause",()=>{this.playButtonOverlay.style.opacity="1",this.playButtonOverlay.style.pointerEvents="auto",this.positionPlayOverlayOnMobile()}),this.on("ended",()=>{this.playButtonOverlay.style.opacity="1",this.playButtonOverlay.style.pointerEvents="auto",this.positionPlayOverlayOnMobile()}),this.debouncedPositionPlayOverlay=U(()=>{this.positionPlayOverlayOnMobile()},150),window.addEventListener("resize",this.debouncedPositionPlayOverlay),this.on("loadedmetadata",()=>{this.positionPlayOverlayOnMobile()}),this.on("enterfullscreen",()=>{O(()=>this.positionPlayOverlayOnMobile(),100)}),this.on("exitfullscreen",()=>{O(()=>this.positionPlayOverlayOnMobile(),100)})}positionPlayOverlayOnMobile(){if(!this.playButtonOverlay||this.element.tagName!=="VIDEO")return;if(!Q()){this.playButtonOverlay.style.top="";return}let t=this.element.getBoundingClientRect(),i=this.videoWrapper.getBoundingClientRect(),s=t.top-i.top+t.height/2;this.playButtonOverlay.style.top=`${s}px`}async initializeRenderer(){let e=this.element.src||this.element.querySelector("source")?.src;if(!e)throw new Error("No media source found");let t=this.sourceElements;for(let n of t){let r=n.getAttribute("data-desc-src"),o=n.getAttribute("data-orig-src");if(r||o){if(this.audioDescriptionSourceElement||(this.audioDescriptionSourceElement=n),o)this.originalAudioDescriptionSource||(this.originalAudioDescriptionSource=o),this.originalSrc||(this.originalSrc=o);else{let h=n.getAttribute("src");!this.originalAudioDescriptionSource&&h&&(this.originalAudioDescriptionSource=h),!this.originalSrc&&h&&(this.originalSrc=h)}r&&!this.audioDescriptionSrc&&(this.audioDescriptionSrc=r)}}this.trackElements.forEach(n=>{let r=n.getAttribute("kind"),o=n.getAttribute("data-desc-src");(r==="captions"||r==="subtitles"||r==="chapters")&&o&&(this.audioDescriptionCaptionTracks.push({trackElement:n,originalSrc:n.getAttribute("src"),describedSrc:o,originalTrackSrc:n.getAttribute("data-orig-src")||n.getAttribute("src"),explicit:!0}),this.log(`Found explicit described ${r} track: ${n.getAttribute("src")} -> ${o}`))}),this.originalSrc||(this.originalSrc=e);let s=ee;if(e.includes("youtube.com")||e.includes("youtu.be")){let n=await import("./vidply.YouTubeRenderer-DGKKWB5M.min.js");s=n.YouTubeRenderer||n.default}else if(e.includes("vimeo.com")){let n=await import("./vidply.VimeoRenderer-P3PU27S7.min.js");s=n.VimeoRenderer||n.default}else if(e.includes(".m3u8")){let n=await import("./vidply.HLSRenderer-LDXSMWTI.min.js");s=n.HLSRenderer||n.default}this.log(`Using ${s?.name||"HTML5Renderer"} renderer`),this.renderer=new s(this),await this.renderer.init(),this.invalidateTrackCache()}get textTracks(){return(!this._textTracksCache||this._textTracksDirty)&&(this._textTracksCache=Array.from(this.element.textTracks||[]),this._textTracksDirty=!1),this._textTracksCache}get sourceElements(){return(!this._sourceElementsCache||this._sourceElementsDirty)&&(this._sourceElementsCache=Array.from(this.element.querySelectorAll("source")),this._sourceElementsDirty=!1),this._sourceElementsCache}get trackElements(){return(!this._trackElementsCache||this._trackElementsDirty)&&(this._trackElementsCache=Array.from(this.element.querySelectorAll("track")),this._trackElementsDirty=!1),this._trackElementsCache}invalidateTrackCache(){this._textTracksDirty=!0,this._trackElementsDirty=!0,this._sourceElementsDirty=!0}findTextTrack(e,t=null){let i=this.textTracks;return t?i.find(s=>s.kind===e&&s.language===t):i.find(s=>s.kind===e)}findSourceElement(e,t=null){let i=this.sourceElements;return t?i.find(s=>s.getAttribute(e)===t):i.find(s=>s.hasAttribute(e))}findTrackElement(e){return this.trackElements.find(t=>t.track===e)}resolvePosterPath(e){if(!e||e.match(/^(https?:|\/)/))return e;try{return new URL(e,window.location.href).href}catch{return e}}showPosterOverlay(){if(!this.videoWrapper||this.element.tagName!=="VIDEO")return;let e=this.element.getAttribute("poster")||this.element.poster||this.options.poster;if(!e)return;let t=this.resolvePosterPath(e);this.videoWrapper.style.setProperty("--vidply-poster-image",`url("${t}")`),this.videoWrapper.classList.add("vidply-forced-poster")}hidePosterOverlay(){this.videoWrapper&&(this.videoWrapper.classList.remove("vidply-forced-poster"),this.videoWrapper.style.removeProperty("--vidply-poster-image"))}setManagedTimeout(e,t){let i=setTimeout(()=>{this.timeouts.delete(i),e()},t);return this.timeouts.add(i),i}clearManagedTimeout(e){e&&(clearTimeout(e),this.timeouts.delete(e))}async load(e){try{this.log("Loading new media:",e.src),this.renderer&&this.pause();let t=window.scrollX||window.pageXOffset,i=window.scrollY||window.pageYOffset;this.trackElements.forEach(h=>h.remove()),this.invalidateTrackCache(),this.element.src=e.src,e.type&&(this.element.type=e.type),e.poster&&this.element.tagName==="VIDEO"&&(this.element.poster=this.resolvePosterPath(e.poster)),e.tracks&&e.tracks.length>0&&(e.tracks.forEach(h=>{let l=document.createElement("track");l.src=h.src,l.kind=h.kind||"captions",l.srclang=h.srclang||"en",l.label=h.label||h.srclang,h.default&&(l.default=!0);let a=this.element.firstChild;a&&a.nodeType===Node.ELEMENT_NODE&&a.tagName!=="TRACK"?this.element.insertBefore(l,a):this.element.appendChild(l)}),this.invalidateTrackCache());let n=this.state.signLanguageEnabled,r=this.state.audioDescriptionEnabled;this.audioDescriptionSrc=e.audioDescriptionSrc||null,this.signLanguageSrc=e.signLanguageSrc||null,this.originalSrc=e.src,r&&this.disableAudioDescription(),n&&this.disableSignLanguage();let o=this.shouldChangeRenderer(e.src);if(o&&this.renderer&&(this.renderer.destroy(),this.renderer=null),!this.renderer||o?await this.initializeRenderer():(this.renderer.media=this.element,this.element.load()),window.scrollTo(t,i),this.captionManager&&(this.captionManager.destroy(),this.captionManager=new R(this)),this.transcriptManager){let h=this.transcriptManager.isVisible;this.transcriptManager.destroy(),this.transcriptManager=null,await this.ensureTranscriptManager(),h&&this.controlBar&&this.controlBar.hasCaptionTracks()&&this.transcriptManager?.showTranscript()}this.controlBar&&this.updateControlBar(),window.scrollTo(t,i),n&&this.signLanguageSrc&&setTimeout(()=>{this.enableSignLanguage(),window.scrollTo(t,i)},150),r&&this.audioDescriptionSrc&&setTimeout(()=>{this.enableAudioDescription(),window.scrollTo(t,i)},150),this.emit("sourcechange",e),this.log("Media loaded successfully")}catch(t){this.handleError(t)}}updateControlBar(){if(!this.controlBar)return;let e=this.controlBar;e.element.innerHTML="",e.createControls(),e.attachEvents(),e.setupAutoHide(),e.setupOverflowDetection()}shouldChangeRenderer(e){if(!this.renderer)return!0;let t=e.includes("youtube.com")||e.includes("youtu.be"),i=e.includes("vimeo.com"),s=e.includes(".m3u8"),n=this.renderer.constructor.name;return!!(t&&n!=="YouTubeRenderer"||i&&n!=="VimeoRenderer"||s&&n!=="HLSRenderer"||!t&&!i&&!s&&n!=="HTML5Renderer")}play(){this.renderer&&this.renderer.play()}pause(){this.renderer&&this.renderer.pause()}stop(){this.pause(),this.seek(0)}toggle(){this.state.playing?this.pause():this.play()}seek(e){this.renderer&&this.renderer.seek(e)}seekForward(e=this.options.seekInterval){this.seek(Math.min(this.state.currentTime+e,this.state.duration))}seekBackward(e=this.options.seekInterval){this.seek(Math.max(this.state.currentTime-e,0))}setVolume(e){let t=Math.max(0,Math.min(1,e));this.renderer&&this.renderer.setVolume(t),this.state.volume=t,t>0&&this.state.muted&&(this.state.muted=!1,this.renderer&&this.renderer.setMuted(!1),this.emit("volumechange")),this.savePlayerPreferences()}getVolume(){return this.state.volume}mute(){this.renderer&&this.renderer.setMuted(!0),this.state.muted=!0,this.savePlayerPreferences(),this.emit("volumechange")}unmute(){this.renderer&&this.renderer.setMuted(!1),this.state.muted=!1,this.savePlayerPreferences(),this.emit("volumechange")}toggleMute(){this.state.muted?this.unmute():this.mute()}setPlaybackSpeed(e){let t=Math.max(.25,Math.min(2,e));this.renderer&&this.renderer.setPlaybackSpeed(t),this.state.playbackSpeed=t,this.savePlayerPreferences(),this.emit("playbackspeedchange",t)}getPlaybackSpeed(){return this.state.playbackSpeed}savePlayerPreferences(){this.storage.savePlayerPreferences({volume:this.state.volume,muted:this.state.muted,playbackSpeed:this.state.playbackSpeed})}enterFullscreen(){let e=this.container,t=null;if(/iPad|iPhone|iPod/.test(navigator.userAgent)||navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1){this._enablePseudoFullscreen();return}e.requestFullscreen?t=e.requestFullscreen():e.webkitRequestFullscreen?t=e.webkitRequestFullscreen():e.mozRequestFullScreen?t=e.mozRequestFullScreen():e.msRequestFullscreen&&(t=e.msRequestFullscreen()),t&&t.catch&&t.catch(s=>{this.log("Fullscreen API failed, using pseudo-fullscreen:",s.message),this._enablePseudoFullscreen()}),!e.requestFullscreen&&!e.webkitRequestFullscreen&&!e.mozRequestFullScreen&&!e.msRequestFullscreen?this._enablePseudoFullscreen():(this.state.fullscreen=!0,this.container.classList.add(`${this.options.classPrefix}-fullscreen`),this.emit("fullscreenchange",!0))}exitFullscreen(){!!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement)?document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen():this._disablePseudoFullscreen(),this.state.fullscreen=!1,this.container.classList.remove(`${this.options.classPrefix}-fullscreen`),this.emit("fullscreenchange",!1)}toggleFullscreen(){this.state.fullscreen?this.exitFullscreen():this.enterFullscreen()}_enablePseudoFullscreen(){this.state.fullscreen=!0,this.container.classList.add(`${this.options.classPrefix}-fullscreen`),this._originalScrollX=window.scrollX||window.pageXOffset,this._originalScrollY=window.scrollY||window.pageYOffset,this._originalBodyOverflow=document.body.style.overflow,this._originalBodyPosition=document.body.style.position,this._originalBodyWidth=document.body.style.width,this._originalBodyHeight=document.body.style.height,this._originalHtmlOverflow=document.documentElement.style.overflow,document.body.style.overflow="hidden",document.body.style.width="100%",document.body.style.height="100%",document.documentElement.style.overflow="hidden",this._originalViewport=document.querySelector('meta[name="viewport"]')?.getAttribute("content");let e=document.querySelector('meta[name="viewport"]');e&&e.setAttribute("content","width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"),window.scrollTo(0,0),this.emit("fullscreenchange",!0),this.emit("enterfullscreen")}_disablePseudoFullscreen(){if(this._originalBodyOverflow!==void 0&&(document.body.style.overflow=this._originalBodyOverflow,delete this._originalBodyOverflow),this._originalBodyPosition!==void 0&&(document.body.style.position=this._originalBodyPosition,delete this._originalBodyPosition),this._originalBodyWidth!==void 0&&(document.body.style.width=this._originalBodyWidth,delete this._originalBodyWidth),this._originalBodyHeight!==void 0&&(document.body.style.height=this._originalBodyHeight,delete this._originalBodyHeight),this._originalHtmlOverflow!==void 0&&(document.documentElement.style.overflow=this._originalHtmlOverflow,delete this._originalHtmlOverflow),this._originalViewport!==void 0){let e=document.querySelector('meta[name="viewport"]');e&&e.setAttribute("content",this._originalViewport),delete this._originalViewport}this._originalScrollX!==void 0&&this._originalScrollY!==void 0&&(window.scrollTo(this._originalScrollX,this._originalScrollY),delete this._originalScrollX,delete this._originalScrollY),this.emit("exitfullscreen")}enterPiP(){this.element.requestPictureInPicture&&(this.element.requestPictureInPicture(),this.state.pip=!0,this.emit("pipchange",!0))}exitPiP(){document.pictureInPictureElement&&(document.exitPictureInPicture(),this.state.pip=!1,this.emit("pipchange",!1))}togglePiP(){this.state.pip?this.exitPiP():this.enterPiP()}enableCaptions(){this.captionManager&&(this.captionManager.enable(),this.state.captionsEnabled=!0)}disableCaptions(){this.captionManager&&(this.captionManager.disable(),this.state.captionsEnabled=!1)}toggleCaptions(){this.state.captionsEnabled?this.disableCaptions():this.enableCaptions()}async validateTrackExists(e){try{return(await fetch(e,{method:"HEAD",cache:"no-cache"})).ok}catch{return!1}}stripVTTFormatting(e){return e?e.replace(/<[^>]+>/g,"").replace(/\n/g," ").trim().toLowerCase():""}findMatchingCaptionTime(e,t){if(!e||!t||t.length===0)return null;let i=this.stripVTTFormatting(e);for(let s of t){if(s.kind!=="captions"&&s.kind!=="subtitles")continue;let n=s.track;if(!(!n||!n.cues))for(let r=0;r<n.cues.length;r++){let o=n.cues[r],h=this.stripVTTFormatting(o.text);if(h===i)return o.startTime;let l=i.split(/\s+/).filter(c=>c.length>2),a=h.split(/\s+/).filter(c=>c.length>2);if(l.length>0&&a.length>0&&l.filter(p=>a.includes(p)).length/l.length>=.8)return o.startTime}}return null}async enableAudioDescription(){let e=this.sourceElements.some(a=>a.getAttribute("data-desc-src")),t=this.audioDescriptionCaptionTracks.length>0;if(!this.audioDescriptionSrc&&!e&&!t){console.warn("VidPly: No audio description source, source elements, or tracks provided");return}let i=this.element.currentTime,s=this.state.playing,n=!s&&i===0,r=null;if(this.captionManager&&this.captionManager.currentTrack){let a=this.captionManager.currentTrack.track;if(a&&a.activeCues&&a.activeCues.length>0){let c=a.activeCues[0];r=this.stripVTTFormatting(c.text)}}let o=this.resolvePosterPath(this.element.getAttribute("poster")||this.element.poster||this.options.poster);n&&this.showPosterOverlay();let h=[];if(this.audioDescriptionSourceElement){let a=this.element.currentSrc||this.element.src,c=this.sourceElements,g=null,p=this.audioDescriptionSrc;for(let y of c){let v=y.getAttribute("src"),w=y.getAttribute("data-desc-src"),L=v?v.split("/").pop():"",S=a?a.split("/").pop():"";if(a&&(a===v||a.includes(v)||a.includes(L)||L&&S===L)){g=y,w?p=w:v&&(p=this.audioDescriptionSrc||p);break}}if(!g){g=this.audioDescriptionSourceElement;let y=g.getAttribute("data-desc-src");y&&(p=y)}if(this.audioDescriptionCaptionTracks.length>0){let y=this.audioDescriptionCaptionTracks.map(async L=>{if(L.trackElement&&L.describedSrc)if(L.explicit===!0)try{let S=await this.validateTrackExists(L.describedSrc);return{trackInfo:L,exists:S}}catch{return{trackInfo:L,exists:!1}}else return{trackInfo:L,exists:!1};return{trackInfo:L,exists:!1}}),v=await Promise.all(y),w=v.filter(L=>L.exists);if(w.length>0){let L=new Map;w.forEach(({trackInfo:T})=>{let B=T.trackElement.track;B?L.set(T,{wasShowing:B.mode==="showing",wasHidden:B.mode==="hidden"}):L.set(T,{wasShowing:!1,wasHidden:!1})});let S=w.map(({trackInfo:T})=>{let B=T.trackElement.getAttribute("src"),$=T.trackElement.parentNode,X=T.trackElement.nextSibling,A={};return Array.from(T.trackElement.attributes).forEach(D=>{A[D.name]=D.value}),{trackInfo:T,oldSrc:B,parent:$,nextSibling:X,attributes:A}});S.forEach(({trackInfo:T})=>{T.trackElement.remove()}),this.element.load(),await new Promise(T=>{setTimeout(()=>{S.forEach(({trackInfo:$,oldSrc:X,parent:A,nextSibling:D,attributes:H})=>{h.push($);let N=document.createElement("track");N.setAttribute("src",$.describedSrc),Object.keys(H).forEach(V=>{V!=="src"&&V!=="data-desc-src"&&N.setAttribute(V,H[V])}),D&&D.parentNode?A.insertBefore(N,D):A.appendChild(N),$.trackElement=N}),this.invalidateTrackCache();let B=()=>{this.setManagedTimeout(()=>{h.forEach($=>{let A=$.trackElement.track;if(A){let D=L.get($)||{wasShowing:!1,wasHidden:!1};A.mode="hidden";let H=()=>{D.wasShowing||D.wasHidden?A.mode="hidden":A.mode="disabled"};A.readyState>=2?H():(A.addEventListener("load",H,{once:!0}),A.addEventListener("error",H,{once:!0}))}})},300)};this.element.readyState>=1?setTimeout(B,200):(this.element.addEventListener("loadedmetadata",B,{once:!0}),setTimeout(B,2e3)),T()},100)});let C=v.length-w.length}}let f=this.sourceElements,b=[];f.forEach(y=>{let v=y.getAttribute("data-desc-src"),w=y.getAttribute("src");if(v){let L=y.getAttribute("type"),S=y.getAttribute("data-orig-src");S||(S=w),b.push({src:v,type:L,origSrc:S,descSrc:v})}else{let L=y.getAttribute("type"),S=y.getAttribute("src");b.push({src:S,type:L,origSrc:null,descSrc:null})}});let k=this.element.hasAttribute("src"),m=k?this.element.getAttribute("src"):null;k&&this.element.removeAttribute("src"),f.forEach(y=>{y.remove()}),b.forEach(y=>{let v=document.createElement("source");v.setAttribute("src",y.src),y.type&&v.setAttribute("type",y.type),y.origSrc&&v.setAttribute("data-orig-src",y.origSrc),y.descSrc&&v.setAttribute("data-desc-src",y.descSrc);let w=this.element.querySelector("track");w?this.element.insertBefore(v,w):this.element.appendChild(v)}),this._sourceElementsDirty=!0,this._sourceElementsCache=null,o&&this.element.tagName==="VIDEO"&&(this.element.poster=o),this.element.load(),await new Promise(y=>{let v=()=>{this.element.removeEventListener("loadedmetadata",v),y()};this.element.readyState>=1?y():this.element.addEventListener("loadedmetadata",v)}),await new Promise(y=>setTimeout(y,300)),(i>0||s)&&await new Promise(y=>{let v=()=>{this.element.removeEventListener("canplay",v),this.element.removeEventListener("canplaythrough",v),y()};this.element.readyState>=3?y():(this.element.addEventListener("canplay",v,{once:!0}),this.element.addEventListener("canplaythrough",v,{once:!0}),setTimeout(()=>{this.element.removeEventListener("canplay",v),this.element.removeEventListener("canplaythrough",v),y()},3e3))});let M=i;if(r&&this.captionManager&&this.captionManager.tracks.length>0){await new Promise(v=>setTimeout(v,500));let y=this.findMatchingCaptionTime(r,this.captionManager.tracks);y!==null&&(M=y,this.options.debug&&console.log(`[VidPly] Syncing via caption: ${i}s -> ${M}s`))}if(M>0&&(this.seek(M),await new Promise(y=>setTimeout(y,100))),s?(await this.play(),this.setManagedTimeout(()=>{this.hidePosterOverlay()},100)):(this.pause(),n||this.hidePosterOverlay()),!this._audioDescriptionDesiredState)return;this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled")}else{if(this.audioDescriptionCaptionTracks.length>0){let g=this.audioDescriptionCaptionTracks.map(async b=>{if(b.trackElement&&b.describedSrc)if(b.explicit===!0)try{let k=await this.validateTrackExists(b.describedSrc);return{trackInfo:b,exists:k}}catch{return{trackInfo:b,exists:!1}}else return{trackInfo:b,exists:!1};return{trackInfo:b,exists:!1}}),f=(await Promise.all(g)).filter(b=>b.exists);if(f.length>0){let b=new Map;f.forEach(({trackInfo:m})=>{let M=m.trackElement.track;M?b.set(m,{wasShowing:M.mode==="showing",wasHidden:M.mode==="hidden"}):b.set(m,{wasShowing:!1,wasHidden:!1})});let k=f.map(({trackInfo:m})=>{let M=m.trackElement.getAttribute("src"),y=m.trackElement.parentNode,v=m.trackElement.nextSibling,w={};return Array.from(m.trackElement.attributes).forEach(L=>{w[L.name]=L.value}),{trackInfo:m,oldSrc:M,parent:y,nextSibling:v,attributes:w}});k.forEach(({trackInfo:m})=>{m.trackElement.remove()}),this.element.load(),setTimeout(()=>{k.forEach(({trackInfo:M,oldSrc:y,parent:v,nextSibling:w,attributes:L})=>{h.push(M);let S=document.createElement("track");S.setAttribute("src",M.describedSrc),Object.keys(L).forEach(T=>{T!=="src"&&T!=="data-desc-src"&&S.setAttribute(T,L[T])});let C=v.firstChild;C&&C.nodeType===Node.ELEMENT_NODE&&C.tagName!=="TRACK"?v.insertBefore(S,C):w&&w.parentNode?v.insertBefore(S,w):v.appendChild(S),M.trackElement=S}),this.element.load();let m=()=>{setTimeout(()=>{h.forEach(M=>{let v=M.trackElement.track;if(v){let w=b.get(M)||{wasShowing:!1,wasHidden:!1};v.mode="hidden";let L=()=>{w.wasShowing||w.wasHidden?v.mode="hidden":v.mode="disabled"};v.readyState>=2?L():(v.addEventListener("load",L,{once:!0}),v.addEventListener("error",L,{once:!0}))}})},300)};this.element.readyState>=1?setTimeout(m,200):(this.element.addEventListener("loadedmetadata",m,{once:!0}),setTimeout(m,2e3))},100)}}let a=this.sourceElements;if(a.some(g=>g.getAttribute("data-desc-src"))){let g=[];a.forEach(p=>{let f=p.getAttribute("data-desc-src"),b=p.getAttribute("src");if(f){let k=p.getAttribute("type"),m=p.getAttribute("data-orig-src");m||(m=b),g.push({src:f,type:k,origSrc:m,descSrc:f})}else{let k=p.getAttribute("type"),m=p.getAttribute("src");g.push({src:m,type:k,origSrc:null,descSrc:null})}}),a.forEach(p=>{p.remove()}),g.forEach(p=>{let f=document.createElement("source");f.setAttribute("src",p.src),p.type&&f.setAttribute("type",p.type),p.origSrc&&f.setAttribute("data-orig-src",p.origSrc),p.descSrc&&f.setAttribute("data-desc-src",p.descSrc),this.element.appendChild(f)}),o&&this.element.tagName==="VIDEO"&&(this.element.poster=o),this.element.load(),this.invalidateTrackCache()}else o&&this.element.tagName==="VIDEO"&&(this.element.poster=o),this.element.src=this.audioDescriptionSrc}await new Promise(a=>{let c=()=>{this.element.removeEventListener("loadedmetadata",c),a()};this.element.readyState>=1?a():this.element.addEventListener("loadedmetadata",c)}),(i>0||s)&&await new Promise(a=>{let c=()=>{this.element.removeEventListener("canplay",c),this.element.removeEventListener("canplaythrough",c),a()};this.element.readyState>=3?a():(this.element.addEventListener("canplay",c,{once:!0}),this.element.addEventListener("canplaythrough",c,{once:!0}),setTimeout(()=>{this.element.removeEventListener("canplay",c),this.element.removeEventListener("canplaythrough",c),a()},3e3))}),this.element.tagName==="VIDEO"&&i===0&&!s&&this.element.readyState>=1&&(this.element.currentTime=.001,this.setManagedTimeout(()=>{this.element.currentTime=0},10));let l=i;if(r&&this.captionManager&&this.captionManager.tracks.length>0){await new Promise(c=>setTimeout(c,500));let a=this.findMatchingCaptionTime(r,this.captionManager.tracks);a!==null&&(l=a,this.options.debug&&console.log(`[VidPly] Syncing via caption: ${i}s -> ${l}s`))}if(l>0&&(this.seek(l),await new Promise(a=>setTimeout(a,100))),s?(await this.play(),this.setManagedTimeout(()=>{this.hidePosterOverlay()},100)):(this.pause(),n||this.hidePosterOverlay()),h.length>0&&this.captionManager){let a=this.state.captionsEnabled,c=null;if(this.captionManager.currentTrack){let p=this.captionManager.tracks.findIndex(f=>f.track===this.captionManager.currentTrack.track);p>=0&&(c={language:this.captionManager.tracks[p].language,kind:this.captionManager.tracks[p].kind})}setTimeout(()=>{if(this.captionManager.tracks=[],this.captionManager.loadTracks(),a&&c&&this.captionManager.tracks.length>0){let p=this.captionManager.tracks.findIndex(f=>f.language===c.language&&f.kind===c.kind);if(p>=0){let f=this.captionManager.tracks[p];if(f.track.readyState>=2)this.captionManager.enable(p);else{let b=()=>{f.track.removeEventListener("load",b),f.track.removeEventListener("error",b),this.captionManager&&this.captionManager.tracks.includes(f)&&this.captionManager.enable(p)};f.track.addEventListener("load",b,{once:!0}),f.track.addEventListener("error",b,{once:!0}),f.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(f)&&this.captionManager.enable(p)},1e3)}}else if(this.captionManager.tracks.length>0){let f=this.captionManager.tracks[0];if(f.track.readyState>=2)this.captionManager.enable(0);else{let b=()=>{f.track.removeEventListener("load",b),f.track.removeEventListener("error",b),this.captionManager&&this.captionManager.tracks.includes(f)&&this.captionManager.enable(0)};f.track.addEventListener("load",b,{once:!0}),f.track.addEventListener("error",b,{once:!0}),f.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(f)&&this.captionManager.enable(0)},1e3)}}}},600)}if(this.transcriptManager&&this.transcriptManager.isVisible){let a=typeof h<"u"?h:[];if(a.length>0){let c=()=>{this.invalidateTrackCache();let p=this.textTracks,f=a.map(m=>{let M=m.trackElement,y=M.getAttribute("src"),v=M.getAttribute("srclang"),w=M.getAttribute("kind"),L=p.find(S=>M.track===S);if(L||(L=p.find(S=>{if(S.language===v&&(S.kind===w||w==="captions"&&S.kind==="subtitles")){let C=this.findTrackElement(S);if(C&&C.getAttribute("src")===y)return!0}return!1})),L){let S=this.findTrackElement(L);if(S&&S.getAttribute("src")!==y)return null}return L}).filter(Boolean);if(f.length===0){this.setManagedTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},1e3);return}f.forEach(m=>{m.mode==="disabled"&&(m.mode="hidden")});let b=0,k=()=>{b++,b>=f.length&&this.setManagedTimeout(()=>{if(this.transcriptManager&&this.transcriptManager.loadTranscriptData){this.invalidateTrackCache();let m=this.textTracks,M=a.map(v=>v.describedSrc);(f.some(v=>{let w=this.findTrackElement(v);return w&&M.includes(w.getAttribute("src"))})||f.length>0)&&this.transcriptManager.loadTranscriptData()}},800)};f.forEach(m=>{m.mode==="disabled"&&(m.mode="hidden");let M=this.findTrackElement(m),y=M?M.getAttribute("src"):null,v=a.find(L=>{let S=L.trackElement;return S&&(S.track===m||S.getAttribute("srclang")===m.language&&S.getAttribute("kind")===m.kind)}),w=v?v.describedSrc:null;if(w&&y&&y!==w){k();return}if(m.readyState>=2&&m.cues&&m.cues.length>0)k();else{m.mode==="disabled"&&(m.mode="hidden");let L=()=>{this.setManagedTimeout(k,300)};m.readyState>=2?this.setManagedTimeout(()=>{m.cues&&m.cues.length>0?k():m.addEventListener("load",L,{once:!0})},100):(m.addEventListener("load",L,{once:!0}),m.addEventListener("error",()=>{k()},{once:!0}))}})};this.setManagedTimeout(()=>{this.element.readyState>=1?c():(this.element.addEventListener("loadedmetadata",c,{once:!0}),this.setManagedTimeout(c,2e3))},500),setTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},5e3)}else setTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},800)}n||this.hidePosterOverlay(),this._audioDescriptionDesiredState&&(this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled"))}async disableAudioDescription(){if(!this.originalSrc)return;let e=this.element.currentTime,t=this.state.playing,i=null;if(this.captionManager&&this.captionManager.currentTrack){let l=this.captionManager.currentTrack.track;if(l&&l.activeCues&&l.activeCues.length>0){let a=l.activeCues[0];i=this.stripVTTFormatting(a.text)}}let s=this.resolvePosterPath(this.element.getAttribute("poster")||this.element.poster||this.options.poster),n=[];if(this.audioDescriptionCaptionTracks.length>0){let l=this.audioDescriptionCaptionTracks.map(a=>{let c=a.trackElement;if(!c||!c.parentNode)return null;let g=c.parentNode,p=c.nextSibling,f={};return Array.from(c.attributes).forEach(b=>{f[b.name]=b.value}),{trackInfo:a,parent:g,nextSibling:p,attributes:f}}).filter(Boolean);l.forEach(({trackInfo:a})=>{a.trackElement&&a.trackElement.parentNode&&a.trackElement.remove()}),this.element.load(),await new Promise(a=>{setTimeout(()=>{l.forEach(({trackInfo:c,parent:g,nextSibling:p,attributes:f})=>{n.push(c);let b=document.createElement("track");b.setAttribute("src",c.originalTrackSrc),Object.keys(f).forEach(k=>{k!=="src"&&k!=="data-desc-src"&&b.setAttribute(k,f[k])}),c.describedSrc&&b.setAttribute("data-desc-src",c.describedSrc),p&&p.parentNode?g.insertBefore(b,p):g.appendChild(b),c.trackElement=b}),this.invalidateTrackCache(),a()},100)})}let r=this.sourceElements;if(r.some(l=>l.getAttribute("data-orig-src"))){let l=[];r.forEach(g=>{let p=g.getAttribute("data-orig-src"),f=g.getAttribute("data-desc-src");if(p){let b=g.getAttribute("type");l.push({src:p,type:b,origSrc:p,descSrc:f})}else{let b=g.getAttribute("type"),k=g.getAttribute("src");l.push({src:k,type:b,origSrc:null,descSrc:f})}});let a=this.element.hasAttribute("src"),c=a?this.element.getAttribute("src"):null;a&&this.element.removeAttribute("src"),r.forEach(g=>{g.remove()}),l.forEach(g=>{let p=document.createElement("source");p.setAttribute("src",g.src),g.type&&p.setAttribute("type",g.type),g.origSrc&&p.setAttribute("data-orig-src",g.origSrc),g.descSrc&&p.setAttribute("data-desc-src",g.descSrc);let f=this.element.querySelector("track");f?this.element.insertBefore(p,f):this.element.appendChild(p)}),this._sourceElementsDirty=!0,this._sourceElementsCache=null,s&&this.element.tagName==="VIDEO"&&(this.element.poster=s),this.element.load()}else{s&&this.element.tagName==="VIDEO"&&(this.element.poster=s);let l=this.originalAudioDescriptionSource||this.originalSrc;this.element.src=l,this.element.load()}await new Promise(l=>{let a=()=>{this.element.removeEventListener("loadedmetadata",a),l()};this.element.readyState>=1?l():this.element.addEventListener("loadedmetadata",a)}),(e>0||t)&&await new Promise(l=>{let a=()=>{this.element.removeEventListener("canplay",a),this.element.removeEventListener("canplaythrough",a),l()};this.element.readyState>=3?l():(this.element.addEventListener("canplay",a,{once:!0}),this.element.addEventListener("canplaythrough",a,{once:!0}),setTimeout(()=>{this.element.removeEventListener("canplay",a),this.element.removeEventListener("canplaythrough",a),l()},3e3))});let h=e;if(i&&this.captionManager&&this.captionManager.tracks.length>0){await new Promise(a=>setTimeout(a,500));let l=this.findMatchingCaptionTime(i,this.captionManager.tracks);l!==null&&(h=l,this.options.debug&&console.log(`[VidPly] Syncing via caption: ${e}s -> ${h}s`))}if(h>0&&(this.seek(h),await new Promise(l=>setTimeout(l,100))),t?(await this.play(),this.hidePosterOverlay()):(this.pause(),!t&&h===0?this.showPosterOverlay():this.hidePosterOverlay()),n.length>0&&this.captionManager){let l=this.state.captionsEnabled,a=null;if(this.captionManager.currentTrack){let g=this.captionManager.tracks.findIndex(p=>p.track===this.captionManager.currentTrack.track);g>=0&&(a={language:this.captionManager.tracks[g].language,kind:this.captionManager.tracks[g].kind})}setTimeout(()=>{if(this.captionManager.tracks=[],this.captionManager.loadTracks(),l&&a&&this.captionManager.tracks.length>0){let g=this.captionManager.tracks.findIndex(p=>p.language===a.language&&p.kind===a.kind);if(g>=0){let p=this.captionManager.tracks[g];if(p.track.readyState>=2)this.captionManager.enable(g);else{let f=()=>{p.track.removeEventListener("load",f),p.track.removeEventListener("error",f),this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(g)};p.track.addEventListener("load",f,{once:!0}),p.track.addEventListener("error",f,{once:!0}),p.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(g)},1e3)}}else if(this.captionManager.tracks.length>0){let p=this.captionManager.tracks[0];if(p.track.readyState>=2)this.captionManager.enable(0);else{let f=()=>{p.track.removeEventListener("load",f),p.track.removeEventListener("error",f),this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(0)};p.track.addEventListener("load",f,{once:!0}),p.track.addEventListener("error",f,{once:!0}),p.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(0)},1e3)}}}},600)}this.transcriptManager&&this.transcriptManager.isVisible&&this.setManagedTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},500),!this._audioDescriptionDesiredState&&(this.state.audioDescriptionEnabled=!1,this.emit("audiodescriptiondisabled"))}async toggleAudioDescription(){let e=this.findTextTrack("descriptions"),t=this.audioDescriptionSrc||this.sourceElements.some(i=>i.getAttribute("data-desc-src"));if(e&&t)if(this.state.audioDescriptionEnabled)this._audioDescriptionDesiredState=!1,e.mode="hidden",await this.disableAudioDescription();else{this._audioDescriptionDesiredState=!0,await this.enableAudioDescription();let i=()=>{this.invalidateTrackCache();let s=this.findTextTrack("descriptions");s?s.mode==="disabled"?(s.mode="hidden",this.setManagedTimeout(()=>{s.mode="showing"},50)):s.mode="showing":this.element.readyState<2&&this.setManagedTimeout(i,100)};this.element.readyState>=1?this.setManagedTimeout(i,200):this.element.addEventListener("loadedmetadata",()=>{this.setManagedTimeout(i,200)},{once:!0})}else e?e.mode==="showing"?(this._audioDescriptionDesiredState=!1,e.mode="hidden",this.state.audioDescriptionEnabled=!1,this.emit("audiodescriptiondisabled")):(this._audioDescriptionDesiredState=!0,e.mode="showing",this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled")):t&&(this.state.audioDescriptionEnabled?(this._audioDescriptionDesiredState=!1,await this.disableAudioDescription()):(this._audioDescriptionDesiredState=!0,await this.enableAudioDescription()))}enableSignLanguage(){let e=Object.keys(this.signLanguageSources).length>0,t=!!this.signLanguageSrc;if(!e&&!t){console.warn("No sign language video source provided");return}if(this.signLanguageWrapper){this.signLanguageWrapper.style.display="block",this.state.signLanguageEnabled=!0,this.emit("signlanguageenabled"),this.setManagedTimeout(()=>{this.signLanguageSettingsButton&&document.contains(this.signLanguageSettingsButton)&&this.signLanguageSettingsButton.focus({preventScroll:!0})},150);return}let i=null,s=null;if(e){if(this.captionManager&&this.captionManager.currentTrack){let c=this.captionManager.currentTrack.language?.toLowerCase().split("-")[0];c&&this.signLanguageSources[c]&&(i=c,s=this.signLanguageSources[c])}if(!i&&this.options.language){let c=this.options.language.toLowerCase().split("-")[0];this.signLanguageSources[c]&&(i=c,s=this.signLanguageSources[c])}i||(i=Object.keys(this.signLanguageSources)[0],s=this.signLanguageSources[i]),this.currentSignLanguage=i}else s=this.signLanguageSrc;this.signLanguageWrapper=document.createElement("div"),this.signLanguageWrapper.className="vidply-sign-language-wrapper",this.signLanguageWrapper.setAttribute("tabindex","0"),this.signLanguageWrapper.setAttribute("aria-label",d.t("player.signLanguageDragResize")),this.signLanguageHeader=u.createElement("div",{className:`${this.options.classPrefix}-sign-language-header`,attributes:{tabindex:"0"}});let n=u.createElement("div",{className:`${this.options.classPrefix}-sign-language-header-left`}),r=u.createElement("h3",{textContent:d.t("player.signLanguageVideo")}),o=d.t("player.signLanguageSettings");if(this.signLanguageSettingsButton=u.createElement("button",{className:`${this.options.classPrefix}-sign-language-settings`,attributes:{type:"button","aria-label":o,"aria-expanded":"false"}}),this.signLanguageSettingsButton.appendChild(E("settings")),u.attachTooltip(this.signLanguageSettingsButton,o,this.options.classPrefix),this.signLanguageSettingsHandlers={settingsClick:c=>{if(c.preventDefault(),c.stopPropagation(),this.signLanguageDocumentClickHandler){let g=this.signLanguageSettingsMenuJustOpened;this.signLanguageSettingsMenuJustOpened=!0,setTimeout(()=>{this.signLanguageSettingsMenuJustOpened=g},100)}this.signLanguageSettingsMenuVisible?this.hideSignLanguageSettingsMenu():this.showSignLanguageSettingsMenu()},settingsKeydown:c=>{c.key==="d"||c.key==="D"?(c.preventDefault(),c.stopPropagation(),this.toggleSignLanguageKeyboardDragMode()):c.key==="r"||c.key==="R"?(c.preventDefault(),c.stopPropagation(),this.toggleSignLanguageResizeMode()):c.key==="Escape"&&this.signLanguageSettingsMenuVisible&&(c.preventDefault(),c.stopPropagation(),this.hideSignLanguageSettingsMenu())}},this.signLanguageSettingsButton.addEventListener("click",this.signLanguageSettingsHandlers.settingsClick),this.signLanguageSettingsButton.addEventListener("keydown",this.signLanguageSettingsHandlers.settingsKeydown),n.appendChild(this.signLanguageSettingsButton),this.signLanguageSelector=null,e){let c=`${this.options.classPrefix}-sign-language-select-${Date.now()}`,g=Object.keys(this.signLanguageSources).map(k=>({value:k,text:this.getSignLanguageLabel(k),selected:k===i})),{label:p,select:f}=ie({classPrefix:this.options.classPrefix,labelClass:`${this.options.classPrefix}-sign-language-label`,selectClass:`${this.options.classPrefix}-sign-language-select`,labelText:"settings.language",selectId:c,options:g,onChange:k=>{k.stopPropagation();let m=k.target.value;this.switchSignLanguage(m)}});this.signLanguageSelector=f;let b=u.createElement("div",{className:`${this.options.classPrefix}-sign-language-selector-wrapper`});b.appendChild(p),b.appendChild(this.signLanguageSelector),se(b),n.appendChild(b)}n.appendChild(r);let h=d.t("player.closeSignLanguage"),l=u.createElement("button",{className:`${this.options.classPrefix}-sign-language-close`,attributes:{type:"button","aria-label":h}});l.appendChild(E("close")),u.attachTooltip(l,h,this.options.classPrefix),l.addEventListener("click",()=>{this.disableSignLanguage(),this.controlBar&&this.controlBar.controls&&this.controlBar.controls.signLanguage&&setTimeout(()=>{this.controlBar.controls.signLanguage.focus({preventScroll:!0})},0)}),this.signLanguageHeader.appendChild(n),this.signLanguageHeader.appendChild(l),this.signLanguageSettingsMenuVisible=!1,this.signLanguageSettingsMenu=null,this.signLanguageSettingsMenuJustOpened=!1,this.signLanguageResizeOptionButton=null,this.signLanguageResizeOptionText=null,this.signLanguageDragOptionButton=null,this.signLanguageDragOptionText=null,this.signLanguageDocumentClickHandler=null,this.signLanguageDocumentClickHandlerAdded=!1,this.signLanguageVideo=document.createElement("video"),this.signLanguageVideo.className="vidply-sign-language-video",this.signLanguageVideo.src=s,this.signLanguageVideo.setAttribute("aria-label",d.t("player.signLanguage")),this.signLanguageVideo.muted=!0,this.signLanguageVideo.setAttribute("playsinline",""),this.signLanguageResizeHandles=["n","s","e","w","ne","nw","se","sw"].map(c=>{let g=u.createElement("div",{className:`${this.options.classPrefix}-sign-resize-handle ${this.options.classPrefix}-sign-resize-${c}`,attributes:{"data-direction":c,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return g.style.display="none",g}),this.signLanguageWrapper.appendChild(this.signLanguageHeader),this.signLanguageWrapper.appendChild(this.signLanguageVideo),this.signLanguageResizeHandles.forEach(c=>this.signLanguageWrapper.appendChild(c));let a=this.storage.getSignLanguagePreferences();a&&a.size&&a.size.width?this.signLanguageWrapper.style.width=a.size.width:this.signLanguageWrapper.style.width="280px",this.signLanguageWrapper.style.height="auto",this.signLanguageDesiredPosition=this.options.signLanguagePosition||"bottom-right",this.container.appendChild(this.signLanguageWrapper),requestAnimationFrame(()=>{this.constrainSignLanguagePosition()}),this.signLanguageVideo.currentTime=this.state.currentTime,this.state.paused||this.signLanguageVideo.play(),this.setupSignLanguageInteraction(),this.signLanguageHandlers={play:()=>{this.signLanguageVideo&&this.signLanguageVideo.play()},pause:()=>{this.signLanguageVideo&&this.signLanguageVideo.pause()},timeupdate:()=>{this.signLanguageVideo&&Math.abs(this.signLanguageVideo.currentTime-this.state.currentTime)>.5&&(this.signLanguageVideo.currentTime=this.state.currentTime)},ratechange:()=>{this.signLanguageVideo&&(this.signLanguageVideo.playbackRate=this.state.playbackSpeed)}},this.on("play",this.signLanguageHandlers.play),this.on("pause",this.signLanguageHandlers.pause),this.on("timeupdate",this.signLanguageHandlers.timeupdate),this.on("ratechange",this.signLanguageHandlers.ratechange),e&&(this.signLanguageHandlers.captionChange=()=>{if(this.captionManager&&this.captionManager.currentTrack&&this.signLanguageSelector){let c=this.captionManager.currentTrack.language?.toLowerCase().split("-")[0];c&&this.signLanguageSources[c]&&this.currentSignLanguage!==c&&(this.switchSignLanguage(c),this.signLanguageSelector.value=c)}},this.on("captionsenabled",this.signLanguageHandlers.captionChange)),this.state.signLanguageEnabled=!0,this.emit("signlanguageenabled"),this.setManagedTimeout(()=>{this.signLanguageSettingsButton&&document.contains(this.signLanguageSettingsButton)&&this.signLanguageSettingsButton.focus({preventScroll:!0})},150)}disableSignLanguage(){this.signLanguageSettingsMenuVisible&&this.hideSignLanguageSettingsMenu({focusButton:!1}),this.signLanguageWrapper&&(this.signLanguageWrapper.style.display="none"),this.state.signLanguageEnabled=!1,this.emit("signlanguagedisabled")}toggleSignLanguage(){this.state.signLanguageEnabled?this.disableSignLanguage():this.enableSignLanguage()}setupSignLanguageInteraction(){if(!this.signLanguageWrapper)return;let e=window.innerWidth<768,t=this.state.fullscreen;if(e&&!t){this.signLanguageDraggable&&(this.signLanguageDraggable.destroy(),this.signLanguageDraggable=null);return}this.signLanguageDraggable||(this.signLanguageDraggable=new te(this.signLanguageWrapper,{dragHandle:this.signLanguageHeader,resizeHandles:this.signLanguageResizeHandles,constrainToViewport:!0,maintainAspectRatio:!0,minWidth:150,minHeight:100,classPrefix:`${this.options.classPrefix}-sign`,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:10,keyboardStepLarge:50,pointerResizeIndicatorText:d.t("player.signLanguageResizeActive"),onPointerResizeToggle:i=>{this.signLanguageResizeHandles.forEach(s=>{s.style.display=i?"block":"none"})},onDragStart:i=>!(i.target.closest(`.${this.options.classPrefix}-sign-language-close`)||i.target.closest(`.${this.options.classPrefix}-sign-language-settings`)||i.target.closest(`.${this.options.classPrefix}-sign-language-select`)||i.target.closest(`.${this.options.classPrefix}-sign-language-label`)||i.target.closest(`.${this.options.classPrefix}-sign-language-settings-menu`))}),this.signLanguageCustomKeyHandler=i=>{let s=i.key.toLowerCase();if(!this.signLanguageSettingsMenuVisible){if(s==="home"){i.preventDefault(),i.stopPropagation(),this.signLanguageDraggable&&(this.signLanguageDraggable.pointerResizeMode&&this.signLanguageDraggable.disablePointerResizeMode(),this.signLanguageDraggable.manuallyPositioned=!1,this.constrainSignLanguagePosition());return}if(s==="r"){i.preventDefault(),i.stopPropagation(),this.toggleSignLanguageResizeMode()&&this.signLanguageWrapper.focus({preventScroll:!0});return}if(s==="escape"){if(i.preventDefault(),i.stopPropagation(),this.signLanguageDraggable&&this.signLanguageDraggable.pointerResizeMode){this.signLanguageDraggable.disablePointerResizeMode();return}if(this.signLanguageDraggable&&this.signLanguageDraggable.keyboardDragMode){this.signLanguageDraggable.disableKeyboardDragMode();return}this.disableSignLanguage(),this.controlBar&&this.controlBar.controls&&this.controlBar.controls.signLanguage&&setTimeout(()=>{this.controlBar.controls.signLanguage.focus({preventScroll:!0})},0);return}}},this.signLanguageWrapper.addEventListener("keydown",this.signLanguageCustomKeyHandler),this.signLanguageInteractionHandlers={draggable:this.signLanguageDraggable,headerKeyHandler:this.signLanguageHeaderKeyHandler,customKeyHandler:this.signLanguageCustomKeyHandler})}toggleSignLanguageKeyboardDragMode(){if(this.signLanguageDraggable){let e=this.signLanguageDraggable.keyboardDragMode;this.signLanguageDraggable.toggleKeyboardDragMode();let t=this.signLanguageDraggable.keyboardDragMode;!e&&t&&this.enableSignLanguageMoveMode(),this.updateSignLanguageDragOptionState()}}enableSignLanguageMoveMode(){this.signLanguageWrapper.classList.add(`${this.options.classPrefix}-sign-move-mode`),this.updateSignLanguageResizeOptionState(),setTimeout(()=>{this.signLanguageWrapper.classList.remove(`${this.options.classPrefix}-sign-move-mode`)},2e3)}toggleSignLanguageResizeMode({focus:e=!0}={}){return this.signLanguageDraggable?this.signLanguageDraggable.pointerResizeMode?(this.signLanguageDraggable.disablePointerResizeMode({focus:e}),this.updateSignLanguageResizeOptionState(),!1):(this.signLanguageDraggable.enablePointerResizeMode({focus:e}),this.updateSignLanguageResizeOptionState(),!0):!1}getSignLanguageLabel(e){return{en:"English",de:"Deutsch",es:"Español",fr:"Français",it:"Italiano",ja:"日本語",pt:"Português",ar:"العربية",hi:"हिन्दी"}[e]||e.toUpperCase()}switchSignLanguage(e){if(!this.signLanguageSources[e]||!this.signLanguageVideo)return;let t=this.signLanguageVideo.currentTime,i=!this.signLanguageVideo.paused;this.signLanguageVideo.src=this.signLanguageSources[e],this.currentSignLanguage=e,this.signLanguageVideo.currentTime=t,i&&this.signLanguageVideo.play().catch(()=>{}),this.emit("signlanguagelanguagechanged",e)}showSignLanguageSettingsMenu(){if(this.signLanguageSettingsMenuJustOpened=!0,setTimeout(()=>{this.signLanguageSettingsMenuJustOpened=!1},350),this.signLanguageDocumentClickHandlerAdded||(this.signLanguageDocumentClickHandler=a=>{this.signLanguageSettingsMenuJustOpened||this.signLanguageSettingsButton&&(this.signLanguageSettingsButton===a.target||this.signLanguageSettingsButton.contains(a.target))||this.signLanguageSettingsMenu&&this.signLanguageSettingsMenu.contains(a.target)||this.signLanguageSettingsMenuVisible&&this.hideSignLanguageSettingsMenu()},setTimeout(()=>{document.addEventListener("mousedown",this.signLanguageDocumentClickHandler,!0),this.signLanguageDocumentClickHandlerAdded=!0},300)),this.signLanguageSettingsMenu){this.signLanguageSettingsMenu.style.display="block",this.signLanguageSettingsMenuVisible=!0,this.signLanguageSettingsButton&&this.signLanguageSettingsButton.setAttribute("aria-expanded","true"),this.signLanguageSettingsMenuKeyHandler=z(this.signLanguageSettingsMenu,this.signLanguageSettingsButton,`.${this.options.classPrefix}-sign-language-settings-item`,()=>this.hideSignLanguageSettingsMenu({focusButton:!0})),this.positionSignLanguageSettingsMenu(),this.updateSignLanguageDragOptionState(),this.updateSignLanguageResizeOptionState(),J(this.signLanguageSettingsMenu,`.${this.options.classPrefix}-sign-language-settings-item`);return}this.signLanguageSettingsMenu=u.createElement("div",{className:`${this.options.classPrefix}-sign-language-settings-menu`,attributes:{role:"menu"}});let e=q({classPrefix:this.options.classPrefix,itemClass:`${this.options.classPrefix}-sign-language-settings-item`,icon:"move",label:"player.enableSignDragMode",hasTextClass:!0,onClick:()=>{this.toggleSignLanguageKeyboardDragMode(),this.hideSignLanguageSettingsMenu()}});e.setAttribute("role","switch"),e.setAttribute("aria-checked","false");let t=e.querySelector(`.${this.options.classPrefix}-tooltip`);t&&t.remove();let i=e.querySelector(`.${this.options.classPrefix}-button-text`);i&&i.remove(),this.signLanguageDragOptionButton=e,this.signLanguageDragOptionText=e.querySelector(`.${this.options.classPrefix}-settings-text`),this.updateSignLanguageDragOptionState();let s=q({classPrefix:this.options.classPrefix,itemClass:`${this.options.classPrefix}-sign-language-settings-item`,icon:"resize",label:"player.enableSignResizeMode",hasTextClass:!0,onClick:a=>{a.preventDefault(),a.stopPropagation(),this.toggleSignLanguageResizeMode({focus:!1})?(this.hideSignLanguageSettingsMenu({focusButton:!1}),setTimeout(()=>{this.signLanguageWrapper&&this.signLanguageWrapper.focus({preventScroll:!0})},20)):this.hideSignLanguageSettingsMenu({focusButton:!0})}});s.setAttribute("role","switch"),s.setAttribute("aria-checked","false");let n=s.querySelector(`.${this.options.classPrefix}-tooltip`);n&&n.remove();let r=s.querySelector(`.${this.options.classPrefix}-button-text`);r&&r.remove(),this.signLanguageResizeOptionButton=s,this.signLanguageResizeOptionText=s.querySelector(`.${this.options.classPrefix}-settings-text`),this.updateSignLanguageResizeOptionState();let o=q({classPrefix:this.options.classPrefix,itemClass:`${this.options.classPrefix}-sign-language-settings-item`,icon:"close",label:"transcript.closeMenu",onClick:()=>{this.hideSignLanguageSettingsMenu()}}),h=o.querySelector(`.${this.options.classPrefix}-tooltip`);h&&h.remove();let l=o.querySelector(`.${this.options.classPrefix}-button-text`);l&&l.remove(),this.signLanguageSettingsMenu.appendChild(e),this.signLanguageSettingsMenu.appendChild(s),this.signLanguageSettingsMenu.appendChild(o),this.signLanguageSettingsMenu.style.visibility="hidden",this.signLanguageSettingsMenu.style.display="block",this.signLanguageSettingsButton&&this.signLanguageSettingsButton.parentNode?this.signLanguageSettingsButton.insertAdjacentElement("afterend",this.signLanguageSettingsMenu):this.signLanguageWrapper&&this.signLanguageWrapper.appendChild(this.signLanguageSettingsMenu),this.positionSignLanguageSettingsMenuImmediate(),requestAnimationFrame(()=>{this.signLanguageSettingsMenu&&(this.signLanguageSettingsMenu.style.visibility="visible")}),this.signLanguageSettingsMenuKeyHandler=z(this.signLanguageSettingsMenu,this.signLanguageSettingsButton,`.${this.options.classPrefix}-sign-language-settings-item`,()=>this.hideSignLanguageSettingsMenu({focusButton:!0})),this.signLanguageSettingsMenuVisible=!0,this.signLanguageSettingsButton&&this.signLanguageSettingsButton.setAttribute("aria-expanded","true"),this.updateSignLanguageDragOptionState(),this.updateSignLanguageResizeOptionState(),J(this.signLanguageSettingsMenu,`.${this.options.classPrefix}-sign-language-settings-item`)}hideSignLanguageSettingsMenu({focusButton:e=!0}={}){this.signLanguageSettingsMenu&&(this.signLanguageSettingsMenu.style.display="none",this.signLanguageSettingsMenuVisible=!1,this.signLanguageSettingsMenuJustOpened=!1,this.signLanguageSettingsMenuKeyHandler&&(this.signLanguageSettingsMenu.removeEventListener("keydown",this.signLanguageSettingsMenuKeyHandler),this.signLanguageSettingsMenuKeyHandler=null),Array.from(this.signLanguageSettingsMenu.querySelectorAll(`.${this.options.classPrefix}-sign-language-settings-item`)).forEach(i=>{i.setAttribute("tabindex","-1")}),this.signLanguageSettingsButton&&(this.signLanguageSettingsButton.setAttribute("aria-expanded","false"),e&&this.signLanguageSettingsButton.focus({preventScroll:!0})))}positionSignLanguageSettingsMenuImmediate(){if(!this.signLanguageSettingsMenu||!this.signLanguageSettingsButton)return;let e=this.signLanguageSettingsButton.getBoundingClientRect(),t=this.signLanguageSettingsMenu.getBoundingClientRect(),i=window.innerWidth,s=window.innerHeight,n=this.signLanguageSettingsButton.parentElement;if(!n)return;let r=n.getBoundingClientRect(),o=e.left+e.width/2-r.left,h=e.bottom-r.top,l=e.top-r.top,a=e.top,c=s-e.bottom,g=h+8,p=null;c<t.height+20&&a>c?(g=null,p=r.bottom-r.top-l+8,this.signLanguageSettingsMenu.classList.add("vidply-menu-above")):this.signLanguageSettingsMenu.classList.remove("vidply-menu-above");let f=o-t.width/2,b="auto",k="translateX(0)",m=e.left+e.width/2-t.width/2;m<10?(f=0,k="translateX(0)"):m+t.width>i-10?(f="auto",b=0,k="translateX(0)"):(f=o,k="translateX(-50%)"),g!==null?(this.signLanguageSettingsMenu.style.top=`${g}px`,this.signLanguageSettingsMenu.style.bottom="auto"):p!==null&&(this.signLanguageSettingsMenu.style.top="auto",this.signLanguageSettingsMenu.style.bottom=`${p}px`),f!=="auto"?(this.signLanguageSettingsMenu.style.left=`${f}px`,this.signLanguageSettingsMenu.style.right="auto"):(this.signLanguageSettingsMenu.style.left="auto",this.signLanguageSettingsMenu.style.right=`${b}px`),this.signLanguageSettingsMenu.style.transform=k}positionSignLanguageSettingsMenu(){!this.signLanguageSettingsMenu||!this.signLanguageSettingsButton||!this.signLanguageWrapper||requestAnimationFrame(()=>{setTimeout(()=>{this.positionSignLanguageSettingsMenuImmediate()},10)})}attachSignLanguageSettingsMenuKeyboardNavigation(){this.signLanguageSettingsMenu&&(this.signLanguageSettingsMenuKeyHandler&&this.signLanguageSettingsMenu.removeEventListener("keydown",this.signLanguageSettingsMenuKeyHandler),this.signLanguageSettingsMenuKeyHandler=z(this.signLanguageSettingsMenu,this.signLanguageSettingsButton,`.${this.options.classPrefix}-sign-language-settings-item`,()=>this.hideSignLanguageSettingsMenu({focusButton:!0})))}updateSignLanguageDragOptionState(){if(!this.signLanguageDragOptionButton)return;let e=!!(this.signLanguageDraggable&&this.signLanguageDraggable.keyboardDragMode),t=e?d.t("player.disableSignDragMode"):d.t("player.enableSignDragMode"),i=e?d.t("player.disableSignDragModeAria"):d.t("player.enableSignDragModeAria");this.signLanguageDragOptionButton.setAttribute("aria-checked",e?"true":"false"),this.signLanguageDragOptionButton.setAttribute("aria-label",i),this.signLanguageDragOptionText&&(this.signLanguageDragOptionText.textContent=t)}updateSignLanguageResizeOptionState(){if(!this.signLanguageResizeOptionButton)return;let e=!!(this.signLanguageDraggable&&this.signLanguageDraggable.pointerResizeMode),t=e?d.t("player.disableSignResizeMode"):d.t("player.enableSignResizeMode"),i=e?d.t("player.disableSignResizeModeAria"):d.t("player.enableSignResizeModeAria");this.signLanguageResizeOptionButton.setAttribute("aria-checked",e?"true":"false"),this.signLanguageResizeOptionButton.setAttribute("aria-label",i),this.signLanguageResizeOptionText&&(this.signLanguageResizeOptionText.textContent=t)}constrainSignLanguagePosition(){if(!this.signLanguageWrapper||!this.videoWrapper||this.signLanguageDraggable&&this.signLanguageDraggable.manuallyPositioned)return;(!this.signLanguageWrapper.style.width||this.signLanguageWrapper.style.width==="")&&(this.signLanguageWrapper.style.width="280px");let e=this.videoWrapper.getBoundingClientRect(),t=this.container.getBoundingClientRect(),i=this.signLanguageWrapper.getBoundingClientRect(),s=e.left-t.left,n=e.top-t.top,r=e.width,o=e.height,h=i.width||280,l=i.height||280*9/16,a,c,g=16,p=95;switch(this.signLanguageDesiredPosition||"bottom-right"){case"bottom-right":a=s+r-h-g,c=n+o-l-p;break;case"bottom-left":a=s+g,c=n+o-l-p;break;case"top-right":a=s+r-h-g,c=n+g;break;case"top-left":a=s+g,c=n+g;break;default:a=s+r-h-g,c=n+o-l-p}a=Math.max(s,Math.min(a,s+r-h)),c=Math.max(n,Math.min(c,n+o-l-p)),this.signLanguageWrapper.style.left=`${a}px`,this.signLanguageWrapper.style.top=`${c}px`,this.signLanguageWrapper.style.right="auto",this.signLanguageWrapper.style.bottom="auto",this.signLanguageWrapper.classList.remove(...Array.from(this.signLanguageWrapper.classList).filter(b=>b.startsWith("vidply-sign-position-")))}saveSignLanguagePreferences(){this.signLanguageWrapper&&this.storage.saveSignLanguagePreferences({size:{width:this.signLanguageWrapper.style.width}})}cleanupSignLanguage(){this.signLanguageSettingsMenuVisible&&this.hideSignLanguageSettingsMenu({focusButton:!1}),this.signLanguageDocumentClickHandler&&this.signLanguageDocumentClickHandlerAdded&&(document.removeEventListener("mousedown",this.signLanguageDocumentClickHandler,!0),this.signLanguageDocumentClickHandlerAdded=!1,this.signLanguageDocumentClickHandler=null),this.signLanguageSettingsHandlers&&(this.signLanguageSettingsButton&&(this.signLanguageSettingsButton.removeEventListener("click",this.signLanguageSettingsHandlers.settingsClick),this.signLanguageSettingsButton.removeEventListener("keydown",this.signLanguageSettingsHandlers.settingsKeydown)),this.signLanguageSettingsHandlers=null),this.signLanguageHandlers&&(this.off("play",this.signLanguageHandlers.play),this.off("pause",this.signLanguageHandlers.pause),this.off("timeupdate",this.signLanguageHandlers.timeupdate),this.off("ratechange",this.signLanguageHandlers.ratechange),this.signLanguageHandlers.captionChange&&this.off("captionsenabled",this.signLanguageHandlers.captionChange),this.signLanguageHandlers=null),this.signLanguageInteractionHandlers&&(this.signLanguageHeader&&this.signLanguageInteractionHandlers.headerKeyHandler&&this.signLanguageHeader.removeEventListener("keydown",this.signLanguageInteractionHandlers.headerKeyHandler),this.signLanguageWrapper&&this.signLanguageInteractionHandlers.customKeyHandler&&this.signLanguageWrapper.removeEventListener("keydown",this.signLanguageInteractionHandlers.customKeyHandler)),this.signLanguageDraggable&&(this.signLanguageDraggable.pointerResizeMode&&this.signLanguageDraggable.disablePointerResizeMode(),this.signLanguageDraggable.destroy(),this.signLanguageDraggable=null),this.signLanguageInteractionHandlers=null,this.signLanguageWrapper&&this.signLanguageWrapper.parentNode&&(this.signLanguageVideo&&(this.signLanguageVideo.pause(),this.signLanguageVideo.src=""),this.signLanguageWrapper.parentNode.removeChild(this.signLanguageWrapper)),this.signLanguageWrapper=null,this.signLanguageVideo=null,this.signLanguageSettingsButton=null,this.signLanguageSettingsMenu=null}showSettings(){console.warn("[VidPly] Settings dialog has been removed. Use individual control buttons (speed, captions, etc.)")}hideSettings(){}getCurrentTime(){return this.state.currentTime}getDuration(){return this.state.duration}isPlaying(){return this.state.playing}isPaused(){return this.state.paused}isEnded(){return this.state.ended}isMuted(){return this.state.muted}isFullscreen(){return this.state.fullscreen}handleError(e){this.log("Error:",e,"error"),this.emit("error",e),this.options.onError&&this.options.onError.call(this,e)}log(...e){if(!this.options.debug)return;let t="log";if(e.length>0){let i=e[e.length-1];typeof i=="string"&&console[i]&&(t=i,e=e.slice(0,-1))}e.length===0&&(e=[""]),typeof console[t]=="function"?console[t]("[VidPly]",...e):console.log("[VidPly]",...e)}setupResponsiveHandlers(){if(typeof ResizeObserver<"u"?(this.resizeObserver=new ResizeObserver(e=>{for(let t of e){let i=t.contentRect.width;this.controlBar&&typeof this.controlBar.updateControlsForViewport=="function"&&this.controlBar.updateControlsForViewport(i),this.transcriptManager&&this.transcriptManager.isVisible&&this.transcriptManager.positionTranscript()}}),this.resizeObserver.observe(this.container)):(this.resizeHandler=()=>{let e=this.container.clientWidth;this.controlBar&&typeof this.controlBar.updateControlsForViewport=="function"&&this.controlBar.updateControlsForViewport(e),this.transcriptManager&&this.transcriptManager.isVisible&&(!this.transcriptManager.draggableResizable||!this.transcriptManager.draggableResizable.manuallyPositioned)&&this.transcriptManager.positionTranscript()},window.addEventListener("resize",this.resizeHandler)),window.matchMedia){this.orientationHandler=t=>{setTimeout(()=>{this.transcriptManager&&this.transcriptManager.isVisible&&(!this.transcriptManager.draggableResizable||!this.transcriptManager.draggableResizable.manuallyPositioned)&&this.transcriptManager.positionTranscript()},100)};let e=window.matchMedia("(orientation: portrait)");e.addEventListener?e.addEventListener("change",this.orientationHandler):e.addListener&&e.addListener(this.orientationHandler),this.orientationQuery=e}this.fullscreenChangeHandler=()=>{let e=!!(document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement);this.state.fullscreen!==e&&(this.state.fullscreen=e,e?this.container.classList.add(`${this.options.classPrefix}-fullscreen`):(this.container.classList.remove(`${this.options.classPrefix}-fullscreen`),this._disablePseudoFullscreen()),this.emit("fullscreenchange",e),this.controlBar&&this.controlBar.updateFullscreenButton(),this.signLanguageWrapper&&this.signLanguageWrapper.style.display!=="none"&&(window.innerWidth<768&&this.setupSignLanguageInteraction(),this.setManagedTimeout(()=>{requestAnimationFrame(()=>{this.storage.saveSignLanguagePreferences({size:null}),this.signLanguageDesiredPosition="bottom-right",this.signLanguageWrapper.style.width=e?"400px":"280px",this.constrainSignLanguagePosition()})},500)))},document.addEventListener("fullscreenchange",this.fullscreenChangeHandler),document.addEventListener("webkitfullscreenchange",this.fullscreenChangeHandler),document.addEventListener("mozfullscreenchange",this.fullscreenChangeHandler),document.addEventListener("MSFullscreenChange",this.fullscreenChangeHandler)}destroy(){if(this.log("Destroying player"),this.renderer&&this.renderer.destroy(),this.controlBar&&this.controlBar.destroy(),this.captionManager&&this.captionManager.destroy(),this.keyboardManager&&this.keyboardManager.destroy(),this.transcriptManager&&this.transcriptManager.destroy(),this.cleanupSignLanguage(),this.playButtonOverlay&&this.playButtonOverlay.parentNode&&(this.playButtonOverlay.remove(),this.playButtonOverlay=null),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),this.resizeHandler&&(window.removeEventListener("resize",this.resizeHandler),this.resizeHandler=null),this.orientationQuery&&this.orientationHandler&&(this.orientationQuery.removeEventListener?this.orientationQuery.removeEventListener("change",this.orientationHandler):this.orientationQuery.removeListener&&this.orientationQuery.removeListener(this.orientationHandler),this.orientationQuery=null,this.orientationHandler=null),this.fullscreenChangeHandler&&(document.removeEventListener("fullscreenchange",this.fullscreenChangeHandler),document.removeEventListener("webkitfullscreenchange",this.fullscreenChangeHandler),document.removeEventListener("mozfullscreenchange",this.fullscreenChangeHandler),document.removeEventListener("MSFullscreenChange",this.fullscreenChangeHandler),this.fullscreenChangeHandler=null),this.timeouts.forEach(e=>clearTimeout(e)),this.timeouts.clear(),this.metadataCueChangeHandler){let t=this.textTracks.find(i=>i.kind==="metadata");t&&t.removeEventListener("cuechange",this.metadataCueChangeHandler),this.metadataCueChangeHandler=null}this.metadataAlertHandlers&&this.metadataAlertHandlers.size>0&&(this.metadataAlertHandlers.forEach(({button:e,handler:t})=>{e&&t&&e.removeEventListener("click",t)}),this.metadataAlertHandlers.clear()),this.container&&this.container.parentNode&&(this.container.parentNode.insertBefore(this.element,this.container),this.container.parentNode.removeChild(this.container)),this.removeAllListeners()}setupMetadataHandling(){let e=()=>{let i=this.textTracks.find(s=>s.kind==="metadata");if(i){if(i.mode==="disabled"&&(i.mode="hidden"),this.metadataCueChangeHandler&&i.removeEventListener("cuechange",this.metadataCueChangeHandler),this.metadataCueChangeHandler=()=>{let s=Array.from(i.activeCues||[]);s.length>0&&this.options.debug&&this.log("[Metadata] Active cues:",s.map(n=>({start:n.startTime,end:n.endTime,text:n.text}))),s.forEach(n=>{this.handleMetadataCue(n)})},i.addEventListener("cuechange",this.metadataCueChangeHandler),this.options.debug){let s=i.cues?i.cues.length:0;this.log("[Metadata] Track enabled,",s,"cues available")}}else this.options.debug&&this.log("[Metadata] No metadata track found")};e(),this.on("loadedmetadata",e)}normalizeMetadataSelector(e){if(!e)return null;let t=e.trim();return t?t.startsWith("#")||t.startsWith(".")||t.startsWith("[")?t:`#${t}`:null}resolveMetadataConfig(e,t){if(!e||!t)return null;if(Object.prototype.hasOwnProperty.call(e,t))return e[t];let i=t.replace(/^#/,"");return Object.prototype.hasOwnProperty.call(e,i)?e[i]:null}cacheMetadataAlertContent(e,t={}){if(!e)return;let i=t.titleSelector||"[data-vidply-alert-title], h3, header",s=t.messageSelector||"[data-vidply-alert-message], p",n=e.querySelector(i);n&&!n.dataset.vidplyAlertTitleOriginal&&(n.dataset.vidplyAlertTitleOriginal=n.textContent.trim());let r=e.querySelector(s);r&&!r.dataset.vidplyAlertMessageOriginal&&(r.dataset.vidplyAlertMessageOriginal=r.textContent.trim())}restoreMetadataAlertContent(e,t={}){if(!e)return;let i=t.titleSelector||"[data-vidply-alert-title], h3, header",s=t.messageSelector||"[data-vidply-alert-message], p",n=e.querySelector(i);n&&n.dataset.vidplyAlertTitleOriginal&&(n.textContent=n.dataset.vidplyAlertTitleOriginal);let r=e.querySelector(s);r&&r.dataset.vidplyAlertMessageOriginal&&(r.textContent=r.dataset.vidplyAlertMessageOriginal)}focusMetadataTarget(e,t=null){if(!(!e||e==="none")){if(e==="alert"&&t){t.focus({preventScroll:!0});return}if(e==="player"){this.container&&this.container.focus({preventScroll:!0});return}if(e==="media"){this.element.focus({preventScroll:!0});return}if(e==="playButton"){let i=this.controlBar?.controls?.playPause;i&&i.focus({preventScroll:!0});return}if(typeof e=="string"){let i=document.querySelector(e);i&&(i.tabIndex===-1&&!i.hasAttribute("tabindex")&&i.setAttribute("tabindex","-1"),i.focus({preventScroll:!0}))}}}handleMetadataAlert(e,t={}){if(!e)return;let i=this.resolveMetadataConfig(this.options.metadataAlerts,e)||{},s=t.element||document.querySelector(e);if(!s){this.options.debug&&this.log("[Metadata] Alert element not found:",e);return}this.options.debug&&this.log("[Metadata] Handling alert",e,{reason:t.reason,config:i}),this.cacheMetadataAlertContent(s,i),s.dataset.vidplyAlertOriginalDisplay||(s.dataset.vidplyAlertOriginalDisplay=s.style.display||""),s.dataset.vidplyAlertDisplay||(s.dataset.vidplyAlertDisplay=i.display||"block");let n=t.show!==void 0?t.show:i.show!==!1;if(n){let l=i.display||s.dataset.vidplyAlertDisplay||"block";s.style.display=l,s.hidden=!1,s.removeAttribute("hidden"),s.setAttribute("aria-hidden","false"),s.setAttribute("data-vidply-alert-active","true")}i.resetContent!==!1&&t.reason==="focus"&&this.restoreMetadataAlertContent(s,i);let o=t.focus!==void 0?t.focus:i.focusOnShow??t.reason!=="focus";n&&o&&(s.tabIndex===-1&&!s.hasAttribute("tabindex")&&s.setAttribute("tabindex","-1"),s.focus({preventScroll:!0})),n&&i.autoScroll!==!1&&t.autoScroll!==!1&&s.scrollIntoView({behavior:"smooth",block:"nearest"});let h=i.continueButton;if(h){let l=null;if(h==="self"||s.matches(h)?l=s:l=s.querySelector(h)||document.querySelector(h),l&&!this.metadataAlertHandlers.has(e)){let a=()=>{if(i.hideOnContinue!==!1){let p=s.dataset.vidplyAlertOriginalDisplay||"";s.style.display=i.hideDisplay||p||"none",s.setAttribute("aria-hidden","true"),s.removeAttribute("data-vidply-alert-active")}i.resume!==!1&&this.state.paused&&this.play();let g=i.focusTarget||"playButton";this.setManagedTimeout(()=>{this.focusMetadataTarget(g,s)},i.focusDelay??100)};l.addEventListener("click",a),this.metadataAlertHandlers.set(e,{button:l,handler:a})}}return s}handleMetadataHashtags(e){if(!Array.isArray(e)||e.length===0)return;let t=this.options.metadataHashtags;t&&e.forEach(i=>{let s=this.resolveMetadataConfig(t,i);if(!s)return;let n=this.normalizeMetadataSelector(s.alert||s.selector||s.target);if(!n)return;let r=document.querySelector(n);if(!r){this.options.debug&&this.log("[Metadata] Hashtag target not found:",n);return}if(this.options.debug&&this.log("[Metadata] Handling hashtag",i,{selector:n,config:s}),this.cacheMetadataAlertContent(r,s),s.title){let l=s.titleSelector||"[data-vidply-alert-title], h3, header",a=r.querySelector(l);a&&(a.textContent=s.title)}if(s.message){let l=s.messageSelector||"[data-vidply-alert-message], p",a=r.querySelector(l);a&&(a.textContent=s.message)}let o=s.show!==!1,h=s.focus!==void 0?s.focus:!1;this.handleMetadataAlert(n,{element:r,show:o,focus:h,autoScroll:s.autoScroll,reason:"hashtag"})})}handleMetadataCue(e){let t=e.text.trim();this.options.debug&&this.log("[Metadata] Processing cue:",{time:e.startTime,text:t}),this.emit("metadata",{time:e.startTime,endTime:e.endTime,text:t,cue:e}),t.includes("PAUSE")&&(this.state.paused||(this.options.debug&&this.log("[Metadata] Pausing video at",e.startTime),this.pause()),this.emit("metadata:pause",{time:e.startTime,text:t}));let i=t.match(/FOCUS:([\w#-]+)/);if(i){let n=i[1],r=this.normalizeMetadataSelector(n),o=r?document.querySelector(r):null;o?(this.options.debug&&this.log("[Metadata] Focusing element:",r),o.tabIndex===-1&&!o.hasAttribute("tabindex")&&o.setAttribute("tabindex","-1"),this.setManagedTimeout(()=>{o.focus({preventScroll:!0})},10)):this.options.debug&&this.log("[Metadata] Element not found:",r||n),this.emit("metadata:focus",{time:e.startTime,target:n,selector:r,element:o,text:t}),r&&this.handleMetadataAlert(r,{element:o,reason:"focus"})}let s=t.match(/#[\w-]+/g);s&&(this.options.debug&&this.log("[Metadata] Hashtags found:",s),this.emit("metadata:hashtags",{time:e.startTime,hashtags:s,text:t}),this.handleMetadataHashtags(s))}};F.instances=[];var re=0,Y=class{constructor(e,t={}){this.player=e,this.tracks=[],this.initialTracks=Array.isArray(t.tracks)?t.tracks:[],this.currentIndex=-1,this.instanceId=++re,this.uniqueId=`vidply-playlist-${this.instanceId}`,this.options={autoAdvance:t.autoAdvance!==!1,autoPlayFirst:t.autoPlayFirst!==!1,loop:t.loop||!1,showPanel:t.showPanel!==!1,...t},this.container=null,this.playlistPanel=null,this.trackInfoElement=null,this.navigationFeedback=null,this.isPanelVisible=this.options.showPanel!==!1,this.isChangingTrack=!1,this.handleTrackEnd=this.handleTrackEnd.bind(this),this.handleTrackError=this.handleTrackError.bind(this),this.player.playlistManager=this,this.init(),this.updatePlayerControls(),this.initialTracks.length>0&&this.loadPlaylist(this.initialTracks)}init(){this.player.on("ended",this.handleTrackEnd),this.player.on("error",this.handleTrackError),this.player.on("play",this.handlePlaybackStateChange.bind(this)),this.player.on("pause",this.handlePlaybackStateChange.bind(this)),this.player.on("ended",this.handlePlaybackStateChange.bind(this)),this.player.on("fullscreenchange",this.handleFullscreenChange.bind(this)),this.player.on("audiodescriptionenabled",this.handleAudioDescriptionChange.bind(this)),this.player.on("audiodescriptiondisabled",this.handleAudioDescriptionChange.bind(this)),this.options.showPanel&&this.createUI(),this.tracks.length===0&&this.initialTracks.length===0&&this.loadPlaylistFromAttribute()}loadPlaylistFromAttribute(){if(!this.player.element||!this.player.element.parentElement){console.log("VidPly Playlist: No player element found");return}let t=this.player.element.parentElement.parentElement,i=t?t.parentElement:null;if(!i){console.log("VidPly Playlist: No original element found");return}this.loadOptionsFromAttributes(i);let s=i.getAttribute("data-playlist");if(!s){console.log("VidPly Playlist: No data-playlist attribute found");return}console.log("VidPly Playlist: Found data-playlist attribute, parsing...");try{let n=JSON.parse(s);Array.isArray(n)&&n.length>0?(console.log(`VidPly Playlist: Loaded ${n.length} tracks from data-playlist`),this.loadPlaylist(n)):console.warn("VidPly Playlist: data-playlist is not a valid array or is empty")}catch(n){console.error("VidPly Playlist: Failed to parse data-playlist attribute",n)}}loadOptionsFromAttributes(e){let t=e.getAttribute("data-playlist-auto-advance");t!==null&&(this.options.autoAdvance=t==="true");let i=e.getAttribute("data-playlist-auto-play-first");i!==null&&(this.options.autoPlayFirst=i==="true");let s=e.getAttribute("data-playlist-loop");s!==null&&(this.options.loop=s==="true");let n=e.getAttribute("data-playlist-show-panel");n!==null&&(this.options.showPanel=n==="true"),console.log("VidPly Playlist: Options from attributes:",this.options)}updatePlayerControls(){if(!this.player.controlBar)return;let e=this.player.controlBar;e.element.innerHTML="",e.createControls(),e.attachEvents(),e.setupAutoHide()}loadPlaylist(e){this.tracks=e,this.currentIndex=-1,this.container&&this.container.classList.add("vidply-has-playlist"),this.playlistPanel&&this.renderPlaylist(),e.length>0&&(this.options.autoPlayFirst?this.play(0):this.loadTrack(0)),this.updatePlaylistVisibilityInFullscreen()}loadTrack(e){if(e<0||e>=this.tracks.length){console.warn("VidPly Playlist: Invalid track index",e);return}let t=this.tracks[e];this.isChangingTrack=!0,this.currentIndex=e,this.player.load({src:t.src,type:t.type,poster:t.poster,tracks:t.tracks||[],audioDescriptionSrc:t.audioDescriptionSrc||null,signLanguageSrc:t.signLanguageSrc||null}),this.updateTrackInfo(t),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:t,total:this.tracks.length}),setTimeout(()=>{this.isChangingTrack=!1},150)}play(e,t=!1){if(e<0||e>=this.tracks.length){console.warn("VidPly Playlist: Invalid track index",e);return}let i=this.tracks[e];this.isChangingTrack=!0,this.currentIndex=e,this.player.load({src:i.src,type:i.type,poster:i.poster,tracks:i.tracks||[],audioDescriptionSrc:i.audioDescriptionSrc||null,signLanguageSrc:i.signLanguageSrc||null}),this.updateTrackInfo(i),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:i,total:this.tracks.length}),setTimeout(()=>{this.player.play(),setTimeout(()=>{this.isChangingTrack=!1},50)},100)}next(){let e=this.currentIndex+1;if(e>=this.tracks.length)if(this.options.loop)e=0;else return;this.play(e)}previous(){let e=this.currentIndex-1;if(e<0)if(this.options.loop)e=this.tracks.length-1;else return;this.play(e)}handleTrackEnd(){this.isChangingTrack||this.options.autoAdvance&&this.next()}handleTrackError(e){console.error("VidPly Playlist: Track error",e),this.options.autoAdvance&&setTimeout(()=>{this.next()},1e3)}handlePlaybackStateChange(){this.updatePlaylistVisibilityInFullscreen()}handleFullscreenChange(){setTimeout(()=>{this.updatePlaylistVisibilityInFullscreen()},50)}handleAudioDescriptionChange(){let e=this.getCurrentTrack();e&&(this.updateTrackInfo(e),this.updatePlaylistUI(),this.updatePlaylistDurations())}updatePlaylistDurations(){if(!this.playlistPanel)return;this.playlistPanel.querySelectorAll(".vidply-playlist-item").forEach((t,i)=>{let s=this.tracks[i];if(!s)return;let n=this.getEffectiveDuration(s),r=n?x.formatTime(n):"",o=t.querySelector(".vidply-playlist-duration-badge");o&&(o.textContent=r);let h=t.querySelector(".vidply-playlist-item-duration");h&&(h.textContent=r)})}getEffectiveDuration(e){return e?this.player.state.audioDescriptionEnabled&&e.audioDescriptionDuration?e.audioDescriptionDuration:e.duration||null:null}updatePlaylistVisibilityInFullscreen(){if(!this.playlistPanel||!this.tracks.length)return;let e=this.player.state.fullscreen,t=this.player.state.playing;e?t?(this.playlistPanel.classList.remove("vidply-playlist-fullscreen-visible"),setTimeout(()=>{this.player.state.playing&&this.player.state.fullscreen&&(this.playlistPanel.style.display="none")},300)):(this.playlistPanel.classList.add("vidply-playlist-fullscreen-visible"),this.playlistPanel.style.display="block"):(this.playlistPanel.classList.remove("vidply-playlist-fullscreen-visible"),this.isPanelVisible&&this.tracks.length>0?this.playlistPanel.style.display="block":this.playlistPanel.style.display="none")}createUI(){if(this.container=this.player.container,!this.container){console.warn("VidPly Playlist: No container found");return}if(this.player.element.tagName==="AUDIO"){this.trackArtworkElement=u.createElement("div",{className:"vidply-track-artwork",attributes:{"aria-hidden":"true"}}),this.trackArtworkElement.style.display="none";let e=this.container.querySelector(".vidply-video-wrapper");e?this.container.insertBefore(this.trackArtworkElement,e):this.container.appendChild(this.trackArtworkElement)}this.trackInfoElement=u.createElement("div",{className:"vidply-track-info",attributes:{role:"status"}}),this.trackInfoElement.style.display="none",this.container.appendChild(this.trackInfoElement),this.navigationFeedback=u.createElement("div",{className:"vidply-sr-only",attributes:{role:"status","aria-live":"polite","aria-atomic":"true"}}),this.container.appendChild(this.navigationFeedback),this.playlistPanel=u.createElement("div",{className:"vidply-playlist-panel",attributes:{id:`${this.uniqueId}-panel`,role:"region","aria-label":d.t("playlist.title"),"aria-labelledby":`${this.uniqueId}-heading`}}),this.playlistPanel.style.display=(this.isPanelVisible,"none"),this.container.appendChild(this.playlistPanel)}updateTrackInfo(e){if(!this.trackInfoElement)return;let t=this.currentIndex+1,i=this.tracks.length,s=e.title||d.t("playlist.untitled"),n=e.artist||"",r=this.getEffectiveDuration(e),o=r?x.formatTime(r):"",h=r?x.formatDuration(r):"",l=n?d.t("playlist.by")+n:"",a=h?`. ${h}`:"",c=d.t("playlist.nowPlaying",{current:t,total:i,title:s,artist:l})+a,g=d.t("playlist.trackOf",{current:t,total:i}),p=o?`<span class="vidply-track-duration" aria-hidden="true">${u.escapeHTML(o)}</span>`:"",f=e.description||"";this.trackInfoElement.innerHTML=`
|
|
13
13
|
<span class="vidply-sr-only">${u.escapeHTML(c)}</span>
|
|
14
14
|
<div class="vidply-track-header" aria-hidden="true">
|
|
15
15
|
<span class="vidply-track-number">${u.escapeHTML(g)}</span>
|
package/dist/vidply.css
CHANGED
|
@@ -284,7 +284,7 @@
|
|
|
284
284
|
"format": "esm"
|
|
285
285
|
},
|
|
286
286
|
"src/renderers/HLSRenderer.js": {
|
|
287
|
-
"bytes":
|
|
287
|
+
"bytes": 9605,
|
|
288
288
|
"imports": [
|
|
289
289
|
{
|
|
290
290
|
"path": "src/renderers/HTML5Renderer.js",
|
|
@@ -295,7 +295,7 @@
|
|
|
295
295
|
"format": "esm"
|
|
296
296
|
},
|
|
297
297
|
"src/core/Player.js": {
|
|
298
|
-
"bytes":
|
|
298
|
+
"bytes": 208550,
|
|
299
299
|
"imports": [
|
|
300
300
|
{
|
|
301
301
|
"path": "src/utils/EventEmitter.js",
|
|
@@ -442,7 +442,7 @@
|
|
|
442
442
|
},
|
|
443
443
|
"bytes": 4413
|
|
444
444
|
},
|
|
445
|
-
"dist/prod/vidply.HLSRenderer-
|
|
445
|
+
"dist/prod/vidply.HLSRenderer-LDXSMWTI.min.js": {
|
|
446
446
|
"imports": [
|
|
447
447
|
{
|
|
448
448
|
"path": "dist/prod/vidply.HTML5Renderer-XJCSUETP.min.js",
|
|
@@ -455,10 +455,10 @@
|
|
|
455
455
|
"entryPoint": "src/renderers/HLSRenderer.js",
|
|
456
456
|
"inputs": {
|
|
457
457
|
"src/renderers/HLSRenderer.js": {
|
|
458
|
-
"bytesInOutput":
|
|
458
|
+
"bytesInOutput": 5654
|
|
459
459
|
}
|
|
460
460
|
},
|
|
461
|
-
"bytes":
|
|
461
|
+
"bytes": 5798
|
|
462
462
|
},
|
|
463
463
|
"dist/prod/vidply.esm.min.js": {
|
|
464
464
|
"imports": [
|
|
@@ -483,7 +483,7 @@
|
|
|
483
483
|
"kind": "dynamic-import"
|
|
484
484
|
},
|
|
485
485
|
{
|
|
486
|
-
"path": "dist/prod/vidply.HLSRenderer-
|
|
486
|
+
"path": "dist/prod/vidply.HLSRenderer-LDXSMWTI.min.js",
|
|
487
487
|
"kind": "dynamic-import"
|
|
488
488
|
}
|
|
489
489
|
],
|
|
@@ -510,7 +510,7 @@
|
|
|
510
510
|
"bytesInOutput": 3991
|
|
511
511
|
},
|
|
512
512
|
"src/core/Player.js": {
|
|
513
|
-
"bytesInOutput":
|
|
513
|
+
"bytesInOutput": 76697
|
|
514
514
|
},
|
|
515
515
|
"src/features/PlaylistManager.js": {
|
|
516
516
|
"bytesInOutput": 16824
|
|
@@ -519,7 +519,7 @@
|
|
|
519
519
|
"bytesInOutput": 1869
|
|
520
520
|
}
|
|
521
521
|
},
|
|
522
|
-
"bytes":
|
|
522
|
+
"bytes": 164553
|
|
523
523
|
},
|
|
524
524
|
"dist/prod/vidply.de-SWFW4HYT.min.js": {
|
|
525
525
|
"imports": [],
|
package/dist/vidply.min.css
CHANGED