@editframe/elements 0.26.3-beta.0 → 0.26.4-beta.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/package.json +2 -2
- package/scripts/build-css.js +3 -3
- package/tsdown.config.ts +1 -1
- package/src/elements/ContextProxiesController.ts +0 -124
- package/src/elements/CrossUpdateController.ts +0 -22
- package/src/elements/EFAudio.browsertest.ts +0 -706
- package/src/elements/EFAudio.ts +0 -56
- package/src/elements/EFCaptions.browsertest.ts +0 -1960
- package/src/elements/EFCaptions.ts +0 -823
- package/src/elements/EFImage.browsertest.ts +0 -120
- package/src/elements/EFImage.ts +0 -113
- package/src/elements/EFMedia/AssetIdMediaEngine.test.ts +0 -224
- package/src/elements/EFMedia/AssetIdMediaEngine.ts +0 -110
- package/src/elements/EFMedia/AssetMediaEngine.browsertest.ts +0 -140
- package/src/elements/EFMedia/AssetMediaEngine.ts +0 -385
- package/src/elements/EFMedia/BaseMediaEngine.browsertest.ts +0 -400
- package/src/elements/EFMedia/BaseMediaEngine.ts +0 -505
- package/src/elements/EFMedia/BufferedSeekingInput.browsertest.ts +0 -386
- package/src/elements/EFMedia/BufferedSeekingInput.ts +0 -430
- package/src/elements/EFMedia/JitMediaEngine.browsertest.ts +0 -226
- package/src/elements/EFMedia/JitMediaEngine.ts +0 -256
- package/src/elements/EFMedia/audioTasks/makeAudioBufferTask.browsertest.ts +0 -679
- package/src/elements/EFMedia/audioTasks/makeAudioBufferTask.ts +0 -117
- package/src/elements/EFMedia/audioTasks/makeAudioFrequencyAnalysisTask.ts +0 -246
- package/src/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.browsertest.ts +0 -59
- package/src/elements/EFMedia/audioTasks/makeAudioInitSegmentFetchTask.ts +0 -27
- package/src/elements/EFMedia/audioTasks/makeAudioInputTask.browsertest.ts +0 -55
- package/src/elements/EFMedia/audioTasks/makeAudioInputTask.ts +0 -53
- package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.chunkboundary.regression.browsertest.ts +0 -207
- package/src/elements/EFMedia/audioTasks/makeAudioSeekTask.ts +0 -72
- package/src/elements/EFMedia/audioTasks/makeAudioSegmentFetchTask.ts +0 -32
- package/src/elements/EFMedia/audioTasks/makeAudioSegmentIdTask.ts +0 -29
- package/src/elements/EFMedia/audioTasks/makeAudioTasksVideoOnly.browsertest.ts +0 -95
- package/src/elements/EFMedia/audioTasks/makeAudioTimeDomainAnalysisTask.ts +0 -184
- package/src/elements/EFMedia/shared/AudioSpanUtils.ts +0 -129
- package/src/elements/EFMedia/shared/BufferUtils.ts +0 -342
- package/src/elements/EFMedia/shared/GlobalInputCache.ts +0 -77
- package/src/elements/EFMedia/shared/MediaTaskUtils.ts +0 -44
- package/src/elements/EFMedia/shared/PrecisionUtils.ts +0 -46
- package/src/elements/EFMedia/shared/RenditionHelpers.browsertest.ts +0 -246
- package/src/elements/EFMedia/shared/RenditionHelpers.ts +0 -56
- package/src/elements/EFMedia/shared/ThumbnailExtractor.ts +0 -227
- package/src/elements/EFMedia/tasks/makeMediaEngineTask.browsertest.ts +0 -167
- package/src/elements/EFMedia/tasks/makeMediaEngineTask.ts +0 -88
- package/src/elements/EFMedia/videoTasks/MainVideoInputCache.ts +0 -76
- package/src/elements/EFMedia/videoTasks/ScrubInputCache.ts +0 -61
- package/src/elements/EFMedia/videoTasks/makeScrubVideoBufferTask.ts +0 -114
- package/src/elements/EFMedia/videoTasks/makeScrubVideoInitSegmentFetchTask.ts +0 -35
- package/src/elements/EFMedia/videoTasks/makeScrubVideoInputTask.ts +0 -52
- package/src/elements/EFMedia/videoTasks/makeScrubVideoSeekTask.ts +0 -124
- package/src/elements/EFMedia/videoTasks/makeScrubVideoSegmentFetchTask.ts +0 -44
- package/src/elements/EFMedia/videoTasks/makeScrubVideoSegmentIdTask.ts +0 -32
- package/src/elements/EFMedia/videoTasks/makeUnifiedVideoSeekTask.ts +0 -370
- package/src/elements/EFMedia/videoTasks/makeVideoBufferTask.ts +0 -109
- package/src/elements/EFMedia.browsertest.ts +0 -872
- package/src/elements/EFMedia.ts +0 -341
- package/src/elements/EFSourceMixin.ts +0 -60
- package/src/elements/EFSurface.browsertest.ts +0 -151
- package/src/elements/EFSurface.ts +0 -142
- package/src/elements/EFTemporal.browsertest.ts +0 -215
- package/src/elements/EFTemporal.ts +0 -800
- package/src/elements/EFThumbnailStrip.browsertest.ts +0 -585
- package/src/elements/EFThumbnailStrip.media-engine.browsertest.ts +0 -714
- package/src/elements/EFThumbnailStrip.ts +0 -906
- package/src/elements/EFTimegroup.browsertest.ts +0 -934
- package/src/elements/EFTimegroup.ts +0 -882
- package/src/elements/EFVideo.browsertest.ts +0 -1482
- package/src/elements/EFVideo.ts +0 -564
- package/src/elements/EFWaveform.ts +0 -547
- package/src/elements/FetchContext.browsertest.ts +0 -401
- package/src/elements/FetchMixin.ts +0 -38
- package/src/elements/SampleBuffer.ts +0 -94
- package/src/elements/TargetController.browsertest.ts +0 -230
- package/src/elements/TargetController.ts +0 -224
- package/src/elements/TimegroupController.ts +0 -26
- package/src/elements/durationConverter.ts +0 -35
- package/src/elements/parseTimeToMs.ts +0 -9
- package/src/elements/printTaskStatus.ts +0 -16
- package/src/elements/renderTemporalAudio.ts +0 -108
- package/src/elements/updateAnimations.browsertest.ts +0 -1884
- package/src/elements/updateAnimations.ts +0 -217
- package/src/elements/util.ts +0 -24
- package/src/gui/ContextMixin.browsertest.ts +0 -860
- package/src/gui/ContextMixin.ts +0 -562
- package/src/gui/Controllable.browsertest.ts +0 -258
- package/src/gui/Controllable.ts +0 -41
- package/src/gui/EFConfiguration.ts +0 -40
- package/src/gui/EFControls.browsertest.ts +0 -389
- package/src/gui/EFControls.ts +0 -195
- package/src/gui/EFDial.browsertest.ts +0 -84
- package/src/gui/EFDial.ts +0 -172
- package/src/gui/EFFilmstrip.browsertest.ts +0 -712
- package/src/gui/EFFilmstrip.ts +0 -1349
- package/src/gui/EFFitScale.ts +0 -152
- package/src/gui/EFFocusOverlay.ts +0 -79
- package/src/gui/EFPause.browsertest.ts +0 -202
- package/src/gui/EFPause.ts +0 -73
- package/src/gui/EFPlay.browsertest.ts +0 -202
- package/src/gui/EFPlay.ts +0 -73
- package/src/gui/EFPreview.ts +0 -74
- package/src/gui/EFResizableBox.browsertest.ts +0 -79
- package/src/gui/EFResizableBox.ts +0 -898
- package/src/gui/EFScrubber.ts +0 -151
- package/src/gui/EFTimeDisplay.browsertest.ts +0 -237
- package/src/gui/EFTimeDisplay.ts +0 -55
- package/src/gui/EFToggleLoop.ts +0 -35
- package/src/gui/EFTogglePlay.ts +0 -70
- package/src/gui/EFWorkbench.ts +0 -115
- package/src/gui/PlaybackController.ts +0 -527
- package/src/gui/TWMixin.css +0 -6
- package/src/gui/TWMixin.ts +0 -61
- package/src/gui/TargetOrContextMixin.ts +0 -185
- package/src/gui/currentTimeContext.ts +0 -5
- package/src/gui/durationContext.ts +0 -3
- package/src/gui/efContext.ts +0 -6
- package/src/gui/fetchContext.ts +0 -5
- package/src/gui/focusContext.ts +0 -7
- package/src/gui/focusedElementContext.ts +0 -5
- package/src/gui/playingContext.ts +0 -5
- package/src/otel/BridgeSpanExporter.ts +0 -150
- package/src/otel/setupBrowserTracing.ts +0 -73
- package/src/otel/tracingHelpers.ts +0 -251
- package/src/transcoding/cache/RequestDeduplicator.test.ts +0 -170
- package/src/transcoding/cache/RequestDeduplicator.ts +0 -65
- package/src/transcoding/cache/URLTokenDeduplicator.test.ts +0 -182
- package/src/transcoding/cache/URLTokenDeduplicator.ts +0 -101
- package/src/transcoding/types/index.ts +0 -312
- package/src/transcoding/utils/MediaUtils.ts +0 -63
- package/src/transcoding/utils/UrlGenerator.ts +0 -68
- package/src/transcoding/utils/constants.ts +0 -36
- package/src/utils/LRUCache.test.ts +0 -274
- package/src/utils/LRUCache.ts +0 -696
package/src/gui/EFPlay.ts
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { consume } from "@lit/context";
|
|
2
|
-
import { css, html, LitElement } from "lit";
|
|
3
|
-
import { customElement, state } from "lit/decorators.js";
|
|
4
|
-
import { attachContextRoot } from "../attachContextRoot.js";
|
|
5
|
-
import type { ControllableInterface } from "./Controllable.js";
|
|
6
|
-
import { efContext } from "./efContext.js";
|
|
7
|
-
import { playingContext } from "./playingContext.js";
|
|
8
|
-
import { TargetOrContextMixin } from "./TargetOrContextMixin.js";
|
|
9
|
-
|
|
10
|
-
attachContextRoot();
|
|
11
|
-
|
|
12
|
-
@customElement("ef-play")
|
|
13
|
-
export class EFPlay extends TargetOrContextMixin(LitElement, efContext) {
|
|
14
|
-
static styles = [
|
|
15
|
-
css`
|
|
16
|
-
:host {
|
|
17
|
-
display: block;
|
|
18
|
-
}
|
|
19
|
-
:host([hidden]) {
|
|
20
|
-
display: none;
|
|
21
|
-
}
|
|
22
|
-
div {
|
|
23
|
-
all: inherit;
|
|
24
|
-
}
|
|
25
|
-
`,
|
|
26
|
-
];
|
|
27
|
-
|
|
28
|
-
@consume({ context: playingContext, subscribe: true })
|
|
29
|
-
@state()
|
|
30
|
-
playing = false;
|
|
31
|
-
|
|
32
|
-
get efContext(): ControllableInterface | null {
|
|
33
|
-
return this.effectiveContext;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
connectedCallback() {
|
|
37
|
-
super.connectedCallback();
|
|
38
|
-
this.addEventListener("click", this.handleClick);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
disconnectedCallback() {
|
|
42
|
-
super.disconnectedCallback();
|
|
43
|
-
this.removeEventListener("click", this.handleClick);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
updated(changedProperties: Map<string | number | symbol, unknown>): void {
|
|
47
|
-
super.updated(changedProperties);
|
|
48
|
-
|
|
49
|
-
if (changedProperties.has("playing")) {
|
|
50
|
-
this.style.display = this.playing ? "none" : "";
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
render() {
|
|
55
|
-
return html`
|
|
56
|
-
<div>
|
|
57
|
-
<slot></slot>
|
|
58
|
-
</div>
|
|
59
|
-
`;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
handleClick = () => {
|
|
63
|
-
if (this.efContext) {
|
|
64
|
-
this.efContext.play();
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
declare global {
|
|
70
|
-
interface HTMLElementTagNameMap {
|
|
71
|
-
"ef-play": EFPlay;
|
|
72
|
-
}
|
|
73
|
-
}
|
package/src/gui/EFPreview.ts
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { provide } from "@lit/context";
|
|
2
|
-
import { css, html, LitElement } from "lit";
|
|
3
|
-
import { customElement } from "lit/decorators.js";
|
|
4
|
-
import { isEFTemporal } from "../elements/EFTemporal.js";
|
|
5
|
-
import { EFTargetable } from "../elements/TargetController.js";
|
|
6
|
-
import { ContextMixin } from "./ContextMixin.js";
|
|
7
|
-
import { focusedElementContext } from "./focusedElementContext.js";
|
|
8
|
-
import { TWMixin } from "./TWMixin.js";
|
|
9
|
-
|
|
10
|
-
@customElement("ef-preview")
|
|
11
|
-
export class EFPreview extends EFTargetable(ContextMixin(TWMixin(LitElement))) {
|
|
12
|
-
static styles = [
|
|
13
|
-
css`
|
|
14
|
-
:host {
|
|
15
|
-
position: relative;
|
|
16
|
-
display: block;
|
|
17
|
-
cursor: crosshair;
|
|
18
|
-
}
|
|
19
|
-
`,
|
|
20
|
-
];
|
|
21
|
-
|
|
22
|
-
@provide({ context: focusedElementContext })
|
|
23
|
-
focusedElement?: HTMLElement;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Find the closest temporal element (timegroup, video, audio, etc.)
|
|
27
|
-
*/
|
|
28
|
-
private findClosestTemporal(element: HTMLElement | null): HTMLElement | null {
|
|
29
|
-
let current = element;
|
|
30
|
-
while (current && current !== this) {
|
|
31
|
-
if (isEFTemporal(current)) {
|
|
32
|
-
return current;
|
|
33
|
-
}
|
|
34
|
-
current = current.parentElement;
|
|
35
|
-
}
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
constructor() {
|
|
40
|
-
super();
|
|
41
|
-
this.addEventListener("mouseover", (e) => {
|
|
42
|
-
const target = e.target as HTMLElement;
|
|
43
|
-
const temporal = this.findClosestTemporal(target);
|
|
44
|
-
if (target !== this && temporal) {
|
|
45
|
-
this.focusedElement = target;
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
this.addEventListener("mouseout", (e) => {
|
|
49
|
-
const relatedTarget = e.relatedTarget as HTMLElement;
|
|
50
|
-
const targetingTemporal = this.findClosestTemporal(relatedTarget);
|
|
51
|
-
// Clear focus if:
|
|
52
|
-
// 1. Moving outside the preview entirely, or
|
|
53
|
-
// 2. Moving to the preview itself, or
|
|
54
|
-
// 3. Moving to an element that's not within a temporal
|
|
55
|
-
if (
|
|
56
|
-
!this.contains(relatedTarget) ||
|
|
57
|
-
relatedTarget === this ||
|
|
58
|
-
!targetingTemporal
|
|
59
|
-
) {
|
|
60
|
-
this.focusedElement = undefined;
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
render() {
|
|
66
|
-
return html`<slot></slot>`;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
declare global {
|
|
71
|
-
interface HTMLElementTagNameMap {
|
|
72
|
-
"ef-preview": EFPreview;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { html, render } from "lit";
|
|
2
|
-
import { afterEach, describe, expect, test } from "vitest";
|
|
3
|
-
import type { EFResizableBox } from "./EFResizableBox";
|
|
4
|
-
import "./EFResizableBox";
|
|
5
|
-
|
|
6
|
-
describe("EFResizableBox", () => {
|
|
7
|
-
afterEach(() => {
|
|
8
|
-
document.body.innerHTML = "";
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
test("should render with default bounds", async () => {
|
|
12
|
-
const container = document.createElement("div");
|
|
13
|
-
document.body.appendChild(container);
|
|
14
|
-
render(html`<ef-resizable-box></ef-resizable-box>`, container);
|
|
15
|
-
const el = container.querySelector<EFResizableBox>("ef-resizable-box")!;
|
|
16
|
-
await el.updateComplete;
|
|
17
|
-
|
|
18
|
-
const box = el.shadowRoot!.querySelector(".box") as HTMLDivElement;
|
|
19
|
-
expect(box).to.exist;
|
|
20
|
-
expect(box.style.left).to.equal("0px");
|
|
21
|
-
expect(box.style.top).to.equal("0px");
|
|
22
|
-
expect(box.style.width).to.equal("100px");
|
|
23
|
-
expect(box.style.height).to.equal("100px");
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
test("should render with provided bounds", async () => {
|
|
27
|
-
const container = document.createElement("div");
|
|
28
|
-
document.body.appendChild(container);
|
|
29
|
-
const bounds = { x: 50, y: 50, width: 200, height: 150 };
|
|
30
|
-
render(
|
|
31
|
-
html`<ef-resizable-box .bounds=${bounds}></ef-resizable-box>`,
|
|
32
|
-
container,
|
|
33
|
-
);
|
|
34
|
-
const el = container.querySelector<EFResizableBox>("ef-resizable-box")!;
|
|
35
|
-
await el.updateComplete;
|
|
36
|
-
|
|
37
|
-
const box = el.shadowRoot!.querySelector(".box") as HTMLDivElement;
|
|
38
|
-
expect(box.style.left).to.equal("50px");
|
|
39
|
-
expect(box.style.top).to.equal("50px");
|
|
40
|
-
expect(box.style.width).to.equal("200px");
|
|
41
|
-
expect(box.style.height).to.equal("150px");
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
test("should be constrained by its parent", async () => {
|
|
45
|
-
const container = document.createElement("div");
|
|
46
|
-
container.style.width = "300px";
|
|
47
|
-
container.style.height = "300px";
|
|
48
|
-
container.style.position = "relative";
|
|
49
|
-
document.body.appendChild(container);
|
|
50
|
-
const bounds = { x: 250, y: 250, width: 100, height: 100 };
|
|
51
|
-
render(
|
|
52
|
-
html`<ef-resizable-box .bounds=${bounds}></ef-resizable-box>`,
|
|
53
|
-
container,
|
|
54
|
-
);
|
|
55
|
-
const el = container.querySelector<EFResizableBox>("ef-resizable-box")!;
|
|
56
|
-
await el.updateComplete;
|
|
57
|
-
|
|
58
|
-
const box = el.shadowRoot!.querySelector(".box") as HTMLDivElement;
|
|
59
|
-
const downEvent = new PointerEvent("pointerdown", {
|
|
60
|
-
clientX: 260,
|
|
61
|
-
clientY: 260,
|
|
62
|
-
bubbles: true,
|
|
63
|
-
composed: true,
|
|
64
|
-
});
|
|
65
|
-
box.dispatchEvent(downEvent);
|
|
66
|
-
|
|
67
|
-
const moveEvent = new PointerEvent("pointermove", {
|
|
68
|
-
clientX: 350,
|
|
69
|
-
clientY: 350,
|
|
70
|
-
bubbles: true,
|
|
71
|
-
composed: true,
|
|
72
|
-
});
|
|
73
|
-
document.dispatchEvent(moveEvent);
|
|
74
|
-
await el.updateComplete;
|
|
75
|
-
|
|
76
|
-
expect(el.bounds.x).to.be.lessThanOrEqual(200);
|
|
77
|
-
expect(el.bounds.y).to.be.lessThanOrEqual(200);
|
|
78
|
-
});
|
|
79
|
-
});
|