@drop-ai/core 0.2.0 → 0.3.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 (301) hide show
  1. package/README.md +655 -237
  2. package/dist/actions/ActionRegistry.d.ts.map +1 -1
  3. package/dist/actions/ActionRegistry.js +7 -2
  4. package/dist/actions/ActionRegistry.js.map +1 -1
  5. package/dist/actions/types.d.ts +7 -1
  6. package/dist/actions/types.d.ts.map +1 -1
  7. package/dist/analysis/AudioAnalyzer.d.ts +71 -0
  8. package/dist/analysis/AudioAnalyzer.d.ts.map +1 -0
  9. package/dist/analysis/AudioAnalyzer.js +569 -0
  10. package/dist/analysis/AudioAnalyzer.js.map +1 -0
  11. package/dist/audio/AudioEngine.d.ts +14 -1
  12. package/dist/audio/AudioEngine.d.ts.map +1 -1
  13. package/dist/audio/AudioEngine.js +115 -35
  14. package/dist/audio/AudioEngine.js.map +1 -1
  15. package/dist/audio/Auditioner.d.ts +104 -0
  16. package/dist/audio/Auditioner.d.ts.map +1 -0
  17. package/dist/audio/Auditioner.js +239 -0
  18. package/dist/audio/Auditioner.js.map +1 -0
  19. package/dist/audio/BWFMetadata.d.ts +116 -0
  20. package/dist/audio/BWFMetadata.d.ts.map +1 -0
  21. package/dist/audio/BWFMetadata.js +394 -0
  22. package/dist/audio/BWFMetadata.js.map +1 -0
  23. package/dist/audio/ChannelSplitter.d.ts +37 -0
  24. package/dist/audio/ChannelSplitter.d.ts.map +1 -0
  25. package/dist/audio/ChannelSplitter.js +82 -0
  26. package/dist/audio/ChannelSplitter.js.map +1 -0
  27. package/dist/audio/ExportAnalyzer.d.ts +39 -0
  28. package/dist/audio/ExportAnalyzer.d.ts.map +1 -0
  29. package/dist/audio/ExportAnalyzer.js +76 -0
  30. package/dist/audio/ExportAnalyzer.js.map +1 -0
  31. package/dist/audio/LufsNormalizer.d.ts +37 -0
  32. package/dist/audio/LufsNormalizer.d.ts.map +1 -0
  33. package/dist/audio/LufsNormalizer.js +217 -0
  34. package/dist/audio/LufsNormalizer.js.map +1 -0
  35. package/dist/audio/OfflineExporter.d.ts +1 -6
  36. package/dist/audio/OfflineExporter.d.ts.map +1 -1
  37. package/dist/audio/OfflineExporter.js +31 -10
  38. package/dist/audio/OfflineExporter.js.map +1 -1
  39. package/dist/audio/RoutingGraph.d.ts +134 -0
  40. package/dist/audio/RoutingGraph.d.ts.map +1 -0
  41. package/dist/audio/RoutingGraph.js +547 -0
  42. package/dist/audio/RoutingGraph.js.map +1 -0
  43. package/dist/audio/SampleRateConverter.d.ts +21 -0
  44. package/dist/audio/SampleRateConverter.d.ts.map +1 -0
  45. package/dist/audio/SampleRateConverter.js +84 -0
  46. package/dist/audio/SampleRateConverter.js.map +1 -0
  47. package/dist/audio/SilencePadding.d.ts +29 -0
  48. package/dist/audio/SilencePadding.d.ts.map +1 -0
  49. package/dist/audio/SilencePadding.js +86 -0
  50. package/dist/audio/SilencePadding.js.map +1 -0
  51. package/dist/audio/SourceCache.d.ts +13 -16
  52. package/dist/audio/SourceCache.d.ts.map +1 -1
  53. package/dist/audio/SourceCache.js +21 -33
  54. package/dist/audio/SourceCache.js.map +1 -1
  55. package/dist/audio/engine/Declick.d.ts +98 -0
  56. package/dist/audio/engine/Declick.d.ts.map +1 -0
  57. package/dist/audio/engine/Declick.js +204 -0
  58. package/dist/audio/engine/Declick.js.map +1 -0
  59. package/dist/audio/engine/DiskIO.d.ts +172 -0
  60. package/dist/audio/engine/DiskIO.d.ts.map +1 -0
  61. package/dist/audio/engine/DiskIO.js +384 -0
  62. package/dist/audio/engine/DiskIO.js.map +1 -0
  63. package/dist/audio/engine/LatencyCompensator.d.ts +46 -0
  64. package/dist/audio/engine/LatencyCompensator.d.ts.map +1 -0
  65. package/dist/audio/engine/LatencyCompensator.js +84 -0
  66. package/dist/audio/engine/LatencyCompensator.js.map +1 -0
  67. package/dist/audio/engine/MultiTrackRecorder.d.ts +146 -0
  68. package/dist/audio/engine/MultiTrackRecorder.d.ts.map +1 -0
  69. package/dist/audio/engine/MultiTrackRecorder.js +359 -0
  70. package/dist/audio/engine/MultiTrackRecorder.js.map +1 -0
  71. package/dist/audio/engine/PlaylistEngine.d.ts.map +1 -1
  72. package/dist/audio/engine/PlaylistEngine.js +9 -2
  73. package/dist/audio/engine/PlaylistEngine.js.map +1 -1
  74. package/dist/audio/engine/PunchRecordManager.d.ts +113 -0
  75. package/dist/audio/engine/PunchRecordManager.d.ts.map +1 -0
  76. package/dist/audio/engine/PunchRecordManager.js +191 -0
  77. package/dist/audio/engine/PunchRecordManager.js.map +1 -0
  78. package/dist/audio/engine/RoutingGraph.d.ts +135 -0
  79. package/dist/audio/engine/RoutingGraph.d.ts.map +1 -0
  80. package/dist/audio/engine/RoutingGraph.js +436 -0
  81. package/dist/audio/engine/RoutingGraph.js.map +1 -0
  82. package/dist/audio/engine/SidechainRouter.d.ts +139 -0
  83. package/dist/audio/engine/SidechainRouter.d.ts.map +1 -0
  84. package/dist/audio/engine/SidechainRouter.js +292 -0
  85. package/dist/audio/engine/SidechainRouter.js.map +1 -0
  86. package/dist/audio/engine/XrunTracker.d.ts +71 -0
  87. package/dist/audio/engine/XrunTracker.d.ts.map +1 -0
  88. package/dist/audio/engine/XrunTracker.js +118 -0
  89. package/dist/audio/engine/XrunTracker.js.map +1 -0
  90. package/dist/audio/export/CDMarkerExporter.d.ts +62 -0
  91. package/dist/audio/export/CDMarkerExporter.d.ts.map +1 -0
  92. package/dist/audio/export/CDMarkerExporter.js +164 -0
  93. package/dist/audio/export/CDMarkerExporter.js.map +1 -0
  94. package/dist/audio/export/ExportGraphBuilder.d.ts +121 -0
  95. package/dist/audio/export/ExportGraphBuilder.d.ts.map +1 -0
  96. package/dist/audio/export/ExportGraphBuilder.js +522 -0
  97. package/dist/audio/export/ExportGraphBuilder.js.map +1 -0
  98. package/dist/audio/export/ExportPresetManager.d.ts +87 -0
  99. package/dist/audio/export/ExportPresetManager.d.ts.map +1 -0
  100. package/dist/audio/export/ExportPresetManager.js +306 -0
  101. package/dist/audio/export/ExportPresetManager.js.map +1 -0
  102. package/dist/commands/handlers/RegionHandler.d.ts.map +1 -1
  103. package/dist/commands/handlers/RegionHandler.js +25 -1
  104. package/dist/commands/handlers/RegionHandler.js.map +1 -1
  105. package/dist/commands/handlers/TrackHandler.js +1 -1
  106. package/dist/commands/handlers/TrackHandler.js.map +1 -1
  107. package/dist/commands/impl/FreezeTrackCommand.d.ts.map +1 -1
  108. package/dist/commands/impl/FreezeTrackCommand.js +37 -36
  109. package/dist/commands/impl/FreezeTrackCommand.js.map +1 -1
  110. package/dist/commands/impl/SetRegionTimeDomainCommand.d.ts.map +1 -1
  111. package/dist/commands/impl/SetRegionTimeDomainCommand.js +3 -3
  112. package/dist/commands/impl/SetRegionTimeDomainCommand.js.map +1 -1
  113. package/dist/commands/impl/ToggleLoopCommand.d.ts +1 -0
  114. package/dist/commands/impl/ToggleLoopCommand.d.ts.map +1 -1
  115. package/dist/commands/impl/ToggleLoopCommand.js +10 -0
  116. package/dist/commands/impl/ToggleLoopCommand.js.map +1 -1
  117. package/dist/commands/impl/TrimRegionCommand.d.ts +14 -1
  118. package/dist/commands/impl/TrimRegionCommand.d.ts.map +1 -1
  119. package/dist/commands/impl/TrimRegionCommand.js +138 -33
  120. package/dist/commands/impl/TrimRegionCommand.js.map +1 -1
  121. package/dist/commands/impl/TrimRegionToPlayheadCommand.d.ts +27 -0
  122. package/dist/commands/impl/TrimRegionToPlayheadCommand.d.ts.map +1 -0
  123. package/dist/commands/impl/TrimRegionToPlayheadCommand.js +69 -0
  124. package/dist/commands/impl/TrimRegionToPlayheadCommand.js.map +1 -0
  125. package/dist/commands/impl/TrimRegionToRangeCommand.d.ts +28 -0
  126. package/dist/commands/impl/TrimRegionToRangeCommand.d.ts.map +1 -0
  127. package/dist/commands/impl/TrimRegionToRangeCommand.js +69 -0
  128. package/dist/commands/impl/TrimRegionToRangeCommand.js.map +1 -0
  129. package/dist/commands/impl/TrimToAdjacentRegionCommand.d.ts +27 -0
  130. package/dist/commands/impl/TrimToAdjacentRegionCommand.d.ts.map +1 -0
  131. package/dist/commands/impl/TrimToAdjacentRegionCommand.js +77 -0
  132. package/dist/commands/impl/TrimToAdjacentRegionCommand.js.map +1 -0
  133. package/dist/commands/types.d.ts +19 -0
  134. package/dist/commands/types.d.ts.map +1 -1
  135. package/dist/commands/types.js +21 -0
  136. package/dist/commands/types.js.map +1 -1
  137. package/dist/domain/Crossfade.d.ts +78 -0
  138. package/dist/domain/Crossfade.d.ts.map +1 -0
  139. package/dist/domain/Crossfade.js +216 -0
  140. package/dist/domain/Crossfade.js.map +1 -0
  141. package/dist/domain/ExportConfig.d.ts +98 -1
  142. package/dist/domain/ExportConfig.d.ts.map +1 -1
  143. package/dist/domain/ExportConfig.js +154 -1
  144. package/dist/domain/ExportConfig.js.map +1 -1
  145. package/dist/domain/ExportPreset.d.ts +62 -0
  146. package/dist/domain/ExportPreset.d.ts.map +1 -0
  147. package/dist/domain/ExportPreset.js +79 -0
  148. package/dist/domain/ExportPreset.js.map +1 -0
  149. package/dist/domain/ImportStatus.d.ts +40 -0
  150. package/dist/domain/ImportStatus.d.ts.map +1 -0
  151. package/dist/domain/ImportStatus.js +86 -0
  152. package/dist/domain/ImportStatus.js.map +1 -0
  153. package/dist/domain/Playlist.d.ts +72 -0
  154. package/dist/domain/Playlist.d.ts.map +1 -1
  155. package/dist/domain/Playlist.js +231 -6
  156. package/dist/domain/Playlist.js.map +1 -1
  157. package/dist/domain/Region.d.ts +76 -0
  158. package/dist/domain/Region.d.ts.map +1 -1
  159. package/dist/domain/Region.js +234 -1
  160. package/dist/domain/Region.js.map +1 -1
  161. package/dist/domain/Route.d.ts +43 -3
  162. package/dist/domain/Route.d.ts.map +1 -1
  163. package/dist/domain/Route.js +92 -6
  164. package/dist/domain/Route.js.map +1 -1
  165. package/dist/domain/Session.d.ts +31 -0
  166. package/dist/domain/Session.d.ts.map +1 -1
  167. package/dist/domain/Session.js +70 -0
  168. package/dist/domain/Session.js.map +1 -1
  169. package/dist/domain/Source.d.ts +145 -1
  170. package/dist/domain/Source.d.ts.map +1 -1
  171. package/dist/domain/Source.js +144 -1
  172. package/dist/domain/Source.js.map +1 -1
  173. package/dist/domain/ThawList.d.ts +37 -0
  174. package/dist/domain/ThawList.d.ts.map +1 -0
  175. package/dist/domain/ThawList.js +73 -0
  176. package/dist/domain/ThawList.js.map +1 -0
  177. package/dist/domain/Track.d.ts +93 -1
  178. package/dist/domain/Track.d.ts.map +1 -1
  179. package/dist/domain/Track.js +136 -0
  180. package/dist/domain/Track.js.map +1 -1
  181. package/dist/domain/TriggerBox.d.ts +123 -0
  182. package/dist/domain/TriggerBox.d.ts.map +1 -0
  183. package/dist/domain/TriggerBox.js +430 -0
  184. package/dist/domain/TriggerBox.js.map +1 -0
  185. package/dist/domain/VCATrack.d.ts +64 -1
  186. package/dist/domain/VCATrack.d.ts.map +1 -1
  187. package/dist/domain/VCATrack.js +128 -1
  188. package/dist/domain/VCATrack.js.map +1 -1
  189. package/dist/domain/VideoExportConfig.d.ts +117 -0
  190. package/dist/domain/VideoExportConfig.d.ts.map +1 -0
  191. package/dist/domain/VideoExportConfig.js +244 -0
  192. package/dist/domain/VideoExportConfig.js.map +1 -0
  193. package/dist/domain/VideoExportStatus.d.ts +89 -0
  194. package/dist/domain/VideoExportStatus.d.ts.map +1 -0
  195. package/dist/domain/VideoExportStatus.js +192 -0
  196. package/dist/domain/VideoExportStatus.js.map +1 -0
  197. package/dist/domain/VideoMetadata.d.ts +46 -0
  198. package/dist/domain/VideoMetadata.d.ts.map +1 -0
  199. package/dist/domain/VideoMetadata.js +2 -0
  200. package/dist/domain/VideoMetadata.js.map +1 -0
  201. package/dist/domain/index.d.ts +5 -0
  202. package/dist/domain/index.d.ts.map +1 -1
  203. package/dist/domain/index.js +5 -0
  204. package/dist/domain/index.js.map +1 -1
  205. package/dist/domain/temporal/TempoMap.d.ts +199 -2
  206. package/dist/domain/temporal/TempoMap.d.ts.map +1 -1
  207. package/dist/domain/temporal/TempoMap.js +464 -30
  208. package/dist/domain/temporal/TempoMap.js.map +1 -1
  209. package/dist/index.d.ts +43 -1
  210. package/dist/index.d.ts.map +1 -1
  211. package/dist/index.js +32 -1
  212. package/dist/index.js.map +1 -1
  213. package/dist/lib/ThawList.d.ts +100 -0
  214. package/dist/lib/ThawList.d.ts.map +1 -0
  215. package/dist/lib/ThawList.js +153 -0
  216. package/dist/lib/ThawList.js.map +1 -0
  217. package/dist/midi/MidiFileParser.d.ts +33 -0
  218. package/dist/midi/MidiFileParser.d.ts.map +1 -0
  219. package/dist/midi/MidiFileParser.js +246 -0
  220. package/dist/midi/MidiFileParser.js.map +1 -0
  221. package/dist/midi/MidiFileWriter.d.ts +31 -0
  222. package/dist/midi/MidiFileWriter.d.ts.map +1 -0
  223. package/dist/midi/MidiFileWriter.js +160 -0
  224. package/dist/midi/MidiFileWriter.js.map +1 -0
  225. package/dist/midi/MidiImporter.d.ts +37 -0
  226. package/dist/midi/MidiImporter.d.ts.map +1 -0
  227. package/dist/midi/MidiImporter.js +62 -0
  228. package/dist/midi/MidiImporter.js.map +1 -0
  229. package/dist/plugins/PluginPresetManager.d.ts +86 -0
  230. package/dist/plugins/PluginPresetManager.d.ts.map +1 -0
  231. package/dist/plugins/PluginPresetManager.js +140 -0
  232. package/dist/plugins/PluginPresetManager.js.map +1 -0
  233. package/dist/processing/IO.d.ts +15 -1
  234. package/dist/processing/IO.d.ts.map +1 -1
  235. package/dist/processing/IO.js +29 -1
  236. package/dist/processing/IO.js.map +1 -1
  237. package/dist/processing/InternalSend.d.ts +104 -0
  238. package/dist/processing/InternalSend.d.ts.map +1 -0
  239. package/dist/processing/InternalSend.js +175 -0
  240. package/dist/processing/InternalSend.js.map +1 -0
  241. package/dist/processing/MeterDSP.d.ts +166 -0
  242. package/dist/processing/MeterDSP.d.ts.map +1 -0
  243. package/dist/processing/MeterDSP.js +754 -0
  244. package/dist/processing/MeterDSP.js.map +1 -0
  245. package/dist/processing/Panner.d.ts +145 -0
  246. package/dist/processing/Panner.d.ts.map +1 -0
  247. package/dist/processing/Panner.js +281 -0
  248. package/dist/processing/Panner.js.map +1 -0
  249. package/dist/processing/PluginInsert.d.ts +56 -1
  250. package/dist/processing/PluginInsert.d.ts.map +1 -1
  251. package/dist/processing/PluginInsert.js +180 -2
  252. package/dist/processing/PluginInsert.js.map +1 -1
  253. package/dist/processing/Processor.d.ts +38 -0
  254. package/dist/processing/Processor.d.ts.map +1 -1
  255. package/dist/processing/Processor.js +60 -1
  256. package/dist/processing/Processor.js.map +1 -1
  257. package/dist/processing/SurroundPanner.d.ts +122 -0
  258. package/dist/processing/SurroundPanner.d.ts.map +1 -0
  259. package/dist/processing/SurroundPanner.js +376 -0
  260. package/dist/processing/SurroundPanner.js.map +1 -0
  261. package/dist/processing/TruePeakLimiter.d.ts +34 -0
  262. package/dist/processing/TruePeakLimiter.d.ts.map +1 -0
  263. package/dist/processing/TruePeakLimiter.js +144 -0
  264. package/dist/processing/TruePeakLimiter.js.map +1 -0
  265. package/dist/storage/ExportPresetStorage.d.ts +33 -0
  266. package/dist/storage/ExportPresetStorage.d.ts.map +1 -0
  267. package/dist/storage/ExportPresetStorage.js +121 -0
  268. package/dist/storage/ExportPresetStorage.js.map +1 -0
  269. package/dist/storage/SessionArchive.d.ts +73 -0
  270. package/dist/storage/SessionArchive.d.ts.map +1 -0
  271. package/dist/storage/SessionArchive.js +211 -0
  272. package/dist/storage/SessionArchive.js.map +1 -0
  273. package/dist/storage/SessionTemplate.d.ts +74 -5
  274. package/dist/storage/SessionTemplate.d.ts.map +1 -1
  275. package/dist/storage/SessionTemplate.js +247 -53
  276. package/dist/storage/SessionTemplate.js.map +1 -1
  277. package/dist/utils/BwfMetadataWriter.d.ts +42 -0
  278. package/dist/utils/BwfMetadataWriter.d.ts.map +1 -0
  279. package/dist/utils/BwfMetadataWriter.js +131 -0
  280. package/dist/utils/BwfMetadataWriter.js.map +1 -0
  281. package/dist/utils/FilenameTemplate.d.ts +40 -0
  282. package/dist/utils/FilenameTemplate.d.ts.map +1 -0
  283. package/dist/utils/FilenameTemplate.js +78 -0
  284. package/dist/utils/FilenameTemplate.js.map +1 -0
  285. package/dist/utils/Logger.d.ts +28 -0
  286. package/dist/utils/Logger.d.ts.map +1 -0
  287. package/dist/utils/Logger.js +46 -0
  288. package/dist/utils/Logger.js.map +1 -0
  289. package/dist/utils/Mp4ChapterGenerator.d.ts +17 -0
  290. package/dist/utils/Mp4ChapterGenerator.d.ts.map +1 -0
  291. package/dist/utils/Mp4ChapterGenerator.js +33 -0
  292. package/dist/utils/Mp4ChapterGenerator.js.map +1 -0
  293. package/dist/utils/OggEncoder.d.ts +20 -20
  294. package/dist/utils/OggEncoder.d.ts.map +1 -1
  295. package/dist/utils/OggEncoder.js +114 -50
  296. package/dist/utils/OggEncoder.js.map +1 -1
  297. package/dist/utils/TocGenerator.d.ts +17 -0
  298. package/dist/utils/TocGenerator.d.ts.map +1 -0
  299. package/dist/utils/TocGenerator.js +47 -0
  300. package/dist/utils/TocGenerator.js.map +1 -0
  301. package/package.json +7 -8
@@ -0,0 +1,121 @@
1
+ import { ExportPreset, getBuiltInPresets } from '../domain/ExportPreset';
2
+ const DB_NAME = 'drop-ai-daw';
3
+ const DB_VERSION = 2;
4
+ const PRESETS_STORE = 'exportPresets';
5
+ /**
6
+ * IndexedDB storage for export presets.
7
+ * Follows the same pattern as SessionStorage.
8
+ */
9
+ export class ExportPresetStorage {
10
+ constructor() {
11
+ this.dbPromise = null;
12
+ }
13
+ static getInstance() {
14
+ if (!ExportPresetStorage.instance) {
15
+ ExportPresetStorage.instance = new ExportPresetStorage();
16
+ }
17
+ return ExportPresetStorage.instance;
18
+ }
19
+ openDB() {
20
+ if (this.dbPromise)
21
+ return this.dbPromise;
22
+ this.dbPromise = new Promise((resolve, reject) => {
23
+ const request = indexedDB.open(DB_NAME, DB_VERSION);
24
+ request.onupgradeneeded = (event) => {
25
+ const db = request.result;
26
+ const oldVersion = event.oldVersion;
27
+ // Existing stores from version 1
28
+ if (oldVersion < 1) {
29
+ if (!db.objectStoreNames.contains('sessions')) {
30
+ const sessionsStore = db.createObjectStore('sessions', { keyPath: 'id' });
31
+ sessionsStore.createIndex('name', 'name', { unique: false });
32
+ sessionsStore.createIndex('modified', 'modified', { unique: false });
33
+ }
34
+ if (!db.objectStoreNames.contains('snapshots')) {
35
+ const snapshotsStore = db.createObjectStore('snapshots', { keyPath: 'id' });
36
+ snapshotsStore.createIndex('sessionId', 'sessionId', { unique: false });
37
+ snapshotsStore.createIndex('created', 'created', { unique: false });
38
+ }
39
+ }
40
+ // New store for version 2
41
+ if (oldVersion < 2) {
42
+ if (!db.objectStoreNames.contains(PRESETS_STORE)) {
43
+ const presetsStore = db.createObjectStore(PRESETS_STORE, { keyPath: 'id' });
44
+ presetsStore.createIndex('name', 'name', { unique: false });
45
+ }
46
+ }
47
+ };
48
+ request.onsuccess = () => resolve(request.result);
49
+ request.onerror = () => {
50
+ this.dbPromise = null;
51
+ reject(request.error);
52
+ };
53
+ });
54
+ return this.dbPromise;
55
+ }
56
+ /**
57
+ * Save a user preset.
58
+ */
59
+ async savePreset(preset) {
60
+ const db = await this.openDB();
61
+ const record = preset.toJSON();
62
+ return new Promise((resolve, reject) => {
63
+ const tx = db.transaction(PRESETS_STORE, 'readwrite');
64
+ tx.objectStore(PRESETS_STORE).put(record);
65
+ tx.oncomplete = () => resolve();
66
+ tx.onerror = () => reject(tx.error);
67
+ });
68
+ }
69
+ /**
70
+ * Load a preset by ID.
71
+ */
72
+ async loadPreset(id) {
73
+ const db = await this.openDB();
74
+ return new Promise((resolve, reject) => {
75
+ const tx = db.transaction(PRESETS_STORE, 'readonly');
76
+ const request = tx.objectStore(PRESETS_STORE).get(id);
77
+ request.onsuccess = () => {
78
+ const record = request.result;
79
+ resolve(record ? ExportPreset.fromJSON(record) : null);
80
+ };
81
+ request.onerror = () => reject(request.error);
82
+ });
83
+ }
84
+ /**
85
+ * List all saved user presets.
86
+ */
87
+ async listPresets() {
88
+ const db = await this.openDB();
89
+ return new Promise((resolve, reject) => {
90
+ const tx = db.transaction(PRESETS_STORE, 'readonly');
91
+ const request = tx.objectStore(PRESETS_STORE).getAll();
92
+ request.onsuccess = () => {
93
+ var _a;
94
+ const records = ((_a = request.result) !== null && _a !== void 0 ? _a : []);
95
+ resolve(records.map(r => ExportPreset.fromJSON(r)));
96
+ };
97
+ request.onerror = () => reject(request.error);
98
+ });
99
+ }
100
+ /**
101
+ * Get all presets (built-in + user).
102
+ */
103
+ async getAllPresets() {
104
+ const builtIn = getBuiltInPresets();
105
+ const userPresets = await this.listPresets();
106
+ return [...builtIn, ...userPresets];
107
+ }
108
+ /**
109
+ * Delete a user preset by ID.
110
+ */
111
+ async deletePreset(id) {
112
+ const db = await this.openDB();
113
+ return new Promise((resolve, reject) => {
114
+ const tx = db.transaction(PRESETS_STORE, 'readwrite');
115
+ tx.objectStore(PRESETS_STORE).delete(id);
116
+ tx.oncomplete = () => resolve();
117
+ tx.onerror = () => reject(tx.error);
118
+ });
119
+ }
120
+ }
121
+ //# sourceMappingURL=ExportPresetStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportPresetStorage.js","sourceRoot":"","sources":["../../src/storage/ExportPresetStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { Signal } from '../lib/Signal';
2
+ /**
3
+ * SessionArchive packages a session and all its referenced audio files
4
+ * into a single downloadable archive.
5
+ *
6
+ * In the browser context, this creates a custom binary bundle containing:
7
+ * - session.json (the serialized session state)
8
+ * - audio sources (all source audio files as blobs)
9
+ * - metadata.json (archive metadata)
10
+ *
11
+ * Binary format:
12
+ * [4 bytes magic: "DRPA"]
13
+ * [4 bytes version: 1]
14
+ * [4 bytes metadata JSON length]
15
+ * [metadata JSON]
16
+ * [4 bytes session JSON length]
17
+ * [session JSON]
18
+ * [4 bytes source count]
19
+ * For each source:
20
+ * [4 bytes name length]
21
+ * [name UTF-8]
22
+ * [4 bytes blob size]
23
+ * [blob data]
24
+ */
25
+ export interface ArchiveMetadata {
26
+ version: string;
27
+ createdAt: string;
28
+ sessionName: string;
29
+ sourceCount: number;
30
+ totalSize: number;
31
+ }
32
+ export interface ExtractedArchive {
33
+ sessionData: string;
34
+ sources: Array<{
35
+ name: string;
36
+ blob: Blob;
37
+ }>;
38
+ metadata: ArchiveMetadata;
39
+ }
40
+ export declare class SessionArchive {
41
+ readonly progress: Signal<number>;
42
+ /**
43
+ * Create an archive from session data and audio sources.
44
+ *
45
+ * @param sessionData JSON string of the serialized session.
46
+ * @param sources Array of audio sources to include.
47
+ * @param metadata Optional metadata overrides.
48
+ * @returns A Blob containing the packed archive.
49
+ */
50
+ createArchive(sessionData: string, sources: Array<{
51
+ name: string;
52
+ url: string;
53
+ blob: Blob;
54
+ }>, metadata?: Partial<ArchiveMetadata>): Promise<Blob>;
55
+ /**
56
+ * Extract an archive into session data and audio blobs.
57
+ *
58
+ * @param archiveBlob The archive Blob to extract.
59
+ * @returns The extracted session data, sources, and metadata.
60
+ * @throws Error if the archive format is invalid.
61
+ */
62
+ extractArchive(archiveBlob: Blob): Promise<ExtractedArchive>;
63
+ /**
64
+ * Get archive info without fully extracting all sources.
65
+ * Only reads the header and metadata section.
66
+ *
67
+ * @param archiveBlob The archive Blob to inspect.
68
+ * @returns The archive metadata.
69
+ * @throws Error if the archive format is invalid.
70
+ */
71
+ getArchiveInfo(archiveBlob: Blob): Promise<ArchiveMetadata>;
72
+ }
73
+ //# sourceMappingURL=SessionArchive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionArchive.d.ts","sourceRoot":"","sources":["../../src/storage/SessionArchive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAC7C,QAAQ,EAAE,eAAe,CAAC;CAC7B;AAMD,qBAAa,cAAc;IACvB,SAAgB,QAAQ,iBAAwB;IAEhD;;;;;;;OAOG;IACG,aAAa,CACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC,EACzD,QAAQ,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;IAyGhB;;;;;;OAMG;IACG,cAAc,CAAC,WAAW,EAAE,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8ElE;;;;;;;OAOG;IACG,cAAc,CAAC,WAAW,EAAE,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC;CAwCpE"}
@@ -0,0 +1,211 @@
1
+ import { Signal } from '../lib/Signal';
2
+ /** Magic bytes identifying a drop.ai archive: "DRPA" */
3
+ const ARCHIVE_MAGIC = new Uint8Array([0x44, 0x52, 0x50, 0x41]); // "DRPA"
4
+ const ARCHIVE_FORMAT_VERSION = 1;
5
+ export class SessionArchive {
6
+ constructor() {
7
+ this.progress = new Signal();
8
+ }
9
+ /**
10
+ * Create an archive from session data and audio sources.
11
+ *
12
+ * @param sessionData JSON string of the serialized session.
13
+ * @param sources Array of audio sources to include.
14
+ * @param metadata Optional metadata overrides.
15
+ * @returns A Blob containing the packed archive.
16
+ */
17
+ async createArchive(sessionData, sources, metadata) {
18
+ var _a, _b, _c;
19
+ this.progress.emit(0);
20
+ const encoder = new TextEncoder();
21
+ // Convert all source blobs to ArrayBuffers up front
22
+ const sourceBuffers = [];
23
+ let totalSourceSize = 0;
24
+ for (let i = 0; i < sources.length; i++) {
25
+ const data = await sources[i].blob.arrayBuffer();
26
+ sourceBuffers.push({ name: sources[i].name, data });
27
+ totalSourceSize += data.byteLength;
28
+ this.progress.emit((i + 1) / (sources.length + 2) * 0.5);
29
+ }
30
+ // Build metadata
31
+ const sessionBytes = encoder.encode(sessionData);
32
+ const archiveMetadata = {
33
+ version: (_a = metadata === null || metadata === void 0 ? void 0 : metadata.version) !== null && _a !== void 0 ? _a : '1.0.0',
34
+ createdAt: (_b = metadata === null || metadata === void 0 ? void 0 : metadata.createdAt) !== null && _b !== void 0 ? _b : new Date().toISOString(),
35
+ sessionName: (_c = metadata === null || metadata === void 0 ? void 0 : metadata.sessionName) !== null && _c !== void 0 ? _c : 'Untitled Session',
36
+ sourceCount: sources.length,
37
+ totalSize: 0, // Will be computed after assembly
38
+ };
39
+ const metadataBytes = encoder.encode(JSON.stringify(archiveMetadata));
40
+ // Calculate total size:
41
+ // 4 (magic) + 4 (version) +
42
+ // 4 (metadata len) + metadata +
43
+ // 4 (session len) + session +
44
+ // 4 (source count) +
45
+ // for each source: 4 (name len) + name + 4 (blob size) + blob
46
+ let totalSize = 4 + 4 + 4 + metadataBytes.byteLength + 4 + sessionBytes.byteLength + 4;
47
+ for (const src of sourceBuffers) {
48
+ const nameBytes = encoder.encode(src.name);
49
+ totalSize += 4 + nameBytes.byteLength + 4 + src.data.byteLength;
50
+ }
51
+ // Update metadata with actual total size and re-encode
52
+ archiveMetadata.totalSize = totalSize;
53
+ const finalMetadataBytes = encoder.encode(JSON.stringify(archiveMetadata));
54
+ // Recalculate if metadata size changed
55
+ const sizeDiff = finalMetadataBytes.byteLength - metadataBytes.byteLength;
56
+ totalSize += sizeDiff;
57
+ this.progress.emit(0.6);
58
+ // Assemble the archive buffer
59
+ const buffer = new ArrayBuffer(totalSize);
60
+ const view = new DataView(buffer);
61
+ const bytes = new Uint8Array(buffer);
62
+ let offset = 0;
63
+ // Magic: "DRPA"
64
+ bytes.set(ARCHIVE_MAGIC, offset);
65
+ offset += 4;
66
+ // Format version
67
+ view.setUint32(offset, ARCHIVE_FORMAT_VERSION, true);
68
+ offset += 4;
69
+ // Metadata JSON length + data
70
+ view.setUint32(offset, finalMetadataBytes.byteLength, true);
71
+ offset += 4;
72
+ bytes.set(finalMetadataBytes, offset);
73
+ offset += finalMetadataBytes.byteLength;
74
+ // Session JSON length + data
75
+ view.setUint32(offset, sessionBytes.byteLength, true);
76
+ offset += 4;
77
+ bytes.set(sessionBytes, offset);
78
+ offset += sessionBytes.byteLength;
79
+ // Source count
80
+ view.setUint32(offset, sourceBuffers.length, true);
81
+ offset += 4;
82
+ this.progress.emit(0.7);
83
+ // Each source
84
+ for (let i = 0; i < sourceBuffers.length; i++) {
85
+ const src = sourceBuffers[i];
86
+ const nameBytes = encoder.encode(src.name);
87
+ // Name length + name
88
+ view.setUint32(offset, nameBytes.byteLength, true);
89
+ offset += 4;
90
+ bytes.set(nameBytes, offset);
91
+ offset += nameBytes.byteLength;
92
+ // Blob size + blob data
93
+ view.setUint32(offset, src.data.byteLength, true);
94
+ offset += 4;
95
+ bytes.set(new Uint8Array(src.data), offset);
96
+ offset += src.data.byteLength;
97
+ this.progress.emit(0.7 + ((i + 1) / sourceBuffers.length) * 0.25);
98
+ }
99
+ this.progress.emit(1.0);
100
+ return new Blob([buffer], { type: 'application/x-drop-archive' });
101
+ }
102
+ /**
103
+ * Extract an archive into session data and audio blobs.
104
+ *
105
+ * @param archiveBlob The archive Blob to extract.
106
+ * @returns The extracted session data, sources, and metadata.
107
+ * @throws Error if the archive format is invalid.
108
+ */
109
+ async extractArchive(archiveBlob) {
110
+ this.progress.emit(0);
111
+ const arrayBuffer = await archiveBlob.arrayBuffer();
112
+ const view = new DataView(arrayBuffer);
113
+ const bytes = new Uint8Array(arrayBuffer);
114
+ const decoder = new TextDecoder();
115
+ let offset = 0;
116
+ // Validate magic
117
+ if (bytes[0] !== ARCHIVE_MAGIC[0] ||
118
+ bytes[1] !== ARCHIVE_MAGIC[1] ||
119
+ bytes[2] !== ARCHIVE_MAGIC[2] ||
120
+ bytes[3] !== ARCHIVE_MAGIC[3]) {
121
+ throw new Error('Invalid archive: missing DRPA magic bytes');
122
+ }
123
+ offset += 4;
124
+ // Read format version
125
+ const formatVersion = view.getUint32(offset, true);
126
+ if (formatVersion !== ARCHIVE_FORMAT_VERSION) {
127
+ throw new Error(`Unsupported archive format version: ${formatVersion}`);
128
+ }
129
+ offset += 4;
130
+ this.progress.emit(0.1);
131
+ // Read metadata
132
+ const metadataLength = view.getUint32(offset, true);
133
+ offset += 4;
134
+ const metadataJson = decoder.decode(bytes.slice(offset, offset + metadataLength));
135
+ const metadata = JSON.parse(metadataJson);
136
+ offset += metadataLength;
137
+ this.progress.emit(0.2);
138
+ // Read session data
139
+ const sessionLength = view.getUint32(offset, true);
140
+ offset += 4;
141
+ const sessionData = decoder.decode(bytes.slice(offset, offset + sessionLength));
142
+ offset += sessionLength;
143
+ this.progress.emit(0.4);
144
+ // Read source count
145
+ const sourceCount = view.getUint32(offset, true);
146
+ offset += 4;
147
+ // Read each source
148
+ const sources = [];
149
+ for (let i = 0; i < sourceCount; i++) {
150
+ // Name length + name
151
+ const nameLength = view.getUint32(offset, true);
152
+ offset += 4;
153
+ const name = decoder.decode(bytes.slice(offset, offset + nameLength));
154
+ offset += nameLength;
155
+ // Blob size + blob data
156
+ const blobSize = view.getUint32(offset, true);
157
+ offset += 4;
158
+ const blobData = bytes.slice(offset, offset + blobSize);
159
+ offset += blobSize;
160
+ sources.push({
161
+ name,
162
+ blob: new Blob([blobData]),
163
+ });
164
+ this.progress.emit(0.4 + ((i + 1) / sourceCount) * 0.55);
165
+ }
166
+ this.progress.emit(1.0);
167
+ return { sessionData, sources, metadata };
168
+ }
169
+ /**
170
+ * Get archive info without fully extracting all sources.
171
+ * Only reads the header and metadata section.
172
+ *
173
+ * @param archiveBlob The archive Blob to inspect.
174
+ * @returns The archive metadata.
175
+ * @throws Error if the archive format is invalid.
176
+ */
177
+ async getArchiveInfo(archiveBlob) {
178
+ // We only need to read the header portion: magic (4) + version (4) +
179
+ // metadata length (4) + metadata. Read a generous initial chunk.
180
+ const headerSize = Math.min(archiveBlob.size, 64 * 1024); // up to 64KB
181
+ const headerSlice = archiveBlob.slice(0, headerSize);
182
+ const arrayBuffer = await headerSlice.arrayBuffer();
183
+ const view = new DataView(arrayBuffer);
184
+ const bytes = new Uint8Array(arrayBuffer);
185
+ const decoder = new TextDecoder();
186
+ let offset = 0;
187
+ // Validate magic
188
+ if (bytes[0] !== ARCHIVE_MAGIC[0] ||
189
+ bytes[1] !== ARCHIVE_MAGIC[1] ||
190
+ bytes[2] !== ARCHIVE_MAGIC[2] ||
191
+ bytes[3] !== ARCHIVE_MAGIC[3]) {
192
+ throw new Error('Invalid archive: missing DRPA magic bytes');
193
+ }
194
+ offset += 4;
195
+ // Read format version
196
+ const formatVersion = view.getUint32(offset, true);
197
+ if (formatVersion !== ARCHIVE_FORMAT_VERSION) {
198
+ throw new Error(`Unsupported archive format version: ${formatVersion}`);
199
+ }
200
+ offset += 4;
201
+ // Read metadata
202
+ const metadataLength = view.getUint32(offset, true);
203
+ offset += 4;
204
+ if (offset + metadataLength > arrayBuffer.byteLength) {
205
+ throw new Error('Archive header is truncated; cannot read metadata');
206
+ }
207
+ const metadataJson = decoder.decode(bytes.slice(offset, offset + metadataLength));
208
+ return JSON.parse(metadataJson);
209
+ }
210
+ }
211
+ //# sourceMappingURL=SessionArchive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionArchive.js","sourceRoot":"","sources":["../../src/storage/SessionArchive.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,81 @@
1
1
  import { Session } from '../domain/Session';
2
- /**
3
- * Describes a session template.
4
- */
2
+ import { TrackType } from '../domain/Track';
3
+ import { Signal } from '../lib/Signal';
4
+ export interface TrackTemplate {
5
+ name: string;
6
+ type: TrackType;
7
+ color?: string;
8
+ plugins?: Array<{
9
+ pluginId: string;
10
+ params?: Record<string, number>;
11
+ }>;
12
+ armed?: boolean;
13
+ monitorMode?: string;
14
+ }
5
15
  export interface SessionTemplate {
6
16
  id: string;
7
17
  name: string;
8
18
  description: string;
9
- trackCount: number;
19
+ category: 'recording' | 'mixing' | 'mastering' | 'production' | 'podcast' | 'custom';
20
+ sampleRate: number;
21
+ tempo: number;
22
+ timeSignature: [number, number];
23
+ tracks: TrackTemplate[];
24
+ createdAt: string;
25
+ updatedAt: string;
26
+ }
27
+ /**
28
+ * Manages session templates — predefined track / routing configurations
29
+ * that users can instantiate to quickly bootstrap new sessions.
30
+ *
31
+ * Includes a set of built-in factory templates (recording, podcast,
32
+ * mixing, mastering, production) and supports user-created custom
33
+ * templates.
34
+ */
35
+ export declare class SessionTemplateManager {
36
+ private _templates;
37
+ readonly templatesChanged: Signal<void>;
38
+ constructor();
39
+ /**
40
+ * Add a new template. An `id`, `createdAt`, and `updatedAt` are generated
41
+ * automatically.
42
+ */
43
+ addTemplate(template: Omit<SessionTemplate, 'id' | 'createdAt' | 'updatedAt'>): SessionTemplate;
44
+ /**
45
+ * Update an existing template. Only the supplied fields are merged; the
46
+ * `updatedAt` timestamp is refreshed automatically.
47
+ */
48
+ updateTemplate(id: string, updates: Partial<SessionTemplate>): void;
49
+ /**
50
+ * Remove a template by ID.
51
+ */
52
+ removeTemplate(id: string): void;
53
+ /**
54
+ * Get a single template by ID.
55
+ */
56
+ getTemplate(id: string): SessionTemplate | undefined;
57
+ /**
58
+ * Get all registered templates.
59
+ */
60
+ getAllTemplates(): SessionTemplate[];
61
+ /**
62
+ * Get templates filtered by category.
63
+ */
64
+ getTemplatesByCategory(category: string): SessionTemplate[];
65
+ /**
66
+ * Snapshot a Session into a reusable template.
67
+ */
68
+ static createFromSession(session: Session, name: string, description: string): SessionTemplate;
69
+ static getDefaultTemplates(): SessionTemplate[];
70
+ /**
71
+ * Serialize all templates to a JSON string.
72
+ */
73
+ serialize(): string;
74
+ /**
75
+ * Restore a SessionTemplateManager from a JSON string produced by
76
+ * `serialize()`.
77
+ */
78
+ static deserialize(json: string): SessionTemplateManager;
10
79
  }
11
80
  /**
12
81
  * Returns the list of available session templates.
@@ -16,7 +85,7 @@ export declare function getTemplates(): SessionTemplate[];
16
85
  * Create a new Session from a template.
17
86
  *
18
87
  * Each template pre-configures tracks with default names, colors,
19
- * and routing through the master bus.
88
+ * armed state, and routing through the master bus.
20
89
  */
21
90
  export declare function createFromTemplate(templateId: string): Session;
22
91
  //# sourceMappingURL=SessionTemplate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SessionTemplate.d.ts","sourceRoot":"","sources":["../../src/storage/SessionTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG5C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACtB;AA0BD;;GAEG;AACH,wBAAgB,YAAY,IAAI,eAAe,EAAE,CAEhD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CA4C9D"}
1
+ {"version":3,"file":"SessionTemplate.d.ts","sourceRoot":"","sources":["../../src/storage/SessionTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAS,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAIvC,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;IACvE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;IACrF,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAUD;;;;;;;GAOG;AACH,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,UAAU,CAA2C;IAE7D,SAAgB,gBAAgB,eAAsB;;IAWtD;;;OAGG;IACH,WAAW,CACP,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAClE,eAAe;IAalB;;;OAGG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAenE;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMhC;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIpD;;OAEG;IACH,eAAe,IAAI,eAAe,EAAE;IAIpC;;OAEG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE;IAM3D;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACpB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GACpB,eAAe;IA4BlB,MAAM,CAAC,mBAAmB,IAAI,eAAe,EAAE;IA+H/C;;OAEG;IACH,SAAS,IAAI,MAAM;IAOnB;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB;CAU3D;AAID;;GAEG;AACH,wBAAgB,YAAY,IAAI,eAAe,EAAE,CAEhD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAsB9D"}