@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
package/README.md ADDED
@@ -0,0 +1,20 @@
1
+ # @aura3d/editor-runtime
2
+
3
+ `@aura3d/editor-runtime` owns editor command history, selection state, picking, inspector models, play-mode snapshots, and transform gizmos for runtime editor workflows.
4
+
5
+ ## Public API
6
+
7
+ - `EditorRuntime`, `EditorMode`: mode switching, public selection methods, command execution, inspector edit execution, picking, translate-gizmo drag execution, diagnostics snapshots, material variant workflow ownership, and disposal.
8
+ - `Command`, `CommandHistory`, `CommandContext`: execute/undo/redo contracts with rollback on failed command execution.
9
+ - `Selection`: ordered selection state and listener notifications.
10
+ - `PickingService`: deterministic target hit selection and pick result ordering.
11
+ - `InspectorModel`: editable inspector property projection and typed set-property command creation.
12
+ - `MaterialVariantWorkflow`: editor-owned glTF/material variant selection state and render-resource option projection.
13
+ - `PlayModeBridge`: snapshot capture/restore for edit/play mode boundaries.
14
+ - `Gizmo`, `TranslateGizmo`, `RotateGizmo`, `ScaleGizmo`: transform handles, hit testing, and drag application.
15
+ - `createStaticExportHtml`, `createStaticExportRuntime`: package-owned static export shell/runtime generation for checked editor-authored project smoke tests without loading the editor app.
16
+ - `CreateNodeCommand`, `DeleteNodeCommand`, `SetPropertyCommand`, `TransformCommand`: built-in editor commands.
17
+
18
+ ## Verification
19
+
20
+ Editor selection, command rollback, undo/redo, inspector edits, material variant workflow selection, picking, play-mode snapshots, translate/rotate/scale gizmos, keyboard shortcut contracts, browser editor pixels, editor public-runtime boundary enforcement, editor-authored provenance, and package-owned static export runtime generation are covered by `tests/unit/workstream5-input-audio-scripting-editor.test.ts`, `packages/editor-runtime/tests/editor-runtime.test.ts`, `tests/unit/editor/project-serializer.test.ts`, `tests/unit/editor/public-runtime-boundary.test.ts`, `tests/integration/editor-authored-project-replay.test.ts`, `tests/browser/editor-browser.spec.ts`, and `tests/visual/editor-app-pixels.spec.ts`. Export and import consistency is covered by `pnpm verify:exports` and `pnpm verify:imports`.
@@ -0,0 +1,11 @@
1
+ export interface CommandContext {
2
+ readonly services?: ReadonlyMap<string, unknown>;
3
+ }
4
+ export interface Command {
5
+ readonly name: string;
6
+ execute(context?: CommandContext): void | Promise<void>;
7
+ undo(context?: CommandContext): void | Promise<void>;
8
+ canMerge?(next: Command): boolean;
9
+ merge?(next: Command): Command;
10
+ }
11
+ //# sourceMappingURL=Command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/Command.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IAClC,KAAK,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Command.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/Command.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { Command, CommandContext } from "./Command";
2
+ export declare class CommandTransactionError extends Error {
3
+ readonly cause: unknown;
4
+ readonly rollbackErrors: readonly unknown[];
5
+ constructor(cause: unknown, rollbackErrors: readonly unknown[]);
6
+ }
7
+ export declare class CommandHistory {
8
+ private readonly undoStack;
9
+ private readonly redoStack;
10
+ get canUndo(): boolean;
11
+ get canRedo(): boolean;
12
+ get undoDepth(): number;
13
+ get redoDepth(): number;
14
+ execute(command: Command, context?: CommandContext): Promise<void>;
15
+ executeTransaction(commands: readonly Command[], context?: CommandContext): Promise<void>;
16
+ undo(context?: CommandContext): Promise<void>;
17
+ redo(context?: CommandContext): Promise<void>;
18
+ clear(): void;
19
+ }
20
+ //# sourceMappingURL=CommandHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandHistory.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/CommandHistory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEzD,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,SAAS,OAAO,EAAE,CAAC;gBAEhC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,OAAO,EAAE;CAM/D;AAoBD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAE3C,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAEK,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBlE,kBAAkB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzF,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAc7C,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnD,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,124 @@
1
+ export class CommandTransactionError extends Error {
2
+ cause;
3
+ rollbackErrors;
4
+ constructor(cause, rollbackErrors) {
5
+ super("Command transaction failed and rollback reported errors.");
6
+ this.name = "CommandTransactionError";
7
+ this.cause = cause;
8
+ this.rollbackErrors = rollbackErrors;
9
+ }
10
+ }
11
+ class CompositeCommand {
12
+ commands;
13
+ name;
14
+ constructor(commands) {
15
+ this.commands = commands;
16
+ this.name = commands.map((command) => command.name).join(", ");
17
+ }
18
+ async execute(context) {
19
+ await executeCommandsAtomically(this.commands, context);
20
+ }
21
+ async undo(context) {
22
+ for (const command of [...this.commands].reverse()) {
23
+ await command.undo(context);
24
+ }
25
+ }
26
+ }
27
+ export class CommandHistory {
28
+ undoStack = [];
29
+ redoStack = [];
30
+ get canUndo() {
31
+ return this.undoStack.length > 0;
32
+ }
33
+ get canRedo() {
34
+ return this.redoStack.length > 0;
35
+ }
36
+ get undoDepth() {
37
+ return this.undoStack.length;
38
+ }
39
+ get redoDepth() {
40
+ return this.redoStack.length;
41
+ }
42
+ async execute(command, context) {
43
+ try {
44
+ await command.execute(context);
45
+ }
46
+ catch (error) {
47
+ await Promise.resolve(command.undo(context)).catch(() => undefined);
48
+ throw error;
49
+ }
50
+ const previous = this.undoStack[this.undoStack.length - 1];
51
+ if (previous?.canMerge?.(command) && previous.merge) {
52
+ this.undoStack[this.undoStack.length - 1] = previous.merge(command);
53
+ }
54
+ else {
55
+ this.undoStack.push(command);
56
+ }
57
+ this.redoStack.length = 0;
58
+ }
59
+ async executeTransaction(commands, context) {
60
+ if (commands.length === 0) {
61
+ return;
62
+ }
63
+ await executeCommandsAtomically(commands, context);
64
+ this.undoStack.push(new CompositeCommand([...commands]));
65
+ this.redoStack.length = 0;
66
+ }
67
+ async undo(context) {
68
+ const command = this.undoStack.pop();
69
+ if (!command) {
70
+ return;
71
+ }
72
+ try {
73
+ await command.undo(context);
74
+ }
75
+ catch (error) {
76
+ this.undoStack.push(command);
77
+ throw error;
78
+ }
79
+ this.redoStack.push(command);
80
+ }
81
+ async redo(context) {
82
+ const command = this.redoStack.pop();
83
+ if (!command) {
84
+ return;
85
+ }
86
+ try {
87
+ await command.execute(context);
88
+ }
89
+ catch (error) {
90
+ this.redoStack.push(command);
91
+ throw error;
92
+ }
93
+ this.undoStack.push(command);
94
+ }
95
+ clear() {
96
+ this.undoStack.length = 0;
97
+ this.redoStack.length = 0;
98
+ }
99
+ }
100
+ async function executeCommandsAtomically(commands, context) {
101
+ const executed = [];
102
+ try {
103
+ for (const command of commands) {
104
+ await command.execute(context);
105
+ executed.push(command);
106
+ }
107
+ }
108
+ catch (error) {
109
+ const rollbackErrors = [];
110
+ for (const command of executed.reverse()) {
111
+ try {
112
+ await command.undo(context);
113
+ }
114
+ catch (rollbackError) {
115
+ rollbackErrors.push(rollbackError);
116
+ }
117
+ }
118
+ if (rollbackErrors.length > 0) {
119
+ throw new CommandTransactionError(error, rollbackErrors);
120
+ }
121
+ throw error;
122
+ }
123
+ }
124
+ //# sourceMappingURL=CommandHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandHistory.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/CommandHistory.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACvC,KAAK,CAAU;IACf,cAAc,CAAqB;IAE5C,YAAY,KAAc,EAAE,cAAkC;QAC5D,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;CACF;AAED,MAAM,gBAAgB;IAGS;IAFpB,IAAI,CAAS;IAEtB,YAA6B,QAA4B;QAA5B,aAAQ,GAAR,QAAQ,CAAoB;QACvD,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAwB;QACpC,MAAM,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAwB;QACjC,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACnD,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,cAAc;IACR,SAAS,GAAc,EAAE,CAAC;IAC1B,SAAS,GAAc,EAAE,CAAC;IAE3C,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAgB,EAAE,OAAwB;QACtD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACpE,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3D,IAAI,QAAQ,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAA4B,EAAE,OAAwB;QAC7E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,MAAM,yBAAyB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAwB;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAwB;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5B,CAAC;CACF;AAED,KAAK,UAAU,yBAAyB,CAAC,QAA4B,EAAE,OAAwB;IAC7F,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,cAAc,GAAc,EAAE,CAAC;QACrC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,aAAa,EAAE,CAAC;gBACvB,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,uBAAuB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,30 @@
1
+ export interface EditorDiagnosticsResource {
2
+ readonly id: string;
3
+ readonly label: string;
4
+ readonly kind: "scene-node" | "asset" | "material" | "shader" | "script";
5
+ readonly status: "ok" | "warning" | "error";
6
+ readonly detail?: string;
7
+ }
8
+ export interface EditorDiagnosticsInput {
9
+ readonly frameTimeMs: number;
10
+ readonly drawCalls: number;
11
+ readonly triangleCount?: number;
12
+ readonly nodeCount: number;
13
+ readonly assetCount: number;
14
+ readonly physicsBodies: number;
15
+ readonly resources?: readonly EditorDiagnosticsResource[];
16
+ }
17
+ export interface EditorDiagnosticsSnapshot extends EditorDiagnosticsInput {
18
+ readonly warnings: number;
19
+ readonly errors: number;
20
+ readonly shaderWarnings: readonly EditorDiagnosticsResource[];
21
+ readonly resourceWarnings: readonly EditorDiagnosticsResource[];
22
+ }
23
+ export declare class DiagnosticsOverlayModel {
24
+ private snapshotRef;
25
+ update(input: EditorDiagnosticsInput): EditorDiagnosticsSnapshot;
26
+ snapshot(): EditorDiagnosticsSnapshot;
27
+ clear(): void;
28
+ private createSnapshot;
29
+ }
30
+ //# sourceMappingURL=DiagnosticsOverlayModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiagnosticsOverlayModel.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/DiagnosticsOverlayModel.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACzE,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC3D;AAED,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAC9D,QAAQ,CAAC,gBAAgB,EAAE,SAAS,yBAAyB,EAAE,CAAC;CACjE;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,WAAW,CAOhB;IAEH,MAAM,CAAC,KAAK,EAAE,sBAAsB,GAAG,yBAAyB;IAoBhE,QAAQ,IAAI,yBAAyB;IAIrC,KAAK,IAAI,IAAI;IAWb,OAAO,CAAC,cAAc;CAcvB"}
@@ -0,0 +1,57 @@
1
+ export class DiagnosticsOverlayModel {
2
+ snapshotRef = this.createSnapshot({
3
+ frameTimeMs: 0,
4
+ drawCalls: 0,
5
+ nodeCount: 0,
6
+ assetCount: 0,
7
+ physicsBodies: 0,
8
+ resources: []
9
+ });
10
+ update(input) {
11
+ if (!Number.isFinite(input.frameTimeMs) || input.frameTimeMs < 0) {
12
+ throw new Error("Editor diagnostics frame time must be a non-negative finite number.");
13
+ }
14
+ if (!Number.isInteger(input.drawCalls) || input.drawCalls < 0) {
15
+ throw new Error("Editor diagnostics draw calls must be a non-negative integer.");
16
+ }
17
+ if (!Number.isInteger(input.nodeCount) || input.nodeCount < 0) {
18
+ throw new Error("Editor diagnostics node count must be a non-negative integer.");
19
+ }
20
+ if (!Number.isInteger(input.assetCount) || input.assetCount < 0) {
21
+ throw new Error("Editor diagnostics asset count must be a non-negative integer.");
22
+ }
23
+ if (!Number.isInteger(input.physicsBodies) || input.physicsBodies < 0) {
24
+ throw new Error("Editor diagnostics physics body count must be a non-negative integer.");
25
+ }
26
+ this.snapshotRef = this.createSnapshot(input);
27
+ return this.snapshotRef;
28
+ }
29
+ snapshot() {
30
+ return this.snapshotRef;
31
+ }
32
+ clear() {
33
+ this.snapshotRef = this.createSnapshot({
34
+ frameTimeMs: 0,
35
+ drawCalls: 0,
36
+ nodeCount: 0,
37
+ assetCount: 0,
38
+ physicsBodies: 0,
39
+ resources: []
40
+ });
41
+ }
42
+ createSnapshot(input) {
43
+ const resources = [...(input.resources ?? [])];
44
+ const warnings = resources.filter((resource) => resource.status === "warning").length;
45
+ const errors = resources.filter((resource) => resource.status === "error").length;
46
+ return {
47
+ ...input,
48
+ triangleCount: input.triangleCount ?? 0,
49
+ resources,
50
+ warnings,
51
+ errors,
52
+ shaderWarnings: resources.filter((resource) => resource.kind === "shader" && resource.status !== "ok"),
53
+ resourceWarnings: resources.filter((resource) => resource.kind !== "shader" && resource.status !== "ok")
54
+ };
55
+ }
56
+ }
57
+ //# sourceMappingURL=DiagnosticsOverlayModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiagnosticsOverlayModel.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/DiagnosticsOverlayModel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ export interface EditorPanelContribution {
2
+ readonly id: string;
3
+ readonly title: string;
4
+ readonly order?: number;
5
+ }
6
+ export interface EditorToolContribution {
7
+ readonly id: string;
8
+ readonly title: string;
9
+ readonly cursor?: string;
10
+ }
11
+ export interface EditorImporterContribution {
12
+ readonly id: string;
13
+ readonly label: string;
14
+ readonly extensions: readonly string[];
15
+ }
16
+ export interface EditorScriptingNodeContribution {
17
+ readonly id: string;
18
+ readonly title: string;
19
+ readonly category: string;
20
+ }
21
+ export interface EditorPlugin {
22
+ readonly id: string;
23
+ readonly name: string;
24
+ readonly panels?: readonly EditorPanelContribution[];
25
+ readonly tools?: readonly EditorToolContribution[];
26
+ readonly importers?: readonly EditorImporterContribution[];
27
+ readonly scriptingNodes?: readonly EditorScriptingNodeContribution[];
28
+ }
29
+ export interface EditorPluginSnapshot {
30
+ readonly plugins: readonly EditorPlugin[];
31
+ readonly panels: readonly EditorPanelContribution[];
32
+ readonly tools: readonly EditorToolContribution[];
33
+ readonly importers: readonly EditorImporterContribution[];
34
+ readonly scriptingNodes: readonly EditorScriptingNodeContribution[];
35
+ }
36
+ export declare class EditorPluginHost {
37
+ private readonly plugins;
38
+ register(plugin: EditorPlugin): void;
39
+ unregister(id: string): boolean;
40
+ get(id: string): EditorPlugin | undefined;
41
+ list(): readonly EditorPlugin[];
42
+ snapshot(): EditorPluginSnapshot;
43
+ clear(): void;
44
+ private assertUnique;
45
+ }
46
+ //# sourceMappingURL=EditorPluginHost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorPluginHost.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/EditorPluginHost.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC3D,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,+BAA+B,EAAE,CAAC;CACtE;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,uBAAuB,EAAE,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC1D,QAAQ,CAAC,cAAc,EAAE,SAAS,+BAA+B,EAAE,CAAC;CACrE;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAE3D,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAYpC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIzC,IAAI,IAAI,SAAS,YAAY,EAAE;IAI/B,QAAQ,IAAI,oBAAoB;IAWhC,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,YAAY;CAUrB"}
@@ -0,0 +1,57 @@
1
+ export class EditorPluginHost {
2
+ plugins = new Map();
3
+ register(plugin) {
4
+ const id = normalizeId(plugin.id, "plugin");
5
+ if (this.plugins.has(id)) {
6
+ throw new Error(`Editor plugin already registered: ${id}`);
7
+ }
8
+ this.assertUnique(plugin.panels ?? [], "panel", id);
9
+ this.assertUnique(plugin.tools ?? [], "tool", id);
10
+ this.assertUnique(plugin.importers ?? [], "importer", id);
11
+ this.assertUnique(plugin.scriptingNodes ?? [], "scripting node", id);
12
+ this.plugins.set(id, { ...plugin, id });
13
+ }
14
+ unregister(id) {
15
+ return this.plugins.delete(normalizeId(id, "plugin"));
16
+ }
17
+ get(id) {
18
+ return this.plugins.get(normalizeId(id, "plugin"));
19
+ }
20
+ list() {
21
+ return [...this.plugins.values()];
22
+ }
23
+ snapshot() {
24
+ const plugins = this.list();
25
+ return {
26
+ plugins,
27
+ panels: sortByOrder(plugins.flatMap((plugin) => plugin.panels ?? [])),
28
+ tools: sortByOrder(plugins.flatMap((plugin) => plugin.tools ?? [])),
29
+ importers: plugins.flatMap((plugin) => plugin.importers ?? []),
30
+ scriptingNodes: plugins.flatMap((plugin) => plugin.scriptingNodes ?? [])
31
+ };
32
+ }
33
+ clear() {
34
+ this.plugins.clear();
35
+ }
36
+ assertUnique(contributions, kind, pluginId) {
37
+ const seen = new Set();
38
+ for (const contribution of contributions) {
39
+ const id = normalizeId(contribution.id, kind);
40
+ if (seen.has(id)) {
41
+ throw new Error(`Editor plugin ${pluginId} declares duplicate ${kind}: ${id}`);
42
+ }
43
+ seen.add(id);
44
+ }
45
+ }
46
+ }
47
+ function normalizeId(id, kind) {
48
+ const normalized = id.trim();
49
+ if (!/^[a-z0-9][a-z0-9.-]*$/i.test(normalized)) {
50
+ throw new Error(`Editor ${kind} id must be non-empty and use letters, numbers, dots, or dashes.`);
51
+ }
52
+ return normalized;
53
+ }
54
+ function sortByOrder(items) {
55
+ return [...items].sort((left, right) => (left.order ?? 0) - (right.order ?? 0) || left.id.localeCompare(right.id));
56
+ }
57
+ //# sourceMappingURL=EditorPluginHost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorPluginHost.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/EditorPluginHost.ts"],"names":[],"mappings":"AAyCA,MAAM,OAAO,gBAAgB;IACV,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE3D,QAAQ,CAAC,MAAoB;QAC3B,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,QAAQ;QACN,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,OAAO;YACL,OAAO;YACP,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACrE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YACnE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;YAC9D,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC;SACzE,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAEO,YAAY,CAAC,aAAiD,EAAE,IAAY,EAAE,QAAgB;QACpG,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,EAAE,GAAG,WAAW,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,uBAAuB,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC;CACF;AAED,SAAS,WAAW,CAAC,EAAU,EAAE,IAAY;IAC3C,MAAM,UAAU,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,kEAAkE,CAAC,CAAC;IACpG,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,WAAW,CAA6D,KAAmB;IAClG,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACrH,CAAC"}
@@ -0,0 +1,95 @@
1
+ import type { Ray } from "@aura3d/math";
2
+ import { CommandHistory } from "./CommandHistory";
3
+ import type { Command, CommandContext } from "./Command";
4
+ import { DiagnosticsOverlayModel, type EditorDiagnosticsInput, type EditorDiagnosticsSnapshot } from "./DiagnosticsOverlayModel";
5
+ import { type GizmoDrag, type GizmoSettings } from "./Gizmo";
6
+ import { EditorStateModel, type EditorStateSnapshot, type EditorStateStorage, type EditorViewportSettings } from "./EditorStateModel";
7
+ import { HierarchyModel, type HierarchyLikeNode, type HierarchyNodeDescriptor } from "./HierarchyModel";
8
+ import { InspectorModel, type InspectorEditableValue, type InspectorProperty } from "./InspectorModel";
9
+ import { MaterialVariantWorkflow, type MaterialVariantState } from "./MaterialVariantWorkflow";
10
+ import type { PlayModeBridge } from "./PlayModeBridge";
11
+ import { type EditorPickHit, type EditorPickTarget, type EditorPickingEvidenceSnapshot } from "./PickingService";
12
+ import { PrefabRegistry, type EditorPrefabNodeBase } from "./PrefabRegistry";
13
+ import { Selection, type SelectionId } from "./Selection";
14
+ import type { TransformTarget } from "./commands/TransformCommand";
15
+ export type EditorMode = "edit" | "play" | "paused";
16
+ export interface EditorRuntimeSnapshot {
17
+ readonly mode: EditorMode;
18
+ readonly activeTool: string;
19
+ readonly selection: readonly (string | number)[];
20
+ readonly canUndo: boolean;
21
+ readonly canRedo: boolean;
22
+ readonly undoDepth: number;
23
+ readonly redoDepth: number;
24
+ readonly materialVariants: readonly MaterialVariantState[];
25
+ readonly prefabCount: number;
26
+ readonly picking: EditorPickingEvidenceSnapshot;
27
+ readonly diagnostics: EditorDiagnosticsSnapshot;
28
+ readonly gizmoSettings: GizmoSettings;
29
+ readonly editorState: EditorStateSnapshot;
30
+ }
31
+ export interface EditorRuntimeOptions {
32
+ readonly stateStorage?: EditorStateStorage;
33
+ readonly stateStorageKey?: string;
34
+ }
35
+ export declare class EditorRuntime {
36
+ readonly selection: Selection;
37
+ readonly history: CommandHistory;
38
+ readonly inspector: InspectorModel;
39
+ readonly hierarchy: HierarchyModel;
40
+ readonly materialVariants: MaterialVariantWorkflow;
41
+ readonly diagnostics: DiagnosticsOverlayModel;
42
+ readonly prefabs: PrefabRegistry<EditorPrefabNodeBase>;
43
+ readonly state: EditorStateModel;
44
+ private readonly picking;
45
+ private modeRef;
46
+ private activeToolRef;
47
+ private gizmoSettingsRef;
48
+ private disposed;
49
+ private activePlayModeBridge;
50
+ constructor(options?: EditorRuntimeOptions);
51
+ get mode(): EditorMode;
52
+ get activeTool(): string;
53
+ setTool(tool: string): void;
54
+ configureGizmos(settings: Partial<GizmoSettings>): GizmoSettings;
55
+ gizmoSettings(): GizmoSettings;
56
+ configureViewportState(settings: Partial<EditorViewportSettings>): EditorStateSnapshot;
57
+ editorStateSnapshot(): EditorStateSnapshot;
58
+ setMode(mode: EditorMode): void;
59
+ pruneSelection(alive: (id: SelectionId) => boolean): void;
60
+ currentSelection(): readonly SelectionId[];
61
+ select(ids: readonly SelectionId[]): void;
62
+ clearSelection(): void;
63
+ executeCommand(command: Command, context?: CommandContext): Promise<void>;
64
+ executeTransaction(commands: readonly Command[], context?: CommandContext): Promise<void>;
65
+ undo(context?: CommandContext): Promise<void>;
66
+ redo(context?: CommandContext): Promise<void>;
67
+ clearHistory(): void;
68
+ inspect(target: object): readonly InspectorProperty[];
69
+ editInspectedProperty<T extends object>(target: T, path: readonly string[], value: InspectorEditableValue, context?: CommandContext): Promise<void>;
70
+ describeHierarchy(root: HierarchyLikeNode): HierarchyNodeDescriptor;
71
+ flattenHierarchy(root: HierarchyLikeNode): readonly HierarchyNodeDescriptor[];
72
+ setPickTargets(targets: readonly EditorPickTarget[]): void;
73
+ configurePickingBuffer(width: number, height: number): EditorPickingEvidenceSnapshot;
74
+ pick(ray: Ray): EditorPickHit | undefined;
75
+ pickingSnapshot(): EditorPickingEvidenceSnapshot;
76
+ translateTarget(target: TransformTarget | undefined, input: GizmoDrag): Promise<void>;
77
+ rotateTarget(target: TransformTarget | undefined, input: GizmoDrag): Promise<void>;
78
+ scaleTarget(target: TransformTarget | undefined, input: GizmoDrag): Promise<void>;
79
+ updateDiagnostics(input: EditorDiagnosticsInput): EditorDiagnosticsSnapshot;
80
+ diagnosticsSnapshot(): EditorDiagnosticsSnapshot;
81
+ registerMaterialVariants(assetId: string, variants: readonly string[], selected?: string | null): MaterialVariantState;
82
+ setMaterialVariant(assetId: string, variant: string | null): MaterialVariantState;
83
+ materialVariantState(assetId: string): MaterialVariantState;
84
+ enterPlayMode(bridge: PlayModeBridge<unknown>): void;
85
+ pausePlayMode(): void;
86
+ resumePlayMode(): void;
87
+ exitPlayMode({ restore }?: {
88
+ restore?: boolean | undefined;
89
+ }): void;
90
+ snapshot(): EditorRuntimeSnapshot;
91
+ dispose(): void;
92
+ private assertAlive;
93
+ private assertEditable;
94
+ }
95
+ //# sourceMappingURL=EditorRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorRuntime.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/EditorRuntime.ts"],"names":[],"mappings":"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"}