vidply 1.2.0 → 1.2.1

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 (164) hide show
  1. package/README.md +946 -946
  2. package/dist/dev/{vidply.AudioDescriptionManager-R47Q4YR4.js → vidply.AudioDescriptionManager-6RFVF27Z.js} +275 -19
  3. package/dist/dev/vidply.AudioDescriptionManager-6RFVF27Z.js.map +7 -0
  4. package/dist/dev/{vidply.CaptionStyleMenu-7XHRBWUM.js → vidply.CaptionStyleMenu-R2SCQ6VP.js} +4 -4
  5. package/dist/dev/{vidply.DASHRenderer-PWEMC3BT.js → vidply.DASHRenderer-EOVEW73H.js} +3 -3
  6. package/dist/dev/vidply.DASHRenderer-EOVEW73H.js.map +7 -0
  7. package/dist/dev/{vidply.FloatingPlayerManager-PKNNNAS2.js → vidply.FloatingPlayerManager-V5XQWS75.js} +5 -5
  8. package/dist/dev/vidply.FloatingPlayerManager-V5XQWS75.js.map +7 -0
  9. package/dist/dev/{vidply.HLSRenderer-E7RQ74HI.js → vidply.HLSRenderer-ZBEFVH5W.js} +4 -4
  10. package/dist/dev/vidply.HLSRenderer-ZBEFVH5W.js.map +7 -0
  11. package/dist/dev/vidply.HTML5Renderer-P7ICKYU4.js +12 -0
  12. package/dist/dev/{vidply.SignLanguageManager-FET5FQZ7.js → vidply.SignLanguageManager-7IAJOVF6.js} +8 -8
  13. package/dist/dev/vidply.SignLanguageManager-7IAJOVF6.js.map +7 -0
  14. package/dist/dev/{vidply.SoundCloudRenderer-RVSJZODO.js → vidply.SoundCloudRenderer-OA7QQYGN.js} +3 -3
  15. package/dist/dev/vidply.SoundCloudRenderer-OA7QQYGN.js.map +7 -0
  16. package/dist/dev/{vidply.TranscriptManager-5GXOQCLX.js → vidply.TranscriptManager-BPM3T23L.js} +10 -10
  17. package/dist/dev/vidply.TranscriptManager-BPM3T23L.js.map +7 -0
  18. package/dist/dev/{vidply.VimeoRenderer-ER2LSBBW.js → vidply.VimeoRenderer-BRHFYPNJ.js} +3 -3
  19. package/dist/dev/vidply.VimeoRenderer-BRHFYPNJ.js.map +7 -0
  20. package/dist/dev/{vidply.YouTubeRenderer-NFTOWJAB.js → vidply.YouTubeRenderer-HRTN4EJ5.js} +3 -3
  21. package/dist/dev/vidply.YouTubeRenderer-HRTN4EJ5.js.map +7 -0
  22. package/dist/dev/{vidply.chunk-6RQA4ROD.js → vidply.chunk-5IK3IC5V.js} +2 -2
  23. package/dist/dev/{vidply.chunk-JJ47NO24.js → vidply.chunk-C55OBT5H.js} +2 -2
  24. package/dist/dev/vidply.chunk-C55OBT5H.js.map +7 -0
  25. package/dist/dev/{vidply.chunk-DZSDO3B7.js → vidply.chunk-HOYEMJSD.js} +2 -2
  26. package/dist/dev/{vidply.chunk-VMSQAZM7.js → vidply.chunk-JAKZNGOR.js} +2 -2
  27. package/dist/dev/{vidply.chunk-64WXMTGL.js → vidply.chunk-LDVFAFGC.js} +5 -5
  28. package/dist/dev/vidply.chunk-LDVFAFGC.js.map +7 -0
  29. package/dist/dev/{vidply.chunk-RZWZGDV7.js → vidply.chunk-NSMAZCMB.js} +6 -6
  30. package/dist/dev/vidply.chunk-NSMAZCMB.js.map +7 -0
  31. package/dist/dev/{vidply.chunk-KI7C3QVL.js → vidply.chunk-RQG3MA7W.js} +2 -2
  32. package/dist/dev/vidply.chunk-RQG3MA7W.js.map +7 -0
  33. package/dist/dev/{vidply.chunk-BNFIUL2Z.js → vidply.chunk-UHMVDBDB.js} +3 -3
  34. package/dist/dev/vidply.chunk-UHMVDBDB.js.map +7 -0
  35. package/dist/dev/{vidply.chunk-NQPURMQY.js → vidply.chunk-W5BR65JY.js} +6 -6
  36. package/dist/dev/vidply.chunk-W5BR65JY.js.map +7 -0
  37. package/dist/dev/{vidply.chunk-W25HUCHS.js → vidply.chunk-XAK3DPTO.js} +2 -2
  38. package/dist/dev/vidply.chunk-XAK3DPTO.js.map +7 -0
  39. package/dist/dev/{vidply.chunk-SK4V2DAU.js → vidply.chunk-YVCYQZJI.js} +3 -3
  40. package/dist/dev/{vidply.de-4YAT7FFM.js → vidply.de-5W5LBFSJ.js} +2 -2
  41. package/dist/dev/vidply.de-5W5LBFSJ.js.map +7 -0
  42. package/dist/dev/{vidply.es-LEWIRUBH.js → vidply.es-SHDAT6L6.js} +2 -2
  43. package/dist/dev/vidply.es-SHDAT6L6.js.map +7 -0
  44. package/dist/dev/vidply.esm.js +73 -34
  45. package/dist/dev/vidply.esm.js.map +2 -2
  46. package/dist/dev/{vidply.fr-Q4GV2NOE.js → vidply.fr-2JANOMNB.js} +2 -2
  47. package/dist/dev/vidply.fr-2JANOMNB.js.map +7 -0
  48. package/dist/dev/{vidply.ja-S6ITA6WU.js → vidply.ja-WWMSTEJH.js} +2 -2
  49. package/dist/dev/vidply.ja-WWMSTEJH.js.map +7 -0
  50. package/dist/legacy/vidply.js +345 -32
  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 +66 -47
  54. package/dist/prod/vidply.AudioDescriptionManager-YTDVDQBO.min.js +6 -0
  55. package/dist/prod/{vidply.CaptionStyleMenu-M3KVQWB5.min.js → vidply.CaptionStyleMenu-2AFF3HF2.min.js} +2 -2
  56. package/dist/prod/{vidply.DASHRenderer-DN3S27AV.min.js → vidply.DASHRenderer-URDOTOKS.min.js} +2 -2
  57. package/dist/prod/{vidply.FloatingPlayerManager-SKAZ4J43.min.js → vidply.FloatingPlayerManager-QUBFK7CQ.min.js} +2 -2
  58. package/dist/prod/{vidply.HLSRenderer-62HH4YTK.min.js → vidply.HLSRenderer-46KNUVAB.min.js} +2 -2
  59. package/dist/prod/vidply.HTML5Renderer-7TQDMIGY.min.js +6 -0
  60. package/dist/prod/{vidply.SignLanguageManager-V3OBTSSF.min.js → vidply.SignLanguageManager-H4C36EVL.min.js} +2 -2
  61. package/dist/prod/{vidply.SoundCloudRenderer-CXRVZIAJ.min.js → vidply.SoundCloudRenderer-OYSWMW7D.min.js} +2 -2
  62. package/dist/prod/{vidply.TranscriptManager-SYM3DFUY.min.js → vidply.TranscriptManager-BA3DAS63.min.js} +2 -2
  63. package/dist/prod/{vidply.VimeoRenderer-72TWRYFQ.min.js → vidply.VimeoRenderer-NF3COTHU.min.js} +2 -2
  64. package/dist/prod/{vidply.YouTubeRenderer-UMHEV3KD.min.js → vidply.YouTubeRenderer-UCQKYIJ4.min.js} +2 -2
  65. package/dist/prod/{vidply.chunk-Z3YDSA7O.min.js → vidply.chunk-2HNCP64N.min.js} +1 -1
  66. package/dist/prod/{vidply.chunk-EKEYJWMG.min.js → vidply.chunk-6ECBIYVI.min.js} +2 -2
  67. package/dist/prod/{vidply.chunk-YEENJS3Q.min.js → vidply.chunk-7S5AFTST.min.js} +2 -2
  68. package/dist/prod/{vidply.chunk-P4UXOHWA.min.js → vidply.chunk-EUOA2DJK.min.js} +1 -1
  69. package/dist/prod/{vidply.chunk-2TB6MUHO.min.js → vidply.chunk-G6KGXNEW.min.js} +1 -1
  70. package/dist/prod/{vidply.chunk-ABPXVDLZ.min.js → vidply.chunk-JPMAK3NS.min.js} +1 -1
  71. package/dist/prod/{vidply.chunk-P3PQBY7N.min.js → vidply.chunk-L4O44K63.min.js} +1 -1
  72. package/dist/prod/{vidply.chunk-WX3MVEAL.min.js → vidply.chunk-M76ABMKB.min.js} +1 -1
  73. package/dist/prod/{vidply.chunk-TM6AXJVD.min.js → vidply.chunk-WRVDVD33.min.js} +2 -2
  74. package/dist/prod/{vidply.chunk-RI3X7WHK.min.js → vidply.chunk-X2FQEQYR.min.js} +2 -2
  75. package/dist/prod/{vidply.chunk-UK7YGOB5.min.js → vidply.chunk-XXUH7ADU.min.js} +2 -2
  76. package/dist/prod/{vidply.de-BCHXRQ53.min.js → vidply.de-JMCATTKZ.min.js} +1 -1
  77. package/dist/prod/{vidply.es-PICAKMZD.min.js → vidply.es-YVG37V7Z.min.js} +1 -1
  78. package/dist/prod/vidply.esm.min.js +2 -2
  79. package/dist/prod/{vidply.fr-ZILI7CDR.min.js → vidply.fr-OGKGN2R4.min.js} +1 -1
  80. package/dist/prod/{vidply.ja-5WQ4OK4J.min.js → vidply.ja-Z6DS7QLS.min.js} +1 -1
  81. package/dist/vidply.css +5796 -5796
  82. package/dist/vidply.esm.min.meta.json +148 -135
  83. package/package.json +7 -7
  84. package/src/controls/CaptionManager.ts +598 -598
  85. package/src/controls/ControlBar.ts +4159 -4159
  86. package/src/controls/KeyboardManager.ts +383 -383
  87. package/src/controls/SettingsDialog.ts +488 -488
  88. package/src/controls/TranscriptManager.ts +2426 -2426
  89. package/src/core/AudioDescriptionManager.ts +863 -774
  90. package/src/core/DescriptionSpeechManager.ts +232 -0
  91. package/src/core/FloatingPlayerManager.ts +674 -674
  92. package/src/core/LazyInit.ts +80 -80
  93. package/src/core/MetadataAlertsManager.ts +514 -514
  94. package/src/core/Player.ts +2915 -2872
  95. package/src/core/PosterManager.ts +169 -169
  96. package/src/core/PseudoFullscreen.ts +179 -179
  97. package/src/core/ResponsiveManager.ts +231 -231
  98. package/src/core/ResumeManager.ts +236 -236
  99. package/src/core/SignLanguageManager.ts +1308 -1308
  100. package/src/core/ThemeManager.ts +157 -157
  101. package/src/features/PlaylistManager.ts +1838 -1827
  102. package/src/i18n/i18n.ts +223 -223
  103. package/src/i18n/languages/de.ts +217 -217
  104. package/src/i18n/languages/en.ts +218 -218
  105. package/src/i18n/languages/es.ts +214 -214
  106. package/src/i18n/languages/fr.ts +214 -214
  107. package/src/i18n/languages/ja.ts +214 -214
  108. package/src/icons/Icons.ts +167 -167
  109. package/src/index.ts +196 -193
  110. package/src/renderers/DASHRenderer.ts +1077 -1077
  111. package/src/renderers/HLSRenderer.ts +944 -944
  112. package/src/renderers/HTML5Renderer.ts +389 -389
  113. package/src/renderers/SoundCloudRenderer.ts +437 -437
  114. package/src/renderers/VimeoRenderer.ts +298 -298
  115. package/src/renderers/YouTubeRenderer.ts +290 -290
  116. package/src/styles/vidply.css +5796 -5796
  117. package/src/types/events.ts +124 -122
  118. package/src/types/globals.d.ts +313 -313
  119. package/src/types/options.ts +185 -182
  120. package/src/types/renderer.ts +58 -58
  121. package/src/utils/DOMUtils.ts +281 -281
  122. package/src/utils/DownloadInfo.ts +171 -171
  123. package/src/utils/DraggablePanel.ts +539 -539
  124. package/src/utils/DraggablePanelMenu.ts +195 -195
  125. package/src/utils/DraggableResizable.ts +997 -997
  126. package/src/utils/EventEmitter.ts +59 -59
  127. package/src/utils/FormUtils.ts +95 -95
  128. package/src/utils/MenuFactory.ts +483 -483
  129. package/src/utils/Sanitize.ts +70 -70
  130. package/src/utils/SettingsMenuFactory.ts +289 -289
  131. package/src/utils/StorageManager.ts +287 -287
  132. package/src/utils/TrackLabelUtils.ts +52 -52
  133. package/src/utils/UrlSafe.ts +69 -69
  134. package/src/utils/VideoFrameCapture.ts +114 -114
  135. package/src/utils/WindowComponents.ts +250 -250
  136. package/dist/dev/vidply.AudioDescriptionManager-R47Q4YR4.js.map +0 -7
  137. package/dist/dev/vidply.DASHRenderer-PWEMC3BT.js.map +0 -7
  138. package/dist/dev/vidply.FloatingPlayerManager-PKNNNAS2.js.map +0 -7
  139. package/dist/dev/vidply.HLSRenderer-E7RQ74HI.js.map +0 -7
  140. package/dist/dev/vidply.HTML5Renderer-BU4QJJJY.js +0 -12
  141. package/dist/dev/vidply.SignLanguageManager-FET5FQZ7.js.map +0 -7
  142. package/dist/dev/vidply.SoundCloudRenderer-RVSJZODO.js.map +0 -7
  143. package/dist/dev/vidply.TranscriptManager-5GXOQCLX.js.map +0 -7
  144. package/dist/dev/vidply.VimeoRenderer-ER2LSBBW.js.map +0 -7
  145. package/dist/dev/vidply.YouTubeRenderer-NFTOWJAB.js.map +0 -7
  146. package/dist/dev/vidply.chunk-64WXMTGL.js.map +0 -7
  147. package/dist/dev/vidply.chunk-BNFIUL2Z.js.map +0 -7
  148. package/dist/dev/vidply.chunk-JJ47NO24.js.map +0 -7
  149. package/dist/dev/vidply.chunk-KI7C3QVL.js.map +0 -7
  150. package/dist/dev/vidply.chunk-NQPURMQY.js.map +0 -7
  151. package/dist/dev/vidply.chunk-RZWZGDV7.js.map +0 -7
  152. package/dist/dev/vidply.chunk-W25HUCHS.js.map +0 -7
  153. package/dist/dev/vidply.de-4YAT7FFM.js.map +0 -7
  154. package/dist/dev/vidply.es-LEWIRUBH.js.map +0 -7
  155. package/dist/dev/vidply.fr-Q4GV2NOE.js.map +0 -7
  156. package/dist/dev/vidply.ja-S6ITA6WU.js.map +0 -7
  157. package/dist/prod/vidply.AudioDescriptionManager-RHLIJW5C.min.js +0 -6
  158. package/dist/prod/vidply.HTML5Renderer-IU5T3WEW.min.js +0 -6
  159. /package/dist/dev/{vidply.CaptionStyleMenu-7XHRBWUM.js.map → vidply.CaptionStyleMenu-R2SCQ6VP.js.map} +0 -0
  160. /package/dist/dev/{vidply.HTML5Renderer-BU4QJJJY.js.map → vidply.HTML5Renderer-P7ICKYU4.js.map} +0 -0
  161. /package/dist/dev/{vidply.chunk-6RQA4ROD.js.map → vidply.chunk-5IK3IC5V.js.map} +0 -0
  162. /package/dist/dev/{vidply.chunk-DZSDO3B7.js.map → vidply.chunk-HOYEMJSD.js.map} +0 -0
  163. /package/dist/dev/{vidply.chunk-VMSQAZM7.js.map → vidply.chunk-JAKZNGOR.js.map} +0 -0
  164. /package/dist/dev/{vidply.chunk-SK4V2DAU.js.map → vidply.chunk-YVCYQZJI.js.map} +0 -0
@@ -1,182 +1,185 @@
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
+ }
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
+ audioDescriptionMode: 'auto' | 'swap' | 'vtt_speech';
92
+ audioDescriptionSpeech: boolean;
93
+ audioDescriptionExtended: boolean;
94
+
95
+ // Sign Language
96
+ signLanguage: boolean;
97
+ signLanguageSrc: string | null;
98
+ signLanguageButton: boolean;
99
+ signLanguagePosition: 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
100
+ signLanguageDisplayMode: 'pip' | 'main' | 'both';
101
+ signLanguageSources?: Record<string, string>;
102
+
103
+ // Transcripts
104
+ transcript: boolean;
105
+ transcriptPosition: string;
106
+ transcriptContainer: HTMLElement | string | null;
107
+
108
+ // Keyboard
109
+ keyboard: boolean;
110
+ keyboardShortcuts: KeyboardShortcuts;
111
+
112
+ // Accessibility
113
+ ariaLabels: Record<string, string>;
114
+ screenReaderAnnouncements: boolean;
115
+ highContrast: boolean;
116
+ focusHighlight: boolean;
117
+ metadataAlerts: Record<string, unknown>;
118
+ metadataHashtags: Record<string, unknown>;
119
+
120
+ // Languages
121
+ language: string;
122
+ languages: string[];
123
+ languageFiles?: Record<string, string>;
124
+ languageFile?: string;
125
+ languageFileUrl?: string;
126
+
127
+ // Resume Playback
128
+ resumePlayback: boolean;
129
+ resumeThreshold: number;
130
+ resumePrompt: boolean;
131
+
132
+ // Thumbnail Preview
133
+ thumbnailPreview: boolean;
134
+ thumbnailCacheSize: number;
135
+ thumbnailPregenerate: boolean;
136
+ thumbnailInterval: number;
137
+ thumbnailWidth: number;
138
+ thumbnailHeight: number;
139
+ thumbnailQuality: number;
140
+
141
+ // Lazy Loading
142
+ lazyInit: boolean;
143
+ lazyMargin: string;
144
+
145
+ // Theming
146
+ theme: 'dark' | 'light' | 'minimal' | 'high-contrast';
147
+ themeVariables: Record<string, string>;
148
+
149
+ // Streaming script URLs (allow consumers to pin / self-host)
150
+ hlsScriptUrl?: string;
151
+ hlsScriptIntegrity?: string;
152
+ dashScriptUrl?: string;
153
+ dashScriptIntegrity?: string;
154
+
155
+ /**
156
+ * Controls how metadata-cue directives (FOCUS:..., #hashtag) drive DOM
157
+ * side effects (focus() and metadata alerts). Opt-in — DOM mutation is
158
+ * disabled by default to keep cue-driven side effects from being a
159
+ * vector for caption-source authors.
160
+ *
161
+ * false — (default) emit `metadata:focus` / `metadata:hashtags`
162
+ * events, but never call .focus() or open alerts. Safe.
163
+ * 'container' perform DOM side effects, but resolve selectors only
164
+ * against descendants of the player container.
165
+ * true | 'global' — legacy behavior: resolve selectors against the
166
+ * entire document. Useful for cross-page deep linking,
167
+ * but accepts content authors as trusted.
168
+ */
169
+ metadataDirectives?: boolean | 'container' | 'global';
170
+
171
+ // Advanced
172
+ debug: boolean;
173
+ classPrefix: string;
174
+ iconType: string;
175
+ pauseOthersOnPlay: boolean;
176
+
177
+ // Callbacks
178
+ onReady: ((this: Player) => void) | null;
179
+ onPlay: ((this: Player) => void) | null;
180
+ onPause: ((this: Player) => void) | null;
181
+ onEnded: ((this: Player) => void) | null;
182
+ onTimeUpdate: ((this: Player, time: number) => void) | null;
183
+ onVolumeChange: ((this: Player, volume: number) => void) | null;
184
+ onError: ((this: Player, error: unknown) => void) | null;
185
+ }
@@ -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
+ }