@ngxsplayer/ngx-smart-player 0.0.1-next.1 → 0.1.0
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/LICENSE +21 -0
- package/fesm2022/ngxsplayer-ngx-smart-player.mjs +2421 -548
- package/fesm2022/ngxsplayer-ngx-smart-player.mjs.map +1 -1
- package/index.d.ts +457 -16
- package/package.json +3 -3
package/index.d.ts
CHANGED
|
@@ -1,10 +1,166 @@
|
|
|
1
1
|
import { PlayerConfig, PlayerPlugin, PlayerPorts, EngineFactory, PlayerState, MediaTrack, PlayerError, MetadataProvider, SubtitleProvider } from '@ngxsp/core';
|
|
2
2
|
export * from '@ngxsp/core';
|
|
3
|
-
import * as
|
|
4
|
-
import { OnInit, OnDestroy,
|
|
5
|
-
import { SourceProfile } from '@ngxsplayer/ngx-smart-player-ui-core';
|
|
3
|
+
import * as _angular_core from '@angular/core';
|
|
4
|
+
import { EventEmitter, AfterViewInit, OnChanges, OnInit, OnDestroy, ElementRef, SimpleChanges, InjectionToken, EnvironmentProviders } from '@angular/core';
|
|
5
|
+
import { NgxspTimelineMarker, SourceProfile } from '@ngxsplayer/ngx-smart-player-ui-core';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
type SmartPlayerIconName = 'play' | 'pause' | 'prev' | 'next' | 'seek-back' | 'seek-forward' | 'volume-mute' | 'volume-low' | 'volume-high' | 'shuffle' | 'repeat' | 'repeat-one' | 'tracks' | 'captions' | 'captions-off' | 'speed' | 'pip' | 'pip-active' | 'airplay' | 'airplay-active' | 'cast' | 'cast-active' | 'devices' | 'devices-active' | 'radio' | 'server' | 'window-mini' | 'window-bar' | 'window-restore' | 'cinema' | 'cinema-active' | 'lyrics' | 'info' | 'bell' | 'thumb-up' | 'thumb-down' | 'share' | 'playlist-plus' | 'clock' | 'home' | 'layers' | 'video' | 'music' | 'broadcast' | 'heart' | 'download' | 'trash' | 'folder' | 'settings' | 'search' | 'grid' | 'list' | 'more' | 'waveform' | 'sliders' | 'network' | 'cloud' | 'spark' | 'disc' | 'user' | 'tag' | 'close' | 'plus' | 'check' | 'menu' | 'panel-right' | 'chevron-left' | 'chevron-right' | 'chevron-up' | 'chevron-down' | 'fullscreen' | 'fullscreen-exit';
|
|
8
|
+
declare class SmartPlayerIconComponent {
|
|
9
|
+
name: SmartPlayerIconName;
|
|
10
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SmartPlayerIconComponent, never>;
|
|
11
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartPlayerIconComponent, "ngxsp-smart-icon", never, { "name": { "alias": "name"; "required": true; }; }, {}, never, never, true, never>;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface SmartSettingOption {
|
|
15
|
+
id: string;
|
|
16
|
+
label: string;
|
|
17
|
+
}
|
|
18
|
+
/** A line of a list setting, such as a library folder. */
|
|
19
|
+
interface SmartSettingEntry {
|
|
20
|
+
id: string;
|
|
21
|
+
label: string;
|
|
22
|
+
detail?: string;
|
|
23
|
+
/** An entry the listener always keeps, such as a folder the app owns: it is shown without its remove button. */
|
|
24
|
+
fixed?: boolean;
|
|
25
|
+
}
|
|
26
|
+
interface SmartSettingBase {
|
|
27
|
+
id: string;
|
|
28
|
+
label: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* One setting. The host owns every value and hears what the listener asks for through the component's outputs:
|
|
33
|
+
* - `switch`: on or off;
|
|
34
|
+
* - `choice`: one of a few options, shown side by side;
|
|
35
|
+
* - `list`: entries the listener can remove one by one, with an optional action for the whole list;
|
|
36
|
+
* - `action`: a button that does something now (scan again, clear a cache);
|
|
37
|
+
* - `secret`: something typed that must not be read over a shoulder, sent when it is submitted
|
|
38
|
+
* and never held afterwards — the field empties itself, and the host is the only one that
|
|
39
|
+
* ever sees what was typed.
|
|
40
|
+
*/
|
|
41
|
+
type SmartSettingItem = (SmartSettingBase & {
|
|
42
|
+
kind: 'switch';
|
|
43
|
+
value: boolean;
|
|
44
|
+
disabled?: boolean;
|
|
45
|
+
}) | (SmartSettingBase & {
|
|
46
|
+
kind: 'choice';
|
|
47
|
+
value: string;
|
|
48
|
+
options: SmartSettingOption[];
|
|
49
|
+
}) | (SmartSettingBase & {
|
|
50
|
+
kind: 'list';
|
|
51
|
+
entries: SmartSettingEntry[];
|
|
52
|
+
removeLabel: string;
|
|
53
|
+
emptyLabel?: string;
|
|
54
|
+
actionLabel?: string;
|
|
55
|
+
busy?: boolean;
|
|
56
|
+
}) | (SmartSettingBase & {
|
|
57
|
+
kind: 'action';
|
|
58
|
+
actionLabel: string;
|
|
59
|
+
busy?: boolean;
|
|
60
|
+
disabled?: boolean;
|
|
61
|
+
}) | (SmartSettingBase & {
|
|
62
|
+
kind: 'secret';
|
|
63
|
+
actionLabel: string;
|
|
64
|
+
placeholder?: string;
|
|
65
|
+
/** A second field, when what is typed has to be given twice — an old code and a new one. */
|
|
66
|
+
secondPlaceholder?: string;
|
|
67
|
+
/** Digits only, which is what a device's own lock screen asks for. */
|
|
68
|
+
digits?: boolean;
|
|
69
|
+
busy?: boolean;
|
|
70
|
+
disabled?: boolean;
|
|
71
|
+
});
|
|
72
|
+
interface SmartSettingsSection {
|
|
73
|
+
id: string;
|
|
74
|
+
title: string;
|
|
75
|
+
items: SmartSettingItem[];
|
|
76
|
+
}
|
|
77
|
+
interface SmartSettingChange {
|
|
78
|
+
id: string;
|
|
79
|
+
value: boolean | string;
|
|
80
|
+
/** A `secret` setting's second field, when it has one: the old code beside the new one. */
|
|
81
|
+
previous?: string;
|
|
82
|
+
}
|
|
83
|
+
/** An action: a list's own action (no entry), the removal of one of its entries, or an action setting. */
|
|
84
|
+
interface SmartSettingAction {
|
|
85
|
+
id: string;
|
|
86
|
+
entryId?: string;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* The settings of a player, grouped in sections. Colours come from the host through CSS variables
|
|
90
|
+
* (`--ngxsp-settings-surface`, `-text`, `-muted`, `-line`, `-control`, `-accent`, `-accent-text`, `-radius`).
|
|
91
|
+
*/
|
|
92
|
+
declare class SmartSettingsComponent {
|
|
93
|
+
sections: SmartSettingsSection[];
|
|
94
|
+
settingChange: EventEmitter<SmartSettingChange>;
|
|
95
|
+
settingAction: EventEmitter<SmartSettingAction>;
|
|
96
|
+
/**
|
|
97
|
+
* Sends what was typed and empties the fields at once. Nothing secret stays in the component:
|
|
98
|
+
* the host is the only place it goes, and it does not come back through an input.
|
|
99
|
+
*/
|
|
100
|
+
protected submitSecret(event: Event, id: string): void;
|
|
101
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SmartSettingsComponent, never>;
|
|
102
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartSettingsComponent, "ngxsp-settings", never, { "sections": { "alias": "sections"; "required": false; }; }, { "settingChange": "settingChange"; "settingAction": "settingAction"; }, never, never, true, never>;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* A question the user answers before anything happens (another device asking to send its playback here). The
|
|
107
|
+
* cautious answer has the focus and Escape; the dialog stays until one of the two buttons is pressed. Colours come
|
|
108
|
+
* from the host through CSS variables (`--ngxsp-dialog-surface`, `-text`, `-muted`, `-line`, `-accent`,
|
|
109
|
+
* `-accent-text`, `-radius`).
|
|
110
|
+
*/
|
|
111
|
+
declare class SmartConfirmDialogComponent implements AfterViewInit {
|
|
112
|
+
title: string;
|
|
113
|
+
message: string;
|
|
114
|
+
confirmLabel: string;
|
|
115
|
+
cancelLabel: string;
|
|
116
|
+
confirmed: EventEmitter<void>;
|
|
117
|
+
cancelled: EventEmitter<void>;
|
|
118
|
+
private cancelButton?;
|
|
119
|
+
protected readonly id: string;
|
|
120
|
+
ngAfterViewInit(): void;
|
|
121
|
+
protected onEscape(event: Event): void;
|
|
122
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SmartConfirmDialogComponent, never>;
|
|
123
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartConfirmDialogComponent, "ngxsp-confirm-dialog", never, { "title": { "alias": "title"; "required": false; }; "message": { "alias": "message"; "required": false; }; "confirmLabel": { "alias": "confirmLabel"; "required": false; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; }; }, { "confirmed": "confirmed"; "cancelled": "cancelled"; }, never, never, true, never>;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* How much of a desktop player window shows: all of it, a small floating player (`mini`), or a strip along the
|
|
128
|
+
* bottom of the screen (`bar`, audio only: a video needs a picture). The host resizes the window; the UIs lay the
|
|
129
|
+
* player out to match.
|
|
130
|
+
*/
|
|
131
|
+
type SmartCompactMode = 'full' | 'mini' | 'bar';
|
|
132
|
+
|
|
133
|
+
/** The words of the player's menus; English by default. */
|
|
134
|
+
interface PlayerMenuLabels {
|
|
135
|
+
captions: string;
|
|
136
|
+
off: string;
|
|
137
|
+
audio: string;
|
|
138
|
+
singleAudio: string;
|
|
139
|
+
quality: string;
|
|
140
|
+
auto: string;
|
|
141
|
+
singleQuality: string;
|
|
142
|
+
speed: string;
|
|
143
|
+
/** Title of the subtitles menu, and of its button. */
|
|
144
|
+
subtitles: string;
|
|
145
|
+
/** Before the name of the subtitles shown now. */
|
|
146
|
+
current: string;
|
|
147
|
+
noSubtitles: string;
|
|
148
|
+
loadSubtitles: string;
|
|
149
|
+
tracks: string;
|
|
150
|
+
media: string;
|
|
151
|
+
/** Locale for the names of languages ("fr" becomes "French"); the device's by default. */
|
|
152
|
+
locale?: string;
|
|
153
|
+
}
|
|
154
|
+
declare const DEFAULT_PLAYER_MENU_LABELS: PlayerMenuLabels;
|
|
155
|
+
|
|
156
|
+
/** A playback position and the media it was measured on. */
|
|
157
|
+
interface SmartPlayerProgress {
|
|
158
|
+
currentTime: number;
|
|
159
|
+
duration: number;
|
|
160
|
+
contentId?: string;
|
|
161
|
+
sourceUrl?: string;
|
|
162
|
+
}
|
|
163
|
+
declare class SmartPlayerComponent implements OnChanges, OnInit, OnDestroy {
|
|
8
164
|
config: PlayerConfig;
|
|
9
165
|
plugins: PlayerPlugin[];
|
|
10
166
|
ports?: Partial<PlayerPorts>;
|
|
@@ -12,8 +168,16 @@ declare class SmartPlayerComponent implements OnInit, OnDestroy {
|
|
|
12
168
|
debug: boolean;
|
|
13
169
|
/** Optional start time (seconds) used for "resume playback". */
|
|
14
170
|
startTimeSec: number | null;
|
|
171
|
+
/** Starts the first source as soon as it is loaded. WebViews and desktop shells do not block it like browsers do. */
|
|
172
|
+
autoplayOnInit: boolean;
|
|
173
|
+
/** Increment when the user picks something to play: a new source starts, the current one resumes. */
|
|
174
|
+
playRequest: number;
|
|
15
175
|
canPrev: boolean;
|
|
16
176
|
canNext: boolean;
|
|
177
|
+
previousLabel: string;
|
|
178
|
+
nextLabel: string;
|
|
179
|
+
playLabel: string;
|
|
180
|
+
pauseLabel: string;
|
|
17
181
|
shuffleActive: boolean;
|
|
18
182
|
shuffleLabel: string;
|
|
19
183
|
repeatMode: 'off' | 'one' | 'all';
|
|
@@ -21,23 +185,60 @@ declare class SmartPlayerComponent implements OnInit, OnDestroy {
|
|
|
21
185
|
hasPlaylistControls: boolean;
|
|
22
186
|
mediaMode: 'video' | 'audio';
|
|
23
187
|
castEnabled: boolean;
|
|
188
|
+
/** The media plays on a device the app drives (castEnabled): the devices button shows it. */
|
|
189
|
+
castConnected: boolean;
|
|
190
|
+
private airPlayAvailable;
|
|
191
|
+
private airPlayActive;
|
|
192
|
+
documentShortcuts: boolean;
|
|
193
|
+
nowPlayingLabel: string;
|
|
194
|
+
nowListeningLabel: string;
|
|
195
|
+
fullscreenHintLabel: string;
|
|
196
|
+
fullscreenLabel: string;
|
|
197
|
+
readyStatusLabel: string;
|
|
198
|
+
playingStatusLabel: string;
|
|
199
|
+
pausedStatusLabel: string;
|
|
200
|
+
bufferingStatusLabel: string;
|
|
201
|
+
loadingStatusLabel: string;
|
|
202
|
+
endedStatusLabel: string;
|
|
203
|
+
errorStatusLabel: string;
|
|
204
|
+
outputVolume: number | null;
|
|
205
|
+
outputVolumeLabel: string;
|
|
206
|
+
outputMuteLabel: string;
|
|
207
|
+
outputUnmuteLabel: string;
|
|
208
|
+
timelineDurationSec: number | null;
|
|
209
|
+
timelineMarkers: ReadonlyArray<NgxspTimelineMarker>;
|
|
24
210
|
ended: EventEmitter<void>;
|
|
25
211
|
videoSize: EventEmitter<{
|
|
26
212
|
width: number;
|
|
27
213
|
height: number;
|
|
28
214
|
}>;
|
|
29
|
-
/**
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
215
|
+
/**
|
|
216
|
+
* Emits playback position updates, tagged with the media they belong to: a host switching tracks can still receive
|
|
217
|
+
* a position of the previous one, and must not file it under the new one.
|
|
218
|
+
*/
|
|
219
|
+
progress: EventEmitter<SmartPlayerProgress>;
|
|
34
220
|
prev: EventEmitter<void>;
|
|
35
221
|
next: EventEmitter<void>;
|
|
36
222
|
toggleShuffle: EventEmitter<void>;
|
|
37
223
|
cycleRepeat: EventEmitter<void>;
|
|
224
|
+
/** CC pressed; the vod and edition skins also open their subtitles menu. */
|
|
38
225
|
subtitles: EventEmitter<void>;
|
|
226
|
+
/** A subtitle file was read (ok) or could not be (error). */
|
|
227
|
+
subtitlesLoaded: EventEmitter<{
|
|
228
|
+
label: string;
|
|
229
|
+
ok: boolean;
|
|
230
|
+
error?: string;
|
|
231
|
+
}>;
|
|
232
|
+
/** The words of the player's menus and of its subtitles button. */
|
|
233
|
+
menuLabels: Partial<PlayerMenuLabels>;
|
|
39
234
|
cast: EventEmitter<void>;
|
|
235
|
+
stateChange: EventEmitter<PlayerState>;
|
|
236
|
+
playbackToggle: EventEmitter<"play" | "pause">;
|
|
237
|
+
outputVolumeChange: EventEmitter<number>;
|
|
40
238
|
videoEl: ElementRef<HTMLVideoElement>;
|
|
239
|
+
captionsLayer: ElementRef<HTMLElement>;
|
|
240
|
+
/** Absent in audio mode, which has no subtitles. */
|
|
241
|
+
subtitleFileInput?: ElementRef<HTMLInputElement>;
|
|
41
242
|
state: PlayerState | null;
|
|
42
243
|
duration: number;
|
|
43
244
|
currentTime: number;
|
|
@@ -46,16 +247,31 @@ declare class SmartPlayerComponent implements OnInit, OnDestroy {
|
|
|
46
247
|
playbackRate: number;
|
|
47
248
|
bufferAheadSec: number;
|
|
48
249
|
tracks: MediaTrack[];
|
|
49
|
-
openMenu: 'tracks' | 'speed' | null;
|
|
250
|
+
openMenu: 'tracks' | 'speed' | 'captions' | null;
|
|
50
251
|
controlsVisible: boolean;
|
|
252
|
+
surfaceGesture: 'play' | 'pause' | null;
|
|
51
253
|
castState: 'disconnected' | 'connecting' | 'connected';
|
|
52
254
|
readonly playbackRates: number[];
|
|
53
255
|
private facade;
|
|
54
256
|
private readonly cdr;
|
|
55
257
|
private sub;
|
|
56
258
|
private hideControlsTimer;
|
|
259
|
+
private surfaceClickTimer;
|
|
260
|
+
private gestureTimer;
|
|
57
261
|
private remotePlaybackCleanup;
|
|
58
|
-
|
|
262
|
+
private initialized;
|
|
263
|
+
private loadedSourceSignature;
|
|
264
|
+
private loadSequence;
|
|
265
|
+
private loading;
|
|
266
|
+
private pendingPlay;
|
|
267
|
+
/** Whether the load in progress was asked to start playback. */
|
|
268
|
+
private loadingAutoplay;
|
|
269
|
+
/** Load whose end was already reported; reset when playback starts again (repeat one). */
|
|
270
|
+
private endedLoadSequence;
|
|
271
|
+
private pendingSeekSec;
|
|
272
|
+
get uiSkin(): 'classic' | 'vod' | 'edition';
|
|
273
|
+
/** Libellé méta du skin édition (genre · format). */
|
|
274
|
+
get editionMeta(): string;
|
|
59
275
|
get uiVisible(): boolean;
|
|
60
276
|
get displayTitle(): string;
|
|
61
277
|
get displaySubtitle(): string;
|
|
@@ -68,6 +284,7 @@ declare class SmartPlayerComponent implements OnInit, OnDestroy {
|
|
|
68
284
|
get selectedAudioTrackId(): string | null;
|
|
69
285
|
get selectedTextTrackId(): string | null;
|
|
70
286
|
get selectedVideoTrackId(): string | null;
|
|
287
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
71
288
|
ngOnInit(): void;
|
|
72
289
|
ngOnDestroy(): void;
|
|
73
290
|
tryPlay(): void;
|
|
@@ -76,7 +293,9 @@ declare class SmartPlayerComponent implements OnInit, OnDestroy {
|
|
|
76
293
|
copyDebug(): Promise<void>;
|
|
77
294
|
downloadDebug(): void;
|
|
78
295
|
togglePlay(): void;
|
|
296
|
+
requestPlaybackToggle(): void;
|
|
79
297
|
seekRel(deltaSec: number): void;
|
|
298
|
+
seekTo(timeSec: number): void;
|
|
80
299
|
onScrub(value: number): void;
|
|
81
300
|
onVolume(value: number): void;
|
|
82
301
|
toggleMute(): void;
|
|
@@ -85,7 +304,18 @@ declare class SmartPlayerComponent implements OnInit, OnDestroy {
|
|
|
85
304
|
onLoadedMetadata(): void;
|
|
86
305
|
onEnded(): void;
|
|
87
306
|
toggleFullscreen(): void;
|
|
88
|
-
toggleMenu(menu: 'tracks' | 'speed'): void;
|
|
307
|
+
toggleMenu(menu: 'tracks' | 'speed' | 'captions'): void;
|
|
308
|
+
get playerMenuLabels(): PlayerMenuLabels;
|
|
309
|
+
onCaptionsClick(): void;
|
|
310
|
+
openSubtitlePicker(): void;
|
|
311
|
+
onSubtitleFileChosen(event: Event): Promise<void>;
|
|
312
|
+
/** Reads a SubRip or WebVTT file and shows it over the video. */
|
|
313
|
+
loadSubtitleFile(file: File): Promise<void>;
|
|
314
|
+
private controlsObserver?;
|
|
315
|
+
/** While the controls show, the subtitles sit just above them, however tall they are (a menu makes them taller). */
|
|
316
|
+
private followControlsHeight;
|
|
317
|
+
/** Draws the cues of the loaded subtitles (their markup parsed by the browser: italics, bold, no script). */
|
|
318
|
+
private drawCaptions;
|
|
89
319
|
selectTextTrack(trackId: string | null): Promise<void>;
|
|
90
320
|
selectAudioTrack(trackId: string): Promise<void>;
|
|
91
321
|
selectVideoTrack(trackId: string | null): Promise<void>;
|
|
@@ -97,6 +327,17 @@ declare class SmartPlayerComponent implements OnInit, OnDestroy {
|
|
|
97
327
|
isCastSupported(): boolean;
|
|
98
328
|
isCastActive(): boolean;
|
|
99
329
|
showCastButton(): boolean;
|
|
330
|
+
/**
|
|
331
|
+
* AirPlay, as WebKit offers it: the system decides what is reachable and draws the picker
|
|
332
|
+
* itself. Nothing is discovered here, and nothing is sent — the route belongs to the device.
|
|
333
|
+
* Everywhere else these stay false and the button never appears.
|
|
334
|
+
*/
|
|
335
|
+
showAirPlayButton(): boolean;
|
|
336
|
+
isAirPlayActive(): boolean;
|
|
337
|
+
airPlayLabel(): string;
|
|
338
|
+
openAirPlayPicker(): void;
|
|
339
|
+
/** Wired to the media element whenever one is created, for video and for audio alike. */
|
|
340
|
+
private watchAirPlay;
|
|
100
341
|
castLabel(): string;
|
|
101
342
|
castHintLabel(): string;
|
|
102
343
|
onCastClick(): void;
|
|
@@ -110,19 +351,219 @@ declare class SmartPlayerComponent implements OnInit, OnDestroy {
|
|
|
110
351
|
bufferPercent(): number;
|
|
111
352
|
fmtTime(sec: number): string;
|
|
112
353
|
noop(): void;
|
|
354
|
+
/**
|
|
355
|
+
* Music plays in a real <audio> element: mobile browsers and Android WebViews pause <video> elements as soon as
|
|
356
|
+
* the page is hidden, which would stop the music when the app goes to the background or the screen turns off.
|
|
357
|
+
*/
|
|
358
|
+
private mediaElementForMode;
|
|
113
359
|
onInteraction(persist?: boolean): void;
|
|
114
360
|
onPointerLeave(): void;
|
|
115
361
|
onRootClick(event: MouseEvent): void;
|
|
116
362
|
onEscape(): void;
|
|
117
363
|
onKeydown(event: KeyboardEvent): void;
|
|
364
|
+
private loadConfig;
|
|
365
|
+
private applyStartTime;
|
|
366
|
+
private applySeek;
|
|
367
|
+
private safeSeekTime;
|
|
368
|
+
private sourceSignature;
|
|
118
369
|
private bindRemotePlaybackState;
|
|
119
370
|
private syncControlVisibility;
|
|
371
|
+
private applyVolume;
|
|
372
|
+
private syncOutputVolumeInput;
|
|
373
|
+
setOutputVolume(value: number): void;
|
|
374
|
+
private setVolume;
|
|
375
|
+
private normalizeVolume;
|
|
120
376
|
private clearHideControlsTimer;
|
|
377
|
+
private queueSurfacePlaybackToggle;
|
|
378
|
+
private clearSurfaceClickTimer;
|
|
379
|
+
private playbackToggleIntent;
|
|
380
|
+
private showSurfaceGesture;
|
|
381
|
+
private clearGestureTimer;
|
|
121
382
|
private isInteractiveTarget;
|
|
122
383
|
emitNext(): void;
|
|
123
384
|
emitPrev(): void;
|
|
124
|
-
static ɵfac:
|
|
125
|
-
static ɵcmp:
|
|
385
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SmartPlayerComponent, never>;
|
|
386
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartPlayerComponent, "ngx-smart-player", never, { "config": { "alias": "config"; "required": true; }; "plugins": { "alias": "plugins"; "required": false; }; "ports": { "alias": "ports"; "required": false; }; "engines": { "alias": "engines"; "required": false; }; "debug": { "alias": "debug"; "required": false; }; "startTimeSec": { "alias": "startTimeSec"; "required": false; }; "autoplayOnInit": { "alias": "autoplayOnInit"; "required": false; }; "playRequest": { "alias": "playRequest"; "required": false; }; "canPrev": { "alias": "canPrev"; "required": false; }; "canNext": { "alias": "canNext"; "required": false; }; "previousLabel": { "alias": "previousLabel"; "required": false; }; "nextLabel": { "alias": "nextLabel"; "required": false; }; "playLabel": { "alias": "playLabel"; "required": false; }; "pauseLabel": { "alias": "pauseLabel"; "required": false; }; "shuffleActive": { "alias": "shuffleActive"; "required": false; }; "shuffleLabel": { "alias": "shuffleLabel"; "required": false; }; "repeatMode": { "alias": "repeatMode"; "required": false; }; "repeatLabel": { "alias": "repeatLabel"; "required": false; }; "hasPlaylistControls": { "alias": "hasPlaylistControls"; "required": false; }; "mediaMode": { "alias": "mediaMode"; "required": false; }; "castEnabled": { "alias": "castEnabled"; "required": false; }; "castConnected": { "alias": "castConnected"; "required": false; }; "documentShortcuts": { "alias": "documentShortcuts"; "required": false; }; "nowPlayingLabel": { "alias": "nowPlayingLabel"; "required": false; }; "nowListeningLabel": { "alias": "nowListeningLabel"; "required": false; }; "fullscreenHintLabel": { "alias": "fullscreenHintLabel"; "required": false; }; "fullscreenLabel": { "alias": "fullscreenLabel"; "required": false; }; "readyStatusLabel": { "alias": "readyStatusLabel"; "required": false; }; "playingStatusLabel": { "alias": "playingStatusLabel"; "required": false; }; "pausedStatusLabel": { "alias": "pausedStatusLabel"; "required": false; }; "bufferingStatusLabel": { "alias": "bufferingStatusLabel"; "required": false; }; "loadingStatusLabel": { "alias": "loadingStatusLabel"; "required": false; }; "endedStatusLabel": { "alias": "endedStatusLabel"; "required": false; }; "errorStatusLabel": { "alias": "errorStatusLabel"; "required": false; }; "outputVolume": { "alias": "outputVolume"; "required": false; }; "outputVolumeLabel": { "alias": "outputVolumeLabel"; "required": false; }; "outputMuteLabel": { "alias": "outputMuteLabel"; "required": false; }; "outputUnmuteLabel": { "alias": "outputUnmuteLabel"; "required": false; }; "timelineDurationSec": { "alias": "timelineDurationSec"; "required": false; }; "timelineMarkers": { "alias": "timelineMarkers"; "required": false; }; "menuLabels": { "alias": "menuLabels"; "required": false; }; }, { "ended": "ended"; "videoSize": "videoSize"; "progress": "progress"; "prev": "prev"; "next": "next"; "toggleShuffle": "toggleShuffle"; "cycleRepeat": "cycleRepeat"; "subtitles": "subtitles"; "subtitlesLoaded": "subtitlesLoaded"; "cast": "cast"; "stateChange": "stateChange"; "playbackToggle": "playbackToggle"; "outputVolumeChange": "outputVolumeChange"; }, never, ["[ngxsp-player-inline-controls]"], true, never>;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
type RepeatMode = 'off' | 'one' | 'all';
|
|
390
|
+
type PlayerMenuKind = 'tracks' | 'speed';
|
|
391
|
+
/**
|
|
392
|
+
* Barre de contrôle du skin classique, extraite du SmartPlayerComponent
|
|
393
|
+
* (décomposition, cf. docs/AUDIT.md). Sans accès au moteur ni au <video> :
|
|
394
|
+
* reçoit l'état + les capacités (cast/PiP) en entrée et émet les commandes ;
|
|
395
|
+
* l'hôte applique l'action (et possède l'élément vidéo pour PiP/cast).
|
|
396
|
+
*/
|
|
397
|
+
declare class PlayerControlsComponent {
|
|
398
|
+
readonly playing: _angular_core.InputSignal<boolean>;
|
|
399
|
+
readonly isAudioMode: _angular_core.InputSignal<boolean>;
|
|
400
|
+
readonly hasPlaylistControls: _angular_core.InputSignal<boolean>;
|
|
401
|
+
readonly canPrev: _angular_core.InputSignal<boolean>;
|
|
402
|
+
readonly canNext: _angular_core.InputSignal<boolean>;
|
|
403
|
+
readonly shuffleActive: _angular_core.InputSignal<boolean>;
|
|
404
|
+
readonly shuffleLabel: _angular_core.InputSignal<string>;
|
|
405
|
+
readonly repeatMode: _angular_core.InputSignal<RepeatMode>;
|
|
406
|
+
readonly repeatLabel: _angular_core.InputSignal<string>;
|
|
407
|
+
readonly captionsActive: _angular_core.InputSignal<boolean>;
|
|
408
|
+
readonly tracksLabel: _angular_core.InputSignal<string>;
|
|
409
|
+
readonly captionsLabel: _angular_core.InputSignal<string>;
|
|
410
|
+
readonly speedLabel: _angular_core.InputSignal<string>;
|
|
411
|
+
readonly volumeLabel: _angular_core.InputSignal<string>;
|
|
412
|
+
readonly muteLabel: _angular_core.InputSignal<string>;
|
|
413
|
+
readonly unmuteLabel: _angular_core.InputSignal<string>;
|
|
414
|
+
readonly showAirPlay: _angular_core.InputSignal<boolean>;
|
|
415
|
+
readonly airPlayActive: _angular_core.InputSignal<boolean>;
|
|
416
|
+
readonly airPlayLabel: _angular_core.InputSignal<string>;
|
|
417
|
+
readonly showCast: _angular_core.InputSignal<boolean>;
|
|
418
|
+
readonly castActive: _angular_core.InputSignal<boolean>;
|
|
419
|
+
readonly castLabel: _angular_core.InputSignal<string>;
|
|
420
|
+
readonly castHint: _angular_core.InputSignal<string>;
|
|
421
|
+
readonly pipSupported: _angular_core.InputSignal<boolean>;
|
|
422
|
+
readonly pipActive: _angular_core.InputSignal<boolean>;
|
|
423
|
+
readonly pipLabel: _angular_core.InputSignal<string>;
|
|
424
|
+
readonly volume: _angular_core.InputSignal<number>;
|
|
425
|
+
readonly currentTime: _angular_core.InputSignal<number>;
|
|
426
|
+
readonly duration: _angular_core.InputSignal<number>;
|
|
427
|
+
readonly buffered: _angular_core.InputSignal<number>;
|
|
428
|
+
readonly profile: _angular_core.InputSignal<SourceProfile>;
|
|
429
|
+
readonly playToggle: _angular_core.OutputEmitterRef<void>;
|
|
430
|
+
readonly seekRelative: _angular_core.OutputEmitterRef<number>;
|
|
431
|
+
readonly prev: _angular_core.OutputEmitterRef<void>;
|
|
432
|
+
readonly next: _angular_core.OutputEmitterRef<void>;
|
|
433
|
+
readonly toggleShuffle: _angular_core.OutputEmitterRef<void>;
|
|
434
|
+
readonly cycleRepeat: _angular_core.OutputEmitterRef<void>;
|
|
435
|
+
readonly openMenu: _angular_core.OutputEmitterRef<PlayerMenuKind>;
|
|
436
|
+
readonly captions: _angular_core.OutputEmitterRef<void>;
|
|
437
|
+
readonly airPlay: _angular_core.OutputEmitterRef<void>;
|
|
438
|
+
readonly cast: _angular_core.OutputEmitterRef<void>;
|
|
439
|
+
readonly pip: _angular_core.OutputEmitterRef<void>;
|
|
440
|
+
readonly mute: _angular_core.OutputEmitterRef<void>;
|
|
441
|
+
readonly scrub: _angular_core.OutputEmitterRef<number>;
|
|
442
|
+
readonly volumeChange: _angular_core.OutputEmitterRef<number>;
|
|
443
|
+
fmtTime(sec: number): string;
|
|
444
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PlayerControlsComponent, never>;
|
|
445
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PlayerControlsComponent, "ngxsp-player-controls", never, { "playing": { "alias": "playing"; "required": false; "isSignal": true; }; "isAudioMode": { "alias": "isAudioMode"; "required": false; "isSignal": true; }; "hasPlaylistControls": { "alias": "hasPlaylistControls"; "required": false; "isSignal": true; }; "canPrev": { "alias": "canPrev"; "required": false; "isSignal": true; }; "canNext": { "alias": "canNext"; "required": false; "isSignal": true; }; "shuffleActive": { "alias": "shuffleActive"; "required": false; "isSignal": true; }; "shuffleLabel": { "alias": "shuffleLabel"; "required": false; "isSignal": true; }; "repeatMode": { "alias": "repeatMode"; "required": false; "isSignal": true; }; "repeatLabel": { "alias": "repeatLabel"; "required": false; "isSignal": true; }; "captionsActive": { "alias": "captionsActive"; "required": false; "isSignal": true; }; "tracksLabel": { "alias": "tracksLabel"; "required": false; "isSignal": true; }; "captionsLabel": { "alias": "captionsLabel"; "required": false; "isSignal": true; }; "speedLabel": { "alias": "speedLabel"; "required": false; "isSignal": true; }; "volumeLabel": { "alias": "volumeLabel"; "required": false; "isSignal": true; }; "muteLabel": { "alias": "muteLabel"; "required": false; "isSignal": true; }; "unmuteLabel": { "alias": "unmuteLabel"; "required": false; "isSignal": true; }; "showAirPlay": { "alias": "showAirPlay"; "required": false; "isSignal": true; }; "airPlayActive": { "alias": "airPlayActive"; "required": false; "isSignal": true; }; "airPlayLabel": { "alias": "airPlayLabel"; "required": false; "isSignal": true; }; "showCast": { "alias": "showCast"; "required": false; "isSignal": true; }; "castActive": { "alias": "castActive"; "required": false; "isSignal": true; }; "castLabel": { "alias": "castLabel"; "required": false; "isSignal": true; }; "castHint": { "alias": "castHint"; "required": false; "isSignal": true; }; "pipSupported": { "alias": "pipSupported"; "required": false; "isSignal": true; }; "pipActive": { "alias": "pipActive"; "required": false; "isSignal": true; }; "pipLabel": { "alias": "pipLabel"; "required": false; "isSignal": true; }; "volume": { "alias": "volume"; "required": false; "isSignal": true; }; "currentTime": { "alias": "currentTime"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "buffered": { "alias": "buffered"; "required": false; "isSignal": true; }; "profile": { "alias": "profile"; "required": false; "isSignal": true; }; }, { "playToggle": "playToggle"; "seekRelative": "seekRelative"; "prev": "prev"; "next": "next"; "toggleShuffle": "toggleShuffle"; "cycleRepeat": "cycleRepeat"; "openMenu": "openMenu"; "captions": "captions"; "airPlay": "airPlay"; "cast": "cast"; "pip": "pip"; "mute": "mute"; "scrub": "scrub"; "volumeChange": "volumeChange"; }, never, never, true, never>;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* Barre de contrôle du skin vod (top bar + center dock + bottom bar),
|
|
450
|
+
* extraite du SmartPlayerComponent (décomposition, cf. docs/AUDIT.md).
|
|
451
|
+
* Le menu pistes/vitesse est projeté par l'hôte via <ng-content>.
|
|
452
|
+
* PiP/cast restent au parent (propriétaire du <video>) : capacités en entrée,
|
|
453
|
+
* commandes en sortie.
|
|
454
|
+
*/
|
|
455
|
+
declare class PlayerControlsVodComponent {
|
|
456
|
+
readonly playing: _angular_core.InputSignal<boolean>;
|
|
457
|
+
readonly isAudioMode: _angular_core.InputSignal<boolean>;
|
|
458
|
+
readonly displayTitle: _angular_core.InputSignal<string>;
|
|
459
|
+
readonly nowPlayingLabel: _angular_core.InputSignal<string>;
|
|
460
|
+
readonly nowListeningLabel: _angular_core.InputSignal<string>;
|
|
461
|
+
readonly fullscreenHintLabel: _angular_core.InputSignal<string>;
|
|
462
|
+
readonly statusLabel: _angular_core.InputSignal<string>;
|
|
463
|
+
readonly keyboardHint: _angular_core.InputSignal<string>;
|
|
464
|
+
readonly hasPlaylistControls: _angular_core.InputSignal<boolean>;
|
|
465
|
+
readonly canPrev: _angular_core.InputSignal<boolean>;
|
|
466
|
+
readonly canNext: _angular_core.InputSignal<boolean>;
|
|
467
|
+
readonly previousLabel: _angular_core.InputSignal<string>;
|
|
468
|
+
readonly nextLabel: _angular_core.InputSignal<string>;
|
|
469
|
+
readonly playLabel: _angular_core.InputSignal<string>;
|
|
470
|
+
readonly pauseLabel: _angular_core.InputSignal<string>;
|
|
471
|
+
readonly shuffleActive: _angular_core.InputSignal<boolean>;
|
|
472
|
+
readonly shuffleLabel: _angular_core.InputSignal<string>;
|
|
473
|
+
readonly repeatMode: _angular_core.InputSignal<RepeatMode>;
|
|
474
|
+
readonly repeatLabel: _angular_core.InputSignal<string>;
|
|
475
|
+
readonly captionsActive: _angular_core.InputSignal<boolean>;
|
|
476
|
+
readonly tracksLabel: _angular_core.InputSignal<string>;
|
|
477
|
+
readonly captionsLabel: _angular_core.InputSignal<string>;
|
|
478
|
+
readonly speedLabel: _angular_core.InputSignal<string>;
|
|
479
|
+
/** "1×", "1.5×": the rate on the speed pill. */
|
|
480
|
+
readonly speedBadge: _angular_core.Signal<string>;
|
|
481
|
+
readonly volumeLabel: _angular_core.InputSignal<string>;
|
|
482
|
+
readonly muteLabel: _angular_core.InputSignal<string>;
|
|
483
|
+
readonly unmuteLabel: _angular_core.InputSignal<string>;
|
|
484
|
+
readonly showAirPlay: _angular_core.InputSignal<boolean>;
|
|
485
|
+
readonly airPlayActive: _angular_core.InputSignal<boolean>;
|
|
486
|
+
readonly airPlayLabel: _angular_core.InputSignal<string>;
|
|
487
|
+
readonly showCast: _angular_core.InputSignal<boolean>;
|
|
488
|
+
readonly castActive: _angular_core.InputSignal<boolean>;
|
|
489
|
+
readonly castLabel: _angular_core.InputSignal<string>;
|
|
490
|
+
readonly castHint: _angular_core.InputSignal<string>;
|
|
491
|
+
readonly pipSupported: _angular_core.InputSignal<boolean>;
|
|
492
|
+
readonly pipActive: _angular_core.InputSignal<boolean>;
|
|
493
|
+
readonly pipLabel: _angular_core.InputSignal<string>;
|
|
494
|
+
readonly fullscreenLabel: _angular_core.InputSignal<string>;
|
|
495
|
+
readonly volume: _angular_core.InputSignal<number>;
|
|
496
|
+
readonly currentTime: _angular_core.InputSignal<number>;
|
|
497
|
+
readonly duration: _angular_core.InputSignal<number>;
|
|
498
|
+
readonly buffered: _angular_core.InputSignal<number>;
|
|
499
|
+
readonly bufferPercent: _angular_core.InputSignal<number>;
|
|
500
|
+
readonly profile: _angular_core.InputSignal<SourceProfile>;
|
|
501
|
+
readonly timelineDurationSec: _angular_core.InputSignal<number>;
|
|
502
|
+
readonly timelineMarkers: _angular_core.InputSignal<readonly NgxspTimelineMarker[]>;
|
|
503
|
+
readonly playToggle: _angular_core.OutputEmitterRef<void>;
|
|
504
|
+
readonly seekRelative: _angular_core.OutputEmitterRef<number>;
|
|
505
|
+
readonly prev: _angular_core.OutputEmitterRef<void>;
|
|
506
|
+
readonly next: _angular_core.OutputEmitterRef<void>;
|
|
507
|
+
readonly toggleShuffle: _angular_core.OutputEmitterRef<void>;
|
|
508
|
+
readonly cycleRepeat: _angular_core.OutputEmitterRef<void>;
|
|
509
|
+
readonly openMenu: _angular_core.OutputEmitterRef<PlayerMenuKind>;
|
|
510
|
+
readonly captions: _angular_core.OutputEmitterRef<void>;
|
|
511
|
+
readonly airPlay: _angular_core.OutputEmitterRef<void>;
|
|
512
|
+
readonly cast: _angular_core.OutputEmitterRef<void>;
|
|
513
|
+
readonly pip: _angular_core.OutputEmitterRef<void>;
|
|
514
|
+
readonly fullscreen: _angular_core.OutputEmitterRef<void>;
|
|
515
|
+
readonly mute: _angular_core.OutputEmitterRef<void>;
|
|
516
|
+
readonly scrub: _angular_core.OutputEmitterRef<number>;
|
|
517
|
+
readonly volumeChange: _angular_core.OutputEmitterRef<number>;
|
|
518
|
+
fmtTime(sec: number): string;
|
|
519
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PlayerControlsVodComponent, never>;
|
|
520
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PlayerControlsVodComponent, "ngxsp-player-controls-vod", never, { "playing": { "alias": "playing"; "required": false; "isSignal": true; }; "isAudioMode": { "alias": "isAudioMode"; "required": false; "isSignal": true; }; "displayTitle": { "alias": "displayTitle"; "required": false; "isSignal": true; }; "nowPlayingLabel": { "alias": "nowPlayingLabel"; "required": false; "isSignal": true; }; "nowListeningLabel": { "alias": "nowListeningLabel"; "required": false; "isSignal": true; }; "fullscreenHintLabel": { "alias": "fullscreenHintLabel"; "required": false; "isSignal": true; }; "statusLabel": { "alias": "statusLabel"; "required": false; "isSignal": true; }; "keyboardHint": { "alias": "keyboardHint"; "required": false; "isSignal": true; }; "hasPlaylistControls": { "alias": "hasPlaylistControls"; "required": false; "isSignal": true; }; "canPrev": { "alias": "canPrev"; "required": false; "isSignal": true; }; "canNext": { "alias": "canNext"; "required": false; "isSignal": true; }; "previousLabel": { "alias": "previousLabel"; "required": false; "isSignal": true; }; "nextLabel": { "alias": "nextLabel"; "required": false; "isSignal": true; }; "playLabel": { "alias": "playLabel"; "required": false; "isSignal": true; }; "pauseLabel": { "alias": "pauseLabel"; "required": false; "isSignal": true; }; "shuffleActive": { "alias": "shuffleActive"; "required": false; "isSignal": true; }; "shuffleLabel": { "alias": "shuffleLabel"; "required": false; "isSignal": true; }; "repeatMode": { "alias": "repeatMode"; "required": false; "isSignal": true; }; "repeatLabel": { "alias": "repeatLabel"; "required": false; "isSignal": true; }; "captionsActive": { "alias": "captionsActive"; "required": false; "isSignal": true; }; "tracksLabel": { "alias": "tracksLabel"; "required": false; "isSignal": true; }; "captionsLabel": { "alias": "captionsLabel"; "required": false; "isSignal": true; }; "speedLabel": { "alias": "speedLabel"; "required": false; "isSignal": true; }; "volumeLabel": { "alias": "volumeLabel"; "required": false; "isSignal": true; }; "muteLabel": { "alias": "muteLabel"; "required": false; "isSignal": true; }; "unmuteLabel": { "alias": "unmuteLabel"; "required": false; "isSignal": true; }; "showAirPlay": { "alias": "showAirPlay"; "required": false; "isSignal": true; }; "airPlayActive": { "alias": "airPlayActive"; "required": false; "isSignal": true; }; "airPlayLabel": { "alias": "airPlayLabel"; "required": false; "isSignal": true; }; "showCast": { "alias": "showCast"; "required": false; "isSignal": true; }; "castActive": { "alias": "castActive"; "required": false; "isSignal": true; }; "castLabel": { "alias": "castLabel"; "required": false; "isSignal": true; }; "castHint": { "alias": "castHint"; "required": false; "isSignal": true; }; "pipSupported": { "alias": "pipSupported"; "required": false; "isSignal": true; }; "pipActive": { "alias": "pipActive"; "required": false; "isSignal": true; }; "pipLabel": { "alias": "pipLabel"; "required": false; "isSignal": true; }; "fullscreenLabel": { "alias": "fullscreenLabel"; "required": false; "isSignal": true; }; "volume": { "alias": "volume"; "required": false; "isSignal": true; }; "currentTime": { "alias": "currentTime"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "buffered": { "alias": "buffered"; "required": false; "isSignal": true; }; "bufferPercent": { "alias": "bufferPercent"; "required": false; "isSignal": true; }; "profile": { "alias": "profile"; "required": false; "isSignal": true; }; "timelineDurationSec": { "alias": "timelineDurationSec"; "required": false; "isSignal": true; }; "timelineMarkers": { "alias": "timelineMarkers"; "required": false; "isSignal": true; }; }, { "playToggle": "playToggle"; "seekRelative": "seekRelative"; "prev": "prev"; "next": "next"; "toggleShuffle": "toggleShuffle"; "cycleRepeat": "cycleRepeat"; "openMenu": "openMenu"; "captions": "captions"; "airPlay": "airPlay"; "cast": "cast"; "pip": "pip"; "fullscreen": "fullscreen"; "mute": "mute"; "scrub": "scrub"; "volumeChange": "volumeChange"; }, never, ["[ngxsp-player-inline-controls]", "ngxsp-player-menu"], true, never>;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* Skin « édition » du lecteur : registre instrument (cf. docs/UX_VISION.md).
|
|
525
|
+
* Titre display, coins francs, libellés en capitales, accent champagne, et le
|
|
526
|
+
* traitement direct (NgxspLiveBadge + « Au direct ») en profil `live`.
|
|
527
|
+
* Compose les primitives de @ngxsp/ui-core. Le menu est projeté via <ng-content>.
|
|
528
|
+
*/
|
|
529
|
+
declare class PlayerControlsEditionComponent {
|
|
530
|
+
readonly profile: _angular_core.InputSignal<SourceProfile>;
|
|
531
|
+
readonly playing: _angular_core.InputSignal<boolean>;
|
|
532
|
+
readonly displayTitle: _angular_core.InputSignal<string>;
|
|
533
|
+
readonly metaLabel: _angular_core.InputSignal<string>;
|
|
534
|
+
readonly statusLabel: _angular_core.InputSignal<string>;
|
|
535
|
+
readonly behindSec: _angular_core.InputSignal<number>;
|
|
536
|
+
readonly liveLabel: _angular_core.InputSignal<string>;
|
|
537
|
+
readonly captionsActive: _angular_core.InputSignal<boolean>;
|
|
538
|
+
readonly speedLabel: _angular_core.InputSignal<string>;
|
|
539
|
+
readonly showAirPlay: _angular_core.InputSignal<boolean>;
|
|
540
|
+
readonly airPlayActive: _angular_core.InputSignal<boolean>;
|
|
541
|
+
readonly airPlayLabel: _angular_core.InputSignal<string>;
|
|
542
|
+
readonly showCast: _angular_core.InputSignal<boolean>;
|
|
543
|
+
readonly castActive: _angular_core.InputSignal<boolean>;
|
|
544
|
+
readonly pipSupported: _angular_core.InputSignal<boolean>;
|
|
545
|
+
readonly pipActive: _angular_core.InputSignal<boolean>;
|
|
546
|
+
readonly volume: _angular_core.InputSignal<number>;
|
|
547
|
+
readonly volumeLabel: _angular_core.InputSignal<string>;
|
|
548
|
+
readonly muteLabel: _angular_core.InputSignal<string>;
|
|
549
|
+
readonly unmuteLabel: _angular_core.InputSignal<string>;
|
|
550
|
+
readonly currentTime: _angular_core.InputSignal<number>;
|
|
551
|
+
readonly duration: _angular_core.InputSignal<number>;
|
|
552
|
+
readonly buffered: _angular_core.InputSignal<number>;
|
|
553
|
+
readonly playToggle: _angular_core.OutputEmitterRef<void>;
|
|
554
|
+
readonly seekRelative: _angular_core.OutputEmitterRef<number>;
|
|
555
|
+
readonly openMenu: _angular_core.OutputEmitterRef<PlayerMenuKind>;
|
|
556
|
+
readonly captions: _angular_core.OutputEmitterRef<void>;
|
|
557
|
+
readonly airPlay: _angular_core.OutputEmitterRef<void>;
|
|
558
|
+
readonly cast: _angular_core.OutputEmitterRef<void>;
|
|
559
|
+
readonly pip: _angular_core.OutputEmitterRef<void>;
|
|
560
|
+
readonly mute: _angular_core.OutputEmitterRef<void>;
|
|
561
|
+
readonly scrub: _angular_core.OutputEmitterRef<number>;
|
|
562
|
+
readonly volumeChange: _angular_core.OutputEmitterRef<number>;
|
|
563
|
+
readonly goLive: _angular_core.OutputEmitterRef<void>;
|
|
564
|
+
fmtTime(sec: number): string;
|
|
565
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PlayerControlsEditionComponent, never>;
|
|
566
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PlayerControlsEditionComponent, "ngxsp-player-controls-edition", never, { "profile": { "alias": "profile"; "required": false; "isSignal": true; }; "playing": { "alias": "playing"; "required": false; "isSignal": true; }; "displayTitle": { "alias": "displayTitle"; "required": false; "isSignal": true; }; "metaLabel": { "alias": "metaLabel"; "required": false; "isSignal": true; }; "statusLabel": { "alias": "statusLabel"; "required": false; "isSignal": true; }; "behindSec": { "alias": "behindSec"; "required": false; "isSignal": true; }; "liveLabel": { "alias": "liveLabel"; "required": false; "isSignal": true; }; "captionsActive": { "alias": "captionsActive"; "required": false; "isSignal": true; }; "speedLabel": { "alias": "speedLabel"; "required": false; "isSignal": true; }; "showAirPlay": { "alias": "showAirPlay"; "required": false; "isSignal": true; }; "airPlayActive": { "alias": "airPlayActive"; "required": false; "isSignal": true; }; "airPlayLabel": { "alias": "airPlayLabel"; "required": false; "isSignal": true; }; "showCast": { "alias": "showCast"; "required": false; "isSignal": true; }; "castActive": { "alias": "castActive"; "required": false; "isSignal": true; }; "pipSupported": { "alias": "pipSupported"; "required": false; "isSignal": true; }; "pipActive": { "alias": "pipActive"; "required": false; "isSignal": true; }; "volume": { "alias": "volume"; "required": false; "isSignal": true; }; "volumeLabel": { "alias": "volumeLabel"; "required": false; "isSignal": true; }; "muteLabel": { "alias": "muteLabel"; "required": false; "isSignal": true; }; "unmuteLabel": { "alias": "unmuteLabel"; "required": false; "isSignal": true; }; "currentTime": { "alias": "currentTime"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "buffered": { "alias": "buffered"; "required": false; "isSignal": true; }; }, { "playToggle": "playToggle"; "seekRelative": "seekRelative"; "openMenu": "openMenu"; "captions": "captions"; "airPlay": "airPlay"; "cast": "cast"; "pip": "pip"; "mute": "mute"; "scrub": "scrub"; "volumeChange": "volumeChange"; "goLive": "goLive"; }, never, ["*"], true, never>;
|
|
126
567
|
}
|
|
127
568
|
|
|
128
569
|
/**
|
|
@@ -143,5 +584,5 @@ interface SmartPlayerProvidersConfig {
|
|
|
143
584
|
*/
|
|
144
585
|
declare function provideSmartPlayer(cfg: SmartPlayerProvidersConfig): EnvironmentProviders;
|
|
145
586
|
|
|
146
|
-
export { SMART_PLAYER_METADATA_PROVIDERS, SMART_PLAYER_SUBTITLE_PROVIDERS, SmartPlayerComponent, provideSmartPlayer };
|
|
147
|
-
export type { SmartPlayerProvidersConfig };
|
|
587
|
+
export { DEFAULT_PLAYER_MENU_LABELS, PlayerControlsComponent, PlayerControlsEditionComponent, PlayerControlsVodComponent, SMART_PLAYER_METADATA_PROVIDERS, SMART_PLAYER_SUBTITLE_PROVIDERS, SmartConfirmDialogComponent, SmartPlayerComponent, SmartPlayerIconComponent, SmartSettingsComponent, provideSmartPlayer };
|
|
588
|
+
export type { RepeatMode as PlayerControlsRepeatMode, PlayerMenuKind, PlayerMenuLabels, SmartCompactMode, SmartPlayerIconName, SmartPlayerProgress, SmartPlayerProvidersConfig, SmartSettingAction, SmartSettingChange, SmartSettingEntry, SmartSettingItem, SmartSettingOption, SmartSettingsSection };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngxsplayer/ngx-smart-player",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "Angular smart media player for audio and video with engine abstraction and plugin system.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"@angular/core": ">=17.0.0 <21.0.0",
|
|
20
20
|
"rxjs": ">=7.0.0 <8.0.0",
|
|
21
21
|
"shaka-player": "^5.0.2",
|
|
22
|
-
"@ngxsp/core": "0.
|
|
23
|
-
"@ngxsplayer/ngx-smart-player-ui-core": "0.
|
|
22
|
+
"@ngxsp/core": "^0.1.0",
|
|
23
|
+
"@ngxsplayer/ngx-smart-player-ui-core": "^0.1.0"
|
|
24
24
|
},
|
|
25
25
|
"sideEffects": false,
|
|
26
26
|
"dependencies": {
|