vidply 1.0.7 → 1.0.8
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/vidply.esm.js +683 -6
- package/dist/vidply.esm.js.map +3 -3
- package/dist/vidply.esm.min.js +6 -6
- package/dist/vidply.esm.min.meta.json +3 -3
- package/dist/vidply.js +683 -6
- package/dist/vidply.js.map +3 -3
- package/dist/vidply.min.js +6 -6
- package/dist/vidply.min.meta.json +3 -3
- package/package.json +2 -2
- package/src/core/Player.js +988 -9
package/dist/vidply.min.js
CHANGED
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
* (c) 2025 Matthias Peltzer
|
|
5
5
|
* Released under GPL-2.0-or-later License
|
|
6
6
|
*/
|
|
7
|
-
var VidPly=(()=>{var q=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var se=Object.prototype.hasOwnProperty;var ae=(p,e)=>()=>(p&&(e=p(p=0)),e);var X=(p,e)=>{for(var t in e)q(p,t,{get:e[t],enumerable:!0})},ne=(p,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ie(e))!se.call(p,s)&&s!==t&&q(p,s,{get:()=>e[s],enumerable:!(i=te(e,s))||i.enumerable});return p};var re=p=>ne(q({},"__esModule",{value:!0}),p);var J={};X(J,{HTML5Renderer:()=>B});var B,U=ae(()=>{B=class{constructor(e){this.player=e,this.media=e.element}async init(){this.media.controls=!1,this.media.removeAttribute("controls"),this.attachEvents(),this.media.preload=this.player.options.preload,this.media.load()}attachEvents(){this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player),this.player.options.pauseOthersOnPlay&&this.pauseOtherPlayers()}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume),this.player.options.onVolumeChange&&this.player.options.onVolumeChange.call(this.player,this.media.volume)}),this.media.addEventListener("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking")}),this.media.addEventListener("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.media.addEventListener("progress",()=>{if(this.media.buffered.length>0){let e=this.media.buffered.end(this.media.buffered.length-1);this.player.emit("progress",e)}}),this.media.addEventListener("error",e=>{this.player.handleError(this.media.error)}),this.media.addEventListener("ratechange",()=>{this.player.state.playbackSpeed=this.media.playbackRate,this.player.emit("ratechange",this.media.playbackRate)})}pauseOtherPlayers(){document.querySelectorAll(".vidply-player").forEach(t=>{if(t!==this.player.container){let i=t.querySelector("video, audio");i&&!i.paused&&i.pause()}})}play(){let e=this.media.play();e!==void 0&&e.catch(t=>{this.player.log("Play failed:",t,"warn"),this.player.options.autoplay&&!this.player.state.muted&&(this.player.log("Retrying play with muted audio","info"),this.media.muted=!0,this.media.play().catch(i=>{this.player.handleError(i)}))})}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}getQualities(){let e=Array.from(this.media.querySelectorAll("source"));return e.length<=1?[]:e.map((t,i)=>{let s=t.getAttribute("data-quality")||t.getAttribute("label")||"",a=t.getAttribute("data-height")||this.extractHeightFromLabel(s),r=t.getAttribute("data-width")||"";return{index:i,height:a?parseInt(a):0,width:r?parseInt(r):0,src:t.src,type:t.type,name:s||(a?`${a}p`:`Quality ${i+1}`)}}).filter(t=>t.height>0)}extractHeightFromLabel(e){let t=e.match(/(\d+)p/i);return t?parseInt(t[1]):0}switchQuality(e){let t=this.getQualities();if(e<0||e>=t.length){this.player.log("Invalid quality index","warn");return}let i=t[e],s=this.media.currentTime,a=!this.media.paused;if(this.media.currentSrc===i.src){this.player.log("Already at this quality level","info");return}this.player.log(`Switching to quality: ${i.name}`,"info"),this.media.src=i.src;let l=()=>{this.media.removeEventListener("loadedmetadata",l),this.media.currentTime=s,a&&this.media.play().catch(o=>{this.player.log("Failed to resume playback after quality switch","warn")}),this.player.emit("qualitychange",{quality:i.name,index:e})};this.media.addEventListener("loadedmetadata",l),this.media.load()}getCurrentQuality(){let e=this.getQualities(),t=this.media.currentSrc;for(let i=0;i<e.length;i++)if(e[i].src===t)return i;return 0}destroy(){this.media.removeEventListener("loadedmetadata",()=>{}),this.media.removeEventListener("play",()=>{}),this.media.removeEventListener("pause",()=>{})}}});var de={};X(de,{Player:()=>D,PlaylistManager:()=>I,default:()=>he});var H=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}};var n={createElement(p,e={}){let t=document.createElement(p);return e.className&&(t.className=e.className),e.attributes&&Object.entries(e.attributes).forEach(([i,s])=>{t.setAttribute(i,s)}),e.innerHTML&&(t.innerHTML=e.innerHTML),e.textContent&&(t.textContent=e.textContent),e.style&&Object.assign(t.style,e.style),e.children&&e.children.forEach(i=>{i&&t.appendChild(i)}),t},addClass(p,e){p&&e&&p.classList.add(e)},removeClass(p,e){p&&e&&p.classList.remove(e)},toggleClass(p,e){p&&e&&p.classList.toggle(e)},hasClass(p,e){return p&&p.classList.contains(e)},show(p){p&&(p.style.display="")},hide(p){p&&(p.style.display="none")},fadeIn(p,e=300){if(!p)return;p.style.opacity="0",p.style.display="";let t=null,i=s=>{t||(t=s);let a=s-t,r=Math.min(a/e,1);p.style.opacity=r,a<e&&requestAnimationFrame(i)};requestAnimationFrame(i)},fadeOut(p,e=300){if(!p)return;let t=parseFloat(getComputedStyle(p).opacity)||1,i=null,s=a=>{i||(i=a);let r=a-i,l=Math.max(t-r/e,0);p.style.opacity=l,r<e?requestAnimationFrame(s):p.style.display="none"};requestAnimationFrame(s)},offset(p){if(!p)return{top:0,left:0};let e=p.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset,width:e.width,height:e.height}},escapeHTML(p){let e=document.createElement("div");return e.textContent=p,e.innerHTML},sanitizeHTML(p){let e=document.createElement("div"),t=p.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,"").replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe>/gi,"").replace(/on\w+\s*=/gi,"").replace(/javascript:/gi,"");return e.innerHTML=t,e.innerHTML}};var j={en:{player:{label:"Video Player",play:"Play",pause:"Pause",stop:"Stop",restart:"Restart from beginning",rewind:"Rewind",forward:"Forward",rewindSeconds:"Rewind {seconds} seconds",forwardSeconds:"Forward {seconds} seconds",previous:"Previous track",next:"Next track",volume:"Volume",mute:"Mute",unmute:"Unmute",fullscreen:"Fullscreen",exitFullscreen:"Exit Fullscreen",captions:"Captions",chapters:"Chapters",quality:"Quality",captionStyling:"Caption styling",transcript:"Toggle transcript",audioDescription:"Audio description",signLanguage:"Sign language video",settings:"Settings",speed:"Playback Speed",pip:"Picture in Picture",currentTime:"Current time",duration:"Duration",progress:"Progress",seekForward:"Seek forward {seconds} seconds",seekBackward:"Seek backward {seconds} seconds",volumeUp:"Volume up",volumeDown:"Volume down",loading:"Loading...",loadingChapters:"Loading chapters...",error:"Error loading media",buffering:"Buffering...",signLanguageVideo:"Sign Language Video",noChapters:"No chapters available",noCaptions:"No captions available",auto:"Auto",autoQuality:"Auto (no quality selection available)",noQuality:"Quality selection not available",signLanguageDragResize:"Sign Language Video - Press D to drag with keyboard, R to resize",signLanguageDragActive:"Sign Language Video - Drag mode active. Use arrow keys to move, Escape to exit.",signLanguageResizeActive:"Sign Language Video - Resize mode active. Use left/right arrow keys to resize, Escape to exit.",resizeHandle:"Resize {direction} corner"},captions:{off:"Off",select:"Select captions",fontSize:"Font Size",fontFamily:"Font Family",color:"Text Color",backgroundColor:"Background Color",opacity:"Opacity"},fontSizes:{small:"Small",normal:"Normal",large:"Large",xlarge:"X-Large"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Text Color",background:"Background",font:"Font",fontSize:"Font Size",opacity:"Opacity"},audioDescription:{enable:"Enable audio description",disable:"Disable audio description"},signLanguage:{show:"Show sign language video",hide:"Hide sign language video"},transcript:{title:"Transcript",close:"Close transcript",loading:"Loading transcript...",noTranscript:"No transcript available for this video.",settings:"Transcript settings. Press Enter to open menu, or D to enable drag mode",keyboardDragMode:"Toggle keyboard drag mode with arrow keys. Shortcut: D key",keyboardDragActive:"\u2328\uFE0F Keyboard Drag Mode Active (Arrow keys to move, Shift+Arrows for large steps, D or ESC to exit)",resizeWindow:"Resize Window",styleTranscript:"Open transcript style settings",closeMenu:"Close Menu",styleTitle:"Transcript Style"},settings:{title:"Settings",quality:"Quality",speed:"Speed",captions:"Captions",language:"Language",reset:"Reset to defaults",close:"Close"},speeds:{normal:"Normal"},time:{display:"Time display",durationPrefix:"Duration: ",hour:"{count} hour",hours:"{count} hours",minute:"{count} minute",minutes:"{count} minutes",second:"{count} second",seconds:"{count} seconds"}},de:{player:{label:"Videoplayer",play:"Abspielen",pause:"Pause",stop:"Stopp",restart:"Von vorne beginnen",rewind:"Zur\xFCckspulen",forward:"Vorspulen",rewindSeconds:"{seconds} Sekunden zur\xFCckspulen",forwardSeconds:"{seconds} Sekunden vorspulen",previous:"Vorheriger Titel",next:"N\xE4chster Titel",volume:"Lautst\xE4rke",mute:"Stumm",unmute:"Ton ein",fullscreen:"Vollbild",exitFullscreen:"Vollbild beenden",captions:"Untertitel",chapters:"Kapitel",quality:"Qualit\xE4t",captionStyling:"Untertitel-Stil",transcript:"Transkript umschalten",audioDescription:"Audiodeskription",signLanguage:"Geb\xE4rdensprache-Video",settings:"Einstellungen",speed:"Wiedergabegeschwindigkeit",pip:"Bild-in-Bild",currentTime:"Aktuelle Zeit",duration:"Dauer",progress:"Fortschritt",seekForward:"{seconds} Sekunden vorspulen",seekBackward:"{seconds} Sekunden zur\xFCckspulen",volumeUp:"Lauter",volumeDown:"Leiser",loading:"L\xE4dt...",loadingChapters:"Kapitel werden geladen...",error:"Fehler beim Laden",buffering:"Puffern...",signLanguageVideo:"Geb\xE4rdensprache-Video",noChapters:"Keine Kapitel verf\xFCgbar",noCaptions:"Keine Untertitel verf\xFCgbar",auto:"Automatisch",autoQuality:"Automatisch (keine Qualit\xE4tsauswahl verf\xFCgbar)",noQuality:"Qualit\xE4tsauswahl nicht verf\xFCgbar",signLanguageDragResize:"Geb\xE4rdensprache-Video - Dr\xFCcken Sie D zum Verschieben per Tastatur, R zum \xC4ndern der Gr\xF6\xDFe",signLanguageDragActive:"Geb\xE4rdensprache-Video - Verschiebemodus aktiv. Pfeiltasten zum Bewegen, Escape zum Beenden.",signLanguageResizeActive:"Geb\xE4rdensprache-Video - Gr\xF6\xDFen\xE4nderungsmodus aktiv. Links-/Rechts-Pfeiltasten zum \xC4ndern der Gr\xF6\xDFe, Escape zum Beenden.",resizeHandle:"Gr\xF6\xDFen\xE4nderung {direction}-Ecke"},captions:{off:"Aus",select:"Untertitel ausw\xE4hlen",fontSize:"Schriftgr\xF6\xDFe",fontFamily:"Schriftart",color:"Textfarbe",backgroundColor:"Hintergrundfarbe",opacity:"Deckkraft"},fontSizes:{small:"Klein",normal:"Normal",large:"Gro\xDF",xlarge:"Sehr gro\xDF"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Textfarbe",background:"Hintergrund",font:"Schrift",fontSize:"Schriftgr\xF6\xDFe",opacity:"Deckkraft"},audioDescription:{enable:"Audiodeskription aktivieren",disable:"Audiodeskription deaktivieren"},signLanguage:{show:"Geb\xE4rdensprache-Video anzeigen",hide:"Geb\xE4rdensprache-Video ausblenden"},transcript:{title:"Transkript",close:"Transkript schlie\xDFen",loading:"Transkript wird geladen...",noTranscript:"Kein Transkript f\xFCr dieses Video verf\xFCgbar.",settings:"Transkript-Einstellungen. Eingabetaste zum \xD6ffnen des Men\xFCs dr\xFCcken oder D zum Aktivieren des Verschiebemodus",keyboardDragMode:"Tastatur-Verschiebemodus mit Pfeiltasten umschalten. Tastenkombination: D-Taste",keyboardDragActive:"\u2328\uFE0F Tastatur-Verschiebemodus aktiv (Pfeiltasten zum Bewegen, Umschalt+Pfeiltasten f\xFCr gro\xDFe Schritte, D oder ESC zum Beenden)",resizeWindow:"Fenster vergr\xF6\xDFern/verkleinern",styleTranscript:"Transkript-Stileinstellungen \xF6ffnen",closeMenu:"Men\xFC schlie\xDFen",styleTitle:"Transkript-Stil"},settings:{title:"Einstellungen",quality:"Qualit\xE4t",speed:"Geschwindigkeit",captions:"Untertitel",language:"Sprache",reset:"Zur\xFCcksetzen",close:"Schlie\xDFen"},speeds:{normal:"Normal"},time:{display:"Zeitanzeige",durationPrefix:"Dauer: ",hour:"{count} Stunde",hours:"{count} Stunden",minute:"{count} Minute",minutes:"{count} Minuten",second:"{count} Sekunde",seconds:"{count} Sekunden"}},es:{player:{label:"Reproductor de video",play:"Reproducir",pause:"Pausa",stop:"Detener",restart:"Reiniciar desde el principio",rewind:"Retroceder",forward:"Avanzar",rewindSeconds:"Retroceder {seconds} segundos",forwardSeconds:"Avanzar {seconds} segundos",previous:"Pista anterior",next:"Siguiente pista",volume:"Volumen",mute:"Silenciar",unmute:"Activar sonido",fullscreen:"Pantalla completa",exitFullscreen:"Salir de pantalla completa",captions:"Subt\xEDtulos",chapters:"Cap\xEDtulos",quality:"Calidad",captionStyling:"Estilo de subt\xEDtulos",transcript:"Alternar transcripci\xF3n",audioDescription:"Audiodescripci\xF3n",signLanguage:"Video en lengua de se\xF1as",settings:"Configuraci\xF3n",speed:"Velocidad de reproducci\xF3n",pip:"Imagen en imagen",currentTime:"Tiempo actual",duration:"Duraci\xF3n",progress:"Progreso",seekForward:"Avanzar {seconds} segundos",seekBackward:"Retroceder {seconds} segundos",volumeUp:"Subir volumen",volumeDown:"Bajar volumen",loading:"Cargando...",loadingChapters:"Cargando cap\xEDtulos...",error:"Error al cargar",buffering:"Almacenando en b\xFAfer...",signLanguageVideo:"Video en Lengua de Se\xF1as",noChapters:"No hay cap\xEDtulos disponibles",noCaptions:"No hay subt\xEDtulos disponibles",auto:"Autom\xE1tico",autoQuality:"Autom\xE1tico (selecci\xF3n de calidad no disponible)",noQuality:"Selecci\xF3n de calidad no disponible",signLanguageDragResize:"Video en Lengua de Se\xF1as - Presione D para arrastrar con el teclado, R para cambiar el tama\xF1o",signLanguageDragActive:"Video en Lengua de Se\xF1as - Modo de arrastre activo. Use las teclas de flecha para mover, Escape para salir.",signLanguageResizeActive:"Video en Lengua de Se\xF1as - Modo de cambio de tama\xF1o activo. Use las teclas de flecha izquierda/derecha para cambiar el tama\xF1o, Escape para salir.",resizeHandle:"Cambiar tama\xF1o esquina {direction}"},captions:{off:"Desactivado",select:"Seleccionar subt\xEDtulos",fontSize:"Tama\xF1o de fuente",fontFamily:"Familia de fuente",color:"Color de texto",backgroundColor:"Color de fondo",opacity:"Opacidad"},fontSizes:{small:"Peque\xF1o",normal:"Normal",large:"Grande",xlarge:"Muy grande"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Color de texto",background:"Fondo",font:"Fuente",fontSize:"Tama\xF1o de fuente",opacity:"Opacidad"},audioDescription:{enable:"Activar audiodescripci\xF3n",disable:"Desactivar audiodescripci\xF3n"},signLanguage:{show:"Mostrar video en lengua de se\xF1as",hide:"Ocultar video en lengua de se\xF1as"},transcript:{title:"Transcripci\xF3n",close:"Cerrar transcripci\xF3n",loading:"Cargando transcripci\xF3n...",noTranscript:"No hay transcripci\xF3n disponible para este video.",settings:"Configuraci\xF3n de transcripci\xF3n. Presione Enter para abrir el men\xFA o D para activar el modo de arrastre",keyboardDragMode:"Alternar modo de arrastre con teclado usando teclas de flecha. Atajo: tecla D",keyboardDragActive:"\u2328\uFE0F Modo de Arrastre con Teclado Activo (Teclas de flecha para mover, May\xFAs+Flechas para pasos grandes, D o ESC para salir)",resizeWindow:"Cambiar tama\xF1o de ventana",styleTranscript:"Abrir configuraci\xF3n de estilo de transcripci\xF3n",closeMenu:"Cerrar men\xFA",styleTitle:"Estilo de Transcripci\xF3n"},settings:{title:"Configuraci\xF3n",quality:"Calidad",speed:"Velocidad",captions:"Subt\xEDtulos",language:"Idioma",reset:"Restablecer",close:"Cerrar"},speeds:{normal:"Normal"},time:{display:"Visualizaci\xF3n de tiempo",durationPrefix:"Duraci\xF3n: ",hour:"{count} hora",hours:"{count} horas",minute:"{count} minuto",minutes:"{count} minutos",second:"{count} segundo",seconds:"{count} segundos"}},fr:{player:{label:"Lecteur vid\xE9o",play:"Lecture",pause:"Pause",stop:"Arr\xEAt",restart:"Red\xE9marrer du d\xE9but",rewind:"Reculer",forward:"Avancer",rewindSeconds:"Reculer de {seconds} secondes",forwardSeconds:"Avancer de {seconds} secondes",previous:"Piste pr\xE9c\xE9dente",next:"Piste suivante",volume:"Volume",mute:"Muet",unmute:"Activer le son",fullscreen:"Plein \xE9cran",exitFullscreen:"Quitter le plein \xE9cran",captions:"Sous-titres",chapters:"Chapitres",quality:"Qualit\xE9",captionStyling:"Style des sous-titres",transcript:"Activer/d\xE9sactiver la transcription",audioDescription:"Audiodescription",signLanguage:"Vid\xE9o en langue des signes",settings:"Param\xE8tres",speed:"Vitesse de lecture",pip:"Image dans l'image",currentTime:"Temps actuel",duration:"Dur\xE9e",progress:"Progression",seekForward:"Avancer de {seconds} secondes",seekBackward:"Reculer de {seconds} secondes",volumeUp:"Augmenter le volume",volumeDown:"Diminuer le volume",loading:"Chargement...",loadingChapters:"Chargement des chapitres...",error:"Erreur de chargement",buffering:"Mise en m\xE9moire tampon...",signLanguageVideo:"Vid\xE9o en Langue des Signes",noChapters:"Aucun chapitre disponible",noCaptions:"Aucun sous-titre disponible",auto:"Automatique",autoQuality:"Automatique (s\xE9lection de qualit\xE9 non disponible)",noQuality:"S\xE9lection de qualit\xE9 non disponible",signLanguageDragResize:"Vid\xE9o en Langue des Signes - Appuyez sur D pour d\xE9placer avec le clavier, R pour redimensionner",signLanguageDragActive:"Vid\xE9o en Langue des Signes - Mode glissement actif. Utilisez les touches fl\xE9ch\xE9es pour d\xE9placer, \xC9chap pour quitter.",signLanguageResizeActive:"Vid\xE9o en Langue des Signes - Mode redimensionnement actif. Utilisez les touches fl\xE9ch\xE9es gauche/droite pour redimensionner, \xC9chap pour quitter.",resizeHandle:"Redimensionner coin {direction}"},captions:{off:"D\xE9sactiv\xE9",select:"S\xE9lectionner les sous-titres",fontSize:"Taille de police",fontFamily:"Police",color:"Couleur du texte",backgroundColor:"Couleur de fond",opacity:"Opacit\xE9"},fontSizes:{small:"Petit",normal:"Normal",large:"Grand",xlarge:"Tr\xE8s grand"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Couleur du texte",background:"Arri\xE8re-plan",font:"Police",fontSize:"Taille de police",opacity:"Opacit\xE9"},audioDescription:{enable:"Activer l'audiodescription",disable:"D\xE9sactiver l'audiodescription"},signLanguage:{show:"Afficher la vid\xE9o en langue des signes",hide:"Masquer la vid\xE9o en langue des signes"},transcript:{title:"Transcription",close:"Fermer la transcription",loading:"Chargement de la transcription...",noTranscript:"Aucune transcription disponible pour cette vid\xE9o.",settings:"Param\xE8tres de transcription. Appuyez sur Entr\xE9e pour ouvrir le menu ou D pour activer le mode glissement",keyboardDragMode:"Basculer le mode glissement avec les touches fl\xE9ch\xE9es. Raccourci: touche D",keyboardDragActive:"\u2328\uFE0F Mode Glissement Clavier Actif (Touches fl\xE9ch\xE9es pour d\xE9placer, Maj+Fl\xE9ch\xE9es pour grands pas, D ou \xC9chap pour quitter)",resizeWindow:"Redimensionner la fen\xEAtre",styleTranscript:"Ouvrir les param\xE8tres de style de transcription",closeMenu:"Fermer le menu",styleTitle:"Style de Transcription"},settings:{title:"Param\xE8tres",quality:"Qualit\xE9",speed:"Vitesse",captions:"Sous-titres",language:"Langue",reset:"R\xE9initialiser",close:"Fermer"},speeds:{normal:"Normal"},time:{display:"Affichage du temps",durationPrefix:"Dur\xE9e : ",hour:"{count} heure",hours:"{count} heures",minute:"{count} minute",minutes:"{count} minutes",second:"{count} seconde",seconds:"{count} secondes"}},ja:{player:{label:"\u30D3\u30C7\u30AA\u30D7\u30EC\u30FC\u30E4\u30FC",play:"\u518D\u751F",pause:"\u4E00\u6642\u505C\u6B62",stop:"\u505C\u6B62",restart:"\u6700\u521D\u304B\u3089\u518D\u751F",rewind:"\u5DFB\u304D\u623B\u3057",forward:"\u65E9\u9001\u308A",rewindSeconds:"{seconds}\u79D2\u623B\u3059",forwardSeconds:"{seconds}\u79D2\u9032\u3081\u308B",previous:"\u524D\u306E\u30C8\u30E9\u30C3\u30AF",next:"\u6B21\u306E\u30C8\u30E9\u30C3\u30AF",volume:"\u97F3\u91CF",mute:"\u30DF\u30E5\u30FC\u30C8",unmute:"\u30DF\u30E5\u30FC\u30C8\u89E3\u9664",fullscreen:"\u5168\u753B\u9762\u8868\u793A",exitFullscreen:"\u5168\u753B\u9762\u8868\u793A\u3092\u7D42\u4E86",captions:"\u5B57\u5E55",chapters:"\u30C1\u30E3\u30D7\u30BF\u30FC",quality:"\u753B\u8CEA",captionStyling:"\u5B57\u5E55\u30B9\u30BF\u30A4\u30EB",transcript:"\u6587\u5B57\u8D77\u3053\u3057\u5207\u308A\u66FF\u3048",audioDescription:"\u97F3\u58F0\u89E3\u8AAC",signLanguage:"\u624B\u8A71\u52D5\u753B",settings:"\u8A2D\u5B9A",speed:"\u518D\u751F\u901F\u5EA6",pip:"\u30D4\u30AF\u30C1\u30E3\u30FC\u30A4\u30F3\u30D4\u30AF\u30C1\u30E3\u30FC",currentTime:"\u73FE\u5728\u306E\u6642\u9593",duration:"\u518D\u751F\u6642\u9593",progress:"\u9032\u884C\u72B6\u6CC1",seekForward:"{seconds}\u79D2\u9032\u3081\u308B",seekBackward:"{seconds}\u79D2\u623B\u3059",volumeUp:"\u97F3\u91CF\u3092\u4E0A\u3052\u308B",volumeDown:"\u97F3\u91CF\u3092\u4E0B\u3052\u308B",loading:"\u8AAD\u307F\u8FBC\u307F\u4E2D...",loadingChapters:"\u30C1\u30E3\u30D7\u30BF\u30FC\u8AAD\u307F\u8FBC\u307F\u4E2D...",error:"\u8AAD\u307F\u8FBC\u307F\u30A8\u30E9\u30FC",buffering:"\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u4E2D...",signLanguageVideo:"\u624B\u8A71\u52D5\u753B",noChapters:"\u30C1\u30E3\u30D7\u30BF\u30FC\u304C\u3042\u308A\u307E\u305B\u3093",noCaptions:"\u5B57\u5E55\u304C\u3042\u308A\u307E\u305B\u3093",auto:"\u81EA\u52D5",autoQuality:"\u81EA\u52D5\uFF08\u753B\u8CEA\u9078\u629E\u4E0D\u53EF\uFF09",noQuality:"\u753B\u8CEA\u9078\u629E\u4E0D\u53EF",signLanguageDragResize:"\u624B\u8A71\u52D5\u753B - \u30AD\u30FC\u30DC\u30FC\u30C9\u3067\u30C9\u30E9\u30C3\u30B0\u3059\u308B\u306B\u306FD\u30AD\u30FC\u3092\u3001\u30B5\u30A4\u30BA\u5909\u66F4\u3059\u308B\u306B\u306FR\u30AD\u30FC\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044",signLanguageDragActive:"\u624B\u8A71\u52D5\u753B - \u30C9\u30E9\u30C3\u30B0\u30E2\u30FC\u30C9\u304C\u6709\u52B9\u3067\u3059\u3002\u77E2\u5370\u30AD\u30FC\u3067\u79FB\u52D5\u3001Escape\u3067\u7D42\u4E86\u3057\u307E\u3059\u3002",signLanguageResizeActive:"\u624B\u8A71\u52D5\u753B - \u30B5\u30A4\u30BA\u5909\u66F4\u30E2\u30FC\u30C9\u304C\u6709\u52B9\u3067\u3059\u3002\u5DE6\u53F3\u306E\u77E2\u5370\u30AD\u30FC\u3067\u30B5\u30A4\u30BA\u5909\u66F4\u3001Escape\u3067\u7D42\u4E86\u3057\u307E\u3059\u3002",resizeHandle:"{direction}\u30B3\u30FC\u30CA\u30FC\u306E\u30B5\u30A4\u30BA\u5909\u66F4"},captions:{off:"\u30AA\u30D5",select:"\u5B57\u5E55\u3092\u9078\u629E",fontSize:"\u30D5\u30A9\u30F3\u30C8\u30B5\u30A4\u30BA",fontFamily:"\u30D5\u30A9\u30F3\u30C8",color:"\u30C6\u30AD\u30B9\u30C8\u306E\u8272",backgroundColor:"\u80CC\u666F\u8272",opacity:"\u4E0D\u900F\u660E\u5EA6"},fontSizes:{small:"\u5C0F",normal:"\u6A19\u6E96",large:"\u5927",xlarge:"\u7279\u5927"},fontFamilies:{sansSerif:"\u30B5\u30F3\u30BB\u30EA\u30D5",serif:"\u30BB\u30EA\u30D5",monospace:"\u7B49\u5E45"},styleLabels:{textColor:"\u30C6\u30AD\u30B9\u30C8\u306E\u8272",background:"\u80CC\u666F",font:"\u30D5\u30A9\u30F3\u30C8",fontSize:"\u30D5\u30A9\u30F3\u30C8\u30B5\u30A4\u30BA",opacity:"\u4E0D\u900F\u660E\u5EA6"},audioDescription:{enable:"\u97F3\u58F0\u89E3\u8AAC\u3092\u6709\u52B9\u306B\u3059\u308B",disable:"\u97F3\u58F0\u89E3\u8AAC\u3092\u7121\u52B9\u306B\u3059\u308B"},signLanguage:{show:"\u624B\u8A71\u52D5\u753B\u3092\u8868\u793A",hide:"\u624B\u8A71\u52D5\u753B\u3092\u975E\u8868\u793A"},transcript:{title:"\u6587\u5B57\u8D77\u3053\u3057",close:"\u6587\u5B57\u8D77\u3053\u3057\u3092\u9589\u3058\u308B",loading:"\u6587\u5B57\u8D77\u3053\u3057\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D...",noTranscript:"\u3053\u306E\u30D3\u30C7\u30AA\u306E\u6587\u5B57\u8D77\u3053\u3057\u306F\u3042\u308A\u307E\u305B\u3093\u3002",settings:"\u6587\u5B57\u8D77\u3053\u3057\u8A2D\u5B9A\u3002Enter\u30AD\u30FC\u3067\u30E1\u30CB\u30E5\u30FC\u3092\u958B\u304F\u3001\u307E\u305F\u306FD\u30AD\u30FC\u3067\u30C9\u30E9\u30C3\u30B0\u30E2\u30FC\u30C9\u3092\u6709\u52B9\u306B\u3059\u308B",keyboardDragMode:"\u77E2\u5370\u30AD\u30FC\u3067\u30AD\u30FC\u30DC\u30FC\u30C9\u30C9\u30E9\u30C3\u30B0\u30E2\u30FC\u30C9\u3092\u5207\u308A\u66FF\u3048\u3002\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\uFF1AD\u30AD\u30FC",keyboardDragActive:"\u2328\uFE0F \u30AD\u30FC\u30DC\u30FC\u30C9\u30C9\u30E9\u30C3\u30B0\u30E2\u30FC\u30C9\u6709\u52B9\uFF08\u77E2\u5370\u30AD\u30FC\u3067\u79FB\u52D5\u3001Shift+\u77E2\u5370\u30AD\u30FC\u3067\u5927\u304D\u304F\u79FB\u52D5\u3001D\u307E\u305F\u306FESC\u3067\u7D42\u4E86\uFF09",resizeWindow:"\u30A6\u30A3\u30F3\u30C9\u30A6\u306E\u30B5\u30A4\u30BA\u5909\u66F4",styleTranscript:"\u6587\u5B57\u8D77\u3053\u3057\u30B9\u30BF\u30A4\u30EB\u8A2D\u5B9A\u3092\u958B\u304F",closeMenu:"\u30E1\u30CB\u30E5\u30FC\u3092\u9589\u3058\u308B",styleTitle:"\u6587\u5B57\u8D77\u3053\u3057\u30B9\u30BF\u30A4\u30EB"},settings:{title:"\u8A2D\u5B9A",quality:"\u753B\u8CEA",speed:"\u901F\u5EA6",captions:"\u5B57\u5E55",language:"\u8A00\u8A9E",reset:"\u30EA\u30BB\u30C3\u30C8",close:"\u9589\u3058\u308B"},speeds:{normal:"\u901A\u5E38"},time:{display:"\u6642\u9593\u8868\u793A",durationPrefix:"\u518D\u751F\u6642\u9593: ",hour:"{count}\u6642\u9593",hours:"{count}\u6642\u9593",minute:"{count}\u5206",minutes:"{count}\u5206",second:"{count}\u79D2",seconds:"{count}\u79D2"}}};var Q=class{constructor(){this.currentLanguage="en",this.translations=j}setLanguage(e){this.translations[e]?this.currentLanguage=e:(console.warn(`Language "${e}" not found, falling back to English`),this.currentLanguage="en")}getLanguage(){return this.currentLanguage}t(e,t={}){let i=e.split("."),s=this.translations[this.currentLanguage];for(let a of i)if(s&&typeof s=="object"&&a in s)s=s[a];else{s=this.translations.en;for(let r of i)if(s&&typeof s=="object"&&r in s)s=s[r];else return e;break}return typeof s=="string"&&Object.entries(t).forEach(([a,r])=>{s=s.replace(new RegExp(`{${a}}`,"g"),r)}),s}addTranslation(e,t){this.translations[e]||(this.translations[e]={}),Object.assign(this.translations[e],t)}},c=new Q;var S={formatTime(p,e=!1){if(!isFinite(p)||p<0)return e?"00:00:00":"00:00";let t=Math.floor(p/3600),i=Math.floor(p%3600/60),s=Math.floor(p%60),a=r=>String(r).padStart(2,"0");return t>0||e?`${a(t)}:${a(i)}:${a(s)}`:`${a(i)}:${a(s)}`},parseTime(p){let e=p.split(":").map(t=>parseInt(t,10));return e.length===3?e[0]*3600+e[1]*60+e[2]:e.length===2?e[0]*60+e[1]:e.length===1?e[0]:0},formatDuration(p){if(!isFinite(p)||p<0)return c.t("time.seconds",{count:0});let e=Math.floor(p/3600),t=Math.floor(p%3600/60),i=Math.floor(p%60),s=[];if(e>0){let a=e===1?"time.hour":"time.hours";s.push(c.t(a,{count:e}))}if(t>0){let a=t===1?"time.minute":"time.minutes";s.push(c.t(a,{count:t}))}if(i>0||s.length===0){let a=i===1?"time.second":"time.seconds";s.push(c.t(a,{count:i}))}return s.join(", ")},formatPercentage(p,e){return e===0?0:Math.round(p/e*100)}};var oe={play:'<path d="M8 5v14l11-7z"/>',pause:'<path d="M6 4h4v16H6V4zm8 0h4v16h-4V4z"/>',stop:'<rect x="6" y="6" width="12" height="12"/>',rewind:'<path d="M11 18V6l-8.5 6 8.5 6zm.5-6l8.5 6V6l-8.5 6z"/>',forward:'<path d="M4 18l8.5-6L4 6v12zm9-12v12l8.5-6L13 6z"/>',skipPrevious:'<path d="M6 6h2v12H6V6zm3 6l8.5 6V6L9 12z"/>',skipNext:'<path d="M16 6h2v12h-2V6zM6 6l8.5 6L6 18V6z"/>',restart:'<path d="M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z"/>',volumeHigh:'<path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/>',volumeMedium:'<path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"/>',volumeLow:'<path d="M7 9v6h4l5 5V4l-5 5H7z"/>',volumeMuted:'<path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"/>',fullscreen:'<path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/>',fullscreenExit:'<path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"/>',settings:'<path d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94L14.4 2.81c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>',captions:'<path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z"/>',captionsOff:'<path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z"/><path d="M0 0h24v24H0z" fill="none"/>',pip:'<path d="M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98V5c0-1.1-.9-2-2-2zm0 16.01H3V4.98h18v14.03z"/>',speed:'<path d="M20.38 8.57l-1.23 1.85a8 8 0 0 1-.22 7.58H5.07A8 8 0 0 1 15.58 6.85l1.85-1.23A10 10 0 0 0 3.35 19a2 2 0 0 0 1.72 1h13.85a2 2 0 0 0 1.74-1 10 10 0 0 0-.27-10.44z"/><path d="M10.59 15.41a2 2 0 0 0 2.83 0l5.66-8.49-8.49 5.66a2 2 0 0 0 0 2.83z"/>',close:'<path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>',check:'<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>',arrowUp:'<path d="M7 14l5-5 5 5z"/>',arrowDown:'<path d="M7 10l5 5 5-5z"/>',arrowLeft:'<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>',arrowRight:'<path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/>',loading:'<path d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z"/>',error:'<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>',download:'<path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/>',link:'<path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/>',playlist:'<path d="M15 6H3v2h12V6zm0 4H3v2h12v-2zM3 16h8v-2H3v2zM17 6v8.18c-.31-.11-.65-.18-1-.18-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3V8h3V6h-5z"/>',language:'<path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zm6.93 6h-2.95c-.32-1.25-.78-2.45-1.38-3.56 1.84.63 3.37 1.91 4.33 3.56zM12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2.76 1.91-3.96zM4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-.14 2 0 .68.06 1.34.14 2H4.26zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56-1.84-.63-3.37-1.9-4.33-3.56zm2.95-8H5.08c.96-1.66 2.49-2.93 4.33-3.56C8.81 5.55 8.35 6.75 8.03 8zM12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96zM14.34 14H9.66c-.09-.66-.16-1.32-.16-2 0-.68.07-1.35.16-2h4.68c.09.65.16 1.32.16 2 0 .68-.07 1.34-.16 2zm.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95c-.96 1.65-2.49 2.93-4.33 3.56zM16.36 14c.08-.66.14-1.32.14-2 0-.68-.06-1.34-.14-2h3.38c.16.64.26 1.31.26 2s-.1 1.36-.26 2h-3.38z"/>',hd:'<path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-8 12H9.5v-2h-2v2H6V9h1.5v2.5h2V9H11v6zm7-1c0 .55-.45 1-1 1h-.75v1.5h-1.5V15H14c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v4zm-3.5-.5h2v-3h-2v3z"/>',transcript:'<path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"/>',audioDescription:'<rect x="2" y="5" width="20" height="14" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><text x="12" y="16" font-family="Arial, sans-serif" font-size="10" font-weight="bold" text-anchor="middle" fill="currentColor">AD</text>',audioDescriptionOn:'<rect x="2" y="5" width="20" height="14" rx="2" fill="#1a1a1a" stroke="#1a1a1a" stroke-width="2"/><text x="12" y="16" font-family="Arial, sans-serif" font-size="10" font-weight="bold" text-anchor="middle" fill="#ffffff">AD</text>',signLanguage:'<g transform="scale(1.5)"><path d="M16 11.3c-.1-.9-4.8 1.3-5.4 1.1-2.6-1 5.8-1.3 5.1-2.9s-5.1 1.5-6 1.4C6.5 9.4 16.5 9.1 13.5 8c-1.9-.6-8.8 2.9-6.8.4.7-.6.7-1.9-.7-1.7-9.7 7.2-.7 12.2 8.8 7 0-1.3-3.5.4-4.1.4-2.6 0 5.6-2 5.4-3ZM3.9 7.8c3.2-4.2 3.7 1.2 6 .1s.2-.2.2-.3c.7-2.7 2.5-7.5-1.5-1.3-1.6 0 1.1-4 1-4.6C8.9-1 7.3 4.4 7.2 4.9c-1.6.7-.9-1.4-.7-1.5 3-6-.6-3.1-.9.4-2.5 1.8 0-2.8 0-3.5C2.8-.9 4 9.4 1.1 4.9S.1 4.6 0 5c-.4 2.7 2.6 7.2 3.9 2.8Z"/></g>',signLanguageOn:'<g transform="scale(1.5)"><path d="M16 11.3c-.1-.9-4.8 1.3-5.4 1.1-2.6-1 5.8-1.3 5.1-2.9s-5.1 1.5-6 1.4C6.5 9.4 16.5 9.1 13.5 8c-1.9-.6-8.8 2.9-6.8.4.7-.6.7-1.9-.7-1.7-9.7 7.2-.7 12.2 8.8 7 0-1.3-3.5.4-4.1.4-2.6 0 5.6-2 5.4-3ZM3.9 7.8c3.2-4.2 3.7 1.2 6 .1s.2-.2.2-.3c.7-2.7 2.5-7.5-1.5-1.3-1.6 0 1.1-4 1-4.6C8.9-1 7.3 4.4 7.2 4.9c-1.6.7-.9-1.4-.7-1.5 3-6-.6-3.1-.9.4-2.5 1.8 0-2.8 0-3.5C2.8-.9 4 9.4 1.1 4.9S.1 4.6 0 5c-.4 2.7 2.6 7.2 3.9 2.8Z"/></g>',speaker:'<path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"/>',music:'<path d="M12 3v9.28c-.47-.17-.97-.28-1.5-.28C8.01 12 6 14.01 6 16.5S8.01 21 10.5 21c2.31 0 4.2-1.75 4.45-4H15V6h4V3h-7zm-1.5 16c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/>',moreVertical:'<path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/>',moreHorizontal:'<path d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/>',move:'<path d="M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z"/>',resize:'<path d="M21.71 11.29l-9-9c-.39-.39-1.02-.39-1.41 0l-9 9c-.39.39-.39 1.02 0 1.41l9 9c.39.39 1.02.39 1.41 0l9-9c.39-.38.39-1.01 0-1.41zM14 14.5V12h-4v2.5L7 11l3-3.5V10h4V7.5l3 3.5-3 3.5z"/>'},le=p=>`<svg viewBox="0 0 24 24" fill="currentColor">${p}</svg>`,G=Object.fromEntries(Object.entries(oe).map(([p,e])=>[p,le(e)]));function ce(p){return G[p]||G.play}function d(p,e=""){let t=document.createElement("span");return t.className=`vidply-icon ${e}`.trim(),t.innerHTML=ce(p),t.setAttribute("aria-hidden","true"),t}function _(){let p=document.createElementNS("http://www.w3.org/2000/svg","svg");p.setAttribute("class","vidply-play-overlay"),p.setAttribute("viewBox","0 0 80 80"),p.setAttribute("width","80"),p.setAttribute("height","80"),p.setAttribute("aria-hidden","true"),p.setAttribute("role","presentation"),p.style.cursor="pointer";let e=document.createElementNS("http://www.w3.org/2000/svg","defs"),t=`vidply-play-shadow-${Math.random().toString(36).substr(2,9)}`,i=document.createElementNS("http://www.w3.org/2000/svg","filter");i.setAttribute("id",t),i.setAttribute("x","-50%"),i.setAttribute("y","-50%"),i.setAttribute("width","200%"),i.setAttribute("height","200%");let s=document.createElementNS("http://www.w3.org/2000/svg","feGaussianBlur");s.setAttribute("in","SourceAlpha"),s.setAttribute("stdDeviation","3");let a=document.createElementNS("http://www.w3.org/2000/svg","feOffset");a.setAttribute("dx","0"),a.setAttribute("dy","2"),a.setAttribute("result","offsetblur");let r=document.createElementNS("http://www.w3.org/2000/svg","feComponentTransfer"),l=document.createElementNS("http://www.w3.org/2000/svg","feFuncA");l.setAttribute("type","linear"),l.setAttribute("slope","0.3"),r.appendChild(l);let o=document.createElementNS("http://www.w3.org/2000/svg","feMerge"),h=document.createElementNS("http://www.w3.org/2000/svg","feMergeNode"),u=document.createElementNS("http://www.w3.org/2000/svg","feMergeNode");u.setAttribute("in","SourceGraphic"),o.appendChild(h),o.appendChild(u),i.appendChild(s),i.appendChild(a),i.appendChild(r),i.appendChild(o),e.appendChild(i),p.appendChild(e);let g=document.createElementNS("http://www.w3.org/2000/svg","circle");g.setAttribute("cx","40"),g.setAttribute("cy","40"),g.setAttribute("r","40"),g.setAttribute("fill","rgba(255, 255, 255, 0.95)"),g.setAttribute("filter",`url(#${t})`),g.setAttribute("class","vidply-play-overlay-bg"),p.appendChild(g);let m=document.createElementNS("http://www.w3.org/2000/svg","polygon");return m.setAttribute("points","32,28 32,52 54,40"),m.setAttribute("fill","#0a406e"),m.setAttribute("class","vidply-play-overlay-icon"),p.appendChild(m),p}var W=class{constructor(e){this.player=e,this.element=null,this.controls={},this.hideTimeout=null,this.isDraggingProgress=!1,this.isDraggingVolume=!1,this.init()}init(){this.createElement(),this.createControls(),this.attachEvents(),this.setupAutoHide()}isMobile(){return window.innerWidth<640}positionMenu(e,t){this.isMobile()||setTimeout(()=>{let s=t.getBoundingClientRect(),a=e.getBoundingClientRect(),r=window.innerWidth,l=window.innerHeight,o=s.top,h=l-s.bottom;o<a.height+20&&h>o&&(e.style.bottom="auto",e.style.top="calc(100% + 8px)",e.classList.add("vidply-menu-below"));let u=s.left+s.width/2-a.width/2;u<10?(e.style.right="auto",e.style.left="0",e.style.transform="translateX(0)"):u+a.width>r-10&&(e.style.left="auto",e.style.right="0",e.style.transform="translateX(0)")},0)}attachMenuCloseHandler(e,t,i=!1){this.positionMenu(e,t),setTimeout(()=>{let s=r=>{i&&e.contains(r.target)||!e.contains(r.target)&&!t.contains(r.target)&&(e.remove(),document.removeEventListener("click",s),document.removeEventListener("keydown",a))},a=r=>{r.key==="Escape"&&(e.remove(),document.removeEventListener("click",s),document.removeEventListener("keydown",a),t.focus())};document.addEventListener("click",s),document.addEventListener("keydown",a)},100)}attachMenuKeyboardNavigation(e){let t=Array.from(e.querySelectorAll(`.${this.player.options.classPrefix}-menu-item`));if(t.length===0)return;let i=s=>{let a=t.indexOf(document.activeElement);switch(s.key){case"ArrowDown":s.preventDefault();let r=(a+1)%t.length;t[r].focus();break;case"ArrowUp":s.preventDefault();let l=(a-1+t.length)%t.length;t[l].focus();break;case"Home":s.preventDefault(),t[0].focus();break;case"End":s.preventDefault(),t[t.length-1].focus();break;case"Enter":case" ":s.preventDefault(),document.activeElement&&t.includes(document.activeElement)&&document.activeElement.click();break}};e.addEventListener("keydown",i)}createElement(){this.element=n.createElement("div",{className:`${this.player.options.classPrefix}-controls`,attributes:{role:"region","aria-label":c.t("player.label")+" controls"}})}createControls(){this.player.options.progressBar&&this.createProgressBar();let e=n.createElement("div",{className:`${this.player.options.classPrefix}-controls-buttons`}),t=n.createElement("div",{className:`${this.player.options.classPrefix}-controls-left`});this.player.playlistManager&&t.appendChild(this.createPreviousButton()),this.player.options.playPauseButton&&t.appendChild(this.createPlayPauseButton()),t.appendChild(this.createRestartButton()),this.player.playlistManager&&t.appendChild(this.createNextButton()),this.player.playlistManager||t.appendChild(this.createRewindButton()),this.player.playlistManager||t.appendChild(this.createForwardButton()),this.player.options.volumeControl&&t.appendChild(this.createVolumeControl()),(this.player.options.currentTime||this.player.options.duration)&&t.appendChild(this.createTimeDisplay()),this.rightButtons=n.createElement("div",{className:`${this.player.options.classPrefix}-controls-right`});let i=this.hasChapterTracks(),s=this.hasCaptionTracks(),a=this.hasQualityLevels(),r=this.hasAudioDescription();this.player.options.chaptersButton&&i&&this.rightButtons.appendChild(this.createChaptersButton()),this.player.options.qualityButton&&a&&this.rightButtons.appendChild(this.createQualityButton()),this.player.options.captionStyleButton&&s&&this.rightButtons.appendChild(this.createCaptionStyleButton()),this.player.options.speedButton&&this.rightButtons.appendChild(this.createSpeedButton()),this.player.options.captionsButton&&s&&this.rightButtons.appendChild(this.createCaptionsButton()),this.player.options.transcriptButton&&s&&this.rightButtons.appendChild(this.createTranscriptButton()),this.player.options.audioDescriptionButton&&r&&this.rightButtons.appendChild(this.createAudioDescriptionButton());let l=this.hasSignLanguage();this.player.options.signLanguageButton&&l&&this.rightButtons.appendChild(this.createSignLanguageButton()),this.player.options.pipButton&&"pictureInPictureEnabled"in document&&this.rightButtons.appendChild(this.createPipButton()),this.player.options.fullscreenButton&&this.rightButtons.appendChild(this.createFullscreenButton()),e.appendChild(t),e.appendChild(this.rightButtons),this.element.appendChild(e)}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(){return this.player.signLanguageSrc&&this.player.signLanguageSrc.length>0}createProgressBar(){let e=n.createElement("div",{className:`${this.player.options.classPrefix}-progress-container`,attributes:{role:"slider","aria-label":c.t("player.progress"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":"0",tabindex:"0"}});this.controls.buffered=n.createElement("div",{className:`${this.player.options.classPrefix}-progress-buffered`}),this.controls.played=n.createElement("div",{className:`${this.player.options.classPrefix}-progress-played`}),this.controls.progressHandle=n.createElement("div",{className:`${this.player.options.classPrefix}-progress-handle`}),this.controls.progressTooltip=n.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.element.appendChild(e),this.setupProgressBarEvents()}setupProgressBarEvents(){let e=this.controls.progress,t=i=>{let s=e.getBoundingClientRect(),a=Math.max(0,Math.min(1,(i-s.left)/s.width)),r=a*this.player.state.duration;return{percent:a,time:r}};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=S.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=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-play-pause`,attributes:{type:"button","aria-label":c.t("player.play")}});return e.appendChild(d("play")),e.addEventListener("click",()=>{this.player.toggle()}),this.controls.playPause=e,e}createRestartButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-restart`,attributes:{type:"button","aria-label":c.t("player.restart")}});return e.appendChild(d("restart")),e.addEventListener("click",()=>{this.player.seek(0),this.player.play()}),e}createPreviousButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-previous`,attributes:{type:"button","aria-label":c.t("player.previous")}});e.appendChild(d("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=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-next`,attributes:{type:"button","aria-label":c.t("player.next")}});e.appendChild(d("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}createRewindButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-rewind`,attributes:{type:"button","aria-label":c.t("player.rewindSeconds",{seconds:15})}});return e.appendChild(d("rewind")),e.addEventListener("click",()=>{this.player.seekBackward(15)}),e}createForwardButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-forward`,attributes:{type:"button","aria-label":c.t("player.forwardSeconds",{seconds:15})}});return e.appendChild(d("forward")),e.addEventListener("click",()=>{this.player.seekForward(15)}),e}createVolumeControl(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":c.t("player.volume"),"aria-haspopup":"true"}});return e.appendChild(d("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();return}let i=n.createElement("div",{className:`${this.player.options.classPrefix}-volume-menu ${this.player.options.classPrefix}-menu`}),s=n.createElement("div",{className:`${this.player.options.classPrefix}-volume-slider`,attributes:{role:"slider","aria-label":c.t("player.volume"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":String(Math.round(this.player.state.volume*100)),tabindex:"0"}}),a=n.createElement("div",{className:`${this.player.options.classPrefix}-volume-track`}),r=n.createElement("div",{className:`${this.player.options.classPrefix}-volume-fill`}),l=n.createElement("div",{className:`${this.player.options.classPrefix}-volume-handle`});a.appendChild(r),r.appendChild(l),s.appendChild(a),i.appendChild(s);let o=h=>{let u=a.getBoundingClientRect(),g=Math.max(0,Math.min(1,1-(h-u.top)/u.height));this.player.setVolume(g)};s.addEventListener("mousedown",h=>{h.stopPropagation(),this.isDraggingVolume=!0,o(h.clientY)}),document.addEventListener("mousemove",h=>{this.isDraggingVolume&&o(h.clientY)}),document.addEventListener("mouseup",()=>{this.isDraggingVolume=!1}),s.addEventListener("keydown",h=>{h.key==="ArrowUp"?(h.preventDefault(),this.player.setVolume(Math.min(1,this.player.state.volume+.1))):h.key==="ArrowDown"&&(h.preventDefault(),this.player.setVolume(Math.max(0,this.player.state.volume-.1)))}),i.addEventListener("click",h=>{h.stopPropagation()}),e.appendChild(i),this.controls.volumeSlider=s,this.controls.volumeFill=r,this.attachMenuCloseHandler(i,e,!0)}createTimeDisplay(){let e=n.createElement("div",{className:`${this.player.options.classPrefix}-time`,attributes:{role:"group","aria-label":c.t("time.display")}});this.controls.currentTimeDisplay=n.createElement("span",{className:`${this.player.options.classPrefix}-current-time`,attributes:{"aria-label":c.t("time.seconds",{count:0})}});let t=n.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}});this.controls.currentTimeDisplay.appendChild(t),this.controls.currentTimeVisual=t;let i=n.createElement("span",{textContent:" / ",attributes:{"aria-hidden":"true"}});this.controls.durationDisplay=n.createElement("span",{className:`${this.player.options.classPrefix}-duration`,attributes:{"aria-label":c.t("time.durationPrefix")+c.t("time.seconds",{count:0})}});let s=n.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}});return this.controls.durationDisplay.appendChild(s),this.controls.durationVisual=s,e.appendChild(this.controls.currentTimeDisplay),e.appendChild(i),e.appendChild(this.controls.durationDisplay),e}createChaptersButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-chapters`,attributes:{type:"button","aria-label":c.t("player.chapters"),"aria-haspopup":"menu"}});return e.appendChild(d("playlist")),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();return}let i=n.createElement("div",{className:`${this.player.options.classPrefix}-chapters-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":c.t("player.chapters")}}),s=Array.from(this.player.element.textTracks).filter(a=>a.kind==="chapters");if(s.length===0){let a=n.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:c.t("player.noChapters"),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=n.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:c.t("player.loadingChapters"),style:{opacity:"0.5",cursor:"default"}});i.appendChild(r);let l=()=>{i.remove(),this.showChaptersMenu(e)};a.addEventListener("load",l,{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 l=0;l<r.length;l++){let o=r[l],h=n.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),u=n.createElement("span",{className:`${this.player.options.classPrefix}-chapter-time`,textContent:S.formatTime(o.startTime)}),g=n.createElement("span",{className:`${this.player.options.classPrefix}-chapter-title`,textContent:o.text});h.appendChild(u),h.appendChild(document.createTextNode(" ")),h.appendChild(g),h.addEventListener("click",()=>{this.player.seek(o.startTime),i.remove()}),i.appendChild(h)}this.attachMenuKeyboardNavigation(i),setTimeout(()=>{let l=i.querySelector(`.${this.player.options.classPrefix}-menu-item`);l&&l.focus()},0)}}e.appendChild(i),this.attachMenuCloseHandler(i,e)}createQualityButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-quality`,attributes:{type:"button","aria-label":c.t("player.quality"),"aria-haspopup":"menu"}});e.appendChild(d("hd"));let t=n.createElement("span",{className:`${this.player.options.classPrefix}-quality-text`,textContent:""});return e.appendChild(t),e.addEventListener("click",()=>{this.showQualityMenu(e)}),this.controls.quality=e,this.controls.qualityText=t,setTimeout(()=>this.updateQualityIndicator(),500),e}showQualityMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-quality-menu`);if(t){t.remove();return}let i=n.createElement("div",{className:`${this.player.options.classPrefix}-quality-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":c.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 l=n.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:c.t("player.autoQuality"),style:{opacity:"0.5",cursor:"default"}});i.appendChild(l)}else{let l=null;if(r){let o=n.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:c.t("player.auto"),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});this.player.renderer.hls&&this.player.renderer.hls.currentLevel===-1&&(o.classList.add(`${this.player.options.classPrefix}-menu-item-active`),o.appendChild(d("check")),l=o),o.addEventListener("click",()=>{this.player.renderer.switchQuality&&this.player.renderer.switchQuality(-1),i.remove()}),i.appendChild(o)}s.forEach(o=>{let h=n.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:o.name||`${o.height}p`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}});o.index===a&&(h.classList.add(`${this.player.options.classPrefix}-menu-item-active`),h.appendChild(d("check")),l=h),h.addEventListener("click",()=>{this.player.renderer.switchQuality&&this.player.renderer.switchQuality(o.index),i.remove()}),i.appendChild(h)}),this.attachMenuKeyboardNavigation(i),setTimeout(()=>{let o=l||i.querySelector(`.${this.player.options.classPrefix}-menu-item`);o&&o.focus()},0)}}else{let s=n.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:c.t("player.noQuality"),style:{opacity:"0.5",cursor:"default"}});i.appendChild(s)}e.appendChild(i),this.attachMenuCloseHandler(i,e)}createCaptionStyleButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-caption-style`,attributes:{type:"button","aria-label":c.t("player.captionStyling"),"aria-haspopup":"menu",title:c.t("player.captionStyling")}}),t=n.createElement("span",{textContent:"Aa",style:{fontSize:"14px",fontWeight:"bold"}});return e.appendChild(t),e.addEventListener("click",()=>{this.showCaptionStyleMenu(e)}),this.controls.captionStyle=e,e}showCaptionStyleMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-caption-style-menu`);if(t){t.remove();return}let i=n.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":c.t("player.captionStyling")}});if(i.addEventListener("click",h=>{h.stopPropagation()}),!this.player.captionManager||this.player.captionManager.tracks.length===0){let h=n.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:c.t("player.noCaptions"),style:{opacity:"0.5",cursor:"default",padding:"12px 16px"}});i.appendChild(h),e.appendChild(i),this.attachMenuCloseHandler(i,e,!0);return}let s=this.createStyleControl(c.t("styleLabels.fontSize"),"captionsFontSize",[{label:c.t("fontSizes.small"),value:"87.5%"},{label:c.t("fontSizes.normal"),value:"100%"},{label:c.t("fontSizes.large"),value:"125%"},{label:c.t("fontSizes.xlarge"),value:"150%"}]);i.appendChild(s);let a=this.createStyleControl(c.t("styleLabels.font"),"captionsFontFamily",[{label:c.t("fontFamilies.sansSerif"),value:"sans-serif"},{label:c.t("fontFamilies.serif"),value:"serif"},{label:c.t("fontFamilies.monospace"),value:"monospace"}]);i.appendChild(a);let r=this.createColorControl(c.t("styleLabels.textColor"),"captionsColor");i.appendChild(r);let l=this.createColorControl(c.t("styleLabels.background"),"captionsBackgroundColor");i.appendChild(l);let o=this.createOpacityControl(c.t("styleLabels.opacity"),"captionsOpacity");i.appendChild(o),i.style.minWidth="220px",e.appendChild(i),this.attachMenuCloseHandler(i,e,!0),setTimeout(()=>{let h=i.querySelector("select");h&&h.focus()},0)}createStyleControl(e,t,i){let s=n.createElement("div",{className:`${this.player.options.classPrefix}-style-group`}),a=n.createElement("label",{textContent:e,style:{display:"block",fontSize:"12px",marginBottom:"4px",color:"rgba(255,255,255,0.7)"}});s.appendChild(a);let r=n.createElement("select",{className:`${this.player.options.classPrefix}-style-select`,style:{width:"100%",padding:"6px",background:"var(--vidply-white)",border:"1px solid var(--vidply-white-10)",borderRadius:"4px",color:"var(--vidply-black)",fontSize:"13px"}}),l=this.player.options[t];return i.forEach(o=>{let h=n.createElement("option",{textContent:o.label,attributes:{value:o.value}});o.value===l&&(h.selected=!0),r.appendChild(h)}),r.addEventListener("mousedown",o=>{o.stopPropagation()}),r.addEventListener("click",o=>{o.stopPropagation()}),r.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(r),s}createColorControl(e,t){let i=n.createElement("div",{className:`${this.player.options.classPrefix}-style-group`}),s=n.createElement("label",{textContent:e,style:{display:"block",fontSize:"12px",marginBottom:"4px",color:"rgba(255,255,255,0.7)"}});i.appendChild(s);let a=n.createElement("input",{attributes:{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 a.addEventListener("mousedown",r=>{r.stopPropagation()}),a.addEventListener("click",r=>{r.stopPropagation()}),a.addEventListener("change",r=>{r.stopPropagation(),this.player.options[t]=r.target.value,this.player.captionManager&&this.player.captionManager.setCaptionStyle(t.replace("captions","").charAt(0).toLowerCase()+t.replace("captions","").slice(1),r.target.value)}),i.appendChild(a),i}createOpacityControl(e,t){let i=n.createElement("div",{className:`${this.player.options.classPrefix}-style-group`}),s=n.createElement("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"4px"}}),a=n.createElement("label",{textContent:e,style:{fontSize:"12px",color:"rgba(255,255,255,0.7)"}}),r=n.createElement("span",{textContent:Math.round(this.player.options[t]*100)+"%",style:{fontSize:"12px",color:"rgba(255,255,255,0.7)"}});s.appendChild(a),s.appendChild(r),i.appendChild(s);let l=n.createElement("input",{attributes:{type:"range",min:"0",max:"1",step:"0.1",value:String(this.player.options[t])},style:{width:"100%",cursor:"pointer"}});return l.addEventListener("mousedown",o=>{o.stopPropagation()}),l.addEventListener("click",o=>{o.stopPropagation()}),l.addEventListener("input",o=>{o.stopPropagation();let h=parseFloat(o.target.value);r.textContent=Math.round(h*100)+"%",this.player.options[t]=h,this.player.captionManager&&this.player.captionManager.setCaptionStyle(t.replace("captions","").charAt(0).toLowerCase()+t.replace("captions","").slice(1),h)}),i.appendChild(l),i}createSpeedButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-speed`,attributes:{type:"button","aria-label":c.t("player.speed"),"aria-haspopup":"menu"}});e.appendChild(d("speed"));let t=n.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?c.t("speeds.normal"):`${e.toLocaleString(c.getLanguage(),{minimumFractionDigits:0,maximumFractionDigits:2})}\xD7`}showSpeedMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-speed-menu`);if(t){t.remove();return}let i=n.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 l=n.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&&(l.classList.add(`${this.player.options.classPrefix}-menu-item-active`),l.appendChild(d("check")),a=l),l.addEventListener("click",()=>{this.player.setPlaybackSpeed(r),i.remove()}),i.appendChild(l)}),e.appendChild(i),this.attachMenuKeyboardNavigation(i),this.attachMenuCloseHandler(i,e),setTimeout(()=>{let r=a||i.querySelector(`.${this.player.options.classPrefix}-menu-item`);r&&r.focus()},0)}createCaptionsButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-captions-button`,attributes:{type:"button","aria-label":c.t("player.captions"),"aria-pressed":"false","aria-haspopup":"menu"}});return e.appendChild(d("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();return}let i=n.createElement("div",{className:`${this.player.options.classPrefix}-captions-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":c.t("captions.select")}});if(!this.player.captionManager||this.player.captionManager.tracks.length===0){let l=n.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:c.t("player.noCaptions"),style:{opacity:"0.5",cursor:"default"}});i.appendChild(l),e.appendChild(i),this.attachMenuCloseHandler(i,e);return}let s=null,a=n.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:c.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(d("check")),s=a),a.addEventListener("click",()=>{this.player.disableCaptions(),this.updateCaptionsButton(),i.remove()}),i.appendChild(a),this.player.captionManager.getAvailableTracks().forEach(l=>{let o=n.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:l.label,attributes:{type:"button",role:"menuitem",lang:l.language,tabindex:"-1"}});this.player.state.captionsEnabled&&this.player.captionManager.currentTrack===this.player.captionManager.tracks[l.index]&&(o.classList.add(`${this.player.options.classPrefix}-menu-item-active`),o.appendChild(d("check")),s=o),o.addEventListener("click",()=>{this.player.captionManager.switchTrack(l.index),this.updateCaptionsButton(),i.remove()}),i.appendChild(o)}),e.appendChild(i),this.attachMenuKeyboardNavigation(i),this.attachMenuCloseHandler(i,e),setTimeout(()=>{let l=s||i.querySelector(`.${this.player.options.classPrefix}-menu-item`);l&&l.focus()},0)}updateCaptionsButton(){if(!this.controls.captions)return;let e=this.controls.captions.querySelector(".vidply-icon"),t=this.player.state.captionsEnabled;e.innerHTML=t?d("captions").innerHTML:d("captionsOff").innerHTML,this.controls.captions.setAttribute("aria-pressed",t?"true":"false")}createTranscriptButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-transcript`,attributes:{type:"button","aria-label":c.t("player.transcript"),"aria-pressed":"false"}});return e.appendChild(d("transcript")),e.addEventListener("click",()=>{this.player.transcriptManager&&(this.player.transcriptManager.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-pressed",e?"true":"false")}createAudioDescriptionButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-audio-description`,attributes:{type:"button","aria-label":c.t("player.audioDescription"),"aria-pressed":"false",title:c.t("player.audioDescription")}});return e.appendChild(d("audioDescription")),e.addEventListener("click",async()=>{await this.player.toggleAudioDescription(),this.updateAudioDescriptionButton()}),this.controls.audioDescription=e,e}updateAudioDescriptionButton(){if(!this.controls.audioDescription)return;let e=this.controls.audioDescription.querySelector(".vidply-icon"),t=this.player.state.audioDescriptionEnabled;e.innerHTML=t?d("audioDescriptionOn").innerHTML:d("audioDescription").innerHTML,this.controls.audioDescription.setAttribute("aria-pressed",t?"true":"false"),this.controls.audioDescription.setAttribute("aria-label",t?c.t("audioDescription.disable"):c.t("audioDescription.enable"))}createSignLanguageButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-sign-language`,attributes:{type:"button","aria-label":c.t("player.signLanguage"),"aria-pressed":"false",title:c.t("player.signLanguage")}});return e.appendChild(d("signLanguage")),e.addEventListener("click",()=>{this.player.toggleSignLanguage(),this.updateSignLanguageButton()}),this.controls.signLanguage=e,e}updateSignLanguageButton(){if(!this.controls.signLanguage)return;let e=this.controls.signLanguage.querySelector(".vidply-icon"),t=this.player.state.signLanguageEnabled;e.innerHTML=t?d("signLanguageOn").innerHTML:d("signLanguage").innerHTML,this.controls.signLanguage.setAttribute("aria-pressed",t?"true":"false"),this.controls.signLanguage.setAttribute("aria-label",t?c.t("signLanguage.hide"):c.t("signLanguage.show"))}createSettingsButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-settings`,attributes:{type:"button","aria-label":c.t("player.settings")}});return e.appendChild(d("settings")),e.addEventListener("click",()=>{this.player.showSettings()}),e}createPipButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-pip`,attributes:{type:"button","aria-label":c.t("player.pip")}});return e.appendChild(d("pip")),e.addEventListener("click",()=>{this.player.togglePiP()}),e}createFullscreenButton(){let e=n.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-fullscreen`,attributes:{type:"button","aria-label":c.t("player.fullscreen")}});return e.appendChild(d("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?d("pause").innerHTML:d("play").innerHTML,this.controls.playPause.setAttribute("aria-label",t?c.t("player.pause"):c.t("player.play"))}updateProgress(){if(!this.controls.played)return;let e=this.player.state.currentTime/this.player.state.duration*100;if(this.controls.played.style.width=`${e}%`,this.controls.progress.setAttribute("aria-valuenow",String(Math.round(e))),this.controls.currentTimeVisual){let t=this.player.state.currentTime;this.controls.currentTimeVisual.textContent=S.formatTime(t),this.controls.currentTimeDisplay.setAttribute("aria-label",S.formatDuration(t))}}updateDuration(){if(this.controls.durationVisual){let e=this.player.state.duration;this.controls.durationVisual.textContent=S.formatTime(e),this.controls.durationDisplay.setAttribute("aria-label",c.t("time.durationPrefix")+S.formatDuration(e))}}updateVolumeDisplay(){let e=this.player.state.volume*100;if(this.controls.volumeFill&&(this.controls.volumeFill.style.height=`${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=d(i).innerHTML,this.controls.mute.setAttribute("aria-label",this.player.state.muted?c.t("player.unmute"):c.t("player.mute"))}}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?d("fullscreenExit").innerHTML:d("fullscreen").innerHTML,this.controls.fullscreen.setAttribute("aria-label",t?c.t("player.exitFullscreen"):c.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=()=>{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&&(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},this.player.options.hideControlsDelay))};this.player.container.addEventListener("mousemove",e),this.player.container.addEventListener("touchstart",e),this.player.container.addEventListener("click",e),this.element.addEventListener("focusin",e),this.player.on("pause",()=>{e(),clearTimeout(this.hideTimeout)}),this.player.on("play",()=>{e()}),e()}show(){this.element.style.display=""}hide(){this.element.style.display="none"}destroy(){this.hideTimeout&&clearTimeout(this.hideTimeout),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}};var T=class{constructor(e="vidply"){this.namespace=e,this.storage=this.isStorageAvailable()?localStorage:null}isStorageAvailable(){try{let e="__storage_test__";return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch{return!1}}getKey(e){return`${this.namespace}_${e}`}set(e,t){if(!this.storage)return!1;try{let i=this.getKey(e);return this.storage.setItem(i,JSON.stringify(t)),!0}catch(i){return console.warn("Failed to save to localStorage:",i),!1}}get(e,t=null){if(!this.storage)return t;try{let i=this.getKey(e),s=this.storage.getItem(i);return s?JSON.parse(s):t}catch(i){return console.warn("Failed to read from localStorage:",i),t}}remove(e){if(!this.storage)return!1;try{let t=this.getKey(e);return this.storage.removeItem(t),!0}catch(t){return console.warn("Failed to remove from localStorage:",t),!1}}clear(){if(!this.storage)return!1;try{return Object.keys(this.storage).forEach(t=>{t.startsWith(this.namespace)&&this.storage.removeItem(t)}),!0}catch(e){return console.warn("Failed to clear localStorage:",e),!1}}saveTranscriptPreferences(e){return this.set("transcript_preferences",e)}getTranscriptPreferences(){return this.get("transcript_preferences",null)}saveCaptionPreferences(e){return this.set("caption_preferences",e)}getCaptionPreferences(){return this.get("caption_preferences",null)}savePlayerPreferences(e){return this.set("player_preferences",e)}getPlayerPreferences(){return this.get("player_preferences",null)}saveSignLanguagePreferences(e){return this.set("sign_language_preferences",e)}getSignLanguagePreferences(){return this.get("sign_language_preferences",null)}};var A=class{constructor(e){this.player=e,this.element=null,this.tracks=[],this.currentTrack=null,this.currentCue=null,this.storage=new T("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.enable()}createElement(){this.element=n.createElement("div",{className:`${this.player.options.classPrefix}-captions`,attributes:{"aria-live":"polite","aria-atomic":"true",role:"region","aria-label":c.t("player.captions")}}),this.updateStyles(),(this.player.videoWrapper||this.player.container).appendChild(this.element)}loadTracks(){let e=this.player.element.textTracks;for(let t=0;t<e.length;t++){let i=e[t];(i.kind==="subtitles"||i.kind==="captions")&&(this.tracks.push({track:i,language:i.language,label:i.label,kind:i.kind,index:t}),i.mode="hidden")}}attachEvents(){this.player.on("timeupdate",()=>{this.updateCaptions()}),this.player.on("captionschange",()=>{this.updateStyles()})}enable(e=0){if(this.tracks.length===0)return;this.currentTrack&&(this.currentTrack.track.mode="hidden");let t=this.tracks[e];t&&(t.track.mode="hidden",this.currentTrack=t,this.player.state.captionsEnabled=!0,this.cueChangeHandler&&t.track.removeEventListener("cuechange",this.cueChangeHandler),this.cueChangeHandler=()=>{this.updateCaptions()},t.track.addEventListener("cuechange",this.cueChangeHandler),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.currentCue=null,this.player.state.captionsEnabled=!1,this.player.emit("captionsdisabled")}updateCaptions(){if(!this.currentTrack||!this.currentTrack.track.activeCues)return;let e=this.currentTrack.track.activeCues;if(e.length>0){let t=e[0];if(this.currentCue!==t){this.currentCue=t;let i=t.text;i=this.parseVTTFormatting(i),this.element.innerHTML=n.sanitizeHTML(i),this.element.style.display="block",this.player.emit("captionchange",t)}}else this.currentCue&&(this.element.innerHTML="",this.element.style.display="none",this.currentCue=null)}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 V=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)}),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=e.key,i=!1;for(let[s,a]of Object.entries(this.shortcuts))if(a.includes(t)&&(i=this.executeAction(s,e),i)){e.preventDefault(),e.stopPropagation(),this.announceAction(s);break}!i&&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
|
+
var VidPly=(()=>{var Q=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var se=Object.prototype.hasOwnProperty;var ae=(h,e)=>()=>(h&&(e=h(h=0)),e);var X=(h,e)=>{for(var t in e)Q(h,t,{get:e[t],enumerable:!0})},re=(h,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ie(e))!se.call(h,s)&&s!==t&&Q(h,s,{get:()=>e[s],enumerable:!(i=te(e,s))||i.enumerable});return h};var ne=h=>re(Q({},"__esModule",{value:!0}),h);var J={};X(J,{HTML5Renderer:()=>W});var W,Y=ae(()=>{W=class{constructor(e){this.player=e,this.media=e.element}async init(){this.media.controls=!1,this.media.removeAttribute("controls"),this.attachEvents(),this.media.preload=this.player.options.preload,this.media.load()}attachEvents(){this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player),this.player.options.pauseOthersOnPlay&&this.pauseOtherPlayers()}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume),this.player.options.onVolumeChange&&this.player.options.onVolumeChange.call(this.player,this.media.volume)}),this.media.addEventListener("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking")}),this.media.addEventListener("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.media.addEventListener("progress",()=>{if(this.media.buffered.length>0){let e=this.media.buffered.end(this.media.buffered.length-1);this.player.emit("progress",e)}}),this.media.addEventListener("error",e=>{this.player.handleError(this.media.error)}),this.media.addEventListener("ratechange",()=>{this.player.state.playbackSpeed=this.media.playbackRate,this.player.emit("ratechange",this.media.playbackRate)})}pauseOtherPlayers(){document.querySelectorAll(".vidply-player").forEach(t=>{if(t!==this.player.container){let i=t.querySelector("video, audio");i&&!i.paused&&i.pause()}})}play(){let e=this.media.play();e!==void 0&&e.catch(t=>{this.player.log("Play failed:",t,"warn"),this.player.options.autoplay&&!this.player.state.muted&&(this.player.log("Retrying play with muted audio","info"),this.media.muted=!0,this.media.play().catch(i=>{this.player.handleError(i)}))})}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}getQualities(){let e=Array.from(this.media.querySelectorAll("source"));return e.length<=1?[]:e.map((t,i)=>{let s=t.getAttribute("data-quality")||t.getAttribute("label")||"",a=t.getAttribute("data-height")||this.extractHeightFromLabel(s),r=t.getAttribute("data-width")||"";return{index:i,height:a?parseInt(a):0,width:r?parseInt(r):0,src:t.src,type:t.type,name:s||(a?`${a}p`:`Quality ${i+1}`)}}).filter(t=>t.height>0)}extractHeightFromLabel(e){let t=e.match(/(\d+)p/i);return t?parseInt(t[1]):0}switchQuality(e){let t=this.getQualities();if(e<0||e>=t.length){this.player.log("Invalid quality index","warn");return}let i=t[e],s=this.media.currentTime,a=!this.media.paused;if(this.media.currentSrc===i.src){this.player.log("Already at this quality level","info");return}this.player.log(`Switching to quality: ${i.name}`,"info"),this.media.src=i.src;let o=()=>{this.media.removeEventListener("loadedmetadata",o),this.media.currentTime=s,a&&this.media.play().catch(n=>{this.player.log("Failed to resume playback after quality switch","warn")}),this.player.emit("qualitychange",{quality:i.name,index:e})};this.media.addEventListener("loadedmetadata",o),this.media.load()}getCurrentQuality(){let e=this.getQualities(),t=this.media.currentSrc;for(let i=0;i<e.length;i++)if(e[i].src===t)return i;return 0}destroy(){this.media.removeEventListener("loadedmetadata",()=>{}),this.media.removeEventListener("play",()=>{}),this.media.removeEventListener("pause",()=>{})}}});var de={};X(de,{Player:()=>z,PlaylistManager:()=>q,default:()=>he});var V=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}};var l={createElement(h,e={}){let t=document.createElement(h);return e.className&&(t.className=e.className),e.attributes&&Object.entries(e.attributes).forEach(([i,s])=>{t.setAttribute(i,s)}),e.innerHTML&&(t.innerHTML=e.innerHTML),e.textContent&&(t.textContent=e.textContent),e.style&&Object.assign(t.style,e.style),e.children&&e.children.forEach(i=>{i&&t.appendChild(i)}),t},addClass(h,e){h&&e&&h.classList.add(e)},removeClass(h,e){h&&e&&h.classList.remove(e)},toggleClass(h,e){h&&e&&h.classList.toggle(e)},hasClass(h,e){return h&&h.classList.contains(e)},show(h){h&&(h.style.display="")},hide(h){h&&(h.style.display="none")},fadeIn(h,e=300){if(!h)return;h.style.opacity="0",h.style.display="";let t=null,i=s=>{t||(t=s);let a=s-t,r=Math.min(a/e,1);h.style.opacity=r,a<e&&requestAnimationFrame(i)};requestAnimationFrame(i)},fadeOut(h,e=300){if(!h)return;let t=parseFloat(getComputedStyle(h).opacity)||1,i=null,s=a=>{i||(i=a);let r=a-i,o=Math.max(t-r/e,0);h.style.opacity=o,r<e?requestAnimationFrame(s):h.style.display="none"};requestAnimationFrame(s)},offset(h){if(!h)return{top:0,left:0};let e=h.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset,width:e.width,height:e.height}},escapeHTML(h){let e=document.createElement("div");return e.textContent=h,e.innerHTML},sanitizeHTML(h){let e=document.createElement("div"),t=h.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,"").replace(/<iframe\b[^<]*(?:(?!<\/iframe>)<[^<]*)*<\/iframe>/gi,"").replace(/on\w+\s*=/gi,"").replace(/javascript:/gi,"");return e.innerHTML=t,e.innerHTML}};var j={en:{player:{label:"Video Player",play:"Play",pause:"Pause",stop:"Stop",restart:"Restart from beginning",rewind:"Rewind",forward:"Forward",rewindSeconds:"Rewind {seconds} seconds",forwardSeconds:"Forward {seconds} seconds",previous:"Previous track",next:"Next track",volume:"Volume",mute:"Mute",unmute:"Unmute",fullscreen:"Fullscreen",exitFullscreen:"Exit Fullscreen",captions:"Captions",chapters:"Chapters",quality:"Quality",captionStyling:"Caption styling",transcript:"Toggle transcript",audioDescription:"Audio description",signLanguage:"Sign language video",settings:"Settings",speed:"Playback Speed",pip:"Picture in Picture",currentTime:"Current time",duration:"Duration",progress:"Progress",seekForward:"Seek forward {seconds} seconds",seekBackward:"Seek backward {seconds} seconds",volumeUp:"Volume up",volumeDown:"Volume down",loading:"Loading...",loadingChapters:"Loading chapters...",error:"Error loading media",buffering:"Buffering...",signLanguageVideo:"Sign Language Video",noChapters:"No chapters available",noCaptions:"No captions available",auto:"Auto",autoQuality:"Auto (no quality selection available)",noQuality:"Quality selection not available",signLanguageDragResize:"Sign Language Video - Press D to drag with keyboard, R to resize",signLanguageDragActive:"Sign Language Video - Drag mode active. Use arrow keys to move, Escape to exit.",signLanguageResizeActive:"Sign Language Video - Resize mode active. Use left/right arrow keys to resize, Escape to exit.",resizeHandle:"Resize {direction} corner"},captions:{off:"Off",select:"Select captions",fontSize:"Font Size",fontFamily:"Font Family",color:"Text Color",backgroundColor:"Background Color",opacity:"Opacity"},fontSizes:{small:"Small",normal:"Normal",large:"Large",xlarge:"X-Large"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Text Color",background:"Background",font:"Font",fontSize:"Font Size",opacity:"Opacity"},audioDescription:{enable:"Enable audio description",disable:"Disable audio description"},signLanguage:{show:"Show sign language video",hide:"Hide sign language video"},transcript:{title:"Transcript",close:"Close transcript",loading:"Loading transcript...",noTranscript:"No transcript available for this video.",settings:"Transcript settings. Press Enter to open menu, or D to enable drag mode",keyboardDragMode:"Toggle keyboard drag mode with arrow keys. Shortcut: D key",keyboardDragActive:"\u2328\uFE0F Keyboard Drag Mode Active (Arrow keys to move, Shift+Arrows for large steps, D or ESC to exit)",resizeWindow:"Resize Window",styleTranscript:"Open transcript style settings",closeMenu:"Close Menu",styleTitle:"Transcript Style"},settings:{title:"Settings",quality:"Quality",speed:"Speed",captions:"Captions",language:"Language",reset:"Reset to defaults",close:"Close"},speeds:{normal:"Normal"},time:{display:"Time display",durationPrefix:"Duration: ",hour:"{count} hour",hours:"{count} hours",minute:"{count} minute",minutes:"{count} minutes",second:"{count} second",seconds:"{count} seconds"}},de:{player:{label:"Videoplayer",play:"Abspielen",pause:"Pause",stop:"Stopp",restart:"Von vorne beginnen",rewind:"Zur\xFCckspulen",forward:"Vorspulen",rewindSeconds:"{seconds} Sekunden zur\xFCckspulen",forwardSeconds:"{seconds} Sekunden vorspulen",previous:"Vorheriger Titel",next:"N\xE4chster Titel",volume:"Lautst\xE4rke",mute:"Stumm",unmute:"Ton ein",fullscreen:"Vollbild",exitFullscreen:"Vollbild beenden",captions:"Untertitel",chapters:"Kapitel",quality:"Qualit\xE4t",captionStyling:"Untertitel-Stil",transcript:"Transkript umschalten",audioDescription:"Audiodeskription",signLanguage:"Geb\xE4rdensprache-Video",settings:"Einstellungen",speed:"Wiedergabegeschwindigkeit",pip:"Bild-in-Bild",currentTime:"Aktuelle Zeit",duration:"Dauer",progress:"Fortschritt",seekForward:"{seconds} Sekunden vorspulen",seekBackward:"{seconds} Sekunden zur\xFCckspulen",volumeUp:"Lauter",volumeDown:"Leiser",loading:"L\xE4dt...",loadingChapters:"Kapitel werden geladen...",error:"Fehler beim Laden",buffering:"Puffern...",signLanguageVideo:"Geb\xE4rdensprache-Video",noChapters:"Keine Kapitel verf\xFCgbar",noCaptions:"Keine Untertitel verf\xFCgbar",auto:"Automatisch",autoQuality:"Automatisch (keine Qualit\xE4tsauswahl verf\xFCgbar)",noQuality:"Qualit\xE4tsauswahl nicht verf\xFCgbar",signLanguageDragResize:"Geb\xE4rdensprache-Video - Dr\xFCcken Sie D zum Verschieben per Tastatur, R zum \xC4ndern der Gr\xF6\xDFe",signLanguageDragActive:"Geb\xE4rdensprache-Video - Verschiebemodus aktiv. Pfeiltasten zum Bewegen, Escape zum Beenden.",signLanguageResizeActive:"Geb\xE4rdensprache-Video - Gr\xF6\xDFen\xE4nderungsmodus aktiv. Links-/Rechts-Pfeiltasten zum \xC4ndern der Gr\xF6\xDFe, Escape zum Beenden.",resizeHandle:"Gr\xF6\xDFen\xE4nderung {direction}-Ecke"},captions:{off:"Aus",select:"Untertitel ausw\xE4hlen",fontSize:"Schriftgr\xF6\xDFe",fontFamily:"Schriftart",color:"Textfarbe",backgroundColor:"Hintergrundfarbe",opacity:"Deckkraft"},fontSizes:{small:"Klein",normal:"Normal",large:"Gro\xDF",xlarge:"Sehr gro\xDF"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Textfarbe",background:"Hintergrund",font:"Schrift",fontSize:"Schriftgr\xF6\xDFe",opacity:"Deckkraft"},audioDescription:{enable:"Audiodeskription aktivieren",disable:"Audiodeskription deaktivieren"},signLanguage:{show:"Geb\xE4rdensprache-Video anzeigen",hide:"Geb\xE4rdensprache-Video ausblenden"},transcript:{title:"Transkript",close:"Transkript schlie\xDFen",loading:"Transkript wird geladen...",noTranscript:"Kein Transkript f\xFCr dieses Video verf\xFCgbar.",settings:"Transkript-Einstellungen. Eingabetaste zum \xD6ffnen des Men\xFCs dr\xFCcken oder D zum Aktivieren des Verschiebemodus",keyboardDragMode:"Tastatur-Verschiebemodus mit Pfeiltasten umschalten. Tastenkombination: D-Taste",keyboardDragActive:"\u2328\uFE0F Tastatur-Verschiebemodus aktiv (Pfeiltasten zum Bewegen, Umschalt+Pfeiltasten f\xFCr gro\xDFe Schritte, D oder ESC zum Beenden)",resizeWindow:"Fenster vergr\xF6\xDFern/verkleinern",styleTranscript:"Transkript-Stileinstellungen \xF6ffnen",closeMenu:"Men\xFC schlie\xDFen",styleTitle:"Transkript-Stil"},settings:{title:"Einstellungen",quality:"Qualit\xE4t",speed:"Geschwindigkeit",captions:"Untertitel",language:"Sprache",reset:"Zur\xFCcksetzen",close:"Schlie\xDFen"},speeds:{normal:"Normal"},time:{display:"Zeitanzeige",durationPrefix:"Dauer: ",hour:"{count} Stunde",hours:"{count} Stunden",minute:"{count} Minute",minutes:"{count} Minuten",second:"{count} Sekunde",seconds:"{count} Sekunden"}},es:{player:{label:"Reproductor de video",play:"Reproducir",pause:"Pausa",stop:"Detener",restart:"Reiniciar desde el principio",rewind:"Retroceder",forward:"Avanzar",rewindSeconds:"Retroceder {seconds} segundos",forwardSeconds:"Avanzar {seconds} segundos",previous:"Pista anterior",next:"Siguiente pista",volume:"Volumen",mute:"Silenciar",unmute:"Activar sonido",fullscreen:"Pantalla completa",exitFullscreen:"Salir de pantalla completa",captions:"Subt\xEDtulos",chapters:"Cap\xEDtulos",quality:"Calidad",captionStyling:"Estilo de subt\xEDtulos",transcript:"Alternar transcripci\xF3n",audioDescription:"Audiodescripci\xF3n",signLanguage:"Video en lengua de se\xF1as",settings:"Configuraci\xF3n",speed:"Velocidad de reproducci\xF3n",pip:"Imagen en imagen",currentTime:"Tiempo actual",duration:"Duraci\xF3n",progress:"Progreso",seekForward:"Avanzar {seconds} segundos",seekBackward:"Retroceder {seconds} segundos",volumeUp:"Subir volumen",volumeDown:"Bajar volumen",loading:"Cargando...",loadingChapters:"Cargando cap\xEDtulos...",error:"Error al cargar",buffering:"Almacenando en b\xFAfer...",signLanguageVideo:"Video en Lengua de Se\xF1as",noChapters:"No hay cap\xEDtulos disponibles",noCaptions:"No hay subt\xEDtulos disponibles",auto:"Autom\xE1tico",autoQuality:"Autom\xE1tico (selecci\xF3n de calidad no disponible)",noQuality:"Selecci\xF3n de calidad no disponible",signLanguageDragResize:"Video en Lengua de Se\xF1as - Presione D para arrastrar con el teclado, R para cambiar el tama\xF1o",signLanguageDragActive:"Video en Lengua de Se\xF1as - Modo de arrastre activo. Use las teclas de flecha para mover, Escape para salir.",signLanguageResizeActive:"Video en Lengua de Se\xF1as - Modo de cambio de tama\xF1o activo. Use las teclas de flecha izquierda/derecha para cambiar el tama\xF1o, Escape para salir.",resizeHandle:"Cambiar tama\xF1o esquina {direction}"},captions:{off:"Desactivado",select:"Seleccionar subt\xEDtulos",fontSize:"Tama\xF1o de fuente",fontFamily:"Familia de fuente",color:"Color de texto",backgroundColor:"Color de fondo",opacity:"Opacidad"},fontSizes:{small:"Peque\xF1o",normal:"Normal",large:"Grande",xlarge:"Muy grande"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Color de texto",background:"Fondo",font:"Fuente",fontSize:"Tama\xF1o de fuente",opacity:"Opacidad"},audioDescription:{enable:"Activar audiodescripci\xF3n",disable:"Desactivar audiodescripci\xF3n"},signLanguage:{show:"Mostrar video en lengua de se\xF1as",hide:"Ocultar video en lengua de se\xF1as"},transcript:{title:"Transcripci\xF3n",close:"Cerrar transcripci\xF3n",loading:"Cargando transcripci\xF3n...",noTranscript:"No hay transcripci\xF3n disponible para este video.",settings:"Configuraci\xF3n de transcripci\xF3n. Presione Enter para abrir el men\xFA o D para activar el modo de arrastre",keyboardDragMode:"Alternar modo de arrastre con teclado usando teclas de flecha. Atajo: tecla D",keyboardDragActive:"\u2328\uFE0F Modo de Arrastre con Teclado Activo (Teclas de flecha para mover, May\xFAs+Flechas para pasos grandes, D o ESC para salir)",resizeWindow:"Cambiar tama\xF1o de ventana",styleTranscript:"Abrir configuraci\xF3n de estilo de transcripci\xF3n",closeMenu:"Cerrar men\xFA",styleTitle:"Estilo de Transcripci\xF3n"},settings:{title:"Configuraci\xF3n",quality:"Calidad",speed:"Velocidad",captions:"Subt\xEDtulos",language:"Idioma",reset:"Restablecer",close:"Cerrar"},speeds:{normal:"Normal"},time:{display:"Visualizaci\xF3n de tiempo",durationPrefix:"Duraci\xF3n: ",hour:"{count} hora",hours:"{count} horas",minute:"{count} minuto",minutes:"{count} minutos",second:"{count} segundo",seconds:"{count} segundos"}},fr:{player:{label:"Lecteur vid\xE9o",play:"Lecture",pause:"Pause",stop:"Arr\xEAt",restart:"Red\xE9marrer du d\xE9but",rewind:"Reculer",forward:"Avancer",rewindSeconds:"Reculer de {seconds} secondes",forwardSeconds:"Avancer de {seconds} secondes",previous:"Piste pr\xE9c\xE9dente",next:"Piste suivante",volume:"Volume",mute:"Muet",unmute:"Activer le son",fullscreen:"Plein \xE9cran",exitFullscreen:"Quitter le plein \xE9cran",captions:"Sous-titres",chapters:"Chapitres",quality:"Qualit\xE9",captionStyling:"Style des sous-titres",transcript:"Activer/d\xE9sactiver la transcription",audioDescription:"Audiodescription",signLanguage:"Vid\xE9o en langue des signes",settings:"Param\xE8tres",speed:"Vitesse de lecture",pip:"Image dans l'image",currentTime:"Temps actuel",duration:"Dur\xE9e",progress:"Progression",seekForward:"Avancer de {seconds} secondes",seekBackward:"Reculer de {seconds} secondes",volumeUp:"Augmenter le volume",volumeDown:"Diminuer le volume",loading:"Chargement...",loadingChapters:"Chargement des chapitres...",error:"Erreur de chargement",buffering:"Mise en m\xE9moire tampon...",signLanguageVideo:"Vid\xE9o en Langue des Signes",noChapters:"Aucun chapitre disponible",noCaptions:"Aucun sous-titre disponible",auto:"Automatique",autoQuality:"Automatique (s\xE9lection de qualit\xE9 non disponible)",noQuality:"S\xE9lection de qualit\xE9 non disponible",signLanguageDragResize:"Vid\xE9o en Langue des Signes - Appuyez sur D pour d\xE9placer avec le clavier, R pour redimensionner",signLanguageDragActive:"Vid\xE9o en Langue des Signes - Mode glissement actif. Utilisez les touches fl\xE9ch\xE9es pour d\xE9placer, \xC9chap pour quitter.",signLanguageResizeActive:"Vid\xE9o en Langue des Signes - Mode redimensionnement actif. Utilisez les touches fl\xE9ch\xE9es gauche/droite pour redimensionner, \xC9chap pour quitter.",resizeHandle:"Redimensionner coin {direction}"},captions:{off:"D\xE9sactiv\xE9",select:"S\xE9lectionner les sous-titres",fontSize:"Taille de police",fontFamily:"Police",color:"Couleur du texte",backgroundColor:"Couleur de fond",opacity:"Opacit\xE9"},fontSizes:{small:"Petit",normal:"Normal",large:"Grand",xlarge:"Tr\xE8s grand"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Couleur du texte",background:"Arri\xE8re-plan",font:"Police",fontSize:"Taille de police",opacity:"Opacit\xE9"},audioDescription:{enable:"Activer l'audiodescription",disable:"D\xE9sactiver l'audiodescription"},signLanguage:{show:"Afficher la vid\xE9o en langue des signes",hide:"Masquer la vid\xE9o en langue des signes"},transcript:{title:"Transcription",close:"Fermer la transcription",loading:"Chargement de la transcription...",noTranscript:"Aucune transcription disponible pour cette vid\xE9o.",settings:"Param\xE8tres de transcription. Appuyez sur Entr\xE9e pour ouvrir le menu ou D pour activer le mode glissement",keyboardDragMode:"Basculer le mode glissement avec les touches fl\xE9ch\xE9es. Raccourci: touche D",keyboardDragActive:"\u2328\uFE0F Mode Glissement Clavier Actif (Touches fl\xE9ch\xE9es pour d\xE9placer, Maj+Fl\xE9ch\xE9es pour grands pas, D ou \xC9chap pour quitter)",resizeWindow:"Redimensionner la fen\xEAtre",styleTranscript:"Ouvrir les param\xE8tres de style de transcription",closeMenu:"Fermer le menu",styleTitle:"Style de Transcription"},settings:{title:"Param\xE8tres",quality:"Qualit\xE9",speed:"Vitesse",captions:"Sous-titres",language:"Langue",reset:"R\xE9initialiser",close:"Fermer"},speeds:{normal:"Normal"},time:{display:"Affichage du temps",durationPrefix:"Dur\xE9e : ",hour:"{count} heure",hours:"{count} heures",minute:"{count} minute",minutes:"{count} minutes",second:"{count} seconde",seconds:"{count} secondes"}},ja:{player:{label:"\u30D3\u30C7\u30AA\u30D7\u30EC\u30FC\u30E4\u30FC",play:"\u518D\u751F",pause:"\u4E00\u6642\u505C\u6B62",stop:"\u505C\u6B62",restart:"\u6700\u521D\u304B\u3089\u518D\u751F",rewind:"\u5DFB\u304D\u623B\u3057",forward:"\u65E9\u9001\u308A",rewindSeconds:"{seconds}\u79D2\u623B\u3059",forwardSeconds:"{seconds}\u79D2\u9032\u3081\u308B",previous:"\u524D\u306E\u30C8\u30E9\u30C3\u30AF",next:"\u6B21\u306E\u30C8\u30E9\u30C3\u30AF",volume:"\u97F3\u91CF",mute:"\u30DF\u30E5\u30FC\u30C8",unmute:"\u30DF\u30E5\u30FC\u30C8\u89E3\u9664",fullscreen:"\u5168\u753B\u9762\u8868\u793A",exitFullscreen:"\u5168\u753B\u9762\u8868\u793A\u3092\u7D42\u4E86",captions:"\u5B57\u5E55",chapters:"\u30C1\u30E3\u30D7\u30BF\u30FC",quality:"\u753B\u8CEA",captionStyling:"\u5B57\u5E55\u30B9\u30BF\u30A4\u30EB",transcript:"\u6587\u5B57\u8D77\u3053\u3057\u5207\u308A\u66FF\u3048",audioDescription:"\u97F3\u58F0\u89E3\u8AAC",signLanguage:"\u624B\u8A71\u52D5\u753B",settings:"\u8A2D\u5B9A",speed:"\u518D\u751F\u901F\u5EA6",pip:"\u30D4\u30AF\u30C1\u30E3\u30FC\u30A4\u30F3\u30D4\u30AF\u30C1\u30E3\u30FC",currentTime:"\u73FE\u5728\u306E\u6642\u9593",duration:"\u518D\u751F\u6642\u9593",progress:"\u9032\u884C\u72B6\u6CC1",seekForward:"{seconds}\u79D2\u9032\u3081\u308B",seekBackward:"{seconds}\u79D2\u623B\u3059",volumeUp:"\u97F3\u91CF\u3092\u4E0A\u3052\u308B",volumeDown:"\u97F3\u91CF\u3092\u4E0B\u3052\u308B",loading:"\u8AAD\u307F\u8FBC\u307F\u4E2D...",loadingChapters:"\u30C1\u30E3\u30D7\u30BF\u30FC\u8AAD\u307F\u8FBC\u307F\u4E2D...",error:"\u8AAD\u307F\u8FBC\u307F\u30A8\u30E9\u30FC",buffering:"\u30D0\u30C3\u30D5\u30A1\u30EA\u30F3\u30B0\u4E2D...",signLanguageVideo:"\u624B\u8A71\u52D5\u753B",noChapters:"\u30C1\u30E3\u30D7\u30BF\u30FC\u304C\u3042\u308A\u307E\u305B\u3093",noCaptions:"\u5B57\u5E55\u304C\u3042\u308A\u307E\u305B\u3093",auto:"\u81EA\u52D5",autoQuality:"\u81EA\u52D5\uFF08\u753B\u8CEA\u9078\u629E\u4E0D\u53EF\uFF09",noQuality:"\u753B\u8CEA\u9078\u629E\u4E0D\u53EF",signLanguageDragResize:"\u624B\u8A71\u52D5\u753B - \u30AD\u30FC\u30DC\u30FC\u30C9\u3067\u30C9\u30E9\u30C3\u30B0\u3059\u308B\u306B\u306FD\u30AD\u30FC\u3092\u3001\u30B5\u30A4\u30BA\u5909\u66F4\u3059\u308B\u306B\u306FR\u30AD\u30FC\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044",signLanguageDragActive:"\u624B\u8A71\u52D5\u753B - \u30C9\u30E9\u30C3\u30B0\u30E2\u30FC\u30C9\u304C\u6709\u52B9\u3067\u3059\u3002\u77E2\u5370\u30AD\u30FC\u3067\u79FB\u52D5\u3001Escape\u3067\u7D42\u4E86\u3057\u307E\u3059\u3002",signLanguageResizeActive:"\u624B\u8A71\u52D5\u753B - \u30B5\u30A4\u30BA\u5909\u66F4\u30E2\u30FC\u30C9\u304C\u6709\u52B9\u3067\u3059\u3002\u5DE6\u53F3\u306E\u77E2\u5370\u30AD\u30FC\u3067\u30B5\u30A4\u30BA\u5909\u66F4\u3001Escape\u3067\u7D42\u4E86\u3057\u307E\u3059\u3002",resizeHandle:"{direction}\u30B3\u30FC\u30CA\u30FC\u306E\u30B5\u30A4\u30BA\u5909\u66F4"},captions:{off:"\u30AA\u30D5",select:"\u5B57\u5E55\u3092\u9078\u629E",fontSize:"\u30D5\u30A9\u30F3\u30C8\u30B5\u30A4\u30BA",fontFamily:"\u30D5\u30A9\u30F3\u30C8",color:"\u30C6\u30AD\u30B9\u30C8\u306E\u8272",backgroundColor:"\u80CC\u666F\u8272",opacity:"\u4E0D\u900F\u660E\u5EA6"},fontSizes:{small:"\u5C0F",normal:"\u6A19\u6E96",large:"\u5927",xlarge:"\u7279\u5927"},fontFamilies:{sansSerif:"\u30B5\u30F3\u30BB\u30EA\u30D5",serif:"\u30BB\u30EA\u30D5",monospace:"\u7B49\u5E45"},styleLabels:{textColor:"\u30C6\u30AD\u30B9\u30C8\u306E\u8272",background:"\u80CC\u666F",font:"\u30D5\u30A9\u30F3\u30C8",fontSize:"\u30D5\u30A9\u30F3\u30C8\u30B5\u30A4\u30BA",opacity:"\u4E0D\u900F\u660E\u5EA6"},audioDescription:{enable:"\u97F3\u58F0\u89E3\u8AAC\u3092\u6709\u52B9\u306B\u3059\u308B",disable:"\u97F3\u58F0\u89E3\u8AAC\u3092\u7121\u52B9\u306B\u3059\u308B"},signLanguage:{show:"\u624B\u8A71\u52D5\u753B\u3092\u8868\u793A",hide:"\u624B\u8A71\u52D5\u753B\u3092\u975E\u8868\u793A"},transcript:{title:"\u6587\u5B57\u8D77\u3053\u3057",close:"\u6587\u5B57\u8D77\u3053\u3057\u3092\u9589\u3058\u308B",loading:"\u6587\u5B57\u8D77\u3053\u3057\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D...",noTranscript:"\u3053\u306E\u30D3\u30C7\u30AA\u306E\u6587\u5B57\u8D77\u3053\u3057\u306F\u3042\u308A\u307E\u305B\u3093\u3002",settings:"\u6587\u5B57\u8D77\u3053\u3057\u8A2D\u5B9A\u3002Enter\u30AD\u30FC\u3067\u30E1\u30CB\u30E5\u30FC\u3092\u958B\u304F\u3001\u307E\u305F\u306FD\u30AD\u30FC\u3067\u30C9\u30E9\u30C3\u30B0\u30E2\u30FC\u30C9\u3092\u6709\u52B9\u306B\u3059\u308B",keyboardDragMode:"\u77E2\u5370\u30AD\u30FC\u3067\u30AD\u30FC\u30DC\u30FC\u30C9\u30C9\u30E9\u30C3\u30B0\u30E2\u30FC\u30C9\u3092\u5207\u308A\u66FF\u3048\u3002\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\uFF1AD\u30AD\u30FC",keyboardDragActive:"\u2328\uFE0F \u30AD\u30FC\u30DC\u30FC\u30C9\u30C9\u30E9\u30C3\u30B0\u30E2\u30FC\u30C9\u6709\u52B9\uFF08\u77E2\u5370\u30AD\u30FC\u3067\u79FB\u52D5\u3001Shift+\u77E2\u5370\u30AD\u30FC\u3067\u5927\u304D\u304F\u79FB\u52D5\u3001D\u307E\u305F\u306FESC\u3067\u7D42\u4E86\uFF09",resizeWindow:"\u30A6\u30A3\u30F3\u30C9\u30A6\u306E\u30B5\u30A4\u30BA\u5909\u66F4",styleTranscript:"\u6587\u5B57\u8D77\u3053\u3057\u30B9\u30BF\u30A4\u30EB\u8A2D\u5B9A\u3092\u958B\u304F",closeMenu:"\u30E1\u30CB\u30E5\u30FC\u3092\u9589\u3058\u308B",styleTitle:"\u6587\u5B57\u8D77\u3053\u3057\u30B9\u30BF\u30A4\u30EB"},settings:{title:"\u8A2D\u5B9A",quality:"\u753B\u8CEA",speed:"\u901F\u5EA6",captions:"\u5B57\u5E55",language:"\u8A00\u8A9E",reset:"\u30EA\u30BB\u30C3\u30C8",close:"\u9589\u3058\u308B"},speeds:{normal:"\u901A\u5E38"},time:{display:"\u6642\u9593\u8868\u793A",durationPrefix:"\u518D\u751F\u6642\u9593: ",hour:"{count}\u6642\u9593",hours:"{count}\u6642\u9593",minute:"{count}\u5206",minutes:"{count}\u5206",second:"{count}\u79D2",seconds:"{count}\u79D2"}}};var K=class{constructor(){this.currentLanguage="en",this.translations=j}setLanguage(e){this.translations[e]?this.currentLanguage=e:(console.warn(`Language "${e}" not found, falling back to English`),this.currentLanguage="en")}getLanguage(){return this.currentLanguage}t(e,t={}){let i=e.split("."),s=this.translations[this.currentLanguage];for(let a of i)if(s&&typeof s=="object"&&a in s)s=s[a];else{s=this.translations.en;for(let r of i)if(s&&typeof s=="object"&&r in s)s=s[r];else return e;break}return typeof s=="string"&&Object.entries(t).forEach(([a,r])=>{s=s.replace(new RegExp(`{${a}}`,"g"),r)}),s}addTranslation(e,t){this.translations[e]||(this.translations[e]={}),Object.assign(this.translations[e],t)}},p=new K;var D={formatTime(h,e=!1){if(!isFinite(h)||h<0)return e?"00:00:00":"00:00";let t=Math.floor(h/3600),i=Math.floor(h%3600/60),s=Math.floor(h%60),a=r=>String(r).padStart(2,"0");return t>0||e?`${a(t)}:${a(i)}:${a(s)}`:`${a(i)}:${a(s)}`},parseTime(h){let e=h.split(":").map(t=>parseInt(t,10));return e.length===3?e[0]*3600+e[1]*60+e[2]:e.length===2?e[0]*60+e[1]:e.length===1?e[0]:0},formatDuration(h){if(!isFinite(h)||h<0)return p.t("time.seconds",{count:0});let e=Math.floor(h/3600),t=Math.floor(h%3600/60),i=Math.floor(h%60),s=[];if(e>0){let a=e===1?"time.hour":"time.hours";s.push(p.t(a,{count:e}))}if(t>0){let a=t===1?"time.minute":"time.minutes";s.push(p.t(a,{count:t}))}if(i>0||s.length===0){let a=i===1?"time.second":"time.seconds";s.push(p.t(a,{count:i}))}return s.join(", ")},formatPercentage(h,e){return e===0?0:Math.round(h/e*100)}};var oe={play:'<path d="M8 5v14l11-7z"/>',pause:'<path d="M6 4h4v16H6V4zm8 0h4v16h-4V4z"/>',stop:'<rect x="6" y="6" width="12" height="12"/>',rewind:'<path d="M11 18V6l-8.5 6 8.5 6zm.5-6l8.5 6V6l-8.5 6z"/>',forward:'<path d="M4 18l8.5-6L4 6v12zm9-12v12l8.5-6L13 6z"/>',skipPrevious:'<path d="M6 6h2v12H6V6zm3 6l8.5 6V6L9 12z"/>',skipNext:'<path d="M16 6h2v12h-2V6zM6 6l8.5 6L6 18V6z"/>',restart:'<path d="M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z"/>',volumeHigh:'<path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/>',volumeMedium:'<path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"/>',volumeLow:'<path d="M7 9v6h4l5 5V4l-5 5H7z"/>',volumeMuted:'<path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"/>',fullscreen:'<path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/>',fullscreenExit:'<path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"/>',settings:'<path d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94L14.4 2.81c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>',captions:'<path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z"/>',captionsOff:'<path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z"/><path d="M0 0h24v24H0z" fill="none"/>',pip:'<path d="M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98V5c0-1.1-.9-2-2-2zm0 16.01H3V4.98h18v14.03z"/>',speed:'<path d="M20.38 8.57l-1.23 1.85a8 8 0 0 1-.22 7.58H5.07A8 8 0 0 1 15.58 6.85l1.85-1.23A10 10 0 0 0 3.35 19a2 2 0 0 0 1.72 1h13.85a2 2 0 0 0 1.74-1 10 10 0 0 0-.27-10.44z"/><path d="M10.59 15.41a2 2 0 0 0 2.83 0l5.66-8.49-8.49 5.66a2 2 0 0 0 0 2.83z"/>',close:'<path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>',check:'<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>',arrowUp:'<path d="M7 14l5-5 5 5z"/>',arrowDown:'<path d="M7 10l5 5 5-5z"/>',arrowLeft:'<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>',arrowRight:'<path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/>',loading:'<path d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z"/>',error:'<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>',download:'<path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/>',link:'<path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/>',playlist:'<path d="M15 6H3v2h12V6zm0 4H3v2h12v-2zM3 16h8v-2H3v2zM17 6v8.18c-.31-.11-.65-.18-1-.18-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3V8h3V6h-5z"/>',language:'<path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zm6.93 6h-2.95c-.32-1.25-.78-2.45-1.38-3.56 1.84.63 3.37 1.91 4.33 3.56zM12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2.76 1.91-3.96zM4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-.14 2 0 .68.06 1.34.14 2H4.26zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56-1.84-.63-3.37-1.9-4.33-3.56zm2.95-8H5.08c.96-1.66 2.49-2.93 4.33-3.56C8.81 5.55 8.35 6.75 8.03 8zM12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96zM14.34 14H9.66c-.09-.66-.16-1.32-.16-2 0-.68.07-1.35.16-2h4.68c.09.65.16 1.32.16 2 0 .68-.07 1.34-.16 2zm.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95c-.96 1.65-2.49 2.93-4.33 3.56zM16.36 14c.08-.66.14-1.32.14-2 0-.68-.06-1.34-.14-2h3.38c.16.64.26 1.31.26 2s-.1 1.36-.26 2h-3.38z"/>',hd:'<path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-8 12H9.5v-2h-2v2H6V9h1.5v2.5h2V9H11v6zm7-1c0 .55-.45 1-1 1h-.75v1.5h-1.5V15H14c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v4zm-3.5-.5h2v-3h-2v3z"/>',transcript:'<path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"/>',audioDescription:'<rect x="2" y="5" width="20" height="14" rx="2" fill="none" stroke="currentColor" stroke-width="2"/><text x="12" y="16" font-family="Arial, sans-serif" font-size="10" font-weight="bold" text-anchor="middle" fill="currentColor">AD</text>',audioDescriptionOn:'<rect x="2" y="5" width="20" height="14" rx="2" fill="#1a1a1a" stroke="#1a1a1a" stroke-width="2"/><text x="12" y="16" font-family="Arial, sans-serif" font-size="10" font-weight="bold" text-anchor="middle" fill="#ffffff">AD</text>',signLanguage:'<g transform="scale(1.5)"><path d="M16 11.3c-.1-.9-4.8 1.3-5.4 1.1-2.6-1 5.8-1.3 5.1-2.9s-5.1 1.5-6 1.4C6.5 9.4 16.5 9.1 13.5 8c-1.9-.6-8.8 2.9-6.8.4.7-.6.7-1.9-.7-1.7-9.7 7.2-.7 12.2 8.8 7 0-1.3-3.5.4-4.1.4-2.6 0 5.6-2 5.4-3ZM3.9 7.8c3.2-4.2 3.7 1.2 6 .1s.2-.2.2-.3c.7-2.7 2.5-7.5-1.5-1.3-1.6 0 1.1-4 1-4.6C8.9-1 7.3 4.4 7.2 4.9c-1.6.7-.9-1.4-.7-1.5 3-6-.6-3.1-.9.4-2.5 1.8 0-2.8 0-3.5C2.8-.9 4 9.4 1.1 4.9S.1 4.6 0 5c-.4 2.7 2.6 7.2 3.9 2.8Z"/></g>',signLanguageOn:'<g transform="scale(1.5)"><path d="M16 11.3c-.1-.9-4.8 1.3-5.4 1.1-2.6-1 5.8-1.3 5.1-2.9s-5.1 1.5-6 1.4C6.5 9.4 16.5 9.1 13.5 8c-1.9-.6-8.8 2.9-6.8.4.7-.6.7-1.9-.7-1.7-9.7 7.2-.7 12.2 8.8 7 0-1.3-3.5.4-4.1.4-2.6 0 5.6-2 5.4-3ZM3.9 7.8c3.2-4.2 3.7 1.2 6 .1s.2-.2.2-.3c.7-2.7 2.5-7.5-1.5-1.3-1.6 0 1.1-4 1-4.6C8.9-1 7.3 4.4 7.2 4.9c-1.6.7-.9-1.4-.7-1.5 3-6-.6-3.1-.9.4-2.5 1.8 0-2.8 0-3.5C2.8-.9 4 9.4 1.1 4.9S.1 4.6 0 5c-.4 2.7 2.6 7.2 3.9 2.8Z"/></g>',speaker:'<path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"/>',music:'<path d="M12 3v9.28c-.47-.17-.97-.28-1.5-.28C8.01 12 6 14.01 6 16.5S8.01 21 10.5 21c2.31 0 4.2-1.75 4.45-4H15V6h4V3h-7zm-1.5 16c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/>',moreVertical:'<path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/>',moreHorizontal:'<path d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/>',move:'<path d="M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z"/>',resize:'<path d="M21.71 11.29l-9-9c-.39-.39-1.02-.39-1.41 0l-9 9c-.39.39-.39 1.02 0 1.41l9 9c.39.39 1.02.39 1.41 0l9-9c.39-.38.39-1.01 0-1.41zM14 14.5V12h-4v2.5L7 11l3-3.5V10h4V7.5l3 3.5-3 3.5z"/>'},le=h=>`<svg viewBox="0 0 24 24" fill="currentColor">${h}</svg>`,G=Object.fromEntries(Object.entries(oe).map(([h,e])=>[h,le(e)]));function ce(h){return G[h]||G.play}function b(h,e=""){let t=document.createElement("span");return t.className=`vidply-icon ${e}`.trim(),t.innerHTML=ce(h),t.setAttribute("aria-hidden","true"),t}function _(){let h=document.createElementNS("http://www.w3.org/2000/svg","svg");h.setAttribute("class","vidply-play-overlay"),h.setAttribute("viewBox","0 0 80 80"),h.setAttribute("width","80"),h.setAttribute("height","80"),h.setAttribute("aria-hidden","true"),h.setAttribute("role","presentation"),h.style.cursor="pointer";let e=document.createElementNS("http://www.w3.org/2000/svg","defs"),t=`vidply-play-shadow-${Math.random().toString(36).substr(2,9)}`,i=document.createElementNS("http://www.w3.org/2000/svg","filter");i.setAttribute("id",t),i.setAttribute("x","-50%"),i.setAttribute("y","-50%"),i.setAttribute("width","200%"),i.setAttribute("height","200%");let s=document.createElementNS("http://www.w3.org/2000/svg","feGaussianBlur");s.setAttribute("in","SourceAlpha"),s.setAttribute("stdDeviation","3");let a=document.createElementNS("http://www.w3.org/2000/svg","feOffset");a.setAttribute("dx","0"),a.setAttribute("dy","2"),a.setAttribute("result","offsetblur");let r=document.createElementNS("http://www.w3.org/2000/svg","feComponentTransfer"),o=document.createElementNS("http://www.w3.org/2000/svg","feFuncA");o.setAttribute("type","linear"),o.setAttribute("slope","0.3"),r.appendChild(o);let n=document.createElementNS("http://www.w3.org/2000/svg","feMerge"),c=document.createElementNS("http://www.w3.org/2000/svg","feMergeNode"),m=document.createElementNS("http://www.w3.org/2000/svg","feMergeNode");m.setAttribute("in","SourceGraphic"),n.appendChild(c),n.appendChild(m),i.appendChild(s),i.appendChild(a),i.appendChild(r),i.appendChild(n),e.appendChild(i),h.appendChild(e);let y=document.createElementNS("http://www.w3.org/2000/svg","circle");y.setAttribute("cx","40"),y.setAttribute("cy","40"),y.setAttribute("r","40"),y.setAttribute("fill","rgba(255, 255, 255, 0.95)"),y.setAttribute("filter",`url(#${t})`),y.setAttribute("class","vidply-play-overlay-bg"),h.appendChild(y);let g=document.createElementNS("http://www.w3.org/2000/svg","polygon");return g.setAttribute("points","32,28 32,52 54,40"),g.setAttribute("fill","#0a406e"),g.setAttribute("class","vidply-play-overlay-icon"),h.appendChild(g),h}var N=class{constructor(e){this.player=e,this.element=null,this.controls={},this.hideTimeout=null,this.isDraggingProgress=!1,this.isDraggingVolume=!1,this.init()}init(){this.createElement(),this.createControls(),this.attachEvents(),this.setupAutoHide()}isMobile(){return window.innerWidth<640}positionMenu(e,t){this.isMobile()||setTimeout(()=>{let s=t.getBoundingClientRect(),a=e.getBoundingClientRect(),r=window.innerWidth,o=window.innerHeight,n=s.top,c=o-s.bottom;n<a.height+20&&c>n&&(e.style.bottom="auto",e.style.top="calc(100% + 8px)",e.classList.add("vidply-menu-below"));let m=s.left+s.width/2-a.width/2;m<10?(e.style.right="auto",e.style.left="0",e.style.transform="translateX(0)"):m+a.width>r-10&&(e.style.left="auto",e.style.right="0",e.style.transform="translateX(0)")},0)}attachMenuCloseHandler(e,t,i=!1){this.positionMenu(e,t),setTimeout(()=>{let s=r=>{i&&e.contains(r.target)||!e.contains(r.target)&&!t.contains(r.target)&&(e.remove(),document.removeEventListener("click",s),document.removeEventListener("keydown",a))},a=r=>{r.key==="Escape"&&(e.remove(),document.removeEventListener("click",s),document.removeEventListener("keydown",a),t.focus())};document.addEventListener("click",s),document.addEventListener("keydown",a)},100)}attachMenuKeyboardNavigation(e){let t=Array.from(e.querySelectorAll(`.${this.player.options.classPrefix}-menu-item`));if(t.length===0)return;let i=s=>{let a=t.indexOf(document.activeElement);switch(s.key){case"ArrowDown":s.preventDefault();let r=(a+1)%t.length;t[r].focus();break;case"ArrowUp":s.preventDefault();let o=(a-1+t.length)%t.length;t[o].focus();break;case"Home":s.preventDefault(),t[0].focus();break;case"End":s.preventDefault(),t[t.length-1].focus();break;case"Enter":case" ":s.preventDefault(),document.activeElement&&t.includes(document.activeElement)&&document.activeElement.click();break}};e.addEventListener("keydown",i)}createElement(){this.element=l.createElement("div",{className:`${this.player.options.classPrefix}-controls`,attributes:{role:"region","aria-label":p.t("player.label")+" controls"}})}createControls(){this.player.options.progressBar&&this.createProgressBar();let e=l.createElement("div",{className:`${this.player.options.classPrefix}-controls-buttons`}),t=l.createElement("div",{className:`${this.player.options.classPrefix}-controls-left`});this.player.playlistManager&&t.appendChild(this.createPreviousButton()),this.player.options.playPauseButton&&t.appendChild(this.createPlayPauseButton()),t.appendChild(this.createRestartButton()),this.player.playlistManager&&t.appendChild(this.createNextButton()),this.player.playlistManager||t.appendChild(this.createRewindButton()),this.player.playlistManager||t.appendChild(this.createForwardButton()),this.player.options.volumeControl&&t.appendChild(this.createVolumeControl()),(this.player.options.currentTime||this.player.options.duration)&&t.appendChild(this.createTimeDisplay()),this.rightButtons=l.createElement("div",{className:`${this.player.options.classPrefix}-controls-right`});let i=this.hasChapterTracks(),s=this.hasCaptionTracks(),a=this.hasQualityLevels(),r=this.hasAudioDescription();this.player.options.chaptersButton&&i&&this.rightButtons.appendChild(this.createChaptersButton()),this.player.options.qualityButton&&a&&this.rightButtons.appendChild(this.createQualityButton()),this.player.options.captionStyleButton&&s&&this.rightButtons.appendChild(this.createCaptionStyleButton()),this.player.options.speedButton&&this.rightButtons.appendChild(this.createSpeedButton()),this.player.options.captionsButton&&s&&this.rightButtons.appendChild(this.createCaptionsButton()),this.player.options.transcriptButton&&s&&this.rightButtons.appendChild(this.createTranscriptButton()),this.player.options.audioDescriptionButton&&r&&this.rightButtons.appendChild(this.createAudioDescriptionButton());let o=this.hasSignLanguage();this.player.options.signLanguageButton&&o&&this.rightButtons.appendChild(this.createSignLanguageButton()),this.player.options.pipButton&&"pictureInPictureEnabled"in document&&this.rightButtons.appendChild(this.createPipButton()),this.player.options.fullscreenButton&&this.rightButtons.appendChild(this.createFullscreenButton()),e.appendChild(t),e.appendChild(this.rightButtons),this.element.appendChild(e)}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(){return this.player.signLanguageSrc&&this.player.signLanguageSrc.length>0}createProgressBar(){let e=l.createElement("div",{className:`${this.player.options.classPrefix}-progress-container`,attributes:{role:"slider","aria-label":p.t("player.progress"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":"0",tabindex:"0"}});this.controls.buffered=l.createElement("div",{className:`${this.player.options.classPrefix}-progress-buffered`}),this.controls.played=l.createElement("div",{className:`${this.player.options.classPrefix}-progress-played`}),this.controls.progressHandle=l.createElement("div",{className:`${this.player.options.classPrefix}-progress-handle`}),this.controls.progressTooltip=l.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.element.appendChild(e),this.setupProgressBarEvents()}setupProgressBarEvents(){let e=this.controls.progress,t=i=>{let s=e.getBoundingClientRect(),a=Math.max(0,Math.min(1,(i-s.left)/s.width)),r=a*this.player.state.duration;return{percent:a,time:r}};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=D.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=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-play-pause`,attributes:{type:"button","aria-label":p.t("player.play")}});return e.appendChild(b("play")),e.addEventListener("click",()=>{this.player.toggle()}),this.controls.playPause=e,e}createRestartButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-restart`,attributes:{type:"button","aria-label":p.t("player.restart")}});return e.appendChild(b("restart")),e.addEventListener("click",()=>{this.player.seek(0),this.player.play()}),e}createPreviousButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-previous`,attributes:{type:"button","aria-label":p.t("player.previous")}});e.appendChild(b("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=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-next`,attributes:{type:"button","aria-label":p.t("player.next")}});e.appendChild(b("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}createRewindButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-rewind`,attributes:{type:"button","aria-label":p.t("player.rewindSeconds",{seconds:15})}});return e.appendChild(b("rewind")),e.addEventListener("click",()=>{this.player.seekBackward(15)}),e}createForwardButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-forward`,attributes:{type:"button","aria-label":p.t("player.forwardSeconds",{seconds:15})}});return e.appendChild(b("forward")),e.addEventListener("click",()=>{this.player.seekForward(15)}),e}createVolumeControl(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":p.t("player.volume"),"aria-haspopup":"true"}});return e.appendChild(b("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();return}let i=l.createElement("div",{className:`${this.player.options.classPrefix}-volume-menu ${this.player.options.classPrefix}-menu`}),s=l.createElement("div",{className:`${this.player.options.classPrefix}-volume-slider`,attributes:{role:"slider","aria-label":p.t("player.volume"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":String(Math.round(this.player.state.volume*100)),tabindex:"0"}}),a=l.createElement("div",{className:`${this.player.options.classPrefix}-volume-track`}),r=l.createElement("div",{className:`${this.player.options.classPrefix}-volume-fill`}),o=l.createElement("div",{className:`${this.player.options.classPrefix}-volume-handle`});a.appendChild(r),r.appendChild(o),s.appendChild(a),i.appendChild(s);let n=c=>{let m=a.getBoundingClientRect(),y=Math.max(0,Math.min(1,1-(c-m.top)/m.height));this.player.setVolume(y)};s.addEventListener("mousedown",c=>{c.stopPropagation(),this.isDraggingVolume=!0,n(c.clientY)}),document.addEventListener("mousemove",c=>{this.isDraggingVolume&&n(c.clientY)}),document.addEventListener("mouseup",()=>{this.isDraggingVolume=!1}),s.addEventListener("keydown",c=>{c.key==="ArrowUp"?(c.preventDefault(),this.player.setVolume(Math.min(1,this.player.state.volume+.1))):c.key==="ArrowDown"&&(c.preventDefault(),this.player.setVolume(Math.max(0,this.player.state.volume-.1)))}),i.addEventListener("click",c=>{c.stopPropagation()}),e.appendChild(i),this.controls.volumeSlider=s,this.controls.volumeFill=r,this.attachMenuCloseHandler(i,e,!0)}createTimeDisplay(){let e=l.createElement("div",{className:`${this.player.options.classPrefix}-time`,attributes:{role:"group","aria-label":p.t("time.display")}});this.controls.currentTimeDisplay=l.createElement("span",{className:`${this.player.options.classPrefix}-current-time`,attributes:{"aria-label":p.t("time.seconds",{count:0})}});let t=l.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}});this.controls.currentTimeDisplay.appendChild(t),this.controls.currentTimeVisual=t;let i=l.createElement("span",{textContent:" / ",attributes:{"aria-hidden":"true"}});this.controls.durationDisplay=l.createElement("span",{className:`${this.player.options.classPrefix}-duration`,attributes:{"aria-label":p.t("time.durationPrefix")+p.t("time.seconds",{count:0})}});let s=l.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}});return this.controls.durationDisplay.appendChild(s),this.controls.durationVisual=s,e.appendChild(this.controls.currentTimeDisplay),e.appendChild(i),e.appendChild(this.controls.durationDisplay),e}createChaptersButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-chapters`,attributes:{type:"button","aria-label":p.t("player.chapters"),"aria-haspopup":"menu"}});return e.appendChild(b("playlist")),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();return}let i=l.createElement("div",{className:`${this.player.options.classPrefix}-chapters-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":p.t("player.chapters")}}),s=Array.from(this.player.element.textTracks).filter(a=>a.kind==="chapters");if(s.length===0){let a=l.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:p.t("player.noChapters"),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=l.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:p.t("player.loadingChapters"),style:{opacity:"0.5",cursor:"default"}});i.appendChild(r);let o=()=>{i.remove(),this.showChaptersMenu(e)};a.addEventListener("load",o,{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 o=0;o<r.length;o++){let n=r[o],c=l.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),m=l.createElement("span",{className:`${this.player.options.classPrefix}-chapter-time`,textContent:D.formatTime(n.startTime)}),y=l.createElement("span",{className:`${this.player.options.classPrefix}-chapter-title`,textContent:n.text});c.appendChild(m),c.appendChild(document.createTextNode(" ")),c.appendChild(y),c.addEventListener("click",()=>{this.player.seek(n.startTime),i.remove()}),i.appendChild(c)}this.attachMenuKeyboardNavigation(i),setTimeout(()=>{let o=i.querySelector(`.${this.player.options.classPrefix}-menu-item`);o&&o.focus()},0)}}e.appendChild(i),this.attachMenuCloseHandler(i,e)}createQualityButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-quality`,attributes:{type:"button","aria-label":p.t("player.quality"),"aria-haspopup":"menu"}});e.appendChild(b("hd"));let t=l.createElement("span",{className:`${this.player.options.classPrefix}-quality-text`,textContent:""});return e.appendChild(t),e.addEventListener("click",()=>{this.showQualityMenu(e)}),this.controls.quality=e,this.controls.qualityText=t,setTimeout(()=>this.updateQualityIndicator(),500),e}showQualityMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-quality-menu`);if(t){t.remove();return}let i=l.createElement("div",{className:`${this.player.options.classPrefix}-quality-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":p.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 o=l.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:p.t("player.autoQuality"),style:{opacity:"0.5",cursor:"default"}});i.appendChild(o)}else{let o=null;if(r){let n=l.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:p.t("player.auto"),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});this.player.renderer.hls&&this.player.renderer.hls.currentLevel===-1&&(n.classList.add(`${this.player.options.classPrefix}-menu-item-active`),n.appendChild(b("check")),o=n),n.addEventListener("click",()=>{this.player.renderer.switchQuality&&this.player.renderer.switchQuality(-1),i.remove()}),i.appendChild(n)}s.forEach(n=>{let c=l.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:n.name||`${n.height}p`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}});n.index===a&&(c.classList.add(`${this.player.options.classPrefix}-menu-item-active`),c.appendChild(b("check")),o=c),c.addEventListener("click",()=>{this.player.renderer.switchQuality&&this.player.renderer.switchQuality(n.index),i.remove()}),i.appendChild(c)}),this.attachMenuKeyboardNavigation(i),setTimeout(()=>{let n=o||i.querySelector(`.${this.player.options.classPrefix}-menu-item`);n&&n.focus()},0)}}else{let s=l.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:p.t("player.noQuality"),style:{opacity:"0.5",cursor:"default"}});i.appendChild(s)}e.appendChild(i),this.attachMenuCloseHandler(i,e)}createCaptionStyleButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-caption-style`,attributes:{type:"button","aria-label":p.t("player.captionStyling"),"aria-haspopup":"menu",title:p.t("player.captionStyling")}}),t=l.createElement("span",{textContent:"Aa",style:{fontSize:"14px",fontWeight:"bold"}});return e.appendChild(t),e.addEventListener("click",()=>{this.showCaptionStyleMenu(e)}),this.controls.captionStyle=e,e}showCaptionStyleMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-caption-style-menu`);if(t){t.remove();return}let i=l.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":p.t("player.captionStyling")}});if(i.addEventListener("click",c=>{c.stopPropagation()}),!this.player.captionManager||this.player.captionManager.tracks.length===0){let c=l.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:p.t("player.noCaptions"),style:{opacity:"0.5",cursor:"default",padding:"12px 16px"}});i.appendChild(c),e.appendChild(i),this.attachMenuCloseHandler(i,e,!0);return}let s=this.createStyleControl(p.t("styleLabels.fontSize"),"captionsFontSize",[{label:p.t("fontSizes.small"),value:"87.5%"},{label:p.t("fontSizes.normal"),value:"100%"},{label:p.t("fontSizes.large"),value:"125%"},{label:p.t("fontSizes.xlarge"),value:"150%"}]);i.appendChild(s);let a=this.createStyleControl(p.t("styleLabels.font"),"captionsFontFamily",[{label:p.t("fontFamilies.sansSerif"),value:"sans-serif"},{label:p.t("fontFamilies.serif"),value:"serif"},{label:p.t("fontFamilies.monospace"),value:"monospace"}]);i.appendChild(a);let r=this.createColorControl(p.t("styleLabels.textColor"),"captionsColor");i.appendChild(r);let o=this.createColorControl(p.t("styleLabels.background"),"captionsBackgroundColor");i.appendChild(o);let n=this.createOpacityControl(p.t("styleLabels.opacity"),"captionsOpacity");i.appendChild(n),i.style.minWidth="220px",e.appendChild(i),this.attachMenuCloseHandler(i,e,!0),setTimeout(()=>{let c=i.querySelector("select");c&&c.focus()},0)}createStyleControl(e,t,i){let s=l.createElement("div",{className:`${this.player.options.classPrefix}-style-group`}),a=l.createElement("label",{textContent:e,style:{display:"block",fontSize:"12px",marginBottom:"4px",color:"rgba(255,255,255,0.7)"}});s.appendChild(a);let r=l.createElement("select",{className:`${this.player.options.classPrefix}-style-select`,style:{width:"100%",padding:"6px",background:"var(--vidply-white)",border:"1px solid var(--vidply-white-10)",borderRadius:"4px",color:"var(--vidply-black)",fontSize:"13px"}}),o=this.player.options[t];return i.forEach(n=>{let c=l.createElement("option",{textContent:n.label,attributes:{value:n.value}});n.value===o&&(c.selected=!0),r.appendChild(c)}),r.addEventListener("mousedown",n=>{n.stopPropagation()}),r.addEventListener("click",n=>{n.stopPropagation()}),r.addEventListener("change",n=>{n.stopPropagation(),this.player.options[t]=n.target.value,this.player.captionManager&&this.player.captionManager.setCaptionStyle(t.replace("captions","").charAt(0).toLowerCase()+t.replace("captions","").slice(1),n.target.value)}),s.appendChild(r),s}createColorControl(e,t){let i=l.createElement("div",{className:`${this.player.options.classPrefix}-style-group`}),s=l.createElement("label",{textContent:e,style:{display:"block",fontSize:"12px",marginBottom:"4px",color:"rgba(255,255,255,0.7)"}});i.appendChild(s);let a=l.createElement("input",{attributes:{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 a.addEventListener("mousedown",r=>{r.stopPropagation()}),a.addEventListener("click",r=>{r.stopPropagation()}),a.addEventListener("change",r=>{r.stopPropagation(),this.player.options[t]=r.target.value,this.player.captionManager&&this.player.captionManager.setCaptionStyle(t.replace("captions","").charAt(0).toLowerCase()+t.replace("captions","").slice(1),r.target.value)}),i.appendChild(a),i}createOpacityControl(e,t){let i=l.createElement("div",{className:`${this.player.options.classPrefix}-style-group`}),s=l.createElement("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"4px"}}),a=l.createElement("label",{textContent:e,style:{fontSize:"12px",color:"rgba(255,255,255,0.7)"}}),r=l.createElement("span",{textContent:Math.round(this.player.options[t]*100)+"%",style:{fontSize:"12px",color:"rgba(255,255,255,0.7)"}});s.appendChild(a),s.appendChild(r),i.appendChild(s);let o=l.createElement("input",{attributes:{type:"range",min:"0",max:"1",step:"0.1",value:String(this.player.options[t])},style:{width:"100%",cursor:"pointer"}});return o.addEventListener("mousedown",n=>{n.stopPropagation()}),o.addEventListener("click",n=>{n.stopPropagation()}),o.addEventListener("input",n=>{n.stopPropagation();let c=parseFloat(n.target.value);r.textContent=Math.round(c*100)+"%",this.player.options[t]=c,this.player.captionManager&&this.player.captionManager.setCaptionStyle(t.replace("captions","").charAt(0).toLowerCase()+t.replace("captions","").slice(1),c)}),i.appendChild(o),i}createSpeedButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-speed`,attributes:{type:"button","aria-label":p.t("player.speed"),"aria-haspopup":"menu"}});e.appendChild(b("speed"));let t=l.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?p.t("speeds.normal"):`${e.toLocaleString(p.getLanguage(),{minimumFractionDigits:0,maximumFractionDigits:2})}\xD7`}showSpeedMenu(e){let t=document.querySelector(`.${this.player.options.classPrefix}-speed-menu`);if(t){t.remove();return}let i=l.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 o=l.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&&(o.classList.add(`${this.player.options.classPrefix}-menu-item-active`),o.appendChild(b("check")),a=o),o.addEventListener("click",()=>{this.player.setPlaybackSpeed(r),i.remove()}),i.appendChild(o)}),e.appendChild(i),this.attachMenuKeyboardNavigation(i),this.attachMenuCloseHandler(i,e),setTimeout(()=>{let r=a||i.querySelector(`.${this.player.options.classPrefix}-menu-item`);r&&r.focus()},0)}createCaptionsButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-captions-button`,attributes:{type:"button","aria-label":p.t("player.captions"),"aria-pressed":"false","aria-haspopup":"menu"}});return e.appendChild(b("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();return}let i=l.createElement("div",{className:`${this.player.options.classPrefix}-captions-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":p.t("captions.select")}});if(!this.player.captionManager||this.player.captionManager.tracks.length===0){let o=l.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:p.t("player.noCaptions"),style:{opacity:"0.5",cursor:"default"}});i.appendChild(o),e.appendChild(i),this.attachMenuCloseHandler(i,e);return}let s=null,a=l.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:p.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(b("check")),s=a),a.addEventListener("click",()=>{this.player.disableCaptions(),this.updateCaptionsButton(),i.remove()}),i.appendChild(a),this.player.captionManager.getAvailableTracks().forEach(o=>{let n=l.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:o.label,attributes:{type:"button",role:"menuitem",lang:o.language,tabindex:"-1"}});this.player.state.captionsEnabled&&this.player.captionManager.currentTrack===this.player.captionManager.tracks[o.index]&&(n.classList.add(`${this.player.options.classPrefix}-menu-item-active`),n.appendChild(b("check")),s=n),n.addEventListener("click",()=>{this.player.captionManager.switchTrack(o.index),this.updateCaptionsButton(),i.remove()}),i.appendChild(n)}),e.appendChild(i),this.attachMenuKeyboardNavigation(i),this.attachMenuCloseHandler(i,e),setTimeout(()=>{let o=s||i.querySelector(`.${this.player.options.classPrefix}-menu-item`);o&&o.focus()},0)}updateCaptionsButton(){if(!this.controls.captions)return;let e=this.controls.captions.querySelector(".vidply-icon"),t=this.player.state.captionsEnabled;e.innerHTML=t?b("captions").innerHTML:b("captionsOff").innerHTML,this.controls.captions.setAttribute("aria-pressed",t?"true":"false")}createTranscriptButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-transcript`,attributes:{type:"button","aria-label":p.t("player.transcript"),"aria-pressed":"false"}});return e.appendChild(b("transcript")),e.addEventListener("click",()=>{this.player.transcriptManager&&(this.player.transcriptManager.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-pressed",e?"true":"false")}createAudioDescriptionButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-audio-description`,attributes:{type:"button","aria-label":p.t("player.audioDescription"),"aria-pressed":"false",title:p.t("player.audioDescription")}});return e.appendChild(b("audioDescription")),e.addEventListener("click",async()=>{await this.player.toggleAudioDescription(),this.updateAudioDescriptionButton()}),this.controls.audioDescription=e,e}updateAudioDescriptionButton(){if(!this.controls.audioDescription)return;let e=this.controls.audioDescription.querySelector(".vidply-icon"),t=this.player.state.audioDescriptionEnabled;e.innerHTML=t?b("audioDescriptionOn").innerHTML:b("audioDescription").innerHTML,this.controls.audioDescription.setAttribute("aria-pressed",t?"true":"false"),this.controls.audioDescription.setAttribute("aria-label",t?p.t("audioDescription.disable"):p.t("audioDescription.enable"))}createSignLanguageButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-sign-language`,attributes:{type:"button","aria-label":p.t("player.signLanguage"),"aria-pressed":"false",title:p.t("player.signLanguage")}});return e.appendChild(b("signLanguage")),e.addEventListener("click",()=>{this.player.toggleSignLanguage(),this.updateSignLanguageButton()}),this.controls.signLanguage=e,e}updateSignLanguageButton(){if(!this.controls.signLanguage)return;let e=this.controls.signLanguage.querySelector(".vidply-icon"),t=this.player.state.signLanguageEnabled;e.innerHTML=t?b("signLanguageOn").innerHTML:b("signLanguage").innerHTML,this.controls.signLanguage.setAttribute("aria-pressed",t?"true":"false"),this.controls.signLanguage.setAttribute("aria-label",t?p.t("signLanguage.hide"):p.t("signLanguage.show"))}createSettingsButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-settings`,attributes:{type:"button","aria-label":p.t("player.settings")}});return e.appendChild(b("settings")),e.addEventListener("click",()=>{this.player.showSettings()}),e}createPipButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-pip`,attributes:{type:"button","aria-label":p.t("player.pip")}});return e.appendChild(b("pip")),e.addEventListener("click",()=>{this.player.togglePiP()}),e}createFullscreenButton(){let e=l.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-fullscreen`,attributes:{type:"button","aria-label":p.t("player.fullscreen")}});return e.appendChild(b("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?b("pause").innerHTML:b("play").innerHTML,this.controls.playPause.setAttribute("aria-label",t?p.t("player.pause"):p.t("player.play"))}updateProgress(){if(!this.controls.played)return;let e=this.player.state.currentTime/this.player.state.duration*100;if(this.controls.played.style.width=`${e}%`,this.controls.progress.setAttribute("aria-valuenow",String(Math.round(e))),this.controls.currentTimeVisual){let t=this.player.state.currentTime;this.controls.currentTimeVisual.textContent=D.formatTime(t),this.controls.currentTimeDisplay.setAttribute("aria-label",D.formatDuration(t))}}updateDuration(){if(this.controls.durationVisual){let e=this.player.state.duration;this.controls.durationVisual.textContent=D.formatTime(e),this.controls.durationDisplay.setAttribute("aria-label",p.t("time.durationPrefix")+D.formatDuration(e))}}updateVolumeDisplay(){let e=this.player.state.volume*100;if(this.controls.volumeFill&&(this.controls.volumeFill.style.height=`${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=b(i).innerHTML,this.controls.mute.setAttribute("aria-label",this.player.state.muted?p.t("player.unmute"):p.t("player.mute"))}}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?b("fullscreenExit").innerHTML:b("fullscreen").innerHTML,this.controls.fullscreen.setAttribute("aria-label",t?p.t("player.exitFullscreen"):p.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=()=>{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&&(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},this.player.options.hideControlsDelay))};this.player.container.addEventListener("mousemove",e),this.player.container.addEventListener("touchstart",e),this.player.container.addEventListener("click",e),this.element.addEventListener("focusin",e),this.player.on("pause",()=>{e(),clearTimeout(this.hideTimeout)}),this.player.on("play",()=>{e()}),e()}show(){this.element.style.display=""}hide(){this.element.style.display="none"}destroy(){this.hideTimeout&&clearTimeout(this.hideTimeout),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}};var A=class{constructor(e="vidply"){this.namespace=e,this.storage=this.isStorageAvailable()?localStorage:null}isStorageAvailable(){try{let e="__storage_test__";return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch{return!1}}getKey(e){return`${this.namespace}_${e}`}set(e,t){if(!this.storage)return!1;try{let i=this.getKey(e);return this.storage.setItem(i,JSON.stringify(t)),!0}catch(i){return console.warn("Failed to save to localStorage:",i),!1}}get(e,t=null){if(!this.storage)return t;try{let i=this.getKey(e),s=this.storage.getItem(i);return s?JSON.parse(s):t}catch(i){return console.warn("Failed to read from localStorage:",i),t}}remove(e){if(!this.storage)return!1;try{let t=this.getKey(e);return this.storage.removeItem(t),!0}catch(t){return console.warn("Failed to remove from localStorage:",t),!1}}clear(){if(!this.storage)return!1;try{return Object.keys(this.storage).forEach(t=>{t.startsWith(this.namespace)&&this.storage.removeItem(t)}),!0}catch(e){return console.warn("Failed to clear localStorage:",e),!1}}saveTranscriptPreferences(e){return this.set("transcript_preferences",e)}getTranscriptPreferences(){return this.get("transcript_preferences",null)}saveCaptionPreferences(e){return this.set("caption_preferences",e)}getCaptionPreferences(){return this.get("caption_preferences",null)}savePlayerPreferences(e){return this.set("player_preferences",e)}getPlayerPreferences(){return this.get("player_preferences",null)}saveSignLanguagePreferences(e){return this.set("sign_language_preferences",e)}getSignLanguagePreferences(){return this.get("sign_language_preferences",null)}};var B=class{constructor(e){this.player=e,this.element=null,this.tracks=[],this.currentTrack=null,this.currentCue=null,this.storage=new A("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.enable()}createElement(){this.element=l.createElement("div",{className:`${this.player.options.classPrefix}-captions`,attributes:{"aria-live":"polite","aria-atomic":"true",role:"region","aria-label":p.t("player.captions")}}),this.updateStyles(),(this.player.videoWrapper||this.player.container).appendChild(this.element)}loadTracks(){let e=this.player.element.textTracks;for(let t=0;t<e.length;t++){let i=e[t];(i.kind==="subtitles"||i.kind==="captions")&&(this.tracks.push({track:i,language:i.language,label:i.label,kind:i.kind,index:t}),i.mode="hidden")}}attachEvents(){this.player.on("timeupdate",()=>{this.updateCaptions()}),this.player.on("captionschange",()=>{this.updateStyles()})}enable(e=0){if(this.tracks.length===0)return;this.currentTrack&&(this.currentTrack.track.mode="hidden");let t=this.tracks[e];t&&(t.track.mode="hidden",this.currentTrack=t,this.player.state.captionsEnabled=!0,this.cueChangeHandler&&t.track.removeEventListener("cuechange",this.cueChangeHandler),this.cueChangeHandler=()=>{this.updateCaptions()},t.track.addEventListener("cuechange",this.cueChangeHandler),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.currentCue=null,this.player.state.captionsEnabled=!1,this.player.emit("captionsdisabled")}updateCaptions(){if(!this.currentTrack||!this.currentTrack.track.activeCues)return;let e=this.currentTrack.track.activeCues;if(e.length>0){let t=e[0];if(this.currentCue!==t){this.currentCue=t;let i=t.text;i=this.parseVTTFormatting(i),this.element.innerHTML=l.sanitizeHTML(i),this.element.style.display="block",this.player.emit("captionchange",t)}}else this.currentCue&&(this.element.innerHTML="",this.element.style.display="none",this.currentCue=null)}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 R=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)}),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=e.key,i=!1;for(let[s,a]of Object.entries(this.shortcuts))if(a.includes(t)&&(i=this.executeAction(s,e),i)){e.preventDefault(),e.stopPropagation(),this.announceAction(s);break}!i&&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=`
|
|
8
8
|
position: absolute;
|
|
9
9
|
left: -10000px;
|
|
10
10
|
width: 1px;
|
|
11
11
|
height: 1px;
|
|
12
12
|
overflow: hidden;
|
|
13
|
-
`,document.body.appendChild(i)),i.textContent="",setTimeout(()=>{i.textContent=e},100)}updateShortcut(e,t){Array.isArray(t)&&(this.shortcuts[e]=t)}destroy(){}};var $=class{constructor(e){this.player=e,this.transcriptWindow=null,this.transcriptEntries=[],this.metadataCues=[],this.currentActiveEntry=null,this.isVisible=!1,this.storage=new T("vidply"),this.isDragging=!1,this.dragOffsetX=0,this.dragOffsetY=0,this.isResizing=!1,this.resizeDirection=null,this.resizeStartX=0,this.resizeStartY=0,this.resizeStartWidth=0,this.resizeStartHeight=0,this.resizeEnabled=!1,this.settingsMenuVisible=!1,this.settingsMenu=null,this.settingsButton=null,this.settingsMenuJustOpened=!1,this.keyboardDragMode=!1,this.styleDialog=null,this.styleDialogVisible=!1,this.styleDialogJustOpened=!1;let t=this.storage.getTranscriptPreferences();this.transcriptStyle={fontSize:(t==null?void 0:t.fontSize)||this.player.options.transcriptFontSize||"100%",fontFamily:(t==null?void 0:t.fontFamily)||this.player.options.transcriptFontFamily||"sans-serif",color:(t==null?void 0:t.color)||this.player.options.transcriptColor||"#ffffff",backgroundColor:(t==null?void 0:t.backgroundColor)||this.player.options.transcriptBackgroundColor||"#1e1e1e",opacity:(t==null?void 0:t.opacity)??this.player.options.transcriptOpacity??.98},this.handlers={timeupdate:()=>this.updateActiveEntry(),resize:null,mousemove:null,mouseup:null,touchmove:null,touchend:null,mousedown:null,touchstart:null,keydown:null,settingsClick:null,settingsKeydown:null,documentClick:null,styleDialogKeydown:null},this.init()}init(){this.player.on("timeupdate",this.handlers.timeupdate),this.player.on("fullscreenchange",()=>{this.isVisible&&setTimeout(()=>this.positionTranscript(),100)})}toggleTranscript(){this.isVisible?this.hideTranscript():this.showTranscript()}showTranscript(){if(this.transcriptWindow){this.transcriptWindow.style.display="flex",this.isVisible=!0,setTimeout(()=>{this.settingsButton&&this.settingsButton.focus()},150);return}this.createTranscriptWindow(),this.loadTranscriptData(),this.transcriptWindow&&(this.transcriptWindow.style.display="flex",setTimeout(()=>this.positionTranscript(),0),setTimeout(()=>{this.settingsButton&&this.settingsButton.focus()},150)),this.isVisible=!0}hideTranscript(){this.transcriptWindow&&(this.transcriptWindow.style.display="none",this.isVisible=!1)}createTranscriptWindow(){this.transcriptWindow=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-window`,attributes:{role:"dialog","aria-label":"Video Transcript",tabindex:"-1"}}),this.transcriptHeader=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header`,attributes:{"aria-label":"Drag to reposition transcript. Use arrow keys to move, Home to reset position, Escape to close.",tabindex:"0"}}),this.headerLeft=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header-left`}),this.settingsButton=n.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings`,attributes:{type:"button","aria-label":c.t("transcript.settings"),"aria-expanded":"false"}}),this.settingsButton.appendChild(d("settings")),this.handlers.settingsClick=s=>{s.preventDefault(),s.stopPropagation(),this.settingsMenuVisible?this.hideSettingsMenu():this.showSettingsMenu()},this.settingsButton.addEventListener("click",this.handlers.settingsClick),this.handlers.settingsKeydown=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("keydown",this.handlers.settingsKeydown);let e=n.createElement("h3",{textContent:c.t("transcript.title")});this.headerLeft.appendChild(this.settingsButton),this.headerLeft.appendChild(e);let t=n.createElement("button",{className:`${this.player.options.classPrefix}-transcript-close`,attributes:{type:"button","aria-label":c.t("transcript.close")}});t.appendChild(d("close")),t.addEventListener("click",()=>this.hideTranscript()),this.transcriptHeader.appendChild(this.headerLeft),this.transcriptHeader.appendChild(t),this.transcriptContent=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-content`}),this.transcriptWindow.appendChild(this.transcriptHeader),this.transcriptWindow.appendChild(this.transcriptContent),this.player.container.appendChild(this.transcriptWindow),this.positionTranscript(),this.setupDragAndDrop(),this.handlers.documentClick=s=>{this.settingsMenuJustOpened||this.styleDialogJustOpened||this.settingsButton&&this.settingsButton.contains(s.target)||this.settingsMenu&&this.settingsMenu.contains(s.target)||(this.settingsMenuVisible&&this.hideSettingsMenu(),this.styleDialogVisible&&this.styleDialog&&!this.styleDialog.contains(s.target)&&this.hideStyleDialog())},this.documentClickHandlerAdded=!1;let i;this.handlers.resize=()=>{clearTimeout(i),i=setTimeout(()=>this.positionTranscript(),100)},window.addEventListener("resize",this.handlers.resize)}positionTranscript(){if(!this.transcriptWindow||!this.player.videoWrapper||!this.isVisible)return;let e=window.innerWidth<640,t=this.player.videoWrapper.getBoundingClientRect(),i=this.player.state.fullscreen;e&&!i?(this.transcriptWindow.style.position="relative",this.transcriptWindow.style.left="0",this.transcriptWindow.style.right="0",this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.top="auto",this.transcriptWindow.style.width="100%",this.transcriptWindow.style.maxWidth="100%",this.transcriptWindow.style.maxHeight="400px",this.transcriptWindow.style.height="auto",this.transcriptWindow.style.borderRadius="0",this.transcriptWindow.style.transform="none",this.transcriptWindow.style.border="none",this.transcriptWindow.style.borderTop="1px solid var(--vidply-border-light)",this.transcriptWindow.style.boxShadow="none",this.transcriptHeader&&(this.transcriptHeader.style.cursor="default"),this.transcriptWindow.parentNode!==this.player.container&&this.player.container.appendChild(this.transcriptWindow)):i?(this.transcriptWindow.style.position="fixed",this.transcriptWindow.style.left="auto",this.transcriptWindow.style.right="20px",this.transcriptWindow.style.bottom="80px",this.transcriptWindow.style.top="auto",this.transcriptWindow.style.maxHeight="calc(100vh - 180px)",this.transcriptWindow.style.height="auto",this.transcriptWindow.style.width="400px",this.transcriptWindow.style.maxWidth="400px",this.transcriptWindow.style.borderRadius="8px",this.transcriptWindow.style.border="1px solid var(--vidply-border)",this.transcriptWindow.style.borderTop="",this.transcriptWindow.parentNode!==this.player.container&&this.player.container.appendChild(this.transcriptWindow)):(this.transcriptWindow.style.position="absolute",this.transcriptWindow.style.left=`${t.width+8}px`,this.transcriptWindow.style.right="auto",this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.top="0",this.transcriptWindow.style.height=`${t.height}px`,this.transcriptWindow.style.maxHeight="none",this.transcriptWindow.style.width="400px",this.transcriptWindow.style.maxWidth="400px",this.transcriptWindow.style.borderRadius="8px",this.transcriptWindow.style.border="1px solid var(--vidply-border)",this.transcriptWindow.style.borderTop="",this.transcriptHeader&&(this.transcriptHeader.style.cursor="move"),this.transcriptWindow.parentNode!==this.player.container&&this.player.container.appendChild(this.transcriptWindow))}loadTranscriptData(){this.transcriptEntries=[],this.transcriptContent.innerHTML="";let e=Array.from(this.player.element.textTracks),t=e.find(o=>o.kind==="captions"||o.kind==="subtitles"),i=e.find(o=>o.kind==="descriptions"),s=e.find(o=>o.kind==="metadata");if(!t&&!i&&!s){this.showNoTranscriptMessage();return}let a=[t,i,s].filter(Boolean);if(a.forEach(o=>{o.mode==="disabled"&&(o.mode="hidden")}),a.some(o=>!o.cues||o.cues.length===0)){let o=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-loading`,textContent:c.t("transcript.loading")});this.transcriptContent.appendChild(o);let h=0,u=()=>{h++,h>=a.length&&this.loadTranscriptData()};a.forEach(g=>{g.addEventListener("load",u,{once:!0})}),setTimeout(()=>{this.loadTranscriptData()},500);return}let l=[];t&&t.cues&&Array.from(t.cues).forEach(o=>{l.push({cue:o,type:"caption"})}),i&&i.cues&&Array.from(i.cues).forEach(o=>{l.push({cue:o,type:"description"})}),s&&s.cues&&(this.metadataCues=Array.from(s.cues),this.setupMetadataHandling()),l.sort((o,h)=>o.cue.startTime-h.cue.startTime),l.forEach((o,h)=>{let u=this.createTranscriptEntry(o.cue,h,o.type);this.transcriptEntries.push({element:u,cue:o.cue,type:o.type,startTime:o.cue.startTime,endTime:o.cue.endTime}),this.transcriptContent.appendChild(u)}),this.applyTranscriptStyles()}setupMetadataHandling(){if(!this.metadataCues||this.metadataCues.length===0)return;let t=Array.from(this.player.element.textTracks).find(i=>i.kind==="metadata");t&&t.addEventListener("cuechange",()=>{Array.from(t.activeCues||[]).forEach(s=>{this.handleMetadataCue(s)})})}handleMetadataCue(e){let t=e.text.trim();this.player.emit("metadata",{time:e.startTime,endTime:e.endTime,text:t,cue:e}),t.includes("PAUSE")&&this.player.emit("metadata:pause",{time:e.startTime,text:t});let i=t.match(/FOCUS:([\w#-]+)/);i&&this.player.emit("metadata:focus",{time:e.startTime,target:i[1],text:t});let s=t.match(/#[\w-]+/g);s&&this.player.emit("metadata:hashtags",{time:e.startTime,hashtags:s,text:t})}createTranscriptEntry(e,t,i="caption"){let s=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-entry ${this.player.options.classPrefix}-transcript-${i}`,attributes:{"data-start":String(e.startTime),"data-end":String(e.endTime),"data-type":i,role:"button",tabindex:"0"}}),a=n.createElement("span",{className:`${this.player.options.classPrefix}-transcript-time`,textContent:S.formatTime(e.startTime)}),r=n.createElement("span",{className:`${this.player.options.classPrefix}-transcript-text`,textContent:this.stripVTTFormatting(e.text)});s.appendChild(a),s.appendChild(r);let l=()=>{this.player.seek(e.startTime),this.player.state.paused&&this.player.play()};return s.addEventListener("click",l),s.addEventListener("keydown",o=>{(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),l())}),s}stripVTTFormatting(e){return e.replace(/<[^>]+>/g,"").replace(/\n/g," ").trim()}showNoTranscriptMessage(){let e=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-empty`,textContent:c.t("transcript.noTranscript")});this.transcriptContent.appendChild(e)}updateActiveEntry(){if(!this.isVisible||this.transcriptEntries.length===0)return;let e=this.player.state.currentTime,t=this.transcriptEntries.find(i=>e>=i.startTime&&e<i.endTime);t&&t!==this.currentActiveEntry?(this.currentActiveEntry&&this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),t.element.classList.add(`${this.player.options.classPrefix}-transcript-entry-active`),this.scrollToEntry(t.element),this.currentActiveEntry=t):!t&&this.currentActiveEntry&&(this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),this.currentActiveEntry=null)}scrollToEntry(e){if(!this.transcriptContent)return;let t=this.transcriptContent.getBoundingClientRect(),i=e.getBoundingClientRect();if(i.top<t.top||i.bottom>t.bottom){let s=e.offsetTop-this.transcriptContent.clientHeight/2+e.clientHeight/2;this.transcriptContent.scrollTo({top:s,behavior:"smooth"})}}setupDragAndDrop(){!this.transcriptHeader||!this.transcriptWindow||(this.handlers.mousedown=e=>{e.target.closest(`.${this.player.options.classPrefix}-transcript-close`)||e.target.closest(`.${this.player.options.classPrefix}-transcript-settings`)||e.target.closest(`.${this.player.options.classPrefix}-transcript-settings-menu`)||e.target.closest(`.${this.player.options.classPrefix}-transcript-style-dialog`)||(this.startDragging(e.clientX,e.clientY),e.preventDefault())},this.handlers.mousemove=e=>{this.isDragging&&this.drag(e.clientX,e.clientY)},this.handlers.mouseup=()=>{this.isDragging&&this.stopDragging()},this.handlers.touchstart=e=>{if(e.target.closest(`.${this.player.options.classPrefix}-transcript-close`)||e.target.closest(`.${this.player.options.classPrefix}-transcript-settings`)||e.target.closest(`.${this.player.options.classPrefix}-transcript-settings-menu`)||e.target.closest(`.${this.player.options.classPrefix}-transcript-style-dialog`))return;let t=window.innerWidth<640,i=this.player.state.fullscreen,s=e.touches[0];t&&!i||this.startDragging(s.clientX,s.clientY)},this.handlers.touchmove=e=>{let t=window.innerWidth<640,i=this.player.state.fullscreen;if(!(t&&!i)&&this.isDragging){let s=e.touches[0];this.drag(s.clientX,s.clientY),e.preventDefault()}},this.handlers.touchend=()=>{this.isDragging&&this.stopDragging()},this.handlers.keydown=e=>{if(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"].includes(e.key)){if(!this.keyboardDragMode)return;e.preventDefault(),e.stopPropagation();let t=e.shiftKey?50:10,i=parseFloat(this.transcriptWindow.style.left)||0,s=parseFloat(this.transcriptWindow.style.top)||0;if(window.getComputedStyle(this.transcriptWindow).transform!=="none"){let o=this.transcriptWindow.getBoundingClientRect();i=o.left,s=o.top,this.transcriptWindow.style.transform="none",this.transcriptWindow.style.left=`${i}px`,this.transcriptWindow.style.top=`${s}px`}let r=i,l=s;switch(e.key){case"ArrowLeft":r-=t;break;case"ArrowRight":r+=t;break;case"ArrowUp":l-=t;break;case"ArrowDown":l+=t;break}this.transcriptWindow.style.left=`${r}px`,this.transcriptWindow.style.top=`${l}px`;return}if(e.key==="Home"){e.preventDefault(),e.stopPropagation(),this.resetPosition();return}if(e.key==="Escape"){e.preventDefault(),e.stopPropagation(),this.styleDialogVisible?this.hideStyleDialog():this.keyboardDragMode?this.disableKeyboardDragMode():this.settingsMenuVisible?this.hideSettingsMenu():this.hideTranscript();return}},this.transcriptHeader.addEventListener("mousedown",this.handlers.mousedown),document.addEventListener("mousemove",this.handlers.mousemove),document.addEventListener("mouseup",this.handlers.mouseup),this.transcriptHeader.addEventListener("touchstart",this.handlers.touchstart),document.addEventListener("touchmove",this.handlers.touchmove),document.addEventListener("touchend",this.handlers.touchend),this.transcriptHeader.addEventListener("keydown",this.handlers.keydown))}startDragging(e,t){let i=this.transcriptWindow.getBoundingClientRect(),s=this.player.container.getBoundingClientRect(),a=i.left-s.left,r=i.top-s.top;window.getComputedStyle(this.transcriptWindow).transform!=="none"&&(this.transcriptWindow.style.transform="none",this.transcriptWindow.style.left=`${a}px`,this.transcriptWindow.style.top=`${r}px`),this.dragOffsetX=e-i.left,this.dragOffsetY=t-i.top,this.isDragging=!0,this.transcriptWindow.classList.add(`${this.player.options.classPrefix}-transcript-dragging`),document.body.style.cursor="grabbing",document.body.style.userSelect="none"}drag(e,t){if(!this.isDragging)return;let i=e-this.dragOffsetX,s=t-this.dragOffsetY,a=this.player.container.getBoundingClientRect(),r=i-a.left,l=s-a.top;this.transcriptWindow.style.left=`${r}px`,this.transcriptWindow.style.top=`${l}px`}stopDragging(){this.isDragging=!1,this.transcriptWindow.classList.remove(`${this.player.options.classPrefix}-transcript-dragging`),document.body.style.cursor="",document.body.style.userSelect=""}setPosition(e,t){let i=this.transcriptWindow.getBoundingClientRect(),s=document.documentElement.clientWidth,a=document.documentElement.clientHeight,r=100,l=-(i.width-r),o=-(i.height-r),h=s-r,u=a-r;e=Math.max(l,Math.min(e,h)),t=Math.max(o,Math.min(t,u)),this.transcriptWindow.style.left=`${e}px`,this.transcriptWindow.style.top=`${t}px`,this.transcriptWindow.style.transform="none"}resetPosition(){this.transcriptWindow.style.left="50%",this.transcriptWindow.style.top="50%",this.transcriptWindow.style.transform="translate(-50%, -50%)"}toggleKeyboardDragMode(){this.keyboardDragMode?this.disableKeyboardDragMode():this.enableKeyboardDragMode()}enableKeyboardDragMode(){this.keyboardDragMode=!0,this.transcriptWindow.classList.add(`${this.player.options.classPrefix}-transcript-keyboard-drag`),this.settingsButton&&this.settingsButton.setAttribute("aria-label","Keyboard drag mode active. Use arrow keys to move window. Press D or Escape to exit.");let e=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-drag-indicator`,textContent:c.t("transcript.keyboardDragActive")});this.transcriptHeader.appendChild(e),this.settingsMenuVisible&&this.hideSettingsMenu(),this.transcriptHeader.focus()}disableKeyboardDragMode(){this.keyboardDragMode=!1,this.transcriptWindow.classList.remove(`${this.player.options.classPrefix}-transcript-keyboard-drag`),this.settingsButton&&this.settingsButton.setAttribute("aria-label","Transcript settings. Press Enter to open menu, or D to enable drag mode");let e=this.transcriptHeader.querySelector(`.${this.player.options.classPrefix}-transcript-drag-indicator`);e&&e.remove(),this.settingsButton&&this.settingsButton.focus()}toggleSettingsMenu(){this.settingsMenuVisible?this.hideSettingsMenu():this.showSettingsMenu()}showSettingsMenu(){if(this.settingsMenuJustOpened=!0,setTimeout(()=>{this.settingsMenuJustOpened=!1},350),this.documentClickHandlerAdded||setTimeout(()=>{document.addEventListener("click",this.handlers.documentClick),this.documentClickHandlerAdded=!0},300),this.settingsMenu){this.settingsMenu.style.display="block",this.settingsMenuVisible=!0;return}this.settingsMenu=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-settings-menu`});let e=n.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings-item`,attributes:{type:"button","aria-label":c.t("transcript.keyboardDragMode")}}),t=d("move"),i=n.createElement("span",{textContent:c.t("transcript.keyboardDragMode")});e.appendChild(t),e.appendChild(i),e.addEventListener("click",()=>{this.toggleKeyboardDragMode(),this.hideSettingsMenu()});let s=n.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings-item`,attributes:{type:"button","aria-label":c.t("transcript.styleTranscript")}}),a=d("settings"),r=n.createElement("span",{textContent:c.t("transcript.styleTranscript")});s.appendChild(a),s.appendChild(r),s.addEventListener("click",b=>{b.preventDefault(),b.stopPropagation(),this.hideSettingsMenu(),setTimeout(()=>{this.showStyleDialog()},50)});let l=n.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings-item`,attributes:{type:"button","aria-label":c.t("transcript.resizeWindow")}}),o=d("resize"),h=n.createElement("span",{textContent:c.t("transcript.resizeWindow")});l.appendChild(o),l.appendChild(h),l.addEventListener("click",()=>{this.toggleResizeMode(),this.hideSettingsMenu()});let u=n.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings-item`,attributes:{type:"button","aria-label":c.t("transcript.closeMenu")}}),g=d("close"),m=n.createElement("span",{textContent:c.t("transcript.closeMenu")});u.appendChild(g),u.appendChild(m),u.addEventListener("click",()=>{this.hideSettingsMenu()}),this.settingsMenu.appendChild(e),this.settingsMenu.appendChild(l),this.settingsMenu.appendChild(s),this.settingsMenu.appendChild(u),this.headerLeft?this.headerLeft.appendChild(this.settingsMenu):this.transcriptHeader.appendChild(this.settingsMenu),this.settingsMenuVisible=!0,this.settingsMenu.style.display="block",this.settingsButton&&this.settingsButton.setAttribute("aria-expanded","true"),setTimeout(()=>{let b=this.settingsMenu.querySelector(`.${this.player.options.classPrefix}-transcript-settings-item`);b&&b.focus()},0)}hideSettingsMenu(){this.settingsMenu&&(this.settingsMenu.style.display="none",this.settingsMenuVisible=!1,this.settingsMenuJustOpened=!1,this.settingsButton&&(this.settingsButton.setAttribute("aria-expanded","false"),this.settingsButton.focus()))}enableMoveMode(){this.transcriptWindow.classList.add(`${this.player.options.classPrefix}-transcript-move-mode`);let e=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-move-tooltip`,textContent:"Drag with mouse or press D for keyboard drag mode"});this.transcriptHeader.appendChild(e),setTimeout(()=>{this.transcriptWindow.classList.remove(`${this.player.options.classPrefix}-transcript-move-mode`),e.parentNode&&e.remove()},2e3)}toggleResizeMode(){this.resizeEnabled=!this.resizeEnabled,this.resizeEnabled?this.enableResizeHandles():this.disableResizeHandles()}enableResizeHandles(){if(!this.transcriptWindow)return;["n","s","e","w","ne","nw","se","sw"].forEach(t=>{let i=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-resize-handle ${this.player.options.classPrefix}-transcript-resize-${t}`,attributes:{"data-direction":t}});i.addEventListener("mousedown",s=>this.startResize(s,t)),i.addEventListener("touchstart",s=>this.startResize(s.touches[0],t)),this.transcriptWindow.appendChild(i)}),this.transcriptWindow.classList.add(`${this.player.options.classPrefix}-transcript-resizable`),this.handlers.resizeMove=t=>{this.isResizing&&this.performResize(t.clientX,t.clientY)},this.handlers.resizeEnd=()=>{this.isResizing&&this.stopResize()},this.handlers.resizeTouchMove=t=>{this.isResizing&&(this.performResize(t.touches[0].clientX,t.touches[0].clientY),t.preventDefault())},document.addEventListener("mousemove",this.handlers.resizeMove),document.addEventListener("mouseup",this.handlers.resizeEnd),document.addEventListener("touchmove",this.handlers.resizeTouchMove),document.addEventListener("touchend",this.handlers.resizeEnd)}disableResizeHandles(){if(!this.transcriptWindow)return;this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-resize-handle`).forEach(t=>t.remove()),this.transcriptWindow.classList.remove(`${this.player.options.classPrefix}-transcript-resizable`),this.handlers.resizeMove&&document.removeEventListener("mousemove",this.handlers.resizeMove),this.handlers.resizeEnd&&document.removeEventListener("mouseup",this.handlers.resizeEnd),this.handlers.resizeTouchMove&&document.removeEventListener("touchmove",this.handlers.resizeTouchMove),document.removeEventListener("touchend",this.handlers.resizeEnd)}startResize(e,t){e.stopPropagation(),e.preventDefault(),this.isResizing=!0,this.resizeDirection=t,this.resizeStartX=e.clientX,this.resizeStartY=e.clientY;let i=this.transcriptWindow.getBoundingClientRect();this.resizeStartWidth=i.width,this.resizeStartHeight=i.height,this.transcriptWindow.classList.add(`${this.player.options.classPrefix}-transcript-resizing`),document.body.style.cursor=this.getResizeCursor(t),document.body.style.userSelect="none"}performResize(e,t){if(!this.isResizing)return;let i=e-this.resizeStartX,s=t-this.resizeStartY,a=this.resizeStartWidth,r=this.resizeStartHeight,l=this.resizeDirection;l.includes("e")&&(a=this.resizeStartWidth+i),l.includes("w")&&(a=this.resizeStartWidth-i),l.includes("s")&&(r=this.resizeStartHeight+s),l.includes("n")&&(r=this.resizeStartHeight-s);let o=300,h=200,u=window.innerWidth-40,g=window.innerHeight-40;if(a=Math.max(o,Math.min(a,u)),r=Math.max(h,Math.min(r,g)),this.transcriptWindow.style.width=`${a}px`,this.transcriptWindow.style.height=`${r}px`,this.transcriptWindow.style.maxWidth=`${a}px`,this.transcriptWindow.style.maxHeight=`${r}px`,l.includes("w")){let m=parseFloat(this.transcriptWindow.style.left)||0;this.transcriptWindow.style.left=`${m+(this.resizeStartWidth-a)}px`}if(l.includes("n")){let m=parseFloat(this.transcriptWindow.style.top)||0;this.transcriptWindow.style.top=`${m+(this.resizeStartHeight-r)}px`}}stopResize(){this.isResizing=!1,this.resizeDirection=null,this.transcriptWindow.classList.remove(`${this.player.options.classPrefix}-transcript-resizing`),document.body.style.cursor="",document.body.style.userSelect=""}getResizeCursor(e){return{n:"ns-resize",s:"ns-resize",e:"ew-resize",w:"ew-resize",ne:"nesw-resize",nw:"nwse-resize",se:"nwse-resize",sw:"nesw-resize"}[e]||"default"}showStyleDialog(){if(this.styleDialog){this.styleDialog.style.display="block",this.styleDialogVisible=!0,this.styleDialogJustOpened=!0,setTimeout(()=>{this.styleDialogJustOpened=!1},350),setTimeout(()=>{let o=this.styleDialog.querySelector("select, input");o&&o.focus()},0);return}this.styleDialog=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-dialog`});let e=n.createElement("h4",{textContent:c.t("transcript.styleTitle"),className:`${this.player.options.classPrefix}-transcript-style-title`});this.styleDialog.appendChild(e);let t=this.createStyleSelectControl(c.t("captions.fontSize"),"fontSize",[{label:c.t("fontSizes.small"),value:"87.5%"},{label:c.t("fontSizes.normal"),value:"100%"},{label:c.t("fontSizes.large"),value:"125%"},{label:c.t("fontSizes.xlarge"),value:"150%"}]);this.styleDialog.appendChild(t);let i=this.createStyleSelectControl(c.t("captions.fontFamily"),"fontFamily",[{label:c.t("fontFamilies.sansSerif"),value:"sans-serif"},{label:c.t("fontFamilies.serif"),value:"serif"},{label:c.t("fontFamilies.monospace"),value:"monospace"}]);this.styleDialog.appendChild(i);let s=this.createStyleColorControl(c.t("captions.color"),"color");this.styleDialog.appendChild(s);let a=this.createStyleColorControl(c.t("captions.backgroundColor"),"backgroundColor");this.styleDialog.appendChild(a);let r=this.createStyleOpacityControl(c.t("captions.opacity"),"opacity");this.styleDialog.appendChild(r);let l=n.createElement("button",{className:`${this.player.options.classPrefix}-transcript-style-close`,textContent:c.t("settings.close"),attributes:{type:"button"}});l.addEventListener("click",()=>this.hideStyleDialog()),this.styleDialog.appendChild(l),this.handlers.styleDialogKeydown=o=>{o.key==="Escape"&&(o.preventDefault(),o.stopPropagation(),this.hideStyleDialog())},this.styleDialog.addEventListener("keydown",this.handlers.styleDialogKeydown),this.headerLeft?this.headerLeft.appendChild(this.styleDialog):this.transcriptHeader.appendChild(this.styleDialog),this.applyTranscriptStyles(),this.styleDialogVisible=!0,this.styleDialog.style.display="block",this.styleDialogJustOpened=!0,setTimeout(()=>{this.styleDialogJustOpened=!1},350),setTimeout(()=>{let o=this.styleDialog.querySelector("select, input");o&&o.focus()},0)}hideStyleDialog(){this.styleDialog&&(this.styleDialog.style.display="none",this.styleDialogVisible=!1,this.settingsButton&&this.settingsButton.focus())}createStyleSelectControl(e,t,i){let s=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),a=n.createElement("label",{textContent:e});s.appendChild(a);let r=n.createElement("select",{className:`${this.player.options.classPrefix}-transcript-style-select`});return i.forEach(l=>{let o=n.createElement("option",{textContent:l.label,attributes:{value:l.value}});this.transcriptStyle[t]===l.value&&(o.selected=!0),r.appendChild(o)}),r.addEventListener("change",l=>{this.transcriptStyle[t]=l.target.value,this.applyTranscriptStyles(),this.savePreferences()}),s.appendChild(r),s}createStyleColorControl(e,t){let i=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),s=n.createElement("label",{textContent:e});i.appendChild(s);let a=n.createElement("input",{attributes:{type:"color",value:this.transcriptStyle[t]},className:`${this.player.options.classPrefix}-transcript-style-color`});return a.addEventListener("input",r=>{this.transcriptStyle[t]=r.target.value,this.applyTranscriptStyles(),this.savePreferences()}),i.appendChild(a),i}createStyleOpacityControl(e,t){let i=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),s=n.createElement("label",{textContent:e});i.appendChild(s);let a=n.createElement("span",{textContent:Math.round(this.transcriptStyle[t]*100)+"%",className:`${this.player.options.classPrefix}-transcript-style-value`}),r=n.createElement("input",{attributes:{type:"range",min:"0",max:"1",step:"0.1",value:String(this.transcriptStyle[t])},className:`${this.player.options.classPrefix}-transcript-style-range`});r.addEventListener("input",o=>{let h=parseFloat(o.target.value);this.transcriptStyle[t]=h,a.textContent=Math.round(h*100)+"%",this.applyTranscriptStyles(),this.savePreferences()});let l=n.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-range-container`});return l.appendChild(r),l.appendChild(a),i.appendChild(s),i.appendChild(l),i}savePreferences(){this.storage.saveTranscriptPreferences(this.transcriptStyle)}applyTranscriptStyles(){if(!this.transcriptWindow)return;this.transcriptWindow.style.backgroundColor=this.transcriptStyle.backgroundColor,this.transcriptWindow.style.opacity=String(this.transcriptStyle.opacity),this.transcriptContent&&(this.transcriptContent.style.fontSize=this.transcriptStyle.fontSize,this.transcriptContent.style.fontFamily=this.transcriptStyle.fontFamily,this.transcriptContent.style.color=this.transcriptStyle.color),this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-text`).forEach(i=>{i.style.fontSize=this.transcriptStyle.fontSize,i.style.fontFamily=this.transcriptStyle.fontFamily,i.style.color=this.transcriptStyle.color}),this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-time`).forEach(i=>{i.style.fontFamily=this.transcriptStyle.fontFamily})}destroy(){this.resizeEnabled&&this.disableResizeHandles(),this.keyboardDragMode&&this.disableKeyboardDragMode(),this.handlers.timeupdate&&this.player.off("timeupdate",this.handlers.timeupdate),this.transcriptHeader&&(this.handlers.mousedown&&this.transcriptHeader.removeEventListener("mousedown",this.handlers.mousedown),this.handlers.touchstart&&this.transcriptHeader.removeEventListener("touchstart",this.handlers.touchstart),this.handlers.keydown&&this.transcriptHeader.removeEventListener("keydown",this.handlers.keydown)),this.settingsButton&&(this.handlers.settingsClick&&this.settingsButton.removeEventListener("click",this.handlers.settingsClick),this.handlers.settingsKeydown&&this.settingsButton.removeEventListener("keydown",this.handlers.settingsKeydown)),this.styleDialog&&this.handlers.styleDialogKeydown&&this.styleDialog.removeEventListener("keydown",this.handlers.styleDialogKeydown),this.handlers.mousemove&&document.removeEventListener("mousemove",this.handlers.mousemove),this.handlers.mouseup&&document.removeEventListener("mouseup",this.handlers.mouseup),this.handlers.touchmove&&document.removeEventListener("touchmove",this.handlers.touchmove),this.handlers.touchend&&document.removeEventListener("touchend",this.handlers.touchend),this.handlers.documentClick&&document.removeEventListener("click",this.handlers.documentClick),this.handlers.resize&&window.removeEventListener("resize",this.handlers.resize),this.handlers=null,this.transcriptWindow&&this.transcriptWindow.parentNode&&this.transcriptWindow.parentNode.removeChild(this.transcriptWindow),this.transcriptWindow=null,this.transcriptHeader=null,this.transcriptContent=null,this.transcriptEntries=[],this.settingsMenu=null,this.styleDialog=null}};U();var N=class{constructor(e){this.player=e,this.youtube=null,this.videoId=null,this.isReady=!1,this.iframe=null}async init(){if(this.videoId=this.extractVideoId(this.player.element.src),!this.videoId)throw new Error("Invalid YouTube URL");await this.loadYouTubeAPI(),this.createIframe(),await this.initializePlayer()}extractVideoId(e){let t=[/(?:youtube\.com\/watch\?v=|youtu\.be\/)([^&\s]+)/,/youtube\.com\/embed\/([^&\s]+)/];for(let i of t){let s=e.match(i);if(s&&s[1])return s[1]}return null}async loadYouTubeAPI(){return window.YT&&window.YT.Player?Promise.resolve():new Promise((e,t)=>{if(window.onYouTubeIframeAPIReady){let a=window.onYouTubeIframeAPIReady;window.onYouTubeIframeAPIReady=()=>{a(),e()};return}let i=document.createElement("script");i.src="https://www.youtube.com/iframe_api",window.onYouTubeIframeAPIReady=()=>{e()},i.onerror=()=>t(new Error("Failed to load YouTube API"));let s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(i,s)})}createIframe(){this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`youtube-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.height="100%",this.player.element.parentNode.insertBefore(this.iframe,this.player.element)}async initializePlayer(){return new Promise(e=>{this.youtube=new window.YT.Player(this.iframe.id,{videoId:this.videoId,width:"100%",height:"100%",playerVars:{controls:0,disablekb:1,fs:0,modestbranding:1,rel:0,showinfo:0,iv_load_policy:3,autoplay:this.player.options.autoplay?1:0,mute:this.player.options.muted?1:0,start:this.player.options.startTime||0},events:{onReady:t=>{this.isReady=!0,this.attachEvents(),e()},onStateChange:t=>this.handleStateChange(t),onError:t=>this.handleError(t)}})})}attachEvents(){this.timeUpdateInterval=setInterval(()=>{if(this.isReady&&this.youtube){let e=this.youtube.getCurrentTime(),t=this.youtube.getDuration();this.player.state.currentTime=e,this.player.state.duration=t,this.player.emit("timeupdate",e)}},250),this.youtube.getDuration&&(this.player.state.duration=this.youtube.getDuration(),this.player.emit("loadedmetadata"))}handleStateChange(e){let t=window.YT.PlayerState;switch(e.data){case t.PLAYING:this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.state.buffering=!1,this.player.emit("play"),this.player.emit("playing"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player);break;case t.PAUSED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player);break;case t.ENDED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.youtube.seekTo(0),this.youtube.playVideo());break;case t.BUFFERING:this.player.state.buffering=!0,this.player.emit("waiting");break;case t.CUED:this.player.emit("loadedmetadata");break}}handleError(e){let t={2:"Invalid video ID",5:"HTML5 player error",100:"Video not found",101:"Video not allowed to be played in embedded players",150:"Video not allowed to be played in embedded players"},i=new Error(t[e.data]||"YouTube player error");this.player.handleError(i)}play(){this.isReady&&this.youtube&&this.youtube.playVideo()}pause(){this.isReady&&this.youtube&&this.youtube.pauseVideo()}seek(e){this.isReady&&this.youtube&&this.youtube.seekTo(e,!0)}setVolume(e){this.isReady&&this.youtube&&(this.youtube.setVolume(e*100),this.player.state.volume=e)}setMuted(e){this.isReady&&this.youtube&&(e?this.youtube.mute():this.youtube.unMute(),this.player.state.muted=e)}setPlaybackSpeed(e){this.isReady&&this.youtube&&(this.youtube.setPlaybackRate(e),this.player.state.playbackSpeed=e)}destroy(){this.timeUpdateInterval&&clearInterval(this.timeUpdateInterval),this.youtube&&this.youtube.destroy&&this.youtube.destroy(),this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display="")}};var R=class{constructor(e){this.player=e,this.vimeo=null,this.videoId=null,this.isReady=!1,this.iframe=null}async init(){if(this.videoId=this.extractVideoId(this.player.element.src),!this.videoId)throw new Error("Invalid Vimeo URL");await this.loadVimeoAPI(),this.createIframe(),await this.initializePlayer()}extractVideoId(e){let t=[/vimeo\.com\/(\d+)/,/vimeo\.com\/video\/(\d+)/,/player\.vimeo\.com\/video\/(\d+)/];for(let i of t){let s=e.match(i);if(s&&s[1])return s[1]}return null}async loadVimeoAPI(){return window.Vimeo&&window.Vimeo.Player?Promise.resolve():new Promise((e,t)=>{let i=document.createElement("script");i.src="https://player.vimeo.com/api/player.js",i.onload=()=>e(),i.onerror=()=>t(new Error("Failed to load Vimeo API")),document.head.appendChild(i)})}createIframe(){this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`vimeo-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.height="100%",this.player.element.parentNode.insertBefore(this.iframe,this.player.element)}async initializePlayer(){let e={id:this.videoId,width:"100%",height:"100%",controls:!1,autoplay:this.player.options.autoplay,muted:this.player.options.muted,loop:this.player.options.loop,keyboard:!1};this.player.options.startTime>0&&(e.startTime=this.player.options.startTime),this.vimeo=new window.Vimeo.Player(this.iframe.id,e),await this.vimeo.ready(),this.isReady=!0,this.attachEvents();try{let t=await this.vimeo.getDuration();this.player.state.duration=t,this.player.emit("loadedmetadata")}catch(t){this.player.log("Error getting duration:",t,"warn")}}attachEvents(){this.vimeo.on("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),this.vimeo.on("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.vimeo.on("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player)}),this.vimeo.on("timeupdate",e=>{this.player.state.currentTime=e.seconds,this.player.state.duration=e.duration,this.player.emit("timeupdate",e.seconds),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,e.seconds)}),this.vimeo.on("volumechange",e=>{this.player.state.volume=e.volume,this.player.emit("volumechange",e.volume)}),this.vimeo.on("bufferstart",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.vimeo.on("bufferend",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.vimeo.on("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking")}),this.vimeo.on("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")}),this.vimeo.on("playbackratechange",e=>{this.player.state.playbackSpeed=e.playbackRate,this.player.emit("ratechange",e.playbackRate)}),this.vimeo.on("error",e=>{this.player.handleError(new Error(`Vimeo error: ${e.message}`))})}play(){this.isReady&&this.vimeo&&this.vimeo.play().catch(e=>{this.player.log("Play error:",e,"warn")})}pause(){this.isReady&&this.vimeo&&this.vimeo.pause().catch(e=>{this.player.log("Pause error:",e,"warn")})}seek(e){this.isReady&&this.vimeo&&this.vimeo.setCurrentTime(e).catch(t=>{this.player.log("Seek error:",t,"warn")})}setVolume(e){this.isReady&&this.vimeo&&(this.vimeo.setVolume(e).catch(t=>{this.player.log("Volume error:",t,"warn")}),this.player.state.volume=e)}setMuted(e){this.isReady&&this.vimeo&&(e?this.vimeo.setVolume(0):this.vimeo.setVolume(this.player.state.volume),this.player.state.muted=e)}setPlaybackSpeed(e){this.isReady&&this.vimeo&&(this.vimeo.setPlaybackRate(e).catch(t=>{this.player.log("Playback rate error:",t,"warn")}),this.player.state.playbackSpeed=e)}destroy(){this.vimeo&&this.vimeo.destroy&&this.vimeo.destroy(),this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display="")}};var F=class{constructor(e){this.player=e,this.media=e.element,this.hls=null}async init(){this.canPlayNatively()?(this.player.log("Using native HLS support"),await this.initNative()):(this.player.log("Using hls.js for HLS support"),await this.initHlsJs())}canPlayNatively(){return document.createElement("video").canPlayType("application/vnd.apple.mpegurl")!==""}async initNative(){let e=(await Promise.resolve().then(()=>(U(),J))).HTML5Renderer,t=new e(this.player);await t.init(),Object.getOwnPropertyNames(Object.getPrototypeOf(t)).forEach(i=>{i!=="constructor"&&typeof t[i]=="function"&&(this[i]=t[i].bind(t))})}async initHlsJs(){if(this.media.controls=!1,this.media.removeAttribute("controls"),window.Hls||await this.loadHlsJs(),!window.Hls.isSupported())throw new Error("HLS is not supported in this browser");this.hls=new window.Hls({debug:this.player.options.debug,enableWorker:!0,lowLatencyMode:!1,backBufferLength:90,maxBufferLength:30,maxMaxBufferLength:600,maxBufferSize:60*1e3*1e3,maxBufferHole:.5,manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:4,manifestLoadingRetryDelay:1e3,manifestLoadingMaxRetryTimeout:64e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,levelLoadingMaxRetryTimeout:64e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingMaxRetryTimeout:64e3}),this.hls.attachMedia(this.media);let e,t=this.player.element.querySelector("source");if(t?e=t.getAttribute("src"):e=this.player.element.getAttribute("src")||this.player.element.src,this.player.log(`Loading HLS source: ${e}`,"log"),!e)throw new Error("No HLS source found");this.hls.loadSource(e),this.attachHlsEvents(),this.attachMediaEvents()}async loadHlsJs(){return new Promise((e,t)=>{let i=document.createElement("script");i.src="https://cdn.jsdelivr.net/npm/hls.js@latest",i.onload=()=>e(),i.onerror=()=>t(new Error("Failed to load hls.js")),document.head.appendChild(i)})}attachHlsEvents(){this.hls.on(window.Hls.Events.MANIFEST_PARSED,(e,t)=>{this.player.log("HLS manifest loaded, found "+t.levels.length+" quality levels"),this.player.emit("hlsmanifestparsed",t)}),this.hls.on(window.Hls.Events.LEVEL_SWITCHED,(e,t)=>{this.player.log("HLS level switched to "+t.level),this.player.emit("hlslevelswitched",t)}),this.hls.on(window.Hls.Events.ERROR,(e,t)=>{this.handleHlsError(t)}),this.hls.on(window.Hls.Events.FRAG_BUFFERED,()=>{this.player.state.buffering=!1})}attachMediaEvents(){this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume)}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.media.addEventListener("error",()=>{this.player.handleError(this.media.error)})}handleHlsError(e){if(this.player.log(`HLS Error - Type: ${e.type}, Details: ${e.details}, Fatal: ${e.fatal}`,"warn"),e.response&&this.player.log(`Response code: ${e.response.code}, URL: ${e.response.url}`,"warn"),e.fatal)switch(e.type){case window.Hls.ErrorTypes.NETWORK_ERROR:this.player.log("Fatal network error, trying to recover...","error"),this.player.log(`Network error details: ${e.details}`,"error"),setTimeout(()=>{this.hls.startLoad()},1e3);break;case window.Hls.ErrorTypes.MEDIA_ERROR:this.player.log("Fatal media error, trying to recover...","error"),this.hls.recoverMediaError();break;default:this.player.log("Fatal error, cannot recover","error"),this.player.handleError(new Error(`HLS Error: ${e.type} - ${e.details}`)),this.hls.destroy();break}else this.player.log("Non-fatal HLS error: "+e.details,"warn")}play(){let e=this.media.play();e!==void 0&&e.catch(t=>{this.player.log("Play failed:",t,"warn")})}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}switchQuality(e){this.hls&&(this.hls.currentLevel=e)}getQualities(){return this.hls&&this.hls.levels?this.hls.levels.map((e,t)=>({index:t,height:e.height,width:e.width,bitrate:e.bitrate,name:`${e.height}p`})):[]}destroy(){this.hls&&(this.hls.destroy(),this.hls=null)}};var D=class extends H{constructor(e,t={}){if(super(),this.element=typeof e=="string"?document.querySelector(e):e,!this.element)throw new Error("VidPly: Element not found");if(this.element.tagName!=="VIDEO"&&this.element.tagName!=="AUDIO"){let s=t.mediaType||"video",a=document.createElement(s);Array.from(this.element.attributes).forEach(l=>{l.name!=="id"&&l.name!=="class"&&!l.name.startsWith("data-")&&a.setAttribute(l.name,l.value)}),this.element.querySelectorAll("track").forEach(l=>{a.appendChild(l.cloneNode(!0))}),this.element.innerHTML="",this.element.appendChild(a),this.element=a}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,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.storage=new T("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.signLanguageVideo=null,this.container=null,this.renderer=null,this.controlBar=null,this.captionManager=null,this.keyboardManager=null,this.settingsDialog=null,this.init()}async init(){var e;try{if(this.log("Initializing VidPly player"),!this.options.language||this.options.language==="en"){let i=this.detectHtmlLanguage();i&&(this.options.language=i,this.log(`Auto-detected language from HTML: ${i}`))}c.setLanguage(this.options.language),this.createContainer(),this.element.src||((e=this.element.querySelector("source"))==null?void 0:e.src)?await this.initializeRenderer():this.log("No initial source - waiting for playlist or manual load"),this.options.controls&&(this.controlBar=new W(this),this.videoWrapper.appendChild(this.controlBar.element)),this.options.captions&&(this.captionManager=new A(this)),(this.options.transcript||this.options.transcriptButton)&&(this.transcriptManager=new $(this)),this.options.keyboard&&(this.keyboardManager=new V(this)),this.setupResponsiveHandlers(),this.options.startTime>0&&this.seek(this.options.startTime),this.options.muted&&this.mute(),this.options.volume!==.8&&this.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(t){this.handleError(t)}}detectHtmlLanguage(){let e=document.documentElement.lang||document.documentElement.getAttribute("lang");if(!e)return null;let t=e.toLowerCase().split("-")[0];return["en","de","es","fr","ja"].includes(t)?t:(this.log(`Language "${e}" not available, using English as fallback`),"en")}createContainer(){this.container=n.createElement("div",{className:`${this.options.classPrefix}-player`,attributes:{role:"region","aria-label":c.t("player.label"),tabindex:"0"}});let e=this.element.tagName.toLowerCase();this.container.classList.add(`${this.options.classPrefix}-${e}`),this.options.responsive&&this.container.classList.add(`${this.options.classPrefix}-responsive`),this.videoWrapper=n.createElement("div",{className:`${this.options.classPrefix}-video-wrapper`}),this.element.parentNode.insertBefore(this.container,this.element),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.setAttribute("webkit-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.options.poster),this.element.tagName==="VIDEO"&&this.createPlayButtonOverlay(),this.element.style.cursor="pointer",this.element.addEventListener("click",t=>{t.target===this.element&&this.toggle()})}createPlayButtonOverlay(){this.playButtonOverlay=_(),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.on("ended",()=>{this.playButtonOverlay.style.opacity="1",this.playButtonOverlay.style.pointerEvents="auto"})}async initializeRenderer(){var i;let e=this.element.src||((i=this.element.querySelector("source"))==null?void 0:i.src);if(!e)throw new Error("No media source found");this.originalSrc||(this.originalSrc=e);let t;e.includes("youtube.com")||e.includes("youtu.be")?t=N:e.includes("vimeo.com")?t=R:e.includes(".m3u8")?t=F:t=B,this.log(`Using ${t.name} renderer`),this.renderer=new t(this),await this.renderer.init()}async load(e){try{this.log("Loading new media:",e.src),this.renderer&&this.pause(),this.element.querySelectorAll("track").forEach(s=>s.remove()),this.element.src=e.src,e.type&&(this.element.type=e.type),e.poster&&this.element.tagName==="VIDEO"&&(this.element.poster=e.poster),e.tracks&&e.tracks.length>0&&e.tracks.forEach(s=>{let a=document.createElement("track");a.src=s.src,a.kind=s.kind||"captions",a.srclang=s.srclang||"en",a.label=s.label||s.srclang,s.default&&(a.default=!0),this.element.appendChild(a)});let i=this.shouldChangeRenderer(e.src);if(i&&this.renderer&&(this.renderer.destroy(),this.renderer=null),!this.renderer||i?await this.initializeRenderer():(this.renderer.media=this.element,this.element.load()),this.captionManager&&(this.captionManager.destroy(),this.captionManager=new A(this)),this.transcriptManager){let s=this.transcriptManager.isVisible;this.transcriptManager.destroy(),this.transcriptManager=new $(this),s&&this.transcriptManager.showTranscript()}this.controlBar&&this.updateControlBar(),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()}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=this.renderer.constructor.name;return!!(t&&a!=="YouTubeRenderer"||i&&a!=="VimeoRenderer"||s&&a!=="HLSRenderer"||!t&&!i&&!s&&a!=="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.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;e.requestFullscreen?e.requestFullscreen():e.webkitRequestFullscreen?e.webkitRequestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.msRequestFullscreen&&e.msRequestFullscreen(),this.state.fullscreen=!0,this.container.classList.add(`${this.options.classPrefix}-fullscreen`),this.emit("fullscreenchange",!0)}exitFullscreen(){document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen(),this.state.fullscreen=!1,this.container.classList.remove(`${this.options.classPrefix}-fullscreen`),this.emit("fullscreenchange",!1)}toggleFullscreen(){this.state.fullscreen?this.exitFullscreen():this.enterFullscreen()}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 enableAudioDescription(){if(!this.audioDescriptionSrc){console.warn("VidPly: No audio description source provided");return}let e=this.state.currentTime,t=this.state.playing;this.element.src=this.audioDescriptionSrc,await new Promise(i=>{let s=()=>{this.element.removeEventListener("loadedmetadata",s),i()};this.element.addEventListener("loadedmetadata",s)}),this.seek(e),t&&this.play(),this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled")}async disableAudioDescription(){if(!this.originalSrc)return;let e=this.state.currentTime,t=this.state.playing;this.element.src=this.originalSrc,await new Promise(i=>{let s=()=>{this.element.removeEventListener("loadedmetadata",s),i()};this.element.addEventListener("loadedmetadata",s)}),this.seek(e),t&&this.play(),this.state.audioDescriptionEnabled=!1,this.emit("audiodescriptiondisabled")}async toggleAudioDescription(){let t=Array.from(this.element.textTracks||[]).find(i=>i.kind==="descriptions");t?t.mode==="showing"?(t.mode="hidden",this.state.audioDescriptionEnabled=!1,this.emit("audiodescriptiondisabled")):(t.mode="showing",this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled")):this.audioDescriptionSrc&&(this.state.audioDescriptionEnabled?await this.disableAudioDescription():await this.enableAudioDescription())}enableSignLanguage(){if(!this.signLanguageSrc){console.warn("No sign language video source provided");return}if(this.signLanguageWrapper){this.signLanguageWrapper.style.display="block",this.state.signLanguageEnabled=!0,this.emit("signlanguageenabled");return}this.signLanguageWrapper=document.createElement("div"),this.signLanguageWrapper.className="vidply-sign-language-wrapper",this.signLanguageWrapper.setAttribute("tabindex","0"),this.signLanguageWrapper.setAttribute("aria-label","Sign Language Video - Press D to drag with keyboard, R to resize"),this.signLanguageVideo=document.createElement("video"),this.signLanguageVideo.className="vidply-sign-language-video",this.signLanguageVideo.src=this.signLanguageSrc,this.signLanguageVideo.setAttribute("aria-label",c.t("player.signLanguage")),this.signLanguageVideo.muted=!0;let e=["nw","ne","sw","se"].map(i=>{let s=document.createElement("div");return s.className=`vidply-sign-resize-handle vidply-sign-resize-${i}`,s.setAttribute("data-direction",i),s.setAttribute("aria-label",`Resize ${i.toUpperCase()}`),s});this.signLanguageWrapper.appendChild(this.signLanguageVideo),e.forEach(i=>this.signLanguageWrapper.appendChild(i));let t=this.storage.getSignLanguagePreferences();t&&t.size&&t.size.width?this.signLanguageWrapper.style.width=t.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),this.state.signLanguageEnabled=!0,this.emit("signlanguageenabled")}disableSignLanguage(){this.signLanguageWrapper&&(this.signLanguageWrapper.style.display="none"),this.state.signLanguageEnabled=!1,this.emit("signlanguagedisabled")}toggleSignLanguage(){this.state.signLanguageEnabled?this.disableSignLanguage():this.enableSignLanguage()}setupSignLanguageInteraction(){if(!this.signLanguageWrapper)return;let e=!1,t=!1,i=null,s=0,a=0,r=0,l=0,o=0,h=0,u=!1,g=!1,m=y=>{if(y.target!==this.signLanguageVideo)return;y.preventDefault(),e=!0,s=y.clientX,a=y.clientY;let f=this.signLanguageWrapper.getBoundingClientRect();r=f.left,l=f.top,this.signLanguageWrapper.classList.add("vidply-sign-dragging")},b=y=>{if(!y.target.classList.contains("vidply-sign-resize-handle"))return;y.preventDefault(),y.stopPropagation(),t=!0,i=y.target.getAttribute("data-direction"),s=y.clientX,a=y.clientY;let f=this.signLanguageWrapper.getBoundingClientRect();r=f.left,l=f.top,o=f.width,h=f.height,this.signLanguageWrapper.classList.add("vidply-sign-resizing")},M=y=>{if(e){let f=y.clientX-s,x=y.clientY-a,k=this.videoWrapper.getBoundingClientRect(),L=this.container.getBoundingClientRect(),P=this.signLanguageWrapper.getBoundingClientRect(),E=k.left-L.left,v=k.top-L.top,C=r+f-L.left,z=l+x-L.top,O=95;C=Math.max(E,Math.min(C,E+k.width-P.width)),z=Math.max(v,Math.min(z,v+k.height-P.height-O)),this.signLanguageWrapper.style.left=`${C}px`,this.signLanguageWrapper.style.top=`${z}px`,this.signLanguageWrapper.style.right="auto",this.signLanguageWrapper.style.bottom="auto",this.signLanguageWrapper.classList.remove(...Array.from(this.signLanguageWrapper.classList).filter(ee=>ee.startsWith("vidply-sign-position-")))}else if(t){let f=y.clientX-s,x=this.videoWrapper.getBoundingClientRect(),k=this.container.getBoundingClientRect(),L=o,P=r-k.left;if(i.includes("e")){L=Math.max(150,o+f);let E=x.right-r;L=Math.min(L,E)}if(i.includes("w")){let E=Math.max(150,o-f),v=r+(o-E)-k.left,C=x.left-k.left;v>=C&&(L=E,P=v)}this.signLanguageWrapper.style.width=`${L}px`,this.signLanguageWrapper.style.height="auto",i.includes("w")&&(this.signLanguageWrapper.style.left=`${P}px`),this.signLanguageWrapper.style.right="auto",this.signLanguageWrapper.style.bottom="auto",this.signLanguageWrapper.classList.remove(...Array.from(this.signLanguageWrapper.classList).filter(E=>E.startsWith("vidply-sign-position-")))}},w=()=>{(e||t)&&this.saveSignLanguagePreferences(),e=!1,t=!1,i=null,this.signLanguageWrapper.classList.remove("vidply-sign-dragging","vidply-sign-resizing")},K=y=>{if(y.key==="d"||y.key==="D"){u=!u,g=!1,this.signLanguageWrapper.classList.toggle("vidply-sign-keyboard-drag",u),this.signLanguageWrapper.classList.remove("vidply-sign-keyboard-resize"),y.preventDefault();return}if(y.key==="r"||y.key==="R"){g=!g,u=!1,this.signLanguageWrapper.classList.toggle("vidply-sign-keyboard-resize",g),this.signLanguageWrapper.classList.remove("vidply-sign-keyboard-drag"),y.preventDefault();return}if(y.key==="Escape"){u=!1,g=!1,this.signLanguageWrapper.classList.remove("vidply-sign-keyboard-drag","vidply-sign-keyboard-resize"),y.preventDefault();return}if(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].includes(y.key)){let f=y.shiftKey?10:5,x=this.signLanguageWrapper.getBoundingClientRect(),k=this.videoWrapper.getBoundingClientRect(),L=this.container.getBoundingClientRect(),P=k.left-L.left,E=k.top-L.top;if(u){let v=x.left-L.left,C=x.top-L.top;y.key==="ArrowLeft"&&(v-=f),y.key==="ArrowRight"&&(v+=f),y.key==="ArrowUp"&&(C-=f),y.key==="ArrowDown"&&(C+=f);let z=95;v=Math.max(P,Math.min(v,P+k.width-x.width)),C=Math.max(E,Math.min(C,E+k.height-x.height-z)),this.signLanguageWrapper.style.left=`${v}px`,this.signLanguageWrapper.style.top=`${C}px`,this.signLanguageWrapper.style.right="auto",this.signLanguageWrapper.style.bottom="auto",this.signLanguageWrapper.classList.remove(...Array.from(this.signLanguageWrapper.classList).filter(O=>O.startsWith("vidply-sign-position-"))),this.saveSignLanguagePreferences(),y.preventDefault()}else if(g){let v=x.width;y.key==="ArrowLeft"&&(v-=f),y.key==="ArrowRight"&&(v+=f),y.key==="ArrowUp"&&(v+=f),y.key==="ArrowDown"&&(v-=f),v=Math.max(150,v),v=Math.min(v,k.width),this.signLanguageWrapper.style.width=`${v}px`,this.signLanguageWrapper.style.height="auto",this.saveSignLanguagePreferences(),y.preventDefault()}}};this.signLanguageVideo.addEventListener("mousedown",m);let Y=this.signLanguageWrapper.querySelectorAll(".vidply-sign-resize-handle");Y.forEach(y=>y.addEventListener("mousedown",b)),document.addEventListener("mousemove",M),document.addEventListener("mouseup",w),this.signLanguageWrapper.addEventListener("keydown",K),this.signLanguageInteractionHandlers={mouseDownVideo:m,mouseDownHandle:b,mouseMove:M,mouseUp:w,keyDown:K,handles:Y}}constrainSignLanguagePosition(){if(!this.signLanguageWrapper||!this.videoWrapper)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,l=e.height,o=i.width||280,h=i.height||280*9/16,u,g,m=16,b=95;switch(this.signLanguageDesiredPosition||"bottom-right"){case"bottom-right":u=s+r-o-m,g=a+l-h-b;break;case"bottom-left":u=s+m,g=a+l-h-b;break;case"top-right":u=s+r-o-m,g=a+m;break;case"top-left":u=s+m,g=a+m;break;default:u=s+r-o-m,g=a+l-h-b}u=Math.max(s,Math.min(u,s+r-o)),g=Math.max(a,Math.min(g,a+l-h-b)),this.signLanguageWrapper.style.left=`${u}px`,this.signLanguageWrapper.style.top=`${g}px`,this.signLanguageWrapper.style.right="auto",this.signLanguageWrapper.style.bottom="auto",this.signLanguageWrapper.classList.remove(...Array.from(this.signLanguageWrapper.classList).filter(w=>w.startsWith("vidply-sign-position-")))}saveSignLanguagePreferences(){this.signLanguageWrapper&&this.storage.saveSignLanguagePreferences({size:{width:this.signLanguageWrapper.style.width}})}cleanupSignLanguage(){this.signLanguageHandlers&&(this.off("play",this.signLanguageHandlers.play),this.off("pause",this.signLanguageHandlers.pause),this.off("timeupdate",this.signLanguageHandlers.timeupdate),this.off("ratechange",this.signLanguageHandlers.ratechange),this.signLanguageHandlers=null),this.signLanguageInteractionHandlers&&(this.signLanguageVideo&&this.signLanguageVideo.removeEventListener("mousedown",this.signLanguageInteractionHandlers.mouseDownVideo),this.signLanguageInteractionHandlers.handles&&this.signLanguageInteractionHandlers.handles.forEach(e=>{e.removeEventListener("mousedown",this.signLanguageInteractionHandlers.mouseDownHandle)}),document.removeEventListener("mousemove",this.signLanguageInteractionHandlers.mouseMove),document.removeEventListener("mouseup",this.signLanguageInteractionHandlers.mouseUp),this.signLanguageWrapper&&this.signLanguageWrapper.removeEventListener("keydown",this.signLanguageInteractionHandlers.keyDown),this.signLanguageInteractionHandlers=null),this.signLanguageWrapper&&this.signLanguageWrapper.parentNode&&(this.signLanguageVideo&&(this.signLanguageVideo.pause(),this.signLanguageVideo.src=""),this.signLanguageWrapper.parentNode.removeChild(this.signLanguageWrapper),this.signLanguageWrapper=null,this.signLanguageVideo=null)}showSettings(){console.warn("[VidPly] Settings dialog has been removed. Use individual control buttons (speed, captions, etc.)")}hideSettings(){}getCurrentTime(){return this.state.currentTime}getDuration(){return this.state.duration}isPlaying(){return this.state.playing}isPaused(){return this.state.paused}isEnded(){return this.state.ended}isMuted(){return this.state.muted}isFullscreen(){return this.state.fullscreen}handleError(e){this.log("Error:",e,"error"),this.emit("error",e),this.options.onError&&this.options.onError.call(this,e)}log(e,t="log"){this.options.debug&&console[t]("[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.positionTranscript()},window.addEventListener("resize",this.resizeHandler)),window.matchMedia){this.orientationHandler=t=>{setTimeout(()=>{this.transcriptManager&&this.transcriptManager.isVisible&&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.emit("fullscreenchange",e),this.controlBar&&this.controlBar.updateFullscreenButton(),this.signLanguageWrapper&&this.signLanguageWrapper.style.display!=="none"&&setTimeout(()=>{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(){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.container&&this.container.parentNode&&(this.container.parentNode.insertBefore(this.element,this.container),this.container.parentNode.removeChild(this.container)),this.removeAllListeners()}};D.instances=[];var I=class{constructor(e,t={}){this.player=e,this.tracks=[],this.currentIndex=-1,this.options={autoAdvance:t.autoAdvance!==!1,loop:t.loop||!1,showPanel:t.showPanel!==!1,...t},this.container=null,this.playlistPanel=null,this.trackInfoElement=null,this.handleTrackEnd=this.handleTrackEnd.bind(this),this.handleTrackError=this.handleTrackError.bind(this),this.player.playlistManager=this,this.init(),this.updatePlayerControls()}init(){this.player.on("ended",this.handleTrackEnd),this.player.on("error",this.handleTrackError),this.options.showPanel&&this.createUI()}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.play(0)}play(e,t=!1){if(e<0||e>=this.tracks.length){console.warn("VidPly Playlist: Invalid track index",e);return}let i=this.tracks[e];this.currentIndex=e,this.player.load({src:i.src,type:i.type,poster:i.poster,tracks:i.tracks||[]}),this.updateTrackInfo(i),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:i,total:this.tracks.length}),t&&this.player.container&&this.player.container.focus(),setTimeout(()=>{this.player.play()},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.options.autoAdvance&&this.next()}handleTrackError(e){console.error("VidPly Playlist: Track error",e),this.options.autoAdvance&&setTimeout(()=>{this.next()},1e3)}createUI(){if(this.container=this.player.container,!this.container){console.warn("VidPly Playlist: No container found");return}this.trackInfoElement=n.createElement("div",{className:"vidply-track-info",role:"status","aria-live":"polite","aria-atomic":"true"}),this.trackInfoElement.style.display="none",this.container.appendChild(this.trackInfoElement),this.playlistPanel=n.createElement("div",{className:"vidply-playlist-panel",role:"region","aria-label":"Media playlist"}),this.playlistPanel.style.display="none",this.container.appendChild(this.playlistPanel)}updateTrackInfo(e){if(!this.trackInfoElement)return;let t=this.currentIndex+1,i=this.tracks.length,s=e.title||"Untitled",a=e.artist||"",r=`Now playing: Track ${t} of ${i}. ${s}${a?" by "+a:""}`;this.trackInfoElement.innerHTML=`
|
|
14
|
-
<span class="vidply-sr-only">${
|
|
13
|
+
`,document.body.appendChild(i)),i.textContent="",setTimeout(()=>{i.textContent=e},100)}updateShortcut(e,t){Array.isArray(t)&&(this.shortcuts[e]=t)}destroy(){}};var H=class{constructor(e){this.player=e,this.transcriptWindow=null,this.transcriptEntries=[],this.metadataCues=[],this.currentActiveEntry=null,this.isVisible=!1,this.storage=new A("vidply"),this.isDragging=!1,this.dragOffsetX=0,this.dragOffsetY=0,this.isResizing=!1,this.resizeDirection=null,this.resizeStartX=0,this.resizeStartY=0,this.resizeStartWidth=0,this.resizeStartHeight=0,this.resizeEnabled=!1,this.settingsMenuVisible=!1,this.settingsMenu=null,this.settingsButton=null,this.settingsMenuJustOpened=!1,this.keyboardDragMode=!1,this.styleDialog=null,this.styleDialogVisible=!1,this.styleDialogJustOpened=!1;let t=this.storage.getTranscriptPreferences();this.transcriptStyle={fontSize:(t==null?void 0:t.fontSize)||this.player.options.transcriptFontSize||"100%",fontFamily:(t==null?void 0:t.fontFamily)||this.player.options.transcriptFontFamily||"sans-serif",color:(t==null?void 0:t.color)||this.player.options.transcriptColor||"#ffffff",backgroundColor:(t==null?void 0:t.backgroundColor)||this.player.options.transcriptBackgroundColor||"#1e1e1e",opacity:(t==null?void 0:t.opacity)??this.player.options.transcriptOpacity??.98},this.handlers={timeupdate:()=>this.updateActiveEntry(),resize:null,mousemove:null,mouseup:null,touchmove:null,touchend:null,mousedown:null,touchstart:null,keydown:null,settingsClick:null,settingsKeydown:null,documentClick:null,styleDialogKeydown:null},this.init()}init(){this.player.on("timeupdate",this.handlers.timeupdate),this.player.on("fullscreenchange",()=>{this.isVisible&&setTimeout(()=>this.positionTranscript(),100)})}toggleTranscript(){this.isVisible?this.hideTranscript():this.showTranscript()}showTranscript(){if(this.transcriptWindow){this.transcriptWindow.style.display="flex",this.isVisible=!0,setTimeout(()=>{this.settingsButton&&this.settingsButton.focus()},150);return}this.createTranscriptWindow(),this.loadTranscriptData(),this.transcriptWindow&&(this.transcriptWindow.style.display="flex",setTimeout(()=>this.positionTranscript(),0),setTimeout(()=>{this.settingsButton&&this.settingsButton.focus()},150)),this.isVisible=!0}hideTranscript(){this.transcriptWindow&&(this.transcriptWindow.style.display="none",this.isVisible=!1)}createTranscriptWindow(){this.transcriptWindow=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-window`,attributes:{role:"dialog","aria-label":"Video Transcript",tabindex:"-1"}}),this.transcriptHeader=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header`,attributes:{"aria-label":"Drag to reposition transcript. Use arrow keys to move, Home to reset position, Escape to close.",tabindex:"0"}}),this.headerLeft=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header-left`}),this.settingsButton=l.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings`,attributes:{type:"button","aria-label":p.t("transcript.settings"),"aria-expanded":"false"}}),this.settingsButton.appendChild(b("settings")),this.handlers.settingsClick=s=>{s.preventDefault(),s.stopPropagation(),this.settingsMenuVisible?this.hideSettingsMenu():this.showSettingsMenu()},this.settingsButton.addEventListener("click",this.handlers.settingsClick),this.handlers.settingsKeydown=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("keydown",this.handlers.settingsKeydown);let e=l.createElement("h3",{textContent:p.t("transcript.title")});this.headerLeft.appendChild(this.settingsButton),this.headerLeft.appendChild(e);let t=l.createElement("button",{className:`${this.player.options.classPrefix}-transcript-close`,attributes:{type:"button","aria-label":p.t("transcript.close")}});t.appendChild(b("close")),t.addEventListener("click",()=>this.hideTranscript()),this.transcriptHeader.appendChild(this.headerLeft),this.transcriptHeader.appendChild(t),this.transcriptContent=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-content`}),this.transcriptWindow.appendChild(this.transcriptHeader),this.transcriptWindow.appendChild(this.transcriptContent),this.player.container.appendChild(this.transcriptWindow),this.positionTranscript(),this.setupDragAndDrop(),this.handlers.documentClick=s=>{this.settingsMenuJustOpened||this.styleDialogJustOpened||this.settingsButton&&this.settingsButton.contains(s.target)||this.settingsMenu&&this.settingsMenu.contains(s.target)||(this.settingsMenuVisible&&this.hideSettingsMenu(),this.styleDialogVisible&&this.styleDialog&&!this.styleDialog.contains(s.target)&&this.hideStyleDialog())},this.documentClickHandlerAdded=!1;let i;this.handlers.resize=()=>{clearTimeout(i),i=setTimeout(()=>this.positionTranscript(),100)},window.addEventListener("resize",this.handlers.resize)}positionTranscript(){if(!this.transcriptWindow||!this.player.videoWrapper||!this.isVisible)return;let e=window.innerWidth<640,t=this.player.videoWrapper.getBoundingClientRect(),i=this.player.state.fullscreen;e&&!i?(this.transcriptWindow.style.position="relative",this.transcriptWindow.style.left="0",this.transcriptWindow.style.right="0",this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.top="auto",this.transcriptWindow.style.width="100%",this.transcriptWindow.style.maxWidth="100%",this.transcriptWindow.style.maxHeight="400px",this.transcriptWindow.style.height="auto",this.transcriptWindow.style.borderRadius="0",this.transcriptWindow.style.transform="none",this.transcriptWindow.style.border="none",this.transcriptWindow.style.borderTop="1px solid var(--vidply-border-light)",this.transcriptWindow.style.boxShadow="none",this.transcriptHeader&&(this.transcriptHeader.style.cursor="default"),this.transcriptWindow.parentNode!==this.player.container&&this.player.container.appendChild(this.transcriptWindow)):i?(this.transcriptWindow.style.position="fixed",this.transcriptWindow.style.left="auto",this.transcriptWindow.style.right="20px",this.transcriptWindow.style.bottom="80px",this.transcriptWindow.style.top="auto",this.transcriptWindow.style.maxHeight="calc(100vh - 180px)",this.transcriptWindow.style.height="auto",this.transcriptWindow.style.width="400px",this.transcriptWindow.style.maxWidth="400px",this.transcriptWindow.style.borderRadius="8px",this.transcriptWindow.style.border="1px solid var(--vidply-border)",this.transcriptWindow.style.borderTop="",this.transcriptWindow.parentNode!==this.player.container&&this.player.container.appendChild(this.transcriptWindow)):(this.transcriptWindow.style.position="absolute",this.transcriptWindow.style.left=`${t.width+8}px`,this.transcriptWindow.style.right="auto",this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.top="0",this.transcriptWindow.style.height=`${t.height}px`,this.transcriptWindow.style.maxHeight="none",this.transcriptWindow.style.width="400px",this.transcriptWindow.style.maxWidth="400px",this.transcriptWindow.style.borderRadius="8px",this.transcriptWindow.style.border="1px solid var(--vidply-border)",this.transcriptWindow.style.borderTop="",this.transcriptHeader&&(this.transcriptHeader.style.cursor="move"),this.transcriptWindow.parentNode!==this.player.container&&this.player.container.appendChild(this.transcriptWindow))}loadTranscriptData(){this.transcriptEntries=[],this.transcriptContent.innerHTML="";let e=Array.from(this.player.element.textTracks),t=e.find(n=>n.kind==="captions"||n.kind==="subtitles"),i=e.find(n=>n.kind==="descriptions"),s=e.find(n=>n.kind==="metadata");if(!t&&!i&&!s){this.showNoTranscriptMessage();return}let a=[t,i,s].filter(Boolean);if(a.forEach(n=>{n.mode==="disabled"&&(n.mode="hidden")}),a.some(n=>!n.cues||n.cues.length===0)){let n=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-loading`,textContent:p.t("transcript.loading")});this.transcriptContent.appendChild(n);let c=0,m=()=>{c++,c>=a.length&&this.loadTranscriptData()};a.forEach(y=>{y.addEventListener("load",m,{once:!0})}),setTimeout(()=>{this.loadTranscriptData()},500);return}let o=[];t&&t.cues&&Array.from(t.cues).forEach(n=>{o.push({cue:n,type:"caption"})}),i&&i.cues&&Array.from(i.cues).forEach(n=>{o.push({cue:n,type:"description"})}),s&&s.cues&&(this.metadataCues=Array.from(s.cues),this.setupMetadataHandling()),o.sort((n,c)=>n.cue.startTime-c.cue.startTime),o.forEach((n,c)=>{let m=this.createTranscriptEntry(n.cue,c,n.type);this.transcriptEntries.push({element:m,cue:n.cue,type:n.type,startTime:n.cue.startTime,endTime:n.cue.endTime}),this.transcriptContent.appendChild(m)}),this.applyTranscriptStyles()}setupMetadataHandling(){if(!this.metadataCues||this.metadataCues.length===0)return;let t=Array.from(this.player.element.textTracks).find(i=>i.kind==="metadata");t&&t.addEventListener("cuechange",()=>{Array.from(t.activeCues||[]).forEach(s=>{this.handleMetadataCue(s)})})}handleMetadataCue(e){let t=e.text.trim();this.player.emit("metadata",{time:e.startTime,endTime:e.endTime,text:t,cue:e}),t.includes("PAUSE")&&this.player.emit("metadata:pause",{time:e.startTime,text:t});let i=t.match(/FOCUS:([\w#-]+)/);i&&this.player.emit("metadata:focus",{time:e.startTime,target:i[1],text:t});let s=t.match(/#[\w-]+/g);s&&this.player.emit("metadata:hashtags",{time:e.startTime,hashtags:s,text:t})}createTranscriptEntry(e,t,i="caption"){let s=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-entry ${this.player.options.classPrefix}-transcript-${i}`,attributes:{"data-start":String(e.startTime),"data-end":String(e.endTime),"data-type":i,role:"button",tabindex:"0"}}),a=l.createElement("span",{className:`${this.player.options.classPrefix}-transcript-time`,textContent:D.formatTime(e.startTime)}),r=l.createElement("span",{className:`${this.player.options.classPrefix}-transcript-text`,textContent:this.stripVTTFormatting(e.text)});s.appendChild(a),s.appendChild(r);let o=()=>{this.player.seek(e.startTime),this.player.state.paused&&this.player.play()};return s.addEventListener("click",o),s.addEventListener("keydown",n=>{(n.key==="Enter"||n.key===" ")&&(n.preventDefault(),o())}),s}stripVTTFormatting(e){return e.replace(/<[^>]+>/g,"").replace(/\n/g," ").trim()}showNoTranscriptMessage(){let e=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-empty`,textContent:p.t("transcript.noTranscript")});this.transcriptContent.appendChild(e)}updateActiveEntry(){if(!this.isVisible||this.transcriptEntries.length===0)return;let e=this.player.state.currentTime,t=this.transcriptEntries.find(i=>e>=i.startTime&&e<i.endTime);t&&t!==this.currentActiveEntry?(this.currentActiveEntry&&this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),t.element.classList.add(`${this.player.options.classPrefix}-transcript-entry-active`),this.scrollToEntry(t.element),this.currentActiveEntry=t):!t&&this.currentActiveEntry&&(this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),this.currentActiveEntry=null)}scrollToEntry(e){if(!this.transcriptContent)return;let t=this.transcriptContent.getBoundingClientRect(),i=e.getBoundingClientRect();if(i.top<t.top||i.bottom>t.bottom){let s=e.offsetTop-this.transcriptContent.clientHeight/2+e.clientHeight/2;this.transcriptContent.scrollTo({top:s,behavior:"smooth"})}}setupDragAndDrop(){!this.transcriptHeader||!this.transcriptWindow||(this.handlers.mousedown=e=>{e.target.closest(`.${this.player.options.classPrefix}-transcript-close`)||e.target.closest(`.${this.player.options.classPrefix}-transcript-settings`)||e.target.closest(`.${this.player.options.classPrefix}-transcript-settings-menu`)||e.target.closest(`.${this.player.options.classPrefix}-transcript-style-dialog`)||(this.startDragging(e.clientX,e.clientY),e.preventDefault())},this.handlers.mousemove=e=>{this.isDragging&&this.drag(e.clientX,e.clientY)},this.handlers.mouseup=()=>{this.isDragging&&this.stopDragging()},this.handlers.touchstart=e=>{if(e.target.closest(`.${this.player.options.classPrefix}-transcript-close`)||e.target.closest(`.${this.player.options.classPrefix}-transcript-settings`)||e.target.closest(`.${this.player.options.classPrefix}-transcript-settings-menu`)||e.target.closest(`.${this.player.options.classPrefix}-transcript-style-dialog`))return;let t=window.innerWidth<640,i=this.player.state.fullscreen,s=e.touches[0];t&&!i||this.startDragging(s.clientX,s.clientY)},this.handlers.touchmove=e=>{let t=window.innerWidth<640,i=this.player.state.fullscreen;if(!(t&&!i)&&this.isDragging){let s=e.touches[0];this.drag(s.clientX,s.clientY),e.preventDefault()}},this.handlers.touchend=()=>{this.isDragging&&this.stopDragging()},this.handlers.keydown=e=>{if(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"].includes(e.key)){if(!this.keyboardDragMode)return;e.preventDefault(),e.stopPropagation();let t=e.shiftKey?50:10,i=parseFloat(this.transcriptWindow.style.left)||0,s=parseFloat(this.transcriptWindow.style.top)||0;if(window.getComputedStyle(this.transcriptWindow).transform!=="none"){let n=this.transcriptWindow.getBoundingClientRect();i=n.left,s=n.top,this.transcriptWindow.style.transform="none",this.transcriptWindow.style.left=`${i}px`,this.transcriptWindow.style.top=`${s}px`}let r=i,o=s;switch(e.key){case"ArrowLeft":r-=t;break;case"ArrowRight":r+=t;break;case"ArrowUp":o-=t;break;case"ArrowDown":o+=t;break}this.transcriptWindow.style.left=`${r}px`,this.transcriptWindow.style.top=`${o}px`;return}if(e.key==="Home"){e.preventDefault(),e.stopPropagation(),this.resetPosition();return}if(e.key==="Escape"){e.preventDefault(),e.stopPropagation(),this.styleDialogVisible?this.hideStyleDialog():this.keyboardDragMode?this.disableKeyboardDragMode():this.settingsMenuVisible?this.hideSettingsMenu():this.hideTranscript();return}},this.transcriptHeader.addEventListener("mousedown",this.handlers.mousedown),document.addEventListener("mousemove",this.handlers.mousemove),document.addEventListener("mouseup",this.handlers.mouseup),this.transcriptHeader.addEventListener("touchstart",this.handlers.touchstart),document.addEventListener("touchmove",this.handlers.touchmove),document.addEventListener("touchend",this.handlers.touchend),this.transcriptHeader.addEventListener("keydown",this.handlers.keydown))}startDragging(e,t){let i=this.transcriptWindow.getBoundingClientRect(),s=this.player.container.getBoundingClientRect(),a=i.left-s.left,r=i.top-s.top;window.getComputedStyle(this.transcriptWindow).transform!=="none"&&(this.transcriptWindow.style.transform="none",this.transcriptWindow.style.left=`${a}px`,this.transcriptWindow.style.top=`${r}px`),this.dragOffsetX=e-i.left,this.dragOffsetY=t-i.top,this.isDragging=!0,this.transcriptWindow.classList.add(`${this.player.options.classPrefix}-transcript-dragging`),document.body.style.cursor="grabbing",document.body.style.userSelect="none"}drag(e,t){if(!this.isDragging)return;let i=e-this.dragOffsetX,s=t-this.dragOffsetY,a=this.player.container.getBoundingClientRect(),r=i-a.left,o=s-a.top;this.transcriptWindow.style.left=`${r}px`,this.transcriptWindow.style.top=`${o}px`}stopDragging(){this.isDragging=!1,this.transcriptWindow.classList.remove(`${this.player.options.classPrefix}-transcript-dragging`),document.body.style.cursor="",document.body.style.userSelect=""}setPosition(e,t){let i=this.transcriptWindow.getBoundingClientRect(),s=document.documentElement.clientWidth,a=document.documentElement.clientHeight,r=100,o=-(i.width-r),n=-(i.height-r),c=s-r,m=a-r;e=Math.max(o,Math.min(e,c)),t=Math.max(n,Math.min(t,m)),this.transcriptWindow.style.left=`${e}px`,this.transcriptWindow.style.top=`${t}px`,this.transcriptWindow.style.transform="none"}resetPosition(){this.transcriptWindow.style.left="50%",this.transcriptWindow.style.top="50%",this.transcriptWindow.style.transform="translate(-50%, -50%)"}toggleKeyboardDragMode(){this.keyboardDragMode?this.disableKeyboardDragMode():this.enableKeyboardDragMode()}enableKeyboardDragMode(){this.keyboardDragMode=!0,this.transcriptWindow.classList.add(`${this.player.options.classPrefix}-transcript-keyboard-drag`),this.settingsButton&&this.settingsButton.setAttribute("aria-label","Keyboard drag mode active. Use arrow keys to move window. Press D or Escape to exit.");let e=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-drag-indicator`,textContent:p.t("transcript.keyboardDragActive")});this.transcriptHeader.appendChild(e),this.settingsMenuVisible&&this.hideSettingsMenu(),this.transcriptHeader.focus()}disableKeyboardDragMode(){this.keyboardDragMode=!1,this.transcriptWindow.classList.remove(`${this.player.options.classPrefix}-transcript-keyboard-drag`),this.settingsButton&&this.settingsButton.setAttribute("aria-label","Transcript settings. Press Enter to open menu, or D to enable drag mode");let e=this.transcriptHeader.querySelector(`.${this.player.options.classPrefix}-transcript-drag-indicator`);e&&e.remove(),this.settingsButton&&this.settingsButton.focus()}toggleSettingsMenu(){this.settingsMenuVisible?this.hideSettingsMenu():this.showSettingsMenu()}showSettingsMenu(){if(this.settingsMenuJustOpened=!0,setTimeout(()=>{this.settingsMenuJustOpened=!1},350),this.documentClickHandlerAdded||setTimeout(()=>{document.addEventListener("click",this.handlers.documentClick),this.documentClickHandlerAdded=!0},300),this.settingsMenu){this.settingsMenu.style.display="block",this.settingsMenuVisible=!0;return}this.settingsMenu=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-settings-menu`});let e=l.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings-item`,attributes:{type:"button","aria-label":p.t("transcript.keyboardDragMode")}}),t=b("move"),i=l.createElement("span",{textContent:p.t("transcript.keyboardDragMode")});e.appendChild(t),e.appendChild(i),e.addEventListener("click",()=>{this.toggleKeyboardDragMode(),this.hideSettingsMenu()});let s=l.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings-item`,attributes:{type:"button","aria-label":p.t("transcript.styleTranscript")}}),a=b("settings"),r=l.createElement("span",{textContent:p.t("transcript.styleTranscript")});s.appendChild(a),s.appendChild(r),s.addEventListener("click",d=>{d.preventDefault(),d.stopPropagation(),this.hideSettingsMenu(),setTimeout(()=>{this.showStyleDialog()},50)});let o=l.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings-item`,attributes:{type:"button","aria-label":p.t("transcript.resizeWindow")}}),n=b("resize"),c=l.createElement("span",{textContent:p.t("transcript.resizeWindow")});o.appendChild(n),o.appendChild(c),o.addEventListener("click",()=>{this.toggleResizeMode(),this.hideSettingsMenu()});let m=l.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings-item`,attributes:{type:"button","aria-label":p.t("transcript.closeMenu")}}),y=b("close"),g=l.createElement("span",{textContent:p.t("transcript.closeMenu")});m.appendChild(y),m.appendChild(g),m.addEventListener("click",()=>{this.hideSettingsMenu()}),this.settingsMenu.appendChild(e),this.settingsMenu.appendChild(o),this.settingsMenu.appendChild(s),this.settingsMenu.appendChild(m),this.headerLeft?this.headerLeft.appendChild(this.settingsMenu):this.transcriptHeader.appendChild(this.settingsMenu),this.settingsMenuVisible=!0,this.settingsMenu.style.display="block",this.settingsButton&&this.settingsButton.setAttribute("aria-expanded","true"),setTimeout(()=>{let d=this.settingsMenu.querySelector(`.${this.player.options.classPrefix}-transcript-settings-item`);d&&d.focus()},0)}hideSettingsMenu(){this.settingsMenu&&(this.settingsMenu.style.display="none",this.settingsMenuVisible=!1,this.settingsMenuJustOpened=!1,this.settingsButton&&(this.settingsButton.setAttribute("aria-expanded","false"),this.settingsButton.focus()))}enableMoveMode(){this.transcriptWindow.classList.add(`${this.player.options.classPrefix}-transcript-move-mode`);let e=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-move-tooltip`,textContent:"Drag with mouse or press D for keyboard drag mode"});this.transcriptHeader.appendChild(e),setTimeout(()=>{this.transcriptWindow.classList.remove(`${this.player.options.classPrefix}-transcript-move-mode`),e.parentNode&&e.remove()},2e3)}toggleResizeMode(){this.resizeEnabled=!this.resizeEnabled,this.resizeEnabled?this.enableResizeHandles():this.disableResizeHandles()}enableResizeHandles(){if(!this.transcriptWindow)return;["n","s","e","w","ne","nw","se","sw"].forEach(t=>{let i=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-resize-handle ${this.player.options.classPrefix}-transcript-resize-${t}`,attributes:{"data-direction":t}});i.addEventListener("mousedown",s=>this.startResize(s,t)),i.addEventListener("touchstart",s=>this.startResize(s.touches[0],t)),this.transcriptWindow.appendChild(i)}),this.transcriptWindow.classList.add(`${this.player.options.classPrefix}-transcript-resizable`),this.handlers.resizeMove=t=>{this.isResizing&&this.performResize(t.clientX,t.clientY)},this.handlers.resizeEnd=()=>{this.isResizing&&this.stopResize()},this.handlers.resizeTouchMove=t=>{this.isResizing&&(this.performResize(t.touches[0].clientX,t.touches[0].clientY),t.preventDefault())},document.addEventListener("mousemove",this.handlers.resizeMove),document.addEventListener("mouseup",this.handlers.resizeEnd),document.addEventListener("touchmove",this.handlers.resizeTouchMove),document.addEventListener("touchend",this.handlers.resizeEnd)}disableResizeHandles(){if(!this.transcriptWindow)return;this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-resize-handle`).forEach(t=>t.remove()),this.transcriptWindow.classList.remove(`${this.player.options.classPrefix}-transcript-resizable`),this.handlers.resizeMove&&document.removeEventListener("mousemove",this.handlers.resizeMove),this.handlers.resizeEnd&&document.removeEventListener("mouseup",this.handlers.resizeEnd),this.handlers.resizeTouchMove&&document.removeEventListener("touchmove",this.handlers.resizeTouchMove),document.removeEventListener("touchend",this.handlers.resizeEnd)}startResize(e,t){e.stopPropagation(),e.preventDefault(),this.isResizing=!0,this.resizeDirection=t,this.resizeStartX=e.clientX,this.resizeStartY=e.clientY;let i=this.transcriptWindow.getBoundingClientRect();this.resizeStartWidth=i.width,this.resizeStartHeight=i.height,this.transcriptWindow.classList.add(`${this.player.options.classPrefix}-transcript-resizing`),document.body.style.cursor=this.getResizeCursor(t),document.body.style.userSelect="none"}performResize(e,t){if(!this.isResizing)return;let i=e-this.resizeStartX,s=t-this.resizeStartY,a=this.resizeStartWidth,r=this.resizeStartHeight,o=this.resizeDirection;o.includes("e")&&(a=this.resizeStartWidth+i),o.includes("w")&&(a=this.resizeStartWidth-i),o.includes("s")&&(r=this.resizeStartHeight+s),o.includes("n")&&(r=this.resizeStartHeight-s);let n=300,c=200,m=window.innerWidth-40,y=window.innerHeight-40;if(a=Math.max(n,Math.min(a,m)),r=Math.max(c,Math.min(r,y)),this.transcriptWindow.style.width=`${a}px`,this.transcriptWindow.style.height=`${r}px`,this.transcriptWindow.style.maxWidth=`${a}px`,this.transcriptWindow.style.maxHeight=`${r}px`,o.includes("w")){let g=parseFloat(this.transcriptWindow.style.left)||0;this.transcriptWindow.style.left=`${g+(this.resizeStartWidth-a)}px`}if(o.includes("n")){let g=parseFloat(this.transcriptWindow.style.top)||0;this.transcriptWindow.style.top=`${g+(this.resizeStartHeight-r)}px`}}stopResize(){this.isResizing=!1,this.resizeDirection=null,this.transcriptWindow.classList.remove(`${this.player.options.classPrefix}-transcript-resizing`),document.body.style.cursor="",document.body.style.userSelect=""}getResizeCursor(e){return{n:"ns-resize",s:"ns-resize",e:"ew-resize",w:"ew-resize",ne:"nesw-resize",nw:"nwse-resize",se:"nwse-resize",sw:"nesw-resize"}[e]||"default"}showStyleDialog(){if(this.styleDialog){this.styleDialog.style.display="block",this.styleDialogVisible=!0,this.styleDialogJustOpened=!0,setTimeout(()=>{this.styleDialogJustOpened=!1},350),setTimeout(()=>{let n=this.styleDialog.querySelector("select, input");n&&n.focus()},0);return}this.styleDialog=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-dialog`});let e=l.createElement("h4",{textContent:p.t("transcript.styleTitle"),className:`${this.player.options.classPrefix}-transcript-style-title`});this.styleDialog.appendChild(e);let t=this.createStyleSelectControl(p.t("captions.fontSize"),"fontSize",[{label:p.t("fontSizes.small"),value:"87.5%"},{label:p.t("fontSizes.normal"),value:"100%"},{label:p.t("fontSizes.large"),value:"125%"},{label:p.t("fontSizes.xlarge"),value:"150%"}]);this.styleDialog.appendChild(t);let i=this.createStyleSelectControl(p.t("captions.fontFamily"),"fontFamily",[{label:p.t("fontFamilies.sansSerif"),value:"sans-serif"},{label:p.t("fontFamilies.serif"),value:"serif"},{label:p.t("fontFamilies.monospace"),value:"monospace"}]);this.styleDialog.appendChild(i);let s=this.createStyleColorControl(p.t("captions.color"),"color");this.styleDialog.appendChild(s);let a=this.createStyleColorControl(p.t("captions.backgroundColor"),"backgroundColor");this.styleDialog.appendChild(a);let r=this.createStyleOpacityControl(p.t("captions.opacity"),"opacity");this.styleDialog.appendChild(r);let o=l.createElement("button",{className:`${this.player.options.classPrefix}-transcript-style-close`,textContent:p.t("settings.close"),attributes:{type:"button"}});o.addEventListener("click",()=>this.hideStyleDialog()),this.styleDialog.appendChild(o),this.handlers.styleDialogKeydown=n=>{n.key==="Escape"&&(n.preventDefault(),n.stopPropagation(),this.hideStyleDialog())},this.styleDialog.addEventListener("keydown",this.handlers.styleDialogKeydown),this.headerLeft?this.headerLeft.appendChild(this.styleDialog):this.transcriptHeader.appendChild(this.styleDialog),this.applyTranscriptStyles(),this.styleDialogVisible=!0,this.styleDialog.style.display="block",this.styleDialogJustOpened=!0,setTimeout(()=>{this.styleDialogJustOpened=!1},350),setTimeout(()=>{let n=this.styleDialog.querySelector("select, input");n&&n.focus()},0)}hideStyleDialog(){this.styleDialog&&(this.styleDialog.style.display="none",this.styleDialogVisible=!1,this.settingsButton&&this.settingsButton.focus())}createStyleSelectControl(e,t,i){let s=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),a=l.createElement("label",{textContent:e});s.appendChild(a);let r=l.createElement("select",{className:`${this.player.options.classPrefix}-transcript-style-select`});return i.forEach(o=>{let n=l.createElement("option",{textContent:o.label,attributes:{value:o.value}});this.transcriptStyle[t]===o.value&&(n.selected=!0),r.appendChild(n)}),r.addEventListener("change",o=>{this.transcriptStyle[t]=o.target.value,this.applyTranscriptStyles(),this.savePreferences()}),s.appendChild(r),s}createStyleColorControl(e,t){let i=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),s=l.createElement("label",{textContent:e});i.appendChild(s);let a=l.createElement("input",{attributes:{type:"color",value:this.transcriptStyle[t]},className:`${this.player.options.classPrefix}-transcript-style-color`});return a.addEventListener("input",r=>{this.transcriptStyle[t]=r.target.value,this.applyTranscriptStyles(),this.savePreferences()}),i.appendChild(a),i}createStyleOpacityControl(e,t){let i=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),s=l.createElement("label",{textContent:e});i.appendChild(s);let a=l.createElement("span",{textContent:Math.round(this.transcriptStyle[t]*100)+"%",className:`${this.player.options.classPrefix}-transcript-style-value`}),r=l.createElement("input",{attributes:{type:"range",min:"0",max:"1",step:"0.1",value:String(this.transcriptStyle[t])},className:`${this.player.options.classPrefix}-transcript-style-range`});r.addEventListener("input",n=>{let c=parseFloat(n.target.value);this.transcriptStyle[t]=c,a.textContent=Math.round(c*100)+"%",this.applyTranscriptStyles(),this.savePreferences()});let o=l.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-range-container`});return o.appendChild(r),o.appendChild(a),i.appendChild(s),i.appendChild(o),i}savePreferences(){this.storage.saveTranscriptPreferences(this.transcriptStyle)}applyTranscriptStyles(){if(!this.transcriptWindow)return;this.transcriptWindow.style.backgroundColor=this.transcriptStyle.backgroundColor,this.transcriptWindow.style.opacity=String(this.transcriptStyle.opacity),this.transcriptContent&&(this.transcriptContent.style.fontSize=this.transcriptStyle.fontSize,this.transcriptContent.style.fontFamily=this.transcriptStyle.fontFamily,this.transcriptContent.style.color=this.transcriptStyle.color),this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-text`).forEach(i=>{i.style.fontSize=this.transcriptStyle.fontSize,i.style.fontFamily=this.transcriptStyle.fontFamily,i.style.color=this.transcriptStyle.color}),this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-time`).forEach(i=>{i.style.fontFamily=this.transcriptStyle.fontFamily})}destroy(){this.resizeEnabled&&this.disableResizeHandles(),this.keyboardDragMode&&this.disableKeyboardDragMode(),this.handlers.timeupdate&&this.player.off("timeupdate",this.handlers.timeupdate),this.transcriptHeader&&(this.handlers.mousedown&&this.transcriptHeader.removeEventListener("mousedown",this.handlers.mousedown),this.handlers.touchstart&&this.transcriptHeader.removeEventListener("touchstart",this.handlers.touchstart),this.handlers.keydown&&this.transcriptHeader.removeEventListener("keydown",this.handlers.keydown)),this.settingsButton&&(this.handlers.settingsClick&&this.settingsButton.removeEventListener("click",this.handlers.settingsClick),this.handlers.settingsKeydown&&this.settingsButton.removeEventListener("keydown",this.handlers.settingsKeydown)),this.styleDialog&&this.handlers.styleDialogKeydown&&this.styleDialog.removeEventListener("keydown",this.handlers.styleDialogKeydown),this.handlers.mousemove&&document.removeEventListener("mousemove",this.handlers.mousemove),this.handlers.mouseup&&document.removeEventListener("mouseup",this.handlers.mouseup),this.handlers.touchmove&&document.removeEventListener("touchmove",this.handlers.touchmove),this.handlers.touchend&&document.removeEventListener("touchend",this.handlers.touchend),this.handlers.documentClick&&document.removeEventListener("click",this.handlers.documentClick),this.handlers.resize&&window.removeEventListener("resize",this.handlers.resize),this.handlers=null,this.transcriptWindow&&this.transcriptWindow.parentNode&&this.transcriptWindow.parentNode.removeChild(this.transcriptWindow),this.transcriptWindow=null,this.transcriptHeader=null,this.transcriptContent=null,this.transcriptEntries=[],this.settingsMenu=null,this.styleDialog=null}};Y();var F=class{constructor(e){this.player=e,this.youtube=null,this.videoId=null,this.isReady=!1,this.iframe=null}async init(){if(this.videoId=this.extractVideoId(this.player.element.src),!this.videoId)throw new Error("Invalid YouTube URL");await this.loadYouTubeAPI(),this.createIframe(),await this.initializePlayer()}extractVideoId(e){let t=[/(?:youtube\.com\/watch\?v=|youtu\.be\/)([^&\s]+)/,/youtube\.com\/embed\/([^&\s]+)/];for(let i of t){let s=e.match(i);if(s&&s[1])return s[1]}return null}async loadYouTubeAPI(){return window.YT&&window.YT.Player?Promise.resolve():new Promise((e,t)=>{if(window.onYouTubeIframeAPIReady){let a=window.onYouTubeIframeAPIReady;window.onYouTubeIframeAPIReady=()=>{a(),e()};return}let i=document.createElement("script");i.src="https://www.youtube.com/iframe_api",window.onYouTubeIframeAPIReady=()=>{e()},i.onerror=()=>t(new Error("Failed to load YouTube API"));let s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(i,s)})}createIframe(){this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`youtube-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.height="100%",this.player.element.parentNode.insertBefore(this.iframe,this.player.element)}async initializePlayer(){return new Promise(e=>{this.youtube=new window.YT.Player(this.iframe.id,{videoId:this.videoId,width:"100%",height:"100%",playerVars:{controls:0,disablekb:1,fs:0,modestbranding:1,rel:0,showinfo:0,iv_load_policy:3,autoplay:this.player.options.autoplay?1:0,mute:this.player.options.muted?1:0,start:this.player.options.startTime||0},events:{onReady:t=>{this.isReady=!0,this.attachEvents(),e()},onStateChange:t=>this.handleStateChange(t),onError:t=>this.handleError(t)}})})}attachEvents(){this.timeUpdateInterval=setInterval(()=>{if(this.isReady&&this.youtube){let e=this.youtube.getCurrentTime(),t=this.youtube.getDuration();this.player.state.currentTime=e,this.player.state.duration=t,this.player.emit("timeupdate",e)}},250),this.youtube.getDuration&&(this.player.state.duration=this.youtube.getDuration(),this.player.emit("loadedmetadata"))}handleStateChange(e){let t=window.YT.PlayerState;switch(e.data){case t.PLAYING:this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.state.buffering=!1,this.player.emit("play"),this.player.emit("playing"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player);break;case t.PAUSED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player);break;case t.ENDED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.youtube.seekTo(0),this.youtube.playVideo());break;case t.BUFFERING:this.player.state.buffering=!0,this.player.emit("waiting");break;case t.CUED:this.player.emit("loadedmetadata");break}}handleError(e){let t={2:"Invalid video ID",5:"HTML5 player error",100:"Video not found",101:"Video not allowed to be played in embedded players",150:"Video not allowed to be played in embedded players"},i=new Error(t[e.data]||"YouTube player error");this.player.handleError(i)}play(){this.isReady&&this.youtube&&this.youtube.playVideo()}pause(){this.isReady&&this.youtube&&this.youtube.pauseVideo()}seek(e){this.isReady&&this.youtube&&this.youtube.seekTo(e,!0)}setVolume(e){this.isReady&&this.youtube&&(this.youtube.setVolume(e*100),this.player.state.volume=e)}setMuted(e){this.isReady&&this.youtube&&(e?this.youtube.mute():this.youtube.unMute(),this.player.state.muted=e)}setPlaybackSpeed(e){this.isReady&&this.youtube&&(this.youtube.setPlaybackRate(e),this.player.state.playbackSpeed=e)}destroy(){this.timeUpdateInterval&&clearInterval(this.timeUpdateInterval),this.youtube&&this.youtube.destroy&&this.youtube.destroy(),this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display="")}};var I=class{constructor(e){this.player=e,this.vimeo=null,this.videoId=null,this.isReady=!1,this.iframe=null}async init(){if(this.videoId=this.extractVideoId(this.player.element.src),!this.videoId)throw new Error("Invalid Vimeo URL");await this.loadVimeoAPI(),this.createIframe(),await this.initializePlayer()}extractVideoId(e){let t=[/vimeo\.com\/(\d+)/,/vimeo\.com\/video\/(\d+)/,/player\.vimeo\.com\/video\/(\d+)/];for(let i of t){let s=e.match(i);if(s&&s[1])return s[1]}return null}async loadVimeoAPI(){return window.Vimeo&&window.Vimeo.Player?Promise.resolve():new Promise((e,t)=>{let i=document.createElement("script");i.src="https://player.vimeo.com/api/player.js",i.onload=()=>e(),i.onerror=()=>t(new Error("Failed to load Vimeo API")),document.head.appendChild(i)})}createIframe(){this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`vimeo-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.height="100%",this.player.element.parentNode.insertBefore(this.iframe,this.player.element)}async initializePlayer(){let e={id:this.videoId,width:"100%",height:"100%",controls:!1,autoplay:this.player.options.autoplay,muted:this.player.options.muted,loop:this.player.options.loop,keyboard:!1};this.player.options.startTime>0&&(e.startTime=this.player.options.startTime),this.vimeo=new window.Vimeo.Player(this.iframe.id,e),await this.vimeo.ready(),this.isReady=!0,this.attachEvents();try{let t=await this.vimeo.getDuration();this.player.state.duration=t,this.player.emit("loadedmetadata")}catch(t){this.player.log("Error getting duration:",t,"warn")}}attachEvents(){this.vimeo.on("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),this.vimeo.on("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.vimeo.on("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player)}),this.vimeo.on("timeupdate",e=>{this.player.state.currentTime=e.seconds,this.player.state.duration=e.duration,this.player.emit("timeupdate",e.seconds),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,e.seconds)}),this.vimeo.on("volumechange",e=>{this.player.state.volume=e.volume,this.player.emit("volumechange",e.volume)}),this.vimeo.on("bufferstart",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.vimeo.on("bufferend",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.vimeo.on("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking")}),this.vimeo.on("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")}),this.vimeo.on("playbackratechange",e=>{this.player.state.playbackSpeed=e.playbackRate,this.player.emit("ratechange",e.playbackRate)}),this.vimeo.on("error",e=>{this.player.handleError(new Error(`Vimeo error: ${e.message}`))})}play(){this.isReady&&this.vimeo&&this.vimeo.play().catch(e=>{this.player.log("Play error:",e,"warn")})}pause(){this.isReady&&this.vimeo&&this.vimeo.pause().catch(e=>{this.player.log("Pause error:",e,"warn")})}seek(e){this.isReady&&this.vimeo&&this.vimeo.setCurrentTime(e).catch(t=>{this.player.log("Seek error:",t,"warn")})}setVolume(e){this.isReady&&this.vimeo&&(this.vimeo.setVolume(e).catch(t=>{this.player.log("Volume error:",t,"warn")}),this.player.state.volume=e)}setMuted(e){this.isReady&&this.vimeo&&(e?this.vimeo.setVolume(0):this.vimeo.setVolume(this.player.state.volume),this.player.state.muted=e)}setPlaybackSpeed(e){this.isReady&&this.vimeo&&(this.vimeo.setPlaybackRate(e).catch(t=>{this.player.log("Playback rate error:",t,"warn")}),this.player.state.playbackSpeed=e)}destroy(){this.vimeo&&this.vimeo.destroy&&this.vimeo.destroy(),this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display="")}};var O=class{constructor(e){this.player=e,this.media=e.element,this.hls=null}async init(){this.canPlayNatively()?(this.player.log("Using native HLS support"),await this.initNative()):(this.player.log("Using hls.js for HLS support"),await this.initHlsJs())}canPlayNatively(){return document.createElement("video").canPlayType("application/vnd.apple.mpegurl")!==""}async initNative(){let e=(await Promise.resolve().then(()=>(Y(),J))).HTML5Renderer,t=new e(this.player);await t.init(),Object.getOwnPropertyNames(Object.getPrototypeOf(t)).forEach(i=>{i!=="constructor"&&typeof t[i]=="function"&&(this[i]=t[i].bind(t))})}async initHlsJs(){if(this.media.controls=!1,this.media.removeAttribute("controls"),window.Hls||await this.loadHlsJs(),!window.Hls.isSupported())throw new Error("HLS is not supported in this browser");this.hls=new window.Hls({debug:this.player.options.debug,enableWorker:!0,lowLatencyMode:!1,backBufferLength:90,maxBufferLength:30,maxMaxBufferLength:600,maxBufferSize:60*1e3*1e3,maxBufferHole:.5,manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:4,manifestLoadingRetryDelay:1e3,manifestLoadingMaxRetryTimeout:64e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,levelLoadingMaxRetryTimeout:64e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingMaxRetryTimeout:64e3}),this.hls.attachMedia(this.media);let e,t=this.player.element.querySelector("source");if(t?e=t.getAttribute("src"):e=this.player.element.getAttribute("src")||this.player.element.src,this.player.log(`Loading HLS source: ${e}`,"log"),!e)throw new Error("No HLS source found");this.hls.loadSource(e),this.attachHlsEvents(),this.attachMediaEvents()}async loadHlsJs(){return new Promise((e,t)=>{let i=document.createElement("script");i.src="https://cdn.jsdelivr.net/npm/hls.js@latest",i.onload=()=>e(),i.onerror=()=>t(new Error("Failed to load hls.js")),document.head.appendChild(i)})}attachHlsEvents(){this.hls.on(window.Hls.Events.MANIFEST_PARSED,(e,t)=>{this.player.log("HLS manifest loaded, found "+t.levels.length+" quality levels"),this.player.emit("hlsmanifestparsed",t)}),this.hls.on(window.Hls.Events.LEVEL_SWITCHED,(e,t)=>{this.player.log("HLS level switched to "+t.level),this.player.emit("hlslevelswitched",t)}),this.hls.on(window.Hls.Events.ERROR,(e,t)=>{this.handleHlsError(t)}),this.hls.on(window.Hls.Events.FRAG_BUFFERED,()=>{this.player.state.buffering=!1})}attachMediaEvents(){this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume)}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),this.media.addEventListener("error",()=>{this.player.handleError(this.media.error)})}handleHlsError(e){if(this.player.log(`HLS Error - Type: ${e.type}, Details: ${e.details}, Fatal: ${e.fatal}`,"warn"),e.response&&this.player.log(`Response code: ${e.response.code}, URL: ${e.response.url}`,"warn"),e.fatal)switch(e.type){case window.Hls.ErrorTypes.NETWORK_ERROR:this.player.log("Fatal network error, trying to recover...","error"),this.player.log(`Network error details: ${e.details}`,"error"),setTimeout(()=>{this.hls.startLoad()},1e3);break;case window.Hls.ErrorTypes.MEDIA_ERROR:this.player.log("Fatal media error, trying to recover...","error"),this.hls.recoverMediaError();break;default:this.player.log("Fatal error, cannot recover","error"),this.player.handleError(new Error(`HLS Error: ${e.type} - ${e.details}`)),this.hls.destroy();break}else this.player.log("Non-fatal HLS error: "+e.details,"warn")}play(){let e=this.media.play();e!==void 0&&e.catch(t=>{this.player.log("Play failed:",t,"warn")})}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}switchQuality(e){this.hls&&(this.hls.currentLevel=e)}getQualities(){return this.hls&&this.hls.levels?this.hls.levels.map((e,t)=>({index:t,height:e.height,width:e.width,bitrate:e.bitrate,name:`${e.height}p`})):[]}destroy(){this.hls&&(this.hls.destroy(),this.hls=null)}};var z=class extends V{constructor(e,t={}){if(super(),this.element=typeof e=="string"?document.querySelector(e):e,!this.element)throw new Error("VidPly: Element not found");if(this.element.tagName!=="VIDEO"&&this.element.tagName!=="AUDIO"){let s=t.mediaType||"video",a=document.createElement(s);Array.from(this.element.attributes).forEach(o=>{o.name!=="id"&&o.name!=="class"&&!o.name.startsWith("data-")&&a.setAttribute(o.name,o.value)}),this.element.querySelectorAll("track").forEach(o=>{a.appendChild(o.cloneNode(!0))}),this.element.innerHTML="",this.element.appendChild(a),this.element=a}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,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.storage=new A("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.signLanguageVideo=null,this.audioDescriptionSourceElement=null,this.originalAudioDescriptionSource=null,this.audioDescriptionCaptionTracks=[],this.container=null,this.renderer=null,this.controlBar=null,this.captionManager=null,this.keyboardManager=null,this.settingsDialog=null,this.init()}async init(){var e;try{if(this.log("Initializing VidPly player"),!this.options.language||this.options.language==="en"){let i=this.detectHtmlLanguage();i&&(this.options.language=i,this.log(`Auto-detected language from HTML: ${i}`))}p.setLanguage(this.options.language),this.createContainer(),this.element.src||((e=this.element.querySelector("source"))==null?void 0:e.src)?await this.initializeRenderer():this.log("No initial source - waiting for playlist or manual load"),this.options.controls&&(this.controlBar=new N(this),this.videoWrapper.appendChild(this.controlBar.element)),this.options.captions&&(this.captionManager=new B(this)),(this.options.transcript||this.options.transcriptButton)&&(this.transcriptManager=new H(this)),this.options.keyboard&&(this.keyboardManager=new R(this)),this.setupResponsiveHandlers(),this.options.startTime>0&&this.seek(this.options.startTime),this.options.muted&&this.mute(),this.options.volume!==.8&&this.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(t){this.handleError(t)}}detectHtmlLanguage(){let e=document.documentElement.lang||document.documentElement.getAttribute("lang");if(!e)return null;let t=e.toLowerCase().split("-")[0];return["en","de","es","fr","ja"].includes(t)?t:(this.log(`Language "${e}" not available, using English as fallback`),"en")}createContainer(){this.container=l.createElement("div",{className:`${this.options.classPrefix}-player`,attributes:{role:"region","aria-label":p.t("player.label"),tabindex:"0"}});let e=this.element.tagName.toLowerCase();this.container.classList.add(`${this.options.classPrefix}-${e}`),this.options.responsive&&this.container.classList.add(`${this.options.classPrefix}-responsive`),this.videoWrapper=l.createElement("div",{className:`${this.options.classPrefix}-video-wrapper`}),this.element.parentNode.insertBefore(this.container,this.element),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.setAttribute("webkit-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.options.poster),this.element.tagName==="VIDEO"&&this.createPlayButtonOverlay(),this.element.style.cursor="pointer",this.element.addEventListener("click",t=>{t.target===this.element&&this.toggle()})}createPlayButtonOverlay(){this.playButtonOverlay=_(),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.on("ended",()=>{this.playButtonOverlay.style.opacity="1",this.playButtonOverlay.style.pointerEvents="auto"})}async initializeRenderer(){var a;let e=this.element.src||((a=this.element.querySelector("source"))==null?void 0:a.src);if(!e)throw new Error("No media source found");let t=this.element.querySelectorAll("source");for(let r of t){let o=r.getAttribute("data-desc-src"),n=r.getAttribute("data-orig-src");if(o||n){if(this.audioDescriptionSourceElement||(this.audioDescriptionSourceElement=r),n)this.originalAudioDescriptionSource||(this.originalAudioDescriptionSource=n),this.originalSrc||(this.originalSrc=n);else{let c=r.getAttribute("src");!this.originalAudioDescriptionSource&&c&&(this.originalAudioDescriptionSource=c),!this.originalSrc&&c&&(this.originalSrc=c)}o&&!this.audioDescriptionSrc&&(this.audioDescriptionSrc=o)}}this.element.querySelectorAll("track").forEach(r=>{let o=r.getAttribute("kind"),n=r.getAttribute("data-desc-src");(o==="captions"||o==="subtitles"||o==="chapters")&&n&&(this.audioDescriptionCaptionTracks.push({trackElement:r,originalSrc:r.getAttribute("src"),describedSrc:n,originalTrackSrc:r.getAttribute("data-orig-src")||r.getAttribute("src"),explicit:!0}),this.log(`Found explicit described ${o} track: ${r.getAttribute("src")} -> ${n}`))}),this.originalSrc||(this.originalSrc=e);let s;e.includes("youtube.com")||e.includes("youtu.be")?s=F:e.includes("vimeo.com")?s=I:e.includes(".m3u8")?s=O:s=W,this.log(`Using ${s.name} renderer`),this.renderer=new s(this),await this.renderer.init()}async load(e){try{this.log("Loading new media:",e.src),this.renderer&&this.pause(),this.element.querySelectorAll("track").forEach(s=>s.remove()),this.element.src=e.src,e.type&&(this.element.type=e.type),e.poster&&this.element.tagName==="VIDEO"&&(this.element.poster=e.poster),e.tracks&&e.tracks.length>0&&e.tracks.forEach(s=>{let a=document.createElement("track");a.src=s.src,a.kind=s.kind||"captions",a.srclang=s.srclang||"en",a.label=s.label||s.srclang,s.default&&(a.default=!0),this.element.appendChild(a)});let i=this.shouldChangeRenderer(e.src);if(i&&this.renderer&&(this.renderer.destroy(),this.renderer=null),!this.renderer||i?await this.initializeRenderer():(this.renderer.media=this.element,this.element.load()),this.captionManager&&(this.captionManager.destroy(),this.captionManager=new B(this)),this.transcriptManager){let s=this.transcriptManager.isVisible;this.transcriptManager.destroy(),this.transcriptManager=new H(this),s&&this.transcriptManager.showTranscript()}this.controlBar&&this.updateControlBar(),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()}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=this.renderer.constructor.name;return!!(t&&a!=="YouTubeRenderer"||i&&a!=="VimeoRenderer"||s&&a!=="HLSRenderer"||!t&&!i&&!s&&a!=="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.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;e.requestFullscreen?e.requestFullscreen():e.webkitRequestFullscreen?e.webkitRequestFullscreen():e.mozRequestFullScreen?e.mozRequestFullScreen():e.msRequestFullscreen&&e.msRequestFullscreen(),this.state.fullscreen=!0,this.container.classList.add(`${this.options.classPrefix}-fullscreen`),this.emit("fullscreenchange",!0)}exitFullscreen(){document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen(),this.state.fullscreen=!1,this.container.classList.remove(`${this.options.classPrefix}-fullscreen`),this.emit("fullscreenchange",!1)}toggleFullscreen(){this.state.fullscreen?this.exitFullscreen():this.enterFullscreen()}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}}async enableAudioDescription(){let e=Array.from(this.element.querySelectorAll("source")).some(r=>r.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.state.currentTime,s=this.state.playing,a=[];if(this.audioDescriptionSourceElement){let r=this.element.currentSrc||this.element.src,o=Array.from(this.element.querySelectorAll("source")),n=null,c=this.audioDescriptionSrc;for(let g of o){let d=g.getAttribute("src"),w=g.getAttribute("data-desc-src"),v=d?d.split("/").pop():"",E=r?r.split("/").pop():"";if(r&&(r===d||r.includes(d)||r.includes(v)||v&&E===v)){n=g,w?c=w:d&&(c=this.audioDescriptionSrc||c);break}}if(!n){n=this.audioDescriptionSourceElement;let g=n.getAttribute("data-desc-src");g&&(c=g)}if(this.audioDescriptionCaptionTracks.length>0){let g=this.audioDescriptionCaptionTracks.map(async v=>{if(v.trackElement&&v.describedSrc)if(v.explicit===!0)try{let E=await this.validateTrackExists(v.describedSrc);return{trackInfo:v,exists:E}}catch{return{trackInfo:v,exists:!1}}else return{trackInfo:v,exists:!1};return{trackInfo:v,exists:!1}}),d=await Promise.all(g),w=d.filter(v=>v.exists);if(w.length>0){let v=new Map;w.forEach(({trackInfo:u})=>{let f=u.trackElement.track;f?v.set(u,{wasShowing:f.mode==="showing",wasHidden:f.mode==="hidden"}):v.set(u,{wasShowing:!1,wasHidden:!1})});let E=w.map(({trackInfo:u})=>{let f=u.trackElement.getAttribute("src"),C=u.trackElement.parentNode,k=u.trackElement.nextSibling,S={};return Array.from(u.trackElement.attributes).forEach(T=>{S[T.name]=T.value}),{trackInfo:u,oldSrc:f,parent:C,nextSibling:k,attributes:S}});E.forEach(({trackInfo:u})=>{u.trackElement.remove()}),this.element.load(),setTimeout(()=>{E.forEach(({trackInfo:f,oldSrc:C,parent:k,nextSibling:S,attributes:T})=>{a.push(f);let P=document.createElement("track");P.setAttribute("src",f.describedSrc),Object.keys(T).forEach(L=>{L!=="src"&&L!=="data-desc-src"&&P.setAttribute(L,T[L])}),S&&S.parentNode?k.insertBefore(P,S):k.appendChild(P),f.trackElement=P}),this.element.load();let u=()=>{setTimeout(()=>{a.forEach(f=>{let k=f.trackElement.track;if(k){let S=v.get(f)||{wasShowing:!1,wasHidden:!1};k.mode="hidden";let T=()=>{S.wasShowing||S.wasHidden?k.mode="hidden":k.mode="disabled"};k.readyState>=2?T():(k.addEventListener("load",T,{once:!0}),k.addEventListener("error",T,{once:!0}))}})},300)};this.element.readyState>=1?setTimeout(u,200):(this.element.addEventListener("loadedmetadata",u,{once:!0}),setTimeout(u,2e3))},100);let x=d.length-w.length}}let m=Array.from(this.element.querySelectorAll("source")),y=[];m.forEach(g=>{let d=g.getAttribute("data-desc-src"),w=g.getAttribute("src");if(d){let v=g.getAttribute("type"),E=g.getAttribute("data-orig-src");E||(E=w),y.push({src:d,type:v,origSrc:E,descSrc:d})}else{let v=g.getAttribute("type"),E=g.getAttribute("src");y.push({src:E,type:v,origSrc:null,descSrc:null})}}),m.forEach(g=>{g.remove()}),y.forEach(g=>{let d=document.createElement("source");d.setAttribute("src",g.src),g.type&&d.setAttribute("type",g.type),g.origSrc&&d.setAttribute("data-orig-src",g.origSrc),g.descSrc&&d.setAttribute("data-desc-src",g.descSrc),this.element.appendChild(d)}),this.element.load(),await new Promise(g=>{let d=()=>{this.element.removeEventListener("loadedmetadata",d),g()};this.element.addEventListener("loadedmetadata",d)}),await new Promise(g=>setTimeout(g,300)),this.element.tagName==="VIDEO"&&i===0&&!s&&this.element.readyState>=1&&(this.element.currentTime=.001,setTimeout(()=>{this.element.currentTime=0},10)),this.seek(i),s&&this.play(),this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled")}else{if(this.audioDescriptionCaptionTracks.length>0){let n=this.audioDescriptionCaptionTracks.map(async y=>{if(y.trackElement&&y.describedSrc)if(y.explicit===!0)try{let g=await this.validateTrackExists(y.describedSrc);return{trackInfo:y,exists:g}}catch{return{trackInfo:y,exists:!1}}else return{trackInfo:y,exists:!1};return{trackInfo:y,exists:!1}}),m=(await Promise.all(n)).filter(y=>y.exists);if(m.length>0){let y=new Map;m.forEach(({trackInfo:d})=>{let w=d.trackElement.track;w?y.set(d,{wasShowing:w.mode==="showing",wasHidden:w.mode==="hidden"}):y.set(d,{wasShowing:!1,wasHidden:!1})});let g=m.map(({trackInfo:d})=>{let w=d.trackElement.getAttribute("src"),v=d.trackElement.parentNode,E=d.trackElement.nextSibling,x={};return Array.from(d.trackElement.attributes).forEach(u=>{x[u.name]=u.value}),{trackInfo:d,oldSrc:w,parent:v,nextSibling:E,attributes:x}});g.forEach(({trackInfo:d})=>{d.trackElement.remove()}),this.element.load(),setTimeout(()=>{g.forEach(({trackInfo:w,oldSrc:v,parent:E,nextSibling:x,attributes:u})=>{a.push(w);let f=document.createElement("track");f.setAttribute("src",w.describedSrc),Object.keys(u).forEach(C=>{C!=="src"&&C!=="data-desc-src"&&f.setAttribute(C,u[C])}),x&&x.parentNode?E.insertBefore(f,x):E.appendChild(f),w.trackElement=f}),this.element.load();let d=()=>{setTimeout(()=>{a.forEach(w=>{let E=w.trackElement.track;if(E){let x=y.get(w)||{wasShowing:!1,wasHidden:!1};E.mode="hidden";let u=()=>{x.wasShowing||x.wasHidden?E.mode="hidden":E.mode="disabled"};E.readyState>=2?u():(E.addEventListener("load",u,{once:!0}),E.addEventListener("error",u,{once:!0}))}})},300)};this.element.readyState>=1?setTimeout(d,200):(this.element.addEventListener("loadedmetadata",d,{once:!0}),setTimeout(d,2e3))},100)}}let r=Array.from(this.element.querySelectorAll("source"));if(r.some(n=>n.getAttribute("data-desc-src"))){let n=[];r.forEach(c=>{let m=c.getAttribute("data-desc-src"),y=c.getAttribute("src");if(m){let g=c.getAttribute("type"),d=c.getAttribute("data-orig-src");d||(d=y),n.push({src:m,type:g,origSrc:d,descSrc:m})}else{let g=c.getAttribute("type"),d=c.getAttribute("src");n.push({src:d,type:g,origSrc:null,descSrc:null})}}),r.forEach(c=>{c.remove()}),n.forEach(c=>{let m=document.createElement("source");m.setAttribute("src",c.src),c.type&&m.setAttribute("type",c.type),c.origSrc&&m.setAttribute("data-orig-src",c.origSrc),c.descSrc&&m.setAttribute("data-desc-src",c.descSrc),this.element.appendChild(m)}),this.element.load()}else this.element.src=this.audioDescriptionSrc}if(await new Promise(r=>{let o=()=>{this.element.removeEventListener("loadedmetadata",o),r()};this.element.addEventListener("loadedmetadata",o)}),this.element.tagName==="VIDEO"&&i===0&&!s&&this.element.readyState>=1&&(this.element.currentTime=.001,setTimeout(()=>{this.element.currentTime=0},10)),this.seek(i),s&&this.play(),a.length>0&&this.captionManager){let r=this.state.captionsEnabled,o=null;if(this.captionManager.currentTrack){let n=this.captionManager.tracks.findIndex(c=>c.track===this.captionManager.currentTrack.track);n>=0&&(o={language:this.captionManager.tracks[n].language,kind:this.captionManager.tracks[n].kind})}setTimeout(()=>{if(this.captionManager.tracks=[],this.captionManager.loadTracks(),r&&o&&this.captionManager.tracks.length>0){let n=this.captionManager.tracks.findIndex(c=>c.language===o.language&&c.kind===o.kind);n>=0?this.captionManager.enable(n):this.captionManager.tracks.length>0&&this.captionManager.enable(0)}},600)}if(this.transcriptManager&&this.transcriptManager.isVisible){let r=typeof a<"u"?a:[];if(r.length>0){let o=()=>{let c=Array.from(this.element.textTracks),m=r.map(d=>{let w=d.trackElement,v=w.getAttribute("src"),E=w.getAttribute("srclang"),x=w.getAttribute("kind"),u=c.find(f=>w.track===f);if(u||(u=c.find(f=>{if(f.language===E&&(f.kind===x||x==="captions"&&f.kind==="subtitles")){let C=Array.from(this.element.querySelectorAll("track")).find(k=>k.track===f);if(C&&C.getAttribute("src")===v)return!0}return!1})),u){let f=Array.from(this.element.querySelectorAll("track")).find(C=>C.track===u);if(f&&f.getAttribute("src")!==v)return null}return u}).filter(Boolean);if(m.length===0){setTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},1e3);return}m.forEach(d=>{d.mode==="disabled"&&(d.mode="hidden")});let y=0,g=()=>{y++,y>=m.length&&setTimeout(()=>{if(this.transcriptManager&&this.transcriptManager.loadTranscriptData){let d=Array.from(this.element.textTracks),w=r.map(E=>E.describedSrc);(m.some(E=>{let x=Array.from(this.element.querySelectorAll("track")).find(u=>u.track===E);return x&&w.includes(x.getAttribute("src"))})||m.length>0)&&this.transcriptManager.loadTranscriptData()}},800)};m.forEach(d=>{d.mode==="disabled"&&(d.mode="hidden");let w=Array.from(this.element.querySelectorAll("track")).find(u=>u.track===d),v=w?w.getAttribute("src"):null,E=r.find(u=>{let f=u.trackElement;return f&&(f.track===d||f.getAttribute("srclang")===d.language&&f.getAttribute("kind")===d.kind)}),x=E?E.describedSrc:null;if(x&&v&&v!==x){g();return}if(d.readyState>=2&&d.cues&&d.cues.length>0)g();else{d.mode==="disabled"&&(d.mode="hidden");let u=()=>{setTimeout(g,300)};d.readyState>=2?setTimeout(()=>{d.cues&&d.cues.length>0?g():d.addEventListener("load",u,{once:!0})},100):(d.addEventListener("load",u,{once:!0}),d.addEventListener("error",()=>{g()},{once:!0}))}})};(()=>{setTimeout(()=>{this.element.readyState>=1?o():(this.element.addEventListener("loadedmetadata",o,{once:!0}),setTimeout(o,2e3))},500)})(),setTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},5e3)}else setTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},800)}this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled")}async disableAudioDescription(){if(!this.originalSrc)return;let e=this.state.currentTime,t=this.state.playing;this.audioDescriptionCaptionTracks.length>0&&this.audioDescriptionCaptionTracks.forEach(a=>{a.trackElement&&a.originalTrackSrc&&a.trackElement.setAttribute("src",a.originalTrackSrc)});let i=Array.from(this.element.querySelectorAll("source"));if(i.some(a=>a.getAttribute("data-orig-src"))){let a=[];i.forEach(r=>{let o=r.getAttribute("data-orig-src"),n=r.getAttribute("data-desc-src");if(o){let c=r.getAttribute("type");a.push({src:o,type:c,origSrc:o,descSrc:n})}else{let c=r.getAttribute("type"),m=r.getAttribute("src");a.push({src:m,type:c,origSrc:null,descSrc:n})}}),i.forEach(r=>{r.remove()}),a.forEach(r=>{let o=document.createElement("source");o.setAttribute("src",r.src),r.type&&o.setAttribute("type",r.type),r.origSrc&&o.setAttribute("data-orig-src",r.origSrc),r.descSrc&&o.setAttribute("data-desc-src",r.descSrc),this.element.appendChild(o)}),this.element.load()}else{let a=this.originalAudioDescriptionSource||this.originalSrc;this.element.src=a,this.element.load()}await new Promise(a=>{let r=()=>{this.element.removeEventListener("loadedmetadata",r),a()};this.element.addEventListener("loadedmetadata",r)}),this.seek(e),t&&this.play(),this.transcriptManager&&this.transcriptManager.isVisible&&setTimeout(()=>{this.transcriptManager&&this.transcriptManager.loadTranscriptData&&this.transcriptManager.loadTranscriptData()},500),this.state.audioDescriptionEnabled=!1,this.emit("audiodescriptiondisabled")}async toggleAudioDescription(){let t=Array.from(this.element.textTracks||[]).find(s=>s.kind==="descriptions"),i=this.audioDescriptionSrc||Array.from(this.element.querySelectorAll("source")).some(s=>s.getAttribute("data-desc-src"));t&&i?this.state.audioDescriptionEnabled?(t.mode="hidden",await this.disableAudioDescription()):(await this.enableAudioDescription(),t.mode="showing"):t?t.mode==="showing"?(t.mode="hidden",this.state.audioDescriptionEnabled=!1,this.emit("audiodescriptiondisabled")):(t.mode="showing",this.state.audioDescriptionEnabled=!0,this.emit("audiodescriptionenabled")):i&&(this.state.audioDescriptionEnabled?await this.disableAudioDescription():await this.enableAudioDescription())}enableSignLanguage(){if(!this.signLanguageSrc){console.warn("No sign language video source provided");return}if(this.signLanguageWrapper){this.signLanguageWrapper.style.display="block",this.state.signLanguageEnabled=!0,this.emit("signlanguageenabled");return}this.signLanguageWrapper=document.createElement("div"),this.signLanguageWrapper.className="vidply-sign-language-wrapper",this.signLanguageWrapper.setAttribute("tabindex","0"),this.signLanguageWrapper.setAttribute("aria-label","Sign Language Video - Press D to drag with keyboard, R to resize"),this.signLanguageVideo=document.createElement("video"),this.signLanguageVideo.className="vidply-sign-language-video",this.signLanguageVideo.src=this.signLanguageSrc,this.signLanguageVideo.setAttribute("aria-label",p.t("player.signLanguage")),this.signLanguageVideo.muted=!0;let e=["nw","ne","sw","se"].map(i=>{let s=document.createElement("div");return s.className=`vidply-sign-resize-handle vidply-sign-resize-${i}`,s.setAttribute("data-direction",i),s.setAttribute("aria-label",`Resize ${i.toUpperCase()}`),s});this.signLanguageWrapper.appendChild(this.signLanguageVideo),e.forEach(i=>this.signLanguageWrapper.appendChild(i));let t=this.storage.getSignLanguagePreferences();t&&t.size&&t.size.width?this.signLanguageWrapper.style.width=t.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),this.state.signLanguageEnabled=!0,this.emit("signlanguageenabled")}disableSignLanguage(){this.signLanguageWrapper&&(this.signLanguageWrapper.style.display="none"),this.state.signLanguageEnabled=!1,this.emit("signlanguagedisabled")}toggleSignLanguage(){this.state.signLanguageEnabled?this.disableSignLanguage():this.enableSignLanguage()}setupSignLanguageInteraction(){if(!this.signLanguageWrapper)return;let e=!1,t=!1,i=null,s=0,a=0,r=0,o=0,n=0,c=0,m=!1,y=!1,g=u=>{if(u.target!==this.signLanguageVideo)return;u.preventDefault(),e=!0,s=u.clientX,a=u.clientY;let f=this.signLanguageWrapper.getBoundingClientRect();r=f.left,o=f.top,this.signLanguageWrapper.classList.add("vidply-sign-dragging")},d=u=>{if(!u.target.classList.contains("vidply-sign-resize-handle"))return;u.preventDefault(),u.stopPropagation(),t=!0,i=u.target.getAttribute("data-direction"),s=u.clientX,a=u.clientY;let f=this.signLanguageWrapper.getBoundingClientRect();r=f.left,o=f.top,n=f.width,c=f.height,this.signLanguageWrapper.classList.add("vidply-sign-resizing")},w=u=>{if(e){let f=u.clientX-s,C=u.clientY-a,k=this.videoWrapper.getBoundingClientRect(),S=this.container.getBoundingClientRect(),T=this.signLanguageWrapper.getBoundingClientRect(),P=k.left-S.left,L=k.top-S.top,M=r+f-S.left,$=o+C-S.top,U=95;M=Math.max(P,Math.min(M,P+k.width-T.width)),$=Math.max(L,Math.min($,L+k.height-T.height-U)),this.signLanguageWrapper.style.left=`${M}px`,this.signLanguageWrapper.style.top=`${$}px`,this.signLanguageWrapper.style.right="auto",this.signLanguageWrapper.style.bottom="auto",this.signLanguageWrapper.classList.remove(...Array.from(this.signLanguageWrapper.classList).filter(ee=>ee.startsWith("vidply-sign-position-")))}else if(t){let f=u.clientX-s,C=this.videoWrapper.getBoundingClientRect(),k=this.container.getBoundingClientRect(),S=n,T=r-k.left;if(i.includes("e")){S=Math.max(150,n+f);let P=C.right-r;S=Math.min(S,P)}if(i.includes("w")){let P=Math.max(150,n-f),L=r+(n-P)-k.left,M=C.left-k.left;L>=M&&(S=P,T=L)}this.signLanguageWrapper.style.width=`${S}px`,this.signLanguageWrapper.style.height="auto",i.includes("w")&&(this.signLanguageWrapper.style.left=`${T}px`),this.signLanguageWrapper.style.right="auto",this.signLanguageWrapper.style.bottom="auto",this.signLanguageWrapper.classList.remove(...Array.from(this.signLanguageWrapper.classList).filter(P=>P.startsWith("vidply-sign-position-")))}},v=()=>{(e||t)&&this.saveSignLanguagePreferences(),e=!1,t=!1,i=null,this.signLanguageWrapper.classList.remove("vidply-sign-dragging","vidply-sign-resizing")},E=u=>{if(u.key==="d"||u.key==="D"){m=!m,y=!1,this.signLanguageWrapper.classList.toggle("vidply-sign-keyboard-drag",m),this.signLanguageWrapper.classList.remove("vidply-sign-keyboard-resize"),u.preventDefault();return}if(u.key==="r"||u.key==="R"){y=!y,m=!1,this.signLanguageWrapper.classList.toggle("vidply-sign-keyboard-resize",y),this.signLanguageWrapper.classList.remove("vidply-sign-keyboard-drag"),u.preventDefault();return}if(u.key==="Escape"){m=!1,y=!1,this.signLanguageWrapper.classList.remove("vidply-sign-keyboard-drag","vidply-sign-keyboard-resize"),u.preventDefault();return}if(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].includes(u.key)){let f=u.shiftKey?10:5,C=this.signLanguageWrapper.getBoundingClientRect(),k=this.videoWrapper.getBoundingClientRect(),S=this.container.getBoundingClientRect(),T=k.left-S.left,P=k.top-S.top;if(m){let L=C.left-S.left,M=C.top-S.top;u.key==="ArrowLeft"&&(L-=f),u.key==="ArrowRight"&&(L+=f),u.key==="ArrowUp"&&(M-=f),u.key==="ArrowDown"&&(M+=f);let $=95;L=Math.max(T,Math.min(L,T+k.width-C.width)),M=Math.max(P,Math.min(M,P+k.height-C.height-$)),this.signLanguageWrapper.style.left=`${L}px`,this.signLanguageWrapper.style.top=`${M}px`,this.signLanguageWrapper.style.right="auto",this.signLanguageWrapper.style.bottom="auto",this.signLanguageWrapper.classList.remove(...Array.from(this.signLanguageWrapper.classList).filter(U=>U.startsWith("vidply-sign-position-"))),this.saveSignLanguagePreferences(),u.preventDefault()}else if(y){let L=C.width;u.key==="ArrowLeft"&&(L-=f),u.key==="ArrowRight"&&(L+=f),u.key==="ArrowUp"&&(L+=f),u.key==="ArrowDown"&&(L-=f),L=Math.max(150,L),L=Math.min(L,k.width),this.signLanguageWrapper.style.width=`${L}px`,this.signLanguageWrapper.style.height="auto",this.saveSignLanguagePreferences(),u.preventDefault()}}};this.signLanguageVideo.addEventListener("mousedown",g);let x=this.signLanguageWrapper.querySelectorAll(".vidply-sign-resize-handle");x.forEach(u=>u.addEventListener("mousedown",d)),document.addEventListener("mousemove",w),document.addEventListener("mouseup",v),this.signLanguageWrapper.addEventListener("keydown",E),this.signLanguageInteractionHandlers={mouseDownVideo:g,mouseDownHandle:d,mouseMove:w,mouseUp:v,keyDown:E,handles:x}}constrainSignLanguagePosition(){if(!this.signLanguageWrapper||!this.videoWrapper)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,o=e.height,n=i.width||280,c=i.height||280*9/16,m,y,g=16,d=95;switch(this.signLanguageDesiredPosition||"bottom-right"){case"bottom-right":m=s+r-n-g,y=a+o-c-d;break;case"bottom-left":m=s+g,y=a+o-c-d;break;case"top-right":m=s+r-n-g,y=a+g;break;case"top-left":m=s+g,y=a+g;break;default:m=s+r-n-g,y=a+o-c-d}m=Math.max(s,Math.min(m,s+r-n)),y=Math.max(a,Math.min(y,a+o-c-d)),this.signLanguageWrapper.style.left=`${m}px`,this.signLanguageWrapper.style.top=`${y}px`,this.signLanguageWrapper.style.right="auto",this.signLanguageWrapper.style.bottom="auto",this.signLanguageWrapper.classList.remove(...Array.from(this.signLanguageWrapper.classList).filter(v=>v.startsWith("vidply-sign-position-")))}saveSignLanguagePreferences(){this.signLanguageWrapper&&this.storage.saveSignLanguagePreferences({size:{width:this.signLanguageWrapper.style.width}})}cleanupSignLanguage(){this.signLanguageHandlers&&(this.off("play",this.signLanguageHandlers.play),this.off("pause",this.signLanguageHandlers.pause),this.off("timeupdate",this.signLanguageHandlers.timeupdate),this.off("ratechange",this.signLanguageHandlers.ratechange),this.signLanguageHandlers=null),this.signLanguageInteractionHandlers&&(this.signLanguageVideo&&this.signLanguageVideo.removeEventListener("mousedown",this.signLanguageInteractionHandlers.mouseDownVideo),this.signLanguageInteractionHandlers.handles&&this.signLanguageInteractionHandlers.handles.forEach(e=>{e.removeEventListener("mousedown",this.signLanguageInteractionHandlers.mouseDownHandle)}),document.removeEventListener("mousemove",this.signLanguageInteractionHandlers.mouseMove),document.removeEventListener("mouseup",this.signLanguageInteractionHandlers.mouseUp),this.signLanguageWrapper&&this.signLanguageWrapper.removeEventListener("keydown",this.signLanguageInteractionHandlers.keyDown),this.signLanguageInteractionHandlers=null),this.signLanguageWrapper&&this.signLanguageWrapper.parentNode&&(this.signLanguageVideo&&(this.signLanguageVideo.pause(),this.signLanguageVideo.src=""),this.signLanguageWrapper.parentNode.removeChild(this.signLanguageWrapper),this.signLanguageWrapper=null,this.signLanguageVideo=null)}showSettings(){console.warn("[VidPly] Settings dialog has been removed. Use individual control buttons (speed, captions, etc.)")}hideSettings(){}getCurrentTime(){return this.state.currentTime}getDuration(){return this.state.duration}isPlaying(){return this.state.playing}isPaused(){return this.state.paused}isEnded(){return this.state.ended}isMuted(){return this.state.muted}isFullscreen(){return this.state.fullscreen}handleError(e){this.log("Error:",e,"error"),this.emit("error",e),this.options.onError&&this.options.onError.call(this,e)}log(e,t="log"){this.options.debug&&console[t]("[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.positionTranscript()},window.addEventListener("resize",this.resizeHandler)),window.matchMedia){this.orientationHandler=t=>{setTimeout(()=>{this.transcriptManager&&this.transcriptManager.isVisible&&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.emit("fullscreenchange",e),this.controlBar&&this.controlBar.updateFullscreenButton(),this.signLanguageWrapper&&this.signLanguageWrapper.style.display!=="none"&&setTimeout(()=>{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(){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.container&&this.container.parentNode&&(this.container.parentNode.insertBefore(this.element,this.container),this.container.parentNode.removeChild(this.container)),this.removeAllListeners()}};z.instances=[];var q=class{constructor(e,t={}){this.player=e,this.tracks=[],this.currentIndex=-1,this.options={autoAdvance:t.autoAdvance!==!1,loop:t.loop||!1,showPanel:t.showPanel!==!1,...t},this.container=null,this.playlistPanel=null,this.trackInfoElement=null,this.handleTrackEnd=this.handleTrackEnd.bind(this),this.handleTrackError=this.handleTrackError.bind(this),this.player.playlistManager=this,this.init(),this.updatePlayerControls()}init(){this.player.on("ended",this.handleTrackEnd),this.player.on("error",this.handleTrackError),this.options.showPanel&&this.createUI()}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.play(0)}play(e,t=!1){if(e<0||e>=this.tracks.length){console.warn("VidPly Playlist: Invalid track index",e);return}let i=this.tracks[e];this.currentIndex=e,this.player.load({src:i.src,type:i.type,poster:i.poster,tracks:i.tracks||[]}),this.updateTrackInfo(i),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:i,total:this.tracks.length}),t&&this.player.container&&this.player.container.focus(),setTimeout(()=>{this.player.play()},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.options.autoAdvance&&this.next()}handleTrackError(e){console.error("VidPly Playlist: Track error",e),this.options.autoAdvance&&setTimeout(()=>{this.next()},1e3)}createUI(){if(this.container=this.player.container,!this.container){console.warn("VidPly Playlist: No container found");return}this.trackInfoElement=l.createElement("div",{className:"vidply-track-info",role:"status","aria-live":"polite","aria-atomic":"true"}),this.trackInfoElement.style.display="none",this.container.appendChild(this.trackInfoElement),this.playlistPanel=l.createElement("div",{className:"vidply-playlist-panel",role:"region","aria-label":"Media playlist"}),this.playlistPanel.style.display="none",this.container.appendChild(this.playlistPanel)}updateTrackInfo(e){if(!this.trackInfoElement)return;let t=this.currentIndex+1,i=this.tracks.length,s=e.title||"Untitled",a=e.artist||"",r=`Now playing: Track ${t} of ${i}. ${s}${a?" by "+a:""}`;this.trackInfoElement.innerHTML=`
|
|
14
|
+
<span class="vidply-sr-only">${l.escapeHTML(r)}</span>
|
|
15
15
|
<div class="vidply-track-number" aria-hidden="true">Track ${t} of ${i}</div>
|
|
16
|
-
<div class="vidply-track-title" aria-hidden="true">${
|
|
17
|
-
${a?`<div class="vidply-track-artist" aria-hidden="true">${
|
|
18
|
-
`,this.trackInfoElement.style.display="block"}renderPlaylist(){if(!this.playlistPanel)return;this.playlistPanel.innerHTML="";let e=
|
|
16
|
+
<div class="vidply-track-title" aria-hidden="true">${l.escapeHTML(s)}</div>
|
|
17
|
+
${a?`<div class="vidply-track-artist" aria-hidden="true">${l.escapeHTML(a)}</div>`:""}
|
|
18
|
+
`,this.trackInfoElement.style.display="block"}renderPlaylist(){if(!this.playlistPanel)return;this.playlistPanel.innerHTML="";let e=l.createElement("h2",{className:"vidply-playlist-header",id:"vidply-playlist-heading"});e.textContent=`Playlist (${this.tracks.length})`,this.playlistPanel.appendChild(e);let t=l.createElement("div",{className:"vidply-sr-only","aria-hidden":"false"});t.textContent="Use arrow keys to navigate between tracks. Press Enter or Space to play a track. Press Home or End to jump to first or last track.",this.playlistPanel.appendChild(t);let i=l.createElement("ul",{className:"vidply-playlist-list","aria-labelledby":"vidply-playlist-heading","aria-describedby":"vidply-playlist-instructions"}),s=l.createElement("div",{className:"vidply-sr-only",id:"vidply-playlist-instructions"});s.textContent=`Playlist with ${this.tracks.length} ${this.tracks.length===1?"track":"tracks"}`,this.playlistPanel.appendChild(s),this.tracks.forEach((a,r)=>{let o=this.createPlaylistItem(a,r);i.appendChild(o)}),this.playlistPanel.appendChild(i),this.playlistPanel.style.display="block"}createPlaylistItem(e,t){let i=`Track ${t+1} of ${this.tracks.length}`,s=e.title||`Track ${t+1}`,a=e.artist?` by ${e.artist}`:"",r=t===this.currentIndex,o=r?"Currently playing":"Not playing",n=r?"Press Enter to restart":"Press Enter to play",c=l.createElement("li",{className:"vidply-playlist-item",tabIndex:t===0?0:-1,"aria-label":`${i}. ${s}${a}. ${o}. ${n}.`,"aria-posinset":t+1,"aria-setsize":this.tracks.length,"data-playlist-index":t});r&&(c.classList.add("vidply-playlist-item-active"),c.setAttribute("aria-current","true"),c.setAttribute("tabIndex","0"));let m=l.createElement("span",{className:"vidply-sr-only"});m.textContent=`${i}: `,c.appendChild(m);let y=l.createElement("div",{className:"vidply-playlist-thumbnail","aria-hidden":"true"});if(e.poster)y.style.backgroundImage=`url(${e.poster})`,y.setAttribute("role","img"),y.setAttribute("aria-label",`${s} thumbnail`);else{let v=b("music");v.classList.add("vidply-playlist-thumbnail-icon"),y.appendChild(v)}c.appendChild(y);let g=l.createElement("div",{className:"vidply-playlist-item-info","aria-hidden":"true"}),d=l.createElement("div",{className:"vidply-playlist-item-title"});if(d.textContent=s,g.appendChild(d),e.artist){let v=l.createElement("div",{className:"vidply-playlist-item-artist"});v.textContent=e.artist,g.appendChild(v)}if(c.appendChild(g),r){let v=l.createElement("span",{className:"vidply-sr-only"});v.textContent=" (Currently playing)",c.appendChild(v)}let w=b("play");return w.classList.add("vidply-playlist-item-icon"),w.setAttribute("aria-hidden","true"),c.appendChild(w),c.addEventListener("click",()=>{this.play(t,!0)}),c.addEventListener("keydown",v=>{this.handlePlaylistItemKeydown(v,t)}),c}handlePlaylistItemKeydown(e,t){let i=Array.from(this.playlistPanel.querySelectorAll(".vidply-playlist-item")),s=-1;switch(e.key){case"Enter":case" ":e.preventDefault(),this.play(t,!0);break;case"ArrowDown":e.preventDefault(),t<i.length-1&&(s=t+1);break;case"ArrowUp":e.preventDefault(),t>0&&(s=t-1);break;case"Home":e.preventDefault(),s=0;break;case"End":e.preventDefault(),s=i.length-1;break}s!==-1&&s!==t&&(i[t].setAttribute("tabIndex","-1"),i[s].setAttribute("tabIndex","0"),i[s].focus())}updatePlaylistUI(){if(!this.playlistPanel)return;this.playlistPanel.querySelectorAll(".vidply-playlist-item").forEach((t,i)=>{let s=this.tracks[i],a=`Track ${i+1} of ${this.tracks.length}`,r=s.title||`Track ${i+1}`,o=s.artist?` by ${s.artist}`:"";i===this.currentIndex?(t.classList.add("vidply-playlist-item-active"),t.setAttribute("aria-current","true"),t.setAttribute("tabIndex","0"),t.setAttribute("aria-label",`${a}. ${r}${o}. Currently playing. Press Enter to restart.`),t.scrollIntoView({behavior:"smooth",block:"nearest"})):(t.classList.remove("vidply-playlist-item-active"),t.removeAttribute("aria-current"),t.setAttribute("tabIndex","-1"),t.setAttribute("aria-label",`${a}. ${r}${o}. Not playing. Press Enter to play.`))})}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")}destroy(){this.player.off("ended",this.handleTrackEnd),this.player.off("error",this.handleTrackError),this.trackInfoElement&&this.trackInfoElement.remove(),this.playlistPanel&&this.playlistPanel.remove(),this.clear()}};function Z(){document.querySelectorAll("[data-vidply]").forEach(e=>{let t=e.dataset.vidplyOptions?JSON.parse(e.dataset.vidplyOptions):{},s={...pe(e.dataset),...t};new z(e,s)})}function pe(h){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"};return Object.keys(t).forEach(i=>{let s=t[i],a=h[i];a!==void 0&&(a==="true"?e[s]=!0:a==="false"?e[s]=!1:!isNaN(a)&&a!==""?e[s]=Number(a):e[s]=a)}),e}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Z):Z();var he=z;return ne(de);})();
|