@editframe/elements 0.16.8-beta.0 → 0.17.6-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/README.md +30 -0
- package/dist/DecoderResetFrequency.test.d.ts +1 -0
- package/dist/DecoderResetRecovery.test.d.ts +1 -0
- package/dist/DelayedLoadingState.d.ts +48 -0
- package/dist/DelayedLoadingState.integration.test.d.ts +1 -0
- package/dist/DelayedLoadingState.js +113 -0
- package/dist/DelayedLoadingState.test.d.ts +1 -0
- package/dist/EF_FRAMEGEN.d.ts +10 -1
- package/dist/EF_FRAMEGEN.js +199 -179
- package/dist/EF_INTERACTIVE.js +2 -6
- package/dist/EF_RENDERING.js +1 -3
- package/dist/JitTranscodingClient.browsertest.d.ts +1 -0
- package/dist/JitTranscodingClient.d.ts +167 -0
- package/dist/JitTranscodingClient.js +373 -0
- package/dist/JitTranscodingClient.test.d.ts +1 -0
- package/dist/LoadingDebounce.test.d.ts +1 -0
- package/dist/LoadingIndicator.browsertest.d.ts +0 -0
- package/dist/ManualScrubTest.test.d.ts +1 -0
- package/dist/ScrubResolvedFlashing.test.d.ts +1 -0
- package/dist/ScrubTrackIntegration.test.d.ts +1 -0
- package/dist/ScrubTrackManager.d.ts +96 -0
- package/dist/ScrubTrackManager.js +216 -0
- package/dist/ScrubTrackManager.test.d.ts +1 -0
- package/dist/SegmentSwitchLoading.test.d.ts +1 -0
- package/dist/VideoSeekFlashing.browsertest.d.ts +0 -0
- package/dist/VideoStuckDiagnostic.test.d.ts +1 -0
- package/dist/elements/CrossUpdateController.js +13 -15
- package/dist/elements/EFAudio.browsertest.d.ts +0 -0
- package/dist/elements/EFAudio.d.ts +1 -1
- package/dist/elements/EFAudio.js +30 -43
- package/dist/elements/EFCaptions.js +337 -373
- package/dist/elements/EFImage.js +64 -90
- package/dist/elements/EFMedia.d.ts +98 -33
- package/dist/elements/EFMedia.js +1169 -678
- package/dist/elements/EFSourceMixin.js +31 -48
- package/dist/elements/EFTemporal.d.ts +1 -0
- package/dist/elements/EFTemporal.js +266 -360
- package/dist/elements/EFTimegroup.d.ts +3 -1
- package/dist/elements/EFTimegroup.js +262 -323
- package/dist/elements/EFVideo.browsertest.d.ts +0 -0
- package/dist/elements/EFVideo.d.ts +90 -2
- package/dist/elements/EFVideo.js +408 -111
- package/dist/elements/EFWaveform.js +375 -411
- package/dist/elements/FetchMixin.js +14 -24
- package/dist/elements/MediaController.d.ts +30 -0
- package/dist/elements/TargetController.js +130 -156
- package/dist/elements/TimegroupController.js +17 -19
- package/dist/elements/durationConverter.js +15 -4
- package/dist/elements/parseTimeToMs.js +4 -10
- package/dist/elements/printTaskStatus.d.ts +2 -0
- package/dist/elements/printTaskStatus.js +11 -0
- package/dist/elements/updateAnimations.js +39 -59
- package/dist/getRenderInfo.js +58 -67
- package/dist/gui/ContextMixin.js +203 -288
- package/dist/gui/EFConfiguration.js +27 -43
- package/dist/gui/EFFilmstrip.js +440 -620
- package/dist/gui/EFFitScale.js +112 -135
- package/dist/gui/EFFocusOverlay.js +45 -61
- package/dist/gui/EFPreview.js +30 -49
- package/dist/gui/EFScrubber.js +78 -99
- package/dist/gui/EFTimeDisplay.js +49 -70
- package/dist/gui/EFToggleLoop.js +17 -34
- package/dist/gui/EFTogglePlay.js +37 -58
- package/dist/gui/EFWorkbench.js +66 -88
- package/dist/gui/TWMixin.js +2 -48
- package/dist/gui/TWMixin2.js +31 -0
- package/dist/gui/efContext.js +2 -6
- package/dist/gui/fetchContext.js +1 -3
- package/dist/gui/focusContext.js +1 -3
- package/dist/gui/focusedElementContext.js +2 -6
- package/dist/gui/playingContext.js +1 -4
- package/dist/index.js +5 -30
- package/dist/msToTimeCode.js +11 -13
- package/dist/style.css +2 -1
- package/package.json +3 -3
- package/src/elements/EFAudio.browsertest.ts +569 -0
- package/src/elements/EFAudio.ts +4 -6
- package/src/elements/EFCaptions.browsertest.ts +0 -1
- package/src/elements/EFImage.browsertest.ts +0 -1
- package/src/elements/EFMedia.browsertest.ts +147 -115
- package/src/elements/EFMedia.ts +1339 -307
- package/src/elements/EFTemporal.browsertest.ts +0 -1
- package/src/elements/EFTemporal.ts +11 -0
- package/src/elements/EFTimegroup.ts +73 -10
- package/src/elements/EFVideo.browsertest.ts +680 -0
- package/src/elements/EFVideo.ts +729 -50
- package/src/elements/EFWaveform.ts +4 -4
- package/src/elements/MediaController.ts +108 -0
- package/src/elements/__screenshots__/EFMedia.browsertest.ts/EFMedia-JIT-audio-playback-audioBufferTask-should-work-in-JIT-mode-without-URL-errors-1.png +0 -0
- package/src/elements/printTaskStatus.ts +16 -0
- package/src/elements/updateAnimations.ts +6 -0
- package/src/gui/TWMixin.ts +10 -3
- package/test/EFVideo.frame-tasks.browsertest.ts +524 -0
- package/test/EFVideo.framegen.browsertest.ts +118 -0
- package/test/createJitTestClips.ts +293 -0
- package/test/useAssetMSW.ts +49 -0
- package/test/useMSW.ts +31 -0
- package/types.json +1 -1
- package/dist/gui/TWMixin.css.js +0 -4
- /package/dist/elements/{TargetController.test.d.ts → TargetController.browsertest.d.ts} +0 -0
- /package/src/elements/{TargetController.test.ts → TargetController.browsertest.ts} +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { CSSStyleObserver } from "@bramus/style-observer";
|
|
2
2
|
import { Task } from "@lit/task";
|
|
3
|
-
import { LitElement, type PropertyValueMap
|
|
3
|
+
import { css, html, LitElement, type PropertyValueMap } from "lit";
|
|
4
4
|
import { customElement, property, state } from "lit/decorators.js";
|
|
5
|
-
import { type Ref,
|
|
5
|
+
import { createRef, type Ref, ref } from "lit/directives/ref.js";
|
|
6
6
|
import { EF_INTERACTIVE } from "../EF_INTERACTIVE.js";
|
|
7
7
|
import { EF_RENDERING } from "../EF_RENDERING.js";
|
|
8
8
|
import { TWMixin } from "../gui/TWMixin.js";
|
|
@@ -38,7 +38,7 @@ export class EFWaveform extends EFTemporal(TWMixin(LitElement)) {
|
|
|
38
38
|
private mutationObserver?: MutationObserver;
|
|
39
39
|
|
|
40
40
|
render() {
|
|
41
|
-
return html`<canvas ${ref(this.canvasRef)}></canvas>`;
|
|
41
|
+
return html`<canvas ${ref(this.canvasRef)}></canvas><div class="text-5xl inline-block bg-red-500">`;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
@property({
|
|
@@ -78,7 +78,7 @@ export class EFWaveform extends EFTemporal(TWMixin(LitElement)) {
|
|
|
78
78
|
if (this.targetElement) {
|
|
79
79
|
new CrossUpdateController(this.targetElement, this);
|
|
80
80
|
}
|
|
81
|
-
} catch (
|
|
81
|
+
} catch (_error) {
|
|
82
82
|
// TODO: determine if this is a critical error, or if we should just ignore it
|
|
83
83
|
// currenty evidence suggests everything still works
|
|
84
84
|
// no target element, no cross update controller
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import type { ReactiveController, ReactiveControllerHost } from "lit";
|
|
2
|
+
import { JitTranscodingClient } from "../JitTranscodingClient.ts";
|
|
3
|
+
|
|
4
|
+
export class MediaController implements ReactiveController {
|
|
5
|
+
#src: string | null = null;
|
|
6
|
+
#assetId: string | null = null;
|
|
7
|
+
|
|
8
|
+
constructor(
|
|
9
|
+
private host: ReactiveControllerHost & {
|
|
10
|
+
src: string;
|
|
11
|
+
assetId: string | null;
|
|
12
|
+
mode: "asset" | "jit-transcode" | "auto";
|
|
13
|
+
},
|
|
14
|
+
) {
|
|
15
|
+
this.host.addController(this);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
get mode() {
|
|
19
|
+
const actualMode = this.host.mode;
|
|
20
|
+
if (actualMode === "asset" || actualMode === "jit-transcode") {
|
|
21
|
+
return actualMode;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (this.host.assetId) {
|
|
25
|
+
return "asset";
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (!this.host.src) {
|
|
29
|
+
return "asset";
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (JitTranscodingClient.isJitTranscodeEligible(this.host.src)) {
|
|
33
|
+
return "jit-transcode";
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return "asset";
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
get src() {
|
|
40
|
+
return this.#src;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
set src(value: string | null) {
|
|
44
|
+
if (this.#src !== value) {
|
|
45
|
+
this.trackUpdate("src", this.#src, value);
|
|
46
|
+
this.#src = value;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
get assetId() {
|
|
51
|
+
return this.#assetId;
|
|
52
|
+
}
|
|
53
|
+
set assetId(value: string | null) {
|
|
54
|
+
if (this.#assetId !== value) {
|
|
55
|
+
this.trackUpdate("assetId", this.#assetId, value);
|
|
56
|
+
this.#assetId = value;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
changes: Map<string, { oldValue: any; newValue: any }> | null = null;
|
|
61
|
+
updatePending = false;
|
|
62
|
+
|
|
63
|
+
trackUpdate(key: string, oldValue: any, newValue: any) {
|
|
64
|
+
this.changes ??= new Map<string, { oldValue: any; newValue: any }>();
|
|
65
|
+
this.changes.set(key, { oldValue, newValue });
|
|
66
|
+
if (!this.updatePending) {
|
|
67
|
+
this.updatePending = true;
|
|
68
|
+
queueMicrotask(() => {
|
|
69
|
+
this.endUpdate();
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
endUpdate() {
|
|
75
|
+
try {
|
|
76
|
+
if (this.changes) {
|
|
77
|
+
this.handleUpdate(this.changes);
|
|
78
|
+
}
|
|
79
|
+
} finally {
|
|
80
|
+
this.changes = null;
|
|
81
|
+
this.updatePending = false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
handleUpdate(changes: Map<string, { oldValue: any; newValue: any }>) {
|
|
86
|
+
if (changes.has("src") || changes.has("assetId") || changes.has("mode")) {
|
|
87
|
+
console.log("SRC/ASSETID/MODE changed");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
hostUpdated(): void {
|
|
92
|
+
this.src = this.host.src;
|
|
93
|
+
this.assetId = this.host.assetId;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
hostConnected() {
|
|
97
|
+
this.src = this.host.src;
|
|
98
|
+
this.assetId = this.host.assetId;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
hostDisconnected() {
|
|
102
|
+
console.log("hostDisconnected");
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
updated() {
|
|
106
|
+
console.log("updated");
|
|
107
|
+
}
|
|
108
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TaskStatus } from "@lit/task";
|
|
2
|
+
|
|
3
|
+
export const printTaskStatus = (status: TaskStatus) => {
|
|
4
|
+
switch (status) {
|
|
5
|
+
case TaskStatus.INITIAL:
|
|
6
|
+
return "INITIAL";
|
|
7
|
+
case TaskStatus.ERROR:
|
|
8
|
+
return "ERROR";
|
|
9
|
+
case TaskStatus.PENDING:
|
|
10
|
+
return "PENDING";
|
|
11
|
+
case TaskStatus.COMPLETE:
|
|
12
|
+
return "COMPLETE";
|
|
13
|
+
default:
|
|
14
|
+
return "UNKNOWN";
|
|
15
|
+
}
|
|
16
|
+
};
|
|
@@ -24,6 +24,12 @@ export const updateAnimations = (
|
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
26
|
element.style.display = "";
|
|
27
|
+
|
|
28
|
+
// Check if getAnimations is available (Web Animations API - not available in Node.js)
|
|
29
|
+
if (typeof element.getAnimations !== "function") {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
27
33
|
const animations = element.getAnimations({ subtree: true });
|
|
28
34
|
element.style.setProperty("--ef-duration", `${element.durationMs}ms`);
|
|
29
35
|
element.style.setProperty(
|
package/src/gui/TWMixin.ts
CHANGED
|
@@ -3,9 +3,16 @@ import type { CSSResult, LitElement } from "lit";
|
|
|
3
3
|
import twStyle from "./TWMixin.css?inline";
|
|
4
4
|
|
|
5
5
|
let twSheet: CSSStyleSheet | null = null;
|
|
6
|
-
if (typeof window !== "undefined") {
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
if (typeof window !== "undefined" && typeof CSSStyleSheet !== "undefined") {
|
|
7
|
+
try {
|
|
8
|
+
twSheet = new CSSStyleSheet();
|
|
9
|
+
if (typeof twSheet.replaceSync === "function") {
|
|
10
|
+
twSheet.replaceSync(twStyle);
|
|
11
|
+
}
|
|
12
|
+
} catch (_error) {
|
|
13
|
+
// CSSStyleSheet or replaceSync not supported in this environment
|
|
14
|
+
twSheet = null;
|
|
15
|
+
}
|
|
9
16
|
}
|
|
10
17
|
export function TWMixin<T extends new (...args: any[]) => LitElement>(Base: T) {
|
|
11
18
|
class TWElement extends Base {
|