@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,76 @@
|
|
|
1
|
+
import { __decorate } from '../../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';
|
|
2
|
+
import { css, LitElement, html } from 'lit';
|
|
3
|
+
import { state, customElement } from 'lit/decorators.js';
|
|
4
|
+
import { createTranslator } from '@livepeer-frameworks/player-core';
|
|
5
|
+
|
|
6
|
+
let FwFullscreenButton = class FwFullscreenButton extends LitElement {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.isFullscreen = false;
|
|
10
|
+
this._player = null;
|
|
11
|
+
this._cleanup = null;
|
|
12
|
+
}
|
|
13
|
+
get _t() {
|
|
14
|
+
return this._player?.pc?.t ?? createTranslator({ locale: "en" });
|
|
15
|
+
}
|
|
16
|
+
_resolvePlayer() {
|
|
17
|
+
const forId = this.getAttribute("for");
|
|
18
|
+
if (forId)
|
|
19
|
+
return document.getElementById(forId);
|
|
20
|
+
return this.closest("fw-player");
|
|
21
|
+
}
|
|
22
|
+
connectedCallback() {
|
|
23
|
+
super.connectedCallback();
|
|
24
|
+
this._player = this._resolvePlayer();
|
|
25
|
+
if (!this._player)
|
|
26
|
+
return;
|
|
27
|
+
const pc = this._player.pc;
|
|
28
|
+
if (!pc)
|
|
29
|
+
return;
|
|
30
|
+
this.isFullscreen = pc.s.isFullscreen;
|
|
31
|
+
const handler = () => {
|
|
32
|
+
this.isFullscreen = this._player.pc.s.isFullscreen;
|
|
33
|
+
};
|
|
34
|
+
this._player.addEventListener("fw-fullscreen-change", handler);
|
|
35
|
+
this._player.addEventListener("fw-ready", handler);
|
|
36
|
+
this._cleanup = () => {
|
|
37
|
+
this._player?.removeEventListener("fw-fullscreen-change", handler);
|
|
38
|
+
this._player?.removeEventListener("fw-ready", handler);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
disconnectedCallback() {
|
|
42
|
+
super.disconnectedCallback();
|
|
43
|
+
this._cleanup?.();
|
|
44
|
+
this._cleanup = null;
|
|
45
|
+
}
|
|
46
|
+
handleClick() {
|
|
47
|
+
this._player?.pc?.toggleFullscreen();
|
|
48
|
+
}
|
|
49
|
+
render() {
|
|
50
|
+
return html `<button
|
|
51
|
+
type="button"
|
|
52
|
+
class="fw-btn-flush"
|
|
53
|
+
aria-label=${this.isFullscreen ? this._t("exitFullscreen") : this._t("fullscreen")}
|
|
54
|
+
aria-pressed=${this.isFullscreen}
|
|
55
|
+
title=${this.isFullscreen ? this._t("exitFullscreen") : this._t("fullscreen")}
|
|
56
|
+
@click=${this.handleClick}
|
|
57
|
+
>
|
|
58
|
+
${this.isFullscreen ? "\u2716" : "\u26F6"}
|
|
59
|
+
</button>`;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
FwFullscreenButton.styles = css `
|
|
63
|
+
:host {
|
|
64
|
+
display: inline-flex;
|
|
65
|
+
align-items: center;
|
|
66
|
+
}
|
|
67
|
+
`;
|
|
68
|
+
__decorate([
|
|
69
|
+
state()
|
|
70
|
+
], FwFullscreenButton.prototype, "isFullscreen", void 0);
|
|
71
|
+
FwFullscreenButton = __decorate([
|
|
72
|
+
customElement("fw-fullscreen-button")
|
|
73
|
+
], FwFullscreenButton);
|
|
74
|
+
|
|
75
|
+
export { FwFullscreenButton };
|
|
76
|
+
//# sourceMappingURL=fw-fullscreen-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fw-fullscreen-button.js","sources":["../../../../../src/components/controls/fw-fullscreen-button.ts"],"sourcesContent":["import { LitElement, html, css } from \"lit\";\nimport { customElement, state } from \"lit/decorators.js\";\nimport { createTranslator, type TranslateFn } from \"@livepeer-frameworks/player-core\";\n\n@customElement(\"fw-fullscreen-button\")\nexport class FwFullscreenButton extends LitElement {\n @state() private isFullscreen = false;\n private _player: any = null;\n private _cleanup: (() => void) | null = null;\n\n private get _t(): TranslateFn {\n return this._player?.pc?.t ?? createTranslator({ locale: \"en\" });\n }\n\n static styles = css`\n :host {\n display: inline-flex;\n align-items: center;\n }\n `;\n\n private _resolvePlayer(): HTMLElement | null {\n const forId = this.getAttribute(\"for\");\n if (forId) return document.getElementById(forId);\n return this.closest(\"fw-player\");\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._player = this._resolvePlayer();\n if (!this._player) return;\n const pc = this._player.pc;\n if (!pc) return;\n\n this.isFullscreen = pc.s.isFullscreen;\n const handler = () => {\n this.isFullscreen = this._player.pc.s.isFullscreen;\n };\n this._player.addEventListener(\"fw-fullscreen-change\", handler);\n this._player.addEventListener(\"fw-ready\", handler);\n this._cleanup = () => {\n this._player?.removeEventListener(\"fw-fullscreen-change\", handler);\n this._player?.removeEventListener(\"fw-ready\", handler);\n };\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._cleanup?.();\n this._cleanup = null;\n }\n\n private handleClick() {\n this._player?.pc?.toggleFullscreen();\n }\n\n render() {\n return html`<button\n type=\"button\"\n class=\"fw-btn-flush\"\n aria-label=${this.isFullscreen ? this._t(\"exitFullscreen\") : this._t(\"fullscreen\")}\n aria-pressed=${this.isFullscreen}\n title=${this.isFullscreen ? this._t(\"exitFullscreen\") : this._t(\"fullscreen\")}\n @click=${this.handleClick}\n >\n ${this.isFullscreen ? \"\\u2716\" : \"\\u26F6\"}\n </button>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"fw-fullscreen-button\": FwFullscreenButton;\n }\n}\n"],"names":[],"mappings":";;;;;AAKO,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,UAAU,CAAA;AAA3C,IAAA,WAAA,GAAA;;QACY,IAAA,CAAA,YAAY,GAAG,KAAK;QAC7B,IAAA,CAAA,OAAO,GAAQ,IAAI;QACnB,IAAA,CAAA,QAAQ,GAAwB,IAAI;IA4D9C;AA1DE,IAAA,IAAY,EAAE,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClE;IASQ,cAAc,GAAA;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC;AAChD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IAClC;IAEA,iBAAiB,GAAA;QACf,KAAK,CAAC,iBAAiB,EAAE;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE;AAC1B,QAAA,IAAI,CAAC,EAAE;YAAE;QAET,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;QACrC,MAAM,OAAO,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;AACpD,QAAA,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,OAAO,CAAC;QAC9D,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC;AAClD,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAK;YACnB,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,sBAAsB,EAAE,OAAO,CAAC;YAClE,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC;AACxD,QAAA,CAAC;IACH;IAEA,oBAAoB,GAAA;QAClB,KAAK,CAAC,oBAAoB,EAAE;AAC5B,QAAA,IAAI,CAAC,QAAQ,IAAI;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE;IACtC;IAEA,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAA,CAAA;;;AAGI,iBAAA,EAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;AACnE,mBAAA,EAAA,IAAI,CAAC,YAAY;AACxB,YAAA,EAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;AACpE,aAAA,EAAA,IAAI,CAAC,WAAW;;QAEvB,IAAI,CAAC,YAAY,GAAG,QAAQ,GAAG,QAAQ;cACjC;IACZ;;AArDO,kBAAA,CAAA,MAAM,GAAG,GAAG,CAAA;;;;;AAKlB,EAAA,CALY;AARI,UAAA,CAAA;AAAhB,IAAA,KAAK;AAAgC,CAAA,EAAA,kBAAA,CAAA,SAAA,EAAA,cAAA,EAAA,MAAA,CAAA;AAD3B,kBAAkB,GAAA,UAAA,CAAA;IAD9B,aAAa,CAAC,sBAAsB;AACxB,CAAA,EAAA,kBAAkB,CA+D9B;;;;"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { __decorate } from '../../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';
|
|
2
|
+
import { css, LitElement, html } from 'lit';
|
|
3
|
+
import { state, customElement } from 'lit/decorators.js';
|
|
4
|
+
import { createTranslator } from '@livepeer-frameworks/player-core';
|
|
5
|
+
|
|
6
|
+
let FwLiveBadge = class FwLiveBadge extends LitElement {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.isLive = false;
|
|
10
|
+
this._player = null;
|
|
11
|
+
this._cleanup = null;
|
|
12
|
+
}
|
|
13
|
+
get _t() {
|
|
14
|
+
return this._player?.pc?.t ?? createTranslator({ locale: "en" });
|
|
15
|
+
}
|
|
16
|
+
_resolvePlayer() {
|
|
17
|
+
const forId = this.getAttribute("for");
|
|
18
|
+
if (forId)
|
|
19
|
+
return document.getElementById(forId);
|
|
20
|
+
return this.closest("fw-player");
|
|
21
|
+
}
|
|
22
|
+
connectedCallback() {
|
|
23
|
+
super.connectedCallback();
|
|
24
|
+
this._player = this._resolvePlayer();
|
|
25
|
+
if (!this._player)
|
|
26
|
+
return;
|
|
27
|
+
const pc = this._player.pc;
|
|
28
|
+
if (!pc)
|
|
29
|
+
return;
|
|
30
|
+
this.syncLive();
|
|
31
|
+
const handler = () => this.syncLive();
|
|
32
|
+
this._player.addEventListener("fw-state-change", handler);
|
|
33
|
+
this._player.addEventListener("fw-stream-state", handler);
|
|
34
|
+
this._player.addEventListener("fw-ready", handler);
|
|
35
|
+
this._cleanup = () => {
|
|
36
|
+
this._player?.removeEventListener("fw-state-change", handler);
|
|
37
|
+
this._player?.removeEventListener("fw-stream-state", handler);
|
|
38
|
+
this._player?.removeEventListener("fw-ready", handler);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
disconnectedCallback() {
|
|
42
|
+
super.disconnectedCallback();
|
|
43
|
+
this._cleanup?.();
|
|
44
|
+
this._cleanup = null;
|
|
45
|
+
}
|
|
46
|
+
syncLive() {
|
|
47
|
+
const live = this._player?.pc?.s?.isEffectivelyLive ?? false;
|
|
48
|
+
this.isLive = live;
|
|
49
|
+
this.toggleAttribute("live", live);
|
|
50
|
+
}
|
|
51
|
+
handleClick() {
|
|
52
|
+
this._player?.pc?.jumpToLive();
|
|
53
|
+
}
|
|
54
|
+
render() {
|
|
55
|
+
if (!this.isLive)
|
|
56
|
+
return html ``;
|
|
57
|
+
return html `<button type="button" aria-label=${this._t("live")} @click=${this.handleClick}>
|
|
58
|
+
<span class="dot"></span> ${this._t("live").toUpperCase()}
|
|
59
|
+
</button>`;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
FwLiveBadge.styles = css `
|
|
63
|
+
:host {
|
|
64
|
+
display: inline-flex;
|
|
65
|
+
align-items: center;
|
|
66
|
+
}
|
|
67
|
+
button {
|
|
68
|
+
display: inline-flex;
|
|
69
|
+
align-items: center;
|
|
70
|
+
gap: 0.25rem;
|
|
71
|
+
border: none;
|
|
72
|
+
background: none;
|
|
73
|
+
cursor: pointer;
|
|
74
|
+
padding: 0.125rem 0.375rem;
|
|
75
|
+
border-radius: 0.25rem;
|
|
76
|
+
font-size: 0.625rem;
|
|
77
|
+
font-weight: 700;
|
|
78
|
+
text-transform: uppercase;
|
|
79
|
+
letter-spacing: 0.05em;
|
|
80
|
+
color: inherit;
|
|
81
|
+
}
|
|
82
|
+
.dot {
|
|
83
|
+
width: 0.375rem;
|
|
84
|
+
height: 0.375rem;
|
|
85
|
+
border-radius: 50%;
|
|
86
|
+
background: #ef4444;
|
|
87
|
+
}
|
|
88
|
+
:host([live]) .dot {
|
|
89
|
+
animation: pulse 1.5s ease-in-out infinite;
|
|
90
|
+
}
|
|
91
|
+
@keyframes pulse {
|
|
92
|
+
0%,
|
|
93
|
+
100% {
|
|
94
|
+
opacity: 1;
|
|
95
|
+
}
|
|
96
|
+
50% {
|
|
97
|
+
opacity: 0.4;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
`;
|
|
101
|
+
__decorate([
|
|
102
|
+
state()
|
|
103
|
+
], FwLiveBadge.prototype, "isLive", void 0);
|
|
104
|
+
FwLiveBadge = __decorate([
|
|
105
|
+
customElement("fw-live-badge")
|
|
106
|
+
], FwLiveBadge);
|
|
107
|
+
|
|
108
|
+
export { FwLiveBadge };
|
|
109
|
+
//# sourceMappingURL=fw-live-badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fw-live-badge.js","sources":["../../../../../src/components/controls/fw-live-badge.ts"],"sourcesContent":["import { LitElement, html, css } from \"lit\";\nimport { customElement, state } from \"lit/decorators.js\";\nimport { createTranslator, type TranslateFn } from \"@livepeer-frameworks/player-core\";\n\n@customElement(\"fw-live-badge\")\nexport class FwLiveBadge extends LitElement {\n @state() private isLive = false;\n private _player: any = null;\n private _cleanup: (() => void) | null = null;\n\n private get _t(): TranslateFn {\n return this._player?.pc?.t ?? createTranslator({ locale: \"en\" });\n }\n\n static styles = css`\n :host {\n display: inline-flex;\n align-items: center;\n }\n button {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n border: none;\n background: none;\n cursor: pointer;\n padding: 0.125rem 0.375rem;\n border-radius: 0.25rem;\n font-size: 0.625rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: inherit;\n }\n .dot {\n width: 0.375rem;\n height: 0.375rem;\n border-radius: 50%;\n background: #ef4444;\n }\n :host([live]) .dot {\n animation: pulse 1.5s ease-in-out infinite;\n }\n @keyframes pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.4;\n }\n }\n `;\n\n private _resolvePlayer(): HTMLElement | null {\n const forId = this.getAttribute(\"for\");\n if (forId) return document.getElementById(forId);\n return this.closest(\"fw-player\");\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._player = this._resolvePlayer();\n if (!this._player) return;\n const pc = this._player.pc;\n if (!pc) return;\n\n this.syncLive();\n const handler = () => this.syncLive();\n this._player.addEventListener(\"fw-state-change\", handler);\n this._player.addEventListener(\"fw-stream-state\", handler);\n this._player.addEventListener(\"fw-ready\", handler);\n this._cleanup = () => {\n this._player?.removeEventListener(\"fw-state-change\", handler);\n this._player?.removeEventListener(\"fw-stream-state\", handler);\n this._player?.removeEventListener(\"fw-ready\", handler);\n };\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._cleanup?.();\n this._cleanup = null;\n }\n\n private syncLive() {\n const live = this._player?.pc?.s?.isEffectivelyLive ?? false;\n this.isLive = live;\n this.toggleAttribute(\"live\", live);\n }\n\n private handleClick() {\n this._player?.pc?.jumpToLive();\n }\n\n render() {\n if (!this.isLive) return html``;\n\n return html`<button type=\"button\" aria-label=${this._t(\"live\")} @click=${this.handleClick}>\n <span class=\"dot\"></span> ${this._t(\"live\").toUpperCase()}\n </button>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"fw-live-badge\": FwLiveBadge;\n }\n}\n"],"names":[],"mappings":";;;;;AAKO,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU,CAAA;AAApC,IAAA,WAAA,GAAA;;QACY,IAAA,CAAA,MAAM,GAAG,KAAK;QACvB,IAAA,CAAA,OAAO,GAAQ,IAAI;QACnB,IAAA,CAAA,QAAQ,GAAwB,IAAI;IA8F9C;AA5FE,IAAA,IAAY,EAAE,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClE;IA0CQ,cAAc,GAAA;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC;AAChD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IAClC;IAEA,iBAAiB,GAAA;QACf,KAAK,CAAC,iBAAiB,EAAE;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE;AAC1B,QAAA,IAAI,CAAC,EAAE;YAAE;QAET,IAAI,CAAC,QAAQ,EAAE;QACf,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;QACrC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,OAAO,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,OAAO,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC;AAClD,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAK;YACnB,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,iBAAiB,EAAE,OAAO,CAAC;YAC7D,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,iBAAiB,EAAE,OAAO,CAAC;YAC7D,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC;AACxD,QAAA,CAAC;IACH;IAEA,oBAAoB,GAAA;QAClB,KAAK,CAAC,oBAAoB,EAAE;AAC5B,QAAA,IAAI,CAAC,QAAQ,IAAI;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEQ,QAAQ,GAAA;AACd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,iBAAiB,IAAI,KAAK;AAC5D,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC;IACpC;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE;IAChC;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA,CAAA,CAAE;AAE/B,QAAA,OAAO,IAAI,CAAA,CAAA,iCAAA,EAAoC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA,QAAA,EAAW,IAAI,CAAC,WAAW,CAAA;AAC3D,gCAAA,EAAA,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;cACjD;IACZ;;AAvFO,WAAA,CAAA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsClB,EAAA,CAtCY;AARI,UAAA,CAAA;AAAhB,IAAA,KAAK;AAA0B,CAAA,EAAA,WAAA,CAAA,SAAA,EAAA,QAAA,EAAA,MAAA,CAAA;AADrB,WAAW,GAAA,UAAA,CAAA;IADvB,aAAa,CAAC,eAAe;AACjB,CAAA,EAAA,WAAW,CAiGvB;;;;"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { __decorate } from '../../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';
|
|
2
|
+
import { css, LitElement, html } from 'lit';
|
|
3
|
+
import { state, customElement } from 'lit/decorators.js';
|
|
4
|
+
import { createTranslator } from '@livepeer-frameworks/player-core';
|
|
5
|
+
|
|
6
|
+
let FwPlayButton = class FwPlayButton extends LitElement {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.isPlaying = false;
|
|
10
|
+
this._player = null;
|
|
11
|
+
this._cleanup = null;
|
|
12
|
+
}
|
|
13
|
+
get _t() {
|
|
14
|
+
return this._player?.pc?.t ?? createTranslator({ locale: "en" });
|
|
15
|
+
}
|
|
16
|
+
_resolvePlayer() {
|
|
17
|
+
const forId = this.getAttribute("for");
|
|
18
|
+
if (forId)
|
|
19
|
+
return document.getElementById(forId);
|
|
20
|
+
return this.closest("fw-player");
|
|
21
|
+
}
|
|
22
|
+
connectedCallback() {
|
|
23
|
+
super.connectedCallback();
|
|
24
|
+
this._player = this._resolvePlayer();
|
|
25
|
+
if (!this._player)
|
|
26
|
+
return;
|
|
27
|
+
const pc = this._player.pc;
|
|
28
|
+
if (!pc)
|
|
29
|
+
return;
|
|
30
|
+
this.isPlaying = pc.s.isPlaying;
|
|
31
|
+
const handler = () => {
|
|
32
|
+
this.isPlaying = pc.s.isPlaying;
|
|
33
|
+
};
|
|
34
|
+
this._player.addEventListener("fw-state-change", handler);
|
|
35
|
+
this._player.addEventListener("fw-ready", handler);
|
|
36
|
+
this._cleanup = () => {
|
|
37
|
+
this._player?.removeEventListener("fw-state-change", handler);
|
|
38
|
+
this._player?.removeEventListener("fw-ready", handler);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
disconnectedCallback() {
|
|
42
|
+
super.disconnectedCallback();
|
|
43
|
+
this._cleanup?.();
|
|
44
|
+
this._cleanup = null;
|
|
45
|
+
}
|
|
46
|
+
handleClick() {
|
|
47
|
+
this._player?.pc?.togglePlay();
|
|
48
|
+
}
|
|
49
|
+
render() {
|
|
50
|
+
return html `<button
|
|
51
|
+
type="button"
|
|
52
|
+
class="fw-btn-flush"
|
|
53
|
+
aria-label=${this.isPlaying ? this._t("pause") : this._t("play")}
|
|
54
|
+
aria-pressed=${this.isPlaying}
|
|
55
|
+
title=${this.isPlaying ? this._t("pause") : this._t("play")}
|
|
56
|
+
@click=${this.handleClick}
|
|
57
|
+
>
|
|
58
|
+
${this.isPlaying ? "\u23F8" : "\u25B6"}
|
|
59
|
+
</button>`;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
FwPlayButton.styles = css `
|
|
63
|
+
:host {
|
|
64
|
+
display: inline-flex;
|
|
65
|
+
align-items: center;
|
|
66
|
+
}
|
|
67
|
+
`;
|
|
68
|
+
__decorate([
|
|
69
|
+
state()
|
|
70
|
+
], FwPlayButton.prototype, "isPlaying", void 0);
|
|
71
|
+
FwPlayButton = __decorate([
|
|
72
|
+
customElement("fw-play-button")
|
|
73
|
+
], FwPlayButton);
|
|
74
|
+
|
|
75
|
+
export { FwPlayButton };
|
|
76
|
+
//# sourceMappingURL=fw-play-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fw-play-button.js","sources":["../../../../../src/components/controls/fw-play-button.ts"],"sourcesContent":["import { LitElement, html, css } from \"lit\";\nimport { customElement, state } from \"lit/decorators.js\";\nimport { createTranslator, type TranslateFn } from \"@livepeer-frameworks/player-core\";\n\n@customElement(\"fw-play-button\")\nexport class FwPlayButton extends LitElement {\n @state() private isPlaying = false;\n private _player: any = null;\n private _cleanup: (() => void) | null = null;\n\n private get _t(): TranslateFn {\n return this._player?.pc?.t ?? createTranslator({ locale: \"en\" });\n }\n\n static styles = css`\n :host {\n display: inline-flex;\n align-items: center;\n }\n `;\n\n private _resolvePlayer(): HTMLElement | null {\n const forId = this.getAttribute(\"for\");\n if (forId) return document.getElementById(forId);\n return this.closest(\"fw-player\");\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._player = this._resolvePlayer();\n if (!this._player) return;\n const pc = this._player.pc;\n if (!pc) return;\n\n this.isPlaying = pc.s.isPlaying;\n const handler = () => {\n this.isPlaying = pc.s.isPlaying;\n };\n this._player.addEventListener(\"fw-state-change\", handler);\n this._player.addEventListener(\"fw-ready\", handler);\n this._cleanup = () => {\n this._player?.removeEventListener(\"fw-state-change\", handler);\n this._player?.removeEventListener(\"fw-ready\", handler);\n };\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._cleanup?.();\n this._cleanup = null;\n }\n\n private handleClick() {\n this._player?.pc?.togglePlay();\n }\n\n render() {\n return html`<button\n type=\"button\"\n class=\"fw-btn-flush\"\n aria-label=${this.isPlaying ? this._t(\"pause\") : this._t(\"play\")}\n aria-pressed=${this.isPlaying}\n title=${this.isPlaying ? this._t(\"pause\") : this._t(\"play\")}\n @click=${this.handleClick}\n >\n ${this.isPlaying ? \"\\u23F8\" : \"\\u25B6\"}\n </button>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"fw-play-button\": FwPlayButton;\n }\n}\n"],"names":[],"mappings":";;;;;AAKO,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU,CAAA;AAArC,IAAA,WAAA,GAAA;;QACY,IAAA,CAAA,SAAS,GAAG,KAAK;QAC1B,IAAA,CAAA,OAAO,GAAQ,IAAI;QACnB,IAAA,CAAA,QAAQ,GAAwB,IAAI;IA4D9C;AA1DE,IAAA,IAAY,EAAE,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClE;IASQ,cAAc,GAAA;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC;AAChD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IAClC;IAEA,iBAAiB,GAAA;QACf,KAAK,CAAC,iBAAiB,EAAE;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE;AAC1B,QAAA,IAAI,CAAC,EAAE;YAAE;QAET,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS;QAC/B,MAAM,OAAO,GAAG,MAAK;YACnB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS;AACjC,QAAA,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,OAAO,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC;AAClD,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAK;YACnB,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,iBAAiB,EAAE,OAAO,CAAC;YAC7D,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC;AACxD,QAAA,CAAC;IACH;IAEA,oBAAoB,GAAA;QAClB,KAAK,CAAC,oBAAoB,EAAE;AAC5B,QAAA,IAAI,CAAC,QAAQ,IAAI;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE;IAChC;IAEA,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAA,CAAA;;;AAGI,iBAAA,EAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;AACjD,mBAAA,EAAA,IAAI,CAAC,SAAS;AACrB,YAAA,EAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;AAClD,aAAA,EAAA,IAAI,CAAC,WAAW;;QAEvB,IAAI,CAAC,SAAS,GAAG,QAAQ,GAAG,QAAQ;cAC9B;IACZ;;AArDO,YAAA,CAAA,MAAM,GAAG,GAAG,CAAA;;;;;AAKlB,EAAA,CALY;AARI,UAAA,CAAA;AAAhB,IAAA,KAAK;AAA6B,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,WAAA,EAAA,MAAA,CAAA;AADxB,YAAY,GAAA,UAAA,CAAA;IADxB,aAAa,CAAC,gBAAgB;AAClB,CAAA,EAAA,YAAY,CA+DxB;;;;"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { __decorate } from '../../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';
|
|
2
|
+
import { css, LitElement, html } from 'lit';
|
|
3
|
+
import { property, customElement } from 'lit/decorators.js';
|
|
4
|
+
import { createTranslator } from '@livepeer-frameworks/player-core';
|
|
5
|
+
|
|
6
|
+
let FwSkipButton = class FwSkipButton extends LitElement {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.direction = "forward";
|
|
10
|
+
this.seconds = 10;
|
|
11
|
+
this._player = null;
|
|
12
|
+
}
|
|
13
|
+
get _t() {
|
|
14
|
+
return this._player?.pc?.t ?? createTranslator({ locale: "en" });
|
|
15
|
+
}
|
|
16
|
+
_resolvePlayer() {
|
|
17
|
+
const forId = this.getAttribute("for");
|
|
18
|
+
if (forId)
|
|
19
|
+
return document.getElementById(forId);
|
|
20
|
+
return this.closest("fw-player");
|
|
21
|
+
}
|
|
22
|
+
connectedCallback() {
|
|
23
|
+
super.connectedCallback();
|
|
24
|
+
this._player = this._resolvePlayer();
|
|
25
|
+
}
|
|
26
|
+
handleClick() {
|
|
27
|
+
const delta = this.direction === "back" ? -this.seconds : this.seconds;
|
|
28
|
+
this._player?.pc?.seekBy(delta);
|
|
29
|
+
}
|
|
30
|
+
render() {
|
|
31
|
+
const label = this.direction === "back" ? this._t("skipBackward") : this._t("skipForward");
|
|
32
|
+
const icon = this.direction === "back" ? "\u23EA" : "\u23E9";
|
|
33
|
+
const shortcut = this.direction === "back" ? "j" : "l";
|
|
34
|
+
return html `<button
|
|
35
|
+
type="button"
|
|
36
|
+
class="fw-btn-flush"
|
|
37
|
+
aria-label=${label}
|
|
38
|
+
title="${label} (${shortcut})"
|
|
39
|
+
@click=${this.handleClick}
|
|
40
|
+
>
|
|
41
|
+
${icon} ${this.seconds}s
|
|
42
|
+
</button>`;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
FwSkipButton.styles = css `
|
|
46
|
+
:host {
|
|
47
|
+
display: inline-flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
}
|
|
50
|
+
`;
|
|
51
|
+
__decorate([
|
|
52
|
+
property({ type: String })
|
|
53
|
+
], FwSkipButton.prototype, "direction", void 0);
|
|
54
|
+
__decorate([
|
|
55
|
+
property({ type: Number })
|
|
56
|
+
], FwSkipButton.prototype, "seconds", void 0);
|
|
57
|
+
FwSkipButton = __decorate([
|
|
58
|
+
customElement("fw-skip-button")
|
|
59
|
+
], FwSkipButton);
|
|
60
|
+
|
|
61
|
+
export { FwSkipButton };
|
|
62
|
+
//# sourceMappingURL=fw-skip-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fw-skip-button.js","sources":["../../../../../src/components/controls/fw-skip-button.ts"],"sourcesContent":["import { LitElement, html, css } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { createTranslator, type TranslateFn } from \"@livepeer-frameworks/player-core\";\n\n@customElement(\"fw-skip-button\")\nexport class FwSkipButton extends LitElement {\n @property({ type: String }) direction: \"back\" | \"forward\" = \"forward\";\n @property({ type: Number }) seconds = 10;\n private _player: any = null;\n\n private get _t(): TranslateFn {\n return this._player?.pc?.t ?? createTranslator({ locale: \"en\" });\n }\n\n static styles = css`\n :host {\n display: inline-flex;\n align-items: center;\n }\n `;\n\n private _resolvePlayer(): HTMLElement | null {\n const forId = this.getAttribute(\"for\");\n if (forId) return document.getElementById(forId);\n return this.closest(\"fw-player\");\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._player = this._resolvePlayer();\n }\n\n private handleClick() {\n const delta = this.direction === \"back\" ? -this.seconds : this.seconds;\n this._player?.pc?.seekBy(delta);\n }\n\n render() {\n const label = this.direction === \"back\" ? this._t(\"skipBackward\") : this._t(\"skipForward\");\n const icon = this.direction === \"back\" ? \"\\u23EA\" : \"\\u23E9\";\n const shortcut = this.direction === \"back\" ? \"j\" : \"l\";\n\n return html`<button\n type=\"button\"\n class=\"fw-btn-flush\"\n aria-label=${label}\n title=\"${label} (${shortcut})\"\n @click=${this.handleClick}\n >\n ${icon} ${this.seconds}s\n </button>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"fw-skip-button\": FwSkipButton;\n }\n}\n"],"names":[],"mappings":";;;;;AAKO,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU,CAAA;AAArC,IAAA,WAAA,GAAA;;QACuB,IAAA,CAAA,SAAS,GAAuB,SAAS;QACzC,IAAA,CAAA,OAAO,GAAG,EAAE;QAChC,IAAA,CAAA,OAAO,GAAQ,IAAI;IA4C7B;AA1CE,IAAA,IAAY,EAAE,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClE;IASQ,cAAc,GAAA;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC;AAChD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IAClC;IAEA,iBAAiB,GAAA;QACf,KAAK,CAAC,iBAAiB,EAAE;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;IACtC;IAEQ,WAAW,GAAA;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,KAAK,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;QACtE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC;IACjC;IAEA,MAAM,GAAA;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,KAAK,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;AAC1F,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,KAAK,MAAM,GAAG,QAAQ,GAAG,QAAQ;AAC5D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,KAAK,MAAM,GAAG,GAAG,GAAG,GAAG;AAEtD,QAAA,OAAO,IAAI,CAAA,CAAA;;;mBAGI,KAAK;AACT,aAAA,EAAA,KAAK,KAAK,QAAQ,CAAA;AAClB,aAAA,EAAA,IAAI,CAAC,WAAW;;QAEvB,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,OAAO,CAAA;cACd;IACZ;;AArCO,YAAA,CAAA,MAAM,GAAG,GAAG,CAAA;;;;;AAKlB,EAAA,CALY;AARe,UAAA,CAAA;AAA3B,IAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AAA4C,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,WAAA,EAAA,MAAA,CAAA;AAC1C,UAAA,CAAA;AAA3B,IAAA,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AAAe,CAAA,EAAA,YAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAF9B,YAAY,GAAA,UAAA,CAAA;IADxB,aAAa,CAAC,gBAAgB;AAClB,CAAA,EAAA,YAAY,CA+CxB;;;;"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { __decorate } from '../../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';
|
|
2
|
+
import { css, LitElement, html } from 'lit';
|
|
3
|
+
import { state, customElement } from 'lit/decorators.js';
|
|
4
|
+
import { formatTimeDisplay } from '@livepeer-frameworks/player-core';
|
|
5
|
+
|
|
6
|
+
let FwTimeDisplay = class FwTimeDisplay extends LitElement {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.display = "";
|
|
10
|
+
this._player = null;
|
|
11
|
+
this._cleanup = null;
|
|
12
|
+
}
|
|
13
|
+
_resolvePlayer() {
|
|
14
|
+
const forId = this.getAttribute("for");
|
|
15
|
+
if (forId)
|
|
16
|
+
return document.getElementById(forId);
|
|
17
|
+
return this.closest("fw-player");
|
|
18
|
+
}
|
|
19
|
+
connectedCallback() {
|
|
20
|
+
super.connectedCallback();
|
|
21
|
+
this._player = this._resolvePlayer();
|
|
22
|
+
if (!this._player)
|
|
23
|
+
return;
|
|
24
|
+
const pc = this._player.pc;
|
|
25
|
+
if (!pc)
|
|
26
|
+
return;
|
|
27
|
+
this.updateDisplay();
|
|
28
|
+
const handler = () => this.updateDisplay();
|
|
29
|
+
this._player.addEventListener("fw-time-update", handler);
|
|
30
|
+
this._player.addEventListener("fw-ready", handler);
|
|
31
|
+
this._cleanup = () => {
|
|
32
|
+
this._player?.removeEventListener("fw-time-update", handler);
|
|
33
|
+
this._player?.removeEventListener("fw-ready", handler);
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
disconnectedCallback() {
|
|
37
|
+
super.disconnectedCallback();
|
|
38
|
+
this._cleanup?.();
|
|
39
|
+
this._cleanup = null;
|
|
40
|
+
}
|
|
41
|
+
updateDisplay() {
|
|
42
|
+
const pc = this._player?.pc;
|
|
43
|
+
if (!pc)
|
|
44
|
+
return;
|
|
45
|
+
const s = pc.s;
|
|
46
|
+
this.display = formatTimeDisplay({
|
|
47
|
+
isLive: s.isEffectivelyLive,
|
|
48
|
+
currentTime: s.currentTime,
|
|
49
|
+
duration: s.duration,
|
|
50
|
+
liveEdge: pc.getLiveEdge?.() ?? s.duration,
|
|
51
|
+
seekableStart: pc.getSeekableStart?.() ?? 0,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
render() {
|
|
55
|
+
return html `<span>${this.display}</span>`;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
FwTimeDisplay.styles = css `
|
|
59
|
+
:host {
|
|
60
|
+
display: inline-flex;
|
|
61
|
+
align-items: center;
|
|
62
|
+
font-variant-numeric: tabular-nums;
|
|
63
|
+
}
|
|
64
|
+
span {
|
|
65
|
+
white-space: nowrap;
|
|
66
|
+
font-size: 0.75rem;
|
|
67
|
+
}
|
|
68
|
+
`;
|
|
69
|
+
__decorate([
|
|
70
|
+
state()
|
|
71
|
+
], FwTimeDisplay.prototype, "display", void 0);
|
|
72
|
+
FwTimeDisplay = __decorate([
|
|
73
|
+
customElement("fw-time-display")
|
|
74
|
+
], FwTimeDisplay);
|
|
75
|
+
|
|
76
|
+
export { FwTimeDisplay };
|
|
77
|
+
//# sourceMappingURL=fw-time-display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fw-time-display.js","sources":["../../../../../src/components/controls/fw-time-display.ts"],"sourcesContent":["import { LitElement, html, css } from \"lit\";\nimport { customElement, state } from \"lit/decorators.js\";\nimport { formatTimeDisplay } from \"@livepeer-frameworks/player-core\";\n\n@customElement(\"fw-time-display\")\nexport class FwTimeDisplay extends LitElement {\n @state() private display = \"\";\n private _player: any = null;\n private _cleanup: (() => void) | null = null;\n\n static styles = css`\n :host {\n display: inline-flex;\n align-items: center;\n font-variant-numeric: tabular-nums;\n }\n span {\n white-space: nowrap;\n font-size: 0.75rem;\n }\n `;\n\n private _resolvePlayer(): HTMLElement | null {\n const forId = this.getAttribute(\"for\");\n if (forId) return document.getElementById(forId);\n return this.closest(\"fw-player\");\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._player = this._resolvePlayer();\n if (!this._player) return;\n const pc = this._player.pc;\n if (!pc) return;\n\n this.updateDisplay();\n const handler = () => this.updateDisplay();\n this._player.addEventListener(\"fw-time-update\", handler);\n this._player.addEventListener(\"fw-ready\", handler);\n this._cleanup = () => {\n this._player?.removeEventListener(\"fw-time-update\", handler);\n this._player?.removeEventListener(\"fw-ready\", handler);\n };\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._cleanup?.();\n this._cleanup = null;\n }\n\n private updateDisplay() {\n const pc = this._player?.pc;\n if (!pc) return;\n const s = pc.s;\n this.display = formatTimeDisplay({\n isLive: s.isEffectivelyLive,\n currentTime: s.currentTime,\n duration: s.duration,\n liveEdge: pc.getLiveEdge?.() ?? s.duration,\n seekableStart: pc.getSeekableStart?.() ?? 0,\n });\n }\n\n render() {\n return html`<span>${this.display}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"fw-time-display\": FwTimeDisplay;\n }\n}\n"],"names":[],"mappings":";;;;;AAKO,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,UAAU,CAAA;AAAtC,IAAA,WAAA,GAAA;;QACY,IAAA,CAAA,OAAO,GAAG,EAAE;QACrB,IAAA,CAAA,OAAO,GAAQ,IAAI;QACnB,IAAA,CAAA,QAAQ,GAAwB,IAAI;IA2D9C;IA7CU,cAAc,GAAA;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC;AAChD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IAClC;IAEA,iBAAiB,GAAA;QACf,KAAK,CAAC,iBAAiB,EAAE;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE;AAC1B,QAAA,IAAI,CAAC,EAAE;YAAE;QAET,IAAI,CAAC,aAAa,EAAE;QACpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE;QAC1C,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC;AAClD,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAK;YACnB,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,gBAAgB,EAAE,OAAO,CAAC;YAC5D,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC;AACxD,QAAA,CAAC;IACH;IAEA,oBAAoB,GAAA;QAClB,KAAK,CAAC,oBAAoB,EAAE;AAC5B,QAAA,IAAI,CAAC,QAAQ,IAAI;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE;AAC3B,QAAA,IAAI,CAAC,EAAE;YAAE;AACT,QAAA,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC;YAC/B,MAAM,EAAE,CAAC,CAAC,iBAAiB;YAC3B,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,QAAQ,EAAE,EAAE,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,QAAQ;AAC1C,YAAA,aAAa,EAAE,EAAE,CAAC,gBAAgB,IAAI,IAAI,CAAC;AAC5C,SAAA,CAAC;IACJ;IAEA,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAA,CAAA,MAAA,EAAS,IAAI,CAAC,OAAO,SAAS;IAC3C;;AAxDO,aAAA,CAAA,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;AAUlB,EAAA,CAVY;AAJI,UAAA,CAAA;AAAhB,IAAA,KAAK;AAAwB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AADnB,aAAa,GAAA,UAAA,CAAA;IADzB,aAAa,CAAC,iBAAiB;AACnB,CAAA,EAAA,aAAa,CA8DzB;;;;"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { __decorate } from '../../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';
|
|
2
|
+
import { css, LitElement, html } from 'lit';
|
|
3
|
+
import { state, customElement } from 'lit/decorators.js';
|
|
4
|
+
import { createTranslator } from '@livepeer-frameworks/player-core';
|
|
5
|
+
|
|
6
|
+
let FwVolumeControl = class FwVolumeControl extends LitElement {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.isMuted = false;
|
|
10
|
+
this._player = null;
|
|
11
|
+
this._cleanup = null;
|
|
12
|
+
}
|
|
13
|
+
get _t() {
|
|
14
|
+
return this._player?.pc?.t ?? createTranslator({ locale: "en" });
|
|
15
|
+
}
|
|
16
|
+
_resolvePlayer() {
|
|
17
|
+
const forId = this.getAttribute("for");
|
|
18
|
+
if (forId)
|
|
19
|
+
return document.getElementById(forId);
|
|
20
|
+
return this.closest("fw-player");
|
|
21
|
+
}
|
|
22
|
+
connectedCallback() {
|
|
23
|
+
super.connectedCallback();
|
|
24
|
+
this._player = this._resolvePlayer();
|
|
25
|
+
if (!this._player)
|
|
26
|
+
return;
|
|
27
|
+
const pc = this._player.pc;
|
|
28
|
+
if (!pc)
|
|
29
|
+
return;
|
|
30
|
+
this.isMuted = pc.s.isMuted;
|
|
31
|
+
const handler = () => {
|
|
32
|
+
this.isMuted = this._player.pc.s.isMuted;
|
|
33
|
+
};
|
|
34
|
+
this._player.addEventListener("fw-volume-change", handler);
|
|
35
|
+
this._player.addEventListener("fw-ready", handler);
|
|
36
|
+
this._cleanup = () => {
|
|
37
|
+
this._player?.removeEventListener("fw-volume-change", handler);
|
|
38
|
+
this._player?.removeEventListener("fw-ready", handler);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
disconnectedCallback() {
|
|
42
|
+
super.disconnectedCallback();
|
|
43
|
+
this._cleanup?.();
|
|
44
|
+
this._cleanup = null;
|
|
45
|
+
}
|
|
46
|
+
handleClick() {
|
|
47
|
+
this._player?.pc?.toggleMute();
|
|
48
|
+
}
|
|
49
|
+
render() {
|
|
50
|
+
return html `<button
|
|
51
|
+
type="button"
|
|
52
|
+
class="fw-btn-flush"
|
|
53
|
+
aria-label=${this.isMuted ? this._t("unmute") : this._t("mute")}
|
|
54
|
+
aria-pressed=${this.isMuted}
|
|
55
|
+
title=${this.isMuted ? this._t("unmute") : this._t("mute")}
|
|
56
|
+
@click=${this.handleClick}
|
|
57
|
+
>
|
|
58
|
+
${this.isMuted ? "\uD83D\uDD07" : "\uD83D\uDD0A"}
|
|
59
|
+
</button>`;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
FwVolumeControl.styles = css `
|
|
63
|
+
:host {
|
|
64
|
+
display: inline-flex;
|
|
65
|
+
align-items: center;
|
|
66
|
+
}
|
|
67
|
+
`;
|
|
68
|
+
__decorate([
|
|
69
|
+
state()
|
|
70
|
+
], FwVolumeControl.prototype, "isMuted", void 0);
|
|
71
|
+
FwVolumeControl = __decorate([
|
|
72
|
+
customElement("fw-volume-button")
|
|
73
|
+
], FwVolumeControl);
|
|
74
|
+
|
|
75
|
+
export { FwVolumeControl };
|
|
76
|
+
//# sourceMappingURL=fw-volume-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fw-volume-control.js","sources":["../../../../../src/components/controls/fw-volume-control.ts"],"sourcesContent":["import { LitElement, html, css } from \"lit\";\nimport { customElement, state } from \"lit/decorators.js\";\nimport { createTranslator, type TranslateFn } from \"@livepeer-frameworks/player-core\";\n\n@customElement(\"fw-volume-button\")\nexport class FwVolumeControl extends LitElement {\n @state() private isMuted = false;\n private _player: any = null;\n private _cleanup: (() => void) | null = null;\n\n private get _t(): TranslateFn {\n return this._player?.pc?.t ?? createTranslator({ locale: \"en\" });\n }\n\n static styles = css`\n :host {\n display: inline-flex;\n align-items: center;\n }\n `;\n\n private _resolvePlayer(): HTMLElement | null {\n const forId = this.getAttribute(\"for\");\n if (forId) return document.getElementById(forId);\n return this.closest(\"fw-player\");\n }\n\n connectedCallback() {\n super.connectedCallback();\n this._player = this._resolvePlayer();\n if (!this._player) return;\n const pc = this._player.pc;\n if (!pc) return;\n\n this.isMuted = pc.s.isMuted;\n const handler = () => {\n this.isMuted = this._player.pc.s.isMuted;\n };\n this._player.addEventListener(\"fw-volume-change\", handler);\n this._player.addEventListener(\"fw-ready\", handler);\n this._cleanup = () => {\n this._player?.removeEventListener(\"fw-volume-change\", handler);\n this._player?.removeEventListener(\"fw-ready\", handler);\n };\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._cleanup?.();\n this._cleanup = null;\n }\n\n private handleClick() {\n this._player?.pc?.toggleMute();\n }\n\n render() {\n return html`<button\n type=\"button\"\n class=\"fw-btn-flush\"\n aria-label=${this.isMuted ? this._t(\"unmute\") : this._t(\"mute\")}\n aria-pressed=${this.isMuted}\n title=${this.isMuted ? this._t(\"unmute\") : this._t(\"mute\")}\n @click=${this.handleClick}\n >\n ${this.isMuted ? \"\\uD83D\\uDD07\" : \"\\uD83D\\uDD0A\"}\n </button>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"fw-volume-button\": FwVolumeControl;\n }\n}\n"],"names":[],"mappings":";;;;;AAKO,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU,CAAA;AAAxC,IAAA,WAAA,GAAA;;QACY,IAAA,CAAA,OAAO,GAAG,KAAK;QACxB,IAAA,CAAA,OAAO,GAAQ,IAAI;QACnB,IAAA,CAAA,QAAQ,GAAwB,IAAI;IA4D9C;AA1DE,IAAA,IAAY,EAAE,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClE;IASQ,cAAc,GAAA;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACtC,QAAA,IAAI,KAAK;AAAE,YAAA,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC;AAChD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IAClC;IAEA,iBAAiB,GAAA;QACf,KAAK,CAAC,iBAAiB,EAAE;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE;AAC1B,QAAA,IAAI,CAAC,EAAE;YAAE;QAET,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO;QAC3B,MAAM,OAAO,GAAG,MAAK;AACnB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO;AAC1C,QAAA,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC;AAClD,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAK;YACnB,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,kBAAkB,EAAE,OAAO,CAAC;YAC9D,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC;AACxD,QAAA,CAAC;IACH;IAEA,oBAAoB,GAAA;QAClB,KAAK,CAAC,oBAAoB,EAAE;AAC5B,QAAA,IAAI,CAAC,QAAQ,IAAI;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE;IAChC;IAEA,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAA,CAAA;;;AAGI,iBAAA,EAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;AAChD,mBAAA,EAAA,IAAI,CAAC,OAAO;AACnB,YAAA,EAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;AACjD,aAAA,EAAA,IAAI,CAAC,WAAW;;QAEvB,IAAI,CAAC,OAAO,GAAG,cAAc,GAAG,cAAc;cACxC;IACZ;;AArDO,eAAA,CAAA,MAAM,GAAG,GAAG,CAAA;;;;;AAKlB,EAAA,CALY;AARI,UAAA,CAAA;AAAhB,IAAA,KAAK;AAA2B,CAAA,EAAA,eAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AADtB,eAAe,GAAA,UAAA,CAAA;IAD3B,aAAa,CAAC,kBAAkB;AACpB,CAAA,EAAA,eAAe,CA+D3B;;;;"}
|
|
@@ -23,7 +23,7 @@ let FwDevModePanel = class FwDevModePanel extends LitElement {
|
|
|
23
23
|
this.playbackMode = "auto";
|
|
24
24
|
this._activeTab = "config";
|
|
25
25
|
this._hoveredComboIndex = null;
|
|
26
|
-
this.
|
|
26
|
+
this._tooltipPos = null;
|
|
27
27
|
this._showDisabledPlayers = false;
|
|
28
28
|
this._playbackScore = 1;
|
|
29
29
|
this._qualityScore = 100;
|
|
@@ -158,15 +158,12 @@ let FwDevModePanel = class FwDevModePanel extends LitElement {
|
|
|
158
158
|
}
|
|
159
159
|
_handleComboMouseEnter(index, event) {
|
|
160
160
|
this._hoveredComboIndex = index;
|
|
161
|
-
const container = this.renderRoot.querySelector(".fw-dev-body");
|
|
162
|
-
if (!container) {
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
161
|
const row = event.currentTarget;
|
|
166
|
-
const containerRect = container.getBoundingClientRect();
|
|
167
162
|
const rowRect = row.getBoundingClientRect();
|
|
168
|
-
|
|
169
|
-
|
|
163
|
+
this._tooltipPos = {
|
|
164
|
+
top: Math.max(8, Math.min(rowRect.top, window.innerHeight - 200)),
|
|
165
|
+
left: Math.max(8, rowRect.left - 228),
|
|
166
|
+
};
|
|
170
167
|
}
|
|
171
168
|
_handleModeChange(mode) {
|
|
172
169
|
this.playbackMode = mode;
|
|
@@ -645,6 +642,7 @@ let FwDevModePanel = class FwDevModePanel extends LitElement {
|
|
|
645
642
|
@mouseenter=${(event) => this._handleComboMouseEnter(index, event)}
|
|
646
643
|
@mouseleave=${() => {
|
|
647
644
|
this._hoveredComboIndex = null;
|
|
645
|
+
this._tooltipPos = null;
|
|
648
646
|
}}
|
|
649
647
|
>
|
|
650
648
|
<button
|
|
@@ -685,14 +683,12 @@ let FwDevModePanel = class FwDevModePanel extends LitElement {
|
|
|
685
683
|
>
|
|
686
684
|
</button>
|
|
687
685
|
|
|
688
|
-
${this._hoveredComboIndex === index
|
|
686
|
+
${this._hoveredComboIndex === index && this._tooltipPos
|
|
689
687
|
? html `
|
|
690
688
|
<div
|
|
691
|
-
class
|
|
692
|
-
|
|
693
|
-
"
|
|
694
|
-
"fw-dev-tooltip--below": !this._tooltipAbove,
|
|
695
|
-
})}
|
|
689
|
+
class="fw-dev-tooltip"
|
|
690
|
+
style="top: ${this._tooltipPos.top}px; left: ${this._tooltipPos
|
|
691
|
+
.left}px;"
|
|
696
692
|
>
|
|
697
693
|
<div class="fw-dev-tooltip-header">
|
|
698
694
|
<div class="fw-dev-tooltip-title">${combo.playerName}</div>
|
|
@@ -877,7 +873,7 @@ __decorate([
|
|
|
877
873
|
], FwDevModePanel.prototype, "_hoveredComboIndex", void 0);
|
|
878
874
|
__decorate([
|
|
879
875
|
state()
|
|
880
|
-
], FwDevModePanel.prototype, "
|
|
876
|
+
], FwDevModePanel.prototype, "_tooltipPos", void 0);
|
|
881
877
|
__decorate([
|
|
882
878
|
state()
|
|
883
879
|
], FwDevModePanel.prototype, "_showDisabledPlayers", void 0);
|