@livepeer-frameworks/player-wc 0.1.9 → 0.2.2
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/dist/esm/components/controls/fw-fullscreen-button.js +76 -0
- package/dist/esm/components/controls/fw-fullscreen-button.js.map +1 -0
- package/dist/esm/components/controls/fw-live-badge.js +109 -0
- package/dist/esm/components/controls/fw-live-badge.js.map +1 -0
- package/dist/esm/components/controls/fw-play-button.js +76 -0
- package/dist/esm/components/controls/fw-play-button.js.map +1 -0
- package/dist/esm/components/controls/fw-skip-button.js +62 -0
- package/dist/esm/components/controls/fw-skip-button.js.map +1 -0
- package/dist/esm/components/controls/fw-time-display.js +77 -0
- package/dist/esm/components/controls/fw-time-display.js.map +1 -0
- package/dist/esm/components/controls/fw-volume-control.js +76 -0
- package/dist/esm/components/controls/fw-volume-control.js.map +1 -0
- package/dist/esm/components/fw-dev-mode-panel.js +11 -15
- package/dist/esm/components/fw-dev-mode-panel.js.map +1 -1
- package/dist/esm/components/fw-error-overlay.js +13 -5
- package/dist/esm/components/fw-error-overlay.js.map +1 -1
- package/dist/esm/components/fw-idle-screen.js +10 -2
- package/dist/esm/components/fw-idle-screen.js.map +1 -1
- package/dist/esm/components/fw-loading-screen.js +89 -42
- package/dist/esm/components/fw-loading-screen.js.map +1 -1
- package/dist/esm/components/fw-loading-spinner.js +20 -9
- package/dist/esm/components/fw-loading-spinner.js.map +1 -1
- package/dist/esm/components/fw-player-controls.js +18 -13
- package/dist/esm/components/fw-player-controls.js.map +1 -1
- package/dist/esm/components/fw-player.js +165 -59
- package/dist/esm/components/fw-player.js.map +1 -1
- package/dist/esm/components/fw-settings-menu.js +44 -9
- package/dist/esm/components/fw-settings-menu.js.map +1 -1
- package/dist/esm/components/fw-stream-state-overlay.js +13 -5
- package/dist/esm/components/fw-stream-state-overlay.js.map +1 -1
- package/dist/esm/components/fw-toast.js +11 -1
- package/dist/esm/components/fw-toast.js.map +1 -1
- package/dist/esm/components/fw-volume-control.js +13 -3
- package/dist/esm/components/fw-volume-control.js.map +1 -1
- package/dist/esm/controllers/player-controller-host.js +14 -1
- package/dist/esm/controllers/player-controller-host.js.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/styles/shared-styles.js +401 -304
- package/dist/esm/styles/shared-styles.js.map +1 -1
- package/dist/fw-player.iife.js +707 -488
- package/dist/types/components/controls/fw-fullscreen-button.d.ts +18 -0
- package/dist/types/components/controls/fw-live-badge.d.ts +19 -0
- package/dist/types/components/controls/fw-play-button.d.ts +18 -0
- package/dist/types/components/controls/fw-skip-button.d.ts +17 -0
- package/dist/types/components/controls/fw-time-display.d.ts +17 -0
- package/dist/types/components/controls/fw-volume-control.d.ts +18 -0
- package/dist/types/components/controls/index.d.ts +6 -0
- package/dist/types/components/fw-dev-mode-panel.d.ts +1 -1
- package/dist/types/components/fw-error-overlay.d.ts +4 -0
- package/dist/types/components/fw-idle-screen.d.ts +4 -0
- package/dist/types/components/fw-loading-screen.d.ts +5 -1
- package/dist/types/components/fw-loading-spinner.d.ts +4 -0
- package/dist/types/components/fw-player-controls.d.ts +2 -1
- package/dist/types/components/fw-player.d.ts +10 -1
- package/dist/types/components/fw-settings-menu.d.ts +3 -1
- package/dist/types/components/fw-stream-state-overlay.d.ts +4 -0
- package/dist/types/components/fw-toast.d.ts +4 -0
- package/dist/types/controllers/player-controller-host.d.ts +7 -1
- package/dist/types/index.d.ts +1 -0
- package/package.json +22 -25
- package/src/components/controls/fw-fullscreen-button.ts +75 -0
- package/src/components/controls/fw-live-badge.ts +109 -0
- package/src/components/controls/fw-play-button.ts +75 -0
- package/src/components/controls/fw-skip-button.ts +59 -0
- package/src/components/controls/fw-time-display.ts +74 -0
- package/src/components/controls/fw-volume-control.ts +75 -0
- package/src/components/controls/index.ts +6 -0
- package/src/components/fw-dev-mode-panel.ts +10 -17
- package/src/components/fw-error-overlay.ts +13 -5
- package/src/components/fw-idle-screen.ts +10 -2
- package/src/components/fw-loading-screen.ts +90 -46
- package/src/components/fw-loading-spinner.ts +18 -9
- package/src/components/fw-player-controls.ts +17 -13
- package/src/components/fw-player.ts +166 -64
- package/src/components/fw-settings-menu.ts +49 -9
- package/src/components/fw-stream-state-overlay.ts +13 -5
- package/src/components/fw-toast.ts +11 -1
- package/src/components/fw-volume-control.ts +14 -3
- package/src/controllers/player-controller-host.ts +18 -0
- package/src/index.ts +10 -0
- package/src/styles/shared-styles.ts +401 -304
- package/LICENSE.md +0 -24
- package/dist/cjs/components/fw-context-menu.js +0 -17
- package/dist/cjs/components/fw-context-menu.js.map +0 -1
- package/dist/cjs/components/fw-dev-mode-panel.js +0 -907
- package/dist/cjs/components/fw-dev-mode-panel.js.map +0 -1
- package/dist/cjs/components/fw-dvd-logo.js +0 -211
- package/dist/cjs/components/fw-dvd-logo.js.map +0 -1
- package/dist/cjs/components/fw-error-overlay.js +0 -101
- package/dist/cjs/components/fw-error-overlay.js.map +0 -1
- package/dist/cjs/components/fw-idle-screen.js +0 -726
- package/dist/cjs/components/fw-idle-screen.js.map +0 -1
- package/dist/cjs/components/fw-loading-screen.js +0 -513
- package/dist/cjs/components/fw-loading-screen.js.map +0 -1
- package/dist/cjs/components/fw-loading-spinner.js +0 -62
- package/dist/cjs/components/fw-loading-spinner.js.map +0 -1
- package/dist/cjs/components/fw-player-controls.js +0 -451
- package/dist/cjs/components/fw-player-controls.js.map +0 -1
- package/dist/cjs/components/fw-player.js +0 -832
- package/dist/cjs/components/fw-player.js.map +0 -1
- package/dist/cjs/components/fw-seek-bar.js +0 -383
- package/dist/cjs/components/fw-seek-bar.js.map +0 -1
- package/dist/cjs/components/fw-settings-menu.js +0 -253
- package/dist/cjs/components/fw-settings-menu.js.map +0 -1
- package/dist/cjs/components/fw-skip-indicator.js +0 -143
- package/dist/cjs/components/fw-skip-indicator.js.map +0 -1
- package/dist/cjs/components/fw-speed-indicator.js +0 -61
- package/dist/cjs/components/fw-speed-indicator.js.map +0 -1
- package/dist/cjs/components/fw-stats-panel.js +0 -205
- package/dist/cjs/components/fw-stats-panel.js.map +0 -1
- package/dist/cjs/components/fw-stream-state-overlay.js +0 -338
- package/dist/cjs/components/fw-stream-state-overlay.js.map +0 -1
- package/dist/cjs/components/fw-subtitle-renderer.js +0 -217
- package/dist/cjs/components/fw-subtitle-renderer.js.map +0 -1
- package/dist/cjs/components/fw-thumbnail-overlay.js +0 -161
- package/dist/cjs/components/fw-thumbnail-overlay.js.map +0 -1
- package/dist/cjs/components/fw-title-overlay.js +0 -72
- package/dist/cjs/components/fw-title-overlay.js.map +0 -1
- package/dist/cjs/components/fw-toast.js +0 -74
- package/dist/cjs/components/fw-toast.js.map +0 -1
- package/dist/cjs/components/fw-volume-control.js +0 -276
- package/dist/cjs/components/fw-volume-control.js.map +0 -1
- package/dist/cjs/components/shared/hitmarker-audio.js +0 -76
- package/dist/cjs/components/shared/hitmarker-audio.js.map +0 -1
- package/dist/cjs/constants/media-assets.js +0 -11
- package/dist/cjs/constants/media-assets.js.map +0 -1
- package/dist/cjs/controllers/player-controller-host.js +0 -364
- package/dist/cjs/controllers/player-controller-host.js.map +0 -1
- package/dist/cjs/define.js +0 -53
- package/dist/cjs/define.js.map +0 -1
- package/dist/cjs/icons/index.js +0 -180
- package/dist/cjs/icons/index.js.map +0 -1
- package/dist/cjs/index.js +0 -108
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js +0 -33
- package/dist/cjs/node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js.map +0 -1
- package/dist/cjs/styles/shared-styles.js +0 -1985
- package/dist/cjs/styles/shared-styles.js.map +0 -1
- package/dist/cjs/styles/utility-styles.js +0 -725
- package/dist/cjs/styles/utility-styles.js.map +0 -1
|
@@ -4,12 +4,12 @@ import { sharedStyles } from "../styles/shared-styles.js";
|
|
|
4
4
|
import { utilityStyles } from "../styles/utility-styles.js";
|
|
5
5
|
import { LOGOMARK_DATA_URL } from "../constants/media-assets.js";
|
|
6
6
|
import { playHitmarkerSound } from "./shared/hitmarker-audio.js";
|
|
7
|
+
import { createTranslator, type TranslateFn } from "@livepeer-frameworks/player-core";
|
|
7
8
|
import "./fw-dvd-logo.js";
|
|
8
9
|
|
|
9
10
|
interface ParticleState {
|
|
10
11
|
left: number;
|
|
11
12
|
size: number;
|
|
12
|
-
color: string;
|
|
13
13
|
duration: number;
|
|
14
14
|
delay: number;
|
|
15
15
|
}
|
|
@@ -19,7 +19,6 @@ interface BubbleState {
|
|
|
19
19
|
left: number;
|
|
20
20
|
size: number;
|
|
21
21
|
opacity: number;
|
|
22
|
-
color: string;
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
interface Hitmarker {
|
|
@@ -28,32 +27,13 @@ interface Hitmarker {
|
|
|
28
27
|
y: number;
|
|
29
28
|
}
|
|
30
29
|
|
|
31
|
-
const BUBBLE_COLORS = [
|
|
32
|
-
"rgba(122, 162, 247, 0.2)",
|
|
33
|
-
"rgba(187, 154, 247, 0.2)",
|
|
34
|
-
"rgba(158, 206, 106, 0.2)",
|
|
35
|
-
"rgba(115, 218, 202, 0.2)",
|
|
36
|
-
"rgba(125, 207, 255, 0.2)",
|
|
37
|
-
"rgba(247, 118, 142, 0.2)",
|
|
38
|
-
"rgba(224, 175, 104, 0.2)",
|
|
39
|
-
"rgba(42, 195, 222, 0.2)",
|
|
40
|
-
];
|
|
41
|
-
|
|
42
|
-
const PARTICLE_COLORS = [
|
|
43
|
-
"#7aa2f7",
|
|
44
|
-
"#bb9af7",
|
|
45
|
-
"#9ece6a",
|
|
46
|
-
"#73daca",
|
|
47
|
-
"#7dcfff",
|
|
48
|
-
"#f7768e",
|
|
49
|
-
"#e0af68",
|
|
50
|
-
"#2ac3de",
|
|
51
|
-
];
|
|
52
|
-
|
|
53
30
|
@customElement("fw-loading-screen")
|
|
54
31
|
export class FwLoadingScreen extends LitElement {
|
|
55
|
-
@property({ type: String }) message
|
|
32
|
+
@property({ type: String }) message?: string;
|
|
56
33
|
@property({ type: String, attribute: "logo-src" }) logoSrc?: string;
|
|
34
|
+
@property({ attribute: false }) translator?: TranslateFn;
|
|
35
|
+
|
|
36
|
+
private _defaultTranslator: TranslateFn = createTranslator({ locale: "en" });
|
|
57
37
|
@query(".loading-container") private _containerEl?: HTMLDivElement;
|
|
58
38
|
|
|
59
39
|
@state() private _logoSize = 100;
|
|
@@ -85,11 +65,11 @@ export class FwLoadingScreen extends LitElement {
|
|
|
85
65
|
user-select: none;
|
|
86
66
|
background: linear-gradient(
|
|
87
67
|
135deg,
|
|
88
|
-
hsl(var(--
|
|
89
|
-
hsl(var(--
|
|
90
|
-
hsl(var(--
|
|
91
|
-
hsl(var(--
|
|
92
|
-
hsl(var(--
|
|
68
|
+
hsl(var(--fw-surface-deep, 235 21% 11%)) 0%,
|
|
69
|
+
hsl(var(--fw-surface, 233 23% 17%)) 25%,
|
|
70
|
+
hsl(var(--fw-surface-deep, 235 21% 11%)) 50%,
|
|
71
|
+
hsl(var(--fw-surface, 233 23% 17%)) 75%,
|
|
72
|
+
hsl(var(--fw-surface-deep, 235 21% 11%)) 100%
|
|
93
73
|
);
|
|
94
74
|
background-size: 400% 400%;
|
|
95
75
|
animation: _fw-gradient-shift 16s ease-in-out infinite;
|
|
@@ -115,6 +95,56 @@ export class FwLoadingScreen extends LitElement {
|
|
|
115
95
|
transition: opacity 1s ease-in-out;
|
|
116
96
|
}
|
|
117
97
|
|
|
98
|
+
.particle:nth-child(8n + 1) {
|
|
99
|
+
background: hsl(var(--fw-accent, 218 79% 73%));
|
|
100
|
+
}
|
|
101
|
+
.particle:nth-child(8n + 2) {
|
|
102
|
+
background: hsl(var(--fw-accent-secondary, 178 64% 63%));
|
|
103
|
+
}
|
|
104
|
+
.particle:nth-child(8n + 3) {
|
|
105
|
+
background: hsl(var(--fw-success, 95 53% 55%));
|
|
106
|
+
}
|
|
107
|
+
.particle:nth-child(8n + 4) {
|
|
108
|
+
background: hsl(var(--fw-info, 178 64% 63%));
|
|
109
|
+
}
|
|
110
|
+
.particle:nth-child(8n + 5) {
|
|
111
|
+
background: hsl(var(--fw-danger, 348 74% 64%));
|
|
112
|
+
}
|
|
113
|
+
.particle:nth-child(8n + 6) {
|
|
114
|
+
background: hsl(var(--fw-warning, 35 79% 64%));
|
|
115
|
+
}
|
|
116
|
+
.particle:nth-child(8n + 7) {
|
|
117
|
+
background: hsl(var(--fw-accent, 218 79% 73%) / 0.8);
|
|
118
|
+
}
|
|
119
|
+
.particle:nth-child(8n + 8) {
|
|
120
|
+
background: hsl(var(--fw-accent-secondary, 178 64% 63%) / 0.8);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.bubble:nth-child(8n + 1) {
|
|
124
|
+
background: hsl(var(--fw-accent, 218 79% 73%) / 0.2);
|
|
125
|
+
}
|
|
126
|
+
.bubble:nth-child(8n + 2) {
|
|
127
|
+
background: hsl(var(--fw-accent-secondary, 178 64% 63%) / 0.2);
|
|
128
|
+
}
|
|
129
|
+
.bubble:nth-child(8n + 3) {
|
|
130
|
+
background: hsl(var(--fw-success, 95 53% 55%) / 0.2);
|
|
131
|
+
}
|
|
132
|
+
.bubble:nth-child(8n + 4) {
|
|
133
|
+
background: hsl(var(--fw-info, 178 64% 63%) / 0.2);
|
|
134
|
+
}
|
|
135
|
+
.bubble:nth-child(8n + 5) {
|
|
136
|
+
background: hsl(var(--fw-danger, 348 74% 64%) / 0.2);
|
|
137
|
+
}
|
|
138
|
+
.bubble:nth-child(8n + 6) {
|
|
139
|
+
background: hsl(var(--fw-warning, 35 79% 64%) / 0.2);
|
|
140
|
+
}
|
|
141
|
+
.bubble:nth-child(8n + 7) {
|
|
142
|
+
background: hsl(var(--fw-accent, 218 79% 73%) / 0.15);
|
|
143
|
+
}
|
|
144
|
+
.bubble:nth-child(8n + 8) {
|
|
145
|
+
background: hsl(var(--fw-accent-secondary, 178 64% 63%) / 0.15);
|
|
146
|
+
}
|
|
147
|
+
|
|
118
148
|
.center-logo {
|
|
119
149
|
position: absolute;
|
|
120
150
|
top: 50%;
|
|
@@ -127,7 +157,7 @@ export class FwLoadingScreen extends LitElement {
|
|
|
127
157
|
.logo-pulse {
|
|
128
158
|
position: absolute;
|
|
129
159
|
border-radius: 50%;
|
|
130
|
-
background:
|
|
160
|
+
background: hsl(var(--fw-accent, 218 79% 73%) / 0.15);
|
|
131
161
|
animation: _fw-logo-pulse 3s ease-in-out infinite;
|
|
132
162
|
pointer-events: none;
|
|
133
163
|
}
|
|
@@ -156,7 +186,8 @@ export class FwLoadingScreen extends LitElement {
|
|
|
156
186
|
|
|
157
187
|
.logo-mark.hovered {
|
|
158
188
|
transform: scale(1.1);
|
|
159
|
-
filter: drop-shadow(0 6px 12px
|
|
189
|
+
filter: drop-shadow(0 6px 12px hsl(var(--fw-surface-deep, 235 21% 11%) / 0.4))
|
|
190
|
+
brightness(1.1);
|
|
160
191
|
}
|
|
161
192
|
|
|
162
193
|
.message {
|
|
@@ -165,11 +196,11 @@ export class FwLoadingScreen extends LitElement {
|
|
|
165
196
|
left: 50%;
|
|
166
197
|
transform: translateX(-50%);
|
|
167
198
|
z-index: 8;
|
|
168
|
-
color:
|
|
199
|
+
color: hsl(var(--fw-text-muted, 224 16% 53%));
|
|
169
200
|
font-size: 16px;
|
|
170
201
|
font-weight: 500;
|
|
171
202
|
text-align: center;
|
|
172
|
-
text-shadow: 0 2px 4px
|
|
203
|
+
text-shadow: 0 2px 4px hsl(var(--fw-surface-deep, 235 21% 11%) / 0.5);
|
|
173
204
|
animation: _fw-fade-in-out 2s ease-in-out infinite;
|
|
174
205
|
pointer-events: none;
|
|
175
206
|
}
|
|
@@ -179,9 +210,21 @@ export class FwLoadingScreen extends LitElement {
|
|
|
179
210
|
inset: 0;
|
|
180
211
|
pointer-events: none;
|
|
181
212
|
background:
|
|
182
|
-
radial-gradient(
|
|
183
|
-
|
|
184
|
-
|
|
213
|
+
radial-gradient(
|
|
214
|
+
circle at 20% 80%,
|
|
215
|
+
hsl(var(--fw-accent, 218 79% 73%) / 0.03) 0%,
|
|
216
|
+
transparent 50%
|
|
217
|
+
),
|
|
218
|
+
radial-gradient(
|
|
219
|
+
circle at 80% 20%,
|
|
220
|
+
hsl(var(--fw-accent-secondary, 178 64% 63%) / 0.03) 0%,
|
|
221
|
+
transparent 50%
|
|
222
|
+
),
|
|
223
|
+
radial-gradient(
|
|
224
|
+
circle at 40% 40%,
|
|
225
|
+
hsl(var(--fw-success, 95 53% 55%) / 0.02) 0%,
|
|
226
|
+
transparent 50%
|
|
227
|
+
);
|
|
185
228
|
}
|
|
186
229
|
|
|
187
230
|
.hitmarker {
|
|
@@ -197,8 +240,8 @@ export class FwLoadingScreen extends LitElement {
|
|
|
197
240
|
position: absolute;
|
|
198
241
|
width: 12px;
|
|
199
242
|
height: 3px;
|
|
200
|
-
background-color:
|
|
201
|
-
box-shadow: 0 0 8px
|
|
243
|
+
background-color: hsl(var(--fw-text-bright, 0 0% 100%));
|
|
244
|
+
box-shadow: 0 0 8px hsl(var(--fw-text-bright, 0 0% 100%) / 0.8);
|
|
202
245
|
border-radius: 1px;
|
|
203
246
|
}
|
|
204
247
|
|
|
@@ -331,22 +374,20 @@ export class FwLoadingScreen extends LitElement {
|
|
|
331
374
|
}
|
|
332
375
|
|
|
333
376
|
private _createParticles(): ParticleState[] {
|
|
334
|
-
return Array.from({ length: 12 }, (
|
|
377
|
+
return Array.from({ length: 12 }, () => ({
|
|
335
378
|
left: Math.random() * 100,
|
|
336
379
|
size: Math.random() * 4 + 2,
|
|
337
|
-
color: PARTICLE_COLORS[index % PARTICLE_COLORS.length],
|
|
338
380
|
duration: 8 + Math.random() * 4,
|
|
339
381
|
delay: Math.random() * 8,
|
|
340
382
|
}));
|
|
341
383
|
}
|
|
342
384
|
|
|
343
385
|
private _createBubbles(): BubbleState[] {
|
|
344
|
-
return Array.from({ length: 8 }, (
|
|
386
|
+
return Array.from({ length: 8 }, () => ({
|
|
345
387
|
top: Math.random() * 80 + 10,
|
|
346
388
|
left: Math.random() * 80 + 10,
|
|
347
389
|
size: Math.random() * 60 + 30,
|
|
348
390
|
opacity: 0,
|
|
349
|
-
color: BUBBLE_COLORS[index % BUBBLE_COLORS.length],
|
|
350
391
|
}));
|
|
351
392
|
}
|
|
352
393
|
|
|
@@ -449,8 +490,13 @@ export class FwLoadingScreen extends LitElement {
|
|
|
449
490
|
}, 600);
|
|
450
491
|
};
|
|
451
492
|
|
|
493
|
+
private get _t(): TranslateFn {
|
|
494
|
+
return this.translator ?? this._defaultTranslator;
|
|
495
|
+
}
|
|
496
|
+
|
|
452
497
|
protected render() {
|
|
453
498
|
const logoSrc = this.logoSrc || LOGOMARK_DATA_URL;
|
|
499
|
+
const displayMessage = this.message ?? this._t("waitingForSource");
|
|
454
500
|
return html`
|
|
455
501
|
<div
|
|
456
502
|
class="loading-container fw-player-root"
|
|
@@ -477,7 +523,6 @@ export class FwLoadingScreen extends LitElement {
|
|
|
477
523
|
left:${particle.left}%;
|
|
478
524
|
width:${particle.size}px;
|
|
479
525
|
height:${particle.size}px;
|
|
480
|
-
background:${particle.color};
|
|
481
526
|
animation-duration:${particle.duration}s;
|
|
482
527
|
animation-delay:${particle.delay}s;
|
|
483
528
|
"
|
|
@@ -496,7 +541,6 @@ export class FwLoadingScreen extends LitElement {
|
|
|
496
541
|
left:${bubble.left}%;
|
|
497
542
|
width:${bubble.size}px;
|
|
498
543
|
height:${bubble.size}px;
|
|
499
|
-
background:${bubble.color};
|
|
500
544
|
opacity:${bubble.opacity};
|
|
501
545
|
"
|
|
502
546
|
></div>
|
|
@@ -526,7 +570,7 @@ export class FwLoadingScreen extends LitElement {
|
|
|
526
570
|
|
|
527
571
|
<fw-dvd-logo .parentRef=${this._containerEl ?? null} .scale=${0.08}></fw-dvd-logo>
|
|
528
572
|
|
|
529
|
-
<div class="message">${
|
|
573
|
+
<div class="message">${displayMessage}</div>
|
|
530
574
|
<div class="overlay-texture"></div>
|
|
531
575
|
</div>
|
|
532
576
|
`;
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { LitElement, html, css } from "lit";
|
|
2
|
-
import { customElement } from "lit/decorators.js";
|
|
2
|
+
import { customElement, property } from "lit/decorators.js";
|
|
3
|
+
import { createTranslator, type TranslateFn } from "@livepeer-frameworks/player-core";
|
|
3
4
|
|
|
4
5
|
@customElement("fw-loading-spinner")
|
|
5
6
|
export class FwLoadingSpinner extends LitElement {
|
|
7
|
+
@property({ attribute: false }) translator?: TranslateFn;
|
|
8
|
+
|
|
9
|
+
private _defaultTranslator: TranslateFn = createTranslator({ locale: "en" });
|
|
10
|
+
|
|
11
|
+
private get _t(): TranslateFn {
|
|
12
|
+
return this.translator ?? this._defaultTranslator;
|
|
13
|
+
}
|
|
14
|
+
|
|
6
15
|
static styles = css`
|
|
7
16
|
:host {
|
|
8
17
|
display: contents;
|
|
@@ -13,7 +22,7 @@ export class FwLoadingSpinner extends LitElement {
|
|
|
13
22
|
display: flex;
|
|
14
23
|
align-items: center;
|
|
15
24
|
justify-content: center;
|
|
16
|
-
background:
|
|
25
|
+
background: hsl(var(--fw-surface-deep, 235 21% 11%) / 0.85);
|
|
17
26
|
backdrop-filter: blur(4px);
|
|
18
27
|
z-index: 20;
|
|
19
28
|
}
|
|
@@ -22,18 +31,18 @@ export class FwLoadingSpinner extends LitElement {
|
|
|
22
31
|
align-items: center;
|
|
23
32
|
gap: 0.75rem;
|
|
24
33
|
border-radius: 0.5rem;
|
|
25
|
-
border: 1px solid
|
|
26
|
-
background:
|
|
34
|
+
border: 1px solid hsl(var(--fw-text, 229 73% 86%) / 0.1);
|
|
35
|
+
background: hsl(var(--fw-surface-deep, 235 21% 11%) / 0.9);
|
|
27
36
|
padding: 0.75rem 1rem;
|
|
28
37
|
font-size: 0.875rem;
|
|
29
|
-
color:
|
|
30
|
-
box-shadow: 0 10px 15px -3px
|
|
38
|
+
color: hsl(var(--fw-text, 229 73% 86%));
|
|
39
|
+
box-shadow: 0 10px 15px -3px hsl(var(--fw-shadow-color, 0 0% 0%) / 0.1);
|
|
31
40
|
}
|
|
32
41
|
.spinner {
|
|
33
42
|
width: 1rem;
|
|
34
43
|
height: 1rem;
|
|
35
|
-
border: 2px solid
|
|
36
|
-
border-top-color:
|
|
44
|
+
border: 2px solid hsl(var(--fw-text-faint, 228 15% 45%) / 0.3);
|
|
45
|
+
border-top-color: hsl(var(--fw-accent, 218 79% 73%));
|
|
37
46
|
border-radius: 50%;
|
|
38
47
|
animation: _fw-spin 1s linear infinite;
|
|
39
48
|
}
|
|
@@ -49,7 +58,7 @@ export class FwLoadingSpinner extends LitElement {
|
|
|
49
58
|
<div class="overlay" role="status" aria-live="polite">
|
|
50
59
|
<div class="pill">
|
|
51
60
|
<div class="spinner"></div>
|
|
52
|
-
<span
|
|
61
|
+
<span>${this._t("buffering")}</span>
|
|
53
62
|
</div>
|
|
54
63
|
</div>
|
|
55
64
|
`;
|
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
isMediaStreamSource,
|
|
29
29
|
type MistStreamInfo,
|
|
30
30
|
type PlaybackMode,
|
|
31
|
+
type FwLocale,
|
|
31
32
|
} from "@livepeer-frameworks/player-core";
|
|
32
33
|
import type { PlayerControllerHost } from "../controllers/player-controller-host.js";
|
|
33
34
|
|
|
@@ -51,6 +52,7 @@ export class FwPlayerControls extends LitElement {
|
|
|
51
52
|
@property({ type: Boolean, attribute: "dev-mode" }) devMode = false;
|
|
52
53
|
@property({ type: Boolean, attribute: "show-stats-button" }) showStatsButton = false;
|
|
53
54
|
@property({ type: Boolean, attribute: "is-stats-open" }) isStatsOpen = false;
|
|
55
|
+
@property({ attribute: "active-locale" }) activeLocale?: FwLocale;
|
|
54
56
|
|
|
55
57
|
@state() private _settingsOpen = false;
|
|
56
58
|
@state() private _isNearLiveState = true;
|
|
@@ -339,7 +341,6 @@ export class FwPlayerControls extends LitElement {
|
|
|
339
341
|
return html`
|
|
340
342
|
<div
|
|
341
343
|
class=${classMap({
|
|
342
|
-
"fw-player-surface": true,
|
|
343
344
|
"fw-controls-wrapper": true,
|
|
344
345
|
"fw-controls-wrapper--visible": shouldShowControls,
|
|
345
346
|
"fw-controls-wrapper--hidden": !shouldShowControls,
|
|
@@ -372,7 +373,7 @@ export class FwPlayerControls extends LitElement {
|
|
|
372
373
|
type="button"
|
|
373
374
|
class="fw-btn-flush"
|
|
374
375
|
?disabled=${disabled}
|
|
375
|
-
aria-label=${state.isPlaying ? "
|
|
376
|
+
aria-label=${state.isPlaying ? this.pc.t("pause") : this.pc.t("play")}
|
|
376
377
|
@click=${() => this.pc.togglePlay()}
|
|
377
378
|
>
|
|
378
379
|
${state.isPlaying ? pauseIcon(18) : playIcon(18)}
|
|
@@ -384,7 +385,7 @@ export class FwPlayerControls extends LitElement {
|
|
|
384
385
|
type="button"
|
|
385
386
|
class="fw-btn-flush hidden sm:flex"
|
|
386
387
|
?disabled=${disabled}
|
|
387
|
-
aria-label
|
|
388
|
+
aria-label=${this.pc.t("skipBackward")}
|
|
388
389
|
@click=${() => this.pc.seekBy(-10)}
|
|
389
390
|
>
|
|
390
391
|
${skipBackIcon(16)}
|
|
@@ -393,7 +394,7 @@ export class FwPlayerControls extends LitElement {
|
|
|
393
394
|
type="button"
|
|
394
395
|
class="fw-btn-flush hidden sm:flex"
|
|
395
396
|
?disabled=${disabled}
|
|
396
|
-
aria-label
|
|
397
|
+
aria-label=${this.pc.t("skipForward")}
|
|
397
398
|
@click=${() => this.pc.seekBy(10)}
|
|
398
399
|
>
|
|
399
400
|
${skipForwardIcon(16)}
|
|
@@ -426,12 +427,12 @@ export class FwPlayerControls extends LitElement {
|
|
|
426
427
|
"fw-live-badge--behind": !liveButtonDisabled,
|
|
427
428
|
})}
|
|
428
429
|
title=${!context.hasDvrWindow
|
|
429
|
-
? "
|
|
430
|
+
? this.pc.t("live")
|
|
430
431
|
: this._isNearLiveState
|
|
431
|
-
? "
|
|
432
|
-
: "
|
|
432
|
+
? this.pc.t("live")
|
|
433
|
+
: this.pc.t("live")}
|
|
433
434
|
>
|
|
434
|
-
|
|
435
|
+
${this.pc.t("live").toUpperCase()}
|
|
435
436
|
${!this._isNearLiveState && context.hasDvrWindow
|
|
436
437
|
? seekToLiveIcon(10)
|
|
437
438
|
: nothing}
|
|
@@ -451,8 +452,8 @@ export class FwPlayerControls extends LitElement {
|
|
|
451
452
|
"fw-btn-flush": true,
|
|
452
453
|
"fw-btn-flush--active": this.isStatsOpen,
|
|
453
454
|
})}
|
|
454
|
-
aria-label
|
|
455
|
-
title
|
|
455
|
+
aria-label=${this.pc.t("showStats")}
|
|
456
|
+
title=${this.pc.t("showStats")}
|
|
456
457
|
@click=${() =>
|
|
457
458
|
this.dispatchEvent(
|
|
458
459
|
new CustomEvent("fw-stats-toggle", {
|
|
@@ -474,8 +475,8 @@ export class FwPlayerControls extends LitElement {
|
|
|
474
475
|
group: true,
|
|
475
476
|
"fw-btn-flush--active": this._settingsOpen,
|
|
476
477
|
})}
|
|
477
|
-
aria-label
|
|
478
|
-
title
|
|
478
|
+
aria-label=${this.pc.t("settings")}
|
|
479
|
+
title=${this.pc.t("settings")}
|
|
479
480
|
?disabled=${disabled}
|
|
480
481
|
@click=${(event: MouseEvent) => {
|
|
481
482
|
event.stopPropagation();
|
|
@@ -495,6 +496,7 @@ export class FwPlayerControls extends LitElement {
|
|
|
495
496
|
.open=${this._settingsOpen}
|
|
496
497
|
.playbackMode=${this.playbackMode}
|
|
497
498
|
.isContentLive=${this.isContentLive}
|
|
499
|
+
.activeLocale=${this.activeLocale}
|
|
498
500
|
@click=${(event: MouseEvent) => event.stopPropagation()}
|
|
499
501
|
@fw-close=${() => {
|
|
500
502
|
this._settingsOpen = false;
|
|
@@ -508,7 +510,9 @@ export class FwPlayerControls extends LitElement {
|
|
|
508
510
|
type="button"
|
|
509
511
|
class="fw-btn-flush"
|
|
510
512
|
?disabled=${disabled}
|
|
511
|
-
aria-label=${state.isFullscreen
|
|
513
|
+
aria-label=${state.isFullscreen
|
|
514
|
+
? this.pc.t("exitFullscreen")
|
|
515
|
+
: this.pc.t("fullscreen")}
|
|
512
516
|
@click=${() => this.pc.toggleFullscreen()}
|
|
513
517
|
>
|
|
514
518
|
${state.isFullscreen ? fullscreenExitIcon(16) : fullscreenIcon(16)}
|