@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,102 @@
1
+ import { CommandHistory } from "./CommandHistory";
2
+ import { Selection, type SelectionId } from "./Selection";
3
+ import { TimelineClip, TimelineModel, TimelineTrack, type TimelineClipConfig, type TimelineModelConfig, type TimelineTrackConfig } from "./TimelineModel";
4
+ import { type TimelineEditorTrackKind } from "./TimelineTrackTypes";
5
+ export interface TimelineEditorControllerOptions {
6
+ readonly timeline?: TimelineModel;
7
+ readonly history?: CommandHistory;
8
+ readonly selection?: Selection;
9
+ readonly zoomPixelsPerSecond?: number;
10
+ readonly snapEnabled?: boolean;
11
+ readonly snapInterval?: number;
12
+ readonly onPreviewTime?: (time: number, snapshot: TimelineEditorSnapshot) => void;
13
+ readonly routeBinding?: TimelineRoutePlaybackBinding;
14
+ }
15
+ export interface TimelineRoutePlaybackBinding {
16
+ play?(): void;
17
+ pause?(): void;
18
+ scrub(time: number, snapshot: TimelineEditorSnapshot): void;
19
+ jumpToShot?(shotId: string, time: number, snapshot: TimelineEditorSnapshot): void;
20
+ }
21
+ export interface TimelineEditorClipboard {
22
+ readonly clips: readonly TimelineClipConfig[];
23
+ }
24
+ export interface TimelineEditorSnapshot {
25
+ readonly timeline: ReturnType<TimelineModel["snapshot"]>;
26
+ readonly zoomPixelsPerSecond: number;
27
+ readonly scrollX: number;
28
+ readonly scrollY: number;
29
+ readonly snapEnabled: boolean;
30
+ readonly snapInterval: number;
31
+ readonly selectedIds: readonly SelectionId[];
32
+ readonly clipboardClipCount: number;
33
+ readonly canUndo: boolean;
34
+ readonly canRedo: boolean;
35
+ readonly tracks: readonly {
36
+ readonly id: string;
37
+ readonly name: string;
38
+ readonly kind: TimelineEditorTrackKind;
39
+ readonly laneHeight: number;
40
+ readonly color: string;
41
+ readonly clipIds: readonly string[];
42
+ }[];
43
+ readonly evidence: {
44
+ readonly clipEditing: boolean;
45
+ readonly keyframeReadyTracks: boolean;
46
+ readonly timelineScrubbing: true;
47
+ readonly undoRedo: boolean;
48
+ readonly serialization: true;
49
+ };
50
+ }
51
+ export declare class TimelineEditorController {
52
+ readonly timeline: TimelineModel;
53
+ readonly history: CommandHistory;
54
+ readonly selection: Selection;
55
+ private zoomPixelsPerSecondInternal;
56
+ private scrollXInternal;
57
+ private scrollYInternal;
58
+ private snapEnabledInternal;
59
+ private snapIntervalInternal;
60
+ private clipboardInternal;
61
+ private readonly preview?;
62
+ private routeBinding?;
63
+ constructor(options?: TimelineEditorControllerOptions);
64
+ get zoomPixelsPerSecond(): number;
65
+ get snapEnabled(): boolean;
66
+ get snapInterval(): number;
67
+ get scrollX(): number;
68
+ get scrollY(): number;
69
+ addTrack(kind: TimelineEditorTrackKind, name?: string, options?: Omit<TimelineTrackConfig, "name" | "type">): Promise<TimelineTrack>;
70
+ addClip(trackId: string, config: TimelineClipConfig): Promise<TimelineClip>;
71
+ deleteClip(clipId: string): Promise<void>;
72
+ moveClip(clipId: string, startTime: number): Promise<TimelineClip>;
73
+ resizeClip(clipId: string, duration: number, startTime?: number): Promise<TimelineClip>;
74
+ splitClip(clipId: string, splitTime: number): Promise<readonly TimelineClip[]>;
75
+ duplicateClip(clipId: string, timeOffset?: number): Promise<TimelineClip>;
76
+ copySelection(): TimelineEditorClipboard;
77
+ pasteClips(trackId: string, startTime: number): Promise<readonly TimelineClip[]>;
78
+ select(ids: readonly SelectionId[]): void;
79
+ selectClip(clipId: string, additive?: boolean): void;
80
+ clearSelection(): void;
81
+ setZoom(pixelsPerSecond: number): void;
82
+ zoomBy(multiplier: number): number;
83
+ scrollTo(x: number, y?: number): void;
84
+ configureSnap(options: {
85
+ readonly enabled?: boolean;
86
+ readonly interval?: number;
87
+ }): void;
88
+ scrubTo(time: number): void;
89
+ stepFrames(frames: number): void;
90
+ togglePlayback(): void;
91
+ bindRoutePlayback(binding: TimelineRoutePlaybackBinding | undefined): void;
92
+ jumpToShot(shotId: string): number;
93
+ handleKeyboardShortcut(key: string): boolean;
94
+ undo(): Promise<void>;
95
+ redo(): Promise<void>;
96
+ serializeTimeline(): TimelineModelConfig;
97
+ snapshot(): TimelineEditorSnapshot;
98
+ private snapTime;
99
+ private requireTrack;
100
+ private requireClip;
101
+ }
102
+ //# sourceMappingURL=TimelineEditorController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimelineEditorController.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/TimelineEditorController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,449 @@
1
+ import { CommandHistory } from "./CommandHistory.js";
2
+ import { Selection } from "./Selection.js";
3
+ import { TimelineClip, TimelineModel, TimelineTrack } from "./TimelineModel.js";
4
+ import { createTimelineTrackConfig, timelineTrackKindFromConfig, timelineTrackTypeDefinition } from "./TimelineTrackTypes.js";
5
+ export class TimelineEditorController {
6
+ timeline;
7
+ history;
8
+ selection;
9
+ zoomPixelsPerSecondInternal;
10
+ scrollXInternal = 0;
11
+ scrollYInternal = 0;
12
+ snapEnabledInternal;
13
+ snapIntervalInternal;
14
+ clipboardInternal = { clips: [] };
15
+ preview;
16
+ routeBinding;
17
+ constructor(options = {}) {
18
+ this.timeline = options.timeline ?? new TimelineModel({ duration: 10, frameRate: 30, loopMode: "none" });
19
+ this.history = options.history ?? new CommandHistory();
20
+ this.selection = options.selection ?? new Selection();
21
+ this.zoomPixelsPerSecondInternal = positive(options.zoomPixelsPerSecond ?? 96, "Timeline zoomPixelsPerSecond");
22
+ this.snapEnabledInternal = options.snapEnabled ?? true;
23
+ this.snapIntervalInternal = positive(options.snapInterval ?? (this.timeline.frameRate > 0 ? 1 / this.timeline.frameRate : 1 / 30), "Timeline snapInterval");
24
+ this.preview = options.onPreviewTime;
25
+ this.routeBinding = options.routeBinding;
26
+ }
27
+ get zoomPixelsPerSecond() {
28
+ return this.zoomPixelsPerSecondInternal;
29
+ }
30
+ get snapEnabled() {
31
+ return this.snapEnabledInternal;
32
+ }
33
+ get snapInterval() {
34
+ return this.snapIntervalInternal;
35
+ }
36
+ get scrollX() {
37
+ return this.scrollXInternal;
38
+ }
39
+ get scrollY() {
40
+ return this.scrollYInternal;
41
+ }
42
+ async addTrack(kind, name, options = {}) {
43
+ const track = new TimelineTrack(createTimelineTrackConfig(kind, name, options));
44
+ await this.history.execute(new AddTrackCommand(this.timeline, track));
45
+ return track;
46
+ }
47
+ async addClip(trackId, config) {
48
+ const track = this.requireTrack(trackId);
49
+ const clip = new TimelineClip({ ...config, startTime: this.snapTime(config.startTime) });
50
+ await this.history.execute(new AddClipCommand(track, clip));
51
+ return clip;
52
+ }
53
+ async deleteClip(clipId) {
54
+ const match = this.requireClip(clipId);
55
+ await this.history.execute(new RemoveClipCommand(match.track, match.clip));
56
+ this.selection.remove(clipId);
57
+ }
58
+ async moveClip(clipId, startTime) {
59
+ const { clip } = this.requireClip(clipId);
60
+ await this.history.execute(new MoveClipCommand(clip, this.snapTime(startTime)));
61
+ return clip;
62
+ }
63
+ async resizeClip(clipId, duration, startTime) {
64
+ const { clip } = this.requireClip(clipId);
65
+ await this.history.execute(new ResizeClipCommand(clip, positive(duration, "Timeline clip duration"), startTime === undefined ? undefined : this.snapTime(startTime)));
66
+ return clip;
67
+ }
68
+ async splitClip(clipId, splitTime) {
69
+ const { track, clip } = this.requireClip(clipId);
70
+ const snapped = this.snapTime(splitTime);
71
+ if (snapped <= clip.startTime || snapped >= clip.endTime) {
72
+ throw new RangeError("Timeline split time must be inside the clip range.");
73
+ }
74
+ const left = new TimelineClip({ ...clip.toConfig(), id: `${clip.id}-a`, duration: snapped - clip.startTime });
75
+ const right = new TimelineClip({
76
+ ...clip.toConfig(),
77
+ id: `${clip.id}-b`,
78
+ startTime: snapped,
79
+ duration: clip.endTime - snapped,
80
+ clipInOffset: clip.clipInOffset + (snapped - clip.startTime) * clip.speedMultiplier
81
+ });
82
+ await this.history.execute(new ReplaceClipsCommand(track, [clip], [left, right], `Split clip ${clip.id}`));
83
+ this.selection.set([left.id, right.id]);
84
+ return [left, right];
85
+ }
86
+ async duplicateClip(clipId, timeOffset) {
87
+ const { track, clip } = this.requireClip(clipId);
88
+ const offset = timeOffset ?? clip.duration;
89
+ const duplicate = new TimelineClip({
90
+ ...clip.toConfig(),
91
+ id: `${clip.id}-copy-${track.clips.length + 1}`,
92
+ name: `${clip.name} Copy`,
93
+ startTime: this.snapTime(clip.startTime + offset)
94
+ });
95
+ await this.history.execute(new AddClipCommand(track, duplicate));
96
+ this.selection.set([duplicate.id]);
97
+ return duplicate;
98
+ }
99
+ copySelection() {
100
+ const selected = new Set(this.selection.current());
101
+ const clips = this.timeline.tracks.flatMap((track) => track.clips.filter((clip) => selected.has(clip.id)).map((clip) => clip.toConfig()));
102
+ this.clipboardInternal = { clips };
103
+ return this.clipboardInternal;
104
+ }
105
+ async pasteClips(trackId, startTime) {
106
+ const track = this.requireTrack(trackId);
107
+ if (this.clipboardInternal.clips.length === 0)
108
+ return [];
109
+ const earliest = Math.min(...this.clipboardInternal.clips.map((clip) => clip.startTime));
110
+ const pasted = this.clipboardInternal.clips.map((clip, index) => new TimelineClip({
111
+ ...clip,
112
+ id: `${clip.id}-paste-${index + 1}`,
113
+ startTime: this.snapTime(startTime + (clip.startTime - earliest))
114
+ }));
115
+ await this.history.execute(new ReplaceClipsCommand(track, [], pasted, `Paste ${pasted.length} clips`));
116
+ this.selection.set(pasted.map((clip) => clip.id));
117
+ return pasted;
118
+ }
119
+ select(ids) {
120
+ this.selection.set(ids);
121
+ }
122
+ selectClip(clipId, additive = false) {
123
+ this.requireClip(clipId);
124
+ if (additive)
125
+ this.selection.add(clipId);
126
+ else
127
+ this.selection.set([clipId]);
128
+ }
129
+ clearSelection() {
130
+ this.selection.clear();
131
+ }
132
+ setZoom(pixelsPerSecond) {
133
+ this.zoomPixelsPerSecondInternal = positive(pixelsPerSecond, "Timeline zoomPixelsPerSecond");
134
+ }
135
+ zoomBy(multiplier) {
136
+ this.setZoom(clamp(this.zoomPixelsPerSecondInternal * positive(multiplier, "Timeline zoom multiplier"), 12, 800));
137
+ return this.zoomPixelsPerSecondInternal;
138
+ }
139
+ scrollTo(x, y = this.scrollYInternal) {
140
+ this.scrollXInternal = Math.max(0, finite(x, "Timeline scrollX"));
141
+ this.scrollYInternal = Math.max(0, finite(y, "Timeline scrollY"));
142
+ }
143
+ configureSnap(options) {
144
+ if (options.enabled !== undefined)
145
+ this.snapEnabledInternal = options.enabled;
146
+ if (options.interval !== undefined)
147
+ this.snapIntervalInternal = positive(options.interval, "Timeline snapInterval");
148
+ }
149
+ scrubTo(time) {
150
+ this.timeline.seek(this.snapTime(time));
151
+ const snapshot = this.snapshot();
152
+ this.preview?.(this.timeline.currentTime, snapshot);
153
+ this.routeBinding?.scrub(this.timeline.currentTime, snapshot);
154
+ }
155
+ stepFrames(frames) {
156
+ if (!Number.isInteger(frames))
157
+ throw new RangeError("Timeline stepFrames expects an integer frame count.");
158
+ const frameDuration = this.timeline.frameRate > 0 ? 1 / this.timeline.frameRate : this.snapIntervalInternal;
159
+ this.timeline.seek(Math.max(0, this.timeline.currentTime + frames * frameDuration));
160
+ this.preview?.(this.timeline.currentTime, this.snapshot());
161
+ }
162
+ togglePlayback() {
163
+ if (this.timeline.isPlaying) {
164
+ this.timeline.pause();
165
+ this.routeBinding?.pause?.();
166
+ }
167
+ else {
168
+ this.timeline.play();
169
+ this.routeBinding?.play?.();
170
+ }
171
+ }
172
+ bindRoutePlayback(binding) {
173
+ this.routeBinding = binding;
174
+ }
175
+ jumpToShot(shotId) {
176
+ const target = this.timeline.tracks
177
+ .filter((track) => timelineTrackKindFromConfig(track.toConfig()) === "shot")
178
+ .flatMap((track) => track.clips)
179
+ .find((clip) => clip.id === shotId || clip.properties.shotId === shotId || clip.name === shotId);
180
+ if (!target)
181
+ throw new Error(`Timeline shot does not exist: ${shotId}`);
182
+ this.timeline.seek(target.startTime);
183
+ const snapshot = this.snapshot();
184
+ this.preview?.(this.timeline.currentTime, snapshot);
185
+ this.routeBinding?.scrub(this.timeline.currentTime, snapshot);
186
+ this.routeBinding?.jumpToShot?.(shotId, this.timeline.currentTime, snapshot);
187
+ return this.timeline.currentTime;
188
+ }
189
+ handleKeyboardShortcut(key) {
190
+ if (key === " " || key === "Space") {
191
+ this.togglePlayback();
192
+ return true;
193
+ }
194
+ if (key === "ArrowLeft") {
195
+ this.stepFrames(-1);
196
+ return true;
197
+ }
198
+ if (key === "ArrowRight") {
199
+ this.stepFrames(1);
200
+ return true;
201
+ }
202
+ if (key === "Home") {
203
+ this.scrubTo(0);
204
+ return true;
205
+ }
206
+ if (key === "End") {
207
+ this.scrubTo(this.timeline.duration);
208
+ return true;
209
+ }
210
+ return false;
211
+ }
212
+ async undo() {
213
+ await this.history.undo();
214
+ }
215
+ async redo() {
216
+ await this.history.redo();
217
+ }
218
+ serializeTimeline() {
219
+ return this.timeline.toConfig();
220
+ }
221
+ snapshot() {
222
+ return {
223
+ timeline: this.timeline.snapshot(),
224
+ zoomPixelsPerSecond: this.zoomPixelsPerSecondInternal,
225
+ scrollX: this.scrollXInternal,
226
+ scrollY: this.scrollYInternal,
227
+ snapEnabled: this.snapEnabledInternal,
228
+ snapInterval: this.snapIntervalInternal,
229
+ selectedIds: this.selection.current(),
230
+ clipboardClipCount: this.clipboardInternal.clips.length,
231
+ canUndo: this.history.canUndo,
232
+ canRedo: this.history.canRedo,
233
+ tracks: this.timeline.tracks.map((track) => {
234
+ const kind = timelineTrackKindFromConfig(track.toConfig());
235
+ const definition = timelineTrackTypeDefinition(kind);
236
+ return {
237
+ id: track.id,
238
+ name: track.name,
239
+ kind,
240
+ laneHeight: definition.laneHeight,
241
+ color: definition.color,
242
+ clipIds: track.clips.map((clip) => clip.id)
243
+ };
244
+ }),
245
+ evidence: {
246
+ clipEditing: this.timeline.tracks.some((track) => track.clips.length > 0),
247
+ keyframeReadyTracks: this.timeline.tracks.some((track) => {
248
+ const kind = timelineTrackKindFromConfig(track.toConfig());
249
+ return timelineTrackTypeDefinition(kind).acceptsKeyframes;
250
+ }),
251
+ timelineScrubbing: true,
252
+ undoRedo: this.history.canUndo || this.history.canRedo,
253
+ serialization: true
254
+ }
255
+ };
256
+ }
257
+ snapTime(time) {
258
+ const value = finite(time, "Timeline time");
259
+ if (!this.snapEnabledInternal)
260
+ return Math.max(0, value);
261
+ return Math.max(0, Number((Math.round(value / this.snapIntervalInternal) * this.snapIntervalInternal).toFixed(4)));
262
+ }
263
+ requireTrack(trackId) {
264
+ const track = this.timeline.tracks.find((candidate) => candidate.id === trackId);
265
+ if (!track)
266
+ throw new Error(`Timeline track does not exist: ${trackId}`);
267
+ return track;
268
+ }
269
+ requireClip(clipId) {
270
+ for (const track of this.timeline.tracks) {
271
+ const clip = track.clips.find((candidate) => candidate.id === clipId);
272
+ if (clip)
273
+ return { track, clip };
274
+ }
275
+ throw new Error(`Timeline clip does not exist: ${clipId}`);
276
+ }
277
+ }
278
+ class AddTrackCommand {
279
+ timeline;
280
+ track;
281
+ name;
282
+ constructor(timeline, track) {
283
+ this.timeline = timeline;
284
+ this.track = track;
285
+ this.name = `Add track ${track.id}`;
286
+ }
287
+ execute() {
288
+ if (!this.timeline.tracks.includes(this.track)) {
289
+ this.timeline.addTrack(this.track);
290
+ }
291
+ }
292
+ undo() {
293
+ removeItem(this.timeline.tracks, this.track);
294
+ }
295
+ }
296
+ class AddClipCommand {
297
+ track;
298
+ clip;
299
+ name;
300
+ constructor(track, clip) {
301
+ this.track = track;
302
+ this.clip = clip;
303
+ this.name = `Add clip ${clip.id}`;
304
+ }
305
+ execute() {
306
+ if (!this.track.clips.includes(this.clip)) {
307
+ this.track.addClip(this.clip);
308
+ }
309
+ }
310
+ undo() {
311
+ removeItem(this.track.clips, this.clip);
312
+ }
313
+ }
314
+ class RemoveClipCommand {
315
+ track;
316
+ clip;
317
+ name;
318
+ constructor(track, clip) {
319
+ this.track = track;
320
+ this.clip = clip;
321
+ this.name = `Delete clip ${clip.id}`;
322
+ }
323
+ execute() {
324
+ removeItem(this.track.clips, this.clip);
325
+ }
326
+ undo() {
327
+ if (!this.track.clips.includes(this.clip)) {
328
+ this.track.addClip(this.clip, { ignoreLock: true });
329
+ }
330
+ }
331
+ }
332
+ class MoveClipCommand {
333
+ clip;
334
+ after;
335
+ name;
336
+ before;
337
+ constructor(clip, after) {
338
+ this.clip = clip;
339
+ this.after = after;
340
+ this.name = `Move clip ${clip.id}`;
341
+ this.before = clip.startTime;
342
+ }
343
+ execute() {
344
+ this.clip.startTime = this.after;
345
+ }
346
+ undo() {
347
+ this.clip.startTime = this.before;
348
+ }
349
+ canMerge(next) {
350
+ return next instanceof MoveClipCommand && next.targetClip() === this.clip;
351
+ }
352
+ merge(next) {
353
+ if (!(next instanceof MoveClipCommand) || next.targetClip() !== this.clip) {
354
+ throw new Error("MoveClipCommand can only merge commands for the same clip.");
355
+ }
356
+ return new MoveClipCommandWithBefore(this.clip, this.before, next.targetStartTime());
357
+ }
358
+ targetClip() {
359
+ return this.clip;
360
+ }
361
+ targetStartTime() {
362
+ return this.after;
363
+ }
364
+ }
365
+ class MoveClipCommandWithBefore extends MoveClipCommand {
366
+ originalStartTime;
367
+ constructor(clip, originalStartTime, after) {
368
+ super(clip, after);
369
+ this.originalStartTime = originalStartTime;
370
+ }
371
+ undo() {
372
+ this.clip.startTime = this.originalStartTime;
373
+ }
374
+ }
375
+ class ResizeClipCommand {
376
+ clip;
377
+ afterDuration;
378
+ afterStart;
379
+ name;
380
+ beforeStart;
381
+ beforeDuration;
382
+ constructor(clip, afterDuration, afterStart) {
383
+ this.clip = clip;
384
+ this.afterDuration = afterDuration;
385
+ this.afterStart = afterStart;
386
+ this.name = `Resize clip ${clip.id}`;
387
+ this.beforeStart = clip.startTime;
388
+ this.beforeDuration = clip.duration;
389
+ }
390
+ execute() {
391
+ if (this.afterStart !== undefined)
392
+ this.clip.startTime = this.afterStart;
393
+ this.clip.duration = this.afterDuration;
394
+ }
395
+ undo() {
396
+ this.clip.startTime = this.beforeStart;
397
+ this.clip.duration = this.beforeDuration;
398
+ }
399
+ }
400
+ class ReplaceClipsCommand {
401
+ track;
402
+ remove;
403
+ add;
404
+ name;
405
+ constructor(track, remove, add, name) {
406
+ this.track = track;
407
+ this.remove = remove;
408
+ this.add = add;
409
+ this.name = name;
410
+ }
411
+ execute() {
412
+ const clips = this.track.clips;
413
+ for (const clip of this.remove)
414
+ removeItem(clips, clip);
415
+ for (const clip of this.add) {
416
+ if (!clips.includes(clip))
417
+ this.track.addClip(clip, { ignoreLock: true });
418
+ }
419
+ }
420
+ undo() {
421
+ const clips = this.track.clips;
422
+ for (const clip of this.add)
423
+ removeItem(clips, clip);
424
+ for (const clip of this.remove) {
425
+ if (!clips.includes(clip))
426
+ this.track.addClip(clip, { ignoreLock: true });
427
+ }
428
+ }
429
+ }
430
+ function removeItem(items, item) {
431
+ const index = items.indexOf(item);
432
+ if (index >= 0)
433
+ items.splice(index, 1);
434
+ }
435
+ function finite(value, label) {
436
+ if (!Number.isFinite(value))
437
+ throw new RangeError(`${label} must be finite.`);
438
+ return value;
439
+ }
440
+ function positive(value, label) {
441
+ finite(value, label);
442
+ if (value <= 0)
443
+ throw new RangeError(`${label} must be positive.`);
444
+ return value;
445
+ }
446
+ function clamp(value, min, max) {
447
+ return Math.max(min, Math.min(max, value));
448
+ }
449
+ //# sourceMappingURL=TimelineEditorController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimelineEditorController.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/TimelineEditorController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { TimelineTrackConfig } from "./TimelineModel";
2
+ export type TimelineEditorTrackKind = "shot" | "animation" | "audio" | "viseme" | "camera" | "dialogue" | "sfx" | "caption" | "selection" | "signal" | "generic";
3
+ export interface TimelineTrackTypeDefinition {
4
+ readonly kind: TimelineEditorTrackKind;
5
+ readonly timelineType: TimelineTrackConfig["type"];
6
+ readonly label: string;
7
+ readonly laneHeight: number;
8
+ readonly color: string;
9
+ readonly acceptsClips: boolean;
10
+ readonly acceptsKeyframes: boolean;
11
+ readonly waveform: boolean;
12
+ readonly lockedByDefault?: boolean;
13
+ }
14
+ export declare const TIMELINE_TRACK_TYPES: readonly TimelineTrackTypeDefinition[];
15
+ export declare function timelineTrackTypeDefinition(kind: TimelineEditorTrackKind): TimelineTrackTypeDefinition;
16
+ export declare function timelineTrackKindFromConfig(track: Pick<TimelineTrackConfig, "type" | "properties">): TimelineEditorTrackKind;
17
+ export interface CreateTimelineTrackConfigOptions {
18
+ readonly id?: string;
19
+ readonly muted?: boolean;
20
+ readonly locked?: boolean;
21
+ readonly weight?: number;
22
+ readonly properties?: TimelineTrackConfig["properties"];
23
+ }
24
+ export declare function createTimelineTrackConfig(kind: TimelineEditorTrackKind, name?: string, options?: CreateTimelineTrackConfigOptions): TimelineTrackConfig;
25
+ //# sourceMappingURL=TimelineTrackTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimelineTrackTypes.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/TimelineTrackTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,MAAM,MAAM,uBAAuB,GAC/B,MAAM,GACN,WAAW,GACX,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,KAAK,GACL,SAAS,GACT,WAAW,GACX,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,eAAO,MAAM,oBAAoB,EAAE,SAAS,2BAA2B,EAYtE,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,uBAAuB,GAAG,2BAA2B,CAMtG;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,GAAG,YAAY,CAAC,GAAG,uBAAuB,CAS5H;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAC;CACzD;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,uBAAuB,EAC7B,IAAI,SAA0C,EAC9C,OAAO,GAAE,gCAAqC,GAC7C,mBAAmB,CAgBrB"}