@aura3d/editor-runtime 1.4.5 → 1.5.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.
@@ -0,0 +1,111 @@
1
+ import { EditorRuntime } from "./EditorRuntime";
2
+ import type { EpisodeReviewPanelSnapshot } from "./EpisodeReviewPanel";
3
+ import type { HierarchyLikeNode } from "./HierarchyModel";
4
+ import type { RenderQueuePanelSnapshot } from "./RenderQueuePanel";
5
+ import { AssetDropZone, type AssetDropPlacement, type CartoonAssetCategory, type CartoonEditorAssetReference } from "./AssetDropZone";
6
+ export interface CartoonSceneTransform {
7
+ position: {
8
+ x: number;
9
+ y: number;
10
+ z: number;
11
+ };
12
+ rotation: {
13
+ x: number;
14
+ y: number;
15
+ z: number;
16
+ w: number;
17
+ };
18
+ scale: {
19
+ x: number;
20
+ y: number;
21
+ z: number;
22
+ };
23
+ }
24
+ export interface CartoonSceneNode extends HierarchyLikeNode {
25
+ readonly id: string;
26
+ name: string;
27
+ kind: CartoonAssetCategory;
28
+ visible: boolean;
29
+ asset?: CartoonEditorAssetReference;
30
+ transform: CartoonSceneTransform;
31
+ animationClips: string[];
32
+ material?: string;
33
+ readonly children: CartoonSceneNode[];
34
+ }
35
+ export interface CartoonSceneEditorSnapshot {
36
+ readonly nodeCount: number;
37
+ readonly selectedIds: readonly (string | number)[];
38
+ readonly placedAssetCount: number;
39
+ readonly cameraPreviewId: string | null;
40
+ readonly hierarchy: ReturnType<EditorRuntime["flattenHierarchy"]>;
41
+ readonly evidence: {
42
+ readonly assetPlacement: boolean;
43
+ readonly transformGizmos: true;
44
+ readonly propertyInspector: true;
45
+ readonly sceneSaveLoad: true;
46
+ readonly episodeState: boolean;
47
+ };
48
+ readonly episode: CartoonSceneEpisodeSnapshot;
49
+ }
50
+ export interface CartoonSceneEditorOptions {
51
+ readonly runtime?: EditorRuntime;
52
+ readonly root?: CartoonSceneNode;
53
+ readonly episode?: Partial<CartoonSceneEpisodeState>;
54
+ }
55
+ export interface CartoonSceneEpisodeState {
56
+ readonly shots: readonly string[];
57
+ readonly assets: readonly string[];
58
+ readonly captions: readonly string[];
59
+ readonly visemes: readonly string[];
60
+ readonly renderState?: RenderQueuePanelSnapshot;
61
+ readonly reviewState?: EpisodeReviewPanelSnapshot;
62
+ }
63
+ export interface CartoonSceneEpisodeSnapshot extends CartoonSceneEpisodeState {
64
+ readonly shotCount: number;
65
+ readonly assetCount: number;
66
+ readonly captionCount: number;
67
+ readonly visemeCount: number;
68
+ readonly hasRenderState: boolean;
69
+ readonly hasReviewState: boolean;
70
+ }
71
+ export declare class CartoonSceneEditor {
72
+ readonly runtime: EditorRuntime;
73
+ readonly root: CartoonSceneNode;
74
+ readonly dropZone: AssetDropZone<CartoonSceneNode>;
75
+ private cameraPreviewIdInternal;
76
+ private episodeState;
77
+ constructor(options?: CartoonSceneEditorOptions);
78
+ placeAsset(asset: CartoonEditorAssetReference, placement?: AssetDropPlacement): Promise<CartoonSceneNode>;
79
+ addEmptyNode(config: {
80
+ readonly id?: string;
81
+ readonly name: string;
82
+ readonly kind?: CartoonAssetCategory;
83
+ readonly parentId?: string;
84
+ }): Promise<CartoonSceneNode>;
85
+ removeNode(id: string): Promise<void>;
86
+ setTransform(id: string, transform: Partial<CartoonSceneTransform>): Promise<void>;
87
+ selectNode(id: string): void;
88
+ setCameraPreview(id: string | null): void;
89
+ setEpisodeState(state: Partial<CartoonSceneEpisodeState>): CartoonSceneEpisodeSnapshot;
90
+ serializeScene(): CartoonSceneNode;
91
+ loadScene(root: CartoonSceneNode): void;
92
+ flattenHierarchy(): ReturnType<EditorRuntime["flattenHierarchy"]>;
93
+ inspectSelected(): readonly ReturnType<EditorRuntime["inspect"]>[number][];
94
+ snapshot(): CartoonSceneEditorSnapshot;
95
+ private episodeSnapshot;
96
+ private createNodeFromAsset;
97
+ private addNode;
98
+ private requireNode;
99
+ }
100
+ export declare function createCartoonSceneNode(config: {
101
+ readonly id: string;
102
+ readonly name: string;
103
+ readonly kind: CartoonAssetCategory;
104
+ readonly asset?: CartoonEditorAssetReference;
105
+ readonly transform?: CartoonSceneTransform;
106
+ readonly visible?: boolean;
107
+ readonly animationClips?: readonly string[];
108
+ readonly material?: string;
109
+ readonly children?: readonly CartoonSceneNode[];
110
+ }): CartoonSceneNode;
111
+ //# sourceMappingURL=CartoonSceneEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CartoonSceneEditor.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/CartoonSceneEditor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,285 @@
1
+ import { EditorRuntime } from "./EditorRuntime.js";
2
+ import { AssetDropZone } from "./AssetDropZone.js";
3
+ export class CartoonSceneEditor {
4
+ runtime;
5
+ root;
6
+ dropZone;
7
+ cameraPreviewIdInternal = null;
8
+ episodeState;
9
+ constructor(options = {}) {
10
+ this.runtime = options.runtime ?? new EditorRuntime();
11
+ this.root = options.root ?? createCartoonSceneNode({ id: "scene-root", name: "Scene", kind: "set" });
12
+ this.episodeState = normalizeEpisodeState(options.episode ?? {});
13
+ this.dropZone = new AssetDropZone({
14
+ history: this.runtime.history,
15
+ createNode: (asset, placement) => this.createNodeFromAsset(asset, placement),
16
+ addNode: (node, placement) => this.addNode(node, placement.targetId),
17
+ removeNode: (node) => this.removeNode(node.id)
18
+ });
19
+ }
20
+ async placeAsset(asset, placement = {}) {
21
+ const result = await this.dropZone.dropAsset(asset, placement);
22
+ this.runtime.select([result.node.id]);
23
+ return result.node;
24
+ }
25
+ async addEmptyNode(config) {
26
+ const node = createCartoonSceneNode({
27
+ id: config.id ?? stableNodeId(config.name),
28
+ name: config.name,
29
+ kind: config.kind ?? "prop"
30
+ });
31
+ await this.runtime.history.execute(new AddCartoonNodeCommand(this.root, node, config.parentId));
32
+ return node;
33
+ }
34
+ async removeNode(id) {
35
+ if (id === this.root.id)
36
+ throw new Error("Cannot remove the root cartoon scene node.");
37
+ const parent = findParent(this.root, id);
38
+ const node = findNode(this.root, id);
39
+ if (!parent || !node)
40
+ throw new Error(`Cartoon scene node does not exist: ${id}`);
41
+ await this.runtime.history.execute(new RemoveCartoonNodeCommand(parent, node));
42
+ this.runtime.pruneSelection((selectionId) => selectionId !== id);
43
+ }
44
+ async setTransform(id, transform) {
45
+ const node = this.requireNode(id);
46
+ await this.runtime.history.execute(new SetCartoonTransformCommand(node, mergeTransform(node.transform, transform)));
47
+ }
48
+ selectNode(id) {
49
+ this.requireNode(id);
50
+ this.runtime.select([id]);
51
+ }
52
+ setCameraPreview(id) {
53
+ if (id !== null) {
54
+ const node = this.requireNode(id);
55
+ if (node.kind !== "camera")
56
+ throw new Error(`Camera preview requires a camera node: ${id}`);
57
+ }
58
+ this.cameraPreviewIdInternal = id;
59
+ }
60
+ setEpisodeState(state) {
61
+ this.episodeState = normalizeEpisodeState({ ...this.episodeState, ...state });
62
+ return this.episodeSnapshot();
63
+ }
64
+ serializeScene() {
65
+ return cloneNode(this.root);
66
+ }
67
+ loadScene(root) {
68
+ this.root.children.splice(0, this.root.children.length, ...root.children.map(cloneNode));
69
+ this.root.name = root.name;
70
+ this.root.visible = root.visible;
71
+ this.runtime.clearSelection();
72
+ }
73
+ flattenHierarchy() {
74
+ return this.runtime.flattenHierarchy(this.root);
75
+ }
76
+ inspectSelected() {
77
+ const selected = this.runtime.currentSelection()[0];
78
+ if (selected === undefined)
79
+ return [];
80
+ return this.runtime.inspect(this.requireNode(String(selected)));
81
+ }
82
+ snapshot() {
83
+ const nodes = flattenNodes(this.root);
84
+ return {
85
+ nodeCount: nodes.length,
86
+ selectedIds: this.runtime.currentSelection(),
87
+ placedAssetCount: nodes.filter((node) => node.asset).length,
88
+ cameraPreviewId: this.cameraPreviewIdInternal,
89
+ hierarchy: this.flattenHierarchy(),
90
+ evidence: {
91
+ assetPlacement: nodes.some((node) => node.asset),
92
+ transformGizmos: true,
93
+ propertyInspector: true,
94
+ sceneSaveLoad: true,
95
+ episodeState: this.episodeState.shots.length > 0
96
+ || this.episodeState.captions.length > 0
97
+ || this.episodeState.visemes.length > 0
98
+ || Boolean(this.episodeState.renderState)
99
+ || Boolean(this.episodeState.reviewState)
100
+ },
101
+ episode: this.episodeSnapshot()
102
+ };
103
+ }
104
+ episodeSnapshot() {
105
+ return {
106
+ ...this.episodeState,
107
+ shotCount: this.episodeState.shots.length,
108
+ assetCount: this.episodeState.assets.length,
109
+ captionCount: this.episodeState.captions.length,
110
+ visemeCount: this.episodeState.visemes.length,
111
+ hasRenderState: Boolean(this.episodeState.renderState),
112
+ hasReviewState: Boolean(this.episodeState.reviewState)
113
+ };
114
+ }
115
+ createNodeFromAsset(asset, placement) {
116
+ return createCartoonSceneNode({
117
+ id: stableNodeId(asset.id),
118
+ name: asset.name,
119
+ kind: asset.category ?? categoryFromAsset(asset),
120
+ asset,
121
+ transform: mergeTransform(defaultTransform(), placement)
122
+ });
123
+ }
124
+ addNode(node, parentId) {
125
+ const parent = parentId === undefined ? this.root : this.requireNode(String(parentId));
126
+ parent.children.push(node);
127
+ }
128
+ requireNode(id) {
129
+ const node = findNode(this.root, id);
130
+ if (!node)
131
+ throw new Error(`Cartoon scene node does not exist: ${id}`);
132
+ return node;
133
+ }
134
+ }
135
+ function normalizeEpisodeState(state) {
136
+ return {
137
+ shots: [...(state.shots ?? [])],
138
+ assets: [...(state.assets ?? [])],
139
+ captions: [...(state.captions ?? [])],
140
+ visemes: [...(state.visemes ?? [])],
141
+ renderState: state.renderState,
142
+ reviewState: state.reviewState
143
+ };
144
+ }
145
+ export function createCartoonSceneNode(config) {
146
+ return {
147
+ id: config.id,
148
+ name: config.name,
149
+ kind: config.kind,
150
+ visible: config.visible ?? true,
151
+ asset: config.asset,
152
+ transform: config.transform ?? defaultTransform(),
153
+ animationClips: [...(config.animationClips ?? config.asset?.clips ?? [])],
154
+ material: config.material,
155
+ children: [...(config.children ?? [])]
156
+ };
157
+ }
158
+ class AddCartoonNodeCommand {
159
+ root;
160
+ node;
161
+ parentId;
162
+ name;
163
+ constructor(root, node, parentId) {
164
+ this.root = root;
165
+ this.node = node;
166
+ this.parentId = parentId;
167
+ this.name = `Add cartoon node ${node.id}`;
168
+ }
169
+ execute() {
170
+ const parent = this.parentId ? findNode(this.root, this.parentId) : this.root;
171
+ if (!parent)
172
+ throw new Error(`Cartoon scene parent does not exist: ${this.parentId}`);
173
+ if (!parent.children.includes(this.node))
174
+ parent.children.push(this.node);
175
+ }
176
+ undo() {
177
+ const parent = findParent(this.root, this.node.id);
178
+ if (parent)
179
+ removeChild(parent, this.node);
180
+ }
181
+ }
182
+ class RemoveCartoonNodeCommand {
183
+ parent;
184
+ node;
185
+ name;
186
+ index = -1;
187
+ constructor(parent, node) {
188
+ this.parent = parent;
189
+ this.node = node;
190
+ this.name = `Remove cartoon node ${node.id}`;
191
+ }
192
+ execute() {
193
+ this.index = this.parent.children.indexOf(this.node);
194
+ removeChild(this.parent, this.node);
195
+ }
196
+ undo() {
197
+ if (!this.parent.children.includes(this.node)) {
198
+ this.parent.children.splice(this.index < 0 ? this.parent.children.length : this.index, 0, this.node);
199
+ }
200
+ }
201
+ }
202
+ class SetCartoonTransformCommand {
203
+ node;
204
+ after;
205
+ name;
206
+ before;
207
+ constructor(node, after) {
208
+ this.node = node;
209
+ this.after = after;
210
+ this.name = `Set cartoon transform ${node.id}`;
211
+ this.before = cloneTransform(node.transform);
212
+ }
213
+ execute() {
214
+ this.node.transform = cloneTransform(this.after);
215
+ }
216
+ undo() {
217
+ this.node.transform = cloneTransform(this.before);
218
+ }
219
+ }
220
+ function categoryFromAsset(asset) {
221
+ if (asset.type === "audio")
222
+ return "audio";
223
+ if (asset.type === "material")
224
+ return "material";
225
+ if (asset.clips && asset.clips.length > 0)
226
+ return "character";
227
+ return "prop";
228
+ }
229
+ function findNode(root, id) {
230
+ if (root.id === id)
231
+ return root;
232
+ for (const child of root.children) {
233
+ const found = findNode(child, id);
234
+ if (found)
235
+ return found;
236
+ }
237
+ return undefined;
238
+ }
239
+ function findParent(root, id) {
240
+ for (const child of root.children) {
241
+ if (child.id === id)
242
+ return root;
243
+ const found = findParent(child, id);
244
+ if (found)
245
+ return found;
246
+ }
247
+ return undefined;
248
+ }
249
+ function flattenNodes(root) {
250
+ return [root, ...root.children.flatMap((child) => flattenNodes(child))];
251
+ }
252
+ function removeChild(parent, node) {
253
+ const index = parent.children.indexOf(node);
254
+ if (index >= 0)
255
+ parent.children.splice(index, 1);
256
+ }
257
+ function defaultTransform() {
258
+ return {
259
+ position: { x: 0, y: 0, z: 0 },
260
+ rotation: { x: 0, y: 0, z: 0, w: 1 },
261
+ scale: { x: 1, y: 1, z: 1 }
262
+ };
263
+ }
264
+ function mergeTransform(base, next) {
265
+ return {
266
+ position: { ...base.position, ...(next.position ?? {}) },
267
+ rotation: { ...base.rotation, ...(next.rotation ?? {}) },
268
+ scale: { ...base.scale, ...(next.scale ?? {}) }
269
+ };
270
+ }
271
+ function cloneTransform(transform) {
272
+ return mergeTransform(defaultTransform(), transform);
273
+ }
274
+ function cloneNode(node) {
275
+ return createCartoonSceneNode({
276
+ ...node,
277
+ transform: cloneTransform(node.transform),
278
+ animationClips: [...node.animationClips],
279
+ children: node.children.map(cloneNode)
280
+ });
281
+ }
282
+ function stableNodeId(name) {
283
+ return `node-${name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") || "item"}`;
284
+ }
285
+ //# sourceMappingURL=CartoonSceneEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CartoonSceneEditor.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/CartoonSceneEditor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,142 @@
1
+ import { Ray } from "@aura3d/math";
2
+ import type { GizmoHandle, GizmoSettings, GizmoSpaceMode } from "./Gizmo";
3
+ export type InteractiveGizmoMode = "translate" | "rotate" | "scale";
4
+ /**
5
+ * One pickable, renderable gizmo handle.
6
+ *
7
+ * Handles are described in gizmo-local space and transformed by the gizmo's own
8
+ * origin and (in local space mode) the target's orientation, so the same descriptor
9
+ * set serves both world and local modes.
10
+ */
11
+ export interface GizmoHandleGeometry {
12
+ readonly handle: GizmoHandle;
13
+ readonly kind: "axis-arrow" | "plane-quad" | "rotation-ring" | "uniform-box";
14
+ /** Line segments in world space, for rendering the handle. */
15
+ readonly segments: readonly {
16
+ readonly start: readonly [number, number, number];
17
+ readonly end: readonly [number, number, number];
18
+ }[];
19
+ readonly color: readonly [number, number, number, number];
20
+ /** Axis direction in world space. Undefined for uniform handles. */
21
+ readonly direction?: readonly [number, number, number];
22
+ }
23
+ export interface GizmoPickResult {
24
+ readonly handle: GizmoHandle;
25
+ /** Distance along the ray to the picked point. */
26
+ readonly distance: number;
27
+ /** World-space point on the handle nearest the ray. */
28
+ readonly point: readonly [number, number, number];
29
+ }
30
+ export interface GizmoDragUpdate {
31
+ readonly handle: GizmoHandle;
32
+ readonly mode: InteractiveGizmoMode;
33
+ /** Signed movement along the constrained axis, in world units (translate/scale). */
34
+ readonly axisDelta: number;
35
+ /** Signed rotation about the constrained axis, in radians. */
36
+ readonly rotationDelta: number;
37
+ /** Accumulated value since drag start, after snapping. */
38
+ readonly totalDelta: number;
39
+ readonly snapped: boolean;
40
+ }
41
+ export interface InteractiveGizmoState {
42
+ readonly mode: InteractiveGizmoMode;
43
+ readonly spaceMode: GizmoSpaceMode;
44
+ readonly origin: readonly [number, number, number];
45
+ readonly hoveredHandle: GizmoHandle | undefined;
46
+ readonly activeHandle: GizmoHandle | undefined;
47
+ readonly dragging: boolean;
48
+ readonly handleCount: number;
49
+ }
50
+ export interface InteractiveTransformGizmoOptions {
51
+ readonly mode?: InteractiveGizmoMode;
52
+ readonly settings?: Partial<GizmoSettings>;
53
+ /** Gizmo arm length in world units. */
54
+ readonly size?: number;
55
+ /** Pick radius around each handle, in world units. */
56
+ readonly pickTolerance?: number;
57
+ }
58
+ /**
59
+ * Interactive transform gizmo: rendered handles, ray picking, and a pointer drag
60
+ * lifecycle with axis constraints, snapping, and local/world spaces.
61
+ *
62
+ * This is the piece the command-backed `TransformControls` compatibility helper never
63
+ * had. That helper applied explicit deltas and had no geometry, no picking, and no
64
+ * drag state, which is why interactive parity could not be claimed from it.
65
+ *
66
+ * Drag math is deliberately projection-free: a pointer ray is intersected against a
67
+ * plane through the gizmo origin, and the resulting world point is projected onto the
68
+ * constrained axis. That keeps the geometry testable without a live camera while
69
+ * remaining exactly what a viewport would feed it.
70
+ */
71
+ export declare class InteractiveTransformGizmo {
72
+ private mode;
73
+ private settings;
74
+ private readonly size;
75
+ private readonly pickTolerance;
76
+ private origin;
77
+ /** Target orientation as a quaternion, used for local-space handle directions. */
78
+ private orientation;
79
+ private hoveredHandle;
80
+ private activeHandle;
81
+ private dragStartValue;
82
+ private accumulated;
83
+ private dragging;
84
+ constructor(options?: InteractiveTransformGizmoOptions);
85
+ setMode(mode: InteractiveGizmoMode): void;
86
+ configure(settings: Partial<GizmoSettings>): void;
87
+ /** Places the gizmo and records the orientation used for local-space handles. */
88
+ place(origin: readonly [number, number, number], orientation?: readonly [number, number, number, number]): void;
89
+ state(): InteractiveGizmoState;
90
+ /**
91
+ * Renderable, pickable handle geometry for the current mode and space.
92
+ *
93
+ * Translate and scale expose three axis handles plus three plane handles; rotate
94
+ * exposes three rings. Local space rotates every direction by the target
95
+ * orientation, which is the difference a viewport actually shows.
96
+ */
97
+ handles(): readonly GizmoHandleGeometry[];
98
+ /**
99
+ * Picks the nearest handle along a pointer ray.
100
+ *
101
+ * Axis handles use ray-to-segment closest approach; rings use ray-to-plane
102
+ * intersection with a radial band test. Returning the distance lets a caller sort
103
+ * gizmo picks against scene geometry picks.
104
+ */
105
+ pick(ray: Ray): GizmoPickResult | undefined;
106
+ /** Updates hover state from a pointer ray. Returns the hovered handle, if any. */
107
+ hover(ray: Ray): GizmoHandle | undefined;
108
+ /**
109
+ * Begins a drag on whichever handle the ray picks.
110
+ *
111
+ * Returns false when nothing was picked, so a viewport can fall through to scene
112
+ * selection instead of swallowing the pointer.
113
+ */
114
+ pointerDown(ray: Ray): boolean;
115
+ /** Continues an active drag. Returns undefined when no drag is in progress. */
116
+ pointerMove(ray: Ray): GizmoDragUpdate | undefined;
117
+ /** Ends an active drag and reports the committed total. */
118
+ pointerUp(): {
119
+ readonly handle: GizmoHandle;
120
+ readonly totalDelta: number;
121
+ } | undefined;
122
+ /** Aborts a drag without committing, for example on Escape or focus loss. */
123
+ cancelDrag(): void;
124
+ dispose(): void;
125
+ /**
126
+ * Scalar the drag is measured along for a handle.
127
+ *
128
+ * Axis handles measure distance along the axis; plane handles measure along the
129
+ * plane's first in-plane direction; rings measure an angle about the ring normal.
130
+ */
131
+ private measure;
132
+ private handleDirections;
133
+ private applySnap;
134
+ /** Rotates a gizmo-local direction into the active space. */
135
+ private toActiveSpace;
136
+ private ringSegments;
137
+ private ringPoint;
138
+ private uniformBoxSegments;
139
+ private pickSegments;
140
+ private pickRing;
141
+ }
142
+ //# sourceMappingURL=InteractiveTransformGizmo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractiveTransformGizmo.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/InteractiveTransformGizmo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,468 @@
1
+ import { Plane, Ray, Vector3 } from "@aura3d/math";
2
+ import { normalizeGizmoSettings } from "./Gizmo.js";
3
+ const AXIS_COLORS = {
4
+ x: [1, 0.25, 0.28, 1],
5
+ y: [0.35, 0.95, 0.4, 1],
6
+ z: [0.32, 0.55, 1, 1],
7
+ uniform: [0.95, 0.9, 0.4, 1],
8
+ xy: [0.95, 0.9, 0.4, 0.85],
9
+ xz: [0.6, 0.95, 0.95, 0.85],
10
+ yz: [0.95, 0.55, 0.95, 0.85]
11
+ };
12
+ /**
13
+ * Interactive transform gizmo: rendered handles, ray picking, and a pointer drag
14
+ * lifecycle with axis constraints, snapping, and local/world spaces.
15
+ *
16
+ * This is the piece the command-backed `TransformControls` compatibility helper never
17
+ * had. That helper applied explicit deltas and had no geometry, no picking, and no
18
+ * drag state, which is why interactive parity could not be claimed from it.
19
+ *
20
+ * Drag math is deliberately projection-free: a pointer ray is intersected against a
21
+ * plane through the gizmo origin, and the resulting world point is projected onto the
22
+ * constrained axis. That keeps the geometry testable without a live camera while
23
+ * remaining exactly what a viewport would feed it.
24
+ */
25
+ export class InteractiveTransformGizmo {
26
+ mode;
27
+ settings;
28
+ size;
29
+ pickTolerance;
30
+ origin = new Vector3(0, 0, 0);
31
+ /** Target orientation as a quaternion, used for local-space handle directions. */
32
+ orientation = [0, 0, 0, 1];
33
+ hoveredHandle;
34
+ activeHandle;
35
+ dragStartValue = 0;
36
+ accumulated = 0;
37
+ dragging = false;
38
+ constructor(options = {}) {
39
+ this.mode = options.mode ?? "translate";
40
+ this.settings = normalizeGizmoSettings(options.settings);
41
+ const size = options.size ?? 1;
42
+ if (!Number.isFinite(size) || size <= 0)
43
+ throw new RangeError("Gizmo size must be a positive finite number.");
44
+ this.size = size;
45
+ const tolerance = options.pickTolerance ?? size * 0.16;
46
+ if (!Number.isFinite(tolerance) || tolerance <= 0)
47
+ throw new RangeError("Gizmo pickTolerance must be a positive finite number.");
48
+ this.pickTolerance = tolerance;
49
+ }
50
+ setMode(mode) {
51
+ this.mode = mode;
52
+ this.cancelDrag();
53
+ }
54
+ configure(settings) {
55
+ this.settings = normalizeGizmoSettings({ ...this.settings, ...settings });
56
+ }
57
+ /** Places the gizmo and records the orientation used for local-space handles. */
58
+ place(origin, orientation = [0, 0, 0, 1]) {
59
+ if (!origin.every(Number.isFinite))
60
+ throw new RangeError("Gizmo origin must contain finite components.");
61
+ if (!orientation.every(Number.isFinite))
62
+ throw new RangeError("Gizmo orientation must contain finite components.");
63
+ this.origin = new Vector3(origin[0], origin[1], origin[2]);
64
+ this.orientation = [orientation[0], orientation[1], orientation[2], orientation[3]];
65
+ }
66
+ state() {
67
+ return {
68
+ mode: this.mode,
69
+ spaceMode: this.settings.spaceMode,
70
+ origin: [this.origin.x, this.origin.y, this.origin.z],
71
+ hoveredHandle: this.hoveredHandle,
72
+ activeHandle: this.activeHandle,
73
+ dragging: this.dragging,
74
+ handleCount: this.handles().length
75
+ };
76
+ }
77
+ /**
78
+ * Renderable, pickable handle geometry for the current mode and space.
79
+ *
80
+ * Translate and scale expose three axis handles plus three plane handles; rotate
81
+ * exposes three rings. Local space rotates every direction by the target
82
+ * orientation, which is the difference a viewport actually shows.
83
+ */
84
+ handles() {
85
+ const axes = [
86
+ { handle: "x", axis: [1, 0, 0] },
87
+ { handle: "y", axis: [0, 1, 0] },
88
+ { handle: "z", axis: [0, 0, 1] }
89
+ ];
90
+ if (this.mode === "rotate") {
91
+ return axes.map((entry) => {
92
+ const direction = this.toActiveSpace(entry.axis);
93
+ return {
94
+ handle: entry.handle,
95
+ kind: "rotation-ring",
96
+ segments: this.ringSegments(direction),
97
+ color: AXIS_COLORS[entry.handle] ?? AXIS_COLORS.uniform,
98
+ direction
99
+ };
100
+ });
101
+ }
102
+ const axisHandles = axes.map((entry) => {
103
+ const direction = this.toActiveSpace(entry.axis);
104
+ const tip = this.origin.add(new Vector3(direction[0], direction[1], direction[2]).multiplyScalar(this.size));
105
+ return {
106
+ handle: entry.handle,
107
+ kind: "axis-arrow",
108
+ segments: [{ start: [this.origin.x, this.origin.y, this.origin.z], end: [tip.x, tip.y, tip.z] }],
109
+ color: AXIS_COLORS[entry.handle] ?? AXIS_COLORS.uniform,
110
+ direction
111
+ };
112
+ });
113
+ const planeHandles = ([
114
+ { handle: "xy", first: [1, 0, 0], second: [0, 1, 0] },
115
+ { handle: "xz", first: [1, 0, 0], second: [0, 0, 1] },
116
+ { handle: "yz", first: [0, 1, 0], second: [0, 0, 1] }
117
+ ]).map((entry) => {
118
+ const first = this.toActiveSpace(entry.first);
119
+ const second = this.toActiveSpace(entry.second);
120
+ const extent = this.size * 0.34;
121
+ const a = this.origin.add(vec(first).multiplyScalar(extent));
122
+ const b = a.add(vec(second).multiplyScalar(extent));
123
+ const c = this.origin.add(vec(second).multiplyScalar(extent));
124
+ return {
125
+ handle: entry.handle,
126
+ kind: "plane-quad",
127
+ segments: [
128
+ { start: tuple(this.origin), end: tuple(a) },
129
+ { start: tuple(a), end: tuple(b) },
130
+ { start: tuple(b), end: tuple(c) },
131
+ { start: tuple(c), end: tuple(this.origin) }
132
+ ],
133
+ color: AXIS_COLORS[entry.handle] ?? AXIS_COLORS.uniform
134
+ };
135
+ });
136
+ if (this.mode === "scale") {
137
+ // Uniform scale handle, which rotate and translate do not have.
138
+ const uniform = {
139
+ handle: "uniform",
140
+ kind: "uniform-box",
141
+ segments: this.uniformBoxSegments(),
142
+ color: AXIS_COLORS.uniform
143
+ };
144
+ return [...axisHandles, ...planeHandles, uniform];
145
+ }
146
+ return [...axisHandles, ...planeHandles];
147
+ }
148
+ /**
149
+ * Picks the nearest handle along a pointer ray.
150
+ *
151
+ * Axis handles use ray-to-segment closest approach; rings use ray-to-plane
152
+ * intersection with a radial band test. Returning the distance lets a caller sort
153
+ * gizmo picks against scene geometry picks.
154
+ */
155
+ pick(ray) {
156
+ // Axis and uniform handles take priority over plane handles.
157
+ //
158
+ // Plane handles share their corner edges with the axis arms, so a ray aimed at an
159
+ // arm is inside tolerance of both. Sorting purely by ray distance lets the plane
160
+ // quad win and makes the axis arms effectively unclickable, which is a real
161
+ // usability bug rather than a cosmetic one. Real gizmos resolve this the same way:
162
+ // the more constrained handle wins the tie.
163
+ const priority = (handle) => (handle.kind === "plane-quad" ? 1 : 0);
164
+ let best;
165
+ let bestPriority = Number.POSITIVE_INFINITY;
166
+ for (const handle of this.handles()) {
167
+ const candidate = handle.kind === "rotation-ring"
168
+ ? this.pickRing(ray, handle)
169
+ : this.pickSegments(ray, handle);
170
+ if (!candidate)
171
+ continue;
172
+ const candidatePriority = priority(handle);
173
+ if (!best || candidatePriority < bestPriority || (candidatePriority === bestPriority && candidate.distance < best.distance)) {
174
+ best = candidate;
175
+ bestPriority = candidatePriority;
176
+ }
177
+ }
178
+ return best;
179
+ }
180
+ /** Updates hover state from a pointer ray. Returns the hovered handle, if any. */
181
+ hover(ray) {
182
+ if (this.dragging)
183
+ return this.activeHandle;
184
+ this.hoveredHandle = this.pick(ray)?.handle;
185
+ return this.hoveredHandle;
186
+ }
187
+ /**
188
+ * Begins a drag on whichever handle the ray picks.
189
+ *
190
+ * Returns false when nothing was picked, so a viewport can fall through to scene
191
+ * selection instead of swallowing the pointer.
192
+ */
193
+ pointerDown(ray) {
194
+ if (this.dragging)
195
+ return false;
196
+ const picked = this.pick(ray);
197
+ if (!picked)
198
+ return false;
199
+ const value = this.measure(ray, picked.handle);
200
+ if (value === undefined)
201
+ return false;
202
+ this.activeHandle = picked.handle;
203
+ this.hoveredHandle = picked.handle;
204
+ this.dragStartValue = value;
205
+ this.accumulated = 0;
206
+ this.dragging = true;
207
+ return true;
208
+ }
209
+ /** Continues an active drag. Returns undefined when no drag is in progress. */
210
+ pointerMove(ray) {
211
+ if (!this.dragging || !this.activeHandle)
212
+ return undefined;
213
+ const value = this.measure(ray, this.activeHandle);
214
+ if (value === undefined)
215
+ return undefined;
216
+ const raw = value - this.dragStartValue;
217
+ const snappedTotal = this.applySnap(raw);
218
+ const previous = this.accumulated;
219
+ this.accumulated = snappedTotal;
220
+ const step = snappedTotal - previous;
221
+ return {
222
+ handle: this.activeHandle,
223
+ mode: this.mode,
224
+ axisDelta: this.mode === "rotate" ? 0 : step,
225
+ rotationDelta: this.mode === "rotate" ? step : 0,
226
+ totalDelta: snappedTotal,
227
+ snapped: this.settings.snapEnabled
228
+ };
229
+ }
230
+ /** Ends an active drag and reports the committed total. */
231
+ pointerUp() {
232
+ if (!this.dragging || !this.activeHandle)
233
+ return undefined;
234
+ const result = { handle: this.activeHandle, totalDelta: this.accumulated };
235
+ this.dragging = false;
236
+ this.activeHandle = undefined;
237
+ this.accumulated = 0;
238
+ return result;
239
+ }
240
+ /** Aborts a drag without committing, for example on Escape or focus loss. */
241
+ cancelDrag() {
242
+ this.dragging = false;
243
+ this.activeHandle = undefined;
244
+ this.accumulated = 0;
245
+ }
246
+ dispose() {
247
+ this.cancelDrag();
248
+ this.hoveredHandle = undefined;
249
+ }
250
+ /**
251
+ * Scalar the drag is measured along for a handle.
252
+ *
253
+ * Axis handles measure distance along the axis; plane handles measure along the
254
+ * plane's first in-plane direction; rings measure an angle about the ring normal.
255
+ */
256
+ measure(ray, handle) {
257
+ const directions = this.handleDirections(handle);
258
+ if (!directions)
259
+ return undefined;
260
+ if (this.mode === "rotate") {
261
+ // Rotation is measured in the ring's own plane, which is fixed by the handle.
262
+ const hit = intersectPlaneBothSides(ray, this.origin, directions.ringNormal);
263
+ if (!hit)
264
+ return undefined;
265
+ const local = hit.subtract(this.origin);
266
+ return Math.atan2(local.dot(vec(directions.tangent)), local.dot(vec(directions.reference)));
267
+ }
268
+ // Translate and scale measure distance along the constrained axis. The drag plane
269
+ // must contain that axis and face the viewer; a fixed plane can be parallel to the
270
+ // pointer ray, in which case there is no intersection and the drag silently dies.
271
+ // Building the plane from the ray direction guarantees a usable intersection.
272
+ const axis = vec(directions.measure).normalize();
273
+ const planeNormal = axis.cross(axis.cross(ray.direction));
274
+ const usableNormal = planeNormal.lengthSquared() > 1e-12 ? planeNormal : perpendicularTo(axis);
275
+ const hit = intersectPlaneBothSides(ray, this.origin, tuple(usableNormal));
276
+ if (!hit)
277
+ return undefined;
278
+ return hit.subtract(this.origin).dot(axis);
279
+ }
280
+ handleDirections(handle) {
281
+ const x = this.toActiveSpace([1, 0, 0]);
282
+ const y = this.toActiveSpace([0, 1, 0]);
283
+ const z = this.toActiveSpace([0, 0, 1]);
284
+ switch (handle) {
285
+ case "x":
286
+ return { measure: x, ringNormal: x, reference: y, tangent: z };
287
+ case "y":
288
+ return { measure: y, ringNormal: y, reference: z, tangent: x };
289
+ case "z":
290
+ return { measure: z, ringNormal: z, reference: x, tangent: y };
291
+ case "xy":
292
+ return { measure: x, ringNormal: z, reference: x, tangent: y };
293
+ case "xz":
294
+ return { measure: x, ringNormal: y, reference: x, tangent: z };
295
+ case "yz":
296
+ return { measure: y, ringNormal: x, reference: y, tangent: z };
297
+ case "uniform":
298
+ // Uniform scale is driven by movement along a single consistent axis; only the
299
+ // delta matters, so the choice of axis just needs to be stable.
300
+ return { measure: x, ringNormal: z, reference: x, tangent: y };
301
+ }
302
+ }
303
+ applySnap(value) {
304
+ if (!this.settings.snapEnabled)
305
+ return value;
306
+ const increment = this.mode === "rotate"
307
+ ? (this.settings.rotationSnapDegrees * Math.PI) / 180
308
+ : this.mode === "scale" ? this.settings.scaleSnap : this.settings.positionSnap;
309
+ return Math.round(value / increment) * increment;
310
+ }
311
+ /** Rotates a gizmo-local direction into the active space. */
312
+ toActiveSpace(axis) {
313
+ if (this.settings.spaceMode === "world")
314
+ return axis;
315
+ return rotateByQuaternion(axis, this.orientation);
316
+ }
317
+ ringSegments(normal) {
318
+ const basis = orthonormalBasis(normal);
319
+ const steps = 32;
320
+ const radius = this.size;
321
+ const segments = [];
322
+ for (let step = 0; step < steps; step += 1) {
323
+ const a = (step / steps) * Math.PI * 2;
324
+ const b = ((step + 1) / steps) * Math.PI * 2;
325
+ segments.push({ start: tuple(this.ringPoint(basis, radius, a)), end: tuple(this.ringPoint(basis, radius, b)) });
326
+ }
327
+ return segments;
328
+ }
329
+ ringPoint(basis, radius, angle) {
330
+ return this.origin
331
+ .add(vec(basis.first).multiplyScalar(Math.cos(angle) * radius))
332
+ .add(vec(basis.second).multiplyScalar(Math.sin(angle) * radius));
333
+ }
334
+ uniformBoxSegments() {
335
+ const extent = this.size * 0.14;
336
+ const corners = [];
337
+ for (const sx of [-1, 1]) {
338
+ for (const sy of [-1, 1]) {
339
+ for (const sz of [-1, 1]) {
340
+ corners.push(this.origin.add(new Vector3(sx * extent, sy * extent, sz * extent)));
341
+ }
342
+ }
343
+ }
344
+ const edges = [
345
+ [0, 1], [0, 2], [0, 4], [1, 3], [1, 5], [2, 3], [2, 6], [3, 7], [4, 5], [4, 6], [5, 7], [6, 7]
346
+ ];
347
+ return edges.map(([from, to]) => ({ start: tuple(corners[from]), end: tuple(corners[to]) }));
348
+ }
349
+ pickSegments(ray, handle) {
350
+ let best;
351
+ for (const segment of handle.segments) {
352
+ const closest = closestApproach(ray, vec(segment.start), vec(segment.end));
353
+ if (!closest || closest.separation > this.pickTolerance)
354
+ continue;
355
+ if (!best || closest.rayDistance < best.distance) {
356
+ best = { handle: handle.handle, distance: closest.rayDistance, point: tuple(closest.point) };
357
+ }
358
+ }
359
+ return best;
360
+ }
361
+ pickRing(ray, handle) {
362
+ const normal = handle.direction;
363
+ if (!normal)
364
+ return undefined;
365
+ const hit = ray.intersectPlane(planeThrough(this.origin, normal));
366
+ if (!hit)
367
+ return undefined;
368
+ const radial = hit.subtract(this.origin).length();
369
+ // Only the band near the ring radius is pickable, so the interior stays free for
370
+ // scene selection instead of the ring behaving like a filled disc.
371
+ if (Math.abs(radial - this.size) > this.pickTolerance)
372
+ return undefined;
373
+ return { handle: handle.handle, distance: hit.subtract(ray.origin).length(), point: tuple(hit) };
374
+ }
375
+ }
376
+ function vec(value) {
377
+ return new Vector3(value[0], value[1], value[2]);
378
+ }
379
+ function tuple(value) {
380
+ return [value.x, value.y, value.z];
381
+ }
382
+ function planeThrough(origin, normal) {
383
+ const n = vec(normal).normalize();
384
+ return new Plane(n, -n.dot(origin));
385
+ }
386
+ /**
387
+ * Ray/plane intersection that accepts hits on either side of the plane.
388
+ *
389
+ * `Ray.intersectPlane` rejects negative distances, which is correct for scene picking
390
+ * but wrong for gizmo dragging: a pointer can legitimately end up on the far side of
391
+ * the drag plane mid-gesture, and rejecting that would freeze the drag.
392
+ */
393
+ function intersectPlaneBothSides(ray, origin, normal) {
394
+ const n = vec(normal).normalize();
395
+ const denominator = n.dot(ray.direction);
396
+ if (Math.abs(denominator) < 1e-9)
397
+ return undefined;
398
+ const distance = n.dot(origin.subtract(ray.origin)) / denominator;
399
+ if (!Number.isFinite(distance))
400
+ return undefined;
401
+ return ray.origin.add(ray.direction.multiplyScalar(distance));
402
+ }
403
+ /** Any unit vector perpendicular to `axis`. */
404
+ function perpendicularTo(axis) {
405
+ const reference = Math.abs(axis.y) > 0.9 ? new Vector3(1, 0, 0) : new Vector3(0, 1, 0);
406
+ return reference.cross(axis).normalize();
407
+ }
408
+ function orthonormalBasis(normal) {
409
+ const n = vec(normal).normalize();
410
+ // Choose a reference axis that is not parallel to the normal, otherwise the cross
411
+ // product degenerates to zero and the ring collapses.
412
+ const reference = Math.abs(n.y) > 0.9 ? new Vector3(1, 0, 0) : new Vector3(0, 1, 0);
413
+ const first = reference.cross(n).normalize();
414
+ const second = n.cross(first).normalize();
415
+ return { first: tuple(first), second: tuple(second) };
416
+ }
417
+ function rotateByQuaternion(axis, quaternion) {
418
+ const [qx, qy, qz, qw] = quaternion;
419
+ const length = Math.hypot(qx, qy, qz, qw) || 1;
420
+ const x = qx / length;
421
+ const y = qy / length;
422
+ const z = qz / length;
423
+ const w = qw / length;
424
+ const [vx, vy, vz] = axis;
425
+ // v + 2 * cross(q.xyz, cross(q.xyz, v) + q.w * v)
426
+ const tx = y * vz - z * vy + w * vx;
427
+ const ty = z * vx - x * vz + w * vy;
428
+ const tz = x * vy - y * vx + w * vz;
429
+ return [
430
+ vx + 2 * (y * tz - z * ty),
431
+ vy + 2 * (z * tx - x * tz),
432
+ vz + 2 * (x * ty - y * tx)
433
+ ];
434
+ }
435
+ /** Closest approach between a ray and a finite segment. */
436
+ function closestApproach(ray, start, end) {
437
+ const segmentDirection = end.subtract(start);
438
+ const segmentLength = segmentDirection.length();
439
+ if (segmentLength <= 1e-9)
440
+ return undefined;
441
+ const u = ray.direction;
442
+ const v = segmentDirection.multiplyScalar(1 / segmentLength);
443
+ const w0 = ray.origin.subtract(start);
444
+ const a = u.dot(u);
445
+ const b = u.dot(v);
446
+ const c = v.dot(v);
447
+ const d = u.dot(w0);
448
+ const e = v.dot(w0);
449
+ const denominator = a * c - b * b;
450
+ let rayT;
451
+ let segmentT;
452
+ if (Math.abs(denominator) < 1e-9) {
453
+ // Parallel: clamp to the segment start.
454
+ rayT = Math.max(0, -d / a);
455
+ segmentT = 0;
456
+ }
457
+ else {
458
+ rayT = (b * e - c * d) / denominator;
459
+ segmentT = (a * e - b * d) / denominator;
460
+ }
461
+ if (rayT < 0)
462
+ rayT = 0;
463
+ segmentT = Math.min(Math.max(segmentT, 0), segmentLength);
464
+ const rayPoint = ray.origin.add(u.multiplyScalar(rayT));
465
+ const segmentPoint = start.add(v.multiplyScalar(segmentT));
466
+ return { rayDistance: rayT, separation: rayPoint.subtract(segmentPoint).length(), point: segmentPoint };
467
+ }
468
+ //# sourceMappingURL=InteractiveTransformGizmo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractiveTransformGizmo.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/InteractiveTransformGizmo.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -23,6 +23,8 @@ export type { EditorImporterContribution, EditorPanelContribution, EditorPlugin,
23
23
  export { Gizmo } from "./Gizmo";
24
24
  export { DEFAULT_GIZMO_SETTINGS, normalizeGizmoSettings } from "./Gizmo";
25
25
  export type { GizmoAxis, GizmoDrag, GizmoHandle, GizmoHit, GizmoPivotMode, GizmoPlaneAxis, GizmoSettings, GizmoSpaceMode } from "./Gizmo";
26
+ export { InteractiveTransformGizmo } from "./InteractiveTransformGizmo";
27
+ export type { GizmoDragUpdate, GizmoHandleGeometry, GizmoPickResult, InteractiveGizmoMode, InteractiveGizmoState, InteractiveTransformGizmoOptions } from "./InteractiveTransformGizmo";
26
28
  export { HierarchyModel } from "./HierarchyModel";
27
29
  export type { HierarchyLikeNode, HierarchyNodeDescriptor } from "./HierarchyModel";
28
30
  export { InspectorModel } from "./InspectorModel";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -11,6 +11,7 @@ export { EditorStateModel, createMemoryEditorStateStorage } from "./EditorStateM
11
11
  export { EditorPluginHost } from "./EditorPluginHost.js";
12
12
  export { Gizmo } from "./Gizmo.js";
13
13
  export { DEFAULT_GIZMO_SETTINGS, normalizeGizmoSettings } from "./Gizmo.js";
14
+ export { InteractiveTransformGizmo } from "./InteractiveTransformGizmo.js";
14
15
  export { HierarchyModel } from "./HierarchyModel.js";
15
16
  export { InspectorModel } from "./InspectorModel.js";
16
17
  export { KeyframeEditor, encodeTimelineKeyframes, readTimelineKeyframes, timelineKeyframesByProperty } from "./KeyframeEditor.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aura3d/editor-runtime",
3
- "version": "1.4.5",
3
+ "version": "1.5.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -11,9 +11,9 @@
11
11
  "main": "./dist/index.js",
12
12
  "types": "./dist/index.d.ts",
13
13
  "dependencies": {
14
- "@aura3d/math": "1.4.5",
15
- "@aura3d/animation": "1.4.5",
16
- "@aura3d/scene": "1.4.5"
14
+ "@aura3d/math": "1.5.0",
15
+ "@aura3d/scene": "1.5.0",
16
+ "@aura3d/animation": "1.5.0"
17
17
  },
18
18
  "description": "Runtime editor command history, selection state, picking, inspector models, play-mode snapshots, material variants, and transform gizmos for Aura3D.",
19
19
  "keywords": [