audio-mixer-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1640 @@
1
+ import { ref as T, watch as D, unref as C, onScopeDispose as Fe, readonly as Se, mergeModels as me, useCssVars as F, computed as g, useTemplateRef as U, useModel as z, createElementBlock as _, openBlock as y, normalizeClass as w, createElementVNode as m, createCommentVNode as pe, Fragment as ve, renderList as fe, normalizeStyle as Ue, renderSlot as be, toDisplayString as I, onUnmounted as ge, watchEffect as ke, onMounted as Ve, createVNode as k, withCtx as N, createTextVNode as ye, resolveDirective as qe, withDirectives as re, withKeys as We, vModelText as Oe, createBlock as _e } from "vue";
2
+ import { defineStore as Me } from "pinia";
3
+ var Ie = function() {
4
+ if (typeof Map < "u")
5
+ return Map;
6
+ function e(t, a) {
7
+ var n = -1;
8
+ return t.some(function(s, i) {
9
+ return s[0] === a ? (n = i, !0) : !1;
10
+ }), n;
11
+ }
12
+ return (
13
+ /** @class */
14
+ function() {
15
+ function t() {
16
+ this.__entries__ = [];
17
+ }
18
+ return Object.defineProperty(t.prototype, "size", {
19
+ /**
20
+ * @returns {boolean}
21
+ */
22
+ get: function() {
23
+ return this.__entries__.length;
24
+ },
25
+ enumerable: !0,
26
+ configurable: !0
27
+ }), t.prototype.get = function(a) {
28
+ var n = e(this.__entries__, a), s = this.__entries__[n];
29
+ return s && s[1];
30
+ }, t.prototype.set = function(a, n) {
31
+ var s = e(this.__entries__, a);
32
+ ~s ? this.__entries__[s][1] = n : this.__entries__.push([a, n]);
33
+ }, t.prototype.delete = function(a) {
34
+ var n = this.__entries__, s = e(n, a);
35
+ ~s && n.splice(s, 1);
36
+ }, t.prototype.has = function(a) {
37
+ return !!~e(this.__entries__, a);
38
+ }, t.prototype.clear = function() {
39
+ this.__entries__.splice(0);
40
+ }, t.prototype.forEach = function(a, n) {
41
+ n === void 0 && (n = null);
42
+ for (var s = 0, i = this.__entries__; s < i.length; s++) {
43
+ var l = i[s];
44
+ a.call(n, l[1], l[0]);
45
+ }
46
+ }, t;
47
+ }()
48
+ );
49
+ }(), de = typeof window < "u" && typeof document < "u" && window.document === document, ie = function() {
50
+ return typeof global < "u" && global.Math === Math ? global : typeof self < "u" && self.Math === Math ? self : typeof window < "u" && window.Math === Math ? window : Function("return this")();
51
+ }(), He = function() {
52
+ return typeof requestAnimationFrame == "function" ? requestAnimationFrame.bind(ie) : function(e) {
53
+ return setTimeout(function() {
54
+ return e(Date.now());
55
+ }, 1e3 / 60);
56
+ };
57
+ }(), je = 2;
58
+ function Ge(e, t) {
59
+ var a = !1, n = !1, s = 0;
60
+ function i() {
61
+ a && (a = !1, e()), n && h();
62
+ }
63
+ function l() {
64
+ He(i);
65
+ }
66
+ function h() {
67
+ var u = Date.now();
68
+ if (a) {
69
+ if (u - s < je)
70
+ return;
71
+ n = !0;
72
+ } else
73
+ a = !0, n = !1, setTimeout(l, t);
74
+ s = u;
75
+ }
76
+ return h;
77
+ }
78
+ var Ze = 20, Ke = ["top", "right", "bottom", "left", "width", "height", "size", "weight"], Ye = typeof MutationObserver < "u", Qe = (
79
+ /** @class */
80
+ function() {
81
+ function e() {
82
+ this.connected_ = !1, this.mutationEventsAdded_ = !1, this.mutationsObserver_ = null, this.observers_ = [], this.onTransitionEnd_ = this.onTransitionEnd_.bind(this), this.refresh = Ge(this.refresh.bind(this), Ze);
83
+ }
84
+ return e.prototype.addObserver = function(t) {
85
+ ~this.observers_.indexOf(t) || this.observers_.push(t), this.connected_ || this.connect_();
86
+ }, e.prototype.removeObserver = function(t) {
87
+ var a = this.observers_, n = a.indexOf(t);
88
+ ~n && a.splice(n, 1), !a.length && this.connected_ && this.disconnect_();
89
+ }, e.prototype.refresh = function() {
90
+ var t = this.updateObservers_();
91
+ t && this.refresh();
92
+ }, e.prototype.updateObservers_ = function() {
93
+ var t = this.observers_.filter(function(a) {
94
+ return a.gatherActive(), a.hasActive();
95
+ });
96
+ return t.forEach(function(a) {
97
+ return a.broadcastActive();
98
+ }), t.length > 0;
99
+ }, e.prototype.connect_ = function() {
100
+ !de || this.connected_ || (document.addEventListener("transitionend", this.onTransitionEnd_), window.addEventListener("resize", this.refresh), Ye ? (this.mutationsObserver_ = new MutationObserver(this.refresh), this.mutationsObserver_.observe(document, {
101
+ attributes: !0,
102
+ childList: !0,
103
+ characterData: !0,
104
+ subtree: !0
105
+ })) : (document.addEventListener("DOMSubtreeModified", this.refresh), this.mutationEventsAdded_ = !0), this.connected_ = !0);
106
+ }, e.prototype.disconnect_ = function() {
107
+ !de || !this.connected_ || (document.removeEventListener("transitionend", this.onTransitionEnd_), window.removeEventListener("resize", this.refresh), this.mutationsObserver_ && this.mutationsObserver_.disconnect(), this.mutationEventsAdded_ && document.removeEventListener("DOMSubtreeModified", this.refresh), this.mutationsObserver_ = null, this.mutationEventsAdded_ = !1, this.connected_ = !1);
108
+ }, e.prototype.onTransitionEnd_ = function(t) {
109
+ var a = t.propertyName, n = a === void 0 ? "" : a, s = Ke.some(function(i) {
110
+ return !!~n.indexOf(i);
111
+ });
112
+ s && this.refresh();
113
+ }, e.getInstance = function() {
114
+ return this.instance_ || (this.instance_ = new e()), this.instance_;
115
+ }, e.instance_ = null, e;
116
+ }()
117
+ ), Le = function(e, t) {
118
+ for (var a = 0, n = Object.keys(t); a < n.length; a++) {
119
+ var s = n[a];
120
+ Object.defineProperty(e, s, {
121
+ value: t[s],
122
+ enumerable: !1,
123
+ writable: !1,
124
+ configurable: !0
125
+ });
126
+ }
127
+ return e;
128
+ }, Q = function(e) {
129
+ var t = e && e.ownerDocument && e.ownerDocument.defaultView;
130
+ return t || ie;
131
+ }, Ae = ue(0, 0, 0, 0);
132
+ function oe(e) {
133
+ return parseFloat(e) || 0;
134
+ }
135
+ function xe(e) {
136
+ for (var t = [], a = 1; a < arguments.length; a++)
137
+ t[a - 1] = arguments[a];
138
+ return t.reduce(function(n, s) {
139
+ var i = e["border-" + s + "-width"];
140
+ return n + oe(i);
141
+ }, 0);
142
+ }
143
+ function Xe(e) {
144
+ for (var t = ["top", "right", "bottom", "left"], a = {}, n = 0, s = t; n < s.length; n++) {
145
+ var i = s[n], l = e["padding-" + i];
146
+ a[i] = oe(l);
147
+ }
148
+ return a;
149
+ }
150
+ function Je(e) {
151
+ var t = e.getBBox();
152
+ return ue(0, 0, t.width, t.height);
153
+ }
154
+ function et(e) {
155
+ var t = e.clientWidth, a = e.clientHeight;
156
+ if (!t && !a)
157
+ return Ae;
158
+ var n = Q(e).getComputedStyle(e), s = Xe(n), i = s.left + s.right, l = s.top + s.bottom, h = oe(n.width), u = oe(n.height);
159
+ if (n.boxSizing === "border-box" && (Math.round(h + i) !== t && (h -= xe(n, "left", "right") + i), Math.round(u + l) !== a && (u -= xe(n, "top", "bottom") + l)), !at(e)) {
160
+ var r = Math.round(h + i) - t, c = Math.round(u + l) - a;
161
+ Math.abs(r) !== 1 && (h -= r), Math.abs(c) !== 1 && (u -= c);
162
+ }
163
+ return ue(s.left, s.top, h, u);
164
+ }
165
+ var tt = /* @__PURE__ */ function() {
166
+ return typeof SVGGraphicsElement < "u" ? function(e) {
167
+ return e instanceof Q(e).SVGGraphicsElement;
168
+ } : function(e) {
169
+ return e instanceof Q(e).SVGElement && typeof e.getBBox == "function";
170
+ };
171
+ }();
172
+ function at(e) {
173
+ return e === Q(e).document.documentElement;
174
+ }
175
+ function nt(e) {
176
+ return de ? tt(e) ? Je(e) : et(e) : Ae;
177
+ }
178
+ function st(e) {
179
+ var t = e.x, a = e.y, n = e.width, s = e.height, i = typeof DOMRectReadOnly < "u" ? DOMRectReadOnly : Object, l = Object.create(i.prototype);
180
+ return Le(l, {
181
+ x: t,
182
+ y: a,
183
+ width: n,
184
+ height: s,
185
+ top: a,
186
+ right: t + n,
187
+ bottom: s + a,
188
+ left: t
189
+ }), l;
190
+ }
191
+ function ue(e, t, a, n) {
192
+ return { x: e, y: t, width: a, height: n };
193
+ }
194
+ var rt = (
195
+ /** @class */
196
+ function() {
197
+ function e(t) {
198
+ this.broadcastWidth = 0, this.broadcastHeight = 0, this.contentRect_ = ue(0, 0, 0, 0), this.target = t;
199
+ }
200
+ return e.prototype.isActive = function() {
201
+ var t = nt(this.target);
202
+ return this.contentRect_ = t, t.width !== this.broadcastWidth || t.height !== this.broadcastHeight;
203
+ }, e.prototype.broadcastRect = function() {
204
+ var t = this.contentRect_;
205
+ return this.broadcastWidth = t.width, this.broadcastHeight = t.height, t;
206
+ }, e;
207
+ }()
208
+ ), it = (
209
+ /** @class */
210
+ /* @__PURE__ */ function() {
211
+ function e(t, a) {
212
+ var n = st(a);
213
+ Le(this, { target: t, contentRect: n });
214
+ }
215
+ return e;
216
+ }()
217
+ ), ot = (
218
+ /** @class */
219
+ function() {
220
+ function e(t, a, n) {
221
+ if (this.activeObservations_ = [], this.observations_ = new Ie(), typeof t != "function")
222
+ throw new TypeError("The callback provided as parameter 1 is not a function.");
223
+ this.callback_ = t, this.controller_ = a, this.callbackCtx_ = n;
224
+ }
225
+ return e.prototype.observe = function(t) {
226
+ if (!arguments.length)
227
+ throw new TypeError("1 argument required, but only 0 present.");
228
+ if (!(typeof Element > "u" || !(Element instanceof Object))) {
229
+ if (!(t instanceof Q(t).Element))
230
+ throw new TypeError('parameter 1 is not of type "Element".');
231
+ var a = this.observations_;
232
+ a.has(t) || (a.set(t, new rt(t)), this.controller_.addObserver(this), this.controller_.refresh());
233
+ }
234
+ }, e.prototype.unobserve = function(t) {
235
+ if (!arguments.length)
236
+ throw new TypeError("1 argument required, but only 0 present.");
237
+ if (!(typeof Element > "u" || !(Element instanceof Object))) {
238
+ if (!(t instanceof Q(t).Element))
239
+ throw new TypeError('parameter 1 is not of type "Element".');
240
+ var a = this.observations_;
241
+ a.has(t) && (a.delete(t), a.size || this.controller_.removeObserver(this));
242
+ }
243
+ }, e.prototype.disconnect = function() {
244
+ this.clearActive(), this.observations_.clear(), this.controller_.removeObserver(this);
245
+ }, e.prototype.gatherActive = function() {
246
+ var t = this;
247
+ this.clearActive(), this.observations_.forEach(function(a) {
248
+ a.isActive() && t.activeObservations_.push(a);
249
+ });
250
+ }, e.prototype.broadcastActive = function() {
251
+ if (this.hasActive()) {
252
+ var t = this.callbackCtx_, a = this.activeObservations_.map(function(n) {
253
+ return new it(n.target, n.broadcastRect());
254
+ });
255
+ this.callback_.call(t, a, t), this.clearActive();
256
+ }
257
+ }, e.prototype.clearActive = function() {
258
+ this.activeObservations_.splice(0);
259
+ }, e.prototype.hasActive = function() {
260
+ return this.activeObservations_.length > 0;
261
+ }, e;
262
+ }()
263
+ ), Re = typeof WeakMap < "u" ? /* @__PURE__ */ new WeakMap() : new Ie(), Ne = (
264
+ /** @class */
265
+ /* @__PURE__ */ function() {
266
+ function e(t) {
267
+ if (!(this instanceof e))
268
+ throw new TypeError("Cannot call a class as a function.");
269
+ if (!arguments.length)
270
+ throw new TypeError("1 argument required, but only 0 present.");
271
+ var a = Qe.getInstance(), n = new ot(t, a, this);
272
+ Re.set(this, n);
273
+ }
274
+ return e;
275
+ }()
276
+ );
277
+ [
278
+ "observe",
279
+ "unobserve",
280
+ "disconnect"
281
+ ].forEach(function(e) {
282
+ Ne.prototype[e] = function() {
283
+ var t;
284
+ return (t = Re.get(this))[e].apply(t, arguments);
285
+ };
286
+ });
287
+ var lt = function() {
288
+ return typeof ie.ResizeObserver < "u" ? ie.ResizeObserver : Ne;
289
+ }();
290
+ function q(e) {
291
+ const t = T(0), a = T(0);
292
+ let n = null;
293
+ const s = () => {
294
+ n && (n.disconnect(), n = null);
295
+ };
296
+ return D(() => C(e), () => {
297
+ s();
298
+ const l = C(e);
299
+ if (!l) return;
300
+ n = new lt((u) => {
301
+ const r = u[0];
302
+ r && (t.value = r.contentRect.width, a.value = r.contentRect.height);
303
+ }), n.observe(l);
304
+ const h = l.getBoundingClientRect();
305
+ t.value = h.width, a.value = h.height;
306
+ }, { immediate: !0 }), Fe(s), {
307
+ width: Se(t),
308
+ height: Se(a)
309
+ };
310
+ }
311
+ const L = (e, t) => {
312
+ const a = e.__vccOpts || e;
313
+ for (const [n, s] of t)
314
+ a[n] = s;
315
+ return a;
316
+ }, ut = {
317
+ key: 0,
318
+ class: "level"
319
+ }, ct = {
320
+ __name: "AudioSlider",
321
+ props: /* @__PURE__ */ me({
322
+ min: { type: Number, default: 0 },
323
+ max: { type: Number, default: 1 },
324
+ step: { type: Number, default: 0.01 },
325
+ colour: { type: String, default: "grey" },
326
+ style: { type: String, default: "volume" },
327
+ thumbLength: { type: Number, default: 1 },
328
+ showLevel: { type: Boolean, default: !1 },
329
+ level: { type: Number, default: 0.5 }
330
+ }, {
331
+ value: { default: 0.75 },
332
+ valueModifiers: {}
333
+ }),
334
+ emits: ["update:value"],
335
+ setup(e) {
336
+ F((v) => ({
337
+ "3d436468": f.value,
338
+ "345b6e65": b.value,
339
+ "3327b972": W.value,
340
+ "5ae48cf2": x.value,
341
+ "01a7bd27": P.value
342
+ }));
343
+ const t = e, a = U("root"), { width: n, height: s } = q(a), i = g(() => Math.min(n.value, s.value)), l = g(() => Math.max(n.value, s.value)), h = g(() => n.value > s.value), u = g(() => h.value ? "h-slide" : "v-slide"), r = z(e, "value"), c = g(() => i.value * 0.8), p = g(() => i.value * t.thumbLength * 0.8), b = g(() => (h.value ? p : c).value + "px"), f = g(() => (h.value ? c : p).value + "px"), x = g(() => i.value * 0.1 + "px"), P = g(() => (l.value - p.value) * (r.value - t.min) / (t.max - t.min) + "px"), W = g(() => h.value ? "90deg" : "0deg"), B = T(!1), H = T(0), R = (v) => {
344
+ if (!a.value) return r.value;
345
+ const O = a.value.getBoundingClientRect(), G = v.touches ? v.touches[0].clientX : v.clientX, ce = v.touches ? v.touches[0].clientY : v.clientY;
346
+ let Z;
347
+ if (h.value) {
348
+ const K = G - O.left - c.value / 2, ee = O.width - c.value;
349
+ Z = Math.max(0, Math.min(1, K / ee));
350
+ } else {
351
+ const K = O.bottom - ce - c.value / 2, ee = O.height - c.value;
352
+ Z = Math.max(0, Math.min(1, K / ee));
353
+ }
354
+ const se = t.min + Z * (t.max - t.min);
355
+ return t.step > 0 ? Math.round(se / t.step) * t.step : se;
356
+ }, J = (v) => {
357
+ v.preventDefault(), B.value = !0, H.value = r.value, r.value = R(v), a.value && a.value.setPointerCapture && a.value.setPointerCapture(v.pointerId), document.addEventListener("mousemove", $), document.addEventListener("mouseup", j);
358
+ }, $ = (v) => {
359
+ B.value && (v.preventDefault(), r.value = R(v));
360
+ }, j = (v) => {
361
+ if (B.value) {
362
+ if (v.preventDefault(), B.value = !1, a.value && a.value.releasePointerCapture)
363
+ try {
364
+ a.value.releasePointerCapture(v.pointerId);
365
+ } catch {
366
+ }
367
+ document.removeEventListener("mousemove", $), document.removeEventListener("mouseup", j);
368
+ }
369
+ }, M = (v) => {
370
+ v.preventDefault(), v.touches.length === 1 && (B.value = !0, H.value = r.value, r.value = R(v), document.addEventListener("touchmove", S, { passive: !1 }), document.addEventListener("touchend", V), document.addEventListener("touchcancel", V));
371
+ }, S = (v) => {
372
+ B.value && (v.preventDefault(), v.touches.length === 1 && (r.value = R(v)));
373
+ }, V = (v) => {
374
+ B.value && (v.preventDefault(), B.value = !1, document.removeEventListener("touchmove", S), document.removeEventListener("touchend", V), document.removeEventListener("touchcancel", V));
375
+ }, A = (v) => Math.min(1, Math.max(0, t.level * 10 - v + 1));
376
+ return (v, O) => (y(), _("div", {
377
+ class: w(u.value),
378
+ ref_key: "root",
379
+ ref: a,
380
+ onMousedown: J,
381
+ onTouchstart: M,
382
+ style: { userSelect: "none", touchAction: "none" }
383
+ }, [
384
+ O[0] || (O[0] = m("div", { class: "track" }, null, -1)),
385
+ e.showLevel ? (y(), _("div", ut, [
386
+ (y(), _(ve, null, fe(10, (G) => m("div", {
387
+ class: w(["led", "led" + G])
388
+ }, [
389
+ m("div", {
390
+ class: "on",
391
+ style: Ue({ opacity: A(G) })
392
+ }, null, 4)
393
+ ], 2)), 64))
394
+ ])) : pe("", !0),
395
+ m("div", {
396
+ class: w(["thumb", { dragging: B.value, [e.colour]: !0, [e.style]: !0 }])
397
+ }, null, 2)
398
+ ], 34));
399
+ }
400
+ }, le = /* @__PURE__ */ L(ct, [["__scopeId", "data-v-1580ed15"]]), dt = {
401
+ __name: "TitleText",
402
+ props: {
403
+ align: {
404
+ type: String,
405
+ default: "left"
406
+ }
407
+ },
408
+ setup(e) {
409
+ F((h) => ({
410
+ "5fddb56d": l.value
411
+ }));
412
+ const t = U("el"), { width: a, height: n } = q(t), s = g(() => Math.min(a.value, n.value)), i = g(() => a.value > n.value ? "h-text" : "v-text"), l = g(() => s.value * 3 / 4 + "px");
413
+ return (h, u) => (y(), _("div", {
414
+ ref_key: "el",
415
+ ref: t,
416
+ class: "outer"
417
+ }, [
418
+ m("div", {
419
+ class: w({ [i.value]: !0, [e.align]: !0 })
420
+ }, [
421
+ be(h.$slots, "default", {}, void 0, !0)
422
+ ], 2)
423
+ ], 512));
424
+ }
425
+ }, De = /* @__PURE__ */ L(dt, [["__scopeId", "data-v-3ce29e77"]]), ht = {
426
+ __name: "TriState",
427
+ props: {
428
+ mute: { default: !1 },
429
+ muteModifiers: {},
430
+ solo: { default: !1 },
431
+ soloModifiers: {}
432
+ },
433
+ emits: ["update:mute", "update:solo"],
434
+ setup(e) {
435
+ const t = z(e, "mute"), a = z(e, "solo"), n = U("outer"), { width: s, height: i } = q(n), l = g(() => s.value > i.value * 1.9);
436
+ function h() {
437
+ t.value = !t.value, a.value = !1;
438
+ }
439
+ function u() {
440
+ a.value = !a.value, t.value = !1;
441
+ }
442
+ return (r, c) => (y(), _("div", {
443
+ class: "outer",
444
+ ref_key: "outer",
445
+ ref: n
446
+ }, [
447
+ m("div", {
448
+ class: w(["solo", { on: a.value }]),
449
+ onClick: u
450
+ }, null, 2),
451
+ m("div", {
452
+ class: "s-label",
453
+ onClick: u
454
+ }, I(l.value ? "SOLO" : "S"), 1),
455
+ m("div", {
456
+ class: w(["mute", { on: t.value }]),
457
+ onClick: h
458
+ }, null, 2),
459
+ m("div", {
460
+ class: "m-label",
461
+ onClick: h
462
+ }, I(l.value ? "MUTE" : "M"), 1)
463
+ ], 512));
464
+ }
465
+ }, mt = /* @__PURE__ */ L(ht, [["__scopeId", "data-v-143eade0"]]), he = {
466
+ // Enable development UI features (animations, random data, etc.)
467
+ enabled: !1,
468
+ // Specific feature flags
469
+ features: {
470
+ // Show beat animation in BarInput component
471
+ beatAnimation: !0,
472
+ // Show random level indicators on part controls
473
+ randomLevelIndicators: !0,
474
+ // Enable other debug/dev features as needed
475
+ debugMode: !1
476
+ }
477
+ }, ea = () => he.enabled, $e = (e) => he.enabled && he.features[e], X = Me("audioState", {
478
+ state: () => ({
479
+ // Playback state
480
+ isPlaying: !1,
481
+ currentTime: 0,
482
+ playbackSpeed: 1,
483
+ // Musical position
484
+ currentBar: 1,
485
+ currentBeat: 1,
486
+ currentRepeat: 0,
487
+ // Volume controls
488
+ masterVolume: 0.75,
489
+ partVolumes: {},
490
+ partMuted: {},
491
+ // Transport features
492
+ isLeadInActive: !1,
493
+ isStartingNotesActive: !1,
494
+ leadInBars: 1
495
+ }),
496
+ getters: {
497
+ // Format current time as MM:SS
498
+ formattedTime: (e) => {
499
+ const t = Math.floor(e.currentTime / 60), a = Math.floor(e.currentTime % 60);
500
+ return `${t}:${a.toString().padStart(2, "0")}`;
501
+ },
502
+ // Get volume for a specific part
503
+ getPartVolume: (e) => (t) => e.partVolumes[t] ?? 0.75,
504
+ // Check if part is muted
505
+ isPartMuted: (e) => (t) => e.partMuted[t] ?? !1,
506
+ // Current musical position as string
507
+ currentPosition: (e) => {
508
+ let t = `${e.currentBar}.${e.currentBeat}`;
509
+ return e.currentRepeat > 0 && (t += ` (R${e.currentRepeat})`), t;
510
+ }
511
+ },
512
+ actions: {
513
+ // Playback state updates
514
+ setPlaybackState(e) {
515
+ this.isPlaying = e;
516
+ },
517
+ setCurrentTime(e) {
518
+ this.currentTime = e;
519
+ },
520
+ setPlaybackSpeed(e) {
521
+ this.playbackSpeed = e;
522
+ },
523
+ // Musical position updates
524
+ setCurrentBar(e, t = 1, a = 0) {
525
+ this.currentBar = e, this.currentBeat = t, this.currentRepeat = a;
526
+ },
527
+ // Volume controls
528
+ setMasterVolume(e) {
529
+ this.masterVolume = Math.max(0, Math.min(1, e));
530
+ },
531
+ setPartVolume(e, t) {
532
+ this.partVolumes[e] = Math.max(0, Math.min(1, t));
533
+ },
534
+ setPartMuted(e, t) {
535
+ this.partMuted[e] = t;
536
+ },
537
+ // Transport features
538
+ setLeadInActive(e, t = 1) {
539
+ this.isLeadInActive = e, this.leadInBars = t;
540
+ },
541
+ setStartingNotesActive(e) {
542
+ this.isStartingNotesActive = e;
543
+ },
544
+ // Initialize part states
545
+ initializeParts(e) {
546
+ e.forEach((t) => {
547
+ t.name in this.partVolumes || (this.partVolumes[t.name] = t.volume || 0.75), t.name in this.partMuted || (this.partMuted[t.name] = !1);
548
+ });
549
+ }
550
+ }
551
+ }), ae = Me("musicData", {
552
+ state: () => ({
553
+ // Musical structure
554
+ beats: [],
555
+ practiceMarks: {},
556
+ parts: [],
557
+ title: "",
558
+ // Timing calculations
559
+ totalDuration: 0,
560
+ maxBar: 0,
561
+ // Metadata
562
+ timeSignature: 4,
563
+ baseTempo: 80
564
+ }),
565
+ getters: {
566
+ // Get time for a specific bar and repeat
567
+ getTimeFromBar: (e) => (t, a = 0) => {
568
+ const n = e.beats.find(
569
+ (s) => s.bar === t && s.beat === 1 && s.repeat === a
570
+ );
571
+ return n ? n.time : null;
572
+ },
573
+ // Get bar info from time
574
+ getBarFromTime: (e) => (t) => {
575
+ if (!e.beats || e.beats.length === 0) return null;
576
+ let a = null;
577
+ for (let n = e.beats.length - 1; n >= 0; n--)
578
+ if (e.beats[n].time <= t) {
579
+ a = e.beats[n];
580
+ break;
581
+ }
582
+ return a ? {
583
+ bar: a.bar,
584
+ beat: a.beat,
585
+ repeat: a.repeat,
586
+ tempo: a.tempo,
587
+ timeSig: a.timeSig
588
+ } : null;
589
+ },
590
+ // Get practice mark letters as array
591
+ practiceMarkLetters: (e) => Object.keys(e.practiceMarks).sort(),
592
+ // Get bar number for practice mark
593
+ getBarForMark: (e) => (t) => e.practiceMarks[t],
594
+ // Get all unique bar numbers
595
+ allBars: (e) => {
596
+ const t = /* @__PURE__ */ new Set();
597
+ return e.beats.forEach((a) => {
598
+ a.beat === 1 && t.add(a.bar);
599
+ }), Array.from(t).sort((a, n) => a - n);
600
+ },
601
+ // Check if a bar has repeats
602
+ hasRepeats: (e) => (t) => e.beats.some((a) => a.bar === t && a.repeat > 0)
603
+ },
604
+ actions: {
605
+ // Load musical data
606
+ loadMusicData(e) {
607
+ this.title = e.title || "Untitled", this.beats = e.beats || [], this.practiceMarks = e.practiceMarks || e.marks || {}, this.parts = e.parts || [], this.calculateDuration(), this.calculateMaxBar(), this.extractTimeSignature();
608
+ },
609
+ // Calculate total duration from beats
610
+ calculateDuration() {
611
+ this.beats.length > 0 && (this.totalDuration = Math.max(...this.beats.map((e) => e.time)));
612
+ },
613
+ // Find the highest bar number
614
+ calculateMaxBar() {
615
+ this.beats.length > 0 && (this.maxBar = Math.max(...this.beats.map((e) => e.bar)));
616
+ },
617
+ // Extract time signature from first beat
618
+ extractTimeSignature() {
619
+ this.beats.length > 0 && this.beats[0].timeSig && (this.timeSignature = this.beats[0].timeSig), this.beats.length > 0 && this.beats[0].tempo && (this.baseTempo = this.beats[0].tempo);
620
+ },
621
+ // Update practice marks
622
+ setPracticeMark(e, t) {
623
+ this.practiceMarks[e] = t;
624
+ },
625
+ removePracticeMark(e) {
626
+ delete this.practiceMarks[e];
627
+ },
628
+ // Validate bar number
629
+ isValidBar(e, t = 0) {
630
+ return this.beats.some((a) => a.bar === e && a.repeat === t);
631
+ }
632
+ }
633
+ }), pt = Me("playbackState", {
634
+ state: () => ({
635
+ // Transport state
636
+ transportState: "stopped",
637
+ // 'stopped', 'playing', 'paused'
638
+ // Navigation preferences
639
+ autoPlay: !1,
640
+ loopEnabled: !1,
641
+ loopStart: 1,
642
+ loopEnd: null,
643
+ // Lead-in settings
644
+ leadInEnabled: !0,
645
+ leadInBars: 1,
646
+ // Starting notes settings
647
+ startingNotesEnabled: !0,
648
+ startingNotesSequential: !0,
649
+ // Metronome settings
650
+ metronomeEnabled: !1,
651
+ metronomeVolume: 0.5,
652
+ // UI state
653
+ showTransportControls: !0,
654
+ showPartControls: !0,
655
+ showNavigationControls: !0,
656
+ // Last positions for convenience
657
+ lastBarPosition: 1,
658
+ lastPracticeMarkUsed: null
659
+ }),
660
+ getters: {
661
+ // Check if currently playing
662
+ isPlaying: (e) => e.transportState === "playing",
663
+ // Check if paused
664
+ isPaused: (e) => e.transportState === "paused",
665
+ // Check if stopped
666
+ isStopped: (e) => e.transportState === "stopped",
667
+ // Check if loop is configured
668
+ isLoopConfigured: (e) => e.loopEnabled && e.loopStart && e.loopEnd && e.loopEnd > e.loopStart,
669
+ // Get loop range as string
670
+ loopRange: (e) => !e.loopEnabled || !e.loopStart || !e.loopEnd ? null : `${e.loopStart}-${e.loopEnd}`
671
+ },
672
+ actions: {
673
+ // Transport controls
674
+ setTransportState(e) {
675
+ ["stopped", "playing", "paused"].includes(e) && (this.transportState = e);
676
+ },
677
+ play() {
678
+ this.setTransportState("playing");
679
+ },
680
+ pause() {
681
+ this.setTransportState("paused");
682
+ },
683
+ stop() {
684
+ this.setTransportState("stopped");
685
+ },
686
+ // Navigation settings
687
+ setAutoPlay(e) {
688
+ this.autoPlay = e;
689
+ },
690
+ setLoop(e, t = null, a = null) {
691
+ this.loopEnabled = e, t !== null && (this.loopStart = t), a !== null && (this.loopEnd = a);
692
+ },
693
+ setLoopStart(e) {
694
+ this.loopStart = e, this.loopEnd && this.loopEnd <= e && (this.loopEnd = e + 4);
695
+ },
696
+ setLoopEnd(e) {
697
+ this.loopEnd = e, this.loopStart && this.loopStart >= e && (this.loopStart = Math.max(1, e - 4));
698
+ },
699
+ // Lead-in settings
700
+ setLeadInEnabled(e) {
701
+ this.leadInEnabled = e;
702
+ },
703
+ setLeadInBars(e) {
704
+ this.leadInBars = Math.max(1, Math.min(4, e));
705
+ },
706
+ // Starting notes settings
707
+ setStartingNotesEnabled(e) {
708
+ this.startingNotesEnabled = e;
709
+ },
710
+ setStartingNotesSequential(e) {
711
+ this.startingNotesSequential = e;
712
+ },
713
+ // Metronome settings
714
+ setMetronomeEnabled(e) {
715
+ this.metronomeEnabled = e;
716
+ },
717
+ setMetronomeVolume(e) {
718
+ this.metronomeVolume = Math.max(0, Math.min(1, e));
719
+ },
720
+ // UI visibility controls
721
+ setTransportControlsVisible(e) {
722
+ this.showTransportControls = e;
723
+ },
724
+ setPartControlsVisible(e) {
725
+ this.showPartControls = e;
726
+ },
727
+ setNavigationControlsVisible(e) {
728
+ this.showNavigationControls = e;
729
+ },
730
+ // Position tracking
731
+ updateLastBarPosition(e) {
732
+ this.lastBarPosition = e;
733
+ },
734
+ updateLastPracticeMarkUsed(e) {
735
+ this.lastPracticeMarkUsed = e;
736
+ },
737
+ // Reset to defaults
738
+ resetToDefaults() {
739
+ this.transportState = "stopped", this.autoPlay = !1, this.loopEnabled = !1, this.loopStart = 1, this.loopEnd = null, this.leadInEnabled = !0, this.leadInBars = 1, this.startingNotesEnabled = !0, this.startingNotesSequential = !0, this.metronomeEnabled = !1, this.metronomeVolume = 0.5;
740
+ }
741
+ }
742
+ });
743
+ function vt(e) {
744
+ return { all: e = e || /* @__PURE__ */ new Map(), on: function(t, a) {
745
+ var n = e.get(t);
746
+ n ? n.push(a) : e.set(t, [a]);
747
+ }, off: function(t, a) {
748
+ var n = e.get(t);
749
+ n && (a ? n.splice(n.indexOf(a) >>> 0, 1) : e.set(t, []));
750
+ }, emit: function(t, a) {
751
+ var n = e.get(t);
752
+ n && n.slice().map(function(s) {
753
+ s(a);
754
+ }), (n = e.get("*")) && n.slice().map(function(s) {
755
+ s(t, a);
756
+ });
757
+ } };
758
+ }
759
+ class ft {
760
+ constructor() {
761
+ this.eventBus = vt(), this.currentTime = 0, this.isPlaying = !1, this.playbackSpeed = 1, this.masterVolume = 0.75, this.parts = /* @__PURE__ */ new Map(), this.playbackTimer = null, this.lastTimestamp = 0;
762
+ }
763
+ // Initialize with musical data
764
+ initialize(t) {
765
+ if (this.musicData = t, this.beats = t.beats || [], this.practiceMarks = t.practiceMarks || {}, this.beats.length > 0) {
766
+ const a = this.beats[this.beats.length - 1], n = a.tempo > 0 ? 60 / a.tempo : 0.75;
767
+ this.songDuration = a.time + n, this.maxBar = Math.max(...this.beats.map((s) => s.bar));
768
+ } else
769
+ this.songDuration = 0, this.maxBar = 0;
770
+ t.parts && t.parts.forEach((a) => {
771
+ this.parts.set(a.name, {
772
+ name: a.name,
773
+ volume: a.volume || 0.75,
774
+ muted: !1
775
+ });
776
+ }), this.eventBus.emit("initialized", { parts: Array.from(this.parts.values()) });
777
+ }
778
+ // Transport controls
779
+ play() {
780
+ this.isPlaying || (this.isPlaying = !0, this.lastTimestamp = performance.now(), this.startPlaybackTimer(), this.eventBus.emit("playbackStateChanged", {
781
+ isPlaying: !0,
782
+ currentTime: this.currentTime
783
+ }));
784
+ }
785
+ stop() {
786
+ this.isPlaying && (this.isPlaying = !1, this.stopPlaybackTimer(), this.eventBus.emit("playbackStateChanged", {
787
+ isPlaying: !1,
788
+ currentTime: this.currentTime
789
+ }));
790
+ }
791
+ pause() {
792
+ this.stop();
793
+ }
794
+ // Time controls
795
+ setTime(t) {
796
+ this.currentTime = Math.max(0, t), this.eventBus.emit("timeChanged", { currentTime: this.currentTime });
797
+ const a = this.getBarFromTime(this.currentTime);
798
+ a && this.eventBus.emit("barChanged", a);
799
+ }
800
+ getCurrentTime() {
801
+ return this.currentTime;
802
+ }
803
+ // Musical navigation
804
+ setBar(t, a = 0) {
805
+ const n = this.getTimeFromBar(t, a);
806
+ n !== null && this.setTime(n);
807
+ }
808
+ goToPracticeMark(t) {
809
+ const a = this.practiceMarks[t];
810
+ a !== void 0 && (this.setBar(a), this.eventBus.emit("practiceMarkChanged", { mark: t, bar: a }));
811
+ }
812
+ // Speed control
813
+ setPlaybackSpeed(t) {
814
+ this.playbackSpeed = Math.max(0.25, Math.min(2, t)), this.eventBus.emit("speedChanged", { speed: this.playbackSpeed });
815
+ }
816
+ getPlaybackSpeed() {
817
+ return this.playbackSpeed;
818
+ }
819
+ // Volume controls
820
+ setMasterVolume(t) {
821
+ this.masterVolume = Math.max(0, Math.min(1, t)), this.eventBus.emit("masterVolumeChanged", { volume: this.masterVolume });
822
+ }
823
+ getMasterVolume() {
824
+ return this.masterVolume;
825
+ }
826
+ setPartVolume(t, a) {
827
+ const n = this.parts.get(t);
828
+ n && (n.volume = Math.max(0, Math.min(1, a)), this.eventBus.emit("partVolumeChanged", { partName: t, volume: n.volume }));
829
+ }
830
+ setPartMuted(t, a) {
831
+ const n = this.parts.get(t);
832
+ n && (n.muted = a, this.eventBus.emit("partMutedChanged", { partName: t, muted: a }));
833
+ }
834
+ getParts() {
835
+ return Array.from(this.parts.values());
836
+ }
837
+ // Special features (no-op for UI testing)
838
+ playLeadIn(t = 1) {
839
+ this.eventBus.emit("leadInStarted", { bars: t }), setTimeout(() => {
840
+ this.eventBus.emit("leadInCompleted");
841
+ }, 1e3 * t);
842
+ }
843
+ playStartingNotes() {
844
+ this.eventBus.emit("startingNotesStarted"), setTimeout(() => {
845
+ this.eventBus.emit("startingNotesCompleted");
846
+ }, 2e3);
847
+ }
848
+ // Event bus access
849
+ on(t, a) {
850
+ this.eventBus.on(t, a);
851
+ }
852
+ off(t, a) {
853
+ this.eventBus.off(t, a);
854
+ }
855
+ // Private methods
856
+ startPlaybackTimer() {
857
+ const t = () => {
858
+ if (!this.isPlaying) return;
859
+ const a = performance.now(), n = (a - this.lastTimestamp) / 1e3;
860
+ if (this.lastTimestamp = a, this.currentTime += n * this.playbackSpeed, this.songDuration > 0 && this.currentTime >= this.songDuration) {
861
+ this.stop(), this.eventBus.emit("songEnded", { finalTime: this.currentTime });
862
+ return;
863
+ }
864
+ this.eventBus.emit("timeChanged", { currentTime: this.currentTime });
865
+ const s = this.getBarFromTime(this.currentTime);
866
+ if (s && (this.eventBus.emit("barChanged", s), this.maxBar > 0 && s.bar > this.maxBar)) {
867
+ this.stop(), this.eventBus.emit("songEnded", { finalTime: this.currentTime });
868
+ return;
869
+ }
870
+ this.playbackTimer = requestAnimationFrame(t);
871
+ };
872
+ this.playbackTimer = requestAnimationFrame(t);
873
+ }
874
+ stopPlaybackTimer() {
875
+ this.playbackTimer && (cancelAnimationFrame(this.playbackTimer), this.playbackTimer = null);
876
+ }
877
+ getBarFromTime(t) {
878
+ if (!this.beats || this.beats.length === 0) return null;
879
+ let a = null;
880
+ for (let n = this.beats.length - 1; n >= 0; n--)
881
+ if (this.beats[n].time <= t) {
882
+ a = this.beats[n];
883
+ break;
884
+ }
885
+ return a ? {
886
+ bar: a.bar,
887
+ beat: a.beat,
888
+ repeat: a.repeat,
889
+ time: a.time
890
+ } : null;
891
+ }
892
+ getTimeFromBar(t, a = 0) {
893
+ if (!this.beats || this.beats.length === 0) return null;
894
+ let n = this.beats.find(
895
+ (s) => s.bar === t && s.beat === 1 && s.repeat === a
896
+ );
897
+ return !n && a === 0 && (n = this.beats.find(
898
+ (s) => s.bar === t && s.beat === 1
899
+ )), n ? n.time : null;
900
+ }
901
+ destroy() {
902
+ this.stop(), this.eventBus.all.clear(), this.parts.clear();
903
+ }
904
+ }
905
+ const d = new ft();
906
+ function ne() {
907
+ const e = X(), t = ae(), a = pt(), n = ({ currentTime: o }) => {
908
+ e.setCurrentTime(o);
909
+ }, s = ({ isPlaying: o }) => {
910
+ e.setPlaybackState(o), a.setTransportState(o ? "playing" : "stopped");
911
+ }, i = (o) => {
912
+ o && (e.setCurrentBar(o.bar, o.beat, o.repeat), a.updateLastBarPosition(o.bar));
913
+ }, l = ({ speed: o }) => {
914
+ e.setPlaybackSpeed(o);
915
+ }, h = ({ volume: o }) => {
916
+ e.setMasterVolume(o);
917
+ }, u = ({ partName: o, volume: E }) => {
918
+ e.setPartVolume(o, E);
919
+ }, r = ({ partName: o, muted: E }) => {
920
+ e.setPartMuted(o, E);
921
+ }, c = ({ bars: o }) => {
922
+ e.setLeadInActive(!0, o);
923
+ }, p = () => {
924
+ e.setLeadInActive(!1);
925
+ }, b = () => {
926
+ e.setStartingNotesActive(!0);
927
+ }, f = () => {
928
+ e.setStartingNotesActive(!1);
929
+ }, x = ({ mark: o }) => {
930
+ a.updateLastPracticeMarkUsed(o);
931
+ }, P = ({ parts: o }) => {
932
+ e.initializeParts(o);
933
+ }, W = ({ finalTime: o }) => {
934
+ e.setPlaybackState(!1), a.setTransportState("stopped"), console.log(`Song ended at time: ${o}`);
935
+ }, B = () => {
936
+ d.on("timeChanged", n), d.on("playbackStateChanged", s), d.on("barChanged", i), d.on("speedChanged", l), d.on("masterVolumeChanged", h), d.on("partVolumeChanged", u), d.on("partMutedChanged", r), d.on("leadInStarted", c), d.on("leadInCompleted", p), d.on("startingNotesStarted", b), d.on("startingNotesCompleted", f), d.on("practiceMarkChanged", x), d.on("initialized", P), d.on("songEnded", W);
937
+ }, H = () => {
938
+ d.off("timeChanged", n), d.off("playbackStateChanged", s), d.off("barChanged", i), d.off("speedChanged", l), d.off("masterVolumeChanged", h), d.off("partVolumeChanged", u), d.off("partMutedChanged", r), d.off("leadInStarted", c), d.off("leadInCompleted", p), d.off("startingNotesStarted", b), d.off("startingNotesCompleted", f), d.off("practiceMarkChanged", x), d.off("initialized", P), d.off("songEnded", W);
939
+ }, R = () => {
940
+ ke(() => {
941
+ const o = e.masterVolume;
942
+ d.getMasterVolume() !== o && d.setMasterVolume(o);
943
+ }), ke(() => {
944
+ const o = e.playbackSpeed;
945
+ d.getPlaybackSpeed() !== o && d.setPlaybackSpeed(o);
946
+ });
947
+ }, J = (o) => {
948
+ t.loadMusicData(o), d.initialize({
949
+ beats: o.beats,
950
+ practiceMarks: o.marks || o.practiceMarks,
951
+ parts: o.parts
952
+ }), B(), R();
953
+ }, $ = () => {
954
+ d.play();
955
+ }, j = () => {
956
+ d.stop();
957
+ }, M = () => {
958
+ d.pause();
959
+ }, S = (o) => {
960
+ d.setTime(o);
961
+ }, V = (o, E = 0) => {
962
+ d.setBar(o, E);
963
+ }, A = (o) => {
964
+ d.goToPracticeMark(o);
965
+ }, v = (o) => {
966
+ d.setPlaybackSpeed(o);
967
+ }, O = (o) => {
968
+ d.setMasterVolume(o);
969
+ }, G = (o, E) => {
970
+ d.setPartVolume(o, E);
971
+ }, ce = (o, E) => {
972
+ d.setPartMuted(o, E);
973
+ }, Z = (o = 1) => {
974
+ d.playLeadIn(o);
975
+ }, se = () => {
976
+ d.playStartingNotes();
977
+ }, K = (o, E = !0, te = 0) => {
978
+ E && a.leadInEnabled ? (V(o, te), Z(a.leadInBars)) : (V(o, te), $());
979
+ }, ee = (o, E = !0) => {
980
+ const te = t.getBarForMark(o);
981
+ te && K(te, E);
982
+ };
983
+ return ge(() => {
984
+ H();
985
+ }), {
986
+ // Initialization
987
+ initialize: J,
988
+ // Transport controls
989
+ play: $,
990
+ stop: j,
991
+ pause: M,
992
+ // Time controls
993
+ setTime: S,
994
+ setBar: V,
995
+ // Navigation
996
+ goToPracticeMark: A,
997
+ setPlaybackSpeed: v,
998
+ // Volume controls
999
+ setMasterVolume: O,
1000
+ setPartVolume: G,
1001
+ setPartMuted: ce,
1002
+ // Special features
1003
+ playLeadIn: Z,
1004
+ playStartingNotes: se,
1005
+ // Complex operations
1006
+ playFromBar: K,
1007
+ playFromMark: ee,
1008
+ // Access to stores for components
1009
+ audioState: e,
1010
+ musicData: t,
1011
+ playbackState: a,
1012
+ // Direct access to engine for advanced use
1013
+ audioEngine: d
1014
+ };
1015
+ }
1016
+ const bt = {
1017
+ __name: "PartControl",
1018
+ props: /* @__PURE__ */ me({
1019
+ name: {
1020
+ type: String,
1021
+ required: !0
1022
+ },
1023
+ level: {
1024
+ type: Number,
1025
+ default: 0,
1026
+ validator: (e) => e >= 0 && e <= 1
1027
+ }
1028
+ }, {
1029
+ volume: { default: 0.75 },
1030
+ volumeModifiers: {},
1031
+ mute: { default: !1 },
1032
+ muteModifiers: {},
1033
+ solo: { default: !1 },
1034
+ soloModifiers: {}
1035
+ }),
1036
+ emits: ["update:volume", "update:mute", "update:solo"],
1037
+ setup(e) {
1038
+ F((f) => ({
1039
+ "34cdae44": r.value
1040
+ }));
1041
+ const t = e;
1042
+ X();
1043
+ const a = ne(), n = z(e, "volume"), s = z(e, "mute"), i = z(e, "solo");
1044
+ D(n, (f) => {
1045
+ a.setPartVolume(t.name, f);
1046
+ }), D(s, (f) => {
1047
+ a.setPartMuted(t.name, f);
1048
+ });
1049
+ const l = U("el"), { width: h, height: u } = q(l), r = g(() => Math.min(h.value, u.value) + "px"), c = g(
1050
+ () => h.value > u.value ? "mobile" : h.value < 60 ? "tablet" : "desktop"
1051
+ );
1052
+ let p = null;
1053
+ const b = T(0);
1054
+ return Ve(() => {
1055
+ $e("randomLevelIndicators") && (p = setInterval(() => {
1056
+ b.value = s.value ? 0 : Math.random() * n.value;
1057
+ }, 100));
1058
+ }), ge(() => {
1059
+ p && (clearInterval(p), p = null);
1060
+ }), (f, x) => (y(), _("div", {
1061
+ ref_key: "el",
1062
+ ref: l,
1063
+ class: w([c.value, "part"])
1064
+ }, [
1065
+ k(mt, {
1066
+ class: "tri",
1067
+ mute: s.value,
1068
+ "onUpdate:mute": x[0] || (x[0] = (P) => s.value = P),
1069
+ solo: i.value,
1070
+ "onUpdate:solo": x[1] || (x[1] = (P) => i.value = P)
1071
+ }, null, 8, ["mute", "solo"]),
1072
+ k(De, {
1073
+ align: "left",
1074
+ class: "name"
1075
+ }, {
1076
+ default: N(() => [
1077
+ ye(I(e.name), 1)
1078
+ ]),
1079
+ _: 1
1080
+ }),
1081
+ k(le, {
1082
+ level: b.value,
1083
+ "show-level": !0,
1084
+ class: "vol",
1085
+ value: n.value,
1086
+ "onUpdate:value": x[2] || (x[2] = (P) => n.value = P)
1087
+ }, null, 8, ["level", "value"])
1088
+ ], 2));
1089
+ }
1090
+ }, gt = /* @__PURE__ */ L(bt, [["__scopeId", "data-v-510493b1"]]), yt = { class: "mark" }, _t = {
1091
+ key: 0,
1092
+ class: "mark-dropdown"
1093
+ }, Mt = ["onClick"], St = { class: "rpt" }, kt = { class: "beat-ind" }, xt = { class: "beat" }, Tt = {
1094
+ __name: "BarInput",
1095
+ setup(e) {
1096
+ F((M) => ({
1097
+ "8ea05ab6": x.value,
1098
+ "1a3336d8": P.value
1099
+ }));
1100
+ const t = U("el"), { width: a, height: n } = q(t), s = ae(), i = X(), l = ne(), h = T(!0);
1101
+ D(() => i.currentBeat, () => {
1102
+ h.value = !0, setTimeout(() => {
1103
+ h.value = !1;
1104
+ }, 50);
1105
+ });
1106
+ let u = null;
1107
+ Ve(() => {
1108
+ $e("beatAnimation") && (u = setInterval(() => {
1109
+ const M = i.currentBeat % s.timeSignature + 1;
1110
+ i.setCurrentBar(i.currentBar, M, i.currentRepeat);
1111
+ }, 800));
1112
+ }), ge(() => {
1113
+ u && (clearInterval(u), u = null);
1114
+ });
1115
+ const r = T(i.currentBar.toString()), c = T("A");
1116
+ T(i.currentRepeat);
1117
+ const p = T(!1), b = T(!1);
1118
+ D(r, () => {
1119
+ r.value = r.value.replace(/\D/g, ""), r.value.length > 3 && (r.value = r.value.slice(0, 3));
1120
+ }), D(() => i.currentBar, (M) => {
1121
+ r.value = M.toString();
1122
+ });
1123
+ function f() {
1124
+ const M = parseInt(r.value);
1125
+ M && M > 0 && $(M);
1126
+ }
1127
+ const x = g(() => Math.min(n.value / 2.25, a.value / 4.5) + "px"), P = g(() => Math.min(a.value / 15, n.value / 6.4) + "px");
1128
+ function W() {
1129
+ p.value = !p.value;
1130
+ }
1131
+ function B() {
1132
+ p.value = !1;
1133
+ }
1134
+ function H() {
1135
+ b.value = !b.value;
1136
+ }
1137
+ function R() {
1138
+ b.value = !1;
1139
+ }
1140
+ const J = g(() => Object.keys(s.practiceMarks).sort());
1141
+ function $(M) {
1142
+ l.setBar(M, i.currentRepeat);
1143
+ }
1144
+ function j(M) {
1145
+ c.value = M, p.value = !1, l.goToPracticeMark(M);
1146
+ }
1147
+ return (M, S) => {
1148
+ const V = qe("click-outside");
1149
+ return y(), _("div", {
1150
+ ref_key: "el",
1151
+ ref: t,
1152
+ class: w(["outer", { pulse: h.value }])
1153
+ }, [
1154
+ S[1] || (S[1] = m("div", { class: "frame" }, null, -1)),
1155
+ re((y(), _("div", {
1156
+ class: w(["mark-input", { empty: !c.value, edit: p.value }]),
1157
+ onClick: W
1158
+ }, [
1159
+ m("div", yt, I(c.value), 1)
1160
+ ], 2)), [
1161
+ [V, B]
1162
+ ]),
1163
+ p.value ? (y(), _("div", _t, [
1164
+ (y(!0), _(ve, null, fe(J.value, (A) => (y(), _("div", {
1165
+ key: A,
1166
+ class: "mark-option",
1167
+ onClick: (v) => j(A)
1168
+ }, I(A), 9, Mt))), 128))
1169
+ ])) : pe("", !0),
1170
+ S[2] || (S[2] = m("div", { class: "mark-title" }, "Mark", -1)),
1171
+ re(m("input", {
1172
+ type: "text",
1173
+ class: "bar-input",
1174
+ "onUpdate:modelValue": S[0] || (S[0] = (A) => r.value = A),
1175
+ inputmode: "decimal",
1176
+ pattern: "\\d*",
1177
+ onChange: f,
1178
+ onKeyup: We(f, ["enter"])
1179
+ }, null, 544), [
1180
+ [Oe, r.value]
1181
+ ]),
1182
+ S[3] || (S[3] = m("div", { class: "bar-title" }, "Bar", -1)),
1183
+ re((y(), _("div", {
1184
+ class: w(["rpt-input", { edit: b.value }]),
1185
+ onClick: H
1186
+ }, [
1187
+ m("div", St, I(C(i).currentRepeat || "-"), 1)
1188
+ ], 2)), [
1189
+ [V, R]
1190
+ ]),
1191
+ S[4] || (S[4] = m("div", { class: "rpt-title" }, "Rpt", -1)),
1192
+ m("div", kt, [
1193
+ m("div", xt, I(C(i).currentBeat), 1)
1194
+ ]),
1195
+ S[5] || (S[5] = m("div", { class: "beat-title" }, "Beat", -1))
1196
+ ], 2);
1197
+ };
1198
+ }
1199
+ }, Ct = /* @__PURE__ */ L(Tt, [["__scopeId", "data-v-3043e562"]]), wt = { class: "title" }, Bt = {
1200
+ __name: "BaseNumericInput",
1201
+ props: /* @__PURE__ */ me({
1202
+ title: {
1203
+ type: String,
1204
+ required: !0
1205
+ },
1206
+ color: {
1207
+ type: String,
1208
+ default: "#336"
1209
+ },
1210
+ focusColor: {
1211
+ type: String,
1212
+ default: "#558"
1213
+ },
1214
+ textColor: {
1215
+ type: String,
1216
+ default: "#aad"
1217
+ },
1218
+ backgroundColor: {
1219
+ type: String,
1220
+ default: "#111117"
1221
+ },
1222
+ sliderMax: {
1223
+ type: Number,
1224
+ default: 1
1225
+ },
1226
+ sliderMin: {
1227
+ type: Number,
1228
+ default: 0
1229
+ },
1230
+ thumbLength: {
1231
+ type: Number,
1232
+ default: 2
1233
+ },
1234
+ formatValue: {
1235
+ type: Function,
1236
+ default: (e) => e.toString()
1237
+ },
1238
+ parseValue: {
1239
+ type: Function,
1240
+ default: (e) => parseFloat(e)
1241
+ },
1242
+ validateInput: {
1243
+ type: Function,
1244
+ default: (e) => e.replace(/[^0-9.]/g, "")
1245
+ },
1246
+ transformSliderToDisplay: {
1247
+ type: Function,
1248
+ default: (e) => e
1249
+ },
1250
+ transformDisplayToSlider: {
1251
+ type: Function,
1252
+ default: (e) => e
1253
+ },
1254
+ maxChars: {
1255
+ type: Number,
1256
+ default: null
1257
+ }
1258
+ }, {
1259
+ value: { default: 0.5 },
1260
+ valueModifiers: {}
1261
+ }),
1262
+ emits: ["update:value"],
1263
+ setup(e) {
1264
+ F((c) => ({
1265
+ "0d0963e0": e.textColor,
1266
+ "4ad34b2f": e.backgroundColor,
1267
+ "02156786": e.color,
1268
+ "715a9528": u.value,
1269
+ "30d64f7d": h.value,
1270
+ b8fbe65e: e.focusColor
1271
+ }));
1272
+ const t = e, a = U("el"), { width: n, height: s } = q(a), i = z(e, "value"), l = T(t.formatValue(t.transformSliderToDisplay(i.value)));
1273
+ D(i, () => {
1274
+ const c = t.transformSliderToDisplay(i.value);
1275
+ l.value = t.formatValue(c);
1276
+ }), D(l, () => {
1277
+ l.value = t.validateInput(l.value), t.maxChars && l.value.length > t.maxChars && (l.value = l.value.slice(0, t.maxChars));
1278
+ });
1279
+ const h = g(() => Math.min(s.value / 2.25, n.value / 2.2) + "px"), u = g(() => Math.min(n.value / 3, s.value / 6.4) + "px");
1280
+ function r() {
1281
+ const c = t.parseValue(l.value), p = t.transformDisplayToSlider(c);
1282
+ i.value = Math.min(Math.max(p, t.sliderMin), t.sliderMax);
1283
+ }
1284
+ return (c, p) => (y(), _("div", {
1285
+ class: "outer",
1286
+ ref_key: "el",
1287
+ ref: a
1288
+ }, [
1289
+ p[2] || (p[2] = m("div", { class: "frame" }, null, -1)),
1290
+ re(m("input", {
1291
+ type: "text",
1292
+ class: "input",
1293
+ "onUpdate:modelValue": p[0] || (p[0] = (b) => l.value = b),
1294
+ inputmode: "decimal",
1295
+ pattern: "\\d*",
1296
+ onChange: r
1297
+ }, null, 544), [
1298
+ [Oe, l.value]
1299
+ ]),
1300
+ m("div", wt, I(e.title), 1),
1301
+ k(le, {
1302
+ class: "slider",
1303
+ value: i.value,
1304
+ "onUpdate:value": p[1] || (p[1] = (b) => i.value = b),
1305
+ "thumb-length": e.thumbLength,
1306
+ max: e.sliderMax,
1307
+ min: e.sliderMin
1308
+ }, null, 8, ["value", "thumb-length", "max", "min"])
1309
+ ], 512));
1310
+ }
1311
+ }, ze = /* @__PURE__ */ L(Bt, [["__scopeId", "data-v-79c7a539"]]), Et = {
1312
+ __name: "SpeedInput",
1313
+ setup(e) {
1314
+ const t = X(), a = ne(), n = g({
1315
+ get: () => Math.log2(t.playbackSpeed) * 0.5 + 0.5,
1316
+ set: (r) => {
1317
+ const c = Math.pow(2, r * 2 - 1);
1318
+ a.setPlaybackSpeed(c);
1319
+ }
1320
+ }), s = (r) => Math.floor(Math.pow(2, r * 2 - 1) * 100 + 0.5) + "", i = (r) => parseFloat(r), l = (r) => r.replace(/\D/g, ""), h = (r) => r, u = (r) => {
1321
+ const c = Math.log2(r / 100) * 0.5 + 0.5;
1322
+ return Math.min(Math.max(c, 0), 1);
1323
+ };
1324
+ return (r, c) => (y(), _e(ze, {
1325
+ value: n.value,
1326
+ "onUpdate:value": c[0] || (c[0] = (p) => n.value = p),
1327
+ title: "Speed",
1328
+ color: "#336",
1329
+ "text-color": "#aad",
1330
+ "format-value": s,
1331
+ "parse-value": i,
1332
+ "validate-input": l,
1333
+ "transform-slider-to-display": h,
1334
+ "transform-display-to-slider": u,
1335
+ "thumb-length": 2,
1336
+ "max-chars": 3
1337
+ }, null, 8, ["value"]));
1338
+ }
1339
+ }, Pt = {
1340
+ __name: "TimeInput",
1341
+ setup(e) {
1342
+ const t = X(), a = ae(), n = ne(), s = (r) => r.toFixed(1), i = (r) => parseFloat(r), l = (r) => r.replace(/[^0-9.]/g, ""), h = (r) => r, u = (r) => r;
1343
+ return (r, c) => (y(), _e(ze, {
1344
+ value: C(t).currentTime,
1345
+ "onUpdate:value": [
1346
+ c[0] || (c[0] = (p) => C(t).currentTime = p),
1347
+ C(n).setTime
1348
+ ],
1349
+ title: "Time",
1350
+ color: "#344",
1351
+ "focus-color": "#556868",
1352
+ "text-color": "#acc",
1353
+ "background-color": "#111117",
1354
+ "slider-max": C(a).totalDuration,
1355
+ "slider-min": 0,
1356
+ "format-value": s,
1357
+ "parse-value": i,
1358
+ "validate-input": l,
1359
+ "transform-slider-to-display": h,
1360
+ "transform-display-to-slider": u,
1361
+ "thumb-length": 2
1362
+ }, null, 8, ["value", "onUpdate:value", "slider-max"]));
1363
+ }
1364
+ }, Vt = { class: "inner" }, Ot = {
1365
+ __name: "AudioButton",
1366
+ setup(e) {
1367
+ const t = T(!1), a = () => t.value = !0, n = () => t.value = !1;
1368
+ return (s, i) => (y(), _("div", {
1369
+ class: w(["button-outer", { down: t.value }]),
1370
+ onPointerdown: a,
1371
+ onPointerup: n,
1372
+ onPointerleave: n
1373
+ }, [
1374
+ m("div", Vt, [
1375
+ be(s.$slots, "default", {}, void 0, !0)
1376
+ ])
1377
+ ], 34));
1378
+ }
1379
+ }, Y = /* @__PURE__ */ L(Ot, [["__scopeId", "data-v-0d7af06e"]]), It = { class: "outer" }, Lt = { class: "buttons" }, At = {
1380
+ class: "icon",
1381
+ viewBox: "0 0 48 48"
1382
+ }, Rt = ["d"], Nt = {
1383
+ __name: "MixerControls",
1384
+ setup(e) {
1385
+ const t = ae(), a = X(), n = ne();
1386
+ function s() {
1387
+ a.isPlaying ? n.stop() : n.play();
1388
+ }
1389
+ function i() {
1390
+ const b = Math.max(1, a.currentBar - 1);
1391
+ n.setBar(b);
1392
+ }
1393
+ function l() {
1394
+ const b = a.currentBar + 1;
1395
+ n.setBar(b);
1396
+ }
1397
+ function h() {
1398
+ n.playStartingNotes();
1399
+ }
1400
+ const u = T(!1), r = T(!0);
1401
+ function c() {
1402
+ u.value = !u.value;
1403
+ }
1404
+ function p() {
1405
+ r.value = !r.value;
1406
+ }
1407
+ return (b, f) => (y(), _("div", It, [
1408
+ k(De, {
1409
+ class: "title",
1410
+ align: "centre"
1411
+ }, {
1412
+ default: N(() => [
1413
+ ye(I(C(t).title), 1)
1414
+ ]),
1415
+ _: 1
1416
+ }),
1417
+ k(le, {
1418
+ class: "main",
1419
+ colour: "red",
1420
+ modelValue: C(a).masterVolume,
1421
+ "onUpdate:modelValue": f[0] || (f[0] = (x) => C(a).masterVolume = x)
1422
+ }, null, 8, ["modelValue"]),
1423
+ k(le, {
1424
+ class: "tick",
1425
+ colour: "blue"
1426
+ }),
1427
+ f[6] || (f[6] = m("div", { class: "main-t" }, "Main", -1)),
1428
+ f[7] || (f[7] = m("div", { class: "tick-t" }, "Tick", -1)),
1429
+ k(Ct, { class: "bar" }),
1430
+ k(Pt, { class: "time" }),
1431
+ k(Et, { class: "speed" }),
1432
+ m("div", Lt, [
1433
+ k(Y, {
1434
+ class: "button",
1435
+ onClick: i
1436
+ }, {
1437
+ default: N(() => f[1] || (f[1] = [
1438
+ m("svg", {
1439
+ class: "icon",
1440
+ viewBox: "0 0 48 48"
1441
+ }, [
1442
+ m("path", { d: "M11 36V12h3v24Zm26 0L19.7 24 37 12Z" })
1443
+ ], -1)
1444
+ ])),
1445
+ _: 1,
1446
+ __: [1]
1447
+ }),
1448
+ k(Y, {
1449
+ class: "button",
1450
+ onClick: s
1451
+ }, {
1452
+ default: N(() => [
1453
+ (y(), _("svg", At, [
1454
+ m("path", {
1455
+ d: C(a).isPlaying ? "M27.4 35.4V12.6h8v22.8Zm-14.8 0V12.6h8.05v22.8Z" : "M16 37.85v-28l22 14Z"
1456
+ }, null, 8, Rt)
1457
+ ]))
1458
+ ]),
1459
+ _: 1
1460
+ }),
1461
+ k(Y, {
1462
+ class: "button",
1463
+ onClick: l
1464
+ }, {
1465
+ default: N(() => f[2] || (f[2] = [
1466
+ m("svg", {
1467
+ class: "icon",
1468
+ viewBox: "0 0 48 48"
1469
+ }, [
1470
+ m("path", { d: "M34 36V12h3v24Zm-23 0V12l17.3 12Z" })
1471
+ ], -1)
1472
+ ])),
1473
+ _: 1,
1474
+ __: [2]
1475
+ }),
1476
+ k(Y, {
1477
+ class: "button",
1478
+ onClick: c
1479
+ }, {
1480
+ default: N(() => [
1481
+ (y(), _("svg", {
1482
+ class: w(["icon", u.value ? "on" : "off"]),
1483
+ viewBox: "-128 -128 768 768"
1484
+ }, f[3] || (f[3] = [
1485
+ m("path", { d: "m 463.84136,154.89339 c -6.42,-6.42 -16.83,-6.42 -23.251,0 -71.31197,70.35135 -136.61146,132.25426 -208.741,199.7 h -105.82 c 23.35495,-140.1063 67.13099,-217.59716 120.727,-318.357996 0.86,-0.803 2.209,-0.801 3.067,-10e-4 20.50653,37.383983 48.51152,88.812606 72.26194,147.190756 1.186,9.002 12.2214,17.4338 23.3242,11.71391 9.002,-1.186 11.1594,-12.2324 9.9724,-21.2344 -21.69905,-53.89113 -30.43965,-85.078342 -83.11454,-161.702266 -13.446,-12.55299965 -34.508,-12.55699965 -47.954,10e-4 C 126.80877,149.30021 96.099465,324.74626 77.091365,474.25139 c -2.829,21.473 13.907,40.535 35.543995,40.535 h 271.311 c 21.661,0 38.373,-19.087 35.544,-40.535 -8.26237,-52.34207 -14.88466,-100.7074 -24.7871,-157.02622 -6.40949,-11.78839 -8.3911,-14.9907 -17.4031,-13.8037 -9.002,1.186 -13.59751,8.0528 -12.41051,17.0548 l 5.66371,34.11712 h -83.159 c 64.35441,-63.86663 129.29308,-130.29894 176.448,-176.449 6.42,-6.42 6.42,-16.83 -10e-4,-23.251 z m -88.956,232.582 12.004,91.074 c 0.112,0.846 -0.148,1.701 -0.708,2.341 -0.566,0.645 -1.38,1.014 -2.235,1.014 h -271.311 c -0.855,0 -1.668,-0.369 -2.231,-1.011 -0.564,-0.643 -0.824,-1.499 -0.712,-2.347 l 12.003,-91.072 h 253.19 z" }, null, -1)
1486
+ ]), 2))
1487
+ ]),
1488
+ _: 1
1489
+ }),
1490
+ k(Y, {
1491
+ class: "button",
1492
+ onClick: p
1493
+ }, {
1494
+ default: N(() => [
1495
+ (y(), _("svg", {
1496
+ class: w(["icon", r.value ? "on" : "off"]),
1497
+ viewBox: "-2 -2 28 28"
1498
+ }, f[4] || (f[4] = [
1499
+ m("path", { d: "m 8.9838564,1.5166215 v 2 h 5.9999996 v -2 z m 2.9999996,3 c -4.9699996,0 -8.9999996,4.0299999 -8.9999996,8.9999995 0,4.97 4.02,9 8.9999996,9 4.98,0 9,-4.03 9,-9 0,-2.12 -0.740703,-4.0693745 -1.970703,-5.6093745 l 1.419922,-1.421875 c -0.43,-0.51 -0.900156,-0.9882031 -1.410156,-1.4082031 l -1.419922,1.4199219 c -1.55,-1.24 -3.499141,-1.9804688 -5.619141,-1.9804688 z m -1.789062,4.7480469 6,4.4999996 -6,4.5 z" }, null, -1)
1500
+ ]), 2))
1501
+ ]),
1502
+ _: 1
1503
+ }),
1504
+ k(Y, {
1505
+ class: "button",
1506
+ onClick: h
1507
+ }, {
1508
+ default: N(() => f[5] || (f[5] = [
1509
+ m("svg", {
1510
+ class: "icon",
1511
+ viewBox: "0 -960 960 960"
1512
+ }, [
1513
+ m("path", { d: "m 306.66667,-360 q -44,0 -75.33334,-31.33333 Q 200,-422.66667 200,-466.66667 q 0,-44 31.33333,-75.33333 31.33334,-31.33333 75.33334,-31.33333 15.33333,0 28.33333,3.66666 13,3.66667 25,11 V -840 h 160 v 106.66667 H 413.33333 v 266.66666 q 0,44 -31.33333,75.33334 Q 350.66667,-360 306.66667,-360 Z" }),
1514
+ m("path", { d: "m 546.66667,-120 q -44,0 -75.33334,-31.33333 Q 440,-182.66667 440,-226.66667 q 0,-44 31.33333,-75.33333 31.33334,-31.33333 75.33334,-31.33333 15.33333,0 28.33333,3.66666 13,3.66667 25,11 V -600 h 160 v 106.66667 H 653.33333 v 266.66666 q 0,44 -31.33333,75.33334 Q 590.66667,-120 546.66667,-120 Z" })
1515
+ ], -1)
1516
+ ])),
1517
+ _: 1,
1518
+ __: [5]
1519
+ })
1520
+ ])
1521
+ ]));
1522
+ }
1523
+ }, Dt = /* @__PURE__ */ L(Nt, [["__scopeId", "data-v-fc2b877e"]]), $t = { class: "container" }, zt = { class: "panel" }, Te = 40, Ce = 40, we = 100, Ft = 50, Be = 400, Ee = 570, Pe = 570, Ut = 350, qt = 330, Wt = 360, Ht = 360, jt = {
1524
+ __name: "MixerLayout",
1525
+ setup(e) {
1526
+ F((u) => ({
1527
+ "2540622b": i.value,
1528
+ "25398f45": l.value,
1529
+ fc452918: h.value
1530
+ }));
1531
+ const t = ae(), a = U("container"), { width: n } = q(a), s = g(() => {
1532
+ const u = n.value, r = t.parts.length;
1533
+ return u < 640 || u < Te * r + Be ? 0 : u < Ce * r + Ee ? 1 : u < we * r + Pe ? 2 : 3;
1534
+ }), i = g(() => {
1535
+ switch (s.value) {
1536
+ case 0:
1537
+ return `${Ut}px ` + `${Ft}px `.repeat(t.parts.length);
1538
+ case 1:
1539
+ return `${qt}px`;
1540
+ case 2:
1541
+ return `${Wt}px`;
1542
+ default:
1543
+ return `${Ht}px`;
1544
+ }
1545
+ }), l = g(() => {
1546
+ switch (s.value) {
1547
+ case 0:
1548
+ return "100vw";
1549
+ case 1:
1550
+ return `${Te}px `.repeat(t.parts.length) + `${Be}px`;
1551
+ case 2:
1552
+ return `${Ce}px `.repeat(t.parts.length) + `${Ee}px`;
1553
+ default:
1554
+ return `${we}px `.repeat(t.parts.length) + `${Pe}px`;
1555
+ }
1556
+ }), h = g(() => {
1557
+ const u = [...t.parts.keys()];
1558
+ return s.value > 0 ? '"' + u.map((r) => "part" + r).join(" ") + ' controls"' : '"controls" ' + u.map((r) => '"part' + r + '"').join(" ");
1559
+ });
1560
+ return (u, r) => (y(), _("div", {
1561
+ class: "outer",
1562
+ ref_key: "container",
1563
+ ref: a
1564
+ }, [
1565
+ m("div", $t, [
1566
+ m("div", zt, [
1567
+ (y(!0), _(ve, null, fe(C(t).parts, (c, p) => (y(), _e(gt, {
1568
+ key: c.name,
1569
+ class: w("part" + p),
1570
+ name: c.name,
1571
+ volume: c.volume,
1572
+ "onUpdate:volume": (b) => c.volume = b,
1573
+ solo: c.solo,
1574
+ "onUpdate:solo": (b) => c.solo = b,
1575
+ mute: c.mute,
1576
+ "onUpdate:mute": (b) => c.mute = b,
1577
+ ref_for: !0,
1578
+ ref: "parts"
1579
+ }, null, 8, ["class", "name", "volume", "onUpdate:volume", "solo", "onUpdate:solo", "mute", "onUpdate:mute"]))), 128)),
1580
+ k(Dt, {
1581
+ title: C(t).title,
1582
+ class: "controls"
1583
+ }, null, 8, ["title"])
1584
+ ])
1585
+ ])
1586
+ ], 512));
1587
+ }
1588
+ }, ta = /* @__PURE__ */ L(jt, [["__scopeId", "data-v-03258471"]]), Gt = { class: "outer" }, Zt = { class: "mid" }, Kt = { class: "inner" }, Yt = {
1589
+ key: 0,
1590
+ class: "content"
1591
+ }, Qt = {
1592
+ __name: "Placeholder",
1593
+ props: {
1594
+ colour: {
1595
+ type: String,
1596
+ default: "red"
1597
+ },
1598
+ text: {
1599
+ type: String,
1600
+ default: ""
1601
+ }
1602
+ },
1603
+ setup(e) {
1604
+ return F((t) => ({
1605
+ "66bea586": e.colour
1606
+ })), (t, a) => (y(), _("div", Gt, [
1607
+ m("div", Zt, [
1608
+ m("div", Kt, [
1609
+ e.text || t.$slots.default ? (y(), _("div", Yt, [
1610
+ ye(I(e.text) + " ", 1),
1611
+ be(t.$slots, "default", {}, void 0, !0)
1612
+ ])) : pe("", !0)
1613
+ ])
1614
+ ])
1615
+ ]));
1616
+ }
1617
+ }, aa = /* @__PURE__ */ L(Qt, [["__scopeId", "data-v-dff76c48"]]);
1618
+ export {
1619
+ Y as AudioButton,
1620
+ le as AudioSlider,
1621
+ Ct as BarInput,
1622
+ ze as BaseNumericInput,
1623
+ he as DEV_MODE,
1624
+ ft as DummyAudioEngine,
1625
+ Dt as MixerControls,
1626
+ ta as MixerLayout,
1627
+ gt as PartControl,
1628
+ aa as Placeholder,
1629
+ Et as SpeedInput,
1630
+ Pt as TimeInput,
1631
+ De as TitleText,
1632
+ mt as TriState,
1633
+ $e as isDevFeature,
1634
+ ea as isDevMode,
1635
+ X as useAudioStateStore,
1636
+ q as useElementSize,
1637
+ ne as useMasterAudioControl,
1638
+ ae as useMusicDataStore,
1639
+ pt as usePlaybackStateStore
1640
+ };