@aura3d/editor-runtime 1.0.6

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.
Files changed (149) hide show
  1. package/README.md +20 -0
  2. package/dist/Command.d.ts +11 -0
  3. package/dist/Command.d.ts.map +1 -0
  4. package/dist/Command.js +2 -0
  5. package/dist/Command.js.map +1 -0
  6. package/dist/CommandHistory.d.ts +20 -0
  7. package/dist/CommandHistory.d.ts.map +1 -0
  8. package/dist/CommandHistory.js +124 -0
  9. package/dist/CommandHistory.js.map +1 -0
  10. package/dist/DiagnosticsOverlayModel.d.ts +30 -0
  11. package/dist/DiagnosticsOverlayModel.d.ts.map +1 -0
  12. package/dist/DiagnosticsOverlayModel.js +57 -0
  13. package/dist/DiagnosticsOverlayModel.js.map +1 -0
  14. package/dist/EditorPluginHost.d.ts +46 -0
  15. package/dist/EditorPluginHost.d.ts.map +1 -0
  16. package/dist/EditorPluginHost.js +57 -0
  17. package/dist/EditorPluginHost.js.map +1 -0
  18. package/dist/EditorRuntime.d.ts +95 -0
  19. package/dist/EditorRuntime.d.ts.map +1 -0
  20. package/dist/EditorRuntime.js +277 -0
  21. package/dist/EditorRuntime.js.map +1 -0
  22. package/dist/EditorStateModel.d.ts +93 -0
  23. package/dist/EditorStateModel.d.ts.map +1 -0
  24. package/dist/EditorStateModel.js +251 -0
  25. package/dist/EditorStateModel.js.map +1 -0
  26. package/dist/Gizmo.d.ts +43 -0
  27. package/dist/Gizmo.d.ts.map +1 -0
  28. package/dist/Gizmo.js +60 -0
  29. package/dist/Gizmo.js.map +1 -0
  30. package/dist/HierarchyModel.d.ts +21 -0
  31. package/dist/HierarchyModel.d.ts.map +1 -0
  32. package/dist/HierarchyModel.js +32 -0
  33. package/dist/HierarchyModel.js.map +1 -0
  34. package/dist/InspectorModel.d.ts +16 -0
  35. package/dist/InspectorModel.d.ts.map +1 -0
  36. package/dist/InspectorModel.js +53 -0
  37. package/dist/InspectorModel.js.map +1 -0
  38. package/dist/LocalizationAccessibilityFixtures.d.ts +70 -0
  39. package/dist/LocalizationAccessibilityFixtures.d.ts.map +1 -0
  40. package/dist/LocalizationAccessibilityFixtures.js +275 -0
  41. package/dist/LocalizationAccessibilityFixtures.js.map +1 -0
  42. package/dist/MaterialVariantWorkflow.d.ts +19 -0
  43. package/dist/MaterialVariantWorkflow.d.ts.map +1 -0
  44. package/dist/MaterialVariantWorkflow.js +82 -0
  45. package/dist/MaterialVariantWorkflow.js.map +1 -0
  46. package/dist/PickingService.d.ts +58 -0
  47. package/dist/PickingService.d.ts.map +1 -0
  48. package/dist/PickingService.js +119 -0
  49. package/dist/PickingService.js.map +1 -0
  50. package/dist/PlayModeBridge.d.ts +14 -0
  51. package/dist/PlayModeBridge.d.ts.map +1 -0
  52. package/dist/PlayModeBridge.js +23 -0
  53. package/dist/PlayModeBridge.js.map +1 -0
  54. package/dist/PrefabRegistry.d.ts +41 -0
  55. package/dist/PrefabRegistry.d.ts.map +1 -0
  56. package/dist/PrefabRegistry.js +119 -0
  57. package/dist/PrefabRegistry.js.map +1 -0
  58. package/dist/ProjectSerializer.d.ts +82 -0
  59. package/dist/ProjectSerializer.d.ts.map +1 -0
  60. package/dist/ProjectSerializer.js +131 -0
  61. package/dist/ProjectSerializer.js.map +1 -0
  62. package/dist/RotateGizmo.d.ts +5 -0
  63. package/dist/RotateGizmo.d.ts.map +1 -0
  64. package/dist/RotateGizmo.js +37 -0
  65. package/dist/RotateGizmo.js.map +1 -0
  66. package/dist/ScaleGizmo.d.ts +5 -0
  67. package/dist/ScaleGizmo.d.ts.map +1 -0
  68. package/dist/ScaleGizmo.js +42 -0
  69. package/dist/ScaleGizmo.js.map +1 -0
  70. package/dist/Selection.d.ts +20 -0
  71. package/dist/Selection.d.ts.map +1 -0
  72. package/dist/Selection.js +46 -0
  73. package/dist/Selection.js.map +1 -0
  74. package/dist/ShaderGraphModel.d.ts +69 -0
  75. package/dist/ShaderGraphModel.d.ts.map +1 -0
  76. package/dist/ShaderGraphModel.js +172 -0
  77. package/dist/ShaderGraphModel.js.map +1 -0
  78. package/dist/StaticExportRuntime.d.ts +13 -0
  79. package/dist/StaticExportRuntime.d.ts.map +1 -0
  80. package/dist/StaticExportRuntime.js +307 -0
  81. package/dist/StaticExportRuntime.js.map +1 -0
  82. package/dist/TimelineModel.d.ts +175 -0
  83. package/dist/TimelineModel.d.ts.map +1 -0
  84. package/dist/TimelineModel.js +335 -0
  85. package/dist/TimelineModel.js.map +1 -0
  86. package/dist/TimelineRuntimeBridge.d.ts +98 -0
  87. package/dist/TimelineRuntimeBridge.d.ts.map +1 -0
  88. package/dist/TimelineRuntimeBridge.js +186 -0
  89. package/dist/TimelineRuntimeBridge.js.map +1 -0
  90. package/dist/TranslateGizmo.d.ts +5 -0
  91. package/dist/TranslateGizmo.d.ts.map +1 -0
  92. package/dist/TranslateGizmo.js +41 -0
  93. package/dist/TranslateGizmo.js.map +1 -0
  94. package/dist/commands/CreateNodeCommand.d.ts +14 -0
  95. package/dist/commands/CreateNodeCommand.d.ts.map +1 -0
  96. package/dist/commands/CreateNodeCommand.js +16 -0
  97. package/dist/commands/CreateNodeCommand.js.map +1 -0
  98. package/dist/commands/DeleteNodeCommand.d.ts +13 -0
  99. package/dist/commands/DeleteNodeCommand.d.ts.map +1 -0
  100. package/dist/commands/DeleteNodeCommand.js +55 -0
  101. package/dist/commands/DeleteNodeCommand.js.map +1 -0
  102. package/dist/commands/ReparentNodeCommand.d.ts +24 -0
  103. package/dist/commands/ReparentNodeCommand.d.ts.map +1 -0
  104. package/dist/commands/ReparentNodeCommand.js +39 -0
  105. package/dist/commands/ReparentNodeCommand.js.map +1 -0
  106. package/dist/commands/SetPropertyCommand.d.ts +14 -0
  107. package/dist/commands/SetPropertyCommand.d.ts.map +1 -0
  108. package/dist/commands/SetPropertyCommand.js +43 -0
  109. package/dist/commands/SetPropertyCommand.js.map +1 -0
  110. package/dist/commands/TransformCommand.d.ts +42 -0
  111. package/dist/commands/TransformCommand.d.ts.map +1 -0
  112. package/dist/commands/TransformCommand.js +72 -0
  113. package/dist/commands/TransformCommand.js.map +1 -0
  114. package/dist/index.d.ts +49 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +29 -0
  117. package/dist/index.js.map +1 -0
  118. package/package.json +17 -0
  119. package/src/Command.ts +11 -0
  120. package/src/CommandHistory.ts +136 -0
  121. package/src/DiagnosticsOverlayModel.ts +85 -0
  122. package/src/EditorPluginHost.ts +106 -0
  123. package/src/EditorRuntime.ts +349 -0
  124. package/src/EditorStateModel.ts +336 -0
  125. package/src/Gizmo.ts +101 -0
  126. package/src/HierarchyModel.ts +57 -0
  127. package/src/InspectorModel.ts +71 -0
  128. package/src/LocalizationAccessibilityFixtures.ts +368 -0
  129. package/src/MaterialVariantWorkflow.ts +101 -0
  130. package/src/PickingService.ts +174 -0
  131. package/src/PlayModeBridge.ts +27 -0
  132. package/src/PrefabRegistry.ts +164 -0
  133. package/src/ProjectSerializer.ts +200 -0
  134. package/src/RotateGizmo.ts +35 -0
  135. package/src/ScaleGizmo.ts +40 -0
  136. package/src/Selection.ts +63 -0
  137. package/src/ShaderGraphModel.ts +254 -0
  138. package/src/StaticExportRuntime.ts +322 -0
  139. package/src/TimelineModel.ts +466 -0
  140. package/src/TimelineRuntimeBridge.ts +280 -0
  141. package/src/TranslateGizmo.ts +39 -0
  142. package/src/commands/CreateNodeCommand.ts +23 -0
  143. package/src/commands/DeleteNodeCommand.ts +74 -0
  144. package/src/commands/ReparentNodeCommand.ts +55 -0
  145. package/src/commands/SetPropertyCommand.ts +47 -0
  146. package/src/commands/TransformCommand.ts +107 -0
  147. package/src/index.ts +85 -0
  148. package/tests/editor-runtime.test.ts +597 -0
  149. package/tsconfig.json +7 -0
@@ -0,0 +1,277 @@
1
+ import { CommandHistory } from "./CommandHistory.js";
2
+ import { DiagnosticsOverlayModel } from "./DiagnosticsOverlayModel.js";
3
+ import { normalizeGizmoSettings } from "./Gizmo.js";
4
+ import { EditorStateModel } from "./EditorStateModel.js";
5
+ import { HierarchyModel } from "./HierarchyModel.js";
6
+ import { InspectorModel } from "./InspectorModel.js";
7
+ import { MaterialVariantWorkflow } from "./MaterialVariantWorkflow.js";
8
+ import { PickingService } from "./PickingService.js";
9
+ import { PrefabRegistry } from "./PrefabRegistry.js";
10
+ import { RotateGizmo } from "./RotateGizmo.js";
11
+ import { ScaleGizmo } from "./ScaleGizmo.js";
12
+ import { Selection } from "./Selection.js";
13
+ import { TranslateGizmo } from "./TranslateGizmo.js";
14
+ export class EditorRuntime {
15
+ selection = new Selection();
16
+ history = new CommandHistory();
17
+ inspector = new InspectorModel();
18
+ hierarchy = new HierarchyModel();
19
+ materialVariants = new MaterialVariantWorkflow();
20
+ diagnostics = new DiagnosticsOverlayModel();
21
+ prefabs = new PrefabRegistry();
22
+ state;
23
+ picking = new PickingService();
24
+ modeRef = "edit";
25
+ activeToolRef = "select";
26
+ gizmoSettingsRef;
27
+ disposed = false;
28
+ activePlayModeBridge = null;
29
+ constructor(options = {}) {
30
+ this.state = new EditorStateModel({ storage: options.stateStorage, storageKey: options.stateStorageKey });
31
+ this.activeToolRef = this.state.activeTool;
32
+ this.gizmoSettingsRef = this.state.gizmoSettings();
33
+ }
34
+ get mode() {
35
+ return this.modeRef;
36
+ }
37
+ get activeTool() {
38
+ return this.activeToolRef;
39
+ }
40
+ setTool(tool) {
41
+ this.assertEditable();
42
+ const normalized = tool.trim();
43
+ if (normalized.length === 0) {
44
+ throw new Error("EditorRuntime tool name cannot be empty.");
45
+ }
46
+ this.state.setActiveTool(normalized);
47
+ this.activeToolRef = normalized;
48
+ }
49
+ configureGizmos(settings) {
50
+ this.assertEditable();
51
+ this.gizmoSettingsRef = normalizeGizmoSettings({ ...this.gizmoSettingsRef, ...settings });
52
+ this.state.configureFromGizmoSettings(this.gizmoSettingsRef);
53
+ return this.gizmoSettingsRef;
54
+ }
55
+ gizmoSettings() {
56
+ this.assertAlive();
57
+ return this.gizmoSettingsRef;
58
+ }
59
+ configureViewportState(settings) {
60
+ this.assertEditable();
61
+ this.state.configureViewport(settings);
62
+ return this.state.snapshot();
63
+ }
64
+ editorStateSnapshot() {
65
+ this.assertAlive();
66
+ return this.state.snapshot();
67
+ }
68
+ setMode(mode) {
69
+ this.assertAlive();
70
+ if (this.activePlayModeBridge && mode === "edit") {
71
+ this.exitPlayMode();
72
+ return;
73
+ }
74
+ this.modeRef = mode;
75
+ }
76
+ pruneSelection(alive) {
77
+ this.assertEditable();
78
+ this.selection.prune(alive);
79
+ }
80
+ currentSelection() {
81
+ this.assertAlive();
82
+ return this.selection.current();
83
+ }
84
+ select(ids) {
85
+ this.assertEditable();
86
+ this.selection.set(ids);
87
+ }
88
+ clearSelection() {
89
+ this.assertEditable();
90
+ this.selection.clear();
91
+ }
92
+ async executeCommand(command, context) {
93
+ this.assertEditable();
94
+ await this.history.execute(command, context);
95
+ }
96
+ async executeTransaction(commands, context) {
97
+ this.assertEditable();
98
+ await this.history.executeTransaction(commands, context);
99
+ }
100
+ async undo(context) {
101
+ this.assertEditable();
102
+ await this.history.undo(context);
103
+ }
104
+ async redo(context) {
105
+ this.assertEditable();
106
+ await this.history.redo(context);
107
+ }
108
+ clearHistory() {
109
+ this.assertEditable();
110
+ this.history.clear();
111
+ }
112
+ inspect(target) {
113
+ this.assertAlive();
114
+ return this.inspector.describe(target);
115
+ }
116
+ async editInspectedProperty(target, path, value, context) {
117
+ this.assertEditable();
118
+ await this.history.execute(this.inspector.createSetPropertyCommand(target, path, value), context);
119
+ }
120
+ describeHierarchy(root) {
121
+ this.assertAlive();
122
+ return this.hierarchy.describe(root, new Set(this.selection.current()));
123
+ }
124
+ flattenHierarchy(root) {
125
+ this.assertAlive();
126
+ return this.hierarchy.flatten(root, new Set(this.selection.current()));
127
+ }
128
+ setPickTargets(targets) {
129
+ this.assertEditable();
130
+ this.picking.setTargets(targets);
131
+ }
132
+ configurePickingBuffer(width, height) {
133
+ this.assertEditable();
134
+ this.picking.resizePickingBuffer(width, height);
135
+ return this.picking.snapshot();
136
+ }
137
+ pick(ray) {
138
+ this.assertAlive();
139
+ return this.picking.pick(ray);
140
+ }
141
+ pickingSnapshot() {
142
+ this.assertAlive();
143
+ return this.picking.snapshot();
144
+ }
145
+ async translateTarget(target, input) {
146
+ this.assertEditable();
147
+ if (!target) {
148
+ return;
149
+ }
150
+ const gizmo = new TranslateGizmo(this.history, this.gizmoSettingsRef);
151
+ try {
152
+ gizmo.setTarget(target);
153
+ await gizmo.drag(input);
154
+ }
155
+ finally {
156
+ gizmo.dispose();
157
+ }
158
+ }
159
+ async rotateTarget(target, input) {
160
+ this.assertEditable();
161
+ if (!target) {
162
+ return;
163
+ }
164
+ const gizmo = new RotateGizmo(this.history, this.gizmoSettingsRef);
165
+ try {
166
+ gizmo.setTarget(target);
167
+ await gizmo.drag(input);
168
+ }
169
+ finally {
170
+ gizmo.dispose();
171
+ }
172
+ }
173
+ async scaleTarget(target, input) {
174
+ this.assertEditable();
175
+ if (!target) {
176
+ return;
177
+ }
178
+ const gizmo = new ScaleGizmo(this.history, this.gizmoSettingsRef);
179
+ try {
180
+ gizmo.setTarget(target);
181
+ await gizmo.drag(input);
182
+ }
183
+ finally {
184
+ gizmo.dispose();
185
+ }
186
+ }
187
+ updateDiagnostics(input) {
188
+ this.assertAlive();
189
+ return this.diagnostics.update(input);
190
+ }
191
+ diagnosticsSnapshot() {
192
+ this.assertAlive();
193
+ return this.diagnostics.snapshot();
194
+ }
195
+ registerMaterialVariants(assetId, variants, selected = null) {
196
+ this.assertEditable();
197
+ return this.materialVariants.register(assetId, variants, selected);
198
+ }
199
+ setMaterialVariant(assetId, variant) {
200
+ this.assertEditable();
201
+ return this.materialVariants.select(assetId, variant);
202
+ }
203
+ materialVariantState(assetId) {
204
+ this.assertAlive();
205
+ return this.materialVariants.state(assetId);
206
+ }
207
+ enterPlayMode(bridge) {
208
+ this.assertAlive();
209
+ if (this.modeRef !== "edit" || this.activePlayModeBridge) {
210
+ throw new Error("EditorRuntime can only enter play mode from edit mode.");
211
+ }
212
+ bridge.enter();
213
+ this.activePlayModeBridge = bridge;
214
+ this.modeRef = "play";
215
+ }
216
+ pausePlayMode() {
217
+ this.assertAlive();
218
+ if (this.modeRef !== "play") {
219
+ throw new Error("EditorRuntime can only pause while play mode is active.");
220
+ }
221
+ this.modeRef = "paused";
222
+ }
223
+ resumePlayMode() {
224
+ this.assertAlive();
225
+ if (this.modeRef !== "paused") {
226
+ throw new Error("EditorRuntime can only resume from paused play mode.");
227
+ }
228
+ this.modeRef = "play";
229
+ }
230
+ exitPlayMode({ restore = true } = {}) {
231
+ this.assertAlive();
232
+ this.activePlayModeBridge?.exit({ restore });
233
+ this.activePlayModeBridge = null;
234
+ this.modeRef = "edit";
235
+ }
236
+ snapshot() {
237
+ this.assertAlive();
238
+ return {
239
+ mode: this.modeRef,
240
+ activeTool: this.activeToolRef,
241
+ selection: this.selection.current(),
242
+ canUndo: this.history.canUndo,
243
+ canRedo: this.history.canRedo,
244
+ undoDepth: this.history.undoDepth,
245
+ redoDepth: this.history.redoDepth,
246
+ materialVariants: this.materialVariants.snapshot(),
247
+ prefabCount: this.prefabs.list().length,
248
+ picking: this.picking.snapshot(),
249
+ diagnostics: this.diagnostics.snapshot(),
250
+ gizmoSettings: this.gizmoSettingsRef,
251
+ editorState: this.state.snapshot()
252
+ };
253
+ }
254
+ dispose() {
255
+ this.activePlayModeBridge?.exit({ restore: true });
256
+ this.activePlayModeBridge = null;
257
+ this.selection.clear();
258
+ this.history.clear();
259
+ this.materialVariants.clear();
260
+ this.diagnostics.clear();
261
+ this.prefabs.clear();
262
+ this.activeToolRef = "select";
263
+ this.disposed = true;
264
+ }
265
+ assertAlive() {
266
+ if (this.disposed) {
267
+ throw new Error("EditorRuntime has been disposed");
268
+ }
269
+ }
270
+ assertEditable() {
271
+ this.assertAlive();
272
+ if (this.modeRef !== "edit") {
273
+ throw new Error("EditorRuntime edit commands can only run in edit mode.");
274
+ }
275
+ }
276
+ }
277
+ //# sourceMappingURL=EditorRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorRuntime.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/EditorRuntime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { type GizmoPivotMode, type GizmoSettings, type GizmoSpaceMode } from "./Gizmo";
2
+ export interface EditorStateStorage {
3
+ getItem(key: string): string | null;
4
+ setItem(key: string, value: string): void;
5
+ removeItem?(key: string): void;
6
+ }
7
+ export interface EditorViewportSettings {
8
+ readonly showGrid: boolean;
9
+ readonly gridSize: number;
10
+ readonly gridSubdivisions: number;
11
+ readonly showAxisGizmo: boolean;
12
+ readonly showStats: boolean;
13
+ readonly showWireframe: boolean;
14
+ readonly showBounds: boolean;
15
+ readonly showLights: boolean;
16
+ readonly showCameras: boolean;
17
+ readonly fov: number;
18
+ readonly near: number;
19
+ readonly far: number;
20
+ }
21
+ export interface EditorGridSnapSettings {
22
+ readonly snapToGrid: boolean;
23
+ readonly positionSnap: number;
24
+ readonly rotationSnapEnabled: boolean;
25
+ readonly rotationSnapDegrees: number;
26
+ readonly scaleSnapEnabled: boolean;
27
+ readonly scaleSnap: number;
28
+ }
29
+ export interface EditorStateSnapshot {
30
+ readonly activeTool: string;
31
+ readonly transformSpace: GizmoSpaceMode;
32
+ readonly pivotMode: GizmoPivotMode;
33
+ readonly viewport: EditorViewportSettings;
34
+ readonly gridSnap: EditorGridSnapSettings;
35
+ readonly persisted: boolean;
36
+ readonly storageKey: string;
37
+ readonly changeCount: number;
38
+ readonly evidence: {
39
+ readonly oldCodebasePort: true;
40
+ readonly persistentEditorState: boolean;
41
+ readonly viewportSettings: boolean;
42
+ readonly gridSnapSettings: boolean;
43
+ readonly transformSpacePivotMode: boolean;
44
+ };
45
+ }
46
+ export interface EditorStateChange {
47
+ readonly property: string;
48
+ readonly oldValue: unknown;
49
+ readonly newValue: unknown;
50
+ }
51
+ export interface EditorStateModelOptions {
52
+ readonly storage?: EditorStateStorage;
53
+ readonly storageKey?: string;
54
+ }
55
+ type Listener = (change: EditorStateChange) => void;
56
+ export declare class EditorStateModel {
57
+ private activeToolRef;
58
+ private transformSpaceRef;
59
+ private pivotModeRef;
60
+ private viewportRef;
61
+ private gridSnapRef;
62
+ private readonly listeners;
63
+ private readonly storageKey;
64
+ private readonly storage;
65
+ private persisted;
66
+ private changes;
67
+ constructor(options?: EditorStateModelOptions);
68
+ get activeTool(): string;
69
+ get transformSpace(): GizmoSpaceMode;
70
+ get pivotMode(): GizmoPivotMode;
71
+ setActiveTool(tool: string): void;
72
+ setTransformSpace(space: GizmoSpaceMode): void;
73
+ setPivotMode(mode: GizmoPivotMode): void;
74
+ configureViewport(settings: Partial<EditorViewportSettings>): EditorViewportSettings;
75
+ configureGridSnap(settings: Partial<EditorGridSnapSettings>): EditorGridSnapSettings;
76
+ configureFromGizmoSettings(settings: GizmoSettings): void;
77
+ gizmoSettings(): GizmoSettings;
78
+ snapPosition(value: number): number;
79
+ snapRotation(radians: number): number;
80
+ snapScale(value: number): number;
81
+ subscribe(listener: Listener): () => void;
82
+ snapshot(): EditorStateSnapshot;
83
+ reset(): void;
84
+ private setValue;
85
+ private emit;
86
+ private persist;
87
+ private load;
88
+ }
89
+ export declare function createMemoryEditorStateStorage(initial?: Record<string, string>): EditorStateStorage & {
90
+ readonly values: Record<string, string>;
91
+ };
92
+ export {};
93
+ //# sourceMappingURL=EditorStateModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorStateModel.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/EditorStateModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,251 @@
1
+ import { normalizeGizmoSettings } from "./Gizmo.js";
2
+ const defaultViewportSettings = {
3
+ showGrid: true,
4
+ gridSize: 10,
5
+ gridSubdivisions: 10,
6
+ showAxisGizmo: true,
7
+ showStats: true,
8
+ showWireframe: false,
9
+ showBounds: false,
10
+ showLights: true,
11
+ showCameras: true,
12
+ fov: 60,
13
+ near: 0.1,
14
+ far: 1000
15
+ };
16
+ const defaultGridSnapSettings = {
17
+ snapToGrid: true,
18
+ positionSnap: 1,
19
+ rotationSnapEnabled: false,
20
+ rotationSnapDegrees: 15,
21
+ scaleSnapEnabled: false,
22
+ scaleSnap: 0.1
23
+ };
24
+ export class EditorStateModel {
25
+ activeToolRef = "select";
26
+ transformSpaceRef = "world";
27
+ pivotModeRef = "center";
28
+ viewportRef = defaultViewportSettings;
29
+ gridSnapRef = defaultGridSnapSettings;
30
+ listeners = new Set();
31
+ storageKey;
32
+ storage;
33
+ persisted = false;
34
+ changes = 0;
35
+ constructor(options = {}) {
36
+ this.storage = options.storage;
37
+ this.storageKey = options.storageKey ?? "aura3d:editor-state:externalParity";
38
+ this.load();
39
+ }
40
+ get activeTool() {
41
+ return this.activeToolRef;
42
+ }
43
+ get transformSpace() {
44
+ return this.transformSpaceRef;
45
+ }
46
+ get pivotMode() {
47
+ return this.pivotModeRef;
48
+ }
49
+ setActiveTool(tool) {
50
+ const normalized = tool.trim();
51
+ if (normalized.length === 0)
52
+ throw new Error("Editor state active tool cannot be empty.");
53
+ this.setValue("activeTool", this.activeToolRef, normalized, (value) => {
54
+ this.activeToolRef = value;
55
+ });
56
+ }
57
+ setTransformSpace(space) {
58
+ this.setValue("transformSpace", this.transformSpaceRef, space, (value) => {
59
+ this.transformSpaceRef = value;
60
+ });
61
+ }
62
+ setPivotMode(mode) {
63
+ this.setValue("pivotMode", this.pivotModeRef, mode, (value) => {
64
+ this.pivotModeRef = value;
65
+ });
66
+ }
67
+ configureViewport(settings) {
68
+ const next = normalizeViewportSettings({ ...this.viewportRef, ...settings });
69
+ this.setValue("viewport", this.viewportRef, next, (value) => {
70
+ this.viewportRef = value;
71
+ });
72
+ return this.viewportRef;
73
+ }
74
+ configureGridSnap(settings) {
75
+ const next = normalizeGridSnapSettings({ ...this.gridSnapRef, ...settings });
76
+ this.setValue("gridSnap", this.gridSnapRef, next, (value) => {
77
+ this.gridSnapRef = value;
78
+ });
79
+ return this.gridSnapRef;
80
+ }
81
+ configureFromGizmoSettings(settings) {
82
+ this.setTransformSpace(settings.spaceMode);
83
+ this.setPivotMode(settings.pivotMode);
84
+ this.configureGridSnap({
85
+ snapToGrid: settings.snapEnabled,
86
+ positionSnap: settings.positionSnap,
87
+ rotationSnapEnabled: settings.snapEnabled,
88
+ rotationSnapDegrees: settings.rotationSnapDegrees,
89
+ scaleSnapEnabled: settings.snapEnabled,
90
+ scaleSnap: settings.scaleSnap
91
+ });
92
+ }
93
+ gizmoSettings() {
94
+ return normalizeGizmoSettings({
95
+ snapEnabled: this.gridSnapRef.snapToGrid,
96
+ positionSnap: this.gridSnapRef.positionSnap,
97
+ rotationSnapDegrees: this.gridSnapRef.rotationSnapDegrees,
98
+ scaleSnap: this.gridSnapRef.scaleSnap,
99
+ spaceMode: this.transformSpaceRef,
100
+ pivotMode: this.pivotModeRef
101
+ });
102
+ }
103
+ snapPosition(value) {
104
+ return this.gridSnapRef.snapToGrid ? snap(value, this.gridSnapRef.positionSnap) : value;
105
+ }
106
+ snapRotation(radians) {
107
+ return this.gridSnapRef.rotationSnapEnabled ? snap(radians, this.gridSnapRef.rotationSnapDegrees * Math.PI / 180) : radians;
108
+ }
109
+ snapScale(value) {
110
+ return this.gridSnapRef.scaleSnapEnabled ? snap(value, this.gridSnapRef.scaleSnap) : value;
111
+ }
112
+ subscribe(listener) {
113
+ this.listeners.add(listener);
114
+ return () => this.listeners.delete(listener);
115
+ }
116
+ snapshot() {
117
+ return {
118
+ activeTool: this.activeToolRef,
119
+ transformSpace: this.transformSpaceRef,
120
+ pivotMode: this.pivotModeRef,
121
+ viewport: this.viewportRef,
122
+ gridSnap: this.gridSnapRef,
123
+ persisted: this.persisted,
124
+ storageKey: this.storageKey,
125
+ changeCount: this.changes,
126
+ evidence: {
127
+ oldCodebasePort: true,
128
+ persistentEditorState: this.persisted,
129
+ viewportSettings: this.viewportRef.gridSize > 0 && this.viewportRef.fov > 0 && this.viewportRef.far > this.viewportRef.near,
130
+ gridSnapSettings: this.gridSnapRef.positionSnap > 0 && this.gridSnapRef.rotationSnapDegrees > 0 && this.gridSnapRef.scaleSnap > 0,
131
+ transformSpacePivotMode: Boolean(this.transformSpaceRef) && Boolean(this.pivotModeRef)
132
+ }
133
+ };
134
+ }
135
+ reset() {
136
+ this.activeToolRef = "select";
137
+ this.transformSpaceRef = "world";
138
+ this.pivotModeRef = "center";
139
+ this.viewportRef = defaultViewportSettings;
140
+ this.gridSnapRef = defaultGridSnapSettings;
141
+ this.changes += 1;
142
+ this.persist();
143
+ this.emit({ property: "reset", oldValue: null, newValue: this.snapshot() });
144
+ }
145
+ setValue(property, current, next, apply) {
146
+ if (deepEqual(current, next))
147
+ return;
148
+ apply(next);
149
+ this.changes += 1;
150
+ this.persist();
151
+ this.emit({ property, oldValue: current, newValue: next });
152
+ }
153
+ emit(change) {
154
+ for (const listener of this.listeners)
155
+ listener(change);
156
+ }
157
+ persist() {
158
+ if (!this.storage)
159
+ return;
160
+ this.storage.setItem(this.storageKey, JSON.stringify({
161
+ activeTool: this.activeToolRef,
162
+ transformSpace: this.transformSpaceRef,
163
+ pivotMode: this.pivotModeRef,
164
+ viewport: this.viewportRef,
165
+ gridSnap: this.gridSnapRef
166
+ }));
167
+ this.persisted = true;
168
+ }
169
+ load() {
170
+ if (!this.storage)
171
+ return;
172
+ const text = this.storage.getItem(this.storageKey);
173
+ if (!text)
174
+ return;
175
+ try {
176
+ const parsed = JSON.parse(text);
177
+ if (!isRecord(parsed))
178
+ return;
179
+ this.activeToolRef = typeof parsed.activeTool === "string" && parsed.activeTool.trim().length > 0 ? parsed.activeTool : this.activeToolRef;
180
+ this.transformSpaceRef = parsed.transformSpace === "local" ? "local" : "world";
181
+ this.pivotModeRef = parsed.pivotMode === "active" || parsed.pivotMode === "individual" ? parsed.pivotMode : "center";
182
+ this.viewportRef = normalizeViewportSettings({ ...this.viewportRef, ...(isRecord(parsed.viewport) ? parsed.viewport : {}) });
183
+ this.gridSnapRef = normalizeGridSnapSettings({ ...this.gridSnapRef, ...(isRecord(parsed.gridSnap) ? parsed.gridSnap : {}) });
184
+ this.persisted = true;
185
+ }
186
+ catch {
187
+ this.persisted = false;
188
+ }
189
+ }
190
+ }
191
+ export function createMemoryEditorStateStorage(initial = {}) {
192
+ const values = { ...initial };
193
+ return {
194
+ values,
195
+ getItem(key) {
196
+ return values[key] ?? null;
197
+ },
198
+ setItem(key, value) {
199
+ values[key] = value;
200
+ },
201
+ removeItem(key) {
202
+ delete values[key];
203
+ }
204
+ };
205
+ }
206
+ function normalizeViewportSettings(settings) {
207
+ return {
208
+ showGrid: booleanOr(settings.showGrid, defaultViewportSettings.showGrid),
209
+ gridSize: positive(settings.gridSize, defaultViewportSettings.gridSize),
210
+ gridSubdivisions: Math.max(1, Math.round(positive(settings.gridSubdivisions, defaultViewportSettings.gridSubdivisions))),
211
+ showAxisGizmo: booleanOr(settings.showAxisGizmo, defaultViewportSettings.showAxisGizmo),
212
+ showStats: booleanOr(settings.showStats, defaultViewportSettings.showStats),
213
+ showWireframe: booleanOr(settings.showWireframe, defaultViewportSettings.showWireframe),
214
+ showBounds: booleanOr(settings.showBounds, defaultViewportSettings.showBounds),
215
+ showLights: booleanOr(settings.showLights, defaultViewportSettings.showLights),
216
+ showCameras: booleanOr(settings.showCameras, defaultViewportSettings.showCameras),
217
+ fov: clamp(positive(settings.fov, defaultViewportSettings.fov), 10, 140),
218
+ near: positive(settings.near, defaultViewportSettings.near),
219
+ far: Math.max(positive(settings.far, defaultViewportSettings.far), positive(settings.near, defaultViewportSettings.near) + 1)
220
+ };
221
+ }
222
+ function normalizeGridSnapSettings(settings) {
223
+ return {
224
+ snapToGrid: booleanOr(settings.snapToGrid, defaultGridSnapSettings.snapToGrid),
225
+ positionSnap: positive(settings.positionSnap, defaultGridSnapSettings.positionSnap),
226
+ rotationSnapEnabled: booleanOr(settings.rotationSnapEnabled, defaultGridSnapSettings.rotationSnapEnabled),
227
+ rotationSnapDegrees: positive(settings.rotationSnapDegrees, defaultGridSnapSettings.rotationSnapDegrees),
228
+ scaleSnapEnabled: booleanOr(settings.scaleSnapEnabled, defaultGridSnapSettings.scaleSnapEnabled),
229
+ scaleSnap: positive(settings.scaleSnap, defaultGridSnapSettings.scaleSnap)
230
+ };
231
+ }
232
+ function booleanOr(value, fallback) {
233
+ return typeof value === "boolean" ? value : fallback;
234
+ }
235
+ function positive(value, fallback) {
236
+ const number = Number(value);
237
+ return Number.isFinite(number) && number > 0 ? number : fallback;
238
+ }
239
+ function clamp(value, min, max) {
240
+ return Math.max(min, Math.min(max, value));
241
+ }
242
+ function snap(value, increment) {
243
+ return Math.round(value / increment) * increment;
244
+ }
245
+ function deepEqual(left, right) {
246
+ return JSON.stringify(left) === JSON.stringify(right);
247
+ }
248
+ function isRecord(value) {
249
+ return typeof value === "object" && value !== null && !Array.isArray(value);
250
+ }
251
+ //# sourceMappingURL=EditorStateModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorStateModel.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/EditorStateModel.ts"],"names":[],"mappings":"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"}