@vonage/vivid 3.56.0 → 3.58.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +183 -0
- package/lib/audio-player/audio-player.d.ts +17 -0
- package/lib/fab/fab.d.ts +1 -1
- package/package.json +1 -1
- package/shared/definition16.cjs +1 -1
- package/shared/definition16.js +1 -1
- package/shared/definition24.cjs +1 -1
- package/shared/definition24.js +1 -1
- package/shared/definition35.cjs +1 -1
- package/shared/definition35.js +1 -1
- package/shared/definition42.cjs +1 -1
- package/shared/definition42.js +1 -1
- package/shared/definition43.cjs +2 -2
- package/shared/definition43.js +2 -2
- package/shared/definition46.cjs +1 -1
- package/shared/definition46.js +1 -1
- package/shared/definition5.cjs +138 -120
- package/shared/definition5.js +139 -121
- package/shared/definition50.cjs +1 -1
- package/shared/definition50.js +1 -1
- package/shared/definition58.cjs +1 -1
- package/shared/definition58.js +1 -1
- package/shared/definition61.cjs +23 -9
- package/shared/definition61.js +23 -9
- package/shared/definition7.cjs +1 -1
- package/shared/definition7.js +1 -1
- package/shared/icon.cjs +1 -1
- package/shared/icon.js +1 -1
- package/shared/patterns/anchored.d.ts +4 -4
- package/shared/slider.template.cjs +3 -3
- package/shared/slider.template.js +3 -3
- package/shared/text-field.cjs +1 -1
- package/shared/text-field.js +1 -1
- package/styles/core/all.css +1 -1
- package/styles/core/theme.css +1 -1
- package/styles/core/typography.css +1 -1
- package/styles/tokens/theme-dark.css +4 -4
- package/styles/tokens/theme-light.css +4 -4
- package/styles/tokens/vivid-2-compat.css +1 -1
- package/vivid.api.json +10 -1
package/shared/definition46.cjs
CHANGED
|
@@ -484,7 +484,7 @@ index.__decorate([
|
|
|
484
484
|
index.attr
|
|
485
485
|
], Slider$1.prototype, "mode", void 0);
|
|
486
486
|
|
|
487
|
-
const styles = ":host{display:inline-block}:host(:not([orientation=vertical])){inline-size:100%}:host([orientation=vertical]){block-size:100%;min-block-size:calc(var(--_thumb-interaction-indicator-size) * 5)}:host([disabled]){cursor:not-allowed}.control{--_thumb-size: 12px;--_thumb-interaction-indicator-size: 36px;--_track-start-inset-inline-start: 0;--_track-start-inset-block-start: 0;cursor:pointer;outline:none;user-select:none}.control.connotation-cta{--_connotation-color-primary: var(--vvd-slider-cta-primary, var(--vvd-color-cta-500))}.control:not(.connotation-cta){--_connotation-color-primary: var(--vvd-slider-accent-primary, var(--vvd-color-canvas-text))}.control{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}.control .positioning-region{position:relative}.control .track{position:absolute;border-radius:4px;background:var(--_track-background-color)}.control .track-start{position:absolute;border-radius:inherit;background:var(--_track-start-background-color);block-size:100%;inset-inline-start:var(--_track-start-inset-inline-start)}.control.horizontal{block-size:var(--_thumb-interaction-indicator-size);inline-size:calc(100% - var(--_thumb-size));margin-inline-start:calc(var(--_thumb-size) / 2);min-inline-size:var(--_thumb-size)}.control.horizontal .track{top:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);right:0;left:0;block-size:2px}.control.horizontal .track .mark{block-size:
|
|
487
|
+
const styles = ":host{display:inline-block}:host(:not([orientation=vertical])){inline-size:100%}:host([orientation=vertical]){block-size:100%;min-block-size:calc(var(--_thumb-interaction-indicator-size) * 5)}:host([disabled]){cursor:not-allowed}.control{--_thumb-size: 12px;--_thumb-interaction-indicator-size: 36px;--_track-start-inset-inline-start: 0;--_track-start-inset-block-start: 0;cursor:pointer;outline:none;user-select:none}.control.connotation-cta{--_connotation-color-primary: var(--vvd-slider-cta-primary, var(--vvd-color-cta-500))}.control:not(.connotation-cta){--_connotation-color-primary: var(--vvd-slider-accent-primary, var(--vvd-color-canvas-text))}.control{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}.control .positioning-region{position:relative}.control .track{position:absolute;border-radius:4px;background:var(--_track-background-color)}.control .track-start{position:absolute;border-radius:inherit;background:var(--_track-start-background-color);block-size:100%;inset-inline-start:var(--_track-start-inset-inline-start)}.control.horizontal{block-size:var(--_thumb-interaction-indicator-size);inline-size:calc(100% - var(--_thumb-size));margin-inline-start:calc(var(--_thumb-size) / 2);min-inline-size:var(--_thumb-size)}.control.horizontal .track{top:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);right:0;left:0;block-size:2px}:host([markers]) .control.horizontal .track-start{--_track-start-inset-inline-start: 1px;border-bottom-left-radius:0;border-top-left-radius:0}.control.horizontal .track .mark{position:absolute;block-size:6px;inline-size:100%;inset-block-start:-2px;inset-inline-start:0}.control.vertical{margin-top:calc(var(--_thumb-interaction-indicator-size) / 2);block-size:calc(100% - var(--_thumb-interaction-indicator-size));inline-size:var(--_thumb-interaction-indicator-size);min-block-size:var(--_thumb-interaction-indicator-size)}.control.vertical .positioning-region{block-size:100%}.control.vertical .track{left:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);block-size:100%;inline-size:2px}.control.vertical .track .mark{position:absolute;block-size:100%;inline-size:6px;inset-block-start:0;inset-inline-start:-2px}.control.vertical .track-start{block-size:auto;inline-size:100%;inset-block-start:var(--_track-start-inset-block-start)}:host([markers]) .control.vertical .track-start{--_track-start-inset-block-start: 1px;border-radius:0}.control.disabled{--_track-background-color: var(--vvd-color-neutral-100);--_track-start-background-color: var(--vvd-color-neutral-300);pointer-events:none}.control:not(.disabled){--_track-background-color: var(--vvd-color-neutral-300);--_track-start-background-color: var(--_appearance-color-fill)}.control:not(.disabled) .mark{color:var(--vvd-color-neutral-950)}.control.disabled .mark{color:var(--_track-start-background-color)}.thumb-container{position:absolute;border-radius:50%;block-size:var(--_thumb-interaction-indicator-size);cursor:inherit;inline-size:var(--_thumb-interaction-indicator-size);outline-color:transparent;touch-action:none}:focus-visible .thumb-container,.thumb-container:focus-visible{box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent;--_thumb-interaction-indicator-alpha: .05;border-radius:50%}.control.horizontal .thumb-container{transform:translate(calc(var(--_thumb-interaction-indicator-size) / 2))}.control.vertical .thumb-container{transform:translateY(calc(var(--_thumb-interaction-indicator-size) / 2))}.control:not(.disabled) .thumb-container:hover{--_thumb-interaction-indicator-alpha: .12}.control:not(.disabled) .thumb-container:active{--_thumb-interaction-indicator-alpha: .25}.thumb-container:before{position:absolute;display:block;border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-interaction-indicator-size);content:\"\";inline-size:var(--_thumb-interaction-indicator-size);opacity:var(--_thumb-interaction-indicator-alpha, 0);transition:opacity .2s ease-out 0s}.thumb-container:after{position:absolute;display:block;border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-size);content:\"\";inline-size:var(--_thumb-size);inset:calc((var(--_thumb-interaction-indicator-size) - var(--_thumb-size)) / 2)}";
|
|
488
488
|
|
|
489
489
|
var __defProp = Object.defineProperty;
|
|
490
490
|
var __decorateClass = (decorators, target, key, kind) => {
|
package/shared/definition46.js
CHANGED
|
@@ -482,7 +482,7 @@ __decorate([
|
|
|
482
482
|
attr
|
|
483
483
|
], Slider$1.prototype, "mode", void 0);
|
|
484
484
|
|
|
485
|
-
const styles = ":host{display:inline-block}:host(:not([orientation=vertical])){inline-size:100%}:host([orientation=vertical]){block-size:100%;min-block-size:calc(var(--_thumb-interaction-indicator-size) * 5)}:host([disabled]){cursor:not-allowed}.control{--_thumb-size: 12px;--_thumb-interaction-indicator-size: 36px;--_track-start-inset-inline-start: 0;--_track-start-inset-block-start: 0;cursor:pointer;outline:none;user-select:none}.control.connotation-cta{--_connotation-color-primary: var(--vvd-slider-cta-primary, var(--vvd-color-cta-500))}.control:not(.connotation-cta){--_connotation-color-primary: var(--vvd-slider-accent-primary, var(--vvd-color-canvas-text))}.control{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}.control .positioning-region{position:relative}.control .track{position:absolute;border-radius:4px;background:var(--_track-background-color)}.control .track-start{position:absolute;border-radius:inherit;background:var(--_track-start-background-color);block-size:100%;inset-inline-start:var(--_track-start-inset-inline-start)}.control.horizontal{block-size:var(--_thumb-interaction-indicator-size);inline-size:calc(100% - var(--_thumb-size));margin-inline-start:calc(var(--_thumb-size) / 2);min-inline-size:var(--_thumb-size)}.control.horizontal .track{top:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);right:0;left:0;block-size:2px}.control.horizontal .track .mark{block-size:
|
|
485
|
+
const styles = ":host{display:inline-block}:host(:not([orientation=vertical])){inline-size:100%}:host([orientation=vertical]){block-size:100%;min-block-size:calc(var(--_thumb-interaction-indicator-size) * 5)}:host([disabled]){cursor:not-allowed}.control{--_thumb-size: 12px;--_thumb-interaction-indicator-size: 36px;--_track-start-inset-inline-start: 0;--_track-start-inset-block-start: 0;cursor:pointer;outline:none;user-select:none}.control.connotation-cta{--_connotation-color-primary: var(--vvd-slider-cta-primary, var(--vvd-color-cta-500))}.control:not(.connotation-cta){--_connotation-color-primary: var(--vvd-slider-accent-primary, var(--vvd-color-canvas-text))}.control{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}.control .positioning-region{position:relative}.control .track{position:absolute;border-radius:4px;background:var(--_track-background-color)}.control .track-start{position:absolute;border-radius:inherit;background:var(--_track-start-background-color);block-size:100%;inset-inline-start:var(--_track-start-inset-inline-start)}.control.horizontal{block-size:var(--_thumb-interaction-indicator-size);inline-size:calc(100% - var(--_thumb-size));margin-inline-start:calc(var(--_thumb-size) / 2);min-inline-size:var(--_thumb-size)}.control.horizontal .track{top:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);right:0;left:0;block-size:2px}:host([markers]) .control.horizontal .track-start{--_track-start-inset-inline-start: 1px;border-bottom-left-radius:0;border-top-left-radius:0}.control.horizontal .track .mark{position:absolute;block-size:6px;inline-size:100%;inset-block-start:-2px;inset-inline-start:0}.control.vertical{margin-top:calc(var(--_thumb-interaction-indicator-size) / 2);block-size:calc(100% - var(--_thumb-interaction-indicator-size));inline-size:var(--_thumb-interaction-indicator-size);min-block-size:var(--_thumb-interaction-indicator-size)}.control.vertical .positioning-region{block-size:100%}.control.vertical .track{left:calc((var(--_thumb-interaction-indicator-size) - 2px) / 2);block-size:100%;inline-size:2px}.control.vertical .track .mark{position:absolute;block-size:100%;inline-size:6px;inset-block-start:0;inset-inline-start:-2px}.control.vertical .track-start{block-size:auto;inline-size:100%;inset-block-start:var(--_track-start-inset-block-start)}:host([markers]) .control.vertical .track-start{--_track-start-inset-block-start: 1px;border-radius:0}.control.disabled{--_track-background-color: var(--vvd-color-neutral-100);--_track-start-background-color: var(--vvd-color-neutral-300);pointer-events:none}.control:not(.disabled){--_track-background-color: var(--vvd-color-neutral-300);--_track-start-background-color: var(--_appearance-color-fill)}.control:not(.disabled) .mark{color:var(--vvd-color-neutral-950)}.control.disabled .mark{color:var(--_track-start-background-color)}.thumb-container{position:absolute;border-radius:50%;block-size:var(--_thumb-interaction-indicator-size);cursor:inherit;inline-size:var(--_thumb-interaction-indicator-size);outline-color:transparent;touch-action:none}:focus-visible .thumb-container,.thumb-container:focus-visible{box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent;--_thumb-interaction-indicator-alpha: .05;border-radius:50%}.control.horizontal .thumb-container{transform:translate(calc(var(--_thumb-interaction-indicator-size) / 2))}.control.vertical .thumb-container{transform:translateY(calc(var(--_thumb-interaction-indicator-size) / 2))}.control:not(.disabled) .thumb-container:hover{--_thumb-interaction-indicator-alpha: .12}.control:not(.disabled) .thumb-container:active{--_thumb-interaction-indicator-alpha: .25}.thumb-container:before{position:absolute;display:block;border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-interaction-indicator-size);content:\"\";inline-size:var(--_thumb-interaction-indicator-size);opacity:var(--_thumb-interaction-indicator-alpha, 0);transition:opacity .2s ease-out 0s}.thumb-container:after{position:absolute;display:block;border-radius:inherit;background-color:var(--_track-start-background-color);block-size:var(--_thumb-size);content:\"\";inline-size:var(--_thumb-size);inset:calc((var(--_thumb-interaction-indicator-size) - var(--_thumb-size)) / 2)}";
|
|
486
486
|
|
|
487
487
|
var __defProp = Object.defineProperty;
|
|
488
488
|
var __decorateClass = (decorators, target, key, kind) => {
|
package/shared/definition5.cjs
CHANGED
|
@@ -9,7 +9,6 @@ require('./index2.cjs');
|
|
|
9
9
|
const localized = require('./localized.cjs');
|
|
10
10
|
const applyMixins = require('./apply-mixins.cjs');
|
|
11
11
|
const when = require('./when.cjs');
|
|
12
|
-
const ref = require('./ref.cjs');
|
|
13
12
|
const classNames = require('./class-names.cjs');
|
|
14
13
|
|
|
15
14
|
const styles = ":host{display:block;max-inline-size:350px}.wrapper{container-type:inline-size}.base{display:inline-flex;box-sizing:border-box;align-items:center;padding:8px;color:var(--vvd-color-canvas-text);gap:16px;inline-size:100%;user-select:none}.base .slider{flex:1;grid-area:slider;min-inline-size:var(--audio-player-min-inline-size, 200px)}.base .controls{display:flex;align-items:center;justify-content:center;gap:8px;grid-area:controls}.base .time-stamp{display:inline-flex}.base .time-stamp .current-time,.base .time-stamp .total-time{margin-inline:6px;min-inline-size:32px}.base .playback{grid-area:playback}@container (max-width: 500px){.base.two-lines{display:inline-grid;grid-template:auto auto/1fr;grid-template-areas:\"slider\" \"controls\";inline-size:100%;row-gap:4px}.base.two-lines .time-stamp{margin-inline:auto 2px}.base.two-lines.playback{grid-template-areas:\"slider slider\" \"controls playback\";grid-template-columns:1fr auto}.base.two-lines.playback .time-stamp{margin-inline:auto}.base .slider{box-sizing:border-box;min-inline-size:auto;padding-inline:2px}}";
|
|
@@ -24,6 +23,20 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
24
23
|
__defProp(target, key, result);
|
|
25
24
|
return result;
|
|
26
25
|
};
|
|
26
|
+
const SKIP_DIRECTIONS = {
|
|
27
|
+
FORWARD: 1,
|
|
28
|
+
BACKWARD: -1
|
|
29
|
+
};
|
|
30
|
+
function formatTime(time) {
|
|
31
|
+
if (!time || Number.isNaN(time)) {
|
|
32
|
+
return "0:00";
|
|
33
|
+
}
|
|
34
|
+
const min = Math.floor(time / 60);
|
|
35
|
+
const sec = Math.floor(time % 60);
|
|
36
|
+
return min + ":" + (sec < 10 ? "0" + sec : sec);
|
|
37
|
+
}
|
|
38
|
+
const PAUSE = true;
|
|
39
|
+
const PLAY = false;
|
|
27
40
|
const validSkipByConverter = {
|
|
28
41
|
toView(value) {
|
|
29
42
|
return value;
|
|
@@ -34,7 +47,7 @@ const validSkipByConverter = {
|
|
|
34
47
|
};
|
|
35
48
|
class AudioPlayer extends index.FoundationElement {
|
|
36
49
|
constructor() {
|
|
37
|
-
super(
|
|
50
|
+
super();
|
|
38
51
|
this.playButtonAriaLabel = null;
|
|
39
52
|
this.pauseButtonAriaLabel = null;
|
|
40
53
|
this.sliderAriaLabel = null;
|
|
@@ -42,106 +55,109 @@ class AudioPlayer extends index.FoundationElement {
|
|
|
42
55
|
this.skipBackwardButtonAriaLabel = null;
|
|
43
56
|
this.disabled = false;
|
|
44
57
|
this.notime = false;
|
|
45
|
-
this
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (this.
|
|
51
|
-
this.
|
|
58
|
+
this.#playerEl = new Audio();
|
|
59
|
+
this.#pausedChanged = (pausing) => {
|
|
60
|
+
if (pausing === this.paused) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (!this.paused) {
|
|
64
|
+
this.#playerEl.pause();
|
|
65
|
+
} else {
|
|
66
|
+
this.#updateProgress();
|
|
67
|
+
this.#playerEl.play();
|
|
68
|
+
}
|
|
69
|
+
this.#setPausedState();
|
|
70
|
+
};
|
|
71
|
+
this.#updateProgress = () => {
|
|
72
|
+
index.Observable.notify(this, "currentTime");
|
|
73
|
+
const percent = this.currentTime / this.duration * 100;
|
|
74
|
+
if (percent === 100) {
|
|
75
|
+
this.pause();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
this.#updateTotalTime = () => {
|
|
79
|
+
index.Observable.notify(this, "duration");
|
|
80
|
+
};
|
|
81
|
+
this.#rewind = () => {
|
|
82
|
+
if (this.#playerEl) {
|
|
83
|
+
this.currentTime = this.duration * Number(this.#sliderEl.value) / 100;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
this.#handleSliderEvent = (event) => {
|
|
87
|
+
if (event.target === this.#sliderEl) {
|
|
88
|
+
this.pause();
|
|
89
|
+
this.#rewind();
|
|
52
90
|
}
|
|
91
|
+
return true;
|
|
53
92
|
};
|
|
93
|
+
this.#setPausedState = () => {
|
|
94
|
+
index.Observable.notify(this, "paused");
|
|
95
|
+
};
|
|
96
|
+
this.#playerEl.addEventListener("timeupdate", this.#updateProgress);
|
|
97
|
+
this.#playerEl.addEventListener("loadedmetadata", this.#updateTotalTime);
|
|
98
|
+
}
|
|
99
|
+
srcChanged() {
|
|
100
|
+
if (this.src === void 0) {
|
|
101
|
+
this.#playerEl.removeAttribute("src");
|
|
102
|
+
} else {
|
|
103
|
+
this.#playerEl.src = this.src;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
get paused() {
|
|
107
|
+
index.Observable.track(this, "paused");
|
|
108
|
+
return this.#playerEl.paused;
|
|
109
|
+
}
|
|
110
|
+
set paused(_) {
|
|
111
|
+
}
|
|
112
|
+
get duration() {
|
|
113
|
+
index.Observable.track(this, "duration");
|
|
114
|
+
return this.#playerEl.duration;
|
|
115
|
+
}
|
|
116
|
+
set duration(_) {
|
|
117
|
+
}
|
|
118
|
+
get currentTime() {
|
|
119
|
+
index.Observable.track(this, "currentTime");
|
|
120
|
+
return this.#playerEl.currentTime;
|
|
121
|
+
}
|
|
122
|
+
set currentTime(value) {
|
|
123
|
+
this.#playerEl.currentTime = value;
|
|
124
|
+
}
|
|
125
|
+
get #sliderEl() {
|
|
126
|
+
return this.shadowRoot.querySelector(".slider");
|
|
127
|
+
}
|
|
128
|
+
#playerEl;
|
|
129
|
+
get #baseElement() {
|
|
130
|
+
return this.shadowRoot.querySelector(".base");
|
|
54
131
|
}
|
|
55
132
|
connectedCallback() {
|
|
56
133
|
super.connectedCallback();
|
|
57
|
-
document.addEventListener("mouseup", this
|
|
134
|
+
document.addEventListener("mouseup", this.#rewind);
|
|
135
|
+
this.#setInteractionListeners();
|
|
136
|
+
this.#setPausedState();
|
|
58
137
|
}
|
|
59
138
|
disconnectedCallback() {
|
|
60
139
|
super.disconnectedCallback();
|
|
61
|
-
document.addEventListener("mouseup", this
|
|
140
|
+
document.addEventListener("mouseup", this.#rewind);
|
|
141
|
+
this.#setInteractionListeners(false);
|
|
62
142
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
*/
|
|
66
|
-
_togglePlay() {
|
|
67
|
-
if (this.paused) {
|
|
68
|
-
this._updateProgress();
|
|
69
|
-
this._playerEl.play();
|
|
70
|
-
} else {
|
|
71
|
-
this._playerEl.pause();
|
|
72
|
-
}
|
|
73
|
-
this.paused = !this.paused;
|
|
143
|
+
play() {
|
|
144
|
+
this.#pausedChanged(PLAY);
|
|
74
145
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
*/
|
|
78
|
-
_onSkipButtonClick(isForward) {
|
|
79
|
-
if (this._playerEl) {
|
|
80
|
-
const currentTime = this._playerEl.currentTime;
|
|
81
|
-
const skipDirection = isForward ? 1 : -1;
|
|
82
|
-
const skipValue = parseInt(this.skipBy) * skipDirection;
|
|
83
|
-
const newTime = currentTime + skipValue;
|
|
84
|
-
this._playerEl.currentTime = Math.max(
|
|
85
|
-
0,
|
|
86
|
-
Math.min(this._playerEl.duration, newTime)
|
|
87
|
-
);
|
|
88
|
-
this._updateProgress();
|
|
89
|
-
}
|
|
146
|
+
pause() {
|
|
147
|
+
this.#pausedChanged(PAUSE);
|
|
90
148
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const current = this._playerEl.currentTime;
|
|
97
|
-
const percent = current / this._playerEl.duration * 100;
|
|
98
|
-
if (this._sliderEl) {
|
|
99
|
-
this._sliderEl.value = percent.toString();
|
|
100
|
-
this._sliderEl.ariaValuetext = this._formatTime(current);
|
|
101
|
-
}
|
|
102
|
-
if (percent === 100) {
|
|
103
|
-
this.paused = true;
|
|
104
|
-
}
|
|
105
|
-
if (this._timeStampEl) {
|
|
106
|
-
currentTime = this._timeStampEl.querySelector(".current-time");
|
|
107
|
-
if (currentTime)
|
|
108
|
-
currentTime.textContent = this._formatTime(current);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* @internal
|
|
113
|
-
*/
|
|
114
|
-
_updateTotalTime() {
|
|
115
|
-
let totalTime;
|
|
116
|
-
if (this._playerEl)
|
|
117
|
-
this.duration = this._playerEl.duration;
|
|
118
|
-
if (this._timeStampEl) {
|
|
119
|
-
totalTime = this._timeStampEl.querySelector(".total-time");
|
|
120
|
-
if (totalTime)
|
|
121
|
-
totalTime.textContent = this._formatTime(this._playerEl.duration);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* @internal
|
|
126
|
-
*/
|
|
127
|
-
_handleSliderEvent(event) {
|
|
128
|
-
if (event.target === this._sliderEl) {
|
|
129
|
-
this.paused = true;
|
|
130
|
-
if (this._playerEl) {
|
|
131
|
-
this._playerEl.pause();
|
|
132
|
-
}
|
|
133
|
-
this._rewind();
|
|
134
|
-
}
|
|
135
|
-
return true;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* @internal
|
|
139
|
-
*/
|
|
140
|
-
_formatTime(time) {
|
|
141
|
-
const min = Math.floor(time / 60);
|
|
142
|
-
const sec = Math.floor(time % 60);
|
|
143
|
-
return min + ":" + (sec < 10 ? "0" + sec : sec);
|
|
149
|
+
#setInteractionListeners(add = true) {
|
|
150
|
+
const action = add ? "addEventListener" : "removeEventListener";
|
|
151
|
+
this.#baseElement[action]("keyup", this.#handleSliderEvent);
|
|
152
|
+
this.#baseElement[action]("keydown", this.#handleSliderEvent);
|
|
153
|
+
this.#baseElement[action]("mousedown", this.#handleSliderEvent);
|
|
144
154
|
}
|
|
155
|
+
#pausedChanged;
|
|
156
|
+
#updateProgress;
|
|
157
|
+
#updateTotalTime;
|
|
158
|
+
#rewind;
|
|
159
|
+
#handleSliderEvent;
|
|
160
|
+
#setPausedState;
|
|
145
161
|
}
|
|
146
162
|
__decorateClass([
|
|
147
163
|
index.attr({ attribute: "play-button-aria-label" })
|
|
@@ -176,18 +192,27 @@ __decorateClass([
|
|
|
176
192
|
converter: validSkipByConverter
|
|
177
193
|
})
|
|
178
194
|
], AudioPlayer.prototype, "skipBy");
|
|
179
|
-
__decorateClass([
|
|
180
|
-
index.observable
|
|
181
|
-
], AudioPlayer.prototype, "paused");
|
|
182
|
-
__decorateClass([
|
|
183
|
-
index.observable
|
|
184
|
-
], AudioPlayer.prototype, "duration");
|
|
185
195
|
applyMixins.applyMixins(AudioPlayer, localized.Localized);
|
|
186
196
|
|
|
197
|
+
function getCurrentTimePercentage(x) {
|
|
198
|
+
if (Number.isNaN(x.currentTime) || Number.isNaN(x.duration)) {
|
|
199
|
+
return 0;
|
|
200
|
+
}
|
|
201
|
+
return x.currentTime / x.duration * 100;
|
|
202
|
+
}
|
|
203
|
+
function skip(audioElement, skipDirection) {
|
|
204
|
+
const currentTime = audioElement.currentTime;
|
|
205
|
+
const skipValue = parseInt(audioElement.skipBy) * skipDirection;
|
|
206
|
+
const newTime = currentTime + skipValue;
|
|
207
|
+
audioElement.currentTime = Math.max(
|
|
208
|
+
0,
|
|
209
|
+
Math.min(audioElement.duration, newTime)
|
|
210
|
+
);
|
|
211
|
+
}
|
|
187
212
|
const getClasses = ({ disabled, duration }) => classNames.classNames(["disabled", Boolean(disabled) || !duration]);
|
|
188
213
|
function renderButton(context) {
|
|
189
214
|
const buttonTag = context.tagFor(definition.Button);
|
|
190
|
-
return index.html`<${buttonTag} class="pause" @click="${(x) => x.
|
|
215
|
+
return index.html`<${buttonTag} class="pause" @click="${(x) => x.paused ? x.play() : x.pause()}"
|
|
191
216
|
icon="${(x) => x.paused ? "play-solid" : "pause-solid"}"
|
|
192
217
|
aria-label="${(x) => x.paused ? x.playButtonAriaLabel || x.locale.audioPlayer.playButtonLabel : x.pauseButtonAriaLabel || x.locale.audioPlayer.pauseButtonLabel}"
|
|
193
218
|
size='condensed'
|
|
@@ -198,7 +223,8 @@ function renderButton(context) {
|
|
|
198
223
|
function renderBackwardSkipButtons(context) {
|
|
199
224
|
const buttonTag = context.tagFor(definition.Button);
|
|
200
225
|
return index.html`
|
|
201
|
-
<${buttonTag} class="skip backward"
|
|
226
|
+
<${buttonTag} class="skip backward"
|
|
227
|
+
@click="${(element) => skip(element, SKIP_DIRECTIONS.BACKWARD)}"
|
|
202
228
|
icon="${(x) => x.skipBy == enums.MediaSkipBy.Five ? "5-sec-backward-line" : x.skipBy == enums.MediaSkipBy.Thirty ? "30-sec-backward-line" : "10-sec-backward-line"}"
|
|
203
229
|
size='condensed'
|
|
204
230
|
aria-label="${(x) => x.skipBackwardButtonAriaLabel || x.locale.audioPlayer.skipBackwardButton}"
|
|
@@ -210,7 +236,8 @@ function renderBackwardSkipButtons(context) {
|
|
|
210
236
|
function renderForwardSkipButtons(context) {
|
|
211
237
|
const buttonTag = context.tagFor(definition.Button);
|
|
212
238
|
return index.html`
|
|
213
|
-
<${buttonTag} class="skip forward"
|
|
239
|
+
<${buttonTag} class="skip forward"
|
|
240
|
+
@click="${(element) => skip(element, SKIP_DIRECTIONS.FORWARD)}"
|
|
214
241
|
icon="${(x) => x.skipBy == enums.MediaSkipBy.Five ? "5-sec-forward-line" : x.skipBy == enums.MediaSkipBy.Thirty ? "30-sec-forward-line" : "10-sec-forward-line"}"
|
|
215
242
|
size='condensed'
|
|
216
243
|
aria-label="${(x) => x.skipForwardButtonAriaLabel || x.locale.audioPlayer.skipForwardButton}"
|
|
@@ -221,29 +248,26 @@ function renderForwardSkipButtons(context) {
|
|
|
221
248
|
}
|
|
222
249
|
function renderSlider(context) {
|
|
223
250
|
const sliderTag = context.tagFor(definition$1.Slider);
|
|
224
|
-
return index.html
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
251
|
+
return index.html`
|
|
252
|
+
<${sliderTag}
|
|
253
|
+
class="slider"
|
|
254
|
+
aria-label="${(x) => x.sliderAriaLabel || x.locale.audioPlayer.sliderLabel}"
|
|
255
|
+
value="${getCurrentTimePercentage}" max="100"
|
|
256
|
+
ariaValuetext="${(x) => formatTime(x.currentTime)}"
|
|
257
|
+
connotation="${(x) => x.connotation}"
|
|
258
|
+
?disabled="${(x) => x.disabled || !x.duration}">
|
|
230
259
|
</${sliderTag}>`;
|
|
231
260
|
}
|
|
232
261
|
function renderTimestamp() {
|
|
233
|
-
return index.html` <div class="time-stamp"
|
|
234
|
-
<span class="current-time"
|
|
262
|
+
return index.html` <div class="time-stamp">
|
|
263
|
+
<span class="current-time">${(x) => formatTime(x.currentTime)}</span>
|
|
235
264
|
<span>/</span>
|
|
236
|
-
<span class="total-time"
|
|
265
|
+
<span class="total-time">${(x) => formatTime(x.duration)}</span>
|
|
237
266
|
</div>`;
|
|
238
267
|
}
|
|
239
268
|
const AudioPlayerTemplate = (context) => {
|
|
240
269
|
return index.html` <div class="wrapper">
|
|
241
|
-
<div
|
|
242
|
-
class="base ${getClasses}"
|
|
243
|
-
@keyup="${(x, c) => x._handleSliderEvent(c.event)}"
|
|
244
|
-
@keydown="${(x, c) => x._handleSliderEvent(c.event)}"
|
|
245
|
-
@mousedown="${(x, c) => x._handleSliderEvent(c.event)}"
|
|
246
|
-
>
|
|
270
|
+
<div class="base ${getClasses}">
|
|
247
271
|
<div class="controls">
|
|
248
272
|
${when.when(
|
|
249
273
|
(x) => x.skipBy && x.skipBy != enums.MediaSkipBy.Zero,
|
|
@@ -257,12 +281,6 @@ const AudioPlayerTemplate = (context) => {
|
|
|
257
281
|
${when.when((x) => !x.notime, renderTimestamp())}
|
|
258
282
|
</div>
|
|
259
283
|
${renderSlider(context)}
|
|
260
|
-
<audio
|
|
261
|
-
${ref.ref("_playerEl")}
|
|
262
|
-
src="${(x) => x.src}"
|
|
263
|
-
@timeupdate="${(x) => x._updateProgress()}"
|
|
264
|
-
@loadedmetadata="${(x) => x._updateTotalTime()}"
|
|
265
|
-
></audio>
|
|
266
284
|
</div>
|
|
267
285
|
</div>`;
|
|
268
286
|
};
|