vidply 1.2.1 → 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.
- package/README.md +30 -2
- package/dist/dev/{vidply.AudioDescriptionManager-6RFVF27Z.js → vidply.AudioDescriptionManager-JYYLK5KB.js} +6 -6
- package/dist/dev/{vidply.CaptionStyleMenu-R2SCQ6VP.js → vidply.CaptionStyleMenu-47RCKQF5.js} +4 -4
- package/dist/dev/{vidply.DASHRenderer-EOVEW73H.js → vidply.DASHRenderer-VEJ4HDHO.js} +3 -3
- package/dist/dev/{vidply.FloatingPlayerManager-V5XQWS75.js → vidply.FloatingPlayerManager-C2UVRPZY.js} +5 -5
- package/dist/dev/{vidply.HLSRenderer-ZBEFVH5W.js → vidply.HLSRenderer-ZVBK2TNQ.js} +4 -4
- package/dist/dev/vidply.HTML5Renderer-HLRQUOCU.js +12 -0
- package/dist/dev/{vidply.SignLanguageManager-7IAJOVF6.js → vidply.SignLanguageManager-FLUCBW5H.js} +8 -8
- package/dist/dev/{vidply.SoundCloudRenderer-OA7QQYGN.js → vidply.SoundCloudRenderer-MGMAJ7NK.js} +3 -3
- package/dist/dev/{vidply.TranscriptManager-BPM3T23L.js → vidply.TranscriptManager-Y2RYXHJW.js} +10 -10
- package/dist/dev/{vidply.VimeoRenderer-BRHFYPNJ.js → vidply.VimeoRenderer-RQFQD7OE.js} +3 -3
- package/dist/dev/{vidply.YouTubeRenderer-HRTN4EJ5.js → vidply.YouTubeRenderer-EU2BARZF.js} +3 -3
- package/dist/dev/{vidply.chunk-UHMVDBDB.js → vidply.chunk-6LYZYI5G.js} +3 -3
- package/dist/dev/{vidply.chunk-W5BR65JY.js → vidply.chunk-A4ESEOQ2.js} +6 -6
- package/dist/dev/{vidply.chunk-XAK3DPTO.js → vidply.chunk-CGYIED2I.js} +2 -2
- package/dist/dev/{vidply.chunk-YVCYQZJI.js → vidply.chunk-HZ7UOKOU.js} +3 -3
- package/dist/dev/{vidply.chunk-NSMAZCMB.js → vidply.chunk-I6EDRYGJ.js} +33 -6
- package/dist/dev/{vidply.chunk-NSMAZCMB.js.map → vidply.chunk-I6EDRYGJ.js.map} +2 -2
- package/dist/dev/{vidply.chunk-LDVFAFGC.js → vidply.chunk-JKMQGLCJ.js} +5 -5
- package/dist/dev/{vidply.chunk-HOYEMJSD.js → vidply.chunk-JZNZX32Z.js} +2 -2
- package/dist/dev/{vidply.chunk-JAKZNGOR.js → vidply.chunk-P25MRJ6O.js} +2 -2
- package/dist/dev/{vidply.chunk-5IK3IC5V.js → vidply.chunk-PRFNESYA.js} +2 -2
- package/dist/dev/{vidply.chunk-RQG3MA7W.js → vidply.chunk-UI3RYCVF.js} +4 -3
- package/dist/dev/{vidply.chunk-RQG3MA7W.js.map → vidply.chunk-UI3RYCVF.js.map} +2 -2
- package/dist/dev/{vidply.chunk-C55OBT5H.js → vidply.chunk-UNFGMABP.js} +2 -2
- package/dist/dev/{vidply.de-5W5LBFSJ.js → vidply.de-VAUVSQXC.js} +29 -2
- package/dist/dev/{vidply.de-5W5LBFSJ.js.map → vidply.de-VAUVSQXC.js.map} +2 -2
- package/dist/dev/{vidply.es-SHDAT6L6.js → vidply.es-G65HFWO6.js} +29 -2
- package/dist/dev/{vidply.es-SHDAT6L6.js.map → vidply.es-G65HFWO6.js.map} +2 -2
- package/dist/dev/vidply.esm.js +594 -20
- package/dist/dev/vidply.esm.js.map +3 -3
- package/dist/dev/{vidply.fr-2JANOMNB.js → vidply.fr-MJNOZELM.js} +29 -2
- package/dist/dev/{vidply.fr-2JANOMNB.js.map → vidply.fr-MJNOZELM.js.map} +2 -2
- package/dist/dev/{vidply.ja-WWMSTEJH.js → vidply.ja-INMDHIYJ.js} +29 -2
- package/dist/dev/{vidply.ja-WWMSTEJH.js.map → vidply.ja-INMDHIYJ.js.map} +2 -2
- package/dist/legacy/vidply.js +718 -3
- package/dist/legacy/vidply.js.map +3 -3
- package/dist/legacy/vidply.min.js +2 -2
- package/dist/legacy/vidply.min.meta.json +72 -19
- package/dist/prod/{vidply.AudioDescriptionManager-YTDVDQBO.min.js → vidply.AudioDescriptionManager-EKWUNOPE.min.js} +2 -2
- package/dist/prod/{vidply.CaptionStyleMenu-2AFF3HF2.min.js → vidply.CaptionStyleMenu-JTWSNHRQ.min.js} +2 -2
- package/dist/prod/{vidply.DASHRenderer-URDOTOKS.min.js → vidply.DASHRenderer-CIDAHFWM.min.js} +2 -2
- package/dist/prod/{vidply.FloatingPlayerManager-QUBFK7CQ.min.js → vidply.FloatingPlayerManager-VZXHPCPM.min.js} +2 -2
- package/dist/prod/{vidply.HLSRenderer-46KNUVAB.min.js → vidply.HLSRenderer-Q6EFYKID.min.js} +2 -2
- package/dist/prod/vidply.HTML5Renderer-XRDJUTOO.min.js +6 -0
- package/dist/prod/{vidply.SignLanguageManager-H4C36EVL.min.js → vidply.SignLanguageManager-JUOSA5AM.min.js} +2 -2
- package/dist/prod/{vidply.SoundCloudRenderer-OYSWMW7D.min.js → vidply.SoundCloudRenderer-7ODD46PO.min.js} +2 -2
- package/dist/prod/{vidply.TranscriptManager-BA3DAS63.min.js → vidply.TranscriptManager-4B2QKYGQ.min.js} +2 -2
- package/dist/prod/{vidply.VimeoRenderer-NF3COTHU.min.js → vidply.VimeoRenderer-MR3UYLY7.min.js} +2 -2
- package/dist/prod/{vidply.YouTubeRenderer-UCQKYIJ4.min.js → vidply.YouTubeRenderer-ITRTC7NR.min.js} +2 -2
- package/dist/prod/{vidply.chunk-7S5AFTST.min.js → vidply.chunk-3EEDXU4T.min.js} +2 -2
- package/dist/prod/{vidply.chunk-EUOA2DJK.min.js → vidply.chunk-5HTX5QXW.min.js} +1 -1
- package/dist/prod/{vidply.chunk-JPMAK3NS.min.js → vidply.chunk-6OGHHIYP.min.js} +2 -2
- package/dist/prod/{vidply.chunk-XXUH7ADU.min.js → vidply.chunk-GUPGMFUZ.min.js} +2 -2
- package/dist/prod/{vidply.chunk-M76ABMKB.min.js → vidply.chunk-MWEBITCP.min.js} +1 -1
- package/dist/prod/{vidply.chunk-G6KGXNEW.min.js → vidply.chunk-PL3P3JHR.min.js} +1 -1
- package/dist/prod/{vidply.chunk-6ECBIYVI.min.js → vidply.chunk-QQZGV7TD.min.js} +2 -2
- package/dist/prod/{vidply.chunk-2HNCP64N.min.js → vidply.chunk-U5IRRYG5.min.js} +1 -1
- package/dist/prod/{vidply.chunk-WRVDVD33.min.js → vidply.chunk-VKHV4QHA.min.js} +2 -2
- package/dist/prod/{vidply.chunk-L4O44K63.min.js → vidply.chunk-XA4M574A.min.js} +1 -1
- package/dist/prod/{vidply.chunk-X2FQEQYR.min.js → vidply.chunk-ZPTV4JEP.min.js} +2 -2
- package/dist/prod/{vidply.de-JMCATTKZ.min.js → vidply.de-UZHFCEZU.min.js} +2 -2
- package/dist/prod/{vidply.es-YVG37V7Z.min.js → vidply.es-BOISUV2S.min.js} +2 -2
- package/dist/prod/vidply.esm.min.js +2 -2
- package/dist/prod/{vidply.fr-OGKGN2R4.min.js → vidply.fr-ICSMKPFM.min.js} +2 -2
- package/dist/prod/{vidply.ja-Z6DS7QLS.min.js → vidply.ja-VQ2HKGAY.min.js} +2 -2
- package/dist/vidply.css +56 -0
- package/dist/vidply.esm.min.meta.json +154 -112
- package/dist/vidply.min.css +1 -1
- package/package.json +7 -7
- package/src/controls/ControlBar.ts +32 -0
- package/src/controls/KeyboardHelp.ts +326 -0
- package/src/controls/KeyboardManager.ts +4 -0
- package/src/core/MediaSessionManager.ts +341 -0
- package/src/core/Player.ts +59 -1
- package/src/i18n/languages/de.ts +27 -0
- package/src/i18n/languages/en.ts +27 -0
- package/src/i18n/languages/es.ts +27 -0
- package/src/i18n/languages/fr.ts +27 -0
- package/src/i18n/languages/ja.ts +27 -0
- package/src/icons/Icons.ts +2 -1
- package/src/styles/vidply.css +56 -0
- package/src/types/events.ts +4 -0
- package/src/types/options.ts +14 -0
- package/dist/dev/vidply.HTML5Renderer-P7ICKYU4.js +0 -12
- package/dist/prod/vidply.HTML5Renderer-7TQDMIGY.min.js +0 -6
- /package/dist/dev/{vidply.AudioDescriptionManager-6RFVF27Z.js.map → vidply.AudioDescriptionManager-JYYLK5KB.js.map} +0 -0
- /package/dist/dev/{vidply.CaptionStyleMenu-R2SCQ6VP.js.map → vidply.CaptionStyleMenu-47RCKQF5.js.map} +0 -0
- /package/dist/dev/{vidply.DASHRenderer-EOVEW73H.js.map → vidply.DASHRenderer-VEJ4HDHO.js.map} +0 -0
- /package/dist/dev/{vidply.FloatingPlayerManager-V5XQWS75.js.map → vidply.FloatingPlayerManager-C2UVRPZY.js.map} +0 -0
- /package/dist/dev/{vidply.HLSRenderer-ZBEFVH5W.js.map → vidply.HLSRenderer-ZVBK2TNQ.js.map} +0 -0
- /package/dist/dev/{vidply.HTML5Renderer-P7ICKYU4.js.map → vidply.HTML5Renderer-HLRQUOCU.js.map} +0 -0
- /package/dist/dev/{vidply.SignLanguageManager-7IAJOVF6.js.map → vidply.SignLanguageManager-FLUCBW5H.js.map} +0 -0
- /package/dist/dev/{vidply.SoundCloudRenderer-OA7QQYGN.js.map → vidply.SoundCloudRenderer-MGMAJ7NK.js.map} +0 -0
- /package/dist/dev/{vidply.TranscriptManager-BPM3T23L.js.map → vidply.TranscriptManager-Y2RYXHJW.js.map} +0 -0
- /package/dist/dev/{vidply.VimeoRenderer-BRHFYPNJ.js.map → vidply.VimeoRenderer-RQFQD7OE.js.map} +0 -0
- /package/dist/dev/{vidply.YouTubeRenderer-HRTN4EJ5.js.map → vidply.YouTubeRenderer-EU2BARZF.js.map} +0 -0
- /package/dist/dev/{vidply.chunk-UHMVDBDB.js.map → vidply.chunk-6LYZYI5G.js.map} +0 -0
- /package/dist/dev/{vidply.chunk-W5BR65JY.js.map → vidply.chunk-A4ESEOQ2.js.map} +0 -0
- /package/dist/dev/{vidply.chunk-XAK3DPTO.js.map → vidply.chunk-CGYIED2I.js.map} +0 -0
- /package/dist/dev/{vidply.chunk-YVCYQZJI.js.map → vidply.chunk-HZ7UOKOU.js.map} +0 -0
- /package/dist/dev/{vidply.chunk-LDVFAFGC.js.map → vidply.chunk-JKMQGLCJ.js.map} +0 -0
- /package/dist/dev/{vidply.chunk-HOYEMJSD.js.map → vidply.chunk-JZNZX32Z.js.map} +0 -0
- /package/dist/dev/{vidply.chunk-JAKZNGOR.js.map → vidply.chunk-P25MRJ6O.js.map} +0 -0
- /package/dist/dev/{vidply.chunk-5IK3IC5V.js.map → vidply.chunk-PRFNESYA.js.map} +0 -0
- /package/dist/dev/{vidply.chunk-C55OBT5H.js.map → vidply.chunk-UNFGMABP.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* VidPly v1.2.
|
|
2
|
+
* VidPly v1.2.3 - Universal, Accessible Video Player
|
|
3
3
|
* (c) 2026 Matthias Peltzer
|
|
4
4
|
* Released under GPL-2.0-or-later License
|
|
5
5
|
*/
|
|
6
|
-
import{DraggablePanel as e,createLabeledSelect as t,preventDragOnElement as i}from"./vidply.chunk-7S5AFTST.min.js";import{DraggableResizable as a}from"./vidply.chunk-G6KGXNEW.min.js";import{createIconElement as s}from"./vidply.chunk-JPMAK3NS.min.js";import"./vidply.chunk-L4O44K63.min.js";import"./vidply.chunk-M76ABMKB.min.js";import{DOMUtils as n,i18n as r}from"./vidply.chunk-6ECBIYVI.min.js";var l=class{player;_mainViewMutedBefore;_mainViewUsingSourceSwap;currentLanguage;customKeyHandler;desiredPosition;draggable;handlers;header;inMainView;interactionHandlers;mainViewOriginalSources;mainViewOriginalSrc;resizeHandles;selector;settingsButton;settingsHandlers;sources;src;enabled;video;wrapper;_panel=null;get settingsMenu(){return this._panel?.settingsMenu??null}set settingsMenu(e){}get settingsMenuVisible(){return this._panel?.settingsMenuVisible??!1}set settingsMenuVisible(e){}get settingsMenuJustOpened(){return this._panel?.justOpened??!1}set settingsMenuJustOpened(e){}get dragOptionButton(){return this._panel?.dragOptionButton??null}get dragOptionText(){return this._panel?.dragOptionText??null}get resizeOptionButton(){return this._panel?.resizeOptionButton??null}get resizeOptionText(){return this._panel?.resizeOptionText??null}constructor(e){this.player=e,this.src=e.options.signLanguageSrc,this.sources=e.options.signLanguageSources||{},this.currentLanguage=null,this.desiredPosition=e.options.signLanguagePosition||"bottom-right",this.wrapper=null,this.header=null,this.video=null,this.selector=null,this.settingsButton=null,this.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}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,a=null;e?(i=this._determineInitialLanguage(),a=this.sources[i]??null,this.currentLanguage=i):a=this.src,this._createWrapper(),this._createHeader(e,i),this._createVideo(a),this._createResizeHandles();const s=this.wrapper,n=this.video;s&&n&&(s.appendChild(this.header),s.appendChild(n),this.resizeHandles.forEach(e=>s.appendChild(e)),this._applyInitialSize(),this.player.container.appendChild(s),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 a=this.player.element,s=this.player.state.currentTime,n=this.player.state.playing,r=a.poster||a.getAttribute("poster")||this.player.options.poster,l=s<.1&&!n,o=Array.from(a.querySelectorAll("source")),h=o[0];if(this.mainViewOriginalSrc=a.currentSrc&&a.currentSrc.length>0?a.currentSrc:a.src&&a.src.length>0?a.src:h&&h.getAttribute("src")?h.getAttribute("src"):"",this._mainViewMutedBefore=this.player.state.muted,r&&l&&"VIDEO"===a.tagName&&(a.poster=r),o.length>0){this.mainViewOriginalSources=o,this.mainViewOriginalSources.forEach(e=>e.remove());const e=document.createElement("source"),t=i??"";e.setAttribute("src",t);const s=this._inferVideoType(t);s&&e.setAttribute("type",s);const n=a.querySelector("track");n?a.insertBefore(e,n):a.appendChild(e),this._mainViewUsingSourceSwap=!0}else a.src=i??"",this._mainViewUsingSourceSwap=!1;a.muted=!0,this.player.currentSource=i??"","function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache(),a.load(),await this._waitForMediaReadyMainView(s>0||n),s>0&&(this.player.seek(s),await new Promise(e=>setTimeout(e,100))),n?await this.player.play():(this.player.pause(),!l&&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(){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 e=this.player.element,t=this.player.state.currentTime,i=this.player.state.playing;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);if(e.muted=this._mainViewMutedBefore,this.player.currentSource=this.mainViewOriginalSrc||e.querySelector("source")?.src||"","function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache(),e.load(),await this._waitForMediaReadyMainView(t>0||i),t>0&&this.player.seek(t),i)try{await this.player.play()}catch(e){this.player.log?.("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",a),e()},a=()=>{t.removeEventListener("loadedmetadata",i),t.removeEventListener("error",a),e()};t.addEventListener("loadedmetadata",i),t.addEventListener("error",a,{once:!0})}),a=new Promise(e=>setTimeout(e,1e4));await Promise.race([i,a]),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(){if(this.player.captionManager&&this.player.captionManager.currentTrack){const e=this.player.captionManager.currentTrack.language?.toLowerCase().split("-")[0];if(e&&this.sources[e])return e}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",r.t("player.signLanguageDragResize"))}_createHeader(e,t){const i=this.player.options.classPrefix;this.header=n.createElement("div",{className:`${i}-sign-language-header`,attributes:{tabindex:"0"}});const a=n.createElement("div",{className:`${i}-sign-language-header-left`}),s=n.createElement("h3",{textContent:r.t("player.signLanguageVideo")});this._createSettingsButton(a),e&&this._createLanguageSelector(a,t),a.appendChild(s);const l=this._createCloseButton();this.header.appendChild(a),this.header.appendChild(l)}_createSettingsButton(t){const i=this.player.options.classPrefix,a=r.t("player.signLanguageSettings");this.settingsButton=n.createElement("button",{className:`${i}-sign-language-settings`,attributes:{type:"button","aria-label":a,"aria-expanded":"false"}}),this.settingsButton.appendChild(s("settings")),n.attachTooltip(this.settingsButton,a,i),this._panel=new e({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=>{this.toggleKeyboardDragMode(),e.hide({focusButton:!1}),this.draggable?.keyboardDragMode&&setTimeout(()=>{this.wrapper?.focus?.({preventScroll:!0})},20)},onResizeItemClick:e=>{this.toggleResizeMode({focus:!1})?(e.hide({focusButton:!1}),setTimeout(()=>{this.wrapper?.focus?.({preventScroll:!0})},20)):e.hide({focusButton:!0})}}),this.settingsHandlers={click:e=>{e.preventDefault(),e.stopPropagation(),this._panel?.markJustOpenedForClick(),this._panel?.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(e,a){const s=this.player.options.classPrefix,r=`${s}-sign-language-select-${Date.now()}`,l=Object.keys(this.sources).map(e=>({value:e,text:this.getLanguageLabel(e),selected:e===a})),{label:o,select:h}=t({classPrefix:s,labelClass:`${s}-sign-language-label`,selectClass:`${s}-sign-language-select`,labelText:"settings.language",selectId:r,options:l,onChange:e=>{e.stopPropagation(),this.switchLanguage(e.target.value)}});this.selector=h;const g=n.createElement("div",{className:`${s}-sign-language-selector-wrapper`});g.appendChild(o),g.appendChild(this.selector),i(g),e.appendChild(g)}_createCloseButton(){const e=this.player.options.classPrefix,t=r.t("player.closeSignLanguage"),i=n.createElement("button",{className:`${e}-sign-language-close`,attributes:{type:"button","aria-label":t}});return i.appendChild(s("close")),n.attachTooltip(i,t,e),i.addEventListener("click",()=>{this.disable();const e=this.player.controlBar?.controls?.signLanguage;e&&this.player.setManagedTimeout(()=>{e.focus({preventScroll:!0})},0)},{signal:this.player.lifecycleSignal}),i}_createVideo(e){this.video=document.createElement("video"),this.video.className="vidply-sign-language-video",this.video.src=e??"",this.video.setAttribute("aria-label",r.t("player.signLanguage")),this.video.muted=!0,this.video.setAttribute("playsinline","")}_createResizeHandles(){const e=this.player.options.classPrefix;this.resizeHandles=["n","s","e","w","ne","nw","se","sw"].map(t=>{const i=n.createElement("div",{className:`${e}-sign-resize-handle ${e}-sign-resize-${t}`,attributes:{"data-direction":t,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return i.style.display="none",i})}_applyInitialSize(){const e=this.wrapper;if(!e)return;const t=this.player.storage.getSignLanguagePreferences();e.style.width=t?.size?.width?t.size.width:"280px",e.style.height="auto"}_setupInteraction(){if(window.innerWidth<768&&!this.player.state.fullscreen&&!1===this.player?.options?.signLanguageDragOnMobile)return void(this.draggable&&(this.draggable.destroy(),this.draggable=null));if(this.draggable)return;const e=this.wrapper;if(!e)return;const t=this.player.options.classPrefix;this.draggable=new a(e,{dragHandle:this.wrapper,resizeHandles:this.resizeHandles,constrainToViewport:!0,maintainAspectRatio:!0,minWidth:150,minHeight:100,classPrefix:`${t}-sign`,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:10,keyboardStepLarge:50,pointerResizeIndicatorText:r.t("player.signLanguageResizeActive"),onPointerResizeToggle:e=>{this.resizeHandles.forEach(t=>{t.style.display=e?"block":"none"}),e?(this._showModeBadge(r.t("player.signResizeModeHint")),this.player.keyboardManager?.announce(r.t("player.signLanguageResizeActive"))):(this._hideModeBadge(),this.player.keyboardManager?.announce(r.t("player.signResizeModeDisabled")))},onDragStart(e){const i=e.target;return!(i.closest(`.${t}-sign-language-close`)||i.closest(`.${t}-sign-language-settings`)||i.closest(`.${t}-sign-language-select`)||i.closest(`.${t}-sign-language-label`)||i.closest(`.${t}-sign-language-settings-menu`))}}),this._setupCustomKeyHandler(),this.interactionHandlers={draggable:this.draggable,customKeyHandler:this.customKeyHandler}}_setupCustomKeyHandler(){this.customKeyHandler=e=>{const t=e.key.toLowerCase();if(!this.settingsMenuVisible){if("home"===t)return e.preventDefault(),e.stopPropagation(),void(this.draggable&&(this.draggable.pointerResizeMode&&this.draggable.disablePointerResizeMode(),this.draggable.manuallyPositioned=!1,this.constrainPosition()));if("r"===t)return e.preventDefault(),e.stopPropagation(),void(this.toggleResizeMode()&&this.wrapper?.focus({preventScroll:!0}));if("escape"===t){if(e.preventDefault(),e.stopPropagation(),this.draggable?.pointerResizeMode)return void this.draggable.disablePointerResizeMode();if(this.draggable?.keyboardDragMode)return this.draggable.disableKeyboardDragMode(),this._hideModeBadge(),this._updateDragOptionState(),void this.player.keyboardManager?.announce(r.t("player.signDragModeDisabled"));this.disable();const t=this.player.controlBar?.controls?.signLanguage;t&&setTimeout(()=>{t.focus({preventScroll:!0})},0)}}},this.wrapper?.addEventListener("keydown",this.customKeyHandler)}_setupEventHandlers(e){this.handlers={play:()=>{this.video&&this.video.play()},pause:()=>{this.video&&this.video.pause()},timeupdate:()=>{this.video&&Math.abs(this.video.currentTime-this.player.state.currentTime)>.5&&(this.video.currentTime=this.player.state.currentTime)},ratechange:()=>{this.video&&(this.video.playbackRate=this.player.state.playbackSpeed)}},this.player.on("play",this.handlers.play),this.player.on("pause",this.handlers.pause),this.player.on("timeupdate",this.handlers.timeupdate),this.player.on("ratechange",this.handlers.ratechange),e&&(this.handlers.captionChange=()=>{if(this.player.captionManager?.currentTrack&&this.selector){const e=this.player.captionManager.currentTrack.language?.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(){if(!this.wrapper||!this.player.videoWrapper)return;if(this.draggable?.manuallyPositioned)return;this.wrapper.style.width||(this.wrapper.style.width="280px");const e=this.player.videoWrapper.getBoundingClientRect(),t=this.player.container.getBoundingClientRect(),i=this.wrapper.getBoundingClientRect(),a=e.left-t.left,s=e.top-t.top,n=e.width,r=e.height,l=i.width||280,o=i.height||157.5;let h,g;const p=16;switch(this.desiredPosition||"bottom-right"){case"bottom-right":default:h=a+n-l-p,g=s+r-o-95;break;case"bottom-left":h=a+p,g=s+r-o-95;break;case"top-right":h=a+n-l-p,g=s+p;break;case"top-left":h=a+p,g=s+p}h=Math.max(a,Math.min(h,a+n-l)),g=Math.max(s,Math.min(g,s+r-o-95)),this.wrapper.style.left=`${h}px`,this.wrapper.style.top=`${g}px`,this.wrapper.style.right="auto",this.wrapper.style.bottom="auto"}showSettingsMenu(){this._panel?.show()}hideSettingsMenu({focusButton:e=!0}={}){this._panel?.hide({focusButton:e})}_showModeBadge(e){this._panel?.showBadge(e)}_hideModeBadge(){this._panel?.hideBadge()}toggleKeyboardDragMode(){if(!this.draggable)return;const e=this.draggable.keyboardDragMode;this.draggable.toggleKeyboardDragMode();const t=this.draggable.keyboardDragMode;!e&&t?(this._enableMoveMode(),this._showModeBadge(r.t("player.signDragModeHint")),this.player.keyboardManager?.announce(r.t("player.signLanguageDragActive"))):e&&!t&&(this._hideModeBadge(),this.player.keyboardManager?.announce(r.t("player.signDragModeDisabled"))),this._updateDragOptionState()}_enableMoveMode(){this.wrapper?.classList.add(`${this.player.options.classPrefix}-sign-move-mode`),this._updateResizeOptionState(),setTimeout(()=>{this.wrapper?.classList.remove(`${this.player.options.classPrefix}-sign-move-mode`)},2e3)}toggleResizeMode({focus:e=!0}={}){return!!this.draggable&&(this.draggable.pointerResizeMode?(this.draggable.disablePointerResizeMode({focus:e}),this._updateResizeOptionState(),!1):(this.draggable.enablePointerResizeMode({focus:e}),this._updateResizeOptionState(),!0))}_updateDragOptionState(){this._panel?.refreshDragState()}_updateResizeOptionState(){this._panel?.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(){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(),this.wrapper?.parentNode&&(this.video&&(this.video.pause(),this.video.src=""),this.wrapper.parentNode.removeChild(this.wrapper)),this.wrapper=null,this.video=null,this.settingsButton=null}destroy(){this.cleanup(),this.enabled=!1}};export{l as SignLanguageManager};
|
|
6
|
+
import{DraggablePanel as e,createLabeledSelect as t,preventDragOnElement as i}from"./vidply.chunk-3EEDXU4T.min.js";import{DraggableResizable as a}from"./vidply.chunk-PL3P3JHR.min.js";import{createIconElement as s}from"./vidply.chunk-6OGHHIYP.min.js";import"./vidply.chunk-XA4M574A.min.js";import"./vidply.chunk-MWEBITCP.min.js";import{DOMUtils as n,i18n as r}from"./vidply.chunk-QQZGV7TD.min.js";var l=class{player;_mainViewMutedBefore;_mainViewUsingSourceSwap;currentLanguage;customKeyHandler;desiredPosition;draggable;handlers;header;inMainView;interactionHandlers;mainViewOriginalSources;mainViewOriginalSrc;resizeHandles;selector;settingsButton;settingsHandlers;sources;src;enabled;video;wrapper;_panel=null;get settingsMenu(){return this._panel?.settingsMenu??null}set settingsMenu(e){}get settingsMenuVisible(){return this._panel?.settingsMenuVisible??!1}set settingsMenuVisible(e){}get settingsMenuJustOpened(){return this._panel?.justOpened??!1}set settingsMenuJustOpened(e){}get dragOptionButton(){return this._panel?.dragOptionButton??null}get dragOptionText(){return this._panel?.dragOptionText??null}get resizeOptionButton(){return this._panel?.resizeOptionButton??null}get resizeOptionText(){return this._panel?.resizeOptionText??null}constructor(e){this.player=e,this.src=e.options.signLanguageSrc,this.sources=e.options.signLanguageSources||{},this.currentLanguage=null,this.desiredPosition=e.options.signLanguagePosition||"bottom-right",this.wrapper=null,this.header=null,this.video=null,this.selector=null,this.settingsButton=null,this.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}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,a=null;e?(i=this._determineInitialLanguage(),a=this.sources[i]??null,this.currentLanguage=i):a=this.src,this._createWrapper(),this._createHeader(e,i),this._createVideo(a),this._createResizeHandles();const s=this.wrapper,n=this.video;s&&n&&(s.appendChild(this.header),s.appendChild(n),this.resizeHandles.forEach(e=>s.appendChild(e)),this._applyInitialSize(),this.player.container.appendChild(s),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 a=this.player.element,s=this.player.state.currentTime,n=this.player.state.playing,r=a.poster||a.getAttribute("poster")||this.player.options.poster,l=s<.1&&!n,o=Array.from(a.querySelectorAll("source")),h=o[0];if(this.mainViewOriginalSrc=a.currentSrc&&a.currentSrc.length>0?a.currentSrc:a.src&&a.src.length>0?a.src:h&&h.getAttribute("src")?h.getAttribute("src"):"",this._mainViewMutedBefore=this.player.state.muted,r&&l&&"VIDEO"===a.tagName&&(a.poster=r),o.length>0){this.mainViewOriginalSources=o,this.mainViewOriginalSources.forEach(e=>e.remove());const e=document.createElement("source"),t=i??"";e.setAttribute("src",t);const s=this._inferVideoType(t);s&&e.setAttribute("type",s);const n=a.querySelector("track");n?a.insertBefore(e,n):a.appendChild(e),this._mainViewUsingSourceSwap=!0}else a.src=i??"",this._mainViewUsingSourceSwap=!1;a.muted=!0,this.player.currentSource=i??"","function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache(),a.load(),await this._waitForMediaReadyMainView(s>0||n),s>0&&(this.player.seek(s),await new Promise(e=>setTimeout(e,100))),n?await this.player.play():(this.player.pause(),!l&&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(){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 e=this.player.element,t=this.player.state.currentTime,i=this.player.state.playing;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);if(e.muted=this._mainViewMutedBefore,this.player.currentSource=this.mainViewOriginalSrc||e.querySelector("source")?.src||"","function"==typeof this.player.invalidateTrackCache&&this.player.invalidateTrackCache(),e.load(),await this._waitForMediaReadyMainView(t>0||i),t>0&&this.player.seek(t),i)try{await this.player.play()}catch(e){this.player.log?.("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",a),e()},a=()=>{t.removeEventListener("loadedmetadata",i),t.removeEventListener("error",a),e()};t.addEventListener("loadedmetadata",i),t.addEventListener("error",a,{once:!0})}),a=new Promise(e=>setTimeout(e,1e4));await Promise.race([i,a]),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(){if(this.player.captionManager&&this.player.captionManager.currentTrack){const e=this.player.captionManager.currentTrack.language?.toLowerCase().split("-")[0];if(e&&this.sources[e])return e}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",r.t("player.signLanguageDragResize"))}_createHeader(e,t){const i=this.player.options.classPrefix;this.header=n.createElement("div",{className:`${i}-sign-language-header`,attributes:{tabindex:"0"}});const a=n.createElement("div",{className:`${i}-sign-language-header-left`}),s=n.createElement("h3",{textContent:r.t("player.signLanguageVideo")});this._createSettingsButton(a),e&&this._createLanguageSelector(a,t),a.appendChild(s);const l=this._createCloseButton();this.header.appendChild(a),this.header.appendChild(l)}_createSettingsButton(t){const i=this.player.options.classPrefix,a=r.t("player.signLanguageSettings");this.settingsButton=n.createElement("button",{className:`${i}-sign-language-settings`,attributes:{type:"button","aria-label":a,"aria-expanded":"false"}}),this.settingsButton.appendChild(s("settings")),n.attachTooltip(this.settingsButton,a,i),this._panel=new e({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=>{this.toggleKeyboardDragMode(),e.hide({focusButton:!1}),this.draggable?.keyboardDragMode&&setTimeout(()=>{this.wrapper?.focus?.({preventScroll:!0})},20)},onResizeItemClick:e=>{this.toggleResizeMode({focus:!1})?(e.hide({focusButton:!1}),setTimeout(()=>{this.wrapper?.focus?.({preventScroll:!0})},20)):e.hide({focusButton:!0})}}),this.settingsHandlers={click:e=>{e.preventDefault(),e.stopPropagation(),this._panel?.markJustOpenedForClick(),this._panel?.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(e,a){const s=this.player.options.classPrefix,r=`${s}-sign-language-select-${Date.now()}`,l=Object.keys(this.sources).map(e=>({value:e,text:this.getLanguageLabel(e),selected:e===a})),{label:o,select:h}=t({classPrefix:s,labelClass:`${s}-sign-language-label`,selectClass:`${s}-sign-language-select`,labelText:"settings.language",selectId:r,options:l,onChange:e=>{e.stopPropagation(),this.switchLanguage(e.target.value)}});this.selector=h;const g=n.createElement("div",{className:`${s}-sign-language-selector-wrapper`});g.appendChild(o),g.appendChild(this.selector),i(g),e.appendChild(g)}_createCloseButton(){const e=this.player.options.classPrefix,t=r.t("player.closeSignLanguage"),i=n.createElement("button",{className:`${e}-sign-language-close`,attributes:{type:"button","aria-label":t}});return i.appendChild(s("close")),n.attachTooltip(i,t,e),i.addEventListener("click",()=>{this.disable();const e=this.player.controlBar?.controls?.signLanguage;e&&this.player.setManagedTimeout(()=>{e.focus({preventScroll:!0})},0)},{signal:this.player.lifecycleSignal}),i}_createVideo(e){this.video=document.createElement("video"),this.video.className="vidply-sign-language-video",this.video.src=e??"",this.video.setAttribute("aria-label",r.t("player.signLanguage")),this.video.muted=!0,this.video.setAttribute("playsinline","")}_createResizeHandles(){const e=this.player.options.classPrefix;this.resizeHandles=["n","s","e","w","ne","nw","se","sw"].map(t=>{const i=n.createElement("div",{className:`${e}-sign-resize-handle ${e}-sign-resize-${t}`,attributes:{"data-direction":t,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return i.style.display="none",i})}_applyInitialSize(){const e=this.wrapper;if(!e)return;const t=this.player.storage.getSignLanguagePreferences();e.style.width=t?.size?.width?t.size.width:"280px",e.style.height="auto"}_setupInteraction(){if(window.innerWidth<768&&!this.player.state.fullscreen&&!1===this.player?.options?.signLanguageDragOnMobile)return void(this.draggable&&(this.draggable.destroy(),this.draggable=null));if(this.draggable)return;const e=this.wrapper;if(!e)return;const t=this.player.options.classPrefix;this.draggable=new a(e,{dragHandle:this.wrapper,resizeHandles:this.resizeHandles,constrainToViewport:!0,maintainAspectRatio:!0,minWidth:150,minHeight:100,classPrefix:`${t}-sign`,keyboardDragKey:"d",keyboardResizeKey:"r",keyboardStep:10,keyboardStepLarge:50,pointerResizeIndicatorText:r.t("player.signLanguageResizeActive"),onPointerResizeToggle:e=>{this.resizeHandles.forEach(t=>{t.style.display=e?"block":"none"}),e?(this._showModeBadge(r.t("player.signResizeModeHint")),this.player.keyboardManager?.announce(r.t("player.signLanguageResizeActive"))):(this._hideModeBadge(),this.player.keyboardManager?.announce(r.t("player.signResizeModeDisabled")))},onDragStart(e){const i=e.target;return!(i.closest(`.${t}-sign-language-close`)||i.closest(`.${t}-sign-language-settings`)||i.closest(`.${t}-sign-language-select`)||i.closest(`.${t}-sign-language-label`)||i.closest(`.${t}-sign-language-settings-menu`))}}),this._setupCustomKeyHandler(),this.interactionHandlers={draggable:this.draggable,customKeyHandler:this.customKeyHandler}}_setupCustomKeyHandler(){this.customKeyHandler=e=>{const t=e.key.toLowerCase();if(!this.settingsMenuVisible){if("home"===t)return e.preventDefault(),e.stopPropagation(),void(this.draggable&&(this.draggable.pointerResizeMode&&this.draggable.disablePointerResizeMode(),this.draggable.manuallyPositioned=!1,this.constrainPosition()));if("r"===t)return e.preventDefault(),e.stopPropagation(),void(this.toggleResizeMode()&&this.wrapper?.focus({preventScroll:!0}));if("escape"===t){if(e.preventDefault(),e.stopPropagation(),this.draggable?.pointerResizeMode)return void this.draggable.disablePointerResizeMode();if(this.draggable?.keyboardDragMode)return this.draggable.disableKeyboardDragMode(),this._hideModeBadge(),this._updateDragOptionState(),void this.player.keyboardManager?.announce(r.t("player.signDragModeDisabled"));this.disable();const t=this.player.controlBar?.controls?.signLanguage;t&&setTimeout(()=>{t.focus({preventScroll:!0})},0)}}},this.wrapper?.addEventListener("keydown",this.customKeyHandler)}_setupEventHandlers(e){this.handlers={play:()=>{this.video&&this.video.play()},pause:()=>{this.video&&this.video.pause()},timeupdate:()=>{this.video&&Math.abs(this.video.currentTime-this.player.state.currentTime)>.5&&(this.video.currentTime=this.player.state.currentTime)},ratechange:()=>{this.video&&(this.video.playbackRate=this.player.state.playbackSpeed)}},this.player.on("play",this.handlers.play),this.player.on("pause",this.handlers.pause),this.player.on("timeupdate",this.handlers.timeupdate),this.player.on("ratechange",this.handlers.ratechange),e&&(this.handlers.captionChange=()=>{if(this.player.captionManager?.currentTrack&&this.selector){const e=this.player.captionManager.currentTrack.language?.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(){if(!this.wrapper||!this.player.videoWrapper)return;if(this.draggable?.manuallyPositioned)return;this.wrapper.style.width||(this.wrapper.style.width="280px");const e=this.player.videoWrapper.getBoundingClientRect(),t=this.player.container.getBoundingClientRect(),i=this.wrapper.getBoundingClientRect(),a=e.left-t.left,s=e.top-t.top,n=e.width,r=e.height,l=i.width||280,o=i.height||157.5;let h,g;const p=16;switch(this.desiredPosition||"bottom-right"){case"bottom-right":default:h=a+n-l-p,g=s+r-o-95;break;case"bottom-left":h=a+p,g=s+r-o-95;break;case"top-right":h=a+n-l-p,g=s+p;break;case"top-left":h=a+p,g=s+p}h=Math.max(a,Math.min(h,a+n-l)),g=Math.max(s,Math.min(g,s+r-o-95)),this.wrapper.style.left=`${h}px`,this.wrapper.style.top=`${g}px`,this.wrapper.style.right="auto",this.wrapper.style.bottom="auto"}showSettingsMenu(){this._panel?.show()}hideSettingsMenu({focusButton:e=!0}={}){this._panel?.hide({focusButton:e})}_showModeBadge(e){this._panel?.showBadge(e)}_hideModeBadge(){this._panel?.hideBadge()}toggleKeyboardDragMode(){if(!this.draggable)return;const e=this.draggable.keyboardDragMode;this.draggable.toggleKeyboardDragMode();const t=this.draggable.keyboardDragMode;!e&&t?(this._enableMoveMode(),this._showModeBadge(r.t("player.signDragModeHint")),this.player.keyboardManager?.announce(r.t("player.signLanguageDragActive"))):e&&!t&&(this._hideModeBadge(),this.player.keyboardManager?.announce(r.t("player.signDragModeDisabled"))),this._updateDragOptionState()}_enableMoveMode(){this.wrapper?.classList.add(`${this.player.options.classPrefix}-sign-move-mode`),this._updateResizeOptionState(),setTimeout(()=>{this.wrapper?.classList.remove(`${this.player.options.classPrefix}-sign-move-mode`)},2e3)}toggleResizeMode({focus:e=!0}={}){return!!this.draggable&&(this.draggable.pointerResizeMode?(this.draggable.disablePointerResizeMode({focus:e}),this._updateResizeOptionState(),!1):(this.draggable.enablePointerResizeMode({focus:e}),this._updateResizeOptionState(),!0))}_updateDragOptionState(){this._panel?.refreshDragState()}_updateResizeOptionState(){this._panel?.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(){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(),this.wrapper?.parentNode&&(this.video&&(this.video.pause(),this.video.src=""),this.wrapper.parentNode.removeChild(this.wrapper)),this.wrapper=null,this.video=null,this.settingsButton=null}destroy(){this.cleanup(),this.enabled=!1}};export{l as SignLanguageManager};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* VidPly v1.2.
|
|
2
|
+
* VidPly v1.2.3 - Universal, Accessible Video Player
|
|
3
3
|
* (c) 2026 Matthias Peltzer
|
|
4
4
|
* Released under GPL-2.0-or-later License
|
|
5
5
|
*/
|
|
6
|
-
import{loadScriptOnce as t}from"./vidply.chunk-
|
|
6
|
+
import{loadScriptOnce as t}from"./vidply.chunk-5HTX5QXW.min.js";var e=class{player;media;widget;trackUrl;isReady;iframe;iframeId;_previousVolume;_initTimeoutId;_initController;constructor(t){this.player=t,this.media=t.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(){if(this.trackUrl=this.player.currentSource||this.player.element.src||this.player.element.querySelector("source")?.src||null,!this.trackUrl||!this.isValidSoundCloudUrl(this.trackUrl))throw new Error("Invalid SoundCloud URL");await this.loadSoundCloudAPI(),this.createIframe(),await this.initializeWidget()}isValidSoundCloudUrl(t){if("string"!=typeof t||!t)return!1;let e;try{e=new URL(t)}catch{return!1}return"https:"===e.protocol&&new Set(["soundcloud.com","www.soundcloud.com","m.soundcloud.com","api.soundcloud.com","api-v2.soundcloud.com"]).has(e.hostname.toLowerCase())}isPlaylist(){return this.trackUrl&&this.trackUrl.includes("/sets/")}getEmbedUrl(){const t=this.trackUrl;if(!t)throw new Error("SoundCloudRenderer.getEmbedUrl(): trackUrl is not set");return`https://w.soundcloud.com/player/?${new URLSearchParams({url:t,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():t("https://w.soundcloud.com/player/api.js",{isReady:()=>void 0!==window.SC})}createIframe(){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%",this.player.element.parentNode?.insertBefore(this.iframe,this.player.element)}async initializeWidget(){return new Promise((t,e)=>{const i=this.iframe;if(!i||void 0===window.SC)return void e(new Error("SoundCloud widget cannot initialize"));const s=window.SC;s?(this._initController=new AbortController,i.addEventListener("load",()=>{try{const e=s.Widget(i);this.widget=e,e.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"),e.getCurrentSound(t=>{t&&(this.player.state.duration=t.duration/1e3,this.player.emit("loadedmetadata"))}),t()}),e.bind(s.Widget.Events.ERROR,(...t)=>{const e=t[0];this.player.handleError(new Error(`SoundCloud error: ${e?.message||"Unknown error"}`))})}catch(t){e(t)}},{signal:this._initController.signal}),this._initTimeoutId=setTimeout(()=>{this._initTimeoutId=null,this.isReady||e(new Error("SoundCloud widget initialization timeout"))},1e4)):e(new Error("SoundCloud widget cannot initialize"))})}attachEvents(){const t=this.widget,e=window.SC;if(!t||!e)return;const i=e.Widget.Events;t.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)}),t.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)}),t.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())}),t.bind(i.PLAY_PROGRESS,(...t)=>{const e=t[0].currentPosition/1e3;this.player.state.currentTime=e,this.player.emit("timeupdate",e),this.player.options.onTimeUpdate&&this.player.options.onTimeUpdate.call(this.player,e)}),t.bind(i.SEEK,(...t)=>{this.player.state.currentTime=t[0].currentPosition/1e3,this.player.emit("seeked")}),t.bind(i.LOAD_PROGRESS,(...t)=>{const e=t[0];this.player.state.duration&&void 0!==e.loadedProgress&&this.player.emit("progress",e.loadedProgress*this.player.state.duration)})}play(){if(this.isReady&&this.widget){const t=window.scrollX,e=window.scrollY;this.widget.play(),window.scrollTo(t,e)}}pause(){this.isReady&&this.widget&&this.widget.pause()}seek(t){this.isReady&&this.widget&&(this.widget.seekTo(1e3*t),this.player.state.currentTime=t)}setVolume(t){this.isReady&&this.widget&&(this.widget.setVolume(100*t),this.player.state.volume=t)}setMuted(t){const e=this.widget;this.isReady&&e&&(t?e.getVolume(t=>{this._previousVolume=t,e.setVolume(0)}):e.setVolume(this._previousVolume||100),this.player.state.muted=t)}setPlaybackSpeed(t){this.player.log("SoundCloud does not support playback speed control","warn")}getCurrentSound(){return new Promise(t=>{this.isReady&&this.widget?this.widget.getCurrentSound(e=>{t(e)}):t(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 t=window.SC.Widget.Events;try{this.widget.unbind(t.READY),this.widget.unbind(t.PLAY),this.widget.unbind(t.PAUSE),this.widget.unbind(t.FINISH),this.widget.unbind(t.PLAY_PROGRESS),this.widget.unbind(t.SEEK),this.widget.unbind(t.LOAD_PROGRESS),this.widget.unbind(t.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}},i=e;export{e as SoundCloudRenderer,i as default};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* VidPly v1.2.
|
|
2
|
+
* VidPly v1.2.3 - Universal, Accessible Video Player
|
|
3
3
|
* (c) 2026 Matthias Peltzer
|
|
4
4
|
* Released under GPL-2.0-or-later License
|
|
5
5
|
*/
|
|
6
|
-
import{DraggablePanel as t,createLabeledSelect as e,createMenuItem as i,preventDragOnElement as s}from"./vidply.chunk-7S5AFTST.min.js";import{DraggableResizable as a}from"./vidply.chunk-G6KGXNEW.min.js";import{TimeUtils as r}from"./vidply.chunk-WRVDVD33.min.js";import{createIconElement as n}from"./vidply.chunk-JPMAK3NS.min.js";import{focusElement as l}from"./vidply.chunk-L4O44K63.min.js";import{StorageManager as o,deriveTrackLabel as p}from"./vidply.chunk-X2FQEQYR.min.js";import"./vidply.chunk-M76ABMKB.min.js";import{DOMUtils as c,i18n as h}from"./vidply.chunk-6ECBIYVI.min.js";var d=class{player;_cueUpdateTimeout;autoscrollCheckbox=null;autoscrollEnabled;availableTranscriptLanguages;currentActiveEntry;currentTranscriptLanguage;customKeyHandler=null;documentClickHandlerAdded=!1;draggableResizable;handlers={};headerLeft=null;isVisible;languageLabel;languageSelector;languageSelectorHandler;languageSelectorWrapper=null;liveRegion;metadataCueChangeHandler=null;metadataCues;settingsButton;showTimestamps;showTimestampsButton=null;showTimestampsText=null;storage;styleDialog;styleDialogJustOpened;styleDialogVisible;timeouts;transcriptContent=null;transcriptEntries;transcriptHeader=null;transcriptResizeHandles;transcriptStyle;transcriptWindow;_dashActiveLang;_vttCache;_panel=null;get settingsMenu(){return this._panel?.settingsMenu??null}set settingsMenu(t){}get settingsMenuVisible(){return this._panel?.settingsMenuVisible??!1}set settingsMenuVisible(t){}get settingsMenuJustOpened(){return this._panel?.justOpened??!1}set settingsMenuJustOpened(t){}get dragOptionButton(){return this._panel?.dragOptionButton??null}get dragOptionText(){return this._panel?.dragOptionText??null}get resizeOptionButton(){return this._panel?.resizeOptionButton??null}get resizeOptionText(){return this._panel?.resizeOptionText??null}constructor(t){this.player=t,this.transcriptWindow=null,this.transcriptEntries=[],this.metadataCues=[],this.currentActiveEntry=null,this.isVisible=!1,this.storage=new o("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 e=this.storage.getTranscriptPreferences();this.autoscrollEnabled="boolean"!=typeof e?.autoscroll||e.autoscroll,this.showTimestamps="boolean"==typeof e?.showTimestamps&&e.showTimestamps,this.transcriptStyle={fontSize:("string"==typeof e?.fontSize?e.fontSize:void 0)||("string"==typeof this.player.options.transcriptFontSize?this.player.options.transcriptFontSize:void 0)||"100%",fontFamily:("string"==typeof e?.fontFamily?e.fontFamily:void 0)||("string"==typeof this.player.options.transcriptFontFamily?this.player.options.transcriptFontFamily:void 0)||"sans-serif",color:("string"==typeof e?.color?e.color:void 0)||("string"==typeof this.player.options.transcriptColor?this.player.options.transcriptColor:void 0)||"#ffffff",backgroundColor:("string"==typeof e?.backgroundColor?e.backgroundColor:void 0)||("string"==typeof this.player.options.transcriptBackgroundColor?this.player.options.transcriptBackgroundColor:void 0)||"#1e1e1e",opacity:("number"==typeof e?.opacity?e.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()}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=t=>{t&&this.isVisible&&this.hideTranscript()},this.player.on("floatingchange",this.handlers.floatingchange)}_requestStreamingTrack(t){if(!t)return;const e=this.player.renderer;e?.isStreaming&&"function"==typeof e.activateTextTrackForLanguage&&this._dashActiveLang!==t&&(this._dashActiveLang=t,e.activateTextTrackForLanguage(t))}toggleTranscript(){this.isVisible?this.hideTranscript():this.showTranscript()}showTranscript(){if(this.player.state?.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 l(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),l(this.settingsButton,{delay:150})),this.isVisible=!0}hideTranscript({focusButton:t=!1}={}){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(),t){const t=this.player.controlBar?.controls?.transcript;t&&"function"==typeof t.focus&&t.focus({preventScroll:!0})}}createTranscriptWindow(){this.transcriptWindow=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-window`,attributes:{role:"dialog","aria-label":h.t("transcript.ariaLabel"),tabindex:"-1"}}),this.transcriptHeader=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header`,attributes:{tabindex:"0"}}),this.headerLeft=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header-left`});const a=h.t("transcript.settingsMenu");this.settingsButton=c.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings`,attributes:{type:"button","aria-label":a,"aria-expanded":"false"}}),this.settingsButton.appendChild(n("settings")),c.attachTooltip(this.settingsButton,a,this.player.options.classPrefix),this._panel=new t({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:t=>{this.toggleKeyboardDragMode(),t.hide()},onResizeItemClick:t=>{this.toggleResizeMode({focus:!1})?(t.hide({focusButton:!1}),setTimeout(()=>{this.transcriptWindow?.focus({preventScroll:!0})},20)):t.hide({focusButton:!0})},buildExtraItems:({menu:t,itemClass:e,classPrefix:s,stripInlineTooltip:a})=>{const r=i({classPrefix:s,itemClass:e,icon:"settings",label:"transcript.styleTranscript",onClick:t=>{t.preventDefault(),t.stopPropagation(),this._panel?.hide(),setTimeout(()=>{this.showStyleDialog()},50)}});a(r),t.appendChild(r);const n=i({classPrefix:s,itemClass:e,icon:"clock",label:"transcript.showTimestamps",hasTextClass:!0,onClick:()=>{this.toggleShowTimestamps()}});n.setAttribute("role","switch"),n.setAttribute("aria-checked",this.showTimestamps?"true":"false"),a(n),this.showTimestampsButton=n,this.showTimestampsText=n.querySelector(`.${s}-settings-text`),this.updateShowTimestampsState(),t.appendChild(n)}}),this.handlers.settingsClick=t=>{t.preventDefault(),t.stopPropagation(),this._panel?.markJustOpenedForClick(),this._panel?.toggle()},this.settingsButton.addEventListener("click",this.handlers.settingsClick),this.handlers.settingsKeydown=t=>{"d"===t.key||"D"===t.key?(t.preventDefault(),t.stopPropagation(),this.toggleKeyboardDragMode()):"r"===t.key||"R"===t.key?(t.preventDefault(),t.stopPropagation(),this.toggleResizeMode()):"Escape"===t.key&&this.settingsMenuVisible&&(t.preventDefault(),t.stopPropagation(),this.hideSettingsMenu())},this.settingsButton.addEventListener("keydown",this.handlers.settingsKeydown);const r=c.createElement("h3",{textContent:`${h.t("transcript.title")}. ${h.t("transcript.dragResizePrompt")}`}),l=`${this.player.options.classPrefix}-transcript-autoscroll-${Date.now()}`,o=c.createElement("label",{className:`${this.player.options.classPrefix}-transcript-autoscroll-label`,attributes:{for:l}});this.autoscrollCheckbox=c.createElement("input",{attributes:{id:l,type:"checkbox"}}),this.autoscrollEnabled&&(this.autoscrollCheckbox.checked=!0);const p=c.createElement("span",{textContent:h.t("transcript.autoscroll"),className:`${this.player.options.classPrefix}-transcript-autoscroll-text`});o.appendChild(this.autoscrollCheckbox),o.appendChild(p),this.autoscrollCheckbox.addEventListener("change",t=>{this.autoscrollEnabled=t.target.checked,this.saveAutoscrollPreference()}),s(o),this.transcriptHeader.appendChild(r),this.headerLeft.appendChild(this.settingsButton),this.headerLeft.appendChild(o);const d=`${this.player.options.classPrefix}-transcript-language-select-${Date.now()}`,{label:u,select:g}=e({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:d,hidden:!1});this.languageLabel=u,this.languageSelector=g;const y=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-language-wrapper`,attributes:{style:"display: none;"}});y.appendChild(u),y.appendChild(g),this.languageSelectorWrapper=y,s(y),this.headerLeft&&this.headerLeft.appendChild(y);const m=h.t("transcript.close"),b=c.createElement("button",{className:`${this.player.options.classPrefix}-transcript-close`,attributes:{type:"button","aria-label":m}});b.appendChild(n("close")),c.attachTooltip(b,m,this.player.options.classPrefix),b.addEventListener("click",()=>this.hideTranscript({focusButton:!0})),this.transcriptHeader.appendChild(this.headerLeft),this.transcriptHeader.appendChild(b),this.transcriptContent=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-content`}),this.transcriptWindow.appendChild(this.transcriptHeader),this.transcriptWindow.appendChild(this.transcriptContent),this.createResizeHandles(),this.liveRegion=c.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=t=>{if(this.styleDialogJustOpened)return;const e=t.target;this.styleDialogVisible&&this.styleDialog&&e&&!this.styleDialog.contains(e)&&this.hideStyleDialog()},this.documentClickHandlerAdded=!1;let f=null;this.handlers.resize=()=>{f&&this.clearManagedTimeout(f),f=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(e=>{const i=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-resize-handle ${this.player.options.classPrefix}-transcript-resize-${e}`,attributes:{"data-direction":e,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return i.style.display="none",t.appendChild(i),i}))}positionTranscript(){const t=this.player;if(!this.transcriptWindow||!t.videoWrapper||!this.isVisible)return;if(this.draggableResizable&&this.draggableResizable.manuallyPositioned)return;const e=window.innerWidth<768,i=t.videoWrapper.getBoundingClientRect(),s=this.player.state.fullscreen;if(e&&!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 e=t.videoWrapper;e&&e.parentNode&&e.nextSibling!==this.transcriptWindow&&e.parentNode.insertBefore(this.transcriptWindow,e.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 t=260,e=Math.max(t,window.innerWidth-40),i=parseFloat(this.transcriptWindow.style.width)||400,s=Math.max(t,Math.min(i,e));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 e=parseFloat(this.transcriptWindow.style.width)||400,s=20,a=260,r=this.player.container.getBoundingClientRect();(()=>{"static"===window.getComputedStyle(this.player.container).position&&(this.player.container.style.position="relative")})();const n=window.innerWidth-i.right-s;if(n<e||!(n>=a)){const e=320,s=280,n=Math.min(e,i.width-40),l=Math.min(s,i.height-120),o=t.videoWrapper.getBoundingClientRect(),p=70,c=Math.max(180,l),h=o.bottom-r.top-p-c,d=r.right-o.right+12;this.transcriptWindow.style.position="absolute",this.transcriptWindow.style.left="auto",this.transcriptWindow.style.right=`${d}px`,this.transcriptWindow.style.top=`${h}px`,this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.width=`${Math.max(a,n)}px`,this.transcriptWindow.style.maxWidth=`${e}px`,this.transcriptWindow.style.height=`${c}px`,this.transcriptWindow.style.maxHeight=`${s}px`,this.transcriptWindow.style.boxShadow="0 4px 16px rgba(0, 0, 0, 0.6)"}else{const t=i.right-r.left+s,l=Math.max(a,Math.min(e,n)),o=i.height;this.transcriptWindow.style.position="absolute",this.transcriptWindow.style.left=`${t}px`,this.transcriptWindow.style.right="auto",this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.top="0",this.transcriptWindow.style.height=`${o}px`,this.transcriptWindow.style.maxHeight="none",this.transcriptWindow.style.width=`${l}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 t=this.player.textTracks,e=new Map;return t.forEach(t=>{if(("captions"===t.kind||"subtitles"===t.kind)&&!t._vidplyStale){const i=(t.language??"").trim(),s=p(t.label,t.language,"player.captions"),a=i||s;a&&!e.has(a)&&e.set(a,{language:i,label:s,track:t})}}),Array.from(e.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(e=>{const i={value:e.language||e.label};e.language&&(i.lang=e.language);const s=c.createElement("option",{textContent:e.label,attributes:i});t.appendChild(s)}),this.currentTranscriptLanguage)t.value=this.currentTranscriptLanguage;else if(this.availableTranscriptLanguages.length>0){const e=this.player.textTracks.find(t=>("captions"===t.kind||"subtitles"===t.kind)&&"showing"===t.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 e=t=>{this.currentTranscriptLanguage=t.target.value,this._requestStreamingTrack(this.currentTranscriptLanguage),this.loadTranscriptData(),this.transcriptContent&&this.currentTranscriptLanguage&&this.transcriptContent.setAttribute("lang",this.currentTranscriptLanguage)};this.languageSelectorHandler=e,t.addEventListener("change",e)}_parseVTT(t){const e=[],i=t.replace(/\r\n/g,"\n").split(/\n\n+/);for(const t of i){const i=t.trim().split("\n");let s=-1;for(let t=0;t<i.length;t++)if(i[t]?.includes("--\x3e")){s=t;break}if(s<0)continue;const a=i[s]?.match(/(\d{1,2}:)?(\d{2}):(\d{2})\.(\d{3})\s*-->\s*(\d{1,2}:)?(\d{2}):(\d{2})\.(\d{3})/);if(!a)continue;const r=(a[1]?3600*parseInt(a[1]):0)+60*parseInt(a[2]??"0")+parseInt(a[3]??"0")+parseInt(a[4]??"0")/1e3,n=(a[5]?3600*parseInt(a[5]):0)+60*parseInt(a[6]??"0")+parseInt(a[7]??"0")+parseInt(a[8]??"0")/1e3,l=i.slice(s+1).join("\n").trim();l&&e.push({cue:{startTime:r,endTime:n,text:l,id:""},type:"caption"})}return e}async _loadVttTranscript(t){const e=this._vttCache.get(t);if(e)return e;const i=this.player.renderer;if(!i?.isStreaming||"function"!=typeof i.getTextTrackURLs)return null;const s=i.getTextTrackURLs().find(e=>e.lang===t||e.lang.startsWith(t)||t.startsWith(e.lang));if(!s)return null;const a=this._buildFetchSignal(1e4);try{const e=await fetch(s.url,{signal:a});if(!e.ok)return null;let i=await e.text();if(i.trimStart().startsWith("#EXTM3U")){const t=i.split("\n").map(t=>t.trim()).find(t=>t&&!t.startsWith("#"));if(!t)return null;const e=s.url.substring(0,s.url.lastIndexOf("/")+1),a=t.startsWith("http")?t:new URL(t,e).href,r=await fetch(a,{signal:this._buildFetchSignal(1e4)});if(!r.ok)return null;i=await r.text()}const r=this._parseVTT(i);return r.length>0&&this._vttCache.set(t,r),r}catch{return null}}_buildFetchSignal(t){const e=[],i=this.player.lifecycleSignal;if(i&&e.push(i),"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&e.push(AbortSignal.timeout(t)),0===e.length)return;if(1===e.length)return e[0];const s=AbortSignal.any;return s?s(e):e[0]}loadTranscriptData(){this.transcriptEntries=[],this.currentActiveEntry=null,this.transcriptContent&&(this.transcriptContent.innerHTML="");const t=this.player.textTracks;let e=null;if(this.currentTranscriptLanguage){const i=t.filter(t=>("captions"===t.kind||"subtitles"===t.kind)&&t.language===this.currentTranscriptLanguage&&!t._vidplyStale);e=i.find(t=>t.cues&&t.cues.length>0)||i[0]||null}if(!e){const i=t.filter(t=>("captions"===t.kind||"subtitles"===t.kind)&&!t._vidplyStale);e=i.find(t=>t.cues&&t.cues.length>0)||i[0]||null,e&&(this.currentTranscriptLanguage=e.language)}let i=null;this.currentTranscriptLanguage&&(i=t.find(t=>"descriptions"===t.kind&&t.language===this.currentTranscriptLanguage)||null),i||(i=t.find(t=>"descriptions"===t.kind)||null);const s=t.find(t=>"metadata"===t.kind);if(!e&&!i&&!s)return void this.showNoTranscriptMessage();[e,i,s].filter(t=>Boolean(t)).forEach(t=>{"disabled"===t.mode&&(t.mode="hidden")});const a=this.player.renderer,r=a?.isStreaming&&"function"==typeof a.getTextTrackURLs,n=this.currentTranscriptLanguage||(e?.language??"");if(r&&n){const t=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-loading`,textContent:h.t("transcript.loading")});return this.transcriptContent?.appendChild(t),void this._loadVttTranscript(n).then(t=>{this.isVisible&&this._renderTranscriptCues(t&&t.length>0?t:null,e,i,s)})}const l=e;if(l&&(!l.cues||0===l.cues.length)){const t=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-loading`,textContent:h.t("transcript.loading")});this.transcriptContent?.appendChild(t);const e=this.player.findTrackElement?.(l);if(e)l.addEventListener("load",()=>{this.loadTranscriptData()},{once:!0}),this.setManagedTimeout(()=>{this.loadTranscriptData()},1e3);else{let t=0;const e=()=>{t++,this.isVisible&&(l.cues&&l.cues.length>0?this.loadTranscriptData():t<40&&this.setManagedTimeout(e,500))};this.setManagedTimeout(e,300)}return}this._renderTranscriptCues(null,e,i,s)}_renderTranscriptCues(t,e,i,s){this.transcriptEntries=[],this.currentActiveEntry=null;const a=this.transcriptContent;a&&(a.innerHTML="");const r=[];t&&t.length>0?r.push(...t):e&&e.cues&&Array.from(e.cues).forEach(t=>{r.push({cue:t,type:"caption"})}),i&&i.cues&&Array.from(i.cues).forEach(t=>{r.push({cue:t,type:"description"})}),s&&s.cues&&(this.metadataCues=Array.from(s.cues),this.setupMetadataHandling()),r.sort((t,e)=>t.cue.startTime-e.cue.startTime),r.forEach((t,e)=>{const i=this.createTranscriptEntry(t.cue,e,t.type);this.transcriptEntries.push({element:i,cue:t.cue,type:t.type,startTime:t.cue.startTime,endTime:t.cue.endTime}),a?.appendChild(i)}),this.applyTranscriptStyles(),this.updateTimestampVisibility(),this.transcriptContent&&this.currentTranscriptLanguage&&this.transcriptContent.setAttribute("lang",this.currentTranscriptLanguage),this.updateLanguageSelector(),this.updateActiveEntry()}setupMetadataHandlingOnLoad(){const t=()=>{const t=this.player.textTracks.find(t=>"metadata"===t.kind);t?("disabled"===t.mode&&(t.mode="hidden"),this.metadataCueChangeHandler&&t.removeEventListener("cuechange",this.metadataCueChangeHandler),this.metadataCueChangeHandler=()=>{const e=Array.from(t.activeCues||[]);e.length>0&&this.player.options.debug&&console.log("[VidPly Metadata] Active cues:",e.map(t=>({start:t.startTime,end:t.endTime,text:t.text}))),e.forEach(t=>{this.handleMetadataCue(t)})},t.addEventListener("cuechange",this.metadataCueChangeHandler),this.player.options.debug&&console.log("[VidPly Metadata] Track enabled,",t.cues?t.cues.length:0,"cues available")):this.player.options.debug&&console.warn("[VidPly Metadata] No metadata track found")};t(),this.player.on("loadedmetadata",t)}setupMetadataHandling(){this.metadataCues&&0!==this.metadataCues.length&&this.player.options.debug&&console.log("[VidPly Metadata]",this.metadataCues.length,"cues stored from transcript load")}handleMetadataCue(t){const e=(t.text||"").trim();this.player.options.debug&&console.log("[VidPly Metadata] Processing cue:",{time:t.startTime,text:e}),this.player.emit("metadata",{time:t.startTime,endTime:t.endTime,text:e,cue:t}),e.includes("PAUSE")&&(this.player.state.paused||(this.player.options.debug&&console.log("[VidPly Metadata] Pausing video at",t.startTime),this.player.pause()),this.player.emit("metadata:pause",{time:t.startTime,text:e}));const i=e.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:t.startTime,target:s,element:a,text:e})}const s=e.match(/#[\w-]+/g);s&&(this.player.options.debug&&console.log("[VidPly Metadata] Hashtags found:",s),this.player.emit("metadata:hashtags",{time:t.startTime,hashtags:s,text:e}))}createTranscriptEntry(t,e,i="caption"){const s=this.stripVTTFormatting(t.text||""),a=(h.t("transcript.seekTo")||"Seek to {time}").replace("{time}",r.formatTime(t.startTime)).replace("{text}",s),n=c.createElement("button",{className:`${this.player.options.classPrefix}-transcript-entry ${this.player.options.classPrefix}-transcript-${i}`,attributes:{type:"button","data-start":String(t.startTime),"data-end":String(t.endTime),"data-type":i,"aria-label":`${a} — ${s}`}}),l=c.createElement("span",{className:`${this.player.options.classPrefix}-transcript-time`,textContent:r.formatTime(t.startTime),attributes:{"aria-hidden":"true"}}),o=c.createElement("span",{className:`${this.player.options.classPrefix}-transcript-text`,textContent:s});return n.appendChild(l),n.appendChild(o),n.addEventListener("click",()=>{this.player.seek(t.startTime),this.player.state.paused&&this.player.play()}),n}stripVTTFormatting(t){return t.replace(/<[^>]+>/g,"").replace(/\n/g," ").trim()}showNoTranscriptMessage(){const t=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-empty`,textContent:h.t("transcript.noTranscript")});this.transcriptContent?.appendChild(t)}updateActiveEntry(){if(!this.isVisible||0===this.transcriptEntries.length)return;const t=this.player.state.currentTime,e=this.transcriptEntries.find(e=>t>=e.startTime&&t<e.endTime);e&&e!==this.currentActiveEntry?(this.currentActiveEntry&&this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),e.element.classList.add(`${this.player.options.classPrefix}-transcript-entry-active`),this.scrollToEntry(e.element),this.currentActiveEntry=e):!e&&this.currentActiveEntry&&(this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),this.currentActiveEntry=null)}scrollToEntry(t){if(!this.transcriptContent||!this.autoscrollEnabled)return;const e=this.transcriptContent.getBoundingClientRect(),i=t.getBoundingClientRect();(i.top<e.top||i.bottom>e.bottom)&&this.transcriptContent.scrollTo({top:t.offsetTop-this.transcriptContent.clientHeight/2+t.clientHeight/2,behavior:"smooth"})}saveAutoscrollPreference(){const t=this.storage.getTranscriptPreferences()||{};t.autoscroll=this.autoscrollEnabled,this.storage.saveTranscriptPreferences(t)}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 a(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:h.t("transcript.resizeModeHint"),onPointerResizeToggle:t=>{this.transcriptResizeHandles.forEach(e=>{e.style.display=t?"block":"none"}),this.onPointerResizeModeChange(t)},onDragStart:t=>{const e=[`.${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 e)if(t.target.closest(i))return!1;return!0}}),this.customKeyHandler=t=>{const e=t.key.toLowerCase(),i=t.defaultPrevented;if(!this.settingsMenuVisible&&!this.styleDialogVisible){if("home"===e)return t.preventDefault(),t.stopPropagation(),void(this.draggableResizable&&(this.draggableResizable.pointerResizeMode&&this.draggableResizable.disablePointerResizeMode(),this.draggableResizable.manuallyPositioned=!1,this.positionTranscript(),this.updateResizeOptionState(),this.announceLive(h.t("transcript.positionReset"))));if("r"===e){if(i)return;return t.preventDefault(),t.stopPropagation(),void(this.toggleResizeMode()&&this.transcriptWindow?.focus({preventScroll:!0}))}return"escape"===e?this.draggableResizable&&this.draggableResizable.pointerResizeMode?(t.preventDefault(),t.stopPropagation(),void this.draggableResizable.disablePointerResizeMode()):this.draggableResizable&&this.draggableResizable.keyboardDragMode?(t.preventDefault(),t.stopPropagation(),this.draggableResizable.disableKeyboardDragMode(),void this.announceLive(h.t("transcript.dragModeDisabled"))):(t.preventDefault(),t.stopPropagation(),void this.hideTranscript({focusButton:!0})):void 0}};const t=this.customKeyHandler;this.transcriptWindow&&t&&this.transcriptWindow.addEventListener("keydown",t,{signal:this.player.lifecycleSignal})}toggleKeyboardDragMode(){if(this.draggableResizable){const t=this.draggableResizable.keyboardDragMode;this.draggableResizable.toggleKeyboardDragMode();const e=this.draggableResizable.keyboardDragMode;!t&&e?(this.enableMoveMode(),this._panel?.showBadge(h.t("transcript.dragModeBadge")),this.announceLive(h.t("transcript.dragModeEnabled"))):t&&!e&&(this._panel?.hideBadge(),this.announceLive(h.t("transcript.dragModeDisabled"))),this.updateDragOptionState(),this.settingsMenuVisible&&this.hideSettingsMenu(),this.transcriptWindow?.focus({preventScroll:!0})}}toggleSettingsMenu(){this.settingsMenuVisible?this.hideSettingsMenu():this.showSettingsMenu()}showSettingsMenu(){this._panel?.show()}positionSettingsMenu(){this._panel?.reposition()}hideSettingsMenu({focusButton:t=!0}={}){this._panel?.hide({focusButton:t})}enableMoveMode(){this.transcriptWindow?.classList.add(`${this.player.options.classPrefix}-transcript-move-mode`),setTimeout(()=>{this.transcriptWindow?.classList.remove(`${this.player.options.classPrefix}-transcript-move-mode`)},2e3)}toggleResizeMode({focus:t=!0}={}){return!!this.draggableResizable&&(this.draggableResizable.pointerResizeMode?(this.draggableResizable.disablePointerResizeMode({focus:t}),!1):(this.draggableResizable.enablePointerResizeMode({focus:t}),!0))}updateDragOptionState(){this._panel?.refreshDragState()}updateResizeOptionState(){this._panel?.refreshResizeState()}toggleShowTimestamps(){this.showTimestamps=!this.showTimestamps,this.updateShowTimestampsState(),this.updateTimestampVisibility(),this.saveTimestampsPreference()}updateShowTimestampsState(){if(!this.showTimestampsButton)return;const t=h.t(this.showTimestamps?"transcript.hideTimestamps":"transcript.showTimestamps"),e=h.t(this.showTimestamps?"transcript.hideTimestampsAria":"transcript.showTimestampsAria");this.showTimestampsButton.setAttribute("aria-checked",this.showTimestamps?"true":"false"),this.showTimestampsButton.setAttribute("aria-label",e),this.showTimestampsText&&(this.showTimestampsText.textContent=t)}updateTimestampVisibility(){this.transcriptContent&&this.transcriptContent.querySelectorAll(`.${this.player.options.classPrefix}-transcript-time`).forEach(t=>{t.style.display=this.showTimestamps?"":"none"})}saveTimestampsPreference(){const t=this.storage.getTranscriptPreferences()||{};t.showTimestamps=this.showTimestamps,this.storage.saveTranscriptPreferences(t)}showResizeModeIndicator(){this._panel?.showBadge(h.t("transcript.resizeModeBadge"))}hideResizeModeIndicator(){this._panel?.hideBadge()}onPointerResizeModeChange(t){this.updateResizeOptionState(),t?(this._panel?.showBadge(h.t("transcript.resizeModeBadge")),this.announceLive(h.t("transcript.resizeModeEnabled"))):(this._panel?.hideBadge(),this.announceLive(h.t("transcript.resizeModeDisabled")))}showStyleDialog(){if(this.documentClickHandlerAdded||setTimeout(()=>{const t=this.handlers.documentClick;t&&document.addEventListener("click",t,{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 t=this.styleDialog;if(!t)return;const e=t.querySelector("select, input");e&&e.focus({preventScroll:!0})},0);const t=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-dialog`});this.styleDialog=t;const e=c.createElement("h4",{textContent:h.t("transcript.styleTitle"),className:`${this.player.options.classPrefix}-transcript-style-title`});t.appendChild(e);const i=this.createStyleSelectControl(h.t("captions.fontSize"),"fontSize",[{label:h.t("fontSizes.small"),value:"90%"},{label:h.t("fontSizes.normal"),value:"100%"},{label:h.t("fontSizes.large"),value:"110%"},{label:h.t("fontSizes.xlarge"),value:"120%"}]);t.appendChild(i);const s=this.createStyleSelectControl(h.t("captions.fontFamily"),"fontFamily",[{label:h.t("fontFamilies.sansSerif"),value:"sans-serif"},{label:h.t("fontFamilies.serif"),value:"serif"},{label:h.t("fontFamilies.monospace"),value:"monospace"}]);t.appendChild(s);const a=this.createStyleColorControl(h.t("captions.color"),"color");t.appendChild(a);const r=this.createStyleColorControl(h.t("captions.backgroundColor"),"backgroundColor");t.appendChild(r);const n=this.createStyleOpacityControl(h.t("captions.opacity"),"opacity");t.appendChild(n);const l=c.createElement("button",{className:`${this.player.options.classPrefix}-transcript-style-close`,textContent:h.t("settings.close"),attributes:{type:"button"}});l.addEventListener("click",()=>this.hideStyleDialog()),t.appendChild(l);const o=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=o,document.addEventListener("keydown",o,{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,e,i){const s=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),a=`${this.player.options.classPrefix}-transcript-${e}-${Date.now()}`,r=c.createElement("label",{textContent:t,attributes:{for:a}});s.appendChild(r);const n=c.createElement("select",{className:`${this.player.options.classPrefix}-transcript-style-select`,attributes:{id:a}});return i.forEach(t=>{const i=c.createElement("option",{textContent:t.label,attributes:{value:t.value}});this.transcriptStyle[e]===t.value&&(i.selected=!0),n.appendChild(i)}),n.addEventListener("change",t=>{this.transcriptStyle[e]=t.target.value,this.applyTranscriptStyles(),this.savePreferences()}),s.appendChild(n),s}createStyleColorControl(t,e){const i=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),s=`${this.player.options.classPrefix}-transcript-${e}-${Date.now()}`,a=c.createElement("label",{textContent:t,attributes:{for:s}});i.appendChild(a);const r=c.createElement("input",{attributes:{id:s,type:"color",value:this.transcriptStyle[e]},className:`${this.player.options.classPrefix}-transcript-style-color`});return r.addEventListener("input",t=>{this.transcriptStyle[e]=t.target.value,this.applyTranscriptStyles(),this.savePreferences()}),i.appendChild(r),i}createStyleOpacityControl(t,e){const i=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),s=`${this.player.options.classPrefix}-transcript-${e}-${Date.now()}`,a=c.createElement("label",{textContent:t,attributes:{for:s}});i.appendChild(a);const r=e,n=c.createElement("span",{textContent:Math.round(100*this.transcriptStyle[r])+"%",className:`${this.player.options.classPrefix}-transcript-style-value`}),l=c.createElement("input",{attributes:{id:s,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",t=>{const e=parseFloat(t.target.value);this.transcriptStyle[r]=e,n.textContent=Math.round(100*e)+"%",this.applyTranscriptStyles(),this.savePreferences()});const o=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-range-container`});return o.appendChild(l),o.appendChild(n),i.appendChild(a),i.appendChild(o),i}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(t=>{t.style.fontSize=this.transcriptStyle.fontSize,t.style.fontFamily=this.transcriptStyle.fontFamily,t.style.color=this.transcriptStyle.color}),this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-time`).forEach(t=>{t.style.fontFamily=this.transcriptStyle.fontFamily}))}setManagedTimeout(t,e){const i=setTimeout(()=>{this.timeouts.delete(i),t()},e);return this.timeouts.add(i),i}clearManagedTimeout(t){t&&(clearTimeout(t),this.timeouts.delete(t))}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(t=>clearTimeout(t)),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(t){this.liveRegion&&(this.liveRegion.textContent=t||"")}};export{d as TranscriptManager};
|
|
6
|
+
import{DraggablePanel as t,createLabeledSelect as e,createMenuItem as i,preventDragOnElement as s}from"./vidply.chunk-3EEDXU4T.min.js";import{DraggableResizable as a}from"./vidply.chunk-PL3P3JHR.min.js";import{TimeUtils as r}from"./vidply.chunk-VKHV4QHA.min.js";import{createIconElement as n}from"./vidply.chunk-6OGHHIYP.min.js";import{focusElement as l}from"./vidply.chunk-XA4M574A.min.js";import{StorageManager as o,deriveTrackLabel as p}from"./vidply.chunk-ZPTV4JEP.min.js";import"./vidply.chunk-MWEBITCP.min.js";import{DOMUtils as c,i18n as h}from"./vidply.chunk-QQZGV7TD.min.js";var d=class{player;_cueUpdateTimeout;autoscrollCheckbox=null;autoscrollEnabled;availableTranscriptLanguages;currentActiveEntry;currentTranscriptLanguage;customKeyHandler=null;documentClickHandlerAdded=!1;draggableResizable;handlers={};headerLeft=null;isVisible;languageLabel;languageSelector;languageSelectorHandler;languageSelectorWrapper=null;liveRegion;metadataCueChangeHandler=null;metadataCues;settingsButton;showTimestamps;showTimestampsButton=null;showTimestampsText=null;storage;styleDialog;styleDialogJustOpened;styleDialogVisible;timeouts;transcriptContent=null;transcriptEntries;transcriptHeader=null;transcriptResizeHandles;transcriptStyle;transcriptWindow;_dashActiveLang;_vttCache;_panel=null;get settingsMenu(){return this._panel?.settingsMenu??null}set settingsMenu(t){}get settingsMenuVisible(){return this._panel?.settingsMenuVisible??!1}set settingsMenuVisible(t){}get settingsMenuJustOpened(){return this._panel?.justOpened??!1}set settingsMenuJustOpened(t){}get dragOptionButton(){return this._panel?.dragOptionButton??null}get dragOptionText(){return this._panel?.dragOptionText??null}get resizeOptionButton(){return this._panel?.resizeOptionButton??null}get resizeOptionText(){return this._panel?.resizeOptionText??null}constructor(t){this.player=t,this.transcriptWindow=null,this.transcriptEntries=[],this.metadataCues=[],this.currentActiveEntry=null,this.isVisible=!1,this.storage=new o("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 e=this.storage.getTranscriptPreferences();this.autoscrollEnabled="boolean"!=typeof e?.autoscroll||e.autoscroll,this.showTimestamps="boolean"==typeof e?.showTimestamps&&e.showTimestamps,this.transcriptStyle={fontSize:("string"==typeof e?.fontSize?e.fontSize:void 0)||("string"==typeof this.player.options.transcriptFontSize?this.player.options.transcriptFontSize:void 0)||"100%",fontFamily:("string"==typeof e?.fontFamily?e.fontFamily:void 0)||("string"==typeof this.player.options.transcriptFontFamily?this.player.options.transcriptFontFamily:void 0)||"sans-serif",color:("string"==typeof e?.color?e.color:void 0)||("string"==typeof this.player.options.transcriptColor?this.player.options.transcriptColor:void 0)||"#ffffff",backgroundColor:("string"==typeof e?.backgroundColor?e.backgroundColor:void 0)||("string"==typeof this.player.options.transcriptBackgroundColor?this.player.options.transcriptBackgroundColor:void 0)||"#1e1e1e",opacity:("number"==typeof e?.opacity?e.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()}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=t=>{t&&this.isVisible&&this.hideTranscript()},this.player.on("floatingchange",this.handlers.floatingchange)}_requestStreamingTrack(t){if(!t)return;const e=this.player.renderer;e?.isStreaming&&"function"==typeof e.activateTextTrackForLanguage&&this._dashActiveLang!==t&&(this._dashActiveLang=t,e.activateTextTrackForLanguage(t))}toggleTranscript(){this.isVisible?this.hideTranscript():this.showTranscript()}showTranscript(){if(this.player.state?.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 l(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),l(this.settingsButton,{delay:150})),this.isVisible=!0}hideTranscript({focusButton:t=!1}={}){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(),t){const t=this.player.controlBar?.controls?.transcript;t&&"function"==typeof t.focus&&t.focus({preventScroll:!0})}}createTranscriptWindow(){this.transcriptWindow=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-window`,attributes:{role:"dialog","aria-label":h.t("transcript.ariaLabel"),tabindex:"-1"}}),this.transcriptHeader=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header`,attributes:{tabindex:"0"}}),this.headerLeft=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-header-left`});const a=h.t("transcript.settingsMenu");this.settingsButton=c.createElement("button",{className:`${this.player.options.classPrefix}-transcript-settings`,attributes:{type:"button","aria-label":a,"aria-expanded":"false"}}),this.settingsButton.appendChild(n("settings")),c.attachTooltip(this.settingsButton,a,this.player.options.classPrefix),this._panel=new t({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:t=>{this.toggleKeyboardDragMode(),t.hide()},onResizeItemClick:t=>{this.toggleResizeMode({focus:!1})?(t.hide({focusButton:!1}),setTimeout(()=>{this.transcriptWindow?.focus({preventScroll:!0})},20)):t.hide({focusButton:!0})},buildExtraItems:({menu:t,itemClass:e,classPrefix:s,stripInlineTooltip:a})=>{const r=i({classPrefix:s,itemClass:e,icon:"settings",label:"transcript.styleTranscript",onClick:t=>{t.preventDefault(),t.stopPropagation(),this._panel?.hide(),setTimeout(()=>{this.showStyleDialog()},50)}});a(r),t.appendChild(r);const n=i({classPrefix:s,itemClass:e,icon:"clock",label:"transcript.showTimestamps",hasTextClass:!0,onClick:()=>{this.toggleShowTimestamps()}});n.setAttribute("role","switch"),n.setAttribute("aria-checked",this.showTimestamps?"true":"false"),a(n),this.showTimestampsButton=n,this.showTimestampsText=n.querySelector(`.${s}-settings-text`),this.updateShowTimestampsState(),t.appendChild(n)}}),this.handlers.settingsClick=t=>{t.preventDefault(),t.stopPropagation(),this._panel?.markJustOpenedForClick(),this._panel?.toggle()},this.settingsButton.addEventListener("click",this.handlers.settingsClick),this.handlers.settingsKeydown=t=>{"d"===t.key||"D"===t.key?(t.preventDefault(),t.stopPropagation(),this.toggleKeyboardDragMode()):"r"===t.key||"R"===t.key?(t.preventDefault(),t.stopPropagation(),this.toggleResizeMode()):"Escape"===t.key&&this.settingsMenuVisible&&(t.preventDefault(),t.stopPropagation(),this.hideSettingsMenu())},this.settingsButton.addEventListener("keydown",this.handlers.settingsKeydown);const r=c.createElement("h3",{textContent:`${h.t("transcript.title")}. ${h.t("transcript.dragResizePrompt")}`}),l=`${this.player.options.classPrefix}-transcript-autoscroll-${Date.now()}`,o=c.createElement("label",{className:`${this.player.options.classPrefix}-transcript-autoscroll-label`,attributes:{for:l}});this.autoscrollCheckbox=c.createElement("input",{attributes:{id:l,type:"checkbox"}}),this.autoscrollEnabled&&(this.autoscrollCheckbox.checked=!0);const p=c.createElement("span",{textContent:h.t("transcript.autoscroll"),className:`${this.player.options.classPrefix}-transcript-autoscroll-text`});o.appendChild(this.autoscrollCheckbox),o.appendChild(p),this.autoscrollCheckbox.addEventListener("change",t=>{this.autoscrollEnabled=t.target.checked,this.saveAutoscrollPreference()}),s(o),this.transcriptHeader.appendChild(r),this.headerLeft.appendChild(this.settingsButton),this.headerLeft.appendChild(o);const d=`${this.player.options.classPrefix}-transcript-language-select-${Date.now()}`,{label:u,select:g}=e({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:d,hidden:!1});this.languageLabel=u,this.languageSelector=g;const y=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-language-wrapper`,attributes:{style:"display: none;"}});y.appendChild(u),y.appendChild(g),this.languageSelectorWrapper=y,s(y),this.headerLeft&&this.headerLeft.appendChild(y);const m=h.t("transcript.close"),b=c.createElement("button",{className:`${this.player.options.classPrefix}-transcript-close`,attributes:{type:"button","aria-label":m}});b.appendChild(n("close")),c.attachTooltip(b,m,this.player.options.classPrefix),b.addEventListener("click",()=>this.hideTranscript({focusButton:!0})),this.transcriptHeader.appendChild(this.headerLeft),this.transcriptHeader.appendChild(b),this.transcriptContent=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-content`}),this.transcriptWindow.appendChild(this.transcriptHeader),this.transcriptWindow.appendChild(this.transcriptContent),this.createResizeHandles(),this.liveRegion=c.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=t=>{if(this.styleDialogJustOpened)return;const e=t.target;this.styleDialogVisible&&this.styleDialog&&e&&!this.styleDialog.contains(e)&&this.hideStyleDialog()},this.documentClickHandlerAdded=!1;let f=null;this.handlers.resize=()=>{f&&this.clearManagedTimeout(f),f=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(e=>{const i=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-resize-handle ${this.player.options.classPrefix}-transcript-resize-${e}`,attributes:{"data-direction":e,"data-vidply-managed-resize":"true","aria-hidden":"true"}});return i.style.display="none",t.appendChild(i),i}))}positionTranscript(){const t=this.player;if(!this.transcriptWindow||!t.videoWrapper||!this.isVisible)return;if(this.draggableResizable&&this.draggableResizable.manuallyPositioned)return;const e=window.innerWidth<768,i=t.videoWrapper.getBoundingClientRect(),s=this.player.state.fullscreen;if(e&&!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 e=t.videoWrapper;e&&e.parentNode&&e.nextSibling!==this.transcriptWindow&&e.parentNode.insertBefore(this.transcriptWindow,e.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 t=260,e=Math.max(t,window.innerWidth-40),i=parseFloat(this.transcriptWindow.style.width)||400,s=Math.max(t,Math.min(i,e));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 e=parseFloat(this.transcriptWindow.style.width)||400,s=20,a=260,r=this.player.container.getBoundingClientRect();(()=>{"static"===window.getComputedStyle(this.player.container).position&&(this.player.container.style.position="relative")})();const n=window.innerWidth-i.right-s;if(n<e||!(n>=a)){const e=320,s=280,n=Math.min(e,i.width-40),l=Math.min(s,i.height-120),o=t.videoWrapper.getBoundingClientRect(),p=70,c=Math.max(180,l),h=o.bottom-r.top-p-c,d=r.right-o.right+12;this.transcriptWindow.style.position="absolute",this.transcriptWindow.style.left="auto",this.transcriptWindow.style.right=`${d}px`,this.transcriptWindow.style.top=`${h}px`,this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.width=`${Math.max(a,n)}px`,this.transcriptWindow.style.maxWidth=`${e}px`,this.transcriptWindow.style.height=`${c}px`,this.transcriptWindow.style.maxHeight=`${s}px`,this.transcriptWindow.style.boxShadow="0 4px 16px rgba(0, 0, 0, 0.6)"}else{const t=i.right-r.left+s,l=Math.max(a,Math.min(e,n)),o=i.height;this.transcriptWindow.style.position="absolute",this.transcriptWindow.style.left=`${t}px`,this.transcriptWindow.style.right="auto",this.transcriptWindow.style.bottom="auto",this.transcriptWindow.style.top="0",this.transcriptWindow.style.height=`${o}px`,this.transcriptWindow.style.maxHeight="none",this.transcriptWindow.style.width=`${l}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 t=this.player.textTracks,e=new Map;return t.forEach(t=>{if(("captions"===t.kind||"subtitles"===t.kind)&&!t._vidplyStale){const i=(t.language??"").trim(),s=p(t.label,t.language,"player.captions"),a=i||s;a&&!e.has(a)&&e.set(a,{language:i,label:s,track:t})}}),Array.from(e.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(e=>{const i={value:e.language||e.label};e.language&&(i.lang=e.language);const s=c.createElement("option",{textContent:e.label,attributes:i});t.appendChild(s)}),this.currentTranscriptLanguage)t.value=this.currentTranscriptLanguage;else if(this.availableTranscriptLanguages.length>0){const e=this.player.textTracks.find(t=>("captions"===t.kind||"subtitles"===t.kind)&&"showing"===t.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 e=t=>{this.currentTranscriptLanguage=t.target.value,this._requestStreamingTrack(this.currentTranscriptLanguage),this.loadTranscriptData(),this.transcriptContent&&this.currentTranscriptLanguage&&this.transcriptContent.setAttribute("lang",this.currentTranscriptLanguage)};this.languageSelectorHandler=e,t.addEventListener("change",e)}_parseVTT(t){const e=[],i=t.replace(/\r\n/g,"\n").split(/\n\n+/);for(const t of i){const i=t.trim().split("\n");let s=-1;for(let t=0;t<i.length;t++)if(i[t]?.includes("--\x3e")){s=t;break}if(s<0)continue;const a=i[s]?.match(/(\d{1,2}:)?(\d{2}):(\d{2})\.(\d{3})\s*-->\s*(\d{1,2}:)?(\d{2}):(\d{2})\.(\d{3})/);if(!a)continue;const r=(a[1]?3600*parseInt(a[1]):0)+60*parseInt(a[2]??"0")+parseInt(a[3]??"0")+parseInt(a[4]??"0")/1e3,n=(a[5]?3600*parseInt(a[5]):0)+60*parseInt(a[6]??"0")+parseInt(a[7]??"0")+parseInt(a[8]??"0")/1e3,l=i.slice(s+1).join("\n").trim();l&&e.push({cue:{startTime:r,endTime:n,text:l,id:""},type:"caption"})}return e}async _loadVttTranscript(t){const e=this._vttCache.get(t);if(e)return e;const i=this.player.renderer;if(!i?.isStreaming||"function"!=typeof i.getTextTrackURLs)return null;const s=i.getTextTrackURLs().find(e=>e.lang===t||e.lang.startsWith(t)||t.startsWith(e.lang));if(!s)return null;const a=this._buildFetchSignal(1e4);try{const e=await fetch(s.url,{signal:a});if(!e.ok)return null;let i=await e.text();if(i.trimStart().startsWith("#EXTM3U")){const t=i.split("\n").map(t=>t.trim()).find(t=>t&&!t.startsWith("#"));if(!t)return null;const e=s.url.substring(0,s.url.lastIndexOf("/")+1),a=t.startsWith("http")?t:new URL(t,e).href,r=await fetch(a,{signal:this._buildFetchSignal(1e4)});if(!r.ok)return null;i=await r.text()}const r=this._parseVTT(i);return r.length>0&&this._vttCache.set(t,r),r}catch{return null}}_buildFetchSignal(t){const e=[],i=this.player.lifecycleSignal;if(i&&e.push(i),"undefined"!=typeof AbortSignal&&"function"==typeof AbortSignal.timeout&&e.push(AbortSignal.timeout(t)),0===e.length)return;if(1===e.length)return e[0];const s=AbortSignal.any;return s?s(e):e[0]}loadTranscriptData(){this.transcriptEntries=[],this.currentActiveEntry=null,this.transcriptContent&&(this.transcriptContent.innerHTML="");const t=this.player.textTracks;let e=null;if(this.currentTranscriptLanguage){const i=t.filter(t=>("captions"===t.kind||"subtitles"===t.kind)&&t.language===this.currentTranscriptLanguage&&!t._vidplyStale);e=i.find(t=>t.cues&&t.cues.length>0)||i[0]||null}if(!e){const i=t.filter(t=>("captions"===t.kind||"subtitles"===t.kind)&&!t._vidplyStale);e=i.find(t=>t.cues&&t.cues.length>0)||i[0]||null,e&&(this.currentTranscriptLanguage=e.language)}let i=null;this.currentTranscriptLanguage&&(i=t.find(t=>"descriptions"===t.kind&&t.language===this.currentTranscriptLanguage)||null),i||(i=t.find(t=>"descriptions"===t.kind)||null);const s=t.find(t=>"metadata"===t.kind);if(!e&&!i&&!s)return void this.showNoTranscriptMessage();[e,i,s].filter(t=>Boolean(t)).forEach(t=>{"disabled"===t.mode&&(t.mode="hidden")});const a=this.player.renderer,r=a?.isStreaming&&"function"==typeof a.getTextTrackURLs,n=this.currentTranscriptLanguage||(e?.language??"");if(r&&n){const t=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-loading`,textContent:h.t("transcript.loading")});return this.transcriptContent?.appendChild(t),void this._loadVttTranscript(n).then(t=>{this.isVisible&&this._renderTranscriptCues(t&&t.length>0?t:null,e,i,s)})}const l=e;if(l&&(!l.cues||0===l.cues.length)){const t=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-loading`,textContent:h.t("transcript.loading")});this.transcriptContent?.appendChild(t);const e=this.player.findTrackElement?.(l);if(e)l.addEventListener("load",()=>{this.loadTranscriptData()},{once:!0}),this.setManagedTimeout(()=>{this.loadTranscriptData()},1e3);else{let t=0;const e=()=>{t++,this.isVisible&&(l.cues&&l.cues.length>0?this.loadTranscriptData():t<40&&this.setManagedTimeout(e,500))};this.setManagedTimeout(e,300)}return}this._renderTranscriptCues(null,e,i,s)}_renderTranscriptCues(t,e,i,s){this.transcriptEntries=[],this.currentActiveEntry=null;const a=this.transcriptContent;a&&(a.innerHTML="");const r=[];t&&t.length>0?r.push(...t):e&&e.cues&&Array.from(e.cues).forEach(t=>{r.push({cue:t,type:"caption"})}),i&&i.cues&&Array.from(i.cues).forEach(t=>{r.push({cue:t,type:"description"})}),s&&s.cues&&(this.metadataCues=Array.from(s.cues),this.setupMetadataHandling()),r.sort((t,e)=>t.cue.startTime-e.cue.startTime),r.forEach((t,e)=>{const i=this.createTranscriptEntry(t.cue,e,t.type);this.transcriptEntries.push({element:i,cue:t.cue,type:t.type,startTime:t.cue.startTime,endTime:t.cue.endTime}),a?.appendChild(i)}),this.applyTranscriptStyles(),this.updateTimestampVisibility(),this.transcriptContent&&this.currentTranscriptLanguage&&this.transcriptContent.setAttribute("lang",this.currentTranscriptLanguage),this.updateLanguageSelector(),this.updateActiveEntry()}setupMetadataHandlingOnLoad(){const t=()=>{const t=this.player.textTracks.find(t=>"metadata"===t.kind);t?("disabled"===t.mode&&(t.mode="hidden"),this.metadataCueChangeHandler&&t.removeEventListener("cuechange",this.metadataCueChangeHandler),this.metadataCueChangeHandler=()=>{const e=Array.from(t.activeCues||[]);e.length>0&&this.player.options.debug&&console.log("[VidPly Metadata] Active cues:",e.map(t=>({start:t.startTime,end:t.endTime,text:t.text}))),e.forEach(t=>{this.handleMetadataCue(t)})},t.addEventListener("cuechange",this.metadataCueChangeHandler),this.player.options.debug&&console.log("[VidPly Metadata] Track enabled,",t.cues?t.cues.length:0,"cues available")):this.player.options.debug&&console.warn("[VidPly Metadata] No metadata track found")};t(),this.player.on("loadedmetadata",t)}setupMetadataHandling(){this.metadataCues&&0!==this.metadataCues.length&&this.player.options.debug&&console.log("[VidPly Metadata]",this.metadataCues.length,"cues stored from transcript load")}handleMetadataCue(t){const e=(t.text||"").trim();this.player.options.debug&&console.log("[VidPly Metadata] Processing cue:",{time:t.startTime,text:e}),this.player.emit("metadata",{time:t.startTime,endTime:t.endTime,text:e,cue:t}),e.includes("PAUSE")&&(this.player.state.paused||(this.player.options.debug&&console.log("[VidPly Metadata] Pausing video at",t.startTime),this.player.pause()),this.player.emit("metadata:pause",{time:t.startTime,text:e}));const i=e.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:t.startTime,target:s,element:a,text:e})}const s=e.match(/#[\w-]+/g);s&&(this.player.options.debug&&console.log("[VidPly Metadata] Hashtags found:",s),this.player.emit("metadata:hashtags",{time:t.startTime,hashtags:s,text:e}))}createTranscriptEntry(t,e,i="caption"){const s=this.stripVTTFormatting(t.text||""),a=(h.t("transcript.seekTo")||"Seek to {time}").replace("{time}",r.formatTime(t.startTime)).replace("{text}",s),n=c.createElement("button",{className:`${this.player.options.classPrefix}-transcript-entry ${this.player.options.classPrefix}-transcript-${i}`,attributes:{type:"button","data-start":String(t.startTime),"data-end":String(t.endTime),"data-type":i,"aria-label":`${a} — ${s}`}}),l=c.createElement("span",{className:`${this.player.options.classPrefix}-transcript-time`,textContent:r.formatTime(t.startTime),attributes:{"aria-hidden":"true"}}),o=c.createElement("span",{className:`${this.player.options.classPrefix}-transcript-text`,textContent:s});return n.appendChild(l),n.appendChild(o),n.addEventListener("click",()=>{this.player.seek(t.startTime),this.player.state.paused&&this.player.play()}),n}stripVTTFormatting(t){return t.replace(/<[^>]+>/g,"").replace(/\n/g," ").trim()}showNoTranscriptMessage(){const t=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-empty`,textContent:h.t("transcript.noTranscript")});this.transcriptContent?.appendChild(t)}updateActiveEntry(){if(!this.isVisible||0===this.transcriptEntries.length)return;const t=this.player.state.currentTime,e=this.transcriptEntries.find(e=>t>=e.startTime&&t<e.endTime);e&&e!==this.currentActiveEntry?(this.currentActiveEntry&&this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),e.element.classList.add(`${this.player.options.classPrefix}-transcript-entry-active`),this.scrollToEntry(e.element),this.currentActiveEntry=e):!e&&this.currentActiveEntry&&(this.currentActiveEntry.element.classList.remove(`${this.player.options.classPrefix}-transcript-entry-active`),this.currentActiveEntry=null)}scrollToEntry(t){if(!this.transcriptContent||!this.autoscrollEnabled)return;const e=this.transcriptContent.getBoundingClientRect(),i=t.getBoundingClientRect();(i.top<e.top||i.bottom>e.bottom)&&this.transcriptContent.scrollTo({top:t.offsetTop-this.transcriptContent.clientHeight/2+t.clientHeight/2,behavior:"smooth"})}saveAutoscrollPreference(){const t=this.storage.getTranscriptPreferences()||{};t.autoscroll=this.autoscrollEnabled,this.storage.saveTranscriptPreferences(t)}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 a(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:h.t("transcript.resizeModeHint"),onPointerResizeToggle:t=>{this.transcriptResizeHandles.forEach(e=>{e.style.display=t?"block":"none"}),this.onPointerResizeModeChange(t)},onDragStart:t=>{const e=[`.${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 e)if(t.target.closest(i))return!1;return!0}}),this.customKeyHandler=t=>{const e=t.key.toLowerCase(),i=t.defaultPrevented;if(!this.settingsMenuVisible&&!this.styleDialogVisible){if("home"===e)return t.preventDefault(),t.stopPropagation(),void(this.draggableResizable&&(this.draggableResizable.pointerResizeMode&&this.draggableResizable.disablePointerResizeMode(),this.draggableResizable.manuallyPositioned=!1,this.positionTranscript(),this.updateResizeOptionState(),this.announceLive(h.t("transcript.positionReset"))));if("r"===e){if(i)return;return t.preventDefault(),t.stopPropagation(),void(this.toggleResizeMode()&&this.transcriptWindow?.focus({preventScroll:!0}))}return"escape"===e?this.draggableResizable&&this.draggableResizable.pointerResizeMode?(t.preventDefault(),t.stopPropagation(),void this.draggableResizable.disablePointerResizeMode()):this.draggableResizable&&this.draggableResizable.keyboardDragMode?(t.preventDefault(),t.stopPropagation(),this.draggableResizable.disableKeyboardDragMode(),void this.announceLive(h.t("transcript.dragModeDisabled"))):(t.preventDefault(),t.stopPropagation(),void this.hideTranscript({focusButton:!0})):void 0}};const t=this.customKeyHandler;this.transcriptWindow&&t&&this.transcriptWindow.addEventListener("keydown",t,{signal:this.player.lifecycleSignal})}toggleKeyboardDragMode(){if(this.draggableResizable){const t=this.draggableResizable.keyboardDragMode;this.draggableResizable.toggleKeyboardDragMode();const e=this.draggableResizable.keyboardDragMode;!t&&e?(this.enableMoveMode(),this._panel?.showBadge(h.t("transcript.dragModeBadge")),this.announceLive(h.t("transcript.dragModeEnabled"))):t&&!e&&(this._panel?.hideBadge(),this.announceLive(h.t("transcript.dragModeDisabled"))),this.updateDragOptionState(),this.settingsMenuVisible&&this.hideSettingsMenu(),this.transcriptWindow?.focus({preventScroll:!0})}}toggleSettingsMenu(){this.settingsMenuVisible?this.hideSettingsMenu():this.showSettingsMenu()}showSettingsMenu(){this._panel?.show()}positionSettingsMenu(){this._panel?.reposition()}hideSettingsMenu({focusButton:t=!0}={}){this._panel?.hide({focusButton:t})}enableMoveMode(){this.transcriptWindow?.classList.add(`${this.player.options.classPrefix}-transcript-move-mode`),setTimeout(()=>{this.transcriptWindow?.classList.remove(`${this.player.options.classPrefix}-transcript-move-mode`)},2e3)}toggleResizeMode({focus:t=!0}={}){return!!this.draggableResizable&&(this.draggableResizable.pointerResizeMode?(this.draggableResizable.disablePointerResizeMode({focus:t}),!1):(this.draggableResizable.enablePointerResizeMode({focus:t}),!0))}updateDragOptionState(){this._panel?.refreshDragState()}updateResizeOptionState(){this._panel?.refreshResizeState()}toggleShowTimestamps(){this.showTimestamps=!this.showTimestamps,this.updateShowTimestampsState(),this.updateTimestampVisibility(),this.saveTimestampsPreference()}updateShowTimestampsState(){if(!this.showTimestampsButton)return;const t=h.t(this.showTimestamps?"transcript.hideTimestamps":"transcript.showTimestamps"),e=h.t(this.showTimestamps?"transcript.hideTimestampsAria":"transcript.showTimestampsAria");this.showTimestampsButton.setAttribute("aria-checked",this.showTimestamps?"true":"false"),this.showTimestampsButton.setAttribute("aria-label",e),this.showTimestampsText&&(this.showTimestampsText.textContent=t)}updateTimestampVisibility(){this.transcriptContent&&this.transcriptContent.querySelectorAll(`.${this.player.options.classPrefix}-transcript-time`).forEach(t=>{t.style.display=this.showTimestamps?"":"none"})}saveTimestampsPreference(){const t=this.storage.getTranscriptPreferences()||{};t.showTimestamps=this.showTimestamps,this.storage.saveTranscriptPreferences(t)}showResizeModeIndicator(){this._panel?.showBadge(h.t("transcript.resizeModeBadge"))}hideResizeModeIndicator(){this._panel?.hideBadge()}onPointerResizeModeChange(t){this.updateResizeOptionState(),t?(this._panel?.showBadge(h.t("transcript.resizeModeBadge")),this.announceLive(h.t("transcript.resizeModeEnabled"))):(this._panel?.hideBadge(),this.announceLive(h.t("transcript.resizeModeDisabled")))}showStyleDialog(){if(this.documentClickHandlerAdded||setTimeout(()=>{const t=this.handlers.documentClick;t&&document.addEventListener("click",t,{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 t=this.styleDialog;if(!t)return;const e=t.querySelector("select, input");e&&e.focus({preventScroll:!0})},0);const t=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-dialog`});this.styleDialog=t;const e=c.createElement("h4",{textContent:h.t("transcript.styleTitle"),className:`${this.player.options.classPrefix}-transcript-style-title`});t.appendChild(e);const i=this.createStyleSelectControl(h.t("captions.fontSize"),"fontSize",[{label:h.t("fontSizes.small"),value:"90%"},{label:h.t("fontSizes.normal"),value:"100%"},{label:h.t("fontSizes.large"),value:"110%"},{label:h.t("fontSizes.xlarge"),value:"120%"}]);t.appendChild(i);const s=this.createStyleSelectControl(h.t("captions.fontFamily"),"fontFamily",[{label:h.t("fontFamilies.sansSerif"),value:"sans-serif"},{label:h.t("fontFamilies.serif"),value:"serif"},{label:h.t("fontFamilies.monospace"),value:"monospace"}]);t.appendChild(s);const a=this.createStyleColorControl(h.t("captions.color"),"color");t.appendChild(a);const r=this.createStyleColorControl(h.t("captions.backgroundColor"),"backgroundColor");t.appendChild(r);const n=this.createStyleOpacityControl(h.t("captions.opacity"),"opacity");t.appendChild(n);const l=c.createElement("button",{className:`${this.player.options.classPrefix}-transcript-style-close`,textContent:h.t("settings.close"),attributes:{type:"button"}});l.addEventListener("click",()=>this.hideStyleDialog()),t.appendChild(l);const o=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=o,document.addEventListener("keydown",o,{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,e,i){const s=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),a=`${this.player.options.classPrefix}-transcript-${e}-${Date.now()}`,r=c.createElement("label",{textContent:t,attributes:{for:a}});s.appendChild(r);const n=c.createElement("select",{className:`${this.player.options.classPrefix}-transcript-style-select`,attributes:{id:a}});return i.forEach(t=>{const i=c.createElement("option",{textContent:t.label,attributes:{value:t.value}});this.transcriptStyle[e]===t.value&&(i.selected=!0),n.appendChild(i)}),n.addEventListener("change",t=>{this.transcriptStyle[e]=t.target.value,this.applyTranscriptStyles(),this.savePreferences()}),s.appendChild(n),s}createStyleColorControl(t,e){const i=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),s=`${this.player.options.classPrefix}-transcript-${e}-${Date.now()}`,a=c.createElement("label",{textContent:t,attributes:{for:s}});i.appendChild(a);const r=c.createElement("input",{attributes:{id:s,type:"color",value:this.transcriptStyle[e]},className:`${this.player.options.classPrefix}-transcript-style-color`});return r.addEventListener("input",t=>{this.transcriptStyle[e]=t.target.value,this.applyTranscriptStyles(),this.savePreferences()}),i.appendChild(r),i}createStyleOpacityControl(t,e){const i=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-group`}),s=`${this.player.options.classPrefix}-transcript-${e}-${Date.now()}`,a=c.createElement("label",{textContent:t,attributes:{for:s}});i.appendChild(a);const r=e,n=c.createElement("span",{textContent:Math.round(100*this.transcriptStyle[r])+"%",className:`${this.player.options.classPrefix}-transcript-style-value`}),l=c.createElement("input",{attributes:{id:s,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",t=>{const e=parseFloat(t.target.value);this.transcriptStyle[r]=e,n.textContent=Math.round(100*e)+"%",this.applyTranscriptStyles(),this.savePreferences()});const o=c.createElement("div",{className:`${this.player.options.classPrefix}-transcript-style-range-container`});return o.appendChild(l),o.appendChild(n),i.appendChild(a),i.appendChild(o),i}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(t=>{t.style.fontSize=this.transcriptStyle.fontSize,t.style.fontFamily=this.transcriptStyle.fontFamily,t.style.color=this.transcriptStyle.color}),this.transcriptWindow.querySelectorAll(`.${this.player.options.classPrefix}-transcript-time`).forEach(t=>{t.style.fontFamily=this.transcriptStyle.fontFamily}))}setManagedTimeout(t,e){const i=setTimeout(()=>{this.timeouts.delete(i),t()},e);return this.timeouts.add(i),i}clearManagedTimeout(t){t&&(clearTimeout(t),this.timeouts.delete(t))}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(t=>clearTimeout(t)),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(t){this.liveRegion&&(this.liveRegion.textContent=t||"")}};export{d as TranscriptManager};
|
package/dist/prod/{vidply.VimeoRenderer-NF3COTHU.min.js → vidply.VimeoRenderer-MR3UYLY7.min.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* VidPly v1.2.
|
|
2
|
+
* VidPly v1.2.3 - Universal, Accessible Video Player
|
|
3
3
|
* (c) 2026 Matthias Peltzer
|
|
4
4
|
* Released under GPL-2.0-or-later License
|
|
5
5
|
*/
|
|
6
|
-
import{loadScriptOnce as e}from"./vidply.chunk-
|
|
6
|
+
import{loadScriptOnce as e}from"./vidply.chunk-5HTX5QXW.min.js";var t=class{player;media;vimeo;videoId;isReady;iframe;constructor(e){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():e("https://player.vimeo.com/api/player.js",{isReady:()=>!(!window.Vimeo||!window.Vimeo.Player)})}createIframe(){this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`vimeo-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.maxHeight="100%",this.player.element.parentNode?.insertBefore(this.iframe,this.player.element)}async initializePlayer(){const e={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&&(e.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,e),await this.vimeo.ready(),this.isReady=!0;const t=this.iframe?.querySelector("iframe");t&&(t.style.width="100%",t.style.height="100%",t.setAttribute("width","100%"),t.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: ${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="")}};export{t as VimeoRenderer};
|
package/dist/prod/{vidply.YouTubeRenderer-UCQKYIJ4.min.js → vidply.YouTubeRenderer-ITRTC7NR.min.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* VidPly v1.2.
|
|
2
|
+
* VidPly v1.2.3 - Universal, Accessible Video Player
|
|
3
3
|
* (c) 2026 Matthias Peltzer
|
|
4
4
|
* Released under GPL-2.0-or-later License
|
|
5
5
|
*/
|
|
6
|
-
import{loadScriptOnce as e}from"./vidply.chunk-
|
|
6
|
+
import{loadScriptOnce as e}from"./vidply.chunk-5HTX5QXW.min.js";var t=class{player;media;youtube;videoId;isReady;iframe;timeUpdateInterval;constructor(e){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():e("https://www.youtube.com/iframe_api",{isReady:()=>!(!window.YT||!window.YT.Player),readyTimeout:8e3})}createIframe(){this.player.element.style.display="none",this.iframe=document.createElement("div"),this.iframe.id=`youtube-player-${Math.random().toString(36).substr(2,9)}`,this.iframe.style.width="100%",this.iframe.style.maxHeight="100%",this.player.element.parentNode?.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){const t=window.YT?.PlayerState;if(t)switch(e.data){case t.PLAYING:this.player.state.playing=!0,this.player.state.paused=!1,this.player.state.ended=!1,this.player.state.buffering=!1,this.player.emit("play"),this.player.emit("playing"),this.player.options.onPlay&&this.player.options.onPlay.call(this.player);break;case t.PAUSED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.emit("pause"),this.player.options.onPause&&this.player.options.onPause.call(this.player);break;case t.ENDED:this.player.state.playing=!1,this.player.state.paused=!0,this.player.state.ended=!0,this.player.emit("ended"),this.player.options.onEnded&&this.player.options.onEnded.call(this.player),this.player.options.loop&&this.youtube&&(this.youtube.seekTo(0),this.youtube.playVideo());break;case t.BUFFERING:this.player.state.buffering=!0,this.player.emit("waiting");break;case t.CUED:this.player.emit("loadedmetadata")}}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="")}};export{t as YouTubeRenderer};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* VidPly v1.2.
|
|
2
|
+
* VidPly v1.2.3 - Universal, Accessible Video Player
|
|
3
3
|
* (c) 2026 Matthias Peltzer
|
|
4
4
|
* Released under GPL-2.0-or-later License
|
|
5
5
|
*/
|
|
6
|
-
import{createIconElement as t}from"./vidply.chunk-JPMAK3NS.min.js";import{focusElement as e}from"./vidply.chunk-L4O44K63.min.js";import{reducedMotionScrollOptions as s}from"./vidply.chunk-M76ABMKB.min.js";import{DOMUtils as i,i18n as n}from"./vidply.chunk-6ECBIYVI.min.js";function a({labelClass:t,selectClass:e,labelText:s,selectId:a,hidden:r=!1,onChange:o,options:l=[]}){const d="string"==typeof s&&(s.startsWith("transcript.")||s.startsWith("player.")||s.startsWith("settings.")||s.startsWith("captions."))&&n.t(s)||s,u=i.createElement("label",{className:t,textContent:d,attributes:{for:a,style:r?"display: none;":void 0}}),h=i.createElement("select",{className:e,attributes:{id:a,style:r?"display: none;":void 0}});return l.forEach(t=>{const e=i.createElement("option",{textContent:t.text,attributes:{value:t.value,selected:t.selected?"selected":void 0}});h.appendChild(e)}),o&&h.addEventListener("change",o),{label:u,select:h}}function r(t){t&&["pointerdown","mousedown","click"].forEach(e=>{t.addEventListener(e,t=>{t.stopPropagation()})})}function o({classPrefix:e,itemClass:s,icon:a,label:r,ariaLabel:o,onClick:l,hasTextClass:d=!1}){const u="string"==typeof r&&(r.startsWith("transcript.")||r.startsWith("player.")||r.startsWith("settings.")),h=o||u&&n.t(r)||r,c=i.createElement("button",{className:s,attributes:{type:"button","aria-label":h,tabindex:"-1"}});a&&c.appendChild(t(a));const p="string"==typeof r&&(r.startsWith("transcript.")||r.startsWith("player.")||r.startsWith("settings."))&&n.t(r)||r,m=i.createElement("span",{textContent:p,className:d?`${e}-settings-text`:void 0,attributes:{"aria-hidden":"true"}});return c.appendChild(m),l&&c.addEventListener("click",l),c}function l(t,i,n=0){t&&setTimeout(()=>{const n=Array.from(t.querySelectorAll(i)).filter(t=>"true"!==t.getAttribute("aria-disabled")),a=n[0];a&&(n.forEach((t,e)=>{t.setAttribute("tabindex",0===e?"0":"-1")}),e(a,{delay:0}),a.scrollIntoView(s("nearest")))},n)}function d(t,e,s){t&&(t.setAttribute("aria-checked",s.enabled?"true":"false"),t.setAttribute("aria-label",s.enabled?s.enabledAria:s.disabledAria),e&&(e.textContent=s.enabled?s.enabledText:s.disabledText))}function u(t,e,s={}){if(!t||!e)return;const{align:i="left",gap:n=4,spaceReserve:a=20}=s,r=e.parentElement;if(!r)return;const o=e.getBoundingClientRect(),l=r.getBoundingClientRect(),d=t.getBoundingClientRect(),u=window.innerHeight,h=window.innerWidth,c=o.top-l.top,p=o.left-l.left,m=p+o.width/2,g=u-o.bottom;let b,f,y,x=o.bottom-l.top+n,_=null;if(g<d.height+a&&o.top>g?("center"===i?(_=l.bottom-l.top-c+n,x=null):x=c-d.height-n,t.classList.add("vidply-menu-above")):t.classList.remove("vidply-menu-above"),"center"===i){const t=o.left+o.width/2-d.width/2;t<10?(b="0",f="auto",y="translateX(0)"):t+d.width>h-10?(b="auto",f="0",y="translateX(0)"):(b=`${m}px`,f="auto",y="translateX(-50%)")}else b=`${p}px`,f="auto",y="translateX(0)";null!==x?(t.style.top=`${x}px`,t.style.bottom="auto"):null!==_&&(t.style.top="auto",t.style.bottom=`${_}px`),t.style.left=b,t.style.right=f,t.style.transform=y}var h=class{opts;settingsMenu=null;settingsMenuVisible=!1;dragOptionButton=null;dragOptionText=null;resizeOptionButton=null;resizeOptionText=null;_justOpened=!1;_justOpenedTimer=null;_keyHandler=null;_documentClick=null;_documentClickAdded=!1;_modeBadge=null;constructor(t){this.opts=t}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 l(this.settingsMenu,`.${this.itemClass}`);this._createMenu()}hide({focusButton:t=!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(t=>t.setAttribute("tabindex","-1"));const{settingsButton:e}=this.opts;e.setAttribute("aria-expanded","false"),t&&e.focus({preventScroll:!0})}toggle(){this.settingsMenuVisible?this.hide():this.show()}markJustOpenedForClick(){this._documentClick&&this._markJustOpened(100)}refreshState(){this.refreshDragState(),this.refreshResizeState()}refreshDragState(){const t=this.opts.getDraggable();d(this.dragOptionButton,this.dragOptionText,{enabled:Boolean(t?.keyboardDragMode),enabledText:n.t(this.opts.i18nKeys.disableDrag),disabledText:n.t(this.opts.i18nKeys.enableDrag),enabledAria:n.t(this.opts.i18nKeys.disableDragAria),disabledAria:n.t(this.opts.i18nKeys.enableDragAria)})}refreshResizeState(){const t=this.opts.getDraggable();d(this.resizeOptionButton,this.resizeOptionText,{enabled:Boolean(t?.pointerResizeMode),enabledText:n.t(this.opts.i18nKeys.disableResize),disabledText:n.t(this.opts.i18nKeys.enableResize),enabledAria:n.t(this.opts.i18nKeys.disableResizeAria),disabledAria:n.t(this.opts.i18nKeys.enableResizeAria)})}showBadge(t){const e=this.opts.getBadgeHost?.();if(!e)return;this.hideBadge();const s=i.createElement("span",{className:this.opts.badgeClass??`${this.classPrefix}-${this.opts.namespace}-mode-badge`,textContent:t,attributes:{"aria-hidden":"true"}});e.appendChild(s),this._modeBadge=s}hideBadge(){this._modeBadge&&this._modeBadge.parentNode&&this._modeBadge.remove(),this._modeBadge=null}reposition(){((t,e,s={})=>{requestAnimationFrame(()=>{setTimeout(()=>u(t,e,s),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:e}=this.opts,s=i.createElement("div",{className:this.menuClass,attributes:{role:"menu"}});this.settingsMenu=s;const n=o({classPrefix:this.classPrefix,itemClass:this.itemClass,icon:"move",label:e.enableDrag,hasTextClass:!0,onClick:t=>{t.preventDefault(),t.stopPropagation(),this.opts.onDragItemClick(this),this.refreshState()}});n.setAttribute("role","switch"),n.setAttribute("aria-checked","false"),n.setAttribute("data-setting","keyboard-drag"),this._stripInlineTooltip(n),this.dragOptionButton=n,this.dragOptionText=n.querySelector(`.${this.classPrefix}-settings-text`);const a=o({classPrefix:this.classPrefix,itemClass:this.itemClass,icon:"resize",label:e.enableResize,hasTextClass:!0,onClick:t=>{t.preventDefault(),t.stopPropagation(),this.opts.onResizeItemClick(this),this.refreshState()}});a.setAttribute("role","switch"),a.setAttribute("aria-checked","false"),this._stripInlineTooltip(a),this.resizeOptionButton=a,this.resizeOptionText=a.querySelector(`.${this.classPrefix}-settings-text`),s.appendChild(n),s.appendChild(a),this.opts.buildExtraItems&&this.opts.buildExtraItems({menu:s,itemClass:this.itemClass,classPrefix:this.classPrefix,stripInlineTooltip:t=>this._stripInlineTooltip(t)});const r=o({classPrefix:this.classPrefix,itemClass:this.itemClass,icon:"close",label:e.closeMenu,onClick:()=>this.hide()});this._stripInlineTooltip(r),s.appendChild(r),s.style.visibility="hidden",s.style.display="block";const d=this.opts.getMenuParent();t.parentNode?t.insertAdjacentElement("afterend",s):d&&d.appendChild(s),this._positionImmediate(),requestAnimationFrame(()=>{this.settingsMenu&&(this.settingsMenu.style.visibility="visible")}),this._attachKeyboardNavigation(),this.settingsMenuVisible=!0,t.setAttribute("aria-expanded","true"),this.refreshState(),l(s,`.${this.itemClass}`)}_attachKeyboardNavigation(){const t=this.settingsMenu;if(!t)return;this._keyHandler&&t.removeEventListener("keydown",this._keyHandler,!0);const e=((t,e,i,n)=>{if(!t)return;const a=Array.from(t.querySelectorAll(i)).filter(t=>"true"!==t.getAttribute("aria-disabled"));if(0===a.length)return;const r=t=>{const i=a.indexOf(document.activeElement);switch(t.key){case"ArrowDown":{t.preventDefault(),t.stopPropagation();const e=(i+1)%a.length;a.forEach((t,s)=>{t.setAttribute("tabindex",s===e?"0":"-1")});const n=a[e];n&&(n.focus({preventScroll:!1}),n.scrollIntoView(s("nearest")));break}case"ArrowUp":{t.preventDefault(),t.stopPropagation();const e=(i-1+a.length)%a.length;a.forEach((t,s)=>{t.setAttribute("tabindex",s===e?"0":"-1")});const n=a[e];n&&(n.focus({preventScroll:!1}),n.scrollIntoView(s("nearest")));break}case"Home":{t.preventDefault(),t.stopPropagation(),a.forEach((t,e)=>{t.setAttribute("tabindex",0===e?"0":"-1")});const e=a[0];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(s("nearest")));break}case"End":{t.preventDefault(),t.stopPropagation();const e=a.length-1;a.forEach((t,s)=>{t.setAttribute("tabindex",s===e?"0":"-1")});const i=a[e];i&&(i.focus({preventScroll:!1}),i.scrollIntoView(s("nearest")));break}case"Enter":case" ":t.preventDefault(),t.stopPropagation(),document.activeElement&&a.includes(document.activeElement)&&(document.activeElement.click(),n&&setTimeout(()=>{e&&document.contains(e)&&e.focus()},0));break;case"Escape":t.preventDefault(),t.stopPropagation(),n&&n()}};return t.addEventListener("keydown",r,!0),r})(t,this.opts.settingsButton,`.${this.itemClass}`,()=>this.hide({focusButton:!0}));this._keyHandler=e??null}_positionImmediate(){u(this.settingsMenu,this.opts.settingsButton,{align:this.opts.menuAlign,gap:this.opts.menuGap??4,spaceReserve:this.opts.menuSpaceReserve??20})}_stripInlineTooltip(t){const e=t.querySelector(`.${this.classPrefix}-tooltip`);e&&e.remove();const s=t.querySelector(`.${this.classPrefix}-button-text`);s&&s.remove()}_markJustOpened(t){this._justOpened=!0,this._justOpenedTimer&&clearTimeout(this._justOpenedTimer),this._justOpenedTimer=setTimeout(()=>{this._justOpened=!1,this._justOpenedTimer=null},t)}_clearJustOpened(){this._justOpened=!1,this._justOpenedTimer&&(clearTimeout(this._justOpenedTimer),this._justOpenedTimer=null)}_ensureDocumentClickHandler(){this._documentClickAdded||(this._documentClick=t=>{if(this._justOpened)return;const e=t.target,{settingsButton:s}=this.opts;s===e||e&&s.contains(e)||this.settingsMenu&&e&&this.settingsMenu.contains(e)||this.settingsMenuVisible&&this.hide()},setTimeout(()=>{const t=this._documentClick;t&&(document.addEventListener("mousedown",t,{capture:!0,signal:this.opts.player.lifecycleSignal}),this._documentClickAdded=!0)},300))}};export{a as createLabeledSelect,r as preventDragOnElement,o as createMenuItem,h as DraggablePanel};
|
|
6
|
+
import{createIconElement as t}from"./vidply.chunk-6OGHHIYP.min.js";import{focusElement as e}from"./vidply.chunk-XA4M574A.min.js";import{reducedMotionScrollOptions as s}from"./vidply.chunk-MWEBITCP.min.js";import{DOMUtils as i,i18n as n}from"./vidply.chunk-QQZGV7TD.min.js";function a({labelClass:t,selectClass:e,labelText:s,selectId:a,hidden:r=!1,onChange:o,options:l=[]}){const d="string"==typeof s&&(s.startsWith("transcript.")||s.startsWith("player.")||s.startsWith("settings.")||s.startsWith("captions."))&&n.t(s)||s,u=i.createElement("label",{className:t,textContent:d,attributes:{for:a,style:r?"display: none;":void 0}}),h=i.createElement("select",{className:e,attributes:{id:a,style:r?"display: none;":void 0}});return l.forEach(t=>{const e=i.createElement("option",{textContent:t.text,attributes:{value:t.value,selected:t.selected?"selected":void 0}});h.appendChild(e)}),o&&h.addEventListener("change",o),{label:u,select:h}}function r(t){t&&["pointerdown","mousedown","click"].forEach(e=>{t.addEventListener(e,t=>{t.stopPropagation()})})}function o({classPrefix:e,itemClass:s,icon:a,label:r,ariaLabel:o,onClick:l,hasTextClass:d=!1}){const u="string"==typeof r&&(r.startsWith("transcript.")||r.startsWith("player.")||r.startsWith("settings.")),h=o||u&&n.t(r)||r,c=i.createElement("button",{className:s,attributes:{type:"button","aria-label":h,tabindex:"-1"}});a&&c.appendChild(t(a));const p="string"==typeof r&&(r.startsWith("transcript.")||r.startsWith("player.")||r.startsWith("settings."))&&n.t(r)||r,m=i.createElement("span",{textContent:p,className:d?`${e}-settings-text`:void 0,attributes:{"aria-hidden":"true"}});return c.appendChild(m),l&&c.addEventListener("click",l),c}function l(t,i,n=0){t&&setTimeout(()=>{const n=Array.from(t.querySelectorAll(i)).filter(t=>"true"!==t.getAttribute("aria-disabled")),a=n[0];a&&(n.forEach((t,e)=>{t.setAttribute("tabindex",0===e?"0":"-1")}),e(a,{delay:0}),a.scrollIntoView(s("nearest")))},n)}function d(t,e,s){t&&(t.setAttribute("aria-checked",s.enabled?"true":"false"),t.setAttribute("aria-label",s.enabled?s.enabledAria:s.disabledAria),e&&(e.textContent=s.enabled?s.enabledText:s.disabledText))}function u(t,e,s={}){if(!t||!e)return;const{align:i="left",gap:n=4,spaceReserve:a=20}=s,r=e.parentElement;if(!r)return;const o=e.getBoundingClientRect(),l=r.getBoundingClientRect(),d=t.getBoundingClientRect(),u=window.innerHeight,h=window.innerWidth,c=o.top-l.top,p=o.left-l.left,m=p+o.width/2,g=u-o.bottom;let b,f,y,x=o.bottom-l.top+n,_=null;if(g<d.height+a&&o.top>g?("center"===i?(_=l.bottom-l.top-c+n,x=null):x=c-d.height-n,t.classList.add("vidply-menu-above")):t.classList.remove("vidply-menu-above"),"center"===i){const t=o.left+o.width/2-d.width/2;t<10?(b="0",f="auto",y="translateX(0)"):t+d.width>h-10?(b="auto",f="0",y="translateX(0)"):(b=`${m}px`,f="auto",y="translateX(-50%)")}else b=`${p}px`,f="auto",y="translateX(0)";null!==x?(t.style.top=`${x}px`,t.style.bottom="auto"):null!==_&&(t.style.top="auto",t.style.bottom=`${_}px`),t.style.left=b,t.style.right=f,t.style.transform=y}var h=class{opts;settingsMenu=null;settingsMenuVisible=!1;dragOptionButton=null;dragOptionText=null;resizeOptionButton=null;resizeOptionText=null;_justOpened=!1;_justOpenedTimer=null;_keyHandler=null;_documentClick=null;_documentClickAdded=!1;_modeBadge=null;constructor(t){this.opts=t}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 l(this.settingsMenu,`.${this.itemClass}`);this._createMenu()}hide({focusButton:t=!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(t=>t.setAttribute("tabindex","-1"));const{settingsButton:e}=this.opts;e.setAttribute("aria-expanded","false"),t&&e.focus({preventScroll:!0})}toggle(){this.settingsMenuVisible?this.hide():this.show()}markJustOpenedForClick(){this._documentClick&&this._markJustOpened(100)}refreshState(){this.refreshDragState(),this.refreshResizeState()}refreshDragState(){const t=this.opts.getDraggable();d(this.dragOptionButton,this.dragOptionText,{enabled:Boolean(t?.keyboardDragMode),enabledText:n.t(this.opts.i18nKeys.disableDrag),disabledText:n.t(this.opts.i18nKeys.enableDrag),enabledAria:n.t(this.opts.i18nKeys.disableDragAria),disabledAria:n.t(this.opts.i18nKeys.enableDragAria)})}refreshResizeState(){const t=this.opts.getDraggable();d(this.resizeOptionButton,this.resizeOptionText,{enabled:Boolean(t?.pointerResizeMode),enabledText:n.t(this.opts.i18nKeys.disableResize),disabledText:n.t(this.opts.i18nKeys.enableResize),enabledAria:n.t(this.opts.i18nKeys.disableResizeAria),disabledAria:n.t(this.opts.i18nKeys.enableResizeAria)})}showBadge(t){const e=this.opts.getBadgeHost?.();if(!e)return;this.hideBadge();const s=i.createElement("span",{className:this.opts.badgeClass??`${this.classPrefix}-${this.opts.namespace}-mode-badge`,textContent:t,attributes:{"aria-hidden":"true"}});e.appendChild(s),this._modeBadge=s}hideBadge(){this._modeBadge&&this._modeBadge.parentNode&&this._modeBadge.remove(),this._modeBadge=null}reposition(){((t,e,s={})=>{requestAnimationFrame(()=>{setTimeout(()=>u(t,e,s),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:e}=this.opts,s=i.createElement("div",{className:this.menuClass,attributes:{role:"menu"}});this.settingsMenu=s;const n=o({classPrefix:this.classPrefix,itemClass:this.itemClass,icon:"move",label:e.enableDrag,hasTextClass:!0,onClick:t=>{t.preventDefault(),t.stopPropagation(),this.opts.onDragItemClick(this),this.refreshState()}});n.setAttribute("role","switch"),n.setAttribute("aria-checked","false"),n.setAttribute("data-setting","keyboard-drag"),this._stripInlineTooltip(n),this.dragOptionButton=n,this.dragOptionText=n.querySelector(`.${this.classPrefix}-settings-text`);const a=o({classPrefix:this.classPrefix,itemClass:this.itemClass,icon:"resize",label:e.enableResize,hasTextClass:!0,onClick:t=>{t.preventDefault(),t.stopPropagation(),this.opts.onResizeItemClick(this),this.refreshState()}});a.setAttribute("role","switch"),a.setAttribute("aria-checked","false"),this._stripInlineTooltip(a),this.resizeOptionButton=a,this.resizeOptionText=a.querySelector(`.${this.classPrefix}-settings-text`),s.appendChild(n),s.appendChild(a),this.opts.buildExtraItems&&this.opts.buildExtraItems({menu:s,itemClass:this.itemClass,classPrefix:this.classPrefix,stripInlineTooltip:t=>this._stripInlineTooltip(t)});const r=o({classPrefix:this.classPrefix,itemClass:this.itemClass,icon:"close",label:e.closeMenu,onClick:()=>this.hide()});this._stripInlineTooltip(r),s.appendChild(r),s.style.visibility="hidden",s.style.display="block";const d=this.opts.getMenuParent();t.parentNode?t.insertAdjacentElement("afterend",s):d&&d.appendChild(s),this._positionImmediate(),requestAnimationFrame(()=>{this.settingsMenu&&(this.settingsMenu.style.visibility="visible")}),this._attachKeyboardNavigation(),this.settingsMenuVisible=!0,t.setAttribute("aria-expanded","true"),this.refreshState(),l(s,`.${this.itemClass}`)}_attachKeyboardNavigation(){const t=this.settingsMenu;if(!t)return;this._keyHandler&&t.removeEventListener("keydown",this._keyHandler,!0);const e=((t,e,i,n)=>{if(!t)return;const a=Array.from(t.querySelectorAll(i)).filter(t=>"true"!==t.getAttribute("aria-disabled"));if(0===a.length)return;const r=t=>{const i=a.indexOf(document.activeElement);switch(t.key){case"ArrowDown":{t.preventDefault(),t.stopPropagation();const e=(i+1)%a.length;a.forEach((t,s)=>{t.setAttribute("tabindex",s===e?"0":"-1")});const n=a[e];n&&(n.focus({preventScroll:!1}),n.scrollIntoView(s("nearest")));break}case"ArrowUp":{t.preventDefault(),t.stopPropagation();const e=(i-1+a.length)%a.length;a.forEach((t,s)=>{t.setAttribute("tabindex",s===e?"0":"-1")});const n=a[e];n&&(n.focus({preventScroll:!1}),n.scrollIntoView(s("nearest")));break}case"Home":{t.preventDefault(),t.stopPropagation(),a.forEach((t,e)=>{t.setAttribute("tabindex",0===e?"0":"-1")});const e=a[0];e&&(e.focus({preventScroll:!1}),e.scrollIntoView(s("nearest")));break}case"End":{t.preventDefault(),t.stopPropagation();const e=a.length-1;a.forEach((t,s)=>{t.setAttribute("tabindex",s===e?"0":"-1")});const i=a[e];i&&(i.focus({preventScroll:!1}),i.scrollIntoView(s("nearest")));break}case"Enter":case" ":t.preventDefault(),t.stopPropagation(),document.activeElement&&a.includes(document.activeElement)&&(document.activeElement.click(),n&&setTimeout(()=>{e&&document.contains(e)&&e.focus()},0));break;case"Escape":t.preventDefault(),t.stopPropagation(),n&&n()}};return t.addEventListener("keydown",r,!0),r})(t,this.opts.settingsButton,`.${this.itemClass}`,()=>this.hide({focusButton:!0}));this._keyHandler=e??null}_positionImmediate(){u(this.settingsMenu,this.opts.settingsButton,{align:this.opts.menuAlign,gap:this.opts.menuGap??4,spaceReserve:this.opts.menuSpaceReserve??20})}_stripInlineTooltip(t){const e=t.querySelector(`.${this.classPrefix}-tooltip`);e&&e.remove();const s=t.querySelector(`.${this.classPrefix}-button-text`);s&&s.remove()}_markJustOpened(t){this._justOpened=!0,this._justOpenedTimer&&clearTimeout(this._justOpenedTimer),this._justOpenedTimer=setTimeout(()=>{this._justOpened=!1,this._justOpenedTimer=null},t)}_clearJustOpened(){this._justOpened=!1,this._justOpenedTimer&&(clearTimeout(this._justOpenedTimer),this._justOpenedTimer=null)}_ensureDocumentClickHandler(){this._documentClickAdded||(this._documentClick=t=>{if(this._justOpened)return;const e=t.target,{settingsButton:s}=this.opts;s===e||e&&s.contains(e)||this.settingsMenu&&e&&this.settingsMenu.contains(e)||this.settingsMenuVisible&&this.hide()},setTimeout(()=>{const t=this._documentClick;t&&(document.addEventListener("mousedown",t,{capture:!0,signal:this.opts.player.lifecycleSignal}),this._documentClickAdded=!0)},300))}};export{a as createLabeledSelect,r as preventDragOnElement,o as createMenuItem,h as DraggablePanel};
|