@ngxsplayer/ngx-smart-player-ui-video 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/index.d.ts ADDED
@@ -0,0 +1,853 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, ElementRef } from '@angular/core';
3
+ import { PlayerConfig, PlayerPlugin, PlayerPorts, EngineFactory, SmartPlayerIconName, SmartSettingsSection, PlayerMenuLabels, SmartPlayerProgress, SmartCompactMode, SmartSettingChange, SmartSettingAction, PlayerState } from '@ngxsplayer/ngx-smart-player';
4
+ import { NgxspTimelineMarker } from '@ngxsplayer/ngx-smart-player-ui-core';
5
+
6
+ type VideoUiMediaKind = 'movie' | 'series' | 'episode' | 'clip' | 'live';
7
+ /** Something that can be done to one video, offered on its card rather than somewhere else. */
8
+ interface VideoUiCardAction {
9
+ id: string;
10
+ label: string;
11
+ icon: SmartPlayerIconName;
12
+ /** Whether it takes something away for good, which the menu says in its colours. */
13
+ danger?: boolean;
14
+ }
15
+ interface VideoUiMediaCard {
16
+ id: string;
17
+ title: string;
18
+ subtitle?: string;
19
+ meta?: string;
20
+ duration?: string;
21
+ sourceUrl?: string;
22
+ artworkUrl?: string;
23
+ active?: boolean;
24
+ kind?: VideoUiMediaKind;
25
+ kindLabel?: string;
26
+ parentTitle?: string;
27
+ seasonLabel?: string;
28
+ episodeLabel?: string;
29
+ releaseYear?: string;
30
+ progressPercent?: number;
31
+ tags?: string[];
32
+ /** What can be done to this one video. Cards with none keep their single gesture: open it. */
33
+ actions?: VideoUiCardAction[];
34
+ }
35
+ interface VideoUiQueueActionLabels {
36
+ play?: string;
37
+ moveUp?: string;
38
+ moveDown?: string;
39
+ remove?: string;
40
+ }
41
+ interface VideoUiSearchFilter {
42
+ id: string;
43
+ label: string;
44
+ count?: number;
45
+ active?: boolean;
46
+ disabled?: boolean;
47
+ }
48
+ interface VideoUiSearchActionLabels {
49
+ play?: string;
50
+ queue?: string;
51
+ watchLater?: string;
52
+ favorite?: string;
53
+ download?: string;
54
+ }
55
+ /**
56
+ * One strip along the bottom of the shell, for the two things a view has to say from outside
57
+ * the flow of cards: a question that wants an answer before something happens, and how far a
58
+ * long job has got. The viewer is told once and then left alone.
59
+ */
60
+ interface VideoUiPromptBar {
61
+ /** What is happening, or what is being asked. */
62
+ message: string;
63
+ /** Both present when an answer is wanted, and the strip then waits for one. */
64
+ confirmLabel?: string;
65
+ cancelLabel?: string;
66
+ /** Present while something is running: 0 to 100. */
67
+ percent?: number;
68
+ /** A second line: the file in hand, or what the answer decides. */
69
+ hint?: string;
70
+ /** Whether the answer takes something away for good, which the strip says in its colours. */
71
+ danger?: boolean;
72
+ /** Which question this is, so an answer cannot be taken for the answer to another. */
73
+ id?: string;
74
+ }
75
+ interface VideoUiSection {
76
+ id: string;
77
+ title: string;
78
+ items: VideoUiMediaCard[];
79
+ }
80
+ /** Where the menu goes, which is the viewer's choice and not a guess from the window's width. */
81
+ type VideoUiMenuLayout = 'vertical' | 'horizontal' | 'hidden';
82
+ /** One step of the way down: where the view is, and what it took to get there. */
83
+ interface VideoUiTrailStep {
84
+ id: string;
85
+ label: string;
86
+ }
87
+ interface VideoUiMediaDetailEpisode {
88
+ id: string;
89
+ title: string;
90
+ subtitle?: string;
91
+ duration?: string;
92
+ artworkUrl?: string;
93
+ progressPercent?: number;
94
+ active?: boolean;
95
+ }
96
+ interface VideoUiMediaDetailAction {
97
+ id: string;
98
+ label: string;
99
+ icon: SmartPlayerIconName;
100
+ primary?: boolean;
101
+ disabled?: boolean;
102
+ }
103
+ type VideoUiMediaWorkspaceTone = 'teal' | 'red' | 'blue' | 'gold' | 'neutral';
104
+ interface VideoUiMediaChapter {
105
+ id: string;
106
+ title: string;
107
+ label?: string;
108
+ time?: string;
109
+ timeSec?: number;
110
+ summary?: string;
111
+ actionId?: string;
112
+ active?: boolean;
113
+ }
114
+ interface VideoUiMediaChecklistItem {
115
+ id: string;
116
+ label: string;
117
+ value?: string;
118
+ description?: string;
119
+ tone?: VideoUiMediaWorkspaceTone;
120
+ }
121
+ interface VideoUiMediaDetail {
122
+ id: string;
123
+ title: string;
124
+ kicker?: string;
125
+ subtitle?: string;
126
+ summary?: string;
127
+ posterUrl?: string;
128
+ kindLabel?: string;
129
+ metaItems?: string[];
130
+ tags?: string[];
131
+ progressPercent?: number;
132
+ progressLabel?: string;
133
+ actions?: VideoUiMediaDetailAction[];
134
+ workspaceTitle?: string;
135
+ workspaceSummary?: string;
136
+ chaptersTitle?: string;
137
+ chapters?: VideoUiMediaChapter[];
138
+ checklistTitle?: string;
139
+ checklist?: VideoUiMediaChecklistItem[];
140
+ episodesTitle?: string;
141
+ episodes?: VideoUiMediaDetailEpisode[];
142
+ }
143
+ interface VideoUiNavItem {
144
+ id: string;
145
+ label: string;
146
+ icon: SmartPlayerIconName;
147
+ active?: boolean;
148
+ disabled?: boolean;
149
+ }
150
+ type VideoUiToolTone = 'teal' | 'red' | 'blue' | 'gold' | 'neutral';
151
+ type VideoUiRuntimeMode = 'online' | 'offline';
152
+ type VideoUiPlaybackIntent = 'play' | 'pause';
153
+ interface VideoUiToolCard {
154
+ id: string;
155
+ label: string;
156
+ value: string;
157
+ icon: SmartPlayerIconName;
158
+ active?: boolean;
159
+ tone?: VideoUiToolTone;
160
+ }
161
+ type VideoUiInspectorTone = 'neutral' | 'success' | 'warning';
162
+ interface VideoUiInspectorMetric {
163
+ label: string;
164
+ value: string;
165
+ tone?: VideoUiInspectorTone;
166
+ }
167
+ interface VideoUiInspectorItem {
168
+ label: string;
169
+ value?: string;
170
+ description?: string;
171
+ tone?: VideoUiInspectorTone;
172
+ }
173
+ interface VideoUiInspectorAction {
174
+ id: string;
175
+ label: string;
176
+ icon: SmartPlayerIconName;
177
+ primary?: boolean;
178
+ disabled?: boolean;
179
+ }
180
+ /** A server type of the connection form. */
181
+ interface VideoUiServerKind {
182
+ id: string;
183
+ label: string;
184
+ /** False for servers without accounts (DLNA): the user name and password fields are hidden. */
185
+ credentials?: boolean;
186
+ /** Placeholder of the address field for this type. */
187
+ addressPlaceholder?: string;
188
+ /** The app can look for servers of this type on the local network. */
189
+ discoverable?: boolean;
190
+ }
191
+ interface VideoUiServerDiscovery {
192
+ searchLabel: string;
193
+ searchingLabel: string;
194
+ connectLabel: string;
195
+ /** Shown after a search that found nothing. */
196
+ emptyLabel?: string;
197
+ busy?: boolean;
198
+ servers: Array<{
199
+ id: string;
200
+ name: string;
201
+ subtitle?: string;
202
+ }>;
203
+ }
204
+ /** Media servers the viewer connected, and the form to add one: shown in the inspector panel, after its settings. */
205
+ interface VideoUiServerForm {
206
+ /** Title of the servers part of the panel. */
207
+ heading?: string;
208
+ title: string;
209
+ /** Server types to choose from; the first one is selected by default. */
210
+ kinds?: VideoUiServerKind[];
211
+ kindLabel?: string;
212
+ addressPlaceholder: string;
213
+ usernamePlaceholder: string;
214
+ passwordPlaceholder: string;
215
+ submitLabel: string;
216
+ disconnectLabel: string;
217
+ openLabel: string;
218
+ hint?: string;
219
+ busy?: boolean;
220
+ servers: Array<{
221
+ id: string;
222
+ name: string;
223
+ subtitle?: string;
224
+ active?: boolean;
225
+ }>;
226
+ /** Servers found on the local network, for the kinds marked `discoverable`. */
227
+ discovery?: VideoUiServerDiscovery;
228
+ }
229
+ /** A list the viewer created, shown in the side panel. */
230
+ interface VideoUiPlaylistOption {
231
+ id: string;
232
+ name: string;
233
+ itemCount?: number;
234
+ active?: boolean;
235
+ /** The panel's target is already in this list: the button takes it out instead of adding it. */
236
+ containsTarget?: boolean;
237
+ }
238
+ /** Everything the side panel needs to manage lists; hidden entirely when null. */
239
+ interface VideoUiPlaylistPanel {
240
+ title: string;
241
+ namePlaceholder: string;
242
+ renamePlaceholder: string;
243
+ createLabel: string;
244
+ addLabel: string;
245
+ openLabel: string;
246
+ renameLabel: string;
247
+ deleteLabel: string;
248
+ saveLabel: string;
249
+ cancelLabel: string;
250
+ itemsCountLabel: string;
251
+ emptyLabel: string;
252
+ removeLabel: string;
253
+ /** Item the "add" buttons file; without one the buttons are hidden. */
254
+ target?: {
255
+ id: string;
256
+ title: string;
257
+ } | null;
258
+ targetLabel?: string;
259
+ playlists: VideoUiPlaylistOption[];
260
+ }
261
+ /** A tab of the info panel over the video: its id is the id of the panel it opens. */
262
+ /**
263
+ * A video loaded where it was left: the player says so, and offers to start it over. The point itself is not shown
264
+ * (resume stays private); a new key shows the offer again.
265
+ */
266
+ interface VideoUiResumeOffer {
267
+ key: string;
268
+ message: string;
269
+ resumeLabel: string;
270
+ restartLabel: string;
271
+ }
272
+ interface VideoUiInfoTab {
273
+ id: string;
274
+ label: string;
275
+ icon: SmartPlayerIconName;
276
+ }
277
+ interface VideoUiInspectorPanel {
278
+ id: string;
279
+ title: string;
280
+ subtitle?: string;
281
+ status?: string;
282
+ icon?: SmartPlayerIconName;
283
+ metrics?: VideoUiInspectorMetric[];
284
+ items?: VideoUiInspectorItem[];
285
+ /** Settings shown in the panel; changes and actions come back through `settingChange` and `settingAction`. */
286
+ settings?: SmartSettingsSection[];
287
+ /** Settings shown after the servers (`serverForm`), which follow `settings`. */
288
+ trailingSettings?: SmartSettingsSection[];
289
+ actions?: VideoUiInspectorAction[];
290
+ }
291
+ type VideoUiViewMode = 'grid' | 'list';
292
+ interface VideoUiLanguageOption {
293
+ id: string;
294
+ label: string;
295
+ }
296
+ type VideoUiStatusKind = 'info' | 'success' | 'error';
297
+ interface VideoUiCardRef {
298
+ sectionId: string;
299
+ item: VideoUiMediaCard;
300
+ index: number;
301
+ }
302
+ declare class NgxSmartPlayerVideoUiComponent {
303
+ /**
304
+ * Keeps what is playing in sight in the queue. One scrolls down a queue to see what is
305
+ * coming, and the next video then starts out of view; it only scrolls when what plays
306
+ * changes, and inside the list rather than moving the page under everything else.
307
+ */
308
+ ngAfterViewChecked(): void;
309
+ constructor();
310
+ config: PlayerConfig | null;
311
+ /** The host app's logo in the masthead (an image URL); without it, a generic play tile. */
312
+ brandLogoSrc: string;
313
+ plugins: PlayerPlugin[];
314
+ ports?: Partial<PlayerPorts>;
315
+ engines?: EngineFactory[];
316
+ debug: boolean;
317
+ startTimeSec: number | null;
318
+ /** Incremented by the host when the viewer picks something to watch; the poster preview then gives way to the player. */
319
+ set playRequest(value: number);
320
+ get playRequest(): number;
321
+ private playRequestValue;
322
+ canPrev: boolean;
323
+ canNext: boolean;
324
+ previousLabel: string;
325
+ playerBackLabel: string;
326
+ nextLabel: string;
327
+ playLabel: string;
328
+ pauseLabel: string;
329
+ transportLabel: string;
330
+ cinemaMode: boolean;
331
+ cinemaLabel: string;
332
+ cinemaActiveLabel: string;
333
+ shuffleActive: boolean;
334
+ shuffleLabel: string;
335
+ repeatMode: 'off' | 'one' | 'all';
336
+ repeatLabel: string;
337
+ hasPlaylistControls: boolean;
338
+ castEnabled: boolean;
339
+ castConnected: boolean;
340
+ /** Set when the video loads where it was left (see `VideoUiResumeOffer`). */
341
+ set resumeOffer(offer: VideoUiResumeOffer | null);
342
+ get resumeOffer(): VideoUiResumeOffer | null;
343
+ private offer;
344
+ resumePromptShown: boolean;
345
+ private resumePromptTimer?;
346
+ chooseResume(choice: 'resume' | 'restart'): void;
347
+ private closeResumePrompt;
348
+ private clearResumePromptTimer;
349
+ /** Tabs of the info panel (library, engine, tracks, subtitles, progress, telemetry): their ids are panel ids. */
350
+ infoTabs: VideoUiInfoTab[];
351
+ infoLabel: string;
352
+ /** The info panel open, shown over the video (in the sheet on phones); null when closed. */
353
+ set infoPanel(panel: VideoUiInspectorPanel | null);
354
+ get infoPanel(): VideoUiInspectorPanel | null;
355
+ private info;
356
+ /** The words of the player's menus (tracks, speed, subtitles). */
357
+ playerMenuLabels: Partial<PlayerMenuLabels>;
358
+ heroEyebrow: string;
359
+ heroTitle: string;
360
+ heroSubtitle: string;
361
+ heroMeta: string;
362
+ heroArtworkUrl: string;
363
+ preferPosterPreview: boolean;
364
+ runtimeModeLabel: string;
365
+ onlineLabel: string;
366
+ offlineLabel: string;
367
+ navigationLabel: string;
368
+ menuLabel: string;
369
+ searchPlaceholder: string;
370
+ searchLabel: string;
371
+ searchResultsTitle: string;
372
+ searchResultsSummary: string;
373
+ searchResultsEmptyTitle: string;
374
+ searchResultsEmptyBody: string;
375
+ searchClearLabel: string;
376
+ searchFilterLabel: string;
377
+ searchFilters: VideoUiSearchFilter[];
378
+ searchActionLabels: VideoUiSearchActionLabels;
379
+ notificationsLabel: string;
380
+ settingsLabel: string;
381
+ sourceChangeLabel: string;
382
+ sourceChangeTitle: string;
383
+ sourceDropTitle: string;
384
+ sourceDropHint: string;
385
+ sourceChangeAccept: string;
386
+ /** When set (desktop shell), the title bar offers folder import and keeps single-file import as a secondary action. */
387
+ folderImportLabel: string;
388
+ libraryStatus: string;
389
+ /**
390
+ * Sliding a finger up or down over the picture: brightness on the left half, sound on the
391
+ * right. Off where it would get in the way — a pointer that only ever clicks, say.
392
+ */
393
+ touchAdjust: boolean;
394
+ /** How bright the picture is, 10 to 100. Below 100 a veil is drawn over it; nothing is brightened past its own. */
395
+ brightness: number;
396
+ brightnessChange: EventEmitter<number>;
397
+ /** "More": what opens a card's own menu, for a screen reader and for a tooltip. */
398
+ cardActionsLabel: string;
399
+ /** The way out of a card's menu, for whoever cannot see where the menu stops. */
400
+ cardMenuCloseLabel: string;
401
+ /** The action chosen on a card's menu: which action, on which video. */
402
+ cardAction: EventEmitter<{
403
+ actionId: string;
404
+ cardId: string;
405
+ }>;
406
+ /** The strip along the bottom: a question, or how far a long job has got. Null when there is nothing to say. */
407
+ promptBar: VideoUiPromptBar | null;
408
+ /** True when the viewer took the first way out, false for the second. */
409
+ promptAnswer: EventEmitter<boolean>;
410
+ libraryBusy: boolean;
411
+ sourceTypeLocalLabel: string;
412
+ sourceTypeStreamLabel: string;
413
+ languageLabel: string;
414
+ activeLanguage: string;
415
+ languageOptions: VideoUiLanguageOption[];
416
+ statusMessage: string;
417
+ statusKind: VideoUiStatusKind;
418
+ likeLabel: string;
419
+ likeActive: boolean;
420
+ dislikeLabel: string;
421
+ shareLabel: string;
422
+ watchLaterLabel: string;
423
+ watchLaterActive: boolean;
424
+ queueActionLabel: string;
425
+ queueShortLabel: string;
426
+ queueAddActiveLabel: string;
427
+ queueAddActiveShortLabel: string;
428
+ queueActionLabels: VideoUiQueueActionLabels;
429
+ moreLabel: string;
430
+ moreShortLabel: string;
431
+ browseLibraryLabel: string;
432
+ /**
433
+ * Where the view stands, from its own name down to what is open. Entering a series or a folder
434
+ * is not another page: it is another step here, and everything else keeps its shape.
435
+ */
436
+ trail: VideoUiTrailStep[];
437
+ trailLabel: string;
438
+ showAllLabel: string;
439
+ showLessLabel: string;
440
+ emptyCatalogLabel: string;
441
+ continueWatchingMeta: string;
442
+ continueWatching: VideoUiMediaCard[];
443
+ managedQueue: boolean;
444
+ upNextItems: VideoUiMediaCard[];
445
+ /** Lists the viewer created; null hides the block entirely. */
446
+ playlistPanel: VideoUiPlaylistPanel | null;
447
+ /** Media servers block above the library grid; null hides it entirely. */
448
+ serverForm: VideoUiServerForm | null;
449
+ showResumeProgress: boolean;
450
+ mediaDetail: VideoUiMediaDetail | null;
451
+ sidePanelTitle: string;
452
+ sidePanelMeta: string;
453
+ sections: VideoUiSection[];
454
+ navItems: VideoUiNavItem[];
455
+ toolCards: VideoUiToolCard[];
456
+ /** The tools open their panel inside the queue column, which is a sheet on a phone. */
457
+ set inspectorPanel(panel: VideoUiInspectorPanel | null);
458
+ get inspectorPanel(): VideoUiInspectorPanel | null;
459
+ /** What the side column shows: its own panel, or on phones the info panel. */
460
+ get sidePanel(): VideoUiInspectorPanel | null;
461
+ private inspector;
462
+ /**
463
+ * Every panel the host offers the side column. It used to hand one at a time, so a single
464
+ * panel still works: it is the list of one.
465
+ */
466
+ inspectorPanels: VideoUiInspectorPanel[];
467
+ /** The queue's own switch, which used to be "whatever showed when no panel did". */
468
+ queueOpen: boolean;
469
+ private readonly collapsedPanels;
470
+ private readonly closedPanels;
471
+ get knownPanels(): VideoUiInspectorPanel[];
472
+ /** The ones actually stacked: what the host offers, minus what the viewer put away. */
473
+ get openPanels(): VideoUiInspectorPanel[];
474
+ isPanelOpen(id: string): boolean;
475
+ isPanelCollapsed(id: string): boolean;
476
+ /** Folds a panel to its header, so several open ones stay usable without hiding any. */
477
+ togglePanelCollapsed(id: string): void;
478
+ togglePanel(id: string): void;
479
+ /**
480
+ * Puts a panel away. The host is told, since it is the one that decides what it offers; a host
481
+ * that keeps offering it gets it back from the pill, with no round trip.
482
+ */
483
+ closePanel(id: string): void;
484
+ inspectorCloseLabel: string;
485
+ libraryVisible: boolean;
486
+ /**
487
+ * Whether the area shows the player. A host with views of its own shows it only while watching, and gives the whole
488
+ * area to the view being browsed the rest of the time; the player then fills that area rather than sitting in it.
489
+ */
490
+ playerView: boolean;
491
+ /**
492
+ * Whether liking, sharing and keeping a video for later sit in the player's own controls. A host whose player has
493
+ * the screen to itself needs them there: there is no page around it to put them on.
494
+ */
495
+ watchActionsInPlayer: boolean;
496
+ /**
497
+ * Whether the area leads with the video being watched — its title, its buttons, its details. A home view turns it
498
+ * off so it opens on where videos come from, rather than on the last one that was played.
499
+ */
500
+ showActiveMedia: boolean;
501
+ closeLabel: string;
502
+ queueVisible: boolean;
503
+ /**
504
+ * What the side panel lists: the queue, or the videos of `sections` (a library, a collection, a list) in full. With
505
+ * `sections`, the library grid under the player gives way to the panel while the panel is beside it; on phones,
506
+ * where the panel is a sheet, the grid stays and shows them all.
507
+ */
508
+ sidePanelContent: 'queue' | 'sections';
509
+ /** "Back to Lists": shown above the side panel's title while something is open inside it; null at the top. */
510
+ sideBackLabel: string | null;
511
+ searchTerm: string;
512
+ runtimeMode: VideoUiRuntimeMode;
513
+ /** False when the host offers the online/offline choice elsewhere (its settings). */
514
+ runtimeModeInHeader: boolean;
515
+ set activeViewMode(value: VideoUiViewMode);
516
+ get activeViewMode(): VideoUiViewMode;
517
+ libraryTitle: string;
518
+ nowPlayingLabel: string;
519
+ fullscreenHintLabel: string;
520
+ fullscreenLabel: string;
521
+ readyStatusLabel: string;
522
+ playingStatusLabel: string;
523
+ pausedStatusLabel: string;
524
+ bufferingStatusLabel: string;
525
+ loadingStatusLabel: string;
526
+ endedStatusLabel: string;
527
+ errorStatusLabel: string;
528
+ miniPlayerVisible: boolean;
529
+ miniPlayerMeta: string;
530
+ miniPlayerPlayLabel: string;
531
+ miniPlayerPauseLabel: string;
532
+ miniPlayerFocusLabel: string;
533
+ miniPlayerCloseLabel: string;
534
+ miniPlayerRestoreLabel: string;
535
+ outputVolume: number;
536
+ outputVolumeLabel: string;
537
+ outputMuteLabel: string;
538
+ outputUnmuteLabel: string;
539
+ ended: EventEmitter<void>;
540
+ videoSize: EventEmitter<{
541
+ width: number;
542
+ height: number;
543
+ }>;
544
+ progress: EventEmitter<SmartPlayerProgress>;
545
+ /** The window's size (desktop): the whole app or a floating mini player ('bar' is an audio layout, shown in full). */
546
+ compactMode: SmartCompactMode;
547
+ /** True where the host can resize its window: shows the button that makes it a mini player. */
548
+ compactModes: boolean;
549
+ /**
550
+ * Down the side, across the top, or away. A narrow window still takes the row whatever is
551
+ * chosen — there is no side to put it down — but away stays away.
552
+ */
553
+ menuLayout: VideoUiMenuLayout;
554
+ compactMiniLabel: string;
555
+ compactRestoreLabel: string;
556
+ compactModeChange: EventEmitter<SmartCompactMode>;
557
+ /** "Show in Finder" for the video playing, where the host can show its file (desktop); empty hides the button. */
558
+ revealFileLabel: string;
559
+ revealFile: EventEmitter<void>;
560
+ prev: EventEmitter<void>;
561
+ next: EventEmitter<void>;
562
+ toggleShuffle: EventEmitter<void>;
563
+ cycleRepeat: EventEmitter<void>;
564
+ cast: EventEmitter<void>;
565
+ /** A subtitle file the viewer chose was read (ok), or could not be. */
566
+ /** The Infos button: open the info panel on its last tab, or close it. */
567
+ infoToggle: EventEmitter<void>;
568
+ /** Back out of what the side panel shows: a server folder, a list, a search (see `sideBackLabel`). */
569
+ sideBack: EventEmitter<void>;
570
+ /** Leaving the player. Reaching it from the mini player left nothing behind to go back to. */
571
+ playerBack: EventEmitter<void>;
572
+ /** The viewer's answer to `resumeOffer`: keep going from where it was, or start over (the player went back to 0). */
573
+ resumeChoice: EventEmitter<"resume" | "restart">;
574
+ infoTabSelect: EventEmitter<string>;
575
+ subtitlesLoaded: EventEmitter<{
576
+ label: string;
577
+ ok: boolean;
578
+ error?: string;
579
+ }>;
580
+ selectContinueWatching: EventEmitter<string>;
581
+ selectSectionItem: EventEmitter<{
582
+ sectionId: string;
583
+ itemId: string;
584
+ }>;
585
+ selectDetailEpisode: EventEmitter<string>;
586
+ chapterSeek: EventEmitter<{
587
+ id: string;
588
+ timeSec: number;
589
+ }>;
590
+ navSelect: EventEmitter<string>;
591
+ toolSelect: EventEmitter<string>;
592
+ detailAction: EventEmitter<string>;
593
+ inspectorAction: EventEmitter<string>;
594
+ settingChange: EventEmitter<SmartSettingChange>;
595
+ settingAction: EventEmitter<SmartSettingAction>;
596
+ closeInspector: EventEmitter<void>;
597
+ /** Which panel the viewer put away, when the host offers several. */
598
+ panelClosed: EventEmitter<string>;
599
+ openSource: EventEmitter<void>;
600
+ toggleLibrary: EventEmitter<void>;
601
+ /** A step of the trail the viewer asked to go back to. */
602
+ trailStep: EventEmitter<string>;
603
+ toggleQueue: EventEmitter<void>;
604
+ toggleCinema: EventEmitter<void>;
605
+ miniPlayerFocus: EventEmitter<void>;
606
+ miniPlayerClose: EventEmitter<void>;
607
+ miniPlayerRestore: EventEmitter<void>;
608
+ queueAddActive: EventEmitter<void>;
609
+ connectServer: EventEmitter<{
610
+ kind?: string;
611
+ address: string;
612
+ username: string;
613
+ password: string;
614
+ }>;
615
+ /** Looks for servers of this kind on the local network. */
616
+ discoverServers: EventEmitter<string>;
617
+ connectDiscoveredServer: EventEmitter<string>;
618
+ selectServer: EventEmitter<string>;
619
+ disconnectServer: EventEmitter<string>;
620
+ createPlaylist: EventEmitter<string>;
621
+ selectPlaylist: EventEmitter<string>;
622
+ /** Files the panel's target item in the given list. */
623
+ addToPlaylist: EventEmitter<string>;
624
+ /** Takes the panel's target out of the given list. */
625
+ removeFromPlaylist: EventEmitter<string>;
626
+ renamePlaylist: EventEmitter<{
627
+ id: string;
628
+ name: string;
629
+ }>;
630
+ deletePlaylist: EventEmitter<string>;
631
+ watchLaterToggle: EventEmitter<void>;
632
+ queueMoveUp: EventEmitter<string>;
633
+ queueMoveDown: EventEmitter<string>;
634
+ queueRemove: EventEmitter<string>;
635
+ searchFilterChange: EventEmitter<string>;
636
+ searchResultQueueAdd: EventEmitter<string>;
637
+ searchResultWatchLater: EventEmitter<string>;
638
+ searchResultFavorite: EventEmitter<string>;
639
+ searchResultDownload: EventEmitter<string>;
640
+ search: EventEmitter<void>;
641
+ searchTermChange: EventEmitter<string>;
642
+ viewModeChange: EventEmitter<VideoUiViewMode>;
643
+ runtimeModeChange: EventEmitter<VideoUiRuntimeMode>;
644
+ primaryPlay: EventEmitter<void>;
645
+ primaryPlaybackToggle: EventEmitter<VideoUiPlaybackIntent>;
646
+ playerStateChange: EventEmitter<PlayerState>;
647
+ sourceFileChange: EventEmitter<File>;
648
+ addFolder: EventEmitter<void>;
649
+ languageChange: EventEmitter<string>;
650
+ outputVolumeChange: EventEmitter<number>;
651
+ outputMuteToggle: EventEmitter<void>;
652
+ readonly waveformBars: number[];
653
+ searchOpen: boolean;
654
+ railExpanded: boolean;
655
+ fileDragActive: boolean;
656
+ playerState: PlayerState | null;
657
+ private posterPreviewDismissed;
658
+ private viewMode;
659
+ private readonly cdr;
660
+ private readonly host;
661
+ private fileDragDepth;
662
+ private cardMenuBox?;
663
+ private smartPlayer?;
664
+ private readonly document;
665
+ private contentScroll?;
666
+ private queueListEl?;
667
+ private queueFollowed;
668
+ private videoFileInput?;
669
+ set queuePanel(panel: ElementRef<HTMLElement> | undefined);
670
+ private isSheetLayout;
671
+ queueSheetOpen: boolean;
672
+ get queuePanelActive(): boolean;
673
+ onQueueAction(): void;
674
+ closeQueueSheet(): void;
675
+ /** True when the detail block only repeats the title bar above it, as it does for the playing media. */
676
+ get detailEchoesHeader(): boolean;
677
+ get isPlaying(): boolean;
678
+ get isLiveSource(): boolean;
679
+ get cinemaButtonLabel(): string;
680
+ get miniPlayerPlaybackLabel(): string;
681
+ get isOfflineMode(): boolean;
682
+ get showPosterPreview(): boolean;
683
+ get sourceTypeLabel(): string;
684
+ get playbackStateLabel(): string;
685
+ get primarySourceLabel(): string;
686
+ get primarySourceShortLabel(): string;
687
+ get primarySourceIcon(): SmartPlayerIconName;
688
+ get emptyKicker(): string;
689
+ get emptyTitle(): string;
690
+ get emptyBody(): string;
691
+ get libraryMeta(): string;
692
+ get railMeta(): string;
693
+ get displayHeroTitle(): string;
694
+ get displayHeroSubtitle(): string;
695
+ get displayHeroMeta(): string;
696
+ get displayHeroArtwork(): string;
697
+ get timelineMarkers(): NgxspTimelineMarker[];
698
+ get timelineDurationSec(): number | null;
699
+ get hasSearchQuery(): boolean;
700
+ get searchResultItems(): VideoUiCardRef[];
701
+ private readonly expandedSections;
702
+ isSectionExpanded(id: string): boolean;
703
+ /** Shows the rest of a shelf, or puts it back to a row. */
704
+ toggleSection(id: string): void;
705
+ /**
706
+ * The view as a stack of titled shelves — one per section, empty ones left out, each holding a
707
+ * row until it is asked for the rest. A view with nothing to shelve keeps what it showed before,
708
+ * under no heading of its own.
709
+ */
710
+ get librarySections(): Array<{
711
+ id: string;
712
+ title: string;
713
+ count: number;
714
+ titled: boolean;
715
+ hidden: boolean;
716
+ cards: VideoUiCardRef[];
717
+ }>;
718
+ get featuredItems(): VideoUiCardRef[];
719
+ get railItems(): VideoUiCardRef[];
720
+ /** The sections listed by the side panel when it shows them (`sidePanelContent`). */
721
+ get sideSectionGroups(): Array<{
722
+ id: string;
723
+ title: string;
724
+ cards: VideoUiCardRef[];
725
+ }>;
726
+ /** How many videos the side panel lists. */
727
+ get sidePanelCount(): number;
728
+ get displayQueueItems(): VideoUiCardRef[];
729
+ get hasManagedQueue(): boolean;
730
+ get isLibraryFocused(): boolean;
731
+ queueItemActionLabel(action: keyof VideoUiQueueActionLabels, card: VideoUiCardRef): string;
732
+ searchResultActionLabel(action: keyof VideoUiSearchActionLabels, card: VideoUiCardRef): string;
733
+ canMoveQueueItem(card: VideoUiCardRef, direction: 'up' | 'down'): boolean;
734
+ toggleRail(): void;
735
+ selectNav(item: VideoUiNavItem): void;
736
+ selectViewMode(mode: VideoUiViewMode): void;
737
+ selectSearchFilter(filter: VideoUiSearchFilter): void;
738
+ selectRuntimeMode(mode: VideoUiRuntimeMode): void;
739
+ onPrimarySourceAction(): void;
740
+ playlistDraftName: string;
741
+ playlistRenameDraft: string;
742
+ renamingPlaylistId: string | null;
743
+ serverKindDraft: string;
744
+ serverAddressDraft: string;
745
+ serverUsernameDraft: string;
746
+ serverPasswordDraft: string;
747
+ selectedServerKind(form: VideoUiServerForm): VideoUiServerKind | undefined;
748
+ onServerKindChange(event: Event): void;
749
+ onServerAddressInput(event: Event): void;
750
+ onServerUsernameInput(event: Event): void;
751
+ onServerPasswordInput(event: Event): void;
752
+ submitServer(event: Event): void;
753
+ onPlaylistDraftInput(event: Event): void;
754
+ submitCreatePlaylist(event: Event): void;
755
+ startRenamePlaylist(list: VideoUiPlaylistOption): void;
756
+ onPlaylistRenameInput(event: Event): void;
757
+ submitRenamePlaylist(event: Event): void;
758
+ cancelRenamePlaylist(): void;
759
+ selectCard(card: VideoUiCardRef): void;
760
+ selectMediaChapter(chapter: VideoUiMediaChapter): void;
761
+ private chapterTimeSec;
762
+ private timeLabelToSeconds;
763
+ isSyntheticSection(sectionId: string): boolean;
764
+ private get itemCount();
765
+ private get fallbackCards();
766
+ private get activeCard();
767
+ private toRefs;
768
+ toggleSearch(): void;
769
+ clearSearch(): void;
770
+ onSearchInput(event: Event): void;
771
+ togglePrimaryPlayback(): void;
772
+ toggleMiniPlayerPlayback(): void;
773
+ /**
774
+ * How far the area is scrolled. A host that moves between views reads it before leaving one, so coming back
775
+ * can put the viewer where they were rather than at the top of a list they had already walked down. On a
776
+ * narrow layout the page scrolls instead of the panel, so whichever one moved is the one reported.
777
+ */
778
+ contentScrollTop(): number;
779
+ /** Puts the area back where it was, or at the top with 0 on entering a view for the first time. */
780
+ setContentScrollTop(value: number): void;
781
+ /** Moves the playhead, for a host driven from outside the page: a lock screen scrubber, a remote, another device. */
782
+ seekTo(timeSec: number): void;
783
+ setOutputVolumePercent(value: number): void;
784
+ onOutputVolumeRatioChange(value: number): void;
785
+ openSourcePicker(): void;
786
+ onSourceFileInput(event: Event): void;
787
+ onFileDragEnter(event: DragEvent): void;
788
+ onFileDragOver(event: DragEvent): void;
789
+ onFileDragLeave(event: DragEvent): void;
790
+ onFileDrop(event: DragEvent): void;
791
+ onPlayerStateChange(state: PlayerState): void;
792
+ posterInitial(title: string): string;
793
+ mediaCardMeta(card: VideoUiMediaCard): string;
794
+ /** What a finger is changing right now, and where it stands. Null when nothing is being changed. */
795
+ protected touchAdjusting: {
796
+ kind: 'brightness' | 'volume';
797
+ value: number;
798
+ } | null;
799
+ private touchStart;
800
+ /** A drag is not a click: the one that follows it is swallowed rather than reaching a control. */
801
+ private swallowNextClick;
802
+ /** How far the picture has to be crossed to go from nothing to everything. */
803
+ private static readonly TOUCH_TRAVEL;
804
+ private static readonly TOUCH_THRESHOLD;
805
+ private static readonly MIN_BRIGHTNESS;
806
+ /**
807
+ * A gesture starts on the picture, never on something built to be pressed: a button, a slider,
808
+ * a menu. Those keep the events that belong to them.
809
+ */
810
+ protected onFramePointerDown(event: PointerEvent): void;
811
+ /**
812
+ * Nothing happens until the finger has travelled further down than across: a tap stays a tap,
813
+ * and a sideways drag is somebody else's gesture.
814
+ */
815
+ protected onFramePointerMove(event: PointerEvent): void;
816
+ protected onFramePointerUp(event: PointerEvent): void;
817
+ /**
818
+ * Le clic qui clôt un glissement mettrait sinon en pause la vidéo dont le glissement ne
819
+ * parlait pas. Posé ici plutôt que dans le gabarit : avaler un clic n'est pas une interaction,
820
+ * et en capture il est arrêté avant d'atteindre la moindre commande.
821
+ */
822
+ private swallowTheClickThatEndsADrag;
823
+ /** The card menu while it is open: which card, and where the gesture put it. */
824
+ protected cardMenu: {
825
+ card: VideoUiMediaCard;
826
+ x: number;
827
+ y: number;
828
+ } | null;
829
+ /**
830
+ * Opens a card's own menu where the gesture happened — a right click, or the button that
831
+ * appears on the card — and keeps it inside the window rather than off its edge.
832
+ */
833
+ protected openCardMenu(event: MouseEvent, card: VideoUiMediaCard): void;
834
+ protected closeCardMenu(): void;
835
+ protected chooseCardAction(action: VideoUiCardAction): void;
836
+ /** Whether the strip is waiting for an answer rather than reporting: both ways out have a name. */
837
+ get promptAsking(): boolean;
838
+ safeProgressPercent(value: number): number;
839
+ artVariant(card: VideoUiCardRef): string;
840
+ private normalizeOutputVolume;
841
+ private dragHasFiles;
842
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgxSmartPlayerVideoUiComponent, never>;
843
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgxSmartPlayerVideoUiComponent, "ngxsp-video-player-ui", never, { "config": { "alias": "config"; "required": false; }; "brandLogoSrc": { "alias": "brandLogoSrc"; "required": false; }; "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; }; "playRequest": { "alias": "playRequest"; "required": false; }; "canPrev": { "alias": "canPrev"; "required": false; }; "canNext": { "alias": "canNext"; "required": false; }; "previousLabel": { "alias": "previousLabel"; "required": false; }; "playerBackLabel": { "alias": "playerBackLabel"; "required": false; }; "nextLabel": { "alias": "nextLabel"; "required": false; }; "playLabel": { "alias": "playLabel"; "required": false; }; "pauseLabel": { "alias": "pauseLabel"; "required": false; }; "transportLabel": { "alias": "transportLabel"; "required": false; }; "cinemaMode": { "alias": "cinemaMode"; "required": false; }; "cinemaLabel": { "alias": "cinemaLabel"; "required": false; }; "cinemaActiveLabel": { "alias": "cinemaActiveLabel"; "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; }; "castEnabled": { "alias": "castEnabled"; "required": false; }; "castConnected": { "alias": "castConnected"; "required": false; }; "resumeOffer": { "alias": "resumeOffer"; "required": false; }; "infoTabs": { "alias": "infoTabs"; "required": false; }; "infoLabel": { "alias": "infoLabel"; "required": false; }; "infoPanel": { "alias": "infoPanel"; "required": false; }; "playerMenuLabels": { "alias": "playerMenuLabels"; "required": false; }; "heroEyebrow": { "alias": "heroEyebrow"; "required": false; }; "heroTitle": { "alias": "heroTitle"; "required": false; }; "heroSubtitle": { "alias": "heroSubtitle"; "required": false; }; "heroMeta": { "alias": "heroMeta"; "required": false; }; "heroArtworkUrl": { "alias": "heroArtworkUrl"; "required": false; }; "preferPosterPreview": { "alias": "preferPosterPreview"; "required": false; }; "runtimeModeLabel": { "alias": "runtimeModeLabel"; "required": false; }; "onlineLabel": { "alias": "onlineLabel"; "required": false; }; "offlineLabel": { "alias": "offlineLabel"; "required": false; }; "navigationLabel": { "alias": "navigationLabel"; "required": false; }; "menuLabel": { "alias": "menuLabel"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "searchLabel": { "alias": "searchLabel"; "required": false; }; "searchResultsTitle": { "alias": "searchResultsTitle"; "required": false; }; "searchResultsSummary": { "alias": "searchResultsSummary"; "required": false; }; "searchResultsEmptyTitle": { "alias": "searchResultsEmptyTitle"; "required": false; }; "searchResultsEmptyBody": { "alias": "searchResultsEmptyBody"; "required": false; }; "searchClearLabel": { "alias": "searchClearLabel"; "required": false; }; "searchFilterLabel": { "alias": "searchFilterLabel"; "required": false; }; "searchFilters": { "alias": "searchFilters"; "required": false; }; "searchActionLabels": { "alias": "searchActionLabels"; "required": false; }; "notificationsLabel": { "alias": "notificationsLabel"; "required": false; }; "settingsLabel": { "alias": "settingsLabel"; "required": false; }; "sourceChangeLabel": { "alias": "sourceChangeLabel"; "required": false; }; "sourceChangeTitle": { "alias": "sourceChangeTitle"; "required": false; }; "sourceDropTitle": { "alias": "sourceDropTitle"; "required": false; }; "sourceDropHint": { "alias": "sourceDropHint"; "required": false; }; "sourceChangeAccept": { "alias": "sourceChangeAccept"; "required": false; }; "folderImportLabel": { "alias": "folderImportLabel"; "required": false; }; "libraryStatus": { "alias": "libraryStatus"; "required": false; }; "touchAdjust": { "alias": "touchAdjust"; "required": false; }; "brightness": { "alias": "brightness"; "required": false; }; "cardActionsLabel": { "alias": "cardActionsLabel"; "required": false; }; "cardMenuCloseLabel": { "alias": "cardMenuCloseLabel"; "required": false; }; "promptBar": { "alias": "promptBar"; "required": false; }; "libraryBusy": { "alias": "libraryBusy"; "required": false; }; "sourceTypeLocalLabel": { "alias": "sourceTypeLocalLabel"; "required": false; }; "sourceTypeStreamLabel": { "alias": "sourceTypeStreamLabel"; "required": false; }; "languageLabel": { "alias": "languageLabel"; "required": false; }; "activeLanguage": { "alias": "activeLanguage"; "required": false; }; "languageOptions": { "alias": "languageOptions"; "required": false; }; "statusMessage": { "alias": "statusMessage"; "required": false; }; "statusKind": { "alias": "statusKind"; "required": false; }; "likeLabel": { "alias": "likeLabel"; "required": false; }; "likeActive": { "alias": "likeActive"; "required": false; }; "dislikeLabel": { "alias": "dislikeLabel"; "required": false; }; "shareLabel": { "alias": "shareLabel"; "required": false; }; "watchLaterLabel": { "alias": "watchLaterLabel"; "required": false; }; "watchLaterActive": { "alias": "watchLaterActive"; "required": false; }; "queueActionLabel": { "alias": "queueActionLabel"; "required": false; }; "queueShortLabel": { "alias": "queueShortLabel"; "required": false; }; "queueAddActiveLabel": { "alias": "queueAddActiveLabel"; "required": false; }; "queueAddActiveShortLabel": { "alias": "queueAddActiveShortLabel"; "required": false; }; "queueActionLabels": { "alias": "queueActionLabels"; "required": false; }; "moreLabel": { "alias": "moreLabel"; "required": false; }; "moreShortLabel": { "alias": "moreShortLabel"; "required": false; }; "browseLibraryLabel": { "alias": "browseLibraryLabel"; "required": false; }; "trail": { "alias": "trail"; "required": false; }; "trailLabel": { "alias": "trailLabel"; "required": false; }; "showAllLabel": { "alias": "showAllLabel"; "required": false; }; "showLessLabel": { "alias": "showLessLabel"; "required": false; }; "emptyCatalogLabel": { "alias": "emptyCatalogLabel"; "required": false; }; "continueWatchingMeta": { "alias": "continueWatchingMeta"; "required": false; }; "continueWatching": { "alias": "continueWatching"; "required": false; }; "managedQueue": { "alias": "managedQueue"; "required": false; }; "upNextItems": { "alias": "upNextItems"; "required": false; }; "playlistPanel": { "alias": "playlistPanel"; "required": false; }; "serverForm": { "alias": "serverForm"; "required": false; }; "showResumeProgress": { "alias": "showResumeProgress"; "required": false; }; "mediaDetail": { "alias": "mediaDetail"; "required": false; }; "sidePanelTitle": { "alias": "sidePanelTitle"; "required": false; }; "sidePanelMeta": { "alias": "sidePanelMeta"; "required": false; }; "sections": { "alias": "sections"; "required": false; }; "navItems": { "alias": "navItems"; "required": false; }; "toolCards": { "alias": "toolCards"; "required": false; }; "inspectorPanel": { "alias": "inspectorPanel"; "required": false; }; "inspectorPanels": { "alias": "inspectorPanels"; "required": false; }; "inspectorCloseLabel": { "alias": "inspectorCloseLabel"; "required": false; }; "libraryVisible": { "alias": "libraryVisible"; "required": false; }; "playerView": { "alias": "playerView"; "required": false; }; "watchActionsInPlayer": { "alias": "watchActionsInPlayer"; "required": false; }; "showActiveMedia": { "alias": "showActiveMedia"; "required": false; }; "closeLabel": { "alias": "closeLabel"; "required": false; }; "queueVisible": { "alias": "queueVisible"; "required": false; }; "sidePanelContent": { "alias": "sidePanelContent"; "required": false; }; "sideBackLabel": { "alias": "sideBackLabel"; "required": false; }; "searchTerm": { "alias": "searchTerm"; "required": false; }; "runtimeMode": { "alias": "runtimeMode"; "required": false; }; "runtimeModeInHeader": { "alias": "runtimeModeInHeader"; "required": false; }; "activeViewMode": { "alias": "activeViewMode"; "required": false; }; "libraryTitle": { "alias": "libraryTitle"; "required": false; }; "nowPlayingLabel": { "alias": "nowPlayingLabel"; "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; }; "miniPlayerVisible": { "alias": "miniPlayerVisible"; "required": false; }; "miniPlayerMeta": { "alias": "miniPlayerMeta"; "required": false; }; "miniPlayerPlayLabel": { "alias": "miniPlayerPlayLabel"; "required": false; }; "miniPlayerPauseLabel": { "alias": "miniPlayerPauseLabel"; "required": false; }; "miniPlayerFocusLabel": { "alias": "miniPlayerFocusLabel"; "required": false; }; "miniPlayerCloseLabel": { "alias": "miniPlayerCloseLabel"; "required": false; }; "miniPlayerRestoreLabel": { "alias": "miniPlayerRestoreLabel"; "required": false; }; "outputVolume": { "alias": "outputVolume"; "required": false; }; "outputVolumeLabel": { "alias": "outputVolumeLabel"; "required": false; }; "outputMuteLabel": { "alias": "outputMuteLabel"; "required": false; }; "outputUnmuteLabel": { "alias": "outputUnmuteLabel"; "required": false; }; "compactMode": { "alias": "compactMode"; "required": false; }; "compactModes": { "alias": "compactModes"; "required": false; }; "menuLayout": { "alias": "menuLayout"; "required": false; }; "compactMiniLabel": { "alias": "compactMiniLabel"; "required": false; }; "compactRestoreLabel": { "alias": "compactRestoreLabel"; "required": false; }; "revealFileLabel": { "alias": "revealFileLabel"; "required": false; }; }, { "brightnessChange": "brightnessChange"; "cardAction": "cardAction"; "promptAnswer": "promptAnswer"; "ended": "ended"; "videoSize": "videoSize"; "progress": "progress"; "compactModeChange": "compactModeChange"; "revealFile": "revealFile"; "prev": "prev"; "next": "next"; "toggleShuffle": "toggleShuffle"; "cycleRepeat": "cycleRepeat"; "cast": "cast"; "infoToggle": "infoToggle"; "sideBack": "sideBack"; "playerBack": "playerBack"; "resumeChoice": "resumeChoice"; "infoTabSelect": "infoTabSelect"; "subtitlesLoaded": "subtitlesLoaded"; "selectContinueWatching": "selectContinueWatching"; "selectSectionItem": "selectSectionItem"; "selectDetailEpisode": "selectDetailEpisode"; "chapterSeek": "chapterSeek"; "navSelect": "navSelect"; "toolSelect": "toolSelect"; "detailAction": "detailAction"; "inspectorAction": "inspectorAction"; "settingChange": "settingChange"; "settingAction": "settingAction"; "closeInspector": "closeInspector"; "panelClosed": "panelClosed"; "openSource": "openSource"; "toggleLibrary": "toggleLibrary"; "trailStep": "trailStep"; "toggleQueue": "toggleQueue"; "toggleCinema": "toggleCinema"; "miniPlayerFocus": "miniPlayerFocus"; "miniPlayerClose": "miniPlayerClose"; "miniPlayerRestore": "miniPlayerRestore"; "queueAddActive": "queueAddActive"; "connectServer": "connectServer"; "discoverServers": "discoverServers"; "connectDiscoveredServer": "connectDiscoveredServer"; "selectServer": "selectServer"; "disconnectServer": "disconnectServer"; "createPlaylist": "createPlaylist"; "selectPlaylist": "selectPlaylist"; "addToPlaylist": "addToPlaylist"; "removeFromPlaylist": "removeFromPlaylist"; "renamePlaylist": "renamePlaylist"; "deletePlaylist": "deletePlaylist"; "watchLaterToggle": "watchLaterToggle"; "queueMoveUp": "queueMoveUp"; "queueMoveDown": "queueMoveDown"; "queueRemove": "queueRemove"; "searchFilterChange": "searchFilterChange"; "searchResultQueueAdd": "searchResultQueueAdd"; "searchResultWatchLater": "searchResultWatchLater"; "searchResultFavorite": "searchResultFavorite"; "searchResultDownload": "searchResultDownload"; "search": "search"; "searchTermChange": "searchTermChange"; "viewModeChange": "viewModeChange"; "runtimeModeChange": "runtimeModeChange"; "primaryPlay": "primaryPlay"; "primaryPlaybackToggle": "primaryPlaybackToggle"; "playerStateChange": "playerStateChange"; "sourceFileChange": "sourceFileChange"; "addFolder": "addFolder"; "languageChange": "languageChange"; "outputVolumeChange": "outputVolumeChange"; "outputMuteToggle": "outputMuteToggle"; }, never, never, true, never>;
844
+ }
845
+
846
+ declare class NgxSmartPlayerVideoUiModule {
847
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgxSmartPlayerVideoUiModule, never>;
848
+ static ɵmod: i0.ɵɵNgModuleDeclaration<NgxSmartPlayerVideoUiModule, never, [typeof NgxSmartPlayerVideoUiComponent], [typeof NgxSmartPlayerVideoUiComponent]>;
849
+ static ɵinj: i0.ɵɵInjectorDeclaration<NgxSmartPlayerVideoUiModule>;
850
+ }
851
+
852
+ export { NgxSmartPlayerVideoUiComponent, NgxSmartPlayerVideoUiModule };
853
+ export type { VideoUiCardAction, VideoUiInfoTab, VideoUiInspectorAction, VideoUiInspectorItem, VideoUiInspectorMetric, VideoUiInspectorPanel, VideoUiInspectorTone, VideoUiLanguageOption, VideoUiMediaCard, VideoUiMediaChapter, VideoUiMediaChecklistItem, VideoUiMediaDetail, VideoUiMediaDetailAction, VideoUiMediaDetailEpisode, VideoUiMediaKind, VideoUiMediaWorkspaceTone, VideoUiMenuLayout, VideoUiNavItem, VideoUiPlaybackIntent, VideoUiPlaylistOption, VideoUiPlaylistPanel, VideoUiPromptBar, VideoUiQueueActionLabels, VideoUiResumeOffer, VideoUiRuntimeMode, VideoUiSearchActionLabels, VideoUiSearchFilter, VideoUiSection, VideoUiServerDiscovery, VideoUiServerForm, VideoUiServerKind, VideoUiStatusKind, VideoUiToolCard, VideoUiToolTone, VideoUiTrailStep, VideoUiViewMode };