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
- "use strict";(()=>{var e,t=Object.defineProperty,i=Object.getOwnPropertyNames,s=(e,t)=>()=>(e&&(t=(0,e[i(e)[0]])(e=0)),t),a=(e,i)=>{for(var s in i)t(e,s,{get:i[s],enumerable:!0})},n=(e,i,s)=>((e,i,s)=>i in e?t(e,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[i]=s)(e,"symbol"!=typeof i?i+"":i,s);function r(e,t={}){const i=document.createElement(e);if(t.className&&(i.className=t.className),t.attributes)for(const[e,s]of Object.entries(t.attributes))void 0!==s&&i.setAttribute(e,s);if(t.textContent&&(i.textContent=t.textContent),t.style&&Object.assign(i.style,t.style),t.children)for(const e of t.children)e&&i.appendChild(e);return i}var o,l,d=s({"src/utils/DOMUtils.ts"(){e={createElement:r,show(e){(null==e?void 0:e.style)&&(e.style.display="")},hide(e){(null==e?void 0:e.style)&&(e.style.display="none")},fadeIn(e,t=300,i){if(e&&(e.style.opacity="0",e.style.display="",e.style.transition=`opacity ${t}ms ease`,e.style.opacity="1",i)){let s=!1;const a=()=>{s||(s=!0,e.removeEventListener("transitionend",a),i())};e.addEventListener("transitionend",a,{once:!0}),setTimeout(a,t+50)}},fadeOut(e,t=300,i){if(!e)return;e.style.transition=`opacity ${t}ms ease`,e.style.opacity="0";let s=!1;const a=()=>{s||(s=!0,e.removeEventListener("transitionend",a),e.style.display="none",i&&i())};e.addEventListener("transitionend",a,{once:!0}),setTimeout(a,t+50)},offset(e){if(!e)return{top:0,left:0,width:0,height:0};const t=e.getBoundingClientRect();return{top:t.top+window.scrollY,left:t.left+window.scrollX,width:t.width,height:t.height}},escapeHTML(e){const t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;"};return e.replace(/[&<>"']/g,e=>t[e]??e)},renderVTTToDOM(e){const t=e.length>1e4?e.slice(0,1e4):e,i=document.createDocumentFragment(),s=[],a=e=>{(s[s.length-1]??i).appendChild(e)},n=/<(\/)?([a-z])(?:\.([\w.-]{1,200}))?(?:\s+([^<>]{0,500}))?>/i;let r=0;for(;r<t.length;){const e=t.slice(r),i=n.exec(e);if(!i||void 0===i.index){a(document.createTextNode(e));break}i.index>0&&a(document.createTextNode(e.slice(0,i.index)));const[,o,l,d,h]=i,c=(l||"").toLowerCase();if(o){const e=s[s.length-1];e&&e.dataset.vttTag===c&&s.pop()}else if("b"===c||"i"===c||"u"===c){const e=document.createElement("b"===c?"strong":"i"===c?"em":"u");e.dataset.vttTag=c,a(e),s.push(e)}else if("c"===c){const e=document.createElement("span");if(e.dataset.vttTag=c,e.classList.add("caption-class"),d)for(const t of d.split(".").filter(Boolean))/^[\w-]+$/.test(t)&&e.classList.add(`caption-class-${t}`);a(e),s.push(e)}else if("v"===c){const e=document.createElement("span");e.dataset.vttTag=c,e.classList.add("caption-voice"),h&&(e.dataset.voice=h.trim().slice(0,200)),a(e),s.push(e)}else a(document.createTextNode(i[0]));r+=i.index+i[0].length}return i},createTooltip(e,t="vidply"){return this.createElement("span",{className:`${t}-tooltip`,textContent:e,attributes:{"aria-hidden":"true"}})},attachTooltip(e,t,i="vidply"){var s;if(!e||!t)return;null==(s=e.querySelector(`.${i}-tooltip`))||s.remove();const a=this.createTooltip(t,i);e.appendChild(a);const n=`${i}-tooltip-visible`,r=()=>a.classList.add(n),o=()=>a.classList.remove(n);e.addEventListener("mouseenter",r),e.addEventListener("mouseleave",o),e.addEventListener("focus",r),e.addEventListener("blur",o)},createButtonText(e,t="vidply"){return this.createElement("span",{className:`${t}-button-text`,textContent:e,attributes:{"aria-hidden":"true"}})},addClass(e,t){var i;null==(i=null==e?void 0:e.classList)||i.add(t)},removeClass(e,t){var i;null==(i=null==e?void 0:e.classList)||i.remove(t)},toggleClass(e,t){var i;null==(i=null==e?void 0:e.classList)||i.toggle(t)},hasClass(e,t){var i;return(null==(i=null==e?void 0:e.classList)?void 0:i.contains(t))??!1}}}}),h=s({"src/i18n/languages/en.ts"(){o={player:{label:"Video Player",play:"Play",pause:"Pause",stop:"Stop",restart:"Restart from beginning",rewind:"Rewind",forward:"Forward",rewindSeconds:"Rewind {seconds} seconds",forwardSeconds:"Forward {seconds} seconds",previous:"Previous track",next:"Next track",playlist:"Toggle playlist",volume:"Volume",mute:"Mute",unmute:"Unmute",fullscreen:"Fullscreen",exitFullscreen:"Exit Fullscreen",captions:"Captions",chapters:"Chapters",quality:"Quality",captionStyling:"Caption styling",transcript:"Toggle transcript",audioDescription:"Audio description",signLanguage:"Sign language video",settings:"Settings",speed:"Playback Speed",pip:"Picture in Picture",floatingPlayer:"Floating player",floatingPlayerClose:"Close floating player",floatingPlayerEnter:"Pop out video",floatingPlayerExit:"Dock video",floatingPlayerDialog:"Floating video player. Press D to drag, R to resize, Escape to close.",download:"Download",downloadWithFormat:"Download {format}",downloadWithSize:"Download ({size})",downloadWithFormatSize:"Download {format} ({size})",currentTime:"Current time",duration:"Duration",progress:"Progress",seekForward:"Seek forward {seconds} seconds",seekBackward:"Seek backward {seconds} seconds",volumeUp:"Volume up",volumeDown:"Volume down",loading:"Loading...",loadingChapters:"Loading chapters...",error:"Error loading media",buffering:"Buffering...",signLanguageVideo:"Sign Language Video",closeSignLanguage:"Close sign language video",signLanguageSettings:"Sign language settings",startPlaybackFirst:"Please start playback first.",startPlaybackForAudioDescription:"Please start playback first to use audio description.",startPlaybackForSignLanguage:"Please start playback first to use sign language video.",noChapters:"No chapters available",noCaptions:"No captions available",auto:"Auto",autoQuality:"Auto (no quality selection available)",noQuality:"Quality selection not available",signLanguageDragResize:"Sign Language Video - Press D to drag with keyboard, R to resize",signLanguageDragActive:"Sign Language Video - Drag mode active. Use arrow keys to move, Escape to exit.",signLanguageResizeActive:"Sign Language Video - Resize mode active. Use left/right arrow keys to resize, Escape to exit.",enableSignDragMode:"Enable drag mode. Shortcut: D key",disableSignDragMode:"Disable drag mode. Shortcut: D key",enableSignDragModeAria:"Enable toggle keyboard drag mode with arrow keys. Shortcut: D key",disableSignDragModeAria:"Disable toggle keyboard drag mode with arrow keys. Shortcut: D key",enableSignResizeMode:"Enable resize mode. Shortcut: R key",disableSignResizeMode:"Disable resize mode. Shortcut: R key",enableSignResizeModeAria:"Enable keyboard resize mode with arrow keys. Shortcut: R key",disableSignResizeModeAria:"Disable keyboard resize mode with arrow keys. Shortcut: R key",signDragModeHint:"Drag mode: arrow keys to move, Esc to exit",signResizeModeHint:"Resize mode: arrow keys to resize, Esc to exit",signDragModeDisabled:"Sign language drag mode disabled.",signResizeModeDisabled:"Sign language resize mode disabled.",resizeHandle:"Resize {direction} corner",moreOptions:"More options",noMoreOptions:"No additional options available",playing:"Playing",paused:"Paused",muted:"Muted",unmuted:"Unmuted",captionsOn:"Captions on",captionsOff:"Captions off",volumePercent:"Volume {percent} percent",volumePercentMuted:"Muted",speedRate:"Speed {rate}x"},captions:{off:"Off",select:"Select captions",fontSize:"Font Size",fontFamily:"Font Family",color:"Text Color",backgroundColor:"Background Color",opacity:"Opacity"},fontSizes:{small:"Small",normal:"Normal",large:"Large",xlarge:"X-Large"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Text Color",background:"Background",font:"Font",fontSize:"Font Size",opacity:"Opacity"},audioDescription:{enable:"Enable audio description",disable:"Disable audio description"},signLanguage:{show:"Show sign language video",hide:"Hide sign language video",showInMainView:"Show sign language in main video",hideInMainView:"Hide sign language from main video"},transcript:{title:"Transcript",ariaLabel:"Video Transcript",close:"Close transcript",loading:"Loading transcript...",noTranscript:"No transcript available for this video.",settings:"Transcript settings. Press Enter to open menu, or D to enable drag mode",keyboardDragMode:"Toggle keyboard drag mode with arrow keys. Shortcut: D key",keyboardDragActive:"⌨️ Keyboard Drag Mode Active (Arrow keys to move, Shift+Arrows for large steps, D or ESC to exit)",dragResizePrompt:"Press D to drag or R to resize. Use Home to reset position, Esc to close.",dragModeEnabled:"Keyboard drag mode enabled. Use arrow keys to move, Shift+Arrow for larger steps. Press D or Esc to exit.",dragModeDisabled:"Keyboard drag mode disabled.",enableDragMode:"Enable drag mode. Shortcut: D key",disableDragMode:"Disable drag mode. Shortcut: D key",enableDragModeAria:"Enable toggle keyboard drag mode with arrow keys. Shortcut: D key",disableDragModeAria:"Disable toggle keyboard drag mode with arrow keys. Shortcut: D key",resizeWindow:"Resize Window",disableResizeWindow:"Disable Resize Mode",enableResizeMode:"Enable resize mode. Shortcut: R key",disableResizeMode:"Disable resize mode. Shortcut: R key",enableResizeModeAria:"Enable keyboard resize mode with arrow keys. Shortcut: R key",disableResizeModeAria:"Disable keyboard resize mode with arrow keys. Shortcut: R key",resizeModeHint:"Resize handles enabled. Drag edges or corners to adjust. Press Esc or R to exit.",resizeModeEnabled:"Resize mode enabled. Drag edges or corners to adjust. Press Esc or R to exit.",resizeModeDisabled:"Resize mode disabled.",dragModeBadge:"Drag mode: arrow keys to move, Esc to exit",resizeModeBadge:"Resize mode: drag edges or corners, Esc to exit",positionReset:"Transcript position reset.",styleTranscript:"Open transcript style settings",closeMenu:"Close Menu",styleTitle:"Transcript Style",autoscroll:"Autoscroll",settingsMenu:"Transcript dialog settings",showTimestamps:"Show timestamps",hideTimestamps:"Hide timestamps",showTimestampsAria:"Show timestamps in transcript",hideTimestampsAria:"Hide timestamps in transcript",seekTo:"Seek to {time}"},settings:{title:"Settings",quality:"Quality",speed:"Speed",captions:"Captions",language:"Language",reset:"Reset to defaults",close:"Close"},speeds:{normal:"Normal"},time:{display:"Time display",durationPrefix:"Duration: ",of:"of",hour:"{count} hour",hours:"{count} hours",minute:"{count} minute",minutes:"{count} minutes",second:"{count} second",seconds:"{count} seconds"},resume:{prompt:"Resume from {time}?",resume:"Resume",startOver:"Start Over"},playlist:{title:"Playlist",trackOf:"Track {current} of {total}",nowPlaying:"Now playing: Track {current} of {total}. {title}{artist}",by:" by ",untitled:"Untitled",trackUntitled:"Track {number}",currentlyPlaying:"Currently playing",notPlaying:"Not playing",pressEnterPlay:"Press Enter to play",pressEnterRestart:"Press Enter to restart",keyboardInstructions:"Playlist navigation: Use Up and Down arrow keys to move between tracks. Press Page Up or Page Down to skip 5 tracks. Press Home to go to first track, End to go to last track. Press Enter or Space to play the selected track.",endOfPlaylist:"End of playlist. {current} of {total}.",beginningOfPlaylist:"Beginning of playlist. 1 of {total}.",jumpedToLastTrack:"Jumped to last track. {current} of {total}.",jumpedToFirstTrack:"Jumped to first track. 1 of {total}.",firstTrack:"First track. 1 of {total}.",lastTrack:"Last track. {current} of {total}."}}}}),c={};a(c,{de:()=>l});var u,p=s({"src/i18n/languages/de.ts"(){l={player:{label:"Videoplayer",play:"Abspielen",pause:"Pause",stop:"Stopp",restart:"Von vorne beginnen",rewind:"Zurückspulen",forward:"Vorspulen",rewindSeconds:"{seconds} Sekunden zurückspulen",forwardSeconds:"{seconds} Sekunden vorspulen",previous:"Vorheriger Titel",next:"Nächster Titel",playlist:"Wiedergabeliste umschalten",volume:"Lautstärke",mute:"Stumm",unmute:"Ton ein",fullscreen:"Vollbild",exitFullscreen:"Vollbild beenden",captions:"Untertitel",chapters:"Kapitel",quality:"Qualität",captionStyling:"Untertitel-Stil",transcript:"Transkript umschalten",audioDescription:"Audiodeskription",signLanguage:"Gebärdensprache-Video",settings:"Einstellungen",speed:"Wiedergabegeschwindigkeit",pip:"Bild-in-Bild",floatingPlayer:"Schwebender Player",floatingPlayerClose:"Schwebenden Player schließen",floatingPlayerEnter:"Video ausklappen",floatingPlayerExit:"Video andocken",floatingPlayerDialog:"Schwebender Videoplayer. D zum Verschieben, R zum Größenändern, Escape zum Schließen.",download:"Herunterladen",downloadWithFormat:"Herunterladen {format}",downloadWithSize:"Herunterladen ({size})",downloadWithFormatSize:"Herunterladen {format} ({size})",currentTime:"Aktuelle Zeit",duration:"Dauer",progress:"Fortschritt",seekForward:"{seconds} Sekunden vorspulen",seekBackward:"{seconds} Sekunden zurückspulen",volumeUp:"Lauter",volumeDown:"Leiser",loading:"Lädt...",loadingChapters:"Kapitel werden geladen...",error:"Fehler beim Laden",buffering:"Puffern...",signLanguageVideo:"Gebärdensprache-Video",closeSignLanguage:"Gebärdensprache-Video schließen",signLanguageSettings:"Gebärdensprache-Einstellungen",startPlaybackFirst:"Bitte starten Sie die Wiedergabe zuerst.",startPlaybackForAudioDescription:"Bitte starten Sie die Wiedergabe zuerst, um die Audiodeskription zu nutzen.",startPlaybackForSignLanguage:"Bitte starten Sie die Wiedergabe zuerst, um das Gebärdensprache-Video zu nutzen.",noChapters:"Keine Kapitel verfügbar",noCaptions:"Keine Untertitel verfügbar",auto:"Automatisch",autoQuality:"Automatisch (keine Qualitätsauswahl verfügbar)",noQuality:"Qualitätsauswahl nicht verfügbar",signLanguageDragResize:"Gebärdensprache-Video - Drücken Sie D zum Verschieben per Tastatur, R zum Ändern der Größe",signLanguageDragActive:"Gebärdensprache-Video - Verschiebemodus aktiv. Pfeiltasten zum Bewegen, Escape zum Beenden.",signLanguageResizeActive:"Gebärdensprache-Video - Größenänderungsmodus aktiv. Links-/Rechts-Pfeiltasten zum Ändern der Größe, Escape zum Beenden.",enableSignDragMode:"Verschiebemodus aktivieren. Tastenkombination: D-Taste",disableSignDragMode:"Verschiebemodus deaktivieren. Tastenkombination: D-Taste",enableSignDragModeAria:"Tastatur-Verschiebemodus mit Pfeiltasten aktivieren. Tastenkombination: D-Taste",disableSignDragModeAria:"Tastatur-Verschiebemodus mit Pfeiltasten deaktivieren. Tastenkombination: D-Taste",enableSignResizeMode:"Größenänderungsmodus aktivieren. Tastenkombination: R-Taste",disableSignResizeMode:"Größenänderungsmodus deaktivieren. Tastenkombination: R-Taste",enableSignResizeModeAria:"Tastatur-Größenänderungsmodus mit Pfeiltasten aktivieren. Tastenkombination: R-Taste",disableSignResizeModeAria:"Tastatur-Größenänderungsmodus mit Pfeiltasten deaktivieren. Tastenkombination: R-Taste",signDragModeHint:"Verschiebemodus: Pfeiltasten zum Bewegen, Esc zum Beenden",signResizeModeHint:"Größenänderungsmodus: Pfeiltasten zum Ändern, Esc zum Beenden",signDragModeDisabled:"Verschiebemodus für Gebärdensprache-Video deaktiviert.",signResizeModeDisabled:"Größenänderungsmodus für Gebärdensprache-Video deaktiviert.",resizeHandle:"Größenänderung {direction}-Ecke",moreOptions:"Weitere Optionen",noMoreOptions:"Keine weiteren Optionen verfügbar",playing:"Wird abgespielt",paused:"Pausiert",muted:"Stummgeschaltet",unmuted:"Ton an",captionsOn:"Untertitel an",captionsOff:"Untertitel aus",volumePercent:"Lautstärke {percent} Prozent",volumePercentMuted:"Stummgeschaltet",speedRate:"Geschwindigkeit {rate}x"},captions:{off:"Aus",select:"Untertitel auswählen",fontSize:"Schriftgröße",fontFamily:"Schriftart",color:"Textfarbe",backgroundColor:"Hintergrundfarbe",opacity:"Deckkraft"},fontSizes:{small:"Klein",normal:"Normal",large:"Groß",xlarge:"Sehr groß"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Textfarbe",background:"Hintergrund",font:"Schrift",fontSize:"Schriftgröße",opacity:"Deckkraft"},audioDescription:{enable:"Audiodeskription aktivieren",disable:"Audiodeskription deaktivieren"},signLanguage:{show:"Gebärdensprache-Video anzeigen",hide:"Gebärdensprache-Video ausblenden",showInMainView:"Gebärdensprache im Hauptvideo anzeigen",hideInMainView:"Gebärdensprache aus Hauptvideo entfernen"},transcript:{title:"Transkript",ariaLabel:"Video-Transkript",close:"Transkript schließen",loading:"Transkript wird geladen...",noTranscript:"Kein Transkript für dieses Video verfügbar.",settings:"Transkript-Einstellungen. Eingabetaste zum Öffnen des Menüs drücken oder D zum Aktivieren des Verschiebemodus",keyboardDragMode:"Tastatur-Verschiebemodus mit Pfeiltasten umschalten. Tastenkombination: D-Taste",keyboardDragActive:"⌨️ Tastatur-Verschiebemodus aktiv (Pfeiltasten zum Bewegen, Umschalt+Pfeiltasten für große Schritte, D oder ESC zum Beenden)",dragResizePrompt:"Drücken Sie D zum Verschieben oder R zur Größenänderung. Home setzt die Position zurück, Esc schließt.",dragModeEnabled:"Tastatur-Verschiebemodus aktiviert. Pfeiltasten zum Bewegen, Umschalt+Pfeiltasten für größere Schritte. D oder Esc zum Beenden.",dragModeDisabled:"Tastatur-Verschiebemodus deaktiviert.",enableDragMode:"Verschiebemodus aktivieren. Tastenkombination: D-Taste",disableDragMode:"Verschiebemodus deaktivieren. Tastenkombination: D-Taste",enableDragModeAria:"Tastatur-Verschiebemodus mit Pfeiltasten aktivieren. Tastenkombination: D-Taste",disableDragModeAria:"Tastatur-Verschiebemodus mit Pfeiltasten deaktivieren. Tastenkombination: D-Taste",resizeWindow:"Fenster vergrößern/verkleinern",disableResizeWindow:"Resize-Modus deaktivieren",enableResizeMode:"Größenänderungsmodus aktivieren. Tastenkombination: R-Taste",disableResizeMode:"Größenänderungsmodus deaktivieren. Tastenkombination: R-Taste",enableResizeModeAria:"Tastatur-Größenänderungsmodus mit Pfeiltasten aktivieren. Tastenkombination: R-Taste",disableResizeModeAria:"Tastatur-Größenänderungsmodus mit Pfeiltasten deaktivieren. Tastenkombination: R-Taste",resizeModeHint:"Griffe aktiviert. Ziehen Sie Kanten oder Ecken zum Anpassen. Esc oder R zum Beenden.",resizeModeEnabled:"Resize-Modus aktiviert. Kanten oder Ecken ziehen; Esc oder R beendet.",resizeModeDisabled:"Resize-Modus deaktiviert.",dragModeBadge:"Verschiebemodus: Pfeiltasten zum Bewegen, Esc zum Beenden",resizeModeBadge:"Resize-Modus: Kanten oder Ecken ziehen, Esc zum Beenden",positionReset:"Transkriptposition zurückgesetzt.",styleTranscript:"Transkript-Stileinstellungen öffnen",closeMenu:"Menü schließen",styleTitle:"Transkript-Stil",autoscroll:"Auto-Scroll",settingsMenu:"Transkript-Dialog-Einstellungen",showTimestamps:"Zeitstempel anzeigen",hideTimestamps:"Zeitstempel ausblenden",showTimestampsAria:"Zeitstempel im Transkript anzeigen",hideTimestampsAria:"Zeitstempel im Transkript ausblenden",seekTo:"Springe zu {time}"},settings:{title:"Einstellungen",quality:"Qualität",speed:"Geschwindigkeit",captions:"Untertitel",language:"Sprache",reset:"Zurücksetzen",close:"Schließen"},speeds:{normal:"Normal"},time:{display:"Zeitanzeige",durationPrefix:"Dauer: ",of:"von",hour:"{count} Stunde",hours:"{count} Stunden",minute:"{count} Minute",minutes:"{count} Minuten",second:"{count} Sekunde",seconds:"{count} Sekunden"},resume:{prompt:"Bei {time} fortsetzen?",resume:"Fortsetzen",startOver:"Von vorne"},playlist:{title:"Wiedergabeliste",trackOf:"Titel {current} von {total}",nowPlaying:"Läuft gerade: Titel {current} von {total}. {title}{artist}",by:" von ",untitled:"Ohne Titel",trackUntitled:"Titel {number}",currentlyPlaying:"Wird gerade abgespielt",notPlaying:"Nicht aktiv",pressEnterPlay:"Eingabetaste zum Abspielen",pressEnterRestart:"Eingabetaste zum Neustart",keyboardInstructions:"Wiedergabelisten-Navigation: Verwenden Sie die Pfeiltasten nach oben und unten, um zwischen Titeln zu wechseln. Drücken Sie Bild auf oder Bild ab, um 5 Titel zu überspringen. Drücken Sie Pos1, um zum ersten Titel zu springen, Ende für den letzten Titel. Drücken Sie die Eingabetaste oder Leertaste, um den ausgewählten Titel abzuspielen.",endOfPlaylist:"Ende der Wiedergabeliste. {current} von {total}.",beginningOfPlaylist:"Anfang der Wiedergabeliste. 1 von {total}.",jumpedToLastTrack:"Zum letzten Titel gesprungen. {current} von {total}.",jumpedToFirstTrack:"Zum ersten Titel gesprungen. 1 von {total}.",firstTrack:"Erster Titel. 1 von {total}.",lastTrack:"Letzter Titel. {current} von {total}."}}}}),g={};a(g,{es:()=>u});var m,y=s({"src/i18n/languages/es.ts"(){u={player:{label:"Reproductor de video",play:"Reproducir",pause:"Pausa",stop:"Detener",restart:"Reiniciar desde el principio",rewind:"Retroceder",forward:"Avanzar",rewindSeconds:"Retroceder {seconds} segundos",forwardSeconds:"Avanzar {seconds} segundos",previous:"Pista anterior",next:"Siguiente pista",playlist:"Alternar lista de reproducción",volume:"Volumen",mute:"Silenciar",unmute:"Activar sonido",fullscreen:"Pantalla completa",exitFullscreen:"Salir de pantalla completa",captions:"Subtítulos",chapters:"Capítulos",quality:"Calidad",captionStyling:"Estilo de subtítulos",transcript:"Alternar transcripción",audioDescription:"Audiodescripción",signLanguage:"Video en lengua de señas",settings:"Configuración",speed:"Velocidad de reproducción",pip:"Imagen en imagen",floatingPlayer:"Reproductor flotante",floatingPlayerClose:"Cerrar reproductor flotante",floatingPlayerEnter:"Sacar el vídeo",floatingPlayerExit:"Anclar el vídeo",floatingPlayerDialog:"Reproductor de vídeo flotante. Pulsa D para mover, R para redimensionar, Escape para cerrar.",download:"Descargar",downloadWithFormat:"Descargar {format}",downloadWithSize:"Descargar ({size})",downloadWithFormatSize:"Descargar {format} ({size})",currentTime:"Tiempo actual",duration:"Duración",progress:"Progreso",seekForward:"Avanzar {seconds} segundos",seekBackward:"Retroceder {seconds} segundos",volumeUp:"Subir volumen",volumeDown:"Bajar volumen",loading:"Cargando...",loadingChapters:"Cargando capítulos...",error:"Error al cargar",buffering:"Almacenando en búfer...",signLanguageVideo:"Video en Lengua de Señas",closeSignLanguage:"Cerrar video en lengua de señas",signLanguageSettings:"Configuración de lengua de señas",noChapters:"No hay capítulos disponibles",noCaptions:"No hay subtítulos disponibles",auto:"Automático",autoQuality:"Automático (selección de calidad no disponible)",noQuality:"Selección de calidad no disponible",signLanguageDragResize:"Video en Lengua de Señas - Presione D para arrastrar con el teclado, R para cambiar el tamaño",signLanguageDragActive:"Video en Lengua de Señas - Modo de arrastre activo. Use las teclas de flecha para mover, Escape para salir.",signLanguageResizeActive:"Video en Lengua de Señas - Modo de cambio de tamaño activo. Use las teclas de flecha izquierda/derecha para cambiar el tamaño, Escape para salir.",enableSignDragMode:"Activar modo de arrastre. Atajo: tecla D",disableSignDragMode:"Desactivar modo de arrastre. Atajo: tecla D",enableSignDragModeAria:"Activar modo de arrastre con teclado usando teclas de flecha. Atajo: tecla D",disableSignDragModeAria:"Desactivar modo de arrastre con teclado usando teclas de flecha. Atajo: tecla D",enableSignResizeMode:"Activar modo de cambio de tamaño. Atajo: tecla R",disableSignResizeMode:"Desactivar modo de cambio de tamaño. Atajo: tecla R",enableSignResizeModeAria:"Activar modo de cambio de tamaño con teclado usando teclas de flecha. Atajo: tecla R",disableSignResizeModeAria:"Desactivar modo de cambio de tamaño con teclado usando teclas de flecha. Atajo: tecla R",signDragModeHint:"Modo de arrastre: flechas para mover, Esc para salir",signResizeModeHint:"Modo de cambio de tamaño: flechas para redimensionar, Esc para salir",signDragModeDisabled:"Modo de arrastre del video en lengua de señas desactivado.",signResizeModeDisabled:"Modo de cambio de tamaño del video en lengua de señas desactivado.",resizeHandle:"Cambiar tamaño esquina {direction}",moreOptions:"Más opciones",noMoreOptions:"No hay opciones adicionales disponibles",playing:"Reproduciendo",paused:"En pausa",muted:"Silenciado",unmuted:"Sonido activado",captionsOn:"Subtítulos activados",captionsOff:"Subtítulos desactivados",volumePercent:"Volumen {percent} por ciento",volumePercentMuted:"Silenciado",speedRate:"Velocidad {rate}x"},captions:{off:"Desactivado",select:"Seleccionar subtítulos",fontSize:"Tamaño de fuente",fontFamily:"Familia de fuente",color:"Color de texto",backgroundColor:"Color de fondo",opacity:"Opacidad"},fontSizes:{small:"Pequeño",normal:"Normal",large:"Grande",xlarge:"Muy grande"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Color de texto",background:"Fondo",font:"Fuente",fontSize:"Tamaño de fuente",opacity:"Opacidad"},audioDescription:{enable:"Activar audiodescripción",disable:"Desactivar audiodescripción"},signLanguage:{show:"Mostrar video en lengua de señas",hide:"Ocultar video en lengua de señas",showInMainView:"Mostrar lengua de señas en video principal",hideInMainView:"Ocultar lengua de señas del video principal"},transcript:{title:"Transcripción",ariaLabel:"Transcripción de video",close:"Cerrar transcripción",loading:"Cargando transcripción...",noTranscript:"No hay transcripción disponible para este video.",settings:"Configuración de transcripción. Presione Enter para abrir el menú o D para activar el modo de arrastre",keyboardDragMode:"Alternar modo de arrastre con teclado usando teclas de flecha. Atajo: tecla D",keyboardDragActive:"⌨️ Modo de Arrastre con Teclado Activo (Teclas de flecha para mover, Mayús+Flechas para pasos grandes, D o ESC para salir)",dragResizePrompt:"Pulsa D para mover o R para cambiar el tamaño. Home restablece la posición; Esc cierra.",dragModeEnabled:"Modo de arrastre con teclado activado. Usa flechas para mover, Mayús+Flechas para pasos grandes. Pulsa D o Esc para salir.",dragModeDisabled:"Modo de arrastre con teclado desactivado.",enableDragMode:"Activar modo de arrastre. Atajo: tecla D",disableDragMode:"Desactivar modo de arrastre. Atajo: tecla D",enableDragModeAria:"Activar modo de arrastre con teclado usando teclas de flecha. Atajo: tecla D",disableDragModeAria:"Desactivar modo de arrastre con teclado usando teclas de flecha. Atajo: tecla D",resizeWindow:"Cambiar tamaño de ventana",disableResizeWindow:"Desactivar modo de cambio de tamaño",enableResizeMode:"Activar modo de cambio de tamaño. Atajo: tecla R",disableResizeMode:"Desactivar modo de cambio de tamaño. Atajo: tecla R",enableResizeModeAria:"Activar modo de cambio de tamaño con teclado usando teclas de flecha. Atajo: tecla R",disableResizeModeAria:"Desactivar modo de cambio de tamaño con teclado usando teclas de flecha. Atajo: tecla R",resizeModeHint:"Controladores habilitados. Arrastra bordes o esquinas para ajustar. Pulsa Esc o R para salir.",resizeModeEnabled:"Modo de cambio de tamaño activado. Arrastra bordes o esquinas. Pulsa Esc o R para salir.",resizeModeDisabled:"Modo de cambio de tamaño desactivado.",dragModeBadge:"Modo mover: flechas para mover, Esc para salir",resizeModeBadge:"Modo redimensionar: arrastra bordes o esquinas, Esc para salir",positionReset:"Posición de la transcripción restablecida.",styleTranscript:"Abrir configuración de estilo de transcripción",closeMenu:"Cerrar menú",styleTitle:"Estilo de Transcripción",autoscroll:"Desplazamiento automático",settingsMenu:"Configuración del diálogo de transcripción",showTimestamps:"Mostrar marcas de tiempo",hideTimestamps:"Ocultar marcas de tiempo",showTimestampsAria:"Mostrar marcas de tiempo en la transcripción",hideTimestampsAria:"Ocultar marcas de tiempo en la transcripción",seekTo:"Saltar a {time}"},settings:{title:"Configuración",quality:"Calidad",speed:"Velocidad",captions:"Subtítulos",language:"Idioma",reset:"Restablecer",close:"Cerrar"},speeds:{normal:"Normal"},time:{display:"Visualización de tiempo",durationPrefix:"Duración: ",of:"de",hour:"{count} hora",hours:"{count} horas",minute:"{count} minuto",minutes:"{count} minutos",second:"{count} segundo",seconds:"{count} segundos"},resume:{prompt:"¿Continuar desde {time}?",resume:"Continuar",startOver:"Empezar de nuevo"},playlist:{title:"Lista de reproducción",trackOf:"Pista {current} de {total}",nowPlaying:"Reproduciendo ahora: Pista {current} de {total}. {title}{artist}",by:" por ",untitled:"Sin título",trackUntitled:"Pista {number}",currentlyPlaying:"Reproduciendo actualmente",notPlaying:"Sin reproducir",pressEnterPlay:"Pulsa Enter para reproducir",pressEnterRestart:"Pulsa Enter para reiniciar",keyboardInstructions:"Navegación de lista de reproducción: Use las teclas de flecha arriba y abajo para moverse entre pistas. Pulse Retroceder página o Avanzar página para saltar 5 pistas. Pulse Inicio para ir a la primera pista, Fin para la última pista. Pulse Intro o Espacio para reproducir la pista seleccionada.",endOfPlaylist:"Fin de la lista de reproducción. {current} de {total}.",beginningOfPlaylist:"Inicio de la lista de reproducción. 1 de {total}.",jumpedToLastTrack:"Saltó a la última pista. {current} de {total}.",jumpedToFirstTrack:"Saltó a la primera pista. 1 de {total}.",firstTrack:"Primera pista. 1 de {total}.",lastTrack:"Última pista. {current} de {total}."}}}}),f={};a(f,{fr:()=>m});var v,b=s({"src/i18n/languages/fr.ts"(){m={player:{label:"Lecteur vidéo",play:"Lecture",pause:"Pause",stop:"Arrêt",restart:"Redémarrer du début",rewind:"Reculer",forward:"Avancer",rewindSeconds:"Reculer de {seconds} secondes",forwardSeconds:"Avancer de {seconds} secondes",previous:"Piste précédente",next:"Piste suivante",playlist:"Basculer la liste de lecture",volume:"Volume",mute:"Muet",unmute:"Activer le son",fullscreen:"Plein écran",exitFullscreen:"Quitter le plein écran",captions:"Sous-titres",chapters:"Chapitres",quality:"Qualité",captionStyling:"Style des sous-titres",transcript:"Activer/désactiver la transcription",audioDescription:"Audiodescription",signLanguage:"Vidéo en langue des signes",settings:"Paramètres",speed:"Vitesse de lecture",pip:"Image dans l'image",floatingPlayer:"Lecteur flottant",floatingPlayerClose:"Fermer le lecteur flottant",floatingPlayerEnter:"Détacher la vidéo",floatingPlayerExit:"Rattacher la vidéo",floatingPlayerDialog:"Lecteur vidéo flottant. Appuyez sur D pour déplacer, R pour redimensionner, Échap pour fermer.",download:"Télécharger",downloadWithFormat:"Télécharger {format}",downloadWithSize:"Télécharger ({size})",downloadWithFormatSize:"Télécharger {format} ({size})",currentTime:"Temps actuel",duration:"Durée",progress:"Progression",seekForward:"Avancer de {seconds} secondes",seekBackward:"Reculer de {seconds} secondes",volumeUp:"Augmenter le volume",volumeDown:"Diminuer le volume",loading:"Chargement...",loadingChapters:"Chargement des chapitres...",error:"Erreur de chargement",buffering:"Mise en mémoire tampon...",signLanguageVideo:"Vidéo en Langue des Signes",closeSignLanguage:"Fermer la vidéo en langue des signes",signLanguageSettings:"Paramètres de la langue des signes",noChapters:"Aucun chapitre disponible",noCaptions:"Aucun sous-titre disponible",auto:"Automatique",autoQuality:"Automatique (sélection de qualité non disponible)",noQuality:"Sélection de qualité non disponible",signLanguageDragResize:"Vidéo en Langue des Signes - Appuyez sur D pour déplacer avec le clavier, R pour redimensionner",signLanguageDragActive:"Vidéo en Langue des Signes - Mode glissement actif. Utilisez les touches fléchées pour déplacer, Échap pour quitter.",signLanguageResizeActive:"Vidéo en Langue des Signes - Mode redimensionnement actif. Utilisez les touches fléchées gauche/droite pour redimensionner, Échap pour quitter.",enableSignDragMode:"Activer le mode glissement. Raccourci : touche D",disableSignDragMode:"Désactiver le mode glissement. Raccourci : touche D",enableSignDragModeAria:"Activer le mode glissement clavier avec les touches fléchées. Raccourci : touche D",disableSignDragModeAria:"Désactiver le mode glissement clavier avec les touches fléchées. Raccourci : touche D",enableSignResizeMode:"Activer le mode redimensionnement. Raccourci : touche R",disableSignResizeMode:"Désactiver le mode redimensionnement. Raccourci : touche R",enableSignResizeModeAria:"Activer le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R",disableSignResizeModeAria:"Désactiver le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R",signDragModeHint:"Mode glissement : flèches pour déplacer, Échap pour quitter",signResizeModeHint:"Mode redimensionnement : flèches pour redimensionner, Échap pour quitter",signDragModeDisabled:"Mode glissement de la vidéo en langue des signes désactivé.",signResizeModeDisabled:"Mode redimensionnement de la vidéo en langue des signes désactivé.",resizeHandle:"Redimensionner coin {direction}",moreOptions:"Plus d'options",noMoreOptions:"Aucune option supplémentaire disponible",playing:"Lecture en cours",paused:"En pause",muted:"Muet",unmuted:"Son activé",captionsOn:"Sous-titres activés",captionsOff:"Sous-titres désactivés",volumePercent:"Volume {percent} pour cent",volumePercentMuted:"Muet",speedRate:"Vitesse {rate}x"},captions:{off:"Désactivé",select:"Sélectionner les sous-titres",fontSize:"Taille de police",fontFamily:"Police",color:"Couleur du texte",backgroundColor:"Couleur de fond",opacity:"Opacité"},fontSizes:{small:"Petit",normal:"Normal",large:"Grand",xlarge:"Très grand"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Couleur du texte",background:"Arrière-plan",font:"Police",fontSize:"Taille de police",opacity:"Opacité"},audioDescription:{enable:"Activer l'audiodescription",disable:"Désactiver l'audiodescription"},signLanguage:{show:"Afficher la vidéo en langue des signes",hide:"Masquer la vidéo en langue des signes",showInMainView:"Afficher langue des signes dans la vidéo principale",hideInMainView:"Masquer langue des signes de la vidéo principale"},transcript:{title:"Transcription",ariaLabel:"Transcription vidéo",close:"Fermer la transcription",loading:"Chargement de la transcription...",noTranscript:"Aucune transcription disponible pour cette vidéo.",settings:"Paramètres de transcription. Appuyez sur Entrée pour ouvrir le menu ou D pour activer le mode glissement",keyboardDragMode:"Basculer le mode glissement avec les touches fléchées. Raccourci: touche D",keyboardDragActive:"⌨️ Mode Glissement Clavier Actif (Touches fléchées pour déplacer, Maj+Fléchées pour grands pas, D ou Échap pour quitter)",dragResizePrompt:"Appuyez sur D pour déplacer ou R pour redimensionner. Home réinitialise la position, Échap ferme.",dragModeEnabled:"Mode glissement clavier activé. Utilisez les flèches pour déplacer, Maj+Flèches pour de grands pas. Appuyez sur D ou Échap pour quitter.",dragModeDisabled:"Mode glissement clavier désactivé.",enableDragMode:"Activer le mode glissement. Raccourci : touche D",disableDragMode:"Désactiver le mode glissement. Raccourci : touche D",enableDragModeAria:"Activer le mode glissement clavier avec les touches fléchées. Raccourci : touche D",disableDragModeAria:"Désactiver le mode glissement clavier avec les touches fléchées. Raccourci : touche D",resizeWindow:"Redimensionner la fenêtre",disableResizeWindow:"Désactiver le mode de redimensionnement",enableResizeMode:"Activer le mode redimensionnement. Raccourci : touche R",disableResizeMode:"Désactiver le mode redimensionnement. Raccourci : touche R",enableResizeModeAria:"Activer le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R",disableResizeModeAria:"Désactiver le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R",resizeModeHint:"Poignées activées. Faites glisser les bords ou les coins pour ajuster. Appuyez sur Échap ou R pour quitter.",resizeModeEnabled:"Mode redimensionnement activé. Faites glisser les bords ou coins. Appuyez sur Échap ou R pour quitter.",resizeModeDisabled:"Mode redimensionnement désactivé.",dragModeBadge:"Mode déplacement : flèches pour déplacer, Échap pour quitter",resizeModeBadge:"Mode redimensionnement : faites glisser les bords ou les coins, Échap pour quitter",positionReset:"Position de la transcription réinitialisée.",styleTranscript:"Ouvrir les paramètres de style de transcription",closeMenu:"Fermer le menu",styleTitle:"Style de Transcription",autoscroll:"Défilement automatique",settingsMenu:"Paramètres de dialogue de transcription",showTimestamps:"Afficher les horodatages",hideTimestamps:"Masquer les horodatages",showTimestampsAria:"Afficher les horodatages dans la transcription",hideTimestampsAria:"Masquer les horodatages dans la transcription",seekTo:"Aller à {time}"},settings:{title:"Paramètres",quality:"Qualité",speed:"Vitesse",captions:"Sous-titres",language:"Langue",reset:"Réinitialiser",close:"Fermer"},speeds:{normal:"Normal"},time:{display:"Affichage du temps",durationPrefix:"Durée : ",of:"sur",hour:"{count} heure",hours:"{count} heures",minute:"{count} minute",minutes:"{count} minutes",second:"{count} seconde",seconds:"{count} secondes"},resume:{prompt:"Reprendre à {time} ?",resume:"Reprendre",startOver:"Recommencer"},playlist:{title:"Liste de lecture",trackOf:"Piste {current} sur {total}",nowPlaying:"Lecture en cours : Piste {current} sur {total}. {title}{artist}",by:" par ",untitled:"Sans titre",trackUntitled:"Piste {number}",currentlyPlaying:"En cours de lecture",notPlaying:"Non en lecture",pressEnterPlay:"Appuyez sur Entrée pour lire",pressEnterRestart:"Appuyez sur Entrée pour recommencer",keyboardInstructions:"Navigation de la liste de lecture : Utilisez les touches fléchées haut et bas pour naviguer entre les pistes. Appuyez sur Page précédente ou Page suivante pour sauter 5 pistes. Appuyez sur Début pour aller à la première piste, Fin pour la dernière piste. Appuyez sur Entrée ou Espace pour lire la piste sélectionnée.",endOfPlaylist:"Fin de la liste de lecture. {current} sur {total}.",beginningOfPlaylist:"Début de la liste de lecture. 1 sur {total}.",jumpedToLastTrack:"Sauté à la dernière piste. {current} sur {total}.",jumpedToFirstTrack:"Sauté à la première piste. 1 sur {total}.",firstTrack:"Première piste. 1 sur {total}.",lastTrack:"Dernière piste. {current} sur {total}."}}}}),w={};a(w,{ja:()=>v});var S,M=s({"src/i18n/languages/ja.ts"(){v={player:{label:"ビデオプレーヤー",play:"再生",pause:"一時停止",stop:"停止",restart:"最初から再生",rewind:"巻き戻し",forward:"早送り",rewindSeconds:"{seconds}秒戻す",forwardSeconds:"{seconds}秒進める",previous:"前のトラック",next:"次のトラック",playlist:"プレイリストの切り替え",volume:"音量",mute:"ミュート",unmute:"ミュート解除",fullscreen:"全画面表示",exitFullscreen:"全画面表示を終了",captions:"字幕",chapters:"チャプター",quality:"画質",captionStyling:"字幕スタイル",transcript:"文字起こし切り替え",audioDescription:"音声解説",signLanguage:"手話動画",settings:"設定",speed:"再生速度",pip:"ピクチャーインピクチャー",floatingPlayer:"フローティングプレーヤー",floatingPlayerClose:"フローティングプレーヤーを閉じる",floatingPlayerEnter:"ビデオを切り離す",floatingPlayerExit:"ビデオを戻す",floatingPlayerDialog:"フローティング動画プレーヤー。Dキーで移動、Rキーでサイズ変更、Escで閉じる。",download:"ダウンロード",downloadWithFormat:"{format} をダウンロード",downloadWithSize:"ダウンロード ({size})",downloadWithFormatSize:"{format} をダウンロード ({size})",currentTime:"現在の時間",duration:"再生時間",progress:"進行状況",seekForward:"{seconds}秒進める",seekBackward:"{seconds}秒戻す",volumeUp:"音量を上げる",volumeDown:"音量を下げる",loading:"読み込み中...",loadingChapters:"チャプター読み込み中...",error:"読み込みエラー",buffering:"バッファリング中...",signLanguageVideo:"手話動画",closeSignLanguage:"手話動画を閉じる",signLanguageSettings:"手話設定",noChapters:"チャプターがありません",noCaptions:"字幕がありません",auto:"自動",autoQuality:"自動(画質選択不可)",noQuality:"画質選択不可",signLanguageDragResize:"手話動画 - キーボードでドラッグするにはDキーを、サイズ変更するにはRキーを押してください",signLanguageDragActive:"手話動画 - ドラッグモードが有効です。矢印キーで移動、Escapeで終了します。",signLanguageResizeActive:"手話動画 - サイズ変更モードが有効です。左右の矢印キーでサイズ変更、Escapeで終了します。",enableSignDragMode:"ドラッグモードを有効にする。ショートカット:Dキー",disableSignDragMode:"ドラッグモードを無効にする。ショートカット:Dキー",enableSignDragModeAria:"矢印キーでキーボードドラッグモードを有効にする。ショートカット:Dキー",disableSignDragModeAria:"矢印キーでキーボードドラッグモードを無効にする。ショートカット:Dキー",enableSignResizeMode:"サイズ変更モードを有効にする。ショートカット:Rキー",disableSignResizeMode:"サイズ変更モードを無効にする。ショートカット:Rキー",enableSignResizeModeAria:"矢印キーでキーボードサイズ変更モードを有効にする。ショートカット:Rキー",disableSignResizeModeAria:"矢印キーでキーボードサイズ変更モードを無効にする。ショートカット:Rキー",signDragModeHint:"ドラッグモード:矢印キーで移動、Escで終了",signResizeModeHint:"サイズ変更モード:矢印キーでサイズ変更、Escで終了",signDragModeDisabled:"手話動画のドラッグモードを無効にしました。",signResizeModeDisabled:"手話動画のサイズ変更モードを無効にしました。",resizeHandle:"{direction}コーナーのサイズ変更",moreOptions:"その他のオプション",noMoreOptions:"追加のオプションはありません",playing:"再生中",paused:"一時停止中",muted:"ミュート中",unmuted:"ミュート解除",captionsOn:"字幕オン",captionsOff:"字幕オフ",volumePercent:"音量 {percent} パーセント",volumePercentMuted:"ミュート",speedRate:"速度 {rate}x"},captions:{off:"オフ",select:"字幕を選択",fontSize:"フォントサイズ",fontFamily:"フォント",color:"テキストの色",backgroundColor:"背景色",opacity:"不透明度"},fontSizes:{small:"小",normal:"標準",large:"大",xlarge:"特大"},fontFamilies:{sansSerif:"サンセリフ",serif:"セリフ",monospace:"等幅"},styleLabels:{textColor:"テキストの色",background:"背景",font:"フォント",fontSize:"フォントサイズ",opacity:"不透明度"},audioDescription:{enable:"音声解説を有効にする",disable:"音声解説を無効にする"},signLanguage:{show:"手話動画を表示",hide:"手話動画を非表示",showInMainView:"メイン動画に手話を表示",hideInMainView:"メイン動画から手話を削除"},transcript:{title:"文字起こし",ariaLabel:"ビデオ文字起こし",close:"文字起こしを閉じる",loading:"文字起こしを読み込み中...",noTranscript:"このビデオの文字起こしはありません。",settings:"文字起こし設定。Enterキーでメニューを開く、またはDキーでドラッグモードを有効にする",keyboardDragMode:"矢印キーでキーボードドラッグモードを切り替え。ショートカット:Dキー",keyboardDragActive:"⌨️ キーボードドラッグモード有効(矢印キーで移動、Shift+矢印キーで大きく移動、DまたはESCで終了)",dragResizePrompt:"Dキーで移動、Rキーでサイズ変更。Homeで位置をリセット、Escで閉じます。",dragModeEnabled:"キーボードドラッグモードを有効にしました。矢印キーで移動、Shift+矢印キーで大きく移動できます。終了するには D または Esc を押します。",dragModeDisabled:"キーボードドラッグモードを無効にしました。",enableDragMode:"ドラッグモードを有効にする。ショートカット:Dキー",disableDragMode:"ドラッグモードを無効にする。ショートカット:Dキー",enableDragModeAria:"矢印キーでキーボードドラッグモードを有効にする。ショートカット:Dキー",disableDragModeAria:"矢印キーでキーボードドラッグモードを無効にする。ショートカット:Dキー",resizeWindow:"ウィンドウのサイズ変更",disableResizeWindow:"サイズ変更モードを無効にする",enableResizeMode:"サイズ変更モードを有効にする。ショートカット:Rキー",disableResizeMode:"サイズ変更モードを無効にする。ショートカット:Rキー",enableResizeModeAria:"矢印キーでキーボードサイズ変更モードを有効にする。ショートカット:Rキー",disableResizeModeAria:"矢印キーでキーボードサイズ変更モードを無効にする。ショートカット:Rキー",resizeModeHint:"リサイズハンドルが有効になりました。辺や角をドラッグして調整します。Esc または R で終了します。",resizeModeEnabled:"サイズ変更モードを有効にしました。辺や角をドラッグして調整します。Esc または R で終了します。",resizeModeDisabled:"サイズ変更モードを無効にしました。",dragModeBadge:"移動モード:矢印キーで移動、Escで終了",resizeModeBadge:"サイズ変更モード:辺や角をドラッグ、Escで終了",positionReset:"文字起こしの位置をリセットしました。",styleTranscript:"文字起こしスタイル設定を開く",closeMenu:"メニューを閉じる",styleTitle:"文字起こしスタイル",autoscroll:"自動スクロール",settingsMenu:"文字起こしダイアログ設定",showTimestamps:"タイムスタンプを表示",hideTimestamps:"タイムスタンプを非表示",showTimestampsAria:"文字起こしにタイムスタンプを表示",hideTimestampsAria:"文字起こしのタイムスタンプを非表示",seekTo:"{time} へ移動"},settings:{title:"設定",quality:"画質",speed:"速度",captions:"字幕",language:"言語",reset:"リセット",close:"閉じる"},speeds:{normal:"通常"},time:{display:"時間表示",durationPrefix:"再生時間: ",of:"/",hour:"{count}時間",hours:"{count}時間",minute:"{count}分",minutes:"{count}分",second:"{count}秒",seconds:"{count}秒"},resume:{prompt:"{time}から再開しますか?",resume:"再開",startOver:"最初から"},playlist:{title:"プレイリスト",trackOf:"トラック {current}/{total}",nowPlaying:"再生中: トラック {current}/{total}. {title}{artist}",by:" - ",untitled:"タイトルなし",trackUntitled:"トラック {number}",currentlyPlaying:"再生中",notPlaying:"停止中",pressEnterPlay:"Enterキーで再生",pressEnterRestart:"Enterキーで最初から再生",keyboardInstructions:"プレイリストナビゲーション:上下の矢印キーでトラック間を移動します。Page UpまたはPage Downで5トラックをスキップします。Homeで最初のトラックへ、Endで最後のトラックへ移動します。EnterまたはSpaceで選択したトラックを再生します。",endOfPlaylist:"プレイリストの終わりです。{current}/{total}。",beginningOfPlaylist:"プレイリストの始めです。1/{total}。",jumpedToLastTrack:"最後のトラックにジャンプしました。{current}/{total}。",jumpedToFirstTrack:"最初のトラックにジャンプしました。1/{total}。",firstTrack:"最初のトラックです。1/{total}。",lastTrack:"最後のトラックです。{current}/{total}。"}}}});function T(){return{en:o}}var k,P=s({"src/i18n/translations.ts"(){h(),S={de:()=>Promise.resolve().then(()=>(p(),c)),es:()=>Promise.resolve().then(()=>(y(),g)),fr:()=>Promise.resolve().then(()=>(b(),f)),ja:()=>Promise.resolve().then(()=>(M(),w))},T()}});function E(e){return k.has(String(e))}function C(e){const t=Object.create(null);for(const[i,s]of Object.entries(e))E(i)||(t[i]=s);return t}function L(e){if(!e||"object"!=typeof e||Array.isArray(e))return e&&"object"==typeof e?e:Object.create(null);const t=Object.create(null);for(const[i,s]of Object.entries(e))E(i)||(t[i]=s&&"object"==typeof s&&!Array.isArray(s)?L(s):s);return t}var x,D=s({"src/utils/Sanitize.ts"(){k=Object.freeze(new Set(["__proto__","prototype","constructor"]))}});function A(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function z(e){return L(e)}var _,R,B,V,H=s({"src/i18n/i18n.ts"(){P(),D(),x=new class{constructor(){n(this,"currentLanguage"),n(this,"translations"),n(this,"loadingPromises"),n(this,"builtInLanguageLoaders"),this.currentLanguage="en",this.translations=Object.create(null),Object.assign(this.translations,T()),this.loadingPromises=new Map,this.builtInLanguageLoaders=S}setLanguage(e){this.translations[e]?this.currentLanguage=e:(console.warn(`Language "${e}" not found, falling back to English`),this.currentLanguage="en")}getLanguage(){return this.currentLanguage}async ensureLanguage(e){const t=(e||"").toLowerCase();if(!t)return this.currentLanguage;if(this.translations[t])return t;if(this.loadingPromises.has(t))return await this.loadingPromises.get(t),this.translations[t]?t:null;if(!this.builtInLanguageLoaders[t])return null;const i=(async()=>{try{const e=await(async e=>{const t=S[e];if(!t)return null;const i=await t();return i[e]||i.default||null})(t);e&&(this.translations[t]=z(e))}catch(e){console.warn(`Language "${t}" failed to load:`,e)}finally{this.loadingPromises.delete(t)}})();return this.loadingPromises.set(t,i),await i,this.translations[t]?t:null}t(e,t={}){const i=e.split(".");let s=this.translations[this.currentLanguage];for(const t of i){if(!s||"object"!=typeof s||!(t in s)){s=this.translations.en;for(const t of i){if(!s||"object"!=typeof s||!(t in s))return e;s=s[t]}break}s=s[t]}if("string"==typeof s){let e=s;for(const[i,s]of Object.entries(t)){if(E(i))continue;const t=A(i);e=e.replace(new RegExp(`\\{${t}\\}`,"g"),String(s))}return e}return"string"==typeof s?s:e}addTranslation(e,t){if(E(e))return void console.warn(`[VidPly] Refusing to register language with forbidden name "${e}"`);this.translations[e]||(this.translations[e]=Object.create(null));const i=z(t);Object.assign(this.translations[e],i)}async loadLanguageFromUrl(e,t,i={}){if(this.loadingPromises.has(t))return this.loadingPromises.get(t);const s=(async()=>{var s;const a=[];i.signal&&a.push(i.signal),"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&a.push(AbortSignal.timeout(i.timeoutMs??8e3));const n=0===a.length?void 0:1===a.length?a[0]:(null==(s=AbortSignal.any)?void 0:s.call(AbortSignal,a))??a[0];try{const i=await fetch(t,{signal:n});if(!i.ok)throw new Error(`Failed to load language file: ${i.statusText}`);const s=i.headers.get("content-type")||"";let a;const r=await i.arrayBuffer(),o=new TextDecoder("utf-8").decode(r);if(s.includes("application/json")||t.endsWith(".json"))a=JSON.parse(o);else if(s.includes("text/yaml")||s.includes("application/x-yaml")||t.endsWith(".yaml")||t.endsWith(".yml"))try{a=JSON.parse(o)}catch{if("undefined"==typeof window||!window.jsyaml)throw console.warn("YAML parsing requires js-yaml library. Please include it or use JSON format."),new Error("YAML parsing not available. Please use JSON format or include js-yaml library.");a=window.jsyaml.load(o)}else a=JSON.parse(o);return this.addTranslation(e,a),a}catch(e){throw console.error(`Error loading language file from ${t}:`,e),e}finally{this.loadingPromises.delete(t)}})();return this.loadingPromises.set(t,s),s}async loadLanguagesFromUrls(e,t={}){const i=Object.entries(e).map(([e,i])=>this.loadLanguageFromUrl(e,i,t));await Promise.all(i)}}}}),$=s({"src/utils/TimeUtils.ts"(){H(),_={formatTime(e,t=!1){if(!isFinite(e)||e<0)return t?"00:00:00":"00:00";const i=Math.floor(e/3600),s=Math.floor(e%3600/60),a=Math.floor(e%60),n=e=>String(e).padStart(2,"0");return i>0||t?`${n(i)}:${n(s)}:${n(a)}`:`${n(s)}:${n(a)}`},parseTime(e){const t=e.split(":").map(e=>parseInt(e,10));return 3===t.length?3600*(t[0]??0)+60*(t[1]??0)+(t[2]??0):2===t.length?60*(t[0]??0)+(t[1]??0):1===t.length?t[0]??0:0},formatDuration(e){if(!isFinite(e)||e<0)return x.t("time.seconds",{count:0});const t=Math.floor(e/3600),i=Math.floor(e%3600/60),s=Math.floor(e%60),a=[];return t>0&&a.push(x.t(1===t?"time.hour":"time.hours",{count:t})),i>0&&a.push(x.t(1===i?"time.minute":"time.minutes",{count:i})),(s>0||0===a.length)&&a.push(x.t(1===s?"time.second":"time.seconds",{count:s})),a.join(", ")},formatPercentage(e,t){return 0===t?0:Math.round(e/t*100)}}}});function O(e,t=""){const i=document.createElement("span");i.className=`vidply-icon ${t}`.trim(),i.setAttribute("aria-hidden","true");const s=V[e]||V.play;return s&&i.appendChild(s.cloneNode(!0)),i}var F=s({"src/icons/Icons.ts"(){R={play:'<path d="M8 5v14l11-7z"/>',pause:'<path d="M6 4h4v16H6V4zm8 0h4v16h-4V4z"/>',stop:'<rect x="6" y="6" width="12" height="12"/>',rewind:'<path d="M11 18V6l-8.5 6 8.5 6zm.5-6l8.5 6V6l-8.5 6z"/>',forward:'<path d="M4 18l8.5-6L4 6v12zm9-12v12l8.5-6L13 6z"/>',skipPrevious:'<path d="M6 6h2v12H6V6zm3 6l8.5 6V6L9 12z"/>',skipNext:'<path d="M16 6h2v12h-2V6zM6 6l8.5 6L6 18V6z"/>',restart:'<path d="M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z"/>',volumeHigh:'<path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/>',volumeMedium:'<path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"/>',volumeLow:'<path d="M7 9v6h4l5 5V4l-5 5H7z"/>',volumeMuted:'<path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"/>',fullscreen:'<path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/>',fullscreenExit:'<path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"/>',settings:'<path d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94L14.4 2.81c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>',captions:'<path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z"/>',captionsOff:'<path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z"/><path d="M0 0h24v24H0z" fill="none"/>',pip:'<path d="M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98V5c0-1.1-.9-2-2-2zm0 16.01H3V4.98h18v14.03z"/>',speed:'<path d="M20.38 8.57l-1.23 1.85a8 8 0 0 1-.22 7.58H5.07A8 8 0 0 1 15.58 6.85l1.85-1.23A10 10 0 0 0 3.35 19a2 2 0 0 0 1.72 1h13.85a2 2 0 0 0 1.74-1 10 10 0 0 0-.27-10.44z"/><path d="M10.59 15.41a2 2 0 0 0 2.83 0l5.66-8.49-8.49 5.66a2 2 0 0 0 0 2.83z"/>',close:'<path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>',check:'<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>',loading:'<path d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z"/>',error:'<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>',playlist:'<path d="M15 6H3v2h12V6zm0 4H3v2h12v-2zM3 16h8v-2H3v2zM17 6v8.18c-.31-.11-.65-.18-1-.18-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3V8h3V6h-5z"/>',hd:'<path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-8 12H9.5v-2h-2v2H6V9h1.5v2.5h2V9H11v6zm7-1c0 .55-.45 1-1 1h-.75v1.5h-1.5V15H14c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v4zm-3.5-.5h2v-3h-2v3z"/>',transcript:'<path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"/>',chapters:'<path d="M3 5h2v2H3V5zm0 4h2v2H3V9zm0 4h2v2H3v-2zm0 4h2v2H3v-2zM7 5h14v2H7V5zm0 4h14v2H7V9zm0 4h14v2H7v-2zm0 4h14v2H7v-2z"/>',audioDescription:'<rect x="2" y="5" width="20" height="14" rx="2" fill="none" stroke="currentColor" stroke-width="1.5"/><text x="12" y="14.5" text-anchor="middle" font-size="8" font-weight="bold" font-family="Arial, sans-serif" fill="currentColor">AD</text>',audioDescriptionOn:'<rect x="2" y="5" width="20" height="14" rx="2" fill="currentColor"/><text x="12" y="14.5" text-anchor="middle" font-size="8" font-weight="bold" font-family="Arial, sans-serif" class="vidply-icon-ad-fg">AD</text>',signLanguage:'<g transform="scale(1.5)"><path d="M16 11.3c-.1-.9-4.8 1.3-5.4 1.1-2.6-1 5.8-1.3 5.1-2.9s-5.1 1.5-6 1.4C6.5 9.4 16.5 9.1 13.5 8c-1.9-.6-8.8 2.9-6.8.4.7-.6.7-1.9-.7-1.7-9.7 7.2-.7 12.2 8.8 7 0-1.3-3.5.4-4.1.4-2.6 0 5.6-2 5.4-3ZM3.9 7.8c3.2-4.2 3.7 1.2 6 .1s.2-.2.2-.3c.7-2.7 2.5-7.5-1.5-1.3-1.6 0 1.1-4 1-4.6C8.9-1 7.3 4.4 7.2 4.9c-1.6.7-.9-1.4-.7-1.5 3-6-.6-3.1-.9.4-2.5 1.8 0-2.8 0-3.5C2.8-.9 4 9.4 1.1 4.9S.1 4.6 0 5c-.4 2.7 2.6 7.2 3.9 2.8Z"/></g>',signLanguageOn:'<g transform="scale(1.5)"><path d="M16 11.3c-.1-.9-4.8 1.3-5.4 1.1-2.6-1 5.8-1.3 5.1-2.9s-5.1 1.5-6 1.4C6.5 9.4 16.5 9.1 13.5 8c-1.9-.6-8.8 2.9-6.8.4.7-.6.7-1.9-.7-1.7-9.7 7.2-.7 12.2 8.8 7 0-1.3-3.5.4-4.1.4-2.6 0 5.6-2 5.4-3ZM3.9 7.8c3.2-4.2 3.7 1.2 6 .1s.2-.2.2-.3c.7-2.7 2.5-7.5-1.5-1.3-1.6 0 1.1-4 1-4.6C8.9-1 7.3 4.4 7.2 4.9c-1.6.7-.9-1.4-.7-1.5 3-6-.6-3.1-.9.4-2.5 1.8 0-2.8 0-3.5C2.8-.9 4 9.4 1.1 4.9S.1 4.6 0 5c-.4 2.7 2.6 7.2 3.9 2.8Z"/></g>',signLanguagePip:'<g transform="scale(1.2) translate(1, 1)"><path d="M16 11.3c-.1-.9-4.8 1.3-5.4 1.1-2.6-1 5.8-1.3 5.1-2.9s-5.1 1.5-6 1.4C6.5 9.4 16.5 9.1 13.5 8c-1.9-.6-8.8 2.9-6.8.4.7-.6.7-1.9-.7-1.7-9.7 7.2-.7 12.2 8.8 7 0-1.3-3.5.4-4.1.4-2.6 0 5.6-2 5.4-3ZM3.9 7.8c3.2-4.2 3.7 1.2 6 .1s.2-.2.2-.3c.7-2.7 2.5-7.5-1.5-1.3-1.6 0 1.1-4 1-4.6C8.9-1 7.3 4.4 7.2 4.9c-1.6.7-.9-1.4-.7-1.5 3-6-.6-3.1-.9.4-2.5 1.8 0-2.8 0-3.5C2.8-.9 4 9.4 1.1 4.9S.1 4.6 0 5c-.4 2.7 2.6 7.2 3.9 2.8Z"/></g><polygon points="14,23 23,14 23,23" fill="currentColor"/>',signLanguagePipOn:'<g transform="scale(1.2) translate(1, 1)"><path d="M16 11.3c-.1-.9-4.8 1.3-5.4 1.1-2.6-1 5.8-1.3 5.1-2.9s-5.1 1.5-6 1.4C6.5 9.4 16.5 9.1 13.5 8c-1.9-.6-8.8 2.9-6.8.4.7-.6.7-1.9-.7-1.7-9.7 7.2-.7 12.2 8.8 7 0-1.3-3.5.4-4.1.4-2.6 0 5.6-2 5.4-3ZM3.9 7.8c3.2-4.2 3.7 1.2 6 .1s.2-.2.2-.3c.7-2.7 2.5-7.5-1.5-1.3-1.6 0 1.1-4 1-4.6C8.9-1 7.3 4.4 7.2 4.9c-1.6.7-.9-1.4-.7-1.5 3-6-.6-3.1-.9.4-2.5 1.8 0-2.8 0-3.5C2.8-.9 4 9.4 1.1 4.9S.1 4.6 0 5c-.4 2.7 2.6 7.2 3.9 2.8Z"/></g><polygon points="14,23 23,14 23,23" fill="currentColor"/>',music:'<path d="M12 3v9.28c-.47-.17-.97-.28-1.5-.28C8.01 12 6 14.01 6 16.5S8.01 21 10.5 21c2.31 0 4.2-1.75 4.45-4H15V6h4V3h-7zm-1.5 16c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/>',moreVertical:'<path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/>',move:'<path d="M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z"/>',resize:'<path d="M21.71 11.29l-9-9c-.39-.39-1.02-.39-1.41 0l-9 9c-.39.39-.39 1.02 0 1.41l9 9c.39.39 1.02.39 1.41 0l9-9c.39-.38.39-1.01 0-1.41zM14 14.5V12h-4v2.5L7 11l3-3.5V10h4V7.5l3 3.5-3 3.5z"/>',clock:'<path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/><path d="M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"/>',download:'<path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/>'},B=e=>`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">${e}</svg>`,Object.fromEntries(Object.entries(R).map(([e,t])=>[e,B(t)])),V=(()=>{const e=new DOMParser,t={};for(const[i,s]of Object.entries(R)){const a=e.parseFromString(B(s),"image/svg+xml").documentElement;a&&"svg"===a.nodeName.toLowerCase()&&!a.querySelector("parsererror")&&(t[i]=a)}return t})()}});function I(e,{delay:t=0,preventScroll:i=!0}={}){e&&requestAnimationFrame(()=>{setTimeout(()=>{e&&document.contains(e)&&e.focus({preventScroll:i})},t)})}var N=s({"src/utils/FocusUtils.ts"(){}});function W(e,t=100){let i;return function(...s){clearTimeout(i),i=setTimeout(()=>{clearTimeout(i),e.apply(this,s)},t)}}function q(e=768){return window.innerWidth<e}function U(e="nearest"){return{behavior:"undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches?"auto":"smooth",block:e}}function j(e,t=100){let i=!1;const s=()=>{i||(i=!0,e())};requestAnimationFrame(s),setTimeout(s,t)}var K=s({"src/utils/PerformanceUtils.ts"(){}}),Q={};function Y(e){const t=e.replace("captions","");return t.charAt(0).toLowerCase()+t.slice(1)}function X(t,i,s,a){const n=e.createElement("div",{className:`${t.options.classPrefix}-style-group`}),r=`${t.options.classPrefix}-${s}-${Date.now()}`,o=e.createElement("label",{textContent:i,attributes:{for:r},style:{display:"block",fontSize:"12px",marginBottom:"4px",color:"rgba(255,255,255,0.7)"}});n.appendChild(o);const l=e.createElement("select",{className:`${t.options.classPrefix}-style-select`,attributes:{id:r},style:{width:"100%",padding:"6px",background:"var(--vidply-white)",border:"1px solid var(--vidply-white-10)",borderRadius:"4px",color:"var(--vidply-black)",fontSize:"13px"}}),d=t.options[s];return a.forEach(t=>{const i=e.createElement("option",{textContent:t.label,attributes:{value:t.value}});t.value===d&&(i.selected=!0),l.appendChild(i)}),l.addEventListener("mousedown",e=>{e.stopPropagation()}),l.addEventListener("click",e=>{e.stopPropagation()}),l.addEventListener("change",e=>{e.stopPropagation(),t.options[s]=e.target.value,t.captionManager&&t.captionManager.setCaptionStyle(Y(s),e.target.value)}),n.appendChild(l),n}function G(t,i,s){const a=e.createElement("div",{className:`${t.options.classPrefix}-style-group`}),n=`${t.options.classPrefix}-${s}-${Date.now()}`,r=e.createElement("label",{textContent:i,attributes:{for:n},style:{display:"block",fontSize:"12px",marginBottom:"4px",color:"rgba(255,255,255,0.7)"}});a.appendChild(r);const o=e.createElement("input",{attributes:{id:n,type:"color",value:String(t.options[s]??"")},style:{width:"100%",height:"32px",padding:"2px",background:"rgba(255,255,255,0.1)",border:"1px solid rgba(255,255,255,0.2)",borderRadius:"4px",cursor:"pointer"}});return o.addEventListener("mousedown",e=>{e.stopPropagation()}),o.addEventListener("click",e=>{e.stopPropagation()}),o.addEventListener("change",e=>{e.stopPropagation(),t.options[s]=e.target.value,t.captionManager&&t.captionManager.setCaptionStyle(Y(s),e.target.value)}),a.appendChild(o),a}function J(t,i){const s=t.player,a=document.querySelector(`.${s.options.classPrefix}-caption-style-menu`);if(a)return a.remove(),i.setAttribute("aria-expanded","false"),void(t.openMenu===a&&(t.openMenu=null,t.openMenuButton=null));const n=`${s.options.classPrefix}-caption-style-label-${s.instanceId||""}`,r=e.createElement("div",{className:`${s.options.classPrefix}-caption-style-menu ${s.options.classPrefix}-menu ${s.options.classPrefix}-settings-menu`,attributes:{role:"dialog","aria-modal":"false","aria-labelledby":n}}),o=e.createElement("h2",{textContent:x.t("player.captionStyling"),attributes:{id:n,class:`${s.options.classPrefix}-sr-only`},style:{position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0,0,0,0)",whiteSpace:"nowrap",border:"0"}});if(r.appendChild(o),r.addEventListener("click",e=>{e.stopPropagation()}),!s.captionManager||0===s.captionManager.tracks.length){const a=e.createElement("div",{className:`${s.options.classPrefix}-menu-item`,textContent:x.t("player.noCaptions"),attributes:{role:"status"},style:{opacity:"0.5",cursor:"default",padding:"12px 16px"}});return r.appendChild(a),r.style.visibility="hidden",r.style.display="block",t.insertMenuIntoDOM(r,i),t.positionMenu(r,i,!0),requestAnimationFrame(()=>{r.style.visibility="visible"}),void t.attachMenuCloseHandler(r,i,!0)}r.appendChild(X(s,x.t("styleLabels.fontSize"),"captionsFontSize",[{label:x.t("fontSizes.small"),value:"87.5%"},{label:x.t("fontSizes.normal"),value:"100%"},{label:x.t("fontSizes.large"),value:"125%"},{label:x.t("fontSizes.xlarge"),value:"150%"}])),r.appendChild(X(s,x.t("styleLabels.font"),"captionsFontFamily",[{label:x.t("fontFamilies.sansSerif"),value:"sans-serif"},{label:x.t("fontFamilies.serif"),value:"serif"},{label:x.t("fontFamilies.monospace"),value:"monospace"}])),r.appendChild(G(s,x.t("styleLabels.textColor"),"captionsColor")),r.appendChild(G(s,x.t("styleLabels.background"),"captionsBackgroundColor")),r.appendChild(((t,i,s)=>{const a=e.createElement("div",{className:`${t.options.classPrefix}-style-group`}),n=`${t.options.classPrefix}-${s}-${Date.now()}`,r=e.createElement("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"4px"}}),o=e.createElement("label",{textContent:i,attributes:{for:n},style:{fontSize:"12px",color:"rgba(255,255,255,0.7)"}}),l=e.createElement("span",{textContent:Math.round(100*Number(t.options[s]??0))+"%",style:{fontSize:"12px",color:"rgba(255,255,255,0.7)"}});r.appendChild(o),r.appendChild(l),a.appendChild(r);const d=e.createElement("input",{attributes:{id:n,type:"range",min:"0",max:"1",step:"0.1",value:String(t.options[s])},style:{width:"100%",cursor:"pointer"}});return d.addEventListener("mousedown",e=>{e.stopPropagation()}),d.addEventListener("click",e=>{e.stopPropagation()}),d.addEventListener("input",e=>{e.stopPropagation();const i=parseFloat(e.target.value);l.textContent=Math.round(100*i)+"%",t.options[s]=i,t.captionManager&&t.captionManager.setCaptionStyle(Y(s),i)}),a.appendChild(d),a})(s,x.t("styleLabels.opacity"),"captionsOpacity")),r.style.minWidth="220px",r.style.visibility="hidden",r.style.display="block",t.insertMenuIntoDOM(r,i),t.positionMenu(r,i,!0),requestAnimationFrame(()=>{r.style.visibility="visible"}),t.attachMenuCloseHandler(r,i,!0),((e,t,i={})=>{if(!e)return;const s=e.querySelector(t);s&&I(s,i)})(r,`.${s.options.classPrefix}-style-select`)}a(Q,{showCaptionStyleMenu:()=>J});var Z,ee,te=s({"src/controls/CaptionStyleMenu.ts"(){d(),H(),N()}});function ie(e,t,i){return Number.isFinite(e)?e<t?t:e>i?i:e:t}function se(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0}function ae(e){if(!e||"object"!=typeof e)return!1;const t=e;return se(t.currentTime)&&se(t.duration)&&"number"==typeof t.percentage&&Number.isFinite(t.percentage)&&"number"==typeof t.updatedAt&&Number.isFinite(t.updatedAt)}function ne(e){return Boolean(e)&&"object"==typeof e&&!Array.isArray(e)}function re(e){if(!ne(e))return!1;for(const t of Object.values(e))if(!ae(t))return!1;return!0}var oe=s({"src/utils/StorageManager.ts"(){D(),Z=class e{constructor(e="vidply"){n(this,"namespace"),n(this,"storage"),this.namespace=e,this.storage=this.isStorageAvailable()?localStorage:null}isStorageAvailable(){try{if("undefined"==typeof localStorage)return!1;const e="__storage_test__";return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch{return!1}}getKey(e){return`${this.namespace}_${e}`}set(e,t){if(!this.storage)return!1;try{const i=this.getKey(e);return this.storage.setItem(i,JSON.stringify(t)),!0}catch(e){return console.warn("Failed to save to localStorage:",e),!1}}get(e,t=null,i){if(!this.storage)return t;try{const s=this.getKey(e),a=this.storage.getItem(s);if(null===a)return t;const n=JSON.parse(a);return i&&!i(n)?(console.warn(`[VidPly] Discarding malformed localStorage payload for "${e}"`),t):n}catch(e){return console.warn("Failed to read from localStorage:",e),t}}remove(e){if(!this.storage)return!1;try{const t=this.getKey(e);return this.storage.removeItem(t),!0}catch(e){return console.warn("Failed to remove from localStorage:",e),!1}}clear(){if(!this.storage)return!1;try{const e=this.storage;return Object.keys(e).forEach(t=>{t.startsWith(this.namespace)&&e.removeItem(t)}),!0}catch(e){return console.warn("Failed to clear localStorage:",e),!1}}saveTranscriptPreferences(e){return this.set("transcript_preferences",C(e))}getTranscriptPreferences(){return this.get("transcript_preferences",null,ne)}saveCaptionPreferences(e){return this.set("caption_preferences",C(e))}getCaptionPreferences(){return this.get("caption_preferences",null,ne)}savePlayerPreferences(e){const t=C(e);return"number"==typeof t.volume&&(t.volume=ie(t.volume,0,1)),"number"==typeof t.playbackSpeed&&(t.playbackSpeed=ie(t.playbackSpeed,.1,4)),this.set("player_preferences",t)}getPlayerPreferences(){const e=this.get("player_preferences",null,ne);return e?("number"==typeof e.volume&&(e.volume=ie(e.volume,0,1)),"number"==typeof e.playbackSpeed&&(e.playbackSpeed=ie(e.playbackSpeed,.1,4)),e):null}saveSignLanguagePreferences(e){return this.set("sign_language_preferences",C(e))}getSignLanguagePreferences(){return this.get("sign_language_preferences",null,ne)}saveFloatingPreferences(e){return this.set("floating_preferences",C(e))}getFloatingPreferences(){return this.get("floating_preferences",null,ne)}saveWatchProgress(t,i,s){if("string"!=typeof t||!t)return!1;if(!Number.isFinite(i)||!Number.isFinite(s)||s<=0)return!1;const a=ie(s,.001,86400),n=ie(i,0,a),r=this.get("watch_progress",Object.create(null),re)??Object.create(null);r[t]={currentTime:n,duration:a,percentage:ie(n/a*100,0,100),updatedAt:Date.now()};const o=Object.entries(r);if(o.length>e.MAX_WATCH_PROGRESS_ENTRIES){o.sort((e,t)=>e[1].updatedAt-t[1].updatedAt);const t=o.length-e.MAX_WATCH_PROGRESS_ENTRIES;for(let e=0;e<t;e++){const t=o[e];t&&delete r[t[0]]}}return this.set("watch_progress",r)}getWatchProgress(e){if(!e)return null;const t=(this.get("watch_progress",Object.create(null),re)??Object.create(null))[e];return t&&ae(t)?t:null}clearWatchProgress(e){if(!e)return!1;const t=this.get("watch_progress",Object.create(null),re)??Object.create(null);return!t[e]||(delete t[e],this.set("watch_progress",t))}},n(Z,"MAX_WATCH_PROGRESS_ENTRIES",100),ee=Z}});function le(e,t,i="player.captions"){const s=(e??"").trim(),a=(t??"").trim();if(""!==s&&!/^\d+$/.test(s)&&!/^(null|undefined)$/i.test(s))return s;if(""!==a&&!/^(null|undefined)$/i.test(a)){try{const e=new Intl.DisplayNames([a,"en"],{type:"language"}).of(a);if(e&&e.toLowerCase()!==a.toLowerCase())return e}catch{}return a.toUpperCase()}return x.t(i)}var de,he,ce=s({"src/utils/TrackLabelUtils.ts"(){H()}}),ue=s({"src/controls/CaptionManager.ts"(){d(),H(),oe(),K(),ce(),de=class{constructor(e){n(this,"player"),n(this,"_altCueChangeHandler",null),n(this,"cueChangeHandler",null),n(this,"currentCue"),n(this,"currentTrack"),n(this,"debouncedPositionCaptions"),n(this,"element"),n(this,"storage"),n(this,"tracks"),this.player=e,this.tracks=[],this.currentTrack=null,this.currentCue=null,this.storage=new ee("vidply"),this.loadSavedPreferences(),this.init()}loadSavedPreferences(){const e=this.storage.getCaptionPreferences();e&&("string"==typeof e.fontSize&&(this.player.options.captionsFontSize=e.fontSize),"string"==typeof e.fontFamily&&(this.player.options.captionsFontFamily=e.fontFamily),"string"==typeof e.color&&(this.player.options.captionsColor=e.color),"string"==typeof e.backgroundColor&&(this.player.options.captionsBackgroundColor=e.backgroundColor),"number"==typeof e.opacity&&(this.player.options.captionsOpacity=e.opacity))}saveCaptionPreferences(){this.storage.saveCaptionPreferences({fontSize:this.player.options.captionsFontSize,fontFamily:this.player.options.captionsFontFamily,color:this.player.options.captionsColor,backgroundColor:this.player.options.captionsBackgroundColor,opacity:this.player.options.captionsOpacity})}init(){this.createElement(),this.loadTracks(),this.attachEvents(),this.player.options.captionsDefault&&this.tracks.length>0&&!this.currentTrack&&this.enable()}createElement(){this.element=e.createElement("div",{className:`${this.player.options.classPrefix}-captions`,attributes:{role:"region","aria-label":x.t("player.captions"),"aria-live":"polite"}}),this.updateStyles(),(this.player.videoWrapper||this.player.container).appendChild(this.element)}loadTracks(){const e=this.player.element.textTracks;let t=-1;const i=new Map;for(let s=0;s<e.length;s++){const a=e[s];if(a&&("subtitles"===a.kind||"captions"===a.kind)&&!a._vidplyStale){a.mode="hidden";const e=`${a.language}|${a.label}`,n=i.get(e);if(n){n.alternatives.push(a);continue}const r=this.player.findTrackElement(a),o=!!r&&r.hasAttribute("default"),l={track:a,language:a.language,label:le(a.label,a.language),kind:a.kind,index:s,isDefault:o,alternatives:[]};this.tracks.push(l),i.set(e,l),o&&(t=this.tracks.length-1)}}t>=0&&requestAnimationFrame(()=>{this.enable(t)})}_syncHlsSubtitleTrack(e,t){var i;const s=this.player.renderer;if(!(null==s?void 0:s.hls)||!(null==(i=s.hls.subtitleTracks)?void 0:i.length))return;const a=s.hls.subtitleTracks;let n=a.findIndex(t=>t.lang===e);n<0&&t&&(n=a.findIndex(e=>e.name===t)),n>=0&&s.hls.subtitleTrack!==n&&(s.hls.subtitleTrack=n,this.player.log(`HLS subtitle track set to index ${n} (${e})`,"info"))}attachEvents(){this.player.on("timeupdate",()=>{this.updateCaptions()}),this.player.on("textcuesupdate",()=>{this.updateCaptions()}),this.player.on("captionschange",()=>{this.updateStyles()}),this.debouncedPositionCaptions=W(()=>{this.positionCaptionsOnMobile()},150),window.addEventListener("resize",this.debouncedPositionCaptions,{signal:this.player.lifecycleSignal}),this.player.on("enterfullscreen",()=>{j(()=>this.positionCaptionsOnMobile(),100)}),this.player.on("exitfullscreen",()=>{j(()=>this.positionCaptionsOnMobile(),100)})}enable(e=0){if(0===this.tracks.length)return;this._cleanupTrackListeners();const t=this.tracks[e];if(t&&t.track){t.track.mode="hidden",this.currentTrack=t,this.player.state.captionsEnabled=!0,t.language&&this.element.setAttribute("lang",t.language);const e=()=>{this.updateCaptions()};if(this.cueChangeHandler=e,t.track.addEventListener("cuechange",e),t.alternatives&&t.alternatives.length>0){const i=()=>{if(this.currentTrack===t)for(const s of t.alternatives)if(s.activeCues&&s.activeCues.length>0)return this.player.log(`Switching to alternative caption track for "${t.label}"`,"info"),t.track.removeEventListener("cuechange",e),t.alternatives.forEach(e=>e.removeEventListener("cuechange",i)),t.track=s,t.track.addEventListener("cuechange",e),this._altCueChangeHandler=null,void this.updateCaptions()};this._altCueChangeHandler=i,t.alternatives.forEach(e=>{e.mode="hidden",e.addEventListener("cuechange",i)})}const i=this.player.findTrackElement(t.track),s=()=>{if(i&&i.readyState<2){const e=()=>{i.removeEventListener("load",e),i.removeEventListener("error",e),requestAnimationFrame(()=>{this.currentTrack&&this.currentTrack.track===t.track&&this.updateCaptions()})};i.addEventListener("load",e,{once:!0}),i.addEventListener("error",e,{once:!0})}else requestAnimationFrame(()=>{this.currentTrack&&this.currentTrack.track===t.track&&this.updateCaptions()})};requestAnimationFrame(()=>{this.currentTrack&&this.currentTrack.track===t.track&&s()}),this._syncHlsSubtitleTrack(t.language,t.label),this.player.emit("captionsenabled",t)}}_cleanupTrackListeners(){if(this.currentTrack&&this.currentTrack.track){const e=this.cueChangeHandler;e&&this.currentTrack.track.removeEventListener("cuechange",e);const t=this._altCueChangeHandler;t&&this.currentTrack.alternatives&&this.currentTrack.alternatives.forEach(e=>{e.removeEventListener("cuechange",t)}),this.currentTrack.track.mode="hidden"}this._altCueChangeHandler=null}disable(){this._cleanupTrackListeners(),this.currentTrack=null,this.element.style.display="none",this.element.replaceChildren(),this.element.removeAttribute("lang"),this.currentCue=null,this.player.state.captionsEnabled=!1,this.player.emit("captionsdisabled")}updateCaptions(){var t,i;if(!this.currentTrack||!this.currentTrack.track)return;if(null==(i=null==(t=this.player.renderer)?void 0:t.handlesOwnCaptions)?void 0:i.call(t))return;if("disabled"===this.currentTrack.track.mode&&(this.currentTrack.track.mode="hidden"),"showing"===this.currentTrack.track.mode&&(this.currentTrack.track.mode="hidden"),!this.currentTrack.track.activeCues)return void(this.currentTrack.track.cues&&this.currentTrack.track.cues.length>0&&this.currentCue&&(this.element.replaceChildren(),this.element.style.display="none",this.currentCue=null));const s=this.currentTrack.track.activeCues,a="audio"===this.player.element.tagName.toLowerCase();if(s.length>0){const t=s[0];if(this.currentCue!==t){this.currentCue=t;const i=t.text||"";if(!i.trim())return;const s=e.renderVTTToDOM(i);if(a){this.element.querySelectorAll(`.${this.player.options.classPrefix}-caption-cue`).forEach(e=>e.classList.remove(`${this.player.options.classPrefix}-caption-active`));const e=`cue-${t.startTime}-${t.endTime}`;let i=this.element.querySelector(`[data-cue-id="${e}"]`);i?i.replaceChildren(s):(i=document.createElement("div"),i.className=`${this.player.options.classPrefix}-caption-cue`,i.setAttribute("data-cue-id",e),i.replaceChildren(s),this.element.appendChild(i)),i.classList.add(`${this.player.options.classPrefix}-caption-active`),requestAnimationFrame(()=>{i&&i.scrollIntoView(U("center"))})}else this.element.replaceChildren(s);this.element.style.display="block",this.positionCaptionsOnMobile(),this.player.emit("captionchange",t)}}else this.currentCue&&(a||(this.element.replaceChildren(),this.element.style.display="none"),this.currentCue=null)}positionCaptionsOnMobile(){var e,t;if(!this.element||"none"===this.element.style.display)return;const i=(null==(e=this.player.state)?void 0:e.fullscreen)||!1,s=q();if(!s&&!i)return void(this.element.style.bottom="");const a=null==(t=this.player.controlBar)?void 0:t.element;a&&requestAnimationFrame(()=>{if(!this.element||"none"===this.element.style.display)return;const e=a.getBoundingClientRect();if(!this.player.videoWrapper)return;const t=this.player.videoWrapper.getBoundingClientRect().bottom-e.top+16;this.element.style.bottom=`${t}px`,this.player.options.debug&&console.log("[VidPly] Caption position:",{mobile:s,isFullscreen:i,controlsHeight:e.height,bottomOffset:`${t}px`})})}updateStyles(){if(!this.element)return;const e=this.player.options;this.element.style.fontSize=e.captionsFontSize,this.element.style.fontFamily=e.captionsFontFamily,this.element.style.color=e.captionsColor,this.element.style.backgroundColor=this.hexToRgba(e.captionsBackgroundColor,e.captionsOpacity)}hexToRgba(e,t){const i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return i&&i[1]&&i[2]&&i[3]?`rgba(${parseInt(i[1],16)}, ${parseInt(i[2],16)}, ${parseInt(i[3],16)}, ${t})`:e}setCaptionStyle(e,t){switch(e){case"fontSize":this.player.options.captionsFontSize=String(t);break;case"fontFamily":this.player.options.captionsFontFamily=String(t);break;case"color":this.player.options.captionsColor=String(t);break;case"backgroundColor":this.player.options.captionsBackgroundColor=String(t);break;case"opacity":this.player.options.captionsOpacity=Number(t)}this.updateStyles(),this.saveCaptionPreferences(),this.player.emit("captionschange")}getAvailableTracks(){return this.tracks.map((e,t)=>({index:t,language:e.language,label:e.label||e.language,kind:e.kind}))}refreshTracks(){var e;const t=null==(e=this.currentTrack)?void 0:e.language,i=this.player.state.captionsEnabled;if(this.currentTrack&&this.disable(),this.tracks=[],this.loadTracks(),this.player.log(`Caption tracks refreshed, found ${this.tracks.length} tracks`,"info"),i&&t&&this.tracks.length>0){const e=this.tracks.findIndex(e=>e.language===t);e>=0&&this.enable(e)}return this.tracks.length}switchTrack(e){e>=0&&e<this.tracks.length&&(this.disable(),this.enable(e))}destroy(){this.disable(),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}}}}),pe={};a(pe,{HTML5Renderer:()=>he});var ge,me=s({"src/renderers/HTML5Renderer.ts"(){he=class{constructor(e){n(this,"player"),n(this,"media"),n(this,"_didDeferredLoad"),n(this,"_listenerController"),this.player=e,this.media=e.element,this._didDeferredLoad=!1,this._listenerController=new AbortController}async init(){this.media.controls=!1,this.media.removeAttribute("controls"),this.attachEvents(),this.player.options.deferLoad?(this.media.preload=this.player.options.preload||"none","metadata"===this.player.options.preload&&this.media.load()):(this.media.preload=this.player.options.preload,this.media.load()),this.player.container&&this.player.container.classList.remove("vidply-external-controls")}attachEvents(){const{signal:e}=this._listenerController;this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata"),"VIDEO"===this.media.tagName&&this.player.autoGeneratePoster().catch(e=>{this.player.log("Failed to auto-generate poster:",e,"warn")})},{signal:e}),this.media.addEventListener("durationchange",()=>{const e=this.media.duration;e&&isFinite(e)&&e>0&&(this.player.state.duration=e,this.player.emit("durationchange",e))},{signal:e}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player),this.player.options.pauseOthersOnPlay&&this.pauseOtherPlayers()},{signal:e}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)},{signal:e}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())},{signal:e}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)},{signal:e}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume),this.player.options.onVolumeChange&&this.player.options.onVolumeChange.call(this.player,this.media.volume)},{signal:e}),this.media.addEventListener("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking")},{signal:e}),this.media.addEventListener("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")},{signal:e}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")},{signal:e}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")},{signal:e}),this.media.addEventListener("progress",()=>{if(this.media.buffered.length>0){const e=this.media.buffered.end(this.media.buffered.length-1);this.player.emit("progress",e)}},{signal:e}),this.media.addEventListener("error",e=>{this.player.handleError(this.media.error)},{signal:e}),this.media.addEventListener("ratechange",()=>{this.player.state.playbackSpeed=this.media.playbackRate,this.player.emit("ratechange",this.media.playbackRate)},{signal:e})}pauseOtherPlayers(){document.querySelectorAll(".vidply-player").forEach(e=>{if(e!==this.player.container){const t=e.querySelector("video, audio");t&&!t.paused&&t.pause()}})}play(){const e=window.scrollX,t=window.scrollY;if(this.player.options.deferLoad&&!this._didDeferredLoad){try{0===this.media.readyState&&this.media.load()}catch{}this._didDeferredLoad=!0}const i=this.media.play();return window.scrollTo(e,t),void 0!==i?(i.catch(e=>{if(this.player.log("Play failed:",e,"warn"),this.player.options.autoplay&&!this.player.state.muted){this.player.log("Retrying play with muted audio","info"),this.media.muted=!0;const e=window.scrollX,t=window.scrollY;this.media.play().then(()=>{window.scrollTo(e,t)}).catch(e=>{this.player.handleError(e)})}}),i):Promise.resolve()}ensureLoaded(){if(this.player.options.deferLoad&&!this._didDeferredLoad){try{0===this.media.readyState&&this.media.load()}catch{}this._didDeferredLoad=!0}}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}getQualities(){const e=Array.from(this.media.querySelectorAll("source"));return e.length<=1?[]:e.map((e,t)=>{const i=e.getAttribute("data-quality")||e.getAttribute("data-label")||e.getAttribute("label")||"",s=e.getAttribute("data-height")||String(this.extractHeightFromLabel(i)),a=e.getAttribute("data-width")||"";return{index:t,height:s?parseInt(s):0,width:a?parseInt(a):0,src:e.src,type:e.type,name:i||(s?`${s}p`:`Quality ${t+1}`)}}).filter(e=>e.height>0)}extractHeightFromLabel(e){const t=e.match(/(\d+)p/i);return t&&t[1]?parseInt(t[1],10):0}switchQuality(e){const t=this.getQualities();if(e<0||e>=t.length)return void this.player.log("Invalid quality index","warn");const i=t[e];if(!i||!i.src)return;const s=this.media.currentTime,a=!this.media.paused;if(this.media.currentSrc===i.src)return void this.player.log("Already at this quality level","info");this.player.log(`Switching to quality: ${i.name}`,"info"),this.media.src=i.src;const n=()=>{this.media.removeEventListener("loadedmetadata",n),this.media.currentTime=s,a&&this.media.play().catch(()=>{this.player.log("Failed to resume playback after quality switch","warn")}),this.player.emit("qualitychange",{quality:i.name,index:e})};this.media.addEventListener("loadedmetadata",n),this.media.load()}getCurrentQuality(){var e;const t=this.getQualities(),i=this.media.currentSrc;for(let s=0;s<t.length;s++)if((null==(e=t[s])?void 0:e.src)===i)return s;return 0}destroy(){this._listenerController.abort()}}}}),ye={};a(ye,{AudioDescriptionManager:()=>ge});var fe,ve=s({"src/core/AudioDescriptionManager.ts"(){ue(),ge=class{constructor(e){n(this,"player"),n(this,"captionTracks"),n(this,"desiredState"),n(this,"enabled"),n(this,"originalSource"),n(this,"sourceElement"),n(this,"src"),this.player=e,this.enabled=!1,this.desiredState=!1,this.src=e.options.audioDescriptionSrc,this.sourceElement=null,this.originalSource=null,this.captionTracks=[]}initFromSourceElements(e,t){for(const t of e){const e=t.getAttribute("data-desc-src"),i=t.getAttribute("data-orig-src");if(e||i){if(this.sourceElement||(this.sourceElement=t),i)this.originalSource||(this.originalSource=i),this.player.originalSrc||(this.player.originalSrc=i);else{const e=t.getAttribute("src");!this.originalSource&&e&&(this.originalSource=e),!this.player.originalSrc&&e&&(this.player.originalSrc=e)}e&&!this.src&&(this.src=e)}}t.forEach(e=>{const t=e.getAttribute("kind"),i=e.getAttribute("data-desc-src");("captions"===t||"subtitles"===t||"chapters"===t||"descriptions"===t)&&i&&e instanceof HTMLTrackElement&&(this.captionTracks.push({trackElement:e,originalSrc:e.getAttribute("src"),describedSrc:i,originalTrackSrc:e.getAttribute("data-orig-src")||e.getAttribute("src"),explicit:!0}),this.player.log(`Found explicit described ${t} track: ${e.getAttribute("src")} -> ${i}`))})}isAvailable(){const e=this.player.sourceElements.some(e=>e.getAttribute("data-desc-src"));return Boolean(this.src||e||this.captionTracks.length>0)}async enable(){const e=this.player.sourceElements.some(e=>e.getAttribute("data-desc-src")),t=this.captionTracks.length>0;if(!this.src&&!e&&!t)return void console.warn("VidPly: No audio description source, source elements, or tracks provided");this.desiredState=!0;const i=this.player.state.currentTime,s=this.player.state.playing,a=this.player.element.poster||this.player.element.getAttribute("poster")||this.player.options.poster,n=i<.1&&!s,r=this._getCurrentCaptionText();this.sourceElement?await this._enableWithSourceElement(i,s,a,n,r):this.src?await this._enableWithDirectSrc(i,s,a,n):t&&(await this._swapCaptionTracks(!0),this.enabled=!0,this.player.emit("audiodescriptionenabled"))}async disable(){if(this.desiredState=!1,!this.sourceElement&&!this.src&&this.captionTracks.length>0)return await this._swapCaptionTracks(!1),this.enabled=!1,void this.player.emit("audiodescriptiondisabled");if(!this.player.originalSrc)return;const e=this.player.state.currentTime,t=this.player.state.playing,i=this.player.element.poster||this.player.element.getAttribute("poster")||this.player.options.poster,s=e<.1&&!t,a=this._getCurrentCaptionText();this.sourceElement?await this._disableWithSourceElement(e,t,i,s,a):this.src&&await this._disableWithDirectSrc(e,t,i)}async toggle(){const e=this.player.findTextTrack("descriptions"),t=this.isAvailable();e&&!t?"showing"===e.mode?(e.mode="hidden",this.enabled=!1,this.player.emit("audiodescriptiondisabled")):(e.mode="showing",this.enabled=!0,this.player.emit("audiodescriptionenabled")):e&&t?this.enabled?(this.desiredState=!1,await this.disable()):(e.mode="showing",this.desiredState=!0,await this.enable()):t&&(this.enabled?(this.desiredState=!1,await this.disable()):(this.desiredState=!0,await this.enable()))}_getCurrentCaptionText(){return this.player.captionManager&&this.player.captionManager.currentTrack&&this.player.captionManager.currentCue?this.player.captionManager.currentCue.text:null}async _validateTrackExists(e){if("string"!=typeof e||!e)return!1;const t=[],i=this.player.lifecycleSignal;let s;if(i&&t.push(i),"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&t.push(AbortSignal.timeout(8e3)),1===t.length)s=t[0];else if(t.length>1){const e=AbortSignal.any;s=e?e(t):t[0]}try{return(await fetch(e,{method:"HEAD",signal:s})).ok}catch{return!1}}async _swapCaptionTracks(e=!0){if(0===this.captionTracks.length)return[];const t=[],i=this.captionTracks.map(async t=>{if(t.trackElement&&t.describedSrc&&!0===t.explicit){const i=e?t.describedSrc:t.originalSrc;if(!i)return{trackInfo:t,exists:!1};try{return{trackInfo:t,exists:await this._validateTrackExists(i)}}catch{return{trackInfo:t,exists:!1}}}return{trackInfo:t,exists:!1}}),s=(await Promise.all(i)).filter(e=>e.exists);if(s.length>0){const i=new Map;s.forEach(({trackInfo:e})=>{const t=e.trackElement.track;i.set(e,t?{wasShowing:"showing"===t.mode,wasHidden:"hidden"===t.mode}:{wasShowing:!1,wasHidden:!1})});const a=s.map(({trackInfo:e})=>{const t={};Array.from(e.trackElement.attributes).forEach(e=>{t[e.name]=e.value});const i={trackInfo:e,oldSrc:e.trackElement.getAttribute("src"),parent:e.trackElement.parentNode,nextSibling:e.trackElement.nextSibling,attributes:t};return e.trackElement.remove(),i});this.player.element.load(),await new Promise(s=>{this.player.setManagedTimeout(()=>{a.forEach(({trackInfo:i,parent:s,nextSibling:a,attributes:n})=>{const r=e?i.describedSrc:i.originalSrc;if(!r)return;t.push(i);const o=document.createElement("track");o.setAttribute("src",r),Object.keys(n).forEach(e=>{const t=n[e];"src"!==e&&"data-desc-src"!==e&&void 0!==t&&o.setAttribute(e,t)});const l=s||this.player.element;a&&a.parentNode?l.insertBefore(o,a):l.appendChild(o),i.trackElement=o}),this.player.invalidateTrackCache();const n=()=>{this.player.setManagedTimeout(()=>{t.forEach(e=>{const t=e.trackElement,s=t.track;if(s){const a=i.get(e)||{wasShowing:!1,wasHidden:!1};s.mode="hidden";const n=()=>{s.mode=a.wasShowing||a.wasHidden?"hidden":"disabled"};t.readyState>=2?n():(t.addEventListener("load",n,{once:!0}),t.addEventListener("error",n,{once:!0}))}})},300)};this.player.element.readyState>=1?this.player.setManagedTimeout(n,200):(this.player.element.addEventListener("loadedmetadata",n,{once:!0}),this.player.setManagedTimeout(n,2e3)),s()},100)})}return t}_updateSourceElements(e=!0){const t=this.player.sourceElements,i=[];t.forEach(t=>{const s=t.getAttribute("data-desc-src"),a=t.getAttribute("src");if(s){const n=t.getAttribute("type"),r=t.getAttribute("data-orig-src")||a;i.push({src:e?s:r,type:n,origSrc:r,descSrc:s})}else i.push({src:t.getAttribute("src"),type:t.getAttribute("type"),origSrc:null,descSrc:null})}),this.player.element.hasAttribute("src")&&this.player.element.removeAttribute("src"),t.forEach(e=>e.remove()),i.forEach(e=>{if(!e.src)return;const t=document.createElement("source");t.setAttribute("src",e.src),e.type&&t.setAttribute("type",e.type),e.origSrc&&t.setAttribute("data-orig-src",e.origSrc),e.descSrc&&t.setAttribute("data-desc-src",e.descSrc);const i=this.player.element.querySelector("track");i?this.player.element.insertBefore(t,i):this.player.element.appendChild(t)}),this.player._sourceElementsDirty=!0,this.player._sourceElementsCache=null}async _waitForMediaReady(e=!1){await new Promise(e=>{if(this.player.element.readyState>=1)e();else{const t=()=>{this.player.element.removeEventListener("loadedmetadata",t),e()};this.player.element.addEventListener("loadedmetadata",t)}}),await new Promise(e=>setTimeout(e,300)),e&&await new Promise(e=>{if(this.player.element.readyState>=3)e();else{const t=()=>{this.player.element.removeEventListener("canplay",t),this.player.element.removeEventListener("canplaythrough",t),e()};this.player.element.addEventListener("canplay",t,{once:!0}),this.player.element.addEventListener("canplaythrough",t,{once:!0}),setTimeout(()=>{this.player.element.removeEventListener("canplay",t),this.player.element.removeEventListener("canplaythrough",t),e()},3e3)}})}async _restorePlaybackState(e,t,i,s){let a=e;if(s&&this.player.captionManager&&this.player.captionManager.tracks.length>0){await new Promise(e=>setTimeout(e,500));const t=this.player.findMatchingCaptionTime(s,this.player.captionManager.tracks);null!==t&&(a=t,this.player.options.debug&&this.player.log(`[VidPly] Syncing via caption: ${e}s -> ${a}s`))}a>0&&(this.player.seek(a),await new Promise(e=>setTimeout(e,100))),t?(await this.player.play(),this.player.setManagedTimeout(()=>{this.player.hidePosterOverlay()},100)):(this.player.pause(),i||this.player.hidePosterOverlay())}async _enableWithSourceElement(e,t,i,s,a){await this._swapCaptionTracks(!0),this._updateSourceElements(!0),i&&"VIDEO"===this.player.element.tagName&&(this.player.element.poster=i),this.player.element.load(),await this._waitForMediaReady(e>0||t),await this._restorePlaybackState(e,t,s,a),this.desiredState&&(this.enabled=!0,this.player.state.audioDescriptionEnabled=!0,this.player.emit("audiodescriptionenabled"),this._reloadTranscript())}async _enableWithDirectSrc(e,t,i,s){await this._swapCaptionTracks(!0),i&&"VIDEO"===this.player.element.tagName&&(this.player.element.poster=i),this.src&&(this.player.element.src=this.src,await this._waitForMediaReady(e>0||t),e>0&&(this.player.seek(e),await new Promise(e=>setTimeout(e,100))),t?await this.player.play():(this.player.pause(),s||this.player.hidePosterOverlay()),this.desiredState&&(this.enabled=!0,this.player.state.audioDescriptionEnabled=!0,this.player.emit("audiodescriptionenabled"),this._reloadTranscript()))}async _disableWithSourceElement(e,t,i,s,a){await this._swapCaptionTracks(!1),this._updateSourceElements(!1),i&&"VIDEO"===this.player.element.tagName&&(this.player.element.poster=i),this.player.element.load(),this.player.invalidateTrackCache(),await this._waitForMediaReady(e>0||t),await this._restorePlaybackState(e,t,s,a),this.player.captionManager&&(this.player.captionManager.destroy(),this.player.captionManager=new de(this.player)),this.desiredState||(this.enabled=!1,this.player.state.audioDescriptionEnabled=!1,this.player.emit("audiodescriptiondisabled"),this._reloadTranscript())}async _disableWithDirectSrc(e,t,i){await this._swapCaptionTracks(!1),i&&"VIDEO"===this.player.element.tagName&&(this.player.element.poster=i);const s=this.originalSource||this.player.originalSrc;s&&(this.player.element.src=s,this.player.element.load(),await this._waitForMediaReady(e>0||t),e>0&&this.player.seek(e),t&&await this.player.play(),this.desiredState||(this.enabled=!1,this.player.state.audioDescriptionEnabled=!1,this.player.emit("audiodescriptiondisabled"),this._reloadTranscript()))}_reloadTranscript(){this.player.transcriptManager&&this.player.transcriptManager.isVisible&&this.player.setManagedTimeout(()=>{this.player.transcriptManager&&this.player.transcriptManager.loadTranscriptData&&this.player.transcriptManager.loadTranscriptData()},800)}updateSources(e){this.src=e||null,this.enabled=!1,this.desiredState=!1,this.sourceElement=null,this.originalSource=null,this.captionTracks=[]}reinitialize(){this.player.invalidateTrackCache(),this.initFromSourceElements(this.player.sourceElements,this.player.trackElements)}destroy(){this.enabled=!1,this.desiredState=!1,this.captionTracks=[],this.sourceElement=null,this.originalSource=null}}}}),be=s({"src/utils/DraggableResizable.ts"(){fe=class{constructor(e,t={}){n(this,"element"),n(this,"options"),n(this,"isDragging"),n(this,"isResizing"),n(this,"resizeDirection"),n(this,"dragOffsetX"),n(this,"dragOffsetY"),n(this,"positionOffsetX"),n(this,"positionOffsetY"),n(this,"initialMouseX"),n(this,"initialMouseY"),n(this,"needsPositionConversion"),n(this,"resizeStartX"),n(this,"resizeStartY"),n(this,"resizeStartWidth"),n(this,"resizeStartHeight"),n(this,"resizeStartLeft"),n(this,"resizeStartTop"),n(this,"keyboardDragMode"),n(this,"keyboardResizeMode"),n(this,"pointerResizeMode"),n(this,"manuallyPositioned"),n(this,"resizeHandlesManaged"),n(this,"resizeIndicatorElement"),n(this,"handlers"),n(this,"activePointerId"),n(this,"activePointerType"),this.element=e,this.options={dragHandle:null,resizeHandles:[],onDragStart:null,onDrag:null,onDragEnd:null,onResizeStart:null,onResize:null,onResizeEnd:null,constrainToViewport:!0,minWidth:150,minHeight:100,maintainAspectRatio:!1,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:5,keyboardStepLarge:10,maxWidth:null,maxHeight:null,pointerResizeIndicatorText:null,onPointerResizeToggle:null,classPrefix:"draggable",storage:null,storageKey:null,...t},this.isDragging=!1,this.isResizing=!1,this.resizeDirection=null,this.dragOffsetX=0,this.dragOffsetY=0,this.positionOffsetX=0,this.positionOffsetY=0,this.initialMouseX=0,this.initialMouseY=0,this.needsPositionConversion=!1,this.resizeStartX=0,this.resizeStartY=0,this.resizeStartWidth=0,this.resizeStartHeight=0,this.resizeStartLeft=0,this.resizeStartTop=0,this.keyboardDragMode=!1,this.keyboardResizeMode=!1,this.pointerResizeMode=!1,this.manuallyPositioned=!1,this.resizeHandlesManaged=new Map,this.resizeIndicatorElement=null,this.handlers={mousedown:this.onMouseDown.bind(this),mousemove:this.onMouseMove.bind(this),mouseup:this.onMouseUp.bind(this),touchstart:this.onTouchStart.bind(this),touchmove:this.onTouchMove.bind(this),touchend:this.onTouchEnd.bind(this),pointerdown:this.onPointerDown.bind(this),pointermove:this.onPointerMove.bind(this),pointerup:this.onPointerUp.bind(this),pointercancel:this.onPointerUp.bind(this),keydown:this.onKeyDown.bind(this),resizeHandleMousedown:this.onResizeHandleMouseDown.bind(this),resizeHandlePointerDown:this.onResizeHandlePointerDown.bind(this)},this.activePointerId=null,this.activePointerType=null,this.init()}hasManagedResizeHandles(){return Array.from(this.resizeHandlesManaged.values()).some(Boolean)}storeOriginalHandleDisplay(e){e.dataset.originalDisplay||(e.dataset.originalDisplay=e.style.display||"")}hideResizeHandle(e){e.style.display="none",e.setAttribute("aria-hidden","true")}showResizeHandle(e){e.style.display=void 0!==e.dataset.originalDisplay?e.dataset.originalDisplay:"",e.removeAttribute("aria-hidden")}setManagedHandlesVisible(e){this.options.resizeHandles&&0!==this.options.resizeHandles.length&&this.options.resizeHandles.forEach(t=>{this.resizeHandlesManaged.get(t)&&(e?this.showResizeHandle(t):this.hideResizeHandle(t))})}init(){const e=this.options.dragHandle||this.element;"undefined"!=typeof window&&"PointerEvent"in window?(e.addEventListener("pointerdown",this.handlers.pointerdown),document.addEventListener("pointerup",this.handlers.pointerup),document.addEventListener("pointercancel",this.handlers.pointercancel)):(e.addEventListener("mousedown",this.handlers.mousedown),e.addEventListener("touchstart",this.handlers.touchstart,{passive:!1}),document.addEventListener("mousemove",this.handlers.mousemove),document.addEventListener("mouseup",this.handlers.mouseup),document.addEventListener("touchmove",this.handlers.touchmove,{passive:!1}),document.addEventListener("touchend",this.handlers.touchend)),this.element.addEventListener("keydown",this.handlers.keydown),this.options.resizeHandles&&this.options.resizeHandles.length>0&&this.options.resizeHandles.forEach(e=>{"undefined"!=typeof window&&"PointerEvent"in window?e.addEventListener("pointerdown",this.handlers.resizeHandlePointerDown):(e.addEventListener("mousedown",this.handlers.resizeHandleMousedown),e.addEventListener("touchstart",this.handlers.resizeHandleMousedown,{passive:!1}));const t="true"===e.dataset.vidplyManagedResize;this.resizeHandlesManaged.set(e,t),t&&(this.storeOriginalHandleDisplay(e),this.hideResizeHandle(e))})}onPointerDown(e){var t,i;if(!1!==e.isPrimary&&("mouse"!==e.pointerType||0===e.button)&&!e.target.classList.contains(`${this.options.classPrefix}-resize-handle`)&&(!this.options.onDragStart||this.options.onDragStart(e))){this.activePointerId=e.pointerId,this.activePointerType=e.pointerType;try{null==(i=null==(t=e.currentTarget)?void 0:t.setPointerCapture)||i.call(t,e.pointerId)}catch{}this.startDragging(e.clientX,e.clientY),e.preventDefault()}}onPointerMove(e){null!==this.activePointerId&&e.pointerId!==this.activePointerId||(this.isDragging?(this.drag(e.clientX,e.clientY),e.preventDefault()):this.isResizing&&(this.resize(e.clientX,e.clientY),e.preventDefault()))}onPointerUp(e){null!==this.activePointerId&&e.pointerId!==this.activePointerId||(this.isDragging?this.stopDragging():this.isResizing&&this.stopResizing(),this.activePointerId=null,this.activePointerType=null)}onMouseDown(e){e.target.classList.contains(`${this.options.classPrefix}-resize-handle`)||this.options.onDragStart&&!this.options.onDragStart(e)||(this.startDragging(e.clientX,e.clientY),e.preventDefault())}onTouchStart(e){if(e.target.classList.contains(`${this.options.classPrefix}-resize-handle`))return;if(this.options.onDragStart&&!this.options.onDragStart(e))return;const t=e.touches[0];t&&(this.startDragging(t.clientX,t.clientY),e.preventDefault())}onResizeHandlePointerDown(e){var t,i;if(!1!==e.isPrimary&&("mouse"!==e.pointerType||0===e.button)){e.preventDefault(),e.stopPropagation(),this.resizeDirection=e.target.getAttribute("data-direction"),this.activePointerId=e.pointerId,this.activePointerType=e.pointerType;try{null==(i=null==(t=e.currentTarget)?void 0:t.setPointerCapture)||i.call(t,e.pointerId)}catch{}this.startResizing(e.clientX,e.clientY)}}onResizeHandleMouseDown(e){var t,i,s,a;e.preventDefault(),e.stopPropagation(),this.resizeDirection=e.target.getAttribute("data-direction");const n="clientX"in e?e.clientX:null==(i=null==(t=e.touches)?void 0:t[0])?void 0:i.clientX,r="clientY"in e?e.clientY:null==(a=null==(s=e.touches)?void 0:s[0])?void 0:a.clientY;void 0!==n&&void 0!==r&&this.startResizing(n,r)}onMouseMove(e){this.isDragging?(this.drag(e.clientX,e.clientY),e.preventDefault()):this.isResizing&&(this.resize(e.clientX,e.clientY),e.preventDefault())}onTouchMove(e){if(this.isDragging||this.isResizing){const t=e.touches[0];if(!t)return;this.isDragging?this.drag(t.clientX,t.clientY):this.resize(t.clientX,t.clientY),e.preventDefault()}}onMouseUp(){this.isDragging?this.stopDragging():this.isResizing&&this.stopResizing()}onTouchEnd(){this.isDragging?this.stopDragging():this.isResizing&&this.stopResizing()}onKeyDown(e){if(e.key.toLowerCase()===this.options.keyboardDragKey.toLowerCase())return e.preventDefault(),void this.toggleKeyboardDragMode();if(e.key.toLowerCase()===this.options.keyboardResizeKey.toLowerCase())return e.preventDefault(),void(this.hasManagedResizeHandles()?this.togglePointerResizeMode():this.toggleKeyboardResizeMode());if("Escape"===e.key){if(this.pointerResizeMode)return e.preventDefault(),void this.disablePointerResizeMode();if(this.keyboardDragMode||this.keyboardResizeMode)return e.preventDefault(),this.disableKeyboardDragMode(),void this.disableKeyboardResizeMode()}["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"].includes(e.key)&&(this.keyboardDragMode?(e.preventDefault(),e.stopPropagation(),this.keyboardDrag(e.key,e.shiftKey)):this.keyboardResizeMode&&(e.preventDefault(),e.stopPropagation(),this.keyboardResize(e.key,e.shiftKey))),"Home"===e.key&&(this.keyboardDragMode||this.keyboardResizeMode)&&(e.preventDefault(),this.resetPosition())}startDragging(e,t){const i=this.element.getBoundingClientRect(),s=window.getComputedStyle(this.element),a="auto"!==s.right||"auto"!==s.bottom||"none"!==s.transform;if(this.positionOffsetX=0,this.positionOffsetY=0,a){let e,t;if("absolute"===s.position){const s=(this.element.offsetParent||document.body).getBoundingClientRect();e=i.left-s.left,t=i.top-s.top,this.positionOffsetX=s.left,this.positionOffsetY=s.top}else if("fixed"===s.position){const a=parseFloat(s.left),n=parseFloat(s.top),r=Number.isFinite(a),o=Number.isFinite(n);e=r?a:i.left,t=o?n:i.top,this.positionOffsetX=i.left-e,this.positionOffsetY=i.top-t}else e=i.left,t=i.top,this.positionOffsetX=i.left-e,this.positionOffsetY=i.top-t;let a=this.element.style.cssText.split(";").filter(e=>{const t=e.trim();if(!t)return!1;const i=t.indexOf(":");if(-1===i)return!1;const s=t.substring(0,i).trim(),a=t.substring(i+1).trim();return!(!a||""===a||"right"===s||"bottom"===s||"transform"===s||"left"===s||"top"===s||"inset"===s||s.startsWith("border-image"))}).join("; ");a&&(a+="; "),a+=`left: ${e}px; top: ${t}px; right: auto; bottom: auto; transform: none`,this.element.style.cssText=a}const n=this.element.getBoundingClientRect();this.dragOffsetX=e-n.left,this.dragOffsetY=t-n.top,this.isDragging=!0,this.element.classList.add(`${this.options.classPrefix}-dragging`),document.body.style.cursor="grabbing",document.body.style.userSelect="none","PointerEvent"in window&&document.addEventListener("pointermove",this.handlers.pointermove,{passive:!1})}drag(e,t){if(!this.isDragging)return;let i=e-this.dragOffsetX-this.positionOffsetX,s=t-this.dragOffsetY-this.positionOffsetY;if(this.options.constrainToViewport){const e=this.element.getBoundingClientRect(),t=document.documentElement.clientWidth,a=document.documentElement.clientHeight,n=100,r=-(e.height-n),o=a-n;i=Math.max(-(e.width-n),Math.min(i,t-n)),s=Math.max(r,Math.min(s,o))}this.element.style.left=`${i}px`,this.element.style.top=`${s}px`,this.options.onDrag&&this.options.onDrag({x:i,y:s})}stopDragging(){this.isDragging=!1,this.element.classList.remove(`${this.options.classPrefix}-dragging`),document.body.style.cursor="",document.body.style.userSelect="","PointerEvent"in window&&document.removeEventListener("pointermove",this.handlers.pointermove),this.manuallyPositioned=!0,this.options.onDragEnd&&this.options.onDragEnd()}startResizing(e,t){this.isResizing=!0,this.resizeStartX=e,this.resizeStartY=t;const i=this.element.getBoundingClientRect();this.resizeStartWidth=i.width,this.resizeStartHeight=i.height,this.resizeStartLeft=i.left,this.resizeStartTop=i.top,this.element.classList.add(`${this.options.classPrefix}-resizing`),document.body.style.userSelect="none","PointerEvent"in window&&document.addEventListener("pointermove",this.handlers.pointermove,{passive:!1}),this.options.onResizeStart&&this.options.onResizeStart()}resize(e,t){if(!this.isResizing)return;const i=e-this.resizeStartX,s=t-this.resizeStartY;let a=this.resizeStartWidth,n=this.resizeStartHeight,r=this.resizeStartLeft,o=this.resizeStartTop;const l=this.resizeDirection??"";if(l.includes("e")&&(a=Math.max(this.options.minWidth,this.resizeStartWidth+i)),l.includes("w")){const e=Math.max(this.options.minWidth,this.resizeStartWidth-i);r=this.resizeStartLeft+(this.resizeStartWidth-e),a=e}const d="function"==typeof this.options.maxWidth?this.options.maxWidth():this.options.maxWidth;if("number"==typeof d&&Number.isFinite(d)){const e=Math.min(a,d);e!==a&&l.includes("w")&&(r+=a-e),a=e}if(!this.options.maintainAspectRatio){if(l.includes("s")&&(n=Math.max(this.options.minHeight,this.resizeStartHeight+s)),l.includes("n")){const e=Math.max(this.options.minHeight,this.resizeStartHeight-s);o=this.resizeStartTop+(this.resizeStartHeight-e),n=e}const e="function"==typeof this.options.maxHeight?this.options.maxHeight():this.options.maxHeight;if("number"==typeof e&&Number.isFinite(e)){const t=Math.min(n,e);t!==n&&l.includes("n")&&(o+=n-t),n=t}}this.element.style.width=`${a}px`,this.element.style.height=this.options.maintainAspectRatio?"auto":`${n}px`,l.includes("w")&&(this.element.style.left=`${r}px`),l.includes("n")&&!this.options.maintainAspectRatio&&(this.element.style.top=`${o}px`),this.options.onResize&&this.options.onResize({width:a,height:n,left:r,top:o})}stopResizing(){this.isResizing=!1,this.resizeDirection=null,this.element.classList.remove(`${this.options.classPrefix}-resizing`),document.body.style.userSelect="","PointerEvent"in window&&document.removeEventListener("pointermove",this.handlers.pointermove),this.manuallyPositioned=!0,this.options.onResizeEnd&&this.options.onResizeEnd()}toggleKeyboardDragMode(){this.keyboardDragMode?this.disableKeyboardDragMode():this.enableKeyboardDragMode()}enableKeyboardDragMode(){this.keyboardDragMode=!0,this.keyboardResizeMode=!1,this.element.classList.add(`${this.options.classPrefix}-keyboard-drag`),this.element.classList.remove(`${this.options.classPrefix}-keyboard-resize`),this.focusElement()}disableKeyboardDragMode(){this.keyboardDragMode=!1,this.element.classList.remove(`${this.options.classPrefix}-keyboard-drag`)}toggleKeyboardResizeMode(){this.keyboardResizeMode?this.disableKeyboardResizeMode():this.enableKeyboardResizeMode()}enableKeyboardResizeMode(){this.keyboardResizeMode=!0,this.keyboardDragMode=!1,this.element.classList.add(`${this.options.classPrefix}-keyboard-resize`),this.element.classList.remove(`${this.options.classPrefix}-keyboard-drag`),this.focusElement()}disableKeyboardResizeMode(){this.keyboardResizeMode=!1,this.element.classList.remove(`${this.options.classPrefix}-keyboard-resize`)}enablePointerResizeMode({focus:e=!0}={}){this.hasManagedResizeHandles()?this.pointerResizeMode||(this.pointerResizeMode=!0,this.setManagedHandlesVisible(!0),this.element.classList.add(`${this.options.classPrefix}-resizable`),this.enableKeyboardResizeMode(),e&&this.focusElement(),"function"==typeof this.options.onPointerResizeToggle&&this.options.onPointerResizeToggle(!0)):this.enableKeyboardResizeMode()}disablePointerResizeMode({focus:e=!1}={}){this.pointerResizeMode&&(this.pointerResizeMode=!1,this.setManagedHandlesVisible(!1),this.element.classList.remove(`${this.options.classPrefix}-resizable`),this.disableKeyboardResizeMode(),e&&this.focusElement(),"function"==typeof this.options.onPointerResizeToggle&&this.options.onPointerResizeToggle(!1))}togglePointerResizeMode(){return this.pointerResizeMode?this.disablePointerResizeMode():this.enablePointerResizeMode(),this.pointerResizeMode}focusElement(){if("function"==typeof this.element.focus)try{this.element.focus({preventScroll:!0})}catch{this.element.focus()}}keyboardDrag(e,t){const i=t?this.options.keyboardStepLarge:this.options.keyboardStep;let s=parseFloat(this.element.style.left)||0,a=parseFloat(this.element.style.top)||0;if("none"!==window.getComputedStyle(this.element).transform){const e=this.element.getBoundingClientRect();s=e.left,a=e.top,this.element.style.transform="none",this.element.style.left=`${s}px`,this.element.style.top=`${a}px`}let n=s,r=a;switch(e){case"ArrowLeft":n-=i;break;case"ArrowRight":n+=i;break;case"ArrowUp":r-=i;break;case"ArrowDown":r+=i}this.element.style.left=`${n}px`,this.element.style.top=`${r}px`,this.options.onDrag&&this.options.onDrag({x:n,y:r})}keyboardResize(e,t){const i=t?this.options.keyboardStepLarge:this.options.keyboardStep,s=this.element.getBoundingClientRect();let a=s.width,n=s.height;switch(e){case"ArrowLeft":a-=i;break;case"ArrowRight":a+=i;break;case"ArrowUp":this.options.maintainAspectRatio?a+=i:n-=i;break;case"ArrowDown":this.options.maintainAspectRatio?a-=i:n+=i}a=Math.max(this.options.minWidth,a),n=Math.max(this.options.minHeight,n),this.element.style.width=`${a}px`,this.element.style.height=this.options.maintainAspectRatio?"auto":`${n}px`,this.options.onResize&&this.options.onResize({width:a,height:n})}resetPosition(){this.element.style.left="50%",this.element.style.top="50%",this.element.style.transform="translate(-50%, -50%)",this.element.style.right="",this.element.style.bottom="",this.manuallyPositioned=!1,this.options.onDrag&&this.options.onDrag({centered:!0})}destroy(){const e=this.options.dragHandle||this.element;this.disablePointerResizeMode(),e.removeEventListener("mousedown",this.handlers.mousedown),e.removeEventListener("touchstart",this.handlers.touchstart),e.removeEventListener("pointerdown",this.handlers.pointerdown),document.removeEventListener("mousemove",this.handlers.mousemove),document.removeEventListener("mouseup",this.handlers.mouseup),document.removeEventListener("touchmove",this.handlers.touchmove),document.removeEventListener("touchend",this.handlers.touchend),document.removeEventListener("pointermove",this.handlers.pointermove),document.removeEventListener("pointerup",this.handlers.pointerup),document.removeEventListener("pointercancel",this.handlers.pointercancel),this.element.removeEventListener("keydown",this.handlers.keydown),this.options.resizeHandles&&this.options.resizeHandles.length>0&&this.options.resizeHandles.forEach(e=>{e.removeEventListener("mousedown",this.handlers.resizeHandleMousedown),e.removeEventListener("touchstart",this.handlers.resizeHandleMousedown),e.removeEventListener("pointerdown",this.handlers.resizeHandlePointerDown)}),this.element.classList.remove(`${this.options.classPrefix}-dragging`,`${this.options.classPrefix}-resizing`,`${this.options.classPrefix}-keyboard-drag`,`${this.options.classPrefix}-keyboard-resize`)}}}});function we({labelClass:t,selectClass:i,labelText:s,selectId:a,hidden:n=!1,onChange:r,options:o=[]}){const l="string"==typeof s&&(s.startsWith("transcript.")||s.startsWith("player.")||s.startsWith("settings.")||s.startsWith("captions."))&&x.t(s)||s,d=e.createElement("label",{className:t,textContent:l,attributes:{for:a,style:n?"display: none;":void 0}}),h=e.createElement("select",{className:i,attributes:{id:a,style:n?"display: none;":void 0}});return o.forEach(t=>{const i=e.createElement("option",{textContent:t.text,attributes:{value:t.value,selected:t.selected?"selected":void 0}});h.appendChild(i)}),r&&h.addEventListener("change",r),{label:d,select:h}}function Se(e){e&&["pointerdown","mousedown","click"].forEach(t=>{e.addEventListener(t,e=>{e.stopPropagation()})})}var Me=s({"src/utils/FormUtils.ts"(){d(),H()}});function Te({classPrefix:t,itemClass:i,icon:s,label:a,ariaLabel:n,onClick:r,hasTextClass:o=!1}){const l="string"==typeof a&&(a.startsWith("transcript.")||a.startsWith("player.")||a.startsWith("settings.")),d=n||l&&x.t(a)||a,h=e.createElement("button",{className:i,attributes:{type:"button","aria-label":d,tabindex:"-1"}});s&&h.appendChild(O(s));const c="string"==typeof a&&(a.startsWith("transcript.")||a.startsWith("player.")||a.startsWith("settings."))&&x.t(a)||a,u=e.createElement("span",{textContent:c,className:o?`${t}-settings-text`:void 0,attributes:{"aria-hidden":"true"}});return h.appendChild(u),r&&h.addEventListener("click",r),h}function ke(e,t,i=0){e&&setTimeout(()=>{const i=Array.from(e.querySelectorAll(t)).filter(e=>"true"!==e.getAttribute("aria-disabled")),s=i[0];s&&(i.forEach((e,t)=>{e.setAttribute("tabindex",0===t?"0":"-1")}),I(s,{delay:0}),s.scrollIntoView(U("nearest")))},i)}var Pe=s({"src/utils/MenuUtils.ts"(){d(),F(),H(),N(),K()}});function Ee(e,t,i){e&&(e.setAttribute("aria-checked",i.enabled?"true":"false"),e.setAttribute("aria-label",i.enabled?i.enabledAria:i.disabledAria),t&&(t.textContent=i.enabled?i.enabledText:i.disabledText))}function Ce(e,t,i={}){if(!e||!t)return;const{align:s="left",gap:a=4,spaceReserve:n=20}=i,r=t.parentElement;if(!r)return;const o=t.getBoundingClientRect(),l=r.getBoundingClientRect(),d=e.getBoundingClientRect(),h=window.innerHeight,c=window.innerWidth,u=o.top-l.top,p=o.left-l.left,g=p+o.width/2,m=h-o.bottom;let y,f,v,b=o.bottom-l.top+a,w=null;if(m<d.height+n&&o.top>m?("center"===s?(w=l.bottom-l.top-u+a,b=null):b=u-d.height-a,e.classList.add("vidply-menu-above")):e.classList.remove("vidply-menu-above"),"center"===s){const e=o.left+o.width/2-d.width/2;e<10?(y="0",f="auto",v="translateX(0)"):e+d.width>c-10?(y="auto",f="0",v="translateX(0)"):(y=`${g}px`,f="auto",v="translateX(-50%)")}else y=`${p}px`,f="auto",v="translateX(0)";null!==b?(e.style.top=`${b}px`,e.style.bottom="auto"):null!==w&&(e.style.top="auto",e.style.bottom=`${w}px`),e.style.left=y,e.style.right=f,e.style.transform=v}var Le,xe,De=s({"src/utils/DraggablePanelMenu.ts"(){}}),Ae=s({"src/utils/DraggablePanel.ts"(){d(),H(),Pe(),De(),Le=class{constructor(e){n(this,"opts"),n(this,"settingsMenu",null),n(this,"settingsMenuVisible",!1),n(this,"dragOptionButton",null),n(this,"dragOptionText",null),n(this,"resizeOptionButton",null),n(this,"resizeOptionText",null),n(this,"_justOpened",!1),n(this,"_justOpenedTimer",null),n(this,"_keyHandler",null),n(this,"_documentClick",null),n(this,"_documentClickAdded",!1),n(this,"_modeBadge",null),this.opts=e}get justOpened(){return this._justOpened}get classPrefix(){return this.opts.player.options.classPrefix}get menuClass(){return`${this.classPrefix}-${this.opts.namespace}-settings-menu`}get itemClass(){return`${this.classPrefix}-${this.opts.namespace}-settings-item`}show(){if(this._markJustOpened(350),this._ensureDocumentClickHandler(),this.settingsMenu)return this.settingsMenu.style.display="block",this.settingsMenuVisible=!0,this.opts.settingsButton.setAttribute("aria-expanded","true"),this._attachKeyboardNavigation(),this._positionImmediate(),this.refreshState(),void ke(this.settingsMenu,`.${this.itemClass}`);this._createMenu()}hide({focusButton:e=!0}={}){if(!this.settingsMenu)return;this.settingsMenu.style.display="none",this.settingsMenuVisible=!1,this._clearJustOpened(),this._keyHandler&&(this.settingsMenu.removeEventListener("keydown",this._keyHandler,!0),this._keyHandler=null),this.settingsMenu.querySelectorAll(`.${this.itemClass}`).forEach(e=>e.setAttribute("tabindex","-1"));const{settingsButton:t}=this.opts;t.setAttribute("aria-expanded","false"),e&&t.focus({preventScroll:!0})}toggle(){this.settingsMenuVisible?this.hide():this.show()}markJustOpenedForClick(){this._documentClick&&this._markJustOpened(100)}refreshState(){this.refreshDragState(),this.refreshResizeState()}refreshDragState(){const e=this.opts.getDraggable();Ee(this.dragOptionButton,this.dragOptionText,{enabled:Boolean(null==e?void 0:e.keyboardDragMode),enabledText:x.t(this.opts.i18nKeys.disableDrag),disabledText:x.t(this.opts.i18nKeys.enableDrag),enabledAria:x.t(this.opts.i18nKeys.disableDragAria),disabledAria:x.t(this.opts.i18nKeys.enableDragAria)})}refreshResizeState(){const e=this.opts.getDraggable();Ee(this.resizeOptionButton,this.resizeOptionText,{enabled:Boolean(null==e?void 0:e.pointerResizeMode),enabledText:x.t(this.opts.i18nKeys.disableResize),disabledText:x.t(this.opts.i18nKeys.enableResize),enabledAria:x.t(this.opts.i18nKeys.disableResizeAria),disabledAria:x.t(this.opts.i18nKeys.enableResizeAria)})}showBadge(t){var i,s;const a=null==(s=(i=this.opts).getBadgeHost)?void 0:s.call(i);if(!a)return;this.hideBadge();const n=e.createElement("span",{className:this.opts.badgeClass??`${this.classPrefix}-${this.opts.namespace}-mode-badge`,textContent:t,attributes:{"aria-hidden":"true"}});a.appendChild(n),this._modeBadge=n}hideBadge(){this._modeBadge&&this._modeBadge.parentNode&&this._modeBadge.remove(),this._modeBadge=null}reposition(){((e,t,i={})=>{requestAnimationFrame(()=>{setTimeout(()=>Ce(e,t,i),10)})})(this.settingsMenu,this.opts.settingsButton,{align:this.opts.menuAlign,gap:this.opts.menuGap??4,spaceReserve:this.opts.menuSpaceReserve??20})}destroy(){this._justOpenedTimer&&(clearTimeout(this._justOpenedTimer),this._justOpenedTimer=null),this._justOpened=!1,this.hideBadge(),this.settingsMenu&&(this._keyHandler&&this.settingsMenu.removeEventListener("keydown",this._keyHandler,!0),this.settingsMenu.remove(),this.settingsMenu=null),this._keyHandler=null,this.settingsMenuVisible=!1,this.dragOptionButton=null,this.dragOptionText=null,this.resizeOptionButton=null,this.resizeOptionText=null,this._documentClick=null,this._documentClickAdded=!1}_createMenu(){const{settingsButton:t,i18nKeys:i}=this.opts,s=e.createElement("div",{className:this.menuClass,attributes:{role:"menu"}});this.settingsMenu=s;const a=Te({classPrefix:this.classPrefix,itemClass:this.itemClass,icon:"move",label:i.enableDrag,hasTextClass:!0,onClick:e=>{e.preventDefault(),e.stopPropagation(),this.opts.onDragItemClick(this),this.refreshState()}});a.setAttribute("role","switch"),a.setAttribute("aria-checked","false"),a.setAttribute("data-setting","keyboard-drag"),this._stripInlineTooltip(a),this.dragOptionButton=a,this.dragOptionText=a.querySelector(`.${this.classPrefix}-settings-text`);const n=Te({classPrefix:this.classPrefix,itemClass:this.itemClass,icon:"resize",label:i.enableResize,hasTextClass:!0,onClick:e=>{e.preventDefault(),e.stopPropagation(),this.opts.onResizeItemClick(this),this.refreshState()}});n.setAttribute("role","switch"),n.setAttribute("aria-checked","false"),this._stripInlineTooltip(n),this.resizeOptionButton=n,this.resizeOptionText=n.querySelector(`.${this.classPrefix}-settings-text`),s.appendChild(a),s.appendChild(n),this.opts.buildExtraItems&&this.opts.buildExtraItems({menu:s,itemClass:this.itemClass,classPrefix:this.classPrefix,stripInlineTooltip:e=>this._stripInlineTooltip(e)});const r=Te({classPrefix:this.classPrefix,itemClass:this.itemClass,icon:"close",label:i.closeMenu,onClick:()=>this.hide()});this._stripInlineTooltip(r),s.appendChild(r),s.style.visibility="hidden",s.style.display="block";const o=this.opts.getMenuParent();t.parentNode?t.insertAdjacentElement("afterend",s):o&&o.appendChild(s),this._positionImmediate(),requestAnimationFrame(()=>{this.settingsMenu&&(this.settingsMenu.style.visibility="visible")}),this._attachKeyboardNavigation(),this.settingsMenuVisible=!0,t.setAttribute("aria-expanded","true"),this.refreshState(),ke(s,`.${this.itemClass}`)}_attachKeyboardNavigation(){const e=this.settingsMenu;if(!e)return;this._keyHandler&&e.removeEventListener("keydown",this._keyHandler,!0);const t=((e,t,i,s)=>{if(!e)return;const a=Array.from(e.querySelectorAll(i)).filter(e=>"true"!==e.getAttribute("aria-disabled"));if(0===a.length)return;const n=e=>{const i=a.indexOf(document.activeElement);switch(e.key){case"ArrowDown":{e.preventDefault(),e.stopPropagation();const t=(i+1)%a.length;a.forEach((e,i)=>{e.setAttribute("tabindex",i===t?"0":"-1")});const s=a[t];s&&(s.focus({preventScroll:!1}),s.scrollIntoView(U("nearest")));break}case"ArrowUp":{e.preventDefault(),e.stopPropagation();const t=(i-1+a.length)%a.length;a.forEach((e,i)=>{e.setAttribute("tabindex",i===t?"0":"-1")});const s=a[t];s&&(s.focus({preventScroll:!1}),s.scrollIntoView(U("nearest")));break}case"Home":{e.preventDefault(),e.stopPropagation(),a.forEach((e,t)=>{e.setAttribute("tabindex",0===t?"0":"-1")});const t=a[0];t&&(t.focus({preventScroll:!1}),t.scrollIntoView(U("nearest")));break}case"End":{e.preventDefault(),e.stopPropagation();const t=a.length-1;a.forEach((e,i)=>{e.setAttribute("tabindex",i===t?"0":"-1")});const i=a[t];i&&(i.focus({preventScroll:!1}),i.scrollIntoView(U("nearest")));break}case"Enter":case" ":e.preventDefault(),e.stopPropagation(),document.activeElement&&a.includes(document.activeElement)&&(document.activeElement.click(),s&&setTimeout(()=>{t&&document.contains(t)&&t.focus()},0));break;case"Escape":e.preventDefault(),e.stopPropagation(),s&&s()}};return e.addEventListener("keydown",n,!0),n})(e,this.opts.settingsButton,`.${this.itemClass}`,()=>this.hide({focusButton:!0}));this._keyHandler=t??null}_positionImmediate(){Ce(this.settingsMenu,this.opts.settingsButton,{align:this.opts.menuAlign,gap:this.opts.menuGap??4,spaceReserve:this.opts.menuSpaceReserve??20})}_stripInlineTooltip(e){const t=e.querySelector(`.${this.classPrefix}-tooltip`);t&&t.remove();const i=e.querySelector(`.${this.classPrefix}-button-text`);i&&i.remove()}_markJustOpened(e){this._justOpened=!0,this._justOpenedTimer&&clearTimeout(this._justOpenedTimer),this._justOpenedTimer=setTimeout(()=>{this._justOpened=!1,this._justOpenedTimer=null},e)}_clearJustOpened(){this._justOpened=!1,this._justOpenedTimer&&(clearTimeout(this._justOpenedTimer),this._justOpenedTimer=null)}_ensureDocumentClickHandler(){this._documentClickAdded||(this._documentClick=e=>{if(this._justOpened)return;const t=e.target,{settingsButton:i}=this.opts;i===t||t&&i.contains(t)||this.settingsMenu&&t&&this.settingsMenu.contains(t)||this.settingsMenuVisible&&this.hide()},setTimeout(()=>{const e=this._documentClick;e&&(document.addEventListener("mousedown",e,{capture:!0,signal:this.opts.player.lifecycleSignal}),this._documentClickAdded=!0)},300))}}}}),ze={};a(ze,{SignLanguageManager:()=>xe});var _e,Re,Be,Ve,He=s({"src/core/SignLanguageManager.ts"(){d(),F(),H(),be(),Me(),Ae(),xe=class{constructor(e){n(this,"player"),n(this,"_mainViewMutedBefore"),n(this,"_mainViewUsingSourceSwap"),n(this,"currentLanguage"),n(this,"customKeyHandler"),n(this,"desiredPosition"),n(this,"draggable"),n(this,"handlers"),n(this,"header"),n(this,"inMainView"),n(this,"interactionHandlers"),n(this,"mainViewOriginalSources"),n(this,"mainViewOriginalSrc"),n(this,"resizeHandles"),n(this,"selector"),n(this,"settingsButton"),n(this,"settingsHandlers"),n(this,"sources"),n(this,"src"),n(this,"enabled"),n(this,"video"),n(this,"wrapper"),n(this,"_panel",null),this.player=e,this.src=e.options.signLanguageSrc,this.sources=e.options.signLanguageSources||{},this.currentLanguage=null,this.desiredPosition=e.options.signLanguagePosition||"bottom-right",this.wrapper=null,this.header=null,this.video=null,this.selector=null,this.settingsButton=null,this.resizeHandles=[],this.enabled=!1,this.inMainView=!1,this.mainViewOriginalSrc=null,this.mainViewOriginalSources=null,this._mainViewUsingSourceSwap=!1,this._mainViewMutedBefore=!1,this.handlers=null,this.settingsHandlers=null,this.interactionHandlers=null,this.draggable=null,this.customKeyHandler=null}get settingsMenu(){var e;return(null==(e=this._panel)?void 0:e.settingsMenu)??null}set settingsMenu(e){}get settingsMenuVisible(){var e;return(null==(e=this._panel)?void 0:e.settingsMenuVisible)??!1}set settingsMenuVisible(e){}get settingsMenuJustOpened(){var e;return(null==(e=this._panel)?void 0:e.justOpened)??!1}set settingsMenuJustOpened(e){}get dragOptionButton(){var e;return(null==(e=this._panel)?void 0:e.dragOptionButton)??null}get dragOptionText(){var e;return(null==(e=this._panel)?void 0:e.dragOptionText)??null}get resizeOptionButton(){var e;return(null==(e=this._panel)?void 0:e.resizeOptionButton)??null}get resizeOptionText(){var e;return(null==(e=this._panel)?void 0:e.resizeOptionText)??null}isAvailable(){return Object.keys(this.sources).length>0||Boolean(this.src)}enable(){const e=Object.keys(this.sources).length>0,t=Boolean(this.src);if(!e&&!t)return void console.warn("No sign language video source provided");if(this.wrapper)return this.wrapper.style.display="block",this.enabled=!0,this.player.state.signLanguageEnabled=!0,this.player.emit("signlanguageenabled"),void this.player.setManagedTimeout(()=>{this.settingsButton&&document.contains(this.settingsButton)&&this.settingsButton.focus({preventScroll:!0})},150);let i=null,s=null;e?(i=this._determineInitialLanguage(),s=this.sources[i]??null,this.currentLanguage=i):s=this.src,this._createWrapper(),this._createHeader(e,i),this._createVideo(s),this._createResizeHandles();const a=this.wrapper,n=this.video;a&&n&&(a.appendChild(this.header),a.appendChild(n),this.resizeHandles.forEach(e=>a.appendChild(e)),this._applyInitialSize(),this.player.container.appendChild(a),requestAnimationFrame(()=>{this.constrainPosition()}),n.currentTime=this.player.state.currentTime,this.player.state.paused||n.play(),this._setupInteraction(),this._setupEventHandlers(e),this.enabled=!0,this.player.state.signLanguageEnabled=!0,this.player.emit("signlanguageenabled"),this.player.setManagedTimeout(()=>{this.settingsButton&&document.contains(this.settingsButton)&&this.settingsButton.focus({preventScroll:!0})},150))}disable(){this.settingsMenuVisible&&this.hideSettingsMenu({focusButton:!1}),this._hideModeBadge(),this.wrapper&&(this.wrapper.style.display="none"),this.enabled=!1,this.player.state.signLanguageEnabled=!1,this.player.emit("signlanguagedisabled")}toggle(){this.enabled?this.disable():this.enable()}async enableInMainView(){const e=Object.keys(this.sources).length>0,t=Boolean(this.src);if(!e&&!t)return;if(!this.player.element||"VIDEO"!==this.player.element.tagName)return;if(this.inMainView)return;let i;if(e){const e=this._determineInitialLanguage();this.currentLanguage=e,i=this.sources[e]}else i=this.src;const s=this.player.element,a=this.player.state.currentTime,n=this.player.state.playing,r=s.poster||s.getAttribute("poster")||this.player.options.poster,o=a<.1&&!n,l=Array.from(s.querySelectorAll("source")),d=l[0];if(this.mainViewOriginalSrc=s.currentSrc&&s.currentSrc.length>0?s.currentSrc:s.src&&s.src.length>0?s.src:d&&d.getAttribute("src")?d.getAttribute("src"):"",this._mainViewMutedBefore=this.player.state.muted,r&&o&&"VIDEO"===s.tagName&&(s.poster=r),l.length>0){this.mainViewOriginalSources=l,this.mainViewOriginalSources.forEach(e=>e.remove());const e=document.createElement("source"),t=i??"";e.setAttribute("src",t);const a=this._inferVideoType(t);a&&e.setAttribute("type",a);const n=s.querySelector("track");n?s.insertBefore(e,n):s.appendChild(e),this._mainViewUsingSourceSwap=!0}else s.src=i??"",this._mainViewUsingSourceSwap=!1;s.muted=!0,this.player.currentSource=i??"","function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache(),s.load(),await this._waitForMediaReadyMainView(a>0||n),a>0&&(this.player.seek(a),await new Promise(e=>setTimeout(e,100))),n?await this.player.play():(this.player.pause(),!o&&this.player.hidePosterOverlay&&this.player.hidePosterOverlay()),this.inMainView=!0,this.player.state.signLanguageInMainView=!0,this.player.videoWrapper&&this.player.videoWrapper.classList.add("vidply-sign-language-main-view-active"),this.player.emit("signlanguageinmainviewenabled")}async disableInMainView(){var e,t,i;if(!this.inMainView)return;if(!this.mainViewOriginalSrc&&!this.mainViewOriginalSources)return this.inMainView=!1,this.player.state.signLanguageInMainView=!1,this.player.videoWrapper&&this.player.videoWrapper.classList.remove("vidply-sign-language-main-view-active"),void this.player.emit("signlanguageinmainviewdisabled");const s=this.player.element,a=this.player.state.currentTime,n=this.player.state.playing;if(this._mainViewUsingSourceSwap&&this.mainViewOriginalSources&&this.mainViewOriginalSources.length>0){Array.from(s.querySelectorAll("source")).forEach(e=>e.remove());const e=s.querySelector("track");this.mainViewOriginalSources.forEach(t=>{e?s.insertBefore(t,e):s.appendChild(t)}),this._mainViewUsingSourceSwap=!1}else this.mainViewOriginalSrc&&(s.src=this.mainViewOriginalSrc);if(s.muted=this._mainViewMutedBefore,this.player.currentSource=this.mainViewOriginalSrc||(null==(e=s.querySelector("source"))?void 0:e.src)||"","function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache(),s.load(),await this._waitForMediaReadyMainView(a>0||n),a>0&&this.player.seek(a),n)try{await this.player.play()}catch(e){null==(i=(t=this.player).log)||i.call(t,"Sign language main view: play after restore failed",e,"warn")}this.mainViewOriginalSrc=null,this.mainViewOriginalSources=null,this.inMainView=!1,this.player.state.signLanguageInMainView=!1,this.player.videoWrapper&&this.player.videoWrapper.classList.remove("vidply-sign-language-main-view-active"),this.player.emit("signlanguageinmainviewdisabled")}async _waitForMediaReadyMainView(e=!1){const t=this.player.element,i=new Promise(e=>{if(t.readyState>=1)return void e();const i=()=>{t.removeEventListener("loadedmetadata",i),t.removeEventListener("error",s),e()},s=()=>{t.removeEventListener("loadedmetadata",i),t.removeEventListener("error",s),e()};t.addEventListener("loadedmetadata",i),t.addEventListener("error",s,{once:!0})}),s=new Promise(e=>setTimeout(e,1e4));await Promise.race([i,s]),await new Promise(e=>setTimeout(e,300)),e&&await new Promise(e=>{if(t.readyState>=3)e();else{const i=()=>{t.removeEventListener("canplay",i),t.removeEventListener("canplaythrough",i),e()};t.addEventListener("canplay",i,{once:!0}),t.addEventListener("canplaythrough",i,{once:!0}),setTimeout(()=>{t.removeEventListener("canplay",i),t.removeEventListener("canplaythrough",i),e()},3e3)}})}toggleInMainView(){this.inMainView?this.disableInMainView():this.enableInMainView()}switchLanguage(e){if(this.sources[e]){if(this.currentLanguage=e,this.video){const t=this.video.currentTime,i=!this.video.paused;this.video.src=this.sources[e],this.video.currentTime=t,i&&this.video.play().catch(e=>{"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] sign-language play() rejected:",e)})}if(this.inMainView&&this.player.element&&"VIDEO"===this.player.element.tagName){const t=this.player.state.currentTime,i=this.player.state.playing;if(this._mainViewUsingSourceSwap){const t=this.player.element.querySelector("source");if(t){t.setAttribute("src",this.sources[e]);const i=this._inferVideoType(this.sources[e]);i&&t.setAttribute("type",i)}}else this.player.element.src=this.sources[e];this.player.currentSource=this.sources[e],"function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache(),this.player.element.load(),this._waitForMediaReadyMainView(!0).then(()=>{t>0&&this.player.seek(t),i&&this.player.play()})}this.player.emit("signlanguagelanguagechanged",e)}}_inferVideoType(e){if(!e)return"";const t=(e.split("?")[0]??"").toLowerCase();return t.endsWith(".mp4")?"video/mp4":t.endsWith(".webm")?"video/webm":t.endsWith(".ogv")||t.endsWith(".ogg")?"video/ogg":""}getLanguageLabel(e){return{en:"English",de:"Deutsch",es:"Español",fr:"Français",it:"Italiano",ja:"日本語",pt:"Português",ar:"العربية",hi:"हिन्दी"}[e]||e.toUpperCase()}_determineInitialLanguage(){var e;if(this.player.captionManager&&this.player.captionManager.currentTrack){const t=null==(e=this.player.captionManager.currentTrack.language)?void 0:e.toLowerCase().split("-")[0];if(t&&this.sources[t])return t}if(this.player.options.language){const e=this.player.options.language.toLowerCase().split("-")[0];if(e&&this.sources[e])return e}return Object.keys(this.sources)[0]??""}_createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vidply-sign-language-wrapper",this.wrapper.setAttribute("tabindex","0"),this.wrapper.setAttribute("aria-label",x.t("player.signLanguageDragResize"))}_createHeader(t,i){const s=this.player.options.classPrefix;this.header=e.createElement("div",{className:`${s}-sign-language-header`,attributes:{tabindex:"0"}});const a=e.createElement("div",{className:`${s}-sign-language-header-left`}),n=e.createElement("h3",{textContent:x.t("player.signLanguageVideo")});this._createSettingsButton(a),t&&this._createLanguageSelector(a,i),a.appendChild(n);const r=this._createCloseButton();this.header.appendChild(a),this.header.appendChild(r)}_createSettingsButton(t){const i=this.player.options.classPrefix,s=x.t("player.signLanguageSettings");this.settingsButton=e.createElement("button",{className:`${i}-sign-language-settings`,attributes:{type:"button","aria-label":s,"aria-expanded":"false"}}),this.settingsButton.appendChild(O("settings")),e.attachTooltip(this.settingsButton,s,i),this._panel=new Le({player:this.player,namespace:"sign-language",settingsButton:this.settingsButton,getDraggable:()=>this.draggable,i18nKeys:{enableDrag:"player.enableSignDragMode",disableDrag:"player.disableSignDragMode",enableDragAria:"player.enableSignDragModeAria",disableDragAria:"player.disableSignDragModeAria",enableResize:"player.enableSignResizeMode",disableResize:"player.disableSignResizeMode",enableResizeAria:"player.enableSignResizeModeAria",disableResizeAria:"player.disableSignResizeModeAria",closeMenu:"transcript.closeMenu"},menuAlign:"center",getMenuParent:()=>this.wrapper,getBadgeHost:()=>this.wrapper,badgeClass:`${this.player.options.classPrefix}-sign-mode-badge`,onDragItemClick:e=>{var t;this.toggleKeyboardDragMode(),e.hide({focusButton:!1}),(null==(t=this.draggable)?void 0:t.keyboardDragMode)&&setTimeout(()=>{var e,t;null==(t=null==(e=this.wrapper)?void 0:e.focus)||t.call(e,{preventScroll:!0})},20)},onResizeItemClick:e=>{this.toggleResizeMode({focus:!1})?(e.hide({focusButton:!1}),setTimeout(()=>{var e,t;null==(t=null==(e=this.wrapper)?void 0:e.focus)||t.call(e,{preventScroll:!0})},20)):e.hide({focusButton:!0})}}),this.settingsHandlers={click:e=>{var t,i;e.preventDefault(),e.stopPropagation(),null==(t=this._panel)||t.markJustOpenedForClick(),null==(i=this._panel)||i.toggle()},keydown:e=>{"d"===e.key||"D"===e.key?(e.preventDefault(),e.stopPropagation(),this.toggleKeyboardDragMode()):"r"===e.key||"R"===e.key?(e.preventDefault(),e.stopPropagation(),this.toggleResizeMode()):"Escape"===e.key&&this.settingsMenuVisible&&(e.preventDefault(),e.stopPropagation(),this.hideSettingsMenu())}},this.settingsButton.addEventListener("click",this.settingsHandlers.click),this.settingsButton.addEventListener("keydown",this.settingsHandlers.keydown),t.appendChild(this.settingsButton)}_createLanguageSelector(t,i){const s=this.player.options.classPrefix,a=`${s}-sign-language-select-${Date.now()}`,n=Object.keys(this.sources).map(e=>({value:e,text:this.getLanguageLabel(e),selected:e===i})),{label:r,select:o}=we({classPrefix:s,labelClass:`${s}-sign-language-label`,selectClass:`${s}-sign-language-select`,labelText:"settings.language",selectId:a,options:n,onChange:e=>{e.stopPropagation(),this.switchLanguage(e.target.value)}});this.selector=o;const l=e.createElement("div",{className:`${s}-sign-language-selector-wrapper`});l.appendChild(r),l.appendChild(this.selector),Se(l),t.appendChild(l)}_createCloseButton(){const t=this.player.options.classPrefix,i=x.t("player.closeSignLanguage"),s=e.createElement("button",{className:`${t}-sign-language-close`,attributes:{type:"button","aria-label":i}});return s.appendChild(O("close")),e.attachTooltip(s,i,t),s.addEventListener("click",()=>{var e,t;this.disable();const i=null==(t=null==(e=this.player.controlBar)?void 0:e.controls)?void 0:t.signLanguage;i&&this.player.setManagedTimeout(()=>{i.focus({preventScroll:!0})},0)},{signal:this.player.lifecycleSignal}),s}_createVideo(e){this.video=document.createElement("video"),this.video.className="vidply-sign-language-video",this.video.src=e??"",this.video.setAttribute("aria-label",x.t("player.signLanguage")),this.video.muted=!0,this.video.setAttribute("playsinline","")}_createResizeHandles(){const t=this.player.options.classPrefix;this.resizeHandles=["n","s","e","w","ne","nw","se","sw"].map(i=>{const s=e.createElement("div",{className:`${t}-sign-resize-handle ${t}-sign-resize-${i}`,attributes:{"data-direction":i,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return s.style.display="none",s})}_applyInitialSize(){var e;const t=this.wrapper;if(!t)return;const i=this.player.storage.getSignLanguagePreferences();t.style.width=(null==(e=null==i?void 0:i.size)?void 0:e.width)?i.size.width:"280px",t.style.height="auto"}_setupInteraction(){var e,t;if(window.innerWidth<768&&!this.player.state.fullscreen&&!1===(null==(t=null==(e=this.player)?void 0:e.options)?void 0:t.signLanguageDragOnMobile))return void(this.draggable&&(this.draggable.destroy(),this.draggable=null));if(this.draggable)return;const i=this.wrapper;if(!i)return;const s=this.player.options.classPrefix;this.draggable=new fe(i,{dragHandle:this.wrapper,resizeHandles:this.resizeHandles,constrainToViewport:!0,maintainAspectRatio:!0,minWidth:150,minHeight:100,classPrefix:`${s}-sign`,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:10,keyboardStepLarge:50,pointerResizeIndicatorText:x.t("player.signLanguageResizeActive"),onPointerResizeToggle:e=>{var t,i;this.resizeHandles.forEach(t=>{t.style.display=e?"block":"none"}),e?(this._showModeBadge(x.t("player.signResizeModeHint")),null==(t=this.player.keyboardManager)||t.announce(x.t("player.signLanguageResizeActive"))):(this._hideModeBadge(),null==(i=this.player.keyboardManager)||i.announce(x.t("player.signResizeModeDisabled")))},onDragStart(e){const t=e.target;return!(t.closest(`.${s}-sign-language-close`)||t.closest(`.${s}-sign-language-settings`)||t.closest(`.${s}-sign-language-select`)||t.closest(`.${s}-sign-language-label`)||t.closest(`.${s}-sign-language-settings-menu`))}}),this._setupCustomKeyHandler(),this.interactionHandlers={draggable:this.draggable,customKeyHandler:this.customKeyHandler}}_setupCustomKeyHandler(){var e;this.customKeyHandler=e=>{var t,i,s,a,n,r;const o=e.key.toLowerCase();if(!this.settingsMenuVisible){if("home"===o)return e.preventDefault(),e.stopPropagation(),void(this.draggable&&(this.draggable.pointerResizeMode&&this.draggable.disablePointerResizeMode(),this.draggable.manuallyPositioned=!1,this.constrainPosition()));if("r"===o)return e.preventDefault(),e.stopPropagation(),void(this.toggleResizeMode()&&(null==(t=this.wrapper)||t.focus({preventScroll:!0})));if("escape"===o){if(e.preventDefault(),e.stopPropagation(),null==(i=this.draggable)?void 0:i.pointerResizeMode)return void this.draggable.disablePointerResizeMode();if(null==(s=this.draggable)?void 0:s.keyboardDragMode)return this.draggable.disableKeyboardDragMode(),this._hideModeBadge(),this._updateDragOptionState(),void(null==(a=this.player.keyboardManager)||a.announce(x.t("player.signDragModeDisabled")));this.disable();const t=null==(r=null==(n=this.player.controlBar)?void 0:n.controls)?void 0:r.signLanguage;t&&setTimeout(()=>{t.focus({preventScroll:!0})},0)}}},null==(e=this.wrapper)||e.addEventListener("keydown",this.customKeyHandler)}_setupEventHandlers(e){this.handlers={play:()=>{this.video&&this.video.play()},pause:()=>{this.video&&this.video.pause()},timeupdate:()=>{this.video&&Math.abs(this.video.currentTime-this.player.state.currentTime)>.5&&(this.video.currentTime=this.player.state.currentTime)},ratechange:()=>{this.video&&(this.video.playbackRate=this.player.state.playbackSpeed)}},this.player.on("play",this.handlers.play),this.player.on("pause",this.handlers.pause),this.player.on("timeupdate",this.handlers.timeupdate),this.player.on("ratechange",this.handlers.ratechange),e&&(this.handlers.captionChange=()=>{var e,t;if((null==(e=this.player.captionManager)?void 0:e.currentTrack)&&this.selector){const e=null==(t=this.player.captionManager.currentTrack.language)?void 0:t.toLowerCase().split("-")[0];e&&this.sources[e]&&this.currentLanguage!==e&&(this.switchLanguage(e),this.selector.value=e)}},this.player.on("captionsenabled",this.handlers.captionChange))}constrainPosition(){var e;if(!this.wrapper||!this.player.videoWrapper)return;if(null==(e=this.draggable)?void 0:e.manuallyPositioned)return;this.wrapper.style.width||(this.wrapper.style.width="280px");const t=this.player.videoWrapper.getBoundingClientRect(),i=this.player.container.getBoundingClientRect(),s=this.wrapper.getBoundingClientRect(),a=t.left-i.left,n=t.top-i.top,r=t.width,o=t.height,l=s.width||280,d=s.height||157.5;let h,c;const u=16;switch(this.desiredPosition||"bottom-right"){case"bottom-right":default:h=a+r-l-u,c=n+o-d-95;break;case"bottom-left":h=a+u,c=n+o-d-95;break;case"top-right":h=a+r-l-u,c=n+u;break;case"top-left":h=a+u,c=n+u}h=Math.max(a,Math.min(h,a+r-l)),c=Math.max(n,Math.min(c,n+o-d-95)),this.wrapper.style.left=`${h}px`,this.wrapper.style.top=`${c}px`,this.wrapper.style.right="auto",this.wrapper.style.bottom="auto"}showSettingsMenu(){var e;null==(e=this._panel)||e.show()}hideSettingsMenu({focusButton:e=!0}={}){var t;null==(t=this._panel)||t.hide({focusButton:e})}_showModeBadge(e){var t;null==(t=this._panel)||t.showBadge(e)}_hideModeBadge(){var e;null==(e=this._panel)||e.hideBadge()}toggleKeyboardDragMode(){var e,t;if(!this.draggable)return;const i=this.draggable.keyboardDragMode;this.draggable.toggleKeyboardDragMode();const s=this.draggable.keyboardDragMode;!i&&s?(this._enableMoveMode(),this._showModeBadge(x.t("player.signDragModeHint")),null==(e=this.player.keyboardManager)||e.announce(x.t("player.signLanguageDragActive"))):i&&!s&&(this._hideModeBadge(),null==(t=this.player.keyboardManager)||t.announce(x.t("player.signDragModeDisabled"))),this._updateDragOptionState()}_enableMoveMode(){var e;null==(e=this.wrapper)||e.classList.add(`${this.player.options.classPrefix}-sign-move-mode`),this._updateResizeOptionState(),setTimeout(()=>{var e;null==(e=this.wrapper)||e.classList.remove(`${this.player.options.classPrefix}-sign-move-mode`)},2e3)}toggleResizeMode({focus:e=!0}={}){return!!this.draggable&&(this.draggable.pointerResizeMode?(this.draggable.disablePointerResizeMode({focus:e}),this._updateResizeOptionState(),!1):(this.draggable.enablePointerResizeMode({focus:e}),this._updateResizeOptionState(),!0))}_updateDragOptionState(){var e;null==(e=this._panel)||e.refreshDragState()}_updateResizeOptionState(){var e;null==(e=this._panel)||e.refreshResizeState()}savePreferences(){this.wrapper&&this.player.storage.saveSignLanguagePreferences({size:{width:this.wrapper.style.width}})}updateSources(e,t){this.src=e||null,this.sources=t||{},this.currentLanguage=null}cleanup(){var e;if(this.inMainView&&this.player.element){const e=this.player.element;if(this._mainViewUsingSourceSwap&&this.mainViewOriginalSources&&this.mainViewOriginalSources.length>0){Array.from(e.querySelectorAll("source")).forEach(e=>e.remove());const t=e.querySelector("track");this.mainViewOriginalSources.forEach(i=>{t?e.insertBefore(i,t):e.appendChild(i)}),this._mainViewUsingSourceSwap=!1}else this.mainViewOriginalSrc&&(e.src=this.mainViewOriginalSrc);e.muted=this._mainViewMutedBefore,"function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache(),e.load(),this.mainViewOriginalSrc=null,this.mainViewOriginalSources=null,this.inMainView=!1,this.player.state.signLanguageInMainView=!1,this.player.videoWrapper&&this.player.videoWrapper.classList.remove("vidply-sign-language-main-view-active"),this.player.emit("signlanguageinmainviewdisabled")}this.settingsMenuVisible&&this.hideSettingsMenu({focusButton:!1}),this._panel&&(this._panel.destroy(),this._panel=null),this.settingsHandlers&&this.settingsButton&&(this.settingsButton.removeEventListener("click",this.settingsHandlers.click),this.settingsButton.removeEventListener("keydown",this.settingsHandlers.keydown)),this.settingsHandlers=null,this.handlers&&(this.player.off("play",this.handlers.play),this.player.off("pause",this.handlers.pause),this.player.off("timeupdate",this.handlers.timeupdate),this.player.off("ratechange",this.handlers.ratechange),this.handlers.captionChange&&this.player.off("captionsenabled",this.handlers.captionChange),this.handlers=null),this.wrapper&&this.customKeyHandler&&this.wrapper.removeEventListener("keydown",this.customKeyHandler),this.draggable&&(this.draggable.pointerResizeMode&&this.draggable.disablePointerResizeMode(),this.draggable.destroy(),this.draggable=null),this.interactionHandlers=null,this._hideModeBadge(),(null==(e=this.wrapper)?void 0:e.parentNode)&&(this.video&&(this.video.pause(),this.video.src=""),this.wrapper.parentNode.removeChild(this.wrapper)),this.wrapper=null,this.video=null,this.settingsButton=null}destroy(){this.cleanup(),this.enabled=!1}}}}),$e={};a($e,{FloatingPlayerManager:()=>Ve});var Oe,Fe=s({"src/core/FloatingPlayerManager.ts"(){d(),be(),F(),H(),_e="vidply:floating-claim",Re=240,Be=16,Ve=class{constructor(e){n(this,"player"),n(this,"classPrefix"),n(this,"shell"),n(this,"dragHandle"),n(this,"closeButton"),n(this,"resizeHandles"),n(this,"placeholder"),n(this,"draggable"),n(this,"originalParent"),n(this,"originalNextSibling"),n(this,"intersectionObserver"),n(this,"observerTarget"),n(this,"lastRatio"),n(this,"_autoDismissedThisPlay"),n(this,"_playListenerAttached"),n(this,"_onPlayAfterDismiss"),n(this,"_onClaim"),n(this,"_onResize"),n(this,"_onKeyDown"),n(this,"_onEnterFullscreen"),n(this,"_destroyed"),n(this,"_triggerFocusEl"),n(this,"_claimId"),n(this,"_lastAutoExitTime"),this.player=e,this.classPrefix=e.options.classPrefix||"vidply",this.shell=null,this.dragHandle=null,this.closeButton=null,this.resizeHandles=[],this.placeholder=null,this.draggable=null,this.originalParent=null,this.originalNextSibling=null,this.intersectionObserver=null,this.observerTarget=null,this.lastRatio=1,this._autoDismissedThisPlay=!1,this._playListenerAttached=!1,this._onPlayAfterDismiss=null,this._onClaim=null,this._onResize=null,this._onKeyDown=null,this._onEnterFullscreen=null,this._destroyed=!1,this._triggerFocusEl=null,this._claimId=`floating-${e.instanceId}-${Date.now()}`,this._lastAutoExitTime=0,this._setupClaimListener(),this._setupFullscreenGuard(),this._startObserving()}togglePinned(e){if(!this._destroyed){if("pinned"===this.player.state.floating)return this._autoDismissedThisPlay=!0,this._armPlayListenerToClearDismiss(),void this.exit("manual");this._autoDismissedThisPlay=!1,this._triggerFocusEl=e||this._activeElement(),this.enter("pinned")}}enter(e){if(!this._destroyed&&this.player.state.floating!==e&&this._canFloat(e)){if(this.player.state.floating&&this.player.state.floating!==e)return this.player.state.floating=e,void this.player.emit("floatingchange",e);this._claimSingleton(),this._ensureShell(),this._mountIntoShell(),this._applyInitialGeometry(),this.player.state.floating=e,this.player.emit("floatingchange",e),queueMicrotask(()=>{if(this.closeButton&&this.player.state.floating)try{this.closeButton.focus({preventScroll:!0})}catch{}})}}exit(e="manual"){if(this._destroyed&&"destroy"!==e)return;if(!this.player.state.floating)return;"auto"===e&&(this._lastAutoExitTime=Date.now()),this._unmountFromShell(),this._teardownShell();const t=this._triggerFocusEl;if(this._triggerFocusEl=null,this.player.state.floating=null,this.player.emit("floatingchange",null),("manual"===e||"dismiss"===e)&&t)try{t.focus({preventScroll:!0})}catch{}}dismiss(){if(!this._destroyed){this._autoDismissedThisPlay=!0,this._armPlayListenerToClearDismiss();try{this.player.pause()}catch{}this.exit("dismiss")}}destroy(){if(this._destroyed)return;if(this._destroyed=!0,this.player.state&&this.player.state.floating)try{this.exit("destroy")}catch{}if(this.intersectionObserver){try{this.intersectionObserver.disconnect()}catch{}this.intersectionObserver=null}this.observerTarget=null,this._onClaim&&(window.removeEventListener(_e,this._onClaim),this._onClaim=null),this._onResize&&(window.removeEventListener("resize",this._onResize),this._onResize=null);const e=this._onEnterFullscreen;e&&(this.player.off("enterfullscreen",e),this._onEnterFullscreen=null);const t=this._onPlayAfterDismiss;t&&this._playListenerAttached&&(this.player.off("play",t),this._playListenerAttached=!1,this._onPlayAfterDismiss=null)}_canFloat(e){if(!this.player.options.floating)return!1;if(!this.player.container)return!1;if(!this.player.element||"VIDEO"!==this.player.element.tagName)return!1;if(this.player.state.fullscreen)return!1;if(this.player.playlistManager)return!1;if(window.innerWidth<(this.player.options.floatingMinViewportWidth??768))return!1;if("auto"===e){if(this._autoDismissedThisPlay)return!1;if(this.player.state.paused)return!1;if(!this.player.state.hasStartedPlayback)return!1}return!0}_claimSingleton(){try{window.dispatchEvent(new CustomEvent(_e,{detail:{claimId:this._claimId}}))}catch{}}_setupClaimListener(){this._onClaim=e=>{const t=e.detail;t&&t.claimId!==this._claimId&&this.player.state.floating&&this.exit("claim")};const e=this.player.lifecycleSignal;window.addEventListener(_e,this._onClaim,{signal:e}),this._onResize=()=>{this.player.state.floating&&window.innerWidth<(this.player.options.floatingMinViewportWidth??768)&&this.exit("auto")},window.addEventListener("resize",this._onResize,{signal:e})}_setupFullscreenGuard(){const e=()=>{this.player.state.floating&&this.exit("manual")};this._onEnterFullscreen=e,this.player.on("enterfullscreen",e)}_armPlayListenerToClearDismiss(){if(this._playListenerAttached)return;const e=()=>{this._autoDismissedThisPlay=!1;const e=this._onPlayAfterDismiss;e&&this.player.off("play",e),this._playListenerAttached=!1,this._onPlayAfterDismiss=null};this._onPlayAfterDismiss=e,this.player.on("play",e),this._playListenerAttached=!0}_startObserving(){"IntersectionObserver"in window&&this.player.container&&(this.observerTarget=this.player.container,this.intersectionObserver=new IntersectionObserver(e=>{const t=e[e.length-1];if(t){if(this.lastRatio=t.intersectionRatio,this.player.options.debug)try{console.log("[vidply:floating] intersection",{ratio:Number(t.intersectionRatio.toFixed(3)),state:this.player.state.floating,paused:this.player.state.paused,hasStartedPlayback:this.player.state.hasStartedPlayback,dismissed:this._autoDismissedThisPlay})}catch{}if("auto"!==this.player.state.floating){if("pinned"!==this.player.state.floating&&t.intersectionRatio<.1&&this._canFloat("auto")){const e=500;if(Date.now()-this._lastAutoExitTime<e)return;this.enter("auto")}}else t.intersectionRatio>=.5&&this.exit("auto")}},{threshold:[0,.1,.5,.9]}),this.intersectionObserver.observe(this.observerTarget))}_retargetObserver(e){if(this.intersectionObserver){if(this.observerTarget)try{this.intersectionObserver.unobserve(this.observerTarget)}catch{}this.observerTarget=e;try{this.intersectionObserver.observe(e)}catch{}}}_ensureShell(){if(this.shell)return;this.shell=e.createElement("div",{className:`${this.classPrefix}-floating-shell`,attributes:{role:"dialog","aria-modal":"false","aria-label":x.t("player.floatingPlayer"),"data-vidply-floating":"true",tabindex:"-1"}}),this.dragHandle=e.createElement("div",{className:`${this.classPrefix}-floating-drag-handle`,attributes:{"aria-hidden":"true"}}),this.shell.appendChild(this.dragHandle),this.closeButton=e.createElement("button",{className:`${this.classPrefix}-floating-close`,attributes:{type:"button","aria-label":x.t("player.floatingPlayerClose"),title:x.t("player.floatingPlayerClose")}}),this.closeButton.appendChild(O("close")),this.closeButton.addEventListener("click",e=>{e.stopPropagation(),this.dismiss()}),this.shell.appendChild(this.closeButton),this._createResizeHandles();const t=this.shell;this.resizeHandles.forEach(e=>t.appendChild(e)),this._onKeyDown=e=>{if("Escape"===e.key){const t=this.draggable;if(t&&(t.keyboardDragMode||t.keyboardResizeMode||t.pointerResizeMode))return;e.stopPropagation(),this.dismiss()}},this.shell.addEventListener("keydown",this._onKeyDown)}_createResizeHandles(){this.resizeHandles=["n","s","e","w","ne","nw","se","sw"].map(t=>e.createElement("div",{className:`${this.classPrefix}-floating-resize-handle ${this.classPrefix}-floating-resize-${t}`,attributes:{"data-direction":t,"aria-hidden":"true"}}))}_teardownShell(){if(this.draggable){try{this.draggable.destroy()}catch{}this.draggable=null}this.shell&&(this._onKeyDown&&(this.shell.removeEventListener("keydown",this._onKeyDown),this._onKeyDown=null),this.shell.parentNode&&this.shell.parentNode.removeChild(this.shell)),this.shell=null,this.dragHandle=null,this.closeButton=null,this.resizeHandles=[]}_mountIntoShell(){const t=this.player.container;if(!t||!t.parentNode)return;if(!this.shell)return;const i=t.getBoundingClientRect();this.originalParent=t.parentNode,this.originalNextSibling=t.nextSibling,this.placeholder=e.createElement("div",{className:`${this.classPrefix}-floating-placeholder`,attributes:{"aria-hidden":"true"}}),this.placeholder.style.width=`${Math.max(1,i.width)}px`,this.placeholder.style.height=`${Math.max(1,i.height)}px`;const s=O("pip",`${this.classPrefix}-floating-placeholder-icon`);this.placeholder.appendChild(s),this.originalParent.insertBefore(this.placeholder,t),this.shell.appendChild(t),document.body.appendChild(this.shell),t.classList.add(`${this.classPrefix}-is-floating`),this._retargetObserver(this.placeholder)}_unmountFromShell(){const e=this.player.container;e&&(e.classList.remove(`${this.classPrefix}-is-floating`),e.style.removeProperty("width"),e.style.removeProperty("height")),this.placeholder&&this.placeholder.parentNode?(e&&this.placeholder.parentNode.insertBefore(e,this.placeholder),this.placeholder.parentNode.removeChild(this.placeholder)):e&&this.originalParent&&(this.originalNextSibling&&this.originalNextSibling.parentNode===this.originalParent?this.originalParent.insertBefore(e,this.originalNextSibling):this.originalParent.appendChild(e)),this.placeholder=null,this.originalParent=null,this.originalNextSibling=null,e&&this._retargetObserver(e)}_applyInitialGeometry(){var e,t,i;if(!this.shell)return;const s=(null==(t=null==(e=this.player.storage)?void 0:e.getFloatingPreferences)?void 0:t.call(e))||{},a=window.innerWidth,n=window.innerHeight;let r=s.width&&s.width>=Re?s.width:400;r=Math.min(r,Math.max(Re,a-32));const o=null==(i=this.player.container)?void 0:i.getBoundingClientRect(),l=Math.round(r/(o&&o.height>0?o.width/o.height:16/9));let d,h,c=s.height&&s.height>=100?s.height:l;if(c=Math.min(c,Math.max(100,n-32)),"number"==typeof s.left&&"number"==typeof s.top)d=Math.max(Be,Math.min(s.left,a-r-Be)),h=Math.max(Be,Math.min(s.top,n-c-Be));else switch(this.player.options.floatingPosition||"bottom-right"){case"bottom-left":d=Be,h=n-c-Be;break;case"top-right":d=a-r-Be,h=Be;break;case"top-left":d=Be,h=Be;break;default:d=a-r-Be,h=n-c-Be}this.shell.style.width=`${r}px`,this.shell.style.height=`${c}px`,this.shell.style.left=`${d}px`,this.shell.style.top=`${h}px`,this._initDraggable()}_initDraggable(){this.shell&&(this.draggable||(this.draggable=new fe(this.shell,{dragHandle:this.dragHandle,resizeHandles:this.resizeHandles,constrainToViewport:!0,maintainAspectRatio:!0,minWidth:Re,minHeight:100,maxWidth:()=>Math.max(Re,window.innerWidth-32),maxHeight:()=>Math.max(100,window.innerHeight-32),classPrefix:`${this.classPrefix}-floating`,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:10,keyboardStepLarge:50,pointerResizeIndicatorText:x.t("player.floatingPlayerDialog"),onDragEnd:()=>this._savePrefs(),onResizeEnd:()=>this._savePrefs(),onDragStart:e=>{const t=e.target;return!t||!t.closest(`.${this.classPrefix}-floating-close`)&&!t.closest(`.${this.classPrefix}-controls`)&&!t.closest(`.${this.classPrefix}-floating-resize-handle`)}})))}_savePrefs(){var e;if(!this.shell||!(null==(e=this.player.storage)?void 0:e.saveFloatingPreferences))return;const t=this.shell.getBoundingClientRect();this.player.storage.saveFloatingPreferences({width:Math.round(t.width),height:Math.round(t.height),left:Math.round(t.left),top:Math.round(t.top)})}_activeElement(){const e=document.activeElement;return e&&e instanceof HTMLElement?e:null}}}}),Ie={};a(Ie,{TranscriptManager:()=>Oe});var Ne,We=s({"src/controls/TranscriptManager.ts"(){d(),$(),F(),H(),oe(),N(),Pe(),be(),Me(),Ae(),ce(),Oe=class{constructor(e){n(this,"player"),n(this,"_cueUpdateTimeout"),n(this,"autoscrollCheckbox",null),n(this,"autoscrollEnabled"),n(this,"availableTranscriptLanguages"),n(this,"currentActiveEntry"),n(this,"currentTranscriptLanguage"),n(this,"customKeyHandler",null),n(this,"documentClickHandlerAdded",!1),n(this,"draggableResizable"),n(this,"handlers",{}),n(this,"headerLeft",null),n(this,"isVisible"),n(this,"languageLabel"),n(this,"languageSelector"),n(this,"languageSelectorHandler"),n(this,"languageSelectorWrapper",null),n(this,"liveRegion"),n(this,"metadataCueChangeHandler",null),n(this,"metadataCues"),n(this,"settingsButton"),n(this,"showTimestamps"),n(this,"showTimestampsButton",null),n(this,"showTimestampsText",null),n(this,"storage"),n(this,"styleDialog"),n(this,"styleDialogJustOpened"),n(this,"styleDialogVisible"),n(this,"timeouts"),n(this,"transcriptContent",null),n(this,"transcriptEntries"),n(this,"transcriptHeader",null),n(this,"transcriptResizeHandles"),n(this,"transcriptStyle"),n(this,"transcriptWindow"),n(this,"_dashActiveLang"),n(this,"_vttCache"),n(this,"_panel",null),this.player=e,this.transcriptWindow=null,this.transcriptEntries=[],this.metadataCues=[],this.currentActiveEntry=null,this.isVisible=!1,this.storage=new ee("vidply"),this.draggableResizable=null,this.settingsButton=null,this.transcriptResizeHandles=[],this.liveRegion=null,this.styleDialog=null,this.styleDialogVisible=!1,this.styleDialogJustOpened=!1,this.languageSelector=null,this.languageLabel=null,this.currentTranscriptLanguage=null,this.availableTranscriptLanguages=[],this.languageSelectorHandler=null;const t=this.storage.getTranscriptPreferences();this.autoscrollEnabled="boolean"!=typeof(null==t?void 0:t.autoscroll)||t.autoscroll,this.showTimestamps="boolean"==typeof(null==t?void 0:t.showTimestamps)&&t.showTimestamps,this.transcriptStyle={fontSize:("string"==typeof(null==t?void 0:t.fontSize)?t.fontSize:void 0)||("string"==typeof this.player.options.transcriptFontSize?this.player.options.transcriptFontSize:void 0)||"100%",fontFamily:("string"==typeof(null==t?void 0:t.fontFamily)?t.fontFamily:void 0)||("string"==typeof this.player.options.transcriptFontFamily?this.player.options.transcriptFontFamily:void 0)||"sans-serif",color:("string"==typeof(null==t?void 0:t.color)?t.color:void 0)||("string"==typeof this.player.options.transcriptColor?this.player.options.transcriptColor:void 0)||"#ffffff",backgroundColor:("string"==typeof(null==t?void 0:t.backgroundColor)?t.backgroundColor:void 0)||("string"==typeof this.player.options.transcriptBackgroundColor?this.player.options.transcriptBackgroundColor:void 0)||"#1e1e1e",opacity:("number"==typeof(null==t?void 0:t.opacity)?t.opacity:void 0)??("number"==typeof this.player.options.transcriptOpacity?this.player.options.transcriptOpacity:void 0)??.98},this.handlers={timeupdate:()=>this.updateActiveEntry(),seeked:()=>this.updateActiveEntry(),audiodescriptionenabled:()=>{this.isVisible&&this.loadTranscriptData()},audiodescriptiondisabled:()=>{this.isVisible&&this.loadTranscriptData()},textcuesupdate:null,resize:null,settingsClick:null,settingsKeydown:null,documentClick:null,styleDialogKeydown:null,floatingchange:null},this._cueUpdateTimeout=null,this._dashActiveLang=null,this._vttCache=new Map,this.timeouts=new Set,this.init()}get settingsMenu(){var e;return(null==(e=this._panel)?void 0:e.settingsMenu)??null}set settingsMenu(e){}get settingsMenuVisible(){var e;return(null==(e=this._panel)?void 0:e.settingsMenuVisible)??!1}set settingsMenuVisible(e){}get settingsMenuJustOpened(){var e;return(null==(e=this._panel)?void 0:e.justOpened)??!1}set settingsMenuJustOpened(e){}get dragOptionButton(){var e;return(null==(e=this._panel)?void 0:e.dragOptionButton)??null}get dragOptionText(){var e;return(null==(e=this._panel)?void 0:e.dragOptionText)??null}get resizeOptionButton(){var e;return(null==(e=this._panel)?void 0:e.resizeOptionButton)??null}get resizeOptionText(){var e;return(null==(e=this._panel)?void 0:e.resizeOptionText)??null}init(){this.setupMetadataHandlingOnLoad(),this.player.on("timeupdate",this.handlers.timeupdate),this.player.on("seeked",this.handlers.seeked),this.player.on("audiodescriptionenabled",this.handlers.audiodescriptionenabled),this.player.on("audiodescriptiondisabled",this.handlers.audiodescriptiondisabled),this.handlers.textcuesupdate=()=>{this.isVisible&&(this.currentTranscriptLanguage&&this._vttCache.has(this.currentTranscriptLanguage)||(this._cueUpdateTimeout&&this.clearManagedTimeout(this._cueUpdateTimeout),this._cueUpdateTimeout=this.setManagedTimeout(()=>{this._cueUpdateTimeout=null,this.loadTranscriptData()},400)))},this.player.on("textcuesupdate",this.handlers.textcuesupdate),this.player.on("fullscreenchange",()=>{this.isVisible&&(window.innerWidth<768&&this.setupDragAndDrop(),this.draggableResizable&&this.draggableResizable.manuallyPositioned||this.setManagedTimeout(()=>this.positionTranscript(),100))}),this.handlers.floatingchange=e=>{e&&this.isVisible&&this.hideTranscript()},this.player.on("floatingchange",this.handlers.floatingchange)}_requestStreamingTrack(e){if(!e)return;const t=this.player.renderer;(null==t?void 0:t.isStreaming)&&"function"==typeof t.activateTextTrackForLanguage&&this._dashActiveLang!==e&&(this._dashActiveLang=e,t.activateTextTrackForLanguage(e))}toggleTranscript(){this.isVisible?this.hideTranscript():this.showTranscript()}showTranscript(){var e;if(null==(e=this.player.state)?void 0:e.floating)return;if(this.player.invalidateTrackCache(),this.transcriptWindow)return this.transcriptWindow.style.display="flex",this.isVisible=!0,this.loadTranscriptData(),this._requestStreamingTrack(this.currentTranscriptLanguage),this.updateLanguageSelector(),this.player.controlBar&&"function"==typeof this.player.controlBar.updateTranscriptButton&&this.player.controlBar.updateTranscriptButton(),void I(this.settingsButton,{delay:150});this.createTranscriptWindow(),this.loadTranscriptData(),this._requestStreamingTrack(this.currentTranscriptLanguage);const t=this.transcriptWindow;t&&(t.style.display="flex",this.draggableResizable&&this.draggableResizable.manuallyPositioned||this.setManagedTimeout(()=>this.positionTranscript(),0),I(this.settingsButton,{delay:150})),this.isVisible=!0}hideTranscript({focusButton:e=!1}={}){var t,i;if(this.transcriptWindow&&(this.transcriptWindow.style.display="none",this.isVisible=!1),this.draggableResizable&&this.draggableResizable.pointerResizeMode&&(this.draggableResizable.disablePointerResizeMode(),this.updateResizeOptionState()),this.hideResizeModeIndicator(),this.announceLive(""),this.player.controlBar&&"function"==typeof this.player.controlBar.updateTranscriptButton&&this.player.controlBar.updateTranscriptButton(),e){const e=null==(i=null==(t=this.player.controlBar)?void 0:t.controls)?void 0:i.transcript;e&&"function"==typeof e.focus&&e.focus({preventScroll:!0})}}createTranscriptWindow(){this.transcriptWindow=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-window`,attributes:{role:"dialog","aria-label":x.t("transcript.ariaLabel"),tabindex:"-1"}}),this.transcriptHeader=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header`,attributes:{tabindex:"0"}}),this.headerLeft=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header-left`});const t=x.t("transcript.settingsMenu");this.settingsButton=e.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings`,attributes:{type:"button","aria-label":t,"aria-expanded":"false"}}),this.settingsButton.appendChild(O("settings")),e.attachTooltip(this.settingsButton,t,this.player.options.classPrefix),this._panel=new Le({player:this.player,namespace:"transcript",settingsButton:this.settingsButton,getDraggable:()=>this.draggableResizable,i18nKeys:{enableDrag:"transcript.enableDragMode",disableDrag:"transcript.disableDragMode",enableDragAria:"transcript.enableDragModeAria",disableDragAria:"transcript.disableDragModeAria",enableResize:"transcript.enableResizeMode",disableResize:"transcript.disableResizeMode",enableResizeAria:"transcript.enableResizeModeAria",disableResizeAria:"transcript.disableResizeModeAria",closeMenu:"transcript.closeMenu"},menuAlign:"left",getMenuParent:()=>this.headerLeft??this.transcriptHeader??this.transcriptWindow,getBadgeHost:()=>this.transcriptWindow,onDragItemClick:e=>{this.toggleKeyboardDragMode(),e.hide()},onResizeItemClick:e=>{this.toggleResizeMode({focus:!1})?(e.hide({focusButton:!1}),setTimeout(()=>{var e;null==(e=this.transcriptWindow)||e.focus({preventScroll:!0})},20)):e.hide({focusButton:!0})},buildExtraItems:({menu:e,itemClass:t,classPrefix:i,stripInlineTooltip:s})=>{const a=Te({classPrefix:i,itemClass:t,icon:"settings",label:"transcript.styleTranscript",onClick:e=>{var t;e.preventDefault(),e.stopPropagation(),null==(t=this._panel)||t.hide(),setTimeout(()=>{this.showStyleDialog()},50)}});s(a),e.appendChild(a);const n=Te({classPrefix:i,itemClass:t,icon:"clock",label:"transcript.showTimestamps",hasTextClass:!0,onClick:()=>{this.toggleShowTimestamps()}});n.setAttribute("role","switch"),n.setAttribute("aria-checked",this.showTimestamps?"true":"false"),s(n),this.showTimestampsButton=n,this.showTimestampsText=n.querySelector(`.${i}-settings-text`),this.updateShowTimestampsState(),e.appendChild(n)}}),this.handlers.settingsClick=e=>{var t,i;e.preventDefault(),e.stopPropagation(),null==(t=this._panel)||t.markJustOpenedForClick(),null==(i=this._panel)||i.toggle()},this.settingsButton.addEventListener("click",this.handlers.settingsClick),this.handlers.settingsKeydown=e=>{"d"===e.key||"D"===e.key?(e.preventDefault(),e.stopPropagation(),this.toggleKeyboardDragMode()):"r"===e.key||"R"===e.key?(e.preventDefault(),e.stopPropagation(),this.toggleResizeMode()):"Escape"===e.key&&this.settingsMenuVisible&&(e.preventDefault(),e.stopPropagation(),this.hideSettingsMenu())},this.settingsButton.addEventListener("keydown",this.handlers.settingsKeydown);const i=e.createElement("h3",{textContent:`${x.t("transcript.title")}. ${x.t("transcript.dragResizePrompt")}`}),s=`${this.player.options.classPrefix}-transcript-autoscroll-${Date.now()}`,a=e.createElement("label",{className:`${this.player.options.classPrefix}-transcript-autoscroll-label`,attributes:{for:s}});this.autoscrollCheckbox=e.createElement("input",{attributes:{id:s,type:"checkbox"}}),this.autoscrollEnabled&&(this.autoscrollCheckbox.checked=!0);const n=e.createElement("span",{textContent:x.t("transcript.autoscroll"),className:`${this.player.options.classPrefix}-transcript-autoscroll-text`});a.appendChild(this.autoscrollCheckbox),a.appendChild(n),this.autoscrollCheckbox.addEventListener("change",e=>{this.autoscrollEnabled=e.target.checked,this.saveAutoscrollPreference()}),Se(a),this.transcriptHeader.appendChild(i),this.headerLeft.appendChild(this.settingsButton),this.headerLeft.appendChild(a);const r=`${this.player.options.classPrefix}-transcript-language-select-${Date.now()}`,{label:o,select:l}=we({classPrefix:this.player.options.classPrefix,labelClass:`${this.player.options.classPrefix}-transcript-language-label`,selectClass:`${this.player.options.classPrefix}-transcript-language-select`,labelText:"settings.language",selectId:r,hidden:!1});this.languageLabel=o,this.languageSelector=l;const d=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-language-wrapper`,attributes:{style:"display: none;"}});d.appendChild(o),d.appendChild(l),this.languageSelectorWrapper=d,Se(d),this.headerLeft&&this.headerLeft.appendChild(d);const h=x.t("transcript.close"),c=e.createElement("button",{className:`${this.player.options.classPrefix}-transcript-close`,attributes:{type:"button","aria-label":h}});c.appendChild(O("close")),e.attachTooltip(c,h,this.player.options.classPrefix),c.addEventListener("click",()=>this.hideTranscript({focusButton:!0})),this.transcriptHeader.appendChild(this.headerLeft),this.transcriptHeader.appendChild(c),this.transcriptContent=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-content`}),this.transcriptWindow.appendChild(this.transcriptHeader),this.transcriptWindow.appendChild(this.transcriptContent),this.createResizeHandles(),this.liveRegion=e.createElement("div",{className:"vidply-sr-only",attributes:{"aria-live":"polite","aria-atomic":"true"}}),this.transcriptWindow.appendChild(this.liveRegion),this.player.container.appendChild(this.transcriptWindow),this.setupDragAndDrop(),this.draggableResizable&&this.draggableResizable.manuallyPositioned||this.positionTranscript(),this.handlers.documentClick=e=>{if(this.styleDialogJustOpened)return;const t=e.target;this.styleDialogVisible&&this.styleDialog&&t&&!this.styleDialog.contains(t)&&this.hideStyleDialog()},this.documentClickHandlerAdded=!1;let u=null;this.handlers.resize=()=>{u&&this.clearManagedTimeout(u),u=this.setManagedTimeout(()=>{this.draggableResizable&&this.draggableResizable.manuallyPositioned||this.positionTranscript()},100)},window.addEventListener("resize",this.handlers.resize,{signal:this.player.lifecycleSignal})}createResizeHandles(){const t=this.transcriptWindow;t&&(this.transcriptResizeHandles=["n","s","e","w","ne","nw","se","sw"].map(i=>{const s=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-resize-handle ${this.player.options.classPrefix}-transcript-resize-${i}`,attributes:{"data-direction":i,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return s.style.display="none",t.appendChild(s),s}))}positionTranscript(){const e=this.player;if(!this.transcriptWindow||!e.videoWrapper||!this.isVisible)return;if(this.draggableResizable&&this.draggableResizable.manuallyPositioned)return;const t=window.innerWidth<768,i=e.videoWrapper.getBoundingClientRect(),s=this.player.state.fullscreen;if(t&&!s){this.transcriptWindow.style.position="relative",this.transcriptWindow.style.left="0",this.transcriptWindow.style.right="0",this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.top="auto",this.transcriptWindow.style.width="100%",this.transcriptWindow.style.maxWidth="100%",this.transcriptWindow.style.maxHeight="300px",this.transcriptWindow.style.height="auto",this.transcriptWindow.style.borderRadius="0",this.transcriptWindow.style.transform="none",this.transcriptWindow.style.border="none",this.transcriptWindow.style.borderTop="1px solid var(--vidply-border-light)",this.transcriptWindow.style.removeProperty("border-right"),this.transcriptWindow.style.removeProperty("border-bottom"),this.transcriptWindow.style.removeProperty("border-left"),this.transcriptWindow.style.removeProperty("border-image"),this.transcriptWindow.style.removeProperty("border-image-source"),this.transcriptWindow.style.removeProperty("border-image-slice"),this.transcriptWindow.style.removeProperty("border-image-width"),this.transcriptWindow.style.removeProperty("border-image-outset"),this.transcriptWindow.style.removeProperty("border-image-repeat"),this.transcriptWindow.style.boxShadow="none",this.transcriptHeader&&(this.transcriptHeader.style.cursor="default");const t=e.videoWrapper;t&&t.parentNode&&t.nextSibling!==this.transcriptWindow&&t.parentNode.insertBefore(this.transcriptWindow,t.nextSibling)}else if(s){this.transcriptWindow.style.position="fixed",this.transcriptWindow.style.left="auto",this.transcriptWindow.style.right="20px",this.transcriptWindow.style.bottom="80px",this.transcriptWindow.style.top="auto",this.transcriptWindow.style.maxHeight="calc(100vh - 180px)",this.transcriptWindow.style.height="auto";const e=260,t=Math.max(e,window.innerWidth-40),i=parseFloat(this.transcriptWindow.style.width)||400,s=Math.max(e,Math.min(i,t));this.transcriptWindow.style.width=`${s}px`,this.transcriptWindow.style.maxWidth="none",this.transcriptWindow.style.borderRadius="8px",this.transcriptWindow.style.border="1px solid var(--vidply-border)",this.transcriptWindow.style.removeProperty("border-top"),this.transcriptWindow.style.removeProperty("border-right"),this.transcriptWindow.style.removeProperty("border-bottom"),this.transcriptWindow.style.removeProperty("border-left"),this.transcriptWindow.style.removeProperty("border-image"),this.transcriptWindow.style.removeProperty("border-image-source"),this.transcriptWindow.style.removeProperty("border-image-slice"),this.transcriptWindow.style.removeProperty("border-image-width"),this.transcriptWindow.style.removeProperty("border-image-outset"),this.transcriptWindow.style.removeProperty("border-image-repeat"),this.transcriptHeader&&(this.transcriptHeader.style.cursor="move"),this.transcriptWindow.parentNode!==this.player.container&&this.player.container.appendChild(this.transcriptWindow)}else{const t=parseFloat(this.transcriptWindow.style.width)||400,s=20,a=260,n=this.player.container.getBoundingClientRect();(()=>{"static"===window.getComputedStyle(this.player.container).position&&(this.player.container.style.position="relative")})();const r=window.innerWidth-i.right-s;if(r<t||!(r>=a)){const t=320,s=280,r=Math.min(t,i.width-40),o=Math.min(s,i.height-120),l=e.videoWrapper.getBoundingClientRect(),d=70,h=Math.max(180,o),c=l.bottom-n.top-d-h,u=n.right-l.right+12;this.transcriptWindow.style.position="absolute",this.transcriptWindow.style.left="auto",this.transcriptWindow.style.right=`${u}px`,this.transcriptWindow.style.top=`${c}px`,this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.width=`${Math.max(a,r)}px`,this.transcriptWindow.style.maxWidth=`${t}px`,this.transcriptWindow.style.height=`${h}px`,this.transcriptWindow.style.maxHeight=`${s}px`,this.transcriptWindow.style.boxShadow="0 4px 16px rgba(0, 0, 0, 0.6)"}else{const e=i.right-n.left+s,o=Math.max(a,Math.min(t,r)),l=i.height;this.transcriptWindow.style.position="absolute",this.transcriptWindow.style.left=`${e}px`,this.transcriptWindow.style.right="auto",this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.top="0",this.transcriptWindow.style.height=`${l}px`,this.transcriptWindow.style.maxHeight="none",this.transcriptWindow.style.width=`${o}px`,this.transcriptWindow.style.maxWidth="none",this.transcriptWindow.style.boxShadow=""}this.transcriptWindow.style.borderRadius="8px",this.transcriptWindow.style.border="1px solid var(--vidply-border)",this.transcriptWindow.style.removeProperty("border-top"),this.transcriptWindow.style.removeProperty("border-right"),this.transcriptWindow.style.removeProperty("border-bottom"),this.transcriptWindow.style.removeProperty("border-left"),this.transcriptWindow.style.removeProperty("border-image"),this.transcriptWindow.style.removeProperty("border-image-source"),this.transcriptWindow.style.removeProperty("border-image-slice"),this.transcriptWindow.style.removeProperty("border-image-width"),this.transcriptWindow.style.removeProperty("border-image-outset"),this.transcriptWindow.style.removeProperty("border-image-repeat"),this.transcriptHeader&&(this.transcriptHeader.style.cursor="move"),this.transcriptWindow.parentNode!==this.player.container&&this.player.container.appendChild(this.transcriptWindow)}}getAvailableTranscriptLanguages(){const e=this.player.textTracks,t=new Map;return e.forEach(e=>{if(("captions"===e.kind||"subtitles"===e.kind)&&!e._vidplyStale){const i=(e.language??"").trim(),s=le(e.label,e.language,"player.captions"),a=i||s;a&&!t.has(a)&&t.set(a,{language:i,label:s,track:e})}}),Array.from(t.values())}updateLanguageSelector(){const t=this.languageSelector;if(!t)return;if(this.availableTranscriptLanguages=this.getAvailableTranscriptLanguages(),t.innerHTML="",this.availableTranscriptLanguages.length<2)return void(this.languageSelectorWrapper&&(this.languageSelectorWrapper.style.display="none"));if(this.languageSelectorWrapper&&(this.languageSelectorWrapper.style.display="flex"),this.availableTranscriptLanguages.forEach(i=>{const s={value:i.language||i.label};i.language&&(s.lang=i.language);const a=e.createElement("option",{textContent:i.label,attributes:s});t.appendChild(a)}),this.currentTranscriptLanguage)t.value=this.currentTranscriptLanguage;else if(this.availableTranscriptLanguages.length>0){const e=this.player.textTracks.find(e=>("captions"===e.kind||"subtitles"===e.kind)&&"showing"===e.mode),i=this.availableTranscriptLanguages[0];this.currentTranscriptLanguage=e?e.language:i?i.language:null,this.currentTranscriptLanguage&&(t.value=this.currentTranscriptLanguage)}this.languageSelectorHandler&&t.removeEventListener("change",this.languageSelectorHandler);const i=e=>{this.currentTranscriptLanguage=e.target.value,this._requestStreamingTrack(this.currentTranscriptLanguage),this.loadTranscriptData(),this.transcriptContent&&this.currentTranscriptLanguage&&this.transcriptContent.setAttribute("lang",this.currentTranscriptLanguage)};this.languageSelectorHandler=i,t.addEventListener("change",i)}_parseVTT(e){var t,i;const s=[],a=e.replace(/\r\n/g,"\n").split(/\n\n+/);for(const e of a){const a=e.trim().split("\n");let n=-1;for(let e=0;e<a.length;e++)if(null==(t=a[e])?void 0:t.includes("--\x3e")){n=e;break}if(n<0)continue;const r=null==(i=a[n])?void 0:i.match(/(\d{1,2}:)?(\d{2}):(\d{2})\.(\d{3})\s*-->\s*(\d{1,2}:)?(\d{2}):(\d{2})\.(\d{3})/);if(!r)continue;const o=(r[1]?3600*parseInt(r[1]):0)+60*parseInt(r[2]??"0")+parseInt(r[3]??"0")+parseInt(r[4]??"0")/1e3,l=(r[5]?3600*parseInt(r[5]):0)+60*parseInt(r[6]??"0")+parseInt(r[7]??"0")+parseInt(r[8]??"0")/1e3,d=a.slice(n+1).join("\n").trim();d&&s.push({cue:{startTime:o,endTime:l,text:d,id:""},type:"caption"})}return s}async _loadVttTranscript(e){const t=this._vttCache.get(e);if(t)return t;const i=this.player.renderer;if(!(null==i?void 0:i.isStreaming)||"function"!=typeof i.getTextTrackURLs)return null;const s=i.getTextTrackURLs().find(t=>t.lang===e||t.lang.startsWith(e)||e.startsWith(t.lang));if(!s)return null;const a=this._buildFetchSignal(1e4);try{const t=await fetch(s.url,{signal:a});if(!t.ok)return null;let i=await t.text();if(i.trimStart().startsWith("#EXTM3U")){const e=i.split("\n").map(e=>e.trim()).find(e=>e&&!e.startsWith("#"));if(!e)return null;const t=s.url.substring(0,s.url.lastIndexOf("/")+1),a=e.startsWith("http")?e:new URL(e,t).href,n=await fetch(a,{signal:this._buildFetchSignal(1e4)});if(!n.ok)return null;i=await n.text()}const n=this._parseVTT(i);return n.length>0&&this._vttCache.set(e,n),n}catch{return null}}_buildFetchSignal(e){const t=[],i=this.player.lifecycleSignal;if(i&&t.push(i),"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&t.push(AbortSignal.timeout(e)),0===t.length)return;if(1===t.length)return t[0];const s=AbortSignal.any;return s?s(t):t[0]}loadTranscriptData(){var t,i,s,a;this.transcriptEntries=[],this.currentActiveEntry=null,this.transcriptContent&&(this.transcriptContent.innerHTML="");const n=this.player.textTracks;let r=null;if(this.currentTranscriptLanguage){const e=n.filter(e=>("captions"===e.kind||"subtitles"===e.kind)&&e.language===this.currentTranscriptLanguage&&!e._vidplyStale);r=e.find(e=>e.cues&&e.cues.length>0)||e[0]||null}if(!r){const e=n.filter(e=>("captions"===e.kind||"subtitles"===e.kind)&&!e._vidplyStale);r=e.find(e=>e.cues&&e.cues.length>0)||e[0]||null,r&&(this.currentTranscriptLanguage=r.language)}let o=null;this.currentTranscriptLanguage&&(o=n.find(e=>"descriptions"===e.kind&&e.language===this.currentTranscriptLanguage)||null),o||(o=n.find(e=>"descriptions"===e.kind)||null);const l=n.find(e=>"metadata"===e.kind);if(!r&&!o&&!l)return void this.showNoTranscriptMessage();[r,o,l].filter(e=>Boolean(e)).forEach(e=>{"disabled"===e.mode&&(e.mode="hidden")});const d=this.player.renderer,h=this.currentTranscriptLanguage||((null==r?void 0:r.language)??"");if((null==d?void 0:d.isStreaming)&&"function"==typeof d.getTextTrackURLs&&h){const i=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-loading`,textContent:x.t("transcript.loading")});return null==(t=this.transcriptContent)||t.appendChild(i),void this._loadVttTranscript(h).then(e=>{this.isVisible&&this._renderTranscriptCues(e&&e.length>0?e:null,r,o,l)})}const c=r;if(c&&(!c.cues||0===c.cues.length)){const t=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-loading`,textContent:x.t("transcript.loading")});if(null==(i=this.transcriptContent)||i.appendChild(t),null==(a=(s=this.player).findTrackElement)?void 0:a.call(s,c))c.addEventListener("load",()=>{this.loadTranscriptData()},{once:!0}),this.setManagedTimeout(()=>{this.loadTranscriptData()},1e3);else{let e=0;const t=()=>{e++,this.isVisible&&(c.cues&&c.cues.length>0?this.loadTranscriptData():e<40&&this.setManagedTimeout(t,500))};this.setManagedTimeout(t,300)}return}this._renderTranscriptCues(null,r,o,l)}_renderTranscriptCues(e,t,i,s){this.transcriptEntries=[],this.currentActiveEntry=null;const a=this.transcriptContent;a&&(a.innerHTML="");const n=[];e&&e.length>0?n.push(...e):t&&t.cues&&Array.from(t.cues).forEach(e=>{n.push({cue:e,type:"caption"})}),i&&i.cues&&Array.from(i.cues).forEach(e=>{n.push({cue:e,type:"description"})}),s&&s.cues&&(this.metadataCues=Array.from(s.cues),this.setupMetadataHandling()),n.sort((e,t)=>e.cue.startTime-t.cue.startTime),n.forEach((e,t)=>{const i=this.createTranscriptEntry(e.cue,t,e.type);this.transcriptEntries.push({element:i,cue:e.cue,type:e.type,startTime:e.cue.startTime,endTime:e.cue.endTime}),null==a||a.appendChild(i)}),this.applyTranscriptStyles(),this.updateTimestampVisibility(),this.transcriptContent&&this.currentTranscriptLanguage&&this.transcriptContent.setAttribute("lang",this.currentTranscriptLanguage),this.updateLanguageSelector(),this.updateActiveEntry()}setupMetadataHandlingOnLoad(){const e=()=>{const e=this.player.textTracks.find(e=>"metadata"===e.kind);e?("disabled"===e.mode&&(e.mode="hidden"),this.metadataCueChangeHandler&&e.removeEventListener("cuechange",this.metadataCueChangeHandler),this.metadataCueChangeHandler=()=>{const t=Array.from(e.activeCues||[]);t.length>0&&this.player.options.debug&&console.log("[VidPly Metadata] Active cues:",t.map(e=>({start:e.startTime,end:e.endTime,text:e.text}))),t.forEach(e=>{this.handleMetadataCue(e)})},e.addEventListener("cuechange",this.metadataCueChangeHandler),this.player.options.debug&&console.log("[VidPly Metadata] Track enabled,",e.cues?e.cues.length:0,"cues available")):this.player.options.debug&&console.warn("[VidPly Metadata] No metadata track found")};e(),this.player.on("loadedmetadata",e)}setupMetadataHandling(){this.metadataCues&&0!==this.metadataCues.length&&this.player.options.debug&&console.log("[VidPly Metadata]",this.metadataCues.length,"cues stored from transcript load")}handleMetadataCue(e){const t=(e.text||"").trim();this.player.options.debug&&console.log("[VidPly Metadata] Processing cue:",{time:e.startTime,text:t}),this.player.emit("metadata",{time:e.startTime,endTime:e.endTime,text:t,cue:e}),t.includes("PAUSE")&&(this.player.state.paused||(this.player.options.debug&&console.log("[VidPly Metadata] Pausing video at",e.startTime),this.player.pause()),this.player.emit("metadata:pause",{time:e.startTime,text:t}));const i=t.match(/FOCUS:([\w#-]+)/);if(i&&i[1]){const s=i[1],a=document.querySelector(s);a?(this.player.options.debug&&console.log("[VidPly Metadata] Focusing element:",s),this.setManagedTimeout(()=>{a.focus({preventScroll:!0})},10)):this.player.options.debug&&console.warn("[VidPly Metadata] Element not found:",s),this.player.emit("metadata:focus",{time:e.startTime,target:s,element:a,text:t})}const s=t.match(/#[\w-]+/g);s&&(this.player.options.debug&&console.log("[VidPly Metadata] Hashtags found:",s),this.player.emit("metadata:hashtags",{time:e.startTime,hashtags:s,text:t}))}createTranscriptEntry(t,i,s="caption"){const a=this.stripVTTFormatting(t.text||""),n=(x.t("transcript.seekTo")||"Seek to {time}").replace("{time}",_.formatTime(t.startTime)).replace("{text}",a),r=e.createElement("button",{className:`${this.player.options.classPrefix}-transcript-entry ${this.player.options.classPrefix}-transcript-${s}`,attributes:{type:"button","data-start":String(t.startTime),"data-end":String(t.endTime),"data-type":s,"aria-label":`${n} — ${a}`}}),o=e.createElement("span",{className:`${this.player.options.classPrefix}-transcript-time`,textContent:_.formatTime(t.startTime),attributes:{"aria-hidden":"true"}}),l=e.createElement("span",{className:`${this.player.options.classPrefix}-transcript-text`,textContent:a});return r.appendChild(o),r.appendChild(l),r.addEventListener("click",()=>{this.player.seek(t.startTime),this.player.state.paused&&this.player.play()}),r}stripVTTFormatting(e){return e.replace(/<[^>]+>/g,"").replace(/\n/g," ").trim()}showNoTranscriptMessage(){var t;const i=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-empty`,textContent:x.t("transcript.noTranscript")});null==(t=this.transcriptContent)||t.appendChild(i)}updateActiveEntry(){if(!this.isVisible||0===this.transcriptEntries.length)return;const e=this.player.state.currentTime,t=this.transcriptEntries.find(t=>e>=t.startTime&&e<t.endTime);t&&t!==this.currentActiveEntry?(this.currentActiveEntry&&this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),t.element.classList.add(`${this.player.options.classPrefix}-transcript-entry-active`),this.scrollToEntry(t.element),this.currentActiveEntry=t):!t&&this.currentActiveEntry&&(this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),this.currentActiveEntry=null)}scrollToEntry(e){if(!this.transcriptContent||!this.autoscrollEnabled)return;const t=this.transcriptContent.getBoundingClientRect(),i=e.getBoundingClientRect();(i.top<t.top||i.bottom>t.bottom)&&this.transcriptContent.scrollTo({top:e.offsetTop-this.transcriptContent.clientHeight/2+e.clientHeight/2,behavior:"smooth"})}saveAutoscrollPreference(){const e=this.storage.getTranscriptPreferences()||{};e.autoscroll=this.autoscrollEnabled,this.storage.saveTranscriptPreferences(e)}setupDragAndDrop(){if(!this.transcriptHeader||!this.transcriptWindow)return;if(window.innerWidth<768&&!this.player.state.fullscreen)return void(this.draggableResizable&&(this.draggableResizable.destroy(),this.draggableResizable=null));if(this.draggableResizable)return;this.draggableResizable=new fe(this.transcriptWindow,{dragHandle:this.transcriptHeader,resizeHandles:this.transcriptResizeHandles,constrainToViewport:!0,classPrefix:`${this.player.options.classPrefix}-transcript`,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:10,keyboardStepLarge:50,minWidth:300,minHeight:200,maxWidth:()=>Math.max(320,window.innerWidth-40),maxHeight:()=>Math.max(200,window.innerHeight-120),pointerResizeIndicatorText:x.t("transcript.resizeModeHint"),onPointerResizeToggle:e=>{this.transcriptResizeHandles.forEach(t=>{t.style.display=e?"block":"none"}),this.onPointerResizeModeChange(e)},onDragStart:e=>{const t=[`.${this.player.options.classPrefix}-transcript-close`,`.${this.player.options.classPrefix}-transcript-settings`,`.${this.player.options.classPrefix}-transcript-language-select`,`.${this.player.options.classPrefix}-transcript-language-label`,`.${this.player.options.classPrefix}-transcript-settings-menu`,`.${this.player.options.classPrefix}-transcript-style-dialog`];for(const i of t)if(e.target.closest(i))return!1;return!0}}),this.customKeyHandler=e=>{var t;const i=e.key.toLowerCase(),s=e.defaultPrevented;if(!this.settingsMenuVisible&&!this.styleDialogVisible){if("home"===i)return e.preventDefault(),e.stopPropagation(),void(this.draggableResizable&&(this.draggableResizable.pointerResizeMode&&this.draggableResizable.disablePointerResizeMode(),this.draggableResizable.manuallyPositioned=!1,this.positionTranscript(),this.updateResizeOptionState(),this.announceLive(x.t("transcript.positionReset"))));if("r"===i){if(s)return;return e.preventDefault(),e.stopPropagation(),void(this.toggleResizeMode()&&(null==(t=this.transcriptWindow)||t.focus({preventScroll:!0})))}return"escape"===i?this.draggableResizable&&this.draggableResizable.pointerResizeMode?(e.preventDefault(),e.stopPropagation(),void this.draggableResizable.disablePointerResizeMode()):this.draggableResizable&&this.draggableResizable.keyboardDragMode?(e.preventDefault(),e.stopPropagation(),this.draggableResizable.disableKeyboardDragMode(),void this.announceLive(x.t("transcript.dragModeDisabled"))):(e.preventDefault(),e.stopPropagation(),void this.hideTranscript({focusButton:!0})):void 0}};const e=this.customKeyHandler;this.transcriptWindow&&e&&this.transcriptWindow.addEventListener("keydown",e,{signal:this.player.lifecycleSignal})}toggleKeyboardDragMode(){var e,t,i;if(this.draggableResizable){const s=this.draggableResizable.keyboardDragMode;this.draggableResizable.toggleKeyboardDragMode();const a=this.draggableResizable.keyboardDragMode;!s&&a?(this.enableMoveMode(),null==(e=this._panel)||e.showBadge(x.t("transcript.dragModeBadge")),this.announceLive(x.t("transcript.dragModeEnabled"))):s&&!a&&(null==(t=this._panel)||t.hideBadge(),this.announceLive(x.t("transcript.dragModeDisabled"))),this.updateDragOptionState(),this.settingsMenuVisible&&this.hideSettingsMenu(),null==(i=this.transcriptWindow)||i.focus({preventScroll:!0})}}toggleSettingsMenu(){this.settingsMenuVisible?this.hideSettingsMenu():this.showSettingsMenu()}showSettingsMenu(){var e;null==(e=this._panel)||e.show()}positionSettingsMenu(){var e;null==(e=this._panel)||e.reposition()}hideSettingsMenu({focusButton:e=!0}={}){var t;null==(t=this._panel)||t.hide({focusButton:e})}enableMoveMode(){var e;null==(e=this.transcriptWindow)||e.classList.add(`${this.player.options.classPrefix}-transcript-move-mode`),setTimeout(()=>{var e;null==(e=this.transcriptWindow)||e.classList.remove(`${this.player.options.classPrefix}-transcript-move-mode`)},2e3)}toggleResizeMode({focus:e=!0}={}){return!!this.draggableResizable&&(this.draggableResizable.pointerResizeMode?(this.draggableResizable.disablePointerResizeMode({focus:e}),!1):(this.draggableResizable.enablePointerResizeMode({focus:e}),!0))}updateDragOptionState(){var e;null==(e=this._panel)||e.refreshDragState()}updateResizeOptionState(){var e;null==(e=this._panel)||e.refreshResizeState()}toggleShowTimestamps(){this.showTimestamps=!this.showTimestamps,this.updateShowTimestampsState(),this.updateTimestampVisibility(),this.saveTimestampsPreference()}updateShowTimestampsState(){if(!this.showTimestampsButton)return;const e=x.t(this.showTimestamps?"transcript.hideTimestamps":"transcript.showTimestamps"),t=x.t(this.showTimestamps?"transcript.hideTimestampsAria":"transcript.showTimestampsAria");this.showTimestampsButton.setAttribute("aria-checked",this.showTimestamps?"true":"false"),this.showTimestampsButton.setAttribute("aria-label",t),this.showTimestampsText&&(this.showTimestampsText.textContent=e)}updateTimestampVisibility(){this.transcriptContent&&this.transcriptContent.querySelectorAll(`.${this.player.options.classPrefix}-transcript-time`).forEach(e=>{e.style.display=this.showTimestamps?"":"none"})}saveTimestampsPreference(){const e=this.storage.getTranscriptPreferences()||{};e.showTimestamps=this.showTimestamps,this.storage.saveTranscriptPreferences(e)}showResizeModeIndicator(){var e;null==(e=this._panel)||e.showBadge(x.t("transcript.resizeModeBadge"))}hideResizeModeIndicator(){var e;null==(e=this._panel)||e.hideBadge()}onPointerResizeModeChange(e){var t,i;this.updateResizeOptionState(),e?(null==(t=this._panel)||t.showBadge(x.t("transcript.resizeModeBadge")),this.announceLive(x.t("transcript.resizeModeEnabled"))):(null==(i=this._panel)||i.hideBadge(),this.announceLive(x.t("transcript.resizeModeDisabled")))}showStyleDialog(){if(this.documentClickHandlerAdded||setTimeout(()=>{const e=this.handlers.documentClick;e&&document.addEventListener("click",e,{signal:this.player.lifecycleSignal}),this.documentClickHandlerAdded=!0},300),this.styleDialog)return this.styleDialog.style.display="block",this.styleDialogVisible=!0,this.handlers.styleDialogKeydown&&document.addEventListener("keydown",this.handlers.styleDialogKeydown,{signal:this.player.lifecycleSignal}),this.styleDialogJustOpened=!0,setTimeout(()=>{this.styleDialogJustOpened=!1},350),void setTimeout(()=>{const e=this.styleDialog;if(!e)return;const t=e.querySelector("select, input");t&&t.focus({preventScroll:!0})},0);const t=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-dialog`});this.styleDialog=t;const i=e.createElement("h4",{textContent:x.t("transcript.styleTitle"),className:`${this.player.options.classPrefix}-transcript-style-title`});t.appendChild(i);const s=this.createStyleSelectControl(x.t("captions.fontSize"),"fontSize",[{label:x.t("fontSizes.small"),value:"90%"},{label:x.t("fontSizes.normal"),value:"100%"},{label:x.t("fontSizes.large"),value:"110%"},{label:x.t("fontSizes.xlarge"),value:"120%"}]);t.appendChild(s);const a=this.createStyleSelectControl(x.t("captions.fontFamily"),"fontFamily",[{label:x.t("fontFamilies.sansSerif"),value:"sans-serif"},{label:x.t("fontFamilies.serif"),value:"serif"},{label:x.t("fontFamilies.monospace"),value:"monospace"}]);t.appendChild(a);const n=this.createStyleColorControl(x.t("captions.color"),"color");t.appendChild(n);const r=this.createStyleColorControl(x.t("captions.backgroundColor"),"backgroundColor");t.appendChild(r);const o=this.createStyleOpacityControl(x.t("captions.opacity"),"opacity");t.appendChild(o);const l=e.createElement("button",{className:`${this.player.options.classPrefix}-transcript-style-close`,textContent:x.t("settings.close"),attributes:{type:"button"}});l.addEventListener("click",()=>this.hideStyleDialog()),t.appendChild(l);const d=e=>{if(this.styleDialogVisible){if("Escape"===e.key)return e.preventDefault(),e.stopPropagation(),void this.hideStyleDialog();if("Tab"===e.key){const i=t.querySelectorAll("select, input, button"),s=i[0],a=i[i.length-1];if(!s||!a)return;e.shiftKey&&document.activeElement===s?(e.preventDefault(),a.focus({preventScroll:!0})):e.shiftKey||document.activeElement!==a||(e.preventDefault(),s.focus({preventScroll:!0}))}}};this.handlers.styleDialogKeydown=d,document.addEventListener("keydown",d,{signal:this.player.lifecycleSignal}),this.headerLeft?this.headerLeft.appendChild(t):this.transcriptHeader&&this.transcriptHeader.appendChild(t),this.applyTranscriptStyles(),this.styleDialogVisible=!0,t.style.display="block",this.styleDialogJustOpened=!0,setTimeout(()=>{this.styleDialogJustOpened=!1},350),setTimeout(()=>{const e=t.querySelector("select, input");e&&e.focus({preventScroll:!0})},0)}hideStyleDialog(){this.styleDialog&&(this.styleDialog.style.display="none",this.styleDialogVisible=!1,this.handlers.styleDialogKeydown&&document.removeEventListener("keydown",this.handlers.styleDialogKeydown),this.settingsButton&&this.settingsButton.focus({preventScroll:!0}))}createStyleSelectControl(t,i,s){const a=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),n=`${this.player.options.classPrefix}-transcript-${i}-${Date.now()}`,r=e.createElement("label",{textContent:t,attributes:{for:n}});a.appendChild(r);const o=e.createElement("select",{className:`${this.player.options.classPrefix}-transcript-style-select`,attributes:{id:n}});return s.forEach(t=>{const s=e.createElement("option",{textContent:t.label,attributes:{value:t.value}});this.transcriptStyle[i]===t.value&&(s.selected=!0),o.appendChild(s)}),o.addEventListener("change",e=>{this.transcriptStyle[i]=e.target.value,this.applyTranscriptStyles(),this.savePreferences()}),a.appendChild(o),a}createStyleColorControl(t,i){const s=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),a=`${this.player.options.classPrefix}-transcript-${i}-${Date.now()}`,n=e.createElement("label",{textContent:t,attributes:{for:a}});s.appendChild(n);const r=e.createElement("input",{attributes:{id:a,type:"color",value:this.transcriptStyle[i]},className:`${this.player.options.classPrefix}-transcript-style-color`});return r.addEventListener("input",e=>{this.transcriptStyle[i]=e.target.value,this.applyTranscriptStyles(),this.savePreferences()}),s.appendChild(r),s}createStyleOpacityControl(t,i){const s=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),a=`${this.player.options.classPrefix}-transcript-${i}-${Date.now()}`,n=e.createElement("label",{textContent:t,attributes:{for:a}});s.appendChild(n);const r=i,o=e.createElement("span",{textContent:Math.round(100*this.transcriptStyle[r])+"%",className:`${this.player.options.classPrefix}-transcript-style-value`}),l=e.createElement("input",{attributes:{id:a,type:"range",min:"0",max:"1",step:"0.1",value:String(this.transcriptStyle[r])},className:`${this.player.options.classPrefix}-transcript-style-range`});l.addEventListener("input",e=>{const t=parseFloat(e.target.value);this.transcriptStyle[r]=t,o.textContent=Math.round(100*t)+"%",this.applyTranscriptStyles(),this.savePreferences()});const d=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-range-container`});return d.appendChild(l),d.appendChild(o),s.appendChild(n),s.appendChild(d),s}savePreferences(){this.storage.saveTranscriptPreferences(this.transcriptStyle)}applyTranscriptStyles(){this.transcriptWindow&&(this.transcriptWindow.style.backgroundColor=this.transcriptStyle.backgroundColor,this.transcriptWindow.style.opacity=String(this.transcriptStyle.opacity),this.transcriptContent&&(this.transcriptContent.style.fontSize=this.transcriptStyle.fontSize,this.transcriptContent.style.fontFamily=this.transcriptStyle.fontFamily,this.transcriptContent.style.color=this.transcriptStyle.color),this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-text`).forEach(e=>{e.style.fontSize=this.transcriptStyle.fontSize,e.style.fontFamily=this.transcriptStyle.fontFamily,e.style.color=this.transcriptStyle.color}),this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-time`).forEach(e=>{e.style.fontFamily=this.transcriptStyle.fontFamily}))}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))}destroy(){this.hideResizeModeIndicator(),this._panel&&(this._panel.destroy(),this._panel=null),this.draggableResizable&&(this.draggableResizable.pointerResizeMode&&(this.draggableResizable.disablePointerResizeMode(),this.updateResizeOptionState()),this.draggableResizable.destroy(),this.draggableResizable=null),this.transcriptWindow&&this.customKeyHandler&&(this.transcriptWindow.removeEventListener("keydown",this.customKeyHandler),this.customKeyHandler=null),this.handlers.timeupdate&&this.player.off("timeupdate",this.handlers.timeupdate),this.handlers.seeked&&this.player.off("seeked",this.handlers.seeked),this.handlers.audiodescriptionenabled&&this.player.off("audiodescriptionenabled",this.handlers.audiodescriptionenabled),this.handlers.audiodescriptiondisabled&&this.player.off("audiodescriptiondisabled",this.handlers.audiodescriptiondisabled),this.handlers.textcuesupdate&&this.player.off("textcuesupdate",this.handlers.textcuesupdate),this.handlers.floatingchange&&this.player.off("floatingchange",this.handlers.floatingchange),this.settingsButton&&(this.handlers.settingsClick&&this.settingsButton.removeEventListener("click",this.handlers.settingsClick),this.handlers.settingsKeydown&&this.settingsButton.removeEventListener("keydown",this.handlers.settingsKeydown)),this.handlers.styleDialogKeydown&&document.removeEventListener("keydown",this.handlers.styleDialogKeydown),this.handlers.documentClick&&document.removeEventListener("click",this.handlers.documentClick),this.handlers.resize&&window.removeEventListener("resize",this.handlers.resize),this.timeouts.forEach(e=>clearTimeout(e)),this.timeouts.clear(),this.handlers={},this.transcriptWindow&&this.transcriptWindow.parentNode&&this.transcriptWindow.parentNode.removeChild(this.transcriptWindow),this.transcriptWindow=null,this.transcriptHeader=null,this.transcriptContent=null,this.transcriptEntries=[],this.styleDialog=null,this.transcriptResizeHandles=[],this.liveRegion=null,this._vttCache.clear()}announceLive(e){this.liveRegion&&(this.liveRegion.textContent=e||"")}}}});function qe(e,t={}){const i=Ne.get(e);if(i)return i;const{integrity:s,crossOrigin:a,referrerPolicy:n,isReady:r,readyTimeout:o=1e3}=t,l=new Promise((t,i)=>{const l=()=>{r?((e,t,i,s,a)=>{if(t())return void s();const n=Date.now(),r=window.setInterval(()=>{t()?(window.clearInterval(r),s()):Date.now()-n>=i&&(window.clearInterval(r),a(new Error(`Script loaded but did not become ready: ${e}`)))},50)})(e,r,o,t,i):t()},d=(e=>{const t=document.getElementsByTagName("script");for(let i=0;i<t.length;i++){const s=t[i];if(s&&s.src===e)return s}return null})(e);if(d)return r&&r()?void t():(d.addEventListener("load",l,{once:!0}),void d.addEventListener("error",()=>i(new Error(`Failed to load script: ${e}`)),{once:!0}));const h=document.createElement("script");h.src=e,s?(h.integrity=s,h.crossOrigin=a??"anonymous",h.referrerPolicy=n??"no-referrer"):null!=a&&(h.crossOrigin=a),h.onload=l,h.onerror=()=>i(new Error(`Failed to load script: ${e}`)),document.head.appendChild(h)}),d=l.catch(t=>{throw Ne.delete(e),t});return Ne.set(e,d),d}var Ue,je=s({"src/utils/ScriptLoader.ts"(){Ne=new Map}}),Ke={};a(Ke,{YouTubeRenderer:()=>Ue});var Qe,Ye=s({"src/renderers/YouTubeRenderer.ts"(){je(),Ue=class{constructor(e){n(this,"player"),n(this,"media"),n(this,"youtube"),n(this,"videoId"),n(this,"isReady"),n(this,"iframe"),n(this,"timeUpdateInterval"),this.player=e,this.media=e.element,this.youtube=null,this.videoId=null,this.isReady=!1,this.iframe=null}async init(){if(this.videoId=this.extractVideoId(this.player.currentSource||this.player.element.src),!this.videoId)throw new Error("Invalid YouTube URL");await this.loadYouTubeAPI(),this.createIframe(),await this.initializePlayer()}extractVideoId(e){const t=[/(?:youtube\.com\/watch\?v=|youtu\.be\/)([^&\s]+)/,/youtube\.com\/embed\/([^&\s]+)/];for(const i of t){const t=e.match(i);if(t&&t[1])return t[1]}return null}async loadYouTubeAPI(){return window.YT&&window.YT.Player?Promise.resolve():qe("https://www.youtube.com/iframe_api",{isReady:()=>!(!window.YT||!window.YT.Player),readyTimeout:8e3})}createIframe(){var e;this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`youtube-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.maxHeight="100%",null==(e=this.player.element.parentNode)||e.insertBefore(this.iframe,this.player.element)}async initializePlayer(){return new Promise((e,t)=>{window.YT&&this.iframe?this.youtube=new window.YT.Player(this.iframe.id,{videoId:this.videoId??void 0,width:"100%",height:"100%",playerVars:{controls:1,disablekb:0,fs:1,modestbranding:1,rel:0,showinfo:0,iv_load_policy:3,autoplay:this.player.options.autoplay?1:0,mute:this.player.options.muted?1:0,start:this.player.options.startTime||0},events:{onReady:t=>{this.isReady=!0,this.attachEvents(),this.player.container&&this.player.container.classList.add("vidply-external-controls"),e()},onStateChange:e=>this.handleStateChange(e),onError:e=>this.handleError(e)}}):t(new Error("YouTube IFrame API is not available"))})}attachEvents(){this.timeUpdateInterval=setInterval(()=>{const e=this.youtube;if(this.isReady&&e){const t=e.getCurrentTime(),i=e.getDuration();this.player.state.currentTime=t,this.player.state.duration=i,this.player.emit("timeupdate",t)}},250);const e=this.youtube;e&&e.getDuration&&(this.player.state.duration=e.getDuration(),this.player.emit("loadedmetadata"))}handleStateChange(e){var t;const i=null==(t=window.YT)?void 0:t.PlayerState;if(i)switch(e.data){case i.PLAYING:this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.state.buffering=!1,this.player.emit("play"),this.player.emit("playing"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player);break;case i.PAUSED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player);break;case i.ENDED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&this.youtube&&(this.youtube.seekTo(0),this.youtube.playVideo());break;case i.BUFFERING:this.player.state.buffering=!0,this.player.emit("waiting");break;case i.CUED:this.player.emit("loadedmetadata")}}handleError(e){const t=new Error({2:"Invalid video ID",5:"HTML5 player error",100:"Video not found",101:"Video not allowed to be played in embedded players",150:"Video not allowed to be played in embedded players"}[e.data]||"YouTube player error");this.player.handleError(t)}play(){if(this.isReady&&this.youtube){const e=window.scrollX,t=window.scrollY;this.youtube.playVideo(),window.scrollTo(e,t)}}pause(){this.isReady&&this.youtube&&this.youtube.pauseVideo()}seek(e){this.isReady&&this.youtube&&this.youtube.seekTo(e,!0)}setVolume(e){this.isReady&&this.youtube&&(this.youtube.setVolume(100*e),this.player.state.volume=e)}setMuted(e){this.isReady&&this.youtube&&(e?this.youtube.mute():this.youtube.unMute(),this.player.state.muted=e)}setPlaybackSpeed(e){this.isReady&&this.youtube&&(this.youtube.setPlaybackRate(e),this.player.state.playbackSpeed=e)}destroy(){this.timeUpdateInterval&&clearInterval(this.timeUpdateInterval),this.youtube&&this.youtube.destroy&&this.youtube.destroy(),this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display="")}}}}),Xe={};a(Xe,{VimeoRenderer:()=>Qe});var Ge,Je=s({"src/renderers/VimeoRenderer.ts"(){je(),Qe=class{constructor(e){n(this,"player"),n(this,"media"),n(this,"vimeo"),n(this,"videoId"),n(this,"isReady"),n(this,"iframe"),this.player=e,this.media=e.element,this.vimeo=null,this.videoId=null,this.isReady=!1,this.iframe=null}async init(){if(this.videoId=this.extractVideoId(this.player.currentSource||this.player.element.src),!this.videoId)throw new Error("Invalid Vimeo URL");await this.loadVimeoAPI(),this.createIframe(),await this.initializePlayer()}extractVideoId(e){const t=[/vimeo\.com\/(\d+)/,/vimeo\.com\/video\/(\d+)/,/player\.vimeo\.com\/video\/(\d+)/];for(const i of t){const t=e.match(i);if(t&&t[1])return t[1]}return null}async loadVimeoAPI(){return window.Vimeo&&window.Vimeo.Player?Promise.resolve():qe("https://player.vimeo.com/api/player.js",{isReady:()=>!(!window.Vimeo||!window.Vimeo.Player)})}createIframe(){var e;this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`vimeo-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.maxHeight="100%",null==(e=this.player.element.parentNode)||e.insertBefore(this.iframe,this.player.element)}async initializePlayer(){var e;const t={id:this.videoId,width:"100%",height:"100%",controls:!0,autoplay:this.player.options.autoplay,muted:this.player.options.muted,loop:this.player.options.loop,keyboard:!1};if(this.player.options.startTime>0&&(t.startTime=this.player.options.startTime),!window.Vimeo||!this.iframe)throw new Error("Vimeo Player API is not available");this.vimeo=new window.Vimeo.Player(this.iframe.id,t),await this.vimeo.ready(),this.isReady=!0;const i=null==(e=this.iframe)?void 0:e.querySelector("iframe");i&&(i.style.width="100%",i.style.height="100%",i.setAttribute("width","100%"),i.setAttribute("height","100%")),this.player.container&&this.player.container.classList.add("vidply-external-controls"),this.attachEvents();try{const e=await this.vimeo.getDuration();this.player.state.duration=e,this.player.emit("loadedmetadata")}catch(e){this.player.log("Error getting duration:",e,"warn")}}attachEvents(){const e=this.vimeo;e&&(e.on("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),e.on("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),e.on("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player)}),e.on("timeupdate",(...e)=>{const t=e[0];this.player.state.currentTime=t.seconds,this.player.state.duration=t.duration,this.player.emit("timeupdate",t.seconds),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,t.seconds)}),e.on("volumechange",(...e)=>{const t=e[0];this.player.state.volume=t.volume,this.player.emit("volumechange",t.volume)}),e.on("bufferstart",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),e.on("bufferend",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),e.on("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking")}),e.on("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")}),e.on("playbackratechange",(...e)=>{const t=e[0];this.player.state.playbackSpeed=t.playbackRate,this.player.emit("ratechange",t.playbackRate)}),e.on("error",(...e)=>{const t=e[0];this.player.handleError(new Error(`Vimeo error: ${(null==t?void 0:t.message)??"unknown"}`))}))}play(){if(this.isReady&&this.vimeo){const e=window.scrollX,t=window.scrollY;this.vimeo.play().catch(e=>{this.player.log("Play error:",e,"warn")}),window.scrollTo(e,t)}}pause(){this.isReady&&this.vimeo&&this.vimeo.pause().catch(e=>{this.player.log("Pause error:",e,"warn")})}seek(e){this.isReady&&this.vimeo&&this.vimeo.setCurrentTime(e).catch(e=>{this.player.log("Seek error:",e,"warn")})}setVolume(e){this.isReady&&this.vimeo&&(this.vimeo.setVolume(e).catch(e=>{this.player.log("Volume error:",e,"warn")}),this.player.state.volume=e)}setMuted(e){this.isReady&&this.vimeo&&(this.vimeo.setVolume(e?0:this.player.state.volume),this.player.state.muted=e)}setPlaybackSpeed(e){this.isReady&&this.vimeo&&(this.vimeo.setPlaybackRate(e).catch(e=>{this.player.log("Playback rate error:",e,"warn")}),this.player.state.playbackSpeed=e)}destroy(){this.vimeo&&this.vimeo.destroy&&this.vimeo.destroy(),this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display="")}}}}),Ze={};a(Ze,{HLSRenderer:()=>Ge});var et,tt=s({"src/renderers/HLSRenderer.ts"(){je(),Ge=class{constructor(e){n(this,"player"),n(this,"media"),n(this,"hls"),n(this,"_hlsSourceLoaded"),n(this,"_pendingSrc"),n(this,"_hlsSubtitleTracksCount"),n(this,"_cueUpdateTimer"),n(this,"_lastKnownCueCount"),n(this,"_nativeTrackListenersDestroyed"),n(this,"_didDeferredLoad"),n(this,"_manifestUrl"),n(this,"_loadingForSeekOnly"),n(this,"_cleanupNativeTextTrackListeners"),n(this,"_listenerController"),n(this,"_timers"),n(this,"_pendingReadyHandler"),this.player=e,this.media=e.element,this.hls=null,this._hlsSourceLoaded=!1,this._pendingSrc=null,this._hlsSubtitleTracksCount=void 0,this._cueUpdateTimer=null,this._lastKnownCueCount=0,this._manifestUrl=null,this._cleanupNativeTextTrackListeners=()=>{},this._listenerController=new AbortController,this._timers=new Set,this._pendingReadyHandler=null}get isStreaming(){return null!=this.hls}_setTimeout(e,t){const i=setTimeout(()=>{this._timers.delete(i),e()},t);this._timers.add(i)}_clearTimers(){for(const e of this._timers)clearTimeout(e);this._timers.clear()}async init(){this.canPlayNatively()?(this.player.log("Using native HLS support"),await this.initNative()):(this.player.log("Using hls.js for HLS support"),await this.initHlsJs())}canPlayNatively(){const e=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,t="MacIntel"===navigator.platform&&navigator.maxTouchPoints>1;return!(!e&&!t)&&""!==document.createElement("video").canPlayType("application/vnd.apple.mpegurl")}async initNative(){const{HTML5Renderer:e}=await Promise.resolve().then(()=>(me(),pe)),t=new e(this.player);await t.init(),this.play=()=>t.play(),this.pause=()=>t.pause(),this.seek=e=>t.seek(e),this.setVolume=e=>t.setVolume(e),this.setMuted=e=>t.setMuted(e),this.setPlaybackSpeed=e=>t.setPlaybackSpeed(e),this.ensureLoaded=()=>{var e;return null==(e=t.ensureLoaded)?void 0:e.call(t)},this.getQualities=()=>{var e;return(null==(e=t.getQualities)?void 0:e.call(t))??[]},this.switchQuality=e=>{var i;return null==(i=t.switchQuality)?void 0:i.call(t,e)},this.getCurrentQuality=()=>{var e;return(null==(e=t.getCurrentQuality)?void 0:e.call(t))??0},this._attachNativeTextTrackListeners(),this.destroy=()=>{this._cleanupNativeTextTrackListeners(),this._clearTimers(),this._pendingReadyHandler&&(this.player.off("ready",this._pendingReadyHandler),this._pendingReadyHandler=null),t.destroy()}}_attachNativeTextTrackListeners(){let e;const t=()=>{clearTimeout(e),e=setTimeout(()=>{var e;if(this._nativeTrackListenersDestroyed)return;const t=this.media.textTracks;let i=0;for(let s=0;s<t.length;s++){const a=null==(e=t[s])?void 0:e.kind;"subtitles"!==a&&"captions"!==a||i++}this._hlsSubtitleTracksCount=i,this.updateCaptionButtonsForHls()},150)};this.media.textTracks.addEventListener("addtrack",t),this.media.textTracks.addEventListener("removetrack",t),this.media.addEventListener("loadedmetadata",t),this._cleanupNativeTextTrackListeners=()=>{this._nativeTrackListenersDestroyed=!0,clearTimeout(e),this.media.textTracks.removeEventListener("addtrack",t),this.media.textTracks.removeEventListener("removetrack",t),this.media.removeEventListener("loadedmetadata",t)}}async initHlsJs(){var e;this.media.controls=!1,this.media.removeAttribute("controls"),window.Hls||await this.loadHlsJs();const t=window.Hls;if(!(null==t?void 0:t.isSupported()))throw new Error("HLS is not supported in this browser");const i=Array.from(this.media.querySelectorAll("source"));let s=null;i.length>0&&(s=(null==(e=i[0])?void 0:e.getAttribute("src"))??null,i.forEach(e=>e.remove()),this.player.log("Removed <source> elements for HTML5 validity (hls.js uses src attribute)")),this.hls=new t({debug:this.player.options.debug,autoStartLoad:!1,enableWorker:!0,lowLatencyMode:!1,backBufferLength:90,maxBufferLength:12,maxMaxBufferLength:60,maxBufferSize:3e7,maxBufferHole:.5,manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:4,manifestLoadingRetryDelay:1e3,manifestLoadingMaxRetryTimeout:64e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,levelLoadingMaxRetryTimeout:64e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingMaxRetryTimeout:64e3}),this.hls.attachMedia(this.media);let a=this.player.currentSource;if(!a&&s&&(a=s),a||(a=this.player.element.getAttribute("data-vidply-src")),!a){const e=this.player.element.getAttribute("src")||this.player.element.src;e&&!e.startsWith("blob:")&&(a=e)}if(this.player.log(`Loading HLS source: ${a}`,"log"),!a)throw new Error("No HLS source found");this._pendingSrc=a,this._manifestUrl=a,this.hls.loadSource(a),this._hlsSourceLoaded=!0,this.attachHlsEvents(),this.attachMediaEvents()}async loadHlsJs(){return qe(this.player.options.hlsScriptUrl||"https://cdn.jsdelivr.net/npm/hls.js@1.6.16/dist/hls.min.js",{integrity:this.player.options.hlsScriptIntegrity})}attachHlsEvents(){const e=this.hls,t=window.Hls;e&&t&&(e.on(t.Events.MANIFEST_PARSED,(...e)=>{const t=e[1];this.player.log("HLS manifest loaded, found "+t.levels.length+" quality levels"),this.player.emit("hlsmanifestparsed",t),this.player.container&&this.player.container.classList.remove("vidply-external-controls"),this._setTimeout(()=>{var e,t;void 0!==this._hlsSubtitleTracksCount&&0!==this._hlsSubtitleTracksCount||0===((null==(t=null==(e=this.hls)?void 0:e.subtitleTracks)?void 0:t.length)||0)&&(this._hlsSubtitleTracksCount=0,this.updateCaptionButtonsForHls())},500)}),e.on(t.Events.LEVEL_SWITCHED,(...e)=>{const t=e[1];this.player.log("HLS level switched to "+t.level),this.player.emit("hlslevelswitched",t)}),e.on(t.Events.SUBTITLE_TRACKS_UPDATED,(...e)=>{const t=e[1];this.player.log("HLS subtitle tracks updated, found "+t.subtitleTracks.length+" tracks"),this.player.emit("hlssubtitletracksupdated",t),this._hlsSubtitleTracksCount=t.subtitleTracks.length,this.updateCaptionButtonsForHls(),t.subtitleTracks.length>0&&this._startCueUpdatePolling()}),e.on(t.Events.SUBTITLE_TRACK_SWITCH,(...e)=>{const t=e[1];this.player.log("HLS subtitle track switched to "+t.id),this.player.emit("hlssubtitletrackswitch",t),this._lastKnownCueCount=0,this._startCueUpdatePolling()}),e.on(t.Events.ERROR,(...e)=>{this.handleHlsError(e[1])}),e.on(t.Events.FRAG_BUFFERED,()=>{if(this.player.state.buffering=!1,this.media.paused){if(this._loadingForSeekOnly&&this._isTimeBuffered(this.media.currentTime)){this._loadingForSeekOnly=!1;try{e.stopLoad()}catch{}}}else this._loadingForSeekOnly=!1}),e.on(t.Events.SUBTITLE_FRAG_PROCESSED,(...e)=>{const t=e[1];if(!t||!t.success)return;const i=this._getTotalCueCount();i>this._lastKnownCueCount&&(this._lastKnownCueCount=i,this.player.emit("textcuesupdate"))}),e.on(t.Events.CUES_PARSED,()=>{this.player.emit("textcuesupdate")}))}_getTotalCueCount(){const e=this.media.textTracks;let t=0;if(!e)return t;for(let i=0;i<e.length;i++){const s=e[i];s&&("subtitles"===s.kind||"captions"===s.kind)&&s.cues&&(t+=s.cues.length)}return t}_isTimeBuffered(e){const t=this.media.buffered;if(!t||0===t.length)return!1;for(let i=0;i<t.length;i++)if(e>=t.start(i)-.25&&e<=t.end(i)+.25)return!0;return!1}_startCueUpdatePolling(){this._stopCueUpdatePolling();let e=0,t=0;this._cueUpdateTimer=setInterval(()=>{const i=this._getTotalCueCount();i>e?(e=i,t=0,this.player.emit("textcuesupdate")):(t++,t>=8&&(this._stopCueUpdatePolling(),i>0&&this.player.emit("textcuesupdate")))},500)}_stopCueUpdatePolling(){this._cueUpdateTimer&&(clearInterval(this._cueUpdateTimer),this._cueUpdateTimer=null)}updateCaptionButtonsForHls(e=0){const t=this._hlsSubtitleTracksCount||0,i=()=>{var i,s;if(this.player.invalidateTrackCache(),t>0){if(this.player.captionManager&&0===this.player.captionManager.refreshTracks()&&e<5){const t=200*(e+1);return this.player.log(`HLS caption tracks not yet on video element, retrying in ${t}ms (attempt ${e+1})`,"info"),void this._setTimeout(()=>{this.updateCaptionButtonsForHls(e+1)},t)}(null==(i=this.player.transcriptManager)?void 0:i.isVisible)&&(this.player.transcriptManager.loadTranscriptData(),this.player.transcriptManager.updateLanguageSelector()),this.player.controlBar&&(this.player.controlBar.ensureCaptionsButton(),this.player.controlBar.ensureCaptionStyleButton(),this.player.controlBar.ensureTranscriptButton())}else this.player.captionManager&&this.player.captionManager.refreshTracks(),(null==(s=this.player.transcriptManager)?void 0:s.isVisible)&&this.player.transcriptManager.hideTranscript(),this.player.controlBar&&this.player.controlBar.removeHlsCaptionButtons(!0)};if(this.player.controlBar)return void i();const s=()=>{this.player.off("ready",s),this._pendingReadyHandler=null,i()};this._pendingReadyHandler=s,this.player.on("ready",s)}attachMediaEvents(){const{signal:e}=this._listenerController;this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")},{signal:e}),this.media.addEventListener("durationchange",()=>{const e=this.media.duration;e&&isFinite(e)&&e>0&&(this.player.state.duration=e,this.player.emit("durationchange",e))},{signal:e}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)},{signal:e}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)},{signal:e}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())},{signal:e}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)},{signal:e}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume)},{signal:e}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")},{signal:e}),this.media.addEventListener("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking"),this._isTimeBuffered(this.media.currentTime)||(this.player.state.buffering=!0,this.player.emit("waiting"))},{signal:e}),this.media.addEventListener("seeked",()=>{if(this.player.state.seeking=!1,this.player.emit("seeked"),this.media.paused&&this.hls)try{this.hls.stopLoad()}catch{}},{signal:e}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")},{signal:e}),this.media.addEventListener("error",()=>{this.player.handleError(this.media.error)},{signal:e})}handleHlsError(e){var t,i,s;if(this.player.log(`HLS Error - Type: ${e.type}, Details: ${e.details}, Fatal: ${e.fatal}`,"warn"),e.response&&this.player.log(`Response code: ${e.response.code}, URL: ${e.response.url}`,"warn"),e.fatal){const a=null==(t=window.Hls)?void 0:t.ErrorTypes;switch(e.type){case null==a?void 0:a.NETWORK_ERROR:this.player.log("Fatal network error, trying to recover...","error"),this.player.log(`Network error details: ${e.details}`,"error"),this._setTimeout(()=>{var e;null==(e=this.hls)||e.startLoad()},1e3);break;case null==a?void 0:a.MEDIA_ERROR:this.player.log("Fatal media error, trying to recover...","error"),null==(i=this.hls)||i.recoverMediaError();break;default:this.player.log("Fatal error, cannot recover","error"),this.player.handleError(new Error(`HLS Error: ${e.type} - ${e.details}`)),null==(s=this.hls)||s.destroy()}}else this.player.log("Non-fatal HLS error: "+e.details,"warn")}ensureLoaded(){if(this.hls&&!this._didDeferredLoad){try{this.hls.startLoad(-1)}catch{}this._didDeferredLoad=!0}}play(){const e=window.scrollX,t=window.scrollY;if(this.hls){this._loadingForSeekOnly=!1;try{this.hls.startLoad(-1)}catch{}this._didDeferredLoad=!0}const i=this.media.play();window.scrollTo(e,t),void 0!==i&&i.catch(e=>{this.player.log("Play failed:",e,"warn")})}pause(){if(this.media.pause(),this.hls)try{this.hls.stopLoad()}catch{}}seek(e){if(this.media.currentTime=e,this.hls){this.media.paused&&(this._loadingForSeekOnly=!0);try{this.hls.startLoad(-1)}catch{}}}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}switchQuality(e){this.hls&&(this.hls.currentLevel=e)}getQualities(){if(this.hls&&this.hls.levels){const e=new Map;return this.hls.levels.forEach((t,i)=>{const s=Number(t.height)||0,a=Number(t.bitrate)||0,n=s>0?s:`br_${a}`,r=e.get(n);(!r||a>(r.bitrate||0))&&e.set(n,{index:i,height:t.height,width:t.width,bitrate:a,level:t})}),Array.from(e.values()).map(e=>{const t=Number(e.height)||0,i=e.bitrate>0?Math.round(e.bitrate/1e3):0;return{index:e.index,height:e.height,width:e.width,bitrate:e.bitrate,name:t>0?`${t}p`:i>0?`${i} kb`:"Auto"}})}return[]}getCurrentQuality(){return this.hls?this.hls.currentLevel:-1}activateTextTrackForLanguage(e){if(!this.hls||!e)return!1;const t=this.hls.subtitleTracks;if(!t||0===t.length)return!1;const i=t.findIndex(t=>{const i=t.lang||t.language||"";return i===e||i.startsWith(e)||e.startsWith(i)});return!(i<0||(this.player.log(`Activating HLS subtitle track index ${i} for language "${e}"`),this.hls.subtitleTrack=i,this._lastKnownCueCount=0,this._startCueUpdatePolling(),0))}getTextTrackURLs(){if(!this.hls||!this._manifestUrl)return[];try{const e=this.hls.subtitleTracks;if(!e||0===e.length)return[];const t=[];for(const i of e){const e=i.lang||i.language||"",s=i.url;e&&s&&t.push({lang:e,url:s})}return t}catch{return[]}}supportsAutoQuality(){return!0}isAutoQuality(){var e;return-1===(null==(e=this.hls)?void 0:e.currentLevel)}destroy(){this._stopCueUpdatePolling(),this._clearTimers(),this._listenerController.abort(),this._pendingReadyHandler&&(this.player.off("ready",this._pendingReadyHandler),this._pendingReadyHandler=null),this._lastKnownCueCount=0,this._manifestUrl=null,this.hls&&(this.hls.destroy(),this.hls=null)}}}}),it={};a(it,{DASHRenderer:()=>et});var st,at,nt=s({"src/renderers/DASHRenderer.ts"(){je(),et=class{constructor(e){n(this,"player"),n(this,"media"),n(this,"dash"),n(this,"isStreaming",!0),n(this,"_dashSourceLoaded"),n(this,"_pendingSrc"),n(this,"_dashSubtitleTracksCount"),n(this,"_dashTextTracks"),n(this,"_cueUpdateTimer"),n(this,"_captionEnabledHandler"),n(this,"_captionDisabledHandler"),n(this,"_lastKnownCueCount"),n(this,"_dashTextIsTtml"),n(this,"_pendingTimeouts"),n(this,"_ttmlDiv"),n(this,"_manifestUrl"),n(this,"_listenerController"),n(this,"_pendingReadyHandler"),this.player=e,this.media=e.element,this.dash=null,this._dashSourceLoaded=!1,this._pendingSrc=null,this._dashSubtitleTracksCount=void 0,this._dashTextTracks=[],this._cueUpdateTimer=null,this._captionEnabledHandler=null,this._captionDisabledHandler=null,this._lastKnownCueCount=0,this._dashTextIsTtml=!1,this._pendingTimeouts=[],this._ttmlDiv=null,this._manifestUrl=null,this._listenerController=new AbortController,this._pendingReadyHandler=null}async init(){this.player.log("Using dash.js for DASH support"),await this.initDashJs()}async initDashJs(){var e;this.media.controls=!1,this.media.removeAttribute("controls"),window.dashjs||await this.loadDashJs();const t=Array.from(this.media.querySelectorAll("source"));let i=null;t.length>0&&(i=(null==(e=t[0])?void 0:e.getAttribute("src"))??null,t.forEach(e=>e.remove()),this.player.log("Removed <source> elements for HTML5 validity (dash.js uses MSE)"));const s=window.dashjs;if(!s)throw new Error("dash.js not available");this.dash=s.MediaPlayer().create(),this.dash.updateSettings({debug:{logLevel:this.player.options.debug?4:0},streaming:{selectionModeForInitialTrack:"firstTrack",buffer:{bufferTimeAtTopQuality:30,bufferTimeAtTopQualityLongForm:60,bufferTimeDefault:12,bufferToKeep:20,bufferPruningInterval:10},retryAttempts:{MPD:4,MediaSegment:6,InitializationSegment:4,BitstreamSwitchingSegment:4},retryIntervals:{MPD:1e3,MediaSegment:1e3,InitializationSegment:1e3,BitstreamSwitchingSegment:1e3},abr:{autoSwitchBitrate:{video:!0,audio:!0}},text:{defaultEnabled:!0}}}),this._ttmlDiv=document.createElement("div"),this._ttmlDiv.className="vidply-dash-ttml",this._ttmlDiv.style.visibility="hidden";const a=this.player.videoWrapper||this.media.parentElement;a&&a.appendChild(this._ttmlDiv),this.dash.initialize(this.media,null,!1),this.dash.attachTTMLRenderingDiv(this._ttmlDiv);let n=this.player.currentSource;if(!n&&i&&(n=i),n||(n=this.player.element.getAttribute("data-vidply-src")),!n){const e=this.player.element.getAttribute("src")||this.player.element.src;e&&!e.startsWith("blob:")&&(n=e)}if(this.player.log(`Loading DASH source: ${n}`,"log"),!n)throw new Error("No DASH source found");this._pendingSrc=n,this._manifestUrl=n,this.dash.attachSource(n),this._dashSourceLoaded=!0,this.player.showPosterOverlay(),this.attachDashEvents(),this.attachMediaEvents(),this._setupCaptionSync()}async loadDashJs(){return qe(this.player.options.dashScriptUrl||"https://cdn.jsdelivr.net/npm/dashjs@5.2.0/dist/modern/umd/dash.all.min.js",{integrity:this.player.options.dashScriptIntegrity})}_setTimeout(e,t){const i=setTimeout(()=>{this._pendingTimeouts=this._pendingTimeouts.filter(e=>e!==i),e()},t);return this._pendingTimeouts.push(i),i}attachDashEvents(){const e=window.dashjs,t=this.dash;if(!e||!t)return;const i=e.MediaPlayer.events;t.on(i.MANIFEST_LOADED,(...e)=>{const t=e[0],i=(null==t?void 0:t.data)??t;this.player.log("DASH manifest loaded"),this.player.emit("dashmanifestloaded",i),this.player.container&&this.player.container.classList.remove("vidply-external-controls"),this._setTimeout(()=>{this._checkSubtitleTracks()},500)}),t.on(i.QUALITY_CHANGE_RENDERED,(...e)=>{const t=e[0];"video"===t.mediaType&&(this.player.log("DASH quality changed to index "+t.newQuality),this.player.emit("dashqualitychanged",t))}),t.on(i.TEXT_TRACKS_ADDED,(...e)=>{const i=e[0],s=(null==i?void 0:i.tracks)??[];if(this._dashTextTracks=s,this._dashTextIsTtml=s.some(e=>e.isTTML||/stpp|ttml/i.test(e.codec||"")||/ttml/i.test(e.mimeType||"")),this.player.log(`DASH text tracks added: ${s.length} tracks, format: ${this._dashTextIsTtml?"TTML":"WebVTT"}`),this._dashSubtitleTracksCount=s.length,this.player.emit("dashsubtitletracksupdated",{tracks:s}),this.updateCaptionButtonsForDash(),s.length>0){try{t.setTextTrack(0)}catch{}this._dashTextIsTtml||this._startCueUpdatePolling()}}),t.on(i.STREAM_INITIALIZED,()=>{this.player.log("DASH stream initialized"),this.player.emit("dashstreaminitialized"),this._setTimeout(()=>{const e=this.getQualities();e.length>0&&this.player.emit("dashmanifestparsed",{qualities:e})},300)}),t.on(i.ERROR,(...e)=>{this.handleDashError(e[0])}),t.on(i.FRAGMENT_LOADING_COMPLETED,(...e)=>{var t;const i=e[0];this.player.state.buffering=!1,"text"!==(null==(t=null==i?void 0:i.request)?void 0:t.mediaType)||this._dashTextIsTtml||this._setTimeout(()=>{const e=this._getTotalCueCount();e>this._lastKnownCueCount&&(this._lastKnownCueCount=e,this.player.emit("textcuesupdate"))},100)})}_getTotalCueCount(){const e=this.media.textTracks;let t=0;if(!e)return t;for(let i=0;i<e.length;i++){const s=e[i];!s||"subtitles"!==s.kind&&"captions"!==s.kind||s._vidplyStale||!s.cues||(t+=s.cues.length)}return t}_isTimeBuffered(e){const t=this.media.buffered;if(!t||0===t.length)return!1;for(let i=0;i<t.length;i++)if(e>=t.start(i)-.25&&e<=t.end(i)+.25)return!0;return!1}_setupCaptionSync(){this._captionEnabledHandler=e=>{this._dashTextIsTtml&&(e.track&&(e.track.mode="showing"),this._ttmlDiv&&(this._ttmlDiv.style.visibility="visible")),this._syncDashTextTrack(e)},this._captionDisabledHandler=()=>{if(this._dashTextIsTtml&&this._ttmlDiv&&(this._ttmlDiv.style.visibility="hidden"),this.dash)try{this.dash.setTextTrack(-1)}catch{}},this.player.on("captionsenabled",this._captionEnabledHandler),this.player.on("captionsdisabled",this._captionDisabledHandler)}_syncDashTextTrack(e){if(!this.dash||!this._dashTextTracks.length)return;const t=e.language;if(!t)return;const i=this._dashTextTracks.findIndex(e=>{const i=e.lang||e.language||e.srclang||"";return!!i&&(i===t||i.startsWith(t)||t.startsWith(i))});if(i>=0){this.player.log(`Syncing DASH text track to index ${i} (${t})`);try{this.dash.setTextTrack(i)}catch{}this._dashTextIsTtml||(this._lastKnownCueCount=0,this._startCueUpdatePolling())}}_startCueUpdatePolling(){this._stopCueUpdatePolling();let e=0,t=0;this._cueUpdateTimer=setInterval(()=>{const i=this._getTotalCueCount();i>e?(e=i,t=0,this.player.emit("textcuesupdate")):(t++,t>=8&&(this._stopCueUpdatePolling(),i>0&&this.player.emit("textcuesupdate")))},500)}_stopCueUpdatePolling(){this._cueUpdateTimer&&(clearInterval(this._cueUpdateTimer),this._cueUpdateTimer=null)}_checkSubtitleTracks(){if(void 0!==this._dashSubtitleTracksCount&&this._dashSubtitleTracksCount>0)return;const e=this.media.textTracks;let t=0;for(let i=0;i<e.length;i++){const s=e[i];!s||"subtitles"!==s.kind&&"captions"!==s.kind||s._vidplyStale||t++}this._dashSubtitleTracksCount=t,this.updateCaptionButtonsForDash()}updateCaptionButtonsForDash(e=0){const t=this._dashSubtitleTracksCount||0,i=()=>{var i,s;if(this.player.invalidateTrackCache(),t>0){if(this.player.captionManager&&0===this.player.captionManager.refreshTracks()&&e<5){const t=200*(e+1);return this.player.log(`DASH caption tracks not yet on video element, retrying in ${t}ms (attempt ${e+1})`,"info"),void this._setTimeout(()=>{this.updateCaptionButtonsForDash(e+1)},t)}!this._dashTextIsTtml&&(null==(i=this.player.transcriptManager)?void 0:i.isVisible)&&(this.player.transcriptManager.loadTranscriptData(),this.player.transcriptManager.updateLanguageSelector()),this.player.controlBar&&(this.player.controlBar.ensureCaptionsButton(),this._dashTextIsTtml||(this.player.controlBar.ensureCaptionStyleButton(),this.player.controlBar.ensureTranscriptButton()))}else this.player.captionManager&&this.player.captionManager.refreshTracks(),(null==(s=this.player.transcriptManager)?void 0:s.isVisible)&&this.player.transcriptManager.hideTranscript(),this.player.controlBar&&this.player.controlBar.removeHlsCaptionButtons(!0)};if(this.player.controlBar)return void i();const s=()=>{this.player.off("ready",s),this._pendingReadyHandler=null,i()};this._pendingReadyHandler=s,this.player.on("ready",s)}attachMediaEvents(){const{signal:e}=this._listenerController;this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")},{signal:e}),this.media.addEventListener("durationchange",()=>{const e=this.media.duration;e&&isFinite(e)&&e>0&&(this.player.state.duration=e,this.player.emit("durationchange",e))},{signal:e}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)},{signal:e}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)},{signal:e}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())},{signal:e}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)},{signal:e}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume)},{signal:e}),this.media.addEventListener("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking"),this._isTimeBuffered(this.media.currentTime)||(this.player.state.buffering=!0,this.player.emit("waiting"))},{signal:e}),this.media.addEventListener("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")},{signal:e}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")},{signal:e}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")},{signal:e}),this.media.addEventListener("error",()=>{this.player.handleError(this.media.error)},{signal:e})}handleDashError(e){const t=(null==e?void 0:e.error)??e;if(!t)return;const i=t.code??"",s=t.message||"";this.player.log(`DASH Error - Code: ${i}, Message: ${s}`,"warn"),"number"==typeof i&&i>=100?(this.player.log("Fatal DASH error","error"),this.player.handleError(new Error(`DASH Error: ${i} - ${s}`))):this.player.log("Non-fatal DASH error: "+(s||String(t)),"warn")}ensureLoaded(){if(!this.player.options.deferLoad)return;if(!this.dash)return;if(this._dashSourceLoaded)return;const e=this._pendingSrc||this.player._pendingSource||this.player.currentSource;if(e)try{this.dash.attachSource(e),this._dashSourceLoaded=!0}catch{}}play(){const e=window.scrollX,t=window.scrollY;if(this.player.options.deferLoad&&this.dash&&!this._dashSourceLoaded){const e=this._pendingSrc||this.player.currentSource;if(e)try{this.dash.attachSource(e),this._dashSourceLoaded=!0}catch{}}const i=this.media.play();window.scrollTo(e,t),void 0!==i&&i.catch(e=>{this.player.log("Play failed:",e,"warn")})}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}switchQuality(e){this.dash&&(-1===e?"function"==typeof this.dash.setAutoSwitchQualityFor?this.dash.setAutoSwitchQualityFor("video",!0):this.dash.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:!0}}}}):("function"==typeof this.dash.setAutoSwitchQualityFor?this.dash.setAutoSwitchQualityFor("video",!1):this.dash.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:!1}}}}),"function"==typeof this.dash.setRepresentationForTypeByIndex?this.dash.setRepresentationForTypeByIndex("video",e):"function"==typeof this.dash.setQualityFor&&this.dash.setQualityFor("video",e,!0)))}getQualities(){if(!this.dash)return[];try{let e=null;if("function"==typeof this.dash.getRepresentationsByType&&(e=this.dash.getRepresentationsByType("video")),e&&e.length>0){const t={};return e.forEach(e=>{const i=Number(e.height)||0;t[i]=(t[i]||0)+1}),e.map((e,i)=>{const s=Number(e.height)||0,a=Number(e.bandwidth||e.bitrate)||0,n=a>0?Math.round(a/1e3):0;let r;return r=s>0&&(t[s]??0)>1&&n>0?`${s}p (${n} kbps)`:s>0?`${s}p`:n>0?`${n} kbps`:"Auto",{index:i,id:e.id,height:e.height,width:e.width,bitrate:a,name:r}})}const t=this.dash.getBitrateInfoListFor("video");if(!t||0===t.length)return[];const i={};return t.forEach(e=>{const t=Number(e.height)||0;i[t]=(i[t]||0)+1}),t.map((e,t)=>{const s=Number(e.height)||0,a=Number(e.bitrate)||0,n=a>0?Math.round(a/1e3):0;let r;return r=s>0&&(i[s]??0)>1&&n>0?`${s}p (${n} kbps)`:s>0?`${s}p`:n>0?`${n} kbps`:"Auto",{index:t,height:e.height,width:e.width,bitrate:e.bitrate,name:r}})}catch{return[]}}getCurrentQuality(){var e,t;if(!this.dash)return-1;try{if("function"==typeof this.dash.getRepresentationsByType){const i=this.dash.getRepresentationsByType("video"),s=null==(t=(e=this.dash).getCurrentRepresentationForType)?void 0:t.call(e,"video");if(s&&i){const e=i.findIndex(e=>e.id===s.id);if(e>=0)return e}}return this.dash.getQualityFor("video")}catch{return-1}}handlesOwnCaptions(){return this._dashTextIsTtml}activateTextTrackForLanguage(e){if(!this.dash||!this._dashTextTracks.length||!e)return!1;let t=this._dashTextTracks.findIndex(t=>{const i=t.lang||t.language||t.srclang||"";return!!i&&(i===e||i.startsWith(e)||e.startsWith(i))});if(t<0&&(t=this._dashTextTracks.findIndex(t=>(t.label||t.labels||"").toString().toLowerCase().includes(e.toLowerCase()))),t<0)return!1;this.player.log(`Activating DASH text track index ${t} for transcript language "${e}"`);try{this.dash.setTextTrack(t)}catch{}if(this.media.paused){const e=this.media.currentTime,t=this.media.muted;this.media.muted=!0;const i=this.media.play(),s=()=>{this.media&&!this.media.paused&&(this.media.pause(),this.media.muted=t,Math.abs(this.media.currentTime-e)>.5&&(this.media.currentTime=e))};i&&"function"==typeof i.then?i.then(()=>{this._setTimeout(s,250)}).catch(()=>{this.media.muted=t}):this._setTimeout(s,250)}return this._dashTextIsTtml||(this._lastKnownCueCount=0,this._startCueUpdatePolling()),!0}getTextTrackURLs(){var e,t;if(!this.dash||!this._manifestUrl)return[];try{const i=null==(t=(e=this.dash).getManifest)?void 0:t.call(e);if(!i)return[];const s=this._manifestUrl.substring(0,this._manifestUrl.lastIndexOf("/")+1),a=[],n=i.Period||i.period||i.periods||i,r=Array.isArray(n)?n:[n];for(const e of r){const t=e.AdaptationSet||e.adaptationSet||e.AdaptationSet_asArray||[],i=Array.isArray(t)?t:[t];for(const e of i){const t=String(e.contentType||e.ContentType||""),i=String(e.mimeType||e.MimeType||"");if("text"!==t&&!/text\/vtt|application\/ttml/i.test(i))continue;const n=String(e.lang||e.language||""),r=e.Representation||e.representation||e.Representation_asArray||[],o=Array.isArray(r)?r:[r];for(const e of o){const t=e.BaseURL||e.baseURL||e.BaseURL_asArray;let i;if(Array.isArray(t)){const e=t[0];i="string"==typeof e?e:null==e?void 0:e.__text}else i="string"==typeof t?t:null==t?void 0:t.__text;if(!i)continue;const r=i.startsWith("http")?i:new URL(i,s).href;a.push({lang:n,url:r});break}}}return a}catch{return[]}}supportsAutoQuality(){return!0}isAutoQuality(){var e,t,i,s,a;if(!this.dash)return!0;try{if("function"==typeof this.dash.getAutoSwitchQualityFor)return this.dash.getAutoSwitchQualityFor("video");const n=null==(t=(e=this.dash).getSettings)?void 0:t.call(e);return!1!==(null==(a=null==(s=null==(i=null==n?void 0:n.streaming)?void 0:i.abr)?void 0:s.autoSwitchBitrate)?void 0:a.video)}catch{return!0}}destroy(){this._pendingTimeouts.forEach(e=>clearTimeout(e)),this._pendingTimeouts=[],this._stopCueUpdatePolling(),this._lastKnownCueCount=0,this._listenerController.abort(),this._pendingReadyHandler&&(this.player.off("ready",this._pendingReadyHandler),this._pendingReadyHandler=null),this._captionEnabledHandler&&(this.player.off("captionsenabled",this._captionEnabledHandler),this._captionEnabledHandler=null),this._captionDisabledHandler&&(this.player.off("captionsdisabled",this._captionDisabledHandler),this._captionDisabledHandler=null),this._ttmlDiv&&this._ttmlDiv.parentNode&&(this._ttmlDiv.parentNode.removeChild(this._ttmlDiv),this._ttmlDiv=null);const e=this.media.textTracks;for(let t=0;t<e.length;t++){const i=e[t];!i||"subtitles"!==i.kind&&"captions"!==i.kind||(i._vidplyStale=!0,i.mode="disabled")}if(this.dash){try{this.dash.updateSettings({debug:{logLevel:0}}),this.dash.reset()}catch{}try{this.dash.destroy()}catch{}this.dash=null}this._dashTextTracks=[],this._dashTextIsTtml=!1,this._manifestUrl=null}}}}),rt={};a(rt,{SoundCloudRenderer:()=>st,default:()=>at});var ot=s({"src/renderers/SoundCloudRenderer.ts"(){je(),at=st=class{constructor(e){n(this,"player"),n(this,"media"),n(this,"widget"),n(this,"trackUrl"),n(this,"isReady"),n(this,"iframe"),n(this,"iframeId"),n(this,"_previousVolume"),n(this,"_initTimeoutId"),n(this,"_initController"),this.player=e,this.media=e.element,this.widget=null,this.trackUrl=null,this.isReady=!1,this.iframe=null,this.iframeId=null,this._previousVolume=100,this._initTimeoutId=null,this._initController=null}async init(){var e;if(this.trackUrl=this.player.currentSource||this.player.element.src||(null==(e=this.player.element.querySelector("source"))?void 0:e.src)||null,!this.trackUrl||!this.isValidSoundCloudUrl(this.trackUrl))throw new Error("Invalid SoundCloud URL");await this.loadSoundCloudAPI(),this.createIframe(),await this.initializeWidget()}isValidSoundCloudUrl(e){if("string"!=typeof e||!e)return!1;let t;try{t=new URL(e)}catch{return!1}return"https:"===t.protocol&&new Set(["soundcloud.com","www.soundcloud.com","m.soundcloud.com","api.soundcloud.com","api-v2.soundcloud.com"]).has(t.hostname.toLowerCase())}isPlaylist(){return this.trackUrl&&this.trackUrl.includes("/sets/")}getEmbedUrl(){const e=this.trackUrl;if(!e)throw new Error("SoundCloudRenderer.getEmbedUrl(): trackUrl is not set");return`https://w.soundcloud.com/player/?${new URLSearchParams({url:e,auto_play:this.player.options.autoplay?"true":"false",hide_related:"true",show_comments:"false",show_user:"true",show_reposts:"false",show_teaser:"false",visual:"false",color:"%23007bff"}).toString()}`}async loadSoundCloudAPI(){return void 0!==window.SC?Promise.resolve():qe("https://w.soundcloud.com/player/api.js",{isReady:()=>void 0!==window.SC})}createIframe(){var e;this.player.element.style.display="none",this.player.element.removeAttribute("poster"),this.player.videoWrapper&&(this.player.videoWrapper.classList.remove("vidply-forced-poster"),this.player.videoWrapper.style.removeProperty("--vidply-poster-image")),this.iframeId=`soundcloud-player-${Math.random().toString(36).substr(2,9)}`,this.iframe=document.createElement("iframe"),this.iframe.id=this.iframeId,this.iframe.scrolling="no",this.iframe.frameBorder="no",this.iframe.allow="autoplay",this.iframe.src=this.getEmbedUrl(),this.iframe.style.width="100%",this.iframe.style.display="block",this.isPlaylist()?this.iframe.classList.add("vidply-soundcloud-iframe","vidply-soundcloud-playlist"):this.iframe.classList.add("vidply-soundcloud-iframe"),this.iframe.style.maxHeight="100%",null==(e=this.player.element.parentNode)||e.insertBefore(this.iframe,this.player.element)}async initializeWidget(){return new Promise((e,t)=>{const i=this.iframe;if(!i||void 0===window.SC)return void t(new Error("SoundCloud widget cannot initialize"));const s=window.SC;s?(this._initController=new AbortController,i.addEventListener("load",()=>{try{const t=s.Widget(i);this.widget=t,t.bind(s.Widget.Events.READY,()=>{this.isReady=!0,null!==this._initTimeoutId&&(clearTimeout(this._initTimeoutId),this._initTimeoutId=null),this.attachEvents(),this.player.container&&this.player.container.classList.add("vidply-external-controls"),t.getCurrentSound(e=>{e&&(this.player.state.duration=e.duration/1e3,this.player.emit("loadedmetadata"))}),e()}),t.bind(s.Widget.Events.ERROR,(...e)=>{const t=e[0];this.player.handleError(new Error(`SoundCloud error: ${(null==t?void 0:t.message)||"Unknown error"}`))})}catch(e){t(e)}},{signal:this._initController.signal}),this._initTimeoutId=setTimeout(()=>{this._initTimeoutId=null,this.isReady||t(new Error("SoundCloud widget initialization timeout"))},1e4)):t(new Error("SoundCloud widget cannot initialize"))})}attachEvents(){const e=this.widget,t=window.SC;if(!e||!t)return;const i=t.Widget.Events;e.bind(i.PLAY,()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),e.bind(i.PAUSE,()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),e.bind(i.FINISH,()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.seek(0),this.play())}),e.bind(i.PLAY_PROGRESS,(...e)=>{const t=e[0].currentPosition/1e3;this.player.state.currentTime=t,this.player.emit("timeupdate",t),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,t)}),e.bind(i.SEEK,(...e)=>{this.player.state.currentTime=e[0].currentPosition/1e3,this.player.emit("seeked")}),e.bind(i.LOAD_PROGRESS,(...e)=>{const t=e[0];this.player.state.duration&&void 0!==t.loadedProgress&&this.player.emit("progress",t.loadedProgress*this.player.state.duration)})}play(){if(this.isReady&&this.widget){const e=window.scrollX,t=window.scrollY;this.widget.play(),window.scrollTo(e,t)}}pause(){this.isReady&&this.widget&&this.widget.pause()}seek(e){this.isReady&&this.widget&&(this.widget.seekTo(1e3*e),this.player.state.currentTime=e)}setVolume(e){this.isReady&&this.widget&&(this.widget.setVolume(100*e),this.player.state.volume=e)}setMuted(e){const t=this.widget;this.isReady&&t&&(e?t.getVolume(e=>{this._previousVolume=e,t.setVolume(0)}):t.setVolume(this._previousVolume||100),this.player.state.muted=e)}setPlaybackSpeed(e){this.player.log("SoundCloud does not support playback speed control","warn")}getCurrentSound(){return new Promise(e=>{this.isReady&&this.widget?this.widget.getCurrentSound(t=>{e(t)}):e(null)})}destroy(){if(null!==this._initTimeoutId&&(clearTimeout(this._initTimeoutId),this._initTimeoutId=null),this._initController&&(this._initController.abort(),this._initController=null),this.widget&&window.SC){const e=window.SC.Widget.Events;try{this.widget.unbind(e.READY),this.widget.unbind(e.PLAY),this.widget.unbind(e.PAUSE),this.widget.unbind(e.FINISH),this.widget.unbind(e.PLAY_PROGRESS),this.widget.unbind(e.SEEK),this.widget.unbind(e.LOAD_PROGRESS),this.widget.unbind(e.ERROR)}catch{}}this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display=""),this.widget=null,this.isReady=!1}}}}),lt=class{constructor(){n(this,"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 dt(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,d=e.muted;return s&&(e.muted=!0),new Promise(i=>{const h=()=>{try{let t=e.videoWidth||640,h=e.videoHeight||360;if(n&&t>n){const e=n/t;t=n,h=Math.round(h*e)}if(r&&h>r){const e=r/h;h=r,t=Math.round(t*e)}const c=document.createElement("canvas");c.width=t,c.height=h;const u=c.getContext("2d");if(!u)return void i(null);u.drawImage(e,0,0,t,h);const p=c.toDataURL("image/jpeg",a);s&&(e.currentTime=l,e.muted=d,o&&!e.paused&&e.play().catch(e=>{"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] preview play() rejected:",e)})),i(p)}catch(t){"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] frame capture failed:",t),s&&(e.currentTime=l,e.muted=d,o&&!e.paused&&e.play().catch(e=>{"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] preview play() rejected:",e)})),i(null)}},c=()=>{e.removeEventListener("seeked",c),requestAnimationFrame(()=>{requestAnimationFrame(h)})};if(Math.abs(e.currentTime-t)<.1&&e.readyState>=2)h();else if(e.readyState>=1)e.addEventListener("seeked",c),e.currentTime=t;else{const i=()=>{e.removeEventListener("loadedmetadata",i),e.addEventListener("seeked",c),e.currentTime=t};e.addEventListener("loadedmetadata",i)}})}d(),d(),$(),F(),H(),N(),K();var ht={"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"},ct={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 ut(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 pt=new WeakMap;function gt(e){let t=pt.get(e);return t||(t={},pt.set(e,t)),t}var mt=class{constructor(e){n(this,"player"),n(this,"_overflowMenuItemRef",null),n(this,"controls"),n(this,"currentPreviewTime"),n(this,"element"),n(this,"hideTimeout"),n(this,"isDraggingProgress"),n(this,"isDraggingVolume"),n(this,"openMenu"),n(this,"openMenuButton"),n(this,"overflowResizeObserver",null),n(this,"previewSupported",!1),n(this,"previewThumbnailCache",new Map),n(this,"previewThumbnailTimeout",null),n(this,"previewUsingMainVideo",!1),n(this,"previewVideo",null),n(this,"previewVideoInitialized",!1),n(this,"previewVideoReady",!1),n(this,"rightButtons"),n(this,"overflowMenuButton",null),n(this,"_activeVolumeTrack",null),n(this,"_progressBarRect",null),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=q(),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(),d=i.left+i.width/2-l.left,h=i.top;let c=i.top-l.top-s.height-8,u=null;h<s.height+20&&r-i.bottom>h?(c=null,u=l.bottom-l.top-(i.bottom-l.top)+8,e.classList.add("vidply-menu-below")):e.classList.remove("vidply-menu-below");let p="auto",g="auto",m="translateX(0)";if(a)p="auto",g=0,m="translateX(0)";else{p=d-s.width/2;const e=i.left+i.width/2-s.width/2;e<10?(p=0,m="translateX(0)"):e+s.width>n-10?(p="auto",g=0,m="translateX(0)"):(p=d,m="translateX(-50%)")}null!==c?(e.style.top=`${c}px`,e.style.bottom="auto"):null!==u&&(e.style.top="auto",e.style.bottom=`${u}px`),"auto"!==p?(e.style.left=`${p}px`,e.style.right="auto"):(e.style.left="auto",e.style.right=`${g}px`),e.style.transform=m};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=pt.get(this.openMenuButton);(null==e?void 0:e.blur)&&(this.openMenuButton.removeEventListener("blur",e.blur),delete e.blur),(null==e?void 0: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),gt(t).mousedown=n;const r=i=>{if(!a||s)return;if(this.openMenu!==e)return;const o=i.relatedTarget;requestAnimationFrame(()=>{setTimeout(()=>{var i;if(!a||this.openMenu!==e)return;const s=document.activeElement;if(e.contains(s))return;const l=this.player.signLanguageWrapper,d=null==(i=this.player.transcriptManager)?void 0:i.transcriptWindow;if(l&&l.contains(s)||d&&d.contains(s))return;const h=Array.from(this.element.querySelectorAll("button")),c=null!==s&&h.includes(s)&&s!==t,u=null!==o&&o instanceof Element&&h.includes(o)&&o!==t;if(c||u){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=pt.get(t);i&&(delete i.blur,delete i.mousedown)}},10)})};t.addEventListener("blur",r),gt(t).blur=r;const o=()=>{this.closeMenuAndReturnFocus(e,t)};let l=null,d=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),d&&document.removeEventListener("keydown",d))},d=i=>{"Escape"===i.key&&this.openMenu===e&&(i.preventDefault(),i.stopPropagation(),this.closeMenuAndReturnFocus(e,t,!0),l&&document.removeEventListener("click",l),d&&document.removeEventListener("keydown",d))};const s=this.player.lifecycleSignal;document.addEventListener("click",l,{signal:s}),document.addEventListener("keydown",d,{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",s=>{const a=i.indexOf(document.activeElement);switch(s.key){case"ArrowDown":{s.preventDefault(),s.stopPropagation();const e=i[(a+1)%i.length];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(U("nearest")));break}case"ArrowUp":{s.preventDefault(),s.stopPropagation();const e=i[(a-1+i.length)%i.length];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(U("nearest")));break}case"ArrowLeft":case"ArrowRight":s.preventDefault(),s.stopPropagation();break;case"Home":{s.preventDefault(),s.stopPropagation();const e=i[0];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(U("nearest")));break}case"End":{s.preventDefault(),s.stopPropagation();const e=i[i.length-1];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(U("nearest")));break}case"Enter":case" ":s.preventDefault(),s.stopPropagation(),document.activeElement&&i.includes(document.activeElement)&&(document.activeElement.click(),I(t,{delay:0}));break;case"Escape":s.preventDefault(),s.stopPropagation(),this.closeMenuAndReturnFocus(e,t,!0)}})}createElement(){this.element=e.createElement("div",{className:`${this.player.options.classPrefix}-controls`,attributes:{role:"region","aria-label":x.t("player.label")+" controls"}})}createControls(){var t,i,s,a,n,r,o,l,d,h,c,u,p,g,m;const y=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-time-wrapper`});this.player.options.progressBar&&(this.createProgressBar(),this.controls.progress&&y.appendChild(this.controls.progress)),(this.player.options.currentTime||this.player.options.duration)&&y.appendChild(this.createTimeDisplay()),this.element.appendChild(y);const f=e.createElement("div",{className:`${this.player.options.classPrefix}-controls-buttons`}),v=e.createElement("div",{className:`${this.player.options.classPrefix}-controls-left`});this.player.playlistManager&&v.appendChild(this.createPreviousButton()),this.player.options.playPauseButton&&v.appendChild(this.createPlayPauseButton()),v.appendChild(this.createRestartButton()),this.player.playlistManager&&v.appendChild(this.createNextButton()),this.player.playlistManager||v.appendChild(this.createRewindButton()),this.player.playlistManager||v.appendChild(this.createForwardButton()),this.player.options.volumeControl&&(this.isTouchDevice()?v.appendChild(this.createMuteButton()):v.appendChild(this.createVolumeControl())),this.rightButtons=e.createElement("div",{className:`${this.player.options.classPrefix}-controls-right`});const b=this.hasChapterTracks(),w=this.hasCaptionTracks(),S=this.hasQualityLevels(),M=this.hasAudioDescription();if(this.player.options.chaptersButton&&b){const e=this.createChaptersButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.captionsButton&&w){const e=this.createCaptionsButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.captionStyleButton&&w){const e=this.createCaptionStyleButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}const T=this.player.currentSource||(null==(i=null==(t=this.player.element)?void 0:t.getAttribute)?void 0:i.call(t,"src"))||(null==(s=this.player.element)?void 0:s.currentSrc)||(null==(a=this.player.element)?void 0:a.src)||(null==(l=null==(o=null==(r=null==(n=this.player.element)?void 0:n.querySelector)?void 0:r.call(n,"source"))?void 0:o.getAttribute)?void 0:l.call(o,"src"))||(null==(c=null==(h=null==(d=this.player.element)?void 0:d.querySelector)?void 0:h.call(d,"source"))?void 0:c.src)||"",k="string"==typeof T&&T.includes(".m3u8"),P="string"==typeof T&&T.includes(".mpd"),E="video"===(null==(p=null==(u=this.player.element)?void 0:u.tagName)?void 0:p.toLowerCase()),C=Boolean(this.player.options.hideSpeedForHls)&&k||Boolean(this.player.options.hideSpeedForHlsVideo)&&k&&E||Boolean(this.player.options.hideSpeedForDash)&&P||Boolean(this.player.options.hideSpeedForDashVideo)&&P&&E;if(this.player.options.speedButton&&!C){const e=this.createSpeedButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.audioDescriptionButton&&M){const e=this.createAudioDescriptionButton();e.dataset.overflowPriority="2",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.transcriptButton&&w){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 L=this.hasSignLanguage(),x=this.player.options.signLanguageDisplayMode||"both";if(!1!==this.player.options.signLanguageButton&&L){if(["pip","both"].includes(x)){const e=this.createSignLanguageButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(["main","both"].includes(x)){const e=this.createSignLanguageInMainViewButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}}if(this.player.options.qualityButton&&S){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||(null==(m=null==(g=this.player.element)?void 0:g.dataset)?void 0:m.vidplyDownloadUrl);if(e){const t=this.createDownloadButton(e);t.dataset.overflowPriority="2",t.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(t)}}const D=this.player.options.pipButton&&(this.player.options.floating||"pictureInPictureEnabled"in document),A="audio"===this.player.element.tagName.toLowerCase();if(D&&(!this.player.options.floating||!A)){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 z="audio"===this.player.element.tagName.toLowerCase();if(this.player.options.fullscreenButton&&!z){const e=this.createFullscreenButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="1",this.rightButtons.appendChild(e)}f.appendChild(v),f.appendChild(this.rightButtons),this.element.appendChild(f),this.ensureButtonTooltips(f)}ensureButtonTooltips(t){t.querySelectorAll("button").forEach(t=>{if(t.querySelector(`.${this.player.options.classPrefix}-tooltip`))return;if(t.querySelector(`.${this.player.options.classPrefix}-button-text`))return;if("menuitem"===t.getAttribute("role")||t.classList.contains(`${this.player.options.classPrefix}-settings-item`)||t.classList.contains(`${this.player.options.classPrefix}-menu-item`)||t.classList.contains(`${this.player.options.classPrefix}-transcript-settings-item`)||t.classList.contains(`${this.player.options.classPrefix}-sign-language-settings-item`)||t.classList.contains(`${this.player.options.classPrefix}-popup-settings-item`))return;const i=t.getAttribute("aria-label");i&&e.attachTooltip(t,i,this.player.options.classPrefix)})}hasChapterTracks(){var e,t,i;const s=this.player.element.textTracks;for(let t=0;t<s.length;t++)if("chapters"===(null==(e=s[t])?void 0:e.kind))return!0;if(Array.from(this.player.element.querySelectorAll('track[kind="chapters"]')).length>0)return!0;const a=null==(i=null==(t=this.player.playlistManager)?void 0:t.getCurrentTrack)?void 0:i.call(t);return!(!(null==a?void 0:a.tracks)||!Array.isArray(a.tracks))&&a.tracks.some(e=>"chapters"===(null==e?void 0:e.kind))}hasCaptionTracks(){var e,t;const i=this.player.element.textTracks;for(let e=0;e<i.length;e++){const t=i[e];if(t&&("captions"===t.kind||"subtitles"===t.kind)&&!t._vidplyStale)return!0}if(Array.from(this.player.element.querySelectorAll("track")).some(e=>"captions"===e.getAttribute("kind")||"subtitles"===e.getAttribute("kind")))return!0;const s=null==(t=null==(e=this.player.playlistManager)?void 0:e.getCurrentTrack)?void 0:t.call(e);return!!((null==s?void 0:s.tracks)??[]).some(e=>"captions"===(null==e?void 0:e.kind)||"subtitles"===(null==e?void 0: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 t=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-container`,attributes:{role:"slider","aria-label":x.t("player.progress"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":"0",tabindex:"0"}});this.controls.buffered=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-buffered`}),this.controls.played=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-played`}),this.controls.progressHandle=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-handle`}),this.controls.progressTooltip=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-tooltip`}),this.controls.progressPreview=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-preview`,attributes:{"aria-hidden":"true"}}),this.controls.progressTooltip.appendChild(this.controls.progressPreview),this.controls.progressTooltipTime=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-tooltip-time`}),this.controls.progressTooltip.appendChild(this.controls.progressTooltipTime),t.appendChild(this.controls.buffered),t.appendChild(this.controls.played),this.controls.played.appendChild(this.controls.progressHandle),t.appendChild(this.controls.progressTooltip),this.controls.progress=t,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(){var e,t;if(this.previewVideoInitialized)return;if(!(null==(t=null==(e=this.player)?void 0:e.state)?void 0:t.hasStartedPlayback))return;if(!1===this.player.options.thumbnailPreview)return this.previewSupported=!1,void(this.previewVideoInitialized=!0);const i=this.player.renderer,s=i&&i.media&&"VIDEO"===i.media.tagName;if(!s)return this.previewSupported=!1,void(this.previewVideoInitialized=!0);const a=!0===i.isStreaming||i.hls&&void 0!==i.hls.loadLevel||i.dash&&("function"==typeof i.dash.getQualityFor||"function"==typeof i.dash.getCurrentRepresentationForType||"function"==typeof i.dash.getRepresentationsByType||"function"==typeof i.dash.attachSource),n=s&&i.media===this.player.element&&!a&&"function"==typeof i.seek;if(a)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=n&&s,!this.previewSupported)return void(this.previewVideoInitialized=!0);const r=i.media||this.player.element;let o=null;if(r.src)o=r.src;else{const e=r.querySelector("source");e&&(o=e.src)}if(!o)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",r.crossOrigin&&(this.previewVideo.crossOrigin=r.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=o,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 dt(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 e=this.controls.progress;if(!e)return;const t=t=>{const i=e.getBoundingClientRect(),s=i.width>0?Math.max(0,Math.min(1,(t-i.left)/i.width)):0;return{percent:s,time:s*(this.player.state.duration||0)}};e.addEventListener("mousedown",i=>{this.isDraggingProgress=!0,this._progressBarRect=e.getBoundingClientRect();const{time:s}=t(i.clientX);this.player.seek(s)}),e.addEventListener("mousemove",i=>{var s,a;if(!this.isDraggingProgress){const{time:n}=t(i.clientX),r=e.getBoundingClientRect(),o=i.clientX-r.left,l=this.controls.progressTooltip,d=this.controls.progressTooltipTime;if(l&&d&&(d.textContent=_.formatTime(n),l.style.left=`${o}px`,l.style.display="block"),!(null==(a=null==(s=this.player)?void 0:s.state)?void 0:a.hasStartedPlayback))return void(this.controls.progressPreview&&(this.controls.progressPreview.style.display="none"));this.ensurePreviewVideoInitialized(),this.previewSupported?this.updatePreviewThumbnail(n):this.controls.progressPreview&&(this.controls.progressPreview.style.display="none")}}),e.addEventListener("mouseleave",()=>{this.controls.progressTooltip&&(this.controls.progressTooltip.style.display="none"),this.previewThumbnailTimeout&&clearTimeout(this.previewThumbnailTimeout)}),e.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))}}),e.addEventListener("touchstart",e=>{this.isDraggingProgress=!0;const i=e.touches[0];if(!i)return;const{time:s}=t(i.clientX);this.player.seek(s)}),e.addEventListener("touchmove",e=>{if(this.isDraggingProgress){e.preventDefault();const i=e.touches[0];if(!i)return;const{time:s}=t(i.clientX);this.player.seek(s)}}),e.addEventListener("touchend",()=>{this.isDraggingProgress=!1})}createPlayPauseButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-play-pause`,attributes:{type:"button","aria-label":x.t("player.play")}});return t.appendChild(O("play")),t.addEventListener("click",()=>{this.player.toggle()}),this.controls.playPause=t,t}createRestartButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-restart`,attributes:{type:"button","aria-label":x.t("player.restart")}});return t.appendChild(O("restart")),t.addEventListener("click",()=>{this.player.seek(0),this.player.play()}),t}createPreviousButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-previous`,attributes:{type:"button","aria-label":x.t("player.previous")}});t.appendChild(O("skipPrevious")),t.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.previous()});const i=()=>{this.player.playlistManager&&(t.disabled=!this.player.playlistManager.hasPrevious()&&!this.player.playlistManager.options.loop)};return this.player.on("playlisttrackchange",i),i(),this.controls.previous=t,t}createNextButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-next`,attributes:{type:"button","aria-label":x.t("player.next")}});t.appendChild(O("skipNext")),t.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.next()});const i=()=>{this.player.playlistManager&&(t.disabled=!this.player.playlistManager.hasNext()&&!this.player.playlistManager.options.loop)};return this.player.on("playlisttrackchange",i),i(),this.controls.next=t,t}createPlaylistToggleButton(){const t=this.player.playlistManager?`${this.player.playlistManager.uniqueId}-panel`:"vidply-playlist-panel",i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-playlist-toggle`,attributes:{type:"button","aria-label":x.t("player.playlist"),"aria-expanded":"false","aria-pressed":"false","aria-controls":t}});return i.appendChild(O("playlist")),i.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.togglePanel()}),this.controls.playlistToggle=i,i}createRewindButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-rewind`,attributes:{type:"button","aria-label":x.t("player.rewindSeconds",{seconds:15})}});return t.appendChild(O("rewind")),t.addEventListener("click",()=>{this.player.seekBackward(15)}),t}createForwardButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-forward`,attributes:{type:"button","aria-label":x.t("player.forwardSeconds",{seconds:15})}});return t.appendChild(O("forward")),t.addEventListener("click",()=>{this.player.seekForward(15)}),t}createMuteButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":x.t("player.mute")}});return t.appendChild(O("volumeHigh")),t.addEventListener("click",()=>{this.player.toggleMute()}),this.controls.mute=t,t}createVolumeControl(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":x.t("player.volume"),"aria-expanded":"false"}});return t.appendChild(O("volumeHigh")),t.addEventListener("contextmenu",e=>{e.preventDefault(),this.player.toggleMute()}),t.addEventListener("click",()=>{this.showVolumeSlider(t)}),this.controls.mute=t,t}showVolumeSlider(t){const i=document.querySelector(`.${this.player.options.classPrefix}-volume-menu`);if(i)return i.remove(),void t.setAttribute("aria-expanded","false");const s=e.createElement("div",{className:`${this.player.options.classPrefix}-volume-menu ${this.player.options.classPrefix}-menu`}),a=Math.round(100*this.player.state.volume),n=e.createElement("div",{className:`${this.player.options.classPrefix}-volume-slider`,attributes:{role:"slider","aria-label":x.t("player.volume"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":String(a),"aria-valuetext":this.player.state.muted?x.t("player.muted"):x.t("player.volumePercent",{percent:a}),tabindex:"0"}}),r=e.createElement("div",{className:`${this.player.options.classPrefix}-volume-track`}),o=e.createElement("div",{className:`${this.player.options.classPrefix}-volume-fill`});o.style.height=100*this.player.state.volume+"%";const l=e.createElement("div",{className:`${this.player.options.classPrefix}-volume-handle`});r.appendChild(o),o.appendChild(l),n.appendChild(r),s.appendChild(n);const d=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,d(e.clientY)}),n.addEventListener("touchstart",e=>{e.stopPropagation(),e.preventDefault(),this.isDraggingVolume=!0,this._activeVolumeTrack=r;const t=e.touches[0];t&&d(t.clientY)},{passive:!1}),n.addEventListener("touchmove",e=>{if(this.isDraggingVolume){e.preventDefault();const t=e.touches[0];if(!t)return;d(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",e=>{"ArrowUp"===e.key?(e.preventDefault(),this.player.setVolume(Math.min(1,this.player.state.volume+.1))):"ArrowDown"===e.key?(e.preventDefault(),this.player.setVolume(Math.max(0,this.player.state.volume-.1))):"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),this.closeMenuAndReturnFocus(s,t,!0))}),s.addEventListener("click",e=>{e.stopPropagation()}),s.addEventListener("touchstart",e=>{e.stopPropagation()}),s.addEventListener("touchmove",e=>{e.stopPropagation()}),s.addEventListener("touchend",e=>{e.stopPropagation()}),s.style.visibility="hidden",s.style.display="block",this.insertMenuIntoDOM(s,t),this.positionMenu(s,t,!0),requestAnimationFrame(()=>{s.style.visibility="visible"}),this.controls.volumeSlider=n,this.controls.volumeFill=o,I(n,{delay:50}),this.attachMenuCloseHandler(s,t,!0)}createTimeDisplay(){const t=e.createElement("div",{className:`${this.player.options.classPrefix}-time`,attributes:{role:"group","aria-label":x.t("time.display")}});this.controls.currentTimeDisplay=e.createElement("span",{className:`${this.player.options.classPrefix}-current-time`});const i=e.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}}),s=e.createElement("span",{className:"vidply-sr-only",textContent:x.t("time.seconds",{count:0})});this.controls.currentTimeDisplay.appendChild(i),this.controls.currentTimeDisplay.appendChild(s),this.controls.currentTimeVisual=i,this.controls.currentTimeAccessible=s;const a=e.createElement("span",{textContent:" / ",attributes:{"aria-hidden":"true"}});this.controls.durationDisplay=e.createElement("span",{className:`${this.player.options.classPrefix}-duration`});const n=e.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}}),r=e.createElement("span",{className:"vidply-sr-only",textContent:x.t("time.durationPrefix")+x.t("time.seconds",{count:0})});return this.controls.durationDisplay.appendChild(n),this.controls.durationDisplay.appendChild(r),this.controls.durationVisual=n,this.controls.durationAccessible=r,t.appendChild(this.controls.currentTimeDisplay),t.appendChild(a),t.appendChild(this.controls.durationDisplay),t}createChaptersButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-chapters`,attributes:{type:"button","aria-label":x.t("player.chapters"),"aria-expanded":"false"}});return t.appendChild(O("chapters")),t.addEventListener("click",()=>{this.showChaptersMenu(t)}),this.controls.chapters=t,t}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=e.createElement("div",{className:`${this.player.options.classPrefix}-chapters-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":x.t("player.chapters")}}),a=Array.from(this.player.element.textTracks).filter(e=>"chapters"===e.kind);if(0===a.length){const t=e.createElement("div",{className:`${this.player.options.classPrefix}-menu-item ${this.player.options.classPrefix}-menu-item-disabled`,textContent:x.t("player.noChapters"),attributes:{role:"menuitem","aria-disabled":"true",tabindex:"-1"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(t)}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=e.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),o=e.createElement("span",{className:`${this.player.options.classPrefix}-chapter-time`,textContent:_.formatTime(n.startTime),attributes:{"aria-label":_.formatDuration(n.startTime)}}),l=e.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 a=e.createElement("div",{className:`${this.player.options.classPrefix}-menu-item ${this.player.options.classPrefix}-menu-item-disabled`,textContent:x.t("player.loadingChapters"),attributes:{role:"menuitem","aria-disabled":"true",tabindex:"-1"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(a),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 t=x.t("player.quality"),i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-quality`,attributes:{type:"button","aria-label":t,"aria-expanded":"false"}});i.appendChild(O("hd")),e.attachTooltip(i,t,this.player.options.classPrefix);const s=e.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(t){const i=document.querySelector(`.${this.player.options.classPrefix}-quality-menu`);if(i)return i.remove(),t.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=e.createElement("div",{className:`${this.player.options.classPrefix}-quality-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":x.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 t=e.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:x.t("player.autoQuality"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(t)}else{let r=null;if(n){const i=e.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:x.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(O("check")),r=i),i.addEventListener("click",()=>{var e;(null==(e=this.player.renderer)?void 0:e.switchQuality)&&this.player.renderer.switchQuality(-1),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(i)}i.forEach(i=>{const n=e.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(O("check")),r=n),n.addEventListener("click",()=>{var e;(null==(e=this.player.renderer)?void 0:e.switchQuality)&&void 0!==i.index&&this.player.renderer.switchQuality(i.index),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(n)}),this.attachMenuKeyboardNavigation(s,t),setTimeout(()=>{const e=r||s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&e.focus({preventScroll:!0})},0)}}else{const t=e.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:x.t("player.noQuality"),style:{opacity:"0.5",cursor:"default"}});s.appendChild(t)}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)}createCaptionStyleButton(){const t=x.t("player.captionStyling"),i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-caption-style`,attributes:{type:"button","aria-label":t,"aria-expanded":"false"}}),s=e.createElement("span",{textContent:"Aa",style:{fontSize:"14px",fontWeight:"bold"}});return i.appendChild(s),e.attachTooltip(i,t,this.player.options.classPrefix),i.addEventListener("click",()=>{this.showCaptionStyleMenu(i)}),this.controls.captionStyle=i,i}showCaptionStyleMenu(e){Promise.resolve().then(()=>(te(),Q)).then(({showCaptionStyleMenu:t})=>t(this,e)).catch(e=>this.player.log("Failed to load caption style menu:",e,"error"))}createSpeedButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-speed`,attributes:{type:"button","aria-label":x.t("player.speed"),"aria-expanded":"false"}});t.appendChild(O("speed"));const i=e.createElement("span",{className:`${this.player.options.classPrefix}-speed-text`,textContent:"1x"});return t.appendChild(i),t.addEventListener("click",()=>{this.showSpeedMenu(t)}),this.controls.speed=t,this.controls.speedText=i,t}formatSpeedLabel(e){return 1===e?x.t("speeds.normal"):`${e.toLocaleString(x.getLanguage(),{minimumFractionDigits:0,maximumFractionDigits:2})}×`}showSpeedMenu(t){const i=document.querySelector(`.${this.player.options.classPrefix}-speed-menu`);if(i)return i.remove(),t.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=e.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=e.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(O("check")),a=n),n.addEventListener("click",()=>{this.player.setPlaybackSpeed(i),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(n)}),s.style.visibility="hidden",s.style.display="block",this.insertMenuIntoDOM(s,t),this.positionMenu(s,t,!0),requestAnimationFrame(()=>{s.style.visibility="visible"}),this.attachMenuKeyboardNavigation(s,t),this.attachMenuCloseHandler(s,t),setTimeout(()=>{const e=a||s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&e.focus({preventScroll:!0})},0)}createCaptionsButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-captions-button`,attributes:{type:"button","aria-label":x.t("player.captions"),"aria-expanded":"false"}});return t.appendChild(O("captionsOff")),t.addEventListener("click",()=>{this.showCaptionsMenu(t)}),this.controls.captions=t,t}showCaptionsMenu(t){const i=document.querySelector(`.${this.player.options.classPrefix}-captions-menu`);if(i)return i.remove(),t.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=e.createElement("div",{className:`${this.player.options.classPrefix}-captions-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":x.t("captions.select")}});if(!this.player.captionManager||0===this.player.captionManager.tracks.length){const i=e.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:x.t("player.noCaptions"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});return s.appendChild(i),this.insertMenuIntoDOM(s,t),void this.attachMenuCloseHandler(s,t)}let a=null;const n=e.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:x.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(O("check")),a=n),n.addEventListener("click",()=>{this.player.disableCaptions(),this.updateCaptionsButton(),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(n),this.player.captionManager.getAvailableTracks().forEach(i=>{const n=e.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(O("check")),a=n),n.addEventListener("click",()=>{var e;null==(e=this.player.captionManager)||e.switchTrack(i.index),this.updateCaptionsButton(),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(n)}),this.insertMenuIntoDOM(s,t),this.attachMenuKeyboardNavigation(s,t),this.attachMenuCloseHandler(s,t),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?O("captions").innerHTML:O("captionsOff").innerHTML)}createTranscriptButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-transcript`,attributes:{type:"button","aria-label":x.t("player.transcript"),"aria-expanded":"false"}});return t.appendChild(O("transcript")),t.addEventListener("click",async()=>{await this.player.toggleTranscript(),this.updateTranscriptButton()}),this.controls.transcript=t,t}updateTranscriptButton(){this.controls.transcript&&this.controls.transcript.setAttribute("aria-expanded",this.player.transcriptManager&&this.player.transcriptManager.isVisible?"true":"false")}createAudioDescriptionButton(){const t=x.t("player.audioDescription"),i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-audio-description`,attributes:{type:"button","aria-label":t,role:"switch","aria-checked":"false"}});return i.appendChild(O("audioDescription")),e.attachTooltip(i,t,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"),t=this.player.state.audioDescriptionEnabled;e&&(e.innerHTML=t?O("audioDescriptionOn").innerHTML:O("audioDescription").innerHTML),this.controls.audioDescription.setAttribute("aria-checked",t?"true":"false")}createSignLanguageButton(){const t=x.t("player.signLanguage"),i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-sign-language`,attributes:{type:"button","aria-label":t,"aria-expanded":"false"}});return i.appendChild(O("signLanguagePip")),e.attachTooltip(i,t,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"),t=this.player.state.signLanguageEnabled;e&&(e.innerHTML=t?O("signLanguagePipOn").innerHTML:O("signLanguagePip").innerHTML),this.controls.signLanguage.setAttribute("aria-expanded",t?"true":"false"),this.controls.signLanguage.setAttribute("aria-label",x.t(t?"signLanguage.hide":"signLanguage.show"))}createSignLanguageInMainViewButton(){const t=x.t("signLanguage.showInMainView"),i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-sign-language-main-view`,attributes:{type:"button","aria-label":t,"aria-pressed":"false"}});return i.appendChild(O("signLanguage")),e.attachTooltip(i,t,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 t=this.player.state.signLanguageInMainView,i=x.t(t?"signLanguage.hideInMainView":"signLanguage.showInMainView"),s=t?"signLanguageOn":"signLanguage",a=e.querySelector(".vidply-icon");a&&(a.innerHTML=O(s).innerHTML),e.setAttribute("aria-pressed",String(t)),e.setAttribute("aria-label",i);const n=e.querySelector(`.${this.player.options.classPrefix}-tooltip`);n&&(n.textContent=i)}updateAccessibilityButtons(){var e;const t=this.hasAudioDescription(),i=this.hasSignLanguage();if(t){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 s=i&&!1!==this.player.options.signLanguageButton,a=this.player.options.classPrefix,n=this.player.options.signLanguageDisplayMode||"both",r=["pip","both"].includes(n),o=["main","both"].includes(n);if(s){const t=this.rightButtons.querySelector(`.${a}-quality`),i=this.rightButtons.querySelector(`.${a}-fullscreen`),s=t||i||null;let n=!1;if(r&&!this.controls.signLanguage){const e=this.createSignLanguageButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",s?this.rightButtons.insertBefore(e,s):this.rightButtons.appendChild(e),n=!0}if(o&&!this.controls.signLanguageMainView){const t=this.createSignLanguageInMainViewButton();t.dataset.overflowPriority="3",t.dataset.overflowPriorityMobile="3";const i=null==(e=this.controls.signLanguage)?void 0:e.nextSibling;i?this.rightButtons.insertBefore(t,i):s?this.rightButtons.insertBefore(t,s):this.rightButtons.appendChild(t),n=!0}n&&this.checkOverflow(),this.controls.signLanguage&&(this.controls.signLanguage.style.display=r?"":"none"),this.controls.signLanguageMainView&&(this.controls.signLanguageMainView.style.display=o?"":"none")}else this.controls.signLanguage&&(this.controls.signLanguage.style.display="none"),this.controls.signLanguageMainView&&(this.controls.signLanguageMainView.style.display="none")}createSettingsButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-settings`,attributes:{type:"button","aria-label":x.t("player.settings")}});return t.appendChild(O("settings")),t.addEventListener("click",()=>{this.player.showSettings()}),t}createPipButton(){const t=!0===this.player.options.floating,i=this.player.options.classPrefix,s=e.createElement("button",{className:t?`${i}-button ${i}-pip ${i}-pip-floating`:`${i}-button ${i}-pip`,attributes:{type:"button","aria-label":x.t(t?"player.floatingPlayer":"player.pip"),"aria-pressed":"false"}});return s.appendChild(O("pip")),s.addEventListener("click",()=>{t?this.player.floatingPlayerManager&&this.player.floatingPlayerManager.togglePinned(s):this.player.togglePiP()}),t&&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(t){var i;const s=(null==(i=this.player.element)?void 0:i.dataset)||{},a=this.resolveDownloadFormat(t),n=this.resolveInitialDownloadSize(),r=x.t("player.download"),o=ut({baseLabel:r,format:a,sizeBytes:n,locale:x.getLanguage(),withFormatSizeTemplate:x.t("player.downloadWithFormatSize"),withFormatTemplate:x.t("player.downloadWithFormat"),withSizeTemplate:x.t("player.downloadWithSize")}),l=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-download`,attributes:{type:"button","aria-label":o}});return a&&(l.dataset.vidplyDownloadFormat=a),null!=n&&(l.dataset.vidplyDownloadSize=String(n)),l.appendChild(O("download")),l.addEventListener("click",()=>{var e;const i=this.player.options.downloadUrl||s.vidplyDownloadUrl||t;if(!i)return;const a=document.createElement("a");a.href=i,a.download=(null==(e=i.split("/").pop())?void 0:e.split("?")[0])||"download",a.rel="noopener",a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a)}),!1!==this.player.options.downloadFetchSize&&null==n&&(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}})(t).then(e=>{if(null==e)return;const t=ut({baseLabel:r,format:a,sizeBytes:e,locale:x.getLanguage(),withFormatSizeTemplate:x.t("player.downloadWithFormatSize"),withFormatTemplate:x.t("player.downloadWithFormat"),withSizeTemplate:x.t("player.downloadWithSize")});l.dataset.vidplyDownloadSize=String(e),this.updateDownloadButtonLabel(l,t)}),l}resolveDownloadFormat(e){var t,i;const s=(null==(t=this.player.element)?void 0:t.dataset)||{},a=this.player.options.downloadFormat||s.vidplyDownloadFormat||null;if(a)return a;const n=(null==(i=this.player.element)?void 0:i.querySelectorAll)?Array.from(this.player.element.querySelectorAll("source")):[],r=n.find(t=>(t.getAttribute("src")||t.src||"")===e)||n[0];if(r){const e=(e=>{if(!e)return null;const t=(e.split(";")[0]??"").trim().toLowerCase();return ht[t]||null})(r.getAttribute("type"));if(e)return e}return(e=>{var t;if(!e)return null;try{const i=((null==(t=e.split("?")[0])?void 0:t.split("#")[0])??"").split("/").pop()||"",s=i.lastIndexOf(".");if(s<0||s===i.length-1)return null;const a=i.slice(s+1).toLowerCase();return ct[a]||null}catch{return null}})(e)}resolveInitialDownloadSize(){var e;const t=(null==(e=this.player.element)?void 0:e.dataset)||{},i=this.player.options.downloadFileSize;if("number"==typeof i&&Number.isFinite(i)&&i>0)return i;const s=t.vidplyDownloadSize;if(s){const e=Number(s);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 t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-fullscreen`,attributes:{type:"button","aria-label":x.t("player.fullscreen")}});return t.appendChild(O("fullscreen")),t.addEventListener("click",()=>{this.player.toggleFullscreen()}),this.controls.fullscreen=t,t}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 t=this.controls.playPause.querySelector(".vidply-icon"),i=this.player.state.playing;t&&(t.innerHTML=i?O("pause").innerHTML:O("play").innerHTML);const s=x.t(i?"player.pause":"player.play");this.controls.playPause.setAttribute("aria-label",s),e.attachTooltip(this.controls.playPause,s,this.player.options.classPrefix)}updateProgress(){if(!this.controls.played)return;const e=this.player.state.duration||0,t=e>0?Math.min(100,Math.max(0,(this.player.state.currentTime||0)/e*100)):0;if(this.controls.played.style.width=`${t}%`,this.controls.progress){this.controls.progress.setAttribute("aria-valuenow",String(Math.round(t)));const e=_.formatDuration(this.player.state.currentTime),i=_.formatDuration(this.player.state.duration);this.controls.progress.setAttribute("aria-valuetext",`${Math.round(t)}%, ${e} ${x.t("time.of")} ${i}`)}if(this.controls.currentTimeVisual){const e=this.player.state.currentTime;this.controls.currentTimeVisual.textContent=_.formatTime(e),this.controls.currentTimeAccessible&&(this.controls.currentTimeAccessible.textContent=_.formatDuration(e))}}updateDuration(){if(this.controls.durationVisual){const e=this.player.state.duration;this.controls.durationVisual.textContent=_.formatTime(e),this.controls.durationAccessible&&(this.controls.durationAccessible.textContent=x.t("time.durationPrefix")+_.formatDuration(e))}}updateVolumeDisplay(){const t=100*this.player.state.volume;if(this.controls.volumeFill&&(this.controls.volumeFill.style.height=`${t}%`),this.controls.volumeSlider){const e=Math.round(t);this.controls.volumeSlider.setAttribute("aria-valuenow",String(e)),this.controls.volumeSlider.setAttribute("aria-valuetext",this.player.state.muted?x.t("player.muted"):x.t("player.volumePercent",{percent:e}))}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=O(s).innerHTML;const a=this.player.state.muted?0:Math.round(t),n=this.isTouchDevice()?x.t(this.player.state.muted?"player.unmute":"player.mute"):`${x.t("player.volume")} ${a}%`;this.controls.mute.setAttribute("aria-label",n),e.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"),t=this.player.state.fullscreen;e&&(e.innerHTML=t?O("fullscreenExit").innerHTML:O("fullscreen").innerHTML),this.controls.fullscreen.setAttribute("aria-label",x.t(t?"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(){var e;const t=this.player.element.textTracks;for(let e=0;e<t.length;e++){const i=t[e];i&&(i.mode="disabled")}const i=null==(e=this.player.container)?void 0:e.querySelector(`.${this.player.options.classPrefix}-captions`);i&&(i.textContent="",i.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 t=x.t("player.moreOptions"),i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-overflow-menu`,attributes:{type:"button","aria-label":t,"aria-expanded":"false"}});return i.appendChild(O("moreVertical")),e.attachTooltip(i,t,this.player.options.classPrefix),i.addEventListener("click",()=>{this.showOverflowMenu(i)}),this.controls.overflowMenu=i,i}showOverflowMenu(t){const i=document.querySelector(`.${this.player.options.classPrefix}-overflow-menu-list`);if(i)return i.remove(),t.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=e.createElement("div",{className:`${this.player.options.classPrefix}-overflow-menu-list ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":x.t("player.moreOptions")}}),a=Array.from(this.rightButtons.querySelectorAll('button[data-in-overflow="true"]'));if(0===a.length){const t=e.createElement("div",{className:`${this.player.options.classPrefix}-menu-item ${this.player.options.classPrefix}-menu-item-disabled`,textContent:x.t("player.noMoreOptions"),attributes:{role:"menuitem","aria-disabled":"true",tabindex:"-1"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(t)}else a.forEach(i=>{const a=e.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),n=i.getAttribute("aria-label")||i.getAttribute("title")||"",r=i.querySelector(".vidply-icon");if(r){const e=r.cloneNode(!0);a.appendChild(e)}else{const e=i.querySelector("span");if(e&&e.textContent&&e.textContent.length<=3){const t=e.cloneNode(!0);t.classList.add("vidply-icon"),a.appendChild(t)}}const o=e.createElement("span",{textContent:n});a.appendChild(o),a.addEventListener("click",()=>{this._overflowMenuItemRef=a;const e=i.style.display;i.style.display="",i.style.visibility="hidden",i.click(),setTimeout(()=>{i.style.display=e,i.style.visibility="",this._overflowMenuItemRef=null},100),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(a)}),this.attachMenuKeyboardNavigation(s,t),setTimeout(()=>{const e=s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&"BUTTON"===e.tagName&&e.focus({preventScroll:!0})},0);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)}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 d=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 h=window.innerWidth<768,c=l>o||h||s&&!e;if(this.player.options.debug&&console.log("Overflow detection:",{containerWidth:r,availableWidth:o,totalWidth:l,needsOverflow:c,isSmallScreen:h,reason:h?"mobile screen":l>o?"not enough space":"enough space",buttonCount:a.length}),c){const e=h?"overflowPriorityMobile":"overflowPriority";this.player.options.debug&&console.log(`Using ${h?"mobile":"desktop"} priorities (width: ${window.innerWidth}px)`);const t=d.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?(h?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}, ${h?"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(){var e;const t=this.player.renderer;if(!t||!t.media||"VIDEO"!==t.media.tagName)return;if(this.previewSupported||this.previewVideo||this.initPreviewThumbnail(),!this.previewSupported||!this.previewVideo)return;const i=t.media,s=i.src||(null==(e=i.querySelector("source"))?void 0:e.src);s&&this.previewVideo.src!==s?(this.previewThumbnailCache.clear(),this.previewVideoReady=!1,this.previewVideo.src=s,i.crossOrigin&&(this.previewVideo.crossOrigin=i.crossOrigin),this.previewVideo.addEventListener("loadedmetadata",()=>{this.previewVideoReady=!0},{once:!0})):s&&!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)}};ue(),H(),K();var yt=class{constructor(e){n(this,"player"),n(this,"shortcuts"),n(this,"announcer",null),n(this,"_announceReady",!1),n(this,"_prevMuted"),n(this,"_stateAnnouncers",[]),n(this,"_announceVolume"),this.player=e,this.shortcuts=e.options.keyboardShortcuts,this._prevMuted=e.state.muted,this._announceVolume=W(()=>{const e=Math.round(100*this.player.state.volume);this.announce(x.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(x.t("player.playing"))),t("pause",()=>this.announce(x.t("player.paused"))),t("captionsenabled",()=>this.announce(x.t("player.captionsOn"))),t("captionsdisabled",()=>this.announce(x.t("player.captionsOff"))),t("fullscreenchange",()=>{this.announce(x.t(this.player.state.fullscreen?"player.fullscreen":"player.exitFullscreen"))}),t("ratechange",()=>{this.announce(x.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(x.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){var t,i;const s=e.target;if("INPUT"===s.tagName||"TEXTAREA"===s.tagName||"SELECT"===s.tagName)return;const a=document.activeElement;if(a){if(a.closest('.vidply-menu, [role="menu"]'))return;if(a.closest(".vidply-playlist-item-button"))return;if(a.closest(".vidply-sign-language-wrapper")){const e=null==(t=this.player.signLanguageManager)?void 0:t.draggable;if((null==e?void 0:e.keyboardDragMode)||(null==e?void 0:e.keyboardResizeMode))return}if(a.closest(".vidply-transcript-window")){const e=null==(i=this.player.transcriptManager)?void 0:i.draggableResizable;if((null==e?void 0:e.keyboardDragMode)||(null==e?void 0:e.keyboardResizeMode))return}}const n=e.key;let r=!1;if("Escape"===n&&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(n)&&(r=this.executeAction(t,e),r)){e.preventDefault(),e.stopPropagation();break}!r&&this.player.options.debug&&console.log("[VidPly] Unhandled key:",e.key,"code:",e.code,"shiftKey:",e.shiftKey)}executeAction(e,t){var i;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=null==(i=this.player.controlBar)?void 0:i.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=x.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=x.t("player.volumePercent",{percent:e});break}case"mute":t=x.t(this.player.state.muted?"player.muted":"player.unmuted");break;case"fullscreen":t=x.t(this.player.state.fullscreen?"player.fullscreen":"player.exitFullscreen");break;case"captions":t=x.t(this.player.state.captionsEnabled?"player.captionsOn":"player.captionsOff");break;case"speed-up":case"speed-down":t=x.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 ft(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}me(),F(),H(),oe(),K();var vt=new WeakMap;function bt(e,t,i,s){const a=vt.get(e);if(a&&(a.observer.unobserve(e),vt.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),vt.delete(e.target),s(e.target,t))})},{rootMargin:i,threshold:0});n.observe(e),vt.set(e,{observer:n,options:t})}var wt=class{constructor(e){n(this,"player"),n(this,"originalScrollX"),n(this,"originalScrollY"),n(this,"originalBodyOverflow"),n(this,"originalBodyPosition"),n(this,"originalBodyWidth"),n(this,"originalBodyHeight"),n(this,"originalHtmlOverflow"),n(this,"originalBodyBackground"),n(this,"originalHtmlBackground"),n(this,"originalViewport"),n(this,"inertElements",[]),this.player=e}enable(){var e;const{player:t}=this;t.state.fullscreen=!0,t.container.classList.add(`${t.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=null==(e=document.querySelector('meta[name="viewport"]'))?void 0:e.getAttribute("content");const i=document.querySelector('meta[name="viewport"]');i&&i.setAttribute("content","width=device-width, initial-scale=1.0"),window.scrollTo(0,0),this.makeBackgroundInert(),t.emit("fullscreenchange",!0),t.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();var St=["dark","light","minimal","high-contrast"];function Mt(e){return/^--vidply-[A-Za-z0-9_-]{1,64}$/.test(e)}function Tt(e){return!("string"!=typeof e||e.length>200||/[<>{};@\\]/.test(e))}var kt=class{constructor(e){n(this,"player"),this.player=e}apply(){const e=this.player;if(!e.container)return;const t=St.map(t=>`${e.options.classPrefix}-theme-${t}`);e.container.classList.remove(...t);const i=e.options.theme;if(i&&St.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(E(t))continue;const s=t.startsWith("--vidply-")?t:`--vidply-${t}`;Mt(s)?Tt(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}`;Mt(s)&&Tt(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})}},Pt=class{constructor(e){n(this,"player"),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 dt(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"))}};d(),H(),K();var Et=class{constructor(e){n(this,"player"),n(this,"saveProgressThrottled",null),n(this,"resumeChecked",!1),n(this,"listenersAttached",!1),this.player=e}init(){this.listenersAttached||(this.listenersAttached=!0,this.saveProgressThrottled=function(e,t=100){let i=!1;return function(...s){i||(e.apply(this,s),i=!0,setTimeout(()=>i=!1,t))}}(()=>this.saveProgress(),5e3),this.player.on("timeupdate",()=>{var e;this.player.state.playing&&this.player.state.duration>0&&(null==(e=this.saveProgressThrottled)||e.call(this))}),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(t){const i=this.player;if(i.state.resumePromptVisible||!i.container)return;const s=this.formatTime(t),a=x.t("resume.prompt",{time:s});i.resumePromptElement=e.createElement("div",{className:`${i.options.classPrefix}-resume-prompt`,attributes:{role:"dialog","aria-label":a,"aria-modal":"true"}});const n=e.createElement("div",{className:`${i.options.classPrefix}-resume-prompt-content`}),r=e.createElement("p",{className:`${i.options.classPrefix}-resume-prompt-message`,textContent:a}),o=e.createElement("div",{className:`${i.options.classPrefix}-resume-prompt-buttons`}),l=e.createElement("button",{className:`${i.options.classPrefix}-resume-prompt-button ${i.options.classPrefix}-resume-prompt-button-primary`,textContent:x.t("resume.resume"),attributes:{type:"button"}});l.addEventListener("click",()=>{this.hidePrompt(),i.seek(t),i.play()});const d=e.createElement("button",{className:`${i.options.classPrefix}-resume-prompt-button`,textContent:x.t("resume.startOver"),attributes:{type:"button"}});d.addEventListener("click",()=>{this.hidePrompt();const e=i.getVideoId();e&&i.storage.clearWatchProgress(e),i.seek(0),i.play()}),i.resumePromptElement.addEventListener("keydown",e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),this.hidePrompt())}),o.appendChild(l),o.appendChild(d),n.appendChild(r),n.appendChild(o),i.resumePromptElement.appendChild(n),i.container.appendChild(i.resumePromptElement),i.state.resumePromptVisible=!0,requestAnimationFrame(()=>{l.focus()}),i.emit("resumepromptshow",{savedTime:t})}hidePrompt(){const e=this.player;e.resumePromptElement&&(e.resumePromptElement.remove(),e.resumePromptElement=null,e.state.resumePromptVisible=!1,e.emit("resumeprompthide"))}},Ct=class{constructor(e){n(this,"player"),n(this,"orientationQuery",null),n(this,"orientationHandler",null),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 wt(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}};K();var Lt=class{constructor(e){n(this,"player"),n(this,"cueChangeHandler",null),n(this,"alertHandlers",new Map),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={}){var i,s;if(!e)return;const a=t.messageSelector||"[data-vidply-alert-message], p",n=e.querySelector(t.titleSelector||"[data-vidply-alert-title], h3, header");n&&!n.dataset.vidplyAlertTitleOriginal&&(n.dataset.vidplyAlertTitleOriginal=(null==(i=n.textContent)?void 0:i.trim())??"");const r=e.querySelector(a);r&&!r.dataset.vidplyAlertMessageOriginal&&(r.dataset.vidplyAlertMessageOriginal=(null==(s=r.textContent)?void 0:s.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){var i,s,a;if(!e||"none"===e)return;if("alert"===e&&t)return void t.focus({preventScroll:!0});const n=this.player;if("player"!==e)if("media"!==e){if("playButton"===e){const e=null==(a=null==(s=n.controlBar)?void 0:s.controls)?void 0:a.playPause;return void(null==e||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 n.element.focus({preventScroll:!0});else null==(i=n.container)||i.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}},xt=null,Dt=null,At=null,zt=["video","audio"],_t=0,Rt=class t extends lt{constructor(e,t={}){if(super(),n(this,"element"),n(this,"container"),n(this,"options"),n(this,"state"),n(this,"renderer",null),n(this,"controlBar",null),n(this,"captionManager",null),n(this,"keyboardManager",null),n(this,"transcriptManager",null),n(this,"playlistManager",null),n(this,"settingsDialog",null),n(this,"audioDescriptionManager",null),n(this,"signLanguageManager",null),n(this,"floatingPlayerManager",null),n(this,"storage"),n(this,"instanceId"),n(this,"_audioDescriptionDesiredState"),n(this,"_fallbackSources",null),n(this,"_isAudioContent"),n(this,"_isFallingBack"),n(this,"_managersLoading",null),n(this,"_originalElement"),n(this,"pseudoFullscreen",null),n(this,"themeManager"),n(this,"posterManager"),n(this,"resumeManager",null),n(this,"responsiveManager"),n(this,"metadataAlertsManager",null),n(this,"_pendingSource",null),n(this,"_sourceElementsCache",null),n(this,"_sourceElementsDirty",!0),n(this,"_switchingRenderer"),n(this,"_trackElementsCache",null),n(this,"_trackElementsDirty",!0),n(this,"_textTracksCache",null),n(this,"_textTracksDirty"),n(this,"audioDescriptionCaptionTracks",[]),n(this,"audioDescriptionSourceElement",null),n(this,"audioDescriptionSrc",null),n(this,"currentSignLanguage",null),n(this,"currentSource",null),n(this,"debouncedPositionPlayOverlay",null),n(this,"fullscreenChangeHandler",null),n(this,"metadataCueChangeHandler",null),n(this,"noticeElement",null),n(this,"noticeTimeout",null),n(this,"orientationHandler",null),n(this,"orientationQuery",null),n(this,"originalAudioDescriptionSource",null),n(this,"originalSrc",null),n(this,"playButtonOverlay",null),n(this,"resizeHandler",null),n(this,"resizeObserver",null),n(this,"resumePromptElement",null),n(this,"signLanguageDraggable",null),n(this,"signLanguageHeader",null),n(this,"signLanguageSettingsButton",null),n(this,"signLanguageSettingsMenu",null),n(this,"signLanguageSettingsMenuVisible",!1),n(this,"signLanguageSources",{}),n(this,"signLanguageSrc",null),n(this,"signLanguageVideo",null),n(this,"signLanguageWrapper",null),n(this,"timeouts",new Set),n(this,"trackArtworkElement",null),n(this,"videoWrapper",null),n(this,"loadingOverlayElement",null),n(this,"_bufferingHideOnMediaPlaying",null),n(this,"_lifecycleController",new AbortController),this.element="string"==typeof e?document.querySelector(e):e,!this.element)throw new Error("VidPly: Element not found");if(_t++,this.instanceId=_t,"VIDEO"!==this.element.tagName&&"AUDIO"!==this.element.tagName){const e="string"==typeof t.mediaType?t.mediaType.toLowerCase():"video",i=zt.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 ee("vidply"),this.themeManager=new kt(this),this.posterManager=new Pt(this),this.responsiveManager=new Ct(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:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.wrapper},set:e=>{this.signLanguageManager&&(this.signLanguageManager.wrapper=e)}},signLanguageVideo:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.video},set:e=>{this.signLanguageManager&&(this.signLanguageManager.video=e)}},signLanguageHeader:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.header},set:e=>{this.signLanguageManager&&(this.signLanguageManager.header=e)}},signLanguageSettingsButton:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.settingsButton},set:e=>{this.signLanguageManager&&(this.signLanguageManager.settingsButton=e)}},signLanguageSettingsMenu:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.settingsMenu},set:e=>{this.signLanguageManager&&(this.signLanguageManager.settingsMenu=e)}},signLanguageSettingsMenuVisible:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.settingsMenuVisible},set:e=>{this.signLanguageManager&&(this.signLanguageManager.settingsMenuVisible=e)}},signLanguageDraggable:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.draggable},set:e=>{this.signLanguageManager&&(this.signLanguageManager.draggable=e)}},currentSignLanguage:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.currentLanguage},set:e=>{this.signLanguageManager&&(this.signLanguageManager.currentLanguage=e)}}}),this.init()}static observeLazy(e,i={},s="200px"){const a="string"==typeof e?document.querySelector(e):e;return a?"IntersectionObserver"in window?(bt(a,i,s,(e,i)=>{new t(e,i)}),{cancel:()=>(e=>{const t=vt.get(e);t&&(t.observer.unobserve(e),vt.delete(e))})(a)}):(new t(a,i),null):(console.warn("VidPly: Element not found for lazy observation"),null)}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"}={}){var s;try{if(!e)return;if(!this.container)return;if((null==(s=this.keyboardManager)?void 0:s.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 a=this.noticeElement;a.textContent=e,a.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(){var e,t;try{if(this.log("Initializing VidPly player"),this.options.languageFiles)try{await x.loadLanguagesFromUrls(this.options.languageFiles)}catch(e){console.warn("Failed to load some language files:",e)}if(this.options.languageFile&&this.options.languageFileUrl)try{await x.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 x.ensureLanguage(this.options.language),x.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||(null==(e=this.element.querySelector("source"))?void 0:e.src)?await this.initializeRenderer():this.log("No initial source - waiting for playlist or manual load"),await this.initFeatureManagers(),this.options.controls&&(this.controlBar=new mt(this),null==(t=this.videoWrapper)||t.appendChild(this.controlBar.element)),this.options.captions&&(this.captionManager=new de(this)),this.options.transcript&&await this.ensureTranscriptManager(),this.setupMetadataHandling(),this.options.keyboard&&(this.keyboardManager=new yt(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 Promise.resolve().then(()=>(We(),Ie)),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(!xt){const e=await Promise.resolve().then(()=>(ve(),ye));xt=e.AudioDescriptionManager}return xt})();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(!Dt){const e=await Promise.resolve().then(()=>(He(),ze));Dt=e.SignLanguageManager}return Dt})();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(!At){const e=await Promise.resolve().then(()=>(Fe(),$e));At=e.FloatingPlayerManager}return At})();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?x.translations[t]||x.builtInLanguageLoaders&&x.builtInLanguageLoaders[t]?t:(this.log(`Language "${e}" not available, using English as fallback`),null):null}initResumePlayback(){this.resumeManager||(this.resumeManager=new Et(this)),this.resumeManager.init()}getVideoId(){var e,t,i;const s=this.element.getAttribute("data-video-id")||this.element.dataset.videoId||(null==(e=this._originalElement)?void 0:e.getAttribute("data-video-id"))||(null==(i=null==(t=this._originalElement)?void 0:t.dataset)?void 0:i.videoId);if(s)return s;let a=this.element.src;if(!a){const e=this.element.querySelector("source");a=null==e?void 0:e.src}return a?this._hashString(a):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(){var e;null==(e=this.resumeManager)||e.saveProgress()}checkForResume(){var e;null==(e=this.resumeManager)||e.checkForResume()}showResumePrompt(e){var t;null==(t=this.resumeManager)||t.showPrompt(e)}hideResumePrompt(){var e;null==(e=this.resumeManager)||e.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(){var i;const s=this.instanceId>1?`${x.t("player.label")} ${this.instanceId}`:x.t("player.label");this.container=e.createElement("div",{className:`${this.options.classPrefix}-player`,attributes:{role:"region","aria-label":s,tabindex:"0"}});const a=this.element.tagName.toLowerCase();if(this.container.classList.add(`${this.options.classPrefix}-${a}`),this.options.responsive&&this.container.classList.add(`${this.options.classPrefix}-responsive`),this.videoWrapper=e.createElement("div",{className:`${this.options.classPrefix}-video-wrapper`}),null==(i=this.element.parentNode)||i.insertBefore(this.container,this.element),"AUDIO"===this.element.tagName&&this.options.poster){const t=ft(this.options.poster);t?(this.trackArtworkElement=e.createElement("div",{className:`${this.options.classPrefix}-track-artwork`,attributes:{"aria-hidden":"true"}}),this.trackArtworkElement.style.backgroundImage=`url("${n=t,n.replace(/["()\\]/g,e=>`\\${e}`)}")`,this.container.appendChild(this.trackArtworkElement)):this.log("[VidPly] Ignored unsafe poster URL","warn")}var n;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=ft(this.resolvePosterPath(this.options.poster));e&&(this.element.poster=e)}"VIDEO"===this.element.tagName&&this.createPlayButtonOverlay(),this.createBufferingLoadingOverlay(),this.element.vidply=this,t.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(){var e;const t=(()=>{const e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttribute("class","vidply-play-overlay"),e.setAttribute("viewBox","0 0 80 80"),e.setAttribute("width","80"),e.setAttribute("height","80"),e.setAttribute("aria-hidden","true"),e.setAttribute("role","presentation"),e.style.cursor="pointer";const t=document.createElementNS("http://www.w3.org/2000/svg","defs"),i=`vidply-play-shadow-${Math.random().toString(36).slice(2,11)}`,s=document.createElementNS("http://www.w3.org/2000/svg","filter");s.setAttribute("id",i),s.setAttribute("x","-50%"),s.setAttribute("y","-50%"),s.setAttribute("width","200%"),s.setAttribute("height","200%");const a=document.createElementNS("http://www.w3.org/2000/svg","feGaussianBlur");a.setAttribute("in","SourceAlpha"),a.setAttribute("stdDeviation","3");const n=document.createElementNS("http://www.w3.org/2000/svg","feOffset");n.setAttribute("dx","0"),n.setAttribute("dy","2"),n.setAttribute("result","offsetblur");const r=document.createElementNS("http://www.w3.org/2000/svg","feComponentTransfer"),o=document.createElementNS("http://www.w3.org/2000/svg","feFuncA");o.setAttribute("type","linear"),o.setAttribute("slope","0.3"),r.appendChild(o);const l=document.createElementNS("http://www.w3.org/2000/svg","feMerge"),d=document.createElementNS("http://www.w3.org/2000/svg","feMergeNode"),h=document.createElementNS("http://www.w3.org/2000/svg","feMergeNode");h.setAttribute("in","SourceGraphic"),l.appendChild(d),l.appendChild(h),s.appendChild(a),s.appendChild(n),s.appendChild(r),s.appendChild(l),t.appendChild(s),e.appendChild(t);const c=document.createElementNS("http://www.w3.org/2000/svg","circle");c.setAttribute("cx","40"),c.setAttribute("cy","40"),c.setAttribute("r","40"),c.setAttribute("fill","rgba(255, 255, 255, 0.95)"),c.setAttribute("filter",`url(#${i})`),c.setAttribute("class","vidply-play-overlay-bg"),e.appendChild(c);const u=document.createElementNS("http://www.w3.org/2000/svg","polygon");return u.setAttribute("points","32,28 32,52 54,40"),u.setAttribute("fill","#0a406e"),u.setAttribute("class","vidply-play-overlay-icon"),e.appendChild(u),e})();this.playButtonOverlay=t,t.addEventListener("click",()=>{this.toggle()}),null==(e=this.videoWrapper)||e.appendChild(t),this.on("play",()=>{t.style.opacity="0",t.style.pointerEvents="none"}),this.on("pause",()=>{t.style.opacity="1",t.style.pointerEvents="auto",this.positionPlayOverlayOnMobile()}),this.on("ended",()=>{t.style.opacity="1",t.style.pointerEvents="auto",this.positionPlayOverlayOnMobile()});const i=W(()=>{this.positionPlayOverlayOnMobile()},150);this.debouncedPositionPlayOverlay=i,window.addEventListener("resize",i,{signal:this.lifecycleSignal}),this.on("loadedmetadata",()=>{this.positionPlayOverlayOnMobile()}),this.on("enterfullscreen",()=>{j(()=>this.positionPlayOverlayOnMobile(),100)}),this.on("exitfullscreen",()=>{j(()=>this.positionPlayOverlayOnMobile(),100)})}createBufferingLoadingOverlay(){if(!this.videoWrapper)return;const t=this.options.classPrefix,i=x.t("player.buffering"),s=e.createElement("div",{className:`${t}-loading`,attributes:{"aria-busy":"false"}}),a=e.createElement("span",{className:`${t}-sr-only`,attributes:{id:`${t}-buffering-live-${this.instanceId}`,"aria-live":"polite","aria-atomic":"true"}});s.appendChild(a),this.loadingOverlayElement=s,this.videoWrapper.appendChild(s);const n=()=>{var e;return null==(e=this.container)?void 0:e.classList.contains(`${t}-external-controls`)},r=()=>{this.container.classList.contains(`${t}-buffering`)&&(this.container.classList.remove(`${t}-buffering`),s.setAttribute("aria-busy","false"),a.textContent="")};this.on("waiting",()=>{n()||(this.state.hasStartedPlayback||this.state.seeking)&&(this.container.classList.add(`${t}-buffering`),s.setAttribute("aria-busy","true"),a.textContent=i)}),this.on("canplay",r),this.on("pause",r),this.on("ended",r),this._bufferingHideOnMediaPlaying=r,this.element.addEventListener("playing",this._bufferingHideOnMediaPlaying),this.on("timeupdate",()=>{this.container.classList.contains(`${t}-buffering`)&&r()})}positionPlayOverlayOnMobile(){var e;if(!this.playButtonOverlay||"VIDEO"!==this.element.tagName)return;if(!q())return void(this.playButtonOverlay.style.top="");const t=this.element.getBoundingClientRect(),i=null==(e=this.videoWrapper)?void 0:e.getBoundingClientRect();i&&(this.playButtonOverlay.style.top=t.top-i.top+t.height/2+"px")}async initializeRenderer(){var e,t,i;let s=this._pendingSource,a=null;if(s)this._fallbackSources=[];else{const t=Array.from(this.element.querySelectorAll("source"));if(t.length>1){const e=this._selectBestSource(t);s=e.src,this._fallbackSources=e.fallbacks}else s=this.element.src||(null==(e=t[0])?void 0:e.src),this._fallbackSources=[]}if(!s)throw new Error("No media source found");this.currentSource=s,this._pendingSource=null,null==(t=this.audioDescriptionManager)||t.initFromSourceElements(this.sourceElements,this.trackElements),this.originalSrc||(this.originalSrc=s),a=await this._detectRendererClass(s),this.log(`Using ${(null==a?void 0:a.name)||"HTML5Renderer"} renderer`),this.renderer=new a(this);const n=((null==(i=this._fallbackSources)?void 0:i.length)??0)>0?1e4:0;if(n>0){let e;await Promise.race([this.renderer.init(),new Promise((t,i)=>{e=setTimeout(()=>i(new Error(`Renderer init timed out after ${n}ms`)),n)})]).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 Promise.resolve().then(()=>(Ye(),Ke));return e.YouTubeRenderer??e.default}if(e.includes("vimeo.com")){const e=await Promise.resolve().then(()=>(Je(),Xe));return e.VimeoRenderer??e.default}if(e.includes(".m3u8")){const e=await Promise.resolve().then(()=>(tt(),Ze));return e.HLSRenderer??e.default}if(e.includes(".mpd")){const e=await Promise.resolve().then(()=>(nt(),it));return e.DASHRenderer??e.default}if(e.includes("soundcloud.com")||e.includes("api.soundcloud.com")){const e=await Promise.resolve().then(()=>(ot(),rt));return e.SoundCloudRenderer??e.default}return he}_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:(null==a?void 0: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){var t,i;try{this.log("Loading new media:",e.src),this.renderer&&this.pause();const s=window.scrollX||window.pageXOffset,a=window.scrollY||window.pageYOffset;this.trackElements.forEach(e=>e.remove()),this.invalidateTrackCache();const n=this.isExternalRendererUrl(e.src);if(n&&(this._switchingRenderer=!0),n?(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 r=this.state.signLanguageEnabled,o=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),o&&this.disableAudioDescription(),r&&this.disableSignLanguage();const l=this.shouldChangeRenderer(e.src),d=!l&&this.renderer&&(this.renderer.dash||this.renderer.hls);if((l||d)&&this.renderer&&(this.renderer.destroy(),this.renderer=null,this.controlBar&&this.controlBar.removeHlsCaptionButtons(!0),(null==(t=this.transcriptManager)?void 0:t.isVisible)&&this.transcriptManager.hideTranscript()),!this.renderer||l||d)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(n?setTimeout(()=>{this._switchingRenderer=!1},500):this._switchingRenderer=!1,window.scrollTo(s,a),d)this.captionManager&&(this.captionManager.disable(),this.captionManager.tracks=[]),(null==(i=this.transcriptManager)?void 0:i.isVisible)&&this.transcriptManager.hideTranscript();else{if(this.captionManager&&(this.captionManager.destroy(),this.captionManager=new de(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()&&(null==t||t.showTranscript())}this.controlBar&&this.updateControlBar()}window.scrollTo(s,a),r&&this.signLanguageSrc&&setTimeout(()=>{this.enableSignLanguage(),window.scrollTo(s,a)},150),o&&this.audioDescriptionSrc&&setTimeout(()=>{this.enableAudioDescription(),window.scrollTo(s,a)},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 wt(this)),this.pseudoFullscreen.enable()}_disablePseudoFullscreen(){var e;null==(e=this.pseudoFullscreen)||e.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){var t;if("string"!=typeof e||!e)return!1;const i=[this.lifecycleSignal];"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&i.push(AbortSignal.timeout(8e3));const s=1===i.length?i[0]:(null==(t=AbortSignal.any)?void 0:t.call(AbortSignal,i))??i[0];try{return(await fetch(e,{method:"HEAD",cache:"no-cache",signal:s})).ok}catch(t){return this.options.debug&&this.log(`validateTrackExists("${e}") failed: ${(null==t?void 0: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 null==e?void 0:e.enable()}async disableAudioDescription(){const e=await this.ensureAudioDescriptionManager();return null==e?void 0:e.disable()}async toggleAudioDescription(){var e,t,i;if(this.options.requirePlaybackForAccessibilityToggles&&!this.renderer&&(null==(t=null==(e=this.playlistManager)?void 0:e.tracks)?void 0:t.length))return void this.showNotice(x.t("player.startPlaybackForAudioDescription"));const s=await this.ensureAudioDescriptionManager();return s?!this.renderer&&this.playlistManager&&(null==(i=this.playlistManager.tracks)?void 0:i.length)?(s.desiredState=!s.desiredState,this.state.audioDescriptionEnabled=s.desiredState,this.emit(s.desiredState?"audiodescriptionenabled":"audiodescriptiondisabled"),void this.play()):s.toggle():void 0}async enableSignLanguage(){const e=await this.ensureSignLanguageManager();return null==e?void 0:e.enable()}async disableSignLanguage(){const e=await this.ensureSignLanguageManager();return null==e?void 0:e.disable()}async toggleSignLanguage(){var e,t,i;if(this.options.requirePlaybackForAccessibilityToggles&&!this.renderer&&(null==(t=null==(e=this.playlistManager)?void 0:e.tracks)?void 0:t.length))return void this.showNotice(x.t("player.startPlaybackForSignLanguage"));const s=await this.ensureSignLanguageManager();if(s){if(!this.renderer&&this.playlistManager&&(null==(i=this.playlistManager.tracks)?void 0:i.length)){const e=s.enabled,t=s.toggle();return!e&&s.enabled&&this.play(),t}return s.toggle()}}setupSignLanguageInteraction(){var e;return null==(e=this.signLanguageManager)?void 0:e._setupInteraction()}switchSignLanguage(e){var t;return null==(t=this.signLanguageManager)?void 0:t.switchLanguage(e)}showSignLanguageSettingsMenu(){var e;return null==(e=this.signLanguageManager)?void 0:e.showSettingsMenu()}hideSignLanguageSettingsMenu({focusButton:e=!0}={}){var t;return null==(t=this.signLanguageManager)?void 0:t.hideSettingsMenu({focusButton:e})}constrainSignLanguagePosition(){var e;return null==(e=this.signLanguageManager)?void 0:e.constrainPosition()}saveSignLanguagePreferences(){var e;return null==(e=this.signLanguageManager)?void 0:e.savePreferences()}cleanupSignLanguage(){var e;return null==(e=this.signLanguageManager)?void 0:e.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(){var e,i;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),null==(e=this.responsiveManager)||e.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}null==(i=this.metadataAlertsManager)||i.cleanup();const s=t.instances.indexOf(this);s>=0&&t.instances.splice(s,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 Lt(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 Lt(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)}};n(Rt,"instances",[]),n(Rt,"THEMES",St);var Bt=Rt;function Vt(e){if(!e||"object"!=typeof e||Array.isArray(e))return{};const t=Object.create(null);for(const[i,s]of Object.entries(e))E(i)||(t[i]=s);return t}function Ht(){document.querySelectorAll("[data-vidply]").forEach(e=>{const t=(e=>{const t=e.dataset.vidplyOptions;if(!t)return{};try{return Vt(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(E(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=Vt(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=Vt(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?bt(e,s,e.dataset.vidplyLazyMargin||s.lazyMargin||"500px",(e,t)=>{new Bt(e,t)}):new Bt(e,s)})}d(),F(),H(),$(),K(),D(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",Ht):Ht()})();
6
+ "use strict";(()=>{var e,t=Object.defineProperty,i=Object.getOwnPropertyNames,s=(e,t,s)=>()=>{if(s)throw s[0];try{return e&&(t=(0,e[i(e)[0]])(e=0)),t}catch(e){throw s=[e],e}},a=(e,i)=>{for(var s in i)t(e,s,{get:i[s],enumerable:!0})},n=(e,i,s)=>((e,i,s)=>i in e?t(e,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[i]=s)(e,"symbol"!=typeof i?i+"":i,s);function r(e,t={}){const i=document.createElement(e);if(t.className&&(i.className=t.className),t.attributes)for(const[e,s]of Object.entries(t.attributes))void 0!==s&&i.setAttribute(e,s);if(t.textContent&&(i.textContent=t.textContent),t.style&&Object.assign(i.style,t.style),t.children)for(const e of t.children)e&&i.appendChild(e);return i}var o,l,d=s({"src/utils/DOMUtils.ts"(){e={createElement:r,show(e){(null==e?void 0:e.style)&&(e.style.display="")},hide(e){(null==e?void 0:e.style)&&(e.style.display="none")},fadeIn(e,t=300,i){if(e&&(e.style.opacity="0",e.style.display="",e.style.transition=`opacity ${t}ms ease`,e.style.opacity="1",i)){let s=!1;const a=()=>{s||(s=!0,e.removeEventListener("transitionend",a),i())};e.addEventListener("transitionend",a,{once:!0}),setTimeout(a,t+50)}},fadeOut(e,t=300,i){if(!e)return;e.style.transition=`opacity ${t}ms ease`,e.style.opacity="0";let s=!1;const a=()=>{s||(s=!0,e.removeEventListener("transitionend",a),e.style.display="none",i&&i())};e.addEventListener("transitionend",a,{once:!0}),setTimeout(a,t+50)},offset(e){if(!e)return{top:0,left:0,width:0,height:0};const t=e.getBoundingClientRect();return{top:t.top+window.scrollY,left:t.left+window.scrollX,width:t.width,height:t.height}},escapeHTML(e){const t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;"};return e.replace(/[&<>"']/g,e=>t[e]??e)},renderVTTToDOM(e){const t=e.length>1e4?e.slice(0,1e4):e,i=document.createDocumentFragment(),s=[],a=e=>{(s[s.length-1]??i).appendChild(e)},n=/<(\/)?([a-z])(?:\.([\w.-]{1,200}))?(?:\s+([^<>]{0,500}))?>/i;let r=0;for(;r<t.length;){const e=t.slice(r),i=n.exec(e);if(!i||void 0===i.index){a(document.createTextNode(e));break}i.index>0&&a(document.createTextNode(e.slice(0,i.index)));const[,o,l,d,h]=i,c=(l||"").toLowerCase();if(o){const e=s[s.length-1];e&&e.dataset.vttTag===c&&s.pop()}else if("b"===c||"i"===c||"u"===c){const e=document.createElement("b"===c?"strong":"i"===c?"em":"u");e.dataset.vttTag=c,a(e),s.push(e)}else if("c"===c){const e=document.createElement("span");if(e.dataset.vttTag=c,e.classList.add("caption-class"),d)for(const t of d.split(".").filter(Boolean))/^[\w-]+$/.test(t)&&e.classList.add(`caption-class-${t}`);a(e),s.push(e)}else if("v"===c){const e=document.createElement("span");e.dataset.vttTag=c,e.classList.add("caption-voice"),h&&(e.dataset.voice=h.trim().slice(0,200)),a(e),s.push(e)}else a(document.createTextNode(i[0]));r+=i.index+i[0].length}return i},createTooltip(e,t="vidply"){return this.createElement("span",{className:`${t}-tooltip`,textContent:e,attributes:{"aria-hidden":"true"}})},attachTooltip(e,t,i="vidply"){var s;if(!e||!t)return;null==(s=e.querySelector(`.${i}-tooltip`))||s.remove();const a=this.createTooltip(t,i);e.appendChild(a);const n=`${i}-tooltip-visible`,r=()=>a.classList.add(n),o=()=>a.classList.remove(n);e.addEventListener("mouseenter",r),e.addEventListener("mouseleave",o),e.addEventListener("focus",r),e.addEventListener("blur",o)},createButtonText(e,t="vidply"){return this.createElement("span",{className:`${t}-button-text`,textContent:e,attributes:{"aria-hidden":"true"}})},addClass(e,t){var i;null==(i=null==e?void 0:e.classList)||i.add(t)},removeClass(e,t){var i;null==(i=null==e?void 0:e.classList)||i.remove(t)},toggleClass(e,t){var i;null==(i=null==e?void 0:e.classList)||i.toggle(t)},hasClass(e,t){var i;return(null==(i=null==e?void 0:e.classList)?void 0:i.contains(t))??!1}}}}),h=s({"src/i18n/languages/en.ts"(){o={player:{label:"Video Player",play:"Play",pause:"Pause",stop:"Stop",restart:"Restart from beginning",rewind:"Rewind",forward:"Forward",rewindSeconds:"Rewind {seconds} seconds",forwardSeconds:"Forward {seconds} seconds",previous:"Previous track",next:"Next track",playlist:"Toggle playlist",volume:"Volume",mute:"Mute",unmute:"Unmute",fullscreen:"Fullscreen",exitFullscreen:"Exit Fullscreen",captions:"Captions",chapters:"Chapters",quality:"Quality",captionStyling:"Caption styling",transcript:"Toggle transcript",audioDescription:"Audio description",signLanguage:"Sign language video",settings:"Settings",speed:"Playback Speed",pip:"Picture in Picture",floatingPlayer:"Floating player",floatingPlayerClose:"Close floating player",floatingPlayerEnter:"Pop out video",floatingPlayerExit:"Dock video",floatingPlayerDialog:"Floating video player. Press D to drag, R to resize, Escape to close.",download:"Download",downloadWithFormat:"Download {format}",downloadWithSize:"Download ({size})",downloadWithFormatSize:"Download {format} ({size})",currentTime:"Current time",duration:"Duration",progress:"Progress",seekForward:"Seek forward {seconds} seconds",seekBackward:"Seek backward {seconds} seconds",volumeUp:"Volume up",volumeDown:"Volume down",loading:"Loading...",loadingChapters:"Loading chapters...",error:"Error loading media",buffering:"Buffering...",signLanguageVideo:"Sign Language Video",closeSignLanguage:"Close sign language video",signLanguageSettings:"Sign language settings",startPlaybackFirst:"Please start playback first.",startPlaybackForAudioDescription:"Please start playback first to use audio description.",startPlaybackForSignLanguage:"Please start playback first to use sign language video.",noChapters:"No chapters available",noCaptions:"No captions available",auto:"Auto",autoQuality:"Auto (no quality selection available)",noQuality:"Quality selection not available",signLanguageDragResize:"Sign Language Video - Press D to drag with keyboard, R to resize",signLanguageDragActive:"Sign Language Video - Drag mode active. Use arrow keys to move, Escape to exit.",signLanguageResizeActive:"Sign Language Video - Resize mode active. Use left/right arrow keys to resize, Escape to exit.",enableSignDragMode:"Enable drag mode. Shortcut: D key",disableSignDragMode:"Disable drag mode. Shortcut: D key",enableSignDragModeAria:"Enable toggle keyboard drag mode with arrow keys. Shortcut: D key",disableSignDragModeAria:"Disable toggle keyboard drag mode with arrow keys. Shortcut: D key",enableSignResizeMode:"Enable resize mode. Shortcut: R key",disableSignResizeMode:"Disable resize mode. Shortcut: R key",enableSignResizeModeAria:"Enable keyboard resize mode with arrow keys. Shortcut: R key",disableSignResizeModeAria:"Disable keyboard resize mode with arrow keys. Shortcut: R key",signDragModeHint:"Drag mode: arrow keys to move, Esc to exit",signResizeModeHint:"Resize mode: arrow keys to resize, Esc to exit",signDragModeDisabled:"Sign language drag mode disabled.",signResizeModeDisabled:"Sign language resize mode disabled.",resizeHandle:"Resize {direction} corner",moreOptions:"More options",noMoreOptions:"No additional options available",playing:"Playing",paused:"Paused",muted:"Muted",unmuted:"Unmuted",captionsOn:"Captions on",captionsOff:"Captions off",volumePercent:"Volume {percent} percent",volumePercentMuted:"Muted",speedRate:"Speed {rate}x"},captions:{off:"Off",select:"Select captions",fontSize:"Font Size",fontFamily:"Font Family",color:"Text Color",backgroundColor:"Background Color",opacity:"Opacity"},fontSizes:{small:"Small",normal:"Normal",large:"Large",xlarge:"X-Large"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Text Color",background:"Background",font:"Font",fontSize:"Font Size",opacity:"Opacity"},audioDescription:{enable:"Enable audio description",disable:"Disable audio description"},signLanguage:{show:"Show sign language video",hide:"Hide sign language video",showInMainView:"Show sign language in main video",hideInMainView:"Hide sign language from main video"},transcript:{title:"Transcript",ariaLabel:"Video Transcript",close:"Close transcript",loading:"Loading transcript...",noTranscript:"No transcript available for this video.",settings:"Transcript settings. Press Enter to open menu, or D to enable drag mode",keyboardDragMode:"Toggle keyboard drag mode with arrow keys. Shortcut: D key",keyboardDragActive:"⌨️ Keyboard Drag Mode Active (Arrow keys to move, Shift+Arrows for large steps, D or ESC to exit)",dragResizePrompt:"Press D to drag or R to resize. Use Home to reset position, Esc to close.",dragModeEnabled:"Keyboard drag mode enabled. Use arrow keys to move, Shift+Arrow for larger steps. Press D or Esc to exit.",dragModeDisabled:"Keyboard drag mode disabled.",enableDragMode:"Enable drag mode. Shortcut: D key",disableDragMode:"Disable drag mode. Shortcut: D key",enableDragModeAria:"Enable toggle keyboard drag mode with arrow keys. Shortcut: D key",disableDragModeAria:"Disable toggle keyboard drag mode with arrow keys. Shortcut: D key",resizeWindow:"Resize Window",disableResizeWindow:"Disable Resize Mode",enableResizeMode:"Enable resize mode. Shortcut: R key",disableResizeMode:"Disable resize mode. Shortcut: R key",enableResizeModeAria:"Enable keyboard resize mode with arrow keys. Shortcut: R key",disableResizeModeAria:"Disable keyboard resize mode with arrow keys. Shortcut: R key",resizeModeHint:"Resize handles enabled. Drag edges or corners to adjust. Press Esc or R to exit.",resizeModeEnabled:"Resize mode enabled. Drag edges or corners to adjust. Press Esc or R to exit.",resizeModeDisabled:"Resize mode disabled.",dragModeBadge:"Drag mode: arrow keys to move, Esc to exit",resizeModeBadge:"Resize mode: drag edges or corners, Esc to exit",positionReset:"Transcript position reset.",styleTranscript:"Open transcript style settings",closeMenu:"Close Menu",styleTitle:"Transcript Style",autoscroll:"Autoscroll",settingsMenu:"Transcript dialog settings",showTimestamps:"Show timestamps",hideTimestamps:"Hide timestamps",showTimestampsAria:"Show timestamps in transcript",hideTimestampsAria:"Hide timestamps in transcript",seekTo:"Seek to {time}"},settings:{title:"Settings",quality:"Quality",speed:"Speed",captions:"Captions",language:"Language",reset:"Reset to defaults",close:"Close"},help:{title:"Keyboard shortcuts",button:"Keyboard shortcuts",close:"Close",or:"or",keys:{space:"Space"},actions:{"play-pause":"Play / Pause","seek-backward":"Seek backward","seek-forward":"Seek forward","volume-up":"Volume up","volume-down":"Volume down",mute:"Mute / Unmute",captions:"Toggle captions","caption-style-menu":"Caption styling","speed-down":"Decrease speed","speed-up":"Increase speed","speed-menu":"Playback speed","quality-menu":"Quality","chapters-menu":"Chapters","transcript-toggle":"Toggle transcript",fullscreen:"Toggle fullscreen",help:"Keyboard shortcuts"}},speeds:{normal:"Normal"},time:{display:"Time display",durationPrefix:"Duration: ",of:"of",hour:"{count} hour",hours:"{count} hours",minute:"{count} minute",minutes:"{count} minutes",second:"{count} second",seconds:"{count} seconds"},resume:{prompt:"Resume from {time}?",resume:"Resume",startOver:"Start Over"},playlist:{title:"Playlist",trackOf:"Track {current} of {total}",nowPlaying:"Now playing: Track {current} of {total}. {title}{artist}",by:" by ",untitled:"Untitled",trackUntitled:"Track {number}",currentlyPlaying:"Currently playing",notPlaying:"Not playing",pressEnterPlay:"Press Enter to play",pressEnterRestart:"Press Enter to restart",keyboardInstructions:"Playlist navigation: Use Up and Down arrow keys to move between tracks. Press Page Up or Page Down to skip 5 tracks. Press Home to go to first track, End to go to last track. Press Enter or Space to play the selected track.",endOfPlaylist:"End of playlist. {current} of {total}.",beginningOfPlaylist:"Beginning of playlist. 1 of {total}.",jumpedToLastTrack:"Jumped to last track. {current} of {total}.",jumpedToFirstTrack:"Jumped to first track. 1 of {total}.",firstTrack:"First track. 1 of {total}.",lastTrack:"Last track. {current} of {total}."}}}}),c={};a(c,{de:()=>l});var u,p=s({"src/i18n/languages/de.ts"(){l={player:{label:"Videoplayer",play:"Abspielen",pause:"Pause",stop:"Stopp",restart:"Von vorne beginnen",rewind:"Zurückspulen",forward:"Vorspulen",rewindSeconds:"{seconds} Sekunden zurückspulen",forwardSeconds:"{seconds} Sekunden vorspulen",previous:"Vorheriger Titel",next:"Nächster Titel",playlist:"Wiedergabeliste umschalten",volume:"Lautstärke",mute:"Stumm",unmute:"Ton ein",fullscreen:"Vollbild",exitFullscreen:"Vollbild beenden",captions:"Untertitel",chapters:"Kapitel",quality:"Qualität",captionStyling:"Untertitel-Stil",transcript:"Transkript umschalten",audioDescription:"Audiodeskription",signLanguage:"Gebärdensprache-Video",settings:"Einstellungen",speed:"Wiedergabegeschwindigkeit",pip:"Bild-in-Bild",floatingPlayer:"Schwebender Player",floatingPlayerClose:"Schwebenden Player schließen",floatingPlayerEnter:"Video ausklappen",floatingPlayerExit:"Video andocken",floatingPlayerDialog:"Schwebender Videoplayer. D zum Verschieben, R zum Größenändern, Escape zum Schließen.",download:"Herunterladen",downloadWithFormat:"Herunterladen {format}",downloadWithSize:"Herunterladen ({size})",downloadWithFormatSize:"Herunterladen {format} ({size})",currentTime:"Aktuelle Zeit",duration:"Dauer",progress:"Fortschritt",seekForward:"{seconds} Sekunden vorspulen",seekBackward:"{seconds} Sekunden zurückspulen",volumeUp:"Lauter",volumeDown:"Leiser",loading:"Lädt...",loadingChapters:"Kapitel werden geladen...",error:"Fehler beim Laden",buffering:"Puffern...",signLanguageVideo:"Gebärdensprache-Video",closeSignLanguage:"Gebärdensprache-Video schließen",signLanguageSettings:"Gebärdensprache-Einstellungen",startPlaybackFirst:"Bitte starten Sie die Wiedergabe zuerst.",startPlaybackForAudioDescription:"Bitte starten Sie die Wiedergabe zuerst, um die Audiodeskription zu nutzen.",startPlaybackForSignLanguage:"Bitte starten Sie die Wiedergabe zuerst, um das Gebärdensprache-Video zu nutzen.",noChapters:"Keine Kapitel verfügbar",noCaptions:"Keine Untertitel verfügbar",auto:"Automatisch",autoQuality:"Automatisch (keine Qualitätsauswahl verfügbar)",noQuality:"Qualitätsauswahl nicht verfügbar",signLanguageDragResize:"Gebärdensprache-Video - Drücken Sie D zum Verschieben per Tastatur, R zum Ändern der Größe",signLanguageDragActive:"Gebärdensprache-Video - Verschiebemodus aktiv. Pfeiltasten zum Bewegen, Escape zum Beenden.",signLanguageResizeActive:"Gebärdensprache-Video - Größenänderungsmodus aktiv. Links-/Rechts-Pfeiltasten zum Ändern der Größe, Escape zum Beenden.",enableSignDragMode:"Verschiebemodus aktivieren. Tastenkombination: D-Taste",disableSignDragMode:"Verschiebemodus deaktivieren. Tastenkombination: D-Taste",enableSignDragModeAria:"Tastatur-Verschiebemodus mit Pfeiltasten aktivieren. Tastenkombination: D-Taste",disableSignDragModeAria:"Tastatur-Verschiebemodus mit Pfeiltasten deaktivieren. Tastenkombination: D-Taste",enableSignResizeMode:"Größenänderungsmodus aktivieren. Tastenkombination: R-Taste",disableSignResizeMode:"Größenänderungsmodus deaktivieren. Tastenkombination: R-Taste",enableSignResizeModeAria:"Tastatur-Größenänderungsmodus mit Pfeiltasten aktivieren. Tastenkombination: R-Taste",disableSignResizeModeAria:"Tastatur-Größenänderungsmodus mit Pfeiltasten deaktivieren. Tastenkombination: R-Taste",signDragModeHint:"Verschiebemodus: Pfeiltasten zum Bewegen, Esc zum Beenden",signResizeModeHint:"Größenänderungsmodus: Pfeiltasten zum Ändern, Esc zum Beenden",signDragModeDisabled:"Verschiebemodus für Gebärdensprache-Video deaktiviert.",signResizeModeDisabled:"Größenänderungsmodus für Gebärdensprache-Video deaktiviert.",resizeHandle:"Größenänderung {direction}-Ecke",moreOptions:"Weitere Optionen",noMoreOptions:"Keine weiteren Optionen verfügbar",playing:"Wird abgespielt",paused:"Pausiert",muted:"Stummgeschaltet",unmuted:"Ton an",captionsOn:"Untertitel an",captionsOff:"Untertitel aus",volumePercent:"Lautstärke {percent} Prozent",volumePercentMuted:"Stummgeschaltet",speedRate:"Geschwindigkeit {rate}x"},captions:{off:"Aus",select:"Untertitel auswählen",fontSize:"Schriftgröße",fontFamily:"Schriftart",color:"Textfarbe",backgroundColor:"Hintergrundfarbe",opacity:"Deckkraft"},fontSizes:{small:"Klein",normal:"Normal",large:"Groß",xlarge:"Sehr groß"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Textfarbe",background:"Hintergrund",font:"Schrift",fontSize:"Schriftgröße",opacity:"Deckkraft"},audioDescription:{enable:"Audiodeskription aktivieren",disable:"Audiodeskription deaktivieren"},signLanguage:{show:"Gebärdensprache-Video anzeigen",hide:"Gebärdensprache-Video ausblenden",showInMainView:"Gebärdensprache im Hauptvideo anzeigen",hideInMainView:"Gebärdensprache aus Hauptvideo entfernen"},transcript:{title:"Transkript",ariaLabel:"Video-Transkript",close:"Transkript schließen",loading:"Transkript wird geladen...",noTranscript:"Kein Transkript für dieses Video verfügbar.",settings:"Transkript-Einstellungen. Eingabetaste zum Öffnen des Menüs drücken oder D zum Aktivieren des Verschiebemodus",keyboardDragMode:"Tastatur-Verschiebemodus mit Pfeiltasten umschalten. Tastenkombination: D-Taste",keyboardDragActive:"⌨️ Tastatur-Verschiebemodus aktiv (Pfeiltasten zum Bewegen, Umschalt+Pfeiltasten für große Schritte, D oder ESC zum Beenden)",dragResizePrompt:"Drücken Sie D zum Verschieben oder R zur Größenänderung. Home setzt die Position zurück, Esc schließt.",dragModeEnabled:"Tastatur-Verschiebemodus aktiviert. Pfeiltasten zum Bewegen, Umschalt+Pfeiltasten für größere Schritte. D oder Esc zum Beenden.",dragModeDisabled:"Tastatur-Verschiebemodus deaktiviert.",enableDragMode:"Verschiebemodus aktivieren. Tastenkombination: D-Taste",disableDragMode:"Verschiebemodus deaktivieren. Tastenkombination: D-Taste",enableDragModeAria:"Tastatur-Verschiebemodus mit Pfeiltasten aktivieren. Tastenkombination: D-Taste",disableDragModeAria:"Tastatur-Verschiebemodus mit Pfeiltasten deaktivieren. Tastenkombination: D-Taste",resizeWindow:"Fenster vergrößern/verkleinern",disableResizeWindow:"Resize-Modus deaktivieren",enableResizeMode:"Größenänderungsmodus aktivieren. Tastenkombination: R-Taste",disableResizeMode:"Größenänderungsmodus deaktivieren. Tastenkombination: R-Taste",enableResizeModeAria:"Tastatur-Größenänderungsmodus mit Pfeiltasten aktivieren. Tastenkombination: R-Taste",disableResizeModeAria:"Tastatur-Größenänderungsmodus mit Pfeiltasten deaktivieren. Tastenkombination: R-Taste",resizeModeHint:"Griffe aktiviert. Ziehen Sie Kanten oder Ecken zum Anpassen. Esc oder R zum Beenden.",resizeModeEnabled:"Resize-Modus aktiviert. Kanten oder Ecken ziehen; Esc oder R beendet.",resizeModeDisabled:"Resize-Modus deaktiviert.",dragModeBadge:"Verschiebemodus: Pfeiltasten zum Bewegen, Esc zum Beenden",resizeModeBadge:"Resize-Modus: Kanten oder Ecken ziehen, Esc zum Beenden",positionReset:"Transkriptposition zurückgesetzt.",styleTranscript:"Transkript-Stileinstellungen öffnen",closeMenu:"Menü schließen",styleTitle:"Transkript-Stil",autoscroll:"Auto-Scroll",settingsMenu:"Transkript-Dialog-Einstellungen",showTimestamps:"Zeitstempel anzeigen",hideTimestamps:"Zeitstempel ausblenden",showTimestampsAria:"Zeitstempel im Transkript anzeigen",hideTimestampsAria:"Zeitstempel im Transkript ausblenden",seekTo:"Springe zu {time}"},settings:{title:"Einstellungen",quality:"Qualität",speed:"Geschwindigkeit",captions:"Untertitel",language:"Sprache",reset:"Zurücksetzen",close:"Schließen"},help:{title:"Tastaturkürzel",button:"Tastaturkürzel",close:"Schließen",or:"oder",keys:{space:"Leertaste"},actions:{"play-pause":"Wiedergabe / Pause","seek-backward":"Zurückspulen","seek-forward":"Vorspulen","volume-up":"Lauter","volume-down":"Leiser",mute:"Stumm / Ton an",captions:"Untertitel umschalten","caption-style-menu":"Untertitel-Stil","speed-down":"Langsamer","speed-up":"Schneller","speed-menu":"Wiedergabegeschwindigkeit","quality-menu":"Qualität","chapters-menu":"Kapitel","transcript-toggle":"Transkript umschalten",fullscreen:"Vollbild umschalten",help:"Tastaturkürzel"}},speeds:{normal:"Normal"},time:{display:"Zeitanzeige",durationPrefix:"Dauer: ",of:"von",hour:"{count} Stunde",hours:"{count} Stunden",minute:"{count} Minute",minutes:"{count} Minuten",second:"{count} Sekunde",seconds:"{count} Sekunden"},resume:{prompt:"Bei {time} fortsetzen?",resume:"Fortsetzen",startOver:"Von vorne"},playlist:{title:"Wiedergabeliste",trackOf:"Titel {current} von {total}",nowPlaying:"Läuft gerade: Titel {current} von {total}. {title}{artist}",by:" von ",untitled:"Ohne Titel",trackUntitled:"Titel {number}",currentlyPlaying:"Wird gerade abgespielt",notPlaying:"Nicht aktiv",pressEnterPlay:"Eingabetaste zum Abspielen",pressEnterRestart:"Eingabetaste zum Neustart",keyboardInstructions:"Wiedergabelisten-Navigation: Verwenden Sie die Pfeiltasten nach oben und unten, um zwischen Titeln zu wechseln. Drücken Sie Bild auf oder Bild ab, um 5 Titel zu überspringen. Drücken Sie Pos1, um zum ersten Titel zu springen, Ende für den letzten Titel. Drücken Sie die Eingabetaste oder Leertaste, um den ausgewählten Titel abzuspielen.",endOfPlaylist:"Ende der Wiedergabeliste. {current} von {total}.",beginningOfPlaylist:"Anfang der Wiedergabeliste. 1 von {total}.",jumpedToLastTrack:"Zum letzten Titel gesprungen. {current} von {total}.",jumpedToFirstTrack:"Zum ersten Titel gesprungen. 1 von {total}.",firstTrack:"Erster Titel. 1 von {total}.",lastTrack:"Letzter Titel. {current} von {total}."}}}}),g={};a(g,{es:()=>u});var y,m=s({"src/i18n/languages/es.ts"(){u={player:{label:"Reproductor de video",play:"Reproducir",pause:"Pausa",stop:"Detener",restart:"Reiniciar desde el principio",rewind:"Retroceder",forward:"Avanzar",rewindSeconds:"Retroceder {seconds} segundos",forwardSeconds:"Avanzar {seconds} segundos",previous:"Pista anterior",next:"Siguiente pista",playlist:"Alternar lista de reproducción",volume:"Volumen",mute:"Silenciar",unmute:"Activar sonido",fullscreen:"Pantalla completa",exitFullscreen:"Salir de pantalla completa",captions:"Subtítulos",chapters:"Capítulos",quality:"Calidad",captionStyling:"Estilo de subtítulos",transcript:"Alternar transcripción",audioDescription:"Audiodescripción",signLanguage:"Video en lengua de señas",settings:"Configuración",speed:"Velocidad de reproducción",pip:"Imagen en imagen",floatingPlayer:"Reproductor flotante",floatingPlayerClose:"Cerrar reproductor flotante",floatingPlayerEnter:"Sacar el vídeo",floatingPlayerExit:"Anclar el vídeo",floatingPlayerDialog:"Reproductor de vídeo flotante. Pulsa D para mover, R para redimensionar, Escape para cerrar.",download:"Descargar",downloadWithFormat:"Descargar {format}",downloadWithSize:"Descargar ({size})",downloadWithFormatSize:"Descargar {format} ({size})",currentTime:"Tiempo actual",duration:"Duración",progress:"Progreso",seekForward:"Avanzar {seconds} segundos",seekBackward:"Retroceder {seconds} segundos",volumeUp:"Subir volumen",volumeDown:"Bajar volumen",loading:"Cargando...",loadingChapters:"Cargando capítulos...",error:"Error al cargar",buffering:"Almacenando en búfer...",signLanguageVideo:"Video en Lengua de Señas",closeSignLanguage:"Cerrar video en lengua de señas",signLanguageSettings:"Configuración de lengua de señas",noChapters:"No hay capítulos disponibles",noCaptions:"No hay subtítulos disponibles",auto:"Automático",autoQuality:"Automático (selección de calidad no disponible)",noQuality:"Selección de calidad no disponible",signLanguageDragResize:"Video en Lengua de Señas - Presione D para arrastrar con el teclado, R para cambiar el tamaño",signLanguageDragActive:"Video en Lengua de Señas - Modo de arrastre activo. Use las teclas de flecha para mover, Escape para salir.",signLanguageResizeActive:"Video en Lengua de Señas - Modo de cambio de tamaño activo. Use las teclas de flecha izquierda/derecha para cambiar el tamaño, Escape para salir.",enableSignDragMode:"Activar modo de arrastre. Atajo: tecla D",disableSignDragMode:"Desactivar modo de arrastre. Atajo: tecla D",enableSignDragModeAria:"Activar modo de arrastre con teclado usando teclas de flecha. Atajo: tecla D",disableSignDragModeAria:"Desactivar modo de arrastre con teclado usando teclas de flecha. Atajo: tecla D",enableSignResizeMode:"Activar modo de cambio de tamaño. Atajo: tecla R",disableSignResizeMode:"Desactivar modo de cambio de tamaño. Atajo: tecla R",enableSignResizeModeAria:"Activar modo de cambio de tamaño con teclado usando teclas de flecha. Atajo: tecla R",disableSignResizeModeAria:"Desactivar modo de cambio de tamaño con teclado usando teclas de flecha. Atajo: tecla R",signDragModeHint:"Modo de arrastre: flechas para mover, Esc para salir",signResizeModeHint:"Modo de cambio de tamaño: flechas para redimensionar, Esc para salir",signDragModeDisabled:"Modo de arrastre del video en lengua de señas desactivado.",signResizeModeDisabled:"Modo de cambio de tamaño del video en lengua de señas desactivado.",resizeHandle:"Cambiar tamaño esquina {direction}",moreOptions:"Más opciones",noMoreOptions:"No hay opciones adicionales disponibles",playing:"Reproduciendo",paused:"En pausa",muted:"Silenciado",unmuted:"Sonido activado",captionsOn:"Subtítulos activados",captionsOff:"Subtítulos desactivados",volumePercent:"Volumen {percent} por ciento",volumePercentMuted:"Silenciado",speedRate:"Velocidad {rate}x"},captions:{off:"Desactivado",select:"Seleccionar subtítulos",fontSize:"Tamaño de fuente",fontFamily:"Familia de fuente",color:"Color de texto",backgroundColor:"Color de fondo",opacity:"Opacidad"},fontSizes:{small:"Pequeño",normal:"Normal",large:"Grande",xlarge:"Muy grande"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Color de texto",background:"Fondo",font:"Fuente",fontSize:"Tamaño de fuente",opacity:"Opacidad"},audioDescription:{enable:"Activar audiodescripción",disable:"Desactivar audiodescripción"},signLanguage:{show:"Mostrar video en lengua de señas",hide:"Ocultar video en lengua de señas",showInMainView:"Mostrar lengua de señas en video principal",hideInMainView:"Ocultar lengua de señas del video principal"},transcript:{title:"Transcripción",ariaLabel:"Transcripción de video",close:"Cerrar transcripción",loading:"Cargando transcripción...",noTranscript:"No hay transcripción disponible para este video.",settings:"Configuración de transcripción. Presione Enter para abrir el menú o D para activar el modo de arrastre",keyboardDragMode:"Alternar modo de arrastre con teclado usando teclas de flecha. Atajo: tecla D",keyboardDragActive:"⌨️ Modo de Arrastre con Teclado Activo (Teclas de flecha para mover, Mayús+Flechas para pasos grandes, D o ESC para salir)",dragResizePrompt:"Pulsa D para mover o R para cambiar el tamaño. Home restablece la posición; Esc cierra.",dragModeEnabled:"Modo de arrastre con teclado activado. Usa flechas para mover, Mayús+Flechas para pasos grandes. Pulsa D o Esc para salir.",dragModeDisabled:"Modo de arrastre con teclado desactivado.",enableDragMode:"Activar modo de arrastre. Atajo: tecla D",disableDragMode:"Desactivar modo de arrastre. Atajo: tecla D",enableDragModeAria:"Activar modo de arrastre con teclado usando teclas de flecha. Atajo: tecla D",disableDragModeAria:"Desactivar modo de arrastre con teclado usando teclas de flecha. Atajo: tecla D",resizeWindow:"Cambiar tamaño de ventana",disableResizeWindow:"Desactivar modo de cambio de tamaño",enableResizeMode:"Activar modo de cambio de tamaño. Atajo: tecla R",disableResizeMode:"Desactivar modo de cambio de tamaño. Atajo: tecla R",enableResizeModeAria:"Activar modo de cambio de tamaño con teclado usando teclas de flecha. Atajo: tecla R",disableResizeModeAria:"Desactivar modo de cambio de tamaño con teclado usando teclas de flecha. Atajo: tecla R",resizeModeHint:"Controladores habilitados. Arrastra bordes o esquinas para ajustar. Pulsa Esc o R para salir.",resizeModeEnabled:"Modo de cambio de tamaño activado. Arrastra bordes o esquinas. Pulsa Esc o R para salir.",resizeModeDisabled:"Modo de cambio de tamaño desactivado.",dragModeBadge:"Modo mover: flechas para mover, Esc para salir",resizeModeBadge:"Modo redimensionar: arrastra bordes o esquinas, Esc para salir",positionReset:"Posición de la transcripción restablecida.",styleTranscript:"Abrir configuración de estilo de transcripción",closeMenu:"Cerrar menú",styleTitle:"Estilo de Transcripción",autoscroll:"Desplazamiento automático",settingsMenu:"Configuración del diálogo de transcripción",showTimestamps:"Mostrar marcas de tiempo",hideTimestamps:"Ocultar marcas de tiempo",showTimestampsAria:"Mostrar marcas de tiempo en la transcripción",hideTimestampsAria:"Ocultar marcas de tiempo en la transcripción",seekTo:"Saltar a {time}"},settings:{title:"Configuración",quality:"Calidad",speed:"Velocidad",captions:"Subtítulos",language:"Idioma",reset:"Restablecer",close:"Cerrar"},help:{title:"Atajos de teclado",button:"Atajos de teclado",close:"Cerrar",or:"o",keys:{space:"Espacio"},actions:{"play-pause":"Reproducir / Pausar","seek-backward":"Retroceder","seek-forward":"Avanzar","volume-up":"Subir volumen","volume-down":"Bajar volumen",mute:"Silenciar / Activar sonido",captions:"Alternar subtítulos","caption-style-menu":"Estilo de subtítulos","speed-down":"Reducir velocidad","speed-up":"Aumentar velocidad","speed-menu":"Velocidad de reproducción","quality-menu":"Calidad","chapters-menu":"Capítulos","transcript-toggle":"Alternar transcripción",fullscreen:"Alternar pantalla completa",help:"Atajos de teclado"}},speeds:{normal:"Normal"},time:{display:"Visualización de tiempo",durationPrefix:"Duración: ",of:"de",hour:"{count} hora",hours:"{count} horas",minute:"{count} minuto",minutes:"{count} minutos",second:"{count} segundo",seconds:"{count} segundos"},resume:{prompt:"¿Continuar desde {time}?",resume:"Continuar",startOver:"Empezar de nuevo"},playlist:{title:"Lista de reproducción",trackOf:"Pista {current} de {total}",nowPlaying:"Reproduciendo ahora: Pista {current} de {total}. {title}{artist}",by:" por ",untitled:"Sin título",trackUntitled:"Pista {number}",currentlyPlaying:"Reproduciendo actualmente",notPlaying:"Sin reproducir",pressEnterPlay:"Pulsa Enter para reproducir",pressEnterRestart:"Pulsa Enter para reiniciar",keyboardInstructions:"Navegación de lista de reproducción: Use las teclas de flecha arriba y abajo para moverse entre pistas. Pulse Retroceder página o Avanzar página para saltar 5 pistas. Pulse Inicio para ir a la primera pista, Fin para la última pista. Pulse Intro o Espacio para reproducir la pista seleccionada.",endOfPlaylist:"Fin de la lista de reproducción. {current} de {total}.",beginningOfPlaylist:"Inicio de la lista de reproducción. 1 de {total}.",jumpedToLastTrack:"Saltó a la última pista. {current} de {total}.",jumpedToFirstTrack:"Saltó a la primera pista. 1 de {total}.",firstTrack:"Primera pista. 1 de {total}.",lastTrack:"Última pista. {current} de {total}."}}}}),f={};a(f,{fr:()=>y});var v,b=s({"src/i18n/languages/fr.ts"(){y={player:{label:"Lecteur vidéo",play:"Lecture",pause:"Pause",stop:"Arrêt",restart:"Redémarrer du début",rewind:"Reculer",forward:"Avancer",rewindSeconds:"Reculer de {seconds} secondes",forwardSeconds:"Avancer de {seconds} secondes",previous:"Piste précédente",next:"Piste suivante",playlist:"Basculer la liste de lecture",volume:"Volume",mute:"Muet",unmute:"Activer le son",fullscreen:"Plein écran",exitFullscreen:"Quitter le plein écran",captions:"Sous-titres",chapters:"Chapitres",quality:"Qualité",captionStyling:"Style des sous-titres",transcript:"Activer/désactiver la transcription",audioDescription:"Audiodescription",signLanguage:"Vidéo en langue des signes",settings:"Paramètres",speed:"Vitesse de lecture",pip:"Image dans l'image",floatingPlayer:"Lecteur flottant",floatingPlayerClose:"Fermer le lecteur flottant",floatingPlayerEnter:"Détacher la vidéo",floatingPlayerExit:"Rattacher la vidéo",floatingPlayerDialog:"Lecteur vidéo flottant. Appuyez sur D pour déplacer, R pour redimensionner, Échap pour fermer.",download:"Télécharger",downloadWithFormat:"Télécharger {format}",downloadWithSize:"Télécharger ({size})",downloadWithFormatSize:"Télécharger {format} ({size})",currentTime:"Temps actuel",duration:"Durée",progress:"Progression",seekForward:"Avancer de {seconds} secondes",seekBackward:"Reculer de {seconds} secondes",volumeUp:"Augmenter le volume",volumeDown:"Diminuer le volume",loading:"Chargement...",loadingChapters:"Chargement des chapitres...",error:"Erreur de chargement",buffering:"Mise en mémoire tampon...",signLanguageVideo:"Vidéo en Langue des Signes",closeSignLanguage:"Fermer la vidéo en langue des signes",signLanguageSettings:"Paramètres de la langue des signes",noChapters:"Aucun chapitre disponible",noCaptions:"Aucun sous-titre disponible",auto:"Automatique",autoQuality:"Automatique (sélection de qualité non disponible)",noQuality:"Sélection de qualité non disponible",signLanguageDragResize:"Vidéo en Langue des Signes - Appuyez sur D pour déplacer avec le clavier, R pour redimensionner",signLanguageDragActive:"Vidéo en Langue des Signes - Mode glissement actif. Utilisez les touches fléchées pour déplacer, Échap pour quitter.",signLanguageResizeActive:"Vidéo en Langue des Signes - Mode redimensionnement actif. Utilisez les touches fléchées gauche/droite pour redimensionner, Échap pour quitter.",enableSignDragMode:"Activer le mode glissement. Raccourci : touche D",disableSignDragMode:"Désactiver le mode glissement. Raccourci : touche D",enableSignDragModeAria:"Activer le mode glissement clavier avec les touches fléchées. Raccourci : touche D",disableSignDragModeAria:"Désactiver le mode glissement clavier avec les touches fléchées. Raccourci : touche D",enableSignResizeMode:"Activer le mode redimensionnement. Raccourci : touche R",disableSignResizeMode:"Désactiver le mode redimensionnement. Raccourci : touche R",enableSignResizeModeAria:"Activer le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R",disableSignResizeModeAria:"Désactiver le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R",signDragModeHint:"Mode glissement : flèches pour déplacer, Échap pour quitter",signResizeModeHint:"Mode redimensionnement : flèches pour redimensionner, Échap pour quitter",signDragModeDisabled:"Mode glissement de la vidéo en langue des signes désactivé.",signResizeModeDisabled:"Mode redimensionnement de la vidéo en langue des signes désactivé.",resizeHandle:"Redimensionner coin {direction}",moreOptions:"Plus d'options",noMoreOptions:"Aucune option supplémentaire disponible",playing:"Lecture en cours",paused:"En pause",muted:"Muet",unmuted:"Son activé",captionsOn:"Sous-titres activés",captionsOff:"Sous-titres désactivés",volumePercent:"Volume {percent} pour cent",volumePercentMuted:"Muet",speedRate:"Vitesse {rate}x"},captions:{off:"Désactivé",select:"Sélectionner les sous-titres",fontSize:"Taille de police",fontFamily:"Police",color:"Couleur du texte",backgroundColor:"Couleur de fond",opacity:"Opacité"},fontSizes:{small:"Petit",normal:"Normal",large:"Grand",xlarge:"Très grand"},fontFamilies:{sansSerif:"Sans-serif",serif:"Serif",monospace:"Monospace"},styleLabels:{textColor:"Couleur du texte",background:"Arrière-plan",font:"Police",fontSize:"Taille de police",opacity:"Opacité"},audioDescription:{enable:"Activer l'audiodescription",disable:"Désactiver l'audiodescription"},signLanguage:{show:"Afficher la vidéo en langue des signes",hide:"Masquer la vidéo en langue des signes",showInMainView:"Afficher langue des signes dans la vidéo principale",hideInMainView:"Masquer langue des signes de la vidéo principale"},transcript:{title:"Transcription",ariaLabel:"Transcription vidéo",close:"Fermer la transcription",loading:"Chargement de la transcription...",noTranscript:"Aucune transcription disponible pour cette vidéo.",settings:"Paramètres de transcription. Appuyez sur Entrée pour ouvrir le menu ou D pour activer le mode glissement",keyboardDragMode:"Basculer le mode glissement avec les touches fléchées. Raccourci: touche D",keyboardDragActive:"⌨️ Mode Glissement Clavier Actif (Touches fléchées pour déplacer, Maj+Fléchées pour grands pas, D ou Échap pour quitter)",dragResizePrompt:"Appuyez sur D pour déplacer ou R pour redimensionner. Home réinitialise la position, Échap ferme.",dragModeEnabled:"Mode glissement clavier activé. Utilisez les flèches pour déplacer, Maj+Flèches pour de grands pas. Appuyez sur D ou Échap pour quitter.",dragModeDisabled:"Mode glissement clavier désactivé.",enableDragMode:"Activer le mode glissement. Raccourci : touche D",disableDragMode:"Désactiver le mode glissement. Raccourci : touche D",enableDragModeAria:"Activer le mode glissement clavier avec les touches fléchées. Raccourci : touche D",disableDragModeAria:"Désactiver le mode glissement clavier avec les touches fléchées. Raccourci : touche D",resizeWindow:"Redimensionner la fenêtre",disableResizeWindow:"Désactiver le mode de redimensionnement",enableResizeMode:"Activer le mode redimensionnement. Raccourci : touche R",disableResizeMode:"Désactiver le mode redimensionnement. Raccourci : touche R",enableResizeModeAria:"Activer le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R",disableResizeModeAria:"Désactiver le mode redimensionnement clavier avec les touches fléchées. Raccourci : touche R",resizeModeHint:"Poignées activées. Faites glisser les bords ou les coins pour ajuster. Appuyez sur Échap ou R pour quitter.",resizeModeEnabled:"Mode redimensionnement activé. Faites glisser les bords ou coins. Appuyez sur Échap ou R pour quitter.",resizeModeDisabled:"Mode redimensionnement désactivé.",dragModeBadge:"Mode déplacement : flèches pour déplacer, Échap pour quitter",resizeModeBadge:"Mode redimensionnement : faites glisser les bords ou les coins, Échap pour quitter",positionReset:"Position de la transcription réinitialisée.",styleTranscript:"Ouvrir les paramètres de style de transcription",closeMenu:"Fermer le menu",styleTitle:"Style de Transcription",autoscroll:"Défilement automatique",settingsMenu:"Paramètres de dialogue de transcription",showTimestamps:"Afficher les horodatages",hideTimestamps:"Masquer les horodatages",showTimestampsAria:"Afficher les horodatages dans la transcription",hideTimestampsAria:"Masquer les horodatages dans la transcription",seekTo:"Aller à {time}"},settings:{title:"Paramètres",quality:"Qualité",speed:"Vitesse",captions:"Sous-titres",language:"Langue",reset:"Réinitialiser",close:"Fermer"},help:{title:"Raccourcis clavier",button:"Raccourcis clavier",close:"Fermer",or:"ou",keys:{space:"Espace"},actions:{"play-pause":"Lecture / Pause","seek-backward":"Reculer","seek-forward":"Avancer","volume-up":"Augmenter le volume","volume-down":"Baisser le volume",mute:"Couper / Activer le son",captions:"Activer/désactiver les sous-titres","caption-style-menu":"Style des sous-titres","speed-down":"Ralentir","speed-up":"Accélérer","speed-menu":"Vitesse de lecture","quality-menu":"Qualité","chapters-menu":"Chapitres","transcript-toggle":"Activer/désactiver la transcription",fullscreen:"Activer/désactiver le plein écran",help:"Raccourcis clavier"}},speeds:{normal:"Normal"},time:{display:"Affichage du temps",durationPrefix:"Durée : ",of:"sur",hour:"{count} heure",hours:"{count} heures",minute:"{count} minute",minutes:"{count} minutes",second:"{count} seconde",seconds:"{count} secondes"},resume:{prompt:"Reprendre à {time} ?",resume:"Reprendre",startOver:"Recommencer"},playlist:{title:"Liste de lecture",trackOf:"Piste {current} sur {total}",nowPlaying:"Lecture en cours : Piste {current} sur {total}. {title}{artist}",by:" par ",untitled:"Sans titre",trackUntitled:"Piste {number}",currentlyPlaying:"En cours de lecture",notPlaying:"Non en lecture",pressEnterPlay:"Appuyez sur Entrée pour lire",pressEnterRestart:"Appuyez sur Entrée pour recommencer",keyboardInstructions:"Navigation de la liste de lecture : Utilisez les touches fléchées haut et bas pour naviguer entre les pistes. Appuyez sur Page précédente ou Page suivante pour sauter 5 pistes. Appuyez sur Début pour aller à la première piste, Fin pour la dernière piste. Appuyez sur Entrée ou Espace pour lire la piste sélectionnée.",endOfPlaylist:"Fin de la liste de lecture. {current} sur {total}.",beginningOfPlaylist:"Début de la liste de lecture. 1 sur {total}.",jumpedToLastTrack:"Sauté à la dernière piste. {current} sur {total}.",jumpedToFirstTrack:"Sauté à la première piste. 1 sur {total}.",firstTrack:"Première piste. 1 sur {total}.",lastTrack:"Dernière piste. {current} sur {total}."}}}}),w={};a(w,{ja:()=>v});var S,M=s({"src/i18n/languages/ja.ts"(){v={player:{label:"ビデオプレーヤー",play:"再生",pause:"一時停止",stop:"停止",restart:"最初から再生",rewind:"巻き戻し",forward:"早送り",rewindSeconds:"{seconds}秒戻す",forwardSeconds:"{seconds}秒進める",previous:"前のトラック",next:"次のトラック",playlist:"プレイリストの切り替え",volume:"音量",mute:"ミュート",unmute:"ミュート解除",fullscreen:"全画面表示",exitFullscreen:"全画面表示を終了",captions:"字幕",chapters:"チャプター",quality:"画質",captionStyling:"字幕スタイル",transcript:"文字起こし切り替え",audioDescription:"音声解説",signLanguage:"手話動画",settings:"設定",speed:"再生速度",pip:"ピクチャーインピクチャー",floatingPlayer:"フローティングプレーヤー",floatingPlayerClose:"フローティングプレーヤーを閉じる",floatingPlayerEnter:"ビデオを切り離す",floatingPlayerExit:"ビデオを戻す",floatingPlayerDialog:"フローティング動画プレーヤー。Dキーで移動、Rキーでサイズ変更、Escで閉じる。",download:"ダウンロード",downloadWithFormat:"{format} をダウンロード",downloadWithSize:"ダウンロード ({size})",downloadWithFormatSize:"{format} をダウンロード ({size})",currentTime:"現在の時間",duration:"再生時間",progress:"進行状況",seekForward:"{seconds}秒進める",seekBackward:"{seconds}秒戻す",volumeUp:"音量を上げる",volumeDown:"音量を下げる",loading:"読み込み中...",loadingChapters:"チャプター読み込み中...",error:"読み込みエラー",buffering:"バッファリング中...",signLanguageVideo:"手話動画",closeSignLanguage:"手話動画を閉じる",signLanguageSettings:"手話設定",noChapters:"チャプターがありません",noCaptions:"字幕がありません",auto:"自動",autoQuality:"自動(画質選択不可)",noQuality:"画質選択不可",signLanguageDragResize:"手話動画 - キーボードでドラッグするにはDキーを、サイズ変更するにはRキーを押してください",signLanguageDragActive:"手話動画 - ドラッグモードが有効です。矢印キーで移動、Escapeで終了します。",signLanguageResizeActive:"手話動画 - サイズ変更モードが有効です。左右の矢印キーでサイズ変更、Escapeで終了します。",enableSignDragMode:"ドラッグモードを有効にする。ショートカット:Dキー",disableSignDragMode:"ドラッグモードを無効にする。ショートカット:Dキー",enableSignDragModeAria:"矢印キーでキーボードドラッグモードを有効にする。ショートカット:Dキー",disableSignDragModeAria:"矢印キーでキーボードドラッグモードを無効にする。ショートカット:Dキー",enableSignResizeMode:"サイズ変更モードを有効にする。ショートカット:Rキー",disableSignResizeMode:"サイズ変更モードを無効にする。ショートカット:Rキー",enableSignResizeModeAria:"矢印キーでキーボードサイズ変更モードを有効にする。ショートカット:Rキー",disableSignResizeModeAria:"矢印キーでキーボードサイズ変更モードを無効にする。ショートカット:Rキー",signDragModeHint:"ドラッグモード:矢印キーで移動、Escで終了",signResizeModeHint:"サイズ変更モード:矢印キーでサイズ変更、Escで終了",signDragModeDisabled:"手話動画のドラッグモードを無効にしました。",signResizeModeDisabled:"手話動画のサイズ変更モードを無効にしました。",resizeHandle:"{direction}コーナーのサイズ変更",moreOptions:"その他のオプション",noMoreOptions:"追加のオプションはありません",playing:"再生中",paused:"一時停止中",muted:"ミュート中",unmuted:"ミュート解除",captionsOn:"字幕オン",captionsOff:"字幕オフ",volumePercent:"音量 {percent} パーセント",volumePercentMuted:"ミュート",speedRate:"速度 {rate}x"},captions:{off:"オフ",select:"字幕を選択",fontSize:"フォントサイズ",fontFamily:"フォント",color:"テキストの色",backgroundColor:"背景色",opacity:"不透明度"},fontSizes:{small:"小",normal:"標準",large:"大",xlarge:"特大"},fontFamilies:{sansSerif:"サンセリフ",serif:"セリフ",monospace:"等幅"},styleLabels:{textColor:"テキストの色",background:"背景",font:"フォント",fontSize:"フォントサイズ",opacity:"不透明度"},audioDescription:{enable:"音声解説を有効にする",disable:"音声解説を無効にする"},signLanguage:{show:"手話動画を表示",hide:"手話動画を非表示",showInMainView:"メイン動画に手話を表示",hideInMainView:"メイン動画から手話を削除"},transcript:{title:"文字起こし",ariaLabel:"ビデオ文字起こし",close:"文字起こしを閉じる",loading:"文字起こしを読み込み中...",noTranscript:"このビデオの文字起こしはありません。",settings:"文字起こし設定。Enterキーでメニューを開く、またはDキーでドラッグモードを有効にする",keyboardDragMode:"矢印キーでキーボードドラッグモードを切り替え。ショートカット:Dキー",keyboardDragActive:"⌨️ キーボードドラッグモード有効(矢印キーで移動、Shift+矢印キーで大きく移動、DまたはESCで終了)",dragResizePrompt:"Dキーで移動、Rキーでサイズ変更。Homeで位置をリセット、Escで閉じます。",dragModeEnabled:"キーボードドラッグモードを有効にしました。矢印キーで移動、Shift+矢印キーで大きく移動できます。終了するには D または Esc を押します。",dragModeDisabled:"キーボードドラッグモードを無効にしました。",enableDragMode:"ドラッグモードを有効にする。ショートカット:Dキー",disableDragMode:"ドラッグモードを無効にする。ショートカット:Dキー",enableDragModeAria:"矢印キーでキーボードドラッグモードを有効にする。ショートカット:Dキー",disableDragModeAria:"矢印キーでキーボードドラッグモードを無効にする。ショートカット:Dキー",resizeWindow:"ウィンドウのサイズ変更",disableResizeWindow:"サイズ変更モードを無効にする",enableResizeMode:"サイズ変更モードを有効にする。ショートカット:Rキー",disableResizeMode:"サイズ変更モードを無効にする。ショートカット:Rキー",enableResizeModeAria:"矢印キーでキーボードサイズ変更モードを有効にする。ショートカット:Rキー",disableResizeModeAria:"矢印キーでキーボードサイズ変更モードを無効にする。ショートカット:Rキー",resizeModeHint:"リサイズハンドルが有効になりました。辺や角をドラッグして調整します。Esc または R で終了します。",resizeModeEnabled:"サイズ変更モードを有効にしました。辺や角をドラッグして調整します。Esc または R で終了します。",resizeModeDisabled:"サイズ変更モードを無効にしました。",dragModeBadge:"移動モード:矢印キーで移動、Escで終了",resizeModeBadge:"サイズ変更モード:辺や角をドラッグ、Escで終了",positionReset:"文字起こしの位置をリセットしました。",styleTranscript:"文字起こしスタイル設定を開く",closeMenu:"メニューを閉じる",styleTitle:"文字起こしスタイル",autoscroll:"自動スクロール",settingsMenu:"文字起こしダイアログ設定",showTimestamps:"タイムスタンプを表示",hideTimestamps:"タイムスタンプを非表示",showTimestampsAria:"文字起こしにタイムスタンプを表示",hideTimestampsAria:"文字起こしのタイムスタンプを非表示",seekTo:"{time} へ移動"},settings:{title:"設定",quality:"画質",speed:"速度",captions:"字幕",language:"言語",reset:"リセット",close:"閉じる"},help:{title:"キーボードショートカット",button:"キーボードショートカット",close:"閉じる",or:"または",keys:{space:"スペース"},actions:{"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:"キーボードショートカット"}},speeds:{normal:"通常"},time:{display:"時間表示",durationPrefix:"再生時間: ",of:"/",hour:"{count}時間",hours:"{count}時間",minute:"{count}分",minutes:"{count}分",second:"{count}秒",seconds:"{count}秒"},resume:{prompt:"{time}から再開しますか?",resume:"再開",startOver:"最初から"},playlist:{title:"プレイリスト",trackOf:"トラック {current}/{total}",nowPlaying:"再生中: トラック {current}/{total}. {title}{artist}",by:" - ",untitled:"タイトルなし",trackUntitled:"トラック {number}",currentlyPlaying:"再生中",notPlaying:"停止中",pressEnterPlay:"Enterキーで再生",pressEnterRestart:"Enterキーで最初から再生",keyboardInstructions:"プレイリストナビゲーション:上下の矢印キーでトラック間を移動します。Page UpまたはPage Downで5トラックをスキップします。Homeで最初のトラックへ、Endで最後のトラックへ移動します。EnterまたはSpaceで選択したトラックを再生します。",endOfPlaylist:"プレイリストの終わりです。{current}/{total}。",beginningOfPlaylist:"プレイリストの始めです。1/{total}。",jumpedToLastTrack:"最後のトラックにジャンプしました。{current}/{total}。",jumpedToFirstTrack:"最初のトラックにジャンプしました。1/{total}。",firstTrack:"最初のトラックです。1/{total}。",lastTrack:"最後のトラックです。{current}/{total}。"}}}});function k(){return{en:o}}var T,P=s({"src/i18n/translations.ts"(){h(),S={de:()=>Promise.resolve().then(()=>(p(),c)),es:()=>Promise.resolve().then(()=>(m(),g)),fr:()=>Promise.resolve().then(()=>(b(),f)),ja:()=>Promise.resolve().then(()=>(M(),w))},k()}});function E(e){return T.has(String(e))}function C(e){const t=Object.create(null);for(const[i,s]of Object.entries(e))E(i)||(t[i]=s);return t}function L(e){if(!e||"object"!=typeof e||Array.isArray(e))return e&&"object"==typeof e?e:Object.create(null);const t=Object.create(null);for(const[i,s]of Object.entries(e))E(i)||(t[i]=s&&"object"==typeof s&&!Array.isArray(s)?L(s):s);return t}var x,D=s({"src/utils/Sanitize.ts"(){T=Object.freeze(new Set(["__proto__","prototype","constructor"]))}});function A(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function z(e){return L(e)}var _,R,B,H,V=s({"src/i18n/i18n.ts"(){P(),D(),x=new class{constructor(){n(this,"currentLanguage"),n(this,"translations"),n(this,"loadingPromises"),n(this,"builtInLanguageLoaders"),this.currentLanguage="en",this.translations=Object.create(null),Object.assign(this.translations,k()),this.loadingPromises=new Map,this.builtInLanguageLoaders=S}setLanguage(e){this.translations[e]?this.currentLanguage=e:(console.warn(`Language "${e}" not found, falling back to English`),this.currentLanguage="en")}getLanguage(){return this.currentLanguage}async ensureLanguage(e){const t=(e||"").toLowerCase();if(!t)return this.currentLanguage;if(this.translations[t])return t;if(this.loadingPromises.has(t))return await this.loadingPromises.get(t),this.translations[t]?t:null;if(!this.builtInLanguageLoaders[t])return null;const i=(async()=>{try{const e=await(async e=>{const t=S[e];if(!t)return null;const i=await t();return i[e]||i.default||null})(t);e&&(this.translations[t]=z(e))}catch(e){console.warn(`Language "${t}" failed to load:`,e)}finally{this.loadingPromises.delete(t)}})();return this.loadingPromises.set(t,i),await i,this.translations[t]?t:null}t(e,t={}){const i=e.split(".");let s=this.translations[this.currentLanguage];for(const t of i){if(!s||"object"!=typeof s||!(t in s)){s=this.translations.en;for(const t of i){if(!s||"object"!=typeof s||!(t in s))return e;s=s[t]}break}s=s[t]}if("string"==typeof s){let e=s;for(const[i,s]of Object.entries(t)){if(E(i))continue;const t=A(i);e=e.replace(new RegExp(`\\{${t}\\}`,"g"),String(s))}return e}return"string"==typeof s?s:e}addTranslation(e,t){if(E(e))return void console.warn(`[VidPly] Refusing to register language with forbidden name "${e}"`);this.translations[e]||(this.translations[e]=Object.create(null));const i=z(t);Object.assign(this.translations[e],i)}async loadLanguageFromUrl(e,t,i={}){if(this.loadingPromises.has(t))return this.loadingPromises.get(t);const s=(async()=>{var s;const a=[];i.signal&&a.push(i.signal),"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&a.push(AbortSignal.timeout(i.timeoutMs??8e3));const n=0===a.length?void 0:1===a.length?a[0]:(null==(s=AbortSignal.any)?void 0:s.call(AbortSignal,a))??a[0];try{const i=await fetch(t,{signal:n});if(!i.ok)throw new Error(`Failed to load language file: ${i.statusText}`);const s=i.headers.get("content-type")||"";let a;const r=await i.arrayBuffer(),o=new TextDecoder("utf-8").decode(r);if(s.includes("application/json")||t.endsWith(".json"))a=JSON.parse(o);else if(s.includes("text/yaml")||s.includes("application/x-yaml")||t.endsWith(".yaml")||t.endsWith(".yml"))try{a=JSON.parse(o)}catch{if("undefined"==typeof window||!window.jsyaml)throw console.warn("YAML parsing requires js-yaml library. Please include it or use JSON format."),new Error("YAML parsing not available. Please use JSON format or include js-yaml library.");a=window.jsyaml.load(o)}else a=JSON.parse(o);return this.addTranslation(e,a),a}catch(e){throw console.error(`Error loading language file from ${t}:`,e),e}finally{this.loadingPromises.delete(t)}})();return this.loadingPromises.set(t,s),s}async loadLanguagesFromUrls(e,t={}){const i=Object.entries(e).map(([e,i])=>this.loadLanguageFromUrl(e,i,t));await Promise.all(i)}}}}),$=s({"src/utils/TimeUtils.ts"(){V(),_={formatTime(e,t=!1){if(!isFinite(e)||e<0)return t?"00:00:00":"00:00";const i=Math.floor(e/3600),s=Math.floor(e%3600/60),a=Math.floor(e%60),n=e=>String(e).padStart(2,"0");return i>0||t?`${n(i)}:${n(s)}:${n(a)}`:`${n(s)}:${n(a)}`},parseTime(e){const t=e.split(":").map(e=>parseInt(e,10));return 3===t.length?3600*(t[0]??0)+60*(t[1]??0)+(t[2]??0):2===t.length?60*(t[0]??0)+(t[1]??0):1===t.length?t[0]??0:0},formatDuration(e){if(!isFinite(e)||e<0)return x.t("time.seconds",{count:0});const t=Math.floor(e/3600),i=Math.floor(e%3600/60),s=Math.floor(e%60),a=[];return t>0&&a.push(x.t(1===t?"time.hour":"time.hours",{count:t})),i>0&&a.push(x.t(1===i?"time.minute":"time.minutes",{count:i})),(s>0||0===a.length)&&a.push(x.t(1===s?"time.second":"time.seconds",{count:s})),a.join(", ")},formatPercentage(e,t){return 0===t?0:Math.round(e/t*100)}}}});function O(e,t=""){const i=document.createElement("span");i.className=`vidply-icon ${t}`.trim(),i.setAttribute("aria-hidden","true");const s=H[e]||H.play;return s&&i.appendChild(s.cloneNode(!0)),i}var F=s({"src/icons/Icons.ts"(){R={play:'<path d="M8 5v14l11-7z"/>',pause:'<path d="M6 4h4v16H6V4zm8 0h4v16h-4V4z"/>',stop:'<rect x="6" y="6" width="12" height="12"/>',rewind:'<path d="M11 18V6l-8.5 6 8.5 6zm.5-6l8.5 6V6l-8.5 6z"/>',forward:'<path d="M4 18l8.5-6L4 6v12zm9-12v12l8.5-6L13 6z"/>',skipPrevious:'<path d="M6 6h2v12H6V6zm3 6l8.5 6V6L9 12z"/>',skipNext:'<path d="M16 6h2v12h-2V6zM6 6l8.5 6L6 18V6z"/>',restart:'<path d="M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z"/>',volumeHigh:'<path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/>',volumeMedium:'<path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02z"/>',volumeLow:'<path d="M7 9v6h4l5 5V4l-5 5H7z"/>',volumeMuted:'<path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"/>',fullscreen:'<path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/>',fullscreenExit:'<path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"/>',settings:'<path d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94L14.4 2.81c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>',captions:'<path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z"/>',captionsOff:'<path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z"/><path d="M0 0h24v24H0z" fill="none"/>',pip:'<path d="M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98V5c0-1.1-.9-2-2-2zm0 16.01H3V4.98h18v14.03z"/>',speed:'<path d="M20.38 8.57l-1.23 1.85a8 8 0 0 1-.22 7.58H5.07A8 8 0 0 1 15.58 6.85l1.85-1.23A10 10 0 0 0 3.35 19a2 2 0 0 0 1.72 1h13.85a2 2 0 0 0 1.74-1 10 10 0 0 0-.27-10.44z"/><path d="M10.59 15.41a2 2 0 0 0 2.83 0l5.66-8.49-8.49 5.66a2 2 0 0 0 0 2.83z"/>',close:'<path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>',check:'<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>',loading:'<path d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z"/>',error:'<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>',playlist:'<path d="M15 6H3v2h12V6zm0 4H3v2h12v-2zM3 16h8v-2H3v2zM17 6v8.18c-.31-.11-.65-.18-1-.18-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3V8h3V6h-5z"/>',hd:'<path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-8 12H9.5v-2h-2v2H6V9h1.5v2.5h2V9H11v6zm7-1c0 .55-.45 1-1 1h-.75v1.5h-1.5V15H14c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v4zm-3.5-.5h2v-3h-2v3z"/>',transcript:'<path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"/>',chapters:'<path d="M3 5h2v2H3V5zm0 4h2v2H3V9zm0 4h2v2H3v-2zm0 4h2v2H3v-2zM7 5h14v2H7V5zm0 4h14v2H7V9zm0 4h14v2H7v-2zm0 4h14v2H7v-2z"/>',audioDescription:'<rect x="2" y="5" width="20" height="14" rx="2" fill="none" stroke="currentColor" stroke-width="1.5"/><text x="12" y="14.5" text-anchor="middle" font-size="8" font-weight="bold" font-family="Arial, sans-serif" fill="currentColor">AD</text>',audioDescriptionOn:'<rect x="2" y="5" width="20" height="14" rx="2" fill="currentColor"/><text x="12" y="14.5" text-anchor="middle" font-size="8" font-weight="bold" font-family="Arial, sans-serif" class="vidply-icon-ad-fg">AD</text>',signLanguage:'<g transform="scale(1.5)"><path d="M16 11.3c-.1-.9-4.8 1.3-5.4 1.1-2.6-1 5.8-1.3 5.1-2.9s-5.1 1.5-6 1.4C6.5 9.4 16.5 9.1 13.5 8c-1.9-.6-8.8 2.9-6.8.4.7-.6.7-1.9-.7-1.7-9.7 7.2-.7 12.2 8.8 7 0-1.3-3.5.4-4.1.4-2.6 0 5.6-2 5.4-3ZM3.9 7.8c3.2-4.2 3.7 1.2 6 .1s.2-.2.2-.3c.7-2.7 2.5-7.5-1.5-1.3-1.6 0 1.1-4 1-4.6C8.9-1 7.3 4.4 7.2 4.9c-1.6.7-.9-1.4-.7-1.5 3-6-.6-3.1-.9.4-2.5 1.8 0-2.8 0-3.5C2.8-.9 4 9.4 1.1 4.9S.1 4.6 0 5c-.4 2.7 2.6 7.2 3.9 2.8Z"/></g>',signLanguageOn:'<g transform="scale(1.5)"><path d="M16 11.3c-.1-.9-4.8 1.3-5.4 1.1-2.6-1 5.8-1.3 5.1-2.9s-5.1 1.5-6 1.4C6.5 9.4 16.5 9.1 13.5 8c-1.9-.6-8.8 2.9-6.8.4.7-.6.7-1.9-.7-1.7-9.7 7.2-.7 12.2 8.8 7 0-1.3-3.5.4-4.1.4-2.6 0 5.6-2 5.4-3ZM3.9 7.8c3.2-4.2 3.7 1.2 6 .1s.2-.2.2-.3c.7-2.7 2.5-7.5-1.5-1.3-1.6 0 1.1-4 1-4.6C8.9-1 7.3 4.4 7.2 4.9c-1.6.7-.9-1.4-.7-1.5 3-6-.6-3.1-.9.4-2.5 1.8 0-2.8 0-3.5C2.8-.9 4 9.4 1.1 4.9S.1 4.6 0 5c-.4 2.7 2.6 7.2 3.9 2.8Z"/></g>',signLanguagePip:'<g transform="scale(1.2) translate(1, 1)"><path d="M16 11.3c-.1-.9-4.8 1.3-5.4 1.1-2.6-1 5.8-1.3 5.1-2.9s-5.1 1.5-6 1.4C6.5 9.4 16.5 9.1 13.5 8c-1.9-.6-8.8 2.9-6.8.4.7-.6.7-1.9-.7-1.7-9.7 7.2-.7 12.2 8.8 7 0-1.3-3.5.4-4.1.4-2.6 0 5.6-2 5.4-3ZM3.9 7.8c3.2-4.2 3.7 1.2 6 .1s.2-.2.2-.3c.7-2.7 2.5-7.5-1.5-1.3-1.6 0 1.1-4 1-4.6C8.9-1 7.3 4.4 7.2 4.9c-1.6.7-.9-1.4-.7-1.5 3-6-.6-3.1-.9.4-2.5 1.8 0-2.8 0-3.5C2.8-.9 4 9.4 1.1 4.9S.1 4.6 0 5c-.4 2.7 2.6 7.2 3.9 2.8Z"/></g><polygon points="14,23 23,14 23,23" fill="currentColor"/>',signLanguagePipOn:'<g transform="scale(1.2) translate(1, 1)"><path d="M16 11.3c-.1-.9-4.8 1.3-5.4 1.1-2.6-1 5.8-1.3 5.1-2.9s-5.1 1.5-6 1.4C6.5 9.4 16.5 9.1 13.5 8c-1.9-.6-8.8 2.9-6.8.4.7-.6.7-1.9-.7-1.7-9.7 7.2-.7 12.2 8.8 7 0-1.3-3.5.4-4.1.4-2.6 0 5.6-2 5.4-3ZM3.9 7.8c3.2-4.2 3.7 1.2 6 .1s.2-.2.2-.3c.7-2.7 2.5-7.5-1.5-1.3-1.6 0 1.1-4 1-4.6C8.9-1 7.3 4.4 7.2 4.9c-1.6.7-.9-1.4-.7-1.5 3-6-.6-3.1-.9.4-2.5 1.8 0-2.8 0-3.5C2.8-.9 4 9.4 1.1 4.9S.1 4.6 0 5c-.4 2.7 2.6 7.2 3.9 2.8Z"/></g><polygon points="14,23 23,14 23,23" fill="currentColor"/>',music:'<path d="M12 3v9.28c-.47-.17-.97-.28-1.5-.28C8.01 12 6 14.01 6 16.5S8.01 21 10.5 21c2.31 0 4.2-1.75 4.45-4H15V6h4V3h-7zm-1.5 16c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/>',moreVertical:'<path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/>',move:'<path d="M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z"/>',resize:'<path d="M21.71 11.29l-9-9c-.39-.39-1.02-.39-1.41 0l-9 9c-.39.39-.39 1.02 0 1.41l9 9c.39.39 1.02.39 1.41 0l9-9c.39-.38.39-1.01 0-1.41zM14 14.5V12h-4v2.5L7 11l3-3.5V10h4V7.5l3 3.5-3 3.5z"/>',clock:'<path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/><path d="M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"/>',download:'<path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/>',help:'<path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"/>'},B=e=>`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">${e}</svg>`,Object.fromEntries(Object.entries(R).map(([e,t])=>[e,B(t)])),H=(()=>{const e=new DOMParser,t={};for(const[i,s]of Object.entries(R)){const a=e.parseFromString(B(s),"image/svg+xml").documentElement;a&&"svg"===a.nodeName.toLowerCase()&&!a.querySelector("parsererror")&&(t[i]=a)}return t})()}});function N(e,{delay:t=0,preventScroll:i=!0}={}){e&&requestAnimationFrame(()=>{setTimeout(()=>{e&&document.contains(e)&&e.focus({preventScroll:i})},t)})}var I=s({"src/utils/FocusUtils.ts"(){}});function W(e,t=100){let i;return function(...s){clearTimeout(i),i=setTimeout(()=>{clearTimeout(i),e.apply(this,s)},t)}}function q(e=768){return window.innerWidth<e}function U(e="nearest"){return{behavior:"undefined"!=typeof window&&"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches?"auto":"smooth",block:e}}function K(e,t=100){let i=!1;const s=()=>{i||(i=!0,e())};requestAnimationFrame(s),setTimeout(s,t)}var j=s({"src/utils/PerformanceUtils.ts"(){}}),Q={};function Y(e){const t=e.replace("captions","");return t.charAt(0).toLowerCase()+t.slice(1)}function X(t,i,s,a){const n=e.createElement("div",{className:`${t.options.classPrefix}-style-group`}),r=`${t.options.classPrefix}-${s}-${Date.now()}`,o=e.createElement("label",{textContent:i,attributes:{for:r},style:{display:"block",fontSize:"12px",marginBottom:"4px",color:"rgba(255,255,255,0.7)"}});n.appendChild(o);const l=e.createElement("select",{className:`${t.options.classPrefix}-style-select`,attributes:{id:r},style:{width:"100%",padding:"6px",background:"var(--vidply-white)",border:"1px solid var(--vidply-white-10)",borderRadius:"4px",color:"var(--vidply-black)",fontSize:"13px"}}),d=t.options[s];return a.forEach(t=>{const i=e.createElement("option",{textContent:t.label,attributes:{value:t.value}});t.value===d&&(i.selected=!0),l.appendChild(i)}),l.addEventListener("mousedown",e=>{e.stopPropagation()}),l.addEventListener("click",e=>{e.stopPropagation()}),l.addEventListener("change",e=>{e.stopPropagation(),t.options[s]=e.target.value,t.captionManager&&t.captionManager.setCaptionStyle(Y(s),e.target.value)}),n.appendChild(l),n}function G(t,i,s){const a=e.createElement("div",{className:`${t.options.classPrefix}-style-group`}),n=`${t.options.classPrefix}-${s}-${Date.now()}`,r=e.createElement("label",{textContent:i,attributes:{for:n},style:{display:"block",fontSize:"12px",marginBottom:"4px",color:"rgba(255,255,255,0.7)"}});a.appendChild(r);const o=e.createElement("input",{attributes:{id:n,type:"color",value:String(t.options[s]??"")},style:{width:"100%",height:"32px",padding:"2px",background:"rgba(255,255,255,0.1)",border:"1px solid rgba(255,255,255,0.2)",borderRadius:"4px",cursor:"pointer"}});return o.addEventListener("mousedown",e=>{e.stopPropagation()}),o.addEventListener("click",e=>{e.stopPropagation()}),o.addEventListener("change",e=>{e.stopPropagation(),t.options[s]=e.target.value,t.captionManager&&t.captionManager.setCaptionStyle(Y(s),e.target.value)}),a.appendChild(o),a}function J(t,i){const s=t.player,a=document.querySelector(`.${s.options.classPrefix}-caption-style-menu`);if(a)return a.remove(),i.setAttribute("aria-expanded","false"),void(t.openMenu===a&&(t.openMenu=null,t.openMenuButton=null));const n=`${s.options.classPrefix}-caption-style-label-${s.instanceId||""}`,r=e.createElement("div",{className:`${s.options.classPrefix}-caption-style-menu ${s.options.classPrefix}-menu ${s.options.classPrefix}-settings-menu`,attributes:{role:"dialog","aria-modal":"false","aria-labelledby":n}}),o=e.createElement("h2",{textContent:x.t("player.captionStyling"),attributes:{id:n,class:`${s.options.classPrefix}-sr-only`},style:{position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0,0,0,0)",whiteSpace:"nowrap",border:"0"}});if(r.appendChild(o),r.addEventListener("click",e=>{e.stopPropagation()}),!s.captionManager||0===s.captionManager.tracks.length){const a=e.createElement("div",{className:`${s.options.classPrefix}-menu-item`,textContent:x.t("player.noCaptions"),attributes:{role:"status"},style:{opacity:"0.5",cursor:"default",padding:"12px 16px"}});return r.appendChild(a),r.style.visibility="hidden",r.style.display="block",t.insertMenuIntoDOM(r,i),t.positionMenu(r,i,!0),requestAnimationFrame(()=>{r.style.visibility="visible"}),void t.attachMenuCloseHandler(r,i,!0)}r.appendChild(X(s,x.t("styleLabels.fontSize"),"captionsFontSize",[{label:x.t("fontSizes.small"),value:"87.5%"},{label:x.t("fontSizes.normal"),value:"100%"},{label:x.t("fontSizes.large"),value:"125%"},{label:x.t("fontSizes.xlarge"),value:"150%"}])),r.appendChild(X(s,x.t("styleLabels.font"),"captionsFontFamily",[{label:x.t("fontFamilies.sansSerif"),value:"sans-serif"},{label:x.t("fontFamilies.serif"),value:"serif"},{label:x.t("fontFamilies.monospace"),value:"monospace"}])),r.appendChild(G(s,x.t("styleLabels.textColor"),"captionsColor")),r.appendChild(G(s,x.t("styleLabels.background"),"captionsBackgroundColor")),r.appendChild(((t,i,s)=>{const a=e.createElement("div",{className:`${t.options.classPrefix}-style-group`}),n=`${t.options.classPrefix}-${s}-${Date.now()}`,r=e.createElement("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"4px"}}),o=e.createElement("label",{textContent:i,attributes:{for:n},style:{fontSize:"12px",color:"rgba(255,255,255,0.7)"}}),l=e.createElement("span",{textContent:Math.round(100*Number(t.options[s]??0))+"%",style:{fontSize:"12px",color:"rgba(255,255,255,0.7)"}});r.appendChild(o),r.appendChild(l),a.appendChild(r);const d=e.createElement("input",{attributes:{id:n,type:"range",min:"0",max:"1",step:"0.1",value:String(t.options[s])},style:{width:"100%",cursor:"pointer"}});return d.addEventListener("mousedown",e=>{e.stopPropagation()}),d.addEventListener("click",e=>{e.stopPropagation()}),d.addEventListener("input",e=>{e.stopPropagation();const i=parseFloat(e.target.value);l.textContent=Math.round(100*i)+"%",t.options[s]=i,t.captionManager&&t.captionManager.setCaptionStyle(Y(s),i)}),a.appendChild(d),a})(s,x.t("styleLabels.opacity"),"captionsOpacity")),r.style.minWidth="220px",r.style.visibility="hidden",r.style.display="block",t.insertMenuIntoDOM(r,i),t.positionMenu(r,i,!0),requestAnimationFrame(()=>{r.style.visibility="visible"}),t.attachMenuCloseHandler(r,i,!0),((e,t,i={})=>{if(!e)return;const s=e.querySelector(t);s&&N(s,i)})(r,`.${s.options.classPrefix}-style-select`)}a(Q,{showCaptionStyleMenu:()=>J});var Z,ee,te=s({"src/controls/CaptionStyleMenu.ts"(){d(),V(),I()}});function ie(e,t,i){return Number.isFinite(e)?e<t?t:e>i?i:e:t}function se(e){return"number"==typeof e&&Number.isFinite(e)&&e>=0}function ae(e){if(!e||"object"!=typeof e)return!1;const t=e;return se(t.currentTime)&&se(t.duration)&&"number"==typeof t.percentage&&Number.isFinite(t.percentage)&&"number"==typeof t.updatedAt&&Number.isFinite(t.updatedAt)}function ne(e){return Boolean(e)&&"object"==typeof e&&!Array.isArray(e)}function re(e){if(!ne(e))return!1;for(const t of Object.values(e))if(!ae(t))return!1;return!0}var oe=s({"src/utils/StorageManager.ts"(){D(),Z=class e{constructor(e="vidply"){n(this,"namespace"),n(this,"storage"),this.namespace=e,this.storage=this.isStorageAvailable()?localStorage:null}isStorageAvailable(){try{if("undefined"==typeof localStorage)return!1;const e="__storage_test__";return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch{return!1}}getKey(e){return`${this.namespace}_${e}`}set(e,t){if(!this.storage)return!1;try{const i=this.getKey(e);return this.storage.setItem(i,JSON.stringify(t)),!0}catch(e){return console.warn("Failed to save to localStorage:",e),!1}}get(e,t=null,i){if(!this.storage)return t;try{const s=this.getKey(e),a=this.storage.getItem(s);if(null===a)return t;const n=JSON.parse(a);return i&&!i(n)?(console.warn(`[VidPly] Discarding malformed localStorage payload for "${e}"`),t):n}catch(e){return console.warn("Failed to read from localStorage:",e),t}}remove(e){if(!this.storage)return!1;try{const t=this.getKey(e);return this.storage.removeItem(t),!0}catch(e){return console.warn("Failed to remove from localStorage:",e),!1}}clear(){if(!this.storage)return!1;try{const e=this.storage;return Object.keys(e).forEach(t=>{t.startsWith(this.namespace)&&e.removeItem(t)}),!0}catch(e){return console.warn("Failed to clear localStorage:",e),!1}}saveTranscriptPreferences(e){return this.set("transcript_preferences",C(e))}getTranscriptPreferences(){return this.get("transcript_preferences",null,ne)}saveCaptionPreferences(e){return this.set("caption_preferences",C(e))}getCaptionPreferences(){return this.get("caption_preferences",null,ne)}savePlayerPreferences(e){const t=C(e);return"number"==typeof t.volume&&(t.volume=ie(t.volume,0,1)),"number"==typeof t.playbackSpeed&&(t.playbackSpeed=ie(t.playbackSpeed,.1,4)),this.set("player_preferences",t)}getPlayerPreferences(){const e=this.get("player_preferences",null,ne);return e?("number"==typeof e.volume&&(e.volume=ie(e.volume,0,1)),"number"==typeof e.playbackSpeed&&(e.playbackSpeed=ie(e.playbackSpeed,.1,4)),e):null}saveSignLanguagePreferences(e){return this.set("sign_language_preferences",C(e))}getSignLanguagePreferences(){return this.get("sign_language_preferences",null,ne)}saveFloatingPreferences(e){return this.set("floating_preferences",C(e))}getFloatingPreferences(){return this.get("floating_preferences",null,ne)}saveWatchProgress(t,i,s){if("string"!=typeof t||!t)return!1;if(!Number.isFinite(i)||!Number.isFinite(s)||s<=0)return!1;const a=ie(s,.001,86400),n=ie(i,0,a),r=this.get("watch_progress",Object.create(null),re)??Object.create(null);r[t]={currentTime:n,duration:a,percentage:ie(n/a*100,0,100),updatedAt:Date.now()};const o=Object.entries(r);if(o.length>e.MAX_WATCH_PROGRESS_ENTRIES){o.sort((e,t)=>e[1].updatedAt-t[1].updatedAt);const t=o.length-e.MAX_WATCH_PROGRESS_ENTRIES;for(let e=0;e<t;e++){const t=o[e];t&&delete r[t[0]]}}return this.set("watch_progress",r)}getWatchProgress(e){if(!e)return null;const t=(this.get("watch_progress",Object.create(null),re)??Object.create(null))[e];return t&&ae(t)?t:null}clearWatchProgress(e){if(!e)return!1;const t=this.get("watch_progress",Object.create(null),re)??Object.create(null);return!t[e]||(delete t[e],this.set("watch_progress",t))}},n(Z,"MAX_WATCH_PROGRESS_ENTRIES",100),ee=Z}});function le(e,t,i="player.captions"){const s=(e??"").trim(),a=(t??"").trim();if(""!==s&&!/^\d+$/.test(s)&&!/^(null|undefined)$/i.test(s))return s;if(""!==a&&!/^(null|undefined)$/i.test(a)){try{const e=new Intl.DisplayNames([a,"en"],{type:"language"}).of(a);if(e&&e.toLowerCase()!==a.toLowerCase())return e}catch{}return a.toUpperCase()}return x.t(i)}var de,he,ce=s({"src/utils/TrackLabelUtils.ts"(){V()}}),ue=s({"src/controls/CaptionManager.ts"(){d(),V(),oe(),j(),ce(),de=class{constructor(e){n(this,"player"),n(this,"_altCueChangeHandler",null),n(this,"cueChangeHandler",null),n(this,"currentCue"),n(this,"currentTrack"),n(this,"debouncedPositionCaptions"),n(this,"element"),n(this,"storage"),n(this,"tracks"),this.player=e,this.tracks=[],this.currentTrack=null,this.currentCue=null,this.storage=new ee("vidply"),this.loadSavedPreferences(),this.init()}loadSavedPreferences(){const e=this.storage.getCaptionPreferences();e&&("string"==typeof e.fontSize&&(this.player.options.captionsFontSize=e.fontSize),"string"==typeof e.fontFamily&&(this.player.options.captionsFontFamily=e.fontFamily),"string"==typeof e.color&&(this.player.options.captionsColor=e.color),"string"==typeof e.backgroundColor&&(this.player.options.captionsBackgroundColor=e.backgroundColor),"number"==typeof e.opacity&&(this.player.options.captionsOpacity=e.opacity))}saveCaptionPreferences(){this.storage.saveCaptionPreferences({fontSize:this.player.options.captionsFontSize,fontFamily:this.player.options.captionsFontFamily,color:this.player.options.captionsColor,backgroundColor:this.player.options.captionsBackgroundColor,opacity:this.player.options.captionsOpacity})}init(){this.createElement(),this.loadTracks(),this.attachEvents(),this.player.options.captionsDefault&&this.tracks.length>0&&!this.currentTrack&&this.enable()}createElement(){this.element=e.createElement("div",{className:`${this.player.options.classPrefix}-captions`,attributes:{role:"region","aria-label":x.t("player.captions"),"aria-live":"polite"}}),this.updateStyles(),(this.player.videoWrapper||this.player.container).appendChild(this.element)}loadTracks(){const e=this.player.element.textTracks;let t=-1;const i=new Map;for(let s=0;s<e.length;s++){const a=e[s];if(a&&("subtitles"===a.kind||"captions"===a.kind)&&!a._vidplyStale){a.mode="hidden";const e=`${a.language}|${a.label}`,n=i.get(e);if(n){n.alternatives.push(a);continue}const r=this.player.findTrackElement(a),o=!!r&&r.hasAttribute("default"),l={track:a,language:a.language,label:le(a.label,a.language),kind:a.kind,index:s,isDefault:o,alternatives:[]};this.tracks.push(l),i.set(e,l),o&&(t=this.tracks.length-1)}}t>=0&&requestAnimationFrame(()=>{this.enable(t)})}_syncHlsSubtitleTrack(e,t){var i;const s=this.player.renderer;if(!(null==s?void 0:s.hls)||!(null==(i=s.hls.subtitleTracks)?void 0:i.length))return;const a=s.hls.subtitleTracks;let n=a.findIndex(t=>t.lang===e);n<0&&t&&(n=a.findIndex(e=>e.name===t)),n>=0&&s.hls.subtitleTrack!==n&&(s.hls.subtitleTrack=n,this.player.log(`HLS subtitle track set to index ${n} (${e})`,"info"))}attachEvents(){this.player.on("timeupdate",()=>{this.updateCaptions()}),this.player.on("textcuesupdate",()=>{this.updateCaptions()}),this.player.on("captionschange",()=>{this.updateStyles()}),this.debouncedPositionCaptions=W(()=>{this.positionCaptionsOnMobile()},150),window.addEventListener("resize",this.debouncedPositionCaptions,{signal:this.player.lifecycleSignal}),this.player.on("enterfullscreen",()=>{K(()=>this.positionCaptionsOnMobile(),100)}),this.player.on("exitfullscreen",()=>{K(()=>this.positionCaptionsOnMobile(),100)})}enable(e=0){if(0===this.tracks.length)return;this._cleanupTrackListeners();const t=this.tracks[e];if(t&&t.track){t.track.mode="hidden",this.currentTrack=t,this.player.state.captionsEnabled=!0,t.language&&this.element.setAttribute("lang",t.language);const e=()=>{this.updateCaptions()};if(this.cueChangeHandler=e,t.track.addEventListener("cuechange",e),t.alternatives&&t.alternatives.length>0){const i=()=>{if(this.currentTrack===t)for(const s of t.alternatives)if(s.activeCues&&s.activeCues.length>0)return this.player.log(`Switching to alternative caption track for "${t.label}"`,"info"),t.track.removeEventListener("cuechange",e),t.alternatives.forEach(e=>e.removeEventListener("cuechange",i)),t.track=s,t.track.addEventListener("cuechange",e),this._altCueChangeHandler=null,void this.updateCaptions()};this._altCueChangeHandler=i,t.alternatives.forEach(e=>{e.mode="hidden",e.addEventListener("cuechange",i)})}const i=this.player.findTrackElement(t.track),s=()=>{if(i&&i.readyState<2){const e=()=>{i.removeEventListener("load",e),i.removeEventListener("error",e),requestAnimationFrame(()=>{this.currentTrack&&this.currentTrack.track===t.track&&this.updateCaptions()})};i.addEventListener("load",e,{once:!0}),i.addEventListener("error",e,{once:!0})}else requestAnimationFrame(()=>{this.currentTrack&&this.currentTrack.track===t.track&&this.updateCaptions()})};requestAnimationFrame(()=>{this.currentTrack&&this.currentTrack.track===t.track&&s()}),this._syncHlsSubtitleTrack(t.language,t.label),this.player.emit("captionsenabled",t)}}_cleanupTrackListeners(){if(this.currentTrack&&this.currentTrack.track){const e=this.cueChangeHandler;e&&this.currentTrack.track.removeEventListener("cuechange",e);const t=this._altCueChangeHandler;t&&this.currentTrack.alternatives&&this.currentTrack.alternatives.forEach(e=>{e.removeEventListener("cuechange",t)}),this.currentTrack.track.mode="hidden"}this._altCueChangeHandler=null}disable(){this._cleanupTrackListeners(),this.currentTrack=null,this.element.style.display="none",this.element.replaceChildren(),this.element.removeAttribute("lang"),this.currentCue=null,this.player.state.captionsEnabled=!1,this.player.emit("captionsdisabled")}updateCaptions(){var t,i;if(!this.currentTrack||!this.currentTrack.track)return;if(null==(i=null==(t=this.player.renderer)?void 0:t.handlesOwnCaptions)?void 0:i.call(t))return;if("disabled"===this.currentTrack.track.mode&&(this.currentTrack.track.mode="hidden"),"showing"===this.currentTrack.track.mode&&(this.currentTrack.track.mode="hidden"),!this.currentTrack.track.activeCues)return void(this.currentTrack.track.cues&&this.currentTrack.track.cues.length>0&&this.currentCue&&(this.element.replaceChildren(),this.element.style.display="none",this.currentCue=null));const s=this.currentTrack.track.activeCues,a="audio"===this.player.element.tagName.toLowerCase();if(s.length>0){const t=s[0];if(this.currentCue!==t){this.currentCue=t;const i=t.text||"";if(!i.trim())return;const s=e.renderVTTToDOM(i);if(a){this.element.querySelectorAll(`.${this.player.options.classPrefix}-caption-cue`).forEach(e=>e.classList.remove(`${this.player.options.classPrefix}-caption-active`));const e=`cue-${t.startTime}-${t.endTime}`;let i=this.element.querySelector(`[data-cue-id="${e}"]`);i?i.replaceChildren(s):(i=document.createElement("div"),i.className=`${this.player.options.classPrefix}-caption-cue`,i.setAttribute("data-cue-id",e),i.replaceChildren(s),this.element.appendChild(i)),i.classList.add(`${this.player.options.classPrefix}-caption-active`),requestAnimationFrame(()=>{i&&i.scrollIntoView(U("center"))})}else this.element.replaceChildren(s);this.element.style.display="block",this.positionCaptionsOnMobile(),this.player.emit("captionchange",t)}}else this.currentCue&&(a||(this.element.replaceChildren(),this.element.style.display="none"),this.currentCue=null)}positionCaptionsOnMobile(){var e,t;if(!this.element||"none"===this.element.style.display)return;const i=(null==(e=this.player.state)?void 0:e.fullscreen)||!1,s=q();if(!s&&!i)return void(this.element.style.bottom="");const a=null==(t=this.player.controlBar)?void 0:t.element;a&&requestAnimationFrame(()=>{if(!this.element||"none"===this.element.style.display)return;const e=a.getBoundingClientRect();if(!this.player.videoWrapper)return;const t=this.player.videoWrapper.getBoundingClientRect().bottom-e.top+16;this.element.style.bottom=`${t}px`,this.player.options.debug&&console.log("[VidPly] Caption position:",{mobile:s,isFullscreen:i,controlsHeight:e.height,bottomOffset:`${t}px`})})}updateStyles(){if(!this.element)return;const e=this.player.options;this.element.style.fontSize=e.captionsFontSize,this.element.style.fontFamily=e.captionsFontFamily,this.element.style.color=e.captionsColor,this.element.style.backgroundColor=this.hexToRgba(e.captionsBackgroundColor,e.captionsOpacity)}hexToRgba(e,t){const i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return i&&i[1]&&i[2]&&i[3]?`rgba(${parseInt(i[1],16)}, ${parseInt(i[2],16)}, ${parseInt(i[3],16)}, ${t})`:e}setCaptionStyle(e,t){switch(e){case"fontSize":this.player.options.captionsFontSize=String(t);break;case"fontFamily":this.player.options.captionsFontFamily=String(t);break;case"color":this.player.options.captionsColor=String(t);break;case"backgroundColor":this.player.options.captionsBackgroundColor=String(t);break;case"opacity":this.player.options.captionsOpacity=Number(t)}this.updateStyles(),this.saveCaptionPreferences(),this.player.emit("captionschange")}getAvailableTracks(){return this.tracks.map((e,t)=>({index:t,language:e.language,label:e.label||e.language,kind:e.kind}))}refreshTracks(){var e;const t=null==(e=this.currentTrack)?void 0:e.language,i=this.player.state.captionsEnabled;if(this.currentTrack&&this.disable(),this.tracks=[],this.loadTracks(),this.player.log(`Caption tracks refreshed, found ${this.tracks.length} tracks`,"info"),i&&t&&this.tracks.length>0){const e=this.tracks.findIndex(e=>e.language===t);e>=0&&this.enable(e)}return this.tracks.length}switchTrack(e){e>=0&&e<this.tracks.length&&(this.disable(),this.enable(e))}destroy(){this.disable(),this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}}}}),pe={};a(pe,{HTML5Renderer:()=>he});var ge,ye,me=s({"src/renderers/HTML5Renderer.ts"(){he=class{constructor(e){n(this,"player"),n(this,"media"),n(this,"_didDeferredLoad"),n(this,"_listenerController"),this.player=e,this.media=e.element,this._didDeferredLoad=!1,this._listenerController=new AbortController}async init(){this.media.controls=!1,this.media.removeAttribute("controls"),this.attachEvents(),this.player.options.deferLoad?(this.media.preload=this.player.options.preload||"none","metadata"===this.player.options.preload&&this.media.load()):(this.media.preload=this.player.options.preload,this.media.load()),this.player.container&&this.player.container.classList.remove("vidply-external-controls")}attachEvents(){const{signal:e}=this._listenerController;this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata"),"VIDEO"===this.media.tagName&&this.player.autoGeneratePoster().catch(e=>{this.player.log("Failed to auto-generate poster:",e,"warn")})},{signal:e}),this.media.addEventListener("durationchange",()=>{const e=this.media.duration;e&&isFinite(e)&&e>0&&(this.player.state.duration=e,this.player.emit("durationchange",e))},{signal:e}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player),this.player.options.pauseOthersOnPlay&&this.pauseOtherPlayers()},{signal:e}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)},{signal:e}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())},{signal:e}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)},{signal:e}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume),this.player.options.onVolumeChange&&this.player.options.onVolumeChange.call(this.player,this.media.volume)},{signal:e}),this.media.addEventListener("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking")},{signal:e}),this.media.addEventListener("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")},{signal:e}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")},{signal:e}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")},{signal:e}),this.media.addEventListener("progress",()=>{if(this.media.buffered.length>0){const e=this.media.buffered.end(this.media.buffered.length-1);this.player.emit("progress",e)}},{signal:e}),this.media.addEventListener("error",e=>{this.player.handleError(this.media.error)},{signal:e}),this.media.addEventListener("ratechange",()=>{this.player.state.playbackSpeed=this.media.playbackRate,this.player.emit("ratechange",this.media.playbackRate)},{signal:e})}pauseOtherPlayers(){document.querySelectorAll(".vidply-player").forEach(e=>{if(e!==this.player.container){const t=e.querySelector("video, audio");t&&!t.paused&&t.pause()}})}play(){const e=window.scrollX,t=window.scrollY;if(this.player.options.deferLoad&&!this._didDeferredLoad){try{0===this.media.readyState&&this.media.load()}catch{}this._didDeferredLoad=!0}const i=this.media.play();return window.scrollTo(e,t),void 0!==i?(i.catch(e=>{if(this.player.log("Play failed:",e,"warn"),this.player.options.autoplay&&!this.player.state.muted){this.player.log("Retrying play with muted audio","info"),this.media.muted=!0;const e=window.scrollX,t=window.scrollY;this.media.play().then(()=>{window.scrollTo(e,t)}).catch(e=>{this.player.handleError(e)})}}),i):Promise.resolve()}ensureLoaded(){if(this.player.options.deferLoad&&!this._didDeferredLoad){try{0===this.media.readyState&&this.media.load()}catch{}this._didDeferredLoad=!0}}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}getQualities(){const e=Array.from(this.media.querySelectorAll("source"));return e.length<=1?[]:e.map((e,t)=>{const i=e.getAttribute("data-quality")||e.getAttribute("data-label")||e.getAttribute("label")||"",s=e.getAttribute("data-height")||String(this.extractHeightFromLabel(i)),a=e.getAttribute("data-width")||"";return{index:t,height:s?parseInt(s):0,width:a?parseInt(a):0,src:e.src,type:e.type,name:i||(s?`${s}p`:`Quality ${t+1}`)}}).filter(e=>e.height>0)}extractHeightFromLabel(e){const t=e.match(/(\d+)p/i);return t&&t[1]?parseInt(t[1],10):0}switchQuality(e){const t=this.getQualities();if(e<0||e>=t.length)return void this.player.log("Invalid quality index","warn");const i=t[e];if(!i||!i.src)return;const s=this.media.currentTime,a=!this.media.paused;if(this.media.currentSrc===i.src)return void this.player.log("Already at this quality level","info");this.player.log(`Switching to quality: ${i.name}`,"info"),this.media.src=i.src;const n=()=>{this.media.removeEventListener("loadedmetadata",n),this.media.currentTime=s,a&&this.media.play().catch(()=>{this.player.log("Failed to resume playback after quality switch","warn")}),this.player.emit("qualitychange",{quality:i.name,index:e})};this.media.addEventListener("loadedmetadata",n),this.media.load()}getCurrentQuality(){var e;const t=this.getQualities(),i=this.media.currentSrc;for(let s=0;s<t.length;s++)if((null==(e=t[s])?void 0:e.src)===i)return s;return 0}destroy(){this._listenerController.abort()}}}}),fe=s({"src/core/DescriptionSpeechManager.ts"(){ge=class{constructor(e){n(this,"player"),n(this,"enabled",!1),n(this,"descriptionTrack",null),n(this,"cueChangeHandler",null),n(this,"seekedHandler",null),n(this,"wasPlayingBeforeCue",!1),n(this,"speaking",!1),n(this,"lastSpokenCueKey",null),n(this,"_pendingUtterance",null),this.player=e}canUseSpeech(){return!1!==this.player.options.audioDescriptionSpeech&&"undefined"!=typeof window&&"speechSynthesis"in window}findDescriptionTrack(){var e,t,i;const s=(this.player.element?Array.from(this.player.element.textTracks||[]):[]).filter(e=>"descriptions"===e.kind&&!e._vidplyStale);if(0===s.length)return null;const a=null==(i=null==(t=null==(e=this.player.captionManager)?void 0:e.currentTrack)?void 0:t.track)?void 0:i.language;if(a){const e=s.find(e=>e.language===a);if(e)return e}return s[0]??null}enable(){const e=this.findDescriptionTrack();return!!e&&(this.canUseSpeech()?(this.descriptionTrack=e,e.mode="hidden",this.cueChangeHandler=()=>{this.handleCueChange()},e.addEventListener("cuechange",this.cueChangeHandler),this.seekedHandler=()=>{this.cancelSpeech(),this.lastSpokenCueKey=null,this.handleCueChange()},this.player.on("seeked",this.seekedHandler),this.enabled=!0,this.handleCueChange(),!0):(e.mode="showing",!0))}disable(){this.cancelSpeech(),this.lastSpokenCueKey=null,this.enabled=!1,this.descriptionTrack&&this.cueChangeHandler&&this.descriptionTrack.removeEventListener("cuechange",this.cueChangeHandler),this.seekedHandler&&this.player.off("seeked",this.seekedHandler),this.descriptionTrack&&(this.descriptionTrack.mode="hidden"),this.cueChangeHandler=null,this.seekedHandler=null,this.descriptionTrack=null,this.wasPlayingBeforeCue=!1}handleCueChange(){var e;if(!this.enabled||!this.descriptionTrack||!this.canUseSpeech())return;const t=this.descriptionTrack.activeCues;if(!t||0===t.length)return;const i=t[0],s=null==(e=i.text)?void 0:e.trim();if(!s)return;const a=`${i.startTime}:${i.endTime}:${s}`;this.speaking&&this.lastSpokenCueKey===a||(this.lastSpokenCueKey!==a||this.player.state.playing)&&this.speakCue(i,a)}speakCue(e,t){var i;if(!this.canUseSpeech())return;if(this.player.state.paused&&!this.speaking&&!this.wasPlayingBeforeCue)return;this.cancelSpeech(),this.wasPlayingBeforeCue=this.player.state.playing,this.wasPlayingBeforeCue&&this.player.pause(),this.speaking=!0,this.lastSpokenCueKey=t;const s={time:e.startTime,endTime:e.endTime,text:e.text.trim(),cue:e};this.player.emit("audiodescriptioncuestart",s);const a=new SpeechSynthesisUtterance(s.text),n=(null==(i=this.descriptionTrack)?void 0:i.language)||this.player.options.language||"en";a.lang=n;const r=()=>{this._pendingUtterance===a&&(this._pendingUtterance=null,this.speaking=!1,this.player.emit("audiodescriptioncueend",s),(!1!==this.player.options.audioDescriptionExtended?this.wasPlayingBeforeCue:this.wasPlayingBeforeCue&&this.player.state.currentTime<e.endTime)&&this.enabled&&this.player.play(),this.wasPlayingBeforeCue=!1)};a.onend=r,a.onerror=r,this._pendingUtterance=a,window.speechSynthesis.speak(a)}cancelSpeech(){"undefined"!=typeof window&&window.speechSynthesis&&window.speechSynthesis.cancel(),this._pendingUtterance=null,this.speaking=!1,this.wasPlayingBeforeCue=!1}destroy(){this.disable()}}}}),ve={};a(ve,{AudioDescriptionManager:()=>ye});var be,we=s({"src/core/AudioDescriptionManager.ts"(){ue(),fe(),ye=class{constructor(e){n(this,"player"),n(this,"captionTracks"),n(this,"desiredState"),n(this,"enabled"),n(this,"originalSource"),n(this,"sourceElement"),n(this,"src"),n(this,"speechManager"),this.player=e,this.enabled=!1,this.desiredState=!1,this.src=e.options.audioDescriptionSrc,this.sourceElement=null,this.originalSource=null,this.captionTracks=[],this.speechManager=null}_hasSwapSource(){const e=this.player.sourceElements.some(e=>e.getAttribute("data-desc-src"));return Boolean(this.src||e)}_hasDescriptionsTrack(){return Boolean(this.player.findTextTrack("descriptions"))}resolveDeliveryMode(){const e=this.player.options.audioDescriptionMode??"auto",t=this._hasSwapSource(),i=this._hasDescriptionsTrack();return"swap"===e?t?"swap":"none":"vtt_speech"===e?i?"vtt_speech":"none":t?"swap":i?"vtt_speech":"none"}_ensureSpeechManager(){return this.speechManager||(this.speechManager=new ge(this.player)),this.speechManager}initFromSourceElements(e,t){for(const t of e){const e=t.getAttribute("data-desc-src"),i=t.getAttribute("data-orig-src");if(e||i){if(this.sourceElement||(this.sourceElement=t),i)this.originalSource||(this.originalSource=i),this.player.originalSrc||(this.player.originalSrc=i);else{const e=t.getAttribute("src");!this.originalSource&&e&&(this.originalSource=e),!this.player.originalSrc&&e&&(this.player.originalSrc=e)}e&&!this.src&&(this.src=e)}}t.forEach(e=>{const t=e.getAttribute("kind"),i=e.getAttribute("data-desc-src");("captions"===t||"subtitles"===t||"chapters"===t||"descriptions"===t)&&i&&e instanceof HTMLTrackElement&&(this.captionTracks.push({trackElement:e,originalSrc:e.getAttribute("src"),describedSrc:i,originalTrackSrc:e.getAttribute("data-orig-src")||e.getAttribute("src"),explicit:!0}),this.player.log(`Found explicit described ${t} track: ${e.getAttribute("src")} -> ${i}`))})}isAvailable(){const e=this.resolveDeliveryMode();return"swap"===e||"vtt_speech"===e||this.captionTracks.length>0}async enable(){const e=this.resolveDeliveryMode(),t=this.captionTracks.length>0;if("none"===e&&!t)return void console.warn("VidPly: No audio description source, descriptions track, or tracks provided");if(this.desiredState=!0,"vtt_speech"===e)return this._ensureSpeechManager().enable()?(this.enabled=!0,this.player.state.audioDescriptionEnabled=!0,void this.player.emit("audiodescriptionenabled")):void console.warn("VidPly: No descriptions track available for VTT speech mode");const i=this.player.state.currentTime,s=this.player.state.playing,a=this.player.element.poster||this.player.element.getAttribute("poster")||this.player.options.poster,n=i<.1&&!s,r=this._getCurrentCaptionText();this.sourceElement?await this._enableWithSourceElement(i,s,a,n,r):this.src?await this._enableWithDirectSrc(i,s,a,n):t&&(await this._swapCaptionTracks(!0),this.enabled=!0,this.player.emit("audiodescriptionenabled"))}async disable(){var e;if(this.desiredState=!1,null==(e=this.speechManager)?void 0:e.enabled)return this.speechManager.disable(),this.enabled=!1,this.player.state.audioDescriptionEnabled=!1,void this.player.emit("audiodescriptiondisabled");if(!this.sourceElement&&!this.src&&this.captionTracks.length>0)return await this._swapCaptionTracks(!1),this.enabled=!1,void this.player.emit("audiodescriptiondisabled");if(!this.player.originalSrc)return;const t=this.player.state.currentTime,i=this.player.state.playing,s=this.player.element.poster||this.player.element.getAttribute("poster")||this.player.options.poster,a=t<.1&&!i,n=this._getCurrentCaptionText();this.sourceElement?await this._disableWithSourceElement(t,i,s,a,n):this.src&&await this._disableWithDirectSrc(t,i,s)}async toggle(){const e=this.resolveDeliveryMode(),t=this.player.findTextTrack("descriptions"),i=this._hasSwapSource()||this.captionTracks.length>0;"vtt_speech"!==e?t&&!i?"showing"===t.mode?(t.mode="hidden",this.enabled=!1,this.player.state.audioDescriptionEnabled=!1,this.player.emit("audiodescriptiondisabled")):(t.mode="showing",this.enabled=!0,this.player.state.audioDescriptionEnabled=!0,this.player.emit("audiodescriptionenabled")):t&&i?this.enabled?(this.desiredState=!1,await this.disable()):(t.mode="showing",this.desiredState=!0,await this.enable()):i&&(this.enabled?(this.desiredState=!1,await this.disable()):(this.desiredState=!0,await this.enable())):this.enabled?await this.disable():await this.enable()}_getCurrentCaptionText(){return this.player.captionManager&&this.player.captionManager.currentTrack&&this.player.captionManager.currentCue?this.player.captionManager.currentCue.text:null}async _validateTrackExists(e){if("string"!=typeof e||!e)return!1;const t=[],i=this.player.lifecycleSignal;let s;if(i&&t.push(i),"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&t.push(AbortSignal.timeout(8e3)),1===t.length)s=t[0];else if(t.length>1){const e=AbortSignal.any;s=e?e(t):t[0]}try{return(await fetch(e,{method:"HEAD",signal:s})).ok}catch{return!1}}async _swapCaptionTracks(e=!0){if(0===this.captionTracks.length)return[];const t=[],i=this.captionTracks.map(async t=>{if(t.trackElement&&t.describedSrc&&!0===t.explicit){const i=e?t.describedSrc:t.originalSrc;if(!i)return{trackInfo:t,exists:!1};try{return{trackInfo:t,exists:await this._validateTrackExists(i)}}catch{return{trackInfo:t,exists:!1}}}return{trackInfo:t,exists:!1}}),s=(await Promise.all(i)).filter(e=>e.exists);if(s.length>0){const i=new Map;s.forEach(({trackInfo:e})=>{const t=e.trackElement.track;i.set(e,t?{wasShowing:"showing"===t.mode,wasHidden:"hidden"===t.mode}:{wasShowing:!1,wasHidden:!1})});const a=s.map(({trackInfo:e})=>{const t={};Array.from(e.trackElement.attributes).forEach(e=>{t[e.name]=e.value});const i={trackInfo:e,oldSrc:e.trackElement.getAttribute("src"),parent:e.trackElement.parentNode,nextSibling:e.trackElement.nextSibling,attributes:t};return e.trackElement.remove(),i});this.player.element.load(),await new Promise(s=>{this.player.setManagedTimeout(()=>{a.forEach(({trackInfo:i,parent:s,nextSibling:a,attributes:n})=>{const r=e?i.describedSrc:i.originalSrc;if(!r)return;t.push(i);const o=document.createElement("track");o.setAttribute("src",r),Object.keys(n).forEach(e=>{const t=n[e];"src"!==e&&"data-desc-src"!==e&&void 0!==t&&o.setAttribute(e,t)});const l=s||this.player.element;a&&a.parentNode?l.insertBefore(o,a):l.appendChild(o),i.trackElement=o}),this.player.invalidateTrackCache();const n=()=>{this.player.setManagedTimeout(()=>{t.forEach(e=>{const t=e.trackElement,s=t.track;if(s){const a=i.get(e)||{wasShowing:!1,wasHidden:!1};s.mode="hidden";const n=()=>{s.mode=a.wasShowing||a.wasHidden?"hidden":"disabled"};t.readyState>=2?n():(t.addEventListener("load",n,{once:!0}),t.addEventListener("error",n,{once:!0}))}})},300)};this.player.element.readyState>=1?this.player.setManagedTimeout(n,200):(this.player.element.addEventListener("loadedmetadata",n,{once:!0}),this.player.setManagedTimeout(n,2e3)),s()},100)})}return t}_updateSourceElements(e=!0){const t=this.player.sourceElements,i=[];t.forEach(t=>{const s=t.getAttribute("data-desc-src"),a=t.getAttribute("src");if(s){const n=t.getAttribute("type"),r=t.getAttribute("data-orig-src")||a;i.push({src:e?s:r,type:n,origSrc:r,descSrc:s})}else i.push({src:t.getAttribute("src"),type:t.getAttribute("type"),origSrc:null,descSrc:null})}),this.player.element.hasAttribute("src")&&this.player.element.removeAttribute("src"),t.forEach(e=>e.remove()),i.forEach(e=>{if(!e.src)return;const t=document.createElement("source");t.setAttribute("src",e.src),e.type&&t.setAttribute("type",e.type),e.origSrc&&t.setAttribute("data-orig-src",e.origSrc),e.descSrc&&t.setAttribute("data-desc-src",e.descSrc);const i=this.player.element.querySelector("track");i?this.player.element.insertBefore(t,i):this.player.element.appendChild(t)}),this.player._sourceElementsDirty=!0,this.player._sourceElementsCache=null}async _waitForMediaReady(e=!1){await new Promise(e=>{if(this.player.element.readyState>=1)e();else{const t=()=>{this.player.element.removeEventListener("loadedmetadata",t),e()};this.player.element.addEventListener("loadedmetadata",t)}}),await new Promise(e=>setTimeout(e,300)),e&&await new Promise(e=>{if(this.player.element.readyState>=3)e();else{const t=()=>{this.player.element.removeEventListener("canplay",t),this.player.element.removeEventListener("canplaythrough",t),e()};this.player.element.addEventListener("canplay",t,{once:!0}),this.player.element.addEventListener("canplaythrough",t,{once:!0}),setTimeout(()=>{this.player.element.removeEventListener("canplay",t),this.player.element.removeEventListener("canplaythrough",t),e()},3e3)}})}async _restorePlaybackState(e,t,i,s){let a=e;if(s&&this.player.captionManager&&this.player.captionManager.tracks.length>0){await new Promise(e=>setTimeout(e,500));const t=this.player.findMatchingCaptionTime(s,this.player.captionManager.tracks);null!==t&&(a=t,this.player.options.debug&&this.player.log(`[VidPly] Syncing via caption: ${e}s -> ${a}s`))}a>0&&(this.player.seek(a),await new Promise(e=>setTimeout(e,100))),t?(await this.player.play(),this.player.setManagedTimeout(()=>{this.player.hidePosterOverlay()},100)):(this.player.pause(),i||this.player.hidePosterOverlay())}async _enableWithSourceElement(e,t,i,s,a){await this._swapCaptionTracks(!0),this._updateSourceElements(!0),i&&"VIDEO"===this.player.element.tagName&&(this.player.element.poster=i),this.player.element.load(),await this._waitForMediaReady(e>0||t),await this._restorePlaybackState(e,t,s,a),this.desiredState&&(this.enabled=!0,this.player.state.audioDescriptionEnabled=!0,this.player.emit("audiodescriptionenabled"),this._reloadTranscript())}async _enableWithDirectSrc(e,t,i,s){await this._swapCaptionTracks(!0),i&&"VIDEO"===this.player.element.tagName&&(this.player.element.poster=i),this.src&&(this.player.element.src=this.src,await this._waitForMediaReady(e>0||t),e>0&&(this.player.seek(e),await new Promise(e=>setTimeout(e,100))),t?await this.player.play():(this.player.pause(),s||this.player.hidePosterOverlay()),this.desiredState&&(this.enabled=!0,this.player.state.audioDescriptionEnabled=!0,this.player.emit("audiodescriptionenabled"),this._reloadTranscript()))}async _disableWithSourceElement(e,t,i,s,a){await this._swapCaptionTracks(!1),this._updateSourceElements(!1),i&&"VIDEO"===this.player.element.tagName&&(this.player.element.poster=i),this.player.element.load(),this.player.invalidateTrackCache(),await this._waitForMediaReady(e>0||t),await this._restorePlaybackState(e,t,s,a),this.player.captionManager&&(this.player.captionManager.destroy(),this.player.captionManager=new de(this.player)),this.desiredState||(this.enabled=!1,this.player.state.audioDescriptionEnabled=!1,this.player.emit("audiodescriptiondisabled"),this._reloadTranscript())}async _disableWithDirectSrc(e,t,i){await this._swapCaptionTracks(!1),i&&"VIDEO"===this.player.element.tagName&&(this.player.element.poster=i);const s=this.originalSource||this.player.originalSrc;s&&(this.player.element.src=s,this.player.element.load(),await this._waitForMediaReady(e>0||t),e>0&&this.player.seek(e),t&&await this.player.play(),this.desiredState||(this.enabled=!1,this.player.state.audioDescriptionEnabled=!1,this.player.emit("audiodescriptiondisabled"),this._reloadTranscript()))}_reloadTranscript(){this.player.transcriptManager&&this.player.transcriptManager.isVisible&&this.player.setManagedTimeout(()=>{this.player.transcriptManager&&this.player.transcriptManager.loadTranscriptData&&this.player.transcriptManager.loadTranscriptData()},800)}updateSources(e){var t;null==(t=this.speechManager)||t.destroy(),this.speechManager=null,this.src=e||null,this.enabled=!1,this.desiredState=!1,this.sourceElement=null,this.originalSource=null,this.captionTracks=[]}reinitialize(){this.player.invalidateTrackCache(),this.initFromSourceElements(this.player.sourceElements,this.player.trackElements)}destroy(){var e;null==(e=this.speechManager)||e.destroy(),this.speechManager=null,this.enabled=!1,this.desiredState=!1,this.captionTracks=[],this.sourceElement=null,this.originalSource=null}}}}),Se=s({"src/utils/DraggableResizable.ts"(){be=class{constructor(e,t={}){n(this,"element"),n(this,"options"),n(this,"isDragging"),n(this,"isResizing"),n(this,"resizeDirection"),n(this,"dragOffsetX"),n(this,"dragOffsetY"),n(this,"positionOffsetX"),n(this,"positionOffsetY"),n(this,"initialMouseX"),n(this,"initialMouseY"),n(this,"needsPositionConversion"),n(this,"resizeStartX"),n(this,"resizeStartY"),n(this,"resizeStartWidth"),n(this,"resizeStartHeight"),n(this,"resizeStartLeft"),n(this,"resizeStartTop"),n(this,"keyboardDragMode"),n(this,"keyboardResizeMode"),n(this,"pointerResizeMode"),n(this,"manuallyPositioned"),n(this,"resizeHandlesManaged"),n(this,"resizeIndicatorElement"),n(this,"handlers"),n(this,"activePointerId"),n(this,"activePointerType"),this.element=e,this.options={dragHandle:null,resizeHandles:[],onDragStart:null,onDrag:null,onDragEnd:null,onResizeStart:null,onResize:null,onResizeEnd:null,constrainToViewport:!0,minWidth:150,minHeight:100,maintainAspectRatio:!1,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:5,keyboardStepLarge:10,maxWidth:null,maxHeight:null,pointerResizeIndicatorText:null,onPointerResizeToggle:null,classPrefix:"draggable",storage:null,storageKey:null,...t},this.isDragging=!1,this.isResizing=!1,this.resizeDirection=null,this.dragOffsetX=0,this.dragOffsetY=0,this.positionOffsetX=0,this.positionOffsetY=0,this.initialMouseX=0,this.initialMouseY=0,this.needsPositionConversion=!1,this.resizeStartX=0,this.resizeStartY=0,this.resizeStartWidth=0,this.resizeStartHeight=0,this.resizeStartLeft=0,this.resizeStartTop=0,this.keyboardDragMode=!1,this.keyboardResizeMode=!1,this.pointerResizeMode=!1,this.manuallyPositioned=!1,this.resizeHandlesManaged=new Map,this.resizeIndicatorElement=null,this.handlers={mousedown:this.onMouseDown.bind(this),mousemove:this.onMouseMove.bind(this),mouseup:this.onMouseUp.bind(this),touchstart:this.onTouchStart.bind(this),touchmove:this.onTouchMove.bind(this),touchend:this.onTouchEnd.bind(this),pointerdown:this.onPointerDown.bind(this),pointermove:this.onPointerMove.bind(this),pointerup:this.onPointerUp.bind(this),pointercancel:this.onPointerUp.bind(this),keydown:this.onKeyDown.bind(this),resizeHandleMousedown:this.onResizeHandleMouseDown.bind(this),resizeHandlePointerDown:this.onResizeHandlePointerDown.bind(this)},this.activePointerId=null,this.activePointerType=null,this.init()}hasManagedResizeHandles(){return Array.from(this.resizeHandlesManaged.values()).some(Boolean)}storeOriginalHandleDisplay(e){e.dataset.originalDisplay||(e.dataset.originalDisplay=e.style.display||"")}hideResizeHandle(e){e.style.display="none",e.setAttribute("aria-hidden","true")}showResizeHandle(e){e.style.display=void 0!==e.dataset.originalDisplay?e.dataset.originalDisplay:"",e.removeAttribute("aria-hidden")}setManagedHandlesVisible(e){this.options.resizeHandles&&0!==this.options.resizeHandles.length&&this.options.resizeHandles.forEach(t=>{this.resizeHandlesManaged.get(t)&&(e?this.showResizeHandle(t):this.hideResizeHandle(t))})}init(){const e=this.options.dragHandle||this.element;"undefined"!=typeof window&&"PointerEvent"in window?(e.addEventListener("pointerdown",this.handlers.pointerdown),document.addEventListener("pointerup",this.handlers.pointerup),document.addEventListener("pointercancel",this.handlers.pointercancel)):(e.addEventListener("mousedown",this.handlers.mousedown),e.addEventListener("touchstart",this.handlers.touchstart,{passive:!1}),document.addEventListener("mousemove",this.handlers.mousemove),document.addEventListener("mouseup",this.handlers.mouseup),document.addEventListener("touchmove",this.handlers.touchmove,{passive:!1}),document.addEventListener("touchend",this.handlers.touchend)),this.element.addEventListener("keydown",this.handlers.keydown),this.options.resizeHandles&&this.options.resizeHandles.length>0&&this.options.resizeHandles.forEach(e=>{"undefined"!=typeof window&&"PointerEvent"in window?e.addEventListener("pointerdown",this.handlers.resizeHandlePointerDown):(e.addEventListener("mousedown",this.handlers.resizeHandleMousedown),e.addEventListener("touchstart",this.handlers.resizeHandleMousedown,{passive:!1}));const t="true"===e.dataset.vidplyManagedResize;this.resizeHandlesManaged.set(e,t),t&&(this.storeOriginalHandleDisplay(e),this.hideResizeHandle(e))})}onPointerDown(e){var t,i;if(!1!==e.isPrimary&&("mouse"!==e.pointerType||0===e.button)&&!e.target.classList.contains(`${this.options.classPrefix}-resize-handle`)&&(!this.options.onDragStart||this.options.onDragStart(e))){this.activePointerId=e.pointerId,this.activePointerType=e.pointerType;try{null==(i=null==(t=e.currentTarget)?void 0:t.setPointerCapture)||i.call(t,e.pointerId)}catch{}this.startDragging(e.clientX,e.clientY),e.preventDefault()}}onPointerMove(e){null!==this.activePointerId&&e.pointerId!==this.activePointerId||(this.isDragging?(this.drag(e.clientX,e.clientY),e.preventDefault()):this.isResizing&&(this.resize(e.clientX,e.clientY),e.preventDefault()))}onPointerUp(e){null!==this.activePointerId&&e.pointerId!==this.activePointerId||(this.isDragging?this.stopDragging():this.isResizing&&this.stopResizing(),this.activePointerId=null,this.activePointerType=null)}onMouseDown(e){e.target.classList.contains(`${this.options.classPrefix}-resize-handle`)||this.options.onDragStart&&!this.options.onDragStart(e)||(this.startDragging(e.clientX,e.clientY),e.preventDefault())}onTouchStart(e){if(e.target.classList.contains(`${this.options.classPrefix}-resize-handle`))return;if(this.options.onDragStart&&!this.options.onDragStart(e))return;const t=e.touches[0];t&&(this.startDragging(t.clientX,t.clientY),e.preventDefault())}onResizeHandlePointerDown(e){var t,i;if(!1!==e.isPrimary&&("mouse"!==e.pointerType||0===e.button)){e.preventDefault(),e.stopPropagation(),this.resizeDirection=e.target.getAttribute("data-direction"),this.activePointerId=e.pointerId,this.activePointerType=e.pointerType;try{null==(i=null==(t=e.currentTarget)?void 0:t.setPointerCapture)||i.call(t,e.pointerId)}catch{}this.startResizing(e.clientX,e.clientY)}}onResizeHandleMouseDown(e){var t,i,s,a;e.preventDefault(),e.stopPropagation(),this.resizeDirection=e.target.getAttribute("data-direction");const n="clientX"in e?e.clientX:null==(i=null==(t=e.touches)?void 0:t[0])?void 0:i.clientX,r="clientY"in e?e.clientY:null==(a=null==(s=e.touches)?void 0:s[0])?void 0:a.clientY;void 0!==n&&void 0!==r&&this.startResizing(n,r)}onMouseMove(e){this.isDragging?(this.drag(e.clientX,e.clientY),e.preventDefault()):this.isResizing&&(this.resize(e.clientX,e.clientY),e.preventDefault())}onTouchMove(e){if(this.isDragging||this.isResizing){const t=e.touches[0];if(!t)return;this.isDragging?this.drag(t.clientX,t.clientY):this.resize(t.clientX,t.clientY),e.preventDefault()}}onMouseUp(){this.isDragging?this.stopDragging():this.isResizing&&this.stopResizing()}onTouchEnd(){this.isDragging?this.stopDragging():this.isResizing&&this.stopResizing()}onKeyDown(e){if(e.key.toLowerCase()===this.options.keyboardDragKey.toLowerCase())return e.preventDefault(),void this.toggleKeyboardDragMode();if(e.key.toLowerCase()===this.options.keyboardResizeKey.toLowerCase())return e.preventDefault(),void(this.hasManagedResizeHandles()?this.togglePointerResizeMode():this.toggleKeyboardResizeMode());if("Escape"===e.key){if(this.pointerResizeMode)return e.preventDefault(),void this.disablePointerResizeMode();if(this.keyboardDragMode||this.keyboardResizeMode)return e.preventDefault(),this.disableKeyboardDragMode(),void this.disableKeyboardResizeMode()}["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"].includes(e.key)&&(this.keyboardDragMode?(e.preventDefault(),e.stopPropagation(),this.keyboardDrag(e.key,e.shiftKey)):this.keyboardResizeMode&&(e.preventDefault(),e.stopPropagation(),this.keyboardResize(e.key,e.shiftKey))),"Home"===e.key&&(this.keyboardDragMode||this.keyboardResizeMode)&&(e.preventDefault(),this.resetPosition())}startDragging(e,t){const i=this.element.getBoundingClientRect(),s=window.getComputedStyle(this.element),a="auto"!==s.right||"auto"!==s.bottom||"none"!==s.transform;if(this.positionOffsetX=0,this.positionOffsetY=0,a){let e,t;if("absolute"===s.position){const s=(this.element.offsetParent||document.body).getBoundingClientRect();e=i.left-s.left,t=i.top-s.top,this.positionOffsetX=s.left,this.positionOffsetY=s.top}else if("fixed"===s.position){const a=parseFloat(s.left),n=parseFloat(s.top),r=Number.isFinite(a),o=Number.isFinite(n);e=r?a:i.left,t=o?n:i.top,this.positionOffsetX=i.left-e,this.positionOffsetY=i.top-t}else e=i.left,t=i.top,this.positionOffsetX=i.left-e,this.positionOffsetY=i.top-t;let a=this.element.style.cssText.split(";").filter(e=>{const t=e.trim();if(!t)return!1;const i=t.indexOf(":");if(-1===i)return!1;const s=t.substring(0,i).trim(),a=t.substring(i+1).trim();return!(!a||""===a||"right"===s||"bottom"===s||"transform"===s||"left"===s||"top"===s||"inset"===s||s.startsWith("border-image"))}).join("; ");a&&(a+="; "),a+=`left: ${e}px; top: ${t}px; right: auto; bottom: auto; transform: none`,this.element.style.cssText=a}const n=this.element.getBoundingClientRect();this.dragOffsetX=e-n.left,this.dragOffsetY=t-n.top,this.isDragging=!0,this.element.classList.add(`${this.options.classPrefix}-dragging`),document.body.style.cursor="grabbing",document.body.style.userSelect="none","PointerEvent"in window&&document.addEventListener("pointermove",this.handlers.pointermove,{passive:!1})}drag(e,t){if(!this.isDragging)return;let i=e-this.dragOffsetX-this.positionOffsetX,s=t-this.dragOffsetY-this.positionOffsetY;if(this.options.constrainToViewport){const e=this.element.getBoundingClientRect(),t=document.documentElement.clientWidth,a=document.documentElement.clientHeight,n=100,r=-(e.height-n),o=a-n;i=Math.max(-(e.width-n),Math.min(i,t-n)),s=Math.max(r,Math.min(s,o))}this.element.style.left=`${i}px`,this.element.style.top=`${s}px`,this.options.onDrag&&this.options.onDrag({x:i,y:s})}stopDragging(){this.isDragging=!1,this.element.classList.remove(`${this.options.classPrefix}-dragging`),document.body.style.cursor="",document.body.style.userSelect="","PointerEvent"in window&&document.removeEventListener("pointermove",this.handlers.pointermove),this.manuallyPositioned=!0,this.options.onDragEnd&&this.options.onDragEnd()}startResizing(e,t){this.isResizing=!0,this.resizeStartX=e,this.resizeStartY=t;const i=this.element.getBoundingClientRect();this.resizeStartWidth=i.width,this.resizeStartHeight=i.height,this.resizeStartLeft=i.left,this.resizeStartTop=i.top,this.element.classList.add(`${this.options.classPrefix}-resizing`),document.body.style.userSelect="none","PointerEvent"in window&&document.addEventListener("pointermove",this.handlers.pointermove,{passive:!1}),this.options.onResizeStart&&this.options.onResizeStart()}resize(e,t){if(!this.isResizing)return;const i=e-this.resizeStartX,s=t-this.resizeStartY;let a=this.resizeStartWidth,n=this.resizeStartHeight,r=this.resizeStartLeft,o=this.resizeStartTop;const l=this.resizeDirection??"";if(l.includes("e")&&(a=Math.max(this.options.minWidth,this.resizeStartWidth+i)),l.includes("w")){const e=Math.max(this.options.minWidth,this.resizeStartWidth-i);r=this.resizeStartLeft+(this.resizeStartWidth-e),a=e}const d="function"==typeof this.options.maxWidth?this.options.maxWidth():this.options.maxWidth;if("number"==typeof d&&Number.isFinite(d)){const e=Math.min(a,d);e!==a&&l.includes("w")&&(r+=a-e),a=e}if(!this.options.maintainAspectRatio){if(l.includes("s")&&(n=Math.max(this.options.minHeight,this.resizeStartHeight+s)),l.includes("n")){const e=Math.max(this.options.minHeight,this.resizeStartHeight-s);o=this.resizeStartTop+(this.resizeStartHeight-e),n=e}const e="function"==typeof this.options.maxHeight?this.options.maxHeight():this.options.maxHeight;if("number"==typeof e&&Number.isFinite(e)){const t=Math.min(n,e);t!==n&&l.includes("n")&&(o+=n-t),n=t}}this.element.style.width=`${a}px`,this.element.style.height=this.options.maintainAspectRatio?"auto":`${n}px`,l.includes("w")&&(this.element.style.left=`${r}px`),l.includes("n")&&!this.options.maintainAspectRatio&&(this.element.style.top=`${o}px`),this.options.onResize&&this.options.onResize({width:a,height:n,left:r,top:o})}stopResizing(){this.isResizing=!1,this.resizeDirection=null,this.element.classList.remove(`${this.options.classPrefix}-resizing`),document.body.style.userSelect="","PointerEvent"in window&&document.removeEventListener("pointermove",this.handlers.pointermove),this.manuallyPositioned=!0,this.options.onResizeEnd&&this.options.onResizeEnd()}toggleKeyboardDragMode(){this.keyboardDragMode?this.disableKeyboardDragMode():this.enableKeyboardDragMode()}enableKeyboardDragMode(){this.keyboardDragMode=!0,this.keyboardResizeMode=!1,this.element.classList.add(`${this.options.classPrefix}-keyboard-drag`),this.element.classList.remove(`${this.options.classPrefix}-keyboard-resize`),this.focusElement()}disableKeyboardDragMode(){this.keyboardDragMode=!1,this.element.classList.remove(`${this.options.classPrefix}-keyboard-drag`)}toggleKeyboardResizeMode(){this.keyboardResizeMode?this.disableKeyboardResizeMode():this.enableKeyboardResizeMode()}enableKeyboardResizeMode(){this.keyboardResizeMode=!0,this.keyboardDragMode=!1,this.element.classList.add(`${this.options.classPrefix}-keyboard-resize`),this.element.classList.remove(`${this.options.classPrefix}-keyboard-drag`),this.focusElement()}disableKeyboardResizeMode(){this.keyboardResizeMode=!1,this.element.classList.remove(`${this.options.classPrefix}-keyboard-resize`)}enablePointerResizeMode({focus:e=!0}={}){this.hasManagedResizeHandles()?this.pointerResizeMode||(this.pointerResizeMode=!0,this.setManagedHandlesVisible(!0),this.element.classList.add(`${this.options.classPrefix}-resizable`),this.enableKeyboardResizeMode(),e&&this.focusElement(),"function"==typeof this.options.onPointerResizeToggle&&this.options.onPointerResizeToggle(!0)):this.enableKeyboardResizeMode()}disablePointerResizeMode({focus:e=!1}={}){this.pointerResizeMode&&(this.pointerResizeMode=!1,this.setManagedHandlesVisible(!1),this.element.classList.remove(`${this.options.classPrefix}-resizable`),this.disableKeyboardResizeMode(),e&&this.focusElement(),"function"==typeof this.options.onPointerResizeToggle&&this.options.onPointerResizeToggle(!1))}togglePointerResizeMode(){return this.pointerResizeMode?this.disablePointerResizeMode():this.enablePointerResizeMode(),this.pointerResizeMode}focusElement(){if("function"==typeof this.element.focus)try{this.element.focus({preventScroll:!0})}catch{this.element.focus()}}keyboardDrag(e,t){const i=t?this.options.keyboardStepLarge:this.options.keyboardStep;let s=parseFloat(this.element.style.left)||0,a=parseFloat(this.element.style.top)||0;if("none"!==window.getComputedStyle(this.element).transform){const e=this.element.getBoundingClientRect();s=e.left,a=e.top,this.element.style.transform="none",this.element.style.left=`${s}px`,this.element.style.top=`${a}px`}let n=s,r=a;switch(e){case"ArrowLeft":n-=i;break;case"ArrowRight":n+=i;break;case"ArrowUp":r-=i;break;case"ArrowDown":r+=i}this.element.style.left=`${n}px`,this.element.style.top=`${r}px`,this.options.onDrag&&this.options.onDrag({x:n,y:r})}keyboardResize(e,t){const i=t?this.options.keyboardStepLarge:this.options.keyboardStep,s=this.element.getBoundingClientRect();let a=s.width,n=s.height;switch(e){case"ArrowLeft":a-=i;break;case"ArrowRight":a+=i;break;case"ArrowUp":this.options.maintainAspectRatio?a+=i:n-=i;break;case"ArrowDown":this.options.maintainAspectRatio?a-=i:n+=i}a=Math.max(this.options.minWidth,a),n=Math.max(this.options.minHeight,n),this.element.style.width=`${a}px`,this.element.style.height=this.options.maintainAspectRatio?"auto":`${n}px`,this.options.onResize&&this.options.onResize({width:a,height:n})}resetPosition(){this.element.style.left="50%",this.element.style.top="50%",this.element.style.transform="translate(-50%, -50%)",this.element.style.right="",this.element.style.bottom="",this.manuallyPositioned=!1,this.options.onDrag&&this.options.onDrag({centered:!0})}destroy(){const e=this.options.dragHandle||this.element;this.disablePointerResizeMode(),e.removeEventListener("mousedown",this.handlers.mousedown),e.removeEventListener("touchstart",this.handlers.touchstart),e.removeEventListener("pointerdown",this.handlers.pointerdown),document.removeEventListener("mousemove",this.handlers.mousemove),document.removeEventListener("mouseup",this.handlers.mouseup),document.removeEventListener("touchmove",this.handlers.touchmove),document.removeEventListener("touchend",this.handlers.touchend),document.removeEventListener("pointermove",this.handlers.pointermove),document.removeEventListener("pointerup",this.handlers.pointerup),document.removeEventListener("pointercancel",this.handlers.pointercancel),this.element.removeEventListener("keydown",this.handlers.keydown),this.options.resizeHandles&&this.options.resizeHandles.length>0&&this.options.resizeHandles.forEach(e=>{e.removeEventListener("mousedown",this.handlers.resizeHandleMousedown),e.removeEventListener("touchstart",this.handlers.resizeHandleMousedown),e.removeEventListener("pointerdown",this.handlers.resizeHandlePointerDown)}),this.element.classList.remove(`${this.options.classPrefix}-dragging`,`${this.options.classPrefix}-resizing`,`${this.options.classPrefix}-keyboard-drag`,`${this.options.classPrefix}-keyboard-resize`)}}}});function Me({labelClass:t,selectClass:i,labelText:s,selectId:a,hidden:n=!1,onChange:r,options:o=[]}){const l="string"==typeof s&&(s.startsWith("transcript.")||s.startsWith("player.")||s.startsWith("settings.")||s.startsWith("captions."))&&x.t(s)||s,d=e.createElement("label",{className:t,textContent:l,attributes:{for:a,style:n?"display: none;":void 0}}),h=e.createElement("select",{className:i,attributes:{id:a,style:n?"display: none;":void 0}});return o.forEach(t=>{const i=e.createElement("option",{textContent:t.text,attributes:{value:t.value,selected:t.selected?"selected":void 0}});h.appendChild(i)}),r&&h.addEventListener("change",r),{label:d,select:h}}function ke(e){e&&["pointerdown","mousedown","click"].forEach(t=>{e.addEventListener(t,e=>{e.stopPropagation()})})}var Te=s({"src/utils/FormUtils.ts"(){d(),V()}});function Pe({classPrefix:t,itemClass:i,icon:s,label:a,ariaLabel:n,onClick:r,hasTextClass:o=!1}){const l="string"==typeof a&&(a.startsWith("transcript.")||a.startsWith("player.")||a.startsWith("settings.")),d=n||l&&x.t(a)||a,h=e.createElement("button",{className:i,attributes:{type:"button","aria-label":d,tabindex:"-1"}});s&&h.appendChild(O(s));const c="string"==typeof a&&(a.startsWith("transcript.")||a.startsWith("player.")||a.startsWith("settings."))&&x.t(a)||a,u=e.createElement("span",{textContent:c,className:o?`${t}-settings-text`:void 0,attributes:{"aria-hidden":"true"}});return h.appendChild(u),r&&h.addEventListener("click",r),h}function Ee(e,t,i=0){e&&setTimeout(()=>{const i=Array.from(e.querySelectorAll(t)).filter(e=>"true"!==e.getAttribute("aria-disabled")),s=i[0];s&&(i.forEach((e,t)=>{e.setAttribute("tabindex",0===t?"0":"-1")}),N(s,{delay:0}),s.scrollIntoView(U("nearest")))},i)}var Ce=s({"src/utils/MenuUtils.ts"(){d(),F(),V(),I(),j()}});function Le(e,t,i){e&&(e.setAttribute("aria-checked",i.enabled?"true":"false"),e.setAttribute("aria-label",i.enabled?i.enabledAria:i.disabledAria),t&&(t.textContent=i.enabled?i.enabledText:i.disabledText))}function xe(e,t,i={}){if(!e||!t)return;const{align:s="left",gap:a=4,spaceReserve:n=20}=i,r=t.parentElement;if(!r)return;const o=t.getBoundingClientRect(),l=r.getBoundingClientRect(),d=e.getBoundingClientRect(),h=window.innerHeight,c=window.innerWidth,u=o.top-l.top,p=o.left-l.left,g=p+o.width/2,y=h-o.bottom;let m,f,v,b=o.bottom-l.top+a,w=null;if(y<d.height+n&&o.top>y?("center"===s?(w=l.bottom-l.top-u+a,b=null):b=u-d.height-a,e.classList.add("vidply-menu-above")):e.classList.remove("vidply-menu-above"),"center"===s){const e=o.left+o.width/2-d.width/2;e<10?(m="0",f="auto",v="translateX(0)"):e+d.width>c-10?(m="auto",f="0",v="translateX(0)"):(m=`${g}px`,f="auto",v="translateX(-50%)")}else m=`${p}px`,f="auto",v="translateX(0)";null!==b?(e.style.top=`${b}px`,e.style.bottom="auto"):null!==w&&(e.style.top="auto",e.style.bottom=`${w}px`),e.style.left=m,e.style.right=f,e.style.transform=v}var De,Ae,ze=s({"src/utils/DraggablePanelMenu.ts"(){}}),_e=s({"src/utils/DraggablePanel.ts"(){d(),V(),Ce(),ze(),De=class{constructor(e){n(this,"opts"),n(this,"settingsMenu",null),n(this,"settingsMenuVisible",!1),n(this,"dragOptionButton",null),n(this,"dragOptionText",null),n(this,"resizeOptionButton",null),n(this,"resizeOptionText",null),n(this,"_justOpened",!1),n(this,"_justOpenedTimer",null),n(this,"_keyHandler",null),n(this,"_documentClick",null),n(this,"_documentClickAdded",!1),n(this,"_modeBadge",null),this.opts=e}get justOpened(){return this._justOpened}get classPrefix(){return this.opts.player.options.classPrefix}get menuClass(){return`${this.classPrefix}-${this.opts.namespace}-settings-menu`}get itemClass(){return`${this.classPrefix}-${this.opts.namespace}-settings-item`}show(){if(this._markJustOpened(350),this._ensureDocumentClickHandler(),this.settingsMenu)return this.settingsMenu.style.display="block",this.settingsMenuVisible=!0,this.opts.settingsButton.setAttribute("aria-expanded","true"),this._attachKeyboardNavigation(),this._positionImmediate(),this.refreshState(),void Ee(this.settingsMenu,`.${this.itemClass}`);this._createMenu()}hide({focusButton:e=!0}={}){if(!this.settingsMenu)return;this.settingsMenu.style.display="none",this.settingsMenuVisible=!1,this._clearJustOpened(),this._keyHandler&&(this.settingsMenu.removeEventListener("keydown",this._keyHandler,!0),this._keyHandler=null),this.settingsMenu.querySelectorAll(`.${this.itemClass}`).forEach(e=>e.setAttribute("tabindex","-1"));const{settingsButton:t}=this.opts;t.setAttribute("aria-expanded","false"),e&&t.focus({preventScroll:!0})}toggle(){this.settingsMenuVisible?this.hide():this.show()}markJustOpenedForClick(){this._documentClick&&this._markJustOpened(100)}refreshState(){this.refreshDragState(),this.refreshResizeState()}refreshDragState(){const e=this.opts.getDraggable();Le(this.dragOptionButton,this.dragOptionText,{enabled:Boolean(null==e?void 0:e.keyboardDragMode),enabledText:x.t(this.opts.i18nKeys.disableDrag),disabledText:x.t(this.opts.i18nKeys.enableDrag),enabledAria:x.t(this.opts.i18nKeys.disableDragAria),disabledAria:x.t(this.opts.i18nKeys.enableDragAria)})}refreshResizeState(){const e=this.opts.getDraggable();Le(this.resizeOptionButton,this.resizeOptionText,{enabled:Boolean(null==e?void 0:e.pointerResizeMode),enabledText:x.t(this.opts.i18nKeys.disableResize),disabledText:x.t(this.opts.i18nKeys.enableResize),enabledAria:x.t(this.opts.i18nKeys.disableResizeAria),disabledAria:x.t(this.opts.i18nKeys.enableResizeAria)})}showBadge(t){var i,s;const a=null==(s=(i=this.opts).getBadgeHost)?void 0:s.call(i);if(!a)return;this.hideBadge();const n=e.createElement("span",{className:this.opts.badgeClass??`${this.classPrefix}-${this.opts.namespace}-mode-badge`,textContent:t,attributes:{"aria-hidden":"true"}});a.appendChild(n),this._modeBadge=n}hideBadge(){this._modeBadge&&this._modeBadge.parentNode&&this._modeBadge.remove(),this._modeBadge=null}reposition(){((e,t,i={})=>{requestAnimationFrame(()=>{setTimeout(()=>xe(e,t,i),10)})})(this.settingsMenu,this.opts.settingsButton,{align:this.opts.menuAlign,gap:this.opts.menuGap??4,spaceReserve:this.opts.menuSpaceReserve??20})}destroy(){this._justOpenedTimer&&(clearTimeout(this._justOpenedTimer),this._justOpenedTimer=null),this._justOpened=!1,this.hideBadge(),this.settingsMenu&&(this._keyHandler&&this.settingsMenu.removeEventListener("keydown",this._keyHandler,!0),this.settingsMenu.remove(),this.settingsMenu=null),this._keyHandler=null,this.settingsMenuVisible=!1,this.dragOptionButton=null,this.dragOptionText=null,this.resizeOptionButton=null,this.resizeOptionText=null,this._documentClick=null,this._documentClickAdded=!1}_createMenu(){const{settingsButton:t,i18nKeys:i}=this.opts,s=e.createElement("div",{className:this.menuClass,attributes:{role:"menu"}});this.settingsMenu=s;const a=Pe({classPrefix:this.classPrefix,itemClass:this.itemClass,icon:"move",label:i.enableDrag,hasTextClass:!0,onClick:e=>{e.preventDefault(),e.stopPropagation(),this.opts.onDragItemClick(this),this.refreshState()}});a.setAttribute("role","switch"),a.setAttribute("aria-checked","false"),a.setAttribute("data-setting","keyboard-drag"),this._stripInlineTooltip(a),this.dragOptionButton=a,this.dragOptionText=a.querySelector(`.${this.classPrefix}-settings-text`);const n=Pe({classPrefix:this.classPrefix,itemClass:this.itemClass,icon:"resize",label:i.enableResize,hasTextClass:!0,onClick:e=>{e.preventDefault(),e.stopPropagation(),this.opts.onResizeItemClick(this),this.refreshState()}});n.setAttribute("role","switch"),n.setAttribute("aria-checked","false"),this._stripInlineTooltip(n),this.resizeOptionButton=n,this.resizeOptionText=n.querySelector(`.${this.classPrefix}-settings-text`),s.appendChild(a),s.appendChild(n),this.opts.buildExtraItems&&this.opts.buildExtraItems({menu:s,itemClass:this.itemClass,classPrefix:this.classPrefix,stripInlineTooltip:e=>this._stripInlineTooltip(e)});const r=Pe({classPrefix:this.classPrefix,itemClass:this.itemClass,icon:"close",label:i.closeMenu,onClick:()=>this.hide()});this._stripInlineTooltip(r),s.appendChild(r),s.style.visibility="hidden",s.style.display="block";const o=this.opts.getMenuParent();t.parentNode?t.insertAdjacentElement("afterend",s):o&&o.appendChild(s),this._positionImmediate(),requestAnimationFrame(()=>{this.settingsMenu&&(this.settingsMenu.style.visibility="visible")}),this._attachKeyboardNavigation(),this.settingsMenuVisible=!0,t.setAttribute("aria-expanded","true"),this.refreshState(),Ee(s,`.${this.itemClass}`)}_attachKeyboardNavigation(){const e=this.settingsMenu;if(!e)return;this._keyHandler&&e.removeEventListener("keydown",this._keyHandler,!0);const t=((e,t,i,s)=>{if(!e)return;const a=Array.from(e.querySelectorAll(i)).filter(e=>"true"!==e.getAttribute("aria-disabled"));if(0===a.length)return;const n=e=>{const i=a.indexOf(document.activeElement);switch(e.key){case"ArrowDown":{e.preventDefault(),e.stopPropagation();const t=(i+1)%a.length;a.forEach((e,i)=>{e.setAttribute("tabindex",i===t?"0":"-1")});const s=a[t];s&&(s.focus({preventScroll:!1}),s.scrollIntoView(U("nearest")));break}case"ArrowUp":{e.preventDefault(),e.stopPropagation();const t=(i-1+a.length)%a.length;a.forEach((e,i)=>{e.setAttribute("tabindex",i===t?"0":"-1")});const s=a[t];s&&(s.focus({preventScroll:!1}),s.scrollIntoView(U("nearest")));break}case"Home":{e.preventDefault(),e.stopPropagation(),a.forEach((e,t)=>{e.setAttribute("tabindex",0===t?"0":"-1")});const t=a[0];t&&(t.focus({preventScroll:!1}),t.scrollIntoView(U("nearest")));break}case"End":{e.preventDefault(),e.stopPropagation();const t=a.length-1;a.forEach((e,i)=>{e.setAttribute("tabindex",i===t?"0":"-1")});const i=a[t];i&&(i.focus({preventScroll:!1}),i.scrollIntoView(U("nearest")));break}case"Enter":case" ":e.preventDefault(),e.stopPropagation(),document.activeElement&&a.includes(document.activeElement)&&(document.activeElement.click(),s&&setTimeout(()=>{t&&document.contains(t)&&t.focus()},0));break;case"Escape":e.preventDefault(),e.stopPropagation(),s&&s()}};return e.addEventListener("keydown",n,!0),n})(e,this.opts.settingsButton,`.${this.itemClass}`,()=>this.hide({focusButton:!0}));this._keyHandler=t??null}_positionImmediate(){xe(this.settingsMenu,this.opts.settingsButton,{align:this.opts.menuAlign,gap:this.opts.menuGap??4,spaceReserve:this.opts.menuSpaceReserve??20})}_stripInlineTooltip(e){const t=e.querySelector(`.${this.classPrefix}-tooltip`);t&&t.remove();const i=e.querySelector(`.${this.classPrefix}-button-text`);i&&i.remove()}_markJustOpened(e){this._justOpened=!0,this._justOpenedTimer&&clearTimeout(this._justOpenedTimer),this._justOpenedTimer=setTimeout(()=>{this._justOpened=!1,this._justOpenedTimer=null},e)}_clearJustOpened(){this._justOpened=!1,this._justOpenedTimer&&(clearTimeout(this._justOpenedTimer),this._justOpenedTimer=null)}_ensureDocumentClickHandler(){this._documentClickAdded||(this._documentClick=e=>{if(this._justOpened)return;const t=e.target,{settingsButton:i}=this.opts;i===t||t&&i.contains(t)||this.settingsMenu&&t&&this.settingsMenu.contains(t)||this.settingsMenuVisible&&this.hide()},setTimeout(()=>{const e=this._documentClick;e&&(document.addEventListener("mousedown",e,{capture:!0,signal:this.opts.player.lifecycleSignal}),this._documentClickAdded=!0)},300))}}}}),Re={};a(Re,{SignLanguageManager:()=>Ae});var Be,He,Ve,$e,Oe=s({"src/core/SignLanguageManager.ts"(){d(),F(),V(),Se(),Te(),_e(),Ae=class{constructor(e){n(this,"player"),n(this,"_mainViewMutedBefore"),n(this,"_mainViewUsingSourceSwap"),n(this,"currentLanguage"),n(this,"customKeyHandler"),n(this,"desiredPosition"),n(this,"draggable"),n(this,"handlers"),n(this,"header"),n(this,"inMainView"),n(this,"interactionHandlers"),n(this,"mainViewOriginalSources"),n(this,"mainViewOriginalSrc"),n(this,"resizeHandles"),n(this,"selector"),n(this,"settingsButton"),n(this,"settingsHandlers"),n(this,"sources"),n(this,"src"),n(this,"enabled"),n(this,"video"),n(this,"wrapper"),n(this,"_panel",null),this.player=e,this.src=e.options.signLanguageSrc,this.sources=e.options.signLanguageSources||{},this.currentLanguage=null,this.desiredPosition=e.options.signLanguagePosition||"bottom-right",this.wrapper=null,this.header=null,this.video=null,this.selector=null,this.settingsButton=null,this.resizeHandles=[],this.enabled=!1,this.inMainView=!1,this.mainViewOriginalSrc=null,this.mainViewOriginalSources=null,this._mainViewUsingSourceSwap=!1,this._mainViewMutedBefore=!1,this.handlers=null,this.settingsHandlers=null,this.interactionHandlers=null,this.draggable=null,this.customKeyHandler=null}get settingsMenu(){var e;return(null==(e=this._panel)?void 0:e.settingsMenu)??null}set settingsMenu(e){}get settingsMenuVisible(){var e;return(null==(e=this._panel)?void 0:e.settingsMenuVisible)??!1}set settingsMenuVisible(e){}get settingsMenuJustOpened(){var e;return(null==(e=this._panel)?void 0:e.justOpened)??!1}set settingsMenuJustOpened(e){}get dragOptionButton(){var e;return(null==(e=this._panel)?void 0:e.dragOptionButton)??null}get dragOptionText(){var e;return(null==(e=this._panel)?void 0:e.dragOptionText)??null}get resizeOptionButton(){var e;return(null==(e=this._panel)?void 0:e.resizeOptionButton)??null}get resizeOptionText(){var e;return(null==(e=this._panel)?void 0:e.resizeOptionText)??null}isAvailable(){return Object.keys(this.sources).length>0||Boolean(this.src)}enable(){const e=Object.keys(this.sources).length>0,t=Boolean(this.src);if(!e&&!t)return void console.warn("No sign language video source provided");if(this.wrapper)return this.wrapper.style.display="block",this.enabled=!0,this.player.state.signLanguageEnabled=!0,this.player.emit("signlanguageenabled"),void this.player.setManagedTimeout(()=>{this.settingsButton&&document.contains(this.settingsButton)&&this.settingsButton.focus({preventScroll:!0})},150);let i=null,s=null;e?(i=this._determineInitialLanguage(),s=this.sources[i]??null,this.currentLanguage=i):s=this.src,this._createWrapper(),this._createHeader(e,i),this._createVideo(s),this._createResizeHandles();const a=this.wrapper,n=this.video;a&&n&&(a.appendChild(this.header),a.appendChild(n),this.resizeHandles.forEach(e=>a.appendChild(e)),this._applyInitialSize(),this.player.container.appendChild(a),requestAnimationFrame(()=>{this.constrainPosition()}),n.currentTime=this.player.state.currentTime,this.player.state.paused||n.play(),this._setupInteraction(),this._setupEventHandlers(e),this.enabled=!0,this.player.state.signLanguageEnabled=!0,this.player.emit("signlanguageenabled"),this.player.setManagedTimeout(()=>{this.settingsButton&&document.contains(this.settingsButton)&&this.settingsButton.focus({preventScroll:!0})},150))}disable(){this.settingsMenuVisible&&this.hideSettingsMenu({focusButton:!1}),this._hideModeBadge(),this.wrapper&&(this.wrapper.style.display="none"),this.enabled=!1,this.player.state.signLanguageEnabled=!1,this.player.emit("signlanguagedisabled")}toggle(){this.enabled?this.disable():this.enable()}async enableInMainView(){const e=Object.keys(this.sources).length>0,t=Boolean(this.src);if(!e&&!t)return;if(!this.player.element||"VIDEO"!==this.player.element.tagName)return;if(this.inMainView)return;let i;if(e){const e=this._determineInitialLanguage();this.currentLanguage=e,i=this.sources[e]}else i=this.src;const s=this.player.element,a=this.player.state.currentTime,n=this.player.state.playing,r=s.poster||s.getAttribute("poster")||this.player.options.poster,o=a<.1&&!n,l=Array.from(s.querySelectorAll("source")),d=l[0];if(this.mainViewOriginalSrc=s.currentSrc&&s.currentSrc.length>0?s.currentSrc:s.src&&s.src.length>0?s.src:d&&d.getAttribute("src")?d.getAttribute("src"):"",this._mainViewMutedBefore=this.player.state.muted,r&&o&&"VIDEO"===s.tagName&&(s.poster=r),l.length>0){this.mainViewOriginalSources=l,this.mainViewOriginalSources.forEach(e=>e.remove());const e=document.createElement("source"),t=i??"";e.setAttribute("src",t);const a=this._inferVideoType(t);a&&e.setAttribute("type",a);const n=s.querySelector("track");n?s.insertBefore(e,n):s.appendChild(e),this._mainViewUsingSourceSwap=!0}else s.src=i??"",this._mainViewUsingSourceSwap=!1;s.muted=!0,this.player.currentSource=i??"","function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache(),s.load(),await this._waitForMediaReadyMainView(a>0||n),a>0&&(this.player.seek(a),await new Promise(e=>setTimeout(e,100))),n?await this.player.play():(this.player.pause(),!o&&this.player.hidePosterOverlay&&this.player.hidePosterOverlay()),this.inMainView=!0,this.player.state.signLanguageInMainView=!0,this.player.videoWrapper&&this.player.videoWrapper.classList.add("vidply-sign-language-main-view-active"),this.player.emit("signlanguageinmainviewenabled")}async disableInMainView(){var e,t,i;if(!this.inMainView)return;if(!this.mainViewOriginalSrc&&!this.mainViewOriginalSources)return this.inMainView=!1,this.player.state.signLanguageInMainView=!1,this.player.videoWrapper&&this.player.videoWrapper.classList.remove("vidply-sign-language-main-view-active"),void this.player.emit("signlanguageinmainviewdisabled");const s=this.player.element,a=this.player.state.currentTime,n=this.player.state.playing;if(this._mainViewUsingSourceSwap&&this.mainViewOriginalSources&&this.mainViewOriginalSources.length>0){Array.from(s.querySelectorAll("source")).forEach(e=>e.remove());const e=s.querySelector("track");this.mainViewOriginalSources.forEach(t=>{e?s.insertBefore(t,e):s.appendChild(t)}),this._mainViewUsingSourceSwap=!1}else this.mainViewOriginalSrc&&(s.src=this.mainViewOriginalSrc);if(s.muted=this._mainViewMutedBefore,this.player.currentSource=this.mainViewOriginalSrc||(null==(e=s.querySelector("source"))?void 0:e.src)||"","function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache(),s.load(),await this._waitForMediaReadyMainView(a>0||n),a>0&&this.player.seek(a),n)try{await this.player.play()}catch(e){null==(i=(t=this.player).log)||i.call(t,"Sign language main view: play after restore failed",e,"warn")}this.mainViewOriginalSrc=null,this.mainViewOriginalSources=null,this.inMainView=!1,this.player.state.signLanguageInMainView=!1,this.player.videoWrapper&&this.player.videoWrapper.classList.remove("vidply-sign-language-main-view-active"),this.player.emit("signlanguageinmainviewdisabled")}async _waitForMediaReadyMainView(e=!1){const t=this.player.element,i=new Promise(e=>{if(t.readyState>=1)return void e();const i=()=>{t.removeEventListener("loadedmetadata",i),t.removeEventListener("error",s),e()},s=()=>{t.removeEventListener("loadedmetadata",i),t.removeEventListener("error",s),e()};t.addEventListener("loadedmetadata",i),t.addEventListener("error",s,{once:!0})}),s=new Promise(e=>setTimeout(e,1e4));await Promise.race([i,s]),await new Promise(e=>setTimeout(e,300)),e&&await new Promise(e=>{if(t.readyState>=3)e();else{const i=()=>{t.removeEventListener("canplay",i),t.removeEventListener("canplaythrough",i),e()};t.addEventListener("canplay",i,{once:!0}),t.addEventListener("canplaythrough",i,{once:!0}),setTimeout(()=>{t.removeEventListener("canplay",i),t.removeEventListener("canplaythrough",i),e()},3e3)}})}toggleInMainView(){this.inMainView?this.disableInMainView():this.enableInMainView()}switchLanguage(e){if(this.sources[e]){if(this.currentLanguage=e,this.video){const t=this.video.currentTime,i=!this.video.paused;this.video.src=this.sources[e],this.video.currentTime=t,i&&this.video.play().catch(e=>{"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] sign-language play() rejected:",e)})}if(this.inMainView&&this.player.element&&"VIDEO"===this.player.element.tagName){const t=this.player.state.currentTime,i=this.player.state.playing;if(this._mainViewUsingSourceSwap){const t=this.player.element.querySelector("source");if(t){t.setAttribute("src",this.sources[e]);const i=this._inferVideoType(this.sources[e]);i&&t.setAttribute("type",i)}}else this.player.element.src=this.sources[e];this.player.currentSource=this.sources[e],"function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache(),this.player.element.load(),this._waitForMediaReadyMainView(!0).then(()=>{t>0&&this.player.seek(t),i&&this.player.play()})}this.player.emit("signlanguagelanguagechanged",e)}}_inferVideoType(e){if(!e)return"";const t=(e.split("?")[0]??"").toLowerCase();return t.endsWith(".mp4")?"video/mp4":t.endsWith(".webm")?"video/webm":t.endsWith(".ogv")||t.endsWith(".ogg")?"video/ogg":""}getLanguageLabel(e){return{en:"English",de:"Deutsch",es:"Español",fr:"Français",it:"Italiano",ja:"日本語",pt:"Português",ar:"العربية",hi:"हिन्दी"}[e]||e.toUpperCase()}_determineInitialLanguage(){var e;if(this.player.captionManager&&this.player.captionManager.currentTrack){const t=null==(e=this.player.captionManager.currentTrack.language)?void 0:e.toLowerCase().split("-")[0];if(t&&this.sources[t])return t}if(this.player.options.language){const e=this.player.options.language.toLowerCase().split("-")[0];if(e&&this.sources[e])return e}return Object.keys(this.sources)[0]??""}_createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vidply-sign-language-wrapper",this.wrapper.setAttribute("tabindex","0"),this.wrapper.setAttribute("aria-label",x.t("player.signLanguageDragResize"))}_createHeader(t,i){const s=this.player.options.classPrefix;this.header=e.createElement("div",{className:`${s}-sign-language-header`,attributes:{tabindex:"0"}});const a=e.createElement("div",{className:`${s}-sign-language-header-left`}),n=e.createElement("h3",{textContent:x.t("player.signLanguageVideo")});this._createSettingsButton(a),t&&this._createLanguageSelector(a,i),a.appendChild(n);const r=this._createCloseButton();this.header.appendChild(a),this.header.appendChild(r)}_createSettingsButton(t){const i=this.player.options.classPrefix,s=x.t("player.signLanguageSettings");this.settingsButton=e.createElement("button",{className:`${i}-sign-language-settings`,attributes:{type:"button","aria-label":s,"aria-expanded":"false"}}),this.settingsButton.appendChild(O("settings")),e.attachTooltip(this.settingsButton,s,i),this._panel=new De({player:this.player,namespace:"sign-language",settingsButton:this.settingsButton,getDraggable:()=>this.draggable,i18nKeys:{enableDrag:"player.enableSignDragMode",disableDrag:"player.disableSignDragMode",enableDragAria:"player.enableSignDragModeAria",disableDragAria:"player.disableSignDragModeAria",enableResize:"player.enableSignResizeMode",disableResize:"player.disableSignResizeMode",enableResizeAria:"player.enableSignResizeModeAria",disableResizeAria:"player.disableSignResizeModeAria",closeMenu:"transcript.closeMenu"},menuAlign:"center",getMenuParent:()=>this.wrapper,getBadgeHost:()=>this.wrapper,badgeClass:`${this.player.options.classPrefix}-sign-mode-badge`,onDragItemClick:e=>{var t;this.toggleKeyboardDragMode(),e.hide({focusButton:!1}),(null==(t=this.draggable)?void 0:t.keyboardDragMode)&&setTimeout(()=>{var e,t;null==(t=null==(e=this.wrapper)?void 0:e.focus)||t.call(e,{preventScroll:!0})},20)},onResizeItemClick:e=>{this.toggleResizeMode({focus:!1})?(e.hide({focusButton:!1}),setTimeout(()=>{var e,t;null==(t=null==(e=this.wrapper)?void 0:e.focus)||t.call(e,{preventScroll:!0})},20)):e.hide({focusButton:!0})}}),this.settingsHandlers={click:e=>{var t,i;e.preventDefault(),e.stopPropagation(),null==(t=this._panel)||t.markJustOpenedForClick(),null==(i=this._panel)||i.toggle()},keydown:e=>{"d"===e.key||"D"===e.key?(e.preventDefault(),e.stopPropagation(),this.toggleKeyboardDragMode()):"r"===e.key||"R"===e.key?(e.preventDefault(),e.stopPropagation(),this.toggleResizeMode()):"Escape"===e.key&&this.settingsMenuVisible&&(e.preventDefault(),e.stopPropagation(),this.hideSettingsMenu())}},this.settingsButton.addEventListener("click",this.settingsHandlers.click),this.settingsButton.addEventListener("keydown",this.settingsHandlers.keydown),t.appendChild(this.settingsButton)}_createLanguageSelector(t,i){const s=this.player.options.classPrefix,a=`${s}-sign-language-select-${Date.now()}`,n=Object.keys(this.sources).map(e=>({value:e,text:this.getLanguageLabel(e),selected:e===i})),{label:r,select:o}=Me({classPrefix:s,labelClass:`${s}-sign-language-label`,selectClass:`${s}-sign-language-select`,labelText:"settings.language",selectId:a,options:n,onChange:e=>{e.stopPropagation(),this.switchLanguage(e.target.value)}});this.selector=o;const l=e.createElement("div",{className:`${s}-sign-language-selector-wrapper`});l.appendChild(r),l.appendChild(this.selector),ke(l),t.appendChild(l)}_createCloseButton(){const t=this.player.options.classPrefix,i=x.t("player.closeSignLanguage"),s=e.createElement("button",{className:`${t}-sign-language-close`,attributes:{type:"button","aria-label":i}});return s.appendChild(O("close")),e.attachTooltip(s,i,t),s.addEventListener("click",()=>{var e,t;this.disable();const i=null==(t=null==(e=this.player.controlBar)?void 0:e.controls)?void 0:t.signLanguage;i&&this.player.setManagedTimeout(()=>{i.focus({preventScroll:!0})},0)},{signal:this.player.lifecycleSignal}),s}_createVideo(e){this.video=document.createElement("video"),this.video.className="vidply-sign-language-video",this.video.src=e??"",this.video.setAttribute("aria-label",x.t("player.signLanguage")),this.video.muted=!0,this.video.setAttribute("playsinline","")}_createResizeHandles(){const t=this.player.options.classPrefix;this.resizeHandles=["n","s","e","w","ne","nw","se","sw"].map(i=>{const s=e.createElement("div",{className:`${t}-sign-resize-handle ${t}-sign-resize-${i}`,attributes:{"data-direction":i,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return s.style.display="none",s})}_applyInitialSize(){var e;const t=this.wrapper;if(!t)return;const i=this.player.storage.getSignLanguagePreferences();t.style.width=(null==(e=null==i?void 0:i.size)?void 0:e.width)?i.size.width:"280px",t.style.height="auto"}_setupInteraction(){var e,t;if(window.innerWidth<768&&!this.player.state.fullscreen&&!1===(null==(t=null==(e=this.player)?void 0:e.options)?void 0:t.signLanguageDragOnMobile))return void(this.draggable&&(this.draggable.destroy(),this.draggable=null));if(this.draggable)return;const i=this.wrapper;if(!i)return;const s=this.player.options.classPrefix;this.draggable=new be(i,{dragHandle:this.wrapper,resizeHandles:this.resizeHandles,constrainToViewport:!0,maintainAspectRatio:!0,minWidth:150,minHeight:100,classPrefix:`${s}-sign`,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:10,keyboardStepLarge:50,pointerResizeIndicatorText:x.t("player.signLanguageResizeActive"),onPointerResizeToggle:e=>{var t,i;this.resizeHandles.forEach(t=>{t.style.display=e?"block":"none"}),e?(this._showModeBadge(x.t("player.signResizeModeHint")),null==(t=this.player.keyboardManager)||t.announce(x.t("player.signLanguageResizeActive"))):(this._hideModeBadge(),null==(i=this.player.keyboardManager)||i.announce(x.t("player.signResizeModeDisabled")))},onDragStart(e){const t=e.target;return!(t.closest(`.${s}-sign-language-close`)||t.closest(`.${s}-sign-language-settings`)||t.closest(`.${s}-sign-language-select`)||t.closest(`.${s}-sign-language-label`)||t.closest(`.${s}-sign-language-settings-menu`))}}),this._setupCustomKeyHandler(),this.interactionHandlers={draggable:this.draggable,customKeyHandler:this.customKeyHandler}}_setupCustomKeyHandler(){var e;this.customKeyHandler=e=>{var t,i,s,a,n,r;const o=e.key.toLowerCase();if(!this.settingsMenuVisible){if("home"===o)return e.preventDefault(),e.stopPropagation(),void(this.draggable&&(this.draggable.pointerResizeMode&&this.draggable.disablePointerResizeMode(),this.draggable.manuallyPositioned=!1,this.constrainPosition()));if("r"===o)return e.preventDefault(),e.stopPropagation(),void(this.toggleResizeMode()&&(null==(t=this.wrapper)||t.focus({preventScroll:!0})));if("escape"===o){if(e.preventDefault(),e.stopPropagation(),null==(i=this.draggable)?void 0:i.pointerResizeMode)return void this.draggable.disablePointerResizeMode();if(null==(s=this.draggable)?void 0:s.keyboardDragMode)return this.draggable.disableKeyboardDragMode(),this._hideModeBadge(),this._updateDragOptionState(),void(null==(a=this.player.keyboardManager)||a.announce(x.t("player.signDragModeDisabled")));this.disable();const t=null==(r=null==(n=this.player.controlBar)?void 0:n.controls)?void 0:r.signLanguage;t&&setTimeout(()=>{t.focus({preventScroll:!0})},0)}}},null==(e=this.wrapper)||e.addEventListener("keydown",this.customKeyHandler)}_setupEventHandlers(e){this.handlers={play:()=>{this.video&&this.video.play()},pause:()=>{this.video&&this.video.pause()},timeupdate:()=>{this.video&&Math.abs(this.video.currentTime-this.player.state.currentTime)>.5&&(this.video.currentTime=this.player.state.currentTime)},ratechange:()=>{this.video&&(this.video.playbackRate=this.player.state.playbackSpeed)}},this.player.on("play",this.handlers.play),this.player.on("pause",this.handlers.pause),this.player.on("timeupdate",this.handlers.timeupdate),this.player.on("ratechange",this.handlers.ratechange),e&&(this.handlers.captionChange=()=>{var e,t;if((null==(e=this.player.captionManager)?void 0:e.currentTrack)&&this.selector){const e=null==(t=this.player.captionManager.currentTrack.language)?void 0:t.toLowerCase().split("-")[0];e&&this.sources[e]&&this.currentLanguage!==e&&(this.switchLanguage(e),this.selector.value=e)}},this.player.on("captionsenabled",this.handlers.captionChange))}constrainPosition(){var e;if(!this.wrapper||!this.player.videoWrapper)return;if(null==(e=this.draggable)?void 0:e.manuallyPositioned)return;this.wrapper.style.width||(this.wrapper.style.width="280px");const t=this.player.videoWrapper.getBoundingClientRect(),i=this.player.container.getBoundingClientRect(),s=this.wrapper.getBoundingClientRect(),a=t.left-i.left,n=t.top-i.top,r=t.width,o=t.height,l=s.width||280,d=s.height||157.5;let h,c;const u=16;switch(this.desiredPosition||"bottom-right"){case"bottom-right":default:h=a+r-l-u,c=n+o-d-95;break;case"bottom-left":h=a+u,c=n+o-d-95;break;case"top-right":h=a+r-l-u,c=n+u;break;case"top-left":h=a+u,c=n+u}h=Math.max(a,Math.min(h,a+r-l)),c=Math.max(n,Math.min(c,n+o-d-95)),this.wrapper.style.left=`${h}px`,this.wrapper.style.top=`${c}px`,this.wrapper.style.right="auto",this.wrapper.style.bottom="auto"}showSettingsMenu(){var e;null==(e=this._panel)||e.show()}hideSettingsMenu({focusButton:e=!0}={}){var t;null==(t=this._panel)||t.hide({focusButton:e})}_showModeBadge(e){var t;null==(t=this._panel)||t.showBadge(e)}_hideModeBadge(){var e;null==(e=this._panel)||e.hideBadge()}toggleKeyboardDragMode(){var e,t;if(!this.draggable)return;const i=this.draggable.keyboardDragMode;this.draggable.toggleKeyboardDragMode();const s=this.draggable.keyboardDragMode;!i&&s?(this._enableMoveMode(),this._showModeBadge(x.t("player.signDragModeHint")),null==(e=this.player.keyboardManager)||e.announce(x.t("player.signLanguageDragActive"))):i&&!s&&(this._hideModeBadge(),null==(t=this.player.keyboardManager)||t.announce(x.t("player.signDragModeDisabled"))),this._updateDragOptionState()}_enableMoveMode(){var e;null==(e=this.wrapper)||e.classList.add(`${this.player.options.classPrefix}-sign-move-mode`),this._updateResizeOptionState(),setTimeout(()=>{var e;null==(e=this.wrapper)||e.classList.remove(`${this.player.options.classPrefix}-sign-move-mode`)},2e3)}toggleResizeMode({focus:e=!0}={}){return!!this.draggable&&(this.draggable.pointerResizeMode?(this.draggable.disablePointerResizeMode({focus:e}),this._updateResizeOptionState(),!1):(this.draggable.enablePointerResizeMode({focus:e}),this._updateResizeOptionState(),!0))}_updateDragOptionState(){var e;null==(e=this._panel)||e.refreshDragState()}_updateResizeOptionState(){var e;null==(e=this._panel)||e.refreshResizeState()}savePreferences(){this.wrapper&&this.player.storage.saveSignLanguagePreferences({size:{width:this.wrapper.style.width}})}updateSources(e,t){this.src=e||null,this.sources=t||{},this.currentLanguage=null}cleanup(){var e;if(this.inMainView&&this.player.element){const e=this.player.element;if(this._mainViewUsingSourceSwap&&this.mainViewOriginalSources&&this.mainViewOriginalSources.length>0){Array.from(e.querySelectorAll("source")).forEach(e=>e.remove());const t=e.querySelector("track");this.mainViewOriginalSources.forEach(i=>{t?e.insertBefore(i,t):e.appendChild(i)}),this._mainViewUsingSourceSwap=!1}else this.mainViewOriginalSrc&&(e.src=this.mainViewOriginalSrc);e.muted=this._mainViewMutedBefore,"function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache(),e.load(),this.mainViewOriginalSrc=null,this.mainViewOriginalSources=null,this.inMainView=!1,this.player.state.signLanguageInMainView=!1,this.player.videoWrapper&&this.player.videoWrapper.classList.remove("vidply-sign-language-main-view-active"),this.player.emit("signlanguageinmainviewdisabled")}this.settingsMenuVisible&&this.hideSettingsMenu({focusButton:!1}),this._panel&&(this._panel.destroy(),this._panel=null),this.settingsHandlers&&this.settingsButton&&(this.settingsButton.removeEventListener("click",this.settingsHandlers.click),this.settingsButton.removeEventListener("keydown",this.settingsHandlers.keydown)),this.settingsHandlers=null,this.handlers&&(this.player.off("play",this.handlers.play),this.player.off("pause",this.handlers.pause),this.player.off("timeupdate",this.handlers.timeupdate),this.player.off("ratechange",this.handlers.ratechange),this.handlers.captionChange&&this.player.off("captionsenabled",this.handlers.captionChange),this.handlers=null),this.wrapper&&this.customKeyHandler&&this.wrapper.removeEventListener("keydown",this.customKeyHandler),this.draggable&&(this.draggable.pointerResizeMode&&this.draggable.disablePointerResizeMode(),this.draggable.destroy(),this.draggable=null),this.interactionHandlers=null,this._hideModeBadge(),(null==(e=this.wrapper)?void 0:e.parentNode)&&(this.video&&(this.video.pause(),this.video.src=""),this.wrapper.parentNode.removeChild(this.wrapper)),this.wrapper=null,this.video=null,this.settingsButton=null}destroy(){this.cleanup(),this.enabled=!1}}}}),Fe={};a(Fe,{FloatingPlayerManager:()=>$e});var Ne,Ie=s({"src/core/FloatingPlayerManager.ts"(){d(),Se(),F(),V(),Be="vidply:floating-claim",He=240,Ve=16,$e=class{constructor(e){n(this,"player"),n(this,"classPrefix"),n(this,"shell"),n(this,"dragHandle"),n(this,"closeButton"),n(this,"resizeHandles"),n(this,"placeholder"),n(this,"draggable"),n(this,"originalParent"),n(this,"originalNextSibling"),n(this,"intersectionObserver"),n(this,"observerTarget"),n(this,"lastRatio"),n(this,"_autoDismissedThisPlay"),n(this,"_playListenerAttached"),n(this,"_onPlayAfterDismiss"),n(this,"_onClaim"),n(this,"_onResize"),n(this,"_onKeyDown"),n(this,"_onEnterFullscreen"),n(this,"_destroyed"),n(this,"_triggerFocusEl"),n(this,"_claimId"),n(this,"_lastAutoExitTime"),this.player=e,this.classPrefix=e.options.classPrefix||"vidply",this.shell=null,this.dragHandle=null,this.closeButton=null,this.resizeHandles=[],this.placeholder=null,this.draggable=null,this.originalParent=null,this.originalNextSibling=null,this.intersectionObserver=null,this.observerTarget=null,this.lastRatio=1,this._autoDismissedThisPlay=!1,this._playListenerAttached=!1,this._onPlayAfterDismiss=null,this._onClaim=null,this._onResize=null,this._onKeyDown=null,this._onEnterFullscreen=null,this._destroyed=!1,this._triggerFocusEl=null,this._claimId=`floating-${e.instanceId}-${Date.now()}`,this._lastAutoExitTime=0,this._setupClaimListener(),this._setupFullscreenGuard(),this._startObserving()}togglePinned(e){if(!this._destroyed){if("pinned"===this.player.state.floating)return this._autoDismissedThisPlay=!0,this._armPlayListenerToClearDismiss(),void this.exit("manual");this._autoDismissedThisPlay=!1,this._triggerFocusEl=e||this._activeElement(),this.enter("pinned")}}enter(e){if(!this._destroyed&&this.player.state.floating!==e&&this._canFloat(e)){if(this.player.state.floating&&this.player.state.floating!==e)return this.player.state.floating=e,void this.player.emit("floatingchange",e);this._claimSingleton(),this._ensureShell(),this._mountIntoShell(),this._applyInitialGeometry(),this.player.state.floating=e,this.player.emit("floatingchange",e),queueMicrotask(()=>{if(this.closeButton&&this.player.state.floating)try{this.closeButton.focus({preventScroll:!0})}catch{}})}}exit(e="manual"){if(this._destroyed&&"destroy"!==e)return;if(!this.player.state.floating)return;"auto"===e&&(this._lastAutoExitTime=Date.now()),this._unmountFromShell(),this._teardownShell();const t=this._triggerFocusEl;if(this._triggerFocusEl=null,this.player.state.floating=null,this.player.emit("floatingchange",null),("manual"===e||"dismiss"===e)&&t)try{t.focus({preventScroll:!0})}catch{}}dismiss(){if(!this._destroyed){this._autoDismissedThisPlay=!0,this._armPlayListenerToClearDismiss();try{this.player.pause()}catch{}this.exit("dismiss")}}destroy(){if(this._destroyed)return;if(this._destroyed=!0,this.player.state&&this.player.state.floating)try{this.exit("destroy")}catch{}if(this.intersectionObserver){try{this.intersectionObserver.disconnect()}catch{}this.intersectionObserver=null}this.observerTarget=null,this._onClaim&&(window.removeEventListener(Be,this._onClaim),this._onClaim=null),this._onResize&&(window.removeEventListener("resize",this._onResize),this._onResize=null);const e=this._onEnterFullscreen;e&&(this.player.off("enterfullscreen",e),this._onEnterFullscreen=null);const t=this._onPlayAfterDismiss;t&&this._playListenerAttached&&(this.player.off("play",t),this._playListenerAttached=!1,this._onPlayAfterDismiss=null)}_canFloat(e){if(!this.player.options.floating)return!1;if(!this.player.container)return!1;if(!this.player.element||"VIDEO"!==this.player.element.tagName)return!1;if(this.player.state.fullscreen)return!1;if(this.player.playlistManager)return!1;if(window.innerWidth<(this.player.options.floatingMinViewportWidth??768))return!1;if("auto"===e){if(this._autoDismissedThisPlay)return!1;if(this.player.state.paused)return!1;if(!this.player.state.hasStartedPlayback)return!1}return!0}_claimSingleton(){try{window.dispatchEvent(new CustomEvent(Be,{detail:{claimId:this._claimId}}))}catch{}}_setupClaimListener(){this._onClaim=e=>{const t=e.detail;t&&t.claimId!==this._claimId&&this.player.state.floating&&this.exit("claim")};const e=this.player.lifecycleSignal;window.addEventListener(Be,this._onClaim,{signal:e}),this._onResize=()=>{this.player.state.floating&&window.innerWidth<(this.player.options.floatingMinViewportWidth??768)&&this.exit("auto")},window.addEventListener("resize",this._onResize,{signal:e})}_setupFullscreenGuard(){const e=()=>{this.player.state.floating&&this.exit("manual")};this._onEnterFullscreen=e,this.player.on("enterfullscreen",e)}_armPlayListenerToClearDismiss(){if(this._playListenerAttached)return;const e=()=>{this._autoDismissedThisPlay=!1;const e=this._onPlayAfterDismiss;e&&this.player.off("play",e),this._playListenerAttached=!1,this._onPlayAfterDismiss=null};this._onPlayAfterDismiss=e,this.player.on("play",e),this._playListenerAttached=!0}_startObserving(){"IntersectionObserver"in window&&this.player.container&&(this.observerTarget=this.player.container,this.intersectionObserver=new IntersectionObserver(e=>{const t=e[e.length-1];if(t){if(this.lastRatio=t.intersectionRatio,this.player.options.debug)try{console.log("[vidply:floating] intersection",{ratio:Number(t.intersectionRatio.toFixed(3)),state:this.player.state.floating,paused:this.player.state.paused,hasStartedPlayback:this.player.state.hasStartedPlayback,dismissed:this._autoDismissedThisPlay})}catch{}if("auto"!==this.player.state.floating){if("pinned"!==this.player.state.floating&&t.intersectionRatio<.1&&this._canFloat("auto")){const e=500;if(Date.now()-this._lastAutoExitTime<e)return;this.enter("auto")}}else t.intersectionRatio>=.5&&this.exit("auto")}},{threshold:[0,.1,.5,.9]}),this.intersectionObserver.observe(this.observerTarget))}_retargetObserver(e){if(this.intersectionObserver){if(this.observerTarget)try{this.intersectionObserver.unobserve(this.observerTarget)}catch{}this.observerTarget=e;try{this.intersectionObserver.observe(e)}catch{}}}_ensureShell(){if(this.shell)return;this.shell=e.createElement("div",{className:`${this.classPrefix}-floating-shell`,attributes:{role:"dialog","aria-modal":"false","aria-label":x.t("player.floatingPlayer"),"data-vidply-floating":"true",tabindex:"-1"}}),this.dragHandle=e.createElement("div",{className:`${this.classPrefix}-floating-drag-handle`,attributes:{"aria-hidden":"true"}}),this.shell.appendChild(this.dragHandle),this.closeButton=e.createElement("button",{className:`${this.classPrefix}-floating-close`,attributes:{type:"button","aria-label":x.t("player.floatingPlayerClose"),title:x.t("player.floatingPlayerClose")}}),this.closeButton.appendChild(O("close")),this.closeButton.addEventListener("click",e=>{e.stopPropagation(),this.dismiss()}),this.shell.appendChild(this.closeButton),this._createResizeHandles();const t=this.shell;this.resizeHandles.forEach(e=>t.appendChild(e)),this._onKeyDown=e=>{if("Escape"===e.key){const t=this.draggable;if(t&&(t.keyboardDragMode||t.keyboardResizeMode||t.pointerResizeMode))return;e.stopPropagation(),this.dismiss()}},this.shell.addEventListener("keydown",this._onKeyDown)}_createResizeHandles(){this.resizeHandles=["n","s","e","w","ne","nw","se","sw"].map(t=>e.createElement("div",{className:`${this.classPrefix}-floating-resize-handle ${this.classPrefix}-floating-resize-${t}`,attributes:{"data-direction":t,"aria-hidden":"true"}}))}_teardownShell(){if(this.draggable){try{this.draggable.destroy()}catch{}this.draggable=null}this.shell&&(this._onKeyDown&&(this.shell.removeEventListener("keydown",this._onKeyDown),this._onKeyDown=null),this.shell.parentNode&&this.shell.parentNode.removeChild(this.shell)),this.shell=null,this.dragHandle=null,this.closeButton=null,this.resizeHandles=[]}_mountIntoShell(){const t=this.player.container;if(!t||!t.parentNode)return;if(!this.shell)return;const i=t.getBoundingClientRect();this.originalParent=t.parentNode,this.originalNextSibling=t.nextSibling,this.placeholder=e.createElement("div",{className:`${this.classPrefix}-floating-placeholder`,attributes:{"aria-hidden":"true"}}),this.placeholder.style.width=`${Math.max(1,i.width)}px`,this.placeholder.style.height=`${Math.max(1,i.height)}px`;const s=O("pip",`${this.classPrefix}-floating-placeholder-icon`);this.placeholder.appendChild(s),this.originalParent.insertBefore(this.placeholder,t),this.shell.appendChild(t),document.body.appendChild(this.shell),t.classList.add(`${this.classPrefix}-is-floating`),this._retargetObserver(this.placeholder)}_unmountFromShell(){const e=this.player.container;e&&(e.classList.remove(`${this.classPrefix}-is-floating`),e.style.removeProperty("width"),e.style.removeProperty("height")),this.placeholder&&this.placeholder.parentNode?(e&&this.placeholder.parentNode.insertBefore(e,this.placeholder),this.placeholder.parentNode.removeChild(this.placeholder)):e&&this.originalParent&&(this.originalNextSibling&&this.originalNextSibling.parentNode===this.originalParent?this.originalParent.insertBefore(e,this.originalNextSibling):this.originalParent.appendChild(e)),this.placeholder=null,this.originalParent=null,this.originalNextSibling=null,e&&this._retargetObserver(e)}_applyInitialGeometry(){var e,t,i;if(!this.shell)return;const s=(null==(t=null==(e=this.player.storage)?void 0:e.getFloatingPreferences)?void 0:t.call(e))||{},a=window.innerWidth,n=window.innerHeight;let r=s.width&&s.width>=He?s.width:400;r=Math.min(r,Math.max(He,a-32));const o=null==(i=this.player.container)?void 0:i.getBoundingClientRect(),l=Math.round(r/(o&&o.height>0?o.width/o.height:16/9));let d,h,c=s.height&&s.height>=100?s.height:l;if(c=Math.min(c,Math.max(100,n-32)),"number"==typeof s.left&&"number"==typeof s.top)d=Math.max(Ve,Math.min(s.left,a-r-Ve)),h=Math.max(Ve,Math.min(s.top,n-c-Ve));else switch(this.player.options.floatingPosition||"bottom-right"){case"bottom-left":d=Ve,h=n-c-Ve;break;case"top-right":d=a-r-Ve,h=Ve;break;case"top-left":d=Ve,h=Ve;break;default:d=a-r-Ve,h=n-c-Ve}this.shell.style.width=`${r}px`,this.shell.style.height=`${c}px`,this.shell.style.left=`${d}px`,this.shell.style.top=`${h}px`,this._initDraggable()}_initDraggable(){this.shell&&(this.draggable||(this.draggable=new be(this.shell,{dragHandle:this.dragHandle,resizeHandles:this.resizeHandles,constrainToViewport:!0,maintainAspectRatio:!0,minWidth:He,minHeight:100,maxWidth:()=>Math.max(He,window.innerWidth-32),maxHeight:()=>Math.max(100,window.innerHeight-32),classPrefix:`${this.classPrefix}-floating`,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:10,keyboardStepLarge:50,pointerResizeIndicatorText:x.t("player.floatingPlayerDialog"),onDragEnd:()=>this._savePrefs(),onResizeEnd:()=>this._savePrefs(),onDragStart:e=>{const t=e.target;return!t||!t.closest(`.${this.classPrefix}-floating-close`)&&!t.closest(`.${this.classPrefix}-controls`)&&!t.closest(`.${this.classPrefix}-floating-resize-handle`)}})))}_savePrefs(){var e;if(!this.shell||!(null==(e=this.player.storage)?void 0:e.saveFloatingPreferences))return;const t=this.shell.getBoundingClientRect();this.player.storage.saveFloatingPreferences({width:Math.round(t.width),height:Math.round(t.height),left:Math.round(t.left),top:Math.round(t.top)})}_activeElement(){const e=document.activeElement;return e&&e instanceof HTMLElement?e:null}}}}),We={};a(We,{TranscriptManager:()=>Ne});var qe,Ue=s({"src/controls/TranscriptManager.ts"(){d(),$(),F(),V(),oe(),I(),Ce(),Se(),Te(),_e(),ce(),Ne=class{constructor(e){n(this,"player"),n(this,"_cueUpdateTimeout"),n(this,"autoscrollCheckbox",null),n(this,"autoscrollEnabled"),n(this,"availableTranscriptLanguages"),n(this,"currentActiveEntry"),n(this,"currentTranscriptLanguage"),n(this,"customKeyHandler",null),n(this,"documentClickHandlerAdded",!1),n(this,"draggableResizable"),n(this,"handlers",{}),n(this,"headerLeft",null),n(this,"isVisible"),n(this,"languageLabel"),n(this,"languageSelector"),n(this,"languageSelectorHandler"),n(this,"languageSelectorWrapper",null),n(this,"liveRegion"),n(this,"metadataCueChangeHandler",null),n(this,"metadataCues"),n(this,"settingsButton"),n(this,"showTimestamps"),n(this,"showTimestampsButton",null),n(this,"showTimestampsText",null),n(this,"storage"),n(this,"styleDialog"),n(this,"styleDialogJustOpened"),n(this,"styleDialogVisible"),n(this,"timeouts"),n(this,"transcriptContent",null),n(this,"transcriptEntries"),n(this,"transcriptHeader",null),n(this,"transcriptResizeHandles"),n(this,"transcriptStyle"),n(this,"transcriptWindow"),n(this,"_dashActiveLang"),n(this,"_vttCache"),n(this,"_panel",null),this.player=e,this.transcriptWindow=null,this.transcriptEntries=[],this.metadataCues=[],this.currentActiveEntry=null,this.isVisible=!1,this.storage=new ee("vidply"),this.draggableResizable=null,this.settingsButton=null,this.transcriptResizeHandles=[],this.liveRegion=null,this.styleDialog=null,this.styleDialogVisible=!1,this.styleDialogJustOpened=!1,this.languageSelector=null,this.languageLabel=null,this.currentTranscriptLanguage=null,this.availableTranscriptLanguages=[],this.languageSelectorHandler=null;const t=this.storage.getTranscriptPreferences();this.autoscrollEnabled="boolean"!=typeof(null==t?void 0:t.autoscroll)||t.autoscroll,this.showTimestamps="boolean"==typeof(null==t?void 0:t.showTimestamps)&&t.showTimestamps,this.transcriptStyle={fontSize:("string"==typeof(null==t?void 0:t.fontSize)?t.fontSize:void 0)||("string"==typeof this.player.options.transcriptFontSize?this.player.options.transcriptFontSize:void 0)||"100%",fontFamily:("string"==typeof(null==t?void 0:t.fontFamily)?t.fontFamily:void 0)||("string"==typeof this.player.options.transcriptFontFamily?this.player.options.transcriptFontFamily:void 0)||"sans-serif",color:("string"==typeof(null==t?void 0:t.color)?t.color:void 0)||("string"==typeof this.player.options.transcriptColor?this.player.options.transcriptColor:void 0)||"#ffffff",backgroundColor:("string"==typeof(null==t?void 0:t.backgroundColor)?t.backgroundColor:void 0)||("string"==typeof this.player.options.transcriptBackgroundColor?this.player.options.transcriptBackgroundColor:void 0)||"#1e1e1e",opacity:("number"==typeof(null==t?void 0:t.opacity)?t.opacity:void 0)??("number"==typeof this.player.options.transcriptOpacity?this.player.options.transcriptOpacity:void 0)??.98},this.handlers={timeupdate:()=>this.updateActiveEntry(),seeked:()=>this.updateActiveEntry(),audiodescriptionenabled:()=>{this.isVisible&&this.loadTranscriptData()},audiodescriptiondisabled:()=>{this.isVisible&&this.loadTranscriptData()},textcuesupdate:null,resize:null,settingsClick:null,settingsKeydown:null,documentClick:null,styleDialogKeydown:null,floatingchange:null},this._cueUpdateTimeout=null,this._dashActiveLang=null,this._vttCache=new Map,this.timeouts=new Set,this.init()}get settingsMenu(){var e;return(null==(e=this._panel)?void 0:e.settingsMenu)??null}set settingsMenu(e){}get settingsMenuVisible(){var e;return(null==(e=this._panel)?void 0:e.settingsMenuVisible)??!1}set settingsMenuVisible(e){}get settingsMenuJustOpened(){var e;return(null==(e=this._panel)?void 0:e.justOpened)??!1}set settingsMenuJustOpened(e){}get dragOptionButton(){var e;return(null==(e=this._panel)?void 0:e.dragOptionButton)??null}get dragOptionText(){var e;return(null==(e=this._panel)?void 0:e.dragOptionText)??null}get resizeOptionButton(){var e;return(null==(e=this._panel)?void 0:e.resizeOptionButton)??null}get resizeOptionText(){var e;return(null==(e=this._panel)?void 0:e.resizeOptionText)??null}init(){this.setupMetadataHandlingOnLoad(),this.player.on("timeupdate",this.handlers.timeupdate),this.player.on("seeked",this.handlers.seeked),this.player.on("audiodescriptionenabled",this.handlers.audiodescriptionenabled),this.player.on("audiodescriptiondisabled",this.handlers.audiodescriptiondisabled),this.handlers.textcuesupdate=()=>{this.isVisible&&(this.currentTranscriptLanguage&&this._vttCache.has(this.currentTranscriptLanguage)||(this._cueUpdateTimeout&&this.clearManagedTimeout(this._cueUpdateTimeout),this._cueUpdateTimeout=this.setManagedTimeout(()=>{this._cueUpdateTimeout=null,this.loadTranscriptData()},400)))},this.player.on("textcuesupdate",this.handlers.textcuesupdate),this.player.on("fullscreenchange",()=>{this.isVisible&&(window.innerWidth<768&&this.setupDragAndDrop(),this.draggableResizable&&this.draggableResizable.manuallyPositioned||this.setManagedTimeout(()=>this.positionTranscript(),100))}),this.handlers.floatingchange=e=>{e&&this.isVisible&&this.hideTranscript()},this.player.on("floatingchange",this.handlers.floatingchange)}_requestStreamingTrack(e){if(!e)return;const t=this.player.renderer;(null==t?void 0:t.isStreaming)&&"function"==typeof t.activateTextTrackForLanguage&&this._dashActiveLang!==e&&(this._dashActiveLang=e,t.activateTextTrackForLanguage(e))}toggleTranscript(){this.isVisible?this.hideTranscript():this.showTranscript()}showTranscript(){var e;if(null==(e=this.player.state)?void 0:e.floating)return;if(this.player.invalidateTrackCache(),this.transcriptWindow)return this.transcriptWindow.style.display="flex",this.isVisible=!0,this.loadTranscriptData(),this._requestStreamingTrack(this.currentTranscriptLanguage),this.updateLanguageSelector(),this.player.controlBar&&"function"==typeof this.player.controlBar.updateTranscriptButton&&this.player.controlBar.updateTranscriptButton(),void N(this.settingsButton,{delay:150});this.createTranscriptWindow(),this.loadTranscriptData(),this._requestStreamingTrack(this.currentTranscriptLanguage);const t=this.transcriptWindow;t&&(t.style.display="flex",this.draggableResizable&&this.draggableResizable.manuallyPositioned||this.setManagedTimeout(()=>this.positionTranscript(),0),N(this.settingsButton,{delay:150})),this.isVisible=!0}hideTranscript({focusButton:e=!1}={}){var t,i;if(this.transcriptWindow&&(this.transcriptWindow.style.display="none",this.isVisible=!1),this.draggableResizable&&this.draggableResizable.pointerResizeMode&&(this.draggableResizable.disablePointerResizeMode(),this.updateResizeOptionState()),this.hideResizeModeIndicator(),this.announceLive(""),this.player.controlBar&&"function"==typeof this.player.controlBar.updateTranscriptButton&&this.player.controlBar.updateTranscriptButton(),e){const e=null==(i=null==(t=this.player.controlBar)?void 0:t.controls)?void 0:i.transcript;e&&"function"==typeof e.focus&&e.focus({preventScroll:!0})}}createTranscriptWindow(){this.transcriptWindow=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-window`,attributes:{role:"dialog","aria-label":x.t("transcript.ariaLabel"),tabindex:"-1"}}),this.transcriptHeader=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header`,attributes:{tabindex:"0"}}),this.headerLeft=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header-left`});const t=x.t("transcript.settingsMenu");this.settingsButton=e.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings`,attributes:{type:"button","aria-label":t,"aria-expanded":"false"}}),this.settingsButton.appendChild(O("settings")),e.attachTooltip(this.settingsButton,t,this.player.options.classPrefix),this._panel=new De({player:this.player,namespace:"transcript",settingsButton:this.settingsButton,getDraggable:()=>this.draggableResizable,i18nKeys:{enableDrag:"transcript.enableDragMode",disableDrag:"transcript.disableDragMode",enableDragAria:"transcript.enableDragModeAria",disableDragAria:"transcript.disableDragModeAria",enableResize:"transcript.enableResizeMode",disableResize:"transcript.disableResizeMode",enableResizeAria:"transcript.enableResizeModeAria",disableResizeAria:"transcript.disableResizeModeAria",closeMenu:"transcript.closeMenu"},menuAlign:"left",getMenuParent:()=>this.headerLeft??this.transcriptHeader??this.transcriptWindow,getBadgeHost:()=>this.transcriptWindow,onDragItemClick:e=>{this.toggleKeyboardDragMode(),e.hide()},onResizeItemClick:e=>{this.toggleResizeMode({focus:!1})?(e.hide({focusButton:!1}),setTimeout(()=>{var e;null==(e=this.transcriptWindow)||e.focus({preventScroll:!0})},20)):e.hide({focusButton:!0})},buildExtraItems:({menu:e,itemClass:t,classPrefix:i,stripInlineTooltip:s})=>{const a=Pe({classPrefix:i,itemClass:t,icon:"settings",label:"transcript.styleTranscript",onClick:e=>{var t;e.preventDefault(),e.stopPropagation(),null==(t=this._panel)||t.hide(),setTimeout(()=>{this.showStyleDialog()},50)}});s(a),e.appendChild(a);const n=Pe({classPrefix:i,itemClass:t,icon:"clock",label:"transcript.showTimestamps",hasTextClass:!0,onClick:()=>{this.toggleShowTimestamps()}});n.setAttribute("role","switch"),n.setAttribute("aria-checked",this.showTimestamps?"true":"false"),s(n),this.showTimestampsButton=n,this.showTimestampsText=n.querySelector(`.${i}-settings-text`),this.updateShowTimestampsState(),e.appendChild(n)}}),this.handlers.settingsClick=e=>{var t,i;e.preventDefault(),e.stopPropagation(),null==(t=this._panel)||t.markJustOpenedForClick(),null==(i=this._panel)||i.toggle()},this.settingsButton.addEventListener("click",this.handlers.settingsClick),this.handlers.settingsKeydown=e=>{"d"===e.key||"D"===e.key?(e.preventDefault(),e.stopPropagation(),this.toggleKeyboardDragMode()):"r"===e.key||"R"===e.key?(e.preventDefault(),e.stopPropagation(),this.toggleResizeMode()):"Escape"===e.key&&this.settingsMenuVisible&&(e.preventDefault(),e.stopPropagation(),this.hideSettingsMenu())},this.settingsButton.addEventListener("keydown",this.handlers.settingsKeydown);const i=e.createElement("h3",{textContent:`${x.t("transcript.title")}. ${x.t("transcript.dragResizePrompt")}`}),s=`${this.player.options.classPrefix}-transcript-autoscroll-${Date.now()}`,a=e.createElement("label",{className:`${this.player.options.classPrefix}-transcript-autoscroll-label`,attributes:{for:s}});this.autoscrollCheckbox=e.createElement("input",{attributes:{id:s,type:"checkbox"}}),this.autoscrollEnabled&&(this.autoscrollCheckbox.checked=!0);const n=e.createElement("span",{textContent:x.t("transcript.autoscroll"),className:`${this.player.options.classPrefix}-transcript-autoscroll-text`});a.appendChild(this.autoscrollCheckbox),a.appendChild(n),this.autoscrollCheckbox.addEventListener("change",e=>{this.autoscrollEnabled=e.target.checked,this.saveAutoscrollPreference()}),ke(a),this.transcriptHeader.appendChild(i),this.headerLeft.appendChild(this.settingsButton),this.headerLeft.appendChild(a);const r=`${this.player.options.classPrefix}-transcript-language-select-${Date.now()}`,{label:o,select:l}=Me({classPrefix:this.player.options.classPrefix,labelClass:`${this.player.options.classPrefix}-transcript-language-label`,selectClass:`${this.player.options.classPrefix}-transcript-language-select`,labelText:"settings.language",selectId:r,hidden:!1});this.languageLabel=o,this.languageSelector=l;const d=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-language-wrapper`,attributes:{style:"display: none;"}});d.appendChild(o),d.appendChild(l),this.languageSelectorWrapper=d,ke(d),this.headerLeft&&this.headerLeft.appendChild(d);const h=x.t("transcript.close"),c=e.createElement("button",{className:`${this.player.options.classPrefix}-transcript-close`,attributes:{type:"button","aria-label":h}});c.appendChild(O("close")),e.attachTooltip(c,h,this.player.options.classPrefix),c.addEventListener("click",()=>this.hideTranscript({focusButton:!0})),this.transcriptHeader.appendChild(this.headerLeft),this.transcriptHeader.appendChild(c),this.transcriptContent=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-content`}),this.transcriptWindow.appendChild(this.transcriptHeader),this.transcriptWindow.appendChild(this.transcriptContent),this.createResizeHandles(),this.liveRegion=e.createElement("div",{className:"vidply-sr-only",attributes:{"aria-live":"polite","aria-atomic":"true"}}),this.transcriptWindow.appendChild(this.liveRegion),this.player.container.appendChild(this.transcriptWindow),this.setupDragAndDrop(),this.draggableResizable&&this.draggableResizable.manuallyPositioned||this.positionTranscript(),this.handlers.documentClick=e=>{if(this.styleDialogJustOpened)return;const t=e.target;this.styleDialogVisible&&this.styleDialog&&t&&!this.styleDialog.contains(t)&&this.hideStyleDialog()},this.documentClickHandlerAdded=!1;let u=null;this.handlers.resize=()=>{u&&this.clearManagedTimeout(u),u=this.setManagedTimeout(()=>{this.draggableResizable&&this.draggableResizable.manuallyPositioned||this.positionTranscript()},100)},window.addEventListener("resize",this.handlers.resize,{signal:this.player.lifecycleSignal})}createResizeHandles(){const t=this.transcriptWindow;t&&(this.transcriptResizeHandles=["n","s","e","w","ne","nw","se","sw"].map(i=>{const s=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-resize-handle ${this.player.options.classPrefix}-transcript-resize-${i}`,attributes:{"data-direction":i,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return s.style.display="none",t.appendChild(s),s}))}positionTranscript(){const e=this.player;if(!this.transcriptWindow||!e.videoWrapper||!this.isVisible)return;if(this.draggableResizable&&this.draggableResizable.manuallyPositioned)return;const t=window.innerWidth<768,i=e.videoWrapper.getBoundingClientRect(),s=this.player.state.fullscreen;if(t&&!s){this.transcriptWindow.style.position="relative",this.transcriptWindow.style.left="0",this.transcriptWindow.style.right="0",this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.top="auto",this.transcriptWindow.style.width="100%",this.transcriptWindow.style.maxWidth="100%",this.transcriptWindow.style.maxHeight="300px",this.transcriptWindow.style.height="auto",this.transcriptWindow.style.borderRadius="0",this.transcriptWindow.style.transform="none",this.transcriptWindow.style.border="none",this.transcriptWindow.style.borderTop="1px solid var(--vidply-border-light)",this.transcriptWindow.style.removeProperty("border-right"),this.transcriptWindow.style.removeProperty("border-bottom"),this.transcriptWindow.style.removeProperty("border-left"),this.transcriptWindow.style.removeProperty("border-image"),this.transcriptWindow.style.removeProperty("border-image-source"),this.transcriptWindow.style.removeProperty("border-image-slice"),this.transcriptWindow.style.removeProperty("border-image-width"),this.transcriptWindow.style.removeProperty("border-image-outset"),this.transcriptWindow.style.removeProperty("border-image-repeat"),this.transcriptWindow.style.boxShadow="none",this.transcriptHeader&&(this.transcriptHeader.style.cursor="default");const t=e.videoWrapper;t&&t.parentNode&&t.nextSibling!==this.transcriptWindow&&t.parentNode.insertBefore(this.transcriptWindow,t.nextSibling)}else if(s){this.transcriptWindow.style.position="fixed",this.transcriptWindow.style.left="auto",this.transcriptWindow.style.right="20px",this.transcriptWindow.style.bottom="80px",this.transcriptWindow.style.top="auto",this.transcriptWindow.style.maxHeight="calc(100vh - 180px)",this.transcriptWindow.style.height="auto";const e=260,t=Math.max(e,window.innerWidth-40),i=parseFloat(this.transcriptWindow.style.width)||400,s=Math.max(e,Math.min(i,t));this.transcriptWindow.style.width=`${s}px`,this.transcriptWindow.style.maxWidth="none",this.transcriptWindow.style.borderRadius="8px",this.transcriptWindow.style.border="1px solid var(--vidply-border)",this.transcriptWindow.style.removeProperty("border-top"),this.transcriptWindow.style.removeProperty("border-right"),this.transcriptWindow.style.removeProperty("border-bottom"),this.transcriptWindow.style.removeProperty("border-left"),this.transcriptWindow.style.removeProperty("border-image"),this.transcriptWindow.style.removeProperty("border-image-source"),this.transcriptWindow.style.removeProperty("border-image-slice"),this.transcriptWindow.style.removeProperty("border-image-width"),this.transcriptWindow.style.removeProperty("border-image-outset"),this.transcriptWindow.style.removeProperty("border-image-repeat"),this.transcriptHeader&&(this.transcriptHeader.style.cursor="move"),this.transcriptWindow.parentNode!==this.player.container&&this.player.container.appendChild(this.transcriptWindow)}else{const t=parseFloat(this.transcriptWindow.style.width)||400,s=20,a=260,n=this.player.container.getBoundingClientRect();(()=>{"static"===window.getComputedStyle(this.player.container).position&&(this.player.container.style.position="relative")})();const r=window.innerWidth-i.right-s;if(r<t||!(r>=a)){const t=320,s=280,r=Math.min(t,i.width-40),o=Math.min(s,i.height-120),l=e.videoWrapper.getBoundingClientRect(),d=70,h=Math.max(180,o),c=l.bottom-n.top-d-h,u=n.right-l.right+12;this.transcriptWindow.style.position="absolute",this.transcriptWindow.style.left="auto",this.transcriptWindow.style.right=`${u}px`,this.transcriptWindow.style.top=`${c}px`,this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.width=`${Math.max(a,r)}px`,this.transcriptWindow.style.maxWidth=`${t}px`,this.transcriptWindow.style.height=`${h}px`,this.transcriptWindow.style.maxHeight=`${s}px`,this.transcriptWindow.style.boxShadow="0 4px 16px rgba(0, 0, 0, 0.6)"}else{const e=i.right-n.left+s,o=Math.max(a,Math.min(t,r)),l=i.height;this.transcriptWindow.style.position="absolute",this.transcriptWindow.style.left=`${e}px`,this.transcriptWindow.style.right="auto",this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.top="0",this.transcriptWindow.style.height=`${l}px`,this.transcriptWindow.style.maxHeight="none",this.transcriptWindow.style.width=`${o}px`,this.transcriptWindow.style.maxWidth="none",this.transcriptWindow.style.boxShadow=""}this.transcriptWindow.style.borderRadius="8px",this.transcriptWindow.style.border="1px solid var(--vidply-border)",this.transcriptWindow.style.removeProperty("border-top"),this.transcriptWindow.style.removeProperty("border-right"),this.transcriptWindow.style.removeProperty("border-bottom"),this.transcriptWindow.style.removeProperty("border-left"),this.transcriptWindow.style.removeProperty("border-image"),this.transcriptWindow.style.removeProperty("border-image-source"),this.transcriptWindow.style.removeProperty("border-image-slice"),this.transcriptWindow.style.removeProperty("border-image-width"),this.transcriptWindow.style.removeProperty("border-image-outset"),this.transcriptWindow.style.removeProperty("border-image-repeat"),this.transcriptHeader&&(this.transcriptHeader.style.cursor="move"),this.transcriptWindow.parentNode!==this.player.container&&this.player.container.appendChild(this.transcriptWindow)}}getAvailableTranscriptLanguages(){const e=this.player.textTracks,t=new Map;return e.forEach(e=>{if(("captions"===e.kind||"subtitles"===e.kind)&&!e._vidplyStale){const i=(e.language??"").trim(),s=le(e.label,e.language,"player.captions"),a=i||s;a&&!t.has(a)&&t.set(a,{language:i,label:s,track:e})}}),Array.from(t.values())}updateLanguageSelector(){const t=this.languageSelector;if(!t)return;if(this.availableTranscriptLanguages=this.getAvailableTranscriptLanguages(),t.innerHTML="",this.availableTranscriptLanguages.length<2)return void(this.languageSelectorWrapper&&(this.languageSelectorWrapper.style.display="none"));if(this.languageSelectorWrapper&&(this.languageSelectorWrapper.style.display="flex"),this.availableTranscriptLanguages.forEach(i=>{const s={value:i.language||i.label};i.language&&(s.lang=i.language);const a=e.createElement("option",{textContent:i.label,attributes:s});t.appendChild(a)}),this.currentTranscriptLanguage)t.value=this.currentTranscriptLanguage;else if(this.availableTranscriptLanguages.length>0){const e=this.player.textTracks.find(e=>("captions"===e.kind||"subtitles"===e.kind)&&"showing"===e.mode),i=this.availableTranscriptLanguages[0];this.currentTranscriptLanguage=e?e.language:i?i.language:null,this.currentTranscriptLanguage&&(t.value=this.currentTranscriptLanguage)}this.languageSelectorHandler&&t.removeEventListener("change",this.languageSelectorHandler);const i=e=>{this.currentTranscriptLanguage=e.target.value,this._requestStreamingTrack(this.currentTranscriptLanguage),this.loadTranscriptData(),this.transcriptContent&&this.currentTranscriptLanguage&&this.transcriptContent.setAttribute("lang",this.currentTranscriptLanguage)};this.languageSelectorHandler=i,t.addEventListener("change",i)}_parseVTT(e){var t,i;const s=[],a=e.replace(/\r\n/g,"\n").split(/\n\n+/);for(const e of a){const a=e.trim().split("\n");let n=-1;for(let e=0;e<a.length;e++)if(null==(t=a[e])?void 0:t.includes("--\x3e")){n=e;break}if(n<0)continue;const r=null==(i=a[n])?void 0:i.match(/(\d{1,2}:)?(\d{2}):(\d{2})\.(\d{3})\s*-->\s*(\d{1,2}:)?(\d{2}):(\d{2})\.(\d{3})/);if(!r)continue;const o=(r[1]?3600*parseInt(r[1]):0)+60*parseInt(r[2]??"0")+parseInt(r[3]??"0")+parseInt(r[4]??"0")/1e3,l=(r[5]?3600*parseInt(r[5]):0)+60*parseInt(r[6]??"0")+parseInt(r[7]??"0")+parseInt(r[8]??"0")/1e3,d=a.slice(n+1).join("\n").trim();d&&s.push({cue:{startTime:o,endTime:l,text:d,id:""},type:"caption"})}return s}async _loadVttTranscript(e){const t=this._vttCache.get(e);if(t)return t;const i=this.player.renderer;if(!(null==i?void 0:i.isStreaming)||"function"!=typeof i.getTextTrackURLs)return null;const s=i.getTextTrackURLs().find(t=>t.lang===e||t.lang.startsWith(e)||e.startsWith(t.lang));if(!s)return null;const a=this._buildFetchSignal(1e4);try{const t=await fetch(s.url,{signal:a});if(!t.ok)return null;let i=await t.text();if(i.trimStart().startsWith("#EXTM3U")){const e=i.split("\n").map(e=>e.trim()).find(e=>e&&!e.startsWith("#"));if(!e)return null;const t=s.url.substring(0,s.url.lastIndexOf("/")+1),a=e.startsWith("http")?e:new URL(e,t).href,n=await fetch(a,{signal:this._buildFetchSignal(1e4)});if(!n.ok)return null;i=await n.text()}const n=this._parseVTT(i);return n.length>0&&this._vttCache.set(e,n),n}catch{return null}}_buildFetchSignal(e){const t=[],i=this.player.lifecycleSignal;if(i&&t.push(i),"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&t.push(AbortSignal.timeout(e)),0===t.length)return;if(1===t.length)return t[0];const s=AbortSignal.any;return s?s(t):t[0]}loadTranscriptData(){var t,i,s,a;this.transcriptEntries=[],this.currentActiveEntry=null,this.transcriptContent&&(this.transcriptContent.innerHTML="");const n=this.player.textTracks;let r=null;if(this.currentTranscriptLanguage){const e=n.filter(e=>("captions"===e.kind||"subtitles"===e.kind)&&e.language===this.currentTranscriptLanguage&&!e._vidplyStale);r=e.find(e=>e.cues&&e.cues.length>0)||e[0]||null}if(!r){const e=n.filter(e=>("captions"===e.kind||"subtitles"===e.kind)&&!e._vidplyStale);r=e.find(e=>e.cues&&e.cues.length>0)||e[0]||null,r&&(this.currentTranscriptLanguage=r.language)}let o=null;this.currentTranscriptLanguage&&(o=n.find(e=>"descriptions"===e.kind&&e.language===this.currentTranscriptLanguage)||null),o||(o=n.find(e=>"descriptions"===e.kind)||null);const l=n.find(e=>"metadata"===e.kind);if(!r&&!o&&!l)return void this.showNoTranscriptMessage();[r,o,l].filter(e=>Boolean(e)).forEach(e=>{"disabled"===e.mode&&(e.mode="hidden")});const d=this.player.renderer,h=this.currentTranscriptLanguage||((null==r?void 0:r.language)??"");if((null==d?void 0:d.isStreaming)&&"function"==typeof d.getTextTrackURLs&&h){const i=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-loading`,textContent:x.t("transcript.loading")});return null==(t=this.transcriptContent)||t.appendChild(i),void this._loadVttTranscript(h).then(e=>{this.isVisible&&this._renderTranscriptCues(e&&e.length>0?e:null,r,o,l)})}const c=r;if(c&&(!c.cues||0===c.cues.length)){const t=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-loading`,textContent:x.t("transcript.loading")});if(null==(i=this.transcriptContent)||i.appendChild(t),null==(a=(s=this.player).findTrackElement)?void 0:a.call(s,c))c.addEventListener("load",()=>{this.loadTranscriptData()},{once:!0}),this.setManagedTimeout(()=>{this.loadTranscriptData()},1e3);else{let e=0;const t=()=>{e++,this.isVisible&&(c.cues&&c.cues.length>0?this.loadTranscriptData():e<40&&this.setManagedTimeout(t,500))};this.setManagedTimeout(t,300)}return}this._renderTranscriptCues(null,r,o,l)}_renderTranscriptCues(e,t,i,s){this.transcriptEntries=[],this.currentActiveEntry=null;const a=this.transcriptContent;a&&(a.innerHTML="");const n=[];e&&e.length>0?n.push(...e):t&&t.cues&&Array.from(t.cues).forEach(e=>{n.push({cue:e,type:"caption"})}),i&&i.cues&&Array.from(i.cues).forEach(e=>{n.push({cue:e,type:"description"})}),s&&s.cues&&(this.metadataCues=Array.from(s.cues),this.setupMetadataHandling()),n.sort((e,t)=>e.cue.startTime-t.cue.startTime),n.forEach((e,t)=>{const i=this.createTranscriptEntry(e.cue,t,e.type);this.transcriptEntries.push({element:i,cue:e.cue,type:e.type,startTime:e.cue.startTime,endTime:e.cue.endTime}),null==a||a.appendChild(i)}),this.applyTranscriptStyles(),this.updateTimestampVisibility(),this.transcriptContent&&this.currentTranscriptLanguage&&this.transcriptContent.setAttribute("lang",this.currentTranscriptLanguage),this.updateLanguageSelector(),this.updateActiveEntry()}setupMetadataHandlingOnLoad(){const e=()=>{const e=this.player.textTracks.find(e=>"metadata"===e.kind);e?("disabled"===e.mode&&(e.mode="hidden"),this.metadataCueChangeHandler&&e.removeEventListener("cuechange",this.metadataCueChangeHandler),this.metadataCueChangeHandler=()=>{const t=Array.from(e.activeCues||[]);t.length>0&&this.player.options.debug&&console.log("[VidPly Metadata] Active cues:",t.map(e=>({start:e.startTime,end:e.endTime,text:e.text}))),t.forEach(e=>{this.handleMetadataCue(e)})},e.addEventListener("cuechange",this.metadataCueChangeHandler),this.player.options.debug&&console.log("[VidPly Metadata] Track enabled,",e.cues?e.cues.length:0,"cues available")):this.player.options.debug&&console.warn("[VidPly Metadata] No metadata track found")};e(),this.player.on("loadedmetadata",e)}setupMetadataHandling(){this.metadataCues&&0!==this.metadataCues.length&&this.player.options.debug&&console.log("[VidPly Metadata]",this.metadataCues.length,"cues stored from transcript load")}handleMetadataCue(e){const t=(e.text||"").trim();this.player.options.debug&&console.log("[VidPly Metadata] Processing cue:",{time:e.startTime,text:t}),this.player.emit("metadata",{time:e.startTime,endTime:e.endTime,text:t,cue:e}),t.includes("PAUSE")&&(this.player.state.paused||(this.player.options.debug&&console.log("[VidPly Metadata] Pausing video at",e.startTime),this.player.pause()),this.player.emit("metadata:pause",{time:e.startTime,text:t}));const i=t.match(/FOCUS:([\w#-]+)/);if(i&&i[1]){const s=i[1],a=document.querySelector(s);a?(this.player.options.debug&&console.log("[VidPly Metadata] Focusing element:",s),this.setManagedTimeout(()=>{a.focus({preventScroll:!0})},10)):this.player.options.debug&&console.warn("[VidPly Metadata] Element not found:",s),this.player.emit("metadata:focus",{time:e.startTime,target:s,element:a,text:t})}const s=t.match(/#[\w-]+/g);s&&(this.player.options.debug&&console.log("[VidPly Metadata] Hashtags found:",s),this.player.emit("metadata:hashtags",{time:e.startTime,hashtags:s,text:t}))}createTranscriptEntry(t,i,s="caption"){const a=this.stripVTTFormatting(t.text||""),n=(x.t("transcript.seekTo")||"Seek to {time}").replace("{time}",_.formatTime(t.startTime)).replace("{text}",a),r=e.createElement("button",{className:`${this.player.options.classPrefix}-transcript-entry ${this.player.options.classPrefix}-transcript-${s}`,attributes:{type:"button","data-start":String(t.startTime),"data-end":String(t.endTime),"data-type":s,"aria-label":`${n} — ${a}`}}),o=e.createElement("span",{className:`${this.player.options.classPrefix}-transcript-time`,textContent:_.formatTime(t.startTime),attributes:{"aria-hidden":"true"}}),l=e.createElement("span",{className:`${this.player.options.classPrefix}-transcript-text`,textContent:a});return r.appendChild(o),r.appendChild(l),r.addEventListener("click",()=>{this.player.seek(t.startTime),this.player.state.paused&&this.player.play()}),r}stripVTTFormatting(e){return e.replace(/<[^>]+>/g,"").replace(/\n/g," ").trim()}showNoTranscriptMessage(){var t;const i=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-empty`,textContent:x.t("transcript.noTranscript")});null==(t=this.transcriptContent)||t.appendChild(i)}updateActiveEntry(){if(!this.isVisible||0===this.transcriptEntries.length)return;const e=this.player.state.currentTime,t=this.transcriptEntries.find(t=>e>=t.startTime&&e<t.endTime);t&&t!==this.currentActiveEntry?(this.currentActiveEntry&&this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),t.element.classList.add(`${this.player.options.classPrefix}-transcript-entry-active`),this.scrollToEntry(t.element),this.currentActiveEntry=t):!t&&this.currentActiveEntry&&(this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),this.currentActiveEntry=null)}scrollToEntry(e){if(!this.transcriptContent||!this.autoscrollEnabled)return;const t=this.transcriptContent.getBoundingClientRect(),i=e.getBoundingClientRect();(i.top<t.top||i.bottom>t.bottom)&&this.transcriptContent.scrollTo({top:e.offsetTop-this.transcriptContent.clientHeight/2+e.clientHeight/2,behavior:"smooth"})}saveAutoscrollPreference(){const e=this.storage.getTranscriptPreferences()||{};e.autoscroll=this.autoscrollEnabled,this.storage.saveTranscriptPreferences(e)}setupDragAndDrop(){if(!this.transcriptHeader||!this.transcriptWindow)return;if(window.innerWidth<768&&!this.player.state.fullscreen)return void(this.draggableResizable&&(this.draggableResizable.destroy(),this.draggableResizable=null));if(this.draggableResizable)return;this.draggableResizable=new be(this.transcriptWindow,{dragHandle:this.transcriptHeader,resizeHandles:this.transcriptResizeHandles,constrainToViewport:!0,classPrefix:`${this.player.options.classPrefix}-transcript`,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:10,keyboardStepLarge:50,minWidth:300,minHeight:200,maxWidth:()=>Math.max(320,window.innerWidth-40),maxHeight:()=>Math.max(200,window.innerHeight-120),pointerResizeIndicatorText:x.t("transcript.resizeModeHint"),onPointerResizeToggle:e=>{this.transcriptResizeHandles.forEach(t=>{t.style.display=e?"block":"none"}),this.onPointerResizeModeChange(e)},onDragStart:e=>{const t=[`.${this.player.options.classPrefix}-transcript-close`,`.${this.player.options.classPrefix}-transcript-settings`,`.${this.player.options.classPrefix}-transcript-language-select`,`.${this.player.options.classPrefix}-transcript-language-label`,`.${this.player.options.classPrefix}-transcript-settings-menu`,`.${this.player.options.classPrefix}-transcript-style-dialog`];for(const i of t)if(e.target.closest(i))return!1;return!0}}),this.customKeyHandler=e=>{var t;const i=e.key.toLowerCase(),s=e.defaultPrevented;if(!this.settingsMenuVisible&&!this.styleDialogVisible){if("home"===i)return e.preventDefault(),e.stopPropagation(),void(this.draggableResizable&&(this.draggableResizable.pointerResizeMode&&this.draggableResizable.disablePointerResizeMode(),this.draggableResizable.manuallyPositioned=!1,this.positionTranscript(),this.updateResizeOptionState(),this.announceLive(x.t("transcript.positionReset"))));if("r"===i){if(s)return;return e.preventDefault(),e.stopPropagation(),void(this.toggleResizeMode()&&(null==(t=this.transcriptWindow)||t.focus({preventScroll:!0})))}return"escape"===i?this.draggableResizable&&this.draggableResizable.pointerResizeMode?(e.preventDefault(),e.stopPropagation(),void this.draggableResizable.disablePointerResizeMode()):this.draggableResizable&&this.draggableResizable.keyboardDragMode?(e.preventDefault(),e.stopPropagation(),this.draggableResizable.disableKeyboardDragMode(),void this.announceLive(x.t("transcript.dragModeDisabled"))):(e.preventDefault(),e.stopPropagation(),void this.hideTranscript({focusButton:!0})):void 0}};const e=this.customKeyHandler;this.transcriptWindow&&e&&this.transcriptWindow.addEventListener("keydown",e,{signal:this.player.lifecycleSignal})}toggleKeyboardDragMode(){var e,t,i;if(this.draggableResizable){const s=this.draggableResizable.keyboardDragMode;this.draggableResizable.toggleKeyboardDragMode();const a=this.draggableResizable.keyboardDragMode;!s&&a?(this.enableMoveMode(),null==(e=this._panel)||e.showBadge(x.t("transcript.dragModeBadge")),this.announceLive(x.t("transcript.dragModeEnabled"))):s&&!a&&(null==(t=this._panel)||t.hideBadge(),this.announceLive(x.t("transcript.dragModeDisabled"))),this.updateDragOptionState(),this.settingsMenuVisible&&this.hideSettingsMenu(),null==(i=this.transcriptWindow)||i.focus({preventScroll:!0})}}toggleSettingsMenu(){this.settingsMenuVisible?this.hideSettingsMenu():this.showSettingsMenu()}showSettingsMenu(){var e;null==(e=this._panel)||e.show()}positionSettingsMenu(){var e;null==(e=this._panel)||e.reposition()}hideSettingsMenu({focusButton:e=!0}={}){var t;null==(t=this._panel)||t.hide({focusButton:e})}enableMoveMode(){var e;null==(e=this.transcriptWindow)||e.classList.add(`${this.player.options.classPrefix}-transcript-move-mode`),setTimeout(()=>{var e;null==(e=this.transcriptWindow)||e.classList.remove(`${this.player.options.classPrefix}-transcript-move-mode`)},2e3)}toggleResizeMode({focus:e=!0}={}){return!!this.draggableResizable&&(this.draggableResizable.pointerResizeMode?(this.draggableResizable.disablePointerResizeMode({focus:e}),!1):(this.draggableResizable.enablePointerResizeMode({focus:e}),!0))}updateDragOptionState(){var e;null==(e=this._panel)||e.refreshDragState()}updateResizeOptionState(){var e;null==(e=this._panel)||e.refreshResizeState()}toggleShowTimestamps(){this.showTimestamps=!this.showTimestamps,this.updateShowTimestampsState(),this.updateTimestampVisibility(),this.saveTimestampsPreference()}updateShowTimestampsState(){if(!this.showTimestampsButton)return;const e=x.t(this.showTimestamps?"transcript.hideTimestamps":"transcript.showTimestamps"),t=x.t(this.showTimestamps?"transcript.hideTimestampsAria":"transcript.showTimestampsAria");this.showTimestampsButton.setAttribute("aria-checked",this.showTimestamps?"true":"false"),this.showTimestampsButton.setAttribute("aria-label",t),this.showTimestampsText&&(this.showTimestampsText.textContent=e)}updateTimestampVisibility(){this.transcriptContent&&this.transcriptContent.querySelectorAll(`.${this.player.options.classPrefix}-transcript-time`).forEach(e=>{e.style.display=this.showTimestamps?"":"none"})}saveTimestampsPreference(){const e=this.storage.getTranscriptPreferences()||{};e.showTimestamps=this.showTimestamps,this.storage.saveTranscriptPreferences(e)}showResizeModeIndicator(){var e;null==(e=this._panel)||e.showBadge(x.t("transcript.resizeModeBadge"))}hideResizeModeIndicator(){var e;null==(e=this._panel)||e.hideBadge()}onPointerResizeModeChange(e){var t,i;this.updateResizeOptionState(),e?(null==(t=this._panel)||t.showBadge(x.t("transcript.resizeModeBadge")),this.announceLive(x.t("transcript.resizeModeEnabled"))):(null==(i=this._panel)||i.hideBadge(),this.announceLive(x.t("transcript.resizeModeDisabled")))}showStyleDialog(){if(this.documentClickHandlerAdded||setTimeout(()=>{const e=this.handlers.documentClick;e&&document.addEventListener("click",e,{signal:this.player.lifecycleSignal}),this.documentClickHandlerAdded=!0},300),this.styleDialog)return this.styleDialog.style.display="block",this.styleDialogVisible=!0,this.handlers.styleDialogKeydown&&document.addEventListener("keydown",this.handlers.styleDialogKeydown,{signal:this.player.lifecycleSignal}),this.styleDialogJustOpened=!0,setTimeout(()=>{this.styleDialogJustOpened=!1},350),void setTimeout(()=>{const e=this.styleDialog;if(!e)return;const t=e.querySelector("select, input");t&&t.focus({preventScroll:!0})},0);const t=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-dialog`});this.styleDialog=t;const i=e.createElement("h4",{textContent:x.t("transcript.styleTitle"),className:`${this.player.options.classPrefix}-transcript-style-title`});t.appendChild(i);const s=this.createStyleSelectControl(x.t("captions.fontSize"),"fontSize",[{label:x.t("fontSizes.small"),value:"90%"},{label:x.t("fontSizes.normal"),value:"100%"},{label:x.t("fontSizes.large"),value:"110%"},{label:x.t("fontSizes.xlarge"),value:"120%"}]);t.appendChild(s);const a=this.createStyleSelectControl(x.t("captions.fontFamily"),"fontFamily",[{label:x.t("fontFamilies.sansSerif"),value:"sans-serif"},{label:x.t("fontFamilies.serif"),value:"serif"},{label:x.t("fontFamilies.monospace"),value:"monospace"}]);t.appendChild(a);const n=this.createStyleColorControl(x.t("captions.color"),"color");t.appendChild(n);const r=this.createStyleColorControl(x.t("captions.backgroundColor"),"backgroundColor");t.appendChild(r);const o=this.createStyleOpacityControl(x.t("captions.opacity"),"opacity");t.appendChild(o);const l=e.createElement("button",{className:`${this.player.options.classPrefix}-transcript-style-close`,textContent:x.t("settings.close"),attributes:{type:"button"}});l.addEventListener("click",()=>this.hideStyleDialog()),t.appendChild(l);const d=e=>{if(this.styleDialogVisible){if("Escape"===e.key)return e.preventDefault(),e.stopPropagation(),void this.hideStyleDialog();if("Tab"===e.key){const i=t.querySelectorAll("select, input, button"),s=i[0],a=i[i.length-1];if(!s||!a)return;e.shiftKey&&document.activeElement===s?(e.preventDefault(),a.focus({preventScroll:!0})):e.shiftKey||document.activeElement!==a||(e.preventDefault(),s.focus({preventScroll:!0}))}}};this.handlers.styleDialogKeydown=d,document.addEventListener("keydown",d,{signal:this.player.lifecycleSignal}),this.headerLeft?this.headerLeft.appendChild(t):this.transcriptHeader&&this.transcriptHeader.appendChild(t),this.applyTranscriptStyles(),this.styleDialogVisible=!0,t.style.display="block",this.styleDialogJustOpened=!0,setTimeout(()=>{this.styleDialogJustOpened=!1},350),setTimeout(()=>{const e=t.querySelector("select, input");e&&e.focus({preventScroll:!0})},0)}hideStyleDialog(){this.styleDialog&&(this.styleDialog.style.display="none",this.styleDialogVisible=!1,this.handlers.styleDialogKeydown&&document.removeEventListener("keydown",this.handlers.styleDialogKeydown),this.settingsButton&&this.settingsButton.focus({preventScroll:!0}))}createStyleSelectControl(t,i,s){const a=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),n=`${this.player.options.classPrefix}-transcript-${i}-${Date.now()}`,r=e.createElement("label",{textContent:t,attributes:{for:n}});a.appendChild(r);const o=e.createElement("select",{className:`${this.player.options.classPrefix}-transcript-style-select`,attributes:{id:n}});return s.forEach(t=>{const s=e.createElement("option",{textContent:t.label,attributes:{value:t.value}});this.transcriptStyle[i]===t.value&&(s.selected=!0),o.appendChild(s)}),o.addEventListener("change",e=>{this.transcriptStyle[i]=e.target.value,this.applyTranscriptStyles(),this.savePreferences()}),a.appendChild(o),a}createStyleColorControl(t,i){const s=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),a=`${this.player.options.classPrefix}-transcript-${i}-${Date.now()}`,n=e.createElement("label",{textContent:t,attributes:{for:a}});s.appendChild(n);const r=e.createElement("input",{attributes:{id:a,type:"color",value:this.transcriptStyle[i]},className:`${this.player.options.classPrefix}-transcript-style-color`});return r.addEventListener("input",e=>{this.transcriptStyle[i]=e.target.value,this.applyTranscriptStyles(),this.savePreferences()}),s.appendChild(r),s}createStyleOpacityControl(t,i){const s=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),a=`${this.player.options.classPrefix}-transcript-${i}-${Date.now()}`,n=e.createElement("label",{textContent:t,attributes:{for:a}});s.appendChild(n);const r=i,o=e.createElement("span",{textContent:Math.round(100*this.transcriptStyle[r])+"%",className:`${this.player.options.classPrefix}-transcript-style-value`}),l=e.createElement("input",{attributes:{id:a,type:"range",min:"0",max:"1",step:"0.1",value:String(this.transcriptStyle[r])},className:`${this.player.options.classPrefix}-transcript-style-range`});l.addEventListener("input",e=>{const t=parseFloat(e.target.value);this.transcriptStyle[r]=t,o.textContent=Math.round(100*t)+"%",this.applyTranscriptStyles(),this.savePreferences()});const d=e.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-range-container`});return d.appendChild(l),d.appendChild(o),s.appendChild(n),s.appendChild(d),s}savePreferences(){this.storage.saveTranscriptPreferences(this.transcriptStyle)}applyTranscriptStyles(){this.transcriptWindow&&(this.transcriptWindow.style.backgroundColor=this.transcriptStyle.backgroundColor,this.transcriptWindow.style.opacity=String(this.transcriptStyle.opacity),this.transcriptContent&&(this.transcriptContent.style.fontSize=this.transcriptStyle.fontSize,this.transcriptContent.style.fontFamily=this.transcriptStyle.fontFamily,this.transcriptContent.style.color=this.transcriptStyle.color),this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-text`).forEach(e=>{e.style.fontSize=this.transcriptStyle.fontSize,e.style.fontFamily=this.transcriptStyle.fontFamily,e.style.color=this.transcriptStyle.color}),this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-time`).forEach(e=>{e.style.fontFamily=this.transcriptStyle.fontFamily}))}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))}destroy(){this.hideResizeModeIndicator(),this._panel&&(this._panel.destroy(),this._panel=null),this.draggableResizable&&(this.draggableResizable.pointerResizeMode&&(this.draggableResizable.disablePointerResizeMode(),this.updateResizeOptionState()),this.draggableResizable.destroy(),this.draggableResizable=null),this.transcriptWindow&&this.customKeyHandler&&(this.transcriptWindow.removeEventListener("keydown",this.customKeyHandler),this.customKeyHandler=null),this.handlers.timeupdate&&this.player.off("timeupdate",this.handlers.timeupdate),this.handlers.seeked&&this.player.off("seeked",this.handlers.seeked),this.handlers.audiodescriptionenabled&&this.player.off("audiodescriptionenabled",this.handlers.audiodescriptionenabled),this.handlers.audiodescriptiondisabled&&this.player.off("audiodescriptiondisabled",this.handlers.audiodescriptiondisabled),this.handlers.textcuesupdate&&this.player.off("textcuesupdate",this.handlers.textcuesupdate),this.handlers.floatingchange&&this.player.off("floatingchange",this.handlers.floatingchange),this.settingsButton&&(this.handlers.settingsClick&&this.settingsButton.removeEventListener("click",this.handlers.settingsClick),this.handlers.settingsKeydown&&this.settingsButton.removeEventListener("keydown",this.handlers.settingsKeydown)),this.handlers.styleDialogKeydown&&document.removeEventListener("keydown",this.handlers.styleDialogKeydown),this.handlers.documentClick&&document.removeEventListener("click",this.handlers.documentClick),this.handlers.resize&&window.removeEventListener("resize",this.handlers.resize),this.timeouts.forEach(e=>clearTimeout(e)),this.timeouts.clear(),this.handlers={},this.transcriptWindow&&this.transcriptWindow.parentNode&&this.transcriptWindow.parentNode.removeChild(this.transcriptWindow),this.transcriptWindow=null,this.transcriptHeader=null,this.transcriptContent=null,this.transcriptEntries=[],this.styleDialog=null,this.transcriptResizeHandles=[],this.liveRegion=null,this._vttCache.clear()}announceLive(e){this.liveRegion&&(this.liveRegion.textContent=e||"")}}}});function Ke(e,t={}){const i=qe.get(e);if(i)return i;const{integrity:s,crossOrigin:a,referrerPolicy:n,isReady:r,readyTimeout:o=1e3}=t,l=new Promise((t,i)=>{const l=()=>{r?((e,t,i,s,a)=>{if(t())return void s();const n=Date.now(),r=window.setInterval(()=>{t()?(window.clearInterval(r),s()):Date.now()-n>=i&&(window.clearInterval(r),a(new Error(`Script loaded but did not become ready: ${e}`)))},50)})(e,r,o,t,i):t()},d=(e=>{const t=document.getElementsByTagName("script");for(let i=0;i<t.length;i++){const s=t[i];if(s&&s.src===e)return s}return null})(e);if(d)return r&&r()?void t():(d.addEventListener("load",l,{once:!0}),void d.addEventListener("error",()=>i(new Error(`Failed to load script: ${e}`)),{once:!0}));const h=document.createElement("script");h.src=e,s?(h.integrity=s,h.crossOrigin=a??"anonymous",h.referrerPolicy=n??"no-referrer"):null!=a&&(h.crossOrigin=a),h.onload=l,h.onerror=()=>i(new Error(`Failed to load script: ${e}`)),document.head.appendChild(h)}),d=l.catch(t=>{throw qe.delete(e),t});return qe.set(e,d),d}var je,Qe=s({"src/utils/ScriptLoader.ts"(){qe=new Map}}),Ye={};a(Ye,{YouTubeRenderer:()=>je});var Xe,Ge=s({"src/renderers/YouTubeRenderer.ts"(){Qe(),je=class{constructor(e){n(this,"player"),n(this,"media"),n(this,"youtube"),n(this,"videoId"),n(this,"isReady"),n(this,"iframe"),n(this,"timeUpdateInterval"),this.player=e,this.media=e.element,this.youtube=null,this.videoId=null,this.isReady=!1,this.iframe=null}async init(){if(this.videoId=this.extractVideoId(this.player.currentSource||this.player.element.src),!this.videoId)throw new Error("Invalid YouTube URL");await this.loadYouTubeAPI(),this.createIframe(),await this.initializePlayer()}extractVideoId(e){const t=[/(?:youtube\.com\/watch\?v=|youtu\.be\/)([^&\s]+)/,/youtube\.com\/embed\/([^&\s]+)/];for(const i of t){const t=e.match(i);if(t&&t[1])return t[1]}return null}async loadYouTubeAPI(){return window.YT&&window.YT.Player?Promise.resolve():Ke("https://www.youtube.com/iframe_api",{isReady:()=>!(!window.YT||!window.YT.Player),readyTimeout:8e3})}createIframe(){var e;this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`youtube-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.maxHeight="100%",null==(e=this.player.element.parentNode)||e.insertBefore(this.iframe,this.player.element)}async initializePlayer(){return new Promise((e,t)=>{window.YT&&this.iframe?this.youtube=new window.YT.Player(this.iframe.id,{videoId:this.videoId??void 0,width:"100%",height:"100%",playerVars:{controls:1,disablekb:0,fs:1,modestbranding:1,rel:0,showinfo:0,iv_load_policy:3,autoplay:this.player.options.autoplay?1:0,mute:this.player.options.muted?1:0,start:this.player.options.startTime||0},events:{onReady:t=>{this.isReady=!0,this.attachEvents(),this.player.container&&this.player.container.classList.add("vidply-external-controls"),e()},onStateChange:e=>this.handleStateChange(e),onError:e=>this.handleError(e)}}):t(new Error("YouTube IFrame API is not available"))})}attachEvents(){this.timeUpdateInterval=setInterval(()=>{const e=this.youtube;if(this.isReady&&e){const t=e.getCurrentTime(),i=e.getDuration();this.player.state.currentTime=t,this.player.state.duration=i,this.player.emit("timeupdate",t)}},250);const e=this.youtube;e&&e.getDuration&&(this.player.state.duration=e.getDuration(),this.player.emit("loadedmetadata"))}handleStateChange(e){var t;const i=null==(t=window.YT)?void 0:t.PlayerState;if(i)switch(e.data){case i.PLAYING:this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.state.buffering=!1,this.player.emit("play"),this.player.emit("playing"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player);break;case i.PAUSED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player);break;case i.ENDED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&this.youtube&&(this.youtube.seekTo(0),this.youtube.playVideo());break;case i.BUFFERING:this.player.state.buffering=!0,this.player.emit("waiting");break;case i.CUED:this.player.emit("loadedmetadata")}}handleError(e){const t=new Error({2:"Invalid video ID",5:"HTML5 player error",100:"Video not found",101:"Video not allowed to be played in embedded players",150:"Video not allowed to be played in embedded players"}[e.data]||"YouTube player error");this.player.handleError(t)}play(){if(this.isReady&&this.youtube){const e=window.scrollX,t=window.scrollY;this.youtube.playVideo(),window.scrollTo(e,t)}}pause(){this.isReady&&this.youtube&&this.youtube.pauseVideo()}seek(e){this.isReady&&this.youtube&&this.youtube.seekTo(e,!0)}setVolume(e){this.isReady&&this.youtube&&(this.youtube.setVolume(100*e),this.player.state.volume=e)}setMuted(e){this.isReady&&this.youtube&&(e?this.youtube.mute():this.youtube.unMute(),this.player.state.muted=e)}setPlaybackSpeed(e){this.isReady&&this.youtube&&(this.youtube.setPlaybackRate(e),this.player.state.playbackSpeed=e)}destroy(){this.timeUpdateInterval&&clearInterval(this.timeUpdateInterval),this.youtube&&this.youtube.destroy&&this.youtube.destroy(),this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display="")}}}}),Je={};a(Je,{VimeoRenderer:()=>Xe});var Ze,et=s({"src/renderers/VimeoRenderer.ts"(){Qe(),Xe=class{constructor(e){n(this,"player"),n(this,"media"),n(this,"vimeo"),n(this,"videoId"),n(this,"isReady"),n(this,"iframe"),this.player=e,this.media=e.element,this.vimeo=null,this.videoId=null,this.isReady=!1,this.iframe=null}async init(){if(this.videoId=this.extractVideoId(this.player.currentSource||this.player.element.src),!this.videoId)throw new Error("Invalid Vimeo URL");await this.loadVimeoAPI(),this.createIframe(),await this.initializePlayer()}extractVideoId(e){const t=[/vimeo\.com\/(\d+)/,/vimeo\.com\/video\/(\d+)/,/player\.vimeo\.com\/video\/(\d+)/];for(const i of t){const t=e.match(i);if(t&&t[1])return t[1]}return null}async loadVimeoAPI(){return window.Vimeo&&window.Vimeo.Player?Promise.resolve():Ke("https://player.vimeo.com/api/player.js",{isReady:()=>!(!window.Vimeo||!window.Vimeo.Player)})}createIframe(){var e;this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`vimeo-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.maxHeight="100%",null==(e=this.player.element.parentNode)||e.insertBefore(this.iframe,this.player.element)}async initializePlayer(){var e;const t={id:this.videoId,width:"100%",height:"100%",controls:!0,autoplay:this.player.options.autoplay,muted:this.player.options.muted,loop:this.player.options.loop,keyboard:!1};if(this.player.options.startTime>0&&(t.startTime=this.player.options.startTime),!window.Vimeo||!this.iframe)throw new Error("Vimeo Player API is not available");this.vimeo=new window.Vimeo.Player(this.iframe.id,t),await this.vimeo.ready(),this.isReady=!0;const i=null==(e=this.iframe)?void 0:e.querySelector("iframe");i&&(i.style.width="100%",i.style.height="100%",i.setAttribute("width","100%"),i.setAttribute("height","100%")),this.player.container&&this.player.container.classList.add("vidply-external-controls"),this.attachEvents();try{const e=await this.vimeo.getDuration();this.player.state.duration=e,this.player.emit("loadedmetadata")}catch(e){this.player.log("Error getting duration:",e,"warn")}}attachEvents(){const e=this.vimeo;e&&(e.on("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),e.on("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),e.on("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player)}),e.on("timeupdate",(...e)=>{const t=e[0];this.player.state.currentTime=t.seconds,this.player.state.duration=t.duration,this.player.emit("timeupdate",t.seconds),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,t.seconds)}),e.on("volumechange",(...e)=>{const t=e[0];this.player.state.volume=t.volume,this.player.emit("volumechange",t.volume)}),e.on("bufferstart",()=>{this.player.state.buffering=!0,this.player.emit("waiting")}),e.on("bufferend",()=>{this.player.state.buffering=!1,this.player.emit("canplay")}),e.on("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking")}),e.on("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")}),e.on("playbackratechange",(...e)=>{const t=e[0];this.player.state.playbackSpeed=t.playbackRate,this.player.emit("ratechange",t.playbackRate)}),e.on("error",(...e)=>{const t=e[0];this.player.handleError(new Error(`Vimeo error: ${(null==t?void 0:t.message)??"unknown"}`))}))}play(){if(this.isReady&&this.vimeo){const e=window.scrollX,t=window.scrollY;this.vimeo.play().catch(e=>{this.player.log("Play error:",e,"warn")}),window.scrollTo(e,t)}}pause(){this.isReady&&this.vimeo&&this.vimeo.pause().catch(e=>{this.player.log("Pause error:",e,"warn")})}seek(e){this.isReady&&this.vimeo&&this.vimeo.setCurrentTime(e).catch(e=>{this.player.log("Seek error:",e,"warn")})}setVolume(e){this.isReady&&this.vimeo&&(this.vimeo.setVolume(e).catch(e=>{this.player.log("Volume error:",e,"warn")}),this.player.state.volume=e)}setMuted(e){this.isReady&&this.vimeo&&(this.vimeo.setVolume(e?0:this.player.state.volume),this.player.state.muted=e)}setPlaybackSpeed(e){this.isReady&&this.vimeo&&(this.vimeo.setPlaybackRate(e).catch(e=>{this.player.log("Playback rate error:",e,"warn")}),this.player.state.playbackSpeed=e)}destroy(){this.vimeo&&this.vimeo.destroy&&this.vimeo.destroy(),this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display="")}}}}),tt={};a(tt,{HLSRenderer:()=>Ze});var it,st=s({"src/renderers/HLSRenderer.ts"(){Qe(),Ze=class{constructor(e){n(this,"player"),n(this,"media"),n(this,"hls"),n(this,"_hlsSourceLoaded"),n(this,"_pendingSrc"),n(this,"_hlsSubtitleTracksCount"),n(this,"_cueUpdateTimer"),n(this,"_lastKnownCueCount"),n(this,"_nativeTrackListenersDestroyed"),n(this,"_didDeferredLoad"),n(this,"_manifestUrl"),n(this,"_loadingForSeekOnly"),n(this,"_cleanupNativeTextTrackListeners"),n(this,"_listenerController"),n(this,"_timers"),n(this,"_pendingReadyHandler"),this.player=e,this.media=e.element,this.hls=null,this._hlsSourceLoaded=!1,this._pendingSrc=null,this._hlsSubtitleTracksCount=void 0,this._cueUpdateTimer=null,this._lastKnownCueCount=0,this._manifestUrl=null,this._cleanupNativeTextTrackListeners=()=>{},this._listenerController=new AbortController,this._timers=new Set,this._pendingReadyHandler=null}get isStreaming(){return null!=this.hls}_setTimeout(e,t){const i=setTimeout(()=>{this._timers.delete(i),e()},t);this._timers.add(i)}_clearTimers(){for(const e of this._timers)clearTimeout(e);this._timers.clear()}async init(){this.canPlayNatively()?(this.player.log("Using native HLS support"),await this.initNative()):(this.player.log("Using hls.js for HLS support"),await this.initHlsJs())}canPlayNatively(){const e=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,t="MacIntel"===navigator.platform&&navigator.maxTouchPoints>1;return!(!e&&!t)&&""!==document.createElement("video").canPlayType("application/vnd.apple.mpegurl")}async initNative(){const{HTML5Renderer:e}=await Promise.resolve().then(()=>(me(),pe)),t=new e(this.player);await t.init(),this.play=()=>t.play(),this.pause=()=>t.pause(),this.seek=e=>t.seek(e),this.setVolume=e=>t.setVolume(e),this.setMuted=e=>t.setMuted(e),this.setPlaybackSpeed=e=>t.setPlaybackSpeed(e),this.ensureLoaded=()=>{var e;return null==(e=t.ensureLoaded)?void 0:e.call(t)},this.getQualities=()=>{var e;return(null==(e=t.getQualities)?void 0:e.call(t))??[]},this.switchQuality=e=>{var i;return null==(i=t.switchQuality)?void 0:i.call(t,e)},this.getCurrentQuality=()=>{var e;return(null==(e=t.getCurrentQuality)?void 0:e.call(t))??0},this._attachNativeTextTrackListeners(),this.destroy=()=>{this._cleanupNativeTextTrackListeners(),this._clearTimers(),this._pendingReadyHandler&&(this.player.off("ready",this._pendingReadyHandler),this._pendingReadyHandler=null),t.destroy()}}_attachNativeTextTrackListeners(){let e;const t=()=>{clearTimeout(e),e=setTimeout(()=>{var e;if(this._nativeTrackListenersDestroyed)return;const t=this.media.textTracks;let i=0;for(let s=0;s<t.length;s++){const a=null==(e=t[s])?void 0:e.kind;"subtitles"!==a&&"captions"!==a||i++}this._hlsSubtitleTracksCount=i,this.updateCaptionButtonsForHls()},150)};this.media.textTracks.addEventListener("addtrack",t),this.media.textTracks.addEventListener("removetrack",t),this.media.addEventListener("loadedmetadata",t),this._cleanupNativeTextTrackListeners=()=>{this._nativeTrackListenersDestroyed=!0,clearTimeout(e),this.media.textTracks.removeEventListener("addtrack",t),this.media.textTracks.removeEventListener("removetrack",t),this.media.removeEventListener("loadedmetadata",t)}}async initHlsJs(){var e;this.media.controls=!1,this.media.removeAttribute("controls"),window.Hls||await this.loadHlsJs();const t=window.Hls;if(!(null==t?void 0:t.isSupported()))throw new Error("HLS is not supported in this browser");const i=Array.from(this.media.querySelectorAll("source"));let s=null;i.length>0&&(s=(null==(e=i[0])?void 0:e.getAttribute("src"))??null,i.forEach(e=>e.remove()),this.player.log("Removed <source> elements for HTML5 validity (hls.js uses src attribute)")),this.hls=new t({debug:this.player.options.debug,autoStartLoad:!1,enableWorker:!0,lowLatencyMode:!1,backBufferLength:90,maxBufferLength:12,maxMaxBufferLength:60,maxBufferSize:3e7,maxBufferHole:.5,manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:4,manifestLoadingRetryDelay:1e3,manifestLoadingMaxRetryTimeout:64e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,levelLoadingMaxRetryTimeout:64e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingMaxRetryTimeout:64e3}),this.hls.attachMedia(this.media);let a=this.player.currentSource;if(!a&&s&&(a=s),a||(a=this.player.element.getAttribute("data-vidply-src")),!a){const e=this.player.element.getAttribute("src")||this.player.element.src;e&&!e.startsWith("blob:")&&(a=e)}if(this.player.log(`Loading HLS source: ${a}`,"log"),!a)throw new Error("No HLS source found");this._pendingSrc=a,this._manifestUrl=a,this.hls.loadSource(a),this._hlsSourceLoaded=!0,this.attachHlsEvents(),this.attachMediaEvents()}async loadHlsJs(){return Ke(this.player.options.hlsScriptUrl||"https://cdn.jsdelivr.net/npm/hls.js@1.6.16/dist/hls.min.js",{integrity:this.player.options.hlsScriptIntegrity})}attachHlsEvents(){const e=this.hls,t=window.Hls;e&&t&&(e.on(t.Events.MANIFEST_PARSED,(...e)=>{const t=e[1];this.player.log("HLS manifest loaded, found "+t.levels.length+" quality levels"),this.player.emit("hlsmanifestparsed",t),this.player.container&&this.player.container.classList.remove("vidply-external-controls"),this._setTimeout(()=>{var e,t;void 0!==this._hlsSubtitleTracksCount&&0!==this._hlsSubtitleTracksCount||0===((null==(t=null==(e=this.hls)?void 0:e.subtitleTracks)?void 0:t.length)||0)&&(this._hlsSubtitleTracksCount=0,this.updateCaptionButtonsForHls())},500)}),e.on(t.Events.LEVEL_SWITCHED,(...e)=>{const t=e[1];this.player.log("HLS level switched to "+t.level),this.player.emit("hlslevelswitched",t)}),e.on(t.Events.SUBTITLE_TRACKS_UPDATED,(...e)=>{const t=e[1];this.player.log("HLS subtitle tracks updated, found "+t.subtitleTracks.length+" tracks"),this.player.emit("hlssubtitletracksupdated",t),this._hlsSubtitleTracksCount=t.subtitleTracks.length,this.updateCaptionButtonsForHls(),t.subtitleTracks.length>0&&this._startCueUpdatePolling()}),e.on(t.Events.SUBTITLE_TRACK_SWITCH,(...e)=>{const t=e[1];this.player.log("HLS subtitle track switched to "+t.id),this.player.emit("hlssubtitletrackswitch",t),this._lastKnownCueCount=0,this._startCueUpdatePolling()}),e.on(t.Events.ERROR,(...e)=>{this.handleHlsError(e[1])}),e.on(t.Events.FRAG_BUFFERED,()=>{if(this.player.state.buffering=!1,this.media.paused){if(this._loadingForSeekOnly&&this._isTimeBuffered(this.media.currentTime)){this._loadingForSeekOnly=!1;try{e.stopLoad()}catch{}}}else this._loadingForSeekOnly=!1}),e.on(t.Events.SUBTITLE_FRAG_PROCESSED,(...e)=>{const t=e[1];if(!t||!t.success)return;const i=this._getTotalCueCount();i>this._lastKnownCueCount&&(this._lastKnownCueCount=i,this.player.emit("textcuesupdate"))}),e.on(t.Events.CUES_PARSED,()=>{this.player.emit("textcuesupdate")}))}_getTotalCueCount(){const e=this.media.textTracks;let t=0;if(!e)return t;for(let i=0;i<e.length;i++){const s=e[i];s&&("subtitles"===s.kind||"captions"===s.kind)&&s.cues&&(t+=s.cues.length)}return t}_isTimeBuffered(e){const t=this.media.buffered;if(!t||0===t.length)return!1;for(let i=0;i<t.length;i++)if(e>=t.start(i)-.25&&e<=t.end(i)+.25)return!0;return!1}_startCueUpdatePolling(){this._stopCueUpdatePolling();let e=0,t=0;this._cueUpdateTimer=setInterval(()=>{const i=this._getTotalCueCount();i>e?(e=i,t=0,this.player.emit("textcuesupdate")):(t++,t>=8&&(this._stopCueUpdatePolling(),i>0&&this.player.emit("textcuesupdate")))},500)}_stopCueUpdatePolling(){this._cueUpdateTimer&&(clearInterval(this._cueUpdateTimer),this._cueUpdateTimer=null)}updateCaptionButtonsForHls(e=0){const t=this._hlsSubtitleTracksCount||0,i=()=>{var i,s;if(this.player.invalidateTrackCache(),t>0){if(this.player.captionManager&&0===this.player.captionManager.refreshTracks()&&e<5){const t=200*(e+1);return this.player.log(`HLS caption tracks not yet on video element, retrying in ${t}ms (attempt ${e+1})`,"info"),void this._setTimeout(()=>{this.updateCaptionButtonsForHls(e+1)},t)}(null==(i=this.player.transcriptManager)?void 0:i.isVisible)&&(this.player.transcriptManager.loadTranscriptData(),this.player.transcriptManager.updateLanguageSelector()),this.player.controlBar&&(this.player.controlBar.ensureCaptionsButton(),this.player.controlBar.ensureCaptionStyleButton(),this.player.controlBar.ensureTranscriptButton())}else this.player.captionManager&&this.player.captionManager.refreshTracks(),(null==(s=this.player.transcriptManager)?void 0:s.isVisible)&&this.player.transcriptManager.hideTranscript(),this.player.controlBar&&this.player.controlBar.removeHlsCaptionButtons(!0)};if(this.player.controlBar)return void i();const s=()=>{this.player.off("ready",s),this._pendingReadyHandler=null,i()};this._pendingReadyHandler=s,this.player.on("ready",s)}attachMediaEvents(){const{signal:e}=this._listenerController;this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")},{signal:e}),this.media.addEventListener("durationchange",()=>{const e=this.media.duration;e&&isFinite(e)&&e>0&&(this.player.state.duration=e,this.player.emit("durationchange",e))},{signal:e}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)},{signal:e}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)},{signal:e}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())},{signal:e}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)},{signal:e}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume)},{signal:e}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")},{signal:e}),this.media.addEventListener("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking"),this._isTimeBuffered(this.media.currentTime)||(this.player.state.buffering=!0,this.player.emit("waiting"))},{signal:e}),this.media.addEventListener("seeked",()=>{if(this.player.state.seeking=!1,this.player.emit("seeked"),this.media.paused&&this.hls)try{this.hls.stopLoad()}catch{}},{signal:e}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")},{signal:e}),this.media.addEventListener("error",()=>{this.player.handleError(this.media.error)},{signal:e})}handleHlsError(e){var t,i,s;if(this.player.log(`HLS Error - Type: ${e.type}, Details: ${e.details}, Fatal: ${e.fatal}`,"warn"),e.response&&this.player.log(`Response code: ${e.response.code}, URL: ${e.response.url}`,"warn"),e.fatal){const a=null==(t=window.Hls)?void 0:t.ErrorTypes;switch(e.type){case null==a?void 0:a.NETWORK_ERROR:this.player.log("Fatal network error, trying to recover...","error"),this.player.log(`Network error details: ${e.details}`,"error"),this._setTimeout(()=>{var e;null==(e=this.hls)||e.startLoad()},1e3);break;case null==a?void 0:a.MEDIA_ERROR:this.player.log("Fatal media error, trying to recover...","error"),null==(i=this.hls)||i.recoverMediaError();break;default:this.player.log("Fatal error, cannot recover","error"),this.player.handleError(new Error(`HLS Error: ${e.type} - ${e.details}`)),null==(s=this.hls)||s.destroy()}}else this.player.log("Non-fatal HLS error: "+e.details,"warn")}ensureLoaded(){if(this.hls&&!this._didDeferredLoad){try{this.hls.startLoad(-1)}catch{}this._didDeferredLoad=!0}}play(){const e=window.scrollX,t=window.scrollY;if(this.hls){this._loadingForSeekOnly=!1;try{this.hls.startLoad(-1)}catch{}this._didDeferredLoad=!0}const i=this.media.play();window.scrollTo(e,t),void 0!==i&&i.catch(e=>{this.player.log("Play failed:",e,"warn")})}pause(){if(this.media.pause(),this.hls)try{this.hls.stopLoad()}catch{}}seek(e){if(this.media.currentTime=e,this.hls){this.media.paused&&(this._loadingForSeekOnly=!0);try{this.hls.startLoad(-1)}catch{}}}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}switchQuality(e){this.hls&&(this.hls.currentLevel=e)}getQualities(){if(this.hls&&this.hls.levels){const e=new Map;return this.hls.levels.forEach((t,i)=>{const s=Number(t.height)||0,a=Number(t.bitrate)||0,n=s>0?s:`br_${a}`,r=e.get(n);(!r||a>(r.bitrate||0))&&e.set(n,{index:i,height:t.height,width:t.width,bitrate:a,level:t})}),Array.from(e.values()).map(e=>{const t=Number(e.height)||0,i=e.bitrate>0?Math.round(e.bitrate/1e3):0;return{index:e.index,height:e.height,width:e.width,bitrate:e.bitrate,name:t>0?`${t}p`:i>0?`${i} kb`:"Auto"}})}return[]}getCurrentQuality(){return this.hls?this.hls.currentLevel:-1}activateTextTrackForLanguage(e){if(!this.hls||!e)return!1;const t=this.hls.subtitleTracks;if(!t||0===t.length)return!1;const i=t.findIndex(t=>{const i=t.lang||t.language||"";return i===e||i.startsWith(e)||e.startsWith(i)});return!(i<0||(this.player.log(`Activating HLS subtitle track index ${i} for language "${e}"`),this.hls.subtitleTrack=i,this._lastKnownCueCount=0,this._startCueUpdatePolling(),0))}getTextTrackURLs(){if(!this.hls||!this._manifestUrl)return[];try{const e=this.hls.subtitleTracks;if(!e||0===e.length)return[];const t=[];for(const i of e){const e=i.lang||i.language||"",s=i.url;e&&s&&t.push({lang:e,url:s})}return t}catch{return[]}}supportsAutoQuality(){return!0}isAutoQuality(){var e;return-1===(null==(e=this.hls)?void 0:e.currentLevel)}destroy(){this._stopCueUpdatePolling(),this._clearTimers(),this._listenerController.abort(),this._pendingReadyHandler&&(this.player.off("ready",this._pendingReadyHandler),this._pendingReadyHandler=null),this._lastKnownCueCount=0,this._manifestUrl=null,this.hls&&(this.hls.destroy(),this.hls=null)}}}}),at={};a(at,{DASHRenderer:()=>it});var nt,rt,ot=s({"src/renderers/DASHRenderer.ts"(){Qe(),it=class{constructor(e){n(this,"player"),n(this,"media"),n(this,"dash"),n(this,"isStreaming",!0),n(this,"_dashSourceLoaded"),n(this,"_pendingSrc"),n(this,"_dashSubtitleTracksCount"),n(this,"_dashTextTracks"),n(this,"_cueUpdateTimer"),n(this,"_captionEnabledHandler"),n(this,"_captionDisabledHandler"),n(this,"_lastKnownCueCount"),n(this,"_dashTextIsTtml"),n(this,"_pendingTimeouts"),n(this,"_ttmlDiv"),n(this,"_manifestUrl"),n(this,"_listenerController"),n(this,"_pendingReadyHandler"),this.player=e,this.media=e.element,this.dash=null,this._dashSourceLoaded=!1,this._pendingSrc=null,this._dashSubtitleTracksCount=void 0,this._dashTextTracks=[],this._cueUpdateTimer=null,this._captionEnabledHandler=null,this._captionDisabledHandler=null,this._lastKnownCueCount=0,this._dashTextIsTtml=!1,this._pendingTimeouts=[],this._ttmlDiv=null,this._manifestUrl=null,this._listenerController=new AbortController,this._pendingReadyHandler=null}async init(){this.player.log("Using dash.js for DASH support"),await this.initDashJs()}async initDashJs(){var e;this.media.controls=!1,this.media.removeAttribute("controls"),window.dashjs||await this.loadDashJs();const t=Array.from(this.media.querySelectorAll("source"));let i=null;t.length>0&&(i=(null==(e=t[0])?void 0:e.getAttribute("src"))??null,t.forEach(e=>e.remove()),this.player.log("Removed <source> elements for HTML5 validity (dash.js uses MSE)"));const s=window.dashjs;if(!s)throw new Error("dash.js not available");this.dash=s.MediaPlayer().create(),this.dash.updateSettings({debug:{logLevel:this.player.options.debug?4:0},streaming:{selectionModeForInitialTrack:"firstTrack",buffer:{bufferTimeAtTopQuality:30,bufferTimeAtTopQualityLongForm:60,bufferTimeDefault:12,bufferToKeep:20,bufferPruningInterval:10},retryAttempts:{MPD:4,MediaSegment:6,InitializationSegment:4,BitstreamSwitchingSegment:4},retryIntervals:{MPD:1e3,MediaSegment:1e3,InitializationSegment:1e3,BitstreamSwitchingSegment:1e3},abr:{autoSwitchBitrate:{video:!0,audio:!0}},text:{defaultEnabled:!0}}}),this._ttmlDiv=document.createElement("div"),this._ttmlDiv.className="vidply-dash-ttml",this._ttmlDiv.style.visibility="hidden";const a=this.player.videoWrapper||this.media.parentElement;a&&a.appendChild(this._ttmlDiv),this.dash.initialize(this.media,null,!1),this.dash.attachTTMLRenderingDiv(this._ttmlDiv);let n=this.player.currentSource;if(!n&&i&&(n=i),n||(n=this.player.element.getAttribute("data-vidply-src")),!n){const e=this.player.element.getAttribute("src")||this.player.element.src;e&&!e.startsWith("blob:")&&(n=e)}if(this.player.log(`Loading DASH source: ${n}`,"log"),!n)throw new Error("No DASH source found");this._pendingSrc=n,this._manifestUrl=n,this.dash.attachSource(n),this._dashSourceLoaded=!0,this.player.showPosterOverlay(),this.attachDashEvents(),this.attachMediaEvents(),this._setupCaptionSync()}async loadDashJs(){return Ke(this.player.options.dashScriptUrl||"https://cdn.jsdelivr.net/npm/dashjs@5.2.0/dist/modern/umd/dash.all.min.js",{integrity:this.player.options.dashScriptIntegrity})}_setTimeout(e,t){const i=setTimeout(()=>{this._pendingTimeouts=this._pendingTimeouts.filter(e=>e!==i),e()},t);return this._pendingTimeouts.push(i),i}attachDashEvents(){const e=window.dashjs,t=this.dash;if(!e||!t)return;const i=e.MediaPlayer.events;t.on(i.MANIFEST_LOADED,(...e)=>{const t=e[0],i=(null==t?void 0:t.data)??t;this.player.log("DASH manifest loaded"),this.player.emit("dashmanifestloaded",i),this.player.container&&this.player.container.classList.remove("vidply-external-controls"),this._setTimeout(()=>{this._checkSubtitleTracks()},500)}),t.on(i.QUALITY_CHANGE_RENDERED,(...e)=>{const t=e[0];"video"===t.mediaType&&(this.player.log("DASH quality changed to index "+t.newQuality),this.player.emit("dashqualitychanged",t))}),t.on(i.TEXT_TRACKS_ADDED,(...e)=>{const i=e[0],s=(null==i?void 0:i.tracks)??[];if(this._dashTextTracks=s,this._dashTextIsTtml=s.some(e=>e.isTTML||/stpp|ttml/i.test(e.codec||"")||/ttml/i.test(e.mimeType||"")),this.player.log(`DASH text tracks added: ${s.length} tracks, format: ${this._dashTextIsTtml?"TTML":"WebVTT"}`),this._dashSubtitleTracksCount=s.length,this.player.emit("dashsubtitletracksupdated",{tracks:s}),this.updateCaptionButtonsForDash(),s.length>0){try{t.setTextTrack(0)}catch{}this._dashTextIsTtml||this._startCueUpdatePolling()}}),t.on(i.STREAM_INITIALIZED,()=>{this.player.log("DASH stream initialized"),this.player.emit("dashstreaminitialized"),this._setTimeout(()=>{const e=this.getQualities();e.length>0&&this.player.emit("dashmanifestparsed",{qualities:e})},300)}),t.on(i.ERROR,(...e)=>{this.handleDashError(e[0])}),t.on(i.FRAGMENT_LOADING_COMPLETED,(...e)=>{var t;const i=e[0];this.player.state.buffering=!1,"text"!==(null==(t=null==i?void 0:i.request)?void 0:t.mediaType)||this._dashTextIsTtml||this._setTimeout(()=>{const e=this._getTotalCueCount();e>this._lastKnownCueCount&&(this._lastKnownCueCount=e,this.player.emit("textcuesupdate"))},100)})}_getTotalCueCount(){const e=this.media.textTracks;let t=0;if(!e)return t;for(let i=0;i<e.length;i++){const s=e[i];!s||"subtitles"!==s.kind&&"captions"!==s.kind||s._vidplyStale||!s.cues||(t+=s.cues.length)}return t}_isTimeBuffered(e){const t=this.media.buffered;if(!t||0===t.length)return!1;for(let i=0;i<t.length;i++)if(e>=t.start(i)-.25&&e<=t.end(i)+.25)return!0;return!1}_setupCaptionSync(){this._captionEnabledHandler=e=>{this._dashTextIsTtml&&(e.track&&(e.track.mode="showing"),this._ttmlDiv&&(this._ttmlDiv.style.visibility="visible")),this._syncDashTextTrack(e)},this._captionDisabledHandler=()=>{if(this._dashTextIsTtml&&this._ttmlDiv&&(this._ttmlDiv.style.visibility="hidden"),this.dash)try{this.dash.setTextTrack(-1)}catch{}},this.player.on("captionsenabled",this._captionEnabledHandler),this.player.on("captionsdisabled",this._captionDisabledHandler)}_syncDashTextTrack(e){if(!this.dash||!this._dashTextTracks.length)return;const t=e.language;if(!t)return;const i=this._dashTextTracks.findIndex(e=>{const i=e.lang||e.language||e.srclang||"";return!!i&&(i===t||i.startsWith(t)||t.startsWith(i))});if(i>=0){this.player.log(`Syncing DASH text track to index ${i} (${t})`);try{this.dash.setTextTrack(i)}catch{}this._dashTextIsTtml||(this._lastKnownCueCount=0,this._startCueUpdatePolling())}}_startCueUpdatePolling(){this._stopCueUpdatePolling();let e=0,t=0;this._cueUpdateTimer=setInterval(()=>{const i=this._getTotalCueCount();i>e?(e=i,t=0,this.player.emit("textcuesupdate")):(t++,t>=8&&(this._stopCueUpdatePolling(),i>0&&this.player.emit("textcuesupdate")))},500)}_stopCueUpdatePolling(){this._cueUpdateTimer&&(clearInterval(this._cueUpdateTimer),this._cueUpdateTimer=null)}_checkSubtitleTracks(){if(void 0!==this._dashSubtitleTracksCount&&this._dashSubtitleTracksCount>0)return;const e=this.media.textTracks;let t=0;for(let i=0;i<e.length;i++){const s=e[i];!s||"subtitles"!==s.kind&&"captions"!==s.kind||s._vidplyStale||t++}this._dashSubtitleTracksCount=t,this.updateCaptionButtonsForDash()}updateCaptionButtonsForDash(e=0){const t=this._dashSubtitleTracksCount||0,i=()=>{var i,s;if(this.player.invalidateTrackCache(),t>0){if(this.player.captionManager&&0===this.player.captionManager.refreshTracks()&&e<5){const t=200*(e+1);return this.player.log(`DASH caption tracks not yet on video element, retrying in ${t}ms (attempt ${e+1})`,"info"),void this._setTimeout(()=>{this.updateCaptionButtonsForDash(e+1)},t)}!this._dashTextIsTtml&&(null==(i=this.player.transcriptManager)?void 0:i.isVisible)&&(this.player.transcriptManager.loadTranscriptData(),this.player.transcriptManager.updateLanguageSelector()),this.player.controlBar&&(this.player.controlBar.ensureCaptionsButton(),this._dashTextIsTtml||(this.player.controlBar.ensureCaptionStyleButton(),this.player.controlBar.ensureTranscriptButton()))}else this.player.captionManager&&this.player.captionManager.refreshTracks(),(null==(s=this.player.transcriptManager)?void 0:s.isVisible)&&this.player.transcriptManager.hideTranscript(),this.player.controlBar&&this.player.controlBar.removeHlsCaptionButtons(!0)};if(this.player.controlBar)return void i();const s=()=>{this.player.off("ready",s),this._pendingReadyHandler=null,i()};this._pendingReadyHandler=s,this.player.on("ready",s)}attachMediaEvents(){const{signal:e}=this._listenerController;this.media.addEventListener("loadedmetadata",()=>{this.player.state.duration=this.media.duration,this.player.emit("loadedmetadata")},{signal:e}),this.media.addEventListener("durationchange",()=>{const e=this.media.duration;e&&isFinite(e)&&e>0&&(this.player.state.duration=e,this.player.emit("durationchange",e))},{signal:e}),this.media.addEventListener("play",()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)},{signal:e}),this.media.addEventListener("pause",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)},{signal:e}),this.media.addEventListener("ended",()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.player.seek(0),this.player.play())},{signal:e}),this.media.addEventListener("timeupdate",()=>{this.player.state.currentTime=this.media.currentTime,this.player.emit("timeupdate",this.media.currentTime),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,this.media.currentTime)},{signal:e}),this.media.addEventListener("volumechange",()=>{this.player.state.volume=this.media.volume,this.player.state.muted=this.media.muted,this.player.emit("volumechange",this.media.volume)},{signal:e}),this.media.addEventListener("seeking",()=>{this.player.state.seeking=!0,this.player.emit("seeking"),this._isTimeBuffered(this.media.currentTime)||(this.player.state.buffering=!0,this.player.emit("waiting"))},{signal:e}),this.media.addEventListener("seeked",()=>{this.player.state.seeking=!1,this.player.emit("seeked")},{signal:e}),this.media.addEventListener("waiting",()=>{this.player.state.buffering=!0,this.player.emit("waiting")},{signal:e}),this.media.addEventListener("canplay",()=>{this.player.state.buffering=!1,this.player.emit("canplay")},{signal:e}),this.media.addEventListener("error",()=>{this.player.handleError(this.media.error)},{signal:e})}handleDashError(e){const t=(null==e?void 0:e.error)??e;if(!t)return;const i=t.code??"",s=t.message||"";this.player.log(`DASH Error - Code: ${i}, Message: ${s}`,"warn"),"number"==typeof i&&i>=100?(this.player.log("Fatal DASH error","error"),this.player.handleError(new Error(`DASH Error: ${i} - ${s}`))):this.player.log("Non-fatal DASH error: "+(s||String(t)),"warn")}ensureLoaded(){if(!this.player.options.deferLoad)return;if(!this.dash)return;if(this._dashSourceLoaded)return;const e=this._pendingSrc||this.player._pendingSource||this.player.currentSource;if(e)try{this.dash.attachSource(e),this._dashSourceLoaded=!0}catch{}}play(){const e=window.scrollX,t=window.scrollY;if(this.player.options.deferLoad&&this.dash&&!this._dashSourceLoaded){const e=this._pendingSrc||this.player.currentSource;if(e)try{this.dash.attachSource(e),this._dashSourceLoaded=!0}catch{}}const i=this.media.play();window.scrollTo(e,t),void 0!==i&&i.catch(e=>{this.player.log("Play failed:",e,"warn")})}pause(){this.media.pause()}seek(e){this.media.currentTime=e}setVolume(e){this.media.volume=e}setMuted(e){this.media.muted=e}setPlaybackSpeed(e){this.media.playbackRate=e}switchQuality(e){this.dash&&(-1===e?"function"==typeof this.dash.setAutoSwitchQualityFor?this.dash.setAutoSwitchQualityFor("video",!0):this.dash.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:!0}}}}):("function"==typeof this.dash.setAutoSwitchQualityFor?this.dash.setAutoSwitchQualityFor("video",!1):this.dash.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:!1}}}}),"function"==typeof this.dash.setRepresentationForTypeByIndex?this.dash.setRepresentationForTypeByIndex("video",e):"function"==typeof this.dash.setQualityFor&&this.dash.setQualityFor("video",e,!0)))}getQualities(){if(!this.dash)return[];try{let e=null;if("function"==typeof this.dash.getRepresentationsByType&&(e=this.dash.getRepresentationsByType("video")),e&&e.length>0){const t={};return e.forEach(e=>{const i=Number(e.height)||0;t[i]=(t[i]||0)+1}),e.map((e,i)=>{const s=Number(e.height)||0,a=Number(e.bandwidth||e.bitrate)||0,n=a>0?Math.round(a/1e3):0;let r;return r=s>0&&(t[s]??0)>1&&n>0?`${s}p (${n} kbps)`:s>0?`${s}p`:n>0?`${n} kbps`:"Auto",{index:i,id:e.id,height:e.height,width:e.width,bitrate:a,name:r}})}const t=this.dash.getBitrateInfoListFor("video");if(!t||0===t.length)return[];const i={};return t.forEach(e=>{const t=Number(e.height)||0;i[t]=(i[t]||0)+1}),t.map((e,t)=>{const s=Number(e.height)||0,a=Number(e.bitrate)||0,n=a>0?Math.round(a/1e3):0;let r;return r=s>0&&(i[s]??0)>1&&n>0?`${s}p (${n} kbps)`:s>0?`${s}p`:n>0?`${n} kbps`:"Auto",{index:t,height:e.height,width:e.width,bitrate:e.bitrate,name:r}})}catch{return[]}}getCurrentQuality(){var e,t;if(!this.dash)return-1;try{if("function"==typeof this.dash.getRepresentationsByType){const i=this.dash.getRepresentationsByType("video"),s=null==(t=(e=this.dash).getCurrentRepresentationForType)?void 0:t.call(e,"video");if(s&&i){const e=i.findIndex(e=>e.id===s.id);if(e>=0)return e}}return this.dash.getQualityFor("video")}catch{return-1}}handlesOwnCaptions(){return this._dashTextIsTtml}activateTextTrackForLanguage(e){if(!this.dash||!this._dashTextTracks.length||!e)return!1;let t=this._dashTextTracks.findIndex(t=>{const i=t.lang||t.language||t.srclang||"";return!!i&&(i===e||i.startsWith(e)||e.startsWith(i))});if(t<0&&(t=this._dashTextTracks.findIndex(t=>(t.label||t.labels||"").toString().toLowerCase().includes(e.toLowerCase()))),t<0)return!1;this.player.log(`Activating DASH text track index ${t} for transcript language "${e}"`);try{this.dash.setTextTrack(t)}catch{}if(this.media.paused){const e=this.media.currentTime,t=this.media.muted;this.media.muted=!0;const i=this.media.play(),s=()=>{this.media&&!this.media.paused&&(this.media.pause(),this.media.muted=t,Math.abs(this.media.currentTime-e)>.5&&(this.media.currentTime=e))};i&&"function"==typeof i.then?i.then(()=>{this._setTimeout(s,250)}).catch(()=>{this.media.muted=t}):this._setTimeout(s,250)}return this._dashTextIsTtml||(this._lastKnownCueCount=0,this._startCueUpdatePolling()),!0}getTextTrackURLs(){var e,t;if(!this.dash||!this._manifestUrl)return[];try{const i=null==(t=(e=this.dash).getManifest)?void 0:t.call(e);if(!i)return[];const s=this._manifestUrl.substring(0,this._manifestUrl.lastIndexOf("/")+1),a=[],n=i.Period||i.period||i.periods||i,r=Array.isArray(n)?n:[n];for(const e of r){const t=e.AdaptationSet||e.adaptationSet||e.AdaptationSet_asArray||[],i=Array.isArray(t)?t:[t];for(const e of i){const t=String(e.contentType||e.ContentType||""),i=String(e.mimeType||e.MimeType||"");if("text"!==t&&!/text\/vtt|application\/ttml/i.test(i))continue;const n=String(e.lang||e.language||""),r=e.Representation||e.representation||e.Representation_asArray||[],o=Array.isArray(r)?r:[r];for(const e of o){const t=e.BaseURL||e.baseURL||e.BaseURL_asArray;let i;if(Array.isArray(t)){const e=t[0];i="string"==typeof e?e:null==e?void 0:e.__text}else i="string"==typeof t?t:null==t?void 0:t.__text;if(!i)continue;const r=i.startsWith("http")?i:new URL(i,s).href;a.push({lang:n,url:r});break}}}return a}catch{return[]}}supportsAutoQuality(){return!0}isAutoQuality(){var e,t,i,s,a;if(!this.dash)return!0;try{if("function"==typeof this.dash.getAutoSwitchQualityFor)return this.dash.getAutoSwitchQualityFor("video");const n=null==(t=(e=this.dash).getSettings)?void 0:t.call(e);return!1!==(null==(a=null==(s=null==(i=null==n?void 0:n.streaming)?void 0:i.abr)?void 0:s.autoSwitchBitrate)?void 0:a.video)}catch{return!0}}destroy(){this._pendingTimeouts.forEach(e=>clearTimeout(e)),this._pendingTimeouts=[],this._stopCueUpdatePolling(),this._lastKnownCueCount=0,this._listenerController.abort(),this._pendingReadyHandler&&(this.player.off("ready",this._pendingReadyHandler),this._pendingReadyHandler=null),this._captionEnabledHandler&&(this.player.off("captionsenabled",this._captionEnabledHandler),this._captionEnabledHandler=null),this._captionDisabledHandler&&(this.player.off("captionsdisabled",this._captionDisabledHandler),this._captionDisabledHandler=null),this._ttmlDiv&&this._ttmlDiv.parentNode&&(this._ttmlDiv.parentNode.removeChild(this._ttmlDiv),this._ttmlDiv=null);const e=this.media.textTracks;for(let t=0;t<e.length;t++){const i=e[t];!i||"subtitles"!==i.kind&&"captions"!==i.kind||(i._vidplyStale=!0,i.mode="disabled")}if(this.dash){try{this.dash.updateSettings({debug:{logLevel:0}}),this.dash.reset()}catch{}try{this.dash.destroy()}catch{}this.dash=null}this._dashTextTracks=[],this._dashTextIsTtml=!1,this._manifestUrl=null}}}}),lt={};a(lt,{SoundCloudRenderer:()=>nt,default:()=>rt});var dt=s({"src/renderers/SoundCloudRenderer.ts"(){Qe(),rt=nt=class{constructor(e){n(this,"player"),n(this,"media"),n(this,"widget"),n(this,"trackUrl"),n(this,"isReady"),n(this,"iframe"),n(this,"iframeId"),n(this,"_previousVolume"),n(this,"_initTimeoutId"),n(this,"_initController"),this.player=e,this.media=e.element,this.widget=null,this.trackUrl=null,this.isReady=!1,this.iframe=null,this.iframeId=null,this._previousVolume=100,this._initTimeoutId=null,this._initController=null}async init(){var e;if(this.trackUrl=this.player.currentSource||this.player.element.src||(null==(e=this.player.element.querySelector("source"))?void 0:e.src)||null,!this.trackUrl||!this.isValidSoundCloudUrl(this.trackUrl))throw new Error("Invalid SoundCloud URL");await this.loadSoundCloudAPI(),this.createIframe(),await this.initializeWidget()}isValidSoundCloudUrl(e){if("string"!=typeof e||!e)return!1;let t;try{t=new URL(e)}catch{return!1}return"https:"===t.protocol&&new Set(["soundcloud.com","www.soundcloud.com","m.soundcloud.com","api.soundcloud.com","api-v2.soundcloud.com"]).has(t.hostname.toLowerCase())}isPlaylist(){return this.trackUrl&&this.trackUrl.includes("/sets/")}getEmbedUrl(){const e=this.trackUrl;if(!e)throw new Error("SoundCloudRenderer.getEmbedUrl(): trackUrl is not set");return`https://w.soundcloud.com/player/?${new URLSearchParams({url:e,auto_play:this.player.options.autoplay?"true":"false",hide_related:"true",show_comments:"false",show_user:"true",show_reposts:"false",show_teaser:"false",visual:"false",color:"%23007bff"}).toString()}`}async loadSoundCloudAPI(){return void 0!==window.SC?Promise.resolve():Ke("https://w.soundcloud.com/player/api.js",{isReady:()=>void 0!==window.SC})}createIframe(){var e;this.player.element.style.display="none",this.player.element.removeAttribute("poster"),this.player.videoWrapper&&(this.player.videoWrapper.classList.remove("vidply-forced-poster"),this.player.videoWrapper.style.removeProperty("--vidply-poster-image")),this.iframeId=`soundcloud-player-${Math.random().toString(36).substr(2,9)}`,this.iframe=document.createElement("iframe"),this.iframe.id=this.iframeId,this.iframe.scrolling="no",this.iframe.frameBorder="no",this.iframe.allow="autoplay",this.iframe.src=this.getEmbedUrl(),this.iframe.style.width="100%",this.iframe.style.display="block",this.isPlaylist()?this.iframe.classList.add("vidply-soundcloud-iframe","vidply-soundcloud-playlist"):this.iframe.classList.add("vidply-soundcloud-iframe"),this.iframe.style.maxHeight="100%",null==(e=this.player.element.parentNode)||e.insertBefore(this.iframe,this.player.element)}async initializeWidget(){return new Promise((e,t)=>{const i=this.iframe;if(!i||void 0===window.SC)return void t(new Error("SoundCloud widget cannot initialize"));const s=window.SC;s?(this._initController=new AbortController,i.addEventListener("load",()=>{try{const t=s.Widget(i);this.widget=t,t.bind(s.Widget.Events.READY,()=>{this.isReady=!0,null!==this._initTimeoutId&&(clearTimeout(this._initTimeoutId),this._initTimeoutId=null),this.attachEvents(),this.player.container&&this.player.container.classList.add("vidply-external-controls"),t.getCurrentSound(e=>{e&&(this.player.state.duration=e.duration/1e3,this.player.emit("loadedmetadata"))}),e()}),t.bind(s.Widget.Events.ERROR,(...e)=>{const t=e[0];this.player.handleError(new Error(`SoundCloud error: ${(null==t?void 0:t.message)||"Unknown error"}`))})}catch(e){t(e)}},{signal:this._initController.signal}),this._initTimeoutId=setTimeout(()=>{this._initTimeoutId=null,this.isReady||t(new Error("SoundCloud widget initialization timeout"))},1e4)):t(new Error("SoundCloud widget cannot initialize"))})}attachEvents(){const e=this.widget,t=window.SC;if(!e||!t)return;const i=t.Widget.Events;e.bind(i.PLAY,()=>{this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.emit("play"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player)}),e.bind(i.PAUSE,()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player)}),e.bind(i.FINISH,()=>{this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&(this.seek(0),this.play())}),e.bind(i.PLAY_PROGRESS,(...e)=>{const t=e[0].currentPosition/1e3;this.player.state.currentTime=t,this.player.emit("timeupdate",t),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,t)}),e.bind(i.SEEK,(...e)=>{this.player.state.currentTime=e[0].currentPosition/1e3,this.player.emit("seeked")}),e.bind(i.LOAD_PROGRESS,(...e)=>{const t=e[0];this.player.state.duration&&void 0!==t.loadedProgress&&this.player.emit("progress",t.loadedProgress*this.player.state.duration)})}play(){if(this.isReady&&this.widget){const e=window.scrollX,t=window.scrollY;this.widget.play(),window.scrollTo(e,t)}}pause(){this.isReady&&this.widget&&this.widget.pause()}seek(e){this.isReady&&this.widget&&(this.widget.seekTo(1e3*e),this.player.state.currentTime=e)}setVolume(e){this.isReady&&this.widget&&(this.widget.setVolume(100*e),this.player.state.volume=e)}setMuted(e){const t=this.widget;this.isReady&&t&&(e?t.getVolume(e=>{this._previousVolume=e,t.setVolume(0)}):t.setVolume(this._previousVolume||100),this.player.state.muted=e)}setPlaybackSpeed(e){this.player.log("SoundCloud does not support playback speed control","warn")}getCurrentSound(){return new Promise(e=>{this.isReady&&this.widget?this.widget.getCurrentSound(t=>{e(t)}):e(null)})}destroy(){if(null!==this._initTimeoutId&&(clearTimeout(this._initTimeoutId),this._initTimeoutId=null),this._initController&&(this._initController.abort(),this._initController=null),this.widget&&window.SC){const e=window.SC.Widget.Events;try{this.widget.unbind(e.READY),this.widget.unbind(e.PLAY),this.widget.unbind(e.PAUSE),this.widget.unbind(e.FINISH),this.widget.unbind(e.PLAY_PROGRESS),this.widget.unbind(e.SEEK),this.widget.unbind(e.LOAD_PROGRESS),this.widget.unbind(e.ERROR)}catch{}}this.iframe&&this.iframe.parentNode&&this.iframe.parentNode.removeChild(this.iframe),this.player.element&&(this.player.element.style.display=""),this.widget=null,this.isReady=!1}}}}),ht=class{constructor(){n(this,"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 ct(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,d=e.muted;return s&&(e.muted=!0),new Promise(i=>{const h=()=>{try{let t=e.videoWidth||640,h=e.videoHeight||360;if(n&&t>n){const e=n/t;t=n,h=Math.round(h*e)}if(r&&h>r){const e=r/h;h=r,t=Math.round(t*e)}const c=document.createElement("canvas");c.width=t,c.height=h;const u=c.getContext("2d");if(!u)return void i(null);u.drawImage(e,0,0,t,h);const p=c.toDataURL("image/jpeg",a);s&&(e.currentTime=l,e.muted=d,o&&!e.paused&&e.play().catch(e=>{"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] preview play() rejected:",e)})),i(p)}catch(t){"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] frame capture failed:",t),s&&(e.currentTime=l,e.muted=d,o&&!e.paused&&e.play().catch(e=>{"undefined"!=typeof console&&console.debug&&console.debug("[VidPly] preview play() rejected:",e)})),i(null)}},c=()=>{e.removeEventListener("seeked",c),requestAnimationFrame(()=>{requestAnimationFrame(h)})};if(Math.abs(e.currentTime-t)<.1&&e.readyState>=2)h();else if(e.readyState>=1)e.addEventListener("seeked",c),e.currentTime=t;else{const i=()=>{e.removeEventListener("loadedmetadata",i),e.addEventListener("seeked",c),e.currentTime=t};e.addEventListener("loadedmetadata",i)}})}d(),d(),$(),F(),V(),I(),j();var ut={"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"},pt={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 gt(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 yt=new WeakMap;function mt(e){let t=yt.get(e);return t||(t={},yt.set(e,t)),t}var ft=class{constructor(e){n(this,"player"),n(this,"_overflowMenuItemRef",null),n(this,"controls"),n(this,"currentPreviewTime"),n(this,"element"),n(this,"hideTimeout"),n(this,"isDraggingProgress"),n(this,"isDraggingVolume"),n(this,"openMenu"),n(this,"openMenuButton"),n(this,"overflowResizeObserver",null),n(this,"previewSupported",!1),n(this,"previewThumbnailCache",new Map),n(this,"previewThumbnailTimeout",null),n(this,"previewUsingMainVideo",!1),n(this,"previewVideo",null),n(this,"previewVideoInitialized",!1),n(this,"previewVideoReady",!1),n(this,"rightButtons"),n(this,"overflowMenuButton",null),n(this,"_activeVolumeTrack",null),n(this,"_progressBarRect",null),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=q(),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(),d=i.left+i.width/2-l.left,h=i.top;let c=i.top-l.top-s.height-8,u=null;h<s.height+20&&r-i.bottom>h?(c=null,u=l.bottom-l.top-(i.bottom-l.top)+8,e.classList.add("vidply-menu-below")):e.classList.remove("vidply-menu-below");let p="auto",g="auto",y="translateX(0)";if(a)p="auto",g=0,y="translateX(0)";else{p=d-s.width/2;const e=i.left+i.width/2-s.width/2;e<10?(p=0,y="translateX(0)"):e+s.width>n-10?(p="auto",g=0,y="translateX(0)"):(p=d,y="translateX(-50%)")}null!==c?(e.style.top=`${c}px`,e.style.bottom="auto"):null!==u&&(e.style.top="auto",e.style.bottom=`${u}px`),"auto"!==p?(e.style.left=`${p}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=yt.get(this.openMenuButton);(null==e?void 0:e.blur)&&(this.openMenuButton.removeEventListener("blur",e.blur),delete e.blur),(null==e?void 0: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),mt(t).mousedown=n;const r=i=>{if(!a||s)return;if(this.openMenu!==e)return;const o=i.relatedTarget;requestAnimationFrame(()=>{setTimeout(()=>{var i;if(!a||this.openMenu!==e)return;const s=document.activeElement;if(e.contains(s))return;const l=this.player.signLanguageWrapper,d=null==(i=this.player.transcriptManager)?void 0:i.transcriptWindow;if(l&&l.contains(s)||d&&d.contains(s))return;const h=Array.from(this.element.querySelectorAll("button")),c=null!==s&&h.includes(s)&&s!==t,u=null!==o&&o instanceof Element&&h.includes(o)&&o!==t;if(c||u){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=yt.get(t);i&&(delete i.blur,delete i.mousedown)}},10)})};t.addEventListener("blur",r),mt(t).blur=r;const o=()=>{this.closeMenuAndReturnFocus(e,t)};let l=null,d=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),d&&document.removeEventListener("keydown",d))},d=i=>{"Escape"===i.key&&this.openMenu===e&&(i.preventDefault(),i.stopPropagation(),this.closeMenuAndReturnFocus(e,t,!0),l&&document.removeEventListener("click",l),d&&document.removeEventListener("keydown",d))};const s=this.player.lifecycleSignal;document.addEventListener("click",l,{signal:s}),document.addEventListener("keydown",d,{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",s=>{const a=i.indexOf(document.activeElement);switch(s.key){case"ArrowDown":{s.preventDefault(),s.stopPropagation();const e=i[(a+1)%i.length];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(U("nearest")));break}case"ArrowUp":{s.preventDefault(),s.stopPropagation();const e=i[(a-1+i.length)%i.length];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(U("nearest")));break}case"ArrowLeft":case"ArrowRight":s.preventDefault(),s.stopPropagation();break;case"Home":{s.preventDefault(),s.stopPropagation();const e=i[0];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(U("nearest")));break}case"End":{s.preventDefault(),s.stopPropagation();const e=i[i.length-1];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(U("nearest")));break}case"Enter":case" ":s.preventDefault(),s.stopPropagation(),document.activeElement&&i.includes(document.activeElement)&&(document.activeElement.click(),N(t,{delay:0}));break;case"Escape":s.preventDefault(),s.stopPropagation(),this.closeMenuAndReturnFocus(e,t,!0)}})}createElement(){this.element=e.createElement("div",{className:`${this.player.options.classPrefix}-controls`,attributes:{role:"region","aria-label":x.t("player.label")+" controls"}})}createControls(){var t,i,s,a,n,r,o,l,d,h,c,u,p,g,y;const m=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-time-wrapper`});this.player.options.progressBar&&(this.createProgressBar(),this.controls.progress&&m.appendChild(this.controls.progress)),(this.player.options.currentTime||this.player.options.duration)&&m.appendChild(this.createTimeDisplay()),this.element.appendChild(m);const f=e.createElement("div",{className:`${this.player.options.classPrefix}-controls-buttons`}),v=e.createElement("div",{className:`${this.player.options.classPrefix}-controls-left`});this.player.playlistManager&&v.appendChild(this.createPreviousButton()),this.player.options.playPauseButton&&v.appendChild(this.createPlayPauseButton()),v.appendChild(this.createRestartButton()),this.player.playlistManager&&v.appendChild(this.createNextButton()),this.player.playlistManager||v.appendChild(this.createRewindButton()),this.player.playlistManager||v.appendChild(this.createForwardButton()),this.player.options.volumeControl&&(this.isTouchDevice()?v.appendChild(this.createMuteButton()):v.appendChild(this.createVolumeControl())),this.rightButtons=e.createElement("div",{className:`${this.player.options.classPrefix}-controls-right`});const b=this.hasChapterTracks(),w=this.hasCaptionTracks(),S=this.hasQualityLevels(),M=this.hasAudioDescription();if(this.player.options.chaptersButton&&b){const e=this.createChaptersButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.captionsButton&&w){const e=this.createCaptionsButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.captionStyleButton&&w){const e=this.createCaptionStyleButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}const k=this.player.currentSource||(null==(i=null==(t=this.player.element)?void 0:t.getAttribute)?void 0:i.call(t,"src"))||(null==(s=this.player.element)?void 0:s.currentSrc)||(null==(a=this.player.element)?void 0:a.src)||(null==(l=null==(o=null==(r=null==(n=this.player.element)?void 0:n.querySelector)?void 0:r.call(n,"source"))?void 0:o.getAttribute)?void 0:l.call(o,"src"))||(null==(c=null==(h=null==(d=this.player.element)?void 0:d.querySelector)?void 0:h.call(d,"source"))?void 0:c.src)||"",T="string"==typeof k&&k.includes(".m3u8"),P="string"==typeof k&&k.includes(".mpd"),E="video"===(null==(p=null==(u=this.player.element)?void 0:u.tagName)?void 0:p.toLowerCase()),C=Boolean(this.player.options.hideSpeedForHls)&&T||Boolean(this.player.options.hideSpeedForHlsVideo)&&T&&E||Boolean(this.player.options.hideSpeedForDash)&&P||Boolean(this.player.options.hideSpeedForDashVideo)&&P&&E;if(this.player.options.speedButton&&!C){const e=this.createSpeedButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.audioDescriptionButton&&M){const e=this.createAudioDescriptionButton();e.dataset.overflowPriority="2",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(this.player.options.transcriptButton&&w){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 L=this.hasSignLanguage(),x=this.player.options.signLanguageDisplayMode||"both";if(!1!==this.player.options.signLanguageButton&&L){if(["pip","both"].includes(x)){const e=this.createSignLanguageButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}if(["main","both"].includes(x)){const e=this.createSignLanguageInMainViewButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(e)}}if(this.player.options.qualityButton&&S){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||(null==(y=null==(g=this.player.element)?void 0:g.dataset)?void 0:y.vidplyDownloadUrl);if(e){const t=this.createDownloadButton(e);t.dataset.overflowPriority="2",t.dataset.overflowPriorityMobile="3",this.rightButtons.appendChild(t)}}const D=this.player.options.pipButton&&(this.player.options.floating||"pictureInPictureEnabled"in document),A="audio"===this.player.element.tagName.toLowerCase();if(D&&(!this.player.options.floating||!A)){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 z="audio"===this.player.element.tagName.toLowerCase();if(this.player.options.fullscreenButton&&!z){const e=this.createFullscreenButton();e.dataset.overflowPriority="1",e.dataset.overflowPriorityMobile="1",this.rightButtons.appendChild(e)}f.appendChild(v),f.appendChild(this.rightButtons),this.element.appendChild(f),this.ensureButtonTooltips(f)}ensureButtonTooltips(t){t.querySelectorAll("button").forEach(t=>{if(t.querySelector(`.${this.player.options.classPrefix}-tooltip`))return;if(t.querySelector(`.${this.player.options.classPrefix}-button-text`))return;if("menuitem"===t.getAttribute("role")||t.classList.contains(`${this.player.options.classPrefix}-settings-item`)||t.classList.contains(`${this.player.options.classPrefix}-menu-item`)||t.classList.contains(`${this.player.options.classPrefix}-transcript-settings-item`)||t.classList.contains(`${this.player.options.classPrefix}-sign-language-settings-item`)||t.classList.contains(`${this.player.options.classPrefix}-popup-settings-item`))return;const i=t.getAttribute("aria-label");i&&e.attachTooltip(t,i,this.player.options.classPrefix)})}hasChapterTracks(){var e,t,i;const s=this.player.element.textTracks;for(let t=0;t<s.length;t++)if("chapters"===(null==(e=s[t])?void 0:e.kind))return!0;if(Array.from(this.player.element.querySelectorAll('track[kind="chapters"]')).length>0)return!0;const a=null==(i=null==(t=this.player.playlistManager)?void 0:t.getCurrentTrack)?void 0:i.call(t);return!(!(null==a?void 0:a.tracks)||!Array.isArray(a.tracks))&&a.tracks.some(e=>"chapters"===(null==e?void 0:e.kind))}hasCaptionTracks(){var e,t;const i=this.player.element.textTracks;for(let e=0;e<i.length;e++){const t=i[e];if(t&&("captions"===t.kind||"subtitles"===t.kind)&&!t._vidplyStale)return!0}if(Array.from(this.player.element.querySelectorAll("track")).some(e=>"captions"===e.getAttribute("kind")||"subtitles"===e.getAttribute("kind")))return!0;const s=null==(t=null==(e=this.player.playlistManager)?void 0:e.getCurrentTrack)?void 0:t.call(e);return!!((null==s?void 0:s.tracks)??[]).some(e=>"captions"===(null==e?void 0:e.kind)||"subtitles"===(null==e?void 0: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 t=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-container`,attributes:{role:"slider","aria-label":x.t("player.progress"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":"0",tabindex:"0"}});this.controls.buffered=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-buffered`}),this.controls.played=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-played`}),this.controls.progressHandle=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-handle`}),this.controls.progressTooltip=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-tooltip`}),this.controls.progressPreview=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-preview`,attributes:{"aria-hidden":"true"}}),this.controls.progressTooltip.appendChild(this.controls.progressPreview),this.controls.progressTooltipTime=e.createElement("div",{className:`${this.player.options.classPrefix}-progress-tooltip-time`}),this.controls.progressTooltip.appendChild(this.controls.progressTooltipTime),t.appendChild(this.controls.buffered),t.appendChild(this.controls.played),this.controls.played.appendChild(this.controls.progressHandle),t.appendChild(this.controls.progressTooltip),this.controls.progress=t,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(){var e,t;if(this.previewVideoInitialized)return;if(!(null==(t=null==(e=this.player)?void 0:e.state)?void 0:t.hasStartedPlayback))return;if(!1===this.player.options.thumbnailPreview)return this.previewSupported=!1,void(this.previewVideoInitialized=!0);const i=this.player.renderer,s=i&&i.media&&"VIDEO"===i.media.tagName;if(!s)return this.previewSupported=!1,void(this.previewVideoInitialized=!0);const a=!0===i.isStreaming||i.hls&&void 0!==i.hls.loadLevel||i.dash&&("function"==typeof i.dash.getQualityFor||"function"==typeof i.dash.getCurrentRepresentationForType||"function"==typeof i.dash.getRepresentationsByType||"function"==typeof i.dash.attachSource),n=s&&i.media===this.player.element&&!a&&"function"==typeof i.seek;if(a)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=n&&s,!this.previewSupported)return void(this.previewVideoInitialized=!0);const r=i.media||this.player.element;let o=null;if(r.src)o=r.src;else{const e=r.querySelector("source");e&&(o=e.src)}if(!o)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",r.crossOrigin&&(this.previewVideo.crossOrigin=r.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=o,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 ct(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 e=this.controls.progress;if(!e)return;const t=t=>{const i=e.getBoundingClientRect(),s=i.width>0?Math.max(0,Math.min(1,(t-i.left)/i.width)):0;return{percent:s,time:s*(this.player.state.duration||0)}};e.addEventListener("mousedown",i=>{this.isDraggingProgress=!0,this._progressBarRect=e.getBoundingClientRect();const{time:s}=t(i.clientX);this.player.seek(s)}),e.addEventListener("mousemove",i=>{var s,a;if(!this.isDraggingProgress){const{time:n}=t(i.clientX),r=e.getBoundingClientRect(),o=i.clientX-r.left,l=this.controls.progressTooltip,d=this.controls.progressTooltipTime;if(l&&d&&(d.textContent=_.formatTime(n),l.style.left=`${o}px`,l.style.display="block"),!(null==(a=null==(s=this.player)?void 0:s.state)?void 0:a.hasStartedPlayback))return void(this.controls.progressPreview&&(this.controls.progressPreview.style.display="none"));this.ensurePreviewVideoInitialized(),this.previewSupported?this.updatePreviewThumbnail(n):this.controls.progressPreview&&(this.controls.progressPreview.style.display="none")}}),e.addEventListener("mouseleave",()=>{this.controls.progressTooltip&&(this.controls.progressTooltip.style.display="none"),this.previewThumbnailTimeout&&clearTimeout(this.previewThumbnailTimeout)}),e.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))}}),e.addEventListener("touchstart",e=>{this.isDraggingProgress=!0;const i=e.touches[0];if(!i)return;const{time:s}=t(i.clientX);this.player.seek(s)}),e.addEventListener("touchmove",e=>{if(this.isDraggingProgress){e.preventDefault();const i=e.touches[0];if(!i)return;const{time:s}=t(i.clientX);this.player.seek(s)}}),e.addEventListener("touchend",()=>{this.isDraggingProgress=!1})}createPlayPauseButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-play-pause`,attributes:{type:"button","aria-label":x.t("player.play")}});return t.appendChild(O("play")),t.addEventListener("click",()=>{this.player.toggle()}),this.controls.playPause=t,t}createRestartButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-restart`,attributes:{type:"button","aria-label":x.t("player.restart")}});return t.appendChild(O("restart")),t.addEventListener("click",()=>{this.player.seek(0),this.player.play()}),t}createPreviousButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-previous`,attributes:{type:"button","aria-label":x.t("player.previous")}});t.appendChild(O("skipPrevious")),t.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.previous()});const i=()=>{this.player.playlistManager&&(t.disabled=!this.player.playlistManager.hasPrevious()&&!this.player.playlistManager.options.loop)};return this.player.on("playlisttrackchange",i),i(),this.controls.previous=t,t}createNextButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-next`,attributes:{type:"button","aria-label":x.t("player.next")}});t.appendChild(O("skipNext")),t.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.next()});const i=()=>{this.player.playlistManager&&(t.disabled=!this.player.playlistManager.hasNext()&&!this.player.playlistManager.options.loop)};return this.player.on("playlisttrackchange",i),i(),this.controls.next=t,t}createPlaylistToggleButton(){const t=this.player.playlistManager?`${this.player.playlistManager.uniqueId}-panel`:"vidply-playlist-panel",i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-playlist-toggle`,attributes:{type:"button","aria-label":x.t("player.playlist"),"aria-expanded":"false","aria-pressed":"false","aria-controls":t}});return i.appendChild(O("playlist")),i.addEventListener("click",()=>{this.player.playlistManager&&this.player.playlistManager.togglePanel()}),this.controls.playlistToggle=i,i}createRewindButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-rewind`,attributes:{type:"button","aria-label":x.t("player.rewindSeconds",{seconds:15})}});return t.appendChild(O("rewind")),t.addEventListener("click",()=>{this.player.seekBackward(15)}),t}createForwardButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-forward`,attributes:{type:"button","aria-label":x.t("player.forwardSeconds",{seconds:15})}});return t.appendChild(O("forward")),t.addEventListener("click",()=>{this.player.seekForward(15)}),t}createMuteButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":x.t("player.mute")}});return t.appendChild(O("volumeHigh")),t.addEventListener("click",()=>{this.player.toggleMute()}),this.controls.mute=t,t}createVolumeControl(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-mute`,attributes:{type:"button","aria-label":x.t("player.volume"),"aria-expanded":"false"}});return t.appendChild(O("volumeHigh")),t.addEventListener("contextmenu",e=>{e.preventDefault(),this.player.toggleMute()}),t.addEventListener("click",()=>{this.showVolumeSlider(t)}),this.controls.mute=t,t}showVolumeSlider(t){const i=document.querySelector(`.${this.player.options.classPrefix}-volume-menu`);if(i)return i.remove(),void t.setAttribute("aria-expanded","false");const s=e.createElement("div",{className:`${this.player.options.classPrefix}-volume-menu ${this.player.options.classPrefix}-menu`}),a=Math.round(100*this.player.state.volume),n=e.createElement("div",{className:`${this.player.options.classPrefix}-volume-slider`,attributes:{role:"slider","aria-label":x.t("player.volume"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":String(a),"aria-valuetext":this.player.state.muted?x.t("player.muted"):x.t("player.volumePercent",{percent:a}),tabindex:"0"}}),r=e.createElement("div",{className:`${this.player.options.classPrefix}-volume-track`}),o=e.createElement("div",{className:`${this.player.options.classPrefix}-volume-fill`});o.style.height=100*this.player.state.volume+"%";const l=e.createElement("div",{className:`${this.player.options.classPrefix}-volume-handle`});r.appendChild(o),o.appendChild(l),n.appendChild(r),s.appendChild(n);const d=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,d(e.clientY)}),n.addEventListener("touchstart",e=>{e.stopPropagation(),e.preventDefault(),this.isDraggingVolume=!0,this._activeVolumeTrack=r;const t=e.touches[0];t&&d(t.clientY)},{passive:!1}),n.addEventListener("touchmove",e=>{if(this.isDraggingVolume){e.preventDefault();const t=e.touches[0];if(!t)return;d(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",e=>{"ArrowUp"===e.key?(e.preventDefault(),this.player.setVolume(Math.min(1,this.player.state.volume+.1))):"ArrowDown"===e.key?(e.preventDefault(),this.player.setVolume(Math.max(0,this.player.state.volume-.1))):"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),this.closeMenuAndReturnFocus(s,t,!0))}),s.addEventListener("click",e=>{e.stopPropagation()}),s.addEventListener("touchstart",e=>{e.stopPropagation()}),s.addEventListener("touchmove",e=>{e.stopPropagation()}),s.addEventListener("touchend",e=>{e.stopPropagation()}),s.style.visibility="hidden",s.style.display="block",this.insertMenuIntoDOM(s,t),this.positionMenu(s,t,!0),requestAnimationFrame(()=>{s.style.visibility="visible"}),this.controls.volumeSlider=n,this.controls.volumeFill=o,N(n,{delay:50}),this.attachMenuCloseHandler(s,t,!0)}createTimeDisplay(){const t=e.createElement("div",{className:`${this.player.options.classPrefix}-time`,attributes:{role:"group","aria-label":x.t("time.display")}});this.controls.currentTimeDisplay=e.createElement("span",{className:`${this.player.options.classPrefix}-current-time`});const i=e.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}}),s=e.createElement("span",{className:"vidply-sr-only",textContent:x.t("time.seconds",{count:0})});this.controls.currentTimeDisplay.appendChild(i),this.controls.currentTimeDisplay.appendChild(s),this.controls.currentTimeVisual=i,this.controls.currentTimeAccessible=s;const a=e.createElement("span",{textContent:" / ",attributes:{"aria-hidden":"true"}});this.controls.durationDisplay=e.createElement("span",{className:`${this.player.options.classPrefix}-duration`});const n=e.createElement("span",{textContent:"00:00",attributes:{"aria-hidden":"true"}}),r=e.createElement("span",{className:"vidply-sr-only",textContent:x.t("time.durationPrefix")+x.t("time.seconds",{count:0})});return this.controls.durationDisplay.appendChild(n),this.controls.durationDisplay.appendChild(r),this.controls.durationVisual=n,this.controls.durationAccessible=r,t.appendChild(this.controls.currentTimeDisplay),t.appendChild(a),t.appendChild(this.controls.durationDisplay),t}createChaptersButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-chapters`,attributes:{type:"button","aria-label":x.t("player.chapters"),"aria-expanded":"false"}});return t.appendChild(O("chapters")),t.addEventListener("click",()=>{this.showChaptersMenu(t)}),this.controls.chapters=t,t}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=e.createElement("div",{className:`${this.player.options.classPrefix}-chapters-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":x.t("player.chapters")}}),a=Array.from(this.player.element.textTracks).filter(e=>"chapters"===e.kind);if(0===a.length){const t=e.createElement("div",{className:`${this.player.options.classPrefix}-menu-item ${this.player.options.classPrefix}-menu-item-disabled`,textContent:x.t("player.noChapters"),attributes:{role:"menuitem","aria-disabled":"true",tabindex:"-1"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(t)}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=e.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),o=e.createElement("span",{className:`${this.player.options.classPrefix}-chapter-time`,textContent:_.formatTime(n.startTime),attributes:{"aria-label":_.formatDuration(n.startTime)}}),l=e.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 a=e.createElement("div",{className:`${this.player.options.classPrefix}-menu-item ${this.player.options.classPrefix}-menu-item-disabled`,textContent:x.t("player.loadingChapters"),attributes:{role:"menuitem","aria-disabled":"true",tabindex:"-1"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(a),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 t=x.t("player.quality"),i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-quality`,attributes:{type:"button","aria-label":t,"aria-expanded":"false"}});i.appendChild(O("hd")),e.attachTooltip(i,t,this.player.options.classPrefix);const s=e.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(t){const i=document.querySelector(`.${this.player.options.classPrefix}-quality-menu`);if(i)return i.remove(),t.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=e.createElement("div",{className:`${this.player.options.classPrefix}-quality-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":x.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 t=e.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:x.t("player.autoQuality"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(t)}else{let r=null;if(n){const i=e.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:x.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(O("check")),r=i),i.addEventListener("click",()=>{var e;(null==(e=this.player.renderer)?void 0:e.switchQuality)&&this.player.renderer.switchQuality(-1),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(i)}i.forEach(i=>{const n=e.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(O("check")),r=n),n.addEventListener("click",()=>{var e;(null==(e=this.player.renderer)?void 0:e.switchQuality)&&void 0!==i.index&&this.player.renderer.switchQuality(i.index),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(n)}),this.attachMenuKeyboardNavigation(s,t),setTimeout(()=>{const e=r||s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&e.focus({preventScroll:!0})},0)}}else{const t=e.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:x.t("player.noQuality"),style:{opacity:"0.5",cursor:"default"}});s.appendChild(t)}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)}createCaptionStyleButton(){const t=x.t("player.captionStyling"),i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-caption-style`,attributes:{type:"button","aria-label":t,"aria-expanded":"false"}}),s=e.createElement("span",{textContent:"Aa",style:{fontSize:"14px",fontWeight:"bold"}});return i.appendChild(s),e.attachTooltip(i,t,this.player.options.classPrefix),i.addEventListener("click",()=>{this.showCaptionStyleMenu(i)}),this.controls.captionStyle=i,i}showCaptionStyleMenu(e){Promise.resolve().then(()=>(te(),Q)).then(({showCaptionStyleMenu:t})=>t(this,e)).catch(e=>this.player.log("Failed to load caption style menu:",e,"error"))}createSpeedButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-speed`,attributes:{type:"button","aria-label":x.t("player.speed"),"aria-expanded":"false"}});t.appendChild(O("speed"));const i=e.createElement("span",{className:`${this.player.options.classPrefix}-speed-text`,textContent:"1x"});return t.appendChild(i),t.addEventListener("click",()=>{this.showSpeedMenu(t)}),this.controls.speed=t,this.controls.speedText=i,t}formatSpeedLabel(e){return 1===e?x.t("speeds.normal"):`${e.toLocaleString(x.getLanguage(),{minimumFractionDigits:0,maximumFractionDigits:2})}×`}showSpeedMenu(t){const i=document.querySelector(`.${this.player.options.classPrefix}-speed-menu`);if(i)return i.remove(),t.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=e.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=e.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(O("check")),a=n),n.addEventListener("click",()=>{this.player.setPlaybackSpeed(i),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(n)}),s.style.visibility="hidden",s.style.display="block",this.insertMenuIntoDOM(s,t),this.positionMenu(s,t,!0),requestAnimationFrame(()=>{s.style.visibility="visible"}),this.attachMenuKeyboardNavigation(s,t),this.attachMenuCloseHandler(s,t),setTimeout(()=>{const e=a||s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&e.focus({preventScroll:!0})},0)}createCaptionsButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-captions-button`,attributes:{type:"button","aria-label":x.t("player.captions"),"aria-expanded":"false"}});return t.appendChild(O("captionsOff")),t.addEventListener("click",()=>{this.showCaptionsMenu(t)}),this.controls.captions=t,t}showCaptionsMenu(t){const i=document.querySelector(`.${this.player.options.classPrefix}-captions-menu`);if(i)return i.remove(),t.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=e.createElement("div",{className:`${this.player.options.classPrefix}-captions-menu ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":x.t("captions.select")}});if(!this.player.captionManager||0===this.player.captionManager.tracks.length){const i=e.createElement("div",{className:`${this.player.options.classPrefix}-menu-item`,textContent:x.t("player.noCaptions"),attributes:{role:"menuitem"},style:{opacity:"0.5",cursor:"default"}});return s.appendChild(i),this.insertMenuIntoDOM(s,t),void this.attachMenuCloseHandler(s,t)}let a=null;const n=e.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,textContent:x.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(O("check")),a=n),n.addEventListener("click",()=>{this.player.disableCaptions(),this.updateCaptionsButton(),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(n),this.player.captionManager.getAvailableTracks().forEach(i=>{const n=e.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(O("check")),a=n),n.addEventListener("click",()=>{var e;null==(e=this.player.captionManager)||e.switchTrack(i.index),this.updateCaptionsButton(),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(n)}),this.insertMenuIntoDOM(s,t),this.attachMenuKeyboardNavigation(s,t),this.attachMenuCloseHandler(s,t),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?O("captions").innerHTML:O("captionsOff").innerHTML)}createTranscriptButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-transcript`,attributes:{type:"button","aria-label":x.t("player.transcript"),"aria-expanded":"false"}});return t.appendChild(O("transcript")),t.addEventListener("click",async()=>{await this.player.toggleTranscript(),this.updateTranscriptButton()}),this.controls.transcript=t,t}updateTranscriptButton(){this.controls.transcript&&this.controls.transcript.setAttribute("aria-expanded",this.player.transcriptManager&&this.player.transcriptManager.isVisible?"true":"false")}createHelpButton(){const t=x.t("help.button"),i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-help`,attributes:{type:"button","aria-label":t,"aria-haspopup":"dialog"}});return i.appendChild(O("help")),e.attachTooltip(i,t,this.player.options.classPrefix),i.addEventListener("click",()=>{this.player.toggleKeyboardHelp()}),this.controls.help=i,i}createAudioDescriptionButton(){const t=x.t("player.audioDescription"),i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-audio-description`,attributes:{type:"button","aria-label":t,role:"switch","aria-checked":"false"}});return i.appendChild(O("audioDescription")),e.attachTooltip(i,t,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"),t=this.player.state.audioDescriptionEnabled;e&&(e.innerHTML=t?O("audioDescriptionOn").innerHTML:O("audioDescription").innerHTML),this.controls.audioDescription.setAttribute("aria-checked",t?"true":"false")}createSignLanguageButton(){const t=x.t("player.signLanguage"),i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-sign-language`,attributes:{type:"button","aria-label":t,"aria-expanded":"false"}});return i.appendChild(O("signLanguagePip")),e.attachTooltip(i,t,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"),t=this.player.state.signLanguageEnabled;e&&(e.innerHTML=t?O("signLanguagePipOn").innerHTML:O("signLanguagePip").innerHTML),this.controls.signLanguage.setAttribute("aria-expanded",t?"true":"false"),this.controls.signLanguage.setAttribute("aria-label",x.t(t?"signLanguage.hide":"signLanguage.show"))}createSignLanguageInMainViewButton(){const t=x.t("signLanguage.showInMainView"),i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-sign-language-main-view`,attributes:{type:"button","aria-label":t,"aria-pressed":"false"}});return i.appendChild(O("signLanguage")),e.attachTooltip(i,t,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 t=this.player.state.signLanguageInMainView,i=x.t(t?"signLanguage.hideInMainView":"signLanguage.showInMainView"),s=t?"signLanguageOn":"signLanguage",a=e.querySelector(".vidply-icon");a&&(a.innerHTML=O(s).innerHTML),e.setAttribute("aria-pressed",String(t)),e.setAttribute("aria-label",i);const n=e.querySelector(`.${this.player.options.classPrefix}-tooltip`);n&&(n.textContent=i)}updateAccessibilityButtons(){var e;const t=this.hasAudioDescription(),i=this.hasSignLanguage();if(t){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 s=i&&!1!==this.player.options.signLanguageButton,a=this.player.options.classPrefix,n=this.player.options.signLanguageDisplayMode||"both",r=["pip","both"].includes(n),o=["main","both"].includes(n);if(s){const t=this.rightButtons.querySelector(`.${a}-quality`),i=this.rightButtons.querySelector(`.${a}-fullscreen`),s=t||i||null;let n=!1;if(r&&!this.controls.signLanguage){const e=this.createSignLanguageButton();e.dataset.overflowPriority="3",e.dataset.overflowPriorityMobile="3",s?this.rightButtons.insertBefore(e,s):this.rightButtons.appendChild(e),n=!0}if(o&&!this.controls.signLanguageMainView){const t=this.createSignLanguageInMainViewButton();t.dataset.overflowPriority="3",t.dataset.overflowPriorityMobile="3";const i=null==(e=this.controls.signLanguage)?void 0:e.nextSibling;i?this.rightButtons.insertBefore(t,i):s?this.rightButtons.insertBefore(t,s):this.rightButtons.appendChild(t),n=!0}n&&this.checkOverflow(),this.controls.signLanguage&&(this.controls.signLanguage.style.display=r?"":"none"),this.controls.signLanguageMainView&&(this.controls.signLanguageMainView.style.display=o?"":"none")}else this.controls.signLanguage&&(this.controls.signLanguage.style.display="none"),this.controls.signLanguageMainView&&(this.controls.signLanguageMainView.style.display="none")}createSettingsButton(){const t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-settings`,attributes:{type:"button","aria-label":x.t("player.settings")}});return t.appendChild(O("settings")),t.addEventListener("click",()=>{this.player.showSettings()}),t}createPipButton(){const t=!0===this.player.options.floating,i=this.player.options.classPrefix,s=e.createElement("button",{className:t?`${i}-button ${i}-pip ${i}-pip-floating`:`${i}-button ${i}-pip`,attributes:{type:"button","aria-label":x.t(t?"player.floatingPlayer":"player.pip"),"aria-pressed":"false"}});return s.appendChild(O("pip")),s.addEventListener("click",()=>{t?this.player.floatingPlayerManager&&this.player.floatingPlayerManager.togglePinned(s):this.player.togglePiP()}),t&&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(t){var i;const s=(null==(i=this.player.element)?void 0:i.dataset)||{},a=this.resolveDownloadFormat(t),n=this.resolveInitialDownloadSize(),r=x.t("player.download"),o=gt({baseLabel:r,format:a,sizeBytes:n,locale:x.getLanguage(),withFormatSizeTemplate:x.t("player.downloadWithFormatSize"),withFormatTemplate:x.t("player.downloadWithFormat"),withSizeTemplate:x.t("player.downloadWithSize")}),l=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-download`,attributes:{type:"button","aria-label":o}});return a&&(l.dataset.vidplyDownloadFormat=a),null!=n&&(l.dataset.vidplyDownloadSize=String(n)),l.appendChild(O("download")),l.addEventListener("click",()=>{var e;const i=this.player.options.downloadUrl||s.vidplyDownloadUrl||t;if(!i)return;const a=document.createElement("a");a.href=i,a.download=(null==(e=i.split("/").pop())?void 0:e.split("?")[0])||"download",a.rel="noopener",a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a)}),!1!==this.player.options.downloadFetchSize&&null==n&&(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}})(t).then(e=>{if(null==e)return;const t=gt({baseLabel:r,format:a,sizeBytes:e,locale:x.getLanguage(),withFormatSizeTemplate:x.t("player.downloadWithFormatSize"),withFormatTemplate:x.t("player.downloadWithFormat"),withSizeTemplate:x.t("player.downloadWithSize")});l.dataset.vidplyDownloadSize=String(e),this.updateDownloadButtonLabel(l,t)}),l}resolveDownloadFormat(e){var t,i;const s=(null==(t=this.player.element)?void 0:t.dataset)||{},a=this.player.options.downloadFormat||s.vidplyDownloadFormat||null;if(a)return a;const n=(null==(i=this.player.element)?void 0:i.querySelectorAll)?Array.from(this.player.element.querySelectorAll("source")):[],r=n.find(t=>(t.getAttribute("src")||t.src||"")===e)||n[0];if(r){const e=(e=>{if(!e)return null;const t=(e.split(";")[0]??"").trim().toLowerCase();return ut[t]||null})(r.getAttribute("type"));if(e)return e}return(e=>{var t;if(!e)return null;try{const i=((null==(t=e.split("?")[0])?void 0:t.split("#")[0])??"").split("/").pop()||"",s=i.lastIndexOf(".");if(s<0||s===i.length-1)return null;const a=i.slice(s+1).toLowerCase();return pt[a]||null}catch{return null}})(e)}resolveInitialDownloadSize(){var e;const t=(null==(e=this.player.element)?void 0:e.dataset)||{},i=this.player.options.downloadFileSize;if("number"==typeof i&&Number.isFinite(i)&&i>0)return i;const s=t.vidplyDownloadSize;if(s){const e=Number(s);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 t=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-fullscreen`,attributes:{type:"button","aria-label":x.t("player.fullscreen")}});return t.appendChild(O("fullscreen")),t.addEventListener("click",()=>{this.player.toggleFullscreen()}),this.controls.fullscreen=t,t}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 t=this.controls.playPause.querySelector(".vidply-icon"),i=this.player.state.playing;t&&(t.innerHTML=i?O("pause").innerHTML:O("play").innerHTML);const s=x.t(i?"player.pause":"player.play");this.controls.playPause.setAttribute("aria-label",s),e.attachTooltip(this.controls.playPause,s,this.player.options.classPrefix)}updateProgress(){if(!this.controls.played)return;const e=this.player.state.duration||0,t=e>0?Math.min(100,Math.max(0,(this.player.state.currentTime||0)/e*100)):0;if(this.controls.played.style.width=`${t}%`,this.controls.progress){this.controls.progress.setAttribute("aria-valuenow",String(Math.round(t)));const e=_.formatDuration(this.player.state.currentTime),i=_.formatDuration(this.player.state.duration);this.controls.progress.setAttribute("aria-valuetext",`${Math.round(t)}%, ${e} ${x.t("time.of")} ${i}`)}if(this.controls.currentTimeVisual){const e=this.player.state.currentTime;this.controls.currentTimeVisual.textContent=_.formatTime(e),this.controls.currentTimeAccessible&&(this.controls.currentTimeAccessible.textContent=_.formatDuration(e))}}updateDuration(){if(this.controls.durationVisual){const e=this.player.state.duration;this.controls.durationVisual.textContent=_.formatTime(e),this.controls.durationAccessible&&(this.controls.durationAccessible.textContent=x.t("time.durationPrefix")+_.formatDuration(e))}}updateVolumeDisplay(){const t=100*this.player.state.volume;if(this.controls.volumeFill&&(this.controls.volumeFill.style.height=`${t}%`),this.controls.volumeSlider){const e=Math.round(t);this.controls.volumeSlider.setAttribute("aria-valuenow",String(e)),this.controls.volumeSlider.setAttribute("aria-valuetext",this.player.state.muted?x.t("player.muted"):x.t("player.volumePercent",{percent:e}))}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=O(s).innerHTML;const a=this.player.state.muted?0:Math.round(t),n=this.isTouchDevice()?x.t(this.player.state.muted?"player.unmute":"player.mute"):`${x.t("player.volume")} ${a}%`;this.controls.mute.setAttribute("aria-label",n),e.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"),t=this.player.state.fullscreen;e&&(e.innerHTML=t?O("fullscreenExit").innerHTML:O("fullscreen").innerHTML),this.controls.fullscreen.setAttribute("aria-label",x.t(t?"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(){var e;const t=this.player.element.textTracks;for(let e=0;e<t.length;e++){const i=t[e];i&&(i.mode="disabled")}const i=null==(e=this.player.container)?void 0:e.querySelector(`.${this.player.options.classPrefix}-captions`);i&&(i.textContent="",i.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 t=x.t("player.moreOptions"),i=e.createElement("button",{className:`${this.player.options.classPrefix}-button ${this.player.options.classPrefix}-overflow-menu`,attributes:{type:"button","aria-label":t,"aria-expanded":"false"}});return i.appendChild(O("moreVertical")),e.attachTooltip(i,t,this.player.options.classPrefix),i.addEventListener("click",()=>{this.showOverflowMenu(i)}),this.controls.overflowMenu=i,i}showOverflowMenu(t){const i=document.querySelector(`.${this.player.options.classPrefix}-overflow-menu-list`);if(i)return i.remove(),t.setAttribute("aria-expanded","false"),void(this.openMenu===i&&(this.openMenu=null,this.openMenuButton=null));const s=e.createElement("div",{className:`${this.player.options.classPrefix}-overflow-menu-list ${this.player.options.classPrefix}-menu`,attributes:{role:"menu","aria-label":x.t("player.moreOptions")}}),a=Array.from(this.rightButtons.querySelectorAll('button[data-in-overflow="true"]'));if(0===a.length){const t=e.createElement("div",{className:`${this.player.options.classPrefix}-menu-item ${this.player.options.classPrefix}-menu-item-disabled`,textContent:x.t("player.noMoreOptions"),attributes:{role:"menuitem","aria-disabled":"true",tabindex:"-1"},style:{opacity:"0.5",cursor:"default"}});s.appendChild(t)}else a.forEach(i=>{const a=e.createElement("button",{className:`${this.player.options.classPrefix}-menu-item`,attributes:{type:"button",role:"menuitem",tabindex:"-1"}}),n=i.getAttribute("aria-label")||i.getAttribute("title")||"",r=i.querySelector(".vidply-icon");if(r){const e=r.cloneNode(!0);a.appendChild(e)}else{const e=i.querySelector("span");if(e&&e.textContent&&e.textContent.length<=3){const t=e.cloneNode(!0);t.classList.add("vidply-icon"),a.appendChild(t)}}const o=e.createElement("span",{textContent:n});a.appendChild(o),a.addEventListener("click",()=>{this._overflowMenuItemRef=a;const e=i.style.display;i.style.display="",i.style.visibility="hidden",i.click(),setTimeout(()=>{i.style.display=e,i.style.visibility="",this._overflowMenuItemRef=null},100),this.closeMenuAndReturnFocus(s,t)}),s.appendChild(a)}),this.attachMenuKeyboardNavigation(s,t),setTimeout(()=>{const e=s.querySelector(`.${this.player.options.classPrefix}-menu-item`);e&&"BUTTON"===e.tagName&&e.focus({preventScroll:!0})},0);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)}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 d=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 h=window.innerWidth<768,c=l>o||h||s&&!e;if(this.player.options.debug&&console.log("Overflow detection:",{containerWidth:r,availableWidth:o,totalWidth:l,needsOverflow:c,isSmallScreen:h,reason:h?"mobile screen":l>o?"not enough space":"enough space",buttonCount:a.length}),c){const e=h?"overflowPriorityMobile":"overflowPriority";this.player.options.debug&&console.log(`Using ${h?"mobile":"desktop"} priorities (width: ${window.innerWidth}px)`);const t=d.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?(h?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}, ${h?"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(){var e;const t=this.player.renderer;if(!t||!t.media||"VIDEO"!==t.media.tagName)return;if(this.previewSupported||this.previewVideo||this.initPreviewThumbnail(),!this.previewSupported||!this.previewVideo)return;const i=t.media,s=i.src||(null==(e=i.querySelector("source"))?void 0:e.src);s&&this.previewVideo.src!==s?(this.previewThumbnailCache.clear(),this.previewVideoReady=!1,this.previewVideo.src=s,i.crossOrigin&&(this.previewVideo.crossOrigin=i.crossOrigin),this.previewVideo.addEventListener("loadedmetadata",()=>{this.previewVideoReady=!0},{once:!0})):s&&!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)}};ue(),V(),j();var vt=class{constructor(e){n(this,"player"),n(this,"shortcuts"),n(this,"announcer",null),n(this,"_announceReady",!1),n(this,"_prevMuted"),n(this,"_stateAnnouncers",[]),n(this,"_announceVolume"),this.player=e,this.shortcuts=e.options.keyboardShortcuts,this._prevMuted=e.state.muted,this._announceVolume=W(()=>{const e=Math.round(100*this.player.state.volume);this.announce(x.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(x.t("player.playing"))),t("pause",()=>this.announce(x.t("player.paused"))),t("captionsenabled",()=>this.announce(x.t("player.captionsOn"))),t("captionsdisabled",()=>this.announce(x.t("player.captionsOff"))),t("fullscreenchange",()=>{this.announce(x.t(this.player.state.fullscreen?"player.fullscreen":"player.exitFullscreen"))}),t("ratechange",()=>{this.announce(x.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(x.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){var t,i;const s=e.target;if("INPUT"===s.tagName||"TEXTAREA"===s.tagName||"SELECT"===s.tagName)return;const a=document.activeElement;if(a){if(a.closest('.vidply-menu, [role="menu"]'))return;if(a.closest(".vidply-playlist-item-button"))return;if(a.closest(".vidply-sign-language-wrapper")){const e=null==(t=this.player.signLanguageManager)?void 0:t.draggable;if((null==e?void 0:e.keyboardDragMode)||(null==e?void 0:e.keyboardResizeMode))return}if(a.closest(".vidply-transcript-window")){const e=null==(i=this.player.transcriptManager)?void 0:i.draggableResizable;if((null==e?void 0:e.keyboardDragMode)||(null==e?void 0:e.keyboardResizeMode))return}}const n=e.key;let r=!1;if("Escape"===n&&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(n)&&(r=this.executeAction(t,e),r)){e.preventDefault(),e.stopPropagation();break}!r&&this.player.options.debug&&console.log("[VidPly] Unhandled key:",e.key,"code:",e.code,"shiftKey:",e.shiftKey)}executeAction(e,t){var i;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=null==(i=this.player.controlBar)?void 0:i.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=x.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=x.t("player.volumePercent",{percent:e});break}case"mute":t=x.t(this.player.state.muted?"player.muted":"player.unmuted");break;case"fullscreen":t=x.t(this.player.state.fullscreen?"player.fullscreen":"player.exitFullscreen");break;case"captions":t=x.t(this.player.state.captionsEnabled?"player.captionsOn":"player.captionsOff");break;case"speed-up":case"speed-down":t=x.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}},bt=null,wt=class{constructor(e){n(this,"player"),n(this,"supported"),n(this,"handlers",{}),n(this,"boundActions",[]),n(this,"lastPositionUpdate",0),this.player=e,this.supported="undefined"!=typeof navigator&&"mediaSession"in navigator,this.supported&&(this.attachEvents(),null===bt&&this.claimSession())}isActive(){return bt===this}claimSession(){this.supported&&(bt=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{}bt=null}this.boundActions=[]}}};function St(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}me(),F(),V(),oe(),j();var Mt=new WeakMap;function kt(e,t,i,s){const a=Mt.get(e);if(a&&(a.observer.unobserve(e),Mt.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),Mt.delete(e.target),s(e.target,t))})},{rootMargin:i,threshold:0});n.observe(e),Mt.set(e,{observer:n,options:t})}var Tt=class{constructor(e){n(this,"player"),n(this,"originalScrollX"),n(this,"originalScrollY"),n(this,"originalBodyOverflow"),n(this,"originalBodyPosition"),n(this,"originalBodyWidth"),n(this,"originalBodyHeight"),n(this,"originalHtmlOverflow"),n(this,"originalBodyBackground"),n(this,"originalHtmlBackground"),n(this,"originalViewport"),n(this,"inertElements",[]),this.player=e}enable(){var e;const{player:t}=this;t.state.fullscreen=!0,t.container.classList.add(`${t.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=null==(e=document.querySelector('meta[name="viewport"]'))?void 0:e.getAttribute("content");const i=document.querySelector('meta[name="viewport"]');i&&i.setAttribute("content","width=device-width, initial-scale=1.0"),window.scrollTo(0,0),this.makeBackgroundInert(),t.emit("fullscreenchange",!0),t.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();var Pt=["dark","light","minimal","high-contrast"];function Et(e){return/^--vidply-[A-Za-z0-9_-]{1,64}$/.test(e)}function Ct(e){return!("string"!=typeof e||e.length>200||/[<>{};@\\]/.test(e))}var Lt=class{constructor(e){n(this,"player"),this.player=e}apply(){const e=this.player;if(!e.container)return;const t=Pt.map(t=>`${e.options.classPrefix}-theme-${t}`);e.container.classList.remove(...t);const i=e.options.theme;if(i&&Pt.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(E(t))continue;const s=t.startsWith("--vidply-")?t:`--vidply-${t}`;Et(s)?Ct(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}`;Et(s)&&Ct(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})}},xt=class{constructor(e){n(this,"player"),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 ct(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"))}};d(),V(),j();var Dt=class{constructor(e){n(this,"player"),n(this,"saveProgressThrottled",null),n(this,"resumeChecked",!1),n(this,"listenersAttached",!1),this.player=e}init(){this.listenersAttached||(this.listenersAttached=!0,this.saveProgressThrottled=function(e,t=100){let i=!1;return function(...s){i||(e.apply(this,s),i=!0,setTimeout(()=>i=!1,t))}}(()=>this.saveProgress(),5e3),this.player.on("timeupdate",()=>{var e;this.player.state.playing&&this.player.state.duration>0&&(null==(e=this.saveProgressThrottled)||e.call(this))}),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(t){const i=this.player;if(i.state.resumePromptVisible||!i.container)return;const s=this.formatTime(t),a=x.t("resume.prompt",{time:s});i.resumePromptElement=e.createElement("div",{className:`${i.options.classPrefix}-resume-prompt`,attributes:{role:"dialog","aria-label":a,"aria-modal":"true"}});const n=e.createElement("div",{className:`${i.options.classPrefix}-resume-prompt-content`}),r=e.createElement("p",{className:`${i.options.classPrefix}-resume-prompt-message`,textContent:a}),o=e.createElement("div",{className:`${i.options.classPrefix}-resume-prompt-buttons`}),l=e.createElement("button",{className:`${i.options.classPrefix}-resume-prompt-button ${i.options.classPrefix}-resume-prompt-button-primary`,textContent:x.t("resume.resume"),attributes:{type:"button"}});l.addEventListener("click",()=>{this.hidePrompt(),i.seek(t),i.play()});const d=e.createElement("button",{className:`${i.options.classPrefix}-resume-prompt-button`,textContent:x.t("resume.startOver"),attributes:{type:"button"}});d.addEventListener("click",()=>{this.hidePrompt();const e=i.getVideoId();e&&i.storage.clearWatchProgress(e),i.seek(0),i.play()}),i.resumePromptElement.addEventListener("keydown",e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),this.hidePrompt())}),o.appendChild(l),o.appendChild(d),n.appendChild(r),n.appendChild(o),i.resumePromptElement.appendChild(n),i.container.appendChild(i.resumePromptElement),i.state.resumePromptVisible=!0,requestAnimationFrame(()=>{l.focus()}),i.emit("resumepromptshow",{savedTime:t})}hidePrompt(){const e=this.player;e.resumePromptElement&&(e.resumePromptElement.remove(),e.resumePromptElement=null,e.state.resumePromptVisible=!1,e.emit("resumeprompthide"))}},At=class{constructor(e){n(this,"player"),n(this,"orientationQuery",null),n(this,"orientationHandler",null),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 Tt(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}};j();var zt=class{constructor(e){n(this,"player"),n(this,"cueChangeHandler",null),n(this,"alertHandlers",new Map),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={}){var i,s;if(!e)return;const a=t.messageSelector||"[data-vidply-alert-message], p",n=e.querySelector(t.titleSelector||"[data-vidply-alert-title], h3, header");n&&!n.dataset.vidplyAlertTitleOriginal&&(n.dataset.vidplyAlertTitleOriginal=(null==(i=n.textContent)?void 0:i.trim())??"");const r=e.querySelector(a);r&&!r.dataset.vidplyAlertMessageOriginal&&(r.dataset.vidplyAlertMessageOriginal=(null==(s=r.textContent)?void 0:s.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){var i,s,a;if(!e||"none"===e)return;if("alert"===e&&t)return void t.focus({preventScroll:!0});const n=this.player;if("player"!==e)if("media"!==e){if("playButton"===e){const e=null==(a=null==(s=n.controlBar)?void 0:s.controls)?void 0:a.playPause;return void(null==e||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 n.element.focus({preventScroll:!0});else null==(i=n.container)||i.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}};d(),F(),V();var _t=["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"],Rt={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"},Bt=class{constructor(e){n(this,"player"),n(this,"isOpen",!1),n(this,"overlay",null),n(this,"_triggerElement",null),n(this,"_keydownHandler",null),n(this,"_content",null),this.player=e}get prefix(){return this.player.options.classPrefix}formatKey(e){switch(e){case" ":return x.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 t=`${this.prefix}-help-title-${this.player.instanceId}`,i=e.createElement("div",{className:`${this.prefix}-settings-overlay ${this.prefix}-help-overlay`,attributes:{role:"dialog","aria-modal":"true","aria-labelledby":t}});i.style.display="none";const s=e.createElement("div",{className:`${this.prefix}-settings-dialog ${this.prefix}-help-dialog`}),a=e.createElement("div",{className:`${this.prefix}-settings-header`}),n=e.createElement("h2",{textContent:x.t("help.title"),attributes:{id:t}}),r=e.createElement("button",{className:`${this.prefix}-button ${this.prefix}-settings-close`,attributes:{type:"button","aria-label":x.t("help.close")}});r.appendChild(O("close")),r.addEventListener("click",()=>this.hide()),a.appendChild(n),a.appendChild(r);const o=e.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=Rt[e];if(!t)return!0;const i=this.player.controlBar;return!i||!i.controls||Boolean(i.controls[t])}buildShortcutList(){const t=e.createElement("dl",{className:`${this.prefix}-help-list`}),i=this.player.options.keyboardShortcuts;for(const s of _t){const a=i[s];if(!Array.isArray(a)||0===a.length)continue;if(!this.isActionRelevant(s))continue;const n=e.createElement("dt",{className:`${this.prefix}-help-action`,textContent:x.t(`help.actions.${s}`)}),r=e.createElement("dd",{className:`${this.prefix}-help-keys`});a.forEach((t,i)=>{i>0&&r.appendChild(e.createElement("span",{className:`${this.prefix}-help-key-sep`,textContent:x.t("help.or")})),r.appendChild(e.createElement("kbd",{className:`${this.prefix}-help-key`,textContent:this.formatKey(t)}))}),t.appendChild(n),t.appendChild(r)}return t}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`);null==t||t.focus({preventScroll:!0}),this.player.emit("keyboardhelpopen")}hide(){var e,t;if(!this.overlay)return;this.overlay.style.display="none",this.isOpen=!1;const i=this._triggerElement;if(this._triggerElement=null,i&&document.contains(i))try{i.focus({preventScroll:!0})}catch{null==(e=this.player.container)||e.focus()}else null==(t=this.player.container)||t.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}},Ht=null,Vt=null,$t=null,Ot=["video","audio"],Ft=0,Nt=class t extends ht{constructor(e,t={}){if(super(),n(this,"element"),n(this,"container"),n(this,"options"),n(this,"state"),n(this,"renderer",null),n(this,"controlBar",null),n(this,"captionManager",null),n(this,"keyboardManager",null),n(this,"mediaSessionManager",null),n(this,"transcriptManager",null),n(this,"playlistManager",null),n(this,"settingsDialog",null),n(this,"keyboardHelp",null),n(this,"audioDescriptionManager",null),n(this,"signLanguageManager",null),n(this,"floatingPlayerManager",null),n(this,"storage"),n(this,"instanceId"),n(this,"_audioDescriptionDesiredState"),n(this,"_fallbackSources",null),n(this,"_isAudioContent"),n(this,"_isFallingBack"),n(this,"_managersLoading",null),n(this,"_originalElement"),n(this,"pseudoFullscreen",null),n(this,"themeManager"),n(this,"posterManager"),n(this,"resumeManager",null),n(this,"responsiveManager"),n(this,"metadataAlertsManager",null),n(this,"_pendingSource",null),n(this,"_sourceElementsCache",null),n(this,"_sourceElementsDirty",!0),n(this,"_switchingRenderer"),n(this,"_trackElementsCache",null),n(this,"_trackElementsDirty",!0),n(this,"_textTracksCache",null),n(this,"_textTracksDirty"),n(this,"audioDescriptionCaptionTracks",[]),n(this,"audioDescriptionSourceElement",null),n(this,"audioDescriptionSrc",null),n(this,"currentSignLanguage",null),n(this,"currentSource",null),n(this,"debouncedPositionPlayOverlay",null),n(this,"fullscreenChangeHandler",null),n(this,"metadataCueChangeHandler",null),n(this,"noticeElement",null),n(this,"noticeTimeout",null),n(this,"orientationHandler",null),n(this,"orientationQuery",null),n(this,"originalAudioDescriptionSource",null),n(this,"originalSrc",null),n(this,"playButtonOverlay",null),n(this,"resizeHandler",null),n(this,"resizeObserver",null),n(this,"resumePromptElement",null),n(this,"signLanguageDraggable",null),n(this,"signLanguageHeader",null),n(this,"signLanguageSettingsButton",null),n(this,"signLanguageSettingsMenu",null),n(this,"signLanguageSettingsMenuVisible",!1),n(this,"signLanguageSources",{}),n(this,"signLanguageSrc",null),n(this,"signLanguageVideo",null),n(this,"signLanguageWrapper",null),n(this,"timeouts",new Set),n(this,"trackArtworkElement",null),n(this,"videoWrapper",null),n(this,"loadingOverlayElement",null),n(this,"_bufferingHideOnMediaPlaying",null),n(this,"_lifecycleController",new AbortController),this.element="string"==typeof e?document.querySelector(e):e,!this.element)throw new Error("VidPly: Element not found");if(Ft++,this.instanceId=Ft,"VIDEO"!==this.element.tagName&&"AUDIO"!==this.element.tagName){const e="string"==typeof t.mediaType?t.mediaType.toLowerCase():"video",i=Ot.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 ee("vidply"),this.themeManager=new Lt(this),this.posterManager=new xt(this),this.responsiveManager=new At(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:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.wrapper},set:e=>{this.signLanguageManager&&(this.signLanguageManager.wrapper=e)}},signLanguageVideo:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.video},set:e=>{this.signLanguageManager&&(this.signLanguageManager.video=e)}},signLanguageHeader:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.header},set:e=>{this.signLanguageManager&&(this.signLanguageManager.header=e)}},signLanguageSettingsButton:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.settingsButton},set:e=>{this.signLanguageManager&&(this.signLanguageManager.settingsButton=e)}},signLanguageSettingsMenu:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.settingsMenu},set:e=>{this.signLanguageManager&&(this.signLanguageManager.settingsMenu=e)}},signLanguageSettingsMenuVisible:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.settingsMenuVisible},set:e=>{this.signLanguageManager&&(this.signLanguageManager.settingsMenuVisible=e)}},signLanguageDraggable:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.draggable},set:e=>{this.signLanguageManager&&(this.signLanguageManager.draggable=e)}},currentSignLanguage:{get:()=>{var e;return null==(e=this.signLanguageManager)?void 0:e.currentLanguage},set:e=>{this.signLanguageManager&&(this.signLanguageManager.currentLanguage=e)}}}),this.init()}static observeLazy(e,i={},s="200px"){const a="string"==typeof e?document.querySelector(e):e;return a?"IntersectionObserver"in window?(kt(a,i,s,(e,i)=>{new t(e,i)}),{cancel:()=>(e=>{const t=Mt.get(e);t&&(t.observer.unobserve(e),Mt.delete(e))})(a)}):(new t(a,i),null):(console.warn("VidPly: Element not found for lazy observation"),null)}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"}={}){var s;try{if(!e)return;if(!this.container)return;if((null==(s=this.keyboardManager)?void 0:s.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 a=this.noticeElement;a.textContent=e,a.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(){var e,t;try{if(this.log("Initializing VidPly player"),this.options.languageFiles)try{await x.loadLanguagesFromUrls(this.options.languageFiles)}catch(e){console.warn("Failed to load some language files:",e)}if(this.options.languageFile&&this.options.languageFileUrl)try{await x.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 x.ensureLanguage(this.options.language),x.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||(null==(e=this.element.querySelector("source"))?void 0:e.src)?await this.initializeRenderer():this.log("No initial source - waiting for playlist or manual load"),await this.initFeatureManagers(),this.options.controls&&(this.controlBar=new ft(this),null==(t=this.videoWrapper)||t.appendChild(this.controlBar.element)),this.options.captions&&(this.captionManager=new de(this)),this.options.transcript&&await this.ensureTranscriptManager(),this.setupMetadataHandling(),this.options.keyboard&&(this.keyboardManager=new vt(this)),this.options.mediaSession&&(this.mediaSessionManager=new wt(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 Promise.resolve().then(()=>(Ue(),We)),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(!Ht){const e=await Promise.resolve().then(()=>(we(),ve));Ht=e.AudioDescriptionManager}return Ht})();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(!Vt){const e=await Promise.resolve().then(()=>(Oe(),Re));Vt=e.SignLanguageManager}return Vt})();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(!$t){const e=await Promise.resolve().then(()=>(Ie(),Fe));$t=e.FloatingPlayerManager}return $t})();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?x.translations[t]||x.builtInLanguageLoaders&&x.builtInLanguageLoaders[t]?t:(this.log(`Language "${e}" not available, using English as fallback`),null):null}initResumePlayback(){this.resumeManager||(this.resumeManager=new Dt(this)),this.resumeManager.init()}getVideoId(){var e,t,i;const s=this.element.getAttribute("data-video-id")||this.element.dataset.videoId||(null==(e=this._originalElement)?void 0:e.getAttribute("data-video-id"))||(null==(i=null==(t=this._originalElement)?void 0:t.dataset)?void 0:i.videoId);if(s)return s;let a=this.element.src;if(!a){const e=this.element.querySelector("source");a=null==e?void 0:e.src}return a?this._hashString(a):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(){var e;null==(e=this.resumeManager)||e.saveProgress()}checkForResume(){var e;null==(e=this.resumeManager)||e.checkForResume()}showResumePrompt(e){var t;null==(t=this.resumeManager)||t.showPrompt(e)}hideResumePrompt(){var e;null==(e=this.resumeManager)||e.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(){var i;const s=this.instanceId>1?`${x.t("player.label")} ${this.instanceId}`:x.t("player.label");this.container=e.createElement("div",{className:`${this.options.classPrefix}-player`,attributes:{role:"region","aria-label":s,tabindex:"0"}});const a=this.element.tagName.toLowerCase();if(this.container.classList.add(`${this.options.classPrefix}-${a}`),this.options.responsive&&this.container.classList.add(`${this.options.classPrefix}-responsive`),this.videoWrapper=e.createElement("div",{className:`${this.options.classPrefix}-video-wrapper`}),null==(i=this.element.parentNode)||i.insertBefore(this.container,this.element),"AUDIO"===this.element.tagName&&this.options.poster){const t=St(this.options.poster);t?(this.trackArtworkElement=e.createElement("div",{className:`${this.options.classPrefix}-track-artwork`,attributes:{"aria-hidden":"true"}}),this.trackArtworkElement.style.backgroundImage=`url("${n=t,n.replace(/["()\\]/g,e=>`\\${e}`)}")`,this.container.appendChild(this.trackArtworkElement)):this.log("[VidPly] Ignored unsafe poster URL","warn")}var n;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=St(this.resolvePosterPath(this.options.poster));e&&(this.element.poster=e)}"VIDEO"===this.element.tagName&&this.createPlayButtonOverlay(),this.createBufferingLoadingOverlay(),this.element.vidply=this,t.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(){var e;const t=(()=>{const e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttribute("class","vidply-play-overlay"),e.setAttribute("viewBox","0 0 80 80"),e.setAttribute("width","80"),e.setAttribute("height","80"),e.setAttribute("aria-hidden","true"),e.setAttribute("role","presentation"),e.style.cursor="pointer";const t=document.createElementNS("http://www.w3.org/2000/svg","defs"),i=`vidply-play-shadow-${Math.random().toString(36).slice(2,11)}`,s=document.createElementNS("http://www.w3.org/2000/svg","filter");s.setAttribute("id",i),s.setAttribute("x","-50%"),s.setAttribute("y","-50%"),s.setAttribute("width","200%"),s.setAttribute("height","200%");const a=document.createElementNS("http://www.w3.org/2000/svg","feGaussianBlur");a.setAttribute("in","SourceAlpha"),a.setAttribute("stdDeviation","3");const n=document.createElementNS("http://www.w3.org/2000/svg","feOffset");n.setAttribute("dx","0"),n.setAttribute("dy","2"),n.setAttribute("result","offsetblur");const r=document.createElementNS("http://www.w3.org/2000/svg","feComponentTransfer"),o=document.createElementNS("http://www.w3.org/2000/svg","feFuncA");o.setAttribute("type","linear"),o.setAttribute("slope","0.3"),r.appendChild(o);const l=document.createElementNS("http://www.w3.org/2000/svg","feMerge"),d=document.createElementNS("http://www.w3.org/2000/svg","feMergeNode"),h=document.createElementNS("http://www.w3.org/2000/svg","feMergeNode");h.setAttribute("in","SourceGraphic"),l.appendChild(d),l.appendChild(h),s.appendChild(a),s.appendChild(n),s.appendChild(r),s.appendChild(l),t.appendChild(s),e.appendChild(t);const c=document.createElementNS("http://www.w3.org/2000/svg","circle");c.setAttribute("cx","40"),c.setAttribute("cy","40"),c.setAttribute("r","40"),c.setAttribute("fill","rgba(255, 255, 255, 0.95)"),c.setAttribute("filter",`url(#${i})`),c.setAttribute("class","vidply-play-overlay-bg"),e.appendChild(c);const u=document.createElementNS("http://www.w3.org/2000/svg","polygon");return u.setAttribute("points","32,28 32,52 54,40"),u.setAttribute("fill","#0a406e"),u.setAttribute("class","vidply-play-overlay-icon"),e.appendChild(u),e})();this.playButtonOverlay=t,t.addEventListener("click",()=>{this.toggle()}),null==(e=this.videoWrapper)||e.appendChild(t),this.on("play",()=>{t.style.opacity="0",t.style.pointerEvents="none"}),this.on("pause",()=>{t.style.opacity="1",t.style.pointerEvents="auto",this.positionPlayOverlayOnMobile()}),this.on("ended",()=>{t.style.opacity="1",t.style.pointerEvents="auto",this.positionPlayOverlayOnMobile()});const i=W(()=>{this.positionPlayOverlayOnMobile()},150);this.debouncedPositionPlayOverlay=i,window.addEventListener("resize",i,{signal:this.lifecycleSignal}),this.on("loadedmetadata",()=>{this.positionPlayOverlayOnMobile()}),this.on("enterfullscreen",()=>{K(()=>this.positionPlayOverlayOnMobile(),100)}),this.on("exitfullscreen",()=>{K(()=>this.positionPlayOverlayOnMobile(),100)})}createBufferingLoadingOverlay(){if(!this.videoWrapper)return;const t=this.options.classPrefix,i=x.t("player.buffering"),s=e.createElement("div",{className:`${t}-loading`,attributes:{"aria-busy":"false"}}),a=e.createElement("span",{className:`${t}-sr-only`,attributes:{id:`${t}-buffering-live-${this.instanceId}`,"aria-live":"polite","aria-atomic":"true"}});s.appendChild(a),this.loadingOverlayElement=s,this.videoWrapper.appendChild(s);const n=()=>{var e;return null==(e=this.container)?void 0:e.classList.contains(`${t}-external-controls`)},r=()=>{this.container.classList.contains(`${t}-buffering`)&&(this.container.classList.remove(`${t}-buffering`),s.setAttribute("aria-busy","false"),a.textContent="")};this.on("waiting",()=>{n()||(this.state.hasStartedPlayback||this.state.seeking)&&(this.container.classList.add(`${t}-buffering`),s.setAttribute("aria-busy","true"),a.textContent=i)}),this.on("canplay",r),this.on("pause",r),this.on("ended",r),this._bufferingHideOnMediaPlaying=r,this.element.addEventListener("playing",this._bufferingHideOnMediaPlaying),this.on("timeupdate",()=>{this.container.classList.contains(`${t}-buffering`)&&r()})}positionPlayOverlayOnMobile(){var e;if(!this.playButtonOverlay||"VIDEO"!==this.element.tagName)return;if(!q())return void(this.playButtonOverlay.style.top="");const t=this.element.getBoundingClientRect(),i=null==(e=this.videoWrapper)?void 0:e.getBoundingClientRect();i&&(this.playButtonOverlay.style.top=t.top-i.top+t.height/2+"px")}async initializeRenderer(){var e,t,i;let s=this._pendingSource,a=null;if(s)this._fallbackSources=[];else{const t=Array.from(this.element.querySelectorAll("source"));if(t.length>1){const e=this._selectBestSource(t);s=e.src,this._fallbackSources=e.fallbacks}else s=this.element.src||(null==(e=t[0])?void 0:e.src),this._fallbackSources=[]}if(!s)throw new Error("No media source found");this.currentSource=s,this._pendingSource=null,this.hasAudioDescriptionContent()&&await this.ensureAudioDescriptionManager(),null==(t=this.audioDescriptionManager)||t.initFromSourceElements(this.sourceElements,this.trackElements),this.originalSrc||(this.originalSrc=s),a=await this._detectRendererClass(s),this.log(`Using ${(null==a?void 0:a.name)||"HTML5Renderer"} renderer`),this.renderer=new a(this);const n=((null==(i=this._fallbackSources)?void 0:i.length)??0)>0?1e4:0;if(n>0){let e;await Promise.race([this.renderer.init(),new Promise((t,i)=>{e=setTimeout(()=>i(new Error(`Renderer init timed out after ${n}ms`)),n)})]).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 Promise.resolve().then(()=>(Ge(),Ye));return e.YouTubeRenderer??e.default}if(e.includes("vimeo.com")){const e=await Promise.resolve().then(()=>(et(),Je));return e.VimeoRenderer??e.default}if(e.includes(".m3u8")){const e=await Promise.resolve().then(()=>(st(),tt));return e.HLSRenderer??e.default}if(e.includes(".mpd")){const e=await Promise.resolve().then(()=>(ot(),at));return e.DASHRenderer??e.default}if(e.includes("soundcloud.com")||e.includes("api.soundcloud.com")){const e=await Promise.resolve().then(()=>(dt(),lt));return e.SoundCloudRenderer??e.default}return he}_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:(null==a?void 0: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){var t,i;try{this.log("Loading new media:",e.src),this.renderer&&this.pause();const s=window.scrollX||window.pageXOffset,a=window.scrollY||window.pageYOffset;this.trackElements.forEach(e=>e.remove()),this.invalidateTrackCache();const n=this.isExternalRendererUrl(e.src);if(n&&(this._switchingRenderer=!0),n?(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 r=this.state.signLanguageEnabled,o=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),o&&this.disableAudioDescription(),r&&this.disableSignLanguage();const l=this.shouldChangeRenderer(e.src),d=!l&&this.renderer&&(this.renderer.dash||this.renderer.hls);if((l||d)&&this.renderer&&(this.renderer.destroy(),this.renderer=null,this.controlBar&&this.controlBar.removeHlsCaptionButtons(!0),(null==(t=this.transcriptManager)?void 0:t.isVisible)&&this.transcriptManager.hideTranscript()),!this.renderer||l||d)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(n?setTimeout(()=>{this._switchingRenderer=!1},500):this._switchingRenderer=!1,window.scrollTo(s,a),d)this.captionManager&&(this.captionManager.disable(),this.captionManager.tracks=[]),(null==(i=this.transcriptManager)?void 0:i.isVisible)&&this.transcriptManager.hideTranscript();else{if(this.captionManager&&(this.captionManager.destroy(),this.captionManager=new de(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()&&(null==t||t.showTranscript())}this.controlBar&&this.updateControlBar()}window.scrollTo(s,a),r&&this.signLanguageSrc&&setTimeout(()=>{this.enableSignLanguage(),window.scrollTo(s,a)},150),o&&this.audioDescriptionSrc&&setTimeout(()=>{this.enableAudioDescription(),window.scrollTo(s,a)},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 Tt(this)),this.pseudoFullscreen.enable()}_disablePseudoFullscreen(){var e;null==(e=this.pseudoFullscreen)||e.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){var t;if("string"!=typeof e||!e)return!1;const i=[this.lifecycleSignal];"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&i.push(AbortSignal.timeout(8e3));const s=1===i.length?i[0]:(null==(t=AbortSignal.any)?void 0:t.call(AbortSignal,i))??i[0];try{return(await fetch(e,{method:"HEAD",cache:"no-cache",signal:s})).ok}catch(t){return this.options.debug&&this.log(`validateTrackExists("${e}") failed: ${(null==t?void 0: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 null==e?void 0:e.enable()}async disableAudioDescription(){const e=await this.ensureAudioDescriptionManager();return null==e?void 0:e.disable()}async toggleAudioDescription(){var e,t,i;if(this.options.requirePlaybackForAccessibilityToggles&&!this.renderer&&(null==(t=null==(e=this.playlistManager)?void 0:e.tracks)?void 0:t.length))return void this.showNotice(x.t("player.startPlaybackForAudioDescription"));const s=await this.ensureAudioDescriptionManager();return s?!this.renderer&&this.playlistManager&&(null==(i=this.playlistManager.tracks)?void 0:i.length)?(s.desiredState=!s.desiredState,this.state.audioDescriptionEnabled=s.desiredState,this.emit(s.desiredState?"audiodescriptionenabled":"audiodescriptiondisabled"),void this.play()):s.toggle():void 0}async enableSignLanguage(){const e=await this.ensureSignLanguageManager();return null==e?void 0:e.enable()}async disableSignLanguage(){const e=await this.ensureSignLanguageManager();return null==e?void 0:e.disable()}async toggleSignLanguage(){var e,t,i;if(this.options.requirePlaybackForAccessibilityToggles&&!this.renderer&&(null==(t=null==(e=this.playlistManager)?void 0:e.tracks)?void 0:t.length))return void this.showNotice(x.t("player.startPlaybackForSignLanguage"));const s=await this.ensureSignLanguageManager();if(s){if(!this.renderer&&this.playlistManager&&(null==(i=this.playlistManager.tracks)?void 0:i.length)){const e=s.enabled,t=s.toggle();return!e&&s.enabled&&this.play(),t}return s.toggle()}}setupSignLanguageInteraction(){var e;return null==(e=this.signLanguageManager)?void 0:e._setupInteraction()}switchSignLanguage(e){var t;return null==(t=this.signLanguageManager)?void 0:t.switchLanguage(e)}showSignLanguageSettingsMenu(){var e;return null==(e=this.signLanguageManager)?void 0:e.showSettingsMenu()}hideSignLanguageSettingsMenu({focusButton:e=!0}={}){var t;return null==(t=this.signLanguageManager)?void 0:t.hideSettingsMenu({focusButton:e})}constrainSignLanguagePosition(){var e;return null==(e=this.signLanguageManager)?void 0:e.constrainPosition()}saveSignLanguagePreferences(){var e;return null==(e=this.signLanguageManager)?void 0:e.savePreferences()}cleanupSignLanguage(){var e;return null==(e=this.signLanguageManager)?void 0:e.cleanup()}showSettings(){console.warn("[VidPly] Settings dialog has been removed. Use individual control buttons (speed, captions, etc.)")}hideSettings(){}toggleKeyboardHelp(){this.keyboardHelp||(this.keyboardHelp=new Bt(this)),this.keyboardHelp.toggle()}showKeyboardHelp(){this.keyboardHelp||(this.keyboardHelp=new Bt(this)),this.keyboardHelp.show()}hideKeyboardHelp(){var e;null==(e=this.keyboardHelp)||e.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(){var e,i;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),null==(e=this.responsiveManager)||e.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}null==(i=this.metadataAlertsManager)||i.cleanup();const s=t.instances.indexOf(this);s>=0&&t.instances.splice(s,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 zt(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 zt(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)}};n(Nt,"instances",[]),n(Nt,"THEMES",Pt);var It=Nt;function Wt(e){if(!e||"object"!=typeof e||Array.isArray(e))return{};const t=Object.create(null);for(const[i,s]of Object.entries(e))E(i)||(t[i]=s);return t}function qt(){document.querySelectorAll("[data-vidply]").forEach(e=>{const t=(e=>{const t=e.dataset.vidplyOptions;if(!t)return{};try{return Wt(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(E(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=Wt(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=Wt(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?kt(e,s,e.dataset.vidplyLazyMargin||s.lazyMargin||"500px",(e,t)=>{new It(e,t)}):new It(e,s)})}d(),F(),V(),$(),j(),D(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",qt):qt()})();