@livepeer-frameworks/player-wc 0.1.8 → 0.2.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/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 +41 -26
- 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 +104 -39
- 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 +722 -499
- 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 +3 -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/components/fw-volume-control.d.ts +11 -0
- package/dist/types/controllers/player-controller-host.d.ts +7 -1
- package/dist/types/index.d.ts +1 -0
- package/package.json +10 -13
- 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 +39 -28
- 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 +112 -43
- package/src/controllers/player-controller-host.ts +18 -0
- package/src/index.ts +10 -0
- package/src/styles/shared-styles.ts +401 -304
- 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 -441
- 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 -221
- 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
|
@@ -6,6 +6,7 @@ import { PlayerControllerHost } from '../controllers/player-controller-host.js';
|
|
|
6
6
|
import { sharedStyles } from '../styles/shared-styles.js';
|
|
7
7
|
import { utilityStyles } from '../styles/utility-styles.js';
|
|
8
8
|
import { closeIcon, statsIcon, settingsIcon, pictureInPictureIcon, loopIcon } from '../icons/index.js';
|
|
9
|
+
import { clearTheme, applyTheme, applyThemeOverrides } from '@livepeer-frameworks/player-core';
|
|
9
10
|
|
|
10
11
|
let FwPlayer = class FwPlayer extends LitElement {
|
|
11
12
|
constructor() {
|
|
@@ -28,6 +29,11 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
28
29
|
this._skipDirection = null;
|
|
29
30
|
this._contextMenuOpen = false;
|
|
30
31
|
this._contextMenuMounted = false;
|
|
32
|
+
// Error fade-out
|
|
33
|
+
this._displayedError = null;
|
|
34
|
+
this._displayedIsPassive = false;
|
|
35
|
+
this._isErrorDismissing = false;
|
|
36
|
+
this._errorDismissTimer = null;
|
|
31
37
|
this._contextMenuState = "closed";
|
|
32
38
|
this._contextMenuSide = "bottom";
|
|
33
39
|
this._contextMenuX = 0;
|
|
@@ -241,6 +247,29 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
241
247
|
}
|
|
242
248
|
// ---- Lifecycle ----
|
|
243
249
|
willUpdate(changed) {
|
|
250
|
+
if (changed.has("locale")) {
|
|
251
|
+
this.pc.updateTranslator({ locale: this.locale ?? "en" });
|
|
252
|
+
}
|
|
253
|
+
// Error fade-out: sync displayed error from controller state
|
|
254
|
+
const es = this.pc.s;
|
|
255
|
+
if (es.error) {
|
|
256
|
+
if (this._errorDismissTimer) {
|
|
257
|
+
clearTimeout(this._errorDismissTimer);
|
|
258
|
+
this._errorDismissTimer = null;
|
|
259
|
+
}
|
|
260
|
+
this._displayedError = es.error;
|
|
261
|
+
this._displayedIsPassive = es.isPassiveError;
|
|
262
|
+
this._isErrorDismissing = false;
|
|
263
|
+
}
|
|
264
|
+
else if (this._displayedError && !this._isErrorDismissing) {
|
|
265
|
+
this._isErrorDismissing = true;
|
|
266
|
+
this._errorDismissTimer = setTimeout(() => {
|
|
267
|
+
this._displayedError = null;
|
|
268
|
+
this._displayedIsPassive = false;
|
|
269
|
+
this._isErrorDismissing = false;
|
|
270
|
+
this._errorDismissTimer = null;
|
|
271
|
+
}, 300);
|
|
272
|
+
}
|
|
244
273
|
if (changed.has("contentId") ||
|
|
245
274
|
changed.has("contentType") ||
|
|
246
275
|
changed.has("gatewayUrl") ||
|
|
@@ -284,9 +313,25 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
284
313
|
clearTimeout(this._contextMenuCloseTimer);
|
|
285
314
|
this._contextMenuCloseTimer = undefined;
|
|
286
315
|
}
|
|
316
|
+
if (this._errorDismissTimer) {
|
|
317
|
+
clearTimeout(this._errorDismissTimer);
|
|
318
|
+
this._errorDismissTimer = null;
|
|
319
|
+
}
|
|
287
320
|
this._resetContextMenuTypeahead();
|
|
288
321
|
}
|
|
289
322
|
updated(changed) {
|
|
323
|
+
// Apply theme changes (preset or overrides) via JS custom properties
|
|
324
|
+
if (changed.has("theme") || changed.has("themeOverrides")) {
|
|
325
|
+
const root = this.shadowRoot?.querySelector('[part="root"]');
|
|
326
|
+
if (root) {
|
|
327
|
+
clearTheme(root);
|
|
328
|
+
if (this.theme && this.theme !== "default") {
|
|
329
|
+
applyTheme(root, this.theme);
|
|
330
|
+
}
|
|
331
|
+
if (this.themeOverrides)
|
|
332
|
+
applyThemeOverrides(root, this.themeOverrides);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
290
335
|
if (this.pc.s.toast) {
|
|
291
336
|
clearTimeout(this._toastTimer);
|
|
292
337
|
this._toastTimer = setTimeout(() => this.pc.dismissToast(), 3000);
|
|
@@ -315,15 +360,19 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
315
360
|
get _waitingMessage() {
|
|
316
361
|
const s = this.pc.s;
|
|
317
362
|
if (this.gatewayUrl && s.state === "gateway_loading") {
|
|
318
|
-
return "
|
|
363
|
+
return this.pc.t("resolvingEndpoint");
|
|
319
364
|
}
|
|
320
|
-
return "
|
|
365
|
+
return this.pc.t("waitingForStream");
|
|
321
366
|
}
|
|
322
367
|
get _useStockControls() {
|
|
323
368
|
return (this.stockControls ||
|
|
324
369
|
this.nativeControls ||
|
|
325
370
|
this.pc.s.currentPlayerInfo?.shortname === "mist-legacy");
|
|
326
371
|
}
|
|
372
|
+
/** Expose the PlayerControllerHost for composable controls */
|
|
373
|
+
get controller() {
|
|
374
|
+
return this.pc;
|
|
375
|
+
}
|
|
327
376
|
// ---- Public API methods ----
|
|
328
377
|
async play() {
|
|
329
378
|
await this.pc.play();
|
|
@@ -391,6 +440,7 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
391
440
|
flex: this.devMode,
|
|
392
441
|
})}
|
|
393
442
|
data-player-container="true"
|
|
443
|
+
data-theme=${this.theme && this.theme !== "default" ? this.theme : nothing}
|
|
394
444
|
tabindex="0"
|
|
395
445
|
@mouseenter=${() => this.pc.handleMouseEnter()}
|
|
396
446
|
@mouseleave=${() => this.pc.handleMouseLeave()}
|
|
@@ -474,7 +524,7 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
474
524
|
? html `
|
|
475
525
|
<fw-idle-screen
|
|
476
526
|
.status=${s.isEffectivelyLive ? s.streamState?.status : undefined}
|
|
477
|
-
.message=${s.isEffectivelyLive ? s.streamState?.message : "
|
|
527
|
+
.message=${s.isEffectivelyLive ? s.streamState?.message : this.pc.t("loading")}
|
|
478
528
|
.percentage=${s.isEffectivelyLive ? s.streamState?.percentage : undefined}
|
|
479
529
|
@fw-retry=${() => {
|
|
480
530
|
this.pc.clearError();
|
|
@@ -486,82 +536,108 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
486
536
|
|
|
487
537
|
<!-- Buffering spinner -->
|
|
488
538
|
${this._showBufferingSpinner
|
|
539
|
+
? html `
|
|
540
|
+
<div role="status" aria-live="polite" class="fw-buffering-overlay">
|
|
541
|
+
<div class="fw-buffering-pill">
|
|
542
|
+
<div class="fw-buffering-spinner"></div>
|
|
543
|
+
<span>${this.pc.t("buffering")}</span>
|
|
544
|
+
</div>
|
|
545
|
+
</div>
|
|
546
|
+
`
|
|
547
|
+
: nothing}
|
|
548
|
+
|
|
549
|
+
<!-- Passive error toast (non-blocking) -->
|
|
550
|
+
${!s.shouldShowIdleScreen && this._displayedError && this._displayedIsPassive
|
|
489
551
|
? html `
|
|
490
552
|
<div
|
|
553
|
+
class="absolute bottom-20 left-1/2 -translate-x-1/2 z-30"
|
|
554
|
+
style="transition:opacity 300ms;opacity:${this._isErrorDismissing ? "0" : "1"}"
|
|
491
555
|
role="status"
|
|
492
556
|
aria-live="polite"
|
|
493
|
-
class="fw-player-surface absolute inset-0 flex items-center justify-center bg-black/40 backdrop-blur-sm z-20"
|
|
494
557
|
>
|
|
495
558
|
<div
|
|
496
|
-
class="flex items-center gap-
|
|
559
|
+
class="flex items-center gap-2 rounded-lg border border-yellow-500/30 bg-black/80 px-4 py-2 text-sm text-white shadow-lg backdrop-blur-sm"
|
|
497
560
|
>
|
|
498
|
-
<
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
<
|
|
561
|
+
<span class="text-yellow-400 text-xs font-semibold uppercase"
|
|
562
|
+
>${this.pc.t("warning")}</span
|
|
563
|
+
>
|
|
564
|
+
<span>${this._displayedError}</span>
|
|
565
|
+
<button
|
|
566
|
+
type="button"
|
|
567
|
+
@click=${() => this.pc.clearError()}
|
|
568
|
+
class="ml-0.5 text-white/60 hover\\:text-white cursor-pointer"
|
|
569
|
+
aria-label=${this.pc.t("dismiss")}
|
|
570
|
+
>
|
|
571
|
+
${closeIcon()}
|
|
572
|
+
</button>
|
|
503
573
|
</div>
|
|
504
574
|
</div>
|
|
505
575
|
`
|
|
506
576
|
: nothing}
|
|
507
577
|
|
|
508
|
-
<!--
|
|
509
|
-
${!s.shouldShowIdleScreen &&
|
|
578
|
+
<!-- Fatal error overlay (blocking) — auto-dismisses on playback resume -->
|
|
579
|
+
${!s.shouldShowIdleScreen && this._displayedError && !this._displayedIsPassive
|
|
510
580
|
? html `
|
|
511
581
|
<div
|
|
512
582
|
role="alert"
|
|
513
583
|
aria-live="assertive"
|
|
514
|
-
class
|
|
515
|
-
|
|
516
|
-
"fw-error-overlay--passive": s.isPassiveError,
|
|
517
|
-
"fw-error-overlay--fullscreen": !s.isPassiveError,
|
|
518
|
-
})}
|
|
584
|
+
class="fw-error-overlay fw-error-overlay--fullscreen"
|
|
585
|
+
style="transition:opacity 300ms;opacity:${this._isErrorDismissing ? "0" : "1"}"
|
|
519
586
|
>
|
|
520
|
-
<div
|
|
521
|
-
class
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
"fw-error-popup--fullscreen": !s.isPassiveError,
|
|
525
|
-
})}
|
|
526
|
-
>
|
|
527
|
-
<div
|
|
528
|
-
class=${classMap({
|
|
529
|
-
"fw-error-header": true,
|
|
530
|
-
"fw-error-header--warning": s.isPassiveError,
|
|
531
|
-
"fw-error-header--error": !s.isPassiveError,
|
|
532
|
-
})}
|
|
533
|
-
>
|
|
534
|
-
<span
|
|
535
|
-
class=${classMap({
|
|
536
|
-
"fw-error-title": true,
|
|
537
|
-
"fw-error-title--warning": s.isPassiveError,
|
|
538
|
-
"fw-error-title--error": !s.isPassiveError,
|
|
539
|
-
})}
|
|
540
|
-
>${s.isPassiveError ? "Warning" : "Error"}</span
|
|
587
|
+
<div class="fw-error-popup fw-error-popup--fullscreen">
|
|
588
|
+
<div class="fw-error-header fw-error-header--error">
|
|
589
|
+
<span class="fw-error-title fw-error-title--error"
|
|
590
|
+
>${this.pc.t("error")}</span
|
|
541
591
|
>
|
|
542
592
|
<button
|
|
543
593
|
type="button"
|
|
544
594
|
class="fw-error-close"
|
|
545
595
|
@click=${() => this.pc.clearError()}
|
|
546
|
-
aria-label
|
|
596
|
+
aria-label=${this.pc.t("dismiss")}
|
|
547
597
|
>
|
|
548
598
|
${closeIcon()}
|
|
549
599
|
</button>
|
|
550
600
|
</div>
|
|
551
601
|
<div class="fw-error-body">
|
|
552
|
-
<p class="fw-error-message"
|
|
602
|
+
<p class="fw-error-message">${this._displayedError}</p>
|
|
553
603
|
</div>
|
|
554
604
|
<div class="fw-error-actions">
|
|
555
605
|
<button
|
|
556
606
|
type="button"
|
|
557
607
|
class="fw-error-btn"
|
|
558
|
-
aria-label
|
|
608
|
+
aria-label=${this.pc.t("retry")}
|
|
559
609
|
@click=${() => {
|
|
560
610
|
this.pc.clearError();
|
|
561
611
|
this.pc.retry();
|
|
562
612
|
}}
|
|
563
613
|
>
|
|
564
|
-
|
|
614
|
+
${this.pc.t("retry")}
|
|
615
|
+
</button>
|
|
616
|
+
${this.pc.canAttemptFallback()
|
|
617
|
+
? html `
|
|
618
|
+
<button
|
|
619
|
+
type="button"
|
|
620
|
+
class="fw-error-btn fw-error-btn--secondary"
|
|
621
|
+
aria-label=${this.pc.t("tryNext")}
|
|
622
|
+
@click=${() => {
|
|
623
|
+
this.pc.clearError();
|
|
624
|
+
this.pc.tryNextSource();
|
|
625
|
+
}}
|
|
626
|
+
>
|
|
627
|
+
${this.pc.t("tryNext")}
|
|
628
|
+
</button>
|
|
629
|
+
`
|
|
630
|
+
: nothing}
|
|
631
|
+
<button
|
|
632
|
+
type="button"
|
|
633
|
+
class="fw-error-btn fw-error-btn--secondary"
|
|
634
|
+
aria-label=${this.pc.t("reloadPlayer")}
|
|
635
|
+
@click=${() => {
|
|
636
|
+
this.pc.clearError();
|
|
637
|
+
this.pc.reload();
|
|
638
|
+
}}
|
|
639
|
+
>
|
|
640
|
+
${this.pc.t("reloadPlayer")}
|
|
565
641
|
</button>
|
|
566
642
|
</div>
|
|
567
643
|
</div>
|
|
@@ -585,7 +661,7 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
585
661
|
type="button"
|
|
586
662
|
@click=${() => this.pc.dismissToast()}
|
|
587
663
|
class="ml-0.5 text-white/60 hover\\:text-white cursor-pointer"
|
|
588
|
-
aria-label
|
|
664
|
+
aria-label=${this.pc.t("dismiss")}
|
|
589
665
|
>
|
|
590
666
|
${closeIcon()}
|
|
591
667
|
</button>
|
|
@@ -594,23 +670,29 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
594
670
|
`
|
|
595
671
|
: nothing}
|
|
596
672
|
|
|
597
|
-
<!-- Player controls -->
|
|
673
|
+
<!-- Player controls: slot allows custom controls, fallback renders defaults -->
|
|
598
674
|
${!this._useStockControls
|
|
599
675
|
? html `
|
|
600
|
-
<
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
676
|
+
<slot name="controls">
|
|
677
|
+
<fw-player-controls
|
|
678
|
+
part="controls"
|
|
679
|
+
.pc=${this.pc}
|
|
680
|
+
.playbackMode=${this.playbackMode}
|
|
681
|
+
.isContentLive=${s.isEffectivelyLive}
|
|
682
|
+
.devMode=${this.devMode}
|
|
683
|
+
.isStatsOpen=${this._isStatsOpen}
|
|
684
|
+
.activeLocale=${this.locale ?? "en"}
|
|
685
|
+
@fw-stats-toggle=${() => {
|
|
608
686
|
this._isStatsOpen = !this._isStatsOpen;
|
|
609
687
|
}}
|
|
610
|
-
|
|
688
|
+
@fw-mode-change=${(event) => {
|
|
611
689
|
this.playbackMode = event.detail.mode;
|
|
612
690
|
}}
|
|
613
|
-
|
|
691
|
+
@fw-locale-change=${(e) => {
|
|
692
|
+
this.locale = e.detail.locale;
|
|
693
|
+
}}
|
|
694
|
+
></fw-player-controls>
|
|
695
|
+
</slot>
|
|
614
696
|
`
|
|
615
697
|
: nothing}
|
|
616
698
|
</div>
|
|
@@ -640,7 +722,7 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
640
722
|
data-context-menu="true"
|
|
641
723
|
data-state=${this._contextMenuState}
|
|
642
724
|
data-side=${this._contextMenuSide}
|
|
643
|
-
class="fw-
|
|
725
|
+
class="fw-context-menu"
|
|
644
726
|
role="menu"
|
|
645
727
|
aria-label="Player options"
|
|
646
728
|
tabindex="-1"
|
|
@@ -662,7 +744,7 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
662
744
|
}}
|
|
663
745
|
>
|
|
664
746
|
<span class="opacity-70 shrink-0">${statsIcon(14)}</span>
|
|
665
|
-
<span>${this._isStatsOpen ? "
|
|
747
|
+
<span>${this._isStatsOpen ? this.pc.t("hideStats") : this.pc.t("showStats")}</span>
|
|
666
748
|
</button>
|
|
667
749
|
${this.devMode
|
|
668
750
|
? html `
|
|
@@ -680,7 +762,11 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
680
762
|
}}
|
|
681
763
|
>
|
|
682
764
|
<span class="opacity-70 shrink-0">${settingsIcon(14)}</span>
|
|
683
|
-
<span
|
|
765
|
+
<span
|
|
766
|
+
>${this._isDevPanelOpen
|
|
767
|
+
? this.pc.t("hideSettings")
|
|
768
|
+
: this.pc.t("settings")}</span
|
|
769
|
+
>
|
|
684
770
|
</button>
|
|
685
771
|
`
|
|
686
772
|
: nothing}
|
|
@@ -699,7 +785,7 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
699
785
|
}}
|
|
700
786
|
>
|
|
701
787
|
<span class="opacity-70 shrink-0">${pictureInPictureIcon(14)}</span>
|
|
702
|
-
<span
|
|
788
|
+
<span>${this.pc.t("pictureInPicture")}</span>
|
|
703
789
|
</button>
|
|
704
790
|
<button
|
|
705
791
|
type="button"
|
|
@@ -715,7 +801,7 @@ let FwPlayer = class FwPlayer extends LitElement {
|
|
|
715
801
|
}}
|
|
716
802
|
>
|
|
717
803
|
<span class="opacity-70 shrink-0">${loopIcon(14)}</span>
|
|
718
|
-
<span>${s.isLoopEnabled ? "
|
|
804
|
+
<span>${s.isLoopEnabled ? this.pc.t("disableLoop") : this.pc.t("enableLoop")}</span>
|
|
719
805
|
</button>
|
|
720
806
|
</div>
|
|
721
807
|
`
|
|
@@ -732,6 +818,8 @@ FwPlayer.styles = [
|
|
|
732
818
|
position: relative;
|
|
733
819
|
width: 100%;
|
|
734
820
|
height: 100%;
|
|
821
|
+
min-height: 0;
|
|
822
|
+
overflow: hidden;
|
|
735
823
|
contain: layout style;
|
|
736
824
|
}
|
|
737
825
|
:host([hidden]) {
|
|
@@ -791,6 +879,15 @@ __decorate([
|
|
|
791
879
|
__decorate([
|
|
792
880
|
property({ attribute: "playback-mode" })
|
|
793
881
|
], FwPlayer.prototype, "playbackMode", void 0);
|
|
882
|
+
__decorate([
|
|
883
|
+
property({ attribute: "theme" })
|
|
884
|
+
], FwPlayer.prototype, "theme", void 0);
|
|
885
|
+
__decorate([
|
|
886
|
+
property({ attribute: false })
|
|
887
|
+
], FwPlayer.prototype, "themeOverrides", void 0);
|
|
888
|
+
__decorate([
|
|
889
|
+
property({ attribute: "locale" })
|
|
890
|
+
], FwPlayer.prototype, "locale", void 0);
|
|
794
891
|
__decorate([
|
|
795
892
|
property({ attribute: false })
|
|
796
893
|
], FwPlayer.prototype, "endpoints", void 0);
|
|
@@ -809,6 +906,15 @@ __decorate([
|
|
|
809
906
|
__decorate([
|
|
810
907
|
state()
|
|
811
908
|
], FwPlayer.prototype, "_contextMenuMounted", void 0);
|
|
909
|
+
__decorate([
|
|
910
|
+
state()
|
|
911
|
+
], FwPlayer.prototype, "_displayedError", void 0);
|
|
912
|
+
__decorate([
|
|
913
|
+
state()
|
|
914
|
+
], FwPlayer.prototype, "_displayedIsPassive", void 0);
|
|
915
|
+
__decorate([
|
|
916
|
+
state()
|
|
917
|
+
], FwPlayer.prototype, "_isErrorDismissing", void 0);
|
|
812
918
|
__decorate([
|
|
813
919
|
state()
|
|
814
920
|
], FwPlayer.prototype, "_contextMenuState", void 0);
|