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
package/src/core/Player.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {DOMUtils} from '../utils/DOMUtils.js';
|
|
|
8
8
|
import {ControlBar} from '../controls/ControlBar.js';
|
|
9
9
|
import {CaptionManager} from '../controls/CaptionManager.js';
|
|
10
10
|
import {KeyboardManager} from '../controls/KeyboardManager.js';
|
|
11
|
+
import {MediaSessionManager} from './MediaSessionManager.js';
|
|
11
12
|
import {HTML5Renderer} from '../renderers/HTML5Renderer.js';
|
|
12
13
|
import {createPlayOverlay} from '../icons/Icons.js';
|
|
13
14
|
import {i18n} from '../i18n/i18n.js';
|
|
@@ -41,6 +42,7 @@ import type {FloatingPlayerManager} from './FloatingPlayerManager.js';
|
|
|
41
42
|
import type {TranscriptManager} from '../controls/TranscriptManager.js';
|
|
42
43
|
import type {PlaylistManager} from '../features/PlaylistManager.js';
|
|
43
44
|
import type {SettingsDialog} from '../controls/SettingsDialog.js';
|
|
45
|
+
import {KeyboardHelp} from '../controls/KeyboardHelp.js';
|
|
44
46
|
|
|
45
47
|
// Typed dynamic loaders. Each loader returns the constructor for the
|
|
46
48
|
// lazily imported manager, so call sites get full IntelliSense and
|
|
@@ -167,9 +169,11 @@ export class Player extends EventEmitter<PlayerEventMap> {
|
|
|
167
169
|
controlBar: ControlBar | null = null;
|
|
168
170
|
captionManager: CaptionManager | null = null;
|
|
169
171
|
keyboardManager: KeyboardManager | null = null;
|
|
172
|
+
mediaSessionManager: MediaSessionManager | null = null;
|
|
170
173
|
transcriptManager: TranscriptManager | null = null;
|
|
171
174
|
playlistManager: PlaylistManager | null = null;
|
|
172
175
|
settingsDialog: SettingsDialog | null = null;
|
|
176
|
+
keyboardHelp: KeyboardHelp | null = null;
|
|
173
177
|
audioDescriptionManager: AudioDescriptionManager | null = null;
|
|
174
178
|
signLanguageManager: SignLanguageManager | null = null;
|
|
175
179
|
floatingPlayerManager: FloatingPlayerManager | null = null;
|
|
@@ -310,6 +314,12 @@ export class Player extends EventEmitter<PlayerEventMap> {
|
|
|
310
314
|
responsive: true,
|
|
311
315
|
fillContainer: false,
|
|
312
316
|
|
|
317
|
+
// Media metadata + OS media controls (Media Session API)
|
|
318
|
+
title: null,
|
|
319
|
+
artist: null,
|
|
320
|
+
album: null,
|
|
321
|
+
mediaSession: true,
|
|
322
|
+
|
|
313
323
|
// Playback
|
|
314
324
|
autoplay: false,
|
|
315
325
|
loop: false,
|
|
@@ -357,6 +367,7 @@ export class Player extends EventEmitter<PlayerEventMap> {
|
|
|
357
367
|
captionsButton: true,
|
|
358
368
|
transcriptButton: true,
|
|
359
369
|
fullscreenButton: true,
|
|
370
|
+
helpButton: true,
|
|
360
371
|
pipButton: false,
|
|
361
372
|
floating: false,
|
|
362
373
|
floatingPosition: 'bottom-right',
|
|
@@ -417,7 +428,8 @@ export class Player extends EventEmitter<PlayerEventMap> {
|
|
|
417
428
|
'speed-menu': ['s'],
|
|
418
429
|
'quality-menu': ['q'],
|
|
419
430
|
'chapters-menu': ['j'],
|
|
420
|
-
'transcript-toggle': ['t']
|
|
431
|
+
'transcript-toggle': ['t'],
|
|
432
|
+
'help': ['?']
|
|
421
433
|
},
|
|
422
434
|
|
|
423
435
|
// Accessibility
|
|
@@ -817,6 +829,11 @@ export class Player extends EventEmitter<PlayerEventMap> {
|
|
|
817
829
|
this.keyboardManager = new KeyboardManager(this);
|
|
818
830
|
}
|
|
819
831
|
|
|
832
|
+
// Integrate with OS media controls (Media Session API)
|
|
833
|
+
if (this.options.mediaSession) {
|
|
834
|
+
this.mediaSessionManager = new MediaSessionManager(this);
|
|
835
|
+
}
|
|
836
|
+
|
|
820
837
|
// Set up responsive handlers
|
|
821
838
|
this.setupResponsiveHandlers();
|
|
822
839
|
|
|
@@ -2607,6 +2624,29 @@ export class Player extends EventEmitter<PlayerEventMap> {
|
|
|
2607
2624
|
// No-op - settings dialog removed
|
|
2608
2625
|
}
|
|
2609
2626
|
|
|
2627
|
+
/**
|
|
2628
|
+
* Lazily build (on first use) and toggle the keyboard-shortcuts help
|
|
2629
|
+
* dialog. Reflects the live `keyboardShortcuts` bindings, including any
|
|
2630
|
+
* consumer overrides.
|
|
2631
|
+
*/
|
|
2632
|
+
toggleKeyboardHelp() {
|
|
2633
|
+
if (!this.keyboardHelp) {
|
|
2634
|
+
this.keyboardHelp = new KeyboardHelp(this);
|
|
2635
|
+
}
|
|
2636
|
+
this.keyboardHelp.toggle();
|
|
2637
|
+
}
|
|
2638
|
+
|
|
2639
|
+
showKeyboardHelp() {
|
|
2640
|
+
if (!this.keyboardHelp) {
|
|
2641
|
+
this.keyboardHelp = new KeyboardHelp(this);
|
|
2642
|
+
}
|
|
2643
|
+
this.keyboardHelp.show();
|
|
2644
|
+
}
|
|
2645
|
+
|
|
2646
|
+
hideKeyboardHelp() {
|
|
2647
|
+
this.keyboardHelp?.hide();
|
|
2648
|
+
}
|
|
2649
|
+
|
|
2610
2650
|
// Utility methods
|
|
2611
2651
|
getCurrentTime() {
|
|
2612
2652
|
return this.state.currentTime;
|
|
@@ -2778,6 +2818,24 @@ export class Player extends EventEmitter<PlayerEventMap> {
|
|
|
2778
2818
|
this.settingsDialog = null;
|
|
2779
2819
|
}
|
|
2780
2820
|
|
|
2821
|
+
if (this.keyboardHelp && typeof this.keyboardHelp.destroy === 'function') {
|
|
2822
|
+
try {
|
|
2823
|
+
this.keyboardHelp.destroy();
|
|
2824
|
+
} catch (err) {
|
|
2825
|
+
this.log(`KeyboardHelp.destroy failed: ${err}`, 'warn');
|
|
2826
|
+
}
|
|
2827
|
+
this.keyboardHelp = null;
|
|
2828
|
+
}
|
|
2829
|
+
|
|
2830
|
+
if (this.mediaSessionManager && typeof this.mediaSessionManager.destroy === 'function') {
|
|
2831
|
+
try {
|
|
2832
|
+
this.mediaSessionManager.destroy();
|
|
2833
|
+
} catch (err) {
|
|
2834
|
+
this.log(`MediaSessionManager.destroy failed: ${err}`, 'warn');
|
|
2835
|
+
}
|
|
2836
|
+
this.mediaSessionManager = null;
|
|
2837
|
+
}
|
|
2838
|
+
|
|
2781
2839
|
// Clean up floating player manager (disconnects IntersectionObserver,
|
|
2782
2840
|
// returns the container to its original parent if still floating)
|
|
2783
2841
|
if (this.floatingPlayerManager) {
|
package/src/i18n/languages/de.ts
CHANGED
|
@@ -175,6 +175,33 @@ export const de = {
|
|
|
175
175
|
reset: 'Zurücksetzen',
|
|
176
176
|
close: 'Schließen'
|
|
177
177
|
},
|
|
178
|
+
help: {
|
|
179
|
+
title: 'Tastaturkürzel',
|
|
180
|
+
button: 'Tastaturkürzel',
|
|
181
|
+
close: 'Schließen',
|
|
182
|
+
or: 'oder',
|
|
183
|
+
keys: {
|
|
184
|
+
space: 'Leertaste'
|
|
185
|
+
},
|
|
186
|
+
actions: {
|
|
187
|
+
'play-pause': 'Wiedergabe / Pause',
|
|
188
|
+
'seek-backward': 'Zurückspulen',
|
|
189
|
+
'seek-forward': 'Vorspulen',
|
|
190
|
+
'volume-up': 'Lauter',
|
|
191
|
+
'volume-down': 'Leiser',
|
|
192
|
+
'mute': 'Stumm / Ton an',
|
|
193
|
+
'captions': 'Untertitel umschalten',
|
|
194
|
+
'caption-style-menu': 'Untertitel-Stil',
|
|
195
|
+
'speed-down': 'Langsamer',
|
|
196
|
+
'speed-up': 'Schneller',
|
|
197
|
+
'speed-menu': 'Wiedergabegeschwindigkeit',
|
|
198
|
+
'quality-menu': 'Qualität',
|
|
199
|
+
'chapters-menu': 'Kapitel',
|
|
200
|
+
'transcript-toggle': 'Transkript umschalten',
|
|
201
|
+
'fullscreen': 'Vollbild umschalten',
|
|
202
|
+
'help': 'Tastaturkürzel'
|
|
203
|
+
}
|
|
204
|
+
},
|
|
178
205
|
speeds: {
|
|
179
206
|
normal: 'Normal'
|
|
180
207
|
},
|
package/src/i18n/languages/en.ts
CHANGED
|
@@ -176,6 +176,33 @@ export const en = {
|
|
|
176
176
|
reset: 'Reset to defaults',
|
|
177
177
|
close: 'Close'
|
|
178
178
|
},
|
|
179
|
+
help: {
|
|
180
|
+
title: 'Keyboard shortcuts',
|
|
181
|
+
button: 'Keyboard shortcuts',
|
|
182
|
+
close: 'Close',
|
|
183
|
+
or: 'or',
|
|
184
|
+
keys: {
|
|
185
|
+
space: 'Space'
|
|
186
|
+
},
|
|
187
|
+
actions: {
|
|
188
|
+
'play-pause': 'Play / Pause',
|
|
189
|
+
'seek-backward': 'Seek backward',
|
|
190
|
+
'seek-forward': 'Seek forward',
|
|
191
|
+
'volume-up': 'Volume up',
|
|
192
|
+
'volume-down': 'Volume down',
|
|
193
|
+
'mute': 'Mute / Unmute',
|
|
194
|
+
'captions': 'Toggle captions',
|
|
195
|
+
'caption-style-menu': 'Caption styling',
|
|
196
|
+
'speed-down': 'Decrease speed',
|
|
197
|
+
'speed-up': 'Increase speed',
|
|
198
|
+
'speed-menu': 'Playback speed',
|
|
199
|
+
'quality-menu': 'Quality',
|
|
200
|
+
'chapters-menu': 'Chapters',
|
|
201
|
+
'transcript-toggle': 'Toggle transcript',
|
|
202
|
+
'fullscreen': 'Toggle fullscreen',
|
|
203
|
+
'help': 'Keyboard shortcuts'
|
|
204
|
+
}
|
|
205
|
+
},
|
|
179
206
|
speeds: {
|
|
180
207
|
normal: 'Normal'
|
|
181
208
|
},
|
package/src/i18n/languages/es.ts
CHANGED
|
@@ -172,6 +172,33 @@ export const es = {
|
|
|
172
172
|
reset: 'Restablecer',
|
|
173
173
|
close: 'Cerrar'
|
|
174
174
|
},
|
|
175
|
+
help: {
|
|
176
|
+
title: 'Atajos de teclado',
|
|
177
|
+
button: 'Atajos de teclado',
|
|
178
|
+
close: 'Cerrar',
|
|
179
|
+
or: 'o',
|
|
180
|
+
keys: {
|
|
181
|
+
space: 'Espacio'
|
|
182
|
+
},
|
|
183
|
+
actions: {
|
|
184
|
+
'play-pause': 'Reproducir / Pausar',
|
|
185
|
+
'seek-backward': 'Retroceder',
|
|
186
|
+
'seek-forward': 'Avanzar',
|
|
187
|
+
'volume-up': 'Subir volumen',
|
|
188
|
+
'volume-down': 'Bajar volumen',
|
|
189
|
+
'mute': 'Silenciar / Activar sonido',
|
|
190
|
+
'captions': 'Alternar subtítulos',
|
|
191
|
+
'caption-style-menu': 'Estilo de subtítulos',
|
|
192
|
+
'speed-down': 'Reducir velocidad',
|
|
193
|
+
'speed-up': 'Aumentar velocidad',
|
|
194
|
+
'speed-menu': 'Velocidad de reproducción',
|
|
195
|
+
'quality-menu': 'Calidad',
|
|
196
|
+
'chapters-menu': 'Capítulos',
|
|
197
|
+
'transcript-toggle': 'Alternar transcripción',
|
|
198
|
+
'fullscreen': 'Alternar pantalla completa',
|
|
199
|
+
'help': 'Atajos de teclado'
|
|
200
|
+
}
|
|
201
|
+
},
|
|
175
202
|
speeds: {
|
|
176
203
|
normal: 'Normal'
|
|
177
204
|
},
|
package/src/i18n/languages/fr.ts
CHANGED
|
@@ -172,6 +172,33 @@ export const fr = {
|
|
|
172
172
|
reset: 'Réinitialiser',
|
|
173
173
|
close: 'Fermer'
|
|
174
174
|
},
|
|
175
|
+
help: {
|
|
176
|
+
title: 'Raccourcis clavier',
|
|
177
|
+
button: 'Raccourcis clavier',
|
|
178
|
+
close: 'Fermer',
|
|
179
|
+
or: 'ou',
|
|
180
|
+
keys: {
|
|
181
|
+
space: 'Espace'
|
|
182
|
+
},
|
|
183
|
+
actions: {
|
|
184
|
+
'play-pause': 'Lecture / Pause',
|
|
185
|
+
'seek-backward': 'Reculer',
|
|
186
|
+
'seek-forward': 'Avancer',
|
|
187
|
+
'volume-up': 'Augmenter le volume',
|
|
188
|
+
'volume-down': 'Baisser le volume',
|
|
189
|
+
'mute': 'Couper / Activer le son',
|
|
190
|
+
'captions': 'Activer/désactiver les sous-titres',
|
|
191
|
+
'caption-style-menu': 'Style des sous-titres',
|
|
192
|
+
'speed-down': 'Ralentir',
|
|
193
|
+
'speed-up': 'Accélérer',
|
|
194
|
+
'speed-menu': 'Vitesse de lecture',
|
|
195
|
+
'quality-menu': 'Qualité',
|
|
196
|
+
'chapters-menu': 'Chapitres',
|
|
197
|
+
'transcript-toggle': 'Activer/désactiver la transcription',
|
|
198
|
+
'fullscreen': 'Activer/désactiver le plein écran',
|
|
199
|
+
'help': 'Raccourcis clavier'
|
|
200
|
+
}
|
|
201
|
+
},
|
|
175
202
|
speeds: {
|
|
176
203
|
normal: 'Normal'
|
|
177
204
|
},
|
package/src/i18n/languages/ja.ts
CHANGED
|
@@ -172,6 +172,33 @@ export const ja = {
|
|
|
172
172
|
reset: 'リセット',
|
|
173
173
|
close: '閉じる'
|
|
174
174
|
},
|
|
175
|
+
help: {
|
|
176
|
+
title: 'キーボードショートカット',
|
|
177
|
+
button: 'キーボードショートカット',
|
|
178
|
+
close: '閉じる',
|
|
179
|
+
or: 'または',
|
|
180
|
+
keys: {
|
|
181
|
+
space: 'スペース'
|
|
182
|
+
},
|
|
183
|
+
actions: {
|
|
184
|
+
'play-pause': '再生 / 一時停止',
|
|
185
|
+
'seek-backward': '巻き戻し',
|
|
186
|
+
'seek-forward': '早送り',
|
|
187
|
+
'volume-up': '音量を上げる',
|
|
188
|
+
'volume-down': '音量を下げる',
|
|
189
|
+
'mute': 'ミュート / ミュート解除',
|
|
190
|
+
'captions': '字幕の切り替え',
|
|
191
|
+
'caption-style-menu': '字幕スタイル',
|
|
192
|
+
'speed-down': '速度を下げる',
|
|
193
|
+
'speed-up': '速度を上げる',
|
|
194
|
+
'speed-menu': '再生速度',
|
|
195
|
+
'quality-menu': '画質',
|
|
196
|
+
'chapters-menu': 'チャプター',
|
|
197
|
+
'transcript-toggle': '文字起こしの切り替え',
|
|
198
|
+
'fullscreen': '全画面表示の切り替え',
|
|
199
|
+
'help': 'キーボードショートカット'
|
|
200
|
+
}
|
|
201
|
+
},
|
|
175
202
|
speeds: {
|
|
176
203
|
normal: '通常'
|
|
177
204
|
},
|
package/src/icons/Icons.ts
CHANGED
|
@@ -37,7 +37,8 @@ const iconPaths: Record<string, string> = {
|
|
|
37
37
|
move: `<path d="M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z"/>`,
|
|
38
38
|
resize: `<path d="M21.71 11.29l-9-9c-.39-.39-1.02-.39-1.41 0l-9 9c-.39.39-.39 1.02 0 1.41l9 9c.39.39 1.02.39 1.41 0l9-9c.39-.38.39-1.01 0-1.41zM14 14.5V12h-4v2.5L7 11l3-3.5V10h4V7.5l3 3.5-3 3.5z"/>`,
|
|
39
39
|
clock: `<path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/><path d="M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z"/>`,
|
|
40
|
-
download: `<path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"
|
|
40
|
+
download: `<path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/>`,
|
|
41
|
+
help: `<path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"/>`
|
|
41
42
|
};
|
|
42
43
|
|
|
43
44
|
// The `xmlns` declaration is mandatory for `DOMParser.parseFromString`
|
package/src/styles/vidply.css
CHANGED
|
@@ -2707,6 +2707,62 @@ video[data-vidply]:not(.vidply-initialized) {
|
|
|
2707
2707
|
background: var(--vidply-white-20);
|
|
2708
2708
|
}
|
|
2709
2709
|
|
|
2710
|
+
/* Keyboard shortcuts help dialog */
|
|
2711
|
+
.vidply-help-list {
|
|
2712
|
+
align-items: center;
|
|
2713
|
+
column-gap: var(--vidply-gap-lg);
|
|
2714
|
+
display: grid;
|
|
2715
|
+
grid-template-columns: 1fr auto;
|
|
2716
|
+
margin: 0;
|
|
2717
|
+
row-gap: var(--vidply-gap-md);
|
|
2718
|
+
}
|
|
2719
|
+
|
|
2720
|
+
.vidply-help-action {
|
|
2721
|
+
color: var(--vidply-white-90);
|
|
2722
|
+
font-size: var(--vidply-font-md);
|
|
2723
|
+
grid-column: 1;
|
|
2724
|
+
margin: 0;
|
|
2725
|
+
}
|
|
2726
|
+
|
|
2727
|
+
.vidply-help-keys {
|
|
2728
|
+
align-items: center;
|
|
2729
|
+
display: flex;
|
|
2730
|
+
flex-wrap: wrap;
|
|
2731
|
+
gap: var(--vidply-gap-xs);
|
|
2732
|
+
grid-column: 2;
|
|
2733
|
+
justify-content: flex-end;
|
|
2734
|
+
margin: 0;
|
|
2735
|
+
}
|
|
2736
|
+
|
|
2737
|
+
.vidply-help-key {
|
|
2738
|
+
background: var(--vidply-white-10);
|
|
2739
|
+
border: 0.0625rem solid var(--vidply-white-20);
|
|
2740
|
+
border-radius: var(--vidply-radius-md);
|
|
2741
|
+
color: var(--vidply-white);
|
|
2742
|
+
font-family: monospace;
|
|
2743
|
+
font-size: var(--vidply-font-base);
|
|
2744
|
+
line-height: 1;
|
|
2745
|
+
min-width: 1.5rem;
|
|
2746
|
+
padding: 0.25rem 0.4rem;
|
|
2747
|
+
text-align: center;
|
|
2748
|
+
}
|
|
2749
|
+
|
|
2750
|
+
.vidply-help-key-sep {
|
|
2751
|
+
color: var(--vidply-text-muted);
|
|
2752
|
+
font-size: var(--vidply-font-base);
|
|
2753
|
+
padding: 0 0.15rem;
|
|
2754
|
+
}
|
|
2755
|
+
|
|
2756
|
+
.vidply-theme-light .vidply-help-action {
|
|
2757
|
+
color: #1a1a1a;
|
|
2758
|
+
}
|
|
2759
|
+
|
|
2760
|
+
.vidply-theme-light .vidply-help-key {
|
|
2761
|
+
background: #f0f0f0;
|
|
2762
|
+
border-color: rgb(0 0 0 / 20%);
|
|
2763
|
+
color: #1a1a1a;
|
|
2764
|
+
}
|
|
2765
|
+
|
|
2710
2766
|
/* Fullscreen Styles */
|
|
2711
2767
|
.vidply-player:is(.vidply-fullscreen, :fullscreen) {
|
|
2712
2768
|
background: #000;
|
package/src/types/events.ts
CHANGED
|
@@ -78,6 +78,10 @@ export interface PlayerEventMap {
|
|
|
78
78
|
settingsopen: void;
|
|
79
79
|
settingsclose: void;
|
|
80
80
|
|
|
81
|
+
// Keyboard shortcuts help
|
|
82
|
+
keyboardhelpopen: void;
|
|
83
|
+
keyboardhelpclose: void;
|
|
84
|
+
|
|
81
85
|
// Audio description
|
|
82
86
|
audiodescriptionenabled: void;
|
|
83
87
|
audiodescriptiondisabled: void;
|
package/src/types/options.ts
CHANGED
|
@@ -16,6 +16,7 @@ export interface KeyboardShortcuts {
|
|
|
16
16
|
'quality-menu'?: string[];
|
|
17
17
|
'chapters-menu'?: string[];
|
|
18
18
|
'transcript-toggle'?: string[];
|
|
19
|
+
'help'?: string[];
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
export interface PlayerOptions {
|
|
@@ -27,6 +28,18 @@ export interface PlayerOptions {
|
|
|
27
28
|
fillContainer: boolean;
|
|
28
29
|
mediaType?: 'video' | 'audio';
|
|
29
30
|
|
|
31
|
+
// Media metadata (used for the Media Session API: OS / lock-screen
|
|
32
|
+
// controls and now-playing info). For playlists, the per-track
|
|
33
|
+
// title/artist/poster take precedence over these.
|
|
34
|
+
title?: string | null;
|
|
35
|
+
artist?: string | null;
|
|
36
|
+
album?: string | null;
|
|
37
|
+
|
|
38
|
+
// Integrate with the OS media controls via the Media Session API
|
|
39
|
+
// (lock-screen / notification controls, headset buttons, now-playing
|
|
40
|
+
// metadata and artwork). Set to false to opt out.
|
|
41
|
+
mediaSession: boolean;
|
|
42
|
+
|
|
30
43
|
// Playback
|
|
31
44
|
autoplay: boolean;
|
|
32
45
|
loop: boolean;
|
|
@@ -70,6 +83,7 @@ export interface PlayerOptions {
|
|
|
70
83
|
downloadFileSize: number | null;
|
|
71
84
|
downloadFetchSize: boolean;
|
|
72
85
|
playlistToggleButton?: boolean;
|
|
86
|
+
helpButton: boolean;
|
|
73
87
|
|
|
74
88
|
// Seeking
|
|
75
89
|
seekInterval: number;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* VidPly v1.2.1 - Universal, Accessible Video Player
|
|
3
|
-
* (c) 2026 Matthias Peltzer
|
|
4
|
-
* Released under GPL-2.0-or-later License
|
|
5
|
-
*/
|
|
6
|
-
import {
|
|
7
|
-
HTML5Renderer
|
|
8
|
-
} from "./vidply.chunk-XAK3DPTO.js";
|
|
9
|
-
export {
|
|
10
|
-
HTML5Renderer
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=vidply.HTML5Renderer-P7ICKYU4.js.map
|
|
File without changes
|
|
File without changes
|
/package/dist/dev/{vidply.DASHRenderer-EOVEW73H.js.map → vidply.DASHRenderer-VEJ4HDHO.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/dev/{vidply.HTML5Renderer-P7ICKYU4.js.map → vidply.HTML5Renderer-HLRQUOCU.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/dev/{vidply.VimeoRenderer-BRHFYPNJ.js.map → vidply.VimeoRenderer-RQFQD7OE.js.map}
RENAMED
|
File without changes
|
/package/dist/dev/{vidply.YouTubeRenderer-HRTN4EJ5.js.map → vidply.YouTubeRenderer-EU2BARZF.js.map}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|