@livepeer-frameworks/player-wc 0.1.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/dist/cjs/components/fw-context-menu.js +17 -0
- package/dist/cjs/components/fw-context-menu.js.map +1 -0
- package/dist/cjs/components/fw-dev-mode-panel.js +273 -0
- package/dist/cjs/components/fw-dev-mode-panel.js.map +1 -0
- package/dist/cjs/components/fw-error-overlay.js +101 -0
- package/dist/cjs/components/fw-error-overlay.js.map +1 -0
- package/dist/cjs/components/fw-idle-screen.js +182 -0
- package/dist/cjs/components/fw-idle-screen.js.map +1 -0
- package/dist/cjs/components/fw-loading-spinner.js +62 -0
- package/dist/cjs/components/fw-loading-spinner.js.map +1 -0
- package/dist/cjs/components/fw-player-controls.js +258 -0
- package/dist/cjs/components/fw-player-controls.js.map +1 -0
- package/dist/cjs/components/fw-player.js +570 -0
- package/dist/cjs/components/fw-player.js.map +1 -0
- package/dist/cjs/components/fw-seek-bar.js +233 -0
- package/dist/cjs/components/fw-seek-bar.js.map +1 -0
- package/dist/cjs/components/fw-settings-menu.js +126 -0
- package/dist/cjs/components/fw-settings-menu.js.map +1 -0
- package/dist/cjs/components/fw-skip-indicator.js +143 -0
- package/dist/cjs/components/fw-skip-indicator.js.map +1 -0
- package/dist/cjs/components/fw-speed-indicator.js +61 -0
- package/dist/cjs/components/fw-speed-indicator.js.map +1 -0
- package/dist/cjs/components/fw-stats-panel.js +141 -0
- package/dist/cjs/components/fw-stats-panel.js.map +1 -0
- package/dist/cjs/components/fw-subtitle-renderer.js +70 -0
- package/dist/cjs/components/fw-subtitle-renderer.js.map +1 -0
- package/dist/cjs/components/fw-title-overlay.js +72 -0
- package/dist/cjs/components/fw-title-overlay.js.map +1 -0
- package/dist/cjs/components/fw-toast.js +74 -0
- package/dist/cjs/components/fw-toast.js.map +1 -0
- package/dist/cjs/components/fw-volume-control.js +140 -0
- package/dist/cjs/components/fw-volume-control.js.map +1 -0
- package/dist/cjs/controllers/player-controller-host.js +315 -0
- package/dist/cjs/controllers/player-controller-host.js.map +1 -0
- package/dist/cjs/define.js +45 -0
- package/dist/cjs/define.js.map +1 -0
- package/dist/cjs/icons/index.js +153 -0
- package/dist/cjs/icons/index.js.map +1 -0
- package/dist/cjs/index.js +88 -0
- package/dist/cjs/index.js.map +1 -0
- 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 +33 -0
- 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 +1 -0
- package/dist/cjs/styles/shared-styles.js +1967 -0
- package/dist/cjs/styles/shared-styles.js.map +1 -0
- package/dist/cjs/styles/utility-styles.js +725 -0
- package/dist/cjs/styles/utility-styles.js.map +1 -0
- package/dist/esm/components/fw-context-menu.js +17 -0
- package/dist/esm/components/fw-context-menu.js.map +1 -0
- package/dist/esm/components/fw-dev-mode-panel.js +273 -0
- package/dist/esm/components/fw-dev-mode-panel.js.map +1 -0
- package/dist/esm/components/fw-error-overlay.js +101 -0
- package/dist/esm/components/fw-error-overlay.js.map +1 -0
- package/dist/esm/components/fw-idle-screen.js +182 -0
- package/dist/esm/components/fw-idle-screen.js.map +1 -0
- package/dist/esm/components/fw-loading-spinner.js +62 -0
- package/dist/esm/components/fw-loading-spinner.js.map +1 -0
- package/dist/esm/components/fw-player-controls.js +258 -0
- package/dist/esm/components/fw-player-controls.js.map +1 -0
- package/dist/esm/components/fw-player.js +570 -0
- package/dist/esm/components/fw-player.js.map +1 -0
- package/dist/esm/components/fw-seek-bar.js +233 -0
- package/dist/esm/components/fw-seek-bar.js.map +1 -0
- package/dist/esm/components/fw-settings-menu.js +126 -0
- package/dist/esm/components/fw-settings-menu.js.map +1 -0
- package/dist/esm/components/fw-skip-indicator.js +143 -0
- package/dist/esm/components/fw-skip-indicator.js.map +1 -0
- package/dist/esm/components/fw-speed-indicator.js +61 -0
- package/dist/esm/components/fw-speed-indicator.js.map +1 -0
- package/dist/esm/components/fw-stats-panel.js +141 -0
- package/dist/esm/components/fw-stats-panel.js.map +1 -0
- package/dist/esm/components/fw-subtitle-renderer.js +70 -0
- package/dist/esm/components/fw-subtitle-renderer.js.map +1 -0
- package/dist/esm/components/fw-title-overlay.js +72 -0
- package/dist/esm/components/fw-title-overlay.js.map +1 -0
- package/dist/esm/components/fw-toast.js +74 -0
- package/dist/esm/components/fw-toast.js.map +1 -0
- package/dist/esm/components/fw-volume-control.js +140 -0
- package/dist/esm/components/fw-volume-control.js.map +1 -0
- package/dist/esm/controllers/player-controller-host.js +313 -0
- package/dist/esm/controllers/player-controller-host.js.map +1 -0
- package/dist/esm/define.js +43 -0
- package/dist/esm/define.js.map +1 -0
- package/dist/esm/icons/index.js +141 -0
- package/dist/esm/icons/index.js.map +1 -0
- package/dist/esm/index.js +18 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/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 +31 -0
- package/dist/esm/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 +1 -0
- package/dist/esm/styles/shared-styles.js +1965 -0
- package/dist/esm/styles/shared-styles.js.map +1 -0
- package/dist/esm/styles/utility-styles.js +723 -0
- package/dist/esm/styles/utility-styles.js.map +1 -0
- package/dist/fw-player.iife.js +4362 -0
- package/dist/fw-player.iife.js.map +1 -0
- package/dist/types/components/fw-context-menu.d.ts +15 -0
- package/dist/types/components/fw-dev-mode-panel.d.ts +24 -0
- package/dist/types/components/fw-error-overlay.d.ts +14 -0
- package/dist/types/components/fw-idle-screen.d.ts +13 -0
- package/dist/types/components/fw-loading-spinner.d.ts +10 -0
- package/dist/types/components/fw-player-controls.d.ts +23 -0
- package/dist/types/components/fw-player.d.ts +74 -0
- package/dist/types/components/fw-seek-bar.d.ts +33 -0
- package/dist/types/components/fw-settings-menu.d.ts +16 -0
- package/dist/types/components/fw-skip-indicator.d.ts +18 -0
- package/dist/types/components/fw-speed-indicator.d.ts +11 -0
- package/dist/types/components/fw-stats-panel.d.ts +18 -0
- package/dist/types/components/fw-subtitle-renderer.d.ts +21 -0
- package/dist/types/components/fw-title-overlay.d.ts +12 -0
- package/dist/types/components/fw-toast.d.ts +12 -0
- package/dist/types/components/fw-volume-control.d.ts +18 -0
- package/dist/types/controllers/player-controller-host.d.ts +119 -0
- package/dist/types/define.d.ts +1 -0
- package/dist/types/icons/index.d.ts +23 -0
- package/dist/types/iife-entry.d.ts +11 -0
- package/dist/types/index.d.ts +25 -0
- package/dist/types/styles/shared-styles.d.ts +1 -0
- package/dist/types/styles/utility-styles.d.ts +1 -0
- package/package.json +65 -0
- package/src/components/fw-context-menu.ts +23 -0
- package/src/components/fw-dev-mode-panel.ts +285 -0
- package/src/components/fw-error-overlay.ts +96 -0
- package/src/components/fw-idle-screen.ts +182 -0
- package/src/components/fw-loading-spinner.ts +63 -0
- package/src/components/fw-player-controls.ts +256 -0
- package/src/components/fw-player.ts +557 -0
- package/src/components/fw-seek-bar.ts +219 -0
- package/src/components/fw-settings-menu.ts +128 -0
- package/src/components/fw-skip-indicator.ts +139 -0
- package/src/components/fw-speed-indicator.ts +57 -0
- package/src/components/fw-stats-panel.ts +154 -0
- package/src/components/fw-subtitle-renderer.ts +65 -0
- package/src/components/fw-title-overlay.ts +64 -0
- package/src/components/fw-toast.ts +70 -0
- package/src/components/fw-volume-control.ts +140 -0
- package/src/controllers/player-controller-host.ts +457 -0
- package/src/define.ts +43 -0
- package/src/icons/index.ts +209 -0
- package/src/iife-entry.ts +11 -0
- package/src/index.ts +31 -0
- package/src/styles/shared-styles.ts +1962 -0
- package/src/styles/utility-styles.ts +720 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <fw-context-menu> — Placeholder for right-click context menu.
|
|
3
|
+
* The actual context menu is rendered inline by <fw-player> since it needs
|
|
4
|
+
* to be positioned relative to mouse coordinates. This component exists
|
|
5
|
+
* for the module export and define.ts registration.
|
|
6
|
+
*/
|
|
7
|
+
import { LitElement } from "lit";
|
|
8
|
+
export declare class FwContextMenu extends LitElement {
|
|
9
|
+
static styles: import("lit").CSSResult;
|
|
10
|
+
}
|
|
11
|
+
declare global {
|
|
12
|
+
interface HTMLElementTagNameMap {
|
|
13
|
+
"fw-context-menu": FwContextMenu;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <fw-dev-mode-panel> — Developer mode panel for forcing player/source selection.
|
|
3
|
+
* Port of DevModePanel.tsx from player-react.
|
|
4
|
+
*/
|
|
5
|
+
import { LitElement } from "lit";
|
|
6
|
+
import type { PlayerControllerHost } from "../controllers/player-controller-host.js";
|
|
7
|
+
import type { PlaybackMode } from "@livepeer-frameworks/player-core";
|
|
8
|
+
export declare class FwDevModePanel extends LitElement {
|
|
9
|
+
pc: PlayerControllerHost;
|
|
10
|
+
playbackMode: PlaybackMode;
|
|
11
|
+
private _activeTab;
|
|
12
|
+
static styles: import("lit").CSSResult[];
|
|
13
|
+
private _modes;
|
|
14
|
+
protected render(): import("lit").TemplateResult<1>;
|
|
15
|
+
private _renderConfig;
|
|
16
|
+
private _renderStats;
|
|
17
|
+
private _resolution;
|
|
18
|
+
private _row;
|
|
19
|
+
}
|
|
20
|
+
declare global {
|
|
21
|
+
interface HTMLElementTagNameMap {
|
|
22
|
+
"fw-dev-mode-panel": FwDevModePanel;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export declare class FwErrorOverlay extends LitElement {
|
|
3
|
+
error: string | null;
|
|
4
|
+
isPassive: boolean;
|
|
5
|
+
static styles: import("lit").CSSResult[];
|
|
6
|
+
protected render(): import("lit").TemplateResult<1>;
|
|
7
|
+
private _clearError;
|
|
8
|
+
private _retry;
|
|
9
|
+
}
|
|
10
|
+
declare global {
|
|
11
|
+
interface HTMLElementTagNameMap {
|
|
12
|
+
"fw-error-overlay": FwErrorOverlay;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export declare class FwIdleScreen extends LitElement {
|
|
3
|
+
status?: string;
|
|
4
|
+
message?: string;
|
|
5
|
+
percentage?: number;
|
|
6
|
+
static styles: import("lit").CSSResult[];
|
|
7
|
+
protected render(): import("lit").TemplateResult<1>;
|
|
8
|
+
}
|
|
9
|
+
declare global {
|
|
10
|
+
interface HTMLElementTagNameMap {
|
|
11
|
+
"fw-idle-screen": FwIdleScreen;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export declare class FwLoadingSpinner extends LitElement {
|
|
3
|
+
static styles: import("lit").CSSResult;
|
|
4
|
+
protected render(): import("lit").TemplateResult<1>;
|
|
5
|
+
}
|
|
6
|
+
declare global {
|
|
7
|
+
interface HTMLElementTagNameMap {
|
|
8
|
+
"fw-loading-spinner": FwLoadingSpinner;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <fw-player-controls> — Control bar with play/pause, seek, volume, quality, fullscreen.
|
|
3
|
+
* Port of PlayerControls.tsx from player-react.
|
|
4
|
+
*/
|
|
5
|
+
import { LitElement } from "lit";
|
|
6
|
+
import type { PlayerControllerHost } from "../controllers/player-controller-host.js";
|
|
7
|
+
import type { PlaybackMode } from "@livepeer-frameworks/player-core";
|
|
8
|
+
export declare class FwPlayerControls extends LitElement {
|
|
9
|
+
pc: PlayerControllerHost;
|
|
10
|
+
playbackMode: PlaybackMode;
|
|
11
|
+
isContentLive: boolean;
|
|
12
|
+
isStatsOpen: boolean;
|
|
13
|
+
private _settingsOpen;
|
|
14
|
+
static styles: import("lit").CSSResult[];
|
|
15
|
+
private _formatTime;
|
|
16
|
+
private get _isNearLive();
|
|
17
|
+
protected render(): import("lit").TemplateResult<1>;
|
|
18
|
+
}
|
|
19
|
+
declare global {
|
|
20
|
+
interface HTMLElementTagNameMap {
|
|
21
|
+
"fw-player-controls": FwPlayerControls;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <fw-player> — Main player web component.
|
|
3
|
+
* Port of Player.tsx / PlayerInner from player-react.
|
|
4
|
+
*/
|
|
5
|
+
import { LitElement, type PropertyValues } from "lit";
|
|
6
|
+
import { PlayerControllerHost } from "../controllers/player-controller-host.js";
|
|
7
|
+
import type { ContentEndpoints, PlaybackMode } from "@livepeer-frameworks/player-core";
|
|
8
|
+
export declare class FwPlayer extends LitElement {
|
|
9
|
+
contentId: string;
|
|
10
|
+
contentType?: "live" | "dvr" | "clip" | "vod";
|
|
11
|
+
gatewayUrl?: string;
|
|
12
|
+
mistUrl?: string;
|
|
13
|
+
authToken?: string;
|
|
14
|
+
autoplay: boolean;
|
|
15
|
+
muted: boolean;
|
|
16
|
+
controls: boolean;
|
|
17
|
+
debug: boolean;
|
|
18
|
+
devMode: boolean;
|
|
19
|
+
thumbnailUrl?: string;
|
|
20
|
+
playbackMode: PlaybackMode;
|
|
21
|
+
endpoints?: ContentEndpoints;
|
|
22
|
+
private _isStatsOpen;
|
|
23
|
+
private _isDevPanelOpen;
|
|
24
|
+
private _skipDirection;
|
|
25
|
+
private _contextMenuOpen;
|
|
26
|
+
private _contextMenuX;
|
|
27
|
+
private _contextMenuY;
|
|
28
|
+
private _containerEl;
|
|
29
|
+
pc: PlayerControllerHost;
|
|
30
|
+
static styles: import("lit").CSSResult[];
|
|
31
|
+
protected willUpdate(changed: PropertyValues): void;
|
|
32
|
+
protected firstUpdated(): void;
|
|
33
|
+
disconnectedCallback(): void;
|
|
34
|
+
private _handleContextMenu;
|
|
35
|
+
private _handleDocumentClick;
|
|
36
|
+
private _handleDocumentContextMenu;
|
|
37
|
+
private _toastTimer?;
|
|
38
|
+
protected updated(changed: PropertyValues): void;
|
|
39
|
+
private get _showTitleOverlay();
|
|
40
|
+
private get _showBufferingSpinner();
|
|
41
|
+
private get _showWaitingForEndpoint();
|
|
42
|
+
private get _useStockControls();
|
|
43
|
+
play(): Promise<void>;
|
|
44
|
+
pause(): void;
|
|
45
|
+
togglePlay(): void;
|
|
46
|
+
seek(time: number): void;
|
|
47
|
+
seekBy(delta: number): void;
|
|
48
|
+
jumpToLive(): void;
|
|
49
|
+
setVolume(volume: number): void;
|
|
50
|
+
toggleMute(): void;
|
|
51
|
+
toggleLoop(): void;
|
|
52
|
+
toggleFullscreen(): Promise<void>;
|
|
53
|
+
togglePiP(): Promise<void>;
|
|
54
|
+
toggleSubtitles(): void;
|
|
55
|
+
retry(): Promise<void>;
|
|
56
|
+
reload(): Promise<void>;
|
|
57
|
+
getQualities(): {
|
|
58
|
+
id: string;
|
|
59
|
+
label: string;
|
|
60
|
+
bitrate?: number;
|
|
61
|
+
width?: number;
|
|
62
|
+
height?: number;
|
|
63
|
+
isAuto?: boolean;
|
|
64
|
+
active?: boolean;
|
|
65
|
+
}[];
|
|
66
|
+
selectQuality(id: string): void;
|
|
67
|
+
destroy(): void;
|
|
68
|
+
protected render(): import("lit").TemplateResult<1>;
|
|
69
|
+
}
|
|
70
|
+
declare global {
|
|
71
|
+
interface HTMLElementTagNameMap {
|
|
72
|
+
"fw-player": FwPlayer;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <fw-seek-bar> — Video seek bar with buffer visualization, drag, tooltips.
|
|
3
|
+
* Port of SeekBar.tsx from player-react.
|
|
4
|
+
*/
|
|
5
|
+
import { LitElement } from "lit";
|
|
6
|
+
export declare class FwSeekBar extends LitElement {
|
|
7
|
+
currentTime: number;
|
|
8
|
+
duration: number;
|
|
9
|
+
disabled: boolean;
|
|
10
|
+
isLive: boolean;
|
|
11
|
+
private _hovering;
|
|
12
|
+
private _dragging;
|
|
13
|
+
private _hoverPct;
|
|
14
|
+
private _dragPct;
|
|
15
|
+
private _trackEl;
|
|
16
|
+
static styles: import("lit").CSSResult[];
|
|
17
|
+
private _pctFromEvent;
|
|
18
|
+
private _timeFromPct;
|
|
19
|
+
private _formatTime;
|
|
20
|
+
private _handlePointerDown;
|
|
21
|
+
private _handlePointerMove;
|
|
22
|
+
private _handlePointerUp;
|
|
23
|
+
private _handleClick;
|
|
24
|
+
private _handleMouseEnter;
|
|
25
|
+
private _handleMouseLeave;
|
|
26
|
+
private get _progressPct();
|
|
27
|
+
protected render(): import("lit").TemplateResult<1>;
|
|
28
|
+
}
|
|
29
|
+
declare global {
|
|
30
|
+
interface HTMLElementTagNameMap {
|
|
31
|
+
"fw-seek-bar": FwSeekBar;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <fw-settings-menu> — Quality, speed, and captions settings popup.
|
|
3
|
+
*/
|
|
4
|
+
import { LitElement, nothing } from "lit";
|
|
5
|
+
import type { PlayerControllerHost } from "../controllers/player-controller-host.js";
|
|
6
|
+
export declare class FwSettingsMenu extends LitElement {
|
|
7
|
+
pc: PlayerControllerHost;
|
|
8
|
+
open: boolean;
|
|
9
|
+
static styles: import("lit").CSSResult[];
|
|
10
|
+
protected render(): import("lit").TemplateResult<1> | typeof nothing;
|
|
11
|
+
}
|
|
12
|
+
declare global {
|
|
13
|
+
interface HTMLElementTagNameMap {
|
|
14
|
+
"fw-settings-menu": FwSettingsMenu;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { LitElement, nothing } from "lit";
|
|
2
|
+
export type SkipDirection = "back" | "forward" | null;
|
|
3
|
+
export declare class FwSkipIndicator extends LitElement {
|
|
4
|
+
direction: SkipDirection;
|
|
5
|
+
seconds: number;
|
|
6
|
+
private _visible;
|
|
7
|
+
private _timer?;
|
|
8
|
+
static styles: import("lit").CSSResult;
|
|
9
|
+
protected updated(): void;
|
|
10
|
+
private _renderRewind;
|
|
11
|
+
private _renderForward;
|
|
12
|
+
protected render(): import("lit").TemplateResult<1> | typeof nothing;
|
|
13
|
+
}
|
|
14
|
+
declare global {
|
|
15
|
+
interface HTMLElementTagNameMap {
|
|
16
|
+
"fw-skip-indicator": FwSkipIndicator;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export declare class FwSpeedIndicator extends LitElement {
|
|
3
|
+
speed: number;
|
|
4
|
+
static styles: import("lit").CSSResult;
|
|
5
|
+
protected render(): import("lit").TemplateResult<1>;
|
|
6
|
+
}
|
|
7
|
+
declare global {
|
|
8
|
+
interface HTMLElementTagNameMap {
|
|
9
|
+
"fw-speed-indicator": FwSpeedIndicator;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <fw-stats-panel> — Stats for nerds overlay.
|
|
3
|
+
* Port of StatsPanel.tsx from player-react.
|
|
4
|
+
*/
|
|
5
|
+
import { LitElement } from "lit";
|
|
6
|
+
import type { PlayerControllerHost } from "../controllers/player-controller-host.js";
|
|
7
|
+
export declare class FwStatsPanel extends LitElement {
|
|
8
|
+
pc: PlayerControllerHost;
|
|
9
|
+
static styles: import("lit").CSSResult[];
|
|
10
|
+
private _resolution;
|
|
11
|
+
private _stat;
|
|
12
|
+
protected render(): import("lit").TemplateResult<1>;
|
|
13
|
+
}
|
|
14
|
+
declare global {
|
|
15
|
+
interface HTMLElementTagNameMap {
|
|
16
|
+
"fw-stats-panel": FwStatsPanel;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { LitElement, nothing } from "lit";
|
|
2
|
+
interface SubtitleCue {
|
|
3
|
+
id?: string;
|
|
4
|
+
startTime: number;
|
|
5
|
+
endTime: number;
|
|
6
|
+
text: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class FwSubtitleRenderer extends LitElement {
|
|
9
|
+
currentTime: number;
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
cues: SubtitleCue[];
|
|
12
|
+
static styles: import("lit").CSSResult;
|
|
13
|
+
private get _activeCue();
|
|
14
|
+
protected render(): import("lit").TemplateResult<1> | typeof nothing;
|
|
15
|
+
}
|
|
16
|
+
declare global {
|
|
17
|
+
interface HTMLElementTagNameMap {
|
|
18
|
+
"fw-subtitle-renderer": FwSubtitleRenderer;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { LitElement, nothing } from "lit";
|
|
2
|
+
export declare class FwTitleOverlay extends LitElement {
|
|
3
|
+
title: string;
|
|
4
|
+
description: string | null;
|
|
5
|
+
static styles: import("lit").CSSResult[];
|
|
6
|
+
protected render(): import("lit").TemplateResult<1> | typeof nothing;
|
|
7
|
+
}
|
|
8
|
+
declare global {
|
|
9
|
+
interface HTMLElementTagNameMap {
|
|
10
|
+
"fw-title-overlay": FwTitleOverlay;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { LitElement, nothing } from "lit";
|
|
2
|
+
export declare class FwToast extends LitElement {
|
|
3
|
+
message: string;
|
|
4
|
+
static styles: import("lit").CSSResult;
|
|
5
|
+
protected render(): import("lit").TemplateResult<1> | typeof nothing;
|
|
6
|
+
private _dismiss;
|
|
7
|
+
}
|
|
8
|
+
declare global {
|
|
9
|
+
interface HTMLElementTagNameMap {
|
|
10
|
+
"fw-toast": FwToast;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <fw-volume-control> — Mute toggle + volume slider.
|
|
3
|
+
*/
|
|
4
|
+
import { LitElement } from "lit";
|
|
5
|
+
import type { PlayerControllerHost } from "../controllers/player-controller-host.js";
|
|
6
|
+
export declare class FwVolumeControl extends LitElement {
|
|
7
|
+
pc: PlayerControllerHost;
|
|
8
|
+
private _expanded;
|
|
9
|
+
static styles: import("lit").CSSResult[];
|
|
10
|
+
private _handleSliderClick;
|
|
11
|
+
private _handleSliderDrag;
|
|
12
|
+
protected render(): import("lit").TemplateResult<1>;
|
|
13
|
+
}
|
|
14
|
+
declare global {
|
|
15
|
+
interface HTMLElementTagNameMap {
|
|
16
|
+
"fw-volume-control": FwVolumeControl;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PlayerControllerHost — Lit ReactiveController wrapping the headless PlayerController.
|
|
3
|
+
* Direct port of usePlayerController.ts from player-react.
|
|
4
|
+
*/
|
|
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";
|
|
7
|
+
export interface PlayerControllerHostState {
|
|
8
|
+
state: PlayerState;
|
|
9
|
+
streamState: StreamState | null;
|
|
10
|
+
endpoints: ContentEndpoints | null;
|
|
11
|
+
metadata: ContentMetadata | null;
|
|
12
|
+
videoElement: HTMLVideoElement | null;
|
|
13
|
+
currentTime: number;
|
|
14
|
+
duration: number;
|
|
15
|
+
isPlaying: boolean;
|
|
16
|
+
isPaused: boolean;
|
|
17
|
+
isBuffering: boolean;
|
|
18
|
+
isMuted: boolean;
|
|
19
|
+
volume: number;
|
|
20
|
+
error: string | null;
|
|
21
|
+
errorDetails: ClassifiedError["details"] | null;
|
|
22
|
+
isPassiveError: boolean;
|
|
23
|
+
hasPlaybackStarted: boolean;
|
|
24
|
+
isHoldingSpeed: boolean;
|
|
25
|
+
holdSpeed: number;
|
|
26
|
+
isHovering: boolean;
|
|
27
|
+
shouldShowControls: boolean;
|
|
28
|
+
isLoopEnabled: boolean;
|
|
29
|
+
isFullscreen: boolean;
|
|
30
|
+
isPiPActive: boolean;
|
|
31
|
+
isEffectivelyLive: boolean;
|
|
32
|
+
shouldShowIdleScreen: boolean;
|
|
33
|
+
currentPlayerInfo: {
|
|
34
|
+
name: string;
|
|
35
|
+
shortname: string;
|
|
36
|
+
} | null;
|
|
37
|
+
currentSourceInfo: {
|
|
38
|
+
url: string;
|
|
39
|
+
type: string;
|
|
40
|
+
} | null;
|
|
41
|
+
playbackQuality: PlaybackQuality | null;
|
|
42
|
+
subtitlesEnabled: boolean;
|
|
43
|
+
qualities: Array<{
|
|
44
|
+
id: string;
|
|
45
|
+
label: string;
|
|
46
|
+
bitrate?: number;
|
|
47
|
+
width?: number;
|
|
48
|
+
height?: number;
|
|
49
|
+
isAuto?: boolean;
|
|
50
|
+
active?: boolean;
|
|
51
|
+
}>;
|
|
52
|
+
textTracks: Array<{
|
|
53
|
+
id: string;
|
|
54
|
+
label: string;
|
|
55
|
+
language?: string;
|
|
56
|
+
active: boolean;
|
|
57
|
+
}>;
|
|
58
|
+
streamInfo: StreamInfo | null;
|
|
59
|
+
toast: {
|
|
60
|
+
message: string;
|
|
61
|
+
timestamp: number;
|
|
62
|
+
} | null;
|
|
63
|
+
}
|
|
64
|
+
type HostElement = ReactiveControllerHost & HTMLElement;
|
|
65
|
+
export declare class PlayerControllerHost implements ReactiveController {
|
|
66
|
+
host: HostElement;
|
|
67
|
+
private controller;
|
|
68
|
+
private unsubs;
|
|
69
|
+
private currentConfig;
|
|
70
|
+
s: PlayerControllerHostState;
|
|
71
|
+
constructor(host: HostElement);
|
|
72
|
+
configure(config: PlayerControllerConfig): void;
|
|
73
|
+
attach(container: HTMLDivElement): Promise<void>;
|
|
74
|
+
hostConnected(): void;
|
|
75
|
+
hostDisconnected(): void;
|
|
76
|
+
private teardown;
|
|
77
|
+
private update;
|
|
78
|
+
private syncState;
|
|
79
|
+
private subscribeToEvents;
|
|
80
|
+
private dispatchEvent;
|
|
81
|
+
play(): Promise<void>;
|
|
82
|
+
pause(): void;
|
|
83
|
+
togglePlay(): void;
|
|
84
|
+
seek(time: number): void;
|
|
85
|
+
seekBy(delta: number): void;
|
|
86
|
+
jumpToLive(): void;
|
|
87
|
+
setVolume(volume: number): void;
|
|
88
|
+
toggleMute(): void;
|
|
89
|
+
toggleLoop(): void;
|
|
90
|
+
toggleFullscreen(): Promise<void>;
|
|
91
|
+
togglePiP(): Promise<void>;
|
|
92
|
+
toggleSubtitles(): void;
|
|
93
|
+
clearError(): void;
|
|
94
|
+
dismissToast(): void;
|
|
95
|
+
retry(): Promise<void>;
|
|
96
|
+
reload(): Promise<void>;
|
|
97
|
+
getQualities(): {
|
|
98
|
+
id: string;
|
|
99
|
+
label: string;
|
|
100
|
+
bitrate?: number;
|
|
101
|
+
width?: number;
|
|
102
|
+
height?: number;
|
|
103
|
+
isAuto?: boolean;
|
|
104
|
+
active?: boolean;
|
|
105
|
+
}[];
|
|
106
|
+
selectQuality(id: string): void;
|
|
107
|
+
handleMouseEnter(): void;
|
|
108
|
+
handleMouseLeave(): void;
|
|
109
|
+
handleMouseMove(): void;
|
|
110
|
+
handleTouchStart(): void;
|
|
111
|
+
setDevModeOptions(options: {
|
|
112
|
+
forcePlayer?: string;
|
|
113
|
+
forceType?: string;
|
|
114
|
+
forceSource?: number;
|
|
115
|
+
playbackMode?: "auto" | "low-latency" | "quality" | "vod";
|
|
116
|
+
}): Promise<void>;
|
|
117
|
+
getController(): PlayerController | null;
|
|
118
|
+
}
|
|
119
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SVG icons as Lit html template functions.
|
|
3
|
+
* Port of Icons.tsx from player-react.
|
|
4
|
+
*/
|
|
5
|
+
import { type TemplateResult } from "lit";
|
|
6
|
+
type IconTemplate = (size?: number, color?: string) => TemplateResult;
|
|
7
|
+
export declare const playIcon: IconTemplate;
|
|
8
|
+
export declare const pauseIcon: IconTemplate;
|
|
9
|
+
export declare const skipBackIcon: IconTemplate;
|
|
10
|
+
export declare const skipForwardIcon: IconTemplate;
|
|
11
|
+
export declare const volumeUpIcon: IconTemplate;
|
|
12
|
+
export declare const volumeOffIcon: IconTemplate;
|
|
13
|
+
export declare const fullscreenIcon: IconTemplate;
|
|
14
|
+
export declare const fullscreenExitIcon: IconTemplate;
|
|
15
|
+
export declare const pictureInPictureIcon: IconTemplate;
|
|
16
|
+
export declare const closedCaptionsIcon: IconTemplate;
|
|
17
|
+
export declare const liveIcon: IconTemplate;
|
|
18
|
+
export declare const settingsIcon: IconTemplate;
|
|
19
|
+
export declare const statsIcon: IconTemplate;
|
|
20
|
+
export declare const seekToLiveIcon: IconTemplate;
|
|
21
|
+
export declare const closeIcon: IconTemplate;
|
|
22
|
+
export declare const loopIcon: IconTemplate;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IIFE entry point for CDN usage.
|
|
3
|
+
* Bundles Lit + player-core + all components into a single self-registering script.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* <script src="https://cdn.example.com/@livepeer-frameworks/player-wc/dist/fw-player.iife.js"></script>
|
|
7
|
+
* <fw-player content-id="my-stream" gateway-url="https://..." muted autoplay></fw-player>
|
|
8
|
+
*/
|
|
9
|
+
import "./define.js";
|
|
10
|
+
export { FwPlayer } from "./components/fw-player.js";
|
|
11
|
+
export { PlayerControllerHost } from "./controllers/player-controller-host.js";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @livepeer-frameworks/player-wc
|
|
3
|
+
*
|
|
4
|
+
* Lit Web Components for FrameWorks streaming player.
|
|
5
|
+
* Import this for class access without auto-registration.
|
|
6
|
+
* Import './define' or use the IIFE bundle for auto-registration.
|
|
7
|
+
*/
|
|
8
|
+
export { FwPlayer } from "./components/fw-player.js";
|
|
9
|
+
export { FwPlayerControls } from "./components/fw-player-controls.js";
|
|
10
|
+
export { FwSeekBar } from "./components/fw-seek-bar.js";
|
|
11
|
+
export { FwVolumeControl } from "./components/fw-volume-control.js";
|
|
12
|
+
export { FwSettingsMenu } from "./components/fw-settings-menu.js";
|
|
13
|
+
export { FwIdleScreen } from "./components/fw-idle-screen.js";
|
|
14
|
+
export { FwLoadingSpinner } from "./components/fw-loading-spinner.js";
|
|
15
|
+
export { FwTitleOverlay } from "./components/fw-title-overlay.js";
|
|
16
|
+
export { FwErrorOverlay } from "./components/fw-error-overlay.js";
|
|
17
|
+
export { FwToast } from "./components/fw-toast.js";
|
|
18
|
+
export { FwStatsPanel } from "./components/fw-stats-panel.js";
|
|
19
|
+
export { FwDevModePanel } from "./components/fw-dev-mode-panel.js";
|
|
20
|
+
export { FwSubtitleRenderer } from "./components/fw-subtitle-renderer.js";
|
|
21
|
+
export { FwSkipIndicator } from "./components/fw-skip-indicator.js";
|
|
22
|
+
export { FwSpeedIndicator } from "./components/fw-speed-indicator.js";
|
|
23
|
+
export { FwContextMenu } from "./components/fw-context-menu.js";
|
|
24
|
+
export { PlayerControllerHost } from "./controllers/player-controller-host.js";
|
|
25
|
+
export type { PlayerControllerHostState } from "./controllers/player-controller-host.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const sharedStyles: import("lit").CSSResult;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const utilityStyles: import("lit").CSSResult;
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@livepeer-frameworks/player-wc",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Lit Web Components for FrameWorks streaming player — <fw-player> custom element with full UI",
|
|
6
|
+
"main": "dist/cjs/index.js",
|
|
7
|
+
"module": "dist/esm/index.js",
|
|
8
|
+
"types": "dist/types/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"src"
|
|
12
|
+
],
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"source": "./src/index.ts",
|
|
16
|
+
"types": "./dist/types/index.d.ts",
|
|
17
|
+
"import": "./dist/esm/index.js",
|
|
18
|
+
"require": "./dist/cjs/index.js"
|
|
19
|
+
},
|
|
20
|
+
"./define": {
|
|
21
|
+
"source": "./src/define.ts",
|
|
22
|
+
"types": "./dist/types/define.d.ts",
|
|
23
|
+
"import": "./dist/esm/define.js",
|
|
24
|
+
"require": "./dist/cjs/define.js"
|
|
25
|
+
},
|
|
26
|
+
"./fw-player.js": {
|
|
27
|
+
"default": "./dist/fw-player.iife.js"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "pnpm run build:css && pnpm run build:types && NODE_ENV=production rollup -c",
|
|
32
|
+
"build:watch": "NODE_ENV=development rollup -c --watch",
|
|
33
|
+
"build:css": "node scripts/generate-shared-styles.js",
|
|
34
|
+
"build:types": "tsc --noEmit false --emitDeclarationOnly --outDir dist/types",
|
|
35
|
+
"type-check": "tsc --noEmit",
|
|
36
|
+
"test": "vitest run",
|
|
37
|
+
"test:watch": "vitest",
|
|
38
|
+
"test:coverage": "vitest run --coverage"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@livepeer-frameworks/player-core": "workspace:*",
|
|
42
|
+
"lit": "^3.2.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@rollup/plugin-commonjs": "^29.0.0",
|
|
46
|
+
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
47
|
+
"@rollup/plugin-terser": "^0.4.0",
|
|
48
|
+
"@rollup/plugin-typescript": "^12.1.4",
|
|
49
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
50
|
+
"rollup": "^4.57.1",
|
|
51
|
+
"tslib": "^2.8.1",
|
|
52
|
+
"typescript": "^5.9.2",
|
|
53
|
+
"vitest": "^4.0.18"
|
|
54
|
+
},
|
|
55
|
+
"keywords": [
|
|
56
|
+
"web-components",
|
|
57
|
+
"lit",
|
|
58
|
+
"streaming",
|
|
59
|
+
"player",
|
|
60
|
+
"video",
|
|
61
|
+
"custom-elements"
|
|
62
|
+
],
|
|
63
|
+
"author": "Livepeer FrameWorks",
|
|
64
|
+
"license": "Unlicense"
|
|
65
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* <fw-context-menu> — Placeholder for right-click context menu.
|
|
3
|
+
* The actual context menu is rendered inline by <fw-player> since it needs
|
|
4
|
+
* to be positioned relative to mouse coordinates. This component exists
|
|
5
|
+
* for the module export and define.ts registration.
|
|
6
|
+
*/
|
|
7
|
+
import { LitElement, css } from "lit";
|
|
8
|
+
import { customElement } from "lit/decorators.js";
|
|
9
|
+
|
|
10
|
+
@customElement("fw-context-menu")
|
|
11
|
+
export class FwContextMenu extends LitElement {
|
|
12
|
+
static styles = css`
|
|
13
|
+
:host {
|
|
14
|
+
display: none;
|
|
15
|
+
}
|
|
16
|
+
`;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare global {
|
|
20
|
+
interface HTMLElementTagNameMap {
|
|
21
|
+
"fw-context-menu": FwContextMenu;
|
|
22
|
+
}
|
|
23
|
+
}
|