@editframe/react 0.30.2-beta.0 → 0.31.0-beta.1
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/_virtual/rolldown_runtime.js +31 -0
- package/dist/components/TimelineRoot.d.ts +41 -0
- package/dist/components/TimelineRoot.js +78 -0
- package/dist/components/TimelineRoot.js.map +1 -0
- package/dist/elements/PanZoom.d.ts +10 -0
- package/dist/elements/PanZoom.js +16 -0
- package/dist/elements/PanZoom.js.map +1 -0
- package/dist/gui/EFTransformHandles.d.ts +11 -0
- package/dist/gui/EFTransformHandles.js +18 -0
- package/dist/gui/EFTransformHandles.js.map +1 -0
- package/dist/gui/OverlayItem.d.ts +16 -0
- package/dist/gui/OverlayItem.js +16 -0
- package/dist/gui/OverlayItem.js.map +1 -0
- package/dist/gui/OverlayLayer.d.ts +8 -0
- package/dist/gui/OverlayLayer.js +15 -0
- package/dist/gui/OverlayLayer.js.map +1 -0
- package/dist/gui/Scrubber.d.ts +15 -3
- package/dist/gui/Scrubber.js +27 -3
- package/dist/gui/Scrubber.js.map +1 -1
- package/dist/gui/TimelineRuler.d.ts +16 -0
- package/dist/gui/TimelineRuler.js +33 -0
- package/dist/gui/TimelineRuler.js.map +1 -0
- package/dist/hooks/usePanZoomTransform.d.ts +25 -0
- package/dist/hooks/usePanZoomTransform.js +49 -0
- package/dist/hooks/usePanZoomTransform.js.map +1 -0
- package/dist/index.d.ts +10 -2
- package/dist/index.js +9 -1
- package/dist/node_modules/react-dom/cjs/react-dom.development.js +16845 -0
- package/dist/node_modules/react-dom/cjs/react-dom.development.js.map +1 -0
- package/dist/node_modules/react-dom/client.js +22 -0
- package/dist/node_modules/react-dom/client.js.map +1 -0
- package/dist/node_modules/react-dom/index.js +13 -0
- package/dist/node_modules/react-dom/index.js.map +1 -0
- package/dist/node_modules/scheduler/cjs/scheduler.development.js +391 -0
- package/dist/node_modules/scheduler/cjs/scheduler.development.js.map +1 -0
- package/dist/node_modules/scheduler/index.js +13 -0
- package/dist/node_modules/scheduler/index.js.map +1 -0
- package/package.json +3 -3
- package/types.json +1 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region rolldown:runtime
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __commonJS = (cb, mod) => function() {
|
|
9
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
13
|
+
key = keys[i];
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
15
|
+
get: ((k) => from[k]).bind(null, key),
|
|
16
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
22
|
+
value: mod,
|
|
23
|
+
enumerable: true
|
|
24
|
+
}) : target, mod));
|
|
25
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { get: (a, b) => (typeof require !== "undefined" ? require : a)[b] }) : x)(function(x) {
|
|
26
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
27
|
+
throw Error("Calling `require` for \"" + x + "\" in an environment that doesn't expose the `require` function.");
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
//#endregion
|
|
31
|
+
export { __commonJS, __require, __toESM };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as React$1 from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/components/TimelineRoot.d.ts
|
|
4
|
+
interface TimelineRootProps {
|
|
5
|
+
/** Unique identifier for the root timegroup */
|
|
6
|
+
id: string;
|
|
7
|
+
/** React component that renders the timeline content (must include a Timegroup at root) */
|
|
8
|
+
component: React$1.ComponentType;
|
|
9
|
+
/** Optional CSS class name for the container */
|
|
10
|
+
className?: string;
|
|
11
|
+
/** Optional inline styles for the container */
|
|
12
|
+
style?: React$1.CSSProperties;
|
|
13
|
+
/** Optional children to render alongside the component (e.g., Configuration wrapper) */
|
|
14
|
+
children?: React$1.ReactNode;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* TimelineRoot - Factory wrapper for React-based timelines.
|
|
18
|
+
*
|
|
19
|
+
* This component enables proper clone rendering by providing a factory pattern
|
|
20
|
+
* for creating fully functional timeline instances. When render clones are created
|
|
21
|
+
* (for exports, thumbnails, etc.), the initializer re-renders the React component
|
|
22
|
+
* tree to ensure all JavaScript state and React lifecycle methods work correctly.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* const MyTimelineContent = () => (
|
|
27
|
+
* <Timegroup mode="sequence">
|
|
28
|
+
* <MyScenes />
|
|
29
|
+
* </Timegroup>
|
|
30
|
+
* );
|
|
31
|
+
*
|
|
32
|
+
* // Wrap with Configuration if needed
|
|
33
|
+
* <Configuration apiHost="...">
|
|
34
|
+
* <TimelineRoot id="root" component={MyTimelineContent} />
|
|
35
|
+
* </Configuration>
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
declare const TimelineRoot: React$1.FC<TimelineRootProps>;
|
|
39
|
+
//#endregion
|
|
40
|
+
export { TimelineRoot };
|
|
41
|
+
//# sourceMappingURL=TimelineRoot.d.ts.map
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { __toESM } from "../_virtual/rolldown_runtime.js";
|
|
2
|
+
import { require_react_dom } from "../node_modules/react-dom/index.js";
|
|
3
|
+
import { require_client } from "../node_modules/react-dom/client.js";
|
|
4
|
+
import { useEffect, useRef } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
|
|
7
|
+
//#region src/components/TimelineRoot.tsx
|
|
8
|
+
var import_client = /* @__PURE__ */ __toESM(require_client());
|
|
9
|
+
var import_react_dom = /* @__PURE__ */ __toESM(require_react_dom());
|
|
10
|
+
/**
|
|
11
|
+
* TimelineRoot - Factory wrapper for React-based timelines.
|
|
12
|
+
*
|
|
13
|
+
* This component enables proper clone rendering by providing a factory pattern
|
|
14
|
+
* for creating fully functional timeline instances. When render clones are created
|
|
15
|
+
* (for exports, thumbnails, etc.), the initializer re-renders the React component
|
|
16
|
+
* tree to ensure all JavaScript state and React lifecycle methods work correctly.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* const MyTimelineContent = () => (
|
|
21
|
+
* <Timegroup mode="sequence">
|
|
22
|
+
* <MyScenes />
|
|
23
|
+
* </Timegroup>
|
|
24
|
+
* );
|
|
25
|
+
*
|
|
26
|
+
* // Wrap with Configuration if needed
|
|
27
|
+
* <Configuration apiHost="...">
|
|
28
|
+
* <TimelineRoot id="root" component={MyTimelineContent} />
|
|
29
|
+
* </Configuration>
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
const TimelineRoot = ({ id, component: Component, className, style, children }) => {
|
|
33
|
+
const containerRef = useRef(null);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const container = containerRef.current;
|
|
36
|
+
if (!container) return;
|
|
37
|
+
const timegroup = container.querySelector("ef-timegroup");
|
|
38
|
+
if (!timegroup) {
|
|
39
|
+
console.warn("[TimelineRoot] No ef-timegroup found in component. Ensure your component renders a Timegroup.");
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
timegroup.id = id;
|
|
43
|
+
timegroup.initializer = (cloneEl) => {
|
|
44
|
+
const cloneContainer = cloneEl.parentElement;
|
|
45
|
+
if (!cloneContainer) {
|
|
46
|
+
console.error("[TimelineRoot] No parent container for clone");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
cloneEl.remove();
|
|
50
|
+
const root = import_client.createRoot(cloneContainer);
|
|
51
|
+
(0, import_react_dom.flushSync)(() => {
|
|
52
|
+
root.render(/* @__PURE__ */ jsx(Component, {}));
|
|
53
|
+
});
|
|
54
|
+
const newTimegroup = cloneContainer.querySelector("ef-timegroup");
|
|
55
|
+
if (newTimegroup) newTimegroup._reactRoot = root;
|
|
56
|
+
else {
|
|
57
|
+
cloneContainer._reactRoot = root;
|
|
58
|
+
console.error("[TimelineRoot] No ef-timegroup found after React render");
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
return () => {
|
|
62
|
+
timegroup.initializer = void 0;
|
|
63
|
+
};
|
|
64
|
+
}, [id, Component]);
|
|
65
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
66
|
+
ref: containerRef,
|
|
67
|
+
className,
|
|
68
|
+
style: {
|
|
69
|
+
display: "contents",
|
|
70
|
+
...style
|
|
71
|
+
},
|
|
72
|
+
children: [children, /* @__PURE__ */ jsx(Component, {})]
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
//#endregion
|
|
77
|
+
export { TimelineRoot };
|
|
78
|
+
//# sourceMappingURL=TimelineRoot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimelineRoot.js","names":["TimelineRoot: React.FC<TimelineRootProps>"],"sources":["../../src/components/TimelineRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as ReactDOM from 'react-dom/client';\nimport { flushSync } from 'react-dom';\nimport { useEffect, useRef } from 'react';\nimport type { EFTimegroup } from '@editframe/elements';\n\ninterface TimelineRootProps {\n /** Unique identifier for the root timegroup */\n id: string;\n /** React component that renders the timeline content (must include a Timegroup at root) */\n component: React.ComponentType;\n /** Optional CSS class name for the container */\n className?: string;\n /** Optional inline styles for the container */\n style?: React.CSSProperties;\n /** Optional children to render alongside the component (e.g., Configuration wrapper) */\n children?: React.ReactNode;\n}\n\n/**\n * TimelineRoot - Factory wrapper for React-based timelines.\n * \n * This component enables proper clone rendering by providing a factory pattern\n * for creating fully functional timeline instances. When render clones are created\n * (for exports, thumbnails, etc.), the initializer re-renders the React component\n * tree to ensure all JavaScript state and React lifecycle methods work correctly.\n * \n * @example\n * ```tsx\n * const MyTimelineContent = () => (\n * <Timegroup mode=\"sequence\">\n * <MyScenes />\n * </Timegroup>\n * );\n * \n * // Wrap with Configuration if needed\n * <Configuration apiHost=\"...\">\n * <TimelineRoot id=\"root\" component={MyTimelineContent} />\n * </Configuration>\n * ```\n */\nexport const TimelineRoot: React.FC<TimelineRootProps> = ({\n id,\n component: Component,\n className,\n style,\n children,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n \n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n \n // Find the root timegroup rendered by Component\n const timegroup = container.querySelector('ef-timegroup') as EFTimegroup;\n if (!timegroup) {\n console.warn('[TimelineRoot] No ef-timegroup found in component. Ensure your component renders a Timegroup.');\n return;\n }\n \n // Ensure the timegroup has the specified ID\n timegroup.id = id;\n \n // Register factory initializer - MUST be synchronous\n // Uses flushSync to force React to render synchronously\n timegroup.initializer = (cloneEl: EFTimegroup) => {\n const cloneContainer = cloneEl.parentElement;\n if (!cloneContainer) {\n console.error('[TimelineRoot] No parent container for clone');\n return;\n }\n \n // Remove the cloned DOM - React will render a fresh component tree\n // The cloned DOM doesn't have React bindings, so we need to replace it\n cloneEl.remove();\n \n // Create React root for the clone container\n const root = ReactDOM.createRoot(cloneContainer);\n \n // Use flushSync to render synchronously (required by initializer contract)\n // This ensures the component tree is fully rendered before initializer returns\n flushSync(() => {\n root.render(<Component />);\n });\n \n // Find the new timegroup rendered by React and store the React root on it\n // This is needed for cleanup in createRenderClone\n const newTimegroup = cloneContainer.querySelector('ef-timegroup');\n if (newTimegroup) {\n (newTimegroup as any)._reactRoot = root;\n } else {\n // Store root on container so we can still clean up\n (cloneContainer as any)._reactRoot = root;\n console.error('[TimelineRoot] No ef-timegroup found after React render');\n }\n };\n \n // Cleanup: remove initializer when component unmounts\n return () => {\n timegroup.initializer = undefined;\n };\n }, [id, Component]);\n \n return (\n <div \n ref={containerRef} \n className={className} \n style={{ display: 'contents', ...style }}\n >\n {children}\n <Component />\n </div>\n );\n};\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA,MAAaA,gBAA6C,EACxD,IACA,WAAW,WACX,WACA,OACA,eACI;CACJ,MAAM,eAAe,OAAuB,KAAK;AAEjD,iBAAgB;EACd,MAAM,YAAY,aAAa;AAC/B,MAAI,CAAC,UAAW;EAGhB,MAAM,YAAY,UAAU,cAAc,eAAe;AACzD,MAAI,CAAC,WAAW;AACd,WAAQ,KAAK,gGAAgG;AAC7G;;AAIF,YAAU,KAAK;AAIf,YAAU,eAAe,YAAyB;GAChD,MAAM,iBAAiB,QAAQ;AAC/B,OAAI,CAAC,gBAAgB;AACnB,YAAQ,MAAM,+CAA+C;AAC7D;;AAKF,WAAQ,QAAQ;GAGhB,MAAM,qBAAgB,WAAW,eAAe;AAIhD,yCAAgB;AACd,SAAK,OAAO,oBAAC,cAAY,CAAC;KAC1B;GAIF,MAAM,eAAe,eAAe,cAAc,eAAe;AACjE,OAAI,aACF,CAAC,aAAqB,aAAa;QAC9B;AAEL,IAAC,eAAuB,aAAa;AACrC,YAAQ,MAAM,0DAA0D;;;AAK5E,eAAa;AACX,aAAU,cAAc;;IAEzB,CAAC,IAAI,UAAU,CAAC;AAEnB,QACE,qBAAC;EACC,KAAK;EACM;EACX,OAAO;GAAE,SAAS;GAAY,GAAG;GAAO;aAEvC,UACD,oBAAC,cAAY;GACT"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ReactWebComponent } from "../hooks/create-element.js";
|
|
2
|
+
import { EFPanZoom } from "@editframe/elements";
|
|
3
|
+
|
|
4
|
+
//#region src/elements/PanZoom.d.ts
|
|
5
|
+
declare const PanZoom: ReactWebComponent<EFPanZoom, {
|
|
6
|
+
onTransformChanged: string;
|
|
7
|
+
}>;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { PanZoom };
|
|
10
|
+
//# sourceMappingURL=PanZoom.d.ts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createComponent } from "../hooks/create-element.js";
|
|
2
|
+
import { EFPanZoom } from "@editframe/elements";
|
|
3
|
+
import React from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/elements/PanZoom.ts
|
|
6
|
+
const PanZoom = createComponent({
|
|
7
|
+
tagName: "ef-pan-zoom",
|
|
8
|
+
elementClass: EFPanZoom,
|
|
9
|
+
react: React,
|
|
10
|
+
displayName: "PanZoom",
|
|
11
|
+
events: { onTransformChanged: "transform-changed" }
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { PanZoom };
|
|
16
|
+
//# sourceMappingURL=PanZoom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanZoom.js","names":["EFPanZoomElement"],"sources":["../../src/elements/PanZoom.ts"],"sourcesContent":["import { EFPanZoom as EFPanZoomElement } from \"@editframe/elements\";\nimport React from \"react\";\nimport { createComponent } from \"../hooks/create-element\";\n\nexport const PanZoom = createComponent({\n tagName: \"ef-pan-zoom\",\n elementClass: EFPanZoomElement,\n react: React,\n displayName: \"PanZoom\",\n events: {\n onTransformChanged: \"transform-changed\",\n },\n});\n"],"mappings":";;;;;AAIA,MAAa,UAAU,gBAAgB;CACrC,SAAS;CACT,cAAcA;CACd,OAAO;CACP,aAAa;CACb,QAAQ,EACN,oBAAoB,qBACrB;CACF,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ReactWebComponent } from "../hooks/create-element.js";
|
|
2
|
+
import { EFTransformHandles } from "@editframe/elements";
|
|
3
|
+
|
|
4
|
+
//#region src/gui/EFTransformHandles.d.ts
|
|
5
|
+
declare const TransformHandles: ReactWebComponent<EFTransformHandles, {
|
|
6
|
+
onBoundsChange: string;
|
|
7
|
+
onRotationChange: string;
|
|
8
|
+
}>;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { TransformHandles };
|
|
11
|
+
//# sourceMappingURL=EFTransformHandles.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createComponent } from "../hooks/create-element.js";
|
|
2
|
+
import { EFTransformHandles } from "@editframe/elements";
|
|
3
|
+
import React from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/gui/EFTransformHandles.ts
|
|
6
|
+
const TransformHandles = createComponent({
|
|
7
|
+
tagName: "ef-transform-handles",
|
|
8
|
+
elementClass: EFTransformHandles,
|
|
9
|
+
react: React,
|
|
10
|
+
events: {
|
|
11
|
+
onBoundsChange: "bounds-change",
|
|
12
|
+
onRotationChange: "rotation-change"
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { TransformHandles };
|
|
18
|
+
//# sourceMappingURL=EFTransformHandles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EFTransformHandles.js","names":["EFTransformHandlesElement"],"sources":["../../src/gui/EFTransformHandles.ts"],"sourcesContent":["import { EFTransformHandles as EFTransformHandlesElement } from \"@editframe/elements\";\nimport React from \"react\";\nimport { createComponent } from \"../hooks/create-element\";\n\nexport const TransformHandles = createComponent({\n tagName: \"ef-transform-handles\",\n elementClass: EFTransformHandlesElement,\n react: React,\n events: {\n onBoundsChange: \"bounds-change\",\n onRotationChange: \"rotation-change\",\n },\n});\n"],"mappings":";;;;;AAIA,MAAa,mBAAmB,gBAAgB;CAC9C,SAAS;CACT,cAAcA;CACd,OAAO;CACP,QAAQ;EACN,gBAAgB;EAChB,kBAAkB;EACnB;CACF,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { EFOverlayItem } from "@editframe/elements";
|
|
2
|
+
import React from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/gui/OverlayItem.d.ts
|
|
5
|
+
interface OverlayItemProps {
|
|
6
|
+
/** Element ID - automatically resolves to [data-element-id] or [data-timegroup-id] selector */
|
|
7
|
+
elementId?: string;
|
|
8
|
+
/** Target element or selector - use for custom targeting when elementId doesn't work */
|
|
9
|
+
target?: HTMLElement | string;
|
|
10
|
+
/** Called when position changes. Receives CustomEvent with OverlayItemPosition as detail. */
|
|
11
|
+
onPositionChanged?: (e: Event) => void;
|
|
12
|
+
}
|
|
13
|
+
declare const OverlayItem: React.ForwardRefExoticComponent<OverlayItemProps & React.RefAttributes<EFOverlayItem>>;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { OverlayItem, OverlayItemProps };
|
|
16
|
+
//# sourceMappingURL=OverlayItem.d.ts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createComponent } from "../hooks/create-element.js";
|
|
2
|
+
import { EFOverlayItem } from "@editframe/elements";
|
|
3
|
+
import React from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/gui/OverlayItem.tsx
|
|
6
|
+
const OverlayItem = createComponent({
|
|
7
|
+
tagName: "ef-overlay-item",
|
|
8
|
+
elementClass: EFOverlayItem,
|
|
9
|
+
react: React,
|
|
10
|
+
displayName: "OverlayItem",
|
|
11
|
+
events: { onPositionChanged: "position-changed" }
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { OverlayItem };
|
|
16
|
+
//# sourceMappingURL=OverlayItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OverlayItem.js","names":["EFOverlayItemElement"],"sources":["../../src/gui/OverlayItem.tsx"],"sourcesContent":["import {\n EFOverlayItem as EFOverlayItemElement,\n} from \"@editframe/elements\";\nimport React from \"react\";\nimport { createComponent } from \"../hooks/create-element\";\n\nexport interface OverlayItemProps {\n /** Element ID - automatically resolves to [data-element-id] or [data-timegroup-id] selector */\n elementId?: string;\n /** Target element or selector - use for custom targeting when elementId doesn't work */\n target?: HTMLElement | string;\n /** Called when position changes. Receives CustomEvent with OverlayItemPosition as detail. */\n onPositionChanged?: (e: Event) => void;\n}\n\nexport const OverlayItem = createComponent<\n EFOverlayItemElement,\n { onPositionChanged: \"position-changed\" }\n>({\n tagName: \"ef-overlay-item\",\n elementClass: EFOverlayItemElement,\n react: React,\n displayName: \"OverlayItem\",\n events: {\n onPositionChanged: \"position-changed\",\n },\n}) as React.ForwardRefExoticComponent<OverlayItemProps & React.RefAttributes<EFOverlayItemElement>>;\n"],"mappings":";;;;;AAeA,MAAa,cAAc,gBAGzB;CACA,SAAS;CACT,cAAcA;CACd,OAAO;CACP,aAAa;CACb,QAAQ,EACN,mBAAmB,oBACpB;CACF,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReactWebComponent } from "../hooks/create-element.js";
|
|
2
|
+
import { EFOverlayLayer } from "@editframe/elements";
|
|
3
|
+
|
|
4
|
+
//#region src/gui/OverlayLayer.d.ts
|
|
5
|
+
declare const OverlayLayer: ReactWebComponent<EFOverlayLayer, {}>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { OverlayLayer };
|
|
8
|
+
//# sourceMappingURL=OverlayLayer.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createComponent } from "../hooks/create-element.js";
|
|
2
|
+
import { EFOverlayLayer } from "@editframe/elements";
|
|
3
|
+
import React from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/gui/OverlayLayer.tsx
|
|
6
|
+
const OverlayLayer = createComponent({
|
|
7
|
+
tagName: "ef-overlay-layer",
|
|
8
|
+
elementClass: EFOverlayLayer,
|
|
9
|
+
react: React,
|
|
10
|
+
displayName: "OverlayLayer"
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
export { OverlayLayer };
|
|
15
|
+
//# sourceMappingURL=OverlayLayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OverlayLayer.js","names":["EFOverlayLayerElement"],"sources":["../../src/gui/OverlayLayer.tsx"],"sourcesContent":["import { EFOverlayLayer as EFOverlayLayerElement } from \"@editframe/elements\";\nimport React from \"react\";\nimport { createComponent } from \"../hooks/create-element\";\n\n// OverlayLayer discovers PanZoom automatically via:\n// - Lit context (if PanZoom is ancestor)\n// - Direct DOM query (if PanZoom is sibling)\n// No React props needed for coordination!\n\nexport const OverlayLayer = createComponent<EFOverlayLayerElement, {}>({\n tagName: \"ef-overlay-layer\",\n elementClass: EFOverlayLayerElement,\n react: React,\n displayName: \"OverlayLayer\",\n});\n"],"mappings":";;;;;AASA,MAAa,eAAe,gBAA2C;CACrE,SAAS;CACT,cAAcA;CACd,OAAO;CACP,aAAa;CACd,CAAC"}
|
package/dist/gui/Scrubber.d.ts
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
|
-
import { ReactWebComponent } from "../hooks/create-element.js";
|
|
2
1
|
import { EFScrubber } from "@editframe/elements";
|
|
2
|
+
import React from "react";
|
|
3
3
|
|
|
4
4
|
//#region src/gui/Scrubber.d.ts
|
|
5
|
-
|
|
5
|
+
interface ScrubberProps {
|
|
6
|
+
orientation?: "horizontal" | "vertical";
|
|
7
|
+
currentTimeMs?: number;
|
|
8
|
+
durationMs?: number;
|
|
9
|
+
zoomScale?: number;
|
|
10
|
+
containerWidth?: number;
|
|
11
|
+
fps?: number;
|
|
12
|
+
rawScrubTimeMs?: number | null;
|
|
13
|
+
scrollContainerRef?: React.RefObject<HTMLElement>;
|
|
14
|
+
isScrubbingRef?: React.MutableRefObject<boolean>;
|
|
15
|
+
onSeek?: (time: number) => void;
|
|
16
|
+
}
|
|
17
|
+
declare const Scrubber: React.ForwardRefExoticComponent<ScrubberProps & React.RefAttributes<EFScrubber>>;
|
|
6
18
|
//#endregion
|
|
7
|
-
export { Scrubber };
|
|
19
|
+
export { Scrubber, ScrubberProps };
|
|
8
20
|
//# sourceMappingURL=Scrubber.d.ts.map
|
package/dist/gui/Scrubber.js
CHANGED
|
@@ -1,13 +1,37 @@
|
|
|
1
1
|
import { createComponent } from "../hooks/create-element.js";
|
|
2
2
|
import { EFScrubber } from "@editframe/elements";
|
|
3
3
|
import React from "react";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
5
|
|
|
5
|
-
//#region src/gui/Scrubber.
|
|
6
|
-
const
|
|
6
|
+
//#region src/gui/Scrubber.tsx
|
|
7
|
+
const BaseScrubber = createComponent({
|
|
7
8
|
tagName: "ef-scrubber",
|
|
8
9
|
elementClass: EFScrubber,
|
|
9
|
-
react: React
|
|
10
|
+
react: React,
|
|
11
|
+
displayName: "Scrubber",
|
|
12
|
+
events: { onSeek: "seek" }
|
|
10
13
|
});
|
|
14
|
+
const Scrubber = React.forwardRef((props, ref) => {
|
|
15
|
+
const { scrollContainerRef, isScrubbingRef,...restProps } = props;
|
|
16
|
+
const elementRef = React.useRef(null);
|
|
17
|
+
React.useLayoutEffect(() => {
|
|
18
|
+
if (elementRef.current) {
|
|
19
|
+
if (scrollContainerRef?.current) elementRef.current.scrollContainerRef = scrollContainerRef;
|
|
20
|
+
else elementRef.current.scrollContainerRef = void 0;
|
|
21
|
+
if (isScrubbingRef) elementRef.current.isScrubbingRef = isScrubbingRef;
|
|
22
|
+
else elementRef.current.isScrubbingRef = void 0;
|
|
23
|
+
}
|
|
24
|
+
}, [scrollContainerRef?.current, isScrubbingRef]);
|
|
25
|
+
return /* @__PURE__ */ jsx(BaseScrubber, {
|
|
26
|
+
...restProps,
|
|
27
|
+
ref: (node) => {
|
|
28
|
+
elementRef.current = node;
|
|
29
|
+
if (typeof ref === "function") ref(node);
|
|
30
|
+
else if (ref) ref.current = node;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
Scrubber.displayName = "Scrubber";
|
|
11
35
|
|
|
12
36
|
//#endregion
|
|
13
37
|
export { Scrubber };
|
package/dist/gui/Scrubber.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Scrubber.js","names":[
|
|
1
|
+
{"version":3,"file":"Scrubber.js","names":[],"sources":["../../src/gui/Scrubber.tsx"],"sourcesContent":["import { EFScrubber } from \"@editframe/elements\";\nimport React from \"react\";\nimport { createComponent } from \"../hooks/create-element\";\n\nexport interface ScrubberProps {\n orientation?: \"horizontal\" | \"vertical\";\n currentTimeMs?: number;\n durationMs?: number;\n zoomScale?: number;\n containerWidth?: number;\n fps?: number;\n rawScrubTimeMs?: number | null;\n scrollContainerRef?: React.RefObject<HTMLElement>;\n isScrubbingRef?: React.MutableRefObject<boolean>;\n onSeek?: (time: number) => void;\n}\n\nconst BaseScrubber = createComponent<\n EFScrubber,\n { onSeek: \"seek\" }\n>({\n tagName: \"ef-scrubber\",\n elementClass: EFScrubber,\n react: React,\n displayName: \"Scrubber\",\n events: {\n onSeek: \"seek\",\n },\n}) as React.ForwardRefExoticComponent<ScrubberProps & React.RefAttributes<EFScrubber>>;\n\nexport const Scrubber = React.forwardRef<EFScrubber, ScrubberProps>(\n (props, ref) => {\n const { scrollContainerRef, isScrubbingRef, ...restProps } = props;\n const elementRef = React.useRef<EFScrubber | null>(null);\n\n React.useLayoutEffect(() => {\n if (elementRef.current) {\n if (scrollContainerRef?.current) {\n elementRef.current.scrollContainerRef = scrollContainerRef;\n } else {\n elementRef.current.scrollContainerRef = undefined;\n }\n if (isScrubbingRef) {\n elementRef.current.isScrubbingRef = isScrubbingRef;\n } else {\n elementRef.current.isScrubbingRef = undefined;\n }\n }\n }, [scrollContainerRef?.current, isScrubbingRef]);\n\n return (\n <BaseScrubber\n {...restProps}\n ref={(node) => {\n elementRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n />\n );\n },\n);\n\nScrubber.displayName = \"Scrubber\";\n"],"mappings":";;;;;;AAiBA,MAAM,eAAe,gBAGnB;CACA,SAAS;CACT,cAAc;CACd,OAAO;CACP,aAAa;CACb,QAAQ,EACN,QAAQ,QACT;CACF,CAAC;AAEF,MAAa,WAAW,MAAM,YAC3B,OAAO,QAAQ;CACd,MAAM,EAAE,oBAAoB,eAAgB,GAAG,cAAc;CAC7D,MAAM,aAAa,MAAM,OAA0B,KAAK;AAExD,OAAM,sBAAsB;AAC1B,MAAI,WAAW,SAAS;AACtB,OAAI,oBAAoB,QACtB,YAAW,QAAQ,qBAAqB;OAExC,YAAW,QAAQ,qBAAqB;AAE1C,OAAI,eACF,YAAW,QAAQ,iBAAiB;OAEpC,YAAW,QAAQ,iBAAiB;;IAGvC,CAAC,oBAAoB,SAAS,eAAe,CAAC;AAEjD,QACE,oBAAC;EACC,GAAI;EACJ,MAAM,SAAS;AACb,cAAW,UAAU;AACrB,OAAI,OAAO,QAAQ,WAAY,KAAI,KAAK;YAC/B,IAAK,KAAI,UAAU;;GAE9B;EAGP;AAED,SAAS,cAAc"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { EFTimelineRuler } from "@editframe/elements";
|
|
2
|
+
import React from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/gui/TimelineRuler.d.ts
|
|
5
|
+
interface TimelineRulerProps {
|
|
6
|
+
durationMs?: number;
|
|
7
|
+
zoomScale?: number;
|
|
8
|
+
containerWidth?: number;
|
|
9
|
+
fps?: number;
|
|
10
|
+
scrollContainerSelector?: string;
|
|
11
|
+
scrollContainerRef?: React.RefObject<HTMLElement>;
|
|
12
|
+
}
|
|
13
|
+
declare const TimelineRuler: React.ForwardRefExoticComponent<TimelineRulerProps & React.RefAttributes<EFTimelineRuler>>;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { TimelineRuler };
|
|
16
|
+
//# sourceMappingURL=TimelineRuler.d.ts.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { createComponent } from "../hooks/create-element.js";
|
|
2
|
+
import { EFTimelineRuler } from "@editframe/elements";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
|
|
6
|
+
//#region src/gui/TimelineRuler.tsx
|
|
7
|
+
const BaseTimelineRuler = createComponent({
|
|
8
|
+
tagName: "ef-timeline-ruler",
|
|
9
|
+
elementClass: EFTimelineRuler,
|
|
10
|
+
react: React,
|
|
11
|
+
displayName: "TimelineRuler"
|
|
12
|
+
});
|
|
13
|
+
const TimelineRuler = React.forwardRef((props, ref) => {
|
|
14
|
+
const { scrollContainerRef,...restProps } = props;
|
|
15
|
+
const elementRef = React.useRef(null);
|
|
16
|
+
React.useLayoutEffect(() => {
|
|
17
|
+
if (elementRef.current && scrollContainerRef?.current) elementRef.current.scrollContainerElement = scrollContainerRef.current;
|
|
18
|
+
else if (elementRef.current) elementRef.current.scrollContainerElement = null;
|
|
19
|
+
}, [scrollContainerRef?.current]);
|
|
20
|
+
return /* @__PURE__ */ jsx(BaseTimelineRuler, {
|
|
21
|
+
...restProps,
|
|
22
|
+
ref: (node) => {
|
|
23
|
+
elementRef.current = node;
|
|
24
|
+
if (typeof ref === "function") ref(node);
|
|
25
|
+
else if (ref) ref.current = node;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
TimelineRuler.displayName = "TimelineRuler";
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
export { TimelineRuler };
|
|
33
|
+
//# sourceMappingURL=TimelineRuler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimelineRuler.js","names":[],"sources":["../../src/gui/TimelineRuler.tsx"],"sourcesContent":["import { EFTimelineRuler } from \"@editframe/elements\";\nimport React from \"react\";\nimport { createComponent } from \"../hooks/create-element\";\n\nexport interface TimelineRulerProps {\n durationMs?: number;\n zoomScale?: number;\n containerWidth?: number;\n fps?: number;\n scrollContainerSelector?: string;\n scrollContainerRef?: React.RefObject<HTMLElement>;\n}\n\nconst BaseTimelineRuler = createComponent<\n EFTimelineRuler,\n {}\n>({\n tagName: \"ef-timeline-ruler\",\n elementClass: EFTimelineRuler,\n react: React,\n displayName: \"TimelineRuler\",\n}) as React.ForwardRefExoticComponent<TimelineRulerProps & React.RefAttributes<EFTimelineRuler>>;\n\nexport const TimelineRuler = React.forwardRef<\n EFTimelineRuler,\n TimelineRulerProps\n>((props, ref) => {\n const { scrollContainerRef, ...restProps } = props;\n const elementRef = React.useRef<EFTimelineRuler | null>(null);\n\n React.useLayoutEffect(() => {\n if (elementRef.current && scrollContainerRef?.current) {\n (elementRef.current as any).scrollContainerElement = scrollContainerRef.current;\n } else if (elementRef.current) {\n (elementRef.current as any).scrollContainerElement = null;\n }\n }, [scrollContainerRef?.current]);\n\n return (\n <BaseTimelineRuler\n {...(restProps as any)}\n ref={(node) => {\n elementRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n />\n );\n});\n\nTimelineRuler.displayName = \"TimelineRuler\";\n"],"mappings":";;;;;;AAaA,MAAM,oBAAoB,gBAGxB;CACA,SAAS;CACT,cAAc;CACd,OAAO;CACP,aAAa;CACd,CAAC;AAEF,MAAa,gBAAgB,MAAM,YAGhC,OAAO,QAAQ;CAChB,MAAM,EAAE,mBAAoB,GAAG,cAAc;CAC7C,MAAM,aAAa,MAAM,OAA+B,KAAK;AAE7D,OAAM,sBAAsB;AAC1B,MAAI,WAAW,WAAW,oBAAoB,QAC5C,CAAC,WAAW,QAAgB,yBAAyB,mBAAmB;WAC/D,WAAW,QACpB,CAAC,WAAW,QAAgB,yBAAyB;IAEtD,CAAC,oBAAoB,QAAQ,CAAC;AAEjC,QACE,oBAAC;EACC,GAAK;EACL,MAAM,SAAS;AACb,cAAW,UAAU;AACrB,OAAI,OAAO,QAAQ,WAAY,KAAI,KAAK;YAC/B,IAAK,KAAI,UAAU;;GAE9B;EAEJ;AAEF,cAAc,cAAc"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { PanZoomTransform } from "@editframe/elements";
|
|
2
|
+
import React from "react";
|
|
3
|
+
|
|
4
|
+
//#region src/hooks/usePanZoomTransform.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Hook to get PanZoom transform values from a PanZoom element ref.
|
|
8
|
+
* Listens to transform-changed events to keep transform values in sync.
|
|
9
|
+
*
|
|
10
|
+
* @param panZoomRef - Ref to the PanZoom element
|
|
11
|
+
* @returns Current transform values (scale, x, y)
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* const panZoomRef = useRef<EFPanZoom | null>(null);
|
|
15
|
+
* const transform = usePanZoomTransform(panZoomRef);
|
|
16
|
+
* // transform.scale, transform.x, transform.y
|
|
17
|
+
*/
|
|
18
|
+
declare function usePanZoomTransform(panZoomRef: React.RefObject<(EventTarget & {
|
|
19
|
+
scale: number;
|
|
20
|
+
x: number;
|
|
21
|
+
y: number;
|
|
22
|
+
}) | null>): PanZoomTransform;
|
|
23
|
+
//#endregion
|
|
24
|
+
export { usePanZoomTransform };
|
|
25
|
+
//# sourceMappingURL=usePanZoomTransform.d.ts.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
|
|
3
|
+
//#region src/hooks/usePanZoomTransform.ts
|
|
4
|
+
/**
|
|
5
|
+
* Hook to get PanZoom transform values from a PanZoom element ref.
|
|
6
|
+
* Listens to transform-changed events to keep transform values in sync.
|
|
7
|
+
*
|
|
8
|
+
* @param panZoomRef - Ref to the PanZoom element
|
|
9
|
+
* @returns Current transform values (scale, x, y)
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const panZoomRef = useRef<EFPanZoom | null>(null);
|
|
13
|
+
* const transform = usePanZoomTransform(panZoomRef);
|
|
14
|
+
* // transform.scale, transform.x, transform.y
|
|
15
|
+
*/
|
|
16
|
+
function usePanZoomTransform(panZoomRef) {
|
|
17
|
+
const [transform, setTransform] = useState({
|
|
18
|
+
scale: 1,
|
|
19
|
+
x: 0,
|
|
20
|
+
y: 0
|
|
21
|
+
});
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
const panZoom = panZoomRef.current;
|
|
24
|
+
if (!panZoom) return;
|
|
25
|
+
setTransform({
|
|
26
|
+
scale: panZoom.scale ?? 1,
|
|
27
|
+
x: panZoom.x ?? 0,
|
|
28
|
+
y: panZoom.y ?? 0
|
|
29
|
+
});
|
|
30
|
+
const handleTransformChanged = (e) => {
|
|
31
|
+
const customEvent = e;
|
|
32
|
+
if (customEvent.detail) setTransform(customEvent.detail);
|
|
33
|
+
else setTransform({
|
|
34
|
+
scale: panZoom.scale ?? 1,
|
|
35
|
+
x: panZoom.x ?? 0,
|
|
36
|
+
y: panZoom.y ?? 0
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
panZoom.addEventListener("transform-changed", handleTransformChanged);
|
|
40
|
+
return () => {
|
|
41
|
+
panZoom.removeEventListener("transform-changed", handleTransformChanged);
|
|
42
|
+
};
|
|
43
|
+
}, [panZoomRef]);
|
|
44
|
+
return transform;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
export { usePanZoomTransform };
|
|
49
|
+
//# sourceMappingURL=usePanZoomTransform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePanZoomTransform.js","names":[],"sources":["../../src/hooks/usePanZoomTransform.ts"],"sourcesContent":["import { type PanZoomTransform } from \"@editframe/elements\";\nimport React, { useEffect, useState } from \"react\";\n\n/**\n * Hook to get PanZoom transform values from a PanZoom element ref.\n * Listens to transform-changed events to keep transform values in sync.\n *\n * @param panZoomRef - Ref to the PanZoom element\n * @returns Current transform values (scale, x, y)\n *\n * @example\n * const panZoomRef = useRef<EFPanZoom | null>(null);\n * const transform = usePanZoomTransform(panZoomRef);\n * // transform.scale, transform.x, transform.y\n */\nexport function usePanZoomTransform(\n panZoomRef: React.RefObject<(EventTarget & { scale: number; x: number; y: number }) | null>,\n): PanZoomTransform {\n const [transform, setTransform] = useState<PanZoomTransform>({\n scale: 1,\n x: 0,\n y: 0,\n });\n\n useEffect(() => {\n const panZoom = panZoomRef.current;\n if (!panZoom) {\n return;\n }\n\n // Initialize with current values\n setTransform({\n scale: panZoom.scale ?? 1,\n x: panZoom.x ?? 0,\n y: panZoom.y ?? 0,\n });\n\n // Listen for transform changes\n const handleTransformChanged = (e: Event) => {\n const customEvent = e as CustomEvent<PanZoomTransform>;\n if (customEvent.detail) {\n setTransform(customEvent.detail);\n } else {\n // Fallback to reading from element if detail is not available\n setTransform({\n scale: panZoom.scale ?? 1,\n x: panZoom.x ?? 0,\n y: panZoom.y ?? 0,\n });\n }\n };\n\n panZoom.addEventListener(\"transform-changed\", handleTransformChanged);\n\n return () => {\n panZoom.removeEventListener(\"transform-changed\", handleTransformChanged);\n };\n }, [panZoomRef]);\n\n return transform;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAeA,SAAgB,oBACd,YACkB;CAClB,MAAM,CAAC,WAAW,gBAAgB,SAA2B;EAC3D,OAAO;EACP,GAAG;EACH,GAAG;EACJ,CAAC;AAEF,iBAAgB;EACd,MAAM,UAAU,WAAW;AAC3B,MAAI,CAAC,QACH;AAIF,eAAa;GACX,OAAO,QAAQ,SAAS;GACxB,GAAG,QAAQ,KAAK;GAChB,GAAG,QAAQ,KAAK;GACjB,CAAC;EAGF,MAAM,0BAA0B,MAAa;GAC3C,MAAM,cAAc;AACpB,OAAI,YAAY,OACd,cAAa,YAAY,OAAO;OAGhC,cAAa;IACX,OAAO,QAAQ,SAAS;IACxB,GAAG,QAAQ,KAAK;IAChB,GAAG,QAAQ,KAAK;IACjB,CAAC;;AAIN,UAAQ,iBAAiB,qBAAqB,uBAAuB;AAErE,eAAa;AACX,WAAQ,oBAAoB,qBAAqB,uBAAuB;;IAEzE,CAAC,WAAW,CAAC;AAEhB,QAAO"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,21 +6,29 @@ import { Image } from "./elements/Image.js";
|
|
|
6
6
|
import { Surface } from "./elements/Surface.js";
|
|
7
7
|
import { ThumbnailStrip } from "./elements/ThumbnailStrip.js";
|
|
8
8
|
import { Timegroup } from "./elements/Timegroup.js";
|
|
9
|
+
import { TimelineRoot } from "./components/TimelineRoot.js";
|
|
9
10
|
import { Video } from "./elements/Video.js";
|
|
10
11
|
import { Waveform } from "./elements/Waveform.js";
|
|
12
|
+
import { PanZoom } from "./elements/PanZoom.js";
|
|
13
|
+
import { OverlayLayer } from "./gui/OverlayLayer.js";
|
|
14
|
+
import { OverlayItem, OverlayItemProps } from "./gui/OverlayItem.js";
|
|
11
15
|
import { Configuration } from "./gui/Configuration.js";
|
|
12
16
|
import { Controls } from "./gui/Controls.js";
|
|
13
17
|
import { Dial } from "./gui/EFDial.js";
|
|
14
18
|
import { ResizableBox } from "./gui/EFResizableBox.js";
|
|
19
|
+
import { TransformHandles } from "./gui/EFTransformHandles.js";
|
|
15
20
|
import { Filmstrip } from "./gui/Filmstrip.js";
|
|
16
21
|
import { FitScale } from "./gui/FitScale.js";
|
|
17
22
|
import { FocusOverlay } from "./gui/FocusOverlay.js";
|
|
18
23
|
import { Pause } from "./gui/Pause.js";
|
|
19
24
|
import { Play } from "./gui/Play.js";
|
|
20
25
|
import { Preview } from "./gui/Preview.js";
|
|
21
|
-
import { Scrubber } from "./gui/Scrubber.js";
|
|
26
|
+
import { Scrubber, ScrubberProps } from "./gui/Scrubber.js";
|
|
27
|
+
import { TimelineRuler } from "./gui/TimelineRuler.js";
|
|
22
28
|
import { ToggleLoop } from "./gui/ToggleLoop.js";
|
|
23
29
|
import { TogglePlay } from "./gui/TogglePlay.js";
|
|
24
30
|
import { Workbench } from "./gui/Workbench.js";
|
|
25
31
|
import { useTimingInfo } from "./hooks/useTimingInfo.js";
|
|
26
|
-
|
|
32
|
+
import { usePanZoomTransform } from "./hooks/usePanZoomTransform.js";
|
|
33
|
+
import { elementNeedsFitScale, needsFitScale } from "@editframe/elements";
|
|
34
|
+
export { Audio, Captions, CaptionsActiveWord, CaptionsAfterActiveWord, CaptionsBeforeActiveWord, CaptionsSegment, Configuration, Controls, Dial, Filmstrip, FitScale, FocusOverlay, Image, OverlayItem, type OverlayItemProps, OverlayLayer, PanZoom, Pause, Play, Preview, ResizableBox, Scrubber, type ScrubberProps, Surface, Text, TextSegment, ThumbnailStrip, TimeDisplay, Timegroup, TimelineRoot, TimelineRuler, ToggleLoop, TogglePlay, TransformHandles, Video, Waveform, Workbench, elementNeedsFitScale, needsFitScale, usePanZoomTransform, useTimingInfo };
|
package/dist/index.js
CHANGED
|
@@ -6,12 +6,17 @@ import { Image } from "./elements/Image.js";
|
|
|
6
6
|
import { Surface } from "./elements/Surface.js";
|
|
7
7
|
import { ThumbnailStrip } from "./elements/ThumbnailStrip.js";
|
|
8
8
|
import { Timegroup } from "./elements/Timegroup.js";
|
|
9
|
+
import { TimelineRoot } from "./components/TimelineRoot.js";
|
|
9
10
|
import { Video } from "./elements/Video.js";
|
|
10
11
|
import { Waveform } from "./elements/Waveform.js";
|
|
12
|
+
import { PanZoom } from "./elements/PanZoom.js";
|
|
13
|
+
import { OverlayLayer } from "./gui/OverlayLayer.js";
|
|
14
|
+
import { OverlayItem } from "./gui/OverlayItem.js";
|
|
11
15
|
import { Configuration } from "./gui/Configuration.js";
|
|
12
16
|
import { Controls } from "./gui/Controls.js";
|
|
13
17
|
import { Dial } from "./gui/EFDial.js";
|
|
14
18
|
import { ResizableBox } from "./gui/EFResizableBox.js";
|
|
19
|
+
import { TransformHandles } from "./gui/EFTransformHandles.js";
|
|
15
20
|
import { Filmstrip } from "./gui/Filmstrip.js";
|
|
16
21
|
import { FitScale } from "./gui/FitScale.js";
|
|
17
22
|
import { FocusOverlay } from "./gui/FocusOverlay.js";
|
|
@@ -19,9 +24,12 @@ import { Pause } from "./gui/Pause.js";
|
|
|
19
24
|
import { Play } from "./gui/Play.js";
|
|
20
25
|
import { Preview } from "./gui/Preview.js";
|
|
21
26
|
import { Scrubber } from "./gui/Scrubber.js";
|
|
27
|
+
import { TimelineRuler } from "./gui/TimelineRuler.js";
|
|
22
28
|
import { ToggleLoop } from "./gui/ToggleLoop.js";
|
|
23
29
|
import { TogglePlay } from "./gui/TogglePlay.js";
|
|
24
30
|
import { Workbench } from "./gui/Workbench.js";
|
|
25
31
|
import { useTimingInfo } from "./hooks/useTimingInfo.js";
|
|
32
|
+
import { usePanZoomTransform } from "./hooks/usePanZoomTransform.js";
|
|
33
|
+
import { elementNeedsFitScale, needsFitScale } from "@editframe/elements";
|
|
26
34
|
|
|
27
|
-
export { Audio, Captions, CaptionsActiveWord, CaptionsAfterActiveWord, CaptionsBeforeActiveWord, CaptionsSegment, Configuration, Controls, Dial, Filmstrip, FitScale, FocusOverlay, Image, Pause, Play, Preview, ResizableBox, Scrubber, Surface, Text, TextSegment, ThumbnailStrip, TimeDisplay, Timegroup, ToggleLoop, TogglePlay, Video, Waveform, Workbench, useTimingInfo };
|
|
35
|
+
export { Audio, Captions, CaptionsActiveWord, CaptionsAfterActiveWord, CaptionsBeforeActiveWord, CaptionsSegment, Configuration, Controls, Dial, Filmstrip, FitScale, FocusOverlay, Image, OverlayItem, OverlayLayer, PanZoom, Pause, Play, Preview, ResizableBox, Scrubber, Surface, Text, TextSegment, ThumbnailStrip, TimeDisplay, Timegroup, TimelineRoot, TimelineRuler, ToggleLoop, TogglePlay, TransformHandles, Video, Waveform, Workbench, elementNeedsFitScale, needsFitScale, usePanZoomTransform, useTimingInfo };
|