vidply 1.0.32 → 1.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +7 -7
  2. package/dist/dev/{vidply.HLSRenderer-5MJZR4D2.js → vidply.HLSRenderer-YGWCAICA.js} +49 -4
  3. package/dist/dev/vidply.HLSRenderer-YGWCAICA.js.map +7 -0
  4. package/dist/dev/{vidply.HTML5Renderer-FXBZQL6Y.js → vidply.HTML5Renderer-PMNFHAKW.js} +3 -3
  5. package/dist/dev/{vidply.SoundCloudRenderer-CD7VJKNS.js → vidply.SoundCloudRenderer-RIA3QKP3.js} +2 -2
  6. package/dist/dev/{vidply.TranscriptManager-T677KF4N.js → vidply.TranscriptManager-T3BVTZHZ.js} +3 -3
  7. package/dist/dev/{vidply.VimeoRenderer-VPH4RNES.js → vidply.VimeoRenderer-DY2FG7LZ.js} +2 -2
  8. package/dist/dev/{vidply.YouTubeRenderer-6MGKEFTZ.js → vidply.YouTubeRenderer-EVXXE34A.js} +2 -2
  9. package/dist/dev/{vidply.chunk-GS2JX5RQ.js → vidply.chunk-74NJTDQI.js} +9 -6
  10. package/dist/dev/vidply.chunk-74NJTDQI.js.map +7 -0
  11. package/dist/dev/{vidply.chunk-W2LSBD6Y.js → vidply.chunk-IIN4G4UQ.js} +34 -4
  12. package/dist/dev/vidply.chunk-IIN4G4UQ.js.map +7 -0
  13. package/dist/dev/{vidply.de-SNL6AJ4D.js → vidply.de-YBEYEXBL.js} +5 -2
  14. package/dist/dev/vidply.de-YBEYEXBL.js.map +7 -0
  15. package/dist/dev/{vidply.es-2QCQKZ4U.js → vidply.es-QA4YSA5S.js} +2 -2
  16. package/dist/dev/vidply.esm.js +389 -82
  17. package/dist/dev/vidply.esm.js.map +2 -2
  18. package/dist/dev/{vidply.fr-FJAZRL4L.js → vidply.fr-LAM3XJZI.js} +2 -2
  19. package/dist/dev/{vidply.ja-2XQOW53T.js → vidply.ja-FTBFZD66.js} +2 -2
  20. package/dist/legacy/vidply.js +482 -79
  21. package/dist/legacy/vidply.js.map +3 -3
  22. package/dist/legacy/vidply.min.js +2 -2
  23. package/dist/legacy/vidply.min.meta.json +15 -15
  24. package/dist/prod/vidply.HLSRenderer-D2KTBEEI.min.js +6 -0
  25. package/dist/prod/{vidply.HTML5Renderer-KKW3OLHM.min.js → vidply.HTML5Renderer-ZSV6PDOH.min.js} +2 -2
  26. package/dist/prod/{vidply.SoundCloudRenderer-MOR2CUFH.min.js → vidply.SoundCloudRenderer-BFV5SSIU.min.js} +1 -1
  27. package/dist/prod/{vidply.TranscriptManager-WFZSW6NR.min.js → vidply.TranscriptManager-GPAOXEK4.min.js} +2 -2
  28. package/dist/prod/{vidply.VimeoRenderer-3HBMM2WR.min.js → vidply.VimeoRenderer-UQWHQ4LC.min.js} +1 -1
  29. package/dist/prod/{vidply.YouTubeRenderer-MFC2GMAC.min.js → vidply.YouTubeRenderer-K7A57ICA.min.js} +1 -1
  30. package/dist/prod/vidply.chunk-OM7DNW5P.min.js +6 -0
  31. package/dist/prod/vidply.chunk-SQVOYVKH.min.js +6 -0
  32. package/dist/prod/vidply.de-WCUZUF3T.min.js +6 -0
  33. package/dist/prod/{vidply.es-3IJCQLJ7.min.js → vidply.es-54CIIDMO.min.js} +1 -1
  34. package/dist/prod/vidply.esm.min.js +5 -5
  35. package/dist/prod/{vidply.fr-NC4VEAPH.min.js → vidply.fr-7FYGFFK2.min.js} +1 -1
  36. package/dist/prod/{vidply.ja-4ZC6ZQLV.min.js → vidply.ja-E4UTAURP.min.js} +1 -1
  37. package/dist/vidply.css +1 -1
  38. package/dist/vidply.esm.min.meta.json +45 -45
  39. package/dist/vidply.min.css +1 -1
  40. package/package.json +1 -1
  41. package/src/controls/ControlBar.js +104 -70
  42. package/src/core/Player.js +217 -3
  43. package/src/features/PlaylistManager.js +206 -36
  44. package/src/i18n/languages/de.js +3 -0
  45. package/src/i18n/languages/en.js +3 -0
  46. package/src/renderers/HLSRenderer.js +60 -1
  47. package/src/renderers/HTML5Renderer.js +43 -5
  48. package/dist/dev/vidply.HLSRenderer-5MJZR4D2.js.map +0 -7
  49. package/dist/dev/vidply.chunk-GS2JX5RQ.js.map +0 -7
  50. package/dist/dev/vidply.chunk-W2LSBD6Y.js.map +0 -7
  51. package/dist/dev/vidply.de-SNL6AJ4D.js.map +0 -7
  52. package/dist/prod/vidply.HLSRenderer-VWNJD2CB.min.js +0 -6
  53. package/dist/prod/vidply.chunk-34RH2THY.min.js +0 -6
  54. package/dist/prod/vidply.chunk-LGTJRPUL.min.js +0 -6
  55. package/dist/prod/vidply.de-FR3XX54P.min.js +0 -6
  56. /package/dist/dev/{vidply.HTML5Renderer-FXBZQL6Y.js.map → vidply.HTML5Renderer-PMNFHAKW.js.map} +0 -0
  57. /package/dist/dev/{vidply.SoundCloudRenderer-CD7VJKNS.js.map → vidply.SoundCloudRenderer-RIA3QKP3.js.map} +0 -0
  58. /package/dist/dev/{vidply.TranscriptManager-T677KF4N.js.map → vidply.TranscriptManager-T3BVTZHZ.js.map} +0 -0
  59. /package/dist/dev/{vidply.VimeoRenderer-VPH4RNES.js.map → vidply.VimeoRenderer-DY2FG7LZ.js.map} +0 -0
  60. /package/dist/dev/{vidply.YouTubeRenderer-6MGKEFTZ.js.map → vidply.YouTubeRenderer-EVXXE34A.js.map} +0 -0
  61. /package/dist/dev/{vidply.es-2QCQKZ4U.js.map → vidply.es-QA4YSA5S.js.map} +0 -0
  62. /package/dist/dev/{vidply.fr-FJAZRL4L.js.map → vidply.fr-LAM3XJZI.js.map} +0 -0
  63. /package/dist/dev/{vidply.ja-2XQOW53T.js.map → vidply.ja-FTBFZD66.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * Universal, Accessible Video Player
3
- * (c) 2025 Matthias Peltzer
3
+ * (c) 2026 Matthias Peltzer
4
4
  * Released under GPL-2.0-or-later License
5
5
  */
6
6
 
@@ -9,13 +9,18 @@ var HTML5Renderer = class {
9
9
  constructor(player) {
10
10
  this.player = player;
11
11
  this.media = player.element;
12
+ this._didDeferredLoad = false;
12
13
  }
13
14
  async init() {
14
15
  this.media.controls = false;
15
16
  this.media.removeAttribute("controls");
16
17
  this.attachEvents();
17
- this.media.preload = this.player.options.preload;
18
- this.media.load();
18
+ if (this.player.options.deferLoad) {
19
+ this.media.preload = this.player.options.preload || "none";
20
+ } else {
21
+ this.media.preload = this.player.options.preload;
22
+ this.media.load();
23
+ }
19
24
  if (this.player.container) {
20
25
  this.player.container.classList.remove("vidply-external-controls");
21
26
  }
@@ -122,6 +127,15 @@ var HTML5Renderer = class {
122
127
  play() {
123
128
  const scrollX = window.scrollX;
124
129
  const scrollY = window.scrollY;
130
+ if (this.player.options.deferLoad && !this._didDeferredLoad) {
131
+ try {
132
+ if (this.media.readyState === 0) {
133
+ this.media.load();
134
+ }
135
+ } catch (e) {
136
+ }
137
+ this._didDeferredLoad = true;
138
+ }
125
139
  const promise = this.media.play();
126
140
  window.scrollTo(scrollX, scrollY);
127
141
  if (promise !== void 0) {
@@ -141,6 +155,22 @@ var HTML5Renderer = class {
141
155
  });
142
156
  }
143
157
  }
158
+ /**
159
+ * Ensure the media element has been loaded at least once (metadata/initial state)
160
+ * without starting playback. Useful for playlists to behave like single videos.
161
+ */
162
+ ensureLoaded() {
163
+ if (!this.player.options.deferLoad || this._didDeferredLoad) {
164
+ return;
165
+ }
166
+ try {
167
+ if (this.media.readyState === 0) {
168
+ this.media.load();
169
+ }
170
+ } catch (e) {
171
+ }
172
+ this._didDeferredLoad = true;
173
+ }
144
174
  pause() {
145
175
  this.media.pause();
146
176
  }
@@ -248,4 +278,4 @@ var HTML5Renderer = class {
248
278
  export {
249
279
  HTML5Renderer
250
280
  };
251
- //# sourceMappingURL=vidply.chunk-W2LSBD6Y.js.map
281
+ //# sourceMappingURL=vidply.chunk-IIN4G4UQ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/renderers/HTML5Renderer.js"],
4
+ "sourcesContent": ["/**\r\n * HTML5 Media Renderer\r\n */\r\n\r\nexport class HTML5Renderer {\r\n constructor(player) {\r\n this.player = player;\r\n this.media = player.element;\r\n this._didDeferredLoad = false;\r\n }\r\n\r\n async init() {\r\n // Hide native controls\r\n this.media.controls = false;\r\n this.media.removeAttribute('controls');\r\n \r\n this.attachEvents();\r\n \r\n // Set preload + optionally defer network loading until user play\r\n if (this.player.options.deferLoad) {\r\n // Allow metadata preload while still avoiding an explicit load() call.\r\n // Note: browsers may still fetch metadata automatically when preload=\"metadata\".\r\n this.media.preload = this.player.options.preload || 'none';\r\n } else {\r\n this.media.preload = this.player.options.preload;\r\n // Load media (eager)\r\n this.media.load();\r\n }\r\n \r\n // Show VidPly controls (remove external controls class if present)\r\n if (this.player.container) {\r\n this.player.container.classList.remove('vidply-external-controls');\r\n }\r\n }\r\n\r\n attachEvents() {\r\n // Playback events\r\n this.media.addEventListener('loadedmetadata', () => {\r\n this.player.state.duration = this.media.duration;\r\n this.player.emit('loadedmetadata');\r\n \r\n // Auto-generate poster if none exists (for HTML5 video only)\r\n if (this.media.tagName === 'VIDEO') {\r\n this.player.autoGeneratePoster().catch(error => {\r\n this.player.log('Failed to auto-generate poster:', error, 'warn');\r\n });\r\n }\r\n });\r\n\r\n this.media.addEventListener('play', () => {\r\n this.player.state.playing = true;\r\n this.player.state.paused = false;\r\n this.player.state.ended = false;\r\n this.player.emit('play');\r\n \r\n if (this.player.options.onPlay) {\r\n this.player.options.onPlay.call(this.player);\r\n }\r\n \r\n // Pause other players if enabled\r\n if (this.player.options.pauseOthersOnPlay) {\r\n this.pauseOtherPlayers();\r\n }\r\n });\r\n\r\n this.media.addEventListener('pause', () => {\r\n this.player.state.playing = false;\r\n this.player.state.paused = true;\r\n this.player.emit('pause');\r\n \r\n if (this.player.options.onPause) {\r\n this.player.options.onPause.call(this.player);\r\n }\r\n });\r\n\r\n this.media.addEventListener('ended', () => {\r\n this.player.state.playing = false;\r\n this.player.state.paused = true;\r\n this.player.state.ended = true;\r\n this.player.emit('ended');\r\n \r\n if (this.player.options.onEnded) {\r\n this.player.options.onEnded.call(this.player);\r\n }\r\n \r\n // Handle loop\r\n if (this.player.options.loop) {\r\n this.player.seek(0);\r\n this.player.play();\r\n }\r\n });\r\n\r\n this.media.addEventListener('timeupdate', () => {\r\n this.player.state.currentTime = this.media.currentTime;\r\n this.player.emit('timeupdate', this.media.currentTime);\r\n \r\n if (this.player.options.onTimeUpdate) {\r\n this.player.options.onTimeUpdate.call(this.player, this.media.currentTime);\r\n }\r\n });\r\n\r\n this.media.addEventListener('volumechange', () => {\r\n this.player.state.volume = this.media.volume;\r\n this.player.state.muted = this.media.muted;\r\n this.player.emit('volumechange', this.media.volume);\r\n \r\n if (this.player.options.onVolumeChange) {\r\n this.player.options.onVolumeChange.call(this.player, this.media.volume);\r\n }\r\n });\r\n\r\n this.media.addEventListener('seeking', () => {\r\n this.player.state.seeking = true;\r\n this.player.emit('seeking');\r\n });\r\n\r\n this.media.addEventListener('seeked', () => {\r\n this.player.state.seeking = false;\r\n this.player.emit('seeked');\r\n });\r\n\r\n this.media.addEventListener('waiting', () => {\r\n this.player.state.buffering = true;\r\n this.player.emit('waiting');\r\n });\r\n\r\n this.media.addEventListener('canplay', () => {\r\n this.player.state.buffering = false;\r\n this.player.emit('canplay');\r\n });\r\n\r\n this.media.addEventListener('progress', () => {\r\n if (this.media.buffered.length > 0) {\r\n const buffered = this.media.buffered.end(this.media.buffered.length - 1);\r\n this.player.emit('progress', buffered);\r\n }\r\n });\r\n\r\n this.media.addEventListener('error', (e) => {\r\n this.player.handleError(this.media.error);\r\n });\r\n\r\n this.media.addEventListener('ratechange', () => {\r\n this.player.state.playbackSpeed = this.media.playbackRate;\r\n this.player.emit('ratechange', this.media.playbackRate);\r\n });\r\n }\r\n\r\n pauseOtherPlayers() {\r\n // Pause other VidPly instances\r\n const allPlayers = document.querySelectorAll('.vidply-player');\r\n allPlayers.forEach(playerEl => {\r\n if (playerEl !== this.player.container) {\r\n const video = playerEl.querySelector('video, audio');\r\n if (video && !video.paused) {\r\n video.pause();\r\n }\r\n }\r\n });\r\n }\r\n\r\n play() {\r\n // Save scroll position to prevent browser from scrolling to video\r\n const scrollX = window.scrollX;\r\n const scrollY = window.scrollY;\r\n\r\n // If deferLoad is enabled, trigger load only on the first user play request.\r\n if (this.player.options.deferLoad && !this._didDeferredLoad) {\r\n try {\r\n // Only call load() if browser hasn't loaded anything yet.\r\n if (this.media.readyState === 0) {\r\n this.media.load();\r\n }\r\n } catch (e) {\r\n // ignore\r\n }\r\n this._didDeferredLoad = true;\r\n }\r\n \r\n const promise = this.media.play();\r\n \r\n // Restore scroll position immediately to prevent auto-scroll\r\n window.scrollTo(scrollX, scrollY);\r\n \r\n if (promise !== undefined) {\r\n promise.catch(error => {\r\n this.player.log('Play failed:', error, 'warn');\r\n \r\n // If autoplay failed, try muted autoplay\r\n if (this.player.options.autoplay && !this.player.state.muted) {\r\n this.player.log('Retrying play with muted audio', 'info');\r\n this.media.muted = true;\r\n \r\n // Save scroll position again for retry\r\n const retryScrollX = window.scrollX;\r\n const retryScrollY = window.scrollY;\r\n this.media.play().then(() => {\r\n window.scrollTo(retryScrollX, retryScrollY);\r\n }).catch(err => {\r\n this.player.handleError(err);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Ensure the media element has been loaded at least once (metadata/initial state)\r\n * without starting playback. Useful for playlists to behave like single videos.\r\n */\r\n ensureLoaded() {\r\n if (!this.player.options.deferLoad || this._didDeferredLoad) {\r\n return;\r\n }\r\n\r\n try {\r\n if (this.media.readyState === 0) {\r\n this.media.load();\r\n }\r\n } catch (e) {\r\n // ignore\r\n }\r\n this._didDeferredLoad = true;\r\n }\r\n\r\n pause() {\r\n this.media.pause();\r\n }\r\n\r\n seek(time) {\r\n this.media.currentTime = time;\r\n }\r\n\r\n setVolume(volume) {\r\n this.media.volume = volume;\r\n }\r\n\r\n setMuted(muted) {\r\n this.media.muted = muted;\r\n }\r\n\r\n setPlaybackSpeed(speed) {\r\n this.media.playbackRate = speed;\r\n }\r\n\r\n /**\r\n * Get available quality levels from source elements\r\n * @returns {Array} Array of quality objects with index, height, width, and src\r\n */\r\n getQualities() {\r\n const sources = Array.from(this.media.querySelectorAll('source'));\r\n \r\n if (sources.length <= 1) {\r\n return [];\r\n }\r\n\r\n return sources.map((source, index) => {\r\n // Try to extract quality from data attributes or label\r\n const label = source.getAttribute('data-quality') || source.getAttribute('label') || '';\r\n const height = source.getAttribute('data-height') || this.extractHeightFromLabel(label);\r\n const width = source.getAttribute('data-width') || '';\r\n \r\n return {\r\n index,\r\n height: height ? parseInt(height) : 0,\r\n width: width ? parseInt(width) : 0,\r\n src: source.src,\r\n type: source.type,\r\n name: label || (height ? `${height}p` : `Quality ${index + 1}`)\r\n };\r\n }).filter(q => q.height > 0); // Only return qualities with valid height\r\n }\r\n\r\n /**\r\n * Extract height from quality label (e.g., \"1080p\" -> 1080)\r\n * @param {string} label \r\n * @returns {number}\r\n */\r\n extractHeightFromLabel(label) {\r\n const match = label.match(/(\\d+)p/i);\r\n return match ? parseInt(match[1]) : 0;\r\n }\r\n\r\n /**\r\n * Switch to a specific quality level\r\n * @param {number} qualityIndex - Index of the quality level (-1 for auto, not applicable for HTML5)\r\n */\r\n switchQuality(qualityIndex) {\r\n const qualities = this.getQualities();\r\n \r\n if (qualityIndex < 0 || qualityIndex >= qualities.length) {\r\n this.player.log('Invalid quality index', 'warn');\r\n return;\r\n }\r\n\r\n const quality = qualities[qualityIndex];\r\n const currentTime = this.media.currentTime;\r\n const wasPlaying = !this.media.paused;\r\n\r\n // Store the current source for comparison\r\n const currentSrc = this.media.currentSrc;\r\n \r\n // Don't switch if already at this quality\r\n if (currentSrc === quality.src) {\r\n this.player.log('Already at this quality level', 'info');\r\n return;\r\n }\r\n\r\n this.player.log(`Switching to quality: ${quality.name}`, 'info');\r\n\r\n // Update the src\r\n this.media.src = quality.src;\r\n \r\n // Wait for the new source to load, then restore playback state\r\n const onLoadedMetadata = () => {\r\n this.media.removeEventListener('loadedmetadata', onLoadedMetadata);\r\n \r\n // Restore playback position\r\n this.media.currentTime = currentTime;\r\n \r\n // Resume playback if it was playing\r\n if (wasPlaying) {\r\n this.media.play().catch(err => {\r\n this.player.log('Failed to resume playback after quality switch', 'warn');\r\n });\r\n }\r\n \r\n // Emit quality change event\r\n this.player.emit('qualitychange', { quality: quality.name, index: qualityIndex });\r\n };\r\n\r\n this.media.addEventListener('loadedmetadata', onLoadedMetadata);\r\n this.media.load();\r\n }\r\n\r\n /**\r\n * Get current quality index\r\n * @returns {number}\r\n */\r\n getCurrentQuality() {\r\n const qualities = this.getQualities();\r\n const currentSrc = this.media.currentSrc;\r\n \r\n for (let i = 0; i < qualities.length; i++) {\r\n if (qualities[i].src === currentSrc) {\r\n return i;\r\n }\r\n }\r\n \r\n return 0; // Default to first quality if not found\r\n }\r\n\r\n destroy() {\r\n // Remove event listeners\r\n this.media.removeEventListener('loadedmetadata', () => {});\r\n this.media.removeEventListener('play', () => {});\r\n this.media.removeEventListener('pause', () => {});\r\n // ... (other listeners would be removed in a real implementation)\r\n }\r\n}\r\n\r\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * Universal, Accessible Video Player
3
- * (c) 2025 Matthias Peltzer
3
+ * (c) 2026 Matthias Peltzer
4
4
  * Released under GPL-2.0-or-later License
5
5
  */
6
6
 
@@ -48,6 +48,9 @@ var de = {
48
48
  signLanguageVideo: "Gebärdensprache-Video",
49
49
  closeSignLanguage: "Gebärdensprache-Video schließen",
50
50
  signLanguageSettings: "Gebärdensprache-Einstellungen",
51
+ startPlaybackFirst: "Bitte starten Sie die Wiedergabe zuerst.",
52
+ startPlaybackForAudioDescription: "Bitte starten Sie die Wiedergabe zuerst, um die Audiodeskription zu nutzen.",
53
+ startPlaybackForSignLanguage: "Bitte starten Sie die Wiedergabe zuerst, um das Gebärdensprache-Video zu nutzen.",
51
54
  noChapters: "Keine Kapitel verfügbar",
52
55
  noCaptions: "Keine Untertitel verfügbar",
53
56
  auto: "Automatisch",
@@ -185,4 +188,4 @@ var de = {
185
188
  export {
186
189
  de
187
190
  };
188
- //# sourceMappingURL=vidply.de-SNL6AJ4D.js.map
191
+ //# sourceMappingURL=vidply.de-YBEYEXBL.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/i18n/languages/de.js"],
4
+ "sourcesContent": ["/**\r\n * German translations for VidPly\r\n */\r\n\r\nexport const de = {\r\n player: {\r\n label: 'Videoplayer',\r\n play: 'Abspielen',\r\n pause: 'Pause',\r\n stop: 'Stopp',\r\n restart: 'Von vorne beginnen',\r\n rewind: 'Zurückspulen',\r\n forward: 'Vorspulen',\r\n rewindSeconds: '{seconds} Sekunden zurückspulen',\r\n forwardSeconds: '{seconds} Sekunden vorspulen',\r\n previous: 'Vorheriger Titel',\r\n next: 'Nächster Titel',\r\n playlist: 'Wiedergabeliste umschalten',\r\n volume: 'Lautstärke',\r\n mute: 'Stumm',\r\n unmute: 'Ton ein',\r\n fullscreen: 'Vollbild',\r\n exitFullscreen: 'Vollbild beenden',\r\n captions: 'Untertitel',\r\n chapters: 'Kapitel',\r\n quality: 'Qualität',\r\n captionStyling: 'Untertitel-Stil',\r\n transcript: 'Transkript umschalten',\r\n audioDescription: 'Audiodeskription',\r\n signLanguage: 'Gebärdensprache-Video',\r\n settings: 'Einstellungen',\r\n speed: 'Wiedergabegeschwindigkeit',\r\n pip: 'Bild-in-Bild',\r\n currentTime: 'Aktuelle Zeit',\r\n duration: 'Dauer',\r\n progress: 'Fortschritt',\r\n seekForward: '{seconds} Sekunden vorspulen',\r\n seekBackward: '{seconds} Sekunden zurückspulen',\r\n volumeUp: 'Lauter',\r\n volumeDown: 'Leiser',\r\n loading: 'Lädt...',\r\n loadingChapters: 'Kapitel werden geladen...',\r\n error: 'Fehler beim Laden',\r\n buffering: 'Puffern...',\r\n signLanguageVideo: 'Gebärdensprache-Video',\r\n closeSignLanguage: 'Gebärdensprache-Video schließen',\r\n signLanguageSettings: 'Gebärdensprache-Einstellungen',\r\n startPlaybackFirst: 'Bitte starten Sie die Wiedergabe zuerst.',\r\n startPlaybackForAudioDescription: 'Bitte starten Sie die Wiedergabe zuerst, um die Audiodeskription zu nutzen.',\r\n startPlaybackForSignLanguage: 'Bitte starten Sie die Wiedergabe zuerst, um das Gebärdensprache-Video zu nutzen.',\r\n noChapters: 'Keine Kapitel verfügbar',\r\n noCaptions: 'Keine Untertitel verfügbar',\r\n auto: 'Automatisch',\r\n autoQuality: 'Automatisch (keine Qualitätsauswahl verfügbar)',\r\n noQuality: 'Qualitätsauswahl nicht verfügbar',\r\n signLanguageDragResize: 'Gebärdensprache-Video - Drücken Sie D zum Verschieben per Tastatur, R zum Ändern der Größe',\r\n signLanguageDragActive: 'Gebärdensprache-Video - Verschiebemodus aktiv. Pfeiltasten zum Bewegen, Escape zum Beenden.',\r\n signLanguageResizeActive: 'Gebärdensprache-Video - Größenänderungsmodus aktiv. Links-/Rechts-Pfeiltasten zum Ändern der Größe, Escape zum Beenden.',\r\n enableSignDragMode: 'Verschiebemodus aktivieren. Tastenkombination: D-Taste',\r\n disableSignDragMode: 'Verschiebemodus deaktivieren. Tastenkombination: D-Taste',\r\n enableSignDragModeAria: 'Tastatur-Verschiebemodus mit Pfeiltasten aktivieren. Tastenkombination: D-Taste',\r\n disableSignDragModeAria: 'Tastatur-Verschiebemodus mit Pfeiltasten deaktivieren. Tastenkombination: D-Taste',\r\n enableSignResizeMode: 'Größenänderungsmodus aktivieren. Tastenkombination: R-Taste',\r\n disableSignResizeMode: 'Größenänderungsmodus deaktivieren. Tastenkombination: R-Taste',\r\n enableSignResizeModeAria: 'Tastatur-Größenänderungsmodus mit Pfeiltasten aktivieren. Tastenkombination: R-Taste',\r\n disableSignResizeModeAria: 'Tastatur-Größenänderungsmodus mit Pfeiltasten deaktivieren. Tastenkombination: R-Taste',\r\n resizeHandle: 'Größenänderung {direction}-Ecke',\r\n moreOptions: 'Weitere Optionen',\r\n noMoreOptions: 'Keine weiteren Optionen verfügbar'\r\n },\r\n captions: {\r\n off: 'Aus',\r\n select: 'Untertitel auswählen',\r\n fontSize: 'Schriftgröße',\r\n fontFamily: 'Schriftart',\r\n color: 'Textfarbe',\r\n backgroundColor: 'Hintergrundfarbe',\r\n opacity: 'Deckkraft'\r\n },\r\n fontSizes: {\r\n small: 'Klein',\r\n normal: 'Normal',\r\n large: 'Groß',\r\n xlarge: 'Sehr groß'\r\n },\r\n fontFamilies: {\r\n sansSerif: 'Sans-serif',\r\n serif: 'Serif',\r\n monospace: 'Monospace'\r\n },\r\n styleLabels: {\r\n textColor: 'Textfarbe',\r\n background: 'Hintergrund',\r\n font: 'Schrift',\r\n fontSize: 'Schriftgröße',\r\n opacity: 'Deckkraft'\r\n },\r\n audioDescription: {\r\n enable: 'Audiodeskription aktivieren',\r\n disable: 'Audiodeskription deaktivieren'\r\n },\r\n signLanguage: {\r\n show: 'Gebärdensprache-Video anzeigen',\r\n hide: 'Gebärdensprache-Video ausblenden'\r\n },\r\n transcript: {\r\n title: 'Transkript',\r\n ariaLabel: 'Video-Transkript',\r\n close: 'Transkript schließen',\r\n loading: 'Transkript wird geladen...',\r\n noTranscript: 'Kein Transkript für dieses Video verfügbar.',\r\n settings: 'Transkript-Einstellungen. Eingabetaste zum Öffnen des Menüs drücken oder D zum Aktivieren des Verschiebemodus',\r\n keyboardDragMode: 'Tastatur-Verschiebemodus mit Pfeiltasten umschalten. Tastenkombination: D-Taste',\r\n keyboardDragActive: '⌨️ Tastatur-Verschiebemodus aktiv (Pfeiltasten zum Bewegen, Umschalt+Pfeiltasten für große Schritte, D oder ESC zum Beenden)',\r\n dragResizePrompt: 'Drücken Sie D zum Verschieben oder R zur Größenänderung. Home setzt die Position zurück, Esc schließt.',\r\n dragModeEnabled: 'Tastatur-Verschiebemodus aktiviert. Pfeiltasten zum Bewegen, Umschalt+Pfeiltasten für größere Schritte. D oder Esc zum Beenden.',\r\n dragModeDisabled: 'Tastatur-Verschiebemodus deaktiviert.',\r\n enableDragMode: 'Verschiebemodus aktivieren. Tastenkombination: D-Taste',\r\n disableDragMode: 'Verschiebemodus deaktivieren. Tastenkombination: D-Taste',\r\n enableDragModeAria: 'Tastatur-Verschiebemodus mit Pfeiltasten aktivieren. Tastenkombination: D-Taste',\r\n disableDragModeAria: 'Tastatur-Verschiebemodus mit Pfeiltasten deaktivieren. Tastenkombination: D-Taste',\r\n resizeWindow: 'Fenster vergrößern/verkleinern',\r\n disableResizeWindow: 'Resize-Modus deaktivieren',\r\n enableResizeMode: 'Größenänderungsmodus aktivieren. Tastenkombination: R-Taste',\r\n disableResizeMode: 'Größenänderungsmodus deaktivieren. Tastenkombination: R-Taste',\r\n enableResizeModeAria: 'Tastatur-Größenänderungsmodus mit Pfeiltasten aktivieren. Tastenkombination: R-Taste',\r\n disableResizeModeAria: 'Tastatur-Größenänderungsmodus mit Pfeiltasten deaktivieren. Tastenkombination: R-Taste',\r\n resizeModeHint: 'Griffe aktiviert. Ziehen Sie Kanten oder Ecken zum Anpassen. Esc oder R zum Beenden.',\r\n resizeModeEnabled: 'Resize-Modus aktiviert. Kanten oder Ecken ziehen; Esc oder R beendet.',\r\n resizeModeDisabled: 'Resize-Modus deaktiviert.',\r\n positionReset: 'Transkriptposition zurückgesetzt.',\r\n styleTranscript: 'Transkript-Stileinstellungen öffnen',\r\n closeMenu: 'Menü schließen',\r\n styleTitle: 'Transkript-Stil',\r\n autoscroll: 'Auto-Scroll',\r\n settingsMenu: 'Transkript-Dialog-Einstellungen',\r\n showTimestamps: 'Zeitstempel anzeigen',\r\n hideTimestamps: 'Zeitstempel ausblenden',\r\n showTimestampsAria: 'Zeitstempel im Transkript anzeigen',\r\n hideTimestampsAria: 'Zeitstempel im Transkript ausblenden'\r\n },\r\n settings: {\r\n title: 'Einstellungen',\r\n quality: 'Qualität',\r\n speed: 'Geschwindigkeit',\r\n captions: 'Untertitel',\r\n language: 'Sprache',\r\n reset: 'Zurücksetzen',\r\n close: 'Schließen'\r\n },\r\n speeds: {\r\n normal: 'Normal'\r\n },\r\n time: {\r\n display: 'Zeitanzeige',\r\n durationPrefix: 'Dauer: ',\r\n of: 'von',\r\n hour: '{count} Stunde',\r\n hours: '{count} Stunden',\r\n minute: '{count} Minute',\r\n minutes: '{count} Minuten',\r\n second: '{count} Sekunde',\r\n seconds: '{count} Sekunden'\r\n },\r\n playlist: {\r\n title: 'Wiedergabeliste',\r\n trackOf: 'Titel {current} von {total}',\r\n nowPlaying: 'Läuft gerade: Titel {current} von {total}. {title}{artist}',\r\n by: ' von ',\r\n untitled: 'Ohne Titel',\r\n trackUntitled: 'Titel {number}',\r\n currentlyPlaying: 'Wird gerade abgespielt',\r\n notPlaying: 'Nicht aktiv',\r\n pressEnterPlay: 'Eingabetaste zum Abspielen',\r\n pressEnterRestart: 'Eingabetaste zum Neustart',\r\n keyboardInstructions: 'Wiedergabelisten-Navigation: Verwenden Sie die Pfeiltasten nach oben und unten, um zwischen Titeln zu wechseln. Drücken Sie Bild auf oder Bild ab, um 5 Titel zu überspringen. Drücken Sie Pos1, um zum ersten Titel zu springen, Ende für den letzten Titel. Drücken Sie die Eingabetaste oder Leertaste, um den ausgewählten Titel abzuspielen.',\r\n endOfPlaylist: 'Ende der Wiedergabeliste. {current} von {total}.',\r\n beginningOfPlaylist: 'Anfang der Wiedergabeliste. 1 von {total}.',\r\n jumpedToLastTrack: 'Zum letzten Titel gesprungen. {current} von {total}.',\r\n jumpedToFirstTrack: 'Zum ersten Titel gesprungen. 1 von {total}.',\r\n firstTrack: 'Erster Titel. 1 von {total}.',\r\n lastTrack: 'Letzter Titel. {current} von {total}.'\r\n }\r\n};\r\n\r\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * Universal, Accessible Video Player
3
- * (c) 2025 Matthias Peltzer
3
+ * (c) 2026 Matthias Peltzer
4
4
  * Released under GPL-2.0-or-later License
5
5
  */
6
6
 
@@ -185,4 +185,4 @@ var es = {
185
185
  export {
186
186
  es
187
187
  };
188
- //# sourceMappingURL=vidply.es-2QCQKZ4U.js.map
188
+ //# sourceMappingURL=vidply.es-QA4YSA5S.js.map