@opendaw/studio-adapters 0.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 (296) hide show
  1. package/README.md +1 -0
  2. package/dist/AudioData.d.ts +7 -0
  3. package/dist/AudioData.d.ts.map +1 -0
  4. package/dist/AudioData.js +1 -0
  5. package/dist/AudioFileBoxAdapter.d.ts +22 -0
  6. package/dist/AudioFileBoxAdapter.d.ts.map +1 -0
  7. package/dist/AudioFileBoxAdapter.js +19 -0
  8. package/dist/AudioLoader.d.ts +26 -0
  9. package/dist/AudioLoader.d.ts.map +1 -0
  10. package/dist/AudioLoader.js +1 -0
  11. package/dist/AudioMetaData.d.ts +8 -0
  12. package/dist/AudioMetaData.d.ts.map +1 -0
  13. package/dist/AudioMetaData.js +1 -0
  14. package/dist/AudioSample.d.ts +5 -0
  15. package/dist/AudioSample.d.ts.map +1 -0
  16. package/dist/AudioSample.js +1 -0
  17. package/dist/AutomatableParameterFieldAdapter.d.ts +35 -0
  18. package/dist/AutomatableParameterFieldAdapter.d.ts.map +1 -0
  19. package/dist/AutomatableParameterFieldAdapter.js +161 -0
  20. package/dist/BoxAdapter.d.ts +7 -0
  21. package/dist/BoxAdapter.d.ts.map +1 -0
  22. package/dist/BoxAdapter.js +1 -0
  23. package/dist/BoxAdapterCollection.d.ts +19 -0
  24. package/dist/BoxAdapterCollection.d.ts.map +1 -0
  25. package/dist/BoxAdapterCollection.js +35 -0
  26. package/dist/BoxAdapters.d.ts +11 -0
  27. package/dist/BoxAdapters.d.ts.map +1 -0
  28. package/dist/BoxAdapters.js +129 -0
  29. package/dist/BoxAdaptersContext.d.ts +24 -0
  30. package/dist/BoxAdaptersContext.d.ts.map +1 -0
  31. package/dist/BoxAdaptersContext.js +1 -0
  32. package/dist/ClipNotifications.d.ts +14 -0
  33. package/dist/ClipNotifications.d.ts.map +1 -0
  34. package/dist/ClipNotifications.js +1 -0
  35. package/dist/ClipSequencing.d.ts +12 -0
  36. package/dist/ClipSequencing.d.ts.map +1 -0
  37. package/dist/ClipSequencing.js +1 -0
  38. package/dist/EngineProcessorOptions.d.ts +18 -0
  39. package/dist/EngineProcessorOptions.d.ts.map +1 -0
  40. package/dist/EngineProcessorOptions.js +26 -0
  41. package/dist/EngineStateSchema.d.ts +7 -0
  42. package/dist/EngineStateSchema.d.ts.map +1 -0
  43. package/dist/EngineStateSchema.js +5 -0
  44. package/dist/FieldAdapter.d.ts +26 -0
  45. package/dist/FieldAdapter.d.ts.map +1 -0
  46. package/dist/FieldAdapter.js +59 -0
  47. package/dist/IconSymbol.d.ts +119 -0
  48. package/dist/IconSymbol.d.ts.map +1 -0
  49. package/dist/IconSymbol.js +119 -0
  50. package/dist/IndexComparator.d.ts +3 -0
  51. package/dist/IndexComparator.d.ts.map +1 -0
  52. package/dist/IndexComparator.js +11 -0
  53. package/dist/ManadatoryBoxes.d.ts +9 -0
  54. package/dist/ManadatoryBoxes.d.ts.map +1 -0
  55. package/dist/ManadatoryBoxes.js +1 -0
  56. package/dist/NoteBroadcaster.d.ts +14 -0
  57. package/dist/NoteBroadcaster.d.ts.map +1 -0
  58. package/dist/NoteBroadcaster.js +23 -0
  59. package/dist/NoteSender.d.ts +9 -0
  60. package/dist/NoteSender.d.ts.map +1 -0
  61. package/dist/NoteSender.js +15 -0
  62. package/dist/NoteStreamReceiver.d.ts +12 -0
  63. package/dist/NoteStreamReceiver.d.ts.map +1 -0
  64. package/dist/NoteStreamReceiver.js +23 -0
  65. package/dist/ParameterAdapterSet.d.ts +14 -0
  66. package/dist/ParameterAdapterSet.d.ts.map +1 -0
  67. package/dist/ParameterAdapterSet.js +27 -0
  68. package/dist/ParameterFieldAdapters.d.ts +11 -0
  69. package/dist/ParameterFieldAdapters.d.ts.map +1 -0
  70. package/dist/ParameterFieldAdapters.js +13 -0
  71. package/dist/PeakMeterProcessorOptions.d.ts +8 -0
  72. package/dist/PeakMeterProcessorOptions.d.ts.map +1 -0
  73. package/dist/PeakMeterProcessorOptions.js +1 -0
  74. package/dist/PianoModeAdapter.d.ts +15 -0
  75. package/dist/PianoModeAdapter.d.ts.map +1 -0
  76. package/dist/PianoModeAdapter.js +28 -0
  77. package/dist/ProjectDecoder.d.ts +13 -0
  78. package/dist/ProjectDecoder.d.ts.map +1 -0
  79. package/dist/ProjectDecoder.js +27 -0
  80. package/dist/RecordingProcessorOptions.d.ts +4 -0
  81. package/dist/RecordingProcessorOptions.d.ts.map +1 -0
  82. package/dist/RecordingProcessorOptions.js +1 -0
  83. package/dist/RingBuffer.d.ts +19 -0
  84. package/dist/RingBuffer.d.ts.map +1 -0
  85. package/dist/RingBuffer.js +92 -0
  86. package/dist/RootBoxAdapter.d.ts +30 -0
  87. package/dist/RootBoxAdapter.d.ts.map +1 -0
  88. package/dist/RootBoxAdapter.js +43 -0
  89. package/dist/SortedBoxAdapterCollection.d.ts +29 -0
  90. package/dist/SortedBoxAdapterCollection.d.ts.map +1 -0
  91. package/dist/SortedBoxAdapterCollection.js +100 -0
  92. package/dist/UnionAdapterTypes.d.ts +15 -0
  93. package/dist/UnionAdapterTypes.d.ts.map +1 -0
  94. package/dist/UnionAdapterTypes.js +5 -0
  95. package/dist/UpdateClockRate.d.ts +2 -0
  96. package/dist/UpdateClockRate.d.ts.map +1 -0
  97. package/dist/UpdateClockRate.js +2 -0
  98. package/dist/audio-unit/AudioBusBoxAdapter.d.ts +28 -0
  99. package/dist/audio-unit/AudioBusBoxAdapter.d.ts.map +1 -0
  100. package/dist/audio-unit/AudioBusBoxAdapter.js +33 -0
  101. package/dist/audio-unit/AudioUnitBoxAdapter.d.ts +55 -0
  102. package/dist/audio-unit/AudioUnitBoxAdapter.d.ts.map +1 -0
  103. package/dist/audio-unit/AudioUnitBoxAdapter.js +97 -0
  104. package/dist/audio-unit/AudioUnitInput.d.ts +21 -0
  105. package/dist/audio-unit/AudioUnitInput.d.ts.map +1 -0
  106. package/dist/audio-unit/AudioUnitInput.js +74 -0
  107. package/dist/audio-unit/AudioUnitInputAdapter.d.ts +4 -0
  108. package/dist/audio-unit/AudioUnitInputAdapter.d.ts.map +1 -0
  109. package/dist/audio-unit/AudioUnitInputAdapter.js +1 -0
  110. package/dist/audio-unit/AudioUnitOutput.d.ts +14 -0
  111. package/dist/audio-unit/AudioUnitOutput.d.ts.map +1 -0
  112. package/dist/audio-unit/AudioUnitOutput.js +42 -0
  113. package/dist/audio-unit/AudioUnitTracks.d.ts +21 -0
  114. package/dist/audio-unit/AudioUnitTracks.d.ts.map +1 -0
  115. package/dist/audio-unit/AudioUnitTracks.js +62 -0
  116. package/dist/audio-unit/AuxSendBoxAdapter.d.ts +23 -0
  117. package/dist/audio-unit/AuxSendBoxAdapter.d.ts.map +1 -0
  118. package/dist/audio-unit/AuxSendBoxAdapter.js +58 -0
  119. package/dist/devices/audio-effects/DelayDeviceBoxAdapter.d.ts +35 -0
  120. package/dist/devices/audio-effects/DelayDeviceBoxAdapter.d.ts.map +1 -0
  121. package/dist/devices/audio-effects/DelayDeviceBoxAdapter.js +50 -0
  122. package/dist/devices/audio-effects/ModularDeviceBoxAdapter.d.ts +31 -0
  123. package/dist/devices/audio-effects/ModularDeviceBoxAdapter.d.ts.map +1 -0
  124. package/dist/devices/audio-effects/ModularDeviceBoxAdapter.js +38 -0
  125. package/dist/devices/audio-effects/RevampDeviceBoxAdapter.d.ts +52 -0
  126. package/dist/devices/audio-effects/RevampDeviceBoxAdapter.d.ts.map +1 -0
  127. package/dist/devices/audio-effects/RevampDeviceBoxAdapter.js +66 -0
  128. package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.d.ts +35 -0
  129. package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.d.ts.map +1 -0
  130. package/dist/devices/audio-effects/ReverbDeviceBoxAdapter.js +44 -0
  131. package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.d.ts +33 -0
  132. package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.d.ts.map +1 -0
  133. package/dist/devices/audio-effects/StereoToolDeviceBoxAdapter.js +41 -0
  134. package/dist/devices/instruments/NanoDeviceBoxAdapter.d.ts +32 -0
  135. package/dist/devices/instruments/NanoDeviceBoxAdapter.d.ts.map +1 -0
  136. package/dist/devices/instruments/NanoDeviceBoxAdapter.js +40 -0
  137. package/dist/devices/instruments/Playfield/Gate.d.ts +6 -0
  138. package/dist/devices/instruments/Playfield/Gate.d.ts.map +1 -0
  139. package/dist/devices/instruments/Playfield/Gate.js +6 -0
  140. package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts +63 -0
  141. package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.d.ts.map +1 -0
  142. package/dist/devices/instruments/Playfield/PlayfieldSampleBoxAdapter.js +128 -0
  143. package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.d.ts +35 -0
  144. package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.d.ts.map +1 -0
  145. package/dist/devices/instruments/PlayfieldDeviceBoxAdapter.js +40 -0
  146. package/dist/devices/instruments/TapeDeviceBoxAdapter.d.ts +34 -0
  147. package/dist/devices/instruments/TapeDeviceBoxAdapter.d.ts.map +1 -0
  148. package/dist/devices/instruments/TapeDeviceBoxAdapter.js +42 -0
  149. package/dist/devices/instruments/VaporisateurDeviceBoxAdapter.d.ts +39 -0
  150. package/dist/devices/instruments/VaporisateurDeviceBoxAdapter.d.ts.map +1 -0
  151. package/dist/devices/instruments/VaporisateurDeviceBoxAdapter.js +47 -0
  152. package/dist/devices/midi-effects/ArpeggioDeviceBoxAdapter.d.ts +37 -0
  153. package/dist/devices/midi-effects/ArpeggioDeviceBoxAdapter.d.ts.map +1 -0
  154. package/dist/devices/midi-effects/ArpeggioDeviceBoxAdapter.js +51 -0
  155. package/dist/devices/midi-effects/PitchDeviceBoxAdapter.d.ts +32 -0
  156. package/dist/devices/midi-effects/PitchDeviceBoxAdapter.d.ts.map +1 -0
  157. package/dist/devices/midi-effects/PitchDeviceBoxAdapter.js +39 -0
  158. package/dist/devices/midi-effects/ZeitgeistDeviceBoxAdapter.d.ts +28 -0
  159. package/dist/devices/midi-effects/ZeitgeistDeviceBoxAdapter.d.ts.map +1 -0
  160. package/dist/devices/midi-effects/ZeitgeistDeviceBoxAdapter.js +35 -0
  161. package/dist/devices.d.ts +68 -0
  162. package/dist/devices.d.ts.map +1 -0
  163. package/dist/devices.js +55 -0
  164. package/dist/editing/UserEditing.d.ts +15 -0
  165. package/dist/editing/UserEditing.d.ts.map +1 -0
  166. package/dist/editing/UserEditing.js +39 -0
  167. package/dist/editing/UserEditingManager.d.ts +14 -0
  168. package/dist/editing/UserEditingManager.d.ts.map +1 -0
  169. package/dist/editing/UserEditingManager.js +23 -0
  170. package/dist/grooves/GrooveBoxAdapter.d.ts +10 -0
  171. package/dist/grooves/GrooveBoxAdapter.d.ts.map +1 -0
  172. package/dist/grooves/GrooveBoxAdapter.js +4 -0
  173. package/dist/grooves/GrooveShuffleBoxAdapter.d.ts +27 -0
  174. package/dist/grooves/GrooveShuffleBoxAdapter.d.ts.map +1 -0
  175. package/dist/grooves/GrooveShuffleBoxAdapter.js +43 -0
  176. package/dist/index.d.ts +98 -0
  177. package/dist/index.d.ts.map +1 -0
  178. package/dist/index.js +99 -0
  179. package/dist/modular/abstract.d.ts +30 -0
  180. package/dist/modular/abstract.d.ts.map +1 -0
  181. package/dist/modular/abstract.js +39 -0
  182. package/dist/modular/connection.d.ts +15 -0
  183. package/dist/modular/connection.d.ts.map +1 -0
  184. package/dist/modular/connection.js +12 -0
  185. package/dist/modular/connector.d.ts +21 -0
  186. package/dist/modular/connector.d.ts.map +1 -0
  187. package/dist/modular/connector.js +42 -0
  188. package/dist/modular/modular.d.ts +30 -0
  189. package/dist/modular/modular.d.ts.map +1 -0
  190. package/dist/modular/modular.js +68 -0
  191. package/dist/modular/module.d.ts +21 -0
  192. package/dist/modular/module.d.ts.map +1 -0
  193. package/dist/modular/module.js +23 -0
  194. package/dist/modular/modules/audio-input.d.ts +14 -0
  195. package/dist/modular/modules/audio-input.d.ts.map +1 -0
  196. package/dist/modular/modules/audio-input.js +17 -0
  197. package/dist/modular/modules/audio-output.d.ts +14 -0
  198. package/dist/modular/modules/audio-output.d.ts.map +1 -0
  199. package/dist/modular/modules/audio-output.js +17 -0
  200. package/dist/modular/modules/delay.d.ts +17 -0
  201. package/dist/modular/modules/delay.d.ts.map +1 -0
  202. package/dist/modular/modules/delay.js +23 -0
  203. package/dist/modular/modules/gain.d.ts +17 -0
  204. package/dist/modular/modules/gain.d.ts.map +1 -0
  205. package/dist/modular/modules/gain.js +23 -0
  206. package/dist/modular/modules/multiplier.d.ts +13 -0
  207. package/dist/modular/modules/multiplier.d.ts.map +1 -0
  208. package/dist/modular/modules/multiplier.js +19 -0
  209. package/dist/modular/user-interface.d.ts +21 -0
  210. package/dist/modular/user-interface.d.ts.map +1 -0
  211. package/dist/modular/user-interface.js +23 -0
  212. package/dist/protocols.d.ts +25 -0
  213. package/dist/protocols.d.ts.map +1 -0
  214. package/dist/protocols.js +1 -0
  215. package/dist/selection/FilteredSelection.d.ts +20 -0
  216. package/dist/selection/FilteredSelection.d.ts.map +1 -0
  217. package/dist/selection/FilteredSelection.js +58 -0
  218. package/dist/selection/SelectableVertex.d.ts +4 -0
  219. package/dist/selection/SelectableVertex.d.ts.map +1 -0
  220. package/dist/selection/SelectableVertex.js +1 -0
  221. package/dist/selection/SelectionEntry.d.ts +7 -0
  222. package/dist/selection/SelectionEntry.d.ts.map +1 -0
  223. package/dist/selection/SelectionEntry.js +1 -0
  224. package/dist/selection/VertexSelection.d.ts +29 -0
  225. package/dist/selection/VertexSelection.d.ts.map +1 -0
  226. package/dist/selection/VertexSelection.js +120 -0
  227. package/dist/selection/isVertexOfBox.d.ts +5 -0
  228. package/dist/selection/isVertexOfBox.d.ts.map +1 -0
  229. package/dist/selection/isVertexOfBox.js +1 -0
  230. package/dist/timeline/ClipBoxAdapter.d.ts +38 -0
  231. package/dist/timeline/ClipBoxAdapter.d.ts.map +1 -0
  232. package/dist/timeline/ClipBoxAdapter.js +11 -0
  233. package/dist/timeline/MarkerBoxAdapter.d.ts +24 -0
  234. package/dist/timeline/MarkerBoxAdapter.d.ts.map +1 -0
  235. package/dist/timeline/MarkerBoxAdapter.js +41 -0
  236. package/dist/timeline/MarkerTrackAdapter.d.ts +19 -0
  237. package/dist/timeline/MarkerTrackAdapter.d.ts.map +1 -0
  238. package/dist/timeline/MarkerTrackAdapter.js +45 -0
  239. package/dist/timeline/RegionBoxAdapter.d.ts +48 -0
  240. package/dist/timeline/RegionBoxAdapter.d.ts.map +1 -0
  241. package/dist/timeline/RegionBoxAdapter.js +12 -0
  242. package/dist/timeline/RegionEditing.d.ts +7 -0
  243. package/dist/timeline/RegionEditing.d.ts.map +1 -0
  244. package/dist/timeline/RegionEditing.js +40 -0
  245. package/dist/timeline/TimelineBoxAdapter.d.ts +16 -0
  246. package/dist/timeline/TimelineBoxAdapter.d.ts.map +1 -0
  247. package/dist/timeline/TimelineBoxAdapter.js +14 -0
  248. package/dist/timeline/TrackBoxAdapter.d.ts +32 -0
  249. package/dist/timeline/TrackBoxAdapter.d.ts.map +1 -0
  250. package/dist/timeline/TrackBoxAdapter.js +167 -0
  251. package/dist/timeline/TrackClips.d.ts +16 -0
  252. package/dist/timeline/TrackClips.d.ts.map +1 -0
  253. package/dist/timeline/TrackClips.js +26 -0
  254. package/dist/timeline/TrackRegions.d.ts +17 -0
  255. package/dist/timeline/TrackRegions.d.ts.map +1 -0
  256. package/dist/timeline/TrackRegions.js +41 -0
  257. package/dist/timeline/TrackType.d.ts +12 -0
  258. package/dist/timeline/TrackType.d.ts.map +1 -0
  259. package/dist/timeline/TrackType.js +37 -0
  260. package/dist/timeline/clip/AudioClipBoxAdapter.d.ts +39 -0
  261. package/dist/timeline/clip/AudioClipBoxAdapter.d.ts.map +1 -0
  262. package/dist/timeline/clip/AudioClipBoxAdapter.js +87 -0
  263. package/dist/timeline/clip/NoteClipBoxAdapter.d.ts +39 -0
  264. package/dist/timeline/clip/NoteClipBoxAdapter.d.ts.map +1 -0
  265. package/dist/timeline/clip/NoteClipBoxAdapter.js +92 -0
  266. package/dist/timeline/clip/ValueClipBoxAdapter.d.ts +40 -0
  267. package/dist/timeline/clip/ValueClipBoxAdapter.d.ts.map +1 -0
  268. package/dist/timeline/clip/ValueClipBoxAdapter.js +98 -0
  269. package/dist/timeline/collection/NoteEventCollectionBoxAdapter.d.ts +40 -0
  270. package/dist/timeline/collection/NoteEventCollectionBoxAdapter.d.ts.map +1 -0
  271. package/dist/timeline/collection/NoteEventCollectionBoxAdapter.js +136 -0
  272. package/dist/timeline/collection/ValueEventCollectionBoxAdapter.d.ts +33 -0
  273. package/dist/timeline/collection/ValueEventCollectionBoxAdapter.d.ts.map +1 -0
  274. package/dist/timeline/collection/ValueEventCollectionBoxAdapter.js +139 -0
  275. package/dist/timeline/event/InterpolationFieldAdapter.d.ts +8 -0
  276. package/dist/timeline/event/InterpolationFieldAdapter.d.ts.map +1 -0
  277. package/dist/timeline/event/InterpolationFieldAdapter.js +47 -0
  278. package/dist/timeline/event/NoteEventBoxAdapter.d.ts +45 -0
  279. package/dist/timeline/event/NoteEventBoxAdapter.d.ts.map +1 -0
  280. package/dist/timeline/event/NoteEventBoxAdapter.js +106 -0
  281. package/dist/timeline/event/ValueEventBoxAdapter.d.ts +39 -0
  282. package/dist/timeline/event/ValueEventBoxAdapter.d.ts.map +1 -0
  283. package/dist/timeline/event/ValueEventBoxAdapter.js +113 -0
  284. package/dist/timeline/region/AudioRegionBoxAdapter.d.ts +53 -0
  285. package/dist/timeline/region/AudioRegionBoxAdapter.d.ts.map +1 -0
  286. package/dist/timeline/region/AudioRegionBoxAdapter.js +143 -0
  287. package/dist/timeline/region/NoteRegionBoxAdapter.d.ts +53 -0
  288. package/dist/timeline/region/NoteRegionBoxAdapter.d.ts.map +1 -0
  289. package/dist/timeline/region/NoteRegionBoxAdapter.js +186 -0
  290. package/dist/timeline/region/ValueRegionBoxAdapter.d.ts +59 -0
  291. package/dist/timeline/region/ValueRegionBoxAdapter.d.ts.map +1 -0
  292. package/dist/timeline/region/ValueRegionBoxAdapter.js +193 -0
  293. package/dist/unions.d.ts +11 -0
  294. package/dist/unions.d.ts.map +1 -0
  295. package/dist/unions.js +17 -0
  296. package/package.json +38 -0
@@ -0,0 +1,120 @@
1
+ import { asInstanceOf, assert, Listeners, Option, Terminator, UUID } from "@opendaw/lib-std";
2
+ import { Address } from "@opendaw/lib-box";
3
+ import { Pointers } from "@opendaw/studio-enums";
4
+ import { SelectionBox } from "@opendaw/studio-boxes";
5
+ import { FilteredSelection } from "./FilteredSelection";
6
+ /**
7
+ * Represents the main selection management within a document.
8
+ * This class maintains selections for different users, with each user having their own unique selection.
9
+ */
10
+ export class VertexSelection {
11
+ editing;
12
+ owner;
13
+ #lifeTime;
14
+ #entityMap; // sorted on entity
15
+ #selectableMap; // sorted on selectable
16
+ #listeners;
17
+ #target = Option.None;
18
+ constructor(editing, owner) {
19
+ this.editing = editing;
20
+ this.owner = owner;
21
+ this.#lifeTime = new Terminator();
22
+ this.#entityMap = UUID.newSet(entry => entry.box.address.uuid);
23
+ this.#selectableMap = Address.newSet(entry => entry.selectable.address);
24
+ this.#listeners = new Listeners();
25
+ }
26
+ switch(target) {
27
+ this.release();
28
+ console.debug(`VertexSelection.switch(${target.address.toString()})`);
29
+ this.#target = Option.wrap(target);
30
+ this.#lifeTime.own(this.#watch(target));
31
+ return this;
32
+ }
33
+ release() {
34
+ if (this.#target.isEmpty()) {
35
+ return;
36
+ }
37
+ this.#target = Option.None;
38
+ this.#lifeTime.terminate();
39
+ this.#selectableMap.forEach(entry => this.#listeners.proxy.onDeselected(entry.selectable));
40
+ this.#selectableMap.clear();
41
+ this.#entityMap.clear();
42
+ }
43
+ createFilteredSelection(affiliate, map) {
44
+ return new FilteredSelection(this, affiliate, map);
45
+ }
46
+ select(...selectables) {
47
+ if (this.#target.isEmpty()) {
48
+ console.debug(`Cannot select without a user`);
49
+ return;
50
+ }
51
+ if (selectables.length === 0) {
52
+ return;
53
+ }
54
+ this.editing.modify(() => {
55
+ const selection = this.#target.unwrap();
56
+ for (const selectable of selectables) {
57
+ if (!this.#selectableMap.hasKey(selectable.address)) {
58
+ SelectionBox.create(this.owner, UUID.generate(), box => {
59
+ box.selectable.refer(selectable);
60
+ box.selection.refer(selection);
61
+ });
62
+ }
63
+ }
64
+ }, false);
65
+ }
66
+ deselect(...selectables) {
67
+ if (this.#target.isEmpty()) {
68
+ console.debug(`Cannot deselect without a user`);
69
+ return;
70
+ }
71
+ if (selectables.length === 0) {
72
+ return;
73
+ }
74
+ this.editing.modify(() => selectables
75
+ .forEach(selectable => this.#selectableMap.get(selectable.address).box.delete()), false);
76
+ }
77
+ deselectAll() {
78
+ this.deselect(...this.#selectableMap.values().map(entry => entry.selectable));
79
+ }
80
+ distance(inventory) {
81
+ const excludes = [];
82
+ for (const selectable of inventory) {
83
+ if (!this.#selectableMap.hasKey(selectable.address)) {
84
+ excludes.push(selectable);
85
+ }
86
+ }
87
+ return excludes;
88
+ }
89
+ isEmpty() { return this.#selectableMap.size() === 0; }
90
+ count() { return this.#selectableMap.size(); }
91
+ isSelected(selectable) { return this.#selectableMap.hasKey(selectable.address); }
92
+ selected() { return this.#selectableMap.values().map(entry => entry.selectable); }
93
+ subscribe(listener) { return this.#listeners.subscribe(listener); }
94
+ catchupAndSubscribe(listener) {
95
+ this.selected().forEach(element => listener.onSelected(element));
96
+ return this.#listeners.subscribe(listener);
97
+ }
98
+ #watch(target) {
99
+ const listener = {
100
+ onAdd: (pointer) => {
101
+ const box = asInstanceOf(pointer.box, SelectionBox);
102
+ const selectable = box.selectable.targetVertex.unwrap();
103
+ const entry = { box, selectable };
104
+ this.#listeners.proxy.onSelected(selectable);
105
+ assert(this.#entityMap.add(entry), "Could not add to entityMap");
106
+ assert(this.#selectableMap.add(entry), "Could not add to selectableMap");
107
+ },
108
+ onRemove: (pointer) => {
109
+ const box = asInstanceOf(pointer.box, SelectionBox);
110
+ const entry = this.#entityMap.removeByKey(box.address.uuid);
111
+ assert(entry.box === box, "Broken selection");
112
+ const selectable = entry.selectable;
113
+ this.#listeners.proxy.onDeselected(selectable);
114
+ this.#selectableMap.removeByKey(selectable.address);
115
+ }
116
+ };
117
+ target.pointerHub.filter(Pointers.Selection).forEach(pointer => listener.onAdd(pointer));
118
+ return target.pointerHub.subscribeTransactual(listener, Pointers.Selection);
119
+ }
120
+ }
@@ -0,0 +1,5 @@
1
+ import { Predicate } from "@opendaw/lib-std";
2
+ import { Box } from "@opendaw/lib-box";
3
+ import { SelectableVertex } from "./SelectableVertex";
4
+ export declare const isVertexOfBox: (predicate: Predicate<Box>) => Predicate<SelectableVertex>;
5
+ //# sourceMappingURL=isVertexOfBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isVertexOfBox.d.ts","sourceRoot":"","sources":["../../src/selection/isVertexOfBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAC,GAAG,EAAS,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AAEnD,eAAO,MAAM,aAAa,GAAI,WAAW,SAAS,CAAC,GAAG,CAAC,KAAG,SAAS,CAAC,gBAAgB,CAA8C,CAAA"}
@@ -0,0 +1 @@
1
+ export const isVertexOfBox = (predicate) => (vertex) => predicate(vertex.box);
@@ -0,0 +1,38 @@
1
+ import { int, Nullish, ObservableValue, Observer, Option, Selectable, Subscription } from "@opendaw/lib-std";
2
+ import { Box } from "@opendaw/lib-box";
3
+ import { ValueClipBoxAdapter } from "./clip/ValueClipBoxAdapter";
4
+ import { ppqn } from "@opendaw/lib-dsp";
5
+ import { AudioClipBoxAdapter } from "./clip/AudioClipBoxAdapter";
6
+ import { AnyClipBox } from "../unions";
7
+ import { NoteClipBoxAdapter } from "./clip/NoteClipBoxAdapter";
8
+ import { BoxAdapter } from "../BoxAdapter";
9
+ import { TrackBoxAdapter } from "./TrackBoxAdapter";
10
+ import { AnyClipBoxAdapter } from "../UnionAdapterTypes";
11
+ import { BoxAdapters } from "../BoxAdapters";
12
+ export interface ClipBoxAdapterVisitor<R> {
13
+ visitAudioClipBoxAdapter?(adapter: AudioClipBoxAdapter): R;
14
+ visitNoteClipBoxAdapter?(adapter: NoteClipBoxAdapter): R;
15
+ visitValueClipBoxAdapter?(adapter: ValueClipBoxAdapter): R;
16
+ }
17
+ export interface ClipBoxAdapter<CONTENT> extends BoxAdapter, Selectable {
18
+ get box(): AnyClipBox;
19
+ get isSelected(): boolean;
20
+ get hasCollection(): boolean;
21
+ get duration(): ppqn;
22
+ get hue(): int;
23
+ get mute(): boolean;
24
+ get label(): string;
25
+ get isMirrowed(): boolean;
26
+ get canMirror(): boolean;
27
+ get optCollection(): Option<CONTENT>;
28
+ get trackBoxAdapter(): Option<TrackBoxAdapter>;
29
+ consolidate(): void;
30
+ clone(consolidate: boolean): void;
31
+ catchupAndSubscribeSelected(observer: Observer<ObservableValue<boolean>>): Subscription;
32
+ subscribeChange(observer: Observer<void>): Subscription;
33
+ accept<VISITOR extends ClipBoxAdapterVisitor<any>>(visitor: VISITOR): VISITOR extends ClipBoxAdapterVisitor<infer R> ? Nullish<R> : void;
34
+ }
35
+ export declare const ClipAdapters: {
36
+ for: (boxAdapters: BoxAdapters, box: Box) => AnyClipBoxAdapter;
37
+ };
38
+ //# sourceMappingURL=ClipBoxAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClipBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/ClipBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAC,MAAM,kBAAkB,CAAA;AAErH,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AACpC,OAAO,EAAC,mBAAmB,EAAC,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,mBAAmB,EAAC,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAC,UAAU,EAAC,MAAM,WAAW,CAAA;AACpC,OAAO,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAA;AAE1C,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACpC,wBAAwB,CAAC,CAAC,OAAO,EAAE,mBAAmB,GAAG,CAAC,CAAA;IAC1D,uBAAuB,CAAC,CAAC,OAAO,EAAE,kBAAkB,GAAG,CAAC,CAAA;IACxD,wBAAwB,CAAC,CAAC,OAAO,EAAE,mBAAmB,GAAG,CAAC,CAAA;CAC7D;AAED,MAAM,WAAW,cAAc,CAAC,OAAO,CAAE,SAAQ,UAAU,EAAE,UAAU;IACnE,IAAI,GAAG,IAAI,UAAU,CAAA;IACrB,IAAI,UAAU,IAAI,OAAO,CAAA;IACzB,IAAI,aAAa,IAAI,OAAO,CAAA;IAC5B,IAAI,QAAQ,IAAI,IAAI,CAAA;IACpB,IAAI,GAAG,IAAI,GAAG,CAAA;IACd,IAAI,IAAI,IAAI,OAAO,CAAA;IACnB,IAAI,KAAK,IAAI,MAAM,CAAA;IACnB,IAAI,UAAU,IAAI,OAAO,CAAA;IACzB,IAAI,SAAS,IAAI,OAAO,CAAA;IACxB,IAAI,aAAa,IAAI,MAAM,CAAC,OAAO,CAAC,CAAA;IACpC,IAAI,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,CAAA;IAE9C,WAAW,IAAI,IAAI,CAAA;IACnB,KAAK,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAA;IACjC,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY,CAAA;IACvF,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAA;IACvD,MAAM,CAAC,OAAO,SAAS,qBAAqB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,GAC7D,OAAO,SAAS,qBAAqB,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;CAC3E;AAED,eAAO,MAAM,YAAY;uBACF,WAAW,OAAO,GAAG,KAAG,iBAAiB;CAK/D,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { asDefined } from "@opendaw/lib-std";
2
+ import { ValueClipBoxAdapter } from "./clip/ValueClipBoxAdapter";
3
+ import { AudioClipBoxAdapter } from "./clip/AudioClipBoxAdapter";
4
+ import { NoteClipBoxAdapter } from "./clip/NoteClipBoxAdapter";
5
+ export const ClipAdapters = {
6
+ for: (boxAdapters, box) => asDefined(box.accept({
7
+ visitNoteClipBox: (box) => boxAdapters.adapterFor(box, NoteClipBoxAdapter),
8
+ visitValueClipBox: (box) => boxAdapters.adapterFor(box, ValueClipBoxAdapter),
9
+ visitAudioClipBox: (box) => boxAdapters.adapterFor(box, AudioClipBoxAdapter)
10
+ }), "")
11
+ };
@@ -0,0 +1,24 @@
1
+ import { Comparator, int, Option, UUID } from "@opendaw/lib-std";
2
+ import { Address } from "@opendaw/lib-box";
3
+ import { Event } from "@opendaw/lib-dsp";
4
+ import { MarkerBox } from "@opendaw/studio-boxes";
5
+ import { BoxAdapter } from "../BoxAdapter";
6
+ import { BoxAdaptersContext } from "../BoxAdaptersContext";
7
+ import { MarkerTrackAdapter } from "./MarkerTrackAdapter";
8
+ export declare class MarkerBoxAdapter implements BoxAdapter, Event {
9
+ #private;
10
+ static readonly Comparator: Comparator<MarkerBoxAdapter>;
11
+ readonly type = "marker-event";
12
+ constructor(context: BoxAdaptersContext, box: MarkerBox);
13
+ get box(): MarkerBox;
14
+ get uuid(): UUID.Format;
15
+ get address(): Address;
16
+ get position(): int;
17
+ get plays(): int;
18
+ get hue(): int;
19
+ get label(): string;
20
+ get trackAdapter(): Option<MarkerTrackAdapter>;
21
+ terminate(): void;
22
+ toString(): string;
23
+ }
24
+ //# sourceMappingURL=MarkerBoxAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkerBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/MarkerBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,GAAG,EAAE,MAAM,EAAc,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAC,OAAO,EAAsB,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAC,KAAK,EAAC,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AAGvD,qBAAa,gBAAiB,YAAW,UAAU,EAAE,KAAK;;IACtD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAoC;IAE5F,QAAQ,CAAC,IAAI,kBAAiB;gBAOlB,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS;IAiBvD,IAAI,GAAG,IAAI,SAAS,CAAmB;IACvC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAgC;IACvD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,QAAQ,IAAI,GAAG,CAAuC;IAC1D,IAAI,KAAK,IAAI,GAAG,CAAoC;IACpD,IAAI,GAAG,IAAI,GAAG,CAAkC;IAChD,IAAI,KAAK,IAAI,MAAM,CAAoC;IACvD,IAAI,YAAY,IAAI,MAAM,CAAC,kBAAkB,CAAC,CAG7C;IAED,SAAS;IACT,QAAQ,IAAI,MAAM;CACrB"}
@@ -0,0 +1,41 @@
1
+ import { Terminator, UUID } from "@opendaw/lib-std";
2
+ import { Propagation } from "@opendaw/lib-box";
3
+ import { TimelineBoxAdapter } from "./TimelineBoxAdapter";
4
+ export class MarkerBoxAdapter {
5
+ static Comparator = (a, b) => a.position - b.position;
6
+ type = "marker-event";
7
+ #terminator = new Terminator();
8
+ #context;
9
+ #box;
10
+ constructor(context, box) {
11
+ this.#context = context;
12
+ this.#box = box;
13
+ this.#terminator.own(this.#box.subscribe(Propagation.Children, (update) => {
14
+ if (this.trackAdapter.isEmpty()) {
15
+ return;
16
+ }
17
+ if (update.type === "primitive" || update.type === "pointer") {
18
+ const track = this.trackAdapter.unwrap();
19
+ if (this.#box.position.address.equals(update.address)) {
20
+ track.onSortingChanged();
21
+ }
22
+ else {
23
+ track.dispatchChange();
24
+ }
25
+ }
26
+ }));
27
+ }
28
+ get box() { return this.#box; }
29
+ get uuid() { return this.#box.address.uuid; }
30
+ get address() { return this.#box.address; }
31
+ get position() { return this.#box.position.getValue(); }
32
+ get plays() { return this.#box.plays.getValue(); }
33
+ get hue() { return this.#box.hue.getValue(); }
34
+ get label() { return this.#box.label.getValue(); }
35
+ get trackAdapter() {
36
+ return this.#box.track.targetVertex
37
+ .map(vertex => this.#context.boxAdapters.adapterFor(vertex.box, TimelineBoxAdapter).markerTrack);
38
+ }
39
+ terminate() { this.#terminator.terminate(); }
40
+ toString() { return `{MarkerBoxAdapter ${UUID.toString(this.#box.address.uuid).substring(0, 4)}, plays: ${this.plays}`; }
41
+ }
@@ -0,0 +1,19 @@
1
+ import { Notifier, Observer, Subscription, Terminable } from "@opendaw/lib-std";
2
+ import { BoxAdaptersContext } from "../BoxAdaptersContext";
3
+ import { EventCollection } from "@opendaw/lib-dsp";
4
+ import { MarkerBoxAdapter } from "./MarkerBoxAdapter";
5
+ import { MarkerTrack } from "@opendaw/studio-boxes";
6
+ export declare class MarkerTrackAdapter implements Terminable {
7
+ #private;
8
+ readonly changeNotifier: Notifier<void>;
9
+ constructor(context: BoxAdaptersContext, object: MarkerTrack);
10
+ subscribe(observer: Observer<void>): Subscription;
11
+ get context(): BoxAdaptersContext;
12
+ get enabled(): boolean;
13
+ get events(): EventCollection<MarkerBoxAdapter>;
14
+ get object(): MarkerTrack;
15
+ dispatchChange(): void;
16
+ onSortingChanged(): void;
17
+ terminate(): void;
18
+ }
19
+ //# sourceMappingURL=MarkerTrackAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MarkerTrackAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/MarkerTrackAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAE,QAAQ,EAAa,YAAY,EAAE,UAAU,EAAO,MAAM,kBAAkB,CAAA;AACtG,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,eAAe,EAAC,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAY,WAAW,EAAC,MAAM,uBAAuB,CAAA;AAE5D,qBAAa,kBAAmB,YAAW,UAAU;;IAIjD,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAK3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW;IAyB5D,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY;IAEjD,IAAI,OAAO,IAAI,kBAAkB,CAAuB;IACxD,IAAI,OAAO,IAAI,OAAO,CAAyC;IAC/D,IAAI,MAAM,IAAI,eAAe,CAAC,gBAAgB,CAAC,CAAsB;IACrE,IAAI,MAAM,IAAI,WAAW,CAAsB;IAE/C,cAAc,IAAI,IAAI;IAEtB,gBAAgB,IAAI,IAAI;IAKxB,SAAS,IAAI,IAAI;CACpB"}
@@ -0,0 +1,45 @@
1
+ import { assert, Notifier, UUID } from "@opendaw/lib-std";
2
+ import { EventCollection } from "@opendaw/lib-dsp";
3
+ import { MarkerBoxAdapter } from "./MarkerBoxAdapter";
4
+ import { MarkerBox } from "@opendaw/studio-boxes";
5
+ export class MarkerTrackAdapter {
6
+ #context;
7
+ #object;
8
+ changeNotifier;
9
+ #adapters;
10
+ #events;
11
+ #subscription;
12
+ constructor(context, object) {
13
+ this.#context = context;
14
+ this.#object = object;
15
+ this.changeNotifier = new Notifier();
16
+ this.#adapters = UUID.newSet(adapter => adapter.uuid);
17
+ this.#events = EventCollection.create(MarkerBoxAdapter.Comparator);
18
+ this.#subscription = this.#object.markers.pointerHub.catchupAndSubscribeTransactual({
19
+ onAdd: ({ box }) => {
20
+ if (box instanceof MarkerBox) {
21
+ const adapter = this.#context.boxAdapters.adapterFor(box, MarkerBoxAdapter);
22
+ const added = this.#adapters.add(adapter);
23
+ assert(added, "Could not add adapter");
24
+ this.#events.add(adapter);
25
+ this.dispatchChange();
26
+ }
27
+ },
28
+ onRemove: ({ box: { address: { uuid } } }) => {
29
+ this.#events.remove(this.#adapters.removeByKey(uuid));
30
+ this.dispatchChange();
31
+ }
32
+ });
33
+ }
34
+ subscribe(observer) { return this.changeNotifier.subscribe(observer); }
35
+ get context() { return this.#context; }
36
+ get enabled() { return this.#object.enabled.getValue(); }
37
+ get events() { return this.#events; }
38
+ get object() { return this.#object; }
39
+ dispatchChange() { this.changeNotifier.notify(); }
40
+ onSortingChanged() {
41
+ this.#events.onIndexingChanged();
42
+ this.dispatchChange();
43
+ }
44
+ terminate() { this.#subscription.terminate(); }
45
+ }
@@ -0,0 +1,48 @@
1
+ import { LoopableRegion, ppqn, Region } from "@opendaw/lib-dsp";
2
+ import { Comparator, int, Nullish, Observer, Option, Selectable, Subscription } from "@opendaw/lib-std";
3
+ import { AudioRegionBoxAdapter } from "./region/AudioRegionBoxAdapter";
4
+ import { Box, Field } from "@opendaw/lib-box";
5
+ import { NoteRegionBoxAdapter } from "./region/NoteRegionBoxAdapter";
6
+ import { Pointers } from "@opendaw/studio-enums";
7
+ import { ValueRegionBoxAdapter } from "./region/ValueRegionBoxAdapter";
8
+ import { AnyRegionBox } from "../unions";
9
+ import { BoxAdapter } from "../BoxAdapter";
10
+ import { TrackBoxAdapter } from "./TrackBoxAdapter";
11
+ import { AnyRegionBoxAdapter } from "../UnionAdapterTypes";
12
+ import { BoxAdapters } from "../BoxAdapters";
13
+ export interface RegionBoxAdapterVisitor<R> {
14
+ visitNoteRegionBoxAdapter?(adapter: NoteRegionBoxAdapter): R;
15
+ visitAudioRegionBoxAdapter?(adapter: AudioRegionBoxAdapter): R;
16
+ visitValueRegionBoxAdapter?(adapter: ValueRegionBoxAdapter): R;
17
+ }
18
+ export interface RegionBoxAdapter<CONTENT> extends BoxAdapter, Region, Selectable {
19
+ get box(): AnyRegionBox;
20
+ get isSelected(): boolean;
21
+ get hue(): int;
22
+ get mute(): boolean;
23
+ get label(): string;
24
+ get isMirrowed(): boolean;
25
+ get canMirror(): boolean;
26
+ get trackBoxAdapter(): Option<TrackBoxAdapter>;
27
+ get hasCollection(): boolean;
28
+ get optCollection(): Option<CONTENT>;
29
+ subscribeChange(observer: Observer<void>): Subscription;
30
+ copyTo(target?: {
31
+ track?: Field<Pointers.RegionCollection>;
32
+ position?: ppqn;
33
+ }): AnyRegionBoxAdapter;
34
+ consolidate(): void;
35
+ flatten(regions: ReadonlyArray<RegionBoxAdapter<unknown>>): void;
36
+ canFlatten(regions: ReadonlyArray<RegionBoxAdapter<unknown>>): boolean;
37
+ accept<VISITOR extends RegionBoxAdapterVisitor<any>>(visitor: VISITOR): VISITOR extends RegionBoxAdapterVisitor<infer R> ? Nullish<R> : void;
38
+ }
39
+ export interface LoopableRegionBoxAdapter<CONTENT> extends RegionBoxAdapter<CONTENT>, LoopableRegion {
40
+ get offset(): ppqn;
41
+ get loopOffset(): ppqn;
42
+ get loopDuration(): ppqn;
43
+ }
44
+ export declare const RegionComparator: Comparator<AnyRegionBoxAdapter>;
45
+ export declare const RegionAdapters: {
46
+ for: (boxAdapters: BoxAdapters, box: Box) => AnyRegionBoxAdapter;
47
+ };
48
+ //# sourceMappingURL=RegionBoxAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegionBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/RegionBoxAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { asDefined } from "@opendaw/lib-std";
2
+ import { AudioRegionBoxAdapter } from "./region/AudioRegionBoxAdapter";
3
+ import { NoteRegionBoxAdapter } from "./region/NoteRegionBoxAdapter";
4
+ import { ValueRegionBoxAdapter } from "./region/ValueRegionBoxAdapter";
5
+ export const RegionComparator = (a, b) => a.position - b.position;
6
+ export const RegionAdapters = {
7
+ for: (boxAdapters, box) => asDefined(box.accept({
8
+ visitNoteRegionBox: (box) => boxAdapters.adapterFor(box, NoteRegionBoxAdapter),
9
+ visitAudioRegionBox: (box) => boxAdapters.adapterFor(box, AudioRegionBoxAdapter),
10
+ visitValueRegionBox: (box) => boxAdapters.adapterFor(box, ValueRegionBoxAdapter)
11
+ }), "")
12
+ };
@@ -0,0 +1,7 @@
1
+ import { ppqn } from "@opendaw/lib-dsp";
2
+ import { AnyRegionBoxAdapter } from "../UnionAdapterTypes";
3
+ export declare namespace RegionEditing {
4
+ const cut: (region: AnyRegionBoxAdapter, cut: ppqn, consolidate: boolean) => void;
5
+ const clip: (region: AnyRegionBoxAdapter, begin: ppqn, end: ppqn) => void;
6
+ }
7
+ //# sourceMappingURL=RegionEditing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RegionEditing.d.ts","sourceRoot":"","sources":["../../src/timeline/RegionEditing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AAErC,OAAO,EAAC,mBAAmB,EAAoB,MAAM,sBAAsB,CAAA;AAE3E,yBAAiB,aAAa,CAAC;IACpB,MAAM,GAAG,GAAI,QAAQ,mBAAmB,EAAE,KAAK,IAAI,EAAE,aAAa,OAAO,KAAG,IAclF,CAAA;IAEM,MAAM,IAAI,GAAI,QAAQ,mBAAmB,EAAE,OAAO,IAAI,EAAE,KAAK,IAAI,KAAG,IAa1E,CAAA;CACJ"}
@@ -0,0 +1,40 @@
1
+ import { mod, panic } from "@opendaw/lib-std";
2
+ import { UnionAdapterTypes } from "../UnionAdapterTypes";
3
+ export var RegionEditing;
4
+ (function (RegionEditing) {
5
+ RegionEditing.cut = (region, cut, consolidate) => {
6
+ if (region.position >= cut || cut >= region.complete) {
7
+ return;
8
+ }
9
+ if (UnionAdapterTypes.isLoopableRegion(region)) {
10
+ const { position, complete, loopOffset, loopDuration } = region;
11
+ region.box.duration.setValue(cut - position);
12
+ region.copyTo({
13
+ position: cut,
14
+ duration: complete - cut,
15
+ loopOffset: mod(loopOffset + (cut - position), loopDuration),
16
+ consolidate
17
+ });
18
+ }
19
+ else {
20
+ return panic("Not yet implemented");
21
+ }
22
+ };
23
+ RegionEditing.clip = (region, begin, end) => {
24
+ if (UnionAdapterTypes.isLoopableRegion(region)) {
25
+ const { position, complete, loopOffset, loopDuration } = region;
26
+ if (complete - end <= 0) {
27
+ return panic(`duration will zero or negative(${complete - end})`);
28
+ }
29
+ region.box.duration.setValue(begin - position);
30
+ region.copyTo({
31
+ position: end,
32
+ duration: complete - end,
33
+ loopOffset: mod(loopOffset + (end - position), loopDuration)
34
+ });
35
+ }
36
+ else {
37
+ return panic("Not yet implemented");
38
+ }
39
+ };
40
+ })(RegionEditing || (RegionEditing = {}));
@@ -0,0 +1,16 @@
1
+ import { TimelineBox } from "@opendaw/studio-boxes";
2
+ import { UUID } from "@opendaw/lib-std";
3
+ import { Address } from "@opendaw/lib-box";
4
+ import { BoxAdapter } from "../BoxAdapter";
5
+ import { MarkerTrackAdapter } from "./MarkerTrackAdapter";
6
+ import { BoxAdaptersContext } from "../BoxAdaptersContext";
7
+ export declare class TimelineBoxAdapter implements BoxAdapter {
8
+ #private;
9
+ constructor(context: BoxAdaptersContext, box: TimelineBox);
10
+ terminate(): void;
11
+ get box(): TimelineBox;
12
+ get uuid(): UUID.Format;
13
+ get address(): Address;
14
+ get markerTrack(): MarkerTrackAdapter;
15
+ }
16
+ //# sourceMappingURL=TimelineBoxAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimelineBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/TimelineBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,OAAO,EAAC,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AAExD,qBAAa,kBAAmB,YAAW,UAAU;;gBAIrC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,WAAW;IAKzD,SAAS,IAAI,IAAI;IAEjB,IAAI,GAAG,IAAI,WAAW,CAAmB;IACzC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAgC;IACvD,IAAI,OAAO,IAAI,OAAO,CAA2B;IACjD,IAAI,WAAW,IAAI,kBAAkB,CAA2B;CACnE"}
@@ -0,0 +1,14 @@
1
+ import { MarkerTrackAdapter } from "./MarkerTrackAdapter";
2
+ export class TimelineBoxAdapter {
3
+ #box;
4
+ #markerTrack;
5
+ constructor(context, box) {
6
+ this.#box = box;
7
+ this.#markerTrack = new MarkerTrackAdapter(context, this.#box.markerTrack);
8
+ }
9
+ terminate() { }
10
+ get box() { return this.#box; }
11
+ get uuid() { return this.#box.address.uuid; }
12
+ get address() { return this.#box.address; }
13
+ get markerTrack() { return this.#markerTrack; }
14
+ }
@@ -0,0 +1,32 @@
1
+ import { int, Observer, Option, Subscription, unitValue, UUID } from "@opendaw/lib-std";
2
+ import { Address, BooleanField, Int32Field, PointerField } from "@opendaw/lib-box";
3
+ import { ppqn } from "@opendaw/lib-dsp";
4
+ import { BoxAdapter } from "../BoxAdapter";
5
+ import { BoxAdaptersContext } from "../BoxAdaptersContext";
6
+ import { TrackClips } from "./TrackClips";
7
+ import { TrackRegions } from "./TrackRegions";
8
+ import { TrackType } from "./TrackType";
9
+ import { AnyClipBoxAdapter, AnyRegionBoxAdapter } from "../UnionAdapterTypes";
10
+ import { AudioUnitBox, TrackBox } from "@opendaw/studio-boxes";
11
+ import { Pointers } from "@opendaw/studio-enums";
12
+ export declare class TrackBoxAdapter implements BoxAdapter {
13
+ #private;
14
+ constructor(context: BoxAdaptersContext, box: TrackBox);
15
+ catchupAndSubscribePath(observer: Observer<Option<[string, string]>>): Subscription;
16
+ terminate(): void;
17
+ get audioUnit(): AudioUnitBox;
18
+ get target(): PointerField<Pointers.Automation>;
19
+ get clips(): TrackClips;
20
+ get regions(): TrackRegions;
21
+ get enabled(): BooleanField;
22
+ get indexField(): Int32Field;
23
+ get type(): TrackType;
24
+ get box(): TrackBox;
25
+ get uuid(): UUID.Format;
26
+ get address(): Address;
27
+ get listIndex(): int;
28
+ set listIndex(value: int);
29
+ accepts(subject: AnyClipBoxAdapter | AnyRegionBoxAdapter): boolean;
30
+ valueAt(position: ppqn, fallback: unitValue): unitValue;
31
+ }
32
+ //# sourceMappingURL=TrackBoxAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrackBoxAdapter.d.ts","sourceRoot":"","sources":["../../src/timeline/TrackBoxAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,GAAG,EAEH,QAAQ,EACR,MAAM,EAEN,YAAY,EAGZ,SAAS,EACT,IAAI,EACP,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAc,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAC,IAAI,EAAC,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAA;AACxC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAA;AACrC,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAC,MAAM,sBAAsB,CAAA;AAI3E,OAAO,EAAC,YAAY,EAAE,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAE9C,qBAAa,eAAgB,YAAW,UAAU;;gBAWlC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,QAAQ;IAUtD,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY;IAyEnF,SAAS;IAET,IAAI,SAAS,IAAI,YAAY,CAAgF;IAC7G,IAAI,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAA0B;IACzE,IAAI,KAAK,IAAI,UAAU,CAAqB;IAC5C,IAAI,OAAO,IAAI,YAAY,CAAuB;IAClD,IAAI,OAAO,IAAI,YAAY,CAA2B;IACtD,IAAI,UAAU,IAAI,UAAU,CAAyB;IACrD,IAAI,IAAI,IAAI,SAAS,CAAmC;IACxD,IAAI,GAAG,IAAI,QAAQ,CAAmB;IACtC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAgC;IACvD,IAAI,OAAO,IAAI,OAAO,CAA2B;IAEjD,IAAI,SAAS,IAAI,GAAG,CAAoC;IACxD,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,EAAmC;IAE3D,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,OAAO;IAiBlE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,GAAG,SAAS;CAgC1D"}