@opendaw/studio-core 0.0.102 → 0.0.103

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 (38) hide show
  1. package/dist/OfflineEngineRenderer.d.ts +3 -1
  2. package/dist/OfflineEngineRenderer.d.ts.map +1 -1
  3. package/dist/OfflineEngineRenderer.js +10 -2
  4. package/dist/capture/CaptureMidi.js +1 -1
  5. package/dist/capture/RecordAutomation.d.ts +6 -0
  6. package/dist/capture/RecordAutomation.d.ts.map +1 -0
  7. package/dist/capture/RecordAutomation.js +139 -0
  8. package/dist/capture/Recording.d.ts +3 -0
  9. package/dist/capture/Recording.d.ts.map +1 -1
  10. package/dist/capture/Recording.js +16 -36
  11. package/dist/capture/index.d.ts +1 -0
  12. package/dist/capture/index.d.ts.map +1 -1
  13. package/dist/capture/index.js +1 -0
  14. package/dist/offline-engine.js +1 -1
  15. package/dist/offline-engine.js.map +4 -4
  16. package/dist/processors.js +8 -8
  17. package/dist/processors.js.map +3 -3
  18. package/dist/project/Project.d.ts +1 -0
  19. package/dist/project/Project.d.ts.map +1 -1
  20. package/dist/project/Project.js +7 -5
  21. package/dist/project/ProjectApi.d.ts +3 -1
  22. package/dist/project/ProjectApi.d.ts.map +1 -1
  23. package/dist/project/ProjectApi.js +26 -16
  24. package/dist/ui/clipboard/ClipboardManager.d.ts.map +1 -1
  25. package/dist/ui/clipboard/ClipboardManager.js +34 -2
  26. package/dist/ui/clipboard/types/AudioUnitsClipboardHandler.d.ts.map +1 -1
  27. package/dist/ui/clipboard/types/AudioUnitsClipboardHandler.js +6 -0
  28. package/dist/ui/clipboard/types/RegionsClipboardHandler.d.ts.map +1 -1
  29. package/dist/ui/clipboard/types/RegionsClipboardHandler.js +4 -0
  30. package/dist/ui/menu/MenuItems.d.ts +2 -2
  31. package/dist/ui/menu/MenuItems.d.ts.map +1 -1
  32. package/dist/ui/timeline/RegionClipResolver.d.ts +2 -2
  33. package/dist/ui/timeline/RegionClipResolver.d.ts.map +1 -1
  34. package/dist/ui/timeline/RegionClipResolver.js +40 -37
  35. package/dist/ui/timeline/RegionClipResolver.test.js +400 -0
  36. package/dist/ysync/YService.d.ts.map +1 -1
  37. package/dist/ysync/YService.js +1 -2
  38. package/package.json +15 -15
@@ -50,6 +50,7 @@ export declare class Project implements BoxAdaptersContext, Terminable, Terminab
50
50
  startAudioWorklet(restart?: RestartWorklet, options?: ProcessorOptions): EngineWorklet;
51
51
  handleCpuOverload(): void;
52
52
  startRecording(countIn?: boolean): void;
53
+ stopRecording(): void;
53
54
  follow(box: UserInterfaceBox): void;
54
55
  own<T extends Terminable>(terminable: T): T;
55
56
  ownAll<T extends Terminable>(...terminables: Array<T>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../src/project/Project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Project.d.ts","sourceRoot":"","sources":["../../src/project/Project.ts"],"names":[],"mappings":"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"}
@@ -156,6 +156,7 @@ export class Project {
156
156
  }
157
157
  Recording.start(this, countIn).finally();
158
158
  }
159
+ stopRecording() { this.engine.stopRecording(); }
159
160
  follow(box) {
160
161
  this.userEditingManager.follow(box);
161
162
  this.midiLearning.followUser(box.midiControllers);
@@ -215,6 +216,7 @@ export class Project {
215
216
  capture.clearRecordedRegions();
216
217
  }), false);
217
218
  this.engine.stop(true);
219
+ this.engine.setPosition(Recording.wasStartingAt());
218
220
  const subscription = this.engine.isRecording.catchupAndSubscribe(owner => {
219
221
  if (!owner.getValue()) {
220
222
  queueMicrotask(() => subscription.terminate());
@@ -279,11 +281,11 @@ export class Project {
279
281
  }
280
282
  this.#userCreatedSamples.removeByKey(uuid);
281
283
  const autoDelete = StudioPreferences.settings.storage["auto-delete-orphaned-samples"];
282
- if (!autoDelete && !await RuntimeNotifier.approve({
283
- headline: "Delete Sample?",
284
- message: "The sample is no longer used. Delete it from storage? This cannot be undone!",
285
- approveText: "Delete",
286
- cancelText: "Keep"
284
+ if (!autoDelete && await RuntimeNotifier.approve({
285
+ headline: "Keep Sample?",
286
+ message: "The sample is no longer used. Do you want to keep it in storage? Deletion of samples cannot be undone!",
287
+ approveText: "Keep",
288
+ cancelText: "Delete"
287
289
  })) {
288
290
  return;
289
291
  }
@@ -59,7 +59,9 @@ export declare class ProjectApi {
59
59
  createNotStretchedClip(props: AudioContentFactory.NotStretchedProps & AudioContentFactory.Clip): AudioClipBox;
60
60
  createNotStretchedRegion(props: AudioContentFactory.NotStretchedProps & AudioContentFactory.Region): AudioRegionBox;
61
61
  createNoteClip(trackBox: TrackBox, clipIndex: int, { name, hue }?: ClipRegionOptions): NoteClipBox;
62
- duplicateRegion<R extends AnyRegionBoxAdapter>(region: R): Option<R>;
62
+ duplicateRegion<R extends AnyRegionBoxAdapter>(region: R, options?: {
63
+ findFreeSpace?: boolean;
64
+ }): Option<R>;
63
65
  quantiseNotes(collection: NoteEventCollectionBox, { positionQuantisation, durationQuantisation }: QuantiseNotesOptions): void;
64
66
  createValueClip(trackBox: TrackBox, clipIndex: int, { name, hue }?: ClipRegionOptions): ValueClipBox;
65
67
  createNoteRegion({ trackBox, position, duration, loopOffset, loopDuration, eventOffset, eventCollection, mute, name, hue }: NoteRegionParams): NoteRegionBox;
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectApi.d.ts","sourceRoot":"","sources":["../../src/project/ProjectApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProjectApi.d.ts","sourceRoot":"","sources":["../../src/project/ProjectApi.ts"],"names":[],"mappings":"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"}
@@ -109,26 +109,36 @@ export class ProjectApi {
109
109
  box.events.refer(events.owners);
110
110
  });
111
111
  }
112
- duplicateRegion(region) {
112
+ duplicateRegion(region, options) {
113
113
  if (region.trackBoxAdapter.isEmpty()) {
114
114
  return Option.None;
115
115
  }
116
116
  const track = region.trackBoxAdapter.unwrap();
117
- const clearFrom = region.position + region.duration;
118
- const clearTo = region.complete + region.duration;
119
- // Resolve target track (for keep-existing mode)
120
- const targetTrack = this.#project.overlapResolver.resolveTargetTrack(track, clearFrom, clearTo);
121
- // Capture overlap state before creating (for clip/push-existing modes)
122
- const solver = this.#project.overlapResolver.fromRange(targetTrack, clearFrom, clearTo);
123
- // Create the duplicate on target track
124
- const duplicate = region.copyTo({
125
- position: region.complete,
126
- consolidate: true,
127
- track: targetTrack !== track ? targetTrack.box.regions : undefined
128
- });
129
- // Apply overlap resolution
130
- solver();
131
- return Option.wrap(duplicate);
117
+ if (options?.findFreeSpace === true) {
118
+ let insert = region.complete;
119
+ for (const { position, complete } of track.regions.collection.iterateFrom(region.complete)) {
120
+ if (insert + region.duration <= position) {
121
+ break;
122
+ }
123
+ insert = complete;
124
+ }
125
+ return Option.wrap(region.copyTo({
126
+ position: insert,
127
+ consolidate: true
128
+ }));
129
+ }
130
+ else {
131
+ const clearFrom = region.complete;
132
+ const clearTo = region.complete + region.duration;
133
+ const targetTrack = this.#project.overlapResolver.resolveTargetTrack(track, clearFrom, clearTo);
134
+ const solver = this.#project.overlapResolver.fromRange(targetTrack, clearFrom, clearTo);
135
+ const duplicate = region.copyTo({
136
+ position: region.complete,
137
+ consolidate: true
138
+ });
139
+ solver();
140
+ return Option.wrap(duplicate);
141
+ }
132
142
  }
133
143
  quantiseNotes(collection, { positionQuantisation, durationQuantisation }) {
134
144
  if (isAbsent(positionQuantisation) && isAbsent(durationQuantisation)) {
@@ -1 +1 @@
1
- {"version":3,"file":"ClipboardManager.d.ts","sourceRoot":"","sources":["../../../src/ui/clipboard/ClipboardManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAa,MAAM,kBAAkB,CAAA;AASzE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IACpD,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;CACjC,CAAA;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,cAAc;IACtD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;IAChC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;IACxD,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAA;IACjB,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAA;IAChB,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;CACrC;AAED,yBAAiB,gBAAgB,CAAC;IAC9B,KAAK,QAAQ,GAAG,cAAc,CAAA;IA0B9B,MAAM,CAAC,MAAM,OAAO,GAAI,CAAC,SAAS,QAAQ,EAAE,SAAS,WAAW,EAAE,SAAS,gBAAgB,CAAC,CAAC,CAAC,KAAG,YAwGhG,CAAA;;CACJ"}
1
+ {"version":3,"file":"ClipboardManager.d.ts","sourceRoot":"","sources":["../../../src/ui/clipboard/ClipboardManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAa,MAAM,kBAAkB,CAAA;AASzE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IACpD,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;CACjC,CAAA;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,cAAc;IACtD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;IAChC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;IACxD,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAA;IACjB,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,CAAA;IAChB,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;CACrC;AAED,yBAAiB,gBAAgB,CAAC;IAC9B,KAAK,QAAQ,GAAG,cAAc,CAAA;IA0B9B,MAAM,CAAC,MAAM,OAAO,GAAI,CAAC,SAAS,QAAQ,EAAE,SAAS,WAAW,EAAE,SAAS,gBAAgB,CAAC,CAAC,CAAC,KAAG,YAsHhG,CAAA;;CACJ"}
@@ -37,16 +37,23 @@ export var ClipboardManager;
37
37
  });
38
38
  };
39
39
  ClipboardManager.install = (element, handler) => {
40
+ const noClient = { clientX: 0, clientY: 0 };
40
41
  const writeEntry = (entry) => {
41
42
  fallbackEntry = Option.wrap(entry);
42
43
  navigator.clipboard?.writeText(encode(entry)).catch(() => { });
43
44
  };
44
45
  const performCopy = () => {
46
+ if (!handler.canCopy(noClient)) {
47
+ return false;
48
+ }
45
49
  const entry = handler.copy();
46
50
  entry.ifSome(writeEntry);
47
51
  return entry.nonEmpty();
48
52
  };
49
53
  const performCut = () => {
54
+ if (!handler.canCut(noClient)) {
55
+ return false;
56
+ }
50
57
  const entry = handler.cut();
51
58
  entry.ifSome(writeEntry);
52
59
  return entry.nonEmpty();
@@ -57,17 +64,33 @@ export var ClipboardManager;
57
64
  const text = Option.wrap(rawText);
58
65
  const entry = text.flatMap(decode);
59
66
  if (entry.nonEmpty()) {
67
+ if (!handler.canPaste(entry.unwrap(), noClient)) {
68
+ return;
69
+ }
60
70
  handler.paste(entry.unwrap());
61
71
  }
62
72
  else {
63
- fallbackEntry.ifSome(entry => handler.paste(entry));
73
+ fallbackEntry.ifSome(entry => {
74
+ if (!handler.canPaste(entry, noClient)) {
75
+ return;
76
+ }
77
+ handler.paste(entry);
78
+ });
64
79
  }
65
80
  }
66
81
  catch (_error) {
67
- fallbackEntry.ifSome(entry => handler.paste(entry));
82
+ fallbackEntry.ifSome(entry => {
83
+ if (!handler.canPaste(entry, noClient)) {
84
+ return;
85
+ }
86
+ handler.paste(entry);
87
+ });
68
88
  }
69
89
  };
70
90
  return Terminable.many(Events.subscribe(element, "copy", (event) => {
91
+ if (!handler.canCopy(noClient)) {
92
+ return;
93
+ }
71
94
  handler.copy().ifSome(entry => {
72
95
  event.preventDefault();
73
96
  event.stopPropagation();
@@ -76,6 +99,9 @@ export var ClipboardManager;
76
99
  event.clipboardData?.setData("text/plain", encoded);
77
100
  });
78
101
  }), Events.subscribe(element, "cut", (event) => {
102
+ if (!handler.canCut(noClient)) {
103
+ return;
104
+ }
79
105
  handler.cut().ifSome(entry => {
80
106
  event.preventDefault();
81
107
  event.stopPropagation();
@@ -90,11 +116,17 @@ export var ClipboardManager;
90
116
  const text = event.clipboardData?.getData("text/plain") ?? "";
91
117
  const entry = decode(text);
92
118
  if (entry.nonEmpty()) {
119
+ if (!handler.canPaste(entry.unwrap(), noClient)) {
120
+ return;
121
+ }
93
122
  event.preventDefault();
94
123
  handler.paste(entry.unwrap());
95
124
  }
96
125
  else {
97
126
  fallbackEntry.ifSome(entry => {
127
+ if (!handler.canPaste(entry, noClient)) {
128
+ return;
129
+ }
98
130
  event.preventDefault();
99
131
  handler.paste(entry);
100
132
  });
@@ -1 +1 @@
1
- {"version":3,"file":"AudioUnitsClipboardHandler.d.ts","sourceRoot":"","sources":["../../../../src/ui/clipboard/types/AudioUnitsClipboardHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,MAAM,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAM,UAAU,EAAE,QAAQ,EAAa,MAAM,kBAAkB,CAAA;AAWtE,OAAO,EAAC,mBAAmB,EAAqB,cAAc,EAAE,WAAW,EAAC,MAAM,0BAA0B,CAAA;AAC5G,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AAGpE,KAAK,mBAAmB,GAAG,cAAc,CAAC,aAAa,CAAC,CAAA;AAMxD,yBAAiB,mBAAmB,CAAC;IACjC,KAAY,OAAO,GAAG;QAClB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;QACtC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;QAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;QAC3B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;QACvC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAA;QACtC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAA;KACrE,CAAA;IAaM,MAAM,aAAa,GAAI,yFAOG,OAAO,KAAG,gBAAgB,CAAC,mBAAmB,CAsE9E,CAAA;CA6GJ"}
1
+ {"version":3,"file":"AudioUnitsClipboardHandler.d.ts","sourceRoot":"","sources":["../../../../src/ui/clipboard/types/AudioUnitsClipboardHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,MAAM,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAM,UAAU,EAAE,QAAQ,EAAa,MAAM,kBAAkB,CAAA;AAWtE,OAAO,EAAC,mBAAmB,EAAqB,cAAc,EAAE,WAAW,EAAC,MAAM,0BAA0B,CAAA;AAC5G,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AAGpE,KAAK,mBAAmB,GAAG,cAAc,CAAC,aAAa,CAAC,CAAA;AAMxD,yBAAiB,mBAAmB,CAAC;IACjC,KAAY,OAAO,GAAG;QAClB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;QACtC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;QAC5B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;QAC3B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAA;QACvC,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAA;QACtC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAA;KACrE,CAAA;IAaM,MAAM,aAAa,GAAI,yFAOG,OAAO,KAAG,gBAAgB,CAAC,mBAAmB,CAsE9E,CAAA;CAmHJ"}
@@ -153,6 +153,9 @@ export var AudioUnitsClipboard;
153
153
  if (pointer.pointerType === Pointers.AudioOutput) {
154
154
  return address.map(addr => addr.moveTo(primaryBusAddress.uuid));
155
155
  }
156
+ if (pointer.pointerType === Pointers.MIDIDevice) {
157
+ return Option.wrap(rootBoxAdapter.box.outputMidiDevices.address);
158
+ }
156
159
  return Option.None;
157
160
  },
158
161
  excludeBox: box => box.name === AudioUnitBox.ClassName || box.name === AudioBusBox.ClassName || box.name === RootBox.ClassName
@@ -172,6 +175,9 @@ export var AudioUnitsClipboard;
172
175
  if (pointer.pointerType === Pointers.AudioOutput) {
173
176
  return address.map(addr => addr.moveTo(primaryBusAddress.uuid));
174
177
  }
178
+ if (pointer.pointerType === Pointers.MIDIDevice) {
179
+ return Option.wrap(rootBox.outputMidiDevices.address);
180
+ }
175
181
  return Option.None;
176
182
  }
177
183
  });
@@ -1 +1 @@
1
- {"version":3,"file":"RegionsClipboardHandler.d.ts","sourceRoot":"","sources":["../../../../src/ui/clipboard/types/RegionsClipboardHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAO,MAAM,kBAAkB,CAAA;AAC9G,OAAO,EAAM,UAAU,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAErC,OAAO,EACH,mBAAmB,EACnB,WAAW,EAEX,eAAe,EAGlB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AAEpE,OAAO,EAAC,qBAAqB,EAAC,MAAM,sCAAsC,CAAA;AAE1E,KAAK,gBAAgB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;AAcjD,yBAAiB,gBAAgB,CAAC;IAC9B,KAAY,OAAO,GAAG;QAClB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;QACtC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;QACpC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;QACrC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;QAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,mBAAmB,CAAC,CAAA;QAClD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;QAC3B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;QACjC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAA;QAC5D,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAA;QAC3D,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAA;KAClD,CAAA;IA+BM,MAAM,aAAa,GAAI,kIAWG,OAAO,KAAG,gBAAgB,CAAC,gBAAgB,CAgG3E,CAAA;CACJ"}
1
+ {"version":3,"file":"RegionsClipboardHandler.d.ts","sourceRoot":"","sources":["../../../../src/ui/clipboard/types/RegionsClipboardHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAO,MAAM,kBAAkB,CAAA;AAC9G,OAAO,EAAM,UAAU,EAAE,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAErC,OAAO,EACH,mBAAmB,EACnB,WAAW,EAEX,eAAe,EAGlB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,qBAAqB,CAAA;AAEpE,OAAO,EAAC,qBAAqB,EAAC,MAAM,sCAAsC,CAAA;AAE1E,KAAK,gBAAgB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;AAcjD,yBAAiB,gBAAgB,CAAC;IAC9B,KAAY,OAAO,GAAG;QAClB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;QACtC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;QACpC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;QACrC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;QAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,mBAAmB,CAAC,CAAA;QAClD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;QAC3B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;QACjC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAA;QAC5D,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAA;QAC3D,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAA;KAClD,CAAA;IA+BM,MAAM,aAAa,GAAI,kIAWG,OAAO,KAAG,gBAAgB,CAAC,gBAAgB,CAoG3E,CAAA;CACJ"}
@@ -116,6 +116,10 @@ export var RegionsClipboard;
116
116
  return address.flatMap(addr => sourceTrackToTarget.opt(addr.uuid)
117
117
  .map(({ target }) => target.box.regions.address));
118
118
  }
119
+ if (pointer.pointerType === Pointers.ClipCollection) {
120
+ return address.flatMap(addr => sourceTrackToTarget.opt(addr.uuid)
121
+ .map(({ target }) => target.box.clips.address));
122
+ }
119
123
  return Option.None;
120
124
  },
121
125
  modifyBox: (box) => {
@@ -40,9 +40,9 @@ export declare class MenuItem<DATA extends MenuData = MenuData> {
40
40
  #private;
41
41
  static root(): MenuItem<MenuRootData>;
42
42
  static header(properties: Omit<HeaderMenuData, "type"> & MenuItemOptions): MenuItem<{
43
- color?: Color | undefined;
44
43
  label: string;
45
44
  icon: IconSymbol;
45
+ color?: Color | undefined;
46
46
  hidden?: boolean;
47
47
  selectable?: boolean;
48
48
  separatorBefore?: boolean;
@@ -60,8 +60,8 @@ export declare class MenuItem<DATA extends MenuData = MenuData> {
60
60
  }>;
61
61
  static inputValue(properties: Omit<InputValueMenuData, "type"> & MenuItemOptions): MenuItem<{
62
62
  name: string;
63
- color?: Color | undefined;
64
63
  icon: IconSymbol;
64
+ color?: Color | undefined;
65
65
  valueMapping: ValueMapping<number>;
66
66
  stringMapping: StringMapping<number>;
67
67
  model: MutableObservableValue<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItems.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/MenuItems.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MenuItems.d.ts","sourceRoot":"","sources":["../../../src/ui/menu/MenuItems.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ export type ClipTask = {
20
20
  region: AnyRegionBoxAdapter;
21
21
  position: ppqn;
22
22
  };
23
- interface Mask extends Event {
23
+ export interface Mask extends Event {
24
24
  complete: ppqn;
25
25
  }
26
26
  export declare class RegionClipResolver {
@@ -32,10 +32,10 @@ export declare class RegionClipResolver {
32
32
  static fromRange(track: TrackBoxAdapter, position: ppqn, complete: ppqn): Exec;
33
33
  static validateTracks(tracks: ReadonlyArray<TrackBoxAdapter>): void;
34
34
  static validateTrack(track: TrackBoxAdapter): void;
35
+ static createTasksFromMasks(regionIterator: Iterable<AnyRegionBoxAdapter>, maxComplete: ppqn, masks: ReadonlyArray<Mask>, showOrigin: boolean): ReadonlyArray<ClipTask>;
35
36
  static sortAndJoinMasks(masks: ReadonlyArray<Mask>): ReadonlyArray<Mask>;
36
37
  constructor(strategy: RegionModifyStrategies, ground: TrackBoxAdapter);
37
38
  addMask(region: AnyRegionBoxAdapter): void;
38
39
  addMaskRange(position: ppqn, complete: ppqn): void;
39
40
  }
40
- export {};
41
41
  //# sourceMappingURL=RegionClipResolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RegionClipResolver.d.ts","sourceRoot":"","sources":["../../../src/ui/timeline/RegionClipResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,IAAI,EAAE,GAAG,EAAa,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAC,KAAK,EAAmB,IAAI,EAAW,MAAM,kBAAkB,CAAA;AACvE,OAAO,EACH,mBAAmB,EAGnB,eAAe,EAGlB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAE7C,MAAM,MAAM,QAAQ,GAAG;IACnB,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,mBAAmB,CAAA;CAC9B,GAAG;IACA,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,KAAK,EAAE,IAAI,CAAA;IACX,GAAG,EAAE,IAAI,CAAA;CACZ,GAAG;IACA,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,mBAAmB,CAAA;IAC3B,QAAQ,EAAE,IAAI,CAAA;CACjB,GAAG;IACA,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,QAAQ,EAAE,IAAI,CAAA;CACjB,CAAA;AAED,UAAU,IAAK,SAAQ,KAAK;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAC;AAO7C,qBAAa,kBAAkB;;IAC3B,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,EACtC,QAAQ,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAC5C,QAAQ,EAAE,sBAAsB,EAChC,UAAU,GAAE,GAAO,GAAG;QAAE,WAAW,EAAE,IAAI,CAAC;QAAC,aAAa,EAAE,aAAa,CAAA;KAAE;IAe9F,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI;IAO9E,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,IAAI;IAInE,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAuBlD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;gBAuC5D,QAAQ,EAAE,sBAAsB,EAAE,MAAM,EAAE,eAAe;IAMrE,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAK1C,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI;CA+ErD"}
1
+ {"version":3,"file":"RegionClipResolver.d.ts","sourceRoot":"","sources":["../../../src/ui/timeline/RegionClipResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,IAAI,EAAE,GAAG,EAAa,MAAM,kBAAkB,CAAA;AACzE,OAAO,EAAC,KAAK,EAAmB,IAAI,EAAW,MAAM,kBAAkB,CAAA;AACvE,OAAO,EACH,mBAAmB,EAGnB,eAAe,EAGlB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAA;AAE7C,MAAM,MAAM,QAAQ,GAAG;IACnB,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE,mBAAmB,CAAA;CAC9B,GAAG;IACA,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,KAAK,EAAE,IAAI,CAAA;IACX,GAAG,EAAE,IAAI,CAAA;CACZ,GAAG;IACA,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,mBAAmB,CAAA;IAC3B,QAAQ,EAAE,IAAI,CAAA;CACjB,GAAG;IACA,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,QAAQ,EAAE,IAAI,CAAA;CACjB,CAAA;AAED,MAAM,WAAW,IAAK,SAAQ,KAAK;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAC;AAOpD,qBAAa,kBAAkB;;IAC3B,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,EACtC,QAAQ,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAC5C,QAAQ,EAAE,sBAAsB,EAChC,UAAU,GAAE,GAAO,GAAG;QAAE,WAAW,EAAE,IAAI,CAAC;QAAC,aAAa,EAAE,aAAa,CAAA;KAAE;IAe9F,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI;IAO9E,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,GAAG,IAAI;IAInE,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAuBlD,MAAM,CAAC,oBAAoB,CAAC,cAAc,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAC7C,WAAW,EAAE,IAAI,EACjB,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,EAC1B,UAAU,EAAE,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC;IA2BzE,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;gBA+B5D,QAAQ,EAAE,sBAAsB,EAAE,MAAM,EAAE,eAAe;IAMrE,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAK1C,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI;CAsDrD"}
@@ -56,6 +56,43 @@ export class RegionClipResolver {
56
56
  throw error;
57
57
  }
58
58
  }
59
+ static createTasksFromMasks(regionIterator, maxComplete, masks, showOrigin) {
60
+ const tasks = [];
61
+ for (const region of regionIterator) {
62
+ if (region.position >= maxComplete) {
63
+ break;
64
+ }
65
+ if (region.isSelected && !showOrigin) {
66
+ continue;
67
+ }
68
+ if (region.duration <= 0) {
69
+ return panic(`Invalid duration(${region.duration})`);
70
+ }
71
+ const overlapping = masks.filter(mask => region.position < mask.complete && region.complete > mask.position);
72
+ if (overlapping.length === 0) {
73
+ continue;
74
+ }
75
+ for (let i = overlapping.length - 1; i >= 0; i--) {
76
+ const { position, complete } = overlapping[i];
77
+ const positionIn = region.position >= position;
78
+ const completeIn = region.complete <= complete;
79
+ if (positionIn && completeIn) {
80
+ tasks.push({ type: "delete", region });
81
+ break;
82
+ }
83
+ else if (!positionIn && !completeIn) {
84
+ tasks.push({ type: "separate", region, begin: position, end: complete });
85
+ }
86
+ else if (completeIn) {
87
+ tasks.push({ type: "complete", region, position });
88
+ }
89
+ else {
90
+ tasks.push({ type: "start", region, position: complete });
91
+ }
92
+ }
93
+ }
94
+ return tasks;
95
+ }
59
96
  static sortAndJoinMasks(masks) {
60
97
  if (masks.length === 0) {
61
98
  return panic("No clip-masks to solve");
@@ -103,46 +140,12 @@ export class RegionClipResolver {
103
140
  this.#masks.push({ type: "range", position, complete });
104
141
  }
105
142
  #createSolver() {
106
- const tasks = this.#createTasksFromMasks(RegionClipResolver.sortAndJoinMasks(this.#masks));
143
+ const masks = RegionClipResolver.sortAndJoinMasks(this.#masks);
144
+ const maxComplete = masks.reduce((max, mask) => Math.max(max, mask.complete), 0);
145
+ const tasks = RegionClipResolver.createTasksFromMasks(this.#ground.regions.collection.iterateRange(0, maxComplete), maxComplete, masks, this.#strategy.showOrigin());
107
146
  this.#masks.length = 0;
108
147
  return () => this.#executeTasks(tasks);
109
148
  }
110
- #createTasksFromMasks(masks) {
111
- const tasks = [];
112
- masks.forEach(({ position, complete }) => {
113
- // Iterate from 0 to find all regions that OVERLAP with [position, complete],
114
- // not just regions that START within that range
115
- for (const region of this.#ground.regions.collection.iterateRange(0, complete)) {
116
- if (region.position >= complete) {
117
- break;
118
- } // past the mask, done
119
- if (region.complete <= position) {
120
- continue;
121
- } // ends before mask, skip
122
- if (region.isSelected && !this.#strategy.showOrigin()) {
123
- continue;
124
- }
125
- else if (region.duration <= 0) {
126
- return panic(`Invalid duration(${region.duration})`);
127
- }
128
- const positionIn = region.position >= position;
129
- const completeIn = region.complete <= complete;
130
- if (positionIn && completeIn) {
131
- tasks.push({ type: "delete", region });
132
- }
133
- else if (!positionIn && !completeIn) {
134
- tasks.push({ type: "separate", region, begin: position, end: complete });
135
- }
136
- else if (completeIn) {
137
- tasks.push({ type: "complete", region, position });
138
- }
139
- else {
140
- tasks.push({ type: "start", region, position: complete });
141
- }
142
- }
143
- });
144
- return tasks;
145
- }
146
149
  #executeTasks(tasks) {
147
150
  tasks
148
151
  .toSorted(({ type: a }, { type: b }) => {