@aura3d/editor-runtime 1.0.6 → 1.1.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.
Files changed (82) hide show
  1. package/dist/AssetDropZone.d.ts +52 -0
  2. package/dist/AssetDropZone.d.ts.map +1 -0
  3. package/dist/AssetDropZone.js +115 -0
  4. package/dist/AssetDropZone.js.map +1 -0
  5. package/dist/CameraPathEditor.d.ts +48 -0
  6. package/dist/CameraPathEditor.d.ts.map +1 -0
  7. package/dist/CameraPathEditor.js +181 -0
  8. package/dist/CameraPathEditor.js.map +1 -0
  9. package/dist/CartoonSceneEditor.d.ts +111 -0
  10. package/dist/CartoonSceneEditor.d.ts.map +1 -0
  11. package/dist/CartoonSceneEditor.js +285 -0
  12. package/dist/CartoonSceneEditor.js.map +1 -0
  13. package/dist/CurveEditor.d.ts +38 -0
  14. package/dist/CurveEditor.d.ts.map +1 -0
  15. package/dist/CurveEditor.js +112 -0
  16. package/dist/CurveEditor.js.map +1 -0
  17. package/dist/EpisodeReviewPanel.d.ts +67 -0
  18. package/dist/EpisodeReviewPanel.d.ts.map +1 -0
  19. package/dist/EpisodeReviewPanel.js +162 -0
  20. package/dist/EpisodeReviewPanel.js.map +1 -0
  21. package/dist/KeyframeEditor.d.ts +49 -0
  22. package/dist/KeyframeEditor.d.ts.map +1 -0
  23. package/dist/KeyframeEditor.js +161 -0
  24. package/dist/KeyframeEditor.js.map +1 -0
  25. package/dist/MultiUserReviewWorkflow.d.ts +77 -0
  26. package/dist/MultiUserReviewWorkflow.d.ts.map +1 -0
  27. package/dist/MultiUserReviewWorkflow.js +162 -0
  28. package/dist/MultiUserReviewWorkflow.js.map +1 -0
  29. package/dist/NonlinearAnimationEditor.d.ts +81 -0
  30. package/dist/NonlinearAnimationEditor.d.ts.map +1 -0
  31. package/dist/NonlinearAnimationEditor.js +180 -0
  32. package/dist/NonlinearAnimationEditor.js.map +1 -0
  33. package/dist/PropertyPanel.d.ts +21 -0
  34. package/dist/PropertyPanel.d.ts.map +1 -0
  35. package/dist/PropertyPanel.js +72 -0
  36. package/dist/PropertyPanel.js.map +1 -0
  37. package/dist/RenderQueuePanel.d.ts +38 -0
  38. package/dist/RenderQueuePanel.d.ts.map +1 -0
  39. package/dist/RenderQueuePanel.js +72 -0
  40. package/dist/RenderQueuePanel.js.map +1 -0
  41. package/dist/SceneOutliner.d.ts +19 -0
  42. package/dist/SceneOutliner.d.ts.map +1 -0
  43. package/dist/SceneOutliner.js +64 -0
  44. package/dist/SceneOutliner.js.map +1 -0
  45. package/dist/TimelineEditorController.d.ts +102 -0
  46. package/dist/TimelineEditorController.d.ts.map +1 -0
  47. package/dist/TimelineEditorController.js +449 -0
  48. package/dist/TimelineEditorController.js.map +1 -0
  49. package/dist/TimelineTrackTypes.d.ts +25 -0
  50. package/dist/TimelineTrackTypes.d.ts.map +1 -0
  51. package/dist/TimelineTrackTypes.js +48 -0
  52. package/dist/TimelineTrackTypes.js.map +1 -0
  53. package/dist/TimelineUI.d.ts +27 -0
  54. package/dist/TimelineUI.d.ts.map +1 -0
  55. package/dist/TimelineUI.js +123 -0
  56. package/dist/TimelineUI.js.map +1 -0
  57. package/dist/VisualReviewDashboard.d.ts +43 -0
  58. package/dist/VisualReviewDashboard.d.ts.map +1 -0
  59. package/dist/VisualReviewDashboard.js +47 -0
  60. package/dist/VisualReviewDashboard.js.map +1 -0
  61. package/dist/index.d.ts +30 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +15 -0
  64. package/dist/index.js.map +1 -1
  65. package/package.json +3 -3
  66. package/src/AssetDropZone.ts +144 -0
  67. package/src/CameraPathEditor.ts +223 -0
  68. package/src/CartoonSceneEditor.ts +368 -0
  69. package/src/CurveEditor.ts +152 -0
  70. package/src/EpisodeReviewPanel.ts +236 -0
  71. package/src/KeyframeEditor.ts +214 -0
  72. package/src/MultiUserReviewWorkflow.ts +229 -0
  73. package/src/NonlinearAnimationEditor.ts +262 -0
  74. package/src/PropertyPanel.ts +82 -0
  75. package/src/RenderQueuePanel.ts +106 -0
  76. package/src/SceneOutliner.ts +78 -0
  77. package/src/TimelineEditorController.ts +525 -0
  78. package/src/TimelineTrackTypes.ts +89 -0
  79. package/src/TimelineUI.ts +153 -0
  80. package/src/VisualReviewDashboard.ts +87 -0
  81. package/src/index.ts +53 -0
  82. package/tests/editor-runtime.test.ts +490 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiUserReviewWorkflow.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/MultiUserReviewWorkflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { type TimelineEditorSnapshot } from "./TimelineEditorController";
2
+ import { type TimelineClipConfig, type TimelineModelConfig, type TimelineTrackConfig } from "./TimelineModel";
3
+ import { type TimelineEditorTrackKind } from "./TimelineTrackTypes";
4
+ export type NonlinearBinAssetKind = "animation" | "audio" | "camera" | "shot" | "sequence" | "caption" | "viseme";
5
+ export interface NonlinearBinAsset {
6
+ readonly id: string;
7
+ readonly name: string;
8
+ readonly kind: NonlinearBinAssetKind;
9
+ readonly assetId?: string | undefined;
10
+ readonly clipName?: string | undefined;
11
+ readonly duration?: number | undefined;
12
+ readonly metadata?: Readonly<Record<string, string | number | boolean>> | undefined;
13
+ }
14
+ export interface NonlinearSequenceConfig {
15
+ readonly id: string;
16
+ readonly name: string;
17
+ readonly timeline?: TimelineModelConfig | undefined;
18
+ }
19
+ export interface NonlinearSequenceSnapshot {
20
+ readonly id: string;
21
+ readonly name: string;
22
+ readonly trackCount: number;
23
+ readonly clipCount: number;
24
+ readonly duration: number;
25
+ }
26
+ export interface NonlinearAnimationEditorSnapshot {
27
+ readonly kind: "nonlinear-animation-editor";
28
+ readonly activeSequenceId: string;
29
+ readonly sequenceCount: number;
30
+ readonly binAssetCount: number;
31
+ readonly nestedSequenceClipCount: number;
32
+ readonly totalTrackCount: number;
33
+ readonly totalClipCount: number;
34
+ readonly sequences: readonly NonlinearSequenceSnapshot[];
35
+ readonly activeTimeline: TimelineEditorSnapshot;
36
+ readonly evidence: {
37
+ readonly nonlinearSequences: boolean;
38
+ readonly trimSplitMoveDuplicate: boolean;
39
+ readonly nestedSequences: boolean;
40
+ readonly multiTrackTimeline: boolean;
41
+ readonly serialization: true;
42
+ };
43
+ }
44
+ export interface NonlinearAnimationEditorState {
45
+ readonly activeSequenceId: string;
46
+ readonly binAssets: readonly NonlinearBinAsset[];
47
+ readonly sequences: readonly NonlinearSequenceConfig[];
48
+ }
49
+ export declare class NonlinearAnimationEditor {
50
+ private readonly binAssets;
51
+ private readonly sequences;
52
+ private activeSequenceId;
53
+ constructor(state: NonlinearAnimationEditorState);
54
+ addBinAsset(asset: NonlinearBinAsset): NonlinearBinAsset;
55
+ createSequence(config: NonlinearSequenceConfig): NonlinearSequenceSnapshot;
56
+ selectSequence(sequenceId: string): NonlinearAnimationEditorSnapshot;
57
+ addTrack(kind: TimelineEditorTrackKind, name?: string, options?: Omit<TimelineTrackConfig, "name" | "type">): Promise<string>;
58
+ insertAssetClip(trackId: string, assetId: string, options: Omit<TimelineClipConfig, "name" | "startTime" | "duration" | "assetId" | "clipName"> & {
59
+ readonly id?: string | undefined;
60
+ readonly name?: string | undefined;
61
+ readonly startTime: number;
62
+ readonly duration?: number | undefined;
63
+ }): Promise<string>;
64
+ insertNestedSequence(trackId: string, sequenceId: string, options: Omit<TimelineClipConfig, "name" | "startTime" | "duration"> & {
65
+ readonly id?: string | undefined;
66
+ readonly startTime: number;
67
+ readonly duration?: number | undefined;
68
+ }): Promise<string>;
69
+ moveClip(clipId: string, startTime: number): Promise<void>;
70
+ trimClip(clipId: string, duration: number, startTime?: number): Promise<void>;
71
+ splitClip(clipId: string, splitTime: number): Promise<readonly string[]>;
72
+ duplicateClip(clipId: string, timeOffset?: number): Promise<string>;
73
+ serialize(): NonlinearAnimationEditorState;
74
+ snapshot(): NonlinearAnimationEditorSnapshot;
75
+ private activeSequence;
76
+ private requireSequence;
77
+ private requireBinAsset;
78
+ private sequenceSnapshot;
79
+ }
80
+ export declare function createNonlinearAnimationEditor(state: NonlinearAnimationEditorState): NonlinearAnimationEditor;
81
+ //# sourceMappingURL=NonlinearAnimationEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NonlinearAnimationEditor.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/NonlinearAnimationEditor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ import { TimelineEditorController } from "./TimelineEditorController.js";
2
+ import { TimelineModel } from "./TimelineModel.js";
3
+ import { createTimelineTrackConfig } from "./TimelineTrackTypes.js";
4
+ export class NonlinearAnimationEditor {
5
+ binAssets = new Map();
6
+ sequences = new Map();
7
+ activeSequenceId;
8
+ constructor(state) {
9
+ if (state.sequences.length === 0)
10
+ throw new Error("Nonlinear animation editor requires at least one sequence.");
11
+ for (const asset of state.binAssets)
12
+ this.addBinAsset(asset);
13
+ for (const sequence of state.sequences)
14
+ this.createSequence(sequence);
15
+ this.activeSequenceId = nonEmpty(state.activeSequenceId, "Active sequence id");
16
+ this.requireSequence(this.activeSequenceId);
17
+ }
18
+ addBinAsset(asset) {
19
+ const clean = sanitizeBinAsset(asset);
20
+ this.binAssets.set(clean.id, clean);
21
+ return clean;
22
+ }
23
+ createSequence(config) {
24
+ const id = nonEmpty(config.id, "Sequence id");
25
+ const timeline = new TimelineModel({
26
+ id,
27
+ name: config.name,
28
+ duration: 10,
29
+ frameRate: 24,
30
+ loopMode: "none",
31
+ ...config.timeline
32
+ });
33
+ this.sequences.set(id, {
34
+ id,
35
+ name: nonEmpty(config.name, "Sequence name"),
36
+ controller: new TimelineEditorController({ timeline })
37
+ });
38
+ return this.sequenceSnapshot(this.requireSequence(id));
39
+ }
40
+ selectSequence(sequenceId) {
41
+ this.activeSequenceId = this.requireSequence(sequenceId).id;
42
+ return this.snapshot();
43
+ }
44
+ async addTrack(kind, name, options = {}) {
45
+ const track = await this.activeSequence().controller.addTrack(kind, name, options);
46
+ return track.id;
47
+ }
48
+ async insertAssetClip(trackId, assetId, options) {
49
+ const asset = this.requireBinAsset(assetId);
50
+ const clip = await this.activeSequence().controller.addClip(trackId, {
51
+ ...options,
52
+ id: options.id ?? `${asset.id}-${Math.round(options.startTime * 1000)}`,
53
+ name: options.name ?? asset.name,
54
+ startTime: options.startTime,
55
+ duration: options.duration ?? asset.duration ?? 1,
56
+ assetId: asset.assetId ?? asset.id,
57
+ clipName: asset.clipName ?? asset.name,
58
+ properties: {
59
+ ...(options.properties ?? {}),
60
+ binAssetId: asset.id,
61
+ binAssetKind: asset.kind
62
+ }
63
+ });
64
+ return clip.id;
65
+ }
66
+ async insertNestedSequence(trackId, sequenceId, options) {
67
+ const nested = this.requireSequence(sequenceId);
68
+ const clip = await this.activeSequence().controller.addClip(trackId, {
69
+ ...options,
70
+ id: options.id ?? `${sequenceId}-nested-${Math.round(options.startTime * 1000)}`,
71
+ name: nested.name,
72
+ startTime: options.startTime,
73
+ duration: options.duration ?? nested.controller.timeline.duration,
74
+ properties: {
75
+ ...(options.properties ?? {}),
76
+ nestedSequenceId: nested.id
77
+ }
78
+ });
79
+ return clip.id;
80
+ }
81
+ async moveClip(clipId, startTime) {
82
+ await this.activeSequence().controller.moveClip(clipId, startTime);
83
+ }
84
+ async trimClip(clipId, duration, startTime) {
85
+ await this.activeSequence().controller.resizeClip(clipId, duration, startTime);
86
+ }
87
+ async splitClip(clipId, splitTime) {
88
+ const clips = await this.activeSequence().controller.splitClip(clipId, splitTime);
89
+ return clips.map((clip) => clip.id);
90
+ }
91
+ async duplicateClip(clipId, timeOffset) {
92
+ const clip = await this.activeSequence().controller.duplicateClip(clipId, timeOffset);
93
+ return clip.id;
94
+ }
95
+ serialize() {
96
+ return {
97
+ activeSequenceId: this.activeSequenceId,
98
+ binAssets: [...this.binAssets.values()],
99
+ sequences: [...this.sequences.values()].map((sequence) => ({
100
+ id: sequence.id,
101
+ name: sequence.name,
102
+ timeline: sequence.controller.serializeTimeline()
103
+ }))
104
+ };
105
+ }
106
+ snapshot() {
107
+ const sequences = [...this.sequences.values()];
108
+ const active = this.activeSequence();
109
+ const totalTrackCount = sequences.reduce((count, sequence) => count + sequence.controller.timeline.tracks.length, 0);
110
+ const totalClipCount = sequences.reduce((count, sequence) => count + sequence.controller.timeline.tracks.reduce((clipCount, track) => clipCount + track.clips.length, 0), 0);
111
+ const nestedSequenceClipCount = sequences.reduce((count, sequence) => count + sequence.controller.timeline.tracks.reduce((trackCount, track) => trackCount + track.clips.filter((clip) => typeof clip.properties.nestedSequenceId === "string").length, 0), 0);
112
+ return {
113
+ kind: "nonlinear-animation-editor",
114
+ activeSequenceId: active.id,
115
+ sequenceCount: sequences.length,
116
+ binAssetCount: this.binAssets.size,
117
+ nestedSequenceClipCount,
118
+ totalTrackCount,
119
+ totalClipCount,
120
+ sequences: sequences.map((sequence) => this.sequenceSnapshot(sequence)),
121
+ activeTimeline: active.controller.snapshot(),
122
+ evidence: {
123
+ nonlinearSequences: sequences.length > 1,
124
+ trimSplitMoveDuplicate: active.controller.history.canUndo || active.controller.history.canRedo,
125
+ nestedSequences: nestedSequenceClipCount > 0,
126
+ multiTrackTimeline: totalTrackCount > 1,
127
+ serialization: true
128
+ }
129
+ };
130
+ }
131
+ activeSequence() {
132
+ return this.requireSequence(this.activeSequenceId);
133
+ }
134
+ requireSequence(id) {
135
+ const sequence = this.sequences.get(id);
136
+ if (!sequence)
137
+ throw new Error(`Unknown nonlinear sequence: ${id}`);
138
+ return sequence;
139
+ }
140
+ requireBinAsset(id) {
141
+ const asset = this.binAssets.get(id);
142
+ if (!asset)
143
+ throw new Error(`Unknown nonlinear bin asset: ${id}`);
144
+ return asset;
145
+ }
146
+ sequenceSnapshot(sequence) {
147
+ const timeline = sequence.controller.timeline;
148
+ return {
149
+ id: sequence.id,
150
+ name: sequence.name,
151
+ trackCount: timeline.tracks.length,
152
+ clipCount: timeline.tracks.reduce((count, track) => count + track.clips.length, 0),
153
+ duration: timeline.duration
154
+ };
155
+ }
156
+ }
157
+ export function createNonlinearAnimationEditor(state) {
158
+ return new NonlinearAnimationEditor(state);
159
+ }
160
+ function sanitizeBinAsset(asset) {
161
+ if (asset.duration !== undefined && (!Number.isFinite(asset.duration) || asset.duration <= 0)) {
162
+ throw new Error(`Nonlinear bin asset "${asset.id}" duration must be positive when provided.`);
163
+ }
164
+ return {
165
+ id: nonEmpty(asset.id, "Bin asset id"),
166
+ name: nonEmpty(asset.name, "Bin asset name"),
167
+ kind: asset.kind,
168
+ assetId: asset.assetId,
169
+ clipName: asset.clipName,
170
+ duration: asset.duration,
171
+ metadata: asset.metadata
172
+ };
173
+ }
174
+ function nonEmpty(value, label) {
175
+ const trimmed = value.trim();
176
+ if (!trimmed)
177
+ throw new Error(`${label} must be a non-empty string.`);
178
+ return trimmed;
179
+ }
180
+ //# sourceMappingURL=NonlinearAnimationEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NonlinearAnimationEditor.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/NonlinearAnimationEditor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { CommandHistory } from "./CommandHistory";
2
+ import { InspectorModel, type InspectorEditableValue, type InspectorProperty } from "./InspectorModel";
3
+ export interface PropertyPanelField extends InspectorProperty {
4
+ readonly label: string;
5
+ }
6
+ export interface PropertyPanelOptions {
7
+ readonly history?: CommandHistory;
8
+ readonly inspector?: InspectorModel;
9
+ readonly onEdit?: (path: readonly string[], value: InspectorEditableValue) => void;
10
+ }
11
+ export declare class PropertyPanel {
12
+ readonly history: CommandHistory;
13
+ readonly inspector: InspectorModel;
14
+ private disposers;
15
+ constructor(options?: PropertyPanelOptions);
16
+ describe(target: object): readonly PropertyPanelField[];
17
+ edit(target: object, path: readonly string[], value: InspectorEditableValue): Promise<void>;
18
+ render(target: object | undefined, container: HTMLElement, options?: Pick<PropertyPanelOptions, "onEdit">): readonly PropertyPanelField[];
19
+ dispose(): void;
20
+ }
21
+ //# sourceMappingURL=PropertyPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertyPanel.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/PropertyPanel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,KAAK,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEvG,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACpF;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,OAAO,CAAC,SAAS,CAAsB;gBAE3B,OAAO,GAAE,oBAAyB;IAK9C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,kBAAkB,EAAE;IAOjD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,GAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAM,GAAG,SAAS,kBAAkB,EAAE;IAsC7I,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,72 @@
1
+ import { CommandHistory } from "./CommandHistory.js";
2
+ import { InspectorModel } from "./InspectorModel.js";
3
+ export class PropertyPanel {
4
+ history;
5
+ inspector;
6
+ disposers = [];
7
+ constructor(options = {}) {
8
+ this.history = options.history ?? new CommandHistory();
9
+ this.inspector = options.inspector ?? new InspectorModel();
10
+ }
11
+ describe(target) {
12
+ return this.inspector.describe(target).map((property) => ({
13
+ ...property,
14
+ label: property.path.join(".")
15
+ }));
16
+ }
17
+ async edit(target, path, value) {
18
+ await this.history.execute(this.inspector.createSetPropertyCommand(target, path, value));
19
+ }
20
+ render(target, container, options = {}) {
21
+ this.dispose();
22
+ container.replaceChildren();
23
+ if (!target)
24
+ return [];
25
+ const fields = this.describe(target);
26
+ const documentRef = container.ownerDocument;
27
+ for (const field of fields) {
28
+ const row = documentRef.createElement("label");
29
+ row.className = "aura-property-panel__row";
30
+ const name = documentRef.createElement("span");
31
+ name.className = "aura-property-panel__label";
32
+ name.textContent = field.label;
33
+ row.append(name);
34
+ if (field.editable) {
35
+ const input = documentRef.createElement("input");
36
+ input.className = "aura-property-panel__input";
37
+ input.name = field.label;
38
+ input.value = String(field.value);
39
+ input.type = field.type === "number" ? "number" : field.type === "boolean" ? "checkbox" : "text";
40
+ if (field.type === "boolean")
41
+ input.checked = Boolean(field.value);
42
+ const change = () => {
43
+ const value = parseInput(input, field.type);
44
+ void this.edit(target, field.path, value).then(() => options.onEdit?.(field.path, value));
45
+ };
46
+ input.addEventListener("change", change);
47
+ this.disposers.push(() => input.removeEventListener("change", change));
48
+ row.append(input);
49
+ }
50
+ else {
51
+ const value = documentRef.createElement("span");
52
+ value.className = "aura-property-panel__value";
53
+ value.textContent = field.type;
54
+ row.append(value);
55
+ }
56
+ container.append(row);
57
+ }
58
+ return fields;
59
+ }
60
+ dispose() {
61
+ for (const dispose of this.disposers.splice(0))
62
+ dispose();
63
+ }
64
+ }
65
+ function parseInput(input, type) {
66
+ if (type === "number")
67
+ return Number(input.value);
68
+ if (type === "boolean")
69
+ return input.checked;
70
+ return input.value;
71
+ }
72
+ //# sourceMappingURL=PropertyPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertyPanel.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/PropertyPanel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export type RenderQueuePanelItemStatus = "queued" | "running" | "done" | "failed";
2
+ export interface RenderQueuePanelItem {
3
+ readonly id: string;
4
+ readonly label: string;
5
+ readonly status: RenderQueuePanelItemStatus;
6
+ readonly progress: number;
7
+ readonly currentFrame?: number;
8
+ readonly totalFrames?: number;
9
+ readonly outputPath?: string;
10
+ readonly error?: string;
11
+ }
12
+ export interface RenderQueuePanelSnapshot {
13
+ readonly kind: "render-queue-panel";
14
+ readonly itemCount: number;
15
+ readonly queuedCount: number;
16
+ readonly runningCount: number;
17
+ readonly doneCount: number;
18
+ readonly failedCount: number;
19
+ readonly progress: number;
20
+ readonly items: readonly RenderQueuePanelItem[];
21
+ readonly outputPaths: readonly string[];
22
+ readonly errors: readonly string[];
23
+ }
24
+ export declare class RenderQueuePanel {
25
+ private readonly items;
26
+ constructor(items?: readonly RenderQueuePanelItem[]);
27
+ upsert(item: RenderQueuePanelItem): RenderQueuePanelSnapshot;
28
+ updateProgress(id: string, progress: number, options?: {
29
+ readonly currentFrame?: number;
30
+ readonly totalFrames?: number;
31
+ readonly status?: RenderQueuePanelItemStatus;
32
+ readonly outputPath?: string;
33
+ readonly error?: string;
34
+ }): RenderQueuePanelSnapshot;
35
+ snapshot(): RenderQueuePanelSnapshot;
36
+ }
37
+ export declare function createRenderQueuePanel(items?: readonly RenderQueuePanelItem[]): RenderQueuePanel;
38
+ //# sourceMappingURL=RenderQueuePanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderQueuePanel.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/RenderQueuePanel.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAElF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAChD,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2C;gBAErD,KAAK,GAAE,SAAS,oBAAoB,EAAO;IAIvD,MAAM,CAAC,IAAI,EAAE,oBAAoB,GAAG,wBAAwB;IAK5D,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE;QACpD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,0BAA0B,CAAC;QAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,wBAAwB;IAcjC,QAAQ,IAAI,wBAAwB;CAgBrC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,GAAE,SAAS,oBAAoB,EAAO,GAAG,gBAAgB,CAEpG"}
@@ -0,0 +1,72 @@
1
+ export class RenderQueuePanel {
2
+ items = new Map();
3
+ constructor(items = []) {
4
+ for (const item of items)
5
+ this.upsert(item);
6
+ }
7
+ upsert(item) {
8
+ this.items.set(item.id, sanitizeRenderQueueItem(item));
9
+ return this.snapshot();
10
+ }
11
+ updateProgress(id, progress, options = {}) {
12
+ const existing = this.items.get(id);
13
+ if (!existing)
14
+ throw new Error(`Render queue item does not exist: ${id}`);
15
+ return this.upsert({
16
+ ...existing,
17
+ progress,
18
+ status: options.status ?? existing.status,
19
+ currentFrame: options.currentFrame ?? existing.currentFrame,
20
+ totalFrames: options.totalFrames ?? existing.totalFrames,
21
+ outputPath: options.outputPath ?? existing.outputPath,
22
+ error: options.error ?? existing.error
23
+ });
24
+ }
25
+ snapshot() {
26
+ const items = [...this.items.values()].sort((a, b) => a.id.localeCompare(b.id));
27
+ const sum = items.reduce((total, item) => total + item.progress, 0);
28
+ return {
29
+ kind: "render-queue-panel",
30
+ itemCount: items.length,
31
+ queuedCount: items.filter((item) => item.status === "queued").length,
32
+ runningCount: items.filter((item) => item.status === "running").length,
33
+ doneCount: items.filter((item) => item.status === "done").length,
34
+ failedCount: items.filter((item) => item.status === "failed").length,
35
+ progress: items.length === 0 ? 0 : sum / items.length,
36
+ items,
37
+ outputPaths: items.flatMap((item) => item.outputPath ? [item.outputPath] : []),
38
+ errors: items.flatMap((item) => item.error ? [item.error] : [])
39
+ };
40
+ }
41
+ }
42
+ export function createRenderQueuePanel(items = []) {
43
+ return new RenderQueuePanel(items);
44
+ }
45
+ function sanitizeRenderQueueItem(item) {
46
+ const progress = Number.isFinite(item.progress) ? Math.min(1, Math.max(0, item.progress)) : Number.NaN;
47
+ if (!Number.isFinite(progress))
48
+ throw new Error("Render queue item progress must be finite.");
49
+ if (item.currentFrame !== undefined && (!Number.isFinite(item.currentFrame) || item.currentFrame < 0)) {
50
+ throw new Error("Render queue currentFrame must be a non-negative finite number.");
51
+ }
52
+ if (item.totalFrames !== undefined && (!Number.isFinite(item.totalFrames) || item.totalFrames <= 0)) {
53
+ throw new Error("Render queue totalFrames must be a positive finite number.");
54
+ }
55
+ return {
56
+ id: nonEmpty(item.id, "Render queue item id"),
57
+ label: nonEmpty(item.label, "Render queue item label"),
58
+ status: item.status,
59
+ progress,
60
+ currentFrame: item.currentFrame,
61
+ totalFrames: item.totalFrames,
62
+ outputPath: item.outputPath,
63
+ error: item.error
64
+ };
65
+ }
66
+ function nonEmpty(value, label) {
67
+ const trimmed = value.trim();
68
+ if (!trimmed)
69
+ throw new Error(`${label} must be a non-empty string.`);
70
+ return trimmed;
71
+ }
72
+ //# sourceMappingURL=RenderQueuePanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderQueuePanel.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/RenderQueuePanel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type HierarchyNodeDescriptor } from "./HierarchyModel";
2
+ import type { SelectionId } from "./Selection";
3
+ import type { CartoonSceneNode } from "./CartoonSceneEditor";
4
+ export interface SceneOutlinerItem extends HierarchyNodeDescriptor {
5
+ readonly icon: string;
6
+ readonly kind: string;
7
+ }
8
+ export interface SceneOutlinerOptions {
9
+ readonly selectedIds?: ReadonlySet<SelectionId>;
10
+ readonly onSelect?: (id: SelectionId) => void;
11
+ }
12
+ export declare class SceneOutliner {
13
+ private readonly hierarchy;
14
+ private disposers;
15
+ describe(root: CartoonSceneNode, selectedIds?: ReadonlySet<SelectionId>): readonly SceneOutlinerItem[];
16
+ render(root: CartoonSceneNode, container: HTMLElement, options?: SceneOutlinerOptions): readonly SceneOutlinerItem[];
17
+ dispose(): void;
18
+ }
19
+ //# sourceMappingURL=SceneOutliner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SceneOutliner.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/SceneOutliner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,WAAW,iBAAkB,SAAQ,uBAAuB;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;CAC/C;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAClD,OAAO,CAAC,SAAS,CAAsB;IAEvC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAAE,WAAW,GAAE,WAAW,CAAC,WAAW,CAAa,GAAG,SAAS,iBAAiB,EAAE;IAYjH,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,GAAE,oBAAyB,GAAG,SAAS,iBAAiB,EAAE;IAsBxH,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,64 @@
1
+ import { HierarchyModel } from "./HierarchyModel.js";
2
+ export class SceneOutliner {
3
+ hierarchy = new HierarchyModel();
4
+ disposers = [];
5
+ describe(root, selectedIds = new Set()) {
6
+ return this.hierarchy.flatten(root, selectedIds).map((item) => {
7
+ const node = findNode(root, String(item.id));
8
+ const kind = node?.kind ?? "unknown";
9
+ return {
10
+ ...item,
11
+ kind,
12
+ icon: iconForKind(kind)
13
+ };
14
+ });
15
+ }
16
+ render(root, container, options = {}) {
17
+ this.dispose();
18
+ const items = this.describe(root, options.selectedIds);
19
+ container.replaceChildren();
20
+ const documentRef = container.ownerDocument;
21
+ for (const item of items) {
22
+ const row = documentRef.createElement("button");
23
+ row.type = "button";
24
+ row.className = "aura-scene-outliner__item";
25
+ row.dataset.nodeId = String(item.id);
26
+ row.dataset.kind = item.kind;
27
+ row.dataset.selected = String(item.selected);
28
+ row.style.paddingLeft = `${item.depth * 14}px`;
29
+ row.textContent = `${item.icon} ${item.name}`;
30
+ const click = () => options.onSelect?.(item.id);
31
+ row.addEventListener("click", click);
32
+ this.disposers.push(() => row.removeEventListener("click", click));
33
+ container.append(row);
34
+ }
35
+ return items;
36
+ }
37
+ dispose() {
38
+ for (const dispose of this.disposers.splice(0))
39
+ dispose();
40
+ }
41
+ }
42
+ function iconForKind(kind) {
43
+ switch (kind) {
44
+ case "character": return "[CHAR]";
45
+ case "set": return "[SET]";
46
+ case "prop": return "[PROP]";
47
+ case "camera": return "[CAM]";
48
+ case "light": return "[LIGHT]";
49
+ case "audio": return "[AUD]";
50
+ case "material": return "[MAT]";
51
+ default: return "[NODE]";
52
+ }
53
+ }
54
+ function findNode(root, id) {
55
+ if (root.id === id)
56
+ return root;
57
+ for (const child of root.children) {
58
+ const found = findNode(child, id);
59
+ if (found)
60
+ return found;
61
+ }
62
+ return undefined;
63
+ }
64
+ //# sourceMappingURL=SceneOutliner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SceneOutliner.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/SceneOutliner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgC,MAAM,kBAAkB,CAAC;AAchF,MAAM,OAAO,aAAa;IACP,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;IAC1C,SAAS,GAAmB,EAAE,CAAC;IAEvC,QAAQ,CAAC,IAAsB,EAAE,cAAwC,IAAI,GAAG,EAAE;QAChF,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,SAAS,CAAC;YACrC,OAAO;gBACL,GAAG,IAAI;gBACP,IAAI;gBACJ,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;aACxB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAsB,EAAE,SAAsB,EAAE,UAAgC,EAAE;QACvF,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACvD,SAAS,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC;QAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;YACpB,GAAG,CAAC,SAAS,GAAG,2BAA2B,CAAC;YAC5C,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAC7B,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7C,GAAG,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,CAAC;YAC/C,GAAG,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,GAAS,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtD,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACnE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;IAC5D,CAAC;CACF;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW,CAAC,CAAC,OAAO,QAAQ,CAAC;QAClC,KAAK,KAAK,CAAC,CAAC,OAAO,OAAO,CAAC;QAC3B,KAAK,MAAM,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC7B,KAAK,QAAQ,CAAC,CAAC,OAAO,OAAO,CAAC;QAC9B,KAAK,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;QAC/B,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;QAC7B,KAAK,UAAU,CAAC,CAAC,OAAO,OAAO,CAAC;QAChC,OAAO,CAAC,CAAC,OAAO,QAAQ,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAsB,EAAE,EAAU;IAClD,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}