@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
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export declare class FwFullscreenButton extends LitElement {
|
|
3
|
+
private isFullscreen;
|
|
4
|
+
private _player;
|
|
5
|
+
private _cleanup;
|
|
6
|
+
private get _t();
|
|
7
|
+
static styles: import("lit").CSSResult;
|
|
8
|
+
private _resolvePlayer;
|
|
9
|
+
connectedCallback(): void;
|
|
10
|
+
disconnectedCallback(): void;
|
|
11
|
+
private handleClick;
|
|
12
|
+
render(): import("lit").TemplateResult<1>;
|
|
13
|
+
}
|
|
14
|
+
declare global {
|
|
15
|
+
interface HTMLElementTagNameMap {
|
|
16
|
+
"fw-fullscreen-button": FwFullscreenButton;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export declare class FwLiveBadge extends LitElement {
|
|
3
|
+
private isLive;
|
|
4
|
+
private _player;
|
|
5
|
+
private _cleanup;
|
|
6
|
+
private get _t();
|
|
7
|
+
static styles: import("lit").CSSResult;
|
|
8
|
+
private _resolvePlayer;
|
|
9
|
+
connectedCallback(): void;
|
|
10
|
+
disconnectedCallback(): void;
|
|
11
|
+
private syncLive;
|
|
12
|
+
private handleClick;
|
|
13
|
+
render(): import("lit").TemplateResult<1>;
|
|
14
|
+
}
|
|
15
|
+
declare global {
|
|
16
|
+
interface HTMLElementTagNameMap {
|
|
17
|
+
"fw-live-badge": FwLiveBadge;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export declare class FwPlayButton extends LitElement {
|
|
3
|
+
private isPlaying;
|
|
4
|
+
private _player;
|
|
5
|
+
private _cleanup;
|
|
6
|
+
private get _t();
|
|
7
|
+
static styles: import("lit").CSSResult;
|
|
8
|
+
private _resolvePlayer;
|
|
9
|
+
connectedCallback(): void;
|
|
10
|
+
disconnectedCallback(): void;
|
|
11
|
+
private handleClick;
|
|
12
|
+
render(): import("lit").TemplateResult<1>;
|
|
13
|
+
}
|
|
14
|
+
declare global {
|
|
15
|
+
interface HTMLElementTagNameMap {
|
|
16
|
+
"fw-play-button": FwPlayButton;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export declare class FwSkipButton extends LitElement {
|
|
3
|
+
direction: "back" | "forward";
|
|
4
|
+
seconds: number;
|
|
5
|
+
private _player;
|
|
6
|
+
private get _t();
|
|
7
|
+
static styles: import("lit").CSSResult;
|
|
8
|
+
private _resolvePlayer;
|
|
9
|
+
connectedCallback(): void;
|
|
10
|
+
private handleClick;
|
|
11
|
+
render(): import("lit").TemplateResult<1>;
|
|
12
|
+
}
|
|
13
|
+
declare global {
|
|
14
|
+
interface HTMLElementTagNameMap {
|
|
15
|
+
"fw-skip-button": FwSkipButton;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export declare class FwTimeDisplay extends LitElement {
|
|
3
|
+
private display;
|
|
4
|
+
private _player;
|
|
5
|
+
private _cleanup;
|
|
6
|
+
static styles: import("lit").CSSResult;
|
|
7
|
+
private _resolvePlayer;
|
|
8
|
+
connectedCallback(): void;
|
|
9
|
+
disconnectedCallback(): void;
|
|
10
|
+
private updateDisplay;
|
|
11
|
+
render(): import("lit").TemplateResult<1>;
|
|
12
|
+
}
|
|
13
|
+
declare global {
|
|
14
|
+
interface HTMLElementTagNameMap {
|
|
15
|
+
"fw-time-display": FwTimeDisplay;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export declare class FwVolumeControl extends LitElement {
|
|
3
|
+
private isMuted;
|
|
4
|
+
private _player;
|
|
5
|
+
private _cleanup;
|
|
6
|
+
private get _t();
|
|
7
|
+
static styles: import("lit").CSSResult;
|
|
8
|
+
private _resolvePlayer;
|
|
9
|
+
connectedCallback(): void;
|
|
10
|
+
disconnectedCallback(): void;
|
|
11
|
+
private handleClick;
|
|
12
|
+
render(): import("lit").TemplateResult<1>;
|
|
13
|
+
}
|
|
14
|
+
declare global {
|
|
15
|
+
interface HTMLElementTagNameMap {
|
|
16
|
+
"fw-volume-button": FwVolumeControl;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { FwPlayButton } from "./fw-play-button";
|
|
2
|
+
export { FwSkipButton } from "./fw-skip-button";
|
|
3
|
+
export { FwVolumeControl } from "./fw-volume-control";
|
|
4
|
+
export { FwTimeDisplay } from "./fw-time-display";
|
|
5
|
+
export { FwLiveBadge } from "./fw-live-badge";
|
|
6
|
+
export { FwFullscreenButton } from "./fw-fullscreen-button";
|
|
@@ -10,7 +10,7 @@ export declare class FwDevModePanel extends LitElement {
|
|
|
10
10
|
playbackMode: PlaybackMode;
|
|
11
11
|
private _activeTab;
|
|
12
12
|
private _hoveredComboIndex;
|
|
13
|
-
private
|
|
13
|
+
private _tooltipPos;
|
|
14
14
|
private _showDisabledPlayers;
|
|
15
15
|
private _playbackScore;
|
|
16
16
|
private _qualityScore;
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { LitElement } from "lit";
|
|
2
|
+
import { type TranslateFn } from "@livepeer-frameworks/player-core";
|
|
2
3
|
export declare class FwErrorOverlay extends LitElement {
|
|
3
4
|
error: string | null;
|
|
4
5
|
isPassive: boolean;
|
|
6
|
+
translator?: TranslateFn;
|
|
7
|
+
private _defaultTranslator;
|
|
8
|
+
private get _t();
|
|
5
9
|
static styles: import("lit").CSSResult[];
|
|
6
10
|
protected render(): import("lit").TemplateResult<1>;
|
|
7
11
|
private _clearError;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { LitElement } from "lit";
|
|
2
|
+
import { type TranslateFn } from "@livepeer-frameworks/player-core";
|
|
2
3
|
import "./fw-dvd-logo.js";
|
|
3
4
|
export declare class FwIdleScreen extends LitElement {
|
|
4
5
|
status?: string;
|
|
@@ -8,6 +9,9 @@ export declare class FwIdleScreen extends LitElement {
|
|
|
8
9
|
logoSrc?: string;
|
|
9
10
|
retryEnabled: boolean;
|
|
10
11
|
onRetry?: () => void;
|
|
12
|
+
translator?: TranslateFn;
|
|
13
|
+
private _defaultTranslator;
|
|
14
|
+
private get _t();
|
|
11
15
|
private _containerEl?;
|
|
12
16
|
private _logoSize;
|
|
13
17
|
private _logoOffset;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { LitElement } from "lit";
|
|
2
|
+
import { type TranslateFn } from "@livepeer-frameworks/player-core";
|
|
2
3
|
import "./fw-dvd-logo.js";
|
|
3
4
|
export declare class FwLoadingScreen extends LitElement {
|
|
4
|
-
message
|
|
5
|
+
message?: string;
|
|
5
6
|
logoSrc?: string;
|
|
7
|
+
translator?: TranslateFn;
|
|
8
|
+
private _defaultTranslator;
|
|
6
9
|
private _containerEl?;
|
|
7
10
|
private _logoSize;
|
|
8
11
|
private _logoOffset;
|
|
@@ -27,6 +30,7 @@ export declare class FwLoadingScreen extends LitElement {
|
|
|
27
30
|
private _handleMouseMove;
|
|
28
31
|
private _handleMouseLeave;
|
|
29
32
|
private _handleLogoClick;
|
|
33
|
+
private get _t();
|
|
30
34
|
protected render(): import("lit").TemplateResult<1>;
|
|
31
35
|
}
|
|
32
36
|
declare global {
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { LitElement } from "lit";
|
|
2
|
+
import { type TranslateFn } from "@livepeer-frameworks/player-core";
|
|
2
3
|
export declare class FwLoadingSpinner extends LitElement {
|
|
4
|
+
translator?: TranslateFn;
|
|
5
|
+
private _defaultTranslator;
|
|
6
|
+
private get _t();
|
|
3
7
|
static styles: import("lit").CSSResult;
|
|
4
8
|
protected render(): import("lit").TemplateResult<1>;
|
|
5
9
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Parity port of React/Svelte control behavior.
|
|
4
4
|
*/
|
|
5
5
|
import { LitElement, type PropertyValues } from "lit";
|
|
6
|
-
import { type PlaybackMode } from "@livepeer-frameworks/player-core";
|
|
6
|
+
import { type PlaybackMode, type FwLocale } from "@livepeer-frameworks/player-core";
|
|
7
7
|
import type { PlayerControllerHost } from "../controllers/player-controller-host.js";
|
|
8
8
|
export declare class FwPlayerControls extends LitElement {
|
|
9
9
|
pc: PlayerControllerHost;
|
|
@@ -12,6 +12,7 @@ export declare class FwPlayerControls extends LitElement {
|
|
|
12
12
|
devMode: boolean;
|
|
13
13
|
showStatsButton: boolean;
|
|
14
14
|
isStatsOpen: boolean;
|
|
15
|
+
activeLocale?: FwLocale;
|
|
15
16
|
private _settingsOpen;
|
|
16
17
|
private _isNearLiveState;
|
|
17
18
|
private _buffered;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { LitElement, type PropertyValues } from "lit";
|
|
6
6
|
import { PlayerControllerHost } from "../controllers/player-controller-host.js";
|
|
7
|
-
import type { ContentEndpoints, PlaybackMode } from "@livepeer-frameworks/player-core";
|
|
7
|
+
import type { ContentEndpoints, PlaybackMode, FwThemePreset, FwThemeOverrides, FwLocale } from "@livepeer-frameworks/player-core";
|
|
8
8
|
export declare class FwPlayer extends LitElement {
|
|
9
9
|
contentId: string;
|
|
10
10
|
contentType?: "live" | "dvr" | "clip" | "vod";
|
|
@@ -20,12 +20,19 @@ export declare class FwPlayer extends LitElement {
|
|
|
20
20
|
devMode: boolean;
|
|
21
21
|
thumbnailUrl?: string;
|
|
22
22
|
playbackMode: PlaybackMode;
|
|
23
|
+
theme?: FwThemePreset;
|
|
24
|
+
themeOverrides?: FwThemeOverrides;
|
|
25
|
+
locale?: FwLocale;
|
|
23
26
|
endpoints?: ContentEndpoints;
|
|
24
27
|
private _isStatsOpen;
|
|
25
28
|
private _isDevPanelOpen;
|
|
26
29
|
private _skipDirection;
|
|
27
30
|
private _contextMenuOpen;
|
|
28
31
|
private _contextMenuMounted;
|
|
32
|
+
private _displayedError;
|
|
33
|
+
private _displayedIsPassive;
|
|
34
|
+
private _isErrorDismissing;
|
|
35
|
+
private _errorDismissTimer;
|
|
29
36
|
private _contextMenuState;
|
|
30
37
|
private _contextMenuSide;
|
|
31
38
|
private _contextMenuX;
|
|
@@ -64,6 +71,8 @@ export declare class FwPlayer extends LitElement {
|
|
|
64
71
|
private get _showWaitingForEndpoint();
|
|
65
72
|
private get _waitingMessage();
|
|
66
73
|
private get _useStockControls();
|
|
74
|
+
/** Expose the PlayerControllerHost for composable controls */
|
|
75
|
+
get controller(): PlayerControllerHost;
|
|
67
76
|
play(): Promise<void>;
|
|
68
77
|
pause(): void;
|
|
69
78
|
togglePlay(): void;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* <fw-settings-menu> — Mode, speed, quality, and captions settings popup.
|
|
3
3
|
*/
|
|
4
4
|
import { LitElement, nothing } from "lit";
|
|
5
|
-
import type { PlaybackMode } from "@livepeer-frameworks/player-core";
|
|
5
|
+
import type { PlaybackMode, FwLocale } from "@livepeer-frameworks/player-core";
|
|
6
6
|
import type { PlayerControllerHost } from "../controllers/player-controller-host.js";
|
|
7
7
|
export declare class FwSettingsMenu extends LitElement {
|
|
8
8
|
pc: PlayerControllerHost;
|
|
@@ -13,6 +13,7 @@ export declare class FwSettingsMenu extends LitElement {
|
|
|
13
13
|
qualityValue?: string;
|
|
14
14
|
captionValue?: string;
|
|
15
15
|
supportsPlaybackRate?: boolean;
|
|
16
|
+
activeLocale?: FwLocale;
|
|
16
17
|
private _playbackRate;
|
|
17
18
|
static styles: import("lit").CSSResult[];
|
|
18
19
|
protected updated(): void;
|
|
@@ -21,6 +22,7 @@ export declare class FwSettingsMenu extends LitElement {
|
|
|
21
22
|
private _handleSpeedChange;
|
|
22
23
|
private _handleQualityChange;
|
|
23
24
|
private _handleCaptionChange;
|
|
25
|
+
private _handleLocaleChange;
|
|
24
26
|
private _deriveFallbackQualities;
|
|
25
27
|
protected render(): import("lit").TemplateResult<1> | typeof nothing;
|
|
26
28
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { LitElement, nothing } from "lit";
|
|
2
2
|
import type { StreamStatus } from "@livepeer-frameworks/player-core";
|
|
3
|
+
import { type TranslateFn } from "@livepeer-frameworks/player-core";
|
|
3
4
|
export declare class FwStreamStateOverlay extends LitElement {
|
|
4
5
|
status: StreamStatus;
|
|
5
6
|
message: string;
|
|
@@ -7,6 +8,9 @@ export declare class FwStreamStateOverlay extends LitElement {
|
|
|
7
8
|
visible: boolean;
|
|
8
9
|
retryEnabled: boolean;
|
|
9
10
|
onRetry?: () => void;
|
|
11
|
+
translator?: TranslateFn;
|
|
12
|
+
private _defaultTranslator;
|
|
13
|
+
private get _t();
|
|
10
14
|
static styles: import("lit").CSSResult[];
|
|
11
15
|
private _getStatusLabel;
|
|
12
16
|
private _renderStatusIcon;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { LitElement, nothing } from "lit";
|
|
2
|
+
import { type TranslateFn } from "@livepeer-frameworks/player-core";
|
|
2
3
|
export declare class FwToast extends LitElement {
|
|
3
4
|
message: string;
|
|
5
|
+
translator?: TranslateFn;
|
|
6
|
+
private _defaultTranslator;
|
|
7
|
+
private get _t();
|
|
4
8
|
static styles: import("lit").CSSResult;
|
|
5
9
|
protected render(): import("lit").TemplateResult<1> | typeof nothing;
|
|
6
10
|
private _dismiss;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Direct port of usePlayerController.ts from player-react.
|
|
4
4
|
*/
|
|
5
5
|
import type { ReactiveController, ReactiveControllerHost } from "lit";
|
|
6
|
-
import { PlayerController, type PlayerControllerConfig, type PlayerState, type StreamState, type StreamInfo, type PlaybackQuality, type ContentEndpoints, type ContentMetadata, type ClassifiedError } from "@livepeer-frameworks/player-core";
|
|
6
|
+
import { PlayerController, type PlayerControllerConfig, type PlayerState, type StreamState, type StreamInfo, type PlaybackQuality, type ContentEndpoints, type ContentMetadata, type ClassifiedError, type TranslateFn, type I18nConfig } from "@livepeer-frameworks/player-core";
|
|
7
7
|
export interface PlayerControllerHostState {
|
|
8
8
|
state: PlayerState;
|
|
9
9
|
streamState: StreamState | null;
|
|
@@ -68,7 +68,11 @@ export declare class PlayerControllerHost implements ReactiveController {
|
|
|
68
68
|
private unsubs;
|
|
69
69
|
private currentConfig;
|
|
70
70
|
s: PlayerControllerHostState;
|
|
71
|
+
/** Translation function, updated when locale changes. */
|
|
72
|
+
t: TranslateFn;
|
|
71
73
|
constructor(host: HostElement);
|
|
74
|
+
/** Rebuild the translator when locale or custom translations change. */
|
|
75
|
+
updateTranslator(config: I18nConfig): void;
|
|
72
76
|
configure(config: PlayerControllerConfig): void;
|
|
73
77
|
attach(container: HTMLDivElement): Promise<void>;
|
|
74
78
|
hostConnected(): void;
|
|
@@ -93,6 +97,8 @@ export declare class PlayerControllerHost implements ReactiveController {
|
|
|
93
97
|
clearError(): void;
|
|
94
98
|
dismissToast(): void;
|
|
95
99
|
retry(): Promise<void>;
|
|
100
|
+
tryNextSource(): Promise<void>;
|
|
101
|
+
canAttemptFallback(): boolean;
|
|
96
102
|
reload(): Promise<void>;
|
|
97
103
|
getQualities(): {
|
|
98
104
|
id: string;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -25,5 +25,6 @@ export { FwSubtitleRenderer } from "./components/fw-subtitle-renderer.js";
|
|
|
25
25
|
export { FwSkipIndicator } from "./components/fw-skip-indicator.js";
|
|
26
26
|
export { FwSpeedIndicator } from "./components/fw-speed-indicator.js";
|
|
27
27
|
export { FwContextMenu } from "./components/fw-context-menu.js";
|
|
28
|
+
export { FwPlayButton, FwSkipButton, FwVolumeControl as FwVolumeButton, FwTimeDisplay, FwLiveBadge, FwFullscreenButton, } from "./components/controls/index.js";
|
|
28
29
|
export { PlayerControllerHost } from "./controllers/player-controller-host.js";
|
|
29
30
|
export type { PlayerControllerHostState } from "./controllers/player-controller-host.js";
|
package/package.json
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livepeer-frameworks/player-wc",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Lit Web Components for FrameWorks streaming player — <fw-player> custom element with full UI",
|
|
6
|
-
"main": "dist/
|
|
7
|
-
"module": "dist/esm/index.js",
|
|
6
|
+
"main": "dist/esm/index.js",
|
|
8
7
|
"types": "dist/types/index.d.ts",
|
|
9
8
|
"files": [
|
|
10
9
|
"dist",
|
|
@@ -14,32 +13,40 @@
|
|
|
14
13
|
".": {
|
|
15
14
|
"source": "./src/index.ts",
|
|
16
15
|
"types": "./dist/types/index.d.ts",
|
|
17
|
-
"
|
|
18
|
-
"require": "./dist/cjs/index.js"
|
|
16
|
+
"default": "./dist/esm/index.js"
|
|
19
17
|
},
|
|
20
18
|
"./define": {
|
|
21
19
|
"source": "./src/define.ts",
|
|
22
20
|
"types": "./dist/types/define.d.ts",
|
|
23
|
-
"
|
|
24
|
-
"require": "./dist/cjs/define.js"
|
|
21
|
+
"default": "./dist/esm/define.js"
|
|
25
22
|
},
|
|
26
23
|
"./fw-player.js": {
|
|
27
24
|
"default": "./dist/fw-player.iife.js"
|
|
28
25
|
}
|
|
29
26
|
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "rm -rf dist && pnpm run build:css && pnpm run build:types && NODE_ENV=production rollup -c",
|
|
29
|
+
"build:watch": "NODE_ENV=development rollup -c --watch",
|
|
30
|
+
"build:css": "node scripts/generate-shared-styles.js",
|
|
31
|
+
"build:types": "tsc --noEmit false --emitDeclarationOnly --outDir dist/types",
|
|
32
|
+
"type-check": "tsc --noEmit",
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"test:watch": "vitest",
|
|
35
|
+
"test:coverage": "vitest run --coverage"
|
|
36
|
+
},
|
|
30
37
|
"dependencies": {
|
|
31
|
-
"
|
|
32
|
-
"
|
|
38
|
+
"@livepeer-frameworks/player-core": "workspace:*",
|
|
39
|
+
"lit": "^3.3.2"
|
|
33
40
|
},
|
|
34
41
|
"devDependencies": {
|
|
35
42
|
"@rollup/plugin-commonjs": "^29.0.0",
|
|
36
|
-
"@rollup/plugin-node-resolve": "^16.0.
|
|
37
|
-
"@rollup/plugin-terser": "^0.4.
|
|
38
|
-
"@rollup/plugin-typescript": "^12.
|
|
43
|
+
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
44
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
45
|
+
"@rollup/plugin-typescript": "^12.3.0",
|
|
39
46
|
"@vitest/coverage-v8": "^4.0.18",
|
|
40
47
|
"rollup": "^4.57.1",
|
|
41
48
|
"tslib": "^2.8.1",
|
|
42
|
-
"typescript": "^5.9.
|
|
49
|
+
"typescript": "^5.9.3",
|
|
43
50
|
"vitest": "^4.0.18"
|
|
44
51
|
},
|
|
45
52
|
"keywords": [
|
|
@@ -51,15 +58,5 @@
|
|
|
51
58
|
"custom-elements"
|
|
52
59
|
],
|
|
53
60
|
"author": "Livepeer FrameWorks",
|
|
54
|
-
"license": "Unlicense"
|
|
55
|
-
|
|
56
|
-
"build": "rm -rf dist && pnpm run build:css && pnpm run build:types && NODE_ENV=production rollup -c",
|
|
57
|
-
"build:watch": "NODE_ENV=development rollup -c --watch",
|
|
58
|
-
"build:css": "node scripts/generate-shared-styles.js",
|
|
59
|
-
"build:types": "tsc --noEmit false --emitDeclarationOnly --outDir dist/types",
|
|
60
|
-
"type-check": "tsc --noEmit",
|
|
61
|
-
"test": "vitest run",
|
|
62
|
-
"test:watch": "vitest",
|
|
63
|
-
"test:coverage": "vitest run --coverage"
|
|
64
|
-
}
|
|
65
|
-
}
|
|
61
|
+
"license": "Unlicense"
|
|
62
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { LitElement, html, css } from "lit";
|
|
2
|
+
import { customElement, state } from "lit/decorators.js";
|
|
3
|
+
import { createTranslator, type TranslateFn } from "@livepeer-frameworks/player-core";
|
|
4
|
+
|
|
5
|
+
@customElement("fw-fullscreen-button")
|
|
6
|
+
export class FwFullscreenButton extends LitElement {
|
|
7
|
+
@state() private isFullscreen = false;
|
|
8
|
+
private _player: any = null;
|
|
9
|
+
private _cleanup: (() => void) | null = null;
|
|
10
|
+
|
|
11
|
+
private get _t(): TranslateFn {
|
|
12
|
+
return this._player?.pc?.t ?? createTranslator({ locale: "en" });
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
static styles = css`
|
|
16
|
+
:host {
|
|
17
|
+
display: inline-flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
}
|
|
20
|
+
`;
|
|
21
|
+
|
|
22
|
+
private _resolvePlayer(): HTMLElement | null {
|
|
23
|
+
const forId = this.getAttribute("for");
|
|
24
|
+
if (forId) return document.getElementById(forId);
|
|
25
|
+
return this.closest("fw-player");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
connectedCallback() {
|
|
29
|
+
super.connectedCallback();
|
|
30
|
+
this._player = this._resolvePlayer();
|
|
31
|
+
if (!this._player) return;
|
|
32
|
+
const pc = this._player.pc;
|
|
33
|
+
if (!pc) return;
|
|
34
|
+
|
|
35
|
+
this.isFullscreen = pc.s.isFullscreen;
|
|
36
|
+
const handler = () => {
|
|
37
|
+
this.isFullscreen = this._player.pc.s.isFullscreen;
|
|
38
|
+
};
|
|
39
|
+
this._player.addEventListener("fw-fullscreen-change", handler);
|
|
40
|
+
this._player.addEventListener("fw-ready", handler);
|
|
41
|
+
this._cleanup = () => {
|
|
42
|
+
this._player?.removeEventListener("fw-fullscreen-change", handler);
|
|
43
|
+
this._player?.removeEventListener("fw-ready", handler);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
disconnectedCallback() {
|
|
48
|
+
super.disconnectedCallback();
|
|
49
|
+
this._cleanup?.();
|
|
50
|
+
this._cleanup = null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
private handleClick() {
|
|
54
|
+
this._player?.pc?.toggleFullscreen();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
render() {
|
|
58
|
+
return html`<button
|
|
59
|
+
type="button"
|
|
60
|
+
class="fw-btn-flush"
|
|
61
|
+
aria-label=${this.isFullscreen ? this._t("exitFullscreen") : this._t("fullscreen")}
|
|
62
|
+
aria-pressed=${this.isFullscreen}
|
|
63
|
+
title=${this.isFullscreen ? this._t("exitFullscreen") : this._t("fullscreen")}
|
|
64
|
+
@click=${this.handleClick}
|
|
65
|
+
>
|
|
66
|
+
${this.isFullscreen ? "\u2716" : "\u26F6"}
|
|
67
|
+
</button>`;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
declare global {
|
|
72
|
+
interface HTMLElementTagNameMap {
|
|
73
|
+
"fw-fullscreen-button": FwFullscreenButton;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { LitElement, html, css } from "lit";
|
|
2
|
+
import { customElement, state } from "lit/decorators.js";
|
|
3
|
+
import { createTranslator, type TranslateFn } from "@livepeer-frameworks/player-core";
|
|
4
|
+
|
|
5
|
+
@customElement("fw-live-badge")
|
|
6
|
+
export class FwLiveBadge extends LitElement {
|
|
7
|
+
@state() private isLive = false;
|
|
8
|
+
private _player: any = null;
|
|
9
|
+
private _cleanup: (() => void) | null = null;
|
|
10
|
+
|
|
11
|
+
private get _t(): TranslateFn {
|
|
12
|
+
return this._player?.pc?.t ?? createTranslator({ locale: "en" });
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
static styles = css`
|
|
16
|
+
:host {
|
|
17
|
+
display: inline-flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
}
|
|
20
|
+
button {
|
|
21
|
+
display: inline-flex;
|
|
22
|
+
align-items: center;
|
|
23
|
+
gap: 0.25rem;
|
|
24
|
+
border: none;
|
|
25
|
+
background: none;
|
|
26
|
+
cursor: pointer;
|
|
27
|
+
padding: 0.125rem 0.375rem;
|
|
28
|
+
border-radius: 0.25rem;
|
|
29
|
+
font-size: 0.625rem;
|
|
30
|
+
font-weight: 700;
|
|
31
|
+
text-transform: uppercase;
|
|
32
|
+
letter-spacing: 0.05em;
|
|
33
|
+
color: inherit;
|
|
34
|
+
}
|
|
35
|
+
.dot {
|
|
36
|
+
width: 0.375rem;
|
|
37
|
+
height: 0.375rem;
|
|
38
|
+
border-radius: 50%;
|
|
39
|
+
background: #ef4444;
|
|
40
|
+
}
|
|
41
|
+
:host([live]) .dot {
|
|
42
|
+
animation: pulse 1.5s ease-in-out infinite;
|
|
43
|
+
}
|
|
44
|
+
@keyframes pulse {
|
|
45
|
+
0%,
|
|
46
|
+
100% {
|
|
47
|
+
opacity: 1;
|
|
48
|
+
}
|
|
49
|
+
50% {
|
|
50
|
+
opacity: 0.4;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
`;
|
|
54
|
+
|
|
55
|
+
private _resolvePlayer(): HTMLElement | null {
|
|
56
|
+
const forId = this.getAttribute("for");
|
|
57
|
+
if (forId) return document.getElementById(forId);
|
|
58
|
+
return this.closest("fw-player");
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
connectedCallback() {
|
|
62
|
+
super.connectedCallback();
|
|
63
|
+
this._player = this._resolvePlayer();
|
|
64
|
+
if (!this._player) return;
|
|
65
|
+
const pc = this._player.pc;
|
|
66
|
+
if (!pc) return;
|
|
67
|
+
|
|
68
|
+
this.syncLive();
|
|
69
|
+
const handler = () => this.syncLive();
|
|
70
|
+
this._player.addEventListener("fw-state-change", handler);
|
|
71
|
+
this._player.addEventListener("fw-stream-state", handler);
|
|
72
|
+
this._player.addEventListener("fw-ready", handler);
|
|
73
|
+
this._cleanup = () => {
|
|
74
|
+
this._player?.removeEventListener("fw-state-change", handler);
|
|
75
|
+
this._player?.removeEventListener("fw-stream-state", handler);
|
|
76
|
+
this._player?.removeEventListener("fw-ready", handler);
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
disconnectedCallback() {
|
|
81
|
+
super.disconnectedCallback();
|
|
82
|
+
this._cleanup?.();
|
|
83
|
+
this._cleanup = null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
private syncLive() {
|
|
87
|
+
const live = this._player?.pc?.s?.isEffectivelyLive ?? false;
|
|
88
|
+
this.isLive = live;
|
|
89
|
+
this.toggleAttribute("live", live);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
private handleClick() {
|
|
93
|
+
this._player?.pc?.jumpToLive();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
render() {
|
|
97
|
+
if (!this.isLive) return html``;
|
|
98
|
+
|
|
99
|
+
return html`<button type="button" aria-label=${this._t("live")} @click=${this.handleClick}>
|
|
100
|
+
<span class="dot"></span> ${this._t("live").toUpperCase()}
|
|
101
|
+
</button>`;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
declare global {
|
|
106
|
+
interface HTMLElementTagNameMap {
|
|
107
|
+
"fw-live-badge": FwLiveBadge;
|
|
108
|
+
}
|
|
109
|
+
}
|