ez-vid-ang 22.0.0 → 22.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ez-vid-ang.mjs +326 -130
- package/fesm2022/ez-vid-ang.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ez-vid-ang.d.ts +101 -11
package/fesm2022/ez-vid-ang.mjs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, signal, Injectable, inject, input, ChangeDetectionStrategy, Component, output, computed, Pipe, ElementRef, NgZone, Renderer2, viewChild, effect, Directive, SecurityContext } from '@angular/core';
|
|
2
|
+
import { EventEmitter, signal, Injectable, inject, input, ChangeDetectionStrategy, Component, output, computed, Pipe, ElementRef, NgZone, Renderer2, viewChild, effect, Directive, SecurityContext, DestroyRef } from '@angular/core';
|
|
3
3
|
import { BehaviorSubject, Subject, fromEvent, throttleTime, merge, takeUntil } from 'rxjs';
|
|
4
4
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
5
|
+
import { DOCUMENT } from '@angular/common';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Enum of all possible playback states the Eva player can be in.
|
|
@@ -48,6 +49,7 @@ var EvaVideoEvent;
|
|
|
48
49
|
EvaVideoEvent["STALLED"] = "stalled";
|
|
49
50
|
EvaVideoEvent["SUSPEND"] = "suspend";
|
|
50
51
|
EvaVideoEvent["TIME_UPDATE"] = "timeupdate";
|
|
52
|
+
EvaVideoEvent["DOUBLE_CLICK"] = "dblclick";
|
|
51
53
|
EvaVideoEvent["VOLUME_CHANGE"] = "volumechange";
|
|
52
54
|
EvaVideoEvent["WAITING"] = "waiting";
|
|
53
55
|
EvaVideoEvent["WAITING_FOR_KEY"] = "waitingforkey";
|
|
@@ -104,7 +106,7 @@ class EvaApi {
|
|
|
104
106
|
*
|
|
105
107
|
* **Important:** Do not access this before `isPlayerReady` is `true`.
|
|
106
108
|
*/
|
|
107
|
-
assignedVideoElement;
|
|
109
|
+
assignedVideoElement = null;
|
|
108
110
|
/**
|
|
109
111
|
* Emits this `EvaApi` instance when the player is fully initialized and the
|
|
110
112
|
* video element has been assigned. Components that need to defer setup until
|
|
@@ -348,6 +350,29 @@ class EvaApi {
|
|
|
348
350
|
this.assignedVideoElement.currentTime = newTime;
|
|
349
351
|
this.time.update(a => ({ ...a, current: newTime, remaining: a.total - newTime }));
|
|
350
352
|
}
|
|
353
|
+
/**
|
|
354
|
+
* Jumps to a percentage of total duration based on a digit key.
|
|
355
|
+
* `"0"` seeks to 0%, `"5"` to 50%, `"9"` to 90%, etc.
|
|
356
|
+
* Ignored for live streams (duration is `Infinity`).
|
|
357
|
+
* Updates `time` signal immediately for responsive UI feedback.
|
|
358
|
+
*
|
|
359
|
+
* @param key - A single digit character (`"0"`–`"9"`).
|
|
360
|
+
*/
|
|
361
|
+
jumpToVideoPercentage(key) {
|
|
362
|
+
if (!this.validateVideoAndPlayerBeforeAction()) {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
if (this.isLive()) {
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
const digit = parseInt(key, 10);
|
|
369
|
+
if (isNaN(digit) || digit < 0 || digit > 9) {
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
const newTime = (digit / 10) * this.time().total;
|
|
373
|
+
this.assignedVideoElement.currentTime = newTime;
|
|
374
|
+
this.time.update(a => ({ ...a, current: newTime, remaining: a.total - newTime }));
|
|
375
|
+
}
|
|
351
376
|
/**
|
|
352
377
|
* Sets the video playback rate.
|
|
353
378
|
* Called from `EvaPlaybackSpeed` when the user selects a speed.
|
|
@@ -910,10 +935,10 @@ class EvaApi {
|
|
|
910
935
|
}
|
|
911
936
|
return parsed;
|
|
912
937
|
}
|
|
913
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
914
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
938
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaApi, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
939
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaApi });
|
|
915
940
|
}
|
|
916
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
941
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaApi, decorators: [{
|
|
917
942
|
type: Injectable
|
|
918
943
|
}] });
|
|
919
944
|
|
|
@@ -947,10 +972,10 @@ class EvaBuffering {
|
|
|
947
972
|
*/
|
|
948
973
|
defaultSpinner = input(true, /* @ts-ignore */
|
|
949
974
|
...(ngDevMode ? [{ debugName: "defaultSpinner" }] : /* istanbul ignore next */ []));
|
|
950
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
951
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
975
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaBuffering, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
976
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaBuffering, isStandalone: true, selector: "eva-buffering", inputs: { defaultSpinner: { classPropertyName: "defaultSpinner", publicName: "defaultSpinner", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.eva-display-buffering": "evaAPI.isBuffering()" } }, ngImport: i0, template: "@if(defaultSpinner()) {\n<div class=\"eva-loader-meteor\"></div>\n}\n@else {\n<ng-content></ng-content>\n}", styles: [":host{display:flex;align-items:center;justify-content:center;width:100%;height:100%;position:absolute;top:0;left:0;transition:visibility var(--eva-transition-duration) linear,opacity var(--eva-transition-duration) linear;background-color:var(--eva-buffering-background-color);z-index:302;visibility:hidden;opacity:0}:host(.eva-display-buffering){visibility:visible!important;opacity:1!important}.eva-loader-meteor{width:var(--eva-buffering-default-spinner-size);height:var(--eva-buffering-default-spinner-size);border-radius:50%;display:inline-block;border-top:3px solid #fff;border-right:3px solid transparent;box-sizing:border-box;animation:eva-loader-meteor-rotation var(--eva-buffering-spinner-animation-speed) linear infinite}@keyframes eva-loader-meteor-rotation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
952
977
|
}
|
|
953
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
978
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaBuffering, decorators: [{
|
|
954
979
|
type: Component,
|
|
955
980
|
args: [{ selector: 'eva-buffering', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
956
981
|
"[class.eva-display-buffering]": "evaAPI.isBuffering()"
|
|
@@ -1253,10 +1278,10 @@ class EvaActiveChapter {
|
|
|
1253
1278
|
this.activeChapterClicked();
|
|
1254
1279
|
}
|
|
1255
1280
|
}
|
|
1256
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
1257
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
1281
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaActiveChapter, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1282
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaActiveChapter, isStandalone: true, selector: "eva-active-chapter", inputs: { evaAria: { classPropertyName: "evaAria", publicName: "evaAria", isSignal: true, isRequired: false, transformFunction: null }, evaCustomIcon: { classPropertyName: "evaCustomIcon", publicName: "evaCustomIcon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { evaChapterClicked: "evaChapterClicked" }, host: { attributes: { "tabindex": "0", "role": "button" }, listeners: { "click": "activeChapterClicked()", "keydown": "activeChapterClickedKeyboard($event)" }, properties: { "attr.aria-label": "evaAria().ariaLabel" } }, ngImport: i0, template: "@if(activeChapter()){\n<span>{{activeChapter()!.title ? activeChapter()!.title : \"\"}}</span>\n\n@if(evaCustomIcon()){\n<ng-content />\n}\n@else {\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"var(--eva-active-chapter-icon-color)\"\n\tviewBox=\"0 0 16 16\">\n\t<path fill-rule=\"evenodd\"\n\t\td=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708\" />\n</svg>\n}\n}", styles: [":host{position:relative;display:flex;justify-content:space-between;align-items:center;height:var(--eva-control-element-height);min-width:var(--eva-active-chapter-min-width);width:var(--eva-active-chapter-width);max-width:var(--eva-active-chapter-max-width);cursor:pointer;color:var(--eva-icon-color);font-family:var(--eva-font-family);outline:none;user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;padding:var(--eva-active-chapter-padding)}:host:hover{background-color:var(--eva-active-chapter-hover-background);border-radius:4px}:host>span{padding-right:8px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1258
1283
|
}
|
|
1259
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
1284
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaActiveChapter, decorators: [{
|
|
1260
1285
|
type: Component,
|
|
1261
1286
|
args: [{ selector: 'eva-active-chapter', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
1262
1287
|
"tabindex": "0",
|
|
@@ -1337,10 +1362,10 @@ class EvaBackward {
|
|
|
1337
1362
|
this.backwardClicked();
|
|
1338
1363
|
}
|
|
1339
1364
|
}
|
|
1340
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
1341
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
1365
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaBackward, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1366
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaBackward, isStandalone: true, selector: "eva-backward", inputs: { evaAria: { classPropertyName: "evaAria", publicName: "evaAria", isSignal: true, isRequired: false, transformFunction: null }, evaCustomIcon: { classPropertyName: "evaCustomIcon", publicName: "evaCustomIcon", isSignal: true, isRequired: false, transformFunction: null }, evaBackwardSeconds: { classPropertyName: "evaBackwardSeconds", publicName: "evaBackwardSeconds", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0", "role": "button" }, listeners: { "click": "backwardClicked()", "keydown": "backwardClickedKeyboard($event)" }, properties: { "attr.aria-label": "evaAria().ariaLabel", "class.eva-icon": "!evaCustomIcon()", "class.eva-icon-replay_10": "!evaCustomIcon() && evaBackwardSeconds() === 10", "class.eva-icon-replay_30": "!evaCustomIcon() && evaBackwardSeconds() === 30" } }, ngImport: i0, template: "@if(evaCustomIcon()){\n<ng-content></ng-content>\n}", styles: [":host{display:flex;justify-content:center;align-items:center;height:var(--eva-control-element-height);width:50px;cursor:pointer;color:var(--eva-icon-color);user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}:host>img{pointer-events:none!important;-webkit-user-select:none!important;user-select:none!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1342
1367
|
}
|
|
1343
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
1368
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaBackward, decorators: [{
|
|
1344
1369
|
type: Component,
|
|
1345
1370
|
args: [{ selector: 'eva-backward', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
1346
1371
|
"tabindex": "0",
|
|
@@ -1385,10 +1410,10 @@ class EvaControlsDivider {
|
|
|
1385
1410
|
* - `ariaLabel` → `"Controls divider"`
|
|
1386
1411
|
*/
|
|
1387
1412
|
evaAria = input(transformEvaControlsDividerAria(undefined), { ...(ngDevMode ? { debugName: "evaAria" } : /* istanbul ignore next */ {}), transform: transformEvaControlsDividerAria });
|
|
1388
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
1389
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.
|
|
1413
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaControlsDivider, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1414
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: EvaControlsDivider, isStandalone: true, selector: "eva-controls-divider", inputs: { evaAria: { classPropertyName: "evaAria", publicName: "evaAria", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0", "role": "separator", "aria-orientation": "horizontal", "aria-valuemin": "0", "aria-valuemax": "100" }, properties: { "attr.aria-label": "evaAria().ariaLabel" } }, ngImport: i0, template: "", styles: [":host{display:flex;align-items:center;justify-content:center;height:var(--eva-scrub-bar-heights);flex-grow:1;flex-basis:0;margin:0;padding:0;border:0;user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1390
1415
|
}
|
|
1391
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
1416
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaControlsDivider, decorators: [{
|
|
1392
1417
|
type: Component,
|
|
1393
1418
|
args: [{ selector: 'eva-controls-divider', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
1394
1419
|
"tabindex": "0",
|
|
@@ -1482,6 +1507,41 @@ function validateTracks(tracks) {
|
|
|
1482
1507
|
});
|
|
1483
1508
|
return uniqueTracks;
|
|
1484
1509
|
}
|
|
1510
|
+
/** Returns a fully populated `EvaKeyboardShortcutsConfiguration` with all default key bindings. */
|
|
1511
|
+
function prepareDefaultKeyboardShortcutsConfiguration() {
|
|
1512
|
+
return {
|
|
1513
|
+
backwardSeconds: 10,
|
|
1514
|
+
forwardSeconds: 10,
|
|
1515
|
+
backwardsKeyOne: "J",
|
|
1516
|
+
forwardKeyOne: "L",
|
|
1517
|
+
backwardsKeyTwo: "ARROWLEFT",
|
|
1518
|
+
forwardKeyTwo: "ARROWRIGHT",
|
|
1519
|
+
muteKey: "M",
|
|
1520
|
+
fullscreen: "F",
|
|
1521
|
+
playPause: "SPACE",
|
|
1522
|
+
oneFrameBackward: ",",
|
|
1523
|
+
oneFrameForward: ".",
|
|
1524
|
+
};
|
|
1525
|
+
}
|
|
1526
|
+
/** Input transform that fills missing keys with defaults. `backwardSeconds` and `forwardSeconds` are clamped to a minimum of `1` (values `<= 0` fall back to `10`). Returns the full default config when `conf` is `null`/`undefined`. */
|
|
1527
|
+
function validateAndTransformEvaKeyboardShortcutsConfiguration(conf) {
|
|
1528
|
+
if (!conf) {
|
|
1529
|
+
return prepareDefaultKeyboardShortcutsConfiguration();
|
|
1530
|
+
}
|
|
1531
|
+
return {
|
|
1532
|
+
backwardSeconds: (conf.backwardSeconds && conf.backwardSeconds > 0) ? conf.backwardSeconds : 10,
|
|
1533
|
+
forwardSeconds: (conf.forwardSeconds && conf.forwardSeconds > 0) ? conf.forwardSeconds : 10,
|
|
1534
|
+
backwardsKeyOne: conf.backwardsKeyOne ?? "J",
|
|
1535
|
+
forwardKeyOne: conf.forwardKeyOne ?? "L",
|
|
1536
|
+
backwardsKeyTwo: conf.backwardsKeyTwo ?? "ARROWLEFT",
|
|
1537
|
+
forwardKeyTwo: conf.forwardKeyTwo ?? "ARROWRIGHT",
|
|
1538
|
+
muteKey: conf.muteKey ?? "M",
|
|
1539
|
+
fullscreen: conf.fullscreen ?? "F",
|
|
1540
|
+
playPause: conf.playPause ?? "SPACE",
|
|
1541
|
+
oneFrameBackward: conf.oneFrameBackward ?? ",",
|
|
1542
|
+
oneFrameForward: conf.oneFrameForward ?? ".",
|
|
1543
|
+
};
|
|
1544
|
+
}
|
|
1485
1545
|
|
|
1486
1546
|
/**
|
|
1487
1547
|
* Controls container component for the Eva video player.
|
|
@@ -1629,10 +1689,10 @@ class EvaControlsContainer {
|
|
|
1629
1689
|
this.evaAPI.componentsContainerVisibilityStateSubject.next(true);
|
|
1630
1690
|
}, this.evaAutohideTime());
|
|
1631
1691
|
}
|
|
1632
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
1633
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.
|
|
1692
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaControlsContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1693
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: EvaControlsContainer, isStandalone: true, selector: "eva-controls-container", inputs: { evaAutohide: { classPropertyName: "evaAutohide", publicName: "evaAutohide", isSignal: true, isRequired: false, transformFunction: null }, evaAutohideTime: { classPropertyName: "evaAutohideTime", publicName: "evaAutohideTime", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.hide": "hideControls()" } }, usesOnChanges: true, ngImport: i0, template: "<ng-content></ng-content>", styles: [":host{position:absolute;bottom:0;left:0;display:flex;align-items:center;column-gap:var(--eva-controls-container-controls-spacing);width:100%;height:var(--eva-control-element-height);z-index:302;background-color:var(--eva-controls-container-background-color);opacity:1;transition:bottom var(--eva-transition-duration) ease-in-out,opacity var(--eva-transition-duration) ease-in-out}:host(.hide){bottom:calc(-1 * var(--eva-control-element-height))!important;opacity:0!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1634
1694
|
}
|
|
1635
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
1695
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaControlsContainer, decorators: [{
|
|
1636
1696
|
type: Component,
|
|
1637
1697
|
args: [{ selector: 'eva-controls-container', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
1638
1698
|
"[class.hide]": "hideControls()"
|
|
@@ -1709,10 +1769,10 @@ class EvaForward {
|
|
|
1709
1769
|
this.forwardClicked();
|
|
1710
1770
|
}
|
|
1711
1771
|
}
|
|
1712
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
1713
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
1772
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaForward, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1773
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaForward, isStandalone: true, selector: "eva-forward", inputs: { evaAria: { classPropertyName: "evaAria", publicName: "evaAria", isSignal: true, isRequired: false, transformFunction: null }, evaCustomIcon: { classPropertyName: "evaCustomIcon", publicName: "evaCustomIcon", isSignal: true, isRequired: false, transformFunction: null }, evaForwardSeconds: { classPropertyName: "evaForwardSeconds", publicName: "evaForwardSeconds", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0", "role": "button" }, listeners: { "click": "forwardClicked()", "keydown": "forwardClickedKeyboard($event)" }, properties: { "attr.aria-label": "evaAria().ariaLabel", "class.eva-icon": "!evaCustomIcon()", "class.eva-icon-forward_10": "!evaCustomIcon() && evaForwardSeconds() === 10", "class.eva-icon-forward_30": "!evaCustomIcon() && evaForwardSeconds() === 30" } }, ngImport: i0, template: "@if(evaCustomIcon()){\n<ng-content></ng-content>\n}", styles: [":host{display:flex;justify-content:center;align-items:center;height:var(--eva-control-element-height);width:50px;cursor:pointer;color:var(--eva-icon-color);user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}:host>img{pointer-events:none!important;-webkit-user-select:none!important;user-select:none!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1714
1774
|
}
|
|
1715
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
1775
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaForward, decorators: [{
|
|
1716
1776
|
type: Component,
|
|
1717
1777
|
args: [{ selector: 'eva-forward', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
1718
1778
|
"tabindex": "0",
|
|
@@ -1756,6 +1816,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
1756
1816
|
* await this.fullscreenService.toggleFullscreen(playerContainer, videoElement);
|
|
1757
1817
|
*/
|
|
1758
1818
|
class EvaFullscreenAPI {
|
|
1819
|
+
evaAPI = inject(EvaApi);
|
|
1759
1820
|
/** Internal subject tracking whether the player is currently in fullscreen mode. */
|
|
1760
1821
|
isFullscreenSubject = new BehaviorSubject(false);
|
|
1761
1822
|
/** Observable stream of fullscreen state changes. Subscribe to react to enter/exit events. */
|
|
@@ -1961,12 +2022,22 @@ class EvaFullscreenAPI {
|
|
|
1961
2022
|
* @param element - The player container element to make fullscreen.
|
|
1962
2023
|
* @param videoElement - The native `<video>` element, used as a fallback on mobile/iOS.
|
|
1963
2024
|
*/
|
|
1964
|
-
async toggleFullscreen(
|
|
2025
|
+
async toggleFullscreen() {
|
|
2026
|
+
const videoElement = this.evaAPI.assignedVideoElement;
|
|
2027
|
+
if (!videoElement) {
|
|
2028
|
+
console.warn('Video element not assigned');
|
|
2029
|
+
return;
|
|
2030
|
+
}
|
|
2031
|
+
const playerContainer = videoElement.closest('eva-player');
|
|
2032
|
+
if (!playerContainer) {
|
|
2033
|
+
console.warn('Player container not found');
|
|
2034
|
+
return;
|
|
2035
|
+
}
|
|
1965
2036
|
if (this.isFullscreen()) {
|
|
1966
2037
|
await this.exitFullscreen();
|
|
1967
2038
|
}
|
|
1968
2039
|
else {
|
|
1969
|
-
await this.enterFullscreen(
|
|
2040
|
+
await this.enterFullscreen(playerContainer, videoElement);
|
|
1970
2041
|
}
|
|
1971
2042
|
}
|
|
1972
2043
|
/**
|
|
@@ -1997,10 +2068,10 @@ class EvaFullscreenAPI {
|
|
|
1997
2068
|
this.fullscreenSub?.unsubscribe();
|
|
1998
2069
|
this.isFullscreenSubject.complete();
|
|
1999
2070
|
}
|
|
2000
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2001
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.
|
|
2071
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaFullscreenAPI, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2072
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaFullscreenAPI });
|
|
2002
2073
|
}
|
|
2003
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2074
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaFullscreenAPI, decorators: [{
|
|
2004
2075
|
type: Injectable
|
|
2005
2076
|
}], ctorParameters: () => [] });
|
|
2006
2077
|
|
|
@@ -2035,7 +2106,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
2035
2106
|
* </eva-fullscreen>
|
|
2036
2107
|
*/
|
|
2037
2108
|
class EvaFullscreen {
|
|
2038
|
-
evaAPI = inject(EvaApi);
|
|
2039
2109
|
fullscreenService = inject(EvaFullscreenAPI);
|
|
2040
2110
|
/**
|
|
2041
2111
|
* When `true`, suppresses all built-in icon classes (`eva-icon`, `eva-icon-fullscreen`)
|
|
@@ -2091,17 +2161,7 @@ class EvaFullscreen {
|
|
|
2091
2161
|
*/
|
|
2092
2162
|
async fullscreenClicked() {
|
|
2093
2163
|
try {
|
|
2094
|
-
|
|
2095
|
-
if (!videoElement) {
|
|
2096
|
-
console.warn('Video element not assigned');
|
|
2097
|
-
return;
|
|
2098
|
-
}
|
|
2099
|
-
const playerContainer = videoElement.closest('eva-player');
|
|
2100
|
-
if (!playerContainer) {
|
|
2101
|
-
console.warn('Player container not found');
|
|
2102
|
-
return;
|
|
2103
|
-
}
|
|
2104
|
-
await this.fullscreenService.toggleFullscreen(playerContainer, videoElement);
|
|
2164
|
+
await this.fullscreenService.toggleFullscreen();
|
|
2105
2165
|
}
|
|
2106
2166
|
catch (error) {
|
|
2107
2167
|
console.error('Failed to toggle fullscreen:', error);
|
|
@@ -2117,10 +2177,10 @@ class EvaFullscreen {
|
|
|
2117
2177
|
this.fullscreenClicked();
|
|
2118
2178
|
}
|
|
2119
2179
|
}
|
|
2120
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2121
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.
|
|
2180
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaFullscreen, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2181
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: EvaFullscreen, isStandalone: true, selector: "eva-fullscreen", inputs: { evaCustomIcon: { classPropertyName: "evaCustomIcon", publicName: "evaCustomIcon", isSignal: true, isRequired: false, transformFunction: null }, evaAria: { classPropertyName: "evaAria", publicName: "evaAria", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0", "role": "button" }, listeners: { "click": "fullscreenClicked()", "keydown": "fullscreenClickedKeyboard($event)" }, properties: { "attr.aria-label": "ariaLabel()", "class.eva-icon": "!evaCustomIcon()", "class.eva-icon-fullscreen": "!evaCustomIcon()" } }, ngImport: i0, template: "<ng-content></ng-content>", styles: [":host{display:flex;justify-content:center;height:var(--eva-control-element-height);width:50px;cursor:pointer;color:var(--eva-icon-color);user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}:host>img{pointer-events:none!important;-webkit-user-select:none!important;user-select:none!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2122
2182
|
}
|
|
2123
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2183
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaFullscreen, decorators: [{
|
|
2124
2184
|
type: Component,
|
|
2125
2185
|
args: [{ selector: 'eva-fullscreen', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
2126
2186
|
"tabindex": "0",
|
|
@@ -2266,10 +2326,10 @@ class EvaMute {
|
|
|
2266
2326
|
this.muteClicked();
|
|
2267
2327
|
}
|
|
2268
2328
|
}
|
|
2269
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2270
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
2329
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaMute, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2330
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaMute, isStandalone: true, selector: "eva-mute", inputs: { evaAria: { classPropertyName: "evaAria", publicName: "evaAria", isSignal: true, isRequired: false, transformFunction: null }, evaCustomIcon: { classPropertyName: "evaCustomIcon", publicName: "evaCustomIcon", isSignal: true, isRequired: false, transformFunction: null }, evaLowVolume: { classPropertyName: "evaLowVolume", publicName: "evaLowVolume", isSignal: true, isRequired: false, transformFunction: null }, evaMiddleVolume: { classPropertyName: "evaMiddleVolume", publicName: "evaMiddleVolume", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0", "role": "button" }, listeners: { "click": "muteClicked()", "keydown": "muteClickKeyboard($event)" }, properties: { "attr.aria-label": "muteAriaLabel()", "attr.aria-valuetext": "muteAriaValueText()", "class.eva-icon": "!evaCustomIcon()", "class.eva-icon-volume_up": "!evaCustomIcon() && evaIconVolumeUp()", "class.eva-icon-volume_middle": "!evaCustomIcon() && evaIconVolumeMiddle()", "class.eva-icon-volume_low": "!evaCustomIcon() && evaIconVolumeLow()", "class.eva-icon-volume_off": "!evaCustomIcon() && evaIconVolumeOff()" } }, ngImport: i0, template: "@if (evaCustomIcon() && evaIconVolumeOff()) {\n<ng-content select=\"[evaVolumeOff]\"></ng-content>\n}\n@if (evaCustomIcon() && evaIconVolumeLow()) {\n<ng-content select=\"[evaVolumeLow]\"></ng-content>\n}\n@if (evaCustomIcon() && evaIconVolumeMiddle()) {\n<ng-content select=\"[evaVolumeMiddle]\"></ng-content>\n}\n@if (evaCustomIcon() && evaIconVolumeUp()) {\n<ng-content select=\"[evaVolumeUp]\"></ng-content>\n}", styles: [":host{display:flex;justify-content:center;width:50px;height:var(--eva-control-element-height);color:var(--eva-icon-color);cursor:pointer;user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2271
2331
|
}
|
|
2272
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2332
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaMute, decorators: [{
|
|
2273
2333
|
type: Component,
|
|
2274
2334
|
args: [{ selector: 'eva-mute', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
2275
2335
|
"tabindex": "0",
|
|
@@ -2367,30 +2427,20 @@ class EvaOverlayPlay {
|
|
|
2367
2427
|
playClicked() {
|
|
2368
2428
|
this.evaAPI.playOrPauseVideo();
|
|
2369
2429
|
}
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
* Triggers play/pause on `Enter` or `Space` keypress.
|
|
2373
|
-
*/
|
|
2374
|
-
playClickedKeyboard(k) {
|
|
2375
|
-
if (k.key === 'Enter' || k.key === ' ') {
|
|
2376
|
-
k.preventDefault();
|
|
2377
|
-
this.playClicked();
|
|
2378
|
-
}
|
|
2379
|
-
}
|
|
2380
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: EvaOverlayPlay, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2381
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: EvaOverlayPlay, isStandalone: true, selector: "eva-overlay-play", inputs: { evaOvelayPlayAria: { classPropertyName: "evaOvelayPlayAria", publicName: "evaOvelayPlayAria", isSignal: true, isRequired: false, transformFunction: null }, evaCustomIcon: { classPropertyName: "evaCustomIcon", publicName: "evaCustomIcon", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0" }, listeners: { "click": "playClicked()", "keydown": "playClickedKeyboard($event)" }, properties: { "attr.aria-label": "ariaLabel()", "class.eva-icon": "!evaCustomIcon()", "class.eva-icon-play_arrow": "!evaCustomIcon() && evaIconPlay()", "class.eva-display-overlay-play": "evaIconPlay() && !evaAPI.isBuffering()" } }, ngImport: i0, template: "<ng-content></ng-content>", styles: [":host{display:flex;align-items:center;justify-content:center;width:100%;height:calc(100% - var(--eva-control-element-height));cursor:pointer;color:var(--eva-icon-color);user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;position:absolute;top:0;left:0;transition:visibility var(--eva-transition-duration) linear,background-color var(--eva-transition-duration) linear,opacity var(--eva-transition-duration) linear;background-color:#0000;z-index:301;visibility:hidden;opacity:0}:host(.eva-display-overlay-play){background-color:var(--eva-overlay-play-background-color)!important;opacity:1!important;visibility:visible!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2430
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaOverlayPlay, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2431
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.2", type: EvaOverlayPlay, isStandalone: true, selector: "eva-overlay-play", inputs: { evaOvelayPlayAria: { classPropertyName: "evaOvelayPlayAria", publicName: "evaOvelayPlayAria", isSignal: true, isRequired: false, transformFunction: null }, evaCustomIcon: { classPropertyName: "evaCustomIcon", publicName: "evaCustomIcon", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0", "role": "button" }, listeners: { "click": "playClicked()" }, properties: { "attr.aria-label": "ariaLabel()", "class.eva-icon": "!evaCustomIcon()", "class.eva-icon-play_arrow": "!evaCustomIcon() && evaIconPlay()", "class.eva-display-overlay-play": "evaIconPlay() && !evaAPI.isBuffering()" } }, ngImport: i0, template: "<ng-content></ng-content>", styles: [":host{display:flex;align-items:center;justify-content:center;width:100%;height:calc(100% - var(--eva-control-element-height));cursor:pointer;color:var(--eva-icon-color);user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;position:absolute;top:0;left:0;transition:visibility var(--eva-transition-duration) linear,background-color var(--eva-transition-duration) linear,opacity var(--eva-transition-duration) linear;background-color:#0000;z-index:301;opacity:0}:host(.eva-display-overlay-play){background-color:var(--eva-overlay-play-background-color)!important;opacity:1!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2382
2432
|
}
|
|
2383
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2433
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaOverlayPlay, decorators: [{
|
|
2384
2434
|
type: Component,
|
|
2385
2435
|
args: [{ selector: 'eva-overlay-play', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
2386
2436
|
"tabindex": "0",
|
|
2437
|
+
"role": "button",
|
|
2387
2438
|
"[attr.aria-label]": "ariaLabel()",
|
|
2388
2439
|
"[class.eva-icon]": "!evaCustomIcon()",
|
|
2389
2440
|
"[class.eva-icon-play_arrow]": "!evaCustomIcon() && evaIconPlay()",
|
|
2390
2441
|
"[class.eva-display-overlay-play]": "evaIconPlay() && !evaAPI.isBuffering()",
|
|
2391
|
-
"(click)": "playClicked()"
|
|
2392
|
-
|
|
2393
|
-
}, template: "<ng-content></ng-content>", styles: [":host{display:flex;align-items:center;justify-content:center;width:100%;height:calc(100% - var(--eva-control-element-height));cursor:pointer;color:var(--eva-icon-color);user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;position:absolute;top:0;left:0;transition:visibility var(--eva-transition-duration) linear,background-color var(--eva-transition-duration) linear,opacity var(--eva-transition-duration) linear;background-color:#0000;z-index:301;visibility:hidden;opacity:0}:host(.eva-display-overlay-play){background-color:var(--eva-overlay-play-background-color)!important;opacity:1!important;visibility:visible!important}\n"] }]
|
|
2442
|
+
"(click)": "playClicked()"
|
|
2443
|
+
}, template: "<ng-content></ng-content>", styles: [":host{display:flex;align-items:center;justify-content:center;width:100%;height:calc(100% - var(--eva-control-element-height));cursor:pointer;color:var(--eva-icon-color);user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;position:absolute;top:0;left:0;transition:visibility var(--eva-transition-duration) linear,background-color var(--eva-transition-duration) linear,opacity var(--eva-transition-duration) linear;background-color:#0000;z-index:301;opacity:0}:host(.eva-display-overlay-play){background-color:var(--eva-overlay-play-background-color)!important;opacity:1!important}\n"] }]
|
|
2394
2444
|
}], propDecorators: { evaOvelayPlayAria: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaOvelayPlayAria", required: false }] }], evaCustomIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaCustomIcon", required: false }] }] } });
|
|
2395
2445
|
|
|
2396
2446
|
/**
|
|
@@ -2511,10 +2561,10 @@ class EvaPictureInPicture {
|
|
|
2511
2561
|
this.pipClicked();
|
|
2512
2562
|
}
|
|
2513
2563
|
}
|
|
2514
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2515
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
2564
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaPictureInPicture, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2565
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaPictureInPicture, isStandalone: true, selector: "eva-picture-in-picture", inputs: { evaCustomIcon: { classPropertyName: "evaCustomIcon", publicName: "evaCustomIcon", isSignal: true, isRequired: false, transformFunction: null }, evaAria: { classPropertyName: "evaAria", publicName: "evaAria", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0", "role": "button" }, listeners: { "click": "pipClicked()", "keydown": "pipClickedKeyboard($event)" }, properties: { "attr.aria-label": "ariaLabel()", "attr.aria-valuetext": "ariaValueText()" } }, ngImport: i0, template: "@if(evaCustomIcon()){\n<ng-content></ng-content>\n}\n@else {\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"var(--eva-icon-color)\"\n\tstyle=\"width: 50%; height: 50%\">\n\t<path\n\t\td=\"M19,11H11V17H19V11M23,19V5C23,3.88 22.1,3 21,3H3A2,2 0 0,0 1,5V19A2,2 0 0,0 3,21H21A2,2 0 0,0 23,19M21,19H3V4.97H21V19Z\" />\n</svg>\n}", styles: [":host{display:flex;justify-content:center;align-items:center;height:var(--eva-control-element-height);width:50px;cursor:pointer;color:var(--eva-icon-color);user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}:host>svg{pointer-events:none!important;user-select:none!important;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2516
2566
|
}
|
|
2517
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2567
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaPictureInPicture, decorators: [{
|
|
2518
2568
|
type: Component,
|
|
2519
2569
|
args: [{ selector: 'eva-picture-in-picture', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
2520
2570
|
"tabindex": "0",
|
|
@@ -2586,10 +2636,10 @@ class EvaTimeDisplayPipe {
|
|
|
2586
2636
|
pad(num) {
|
|
2587
2637
|
return num.toString().padStart(2, '0');
|
|
2588
2638
|
}
|
|
2589
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2590
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.
|
|
2639
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaTimeDisplayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
2640
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.2", ngImport: i0, type: EvaTimeDisplayPipe, isStandalone: true, name: "evaTimeDisplay" });
|
|
2591
2641
|
}
|
|
2592
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2642
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaTimeDisplayPipe, decorators: [{
|
|
2593
2643
|
type: Pipe,
|
|
2594
2644
|
args: [{
|
|
2595
2645
|
name: 'evaTimeDisplay',
|
|
@@ -2741,10 +2791,10 @@ class EvaPlayPause {
|
|
|
2741
2791
|
this.playPauseClicked();
|
|
2742
2792
|
}
|
|
2743
2793
|
}
|
|
2744
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2745
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
2794
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaPlayPause, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2795
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaPlayPause, isStandalone: true, selector: "eva-play-pause", inputs: { evaPlayPauseAria: { classPropertyName: "evaPlayPauseAria", publicName: "evaPlayPauseAria", isSignal: true, isRequired: false, transformFunction: null }, evaCustomIcon: { classPropertyName: "evaCustomIcon", publicName: "evaCustomIcon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { playingStateChanged: "playingStateChanged" }, host: { attributes: { "tabindex": "0", "role": "button" }, listeners: { "click": "playPauseClicked()", "keydown": "playPauseClickedKeyboard($event)" }, properties: { "attr.aria-label": "ariaLabel()", "attr.aria-valuetext": "ariaValueText()", "class.eva-icon": "!evaCustomIcon()", "class.eva-icon-pause": "!evaCustomIcon() && evaIconPause()", "class.eva-icon-play_arrow": "!evaCustomIcon() && evaIconPlay()" } }, ngImport: i0, template: "@if(evaCustomIcon()){\n@if(evaIconPause()){\n<ng-content select=\"[evaPause]\"></ng-content>\n}\n@if(evaIconPlay()){\n<ng-content select=\"[evaPlay]\"></ng-content>\n}\n}", styles: [":host{display:flex;justify-content:center;height:var(--eva-control-element-height);width:50px;color:var(--eva-icon-color);user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;cursor:pointer}:host>img{pointer-events:none;-webkit-user-select:none;user-select:none;width:32px;height:32px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2746
2796
|
}
|
|
2747
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
2797
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaPlayPause, decorators: [{
|
|
2748
2798
|
type: Component,
|
|
2749
2799
|
args: [{ selector: 'eva-play-pause', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
2750
2800
|
"tabindex": "0",
|
|
@@ -2987,10 +3037,10 @@ class EvaPlaybackSpeed {
|
|
|
2987
3037
|
this.evaAPI.controlsSelectorComponentActive.next(false);
|
|
2988
3038
|
}
|
|
2989
3039
|
}
|
|
2990
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
2991
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
3040
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaPlaybackSpeed, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3041
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaPlaybackSpeed, isStandalone: true, selector: "eva-playback-speed", inputs: { evaPlaybackSpeeds: { classPropertyName: "evaPlaybackSpeeds", publicName: "evaPlaybackSpeeds", isSignal: true, isRequired: true, transformFunction: null }, evaDefaultPlaybackSpeed: { classPropertyName: "evaDefaultPlaybackSpeed", publicName: "evaDefaultPlaybackSpeed", isSignal: true, isRequired: false, transformFunction: null }, evaAria: { classPropertyName: "evaAria", publicName: "evaAria", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0", "role": "button" }, listeners: { "click": "playbackClicked()", "keydown": "playbackClickedKeyboard($event)", "blur": "handleBlur($event)" }, properties: { "attr.aria-label": "ariaLabel()", "attr.aria-valuetext": "currentSpeed() + 'x'", "class.open": "isOpen()" } }, ngImport: i0, template: "<div class=\"eva-playback-speed-container\">\n\t<!-- Current Speed Display Button -->\n\t<div class=\"eva-playback-speed-button\">\n\t\t<span class=\"speed-icon\">\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n\t\t\t\tstroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t<path d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\" />\n\t\t\t</svg>\n\t\t</span>\n\t\t<span class=\"speed-label\">{{ formatSpeed(currentSpeed()) }}</span>\n\t\t<span class=\"dropdown-arrow\" [class.rotated]=\"isOpen()\">\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n\t\t\t\tstroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t<polyline points=\"6 9 12 15 18 9\"></polyline>\n\t\t\t</svg>\n\t\t</span>\n\t</div>\n\n\t<!-- Dropdown Menu -->\n\t<div class=\"eva-playback-speed-dropdown\" [class.show]=\"isOpen()\">\n\t\t<div class=\"dropdown-content\">\n\t\t\t<div class=\"dropdown-header\">{{evaAria().ariaLabel}}</div>\n\t\t\t<div class=\"speed-options\">\n\t\t\t\t@for (speed of evaPlaybackSpeeds(); track speed) {\n\t\t\t\t<button type=\"button\" class=\"speed-option\" [class.active]=\"speed === currentSpeed()\"\n\t\t\t\t\t(click)=\"selectSpeed(speed, $index)\" [attr.aria-selected]=\"speed === currentSpeed()\" role=\"option\">\n\t\t\t\t\t<span class=\"speed-text\">{{ formatSpeed(speed) }}</span>\n\t\t\t\t\t@if (speed === currentSpeed()) {\n\t\t\t\t\t<span class=\"checkmark\">\n\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t\t\t\t<polyline points=\"20 6 9 17 4 12\"></polyline>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>", styles: [":host{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center;justify-content:center;height:var(--eva-control-element-height);width:80px;cursor:pointer;color:#fff;position:relative;outline:none}:host:focus-visible{outline:2px solid rgba(255,255,255,.8);outline-offset:2px;border-radius:4px}:host:hover{background-color:var(--eva-playback-speed-hover-background);border-radius:4px}:host.open{background-color:var(--eva-playback-speed-opened-background);border-radius:4px}.eva-playback-speed-container{position:relative;display:flex;align-items:center;justify-content:center}.eva-playback-speed-button{display:flex;align-items:center;justify-content:center;width:100%;height:100%;gap:2px}.eva-playback-speed-button .speed-icon{display:none}.eva-playback-speed-button .speed-label{font-family:var(--eva-font-family);font-size:var(--eva-playback-speed-label-font-size);color:var(--eva-playback-speed-label-color);white-space:nowrap;line-height:1}.eva-playback-speed-button .dropdown-arrow{display:flex;align-items:center;width:var(--eva-playback-speed-dropdown-arrow-size);height:var(--eva-playback-speed-dropdown-arrow-size);color:var(--eva-playback-speed-dropdown-arrow-color);transition:transform var(--eva-transition-duration) cubic-bezier(.4,0,.2,1)}.eva-playback-speed-button .dropdown-arrow svg{width:100%;height:100%}.eva-playback-speed-button .dropdown-arrow.rotated{transform:rotate(180deg)}.eva-playback-speed-dropdown{position:absolute;bottom:100%;left:50%;transform:translate(-50%) translateY(-12px);margin-bottom:4px;z-index:1000;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--eva-transition-duration) cubic-bezier(.4,0,.2,1),visibility var(--eva-transition-duration) cubic-bezier(.4,0,.2,1),transform var(--eva-transition-duration) cubic-bezier(.4,0,.2,1);transform:translate(-50%) translateY(0) scale(.95);transform-origin:bottom center}.eva-playback-speed-dropdown.show{opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%) translateY(calc(-12px - var(--eva-scrub-bar-heights))) scale(1)}@media(max-width:768px){.eva-playback-speed-dropdown{left:auto;right:0;transform:translateY(-8px)}.eva-playback-speed-dropdown.show{transform:translateY(-8px) scale(1)}}:host-context(.controls-left) .eva-playback-speed-dropdown{left:0;transform:translateY(-8px)}:host-context(.controls-left) .eva-playback-speed-dropdown.show{transform:translateY(-8px) scale(1)}:host-context(.controls-right) .eva-playback-speed-dropdown{left:auto;right:0;transform:translateY(-8px)}:host-context(.controls-right) .eva-playback-speed-dropdown.show{transform:translateY(-8px) scale(1)}.dropdown-content{background:var(--eva-playback-speed-dropdown-content-background);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-radius:8px;box-shadow:var(--eva-playback-speed-dropdown-content-box-shadow);overflow:hidden;min-width:180px;animation:slideIn var(--eva-transition-duration) cubic-bezier(.4,0,.2,1)}@media(max-width:768px){.dropdown-content{min-width:150px}}@keyframes slideIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.dropdown-header{padding:10px 14px 8px;font-family:var(--eva-font-family);font-size:var(--eva-playback-speed-dropdown-content-header-font-size);font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--eva-playback-speed-dropdown-content-header-font-color);border-bottom:var(--eva-playback-speed-dropdown-content-header-bottom-border)}.speed-options{padding:4px;max-height:280px;overflow-y:auto}.speed-options::-webkit-scrollbar{width:6px}.speed-options::-webkit-scrollbar-track{background:#ffffff0d;border-radius:3px}.speed-options::-webkit-scrollbar-thumb{background:#fff3;border-radius:3px}.speed-options::-webkit-scrollbar-thumb:hover{background:#ffffff4d}.speed-option{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 14px;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:background-color var(--eva-transition-durations) ease,transform var(--eva-transition-duration) ease;outline:none}.speed-option:hover{background-color:var(--eva-playback-speed-dropdown-content-speed-option-bacground-hover)}.speed-option:active{transform:scale(.98)}.speed-option:focus-visible{outline:2px solid rgba(255,255,255,.5);outline-offset:-2px}.speed-option.active{background-color:var(--eva-playback-speed-dropdown-content-speed-option-icon-active)}.speed-option .speed-text{font-family:var(--eva-font-family);font-size:var(--eva-playback-speed-dropdown-content-speed-option-font-size);font-weight:500;color:var(--eva-playback-speed-dropdown-content-speed-option-font-color);transition:color var(--eva-transition-duration) ease}.speed-option .checkmark{display:flex;align-items:center;width:var(--eva-playback-speed-dropdown-content-speed-option-checkmark-size);height:var(--eva-playback-speed-dropdown-content-speed-option-checkmark-size);color:var(--eva-playback-speed-dropdown-content-speed-option-checkmark-color);animation:checkmarkAppear var(--eva-transition-duration) cubic-bezier(.4,0,.2,1)}.speed-option .checkmark svg{width:100%;height:100%}@keyframes checkmarkAppear{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2992
3042
|
}
|
|
2993
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3043
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaPlaybackSpeed, decorators: [{
|
|
2994
3044
|
type: Component,
|
|
2995
3045
|
args: [{ selector: 'eva-playback-speed', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
2996
3046
|
"tabindex": "0",
|
|
@@ -3214,10 +3264,10 @@ class EvaQualitySelector {
|
|
|
3214
3264
|
this.evaAPI.controlsSelectorComponentActive.next(false);
|
|
3215
3265
|
}
|
|
3216
3266
|
}
|
|
3217
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3218
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
3267
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaQualitySelector, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3268
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaQualitySelector, isStandalone: true, selector: "eva-quality-selector", inputs: { evaQualitySelectorText: { classPropertyName: "evaQualitySelectorText", publicName: "evaQualitySelectorText", isSignal: true, isRequired: false, transformFunction: null }, evaQualityAutoText: { classPropertyName: "evaQualityAutoText", publicName: "evaQualityAutoText", isSignal: true, isRequired: false, transformFunction: null }, evaAria: { classPropertyName: "evaAria", publicName: "evaAria", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0", "role": "button" }, listeners: { "click": "onClicked()", "keydown": "onKeyDown($event)", "blur": "onBlur($event)" }, properties: { "attr.aria-label": "ariaLabel()", "attr.aria-valuetext": "currentQuality()?.label ?? evaQualityAutoText()", "class.open": "isOpen()" } }, ngImport: i0, template: "<div class=\"eva-quality-selector-container\">\n\t<!-- Current Quality Display Button -->\n\t<div class=\"eva-quality-selector-button\">\n\t\t<span class=\"speed-icon\">\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n\t\t\t\tstroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t<path d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\" />\n\t\t\t</svg>\n\t\t</span>\n\t\t<span class=\"speed-label\">\n\t\t\t{{ currentQuality() ? formatQuality(currentQuality()!) : evaQualityAutoText() }}\n\t\t</span>\n\t\t<span class=\"dropdown-arrow\" [class.rotated]=\"isOpen()\">\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n\t\t\t\tstroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t<polyline points=\"6 9 12 15 18 9\"></polyline>\n\t\t\t</svg>\n\t\t</span>\n\t</div>\n\n\t<!-- Dropdown Menu -->\n\t<div class=\"eva-quality-selector-dropdown\" [class.show]=\"isOpen()\">\n\t\t<div class=\"dropdown-content\">\n\t\t\t<div class=\"dropdown-header\">{{ evaQualitySelectorText() }}</div>\n\t\t\t<div class=\"quality-options\">\n\t\t\t\t@for (quality of qualities(); track quality.qualityIndex) {\n\t\t\t\t<button type=\"button\" class=\"quality-option\"\n\t\t\t\t\t[class.active]=\"quality.qualityIndex === currentQuality()?.qualityIndex\"\n\t\t\t\t\t(click)=\"selectQuality(quality, $index)\"\n\t\t\t\t\t[attr.aria-selected]=\"quality.qualityIndex === currentQuality()?.qualityIndex\" role=\"option\">\n\t\t\t\t\t<span class=\"speed-text\">{{ formatQuality(quality) }}</span>\n\t\t\t\t\t@if (quality.qualityIndex === currentQuality()?.qualityIndex) {\n\t\t\t\t\t<span class=\"checkmark\">\n\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t\t\t\t<polyline points=\"20 6 9 17 4 12\"></polyline>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>", styles: [":host{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center;justify-content:center;height:var(--eva-control-element-height);width:80px;cursor:pointer;color:#fff;position:relative;outline:none}:host:focus-visible{outline:2px solid rgba(255,255,255,.8);outline-offset:2px;border-radius:4px}:host:hover{background-color:var(--eva-quality-selector-hover-background);border-radius:4px}:host.open{background-color:var(--eva-quality-selector-opened-background);border-radius:4px}.eva-quality-selector-container{position:relative;display:flex;align-items:center;justify-content:center}.eva-quality-selector-button{display:flex;align-items:center;justify-content:center;width:100%;height:100%;gap:2px}.eva-quality-selector-button .speed-icon{display:none}.eva-quality-selector-button .speed-label{font-family:var(--eva-font-family);font-size:var(--eva-quality-selector-label-font-size);color:var(--eva-quality-selector-label-color);white-space:nowrap;line-height:1}.eva-quality-selector-button .dropdown-arrow{display:flex;align-items:center;width:var(--eva-quality-selector-dropdown-arrow-size);height:var(--eva-quality-selector-dropdown-arrow-size);color:var(--eva-quality-selector-dropdown-arrow-color);transition:transform var(--eva-transition-duration) cubic-bezier(.4,0,.2,1)}.eva-quality-selector-button .dropdown-arrow svg{width:100%;height:100%}.eva-quality-selector-button .dropdown-arrow.rotated{transform:rotate(180deg)}.eva-quality-selector-dropdown{position:absolute;bottom:100%;left:50%;transform:translate(-50%) translateY(-12px);margin-bottom:4px;z-index:1000;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--eva-transition-duration) cubic-bezier(.4,0,.2,1),visibility var(--eva-transition-duration) cubic-bezier(.4,0,.2,1),transform var(--eva-transition-duration) cubic-bezier(.4,0,.2,1);transform:translate(-50%) translateY(0) scale(.95);transform-origin:bottom center}.eva-quality-selector-dropdown.show{opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%) translateY(calc(-12px - var(--eva-scrub-bar-heights))) scale(1)}@media(max-width:768px){.eva-quality-selector-dropdown{left:auto;right:0;transform:translateY(-8px)}.eva-quality-selector-dropdown.show{transform:translateY(-8px) scale(1)}}:host-context(.controls-left) .eva-quality-selector-dropdown{left:0;transform:translateY(-8px)}:host-context(.controls-left) .eva-quality-selector-dropdown.show{transform:translateY(-8px) scale(1)}:host-context(.controls-right) .eva-quality-selector-dropdown{left:auto;right:0;transform:translateY(-8px)}:host-context(.controls-right) .eva-quality-selector-dropdown.show{transform:translateY(-8px) scale(1)}.dropdown-content{background:var(--eva-quality-selector-dropdown-content-background);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-radius:8px;box-shadow:var(--eva-quality-selector-dropdown-content-box-shadow);overflow:hidden;min-width:180px;animation:slideIn var(--eva-transition-duration) cubic-bezier(.4,0,.2,1)}@media(max-width:768px){.dropdown-content{min-width:150px}}@keyframes slideIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.dropdown-header{padding:10px 14px 8px;font-family:var(--eva-font-family);font-size:var(--eva-quality-selector-dropdown-content-header-font-size);font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--eva-quality-selector-dropdown-content-header-font-color);border-bottom:var(--eva-quality-selector-dropdown-content-header-bottom-border)}.quality-options{padding:4px;max-height:280px;overflow-y:auto}.quality-options::-webkit-scrollbar{width:6px}.quality-options::-webkit-scrollbar-track{background:#ffffff0d;border-radius:3px}.quality-options::-webkit-scrollbar-thumb{background:#fff3;border-radius:3px}.quality-options::-webkit-scrollbar-thumb:hover{background:#ffffff4d}.quality-option{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 14px;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:background-color var(--eva-transition-durations) ease,transform var(--eva-transition-duration) ease;outline:none}.quality-option:hover{background-color:var(--eva-quality-selector-dropdown-content-quality-option-bacground-hover)}.quality-option:active{transform:scale(.98)}.quality-option:focus-visible{outline:2px solid rgba(255,255,255,.5);outline-offset:-2px}.quality-option.active{background-color:var(--eva-quality-selector-dropdown-content-quality-option-icon-active)}.quality-option .speed-text{font-family:var(--eva-font-family);font-size:var(--eva-quality-selector-dropdown-content-quality-option-font-size);font-weight:500;color:var(--eva-quality-selector-dropdown-content-quality-option-font-color);transition:color var(--eva-transition-duration) ease}.quality-option .checkmark{display:flex;align-items:center;width:var(--eva-quality-selector-dropdown-content-quality-option-checkmark-size);height:var(--eva-quality-selector-dropdown-content-quality-option-checkmark-size);color:var(--eva-quality-selector-dropdown-content-quality-option-checkmark-color);animation:checkmarkAppear var(--eva-transition-duration) cubic-bezier(.4,0,.2,1)}.quality-option .checkmark svg{width:100%;height:100%}@keyframes checkmarkAppear{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3219
3269
|
}
|
|
3220
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3270
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaQualitySelector, decorators: [{
|
|
3221
3271
|
type: Component,
|
|
3222
3272
|
args: [{ selector: 'eva-quality-selector', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
3223
3273
|
'tabindex': '0',
|
|
@@ -3333,10 +3383,10 @@ class EvaScrubBarBufferingTime {
|
|
|
3333
3383
|
}
|
|
3334
3384
|
this.bufferedPercentage.set(bufferTime);
|
|
3335
3385
|
}
|
|
3336
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3337
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.
|
|
3386
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaScrubBarBufferingTime, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3387
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.2", type: EvaScrubBarBufferingTime, isStandalone: true, selector: "eva-scrub-bar-buffering-time", ngImport: i0, template: "<div class=\"buffer-container\" [style.width]=\"bufferedPercentage()\">\n</div>", styles: [":host{display:flex;width:100%;height:var(--eva-scrub-bar-heights);pointer-events:none;position:absolute;left:0;top:0;border-radius:2px}div.buffer-container{height:var(--eva-scrub-bar-heights);background-color:var(--eva-scrub-bar-buffering-background)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3338
3388
|
}
|
|
3339
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3389
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaScrubBarBufferingTime, decorators: [{
|
|
3340
3390
|
type: Component,
|
|
3341
3391
|
args: [{ selector: 'eva-scrub-bar-buffering-time', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"buffer-container\" [style.width]=\"bufferedPercentage()\">\n</div>", styles: [":host{display:flex;width:100%;height:var(--eva-scrub-bar-heights);pointer-events:none;position:absolute;left:0;top:0;border-radius:2px}div.buffer-container{height:var(--eva-scrub-bar-heights);background-color:var(--eva-scrub-bar-buffering-background)}\n"] }]
|
|
3342
3392
|
}] });
|
|
@@ -3378,10 +3428,10 @@ class EvaScrubBarCurrentTime {
|
|
|
3378
3428
|
return Math.round(time.current * 100) / time.total + "%";
|
|
3379
3429
|
}, /* @ts-ignore */
|
|
3380
3430
|
...(ngDevMode ? [{ debugName: "currentTimePercentage" }] : /* istanbul ignore next */ []));
|
|
3381
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
3382
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.
|
|
3431
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaScrubBarCurrentTime, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3432
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.2", type: EvaScrubBarCurrentTime, isStandalone: true, selector: "eva-scrub-bar-current-time", ngImport: i0, template: "<div class=\"current-time-container\" [style.width]=\"currentTimePercentage()\">\n</div>", styles: [":host{display:flex;width:100%;height:var(--eva-scrub-bar-heights);pointer-events:none;position:absolute;left:0;top:0;border-radius:2px}div.current-time-container{height:var(--eva-scrub-bar-heights);background-color:var(--eva-scrub-bar-current-time-background)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3383
3433
|
}
|
|
3384
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
3434
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaScrubBarCurrentTime, decorators: [{
|
|
3385
3435
|
type: Component,
|
|
3386
3436
|
args: [{ selector: 'eva-scrub-bar-current-time', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"current-time-container\" [style.width]=\"currentTimePercentage()\">\n</div>", styles: [":host{display:flex;width:100%;height:var(--eva-scrub-bar-heights);pointer-events:none;position:absolute;left:0;top:0;border-radius:2px}div.current-time-container{height:var(--eva-scrub-bar-heights);background-color:var(--eva-scrub-bar-current-time-background)}\n"] }]
|
|
3387
3437
|
}] });
|
|
@@ -3997,10 +4047,10 @@ class EvaScrubBar {
|
|
|
3997
4047
|
this.hideControls.set(true);
|
|
3998
4048
|
}, this.evaAutohideTime());
|
|
3999
4049
|
}
|
|
4000
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
4001
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
4050
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaScrubBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4051
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaScrubBar, isStandalone: true, selector: "eva-scrub-bar", inputs: { evaAria: { classPropertyName: "evaAria", publicName: "evaAria", isSignal: true, isRequired: false, transformFunction: null }, hideWithControlsContainer: { classPropertyName: "hideWithControlsContainer", publicName: "hideWithControlsContainer", isSignal: true, isRequired: false, transformFunction: null }, evaSlidingEnabled: { classPropertyName: "evaSlidingEnabled", publicName: "evaSlidingEnabled", isSignal: true, isRequired: false, transformFunction: null }, evaAutohideTime: { classPropertyName: "evaAutohideTime", publicName: "evaAutohideTime", isSignal: true, isRequired: false, transformFunction: null }, evaShowTimeOnHover: { classPropertyName: "evaShowTimeOnHover", publicName: "evaShowTimeOnHover", isSignal: true, isRequired: false, transformFunction: null }, evaTimeFormat: { classPropertyName: "evaTimeFormat", publicName: "evaTimeFormat", isSignal: true, isRequired: false, transformFunction: null }, evaShowChapters: { classPropertyName: "evaShowChapters", publicName: "evaShowChapters", isSignal: true, isRequired: false, transformFunction: null }, evaChapters: { classPropertyName: "evaChapters", publicName: "evaChapters", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0", "role": "slider", "aria-valuemin": "0", "aria-valuemax": "100" }, listeners: { "mousedown": "mouseDownScrub($event)", "document:mouseup": "mouseUpScrubBar($event)", "touchstart": "touchStartScrub($event)", "document:touchcancel": "touchCancelScrub($event)", "document:touchend": "touchEndScrub($event)", "keydown": "arrowAdjustTime($event)" }, properties: { "attr.aria-label": "ariaLabel()", "attr.aria-valuenow": "getPercentage()", "attr.aria-valuetext": "getPercentage()", "class.hide": "hideControls()" } }, ngImport: i0, template: "<ng-content></ng-content>\n\n@if (evaShowChapters() && chapters().length > 0) {\n<div class=\"eva-chapter-markers\">\n\t@for (chapter of chapters(); track chapter.startTime) {\n\t<div class=\"eva-chapter-marker\" [style.left]=\"getChapterLeftPercent(chapter)\"\n\t\t[style.width]=\"getChapterWidthPercent(chapter)\">\n\t</div>\n\t}\n</div>\n}\n\n@if (hoverTime() !== null) {\n<div class=\"eva-hover-tooltip\" [style.left.px]=\"hoverLeft()\">\n\t<span class=\"eva-hover-time\">{{ hoverTime() }} @if(hoverChapter()) { {{hoverChapter()}}}</span>\n</div>\n}", styles: [":host{user-select:none;position:absolute;width:100%;height:var(--eva-scrub-bar-heights);bottom:var(--eva-control-element-height);margin:0;cursor:pointer;display:flex;align-items:center;background:var(--eva-scrub-bar-background);z-index:303;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;transition:bottom var(--eva-transition-duration) ease-in-out,opacity var(--eva-transition-duration) ease-in-out}:host-context(eva-controls-container){position:relative;bottom:0;background:var(--eva-scrub-bar-background);height:var(--eva-scrub-bar-heights);flex-grow:1;flex-basis:0;margin:0 10px;-webkit-transition:initial;-khtml-transition:initial;-moz-transition:initial;-ms-transition:initial;transition:initial}:host(.hide){bottom:0!important;opacity:1}.eva-chapter-markers{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.eva-chapter-marker{position:absolute;top:0;height:100%;border-right:var(--eva-scrub-bar-chapter-marker-width) solid var(--eva-scrub-bar-chapter-marker-color);box-sizing:border-box}.eva-chapter-marker:last-child{border-right:none}.eva-hover-tooltip{position:absolute;bottom:calc(100% + 8px);transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:2px;pointer-events:none;z-index:400;will-change:left}.eva-hover-chapter{background-color:var(--eva-scrub-bar-chapter-hover-background-color);color:var(--eva-scrub-bar-chapter-hover-text-color);padding:3px 8px;border-radius:4px;font-size:var(--eva-scrub-bar-chapter-hover-font-size);white-space:nowrap;text-align:center;max-width:160px;overflow:hidden;text-overflow:ellipsis}.eva-hover-time{background-color:var(--eva-scrub-bar-chapter-hover-tooltip-background-color);color:var(--eva-scrub-bar-chapter-hover-tooltip-text-color);padding:4px 8px;border-radius:4px;font-size:var(--eva-scrub-bar-chapter-hover-tooltip-font-size);font-family:var(--eva-font-family);white-space:nowrap;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4002
4052
|
}
|
|
4003
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
4053
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaScrubBar, decorators: [{
|
|
4004
4054
|
type: Component,
|
|
4005
4055
|
args: [{ selector: 'eva-scrub-bar', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
4006
4056
|
"tabindex": "0",
|
|
@@ -4097,10 +4147,10 @@ class EvaSubtitleDisplay {
|
|
|
4097
4147
|
this.controlsVisibility$?.unsubscribe();
|
|
4098
4148
|
this.pipWindowActive$?.unsubscribe();
|
|
4099
4149
|
}
|
|
4100
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
4101
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
4150
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaSubtitleDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4151
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaSubtitleDisplay, isStandalone: true, selector: "eva-subtitle-display", host: { properties: { "class.eva-subtitle-display--visible": "cue() !== null && !pipWindowActive()", "style.padding-bottom": "controlsCointainerNotVisible() ? '8px' : 'calc(var(--eva-control-element-height) + var(--eva-scrub-bar-heights) + 12px)'" } }, ngImport: i0, template: "@if (cue() && !pipWindowActive()) {\n<span class=\"eva-subtitle-cue\" [innerHTML]=\"cue()\"></span>\n}", styles: [":host{display:none;visibility:hidden;position:absolute;inset-inline:0;bottom:0;pointer-events:none;text-align:center;z-index:10;transition:padding-bottom var(--eva-transition-duration) ease-in-out}:host(.eva-subtitle-display--visible){display:block!important;visibility:visible!important}.eva-subtitle-cue{display:inline-block;font-size:var(--eva-subtitle-font-size);line-height:1.4;font-family:var(--eva-subtitle-font-family);color:var(--eva-subtitle-color, #ffffff);background-color:var(--eva-subtitle-background, rgba(0, 0, 0, .72));padding:var(--eva-subtitle-padding);border-radius:3px;white-space:pre-line}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4102
4152
|
}
|
|
4103
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
4153
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaSubtitleDisplay, decorators: [{
|
|
4104
4154
|
type: Component,
|
|
4105
4155
|
args: [{ selector: "eva-subtitle-display", changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
4106
4156
|
// Suppressed during PiP — the browser renders subtitles natively inside the PiP window
|
|
@@ -4247,10 +4297,10 @@ class EvaTimeDisplay {
|
|
|
4247
4297
|
return `${minutes}:${secs.toString().padStart(2, '0')}`;
|
|
4248
4298
|
}
|
|
4249
4299
|
}
|
|
4250
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
4251
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
4300
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaTimeDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4301
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaTimeDisplay, isStandalone: true, selector: "eva-time-display", inputs: { evaTimeProperty: { classPropertyName: "evaTimeProperty", publicName: "evaTimeProperty", isSignal: true, isRequired: true, transformFunction: null }, evaTimeFormating: { classPropertyName: "evaTimeFormating", publicName: "evaTimeFormating", isSignal: true, isRequired: true, transformFunction: null }, evaLiveText: { classPropertyName: "evaLiveText", publicName: "evaLiveText", isSignal: true, isRequired: false, transformFunction: null }, evaAria: { classPropertyName: "evaAria", publicName: "evaAria", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0", "role": "timer" }, properties: { "attr.aria-label": "ariaLabel()", "attr.aria-live": "'off'", "attr.aria-atomic": "'true'", "attr.aria-valuetext": "displayText()" } }, ngImport: i0, template: "@if(evaAPI.isLive()){\n<span>{{evaLiveText()}}</span>\n}\n@else {\n<span>{{evaAPI.time()[evaTimeProperty()] | evaTimeDisplay: evaTimeFormating(): evaTimeProperty()}}</span>\n}", styles: [":host{display:flex;align-items:center;justify-content:center;height:var(--eva-control-element-height);min-width:30px;cursor:pointer;color:var(--eva-time-display-text-color);pointer-events:none;padding:0 6px;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host>span{font-family:var(--eva-font-family)}\n"], dependencies: [{ kind: "pipe", type: EvaTimeDisplayPipe, name: "evaTimeDisplay" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4252
4302
|
}
|
|
4253
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
4303
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaTimeDisplay, decorators: [{
|
|
4254
4304
|
type: Component,
|
|
4255
4305
|
args: [{ selector: 'eva-time-display', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
4256
4306
|
"tabindex": "0",
|
|
@@ -4602,10 +4652,10 @@ class EvaTrackSelector {
|
|
|
4602
4652
|
let t = this.localTracks().find(a => a.selected === true);
|
|
4603
4653
|
this.evaAPI.subtitlesChanged(t ? t : null);
|
|
4604
4654
|
}
|
|
4605
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
4606
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
4655
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaTrackSelector, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4656
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaTrackSelector, isStandalone: true, selector: "eva-track-selector", inputs: { evaTrackSelectorText: { classPropertyName: "evaTrackSelectorText", publicName: "evaTrackSelectorText", isSignal: true, isRequired: false, transformFunction: null }, evaTrackOffText: { classPropertyName: "evaTrackOffText", publicName: "evaTrackOffText", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.eva-icon": "true", "class.open": "isOpen()", "attr.aria-label": "evaTrackSelectorText()" } }, ngImport: i0, template: "<div class=\"eva-track-selector-container\">\n\t<!-- Current Track Display Button -->\n\t<button type=\"button\" class=\"eva-track-selector-button\"\n\t\t[attr.aria-label]=\"evaTrackSelectorText() + ': ' + (currentTrack() || evaTrackOffText())\"\n\t\t[attr.aria-expanded]=\"isOpen()\" [attr.aria-haspopup]=\"'listbox'\"\n\t\t[attr.aria-controls]=\"'track-dropdown-' + uniqueId\" (click)=\"trackSelectorClicked()\"\n\t\t(keydown)=\"playbackClickedKeyboard($event)\">\n\t\t<span class=\"speed-icon\" aria-hidden=\"true\">\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n\t\t\t\tstroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t<path d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\" />\n\t\t\t</svg>\n\t\t</span>\n\t\t<span class=\"speed-label\">{{ currentTrack() || evaTrackOffText() }}</span>\n\t\t<span class=\"dropdown-arrow\" [class.rotated]=\"isOpen()\" aria-hidden=\"true\">\n\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n\t\t\t\tstroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t<polyline points=\"6 9 12 15 18 9\"></polyline>\n\t\t\t</svg>\n\t\t</span>\n\t</button>\n\n\t<!-- Dropdown Menu -->\n\t<div class=\"eva-track-selector-dropdown\" [class.show]=\"isOpen()\" [attr.id]=\"'track-dropdown-' + uniqueId\"\n\t\trole=\"listbox\" [attr.aria-label]=\"evaTrackSelectorText()\"\n\t\t[attr.aria-activedescendant]=\"isOpen() ? 'track-option-' + uniqueId + '-' + getActiveIndex() : null\">\n\t\t<div class=\"dropdown-content\">\n\t\t\t<div class=\"dropdown-header\" id=\"track-header-{{uniqueId}}\" role=\"presentation\">\n\t\t\t\t{{evaTrackSelectorText()}}\n\t\t\t</div>\n\t\t\t<div class=\"speed-options\" role=\"presentation\">\n\t\t\t\t@for (tr of localTracks(); track tr.id; let i = $index) {\n\t\t\t\t<button type=\"button\" class=\"speed-option\" [class.active]=\"tr.selected\"\n\t\t\t\t\t[attr.id]=\"'track-option-' + uniqueId + '-' + i\" (click)=\"selectTrack(tr, i)\"\n\t\t\t\t\t[attr.aria-selected]=\"tr.selected\" role=\"option\" [attr.tabindex]=\"isOpen() ? 0 : -1\">\n\t\t\t\t\t<span class=\"speed-text\">{{ tr.label }}</span>\n\t\t\t\t\t@if (tr.selected) {\n\t\t\t\t\t<span class=\"checkmark\" aria-hidden=\"true\">\n\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n\t\t\t\t\t\t\t<polyline points=\"20 6 9 17 4 12\"></polyline>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t</button>\n\t\t\t\t}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>", styles: [":host{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center;justify-content:center;height:var(--eva-control-element-height);width:50px;cursor:pointer;color:#fff;position:relative;outline:none}:host:focus-visible{outline:2px solid rgba(255,255,255,.8);outline-offset:2px;border-radius:4px}:host:hover{background-color:var(--eva-track-selector-hover-background);border-radius:4px}:host.open{background-color:var(--eva-track-selector-opened-background);border-radius:4px}.eva-track-selector-container{position:relative;display:flex;align-items:center;justify-content:center}.eva-track-selector-button{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%;gap:2px}.eva-track-selector-button .speed-icon{display:none}.eva-track-selector-button .speed-label{font-family:var(--eva-font-family);font-size:var(--eva-track-selector-label-font-size);font-weight:600;color:var(--eva-track-selector-label-color);white-space:nowrap;line-height:1}.eva-track-selector-button .dropdown-arrow{display:flex;align-items:center;width:var(--eva-track-selector-dropdown-arrow-size);height:var(--eva-track-selector-dropdown-arrow-size);color:var(--eva-track-selector-dropdown-arrow-color);transition:transform var(--eva-transition-duration) cubic-bezier(.4,0,.2,1)}.eva-track-selector-button .dropdown-arrow svg{width:100%;height:100%}.eva-track-selector-button .dropdown-arrow.rotated{transform:rotate(180deg)}.eva-track-selector-dropdown{position:absolute;bottom:100%;left:50%;transform:translate(-50%) translateY(-8px);margin-bottom:4px;z-index:1000;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--eva-transition-duration) cubic-bezier(.4,0,.2,1),visibility var(--eva-transition-duration) cubic-bezier(.4,0,.2,1),transform var(--eva-transition-duration) cubic-bezier(.4,0,.2,1);transform:translate(-50%) translateY(0) scale(.95);transform-origin:bottom center}.eva-track-selector-dropdown.show{opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%) translateY(-8px) scale(1)}@media(max-width:768px){.eva-track-selector-dropdown{left:auto;right:0;transform:translateY(-8px)}.eva-track-selector-dropdown.show{transform:translateY(-8px) scale(1)}}:host-context(.controls-left) .eva-track-selector-dropdown{left:0;transform:translateY(-8px)}:host-context(.controls-left) .eva-track-selector-dropdown.show{transform:translateY(-8px) scale(1)}:host-context(.controls-right) .eva-track-selector-dropdown{left:auto;right:0;transform:translateY(-8px)}:host-context(.controls-right) .eva-track-selector-dropdown.show{transform:translateY(-8px) scale(1)}.dropdown-content{background:var(--eva-track-selector-dropdown-content-background);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-radius:8px;box-shadow:var(--eva-track-selector-dropdown-content-box-shadow);overflow:hidden;min-width:180px;animation:slideIn var(--eva-transition-duration) cubic-bezier(.4,0,.2,1)}@media(max-width:768px){.dropdown-content{min-width:150px}}@keyframes slideIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.dropdown-header{padding:10px 14px 8px;font-family:var(--eva-font-family);font-size:var(--eva-track-selector-dropdown-content-header-font-size);font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--eva-track-selector-dropdown-content-header-font-color);border-bottom:var(--eva-track-selector-dropdown-content-header-bottom-border)}.speed-options{padding:4px;max-height:280px;overflow-y:auto}.speed-options::-webkit-scrollbar{width:6px}.speed-options::-webkit-scrollbar-track{background:#ffffff0d;border-radius:3px}.speed-options::-webkit-scrollbar-thumb{background:#fff3;border-radius:3px}.speed-options::-webkit-scrollbar-thumb:hover{background:#ffffff4d}.speed-option{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px 14px;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:background-color var(--eva-transition-duration) ease,transform var(--eva-transition-duration) ease;outline:none}.speed-option:hover{background-color:var(--eva-track-selector-dropdown-content-speed-option-bacground-hover)}.speed-option:active{transform:scale(.98)}.speed-option.active{background-color:#3b82f64d}.speed-option.active:hover{background-color:#3b82f666}.speed-option .speed-text{font-family:var(--eva-font-family);font-size:var(--eva-track-selector-dropdown-content-speed-option-font-size);font-weight:500;color:var(--eva-track-selector-dropdown-content-speed-option-font-color);transition:color var(--eva-transition-duration) ease}.speed-option .checkmark{display:flex;align-items:center;width:var(--eva-track-selector-dropdown-content-speed-option-checkmark-size);height:var(--eva-track-selector-dropdown-content-speed-option-checkmark-size);color:var(--eva-track-selector-dropdown-content-speed-option-checkmark-color);animation:checkmarkAppear var(--eva-transition-duration) cubic-bezier(.4,0,.2,1)}.speed-option .checkmark svg{width:100%;height:100%}@keyframes checkmarkAppear{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.eva-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.speed-option:focus{outline:2px solid rgba(255,255,255,.5);outline-offset:-2px}.speed-option:focus-visible{outline:2px solid rgba(255,255,255,.5);outline-offset:-2px}.eva-track-selector-dropdown:not(.show){display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4607
4657
|
}
|
|
4608
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
4658
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaTrackSelector, decorators: [{
|
|
4609
4659
|
type: Component,
|
|
4610
4660
|
args: [{ selector: 'eva-track-selector', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
4611
4661
|
"[class.eva-icon]": "true",
|
|
@@ -4970,10 +5020,10 @@ class EvaVolume {
|
|
|
4970
5020
|
onBlur() {
|
|
4971
5021
|
this.isFocused.set(false);
|
|
4972
5022
|
}
|
|
4973
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
4974
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
5023
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaVolume, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5024
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaVolume, isStandalone: true, selector: "eva-volume", inputs: { evaAria: { classPropertyName: "evaAria", publicName: "evaAria", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "0", "role": "slider", "aria-orientation": "horizontal", "aria-valuemin": "0", "aria-valuemax": "100" }, listeners: { "click": "onClick($event)", "mousedown": "onMouseDown($event)", "keydown": "onKeyDown($event)", "touchstart": "onTouchStart($event)", "focus": "onFocus()", "blur": "onBlur()" }, properties: { "attr.aria-label": "ariaLabel()", "attr.aria-valuenow": "ariaValue()", "attr.aria-valuetext": "ariaValue() + ' percent'", "class.eva-volume-focused": "isFocused()" } }, viewQueries: [{ propertyName: "volumeBar", first: true, predicate: ["volumeBar"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #volumeBar class=\"volumeBar\">\n\t<div class=\"volumeBackground\" [class.dragging]=\"isDragging()\">\n\t\t<div class=\"volumeValue\" [style.width]=\"videoVolume() * (100 - 15) + '%'\" aria-hidden=\"true\"></div>\n\t\t<div class=\"volumeKnob\" [style.left]=\"videoVolume() * (100 - 15) + '%'\" aria-hidden=\"true\"></div>\n\t</div>\n</div>\n\n<!-- Screen reader announcements for volume changes -->\n<div class=\"eva-sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n\t@if (shouldAnnounceVolume()) {\n\t<span>Volume {{ ariaValue() }} percent</span>\n\t}\n</div>\n", styles: [":host{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;justify-content:center;height:var(--eva-control-element-height);width:var(--eva-volume-width);cursor:pointer;position:relative;padding:0 8px}.volumeBar{position:relative;display:flex;flex-grow:1;align-items:center;outline:none;border-radius:4px;transition:background-color var(--eva-transition-duration) ease}.volumeBar:focus{outline:none}.volumeBar:focus-visible{outline:2px solid rgba(255,255,255,.8);outline-offset:2px;background-color:#ffffff0d}.volumeBar:active .volumeKnob{transform:translateY(-50%) scale(1.1)}.volumeBackground{display:flex;flex-grow:1;height:var(--eva-volume-track-height);pointer-events:none;background-color:var(--eva-volume-background-color);border-radius:3px;position:relative;transition:height var(--eva-transition-duration) ease}.volumeBackground.dragging{height:var(--eva-volume-track-height-dragging)}.volumeValue{display:flex;height:100%;pointer-events:none;background-color:var(--eva-volume-track-background-color);transition:width var(--eva-transition-duration) ease-out;border-radius:3px;position:relative}.volumeKnob{position:absolute;width:var(--eva-volume-knob-size);height:var(--eva-volume-knob-size);left:0;top:50%;transform:translateY(-50%);border-radius:50%;pointer-events:none;background-color:var(--eva-volume-knob-background-color);box-shadow:var(--eva-volume-knob-box-shadow);transition:all var(--eva-transition-duration) ease-out;z-index:1}.volumeKnob:before{content:\"\";position:absolute;inset:2px;border-radius:50%;background:radial-gradient(circle at 30% 30%,rgba(255,255,255,.4),transparent)}.volumeBackground.dragging .volumeValue,.volumeBackground.dragging .volumeKnob{transition:none}.eva-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(prefers-contrast:high){.volumeBar:focus-visible{outline-width:3px}.volumeBackground{background-color:#fff6}}@media(prefers-reduced-motion:reduce){.volumeBar,.volumeBackground,.volumeValue,.volumeKnob{transition:none!important}}@media(pointer:coarse){.volumeBar{padding:8px 0}.volumeKnob{width:18px;height:18px}}:host.eva-volume-focused .volumeBackground{background-color:#ffffff40}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4975
5025
|
}
|
|
4976
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
5026
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaVolume, decorators: [{
|
|
4977
5027
|
type: Component,
|
|
4978
5028
|
args: [{ selector: 'eva-volume', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
4979
5029
|
"tabindex": "0",
|
|
@@ -5080,10 +5130,10 @@ class EvaCueChangeDirective {
|
|
|
5080
5130
|
this.evaAPI.onCueChange(null);
|
|
5081
5131
|
}
|
|
5082
5132
|
}
|
|
5083
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
5084
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.
|
|
5133
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaCueChangeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
5134
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: EvaCueChangeDirective, isStandalone: true, selector: "track[evaCueChange]", inputs: { evaCueChangeActive: { classPropertyName: "evaCueChangeActive", publicName: "evaCueChangeActive", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
5085
5135
|
}
|
|
5086
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
5136
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaCueChangeDirective, decorators: [{
|
|
5087
5137
|
type: Directive,
|
|
5088
5138
|
args: [{
|
|
5089
5139
|
selector: 'track[evaCueChange]'
|
|
@@ -5125,8 +5175,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
5125
5175
|
*/
|
|
5126
5176
|
class EvaMediaEventListenersDirective {
|
|
5127
5177
|
evaAPI = inject(EvaApi);
|
|
5178
|
+
fullscreenService = inject(EvaFullscreenAPI);
|
|
5128
5179
|
elementRef = inject((ElementRef));
|
|
5129
5180
|
subs = [];
|
|
5181
|
+
// private lastTapTime: number = 0;
|
|
5130
5182
|
ngOnInit() {
|
|
5131
5183
|
const el = this.elementRef.nativeElement;
|
|
5132
5184
|
const on = (event, handler) => {
|
|
@@ -5138,6 +5190,7 @@ class EvaMediaEventListenersDirective {
|
|
|
5138
5190
|
on(EvaVideoEvent.LOADED_METADATA, e => this.evaAPI.loadedVideoMetadata(e));
|
|
5139
5191
|
on(EvaVideoEvent.PAUSE, () => this.evaAPI.pauseVideo());
|
|
5140
5192
|
on(EvaVideoEvent.PLAY, () => this.evaAPI.playVideo());
|
|
5193
|
+
on(EvaVideoEvent.DOUBLE_CLICK, () => this.fullscreenService.toggleFullscreen());
|
|
5141
5194
|
on(EvaVideoEvent.PLAYING, () => this.evaAPI.playingVideo());
|
|
5142
5195
|
on(EvaVideoEvent.PROGRESS, () => this.evaAPI.checkBufferStatus());
|
|
5143
5196
|
on(EvaVideoEvent.RATECHANGE, e => this.evaAPI.playbackRateVideoChanged(e));
|
|
@@ -5149,14 +5202,32 @@ class EvaMediaEventListenersDirective {
|
|
|
5149
5202
|
on(EvaVideoEvent.WAITING, () => this.evaAPI.videoWaiting());
|
|
5150
5203
|
on(EvaVideoEvent.ENTERED_PICTURE_IN_PICTURE, e => this.evaAPI.assignPictureInPictureWindow(e));
|
|
5151
5204
|
on(EvaVideoEvent.LEFT_PICTURE_IN_PICTURE, e => this.evaAPI.removePictureInPictureWindow(e));
|
|
5205
|
+
// this.subs.push(
|
|
5206
|
+
// fromEvent<TouchEvent>(el, 'touchend')
|
|
5207
|
+
// .subscribe((e) => {
|
|
5208
|
+
// console.log(e);
|
|
5209
|
+
// const now = e.timeStamp;
|
|
5210
|
+
// if (now - this.lastTapTime <= 300) {
|
|
5211
|
+
// const rect = el.getBoundingClientRect();
|
|
5212
|
+
// const tapX = e.changedTouches[0].clientX;
|
|
5213
|
+
// if (tapX < rect.left + rect.width / 2) {
|
|
5214
|
+
// this.evaAPI.seekBack(10);
|
|
5215
|
+
// } else {
|
|
5216
|
+
// this.evaAPI.seekForward(10);
|
|
5217
|
+
// }
|
|
5218
|
+
// this.lastTapTime = 0;
|
|
5219
|
+
// } else {
|
|
5220
|
+
// this.lastTapTime = now;
|
|
5221
|
+
// }
|
|
5222
|
+
// }));
|
|
5152
5223
|
}
|
|
5153
5224
|
ngOnDestroy() {
|
|
5154
5225
|
this.subs.forEach(s => s.unsubscribe());
|
|
5155
5226
|
}
|
|
5156
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
5157
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.
|
|
5227
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaMediaEventListenersDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
5228
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: EvaMediaEventListenersDirective, isStandalone: true, selector: "video[evaMediaEventListeners]", ngImport: i0 });
|
|
5158
5229
|
}
|
|
5159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
5230
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaMediaEventListenersDirective, decorators: [{
|
|
5160
5231
|
type: Directive,
|
|
5161
5232
|
args: [{
|
|
5162
5233
|
selector: 'video[evaMediaEventListeners]'
|
|
@@ -5233,21 +5304,18 @@ class EvaUserInteractionEventsDirective {
|
|
|
5233
5304
|
* - All streams are automatically torn down when `destroy$` emits via `takeUntil`.
|
|
5234
5305
|
*/
|
|
5235
5306
|
prepareListeners() {
|
|
5236
|
-
const
|
|
5237
|
-
|
|
5238
|
-
const touchstart$ = fromEvent(
|
|
5239
|
-
const click$ = fromEvent(
|
|
5240
|
-
// Merge all user interaction events
|
|
5307
|
+
const videoEl = this.evaAPI.assignedVideoElement;
|
|
5308
|
+
const mousemove$ = fromEvent(videoEl, 'mousemove').pipe(throttleTime(100));
|
|
5309
|
+
const touchstart$ = fromEvent(videoEl, 'touchstart');
|
|
5310
|
+
const click$ = fromEvent(videoEl, 'click');
|
|
5241
5311
|
merge(mousemove$, touchstart$, click$)
|
|
5242
5312
|
.pipe(takeUntil(this.destroy$))
|
|
5243
|
-
.subscribe((t) =>
|
|
5244
|
-
this.evaAPI.triggerUserInteraction.next(t);
|
|
5245
|
-
});
|
|
5313
|
+
.subscribe((t) => this.evaAPI.triggerUserInteraction.next(t));
|
|
5246
5314
|
}
|
|
5247
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
5248
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.
|
|
5315
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaUserInteractionEventsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
5316
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: EvaUserInteractionEventsDirective, isStandalone: true, selector: "eva-controls-container[evaUserInteractionEvents]", ngImport: i0 });
|
|
5249
5317
|
}
|
|
5250
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
5318
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaUserInteractionEventsDirective, decorators: [{
|
|
5251
5319
|
type: Directive,
|
|
5252
5320
|
args: [{
|
|
5253
5321
|
selector: 'eva-controls-container[evaUserInteractionEvents]'
|
|
@@ -5408,16 +5476,129 @@ class EvaVideoConfigurationDirective {
|
|
|
5408
5476
|
this.elementRef.nativeElement.poster = this.sanitizer.sanitize(SecurityContext.URL, config.poster) ?? '';
|
|
5409
5477
|
}
|
|
5410
5478
|
}
|
|
5411
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
5412
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.
|
|
5479
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaVideoConfigurationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
5480
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: EvaVideoConfigurationDirective, isStandalone: true, selector: "video[evaVideoConfiguration]", inputs: { evaVideoConfig: { classPropertyName: "evaVideoConfig", publicName: "evaVideoConfig", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { videoConfigurationDone: "videoConfigurationDone" }, usesOnChanges: true, ngImport: i0 });
|
|
5413
5481
|
}
|
|
5414
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
5482
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaVideoConfigurationDirective, decorators: [{
|
|
5415
5483
|
type: Directive,
|
|
5416
5484
|
args: [{
|
|
5417
5485
|
selector: 'video[evaVideoConfiguration]'
|
|
5418
5486
|
}]
|
|
5419
5487
|
}], propDecorators: { videoConfigurationDone: [{ type: i0.Output, args: ["videoConfigurationDone"] }], evaVideoConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaVideoConfig", required: true }] }] } });
|
|
5420
5488
|
|
|
5489
|
+
/** Duration of a single frame at 30fps, used for frame-step shortcuts. */
|
|
5490
|
+
const FRAME_DURATION_SECONDS = 1 / 30;
|
|
5491
|
+
/**
|
|
5492
|
+
* Directive that enables configurable keyboard shortcuts on the video player.
|
|
5493
|
+
*
|
|
5494
|
+
* Listens on the `document` for `keydown` events and delegates to `EvaApi`
|
|
5495
|
+
* and `EvaFullscreenAPI` methods. The listener is dynamically added/removed
|
|
5496
|
+
* via an `effect()` based on `evaKeyboardShortcutsEnabled`.
|
|
5497
|
+
*
|
|
5498
|
+
* Applied as a host directive on `EvaPlayer` — consumers configure it
|
|
5499
|
+
* via inputs on `<eva-player>` directly.
|
|
5500
|
+
*
|
|
5501
|
+
* Shortcuts are suppressed when focus is inside an `<input>`, `<textarea>`,
|
|
5502
|
+
* or `contenteditable` element to avoid interfering with text entry.
|
|
5503
|
+
*
|
|
5504
|
+
* @example
|
|
5505
|
+
* <eva-player
|
|
5506
|
+
* [evaKeyboardShortcutsEnabled]="true"
|
|
5507
|
+
* [evaKeyboardShortcutsConfiguration]="{ backwardsKeyOne: 'ArrowLeft', forwardKeyOne: 'ArrowRight' }"
|
|
5508
|
+
* />
|
|
5509
|
+
*/
|
|
5510
|
+
class EvaKeyboardShortcuts {
|
|
5511
|
+
/** Whether keyboard shortcuts are active. Dynamically adds/removes the document listener. */
|
|
5512
|
+
evaKeyboardShortcutsEnabled = input.required(/* @ts-ignore */
|
|
5513
|
+
...(ngDevMode ? [{ debugName: "evaKeyboardShortcutsEnabled" }] : /* istanbul ignore next */ []));
|
|
5514
|
+
/** Key binding configuration. All keys are guaranteed present via the transform on `EvaPlayer`. */
|
|
5515
|
+
evaKeyboardShortcutsConfiguration = input.required(/* @ts-ignore */
|
|
5516
|
+
...(ngDevMode ? [{ debugName: "evaKeyboardShortcutsConfiguration" }] : /* istanbul ignore next */ []));
|
|
5517
|
+
api = inject(EvaApi);
|
|
5518
|
+
fullscreenService = inject(EvaFullscreenAPI);
|
|
5519
|
+
document = inject(DOCUMENT);
|
|
5520
|
+
destroyRef = inject(DestroyRef);
|
|
5521
|
+
constructor() {
|
|
5522
|
+
effect(() => {
|
|
5523
|
+
if (this.evaKeyboardShortcutsEnabled()) {
|
|
5524
|
+
this.document.addEventListener('keydown', this.onKeydown);
|
|
5525
|
+
}
|
|
5526
|
+
else {
|
|
5527
|
+
this.document.removeEventListener('keydown', this.onKeydown);
|
|
5528
|
+
}
|
|
5529
|
+
});
|
|
5530
|
+
this.destroyRef.onDestroy(() => {
|
|
5531
|
+
this.document.removeEventListener('keydown', this.onKeydown);
|
|
5532
|
+
});
|
|
5533
|
+
}
|
|
5534
|
+
/**
|
|
5535
|
+
* Handles `keydown` events. Matches `e.key` (case-insensitive) against the
|
|
5536
|
+
* configured shortcuts. `playPause` uses `e.code` to reliably detect Space.
|
|
5537
|
+
* Number keys `0`–`9` jump to the corresponding percentage of total duration.
|
|
5538
|
+
*/
|
|
5539
|
+
onKeydown = (e) => {
|
|
5540
|
+
const config = this.evaKeyboardShortcutsConfiguration();
|
|
5541
|
+
const key = e.key.toUpperCase();
|
|
5542
|
+
const code = e.code.toUpperCase();
|
|
5543
|
+
const target = e.target;
|
|
5544
|
+
if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {
|
|
5545
|
+
return;
|
|
5546
|
+
}
|
|
5547
|
+
if (config.backwardsKeyOne && key === config.backwardsKeyOne.toUpperCase()) {
|
|
5548
|
+
e.preventDefault();
|
|
5549
|
+
this.api.seekBack(config.backwardSeconds);
|
|
5550
|
+
}
|
|
5551
|
+
else if (config.forwardKeyOne && key === config.forwardKeyOne.toUpperCase()) {
|
|
5552
|
+
e.preventDefault();
|
|
5553
|
+
this.api.seekForward(config.forwardSeconds);
|
|
5554
|
+
}
|
|
5555
|
+
else if (config.backwardsKeyTwo && key === config.backwardsKeyTwo.toUpperCase()) {
|
|
5556
|
+
e.preventDefault();
|
|
5557
|
+
this.api.seekBack(config.backwardSeconds);
|
|
5558
|
+
}
|
|
5559
|
+
else if (config.forwardKeyTwo && key === config.forwardKeyTwo.toUpperCase()) {
|
|
5560
|
+
e.preventDefault();
|
|
5561
|
+
this.api.seekForward(config.forwardSeconds);
|
|
5562
|
+
}
|
|
5563
|
+
else if (config.fullscreen && key === config.fullscreen.toUpperCase()) {
|
|
5564
|
+
e.preventDefault();
|
|
5565
|
+
this.fullscreenService.toggleFullscreen();
|
|
5566
|
+
}
|
|
5567
|
+
else if (config.muteKey && key === config.muteKey.toUpperCase()) {
|
|
5568
|
+
e.preventDefault();
|
|
5569
|
+
this.api.muteOrUnmuteVideo();
|
|
5570
|
+
}
|
|
5571
|
+
else if (config.playPause && code === config.playPause.toUpperCase()) {
|
|
5572
|
+
e.preventDefault();
|
|
5573
|
+
this.api.playOrPauseVideo();
|
|
5574
|
+
}
|
|
5575
|
+
else if (config.oneFrameBackward && key === config.oneFrameBackward.toUpperCase()) {
|
|
5576
|
+
e.preventDefault();
|
|
5577
|
+
this.api.seekBack(FRAME_DURATION_SECONDS);
|
|
5578
|
+
}
|
|
5579
|
+
else if (config.oneFrameForward && key === config.oneFrameForward.toUpperCase()) {
|
|
5580
|
+
e.preventDefault();
|
|
5581
|
+
this.api.seekForward(FRAME_DURATION_SECONDS);
|
|
5582
|
+
}
|
|
5583
|
+
else if (this.isNumberPressed(key)) {
|
|
5584
|
+
e.preventDefault();
|
|
5585
|
+
this.api.jumpToVideoPercentage(key);
|
|
5586
|
+
}
|
|
5587
|
+
};
|
|
5588
|
+
/** Returns `true` if the key is a digit `0`–`9`. */
|
|
5589
|
+
isNumberPressed(key) {
|
|
5590
|
+
return key === "0" || key === "1" || key === "2" || key === "3" || key === "4" || key === "5" || key === "6" || key === "7" || key === "8" || key === "9";
|
|
5591
|
+
}
|
|
5592
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaKeyboardShortcuts, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
5593
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: EvaKeyboardShortcuts, isStandalone: true, selector: "[evaKeyboardShortcuts]", inputs: { evaKeyboardShortcutsEnabled: { classPropertyName: "evaKeyboardShortcutsEnabled", publicName: "evaKeyboardShortcutsEnabled", isSignal: true, isRequired: true, transformFunction: null }, evaKeyboardShortcutsConfiguration: { classPropertyName: "evaKeyboardShortcutsConfiguration", publicName: "evaKeyboardShortcutsConfiguration", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
|
|
5594
|
+
}
|
|
5595
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaKeyboardShortcuts, decorators: [{
|
|
5596
|
+
type: Directive,
|
|
5597
|
+
args: [{
|
|
5598
|
+
selector: '[evaKeyboardShortcuts]',
|
|
5599
|
+
}]
|
|
5600
|
+
}], ctorParameters: () => [], propDecorators: { evaKeyboardShortcutsEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaKeyboardShortcutsEnabled", required: true }] }], evaKeyboardShortcutsConfiguration: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaKeyboardShortcutsConfiguration", required: true }] }] } });
|
|
5601
|
+
|
|
5421
5602
|
/**
|
|
5422
5603
|
* Root player component for the Eva video player.
|
|
5423
5604
|
*
|
|
@@ -5469,6 +5650,21 @@ class EvaPlayer {
|
|
|
5469
5650
|
*/
|
|
5470
5651
|
evaVideoConfiguration = input({}, /* @ts-ignore */
|
|
5471
5652
|
...(ngDevMode ? [{ debugName: "evaVideoConfiguration" }] : /* istanbul ignore next */ []));
|
|
5653
|
+
/**
|
|
5654
|
+
* Enables keyboard shortcuts on the player.
|
|
5655
|
+
* When `true`, the `EvaKeyboardShortcuts` directive listens for `keydown` events on the document.
|
|
5656
|
+
*
|
|
5657
|
+
* @default false
|
|
5658
|
+
*/
|
|
5659
|
+
evaKeyboardShortcutsEnabled = input(false, /* @ts-ignore */
|
|
5660
|
+
...(ngDevMode ? [{ debugName: "evaKeyboardShortcutsEnabled" }] : /* istanbul ignore next */ []));
|
|
5661
|
+
/**
|
|
5662
|
+
* Key binding configuration for keyboard shortcuts.
|
|
5663
|
+
* Partial configs are merged with defaults via `validateAndTransformEvaKeyboardShortcutsConfiguration`.
|
|
5664
|
+
*
|
|
5665
|
+
* @default prepareDefaultKeyboardShortcutsConfiguration()
|
|
5666
|
+
*/
|
|
5667
|
+
evaKeyboardShortcutsConfiguration = input(prepareDefaultKeyboardShortcutsConfiguration(), { ...(ngDevMode ? { debugName: "evaKeyboardShortcutsConfiguration" } : /* istanbul ignore next */ {}), transform: validateAndTransformEvaKeyboardShortcutsConfiguration });
|
|
5472
5668
|
/**
|
|
5473
5669
|
* List of subtitle/text tracks to attach to the video element.
|
|
5474
5670
|
* Validated and transformed via `validateTracks`.
|
|
@@ -5536,13 +5732,13 @@ class EvaPlayer {
|
|
|
5536
5732
|
videoConfigReady() {
|
|
5537
5733
|
this.playerMainAPI.onPlayerReady();
|
|
5538
5734
|
}
|
|
5539
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
5540
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.
|
|
5735
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaPlayer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5736
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: EvaPlayer, isStandalone: true, selector: "eva-player", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: true, transformFunction: null }, evaVideoSources: { classPropertyName: "evaVideoSources", publicName: "evaVideoSources", isSignal: true, isRequired: true, transformFunction: null }, evaVideoConfiguration: { classPropertyName: "evaVideoConfiguration", publicName: "evaVideoConfiguration", isSignal: true, isRequired: false, transformFunction: null }, evaKeyboardShortcutsEnabled: { classPropertyName: "evaKeyboardShortcutsEnabled", publicName: "evaKeyboardShortcutsEnabled", isSignal: true, isRequired: false, transformFunction: null }, evaKeyboardShortcutsConfiguration: { classPropertyName: "evaKeyboardShortcutsConfiguration", publicName: "evaKeyboardShortcutsConfiguration", isSignal: true, isRequired: false, transformFunction: null }, evaVideoTracks: { classPropertyName: "evaVideoTracks", publicName: "evaVideoTracks", isSignal: true, isRequired: false, transformFunction: null }, evaNotSupportedText: { classPropertyName: "evaNotSupportedText", publicName: "evaNotSupportedText", isSignal: true, isRequired: false, transformFunction: null } }, providers: [EvaApi, EvaFullscreenAPI], viewQueries: [{ propertyName: "evaVideoElement", first: true, predicate: ["evaVideoElement"], descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "<video #evaVideoElement [id]=\"id()\" evaMediaEventListeners evaVideoConfiguration evaKeyboardShortcuts\n\t[evaKeyboardShortcutsEnabled]=\"evaKeyboardShortcutsEnabled()\"\n\t[evaKeyboardShortcutsConfiguration]=\"evaKeyboardShortcutsConfiguration()\" [evaVideoConfig]=\"evaVideoConfiguration()\"\n\t(videoConfigurationDone)=\"videoConfigReady()\">\n\t@for (vs of evaVideoSources(); track $index) {\n\t<source #evaVideoSources [type]=\"vs.type\" [src]=\"vs.src\" />\n\t}\n\t@if(evaNotSupportedText()){\n\t<p>{{evaNotSupportedText()}}</p>\n\t}\n\n\t@for (t of evaVideoTracks(); track $index) {\n\t<track #evaVideoTracks [default]=\"t.default\" [kind]=\"t.kind\" [label]=\"t.label\" [src]=\"t.src\" [srclang]=\"t.srclang\"\n\t\t[ariaLabel]=\"t.label\" evaCueChange\n\t\t[evaCueChangeActive]=\"t.kind === 'subtitles' && activeSubtitleLabel() === t.label\" />\n\t}\n</video>\n\n<ng-content></ng-content>", styles: [":host{display:block;position:relative;padding:0;margin:0;border:0;border-radius:0;overflow:hidden}:host>video{display:block;width:100%;object-fit:contain;object-position:0 0;transition:padding-bottom var(--eva-transition-duration) ease-in-out}:host(video::cue){font-family:var(--eva-font-family);color:unset;background-color:transparent;font-size:0px;text-decoration:none;text-shadow:none}\n"], dependencies: [{ kind: "directive", type: EvaMediaEventListenersDirective, selector: "video[evaMediaEventListeners]" }, { kind: "directive", type: EvaVideoConfigurationDirective, selector: "video[evaVideoConfiguration]", inputs: ["evaVideoConfig"], outputs: ["videoConfigurationDone"] }, { kind: "directive", type: EvaCueChangeDirective, selector: "track[evaCueChange]", inputs: ["evaCueChangeActive"] }, { kind: "directive", type: EvaKeyboardShortcuts, selector: "[evaKeyboardShortcuts]", inputs: ["evaKeyboardShortcutsEnabled", "evaKeyboardShortcutsConfiguration"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5541
5737
|
}
|
|
5542
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
5738
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaPlayer, decorators: [{
|
|
5543
5739
|
type: Component,
|
|
5544
|
-
args: [{ selector: 'eva-player', imports: [EvaMediaEventListenersDirective, EvaVideoConfigurationDirective, EvaCueChangeDirective], changeDetection: ChangeDetectionStrategy.OnPush, providers: [EvaApi, EvaFullscreenAPI], template: "<video #evaVideoElement [id]=\"id()\" evaMediaEventListeners evaVideoConfiguration\n\t[evaVideoConfig]=\"evaVideoConfiguration()\"
|
|
5545
|
-
}], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: true }] }], evaVideoSources: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaVideoSources", required: true }] }], evaVideoConfiguration: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaVideoConfiguration", required: false }] }], evaVideoTracks: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaVideoTracks", required: false }] }], evaNotSupportedText: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaNotSupportedText", required: false }] }], evaVideoElement: [{ type: i0.ViewChild, args: ['evaVideoElement', { isSignal: true }] }] } });
|
|
5740
|
+
args: [{ selector: 'eva-player', imports: [EvaMediaEventListenersDirective, EvaVideoConfigurationDirective, EvaCueChangeDirective, EvaKeyboardShortcuts], changeDetection: ChangeDetectionStrategy.OnPush, providers: [EvaApi, EvaFullscreenAPI], template: "<video #evaVideoElement [id]=\"id()\" evaMediaEventListeners evaVideoConfiguration evaKeyboardShortcuts\n\t[evaKeyboardShortcutsEnabled]=\"evaKeyboardShortcutsEnabled()\"\n\t[evaKeyboardShortcutsConfiguration]=\"evaKeyboardShortcutsConfiguration()\" [evaVideoConfig]=\"evaVideoConfiguration()\"\n\t(videoConfigurationDone)=\"videoConfigReady()\">\n\t@for (vs of evaVideoSources(); track $index) {\n\t<source #evaVideoSources [type]=\"vs.type\" [src]=\"vs.src\" />\n\t}\n\t@if(evaNotSupportedText()){\n\t<p>{{evaNotSupportedText()}}</p>\n\t}\n\n\t@for (t of evaVideoTracks(); track $index) {\n\t<track #evaVideoTracks [default]=\"t.default\" [kind]=\"t.kind\" [label]=\"t.label\" [src]=\"t.src\" [srclang]=\"t.srclang\"\n\t\t[ariaLabel]=\"t.label\" evaCueChange\n\t\t[evaCueChangeActive]=\"t.kind === 'subtitles' && activeSubtitleLabel() === t.label\" />\n\t}\n</video>\n\n<ng-content></ng-content>", styles: [":host{display:block;position:relative;padding:0;margin:0;border:0;border-radius:0;overflow:hidden}:host>video{display:block;width:100%;object-fit:contain;object-position:0 0;transition:padding-bottom var(--eva-transition-duration) ease-in-out}:host(video::cue){font-family:var(--eva-font-family);color:unset;background-color:transparent;font-size:0px;text-decoration:none;text-shadow:none}\n"] }]
|
|
5741
|
+
}], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: true }] }], evaVideoSources: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaVideoSources", required: true }] }], evaVideoConfiguration: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaVideoConfiguration", required: false }] }], evaKeyboardShortcutsEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaKeyboardShortcutsEnabled", required: false }] }], evaKeyboardShortcutsConfiguration: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaKeyboardShortcutsConfiguration", required: false }] }], evaVideoTracks: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaVideoTracks", required: false }] }], evaNotSupportedText: [{ type: i0.Input, args: [{ isSignal: true, alias: "evaNotSupportedText", required: false }] }], evaVideoElement: [{ type: i0.ViewChild, args: ['evaVideoElement', { isSignal: true }] }] } });
|
|
5546
5742
|
|
|
5547
5743
|
/**
|
|
5548
5744
|
* DASH streaming directive for the Eva video player.
|
|
@@ -5759,10 +5955,10 @@ class EvaDashDirective {
|
|
|
5759
5955
|
getDashInstance() {
|
|
5760
5956
|
return this.dash;
|
|
5761
5957
|
}
|
|
5762
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
5763
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.
|
|
5958
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaDashDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
5959
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: EvaDashDirective, isStandalone: true, selector: "eva-player[evaDash]", inputs: { evaDashSrc: { classPropertyName: "evaDashSrc", publicName: "evaDashSrc", isSignal: true, isRequired: true, transformFunction: null }, evaDashDRMToken: { classPropertyName: "evaDashDRMToken", publicName: "evaDashDRMToken", isSignal: true, isRequired: false, transformFunction: null }, evaDashDRMLicenseServer: { classPropertyName: "evaDashDRMLicenseServer", publicName: "evaDashDRMLicenseServer", isSignal: true, isRequired: false, transformFunction: null }, evaDashConfig: { classPropertyName: "evaDashConfig", publicName: "evaDashConfig", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["evaDash"], usesOnChanges: true, ngImport: i0 });
|
|
5764
5960
|
}
|
|
5765
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
5961
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaDashDirective, decorators: [{
|
|
5766
5962
|
type: Directive,
|
|
5767
5963
|
args: [{
|
|
5768
5964
|
selector: 'eva-player[evaDash]',
|
|
@@ -5963,10 +6159,10 @@ class EvaHlsDirective {
|
|
|
5963
6159
|
getHlsInstance() {
|
|
5964
6160
|
return this.hls;
|
|
5965
6161
|
}
|
|
5966
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
5967
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.
|
|
6162
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaHlsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
6163
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: EvaHlsDirective, isStandalone: true, selector: "eva-player[evaHls]", inputs: { evaHlsSrc: { classPropertyName: "evaHlsSrc", publicName: "evaHlsSrc", isSignal: true, isRequired: true, transformFunction: null }, evaHlsHeaders: { classPropertyName: "evaHlsHeaders", publicName: "evaHlsHeaders", isSignal: true, isRequired: false, transformFunction: null }, evaHlsConfig: { classPropertyName: "evaHlsConfig", publicName: "evaHlsConfig", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["evaHls"], usesOnChanges: true, ngImport: i0 });
|
|
5968
6164
|
}
|
|
5969
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
6165
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: EvaHlsDirective, decorators: [{
|
|
5970
6166
|
type: Directive,
|
|
5971
6167
|
args: [{
|
|
5972
6168
|
selector: 'eva-player[evaHls]',
|
|
@@ -5978,5 +6174,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
5978
6174
|
* Generated bundle index. Do not edit.
|
|
5979
6175
|
*/
|
|
5980
6176
|
|
|
5981
|
-
export { EvaActiveChapter, EvaBackward, EvaBuffering, EvaControlsContainer, EvaControlsDivider, EvaCueChangeDirective, EvaDashDirective, EvaForward, EvaFullscreen, EvaHlsDirective, EvaMediaEventListenersDirective, EvaMute, EvaOverlayPlay, EvaPictureInPicture, EvaPlayPause, EvaPlaybackSpeed, EvaPlayer, EvaQualitySelector, EvaScrubBar, EvaScrubBarBufferingTime, EvaScrubBarCurrentTime, EvaState, EvaSubtitleDisplay, EvaTimeDisplay, EvaTimeDisplayPipe, EvaTrackSelector, EvaUserInteractionEventsDirective, EvaVideoConfigurationDirective, EvaVideoEvent, EvaVolume, isValidTrackKind, isValidVideoEvent, transformEvaActiveChapterAria, transformEvaBackwardAria, transformEvaControlsDividerAria, transformEvaForwardAria, transformEvaFullscreenAria, transformEvaMuteAria, transformEvaOverlayPlayAria, transformEvaPictureInPictureAria, transformEvaPlayPauseAria, transformEvaPlaybackSpeedAria, transformEvaScrubBarAria, transformEvaTimeDisplayAria, transformEvaVolumeAria, validateAndTransformEvaForwardAndBackwardSeconds, validateAndTransformVolumeRange };
|
|
6177
|
+
export { EvaActiveChapter, EvaBackward, EvaBuffering, EvaControlsContainer, EvaControlsDivider, EvaCueChangeDirective, EvaDashDirective, EvaForward, EvaFullscreen, EvaHlsDirective, EvaKeyboardShortcuts, EvaMediaEventListenersDirective, EvaMute, EvaOverlayPlay, EvaPictureInPicture, EvaPlayPause, EvaPlaybackSpeed, EvaPlayer, EvaQualitySelector, EvaScrubBar, EvaScrubBarBufferingTime, EvaScrubBarCurrentTime, EvaState, EvaSubtitleDisplay, EvaTimeDisplay, EvaTimeDisplayPipe, EvaTrackSelector, EvaUserInteractionEventsDirective, EvaVideoConfigurationDirective, EvaVideoEvent, EvaVolume, isValidTrackKind, isValidVideoEvent, transformEvaActiveChapterAria, transformEvaBackwardAria, transformEvaControlsDividerAria, transformEvaForwardAria, transformEvaFullscreenAria, transformEvaMuteAria, transformEvaOverlayPlayAria, transformEvaPictureInPictureAria, transformEvaPlayPauseAria, transformEvaPlaybackSpeedAria, transformEvaScrubBarAria, transformEvaTimeDisplayAria, transformEvaVolumeAria, validateAndTransformEvaForwardAndBackwardSeconds, validateAndTransformVolumeRange };
|
|
5982
6178
|
//# sourceMappingURL=ez-vid-ang.mjs.map
|