vidply 1.2.0 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/README.md +974 -946
  2. package/dist/dev/{vidply.AudioDescriptionManager-R47Q4YR4.js → vidply.AudioDescriptionManager-JYYLK5KB.js} +275 -19
  3. package/dist/dev/vidply.AudioDescriptionManager-JYYLK5KB.js.map +7 -0
  4. package/dist/dev/{vidply.CaptionStyleMenu-7XHRBWUM.js → vidply.CaptionStyleMenu-47RCKQF5.js} +4 -4
  5. package/dist/dev/{vidply.DASHRenderer-PWEMC3BT.js → vidply.DASHRenderer-VEJ4HDHO.js} +3 -3
  6. package/dist/dev/vidply.DASHRenderer-VEJ4HDHO.js.map +7 -0
  7. package/dist/dev/{vidply.FloatingPlayerManager-PKNNNAS2.js → vidply.FloatingPlayerManager-C2UVRPZY.js} +5 -5
  8. package/dist/dev/vidply.FloatingPlayerManager-C2UVRPZY.js.map +7 -0
  9. package/dist/dev/{vidply.HLSRenderer-E7RQ74HI.js → vidply.HLSRenderer-ZVBK2TNQ.js} +4 -4
  10. package/dist/dev/vidply.HLSRenderer-ZVBK2TNQ.js.map +7 -0
  11. package/dist/dev/vidply.HTML5Renderer-HLRQUOCU.js +12 -0
  12. package/dist/dev/{vidply.SignLanguageManager-FET5FQZ7.js → vidply.SignLanguageManager-FLUCBW5H.js} +8 -8
  13. package/dist/dev/vidply.SignLanguageManager-FLUCBW5H.js.map +7 -0
  14. package/dist/dev/{vidply.SoundCloudRenderer-RVSJZODO.js → vidply.SoundCloudRenderer-MGMAJ7NK.js} +3 -3
  15. package/dist/dev/vidply.SoundCloudRenderer-MGMAJ7NK.js.map +7 -0
  16. package/dist/dev/{vidply.TranscriptManager-5GXOQCLX.js → vidply.TranscriptManager-Y2RYXHJW.js} +10 -10
  17. package/dist/dev/vidply.TranscriptManager-Y2RYXHJW.js.map +7 -0
  18. package/dist/dev/{vidply.VimeoRenderer-ER2LSBBW.js → vidply.VimeoRenderer-RQFQD7OE.js} +3 -3
  19. package/dist/dev/vidply.VimeoRenderer-RQFQD7OE.js.map +7 -0
  20. package/dist/dev/{vidply.YouTubeRenderer-NFTOWJAB.js → vidply.YouTubeRenderer-EU2BARZF.js} +3 -3
  21. package/dist/dev/vidply.YouTubeRenderer-EU2BARZF.js.map +7 -0
  22. package/dist/dev/{vidply.chunk-BNFIUL2Z.js → vidply.chunk-6LYZYI5G.js} +3 -3
  23. package/dist/dev/vidply.chunk-6LYZYI5G.js.map +7 -0
  24. package/dist/dev/{vidply.chunk-NQPURMQY.js → vidply.chunk-A4ESEOQ2.js} +6 -6
  25. package/dist/dev/vidply.chunk-A4ESEOQ2.js.map +7 -0
  26. package/dist/dev/{vidply.chunk-W25HUCHS.js → vidply.chunk-CGYIED2I.js} +2 -2
  27. package/dist/dev/vidply.chunk-CGYIED2I.js.map +7 -0
  28. package/dist/dev/{vidply.chunk-SK4V2DAU.js → vidply.chunk-HZ7UOKOU.js} +3 -3
  29. package/dist/dev/{vidply.chunk-RZWZGDV7.js → vidply.chunk-I6EDRYGJ.js} +33 -6
  30. package/dist/dev/vidply.chunk-I6EDRYGJ.js.map +7 -0
  31. package/dist/dev/{vidply.chunk-64WXMTGL.js → vidply.chunk-JKMQGLCJ.js} +5 -5
  32. package/dist/dev/vidply.chunk-JKMQGLCJ.js.map +7 -0
  33. package/dist/dev/{vidply.chunk-DZSDO3B7.js → vidply.chunk-JZNZX32Z.js} +2 -2
  34. package/dist/dev/{vidply.chunk-VMSQAZM7.js → vidply.chunk-P25MRJ6O.js} +2 -2
  35. package/dist/dev/{vidply.chunk-6RQA4ROD.js → vidply.chunk-PRFNESYA.js} +2 -2
  36. package/dist/dev/{vidply.chunk-KI7C3QVL.js → vidply.chunk-UI3RYCVF.js} +4 -3
  37. package/dist/dev/vidply.chunk-UI3RYCVF.js.map +7 -0
  38. package/dist/dev/{vidply.chunk-JJ47NO24.js → vidply.chunk-UNFGMABP.js} +2 -2
  39. package/dist/dev/vidply.chunk-UNFGMABP.js.map +7 -0
  40. package/dist/dev/{vidply.de-4YAT7FFM.js → vidply.de-VAUVSQXC.js} +29 -2
  41. package/dist/dev/vidply.de-VAUVSQXC.js.map +7 -0
  42. package/dist/dev/{vidply.es-LEWIRUBH.js → vidply.es-G65HFWO6.js} +29 -2
  43. package/dist/dev/vidply.es-G65HFWO6.js.map +7 -0
  44. package/dist/dev/vidply.esm.js +648 -35
  45. package/dist/dev/vidply.esm.js.map +3 -3
  46. package/dist/dev/{vidply.fr-Q4GV2NOE.js → vidply.fr-MJNOZELM.js} +29 -2
  47. package/dist/dev/vidply.fr-MJNOZELM.js.map +7 -0
  48. package/dist/dev/{vidply.ja-S6ITA6WU.js → vidply.ja-INMDHIYJ.js} +29 -2
  49. package/dist/dev/vidply.ja-INMDHIYJ.js.map +7 -0
  50. package/dist/legacy/vidply.js +1062 -34
  51. package/dist/legacy/vidply.js.map +3 -3
  52. package/dist/legacy/vidply.min.js +2 -2
  53. package/dist/legacy/vidply.min.meta.json +127 -55
  54. package/dist/prod/vidply.AudioDescriptionManager-EKWUNOPE.min.js +6 -0
  55. package/dist/prod/{vidply.CaptionStyleMenu-M3KVQWB5.min.js → vidply.CaptionStyleMenu-JTWSNHRQ.min.js} +2 -2
  56. package/dist/prod/{vidply.DASHRenderer-DN3S27AV.min.js → vidply.DASHRenderer-CIDAHFWM.min.js} +2 -2
  57. package/dist/prod/{vidply.FloatingPlayerManager-SKAZ4J43.min.js → vidply.FloatingPlayerManager-VZXHPCPM.min.js} +2 -2
  58. package/dist/prod/{vidply.HLSRenderer-62HH4YTK.min.js → vidply.HLSRenderer-Q6EFYKID.min.js} +2 -2
  59. package/dist/prod/vidply.HTML5Renderer-XRDJUTOO.min.js +6 -0
  60. package/dist/prod/{vidply.SignLanguageManager-V3OBTSSF.min.js → vidply.SignLanguageManager-JUOSA5AM.min.js} +2 -2
  61. package/dist/prod/{vidply.SoundCloudRenderer-CXRVZIAJ.min.js → vidply.SoundCloudRenderer-7ODD46PO.min.js} +2 -2
  62. package/dist/prod/{vidply.TranscriptManager-SYM3DFUY.min.js → vidply.TranscriptManager-4B2QKYGQ.min.js} +2 -2
  63. package/dist/prod/{vidply.VimeoRenderer-72TWRYFQ.min.js → vidply.VimeoRenderer-MR3UYLY7.min.js} +2 -2
  64. package/dist/prod/{vidply.YouTubeRenderer-UMHEV3KD.min.js → vidply.YouTubeRenderer-ITRTC7NR.min.js} +2 -2
  65. package/dist/prod/{vidply.chunk-YEENJS3Q.min.js → vidply.chunk-3EEDXU4T.min.js} +2 -2
  66. package/dist/prod/{vidply.chunk-P4UXOHWA.min.js → vidply.chunk-5HTX5QXW.min.js} +1 -1
  67. package/dist/prod/{vidply.chunk-ABPXVDLZ.min.js → vidply.chunk-6OGHHIYP.min.js} +2 -2
  68. package/dist/prod/{vidply.chunk-UK7YGOB5.min.js → vidply.chunk-GUPGMFUZ.min.js} +2 -2
  69. package/dist/prod/{vidply.chunk-WX3MVEAL.min.js → vidply.chunk-MWEBITCP.min.js} +1 -1
  70. package/dist/prod/{vidply.chunk-2TB6MUHO.min.js → vidply.chunk-PL3P3JHR.min.js} +1 -1
  71. package/dist/prod/{vidply.chunk-EKEYJWMG.min.js → vidply.chunk-QQZGV7TD.min.js} +2 -2
  72. package/dist/prod/{vidply.chunk-Z3YDSA7O.min.js → vidply.chunk-U5IRRYG5.min.js} +1 -1
  73. package/dist/prod/{vidply.chunk-TM6AXJVD.min.js → vidply.chunk-VKHV4QHA.min.js} +2 -2
  74. package/dist/prod/{vidply.chunk-P3PQBY7N.min.js → vidply.chunk-XA4M574A.min.js} +1 -1
  75. package/dist/prod/{vidply.chunk-RI3X7WHK.min.js → vidply.chunk-ZPTV4JEP.min.js} +2 -2
  76. package/dist/prod/{vidply.de-BCHXRQ53.min.js → vidply.de-UZHFCEZU.min.js} +2 -2
  77. package/dist/prod/{vidply.es-PICAKMZD.min.js → vidply.es-BOISUV2S.min.js} +2 -2
  78. package/dist/prod/vidply.esm.min.js +2 -2
  79. package/dist/prod/{vidply.fr-ZILI7CDR.min.js → vidply.fr-ICSMKPFM.min.js} +2 -2
  80. package/dist/prod/{vidply.ja-5WQ4OK4J.min.js → vidply.ja-VQ2HKGAY.min.js} +2 -2
  81. package/dist/vidply.css +5852 -5796
  82. package/dist/vidply.esm.min.meta.json +204 -149
  83. package/dist/vidply.min.css +1 -1
  84. package/package.json +11 -11
  85. package/src/controls/CaptionManager.ts +598 -598
  86. package/src/controls/ControlBar.ts +4191 -4159
  87. package/src/controls/KeyboardHelp.ts +326 -0
  88. package/src/controls/KeyboardManager.ts +387 -383
  89. package/src/controls/SettingsDialog.ts +488 -488
  90. package/src/controls/TranscriptManager.ts +2426 -2426
  91. package/src/core/AudioDescriptionManager.ts +863 -774
  92. package/src/core/DescriptionSpeechManager.ts +232 -0
  93. package/src/core/FloatingPlayerManager.ts +674 -674
  94. package/src/core/LazyInit.ts +80 -80
  95. package/src/core/MediaSessionManager.ts +341 -0
  96. package/src/core/MetadataAlertsManager.ts +514 -514
  97. package/src/core/Player.ts +2973 -2872
  98. package/src/core/PosterManager.ts +169 -169
  99. package/src/core/PseudoFullscreen.ts +179 -179
  100. package/src/core/ResponsiveManager.ts +231 -231
  101. package/src/core/ResumeManager.ts +236 -236
  102. package/src/core/SignLanguageManager.ts +1308 -1308
  103. package/src/core/ThemeManager.ts +157 -157
  104. package/src/features/PlaylistManager.ts +1838 -1827
  105. package/src/i18n/i18n.ts +223 -223
  106. package/src/i18n/languages/de.ts +244 -217
  107. package/src/i18n/languages/en.ts +245 -218
  108. package/src/i18n/languages/es.ts +241 -214
  109. package/src/i18n/languages/fr.ts +241 -214
  110. package/src/i18n/languages/ja.ts +241 -214
  111. package/src/icons/Icons.ts +168 -167
  112. package/src/index.ts +196 -193
  113. package/src/renderers/DASHRenderer.ts +1077 -1077
  114. package/src/renderers/HLSRenderer.ts +944 -944
  115. package/src/renderers/HTML5Renderer.ts +389 -389
  116. package/src/renderers/SoundCloudRenderer.ts +437 -437
  117. package/src/renderers/VimeoRenderer.ts +298 -298
  118. package/src/renderers/YouTubeRenderer.ts +290 -290
  119. package/src/styles/vidply.css +5852 -5796
  120. package/src/types/events.ts +128 -122
  121. package/src/types/globals.d.ts +313 -313
  122. package/src/types/options.ts +199 -182
  123. package/src/types/renderer.ts +58 -58
  124. package/src/utils/DOMUtils.ts +281 -281
  125. package/src/utils/DownloadInfo.ts +171 -171
  126. package/src/utils/DraggablePanel.ts +539 -539
  127. package/src/utils/DraggablePanelMenu.ts +195 -195
  128. package/src/utils/DraggableResizable.ts +997 -997
  129. package/src/utils/EventEmitter.ts +59 -59
  130. package/src/utils/FormUtils.ts +95 -95
  131. package/src/utils/MenuFactory.ts +483 -483
  132. package/src/utils/Sanitize.ts +70 -70
  133. package/src/utils/SettingsMenuFactory.ts +289 -289
  134. package/src/utils/StorageManager.ts +287 -287
  135. package/src/utils/TrackLabelUtils.ts +52 -52
  136. package/src/utils/UrlSafe.ts +69 -69
  137. package/src/utils/VideoFrameCapture.ts +114 -114
  138. package/src/utils/WindowComponents.ts +250 -250
  139. package/dist/dev/vidply.AudioDescriptionManager-R47Q4YR4.js.map +0 -7
  140. package/dist/dev/vidply.DASHRenderer-PWEMC3BT.js.map +0 -7
  141. package/dist/dev/vidply.FloatingPlayerManager-PKNNNAS2.js.map +0 -7
  142. package/dist/dev/vidply.HLSRenderer-E7RQ74HI.js.map +0 -7
  143. package/dist/dev/vidply.HTML5Renderer-BU4QJJJY.js +0 -12
  144. package/dist/dev/vidply.SignLanguageManager-FET5FQZ7.js.map +0 -7
  145. package/dist/dev/vidply.SoundCloudRenderer-RVSJZODO.js.map +0 -7
  146. package/dist/dev/vidply.TranscriptManager-5GXOQCLX.js.map +0 -7
  147. package/dist/dev/vidply.VimeoRenderer-ER2LSBBW.js.map +0 -7
  148. package/dist/dev/vidply.YouTubeRenderer-NFTOWJAB.js.map +0 -7
  149. package/dist/dev/vidply.chunk-64WXMTGL.js.map +0 -7
  150. package/dist/dev/vidply.chunk-BNFIUL2Z.js.map +0 -7
  151. package/dist/dev/vidply.chunk-JJ47NO24.js.map +0 -7
  152. package/dist/dev/vidply.chunk-KI7C3QVL.js.map +0 -7
  153. package/dist/dev/vidply.chunk-NQPURMQY.js.map +0 -7
  154. package/dist/dev/vidply.chunk-RZWZGDV7.js.map +0 -7
  155. package/dist/dev/vidply.chunk-W25HUCHS.js.map +0 -7
  156. package/dist/dev/vidply.de-4YAT7FFM.js.map +0 -7
  157. package/dist/dev/vidply.es-LEWIRUBH.js.map +0 -7
  158. package/dist/dev/vidply.fr-Q4GV2NOE.js.map +0 -7
  159. package/dist/dev/vidply.ja-S6ITA6WU.js.map +0 -7
  160. package/dist/prod/vidply.AudioDescriptionManager-RHLIJW5C.min.js +0 -6
  161. package/dist/prod/vidply.HTML5Renderer-IU5T3WEW.min.js +0 -6
  162. /package/dist/dev/{vidply.CaptionStyleMenu-7XHRBWUM.js.map → vidply.CaptionStyleMenu-47RCKQF5.js.map} +0 -0
  163. /package/dist/dev/{vidply.HTML5Renderer-BU4QJJJY.js.map → vidply.HTML5Renderer-HLRQUOCU.js.map} +0 -0
  164. /package/dist/dev/{vidply.chunk-SK4V2DAU.js.map → vidply.chunk-HZ7UOKOU.js.map} +0 -0
  165. /package/dist/dev/{vidply.chunk-DZSDO3B7.js.map → vidply.chunk-JZNZX32Z.js.map} +0 -0
  166. /package/dist/dev/{vidply.chunk-VMSQAZM7.js.map → vidply.chunk-P25MRJ6O.js.map} +0 -0
  167. /package/dist/dev/{vidply.chunk-6RQA4ROD.js.map → vidply.chunk-PRFNESYA.js.map} +0 -0
@@ -1,182 +1,199 @@
1
- import type { Player } from '../core/Player.js';
2
-
3
- export interface KeyboardShortcuts {
4
- 'play-pause'?: string[];
5
- 'volume-up'?: string[];
6
- 'volume-down'?: string[];
7
- 'seek-forward'?: string[];
8
- 'seek-backward'?: string[];
9
- 'mute'?: string[];
10
- 'fullscreen'?: string[];
11
- 'captions'?: string[];
12
- 'caption-style-menu'?: string[];
13
- 'speed-up'?: string[];
14
- 'speed-down'?: string[];
15
- 'speed-menu'?: string[];
16
- 'quality-menu'?: string[];
17
- 'chapters-menu'?: string[];
18
- 'transcript-toggle'?: string[];
19
- }
20
-
21
- export interface PlayerOptions {
22
- // Display
23
- width: number | string | null;
24
- height: number | string | null;
25
- poster: string | null;
26
- responsive: boolean;
27
- fillContainer: boolean;
28
- mediaType?: 'video' | 'audio';
29
-
30
- // Playback
31
- autoplay: boolean;
32
- loop: boolean;
33
- muted: boolean;
34
- volume: number;
35
- playbackSpeed: number;
36
- preload: 'none' | 'metadata' | 'auto';
37
- initialDuration: number;
38
- deferLoad: boolean;
39
- requirePlaybackForAccessibilityToggles: boolean;
40
- startTime: number;
41
- playsInline: boolean;
42
-
43
- // Controls
44
- controls: boolean;
45
- hideControlsDelay: number;
46
- playPauseButton: boolean;
47
- progressBar: boolean;
48
- currentTime: boolean;
49
- duration: boolean;
50
- volumeControl: boolean;
51
- muteButton: boolean;
52
- chaptersButton: boolean;
53
- qualityButton: boolean;
54
- captionStyleButton: boolean;
55
- speedButton: boolean;
56
- hideSpeedForHls: boolean;
57
- hideSpeedForHlsVideo: boolean;
58
- hideSpeedForDash: boolean;
59
- hideSpeedForDashVideo: boolean;
60
- captionsButton: boolean;
61
- transcriptButton: boolean;
62
- fullscreenButton: boolean;
63
- pipButton: boolean;
64
- floating: boolean;
65
- floatingPosition: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
66
- floatingMinViewportWidth: number;
67
- downloadButton: boolean;
68
- downloadUrl: string | null;
69
- downloadFormat: string | null;
70
- downloadFileSize: number | null;
71
- downloadFetchSize: boolean;
72
- playlistToggleButton?: boolean;
73
-
74
- // Seeking
75
- seekInterval: number;
76
- seekIntervalLarge: number;
77
-
78
- // Captions
79
- captions: boolean;
80
- captionsDefault: boolean;
81
- captionsFontSize: string;
82
- captionsFontFamily: string;
83
- captionsColor: string;
84
- captionsBackgroundColor: string;
85
- captionsOpacity: number;
86
-
87
- // Audio Description
88
- audioDescription: boolean;
89
- audioDescriptionSrc: string | null;
90
- audioDescriptionButton: boolean;
91
-
92
- // Sign Language
93
- signLanguage: boolean;
94
- signLanguageSrc: string | null;
95
- signLanguageButton: boolean;
96
- signLanguagePosition: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
97
- signLanguageDisplayMode: 'pip' | 'main' | 'both';
98
- signLanguageSources?: Record<string, string>;
99
-
100
- // Transcripts
101
- transcript: boolean;
102
- transcriptPosition: string;
103
- transcriptContainer: HTMLElement | string | null;
104
-
105
- // Keyboard
106
- keyboard: boolean;
107
- keyboardShortcuts: KeyboardShortcuts;
108
-
109
- // Accessibility
110
- ariaLabels: Record<string, string>;
111
- screenReaderAnnouncements: boolean;
112
- highContrast: boolean;
113
- focusHighlight: boolean;
114
- metadataAlerts: Record<string, unknown>;
115
- metadataHashtags: Record<string, unknown>;
116
-
117
- // Languages
118
- language: string;
119
- languages: string[];
120
- languageFiles?: Record<string, string>;
121
- languageFile?: string;
122
- languageFileUrl?: string;
123
-
124
- // Resume Playback
125
- resumePlayback: boolean;
126
- resumeThreshold: number;
127
- resumePrompt: boolean;
128
-
129
- // Thumbnail Preview
130
- thumbnailPreview: boolean;
131
- thumbnailCacheSize: number;
132
- thumbnailPregenerate: boolean;
133
- thumbnailInterval: number;
134
- thumbnailWidth: number;
135
- thumbnailHeight: number;
136
- thumbnailQuality: number;
137
-
138
- // Lazy Loading
139
- lazyInit: boolean;
140
- lazyMargin: string;
141
-
142
- // Theming
143
- theme: 'dark' | 'light' | 'minimal' | 'high-contrast';
144
- themeVariables: Record<string, string>;
145
-
146
- // Streaming script URLs (allow consumers to pin / self-host)
147
- hlsScriptUrl?: string;
148
- hlsScriptIntegrity?: string;
149
- dashScriptUrl?: string;
150
- dashScriptIntegrity?: string;
151
-
152
- /**
153
- * Controls how metadata-cue directives (FOCUS:..., #hashtag) drive DOM
154
- * side effects (focus() and metadata alerts). Opt-in — DOM mutation is
155
- * disabled by default to keep cue-driven side effects from being a
156
- * vector for caption-source authors.
157
- *
158
- * false — (default) emit `metadata:focus` / `metadata:hashtags`
159
- * events, but never call .focus() or open alerts. Safe.
160
- * 'container' perform DOM side effects, but resolve selectors only
161
- * against descendants of the player container.
162
- * true | 'global' — legacy behavior: resolve selectors against the
163
- * entire document. Useful for cross-page deep linking,
164
- * but accepts content authors as trusted.
165
- */
166
- metadataDirectives?: boolean | 'container' | 'global';
167
-
168
- // Advanced
169
- debug: boolean;
170
- classPrefix: string;
171
- iconType: string;
172
- pauseOthersOnPlay: boolean;
173
-
174
- // Callbacks
175
- onReady: ((this: Player) => void) | null;
176
- onPlay: ((this: Player) => void) | null;
177
- onPause: ((this: Player) => void) | null;
178
- onEnded: ((this: Player) => void) | null;
179
- onTimeUpdate: ((this: Player, time: number) => void) | null;
180
- onVolumeChange: ((this: Player, volume: number) => void) | null;
181
- onError: ((this: Player, error: unknown) => void) | null;
182
- }
1
+ import type { Player } from '../core/Player.js';
2
+
3
+ export interface KeyboardShortcuts {
4
+ 'play-pause'?: string[];
5
+ 'volume-up'?: string[];
6
+ 'volume-down'?: string[];
7
+ 'seek-forward'?: string[];
8
+ 'seek-backward'?: string[];
9
+ 'mute'?: string[];
10
+ 'fullscreen'?: string[];
11
+ 'captions'?: string[];
12
+ 'caption-style-menu'?: string[];
13
+ 'speed-up'?: string[];
14
+ 'speed-down'?: string[];
15
+ 'speed-menu'?: string[];
16
+ 'quality-menu'?: string[];
17
+ 'chapters-menu'?: string[];
18
+ 'transcript-toggle'?: string[];
19
+ 'help'?: string[];
20
+ }
21
+
22
+ export interface PlayerOptions {
23
+ // Display
24
+ width: number | string | null;
25
+ height: number | string | null;
26
+ poster: string | null;
27
+ responsive: boolean;
28
+ fillContainer: boolean;
29
+ mediaType?: 'video' | 'audio';
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
+
43
+ // Playback
44
+ autoplay: boolean;
45
+ loop: boolean;
46
+ muted: boolean;
47
+ volume: number;
48
+ playbackSpeed: number;
49
+ preload: 'none' | 'metadata' | 'auto';
50
+ initialDuration: number;
51
+ deferLoad: boolean;
52
+ requirePlaybackForAccessibilityToggles: boolean;
53
+ startTime: number;
54
+ playsInline: boolean;
55
+
56
+ // Controls
57
+ controls: boolean;
58
+ hideControlsDelay: number;
59
+ playPauseButton: boolean;
60
+ progressBar: boolean;
61
+ currentTime: boolean;
62
+ duration: boolean;
63
+ volumeControl: boolean;
64
+ muteButton: boolean;
65
+ chaptersButton: boolean;
66
+ qualityButton: boolean;
67
+ captionStyleButton: boolean;
68
+ speedButton: boolean;
69
+ hideSpeedForHls: boolean;
70
+ hideSpeedForHlsVideo: boolean;
71
+ hideSpeedForDash: boolean;
72
+ hideSpeedForDashVideo: boolean;
73
+ captionsButton: boolean;
74
+ transcriptButton: boolean;
75
+ fullscreenButton: boolean;
76
+ pipButton: boolean;
77
+ floating: boolean;
78
+ floatingPosition: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
79
+ floatingMinViewportWidth: number;
80
+ downloadButton: boolean;
81
+ downloadUrl: string | null;
82
+ downloadFormat: string | null;
83
+ downloadFileSize: number | null;
84
+ downloadFetchSize: boolean;
85
+ playlistToggleButton?: boolean;
86
+ helpButton: boolean;
87
+
88
+ // Seeking
89
+ seekInterval: number;
90
+ seekIntervalLarge: number;
91
+
92
+ // Captions
93
+ captions: boolean;
94
+ captionsDefault: boolean;
95
+ captionsFontSize: string;
96
+ captionsFontFamily: string;
97
+ captionsColor: string;
98
+ captionsBackgroundColor: string;
99
+ captionsOpacity: number;
100
+
101
+ // Audio Description
102
+ audioDescription: boolean;
103
+ audioDescriptionSrc: string | null;
104
+ audioDescriptionButton: boolean;
105
+ audioDescriptionMode: 'auto' | 'swap' | 'vtt_speech';
106
+ audioDescriptionSpeech: boolean;
107
+ audioDescriptionExtended: boolean;
108
+
109
+ // Sign Language
110
+ signLanguage: boolean;
111
+ signLanguageSrc: string | null;
112
+ signLanguageButton: boolean;
113
+ signLanguagePosition: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
114
+ signLanguageDisplayMode: 'pip' | 'main' | 'both';
115
+ signLanguageSources?: Record<string, string>;
116
+
117
+ // Transcripts
118
+ transcript: boolean;
119
+ transcriptPosition: string;
120
+ transcriptContainer: HTMLElement | string | null;
121
+
122
+ // Keyboard
123
+ keyboard: boolean;
124
+ keyboardShortcuts: KeyboardShortcuts;
125
+
126
+ // Accessibility
127
+ ariaLabels: Record<string, string>;
128
+ screenReaderAnnouncements: boolean;
129
+ highContrast: boolean;
130
+ focusHighlight: boolean;
131
+ metadataAlerts: Record<string, unknown>;
132
+ metadataHashtags: Record<string, unknown>;
133
+
134
+ // Languages
135
+ language: string;
136
+ languages: string[];
137
+ languageFiles?: Record<string, string>;
138
+ languageFile?: string;
139
+ languageFileUrl?: string;
140
+
141
+ // Resume Playback
142
+ resumePlayback: boolean;
143
+ resumeThreshold: number;
144
+ resumePrompt: boolean;
145
+
146
+ // Thumbnail Preview
147
+ thumbnailPreview: boolean;
148
+ thumbnailCacheSize: number;
149
+ thumbnailPregenerate: boolean;
150
+ thumbnailInterval: number;
151
+ thumbnailWidth: number;
152
+ thumbnailHeight: number;
153
+ thumbnailQuality: number;
154
+
155
+ // Lazy Loading
156
+ lazyInit: boolean;
157
+ lazyMargin: string;
158
+
159
+ // Theming
160
+ theme: 'dark' | 'light' | 'minimal' | 'high-contrast';
161
+ themeVariables: Record<string, string>;
162
+
163
+ // Streaming script URLs (allow consumers to pin / self-host)
164
+ hlsScriptUrl?: string;
165
+ hlsScriptIntegrity?: string;
166
+ dashScriptUrl?: string;
167
+ dashScriptIntegrity?: string;
168
+
169
+ /**
170
+ * Controls how metadata-cue directives (FOCUS:..., #hashtag) drive DOM
171
+ * side effects (focus() and metadata alerts). Opt-in — DOM mutation is
172
+ * disabled by default to keep cue-driven side effects from being a
173
+ * vector for caption-source authors.
174
+ *
175
+ * false — (default) emit `metadata:focus` / `metadata:hashtags`
176
+ * events, but never call .focus() or open alerts. Safe.
177
+ * 'container' perform DOM side effects, but resolve selectors only
178
+ * against descendants of the player container.
179
+ * true | 'global' — legacy behavior: resolve selectors against the
180
+ * entire document. Useful for cross-page deep linking,
181
+ * but accepts content authors as trusted.
182
+ */
183
+ metadataDirectives?: boolean | 'container' | 'global';
184
+
185
+ // Advanced
186
+ debug: boolean;
187
+ classPrefix: string;
188
+ iconType: string;
189
+ pauseOthersOnPlay: boolean;
190
+
191
+ // Callbacks
192
+ onReady: ((this: Player) => void) | null;
193
+ onPlay: ((this: Player) => void) | null;
194
+ onPause: ((this: Player) => void) | null;
195
+ onEnded: ((this: Player) => void) | null;
196
+ onTimeUpdate: ((this: Player, time: number) => void) | null;
197
+ onVolumeChange: ((this: Player, volume: number) => void) | null;
198
+ onError: ((this: Player, error: unknown) => void) | null;
199
+ }
@@ -1,58 +1,58 @@
1
- import type { Player } from '../core/Player.js';
2
-
3
- export interface QualityLevel {
4
- name: string;
5
- src?: string;
6
- bitrate?: number;
7
- height?: number;
8
- width?: number;
9
- index?: number;
10
- }
11
-
12
- export interface Renderer {
13
- player: Player;
14
- media: HTMLMediaElement;
15
-
16
- /** Streaming engines, present on HLS / DASH renderers. */
17
- hls?: HlsInstance | null;
18
- dash?: DashMediaPlayerInstance | null;
19
-
20
- /**
21
- * True for renderers that drive playback through Media Source Extensions
22
- * (dash.js, hls.js). The `<video>` element's `src` is a MediaSource blob
23
- * URL that must not be copied to a second media element — otherwise Firefox
24
- * emits a "may not load data from blob:" security warning. UI features such
25
- * as scrub-bar thumbnail previews consult this flag to avoid cloning the src.
26
- */
27
- readonly isStreaming?: boolean;
28
-
29
- init(): Promise<void>;
30
- play(): void;
31
- pause(): void;
32
- seek(time: number): void;
33
- setVolume(volume: number): void;
34
- setMuted(muted: boolean): void;
35
- setPlaybackSpeed(speed: number): void;
36
- destroy(): void;
37
-
38
- ensureLoaded?(): void;
39
- getQualities?(): QualityLevel[];
40
- switchQuality?(index: number): void;
41
- getCurrentQuality?(): number;
42
- supportsAutoQuality?(): boolean;
43
- isAutoQuality?(): boolean;
44
- handlesOwnCaptions?(): boolean;
45
-
46
- /**
47
- * Ask the streaming renderer to activate the text track whose language
48
- * matches `lang`, so segment downloads begin and cues become available.
49
- * Returns true if the renderer switched, false if no match was found.
50
- */
51
- activateTextTrackForLanguage?(lang: string): boolean;
52
-
53
- /**
54
- * Return absolute URLs for each text track so the transcript can fetch the
55
- * complete VTT file instead of relying on partial segment-based cues.
56
- */
57
- getTextTrackURLs?(): { lang: string; url: string }[];
58
- }
1
+ import type { Player } from '../core/Player.js';
2
+
3
+ export interface QualityLevel {
4
+ name: string;
5
+ src?: string;
6
+ bitrate?: number;
7
+ height?: number;
8
+ width?: number;
9
+ index?: number;
10
+ }
11
+
12
+ export interface Renderer {
13
+ player: Player;
14
+ media: HTMLMediaElement;
15
+
16
+ /** Streaming engines, present on HLS / DASH renderers. */
17
+ hls?: HlsInstance | null;
18
+ dash?: DashMediaPlayerInstance | null;
19
+
20
+ /**
21
+ * True for renderers that drive playback through Media Source Extensions
22
+ * (dash.js, hls.js). The `<video>` element's `src` is a MediaSource blob
23
+ * URL that must not be copied to a second media element — otherwise Firefox
24
+ * emits a "may not load data from blob:" security warning. UI features such
25
+ * as scrub-bar thumbnail previews consult this flag to avoid cloning the src.
26
+ */
27
+ readonly isStreaming?: boolean;
28
+
29
+ init(): Promise<void>;
30
+ play(): void;
31
+ pause(): void;
32
+ seek(time: number): void;
33
+ setVolume(volume: number): void;
34
+ setMuted(muted: boolean): void;
35
+ setPlaybackSpeed(speed: number): void;
36
+ destroy(): void;
37
+
38
+ ensureLoaded?(): void;
39
+ getQualities?(): QualityLevel[];
40
+ switchQuality?(index: number): void;
41
+ getCurrentQuality?(): number;
42
+ supportsAutoQuality?(): boolean;
43
+ isAutoQuality?(): boolean;
44
+ handlesOwnCaptions?(): boolean;
45
+
46
+ /**
47
+ * Ask the streaming renderer to activate the text track whose language
48
+ * matches `lang`, so segment downloads begin and cues become available.
49
+ * Returns true if the renderer switched, false if no match was found.
50
+ */
51
+ activateTextTrackForLanguage?(lang: string): boolean;
52
+
53
+ /**
54
+ * Return absolute URLs for each text track so the transcript can fetch the
55
+ * complete VTT file instead of relying on partial segment-based cues.
56
+ */
57
+ getTextTrackURLs?(): { lang: string; url: string }[];
58
+ }