vidply 1.2.0 → 1.2.3

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.
Files changed (167) hide show
  1. package/README.md +974 -946
  2. package/dist/dev/{vidply.AudioDescriptionManager-R47Q4YR4.js → vidply.AudioDescriptionManager-JYYLK5KB.js} +275 -19
  3. package/dist/dev/vidply.AudioDescriptionManager-JYYLK5KB.js.map +7 -0
  4. package/dist/dev/{vidply.CaptionStyleMenu-7XHRBWUM.js → vidply.CaptionStyleMenu-47RCKQF5.js} +4 -4
  5. package/dist/dev/{vidply.DASHRenderer-PWEMC3BT.js → vidply.DASHRenderer-VEJ4HDHO.js} +3 -3
  6. package/dist/dev/vidply.DASHRenderer-VEJ4HDHO.js.map +7 -0
  7. package/dist/dev/{vidply.FloatingPlayerManager-PKNNNAS2.js → vidply.FloatingPlayerManager-C2UVRPZY.js} +5 -5
  8. package/dist/dev/vidply.FloatingPlayerManager-C2UVRPZY.js.map +7 -0
  9. package/dist/dev/{vidply.HLSRenderer-E7RQ74HI.js → vidply.HLSRenderer-ZVBK2TNQ.js} +4 -4
  10. package/dist/dev/vidply.HLSRenderer-ZVBK2TNQ.js.map +7 -0
  11. package/dist/dev/vidply.HTML5Renderer-HLRQUOCU.js +12 -0
  12. package/dist/dev/{vidply.SignLanguageManager-FET5FQZ7.js → vidply.SignLanguageManager-FLUCBW5H.js} +8 -8
  13. package/dist/dev/vidply.SignLanguageManager-FLUCBW5H.js.map +7 -0
  14. package/dist/dev/{vidply.SoundCloudRenderer-RVSJZODO.js → vidply.SoundCloudRenderer-MGMAJ7NK.js} +3 -3
  15. package/dist/dev/vidply.SoundCloudRenderer-MGMAJ7NK.js.map +7 -0
  16. package/dist/dev/{vidply.TranscriptManager-5GXOQCLX.js → vidply.TranscriptManager-Y2RYXHJW.js} +10 -10
  17. package/dist/dev/vidply.TranscriptManager-Y2RYXHJW.js.map +7 -0
  18. package/dist/dev/{vidply.VimeoRenderer-ER2LSBBW.js → vidply.VimeoRenderer-RQFQD7OE.js} +3 -3
  19. package/dist/dev/vidply.VimeoRenderer-RQFQD7OE.js.map +7 -0
  20. package/dist/dev/{vidply.YouTubeRenderer-NFTOWJAB.js → vidply.YouTubeRenderer-EU2BARZF.js} +3 -3
  21. package/dist/dev/vidply.YouTubeRenderer-EU2BARZF.js.map +7 -0
  22. package/dist/dev/{vidply.chunk-BNFIUL2Z.js → vidply.chunk-6LYZYI5G.js} +3 -3
  23. package/dist/dev/vidply.chunk-6LYZYI5G.js.map +7 -0
  24. package/dist/dev/{vidply.chunk-NQPURMQY.js → vidply.chunk-A4ESEOQ2.js} +6 -6
  25. package/dist/dev/vidply.chunk-A4ESEOQ2.js.map +7 -0
  26. package/dist/dev/{vidply.chunk-W25HUCHS.js → vidply.chunk-CGYIED2I.js} +2 -2
  27. package/dist/dev/vidply.chunk-CGYIED2I.js.map +7 -0
  28. package/dist/dev/{vidply.chunk-SK4V2DAU.js → vidply.chunk-HZ7UOKOU.js} +3 -3
  29. package/dist/dev/{vidply.chunk-RZWZGDV7.js → vidply.chunk-I6EDRYGJ.js} +33 -6
  30. package/dist/dev/vidply.chunk-I6EDRYGJ.js.map +7 -0
  31. package/dist/dev/{vidply.chunk-64WXMTGL.js → vidply.chunk-JKMQGLCJ.js} +5 -5
  32. package/dist/dev/vidply.chunk-JKMQGLCJ.js.map +7 -0
  33. package/dist/dev/{vidply.chunk-DZSDO3B7.js → vidply.chunk-JZNZX32Z.js} +2 -2
  34. package/dist/dev/{vidply.chunk-VMSQAZM7.js → vidply.chunk-P25MRJ6O.js} +2 -2
  35. package/dist/dev/{vidply.chunk-6RQA4ROD.js → vidply.chunk-PRFNESYA.js} +2 -2
  36. package/dist/dev/{vidply.chunk-KI7C3QVL.js → vidply.chunk-UI3RYCVF.js} +4 -3
  37. package/dist/dev/vidply.chunk-UI3RYCVF.js.map +7 -0
  38. package/dist/dev/{vidply.chunk-JJ47NO24.js → vidply.chunk-UNFGMABP.js} +2 -2
  39. package/dist/dev/vidply.chunk-UNFGMABP.js.map +7 -0
  40. package/dist/dev/{vidply.de-4YAT7FFM.js → vidply.de-VAUVSQXC.js} +29 -2
  41. package/dist/dev/vidply.de-VAUVSQXC.js.map +7 -0
  42. package/dist/dev/{vidply.es-LEWIRUBH.js → vidply.es-G65HFWO6.js} +29 -2
  43. package/dist/dev/vidply.es-G65HFWO6.js.map +7 -0
  44. package/dist/dev/vidply.esm.js +648 -35
  45. package/dist/dev/vidply.esm.js.map +3 -3
  46. package/dist/dev/{vidply.fr-Q4GV2NOE.js → vidply.fr-MJNOZELM.js} +29 -2
  47. package/dist/dev/vidply.fr-MJNOZELM.js.map +7 -0
  48. package/dist/dev/{vidply.ja-S6ITA6WU.js → vidply.ja-INMDHIYJ.js} +29 -2
  49. package/dist/dev/vidply.ja-INMDHIYJ.js.map +7 -0
  50. package/dist/legacy/vidply.js +1062 -34
  51. package/dist/legacy/vidply.js.map +3 -3
  52. package/dist/legacy/vidply.min.js +2 -2
  53. package/dist/legacy/vidply.min.meta.json +127 -55
  54. package/dist/prod/vidply.AudioDescriptionManager-EKWUNOPE.min.js +6 -0
  55. package/dist/prod/{vidply.CaptionStyleMenu-M3KVQWB5.min.js → vidply.CaptionStyleMenu-JTWSNHRQ.min.js} +2 -2
  56. package/dist/prod/{vidply.DASHRenderer-DN3S27AV.min.js → vidply.DASHRenderer-CIDAHFWM.min.js} +2 -2
  57. package/dist/prod/{vidply.FloatingPlayerManager-SKAZ4J43.min.js → vidply.FloatingPlayerManager-VZXHPCPM.min.js} +2 -2
  58. package/dist/prod/{vidply.HLSRenderer-62HH4YTK.min.js → vidply.HLSRenderer-Q6EFYKID.min.js} +2 -2
  59. package/dist/prod/vidply.HTML5Renderer-XRDJUTOO.min.js +6 -0
  60. package/dist/prod/{vidply.SignLanguageManager-V3OBTSSF.min.js → vidply.SignLanguageManager-JUOSA5AM.min.js} +2 -2
  61. package/dist/prod/{vidply.SoundCloudRenderer-CXRVZIAJ.min.js → vidply.SoundCloudRenderer-7ODD46PO.min.js} +2 -2
  62. package/dist/prod/{vidply.TranscriptManager-SYM3DFUY.min.js → vidply.TranscriptManager-4B2QKYGQ.min.js} +2 -2
  63. package/dist/prod/{vidply.VimeoRenderer-72TWRYFQ.min.js → vidply.VimeoRenderer-MR3UYLY7.min.js} +2 -2
  64. package/dist/prod/{vidply.YouTubeRenderer-UMHEV3KD.min.js → vidply.YouTubeRenderer-ITRTC7NR.min.js} +2 -2
  65. package/dist/prod/{vidply.chunk-YEENJS3Q.min.js → vidply.chunk-3EEDXU4T.min.js} +2 -2
  66. package/dist/prod/{vidply.chunk-P4UXOHWA.min.js → vidply.chunk-5HTX5QXW.min.js} +1 -1
  67. package/dist/prod/{vidply.chunk-ABPXVDLZ.min.js → vidply.chunk-6OGHHIYP.min.js} +2 -2
  68. package/dist/prod/{vidply.chunk-UK7YGOB5.min.js → vidply.chunk-GUPGMFUZ.min.js} +2 -2
  69. package/dist/prod/{vidply.chunk-WX3MVEAL.min.js → vidply.chunk-MWEBITCP.min.js} +1 -1
  70. package/dist/prod/{vidply.chunk-2TB6MUHO.min.js → vidply.chunk-PL3P3JHR.min.js} +1 -1
  71. package/dist/prod/{vidply.chunk-EKEYJWMG.min.js → vidply.chunk-QQZGV7TD.min.js} +2 -2
  72. package/dist/prod/{vidply.chunk-Z3YDSA7O.min.js → vidply.chunk-U5IRRYG5.min.js} +1 -1
  73. package/dist/prod/{vidply.chunk-TM6AXJVD.min.js → vidply.chunk-VKHV4QHA.min.js} +2 -2
  74. package/dist/prod/{vidply.chunk-P3PQBY7N.min.js → vidply.chunk-XA4M574A.min.js} +1 -1
  75. package/dist/prod/{vidply.chunk-RI3X7WHK.min.js → vidply.chunk-ZPTV4JEP.min.js} +2 -2
  76. package/dist/prod/{vidply.de-BCHXRQ53.min.js → vidply.de-UZHFCEZU.min.js} +2 -2
  77. package/dist/prod/{vidply.es-PICAKMZD.min.js → vidply.es-BOISUV2S.min.js} +2 -2
  78. package/dist/prod/vidply.esm.min.js +2 -2
  79. package/dist/prod/{vidply.fr-ZILI7CDR.min.js → vidply.fr-ICSMKPFM.min.js} +2 -2
  80. package/dist/prod/{vidply.ja-5WQ4OK4J.min.js → vidply.ja-VQ2HKGAY.min.js} +2 -2
  81. package/dist/vidply.css +5852 -5796
  82. package/dist/vidply.esm.min.meta.json +204 -149
  83. package/dist/vidply.min.css +1 -1
  84. package/package.json +11 -11
  85. package/src/controls/CaptionManager.ts +598 -598
  86. package/src/controls/ControlBar.ts +4191 -4159
  87. package/src/controls/KeyboardHelp.ts +326 -0
  88. package/src/controls/KeyboardManager.ts +387 -383
  89. package/src/controls/SettingsDialog.ts +488 -488
  90. package/src/controls/TranscriptManager.ts +2426 -2426
  91. package/src/core/AudioDescriptionManager.ts +863 -774
  92. package/src/core/DescriptionSpeechManager.ts +232 -0
  93. package/src/core/FloatingPlayerManager.ts +674 -674
  94. package/src/core/LazyInit.ts +80 -80
  95. package/src/core/MediaSessionManager.ts +341 -0
  96. package/src/core/MetadataAlertsManager.ts +514 -514
  97. package/src/core/Player.ts +2973 -2872
  98. package/src/core/PosterManager.ts +169 -169
  99. package/src/core/PseudoFullscreen.ts +179 -179
  100. package/src/core/ResponsiveManager.ts +231 -231
  101. package/src/core/ResumeManager.ts +236 -236
  102. package/src/core/SignLanguageManager.ts +1308 -1308
  103. package/src/core/ThemeManager.ts +157 -157
  104. package/src/features/PlaylistManager.ts +1838 -1827
  105. package/src/i18n/i18n.ts +223 -223
  106. package/src/i18n/languages/de.ts +244 -217
  107. package/src/i18n/languages/en.ts +245 -218
  108. package/src/i18n/languages/es.ts +241 -214
  109. package/src/i18n/languages/fr.ts +241 -214
  110. package/src/i18n/languages/ja.ts +241 -214
  111. package/src/icons/Icons.ts +168 -167
  112. package/src/index.ts +196 -193
  113. package/src/renderers/DASHRenderer.ts +1077 -1077
  114. package/src/renderers/HLSRenderer.ts +944 -944
  115. package/src/renderers/HTML5Renderer.ts +389 -389
  116. package/src/renderers/SoundCloudRenderer.ts +437 -437
  117. package/src/renderers/VimeoRenderer.ts +298 -298
  118. package/src/renderers/YouTubeRenderer.ts +290 -290
  119. package/src/styles/vidply.css +5852 -5796
  120. package/src/types/events.ts +128 -122
  121. package/src/types/globals.d.ts +313 -313
  122. package/src/types/options.ts +199 -182
  123. package/src/types/renderer.ts +58 -58
  124. package/src/utils/DOMUtils.ts +281 -281
  125. package/src/utils/DownloadInfo.ts +171 -171
  126. package/src/utils/DraggablePanel.ts +539 -539
  127. package/src/utils/DraggablePanelMenu.ts +195 -195
  128. package/src/utils/DraggableResizable.ts +997 -997
  129. package/src/utils/EventEmitter.ts +59 -59
  130. package/src/utils/FormUtils.ts +95 -95
  131. package/src/utils/MenuFactory.ts +483 -483
  132. package/src/utils/Sanitize.ts +70 -70
  133. package/src/utils/SettingsMenuFactory.ts +289 -289
  134. package/src/utils/StorageManager.ts +287 -287
  135. package/src/utils/TrackLabelUtils.ts +52 -52
  136. package/src/utils/UrlSafe.ts +69 -69
  137. package/src/utils/VideoFrameCapture.ts +114 -114
  138. package/src/utils/WindowComponents.ts +250 -250
  139. package/dist/dev/vidply.AudioDescriptionManager-R47Q4YR4.js.map +0 -7
  140. package/dist/dev/vidply.DASHRenderer-PWEMC3BT.js.map +0 -7
  141. package/dist/dev/vidply.FloatingPlayerManager-PKNNNAS2.js.map +0 -7
  142. package/dist/dev/vidply.HLSRenderer-E7RQ74HI.js.map +0 -7
  143. package/dist/dev/vidply.HTML5Renderer-BU4QJJJY.js +0 -12
  144. package/dist/dev/vidply.SignLanguageManager-FET5FQZ7.js.map +0 -7
  145. package/dist/dev/vidply.SoundCloudRenderer-RVSJZODO.js.map +0 -7
  146. package/dist/dev/vidply.TranscriptManager-5GXOQCLX.js.map +0 -7
  147. package/dist/dev/vidply.VimeoRenderer-ER2LSBBW.js.map +0 -7
  148. package/dist/dev/vidply.YouTubeRenderer-NFTOWJAB.js.map +0 -7
  149. package/dist/dev/vidply.chunk-64WXMTGL.js.map +0 -7
  150. package/dist/dev/vidply.chunk-BNFIUL2Z.js.map +0 -7
  151. package/dist/dev/vidply.chunk-JJ47NO24.js.map +0 -7
  152. package/dist/dev/vidply.chunk-KI7C3QVL.js.map +0 -7
  153. package/dist/dev/vidply.chunk-NQPURMQY.js.map +0 -7
  154. package/dist/dev/vidply.chunk-RZWZGDV7.js.map +0 -7
  155. package/dist/dev/vidply.chunk-W25HUCHS.js.map +0 -7
  156. package/dist/dev/vidply.de-4YAT7FFM.js.map +0 -7
  157. package/dist/dev/vidply.es-LEWIRUBH.js.map +0 -7
  158. package/dist/dev/vidply.fr-Q4GV2NOE.js.map +0 -7
  159. package/dist/dev/vidply.ja-S6ITA6WU.js.map +0 -7
  160. package/dist/prod/vidply.AudioDescriptionManager-RHLIJW5C.min.js +0 -6
  161. package/dist/prod/vidply.HTML5Renderer-IU5T3WEW.min.js +0 -6
  162. /package/dist/dev/{vidply.CaptionStyleMenu-7XHRBWUM.js.map → vidply.CaptionStyleMenu-47RCKQF5.js.map} +0 -0
  163. /package/dist/dev/{vidply.HTML5Renderer-BU4QJJJY.js.map → vidply.HTML5Renderer-HLRQUOCU.js.map} +0 -0
  164. /package/dist/dev/{vidply.chunk-SK4V2DAU.js.map → vidply.chunk-HZ7UOKOU.js.map} +0 -0
  165. /package/dist/dev/{vidply.chunk-DZSDO3B7.js.map → vidply.chunk-JZNZX32Z.js.map} +0 -0
  166. /package/dist/dev/{vidply.chunk-VMSQAZM7.js.map → vidply.chunk-P25MRJ6O.js.map} +0 -0
  167. /package/dist/dev/{vidply.chunk-6RQA4ROD.js.map → vidply.chunk-PRFNESYA.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * VidPly v1.2.0 - Universal, Accessible Video Player
2
+ * VidPly v1.2.3 - Universal, Accessible Video Player
3
3
  * (c) 2026 Matthias Peltzer
4
4
  * Released under GPL-2.0-or-later License
5
5
  */
6
- import{TimeUtils as e}from"./vidply.chunk-TM6AXJVD.min.js";import{createIconElement as t,createPlayOverlay as i}from"./vidply.chunk-ABPXVDLZ.min.js";import{focusElement as s}from"./vidply.chunk-P3PQBY7N.min.js";import{HTML5Renderer as a}from"./vidply.chunk-Z3YDSA7O.min.js";import{CaptionManager as n}from"./vidply.chunk-UK7YGOB5.min.js";import{StorageManager as r}from"./vidply.chunk-RI3X7WHK.min.js";import{debounce as o,isMobile as l,rafWithTimeout as c,reducedMotionScrollOptions as u,throttle as h}from"./vidply.chunk-WX3MVEAL.min.js";import{DOMUtils as p,i18n as d,isForbiddenKey as g}from"./vidply.chunk-EKEYJWMG.min.js";var y=class{events={};on(e,t){const i=this.events[e]??[];return i.push(t),this.events[e]=i,this}once(e,t){const i=(...s)=>{t(...s),this.off(e,i)};return this.on(e,i)}off(e,t){const i=this.events[e];return i?(t?this.events[e]=i.filter(e=>e!==t):delete this.events[e],this):this}emit(e,...t){const i=this.events[e];return i?(i.forEach(e=>{e(...t)}),this):this}removeAllListeners(){return this.events={},this}};async function m(e,t,i={}){if(!e||"VIDEO"!==e.tagName)return null;const{restoreState:s=!0,quality:a=.9,maxWidth:n,maxHeight:r}=i,o=!e.paused,l=e.currentTime,c=e.muted;return s&&(e.muted=!0),new Promise(i=>{const u=()=>{try{let t=e.videoWidth||640,u=e.videoHeight||360;if(n&&t>n){const e=n/t;t=n,u=Math.round(u*e)}if(r&&u>r){const e=r/u;u=r,t=Math.round(t*e)}const h=document.createElement("canvas");h.width=t,h.height=u;const p=h.getContext("2d");if(!p)return void i(null);p.drawImage(e,0,0,t,u);const d=h.toDataURL("image/jpeg",a);s&&(e.currentTime=l,e.muted=c,o&&!e.paused&&e.play().catch(e=>{"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] preview play() rejected:",e)})),i(d)}catch(t){"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] frame capture failed:",t),s&&(e.currentTime=l,e.muted=c,o&&!e.paused&&e.play().catch(e=>{"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] preview play() rejected:",e)})),i(null)}},h=()=>{e.removeEventListener("seeked",h),requestAnimationFrame(()=>{requestAnimationFrame(u)})};if(Math.abs(e.currentTime-t)<.1&&e.readyState>=2)u();else if(e.readyState>=1)e.addEventListener("seeked",h),e.currentTime=t;else{const i=()=>{e.removeEventListener("loadedmetadata",i),e.addEventListener("seeked",h),e.currentTime=t};e.addEventListener("loadedmetadata",i)}})}var f={"video/mp4":"MP4","video/webm":"WebM","video/ogg":"Ogg","video/quicktime":"MOV","video/x-matroska":"MKV","video/x-msvideo":"AVI","audio/mpeg":"MP3","audio/mp3":"MP3","audio/mp4":"M4A","audio/x-m4a":"M4A","audio/aac":"AAC","audio/ogg":"Ogg","audio/opus":"Opus","audio/wav":"WAV","audio/x-wav":"WAV","audio/wave":"WAV","audio/flac":"FLAC","audio/x-flac":"FLAC","audio/webm":"WebM"},v={mp4:"MP4",m4v:"MP4",mov:"MOV",webm:"WebM",mkv:"MKV",avi:"AVI",ogv:"Ogg",ogg:"Ogg",oga:"Ogg",mp3:"MP3",m4a:"M4A",aac:"AAC",opus:"Opus",wav:"WAV",flac:"FLAC"};function b(e){const{baseLabel:t,format:i,sizeBytes:s,locale:a="en"}=e,n=null!=s?((e,t="en")=>{if(!isFinite(e)||e<0)return null;const i=["B","KB","MB","GB","TB"];let s=e,a=0;for(;s>=1024&&a<i.length-1;)s/=1024,a++;const n=a<2?0:1;let r;try{r=new Intl.NumberFormat(t,{minimumFractionDigits:n,maximumFractionDigits:n}).format(s)}catch{r=s.toFixed(n)}return`${r} ${i[a]}`})(s,a):null;return i&&n?e.withFormatSizeTemplate.replace("{format}",i).replace("{size}",n):i?e.withFormatTemplate.replace("{format}",i):n?e.withSizeTemplate.replace("{size}",n):t}var w=new WeakMap;function P(e){let t=w.get(e);return t||(t={},w.set(e,t)),t}var k=class{player;_overflowMenuItemRef=null;controls;currentPreviewTime;element;hideTimeout;isDraggingProgress;isDraggingVolume;openMenu;openMenuButton;overflowResizeObserver=null;previewSupported=!1;previewThumbnailCache=new Map;previewThumbnailTimeout=null;previewUsingMainVideo=!1;previewVideo=null;previewVideoInitialized=!1;previewVideoReady=!1;rightButtons;overflowMenuButton=null;_activeVolumeTrack=null;_progressBarRect=null;constructor(e){this.player=e,this.controls={},this.hideTimeout=void 0,this.isDraggingProgress=!1,this.isDraggingVolume=!1,this.currentPreviewTime=null,this.openMenu=null,this.openMenuButton=null,this.init()}init(){this.createElement(),this.createControls(),this.updateDuration(),this.updateProgress(),this.attachEvents(),this.setupAutoHide(),this.setupOverflowDetection(),this.setupGlobalDragListeners()}setupGlobalDragListeners(){const e=this.player.lifecycleSignal;document.addEventListener("mousemove",e=>{if(this.isDraggingProgress&&this._progressBarRect){const t=this._progressBarRect,i=t.width>0?Math.max(0,Math.min(1,(e.clientX-t.left)/t.width)):0;return void this.player.seek(i*(this.player.state.duration||0))}if(this.isDraggingVolume&&this._activeVolumeTrack){const t=this._activeVolumeTrack.getBoundingClientRect(),i=Math.max(0,Math.min(1,1-(e.clientY-t.top)/t.height));this.player.setVolume(i)}},{signal:e}),document.addEventListener("mouseup",()=>{this.isDraggingProgress=!1,this._progressBarRect=null,this.isDraggingVolume=!1,this._activeVolumeTrack=null},{signal:e})}isTouchDevice(){return"ontouchstart"in window||navigator.maxTouchPoints>0||(navigator.msMaxTouchPoints??0)>0}positionMenu(e,t,i=!1){const s=l(),a=e.classList.contains(`${this.player.options.classPrefix}-overflow-menu-list`);if(this.player.state.fullscreen&&e.parentElement===this.player.container){const s=()=>{const i=t.getBoundingClientRect(),s=e.getBoundingClientRect(),n=this.player.container.getBoundingClientRect(),r=i.left+i.width/2-n.left,o=i.bottom-n.top,l=i.top-n.top;l>=s.height+20||l>n.bottom-i.bottom?(e.style.bottom=n.height-(i.top-n.top)+8+"px",e.style.top="auto",e.classList.remove("vidply-menu-below")):(e.style.top=`${o+8}px`,e.style.bottom="auto",e.classList.add("vidply-menu-below")),a?(e.style.right=n.width-(i.right-n.left)+"px",e.style.left="auto",e.style.transform="none"):(e.style.left=`${r}px`,e.style.right="auto",e.style.transform="translateX(-50%)")};return void(i?s():requestAnimationFrame(s))}if(s){const s=e.classList.contains(`${this.player.options.classPrefix}-volume-menu`),a=()=>{const i=t.parentElement;if(!i)return;const a=t.getBoundingClientRect(),n=i.getBoundingClientRect(),r=e.getBoundingClientRect(),o=window.innerWidth,l=window.innerHeight;if(s)return e.style.left=a.left+a.width/2-n.left+"px",e.style.right="auto",void(e.style.transform="translateX(-50%)");r.right>o&&(e.style.left="auto",e.style.right="10px",e.style.transform="none"),r.left<0&&(e.style.left="10px",e.style.right="auto",e.style.transform="none"),r.top<10&&(e.style.top="10px",e.style.bottom="auto"),r.bottom>l-10&&(e.style.bottom="10px",e.style.top="auto")};return void(i?a():requestAnimationFrame(a))}const n=()=>{const i=t.getBoundingClientRect(),s=e.getBoundingClientRect(),n=window.innerWidth,r=window.innerHeight,o=t.parentElement;if(!o)return;const l=o.getBoundingClientRect(),c=i.left+i.width/2-l.left,u=i.top;let h=i.top-l.top-s.height-8,p=null;u<s.height+20&&r-i.bottom>u?(h=null,p=l.bottom-l.top-(i.bottom-l.top)+8,e.classList.add("vidply-menu-below")):e.classList.remove("vidply-menu-below");let d="auto",g="auto",y="translateX(0)";if(a)d="auto",g=0,y="translateX(0)";else{d=c-s.width/2;const e=i.left+i.width/2-s.width/2;e<10?(d=0,y="translateX(0)"):e+s.width>n-10?(d="auto",g=0,y="translateX(0)"):(d=c,y="translateX(-50%)")}null!==h?(e.style.top=`${h}px`,e.style.bottom="auto"):null!==p&&(e.style.top="auto",e.style.bottom=`${p}px`),"auto"!==d?(e.style.left=`${d}px`,e.style.right="auto"):(e.style.left="auto",e.style.right=`${g}px`),e.style.transform=y};i?n():requestAnimationFrame(()=>{setTimeout(n,10)})}insertMenuIntoDOM(e,t){e.id||(e.id=`vidply-menu-${Math.random().toString(36).substr(2,9)}`),t.setAttribute("aria-controls",e.id),t.setAttribute("aria-haspopup","true"),this.player.state.fullscreen?(this.player.container.appendChild(e),e.dataset.triggerButton=t.getAttribute("aria-label")||"button"):t.insertAdjacentElement("afterend",e)}attachMenuCloseHandler(e,t,i=!1){if(this.openMenu&&this.openMenu!==e&&this.openMenuButton){const e=w.get(this.openMenuButton);e?.blur&&(this.openMenuButton.removeEventListener("blur",e.blur),delete e.blur),e?.mousedown&&(this.openMenuButton.removeEventListener("mousedown",e.mousedown),delete e.mousedown),this.openMenu&&document.contains(this.openMenu)?this.openMenu.remove():this.openMenu&&this.openMenu.parentNode&&this.openMenu.parentNode.removeChild(this.openMenu),this.openMenuButton&&this.openMenuButton.setAttribute("aria-expanded","false")}this.openMenu=e,this.openMenuButton=t,this.positionMenu(e,t),t&&t.setAttribute("aria-expanded","true");let s=!1,a=!0;const n=()=>{s=!0,a=!1,setTimeout(()=>{s=!1,a=!0},200)};t.addEventListener("mousedown",n),P(t).mousedown=n;const r=i=>{if(!a||s)return;if(this.openMenu!==e)return;const o=i.relatedTarget;requestAnimationFrame(()=>{setTimeout(()=>{if(!a||this.openMenu!==e)return;const i=document.activeElement;if(e.contains(i))return;const s=this.player.signLanguageWrapper,l=this.player.transcriptManager?.transcriptWindow;if(s&&s.contains(i)||l&&l.contains(i))return;const c=Array.from(this.element.querySelectorAll("button")),u=null!==i&&c.includes(i)&&i!==t,h=null!==o&&o instanceof Element&&c.includes(o)&&o!==t;if(u||h){if(this.openMenu!==e)return;e&&document.contains(e)?e.remove():e&&e.parentNode&&e.parentNode.removeChild(e),t&&t.setAttribute("aria-expanded","false"),this.openMenu===e&&(this.openMenu=null,this.openMenuButton=null),t.removeEventListener("blur",r),t.removeEventListener("mousedown",n);const i=w.get(t);i&&(delete i.blur,delete i.mousedown)}},10)})};t.addEventListener("blur",r),P(t).blur=r;const o=()=>{this.closeMenuAndReturnFocus(e,t)};let l=null,c=null;setTimeout(()=>{l=s=>{i&&e.contains(s.target)||this.openMenu!==e||e.contains(s.target)||t.contains(s.target)||(o(),l&&document.removeEventListener("click",l),c&&document.removeEventListener("keydown",c))},c=i=>{"Escape"===i.key&&this.openMenu===e&&(i.preventDefault(),i.stopPropagation(),this.closeMenuAndReturnFocus(e,t,!0),l&&document.removeEventListener("click",l),c&&document.removeEventListener("keydown",c))};const s=this.player.lifecycleSignal;document.addEventListener("click",l,{signal:s}),document.addEventListener("keydown",c,{signal:s})},100)}closeMenuAndReturnFocus(e,t,i=!0){e&&(document.contains(e)?e.remove():e.parentNode&&e.parentNode.removeChild(e)),t&&(t.setAttribute("aria-expanded","false"),e&&e.id&&t.removeAttribute("aria-controls"),i&&requestAnimationFrame(()=>{setTimeout(()=>{t&&document.contains(t)&&t.focus({preventScroll:!0})},0)})),this.openMenu===e&&(this.openMenu=null,this.openMenuButton=null)}closeOpenMenu(){this.openMenu&&this.openMenuButton&&(this.openMenu&&document.contains(this.openMenu)?this.openMenu.remove():this.openMenu&&this.openMenu.parentNode&&this.openMenu.parentNode.removeChild(this.openMenu),this.openMenuButton&&this.openMenuButton.setAttribute("aria-expanded","false"),this.openMenu=null,this.openMenuButton=null)}attachMenuKeyboardNavigation(e,t){const i=Array.from(e.querySelectorAll(`.${this.player.options.classPrefix}-menu-item`)).filter(e=>"true"!==e.getAttribute("aria-disabled"));0!==i.length&&e.addEventListener("keydown",a=>{const n=i.indexOf(document.activeElement);switch(a.key){case"ArrowDown":{a.preventDefault(),a.stopPropagation();const e=i[(n+1)%i.length];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(u("nearest")));break}case"ArrowUp":{a.preventDefault(),a.stopPropagation();const e=i[(n-1+i.length)%i.length];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(u("nearest")));break}case"ArrowLeft":case"ArrowRight":a.preventDefault(),a.stopPropagation();break;case"Home":{a.preventDefault(),a.stopPropagation();const e=i[0];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(u("nearest")));break}case"End":{a.preventDefault(),a.stopPropagation();const e=i[i.length-1];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(u("nearest")));break}case"Enter":case" ":a.preventDefault(),a.stopPropagation(),document.activeElement&&i.includes(document.activeElement)&&(document.activeElement.click(),s(t,{delay:0}));break;case"Escape":a.preventDefault(),a.stopPropagation(),this.closeMenuAndReturnFocus(e,t,!0)}})}createElement(){this.element=p.createElement("div",{className:`${this.player.options.classPrefix}-controls`,attributes:{role:"region","aria-label":d.t("player.label")+" controls"}})}createControls(){const e=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-time-wrapper`});this.player.options.progressBar&&(this.createProgressBar(),this.controls.progress&&e.appendChild(this.controls.progress)),(this.player.options.currentTime||this.player.options.duration)&&e.appendChild(this.createTimeDisplay()),this.element.appendChild(e);const t=p.createElement("div",{className:`${this.player.options.classPrefix}-controls-buttons`}),i=p.createElement("div",{className:`${this.player.options.classPrefix}-controls-left`});this.player.playlistManager&&i.appendChild(this.createPreviousButton()),this.player.options.playPauseButton&&i.appendChild(this.createPlayPauseButton()),i.appendChild(this.createRestartButton()),this.player.playlistManager&&i.appendChild(this.createNextButton()),this.player.playlistManager||i.appendChild(this.createRewindButton()),this.player.playlistManager||i.appendChild(this.createForwardButton()),this.player.options.volumeControl&&(this.isTouchDevice()?i.appendChild(this.createMuteButton()):i.appendChild(this.createVolumeControl())),this.rightButtons=p.createElement("div",{className:`${this.player.options.classPrefix}-controls-right`});const s=this.hasChapterTracks(),a=this.hasCaptionTracks(),n=this.hasQualityLevels(),r=this.hasAudioDescription();if(this.player.options.chaptersButton&&s){const e=this.createChaptersButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.captionsButton&&a){const e=this.createCaptionsButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.captionStyleButton&&a){const e=this.createCaptionStyleButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}const o=this.player.currentSource||this.player.element?.getAttribute?.("src")||this.player.element?.currentSrc||this.player.element?.src||this.player.element?.querySelector?.("source")?.getAttribute?.("src")||this.player.element?.querySelector?.("source")?.src||"",l="string"==typeof o&&o.includes(".m3u8"),c="string"==typeof o&&o.includes(".mpd"),u="video"===this.player.element?.tagName?.toLowerCase(),h=Boolean(this.player.options.hideSpeedForHls)&&l||Boolean(this.player.options.hideSpeedForHlsVideo)&&l&&u||Boolean(this.player.options.hideSpeedForDash)&&c||Boolean(this.player.options.hideSpeedForDashVideo)&&c&&u;if(this.player.options.speedButton&&!h){const e=this.createSpeedButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.audioDescriptionButton&&r){const e=this.createAudioDescriptionButton();e.dataset.overflowPriority="2",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.transcriptButton&&a){const e=this.createTranscriptButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.playlistManager&&!1!==this.player.options.playlistToggleButton){const e=this.createPlaylistToggleButton();e.dataset.overflowPriority="2",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}const d=this.hasSignLanguage(),g=this.player.options.signLanguageDisplayMode||"both";if(!1!==this.player.options.signLanguageButton&&d){if(["pip","both"].includes(g)){const e=this.createSignLanguageButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(["main","both"].includes(g)){const e=this.createSignLanguageInMainViewButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}}if(this.player.options.qualityButton&&n){const e=this.createQualityButton();e.dataset.overflowPriority="2",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.downloadButton){const e=this.player.options.downloadUrl||this.player.element?.dataset?.vidplyDownloadUrl;if(e){const t=this.createDownloadButton(e);t.dataset.overflowPriority="2",t.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(t)}}const y=this.player.options.pipButton&&(this.player.options.floating||"pictureInPictureEnabled"in document),m="audio"===this.player.element.tagName.toLowerCase();if(y&&(!this.player.options.floating||!m)){const e=this.createPipButton();this.player.options.floating?(e.dataset.skipOverflow="true",e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="1"):(e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3"),this.rightButtons.appendChild(e)}this.overflowMenuButton=this.createOverflowMenuButton(),this.overflowMenuButton.style.display="none",this.rightButtons.appendChild(this.overflowMenuButton);const f="audio"===this.player.element.tagName.toLowerCase();if(this.player.options.fullscreenButton&&!f){const e=this.createFullscreenButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="1",this.rightButtons.appendChild(e)}t.appendChild(i),t.appendChild(this.rightButtons),this.element.appendChild(t),this.ensureButtonTooltips(t)}ensureButtonTooltips(e){e.querySelectorAll("button").forEach(e=>{if(e.querySelector(`.${this.player.options.classPrefix}-tooltip`))return;if(e.querySelector(`.${this.player.options.classPrefix}-button-text`))return;if("menuitem"===e.getAttribute("role")||e.classList.contains(`${this.player.options.classPrefix}-settings-item`)||e.classList.contains(`${this.player.options.classPrefix}-menu-item`)||e.classList.contains(`${this.player.options.classPrefix}-transcript-settings-item`)||e.classList.contains(`${this.player.options.classPrefix}-sign-language-settings-item`)||e.classList.contains(`${this.player.options.classPrefix}-popup-settings-item`))return;const t=e.getAttribute("aria-label");t&&p.attachTooltip(e,t,this.player.options.classPrefix)})}hasChapterTracks(){const e=this.player.element.textTracks;for(let t=0;t<e.length;t++)if("chapters"===e[t]?.kind)return!0;if(Array.from(this.player.element.querySelectorAll('track[kind="chapters"]')).length>0)return!0;const t=this.player.playlistManager?.getCurrentTrack?.();return!(!t?.tracks||!Array.isArray(t.tracks))&&t.tracks.some(e=>"chapters"===e?.kind)}hasCaptionTracks(){const e=this.player.element.textTracks;for(let t=0;t<e.length;t++){const i=e[t];if(i&&("captions"===i.kind||"subtitles"===i.kind)&&!i._vidplyStale)return!0}if(Array.from(this.player.element.querySelectorAll("track")).some(e=>"captions"===e.getAttribute("kind")||"subtitles"===e.getAttribute("kind")))return!0;const t=this.player.playlistManager?.getCurrentTrack?.();return!!(t?.tracks??[]).some(e=>"captions"===e?.kind||"subtitles"===e?.kind)}hasQualityLevels(){if(this.player.renderer&&this.player.renderer.getQualities){const e=this.player.renderer.getQualities();return e&&e.length>1}return!1}hasAudioDescription(){return!!(this.player.audioDescriptionSrc&&this.player.audioDescriptionSrc.length>0)||Array.from(this.player.element.textTracks||[]).some(e=>"descriptions"===e.kind)}hasSignLanguage(){const e=this.player.signLanguageSrc&&this.player.signLanguageSrc.length>0,t=this.player.signLanguageSources&&Object.keys(this.player.signLanguageSources).length>0;return e||t}createProgressBar(){const e=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-container`,attributes:{role:"slider","aria-label":d.t("player.progress"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":"0",tabindex:"0"}});this.controls.buffered=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-buffered`}),this.controls.played=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-played`}),this.controls.progressHandle=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-handle`}),this.controls.progressTooltip=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-tooltip`}),this.controls.progressPreview=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-preview`,attributes:{"aria-hidden":"true"}}),this.controls.progressTooltip.appendChild(this.controls.progressPreview),this.controls.progressTooltipTime=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-tooltip-time`}),this.controls.progressTooltip.appendChild(this.controls.progressTooltipTime),e.appendChild(this.controls.buffered),e.appendChild(this.controls.played),this.controls.played.appendChild(this.controls.progressHandle),e.appendChild(this.controls.progressTooltip),this.controls.progress=e,this.initPreviewThumbnail(),this.setupProgressBarEvents()}initPreviewThumbnail(){this.previewThumbnailCache=new Map,this.previewVideo=null,this.currentPreviewTime=null,this.previewThumbnailTimeout=null,this.previewSupported=!1,this.previewVideoReady=!1,this.previewVideoInitialized=!1,this.previewUsingMainVideo=!1}ensurePreviewVideoInitialized(){if(this.previewVideoInitialized)return;if(!this.player?.state?.hasStartedPlayback)return;if(!1===this.player.options.thumbnailPreview)return this.previewSupported=!1,void(this.previewVideoInitialized=!0);const e=this.player.renderer,t=e&&e.media&&"VIDEO"===e.media.tagName;if(!t)return this.previewSupported=!1,void(this.previewVideoInitialized=!0);const i=!0===e.isStreaming||e.hls&&void 0!==e.hls.loadLevel||e.dash&&("function"==typeof e.dash.getQualityFor||"function"==typeof e.dash.getCurrentRepresentationForType||"function"==typeof e.dash.getRepresentationsByType||"function"==typeof e.dash.attachSource),s=t&&e.media===this.player.element&&!i&&"function"==typeof e.seek;if(i)return this.previewVideo=null,this.previewVideoReady=!1,this.previewSupported=!1,this.previewUsingMainVideo=!1,this.previewVideoInitialized=!0,void this.player.log("Preview thumbnails disabled for streaming sources","info");if(this.previewSupported=s&&t,!this.previewSupported)return void(this.previewVideoInitialized=!0);const a=e.media||this.player.element;let n=null;if(a.src)n=a.src;else{const e=a.querySelector("source");e&&(n=e.src)}if(!n)return this.player.log("No video source found for preview","warn"),this.previewSupported=!1,void(this.previewVideoInitialized=!0);this.previewVideo=document.createElement("video"),this.previewVideo.muted=!0,this.previewVideo.preload="auto",this.previewVideo.playsInline=!0,this.previewVideo.style.position="absolute",this.previewVideo.style.visibility="hidden",this.previewVideo.style.width="1px",this.previewVideo.style.height="1px",this.previewVideo.style.top="-9999px",a.crossOrigin&&(this.previewVideo.crossOrigin=a.crossOrigin),this.previewVideo.addEventListener("error",e=>{this.player.log("Preview video failed to load:",e,"warn"),this.previewSupported=!1}),this.previewVideo.addEventListener("loadedmetadata",()=>{this.previewVideoReady=!0,this.player.options.thumbnailPregenerate&&this.pregenerateThumbnails()},{once:!0}),this.player.container&&this.player.container.appendChild(this.previewVideo),this.previewVideo.src=n,this.previewVideoReady=!1,this.previewUsingMainVideo=!1,this.previewVideoInitialized=!0}pregenerateThumbnails(){if(!this.previewSupported||!this.previewVideo)return;if(!window.requestIdleCallback)return;const e=this.player.state.duration;if(!e||e<=0)return;const t=this.player.options.thumbnailInterval||10,i=[];for(let s=0;s<e;s+=t){const e=Math.floor(s);this.previewThumbnailCache.has(e)||i.push(s)}if(0===i.length)return;this.player.log(`Pre-generating ${i.length} thumbnails`,"debug");const s=e=>{for(;e.timeRemaining()>50&&i.length>0;){const e=i.shift();if(void 0===e)break;this.generatePreviewThumbnail(e).catch(()=>{})}i.length>0&&this.previewSupported&&requestIdleCallback(s,{timeout:5e3})};requestIdleCallback(s,{timeout:5e3})}async generatePreviewThumbnail(e){if(!this.previewSupported||!this.previewVideo)return null;const t=this.previewVideo;this.previewVideoReady||(t.readyState<2?await new Promise((e,i)=>{const s=setTimeout(()=>{i(new Error("Preview video data load timeout"))},1e4),a=()=>{clearTimeout(s),t.removeEventListener("loadeddata",n),t.removeEventListener("canplay",n),t.removeEventListener("error",r)},n=()=>{t.readyState>=2&&(a(),this.previewVideoReady=!0,e())},r=()=>{a(),i(new Error("Preview video failed to load"))};t.readyState>=1&&t.addEventListener("loadeddata",n),t.addEventListener("canplay",n),t.addEventListener("error",r),t.readyState>=2&&n()}).catch(()=>(this.previewSupported=!1,null)):this.previewVideoReady=!0);const i=Math.floor(e);if(this.previewThumbnailCache.has(i))return this.previewThumbnailCache.get(i);const s=this.previewUsingMainVideo,a=this.player.options.thumbnailQuality||.8,n=this.player.options.thumbnailWidth||160,r=this.player.options.thumbnailHeight||90,o=await m(t,e,{restoreState:s,quality:a,maxWidth:n,maxHeight:r});if(o){if(this.previewThumbnailCache.size>=(this.player.options.thumbnailCacheSize||50)){const e=this.previewThumbnailCache.keys().next().value;void 0!==e&&this.previewThumbnailCache.delete(e)}this.previewThumbnailCache.set(i,o)}return o}async updatePreviewThumbnail(e){this.previewSupported&&this.controls.progressPreview&&(this.previewThumbnailTimeout&&clearTimeout(this.previewThumbnailTimeout),this.previewThumbnailTimeout=setTimeout(async()=>{try{const t=await this.generatePreviewThumbnail(e);t&&this.controls.progressPreview?(this.controls.progressPreview.style.backgroundImage=`url("${t}")`,this.controls.progressPreview.style.display="block",this.controls.progressPreview.style.backgroundRepeat="no-repeat",this.controls.progressPreview.style.backgroundPosition="center"):this.controls.progressPreview&&(this.controls.progressPreview.style.display="none"),this.currentPreviewTime=e}catch(e){this.player.log("Preview thumbnail update failed:",e,"warn"),this.controls.progressPreview&&(this.controls.progressPreview.style.display="none")}},100))}setupProgressBarEvents(){const t=this.controls.progress;if(!t)return;const i=e=>{const i=t.getBoundingClientRect(),s=i.width>0?Math.max(0,Math.min(1,(e-i.left)/i.width)):0;return{percent:s,time:s*(this.player.state.duration||0)}};t.addEventListener("mousedown",e=>{this.isDraggingProgress=!0,this._progressBarRect=t.getBoundingClientRect();const{time:s}=i(e.clientX);this.player.seek(s)}),t.addEventListener("mousemove",s=>{if(!this.isDraggingProgress){const{time:a}=i(s.clientX),n=t.getBoundingClientRect(),r=s.clientX-n.left,o=this.controls.progressTooltip,l=this.controls.progressTooltipTime;if(o&&l&&(l.textContent=e.formatTime(a),o.style.left=`${r}px`,o.style.display="block"),!this.player?.state?.hasStartedPlayback)return void(this.controls.progressPreview&&(this.controls.progressPreview.style.display="none"));this.ensurePreviewVideoInitialized(),this.previewSupported?this.updatePreviewThumbnail(a):this.controls.progressPreview&&(this.controls.progressPreview.style.display="none")}}),t.addEventListener("mouseleave",()=>{this.controls.progressTooltip&&(this.controls.progressTooltip.style.display="none"),this.previewThumbnailTimeout&&clearTimeout(this.previewThumbnailTimeout)}),t.addEventListener("keydown",e=>{const t=this.player.options.seekInterval||5,i=this.player.options.seekIntervalLarge||30,s=Number(this.player.state.duration);switch(e.key){case"ArrowLeft":e.preventDefault(),this.player.seekBackward(t);break;case"ArrowRight":e.preventDefault(),this.player.seekForward(t);break;case"PageUp":e.preventDefault(),this.player.seekForward(i);break;case"PageDown":e.preventDefault(),this.player.seekBackward(i);break;case"Home":e.preventDefault(),this.player.seek(0);break;case"End":e.preventDefault(),Number.isFinite(s)&&s>0&&this.player.seek(Math.max(0,s-.1))}}),t.addEventListener("touchstart",e=>{this.isDraggingProgress=!0;const t=e.touches[0];if(!t)return;const{time:s}=i(t.clientX);this.player.seek(s)}),t.addEventListener("touchmove",e=>{if(this.isDraggingProgress){e.preventDefault();const t=e.touches[0];if(!t)return;const{time:s}=i(t.clientX);this.player.seek(s)}}),t.addEventListener("touchend",()=>{this.isDraggingProgress=!1})}createPlayPauseButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-play-pause`,attributes:{type:"button","aria-label":d.t("player.play")}});return e.appendChild(t("play")),e.addEventListener("click",()=>{this.player.toggle()}),this.controls.playPause=e,e}createRestartButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-restart`,attributes:{type:"button","aria-label":d.t("player.restart")}});return e.appendChild(t("restart")),e.addEventListener("click",()=>{this.player.seek(0),this.player.play()}),e}createPreviousButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-previous`,attributes:{type:"button","aria-label":d.t("player.previous")}});e.appendChild(t("skipPrevious")),e.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.previous()});const i=()=>{this.player.playlistManager&&(e.disabled=!this.player.playlistManager.hasPrevious()&&!this.player.playlistManager.options.loop)};return this.player.on("playlisttrackchange",i),i(),this.controls.previous=e,e}createNextButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-next`,attributes:{type:"button","aria-label":d.t("player.next")}});e.appendChild(t("skipNext")),e.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.next()});const i=()=>{this.player.playlistManager&&(e.disabled=!this.player.playlistManager.hasNext()&&!this.player.playlistManager.options.loop)};return this.player.on("playlisttrackchange",i),i(),this.controls.next=e,e}createPlaylistToggleButton(){const e=this.player.playlistManager?`${this.player.playlistManager.uniqueId}-panel`:"vidply-playlist-panel",i=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-playlist-toggle`,attributes:{type:"button","aria-label":d.t("player.playlist"),"aria-expanded":"false","aria-pressed":"false","aria-controls":e}});return i.appendChild(t("playlist")),i.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.togglePanel()}),this.controls.playlistToggle=i,i}createRewindButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-rewind`,attributes:{type:"button","aria-label":d.t("player.rewindSeconds",{seconds:15})}});return e.appendChild(t("rewind")),e.addEventListener("click",()=>{this.player.seekBackward(15)}),e}createForwardButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-forward`,attributes:{type:"button","aria-label":d.t("player.forwardSeconds",{seconds:15})}});return e.appendChild(t("forward")),e.addEventListener("click",()=>{this.player.seekForward(15)}),e}createMuteButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":d.t("player.mute")}});return e.appendChild(t("volumeHigh")),e.addEventListener("click",()=>{this.player.toggleMute()}),this.controls.mute=e,e}createVolumeControl(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":d.t("player.volume"),"aria-expanded":"false"}});return e.appendChild(t("volumeHigh")),e.addEventListener("contextmenu",e=>{e.preventDefault(),this.player.toggleMute()}),e.addEventListener("click",()=>{this.showVolumeSlider(e)}),this.controls.mute=e,e}showVolumeSlider(e){const t=document.querySelector(`.${this.player.options.classPrefix}-volume-menu`);if(t)return t.remove(),void e.setAttribute("aria-expanded","false");const i=p.createElement("div",{className:`${this.player.options.classPrefix}-volume-menu ${this.player.options.classPrefix}-menu`}),a=Math.round(100*this.player.state.volume),n=p.createElement("div",{className:`${this.player.options.classPrefix}-volume-slider`,attributes:{role:"slider","aria-label":d.t("player.volume"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":String(a),"aria-valuetext":this.player.state.muted?d.t("player.muted"):d.t("player.volumePercent",{percent:a}),tabindex:"0"}}),r=p.createElement("div",{className:`${this.player.options.classPrefix}-volume-track`}),o=p.createElement("div",{className:`${this.player.options.classPrefix}-volume-fill`});o.style.height=100*this.player.state.volume+"%";const l=p.createElement("div",{className:`${this.player.options.classPrefix}-volume-handle`});r.appendChild(o),o.appendChild(l),n.appendChild(r),i.appendChild(n);const c=e=>{const t=r.getBoundingClientRect(),i=Math.max(0,Math.min(1,1-(e-t.top)/t.height));this.player.setVolume(i)};n.addEventListener("mousedown",e=>{e.stopPropagation(),e.preventDefault(),this.isDraggingVolume=!0,this._activeVolumeTrack=r,c(e.clientY)}),n.addEventListener("touchstart",e=>{e.stopPropagation(),e.preventDefault(),this.isDraggingVolume=!0,this._activeVolumeTrack=r;const t=e.touches[0];t&&c(t.clientY)},{passive:!1}),n.addEventListener("touchmove",e=>{if(this.isDraggingVolume){e.preventDefault();const t=e.touches[0];if(!t)return;c(t.clientY)}},{passive:!1}),n.addEventListener("touchend",e=>{e.stopPropagation(),e.preventDefault(),this.isDraggingVolume=!1,this._activeVolumeTrack=null},{passive:!1}),n.addEventListener("touchcancel",()=>{this.isDraggingVolume=!1,this._activeVolumeTrack=null}),n.addEventListener("keydown",t=>{"ArrowUp"===t.key?(t.preventDefault(),this.player.setVolume(Math.min(1,this.player.state.volume+.1))):"ArrowDown"===t.key?(t.preventDefault(),this.player.setVolume(Math.max(0,this.player.state.volume-.1))):"Escape"===t.key&&(t.preventDefault(),t.stopPropagation(),this.closeMenuAndReturnFocus(i,e,!0))}),i.addEventListener("click",e=>{e.stopPropagation()}),i.addEventListener("touchstart",e=>{e.stopPropagation()}),i.addEventListener("touchmove",e=>{e.stopPropagation()}),i.addEventListener("touchend",e=>{e.stopPropagation()}),i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.controls.volumeSlider=n,this.controls.volumeFill=o,s(n,{delay:50}),this.attachMenuCloseHandler(i,e,!0)}createTimeDisplay(){const e=p.createElement("div",{className:`${this.player.options.classPrefix}-time`,attributes:{role:"group","aria-label":d.t("time.display")}});this.controls.currentTimeDisplay=p.createElement("span",{className:`${this.player.options.classPrefix}-current-time`});const t=p.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}}),i=p.createElement("span",{className:"vidply-sr-only",textContent:d.t("time.seconds",{count:0})});this.controls.currentTimeDisplay.appendChild(t),this.controls.currentTimeDisplay.appendChild(i),this.controls.currentTimeVisual=t,this.controls.currentTimeAccessible=i;const s=p.createElement("span",{textContent:" / ",attributes:{"aria-hidden":"true"}});this.controls.durationDisplay=p.createElement("span",{className:`${this.player.options.classPrefix}-duration`});const a=p.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}}),n=p.createElement("span",{className:"vidply-sr-only",textContent:d.t("time.durationPrefix")+d.t("time.seconds",{count:0})});return this.controls.durationDisplay.appendChild(a),this.controls.durationDisplay.appendChild(n),this.controls.durationVisual=a,this.controls.durationAccessible=n,e.appendChild(this.controls.currentTimeDisplay),e.appendChild(s),e.appendChild(this.controls.durationDisplay),e}createChaptersButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-chapters`,attributes:{type:"button","aria-label":d.t("player.chapters"),"aria-expanded":"false"}});return e.appendChild(t("chapters")),e.addEventListener("click",()=>{this.showChaptersMenu(e)}),this.controls.chapters=e,e}showChaptersMenu(t){const i=document.querySelector(`.${this.player.options.classPrefix}-chapters-menu`);if(i)return i.remove(),t.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=p.createElement("div",{className:`${this.player.options.classPrefix}-chapters-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":d.t("player.chapters")}}),a=Array.from(this.player.element.textTracks).filter(e=>"chapters"===e.kind);if(0===a.length){const e=p.createElement("div",{className:`${this.player.options.classPrefix}-menu-item ${this.player.options.classPrefix}-menu-item-disabled`,textContent:d.t("player.noChapters"),attributes:{role:"menuitem","aria-disabled":"true",tabindex:"-1"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(e)}else if(a[0]){const i=a[0];if("disabled"===i.mode&&(i.mode="hidden"),i.cues&&0!==i.cues.length){const a=i.cues;for(let i=0;i<a.length;i++){const n=a[i],r=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),o=p.createElement("span",{className:`${this.player.options.classPrefix}-chapter-time`,textContent:e.formatTime(n.startTime),attributes:{"aria-label":e.formatDuration(n.startTime)}}),l=p.createElement("span",{className:`${this.player.options.classPrefix}-chapter-title`,textContent:n.text});r.appendChild(o),r.appendChild(document.createTextNode(" ")),r.appendChild(l),r.addEventListener("click",()=>{this.player.seek(n.startTime),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(r)}this.attachMenuKeyboardNavigation(s,t),setTimeout(()=>{const e=s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&e.focus({preventScroll:!0})},0)}else{const e=p.createElement("div",{className:`${this.player.options.classPrefix}-menu-item ${this.player.options.classPrefix}-menu-item-disabled`,textContent:d.t("player.loadingChapters"),attributes:{role:"menuitem","aria-disabled":"true",tabindex:"-1"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(e),i.addEventListener("load",()=>{s.remove(),this.showChaptersMenu(t)},{once:!0}),setTimeout(()=>{i.cues&&i.cues.length>0&&document.contains(s)&&(s.remove(),this.showChaptersMenu(t))},500)}}s.style.visibility="hidden",s.style.display="block",this.insertMenuIntoDOM(s,t),this.positionMenu(s,t,!0),requestAnimationFrame(()=>{s.style.visibility="visible"}),this.attachMenuCloseHandler(s,t)}createQualityButton(){const e=d.t("player.quality"),i=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-quality`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}});i.appendChild(t("hd")),p.attachTooltip(i,e,this.player.options.classPrefix);const s=p.createElement("span",{className:`${this.player.options.classPrefix}-quality-text`,textContent:""});return i.appendChild(s),i.addEventListener("click",()=>{this.showQualityMenu(i)}),this.controls.quality=i,this.controls.qualityText=s,setTimeout(()=>this.updateQualityIndicator(),500),i}showQualityMenu(e){const i=document.querySelector(`.${this.player.options.classPrefix}-quality-menu`);if(i)return i.remove(),e.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=p.createElement("div",{className:`${this.player.options.classPrefix}-quality-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":d.t("player.quality")}});if(this.player.renderer&&this.player.renderer.getQualities){const i=this.player.renderer.getQualities(),a=this.player.renderer.getCurrentQuality?this.player.renderer.getCurrentQuality():-1,n="function"==typeof this.player.renderer.supportsAutoQuality&&this.player.renderer.supportsAutoQuality();if(0===i.length){const e=p.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:d.t("player.autoQuality"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(e)}else{let r=null;if(n){const i=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:d.t("player.auto"),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});"function"==typeof this.player.renderer.isAutoQuality&&this.player.renderer.isAutoQuality()&&(i.classList.add(`${this.player.options.classPrefix}-menu-item-active`),i.appendChild(t("check")),r=i),i.addEventListener("click",()=>{this.player.renderer?.switchQuality&&this.player.renderer.switchQuality(-1),this.closeMenuAndReturnFocus(s,e)}),s.appendChild(i)}i.forEach(i=>{const n=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:i.name||`${i.height}p`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}});i.index===a&&(n.classList.add(`${this.player.options.classPrefix}-menu-item-active`),n.appendChild(t("check")),r=n),n.addEventListener("click",()=>{this.player.renderer?.switchQuality&&void 0!==i.index&&this.player.renderer.switchQuality(i.index),this.closeMenuAndReturnFocus(s,e)}),s.appendChild(n)}),this.attachMenuKeyboardNavigation(s,e),setTimeout(()=>{const e=r||s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&e.focus({preventScroll:!0})},0)}}else{const e=p.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:d.t("player.noQuality"),style:{opacity:"0.5",cursor:"default"}});s.appendChild(e)}s.style.visibility="hidden",s.style.display="block",this.insertMenuIntoDOM(s,e),this.positionMenu(s,e,!0),requestAnimationFrame(()=>{s.style.visibility="visible"}),this.attachMenuCloseHandler(s,e)}createCaptionStyleButton(){const e=d.t("player.captionStyling"),t=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-caption-style`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}}),i=p.createElement("span",{textContent:"Aa",style:{fontSize:"14px",fontWeight:"bold"}});return t.appendChild(i),p.attachTooltip(t,e,this.player.options.classPrefix),t.addEventListener("click",()=>{this.showCaptionStyleMenu(t)}),this.controls.captionStyle=t,t}showCaptionStyleMenu(e){import("./vidply.CaptionStyleMenu-M3KVQWB5.min.js").then(({showCaptionStyleMenu:t})=>t(this,e)).catch(e=>this.player.log("Failed to load caption style menu:",e,"error"))}createSpeedButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-speed`,attributes:{type:"button","aria-label":d.t("player.speed"),"aria-expanded":"false"}});e.appendChild(t("speed"));const i=p.createElement("span",{className:`${this.player.options.classPrefix}-speed-text`,textContent:"1x"});return e.appendChild(i),e.addEventListener("click",()=>{this.showSpeedMenu(e)}),this.controls.speed=e,this.controls.speedText=i,e}formatSpeedLabel(e){return 1===e?d.t("speeds.normal"):`${e.toLocaleString(d.getLanguage(),{minimumFractionDigits:0,maximumFractionDigits:2})}×`}showSpeedMenu(e){const i=document.querySelector(`.${this.player.options.classPrefix}-speed-menu`);if(i)return i.remove(),e.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=p.createElement("div",{className:`${this.player.options.classPrefix}-speed-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu"}});let a=null;[.25,.5,.75,1,1.25,1.5,1.75,2].forEach(i=>{const n=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:this.formatSpeedLabel(i),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});i===this.player.state.playbackSpeed&&(n.classList.add(`${this.player.options.classPrefix}-menu-item-active`),n.appendChild(t("check")),a=n),n.addEventListener("click",()=>{this.player.setPlaybackSpeed(i),this.closeMenuAndReturnFocus(s,e)}),s.appendChild(n)}),s.style.visibility="hidden",s.style.display="block",this.insertMenuIntoDOM(s,e),this.positionMenu(s,e,!0),requestAnimationFrame(()=>{s.style.visibility="visible"}),this.attachMenuKeyboardNavigation(s,e),this.attachMenuCloseHandler(s,e),setTimeout(()=>{const e=a||s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&e.focus({preventScroll:!0})},0)}createCaptionsButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-captions-button`,attributes:{type:"button","aria-label":d.t("player.captions"),"aria-expanded":"false"}});return e.appendChild(t("captionsOff")),e.addEventListener("click",()=>{this.showCaptionsMenu(e)}),this.controls.captions=e,e}showCaptionsMenu(e){const i=document.querySelector(`.${this.player.options.classPrefix}-captions-menu`);if(i)return i.remove(),e.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=p.createElement("div",{className:`${this.player.options.classPrefix}-captions-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":d.t("captions.select")}});if(!this.player.captionManager||0===this.player.captionManager.tracks.length){const t=p.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:d.t("player.noCaptions"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});return s.appendChild(t),this.insertMenuIntoDOM(s,e),void this.attachMenuCloseHandler(s,e)}let a=null;const n=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:d.t("captions.off"),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});this.player.state.captionsEnabled||(n.classList.add(`${this.player.options.classPrefix}-menu-item-active`),n.appendChild(t("check")),a=n),n.addEventListener("click",()=>{this.player.disableCaptions(),this.updateCaptionsButton(),this.closeMenuAndReturnFocus(s,e)}),s.appendChild(n),this.player.captionManager.getAvailableTracks().forEach(i=>{const n=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:i.label,attributes:{type:"button",role:"menuitem",lang:i.language,tabindex:"-1"}}),r=this.player.captionManager;r&&this.player.state.captionsEnabled&&r.currentTrack===r.tracks[i.index]&&(n.classList.add(`${this.player.options.classPrefix}-menu-item-active`),n.appendChild(t("check")),a=n),n.addEventListener("click",()=>{this.player.captionManager?.switchTrack(i.index),this.updateCaptionsButton(),this.closeMenuAndReturnFocus(s,e)}),s.appendChild(n)}),this.insertMenuIntoDOM(s,e),this.attachMenuKeyboardNavigation(s,e),this.attachMenuCloseHandler(s,e),setTimeout(()=>{const e=a||s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&e.focus({preventScroll:!0})},0)}updateCaptionsButton(){if(!this.controls.captions)return;const e=this.controls.captions.querySelector(".vidply-icon");e&&(e.innerHTML=this.player.state.captionsEnabled?t("captions").innerHTML:t("captionsOff").innerHTML)}createTranscriptButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-transcript`,attributes:{type:"button","aria-label":d.t("player.transcript"),"aria-expanded":"false"}});return e.appendChild(t("transcript")),e.addEventListener("click",async()=>{await this.player.toggleTranscript(),this.updateTranscriptButton()}),this.controls.transcript=e,e}updateTranscriptButton(){this.controls.transcript&&this.controls.transcript.setAttribute("aria-expanded",this.player.transcriptManager&&this.player.transcriptManager.isVisible?"true":"false")}createAudioDescriptionButton(){const e=d.t("player.audioDescription"),i=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-audio-description`,attributes:{type:"button","aria-label":e,role:"switch","aria-checked":"false"}});return i.appendChild(t("audioDescription")),p.attachTooltip(i,e,this.player.options.classPrefix),i.addEventListener("click",async()=>{await this.player.toggleAudioDescription(),this.updateAudioDescriptionButton()}),this.controls.audioDescription=i,i}updateAudioDescriptionButton(){if(!this.controls.audioDescription)return;const e=this.controls.audioDescription.querySelector(".vidply-icon"),i=this.player.state.audioDescriptionEnabled;e&&(e.innerHTML=i?t("audioDescriptionOn").innerHTML:t("audioDescription").innerHTML),this.controls.audioDescription.setAttribute("aria-checked",i?"true":"false")}createSignLanguageButton(){const e=d.t("player.signLanguage"),i=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-sign-language`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}});return i.appendChild(t("signLanguagePip")),p.attachTooltip(i,e,this.player.options.classPrefix),i.addEventListener("click",()=>{this.player.toggleSignLanguage(),this.updateSignLanguageButton()}),this.controls.signLanguage=i,i}updateSignLanguageButton(){if(!this.controls.signLanguage)return;const e=this.controls.signLanguage.querySelector(".vidply-icon"),i=this.player.state.signLanguageEnabled;e&&(e.innerHTML=i?t("signLanguagePipOn").innerHTML:t("signLanguagePip").innerHTML),this.controls.signLanguage.setAttribute("aria-expanded",i?"true":"false"),this.controls.signLanguage.setAttribute("aria-label",d.t(i?"signLanguage.hide":"signLanguage.show"))}createSignLanguageInMainViewButton(){const e=d.t("signLanguage.showInMainView"),i=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-sign-language-main-view`,attributes:{type:"button","aria-label":e,"aria-pressed":"false"}});return i.appendChild(t("signLanguage")),p.attachTooltip(i,e,this.player.options.classPrefix),i.addEventListener("click",()=>{this.player.signLanguageManager&&this.player.signLanguageManager.toggleInMainView()}),this.controls.signLanguageMainView=i,i}updateSignLanguageInMainViewButton(){const e=this.controls.signLanguageMainView;if(!e)return;const i=this.player.state.signLanguageInMainView,s=d.t(i?"signLanguage.hideInMainView":"signLanguage.showInMainView"),a=i?"signLanguageOn":"signLanguage",n=e.querySelector(".vidply-icon");n&&(n.innerHTML=t(a).innerHTML),e.setAttribute("aria-pressed",String(i)),e.setAttribute("aria-label",s);const r=e.querySelector(`.${this.player.options.classPrefix}-tooltip`);r&&(r.textContent=s)}updateAccessibilityButtons(){const e=this.hasAudioDescription(),t=this.hasSignLanguage();if(e){if(!this.controls.audioDescription&&!1!==this.player.options.audioDescriptionButton){const e=this.createAudioDescriptionButton();e.dataset.overflowPriority="2",e.dataset.overflowPriorityMobile="3";const t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-transcript`),i=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-playlist-toggle`),s=t||i||null;s?this.rightButtons.insertBefore(e,s):this.rightButtons.appendChild(e),this.checkOverflow()}this.controls.audioDescription&&(this.controls.audioDescription.style.display="")}else this.controls.audioDescription&&(this.controls.audioDescription.style.display="none");const i=t&&!1!==this.player.options.signLanguageButton,s=this.player.options.classPrefix,a=this.player.options.signLanguageDisplayMode||"both",n=["pip","both"].includes(a),r=["main","both"].includes(a);if(i){const e=this.rightButtons.querySelector(`.${s}-quality`),t=this.rightButtons.querySelector(`.${s}-fullscreen`),i=e||t||null;let a=!1;if(n&&!this.controls.signLanguage){const e=this.createSignLanguageButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",i?this.rightButtons.insertBefore(e,i):this.rightButtons.appendChild(e),a=!0}if(r&&!this.controls.signLanguageMainView){const e=this.createSignLanguageInMainViewButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3";const t=this.controls.signLanguage?.nextSibling;t?this.rightButtons.insertBefore(e,t):i?this.rightButtons.insertBefore(e,i):this.rightButtons.appendChild(e),a=!0}a&&this.checkOverflow(),this.controls.signLanguage&&(this.controls.signLanguage.style.display=n?"":"none"),this.controls.signLanguageMainView&&(this.controls.signLanguageMainView.style.display=r?"":"none")}else this.controls.signLanguage&&(this.controls.signLanguage.style.display="none"),this.controls.signLanguageMainView&&(this.controls.signLanguageMainView.style.display="none")}createSettingsButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-settings`,attributes:{type:"button","aria-label":d.t("player.settings")}});return e.appendChild(t("settings")),e.addEventListener("click",()=>{this.player.showSettings()}),e}createPipButton(){const e=!0===this.player.options.floating,i=this.player.options.classPrefix,s=p.createElement("button",{className:e?`${i}-button ${i}-pip ${i}-pip-floating`:`${i}-button ${i}-pip`,attributes:{type:"button","aria-label":d.t(e?"player.floatingPlayer":"player.pip"),"aria-pressed":"false"}});return s.appendChild(t("pip")),s.addEventListener("click",()=>{e?this.player.floatingPlayerManager&&this.player.floatingPlayerManager.togglePinned(s):this.player.togglePiP()}),e&&this.player.on("floatingchange",e=>{s.setAttribute("aria-pressed","pinned"===e?"true":"false"),s.classList.toggle(`${this.player.options.classPrefix}-pip-active`,Boolean(e))}),s}createDownloadButton(e){const i=this.player.element?.dataset||{},s=this.resolveDownloadFormat(e),a=this.resolveInitialDownloadSize(),n=d.t("player.download"),r=b({baseLabel:n,format:s,sizeBytes:a,locale:d.getLanguage(),withFormatSizeTemplate:d.t("player.downloadWithFormatSize"),withFormatTemplate:d.t("player.downloadWithFormat"),withSizeTemplate:d.t("player.downloadWithSize")}),o=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-download`,attributes:{type:"button","aria-label":r}});return s&&(o.dataset.vidplyDownloadFormat=s),null!=a&&(o.dataset.vidplyDownloadSize=String(a)),o.appendChild(t("download")),o.addEventListener("click",()=>{const t=this.player.options.downloadUrl||i.vidplyDownloadUrl||e;if(!t)return;const s=document.createElement("a");s.href=t,s.download=t.split("/").pop()?.split("?")[0]||"download",s.rel="noopener",s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)}),!1!==this.player.options.downloadFetchSize&&null==a&&(async(e,t={})=>{if(!e||"function"!=typeof fetch)return null;const i=[];let s;if(t.signal&&i.push(t.signal),"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&i.push(AbortSignal.timeout(t.timeoutMs??8e3)),1===i.length)s=i[0];else if(i.length>1){const e=AbortSignal.any;s=e?e(i):i[0]}try{const t=await fetch(e,{method:"HEAD",credentials:"omit",cache:"no-store",signal:s});if(!t.ok)return null;const i=t.headers.get("Content-Length");if(!i)return null;const a=Number(i);return Number.isFinite(a)&&a>0?a:null}catch(e){return"undefined"!=typeof console&&console.debug&&console.debug("[vidply] HEAD request for download size failed:",e),null}})(e).then(e=>{if(null==e)return;const t=b({baseLabel:n,format:s,sizeBytes:e,locale:d.getLanguage(),withFormatSizeTemplate:d.t("player.downloadWithFormatSize"),withFormatTemplate:d.t("player.downloadWithFormat"),withSizeTemplate:d.t("player.downloadWithSize")});o.dataset.vidplyDownloadSize=String(e),this.updateDownloadButtonLabel(o,t)}),o}resolveDownloadFormat(e){const t=this.player.options.downloadFormat||(this.player.element?.dataset||{}).vidplyDownloadFormat||null;if(t)return t;const i=this.player.element?.querySelectorAll?Array.from(this.player.element.querySelectorAll("source")):[],s=i.find(t=>(t.getAttribute("src")||t.src||"")===e)||i[0];if(s){const e=(e=>{if(!e)return null;const t=(e.split(";")[0]??"").trim().toLowerCase();return f[t]||null})(s.getAttribute("type"));if(e)return e}return(e=>{if(!e)return null;try{const t=(e.split("?")[0]?.split("#")[0]??"").split("/").pop()||"",i=t.lastIndexOf(".");if(i<0||i===t.length-1)return null;const s=t.slice(i+1).toLowerCase();return v[s]||null}catch{return null}})(e)}resolveInitialDownloadSize(){const e=this.player.element?.dataset||{},t=this.player.options.downloadFileSize;if("number"==typeof t&&Number.isFinite(t)&&t>0)return t;const i=e.vidplyDownloadSize;if(i){const e=Number(i);if(Number.isFinite(e)&&e>0)return e}return null}updateDownloadButtonLabel(e,t){if(!e||!t)return;e.setAttribute("aria-label",t);const i=e.querySelector(`.${this.player.options.classPrefix}-tooltip`);i&&(i.textContent=t)}createFullscreenButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-fullscreen`,attributes:{type:"button","aria-label":d.t("player.fullscreen")}});return e.appendChild(t("fullscreen")),e.addEventListener("click",()=>{this.player.toggleFullscreen()}),this.controls.fullscreen=e,e}attachEvents(){this.player.on("play",()=>this.updatePlayPauseButton()),this.player.on("pause",()=>this.updatePlayPauseButton()),this.player.on("timeupdate",()=>this.updateProgress()),this.player.on("loadedmetadata",()=>{this.updateDuration(),this.ensureQualityButton(),this.updateQualityIndicator(),this.updatePreviewVideoSource()}),this.player.on("durationchange",()=>{this.updateDuration()}),this.player.on("sourcechange",()=>{this.updatePreviewVideoSource()}),this.player.on("volumechange",()=>this.updateVolumeDisplay()),this.player.on("progress",()=>this.updateBuffered()),this.player.on("playbackspeedchange",()=>this.updateSpeedDisplay()),this.player.on("fullscreenchange",()=>this.updateFullscreenButton()),this.player.on("captionsenabled",()=>this.updateCaptionsButton()),this.player.on("captionsdisabled",()=>this.updateCaptionsButton()),this.player.on("audiodescriptionenabled",()=>this.updateAudioDescriptionButton()),this.player.on("audiodescriptiondisabled",()=>this.updateAudioDescriptionButton()),this.player.on("signlanguageenabled",()=>this.updateSignLanguageButton()),this.player.on("signlanguagedisabled",()=>this.updateSignLanguageButton()),this.player.on("signlanguageinmainviewenabled",()=>this.updateSignLanguageInMainViewButton()),this.player.on("signlanguageinmainviewdisabled",()=>this.updateSignLanguageInMainViewButton()),this.player.on("qualitychange",()=>this.updateQualityIndicator()),this.player.on("hlslevelswitched",()=>this.updateQualityIndicator()),this.player.on("hlsmanifestparsed",()=>{this.ensureQualityButton(),this.updateQualityIndicator()}),this.player.on("dashqualitychanged",()=>this.updateQualityIndicator()),this.player.on("dashmanifestparsed",()=>{this.ensureQualityButton(),this.updateQualityIndicator()})}updatePlayPauseButton(){if(!this.controls.playPause)return;const e=this.controls.playPause.querySelector(".vidply-icon"),i=this.player.state.playing;e&&(e.innerHTML=i?t("pause").innerHTML:t("play").innerHTML);const s=d.t(i?"player.pause":"player.play");this.controls.playPause.setAttribute("aria-label",s),p.attachTooltip(this.controls.playPause,s,this.player.options.classPrefix)}updateProgress(){if(!this.controls.played)return;const t=this.player.state.duration||0,i=t>0?Math.min(100,Math.max(0,(this.player.state.currentTime||0)/t*100)):0;if(this.controls.played.style.width=`${i}%`,this.controls.progress){this.controls.progress.setAttribute("aria-valuenow",String(Math.round(i)));const t=e.formatDuration(this.player.state.currentTime),s=e.formatDuration(this.player.state.duration);this.controls.progress.setAttribute("aria-valuetext",`${Math.round(i)}%, ${t} ${d.t("time.of")} ${s}`)}if(this.controls.currentTimeVisual){const t=this.player.state.currentTime;this.controls.currentTimeVisual.textContent=e.formatTime(t),this.controls.currentTimeAccessible&&(this.controls.currentTimeAccessible.textContent=e.formatDuration(t))}}updateDuration(){if(this.controls.durationVisual){const t=this.player.state.duration;this.controls.durationVisual.textContent=e.formatTime(t),this.controls.durationAccessible&&(this.controls.durationAccessible.textContent=d.t("time.durationPrefix")+e.formatDuration(t))}}updateVolumeDisplay(){const e=100*this.player.state.volume;if(this.controls.volumeFill&&(this.controls.volumeFill.style.height=`${e}%`),this.controls.volumeSlider){const t=Math.round(e);this.controls.volumeSlider.setAttribute("aria-valuenow",String(t)),this.controls.volumeSlider.setAttribute("aria-valuetext",this.player.state.muted?d.t("player.muted"):d.t("player.volumePercent",{percent:t}))}if(this.controls.mute){const i=this.controls.mute.querySelector(".vidply-icon");if(i){let s;s=this.player.state.muted||0===this.player.state.volume?"volumeMuted":this.player.state.volume<.3?"volumeLow":this.player.state.volume<.7?"volumeMedium":"volumeHigh",i.innerHTML=t(s).innerHTML;const a=this.player.state.muted?0:Math.round(e),n=this.isTouchDevice()?d.t(this.player.state.muted?"player.unmute":"player.mute"):`${d.t("player.volume")} ${a}%`;this.controls.mute.setAttribute("aria-label",n),p.attachTooltip(this.controls.mute,n,this.player.options.classPrefix)}}}updateBuffered(){if(!this.controls.buffered||!this.player.element.buffered||0===this.player.element.buffered.length)return;const e=this.player.element.buffered.end(this.player.element.buffered.length-1);this.controls.buffered.style.width=e/this.player.state.duration*100+"%"}updateSpeedDisplay(){this.controls.speedText&&(this.controls.speedText.textContent=`${this.player.state.playbackSpeed}x`)}updateFullscreenButton(){if(!this.controls.fullscreen)return;const e=this.controls.fullscreen.querySelector(".vidply-icon"),i=this.player.state.fullscreen;e&&(e.innerHTML=i?t("fullscreenExit").innerHTML:t("fullscreen").innerHTML),this.controls.fullscreen.setAttribute("aria-label",d.t(i?"player.exitFullscreen":"player.fullscreen"))}ensureQualityButton(){if(!this.player.options.qualityButton)return;if(this.controls.quality)return;if(!this.hasQualityLevels())return;const e=this.createQualityButton(),t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-speed`),i=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-caption-style`)||t;this.rightButtons.insertBefore(e,i||this.rightButtons.firstChild),this.player.log("Quality button added dynamically","info")}ensureCaptionsButton(){if(!this.player.options.captionsButton)return;if(this.controls.captions)return;const e=this.createCaptionsButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="3";const t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-chapters`);t&&t.nextSibling?this.rightButtons.insertBefore(e,t.nextSibling):t?t.after(e):this.rightButtons.insertBefore(e,this.rightButtons.firstChild),this.player.log("Captions button added dynamically for HLS subtitles","info")}ensureCaptionStyleButton(){if(!this.player.options.captionStyleButton)return;if(this.controls.captionStyle)return;const e=this.createCaptionStyleButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3";const t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-captions-button`);t?t.after(e):this.rightButtons.insertBefore(e,this.rightButtons.firstChild),this.player.log("Caption style button added dynamically for HLS subtitles","info")}ensureTranscriptButton(){if(!this.player.options.transcriptButton)return;if(this.controls.transcript)return;const e=this.createTranscriptButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3";const t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-audio-description`),i=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-speed`),s=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-caption-style`);if(t)t.after(e);else if(i)i.after(e);else if(s)s.after(e);else{const t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-quality`),i=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-pip`),s=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-fullscreen`),a=t||i||s;a?this.rightButtons.insertBefore(e,a):this.rightButtons.appendChild(e)}this.player.log("Transcript button added dynamically for HLS subtitles","info")}removeHlsCaptionButtons(e=!1){!e&&this.player.element.querySelectorAll('track[kind="captions"], track[kind="subtitles"]').length>0?this.player.log("Keeping caption buttons - native track elements exist","info"):(this.disableAllCaptions(),this.controls.captions&&(this.controls.captions.remove(),delete this.controls.captions,this.player.log("Captions button removed - no subtitle tracks","info")),this.controls.captionStyle&&(this.controls.captionStyle.remove(),delete this.controls.captionStyle,this.player.log("Caption style button removed - no subtitle tracks","info")),this.controls.transcript&&(this.controls.transcript.remove(),delete this.controls.transcript,this.player.log("Transcript button removed - no subtitle tracks","info")))}disableAllCaptions(){const e=this.player.element.textTracks;for(let t=0;t<e.length;t++){const i=e[t];i&&(i.mode="disabled")}const t=this.player.container?.querySelector(`.${this.player.options.classPrefix}-captions`);t&&(t.textContent="",t.style.display="none"),this.player.state.captionsEnabled=!1,this.player.log("All captions disabled and cleared","info")}updateQualityIndicator(){if(!this.controls.qualityText)return;if(!this.player.renderer||!this.player.renderer.getQualities)return;const e=this.player.renderer.getQualities();if(0===e.length)return void(this.controls.qualityText.textContent="");let t="";if("function"==typeof this.player.renderer.isAutoQuality&&this.player.renderer.isAutoQuality())t="Auto";else if(this.player.renderer.getCurrentQuality){const i=this.player.renderer.getCurrentQuality(),s=e.find(e=>e.index===i);s&&(t=s.height?`${s.height}p`:"")}this.controls.qualityText.textContent=t}setupAutoHide(){if("VIDEO"!==this.player.element.tagName)return;const 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.state.fullscreen?1.5*this.player.options.hideControlsDelay:this.player.options.hideControlsDelay))};this.player.container.addEventListener("mousemove",e),this.player.container.addEventListener("touchstart",e),this.player.container.addEventListener("touchmove",e),this.player.container.addEventListener("click",e),this.player.container.addEventListener("tap",e),this.element.addEventListener("focusin",e),this.player.on("pause",()=>{e(),clearTimeout(this.hideTimeout)}),this.player.on("play",()=>{e()}),this.player.on("enterfullscreen",()=>{e(),this.player.state.fullscreen&&(clearTimeout(this.hideTimeout),this.hideTimeout=setTimeout(()=>{this.player.state.playing&&(this.element.classList.remove(`${this.player.options.classPrefix}-controls-visible`),this.player.container.classList.remove(`${this.player.options.classPrefix}-controls-visible`),this.player.state.controlsVisible=!1)},2*this.player.options.hideControlsDelay))}),e()}createOverflowMenuButton(){const e=d.t("player.moreOptions"),i=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-overflow-menu`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}});return i.appendChild(t("moreVertical")),p.attachTooltip(i,e,this.player.options.classPrefix),i.addEventListener("click",()=>{this.showOverflowMenu(i)}),this.controls.overflowMenu=i,i}showOverflowMenu(e){const t=document.querySelector(`.${this.player.options.classPrefix}-overflow-menu-list`);if(t)return t.remove(),e.setAttribute("aria-expanded","false"),void(this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null));const i=p.createElement("div",{className:`${this.player.options.classPrefix}-overflow-menu-list ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":d.t("player.moreOptions")}}),s=Array.from(this.rightButtons.querySelectorAll('button[data-in-overflow="true"]'));if(0===s.length){const e=p.createElement("div",{className:`${this.player.options.classPrefix}-menu-item ${this.player.options.classPrefix}-menu-item-disabled`,textContent:d.t("player.noMoreOptions"),attributes:{role:"menuitem","aria-disabled":"true",tabindex:"-1"},style:{opacity:"0.5",cursor:"default"}});i.appendChild(e)}else s.forEach(t=>{const s=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),a=t.getAttribute("aria-label")||t.getAttribute("title")||"",n=t.querySelector(".vidply-icon");if(n){const e=n.cloneNode(!0);s.appendChild(e)}else{const e=t.querySelector("span");if(e&&e.textContent&&e.textContent.length<=3){const t=e.cloneNode(!0);t.classList.add("vidply-icon"),s.appendChild(t)}}const r=p.createElement("span",{textContent:a});s.appendChild(r),s.addEventListener("click",()=>{this._overflowMenuItemRef=s;const a=t.style.display;t.style.display="",t.style.visibility="hidden",t.click(),setTimeout(()=>{t.style.display=a,t.style.visibility="",this._overflowMenuItemRef=null},100),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(s)}),this.attachMenuKeyboardNavigation(i,e),setTimeout(()=>{const e=i.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&"BUTTON"===e.tagName&&e.focus({preventScroll:!0})},0);i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuCloseHandler(i,e)}checkOverflow(){const e=window.innerWidth>=768,t=window.innerHeight<window.innerWidth,i=this.player.state.fullscreen,s=t&&i;if(!this.rightButtons||0===this.rightButtons.children.length)return void(this.overflowMenuButton&&(this.overflowMenuButton.style.display="none"));const a=Array.from(this.rightButtons.children).filter(e=>!e.classList.contains(`${this.player.options.classPrefix}-overflow-menu`)&&"true"!==e.dataset.skipOverflow);if(0===a.length)return void(this.overflowMenuButton&&(this.overflowMenuButton.style.display="none"));const n=!e&&!t;if(this.player.options.debug&&console.log("Overflow detection:",{isDesktop:e,isFullscreen:i,isLandscape:t,isLandscapeFullscreen:s,shouldUseOverflow:n,width:window.innerWidth,height:window.innerHeight}),!n)return a.forEach(e=>{e.dataset.inOverflow="false",e.style.display=""}),this.overflowMenuButton&&(this.overflowMenuButton.style.display="none"),void(this.player.options.debug&&console.log("No overflow menu needed - all buttons visible, overflow button hidden"));this.player.options.debug&&console.log("Mobile portrait - checking for overflow..."),a.forEach(e=>{e.style.display=""});const r=this.rightButtons.offsetWidth,o=r-50;let l=0;const c=a.map(e=>{const t=getComputedStyle(e),i=e.offsetWidth+parseInt(t.marginLeft||"0")+parseInt(t.marginRight||"0");return l+=i,{btn:e,width:i}});l+=8*(a.length-1);const u=window.innerWidth<768,h=l>o||u||s&&!e;if(this.player.options.debug&&console.log("Overflow detection:",{containerWidth:r,availableWidth:o,totalWidth:l,needsOverflow:h,isSmallScreen:u,reason:u?"mobile screen":l>o?"not enough space":"enough space",buttonCount:a.length}),h){const e=u?"overflowPriorityMobile":"overflowPriority";this.player.options.debug&&console.log(`Using ${u?"mobile":"desktop"} priorities (width: ${window.innerWidth}px)`);const t=c.sort((t,i)=>{const s=parseInt(t.btn.dataset[e]||t.btn.dataset.overflowPriority||"1");return parseInt(i.btn.dataset[e]||i.btn.dataset.overflowPriority||"1")-s});let i=l,s=0;for(const{btn:a,width:n}of t){const t=parseInt(a.dataset[e]||a.dataset.overflowPriority||"1"),r=a.getAttribute("aria-label")||"unknown";1!==t?(u?t>1:i>o)?(a.dataset.inOverflow="true",a.style.display="none",i-=n,s++,this.player.options.debug&&console.log(` → Hiding button: ${r} (priority ${t}, ${u?"mobile":"desktop"})`)):(a.dataset.inOverflow="false",a.style.display=""):(a.dataset.inOverflow="false",a.style.display="")}if(this.player.options.debug&&console.log("Overflow button exists?",Boolean(this.overflowMenuButton)),!this.overflowMenuButton)return void console.error("Overflow menu button not found!");s>0?(this.overflowMenuButton.style.display="",this.player.options.debug&&console.log("Showing overflow menu button -",s,"buttons moved")):(this.overflowMenuButton.style.display="none",this.player.options.debug&&console.log("Hiding overflow menu button - all buttons fit"))}else a.forEach(e=>{e.dataset.inOverflow="false",e.style.display=""}),this.overflowMenuButton&&(this.overflowMenuButton.style.display="none")}setupOverflowDetection(){const e=this.player.lifecycleSignal,t=()=>{e.aborted||this.checkOverflow()},i=new ResizeObserver(()=>{requestAnimationFrame(t)});i.observe(this.rightButtons),window.addEventListener("resize",()=>{requestAnimationFrame(t)},{signal:e}),this.player.on("fullscreenchange",()=>{setTimeout(()=>{requestAnimationFrame(t)},50)}),requestAnimationFrame(()=>{t(),setTimeout(()=>t(),100),setTimeout(()=>t(),300),setTimeout(()=>t(),500)}),document.fonts&&document.fonts.ready&&document.fonts.ready.then(()=>{requestAnimationFrame(t)}),this.overflowResizeObserver=i}show(){this.element.style.display=""}hide(){this.element.style.display="none"}updatePreviewVideoSource(){const e=this.player.renderer;if(!e||!e.media||"VIDEO"!==e.media.tagName)return;if(this.previewSupported||this.previewVideo||this.initPreviewThumbnail(),!this.previewSupported||!this.previewVideo)return;const t=e.media,i=t.src||t.querySelector("source")?.src;i&&this.previewVideo.src!==i?(this.previewThumbnailCache.clear(),this.previewVideoReady=!1,this.previewVideo.src=i,t.crossOrigin&&(this.previewVideo.crossOrigin=t.crossOrigin),this.previewVideo.addEventListener("loadedmetadata",()=>{this.previewVideoReady=!0},{once:!0})):i&&!this.previewVideoReady&&this.previewVideo.readyState>=1&&(this.previewVideoReady=!0)}cleanupPreviewThumbnail(){this.previewThumbnailTimeout&&(clearTimeout(this.previewThumbnailTimeout),this.previewThumbnailTimeout=null),this.previewVideo&&this.previewVideo.parentNode&&(this.previewVideo.parentNode.removeChild(this.previewVideo),this.previewVideo=null),this.previewThumbnailCache.clear()}destroy(){this.hideTimeout&&clearTimeout(this.hideTimeout),this.overflowResizeObserver&&this.overflowResizeObserver.disconnect(),this.cleanupPreviewThumbnail(),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}},M=class{player;shortcuts;announcer=null;_announceReady=!1;_prevMuted;_stateAnnouncers=[];_announceVolume;constructor(e){this.player=e,this.shortcuts=e.options.keyboardShortcuts,this._prevMuted=e.state.muted,this._announceVolume=o(()=>{const e=Math.round(100*this.player.state.volume);this.announce(d.t("player.volumePercent",{percent:e}))},500),this.init()}init(){this.attachEvents(),this.attachStateAnnouncements()}attachStateAnnouncements(){if("function"!=typeof this.player.on)return;const e=()=>{this._announceReady=!0};this.player.on("ready",e);const t=(e,t)=>{const i=()=>{this._announceReady&&t()};this.player.on(e,i),this._stateAnnouncers.push({event:e,handler:i})};this._stateAnnouncers.push({event:"ready",handler:e}),t("play",()=>this.announce(d.t("player.playing"))),t("pause",()=>this.announce(d.t("player.paused"))),t("captionsenabled",()=>this.announce(d.t("player.captionsOn"))),t("captionsdisabled",()=>this.announce(d.t("player.captionsOff"))),t("fullscreenchange",()=>{this.announce(d.t(this.player.state.fullscreen?"player.fullscreen":"player.exitFullscreen"))}),t("ratechange",()=>{this.announce(d.t("player.speedRate",{rate:String(this.player.state.playbackSpeed)}))}),t("volumechange",()=>{if(this.player.state.muted!==this._prevMuted)return this._prevMuted=this.player.state.muted,void this.announce(d.t(this.player.state.muted?"player.muted":"player.unmuted"));this.player.state.muted||this._announceVolume()})}attachEvents(){this.player.container.addEventListener("keydown",e=>{this.handleKeydown(e)},!0),this.player.container.hasAttribute("tabindex")||this.player.container.setAttribute("tabindex","0")}handleKeydown(e){const t=e.target;if("INPUT"===t.tagName||"TEXTAREA"===t.tagName||"SELECT"===t.tagName)return;const i=document.activeElement;if(i){if(i.closest('.vidply-menu, [role="menu"]'))return;if(i.closest(".vidply-playlist-item-button"))return;if(i.closest(".vidply-sign-language-wrapper")){const e=this.player.signLanguageManager?.draggable;if(e?.keyboardDragMode||e?.keyboardResizeMode)return}if(i.closest(".vidply-transcript-window")){const e=this.player.transcriptManager?.draggableResizable;if(e?.keyboardDragMode||e?.keyboardResizeMode)return}}const s=e.key;let a=!1;if("Escape"===s&&this.player.state.fullscreen)return this.player.exitFullscreen(),e.preventDefault(),void e.stopPropagation();for(const[t,i]of Object.entries(this.shortcuts))if(i.includes(s)&&(a=this.executeAction(t,e),a)){e.preventDefault(),e.stopPropagation();break}!a&&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){const e=this.player.controlBar?.controls.captions;e&&this.player.controlBar?this.player.controlBar.showCaptionsMenu(e):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));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));case"quality-menu":return!(!this.player.controlBar||!this.player.controlBar.controls.quality||(this.player.controlBar.showQualityMenu(this.player.controlBar.controls.quality),0));case"chapters-menu":return!(!this.player.controlBar||!this.player.controlBar.controls.chapters||(this.player.controlBar.showChaptersMenu(this.player.controlBar.controls.chapters),0));case"transcript-toggle":return!!this.player.transcriptManager&&(this.player.transcriptManager.toggleTranscript(),!0);default:return!1}}announceAction(e){if(!this.player.options.screenReaderAnnouncements)return;let t="";switch(e){case"play-pause":t=d.t(this.player.state.playing?"player.playing":"player.paused");break;case"volume-up":case"volume-down":{const e=Math.round(100*this.player.state.volume);t=d.t("player.volumePercent",{percent:e});break}case"mute":t=d.t(this.player.state.muted?"player.muted":"player.unmuted");break;case"fullscreen":t=d.t(this.player.state.fullscreen?"player.fullscreen":"player.exitFullscreen");break;case"captions":t=d.t(this.player.state.captionsEnabled?"player.captionsOn":"player.captionsOff");break;case"speed-up":case"speed-down":t=d.t("player.speedRate",{rate:String(this.player.state.playbackSpeed)})}t&&this.announce(t)}announce(e,t="polite"){if(this.announcer)this.announcer.setAttribute("aria-live",t);else{const e=`vidply-announcer-${this.player.instanceId}`;this.announcer=document.createElement("div"),this.announcer.id=e,this.announcer.className="vidply-sr-only",this.announcer.setAttribute("aria-live",t),this.announcer.setAttribute("aria-atomic","true"),this.announcer.style.cssText="\n position: absolute;\n left: -10000px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n ",document.body.appendChild(this.announcer)}this.announcer.textContent="";const i=this.announcer;setTimeout(()=>{i&&(i.textContent=e)},100)}updateShortcut(e,t){Array.isArray(t)&&(this.shortcuts[e]=t)}destroy(){if("function"==typeof this.player.off)for(const{event:e,handler:t}of this._stateAnnouncers)this.player.off(e,t);this._stateAnnouncers=[],this.announcer&&this.announcer.parentNode&&this.announcer.parentNode.removeChild(this.announcer),this.announcer=null}};function S(e){if("string"!=typeof e||0===e.length||e.length>4096)return null;const t=e.trim();if(!t)return null;if(/[\s"'<>\\]/.test(t))return null;if(t.startsWith("/")||t.startsWith("./")||t.startsWith("../"))return t;try{const e=new URL(t,"undefined"!=typeof window?window.location.href:"http://localhost/");if("https:"===e.protocol||"http:"===e.protocol)return e.href;if("data:"===e.protocol&&/^data:image\/(png|jpeg|jpg|webp|gif|svg\+xml);/i.test(t))return t}catch{return null}return null}function E(e){return e.replace(/["()\\]/g,e=>`\\${e}`)}function L(e){const t=S(e);return t?`url("${E(t)}")`:null}var C=new WeakMap;function x(e,t,i,s){const a=C.get(e);if(a&&(a.observer.unobserve(e),C.delete(e)),e.getBoundingClientRect().height<20)return void s(e,t);const n=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&(n.unobserve(e.target),C.delete(e.target),s(e.target,t))})},{rootMargin:i,threshold:0});n.observe(e),C.set(e,{observer:n,options:t})}var T=class{player;originalScrollX;originalScrollY;originalBodyOverflow;originalBodyPosition;originalBodyWidth;originalBodyHeight;originalHtmlOverflow;originalBodyBackground;originalHtmlBackground;originalViewport;inertElements=[];constructor(e){this.player=e}enable(){const{player:e}=this;e.state.fullscreen=!0,e.container.classList.add(`${e.options.classPrefix}-fullscreen`),document.body.classList.add("vidply-fullscreen-active"),this.originalScrollX=window.scrollX||window.pageXOffset,this.originalScrollY=window.scrollY||window.pageYOffset,this.originalBodyOverflow=document.body.style.overflow,this.originalBodyPosition=document.body.style.position,this.originalBodyWidth=document.body.style.width,this.originalBodyHeight=document.body.style.height,this.originalHtmlOverflow=document.documentElement.style.overflow,this.originalBodyBackground=document.body.style.background,this.originalHtmlBackground=document.documentElement.style.background,document.body.style.overflow="hidden",document.body.style.width="100%",document.body.style.height="100%",document.body.style.background="#000",document.documentElement.style.overflow="hidden",document.documentElement.style.background="#000",this.originalViewport=document.querySelector('meta[name="viewport"]')?.getAttribute("content");const t=document.querySelector('meta[name="viewport"]');t&&t.setAttribute("content","width=device-width, initial-scale=1.0"),window.scrollTo(0,0),this.makeBackgroundInert(),e.emit("fullscreenchange",!0),e.emit("enterfullscreen")}makeBackgroundInert(){this.inertElements=[];let e=this.player.container;for(;e&&e!==document.body&&e!==document.documentElement;){const t=e.parentElement;t&&Array.from(t.children).forEach(t=>{t===e||t.nodeType!==Node.ELEMENT_NODE||t.hasAttribute("inert")||"SCRIPT"===t.tagName||"STYLE"===t.tagName||"LINK"===t.tagName||"META"===t.tagName||(t.setAttribute("inert",""),this.inertElements.push(t))}),e=t}}restoreBackgroundInteractivity(){if(this.inertElements.length>0){for(const e of this.inertElements)e.removeAttribute("inert");this.inertElements=[]}}disable(){if(document.body.classList.remove("vidply-fullscreen-active"),this.restoreBackgroundInteractivity(),void 0!==this.originalBodyOverflow&&(document.body.style.overflow=this.originalBodyOverflow,this.originalBodyOverflow=void 0),void 0!==this.originalBodyPosition&&(document.body.style.position=this.originalBodyPosition,this.originalBodyPosition=void 0),void 0!==this.originalBodyWidth&&(document.body.style.width=this.originalBodyWidth,this.originalBodyWidth=void 0),void 0!==this.originalBodyHeight&&(document.body.style.height=this.originalBodyHeight,this.originalBodyHeight=void 0),void 0!==this.originalHtmlOverflow&&(document.documentElement.style.overflow=this.originalHtmlOverflow,this.originalHtmlOverflow=void 0),void 0!==this.originalBodyBackground&&(document.body.style.background=this.originalBodyBackground,this.originalBodyBackground=void 0),void 0!==this.originalHtmlBackground&&(document.documentElement.style.background=this.originalHtmlBackground,this.originalHtmlBackground=void 0),void 0!==this.originalViewport){const e=document.querySelector('meta[name="viewport"]');e&&null!==this.originalViewport&&e.setAttribute("content",this.originalViewport),this.originalViewport=void 0}void 0!==this.originalScrollX&&void 0!==this.originalScrollY&&(window.scrollTo(this.originalScrollX,this.originalScrollY),this.originalScrollX=void 0,this.originalScrollY=void 0),this.player.emit("exitfullscreen")}},A=["dark","light","minimal","high-contrast"];function B(e){return/^--vidply-[A-Za-z0-9_-]{1,64}$/.test(e)}function D(e){return!("string"!=typeof e||e.length>200||/[<>{};@\\]/.test(e))}var $=class{player;constructor(e){this.player=e}apply(){const e=this.player;if(!e.container)return;const t=A.map(t=>`${e.options.classPrefix}-theme-${t}`);e.container.classList.remove(...t);const i=e.options.theme;if(i&&A.includes(i)&&e.container.classList.add(`${e.options.classPrefix}-theme-${i}`),e.options.themeVariables&&"object"==typeof e.options.themeVariables)for(const[t,i]of Object.entries(e.options.themeVariables)){if(g(t))continue;const s=t.startsWith("--vidply-")?t:`--vidply-${t}`;B(s)?D(i)?e.container.style.setProperty(s,i):e.log(`[VidPly] Ignoring invalid theme variable value for ${s}`,"warn"):e.log(`[VidPly] Ignoring invalid theme variable name: ${t}`,"warn")}}set(e,t={}){const i=this.player,s=i.options.theme;i.options.theme=e,t&&Object.keys(t).length>0&&(i.options.themeVariables={...i.options.themeVariables,...t}),this.apply(),i.emit("themechange",{theme:e,previousTheme:s,customVariables:i.options.themeVariables})}get(){return this.player.options.theme}setVariable(e,t){const i=this.player;if(!i.container)return;const s=e.startsWith("--vidply-")?e:`--vidply-${e}`;B(s)&&D(t)?(i.container.style.setProperty(s,t),i.options.themeVariables||(i.options.themeVariables={}),i.options.themeVariables[e]=t):i.log(`[VidPly] Ignoring unsafe setThemeVariable(${e})`,"warn")}reset(){const e=this.player;e.container&&e.options.themeVariables&&Object.keys(e.options.themeVariables).forEach(t=>{const i=t.startsWith("--vidply-")?t:`--vidply-${t}`;e.container.style.removeProperty(i)});const t=e.options.theme;e.options.theme="dark",e.options.themeVariables={},this.apply(),e.emit("themechange",{theme:"dark",previousTheme:t})}},V=class{player;constructor(e){this.player=e}resolvePath(e){if(!e)return"";if(e.match(/^(https?:|\/)/))return e;try{return new URL(e,window.location.href).href}catch{return e}}async generateFromVideo(e=10){const t=this.player;if("VIDEO"!==t.element.tagName)return null;const i=t.renderer;if(!i||!i.media||"VIDEO"!==i.media.tagName)return null;const s=i.media;(!s.duration||s.duration<e)&&(e=Math.min(e,Math.max(1,.1*s.duration)));let a=s;t.controlBar&&t.controlBar.previewVideo&&t.controlBar.previewSupported&&(a=t.controlBar.previewVideo);const n=a===s;return await m(a,e,{restoreState:n,quality:.9})}async autoGenerate(){const e=this.player;if(e.element.getAttribute("poster")||e.element.poster||e.options.poster)return;if("VIDEO"!==e.element.tagName)return;e.state.duration&&0!==e.state.duration||await new Promise(t=>{const i=()=>{e.element.removeEventListener("loadedmetadata",i),t()};e.element.readyState>=1?t():e.element.addEventListener("loadedmetadata",i)});const t=await this.generateFromVideo(10);t&&(e.element.poster=t,e.log("Auto-generated poster from video frame at 10 seconds","info"),this.showOverlay())}showOverlay(){const e=this.player;if(!e.videoWrapper||"VIDEO"!==e.element.tagName)return;const t=e.element.getAttribute("poster")||e.element.poster||e.options.poster;if(!t)return;const i=t.startsWith("data:")?t:this.resolvePath(t);e.videoWrapper.style.setProperty("--vidply-poster-image",`url("${i}")`),e.videoWrapper.classList.add("vidply-forced-poster"),e._isAudioContent&&e.container?e.container.classList.add("vidply-audio-content"):e.container&&e.container.classList.remove("vidply-audio-content")}hideOverlay(){const e=this.player;e.videoWrapper&&(e.videoWrapper.classList.remove("vidply-forced-poster"),e.videoWrapper.style.removeProperty("--vidply-poster-image"))}},F=class{player;saveProgressThrottled=null;resumeChecked=!1;listenersAttached=!1;constructor(e){this.player=e}init(){this.listenersAttached||(this.listenersAttached=!0,this.saveProgressThrottled=h(()=>this.saveProgress(),5e3),this.player.on("timeupdate",()=>{this.player.state.playing&&this.player.state.duration>0&&this.saveProgressThrottled?.()}),this.player.on("loadedmetadata",()=>{this.resumeChecked||(this.resumeChecked=!0,this.checkForResume())}),this.player.on("ended",()=>{const e=this.player.getVideoId();e&&this.player.storage.clearWatchProgress(e)}))}saveProgress(){const e=this.player;if(!e.options.resumePlayback)return;const t=e.getVideoId();if(!t)return;const i=e.state.currentTime,s=e.state.duration;s<30||i<e.options.resumeThreshold||i/s*100>95||e.storage.saveWatchProgress(t,i,s)}checkForResume(){const e=this.player;if(!e.options.resumePlayback)return;const t=e.getVideoId();if(!t)return;const i=e.storage.getWatchProgress(t);if(!i)return;const{currentTime:s,duration:a,percentage:n}=i;s<e.options.resumeThreshold||n>95||e.state.duration>0&&Math.abs(e.state.duration-a)>5?e.storage.clearWatchProgress(t):e.options.resumePrompt?this.showPrompt(s):e.seek(s)}formatTime(e){const t=Math.floor(e/3600),i=Math.floor(e%3600/60),s=Math.floor(e%60);return t>0?`${t}:${i.toString().padStart(2,"0")}:${s.toString().padStart(2,"0")}`:`${i}:${s.toString().padStart(2,"0")}`}showPrompt(e){const t=this.player;if(t.state.resumePromptVisible||!t.container)return;const i=this.formatTime(e),s=d.t("resume.prompt",{time:i});t.resumePromptElement=p.createElement("div",{className:`${t.options.classPrefix}-resume-prompt`,attributes:{role:"dialog","aria-label":s,"aria-modal":"true"}});const a=p.createElement("div",{className:`${t.options.classPrefix}-resume-prompt-content`}),n=p.createElement("p",{className:`${t.options.classPrefix}-resume-prompt-message`,textContent:s}),r=p.createElement("div",{className:`${t.options.classPrefix}-resume-prompt-buttons`}),o=p.createElement("button",{className:`${t.options.classPrefix}-resume-prompt-button ${t.options.classPrefix}-resume-prompt-button-primary`,textContent:d.t("resume.resume"),attributes:{type:"button"}});o.addEventListener("click",()=>{this.hidePrompt(),t.seek(e),t.play()});const l=p.createElement("button",{className:`${t.options.classPrefix}-resume-prompt-button`,textContent:d.t("resume.startOver"),attributes:{type:"button"}});l.addEventListener("click",()=>{this.hidePrompt();const e=t.getVideoId();e&&t.storage.clearWatchProgress(e),t.seek(0),t.play()}),t.resumePromptElement.addEventListener("keydown",e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),this.hidePrompt())}),r.appendChild(o),r.appendChild(l),a.appendChild(n),a.appendChild(r),t.resumePromptElement.appendChild(a),t.container.appendChild(t.resumePromptElement),t.state.resumePromptVisible=!0,requestAnimationFrame(()=>{o.focus()}),t.emit("resumepromptshow",{savedTime:e})}hidePrompt(){const e=this.player;e.resumePromptElement&&(e.resumePromptElement.remove(),e.resumePromptElement=null,e.state.resumePromptVisible=!1,e.emit("resumeprompthide"))}},I=class{player;orientationQuery=null;orientationHandler=null;constructor(e){this.player=e}setup(){this.setupResizeTracking(),this.setupOrientationTracking(),this.setupFullscreenTracking()}setupResizeTracking(){const e=this.player;if("undefined"!=typeof ResizeObserver)return e.resizeObserver=new ResizeObserver(t=>{for(const i of t){const t=e.controlBar;t&&"function"==typeof t.updateControlsForViewport&&t.updateControlsForViewport(i.contentRect.width),e.transcriptManager&&e.transcriptManager.isVisible&&e.transcriptManager.positionTranscript()}}),void e.resizeObserver.observe(e.container);e.resizeHandler=()=>{const t=e.controlBar;t&&"function"==typeof t.updateControlsForViewport&&t.updateControlsForViewport(e.container.clientWidth),e.transcriptManager&&e.transcriptManager.isVisible&&(e.transcriptManager.draggableResizable&&e.transcriptManager.draggableResizable.manuallyPositioned||e.transcriptManager.positionTranscript())},window.addEventListener("resize",e.resizeHandler,{signal:e.lifecycleSignal})}setupOrientationTracking(){const e=this.player;if(!window.matchMedia)return;this.orientationHandler=()=>{setTimeout(()=>{e.transcriptManager&&e.transcriptManager.isVisible&&(e.transcriptManager.draggableResizable&&e.transcriptManager.draggableResizable.manuallyPositioned||e.transcriptManager.positionTranscript())},100)};const t=window.matchMedia("(orientation: portrait)");t.addEventListener?t.addEventListener("change",this.orientationHandler,{signal:e.lifecycleSignal}):t.addListener&&t.addListener(this.orientationHandler),this.orientationQuery=t,e.orientationQuery=t,e.orientationHandler=this.orientationHandler}setupFullscreenTracking(){const e=this.player;e.fullscreenChangeHandler=()=>{const t=document,i=Boolean(document.fullscreenElement||t.webkitFullscreenElement||t.mozFullScreenElement||t.msFullscreenElement);e.state.fullscreen!==i&&(e.state.fullscreen=i,e.pseudoFullscreen||(e.pseudoFullscreen=new T(e)),i?(e.container.classList.add(`${e.options.classPrefix}-fullscreen`),document.body.classList.add("vidply-fullscreen-active"),e.pseudoFullscreen.makeBackgroundInert()):(e.container.classList.remove(`${e.options.classPrefix}-fullscreen`),document.body.classList.remove("vidply-fullscreen-active"),e.pseudoFullscreen.restoreBackgroundInteractivity(),e._disablePseudoFullscreen()),e.emit("fullscreenchange",i),e.controlBar&&e.controlBar.updateFullscreenButton(),e.signLanguageWrapper&&"none"!==e.signLanguageWrapper.style.display)&&(window.innerWidth<768&&e.setupSignLanguageInteraction(),e.setManagedTimeout(()=>{requestAnimationFrame(()=>{e.storage.saveSignLanguagePreferences({size:null}),e.signLanguageWrapper&&(e.signLanguageWrapper.style.width=i?"400px":"280px"),e.constrainSignLanguagePosition()})},500))};const t={signal:e.lifecycleSignal};document.addEventListener("fullscreenchange",e.fullscreenChangeHandler,t),document.addEventListener("webkitfullscreenchange",e.fullscreenChangeHandler,t),document.addEventListener("mozfullscreenchange",e.fullscreenChangeHandler,t),document.addEventListener("MSFullscreenChange",e.fullscreenChangeHandler,t)}cleanup(){const e=this.player;e.resizeObserver&&(e.resizeObserver.disconnect(),e.resizeObserver=null),e.resizeHandler=null,e.fullscreenChangeHandler=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),e.orientationQuery=null,e.orientationHandler=null}},N=class{player;cueChangeHandler=null;alertHandlers=new Map;constructor(e){this.player=e}get cuechangeListener(){return this.cueChangeHandler}setupHandling(){const e=this.player,t=()=>{const t=e.textTracks.find(e=>"metadata"===e.kind);t?("disabled"===t.mode&&(t.mode="hidden"),this.cueChangeHandler&&t.removeEventListener("cuechange",this.cueChangeHandler),this.cueChangeHandler=()=>{const i=Array.from(t.activeCues||[]);i.length>0&&e.options.debug&&e.log("[Metadata] Active cues:",i.map(e=>({start:e.startTime,end:e.endTime,text:e.text}))),i.forEach(e=>this.handleCue(e))},t.addEventListener("cuechange",this.cueChangeHandler),e.metadataCueChangeHandler=this.cueChangeHandler,e.options.debug&&e.log("[Metadata] Track enabled,",t.cues?t.cues.length:0,"cues available")):e.options.debug&&e.log("[Metadata] No metadata track found")};t(),e.on("loadedmetadata",t)}normalizeSelector(e){if("string"!=typeof e)return null;const t=e.trim();return t?t.length>200?null:t.startsWith("#")||t.startsWith(".")||t.startsWith("[")?t:`#${t}`:null}resolveConfig(e,t){if(!e||!t)return null;if(Object.prototype.hasOwnProperty.call(e,t))return e[t];const i=t.replace(/^#/,"");return Object.prototype.hasOwnProperty.call(e,i)?e[i]:null}cacheContent(e,t={}){if(!e)return;const i=t.messageSelector||"[data-vidply-alert-message], p",s=e.querySelector(t.titleSelector||"[data-vidply-alert-title], h3, header");s&&!s.dataset.vidplyAlertTitleOriginal&&(s.dataset.vidplyAlertTitleOriginal=s.textContent?.trim()??"");const a=e.querySelector(i);a&&!a.dataset.vidplyAlertMessageOriginal&&(a.dataset.vidplyAlertMessageOriginal=a.textContent?.trim()??"")}restoreContent(e,t={}){if(!e)return;const i=t.messageSelector||"[data-vidply-alert-message], p",s=e.querySelector(t.titleSelector||"[data-vidply-alert-title], h3, header");s&&s.dataset.vidplyAlertTitleOriginal&&(s.textContent=s.dataset.vidplyAlertTitleOriginal);const a=e.querySelector(i);a&&a.dataset.vidplyAlertMessageOriginal&&(a.textContent=a.dataset.vidplyAlertMessageOriginal)}focusTarget(e,t=null){if(!e||"none"===e)return;if("alert"===e&&t)return void t.focus({preventScroll:!0});const i=this.player;if("player"!==e)if("media"!==e){if("playButton"===e){const e=i.controlBar?.controls?.playPause;return void e?.focus({preventScroll:!0})}if("string"==typeof e){const t=document.querySelector(e);t&&(-1!==t.tabIndex||t.hasAttribute("tabindex")||t.setAttribute("tabindex","-1"),t.focus({preventScroll:!0}))}}else i.element.focus({preventScroll:!0});else i.container?.focus({preventScroll:!0})}handleAlert(e,t={}){const i=this.player;if(!e)return;const s=this.resolveConfig(i.options.metadataAlerts,e)||{},a=t.element||this.resolveElement(e);if(!a)return void(i.options.debug&&i.log("[Metadata] Alert element not found:",e));i.options.debug&&i.log("[Metadata] Handling alert",e,{reason:t.reason,config:s}),this.cacheContent(a,s),a.dataset.vidplyAlertOriginalDisplay||(a.dataset.vidplyAlertOriginalDisplay=a.style.display||""),a.dataset.vidplyAlertDisplay||(a.dataset.vidplyAlertDisplay=s.display||"block");const n=void 0!==t.show?t.show:!1!==s.show;n&&(a.style.display=s.display||a.dataset.vidplyAlertDisplay||"block",a.hidden=!1,a.removeAttribute("hidden"),a.setAttribute("aria-hidden","false"),a.setAttribute("data-vidply-alert-active","true")),!1!==s.resetContent&&"focus"===t.reason&&this.restoreContent(a,s),n&&(void 0!==t.focus?t.focus:s.focusOnShow??"focus"!==t.reason)&&(-1!==a.tabIndex||a.hasAttribute("tabindex")||a.setAttribute("tabindex","-1"),a.focus({preventScroll:!0})),n&&!1!==s.autoScroll&&!1!==t.autoScroll&&a.scrollIntoView(u("nearest"));const r=s.continueButton;if(r){let t=null;if(t="self"===r||a.matches(r)?a:a.querySelector(r)||document.querySelector(r),t&&!this.alertHandlers.has(e)){const n=()=>{!1!==s.hideOnContinue&&(a.style.display=s.hideDisplay||a.dataset.vidplyAlertOriginalDisplay||""||"none",a.setAttribute("aria-hidden","true"),a.removeAttribute("data-vidply-alert-active")),!1!==s.resume&&i.state.paused&&i.play();const e=s.focusTarget||"playButton";i.setManagedTimeout(()=>{this.focusTarget(e,a)},s.focusDelay??100)};t.addEventListener("click",n),this.alertHandlers.set(e,{button:t,handler:n})}}return a}handleHashtags(e){if(!Array.isArray(e)||0===e.length)return;const t=this.player,i=t.options.metadataHashtags;i&&e.forEach(e=>{const s=this.resolveConfig(i,e);if(!s)return;const a=this.normalizeSelector(s.alert||s.selector||s.target);if(!a)return;const n=this.resolveElement(a);if(n){if(t.options.debug&&t.log("[Metadata] Handling hashtag",e,{selector:a,config:s}),this.cacheContent(n,s),s.title){const e=n.querySelector(s.titleSelector||"[data-vidply-alert-title], h3, header");e&&(e.textContent=s.title)}if(s.message){const e=n.querySelector(s.messageSelector||"[data-vidply-alert-message], p");e&&(e.textContent=s.message)}this.handleAlert(a,{element:n,show:!1!==s.show,focus:void 0!==s.focus&&s.focus,autoScroll:s.autoScroll,reason:"hashtag"})}else t.options.debug&&t.log("[Metadata] Hashtag target not found:",a)})}handleCue(e){const t=this.player,i=e.text.trim();t.options.debug&&t.log("[Metadata] Processing cue:",{time:e.startTime,text:i}),t.emit("metadata",{time:e.startTime,endTime:e.endTime,text:i,cue:e}),i.includes("PAUSE")&&(t.state.paused||(t.options.debug&&t.log("[Metadata] Pausing video at",e.startTime),t.pause()),t.emit("metadata:pause",{time:e.startTime,text:i}));const s=i.match(/FOCUS:([\w#-]{1,128})/);if(s){const a=s[1],n=this.normalizeSelector(a),r=this.resolveElement(n);r?(t.options.debug&&t.log("[Metadata] Focusing element:",n),-1!==r.tabIndex||r.hasAttribute("tabindex")||r.setAttribute("tabindex","-1"),t.setManagedTimeout(()=>{r.focus({preventScroll:!0})},10)):t.options.debug&&t.options.metadataDirectives&&t.log("[Metadata] Element not found:",n||a),t.emit("metadata:focus",{time:e.startTime,target:a,selector:n,element:r,text:i}),t.options.metadataDirectives&&n&&this.handleAlert(n,{element:r,reason:"focus"})}const a=i.match(/#[\w-]{1,64}/g);if(a&&a.length>0){const s=a.slice(0,32);t.options.debug&&t.log("[Metadata] Hashtags found:",s),t.emit("metadata:hashtags",{time:e.startTime,hashtags:s,text:i}),t.options.metadataDirectives&&this.handleHashtags(s)}}resolveElement(e){const t=this.player,i=t.options.metadataDirectives;if(!i)return null;if(!e)return null;try{return!0===i||"global"===i?document.querySelector(e):(t.container||t.element.parentElement||document).querySelector(e)}catch{return null}}cleanup(){this.alertHandlers.size>0&&(this.alertHandlers.forEach(({button:e,handler:t})=>{e&&t&&e.removeEventListener("click",t)}),this.alertHandlers.clear()),this.cueChangeHandler=null}},O=null,H=null,q=null,R=["video","audio"],_=0,z=class e extends y{static instances=[];static THEMES=A;static observeLazy(t,i={},s="200px"){const a="string"==typeof t?document.querySelector(t):t;return a?"IntersectionObserver"in window?(x(a,i,s,(t,i)=>{new e(t,i)}),{cancel:()=>(e=>{const t=C.get(e);t&&(t.observer.unobserve(e),C.delete(e))})(a)}):(new e(a,i),null):(console.warn("VidPly: Element not found for lazy observation"),null)}element;container;options;state;renderer=null;controlBar=null;captionManager=null;keyboardManager=null;transcriptManager=null;playlistManager=null;settingsDialog=null;audioDescriptionManager=null;signLanguageManager=null;floatingPlayerManager=null;storage;instanceId;_audioDescriptionDesiredState;_fallbackSources=null;_isAudioContent;_isFallingBack;_managersLoading=null;_originalElement;pseudoFullscreen=null;themeManager;posterManager;resumeManager=null;responsiveManager;metadataAlertsManager=null;_pendingSource=null;_sourceElementsCache=null;_sourceElementsDirty=!0;_switchingRenderer;_trackElementsCache=null;_trackElementsDirty=!0;_textTracksCache=null;_textTracksDirty;audioDescriptionCaptionTracks=[];audioDescriptionSourceElement=null;audioDescriptionSrc=null;currentSignLanguage=null;currentSource=null;debouncedPositionPlayOverlay=null;fullscreenChangeHandler=null;metadataCueChangeHandler=null;noticeElement=null;noticeTimeout=null;orientationHandler=null;orientationQuery=null;originalAudioDescriptionSource=null;originalSrc=null;playButtonOverlay=null;resizeHandler=null;resizeObserver=null;resumePromptElement=null;signLanguageDraggable=null;signLanguageHeader=null;signLanguageSettingsButton=null;signLanguageSettingsMenu=null;signLanguageSettingsMenuVisible=!1;signLanguageSources={};signLanguageSrc=null;signLanguageVideo=null;signLanguageWrapper=null;timeouts=new Set;trackArtworkElement=null;videoWrapper=null;loadingOverlayElement=null;_bufferingHideOnMediaPlaying=null;_lifecycleController=new AbortController;constructor(e,t={}){if(super(),this.element="string"==typeof e?document.querySelector(e):e,!this.element)throw new Error("VidPly: Element not found");if(_++,this.instanceId=_,"VIDEO"!==this.element.tagName&&"AUDIO"!==this.element.tagName){const e="string"==typeof t.mediaType?t.mediaType.toLowerCase():"video",i=R.includes(e)?e:"video";i!==e&&console.warn(`[VidPly] Ignoring unsafe mediaType "${e}", falling back to "video"`);const s=document.createElement(i);Array.from(this.element.attributes).forEach(e=>{"id"===e.name||"class"===e.name||e.name.startsWith("data-")||s.setAttribute(e.name,e.value)}),this.element.querySelectorAll("track").forEach(e=>{s.appendChild(e.cloneNode(!0))}),this.element.replaceChildren(s),this.element=s}this._originalElement=this.element,this.options={width:null,height:null,poster:null,responsive:!0,fillContainer:!1,autoplay:!1,loop:!1,muted:!1,volume:.8,playbackSpeed:1,preload:"metadata",initialDuration:0,deferLoad:!1,requirePlaybackForAccessibilityToggles:!1,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,hideSpeedForHls:!1,hideSpeedForHlsVideo:!1,hideSpeedForDash:!1,hideSpeedForDashVideo:!1,captionsButton:!0,transcriptButton:!0,fullscreenButton:!0,pipButton:!1,floating:!1,floatingPosition:"bottom-right",floatingMinViewportWidth:768,downloadButton:!1,downloadUrl:null,downloadFormat:null,downloadFileSize:null,downloadFetchSize:!0,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",signLanguageDisplayMode:"both",transcript:!1,transcriptPosition:"external",transcriptContainer:null,keyboard:!0,keyboardShortcuts:{"play-pause":[" ","p","k"],"volume-up":["ArrowUp"],"volume-down":["ArrowDown"],"seek-forward":["ArrowRight"],"seek-backward":["ArrowLeft"],mute:["m"],fullscreen:["f"],captions:["c"],"caption-style-menu":["a"],"speed-up":[">"],"speed-down":["<"],"speed-menu":["s"],"quality-menu":["q"],"chapters-menu":["j"],"transcript-toggle":["t"]},ariaLabels:{},screenReaderAnnouncements:!0,highContrast:!1,focusHighlight:!0,metadataAlerts:{},metadataHashtags:{},language:"en",languages:["en"],resumePlayback:!0,resumeThreshold:10,resumePrompt:!0,thumbnailPreview:!0,thumbnailCacheSize:50,thumbnailPregenerate:!0,thumbnailInterval:10,thumbnailWidth:160,thumbnailHeight:90,thumbnailQuality:.8,lazyInit:!0,lazyMargin:"200px",theme:"dark",themeVariables:{},debug:!1,classPrefix:"vidply",iconType:"svg",pauseOthersOnPlay:!0,onReady:null,onPlay:null,onPause:null,onEnded:null,onTimeUpdate:null,onVolumeChange:null,onError:null,...t},this.options.metadataAlerts=this.options.metadataAlerts||{},this.options.metadataHashtags=this.options.metadataHashtags||{},this.noticeElement=null,this.noticeTimeout=null,this.storage=new r("vidply"),this.themeManager=new $(this),this.posterManager=new V(this),this.responsiveManager=new I(this);const i=this.storage.getPlayerPreferences();i&&("number"==typeof i.volume&&(this.options.volume=i.volume),"number"==typeof i.playbackSpeed&&(this.options.playbackSpeed=i.playbackSpeed),"boolean"==typeof i.muted&&(this.options.muted=i.muted)),this.state={ready:!1,playing:!1,paused:!0,ended:!1,buffering:!1,seeking:!1,hasStartedPlayback:!1,muted:this.options.muted,volume:this.options.volume,currentTime:0,duration:Number(this.options.initialDuration)>0?Number(this.options.initialDuration):0,playbackSpeed:this.options.playbackSpeed,fullscreen:!1,pip:!1,floating:null,captionsEnabled:this.options.captionsDefault,currentCaption:null,controlsVisible:!0,audioDescriptionEnabled:!1,signLanguageEnabled:!1,signLanguageInMainView:!1,resumePromptVisible:!1},this.resumePromptElement=null,this.originalSrc=null,this.audioDescriptionSrc=this.options.audioDescriptionSrc,this.signLanguageSrc=this.options.signLanguageSrc,this.signLanguageSources=this.options.signLanguageSources||{},this.currentSignLanguage=null,this.signLanguageVideo=null,this.audioDescriptionSourceElement=null,this.originalAudioDescriptionSource=null,this.audioDescriptionCaptionTracks=[],this._audioDescriptionDesiredState=!1,this._textTracksCache=null,this._textTracksDirty=!0,this._sourceElementsCache=null,this._sourceElementsDirty=!0,this._trackElementsCache=null,this._trackElementsDirty=!0,this.timeouts=new Set,this.container=document.createElement("div"),this.renderer=null,this.controlBar=null,this.captionManager=null,this.keyboardManager=null,this.settingsDialog=null,this.metadataCueChangeHandler=null,this.audioDescriptionManager=null,this.signLanguageManager=null,this._managersLoading=null,Object.defineProperties(this,{signLanguageWrapper:{get:()=>this.signLanguageManager?.wrapper,set:e=>{this.signLanguageManager&&(this.signLanguageManager.wrapper=e)}},signLanguageVideo:{get:()=>this.signLanguageManager?.video,set:e=>{this.signLanguageManager&&(this.signLanguageManager.video=e)}},signLanguageHeader:{get:()=>this.signLanguageManager?.header,set:e=>{this.signLanguageManager&&(this.signLanguageManager.header=e)}},signLanguageSettingsButton:{get:()=>this.signLanguageManager?.settingsButton,set:e=>{this.signLanguageManager&&(this.signLanguageManager.settingsButton=e)}},signLanguageSettingsMenu:{get:()=>this.signLanguageManager?.settingsMenu,set:e=>{this.signLanguageManager&&(this.signLanguageManager.settingsMenu=e)}},signLanguageSettingsMenuVisible:{get:()=>this.signLanguageManager?.settingsMenuVisible,set:e=>{this.signLanguageManager&&(this.signLanguageManager.settingsMenuVisible=e)}},signLanguageDraggable:{get:()=>this.signLanguageManager?.draggable,set:e=>{this.signLanguageManager&&(this.signLanguageManager.draggable=e)}},currentSignLanguage:{get:()=>this.signLanguageManager?.currentLanguage,set:e=>{this.signLanguageManager&&(this.signLanguageManager.currentLanguage=e)}}}),this.init()}get lifecycleSignal(){return this._lifecycleController.signal}get textTracks(){return this._textTracksCache&&!this._textTracksDirty||(this._textTracksCache=Array.from(this.element.textTracks||[]),this._textTracksDirty=!1),this._textTracksCache}get sourceElements(){return this._sourceElementsCache&&!this._sourceElementsDirty||(this._sourceElementsCache=Array.from(this.element.querySelectorAll("source")),this._sourceElementsDirty=!1),this._sourceElementsCache}get trackElements(){return this._trackElementsCache&&!this._trackElementsDirty||(this._trackElementsCache=Array.from(this.element.querySelectorAll("track")),this._trackElementsDirty=!1),this._trackElementsCache}showNotice(e,{timeout:t=2500,priority:i="polite"}={}){try{if(!e)return;if(!this.container)return;if(this.keyboardManager?.announce&&this.keyboardManager.announce(e,i),!this.noticeElement){const e=document.createElement("div");e.className=`${this.options.classPrefix}-notice`,e.setAttribute("role","status"),e.setAttribute("aria-live",i),e.setAttribute("aria-atomic","true"),e.style.position="absolute",e.style.left="0.75rem",e.style.right="0.75rem",e.style.top="0.75rem",e.style.zIndex="9999",e.style.padding="0.5rem 0.75rem",e.style.borderRadius="0.5rem",e.style.background="rgba(0, 0, 0, 0.75)",e.style.color="#fff",e.style.fontSize="0.875rem",e.style.lineHeight="1.3",e.style.pointerEvents="none",this.noticeElement=e,this.container.appendChild(e)}const s=this.noticeElement;s.textContent=e,s.style.display="block",this.noticeTimeout&&(clearTimeout(this.noticeTimeout),this.noticeTimeout=null),this.noticeTimeout=setTimeout(()=>{this.noticeElement&&(this.noticeElement.style.display="none")},t)}catch{}}async init(){try{if(this.log("Initializing VidPly player"),this.options.languageFiles)try{await d.loadLanguagesFromUrls(this.options.languageFiles)}catch(e){console.warn("Failed to load some language files:",e)}if(this.options.languageFile&&this.options.languageFileUrl)try{await d.loadLanguageFromUrl(this.options.languageFile,this.options.languageFileUrl),this.log(`Custom language file loaded for ${this.options.languageFile}`)}catch(e){console.warn(`Failed to load language file for ${this.options.languageFile}:`,e)}if(!this.options.language||"en"===this.options.language){const e=this.detectHtmlLanguage();e&&(this.options.language=e,this.log(`Auto-detected language from HTML: ${e}`))}if(this.options.language||(this.options.language="en"),await d.ensureLanguage(this.options.language),d.setLanguage(this.options.language),this.createContainer(),this.options.floating&&this.element&&"VIDEO"===this.element.tagName)try{const e=this.element;e.disablePictureInPicture=!0,e.disableRemotePlayback=!0,this.element.setAttribute("disablepictureinpicture",""),this.element.setAttribute("disableremoteplayback","")}catch(e){this.log(`Failed to disable native PiP: ${e}`,"warn")}this.element.src||this.element.querySelector("source")?.src?await this.initializeRenderer():this.log("No initial source - waiting for playlist or manual load"),await this.initFeatureManagers(),this.options.controls&&(this.controlBar=new k(this),this.videoWrapper?.appendChild(this.controlBar.element)),this.options.captions&&(this.captionManager=new n(this)),this.options.transcript&&await this.ensureTranscriptManager(),this.setupMetadataHandling(),this.options.keyboard&&(this.keyboardManager=new M(this)),this.setupResponsiveHandlers(),this.options.startTime>0&&this.seek(this.options.startTime),requestAnimationFrame(()=>{this.options.muted?this.mute():this.renderer&&this.renderer.media&&this.renderer.setMuted(!1),.8!==this.options.volume?this.setVolume(this.options.volume):this.renderer&&this.renderer.media&&this.renderer.setVolume(this.options.volume)}),this.options.resumePlayback&&this.initResumePlayback(),this.state.ready=!0,this._originalElement.classList.add("vidply-initialized"),this.emit("ready"),this.options.onReady&&this.options.onReady.call(this),this.options.autoplay&&this.play(),this.log("Player initialized successfully")}catch(e){this.handleError(e)}}async ensureTranscriptManager(){if(this.transcriptManager)return this.transcriptManager;if(!this.options.transcript&&!this.options.transcriptButton)return null;const e=await import("./vidply.TranscriptManager-SYM3DFUY.min.js"),t=e.TranscriptManager||e.default;return t?(this.transcriptManager=new t(this),this.transcriptManager):null}async toggleTranscript(){const e=await this.ensureTranscriptManager();e&&(e.toggleTranscript(),this.controlBar&&this.controlBar.updateTranscriptButton())}async ensureAudioDescriptionManager(){if(this.audioDescriptionManager)return this.audioDescriptionManager;if(!this.options.audioDescriptionSrc&&!this.audioDescriptionSrc&&!this.options.audioDescriptionButton)return null;const e=await(async()=>{if(!O){const e=await import("./vidply.AudioDescriptionManager-RHLIJW5C.min.js");O=e.AudioDescriptionManager}return O})();return this.audioDescriptionManager=new e(this),this.audioDescriptionManager}async ensureSignLanguageManager(){if(this.signLanguageManager)return this.signLanguageManager;const e=this.options.signLanguageSrc||this.signLanguageSrc,t=this.options.signLanguageSources&&Object.keys(this.options.signLanguageSources).length>0;if(!e&&!t&&!this.options.signLanguageButton)return null;const i=await(async()=>{if(!H){const e=await import("./vidply.SignLanguageManager-V3OBTSSF.min.js");H=e.SignLanguageManager}return H})();return this.signLanguageManager=new i(this),this.signLanguageManager}async ensureFloatingPlayerManager(){if(this.floatingPlayerManager)return this.floatingPlayerManager;if(!this.options.floating)return null;if(!this.element||"VIDEO"!==this.element.tagName)return null;const e=await(async()=>{if(!q){const e=await import("./vidply.FloatingPlayerManager-SKAZ4J43.min.js");q=e.FloatingPlayerManager}return q})();return this.floatingPlayerManager=new e(this),this.floatingPlayerManager}async initFeatureManagers(){const e=[],t=this.sourceElements.some(e=>e.getAttribute("data-desc-src")||e.getAttribute("data-orig-src"));(this.options.audioDescriptionButton||this.options.audioDescriptionSrc||this.audioDescriptionSrc||t)&&e.push(this.ensureAudioDescriptionManager()),(this.options.signLanguageButton||this.options.signLanguageSrc||this.signLanguageSrc||this.options.signLanguageSources&&Object.keys(this.options.signLanguageSources).length>0)&&e.push(this.ensureSignLanguageManager()),this.options.floating&&this.element&&"VIDEO"===this.element.tagName&&e.push(this.ensureFloatingPlayerManager()),e.length>0&&await Promise.all(e),this.audioDescriptionManager&&this.audioDescriptionManager.initFromSourceElements(this.sourceElements,this.trackElements)}detectHtmlLanguage(){const e=document.documentElement.lang||document.documentElement.getAttribute("lang");if(!e)return null;const t=e.toLowerCase().split("-")[0];return t?d.translations[t]||d.builtInLanguageLoaders&&d.builtInLanguageLoaders[t]?t:(this.log(`Language "${e}" not available, using English as fallback`),null):null}initResumePlayback(){this.resumeManager||(this.resumeManager=new F(this)),this.resumeManager.init()}getVideoId(){const e=this.element.getAttribute("data-video-id")||this.element.dataset.videoId||this._originalElement?.getAttribute("data-video-id")||this._originalElement?.dataset?.videoId;if(e)return e;let t=this.element.src;if(!t){const e=this.element.querySelector("source");t=e?.src}return t?this._hashString(t):null}_hashString(e){let t=0;for(let i=0;i<e.length;i++)t=(t<<5)-t+e.charCodeAt(i),t&=t;return"v_"+Math.abs(t).toString(36)}saveProgress(){this.resumeManager?.saveProgress()}checkForResume(){this.resumeManager?.checkForResume()}showResumePrompt(e){this.resumeManager?.showPrompt(e)}hideResumePrompt(){this.resumeManager?.hidePrompt()}applyTheme(){this.themeManager.apply()}setTheme(e,t={}){this.themeManager.set(e,t)}getTheme(){return this.themeManager.get()}setThemeVariable(e,t){this.themeManager.setVariable(e,t)}resetTheme(){this.themeManager.reset()}createContainer(){const t=this.instanceId>1?`${d.t("player.label")} ${this.instanceId}`:d.t("player.label");this.container=p.createElement("div",{className:`${this.options.classPrefix}-player`,attributes:{role:"region","aria-label":t,tabindex:"0"}});const i=this.element.tagName.toLowerCase();if(this.container.classList.add(`${this.options.classPrefix}-${i}`),this.options.responsive&&this.container.classList.add(`${this.options.classPrefix}-responsive`),this.videoWrapper=p.createElement("div",{className:`${this.options.classPrefix}-video-wrapper`}),this.element.parentNode?.insertBefore(this.container,this.element),"AUDIO"===this.element.tagName&&this.options.poster){const e=S(this.options.poster);e?(this.trackArtworkElement=p.createElement("div",{className:`${this.options.classPrefix}-track-artwork`,attributes:{"aria-hidden":"true"}}),this.trackArtworkElement.style.backgroundImage=`url("${E(e)}")`,this.container.appendChild(this.trackArtworkElement)):this.log("[VidPly] Ignored unsafe poster URL","warn")}if(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%","VIDEO"===this.element.tagName&&this.options.playsInline&&(this.element.setAttribute("playsinline",""),this.element.playsInline=!0),this.options.width&&(this.container.style.width="number"==typeof this.options.width?`${this.options.width}px`:this.options.width),this.options.height&&(this.container.style.height="number"==typeof this.options.height?`${this.options.height}px`:this.options.height),this.options.poster&&"VIDEO"===this.element.tagName){const e=S(this.resolvePosterPath(this.options.poster));e&&(this.element.poster=e)}"VIDEO"===this.element.tagName&&this.createPlayButtonOverlay(),this.createBufferingLoadingOverlay(),this.element.vidply=this,e.instances.push(this),this.element.style.cursor="pointer",this.element.addEventListener("click",e=>{e.target===this.element&&this.toggle()},{signal:this.lifecycleSignal}),this.on("play",()=>{this.state.hasStartedPlayback=!0,this.hidePosterOverlay()}),this.on("timeupdate",()=>{this.state.hasStartedPlayback&&this.state.currentTime>0&&this.hidePosterOverlay()}),this.element.addEventListener("loadeddata",()=>{this.state.hasStartedPlayback&&(this.state.playing||this.state.currentTime>0)&&this.hidePosterOverlay()},{once:!0}),this.applyTheme()}createPlayButtonOverlay(){const e=i();this.playButtonOverlay=e,e.addEventListener("click",()=>{this.toggle()}),this.videoWrapper?.appendChild(e),this.on("play",()=>{e.style.opacity="0",e.style.pointerEvents="none"}),this.on("pause",()=>{e.style.opacity="1",e.style.pointerEvents="auto",this.positionPlayOverlayOnMobile()}),this.on("ended",()=>{e.style.opacity="1",e.style.pointerEvents="auto",this.positionPlayOverlayOnMobile()});const t=o(()=>{this.positionPlayOverlayOnMobile()},150);this.debouncedPositionPlayOverlay=t,window.addEventListener("resize",t,{signal:this.lifecycleSignal}),this.on("loadedmetadata",()=>{this.positionPlayOverlayOnMobile()}),this.on("enterfullscreen",()=>{c(()=>this.positionPlayOverlayOnMobile(),100)}),this.on("exitfullscreen",()=>{c(()=>this.positionPlayOverlayOnMobile(),100)})}createBufferingLoadingOverlay(){if(!this.videoWrapper)return;const e=this.options.classPrefix,t=d.t("player.buffering"),i=p.createElement("div",{className:`${e}-loading`,attributes:{"aria-busy":"false"}}),s=p.createElement("span",{className:`${e}-sr-only`,attributes:{id:`${e}-buffering-live-${this.instanceId}`,"aria-live":"polite","aria-atomic":"true"}});i.appendChild(s),this.loadingOverlayElement=i,this.videoWrapper.appendChild(i);const a=()=>this.container?.classList.contains(`${e}-external-controls`),n=()=>{this.container.classList.contains(`${e}-buffering`)&&(this.container.classList.remove(`${e}-buffering`),i.setAttribute("aria-busy","false"),s.textContent="")};this.on("waiting",()=>{a()||(this.state.hasStartedPlayback||this.state.seeking)&&(this.container.classList.add(`${e}-buffering`),i.setAttribute("aria-busy","true"),s.textContent=t)}),this.on("canplay",n),this.on("pause",n),this.on("ended",n),this._bufferingHideOnMediaPlaying=n,this.element.addEventListener("playing",this._bufferingHideOnMediaPlaying),this.on("timeupdate",()=>{this.container.classList.contains(`${e}-buffering`)&&n()})}positionPlayOverlayOnMobile(){if(!this.playButtonOverlay||"VIDEO"!==this.element.tagName)return;if(!l())return void(this.playButtonOverlay.style.top="");const e=this.element.getBoundingClientRect(),t=this.videoWrapper?.getBoundingClientRect();t&&(this.playButtonOverlay.style.top=e.top-t.top+e.height/2+"px")}async initializeRenderer(){let e=this._pendingSource,t=null;if(e)this._fallbackSources=[];else{const t=Array.from(this.element.querySelectorAll("source"));if(t.length>1){const i=this._selectBestSource(t);e=i.src,this._fallbackSources=i.fallbacks}else e=this.element.src||t[0]?.src,this._fallbackSources=[]}if(!e)throw new Error("No media source found");this.currentSource=e,this._pendingSource=null,this.audioDescriptionManager?.initFromSourceElements(this.sourceElements,this.trackElements),this.originalSrc||(this.originalSrc=e),t=await this._detectRendererClass(e),this.log(`Using ${t?.name||"HTML5Renderer"} renderer`),this.renderer=new t(this);const i=(this._fallbackSources?.length??0)>0?1e4:0;if(i>0){let e;await Promise.race([this.renderer.init(),new Promise((t,s)=>{e=setTimeout(()=>s(new Error(`Renderer init timed out after ${i}ms`)),i)})]).finally(()=>{void 0!==e&&clearTimeout(e)})}else await this.renderer.init();this.invalidateTrackCache()}async _detectRendererClass(e){if(e.includes("youtube.com")||e.includes("youtu.be")){const e=await import("./vidply.YouTubeRenderer-UMHEV3KD.min.js");return e.YouTubeRenderer??e.default}if(e.includes("vimeo.com")){const e=await import("./vidply.VimeoRenderer-72TWRYFQ.min.js");return e.VimeoRenderer??e.default}if(e.includes(".m3u8")){const e=await import("./vidply.HLSRenderer-62HH4YTK.min.js");return e.HLSRenderer??e.default}if(e.includes(".mpd")){const e=await import("./vidply.DASHRenderer-DN3S27AV.min.js");return e.DASHRenderer??e.default}if(e.includes("soundcloud.com")||e.includes("api.soundcloud.com")){const e=await import("./vidply.SoundCloudRenderer-CXRVZIAJ.min.js");return e.SoundCloudRenderer??e.default}return a}_selectBestSource(e){const t="undefined"!=typeof MediaSource,i=e.map(e=>({src:e.src||e.getAttribute("src")||"",type:e.type||e.getAttribute("type")||"",el:e})),s=""!==document.createElement("video").canPlayType("application/vnd.apple.mpegurl");let a;if(t&&(a=i.find(e=>e.src.includes(".mpd"))),!a){const e=i.find(e=>e.src.includes(".m3u8"));e&&(t||s)&&(a=e)}a||(a=i.find(e=>!e.src.includes(".mpd")&&!e.src.includes(".m3u8"))||i[0]);const n=i.filter(e=>e!==a).map(e=>({src:e.src,type:e.type}));return{src:a?.src??"",fallbacks:n}}async _fallbackToNextSource(){if(!this._fallbackSources||0===this._fallbackSources.length)return!1;const e=this._fallbackSources.shift();if(!e)return!1;this.log(`Falling back to next source: ${e.src}`);try{return this.renderer&&"function"==typeof this.renderer.destroy&&(this.renderer.destroy(),this.renderer=null),this.currentSource=e.src,this._pendingSource=e.src,this._isFallingBack=!0,await this.initializeRenderer(),this._isFallingBack=!1,!0}catch{return this.log(`Fallback source failed: ${e.src}`,"warn"),this._isFallingBack=!1,this._fallbackToNextSource()}}invalidateTrackCache(){this._textTracksDirty=!0,this._trackElementsDirty=!0,this._sourceElementsDirty=!0}findTextTrack(e,t=null){return this.textTracks.find(t?i=>i.kind===e&&i.language===t:t=>t.kind===e)}findSourceElement(e,t=null){return this.sourceElements.find(t?i=>i.getAttribute(e)===t:t=>t.hasAttribute(e))}findTrackElement(e){return this.trackElements.find(t=>t.track===e)}resolvePosterPath(e){return this.posterManager.resolvePath(e)}async generatePosterFromVideo(e=10){return this.posterManager.generateFromVideo(e)}async autoGeneratePoster(){return this.posterManager.autoGenerate()}showPosterOverlay(){this.posterManager.showOverlay()}hidePosterOverlay(){this.posterManager.hideOverlay()}setManagedTimeout(e,t){const i=setTimeout(()=>{this.timeouts.delete(i),e()},t);return this.timeouts.add(i),i}clearManagedTimeout(e){e&&(clearTimeout(e),this.timeouts.delete(e))}isExternalRendererUrl(e){return!!e&&(e.includes("youtube.com")||e.includes("youtu.be")||e.includes("vimeo.com")||e.includes("soundcloud.com")||e.includes("api.soundcloud.com")||e.includes(".m3u8")||e.includes(".mpd"))}async load(e){try{this.log("Loading new media:",e.src),this.renderer&&this.pause();const t=window.scrollX||window.pageXOffset,i=window.scrollY||window.pageYOffset;this.trackElements.forEach(e=>e.remove()),this.invalidateTrackCache();const s=this.isExternalRendererUrl(e.src);if(s&&(this._switchingRenderer=!0),s?(this.element.removeAttribute("src"),this.element.querySelectorAll("source").forEach(e=>e.removeAttribute("src"))):(this.element.src=e.src,e.type&&(this.element.type=e.type)),this._pendingSource=e.src,this._isAudioContent=Boolean(e.type&&e.type.startsWith("audio/")),this.container&&(this._isAudioContent?this.container.classList.add("vidply-audio-content"):this.container.classList.remove("vidply-audio-content")),e.poster&&"VIDEO"===this.element.tagName)if(this._isAudioContent){if(this.element.removeAttribute("poster"),this.videoWrapper){const t=this.resolvePosterPath(e.poster);this.videoWrapper.style.setProperty("--vidply-poster-image",`url("${t}")`),this.videoWrapper.classList.add("vidply-forced-poster")}}else this.element.poster=this.resolvePosterPath(e.poster),this.videoWrapper&&(this.videoWrapper.classList.remove("vidply-forced-poster"),this.videoWrapper.style.removeProperty("--vidply-poster-image"));e.tracks&&e.tracks.length>0&&(e.tracks.forEach(e=>{const t=document.createElement("track");t.src=e.src??"",t.kind=e.kind||"captions",t.srclang=e.srclang||"en",t.label=e.label||e.srclang||"",e.default&&(t.default=!0),"string"==typeof e.describedSrc&&t.setAttribute("data-desc-src",e.describedSrc);const i=this.element.firstChild;i&&i.nodeType===Node.ELEMENT_NODE&&"TRACK"!==i.tagName?this.element.insertBefore(t,i):this.element.appendChild(t)}),this.invalidateTrackCache());const a=this.state.signLanguageEnabled,r=this.state.audioDescriptionEnabled;this.audioDescriptionSrc=e.audioDescriptionSrc||null,this.signLanguageSrc=e.signLanguageSrc||null,this.originalSrc=e.src,this.audioDescriptionManager&&(this.audioDescriptionManager.updateSources(e.audioDescriptionSrc),this.audioDescriptionManager.reinitialize()),this.signLanguageManager&&this.signLanguageManager.updateSources(e.signLanguageSrc,e.signLanguageSources),r&&this.disableAudioDescription(),a&&this.disableSignLanguage();const o=this.shouldChangeRenderer(e.src),l=!o&&this.renderer&&(this.renderer.dash||this.renderer.hls);if((o||l)&&this.renderer&&(this.renderer.destroy(),this.renderer=null,this.controlBar&&this.controlBar.removeHlsCaptionButtons(!0),this.transcriptManager?.isVisible&&this.transcriptManager.hideTranscript()),!this.renderer||o||l)await this.initializeRenderer();else if(this.renderer.media=this.element,this.options.deferLoad){try{this.element.preload=this.options.preload||"metadata"}catch{}if(this.renderer){const e=this.renderer;"boolean"==typeof e._didDeferredLoad&&(e._didDeferredLoad=!1),"boolean"==typeof e._hlsSourceLoaded&&(e._hlsSourceLoaded=!1),"boolean"==typeof e._dashSourceLoaded&&(e._dashSourceLoaded=!1),"_pendingSrc"in this.renderer&&(e._pendingSrc=this._pendingSource||this.currentSource||null)}}else this.element.load();if(s?setTimeout(()=>{this._switchingRenderer=!1},500):this._switchingRenderer=!1,window.scrollTo(t,i),l)this.captionManager&&(this.captionManager.disable(),this.captionManager.tracks=[]),this.transcriptManager?.isVisible&&this.transcriptManager.hideTranscript();else{if(this.captionManager&&(this.captionManager.destroy(),this.captionManager=new n(this)),this.transcriptManager){const e=this.transcriptManager.isVisible;this.transcriptManager.destroy(),this.transcriptManager=null;const t=await this.ensureTranscriptManager();e&&this.controlBar&&this.controlBar.hasCaptionTracks()&&t?.showTranscript()}this.controlBar&&this.updateControlBar()}window.scrollTo(t,i),a&&this.signLanguageSrc&&setTimeout(()=>{this.enableSignLanguage(),window.scrollTo(t,i)},150),r&&this.audioDescriptionSrc&&setTimeout(()=>{this.enableAudioDescription(),window.scrollTo(t,i)},150),this.emit("sourcechange",e),this.log("Media loaded successfully")}catch(e){this.handleError(e)}}ensureLoaded(){try{if(!this.renderer)return;"function"==typeof this.renderer.ensureLoaded&&this.renderer.ensureLoaded()}catch{}}updateControlBar(){if(!this.controlBar)return;const e=this.controlBar;e.element.innerHTML="",e.createControls(),e.attachEvents(),e.setupAutoHide(),e.setupOverflowDetection()}shouldChangeRenderer(e){if(!this.renderer)return!0;const t=e.includes("youtube.com")||e.includes("youtu.be"),i=e.includes("vimeo.com"),s=e.includes(".m3u8"),a=e.includes(".mpd"),n=e.includes("soundcloud.com")||e.includes("api.soundcloud.com"),r=this.renderer.constructor.name;return!((!t||"YouTubeRenderer"===r)&&(!i||"VimeoRenderer"===r)&&(!s||"HLSRenderer"===r)&&(!a||"DASHRenderer"===r)&&(!n||"SoundCloudRenderer"===r)&&(t||i||s||a||n||"HTML5Renderer"===r))}play(){this.renderer?this.renderer.play():this.playlistManager&&Array.isArray(this.playlistManager.tracks)&&this.playlistManager.tracks.length>0&&this.playlistManager.play(this.playlistManager.currentIndex>=0?this.playlistManager.currentIndex:0,!0)}pause(){this.renderer&&this.renderer.pause()}stop(){this.pause(),this.seek(0)}toggle(){this.state.playing?this.pause():this.play()}seek(e){if("number"!=typeof e||!Number.isFinite(e))return;const t=e<0?0:e;this.hidePosterOverlay(),this.renderer&&this.renderer.seek(t)}seekForward(e=this.options.seekInterval){const t=Number.isFinite(e)?e:5,i=this.state.currentTime+t,s=this.state.duration>0?Math.min(i,this.state.duration):i;this.seek(s)}seekBackward(e=this.options.seekInterval){const t=Number.isFinite(e)?e:5;this.seek(Math.max(this.state.currentTime-t,0))}setVolume(e){if("number"!=typeof e||!Number.isFinite(e))return;const t=Math.max(0,Math.min(1,e));this.renderer&&this.renderer.setVolume(t),this.state.volume=t,t>0&&this.state.muted&&(this.state.muted=!1,this.renderer&&this.renderer.setMuted(!1),this.emit("volumechange")),this.savePlayerPreferences()}getVolume(){return this.state.volume}mute(){this.renderer&&this.renderer.setMuted(!0),this.state.muted=!0,this.savePlayerPreferences(),this.emit("volumechange")}unmute(){this.renderer&&this.renderer.setMuted(!1),this.state.muted=!1,this.savePlayerPreferences(),this.emit("volumechange")}toggleMute(){this.state.muted?this.unmute():this.mute()}setPlaybackSpeed(e){if("number"!=typeof e||!Number.isFinite(e))return;const 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(){const e=this.container;let t=null;/iPad|iPhone|iPod/.test(navigator.userAgent)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1?this._enablePseudoFullscreen():(e.requestFullscreen?t=e.requestFullscreen():e.webkitRequestFullscreen?t=e.webkitRequestFullscreen():e.mozRequestFullScreen?t=e.mozRequestFullScreen():e.msRequestFullscreen&&(t=e.msRequestFullscreen()),t&&"function"==typeof t.catch&&t.catch(e=>{this.log("Fullscreen API failed, using pseudo-fullscreen:",e.message),this._enablePseudoFullscreen()}),e.requestFullscreen||e.webkitRequestFullscreen||e.mozRequestFullScreen||e.msRequestFullscreen?(this.state.fullscreen=!0,this.container.classList.add(`${this.options.classPrefix}-fullscreen`),this.emit("fullscreenchange",!0)):this._enablePseudoFullscreen())}exitFullscreen(){const e=document;Boolean(document.fullscreenElement||e.webkitFullscreenElement||e.mozFullScreenElement||e.msFullscreenElement)?document.exitFullscreen?document.exitFullscreen():e.webkitExitFullscreen?e.webkitExitFullscreen():e.mozCancelFullScreen?e.mozCancelFullScreen():e.msExitFullscreen&&e.msExitFullscreen():this._disablePseudoFullscreen(),this.state.fullscreen=!1,this.container.classList.remove(`${this.options.classPrefix}-fullscreen`),this.emit("fullscreenchange",!1)}toggleFullscreen(){this.state.fullscreen?this.exitFullscreen():this.enterFullscreen()}_enablePseudoFullscreen(){this.pseudoFullscreen||(this.pseudoFullscreen=new T(this)),this.pseudoFullscreen.enable()}_disablePseudoFullscreen(){this.pseudoFullscreen?.disable()}enterPiP(){if(this.options.floating)return void(this.floatingPlayerManager&&this.floatingPlayerManager.togglePinned());const e=this.element;"function"==typeof e.requestPictureInPicture&&(e.requestPictureInPicture(),this.state.pip=!0,this.emit("pipchange",!0))}exitPiP(){this.options.floating?this.floatingPlayerManager&&this.state.floating&&this.floatingPlayerManager.exit("manual"):document.pictureInPictureElement&&(document.exitPictureInPicture(),this.state.pip=!1,this.emit("pipchange",!1))}togglePiP(){this.options.floating?this.floatingPlayerManager&&this.floatingPlayerManager.togglePinned():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){if("string"!=typeof e||!e)return!1;const t=[this.lifecycleSignal];"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&t.push(AbortSignal.timeout(8e3));const i=1===t.length?t[0]:AbortSignal.any?.(t)??t[0];try{return(await fetch(e,{method:"HEAD",cache:"no-cache",signal:i})).ok}catch(t){return this.options.debug&&this.log(`validateTrackExists("${e}") failed: ${t?.message??t}`,"warn"),!1}}stripVTTFormatting(e){return e?e.replace(/<[^>]+>/g,"").replace(/\n/g," ").trim().toLowerCase():""}findMatchingCaptionTime(e,t){if(!e||!t||0===t.length)return null;const i=this.stripVTTFormatting(e);for(const e of t){if("captions"!==e.kind&&"subtitles"!==e.kind)continue;const t=e.track;if(t&&t.cues)for(let e=0;e<t.cues.length;e++){const s=t.cues[e],a=this.stripVTTFormatting(s.text);if(a===i)return s.startTime;const n=i.split(/\s+/).filter(e=>e.length>2),r=a.split(/\s+/).filter(e=>e.length>2);if(n.length>0&&r.length>0&&n.filter(e=>r.includes(e)).length/n.length>=.8)return s.startTime}}return null}async enableAudioDescription(){const e=await this.ensureAudioDescriptionManager();return e?.enable()}async disableAudioDescription(){const e=await this.ensureAudioDescriptionManager();return e?.disable()}async toggleAudioDescription(){if(this.options.requirePlaybackForAccessibilityToggles&&!this.renderer&&this.playlistManager?.tracks?.length)return void this.showNotice(d.t("player.startPlaybackForAudioDescription"));const e=await this.ensureAudioDescriptionManager();return e?!this.renderer&&this.playlistManager&&this.playlistManager.tracks?.length?(e.desiredState=!e.desiredState,this.state.audioDescriptionEnabled=e.desiredState,this.emit(e.desiredState?"audiodescriptionenabled":"audiodescriptiondisabled"),void this.play()):e.toggle():void 0}async enableSignLanguage(){const e=await this.ensureSignLanguageManager();return e?.enable()}async disableSignLanguage(){const e=await this.ensureSignLanguageManager();return e?.disable()}async toggleSignLanguage(){if(this.options.requirePlaybackForAccessibilityToggles&&!this.renderer&&this.playlistManager?.tracks?.length)return void this.showNotice(d.t("player.startPlaybackForSignLanguage"));const e=await this.ensureSignLanguageManager();if(e){if(!this.renderer&&this.playlistManager&&this.playlistManager.tracks?.length){const t=e.enabled,i=e.toggle();return!t&&e.enabled&&this.play(),i}return e.toggle()}}setupSignLanguageInteraction(){return this.signLanguageManager?._setupInteraction()}switchSignLanguage(e){return this.signLanguageManager?.switchLanguage(e)}showSignLanguageSettingsMenu(){return this.signLanguageManager?.showSettingsMenu()}hideSignLanguageSettingsMenu({focusButton:e=!0}={}){return this.signLanguageManager?.hideSettingsMenu({focusButton:e})}constrainSignLanguagePosition(){return this.signLanguageManager?.constrainPosition()}saveSignLanguagePreferences(){return this.signLanguageManager?.savePreferences()}cleanupSignLanguage(){return this.signLanguageManager?.cleanup()}showSettings(){console.warn("[VidPly] Settings dialog has been removed. Use individual control buttons (speed, captions, etc.)")}hideSettings(){}getCurrentTime(){return this.state.currentTime}getDuration(){return this.state.duration}isPlaying(){return this.state.playing}isPaused(){return this.state.paused}isEnded(){return this.state.ended}isMuted(){return this.state.muted}isFullscreen(){return this.state.fullscreen}handleError(e){if(this._switchingRenderer||this._isFallingBack)this.log("Suppressing error during renderer switch:",e,"debug");else{if(this._fallbackSources&&this._fallbackSources.length>0)return this.log("Renderer error, attempting fallback:",e,"warn"),void this._fallbackToNextSource().then(t=>{t||(this.log("All fallback sources exhausted","error"),this.emit("error",e),this.options.onError&&this.options.onError.call(this,e))});this.log("Error:",e,"error"),this.emit("error",e),this.options.onError&&this.options.onError.call(this,e)}}log(...e){if(!this.options.debug)return;let t="log";const i=console;if(e.length>0){const s=e[e.length-1];"string"==typeof s&&"function"==typeof i[s]&&(t=s,e=e.slice(0,-1))}0===e.length&&(e=[""]);const s=i[t];"function"==typeof s?s("[VidPly]",...e):console.log("[VidPly]",...e)}setupResponsiveHandlers(){this.responsiveManager.setup()}destroy(){this.log("Destroying player");try{this._lifecycleController.abort()}catch(e){this.log(`AbortController.abort failed: ${e}`,"warn")}if(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.audioDescriptionManager&&"function"==typeof this.audioDescriptionManager.destroy){try{this.audioDescriptionManager.destroy()}catch(e){this.log(`AudioDescriptionManager.destroy failed: ${e}`,"warn")}this.audioDescriptionManager=null}if(this.signLanguageManager&&"function"==typeof this.signLanguageManager.destroy){try{this.signLanguageManager.destroy()}catch(e){this.log(`SignLanguageManager.destroy failed: ${e}`,"warn")}this.signLanguageManager=null}if(this.playlistManager&&"function"==typeof this.playlistManager.destroy){try{this.playlistManager.destroy()}catch(e){this.log(`PlaylistManager.destroy failed: ${e}`,"warn")}this.playlistManager=null}if(this.settingsDialog&&"function"==typeof this.settingsDialog.destroy){try{this.settingsDialog.destroy()}catch(e){this.log(`SettingsDialog.destroy failed: ${e}`,"warn")}this.settingsDialog=null}if(this.floatingPlayerManager){try{this.floatingPlayerManager.destroy()}catch(e){this.log(`FloatingPlayerManager.destroy failed: ${e}`,"warn")}this.floatingPlayerManager=null}if(this.playButtonOverlay&&this.playButtonOverlay.parentNode&&(this.playButtonOverlay.remove(),this.playButtonOverlay=null),this._bufferingHideOnMediaPlaying&&(this.element.removeEventListener("playing",this._bufferingHideOnMediaPlaying),this._bufferingHideOnMediaPlaying=null),this.loadingOverlayElement&&this.loadingOverlayElement.parentNode&&(this.loadingOverlayElement.remove(),this.loadingOverlayElement=null),this.responsiveManager?.cleanup(),this.timeouts.forEach(e=>clearTimeout(e)),this.timeouts.clear(),this.metadataCueChangeHandler){const e=this.textTracks.find(e=>"metadata"===e.kind);e&&e.removeEventListener("cuechange",this.metadataCueChangeHandler),this.metadataCueChangeHandler=null}this.metadataAlertsManager?.cleanup();const t=e.instances.indexOf(this);t>=0&&e.instances.splice(t,1),this.container&&this.container.parentNode&&(this.container.parentNode.insertBefore(this.element,this.container),this.container.parentNode.removeChild(this.container)),this.removeAllListeners()}setupMetadataHandling(){this.metadataAlertsManager||(this.metadataAlertsManager=new N(this)),this.metadataAlertsManager.setupHandling()}normalizeMetadataSelector(e){return(this.metadataAlertsManager??this._ensureMetadataManager()).normalizeSelector(e)}resolveMetadataConfig(e,t){return(this.metadataAlertsManager??this._ensureMetadataManager()).resolveConfig(e,t)}cacheMetadataAlertContent(e,t={}){(this.metadataAlertsManager??this._ensureMetadataManager()).cacheContent(e,t)}restoreMetadataAlertContent(e,t={}){(this.metadataAlertsManager??this._ensureMetadataManager()).restoreContent(e,t)}focusMetadataTarget(e,t=null){(this.metadataAlertsManager??this._ensureMetadataManager()).focusTarget(e,t)}_ensureMetadataManager(){return this.metadataAlertsManager||(this.metadataAlertsManager=new N(this)),this.metadataAlertsManager}handleMetadataAlert(e,t={}){return(this.metadataAlertsManager??this._ensureMetadataManager()).handleAlert(e,t)}handleMetadataHashtags(e){(this.metadataAlertsManager??this._ensureMetadataManager()).handleHashtags(e)}handleMetadataCue(e){(this.metadataAlertsManager??this._ensureMetadataManager()).handleCue(e)}},W=0,U=class{player;container;currentIndex;hostElement;initialTracks;instanceId;isChangingTrack;isPanelVisible;navigationFeedback;options;PlayerClass;playlistPanel;trackArtworkElement;trackInfoElement;tracks;uniqueId;constructor(e,t={}){this.player=e,this.tracks=[],this.initialTracks=Array.isArray(t.tracks)?t.tracks:[],this.currentIndex=-1,this.instanceId=++W,this.uniqueId=`vidply-playlist-${this.instanceId}`,this.options={...t,autoAdvance:!1!==t.autoAdvance,autoPlayFirst:!1!==t.autoPlayFirst,loop:Boolean(t.loop)||!1,showPanel:!1!==t.showPanel,recreatePlayers:Boolean(t.recreatePlayers)||!1},this.container=null,this.playlistPanel=null,this.trackInfoElement=null,this.trackArtworkElement=null,this.navigationFeedback=null,this.isPanelVisible=!1!==this.options.showPanel,this.isChangingTrack=!1,this.hostElement=t.hostElement??null,this.PlayerClass=t.PlayerClass??null,this.handleTrackEnd=this.handleTrackEnd.bind(this),this.handleTrackError=this.handleTrackError.bind(this),this.handlePlaybackStateChange=this.handlePlaybackStateChange.bind(this),this.handleFullscreenChange=this.handleFullscreenChange.bind(this),this.handleAudioDescriptionChange=this.handleAudioDescriptionChange.bind(this),this.player.playlistManager=this,this.init(),this.updatePlayerControls(),this.initialTracks.length>0&&this.loadPlaylist(this.initialTracks)}getTrackMediaType(e){const t=e.src||"";return t.includes("youtube.com")||t.includes("youtu.be")?"youtube":t.includes("vimeo.com")?"vimeo":t.includes("soundcloud.com")||t.includes("api.soundcloud.com")?"soundcloud":t.includes(".m3u8")?"hls":t.includes(".mpd")?"dash":e.type&&e.type.startsWith("audio/")?"audio":"video"}async recreatePlayerForTrack(e,t=!1){if(!this.hostElement||!this.PlayerClass)return console.warn("VidPly Playlist: Cannot recreate player - missing hostElement or PlayerClass"),!1;const i=this.getTrackMediaType(e),s="audio"===i?"audio":"video",a=this.isPanelVisible,n=[...this.tracks],r=this.currentIndex;this.trackArtworkElement&&this.trackArtworkElement.parentNode&&this.trackArtworkElement.parentNode.removeChild(this.trackArtworkElement),this.trackInfoElement&&this.trackInfoElement.parentNode&&this.trackInfoElement.parentNode.removeChild(this.trackInfoElement),this.navigationFeedback&&this.navigationFeedback.parentNode&&this.navigationFeedback.parentNode.removeChild(this.navigationFeedback),this.playlistPanel&&this.playlistPanel.parentNode&&this.playlistPanel.parentNode.removeChild(this.playlistPanel);const o=this.player?.options?{...this.player.options}:{};this.player&&(this.player.off("ended",this.handleTrackEnd),this.player.off("error",this.handleTrackError),this.player.playlistManager=null,this.player.destroy()),this.hostElement.innerHTML="";const l=document.createElement(s);l.setAttribute("preload",o.preload||"metadata"),"video"!==s||!e.poster||"video"!==i&&"hls"!==i&&"dash"!==i||l.setAttribute("poster",e.poster);if(!["youtube","vimeo","soundcloud","hls","dash"].includes(i)){const t=document.createElement("source");t.src=e.src||"",e.type&&(t.type=e.type),l.appendChild(t),e.tracks&&e.tracks.length>0&&e.tracks.forEach(e=>{const t=document.createElement("track");t.src=e.src||"",t.kind=e.kind||"captions",t.srclang=e.srclang||"en",t.label=e.label||e.srclang||"",e.default&&(t.default=!0),l.appendChild(t)})}this.hostElement.appendChild(l);const c={mediaType:s,poster:e.poster,audioDescriptionSrc:e.audioDescriptionSrc||null,audioDescriptionDuration:e.audioDescriptionDuration||null,signLanguageSrc:e.signLanguageSrc||null};if(Object.assign(c,o),this.player=new this.PlayerClass(l,c),this.player.playlistManager=this,await new Promise(e=>{this.player.on("ready",()=>e())}),this.player.on("ended",this.handleTrackEnd),this.player.on("error",this.handleTrackError),this.player.container){if(this.trackArtworkElement){const e=this.player.container.querySelector(".vidply-video-wrapper");e?this.player.container.insertBefore(this.trackArtworkElement,e):this.player.container.appendChild(this.trackArtworkElement)}this.trackInfoElement&&this.player.container.appendChild(this.trackInfoElement),this.navigationFeedback&&this.player.container.appendChild(this.navigationFeedback),this.playlistPanel&&this.player.container.appendChild(this.playlistPanel)}return this.container=this.player.container,this.updatePlayerControls(),this.tracks=n,this.currentIndex=r,this.updatePlaylistUI(),this.isPanelVisible=a,this.playlistPanel&&(this.playlistPanel.style.display=a?"":"none"),this.player.load({src:e.src??"",type:e.type,poster:e.poster,tracks:e.tracks||[],audioDescriptionSrc:e.audioDescriptionSrc||null,signLanguageSrc:e.signLanguageSrc||null}),t&&setTimeout(()=>{this.player.play()},100),!0}init(){this.player.on("ended",this.handleTrackEnd),this.player.on("error",this.handleTrackError),this.player.on("play",this.handlePlaybackStateChange),this.player.on("pause",this.handlePlaybackStateChange),this.player.on("ended",this.handlePlaybackStateChange),this.player.on("fullscreenchange",this.handleFullscreenChange),this.player.on("audiodescriptionenabled",this.handleAudioDescriptionChange),this.player.on("audiodescriptiondisabled",this.handleAudioDescriptionChange),this.options.showPanel&&this.createUI(),0===this.tracks.length&&0===this.initialTracks.length&&this.loadPlaylistFromAttribute()}loadPlaylistFromAttribute(){if(!this.player.element||!this.player.element.parentElement)return;const e=this.player.element.parentElement.parentElement,t=e?e.parentElement:null;if(!t)return;this.loadOptionsFromAttributes(t);const i=t.getAttribute("data-playlist");if(i)try{const e=JSON.parse(i);Array.isArray(e)&&e.length>0?this.loadPlaylist(e):console.warn("VidPly Playlist: data-playlist is not a valid array or is empty")}catch(e){console.error("VidPly Playlist: Failed to parse data-playlist attribute",e)}}loadOptionsFromAttributes(e){const t=e.getAttribute("data-playlist-auto-advance");null!==t&&(this.options.autoAdvance="true"===t);const i=e.getAttribute("data-playlist-auto-play-first");null!==i&&(this.options.autoPlayFirst="true"===i);const s=e.getAttribute("data-playlist-loop");null!==s&&(this.options.loop="true"===s);const a=e.getAttribute("data-playlist-show-panel");null!==a&&(this.options.showPanel="true"===a)}updatePlayerControls(){if(!this.player.controlBar)return;const e=this.player.controlBar;e.element.innerHTML="",e.createControls(),e.attachEvents(),e.setupAutoHide()}loadPlaylist(e){this.tracks=e,this.currentIndex=-1,this.container&&this.container.classList.add("vidply-has-playlist"),this.playlistPanel&&this.renderPlaylist(),e.length>0&&(this.options.autoPlayFirst?this.play(0):this.loadTrack(0).catch(()=>{})),this.updatePlaylistVisibilityInFullscreen()}async loadTrack(e){if(e<0||e>=this.tracks.length)return void console.warn("VidPly Playlist: Invalid track index",e);const t=this.tracks[e];if(!t)return;if(this.selectTrack(e),this.isChangingTrack=!0,this.options.recreatePlayers&&this.hostElement&&this.PlayerClass){const i=this.player?"AUDIO"===this.player.element.tagName?"audio":"video":null,s=this.getTrackMediaType(t);if(i!==("audio"===s||"soundcloud"===s?"audio":"video"))return await this.recreatePlayerForTrack(t,!1),this.selectTrack(e),this.player.emit("playlisttrackchange",{index:e,item:t,total:this.tracks.length}),void setTimeout(()=>{this.isChangingTrack=!1},150)}const i=this.player.load({src:t.src??"",type:t.type,poster:t.poster,tracks:t.tracks||[],audioDescriptionSrc:t.audioDescriptionSrc||null,signLanguageSrc:t.signLanguageSrc||null,signLanguageSources:t.signLanguageSources||{}});this.player?.options?.deferLoad&&"function"==typeof this.player.ensureLoaded&&Promise.resolve(i).then(()=>this.player?.ensureLoaded?.()).catch(()=>{}),this.player.emit("playlisttrackchange",{index:e,item:t,total:this.tracks.length}),setTimeout(()=>{this.isChangingTrack=!1},150)}selectTrack(e){if(e<0||e>=this.tracks.length)return void console.warn("VidPly Playlist: Invalid track index",e);const t=this.tracks[e];if(t){this.currentIndex=e;try{if("VIDEO"===this.player?.element?.tagName)if(t.poster){const e=S("function"==typeof this.player.resolvePosterPath?this.player.resolvePosterPath(t.poster):t.poster);e?(this.player.element.poster=e,this.player.applyPosterAspectRatio?.(e)):this.player.element.removeAttribute("poster")}else this.player.element.removeAttribute("poster");if(this.player.audioDescriptionSrc=t.audioDescriptionSrc||null,this.player.signLanguageSrc=t.signLanguageSrc||null,this.player.signLanguageSources=t.signLanguageSources||{},t.duration&&Number(t.duration)>0&&(this.player.state.duration=Number(t.duration)),this.player.audioDescriptionManager&&(this.player.audioDescriptionManager.src=t.audioDescriptionSrc||null,this.player.audioDescriptionManager.originalSource=t.src||this.player.originalSrc||null),this.player.signLanguageManager&&(this.player.signLanguageManager.src=t.signLanguageSrc||null,this.player.signLanguageManager.sources=t.signLanguageSources||{},this.player.signLanguageManager.currentLanguage=null),t.src&&!this.player.originalSrc&&(this.player.originalSrc=t.src),Array.from(this.player.element.querySelectorAll("track")).forEach(e=>e.remove()),Array.isArray(t.tracks)&&t.tracks.forEach(e=>{if(!e?.src)return;const t=document.createElement("track");t.src=e.src,t.kind=e.kind||"captions",t.srclang=e.srclang||"en",t.label=e.label||e.srclang||"Track",e.default&&(t.default=!0),e.describedSrc&&t.setAttribute("data-desc-src",e.describedSrc),this.player.element.appendChild(t)}),"function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache(),this.player.audioDescriptionManager&&"function"==typeof this.player.audioDescriptionManager.initFromSourceElements)try{this.player.audioDescriptionManager.captionTracks=[],this.player.audioDescriptionManager.initFromSourceElements(this.player.sourceElements,this.player.trackElements)}catch{}if(this.player.captionManager&&"function"==typeof this.player.captionManager.loadTracks)try{this.player.captionManager.tracks=[],this.player.captionManager.currentTrack=null,this.player.captionManager.loadTracks()}catch{}"function"==typeof this.player.updateControlBar&&this.player.updateControlBar()}catch{}this.updateTrackInfo(t),this.updatePlaylistUI(),this.player.emit("playlisttrackselect",{index:e,item:t,total:this.tracks.length})}}async play(e,t=!1){if(e<0||e>=this.tracks.length)return void console.warn("VidPly Playlist: Invalid track index",e);const i=this.tracks[e];if(!i)return;if(this.isChangingTrack=!0,this.currentIndex=e,this.options.recreatePlayers&&this.hostElement&&this.PlayerClass){const t=this.player?"AUDIO"===this.player.element.tagName?"audio":"video":null,s=this.getTrackMediaType(i);if(t!==("audio"===s||"soundcloud"===s?"audio":"video"))return await this.recreatePlayerForTrack(i,!0),this.updateTrackInfo(i),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:i,total:this.tracks.length}),void setTimeout(()=>{this.isChangingTrack=!1},150)}let s=i.src;this.player?.audioDescriptionManager?.desiredState&&i.audioDescriptionSrc&&(this.player.originalSrc=i.src??null,this.player.audioDescriptionManager.originalSource=i.src??null,this.player.audioDescriptionManager.src=i.audioDescriptionSrc,s=i.audioDescriptionSrc),this.player.load({src:s??"",type:i.type,poster:i.poster,tracks:i.tracks||[],audioDescriptionSrc:i.audioDescriptionSrc||null,signLanguageSrc:i.signLanguageSrc||null,signLanguageSources:i.signLanguageSources||{}}),this.updateTrackInfo(i),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:i,total:this.tracks.length}),setTimeout(()=>{this.player.play(),setTimeout(()=>{this.isChangingTrack=!1},50)},100)}next(){let e=this.currentIndex+1;if(e>=this.tracks.length){if(!this.options.loop)return;e=0}this.play(e)}previous(){let e=this.currentIndex-1;if(e<0){if(!this.options.loop)return;e=this.tracks.length-1}this.play(e)}handleTrackEnd(){this.isChangingTrack||this.options.autoAdvance&&this.next()}isExternalRendererUrl(e){return!!e&&(e.includes("youtube.com")||e.includes("youtu.be")||e.includes("vimeo.com")||e.includes("soundcloud.com")||e.includes("api.soundcloud.com")||e.includes(".m3u8")||e.includes(".mpd"))}handleTrackError(e){const t=this.getCurrentTrack();t&&t.src&&this.isExternalRendererUrl(t.src)||this.isChangingTrack||(console.error("VidPly Playlist: Track error",e),this.options.autoAdvance&&setTimeout(()=>{this.next()},1e3))}handlePlaybackStateChange(){this.updatePlaylistVisibilityInFullscreen()}handleFullscreenChange(){setTimeout(()=>{this.updatePlaylistVisibilityInFullscreen()},50)}handleAudioDescriptionChange(){const e=this.getCurrentTrack();e&&(this.updateTrackInfo(e),this.updatePlaylistUI(),this.updatePlaylistDurations())}updatePlaylistDurations(){this.playlistPanel&&this.playlistPanel.querySelectorAll(".vidply-playlist-item").forEach((t,i)=>{const s=this.tracks[i];if(!s)return;const a=this.getEffectiveDuration(s),n=a?e.formatTime(a):"",r=t.querySelector(".vidply-playlist-duration-badge");r&&(r.textContent=n);const o=t.querySelector(".vidply-playlist-item-duration");o&&(o.textContent=n)})}getEffectiveDuration(e){return e?this.player.state.audioDescriptionEnabled&&e.audioDescriptionDuration?e.audioDescriptionDuration:e.duration||null:null}updatePlaylistVisibilityInFullscreen(){const e=this.playlistPanel;e&&this.tracks.length&&(this.player.state.fullscreen?this.player.state.playing?(e.classList.remove("vidply-playlist-fullscreen-visible"),setTimeout(()=>{this.player.state.playing&&this.player.state.fullscreen&&(e.style.display="none")},300)):(e.classList.add("vidply-playlist-fullscreen-visible"),e.style.display="block"):(e.classList.remove("vidply-playlist-fullscreen-visible"),e.style.display=this.isPanelVisible&&this.tracks.length>0?"block":"none"))}createUI(){this.container=this.player.container,this.container?(this.trackInfoElement=p.createElement("div",{className:"vidply-track-info",attributes:{role:"status"}}),this.trackInfoElement.style.display="none",this.container.appendChild(this.trackInfoElement),this.navigationFeedback=p.createElement("div",{className:"vidply-sr-only",attributes:{role:"status","aria-live":"polite","aria-atomic":"true"}}),this.container.appendChild(this.navigationFeedback),this.playlistPanel=p.createElement("div",{className:"vidply-playlist-panel",attributes:{id:`${this.uniqueId}-panel`,role:"region","aria-label":d.t("playlist.title"),"aria-labelledby":`${this.uniqueId}-heading`}}),this.playlistPanel.style.display="none",this.container.appendChild(this.playlistPanel)):console.warn("VidPly Playlist: No container found")}updateTrackInfo(t){if(!this.trackInfoElement)return;const i=this.currentIndex+1,s=this.tracks.length,a=t.title||d.t("playlist.untitled"),n=t.artist||"",r=this.getEffectiveDuration(t),o=r?e.formatTime(r):"",l=r?e.formatDuration(r):"",c=n?d.t("playlist.by")+n:"",u=l?`. ${l}`:"",h=d.t("playlist.nowPlaying",{current:i,total:s,title:a,artist:c})+u,g=d.t("playlist.trackOf",{current:i,total:s}),y=o?`<span class="vidply-track-duration" aria-hidden="true">${p.escapeHTML(o)}</span>`:"",m=t.description||"";this.trackInfoElement.innerHTML=`\n <span class="vidply-sr-only">${p.escapeHTML(h)}</span>\n <div class="vidply-track-header" aria-hidden="true">\n <span class="vidply-track-number">${p.escapeHTML(g)}</span>\n ${y}\n </div>\n <div class="vidply-track-title" aria-hidden="true">${p.escapeHTML(a)}</div>\n ${n?`<div class="vidply-track-artist" aria-hidden="true">${p.escapeHTML(n)}</div>`:""}\n ${m?`<div class="vidply-track-description" aria-hidden="true">${p.escapeHTML(m)}</div>`:""}\n `,this.trackInfoElement.style.display="block",this.updateTrackArtwork(t)}updateTrackArtwork(e){if("AUDIO"!==this.player?.element?.tagName)return void(this.trackArtworkElement&&(this.trackArtworkElement.style.display="none"));if(!this.trackArtworkElement&&this.container){this.trackArtworkElement=p.createElement("div",{className:"vidply-track-artwork",attributes:{"aria-hidden":"true"}}),this.trackArtworkElement.style.display="none";const e=this.container.querySelector(".vidply-video-wrapper");e?this.container.insertBefore(this.trackArtworkElement,e):this.container.appendChild(this.trackArtworkElement)}if(!this.trackArtworkElement)return;const t=e.poster?L(e.poster):null;t?(this.trackArtworkElement.style.backgroundImage=t,this.trackArtworkElement.style.display="block"):(this.trackArtworkElement.style.backgroundImage="",this.trackArtworkElement.style.display="none")}renderPlaylist(){if(!this.playlistPanel)return;this.playlistPanel.innerHTML="";const e=p.createElement("h2",{className:"vidply-playlist-header",attributes:{id:`${this.uniqueId}-heading`}});e.textContent=`${d.t("playlist.title")} (${this.tracks.length})`,this.playlistPanel.appendChild(e);const t=p.createElement("div",{className:"vidply-sr-only",attributes:{id:`${this.uniqueId}-keyboard-instructions`}});t.textContent=d.t("playlist.keyboardInstructions"),this.playlistPanel.appendChild(t);const i=p.createElement("ul",{className:"vidply-playlist-list",attributes:{role:"listbox","aria-labelledby":`${this.uniqueId}-heading`,"aria-describedby":`${this.uniqueId}-keyboard-instructions`}});this.tracks.forEach((e,t)=>{const s=this.createPlaylistItem(e,t);i.appendChild(s)}),this.playlistPanel.appendChild(i),this.isPanelVisible&&(this.playlistPanel.style.display="block")}createPlaylistItem(i,s){const a=i.title||d.t("playlist.trackUntitled",{number:s+1}),n=i.artist?d.t("playlist.by")+i.artist:"",r=this.getEffectiveDuration(i),o=r?e.formatTime(r):"",l=r?e.formatDuration(r):"",c=s===this.currentIndex;let u=`${a}${n}`;l&&(u+=`. ${l}`);const h=p.createElement("li",{className:c?"vidply-playlist-item vidply-playlist-item-active":"vidply-playlist-item",attributes:{"data-playlist-index":String(s),role:"none"}}),g=p.createElement("button",{className:"vidply-playlist-item-button",attributes:{type:"button",role:"option",tabIndex:0===s?"0":"-1","aria-label":u,"aria-posinset":String(s+1),"aria-setsize":String(this.tracks.length),"aria-checked":c?"true":"false"}});c&&(g.setAttribute("aria-current","true"),g.setAttribute("tabIndex","0"));const y=p.createElement("span",{className:"vidply-playlist-thumbnail-container",attributes:{"aria-hidden":"true"}}),m=p.createElement("span",{className:"vidply-playlist-thumbnail"}),f=i.poster?L(i.poster):null;if(f)m.style.backgroundImage=f;else{const e=t("music");e.classList.add("vidply-playlist-thumbnail-icon"),m.appendChild(e)}if(y.appendChild(m),o&&i.poster){const e=p.createElement("span",{className:"vidply-playlist-duration-badge"});e.textContent=o,y.appendChild(e)}g.appendChild(y);const v=p.createElement("span",{className:"vidply-playlist-item-info",attributes:{"aria-hidden":"true"}}),b=p.createElement("span",{className:"vidply-playlist-item-title-row"}),w=p.createElement("span",{className:"vidply-playlist-item-title"});if(w.textContent=a,b.appendChild(w),o&&!i.poster){const e=p.createElement("span",{className:"vidply-playlist-item-duration"});e.textContent=o,b.appendChild(e)}if(v.appendChild(b),i.artist){const e=p.createElement("span",{className:"vidply-playlist-item-artist"});e.textContent=i.artist,v.appendChild(e)}if(i.description){const e=p.createElement("span",{className:"vidply-playlist-item-description"});e.textContent=i.description,v.appendChild(e)}g.appendChild(v);const P=t("play");return P.classList.add("vidply-playlist-item-icon"),P.setAttribute("aria-hidden","true"),g.appendChild(P),g.addEventListener("click",()=>{const e=this.tracks[s];this.isExternalRendererUrl(e?.src)&&this.player.state.fullscreen?(this.player.exitFullscreen(),setTimeout(()=>{this.play(s,!0)},100)):this.play(s,!0)}),g.addEventListener("keydown",e=>{this.handlePlaylistItemKeydown(e,s)}),h.appendChild(g),h}handlePlaylistItemKeydown(e,t){if(!this.playlistPanel)return;const i=Array.from(this.playlistPanel.querySelectorAll(".vidply-playlist-item-button"));let s=-1,a="";switch(e.key){case"Enter":case" ":e.preventDefault(),e.stopPropagation();{const e=this.tracks[t];this.isExternalRendererUrl(e?.src)&&this.player.state.fullscreen?(this.player.exitFullscreen(),setTimeout(()=>{this.play(t,!0)},100)):this.play(t,!0)}return;case"ArrowDown":e.preventDefault(),e.stopPropagation(),t<i.length-1?s=t+1:a=d.t("playlist.endOfPlaylist",{current:i.length,total:i.length});break;case"ArrowUp":e.preventDefault(),e.stopPropagation(),t>0?s=t-1:a=d.t("playlist.beginningOfPlaylist",{total:i.length});break;case"PageDown":e.preventDefault(),e.stopPropagation(),s=Math.min(t+5,i.length-1),s===i.length-1&&t!==s&&(a=d.t("playlist.jumpedToLastTrack",{current:s+1,total:i.length}));break;case"PageUp":e.preventDefault(),e.stopPropagation(),s=Math.max(t-5,0),0===s&&t!==s&&(a=d.t("playlist.jumpedToFirstTrack",{total:i.length}));break;case"Home":e.preventDefault(),e.stopPropagation(),s=0,0!==t&&(a=d.t("playlist.firstTrack",{total:i.length}));break;case"End":e.preventDefault(),e.stopPropagation(),s=i.length-1,t!==i.length-1&&(a=d.t("playlist.lastTrack",{current:i.length,total:i.length}))}if(-1!==s&&s!==t){const e=i[t],a=i[s];if(e&&a){e.setAttribute("tabIndex","-1"),a.setAttribute("tabIndex","0"),a.focus({preventScroll:!1});const t=a.closest(".vidply-playlist-item");t&&t.scrollIntoView(u("nearest"))}}a&&this.navigationFeedback&&(this.navigationFeedback.textContent=a,setTimeout(()=>{this.navigationFeedback&&(this.navigationFeedback.textContent="")},1e3))}updatePlaylistUI(){if(!this.playlistPanel)return;const t=this.playlistPanel.querySelectorAll(".vidply-playlist-item"),i=this.playlistPanel.querySelectorAll(".vidply-playlist-item-button");t.forEach((t,s)=>{const a=i[s];if(!a)return;const n=this.tracks[s];if(!n)return;const r=n.title||d.t("playlist.trackUntitled",{number:s+1}),o=n.artist?d.t("playlist.by")+n.artist:"",l=this.getEffectiveDuration(n),c=l?e.formatDuration(l):"";if(s===this.currentIndex){t.classList.add("vidply-playlist-item-active"),a.setAttribute("aria-current","true"),a.setAttribute("aria-checked","true"),a.setAttribute("tabIndex","0");let e=`${r}${o}`;c&&(e+=`. ${c}`),a.setAttribute("aria-label",e),t.scrollIntoView(u("nearest"))}else{t.classList.remove("vidply-playlist-item-active"),a.removeAttribute("aria-current"),a.setAttribute("aria-checked","false"),a.setAttribute("tabIndex","-1");let e=`${r}${o}`;c&&(e+=`. ${c}`),a.setAttribute("aria-label",e)}})}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||this.currentIndex<this.tracks.length-1}hasPrevious(){return!!this.options.loop||this.currentIndex>0}addTrack(e){this.tracks.push(e),this.playlistPanel&&this.renderPlaylist()}removeTrack(e){e<0||e>=this.tracks.length||(this.tracks.splice(e,1),e<this.currentIndex?this.currentIndex--:e===this.currentIndex&&(this.currentIndex>=this.tracks.length&&(this.currentIndex=this.tracks.length-1),this.currentIndex>=0&&this.play(this.currentIndex)),this.playlistPanel&&this.renderPlaylist())}clear(){this.tracks=[],this.currentIndex=-1,this.playlistPanel&&(this.playlistPanel.innerHTML="",this.playlistPanel.style.display="none"),this.trackInfoElement&&(this.trackInfoElement.innerHTML="",this.trackInfoElement.style.display="none"),this.trackArtworkElement&&(this.trackArtworkElement.style.backgroundImage="",this.trackArtworkElement.style.display="none")}togglePanel(e){const t=this.playlistPanel;return!!t&&((void 0!==e?e:"none"===t.style.display)?(t.style.display="block",this.isPanelVisible=!0,this.tracks.length>0&&setTimeout(()=>{const e=t.querySelector('.vidply-playlist-item[tabindex="0"]');e&&e.focus({preventScroll:!0})},100),this.player.controlBar&&this.player.controlBar.controls.playlistToggle&&(this.player.controlBar.controls.playlistToggle.setAttribute("aria-expanded","true"),this.player.controlBar.controls.playlistToggle.setAttribute("aria-pressed","true"))):(t.style.display="none",this.isPanelVisible=!1,this.player.controlBar&&this.player.controlBar.controls.playlistToggle&&(this.player.controlBar.controls.playlistToggle.setAttribute("aria-expanded","false"),this.player.controlBar.controls.playlistToggle.setAttribute("aria-pressed","false"),this.player.controlBar.controls.playlistToggle.focus({preventScroll:!0}))),this.isPanelVisible)}showPanel(){return this.togglePanel(!0)}hidePanel(){return this.togglePanel(!1)}destroy(){this.player.off("ended",this.handleTrackEnd),this.player.off("error",this.handleTrackError),this.player.off("play",this.handlePlaybackStateChange),this.player.off("pause",this.handlePlaybackStateChange),this.player.off("ended",this.handlePlaybackStateChange),this.player.off("fullscreenchange",this.handleFullscreenChange),this.player.off("audiodescriptionenabled",this.handleAudioDescriptionChange),this.player.off("audiodescriptiondisabled",this.handleAudioDescriptionChange),this.trackArtworkElement&&this.trackArtworkElement.remove(),this.trackInfoElement&&this.trackInfoElement.remove(),this.playlistPanel&&this.playlistPanel.remove(),this.clear()}};function Q(e){if(!e||"object"!=typeof e||Array.isArray(e))return{};const t=Object.create(null);for(const[i,s]of Object.entries(e))g(i)||(t[i]=s);return t}function j(){document.querySelectorAll("[data-vidply]").forEach(e=>{const t=(e=>{const t=e.dataset.vidplyOptions;if(!t)return{};try{return Q(JSON.parse(t))}catch(e){return console.warn("[VidPly] Ignored malformed data-vidply-options:",e),{}}})(e),i=(e=>{const t=Object.create(null),i={signLanguageSrc:"signLanguageSrc",signLanguageButton:"signLanguageButton",signLanguagePosition:"signLanguagePosition",signLanguageDisplayMode:"signLanguageDisplayMode",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",floating:"floating",floatingPosition:"floatingPosition",floatingMinViewportWidth:"floatingMinViewportWidth",lazyInit:"lazyInit",lazyMargin:"lazyMargin",theme:"theme"};for(const[s,a]of Object.entries(i)){if(g(a))continue;const i=e[s];void 0!==i&&(t[a]="true"===i||"false"!==i&&(""===i||Number.isNaN(Number(i))?i:Number(i)))}const s=Object.create(null);for(const t of Object.keys(e))if(t.startsWith("signLanguageSrc")&&"signLanguageSrc"!==t){const i=t.match(/^signLanguageSrc([A-Z][a-z]*)$/);if(i&&i[1]){const a=i[1].toLowerCase(),n=e[t];void 0!==n&&(s[a]=n)}}if(Object.keys(s).length>0&&(t.signLanguageSources=s,e.signLanguageSrc&&!t.signLanguageSrc&&(t.signLanguageSrc=e.signLanguageSrc)),e.vidplyLanguageFiles)try{const i=JSON.parse(e.vidplyLanguageFiles);i&&"object"==typeof i&&!Array.isArray(i)&&(t.languageFiles=Q(i))}catch(e){console.warn("Invalid JSON in data-vidply-language-files:",e)}if(e.vidplyLanguageFile)try{const i=JSON.parse(e.vidplyLanguageFile);i&&"object"==typeof i&&!Array.isArray(i)&&(t.languageFiles=Q(i))}catch{e.vidplyLanguageFileCode&&e.vidplyLanguageFileUrl&&(t.languageFile=e.vidplyLanguageFileCode,t.languageFileUrl=e.vidplyLanguageFileUrl)}else e.vidplyLanguageFileCode&&e.vidplyLanguageFileUrl&&(t.languageFile=e.vidplyLanguageFileCode,t.languageFileUrl=e.vidplyLanguageFileUrl);return t})(e.dataset),s={...i,...t};"false"!==e.dataset.vidplyLazy&&!1!==s.lazyInit&&"IntersectionObserver"in window?x(e,s,e.dataset.vidplyLazyMargin||s.lazyMargin||"500px",(e,t)=>{new z(e,t)}):new z(e,s)})}"loading"===document.readyState?document.addEventListener("DOMContentLoaded",j):j();var X=z;export{z as Player,U as PlaylistManager,X as default};
6
+ import{TimeUtils as e}from"./vidply.chunk-VKHV4QHA.min.js";import{createIconElement as t,createPlayOverlay as i}from"./vidply.chunk-6OGHHIYP.min.js";import{focusElement as s}from"./vidply.chunk-XA4M574A.min.js";import{HTML5Renderer as a}from"./vidply.chunk-U5IRRYG5.min.js";import{CaptionManager as n}from"./vidply.chunk-GUPGMFUZ.min.js";import{StorageManager as r}from"./vidply.chunk-ZPTV4JEP.min.js";import{debounce as o,isMobile as l,rafWithTimeout as c,reducedMotionScrollOptions as u,throttle as h}from"./vidply.chunk-MWEBITCP.min.js";import{DOMUtils as p,i18n as d,isForbiddenKey as y}from"./vidply.chunk-QQZGV7TD.min.js";var g=class{events={};on(e,t){const i=this.events[e]??[];return i.push(t),this.events[e]=i,this}once(e,t){const i=(...s)=>{t(...s),this.off(e,i)};return this.on(e,i)}off(e,t){const i=this.events[e];return i?(t?this.events[e]=i.filter(e=>e!==t):delete this.events[e],this):this}emit(e,...t){const i=this.events[e];return i?(i.forEach(e=>{e(...t)}),this):this}removeAllListeners(){return this.events={},this}};async function m(e,t,i={}){if(!e||"VIDEO"!==e.tagName)return null;const{restoreState:s=!0,quality:a=.9,maxWidth:n,maxHeight:r}=i,o=!e.paused,l=e.currentTime,c=e.muted;return s&&(e.muted=!0),new Promise(i=>{const u=()=>{try{let t=e.videoWidth||640,u=e.videoHeight||360;if(n&&t>n){const e=n/t;t=n,u=Math.round(u*e)}if(r&&u>r){const e=r/u;u=r,t=Math.round(t*e)}const h=document.createElement("canvas");h.width=t,h.height=u;const p=h.getContext("2d");if(!p)return void i(null);p.drawImage(e,0,0,t,u);const d=h.toDataURL("image/jpeg",a);s&&(e.currentTime=l,e.muted=c,o&&!e.paused&&e.play().catch(e=>{"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] preview play() rejected:",e)})),i(d)}catch(t){"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] frame capture failed:",t),s&&(e.currentTime=l,e.muted=c,o&&!e.paused&&e.play().catch(e=>{"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] preview play() rejected:",e)})),i(null)}},h=()=>{e.removeEventListener("seeked",h),requestAnimationFrame(()=>{requestAnimationFrame(u)})};if(Math.abs(e.currentTime-t)<.1&&e.readyState>=2)u();else if(e.readyState>=1)e.addEventListener("seeked",h),e.currentTime=t;else{const i=()=>{e.removeEventListener("loadedmetadata",i),e.addEventListener("seeked",h),e.currentTime=t};e.addEventListener("loadedmetadata",i)}})}var f={"video/mp4":"MP4","video/webm":"WebM","video/ogg":"Ogg","video/quicktime":"MOV","video/x-matroska":"MKV","video/x-msvideo":"AVI","audio/mpeg":"MP3","audio/mp3":"MP3","audio/mp4":"M4A","audio/x-m4a":"M4A","audio/aac":"AAC","audio/ogg":"Ogg","audio/opus":"Opus","audio/wav":"WAV","audio/x-wav":"WAV","audio/wave":"WAV","audio/flac":"FLAC","audio/x-flac":"FLAC","audio/webm":"WebM"},v={mp4:"MP4",m4v:"MP4",mov:"MOV",webm:"WebM",mkv:"MKV",avi:"AVI",ogv:"Ogg",ogg:"Ogg",oga:"Ogg",mp3:"MP3",m4a:"M4A",aac:"AAC",opus:"Opus",wav:"WAV",flac:"FLAC"};function b(e){const{baseLabel:t,format:i,sizeBytes:s,locale:a="en"}=e,n=null!=s?((e,t="en")=>{if(!isFinite(e)||e<0)return null;const i=["B","KB","MB","GB","TB"];let s=e,a=0;for(;s>=1024&&a<i.length-1;)s/=1024,a++;const n=a<2?0:1;let r;try{r=new Intl.NumberFormat(t,{minimumFractionDigits:n,maximumFractionDigits:n}).format(s)}catch{r=s.toFixed(n)}return`${r} ${i[a]}`})(s,a):null;return i&&n?e.withFormatSizeTemplate.replace("{format}",i).replace("{size}",n):i?e.withFormatTemplate.replace("{format}",i):n?e.withSizeTemplate.replace("{size}",n):t}var w=new WeakMap;function k(e){let t=w.get(e);return t||(t={},w.set(e,t)),t}var P=class{player;_overflowMenuItemRef=null;controls;currentPreviewTime;element;hideTimeout;isDraggingProgress;isDraggingVolume;openMenu;openMenuButton;overflowResizeObserver=null;previewSupported=!1;previewThumbnailCache=new Map;previewThumbnailTimeout=null;previewUsingMainVideo=!1;previewVideo=null;previewVideoInitialized=!1;previewVideoReady=!1;rightButtons;overflowMenuButton=null;_activeVolumeTrack=null;_progressBarRect=null;constructor(e){this.player=e,this.controls={},this.hideTimeout=void 0,this.isDraggingProgress=!1,this.isDraggingVolume=!1,this.currentPreviewTime=null,this.openMenu=null,this.openMenuButton=null,this.init()}init(){this.createElement(),this.createControls(),this.updateDuration(),this.updateProgress(),this.attachEvents(),this.setupAutoHide(),this.setupOverflowDetection(),this.setupGlobalDragListeners()}setupGlobalDragListeners(){const e=this.player.lifecycleSignal;document.addEventListener("mousemove",e=>{if(this.isDraggingProgress&&this._progressBarRect){const t=this._progressBarRect,i=t.width>0?Math.max(0,Math.min(1,(e.clientX-t.left)/t.width)):0;return void this.player.seek(i*(this.player.state.duration||0))}if(this.isDraggingVolume&&this._activeVolumeTrack){const t=this._activeVolumeTrack.getBoundingClientRect(),i=Math.max(0,Math.min(1,1-(e.clientY-t.top)/t.height));this.player.setVolume(i)}},{signal:e}),document.addEventListener("mouseup",()=>{this.isDraggingProgress=!1,this._progressBarRect=null,this.isDraggingVolume=!1,this._activeVolumeTrack=null},{signal:e})}isTouchDevice(){return"ontouchstart"in window||navigator.maxTouchPoints>0||(navigator.msMaxTouchPoints??0)>0}positionMenu(e,t,i=!1){const s=l(),a=e.classList.contains(`${this.player.options.classPrefix}-overflow-menu-list`);if(this.player.state.fullscreen&&e.parentElement===this.player.container){const s=()=>{const i=t.getBoundingClientRect(),s=e.getBoundingClientRect(),n=this.player.container.getBoundingClientRect(),r=i.left+i.width/2-n.left,o=i.bottom-n.top,l=i.top-n.top;l>=s.height+20||l>n.bottom-i.bottom?(e.style.bottom=n.height-(i.top-n.top)+8+"px",e.style.top="auto",e.classList.remove("vidply-menu-below")):(e.style.top=`${o+8}px`,e.style.bottom="auto",e.classList.add("vidply-menu-below")),a?(e.style.right=n.width-(i.right-n.left)+"px",e.style.left="auto",e.style.transform="none"):(e.style.left=`${r}px`,e.style.right="auto",e.style.transform="translateX(-50%)")};return void(i?s():requestAnimationFrame(s))}if(s){const s=e.classList.contains(`${this.player.options.classPrefix}-volume-menu`),a=()=>{const i=t.parentElement;if(!i)return;const a=t.getBoundingClientRect(),n=i.getBoundingClientRect(),r=e.getBoundingClientRect(),o=window.innerWidth,l=window.innerHeight;if(s)return e.style.left=a.left+a.width/2-n.left+"px",e.style.right="auto",void(e.style.transform="translateX(-50%)");r.right>o&&(e.style.left="auto",e.style.right="10px",e.style.transform="none"),r.left<0&&(e.style.left="10px",e.style.right="auto",e.style.transform="none"),r.top<10&&(e.style.top="10px",e.style.bottom="auto"),r.bottom>l-10&&(e.style.bottom="10px",e.style.top="auto")};return void(i?a():requestAnimationFrame(a))}const n=()=>{const i=t.getBoundingClientRect(),s=e.getBoundingClientRect(),n=window.innerWidth,r=window.innerHeight,o=t.parentElement;if(!o)return;const l=o.getBoundingClientRect(),c=i.left+i.width/2-l.left,u=i.top;let h=i.top-l.top-s.height-8,p=null;u<s.height+20&&r-i.bottom>u?(h=null,p=l.bottom-l.top-(i.bottom-l.top)+8,e.classList.add("vidply-menu-below")):e.classList.remove("vidply-menu-below");let d="auto",y="auto",g="translateX(0)";if(a)d="auto",y=0,g="translateX(0)";else{d=c-s.width/2;const e=i.left+i.width/2-s.width/2;e<10?(d=0,g="translateX(0)"):e+s.width>n-10?(d="auto",y=0,g="translateX(0)"):(d=c,g="translateX(-50%)")}null!==h?(e.style.top=`${h}px`,e.style.bottom="auto"):null!==p&&(e.style.top="auto",e.style.bottom=`${p}px`),"auto"!==d?(e.style.left=`${d}px`,e.style.right="auto"):(e.style.left="auto",e.style.right=`${y}px`),e.style.transform=g};i?n():requestAnimationFrame(()=>{setTimeout(n,10)})}insertMenuIntoDOM(e,t){e.id||(e.id=`vidply-menu-${Math.random().toString(36).substr(2,9)}`),t.setAttribute("aria-controls",e.id),t.setAttribute("aria-haspopup","true"),this.player.state.fullscreen?(this.player.container.appendChild(e),e.dataset.triggerButton=t.getAttribute("aria-label")||"button"):t.insertAdjacentElement("afterend",e)}attachMenuCloseHandler(e,t,i=!1){if(this.openMenu&&this.openMenu!==e&&this.openMenuButton){const e=w.get(this.openMenuButton);e?.blur&&(this.openMenuButton.removeEventListener("blur",e.blur),delete e.blur),e?.mousedown&&(this.openMenuButton.removeEventListener("mousedown",e.mousedown),delete e.mousedown),this.openMenu&&document.contains(this.openMenu)?this.openMenu.remove():this.openMenu&&this.openMenu.parentNode&&this.openMenu.parentNode.removeChild(this.openMenu),this.openMenuButton&&this.openMenuButton.setAttribute("aria-expanded","false")}this.openMenu=e,this.openMenuButton=t,this.positionMenu(e,t),t&&t.setAttribute("aria-expanded","true");let s=!1,a=!0;const n=()=>{s=!0,a=!1,setTimeout(()=>{s=!1,a=!0},200)};t.addEventListener("mousedown",n),k(t).mousedown=n;const r=i=>{if(!a||s)return;if(this.openMenu!==e)return;const o=i.relatedTarget;requestAnimationFrame(()=>{setTimeout(()=>{if(!a||this.openMenu!==e)return;const i=document.activeElement;if(e.contains(i))return;const s=this.player.signLanguageWrapper,l=this.player.transcriptManager?.transcriptWindow;if(s&&s.contains(i)||l&&l.contains(i))return;const c=Array.from(this.element.querySelectorAll("button")),u=null!==i&&c.includes(i)&&i!==t,h=null!==o&&o instanceof Element&&c.includes(o)&&o!==t;if(u||h){if(this.openMenu!==e)return;e&&document.contains(e)?e.remove():e&&e.parentNode&&e.parentNode.removeChild(e),t&&t.setAttribute("aria-expanded","false"),this.openMenu===e&&(this.openMenu=null,this.openMenuButton=null),t.removeEventListener("blur",r),t.removeEventListener("mousedown",n);const i=w.get(t);i&&(delete i.blur,delete i.mousedown)}},10)})};t.addEventListener("blur",r),k(t).blur=r;const o=()=>{this.closeMenuAndReturnFocus(e,t)};let l=null,c=null;setTimeout(()=>{l=s=>{i&&e.contains(s.target)||this.openMenu!==e||e.contains(s.target)||t.contains(s.target)||(o(),l&&document.removeEventListener("click",l),c&&document.removeEventListener("keydown",c))},c=i=>{"Escape"===i.key&&this.openMenu===e&&(i.preventDefault(),i.stopPropagation(),this.closeMenuAndReturnFocus(e,t,!0),l&&document.removeEventListener("click",l),c&&document.removeEventListener("keydown",c))};const s=this.player.lifecycleSignal;document.addEventListener("click",l,{signal:s}),document.addEventListener("keydown",c,{signal:s})},100)}closeMenuAndReturnFocus(e,t,i=!0){e&&(document.contains(e)?e.remove():e.parentNode&&e.parentNode.removeChild(e)),t&&(t.setAttribute("aria-expanded","false"),e&&e.id&&t.removeAttribute("aria-controls"),i&&requestAnimationFrame(()=>{setTimeout(()=>{t&&document.contains(t)&&t.focus({preventScroll:!0})},0)})),this.openMenu===e&&(this.openMenu=null,this.openMenuButton=null)}closeOpenMenu(){this.openMenu&&this.openMenuButton&&(this.openMenu&&document.contains(this.openMenu)?this.openMenu.remove():this.openMenu&&this.openMenu.parentNode&&this.openMenu.parentNode.removeChild(this.openMenu),this.openMenuButton&&this.openMenuButton.setAttribute("aria-expanded","false"),this.openMenu=null,this.openMenuButton=null)}attachMenuKeyboardNavigation(e,t){const i=Array.from(e.querySelectorAll(`.${this.player.options.classPrefix}-menu-item`)).filter(e=>"true"!==e.getAttribute("aria-disabled"));0!==i.length&&e.addEventListener("keydown",a=>{const n=i.indexOf(document.activeElement);switch(a.key){case"ArrowDown":{a.preventDefault(),a.stopPropagation();const e=i[(n+1)%i.length];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(u("nearest")));break}case"ArrowUp":{a.preventDefault(),a.stopPropagation();const e=i[(n-1+i.length)%i.length];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(u("nearest")));break}case"ArrowLeft":case"ArrowRight":a.preventDefault(),a.stopPropagation();break;case"Home":{a.preventDefault(),a.stopPropagation();const e=i[0];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(u("nearest")));break}case"End":{a.preventDefault(),a.stopPropagation();const e=i[i.length-1];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(u("nearest")));break}case"Enter":case" ":a.preventDefault(),a.stopPropagation(),document.activeElement&&i.includes(document.activeElement)&&(document.activeElement.click(),s(t,{delay:0}));break;case"Escape":a.preventDefault(),a.stopPropagation(),this.closeMenuAndReturnFocus(e,t,!0)}})}createElement(){this.element=p.createElement("div",{className:`${this.player.options.classPrefix}-controls`,attributes:{role:"region","aria-label":d.t("player.label")+" controls"}})}createControls(){const e=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-time-wrapper`});this.player.options.progressBar&&(this.createProgressBar(),this.controls.progress&&e.appendChild(this.controls.progress)),(this.player.options.currentTime||this.player.options.duration)&&e.appendChild(this.createTimeDisplay()),this.element.appendChild(e);const t=p.createElement("div",{className:`${this.player.options.classPrefix}-controls-buttons`}),i=p.createElement("div",{className:`${this.player.options.classPrefix}-controls-left`});this.player.playlistManager&&i.appendChild(this.createPreviousButton()),this.player.options.playPauseButton&&i.appendChild(this.createPlayPauseButton()),i.appendChild(this.createRestartButton()),this.player.playlistManager&&i.appendChild(this.createNextButton()),this.player.playlistManager||i.appendChild(this.createRewindButton()),this.player.playlistManager||i.appendChild(this.createForwardButton()),this.player.options.volumeControl&&(this.isTouchDevice()?i.appendChild(this.createMuteButton()):i.appendChild(this.createVolumeControl())),this.rightButtons=p.createElement("div",{className:`${this.player.options.classPrefix}-controls-right`});const s=this.hasChapterTracks(),a=this.hasCaptionTracks(),n=this.hasQualityLevels(),r=this.hasAudioDescription();if(this.player.options.chaptersButton&&s){const e=this.createChaptersButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.captionsButton&&a){const e=this.createCaptionsButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.captionStyleButton&&a){const e=this.createCaptionStyleButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}const o=this.player.currentSource||this.player.element?.getAttribute?.("src")||this.player.element?.currentSrc||this.player.element?.src||this.player.element?.querySelector?.("source")?.getAttribute?.("src")||this.player.element?.querySelector?.("source")?.src||"",l="string"==typeof o&&o.includes(".m3u8"),c="string"==typeof o&&o.includes(".mpd"),u="video"===this.player.element?.tagName?.toLowerCase(),h=Boolean(this.player.options.hideSpeedForHls)&&l||Boolean(this.player.options.hideSpeedForHlsVideo)&&l&&u||Boolean(this.player.options.hideSpeedForDash)&&c||Boolean(this.player.options.hideSpeedForDashVideo)&&c&&u;if(this.player.options.speedButton&&!h){const e=this.createSpeedButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.audioDescriptionButton&&r){const e=this.createAudioDescriptionButton();e.dataset.overflowPriority="2",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.transcriptButton&&a){const e=this.createTranscriptButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.playlistManager&&!1!==this.player.options.playlistToggleButton){const e=this.createPlaylistToggleButton();e.dataset.overflowPriority="2",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}const d=this.hasSignLanguage(),y=this.player.options.signLanguageDisplayMode||"both";if(!1!==this.player.options.signLanguageButton&&d){if(["pip","both"].includes(y)){const e=this.createSignLanguageButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(["main","both"].includes(y)){const e=this.createSignLanguageInMainViewButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}}if(this.player.options.qualityButton&&n){const e=this.createQualityButton();e.dataset.overflowPriority="2",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.downloadButton){const e=this.player.options.downloadUrl||this.player.element?.dataset?.vidplyDownloadUrl;if(e){const t=this.createDownloadButton(e);t.dataset.overflowPriority="2",t.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(t)}}const g=this.player.options.pipButton&&(this.player.options.floating||"pictureInPictureEnabled"in document),m="audio"===this.player.element.tagName.toLowerCase();if(g&&(!this.player.options.floating||!m)){const e=this.createPipButton();this.player.options.floating?(e.dataset.skipOverflow="true",e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="1"):(e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3"),this.rightButtons.appendChild(e)}if(this.player.options.helpButton&&this.player.options.keyboard){const e=this.createHelpButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}this.overflowMenuButton=this.createOverflowMenuButton(),this.overflowMenuButton.style.display="none",this.rightButtons.appendChild(this.overflowMenuButton);const f="audio"===this.player.element.tagName.toLowerCase();if(this.player.options.fullscreenButton&&!f){const e=this.createFullscreenButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="1",this.rightButtons.appendChild(e)}t.appendChild(i),t.appendChild(this.rightButtons),this.element.appendChild(t),this.ensureButtonTooltips(t)}ensureButtonTooltips(e){e.querySelectorAll("button").forEach(e=>{if(e.querySelector(`.${this.player.options.classPrefix}-tooltip`))return;if(e.querySelector(`.${this.player.options.classPrefix}-button-text`))return;if("menuitem"===e.getAttribute("role")||e.classList.contains(`${this.player.options.classPrefix}-settings-item`)||e.classList.contains(`${this.player.options.classPrefix}-menu-item`)||e.classList.contains(`${this.player.options.classPrefix}-transcript-settings-item`)||e.classList.contains(`${this.player.options.classPrefix}-sign-language-settings-item`)||e.classList.contains(`${this.player.options.classPrefix}-popup-settings-item`))return;const t=e.getAttribute("aria-label");t&&p.attachTooltip(e,t,this.player.options.classPrefix)})}hasChapterTracks(){const e=this.player.element.textTracks;for(let t=0;t<e.length;t++)if("chapters"===e[t]?.kind)return!0;if(Array.from(this.player.element.querySelectorAll('track[kind="chapters"]')).length>0)return!0;const t=this.player.playlistManager?.getCurrentTrack?.();return!(!t?.tracks||!Array.isArray(t.tracks))&&t.tracks.some(e=>"chapters"===e?.kind)}hasCaptionTracks(){const e=this.player.element.textTracks;for(let t=0;t<e.length;t++){const i=e[t];if(i&&("captions"===i.kind||"subtitles"===i.kind)&&!i._vidplyStale)return!0}if(Array.from(this.player.element.querySelectorAll("track")).some(e=>"captions"===e.getAttribute("kind")||"subtitles"===e.getAttribute("kind")))return!0;const t=this.player.playlistManager?.getCurrentTrack?.();return!!(t?.tracks??[]).some(e=>"captions"===e?.kind||"subtitles"===e?.kind)}hasQualityLevels(){if(this.player.renderer&&this.player.renderer.getQualities){const e=this.player.renderer.getQualities();return e&&e.length>1}return!1}hasAudioDescription(){return!!(this.player.audioDescriptionSrc&&this.player.audioDescriptionSrc.length>0)||Array.from(this.player.element.textTracks||[]).some(e=>"descriptions"===e.kind)}hasSignLanguage(){const e=this.player.signLanguageSrc&&this.player.signLanguageSrc.length>0,t=this.player.signLanguageSources&&Object.keys(this.player.signLanguageSources).length>0;return e||t}createProgressBar(){const e=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-container`,attributes:{role:"slider","aria-label":d.t("player.progress"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":"0",tabindex:"0"}});this.controls.buffered=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-buffered`}),this.controls.played=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-played`}),this.controls.progressHandle=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-handle`}),this.controls.progressTooltip=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-tooltip`}),this.controls.progressPreview=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-preview`,attributes:{"aria-hidden":"true"}}),this.controls.progressTooltip.appendChild(this.controls.progressPreview),this.controls.progressTooltipTime=p.createElement("div",{className:`${this.player.options.classPrefix}-progress-tooltip-time`}),this.controls.progressTooltip.appendChild(this.controls.progressTooltipTime),e.appendChild(this.controls.buffered),e.appendChild(this.controls.played),this.controls.played.appendChild(this.controls.progressHandle),e.appendChild(this.controls.progressTooltip),this.controls.progress=e,this.initPreviewThumbnail(),this.setupProgressBarEvents()}initPreviewThumbnail(){this.previewThumbnailCache=new Map,this.previewVideo=null,this.currentPreviewTime=null,this.previewThumbnailTimeout=null,this.previewSupported=!1,this.previewVideoReady=!1,this.previewVideoInitialized=!1,this.previewUsingMainVideo=!1}ensurePreviewVideoInitialized(){if(this.previewVideoInitialized)return;if(!this.player?.state?.hasStartedPlayback)return;if(!1===this.player.options.thumbnailPreview)return this.previewSupported=!1,void(this.previewVideoInitialized=!0);const e=this.player.renderer,t=e&&e.media&&"VIDEO"===e.media.tagName;if(!t)return this.previewSupported=!1,void(this.previewVideoInitialized=!0);const i=!0===e.isStreaming||e.hls&&void 0!==e.hls.loadLevel||e.dash&&("function"==typeof e.dash.getQualityFor||"function"==typeof e.dash.getCurrentRepresentationForType||"function"==typeof e.dash.getRepresentationsByType||"function"==typeof e.dash.attachSource),s=t&&e.media===this.player.element&&!i&&"function"==typeof e.seek;if(i)return this.previewVideo=null,this.previewVideoReady=!1,this.previewSupported=!1,this.previewUsingMainVideo=!1,this.previewVideoInitialized=!0,void this.player.log("Preview thumbnails disabled for streaming sources","info");if(this.previewSupported=s&&t,!this.previewSupported)return void(this.previewVideoInitialized=!0);const a=e.media||this.player.element;let n=null;if(a.src)n=a.src;else{const e=a.querySelector("source");e&&(n=e.src)}if(!n)return this.player.log("No video source found for preview","warn"),this.previewSupported=!1,void(this.previewVideoInitialized=!0);this.previewVideo=document.createElement("video"),this.previewVideo.muted=!0,this.previewVideo.preload="auto",this.previewVideo.playsInline=!0,this.previewVideo.style.position="absolute",this.previewVideo.style.visibility="hidden",this.previewVideo.style.width="1px",this.previewVideo.style.height="1px",this.previewVideo.style.top="-9999px",a.crossOrigin&&(this.previewVideo.crossOrigin=a.crossOrigin),this.previewVideo.addEventListener("error",e=>{this.player.log("Preview video failed to load:",e,"warn"),this.previewSupported=!1}),this.previewVideo.addEventListener("loadedmetadata",()=>{this.previewVideoReady=!0,this.player.options.thumbnailPregenerate&&this.pregenerateThumbnails()},{once:!0}),this.player.container&&this.player.container.appendChild(this.previewVideo),this.previewVideo.src=n,this.previewVideoReady=!1,this.previewUsingMainVideo=!1,this.previewVideoInitialized=!0}pregenerateThumbnails(){if(!this.previewSupported||!this.previewVideo)return;if(!window.requestIdleCallback)return;const e=this.player.state.duration;if(!e||e<=0)return;const t=this.player.options.thumbnailInterval||10,i=[];for(let s=0;s<e;s+=t){const e=Math.floor(s);this.previewThumbnailCache.has(e)||i.push(s)}if(0===i.length)return;this.player.log(`Pre-generating ${i.length} thumbnails`,"debug");const s=e=>{for(;e.timeRemaining()>50&&i.length>0;){const e=i.shift();if(void 0===e)break;this.generatePreviewThumbnail(e).catch(()=>{})}i.length>0&&this.previewSupported&&requestIdleCallback(s,{timeout:5e3})};requestIdleCallback(s,{timeout:5e3})}async generatePreviewThumbnail(e){if(!this.previewSupported||!this.previewVideo)return null;const t=this.previewVideo;this.previewVideoReady||(t.readyState<2?await new Promise((e,i)=>{const s=setTimeout(()=>{i(new Error("Preview video data load timeout"))},1e4),a=()=>{clearTimeout(s),t.removeEventListener("loadeddata",n),t.removeEventListener("canplay",n),t.removeEventListener("error",r)},n=()=>{t.readyState>=2&&(a(),this.previewVideoReady=!0,e())},r=()=>{a(),i(new Error("Preview video failed to load"))};t.readyState>=1&&t.addEventListener("loadeddata",n),t.addEventListener("canplay",n),t.addEventListener("error",r),t.readyState>=2&&n()}).catch(()=>(this.previewSupported=!1,null)):this.previewVideoReady=!0);const i=Math.floor(e);if(this.previewThumbnailCache.has(i))return this.previewThumbnailCache.get(i);const s=this.previewUsingMainVideo,a=this.player.options.thumbnailQuality||.8,n=this.player.options.thumbnailWidth||160,r=this.player.options.thumbnailHeight||90,o=await m(t,e,{restoreState:s,quality:a,maxWidth:n,maxHeight:r});if(o){if(this.previewThumbnailCache.size>=(this.player.options.thumbnailCacheSize||50)){const e=this.previewThumbnailCache.keys().next().value;void 0!==e&&this.previewThumbnailCache.delete(e)}this.previewThumbnailCache.set(i,o)}return o}async updatePreviewThumbnail(e){this.previewSupported&&this.controls.progressPreview&&(this.previewThumbnailTimeout&&clearTimeout(this.previewThumbnailTimeout),this.previewThumbnailTimeout=setTimeout(async()=>{try{const t=await this.generatePreviewThumbnail(e);t&&this.controls.progressPreview?(this.controls.progressPreview.style.backgroundImage=`url("${t}")`,this.controls.progressPreview.style.display="block",this.controls.progressPreview.style.backgroundRepeat="no-repeat",this.controls.progressPreview.style.backgroundPosition="center"):this.controls.progressPreview&&(this.controls.progressPreview.style.display="none"),this.currentPreviewTime=e}catch(e){this.player.log("Preview thumbnail update failed:",e,"warn"),this.controls.progressPreview&&(this.controls.progressPreview.style.display="none")}},100))}setupProgressBarEvents(){const t=this.controls.progress;if(!t)return;const i=e=>{const i=t.getBoundingClientRect(),s=i.width>0?Math.max(0,Math.min(1,(e-i.left)/i.width)):0;return{percent:s,time:s*(this.player.state.duration||0)}};t.addEventListener("mousedown",e=>{this.isDraggingProgress=!0,this._progressBarRect=t.getBoundingClientRect();const{time:s}=i(e.clientX);this.player.seek(s)}),t.addEventListener("mousemove",s=>{if(!this.isDraggingProgress){const{time:a}=i(s.clientX),n=t.getBoundingClientRect(),r=s.clientX-n.left,o=this.controls.progressTooltip,l=this.controls.progressTooltipTime;if(o&&l&&(l.textContent=e.formatTime(a),o.style.left=`${r}px`,o.style.display="block"),!this.player?.state?.hasStartedPlayback)return void(this.controls.progressPreview&&(this.controls.progressPreview.style.display="none"));this.ensurePreviewVideoInitialized(),this.previewSupported?this.updatePreviewThumbnail(a):this.controls.progressPreview&&(this.controls.progressPreview.style.display="none")}}),t.addEventListener("mouseleave",()=>{this.controls.progressTooltip&&(this.controls.progressTooltip.style.display="none"),this.previewThumbnailTimeout&&clearTimeout(this.previewThumbnailTimeout)}),t.addEventListener("keydown",e=>{const t=this.player.options.seekInterval||5,i=this.player.options.seekIntervalLarge||30,s=Number(this.player.state.duration);switch(e.key){case"ArrowLeft":e.preventDefault(),this.player.seekBackward(t);break;case"ArrowRight":e.preventDefault(),this.player.seekForward(t);break;case"PageUp":e.preventDefault(),this.player.seekForward(i);break;case"PageDown":e.preventDefault(),this.player.seekBackward(i);break;case"Home":e.preventDefault(),this.player.seek(0);break;case"End":e.preventDefault(),Number.isFinite(s)&&s>0&&this.player.seek(Math.max(0,s-.1))}}),t.addEventListener("touchstart",e=>{this.isDraggingProgress=!0;const t=e.touches[0];if(!t)return;const{time:s}=i(t.clientX);this.player.seek(s)}),t.addEventListener("touchmove",e=>{if(this.isDraggingProgress){e.preventDefault();const t=e.touches[0];if(!t)return;const{time:s}=i(t.clientX);this.player.seek(s)}}),t.addEventListener("touchend",()=>{this.isDraggingProgress=!1})}createPlayPauseButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-play-pause`,attributes:{type:"button","aria-label":d.t("player.play")}});return e.appendChild(t("play")),e.addEventListener("click",()=>{this.player.toggle()}),this.controls.playPause=e,e}createRestartButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-restart`,attributes:{type:"button","aria-label":d.t("player.restart")}});return e.appendChild(t("restart")),e.addEventListener("click",()=>{this.player.seek(0),this.player.play()}),e}createPreviousButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-previous`,attributes:{type:"button","aria-label":d.t("player.previous")}});e.appendChild(t("skipPrevious")),e.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.previous()});const i=()=>{this.player.playlistManager&&(e.disabled=!this.player.playlistManager.hasPrevious()&&!this.player.playlistManager.options.loop)};return this.player.on("playlisttrackchange",i),i(),this.controls.previous=e,e}createNextButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-next`,attributes:{type:"button","aria-label":d.t("player.next")}});e.appendChild(t("skipNext")),e.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.next()});const i=()=>{this.player.playlistManager&&(e.disabled=!this.player.playlistManager.hasNext()&&!this.player.playlistManager.options.loop)};return this.player.on("playlisttrackchange",i),i(),this.controls.next=e,e}createPlaylistToggleButton(){const e=this.player.playlistManager?`${this.player.playlistManager.uniqueId}-panel`:"vidply-playlist-panel",i=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-playlist-toggle`,attributes:{type:"button","aria-label":d.t("player.playlist"),"aria-expanded":"false","aria-pressed":"false","aria-controls":e}});return i.appendChild(t("playlist")),i.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.togglePanel()}),this.controls.playlistToggle=i,i}createRewindButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-rewind`,attributes:{type:"button","aria-label":d.t("player.rewindSeconds",{seconds:15})}});return e.appendChild(t("rewind")),e.addEventListener("click",()=>{this.player.seekBackward(15)}),e}createForwardButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-forward`,attributes:{type:"button","aria-label":d.t("player.forwardSeconds",{seconds:15})}});return e.appendChild(t("forward")),e.addEventListener("click",()=>{this.player.seekForward(15)}),e}createMuteButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":d.t("player.mute")}});return e.appendChild(t("volumeHigh")),e.addEventListener("click",()=>{this.player.toggleMute()}),this.controls.mute=e,e}createVolumeControl(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":d.t("player.volume"),"aria-expanded":"false"}});return e.appendChild(t("volumeHigh")),e.addEventListener("contextmenu",e=>{e.preventDefault(),this.player.toggleMute()}),e.addEventListener("click",()=>{this.showVolumeSlider(e)}),this.controls.mute=e,e}showVolumeSlider(e){const t=document.querySelector(`.${this.player.options.classPrefix}-volume-menu`);if(t)return t.remove(),void e.setAttribute("aria-expanded","false");const i=p.createElement("div",{className:`${this.player.options.classPrefix}-volume-menu ${this.player.options.classPrefix}-menu`}),a=Math.round(100*this.player.state.volume),n=p.createElement("div",{className:`${this.player.options.classPrefix}-volume-slider`,attributes:{role:"slider","aria-label":d.t("player.volume"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":String(a),"aria-valuetext":this.player.state.muted?d.t("player.muted"):d.t("player.volumePercent",{percent:a}),tabindex:"0"}}),r=p.createElement("div",{className:`${this.player.options.classPrefix}-volume-track`}),o=p.createElement("div",{className:`${this.player.options.classPrefix}-volume-fill`});o.style.height=100*this.player.state.volume+"%";const l=p.createElement("div",{className:`${this.player.options.classPrefix}-volume-handle`});r.appendChild(o),o.appendChild(l),n.appendChild(r),i.appendChild(n);const c=e=>{const t=r.getBoundingClientRect(),i=Math.max(0,Math.min(1,1-(e-t.top)/t.height));this.player.setVolume(i)};n.addEventListener("mousedown",e=>{e.stopPropagation(),e.preventDefault(),this.isDraggingVolume=!0,this._activeVolumeTrack=r,c(e.clientY)}),n.addEventListener("touchstart",e=>{e.stopPropagation(),e.preventDefault(),this.isDraggingVolume=!0,this._activeVolumeTrack=r;const t=e.touches[0];t&&c(t.clientY)},{passive:!1}),n.addEventListener("touchmove",e=>{if(this.isDraggingVolume){e.preventDefault();const t=e.touches[0];if(!t)return;c(t.clientY)}},{passive:!1}),n.addEventListener("touchend",e=>{e.stopPropagation(),e.preventDefault(),this.isDraggingVolume=!1,this._activeVolumeTrack=null},{passive:!1}),n.addEventListener("touchcancel",()=>{this.isDraggingVolume=!1,this._activeVolumeTrack=null}),n.addEventListener("keydown",t=>{"ArrowUp"===t.key?(t.preventDefault(),this.player.setVolume(Math.min(1,this.player.state.volume+.1))):"ArrowDown"===t.key?(t.preventDefault(),this.player.setVolume(Math.max(0,this.player.state.volume-.1))):"Escape"===t.key&&(t.preventDefault(),t.stopPropagation(),this.closeMenuAndReturnFocus(i,e,!0))}),i.addEventListener("click",e=>{e.stopPropagation()}),i.addEventListener("touchstart",e=>{e.stopPropagation()}),i.addEventListener("touchmove",e=>{e.stopPropagation()}),i.addEventListener("touchend",e=>{e.stopPropagation()}),i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.controls.volumeSlider=n,this.controls.volumeFill=o,s(n,{delay:50}),this.attachMenuCloseHandler(i,e,!0)}createTimeDisplay(){const e=p.createElement("div",{className:`${this.player.options.classPrefix}-time`,attributes:{role:"group","aria-label":d.t("time.display")}});this.controls.currentTimeDisplay=p.createElement("span",{className:`${this.player.options.classPrefix}-current-time`});const t=p.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}}),i=p.createElement("span",{className:"vidply-sr-only",textContent:d.t("time.seconds",{count:0})});this.controls.currentTimeDisplay.appendChild(t),this.controls.currentTimeDisplay.appendChild(i),this.controls.currentTimeVisual=t,this.controls.currentTimeAccessible=i;const s=p.createElement("span",{textContent:" / ",attributes:{"aria-hidden":"true"}});this.controls.durationDisplay=p.createElement("span",{className:`${this.player.options.classPrefix}-duration`});const a=p.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}}),n=p.createElement("span",{className:"vidply-sr-only",textContent:d.t("time.durationPrefix")+d.t("time.seconds",{count:0})});return this.controls.durationDisplay.appendChild(a),this.controls.durationDisplay.appendChild(n),this.controls.durationVisual=a,this.controls.durationAccessible=n,e.appendChild(this.controls.currentTimeDisplay),e.appendChild(s),e.appendChild(this.controls.durationDisplay),e}createChaptersButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-chapters`,attributes:{type:"button","aria-label":d.t("player.chapters"),"aria-expanded":"false"}});return e.appendChild(t("chapters")),e.addEventListener("click",()=>{this.showChaptersMenu(e)}),this.controls.chapters=e,e}showChaptersMenu(t){const i=document.querySelector(`.${this.player.options.classPrefix}-chapters-menu`);if(i)return i.remove(),t.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=p.createElement("div",{className:`${this.player.options.classPrefix}-chapters-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":d.t("player.chapters")}}),a=Array.from(this.player.element.textTracks).filter(e=>"chapters"===e.kind);if(0===a.length){const e=p.createElement("div",{className:`${this.player.options.classPrefix}-menu-item ${this.player.options.classPrefix}-menu-item-disabled`,textContent:d.t("player.noChapters"),attributes:{role:"menuitem","aria-disabled":"true",tabindex:"-1"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(e)}else if(a[0]){const i=a[0];if("disabled"===i.mode&&(i.mode="hidden"),i.cues&&0!==i.cues.length){const a=i.cues;for(let i=0;i<a.length;i++){const n=a[i],r=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),o=p.createElement("span",{className:`${this.player.options.classPrefix}-chapter-time`,textContent:e.formatTime(n.startTime),attributes:{"aria-label":e.formatDuration(n.startTime)}}),l=p.createElement("span",{className:`${this.player.options.classPrefix}-chapter-title`,textContent:n.text});r.appendChild(o),r.appendChild(document.createTextNode(" ")),r.appendChild(l),r.addEventListener("click",()=>{this.player.seek(n.startTime),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(r)}this.attachMenuKeyboardNavigation(s,t),setTimeout(()=>{const e=s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&e.focus({preventScroll:!0})},0)}else{const e=p.createElement("div",{className:`${this.player.options.classPrefix}-menu-item ${this.player.options.classPrefix}-menu-item-disabled`,textContent:d.t("player.loadingChapters"),attributes:{role:"menuitem","aria-disabled":"true",tabindex:"-1"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(e),i.addEventListener("load",()=>{s.remove(),this.showChaptersMenu(t)},{once:!0}),setTimeout(()=>{i.cues&&i.cues.length>0&&document.contains(s)&&(s.remove(),this.showChaptersMenu(t))},500)}}s.style.visibility="hidden",s.style.display="block",this.insertMenuIntoDOM(s,t),this.positionMenu(s,t,!0),requestAnimationFrame(()=>{s.style.visibility="visible"}),this.attachMenuCloseHandler(s,t)}createQualityButton(){const e=d.t("player.quality"),i=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-quality`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}});i.appendChild(t("hd")),p.attachTooltip(i,e,this.player.options.classPrefix);const s=p.createElement("span",{className:`${this.player.options.classPrefix}-quality-text`,textContent:""});return i.appendChild(s),i.addEventListener("click",()=>{this.showQualityMenu(i)}),this.controls.quality=i,this.controls.qualityText=s,setTimeout(()=>this.updateQualityIndicator(),500),i}showQualityMenu(e){const i=document.querySelector(`.${this.player.options.classPrefix}-quality-menu`);if(i)return i.remove(),e.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=p.createElement("div",{className:`${this.player.options.classPrefix}-quality-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":d.t("player.quality")}});if(this.player.renderer&&this.player.renderer.getQualities){const i=this.player.renderer.getQualities(),a=this.player.renderer.getCurrentQuality?this.player.renderer.getCurrentQuality():-1,n="function"==typeof this.player.renderer.supportsAutoQuality&&this.player.renderer.supportsAutoQuality();if(0===i.length){const e=p.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:d.t("player.autoQuality"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(e)}else{let r=null;if(n){const i=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:d.t("player.auto"),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});"function"==typeof this.player.renderer.isAutoQuality&&this.player.renderer.isAutoQuality()&&(i.classList.add(`${this.player.options.classPrefix}-menu-item-active`),i.appendChild(t("check")),r=i),i.addEventListener("click",()=>{this.player.renderer?.switchQuality&&this.player.renderer.switchQuality(-1),this.closeMenuAndReturnFocus(s,e)}),s.appendChild(i)}i.forEach(i=>{const n=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:i.name||`${i.height}p`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}});i.index===a&&(n.classList.add(`${this.player.options.classPrefix}-menu-item-active`),n.appendChild(t("check")),r=n),n.addEventListener("click",()=>{this.player.renderer?.switchQuality&&void 0!==i.index&&this.player.renderer.switchQuality(i.index),this.closeMenuAndReturnFocus(s,e)}),s.appendChild(n)}),this.attachMenuKeyboardNavigation(s,e),setTimeout(()=>{const e=r||s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&e.focus({preventScroll:!0})},0)}}else{const e=p.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:d.t("player.noQuality"),style:{opacity:"0.5",cursor:"default"}});s.appendChild(e)}s.style.visibility="hidden",s.style.display="block",this.insertMenuIntoDOM(s,e),this.positionMenu(s,e,!0),requestAnimationFrame(()=>{s.style.visibility="visible"}),this.attachMenuCloseHandler(s,e)}createCaptionStyleButton(){const e=d.t("player.captionStyling"),t=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-caption-style`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}}),i=p.createElement("span",{textContent:"Aa",style:{fontSize:"14px",fontWeight:"bold"}});return t.appendChild(i),p.attachTooltip(t,e,this.player.options.classPrefix),t.addEventListener("click",()=>{this.showCaptionStyleMenu(t)}),this.controls.captionStyle=t,t}showCaptionStyleMenu(e){import("./vidply.CaptionStyleMenu-JTWSNHRQ.min.js").then(({showCaptionStyleMenu:t})=>t(this,e)).catch(e=>this.player.log("Failed to load caption style menu:",e,"error"))}createSpeedButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-speed`,attributes:{type:"button","aria-label":d.t("player.speed"),"aria-expanded":"false"}});e.appendChild(t("speed"));const i=p.createElement("span",{className:`${this.player.options.classPrefix}-speed-text`,textContent:"1x"});return e.appendChild(i),e.addEventListener("click",()=>{this.showSpeedMenu(e)}),this.controls.speed=e,this.controls.speedText=i,e}formatSpeedLabel(e){return 1===e?d.t("speeds.normal"):`${e.toLocaleString(d.getLanguage(),{minimumFractionDigits:0,maximumFractionDigits:2})}×`}showSpeedMenu(e){const i=document.querySelector(`.${this.player.options.classPrefix}-speed-menu`);if(i)return i.remove(),e.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=p.createElement("div",{className:`${this.player.options.classPrefix}-speed-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu"}});let a=null;[.25,.5,.75,1,1.25,1.5,1.75,2].forEach(i=>{const n=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:this.formatSpeedLabel(i),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});i===this.player.state.playbackSpeed&&(n.classList.add(`${this.player.options.classPrefix}-menu-item-active`),n.appendChild(t("check")),a=n),n.addEventListener("click",()=>{this.player.setPlaybackSpeed(i),this.closeMenuAndReturnFocus(s,e)}),s.appendChild(n)}),s.style.visibility="hidden",s.style.display="block",this.insertMenuIntoDOM(s,e),this.positionMenu(s,e,!0),requestAnimationFrame(()=>{s.style.visibility="visible"}),this.attachMenuKeyboardNavigation(s,e),this.attachMenuCloseHandler(s,e),setTimeout(()=>{const e=a||s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&e.focus({preventScroll:!0})},0)}createCaptionsButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-captions-button`,attributes:{type:"button","aria-label":d.t("player.captions"),"aria-expanded":"false"}});return e.appendChild(t("captionsOff")),e.addEventListener("click",()=>{this.showCaptionsMenu(e)}),this.controls.captions=e,e}showCaptionsMenu(e){const i=document.querySelector(`.${this.player.options.classPrefix}-captions-menu`);if(i)return i.remove(),e.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=p.createElement("div",{className:`${this.player.options.classPrefix}-captions-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":d.t("captions.select")}});if(!this.player.captionManager||0===this.player.captionManager.tracks.length){const t=p.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:d.t("player.noCaptions"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});return s.appendChild(t),this.insertMenuIntoDOM(s,e),void this.attachMenuCloseHandler(s,e)}let a=null;const n=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:d.t("captions.off"),attributes:{type:"button",role:"menuitem",tabindex:"-1"}});this.player.state.captionsEnabled||(n.classList.add(`${this.player.options.classPrefix}-menu-item-active`),n.appendChild(t("check")),a=n),n.addEventListener("click",()=>{this.player.disableCaptions(),this.updateCaptionsButton(),this.closeMenuAndReturnFocus(s,e)}),s.appendChild(n),this.player.captionManager.getAvailableTracks().forEach(i=>{const n=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:i.label,attributes:{type:"button",role:"menuitem",lang:i.language,tabindex:"-1"}}),r=this.player.captionManager;r&&this.player.state.captionsEnabled&&r.currentTrack===r.tracks[i.index]&&(n.classList.add(`${this.player.options.classPrefix}-menu-item-active`),n.appendChild(t("check")),a=n),n.addEventListener("click",()=>{this.player.captionManager?.switchTrack(i.index),this.updateCaptionsButton(),this.closeMenuAndReturnFocus(s,e)}),s.appendChild(n)}),this.insertMenuIntoDOM(s,e),this.attachMenuKeyboardNavigation(s,e),this.attachMenuCloseHandler(s,e),setTimeout(()=>{const e=a||s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&e.focus({preventScroll:!0})},0)}updateCaptionsButton(){if(!this.controls.captions)return;const e=this.controls.captions.querySelector(".vidply-icon");e&&(e.innerHTML=this.player.state.captionsEnabled?t("captions").innerHTML:t("captionsOff").innerHTML)}createTranscriptButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-transcript`,attributes:{type:"button","aria-label":d.t("player.transcript"),"aria-expanded":"false"}});return e.appendChild(t("transcript")),e.addEventListener("click",async()=>{await this.player.toggleTranscript(),this.updateTranscriptButton()}),this.controls.transcript=e,e}updateTranscriptButton(){this.controls.transcript&&this.controls.transcript.setAttribute("aria-expanded",this.player.transcriptManager&&this.player.transcriptManager.isVisible?"true":"false")}createHelpButton(){const e=d.t("help.button"),i=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-help`,attributes:{type:"button","aria-label":e,"aria-haspopup":"dialog"}});return i.appendChild(t("help")),p.attachTooltip(i,e,this.player.options.classPrefix),i.addEventListener("click",()=>{this.player.toggleKeyboardHelp()}),this.controls.help=i,i}createAudioDescriptionButton(){const e=d.t("player.audioDescription"),i=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-audio-description`,attributes:{type:"button","aria-label":e,role:"switch","aria-checked":"false"}});return i.appendChild(t("audioDescription")),p.attachTooltip(i,e,this.player.options.classPrefix),i.addEventListener("click",async()=>{await this.player.toggleAudioDescription(),this.updateAudioDescriptionButton()}),this.controls.audioDescription=i,i}updateAudioDescriptionButton(){if(!this.controls.audioDescription)return;const e=this.controls.audioDescription.querySelector(".vidply-icon"),i=this.player.state.audioDescriptionEnabled;e&&(e.innerHTML=i?t("audioDescriptionOn").innerHTML:t("audioDescription").innerHTML),this.controls.audioDescription.setAttribute("aria-checked",i?"true":"false")}createSignLanguageButton(){const e=d.t("player.signLanguage"),i=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-sign-language`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}});return i.appendChild(t("signLanguagePip")),p.attachTooltip(i,e,this.player.options.classPrefix),i.addEventListener("click",()=>{this.player.toggleSignLanguage(),this.updateSignLanguageButton()}),this.controls.signLanguage=i,i}updateSignLanguageButton(){if(!this.controls.signLanguage)return;const e=this.controls.signLanguage.querySelector(".vidply-icon"),i=this.player.state.signLanguageEnabled;e&&(e.innerHTML=i?t("signLanguagePipOn").innerHTML:t("signLanguagePip").innerHTML),this.controls.signLanguage.setAttribute("aria-expanded",i?"true":"false"),this.controls.signLanguage.setAttribute("aria-label",d.t(i?"signLanguage.hide":"signLanguage.show"))}createSignLanguageInMainViewButton(){const e=d.t("signLanguage.showInMainView"),i=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-sign-language-main-view`,attributes:{type:"button","aria-label":e,"aria-pressed":"false"}});return i.appendChild(t("signLanguage")),p.attachTooltip(i,e,this.player.options.classPrefix),i.addEventListener("click",()=>{this.player.signLanguageManager&&this.player.signLanguageManager.toggleInMainView()}),this.controls.signLanguageMainView=i,i}updateSignLanguageInMainViewButton(){const e=this.controls.signLanguageMainView;if(!e)return;const i=this.player.state.signLanguageInMainView,s=d.t(i?"signLanguage.hideInMainView":"signLanguage.showInMainView"),a=i?"signLanguageOn":"signLanguage",n=e.querySelector(".vidply-icon");n&&(n.innerHTML=t(a).innerHTML),e.setAttribute("aria-pressed",String(i)),e.setAttribute("aria-label",s);const r=e.querySelector(`.${this.player.options.classPrefix}-tooltip`);r&&(r.textContent=s)}updateAccessibilityButtons(){const e=this.hasAudioDescription(),t=this.hasSignLanguage();if(e){if(!this.controls.audioDescription&&!1!==this.player.options.audioDescriptionButton){const e=this.createAudioDescriptionButton();e.dataset.overflowPriority="2",e.dataset.overflowPriorityMobile="3";const t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-transcript`),i=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-playlist-toggle`),s=t||i||null;s?this.rightButtons.insertBefore(e,s):this.rightButtons.appendChild(e),this.checkOverflow()}this.controls.audioDescription&&(this.controls.audioDescription.style.display="")}else this.controls.audioDescription&&(this.controls.audioDescription.style.display="none");const i=t&&!1!==this.player.options.signLanguageButton,s=this.player.options.classPrefix,a=this.player.options.signLanguageDisplayMode||"both",n=["pip","both"].includes(a),r=["main","both"].includes(a);if(i){const e=this.rightButtons.querySelector(`.${s}-quality`),t=this.rightButtons.querySelector(`.${s}-fullscreen`),i=e||t||null;let a=!1;if(n&&!this.controls.signLanguage){const e=this.createSignLanguageButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",i?this.rightButtons.insertBefore(e,i):this.rightButtons.appendChild(e),a=!0}if(r&&!this.controls.signLanguageMainView){const e=this.createSignLanguageInMainViewButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3";const t=this.controls.signLanguage?.nextSibling;t?this.rightButtons.insertBefore(e,t):i?this.rightButtons.insertBefore(e,i):this.rightButtons.appendChild(e),a=!0}a&&this.checkOverflow(),this.controls.signLanguage&&(this.controls.signLanguage.style.display=n?"":"none"),this.controls.signLanguageMainView&&(this.controls.signLanguageMainView.style.display=r?"":"none")}else this.controls.signLanguage&&(this.controls.signLanguage.style.display="none"),this.controls.signLanguageMainView&&(this.controls.signLanguageMainView.style.display="none")}createSettingsButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-settings`,attributes:{type:"button","aria-label":d.t("player.settings")}});return e.appendChild(t("settings")),e.addEventListener("click",()=>{this.player.showSettings()}),e}createPipButton(){const e=!0===this.player.options.floating,i=this.player.options.classPrefix,s=p.createElement("button",{className:e?`${i}-button ${i}-pip ${i}-pip-floating`:`${i}-button ${i}-pip`,attributes:{type:"button","aria-label":d.t(e?"player.floatingPlayer":"player.pip"),"aria-pressed":"false"}});return s.appendChild(t("pip")),s.addEventListener("click",()=>{e?this.player.floatingPlayerManager&&this.player.floatingPlayerManager.togglePinned(s):this.player.togglePiP()}),e&&this.player.on("floatingchange",e=>{s.setAttribute("aria-pressed","pinned"===e?"true":"false"),s.classList.toggle(`${this.player.options.classPrefix}-pip-active`,Boolean(e))}),s}createDownloadButton(e){const i=this.player.element?.dataset||{},s=this.resolveDownloadFormat(e),a=this.resolveInitialDownloadSize(),n=d.t("player.download"),r=b({baseLabel:n,format:s,sizeBytes:a,locale:d.getLanguage(),withFormatSizeTemplate:d.t("player.downloadWithFormatSize"),withFormatTemplate:d.t("player.downloadWithFormat"),withSizeTemplate:d.t("player.downloadWithSize")}),o=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-download`,attributes:{type:"button","aria-label":r}});return s&&(o.dataset.vidplyDownloadFormat=s),null!=a&&(o.dataset.vidplyDownloadSize=String(a)),o.appendChild(t("download")),o.addEventListener("click",()=>{const t=this.player.options.downloadUrl||i.vidplyDownloadUrl||e;if(!t)return;const s=document.createElement("a");s.href=t,s.download=t.split("/").pop()?.split("?")[0]||"download",s.rel="noopener",s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)}),!1!==this.player.options.downloadFetchSize&&null==a&&(async(e,t={})=>{if(!e||"function"!=typeof fetch)return null;const i=[];let s;if(t.signal&&i.push(t.signal),"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&i.push(AbortSignal.timeout(t.timeoutMs??8e3)),1===i.length)s=i[0];else if(i.length>1){const e=AbortSignal.any;s=e?e(i):i[0]}try{const t=await fetch(e,{method:"HEAD",credentials:"omit",cache:"no-store",signal:s});if(!t.ok)return null;const i=t.headers.get("Content-Length");if(!i)return null;const a=Number(i);return Number.isFinite(a)&&a>0?a:null}catch(e){return"undefined"!=typeof console&&console.debug&&console.debug("[vidply] HEAD request for download size failed:",e),null}})(e).then(e=>{if(null==e)return;const t=b({baseLabel:n,format:s,sizeBytes:e,locale:d.getLanguage(),withFormatSizeTemplate:d.t("player.downloadWithFormatSize"),withFormatTemplate:d.t("player.downloadWithFormat"),withSizeTemplate:d.t("player.downloadWithSize")});o.dataset.vidplyDownloadSize=String(e),this.updateDownloadButtonLabel(o,t)}),o}resolveDownloadFormat(e){const t=this.player.options.downloadFormat||(this.player.element?.dataset||{}).vidplyDownloadFormat||null;if(t)return t;const i=this.player.element?.querySelectorAll?Array.from(this.player.element.querySelectorAll("source")):[],s=i.find(t=>(t.getAttribute("src")||t.src||"")===e)||i[0];if(s){const e=(e=>{if(!e)return null;const t=(e.split(";")[0]??"").trim().toLowerCase();return f[t]||null})(s.getAttribute("type"));if(e)return e}return(e=>{if(!e)return null;try{const t=(e.split("?")[0]?.split("#")[0]??"").split("/").pop()||"",i=t.lastIndexOf(".");if(i<0||i===t.length-1)return null;const s=t.slice(i+1).toLowerCase();return v[s]||null}catch{return null}})(e)}resolveInitialDownloadSize(){const e=this.player.element?.dataset||{},t=this.player.options.downloadFileSize;if("number"==typeof t&&Number.isFinite(t)&&t>0)return t;const i=e.vidplyDownloadSize;if(i){const e=Number(i);if(Number.isFinite(e)&&e>0)return e}return null}updateDownloadButtonLabel(e,t){if(!e||!t)return;e.setAttribute("aria-label",t);const i=e.querySelector(`.${this.player.options.classPrefix}-tooltip`);i&&(i.textContent=t)}createFullscreenButton(){const e=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-fullscreen`,attributes:{type:"button","aria-label":d.t("player.fullscreen")}});return e.appendChild(t("fullscreen")),e.addEventListener("click",()=>{this.player.toggleFullscreen()}),this.controls.fullscreen=e,e}attachEvents(){this.player.on("play",()=>this.updatePlayPauseButton()),this.player.on("pause",()=>this.updatePlayPauseButton()),this.player.on("timeupdate",()=>this.updateProgress()),this.player.on("loadedmetadata",()=>{this.updateDuration(),this.ensureQualityButton(),this.updateQualityIndicator(),this.updatePreviewVideoSource()}),this.player.on("durationchange",()=>{this.updateDuration()}),this.player.on("sourcechange",()=>{this.updatePreviewVideoSource()}),this.player.on("volumechange",()=>this.updateVolumeDisplay()),this.player.on("progress",()=>this.updateBuffered()),this.player.on("playbackspeedchange",()=>this.updateSpeedDisplay()),this.player.on("fullscreenchange",()=>this.updateFullscreenButton()),this.player.on("captionsenabled",()=>this.updateCaptionsButton()),this.player.on("captionsdisabled",()=>this.updateCaptionsButton()),this.player.on("audiodescriptionenabled",()=>this.updateAudioDescriptionButton()),this.player.on("audiodescriptiondisabled",()=>this.updateAudioDescriptionButton()),this.player.on("signlanguageenabled",()=>this.updateSignLanguageButton()),this.player.on("signlanguagedisabled",()=>this.updateSignLanguageButton()),this.player.on("signlanguageinmainviewenabled",()=>this.updateSignLanguageInMainViewButton()),this.player.on("signlanguageinmainviewdisabled",()=>this.updateSignLanguageInMainViewButton()),this.player.on("qualitychange",()=>this.updateQualityIndicator()),this.player.on("hlslevelswitched",()=>this.updateQualityIndicator()),this.player.on("hlsmanifestparsed",()=>{this.ensureQualityButton(),this.updateQualityIndicator()}),this.player.on("dashqualitychanged",()=>this.updateQualityIndicator()),this.player.on("dashmanifestparsed",()=>{this.ensureQualityButton(),this.updateQualityIndicator()})}updatePlayPauseButton(){if(!this.controls.playPause)return;const e=this.controls.playPause.querySelector(".vidply-icon"),i=this.player.state.playing;e&&(e.innerHTML=i?t("pause").innerHTML:t("play").innerHTML);const s=d.t(i?"player.pause":"player.play");this.controls.playPause.setAttribute("aria-label",s),p.attachTooltip(this.controls.playPause,s,this.player.options.classPrefix)}updateProgress(){if(!this.controls.played)return;const t=this.player.state.duration||0,i=t>0?Math.min(100,Math.max(0,(this.player.state.currentTime||0)/t*100)):0;if(this.controls.played.style.width=`${i}%`,this.controls.progress){this.controls.progress.setAttribute("aria-valuenow",String(Math.round(i)));const t=e.formatDuration(this.player.state.currentTime),s=e.formatDuration(this.player.state.duration);this.controls.progress.setAttribute("aria-valuetext",`${Math.round(i)}%, ${t} ${d.t("time.of")} ${s}`)}if(this.controls.currentTimeVisual){const t=this.player.state.currentTime;this.controls.currentTimeVisual.textContent=e.formatTime(t),this.controls.currentTimeAccessible&&(this.controls.currentTimeAccessible.textContent=e.formatDuration(t))}}updateDuration(){if(this.controls.durationVisual){const t=this.player.state.duration;this.controls.durationVisual.textContent=e.formatTime(t),this.controls.durationAccessible&&(this.controls.durationAccessible.textContent=d.t("time.durationPrefix")+e.formatDuration(t))}}updateVolumeDisplay(){const e=100*this.player.state.volume;if(this.controls.volumeFill&&(this.controls.volumeFill.style.height=`${e}%`),this.controls.volumeSlider){const t=Math.round(e);this.controls.volumeSlider.setAttribute("aria-valuenow",String(t)),this.controls.volumeSlider.setAttribute("aria-valuetext",this.player.state.muted?d.t("player.muted"):d.t("player.volumePercent",{percent:t}))}if(this.controls.mute){const i=this.controls.mute.querySelector(".vidply-icon");if(i){let s;s=this.player.state.muted||0===this.player.state.volume?"volumeMuted":this.player.state.volume<.3?"volumeLow":this.player.state.volume<.7?"volumeMedium":"volumeHigh",i.innerHTML=t(s).innerHTML;const a=this.player.state.muted?0:Math.round(e),n=this.isTouchDevice()?d.t(this.player.state.muted?"player.unmute":"player.mute"):`${d.t("player.volume")} ${a}%`;this.controls.mute.setAttribute("aria-label",n),p.attachTooltip(this.controls.mute,n,this.player.options.classPrefix)}}}updateBuffered(){if(!this.controls.buffered||!this.player.element.buffered||0===this.player.element.buffered.length)return;const e=this.player.element.buffered.end(this.player.element.buffered.length-1);this.controls.buffered.style.width=e/this.player.state.duration*100+"%"}updateSpeedDisplay(){this.controls.speedText&&(this.controls.speedText.textContent=`${this.player.state.playbackSpeed}x`)}updateFullscreenButton(){if(!this.controls.fullscreen)return;const e=this.controls.fullscreen.querySelector(".vidply-icon"),i=this.player.state.fullscreen;e&&(e.innerHTML=i?t("fullscreenExit").innerHTML:t("fullscreen").innerHTML),this.controls.fullscreen.setAttribute("aria-label",d.t(i?"player.exitFullscreen":"player.fullscreen"))}ensureQualityButton(){if(!this.player.options.qualityButton)return;if(this.controls.quality)return;if(!this.hasQualityLevels())return;const e=this.createQualityButton(),t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-speed`),i=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-caption-style`)||t;this.rightButtons.insertBefore(e,i||this.rightButtons.firstChild),this.player.log("Quality button added dynamically","info")}ensureCaptionsButton(){if(!this.player.options.captionsButton)return;if(this.controls.captions)return;const e=this.createCaptionsButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="3";const t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-chapters`);t&&t.nextSibling?this.rightButtons.insertBefore(e,t.nextSibling):t?t.after(e):this.rightButtons.insertBefore(e,this.rightButtons.firstChild),this.player.log("Captions button added dynamically for HLS subtitles","info")}ensureCaptionStyleButton(){if(!this.player.options.captionStyleButton)return;if(this.controls.captionStyle)return;const e=this.createCaptionStyleButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3";const t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-captions-button`);t?t.after(e):this.rightButtons.insertBefore(e,this.rightButtons.firstChild),this.player.log("Caption style button added dynamically for HLS subtitles","info")}ensureTranscriptButton(){if(!this.player.options.transcriptButton)return;if(this.controls.transcript)return;const e=this.createTranscriptButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3";const t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-audio-description`),i=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-speed`),s=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-caption-style`);if(t)t.after(e);else if(i)i.after(e);else if(s)s.after(e);else{const t=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-quality`),i=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-pip`),s=this.rightButtons.querySelector(`.${this.player.options.classPrefix}-fullscreen`),a=t||i||s;a?this.rightButtons.insertBefore(e,a):this.rightButtons.appendChild(e)}this.player.log("Transcript button added dynamically for HLS subtitles","info")}removeHlsCaptionButtons(e=!1){!e&&this.player.element.querySelectorAll('track[kind="captions"], track[kind="subtitles"]').length>0?this.player.log("Keeping caption buttons - native track elements exist","info"):(this.disableAllCaptions(),this.controls.captions&&(this.controls.captions.remove(),delete this.controls.captions,this.player.log("Captions button removed - no subtitle tracks","info")),this.controls.captionStyle&&(this.controls.captionStyle.remove(),delete this.controls.captionStyle,this.player.log("Caption style button removed - no subtitle tracks","info")),this.controls.transcript&&(this.controls.transcript.remove(),delete this.controls.transcript,this.player.log("Transcript button removed - no subtitle tracks","info")))}disableAllCaptions(){const e=this.player.element.textTracks;for(let t=0;t<e.length;t++){const i=e[t];i&&(i.mode="disabled")}const t=this.player.container?.querySelector(`.${this.player.options.classPrefix}-captions`);t&&(t.textContent="",t.style.display="none"),this.player.state.captionsEnabled=!1,this.player.log("All captions disabled and cleared","info")}updateQualityIndicator(){if(!this.controls.qualityText)return;if(!this.player.renderer||!this.player.renderer.getQualities)return;const e=this.player.renderer.getQualities();if(0===e.length)return void(this.controls.qualityText.textContent="");let t="";if("function"==typeof this.player.renderer.isAutoQuality&&this.player.renderer.isAutoQuality())t="Auto";else if(this.player.renderer.getCurrentQuality){const i=this.player.renderer.getCurrentQuality(),s=e.find(e=>e.index===i);s&&(t=s.height?`${s.height}p`:"")}this.controls.qualityText.textContent=t}setupAutoHide(){if("VIDEO"!==this.player.element.tagName)return;const 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.state.fullscreen?1.5*this.player.options.hideControlsDelay:this.player.options.hideControlsDelay))};this.player.container.addEventListener("mousemove",e),this.player.container.addEventListener("touchstart",e),this.player.container.addEventListener("touchmove",e),this.player.container.addEventListener("click",e),this.player.container.addEventListener("tap",e),this.element.addEventListener("focusin",e),this.player.on("pause",()=>{e(),clearTimeout(this.hideTimeout)}),this.player.on("play",()=>{e()}),this.player.on("enterfullscreen",()=>{e(),this.player.state.fullscreen&&(clearTimeout(this.hideTimeout),this.hideTimeout=setTimeout(()=>{this.player.state.playing&&(this.element.classList.remove(`${this.player.options.classPrefix}-controls-visible`),this.player.container.classList.remove(`${this.player.options.classPrefix}-controls-visible`),this.player.state.controlsVisible=!1)},2*this.player.options.hideControlsDelay))}),e()}createOverflowMenuButton(){const e=d.t("player.moreOptions"),i=p.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-overflow-menu`,attributes:{type:"button","aria-label":e,"aria-expanded":"false"}});return i.appendChild(t("moreVertical")),p.attachTooltip(i,e,this.player.options.classPrefix),i.addEventListener("click",()=>{this.showOverflowMenu(i)}),this.controls.overflowMenu=i,i}showOverflowMenu(e){const t=document.querySelector(`.${this.player.options.classPrefix}-overflow-menu-list`);if(t)return t.remove(),e.setAttribute("aria-expanded","false"),void(this.openMenu===t&&(this.openMenu=null,this.openMenuButton=null));const i=p.createElement("div",{className:`${this.player.options.classPrefix}-overflow-menu-list ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":d.t("player.moreOptions")}}),s=Array.from(this.rightButtons.querySelectorAll('button[data-in-overflow="true"]'));if(0===s.length){const e=p.createElement("div",{className:`${this.player.options.classPrefix}-menu-item ${this.player.options.classPrefix}-menu-item-disabled`,textContent:d.t("player.noMoreOptions"),attributes:{role:"menuitem","aria-disabled":"true",tabindex:"-1"},style:{opacity:"0.5",cursor:"default"}});i.appendChild(e)}else s.forEach(t=>{const s=p.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),a=t.getAttribute("aria-label")||t.getAttribute("title")||"",n=t.querySelector(".vidply-icon");if(n){const e=n.cloneNode(!0);s.appendChild(e)}else{const e=t.querySelector("span");if(e&&e.textContent&&e.textContent.length<=3){const t=e.cloneNode(!0);t.classList.add("vidply-icon"),s.appendChild(t)}}const r=p.createElement("span",{textContent:a});s.appendChild(r),s.addEventListener("click",()=>{this._overflowMenuItemRef=s;const a=t.style.display;t.style.display="",t.style.visibility="hidden",t.click(),setTimeout(()=>{t.style.display=a,t.style.visibility="",this._overflowMenuItemRef=null},100),this.closeMenuAndReturnFocus(i,e)}),i.appendChild(s)}),this.attachMenuKeyboardNavigation(i,e),setTimeout(()=>{const e=i.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&"BUTTON"===e.tagName&&e.focus({preventScroll:!0})},0);i.style.visibility="hidden",i.style.display="block",this.insertMenuIntoDOM(i,e),this.positionMenu(i,e,!0),requestAnimationFrame(()=>{i.style.visibility="visible"}),this.attachMenuCloseHandler(i,e)}checkOverflow(){const e=window.innerWidth>=768,t=window.innerHeight<window.innerWidth,i=this.player.state.fullscreen,s=t&&i;if(!this.rightButtons||0===this.rightButtons.children.length)return void(this.overflowMenuButton&&(this.overflowMenuButton.style.display="none"));const a=Array.from(this.rightButtons.children).filter(e=>!e.classList.contains(`${this.player.options.classPrefix}-overflow-menu`)&&"true"!==e.dataset.skipOverflow);if(0===a.length)return void(this.overflowMenuButton&&(this.overflowMenuButton.style.display="none"));const n=!e&&!t;if(this.player.options.debug&&console.log("Overflow detection:",{isDesktop:e,isFullscreen:i,isLandscape:t,isLandscapeFullscreen:s,shouldUseOverflow:n,width:window.innerWidth,height:window.innerHeight}),!n)return a.forEach(e=>{e.dataset.inOverflow="false",e.style.display=""}),this.overflowMenuButton&&(this.overflowMenuButton.style.display="none"),void(this.player.options.debug&&console.log("No overflow menu needed - all buttons visible, overflow button hidden"));this.player.options.debug&&console.log("Mobile portrait - checking for overflow..."),a.forEach(e=>{e.style.display=""});const r=this.rightButtons.offsetWidth,o=r-50;let l=0;const c=a.map(e=>{const t=getComputedStyle(e),i=e.offsetWidth+parseInt(t.marginLeft||"0")+parseInt(t.marginRight||"0");return l+=i,{btn:e,width:i}});l+=8*(a.length-1);const u=window.innerWidth<768,h=l>o||u||s&&!e;if(this.player.options.debug&&console.log("Overflow detection:",{containerWidth:r,availableWidth:o,totalWidth:l,needsOverflow:h,isSmallScreen:u,reason:u?"mobile screen":l>o?"not enough space":"enough space",buttonCount:a.length}),h){const e=u?"overflowPriorityMobile":"overflowPriority";this.player.options.debug&&console.log(`Using ${u?"mobile":"desktop"} priorities (width: ${window.innerWidth}px)`);const t=c.sort((t,i)=>{const s=parseInt(t.btn.dataset[e]||t.btn.dataset.overflowPriority||"1");return parseInt(i.btn.dataset[e]||i.btn.dataset.overflowPriority||"1")-s});let i=l,s=0;for(const{btn:a,width:n}of t){const t=parseInt(a.dataset[e]||a.dataset.overflowPriority||"1"),r=a.getAttribute("aria-label")||"unknown";1!==t?(u?t>1:i>o)?(a.dataset.inOverflow="true",a.style.display="none",i-=n,s++,this.player.options.debug&&console.log(` → Hiding button: ${r} (priority ${t}, ${u?"mobile":"desktop"})`)):(a.dataset.inOverflow="false",a.style.display=""):(a.dataset.inOverflow="false",a.style.display="")}if(this.player.options.debug&&console.log("Overflow button exists?",Boolean(this.overflowMenuButton)),!this.overflowMenuButton)return void console.error("Overflow menu button not found!");s>0?(this.overflowMenuButton.style.display="",this.player.options.debug&&console.log("Showing overflow menu button -",s,"buttons moved")):(this.overflowMenuButton.style.display="none",this.player.options.debug&&console.log("Hiding overflow menu button - all buttons fit"))}else a.forEach(e=>{e.dataset.inOverflow="false",e.style.display=""}),this.overflowMenuButton&&(this.overflowMenuButton.style.display="none")}setupOverflowDetection(){const e=this.player.lifecycleSignal,t=()=>{e.aborted||this.checkOverflow()},i=new ResizeObserver(()=>{requestAnimationFrame(t)});i.observe(this.rightButtons),window.addEventListener("resize",()=>{requestAnimationFrame(t)},{signal:e}),this.player.on("fullscreenchange",()=>{setTimeout(()=>{requestAnimationFrame(t)},50)}),requestAnimationFrame(()=>{t(),setTimeout(()=>t(),100),setTimeout(()=>t(),300),setTimeout(()=>t(),500)}),document.fonts&&document.fonts.ready&&document.fonts.ready.then(()=>{requestAnimationFrame(t)}),this.overflowResizeObserver=i}show(){this.element.style.display=""}hide(){this.element.style.display="none"}updatePreviewVideoSource(){const e=this.player.renderer;if(!e||!e.media||"VIDEO"!==e.media.tagName)return;if(this.previewSupported||this.previewVideo||this.initPreviewThumbnail(),!this.previewSupported||!this.previewVideo)return;const t=e.media,i=t.src||t.querySelector("source")?.src;i&&this.previewVideo.src!==i?(this.previewThumbnailCache.clear(),this.previewVideoReady=!1,this.previewVideo.src=i,t.crossOrigin&&(this.previewVideo.crossOrigin=t.crossOrigin),this.previewVideo.addEventListener("loadedmetadata",()=>{this.previewVideoReady=!0},{once:!0})):i&&!this.previewVideoReady&&this.previewVideo.readyState>=1&&(this.previewVideoReady=!0)}cleanupPreviewThumbnail(){this.previewThumbnailTimeout&&(clearTimeout(this.previewThumbnailTimeout),this.previewThumbnailTimeout=null),this.previewVideo&&this.previewVideo.parentNode&&(this.previewVideo.parentNode.removeChild(this.previewVideo),this.previewVideo=null),this.previewThumbnailCache.clear()}destroy(){this.hideTimeout&&clearTimeout(this.hideTimeout),this.overflowResizeObserver&&this.overflowResizeObserver.disconnect(),this.cleanupPreviewThumbnail(),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}},M=class{player;shortcuts;announcer=null;_announceReady=!1;_prevMuted;_stateAnnouncers=[];_announceVolume;constructor(e){this.player=e,this.shortcuts=e.options.keyboardShortcuts,this._prevMuted=e.state.muted,this._announceVolume=o(()=>{const e=Math.round(100*this.player.state.volume);this.announce(d.t("player.volumePercent",{percent:e}))},500),this.init()}init(){this.attachEvents(),this.attachStateAnnouncements()}attachStateAnnouncements(){if("function"!=typeof this.player.on)return;const e=()=>{this._announceReady=!0};this.player.on("ready",e);const t=(e,t)=>{const i=()=>{this._announceReady&&t()};this.player.on(e,i),this._stateAnnouncers.push({event:e,handler:i})};this._stateAnnouncers.push({event:"ready",handler:e}),t("play",()=>this.announce(d.t("player.playing"))),t("pause",()=>this.announce(d.t("player.paused"))),t("captionsenabled",()=>this.announce(d.t("player.captionsOn"))),t("captionsdisabled",()=>this.announce(d.t("player.captionsOff"))),t("fullscreenchange",()=>{this.announce(d.t(this.player.state.fullscreen?"player.fullscreen":"player.exitFullscreen"))}),t("ratechange",()=>{this.announce(d.t("player.speedRate",{rate:String(this.player.state.playbackSpeed)}))}),t("volumechange",()=>{if(this.player.state.muted!==this._prevMuted)return this._prevMuted=this.player.state.muted,void this.announce(d.t(this.player.state.muted?"player.muted":"player.unmuted"));this.player.state.muted||this._announceVolume()})}attachEvents(){this.player.container.addEventListener("keydown",e=>{this.handleKeydown(e)},!0),this.player.container.hasAttribute("tabindex")||this.player.container.setAttribute("tabindex","0")}handleKeydown(e){const t=e.target;if("INPUT"===t.tagName||"TEXTAREA"===t.tagName||"SELECT"===t.tagName)return;const i=document.activeElement;if(i){if(i.closest('.vidply-menu, [role="menu"]'))return;if(i.closest(".vidply-playlist-item-button"))return;if(i.closest(".vidply-sign-language-wrapper")){const e=this.player.signLanguageManager?.draggable;if(e?.keyboardDragMode||e?.keyboardResizeMode)return}if(i.closest(".vidply-transcript-window")){const e=this.player.transcriptManager?.draggableResizable;if(e?.keyboardDragMode||e?.keyboardResizeMode)return}}const s=e.key;let a=!1;if("Escape"===s&&this.player.state.fullscreen)return this.player.exitFullscreen(),e.preventDefault(),void e.stopPropagation();for(const[t,i]of Object.entries(this.shortcuts))if(i.includes(s)&&(a=this.executeAction(t,e),a)){e.preventDefault(),e.stopPropagation();break}!a&&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){const e=this.player.controlBar?.controls.captions;e&&this.player.controlBar?this.player.controlBar.showCaptionsMenu(e):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));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));case"quality-menu":return!(!this.player.controlBar||!this.player.controlBar.controls.quality||(this.player.controlBar.showQualityMenu(this.player.controlBar.controls.quality),0));case"chapters-menu":return!(!this.player.controlBar||!this.player.controlBar.controls.chapters||(this.player.controlBar.showChaptersMenu(this.player.controlBar.controls.chapters),0));case"transcript-toggle":return!!this.player.transcriptManager&&(this.player.transcriptManager.toggleTranscript(),!0);case"help":return this.player.toggleKeyboardHelp(),!0;default:return!1}}announceAction(e){if(!this.player.options.screenReaderAnnouncements)return;let t="";switch(e){case"play-pause":t=d.t(this.player.state.playing?"player.playing":"player.paused");break;case"volume-up":case"volume-down":{const e=Math.round(100*this.player.state.volume);t=d.t("player.volumePercent",{percent:e});break}case"mute":t=d.t(this.player.state.muted?"player.muted":"player.unmuted");break;case"fullscreen":t=d.t(this.player.state.fullscreen?"player.fullscreen":"player.exitFullscreen");break;case"captions":t=d.t(this.player.state.captionsEnabled?"player.captionsOn":"player.captionsOff");break;case"speed-up":case"speed-down":t=d.t("player.speedRate",{rate:String(this.player.state.playbackSpeed)})}t&&this.announce(t)}announce(e,t="polite"){if(this.announcer)this.announcer.setAttribute("aria-live",t);else{const e=`vidply-announcer-${this.player.instanceId}`;this.announcer=document.createElement("div"),this.announcer.id=e,this.announcer.className="vidply-sr-only",this.announcer.setAttribute("aria-live",t),this.announcer.setAttribute("aria-atomic","true"),this.announcer.style.cssText="\n position: absolute;\n left: -10000px;\n width: 1px;\n height: 1px;\n overflow: hidden;\n ",document.body.appendChild(this.announcer)}this.announcer.textContent="";const i=this.announcer;setTimeout(()=>{i&&(i.textContent=e)},100)}updateShortcut(e,t){Array.isArray(t)&&(this.shortcuts[e]=t)}destroy(){if("function"==typeof this.player.off)for(const{event:e,handler:t}of this._stateAnnouncers)this.player.off(e,t);this._stateAnnouncers=[],this.announcer&&this.announcer.parentNode&&this.announcer.parentNode.removeChild(this.announcer),this.announcer=null}},S=null,E=class{player;supported;handlers={};boundActions=[];lastPositionUpdate=0;constructor(e){this.player=e,this.supported="undefined"!=typeof navigator&&"mediaSession"in navigator,this.supported&&(this.attachEvents(),null===S&&this.claimSession())}isActive(){return S===this}claimSession(){this.supported&&(S=this,this.setupActionHandlers(),this.updateMetadata(),this.updatePlaybackState(),this.updatePositionState(!0))}get session(){return navigator.mediaSession}setActionHandler(e,t){try{this.session.setActionHandler(e,t),t&&!this.boundActions.includes(e)&&this.boundActions.push(e)}catch{}}setupActionHandlers(){this.setActionHandler("play",()=>this.player.play()),this.setActionHandler("pause",()=>this.player.pause()),this.setActionHandler("stop",()=>this.player.stop()),this.setActionHandler("seekbackward",e=>{this.player.seekBackward(this.offsetFrom(e))}),this.setActionHandler("seekforward",e=>{this.player.seekForward(this.offsetFrom(e))}),this.setActionHandler("seekto",e=>{e&&"number"==typeof e.seekTime&&this.player.seek(e.seekTime)}),this.updateTrackHandlers()}offsetFrom(e){const t=e&&"number"==typeof e.seekOffset?e.seekOffset:void 0;return"number"==typeof t&&t>0?t:void 0}updateTrackHandlers(){const e=this.player.playlistManager;Boolean(e&&Array.isArray(e.tracks)&&e.tracks.length>1)&&e?(this.setActionHandler("previoustrack",()=>e.previous()),this.setActionHandler("nexttrack",()=>e.next())):(this.setActionHandler("previoustrack",null),this.setActionHandler("nexttrack",null))}attachEvents(){this.handlers={play:()=>this.claimSession(),pause:()=>{this.isActive()&&(this.updatePlaybackState(),this.updatePositionState(!0))},ended:()=>{this.isActive()&&this.updatePlaybackState()},timeupdate:()=>{this.isActive()&&this.updatePositionState()},durationchange:()=>{this.isActive()&&this.updatePositionState(!0)},ratechange:()=>{this.isActive()&&this.updatePositionState(!0)},loadedmetadata:()=>{this.isActive()&&(this.updateMetadata(),this.updatePositionState(!0))},playlisttrackchange:()=>{this.isActive()&&(this.updateMetadata(),this.updateTrackHandlers(),this.updatePositionState(!0))}};for(const[e,t]of Object.entries(this.handlers))t&&this.player.on(e,t)}resolveMetadata(){const e=this.player.options;let t=e.title||"",i=e.artist||"";const s=e.album||"";let a=e.poster||null;const n=this.player.playlistManager;if(n&&Array.isArray(n.tracks)&&n.currentIndex>=0){const e=n.tracks[n.currentIndex];e&&(e.title&&(t=e.title),e.artist&&(i=e.artist),e.poster&&(a=e.poster))}return t||"undefined"==typeof document||(t=document.title||"VidPly"),{title:t,artist:i,album:s,poster:a}}updateMetadata(){if(!this.supported||"undefined"==typeof window||void 0===window.MediaMetadata)return;const{title:e,artist:t,album:i,poster:s}=this.resolveMetadata(),a=[];if(s)try{const e=this.player.resolvePosterPath(s);e&&a.push({src:e})}catch{}try{this.session.metadata=new window.MediaMetadata({title:e,artist:t,album:i,artwork:a})}catch{}}updatePlaybackState(){if(this.supported)try{this.session.playbackState=this.player.state.playing?"playing":"paused"}catch{}}updatePositionState(e=!1){if(!this.supported||"function"!=typeof this.session.setPositionState)return;const t=Date.now();if(!e&&t-this.lastPositionUpdate<1e3)return;this.lastPositionUpdate=t;const i=this.player.state.duration;if(!Number.isFinite(i)||i<=0){try{this.session.setPositionState()}catch{}return}const s=this.player.state.playbackSpeed||1,a=Math.min(Math.max(0,this.player.state.currentTime||0),i);try{this.session.setPositionState({duration:i,playbackRate:s>0?s:1,position:a})}catch{}}destroy(){if(this.supported){for(const[e,t]of Object.entries(this.handlers))t&&this.player.off(e,t);if(this.handlers={},this.isActive()){for(const e of this.boundActions)try{this.session.setActionHandler(e,null)}catch{}try{this.session.metadata=null}catch{}try{"function"==typeof this.session.setPositionState&&this.session.setPositionState()}catch{}try{this.session.playbackState="none"}catch{}S=null}this.boundActions=[]}}};function C(e){if("string"!=typeof e||0===e.length||e.length>4096)return null;const t=e.trim();if(!t)return null;if(/[\s"'<>\\]/.test(t))return null;if(t.startsWith("/")||t.startsWith("./")||t.startsWith("../"))return t;try{const e=new URL(t,"undefined"!=typeof window?window.location.href:"http://localhost/");if("https:"===e.protocol||"http:"===e.protocol)return e.href;if("data:"===e.protocol&&/^data:image\/(png|jpeg|jpg|webp|gif|svg\+xml);/i.test(t))return t}catch{return null}return null}function x(e){return e.replace(/["()\\]/g,e=>`\\${e}`)}function L(e){const t=C(e);return t?`url("${x(t)}")`:null}var T=new WeakMap;function A(e,t,i,s){const a=T.get(e);if(a&&(a.observer.unobserve(e),T.delete(e)),e.getBoundingClientRect().height<20)return void s(e,t);const n=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&(n.unobserve(e.target),T.delete(e.target),s(e.target,t))})},{rootMargin:i,threshold:0});n.observe(e),T.set(e,{observer:n,options:t})}var B=class{player;originalScrollX;originalScrollY;originalBodyOverflow;originalBodyPosition;originalBodyWidth;originalBodyHeight;originalHtmlOverflow;originalBodyBackground;originalHtmlBackground;originalViewport;inertElements=[];constructor(e){this.player=e}enable(){const{player:e}=this;e.state.fullscreen=!0,e.container.classList.add(`${e.options.classPrefix}-fullscreen`),document.body.classList.add("vidply-fullscreen-active"),this.originalScrollX=window.scrollX||window.pageXOffset,this.originalScrollY=window.scrollY||window.pageYOffset,this.originalBodyOverflow=document.body.style.overflow,this.originalBodyPosition=document.body.style.position,this.originalBodyWidth=document.body.style.width,this.originalBodyHeight=document.body.style.height,this.originalHtmlOverflow=document.documentElement.style.overflow,this.originalBodyBackground=document.body.style.background,this.originalHtmlBackground=document.documentElement.style.background,document.body.style.overflow="hidden",document.body.style.width="100%",document.body.style.height="100%",document.body.style.background="#000",document.documentElement.style.overflow="hidden",document.documentElement.style.background="#000",this.originalViewport=document.querySelector('meta[name="viewport"]')?.getAttribute("content");const t=document.querySelector('meta[name="viewport"]');t&&t.setAttribute("content","width=device-width, initial-scale=1.0"),window.scrollTo(0,0),this.makeBackgroundInert(),e.emit("fullscreenchange",!0),e.emit("enterfullscreen")}makeBackgroundInert(){this.inertElements=[];let e=this.player.container;for(;e&&e!==document.body&&e!==document.documentElement;){const t=e.parentElement;t&&Array.from(t.children).forEach(t=>{t===e||t.nodeType!==Node.ELEMENT_NODE||t.hasAttribute("inert")||"SCRIPT"===t.tagName||"STYLE"===t.tagName||"LINK"===t.tagName||"META"===t.tagName||(t.setAttribute("inert",""),this.inertElements.push(t))}),e=t}}restoreBackgroundInteractivity(){if(this.inertElements.length>0){for(const e of this.inertElements)e.removeAttribute("inert");this.inertElements=[]}}disable(){if(document.body.classList.remove("vidply-fullscreen-active"),this.restoreBackgroundInteractivity(),void 0!==this.originalBodyOverflow&&(document.body.style.overflow=this.originalBodyOverflow,this.originalBodyOverflow=void 0),void 0!==this.originalBodyPosition&&(document.body.style.position=this.originalBodyPosition,this.originalBodyPosition=void 0),void 0!==this.originalBodyWidth&&(document.body.style.width=this.originalBodyWidth,this.originalBodyWidth=void 0),void 0!==this.originalBodyHeight&&(document.body.style.height=this.originalBodyHeight,this.originalBodyHeight=void 0),void 0!==this.originalHtmlOverflow&&(document.documentElement.style.overflow=this.originalHtmlOverflow,this.originalHtmlOverflow=void 0),void 0!==this.originalBodyBackground&&(document.body.style.background=this.originalBodyBackground,this.originalBodyBackground=void 0),void 0!==this.originalHtmlBackground&&(document.documentElement.style.background=this.originalHtmlBackground,this.originalHtmlBackground=void 0),void 0!==this.originalViewport){const e=document.querySelector('meta[name="viewport"]');e&&null!==this.originalViewport&&e.setAttribute("content",this.originalViewport),this.originalViewport=void 0}void 0!==this.originalScrollX&&void 0!==this.originalScrollY&&(window.scrollTo(this.originalScrollX,this.originalScrollY),this.originalScrollX=void 0,this.originalScrollY=void 0),this.player.emit("exitfullscreen")}},D=["dark","light","minimal","high-contrast"];function $(e){return/^--vidply-[A-Za-z0-9_-]{1,64}$/.test(e)}function F(e){return!("string"!=typeof e||e.length>200||/[<>{};@\\]/.test(e))}var V=class{player;constructor(e){this.player=e}apply(){const e=this.player;if(!e.container)return;const t=D.map(t=>`${e.options.classPrefix}-theme-${t}`);e.container.classList.remove(...t);const i=e.options.theme;if(i&&D.includes(i)&&e.container.classList.add(`${e.options.classPrefix}-theme-${i}`),e.options.themeVariables&&"object"==typeof e.options.themeVariables)for(const[t,i]of Object.entries(e.options.themeVariables)){if(y(t))continue;const s=t.startsWith("--vidply-")?t:`--vidply-${t}`;$(s)?F(i)?e.container.style.setProperty(s,i):e.log(`[VidPly] Ignoring invalid theme variable value for ${s}`,"warn"):e.log(`[VidPly] Ignoring invalid theme variable name: ${t}`,"warn")}}set(e,t={}){const i=this.player,s=i.options.theme;i.options.theme=e,t&&Object.keys(t).length>0&&(i.options.themeVariables={...i.options.themeVariables,...t}),this.apply(),i.emit("themechange",{theme:e,previousTheme:s,customVariables:i.options.themeVariables})}get(){return this.player.options.theme}setVariable(e,t){const i=this.player;if(!i.container)return;const s=e.startsWith("--vidply-")?e:`--vidply-${e}`;$(s)&&F(t)?(i.container.style.setProperty(s,t),i.options.themeVariables||(i.options.themeVariables={}),i.options.themeVariables[e]=t):i.log(`[VidPly] Ignoring unsafe setThemeVariable(${e})`,"warn")}reset(){const e=this.player;e.container&&e.options.themeVariables&&Object.keys(e.options.themeVariables).forEach(t=>{const i=t.startsWith("--vidply-")?t:`--vidply-${t}`;e.container.style.removeProperty(i)});const t=e.options.theme;e.options.theme="dark",e.options.themeVariables={},this.apply(),e.emit("themechange",{theme:"dark",previousTheme:t})}},I=class{player;constructor(e){this.player=e}resolvePath(e){if(!e)return"";if(e.match(/^(https?:|\/)/))return e;try{return new URL(e,window.location.href).href}catch{return e}}async generateFromVideo(e=10){const t=this.player;if("VIDEO"!==t.element.tagName)return null;const i=t.renderer;if(!i||!i.media||"VIDEO"!==i.media.tagName)return null;const s=i.media;(!s.duration||s.duration<e)&&(e=Math.min(e,Math.max(1,.1*s.duration)));let a=s;t.controlBar&&t.controlBar.previewVideo&&t.controlBar.previewSupported&&(a=t.controlBar.previewVideo);const n=a===s;return await m(a,e,{restoreState:n,quality:.9})}async autoGenerate(){const e=this.player;if(e.element.getAttribute("poster")||e.element.poster||e.options.poster)return;if("VIDEO"!==e.element.tagName)return;e.state.duration&&0!==e.state.duration||await new Promise(t=>{const i=()=>{e.element.removeEventListener("loadedmetadata",i),t()};e.element.readyState>=1?t():e.element.addEventListener("loadedmetadata",i)});const t=await this.generateFromVideo(10);t&&(e.element.poster=t,e.log("Auto-generated poster from video frame at 10 seconds","info"),this.showOverlay())}showOverlay(){const e=this.player;if(!e.videoWrapper||"VIDEO"!==e.element.tagName)return;const t=e.element.getAttribute("poster")||e.element.poster||e.options.poster;if(!t)return;const i=t.startsWith("data:")?t:this.resolvePath(t);e.videoWrapper.style.setProperty("--vidply-poster-image",`url("${i}")`),e.videoWrapper.classList.add("vidply-forced-poster"),e._isAudioContent&&e.container?e.container.classList.add("vidply-audio-content"):e.container&&e.container.classList.remove("vidply-audio-content")}hideOverlay(){const e=this.player;e.videoWrapper&&(e.videoWrapper.classList.remove("vidply-forced-poster"),e.videoWrapper.style.removeProperty("--vidply-poster-image"))}},N=class{player;saveProgressThrottled=null;resumeChecked=!1;listenersAttached=!1;constructor(e){this.player=e}init(){this.listenersAttached||(this.listenersAttached=!0,this.saveProgressThrottled=h(()=>this.saveProgress(),5e3),this.player.on("timeupdate",()=>{this.player.state.playing&&this.player.state.duration>0&&this.saveProgressThrottled?.()}),this.player.on("loadedmetadata",()=>{this.resumeChecked||(this.resumeChecked=!0,this.checkForResume())}),this.player.on("ended",()=>{const e=this.player.getVideoId();e&&this.player.storage.clearWatchProgress(e)}))}saveProgress(){const e=this.player;if(!e.options.resumePlayback)return;const t=e.getVideoId();if(!t)return;const i=e.state.currentTime,s=e.state.duration;s<30||i<e.options.resumeThreshold||i/s*100>95||e.storage.saveWatchProgress(t,i,s)}checkForResume(){const e=this.player;if(!e.options.resumePlayback)return;const t=e.getVideoId();if(!t)return;const i=e.storage.getWatchProgress(t);if(!i)return;const{currentTime:s,duration:a,percentage:n}=i;s<e.options.resumeThreshold||n>95||e.state.duration>0&&Math.abs(e.state.duration-a)>5?e.storage.clearWatchProgress(t):e.options.resumePrompt?this.showPrompt(s):e.seek(s)}formatTime(e){const t=Math.floor(e/3600),i=Math.floor(e%3600/60),s=Math.floor(e%60);return t>0?`${t}:${i.toString().padStart(2,"0")}:${s.toString().padStart(2,"0")}`:`${i}:${s.toString().padStart(2,"0")}`}showPrompt(e){const t=this.player;if(t.state.resumePromptVisible||!t.container)return;const i=this.formatTime(e),s=d.t("resume.prompt",{time:i});t.resumePromptElement=p.createElement("div",{className:`${t.options.classPrefix}-resume-prompt`,attributes:{role:"dialog","aria-label":s,"aria-modal":"true"}});const a=p.createElement("div",{className:`${t.options.classPrefix}-resume-prompt-content`}),n=p.createElement("p",{className:`${t.options.classPrefix}-resume-prompt-message`,textContent:s}),r=p.createElement("div",{className:`${t.options.classPrefix}-resume-prompt-buttons`}),o=p.createElement("button",{className:`${t.options.classPrefix}-resume-prompt-button ${t.options.classPrefix}-resume-prompt-button-primary`,textContent:d.t("resume.resume"),attributes:{type:"button"}});o.addEventListener("click",()=>{this.hidePrompt(),t.seek(e),t.play()});const l=p.createElement("button",{className:`${t.options.classPrefix}-resume-prompt-button`,textContent:d.t("resume.startOver"),attributes:{type:"button"}});l.addEventListener("click",()=>{this.hidePrompt();const e=t.getVideoId();e&&t.storage.clearWatchProgress(e),t.seek(0),t.play()}),t.resumePromptElement.addEventListener("keydown",e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),this.hidePrompt())}),r.appendChild(o),r.appendChild(l),a.appendChild(n),a.appendChild(r),t.resumePromptElement.appendChild(a),t.container.appendChild(t.resumePromptElement),t.state.resumePromptVisible=!0,requestAnimationFrame(()=>{o.focus()}),t.emit("resumepromptshow",{savedTime:e})}hidePrompt(){const e=this.player;e.resumePromptElement&&(e.resumePromptElement.remove(),e.resumePromptElement=null,e.state.resumePromptVisible=!1,e.emit("resumeprompthide"))}},O=class{player;orientationQuery=null;orientationHandler=null;constructor(e){this.player=e}setup(){this.setupResizeTracking(),this.setupOrientationTracking(),this.setupFullscreenTracking()}setupResizeTracking(){const e=this.player;if("undefined"!=typeof ResizeObserver)return e.resizeObserver=new ResizeObserver(t=>{for(const i of t){const t=e.controlBar;t&&"function"==typeof t.updateControlsForViewport&&t.updateControlsForViewport(i.contentRect.width),e.transcriptManager&&e.transcriptManager.isVisible&&e.transcriptManager.positionTranscript()}}),void e.resizeObserver.observe(e.container);e.resizeHandler=()=>{const t=e.controlBar;t&&"function"==typeof t.updateControlsForViewport&&t.updateControlsForViewport(e.container.clientWidth),e.transcriptManager&&e.transcriptManager.isVisible&&(e.transcriptManager.draggableResizable&&e.transcriptManager.draggableResizable.manuallyPositioned||e.transcriptManager.positionTranscript())},window.addEventListener("resize",e.resizeHandler,{signal:e.lifecycleSignal})}setupOrientationTracking(){const e=this.player;if(!window.matchMedia)return;this.orientationHandler=()=>{setTimeout(()=>{e.transcriptManager&&e.transcriptManager.isVisible&&(e.transcriptManager.draggableResizable&&e.transcriptManager.draggableResizable.manuallyPositioned||e.transcriptManager.positionTranscript())},100)};const t=window.matchMedia("(orientation: portrait)");t.addEventListener?t.addEventListener("change",this.orientationHandler,{signal:e.lifecycleSignal}):t.addListener&&t.addListener(this.orientationHandler),this.orientationQuery=t,e.orientationQuery=t,e.orientationHandler=this.orientationHandler}setupFullscreenTracking(){const e=this.player;e.fullscreenChangeHandler=()=>{const t=document,i=Boolean(document.fullscreenElement||t.webkitFullscreenElement||t.mozFullScreenElement||t.msFullscreenElement);e.state.fullscreen!==i&&(e.state.fullscreen=i,e.pseudoFullscreen||(e.pseudoFullscreen=new B(e)),i?(e.container.classList.add(`${e.options.classPrefix}-fullscreen`),document.body.classList.add("vidply-fullscreen-active"),e.pseudoFullscreen.makeBackgroundInert()):(e.container.classList.remove(`${e.options.classPrefix}-fullscreen`),document.body.classList.remove("vidply-fullscreen-active"),e.pseudoFullscreen.restoreBackgroundInteractivity(),e._disablePseudoFullscreen()),e.emit("fullscreenchange",i),e.controlBar&&e.controlBar.updateFullscreenButton(),e.signLanguageWrapper&&"none"!==e.signLanguageWrapper.style.display)&&(window.innerWidth<768&&e.setupSignLanguageInteraction(),e.setManagedTimeout(()=>{requestAnimationFrame(()=>{e.storage.saveSignLanguagePreferences({size:null}),e.signLanguageWrapper&&(e.signLanguageWrapper.style.width=i?"400px":"280px"),e.constrainSignLanguagePosition()})},500))};const t={signal:e.lifecycleSignal};document.addEventListener("fullscreenchange",e.fullscreenChangeHandler,t),document.addEventListener("webkitfullscreenchange",e.fullscreenChangeHandler,t),document.addEventListener("mozfullscreenchange",e.fullscreenChangeHandler,t),document.addEventListener("MSFullscreenChange",e.fullscreenChangeHandler,t)}cleanup(){const e=this.player;e.resizeObserver&&(e.resizeObserver.disconnect(),e.resizeObserver=null),e.resizeHandler=null,e.fullscreenChangeHandler=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),e.orientationQuery=null,e.orientationHandler=null}},H=class{player;cueChangeHandler=null;alertHandlers=new Map;constructor(e){this.player=e}get cuechangeListener(){return this.cueChangeHandler}setupHandling(){const e=this.player,t=()=>{const t=e.textTracks.find(e=>"metadata"===e.kind);t?("disabled"===t.mode&&(t.mode="hidden"),this.cueChangeHandler&&t.removeEventListener("cuechange",this.cueChangeHandler),this.cueChangeHandler=()=>{const i=Array.from(t.activeCues||[]);i.length>0&&e.options.debug&&e.log("[Metadata] Active cues:",i.map(e=>({start:e.startTime,end:e.endTime,text:e.text}))),i.forEach(e=>this.handleCue(e))},t.addEventListener("cuechange",this.cueChangeHandler),e.metadataCueChangeHandler=this.cueChangeHandler,e.options.debug&&e.log("[Metadata] Track enabled,",t.cues?t.cues.length:0,"cues available")):e.options.debug&&e.log("[Metadata] No metadata track found")};t(),e.on("loadedmetadata",t)}normalizeSelector(e){if("string"!=typeof e)return null;const t=e.trim();return t?t.length>200?null:t.startsWith("#")||t.startsWith(".")||t.startsWith("[")?t:`#${t}`:null}resolveConfig(e,t){if(!e||!t)return null;if(Object.prototype.hasOwnProperty.call(e,t))return e[t];const i=t.replace(/^#/,"");return Object.prototype.hasOwnProperty.call(e,i)?e[i]:null}cacheContent(e,t={}){if(!e)return;const i=t.messageSelector||"[data-vidply-alert-message], p",s=e.querySelector(t.titleSelector||"[data-vidply-alert-title], h3, header");s&&!s.dataset.vidplyAlertTitleOriginal&&(s.dataset.vidplyAlertTitleOriginal=s.textContent?.trim()??"");const a=e.querySelector(i);a&&!a.dataset.vidplyAlertMessageOriginal&&(a.dataset.vidplyAlertMessageOriginal=a.textContent?.trim()??"")}restoreContent(e,t={}){if(!e)return;const i=t.messageSelector||"[data-vidply-alert-message], p",s=e.querySelector(t.titleSelector||"[data-vidply-alert-title], h3, header");s&&s.dataset.vidplyAlertTitleOriginal&&(s.textContent=s.dataset.vidplyAlertTitleOriginal);const a=e.querySelector(i);a&&a.dataset.vidplyAlertMessageOriginal&&(a.textContent=a.dataset.vidplyAlertMessageOriginal)}focusTarget(e,t=null){if(!e||"none"===e)return;if("alert"===e&&t)return void t.focus({preventScroll:!0});const i=this.player;if("player"!==e)if("media"!==e){if("playButton"===e){const e=i.controlBar?.controls?.playPause;return void e?.focus({preventScroll:!0})}if("string"==typeof e){const t=document.querySelector(e);t&&(-1!==t.tabIndex||t.hasAttribute("tabindex")||t.setAttribute("tabindex","-1"),t.focus({preventScroll:!0}))}}else i.element.focus({preventScroll:!0});else i.container?.focus({preventScroll:!0})}handleAlert(e,t={}){const i=this.player;if(!e)return;const s=this.resolveConfig(i.options.metadataAlerts,e)||{},a=t.element||this.resolveElement(e);if(!a)return void(i.options.debug&&i.log("[Metadata] Alert element not found:",e));i.options.debug&&i.log("[Metadata] Handling alert",e,{reason:t.reason,config:s}),this.cacheContent(a,s),a.dataset.vidplyAlertOriginalDisplay||(a.dataset.vidplyAlertOriginalDisplay=a.style.display||""),a.dataset.vidplyAlertDisplay||(a.dataset.vidplyAlertDisplay=s.display||"block");const n=void 0!==t.show?t.show:!1!==s.show;n&&(a.style.display=s.display||a.dataset.vidplyAlertDisplay||"block",a.hidden=!1,a.removeAttribute("hidden"),a.setAttribute("aria-hidden","false"),a.setAttribute("data-vidply-alert-active","true")),!1!==s.resetContent&&"focus"===t.reason&&this.restoreContent(a,s),n&&(void 0!==t.focus?t.focus:s.focusOnShow??"focus"!==t.reason)&&(-1!==a.tabIndex||a.hasAttribute("tabindex")||a.setAttribute("tabindex","-1"),a.focus({preventScroll:!0})),n&&!1!==s.autoScroll&&!1!==t.autoScroll&&a.scrollIntoView(u("nearest"));const r=s.continueButton;if(r){let t=null;if(t="self"===r||a.matches(r)?a:a.querySelector(r)||document.querySelector(r),t&&!this.alertHandlers.has(e)){const n=()=>{!1!==s.hideOnContinue&&(a.style.display=s.hideDisplay||a.dataset.vidplyAlertOriginalDisplay||""||"none",a.setAttribute("aria-hidden","true"),a.removeAttribute("data-vidply-alert-active")),!1!==s.resume&&i.state.paused&&i.play();const e=s.focusTarget||"playButton";i.setManagedTimeout(()=>{this.focusTarget(e,a)},s.focusDelay??100)};t.addEventListener("click",n),this.alertHandlers.set(e,{button:t,handler:n})}}return a}handleHashtags(e){if(!Array.isArray(e)||0===e.length)return;const t=this.player,i=t.options.metadataHashtags;i&&e.forEach(e=>{const s=this.resolveConfig(i,e);if(!s)return;const a=this.normalizeSelector(s.alert||s.selector||s.target);if(!a)return;const n=this.resolveElement(a);if(n){if(t.options.debug&&t.log("[Metadata] Handling hashtag",e,{selector:a,config:s}),this.cacheContent(n,s),s.title){const e=n.querySelector(s.titleSelector||"[data-vidply-alert-title], h3, header");e&&(e.textContent=s.title)}if(s.message){const e=n.querySelector(s.messageSelector||"[data-vidply-alert-message], p");e&&(e.textContent=s.message)}this.handleAlert(a,{element:n,show:!1!==s.show,focus:void 0!==s.focus&&s.focus,autoScroll:s.autoScroll,reason:"hashtag"})}else t.options.debug&&t.log("[Metadata] Hashtag target not found:",a)})}handleCue(e){const t=this.player,i=e.text.trim();t.options.debug&&t.log("[Metadata] Processing cue:",{time:e.startTime,text:i}),t.emit("metadata",{time:e.startTime,endTime:e.endTime,text:i,cue:e}),i.includes("PAUSE")&&(t.state.paused||(t.options.debug&&t.log("[Metadata] Pausing video at",e.startTime),t.pause()),t.emit("metadata:pause",{time:e.startTime,text:i}));const s=i.match(/FOCUS:([\w#-]{1,128})/);if(s){const a=s[1],n=this.normalizeSelector(a),r=this.resolveElement(n);r?(t.options.debug&&t.log("[Metadata] Focusing element:",n),-1!==r.tabIndex||r.hasAttribute("tabindex")||r.setAttribute("tabindex","-1"),t.setManagedTimeout(()=>{r.focus({preventScroll:!0})},10)):t.options.debug&&t.options.metadataDirectives&&t.log("[Metadata] Element not found:",n||a),t.emit("metadata:focus",{time:e.startTime,target:a,selector:n,element:r,text:i}),t.options.metadataDirectives&&n&&this.handleAlert(n,{element:r,reason:"focus"})}const a=i.match(/#[\w-]{1,64}/g);if(a&&a.length>0){const s=a.slice(0,32);t.options.debug&&t.log("[Metadata] Hashtags found:",s),t.emit("metadata:hashtags",{time:e.startTime,hashtags:s,text:i}),t.options.metadataDirectives&&this.handleHashtags(s)}}resolveElement(e){const t=this.player,i=t.options.metadataDirectives;if(!i)return null;if(!e)return null;try{return!0===i||"global"===i?document.querySelector(e):(t.container||t.element.parentElement||document).querySelector(e)}catch{return null}}cleanup(){this.alertHandlers.size>0&&(this.alertHandlers.forEach(({button:e,handler:t})=>{e&&t&&e.removeEventListener("click",t)}),this.alertHandlers.clear()),this.cueChangeHandler=null}},q=["play-pause","seek-backward","seek-forward","volume-up","volume-down","mute","captions","caption-style-menu","speed-down","speed-up","speed-menu","quality-menu","chapters-menu","transcript-toggle","fullscreen","help"],R={captions:"captions","caption-style-menu":"captionStyle","speed-down":"speed","speed-up":"speed","speed-menu":"speed","quality-menu":"quality","chapters-menu":"chapters","transcript-toggle":"transcript",fullscreen:"fullscreen"},_=class{player;isOpen=!1;overlay=null;_triggerElement=null;_keydownHandler=null;_content=null;constructor(e){this.player=e}get prefix(){return this.player.options.classPrefix}formatKey(e){switch(e){case" ":return d.t("help.keys.space");case"ArrowUp":return"↑";case"ArrowDown":return"↓";case"ArrowLeft":return"←";case"ArrowRight":return"→";case"Escape":return"Esc";default:return 1===e.length?e.toUpperCase():e}}createElement(){const e=`${this.prefix}-help-title-${this.player.instanceId}`,i=p.createElement("div",{className:`${this.prefix}-settings-overlay ${this.prefix}-help-overlay`,attributes:{role:"dialog","aria-modal":"true","aria-labelledby":e}});i.style.display="none";const s=p.createElement("div",{className:`${this.prefix}-settings-dialog ${this.prefix}-help-dialog`}),a=p.createElement("div",{className:`${this.prefix}-settings-header`}),n=p.createElement("h2",{textContent:d.t("help.title"),attributes:{id:e}}),r=p.createElement("button",{className:`${this.prefix}-button ${this.prefix}-settings-close`,attributes:{type:"button","aria-label":d.t("help.close")}});r.appendChild(t("close")),r.addEventListener("click",()=>this.hide()),a.appendChild(n),a.appendChild(r);const o=p.createElement("div",{className:`${this.prefix}-settings-content`});this._content=o,o.appendChild(this.buildShortcutList()),s.appendChild(a),s.appendChild(o),i.appendChild(s),i.addEventListener("click",e=>{e.target===i&&this.hide()}),this._keydownHandler=e=>{if(this.isOpen&&this.overlay){if("Escape"===e.key)return e.preventDefault(),void this.hide();if("Tab"===e.key){const t=Array.from(this.overlay.querySelectorAll('button, [href], select, input, textarea, [tabindex]:not([tabindex="-1"])')).filter(e=>!e.hasAttribute("disabled")&&null!==e.offsetParent);if(0===t.length)return;const i=t[0],s=t[t.length-1];if(!i||!s)return;const a=document.activeElement;!e.shiftKey||a!==i&&this.overlay.contains(a)?e.shiftKey||a!==s||(e.preventDefault(),i.focus({preventScroll:!0})):(e.preventDefault(),s.focus({preventScroll:!0}))}}};const l=this.player.lifecycleSignal;return document.addEventListener("keydown",this._keydownHandler,l?{signal:l}:void 0),i}isActionRelevant(e){const t=R[e];if(!t)return!0;const i=this.player.controlBar;return!i||!i.controls||Boolean(i.controls[t])}buildShortcutList(){const e=p.createElement("dl",{className:`${this.prefix}-help-list`}),t=this.player.options.keyboardShortcuts;for(const i of q){const s=t[i];if(!Array.isArray(s)||0===s.length)continue;if(!this.isActionRelevant(i))continue;const a=p.createElement("dt",{className:`${this.prefix}-help-action`,textContent:d.t(`help.actions.${i}`)}),n=p.createElement("dd",{className:`${this.prefix}-help-keys`});s.forEach((e,t)=>{t>0&&n.appendChild(p.createElement("span",{className:`${this.prefix}-help-key-sep`,textContent:d.t("help.or")})),n.appendChild(p.createElement("kbd",{className:`${this.prefix}-help-key`,textContent:this.formatKey(e)}))}),e.appendChild(a),e.appendChild(n)}return e}show(){if(this.isOpen)return;this.overlay?this._content&&this._content.replaceChildren(this.buildShortcutList()):(this.overlay=this.createElement(),this.player.container.appendChild(this.overlay));const e="undefined"!=typeof document?document.activeElement:null;this._triggerElement=e&&"function"==typeof e.focus?e:null,this.overlay.style.display="flex",this.isOpen=!0;const t=this.overlay.querySelector(`.${this.prefix}-settings-close`);t?.focus({preventScroll:!0}),this.player.emit("keyboardhelpopen")}hide(){if(!this.overlay)return;this.overlay.style.display="none",this.isOpen=!1;const e=this._triggerElement;if(this._triggerElement=null,e&&document.contains(e))try{e.focus({preventScroll:!0})}catch{this.player.container?.focus()}else this.player.container?.focus();this.player.emit("keyboardhelpclose")}toggle(){this.isOpen?this.hide():this.show()}destroy(){this._keydownHandler&&(document.removeEventListener("keydown",this._keydownHandler),this._keydownHandler=null),this.overlay&&this.overlay.parentNode&&this.overlay.parentNode.removeChild(this.overlay),this.overlay=null,this._content=null,this._triggerElement=null,this.isOpen=!1}},z=null,W=null,U=null,Q=["video","audio"],j=0,K=class e extends g{static instances=[];static THEMES=D;static observeLazy(t,i={},s="200px"){const a="string"==typeof t?document.querySelector(t):t;return a?"IntersectionObserver"in window?(A(a,i,s,(t,i)=>{new e(t,i)}),{cancel:()=>(e=>{const t=T.get(e);t&&(t.observer.unobserve(e),T.delete(e))})(a)}):(new e(a,i),null):(console.warn("VidPly: Element not found for lazy observation"),null)}element;container;options;state;renderer=null;controlBar=null;captionManager=null;keyboardManager=null;mediaSessionManager=null;transcriptManager=null;playlistManager=null;settingsDialog=null;keyboardHelp=null;audioDescriptionManager=null;signLanguageManager=null;floatingPlayerManager=null;storage;instanceId;_audioDescriptionDesiredState;_fallbackSources=null;_isAudioContent;_isFallingBack;_managersLoading=null;_originalElement;pseudoFullscreen=null;themeManager;posterManager;resumeManager=null;responsiveManager;metadataAlertsManager=null;_pendingSource=null;_sourceElementsCache=null;_sourceElementsDirty=!0;_switchingRenderer;_trackElementsCache=null;_trackElementsDirty=!0;_textTracksCache=null;_textTracksDirty;audioDescriptionCaptionTracks=[];audioDescriptionSourceElement=null;audioDescriptionSrc=null;currentSignLanguage=null;currentSource=null;debouncedPositionPlayOverlay=null;fullscreenChangeHandler=null;metadataCueChangeHandler=null;noticeElement=null;noticeTimeout=null;orientationHandler=null;orientationQuery=null;originalAudioDescriptionSource=null;originalSrc=null;playButtonOverlay=null;resizeHandler=null;resizeObserver=null;resumePromptElement=null;signLanguageDraggable=null;signLanguageHeader=null;signLanguageSettingsButton=null;signLanguageSettingsMenu=null;signLanguageSettingsMenuVisible=!1;signLanguageSources={};signLanguageSrc=null;signLanguageVideo=null;signLanguageWrapper=null;timeouts=new Set;trackArtworkElement=null;videoWrapper=null;loadingOverlayElement=null;_bufferingHideOnMediaPlaying=null;_lifecycleController=new AbortController;constructor(e,t={}){if(super(),this.element="string"==typeof e?document.querySelector(e):e,!this.element)throw new Error("VidPly: Element not found");if(j++,this.instanceId=j,"VIDEO"!==this.element.tagName&&"AUDIO"!==this.element.tagName){const e="string"==typeof t.mediaType?t.mediaType.toLowerCase():"video",i=Q.includes(e)?e:"video";i!==e&&console.warn(`[VidPly] Ignoring unsafe mediaType "${e}", falling back to "video"`);const s=document.createElement(i);Array.from(this.element.attributes).forEach(e=>{"id"===e.name||"class"===e.name||e.name.startsWith("data-")||s.setAttribute(e.name,e.value)}),this.element.querySelectorAll("track").forEach(e=>{s.appendChild(e.cloneNode(!0))}),this.element.replaceChildren(s),this.element=s}this._originalElement=this.element,this.options={width:null,height:null,poster:null,responsive:!0,fillContainer:!1,title:null,artist:null,album:null,mediaSession:!0,autoplay:!1,loop:!1,muted:!1,volume:.8,playbackSpeed:1,preload:"metadata",initialDuration:0,deferLoad:!1,requirePlaybackForAccessibilityToggles:!1,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,hideSpeedForHls:!1,hideSpeedForHlsVideo:!1,hideSpeedForDash:!1,hideSpeedForDashVideo:!1,captionsButton:!0,transcriptButton:!0,fullscreenButton:!0,helpButton:!0,pipButton:!1,floating:!1,floatingPosition:"bottom-right",floatingMinViewportWidth:768,downloadButton:!1,downloadUrl:null,downloadFormat:null,downloadFileSize:null,downloadFetchSize:!0,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,audioDescriptionMode:"auto",audioDescriptionSpeech:!0,audioDescriptionExtended:!0,signLanguage:!0,signLanguageSrc:null,signLanguageButton:!0,signLanguagePosition:"bottom-right",signLanguageDisplayMode:"both",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"],help:["?"]},ariaLabels:{},screenReaderAnnouncements:!0,highContrast:!1,focusHighlight:!0,metadataAlerts:{},metadataHashtags:{},language:"en",languages:["en"],resumePlayback:!0,resumeThreshold:10,resumePrompt:!0,thumbnailPreview:!0,thumbnailCacheSize:50,thumbnailPregenerate:!0,thumbnailInterval:10,thumbnailWidth:160,thumbnailHeight:90,thumbnailQuality:.8,lazyInit:!0,lazyMargin:"200px",theme:"dark",themeVariables:{},debug:!1,classPrefix:"vidply",iconType:"svg",pauseOthersOnPlay:!0,onReady:null,onPlay:null,onPause:null,onEnded:null,onTimeUpdate:null,onVolumeChange:null,onError:null,...t},this.options.metadataAlerts=this.options.metadataAlerts||{},this.options.metadataHashtags=this.options.metadataHashtags||{},this.noticeElement=null,this.noticeTimeout=null,this.storage=new r("vidply"),this.themeManager=new V(this),this.posterManager=new I(this),this.responsiveManager=new O(this);const i=this.storage.getPlayerPreferences();i&&("number"==typeof i.volume&&(this.options.volume=i.volume),"number"==typeof i.playbackSpeed&&(this.options.playbackSpeed=i.playbackSpeed),"boolean"==typeof i.muted&&(this.options.muted=i.muted)),this.state={ready:!1,playing:!1,paused:!0,ended:!1,buffering:!1,seeking:!1,hasStartedPlayback:!1,muted:this.options.muted,volume:this.options.volume,currentTime:0,duration:Number(this.options.initialDuration)>0?Number(this.options.initialDuration):0,playbackSpeed:this.options.playbackSpeed,fullscreen:!1,pip:!1,floating:null,captionsEnabled:this.options.captionsDefault,currentCaption:null,controlsVisible:!0,audioDescriptionEnabled:!1,signLanguageEnabled:!1,signLanguageInMainView:!1,resumePromptVisible:!1},this.resumePromptElement=null,this.originalSrc=null,this.audioDescriptionSrc=this.options.audioDescriptionSrc,this.signLanguageSrc=this.options.signLanguageSrc,this.signLanguageSources=this.options.signLanguageSources||{},this.currentSignLanguage=null,this.signLanguageVideo=null,this.audioDescriptionSourceElement=null,this.originalAudioDescriptionSource=null,this.audioDescriptionCaptionTracks=[],this._audioDescriptionDesiredState=!1,this._textTracksCache=null,this._textTracksDirty=!0,this._sourceElementsCache=null,this._sourceElementsDirty=!0,this._trackElementsCache=null,this._trackElementsDirty=!0,this.timeouts=new Set,this.container=document.createElement("div"),this.renderer=null,this.controlBar=null,this.captionManager=null,this.keyboardManager=null,this.settingsDialog=null,this.metadataCueChangeHandler=null,this.audioDescriptionManager=null,this.signLanguageManager=null,this._managersLoading=null,Object.defineProperties(this,{signLanguageWrapper:{get:()=>this.signLanguageManager?.wrapper,set:e=>{this.signLanguageManager&&(this.signLanguageManager.wrapper=e)}},signLanguageVideo:{get:()=>this.signLanguageManager?.video,set:e=>{this.signLanguageManager&&(this.signLanguageManager.video=e)}},signLanguageHeader:{get:()=>this.signLanguageManager?.header,set:e=>{this.signLanguageManager&&(this.signLanguageManager.header=e)}},signLanguageSettingsButton:{get:()=>this.signLanguageManager?.settingsButton,set:e=>{this.signLanguageManager&&(this.signLanguageManager.settingsButton=e)}},signLanguageSettingsMenu:{get:()=>this.signLanguageManager?.settingsMenu,set:e=>{this.signLanguageManager&&(this.signLanguageManager.settingsMenu=e)}},signLanguageSettingsMenuVisible:{get:()=>this.signLanguageManager?.settingsMenuVisible,set:e=>{this.signLanguageManager&&(this.signLanguageManager.settingsMenuVisible=e)}},signLanguageDraggable:{get:()=>this.signLanguageManager?.draggable,set:e=>{this.signLanguageManager&&(this.signLanguageManager.draggable=e)}},currentSignLanguage:{get:()=>this.signLanguageManager?.currentLanguage,set:e=>{this.signLanguageManager&&(this.signLanguageManager.currentLanguage=e)}}}),this.init()}get lifecycleSignal(){return this._lifecycleController.signal}get textTracks(){return this._textTracksCache&&!this._textTracksDirty||(this._textTracksCache=Array.from(this.element.textTracks||[]),this._textTracksDirty=!1),this._textTracksCache}get sourceElements(){return this._sourceElementsCache&&!this._sourceElementsDirty||(this._sourceElementsCache=Array.from(this.element.querySelectorAll("source")),this._sourceElementsDirty=!1),this._sourceElementsCache}get trackElements(){return this._trackElementsCache&&!this._trackElementsDirty||(this._trackElementsCache=Array.from(this.element.querySelectorAll("track")),this._trackElementsDirty=!1),this._trackElementsCache}showNotice(e,{timeout:t=2500,priority:i="polite"}={}){try{if(!e)return;if(!this.container)return;if(this.keyboardManager?.announce&&this.keyboardManager.announce(e,i),!this.noticeElement){const e=document.createElement("div");e.className=`${this.options.classPrefix}-notice`,e.setAttribute("role","status"),e.setAttribute("aria-live",i),e.setAttribute("aria-atomic","true"),e.style.position="absolute",e.style.left="0.75rem",e.style.right="0.75rem",e.style.top="0.75rem",e.style.zIndex="9999",e.style.padding="0.5rem 0.75rem",e.style.borderRadius="0.5rem",e.style.background="rgba(0, 0, 0, 0.75)",e.style.color="#fff",e.style.fontSize="0.875rem",e.style.lineHeight="1.3",e.style.pointerEvents="none",this.noticeElement=e,this.container.appendChild(e)}const s=this.noticeElement;s.textContent=e,s.style.display="block",this.noticeTimeout&&(clearTimeout(this.noticeTimeout),this.noticeTimeout=null),this.noticeTimeout=setTimeout(()=>{this.noticeElement&&(this.noticeElement.style.display="none")},t)}catch{}}async init(){try{if(this.log("Initializing VidPly player"),this.options.languageFiles)try{await d.loadLanguagesFromUrls(this.options.languageFiles)}catch(e){console.warn("Failed to load some language files:",e)}if(this.options.languageFile&&this.options.languageFileUrl)try{await d.loadLanguageFromUrl(this.options.languageFile,this.options.languageFileUrl),this.log(`Custom language file loaded for ${this.options.languageFile}`)}catch(e){console.warn(`Failed to load language file for ${this.options.languageFile}:`,e)}if(!this.options.language||"en"===this.options.language){const e=this.detectHtmlLanguage();e&&(this.options.language=e,this.log(`Auto-detected language from HTML: ${e}`))}if(this.options.language||(this.options.language="en"),await d.ensureLanguage(this.options.language),d.setLanguage(this.options.language),this.createContainer(),this.options.floating&&this.element&&"VIDEO"===this.element.tagName)try{const e=this.element;e.disablePictureInPicture=!0,e.disableRemotePlayback=!0,this.element.setAttribute("disablepictureinpicture",""),this.element.setAttribute("disableremoteplayback","")}catch(e){this.log(`Failed to disable native PiP: ${e}`,"warn")}this.element.src||this.element.querySelector("source")?.src?await this.initializeRenderer():this.log("No initial source - waiting for playlist or manual load"),await this.initFeatureManagers(),this.options.controls&&(this.controlBar=new P(this),this.videoWrapper?.appendChild(this.controlBar.element)),this.options.captions&&(this.captionManager=new n(this)),this.options.transcript&&await this.ensureTranscriptManager(),this.setupMetadataHandling(),this.options.keyboard&&(this.keyboardManager=new M(this)),this.options.mediaSession&&(this.mediaSessionManager=new E(this)),this.setupResponsiveHandlers(),this.options.startTime>0&&this.seek(this.options.startTime),requestAnimationFrame(()=>{this.options.muted?this.mute():this.renderer&&this.renderer.media&&this.renderer.setMuted(!1),.8!==this.options.volume?this.setVolume(this.options.volume):this.renderer&&this.renderer.media&&this.renderer.setVolume(this.options.volume)}),this.options.resumePlayback&&this.initResumePlayback(),this.state.ready=!0,this._originalElement.classList.add("vidply-initialized"),this.emit("ready"),this.options.onReady&&this.options.onReady.call(this),this.options.autoplay&&this.play(),this.log("Player initialized successfully")}catch(e){this.handleError(e)}}async ensureTranscriptManager(){if(this.transcriptManager)return this.transcriptManager;if(!this.options.transcript&&!this.options.transcriptButton)return null;const e=await import("./vidply.TranscriptManager-4B2QKYGQ.min.js"),t=e.TranscriptManager||e.default;return t?(this.transcriptManager=new t(this),this.transcriptManager):null}async toggleTranscript(){const e=await this.ensureTranscriptManager();e&&(e.toggleTranscript(),this.controlBar&&this.controlBar.updateTranscriptButton())}async ensureAudioDescriptionManager(){if(this.audioDescriptionManager)return this.audioDescriptionManager;if(!this.hasAudioDescriptionContent())return null;const e=await(async()=>{if(!z){const e=await import("./vidply.AudioDescriptionManager-EKWUNOPE.min.js");z=e.AudioDescriptionManager}return z})();return this.audioDescriptionManager=new e(this),this.audioDescriptionManager}hasAudioDescriptionContent(){return!(!this.options.audioDescriptionSrc&&!this.audioDescriptionSrc)||(!!this.sourceElements.some(e=>e.getAttribute("data-desc-src")||e.getAttribute("data-orig-src"))||(this.element?Array.from(this.element.textTracks||[]):[]).some(e=>"descriptions"===e.kind))}async ensureSignLanguageManager(){if(this.signLanguageManager)return this.signLanguageManager;if(!this.hasSignLanguageContent())return null;const e=await(async()=>{if(!W){const e=await import("./vidply.SignLanguageManager-JUOSA5AM.min.js");W=e.SignLanguageManager}return W})();return this.signLanguageManager=new e(this),this.signLanguageManager}hasSignLanguageContent(){return!!(this.options.signLanguageSrc||this.signLanguageSrc||this.options.signLanguageSources&&Object.keys(this.options.signLanguageSources).length>0)}async ensureFloatingPlayerManager(){if(this.floatingPlayerManager)return this.floatingPlayerManager;if(!this.options.floating)return null;if(!this.element||"VIDEO"!==this.element.tagName)return null;const e=await(async()=>{if(!U){const e=await import("./vidply.FloatingPlayerManager-VZXHPCPM.min.js");U=e.FloatingPlayerManager}return U})();return this.floatingPlayerManager=new e(this),this.floatingPlayerManager}async initFeatureManagers(){const e=[];this.hasAudioDescriptionContent()&&e.push(this.ensureAudioDescriptionManager()),this.hasSignLanguageContent()&&e.push(this.ensureSignLanguageManager()),this.options.floating&&this.element&&"VIDEO"===this.element.tagName&&e.push(this.ensureFloatingPlayerManager()),e.length>0&&await Promise.all(e),this.audioDescriptionManager&&this.audioDescriptionManager.initFromSourceElements(this.sourceElements,this.trackElements)}detectHtmlLanguage(){const e=document.documentElement.lang||document.documentElement.getAttribute("lang");if(!e)return null;const t=e.toLowerCase().split("-")[0];return t?d.translations[t]||d.builtInLanguageLoaders&&d.builtInLanguageLoaders[t]?t:(this.log(`Language "${e}" not available, using English as fallback`),null):null}initResumePlayback(){this.resumeManager||(this.resumeManager=new N(this)),this.resumeManager.init()}getVideoId(){const e=this.element.getAttribute("data-video-id")||this.element.dataset.videoId||this._originalElement?.getAttribute("data-video-id")||this._originalElement?.dataset?.videoId;if(e)return e;let t=this.element.src;if(!t){const e=this.element.querySelector("source");t=e?.src}return t?this._hashString(t):null}_hashString(e){let t=0;for(let i=0;i<e.length;i++)t=(t<<5)-t+e.charCodeAt(i),t&=t;return"v_"+Math.abs(t).toString(36)}saveProgress(){this.resumeManager?.saveProgress()}checkForResume(){this.resumeManager?.checkForResume()}showResumePrompt(e){this.resumeManager?.showPrompt(e)}hideResumePrompt(){this.resumeManager?.hidePrompt()}applyTheme(){this.themeManager.apply()}setTheme(e,t={}){this.themeManager.set(e,t)}getTheme(){return this.themeManager.get()}setThemeVariable(e,t){this.themeManager.setVariable(e,t)}resetTheme(){this.themeManager.reset()}createContainer(){const t=this.instanceId>1?`${d.t("player.label")} ${this.instanceId}`:d.t("player.label");this.container=p.createElement("div",{className:`${this.options.classPrefix}-player`,attributes:{role:"region","aria-label":t,tabindex:"0"}});const i=this.element.tagName.toLowerCase();if(this.container.classList.add(`${this.options.classPrefix}-${i}`),this.options.responsive&&this.container.classList.add(`${this.options.classPrefix}-responsive`),this.videoWrapper=p.createElement("div",{className:`${this.options.classPrefix}-video-wrapper`}),this.element.parentNode?.insertBefore(this.container,this.element),"AUDIO"===this.element.tagName&&this.options.poster){const e=C(this.options.poster);e?(this.trackArtworkElement=p.createElement("div",{className:`${this.options.classPrefix}-track-artwork`,attributes:{"aria-hidden":"true"}}),this.trackArtworkElement.style.backgroundImage=`url("${x(e)}")`,this.container.appendChild(this.trackArtworkElement)):this.log("[VidPly] Ignored unsafe poster URL","warn")}if(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%","VIDEO"===this.element.tagName&&this.options.playsInline&&(this.element.setAttribute("playsinline",""),this.element.playsInline=!0),this.options.width&&(this.container.style.width="number"==typeof this.options.width?`${this.options.width}px`:this.options.width),this.options.height&&(this.container.style.height="number"==typeof this.options.height?`${this.options.height}px`:this.options.height),this.options.poster&&"VIDEO"===this.element.tagName){const e=C(this.resolvePosterPath(this.options.poster));e&&(this.element.poster=e)}"VIDEO"===this.element.tagName&&this.createPlayButtonOverlay(),this.createBufferingLoadingOverlay(),this.element.vidply=this,e.instances.push(this),this.element.style.cursor="pointer",this.element.addEventListener("click",e=>{e.target===this.element&&this.toggle()},{signal:this.lifecycleSignal}),this.on("play",()=>{this.state.hasStartedPlayback=!0,this.hidePosterOverlay()}),this.on("timeupdate",()=>{this.state.hasStartedPlayback&&this.state.currentTime>0&&this.hidePosterOverlay()}),this.element.addEventListener("loadeddata",()=>{this.state.hasStartedPlayback&&(this.state.playing||this.state.currentTime>0)&&this.hidePosterOverlay()},{once:!0}),this.applyTheme()}createPlayButtonOverlay(){const e=i();this.playButtonOverlay=e,e.addEventListener("click",()=>{this.toggle()}),this.videoWrapper?.appendChild(e),this.on("play",()=>{e.style.opacity="0",e.style.pointerEvents="none"}),this.on("pause",()=>{e.style.opacity="1",e.style.pointerEvents="auto",this.positionPlayOverlayOnMobile()}),this.on("ended",()=>{e.style.opacity="1",e.style.pointerEvents="auto",this.positionPlayOverlayOnMobile()});const t=o(()=>{this.positionPlayOverlayOnMobile()},150);this.debouncedPositionPlayOverlay=t,window.addEventListener("resize",t,{signal:this.lifecycleSignal}),this.on("loadedmetadata",()=>{this.positionPlayOverlayOnMobile()}),this.on("enterfullscreen",()=>{c(()=>this.positionPlayOverlayOnMobile(),100)}),this.on("exitfullscreen",()=>{c(()=>this.positionPlayOverlayOnMobile(),100)})}createBufferingLoadingOverlay(){if(!this.videoWrapper)return;const e=this.options.classPrefix,t=d.t("player.buffering"),i=p.createElement("div",{className:`${e}-loading`,attributes:{"aria-busy":"false"}}),s=p.createElement("span",{className:`${e}-sr-only`,attributes:{id:`${e}-buffering-live-${this.instanceId}`,"aria-live":"polite","aria-atomic":"true"}});i.appendChild(s),this.loadingOverlayElement=i,this.videoWrapper.appendChild(i);const a=()=>this.container?.classList.contains(`${e}-external-controls`),n=()=>{this.container.classList.contains(`${e}-buffering`)&&(this.container.classList.remove(`${e}-buffering`),i.setAttribute("aria-busy","false"),s.textContent="")};this.on("waiting",()=>{a()||(this.state.hasStartedPlayback||this.state.seeking)&&(this.container.classList.add(`${e}-buffering`),i.setAttribute("aria-busy","true"),s.textContent=t)}),this.on("canplay",n),this.on("pause",n),this.on("ended",n),this._bufferingHideOnMediaPlaying=n,this.element.addEventListener("playing",this._bufferingHideOnMediaPlaying),this.on("timeupdate",()=>{this.container.classList.contains(`${e}-buffering`)&&n()})}positionPlayOverlayOnMobile(){if(!this.playButtonOverlay||"VIDEO"!==this.element.tagName)return;if(!l())return void(this.playButtonOverlay.style.top="");const e=this.element.getBoundingClientRect(),t=this.videoWrapper?.getBoundingClientRect();t&&(this.playButtonOverlay.style.top=e.top-t.top+e.height/2+"px")}async initializeRenderer(){let e=this._pendingSource,t=null;if(e)this._fallbackSources=[];else{const t=Array.from(this.element.querySelectorAll("source"));if(t.length>1){const i=this._selectBestSource(t);e=i.src,this._fallbackSources=i.fallbacks}else e=this.element.src||t[0]?.src,this._fallbackSources=[]}if(!e)throw new Error("No media source found");this.currentSource=e,this._pendingSource=null,this.hasAudioDescriptionContent()&&await this.ensureAudioDescriptionManager(),this.audioDescriptionManager?.initFromSourceElements(this.sourceElements,this.trackElements),this.originalSrc||(this.originalSrc=e),t=await this._detectRendererClass(e),this.log(`Using ${t?.name||"HTML5Renderer"} renderer`),this.renderer=new t(this);const i=(this._fallbackSources?.length??0)>0?1e4:0;if(i>0){let e;await Promise.race([this.renderer.init(),new Promise((t,s)=>{e=setTimeout(()=>s(new Error(`Renderer init timed out after ${i}ms`)),i)})]).finally(()=>{void 0!==e&&clearTimeout(e)})}else await this.renderer.init();this.invalidateTrackCache()}async _detectRendererClass(e){if(e.includes("youtube.com")||e.includes("youtu.be")){const e=await import("./vidply.YouTubeRenderer-ITRTC7NR.min.js");return e.YouTubeRenderer??e.default}if(e.includes("vimeo.com")){const e=await import("./vidply.VimeoRenderer-MR3UYLY7.min.js");return e.VimeoRenderer??e.default}if(e.includes(".m3u8")){const e=await import("./vidply.HLSRenderer-Q6EFYKID.min.js");return e.HLSRenderer??e.default}if(e.includes(".mpd")){const e=await import("./vidply.DASHRenderer-CIDAHFWM.min.js");return e.DASHRenderer??e.default}if(e.includes("soundcloud.com")||e.includes("api.soundcloud.com")){const e=await import("./vidply.SoundCloudRenderer-7ODD46PO.min.js");return e.SoundCloudRenderer??e.default}return a}_selectBestSource(e){const t="undefined"!=typeof MediaSource,i=e.map(e=>({src:e.src||e.getAttribute("src")||"",type:e.type||e.getAttribute("type")||"",el:e})),s=""!==document.createElement("video").canPlayType("application/vnd.apple.mpegurl");let a;if(t&&(a=i.find(e=>e.src.includes(".mpd"))),!a){const e=i.find(e=>e.src.includes(".m3u8"));e&&(t||s)&&(a=e)}a||(a=i.find(e=>!e.src.includes(".mpd")&&!e.src.includes(".m3u8"))||i[0]);const n=i.filter(e=>e!==a).map(e=>({src:e.src,type:e.type}));return{src:a?.src??"",fallbacks:n}}async _fallbackToNextSource(){if(!this._fallbackSources||0===this._fallbackSources.length)return!1;const e=this._fallbackSources.shift();if(!e)return!1;this.log(`Falling back to next source: ${e.src}`);try{return this.renderer&&"function"==typeof this.renderer.destroy&&(this.renderer.destroy(),this.renderer=null),this.currentSource=e.src,this._pendingSource=e.src,this._isFallingBack=!0,await this.initializeRenderer(),this._isFallingBack=!1,!0}catch{return this.log(`Fallback source failed: ${e.src}`,"warn"),this._isFallingBack=!1,this._fallbackToNextSource()}}invalidateTrackCache(){this._textTracksDirty=!0,this._trackElementsDirty=!0,this._sourceElementsDirty=!0}findTextTrack(e,t=null){return this.textTracks.find(t?i=>i.kind===e&&i.language===t:t=>t.kind===e)}findSourceElement(e,t=null){return this.sourceElements.find(t?i=>i.getAttribute(e)===t:t=>t.hasAttribute(e))}findTrackElement(e){return this.trackElements.find(t=>t.track===e)}resolvePosterPath(e){return this.posterManager.resolvePath(e)}async generatePosterFromVideo(e=10){return this.posterManager.generateFromVideo(e)}async autoGeneratePoster(){return this.posterManager.autoGenerate()}showPosterOverlay(){this.posterManager.showOverlay()}hidePosterOverlay(){this.posterManager.hideOverlay()}setManagedTimeout(e,t){const i=setTimeout(()=>{this.timeouts.delete(i),e()},t);return this.timeouts.add(i),i}clearManagedTimeout(e){e&&(clearTimeout(e),this.timeouts.delete(e))}isExternalRendererUrl(e){return!!e&&(e.includes("youtube.com")||e.includes("youtu.be")||e.includes("vimeo.com")||e.includes("soundcloud.com")||e.includes("api.soundcloud.com")||e.includes(".m3u8")||e.includes(".mpd"))}async load(e){try{this.log("Loading new media:",e.src),this.renderer&&this.pause();const t=window.scrollX||window.pageXOffset,i=window.scrollY||window.pageYOffset;this.trackElements.forEach(e=>e.remove()),this.invalidateTrackCache();const s=this.isExternalRendererUrl(e.src);if(s&&(this._switchingRenderer=!0),s?(this.element.removeAttribute("src"),this.element.querySelectorAll("source").forEach(e=>e.removeAttribute("src"))):(this.element.src=e.src,e.type&&(this.element.type=e.type)),this._pendingSource=e.src,this._isAudioContent=Boolean(e.type&&e.type.startsWith("audio/")),this.container&&(this._isAudioContent?this.container.classList.add("vidply-audio-content"):this.container.classList.remove("vidply-audio-content")),e.poster&&"VIDEO"===this.element.tagName)if(this._isAudioContent){if(this.element.removeAttribute("poster"),this.videoWrapper){const t=this.resolvePosterPath(e.poster);this.videoWrapper.style.setProperty("--vidply-poster-image",`url("${t}")`),this.videoWrapper.classList.add("vidply-forced-poster")}}else this.element.poster=this.resolvePosterPath(e.poster),this.videoWrapper&&(this.videoWrapper.classList.remove("vidply-forced-poster"),this.videoWrapper.style.removeProperty("--vidply-poster-image"));e.tracks&&e.tracks.length>0&&(e.tracks.forEach(e=>{const t=document.createElement("track");t.src=e.src??"",t.kind=e.kind||"captions",t.srclang=e.srclang||"en",t.label=e.label||e.srclang||"",e.default&&(t.default=!0),"string"==typeof e.describedSrc&&t.setAttribute("data-desc-src",e.describedSrc);const i=this.element.firstChild;i&&i.nodeType===Node.ELEMENT_NODE&&"TRACK"!==i.tagName?this.element.insertBefore(t,i):this.element.appendChild(t)}),this.invalidateTrackCache());const a=this.state.signLanguageEnabled,r=this.state.audioDescriptionEnabled;this.audioDescriptionSrc=e.audioDescriptionSrc||null,this.signLanguageSrc=e.signLanguageSrc||null,this.originalSrc=e.src,this.audioDescriptionManager&&(this.audioDescriptionManager.updateSources(e.audioDescriptionSrc),this.audioDescriptionManager.reinitialize()),this.signLanguageManager&&this.signLanguageManager.updateSources(e.signLanguageSrc,e.signLanguageSources),r&&this.disableAudioDescription(),a&&this.disableSignLanguage();const o=this.shouldChangeRenderer(e.src),l=!o&&this.renderer&&(this.renderer.dash||this.renderer.hls);if((o||l)&&this.renderer&&(this.renderer.destroy(),this.renderer=null,this.controlBar&&this.controlBar.removeHlsCaptionButtons(!0),this.transcriptManager?.isVisible&&this.transcriptManager.hideTranscript()),!this.renderer||o||l)await this.initializeRenderer();else if(this.renderer.media=this.element,this.options.deferLoad){try{this.element.preload=this.options.preload||"metadata"}catch{}if(this.renderer){const e=this.renderer;"boolean"==typeof e._didDeferredLoad&&(e._didDeferredLoad=!1),"boolean"==typeof e._hlsSourceLoaded&&(e._hlsSourceLoaded=!1),"boolean"==typeof e._dashSourceLoaded&&(e._dashSourceLoaded=!1),"_pendingSrc"in this.renderer&&(e._pendingSrc=this._pendingSource||this.currentSource||null)}}else this.element.load();if(s?setTimeout(()=>{this._switchingRenderer=!1},500):this._switchingRenderer=!1,window.scrollTo(t,i),l)this.captionManager&&(this.captionManager.disable(),this.captionManager.tracks=[]),this.transcriptManager?.isVisible&&this.transcriptManager.hideTranscript();else{if(this.captionManager&&(this.captionManager.destroy(),this.captionManager=new n(this)),this.transcriptManager){const e=this.transcriptManager.isVisible;this.transcriptManager.destroy(),this.transcriptManager=null;const t=await this.ensureTranscriptManager();e&&this.controlBar&&this.controlBar.hasCaptionTracks()&&t?.showTranscript()}this.controlBar&&this.updateControlBar()}window.scrollTo(t,i),a&&this.signLanguageSrc&&setTimeout(()=>{this.enableSignLanguage(),window.scrollTo(t,i)},150),r&&this.audioDescriptionSrc&&setTimeout(()=>{this.enableAudioDescription(),window.scrollTo(t,i)},150),this.emit("sourcechange",e),this.log("Media loaded successfully")}catch(e){this.handleError(e)}}ensureLoaded(){try{if(!this.renderer)return;"function"==typeof this.renderer.ensureLoaded&&this.renderer.ensureLoaded()}catch{}}updateControlBar(){if(!this.controlBar)return;const e=this.controlBar;e.element.innerHTML="",e.createControls(),e.attachEvents(),e.setupAutoHide(),e.setupOverflowDetection()}shouldChangeRenderer(e){if(!this.renderer)return!0;const t=e.includes("youtube.com")||e.includes("youtu.be"),i=e.includes("vimeo.com"),s=e.includes(".m3u8"),a=e.includes(".mpd"),n=e.includes("soundcloud.com")||e.includes("api.soundcloud.com"),r=this.renderer.constructor.name;return!((!t||"YouTubeRenderer"===r)&&(!i||"VimeoRenderer"===r)&&(!s||"HLSRenderer"===r)&&(!a||"DASHRenderer"===r)&&(!n||"SoundCloudRenderer"===r)&&(t||i||s||a||n||"HTML5Renderer"===r))}play(){this.renderer?this.renderer.play():this.playlistManager&&Array.isArray(this.playlistManager.tracks)&&this.playlistManager.tracks.length>0&&this.playlistManager.play(this.playlistManager.currentIndex>=0?this.playlistManager.currentIndex:0,!0)}pause(){this.renderer&&this.renderer.pause()}stop(){this.pause(),this.seek(0)}toggle(){this.state.playing?this.pause():this.play()}seek(e){if("number"!=typeof e||!Number.isFinite(e))return;const t=e<0?0:e;this.hidePosterOverlay(),this.renderer&&this.renderer.seek(t)}seekForward(e=this.options.seekInterval){const t=Number.isFinite(e)?e:5,i=this.state.currentTime+t,s=this.state.duration>0?Math.min(i,this.state.duration):i;this.seek(s)}seekBackward(e=this.options.seekInterval){const t=Number.isFinite(e)?e:5;this.seek(Math.max(this.state.currentTime-t,0))}setVolume(e){if("number"!=typeof e||!Number.isFinite(e))return;const t=Math.max(0,Math.min(1,e));this.renderer&&this.renderer.setVolume(t),this.state.volume=t,t>0&&this.state.muted&&(this.state.muted=!1,this.renderer&&this.renderer.setMuted(!1),this.emit("volumechange")),this.savePlayerPreferences()}getVolume(){return this.state.volume}mute(){this.renderer&&this.renderer.setMuted(!0),this.state.muted=!0,this.savePlayerPreferences(),this.emit("volumechange")}unmute(){this.renderer&&this.renderer.setMuted(!1),this.state.muted=!1,this.savePlayerPreferences(),this.emit("volumechange")}toggleMute(){this.state.muted?this.unmute():this.mute()}setPlaybackSpeed(e){if("number"!=typeof e||!Number.isFinite(e))return;const 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(){const e=this.container;let t=null;/iPad|iPhone|iPod/.test(navigator.userAgent)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1?this._enablePseudoFullscreen():(e.requestFullscreen?t=e.requestFullscreen():e.webkitRequestFullscreen?t=e.webkitRequestFullscreen():e.mozRequestFullScreen?t=e.mozRequestFullScreen():e.msRequestFullscreen&&(t=e.msRequestFullscreen()),t&&"function"==typeof t.catch&&t.catch(e=>{this.log("Fullscreen API failed, using pseudo-fullscreen:",e.message),this._enablePseudoFullscreen()}),e.requestFullscreen||e.webkitRequestFullscreen||e.mozRequestFullScreen||e.msRequestFullscreen?(this.state.fullscreen=!0,this.container.classList.add(`${this.options.classPrefix}-fullscreen`),this.emit("fullscreenchange",!0)):this._enablePseudoFullscreen())}exitFullscreen(){const e=document;Boolean(document.fullscreenElement||e.webkitFullscreenElement||e.mozFullScreenElement||e.msFullscreenElement)?document.exitFullscreen?document.exitFullscreen():e.webkitExitFullscreen?e.webkitExitFullscreen():e.mozCancelFullScreen?e.mozCancelFullScreen():e.msExitFullscreen&&e.msExitFullscreen():this._disablePseudoFullscreen(),this.state.fullscreen=!1,this.container.classList.remove(`${this.options.classPrefix}-fullscreen`),this.emit("fullscreenchange",!1)}toggleFullscreen(){this.state.fullscreen?this.exitFullscreen():this.enterFullscreen()}_enablePseudoFullscreen(){this.pseudoFullscreen||(this.pseudoFullscreen=new B(this)),this.pseudoFullscreen.enable()}_disablePseudoFullscreen(){this.pseudoFullscreen?.disable()}enterPiP(){if(this.options.floating)return void(this.floatingPlayerManager&&this.floatingPlayerManager.togglePinned());const e=this.element;"function"==typeof e.requestPictureInPicture&&(e.requestPictureInPicture(),this.state.pip=!0,this.emit("pipchange",!0))}exitPiP(){this.options.floating?this.floatingPlayerManager&&this.state.floating&&this.floatingPlayerManager.exit("manual"):document.pictureInPictureElement&&(document.exitPictureInPicture(),this.state.pip=!1,this.emit("pipchange",!1))}togglePiP(){this.options.floating?this.floatingPlayerManager&&this.floatingPlayerManager.togglePinned():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){if("string"!=typeof e||!e)return!1;const t=[this.lifecycleSignal];"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&t.push(AbortSignal.timeout(8e3));const i=1===t.length?t[0]:AbortSignal.any?.(t)??t[0];try{return(await fetch(e,{method:"HEAD",cache:"no-cache",signal:i})).ok}catch(t){return this.options.debug&&this.log(`validateTrackExists("${e}") failed: ${t?.message??t}`,"warn"),!1}}stripVTTFormatting(e){return e?e.replace(/<[^>]+>/g,"").replace(/\n/g," ").trim().toLowerCase():""}findMatchingCaptionTime(e,t){if(!e||!t||0===t.length)return null;const i=this.stripVTTFormatting(e);for(const e of t){if("captions"!==e.kind&&"subtitles"!==e.kind)continue;const t=e.track;if(t&&t.cues)for(let e=0;e<t.cues.length;e++){const s=t.cues[e],a=this.stripVTTFormatting(s.text);if(a===i)return s.startTime;const n=i.split(/\s+/).filter(e=>e.length>2),r=a.split(/\s+/).filter(e=>e.length>2);if(n.length>0&&r.length>0&&n.filter(e=>r.includes(e)).length/n.length>=.8)return s.startTime}}return null}async enableAudioDescription(){const e=await this.ensureAudioDescriptionManager();return e?.enable()}async disableAudioDescription(){const e=await this.ensureAudioDescriptionManager();return e?.disable()}async toggleAudioDescription(){if(this.options.requirePlaybackForAccessibilityToggles&&!this.renderer&&this.playlistManager?.tracks?.length)return void this.showNotice(d.t("player.startPlaybackForAudioDescription"));const e=await this.ensureAudioDescriptionManager();return e?!this.renderer&&this.playlistManager&&this.playlistManager.tracks?.length?(e.desiredState=!e.desiredState,this.state.audioDescriptionEnabled=e.desiredState,this.emit(e.desiredState?"audiodescriptionenabled":"audiodescriptiondisabled"),void this.play()):e.toggle():void 0}async enableSignLanguage(){const e=await this.ensureSignLanguageManager();return e?.enable()}async disableSignLanguage(){const e=await this.ensureSignLanguageManager();return e?.disable()}async toggleSignLanguage(){if(this.options.requirePlaybackForAccessibilityToggles&&!this.renderer&&this.playlistManager?.tracks?.length)return void this.showNotice(d.t("player.startPlaybackForSignLanguage"));const e=await this.ensureSignLanguageManager();if(e){if(!this.renderer&&this.playlistManager&&this.playlistManager.tracks?.length){const t=e.enabled,i=e.toggle();return!t&&e.enabled&&this.play(),i}return e.toggle()}}setupSignLanguageInteraction(){return this.signLanguageManager?._setupInteraction()}switchSignLanguage(e){return this.signLanguageManager?.switchLanguage(e)}showSignLanguageSettingsMenu(){return this.signLanguageManager?.showSettingsMenu()}hideSignLanguageSettingsMenu({focusButton:e=!0}={}){return this.signLanguageManager?.hideSettingsMenu({focusButton:e})}constrainSignLanguagePosition(){return this.signLanguageManager?.constrainPosition()}saveSignLanguagePreferences(){return this.signLanguageManager?.savePreferences()}cleanupSignLanguage(){return this.signLanguageManager?.cleanup()}showSettings(){console.warn("[VidPly] Settings dialog has been removed. Use individual control buttons (speed, captions, etc.)")}hideSettings(){}toggleKeyboardHelp(){this.keyboardHelp||(this.keyboardHelp=new _(this)),this.keyboardHelp.toggle()}showKeyboardHelp(){this.keyboardHelp||(this.keyboardHelp=new _(this)),this.keyboardHelp.show()}hideKeyboardHelp(){this.keyboardHelp?.hide()}getCurrentTime(){return this.state.currentTime}getDuration(){return this.state.duration}isPlaying(){return this.state.playing}isPaused(){return this.state.paused}isEnded(){return this.state.ended}isMuted(){return this.state.muted}isFullscreen(){return this.state.fullscreen}handleError(e){if(this._switchingRenderer||this._isFallingBack)this.log("Suppressing error during renderer switch:",e,"debug");else{if(this._fallbackSources&&this._fallbackSources.length>0)return this.log("Renderer error, attempting fallback:",e,"warn"),void this._fallbackToNextSource().then(t=>{t||(this.log("All fallback sources exhausted","error"),this.emit("error",e),this.options.onError&&this.options.onError.call(this,e))});this.log("Error:",e,"error"),this.emit("error",e),this.options.onError&&this.options.onError.call(this,e)}}log(...e){if(!this.options.debug)return;let t="log";const i=console;if(e.length>0){const s=e[e.length-1];"string"==typeof s&&"function"==typeof i[s]&&(t=s,e=e.slice(0,-1))}0===e.length&&(e=[""]);const s=i[t];"function"==typeof s?s("[VidPly]",...e):console.log("[VidPly]",...e)}setupResponsiveHandlers(){this.responsiveManager.setup()}destroy(){this.log("Destroying player");try{this._lifecycleController.abort()}catch(e){this.log(`AbortController.abort failed: ${e}`,"warn")}if(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.audioDescriptionManager&&"function"==typeof this.audioDescriptionManager.destroy){try{this.audioDescriptionManager.destroy()}catch(e){this.log(`AudioDescriptionManager.destroy failed: ${e}`,"warn")}this.audioDescriptionManager=null}if(this.signLanguageManager&&"function"==typeof this.signLanguageManager.destroy){try{this.signLanguageManager.destroy()}catch(e){this.log(`SignLanguageManager.destroy failed: ${e}`,"warn")}this.signLanguageManager=null}if(this.playlistManager&&"function"==typeof this.playlistManager.destroy){try{this.playlistManager.destroy()}catch(e){this.log(`PlaylistManager.destroy failed: ${e}`,"warn")}this.playlistManager=null}if(this.settingsDialog&&"function"==typeof this.settingsDialog.destroy){try{this.settingsDialog.destroy()}catch(e){this.log(`SettingsDialog.destroy failed: ${e}`,"warn")}this.settingsDialog=null}if(this.keyboardHelp&&"function"==typeof this.keyboardHelp.destroy){try{this.keyboardHelp.destroy()}catch(e){this.log(`KeyboardHelp.destroy failed: ${e}`,"warn")}this.keyboardHelp=null}if(this.mediaSessionManager&&"function"==typeof this.mediaSessionManager.destroy){try{this.mediaSessionManager.destroy()}catch(e){this.log(`MediaSessionManager.destroy failed: ${e}`,"warn")}this.mediaSessionManager=null}if(this.floatingPlayerManager){try{this.floatingPlayerManager.destroy()}catch(e){this.log(`FloatingPlayerManager.destroy failed: ${e}`,"warn")}this.floatingPlayerManager=null}if(this.playButtonOverlay&&this.playButtonOverlay.parentNode&&(this.playButtonOverlay.remove(),this.playButtonOverlay=null),this._bufferingHideOnMediaPlaying&&(this.element.removeEventListener("playing",this._bufferingHideOnMediaPlaying),this._bufferingHideOnMediaPlaying=null),this.loadingOverlayElement&&this.loadingOverlayElement.parentNode&&(this.loadingOverlayElement.remove(),this.loadingOverlayElement=null),this.responsiveManager?.cleanup(),this.timeouts.forEach(e=>clearTimeout(e)),this.timeouts.clear(),this.metadataCueChangeHandler){const e=this.textTracks.find(e=>"metadata"===e.kind);e&&e.removeEventListener("cuechange",this.metadataCueChangeHandler),this.metadataCueChangeHandler=null}this.metadataAlertsManager?.cleanup();const t=e.instances.indexOf(this);t>=0&&e.instances.splice(t,1),this.container&&this.container.parentNode&&(this.container.parentNode.insertBefore(this.element,this.container),this.container.parentNode.removeChild(this.container)),this.removeAllListeners()}setupMetadataHandling(){this.metadataAlertsManager||(this.metadataAlertsManager=new H(this)),this.metadataAlertsManager.setupHandling()}normalizeMetadataSelector(e){return(this.metadataAlertsManager??this._ensureMetadataManager()).normalizeSelector(e)}resolveMetadataConfig(e,t){return(this.metadataAlertsManager??this._ensureMetadataManager()).resolveConfig(e,t)}cacheMetadataAlertContent(e,t={}){(this.metadataAlertsManager??this._ensureMetadataManager()).cacheContent(e,t)}restoreMetadataAlertContent(e,t={}){(this.metadataAlertsManager??this._ensureMetadataManager()).restoreContent(e,t)}focusMetadataTarget(e,t=null){(this.metadataAlertsManager??this._ensureMetadataManager()).focusTarget(e,t)}_ensureMetadataManager(){return this.metadataAlertsManager||(this.metadataAlertsManager=new H(this)),this.metadataAlertsManager}handleMetadataAlert(e,t={}){return(this.metadataAlertsManager??this._ensureMetadataManager()).handleAlert(e,t)}handleMetadataHashtags(e){(this.metadataAlertsManager??this._ensureMetadataManager()).handleHashtags(e)}handleMetadataCue(e){(this.metadataAlertsManager??this._ensureMetadataManager()).handleCue(e)}},X=0,Y=class{player;container;currentIndex;hostElement;initialTracks;instanceId;isChangingTrack;isPanelVisible;navigationFeedback;options;PlayerClass;playlistPanel;trackArtworkElement;trackInfoElement;tracks;uniqueId;constructor(e,t={}){this.player=e,this.tracks=[],this.initialTracks=Array.isArray(t.tracks)?t.tracks:[],this.currentIndex=-1,this.instanceId=++X,this.uniqueId=`vidply-playlist-${this.instanceId}`,this.options={...t,autoAdvance:!1!==t.autoAdvance,autoPlayFirst:!1!==t.autoPlayFirst,loop:Boolean(t.loop)||!1,showPanel:!1!==t.showPanel,recreatePlayers:Boolean(t.recreatePlayers)||!1},this.container=null,this.playlistPanel=null,this.trackInfoElement=null,this.trackArtworkElement=null,this.navigationFeedback=null,this.isPanelVisible=!1!==this.options.showPanel,this.isChangingTrack=!1,this.hostElement=t.hostElement??null,this.PlayerClass=t.PlayerClass??null,this.handleTrackEnd=this.handleTrackEnd.bind(this),this.handleTrackError=this.handleTrackError.bind(this),this.handlePlaybackStateChange=this.handlePlaybackStateChange.bind(this),this.handleFullscreenChange=this.handleFullscreenChange.bind(this),this.handleAudioDescriptionChange=this.handleAudioDescriptionChange.bind(this),this.player.playlistManager=this,this.init(),this.updatePlayerControls(),this.initialTracks.length>0&&this.loadPlaylist(this.initialTracks)}getTrackMediaType(e){const t=e.src||"";return t.includes("youtube.com")||t.includes("youtu.be")?"youtube":t.includes("vimeo.com")?"vimeo":t.includes("soundcloud.com")||t.includes("api.soundcloud.com")?"soundcloud":t.includes(".m3u8")?"hls":t.includes(".mpd")?"dash":e.type&&e.type.startsWith("audio/")?"audio":"video"}async recreatePlayerForTrack(e,t=!1){if(!this.hostElement||!this.PlayerClass)return console.warn("VidPly Playlist: Cannot recreate player - missing hostElement or PlayerClass"),!1;const i=this.getTrackMediaType(e),s="audio"===i?"audio":"video",a=this.isPanelVisible,n=[...this.tracks],r=this.currentIndex;this.trackArtworkElement&&this.trackArtworkElement.parentNode&&this.trackArtworkElement.parentNode.removeChild(this.trackArtworkElement),this.trackInfoElement&&this.trackInfoElement.parentNode&&this.trackInfoElement.parentNode.removeChild(this.trackInfoElement),this.navigationFeedback&&this.navigationFeedback.parentNode&&this.navigationFeedback.parentNode.removeChild(this.navigationFeedback),this.playlistPanel&&this.playlistPanel.parentNode&&this.playlistPanel.parentNode.removeChild(this.playlistPanel);const o=this.player?.options?{...this.player.options}:{};this.player&&(this.player.off("ended",this.handleTrackEnd),this.player.off("error",this.handleTrackError),this.player.playlistManager=null,this.player.destroy()),this.hostElement.innerHTML="";const l=document.createElement(s);l.setAttribute("preload",o.preload||"metadata"),"video"!==s||!e.poster||"video"!==i&&"hls"!==i&&"dash"!==i||l.setAttribute("poster",e.poster);if(!["youtube","vimeo","soundcloud","hls","dash"].includes(i)){const t=document.createElement("source");t.src=e.src||"",e.type&&(t.type=e.type),l.appendChild(t),e.tracks&&e.tracks.length>0&&e.tracks.forEach(e=>{const t=document.createElement("track");t.src=e.src||"",t.kind=e.kind||"captions",t.srclang=e.srclang||"en",t.label=e.label||e.srclang||"",e.default&&(t.default=!0),l.appendChild(t)})}this.hostElement.appendChild(l);const c={mediaType:s,poster:e.poster,audioDescriptionSrc:e.audioDescriptionSrc||null,audioDescriptionDuration:e.audioDescriptionDuration||null,signLanguageSrc:e.signLanguageSrc||null};if(Object.assign(c,o),this.player=new this.PlayerClass(l,c),this.player.playlistManager=this,await new Promise(e=>{this.player.on("ready",()=>e())}),this.player.on("ended",this.handleTrackEnd),this.player.on("error",this.handleTrackError),this.player.container){if(this.trackArtworkElement){const e=this.player.container.querySelector(".vidply-video-wrapper");e?this.player.container.insertBefore(this.trackArtworkElement,e):this.player.container.appendChild(this.trackArtworkElement)}this.trackInfoElement&&this.player.container.appendChild(this.trackInfoElement),this.navigationFeedback&&this.player.container.appendChild(this.navigationFeedback),this.playlistPanel&&this.player.container.appendChild(this.playlistPanel)}return this.container=this.player.container,this.updatePlayerControls(),this.tracks=n,this.currentIndex=r,this.updatePlaylistUI(),this.isPanelVisible=a,this.playlistPanel&&(this.playlistPanel.style.display=a?"":"none"),this.player.load({src:e.src??"",type:e.type,poster:e.poster,tracks:e.tracks||[],audioDescriptionSrc:e.audioDescriptionSrc||null,signLanguageSrc:e.signLanguageSrc||null}),t&&setTimeout(()=>{this.player.play()},100),!0}init(){this.player.on("ended",this.handleTrackEnd),this.player.on("error",this.handleTrackError),this.player.on("play",this.handlePlaybackStateChange),this.player.on("pause",this.handlePlaybackStateChange),this.player.on("ended",this.handlePlaybackStateChange),this.player.on("fullscreenchange",this.handleFullscreenChange),this.player.on("audiodescriptionenabled",this.handleAudioDescriptionChange),this.player.on("audiodescriptiondisabled",this.handleAudioDescriptionChange),this.options.showPanel&&this.createUI(),0===this.tracks.length&&0===this.initialTracks.length&&this.loadPlaylistFromAttribute()}loadPlaylistFromAttribute(){if(!this.player.element||!this.player.element.parentElement)return;const e=this.player.element.parentElement.parentElement,t=e?e.parentElement:null;if(!t)return;this.loadOptionsFromAttributes(t);const i=t.getAttribute("data-playlist");if(i)try{const e=JSON.parse(i);Array.isArray(e)&&e.length>0?this.loadPlaylist(e):console.warn("VidPly Playlist: data-playlist is not a valid array or is empty")}catch(e){console.error("VidPly Playlist: Failed to parse data-playlist attribute",e)}}loadOptionsFromAttributes(e){const t=e.getAttribute("data-playlist-auto-advance");null!==t&&(this.options.autoAdvance="true"===t);const i=e.getAttribute("data-playlist-auto-play-first");null!==i&&(this.options.autoPlayFirst="true"===i);const s=e.getAttribute("data-playlist-loop");null!==s&&(this.options.loop="true"===s);const a=e.getAttribute("data-playlist-show-panel");null!==a&&(this.options.showPanel="true"===a)}updatePlayerControls(){if(!this.player.controlBar)return;const e=this.player.controlBar;e.element.innerHTML="",e.createControls(),e.attachEvents(),e.setupAutoHide()}loadPlaylist(e){this.tracks=e,this.currentIndex=-1,this.container&&this.container.classList.add("vidply-has-playlist"),this.playlistPanel&&this.renderPlaylist(),e.length>0&&(this.options.autoPlayFirst?this.play(0):this.loadTrack(0).catch(()=>{})),this.updatePlaylistVisibilityInFullscreen()}async loadTrack(e){if(e<0||e>=this.tracks.length)return void console.warn("VidPly Playlist: Invalid track index",e);const t=this.tracks[e];if(!t)return;if(this.selectTrack(e),this.isChangingTrack=!0,this.options.recreatePlayers&&this.hostElement&&this.PlayerClass){const i=this.player?"AUDIO"===this.player.element.tagName?"audio":"video":null,s=this.getTrackMediaType(t);if(i!==("audio"===s||"soundcloud"===s?"audio":"video"))return await this.recreatePlayerForTrack(t,!1),this.selectTrack(e),this.player.emit("playlisttrackchange",{index:e,item:t,total:this.tracks.length}),void setTimeout(()=>{this.isChangingTrack=!1},150)}const i=this.player.load({src:t.src??"",type:t.type,poster:t.poster,tracks:t.tracks||[],audioDescriptionSrc:t.audioDescriptionSrc||null,signLanguageSrc:t.signLanguageSrc||null,signLanguageSources:t.signLanguageSources||{}});this.player?.options?.deferLoad&&"function"==typeof this.player.ensureLoaded&&Promise.resolve(i).then(()=>this.player?.ensureLoaded?.()).catch(()=>{}),this.player.emit("playlisttrackchange",{index:e,item:t,total:this.tracks.length}),setTimeout(()=>{this.isChangingTrack=!1},150)}selectTrack(e){if(e<0||e>=this.tracks.length)return void console.warn("VidPly Playlist: Invalid track index",e);const t=this.tracks[e];if(t){this.currentIndex=e;try{if("VIDEO"===this.player?.element?.tagName)if(t.poster){const e=C("function"==typeof this.player.resolvePosterPath?this.player.resolvePosterPath(t.poster):t.poster);e?(this.player.element.poster=e,this.player.applyPosterAspectRatio?.(e)):this.player.element.removeAttribute("poster")}else this.player.element.removeAttribute("poster");this.player.audioDescriptionSrc=t.audioDescriptionSrc||null,this.player.signLanguageSrc=t.signLanguageSrc||null,this.player.signLanguageSources=t.signLanguageSources||{},t.duration&&Number(t.duration)>0&&(this.player.state.duration=Number(t.duration)),this.player.audioDescriptionManager&&(this.player.audioDescriptionManager.src=t.audioDescriptionSrc||null,this.player.audioDescriptionManager.originalSource=t.src||this.player.originalSrc||null),this.player.signLanguageManager&&(this.player.signLanguageManager.src=t.signLanguageSrc||null,this.player.signLanguageManager.sources=t.signLanguageSources||{},this.player.signLanguageManager.currentLanguage=null),t.src&&!this.player.originalSrc&&(this.player.originalSrc=t.src),Array.from(this.player.element.querySelectorAll("track")).forEach(e=>e.remove()),Array.isArray(t.tracks)&&t.tracks.forEach(e=>{if(!e?.src)return;const t=document.createElement("track");t.src=e.src,t.kind=e.kind||"captions",t.srclang=e.srclang||"en",t.label=e.label||e.srclang||"Track",e.default&&(t.default=!0),e.describedSrc&&t.setAttribute("data-desc-src",e.describedSrc),this.player.element.appendChild(t)}),"function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache();const e=e=>{if(e&&"function"==typeof e.initFromSourceElements)try{e.captionTracks=[],e.initFromSourceElements(this.player.sourceElements,this.player.trackElements)}catch{}};if(this.player.audioDescriptionManager?e(this.player.audioDescriptionManager):this.player.hasAudioDescriptionContent?.()&&this.player.ensureAudioDescriptionManager().then(e).catch(()=>{}),this.player.captionManager&&"function"==typeof this.player.captionManager.loadTracks)try{this.player.captionManager.tracks=[],this.player.captionManager.currentTrack=null,this.player.captionManager.loadTracks()}catch{}"function"==typeof this.player.updateControlBar&&this.player.updateControlBar()}catch{}this.updateTrackInfo(t),this.updatePlaylistUI(),this.player.emit("playlisttrackselect",{index:e,item:t,total:this.tracks.length})}}async play(e,t=!1){if(e<0||e>=this.tracks.length)return void console.warn("VidPly Playlist: Invalid track index",e);const i=this.tracks[e];if(!i)return;if(this.isChangingTrack=!0,this.currentIndex=e,this.options.recreatePlayers&&this.hostElement&&this.PlayerClass){const t=this.player?"AUDIO"===this.player.element.tagName?"audio":"video":null,s=this.getTrackMediaType(i);if(t!==("audio"===s||"soundcloud"===s?"audio":"video"))return await this.recreatePlayerForTrack(i,!0),this.updateTrackInfo(i),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:i,total:this.tracks.length}),void setTimeout(()=>{this.isChangingTrack=!1},150)}let s=i.src;this.player?.audioDescriptionManager?.desiredState&&i.audioDescriptionSrc&&(this.player.originalSrc=i.src??null,this.player.audioDescriptionManager.originalSource=i.src??null,this.player.audioDescriptionManager.src=i.audioDescriptionSrc,s=i.audioDescriptionSrc),this.player.load({src:s??"",type:i.type,poster:i.poster,tracks:i.tracks||[],audioDescriptionSrc:i.audioDescriptionSrc||null,signLanguageSrc:i.signLanguageSrc||null,signLanguageSources:i.signLanguageSources||{}}),this.updateTrackInfo(i),this.updatePlaylistUI(),this.player.emit("playlisttrackchange",{index:e,item:i,total:this.tracks.length}),setTimeout(()=>{this.player.play(),setTimeout(()=>{this.isChangingTrack=!1},50)},100)}next(){let e=this.currentIndex+1;if(e>=this.tracks.length){if(!this.options.loop)return;e=0}this.play(e)}previous(){let e=this.currentIndex-1;if(e<0){if(!this.options.loop)return;e=this.tracks.length-1}this.play(e)}handleTrackEnd(){this.isChangingTrack||this.options.autoAdvance&&this.next()}isExternalRendererUrl(e){return!!e&&(e.includes("youtube.com")||e.includes("youtu.be")||e.includes("vimeo.com")||e.includes("soundcloud.com")||e.includes("api.soundcloud.com")||e.includes(".m3u8")||e.includes(".mpd"))}handleTrackError(e){const t=this.getCurrentTrack();t&&t.src&&this.isExternalRendererUrl(t.src)||this.isChangingTrack||(console.error("VidPly Playlist: Track error",e),this.options.autoAdvance&&setTimeout(()=>{this.next()},1e3))}handlePlaybackStateChange(){this.updatePlaylistVisibilityInFullscreen()}handleFullscreenChange(){setTimeout(()=>{this.updatePlaylistVisibilityInFullscreen()},50)}handleAudioDescriptionChange(){const e=this.getCurrentTrack();e&&(this.updateTrackInfo(e),this.updatePlaylistUI(),this.updatePlaylistDurations())}updatePlaylistDurations(){this.playlistPanel&&this.playlistPanel.querySelectorAll(".vidply-playlist-item").forEach((t,i)=>{const s=this.tracks[i];if(!s)return;const a=this.getEffectiveDuration(s),n=a?e.formatTime(a):"",r=t.querySelector(".vidply-playlist-duration-badge");r&&(r.textContent=n);const o=t.querySelector(".vidply-playlist-item-duration");o&&(o.textContent=n)})}getEffectiveDuration(e){return e?this.player.state.audioDescriptionEnabled&&e.audioDescriptionDuration?e.audioDescriptionDuration:e.duration||null:null}updatePlaylistVisibilityInFullscreen(){const e=this.playlistPanel;e&&this.tracks.length&&(this.player.state.fullscreen?this.player.state.playing?(e.classList.remove("vidply-playlist-fullscreen-visible"),setTimeout(()=>{this.player.state.playing&&this.player.state.fullscreen&&(e.style.display="none")},300)):(e.classList.add("vidply-playlist-fullscreen-visible"),e.style.display="block"):(e.classList.remove("vidply-playlist-fullscreen-visible"),e.style.display=this.isPanelVisible&&this.tracks.length>0?"block":"none"))}createUI(){this.container=this.player.container,this.container?(this.trackInfoElement=p.createElement("div",{className:"vidply-track-info",attributes:{role:"status"}}),this.trackInfoElement.style.display="none",this.container.appendChild(this.trackInfoElement),this.navigationFeedback=p.createElement("div",{className:"vidply-sr-only",attributes:{role:"status","aria-live":"polite","aria-atomic":"true"}}),this.container.appendChild(this.navigationFeedback),this.playlistPanel=p.createElement("div",{className:"vidply-playlist-panel",attributes:{id:`${this.uniqueId}-panel`,role:"region","aria-label":d.t("playlist.title"),"aria-labelledby":`${this.uniqueId}-heading`}}),this.playlistPanel.style.display="none",this.container.appendChild(this.playlistPanel)):console.warn("VidPly Playlist: No container found")}updateTrackInfo(t){if(!this.trackInfoElement)return;const i=this.currentIndex+1,s=this.tracks.length,a=t.title||d.t("playlist.untitled"),n=t.artist||"",r=this.getEffectiveDuration(t),o=r?e.formatTime(r):"",l=r?e.formatDuration(r):"",c=n?d.t("playlist.by")+n:"",u=l?`. ${l}`:"",h=d.t("playlist.nowPlaying",{current:i,total:s,title:a,artist:c})+u,y=d.t("playlist.trackOf",{current:i,total:s}),g=o?`<span class="vidply-track-duration" aria-hidden="true">${p.escapeHTML(o)}</span>`:"",m=t.description||"";this.trackInfoElement.innerHTML=`\n <span class="vidply-sr-only">${p.escapeHTML(h)}</span>\n <div class="vidply-track-header" aria-hidden="true">\n <span class="vidply-track-number">${p.escapeHTML(y)}</span>\n ${g}\n </div>\n <div class="vidply-track-title" aria-hidden="true">${p.escapeHTML(a)}</div>\n ${n?`<div class="vidply-track-artist" aria-hidden="true">${p.escapeHTML(n)}</div>`:""}\n ${m?`<div class="vidply-track-description" aria-hidden="true">${p.escapeHTML(m)}</div>`:""}\n `,this.trackInfoElement.style.display="block",this.updateTrackArtwork(t)}updateTrackArtwork(e){if("AUDIO"!==this.player?.element?.tagName)return void(this.trackArtworkElement&&(this.trackArtworkElement.style.display="none"));if(!this.trackArtworkElement&&this.container){this.trackArtworkElement=p.createElement("div",{className:"vidply-track-artwork",attributes:{"aria-hidden":"true"}}),this.trackArtworkElement.style.display="none";const e=this.container.querySelector(".vidply-video-wrapper");e?this.container.insertBefore(this.trackArtworkElement,e):this.container.appendChild(this.trackArtworkElement)}if(!this.trackArtworkElement)return;const t=e.poster?L(e.poster):null;t?(this.trackArtworkElement.style.backgroundImage=t,this.trackArtworkElement.style.display="block"):(this.trackArtworkElement.style.backgroundImage="",this.trackArtworkElement.style.display="none")}renderPlaylist(){if(!this.playlistPanel)return;this.playlistPanel.innerHTML="";const e=p.createElement("h2",{className:"vidply-playlist-header",attributes:{id:`${this.uniqueId}-heading`}});e.textContent=`${d.t("playlist.title")} (${this.tracks.length})`,this.playlistPanel.appendChild(e);const t=p.createElement("div",{className:"vidply-sr-only",attributes:{id:`${this.uniqueId}-keyboard-instructions`}});t.textContent=d.t("playlist.keyboardInstructions"),this.playlistPanel.appendChild(t);const i=p.createElement("ul",{className:"vidply-playlist-list",attributes:{role:"listbox","aria-labelledby":`${this.uniqueId}-heading`,"aria-describedby":`${this.uniqueId}-keyboard-instructions`}});this.tracks.forEach((e,t)=>{const s=this.createPlaylistItem(e,t);i.appendChild(s)}),this.playlistPanel.appendChild(i),this.isPanelVisible&&(this.playlistPanel.style.display="block")}createPlaylistItem(i,s){const a=i.title||d.t("playlist.trackUntitled",{number:s+1}),n=i.artist?d.t("playlist.by")+i.artist:"",r=this.getEffectiveDuration(i),o=r?e.formatTime(r):"",l=r?e.formatDuration(r):"",c=s===this.currentIndex;let u=`${a}${n}`;l&&(u+=`. ${l}`);const h=p.createElement("li",{className:c?"vidply-playlist-item vidply-playlist-item-active":"vidply-playlist-item",attributes:{"data-playlist-index":String(s),role:"none"}}),y=p.createElement("button",{className:"vidply-playlist-item-button",attributes:{type:"button",role:"option",tabIndex:0===s?"0":"-1","aria-label":u,"aria-posinset":String(s+1),"aria-setsize":String(this.tracks.length),"aria-checked":c?"true":"false"}});c&&(y.setAttribute("aria-current","true"),y.setAttribute("tabIndex","0"));const g=p.createElement("span",{className:"vidply-playlist-thumbnail-container",attributes:{"aria-hidden":"true"}}),m=p.createElement("span",{className:"vidply-playlist-thumbnail"}),f=i.poster?L(i.poster):null;if(f)m.style.backgroundImage=f;else{const e=t("music");e.classList.add("vidply-playlist-thumbnail-icon"),m.appendChild(e)}if(g.appendChild(m),o&&i.poster){const e=p.createElement("span",{className:"vidply-playlist-duration-badge"});e.textContent=o,g.appendChild(e)}y.appendChild(g);const v=p.createElement("span",{className:"vidply-playlist-item-info",attributes:{"aria-hidden":"true"}}),b=p.createElement("span",{className:"vidply-playlist-item-title-row"}),w=p.createElement("span",{className:"vidply-playlist-item-title"});if(w.textContent=a,b.appendChild(w),o&&!i.poster){const e=p.createElement("span",{className:"vidply-playlist-item-duration"});e.textContent=o,b.appendChild(e)}if(v.appendChild(b),i.artist){const e=p.createElement("span",{className:"vidply-playlist-item-artist"});e.textContent=i.artist,v.appendChild(e)}if(i.description){const e=p.createElement("span",{className:"vidply-playlist-item-description"});e.textContent=i.description,v.appendChild(e)}y.appendChild(v);const k=t("play");return k.classList.add("vidply-playlist-item-icon"),k.setAttribute("aria-hidden","true"),y.appendChild(k),y.addEventListener("click",()=>{const e=this.tracks[s];this.isExternalRendererUrl(e?.src)&&this.player.state.fullscreen?(this.player.exitFullscreen(),setTimeout(()=>{this.play(s,!0)},100)):this.play(s,!0)}),y.addEventListener("keydown",e=>{this.handlePlaylistItemKeydown(e,s)}),h.appendChild(y),h}handlePlaylistItemKeydown(e,t){if(!this.playlistPanel)return;const i=Array.from(this.playlistPanel.querySelectorAll(".vidply-playlist-item-button"));let s=-1,a="";switch(e.key){case"Enter":case" ":e.preventDefault(),e.stopPropagation();{const e=this.tracks[t];this.isExternalRendererUrl(e?.src)&&this.player.state.fullscreen?(this.player.exitFullscreen(),setTimeout(()=>{this.play(t,!0)},100)):this.play(t,!0)}return;case"ArrowDown":e.preventDefault(),e.stopPropagation(),t<i.length-1?s=t+1:a=d.t("playlist.endOfPlaylist",{current:i.length,total:i.length});break;case"ArrowUp":e.preventDefault(),e.stopPropagation(),t>0?s=t-1:a=d.t("playlist.beginningOfPlaylist",{total:i.length});break;case"PageDown":e.preventDefault(),e.stopPropagation(),s=Math.min(t+5,i.length-1),s===i.length-1&&t!==s&&(a=d.t("playlist.jumpedToLastTrack",{current:s+1,total:i.length}));break;case"PageUp":e.preventDefault(),e.stopPropagation(),s=Math.max(t-5,0),0===s&&t!==s&&(a=d.t("playlist.jumpedToFirstTrack",{total:i.length}));break;case"Home":e.preventDefault(),e.stopPropagation(),s=0,0!==t&&(a=d.t("playlist.firstTrack",{total:i.length}));break;case"End":e.preventDefault(),e.stopPropagation(),s=i.length-1,t!==i.length-1&&(a=d.t("playlist.lastTrack",{current:i.length,total:i.length}))}if(-1!==s&&s!==t){const e=i[t],a=i[s];if(e&&a){e.setAttribute("tabIndex","-1"),a.setAttribute("tabIndex","0"),a.focus({preventScroll:!1});const t=a.closest(".vidply-playlist-item");t&&t.scrollIntoView(u("nearest"))}}a&&this.navigationFeedback&&(this.navigationFeedback.textContent=a,setTimeout(()=>{this.navigationFeedback&&(this.navigationFeedback.textContent="")},1e3))}updatePlaylistUI(){if(!this.playlistPanel)return;const t=this.playlistPanel.querySelectorAll(".vidply-playlist-item"),i=this.playlistPanel.querySelectorAll(".vidply-playlist-item-button");t.forEach((t,s)=>{const a=i[s];if(!a)return;const n=this.tracks[s];if(!n)return;const r=n.title||d.t("playlist.trackUntitled",{number:s+1}),o=n.artist?d.t("playlist.by")+n.artist:"",l=this.getEffectiveDuration(n),c=l?e.formatDuration(l):"";if(s===this.currentIndex){t.classList.add("vidply-playlist-item-active"),a.setAttribute("aria-current","true"),a.setAttribute("aria-checked","true"),a.setAttribute("tabIndex","0");let e=`${r}${o}`;c&&(e+=`. ${c}`),a.setAttribute("aria-label",e),t.scrollIntoView(u("nearest"))}else{t.classList.remove("vidply-playlist-item-active"),a.removeAttribute("aria-current"),a.setAttribute("aria-checked","false"),a.setAttribute("tabIndex","-1");let e=`${r}${o}`;c&&(e+=`. ${c}`),a.setAttribute("aria-label",e)}})}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||this.currentIndex<this.tracks.length-1}hasPrevious(){return!!this.options.loop||this.currentIndex>0}addTrack(e){this.tracks.push(e),this.playlistPanel&&this.renderPlaylist()}removeTrack(e){e<0||e>=this.tracks.length||(this.tracks.splice(e,1),e<this.currentIndex?this.currentIndex--:e===this.currentIndex&&(this.currentIndex>=this.tracks.length&&(this.currentIndex=this.tracks.length-1),this.currentIndex>=0&&this.play(this.currentIndex)),this.playlistPanel&&this.renderPlaylist())}clear(){this.tracks=[],this.currentIndex=-1,this.playlistPanel&&(this.playlistPanel.innerHTML="",this.playlistPanel.style.display="none"),this.trackInfoElement&&(this.trackInfoElement.innerHTML="",this.trackInfoElement.style.display="none"),this.trackArtworkElement&&(this.trackArtworkElement.style.backgroundImage="",this.trackArtworkElement.style.display="none")}togglePanel(e){const t=this.playlistPanel;return!!t&&((void 0!==e?e:"none"===t.style.display)?(t.style.display="block",this.isPanelVisible=!0,this.tracks.length>0&&setTimeout(()=>{const e=t.querySelector('.vidply-playlist-item[tabindex="0"]');e&&e.focus({preventScroll:!0})},100),this.player.controlBar&&this.player.controlBar.controls.playlistToggle&&(this.player.controlBar.controls.playlistToggle.setAttribute("aria-expanded","true"),this.player.controlBar.controls.playlistToggle.setAttribute("aria-pressed","true"))):(t.style.display="none",this.isPanelVisible=!1,this.player.controlBar&&this.player.controlBar.controls.playlistToggle&&(this.player.controlBar.controls.playlistToggle.setAttribute("aria-expanded","false"),this.player.controlBar.controls.playlistToggle.setAttribute("aria-pressed","false"),this.player.controlBar.controls.playlistToggle.focus({preventScroll:!0}))),this.isPanelVisible)}showPanel(){return this.togglePanel(!0)}hidePanel(){return this.togglePanel(!1)}destroy(){this.player.off("ended",this.handleTrackEnd),this.player.off("error",this.handleTrackError),this.player.off("play",this.handlePlaybackStateChange),this.player.off("pause",this.handlePlaybackStateChange),this.player.off("ended",this.handlePlaybackStateChange),this.player.off("fullscreenchange",this.handleFullscreenChange),this.player.off("audiodescriptionenabled",this.handleAudioDescriptionChange),this.player.off("audiodescriptiondisabled",this.handleAudioDescriptionChange),this.trackArtworkElement&&this.trackArtworkElement.remove(),this.trackInfoElement&&this.trackInfoElement.remove(),this.playlistPanel&&this.playlistPanel.remove(),this.clear()}};function G(e){if(!e||"object"!=typeof e||Array.isArray(e))return{};const t=Object.create(null);for(const[i,s]of Object.entries(e))y(i)||(t[i]=s);return t}function J(){document.querySelectorAll("[data-vidply]").forEach(e=>{const t=(e=>{const t=e.dataset.vidplyOptions;if(!t)return{};try{return G(JSON.parse(t))}catch(e){return console.warn("[VidPly] Ignored malformed data-vidply-options:",e),{}}})(e),i=(e=>{const t=Object.create(null),i={signLanguageSrc:"signLanguageSrc",signLanguageButton:"signLanguageButton",signLanguagePosition:"signLanguagePosition",signLanguageDisplayMode:"signLanguageDisplayMode",audioDescriptionSrc:"audioDescriptionSrc",audioDescriptionButton:"audioDescriptionButton",audioDescriptionMode:"audioDescriptionMode",audioDescriptionSpeech:"audioDescriptionSpeech",audioDescriptionExtended:"audioDescriptionExtended",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",floating:"floating",floatingPosition:"floatingPosition",floatingMinViewportWidth:"floatingMinViewportWidth",lazyInit:"lazyInit",lazyMargin:"lazyMargin",theme:"theme"};for(const[s,a]of Object.entries(i)){if(y(a))continue;const i=e[s];void 0!==i&&(t[a]="true"===i||"false"!==i&&(""===i||Number.isNaN(Number(i))?i:Number(i)))}const s=Object.create(null);for(const t of Object.keys(e))if(t.startsWith("signLanguageSrc")&&"signLanguageSrc"!==t){const i=t.match(/^signLanguageSrc([A-Z][a-z]*)$/);if(i&&i[1]){const a=i[1].toLowerCase(),n=e[t];void 0!==n&&(s[a]=n)}}if(Object.keys(s).length>0&&(t.signLanguageSources=s,e.signLanguageSrc&&!t.signLanguageSrc&&(t.signLanguageSrc=e.signLanguageSrc)),e.vidplyLanguageFiles)try{const i=JSON.parse(e.vidplyLanguageFiles);i&&"object"==typeof i&&!Array.isArray(i)&&(t.languageFiles=G(i))}catch(e){console.warn("Invalid JSON in data-vidply-language-files:",e)}if(e.vidplyLanguageFile)try{const i=JSON.parse(e.vidplyLanguageFile);i&&"object"==typeof i&&!Array.isArray(i)&&(t.languageFiles=G(i))}catch{e.vidplyLanguageFileCode&&e.vidplyLanguageFileUrl&&(t.languageFile=e.vidplyLanguageFileCode,t.languageFileUrl=e.vidplyLanguageFileUrl)}else e.vidplyLanguageFileCode&&e.vidplyLanguageFileUrl&&(t.languageFile=e.vidplyLanguageFileCode,t.languageFileUrl=e.vidplyLanguageFileUrl);return t})(e.dataset),s={...i,...t};"false"!==e.dataset.vidplyLazy&&!1!==s.lazyInit&&"IntersectionObserver"in window?A(e,s,e.dataset.vidplyLazyMargin||s.lazyMargin||"500px",(e,t)=>{new K(e,t)}):new K(e,s)})}"loading"===document.readyState?document.addEventListener("DOMContentLoaded",J):J();var Z=K;export{K as Player,Y as PlaylistManager,Z as default};