@editframe/elements 0.7.0-beta.9 → 0.8.0-beta.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/EF_FRAMEGEN.d.ts +44 -0
- package/dist/EF_INTERACTIVE.d.ts +1 -0
- package/dist/assets/dist/EncodedAsset.js +560 -0
- package/dist/assets/dist/MP4File.js +170 -0
- package/dist/assets/dist/memoize.js +14 -0
- package/dist/elements/CrossUpdateController.d.ts +9 -0
- package/dist/elements/EFAudio.d.ts +10 -0
- package/dist/elements/EFCaptions.d.ts +38 -0
- package/dist/elements/EFImage.d.ts +14 -0
- package/dist/elements/EFMedia.d.ts +64 -0
- package/dist/elements/EFSourceMixin.d.ts +12 -0
- package/dist/elements/EFTemporal.d.ts +38 -0
- package/dist/elements/EFTimegroup.browsertest.d.ts +12 -0
- package/dist/elements/EFTimegroup.d.ts +39 -0
- package/dist/elements/EFVideo.d.ts +14 -0
- package/dist/elements/EFWaveform.d.ts +30 -0
- package/dist/elements/FetchMixin.d.ts +8 -0
- package/dist/elements/TimegroupController.d.ts +14 -0
- package/dist/elements/durationConverter.d.ts +4 -0
- package/dist/elements/parseTimeToMs.d.ts +1 -0
- package/{src/EF_FRAMEGEN.ts → dist/elements/src/EF_FRAMEGEN.js} +35 -115
- package/dist/elements/src/EF_INTERACTIVE.js +7 -0
- package/dist/elements/src/elements/CrossUpdateController.js +16 -0
- package/dist/elements/src/elements/EFAudio.js +54 -0
- package/dist/elements/src/elements/EFCaptions.js +166 -0
- package/dist/elements/src/elements/EFImage.js +80 -0
- package/dist/elements/src/elements/EFMedia.js +356 -0
- package/dist/elements/src/elements/EFSourceMixin.js +55 -0
- package/dist/elements/src/elements/EFTemporal.js +234 -0
- package/dist/elements/src/elements/EFTimegroup.js +355 -0
- package/dist/elements/src/elements/EFVideo.js +110 -0
- package/dist/elements/src/elements/EFWaveform.js +226 -0
- package/dist/elements/src/elements/FetchMixin.js +28 -0
- package/dist/elements/src/elements/TimegroupController.js +20 -0
- package/dist/elements/src/elements/durationConverter.js +8 -0
- package/dist/elements/src/elements/parseTimeToMs.js +12 -0
- package/dist/elements/src/elements/util.js +11 -0
- package/dist/elements/src/gui/ContextMixin.js +236 -0
- package/dist/elements/src/gui/EFFilmstrip.js +729 -0
- package/dist/elements/src/gui/EFPreview.js +45 -0
- package/dist/elements/src/gui/EFWorkbench.js +128 -0
- package/dist/elements/src/gui/TWMixin.css.js +4 -0
- package/dist/elements/src/gui/TWMixin.js +36 -0
- package/dist/elements/src/gui/apiHostContext.js +5 -0
- package/dist/elements/src/gui/fetchContext.js +5 -0
- package/dist/elements/src/gui/focusContext.js +5 -0
- package/dist/elements/src/gui/focusedElementContext.js +7 -0
- package/dist/elements/src/gui/playingContext.js +5 -0
- package/dist/elements/src/index.js +27 -0
- package/dist/elements/src/msToTimeCode.js +15 -0
- package/dist/elements/util.d.ts +4 -0
- package/dist/gui/ContextMixin.d.ts +23 -0
- package/dist/gui/EFFilmstrip.d.ts +144 -0
- package/dist/gui/EFPreview.d.ts +27 -0
- package/dist/gui/EFWorkbench.d.ts +34 -0
- package/dist/gui/TWMixin.d.ts +3 -0
- package/dist/gui/apiHostContext.d.ts +3 -0
- package/dist/gui/fetchContext.d.ts +3 -0
- package/dist/gui/focusContext.d.ts +6 -0
- package/dist/gui/focusedElementContext.d.ts +3 -0
- package/dist/gui/playingContext.d.ts +3 -0
- package/dist/index.d.ts +11 -0
- package/dist/msToTimeCode.d.ts +1 -0
- package/dist/style.css +800 -0
- package/package.json +6 -9
- package/src/elements/EFAudio.ts +1 -1
- package/src/elements/EFCaptions.ts +9 -9
- package/src/elements/EFImage.ts +3 -3
- package/src/elements/EFMedia.ts +39 -11
- package/src/elements/EFSourceMixin.ts +1 -1
- package/src/elements/EFTemporal.ts +42 -5
- package/src/elements/EFTimegroup.browsertest.ts +3 -3
- package/src/elements/EFTimegroup.ts +9 -6
- package/src/elements/EFVideo.ts +2 -2
- package/src/elements/EFWaveform.ts +6 -6
- package/src/elements/FetchMixin.ts +5 -3
- package/src/elements/TimegroupController.ts +1 -1
- package/src/elements/durationConverter.ts +1 -1
- package/src/elements/util.ts +1 -1
- package/src/gui/ContextMixin.ts +256 -0
- package/src/gui/EFFilmstrip.ts +41 -150
- package/src/gui/EFPreview.ts +39 -0
- package/src/gui/EFWorkbench.ts +7 -105
- package/src/gui/TWMixin.ts +10 -3
- package/src/gui/apiHostContext.ts +3 -0
- package/src/gui/fetchContext.ts +5 -0
- package/src/gui/focusContext.ts +7 -0
- package/src/gui/focusedElementContext.ts +5 -0
- package/src/gui/playingContext.ts +3 -0
- package/CHANGELOG.md +0 -7
- package/postcss.config.cjs +0 -12
- package/src/EF_INTERACTIVE.ts +0 -2
- package/src/elements.css +0 -22
- package/src/index.ts +0 -33
- package/tailwind.config.ts +0 -10
- package/tsconfig.json +0 -4
- package/vite.config.ts +0 -8
package/src/gui/EFWorkbench.ts
CHANGED
|
@@ -1,34 +1,15 @@
|
|
|
1
|
-
import { createContext, provide } from "@lit/context";
|
|
2
1
|
import { LitElement, html, css, type PropertyValueMap } from "lit";
|
|
3
2
|
import { TaskStatus } from "@lit/task";
|
|
4
|
-
import {
|
|
5
|
-
customElement,
|
|
6
|
-
eventOptions,
|
|
7
|
-
property,
|
|
8
|
-
state,
|
|
9
|
-
} from "lit/decorators.js";
|
|
3
|
+
import { customElement, eventOptions } from "lit/decorators.js";
|
|
10
4
|
import { ref, createRef } from "lit/directives/ref.js";
|
|
11
5
|
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
|
|
17
|
-
export interface FocusContext {
|
|
18
|
-
focusedElement: HTMLElement | null;
|
|
19
|
-
}
|
|
20
|
-
export const focusContext = createContext<FocusContext>(Symbol("focusContext"));
|
|
21
|
-
|
|
22
|
-
export const focusedElement = createContext<HTMLElement | undefined>(
|
|
23
|
-
Symbol("focusedElement"),
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
export const fetchContext = createContext<typeof fetch>(Symbol("fetchContext"));
|
|
27
|
-
|
|
28
|
-
export const apiHostContext = createContext<string>(Symbol("apiHostContext"));
|
|
6
|
+
import { deepGetTemporalElements } from "../elements/EFTemporal.ts";
|
|
7
|
+
import { TWMixin } from "./TWMixin.ts";
|
|
8
|
+
import { shallowGetTimegroups } from "../elements/EFTimegroup.ts";
|
|
9
|
+
import { ContextMixin } from "./ContextMixin.ts";
|
|
29
10
|
|
|
30
11
|
@customElement("ef-workbench")
|
|
31
|
-
export class EFWorkbench extends TWMixin(LitElement) {
|
|
12
|
+
export class EFWorkbench extends ContextMixin(TWMixin(LitElement)) {
|
|
32
13
|
static styles = [
|
|
33
14
|
css`
|
|
34
15
|
:host {
|
|
@@ -38,51 +19,6 @@ export class EFWorkbench extends TWMixin(LitElement) {
|
|
|
38
19
|
}
|
|
39
20
|
`,
|
|
40
21
|
];
|
|
41
|
-
stageRef = createRef<HTMLDivElement>();
|
|
42
|
-
canvasRef = createRef<HTMLSlotElement>();
|
|
43
|
-
|
|
44
|
-
@state()
|
|
45
|
-
stageScale = 1;
|
|
46
|
-
|
|
47
|
-
setStageScale = () => {
|
|
48
|
-
if (this.isConnected && !this.rendering) {
|
|
49
|
-
const canvasElement = this.canvasRef.value;
|
|
50
|
-
const stageElement = this.stageRef.value;
|
|
51
|
-
if (stageElement && canvasElement) {
|
|
52
|
-
// Determine the appropriate scale factor to make the canvas fit into
|
|
53
|
-
// it's parent element.
|
|
54
|
-
const stageWidth = stageElement.clientWidth;
|
|
55
|
-
const stageHeight = stageElement.clientHeight;
|
|
56
|
-
const canvasWidth = canvasElement.clientWidth;
|
|
57
|
-
const canvasHeight = canvasElement.clientHeight;
|
|
58
|
-
const stageRatio = stageWidth / stageHeight;
|
|
59
|
-
const canvasRatio = canvasWidth / canvasHeight;
|
|
60
|
-
if (stageRatio > canvasRatio) {
|
|
61
|
-
const scale = stageHeight / canvasHeight;
|
|
62
|
-
if (this.stageScale !== scale) {
|
|
63
|
-
canvasElement.style.transform = `scale(${scale})`;
|
|
64
|
-
}
|
|
65
|
-
this.stageScale = scale;
|
|
66
|
-
} else {
|
|
67
|
-
const scale = stageWidth / canvasWidth;
|
|
68
|
-
if (this.stageScale !== scale) {
|
|
69
|
-
canvasElement.style.transform = `scale(${scale})`;
|
|
70
|
-
}
|
|
71
|
-
this.stageScale = scale;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
if (this.isConnected) {
|
|
76
|
-
requestAnimationFrame(this.setStageScale);
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
connectedCallback(): void {
|
|
81
|
-
super.connectedCallback();
|
|
82
|
-
// Preferrably we would use a resizeObserver, but it is difficult to get the first resize
|
|
83
|
-
// timed correctl. So we use requestAnimationFrame as a stop-gap.
|
|
84
|
-
requestAnimationFrame(this.setStageScale);
|
|
85
|
-
}
|
|
86
22
|
|
|
87
23
|
disconnectedCallback(): void {
|
|
88
24
|
super.disconnectedCallback();
|
|
@@ -93,40 +29,6 @@ export class EFWorkbench extends TWMixin(LitElement) {
|
|
|
93
29
|
event.preventDefault();
|
|
94
30
|
}
|
|
95
31
|
|
|
96
|
-
@provide({ context: focusContext })
|
|
97
|
-
focusContext = this as FocusContext;
|
|
98
|
-
|
|
99
|
-
@provide({ context: focusedElement })
|
|
100
|
-
@state()
|
|
101
|
-
focusedElement?: HTMLElement;
|
|
102
|
-
|
|
103
|
-
@provide({ context: fetchContext })
|
|
104
|
-
fetch = (path: URL | RequestInfo, init: RequestInit = {}) => {
|
|
105
|
-
init.headers ||= {};
|
|
106
|
-
Object.assign(init.headers, {
|
|
107
|
-
"Content-Type": "application/json",
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
const bearerToken = this.apiToken;
|
|
111
|
-
if (bearerToken) {
|
|
112
|
-
Object.assign(init.headers, {
|
|
113
|
-
Authorization: `Bearer ${bearerToken}`,
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return fetch(path, init);
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
@property({ type: String })
|
|
121
|
-
apiToken?: string;
|
|
122
|
-
|
|
123
|
-
@provide({ context: apiHostContext })
|
|
124
|
-
@property({ type: String })
|
|
125
|
-
apiHost = "";
|
|
126
|
-
|
|
127
|
-
@property({ type: Boolean })
|
|
128
|
-
rendering = false;
|
|
129
|
-
|
|
130
32
|
focusOverlay = createRef<HTMLDivElement>();
|
|
131
33
|
|
|
132
34
|
update(
|
|
@@ -215,7 +117,7 @@ export class EFWorkbench extends TWMixin(LitElement) {
|
|
|
215
117
|
|
|
216
118
|
for (let i = 0; i < frameCount; i++) {
|
|
217
119
|
firstGroup.currentTimeMs = i * stepDurationMs;
|
|
218
|
-
await
|
|
120
|
+
await new Promise<void>(queueMicrotask);
|
|
219
121
|
const busyTasks = temporals
|
|
220
122
|
.filter((temporal) => temporal.frameTask.status < TaskStatus.COMPLETE)
|
|
221
123
|
.map((temporal) => temporal.frameTask);
|
package/src/gui/TWMixin.ts
CHANGED
|
@@ -2,8 +2,11 @@ import type { LitElement } from "lit";
|
|
|
2
2
|
// @ts-expect-error cannot figure out how to declare this module as a string
|
|
3
3
|
import twStyle from "./TWMixin.css?inline";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
let twSheet: CSSStyleSheet | null = null;
|
|
6
|
+
if (typeof window !== "undefined") {
|
|
7
|
+
twSheet = new CSSStyleSheet();
|
|
8
|
+
twSheet.replaceSync(twStyle);
|
|
9
|
+
}
|
|
7
10
|
export function TWMixin<T extends new (...args: any[]) => LitElement>(Base: T) {
|
|
8
11
|
class TWElement extends Base {
|
|
9
12
|
createRenderRoot() {
|
|
@@ -13,7 +16,11 @@ export function TWMixin<T extends new (...args: any[]) => LitElement>(Base: T) {
|
|
|
13
16
|
"TWMixin can only be applied to elements with shadow roots",
|
|
14
17
|
);
|
|
15
18
|
}
|
|
16
|
-
|
|
19
|
+
if (!twSheet) {
|
|
20
|
+
throw new Error(
|
|
21
|
+
"twSheet not found. Probable cause: CSSStyleSheet not supported in this environment",
|
|
22
|
+
);
|
|
23
|
+
}
|
|
17
24
|
if (renderRoot?.adoptedStyleSheets) {
|
|
18
25
|
renderRoot.adoptedStyleSheets = [
|
|
19
26
|
twSheet,
|
package/CHANGELOG.md
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# @editframe/elements
|
|
2
|
-
|
|
3
|
-
## 0.7.0-beta.9
|
|
4
|
-
|
|
5
|
-
### Patch Changes
|
|
6
|
-
|
|
7
|
-
- [#33](https://github.com/editframe/elements/pull/33) [`17c4452`](https://github.com/editframe/elements/commit/17c4452f679b042ac0accd9bf520728455e8cc2c) Thanks [@IliasHad](https://github.com/IliasHad)! - resolve lit global package issue
|
package/postcss.config.cjs
DELETED
package/src/EF_INTERACTIVE.ts
DELETED
package/src/elements.css
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
@tailwind base;
|
|
2
|
-
@tailwind components;
|
|
3
|
-
@tailwind utilities;
|
|
4
|
-
|
|
5
|
-
html {
|
|
6
|
-
@apply h-full w-full;
|
|
7
|
-
}
|
|
8
|
-
body {
|
|
9
|
-
@apply h-full w-full bg-black;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
:root {
|
|
13
|
-
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
|
14
|
-
line-height: 1.5;
|
|
15
|
-
font-weight: 400;
|
|
16
|
-
|
|
17
|
-
font-synthesis: none;
|
|
18
|
-
text-rendering: optimizeLegibility;
|
|
19
|
-
-webkit-font-smoothing: antialiased;
|
|
20
|
-
-moz-osx-font-smoothing: grayscale;
|
|
21
|
-
-webkit-text-size-adjust: 100%;
|
|
22
|
-
}
|
package/src/index.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import "./elements.css";
|
|
2
|
-
|
|
3
|
-
import "./elements/EFTimegroup";
|
|
4
|
-
export { EFTimegroup } from "./elements/EFTimegroup";
|
|
5
|
-
|
|
6
|
-
import "./elements/EFImage";
|
|
7
|
-
export { EFImage } from "./elements/EFImage";
|
|
8
|
-
|
|
9
|
-
import "./elements/EFMedia";
|
|
10
|
-
export type { EFMedia } from "./elements/EFMedia";
|
|
11
|
-
|
|
12
|
-
import "./elements/EFAudio";
|
|
13
|
-
export { EFAudio } from "./elements/EFAudio";
|
|
14
|
-
|
|
15
|
-
import "./elements/EFVideo";
|
|
16
|
-
export { EFVideo } from "./elements/EFVideo";
|
|
17
|
-
|
|
18
|
-
import "./elements/EFCaptions";
|
|
19
|
-
export { EFCaptions, EFCaptionsActiveWord } from "./elements/EFCaptions";
|
|
20
|
-
|
|
21
|
-
import "./elements/EFWaveform";
|
|
22
|
-
export { EFWaveform } from "./elements/EFWaveform";
|
|
23
|
-
|
|
24
|
-
import "./gui/EFWorkbench";
|
|
25
|
-
export { EFWorkbench } from "./gui/EFWorkbench";
|
|
26
|
-
|
|
27
|
-
import "./gui/EFFilmstrip";
|
|
28
|
-
export { EFFilmstrip } from "./gui/EFFilmstrip";
|
|
29
|
-
|
|
30
|
-
// @ts-expect-error
|
|
31
|
-
window.EF_REGISTERED = true;
|
|
32
|
-
|
|
33
|
-
import "./EF_FRAMEGEN";
|
package/tailwind.config.ts
DELETED
package/tsconfig.json
DELETED
package/vite.config.ts
DELETED