vidply 1.0.29 → 1.0.31
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/dist/dev/vidply.HLSRenderer-UMPUDSYL.js +266 -0
- package/dist/dev/vidply.HLSRenderer-UMPUDSYL.js.map +7 -0
- package/dist/dev/vidply.HTML5Renderer-FXBZQL6Y.js +12 -0
- package/dist/dev/vidply.HTML5Renderer-FXBZQL6Y.js.map +7 -0
- package/dist/dev/vidply.chunk-W2LSBD6Y.js +251 -0
- package/dist/dev/vidply.chunk-W2LSBD6Y.js.map +7 -0
- package/dist/dev/vidply.esm.js +374 -5
- package/dist/dev/vidply.esm.js.map +3 -3
- package/dist/legacy/vidply.js +378 -3
- package/dist/legacy/vidply.js.map +3 -3
- package/dist/legacy/vidply.min.js +1 -1
- package/dist/legacy/vidply.min.meta.json +25 -7
- package/dist/prod/vidply.HLSRenderer-3CG7BZKA.min.js +6 -0
- package/dist/prod/vidply.HTML5Renderer-KKW3OLHM.min.js +6 -0
- package/dist/prod/vidply.chunk-34RH2THY.min.js +6 -0
- package/dist/prod/vidply.esm.min.js +4 -4
- package/dist/vidply.css +20 -1
- package/dist/vidply.esm.min.meta.json +34 -16
- package/dist/vidply.min.css +1 -1
- package/package.json +2 -2
- package/src/controls/ControlBar.js +325 -3
- package/src/core/Player.js +4868 -4776
- package/src/renderers/HTML5Renderer.js +7 -0
- package/src/styles/vidply.css +20 -1
- package/src/utils/VideoFrameCapture.js +119 -0
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
* (c) 2025 Matthias Peltzer
|
|
4
4
|
* Released under GPL-2.0-or-later License
|
|
5
5
|
*/
|
|
6
|
-
import{a as ne}from"./vidply.chunk-OXXPY2XB.min.js";import{a as h,b as g,c as x,d as w,e as se,f as te,g as ae,h as W,i as K,j as O,k as R,l as N,m as U,n as Q}from"./vidply.chunk-LGTJRPUL.min.js";var X=class{constructor(){this.events={}}on(e,t){return this.events[e]||(this.events[e]=[]),this.events[e].push(t),this}once(e,t){let i=(...s)=>{t(...s),this.off(e,i)};return this.on(e,i)}off(e,t){return this.events[e]?(t?this.events[e]=this.events[e].filter(i=>i!==t):delete this.events[e],this):this}emit(e,...t){return this.events[e]?(this.events[e].forEach(i=>{i(...t)}),this):this}removeAllListeners(){return this.events={},this}};function j(T,e=100){let t;return function(...s){let a=()=>{clearTimeout(t),T(...s)};clearTimeout(t),t=setTimeout(a,e)}}function V(T=768){return window.innerWidth<T}function _(T,e=100){let t=!1,i=()=>{t||(t=!0,T())};requestAnimationFrame(i),setTimeout(i,e)}var J=class{constructor(e){this.player=e,this.element=null,this.controls={},this.hideTimeout=null,this.isDraggingProgress=!1,this.isDraggingVolume=!1,this.openMenu=null,this.openMenuButton=null,this.init()}init(){this.createElement(),this.createControls(),this.attachEvents(),this.setupAutoHide(),this.setupOverflowDetection()}isTouchDevice(){return"ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0}positionMenu(e,t,i=!1){let s=V(),a=e.classList.contains(`${this.player.options.classPrefix}-overflow-menu-list`);if(this.player.state.fullscreen&&e.parentElement===this.player.container){let u=()=>{let o=t.getBoundingClientRect(),n=e.getBoundingClientRect(),l=this.player.container.getBoundingClientRect(),d=window.innerHeight,p=o.left+o.width/2-l.left,y=o.top-l.top,f=o.bottom-l.top,L=o.top-l.top,m=l.bottom-o.bottom;if(L>=n.height+20||L>m?(e.style.bottom=`${l.height-y+8}px`,e.style.top="auto",e.classList.remove("vidply-menu-below")):(e.style.top=`${f+8}px`,e.style.bottom="auto",e.classList.add("vidply-menu-below")),a){let k=o.right-l.left;e.style.right=`${l.width-k}px`,e.style.left="auto",e.style.transform="none"}else e.style.left=`${p}px`,e.style.right="auto",e.style.transform="translateX(-50%)"};i?u():requestAnimationFrame(u);return}if(s){let u=e.classList.contains(`${this.player.options.classPrefix}-volume-menu`),o=()=>{let n=t.parentElement;if(!n)return;let l=t.getBoundingClientRect(),d=n.getBoundingClientRect(),p=e.getBoundingClientRect(),y=window.innerWidth,f=window.innerHeight;if(u){let L=l.left+l.width/2-d.left;e.style.left=`${L}px`,e.style.right="auto",e.style.transform="translateX(-50%)";return}p.right>y&&(e.style.left="auto",e.style.right="10px",e.style.transform="none"),p.left<0&&(e.style.left="10px",e.style.right="auto",e.style.transform="none"),p.top<10&&(e.style.top="10px"),p.bottom>f-10&&(e.style.bottom="10px",e.style.top="auto")};i?o():requestAnimationFrame(o);return}let c=()=>{let u=t.getBoundingClientRect(),o=e.getBoundingClientRect(),n=window.innerWidth,l=window.innerHeight,d=t.parentElement;if(!d)return;let p=d.getBoundingClientRect(),y=u.left+u.width/2-p.left,f=u.bottom-p.top,L=u.top-p.top,m=u.top,k=l-u.bottom,b=L-o.height-8,v=null;m<o.height+20&&k>m?(b=null,v=p.bottom-p.top-f+8,e.classList.add("vidply-menu-below")):e.classList.remove("vidply-menu-below");let E="auto",M="auto",S="translateX(0)";if(a)E="auto",M=0,S="translateX(0)";else{E=y-o.width/2;let C=u.left+u.width/2-o.width/2;C<10?(E=0,S="translateX(0)"):C+o.width>n-10?(E="auto",M=0,S="translateX(0)"):(E=y,S="translateX(-50%)")}b!==null?(e.style.top=`${b}px`,e.style.bottom="auto"):v!==null&&(e.style.top="auto",e.style.bottom=`${v}px`),E!=="auto"?(e.style.left=`${E}px`,e.style.right="auto"):(e.style.left="auto",e.style.right=`${M}px`),e.style.transform=S};i?c():requestAnimationFrame(()=>{setTimeout(c,10)})}insertMenuIntoDOM(e,t){e.id||(e.id=`vidply-menu-${Math.random().toString(36).substr(2,9)}`),t.setAttribute("aria-controls",e.id),t.setAttribute("aria-haspopup","true"),this.player.state.fullscreen?(this.player.container.appendChild(e),e.dataset.triggerButton=t.getAttribute("aria-label")||"button"):t.insertAdjacentElement("afterend",e)}attachMenuCloseHandler(e,t,i=!1){this.openMenu&&this.openMenu!==e&&this.openMenuButton&&(this.openMenuButton._vidplyBlurHandler&&(this.openMenuButton.removeEventListener("blur",this.openMenuButton._vidplyBlurHandler),delete this.openMenuButton._vidplyBlurHandler),this.openMenuButton._vidplyMousedownHandler&&(this.openMenuButton.removeEventListener("mousedown",this.openMenuButton._vidplyMousedownHandler),delete this.openMenuButton._vidplyMousedownHandler),this.openMenu&&document.contains(this.openMenu)?this.openMenu.remove():this.openMenu&&this.openMenu.parentNode&&this.openMenu.parentNode.removeChild(this.openMenu),this.openMenuButton&&this.openMenuButton.setAttribute("aria-expanded","false")),this.openMenu=e,this.openMenuButton=t,this.positionMenu(e,t),t&&t.setAttribute("aria-expanded","true");let s=!1,a=!0,r=()=>{s=!0,a=!1,setTimeout(()=>{s=!1,a=!0},200)};t.addEventListener("mousedown",r),t._vidplyMousedownHandler=r;let c=l=>{if(!a||s||this.openMenu!==e)return;let d=l.relatedTarget;requestAnimationFrame(()=>{setTimeout(()=>{if(!a||this.openMenu!==e)return;let p=document.activeElement;if(e.contains(p))return;let y=this.player.signLanguageWrapper,f=this.player.transcriptManager?.transcriptWindow;if(y&&y.contains(p)||f&&f.contains(p))return;let L=this.element.querySelectorAll("button"),m=Array.from(L).includes(p)&&p!==t,k=d&&Array.from(L).includes(d)&&d!==t;if(m||k){if(this.openMenu!==e)return;e&&document.contains(e)?e.remove():e&&e.parentNode&&e.parentNode.removeChild(e),t&&t.setAttribute("aria-expanded","false"),this.openMenu===e&&(this.openMenu=null,this.openMenuButton=null),t.removeEventListener("blur",c),t.removeEventListener("mousedown",r),delete t._vidplyBlurHandler,delete t._vidplyMousedownHandler}},10)})};t.addEventListener("blur",c),t._vidplyBlurHandler=c;let u=()=>{this.closeMenuAndReturnFocus(e,t)},o=null,n=null;setTimeout(()=>{o=l=>{i&&e.contains(l.target)||this.openMenu===e&&!e.contains(l.target)&&!t.contains(l.target)&&(u(),o&&document.removeEventListener("click",o),n&&document.removeEventListener("keydown",n))},n=l=>{l.key==="Escape"&&this.openMenu===e&&(l.preventDefault(),l.stopPropagation(),this.closeMenuAndReturnFocus(e,t,!0),o&&document.removeEventListener("click",o),n&&document.removeEventListener("keydown",n))},document.addEventListener("click",o),document.addEventListener("keydown",n)},100)}closeMenuAndReturnFocus(e,t,i=!0){e&&(document.contains(e)?e.remove():e.parentNode&&e.parentNode.removeChild(e)),t&&(t.setAttribute("aria-expanded","false"),e&&e.id&&t.removeAttribute("aria-controls"),i&&requestAnimationFrame(()=>{setTimeout(()=>{t&&document.contains(t)&&t.focus({preventScroll:!0})},0)})),this.openMenu===e&&(this.openMenu=null,this.openMenuButton=null)}closeOpenMenu(){this.openMenu&&this.openMenuButton&&(this.openMenu&&document.contains(this.openMenu)?this.openMenu.remove():this.openMenu&&this.openMenu.parentNode&&this.openMenu.parentNode.removeChild(this.openMenu),this.openMenuButton&&this.openMenuButton.setAttribute("aria-expanded","false"),this.openMenu=null,this.openMenuButton=null)}attachMenuKeyboardNavigation(e,t){let i=Array.from(e.querySelectorAll(`.${this.player.options.classPrefix}-menu-item`));if(i.length===0)return;let s=a=>{let r=i.indexOf(document.activeElement);switch(a.key){case"ArrowDown":a.preventDefault(),a.stopPropagation();let c=(r+1)%i.length;i[c].focus({preventScroll:!1}),i[c].scrollIntoView({behavior:"smooth",block:"nearest"});break;case"ArrowUp":a.preventDefault(),a.stopPropagation();let u=(r-1+i.length)%i.length;i[u].focus({preventScroll:!1}),i[u].scrollIntoView({behavior:"smooth",block:"nearest"});break;case"ArrowLeft":case"ArrowRight":a.preventDefault(),a.stopPropagation();break;case"Home":a.preventDefault(),a.stopPropagation(),i[0].focus({preventScroll:!1}),i[0].scrollIntoView({behavior:"smooth",block:"nearest"});break;case"End":a.preventDefault(),a.stopPropagation(),i[i.length-1].focus({preventScroll:!1}),i[i.length-1].scrollIntoView({behavior:"smooth",block:"nearest"});break;case"Enter":case" ":a.preventDefault(),a.stopPropagation(),document.activeElement&&i.includes(document.activeElement)&&(document.activeElement.click(),te(t,{delay:0}));break;case"Escape":a.preventDefault(),a.stopPropagation(),this.closeMenuAndReturnFocus(e,t,!0);break}};e.addEventListener("keydown",s)}createElement(){this.element=h.createElement("div",{className:`${this.player.options.classPrefix}-controls`,attributes:{role:"region","aria-label":g.t("player.label")+" controls"}})}createControls(){let e=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-time-wrapper`});this.player.options.progressBar&&(this.createProgressBar(),e.appendChild(this.controls.progress)),(this.player.options.currentTime||this.player.options.duration)&&e.appendChild(this.createTimeDisplay()),this.element.appendChild(e);let t=h.createElement("div",{className:`${this.player.options.classPrefix}-controls-buttons`}),i=h.createElement("div",{className:`${this.player.options.classPrefix}-controls-left`});this.player.playlistManager&&i.appendChild(this.createPreviousButton()),this.player.options.playPauseButton&&i.appendChild(this.createPlayPauseButton()),i.appendChild(this.createRestartButton()),this.player.playlistManager&&i.appendChild(this.createNextButton()),this.player.playlistManager||i.appendChild(this.createRewindButton()),this.player.playlistManager||i.appendChild(this.createForwardButton()),this.player.options.volumeControl&&(this.isTouchDevice()?i.appendChild(this.createMuteButton()):i.appendChild(this.createVolumeControl())),this.rightButtons=h.createElement("div",{className:`${this.player.options.classPrefix}-controls-right`});let s=this.hasChapterTracks(),a=this.hasCaptionTracks(),r=this.hasQualityLevels(),c=this.hasAudioDescription();if(this.player.options.chaptersButton&&s){let n=this.createChaptersButton();n.dataset.overflowPriority="3",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.captionsButton&&a){let n=this.createCaptionsButton();n.dataset.overflowPriority="1",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.captionStyleButton&&a){let n=this.createCaptionStyleButton();n.dataset.overflowPriority="3",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.speedButton){let n=this.createSpeedButton();n.dataset.overflowPriority="1",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.audioDescriptionButton&&c){let n=this.createAudioDescriptionButton();n.dataset.overflowPriority="2",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.transcriptButton&&a){let n=this.createTranscriptButton();n.dataset.overflowPriority="3",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.playlistManager&&this.player.options.playlistToggleButton!==!1){let n=this.createPlaylistToggleButton();n.dataset.overflowPriority="2",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}let u=this.hasSignLanguage();if(this.player.options.signLanguageButton&&u){let n=this.createSignLanguageButton();n.dataset.overflowPriority="3",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.qualityButton&&r){let n=this.createQualityButton();n.dataset.overflowPriority="2",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.pipButton&&"pictureInPictureEnabled"in document){let n=this.createPipButton();n.dataset.overflowPriority="3",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}let o=this.player.element.tagName.toLowerCase()==="audio";if(this.player.options.fullscreenButton&&!o){let n=this.createFullscreenButton();n.dataset.overflowPriority="1",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}this.overflowMenuButton=this.createOverflowMenuButton(),this.overflowMenuButton.style.display="none",this.rightButtons.appendChild(this.overflowMenuButton),t.appendChild(i),t.appendChild(this.rightButtons),this.element.appendChild(t),this.ensureButtonTooltips(t)}ensureButtonTooltips(e){e.querySelectorAll("button").forEach(i=>{if(i.querySelector(`.${this.player.options.classPrefix}-tooltip`)||i.querySelector(`.${this.player.options.classPrefix}-button-text`)||i.getAttribute("role")==="menuitem"||i.classList.contains(`${this.player.options.classPrefix}-settings-item`)||i.classList.contains(`${this.player.options.classPrefix}-menu-item`)||i.classList.contains(`${this.player.options.classPrefix}-transcript-settings-item`)||i.classList.contains(`${this.player.options.classPrefix}-sign-language-settings-item`)||i.classList.contains(`${this.player.options.classPrefix}-popup-settings-item`))return;let s=i.getAttribute("aria-label");s&&h.attachTooltip(i,s,this.player.options.classPrefix)})}hasChapterTracks(){let e=this.player.element.textTracks;for(let t=0;t<e.length;t++)if(e[t].kind==="chapters")return!0;return!1}hasCaptionTracks(){let e=this.player.element.textTracks;for(let t=0;t<e.length;t++)if(e[t].kind==="captions"||e[t].kind==="subtitles")return!0;return!1}hasQualityLevels(){if(this.player.renderer&&this.player.renderer.getQualities){let e=this.player.renderer.getQualities();return e&&e.length>1}return!1}hasAudioDescription(){return this.player.audioDescriptionSrc&&this.player.audioDescriptionSrc.length>0?!0:Array.from(this.player.element.textTracks||[]).some(t=>t.kind==="descriptions")}hasSignLanguage(){let e=this.player.signLanguageSrc&&this.player.signLanguageSrc.length>0,t=this.player.signLanguageSources&&Object.keys(this.player.signLanguageSources).length>0;return e||t}createProgressBar(){let e=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-container`,attributes:{role:"slider","aria-label":g.t("player.progress"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":"0",tabindex:"0"}});this.controls.buffered=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-buffered`}),this.controls.played=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-played`}),this.controls.progressHandle=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-handle`}),this.controls.progressTooltip=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-tooltip`}),e.appendChild(this.controls.buffered),e.appendChild(this.controls.played),this.controls.played.appendChild(this.controls.progressHandle),e.appendChild(this.controls.progressTooltip),this.controls.progress=e,this.setupProgressBarEvents()}setupProgressBarEvents(){let e=this.controls.progress,t=i=>{let s=e.getBoundingClientRect(),a=s.width>0?Math.max(0,Math.min(1,(i-s.left)/s.width)):0,r=this.player.state.duration||0,c=a*r;return{percent:a,time:c}};e.addEventListener("mousedown",i=>{this.isDraggingProgress=!0;let{time:s}=t(i.clientX);this.player.seek(s)}),document.addEventListener("mousemove",i=>{if(this.isDraggingProgress){let{time:s}=t(i.clientX);this.player.seek(s)}}),document.addEventListener("mouseup",()=>{this.isDraggingProgress=!1}),e.addEventListener("mousemove",i=>{if(!this.isDraggingProgress){let{time:s}=t(i.clientX);this.controls.progressTooltip.textContent=x.formatTime(s),this.controls.progressTooltip.style.left=`${i.clientX-e.getBoundingClientRect().left}px`,this.controls.progressTooltip.style.display="block"}}),e.addEventListener("mouseleave",()=>{this.controls.progressTooltip.style.display="none"}),e.addEventListener("keydown",i=>{i.key==="ArrowLeft"?(i.preventDefault(),this.player.seekBackward(5)):i.key==="ArrowRight"&&(i.preventDefault(),this.player.seekForward(5))}),e.addEventListener("touchstart",i=>{this.isDraggingProgress=!0;let s=i.touches[0],{time:a}=t(s.clientX);this.player.seek(a)}),e.addEventListener("touchmove",i=>{if(this.isDraggingProgress){i.preventDefault();let s=i.touches[0],{time:a}=t(s.clientX);this.player.seek(a)}}),e.addEventListener("touchend",()=>{this.isDraggingProgress=!1})}createPlayPauseButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-play-pause`,attributes:{type:"button","aria-label":g.t("player.play")}});return e.appendChild(w("play")),e.addEventListener("click",()=>{this.player.toggle()}),this.controls.playPause=e,e}createRestartButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-restart`,attributes:{type:"button","aria-label":g.t("player.restart")}});return e.appendChild(w("restart")),e.addEventListener("click",()=>{this.player.seek(0),this.player.play()}),e}createPreviousButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-previous`,attributes:{type:"button","aria-label":g.t("player.previous")}});e.appendChild(w("skipPrevious")),e.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.previous()});let t=()=>{this.player.playlistManager&&(e.disabled=!this.player.playlistManager.hasPrevious()&&!this.player.playlistManager.options.loop)};return this.player.on("playlisttrackchange",t),t(),this.controls.previous=e,e}createNextButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-next`,attributes:{type:"button","aria-label":g.t("player.next")}});e.appendChild(w("skipNext")),e.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.next()});let t=()=>{this.player.playlistManager&&(e.disabled=!this.player.playlistManager.hasNext()&&!this.player.playlistManager.options.loop)};return this.player.on("playlisttrackchange",t),t(),this.controls.next=e,e}createPlaylistToggleButton(){let e=this.player.playlistManager?`${this.player.playlistManager.uniqueId}-panel`:"vidply-playlist-panel",t=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-playlist-toggle`,attributes:{type:"button","aria-label":g.t("player.playlist"),"aria-expanded":"false","aria-pressed":"false","aria-controls":e}});return t.appendChild(w("playlist")),t.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.togglePanel()}),this.controls.playlistToggle=t,t}createRewindButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-rewind`,attributes:{type:"button","aria-label":g.t("player.rewindSeconds",{seconds:15})}});return e.appendChild(w("rewind")),e.addEventListener("click",()=>{this.player.seekBackward(15)}),e}createForwardButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-forward`,attributes:{type:"button","aria-label":g.t("player.forwardSeconds",{seconds:15})}});return e.appendChild(w("forward")),e.addEventListener("click",()=>{this.player.seekForward(15)}),e}createMuteButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":g.t("player.mute")}});return e.appendChild(w("volumeHigh")),e.addEventListener("click",()=>{this.player.toggleMute()}),this.controls.mute=e,e}createVolumeControl(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":g.t("player.volume"),"aria-expanded":"false"}});return e.appendChild(w("volumeHigh")),e.addEventListener("contextmenu",t=>{t.preventDefault(),this.player.toggleMute()}),e.addEventListener("click",()=>{this.showVolumeSlider(e)}),this.controls.mute=e,e}showVolumeSlider(e){let t=document.querySelector(`.${this.player.options.classPrefix}-volume-menu`);if(t){t.remove(),e.setAttribute("aria-expanded","false");return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-volume-menu ${this.player.options.classPrefix}-menu`}),s=h.createElement("div",{className:`${this.player.options.classPrefix}-volume-slider`,attributes:{role:"slider","aria-label":g.t("player.volume"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":String(Math.round(this.player.state.volume*100)),tabindex:"0"}}),a=h.createElement("div",{className:`${this.player.options.classPrefix}-volume-track`}),r=h.createElement("div",{className:`${this.player.options.classPrefix}-volume-fill`}),c=this.player.state.volume*100;r.style.height=`${c}%`;let u=h.createElement("div",{className:`${this.player.options.classPrefix}-volume-handle`});a.appendChild(r),r.appendChild(u),s.appendChild(a),i.appendChild(s);let o=n=>{let l=a.getBoundingClientRect(),d=Math.max(0,Math.min(1,1-(n-l.top)/l.height));this.player.setVolume(d)};s.addEventListener("mousedown",n=>{n.stopPropagation(),n.preventDefault(),this.isDraggingVolume=!0,o(n.clientY)}),document.addEventListener("mousemove",n=>{this.isDraggingVolume&&o(n.clientY)}),document.addEventListener("mouseup",()=>{this.isDraggingVolume=!1}),s.addEventListener("touchstart",n=>{n.stopPropagation(),n.preventDefault(),this.isDraggingVolume=!0;let l=n.touches[0];o(l.clientY)},{passive:!1}),s.addEventListener("touchmove",n=>{if(this.isDraggingVolume){n.preventDefault();let l=n.touches[0];o(l.clientY)}},{passive:!1}),s.addEventListener("touchend",n=>{n.stopPropagation(),n.preventDefault(),this.isDraggingVolume=!1},{passive:!1}),s.addEventListener("touchcancel",()=>{this.isDraggingVolume=!1}),s.addEventListener("keydown",n=>{n.key==="ArrowUp"?(n.preventDefault(),this.player.setVolume(Math.min(1,this.player.state.volume+.1))):n.key==="ArrowDown"?(n.preventDefault(),this.player.setVolume(Math.max(0,this.player.state.volume-.1))):n.key==="Escape"&&(n.preventDefault(),n.stopPropagation(),this.closeMenuAndReturnFocus(i,e,!0))}),i.addEventListener("click",n=>{n.stopPropagation()}),i.addEventListener("touchstart",n=>{n.stopPropagation()}),i.addEventListener("touchmove",n=>{n.stopPropagation()}),i.addEventListener("touchend",n=>{n.stopPropagation()}),i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.controls.volumeSlider=s,this.controls.volumeFill=r,te(s,{delay:50}),this.attachMenuCloseHandler(i,e,!0)}createTimeDisplay(){let e=h.createElement("div",{className:`${this.player.options.classPrefix}-time`,attributes:{role:"group","aria-label":g.t("time.display")}});this.controls.currentTimeDisplay=h.createElement("span",{className:`${this.player.options.classPrefix}-current-time`});let t=h.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}}),i=h.createElement("span",{className:"vidply-sr-only",textContent:g.t("time.seconds",{count:0})});this.controls.currentTimeDisplay.appendChild(t),this.controls.currentTimeDisplay.appendChild(i),this.controls.currentTimeVisual=t,this.controls.currentTimeAccessible=i;let s=h.createElement("span",{textContent:" / ",attributes:{"aria-hidden":"true"}});this.controls.durationDisplay=h.createElement("span",{className:`${this.player.options.classPrefix}-duration`});let a=h.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}}),r=h.createElement("span",{className:"vidply-sr-only",textContent:g.t("time.durationPrefix")+g.t("time.seconds",{count:0})});return this.controls.durationDisplay.appendChild(a),this.controls.durationDisplay.appendChild(r),this.controls.durationVisual=a,this.controls.durationAccessible=r,e.appendChild(this.controls.currentTimeDisplay),e.appendChild(s),e.appendChild(this.controls.durationDisplay),e}createChaptersButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-chapters`,attributes:{type:"button","aria-label":g.t("player.chapters"),"aria-expanded":"false"}});return e.appendChild(w("chapters")),e.addEventListener("click",()=>{this.showChaptersMenu(e)}),this.controls.chapters=e,e}showChaptersMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-chapters-menu`);if(t){t.remove(),e.setAttribute("aria-expanded","false"),this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null);return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-chapters-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":g.t("player.chapters")}}),s=Array.from(this.player.element.textTracks).filter(a=>a.kind==="chapters");if(s.length===0){let a=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.noChapters"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});i.appendChild(a)}else{let a=s[0];if(a.mode==="disabled"&&(a.mode="hidden"),!a.cues||a.cues.length===0){let r=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.loadingChapters"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});i.appendChild(r);let c=()=>{i.remove(),this.showChaptersMenu(e)};a.addEventListener("load",c,{once:!0}),setTimeout(()=>{a.cues&&a.cues.length>0&&document.contains(i)&&(i.remove(),this.showChaptersMenu(e))},500)}else{let r=a.cues;for(let c=0;c<r.length;c++){let u=r[c],o=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),n=h.createElement("span",{className:`${this.player.options.classPrefix}-chapter-time`,textContent:x.formatTime(u.startTime),attributes:{"aria-label":x.formatDuration(u.startTime)}}),l=h.createElement("span",{className:`${this.player.options.classPrefix}-chapter-title`,textContent:u.text});o.appendChild(n),o.appendChild(document.createTextNode(" ")),o.appendChild(l),o.addEventListener("click",()=>{this.player.seek(u.startTime),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(o)}this.attachMenuKeyboardNavigation(i,e),setTimeout(()=>{let c=i.querySelector(`.${this.player.options.classPrefix}-menu-item`);c&&c.focus({preventScroll:!0})},0)}}i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuCloseHandler(i,e)}createQualityButton(){let e=g.t("player.quality"),t=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-quality`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}});t.appendChild(w("hd")),h.attachTooltip(t,e,this.player.options.classPrefix);let i=h.createElement("span",{className:`${this.player.options.classPrefix}-quality-text`,textContent:""});return t.appendChild(i),t.addEventListener("click",()=>{this.showQualityMenu(t)}),this.controls.quality=t,this.controls.qualityText=i,setTimeout(()=>this.updateQualityIndicator(),500),t}showQualityMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-quality-menu`);if(t){t.remove(),e.setAttribute("aria-expanded","false"),this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null);return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-quality-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":g.t("player.quality")}});if(this.player.renderer&&this.player.renderer.getQualities){let s=this.player.renderer.getQualities(),a=this.player.renderer.getCurrentQuality?this.player.renderer.getCurrentQuality():-1,r=this.player.renderer.hls!==void 0;if(s.length===0){let c=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.autoQuality"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});i.appendChild(c)}else{let c=null;if(r){let u=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.auto"),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});this.player.renderer.hls&&this.player.renderer.hls.currentLevel===-1&&(u.classList.add(`${this.player.options.classPrefix}-menu-item-active`),u.appendChild(w("check")),c=u),u.addEventListener("click",()=>{this.player.renderer.switchQuality&&this.player.renderer.switchQuality(-1),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(u)}s.forEach(u=>{let o=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:u.name||`${u.height}p`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}});u.index===a&&(o.classList.add(`${this.player.options.classPrefix}-menu-item-active`),o.appendChild(w("check")),c=o),o.addEventListener("click",()=>{this.player.renderer.switchQuality&&this.player.renderer.switchQuality(u.index),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(o)}),this.attachMenuKeyboardNavigation(i,e),setTimeout(()=>{let u=c||i.querySelector(`.${this.player.options.classPrefix}-menu-item`);u&&u.focus({preventScroll:!0})},0)}}else{let s=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.noQuality"),style:{opacity:"0.5",cursor:"default"}});i.appendChild(s)}i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuCloseHandler(i,e)}createCaptionStyleButton(){let e=g.t("player.captionStyling"),t=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-caption-style`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}}),i=h.createElement("span",{textContent:"Aa",style:{fontSize:"14px",fontWeight:"bold"}});return t.appendChild(i),h.attachTooltip(t,e,this.player.options.classPrefix),t.addEventListener("click",()=>{this.showCaptionStyleMenu(t)}),this.controls.captionStyle=t,t}showCaptionStyleMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-caption-style-menu`);if(t){t.remove(),e.setAttribute("aria-expanded","false"),this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null);return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-caption-style-menu ${this.player.options.classPrefix}-menu ${this.player.options.classPrefix}-settings-menu`,attributes:{role:"menu","aria-label":g.t("player.captionStyling")}});if(i.addEventListener("click",o=>{o.stopPropagation()}),!this.player.captionManager||this.player.captionManager.tracks.length===0){let o=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.noCaptions"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default",padding:"12px 16px"}});i.appendChild(o),i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuCloseHandler(i,e,!0);return}let s=this.createStyleControl(g.t("styleLabels.fontSize"),"captionsFontSize",[{label:g.t("fontSizes.small"),value:"87.5%"},{label:g.t("fontSizes.normal"),value:"100%"},{label:g.t("fontSizes.large"),value:"125%"},{label:g.t("fontSizes.xlarge"),value:"150%"}]);i.appendChild(s);let a=this.createStyleControl(g.t("styleLabels.font"),"captionsFontFamily",[{label:g.t("fontFamilies.sansSerif"),value:"sans-serif"},{label:g.t("fontFamilies.serif"),value:"serif"},{label:g.t("fontFamilies.monospace"),value:"monospace"}]);i.appendChild(a);let r=this.createColorControl(g.t("styleLabels.textColor"),"captionsColor");i.appendChild(r);let c=this.createColorControl(g.t("styleLabels.background"),"captionsBackgroundColor");i.appendChild(c);let u=this.createOpacityControl(g.t("styleLabels.opacity"),"captionsOpacity");i.appendChild(u),i.style.minWidth="220px",i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuCloseHandler(i,e,!0),ae(i,`.${this.player.options.classPrefix}-style-select`)}createStyleControl(e,t,i){let s=h.createElement("div",{className:`${this.player.options.classPrefix}-style-group`}),a=`${this.player.options.classPrefix}-${t}-${Date.now()}`,r=h.createElement("label",{textContent:e,attributes:{for:a},style:{display:"block",fontSize:"12px",marginBottom:"4px",color:"rgba(255,255,255,0.7)"}});s.appendChild(r);let c=h.createElement("select",{className:`${this.player.options.classPrefix}-style-select`,attributes:{id:a},style:{width:"100%",padding:"6px",background:"var(--vidply-white)",border:"1px solid var(--vidply-white-10)",borderRadius:"4px",color:"var(--vidply-black)",fontSize:"13px"}}),u=this.player.options[t];return i.forEach(o=>{let n=h.createElement("option",{textContent:o.label,attributes:{value:o.value}});o.value===u&&(n.selected=!0),c.appendChild(n)}),c.addEventListener("mousedown",o=>{o.stopPropagation()}),c.addEventListener("click",o=>{o.stopPropagation()}),c.addEventListener("change",o=>{o.stopPropagation(),this.player.options[t]=o.target.value,this.player.captionManager&&this.player.captionManager.setCaptionStyle(t.replace("captions","").charAt(0).toLowerCase()+t.replace("captions","").slice(1),o.target.value)}),s.appendChild(c),s}createColorControl(e,t){let i=h.createElement("div",{className:`${this.player.options.classPrefix}-style-group`}),s=`${this.player.options.classPrefix}-${t}-${Date.now()}`,a=h.createElement("label",{textContent:e,attributes:{for:s},style:{display:"block",fontSize:"12px",marginBottom:"4px",color:"rgba(255,255,255,0.7)"}});i.appendChild(a);let r=h.createElement("input",{attributes:{id:s,type:"color",value:this.player.options[t]},style:{width:"100%",height:"32px",padding:"2px",background:"rgba(255,255,255,0.1)",border:"1px solid rgba(255,255,255,0.2)",borderRadius:"4px",cursor:"pointer"}});return r.addEventListener("mousedown",c=>{c.stopPropagation()}),r.addEventListener("click",c=>{c.stopPropagation()}),r.addEventListener("change",c=>{c.stopPropagation(),this.player.options[t]=c.target.value,this.player.captionManager&&this.player.captionManager.setCaptionStyle(t.replace("captions","").charAt(0).toLowerCase()+t.replace("captions","").slice(1),c.target.value)}),i.appendChild(r),i}createOpacityControl(e,t){let i=h.createElement("div",{className:`${this.player.options.classPrefix}-style-group`}),s=`${this.player.options.classPrefix}-${t}-${Date.now()}`,a=h.createElement("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"4px"}}),r=h.createElement("label",{textContent:e,attributes:{for:s},style:{fontSize:"12px",color:"rgba(255,255,255,0.7)"}}),c=h.createElement("span",{textContent:Math.round(this.player.options[t]*100)+"%",style:{fontSize:"12px",color:"rgba(255,255,255,0.7)"}});a.appendChild(r),a.appendChild(c),i.appendChild(a);let u=h.createElement("input",{attributes:{id:s,type:"range",min:"0",max:"1",step:"0.1",value:String(this.player.options[t])},style:{width:"100%",cursor:"pointer"}});return u.addEventListener("mousedown",o=>{o.stopPropagation()}),u.addEventListener("click",o=>{o.stopPropagation()}),u.addEventListener("input",o=>{o.stopPropagation();let n=parseFloat(o.target.value);c.textContent=Math.round(n*100)+"%",this.player.options[t]=n,this.player.captionManager&&this.player.captionManager.setCaptionStyle(t.replace("captions","").charAt(0).toLowerCase()+t.replace("captions","").slice(1),n)}),i.appendChild(u),i}createSpeedButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-speed`,attributes:{type:"button","aria-label":g.t("player.speed"),"aria-expanded":"false"}});e.appendChild(w("speed"));let t=h.createElement("span",{className:`${this.player.options.classPrefix}-speed-text`,textContent:"1x"});return e.appendChild(t),e.addEventListener("click",()=>{this.showSpeedMenu(e)}),this.controls.speed=e,this.controls.speedText=t,e}formatSpeedLabel(e){return e===1?g.t("speeds.normal"):`${e.toLocaleString(g.getLanguage(),{minimumFractionDigits:0,maximumFractionDigits:2})}×`}showSpeedMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-speed-menu`);if(t){t.remove(),e.setAttribute("aria-expanded","false"),this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null);return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-speed-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu"}}),s=[.25,.5,.75,1,1.25,1.5,1.75,2],a=null;s.forEach(r=>{let c=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:this.formatSpeedLabel(r),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});r===this.player.state.playbackSpeed&&(c.classList.add(`${this.player.options.classPrefix}-menu-item-active`),c.appendChild(w("check")),a=c),c.addEventListener("click",()=>{this.player.setPlaybackSpeed(r),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(c)}),i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuKeyboardNavigation(i,e),this.attachMenuCloseHandler(i,e),setTimeout(()=>{let r=a||i.querySelector(`.${this.player.options.classPrefix}-menu-item`);r&&r.focus({preventScroll:!0})},0)}createCaptionsButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-captions-button`,attributes:{type:"button","aria-label":g.t("player.captions"),"aria-expanded":"false"}});return e.appendChild(w("captionsOff")),e.addEventListener("click",()=>{this.showCaptionsMenu(e)}),this.controls.captions=e,e}showCaptionsMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-captions-menu`);if(t){t.remove(),e.setAttribute("aria-expanded","false"),this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null);return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-captions-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":g.t("captions.select")}});if(!this.player.captionManager||this.player.captionManager.tracks.length===0){let c=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.noCaptions"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});i.appendChild(c),this.insertMenuIntoDOM(i,e),this.attachMenuCloseHandler(i,e);return}let s=null,a=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("captions.off"),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});this.player.state.captionsEnabled||(a.classList.add(`${this.player.options.classPrefix}-menu-item-active`),a.appendChild(w("check")),s=a),a.addEventListener("click",()=>{this.player.disableCaptions(),this.updateCaptionsButton(),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(a),this.player.captionManager.getAvailableTracks().forEach(c=>{let u=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:c.label,attributes:{type:"button",role:"menuitem",lang:c.language,tabindex:"-1"}});this.player.state.captionsEnabled&&this.player.captionManager.currentTrack===this.player.captionManager.tracks[c.index]&&(u.classList.add(`${this.player.options.classPrefix}-menu-item-active`),u.appendChild(w("check")),s=u),u.addEventListener("click",()=>{this.player.captionManager.switchTrack(c.index),this.updateCaptionsButton(),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(u)}),this.insertMenuIntoDOM(i,e),this.attachMenuKeyboardNavigation(i,e),this.attachMenuCloseHandler(i,e),setTimeout(()=>{let c=s||i.querySelector(`.${this.player.options.classPrefix}-menu-item`);c&&c.focus({preventScroll:!0})},0)}updateCaptionsButton(){if(!this.controls.captions)return;let e=this.controls.captions.querySelector(".vidply-icon"),t=this.player.state.captionsEnabled;e.innerHTML=t?w("captions").innerHTML:w("captionsOff").innerHTML}createTranscriptButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-transcript`,attributes:{type:"button","aria-label":g.t("player.transcript"),"aria-expanded":"false"}});return e.appendChild(w("transcript")),e.addEventListener("click",async()=>{await this.player.toggleTranscript(),this.updateTranscriptButton()}),this.controls.transcript=e,e}updateTranscriptButton(){if(!this.controls.transcript)return;let e=this.player.transcriptManager&&this.player.transcriptManager.isVisible;this.controls.transcript.setAttribute("aria-expanded",e?"true":"false")}createAudioDescriptionButton(){let e=g.t("player.audioDescription"),t=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-audio-description`,attributes:{type:"button","aria-label":e,role:"switch","aria-checked":"false"}});return t.appendChild(w("audioDescription")),h.attachTooltip(t,e,this.player.options.classPrefix),t.addEventListener("click",async()=>{await this.player.toggleAudioDescription(),this.updateAudioDescriptionButton()}),this.controls.audioDescription=t,t}updateAudioDescriptionButton(){if(!this.controls.audioDescription)return;let e=this.controls.audioDescription.querySelector(".vidply-icon"),t=this.player.state.audioDescriptionEnabled;e.innerHTML=t?w("audioDescriptionOn").innerHTML:w("audioDescription").innerHTML,this.controls.audioDescription.setAttribute("aria-checked",t?"true":"false")}createSignLanguageButton(){let e=g.t("player.signLanguage"),t=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-sign-language`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}});return t.appendChild(w("signLanguage")),h.attachTooltip(t,e,this.player.options.classPrefix),t.addEventListener("click",()=>{this.player.toggleSignLanguage(),this.updateSignLanguageButton()}),this.controls.signLanguage=t,t}updateSignLanguageButton(){if(!this.controls.signLanguage)return;let e=this.controls.signLanguage.querySelector(".vidply-icon"),t=this.player.state.signLanguageEnabled;e.innerHTML=t?w("signLanguageOn").innerHTML:w("signLanguage").innerHTML,this.controls.signLanguage.setAttribute("aria-expanded",t?"true":"false"),this.controls.signLanguage.setAttribute("aria-label",t?g.t("signLanguage.hide"):g.t("signLanguage.show"))}updateAccessibilityButtons(){let e=this.hasAudioDescription(),t=this.hasSignLanguage();if(e){if(!this.controls.audioDescription&&this.player.options.audioDescriptionButton!==!1){let i=this.createAudioDescriptionButton();i.dataset.overflowPriority="2",i.dataset.overflowPriorityMobile="3";let s=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-transcript`),a=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-playlist-toggle`),r=s||a||null;r?this.rightButtons.insertBefore(i,r):this.rightButtons.appendChild(i),this.setupOverflowMenu()}this.controls.audioDescription&&(this.controls.audioDescription.style.display="")}else this.controls.audioDescription&&(this.controls.audioDescription.style.display="none");if(t){if(!this.controls.signLanguage&&this.player.options.signLanguageButton!==!1){let i=this.createSignLanguageButton();i.dataset.overflowPriority="3",i.dataset.overflowPriorityMobile="3";let s=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-quality`),a=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-fullscreen`),r=s||a||null;r?this.rightButtons.insertBefore(i,r):this.rightButtons.appendChild(i),this.setupOverflowMenu()}this.controls.signLanguage&&(this.controls.signLanguage.style.display="")}else this.controls.signLanguage&&(this.controls.signLanguage.style.display="none")}createSettingsButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-settings`,attributes:{type:"button","aria-label":g.t("player.settings")}});return e.appendChild(w("settings")),e.addEventListener("click",()=>{this.player.showSettings()}),e}createPipButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-pip`,attributes:{type:"button","aria-label":g.t("player.pip")}});return e.appendChild(w("pip")),e.addEventListener("click",()=>{this.player.togglePiP()}),e}createFullscreenButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-fullscreen`,attributes:{type:"button","aria-label":g.t("player.fullscreen")}});return e.appendChild(w("fullscreen")),e.addEventListener("click",()=>{this.player.toggleFullscreen()}),this.controls.fullscreen=e,e}attachEvents(){this.player.on("play",()=>this.updatePlayPauseButton()),this.player.on("pause",()=>this.updatePlayPauseButton()),this.player.on("timeupdate",()=>this.updateProgress()),this.player.on("loadedmetadata",()=>{this.updateDuration(),this.ensureQualityButton(),this.updateQualityIndicator()}),this.player.on("volumechange",()=>this.updateVolumeDisplay()),this.player.on("progress",()=>this.updateBuffered()),this.player.on("playbackspeedchange",()=>this.updateSpeedDisplay()),this.player.on("fullscreenchange",()=>this.updateFullscreenButton()),this.player.on("captionsenabled",()=>this.updateCaptionsButton()),this.player.on("captionsdisabled",()=>this.updateCaptionsButton()),this.player.on("audiodescriptionenabled",()=>this.updateAudioDescriptionButton()),this.player.on("audiodescriptiondisabled",()=>this.updateAudioDescriptionButton()),this.player.on("signlanguageenabled",()=>this.updateSignLanguageButton()),this.player.on("signlanguagedisabled",()=>this.updateSignLanguageButton()),this.player.on("qualitychange",()=>this.updateQualityIndicator()),this.player.on("hlslevelswitched",()=>this.updateQualityIndicator()),this.player.on("hlsmanifestparsed",()=>{this.ensureQualityButton(),this.updateQualityIndicator()})}updatePlayPauseButton(){if(!this.controls.playPause)return;let e=this.controls.playPause.querySelector(".vidply-icon"),t=this.player.state.playing;e.innerHTML=t?w("pause").innerHTML:w("play").innerHTML;let i=t?g.t("player.pause"):g.t("player.play");this.controls.playPause.setAttribute("aria-label",i),h.attachTooltip(this.controls.playPause,i,this.player.options.classPrefix)}updateProgress(){if(!this.controls.played)return;let e=this.player.state.currentTime||0,t=this.player.state.duration||0,i=t>0?Math.min(100,Math.max(0,e/t*100)):0;this.controls.played.style.width=`${i}%`,this.controls.progress.setAttribute("aria-valuenow",String(Math.round(i)));let s=x.formatDuration(this.player.state.currentTime),a=x.formatDuration(this.player.state.duration);if(this.controls.progress.setAttribute("aria-valuetext",`${Math.round(i)}%, ${s} ${g.t("time.of")} ${a}`),this.controls.currentTimeVisual){let r=this.player.state.currentTime;this.controls.currentTimeVisual.textContent=x.formatTime(r),this.controls.currentTimeAccessible&&(this.controls.currentTimeAccessible.textContent=x.formatDuration(r))}}updateDuration(){if(this.controls.durationVisual){let e=this.player.state.duration;this.controls.durationVisual.textContent=x.formatTime(e),this.controls.durationAccessible&&(this.controls.durationAccessible.textContent=g.t("time.durationPrefix")+x.formatDuration(e))}}updateVolumeDisplay(){let e=this.player.state.volume*100;if(this.controls.volumeFill&&(this.controls.volumeFill.style.height=`${e}%`),this.controls.volumeSlider&&this.controls.volumeSlider.setAttribute("aria-valuenow",String(Math.round(e))),this.controls.mute){let t=this.controls.mute.querySelector(".vidply-icon");if(t){let i;this.player.state.muted||this.player.state.volume===0?i="volumeMuted":this.player.state.volume<.3?i="volumeLow":this.player.state.volume<.7?i="volumeMedium":i="volumeHigh",t.innerHTML=w(i).innerHTML;let s=this.player.state.muted?g.t("player.unmute"):g.t("player.mute");this.controls.mute.setAttribute("aria-label",s),h.attachTooltip(this.controls.mute,s,this.player.options.classPrefix)}}this.controls.volumeSlider&&this.controls.volumeSlider.setAttribute("aria-valuenow",String(Math.round(e)))}updateBuffered(){if(!this.controls.buffered||!this.player.element.buffered||this.player.element.buffered.length===0)return;let t=this.player.element.buffered.end(this.player.element.buffered.length-1)/this.player.state.duration*100;this.controls.buffered.style.width=`${t}%`}updateSpeedDisplay(){this.controls.speedText&&(this.controls.speedText.textContent=`${this.player.state.playbackSpeed}x`)}updateFullscreenButton(){if(!this.controls.fullscreen)return;let e=this.controls.fullscreen.querySelector(".vidply-icon"),t=this.player.state.fullscreen;e.innerHTML=t?w("fullscreenExit").innerHTML:w("fullscreen").innerHTML,this.controls.fullscreen.setAttribute("aria-label",t?g.t("player.exitFullscreen"):g.t("player.fullscreen"))}ensureQualityButton(){if(!this.player.options.qualityButton||this.controls.quality||!this.hasQualityLevels())return;let e=this.createQualityButton(),t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-speed`),s=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-caption-style`)||t;s?this.rightButtons.insertBefore(e,s):this.rightButtons.insertBefore(e,this.rightButtons.firstChild),this.player.log("Quality button added dynamically","info")}updateQualityIndicator(){if(!this.controls.qualityText||!this.player.renderer||!this.player.renderer.getQualities)return;let e=this.player.renderer.getQualities();if(e.length===0){this.controls.qualityText.textContent="";return}let t="";if(this.player.renderer.hls&&this.player.renderer.hls.currentLevel===-1)t="Auto";else if(this.player.renderer.getCurrentQuality){let i=this.player.renderer.getCurrentQuality(),s=e.find(a=>a.index===i);s&&(t=s.height?`${s.height}p`:"")}this.controls.qualityText.textContent=t}setupAutoHide(){if(this.player.element.tagName!=="VIDEO")return;let e=()=>{if(this.element.classList.add(`${this.player.options.classPrefix}-controls-visible`),this.player.container.classList.add(`${this.player.options.classPrefix}-controls-visible`),this.player.state.controlsVisible=!0,clearTimeout(this.hideTimeout),this.player.state.playing){let t=this.player.state.fullscreen?this.player.options.hideControlsDelay*1.5:this.player.options.hideControlsDelay;this.hideTimeout=setTimeout(()=>{this.element.classList.remove(`${this.player.options.classPrefix}-controls-visible`),this.player.container.classList.remove(`${this.player.options.classPrefix}-controls-visible`),this.player.state.controlsVisible=!1},t)}};this.player.container.addEventListener("mousemove",e),this.player.container.addEventListener("touchstart",e),this.player.container.addEventListener("touchmove",e),this.player.container.addEventListener("click",e),this.player.container.addEventListener("tap",e),this.element.addEventListener("focusin",e),this.player.on("pause",()=>{e(),clearTimeout(this.hideTimeout)}),this.player.on("play",()=>{e()}),this.player.on("enterfullscreen",()=>{e(),this.player.state.fullscreen&&(clearTimeout(this.hideTimeout),this.hideTimeout=setTimeout(()=>{this.player.state.playing&&(this.element.classList.remove(`${this.player.options.classPrefix}-controls-visible`),this.player.container.classList.remove(`${this.player.options.classPrefix}-controls-visible`),this.player.state.controlsVisible=!1)},this.player.options.hideControlsDelay*2))}),e()}createOverflowMenuButton(){let e=g.t("player.moreOptions"),t=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-overflow-menu`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}});return t.appendChild(w("moreVertical")),h.attachTooltip(t,e,this.player.options.classPrefix),t.addEventListener("click",()=>{this.showOverflowMenu(t)}),this.controls.overflowMenu=t,t}showOverflowMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-overflow-menu-list`);if(t){t.remove(),e.setAttribute("aria-expanded","false"),this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null);return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-overflow-menu-list ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":g.t("player.moreOptions")}}),s=Array.from(this.rightButtons.querySelectorAll('button[data-in-overflow="true"]'));if(s.length===0){let a=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.noMoreOptions"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});i.appendChild(a)}else s.forEach(a=>{let r=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),c=a.getAttribute("aria-label")||a.getAttribute("title")||"",u=a.querySelector(".vidply-icon");if(u){let n=u.cloneNode(!0);r.appendChild(n)}else{let n=a.querySelector("span");if(n&&n.textContent&&n.textContent.length<=3){let l=n.cloneNode(!0);l.classList.add("vidply-icon"),r.appendChild(l)}}let o=h.createElement("span",{textContent:c});r.appendChild(o),r.addEventListener("click",n=>{this._overflowMenuItemRef=r;let l=a.style.display;a.style.display="",a.style.visibility="hidden",a.click(),setTimeout(()=>{a.style.display=l,a.style.visibility="",this._overflowMenuItemRef=null},100),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(r)}),this.attachMenuKeyboardNavigation(i,e),setTimeout(()=>{let a=i.querySelector(`.${this.player.options.classPrefix}-menu-item`);a&&a.tagName==="BUTTON"&&a.focus({preventScroll:!0})},0);i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuCloseHandler(i,e)}setupOverflowDetection(){let e=()=>{let i=window.innerWidth>=768,s=window.innerHeight<window.innerWidth,a=this.player.state.fullscreen,r=s&&a;if(!this.rightButtons||this.rightButtons.children.length===0){this.overflowMenuButton&&(this.overflowMenuButton.style.display="none");return}let c=Array.from(this.rightButtons.children).filter(m=>!m.classList.contains(`${this.player.options.classPrefix}-overflow-menu`));if(c.length===0){this.overflowMenuButton&&(this.overflowMenuButton.style.display="none");return}let u=!i&&!s;if(this.player.options.debug&&console.log("Overflow detection:",{isDesktop:i,isFullscreen:a,isLandscape:s,isLandscapeFullscreen:r,shouldUseOverflow:u,width:window.innerWidth,height:window.innerHeight}),!u){c.forEach(m=>{m.dataset.inOverflow="false",m.style.display=""}),this.overflowMenuButton&&(this.overflowMenuButton.style.display="none"),this.player.options.debug&&console.log("No overflow menu needed - all buttons visible, overflow button hidden");return}this.player.options.debug&&console.log("Mobile portrait - checking for overflow..."),c.forEach(m=>{m.style.display=""});let o=this.rightButtons.offsetWidth,l=o-50,d=0,p=c.map(m=>{let k=getComputedStyle(m),b=m.offsetWidth+parseInt(k.marginLeft||0)+parseInt(k.marginRight||0);return d+=b,{btn:m,width:b}});d+=(c.length-1)*8;let f=window.innerWidth<768,L=d>l||f||r&&!i;if(this.player.options.debug&&console.log("Overflow detection:",{containerWidth:o,availableWidth:l,totalWidth:d,needsOverflow:L,isSmallScreen:f,reason:f?"mobile screen":d>l?"not enough space":"enough space",buttonCount:c.length}),L){let m=window.innerWidth<768,k=m?"overflowPriorityMobile":"overflowPriority";this.player.options.debug&&console.log(`Using ${m?"mobile":"desktop"} priorities (width: ${window.innerWidth}px)`);let b=p.sort((M,S)=>{let C=parseInt(M.btn.dataset[k]||M.btn.dataset.overflowPriority||"1");return parseInt(S.btn.dataset[k]||S.btn.dataset.overflowPriority||"1")-C}),v=d,E=0;for(let{btn:M,width:S}of b){let C=parseInt(M.dataset[k]||M.dataset.overflowPriority||"1"),P=M.getAttribute("aria-label")||"unknown";if(C===1){M.dataset.inOverflow="false",M.style.display="";continue}(m?C>1:v>l)?(M.dataset.inOverflow="true",M.style.display="none",v-=S,E++,this.player.options.debug&&console.log(` → Hiding button: ${P} (priority ${C}, ${m?"mobile":"desktop"})`)):(M.dataset.inOverflow="false",M.style.display="")}if(this.player.options.debug&&console.log("Overflow button exists?",!!this.overflowMenuButton),!this.overflowMenuButton){console.error("Overflow menu button not found!");return}E>0?(this.overflowMenuButton.style.display="",this.player.options.debug&&console.log("Showing overflow menu button -",E,"buttons moved")):(this.overflowMenuButton.style.display="none",this.player.options.debug&&console.log("Hiding overflow menu button - all buttons fit"))}else c.forEach(m=>{m.dataset.inOverflow="false",m.style.display=""}),this.overflowMenuButton.style.display="none"},t=new ResizeObserver(()=>{requestAnimationFrame(e)});t.observe(this.rightButtons),window.addEventListener("resize",()=>{requestAnimationFrame(e)}),this.player.on("fullscreenchange",()=>{setTimeout(()=>{requestAnimationFrame(e)},50)}),requestAnimationFrame(()=>{e(),setTimeout(()=>e(),100),setTimeout(()=>e(),300),setTimeout(()=>e(),500)}),document.fonts&&document.fonts.ready&&document.fonts.ready.then(()=>{requestAnimationFrame(e)}),this.overflowResizeObserver=t}show(){this.element.style.display=""}hide(){this.element.style.display="none"}destroy(){this.hideTimeout&&clearTimeout(this.hideTimeout),this.overflowResizeObserver&&this.overflowResizeObserver.disconnect(),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}};var H=class{constructor(e){this.player=e,this.element=null,this.tracks=[],this.currentTrack=null,this.currentCue=null,this.storage=new W("vidply"),this.loadSavedPreferences(),this.init()}loadSavedPreferences(){let e=this.storage.getCaptionPreferences();e&&(e.fontSize&&(this.player.options.captionsFontSize=e.fontSize),e.fontFamily&&(this.player.options.captionsFontFamily=e.fontFamily),e.color&&(this.player.options.captionsColor=e.color),e.backgroundColor&&(this.player.options.captionsBackgroundColor=e.backgroundColor),e.opacity!==void 0&&(this.player.options.captionsOpacity=e.opacity))}saveCaptionPreferences(){this.storage.saveCaptionPreferences({fontSize:this.player.options.captionsFontSize,fontFamily:this.player.options.captionsFontFamily,color:this.player.options.captionsColor,backgroundColor:this.player.options.captionsBackgroundColor,opacity:this.player.options.captionsOpacity})}init(){this.createElement(),this.loadTracks(),this.attachEvents(),this.player.options.captionsDefault&&this.tracks.length>0&&!this.currentTrack&&this.enable()}createElement(){this.element=h.createElement("div",{className:`${this.player.options.classPrefix}-captions`,attributes:{role:"region","aria-label":g.t("player.captions")}}),this.updateStyles(),(this.player.videoWrapper||this.player.container).appendChild(this.element)}loadTracks(){let e=this.player.element.textTracks,t=-1;for(let i=0;i<e.length;i++){let s=e[i];if(s.kind==="subtitles"||s.kind==="captions"){let a=this.player.findTrackElement(s),r=a&&a.hasAttribute("default");this.tracks.push({track:s,language:s.language,label:s.label,kind:s.kind,index:i,isDefault:r}),s.mode==="showing"||s.mode,s.mode="hidden",r&&(t=this.tracks.length-1)}}t>=0&&requestAnimationFrame(()=>{this.enable(t)})}attachEvents(){this.player.on("timeupdate",()=>{this.updateCaptions()}),this.player.on("captionschange",()=>{this.updateStyles()}),this.debouncedPositionCaptions=j(()=>{this.positionCaptionsOnMobile()},150),window.addEventListener("resize",this.debouncedPositionCaptions),this.player.on("enterfullscreen",()=>{_(()=>this.positionCaptionsOnMobile(),100)}),this.player.on("exitfullscreen",()=>{_(()=>this.positionCaptionsOnMobile(),100)})}enable(e=0){if(this.tracks.length===0)return;this.currentTrack&&this.currentTrack.track&&(this.cueChangeHandler&&this.currentTrack.track.removeEventListener("cuechange",this.cueChangeHandler),this.currentTrack.track.mode="hidden");let t=this.tracks[e];if(t&&t.track){t.track.mode="hidden",this.currentTrack=t,this.player.state.captionsEnabled=!0,t.language&&this.element.setAttribute("lang",t.language),this.cueChangeHandler&&t.track.removeEventListener("cuechange",this.cueChangeHandler),this.cueChangeHandler=()=>{this.updateCaptions()},t.track.addEventListener("cuechange",this.cueChangeHandler);let i=()=>{if(t.track.readyState<2){let s=()=>{t.track.removeEventListener("load",s),t.track.removeEventListener("error",s),requestAnimationFrame(()=>{this.currentTrack&&this.currentTrack.track===t.track&&this.updateCaptions()})};t.track.addEventListener("load",s,{once:!0}),t.track.addEventListener("error",s,{once:!0})}else requestAnimationFrame(()=>{this.currentTrack&&this.currentTrack.track===t.track&&this.updateCaptions()})};requestAnimationFrame(()=>{this.currentTrack&&this.currentTrack.track===t.track&&i()}),this.player.emit("captionsenabled",t)}}disable(){this.currentTrack&&(this.currentTrack.track.mode="hidden",this.currentTrack=null),this.element.style.display="none",this.element.innerHTML="",this.element.removeAttribute("lang"),this.currentCue=null,this.player.state.captionsEnabled=!1,this.player.emit("captionsdisabled")}updateCaptions(){if(!this.currentTrack||!this.currentTrack.track)return;if(this.currentTrack.track.mode==="disabled"&&(this.currentTrack.track.mode="hidden"),this.currentTrack.track.mode==="showing"&&(this.currentTrack.track.mode="hidden"),!this.currentTrack.track.activeCues){this.currentTrack.track.cues&&this.currentTrack.track.cues.length>0&&this.currentCue&&(this.element.innerHTML="",this.element.style.display="none",this.currentCue=null);return}let e=this.currentTrack.track.activeCues,t=this.player.element.tagName.toLowerCase()==="audio";if(e.length>0){let i=e[0];if(this.currentCue!==i){this.currentCue=i;let s=i.text;if(s=this.parseVTTFormatting(s),t){this.element.querySelectorAll(`.${this.player.options.classPrefix}-caption-cue`).forEach(u=>u.classList.remove(`${this.player.options.classPrefix}-caption-active`));let r=`cue-${i.startTime}-${i.endTime}`,c=this.element.querySelector(`[data-cue-id="${r}"]`);c||(c=document.createElement("div"),c.className=`${this.player.options.classPrefix}-caption-cue`,c.setAttribute("data-cue-id",r),c.innerHTML=h.sanitizeHTML(s),this.element.appendChild(c)),c.classList.add(`${this.player.options.classPrefix}-caption-active`),requestAnimationFrame(()=>{c&&c.scrollIntoView({behavior:"smooth",block:"center"})})}else this.element.innerHTML=h.sanitizeHTML(s);this.element.style.display="block",this.positionCaptionsOnMobile(),this.player.emit("captionchange",i)}}else this.currentCue&&(t||(this.element.innerHTML="",this.element.style.display="none"),this.currentCue=null)}positionCaptionsOnMobile(){if(!this.element||this.element.style.display==="none")return;let e=this.player.state?.fullscreen||!1,t=V();if(!t&&!e){this.element.style.bottom="";return}let i=this.player.controlBar?.element;i&&requestAnimationFrame(()=>{if(!this.element||this.element.style.display==="none")return;let s=i.getBoundingClientRect(),r=this.player.videoWrapper.getBoundingClientRect().bottom-s.top+16;this.element.style.bottom=`${r}px`,this.player.options.debug&&console.log("[VidPly] Caption position:",{mobile:t,isFullscreen:e,controlsHeight:s.height,bottomOffset:`${r}px`})})}parseVTTFormatting(e){return e=e.replace(/<c[^>]*>(.*?)<\/c>/g,'<span class="caption-class">$1</span>'),e=e.replace(/<b>(.*?)<\/b>/g,"<strong>$1</strong>"),e=e.replace(/<i>(.*?)<\/i>/g,"<em>$1</em>"),e=e.replace(/<u>(.*?)<\/u>/g,"<u>$1</u>"),e=e.replace(/<v\s+([^>]+)>(.*?)<\/v>/g,'<span class="caption-voice" data-voice="$1">$2</span>'),e}updateStyles(){if(!this.element)return;let e=this.player.options;this.element.style.fontSize=e.captionsFontSize,this.element.style.fontFamily=e.captionsFontFamily,this.element.style.color=e.captionsColor,this.element.style.backgroundColor=this.hexToRgba(e.captionsBackgroundColor,e.captionsOpacity)}hexToRgba(e,t){let i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return i?`rgba(${parseInt(i[1],16)}, ${parseInt(i[2],16)}, ${parseInt(i[3],16)}, ${t})`:e}setCaptionStyle(e,t){switch(e){case"fontSize":this.player.options.captionsFontSize=t;break;case"fontFamily":this.player.options.captionsFontFamily=t;break;case"color":this.player.options.captionsColor=t;break;case"backgroundColor":this.player.options.captionsBackgroundColor=t;break;case"opacity":this.player.options.captionsOpacity=t;break}this.updateStyles(),this.saveCaptionPreferences(),this.player.emit("captionschange")}getAvailableTracks(){return this.tracks.map((e,t)=>({index:t,language:e.language,label:e.label||e.language,kind:e.kind}))}switchTrack(e){e>=0&&e<this.tracks.length&&(this.disable(),this.enable(e))}destroy(){this.disable(),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}};var Y=class{constructor(e){this.player=e,this.shortcuts=e.options.keyboardShortcuts,this.init()}init(){this.attachEvents()}attachEvents(){this.player.container.addEventListener("keydown",e=>{this.handleKeydown(e)},!0),this.player.container.hasAttribute("tabindex")||this.player.container.setAttribute("tabindex","0")}handleKeydown(e){if(e.target.tagName==="INPUT"||e.target.tagName==="TEXTAREA"||e.target.tagName==="SELECT")return;let t=document.activeElement;if(t&&(t.closest('.vidply-menu, [role="menu"]')||t.closest(".vidply-playlist-item-button")))return;let i=e.key,s=!1;if(i==="Escape"&&this.player.state.fullscreen){this.player.exitFullscreen(),e.preventDefault(),e.stopPropagation();return}for(let[a,r]of Object.entries(this.shortcuts))if(r.includes(i)&&(s=this.executeAction(a,e),s)){e.preventDefault(),e.stopPropagation(),this.announceAction(a);break}!s&&this.player.options.debug&&console.log("[VidPly] Unhandled key:",e.key,"code:",e.code,"shiftKey:",e.shiftKey)}executeAction(e,t){switch(e){case"play-pause":return this.player.toggle(),!0;case"volume-up":return this.player.setVolume(Math.min(1,this.player.state.volume+.1)),!0;case"volume-down":return this.player.setVolume(Math.max(0,this.player.state.volume-.1)),!0;case"seek-forward":return this.player.seekForward(),!0;case"seek-backward":return this.player.seekBackward(),!0;case"mute":return this.player.toggleMute(),!0;case"fullscreen":return this.player.toggleFullscreen(),!0;case"captions":if(this.player.captionManager&&this.player.captionManager.tracks.length>1){let i=this.player.controlBar&&this.player.controlBar.controls.captions;i?this.player.controlBar.showCaptionsMenu(i):this.player.toggleCaptions()}else this.player.toggleCaptions();return!0;case"caption-style-menu":return this.player.controlBar&&this.player.controlBar.controls.captionStyle?(this.player.controlBar.showCaptionStyleMenu(this.player.controlBar.controls.captionStyle),!0):!1;case"speed-up":return this.player.setPlaybackSpeed(Math.min(2,this.player.state.playbackSpeed+.25)),!0;case"speed-down":return this.player.setPlaybackSpeed(Math.max(.25,this.player.state.playbackSpeed-.25)),!0;case"speed-menu":return this.player.controlBar&&this.player.controlBar.controls.speed?(this.player.controlBar.showSpeedMenu(this.player.controlBar.controls.speed),!0):!1;case"quality-menu":return this.player.controlBar&&this.player.controlBar.controls.quality?(this.player.controlBar.showQualityMenu(this.player.controlBar.controls.quality),!0):!1;case"chapters-menu":return this.player.controlBar&&this.player.controlBar.controls.chapters?(this.player.controlBar.showChaptersMenu(this.player.controlBar.controls.chapters),!0):!1;case"transcript-toggle":return this.player.transcriptManager?(this.player.transcriptManager.toggleTranscript(),!0):!1;default:return!1}}announceAction(e){if(!this.player.options.screenReaderAnnouncements)return;let t="";switch(e){case"play-pause":t=this.player.state.playing?"Playing":"Paused";break;case"volume-up":t=`Volume ${Math.round(this.player.state.volume*100)}%`;break;case"volume-down":t=`Volume ${Math.round(this.player.state.volume*100)}%`;break;case"mute":t=this.player.state.muted?"Muted":"Unmuted";break;case"fullscreen":t=this.player.state.fullscreen?"Fullscreen":"Exit fullscreen";break;case"captions":t=this.player.state.captionsEnabled?"Captions on":"Captions off";break;case"speed-up":case"speed-down":t=`Speed ${this.player.state.playbackSpeed}x`;break}t&&this.announce(t)}announce(e,t="polite"){let i=document.getElementById("vidply-announcer");i||(i=document.createElement("div"),i.id="vidply-announcer",i.className="vidply-sr-only",i.setAttribute("aria-live",t),i.setAttribute("aria-atomic","true"),i.style.cssText=`
|
|
6
|
+
import{a as re}from"./vidply.chunk-34RH2THY.min.js";import{a as h,b as g,c as x,d as T,e as ae,f as ie,g as ne,h as W,i as K,j as O,k as R,l as V,m as U,n as Q}from"./vidply.chunk-LGTJRPUL.min.js";var X=class{constructor(){this.events={}}on(e,t){return this.events[e]||(this.events[e]=[]),this.events[e].push(t),this}once(e,t){let i=(...s)=>{t(...s),this.off(e,i)};return this.on(e,i)}off(e,t){return this.events[e]?(t?this.events[e]=this.events[e].filter(i=>i!==t):delete this.events[e],this):this}emit(e,...t){return this.events[e]?(this.events[e].forEach(i=>{i(...t)}),this):this}removeAllListeners(){return this.events={},this}};function j(L,e=100){let t;return function(...s){let a=()=>{clearTimeout(t),L(...s)};clearTimeout(t),t=setTimeout(a,e)}}function N(L=768){return window.innerWidth<L}function _(L,e=100){let t=!1,i=()=>{t||(t=!0,L())};requestAnimationFrame(i),setTimeout(i,e)}async function J(L,e,t={}){if(!L||L.tagName!=="VIDEO")return null;let{restoreState:i=!0,quality:s=.9,maxWidth:a,maxHeight:r}=t,c=!L.paused,u=L.currentTime,o=L.muted;return i&&(L.muted=!0),new Promise(n=>{let l=()=>{try{let m=L.videoWidth||640,f=L.videoHeight||360;if(a&&m>a){let b=a/m;m=a,f=Math.round(f*b)}if(r&&f>r){let b=r/f;f=r,m=Math.round(m*b)}let v=document.createElement("canvas");v.width=m,v.height=f,v.getContext("2d").drawImage(L,0,0,m,f);let M=v.toDataURL("image/jpeg",s);i&&(L.currentTime=u,L.muted=o,c&&!L.paused&&L.play().catch(()=>{})),n(M)}catch{i&&(L.currentTime=u,L.muted=o,c&&!L.paused&&L.play().catch(()=>{})),n(null)}},d=()=>{L.removeEventListener("seeked",d),requestAnimationFrame(()=>{requestAnimationFrame(l)})};if(Math.abs(L.currentTime-e)<.1&&L.readyState>=2)l();else if(L.readyState>=1)L.addEventListener("seeked",d),L.currentTime=e;else{let m=()=>{L.removeEventListener("loadedmetadata",m),L.addEventListener("seeked",d),L.currentTime=e};L.addEventListener("loadedmetadata",m)}})}var Y=class{constructor(e){this.player=e,this.element=null,this.controls={},this.hideTimeout=null,this.isDraggingProgress=!1,this.isDraggingVolume=!1,this.openMenu=null,this.openMenuButton=null,this.init()}init(){this.createElement(),this.createControls(),this.attachEvents(),this.setupAutoHide(),this.setupOverflowDetection()}isTouchDevice(){return"ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0}positionMenu(e,t,i=!1){let s=N(),a=e.classList.contains(`${this.player.options.classPrefix}-overflow-menu-list`);if(this.player.state.fullscreen&&e.parentElement===this.player.container){let u=()=>{let o=t.getBoundingClientRect(),n=e.getBoundingClientRect(),l=this.player.container.getBoundingClientRect(),d=window.innerHeight,p=o.left+o.width/2-l.left,m=o.top-l.top,f=o.bottom-l.top,v=o.top-l.top,y=l.bottom-o.bottom;if(v>=n.height+20||v>y?(e.style.bottom=`${l.height-m+8}px`,e.style.top="auto",e.classList.remove("vidply-menu-below")):(e.style.top=`${f+8}px`,e.style.bottom="auto",e.classList.add("vidply-menu-below")),a){let M=o.right-l.left;e.style.right=`${l.width-M}px`,e.style.left="auto",e.style.transform="none"}else e.style.left=`${p}px`,e.style.right="auto",e.style.transform="translateX(-50%)"};i?u():requestAnimationFrame(u);return}if(s){let u=e.classList.contains(`${this.player.options.classPrefix}-volume-menu`),o=()=>{let n=t.parentElement;if(!n)return;let l=t.getBoundingClientRect(),d=n.getBoundingClientRect(),p=e.getBoundingClientRect(),m=window.innerWidth,f=window.innerHeight;if(u){let v=l.left+l.width/2-d.left;e.style.left=`${v}px`,e.style.right="auto",e.style.transform="translateX(-50%)";return}p.right>m&&(e.style.left="auto",e.style.right="10px",e.style.transform="none"),p.left<0&&(e.style.left="10px",e.style.right="auto",e.style.transform="none"),p.top<10&&(e.style.top="10px"),p.bottom>f-10&&(e.style.bottom="10px",e.style.top="auto")};i?o():requestAnimationFrame(o);return}let c=()=>{let u=t.getBoundingClientRect(),o=e.getBoundingClientRect(),n=window.innerWidth,l=window.innerHeight,d=t.parentElement;if(!d)return;let p=d.getBoundingClientRect(),m=u.left+u.width/2-p.left,f=u.bottom-p.top,v=u.top-p.top,y=u.top,M=l-u.bottom,b=v-o.height-8,w=null;y<o.height+20&&M>y?(b=null,w=p.bottom-p.top-f+8,e.classList.add("vidply-menu-below")):e.classList.remove("vidply-menu-below");let E="auto",S="auto",k="translateX(0)";if(a)E="auto",S=0,k="translateX(0)";else{E=m-o.width/2;let C=u.left+u.width/2-o.width/2;C<10?(E=0,k="translateX(0)"):C+o.width>n-10?(E="auto",S=0,k="translateX(0)"):(E=m,k="translateX(-50%)")}b!==null?(e.style.top=`${b}px`,e.style.bottom="auto"):w!==null&&(e.style.top="auto",e.style.bottom=`${w}px`),E!=="auto"?(e.style.left=`${E}px`,e.style.right="auto"):(e.style.left="auto",e.style.right=`${S}px`),e.style.transform=k};i?c():requestAnimationFrame(()=>{setTimeout(c,10)})}insertMenuIntoDOM(e,t){e.id||(e.id=`vidply-menu-${Math.random().toString(36).substr(2,9)}`),t.setAttribute("aria-controls",e.id),t.setAttribute("aria-haspopup","true"),this.player.state.fullscreen?(this.player.container.appendChild(e),e.dataset.triggerButton=t.getAttribute("aria-label")||"button"):t.insertAdjacentElement("afterend",e)}attachMenuCloseHandler(e,t,i=!1){this.openMenu&&this.openMenu!==e&&this.openMenuButton&&(this.openMenuButton._vidplyBlurHandler&&(this.openMenuButton.removeEventListener("blur",this.openMenuButton._vidplyBlurHandler),delete this.openMenuButton._vidplyBlurHandler),this.openMenuButton._vidplyMousedownHandler&&(this.openMenuButton.removeEventListener("mousedown",this.openMenuButton._vidplyMousedownHandler),delete this.openMenuButton._vidplyMousedownHandler),this.openMenu&&document.contains(this.openMenu)?this.openMenu.remove():this.openMenu&&this.openMenu.parentNode&&this.openMenu.parentNode.removeChild(this.openMenu),this.openMenuButton&&this.openMenuButton.setAttribute("aria-expanded","false")),this.openMenu=e,this.openMenuButton=t,this.positionMenu(e,t),t&&t.setAttribute("aria-expanded","true");let s=!1,a=!0,r=()=>{s=!0,a=!1,setTimeout(()=>{s=!1,a=!0},200)};t.addEventListener("mousedown",r),t._vidplyMousedownHandler=r;let c=l=>{if(!a||s||this.openMenu!==e)return;let d=l.relatedTarget;requestAnimationFrame(()=>{setTimeout(()=>{if(!a||this.openMenu!==e)return;let p=document.activeElement;if(e.contains(p))return;let m=this.player.signLanguageWrapper,f=this.player.transcriptManager?.transcriptWindow;if(m&&m.contains(p)||f&&f.contains(p))return;let v=this.element.querySelectorAll("button"),y=Array.from(v).includes(p)&&p!==t,M=d&&Array.from(v).includes(d)&&d!==t;if(y||M){if(this.openMenu!==e)return;e&&document.contains(e)?e.remove():e&&e.parentNode&&e.parentNode.removeChild(e),t&&t.setAttribute("aria-expanded","false"),this.openMenu===e&&(this.openMenu=null,this.openMenuButton=null),t.removeEventListener("blur",c),t.removeEventListener("mousedown",r),delete t._vidplyBlurHandler,delete t._vidplyMousedownHandler}},10)})};t.addEventListener("blur",c),t._vidplyBlurHandler=c;let u=()=>{this.closeMenuAndReturnFocus(e,t)},o=null,n=null;setTimeout(()=>{o=l=>{i&&e.contains(l.target)||this.openMenu===e&&!e.contains(l.target)&&!t.contains(l.target)&&(u(),o&&document.removeEventListener("click",o),n&&document.removeEventListener("keydown",n))},n=l=>{l.key==="Escape"&&this.openMenu===e&&(l.preventDefault(),l.stopPropagation(),this.closeMenuAndReturnFocus(e,t,!0),o&&document.removeEventListener("click",o),n&&document.removeEventListener("keydown",n))},document.addEventListener("click",o),document.addEventListener("keydown",n)},100)}closeMenuAndReturnFocus(e,t,i=!0){e&&(document.contains(e)?e.remove():e.parentNode&&e.parentNode.removeChild(e)),t&&(t.setAttribute("aria-expanded","false"),e&&e.id&&t.removeAttribute("aria-controls"),i&&requestAnimationFrame(()=>{setTimeout(()=>{t&&document.contains(t)&&t.focus({preventScroll:!0})},0)})),this.openMenu===e&&(this.openMenu=null,this.openMenuButton=null)}closeOpenMenu(){this.openMenu&&this.openMenuButton&&(this.openMenu&&document.contains(this.openMenu)?this.openMenu.remove():this.openMenu&&this.openMenu.parentNode&&this.openMenu.parentNode.removeChild(this.openMenu),this.openMenuButton&&this.openMenuButton.setAttribute("aria-expanded","false"),this.openMenu=null,this.openMenuButton=null)}attachMenuKeyboardNavigation(e,t){let i=Array.from(e.querySelectorAll(`.${this.player.options.classPrefix}-menu-item`));if(i.length===0)return;let s=a=>{let r=i.indexOf(document.activeElement);switch(a.key){case"ArrowDown":a.preventDefault(),a.stopPropagation();let c=(r+1)%i.length;i[c].focus({preventScroll:!1}),i[c].scrollIntoView({behavior:"smooth",block:"nearest"});break;case"ArrowUp":a.preventDefault(),a.stopPropagation();let u=(r-1+i.length)%i.length;i[u].focus({preventScroll:!1}),i[u].scrollIntoView({behavior:"smooth",block:"nearest"});break;case"ArrowLeft":case"ArrowRight":a.preventDefault(),a.stopPropagation();break;case"Home":a.preventDefault(),a.stopPropagation(),i[0].focus({preventScroll:!1}),i[0].scrollIntoView({behavior:"smooth",block:"nearest"});break;case"End":a.preventDefault(),a.stopPropagation(),i[i.length-1].focus({preventScroll:!1}),i[i.length-1].scrollIntoView({behavior:"smooth",block:"nearest"});break;case"Enter":case" ":a.preventDefault(),a.stopPropagation(),document.activeElement&&i.includes(document.activeElement)&&(document.activeElement.click(),ie(t,{delay:0}));break;case"Escape":a.preventDefault(),a.stopPropagation(),this.closeMenuAndReturnFocus(e,t,!0);break}};e.addEventListener("keydown",s)}createElement(){this.element=h.createElement("div",{className:`${this.player.options.classPrefix}-controls`,attributes:{role:"region","aria-label":g.t("player.label")+" controls"}})}createControls(){let e=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-time-wrapper`});this.player.options.progressBar&&(this.createProgressBar(),e.appendChild(this.controls.progress)),(this.player.options.currentTime||this.player.options.duration)&&e.appendChild(this.createTimeDisplay()),this.element.appendChild(e);let t=h.createElement("div",{className:`${this.player.options.classPrefix}-controls-buttons`}),i=h.createElement("div",{className:`${this.player.options.classPrefix}-controls-left`});this.player.playlistManager&&i.appendChild(this.createPreviousButton()),this.player.options.playPauseButton&&i.appendChild(this.createPlayPauseButton()),i.appendChild(this.createRestartButton()),this.player.playlistManager&&i.appendChild(this.createNextButton()),this.player.playlistManager||i.appendChild(this.createRewindButton()),this.player.playlistManager||i.appendChild(this.createForwardButton()),this.player.options.volumeControl&&(this.isTouchDevice()?i.appendChild(this.createMuteButton()):i.appendChild(this.createVolumeControl())),this.rightButtons=h.createElement("div",{className:`${this.player.options.classPrefix}-controls-right`});let s=this.hasChapterTracks(),a=this.hasCaptionTracks(),r=this.hasQualityLevels(),c=this.hasAudioDescription();if(this.player.options.chaptersButton&&s){let n=this.createChaptersButton();n.dataset.overflowPriority="3",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.captionsButton&&a){let n=this.createCaptionsButton();n.dataset.overflowPriority="1",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.captionStyleButton&&a){let n=this.createCaptionStyleButton();n.dataset.overflowPriority="3",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.speedButton){let n=this.createSpeedButton();n.dataset.overflowPriority="1",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.audioDescriptionButton&&c){let n=this.createAudioDescriptionButton();n.dataset.overflowPriority="2",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.transcriptButton&&a){let n=this.createTranscriptButton();n.dataset.overflowPriority="3",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.playlistManager&&this.player.options.playlistToggleButton!==!1){let n=this.createPlaylistToggleButton();n.dataset.overflowPriority="2",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}let u=this.hasSignLanguage();if(this.player.options.signLanguageButton&&u){let n=this.createSignLanguageButton();n.dataset.overflowPriority="3",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.qualityButton&&r){let n=this.createQualityButton();n.dataset.overflowPriority="2",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}if(this.player.options.pipButton&&"pictureInPictureEnabled"in document){let n=this.createPipButton();n.dataset.overflowPriority="3",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}let o=this.player.element.tagName.toLowerCase()==="audio";if(this.player.options.fullscreenButton&&!o){let n=this.createFullscreenButton();n.dataset.overflowPriority="1",n.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(n)}this.overflowMenuButton=this.createOverflowMenuButton(),this.overflowMenuButton.style.display="none",this.rightButtons.appendChild(this.overflowMenuButton),t.appendChild(i),t.appendChild(this.rightButtons),this.element.appendChild(t),this.ensureButtonTooltips(t)}ensureButtonTooltips(e){e.querySelectorAll("button").forEach(i=>{if(i.querySelector(`.${this.player.options.classPrefix}-tooltip`)||i.querySelector(`.${this.player.options.classPrefix}-button-text`)||i.getAttribute("role")==="menuitem"||i.classList.contains(`${this.player.options.classPrefix}-settings-item`)||i.classList.contains(`${this.player.options.classPrefix}-menu-item`)||i.classList.contains(`${this.player.options.classPrefix}-transcript-settings-item`)||i.classList.contains(`${this.player.options.classPrefix}-sign-language-settings-item`)||i.classList.contains(`${this.player.options.classPrefix}-popup-settings-item`))return;let s=i.getAttribute("aria-label");s&&h.attachTooltip(i,s,this.player.options.classPrefix)})}hasChapterTracks(){let e=this.player.element.textTracks;for(let t=0;t<e.length;t++)if(e[t].kind==="chapters")return!0;return!1}hasCaptionTracks(){let e=this.player.element.textTracks;for(let t=0;t<e.length;t++)if(e[t].kind==="captions"||e[t].kind==="subtitles")return!0;return!1}hasQualityLevels(){if(this.player.renderer&&this.player.renderer.getQualities){let e=this.player.renderer.getQualities();return e&&e.length>1}return!1}hasAudioDescription(){return this.player.audioDescriptionSrc&&this.player.audioDescriptionSrc.length>0?!0:Array.from(this.player.element.textTracks||[]).some(t=>t.kind==="descriptions")}hasSignLanguage(){let e=this.player.signLanguageSrc&&this.player.signLanguageSrc.length>0,t=this.player.signLanguageSources&&Object.keys(this.player.signLanguageSources).length>0;return e||t}createProgressBar(){let e=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-container`,attributes:{role:"slider","aria-label":g.t("player.progress"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":"0",tabindex:"0"}});this.controls.buffered=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-buffered`}),this.controls.played=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-played`}),this.controls.progressHandle=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-handle`}),this.controls.progressTooltip=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-tooltip`}),this.controls.progressPreview=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-preview`,attributes:{"aria-hidden":"true"}}),this.controls.progressTooltip.appendChild(this.controls.progressPreview),this.controls.progressTooltipTime=h.createElement("div",{className:`${this.player.options.classPrefix}-progress-tooltip-time`}),this.controls.progressTooltip.appendChild(this.controls.progressTooltipTime),e.appendChild(this.controls.buffered),e.appendChild(this.controls.played),this.controls.played.appendChild(this.controls.progressHandle),e.appendChild(this.controls.progressTooltip),this.controls.progress=e,this.initPreviewThumbnail(),this.setupProgressBarEvents()}initPreviewThumbnail(){if(this.previewThumbnailCache=new Map,this.previewVideo=null,this.currentPreviewTime=null,this.previewThumbnailTimeout=null,this.previewSupported=!1,!(this.player.element&&this.player.element.tagName==="VIDEO"))return;let t=this.player.renderer,i=t&&t.media&&t.media.tagName==="VIDEO",s=i&&t.media===this.player.element&&!t.hls&&typeof t.seek=="function";if(this.previewSupported=s&&i,this.previewSupported){this.previewVideo=document.createElement("video"),this.previewVideo.muted=!0,this.previewVideo.preload="auto",this.previewVideo.playsInline=!0,this.previewVideo.style.position="absolute",this.previewVideo.style.visibility="hidden",this.previewVideo.style.width="1px",this.previewVideo.style.height="1px",this.previewVideo.style.top="-9999px";let a=t.media||this.player.element,r=null;if(a.src)r=a.src;else{let c=a.querySelector("source");c&&(r=c.src)}if(!r){this.player.log("No video source found for preview","warn"),this.previewSupported=!1;return}a.crossOrigin&&(this.previewVideo.crossOrigin=a.crossOrigin),this.previewVideo.addEventListener("error",c=>{this.player.log("Preview video failed to load:",c,"warn"),this.previewSupported=!1}),this.previewVideo.addEventListener("loadedmetadata",()=>{this.previewVideoReady=!0},{once:!0}),this.player.container&&this.player.container.appendChild(this.previewVideo),this.previewVideo.src=r,this.previewVideoReady=!1}}async generatePreviewThumbnail(e){if(!this.previewSupported||!this.previewVideo)return null;this.previewVideoReady||(this.previewVideo.readyState<2?await new Promise((s,a)=>{let r=setTimeout(()=>{a(new Error("Preview video data load timeout"))},1e4),c=()=>{clearTimeout(r),this.previewVideo.removeEventListener("loadeddata",u),this.previewVideo.removeEventListener("canplay",u),this.previewVideo.removeEventListener("error",o)},u=()=>{this.previewVideo.readyState>=2&&(c(),this.previewVideoReady=!0,s())},o=()=>{c(),a(new Error("Preview video failed to load"))};this.previewVideo.readyState>=1&&this.previewVideo.addEventListener("loadeddata",u),this.previewVideo.addEventListener("canplay",u),this.previewVideo.addEventListener("error",o),this.previewVideo.readyState>=2&&u()}).catch(()=>(this.previewSupported=!1,null)):this.previewVideoReady=!0);let t=Math.floor(e);if(this.previewThumbnailCache.has(t))return this.previewThumbnailCache.get(t);let i=await J(this.previewVideo,e,{restoreState:!1,quality:.8,maxWidth:160,maxHeight:90});if(i){if(this.previewThumbnailCache.size>=20){let s=this.previewThumbnailCache.keys().next().value;this.previewThumbnailCache.delete(s)}this.previewThumbnailCache.set(t,i)}return i}async updatePreviewThumbnail(e){!this.previewSupported||!this.controls.progressPreview||(this.previewThumbnailTimeout&&clearTimeout(this.previewThumbnailTimeout),this.previewThumbnailTimeout=setTimeout(async()=>{try{let t=await this.generatePreviewThumbnail(e);t&&this.controls.progressPreview?(this.controls.progressPreview.style.backgroundImage=`url("${t}")`,this.controls.progressPreview.style.display="block",this.controls.progressPreview.style.backgroundRepeat="no-repeat",this.controls.progressPreview.style.backgroundPosition="center"):this.controls.progressPreview&&(this.controls.progressPreview.style.display="none"),this.currentPreviewTime=e}catch(t){this.player.log("Preview thumbnail update failed:",t,"warn"),this.controls.progressPreview&&(this.controls.progressPreview.style.display="none")}},100))}setupProgressBarEvents(){let e=this.controls.progress,t=i=>{let s=e.getBoundingClientRect(),a=s.width>0?Math.max(0,Math.min(1,(i-s.left)/s.width)):0,r=this.player.state.duration||0,c=a*r;return{percent:a,time:c}};e.addEventListener("mousedown",i=>{this.isDraggingProgress=!0;let{time:s}=t(i.clientX);this.player.seek(s)}),document.addEventListener("mousemove",i=>{if(this.isDraggingProgress){let{time:s}=t(i.clientX);this.player.seek(s)}}),document.addEventListener("mouseup",()=>{this.isDraggingProgress=!1}),e.addEventListener("mousemove",i=>{if(!this.isDraggingProgress){let{time:s}=t(i.clientX),a=e.getBoundingClientRect(),r=i.clientX-a.left;this.controls.progressTooltipTime.textContent=x.formatTime(s),this.controls.progressTooltip.style.left=`${r}px`,this.controls.progressTooltip.style.display="block",this.previewSupported&&this.updatePreviewThumbnail(s)}}),e.addEventListener("mouseleave",()=>{this.controls.progressTooltip.style.display="none",this.previewThumbnailTimeout&&clearTimeout(this.previewThumbnailTimeout)}),e.addEventListener("keydown",i=>{i.key==="ArrowLeft"?(i.preventDefault(),this.player.seekBackward(5)):i.key==="ArrowRight"&&(i.preventDefault(),this.player.seekForward(5))}),e.addEventListener("touchstart",i=>{this.isDraggingProgress=!0;let s=i.touches[0],{time:a}=t(s.clientX);this.player.seek(a)}),e.addEventListener("touchmove",i=>{if(this.isDraggingProgress){i.preventDefault();let s=i.touches[0],{time:a}=t(s.clientX);this.player.seek(a)}}),e.addEventListener("touchend",()=>{this.isDraggingProgress=!1})}createPlayPauseButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-play-pause`,attributes:{type:"button","aria-label":g.t("player.play")}});return e.appendChild(T("play")),e.addEventListener("click",()=>{this.player.toggle()}),this.controls.playPause=e,e}createRestartButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-restart`,attributes:{type:"button","aria-label":g.t("player.restart")}});return e.appendChild(T("restart")),e.addEventListener("click",()=>{this.player.seek(0),this.player.play()}),e}createPreviousButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-previous`,attributes:{type:"button","aria-label":g.t("player.previous")}});e.appendChild(T("skipPrevious")),e.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.previous()});let t=()=>{this.player.playlistManager&&(e.disabled=!this.player.playlistManager.hasPrevious()&&!this.player.playlistManager.options.loop)};return this.player.on("playlisttrackchange",t),t(),this.controls.previous=e,e}createNextButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-next`,attributes:{type:"button","aria-label":g.t("player.next")}});e.appendChild(T("skipNext")),e.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.next()});let t=()=>{this.player.playlistManager&&(e.disabled=!this.player.playlistManager.hasNext()&&!this.player.playlistManager.options.loop)};return this.player.on("playlisttrackchange",t),t(),this.controls.next=e,e}createPlaylistToggleButton(){let e=this.player.playlistManager?`${this.player.playlistManager.uniqueId}-panel`:"vidply-playlist-panel",t=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-playlist-toggle`,attributes:{type:"button","aria-label":g.t("player.playlist"),"aria-expanded":"false","aria-pressed":"false","aria-controls":e}});return t.appendChild(T("playlist")),t.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.togglePanel()}),this.controls.playlistToggle=t,t}createRewindButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-rewind`,attributes:{type:"button","aria-label":g.t("player.rewindSeconds",{seconds:15})}});return e.appendChild(T("rewind")),e.addEventListener("click",()=>{this.player.seekBackward(15)}),e}createForwardButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-forward`,attributes:{type:"button","aria-label":g.t("player.forwardSeconds",{seconds:15})}});return e.appendChild(T("forward")),e.addEventListener("click",()=>{this.player.seekForward(15)}),e}createMuteButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":g.t("player.mute")}});return e.appendChild(T("volumeHigh")),e.addEventListener("click",()=>{this.player.toggleMute()}),this.controls.mute=e,e}createVolumeControl(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":g.t("player.volume"),"aria-expanded":"false"}});return e.appendChild(T("volumeHigh")),e.addEventListener("contextmenu",t=>{t.preventDefault(),this.player.toggleMute()}),e.addEventListener("click",()=>{this.showVolumeSlider(e)}),this.controls.mute=e,e}showVolumeSlider(e){let t=document.querySelector(`.${this.player.options.classPrefix}-volume-menu`);if(t){t.remove(),e.setAttribute("aria-expanded","false");return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-volume-menu ${this.player.options.classPrefix}-menu`}),s=h.createElement("div",{className:`${this.player.options.classPrefix}-volume-slider`,attributes:{role:"slider","aria-label":g.t("player.volume"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":String(Math.round(this.player.state.volume*100)),tabindex:"0"}}),a=h.createElement("div",{className:`${this.player.options.classPrefix}-volume-track`}),r=h.createElement("div",{className:`${this.player.options.classPrefix}-volume-fill`}),c=this.player.state.volume*100;r.style.height=`${c}%`;let u=h.createElement("div",{className:`${this.player.options.classPrefix}-volume-handle`});a.appendChild(r),r.appendChild(u),s.appendChild(a),i.appendChild(s);let o=n=>{let l=a.getBoundingClientRect(),d=Math.max(0,Math.min(1,1-(n-l.top)/l.height));this.player.setVolume(d)};s.addEventListener("mousedown",n=>{n.stopPropagation(),n.preventDefault(),this.isDraggingVolume=!0,o(n.clientY)}),document.addEventListener("mousemove",n=>{this.isDraggingVolume&&o(n.clientY)}),document.addEventListener("mouseup",()=>{this.isDraggingVolume=!1}),s.addEventListener("touchstart",n=>{n.stopPropagation(),n.preventDefault(),this.isDraggingVolume=!0;let l=n.touches[0];o(l.clientY)},{passive:!1}),s.addEventListener("touchmove",n=>{if(this.isDraggingVolume){n.preventDefault();let l=n.touches[0];o(l.clientY)}},{passive:!1}),s.addEventListener("touchend",n=>{n.stopPropagation(),n.preventDefault(),this.isDraggingVolume=!1},{passive:!1}),s.addEventListener("touchcancel",()=>{this.isDraggingVolume=!1}),s.addEventListener("keydown",n=>{n.key==="ArrowUp"?(n.preventDefault(),this.player.setVolume(Math.min(1,this.player.state.volume+.1))):n.key==="ArrowDown"?(n.preventDefault(),this.player.setVolume(Math.max(0,this.player.state.volume-.1))):n.key==="Escape"&&(n.preventDefault(),n.stopPropagation(),this.closeMenuAndReturnFocus(i,e,!0))}),i.addEventListener("click",n=>{n.stopPropagation()}),i.addEventListener("touchstart",n=>{n.stopPropagation()}),i.addEventListener("touchmove",n=>{n.stopPropagation()}),i.addEventListener("touchend",n=>{n.stopPropagation()}),i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.controls.volumeSlider=s,this.controls.volumeFill=r,ie(s,{delay:50}),this.attachMenuCloseHandler(i,e,!0)}createTimeDisplay(){let e=h.createElement("div",{className:`${this.player.options.classPrefix}-time`,attributes:{role:"group","aria-label":g.t("time.display")}});this.controls.currentTimeDisplay=h.createElement("span",{className:`${this.player.options.classPrefix}-current-time`});let t=h.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}}),i=h.createElement("span",{className:"vidply-sr-only",textContent:g.t("time.seconds",{count:0})});this.controls.currentTimeDisplay.appendChild(t),this.controls.currentTimeDisplay.appendChild(i),this.controls.currentTimeVisual=t,this.controls.currentTimeAccessible=i;let s=h.createElement("span",{textContent:" / ",attributes:{"aria-hidden":"true"}});this.controls.durationDisplay=h.createElement("span",{className:`${this.player.options.classPrefix}-duration`});let a=h.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}}),r=h.createElement("span",{className:"vidply-sr-only",textContent:g.t("time.durationPrefix")+g.t("time.seconds",{count:0})});return this.controls.durationDisplay.appendChild(a),this.controls.durationDisplay.appendChild(r),this.controls.durationVisual=a,this.controls.durationAccessible=r,e.appendChild(this.controls.currentTimeDisplay),e.appendChild(s),e.appendChild(this.controls.durationDisplay),e}createChaptersButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-chapters`,attributes:{type:"button","aria-label":g.t("player.chapters"),"aria-expanded":"false"}});return e.appendChild(T("chapters")),e.addEventListener("click",()=>{this.showChaptersMenu(e)}),this.controls.chapters=e,e}showChaptersMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-chapters-menu`);if(t){t.remove(),e.setAttribute("aria-expanded","false"),this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null);return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-chapters-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":g.t("player.chapters")}}),s=Array.from(this.player.element.textTracks).filter(a=>a.kind==="chapters");if(s.length===0){let a=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.noChapters"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});i.appendChild(a)}else{let a=s[0];if(a.mode==="disabled"&&(a.mode="hidden"),!a.cues||a.cues.length===0){let r=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.loadingChapters"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});i.appendChild(r);let c=()=>{i.remove(),this.showChaptersMenu(e)};a.addEventListener("load",c,{once:!0}),setTimeout(()=>{a.cues&&a.cues.length>0&&document.contains(i)&&(i.remove(),this.showChaptersMenu(e))},500)}else{let r=a.cues;for(let c=0;c<r.length;c++){let u=r[c],o=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),n=h.createElement("span",{className:`${this.player.options.classPrefix}-chapter-time`,textContent:x.formatTime(u.startTime),attributes:{"aria-label":x.formatDuration(u.startTime)}}),l=h.createElement("span",{className:`${this.player.options.classPrefix}-chapter-title`,textContent:u.text});o.appendChild(n),o.appendChild(document.createTextNode(" ")),o.appendChild(l),o.addEventListener("click",()=>{this.player.seek(u.startTime),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(o)}this.attachMenuKeyboardNavigation(i,e),setTimeout(()=>{let c=i.querySelector(`.${this.player.options.classPrefix}-menu-item`);c&&c.focus({preventScroll:!0})},0)}}i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuCloseHandler(i,e)}createQualityButton(){let e=g.t("player.quality"),t=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-quality`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}});t.appendChild(T("hd")),h.attachTooltip(t,e,this.player.options.classPrefix);let i=h.createElement("span",{className:`${this.player.options.classPrefix}-quality-text`,textContent:""});return t.appendChild(i),t.addEventListener("click",()=>{this.showQualityMenu(t)}),this.controls.quality=t,this.controls.qualityText=i,setTimeout(()=>this.updateQualityIndicator(),500),t}showQualityMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-quality-menu`);if(t){t.remove(),e.setAttribute("aria-expanded","false"),this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null);return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-quality-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":g.t("player.quality")}});if(this.player.renderer&&this.player.renderer.getQualities){let s=this.player.renderer.getQualities(),a=this.player.renderer.getCurrentQuality?this.player.renderer.getCurrentQuality():-1,r=this.player.renderer.hls!==void 0;if(s.length===0){let c=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.autoQuality"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});i.appendChild(c)}else{let c=null;if(r){let u=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.auto"),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});this.player.renderer.hls&&this.player.renderer.hls.currentLevel===-1&&(u.classList.add(`${this.player.options.classPrefix}-menu-item-active`),u.appendChild(T("check")),c=u),u.addEventListener("click",()=>{this.player.renderer.switchQuality&&this.player.renderer.switchQuality(-1),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(u)}s.forEach(u=>{let o=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:u.name||`${u.height}p`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}});u.index===a&&(o.classList.add(`${this.player.options.classPrefix}-menu-item-active`),o.appendChild(T("check")),c=o),o.addEventListener("click",()=>{this.player.renderer.switchQuality&&this.player.renderer.switchQuality(u.index),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(o)}),this.attachMenuKeyboardNavigation(i,e),setTimeout(()=>{let u=c||i.querySelector(`.${this.player.options.classPrefix}-menu-item`);u&&u.focus({preventScroll:!0})},0)}}else{let s=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.noQuality"),style:{opacity:"0.5",cursor:"default"}});i.appendChild(s)}i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuCloseHandler(i,e)}createCaptionStyleButton(){let e=g.t("player.captionStyling"),t=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-caption-style`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}}),i=h.createElement("span",{textContent:"Aa",style:{fontSize:"14px",fontWeight:"bold"}});return t.appendChild(i),h.attachTooltip(t,e,this.player.options.classPrefix),t.addEventListener("click",()=>{this.showCaptionStyleMenu(t)}),this.controls.captionStyle=t,t}showCaptionStyleMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-caption-style-menu`);if(t){t.remove(),e.setAttribute("aria-expanded","false"),this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null);return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-caption-style-menu ${this.player.options.classPrefix}-menu ${this.player.options.classPrefix}-settings-menu`,attributes:{role:"menu","aria-label":g.t("player.captionStyling")}});if(i.addEventListener("click",o=>{o.stopPropagation()}),!this.player.captionManager||this.player.captionManager.tracks.length===0){let o=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.noCaptions"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default",padding:"12px 16px"}});i.appendChild(o),i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuCloseHandler(i,e,!0);return}let s=this.createStyleControl(g.t("styleLabels.fontSize"),"captionsFontSize",[{label:g.t("fontSizes.small"),value:"87.5%"},{label:g.t("fontSizes.normal"),value:"100%"},{label:g.t("fontSizes.large"),value:"125%"},{label:g.t("fontSizes.xlarge"),value:"150%"}]);i.appendChild(s);let a=this.createStyleControl(g.t("styleLabels.font"),"captionsFontFamily",[{label:g.t("fontFamilies.sansSerif"),value:"sans-serif"},{label:g.t("fontFamilies.serif"),value:"serif"},{label:g.t("fontFamilies.monospace"),value:"monospace"}]);i.appendChild(a);let r=this.createColorControl(g.t("styleLabels.textColor"),"captionsColor");i.appendChild(r);let c=this.createColorControl(g.t("styleLabels.background"),"captionsBackgroundColor");i.appendChild(c);let u=this.createOpacityControl(g.t("styleLabels.opacity"),"captionsOpacity");i.appendChild(u),i.style.minWidth="220px",i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuCloseHandler(i,e,!0),ne(i,`.${this.player.options.classPrefix}-style-select`)}createStyleControl(e,t,i){let s=h.createElement("div",{className:`${this.player.options.classPrefix}-style-group`}),a=`${this.player.options.classPrefix}-${t}-${Date.now()}`,r=h.createElement("label",{textContent:e,attributes:{for:a},style:{display:"block",fontSize:"12px",marginBottom:"4px",color:"rgba(255,255,255,0.7)"}});s.appendChild(r);let c=h.createElement("select",{className:`${this.player.options.classPrefix}-style-select`,attributes:{id:a},style:{width:"100%",padding:"6px",background:"var(--vidply-white)",border:"1px solid var(--vidply-white-10)",borderRadius:"4px",color:"var(--vidply-black)",fontSize:"13px"}}),u=this.player.options[t];return i.forEach(o=>{let n=h.createElement("option",{textContent:o.label,attributes:{value:o.value}});o.value===u&&(n.selected=!0),c.appendChild(n)}),c.addEventListener("mousedown",o=>{o.stopPropagation()}),c.addEventListener("click",o=>{o.stopPropagation()}),c.addEventListener("change",o=>{o.stopPropagation(),this.player.options[t]=o.target.value,this.player.captionManager&&this.player.captionManager.setCaptionStyle(t.replace("captions","").charAt(0).toLowerCase()+t.replace("captions","").slice(1),o.target.value)}),s.appendChild(c),s}createColorControl(e,t){let i=h.createElement("div",{className:`${this.player.options.classPrefix}-style-group`}),s=`${this.player.options.classPrefix}-${t}-${Date.now()}`,a=h.createElement("label",{textContent:e,attributes:{for:s},style:{display:"block",fontSize:"12px",marginBottom:"4px",color:"rgba(255,255,255,0.7)"}});i.appendChild(a);let r=h.createElement("input",{attributes:{id:s,type:"color",value:this.player.options[t]},style:{width:"100%",height:"32px",padding:"2px",background:"rgba(255,255,255,0.1)",border:"1px solid rgba(255,255,255,0.2)",borderRadius:"4px",cursor:"pointer"}});return r.addEventListener("mousedown",c=>{c.stopPropagation()}),r.addEventListener("click",c=>{c.stopPropagation()}),r.addEventListener("change",c=>{c.stopPropagation(),this.player.options[t]=c.target.value,this.player.captionManager&&this.player.captionManager.setCaptionStyle(t.replace("captions","").charAt(0).toLowerCase()+t.replace("captions","").slice(1),c.target.value)}),i.appendChild(r),i}createOpacityControl(e,t){let i=h.createElement("div",{className:`${this.player.options.classPrefix}-style-group`}),s=`${this.player.options.classPrefix}-${t}-${Date.now()}`,a=h.createElement("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"4px"}}),r=h.createElement("label",{textContent:e,attributes:{for:s},style:{fontSize:"12px",color:"rgba(255,255,255,0.7)"}}),c=h.createElement("span",{textContent:Math.round(this.player.options[t]*100)+"%",style:{fontSize:"12px",color:"rgba(255,255,255,0.7)"}});a.appendChild(r),a.appendChild(c),i.appendChild(a);let u=h.createElement("input",{attributes:{id:s,type:"range",min:"0",max:"1",step:"0.1",value:String(this.player.options[t])},style:{width:"100%",cursor:"pointer"}});return u.addEventListener("mousedown",o=>{o.stopPropagation()}),u.addEventListener("click",o=>{o.stopPropagation()}),u.addEventListener("input",o=>{o.stopPropagation();let n=parseFloat(o.target.value);c.textContent=Math.round(n*100)+"%",this.player.options[t]=n,this.player.captionManager&&this.player.captionManager.setCaptionStyle(t.replace("captions","").charAt(0).toLowerCase()+t.replace("captions","").slice(1),n)}),i.appendChild(u),i}createSpeedButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-speed`,attributes:{type:"button","aria-label":g.t("player.speed"),"aria-expanded":"false"}});e.appendChild(T("speed"));let t=h.createElement("span",{className:`${this.player.options.classPrefix}-speed-text`,textContent:"1x"});return e.appendChild(t),e.addEventListener("click",()=>{this.showSpeedMenu(e)}),this.controls.speed=e,this.controls.speedText=t,e}formatSpeedLabel(e){return e===1?g.t("speeds.normal"):`${e.toLocaleString(g.getLanguage(),{minimumFractionDigits:0,maximumFractionDigits:2})}×`}showSpeedMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-speed-menu`);if(t){t.remove(),e.setAttribute("aria-expanded","false"),this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null);return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-speed-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu"}}),s=[.25,.5,.75,1,1.25,1.5,1.75,2],a=null;s.forEach(r=>{let c=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:this.formatSpeedLabel(r),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});r===this.player.state.playbackSpeed&&(c.classList.add(`${this.player.options.classPrefix}-menu-item-active`),c.appendChild(T("check")),a=c),c.addEventListener("click",()=>{this.player.setPlaybackSpeed(r),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(c)}),i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuKeyboardNavigation(i,e),this.attachMenuCloseHandler(i,e),setTimeout(()=>{let r=a||i.querySelector(`.${this.player.options.classPrefix}-menu-item`);r&&r.focus({preventScroll:!0})},0)}createCaptionsButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-captions-button`,attributes:{type:"button","aria-label":g.t("player.captions"),"aria-expanded":"false"}});return e.appendChild(T("captionsOff")),e.addEventListener("click",()=>{this.showCaptionsMenu(e)}),this.controls.captions=e,e}showCaptionsMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-captions-menu`);if(t){t.remove(),e.setAttribute("aria-expanded","false"),this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null);return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-captions-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":g.t("captions.select")}});if(!this.player.captionManager||this.player.captionManager.tracks.length===0){let c=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.noCaptions"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});i.appendChild(c),this.insertMenuIntoDOM(i,e),this.attachMenuCloseHandler(i,e);return}let s=null,a=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("captions.off"),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});this.player.state.captionsEnabled||(a.classList.add(`${this.player.options.classPrefix}-menu-item-active`),a.appendChild(T("check")),s=a),a.addEventListener("click",()=>{this.player.disableCaptions(),this.updateCaptionsButton(),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(a),this.player.captionManager.getAvailableTracks().forEach(c=>{let u=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:c.label,attributes:{type:"button",role:"menuitem",lang:c.language,tabindex:"-1"}});this.player.state.captionsEnabled&&this.player.captionManager.currentTrack===this.player.captionManager.tracks[c.index]&&(u.classList.add(`${this.player.options.classPrefix}-menu-item-active`),u.appendChild(T("check")),s=u),u.addEventListener("click",()=>{this.player.captionManager.switchTrack(c.index),this.updateCaptionsButton(),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(u)}),this.insertMenuIntoDOM(i,e),this.attachMenuKeyboardNavigation(i,e),this.attachMenuCloseHandler(i,e),setTimeout(()=>{let c=s||i.querySelector(`.${this.player.options.classPrefix}-menu-item`);c&&c.focus({preventScroll:!0})},0)}updateCaptionsButton(){if(!this.controls.captions)return;let e=this.controls.captions.querySelector(".vidply-icon"),t=this.player.state.captionsEnabled;e.innerHTML=t?T("captions").innerHTML:T("captionsOff").innerHTML}createTranscriptButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-transcript`,attributes:{type:"button","aria-label":g.t("player.transcript"),"aria-expanded":"false"}});return e.appendChild(T("transcript")),e.addEventListener("click",async()=>{await this.player.toggleTranscript(),this.updateTranscriptButton()}),this.controls.transcript=e,e}updateTranscriptButton(){if(!this.controls.transcript)return;let e=this.player.transcriptManager&&this.player.transcriptManager.isVisible;this.controls.transcript.setAttribute("aria-expanded",e?"true":"false")}createAudioDescriptionButton(){let e=g.t("player.audioDescription"),t=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-audio-description`,attributes:{type:"button","aria-label":e,role:"switch","aria-checked":"false"}});return t.appendChild(T("audioDescription")),h.attachTooltip(t,e,this.player.options.classPrefix),t.addEventListener("click",async()=>{await this.player.toggleAudioDescription(),this.updateAudioDescriptionButton()}),this.controls.audioDescription=t,t}updateAudioDescriptionButton(){if(!this.controls.audioDescription)return;let e=this.controls.audioDescription.querySelector(".vidply-icon"),t=this.player.state.audioDescriptionEnabled;e.innerHTML=t?T("audioDescriptionOn").innerHTML:T("audioDescription").innerHTML,this.controls.audioDescription.setAttribute("aria-checked",t?"true":"false")}createSignLanguageButton(){let e=g.t("player.signLanguage"),t=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-sign-language`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}});return t.appendChild(T("signLanguage")),h.attachTooltip(t,e,this.player.options.classPrefix),t.addEventListener("click",()=>{this.player.toggleSignLanguage(),this.updateSignLanguageButton()}),this.controls.signLanguage=t,t}updateSignLanguageButton(){if(!this.controls.signLanguage)return;let e=this.controls.signLanguage.querySelector(".vidply-icon"),t=this.player.state.signLanguageEnabled;e.innerHTML=t?T("signLanguageOn").innerHTML:T("signLanguage").innerHTML,this.controls.signLanguage.setAttribute("aria-expanded",t?"true":"false"),this.controls.signLanguage.setAttribute("aria-label",t?g.t("signLanguage.hide"):g.t("signLanguage.show"))}updateAccessibilityButtons(){let e=this.hasAudioDescription(),t=this.hasSignLanguage();if(e){if(!this.controls.audioDescription&&this.player.options.audioDescriptionButton!==!1){let i=this.createAudioDescriptionButton();i.dataset.overflowPriority="2",i.dataset.overflowPriorityMobile="3";let s=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-transcript`),a=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-playlist-toggle`),r=s||a||null;r?this.rightButtons.insertBefore(i,r):this.rightButtons.appendChild(i),this.setupOverflowMenu()}this.controls.audioDescription&&(this.controls.audioDescription.style.display="")}else this.controls.audioDescription&&(this.controls.audioDescription.style.display="none");if(t){if(!this.controls.signLanguage&&this.player.options.signLanguageButton!==!1){let i=this.createSignLanguageButton();i.dataset.overflowPriority="3",i.dataset.overflowPriorityMobile="3";let s=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-quality`),a=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-fullscreen`),r=s||a||null;r?this.rightButtons.insertBefore(i,r):this.rightButtons.appendChild(i),this.setupOverflowMenu()}this.controls.signLanguage&&(this.controls.signLanguage.style.display="")}else this.controls.signLanguage&&(this.controls.signLanguage.style.display="none")}createSettingsButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-settings`,attributes:{type:"button","aria-label":g.t("player.settings")}});return e.appendChild(T("settings")),e.addEventListener("click",()=>{this.player.showSettings()}),e}createPipButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-pip`,attributes:{type:"button","aria-label":g.t("player.pip")}});return e.appendChild(T("pip")),e.addEventListener("click",()=>{this.player.togglePiP()}),e}createFullscreenButton(){let e=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-fullscreen`,attributes:{type:"button","aria-label":g.t("player.fullscreen")}});return e.appendChild(T("fullscreen")),e.addEventListener("click",()=>{this.player.toggleFullscreen()}),this.controls.fullscreen=e,e}attachEvents(){this.player.on("play",()=>this.updatePlayPauseButton()),this.player.on("pause",()=>this.updatePlayPauseButton()),this.player.on("timeupdate",()=>this.updateProgress()),this.player.on("loadedmetadata",()=>{this.updateDuration(),this.ensureQualityButton(),this.updateQualityIndicator(),this.updatePreviewVideoSource()}),this.player.on("sourcechange",()=>{this.updatePreviewVideoSource()}),this.player.on("volumechange",()=>this.updateVolumeDisplay()),this.player.on("progress",()=>this.updateBuffered()),this.player.on("playbackspeedchange",()=>this.updateSpeedDisplay()),this.player.on("fullscreenchange",()=>this.updateFullscreenButton()),this.player.on("captionsenabled",()=>this.updateCaptionsButton()),this.player.on("captionsdisabled",()=>this.updateCaptionsButton()),this.player.on("audiodescriptionenabled",()=>this.updateAudioDescriptionButton()),this.player.on("audiodescriptiondisabled",()=>this.updateAudioDescriptionButton()),this.player.on("signlanguageenabled",()=>this.updateSignLanguageButton()),this.player.on("signlanguagedisabled",()=>this.updateSignLanguageButton()),this.player.on("qualitychange",()=>this.updateQualityIndicator()),this.player.on("hlslevelswitched",()=>this.updateQualityIndicator()),this.player.on("hlsmanifestparsed",()=>{this.ensureQualityButton(),this.updateQualityIndicator()})}updatePlayPauseButton(){if(!this.controls.playPause)return;let e=this.controls.playPause.querySelector(".vidply-icon"),t=this.player.state.playing;e.innerHTML=t?T("pause").innerHTML:T("play").innerHTML;let i=t?g.t("player.pause"):g.t("player.play");this.controls.playPause.setAttribute("aria-label",i),h.attachTooltip(this.controls.playPause,i,this.player.options.classPrefix)}updateProgress(){if(!this.controls.played)return;let e=this.player.state.currentTime||0,t=this.player.state.duration||0,i=t>0?Math.min(100,Math.max(0,e/t*100)):0;this.controls.played.style.width=`${i}%`,this.controls.progress.setAttribute("aria-valuenow",String(Math.round(i)));let s=x.formatDuration(this.player.state.currentTime),a=x.formatDuration(this.player.state.duration);if(this.controls.progress.setAttribute("aria-valuetext",`${Math.round(i)}%, ${s} ${g.t("time.of")} ${a}`),this.controls.currentTimeVisual){let r=this.player.state.currentTime;this.controls.currentTimeVisual.textContent=x.formatTime(r),this.controls.currentTimeAccessible&&(this.controls.currentTimeAccessible.textContent=x.formatDuration(r))}}updateDuration(){if(this.controls.durationVisual){let e=this.player.state.duration;this.controls.durationVisual.textContent=x.formatTime(e),this.controls.durationAccessible&&(this.controls.durationAccessible.textContent=g.t("time.durationPrefix")+x.formatDuration(e))}}updateVolumeDisplay(){let e=this.player.state.volume*100;if(this.controls.volumeFill&&(this.controls.volumeFill.style.height=`${e}%`),this.controls.volumeSlider&&this.controls.volumeSlider.setAttribute("aria-valuenow",String(Math.round(e))),this.controls.mute){let t=this.controls.mute.querySelector(".vidply-icon");if(t){let i;this.player.state.muted||this.player.state.volume===0?i="volumeMuted":this.player.state.volume<.3?i="volumeLow":this.player.state.volume<.7?i="volumeMedium":i="volumeHigh",t.innerHTML=T(i).innerHTML;let s=this.player.state.muted?g.t("player.unmute"):g.t("player.mute");this.controls.mute.setAttribute("aria-label",s),h.attachTooltip(this.controls.mute,s,this.player.options.classPrefix)}}this.controls.volumeSlider&&this.controls.volumeSlider.setAttribute("aria-valuenow",String(Math.round(e)))}updateBuffered(){if(!this.controls.buffered||!this.player.element.buffered||this.player.element.buffered.length===0)return;let t=this.player.element.buffered.end(this.player.element.buffered.length-1)/this.player.state.duration*100;this.controls.buffered.style.width=`${t}%`}updateSpeedDisplay(){this.controls.speedText&&(this.controls.speedText.textContent=`${this.player.state.playbackSpeed}x`)}updateFullscreenButton(){if(!this.controls.fullscreen)return;let e=this.controls.fullscreen.querySelector(".vidply-icon"),t=this.player.state.fullscreen;e.innerHTML=t?T("fullscreenExit").innerHTML:T("fullscreen").innerHTML,this.controls.fullscreen.setAttribute("aria-label",t?g.t("player.exitFullscreen"):g.t("player.fullscreen"))}ensureQualityButton(){if(!this.player.options.qualityButton||this.controls.quality||!this.hasQualityLevels())return;let e=this.createQualityButton(),t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-speed`),s=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-caption-style`)||t;s?this.rightButtons.insertBefore(e,s):this.rightButtons.insertBefore(e,this.rightButtons.firstChild),this.player.log("Quality button added dynamically","info")}updateQualityIndicator(){if(!this.controls.qualityText||!this.player.renderer||!this.player.renderer.getQualities)return;let e=this.player.renderer.getQualities();if(e.length===0){this.controls.qualityText.textContent="";return}let t="";if(this.player.renderer.hls&&this.player.renderer.hls.currentLevel===-1)t="Auto";else if(this.player.renderer.getCurrentQuality){let i=this.player.renderer.getCurrentQuality(),s=e.find(a=>a.index===i);s&&(t=s.height?`${s.height}p`:"")}this.controls.qualityText.textContent=t}setupAutoHide(){if(this.player.element.tagName!=="VIDEO")return;let e=()=>{if(this.element.classList.add(`${this.player.options.classPrefix}-controls-visible`),this.player.container.classList.add(`${this.player.options.classPrefix}-controls-visible`),this.player.state.controlsVisible=!0,clearTimeout(this.hideTimeout),this.player.state.playing){let t=this.player.state.fullscreen?this.player.options.hideControlsDelay*1.5:this.player.options.hideControlsDelay;this.hideTimeout=setTimeout(()=>{this.element.classList.remove(`${this.player.options.classPrefix}-controls-visible`),this.player.container.classList.remove(`${this.player.options.classPrefix}-controls-visible`),this.player.state.controlsVisible=!1},t)}};this.player.container.addEventListener("mousemove",e),this.player.container.addEventListener("touchstart",e),this.player.container.addEventListener("touchmove",e),this.player.container.addEventListener("click",e),this.player.container.addEventListener("tap",e),this.element.addEventListener("focusin",e),this.player.on("pause",()=>{e(),clearTimeout(this.hideTimeout)}),this.player.on("play",()=>{e()}),this.player.on("enterfullscreen",()=>{e(),this.player.state.fullscreen&&(clearTimeout(this.hideTimeout),this.hideTimeout=setTimeout(()=>{this.player.state.playing&&(this.element.classList.remove(`${this.player.options.classPrefix}-controls-visible`),this.player.container.classList.remove(`${this.player.options.classPrefix}-controls-visible`),this.player.state.controlsVisible=!1)},this.player.options.hideControlsDelay*2))}),e()}createOverflowMenuButton(){let e=g.t("player.moreOptions"),t=h.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-overflow-menu`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}});return t.appendChild(T("moreVertical")),h.attachTooltip(t,e,this.player.options.classPrefix),t.addEventListener("click",()=>{this.showOverflowMenu(t)}),this.controls.overflowMenu=t,t}showOverflowMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-overflow-menu-list`);if(t){t.remove(),e.setAttribute("aria-expanded","false"),this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null);return}let i=h.createElement("div",{className:`${this.player.options.classPrefix}-overflow-menu-list ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":g.t("player.moreOptions")}}),s=Array.from(this.rightButtons.querySelectorAll('button[data-in-overflow="true"]'));if(s.length===0){let a=h.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:g.t("player.noMoreOptions"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});i.appendChild(a)}else s.forEach(a=>{let r=h.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),c=a.getAttribute("aria-label")||a.getAttribute("title")||"",u=a.querySelector(".vidply-icon");if(u){let n=u.cloneNode(!0);r.appendChild(n)}else{let n=a.querySelector("span");if(n&&n.textContent&&n.textContent.length<=3){let l=n.cloneNode(!0);l.classList.add("vidply-icon"),r.appendChild(l)}}let o=h.createElement("span",{textContent:c});r.appendChild(o),r.addEventListener("click",n=>{this._overflowMenuItemRef=r;let l=a.style.display;a.style.display="",a.style.visibility="hidden",a.click(),setTimeout(()=>{a.style.display=l,a.style.visibility="",this._overflowMenuItemRef=null},100),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(r)}),this.attachMenuKeyboardNavigation(i,e),setTimeout(()=>{let a=i.querySelector(`.${this.player.options.classPrefix}-menu-item`);a&&a.tagName==="BUTTON"&&a.focus({preventScroll:!0})},0);i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuCloseHandler(i,e)}setupOverflowDetection(){let e=()=>{let i=window.innerWidth>=768,s=window.innerHeight<window.innerWidth,a=this.player.state.fullscreen,r=s&&a;if(!this.rightButtons||this.rightButtons.children.length===0){this.overflowMenuButton&&(this.overflowMenuButton.style.display="none");return}let c=Array.from(this.rightButtons.children).filter(y=>!y.classList.contains(`${this.player.options.classPrefix}-overflow-menu`));if(c.length===0){this.overflowMenuButton&&(this.overflowMenuButton.style.display="none");return}let u=!i&&!s;if(this.player.options.debug&&console.log("Overflow detection:",{isDesktop:i,isFullscreen:a,isLandscape:s,isLandscapeFullscreen:r,shouldUseOverflow:u,width:window.innerWidth,height:window.innerHeight}),!u){c.forEach(y=>{y.dataset.inOverflow="false",y.style.display=""}),this.overflowMenuButton&&(this.overflowMenuButton.style.display="none"),this.player.options.debug&&console.log("No overflow menu needed - all buttons visible, overflow button hidden");return}this.player.options.debug&&console.log("Mobile portrait - checking for overflow..."),c.forEach(y=>{y.style.display=""});let o=this.rightButtons.offsetWidth,l=o-50,d=0,p=c.map(y=>{let M=getComputedStyle(y),b=y.offsetWidth+parseInt(M.marginLeft||0)+parseInt(M.marginRight||0);return d+=b,{btn:y,width:b}});d+=(c.length-1)*8;let f=window.innerWidth<768,v=d>l||f||r&&!i;if(this.player.options.debug&&console.log("Overflow detection:",{containerWidth:o,availableWidth:l,totalWidth:d,needsOverflow:v,isSmallScreen:f,reason:f?"mobile screen":d>l?"not enough space":"enough space",buttonCount:c.length}),v){let y=window.innerWidth<768,M=y?"overflowPriorityMobile":"overflowPriority";this.player.options.debug&&console.log(`Using ${y?"mobile":"desktop"} priorities (width: ${window.innerWidth}px)`);let b=p.sort((S,k)=>{let C=parseInt(S.btn.dataset[M]||S.btn.dataset.overflowPriority||"1");return parseInt(k.btn.dataset[M]||k.btn.dataset.overflowPriority||"1")-C}),w=d,E=0;for(let{btn:S,width:k}of b){let C=parseInt(S.dataset[M]||S.dataset.overflowPriority||"1"),P=S.getAttribute("aria-label")||"unknown";if(C===1){S.dataset.inOverflow="false",S.style.display="";continue}(y?C>1:w>l)?(S.dataset.inOverflow="true",S.style.display="none",w-=k,E++,this.player.options.debug&&console.log(` → Hiding button: ${P} (priority ${C}, ${y?"mobile":"desktop"})`)):(S.dataset.inOverflow="false",S.style.display="")}if(this.player.options.debug&&console.log("Overflow button exists?",!!this.overflowMenuButton),!this.overflowMenuButton){console.error("Overflow menu button not found!");return}E>0?(this.overflowMenuButton.style.display="",this.player.options.debug&&console.log("Showing overflow menu button -",E,"buttons moved")):(this.overflowMenuButton.style.display="none",this.player.options.debug&&console.log("Hiding overflow menu button - all buttons fit"))}else c.forEach(y=>{y.dataset.inOverflow="false",y.style.display=""}),this.overflowMenuButton.style.display="none"},t=new ResizeObserver(()=>{requestAnimationFrame(e)});t.observe(this.rightButtons),window.addEventListener("resize",()=>{requestAnimationFrame(e)}),this.player.on("fullscreenchange",()=>{setTimeout(()=>{requestAnimationFrame(e)},50)}),requestAnimationFrame(()=>{e(),setTimeout(()=>e(),100),setTimeout(()=>e(),300),setTimeout(()=>e(),500)}),document.fonts&&document.fonts.ready&&document.fonts.ready.then(()=>{requestAnimationFrame(e)}),this.overflowResizeObserver=t}show(){this.element.style.display=""}hide(){this.element.style.display="none"}updatePreviewVideoSource(){let e=this.player.renderer;if(!e||!e.media||e.media.tagName!=="VIDEO"||(!this.previewSupported&&!this.previewVideo&&this.initPreviewThumbnail(),!this.previewSupported||!this.previewVideo))return;let t=e.media,i=t.src||t.querySelector("source")?.src;i&&this.previewVideo.src!==i?(this.previewThumbnailCache.clear(),this.previewVideoReady=!1,this.previewVideo.src=i,t.crossOrigin&&(this.previewVideo.crossOrigin=t.crossOrigin),this.previewVideo.addEventListener("loadedmetadata",()=>{this.previewVideoReady=!0},{once:!0})):i&&!this.previewVideoReady&&this.previewVideo.readyState>=1&&(this.previewVideoReady=!0)}cleanupPreviewThumbnail(){this.previewThumbnailTimeout&&(clearTimeout(this.previewThumbnailTimeout),this.previewThumbnailTimeout=null),this.previewVideo&&this.previewVideo.parentNode&&(this.previewVideo.parentNode.removeChild(this.previewVideo),this.previewVideo=null),this.previewThumbnailCache.clear()}destroy(){this.hideTimeout&&clearTimeout(this.hideTimeout),this.overflowResizeObserver&&this.overflowResizeObserver.disconnect(),this.cleanupPreviewThumbnail(),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}};var H=class{constructor(e){this.player=e,this.element=null,this.tracks=[],this.currentTrack=null,this.currentCue=null,this.storage=new W("vidply"),this.loadSavedPreferences(),this.init()}loadSavedPreferences(){let e=this.storage.getCaptionPreferences();e&&(e.fontSize&&(this.player.options.captionsFontSize=e.fontSize),e.fontFamily&&(this.player.options.captionsFontFamily=e.fontFamily),e.color&&(this.player.options.captionsColor=e.color),e.backgroundColor&&(this.player.options.captionsBackgroundColor=e.backgroundColor),e.opacity!==void 0&&(this.player.options.captionsOpacity=e.opacity))}saveCaptionPreferences(){this.storage.saveCaptionPreferences({fontSize:this.player.options.captionsFontSize,fontFamily:this.player.options.captionsFontFamily,color:this.player.options.captionsColor,backgroundColor:this.player.options.captionsBackgroundColor,opacity:this.player.options.captionsOpacity})}init(){this.createElement(),this.loadTracks(),this.attachEvents(),this.player.options.captionsDefault&&this.tracks.length>0&&!this.currentTrack&&this.enable()}createElement(){this.element=h.createElement("div",{className:`${this.player.options.classPrefix}-captions`,attributes:{role:"region","aria-label":g.t("player.captions")}}),this.updateStyles(),(this.player.videoWrapper||this.player.container).appendChild(this.element)}loadTracks(){let e=this.player.element.textTracks,t=-1;for(let i=0;i<e.length;i++){let s=e[i];if(s.kind==="subtitles"||s.kind==="captions"){let a=this.player.findTrackElement(s),r=a&&a.hasAttribute("default");this.tracks.push({track:s,language:s.language,label:s.label,kind:s.kind,index:i,isDefault:r}),s.mode==="showing"||s.mode,s.mode="hidden",r&&(t=this.tracks.length-1)}}t>=0&&requestAnimationFrame(()=>{this.enable(t)})}attachEvents(){this.player.on("timeupdate",()=>{this.updateCaptions()}),this.player.on("captionschange",()=>{this.updateStyles()}),this.debouncedPositionCaptions=j(()=>{this.positionCaptionsOnMobile()},150),window.addEventListener("resize",this.debouncedPositionCaptions),this.player.on("enterfullscreen",()=>{_(()=>this.positionCaptionsOnMobile(),100)}),this.player.on("exitfullscreen",()=>{_(()=>this.positionCaptionsOnMobile(),100)})}enable(e=0){if(this.tracks.length===0)return;this.currentTrack&&this.currentTrack.track&&(this.cueChangeHandler&&this.currentTrack.track.removeEventListener("cuechange",this.cueChangeHandler),this.currentTrack.track.mode="hidden");let t=this.tracks[e];if(t&&t.track){t.track.mode="hidden",this.currentTrack=t,this.player.state.captionsEnabled=!0,t.language&&this.element.setAttribute("lang",t.language),this.cueChangeHandler&&t.track.removeEventListener("cuechange",this.cueChangeHandler),this.cueChangeHandler=()=>{this.updateCaptions()},t.track.addEventListener("cuechange",this.cueChangeHandler);let i=()=>{if(t.track.readyState<2){let s=()=>{t.track.removeEventListener("load",s),t.track.removeEventListener("error",s),requestAnimationFrame(()=>{this.currentTrack&&this.currentTrack.track===t.track&&this.updateCaptions()})};t.track.addEventListener("load",s,{once:!0}),t.track.addEventListener("error",s,{once:!0})}else requestAnimationFrame(()=>{this.currentTrack&&this.currentTrack.track===t.track&&this.updateCaptions()})};requestAnimationFrame(()=>{this.currentTrack&&this.currentTrack.track===t.track&&i()}),this.player.emit("captionsenabled",t)}}disable(){this.currentTrack&&(this.currentTrack.track.mode="hidden",this.currentTrack=null),this.element.style.display="none",this.element.innerHTML="",this.element.removeAttribute("lang"),this.currentCue=null,this.player.state.captionsEnabled=!1,this.player.emit("captionsdisabled")}updateCaptions(){if(!this.currentTrack||!this.currentTrack.track)return;if(this.currentTrack.track.mode==="disabled"&&(this.currentTrack.track.mode="hidden"),this.currentTrack.track.mode==="showing"&&(this.currentTrack.track.mode="hidden"),!this.currentTrack.track.activeCues){this.currentTrack.track.cues&&this.currentTrack.track.cues.length>0&&this.currentCue&&(this.element.innerHTML="",this.element.style.display="none",this.currentCue=null);return}let e=this.currentTrack.track.activeCues,t=this.player.element.tagName.toLowerCase()==="audio";if(e.length>0){let i=e[0];if(this.currentCue!==i){this.currentCue=i;let s=i.text;if(s=this.parseVTTFormatting(s),t){this.element.querySelectorAll(`.${this.player.options.classPrefix}-caption-cue`).forEach(u=>u.classList.remove(`${this.player.options.classPrefix}-caption-active`));let r=`cue-${i.startTime}-${i.endTime}`,c=this.element.querySelector(`[data-cue-id="${r}"]`);c||(c=document.createElement("div"),c.className=`${this.player.options.classPrefix}-caption-cue`,c.setAttribute("data-cue-id",r),c.innerHTML=h.sanitizeHTML(s),this.element.appendChild(c)),c.classList.add(`${this.player.options.classPrefix}-caption-active`),requestAnimationFrame(()=>{c&&c.scrollIntoView({behavior:"smooth",block:"center"})})}else this.element.innerHTML=h.sanitizeHTML(s);this.element.style.display="block",this.positionCaptionsOnMobile(),this.player.emit("captionchange",i)}}else this.currentCue&&(t||(this.element.innerHTML="",this.element.style.display="none"),this.currentCue=null)}positionCaptionsOnMobile(){if(!this.element||this.element.style.display==="none")return;let e=this.player.state?.fullscreen||!1,t=N();if(!t&&!e){this.element.style.bottom="";return}let i=this.player.controlBar?.element;i&&requestAnimationFrame(()=>{if(!this.element||this.element.style.display==="none")return;let s=i.getBoundingClientRect(),r=this.player.videoWrapper.getBoundingClientRect().bottom-s.top+16;this.element.style.bottom=`${r}px`,this.player.options.debug&&console.log("[VidPly] Caption position:",{mobile:t,isFullscreen:e,controlsHeight:s.height,bottomOffset:`${r}px`})})}parseVTTFormatting(e){return e=e.replace(/<c[^>]*>(.*?)<\/c>/g,'<span class="caption-class">$1</span>'),e=e.replace(/<b>(.*?)<\/b>/g,"<strong>$1</strong>"),e=e.replace(/<i>(.*?)<\/i>/g,"<em>$1</em>"),e=e.replace(/<u>(.*?)<\/u>/g,"<u>$1</u>"),e=e.replace(/<v\s+([^>]+)>(.*?)<\/v>/g,'<span class="caption-voice" data-voice="$1">$2</span>'),e}updateStyles(){if(!this.element)return;let e=this.player.options;this.element.style.fontSize=e.captionsFontSize,this.element.style.fontFamily=e.captionsFontFamily,this.element.style.color=e.captionsColor,this.element.style.backgroundColor=this.hexToRgba(e.captionsBackgroundColor,e.captionsOpacity)}hexToRgba(e,t){let i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return i?`rgba(${parseInt(i[1],16)}, ${parseInt(i[2],16)}, ${parseInt(i[3],16)}, ${t})`:e}setCaptionStyle(e,t){switch(e){case"fontSize":this.player.options.captionsFontSize=t;break;case"fontFamily":this.player.options.captionsFontFamily=t;break;case"color":this.player.options.captionsColor=t;break;case"backgroundColor":this.player.options.captionsBackgroundColor=t;break;case"opacity":this.player.options.captionsOpacity=t;break}this.updateStyles(),this.saveCaptionPreferences(),this.player.emit("captionschange")}getAvailableTracks(){return this.tracks.map((e,t)=>({index:t,language:e.language,label:e.label||e.language,kind:e.kind}))}switchTrack(e){e>=0&&e<this.tracks.length&&(this.disable(),this.enable(e))}destroy(){this.disable(),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}};var G=class{constructor(e){this.player=e,this.shortcuts=e.options.keyboardShortcuts,this.init()}init(){this.attachEvents()}attachEvents(){this.player.container.addEventListener("keydown",e=>{this.handleKeydown(e)},!0),this.player.container.hasAttribute("tabindex")||this.player.container.setAttribute("tabindex","0")}handleKeydown(e){if(e.target.tagName==="INPUT"||e.target.tagName==="TEXTAREA"||e.target.tagName==="SELECT")return;let t=document.activeElement;if(t&&(t.closest('.vidply-menu, [role="menu"]')||t.closest(".vidply-playlist-item-button")))return;let i=e.key,s=!1;if(i==="Escape"&&this.player.state.fullscreen){this.player.exitFullscreen(),e.preventDefault(),e.stopPropagation();return}for(let[a,r]of Object.entries(this.shortcuts))if(r.includes(i)&&(s=this.executeAction(a,e),s)){e.preventDefault(),e.stopPropagation(),this.announceAction(a);break}!s&&this.player.options.debug&&console.log("[VidPly] Unhandled key:",e.key,"code:",e.code,"shiftKey:",e.shiftKey)}executeAction(e,t){switch(e){case"play-pause":return this.player.toggle(),!0;case"volume-up":return this.player.setVolume(Math.min(1,this.player.state.volume+.1)),!0;case"volume-down":return this.player.setVolume(Math.max(0,this.player.state.volume-.1)),!0;case"seek-forward":return this.player.seekForward(),!0;case"seek-backward":return this.player.seekBackward(),!0;case"mute":return this.player.toggleMute(),!0;case"fullscreen":return this.player.toggleFullscreen(),!0;case"captions":if(this.player.captionManager&&this.player.captionManager.tracks.length>1){let i=this.player.controlBar&&this.player.controlBar.controls.captions;i?this.player.controlBar.showCaptionsMenu(i):this.player.toggleCaptions()}else this.player.toggleCaptions();return!0;case"caption-style-menu":return this.player.controlBar&&this.player.controlBar.controls.captionStyle?(this.player.controlBar.showCaptionStyleMenu(this.player.controlBar.controls.captionStyle),!0):!1;case"speed-up":return this.player.setPlaybackSpeed(Math.min(2,this.player.state.playbackSpeed+.25)),!0;case"speed-down":return this.player.setPlaybackSpeed(Math.max(.25,this.player.state.playbackSpeed-.25)),!0;case"speed-menu":return this.player.controlBar&&this.player.controlBar.controls.speed?(this.player.controlBar.showSpeedMenu(this.player.controlBar.controls.speed),!0):!1;case"quality-menu":return this.player.controlBar&&this.player.controlBar.controls.quality?(this.player.controlBar.showQualityMenu(this.player.controlBar.controls.quality),!0):!1;case"chapters-menu":return this.player.controlBar&&this.player.controlBar.controls.chapters?(this.player.controlBar.showChaptersMenu(this.player.controlBar.controls.chapters),!0):!1;case"transcript-toggle":return this.player.transcriptManager?(this.player.transcriptManager.toggleTranscript(),!0):!1;default:return!1}}announceAction(e){if(!this.player.options.screenReaderAnnouncements)return;let t="";switch(e){case"play-pause":t=this.player.state.playing?"Playing":"Paused";break;case"volume-up":t=`Volume ${Math.round(this.player.state.volume*100)}%`;break;case"volume-down":t=`Volume ${Math.round(this.player.state.volume*100)}%`;break;case"mute":t=this.player.state.muted?"Muted":"Unmuted";break;case"fullscreen":t=this.player.state.fullscreen?"Fullscreen":"Exit fullscreen";break;case"captions":t=this.player.state.captionsEnabled?"Captions on":"Captions off";break;case"speed-up":case"speed-down":t=`Speed ${this.player.state.playbackSpeed}x`;break}t&&this.announce(t)}announce(e,t="polite"){let i=document.getElementById("vidply-announcer");i||(i=document.createElement("div"),i.id="vidply-announcer",i.className="vidply-sr-only",i.setAttribute("aria-live",t),i.setAttribute("aria-atomic","true"),i.style.cssText=`
|
|
7
7
|
position: absolute;
|
|
8
8
|
left: -10000px;
|
|
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 G=class{constructor(e){this.player=e,this.enabled=!1,this.desiredState=!1,this.src=e.options.audioDescriptionSrc,this.sourceElement=null,this.originalSource=null,this.captionTracks=[]}initFromSourceElements(e,t){for(let i of e){let s=i.getAttribute("data-desc-src"),a=i.getAttribute("data-orig-src");if(s||a){if(this.sourceElement||(this.sourceElement=i),a)this.originalSource||(this.originalSource=a),this.player.originalSrc||(this.player.originalSrc=a);else{let r=i.getAttribute("src");!this.originalSource&&r&&(this.originalSource=r),!this.player.originalSrc&&r&&(this.player.originalSrc=r)}s&&!this.src&&(this.src=s)}}t.forEach(i=>{let s=i.getAttribute("kind"),a=i.getAttribute("data-desc-src");(s==="captions"||s==="subtitles"||s==="chapters"||s==="descriptions")&&a&&(this.captionTracks.push({trackElement:i,originalSrc:i.getAttribute("src"),describedSrc:a,originalTrackSrc:i.getAttribute("data-orig-src")||i.getAttribute("src"),explicit:!0}),this.player.log(`Found explicit described ${s} track: ${i.getAttribute("src")} -> ${a}`))})}isAvailable(){let e=this.player.sourceElements.some(t=>t.getAttribute("data-desc-src"));return!!(this.src||e||this.captionTracks.length>0)}async enable(){let e=this.player.sourceElements.some(u=>u.getAttribute("data-desc-src")),t=this.captionTracks.length>0;if(!this.src&&!e&&!t){console.warn("VidPly: No audio description source, source elements, or tracks provided");return}this.desiredState=!0;let i=this.player.state.currentTime,s=this.player.state.playing,a=this.player.element.poster||this.player.element.getAttribute("poster")||this.player.options.poster,r=i<.1&&!s,c=this._getCurrentCaptionText();this.sourceElement?await this._enableWithSourceElement(i,s,a,r,c):await this._enableWithDirectSrc(i,s,a,r)}async disable(){if(!this.player.originalSrc)return;this.desiredState=!1;let e=this.player.state.currentTime,t=this.player.state.playing,i=this.player.element.poster||this.player.element.getAttribute("poster")||this.player.options.poster,s=e<.1&&!t,a=this._getCurrentCaptionText();this.sourceElement?await this._disableWithSourceElement(e,t,i,s,a):await this._disableWithDirectSrc(e,t,i)}async toggle(){let e=this.player.findTextTrack("descriptions"),t=this.isAvailable();e&&!t?e.mode==="showing"?(e.mode="hidden",this.enabled=!1,this.player.emit("audiodescriptiondisabled")):(e.mode="showing",this.enabled=!0,this.player.emit("audiodescriptionenabled")):e&&t?this.enabled?(this.desiredState=!1,await this.disable()):(e.mode="showing",this.desiredState=!0,await this.enable()):t&&(this.enabled?(this.desiredState=!1,await this.disable()):(this.desiredState=!0,await this.enable()))}_getCurrentCaptionText(){return this.player.captionManager&&this.player.captionManager.currentTrack&&this.player.captionManager.currentCue?this.player.captionManager.currentCue.text:null}async _validateTrackExists(e){try{return(await fetch(e,{method:"HEAD"})).ok}catch{return!1}}async _swapCaptionTracks(e=!0){if(this.captionTracks.length===0)return[];let t=[],i=this.captionTracks.map(async r=>{if(r.trackElement&&r.describedSrc&&r.explicit===!0)try{let c=await this._validateTrackExists(e?r.describedSrc:r.originalSrc);return{trackInfo:r,exists:c}}catch{return{trackInfo:r,exists:!1}}return{trackInfo:r,exists:!1}}),a=(await Promise.all(i)).filter(r=>r.exists);if(a.length>0){let r=new Map;a.forEach(({trackInfo:u})=>{let o=u.trackElement.track;o?r.set(u,{wasShowing:o.mode==="showing",wasHidden:o.mode==="hidden"}):r.set(u,{wasShowing:!1,wasHidden:!1})});let c=a.map(({trackInfo:u})=>{let o={};Array.from(u.trackElement.attributes).forEach(l=>{o[l.name]=l.value});let n={trackInfo:u,oldSrc:u.trackElement.getAttribute("src"),parent:u.trackElement.parentNode,nextSibling:u.trackElement.nextSibling,attributes:o};return u.trackElement.remove(),n});this.player.element.load(),await new Promise(u=>{setTimeout(()=>{c.forEach(({trackInfo:n,parent:l,nextSibling:d,attributes:p})=>{t.push(n);let y=document.createElement("track"),f=e?n.describedSrc:n.originalSrc;y.setAttribute("src",f),Object.keys(p).forEach(m=>{m!=="src"&&m!=="data-desc-src"&&y.setAttribute(m,p[m])});let L=l||this.player.element;d&&d.parentNode?L.insertBefore(y,d):L.appendChild(y),n.trackElement=y}),this.player.invalidateTrackCache();let o=()=>{this.player.setManagedTimeout(()=>{t.forEach(n=>{let l=n.trackElement.track;if(l){let d=r.get(n)||{wasShowing:!1,wasHidden:!1};l.mode="hidden";let p=()=>{d.wasShowing||d.wasHidden?l.mode="hidden":l.mode="disabled"};l.readyState>=2?p():(l.addEventListener("load",p,{once:!0}),l.addEventListener("error",p,{once:!0}))}})},300)};this.player.element.readyState>=1?setTimeout(o,200):(this.player.element.addEventListener("loadedmetadata",o,{once:!0}),setTimeout(o,2e3)),u()},100)})}return t}_updateSourceElements(e=!0){let t=this.player.sourceElements,i=[];t.forEach(s=>{let a=s.getAttribute("data-desc-src"),r=s.getAttribute("src");if(a){let c=s.getAttribute("type"),u=s.getAttribute("data-orig-src")||r;i.push({src:e?a:u,type:c,origSrc:u,descSrc:a})}else i.push({src:s.getAttribute("src"),type:s.getAttribute("type"),origSrc:null,descSrc:null})}),this.player.element.hasAttribute("src")&&this.player.element.removeAttribute("src"),t.forEach(s=>s.remove()),i.forEach(s=>{let a=document.createElement("source");a.setAttribute("src",s.src),s.type&&a.setAttribute("type",s.type),s.origSrc&&a.setAttribute("data-orig-src",s.origSrc),s.descSrc&&a.setAttribute("data-desc-src",s.descSrc);let r=this.player.element.querySelector("track");r?this.player.element.insertBefore(a,r):this.player.element.appendChild(a)}),this.player._sourceElementsDirty=!0,this.player._sourceElementsCache=null}async _waitForMediaReady(e=!1){await new Promise(t=>{if(this.player.element.readyState>=1)t();else{let i=()=>{this.player.element.removeEventListener("loadedmetadata",i),t()};this.player.element.addEventListener("loadedmetadata",i)}}),await new Promise(t=>setTimeout(t,300)),e&&await new Promise(t=>{if(this.player.element.readyState>=3)t();else{let i=()=>{this.player.element.removeEventListener("canplay",i),this.player.element.removeEventListener("canplaythrough",i),t()};this.player.element.addEventListener("canplay",i,{once:!0}),this.player.element.addEventListener("canplaythrough",i,{once:!0}),setTimeout(()=>{this.player.element.removeEventListener("canplay",i),this.player.element.removeEventListener("canplaythrough",i),t()},3e3)}})}async _restorePlaybackState(e,t,i,s){let a=e;if(s&&this.player.captionManager&&this.player.captionManager.tracks.length>0){await new Promise(c=>setTimeout(c,500));let r=this.player.findMatchingCaptionTime(s,this.player.captionManager.tracks);r!==null&&(a=r,this.player.options.debug&&this.player.log(`[VidPly] Syncing via caption: ${e}s -> ${a}s`))}a>0&&(this.player.seek(a),await new Promise(r=>setTimeout(r,100))),t?(await this.player.play(),this.player.setManagedTimeout(()=>{this.player.hidePosterOverlay()},100)):(this.player.pause(),i||this.player.hidePosterOverlay())}async _enableWithSourceElement(e,t,i,s,a){await this._swapCaptionTracks(!0),this._updateSourceElements(!0),i&&this.player.element.tagName==="VIDEO"&&(this.player.element.poster=i),this.player.element.load(),await this._waitForMediaReady(e>0||t),await this._restorePlaybackState(e,t,s,a),this.desiredState&&(this.enabled=!0,this.player.state.audioDescriptionEnabled=!0,this.player.emit("audiodescriptionenabled"),this._reloadTranscript())}async _enableWithDirectSrc(e,t,i,s){await this._swapCaptionTracks(!0),i&&this.player.element.tagName==="VIDEO"&&(this.player.element.poster=i),this.player.element.src=this.src,await this._waitForMediaReady(e>0||t),e>0&&(this.player.seek(e),await new Promise(a=>setTimeout(a,100))),t?await this.player.play():(this.player.pause(),s||this.player.hidePosterOverlay()),this.desiredState&&(this.enabled=!0,this.player.state.audioDescriptionEnabled=!0,this.player.emit("audiodescriptionenabled"),this._reloadTranscript())}async _disableWithSourceElement(e,t,i,s,a){await this._swapCaptionTracks(!1),this._updateSourceElements(!1),i&&this.player.element.tagName==="VIDEO"&&(this.player.element.poster=i),this.player.element.load(),this.player.invalidateTrackCache(),await this._waitForMediaReady(e>0||t),await this._restorePlaybackState(e,t,s,a),this.player.captionManager&&(this.player.captionManager.destroy(),this.player.captionManager=new H(this.player)),!this.desiredState&&(this.enabled=!1,this.player.state.audioDescriptionEnabled=!1,this.player.emit("audiodescriptiondisabled"),this._reloadTranscript())}async _disableWithDirectSrc(e,t,i){await this._swapCaptionTracks(!1),i&&this.player.element.tagName==="VIDEO"&&(this.player.element.poster=i);let s=this.originalSource||this.player.originalSrc;this.player.element.src=s,this.player.element.load(),await this._waitForMediaReady(e>0||t),e>0&&this.player.seek(e),t&&await this.player.play(),!this.desiredState&&(this.enabled=!1,this.player.state.audioDescriptionEnabled=!1,this.player.emit("audiodescriptiondisabled"),this._reloadTranscript())}_reloadTranscript(){this.player.transcriptManager&&this.player.transcriptManager.isVisible&&this.player.setManagedTimeout(()=>{this.player.transcriptManager&&this.player.transcriptManager.loadTranscriptData&&this.player.transcriptManager.loadTranscriptData()},800)}updateSources(e){this.src=e||null,this.enabled=!1,this.desiredState=!1,this.sourceElement=null,this.originalSource=null,this.captionTracks=[]}reinitialize(){this.player.invalidateTrackCache(),this.initFromSourceElements(this.player.sourceElements,this.player.trackElements)}destroy(){this.enabled=!1,this.desiredState=!1,this.captionTracks=[],this.sourceElement=null,this.originalSource=null}};var Z=class{constructor(e){this.player=e,this.src=e.options.signLanguageSrc,this.sources=e.options.signLanguageSources||{},this.currentLanguage=null,this.desiredPosition=e.options.signLanguagePosition||"bottom-right",this.wrapper=null,this.header=null,this.video=null,this.selector=null,this.settingsButton=null,this.settingsMenu=null,this.resizeHandles=[],this.enabled=!1,this.settingsMenuVisible=!1,this.settingsMenuJustOpened=!1,this.documentClickHandlerAdded=!1,this.handlers=null,this.settingsHandlers=null,this.interactionHandlers=null,this.draggable=null,this.documentClickHandler=null,this.settingsMenuKeyHandler=null,this.customKeyHandler=null,this.dragOptionButton=null,this.dragOptionText=null,this.resizeOptionButton=null,this.resizeOptionText=null}isAvailable(){return Object.keys(this.sources).length>0||!!this.src}enable(){let e=Object.keys(this.sources).length>0,t=!!this.src;if(!e&&!t){console.warn("No sign language video source provided");return}if(this.wrapper){this.wrapper.style.display="block",this.enabled=!0,this.player.state.signLanguageEnabled=!0,this.player.emit("signlanguageenabled"),this.player.setManagedTimeout(()=>{this.settingsButton&&document.contains(this.settingsButton)&&this.settingsButton.focus({preventScroll:!0})},150);return}let i=null,s=null;e?(i=this._determineInitialLanguage(),s=this.sources[i],this.currentLanguage=i):s=this.src,this._createWrapper(),this._createHeader(e,i),this._createVideo(s),this._createResizeHandles(),this.wrapper.appendChild(this.header),this.wrapper.appendChild(this.video),this.resizeHandles.forEach(a=>this.wrapper.appendChild(a)),this._applyInitialSize(),this.player.container.appendChild(this.wrapper),requestAnimationFrame(()=>{this.constrainPosition()}),this.video.currentTime=this.player.state.currentTime,this.player.state.paused||this.video.play(),this._setupInteraction(),this._setupEventHandlers(e),this.enabled=!0,this.player.state.signLanguageEnabled=!0,this.player.emit("signlanguageenabled"),this.player.setManagedTimeout(()=>{this.settingsButton&&document.contains(this.settingsButton)&&this.settingsButton.focus({preventScroll:!0})},150)}disable(){this.settingsMenuVisible&&this.hideSettingsMenu({focusButton:!1}),this.wrapper&&(this.wrapper.style.display="none"),this.enabled=!1,this.player.state.signLanguageEnabled=!1,this.player.emit("signlanguagedisabled")}toggle(){this.enabled?this.disable():this.enable()}switchLanguage(e){if(!this.sources[e]||!this.video)return;let t=this.video.currentTime,i=!this.video.paused;this.video.src=this.sources[e],this.currentLanguage=e,this.video.currentTime=t,i&&this.video.play().catch(()=>{}),this.player.emit("signlanguagelanguagechanged",e)}getLanguageLabel(e){return{en:"English",de:"Deutsch",es:"Español",fr:"Français",it:"Italiano",ja:"日本語",pt:"Português",ar:"العربية",hi:"हिन्दी"}[e]||e.toUpperCase()}_determineInitialLanguage(){if(this.player.captionManager&&this.player.captionManager.currentTrack){let e=this.player.captionManager.currentTrack.language?.toLowerCase().split("-")[0];if(e&&this.sources[e])return e}if(this.player.options.language){let e=this.player.options.language.toLowerCase().split("-")[0];if(this.sources[e])return e}return Object.keys(this.sources)[0]}_createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vidply-sign-language-wrapper",this.wrapper.setAttribute("tabindex","0"),this.wrapper.setAttribute("aria-label",g.t("player.signLanguageDragResize"))}_createHeader(e,t){let i=this.player.options.classPrefix;this.header=h.createElement("div",{className:`${i}-sign-language-header`,attributes:{tabindex:"0"}});let s=h.createElement("div",{className:`${i}-sign-language-header-left`}),a=h.createElement("h3",{textContent:g.t("player.signLanguageVideo")});this._createSettingsButton(s),e&&this._createLanguageSelector(s,t),s.appendChild(a);let r=this._createCloseButton();this.header.appendChild(s),this.header.appendChild(r),this.settingsMenuVisible=!1,this.settingsMenu=null,this.settingsMenuJustOpened=!1}_createSettingsButton(e){let t=this.player.options.classPrefix,i=g.t("player.signLanguageSettings");this.settingsButton=h.createElement("button",{className:`${t}-sign-language-settings`,attributes:{type:"button","aria-label":i,"aria-expanded":"false"}}),this.settingsButton.appendChild(w("settings")),h.attachTooltip(this.settingsButton,i,t),this.settingsHandlers={click:s=>{s.preventDefault(),s.stopPropagation(),this.documentClickHandler&&(this.settingsMenuJustOpened=!0,setTimeout(()=>{this.settingsMenuJustOpened=!1},100)),this.settingsMenuVisible?this.hideSettingsMenu():this.showSettingsMenu()},keydown:s=>{s.key==="d"||s.key==="D"?(s.preventDefault(),s.stopPropagation(),this.toggleKeyboardDragMode()):s.key==="r"||s.key==="R"?(s.preventDefault(),s.stopPropagation(),this.toggleResizeMode()):s.key==="Escape"&&this.settingsMenuVisible&&(s.preventDefault(),s.stopPropagation(),this.hideSettingsMenu())}},this.settingsButton.addEventListener("click",this.settingsHandlers.click),this.settingsButton.addEventListener("keydown",this.settingsHandlers.keydown),e.appendChild(this.settingsButton)}_createLanguageSelector(e,t){let i=this.player.options.classPrefix,s=`${i}-sign-language-select-${Date.now()}`,a=Object.keys(this.sources).map(o=>({value:o,text:this.getLanguageLabel(o),selected:o===t})),{label:r,select:c}=U({classPrefix:i,labelClass:`${i}-sign-language-label`,selectClass:`${i}-sign-language-select`,labelText:"settings.language",selectId:s,options:a,onChange:o=>{o.stopPropagation(),this.switchLanguage(o.target.value)}});this.selector=c;let u=h.createElement("div",{className:`${i}-sign-language-selector-wrapper`});u.appendChild(r),u.appendChild(this.selector),Q(u),e.appendChild(u)}_createCloseButton(){let e=this.player.options.classPrefix,t=g.t("player.closeSignLanguage"),i=h.createElement("button",{className:`${e}-sign-language-close`,attributes:{type:"button","aria-label":t}});return i.appendChild(w("close")),h.attachTooltip(i,t,e),i.addEventListener("click",()=>{this.disable(),this.player.controlBar?.controls?.signLanguage&&setTimeout(()=>{this.player.controlBar.controls.signLanguage.focus({preventScroll:!0})},0)}),i}_createVideo(e){this.video=document.createElement("video"),this.video.className="vidply-sign-language-video",this.video.src=e,this.video.setAttribute("aria-label",g.t("player.signLanguage")),this.video.muted=!0,this.video.setAttribute("playsinline","")}_createResizeHandles(){let e=this.player.options.classPrefix;this.resizeHandles=["n","s","e","w","ne","nw","se","sw"].map(t=>{let i=h.createElement("div",{className:`${e}-sign-resize-handle ${e}-sign-resize-${t}`,attributes:{"data-direction":t,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return i.style.display="none",i})}_applyInitialSize(){let e=this.player.storage.getSignLanguagePreferences();e?.size?.width?this.wrapper.style.width=e.size.width:this.wrapper.style.width="280px",this.wrapper.style.height="auto"}_setupInteraction(){let e=window.innerWidth<768,t=this.player.state.fullscreen;if(e&&!t){this.draggable&&(this.draggable.destroy(),this.draggable=null);return}if(this.draggable)return;let i=this.player.options.classPrefix;this.draggable=new K(this.wrapper,{dragHandle:this.header,resizeHandles:this.resizeHandles,constrainToViewport:!0,maintainAspectRatio:!0,minWidth:150,minHeight:100,classPrefix:`${i}-sign`,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:10,keyboardStepLarge:50,pointerResizeIndicatorText:g.t("player.signLanguageResizeActive"),onPointerResizeToggle:s=>{this.resizeHandles.forEach(a=>{a.style.display=s?"block":"none"})},onDragStart:s=>!(s.target.closest(`.${i}-sign-language-close`)||s.target.closest(`.${i}-sign-language-settings`)||s.target.closest(`.${i}-sign-language-select`)||s.target.closest(`.${i}-sign-language-label`)||s.target.closest(`.${i}-sign-language-settings-menu`))}),this._setupCustomKeyHandler(),this.interactionHandlers={draggable:this.draggable,customKeyHandler:this.customKeyHandler}}_setupCustomKeyHandler(){this.customKeyHandler=e=>{let t=e.key.toLowerCase();if(!this.settingsMenuVisible){if(t==="home"){e.preventDefault(),e.stopPropagation(),this.draggable&&(this.draggable.pointerResizeMode&&this.draggable.disablePointerResizeMode(),this.draggable.manuallyPositioned=!1,this.constrainPosition());return}if(t==="r"){e.preventDefault(),e.stopPropagation(),this.toggleResizeMode()&&this.wrapper.focus({preventScroll:!0});return}if(t==="escape"){if(e.preventDefault(),e.stopPropagation(),this.draggable?.pointerResizeMode){this.draggable.disablePointerResizeMode();return}if(this.draggable?.keyboardDragMode){this.draggable.disableKeyboardDragMode();return}this.disable(),this.player.controlBar?.controls?.signLanguage&&setTimeout(()=>{this.player.controlBar.controls.signLanguage.focus({preventScroll:!0})},0)}}},this.wrapper.addEventListener("keydown",this.customKeyHandler)}_setupEventHandlers(e){this.handlers={play:()=>{this.video&&this.video.play()},pause:()=>{this.video&&this.video.pause()},timeupdate:()=>{this.video&&Math.abs(this.video.currentTime-this.player.state.currentTime)>.5&&(this.video.currentTime=this.player.state.currentTime)},ratechange:()=>{this.video&&(this.video.playbackRate=this.player.state.playbackSpeed)}},this.player.on("play",this.handlers.play),this.player.on("pause",this.handlers.pause),this.player.on("timeupdate",this.handlers.timeupdate),this.player.on("ratechange",this.handlers.ratechange),e&&(this.handlers.captionChange=()=>{if(this.player.captionManager?.currentTrack&&this.selector){let t=this.player.captionManager.currentTrack.language?.toLowerCase().split("-")[0];t&&this.sources[t]&&this.currentLanguage!==t&&(this.switchLanguage(t),this.selector.value=t)}},this.player.on("captionsenabled",this.handlers.captionChange))}constrainPosition(){if(!this.wrapper||!this.player.videoWrapper||this.draggable?.manuallyPositioned)return;this.wrapper.style.width||(this.wrapper.style.width="280px");let e=this.player.videoWrapper.getBoundingClientRect(),t=this.player.container.getBoundingClientRect(),i=this.wrapper.getBoundingClientRect(),s=e.left-t.left,a=e.top-t.top,r=e.width,c=e.height,u=i.width||280,o=i.height||280*9/16,n,l,d=16,p=95;switch(this.desiredPosition||"bottom-right"){case"bottom-right":n=s+r-u-d,l=a+c-o-p;break;case"bottom-left":n=s+d,l=a+c-o-p;break;case"top-right":n=s+r-u-d,l=a+d;break;case"top-left":n=s+d,l=a+d;break;default:n=s+r-u-d,l=a+c-o-p}n=Math.max(s,Math.min(n,s+r-u)),l=Math.max(a,Math.min(l,a+c-o-p)),this.wrapper.style.left=`${n}px`,this.wrapper.style.top=`${l}px`,this.wrapper.style.right="auto",this.wrapper.style.bottom="auto"}showSettingsMenu(){if(this.settingsMenuJustOpened=!0,setTimeout(()=>{this.settingsMenuJustOpened=!1},350),this._addDocumentClickHandler(),this.settingsMenu){this.settingsMenu.style.display="block",this.settingsMenuVisible=!0,this.settingsButton?.setAttribute("aria-expanded","true"),this._attachMenuKeyboardNavigation(),this._positionSettingsMenu(),this._updateDragOptionState(),this._updateResizeOptionState(),N(this.settingsMenu,`.${this.player.options.classPrefix}-sign-language-settings-item`);return}this._createSettingsMenu()}hideSettingsMenu({focusButton:e=!0}={}){if(this.settingsMenu){this.settingsMenu.style.display="none",this.settingsMenuVisible=!1,this.settingsMenuJustOpened=!1,this.settingsMenuKeyHandler&&(this.settingsMenu.removeEventListener("keydown",this.settingsMenuKeyHandler),this.settingsMenuKeyHandler=null);let t=this.player.options.classPrefix;Array.from(this.settingsMenu.querySelectorAll(`.${t}-sign-language-settings-item`)).forEach(s=>s.setAttribute("tabindex","-1")),this.settingsButton&&(this.settingsButton.setAttribute("aria-expanded","false"),e&&this.settingsButton.focus({preventScroll:!0}))}}_addDocumentClickHandler(){this.documentClickHandlerAdded||(this.documentClickHandler=e=>{this.settingsMenuJustOpened||this.settingsButton&&(this.settingsButton===e.target||this.settingsButton.contains(e.target))||this.settingsMenu&&this.settingsMenu.contains(e.target)||this.settingsMenuVisible&&this.hideSettingsMenu()},setTimeout(()=>{document.addEventListener("mousedown",this.documentClickHandler,!0),this.documentClickHandlerAdded=!0},300))}_createSettingsMenu(){let e=this.player.options.classPrefix;this.settingsMenu=h.createElement("div",{className:`${e}-sign-language-settings-menu`,attributes:{role:"menu"}});let t=O({classPrefix:e,itemClass:`${e}-sign-language-settings-item`,icon:"move",label:"player.enableSignDragMode",hasTextClass:!0,onClick:()=>{this.toggleKeyboardDragMode(),this.hideSettingsMenu()}});t.setAttribute("role","switch"),t.setAttribute("aria-checked","false"),this._removeTooltipFromMenuItem(t),this.dragOptionButton=t,this.dragOptionText=t.querySelector(`.${e}-settings-text`),this._updateDragOptionState();let i=O({classPrefix:e,itemClass:`${e}-sign-language-settings-item`,icon:"resize",label:"player.enableSignResizeMode",hasTextClass:!0,onClick:a=>{a.preventDefault(),a.stopPropagation(),this.toggleResizeMode({focus:!1})?(this.hideSettingsMenu({focusButton:!1}),setTimeout(()=>{this.wrapper&&this.wrapper.focus({preventScroll:!0})},20)):this.hideSettingsMenu({focusButton:!0})}});i.setAttribute("role","switch"),i.setAttribute("aria-checked","false"),this._removeTooltipFromMenuItem(i),this.resizeOptionButton=i,this.resizeOptionText=i.querySelector(`.${e}-settings-text`),this._updateResizeOptionState();let s=O({classPrefix:e,itemClass:`${e}-sign-language-settings-item`,icon:"close",label:"transcript.closeMenu",onClick:()=>this.hideSettingsMenu()});this._removeTooltipFromMenuItem(s),this.settingsMenu.appendChild(t),this.settingsMenu.appendChild(i),this.settingsMenu.appendChild(s),this.settingsMenu.style.visibility="hidden",this.settingsMenu.style.display="block",this.settingsButton?.parentNode?this.settingsButton.insertAdjacentElement("afterend",this.settingsMenu):this.wrapper&&this.wrapper.appendChild(this.settingsMenu),this._positionSettingsMenuImmediate(),requestAnimationFrame(()=>{this.settingsMenu&&(this.settingsMenu.style.visibility="visible")}),this._attachMenuKeyboardNavigation(),this.settingsMenuVisible=!0,this.settingsButton?.setAttribute("aria-expanded","true"),this._updateDragOptionState(),this._updateResizeOptionState(),N(this.settingsMenu,`.${e}-sign-language-settings-item`)}_removeTooltipFromMenuItem(e){let t=this.player.options.classPrefix,i=e.querySelector(`.${t}-tooltip`);i&&i.remove();let s=e.querySelector(`.${t}-button-text`);s&&s.remove()}_attachMenuKeyboardNavigation(){this.settingsMenuKeyHandler&&this.settingsMenu.removeEventListener("keydown",this.settingsMenuKeyHandler),this.settingsMenuKeyHandler=R(this.settingsMenu,this.settingsButton,`.${this.player.options.classPrefix}-sign-language-settings-item`,()=>this.hideSettingsMenu({focusButton:!0}))}_positionSettingsMenuImmediate(){if(!this.settingsMenu||!this.settingsButton)return;let e=this.settingsButton.getBoundingClientRect(),t=this.settingsMenu.getBoundingClientRect(),i=window.innerWidth,s=window.innerHeight,a=this.settingsButton.parentElement;if(!a)return;let r=a.getBoundingClientRect(),c=e.left+e.width/2-r.left,u=e.bottom-r.top,o=e.top-r.top,n=e.top,l=s-e.bottom,d=u+8,p=null;l<t.height+20&&n>l?(d=null,p=r.bottom-r.top-o+8,this.settingsMenu.classList.add("vidply-menu-above")):this.settingsMenu.classList.remove("vidply-menu-above");let y=c-t.width/2,f="auto",L="translateX(0)",m=e.left+e.width/2-t.width/2;m<10?y=0:m+t.width>i-10?(y="auto",f=0):(y=c,L="translateX(-50%)"),d!==null?(this.settingsMenu.style.top=`${d}px`,this.settingsMenu.style.bottom="auto"):p!==null&&(this.settingsMenu.style.top="auto",this.settingsMenu.style.bottom=`${p}px`),y!=="auto"?(this.settingsMenu.style.left=`${y}px`,this.settingsMenu.style.right="auto"):(this.settingsMenu.style.left="auto",this.settingsMenu.style.right=`${f}px`),this.settingsMenu.style.transform=L}_positionSettingsMenu(){requestAnimationFrame(()=>{setTimeout(()=>{this._positionSettingsMenuImmediate()},10)})}toggleKeyboardDragMode(){if(this.draggable){let e=this.draggable.keyboardDragMode;this.draggable.toggleKeyboardDragMode();let t=this.draggable.keyboardDragMode;!e&&t&&this._enableMoveMode(),this._updateDragOptionState()}}_enableMoveMode(){this.wrapper.classList.add(`${this.player.options.classPrefix}-sign-move-mode`),this._updateResizeOptionState(),setTimeout(()=>{this.wrapper.classList.remove(`${this.player.options.classPrefix}-sign-move-mode`)},2e3)}toggleResizeMode({focus:e=!0}={}){return this.draggable?this.draggable.pointerResizeMode?(this.draggable.disablePointerResizeMode({focus:e}),this._updateResizeOptionState(),!1):(this.draggable.enablePointerResizeMode({focus:e}),this._updateResizeOptionState(),!0):!1}_updateDragOptionState(){if(!this.dragOptionButton)return;let e=!!this.draggable?.keyboardDragMode,t=e?g.t("player.disableSignDragMode"):g.t("player.enableSignDragMode"),i=e?g.t("player.disableSignDragModeAria"):g.t("player.enableSignDragModeAria");this.dragOptionButton.setAttribute("aria-checked",e?"true":"false"),this.dragOptionButton.setAttribute("aria-label",i),this.dragOptionText&&(this.dragOptionText.textContent=t)}_updateResizeOptionState(){if(!this.resizeOptionButton)return;let e=!!this.draggable?.pointerResizeMode,t=e?g.t("player.disableSignResizeMode"):g.t("player.enableSignResizeMode"),i=e?g.t("player.disableSignResizeModeAria"):g.t("player.enableSignResizeModeAria");this.resizeOptionButton.setAttribute("aria-checked",e?"true":"false"),this.resizeOptionButton.setAttribute("aria-label",i),this.resizeOptionText&&(this.resizeOptionText.textContent=t)}savePreferences(){this.wrapper&&this.player.storage.saveSignLanguagePreferences({size:{width:this.wrapper.style.width}})}updateSources(e,t){this.src=e||null,this.sources=t||{},this.currentLanguage=null}cleanup(){this.settingsMenuVisible&&this.hideSettingsMenu({focusButton:!1}),this.documentClickHandler&&this.documentClickHandlerAdded&&(document.removeEventListener("mousedown",this.documentClickHandler,!0),this.documentClickHandlerAdded=!1,this.documentClickHandler=null),this.settingsHandlers&&this.settingsButton&&(this.settingsButton.removeEventListener("click",this.settingsHandlers.click),this.settingsButton.removeEventListener("keydown",this.settingsHandlers.keydown)),this.settingsHandlers=null,this.handlers&&(this.player.off("play",this.handlers.play),this.player.off("pause",this.handlers.pause),this.player.off("timeupdate",this.handlers.timeupdate),this.player.off("ratechange",this.handlers.ratechange),this.handlers.captionChange&&this.player.off("captionsenabled",this.handlers.captionChange),this.handlers=null),this.wrapper&&this.customKeyHandler&&this.wrapper.removeEventListener("keydown",this.customKeyHandler),this.draggable&&(this.draggable.pointerResizeMode&&this.draggable.disablePointerResizeMode(),this.draggable.destroy(),this.draggable=null),this.interactionHandlers=null,this.wrapper?.parentNode&&(this.video&&(this.video.pause(),this.video.src=""),this.wrapper.parentNode.removeChild(this.wrapper)),this.wrapper=null,this.video=null,this.settingsButton=null,this.settingsMenu=null}destroy(){this.cleanup(),this.enabled=!1}};var re=0,z=class T extends X{constructor(e,t={}){if(super(),this.element=typeof e=="string"?document.querySelector(e):e,!this.element)throw new Error("VidPly: Element not found");if(re++,this.instanceId=re,this.element.tagName!=="VIDEO"&&this.element.tagName!=="AUDIO"){let s=t.mediaType||"video",a=document.createElement(s);Array.from(this.element.attributes).forEach(c=>{c.name!=="id"&&c.name!=="class"&&!c.name.startsWith("data-")&&a.setAttribute(c.name,c.value)}),this.element.querySelectorAll("track").forEach(c=>{a.appendChild(c.cloneNode(!0))}),this.element.innerHTML="",this.element.appendChild(a),this.element=a}this._originalElement=this.element,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 W("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.audioDescriptionManager=new G(this),this.signLanguageManager=new Z(this),Object.defineProperties(this,{signLanguageWrapper:{get:()=>this.signLanguageManager.wrapper,set:s=>{this.signLanguageManager.wrapper=s}},signLanguageVideo:{get:()=>this.signLanguageManager.video,set:s=>{this.signLanguageManager.video=s}},signLanguageHeader:{get:()=>this.signLanguageManager.header,set:s=>{this.signLanguageManager.header=s}},signLanguageSettingsButton:{get:()=>this.signLanguageManager.settingsButton,set:s=>{this.signLanguageManager.settingsButton=s}},signLanguageSettingsMenu:{get:()=>this.signLanguageManager.settingsMenu,set:s=>{this.signLanguageManager.settingsMenu=s}},signLanguageSettingsMenuVisible:{get:()=>this.signLanguageManager.settingsMenuVisible,set:s=>{this.signLanguageManager.settingsMenuVisible=s}},signLanguageDraggable:{get:()=>this.signLanguageManager.draggable,set:s=>{this.signLanguageManager.draggable=s}},currentSignLanguage:{get:()=>this.signLanguageManager.currentLanguage,set:s=>{this.signLanguageManager.currentLanguage=s}}}),this.init()}async init(){try{if(this.log("Initializing VidPly player"),this.options.languageFiles)try{await g.loadLanguagesFromUrls(this.options.languageFiles)}catch(t){console.warn("Failed to load some language files:",t)}if(this.options.languageFile&&this.options.languageFileUrl)try{await g.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 g.ensureLanguage(this.options.language),g.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 J(this),this.videoWrapper.appendChild(this.controlBar.element)),this.options.captions&&(this.captionManager=new H(this)),this.options.transcript&&await this.ensureTranscriptManager(),this.setupMetadataHandling(),this.options.keyboard&&(this.keyboardManager=new Y(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-WFZSW6NR.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 g.translations[t]||g.builtInLanguageLoaders&&g.builtInLanguageLoaders[t]?t:(this.log(`Language "${e}" not available, using English as fallback`),null)}createContainer(){let e=this.instanceId>1?`${g.t("player.label")} ${this.instanceId}`:g.t("player.label");this.container=h.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=h.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=h.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,T.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=se(),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=j(()=>{this.positionPlayOverlayOnMobile()},150),window.addEventListener("resize",this.debouncedPositionPlayOverlay),this.on("loadedmetadata",()=>{this.positionPlayOverlayOnMobile()}),this.on("enterfullscreen",()=>{_(()=>this.positionPlayOverlayOnMobile(),100)}),this.on("exitfullscreen",()=>{_(()=>this.positionPlayOverlayOnMobile(),100)})}positionPlayOverlayOnMobile(){if(!this.playButtonOverlay||this.element.tagName!=="VIDEO")return;if(!V()){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._pendingSource||this.element.src||this.element.querySelector("source")?.src;if(!e)throw new Error("No media source found");this.currentSource=e,this._pendingSource=null,this.audioDescriptionManager.initFromSourceElements(this.sourceElements,this.trackElements),this.originalSrc||(this.originalSrc=e);let t=ne;if(e.includes("youtube.com")||e.includes("youtu.be")){let i=await import("./vidply.YouTubeRenderer-MFC2GMAC.min.js");t=i.YouTubeRenderer||i.default}else if(e.includes("vimeo.com")){let i=await import("./vidply.VimeoRenderer-3HBMM2WR.min.js");t=i.VimeoRenderer||i.default}else if(e.includes(".m3u8")){let i=await import("./vidply.HLSRenderer-CBXZ4RF2.min.js");t=i.HLSRenderer||i.default}else if(e.includes("soundcloud.com")||e.includes("api.soundcloud.com")){let i=await import("./vidply.SoundCloudRenderer-MOR2CUFH.min.js");t=i.SoundCloudRenderer||i.default}this.log(`Using ${t?.name||"HTML5Renderer"} renderer`),this.renderer=new t(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"),this._isAudioContent&&this.container?this.container.classList.add("vidply-audio-content"):this.container&&this.container.classList.remove("vidply-audio-content")}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))}isExternalRendererUrl(e){return e?e.includes("youtube.com")||e.includes("youtu.be")||e.includes("vimeo.com")||e.includes("soundcloud.com")||e.includes("api.soundcloud.com")||e.includes(".m3u8"):!1}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(o=>o.remove()),this.invalidateTrackCache();let a=this.isExternalRendererUrl(e.src);if(a&&(this._switchingRenderer=!0),a?(this.element.removeAttribute("src"),this.element.querySelectorAll("source").forEach(n=>n.removeAttribute("src"))):(this.element.src=e.src,e.type&&(this.element.type=e.type)),this._pendingSource=e.src,this._isAudioContent=e.type&&e.type.startsWith("audio/"),this.container&&(this._isAudioContent?this.container.classList.add("vidply-audio-content"):this.container.classList.remove("vidply-audio-content")),e.poster&&this.element.tagName==="VIDEO")if(this._isAudioContent){if(this.element.removeAttribute("poster"),this.videoWrapper){let o=this.resolvePosterPath(e.poster);this.videoWrapper.style.setProperty("--vidply-poster-image",`url("${o}")`),this.videoWrapper.classList.add("vidply-forced-poster")}}else this.element.poster=this.resolvePosterPath(e.poster),this.videoWrapper&&(this.videoWrapper.classList.remove("vidply-forced-poster"),this.videoWrapper.style.removeProperty("--vidply-poster-image"));e.tracks&&e.tracks.length>0&&(e.tracks.forEach(o=>{let n=document.createElement("track");n.src=o.src,n.kind=o.kind||"captions",n.srclang=o.srclang||"en",n.label=o.label||o.srclang,o.default&&(n.default=!0),o.describedSrc&&n.setAttribute("data-desc-src",o.describedSrc);let l=this.element.firstChild;l&&l.nodeType===Node.ELEMENT_NODE&&l.tagName!=="TRACK"?this.element.insertBefore(n,l):this.element.appendChild(n)}),this.invalidateTrackCache());let r=this.state.signLanguageEnabled,c=this.state.audioDescriptionEnabled;this.audioDescriptionSrc=e.audioDescriptionSrc||null,this.signLanguageSrc=e.signLanguageSrc||null,this.originalSrc=e.src,this.audioDescriptionManager&&(this.audioDescriptionManager.updateSources(e.audioDescriptionSrc),this.audioDescriptionManager.reinitialize()),this.signLanguageManager&&this.signLanguageManager.updateSources(e.signLanguageSrc,e.signLanguageSources),c&&this.disableAudioDescription(),r&&this.disableSignLanguage();let u=this.shouldChangeRenderer(e.src);if(u&&this.renderer&&(this.renderer.destroy(),this.renderer=null),!this.renderer||u?await this.initializeRenderer():(this.renderer.media=this.element,this.element.load()),a?setTimeout(()=>{this._switchingRenderer=!1},500):this._switchingRenderer=!1,window.scrollTo(t,i),this.captionManager&&(this.captionManager.destroy(),this.captionManager=new H(this)),this.transcriptManager){let o=this.transcriptManager.isVisible;this.transcriptManager.destroy(),this.transcriptManager=null,await this.ensureTranscriptManager(),o&&this.controlBar&&this.controlBar.hasCaptionTracks()&&this.transcriptManager?.showTranscript()}this.controlBar&&this.updateControlBar(),window.scrollTo(t,i),r&&this.signLanguageSrc&&setTimeout(()=>{this.enableSignLanguage(),window.scrollTo(t,i)},150),c&&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"),a=e.includes("soundcloud.com")||e.includes("api.soundcloud.com"),r=this.renderer.constructor.name;return!!(t&&r!=="YouTubeRenderer"||i&&r!=="VimeoRenderer"||s&&r!=="HLSRenderer"||a&&r!=="SoundCloudRenderer"||!t&&!i&&!s&&!a&&r!=="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 a=s.track;if(!(!a||!a.cues))for(let r=0;r<a.cues.length;r++){let c=a.cues[r],u=this.stripVTTFormatting(c.text);if(u===i)return c.startTime;let o=i.split(/\s+/).filter(l=>l.length>2),n=u.split(/\s+/).filter(l=>l.length>2);if(o.length>0&&n.length>0&&o.filter(p=>n.includes(p)).length/o.length>=.8)return c.startTime}}return null}async enableAudioDescription(){return this.audioDescriptionManager.enable()}async _legacyEnableAudioDescription(){let e=this.sourceElements.some(n=>n.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,a=!s&&i===0,r=null;if(this.captionManager&&this.captionManager.currentTrack){let n=this.captionManager.currentTrack.track;if(n&&n.activeCues&&n.activeCues.length>0){let l=n.activeCues[0];r=this.stripVTTFormatting(l.text)}}let c=this.resolvePosterPath(this.element.getAttribute("poster")||this.element.poster||this.options.poster);a&&this.showPosterOverlay();let u=[];if(this.audioDescriptionSourceElement){let n=this.element.currentSrc||this.element.src,l=this.sourceElements,d=null,p=this.audioDescriptionSrc;for(let b of l){let v=b.getAttribute("src"),E=b.getAttribute("data-desc-src"),M=v?v.split("/").pop():"",S=n?n.split("/").pop():"";if(n&&(n===v||n.includes(v)||n.includes(M)||M&&S===M)){d=b,E?p=E:v&&(p=this.audioDescriptionSrc||p);break}}if(!d){d=this.audioDescriptionSourceElement;let b=d.getAttribute("data-desc-src");b&&(p=b)}if(this.audioDescriptionCaptionTracks.length>0){let b=this.audioDescriptionCaptionTracks.map(async M=>{if(M.trackElement&&M.describedSrc)if(M.explicit===!0)try{let S=await this.validateTrackExists(M.describedSrc);return{trackInfo:M,exists:S}}catch{return{trackInfo:M,exists:!1}}else return{trackInfo:M,exists:!1};return{trackInfo:M,exists:!1}}),v=await Promise.all(b),E=v.filter(M=>M.exists);if(E.length>0){let M=new Map;E.forEach(({trackInfo:P})=>{let B=P.trackElement.track;B?M.set(P,{wasShowing:B.mode==="showing",wasHidden:B.mode==="hidden"}):M.set(P,{wasShowing:!1,wasHidden:!1})});let S=E.map(({trackInfo:P})=>{let B=P.trackElement.getAttribute("src"),$=P.trackElement.parentNode,ee=P.trackElement.nextSibling,A={};return Array.from(P.trackElement.attributes).forEach(D=>{A[D.name]=D.value}),{trackInfo:P,oldSrc:B,parent:$,nextSibling:ee,attributes:A}});S.forEach(({trackInfo:P})=>{P.trackElement.remove()}),this.element.load(),await new Promise(P=>{setTimeout(()=>{S.forEach(({trackInfo:$,oldSrc:ee,parent:A,nextSibling:D,attributes:F})=>{u.push($);let I=document.createElement("track");I.setAttribute("src",$.describedSrc),Object.keys(F).forEach(q=>{q!=="src"&&q!=="data-desc-src"&&I.setAttribute(q,F[q])}),D&&D.parentNode?A.insertBefore(I,D):A.appendChild(I),$.trackElement=I}),this.invalidateTrackCache();let B=()=>{this.setManagedTimeout(()=>{u.forEach($=>{let A=$.trackElement.track;if(A){let D=M.get($)||{wasShowing:!1,wasHidden:!1};A.mode="hidden";let F=()=>{D.wasShowing||D.wasHidden?A.mode="hidden":A.mode="disabled"};A.readyState>=2?F():(A.addEventListener("load",F,{once:!0}),A.addEventListener("error",F,{once:!0}))}})},300)};this.element.readyState>=1?setTimeout(B,200):(this.element.addEventListener("loadedmetadata",B,{once:!0}),setTimeout(B,2e3)),P()},100)});let C=v.length-E.length}}let y=this.sourceElements,f=[];y.forEach(b=>{let v=b.getAttribute("data-desc-src"),E=b.getAttribute("src");if(v){let M=b.getAttribute("type"),S=b.getAttribute("data-orig-src");S||(S=E),f.push({src:v,type:M,origSrc:S,descSrc:v})}else{let M=b.getAttribute("type"),S=b.getAttribute("src");f.push({src:S,type:M,origSrc:null,descSrc:null})}});let L=this.element.hasAttribute("src"),m=L?this.element.getAttribute("src"):null;L&&this.element.removeAttribute("src"),y.forEach(b=>{b.remove()}),f.forEach(b=>{let v=document.createElement("source");v.setAttribute("src",b.src),b.type&&v.setAttribute("type",b.type),b.origSrc&&v.setAttribute("data-orig-src",b.origSrc),b.descSrc&&v.setAttribute("data-desc-src",b.descSrc);let E=this.element.querySelector("track");E?this.element.insertBefore(v,E):this.element.appendChild(v)}),this._sourceElementsDirty=!0,this._sourceElementsCache=null,c&&this.element.tagName==="VIDEO"&&(this.element.poster=c),this.element.load(),await new Promise(b=>{let v=()=>{this.element.removeEventListener("loadedmetadata",v),b()};this.element.readyState>=1?b():this.element.addEventListener("loadedmetadata",v)}),await new Promise(b=>setTimeout(b,300)),(i>0||s)&&await new Promise(b=>{let v=()=>{this.element.removeEventListener("canplay",v),this.element.removeEventListener("canplaythrough",v),b()};this.element.readyState>=3?b():(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),b()},3e3))});let k=i;if(r&&this.captionManager&&this.captionManager.tracks.length>0){await new Promise(v=>setTimeout(v,500));let b=this.findMatchingCaptionTime(r,this.captionManager.tracks);b!==null&&(k=b,this.options.debug&&console.log(`[VidPly] Syncing via caption: ${i}s -> ${k}s`))}if(k>0&&(this.seek(k),await new Promise(b=>setTimeout(b,100))),s?(await this.play(),this.setManagedTimeout(()=>{this.hidePosterOverlay()},100)):(this.pause(),a||this.hidePosterOverlay()),!this._audioDescriptionDesiredState)return;this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled")}else{if(this.audioDescriptionCaptionTracks.length>0){let d=this.audioDescriptionCaptionTracks.map(async f=>{if(f.trackElement&&f.describedSrc)if(f.explicit===!0)try{let L=await this.validateTrackExists(f.describedSrc);return{trackInfo:f,exists:L}}catch{return{trackInfo:f,exists:!1}}else return{trackInfo:f,exists:!1};return{trackInfo:f,exists:!1}}),y=(await Promise.all(d)).filter(f=>f.exists);if(y.length>0){let f=new Map;y.forEach(({trackInfo:m})=>{let k=m.trackElement.track;k?f.set(m,{wasShowing:k.mode==="showing",wasHidden:k.mode==="hidden"}):f.set(m,{wasShowing:!1,wasHidden:!1})});let L=y.map(({trackInfo:m})=>{let k=m.trackElement.getAttribute("src"),b=m.trackElement.parentNode,v=m.trackElement.nextSibling,E={};return Array.from(m.trackElement.attributes).forEach(M=>{E[M.name]=M.value}),{trackInfo:m,oldSrc:k,parent:b,nextSibling:v,attributes:E}});L.forEach(({trackInfo:m})=>{m.trackElement.remove()}),this.element.load(),setTimeout(()=>{L.forEach(({trackInfo:k,oldSrc:b,parent:v,nextSibling:E,attributes:M})=>{u.push(k);let S=document.createElement("track");S.setAttribute("src",k.describedSrc),Object.keys(M).forEach(P=>{P!=="src"&&P!=="data-desc-src"&&S.setAttribute(P,M[P])});let C=v.firstChild;C&&C.nodeType===Node.ELEMENT_NODE&&C.tagName!=="TRACK"?v.insertBefore(S,C):E&&E.parentNode?v.insertBefore(S,E):v.appendChild(S),k.trackElement=S}),this.element.load();let m=()=>{setTimeout(()=>{u.forEach(k=>{let v=k.trackElement.track;if(v){let E=f.get(k)||{wasShowing:!1,wasHidden:!1};v.mode="hidden";let M=()=>{E.wasShowing||E.wasHidden?v.mode="hidden":v.mode="disabled"};v.readyState>=2?M():(v.addEventListener("load",M,{once:!0}),v.addEventListener("error",M,{once:!0}))}})},300)};this.element.readyState>=1?setTimeout(m,200):(this.element.addEventListener("loadedmetadata",m,{once:!0}),setTimeout(m,2e3))},100)}}let n=this.sourceElements;if(n.some(d=>d.getAttribute("data-desc-src"))){let d=[];n.forEach(p=>{let y=p.getAttribute("data-desc-src"),f=p.getAttribute("src");if(y){let L=p.getAttribute("type"),m=p.getAttribute("data-orig-src");m||(m=f),d.push({src:y,type:L,origSrc:m,descSrc:y})}else{let L=p.getAttribute("type"),m=p.getAttribute("src");d.push({src:m,type:L,origSrc:null,descSrc:null})}}),n.forEach(p=>{p.remove()}),d.forEach(p=>{let y=document.createElement("source");y.setAttribute("src",p.src),p.type&&y.setAttribute("type",p.type),p.origSrc&&y.setAttribute("data-orig-src",p.origSrc),p.descSrc&&y.setAttribute("data-desc-src",p.descSrc),this.element.appendChild(y)}),c&&this.element.tagName==="VIDEO"&&(this.element.poster=c),this.element.load(),this.invalidateTrackCache()}else c&&this.element.tagName==="VIDEO"&&(this.element.poster=c),this.element.src=this.audioDescriptionSrc}await new Promise(n=>{let l=()=>{this.element.removeEventListener("loadedmetadata",l),n()};this.element.readyState>=1?n():this.element.addEventListener("loadedmetadata",l)}),(i>0||s)&&await new Promise(n=>{let l=()=>{this.element.removeEventListener("canplay",l),this.element.removeEventListener("canplaythrough",l),n()};this.element.readyState>=3?n():(this.element.addEventListener("canplay",l,{once:!0}),this.element.addEventListener("canplaythrough",l,{once:!0}),setTimeout(()=>{this.element.removeEventListener("canplay",l),this.element.removeEventListener("canplaythrough",l),n()},3e3))}),this.element.tagName==="VIDEO"&&i===0&&!s&&this.element.readyState>=1&&(this.element.currentTime=.001,this.setManagedTimeout(()=>{this.element.currentTime=0},10));let o=i;if(r&&this.captionManager&&this.captionManager.tracks.length>0){await new Promise(l=>setTimeout(l,500));let n=this.findMatchingCaptionTime(r,this.captionManager.tracks);n!==null&&(o=n,this.options.debug&&console.log(`[VidPly] Syncing via caption: ${i}s -> ${o}s`))}if(o>0&&(this.seek(o),await new Promise(n=>setTimeout(n,100))),s?(await this.play(),this.setManagedTimeout(()=>{this.hidePosterOverlay()},100)):(this.pause(),a||this.hidePosterOverlay()),u.length>0&&this.captionManager){let n=this.state.captionsEnabled,l=null;if(this.captionManager.currentTrack){let p=this.captionManager.tracks.findIndex(y=>y.track===this.captionManager.currentTrack.track);p>=0&&(l={language:this.captionManager.tracks[p].language,kind:this.captionManager.tracks[p].kind})}setTimeout(()=>{if(this.captionManager.tracks=[],this.captionManager.loadTracks(),n&&l&&this.captionManager.tracks.length>0){let p=this.captionManager.tracks.findIndex(y=>y.language===l.language&&y.kind===l.kind);if(p>=0){let y=this.captionManager.tracks[p];if(y.track.readyState>=2)this.captionManager.enable(p);else{let f=()=>{y.track.removeEventListener("load",f),y.track.removeEventListener("error",f),this.captionManager&&this.captionManager.tracks.includes(y)&&this.captionManager.enable(p)};y.track.addEventListener("load",f,{once:!0}),y.track.addEventListener("error",f,{once:!0}),y.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(y)&&this.captionManager.enable(p)},1e3)}}else if(this.captionManager.tracks.length>0){let y=this.captionManager.tracks[0];if(y.track.readyState>=2)this.captionManager.enable(0);else{let f=()=>{y.track.removeEventListener("load",f),y.track.removeEventListener("error",f),this.captionManager&&this.captionManager.tracks.includes(y)&&this.captionManager.enable(0)};y.track.addEventListener("load",f,{once:!0}),y.track.addEventListener("error",f,{once:!0}),y.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(y)&&this.captionManager.enable(0)},1e3)}}}},600)}if(this.transcriptManager&&this.transcriptManager.isVisible){let n=typeof u<"u"?u:[];if(n.length>0){let l=()=>{this.invalidateTrackCache();let p=this.textTracks,y=n.map(m=>{let k=m.trackElement,b=k.getAttribute("src"),v=k.getAttribute("srclang"),E=k.getAttribute("kind"),M=p.find(S=>k.track===S);if(M||(M=p.find(S=>{if(S.language===v&&(S.kind===E||E==="captions"&&S.kind==="subtitles")){let C=this.findTrackElement(S);if(C&&C.getAttribute("src")===b)return!0}return!1})),M){let S=this.findTrackElement(M);if(S&&S.getAttribute("src")!==b)return null}return M}).filter(Boolean);if(y.length===0){this.setManagedTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},1e3);return}y.forEach(m=>{m.mode==="disabled"&&(m.mode="hidden")});let f=0,L=()=>{f++,f>=y.length&&this.setManagedTimeout(()=>{if(this.transcriptManager&&this.transcriptManager.loadTranscriptData){this.invalidateTrackCache();let m=this.textTracks,k=n.map(v=>v.describedSrc);(y.some(v=>{let E=this.findTrackElement(v);return E&&k.includes(E.getAttribute("src"))})||y.length>0)&&this.transcriptManager.loadTranscriptData()}},800)};y.forEach(m=>{m.mode==="disabled"&&(m.mode="hidden");let k=this.findTrackElement(m),b=k?k.getAttribute("src"):null,v=n.find(M=>{let S=M.trackElement;return S&&(S.track===m||S.getAttribute("srclang")===m.language&&S.getAttribute("kind")===m.kind)}),E=v?v.describedSrc:null;if(E&&b&&b!==E){L();return}if(m.readyState>=2&&m.cues&&m.cues.length>0)L();else{m.mode==="disabled"&&(m.mode="hidden");let M=()=>{this.setManagedTimeout(L,300)};m.readyState>=2?this.setManagedTimeout(()=>{m.cues&&m.cues.length>0?L():m.addEventListener("load",M,{once:!0})},100):(m.addEventListener("load",M,{once:!0}),m.addEventListener("error",()=>{L()},{once:!0}))}})};this.setManagedTimeout(()=>{this.element.readyState>=1?l():(this.element.addEventListener("loadedmetadata",l,{once:!0}),this.setManagedTimeout(l,2e3))},500),setTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},5e3)}else setTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},800)}a||this.hidePosterOverlay(),this._audioDescriptionDesiredState&&(this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled"))}async disableAudioDescription(){return this.audioDescriptionManager.disable()}async _legacyDisableAudioDescription(){if(!this.originalSrc)return;let e=this.element.currentTime,t=this.state.playing,i=null;if(this.captionManager&&this.captionManager.currentTrack){let o=this.captionManager.currentTrack.track;if(o&&o.activeCues&&o.activeCues.length>0){let n=o.activeCues[0];i=this.stripVTTFormatting(n.text)}}let s=this.resolvePosterPath(this.element.getAttribute("poster")||this.element.poster||this.options.poster),a=[];if(this.audioDescriptionCaptionTracks.length>0){let o=this.audioDescriptionCaptionTracks.map(n=>{let l=n.trackElement;if(!l||!l.parentNode)return null;let d=l.parentNode,p=l.nextSibling,y={};return Array.from(l.attributes).forEach(f=>{y[f.name]=f.value}),{trackInfo:n,parent:d,nextSibling:p,attributes:y}}).filter(Boolean);o.forEach(({trackInfo:n})=>{n.trackElement&&n.trackElement.parentNode&&n.trackElement.remove()}),this.element.load(),await new Promise(n=>{setTimeout(()=>{o.forEach(({trackInfo:l,parent:d,nextSibling:p,attributes:y})=>{a.push(l);let f=document.createElement("track");f.setAttribute("src",l.originalTrackSrc),Object.keys(y).forEach(L=>{L!=="src"&&L!=="data-desc-src"&&f.setAttribute(L,y[L])}),l.describedSrc&&f.setAttribute("data-desc-src",l.describedSrc),p&&p.parentNode?d.insertBefore(f,p):d.appendChild(f),l.trackElement=f}),this.invalidateTrackCache(),n()},100)})}let r=this.sourceElements;if(r.some(o=>o.getAttribute("data-orig-src"))){let o=[];r.forEach(d=>{let p=d.getAttribute("data-orig-src"),y=d.getAttribute("data-desc-src");if(p){let f=d.getAttribute("type");o.push({src:p,type:f,origSrc:p,descSrc:y})}else{let f=d.getAttribute("type"),L=d.getAttribute("src");o.push({src:L,type:f,origSrc:null,descSrc:y})}});let n=this.element.hasAttribute("src"),l=n?this.element.getAttribute("src"):null;n&&this.element.removeAttribute("src"),r.forEach(d=>{d.remove()}),o.forEach(d=>{let p=document.createElement("source");p.setAttribute("src",d.src),d.type&&p.setAttribute("type",d.type),d.origSrc&&p.setAttribute("data-orig-src",d.origSrc),d.descSrc&&p.setAttribute("data-desc-src",d.descSrc);let y=this.element.querySelector("track");y?this.element.insertBefore(p,y):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 o=this.originalAudioDescriptionSource||this.originalSrc;this.element.src=o,this.element.load()}await new Promise(o=>{let n=()=>{this.element.removeEventListener("loadedmetadata",n),o()};this.element.readyState>=1?o():this.element.addEventListener("loadedmetadata",n)}),(e>0||t)&&await new Promise(o=>{let n=()=>{this.element.removeEventListener("canplay",n),this.element.removeEventListener("canplaythrough",n),o()};this.element.readyState>=3?o():(this.element.addEventListener("canplay",n,{once:!0}),this.element.addEventListener("canplaythrough",n,{once:!0}),setTimeout(()=>{this.element.removeEventListener("canplay",n),this.element.removeEventListener("canplaythrough",n),o()},3e3))});let u=e;if(i&&this.captionManager&&this.captionManager.tracks.length>0){await new Promise(n=>setTimeout(n,500));let o=this.findMatchingCaptionTime(i,this.captionManager.tracks);o!==null&&(u=o,this.options.debug&&console.log(`[VidPly] Syncing via caption: ${e}s -> ${u}s`))}if(u>0&&(this.seek(u),await new Promise(o=>setTimeout(o,100))),t?(await this.play(),this.hidePosterOverlay()):(this.pause(),!t&&u===0?this.showPosterOverlay():this.hidePosterOverlay()),a.length>0&&this.captionManager){let o=this.state.captionsEnabled,n=null;if(this.captionManager.currentTrack){let d=this.captionManager.tracks.findIndex(p=>p.track===this.captionManager.currentTrack.track);d>=0&&(n={language:this.captionManager.tracks[d].language,kind:this.captionManager.tracks[d].kind})}setTimeout(()=>{if(this.captionManager.tracks=[],this.captionManager.loadTracks(),o&&n&&this.captionManager.tracks.length>0){let d=this.captionManager.tracks.findIndex(p=>p.language===n.language&&p.kind===n.kind);if(d>=0){let p=this.captionManager.tracks[d];if(p.track.readyState>=2)this.captionManager.enable(d);else{let y=()=>{p.track.removeEventListener("load",y),p.track.removeEventListener("error",y),this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(d)};p.track.addEventListener("load",y,{once:!0}),p.track.addEventListener("error",y,{once:!0}),p.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(d)},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 y=()=>{p.track.removeEventListener("load",y),p.track.removeEventListener("error",y),this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(0)};p.track.addEventListener("load",y,{once:!0}),p.track.addEventListener("error",y,{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(){return this.audioDescriptionManager.toggle()}enableSignLanguage(){return this.signLanguageManager.enable()}_legacyEnableSignLanguage(){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 l=this.captionManager.currentTrack.language?.toLowerCase().split("-")[0];l&&this.signLanguageSources[l]&&(i=l,s=this.signLanguageSources[l])}if(!i&&this.options.language){let l=this.options.language.toLowerCase().split("-")[0];this.signLanguageSources[l]&&(i=l,s=this.signLanguageSources[l])}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",g.t("player.signLanguageDragResize")),this.signLanguageHeader=h.createElement("div",{className:`${this.options.classPrefix}-sign-language-header`,attributes:{tabindex:"0"}});let a=h.createElement("div",{className:`${this.options.classPrefix}-sign-language-header-left`}),r=h.createElement("h3",{textContent:g.t("player.signLanguageVideo")}),c=g.t("player.signLanguageSettings");if(this.signLanguageSettingsButton=h.createElement("button",{className:`${this.options.classPrefix}-sign-language-settings`,attributes:{type:"button","aria-label":c,"aria-expanded":"false"}}),this.signLanguageSettingsButton.appendChild(w("settings")),h.attachTooltip(this.signLanguageSettingsButton,c,this.options.classPrefix),this.signLanguageSettingsHandlers={settingsClick:l=>{if(l.preventDefault(),l.stopPropagation(),this.signLanguageDocumentClickHandler){let d=this.signLanguageSettingsMenuJustOpened;this.signLanguageSettingsMenuJustOpened=!0,setTimeout(()=>{this.signLanguageSettingsMenuJustOpened=d},100)}this.signLanguageSettingsMenuVisible?this.hideSignLanguageSettingsMenu():this.showSignLanguageSettingsMenu()},settingsKeydown:l=>{l.key==="d"||l.key==="D"?(l.preventDefault(),l.stopPropagation(),this.toggleSignLanguageKeyboardDragMode()):l.key==="r"||l.key==="R"?(l.preventDefault(),l.stopPropagation(),this.toggleSignLanguageResizeMode()):l.key==="Escape"&&this.signLanguageSettingsMenuVisible&&(l.preventDefault(),l.stopPropagation(),this.hideSignLanguageSettingsMenu())}},this.signLanguageSettingsButton.addEventListener("click",this.signLanguageSettingsHandlers.settingsClick),this.signLanguageSettingsButton.addEventListener("keydown",this.signLanguageSettingsHandlers.settingsKeydown),a.appendChild(this.signLanguageSettingsButton),this.signLanguageSelector=null,e){let l=`${this.options.classPrefix}-sign-language-select-${Date.now()}`,d=Object.keys(this.signLanguageSources).map(L=>({value:L,text:this.getSignLanguageLabel(L),selected:L===i})),{label:p,select:y}=U({classPrefix:this.options.classPrefix,labelClass:`${this.options.classPrefix}-sign-language-label`,selectClass:`${this.options.classPrefix}-sign-language-select`,labelText:"settings.language",selectId:l,options:d,onChange:L=>{L.stopPropagation();let m=L.target.value;this.switchSignLanguage(m)}});this.signLanguageSelector=y;let f=h.createElement("div",{className:`${this.options.classPrefix}-sign-language-selector-wrapper`});f.appendChild(p),f.appendChild(this.signLanguageSelector),Q(f),a.appendChild(f)}a.appendChild(r);let u=g.t("player.closeSignLanguage"),o=h.createElement("button",{className:`${this.options.classPrefix}-sign-language-close`,attributes:{type:"button","aria-label":u}});o.appendChild(w("close")),h.attachTooltip(o,u,this.options.classPrefix),o.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(a),this.signLanguageHeader.appendChild(o),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",g.t("player.signLanguage")),this.signLanguageVideo.muted=!0,this.signLanguageVideo.setAttribute("playsinline",""),this.signLanguageResizeHandles=["n","s","e","w","ne","nw","se","sw"].map(l=>{let d=h.createElement("div",{className:`${this.options.classPrefix}-sign-resize-handle ${this.options.classPrefix}-sign-resize-${l}`,attributes:{"data-direction":l,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return d.style.display="none",d}),this.signLanguageWrapper.appendChild(this.signLanguageHeader),this.signLanguageWrapper.appendChild(this.signLanguageVideo),this.signLanguageResizeHandles.forEach(l=>this.signLanguageWrapper.appendChild(l));let n=this.storage.getSignLanguagePreferences();n&&n.size&&n.size.width?this.signLanguageWrapper.style.width=n.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 l=this.captionManager.currentTrack.language?.toLowerCase().split("-")[0];l&&this.signLanguageSources[l]&&this.currentSignLanguage!==l&&(this.switchSignLanguage(l),this.signLanguageSelector.value=l)}},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(){return this.signLanguageManager.disable()}toggleSignLanguage(){return this.signLanguageManager.toggle()}setupSignLanguageInteraction(){return this.signLanguageManager._setupInteraction()}_legacySetupSignLanguageInteraction(){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 K(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:g.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){return this.signLanguageManager.switchLanguage(e)}_legacySwitchSignLanguage(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(){return this.signLanguageManager.showSettingsMenu()}_legacyShowSignLanguageSettingsMenu(){if(this.signLanguageSettingsMenuJustOpened=!0,setTimeout(()=>{this.signLanguageSettingsMenuJustOpened=!1},350),this.signLanguageDocumentClickHandlerAdded||(this.signLanguageDocumentClickHandler=n=>{this.signLanguageSettingsMenuJustOpened||this.signLanguageSettingsButton&&(this.signLanguageSettingsButton===n.target||this.signLanguageSettingsButton.contains(n.target))||this.signLanguageSettingsMenu&&this.signLanguageSettingsMenu.contains(n.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=R(this.signLanguageSettingsMenu,this.signLanguageSettingsButton,`.${this.options.classPrefix}-sign-language-settings-item`,()=>this.hideSignLanguageSettingsMenu({focusButton:!0})),this.positionSignLanguageSettingsMenu(),this.updateSignLanguageDragOptionState(),this.updateSignLanguageResizeOptionState(),N(this.signLanguageSettingsMenu,`.${this.options.classPrefix}-sign-language-settings-item`);return}this.signLanguageSettingsMenu=h.createElement("div",{className:`${this.options.classPrefix}-sign-language-settings-menu`,attributes:{role:"menu"}});let e=O({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=O({classPrefix:this.options.classPrefix,itemClass:`${this.options.classPrefix}-sign-language-settings-item`,icon:"resize",label:"player.enableSignResizeMode",hasTextClass:!0,onClick:n=>{n.preventDefault(),n.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 a=s.querySelector(`.${this.options.classPrefix}-tooltip`);a&&a.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 c=O({classPrefix:this.options.classPrefix,itemClass:`${this.options.classPrefix}-sign-language-settings-item`,icon:"close",label:"transcript.closeMenu",onClick:()=>{this.hideSignLanguageSettingsMenu()}}),u=c.querySelector(`.${this.options.classPrefix}-tooltip`);u&&u.remove();let o=c.querySelector(`.${this.options.classPrefix}-button-text`);o&&o.remove(),this.signLanguageSettingsMenu.appendChild(e),this.signLanguageSettingsMenu.appendChild(s),this.signLanguageSettingsMenu.appendChild(c),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=R(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(),N(this.signLanguageSettingsMenu,`.${this.options.classPrefix}-sign-language-settings-item`)}hideSignLanguageSettingsMenu({focusButton:e=!0}={}){return this.signLanguageManager.hideSettingsMenu({focusButton:e})}positionSignLanguageSettingsMenuImmediate(){if(!this.signLanguageSettingsMenu||!this.signLanguageSettingsButton)return;let e=this.signLanguageSettingsButton.getBoundingClientRect(),t=this.signLanguageSettingsMenu.getBoundingClientRect(),i=window.innerWidth,s=window.innerHeight,a=this.signLanguageSettingsButton.parentElement;if(!a)return;let r=a.getBoundingClientRect(),c=e.left+e.width/2-r.left,u=e.bottom-r.top,o=e.top-r.top,n=e.top,l=s-e.bottom,d=u+8,p=null;l<t.height+20&&n>l?(d=null,p=r.bottom-r.top-o+8,this.signLanguageSettingsMenu.classList.add("vidply-menu-above")):this.signLanguageSettingsMenu.classList.remove("vidply-menu-above");let y=c-t.width/2,f="auto",L="translateX(0)",m=e.left+e.width/2-t.width/2;m<10?(y=0,L="translateX(0)"):m+t.width>i-10?(y="auto",f=0,L="translateX(0)"):(y=c,L="translateX(-50%)"),d!==null?(this.signLanguageSettingsMenu.style.top=`${d}px`,this.signLanguageSettingsMenu.style.bottom="auto"):p!==null&&(this.signLanguageSettingsMenu.style.top="auto",this.signLanguageSettingsMenu.style.bottom=`${p}px`),y!=="auto"?(this.signLanguageSettingsMenu.style.left=`${y}px`,this.signLanguageSettingsMenu.style.right="auto"):(this.signLanguageSettingsMenu.style.left="auto",this.signLanguageSettingsMenu.style.right=`${f}px`),this.signLanguageSettingsMenu.style.transform=L}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=R(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?g.t("player.disableSignDragMode"):g.t("player.enableSignDragMode"),i=e?g.t("player.disableSignDragModeAria"):g.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?g.t("player.disableSignResizeMode"):g.t("player.enableSignResizeMode"),i=e?g.t("player.disableSignResizeModeAria"):g.t("player.enableSignResizeModeAria");this.signLanguageResizeOptionButton.setAttribute("aria-checked",e?"true":"false"),this.signLanguageResizeOptionButton.setAttribute("aria-label",i),this.signLanguageResizeOptionText&&(this.signLanguageResizeOptionText.textContent=t)}constrainSignLanguagePosition(){return this.signLanguageManager.constrainPosition()}saveSignLanguagePreferences(){return this.signLanguageManager.savePreferences()}_legacyConstrainSignLanguagePosition(){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,a=e.top-t.top,r=e.width,c=e.height,u=i.width||280,o=i.height||280*9/16,n,l,d=16,p=95;switch(this.signLanguageDesiredPosition||"bottom-right"){case"bottom-right":n=s+r-u-d,l=a+c-o-p;break;case"bottom-left":n=s+d,l=a+c-o-p;break;case"top-right":n=s+r-u-d,l=a+d;break;case"top-left":n=s+d,l=a+d;break;default:n=s+r-u-d,l=a+c-o-p}n=Math.max(s,Math.min(n,s+r-u)),l=Math.max(a,Math.min(l,a+c-o-p)),this.signLanguageWrapper.style.left=`${n}px`,this.signLanguageWrapper.style.top=`${l}px`,this.signLanguageWrapper.style.right="auto",this.signLanguageWrapper.style.bottom="auto",this.signLanguageWrapper.classList.remove(...Array.from(this.signLanguageWrapper.classList).filter(f=>f.startsWith("vidply-sign-position-")))}_legacySaveSignLanguagePreferences(){this.signLanguageWrapper&&this.storage.saveSignLanguagePreferences({size:{width:this.signLanguageWrapper.style.width}})}cleanupSignLanguage(){return this.signLanguageManager.cleanup()}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){if(this._switchingRenderer){this.log("Suppressing error during renderer switch:",e,"debug");return}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(a=>({start:a.startTime,end:a.endTime,text:a.text}))),s.forEach(a=>{this.handleMetadataCue(a)})},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",a=e.querySelector(i);a&&!a.dataset.vidplyAlertTitleOriginal&&(a.dataset.vidplyAlertTitleOriginal=a.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",a=e.querySelector(i);a&&a.dataset.vidplyAlertTitleOriginal&&(a.textContent=a.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 a=t.show!==void 0?t.show:i.show!==!1;if(a){let o=i.display||s.dataset.vidplyAlertDisplay||"block";s.style.display=o,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 c=t.focus!==void 0?t.focus:i.focusOnShow??t.reason!=="focus";a&&c&&(s.tabIndex===-1&&!s.hasAttribute("tabindex")&&s.setAttribute("tabindex","-1"),s.focus({preventScroll:!0})),a&&i.autoScroll!==!1&&t.autoScroll!==!1&&s.scrollIntoView({behavior:"smooth",block:"nearest"});let u=i.continueButton;if(u){let o=null;if(u==="self"||s.matches(u)?o=s:o=s.querySelector(u)||document.querySelector(u),o&&!this.metadataAlertHandlers.has(e)){let n=()=>{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 d=i.focusTarget||"playButton";this.setManagedTimeout(()=>{this.focusMetadataTarget(d,s)},i.focusDelay??100)};o.addEventListener("click",n),this.metadataAlertHandlers.set(e,{button:o,handler:n})}}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 a=this.normalizeMetadataSelector(s.alert||s.selector||s.target);if(!a)return;let r=document.querySelector(a);if(!r){this.options.debug&&this.log("[Metadata] Hashtag target not found:",a);return}if(this.options.debug&&this.log("[Metadata] Handling hashtag",i,{selector:a,config:s}),this.cacheMetadataAlertContent(r,s),s.title){let o=s.titleSelector||"[data-vidply-alert-title], h3, header",n=r.querySelector(o);n&&(n.textContent=s.title)}if(s.message){let o=s.messageSelector||"[data-vidply-alert-message], p",n=r.querySelector(o);n&&(n.textContent=s.message)}let c=s.show!==!1,u=s.focus!==void 0?s.focus:!1;this.handleMetadataAlert(a,{element:r,show:c,focus:u,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 a=i[1],r=this.normalizeMetadataSelector(a),c=r?document.querySelector(r):null;c?(this.options.debug&&this.log("[Metadata] Focusing element:",r),c.tabIndex===-1&&!c.hasAttribute("tabindex")&&c.setAttribute("tabindex","-1"),this.setManagedTimeout(()=>{c.focus({preventScroll:!0})},10)):this.options.debug&&this.log("[Metadata] Element not found:",r||a),this.emit("metadata:focus",{time:e.startTime,target:a,selector:r,element:c,text:t}),r&&this.handleMetadataAlert(r,{element:c,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))}};z.instances=[];var le=0,ie=class{constructor(e,t={}){this.player=e,this.tracks=[],this.initialTracks=Array.isArray(t.tracks)?t.tracks:[],this.currentIndex=-1,this.instanceId=++le,this.uniqueId=`vidply-playlist-${this.instanceId}`,this.options={autoAdvance:t.autoAdvance!==!1,autoPlayFirst:t.autoPlayFirst!==!1,loop:t.loop||!1,showPanel:t.showPanel!==!1,recreatePlayers:t.recreatePlayers||!1,...t},this.container=null,this.playlistPanel=null,this.trackInfoElement=null,this.navigationFeedback=null,this.isPanelVisible=this.options.showPanel!==!1,this.isChangingTrack=!1,this.hostElement=t.hostElement||null,this.PlayerClass=t.PlayerClass||null,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)}getTrackMediaType(e){let t=e.src||"";return t.includes("youtube.com")||t.includes("youtu.be")?"youtube":t.includes("vimeo.com")?"vimeo":t.includes("soundcloud.com")||t.includes("api.soundcloud.com")?"soundcloud":t.includes(".m3u8")?"hls":e.type&&e.type.startsWith("audio/")?"audio":"video"}async recreatePlayerForTrack(e,t=!1){if(!this.hostElement||!this.PlayerClass)return console.warn("VidPly Playlist: Cannot recreate player - missing hostElement or PlayerClass"),!1;let i=this.getTrackMediaType(e),s=i==="audio"?"audio":"video",a=this.isPanelVisible,r=[...this.tracks],c=this.currentIndex;this.trackArtworkElement&&this.trackArtworkElement.parentNode&&this.trackArtworkElement.parentNode.removeChild(this.trackArtworkElement),this.trackInfoElement&&this.trackInfoElement.parentNode&&this.trackInfoElement.parentNode.removeChild(this.trackInfoElement),this.navigationFeedback&&this.navigationFeedback.parentNode&&this.navigationFeedback.parentNode.removeChild(this.navigationFeedback),this.playlistPanel&&this.playlistPanel.parentNode&&this.playlistPanel.parentNode.removeChild(this.playlistPanel),this.player&&(this.player.off("ended",this.handleTrackEnd),this.player.off("error",this.handleTrackError),this.player.destroy()),this.hostElement.innerHTML="";let u=document.createElement(s);u.setAttribute("preload","metadata"),s==="video"&&e.poster&&(i==="video"||i==="hls")&&u.setAttribute("poster",e.poster);let o=["youtube","vimeo","soundcloud","hls"].includes(i);if(!o){let l=document.createElement("source");l.src=e.src,e.type&&(l.type=e.type),u.appendChild(l),e.tracks&&e.tracks.length>0&&e.tracks.forEach(d=>{let p=document.createElement("track");p.src=d.src,p.kind=d.kind||"captions",p.srclang=d.srclang||"en",p.label=d.label||d.srclang,d.default&&(p.default=!0),u.appendChild(p)})}this.hostElement.appendChild(u);let n={mediaType:s,poster:e.poster,audioDescriptionSrc:e.audioDescriptionSrc||null,audioDescriptionDuration:e.audioDescriptionDuration||null,signLanguageSrc:e.signLanguageSrc||null};if(this.player=new this.PlayerClass(u,n),this.player.playlistManager=this,await new Promise(l=>{this.player.on("ready",l)}),this.player.on("ended",this.handleTrackEnd),this.player.on("error",this.handleTrackError),this.player.container){if(this.trackArtworkElement){let l=this.player.container.querySelector(".vidply-video-wrapper");l?this.player.container.insertBefore(this.trackArtworkElement,l):this.player.container.appendChild(this.trackArtworkElement)}this.trackInfoElement&&this.player.container.appendChild(this.trackInfoElement),this.navigationFeedback&&this.player.container.appendChild(this.navigationFeedback),this.playlistPanel&&this.player.container.appendChild(this.playlistPanel)}return this.container=this.player.container,this.updatePlayerControls(),this.tracks=r,this.currentIndex=c,this.updatePlaylistUI(),this.isPanelVisible=a,this.playlistPanel&&(this.playlistPanel.style.display=a?"":"none"),o?this.player.load({src:e.src,type:e.type,poster:e.poster,tracks:e.tracks||[],audioDescriptionSrc:e.audioDescriptionSrc||null,signLanguageSrc:e.signLanguageSrc||null}):this.player.load({src:e.src,type:e.type,poster:e.poster,tracks:e.tracks||[],audioDescriptionSrc:e.audioDescriptionSrc||null,signLanguageSrc:e.signLanguageSrc||null}),t&&setTimeout(()=>{this.player.play()},100),!0}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 a=JSON.parse(s);Array.isArray(a)&&a.length>0?(console.log(`VidPly Playlist: Loaded ${a.length} tracks from data-playlist`),this.loadPlaylist(a)):console.warn("VidPly Playlist: data-playlist is not a valid array or is empty")}catch(a){console.error("VidPly Playlist: Failed to parse data-playlist attribute",a)}}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 a=e.getAttribute("data-playlist-show-panel");a!==null&&(this.options.showPanel=a==="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()}async loadTrack(e){if(e<0||e>=this.tracks.length){console.warn("VidPly Playlist: Invalid track index",e);return}let t=this.tracks[e];if(this.isChangingTrack=!0,this.currentIndex=e,this.options.recreatePlayers&&this.hostElement&&this.PlayerClass){let i=this.player?this.player.element.tagName==="AUDIO"?"audio":"video":null,s=this.getTrackMediaType(t);if(i!==(s==="audio"||s==="soundcloud"?"audio":"video")){await this.recreatePlayerForTrack(t,!1),this.updateTrackInfo(t),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:t,total:this.tracks.length}),setTimeout(()=>{this.isChangingTrack=!1},150);return}}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)}async 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];if(this.isChangingTrack=!0,this.currentIndex=e,this.options.recreatePlayers&&this.hostElement&&this.PlayerClass){let s=this.player?this.player.element.tagName==="AUDIO"?"audio":"video":null,a=this.getTrackMediaType(i);if(s!==(a==="audio"||a==="soundcloud"?"audio":"video")){await this.recreatePlayerForTrack(i,!0),this.updateTrackInfo(i),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:i,total:this.tracks.length}),setTimeout(()=>{this.isChangingTrack=!1},150);return}}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()}isExternalRendererUrl(e){return e?e.includes("youtube.com")||e.includes("youtu.be")||e.includes("vimeo.com")||e.includes("soundcloud.com")||e.includes("api.soundcloud.com")||e.includes(".m3u8"):!1}handleTrackError(e){let t=this.getCurrentTrack();t&&t.src&&this.isExternalRendererUrl(t.src)||this.isChangingTrack||(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 a=this.getEffectiveDuration(s),r=a?x.formatTime(a):"",c=t.querySelector(".vidply-playlist-duration-badge");c&&(c.textContent=r);let u=t.querySelector(".vidply-playlist-item-duration");u&&(u.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=h.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=h.createElement("div",{className:"vidply-track-info",attributes:{role:"status"}}),this.trackInfoElement.style.display="none",this.container.appendChild(this.trackInfoElement),this.navigationFeedback=h.createElement("div",{className:"vidply-sr-only",attributes:{role:"status","aria-live":"polite","aria-atomic":"true"}}),this.container.appendChild(this.navigationFeedback),this.playlistPanel=h.createElement("div",{className:"vidply-playlist-panel",attributes:{id:`${this.uniqueId}-panel`,role:"region","aria-label":g.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||g.t("playlist.untitled"),a=e.artist||"",r=this.getEffectiveDuration(e),c=r?x.formatTime(r):"",u=r?x.formatDuration(r):"",o=a?g.t("playlist.by")+a:"",n=u?`. ${u}`:"",l=g.t("playlist.nowPlaying",{current:t,total:i,title:s,artist:o})+n,d=g.t("playlist.trackOf",{current:t,total:i}),p=c?`<span class="vidply-track-duration" aria-hidden="true">${h.escapeHTML(c)}</span>`:"",y=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 Z=class{constructor(e){this.player=e,this.enabled=!1,this.desiredState=!1,this.src=e.options.audioDescriptionSrc,this.sourceElement=null,this.originalSource=null,this.captionTracks=[]}initFromSourceElements(e,t){for(let i of e){let s=i.getAttribute("data-desc-src"),a=i.getAttribute("data-orig-src");if(s||a){if(this.sourceElement||(this.sourceElement=i),a)this.originalSource||(this.originalSource=a),this.player.originalSrc||(this.player.originalSrc=a);else{let r=i.getAttribute("src");!this.originalSource&&r&&(this.originalSource=r),!this.player.originalSrc&&r&&(this.player.originalSrc=r)}s&&!this.src&&(this.src=s)}}t.forEach(i=>{let s=i.getAttribute("kind"),a=i.getAttribute("data-desc-src");(s==="captions"||s==="subtitles"||s==="chapters"||s==="descriptions")&&a&&(this.captionTracks.push({trackElement:i,originalSrc:i.getAttribute("src"),describedSrc:a,originalTrackSrc:i.getAttribute("data-orig-src")||i.getAttribute("src"),explicit:!0}),this.player.log(`Found explicit described ${s} track: ${i.getAttribute("src")} -> ${a}`))})}isAvailable(){let e=this.player.sourceElements.some(t=>t.getAttribute("data-desc-src"));return!!(this.src||e||this.captionTracks.length>0)}async enable(){let e=this.player.sourceElements.some(u=>u.getAttribute("data-desc-src")),t=this.captionTracks.length>0;if(!this.src&&!e&&!t){console.warn("VidPly: No audio description source, source elements, or tracks provided");return}this.desiredState=!0;let i=this.player.state.currentTime,s=this.player.state.playing,a=this.player.element.poster||this.player.element.getAttribute("poster")||this.player.options.poster,r=i<.1&&!s,c=this._getCurrentCaptionText();this.sourceElement?await this._enableWithSourceElement(i,s,a,r,c):await this._enableWithDirectSrc(i,s,a,r)}async disable(){if(!this.player.originalSrc)return;this.desiredState=!1;let e=this.player.state.currentTime,t=this.player.state.playing,i=this.player.element.poster||this.player.element.getAttribute("poster")||this.player.options.poster,s=e<.1&&!t,a=this._getCurrentCaptionText();this.sourceElement?await this._disableWithSourceElement(e,t,i,s,a):await this._disableWithDirectSrc(e,t,i)}async toggle(){let e=this.player.findTextTrack("descriptions"),t=this.isAvailable();e&&!t?e.mode==="showing"?(e.mode="hidden",this.enabled=!1,this.player.emit("audiodescriptiondisabled")):(e.mode="showing",this.enabled=!0,this.player.emit("audiodescriptionenabled")):e&&t?this.enabled?(this.desiredState=!1,await this.disable()):(e.mode="showing",this.desiredState=!0,await this.enable()):t&&(this.enabled?(this.desiredState=!1,await this.disable()):(this.desiredState=!0,await this.enable()))}_getCurrentCaptionText(){return this.player.captionManager&&this.player.captionManager.currentTrack&&this.player.captionManager.currentCue?this.player.captionManager.currentCue.text:null}async _validateTrackExists(e){try{return(await fetch(e,{method:"HEAD"})).ok}catch{return!1}}async _swapCaptionTracks(e=!0){if(this.captionTracks.length===0)return[];let t=[],i=this.captionTracks.map(async r=>{if(r.trackElement&&r.describedSrc&&r.explicit===!0)try{let c=await this._validateTrackExists(e?r.describedSrc:r.originalSrc);return{trackInfo:r,exists:c}}catch{return{trackInfo:r,exists:!1}}return{trackInfo:r,exists:!1}}),a=(await Promise.all(i)).filter(r=>r.exists);if(a.length>0){let r=new Map;a.forEach(({trackInfo:u})=>{let o=u.trackElement.track;o?r.set(u,{wasShowing:o.mode==="showing",wasHidden:o.mode==="hidden"}):r.set(u,{wasShowing:!1,wasHidden:!1})});let c=a.map(({trackInfo:u})=>{let o={};Array.from(u.trackElement.attributes).forEach(l=>{o[l.name]=l.value});let n={trackInfo:u,oldSrc:u.trackElement.getAttribute("src"),parent:u.trackElement.parentNode,nextSibling:u.trackElement.nextSibling,attributes:o};return u.trackElement.remove(),n});this.player.element.load(),await new Promise(u=>{setTimeout(()=>{c.forEach(({trackInfo:n,parent:l,nextSibling:d,attributes:p})=>{t.push(n);let m=document.createElement("track"),f=e?n.describedSrc:n.originalSrc;m.setAttribute("src",f),Object.keys(p).forEach(y=>{y!=="src"&&y!=="data-desc-src"&&m.setAttribute(y,p[y])});let v=l||this.player.element;d&&d.parentNode?v.insertBefore(m,d):v.appendChild(m),n.trackElement=m}),this.player.invalidateTrackCache();let o=()=>{this.player.setManagedTimeout(()=>{t.forEach(n=>{let l=n.trackElement.track;if(l){let d=r.get(n)||{wasShowing:!1,wasHidden:!1};l.mode="hidden";let p=()=>{d.wasShowing||d.wasHidden?l.mode="hidden":l.mode="disabled"};l.readyState>=2?p():(l.addEventListener("load",p,{once:!0}),l.addEventListener("error",p,{once:!0}))}})},300)};this.player.element.readyState>=1?setTimeout(o,200):(this.player.element.addEventListener("loadedmetadata",o,{once:!0}),setTimeout(o,2e3)),u()},100)})}return t}_updateSourceElements(e=!0){let t=this.player.sourceElements,i=[];t.forEach(s=>{let a=s.getAttribute("data-desc-src"),r=s.getAttribute("src");if(a){let c=s.getAttribute("type"),u=s.getAttribute("data-orig-src")||r;i.push({src:e?a:u,type:c,origSrc:u,descSrc:a})}else i.push({src:s.getAttribute("src"),type:s.getAttribute("type"),origSrc:null,descSrc:null})}),this.player.element.hasAttribute("src")&&this.player.element.removeAttribute("src"),t.forEach(s=>s.remove()),i.forEach(s=>{let a=document.createElement("source");a.setAttribute("src",s.src),s.type&&a.setAttribute("type",s.type),s.origSrc&&a.setAttribute("data-orig-src",s.origSrc),s.descSrc&&a.setAttribute("data-desc-src",s.descSrc);let r=this.player.element.querySelector("track");r?this.player.element.insertBefore(a,r):this.player.element.appendChild(a)}),this.player._sourceElementsDirty=!0,this.player._sourceElementsCache=null}async _waitForMediaReady(e=!1){await new Promise(t=>{if(this.player.element.readyState>=1)t();else{let i=()=>{this.player.element.removeEventListener("loadedmetadata",i),t()};this.player.element.addEventListener("loadedmetadata",i)}}),await new Promise(t=>setTimeout(t,300)),e&&await new Promise(t=>{if(this.player.element.readyState>=3)t();else{let i=()=>{this.player.element.removeEventListener("canplay",i),this.player.element.removeEventListener("canplaythrough",i),t()};this.player.element.addEventListener("canplay",i,{once:!0}),this.player.element.addEventListener("canplaythrough",i,{once:!0}),setTimeout(()=>{this.player.element.removeEventListener("canplay",i),this.player.element.removeEventListener("canplaythrough",i),t()},3e3)}})}async _restorePlaybackState(e,t,i,s){let a=e;if(s&&this.player.captionManager&&this.player.captionManager.tracks.length>0){await new Promise(c=>setTimeout(c,500));let r=this.player.findMatchingCaptionTime(s,this.player.captionManager.tracks);r!==null&&(a=r,this.player.options.debug&&this.player.log(`[VidPly] Syncing via caption: ${e}s -> ${a}s`))}a>0&&(this.player.seek(a),await new Promise(r=>setTimeout(r,100))),t?(await this.player.play(),this.player.setManagedTimeout(()=>{this.player.hidePosterOverlay()},100)):(this.player.pause(),i||this.player.hidePosterOverlay())}async _enableWithSourceElement(e,t,i,s,a){await this._swapCaptionTracks(!0),this._updateSourceElements(!0),i&&this.player.element.tagName==="VIDEO"&&(this.player.element.poster=i),this.player.element.load(),await this._waitForMediaReady(e>0||t),await this._restorePlaybackState(e,t,s,a),this.desiredState&&(this.enabled=!0,this.player.state.audioDescriptionEnabled=!0,this.player.emit("audiodescriptionenabled"),this._reloadTranscript())}async _enableWithDirectSrc(e,t,i,s){await this._swapCaptionTracks(!0),i&&this.player.element.tagName==="VIDEO"&&(this.player.element.poster=i),this.player.element.src=this.src,await this._waitForMediaReady(e>0||t),e>0&&(this.player.seek(e),await new Promise(a=>setTimeout(a,100))),t?await this.player.play():(this.player.pause(),s||this.player.hidePosterOverlay()),this.desiredState&&(this.enabled=!0,this.player.state.audioDescriptionEnabled=!0,this.player.emit("audiodescriptionenabled"),this._reloadTranscript())}async _disableWithSourceElement(e,t,i,s,a){await this._swapCaptionTracks(!1),this._updateSourceElements(!1),i&&this.player.element.tagName==="VIDEO"&&(this.player.element.poster=i),this.player.element.load(),this.player.invalidateTrackCache(),await this._waitForMediaReady(e>0||t),await this._restorePlaybackState(e,t,s,a),this.player.captionManager&&(this.player.captionManager.destroy(),this.player.captionManager=new H(this.player)),!this.desiredState&&(this.enabled=!1,this.player.state.audioDescriptionEnabled=!1,this.player.emit("audiodescriptiondisabled"),this._reloadTranscript())}async _disableWithDirectSrc(e,t,i){await this._swapCaptionTracks(!1),i&&this.player.element.tagName==="VIDEO"&&(this.player.element.poster=i);let s=this.originalSource||this.player.originalSrc;this.player.element.src=s,this.player.element.load(),await this._waitForMediaReady(e>0||t),e>0&&this.player.seek(e),t&&await this.player.play(),!this.desiredState&&(this.enabled=!1,this.player.state.audioDescriptionEnabled=!1,this.player.emit("audiodescriptiondisabled"),this._reloadTranscript())}_reloadTranscript(){this.player.transcriptManager&&this.player.transcriptManager.isVisible&&this.player.setManagedTimeout(()=>{this.player.transcriptManager&&this.player.transcriptManager.loadTranscriptData&&this.player.transcriptManager.loadTranscriptData()},800)}updateSources(e){this.src=e||null,this.enabled=!1,this.desiredState=!1,this.sourceElement=null,this.originalSource=null,this.captionTracks=[]}reinitialize(){this.player.invalidateTrackCache(),this.initFromSourceElements(this.player.sourceElements,this.player.trackElements)}destroy(){this.enabled=!1,this.desiredState=!1,this.captionTracks=[],this.sourceElement=null,this.originalSource=null}};var ee=class{constructor(e){this.player=e,this.src=e.options.signLanguageSrc,this.sources=e.options.signLanguageSources||{},this.currentLanguage=null,this.desiredPosition=e.options.signLanguagePosition||"bottom-right",this.wrapper=null,this.header=null,this.video=null,this.selector=null,this.settingsButton=null,this.settingsMenu=null,this.resizeHandles=[],this.enabled=!1,this.settingsMenuVisible=!1,this.settingsMenuJustOpened=!1,this.documentClickHandlerAdded=!1,this.handlers=null,this.settingsHandlers=null,this.interactionHandlers=null,this.draggable=null,this.documentClickHandler=null,this.settingsMenuKeyHandler=null,this.customKeyHandler=null,this.dragOptionButton=null,this.dragOptionText=null,this.resizeOptionButton=null,this.resizeOptionText=null}isAvailable(){return Object.keys(this.sources).length>0||!!this.src}enable(){let e=Object.keys(this.sources).length>0,t=!!this.src;if(!e&&!t){console.warn("No sign language video source provided");return}if(this.wrapper){this.wrapper.style.display="block",this.enabled=!0,this.player.state.signLanguageEnabled=!0,this.player.emit("signlanguageenabled"),this.player.setManagedTimeout(()=>{this.settingsButton&&document.contains(this.settingsButton)&&this.settingsButton.focus({preventScroll:!0})},150);return}let i=null,s=null;e?(i=this._determineInitialLanguage(),s=this.sources[i],this.currentLanguage=i):s=this.src,this._createWrapper(),this._createHeader(e,i),this._createVideo(s),this._createResizeHandles(),this.wrapper.appendChild(this.header),this.wrapper.appendChild(this.video),this.resizeHandles.forEach(a=>this.wrapper.appendChild(a)),this._applyInitialSize(),this.player.container.appendChild(this.wrapper),requestAnimationFrame(()=>{this.constrainPosition()}),this.video.currentTime=this.player.state.currentTime,this.player.state.paused||this.video.play(),this._setupInteraction(),this._setupEventHandlers(e),this.enabled=!0,this.player.state.signLanguageEnabled=!0,this.player.emit("signlanguageenabled"),this.player.setManagedTimeout(()=>{this.settingsButton&&document.contains(this.settingsButton)&&this.settingsButton.focus({preventScroll:!0})},150)}disable(){this.settingsMenuVisible&&this.hideSettingsMenu({focusButton:!1}),this.wrapper&&(this.wrapper.style.display="none"),this.enabled=!1,this.player.state.signLanguageEnabled=!1,this.player.emit("signlanguagedisabled")}toggle(){this.enabled?this.disable():this.enable()}switchLanguage(e){if(!this.sources[e]||!this.video)return;let t=this.video.currentTime,i=!this.video.paused;this.video.src=this.sources[e],this.currentLanguage=e,this.video.currentTime=t,i&&this.video.play().catch(()=>{}),this.player.emit("signlanguagelanguagechanged",e)}getLanguageLabel(e){return{en:"English",de:"Deutsch",es:"Español",fr:"Français",it:"Italiano",ja:"日本語",pt:"Português",ar:"العربية",hi:"हिन्दी"}[e]||e.toUpperCase()}_determineInitialLanguage(){if(this.player.captionManager&&this.player.captionManager.currentTrack){let e=this.player.captionManager.currentTrack.language?.toLowerCase().split("-")[0];if(e&&this.sources[e])return e}if(this.player.options.language){let e=this.player.options.language.toLowerCase().split("-")[0];if(this.sources[e])return e}return Object.keys(this.sources)[0]}_createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vidply-sign-language-wrapper",this.wrapper.setAttribute("tabindex","0"),this.wrapper.setAttribute("aria-label",g.t("player.signLanguageDragResize"))}_createHeader(e,t){let i=this.player.options.classPrefix;this.header=h.createElement("div",{className:`${i}-sign-language-header`,attributes:{tabindex:"0"}});let s=h.createElement("div",{className:`${i}-sign-language-header-left`}),a=h.createElement("h3",{textContent:g.t("player.signLanguageVideo")});this._createSettingsButton(s),e&&this._createLanguageSelector(s,t),s.appendChild(a);let r=this._createCloseButton();this.header.appendChild(s),this.header.appendChild(r),this.settingsMenuVisible=!1,this.settingsMenu=null,this.settingsMenuJustOpened=!1}_createSettingsButton(e){let t=this.player.options.classPrefix,i=g.t("player.signLanguageSettings");this.settingsButton=h.createElement("button",{className:`${t}-sign-language-settings`,attributes:{type:"button","aria-label":i,"aria-expanded":"false"}}),this.settingsButton.appendChild(T("settings")),h.attachTooltip(this.settingsButton,i,t),this.settingsHandlers={click:s=>{s.preventDefault(),s.stopPropagation(),this.documentClickHandler&&(this.settingsMenuJustOpened=!0,setTimeout(()=>{this.settingsMenuJustOpened=!1},100)),this.settingsMenuVisible?this.hideSettingsMenu():this.showSettingsMenu()},keydown:s=>{s.key==="d"||s.key==="D"?(s.preventDefault(),s.stopPropagation(),this.toggleKeyboardDragMode()):s.key==="r"||s.key==="R"?(s.preventDefault(),s.stopPropagation(),this.toggleResizeMode()):s.key==="Escape"&&this.settingsMenuVisible&&(s.preventDefault(),s.stopPropagation(),this.hideSettingsMenu())}},this.settingsButton.addEventListener("click",this.settingsHandlers.click),this.settingsButton.addEventListener("keydown",this.settingsHandlers.keydown),e.appendChild(this.settingsButton)}_createLanguageSelector(e,t){let i=this.player.options.classPrefix,s=`${i}-sign-language-select-${Date.now()}`,a=Object.keys(this.sources).map(o=>({value:o,text:this.getLanguageLabel(o),selected:o===t})),{label:r,select:c}=U({classPrefix:i,labelClass:`${i}-sign-language-label`,selectClass:`${i}-sign-language-select`,labelText:"settings.language",selectId:s,options:a,onChange:o=>{o.stopPropagation(),this.switchLanguage(o.target.value)}});this.selector=c;let u=h.createElement("div",{className:`${i}-sign-language-selector-wrapper`});u.appendChild(r),u.appendChild(this.selector),Q(u),e.appendChild(u)}_createCloseButton(){let e=this.player.options.classPrefix,t=g.t("player.closeSignLanguage"),i=h.createElement("button",{className:`${e}-sign-language-close`,attributes:{type:"button","aria-label":t}});return i.appendChild(T("close")),h.attachTooltip(i,t,e),i.addEventListener("click",()=>{this.disable(),this.player.controlBar?.controls?.signLanguage&&setTimeout(()=>{this.player.controlBar.controls.signLanguage.focus({preventScroll:!0})},0)}),i}_createVideo(e){this.video=document.createElement("video"),this.video.className="vidply-sign-language-video",this.video.src=e,this.video.setAttribute("aria-label",g.t("player.signLanguage")),this.video.muted=!0,this.video.setAttribute("playsinline","")}_createResizeHandles(){let e=this.player.options.classPrefix;this.resizeHandles=["n","s","e","w","ne","nw","se","sw"].map(t=>{let i=h.createElement("div",{className:`${e}-sign-resize-handle ${e}-sign-resize-${t}`,attributes:{"data-direction":t,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return i.style.display="none",i})}_applyInitialSize(){let e=this.player.storage.getSignLanguagePreferences();e?.size?.width?this.wrapper.style.width=e.size.width:this.wrapper.style.width="280px",this.wrapper.style.height="auto"}_setupInteraction(){let e=window.innerWidth<768,t=this.player.state.fullscreen;if(e&&!t){this.draggable&&(this.draggable.destroy(),this.draggable=null);return}if(this.draggable)return;let i=this.player.options.classPrefix;this.draggable=new K(this.wrapper,{dragHandle:this.header,resizeHandles:this.resizeHandles,constrainToViewport:!0,maintainAspectRatio:!0,minWidth:150,minHeight:100,classPrefix:`${i}-sign`,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:10,keyboardStepLarge:50,pointerResizeIndicatorText:g.t("player.signLanguageResizeActive"),onPointerResizeToggle:s=>{this.resizeHandles.forEach(a=>{a.style.display=s?"block":"none"})},onDragStart:s=>!(s.target.closest(`.${i}-sign-language-close`)||s.target.closest(`.${i}-sign-language-settings`)||s.target.closest(`.${i}-sign-language-select`)||s.target.closest(`.${i}-sign-language-label`)||s.target.closest(`.${i}-sign-language-settings-menu`))}),this._setupCustomKeyHandler(),this.interactionHandlers={draggable:this.draggable,customKeyHandler:this.customKeyHandler}}_setupCustomKeyHandler(){this.customKeyHandler=e=>{let t=e.key.toLowerCase();if(!this.settingsMenuVisible){if(t==="home"){e.preventDefault(),e.stopPropagation(),this.draggable&&(this.draggable.pointerResizeMode&&this.draggable.disablePointerResizeMode(),this.draggable.manuallyPositioned=!1,this.constrainPosition());return}if(t==="r"){e.preventDefault(),e.stopPropagation(),this.toggleResizeMode()&&this.wrapper.focus({preventScroll:!0});return}if(t==="escape"){if(e.preventDefault(),e.stopPropagation(),this.draggable?.pointerResizeMode){this.draggable.disablePointerResizeMode();return}if(this.draggable?.keyboardDragMode){this.draggable.disableKeyboardDragMode();return}this.disable(),this.player.controlBar?.controls?.signLanguage&&setTimeout(()=>{this.player.controlBar.controls.signLanguage.focus({preventScroll:!0})},0)}}},this.wrapper.addEventListener("keydown",this.customKeyHandler)}_setupEventHandlers(e){this.handlers={play:()=>{this.video&&this.video.play()},pause:()=>{this.video&&this.video.pause()},timeupdate:()=>{this.video&&Math.abs(this.video.currentTime-this.player.state.currentTime)>.5&&(this.video.currentTime=this.player.state.currentTime)},ratechange:()=>{this.video&&(this.video.playbackRate=this.player.state.playbackSpeed)}},this.player.on("play",this.handlers.play),this.player.on("pause",this.handlers.pause),this.player.on("timeupdate",this.handlers.timeupdate),this.player.on("ratechange",this.handlers.ratechange),e&&(this.handlers.captionChange=()=>{if(this.player.captionManager?.currentTrack&&this.selector){let t=this.player.captionManager.currentTrack.language?.toLowerCase().split("-")[0];t&&this.sources[t]&&this.currentLanguage!==t&&(this.switchLanguage(t),this.selector.value=t)}},this.player.on("captionsenabled",this.handlers.captionChange))}constrainPosition(){if(!this.wrapper||!this.player.videoWrapper||this.draggable?.manuallyPositioned)return;this.wrapper.style.width||(this.wrapper.style.width="280px");let e=this.player.videoWrapper.getBoundingClientRect(),t=this.player.container.getBoundingClientRect(),i=this.wrapper.getBoundingClientRect(),s=e.left-t.left,a=e.top-t.top,r=e.width,c=e.height,u=i.width||280,o=i.height||280*9/16,n,l,d=16,p=95;switch(this.desiredPosition||"bottom-right"){case"bottom-right":n=s+r-u-d,l=a+c-o-p;break;case"bottom-left":n=s+d,l=a+c-o-p;break;case"top-right":n=s+r-u-d,l=a+d;break;case"top-left":n=s+d,l=a+d;break;default:n=s+r-u-d,l=a+c-o-p}n=Math.max(s,Math.min(n,s+r-u)),l=Math.max(a,Math.min(l,a+c-o-p)),this.wrapper.style.left=`${n}px`,this.wrapper.style.top=`${l}px`,this.wrapper.style.right="auto",this.wrapper.style.bottom="auto"}showSettingsMenu(){if(this.settingsMenuJustOpened=!0,setTimeout(()=>{this.settingsMenuJustOpened=!1},350),this._addDocumentClickHandler(),this.settingsMenu){this.settingsMenu.style.display="block",this.settingsMenuVisible=!0,this.settingsButton?.setAttribute("aria-expanded","true"),this._attachMenuKeyboardNavigation(),this._positionSettingsMenu(),this._updateDragOptionState(),this._updateResizeOptionState(),V(this.settingsMenu,`.${this.player.options.classPrefix}-sign-language-settings-item`);return}this._createSettingsMenu()}hideSettingsMenu({focusButton:e=!0}={}){if(this.settingsMenu){this.settingsMenu.style.display="none",this.settingsMenuVisible=!1,this.settingsMenuJustOpened=!1,this.settingsMenuKeyHandler&&(this.settingsMenu.removeEventListener("keydown",this.settingsMenuKeyHandler),this.settingsMenuKeyHandler=null);let t=this.player.options.classPrefix;Array.from(this.settingsMenu.querySelectorAll(`.${t}-sign-language-settings-item`)).forEach(s=>s.setAttribute("tabindex","-1")),this.settingsButton&&(this.settingsButton.setAttribute("aria-expanded","false"),e&&this.settingsButton.focus({preventScroll:!0}))}}_addDocumentClickHandler(){this.documentClickHandlerAdded||(this.documentClickHandler=e=>{this.settingsMenuJustOpened||this.settingsButton&&(this.settingsButton===e.target||this.settingsButton.contains(e.target))||this.settingsMenu&&this.settingsMenu.contains(e.target)||this.settingsMenuVisible&&this.hideSettingsMenu()},setTimeout(()=>{document.addEventListener("mousedown",this.documentClickHandler,!0),this.documentClickHandlerAdded=!0},300))}_createSettingsMenu(){let e=this.player.options.classPrefix;this.settingsMenu=h.createElement("div",{className:`${e}-sign-language-settings-menu`,attributes:{role:"menu"}});let t=O({classPrefix:e,itemClass:`${e}-sign-language-settings-item`,icon:"move",label:"player.enableSignDragMode",hasTextClass:!0,onClick:()=>{this.toggleKeyboardDragMode(),this.hideSettingsMenu()}});t.setAttribute("role","switch"),t.setAttribute("aria-checked","false"),this._removeTooltipFromMenuItem(t),this.dragOptionButton=t,this.dragOptionText=t.querySelector(`.${e}-settings-text`),this._updateDragOptionState();let i=O({classPrefix:e,itemClass:`${e}-sign-language-settings-item`,icon:"resize",label:"player.enableSignResizeMode",hasTextClass:!0,onClick:a=>{a.preventDefault(),a.stopPropagation(),this.toggleResizeMode({focus:!1})?(this.hideSettingsMenu({focusButton:!1}),setTimeout(()=>{this.wrapper&&this.wrapper.focus({preventScroll:!0})},20)):this.hideSettingsMenu({focusButton:!0})}});i.setAttribute("role","switch"),i.setAttribute("aria-checked","false"),this._removeTooltipFromMenuItem(i),this.resizeOptionButton=i,this.resizeOptionText=i.querySelector(`.${e}-settings-text`),this._updateResizeOptionState();let s=O({classPrefix:e,itemClass:`${e}-sign-language-settings-item`,icon:"close",label:"transcript.closeMenu",onClick:()=>this.hideSettingsMenu()});this._removeTooltipFromMenuItem(s),this.settingsMenu.appendChild(t),this.settingsMenu.appendChild(i),this.settingsMenu.appendChild(s),this.settingsMenu.style.visibility="hidden",this.settingsMenu.style.display="block",this.settingsButton?.parentNode?this.settingsButton.insertAdjacentElement("afterend",this.settingsMenu):this.wrapper&&this.wrapper.appendChild(this.settingsMenu),this._positionSettingsMenuImmediate(),requestAnimationFrame(()=>{this.settingsMenu&&(this.settingsMenu.style.visibility="visible")}),this._attachMenuKeyboardNavigation(),this.settingsMenuVisible=!0,this.settingsButton?.setAttribute("aria-expanded","true"),this._updateDragOptionState(),this._updateResizeOptionState(),V(this.settingsMenu,`.${e}-sign-language-settings-item`)}_removeTooltipFromMenuItem(e){let t=this.player.options.classPrefix,i=e.querySelector(`.${t}-tooltip`);i&&i.remove();let s=e.querySelector(`.${t}-button-text`);s&&s.remove()}_attachMenuKeyboardNavigation(){this.settingsMenuKeyHandler&&this.settingsMenu.removeEventListener("keydown",this.settingsMenuKeyHandler),this.settingsMenuKeyHandler=R(this.settingsMenu,this.settingsButton,`.${this.player.options.classPrefix}-sign-language-settings-item`,()=>this.hideSettingsMenu({focusButton:!0}))}_positionSettingsMenuImmediate(){if(!this.settingsMenu||!this.settingsButton)return;let e=this.settingsButton.getBoundingClientRect(),t=this.settingsMenu.getBoundingClientRect(),i=window.innerWidth,s=window.innerHeight,a=this.settingsButton.parentElement;if(!a)return;let r=a.getBoundingClientRect(),c=e.left+e.width/2-r.left,u=e.bottom-r.top,o=e.top-r.top,n=e.top,l=s-e.bottom,d=u+8,p=null;l<t.height+20&&n>l?(d=null,p=r.bottom-r.top-o+8,this.settingsMenu.classList.add("vidply-menu-above")):this.settingsMenu.classList.remove("vidply-menu-above");let m=c-t.width/2,f="auto",v="translateX(0)",y=e.left+e.width/2-t.width/2;y<10?m=0:y+t.width>i-10?(m="auto",f=0):(m=c,v="translateX(-50%)"),d!==null?(this.settingsMenu.style.top=`${d}px`,this.settingsMenu.style.bottom="auto"):p!==null&&(this.settingsMenu.style.top="auto",this.settingsMenu.style.bottom=`${p}px`),m!=="auto"?(this.settingsMenu.style.left=`${m}px`,this.settingsMenu.style.right="auto"):(this.settingsMenu.style.left="auto",this.settingsMenu.style.right=`${f}px`),this.settingsMenu.style.transform=v}_positionSettingsMenu(){requestAnimationFrame(()=>{setTimeout(()=>{this._positionSettingsMenuImmediate()},10)})}toggleKeyboardDragMode(){if(this.draggable){let e=this.draggable.keyboardDragMode;this.draggable.toggleKeyboardDragMode();let t=this.draggable.keyboardDragMode;!e&&t&&this._enableMoveMode(),this._updateDragOptionState()}}_enableMoveMode(){this.wrapper.classList.add(`${this.player.options.classPrefix}-sign-move-mode`),this._updateResizeOptionState(),setTimeout(()=>{this.wrapper.classList.remove(`${this.player.options.classPrefix}-sign-move-mode`)},2e3)}toggleResizeMode({focus:e=!0}={}){return this.draggable?this.draggable.pointerResizeMode?(this.draggable.disablePointerResizeMode({focus:e}),this._updateResizeOptionState(),!1):(this.draggable.enablePointerResizeMode({focus:e}),this._updateResizeOptionState(),!0):!1}_updateDragOptionState(){if(!this.dragOptionButton)return;let e=!!this.draggable?.keyboardDragMode,t=e?g.t("player.disableSignDragMode"):g.t("player.enableSignDragMode"),i=e?g.t("player.disableSignDragModeAria"):g.t("player.enableSignDragModeAria");this.dragOptionButton.setAttribute("aria-checked",e?"true":"false"),this.dragOptionButton.setAttribute("aria-label",i),this.dragOptionText&&(this.dragOptionText.textContent=t)}_updateResizeOptionState(){if(!this.resizeOptionButton)return;let e=!!this.draggable?.pointerResizeMode,t=e?g.t("player.disableSignResizeMode"):g.t("player.enableSignResizeMode"),i=e?g.t("player.disableSignResizeModeAria"):g.t("player.enableSignResizeModeAria");this.resizeOptionButton.setAttribute("aria-checked",e?"true":"false"),this.resizeOptionButton.setAttribute("aria-label",i),this.resizeOptionText&&(this.resizeOptionText.textContent=t)}savePreferences(){this.wrapper&&this.player.storage.saveSignLanguagePreferences({size:{width:this.wrapper.style.width}})}updateSources(e,t){this.src=e||null,this.sources=t||{},this.currentLanguage=null}cleanup(){this.settingsMenuVisible&&this.hideSettingsMenu({focusButton:!1}),this.documentClickHandler&&this.documentClickHandlerAdded&&(document.removeEventListener("mousedown",this.documentClickHandler,!0),this.documentClickHandlerAdded=!1,this.documentClickHandler=null),this.settingsHandlers&&this.settingsButton&&(this.settingsButton.removeEventListener("click",this.settingsHandlers.click),this.settingsButton.removeEventListener("keydown",this.settingsHandlers.keydown)),this.settingsHandlers=null,this.handlers&&(this.player.off("play",this.handlers.play),this.player.off("pause",this.handlers.pause),this.player.off("timeupdate",this.handlers.timeupdate),this.player.off("ratechange",this.handlers.ratechange),this.handlers.captionChange&&this.player.off("captionsenabled",this.handlers.captionChange),this.handlers=null),this.wrapper&&this.customKeyHandler&&this.wrapper.removeEventListener("keydown",this.customKeyHandler),this.draggable&&(this.draggable.pointerResizeMode&&this.draggable.disablePointerResizeMode(),this.draggable.destroy(),this.draggable=null),this.interactionHandlers=null,this.wrapper?.parentNode&&(this.video&&(this.video.pause(),this.video.src=""),this.wrapper.parentNode.removeChild(this.wrapper)),this.wrapper=null,this.video=null,this.settingsButton=null,this.settingsMenu=null}destroy(){this.cleanup(),this.enabled=!1}};var oe=0,z=class L extends X{constructor(e,t={}){if(super(),this.element=typeof e=="string"?document.querySelector(e):e,!this.element)throw new Error("VidPly: Element not found");if(oe++,this.instanceId=oe,this.element.tagName!=="VIDEO"&&this.element.tagName!=="AUDIO"){let s=t.mediaType||"video",a=document.createElement(s);Array.from(this.element.attributes).forEach(c=>{c.name!=="id"&&c.name!=="class"&&!c.name.startsWith("data-")&&a.setAttribute(c.name,c.value)}),this.element.querySelectorAll("track").forEach(c=>{a.appendChild(c.cloneNode(!0))}),this.element.innerHTML="",this.element.appendChild(a),this.element=a}this._originalElement=this.element,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 W("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.audioDescriptionManager=new Z(this),this.signLanguageManager=new ee(this),Object.defineProperties(this,{signLanguageWrapper:{get:()=>this.signLanguageManager.wrapper,set:s=>{this.signLanguageManager.wrapper=s}},signLanguageVideo:{get:()=>this.signLanguageManager.video,set:s=>{this.signLanguageManager.video=s}},signLanguageHeader:{get:()=>this.signLanguageManager.header,set:s=>{this.signLanguageManager.header=s}},signLanguageSettingsButton:{get:()=>this.signLanguageManager.settingsButton,set:s=>{this.signLanguageManager.settingsButton=s}},signLanguageSettingsMenu:{get:()=>this.signLanguageManager.settingsMenu,set:s=>{this.signLanguageManager.settingsMenu=s}},signLanguageSettingsMenuVisible:{get:()=>this.signLanguageManager.settingsMenuVisible,set:s=>{this.signLanguageManager.settingsMenuVisible=s}},signLanguageDraggable:{get:()=>this.signLanguageManager.draggable,set:s=>{this.signLanguageManager.draggable=s}},currentSignLanguage:{get:()=>this.signLanguageManager.currentLanguage,set:s=>{this.signLanguageManager.currentLanguage=s}}}),this.init()}async init(){try{if(this.log("Initializing VidPly player"),this.options.languageFiles)try{await g.loadLanguagesFromUrls(this.options.languageFiles)}catch(t){console.warn("Failed to load some language files:",t)}if(this.options.languageFile&&this.options.languageFileUrl)try{await g.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 g.ensureLanguage(this.options.language),g.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 Y(this),this.videoWrapper.appendChild(this.controlBar.element)),this.options.captions&&(this.captionManager=new H(this)),this.options.transcript&&await this.ensureTranscriptManager(),this.setupMetadataHandling(),this.options.keyboard&&(this.keyboardManager=new G(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-WFZSW6NR.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 g.translations[t]||g.builtInLanguageLoaders&&g.builtInLanguageLoaders[t]?t:(this.log(`Language "${e}" not available, using English as fallback`),null)}createContainer(){let e=this.instanceId>1?`${g.t("player.label")} ${this.instanceId}`:g.t("player.label");this.container=h.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=h.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=h.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,L.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=ae(),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=j(()=>{this.positionPlayOverlayOnMobile()},150),window.addEventListener("resize",this.debouncedPositionPlayOverlay),this.on("loadedmetadata",()=>{this.positionPlayOverlayOnMobile()}),this.on("enterfullscreen",()=>{_(()=>this.positionPlayOverlayOnMobile(),100)}),this.on("exitfullscreen",()=>{_(()=>this.positionPlayOverlayOnMobile(),100)})}positionPlayOverlayOnMobile(){if(!this.playButtonOverlay||this.element.tagName!=="VIDEO")return;if(!N()){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._pendingSource||this.element.src||this.element.querySelector("source")?.src;if(!e)throw new Error("No media source found");this.currentSource=e,this._pendingSource=null,this.audioDescriptionManager.initFromSourceElements(this.sourceElements,this.trackElements),this.originalSrc||(this.originalSrc=e);let t=re;if(e.includes("youtube.com")||e.includes("youtu.be")){let i=await import("./vidply.YouTubeRenderer-MFC2GMAC.min.js");t=i.YouTubeRenderer||i.default}else if(e.includes("vimeo.com")){let i=await import("./vidply.VimeoRenderer-3HBMM2WR.min.js");t=i.VimeoRenderer||i.default}else if(e.includes(".m3u8")){let i=await import("./vidply.HLSRenderer-3CG7BZKA.min.js");t=i.HLSRenderer||i.default}else if(e.includes("soundcloud.com")||e.includes("api.soundcloud.com")){let i=await import("./vidply.SoundCloudRenderer-MOR2CUFH.min.js");t=i.SoundCloudRenderer||i.default}this.log(`Using ${t?.name||"HTML5Renderer"} renderer`),this.renderer=new t(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}}async generatePosterFromVideo(e=10){if(this.element.tagName!=="VIDEO")return null;let t=this.renderer;if(!t||!t.media||t.media.tagName!=="VIDEO")return null;let i=t.media;(!i.duration||i.duration<e)&&(e=Math.min(e,Math.max(1,i.duration*.1)));let s=i;return this.controlBar&&this.controlBar.previewVideo&&this.controlBar.previewSupported&&(s=this.controlBar.previewVideo),await J(s,e,{restoreState:s===i,quality:.9})}async autoGeneratePoster(){if(this.element.getAttribute("poster")||this.element.poster||this.options.poster||this.element.tagName!=="VIDEO")return;(!this.state.duration||this.state.duration===0)&&await new Promise(i=>{let s=()=>{this.element.removeEventListener("loadedmetadata",s),i()};this.element.readyState>=1?i():this.element.addEventListener("loadedmetadata",s)});let t=await this.generatePosterFromVideo(10);t&&(this.element.poster=t,this.log("Auto-generated poster from video frame at 10 seconds","info"),this.showPosterOverlay())}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=e.startsWith("data:")?e:this.resolvePosterPath(e);this.videoWrapper.style.setProperty("--vidply-poster-image",`url("${t}")`),this.videoWrapper.classList.add("vidply-forced-poster"),this._isAudioContent&&this.container?this.container.classList.add("vidply-audio-content"):this.container&&this.container.classList.remove("vidply-audio-content")}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))}isExternalRendererUrl(e){return e?e.includes("youtube.com")||e.includes("youtu.be")||e.includes("vimeo.com")||e.includes("soundcloud.com")||e.includes("api.soundcloud.com")||e.includes(".m3u8"):!1}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(o=>o.remove()),this.invalidateTrackCache();let a=this.isExternalRendererUrl(e.src);if(a&&(this._switchingRenderer=!0),a?(this.element.removeAttribute("src"),this.element.querySelectorAll("source").forEach(n=>n.removeAttribute("src"))):(this.element.src=e.src,e.type&&(this.element.type=e.type)),this._pendingSource=e.src,this._isAudioContent=e.type&&e.type.startsWith("audio/"),this.container&&(this._isAudioContent?this.container.classList.add("vidply-audio-content"):this.container.classList.remove("vidply-audio-content")),e.poster&&this.element.tagName==="VIDEO")if(this._isAudioContent){if(this.element.removeAttribute("poster"),this.videoWrapper){let o=this.resolvePosterPath(e.poster);this.videoWrapper.style.setProperty("--vidply-poster-image",`url("${o}")`),this.videoWrapper.classList.add("vidply-forced-poster")}}else this.element.poster=this.resolvePosterPath(e.poster),this.videoWrapper&&(this.videoWrapper.classList.remove("vidply-forced-poster"),this.videoWrapper.style.removeProperty("--vidply-poster-image"));e.tracks&&e.tracks.length>0&&(e.tracks.forEach(o=>{let n=document.createElement("track");n.src=o.src,n.kind=o.kind||"captions",n.srclang=o.srclang||"en",n.label=o.label||o.srclang,o.default&&(n.default=!0),o.describedSrc&&n.setAttribute("data-desc-src",o.describedSrc);let l=this.element.firstChild;l&&l.nodeType===Node.ELEMENT_NODE&&l.tagName!=="TRACK"?this.element.insertBefore(n,l):this.element.appendChild(n)}),this.invalidateTrackCache());let r=this.state.signLanguageEnabled,c=this.state.audioDescriptionEnabled;this.audioDescriptionSrc=e.audioDescriptionSrc||null,this.signLanguageSrc=e.signLanguageSrc||null,this.originalSrc=e.src,this.audioDescriptionManager&&(this.audioDescriptionManager.updateSources(e.audioDescriptionSrc),this.audioDescriptionManager.reinitialize()),this.signLanguageManager&&this.signLanguageManager.updateSources(e.signLanguageSrc,e.signLanguageSources),c&&this.disableAudioDescription(),r&&this.disableSignLanguage();let u=this.shouldChangeRenderer(e.src);if(u&&this.renderer&&(this.renderer.destroy(),this.renderer=null),!this.renderer||u?await this.initializeRenderer():(this.renderer.media=this.element,this.element.load()),a?setTimeout(()=>{this._switchingRenderer=!1},500):this._switchingRenderer=!1,window.scrollTo(t,i),this.captionManager&&(this.captionManager.destroy(),this.captionManager=new H(this)),this.transcriptManager){let o=this.transcriptManager.isVisible;this.transcriptManager.destroy(),this.transcriptManager=null,await this.ensureTranscriptManager(),o&&this.controlBar&&this.controlBar.hasCaptionTracks()&&this.transcriptManager?.showTranscript()}this.controlBar&&this.updateControlBar(),window.scrollTo(t,i),r&&this.signLanguageSrc&&setTimeout(()=>{this.enableSignLanguage(),window.scrollTo(t,i)},150),c&&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"),a=e.includes("soundcloud.com")||e.includes("api.soundcloud.com"),r=this.renderer.constructor.name;return!!(t&&r!=="YouTubeRenderer"||i&&r!=="VimeoRenderer"||s&&r!=="HLSRenderer"||a&&r!=="SoundCloudRenderer"||!t&&!i&&!s&&!a&&r!=="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 a=s.track;if(!(!a||!a.cues))for(let r=0;r<a.cues.length;r++){let c=a.cues[r],u=this.stripVTTFormatting(c.text);if(u===i)return c.startTime;let o=i.split(/\s+/).filter(l=>l.length>2),n=u.split(/\s+/).filter(l=>l.length>2);if(o.length>0&&n.length>0&&o.filter(p=>n.includes(p)).length/o.length>=.8)return c.startTime}}return null}async enableAudioDescription(){return this.audioDescriptionManager.enable()}async _legacyEnableAudioDescription(){let e=this.sourceElements.some(n=>n.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,a=!s&&i===0,r=null;if(this.captionManager&&this.captionManager.currentTrack){let n=this.captionManager.currentTrack.track;if(n&&n.activeCues&&n.activeCues.length>0){let l=n.activeCues[0];r=this.stripVTTFormatting(l.text)}}let c=this.resolvePosterPath(this.element.getAttribute("poster")||this.element.poster||this.options.poster);a&&this.showPosterOverlay();let u=[];if(this.audioDescriptionSourceElement){let n=this.element.currentSrc||this.element.src,l=this.sourceElements,d=null,p=this.audioDescriptionSrc;for(let b of l){let w=b.getAttribute("src"),E=b.getAttribute("data-desc-src"),S=w?w.split("/").pop():"",k=n?n.split("/").pop():"";if(n&&(n===w||n.includes(w)||n.includes(S)||S&&k===S)){d=b,E?p=E:w&&(p=this.audioDescriptionSrc||p);break}}if(!d){d=this.audioDescriptionSourceElement;let b=d.getAttribute("data-desc-src");b&&(p=b)}if(this.audioDescriptionCaptionTracks.length>0){let b=this.audioDescriptionCaptionTracks.map(async S=>{if(S.trackElement&&S.describedSrc)if(S.explicit===!0)try{let k=await this.validateTrackExists(S.describedSrc);return{trackInfo:S,exists:k}}catch{return{trackInfo:S,exists:!1}}else return{trackInfo:S,exists:!1};return{trackInfo:S,exists:!1}}),w=await Promise.all(b),E=w.filter(S=>S.exists);if(E.length>0){let S=new Map;E.forEach(({trackInfo:P})=>{let B=P.trackElement.track;B?S.set(P,{wasShowing:B.mode==="showing",wasHidden:B.mode==="hidden"}):S.set(P,{wasShowing:!1,wasHidden:!1})});let k=E.map(({trackInfo:P})=>{let B=P.trackElement.getAttribute("src"),$=P.trackElement.parentNode,te=P.trackElement.nextSibling,A={};return Array.from(P.trackElement.attributes).forEach(D=>{A[D.name]=D.value}),{trackInfo:P,oldSrc:B,parent:$,nextSibling:te,attributes:A}});k.forEach(({trackInfo:P})=>{P.trackElement.remove()}),this.element.load(),await new Promise(P=>{setTimeout(()=>{k.forEach(({trackInfo:$,oldSrc:te,parent:A,nextSibling:D,attributes:F})=>{u.push($);let I=document.createElement("track");I.setAttribute("src",$.describedSrc),Object.keys(F).forEach(q=>{q!=="src"&&q!=="data-desc-src"&&I.setAttribute(q,F[q])}),D&&D.parentNode?A.insertBefore(I,D):A.appendChild(I),$.trackElement=I}),this.invalidateTrackCache();let B=()=>{this.setManagedTimeout(()=>{u.forEach($=>{let A=$.trackElement.track;if(A){let D=S.get($)||{wasShowing:!1,wasHidden:!1};A.mode="hidden";let F=()=>{D.wasShowing||D.wasHidden?A.mode="hidden":A.mode="disabled"};A.readyState>=2?F():(A.addEventListener("load",F,{once:!0}),A.addEventListener("error",F,{once:!0}))}})},300)};this.element.readyState>=1?setTimeout(B,200):(this.element.addEventListener("loadedmetadata",B,{once:!0}),setTimeout(B,2e3)),P()},100)});let C=w.length-E.length}}let m=this.sourceElements,f=[];m.forEach(b=>{let w=b.getAttribute("data-desc-src"),E=b.getAttribute("src");if(w){let S=b.getAttribute("type"),k=b.getAttribute("data-orig-src");k||(k=E),f.push({src:w,type:S,origSrc:k,descSrc:w})}else{let S=b.getAttribute("type"),k=b.getAttribute("src");f.push({src:k,type:S,origSrc:null,descSrc:null})}});let v=this.element.hasAttribute("src"),y=v?this.element.getAttribute("src"):null;v&&this.element.removeAttribute("src"),m.forEach(b=>{b.remove()}),f.forEach(b=>{let w=document.createElement("source");w.setAttribute("src",b.src),b.type&&w.setAttribute("type",b.type),b.origSrc&&w.setAttribute("data-orig-src",b.origSrc),b.descSrc&&w.setAttribute("data-desc-src",b.descSrc);let E=this.element.querySelector("track");E?this.element.insertBefore(w,E):this.element.appendChild(w)}),this._sourceElementsDirty=!0,this._sourceElementsCache=null,c&&this.element.tagName==="VIDEO"&&(this.element.poster=c),this.element.load(),await new Promise(b=>{let w=()=>{this.element.removeEventListener("loadedmetadata",w),b()};this.element.readyState>=1?b():this.element.addEventListener("loadedmetadata",w)}),await new Promise(b=>setTimeout(b,300)),(i>0||s)&&await new Promise(b=>{let w=()=>{this.element.removeEventListener("canplay",w),this.element.removeEventListener("canplaythrough",w),b()};this.element.readyState>=3?b():(this.element.addEventListener("canplay",w,{once:!0}),this.element.addEventListener("canplaythrough",w,{once:!0}),setTimeout(()=>{this.element.removeEventListener("canplay",w),this.element.removeEventListener("canplaythrough",w),b()},3e3))});let M=i;if(r&&this.captionManager&&this.captionManager.tracks.length>0){await new Promise(w=>setTimeout(w,500));let b=this.findMatchingCaptionTime(r,this.captionManager.tracks);b!==null&&(M=b,this.options.debug&&console.log(`[VidPly] Syncing via caption: ${i}s -> ${M}s`))}if(M>0&&(this.seek(M),await new Promise(b=>setTimeout(b,100))),s?(await this.play(),this.setManagedTimeout(()=>{this.hidePosterOverlay()},100)):(this.pause(),a||this.hidePosterOverlay()),!this._audioDescriptionDesiredState)return;this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled")}else{if(this.audioDescriptionCaptionTracks.length>0){let d=this.audioDescriptionCaptionTracks.map(async f=>{if(f.trackElement&&f.describedSrc)if(f.explicit===!0)try{let v=await this.validateTrackExists(f.describedSrc);return{trackInfo:f,exists:v}}catch{return{trackInfo:f,exists:!1}}else return{trackInfo:f,exists:!1};return{trackInfo:f,exists:!1}}),m=(await Promise.all(d)).filter(f=>f.exists);if(m.length>0){let f=new Map;m.forEach(({trackInfo:y})=>{let M=y.trackElement.track;M?f.set(y,{wasShowing:M.mode==="showing",wasHidden:M.mode==="hidden"}):f.set(y,{wasShowing:!1,wasHidden:!1})});let v=m.map(({trackInfo:y})=>{let M=y.trackElement.getAttribute("src"),b=y.trackElement.parentNode,w=y.trackElement.nextSibling,E={};return Array.from(y.trackElement.attributes).forEach(S=>{E[S.name]=S.value}),{trackInfo:y,oldSrc:M,parent:b,nextSibling:w,attributes:E}});v.forEach(({trackInfo:y})=>{y.trackElement.remove()}),this.element.load(),setTimeout(()=>{v.forEach(({trackInfo:M,oldSrc:b,parent:w,nextSibling:E,attributes:S})=>{u.push(M);let k=document.createElement("track");k.setAttribute("src",M.describedSrc),Object.keys(S).forEach(P=>{P!=="src"&&P!=="data-desc-src"&&k.setAttribute(P,S[P])});let C=w.firstChild;C&&C.nodeType===Node.ELEMENT_NODE&&C.tagName!=="TRACK"?w.insertBefore(k,C):E&&E.parentNode?w.insertBefore(k,E):w.appendChild(k),M.trackElement=k}),this.element.load();let y=()=>{setTimeout(()=>{u.forEach(M=>{let w=M.trackElement.track;if(w){let E=f.get(M)||{wasShowing:!1,wasHidden:!1};w.mode="hidden";let S=()=>{E.wasShowing||E.wasHidden?w.mode="hidden":w.mode="disabled"};w.readyState>=2?S():(w.addEventListener("load",S,{once:!0}),w.addEventListener("error",S,{once:!0}))}})},300)};this.element.readyState>=1?setTimeout(y,200):(this.element.addEventListener("loadedmetadata",y,{once:!0}),setTimeout(y,2e3))},100)}}let n=this.sourceElements;if(n.some(d=>d.getAttribute("data-desc-src"))){let d=[];n.forEach(p=>{let m=p.getAttribute("data-desc-src"),f=p.getAttribute("src");if(m){let v=p.getAttribute("type"),y=p.getAttribute("data-orig-src");y||(y=f),d.push({src:m,type:v,origSrc:y,descSrc:m})}else{let v=p.getAttribute("type"),y=p.getAttribute("src");d.push({src:y,type:v,origSrc:null,descSrc:null})}}),n.forEach(p=>{p.remove()}),d.forEach(p=>{let m=document.createElement("source");m.setAttribute("src",p.src),p.type&&m.setAttribute("type",p.type),p.origSrc&&m.setAttribute("data-orig-src",p.origSrc),p.descSrc&&m.setAttribute("data-desc-src",p.descSrc),this.element.appendChild(m)}),c&&this.element.tagName==="VIDEO"&&(this.element.poster=c),this.element.load(),this.invalidateTrackCache()}else c&&this.element.tagName==="VIDEO"&&(this.element.poster=c),this.element.src=this.audioDescriptionSrc}await new Promise(n=>{let l=()=>{this.element.removeEventListener("loadedmetadata",l),n()};this.element.readyState>=1?n():this.element.addEventListener("loadedmetadata",l)}),(i>0||s)&&await new Promise(n=>{let l=()=>{this.element.removeEventListener("canplay",l),this.element.removeEventListener("canplaythrough",l),n()};this.element.readyState>=3?n():(this.element.addEventListener("canplay",l,{once:!0}),this.element.addEventListener("canplaythrough",l,{once:!0}),setTimeout(()=>{this.element.removeEventListener("canplay",l),this.element.removeEventListener("canplaythrough",l),n()},3e3))}),this.element.tagName==="VIDEO"&&i===0&&!s&&this.element.readyState>=1&&(this.element.currentTime=.001,this.setManagedTimeout(()=>{this.element.currentTime=0},10));let o=i;if(r&&this.captionManager&&this.captionManager.tracks.length>0){await new Promise(l=>setTimeout(l,500));let n=this.findMatchingCaptionTime(r,this.captionManager.tracks);n!==null&&(o=n,this.options.debug&&console.log(`[VidPly] Syncing via caption: ${i}s -> ${o}s`))}if(o>0&&(this.seek(o),await new Promise(n=>setTimeout(n,100))),s?(await this.play(),this.setManagedTimeout(()=>{this.hidePosterOverlay()},100)):(this.pause(),a||this.hidePosterOverlay()),u.length>0&&this.captionManager){let n=this.state.captionsEnabled,l=null;if(this.captionManager.currentTrack){let p=this.captionManager.tracks.findIndex(m=>m.track===this.captionManager.currentTrack.track);p>=0&&(l={language:this.captionManager.tracks[p].language,kind:this.captionManager.tracks[p].kind})}setTimeout(()=>{if(this.captionManager.tracks=[],this.captionManager.loadTracks(),n&&l&&this.captionManager.tracks.length>0){let p=this.captionManager.tracks.findIndex(m=>m.language===l.language&&m.kind===l.kind);if(p>=0){let m=this.captionManager.tracks[p];if(m.track.readyState>=2)this.captionManager.enable(p);else{let f=()=>{m.track.removeEventListener("load",f),m.track.removeEventListener("error",f),this.captionManager&&this.captionManager.tracks.includes(m)&&this.captionManager.enable(p)};m.track.addEventListener("load",f,{once:!0}),m.track.addEventListener("error",f,{once:!0}),m.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(m)&&this.captionManager.enable(p)},1e3)}}else if(this.captionManager.tracks.length>0){let m=this.captionManager.tracks[0];if(m.track.readyState>=2)this.captionManager.enable(0);else{let f=()=>{m.track.removeEventListener("load",f),m.track.removeEventListener("error",f),this.captionManager&&this.captionManager.tracks.includes(m)&&this.captionManager.enable(0)};m.track.addEventListener("load",f,{once:!0}),m.track.addEventListener("error",f,{once:!0}),m.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(m)&&this.captionManager.enable(0)},1e3)}}}},600)}if(this.transcriptManager&&this.transcriptManager.isVisible){let n=typeof u<"u"?u:[];if(n.length>0){let l=()=>{this.invalidateTrackCache();let p=this.textTracks,m=n.map(y=>{let M=y.trackElement,b=M.getAttribute("src"),w=M.getAttribute("srclang"),E=M.getAttribute("kind"),S=p.find(k=>M.track===k);if(S||(S=p.find(k=>{if(k.language===w&&(k.kind===E||E==="captions"&&k.kind==="subtitles")){let C=this.findTrackElement(k);if(C&&C.getAttribute("src")===b)return!0}return!1})),S){let k=this.findTrackElement(S);if(k&&k.getAttribute("src")!==b)return null}return S}).filter(Boolean);if(m.length===0){this.setManagedTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},1e3);return}m.forEach(y=>{y.mode==="disabled"&&(y.mode="hidden")});let f=0,v=()=>{f++,f>=m.length&&this.setManagedTimeout(()=>{if(this.transcriptManager&&this.transcriptManager.loadTranscriptData){this.invalidateTrackCache();let y=this.textTracks,M=n.map(w=>w.describedSrc);(m.some(w=>{let E=this.findTrackElement(w);return E&&M.includes(E.getAttribute("src"))})||m.length>0)&&this.transcriptManager.loadTranscriptData()}},800)};m.forEach(y=>{y.mode==="disabled"&&(y.mode="hidden");let M=this.findTrackElement(y),b=M?M.getAttribute("src"):null,w=n.find(S=>{let k=S.trackElement;return k&&(k.track===y||k.getAttribute("srclang")===y.language&&k.getAttribute("kind")===y.kind)}),E=w?w.describedSrc:null;if(E&&b&&b!==E){v();return}if(y.readyState>=2&&y.cues&&y.cues.length>0)v();else{y.mode==="disabled"&&(y.mode="hidden");let S=()=>{this.setManagedTimeout(v,300)};y.readyState>=2?this.setManagedTimeout(()=>{y.cues&&y.cues.length>0?v():y.addEventListener("load",S,{once:!0})},100):(y.addEventListener("load",S,{once:!0}),y.addEventListener("error",()=>{v()},{once:!0}))}})};this.setManagedTimeout(()=>{this.element.readyState>=1?l():(this.element.addEventListener("loadedmetadata",l,{once:!0}),this.setManagedTimeout(l,2e3))},500),setTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},5e3)}else setTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},800)}a||this.hidePosterOverlay(),this._audioDescriptionDesiredState&&(this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled"))}async disableAudioDescription(){return this.audioDescriptionManager.disable()}async _legacyDisableAudioDescription(){if(!this.originalSrc)return;let e=this.element.currentTime,t=this.state.playing,i=null;if(this.captionManager&&this.captionManager.currentTrack){let o=this.captionManager.currentTrack.track;if(o&&o.activeCues&&o.activeCues.length>0){let n=o.activeCues[0];i=this.stripVTTFormatting(n.text)}}let s=this.resolvePosterPath(this.element.getAttribute("poster")||this.element.poster||this.options.poster),a=[];if(this.audioDescriptionCaptionTracks.length>0){let o=this.audioDescriptionCaptionTracks.map(n=>{let l=n.trackElement;if(!l||!l.parentNode)return null;let d=l.parentNode,p=l.nextSibling,m={};return Array.from(l.attributes).forEach(f=>{m[f.name]=f.value}),{trackInfo:n,parent:d,nextSibling:p,attributes:m}}).filter(Boolean);o.forEach(({trackInfo:n})=>{n.trackElement&&n.trackElement.parentNode&&n.trackElement.remove()}),this.element.load(),await new Promise(n=>{setTimeout(()=>{o.forEach(({trackInfo:l,parent:d,nextSibling:p,attributes:m})=>{a.push(l);let f=document.createElement("track");f.setAttribute("src",l.originalTrackSrc),Object.keys(m).forEach(v=>{v!=="src"&&v!=="data-desc-src"&&f.setAttribute(v,m[v])}),l.describedSrc&&f.setAttribute("data-desc-src",l.describedSrc),p&&p.parentNode?d.insertBefore(f,p):d.appendChild(f),l.trackElement=f}),this.invalidateTrackCache(),n()},100)})}let r=this.sourceElements;if(r.some(o=>o.getAttribute("data-orig-src"))){let o=[];r.forEach(d=>{let p=d.getAttribute("data-orig-src"),m=d.getAttribute("data-desc-src");if(p){let f=d.getAttribute("type");o.push({src:p,type:f,origSrc:p,descSrc:m})}else{let f=d.getAttribute("type"),v=d.getAttribute("src");o.push({src:v,type:f,origSrc:null,descSrc:m})}});let n=this.element.hasAttribute("src"),l=n?this.element.getAttribute("src"):null;n&&this.element.removeAttribute("src"),r.forEach(d=>{d.remove()}),o.forEach(d=>{let p=document.createElement("source");p.setAttribute("src",d.src),d.type&&p.setAttribute("type",d.type),d.origSrc&&p.setAttribute("data-orig-src",d.origSrc),d.descSrc&&p.setAttribute("data-desc-src",d.descSrc);let m=this.element.querySelector("track");m?this.element.insertBefore(p,m):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 o=this.originalAudioDescriptionSource||this.originalSrc;this.element.src=o,this.element.load()}await new Promise(o=>{let n=()=>{this.element.removeEventListener("loadedmetadata",n),o()};this.element.readyState>=1?o():this.element.addEventListener("loadedmetadata",n)}),(e>0||t)&&await new Promise(o=>{let n=()=>{this.element.removeEventListener("canplay",n),this.element.removeEventListener("canplaythrough",n),o()};this.element.readyState>=3?o():(this.element.addEventListener("canplay",n,{once:!0}),this.element.addEventListener("canplaythrough",n,{once:!0}),setTimeout(()=>{this.element.removeEventListener("canplay",n),this.element.removeEventListener("canplaythrough",n),o()},3e3))});let u=e;if(i&&this.captionManager&&this.captionManager.tracks.length>0){await new Promise(n=>setTimeout(n,500));let o=this.findMatchingCaptionTime(i,this.captionManager.tracks);o!==null&&(u=o,this.options.debug&&console.log(`[VidPly] Syncing via caption: ${e}s -> ${u}s`))}if(u>0&&(this.seek(u),await new Promise(o=>setTimeout(o,100))),t?(await this.play(),this.hidePosterOverlay()):(this.pause(),!t&&u===0?this.showPosterOverlay():this.hidePosterOverlay()),a.length>0&&this.captionManager){let o=this.state.captionsEnabled,n=null;if(this.captionManager.currentTrack){let d=this.captionManager.tracks.findIndex(p=>p.track===this.captionManager.currentTrack.track);d>=0&&(n={language:this.captionManager.tracks[d].language,kind:this.captionManager.tracks[d].kind})}setTimeout(()=>{if(this.captionManager.tracks=[],this.captionManager.loadTracks(),o&&n&&this.captionManager.tracks.length>0){let d=this.captionManager.tracks.findIndex(p=>p.language===n.language&&p.kind===n.kind);if(d>=0){let p=this.captionManager.tracks[d];if(p.track.readyState>=2)this.captionManager.enable(d);else{let m=()=>{p.track.removeEventListener("load",m),p.track.removeEventListener("error",m),this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(d)};p.track.addEventListener("load",m,{once:!0}),p.track.addEventListener("error",m,{once:!0}),p.track.mode="hidden",setTimeout(()=>{this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(d)},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 m=()=>{p.track.removeEventListener("load",m),p.track.removeEventListener("error",m),this.captionManager&&this.captionManager.tracks.includes(p)&&this.captionManager.enable(0)};p.track.addEventListener("load",m,{once:!0}),p.track.addEventListener("error",m,{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(){return this.audioDescriptionManager.toggle()}enableSignLanguage(){return this.signLanguageManager.enable()}_legacyEnableSignLanguage(){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 l=this.captionManager.currentTrack.language?.toLowerCase().split("-")[0];l&&this.signLanguageSources[l]&&(i=l,s=this.signLanguageSources[l])}if(!i&&this.options.language){let l=this.options.language.toLowerCase().split("-")[0];this.signLanguageSources[l]&&(i=l,s=this.signLanguageSources[l])}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",g.t("player.signLanguageDragResize")),this.signLanguageHeader=h.createElement("div",{className:`${this.options.classPrefix}-sign-language-header`,attributes:{tabindex:"0"}});let a=h.createElement("div",{className:`${this.options.classPrefix}-sign-language-header-left`}),r=h.createElement("h3",{textContent:g.t("player.signLanguageVideo")}),c=g.t("player.signLanguageSettings");if(this.signLanguageSettingsButton=h.createElement("button",{className:`${this.options.classPrefix}-sign-language-settings`,attributes:{type:"button","aria-label":c,"aria-expanded":"false"}}),this.signLanguageSettingsButton.appendChild(T("settings")),h.attachTooltip(this.signLanguageSettingsButton,c,this.options.classPrefix),this.signLanguageSettingsHandlers={settingsClick:l=>{if(l.preventDefault(),l.stopPropagation(),this.signLanguageDocumentClickHandler){let d=this.signLanguageSettingsMenuJustOpened;this.signLanguageSettingsMenuJustOpened=!0,setTimeout(()=>{this.signLanguageSettingsMenuJustOpened=d},100)}this.signLanguageSettingsMenuVisible?this.hideSignLanguageSettingsMenu():this.showSignLanguageSettingsMenu()},settingsKeydown:l=>{l.key==="d"||l.key==="D"?(l.preventDefault(),l.stopPropagation(),this.toggleSignLanguageKeyboardDragMode()):l.key==="r"||l.key==="R"?(l.preventDefault(),l.stopPropagation(),this.toggleSignLanguageResizeMode()):l.key==="Escape"&&this.signLanguageSettingsMenuVisible&&(l.preventDefault(),l.stopPropagation(),this.hideSignLanguageSettingsMenu())}},this.signLanguageSettingsButton.addEventListener("click",this.signLanguageSettingsHandlers.settingsClick),this.signLanguageSettingsButton.addEventListener("keydown",this.signLanguageSettingsHandlers.settingsKeydown),a.appendChild(this.signLanguageSettingsButton),this.signLanguageSelector=null,e){let l=`${this.options.classPrefix}-sign-language-select-${Date.now()}`,d=Object.keys(this.signLanguageSources).map(v=>({value:v,text:this.getSignLanguageLabel(v),selected:v===i})),{label:p,select:m}=U({classPrefix:this.options.classPrefix,labelClass:`${this.options.classPrefix}-sign-language-label`,selectClass:`${this.options.classPrefix}-sign-language-select`,labelText:"settings.language",selectId:l,options:d,onChange:v=>{v.stopPropagation();let y=v.target.value;this.switchSignLanguage(y)}});this.signLanguageSelector=m;let f=h.createElement("div",{className:`${this.options.classPrefix}-sign-language-selector-wrapper`});f.appendChild(p),f.appendChild(this.signLanguageSelector),Q(f),a.appendChild(f)}a.appendChild(r);let u=g.t("player.closeSignLanguage"),o=h.createElement("button",{className:`${this.options.classPrefix}-sign-language-close`,attributes:{type:"button","aria-label":u}});o.appendChild(T("close")),h.attachTooltip(o,u,this.options.classPrefix),o.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(a),this.signLanguageHeader.appendChild(o),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",g.t("player.signLanguage")),this.signLanguageVideo.muted=!0,this.signLanguageVideo.setAttribute("playsinline",""),this.signLanguageResizeHandles=["n","s","e","w","ne","nw","se","sw"].map(l=>{let d=h.createElement("div",{className:`${this.options.classPrefix}-sign-resize-handle ${this.options.classPrefix}-sign-resize-${l}`,attributes:{"data-direction":l,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return d.style.display="none",d}),this.signLanguageWrapper.appendChild(this.signLanguageHeader),this.signLanguageWrapper.appendChild(this.signLanguageVideo),this.signLanguageResizeHandles.forEach(l=>this.signLanguageWrapper.appendChild(l));let n=this.storage.getSignLanguagePreferences();n&&n.size&&n.size.width?this.signLanguageWrapper.style.width=n.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 l=this.captionManager.currentTrack.language?.toLowerCase().split("-")[0];l&&this.signLanguageSources[l]&&this.currentSignLanguage!==l&&(this.switchSignLanguage(l),this.signLanguageSelector.value=l)}},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(){return this.signLanguageManager.disable()}toggleSignLanguage(){return this.signLanguageManager.toggle()}setupSignLanguageInteraction(){return this.signLanguageManager._setupInteraction()}_legacySetupSignLanguageInteraction(){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 K(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:g.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){return this.signLanguageManager.switchLanguage(e)}_legacySwitchSignLanguage(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(){return this.signLanguageManager.showSettingsMenu()}_legacyShowSignLanguageSettingsMenu(){if(this.signLanguageSettingsMenuJustOpened=!0,setTimeout(()=>{this.signLanguageSettingsMenuJustOpened=!1},350),this.signLanguageDocumentClickHandlerAdded||(this.signLanguageDocumentClickHandler=n=>{this.signLanguageSettingsMenuJustOpened||this.signLanguageSettingsButton&&(this.signLanguageSettingsButton===n.target||this.signLanguageSettingsButton.contains(n.target))||this.signLanguageSettingsMenu&&this.signLanguageSettingsMenu.contains(n.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=R(this.signLanguageSettingsMenu,this.signLanguageSettingsButton,`.${this.options.classPrefix}-sign-language-settings-item`,()=>this.hideSignLanguageSettingsMenu({focusButton:!0})),this.positionSignLanguageSettingsMenu(),this.updateSignLanguageDragOptionState(),this.updateSignLanguageResizeOptionState(),V(this.signLanguageSettingsMenu,`.${this.options.classPrefix}-sign-language-settings-item`);return}this.signLanguageSettingsMenu=h.createElement("div",{className:`${this.options.classPrefix}-sign-language-settings-menu`,attributes:{role:"menu"}});let e=O({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=O({classPrefix:this.options.classPrefix,itemClass:`${this.options.classPrefix}-sign-language-settings-item`,icon:"resize",label:"player.enableSignResizeMode",hasTextClass:!0,onClick:n=>{n.preventDefault(),n.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 a=s.querySelector(`.${this.options.classPrefix}-tooltip`);a&&a.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 c=O({classPrefix:this.options.classPrefix,itemClass:`${this.options.classPrefix}-sign-language-settings-item`,icon:"close",label:"transcript.closeMenu",onClick:()=>{this.hideSignLanguageSettingsMenu()}}),u=c.querySelector(`.${this.options.classPrefix}-tooltip`);u&&u.remove();let o=c.querySelector(`.${this.options.classPrefix}-button-text`);o&&o.remove(),this.signLanguageSettingsMenu.appendChild(e),this.signLanguageSettingsMenu.appendChild(s),this.signLanguageSettingsMenu.appendChild(c),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=R(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(),V(this.signLanguageSettingsMenu,`.${this.options.classPrefix}-sign-language-settings-item`)}hideSignLanguageSettingsMenu({focusButton:e=!0}={}){return this.signLanguageManager.hideSettingsMenu({focusButton:e})}positionSignLanguageSettingsMenuImmediate(){if(!this.signLanguageSettingsMenu||!this.signLanguageSettingsButton)return;let e=this.signLanguageSettingsButton.getBoundingClientRect(),t=this.signLanguageSettingsMenu.getBoundingClientRect(),i=window.innerWidth,s=window.innerHeight,a=this.signLanguageSettingsButton.parentElement;if(!a)return;let r=a.getBoundingClientRect(),c=e.left+e.width/2-r.left,u=e.bottom-r.top,o=e.top-r.top,n=e.top,l=s-e.bottom,d=u+8,p=null;l<t.height+20&&n>l?(d=null,p=r.bottom-r.top-o+8,this.signLanguageSettingsMenu.classList.add("vidply-menu-above")):this.signLanguageSettingsMenu.classList.remove("vidply-menu-above");let m=c-t.width/2,f="auto",v="translateX(0)",y=e.left+e.width/2-t.width/2;y<10?(m=0,v="translateX(0)"):y+t.width>i-10?(m="auto",f=0,v="translateX(0)"):(m=c,v="translateX(-50%)"),d!==null?(this.signLanguageSettingsMenu.style.top=`${d}px`,this.signLanguageSettingsMenu.style.bottom="auto"):p!==null&&(this.signLanguageSettingsMenu.style.top="auto",this.signLanguageSettingsMenu.style.bottom=`${p}px`),m!=="auto"?(this.signLanguageSettingsMenu.style.left=`${m}px`,this.signLanguageSettingsMenu.style.right="auto"):(this.signLanguageSettingsMenu.style.left="auto",this.signLanguageSettingsMenu.style.right=`${f}px`),this.signLanguageSettingsMenu.style.transform=v}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=R(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?g.t("player.disableSignDragMode"):g.t("player.enableSignDragMode"),i=e?g.t("player.disableSignDragModeAria"):g.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?g.t("player.disableSignResizeMode"):g.t("player.enableSignResizeMode"),i=e?g.t("player.disableSignResizeModeAria"):g.t("player.enableSignResizeModeAria");this.signLanguageResizeOptionButton.setAttribute("aria-checked",e?"true":"false"),this.signLanguageResizeOptionButton.setAttribute("aria-label",i),this.signLanguageResizeOptionText&&(this.signLanguageResizeOptionText.textContent=t)}constrainSignLanguagePosition(){return this.signLanguageManager.constrainPosition()}saveSignLanguagePreferences(){return this.signLanguageManager.savePreferences()}_legacyConstrainSignLanguagePosition(){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,a=e.top-t.top,r=e.width,c=e.height,u=i.width||280,o=i.height||280*9/16,n,l,d=16,p=95;switch(this.signLanguageDesiredPosition||"bottom-right"){case"bottom-right":n=s+r-u-d,l=a+c-o-p;break;case"bottom-left":n=s+d,l=a+c-o-p;break;case"top-right":n=s+r-u-d,l=a+d;break;case"top-left":n=s+d,l=a+d;break;default:n=s+r-u-d,l=a+c-o-p}n=Math.max(s,Math.min(n,s+r-u)),l=Math.max(a,Math.min(l,a+c-o-p)),this.signLanguageWrapper.style.left=`${n}px`,this.signLanguageWrapper.style.top=`${l}px`,this.signLanguageWrapper.style.right="auto",this.signLanguageWrapper.style.bottom="auto",this.signLanguageWrapper.classList.remove(...Array.from(this.signLanguageWrapper.classList).filter(f=>f.startsWith("vidply-sign-position-")))}_legacySaveSignLanguagePreferences(){this.signLanguageWrapper&&this.storage.saveSignLanguagePreferences({size:{width:this.signLanguageWrapper.style.width}})}cleanupSignLanguage(){return this.signLanguageManager.cleanup()}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){if(this._switchingRenderer){this.log("Suppressing error during renderer switch:",e,"debug");return}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(a=>({start:a.startTime,end:a.endTime,text:a.text}))),s.forEach(a=>{this.handleMetadataCue(a)})},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",a=e.querySelector(i);a&&!a.dataset.vidplyAlertTitleOriginal&&(a.dataset.vidplyAlertTitleOriginal=a.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",a=e.querySelector(i);a&&a.dataset.vidplyAlertTitleOriginal&&(a.textContent=a.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 a=t.show!==void 0?t.show:i.show!==!1;if(a){let o=i.display||s.dataset.vidplyAlertDisplay||"block";s.style.display=o,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 c=t.focus!==void 0?t.focus:i.focusOnShow??t.reason!=="focus";a&&c&&(s.tabIndex===-1&&!s.hasAttribute("tabindex")&&s.setAttribute("tabindex","-1"),s.focus({preventScroll:!0})),a&&i.autoScroll!==!1&&t.autoScroll!==!1&&s.scrollIntoView({behavior:"smooth",block:"nearest"});let u=i.continueButton;if(u){let o=null;if(u==="self"||s.matches(u)?o=s:o=s.querySelector(u)||document.querySelector(u),o&&!this.metadataAlertHandlers.has(e)){let n=()=>{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 d=i.focusTarget||"playButton";this.setManagedTimeout(()=>{this.focusMetadataTarget(d,s)},i.focusDelay??100)};o.addEventListener("click",n),this.metadataAlertHandlers.set(e,{button:o,handler:n})}}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 a=this.normalizeMetadataSelector(s.alert||s.selector||s.target);if(!a)return;let r=document.querySelector(a);if(!r){this.options.debug&&this.log("[Metadata] Hashtag target not found:",a);return}if(this.options.debug&&this.log("[Metadata] Handling hashtag",i,{selector:a,config:s}),this.cacheMetadataAlertContent(r,s),s.title){let o=s.titleSelector||"[data-vidply-alert-title], h3, header",n=r.querySelector(o);n&&(n.textContent=s.title)}if(s.message){let o=s.messageSelector||"[data-vidply-alert-message], p",n=r.querySelector(o);n&&(n.textContent=s.message)}let c=s.show!==!1,u=s.focus!==void 0?s.focus:!1;this.handleMetadataAlert(a,{element:r,show:c,focus:u,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 a=i[1],r=this.normalizeMetadataSelector(a),c=r?document.querySelector(r):null;c?(this.options.debug&&this.log("[Metadata] Focusing element:",r),c.tabIndex===-1&&!c.hasAttribute("tabindex")&&c.setAttribute("tabindex","-1"),this.setManagedTimeout(()=>{c.focus({preventScroll:!0})},10)):this.options.debug&&this.log("[Metadata] Element not found:",r||a),this.emit("metadata:focus",{time:e.startTime,target:a,selector:r,element:c,text:t}),r&&this.handleMetadataAlert(r,{element:c,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))}};z.instances=[];var ce=0,se=class{constructor(e,t={}){this.player=e,this.tracks=[],this.initialTracks=Array.isArray(t.tracks)?t.tracks:[],this.currentIndex=-1,this.instanceId=++ce,this.uniqueId=`vidply-playlist-${this.instanceId}`,this.options={autoAdvance:t.autoAdvance!==!1,autoPlayFirst:t.autoPlayFirst!==!1,loop:t.loop||!1,showPanel:t.showPanel!==!1,recreatePlayers:t.recreatePlayers||!1,...t},this.container=null,this.playlistPanel=null,this.trackInfoElement=null,this.navigationFeedback=null,this.isPanelVisible=this.options.showPanel!==!1,this.isChangingTrack=!1,this.hostElement=t.hostElement||null,this.PlayerClass=t.PlayerClass||null,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)}getTrackMediaType(e){let t=e.src||"";return t.includes("youtube.com")||t.includes("youtu.be")?"youtube":t.includes("vimeo.com")?"vimeo":t.includes("soundcloud.com")||t.includes("api.soundcloud.com")?"soundcloud":t.includes(".m3u8")?"hls":e.type&&e.type.startsWith("audio/")?"audio":"video"}async recreatePlayerForTrack(e,t=!1){if(!this.hostElement||!this.PlayerClass)return console.warn("VidPly Playlist: Cannot recreate player - missing hostElement or PlayerClass"),!1;let i=this.getTrackMediaType(e),s=i==="audio"?"audio":"video",a=this.isPanelVisible,r=[...this.tracks],c=this.currentIndex;this.trackArtworkElement&&this.trackArtworkElement.parentNode&&this.trackArtworkElement.parentNode.removeChild(this.trackArtworkElement),this.trackInfoElement&&this.trackInfoElement.parentNode&&this.trackInfoElement.parentNode.removeChild(this.trackInfoElement),this.navigationFeedback&&this.navigationFeedback.parentNode&&this.navigationFeedback.parentNode.removeChild(this.navigationFeedback),this.playlistPanel&&this.playlistPanel.parentNode&&this.playlistPanel.parentNode.removeChild(this.playlistPanel),this.player&&(this.player.off("ended",this.handleTrackEnd),this.player.off("error",this.handleTrackError),this.player.destroy()),this.hostElement.innerHTML="";let u=document.createElement(s);u.setAttribute("preload","metadata"),s==="video"&&e.poster&&(i==="video"||i==="hls")&&u.setAttribute("poster",e.poster);let o=["youtube","vimeo","soundcloud","hls"].includes(i);if(!o){let l=document.createElement("source");l.src=e.src,e.type&&(l.type=e.type),u.appendChild(l),e.tracks&&e.tracks.length>0&&e.tracks.forEach(d=>{let p=document.createElement("track");p.src=d.src,p.kind=d.kind||"captions",p.srclang=d.srclang||"en",p.label=d.label||d.srclang,d.default&&(p.default=!0),u.appendChild(p)})}this.hostElement.appendChild(u);let n={mediaType:s,poster:e.poster,audioDescriptionSrc:e.audioDescriptionSrc||null,audioDescriptionDuration:e.audioDescriptionDuration||null,signLanguageSrc:e.signLanguageSrc||null};if(this.player=new this.PlayerClass(u,n),this.player.playlistManager=this,await new Promise(l=>{this.player.on("ready",l)}),this.player.on("ended",this.handleTrackEnd),this.player.on("error",this.handleTrackError),this.player.container){if(this.trackArtworkElement){let l=this.player.container.querySelector(".vidply-video-wrapper");l?this.player.container.insertBefore(this.trackArtworkElement,l):this.player.container.appendChild(this.trackArtworkElement)}this.trackInfoElement&&this.player.container.appendChild(this.trackInfoElement),this.navigationFeedback&&this.player.container.appendChild(this.navigationFeedback),this.playlistPanel&&this.player.container.appendChild(this.playlistPanel)}return this.container=this.player.container,this.updatePlayerControls(),this.tracks=r,this.currentIndex=c,this.updatePlaylistUI(),this.isPanelVisible=a,this.playlistPanel&&(this.playlistPanel.style.display=a?"":"none"),o?this.player.load({src:e.src,type:e.type,poster:e.poster,tracks:e.tracks||[],audioDescriptionSrc:e.audioDescriptionSrc||null,signLanguageSrc:e.signLanguageSrc||null}):this.player.load({src:e.src,type:e.type,poster:e.poster,tracks:e.tracks||[],audioDescriptionSrc:e.audioDescriptionSrc||null,signLanguageSrc:e.signLanguageSrc||null}),t&&setTimeout(()=>{this.player.play()},100),!0}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 a=JSON.parse(s);Array.isArray(a)&&a.length>0?(console.log(`VidPly Playlist: Loaded ${a.length} tracks from data-playlist`),this.loadPlaylist(a)):console.warn("VidPly Playlist: data-playlist is not a valid array or is empty")}catch(a){console.error("VidPly Playlist: Failed to parse data-playlist attribute",a)}}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 a=e.getAttribute("data-playlist-show-panel");a!==null&&(this.options.showPanel=a==="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()}async loadTrack(e){if(e<0||e>=this.tracks.length){console.warn("VidPly Playlist: Invalid track index",e);return}let t=this.tracks[e];if(this.isChangingTrack=!0,this.currentIndex=e,this.options.recreatePlayers&&this.hostElement&&this.PlayerClass){let i=this.player?this.player.element.tagName==="AUDIO"?"audio":"video":null,s=this.getTrackMediaType(t);if(i!==(s==="audio"||s==="soundcloud"?"audio":"video")){await this.recreatePlayerForTrack(t,!1),this.updateTrackInfo(t),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:t,total:this.tracks.length}),setTimeout(()=>{this.isChangingTrack=!1},150);return}}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)}async 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];if(this.isChangingTrack=!0,this.currentIndex=e,this.options.recreatePlayers&&this.hostElement&&this.PlayerClass){let s=this.player?this.player.element.tagName==="AUDIO"?"audio":"video":null,a=this.getTrackMediaType(i);if(s!==(a==="audio"||a==="soundcloud"?"audio":"video")){await this.recreatePlayerForTrack(i,!0),this.updateTrackInfo(i),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:i,total:this.tracks.length}),setTimeout(()=>{this.isChangingTrack=!1},150);return}}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()}isExternalRendererUrl(e){return e?e.includes("youtube.com")||e.includes("youtu.be")||e.includes("vimeo.com")||e.includes("soundcloud.com")||e.includes("api.soundcloud.com")||e.includes(".m3u8"):!1}handleTrackError(e){let t=this.getCurrentTrack();t&&t.src&&this.isExternalRendererUrl(t.src)||this.isChangingTrack||(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 a=this.getEffectiveDuration(s),r=a?x.formatTime(a):"",c=t.querySelector(".vidply-playlist-duration-badge");c&&(c.textContent=r);let u=t.querySelector(".vidply-playlist-item-duration");u&&(u.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=h.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=h.createElement("div",{className:"vidply-track-info",attributes:{role:"status"}}),this.trackInfoElement.style.display="none",this.container.appendChild(this.trackInfoElement),this.navigationFeedback=h.createElement("div",{className:"vidply-sr-only",attributes:{role:"status","aria-live":"polite","aria-atomic":"true"}}),this.container.appendChild(this.navigationFeedback),this.playlistPanel=h.createElement("div",{className:"vidply-playlist-panel",attributes:{id:`${this.uniqueId}-panel`,role:"region","aria-label":g.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||g.t("playlist.untitled"),a=e.artist||"",r=this.getEffectiveDuration(e),c=r?x.formatTime(r):"",u=r?x.formatDuration(r):"",o=a?g.t("playlist.by")+a:"",n=u?`. ${u}`:"",l=g.t("playlist.nowPlaying",{current:t,total:i,title:s,artist:o})+n,d=g.t("playlist.trackOf",{current:t,total:i}),p=c?`<span class="vidply-track-duration" aria-hidden="true">${h.escapeHTML(c)}</span>`:"",m=e.description||"";this.trackInfoElement.innerHTML=`
|
|
13
13
|
<span class="vidply-sr-only">${h.escapeHTML(l)}</span>
|
|
14
14
|
<div class="vidply-track-header" aria-hidden="true">
|
|
15
15
|
<span class="vidply-track-number">${h.escapeHTML(d)}</span>
|
|
@@ -17,5 +17,5 @@ import{a as ne}from"./vidply.chunk-OXXPY2XB.min.js";import{a as h,b as g,c as x,
|
|
|
17
17
|
</div>
|
|
18
18
|
<div class="vidply-track-title" aria-hidden="true">${h.escapeHTML(s)}</div>
|
|
19
19
|
${a?`<div class="vidply-track-artist" aria-hidden="true">${h.escapeHTML(a)}</div>`:""}
|
|
20
|
-
${
|
|
21
|
-
`,this.trackInfoElement.style.display="block",this.updateTrackArtwork(e)}updateTrackArtwork(e){this.trackArtworkElement&&(e.poster?(this.trackArtworkElement.style.backgroundImage=`url(${e.poster})`,this.trackArtworkElement.style.display="block"):this.trackArtworkElement.style.display="none")}renderPlaylist(){if(!this.playlistPanel)return;this.playlistPanel.innerHTML="";let e=h.createElement("h2",{className:"vidply-playlist-header",attributes:{id:`${this.uniqueId}-heading`}});e.textContent=`${g.t("playlist.title")} (${this.tracks.length})`,this.playlistPanel.appendChild(e);let t=h.createElement("div",{className:"vidply-sr-only",attributes:{id:`${this.uniqueId}-keyboard-instructions`}});t.textContent=g.t("playlist.keyboardInstructions"),this.playlistPanel.appendChild(t);let i=h.createElement("ul",{className:"vidply-playlist-list",attributes:{role:"listbox","aria-labelledby":`${this.uniqueId}-heading`,"aria-describedby":`${this.uniqueId}-keyboard-instructions`}});this.tracks.forEach((s,a)=>{let r=this.createPlaylistItem(s,a);i.appendChild(r)}),this.playlistPanel.appendChild(i),this.isPanelVisible&&(this.playlistPanel.style.display="block")}createPlaylistItem(e,t){let i=g.t("playlist.trackOf",{current:t+1,total:this.tracks.length}),s=e.title||g.t("playlist.trackUntitled",{number:t+1}),a=e.artist?g.t("playlist.by")+e.artist:"",r=this.getEffectiveDuration(e),c=r?x.formatTime(r):"",u=r?x.formatDuration(r):"",o=t===this.currentIndex,n=`${s}${a}`;u&&(n+=`. ${u}`);let l=h.createElement("li",{className:o?"vidply-playlist-item vidply-playlist-item-active":"vidply-playlist-item",attributes:{"data-playlist-index":t}}),d=h.createElement("button",{className:"vidply-playlist-item-button",attributes:{type:"button",role:"option",tabIndex:t===0?0:-1,"aria-label":n,"aria-posinset":t+1,"aria-setsize":this.tracks.length,"aria-checked":o?"true":"false"}});o&&(d.setAttribute("aria-current","true"),d.setAttribute("tabIndex","0"));let p=h.createElement("span",{className:"vidply-playlist-thumbnail-container",attributes:{"aria-hidden":"true"}}),y=h.createElement("span",{className:"vidply-playlist-thumbnail"});if(e.poster)y.style.backgroundImage=`url(${e.poster})`;else{let b=w("music");b.classList.add("vidply-playlist-thumbnail-icon"),y.appendChild(b)}if(p.appendChild(y),c&&e.poster){let b=h.createElement("span",{className:"vidply-playlist-duration-badge"});b.textContent=c,p.appendChild(b)}d.appendChild(p);let f=h.createElement("span",{className:"vidply-playlist-item-info",attributes:{"aria-hidden":"true"}}),L=h.createElement("span",{className:"vidply-playlist-item-title-row"}),m=h.createElement("span",{className:"vidply-playlist-item-title"});if(m.textContent=s,L.appendChild(m),c&&!e.poster){let b=h.createElement("span",{className:"vidply-playlist-item-duration"});b.textContent=c,L.appendChild(b)}if(f.appendChild(L),e.artist){let b=h.createElement("span",{className:"vidply-playlist-item-artist"});b.textContent=e.artist,f.appendChild(b)}if(e.description){let b=h.createElement("span",{className:"vidply-playlist-item-description"});b.textContent=e.description,f.appendChild(b)}d.appendChild(f);let k=w("play");return k.classList.add("vidply-playlist-item-icon"),k.setAttribute("aria-hidden","true"),d.appendChild(k),d.addEventListener("click",()=>{this.play(t,!0)}),d.addEventListener("keydown",b=>{this.handlePlaylistItemKeydown(b,t)}),l.appendChild(d),l}handlePlaylistItemKeydown(e,t){let i=Array.from(this.playlistPanel.querySelectorAll(".vidply-playlist-item-button")),s=-1,a="";switch(e.key){case"Enter":case" ":e.preventDefault(),e.stopPropagation(),this.play(t,!0);return;case"ArrowDown":e.preventDefault(),e.stopPropagation(),t<i.length-1?s=t+1:a=g.t("playlist.endOfPlaylist",{current:i.length,total:i.length});break;case"ArrowUp":e.preventDefault(),e.stopPropagation(),t>0?s=t-1:a=g.t("playlist.beginningOfPlaylist",{total:i.length});break;case"PageDown":e.preventDefault(),e.stopPropagation(),s=Math.min(t+5,i.length-1),s===i.length-1&&t!==s&&(a=g.t("playlist.jumpedToLastTrack",{current:s+1,total:i.length}));break;case"PageUp":e.preventDefault(),e.stopPropagation(),s=Math.max(t-5,0),s===0&&t!==s&&(a=g.t("playlist.jumpedToFirstTrack",{total:i.length}));break;case"Home":e.preventDefault(),e.stopPropagation(),s=0,t!==0&&(a=g.t("playlist.firstTrack",{total:i.length}));break;case"End":e.preventDefault(),e.stopPropagation(),s=i.length-1,t!==i.length-1&&(a=g.t("playlist.lastTrack",{current:i.length,total:i.length}));break}if(s!==-1&&s!==t){i[t].setAttribute("tabIndex","-1"),i[s].setAttribute("tabIndex","0"),i[s].focus({preventScroll:!1});let r=i[s].closest(".vidply-playlist-item");r&&r.scrollIntoView({behavior:"smooth",block:"nearest"})}a&&this.navigationFeedback&&(this.navigationFeedback.textContent=a,setTimeout(()=>{this.navigationFeedback&&(this.navigationFeedback.textContent="")},1e3))}updatePlaylistUI(){if(!this.playlistPanel)return;let e=this.playlistPanel.querySelectorAll(".vidply-playlist-item"),t=this.playlistPanel.querySelectorAll(".vidply-playlist-item-button");e.forEach((i,s)=>{let a=t[s];if(!a)return;let r=this.tracks[s],c=g.t("playlist.trackOf",{current:s+1,total:this.tracks.length}),u=r.title||g.t("playlist.trackUntitled",{number:s+1}),o=r.artist?g.t("playlist.by")+r.artist:"",n=this.getEffectiveDuration(r),l=n?x.formatDuration(n):"";if(s===this.currentIndex){i.classList.add("vidply-playlist-item-active"),a.setAttribute("aria-current","true"),a.setAttribute("aria-checked","true"),a.setAttribute("tabIndex","0");let d=`${u}${o}`;l&&(d+=`. ${l}`),a.setAttribute("aria-label",d),i.scrollIntoView({behavior:"smooth",block:"nearest"})}else{i.classList.remove("vidply-playlist-item-active"),a.removeAttribute("aria-current"),a.setAttribute("aria-checked","false"),a.setAttribute("tabIndex","-1");let d=`${u}${o}`;l&&(d+=`. ${l}`),a.setAttribute("aria-label",d)}})}getCurrentTrack(){return this.tracks[this.currentIndex]||null}getPlaylistInfo(){return{currentIndex:this.currentIndex,totalTracks:this.tracks.length,currentTrack:this.getCurrentTrack(),hasNext:this.hasNext(),hasPrevious:this.hasPrevious()}}hasNext(){return this.options.loop?!0:this.currentIndex<this.tracks.length-1}hasPrevious(){return this.options.loop?!0:this.currentIndex>0}addTrack(e){this.tracks.push(e),this.playlistPanel&&this.renderPlaylist()}removeTrack(e){e<0||e>=this.tracks.length||(this.tracks.splice(e,1),e<this.currentIndex?this.currentIndex--:e===this.currentIndex&&(this.currentIndex>=this.tracks.length&&(this.currentIndex=this.tracks.length-1),this.currentIndex>=0&&this.play(this.currentIndex)),this.playlistPanel&&this.renderPlaylist())}clear(){this.tracks=[],this.currentIndex=-1,this.playlistPanel&&(this.playlistPanel.innerHTML="",this.playlistPanel.style.display="none"),this.trackInfoElement&&(this.trackInfoElement.innerHTML="",this.trackInfoElement.style.display="none"),this.trackArtworkElement&&(this.trackArtworkElement.style.backgroundImage="",this.trackArtworkElement.style.display="none")}togglePanel(e){return this.playlistPanel?((e!==void 0?e:this.playlistPanel.style.display==="none")?(this.playlistPanel.style.display="block",this.isPanelVisible=!0,this.tracks.length>0&&setTimeout(()=>{let i=this.playlistPanel.querySelector('.vidply-playlist-item[tabindex="0"]');i&&i.focus({preventScroll:!0})},100),this.player.controlBar&&this.player.controlBar.controls.playlistToggle&&(this.player.controlBar.controls.playlistToggle.setAttribute("aria-expanded","true"),this.player.controlBar.controls.playlistToggle.setAttribute("aria-pressed","true"))):(this.playlistPanel.style.display="none",this.isPanelVisible=!1,this.player.controlBar&&this.player.controlBar.controls.playlistToggle&&(this.player.controlBar.controls.playlistToggle.setAttribute("aria-expanded","false"),this.player.controlBar.controls.playlistToggle.setAttribute("aria-pressed","false"),this.player.controlBar.controls.playlistToggle.focus({preventScroll:!0}))),this.isPanelVisible):!1}showPanel(){return this.togglePanel(!0)}hidePanel(){return this.togglePanel(!1)}destroy(){this.player.off("ended",this.handleTrackEnd),this.player.off("error",this.handleTrackError),this.trackArtworkElement&&this.trackArtworkElement.remove(),this.trackInfoElement&&this.trackInfoElement.remove(),this.playlistPanel&&this.playlistPanel.remove(),this.clear()}};function oe(){document.querySelectorAll("[data-vidply]").forEach(e=>{let t=e.dataset.vidplyOptions?JSON.parse(e.dataset.vidplyOptions):{},s={...ce(e.dataset),...t};new z(e,s)})}function ce(T){let e={},t={signLanguageSrc:"signLanguageSrc",signLanguageButton:"signLanguageButton",signLanguagePosition:"signLanguagePosition",audioDescriptionSrc:"audioDescriptionSrc",audioDescriptionButton:"audioDescriptionButton",autoplay:"autoplay",loop:"loop",muted:"muted",controls:"controls",poster:"poster",width:"width",height:"height",language:"language",captions:"captions",captionsDefault:"captionsDefault",transcript:"transcript",transcriptButton:"transcriptButton",keyboard:"keyboard",responsive:"responsive",pipButton:"pipButton",fullscreenButton:"fullscreenButton"};Object.keys(t).forEach(s=>{let a=t[s],r=T[s];r!==void 0&&(r==="true"?e[a]=!0:r==="false"?e[a]=!1:!isNaN(r)&&r!==""?e[a]=Number(r):e[a]=r)});let i={};if(Object.keys(T).forEach(s=>{if(s.startsWith("signLanguageSrc")&&s!=="signLanguageSrc"){let a=s.match(/^signLanguageSrc([A-Z][a-z]*)$/);if(a){let r=a[1].toLowerCase();i[r]=T[s]}}}),Object.keys(i).length>0&&(e.signLanguageSources=i,T.signLanguageSrc&&!e.signLanguageSrc&&(e.signLanguageSrc=T.signLanguageSrc)),T.vidplyLanguageFiles)try{e.languageFiles=JSON.parse(T.vidplyLanguageFiles)}catch(s){console.warn("Invalid JSON in data-vidply-language-files:",s)}if(T.vidplyLanguageFile)try{let s=JSON.parse(T.vidplyLanguageFile);typeof s=="object"&&s!==null&&(e.languageFiles=s)}catch{T.vidplyLanguageFileCode&&T.vidplyLanguageFileUrl&&(e.languageFile=T.vidplyLanguageFileCode,e.languageFileUrl=T.vidplyLanguageFileUrl)}else T.vidplyLanguageFileCode&&T.vidplyLanguageFileUrl&&(e.languageFile=T.vidplyLanguageFileCode,e.languageFileUrl=T.vidplyLanguageFileUrl);return e}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",oe):oe();var st=z;export{z as Player,ie as PlaylistManager,st as default};
|
|
20
|
+
${m?`<div class="vidply-track-description" aria-hidden="true">${h.escapeHTML(m)}</div>`:""}
|
|
21
|
+
`,this.trackInfoElement.style.display="block",this.updateTrackArtwork(e)}updateTrackArtwork(e){this.trackArtworkElement&&(e.poster?(this.trackArtworkElement.style.backgroundImage=`url(${e.poster})`,this.trackArtworkElement.style.display="block"):this.trackArtworkElement.style.display="none")}renderPlaylist(){if(!this.playlistPanel)return;this.playlistPanel.innerHTML="";let e=h.createElement("h2",{className:"vidply-playlist-header",attributes:{id:`${this.uniqueId}-heading`}});e.textContent=`${g.t("playlist.title")} (${this.tracks.length})`,this.playlistPanel.appendChild(e);let t=h.createElement("div",{className:"vidply-sr-only",attributes:{id:`${this.uniqueId}-keyboard-instructions`}});t.textContent=g.t("playlist.keyboardInstructions"),this.playlistPanel.appendChild(t);let i=h.createElement("ul",{className:"vidply-playlist-list",attributes:{role:"listbox","aria-labelledby":`${this.uniqueId}-heading`,"aria-describedby":`${this.uniqueId}-keyboard-instructions`}});this.tracks.forEach((s,a)=>{let r=this.createPlaylistItem(s,a);i.appendChild(r)}),this.playlistPanel.appendChild(i),this.isPanelVisible&&(this.playlistPanel.style.display="block")}createPlaylistItem(e,t){let i=g.t("playlist.trackOf",{current:t+1,total:this.tracks.length}),s=e.title||g.t("playlist.trackUntitled",{number:t+1}),a=e.artist?g.t("playlist.by")+e.artist:"",r=this.getEffectiveDuration(e),c=r?x.formatTime(r):"",u=r?x.formatDuration(r):"",o=t===this.currentIndex,n=`${s}${a}`;u&&(n+=`. ${u}`);let l=h.createElement("li",{className:o?"vidply-playlist-item vidply-playlist-item-active":"vidply-playlist-item",attributes:{"data-playlist-index":t}}),d=h.createElement("button",{className:"vidply-playlist-item-button",attributes:{type:"button",role:"option",tabIndex:t===0?0:-1,"aria-label":n,"aria-posinset":t+1,"aria-setsize":this.tracks.length,"aria-checked":o?"true":"false"}});o&&(d.setAttribute("aria-current","true"),d.setAttribute("tabIndex","0"));let p=h.createElement("span",{className:"vidply-playlist-thumbnail-container",attributes:{"aria-hidden":"true"}}),m=h.createElement("span",{className:"vidply-playlist-thumbnail"});if(e.poster)m.style.backgroundImage=`url(${e.poster})`;else{let b=T("music");b.classList.add("vidply-playlist-thumbnail-icon"),m.appendChild(b)}if(p.appendChild(m),c&&e.poster){let b=h.createElement("span",{className:"vidply-playlist-duration-badge"});b.textContent=c,p.appendChild(b)}d.appendChild(p);let f=h.createElement("span",{className:"vidply-playlist-item-info",attributes:{"aria-hidden":"true"}}),v=h.createElement("span",{className:"vidply-playlist-item-title-row"}),y=h.createElement("span",{className:"vidply-playlist-item-title"});if(y.textContent=s,v.appendChild(y),c&&!e.poster){let b=h.createElement("span",{className:"vidply-playlist-item-duration"});b.textContent=c,v.appendChild(b)}if(f.appendChild(v),e.artist){let b=h.createElement("span",{className:"vidply-playlist-item-artist"});b.textContent=e.artist,f.appendChild(b)}if(e.description){let b=h.createElement("span",{className:"vidply-playlist-item-description"});b.textContent=e.description,f.appendChild(b)}d.appendChild(f);let M=T("play");return M.classList.add("vidply-playlist-item-icon"),M.setAttribute("aria-hidden","true"),d.appendChild(M),d.addEventListener("click",()=>{this.play(t,!0)}),d.addEventListener("keydown",b=>{this.handlePlaylistItemKeydown(b,t)}),l.appendChild(d),l}handlePlaylistItemKeydown(e,t){let i=Array.from(this.playlistPanel.querySelectorAll(".vidply-playlist-item-button")),s=-1,a="";switch(e.key){case"Enter":case" ":e.preventDefault(),e.stopPropagation(),this.play(t,!0);return;case"ArrowDown":e.preventDefault(),e.stopPropagation(),t<i.length-1?s=t+1:a=g.t("playlist.endOfPlaylist",{current:i.length,total:i.length});break;case"ArrowUp":e.preventDefault(),e.stopPropagation(),t>0?s=t-1:a=g.t("playlist.beginningOfPlaylist",{total:i.length});break;case"PageDown":e.preventDefault(),e.stopPropagation(),s=Math.min(t+5,i.length-1),s===i.length-1&&t!==s&&(a=g.t("playlist.jumpedToLastTrack",{current:s+1,total:i.length}));break;case"PageUp":e.preventDefault(),e.stopPropagation(),s=Math.max(t-5,0),s===0&&t!==s&&(a=g.t("playlist.jumpedToFirstTrack",{total:i.length}));break;case"Home":e.preventDefault(),e.stopPropagation(),s=0,t!==0&&(a=g.t("playlist.firstTrack",{total:i.length}));break;case"End":e.preventDefault(),e.stopPropagation(),s=i.length-1,t!==i.length-1&&(a=g.t("playlist.lastTrack",{current:i.length,total:i.length}));break}if(s!==-1&&s!==t){i[t].setAttribute("tabIndex","-1"),i[s].setAttribute("tabIndex","0"),i[s].focus({preventScroll:!1});let r=i[s].closest(".vidply-playlist-item");r&&r.scrollIntoView({behavior:"smooth",block:"nearest"})}a&&this.navigationFeedback&&(this.navigationFeedback.textContent=a,setTimeout(()=>{this.navigationFeedback&&(this.navigationFeedback.textContent="")},1e3))}updatePlaylistUI(){if(!this.playlistPanel)return;let e=this.playlistPanel.querySelectorAll(".vidply-playlist-item"),t=this.playlistPanel.querySelectorAll(".vidply-playlist-item-button");e.forEach((i,s)=>{let a=t[s];if(!a)return;let r=this.tracks[s],c=g.t("playlist.trackOf",{current:s+1,total:this.tracks.length}),u=r.title||g.t("playlist.trackUntitled",{number:s+1}),o=r.artist?g.t("playlist.by")+r.artist:"",n=this.getEffectiveDuration(r),l=n?x.formatDuration(n):"";if(s===this.currentIndex){i.classList.add("vidply-playlist-item-active"),a.setAttribute("aria-current","true"),a.setAttribute("aria-checked","true"),a.setAttribute("tabIndex","0");let d=`${u}${o}`;l&&(d+=`. ${l}`),a.setAttribute("aria-label",d),i.scrollIntoView({behavior:"smooth",block:"nearest"})}else{i.classList.remove("vidply-playlist-item-active"),a.removeAttribute("aria-current"),a.setAttribute("aria-checked","false"),a.setAttribute("tabIndex","-1");let d=`${u}${o}`;l&&(d+=`. ${l}`),a.setAttribute("aria-label",d)}})}getCurrentTrack(){return this.tracks[this.currentIndex]||null}getPlaylistInfo(){return{currentIndex:this.currentIndex,totalTracks:this.tracks.length,currentTrack:this.getCurrentTrack(),hasNext:this.hasNext(),hasPrevious:this.hasPrevious()}}hasNext(){return this.options.loop?!0:this.currentIndex<this.tracks.length-1}hasPrevious(){return this.options.loop?!0:this.currentIndex>0}addTrack(e){this.tracks.push(e),this.playlistPanel&&this.renderPlaylist()}removeTrack(e){e<0||e>=this.tracks.length||(this.tracks.splice(e,1),e<this.currentIndex?this.currentIndex--:e===this.currentIndex&&(this.currentIndex>=this.tracks.length&&(this.currentIndex=this.tracks.length-1),this.currentIndex>=0&&this.play(this.currentIndex)),this.playlistPanel&&this.renderPlaylist())}clear(){this.tracks=[],this.currentIndex=-1,this.playlistPanel&&(this.playlistPanel.innerHTML="",this.playlistPanel.style.display="none"),this.trackInfoElement&&(this.trackInfoElement.innerHTML="",this.trackInfoElement.style.display="none"),this.trackArtworkElement&&(this.trackArtworkElement.style.backgroundImage="",this.trackArtworkElement.style.display="none")}togglePanel(e){return this.playlistPanel?((e!==void 0?e:this.playlistPanel.style.display==="none")?(this.playlistPanel.style.display="block",this.isPanelVisible=!0,this.tracks.length>0&&setTimeout(()=>{let i=this.playlistPanel.querySelector('.vidply-playlist-item[tabindex="0"]');i&&i.focus({preventScroll:!0})},100),this.player.controlBar&&this.player.controlBar.controls.playlistToggle&&(this.player.controlBar.controls.playlistToggle.setAttribute("aria-expanded","true"),this.player.controlBar.controls.playlistToggle.setAttribute("aria-pressed","true"))):(this.playlistPanel.style.display="none",this.isPanelVisible=!1,this.player.controlBar&&this.player.controlBar.controls.playlistToggle&&(this.player.controlBar.controls.playlistToggle.setAttribute("aria-expanded","false"),this.player.controlBar.controls.playlistToggle.setAttribute("aria-pressed","false"),this.player.controlBar.controls.playlistToggle.focus({preventScroll:!0}))),this.isPanelVisible):!1}showPanel(){return this.togglePanel(!0)}hidePanel(){return this.togglePanel(!1)}destroy(){this.player.off("ended",this.handleTrackEnd),this.player.off("error",this.handleTrackError),this.trackArtworkElement&&this.trackArtworkElement.remove(),this.trackInfoElement&&this.trackInfoElement.remove(),this.playlistPanel&&this.playlistPanel.remove(),this.clear()}};function le(){document.querySelectorAll("[data-vidply]").forEach(e=>{let t=e.dataset.vidplyOptions?JSON.parse(e.dataset.vidplyOptions):{},s={...ue(e.dataset),...t};new z(e,s)})}function ue(L){let e={},t={signLanguageSrc:"signLanguageSrc",signLanguageButton:"signLanguageButton",signLanguagePosition:"signLanguagePosition",audioDescriptionSrc:"audioDescriptionSrc",audioDescriptionButton:"audioDescriptionButton",autoplay:"autoplay",loop:"loop",muted:"muted",controls:"controls",poster:"poster",width:"width",height:"height",language:"language",captions:"captions",captionsDefault:"captionsDefault",transcript:"transcript",transcriptButton:"transcriptButton",keyboard:"keyboard",responsive:"responsive",pipButton:"pipButton",fullscreenButton:"fullscreenButton"};Object.keys(t).forEach(s=>{let a=t[s],r=L[s];r!==void 0&&(r==="true"?e[a]=!0:r==="false"?e[a]=!1:!isNaN(r)&&r!==""?e[a]=Number(r):e[a]=r)});let i={};if(Object.keys(L).forEach(s=>{if(s.startsWith("signLanguageSrc")&&s!=="signLanguageSrc"){let a=s.match(/^signLanguageSrc([A-Z][a-z]*)$/);if(a){let r=a[1].toLowerCase();i[r]=L[s]}}}),Object.keys(i).length>0&&(e.signLanguageSources=i,L.signLanguageSrc&&!e.signLanguageSrc&&(e.signLanguageSrc=L.signLanguageSrc)),L.vidplyLanguageFiles)try{e.languageFiles=JSON.parse(L.vidplyLanguageFiles)}catch(s){console.warn("Invalid JSON in data-vidply-language-files:",s)}if(L.vidplyLanguageFile)try{let s=JSON.parse(L.vidplyLanguageFile);typeof s=="object"&&s!==null&&(e.languageFiles=s)}catch{L.vidplyLanguageFileCode&&L.vidplyLanguageFileUrl&&(e.languageFile=L.vidplyLanguageFileCode,e.languageFileUrl=L.vidplyLanguageFileUrl)}else L.vidplyLanguageFileCode&&L.vidplyLanguageFileUrl&&(e.languageFile=L.vidplyLanguageFileCode,e.languageFileUrl=L.vidplyLanguageFileUrl);return e}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",le):le();var ot=z;export{z as Player,se as PlaylistManager,ot as default};
|