@editframe/elements 0.55.2 → 0.57.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/elements/EFTemporal.d.ts +2 -0
- package/dist/elements/EFTemporal.js +12 -0
- package/dist/elements/EFTemporal.js.map +1 -1
- package/dist/elements/EFVideo.js.map +1 -1
- package/dist/gui/ContextMixin.d.ts +2 -0
- package/dist/gui/ContextMixin.js +44 -0
- package/dist/gui/ContextMixin.js.map +1 -1
- package/dist/gui/Controllable.d.ts +2 -0
- package/dist/gui/Controllable.js +6 -0
- package/dist/gui/Controllable.js.map +1 -1
- package/dist/gui/EFControls.d.ts +2 -0
- package/dist/gui/EFControls.js +14 -1
- package/dist/gui/EFControls.js.map +1 -1
- package/dist/gui/EFFullscreen.d.ts +38 -0
- package/dist/gui/EFFullscreen.js +50 -0
- package/dist/gui/EFFullscreen.js.map +1 -0
- package/dist/gui/EFMute.d.ts +42 -0
- package/dist/gui/EFMute.js +60 -0
- package/dist/gui/EFMute.js.map +1 -0
- package/dist/gui/EFPIP.d.ts +43 -0
- package/dist/gui/EFPIP.js +89 -0
- package/dist/gui/EFPIP.js.map +1 -0
- package/dist/gui/EFPreview.js +0 -1
- package/dist/gui/EFPreview.js.map +1 -1
- package/dist/gui/EFResolution.d.ts +47 -0
- package/dist/gui/EFResolution.js +203 -0
- package/dist/gui/EFResolution.js.map +1 -0
- package/dist/gui/EFScrubber.js +9 -0
- package/dist/gui/EFScrubber.js.map +1 -1
- package/dist/gui/EFVolume.d.ts +47 -0
- package/dist/gui/EFVolume.js +165 -0
- package/dist/gui/EFVolume.js.map +1 -0
- package/dist/gui/PlaybackController.d.ts +5 -1
- package/dist/gui/PlaybackController.js +50 -1
- package/dist/gui/PlaybackController.js.map +1 -1
- package/dist/gui/icons.js +5 -1
- package/dist/gui/icons.js.map +1 -1
- package/dist/gui/volumeContext.d.ts +10 -0
- package/dist/gui/volumeContext.js +8 -0
- package/dist/gui/volumeContext.js.map +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { TemplateResult as TemplateResult$1 } from "../node_modules/lit-html/development/lit-html.js";
|
|
2
|
+
import * as _$lit from "lit";
|
|
3
|
+
import { LitElement } from "lit";
|
|
4
|
+
|
|
5
|
+
//#region src/gui/EFPIP.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* A Picture-in-Picture toggle.
|
|
8
|
+
*
|
|
9
|
+
* The `target` attribute accepts the `id` of either:
|
|
10
|
+
* - A native `<video>` element — PiP is requested directly.
|
|
11
|
+
* - A `<canvas>` element — a hidden `<video>` is created via `captureStream()` and used for PiP.
|
|
12
|
+
* - A container element — the first `<video>` or `<canvas>` descendant is used.
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* ```html
|
|
16
|
+
* <ef-pip target="my-canvas">
|
|
17
|
+
* <button slot="enter">PiP</button>
|
|
18
|
+
* <button slot="exit">Exit PiP</button>
|
|
19
|
+
* </ef-pip>
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
declare class EFPIP extends LitElement {
|
|
23
|
+
#private;
|
|
24
|
+
static styles: _$lit.CSSResult[];
|
|
25
|
+
/** ID of a <video>, <canvas>, or container element to use for PiP. */
|
|
26
|
+
target: string;
|
|
27
|
+
private isPiP;
|
|
28
|
+
private resolveTargetVideo;
|
|
29
|
+
private handleEnterPiP;
|
|
30
|
+
private handleLeavePiP;
|
|
31
|
+
private toggle;
|
|
32
|
+
connectedCallback(): void;
|
|
33
|
+
disconnectedCallback(): void;
|
|
34
|
+
render(): TemplateResult$1<1>;
|
|
35
|
+
}
|
|
36
|
+
declare global {
|
|
37
|
+
interface HTMLElementTagNameMap {
|
|
38
|
+
"ef-pip": EFPIP;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
export { EFPIP };
|
|
43
|
+
//# sourceMappingURL=EFPIP.d.ts.map
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
|
|
2
|
+
import { LitElement, css, html } from "lit";
|
|
3
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
4
|
+
//#region src/gui/EFPIP.ts
|
|
5
|
+
let EFPIP = class EFPIP extends LitElement {
|
|
6
|
+
constructor(..._args) {
|
|
7
|
+
super(..._args);
|
|
8
|
+
this.target = "";
|
|
9
|
+
this.isPiP = false;
|
|
10
|
+
this.handleEnterPiP = () => {
|
|
11
|
+
this.isPiP = true;
|
|
12
|
+
};
|
|
13
|
+
this.handleLeavePiP = () => {
|
|
14
|
+
this.isPiP = false;
|
|
15
|
+
};
|
|
16
|
+
this.toggle = async () => {
|
|
17
|
+
if (document.pictureInPictureElement) {
|
|
18
|
+
await document.exitPictureInPicture();
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const video = this.resolveTargetVideo();
|
|
22
|
+
if (!video) return;
|
|
23
|
+
video.addEventListener("enterpictureinpicture", this.handleEnterPiP, { once: false });
|
|
24
|
+
video.addEventListener("leavepictureinpicture", this.handleLeavePiP, { once: false });
|
|
25
|
+
if (video.paused) await video.play().catch(() => {});
|
|
26
|
+
await video.requestPictureInPicture();
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
static {
|
|
30
|
+
this.styles = [css`
|
|
31
|
+
:host {}
|
|
32
|
+
`];
|
|
33
|
+
}
|
|
34
|
+
/** Hidden video element created from a canvas capture stream. */
|
|
35
|
+
#captureVideo = null;
|
|
36
|
+
resolveTargetVideo() {
|
|
37
|
+
const root = this.target ? document.getElementById(this.target) : null;
|
|
38
|
+
if (!root) return null;
|
|
39
|
+
if (root instanceof HTMLVideoElement) return root;
|
|
40
|
+
if (root instanceof HTMLCanvasElement) return this.#getOrCreateCaptureVideo(root);
|
|
41
|
+
const video = root.querySelector("video");
|
|
42
|
+
if (video) return video;
|
|
43
|
+
const canvas = root.querySelector("canvas");
|
|
44
|
+
if (canvas) return this.#getOrCreateCaptureVideo(canvas);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
#getOrCreateCaptureVideo(canvas) {
|
|
48
|
+
if (!this.#captureVideo) {
|
|
49
|
+
const video = document.createElement("video");
|
|
50
|
+
video.style.cssText = "position:absolute;width:1px;height:1px;opacity:0;pointer-events:none";
|
|
51
|
+
video.muted = true;
|
|
52
|
+
video.autoplay = true;
|
|
53
|
+
const stream = canvas.captureStream?.();
|
|
54
|
+
if (stream) video.srcObject = stream;
|
|
55
|
+
document.body.appendChild(video);
|
|
56
|
+
this.#captureVideo = video;
|
|
57
|
+
}
|
|
58
|
+
return this.#captureVideo;
|
|
59
|
+
}
|
|
60
|
+
#teardownCaptureVideo() {
|
|
61
|
+
if (this.#captureVideo) {
|
|
62
|
+
this.#captureVideo.srcObject = null;
|
|
63
|
+
this.#captureVideo.remove();
|
|
64
|
+
this.#captureVideo = null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
connectedCallback() {
|
|
68
|
+
super.connectedCallback();
|
|
69
|
+
this.isPiP = !!document.pictureInPictureElement;
|
|
70
|
+
}
|
|
71
|
+
disconnectedCallback() {
|
|
72
|
+
super.disconnectedCallback();
|
|
73
|
+
this.#teardownCaptureVideo();
|
|
74
|
+
}
|
|
75
|
+
render() {
|
|
76
|
+
return html`
|
|
77
|
+
<div @click=${this.toggle}>
|
|
78
|
+
${this.isPiP ? html`<slot name="exit"></slot>` : html`<slot name="enter"></slot>`}
|
|
79
|
+
</div>
|
|
80
|
+
`;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
__decorate([property({ type: String })], EFPIP.prototype, "target", void 0);
|
|
84
|
+
__decorate([state()], EFPIP.prototype, "isPiP", void 0);
|
|
85
|
+
EFPIP = __decorate([customElement("ef-pip")], EFPIP);
|
|
86
|
+
//#endregion
|
|
87
|
+
export { EFPIP };
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=EFPIP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EFPIP.js","names":["#getOrCreateCaptureVideo","#captureVideo","#teardownCaptureVideo"],"sources":["../../src/gui/EFPIP.ts"],"mappings":";;;;AAoBO,IAAA,QAAA,MAAM,cAAc,WAAW;;;gBAS3B;eAGO;8BAmDe;AAC7B,QAAK,QAAQ;;8BAGgB;AAC7B,QAAK,QAAQ;;gBAGE,YAAY;AAC3B,OAAI,SAAS,yBAAyB;AACpC,UAAM,SAAS,sBAAsB;AACrC;;GAGF,MAAM,QAAQ,KAAK,oBAAoB;AACvC,OAAI,CAAC,MAAO;AAEZ,SAAM,iBAAiB,yBAAyB,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACrF,SAAM,iBAAiB,yBAAyB,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAGrF,OAAI,MAAM,OACR,OAAM,MAAM,MAAM,CAAC,YAAY,GAAG;AAGpC,SAAM,MAAM,yBAAyB;;;;gBAvFvB,CACd,GAAG;;MAGJ;;;CAUD,gBAAyC;CAEzC,qBAAsD;EACpD,MAAM,OAAO,KAAK,SAAS,SAAS,eAAe,KAAK,OAAO,GAAG;AAClE,MAAI,CAAC,KAAM,QAAO;AAElB,MAAI,gBAAgB,iBAClB,QAAO;AAGT,MAAI,gBAAgB,kBAClB,QAAO,MAAA,wBAA8B,KAAK;EAI5C,MAAM,QAAQ,KAAK,cAAc,QAAQ;AACzC,MAAI,MAAO,QAAO;EAClB,MAAM,SAAS,KAAK,cAAc,SAAS;AAC3C,MAAI,OAAQ,QAAO,MAAA,wBAA8B,OAAO;AAExD,SAAO;;CAGT,yBAAyB,QAA6C;AACpE,MAAI,CAAC,MAAA,cAAoB;GACvB,MAAM,QAAQ,SAAS,cAAc,QAAQ;AAC7C,SAAM,MAAM,UAAU;AACtB,SAAM,QAAQ;AACd,SAAM,WAAW;GAEjB,MAAM,SAAU,OAAe,iBAAiB;AAChD,OAAI,OACF,OAAM,YAAY;AAEpB,YAAS,KAAK,YAAY,MAAM;AAChC,SAAA,eAAqB;;AAEvB,SAAO,MAAA;;CAGT,wBAAwB;AACtB,MAAI,MAAA,cAAoB;AACtB,SAAA,aAAmB,YAAY;AAC/B,SAAA,aAAmB,QAAQ;AAC3B,SAAA,eAAqB;;;CAgCzB,oBAAoB;AAClB,QAAM,mBAAmB;AACzB,OAAK,QAAQ,CAAC,CAAC,SAAS;;CAG1B,uBAAuB;AACrB,QAAM,sBAAsB;AAC5B,QAAA,sBAA4B;;CAG9B,SAAS;AACP,SAAO,IAAI;oBACK,KAAK,OAAO;UACtB,KAAK,QAAQ,IAAI,8BAA8B,IAAI,6BAA6B;;;;;YAhGvF,SAAS,EAAE,MAAM,QAAQ,CAAC,CAAA,EAAA,MAAA,WAAA,UAAA,KAAA,EAAA;YAG1B,OAAO,CAAA,EAAA,MAAA,WAAA,SAAA,KAAA,EAAA;oBAZT,cAAc,SAAS,CAAA,EAAA,MAAA"}
|
package/dist/gui/EFPreview.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EFPreview.js","names":[],"sources":["../../src/gui/EFPreview.ts"],"mappings":";;;;;;;;;;AAUO,IAAA,YAAA,MAAM,kBAAkB,aAAa,aAAa,QAAQ,WAAW,CAAC,CAAC,CAAC;;gBAC7D,CACd,GAAG
|
|
1
|
+
{"version":3,"file":"EFPreview.js","names":[],"sources":["../../src/gui/EFPreview.ts"],"mappings":";;;;;;;;;;AAUO,IAAA,YAAA,MAAM,kBAAkB,aAAa,aAAa,QAAQ,WAAW,CAAC,CAAC,CAAC;;gBAC7D,CACd,GAAG;;;;;MAMJ;;;;;CAQD,oBAA4B,SAAiD;EAC3E,IAAI,UAAU;AACd,SAAO,WAAW,YAAY,MAAM;AAClC,OAAI,aAAa,QAAQ,CACvB,QAAO;AAET,aAAU,QAAQ;;AAEpB,SAAO;;CAGT,cAAc;AACZ,SAAO;AACP,OAAK,iBAAiB,gBAAgB,MAAM;GAC1C,MAAM,SAAS,EAAE;GACjB,MAAM,WAAW,KAAK,oBAAoB,OAAO;AACjD,OAAI,WAAW,QAAQ,SACrB,MAAK,iBAAiB;IAExB;AACF,OAAK,iBAAiB,eAAe,MAAM;GACzC,MAAM,gBAAgB,EAAE;GACxB,MAAM,oBAAoB,KAAK,oBAAoB,cAAc;AAKjE,OAAI,CAAC,KAAK,SAAS,cAAc,IAAI,kBAAkB,QAAQ,CAAC,kBAC9D,MAAK,iBAAiB,KAAA;IAExB;;CAGJ,SAAS;AACP,SAAO,IAAI;;;YAxCZ,QAAQ,EAAE,SAAS,uBAAuB,CAAC,CAAA,EAAA,UAAA,WAAA,kBAAA,KAAA,EAAA;wBAX7C,cAAc,aAAa,CAAA,EAAA,UAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { TemplateResult as TemplateResult$1 } from "../node_modules/lit-html/development/lit-html.js";
|
|
2
|
+
import * as _$lit from "lit";
|
|
3
|
+
import { LitElement } from "lit";
|
|
4
|
+
|
|
5
|
+
//#region src/gui/EFResolution.d.ts
|
|
6
|
+
interface ResolutionChangeDetail {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A resolution picker for an `ef-timegroup` (or any element whose dimensions
|
|
12
|
+
* are controlled by inline CSS `width` / `height`).
|
|
13
|
+
*
|
|
14
|
+
* The `target` attribute accepts the `id` of the element to resize.
|
|
15
|
+
* Dispatches a `resolution-change` custom event with `{ width, height }` detail.
|
|
16
|
+
*
|
|
17
|
+
* Usage:
|
|
18
|
+
* ```html
|
|
19
|
+
* <ef-resolution target="my-timegroup"></ef-resolution>
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
declare class EFResolution extends LitElement {
|
|
23
|
+
#private;
|
|
24
|
+
static styles: _$lit.CSSResult[];
|
|
25
|
+
/** ID of the target element whose CSS width/height to change. */
|
|
26
|
+
target: string;
|
|
27
|
+
private selectedPreset;
|
|
28
|
+
private customWidth;
|
|
29
|
+
private customHeight;
|
|
30
|
+
private isCustom;
|
|
31
|
+
private get targetElement();
|
|
32
|
+
connectedCallback(): void;
|
|
33
|
+
private handlePresetChange;
|
|
34
|
+
private handleCustomWidth;
|
|
35
|
+
private handleCustomHeight;
|
|
36
|
+
private handleCustomApply;
|
|
37
|
+
private handleCustomKeydown;
|
|
38
|
+
render(): TemplateResult$1<1>;
|
|
39
|
+
}
|
|
40
|
+
declare global {
|
|
41
|
+
interface HTMLElementTagNameMap {
|
|
42
|
+
"ef-resolution": EFResolution;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
export { EFResolution, ResolutionChangeDetail };
|
|
47
|
+
//# sourceMappingURL=EFResolution.d.ts.map
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
|
|
2
|
+
import { LitElement, css, html } from "lit";
|
|
3
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
4
|
+
//#region src/gui/EFResolution.ts
|
|
5
|
+
const PRESETS = [
|
|
6
|
+
{
|
|
7
|
+
label: "HD (1920×1080)",
|
|
8
|
+
width: 1920,
|
|
9
|
+
height: 1080
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
label: "720p (1280×720)",
|
|
13
|
+
width: 1280,
|
|
14
|
+
height: 720
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
label: "4K (3840×2160)",
|
|
18
|
+
width: 3840,
|
|
19
|
+
height: 2160
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
label: "Vertical (1080×1920)",
|
|
23
|
+
width: 1080,
|
|
24
|
+
height: 1920
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
label: "Square (1080×1080)",
|
|
28
|
+
width: 1080,
|
|
29
|
+
height: 1080
|
|
30
|
+
}
|
|
31
|
+
];
|
|
32
|
+
const CUSTOM_VALUE = "__custom__";
|
|
33
|
+
let EFResolution = class EFResolution extends LitElement {
|
|
34
|
+
constructor(..._args) {
|
|
35
|
+
super(..._args);
|
|
36
|
+
this.target = "";
|
|
37
|
+
this.selectedPreset = PRESETS[0].label;
|
|
38
|
+
this.customWidth = 1920;
|
|
39
|
+
this.customHeight = 1080;
|
|
40
|
+
this.isCustom = false;
|
|
41
|
+
this.handlePresetChange = (e) => {
|
|
42
|
+
const value = e.target.value;
|
|
43
|
+
if (value === CUSTOM_VALUE) {
|
|
44
|
+
this.selectedPreset = CUSTOM_VALUE;
|
|
45
|
+
this.isCustom = true;
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const preset = PRESETS.find((p) => p.label === value);
|
|
49
|
+
if (!preset) return;
|
|
50
|
+
this.selectedPreset = preset.label;
|
|
51
|
+
this.isCustom = false;
|
|
52
|
+
this.#applyDimensions(preset.width, preset.height);
|
|
53
|
+
};
|
|
54
|
+
this.handleCustomWidth = (e) => {
|
|
55
|
+
const input = e.target;
|
|
56
|
+
this.customWidth = Number.parseInt(input.value, 10) || this.customWidth;
|
|
57
|
+
};
|
|
58
|
+
this.handleCustomHeight = (e) => {
|
|
59
|
+
const input = e.target;
|
|
60
|
+
this.customHeight = Number.parseInt(input.value, 10) || this.customHeight;
|
|
61
|
+
};
|
|
62
|
+
this.handleCustomApply = () => {
|
|
63
|
+
if (this.customWidth > 0 && this.customHeight > 0) this.#applyDimensions(this.customWidth, this.customHeight);
|
|
64
|
+
};
|
|
65
|
+
this.handleCustomKeydown = (e) => {
|
|
66
|
+
if (e.key === "Enter") this.handleCustomApply();
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
static {
|
|
70
|
+
this.styles = [css`
|
|
71
|
+
:host {
|
|
72
|
+
--ef-resolution-font-size: 12px;
|
|
73
|
+
--ef-resolution-color: var(--ef-color-text, #fff);
|
|
74
|
+
--ef-resolution-border-color: var(--ef-color-border, rgba(255, 255, 255, 0.2));
|
|
75
|
+
--ef-resolution-bg: var(--ef-color-surface, rgba(0, 0, 0, 0.6));
|
|
76
|
+
display: inline-flex;
|
|
77
|
+
align-items: center;
|
|
78
|
+
gap: 6px;
|
|
79
|
+
font-size: var(--ef-resolution-font-size);
|
|
80
|
+
color: var(--ef-resolution-color);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
select,
|
|
84
|
+
input[type="number"] {
|
|
85
|
+
background: var(--ef-resolution-bg);
|
|
86
|
+
border: 1px solid var(--ef-resolution-border-color);
|
|
87
|
+
border-radius: 3px;
|
|
88
|
+
color: inherit;
|
|
89
|
+
font-size: inherit;
|
|
90
|
+
padding: 2px 4px;
|
|
91
|
+
outline: none;
|
|
92
|
+
cursor: pointer;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
select {
|
|
96
|
+
min-width: 130px;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
input[type="number"] {
|
|
100
|
+
width: 60px;
|
|
101
|
+
cursor: text;
|
|
102
|
+
-moz-appearance: textfield;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
input[type="number"]::-webkit-inner-spin-button,
|
|
106
|
+
input[type="number"]::-webkit-outer-spin-button {
|
|
107
|
+
-webkit-appearance: none;
|
|
108
|
+
margin: 0;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.custom-inputs {
|
|
112
|
+
display: contents;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.sep {
|
|
116
|
+
opacity: 0.5;
|
|
117
|
+
}
|
|
118
|
+
`];
|
|
119
|
+
}
|
|
120
|
+
get targetElement() {
|
|
121
|
+
return this.target ? document.getElementById(this.target) : null;
|
|
122
|
+
}
|
|
123
|
+
connectedCallback() {
|
|
124
|
+
super.connectedCallback();
|
|
125
|
+
const el = this.targetElement;
|
|
126
|
+
if (el) {
|
|
127
|
+
const w = el.offsetWidth || 1920;
|
|
128
|
+
const h = el.offsetHeight || 1080;
|
|
129
|
+
this.#syncFromDimensions(w, h);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
#syncFromDimensions(width, height) {
|
|
133
|
+
const match = PRESETS.find((p) => p.width === width && p.height === height);
|
|
134
|
+
if (match) {
|
|
135
|
+
this.selectedPreset = match.label;
|
|
136
|
+
this.isCustom = false;
|
|
137
|
+
} else {
|
|
138
|
+
this.customWidth = width;
|
|
139
|
+
this.customHeight = height;
|
|
140
|
+
this.selectedPreset = CUSTOM_VALUE;
|
|
141
|
+
this.isCustom = true;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
#applyDimensions(width, height) {
|
|
145
|
+
const el = this.targetElement;
|
|
146
|
+
if (el) {
|
|
147
|
+
el.style.width = `${width}px`;
|
|
148
|
+
el.style.height = `${height}px`;
|
|
149
|
+
}
|
|
150
|
+
this.dispatchEvent(new CustomEvent("resolution-change", {
|
|
151
|
+
detail: {
|
|
152
|
+
width,
|
|
153
|
+
height
|
|
154
|
+
},
|
|
155
|
+
bubbles: true,
|
|
156
|
+
composed: true
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
render() {
|
|
160
|
+
return html`
|
|
161
|
+
<select .value=${this.selectedPreset} @change=${this.handlePresetChange}>
|
|
162
|
+
${PRESETS.map((p) => html`<option value=${p.label} ?selected=${this.selectedPreset === p.label}>
|
|
163
|
+
${p.label}
|
|
164
|
+
</option>`)}
|
|
165
|
+
<option value=${CUSTOM_VALUE} ?selected=${this.isCustom}>Custom</option>
|
|
166
|
+
</select>
|
|
167
|
+
|
|
168
|
+
${this.isCustom ? html`
|
|
169
|
+
<span class="custom-inputs">
|
|
170
|
+
<input
|
|
171
|
+
type="number"
|
|
172
|
+
min="1"
|
|
173
|
+
max="7680"
|
|
174
|
+
.value=${String(this.customWidth)}
|
|
175
|
+
@change=${this.handleCustomWidth}
|
|
176
|
+
@keydown=${this.handleCustomKeydown}
|
|
177
|
+
aria-label="Width"
|
|
178
|
+
/>
|
|
179
|
+
<span class="sep">×</span>
|
|
180
|
+
<input
|
|
181
|
+
type="number"
|
|
182
|
+
min="1"
|
|
183
|
+
max="7680"
|
|
184
|
+
.value=${String(this.customHeight)}
|
|
185
|
+
@change=${this.handleCustomHeight}
|
|
186
|
+
@keydown=${this.handleCustomKeydown}
|
|
187
|
+
aria-label="Height"
|
|
188
|
+
/>
|
|
189
|
+
</span>
|
|
190
|
+
` : html``}
|
|
191
|
+
`;
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
__decorate([property({ type: String })], EFResolution.prototype, "target", void 0);
|
|
195
|
+
__decorate([state()], EFResolution.prototype, "selectedPreset", void 0);
|
|
196
|
+
__decorate([state()], EFResolution.prototype, "customWidth", void 0);
|
|
197
|
+
__decorate([state()], EFResolution.prototype, "customHeight", void 0);
|
|
198
|
+
__decorate([state()], EFResolution.prototype, "isCustom", void 0);
|
|
199
|
+
EFResolution = __decorate([customElement("ef-resolution")], EFResolution);
|
|
200
|
+
//#endregion
|
|
201
|
+
export { EFResolution };
|
|
202
|
+
|
|
203
|
+
//# sourceMappingURL=EFResolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EFResolution.js","names":["#applyDimensions","#syncFromDimensions"],"sources":["../../src/gui/EFResolution.ts"],"mappings":"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"}
|
package/dist/gui/EFScrubber.js
CHANGED
|
@@ -162,6 +162,15 @@ let EFScrubber = class EFScrubber extends TargetOrContextMixin(LitElement, efCon
|
|
|
162
162
|
cursor: grab;
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
+
:host([dragging]) .handle,
|
|
166
|
+
.handle:active {
|
|
167
|
+
cursor: grabbing;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
:host([dragging]) .scrubber {
|
|
171
|
+
cursor: grabbing;
|
|
172
|
+
}
|
|
173
|
+
|
|
165
174
|
:host([orientation="vertical"]) .handle {
|
|
166
175
|
display: none;
|
|
167
176
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EFScrubber.js","names":[],"sources":["../../src/gui/EFScrubber.ts"],"mappings":";;;;;;;;;;;;AAaA,MAAM,yBAAyB;AAE/B,SAAS,aACP,QACA,YACA,iBACA,WACQ;AACR,KAAI,cAAc,EAAG,QAAO;CAC5B,MAAM,kBAAkB,yBAAyB;AACjD,QAAQ,SAAS,MAAQ;;AAG3B,SAAS,aACP,QACA,YACA,iBACA,WACQ;AACR,KAAI,cAAc,EAAG,QAAO;AAE5B,QAAQ,UADgB,yBAAyB,aACb;;AAI/B,IAAA,aAAA,MAAM,mBAAmB,qBAAqB,YAAY,UAAU,CAAC;;;
|
|
1
|
+
{"version":3,"file":"EFScrubber.js","names":[],"sources":["../../src/gui/EFScrubber.ts"],"mappings":";;;;;;;;;;;;AAaA,MAAM,yBAAyB;AAE/B,SAAS,aACP,QACA,YACA,iBACA,WACQ;AACR,KAAI,cAAc,EAAG,QAAO;CAC5B,MAAM,kBAAkB,yBAAyB;AACjD,QAAQ,SAAS,MAAQ;;AAG3B,SAAS,aACP,QACA,YACA,iBACA,WACQ;AACR,KAAI,cAAc,EAAG,QAAO;AAE5B,QAAQ,UADgB,yBAAyB,aACb;;AAI/B,IAAA,aAAA,MAAM,mBAAmB,qBAAqB,YAAY,UAAU,CAAC;;;iBAuHhE;8BAGa;2BAGH;qBAGqB;uBAGzB;oBAGH;mBAGD;wBAGK;uBA+CO;kBAGL;qBAEG,WAAwB;2BAEH;gCACV;4BAmFJ,MAAoB;GAC/C,MAAM,aAAa,KAAK,YAAY,SAAS,KAAK;AAClD,OAAI,CAAC,WAAY;AAEjB,QAAK,WAAW;AAChB,OAAI,KAAK,eACP,MAAK,eAAe,UAAU;AAEhC,KAAE,gBAAgB;AAClB,KAAE,iBAAiB;AACnB,QAAK,oBAAoB,EAAE;AAC3B,OAAI;AACF,eAAW,kBAAkB,EAAE,UAAU;YAClC,KAAK;AAEZ,YAAQ,KAAK,kCAAkC,IAAI;;AAGrD,OAAI,KAAK,WAAW,KAAK,SAAS;AAChC,SAAK,yBAAyB;AAC9B,SAAK,QAAQ,OAAO;;AAGtB,QAAK,eAAe,EAAE;;iCAGU,MAAoB;AACpD,OAAI,KAAK,YAAY,EAAE,cAAc,KAAK,mBAAmB;AAC3D,MAAE,gBAAgB;AAClB,MAAE,iBAAiB;AACnB,SAAK,eAAe,EAAE;;;+BAIM,MAAoB;GAClD,MAAM,aAAa,KAAK,YAAY,SAAS,KAAK;AAClD,OAAI,EAAE,cAAc,KAAK,qBAAqB,YAAY;AACxD,MAAE,gBAAgB;AAClB,MAAE,iBAAiB;AACnB,QAAI;AACF,gBAAW,sBAAsB,EAAE,UAAU;aACtC,MAAM;AAGf,SAAK,oBAAoB;AACzB,SAAK,WAAW;AAChB,QAAI,KAAK,eACP,MAAK,eAAe,UAAU;AAEhC,QAAI,KAAK,wBAAwB;AAC/B,UAAK,yBAAyB;AAC9B,UAAK,SAAS,MAAM;;;;mCAKU,MAAoB;GACtD,MAAM,aAAa,KAAK,YAAY,SAAS,KAAK;AAClD,OAAI,EAAE,cAAc,KAAK,qBAAqB,YAAY;AACxD,QAAI;AACF,gBAAW,sBAAsB,EAAE,UAAU;aACtC,MAAM;AAGf,SAAK,oBAAoB;AACzB,SAAK,WAAW;AAChB,QAAI,KAAK,eACP,MAAK,eAAe,UAAU;AAEhC,QAAI,KAAK,wBAAwB;AAC/B,UAAK,yBAAyB;AAC9B,UAAK,SAAS,MAAM;;;;iCAKQ,MAAa;AAC7C,OAAI,KAAK,UAAU;AACjB,MAAE,gBAAgB;AAClB,MAAE,iBAAiB;;;;;gBApWP,CACd,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkHJ;;CAgDD,IAAI,UAAwC;AAC1C,SAAO,KAAK;;CAGd,IAAI,yBAAiC;AACnC,MAAI,CAAC,OAAO,MAAM,KAAK,cAAc,CACnC,QAAO,KAAK;AAEd,MAAI,CAAC,OAAO,MAAM,KAAK,qBAAqB,CAC1C,QAAO,KAAK;AAEd,SAAO;;CAGT,IAAI,sBAA8B;AAChC,SAAO,KAAK,cAAc,KAAK,qBAAqB;;CAGtD,IAAI,iBAA0B;AAC5B,SAAO,KAAK,gBAAgB,cAAc,KAAK,YAAY;;CAc7D,eAAuB,GAAiB;EACtC,MAAM,aAAa,KAAK,YAAY,SAAS,KAAK;AAClD,MAAI,CAAC,WAAY;EAEjB,MAAM,WAAW,KAAK;AACtB,MAAI,YAAY,EAAG;AAEnB,MAAI,KAAK,gBAAgB;GAEvB,MAAM,kBAAkB,KAAK,oBAAoB,WAAW,WAAW;AACvE,OAAI,CAAC,gBAAiB;GAEtB,MAAM,sBAAsB,gBAAgB,uBAAuB;GACnE,MAAM,aAAa,gBAAgB,cAAc;GAIjD,IAAI,cAAc;AAClB,OAAI,KAAK,iBAAiB,QAExB,eADkB,KAAK,gBAAgB,QAAQ,uBAAuB,CAC9C,OAAO,oBAAoB,OAAO,gBAAgB;GAI5E,MAAM,gBAAgB,cADZ,EAAE,UAAU,oBAAoB,OAAO;GAEjD,MAAM,iBACJ,KAAK,iBAAiB,IAAI,KAAK,iBAAiB,oBAAoB;AACtE,OAAI,kBAAkB,EAAG;GAEzB,IAAI,UAAU,aAAa,eAAe,UAAU,gBAAgB,KAAK,UAAU;AACnF,aAAU,KAAK,IAAI,GAAG,KAAK,IAAI,SAAS,SAAS,CAAC;GAGlD,IAAI,gBACF,KAAK,OAAO,KAAK,MAAM,IAAI,sBAAsB,SAAS,KAAK,IAAI,GAAG;AACxE,mBAAgB,KAAK,IAAI,GAAG,KAAK,IAAI,eAAe,SAAS,CAAC;AAE9D,QAAK,gBAAgB,gBAAgB;AAErC,OAAI,KAAK,OACP,MAAK,OAAO,cAAc;QACrB;AAEL,SAAK,cACH,IAAI,YAAY,QAAQ;KACtB,QAAQ;KACR,SAAS;KACT,UAAU;KACX,CAAC,CACH;AACD,QAAI,KAAK,QACP,MAAK,QAAQ,gBAAgB;;SAG5B;GAEL,MAAM,OAAO,WAAW,uBAAuB;GAC/C,MAAM,IAAI,EAAE,UAAU,KAAK;GAC3B,MAAM,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,MAAM,CAAC;AAEzD,QAAK,gBAAgB;GACrB,MAAM,SAAS,WAAW;AAE1B,OAAI,KAAK,OACP,MAAK,OAAO,OAAO;QACd;AAEL,SAAK,cACH,IAAI,YAAY,QAAQ;KACtB,QAAQ;KACR,SAAS;KACT,UAAU;KACX,CAAC,CACH;AACD,QAAI,KAAK,QACP,MAAK,QAAQ,gBAAgB;;;;CAyFrC,SAAS;EACP,MAAM,WAAW,KAAK;EACtB,MAAM,cAAc,KAAK;AAEzB,MAAI,YAAY,EACd,QAAO,IAAI;AAGb,MAAI,KAAK,gBAAgB;GAEvB,MAAM,aAAa,KAAK,YAAY,SAAS,KAAK;GAClD,MAAM,iBACJ,KAAK,iBAAiB,IAClB,KAAK,iBACL,YAAY,eAAe,uBAAuB,CAAC,SAAS;GAElE,MAAM,iBACJ,iBAAiB,IACb,aAAa,aAAa,UAAU,gBAAgB,KAAK,UAAU,GACnE;GAEN,MAAM,yBACJ,KAAK,mBAAmB,QAAQ,KAAK,mBAAmB,KAAA,KAAa,iBAAiB,IAClF,aAAa,KAAK,gBAAgB,UAAU,gBAAgB,KAAK,UAAU,GAC3E;AAEN,UAAO,IAAI;UAEP,2BAA2B,QAAQ,2BAA2B,iBAC1D,IAAI;;6BAEW,uBAAuB;uBAEtC,IAAI,GACT;;YAEG,IAAI,KAAK,YAAY,CAAC;;;yBAGT,KAAK,kBAAkB;yBACvB,KAAK,uBAAuB;;;;;2BAK1B,eAAe;2BACf,KAAK,kBAAkB;;;;;;SAMvC;GAEL,MAAM,kBAAkB,WAAW,IAAI,cAAc,WAAW;GAChE,MAAM,kBAAkB,KAAK,WAAW,KAAK,gBAAgB;AAE7D,UAAO,IAAI;;YAEL,IAAI,KAAK,YAAY,CAAC;;;yBAGT,KAAK,kBAAkB;yBACvB,KAAK,uBAAuB;;gEAEW,kBAAkB,IAAI;2DAC3B,kBAAkB,IAAI;;;;;CAM/E,oBAAoB;AAClB,QAAM,mBAAmB;AACzB,SAAO,iBAAiB,aAAa,KAAK,sBAAuC,EAC/E,SAAS,OACV,CAAC;AACF,SAAO,iBAAiB,eAAe,KAAK,wBAAwB,EAClE,SAAS,OACV,CAAC;AACF,SAAO,iBAAiB,iBAAiB,KAAK,0BAA2C,EACvF,SAAS,OACV,CAAC;AACF,OAAK,iBAAiB,eAAe,KAAK,wBAAwB,EAChE,SAAS,OACV,CAAC;AACF,OAAK,iBAAiB,eAAe,KAAK,mBAAoC,EAC5E,SAAS,OACV,CAAC;;CAGJ,uBAAuB;AACrB,QAAM,sBAAsB;AAC5B,SAAO,oBAAoB,aAAa,KAAK,qBAAsC;AACnF,SAAO,oBAAoB,eAAe,KAAK,uBAAuB;AACtE,SAAO,oBAAoB,iBAAiB,KAAK,yBAA0C;AAC3F,OAAK,oBAAoB,eAAe,KAAK,uBAAuB;AACpE,OAAK,oBAAoB,eAAe,KAAK,kBAAmC;AAChF,MAAI,KAAK,wBAAwB;AAC/B,QAAK,yBAAyB;AAC9B,OAAK,KAAK,SAAuC,YAC/C,MAAK,QAAS,MAAM;;;;YAxVzB,QAAQ;CAAE,SAAS;CAAgB,WAAW;CAAM,CAAC,CAAA,EAAA,WAAA,WAAA,WAAA,KAAA,EAAA;YAGrD,QAAQ;CAAE,SAAS;CAAoB,WAAW;CAAM,CAAC,CAAA,EAAA,WAAA,WAAA,wBAAA,KAAA,EAAA;YAGzD,QAAQ;CAAE,SAAS;CAAiB,WAAW;CAAM,CAAC,CAAA,EAAA,WAAA,WAAA,qBAAA,KAAA,EAAA;YAGtD,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAe,CAAC,CAAA,EAAA,WAAA,WAAA,eAAA,KAAA,EAAA;YAGpD,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAmB,CAAC,CAAA,EAAA,WAAA,WAAA,iBAAA,KAAA,EAAA;YAGxD,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAe,CAAC,CAAA,EAAA,WAAA,WAAA,cAAA,KAAA,EAAA;YAGpD,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAc,CAAC,CAAA,EAAA,WAAA,WAAA,aAAA,KAAA,EAAA;YAGnD,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAmB,CAAC,CAAA,EAAA,WAAA,WAAA,kBAAA,KAAA,EAAA;YAGxD,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAO,CAAC,CAAA,EAAA,WAAA,WAAA,OAAA,KAAA,EAAA;YAG5C,SAAS;CAAE,MAAM;CAAQ,WAAW;CAAqB,CAAC,CAAA,EAAA,WAAA,WAAA,kBAAA,KAAA,EAAA;YAG1D,SAAS,EAAE,WAAW,OAAO,CAAC,CAAA,EAAA,WAAA,WAAA,sBAAA,KAAA,EAAA;YAO9B,SAAS,EAAE,WAAW,OAAO,CAAC,CAAA,EAAA,WAAA,WAAA,mBAAA,KAAA,EAAA;YAG9B,SAAS,EAAE,WAAW,OAAO,CAAC,CAAA,EAAA,WAAA,WAAA,UAAA,KAAA,EAAA;YAG9B,SAAS,EAAE,WAAW,OAAO,CAAC,CAAA,EAAA,WAAA,WAAA,kBAAA,KAAA,EAAA;YAyB9B,OAAO,CAAA,EAAA,WAAA,WAAA,iBAAA,KAAA,EAAA;YAGP,OAAO,CAAA,EAAA,WAAA,WAAA,YAAA,KAAA,EAAA;yBA9LT,cAAc,cAAc,CAAA,EAAA,WAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { TemplateResult as TemplateResult$1 } from "../node_modules/lit-html/development/lit-html.js";
|
|
2
|
+
import { ControllableInterface } from "./Controllable.js";
|
|
3
|
+
import * as _$lit from "lit";
|
|
4
|
+
import { LitElement } from "lit";
|
|
5
|
+
|
|
6
|
+
//#region src/gui/EFVolume.d.ts
|
|
7
|
+
declare const EFVolume_base: (new (...args: any[]) => {
|
|
8
|
+
target: string;
|
|
9
|
+
targetElement: ControllableInterface | null;
|
|
10
|
+
effectiveContext: ControllableInterface | null;
|
|
11
|
+
}) & typeof LitElement;
|
|
12
|
+
/**
|
|
13
|
+
* A range slider for controlling master playback volume (0–1).
|
|
14
|
+
* Must be a descendant of `ef-controls` or `ef-preview`, or have a `target` attribute.
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* ```html
|
|
18
|
+
* <ef-controls target="my-preview">
|
|
19
|
+
* <ef-volume></ef-volume>
|
|
20
|
+
* </ef-controls>
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* CSS custom properties:
|
|
24
|
+
* - `--ef-volume-height`: track height (default 4px)
|
|
25
|
+
* - `--ef-volume-track-color`: unfilled track background
|
|
26
|
+
* - `--ef-volume-fill-color`: filled track and thumb color
|
|
27
|
+
*/
|
|
28
|
+
declare class EFVolume extends EFVolume_base {
|
|
29
|
+
#private;
|
|
30
|
+
static styles: _$lit.CSSResult[];
|
|
31
|
+
private contextVolume;
|
|
32
|
+
private contextMuted;
|
|
33
|
+
get context(): ControllableInterface | null;
|
|
34
|
+
private get displayVolume();
|
|
35
|
+
private handleInput;
|
|
36
|
+
updated(changedProperties: Map<string | number | symbol, unknown>): void;
|
|
37
|
+
disconnectedCallback(): void;
|
|
38
|
+
render(): TemplateResult$1<1>;
|
|
39
|
+
}
|
|
40
|
+
declare global {
|
|
41
|
+
interface HTMLElementTagNameMap {
|
|
42
|
+
"ef-volume": EFVolume;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
export { EFVolume };
|
|
47
|
+
//# sourceMappingURL=EFVolume.d.ts.map
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { efContext } from "./efContext.js";
|
|
2
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js";
|
|
3
|
+
import { mutedContext, volumeContext } from "./volumeContext.js";
|
|
4
|
+
import { TargetOrContextMixin } from "./TargetOrContextMixin.js";
|
|
5
|
+
import { ContextEvent, consume } from "@lit/context";
|
|
6
|
+
import { LitElement, css, html } from "lit";
|
|
7
|
+
import { customElement, state } from "lit/decorators.js";
|
|
8
|
+
//#region src/gui/EFVolume.ts
|
|
9
|
+
let EFVolume = class EFVolume extends TargetOrContextMixin(LitElement, efContext) {
|
|
10
|
+
constructor(..._args) {
|
|
11
|
+
super(..._args);
|
|
12
|
+
this.contextVolume = 1;
|
|
13
|
+
this.contextMuted = false;
|
|
14
|
+
this.handleInput = (e) => {
|
|
15
|
+
const input = e.target;
|
|
16
|
+
const value = Number.parseFloat(input.value);
|
|
17
|
+
if (this.context) {
|
|
18
|
+
if (this.context.muted && value > 0) this.context.muted = false;
|
|
19
|
+
this.context.volume = value;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
static {
|
|
24
|
+
this.styles = [css`
|
|
25
|
+
:host {
|
|
26
|
+
--ef-volume-height: 4px;
|
|
27
|
+
--ef-volume-track-color: var(--ef-color-border, rgba(255, 255, 255, 0.2));
|
|
28
|
+
--ef-volume-fill-color: var(--ef-color-primary, #fff);
|
|
29
|
+
display: flex;
|
|
30
|
+
align-items: center;
|
|
31
|
+
width: 80px;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
input[type="range"] {
|
|
35
|
+
-webkit-appearance: none;
|
|
36
|
+
appearance: none;
|
|
37
|
+
width: 100%;
|
|
38
|
+
height: var(--ef-volume-height);
|
|
39
|
+
background: var(--ef-volume-track-color);
|
|
40
|
+
border-radius: 9999px;
|
|
41
|
+
outline: none;
|
|
42
|
+
cursor: pointer;
|
|
43
|
+
padding: 0;
|
|
44
|
+
margin: 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
input[type="range"]::-webkit-slider-thumb {
|
|
48
|
+
-webkit-appearance: none;
|
|
49
|
+
appearance: none;
|
|
50
|
+
width: 12px;
|
|
51
|
+
height: 12px;
|
|
52
|
+
border-radius: 50%;
|
|
53
|
+
background: var(--ef-volume-fill-color);
|
|
54
|
+
cursor: grab;
|
|
55
|
+
margin-top: calc((var(--ef-volume-height) - 12px) / 2);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
input[type="range"]:active::-webkit-slider-thumb {
|
|
59
|
+
cursor: grabbing;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
input[type="range"]:active {
|
|
63
|
+
cursor: grabbing;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
input[type="range"]::-moz-range-thumb {
|
|
67
|
+
width: 12px;
|
|
68
|
+
height: 12px;
|
|
69
|
+
border: none;
|
|
70
|
+
border-radius: 50%;
|
|
71
|
+
background: var(--ef-volume-fill-color);
|
|
72
|
+
cursor: grab;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
input[type="range"]:active::-moz-range-thumb {
|
|
76
|
+
cursor: grabbing;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
input[type="range"]::-webkit-slider-runnable-track {
|
|
80
|
+
background: linear-gradient(
|
|
81
|
+
to right,
|
|
82
|
+
var(--ef-volume-fill-color) var(--_fill-pct, 100%),
|
|
83
|
+
var(--ef-volume-track-color) var(--_fill-pct, 100%)
|
|
84
|
+
);
|
|
85
|
+
height: var(--ef-volume-height);
|
|
86
|
+
border-radius: 9999px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
input[type="range"]::-moz-range-track {
|
|
90
|
+
height: var(--ef-volume-height);
|
|
91
|
+
background: var(--ef-volume-track-color);
|
|
92
|
+
border-radius: 9999px;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
input[type="range"]::-moz-range-progress {
|
|
96
|
+
height: var(--ef-volume-height);
|
|
97
|
+
background: var(--ef-volume-fill-color);
|
|
98
|
+
border-radius: 9999px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
::part(slider) {}
|
|
102
|
+
`];
|
|
103
|
+
}
|
|
104
|
+
#volUnsubscribe;
|
|
105
|
+
#mutedUnsubscribe;
|
|
106
|
+
get context() {
|
|
107
|
+
return this.effectiveContext;
|
|
108
|
+
}
|
|
109
|
+
get displayVolume() {
|
|
110
|
+
return this.contextMuted ? 0 : this.contextVolume;
|
|
111
|
+
}
|
|
112
|
+
updated(changedProperties) {
|
|
113
|
+
super.updated(changedProperties);
|
|
114
|
+
if (changedProperties.has("targetElement")) this.#syncFromTarget();
|
|
115
|
+
}
|
|
116
|
+
#syncFromTarget() {
|
|
117
|
+
this.#volUnsubscribe?.();
|
|
118
|
+
this.#mutedUnsubscribe?.();
|
|
119
|
+
this.#volUnsubscribe = void 0;
|
|
120
|
+
this.#mutedUnsubscribe = void 0;
|
|
121
|
+
const target = this.targetElement;
|
|
122
|
+
if (!target) return;
|
|
123
|
+
target.dispatchEvent(new ContextEvent(volumeContext, this, (val, unsub) => {
|
|
124
|
+
this.contextVolume = val;
|
|
125
|
+
if (unsub) this.#volUnsubscribe = unsub;
|
|
126
|
+
}, true));
|
|
127
|
+
target.dispatchEvent(new ContextEvent(mutedContext, this, (val, unsub) => {
|
|
128
|
+
this.contextMuted = val;
|
|
129
|
+
if (unsub) this.#mutedUnsubscribe = unsub;
|
|
130
|
+
}, true));
|
|
131
|
+
}
|
|
132
|
+
disconnectedCallback() {
|
|
133
|
+
super.disconnectedCallback();
|
|
134
|
+
this.#volUnsubscribe?.();
|
|
135
|
+
this.#mutedUnsubscribe?.();
|
|
136
|
+
}
|
|
137
|
+
render() {
|
|
138
|
+
const pct = `${this.displayVolume * 100}%`;
|
|
139
|
+
return html`
|
|
140
|
+
<input
|
|
141
|
+
part="slider"
|
|
142
|
+
type="range"
|
|
143
|
+
min="0"
|
|
144
|
+
max="1"
|
|
145
|
+
step="0.01"
|
|
146
|
+
.value=${String(this.displayVolume)}
|
|
147
|
+
style="--_fill-pct: ${pct}"
|
|
148
|
+
@input=${this.handleInput}
|
|
149
|
+
/>
|
|
150
|
+
`;
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
__decorate([consume({
|
|
154
|
+
context: volumeContext,
|
|
155
|
+
subscribe: true
|
|
156
|
+
}), state()], EFVolume.prototype, "contextVolume", void 0);
|
|
157
|
+
__decorate([consume({
|
|
158
|
+
context: mutedContext,
|
|
159
|
+
subscribe: true
|
|
160
|
+
}), state()], EFVolume.prototype, "contextMuted", void 0);
|
|
161
|
+
EFVolume = __decorate([customElement("ef-volume")], EFVolume);
|
|
162
|
+
//#endregion
|
|
163
|
+
export { EFVolume };
|
|
164
|
+
|
|
165
|
+
//# sourceMappingURL=EFVolume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EFVolume.js","names":["#syncFromTarget","#volUnsubscribe","#mutedUnsubscribe"],"sources":["../../src/gui/EFVolume.ts"],"mappings":";;;;;;;;AA0BO,IAAA,WAAA,MAAM,iBAAiB,qBAAqB,YAAY,UAAU,CAAC;;;uBAqFhD;sBAID;sBAiBA,MAAa;GAClC,MAAM,QAAQ,EAAE;GAChB,MAAM,QAAQ,OAAO,WAAW,MAAM,MAAM;AAC5C,OAAI,KAAK,SAAS;AAChB,QAAI,KAAK,QAAQ,SAAS,QAAQ,EAChC,MAAK,QAAQ,QAAQ;AAEvB,SAAK,QAAQ,SAAS;;;;;gBAhHV,CACd,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA+EJ;;CAcD;CACA;CAEA,IAAI,UAAwC;AAC1C,SAAO,KAAK;;CAGd,IAAY,gBAAwB;AAClC,SAAO,KAAK,eAAe,IAAI,KAAK;;CActC,QAAiB,mBAA2D;AAC1E,QAAM,QAAQ,kBAAkB;AAChC,MAAI,kBAAkB,IAAI,gBAAgB,CACxC,OAAA,gBAAsB;;CAI1B,kBAAkB;AAChB,QAAA,kBAAwB;AACxB,QAAA,oBAA0B;AAC1B,QAAA,iBAAuB,KAAA;AACvB,QAAA,mBAAyB,KAAA;EAEzB,MAAM,SAAS,KAAK;AACpB,MAAI,CAAC,OAAQ;AAEb,SAAO,cACL,IAAI,aACF,eACA,OACC,KAAa,UAAuB;AACnC,QAAK,gBAAgB;AACrB,OAAI,MAAO,OAAA,iBAAuB;KAEpC,KACD,CACF;AAED,SAAO,cACL,IAAI,aACF,cACA,OACC,KAAc,UAAuB;AACpC,QAAK,eAAe;AACpB,OAAI,MAAO,OAAA,mBAAyB;KAEtC,KACD,CACF;;CAGH,uBAAgC;AAC9B,QAAM,sBAAsB;AAC5B,QAAA,kBAAwB;AACxB,QAAA,oBAA0B;;CAG5B,SAAS;EACP,MAAM,MAAM,GAAG,KAAK,gBAAgB,IAAI;AACxC,SAAO,IAAI;;;;;;;iBAOE,OAAO,KAAK,cAAc,CAAC;8BACd,IAAI;iBACjB,KAAK,YAAY;;;;;YA5F/B,QAAQ;CAAE,SAAS;CAAe,WAAW;CAAM,CAAC,EACpD,OAAO,CAAA,EAAA,SAAA,WAAA,iBAAA,KAAA,EAAA;YAGP,QAAQ;CAAE,SAAS;CAAc,WAAW;CAAM,CAAC,EACnD,OAAO,CAAA,EAAA,SAAA,WAAA,gBAAA,KAAA,EAAA;uBAzFT,cAAc,YAAY,CAAA,EAAA,SAAA"}
|