@digitalmeadow/control-panel 1.0.18 → 1.0.20
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.
- package/README.md +40 -71
- package/dist/ControlPanel.d.ts +1 -2
- package/dist/ControlPanel.d.ts.map +1 -1
- package/dist/{stats.d.ts → Stats.d.ts} +1 -1
- package/dist/Stats.d.ts.map +1 -0
- package/dist/index.js +270 -231
- package/dist/index.umd.cjs +45 -6
- package/dist/styles.d.ts.map +1 -1
- package/package.json +3 -4
- package/dist/fonts/font.css +0 -19
- package/dist/index.css +0 -1
- package/dist/stats.d.ts.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
const W = `
|
|
1
|
+
const Y = new URL("data:font/woff2;base64,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", import.meta.url).href, Q = new URL("data:font/woff2;base64,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", import.meta.url).href, Z = `
|
|
2
|
+
@font-face {
|
|
3
|
+
font-family: "IosevkaTermNF";
|
|
4
|
+
src: url("${Y}") format("woff2");
|
|
5
|
+
font-weight: 400;
|
|
6
|
+
font-style: normal;
|
|
7
|
+
font-display: swap;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@font-face {
|
|
11
|
+
font-family: "IosevkaTermNF";
|
|
12
|
+
src: url("${Q}") format("woff2");
|
|
13
|
+
font-weight: 600;
|
|
14
|
+
font-style: normal;
|
|
15
|
+
font-display: swap;
|
|
16
|
+
}
|
|
17
|
+
|
|
2
18
|
.cp-root {
|
|
3
19
|
--cp-scale: 1;
|
|
4
20
|
|
|
@@ -148,6 +164,19 @@ const W = `
|
|
|
148
164
|
border-radius: var(--cp-border-radius);
|
|
149
165
|
font-family: inherit;
|
|
150
166
|
font-size: inherit;
|
|
167
|
+
appearance: textfield;
|
|
168
|
+
-moz-appearance: textfield;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.cp-input-number::-webkit-outer-spin-button,
|
|
172
|
+
.cp-input-number::-webkit-inner-spin-button {
|
|
173
|
+
-webkit-appearance: none;
|
|
174
|
+
margin: 0;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
.cp-input-number::-moz-number-spin-up,
|
|
178
|
+
.cp-input-number::-moz-number-spin-down {
|
|
179
|
+
display: none;
|
|
151
180
|
}
|
|
152
181
|
|
|
153
182
|
.cp-input-number:focus {
|
|
@@ -266,8 +295,11 @@ const W = `
|
|
|
266
295
|
}
|
|
267
296
|
.cp-input-range::-moz-range-thumb {
|
|
268
297
|
width: calc(4px * var(--cp-scale));
|
|
269
|
-
height: calc(
|
|
298
|
+
height: calc(8px * var(--cp-scale));
|
|
270
299
|
background: #fff;
|
|
300
|
+
border: none;
|
|
301
|
+
border-radius: var(--cp-border-radius);
|
|
302
|
+
appearance: none;
|
|
271
303
|
cursor: grab;
|
|
272
304
|
}
|
|
273
305
|
|
|
@@ -362,16 +394,23 @@ const W = `
|
|
|
362
394
|
.cp-input-color {
|
|
363
395
|
width: var(--cp-swatch-size);
|
|
364
396
|
height: var(--cp-swatch-size);
|
|
365
|
-
border: var(--cp-border-width) solid
|
|
397
|
+
border: var(--cp-border-width) solid #BBB;
|
|
366
398
|
border-radius: 50%;
|
|
399
|
+
appearance: none;
|
|
367
400
|
-webkit-appearance: none;
|
|
401
|
+
background: none;
|
|
402
|
+
padding: 0;
|
|
368
403
|
}
|
|
369
404
|
.cp-input-color::-webkit-color-swatch-wrapper {
|
|
370
405
|
padding: 0;
|
|
371
406
|
}
|
|
372
407
|
.cp-input-color::-webkit-color-swatch {
|
|
373
|
-
border:
|
|
374
|
-
border-radius:
|
|
408
|
+
border: 1px solid var(--cp-color-1);
|
|
409
|
+
border-radius: 50%;
|
|
410
|
+
}
|
|
411
|
+
.cp-input-color::-moz-color-swatch {
|
|
412
|
+
border: 1px solid var(--cp-color-1);
|
|
413
|
+
border-radius: 50%;
|
|
375
414
|
}
|
|
376
415
|
|
|
377
416
|
.cp-color-swatch {
|
|
@@ -386,13 +425,13 @@ const W = `
|
|
|
386
425
|
gap: var(--cp-space-2);
|
|
387
426
|
}
|
|
388
427
|
`;
|
|
389
|
-
let
|
|
390
|
-
function
|
|
391
|
-
if (
|
|
428
|
+
let P = !1;
|
|
429
|
+
function K() {
|
|
430
|
+
if (P) return;
|
|
392
431
|
const n = document.createElement("style");
|
|
393
|
-
n.id = "control-panel-styles", n.textContent =
|
|
432
|
+
n.id = "control-panel-styles", n.textContent = Z, document.head.appendChild(n), P = !0;
|
|
394
433
|
}
|
|
395
|
-
function
|
|
434
|
+
function r(n, t = {}, e = []) {
|
|
396
435
|
const s = document.createElement(n);
|
|
397
436
|
for (const [i, a] of Object.entries(t))
|
|
398
437
|
i === "className" ? s.className = String(a) : i === "style" && typeof a == "object" ? Object.assign(s.style, a) : i === "open" && typeof a == "boolean" ? a ? s.setAttribute("open", "") : s.removeAttribute("open") : typeof a != "object" && s.setAttribute(i, String(a));
|
|
@@ -400,8 +439,8 @@ function o(n, t = {}, e = []) {
|
|
|
400
439
|
typeof i == "string" ? s.appendChild(document.createTextNode(i)) : s.appendChild(i);
|
|
401
440
|
return s;
|
|
402
441
|
}
|
|
403
|
-
function
|
|
404
|
-
const t =
|
|
442
|
+
function X(n) {
|
|
443
|
+
const t = r(
|
|
405
444
|
"button",
|
|
406
445
|
{
|
|
407
446
|
className: "cp-button cp-button-delete"
|
|
@@ -410,13 +449,13 @@ function j(n) {
|
|
|
410
449
|
);
|
|
411
450
|
return t.addEventListener("click", n), t;
|
|
412
451
|
}
|
|
413
|
-
function
|
|
452
|
+
function U(n) {
|
|
414
453
|
return n.replace(/([A-Z])/g, " $1").replace(/^./, (t) => t.toUpperCase()).trim();
|
|
415
454
|
}
|
|
416
|
-
function
|
|
455
|
+
function R(n, t, e) {
|
|
417
456
|
return Math.min(Math.max(n, t), e);
|
|
418
457
|
}
|
|
419
|
-
function
|
|
458
|
+
function H(n, t, e) {
|
|
420
459
|
if (t.length !== e.length)
|
|
421
460
|
throw new Error("Input and output ranges must have the same length");
|
|
422
461
|
if (t.length < 2)
|
|
@@ -428,10 +467,10 @@ function Y(n, t, e) {
|
|
|
428
467
|
return e[e.length - 1];
|
|
429
468
|
if (s === 0 && n < t[0])
|
|
430
469
|
return e[0];
|
|
431
|
-
const i = t[s], a = t[s + 1],
|
|
432
|
-
return (n - i) / (a - i) * (l -
|
|
470
|
+
const i = t[s], a = t[s + 1], o = e[s], l = e[s + 1];
|
|
471
|
+
return (n - i) / (a - i) * (l - o) + o;
|
|
433
472
|
}
|
|
434
|
-
class
|
|
473
|
+
class G {
|
|
435
474
|
constructor() {
|
|
436
475
|
this.source = null, this.stream = null, this.fftSize = 2048, this.smoothingTimeConstant = 0.82, this.spectrumBoost = 3, this.levels = {
|
|
437
476
|
volume: 0,
|
|
@@ -471,16 +510,16 @@ class X {
|
|
|
471
510
|
if (this.analyser.getByteFrequencyData(this.dataArray), this.analyser.getByteTimeDomainData(this.waveformArray), this.spectrumBoost !== 1) {
|
|
472
511
|
const p = this.dataArray.length;
|
|
473
512
|
for (let h = 0; h < p; h++) {
|
|
474
|
-
const
|
|
475
|
-
this.dataArray[h] = Math.min(255, this.dataArray[h] *
|
|
513
|
+
const b = 1 + h / p * (this.spectrumBoost - 1);
|
|
514
|
+
this.dataArray[h] = Math.min(255, this.dataArray[h] * b);
|
|
476
515
|
}
|
|
477
516
|
}
|
|
478
|
-
const t = [2, 10], e = [10, 150], s = [150, 600], i = this.getAverage(t[0], t[1]), a = this.getAverage(e[0], e[1]),
|
|
479
|
-
this.processLevel("bass", i), this.processLevel("mids", a), this.processLevel("highs",
|
|
517
|
+
const t = [2, 10], e = [10, 150], s = [150, 600], i = this.getAverage(t[0], t[1]), a = this.getAverage(e[0], e[1]), o = this.getAverage(s[0], s[1]), l = this.getAverage(0, s[1]);
|
|
518
|
+
this.processLevel("bass", i), this.processLevel("mids", a), this.processLevel("highs", o), this.processLevel("volume", l);
|
|
480
519
|
}
|
|
481
520
|
processLevel(t, e) {
|
|
482
|
-
this.peaks[t] -= 5e-4, this.peaks[t] =
|
|
483
|
-
|
|
521
|
+
this.peaks[t] -= 5e-4, this.peaks[t] = R(this.peaks[t], 0.1, 1), e > this.peaks[t] && (this.peaks[t] = e), this.levels[t] = R(
|
|
522
|
+
H(e, [0, this.peaks[t]], [0, 1]),
|
|
484
523
|
0,
|
|
485
524
|
1
|
|
486
525
|
);
|
|
@@ -497,8 +536,8 @@ class X {
|
|
|
497
536
|
return () => this.levels[t];
|
|
498
537
|
}
|
|
499
538
|
}
|
|
500
|
-
const
|
|
501
|
-
class
|
|
539
|
+
const q = new G();
|
|
540
|
+
class $ {
|
|
502
541
|
constructor() {
|
|
503
542
|
this.midiAccess = null, this.values = /* @__PURE__ */ new Map(), this.isListening = !1, this.resolveListen = null, this.listeningCallback = null, this.init();
|
|
504
543
|
}
|
|
@@ -521,11 +560,11 @@ class G {
|
|
|
521
560
|
handleMessage(t) {
|
|
522
561
|
const e = t.data, [s] = e;
|
|
523
562
|
if ((s & 240) >= 240) return;
|
|
524
|
-
const a = this.getIdFromMessage(t),
|
|
525
|
-
this.values.set(a,
|
|
563
|
+
const a = this.getIdFromMessage(t), o = this.normalizeValue(e);
|
|
564
|
+
this.values.set(a, o), this.isListening && this.resolveListen && o > 0 && (this.resolveListen(a), this.isListening = !1, this.resolveListen = null, this.listeningCallback && this.listeningCallback());
|
|
526
565
|
}
|
|
527
566
|
getIdFromMessage(t) {
|
|
528
|
-
const e = t.data, [s, i] = e, a = s & 240,
|
|
567
|
+
const e = t.data, [s, i] = e, a = s & 240, o = t.currentTarget.name || "unknown", l = a === 144 || a === 128 ? "note" : "ctrl", p = o.replace(/[^a-zA-Z0-9]/g, "");
|
|
529
568
|
return `${i}_${l}_${p}`;
|
|
530
569
|
}
|
|
531
570
|
normalizeValue(t) {
|
|
@@ -544,8 +583,8 @@ class G {
|
|
|
544
583
|
return () => this.values.get(t) ?? 0;
|
|
545
584
|
}
|
|
546
585
|
}
|
|
547
|
-
const
|
|
548
|
-
class
|
|
586
|
+
const _ = new $();
|
|
587
|
+
class tt {
|
|
549
588
|
constructor() {
|
|
550
589
|
this.configs = /* @__PURE__ */ new Map(), this.lastRandomUpdateTime = 0, this.currentRandomValue = 0, this.startTime = performance.now(), this.configs.set("constant", {
|
|
551
590
|
frequency: 0.1,
|
|
@@ -600,20 +639,20 @@ class K {
|
|
|
600
639
|
return this.normalizeOutput(i, e);
|
|
601
640
|
}
|
|
602
641
|
sine(t) {
|
|
603
|
-
const e = t ? { ...this.configs.get("sine"), ...t } : this.configs.get("sine"), s = this.getTime(), i = e.phase * Math.PI * 2,
|
|
604
|
-
return this.normalizeOutput(
|
|
642
|
+
const e = t ? { ...this.configs.get("sine"), ...t } : this.configs.get("sine"), s = this.getTime(), i = e.phase * Math.PI * 2, o = (Math.sin(s * e.frequency * Math.PI * 2 + i) + 1) / 2;
|
|
643
|
+
return this.normalizeOutput(o, e);
|
|
605
644
|
}
|
|
606
645
|
sawtooth(t) {
|
|
607
646
|
const e = t ? { ...this.configs.get("sawtooth"), ...t } : this.configs.get("sawtooth"), s = this.getTime(), i = e.phase, a = (s * e.frequency + i) % 1 + i % 1;
|
|
608
647
|
return this.normalizeOutput(a % 1, e);
|
|
609
648
|
}
|
|
610
649
|
triangle(t) {
|
|
611
|
-
const e = t ? { ...this.configs.get("triangle"), ...t } : this.configs.get("triangle"), s = this.getTime(), i = e.phase, a = (s * e.frequency + i) % 1,
|
|
612
|
-
return this.normalizeOutput(
|
|
650
|
+
const e = t ? { ...this.configs.get("triangle"), ...t } : this.configs.get("triangle"), s = this.getTime(), i = e.phase, a = (s * e.frequency + i) % 1, o = a < 0.5 ? a * 2 : 2 - a * 2;
|
|
651
|
+
return this.normalizeOutput(o, e);
|
|
613
652
|
}
|
|
614
653
|
square(t) {
|
|
615
|
-
const e = t ? { ...this.configs.get("square"), ...t } : this.configs.get("square"), s = this.getTime(), i = e.phase,
|
|
616
|
-
return this.normalizeOutput(
|
|
654
|
+
const e = t ? { ...this.configs.get("square"), ...t } : this.configs.get("square"), s = this.getTime(), i = e.phase, o = (s * e.frequency + i) % 1 < 0.5 ? 0 : 1;
|
|
655
|
+
return this.normalizeOutput(o, e);
|
|
617
656
|
}
|
|
618
657
|
random(t) {
|
|
619
658
|
const e = t ? { ...this.configs.get("random"), ...t } : this.configs.get("random"), s = performance.now(), i = 1e3 / e.frequency;
|
|
@@ -639,10 +678,10 @@ class K {
|
|
|
639
678
|
this.startTime = performance.now(), this.lastRandomUpdateTime = 0, this.currentRandomValue = 0;
|
|
640
679
|
}
|
|
641
680
|
}
|
|
642
|
-
const
|
|
681
|
+
const et = new tt(), F = class F {
|
|
643
682
|
constructor(t, e, s = {}) {
|
|
644
|
-
this.changeFns = /* @__PURE__ */ new Set(), this.object = t, this.property = e, this.key = s.id ?? e, this.initialValue = this.object[this.property], this.domElement =
|
|
645
|
-
const i = s.label ??
|
|
683
|
+
this.changeFns = /* @__PURE__ */ new Set(), this.object = t, this.property = e, this.key = s.id ?? e, this.initialValue = this.object[this.property], this.domElement = r("div", { className: "cp-controller" });
|
|
684
|
+
const i = s.label ?? U(e), a = r("label", { className: "cp-label" }, [
|
|
646
685
|
String(i)
|
|
647
686
|
]);
|
|
648
687
|
a.setAttribute("title", String(i)), this.domElement.appendChild(a), s.disabled && this.domElement.setAttribute("data-disabled", "true");
|
|
@@ -673,11 +712,11 @@ const Q = new K(), A = class A {
|
|
|
673
712
|
this.domElement.appendChild(t);
|
|
674
713
|
}
|
|
675
714
|
};
|
|
676
|
-
|
|
677
|
-
let u =
|
|
678
|
-
class
|
|
715
|
+
F.audio = q, F.midi = _, F.math = et;
|
|
716
|
+
let u = F;
|
|
717
|
+
class st extends u {
|
|
679
718
|
constructor(t, e, s = {}) {
|
|
680
|
-
super(t, e, s), this.input =
|
|
719
|
+
super(t, e, s), this.input = r("input", {
|
|
681
720
|
type: "number",
|
|
682
721
|
className: "cp-input-number",
|
|
683
722
|
value: String(this.value)
|
|
@@ -693,7 +732,7 @@ class tt extends u {
|
|
|
693
732
|
this.input.value = String(this.value);
|
|
694
733
|
}
|
|
695
734
|
}
|
|
696
|
-
const
|
|
735
|
+
const z = {
|
|
697
736
|
linear: (n) => n,
|
|
698
737
|
quadIn: (n) => n * n,
|
|
699
738
|
quadOut: (n) => n * (2 - n),
|
|
@@ -708,7 +747,7 @@ const R = {
|
|
|
708
747
|
sineOut: (n) => Math.sin(n * Math.PI / 2),
|
|
709
748
|
sineInOut: (n) => -(Math.cos(Math.PI * n) - 1) / 2
|
|
710
749
|
};
|
|
711
|
-
class
|
|
750
|
+
class W {
|
|
712
751
|
constructor(t) {
|
|
713
752
|
this.rafId = null, this.currentSignalType = null, this.currentMidiId = null, this.currentEase = "linear", this.currentBehaviour = "forward", this.loop = () => {
|
|
714
753
|
if (this.currentSignalType) {
|
|
@@ -725,7 +764,7 @@ class H {
|
|
|
725
764
|
)() : ["volume", "bass", "mids", "highs"].includes(this.currentSignalType) && (e = u.audio.getSignal(
|
|
726
765
|
this.currentSignalType
|
|
727
766
|
)());
|
|
728
|
-
const s =
|
|
767
|
+
const s = z[this.currentEase](e);
|
|
729
768
|
this.onChange(s, this.currentBehaviour), this.rafId = requestAnimationFrame(this.loop);
|
|
730
769
|
}
|
|
731
770
|
}, this.onChange = t.onChange, this.setupControllers(t.container);
|
|
@@ -749,16 +788,16 @@ class H {
|
|
|
749
788
|
],
|
|
750
789
|
(l) => this.setSignalType(l)
|
|
751
790
|
);
|
|
752
|
-
this.signalSelect = e.select, t.appendChild(e.row), this.midiRow =
|
|
791
|
+
this.signalSelect = e.select, t.appendChild(e.row), this.midiRow = r("div", {
|
|
753
792
|
className: "cp-setting-row",
|
|
754
793
|
style: "display: none;"
|
|
755
794
|
});
|
|
756
|
-
const s =
|
|
795
|
+
const s = r(
|
|
757
796
|
"label",
|
|
758
797
|
{ className: "cp-setting-label" },
|
|
759
798
|
["Midi"]
|
|
760
799
|
);
|
|
761
|
-
this.midiBtn =
|
|
800
|
+
this.midiBtn = r(
|
|
762
801
|
"button",
|
|
763
802
|
{ className: "cp-button cp-input-small" },
|
|
764
803
|
["Learn"]
|
|
@@ -770,7 +809,7 @@ class H {
|
|
|
770
809
|
this.midiBtn.textContent = "Listening...";
|
|
771
810
|
const l = await u.midi.listen();
|
|
772
811
|
this.setMidiId(l);
|
|
773
|
-
}), this.midiRow.appendChild(s), this.midiRow.appendChild(this.midiBtn), t.appendChild(this.midiRow), this.mathParamsContainer =
|
|
812
|
+
}), this.midiRow.appendChild(s), this.midiRow.appendChild(this.midiBtn), t.appendChild(this.midiRow), this.mathParamsContainer = r("div", {
|
|
774
813
|
className: "cp-number-settings"
|
|
775
814
|
}), t.appendChild(this.mathParamsContainer);
|
|
776
815
|
const i = this.createSettingSelect(
|
|
@@ -781,28 +820,28 @@ class H {
|
|
|
781
820
|
this.behaviourRow = i.row, this.behaviourSelect = i.select, this.behaviourRow.style.display = "none", this.behaviourSelect.value = this.currentBehaviour, t.appendChild(this.behaviourRow);
|
|
782
821
|
const a = this.createSettingSelect(
|
|
783
822
|
"ease",
|
|
784
|
-
Object.keys(
|
|
823
|
+
Object.keys(z),
|
|
785
824
|
(l) => this.setEase(l)
|
|
786
825
|
);
|
|
787
826
|
this.easeRow = a.row, this.easeSelect = a.select, this.easeRow.style.display = "none", this.easeSelect.value = this.currentEase, t.appendChild(this.easeRow);
|
|
788
|
-
const
|
|
789
|
-
t.appendChild(
|
|
827
|
+
const o = r("hr", { className: "cp-separator" });
|
|
828
|
+
t.appendChild(o);
|
|
790
829
|
}
|
|
791
830
|
createSettingSelect(t, e, s) {
|
|
792
|
-
const i =
|
|
831
|
+
const i = r("div", { className: "cp-setting-row" }), a = r("label", { className: "cp-setting-label" }, [
|
|
793
832
|
t
|
|
794
|
-
]),
|
|
833
|
+
]), o = r("select", {
|
|
795
834
|
className: "cp-select cp-input-small"
|
|
796
835
|
});
|
|
797
836
|
return e.forEach((l) => {
|
|
798
|
-
const p =
|
|
799
|
-
|
|
800
|
-
}),
|
|
837
|
+
const p = r("option", { value: l }, [l]);
|
|
838
|
+
o.appendChild(p);
|
|
839
|
+
}), o.addEventListener("change", () => s(o.value)), i.appendChild(a), i.appendChild(o), { row: i, select: o };
|
|
801
840
|
}
|
|
802
|
-
createNumberInput(t, e, s, i, a,
|
|
803
|
-
const l =
|
|
841
|
+
createNumberInput(t, e, s, i, a, o) {
|
|
842
|
+
const l = r("div", { className: "cp-setting-row" }), p = r("label", { className: "cp-setting-label" }, [
|
|
804
843
|
t
|
|
805
|
-
]), h =
|
|
844
|
+
]), h = r("input", {
|
|
806
845
|
className: "cp-input-number cp-input-small",
|
|
807
846
|
type: "number",
|
|
808
847
|
value: String(e),
|
|
@@ -812,20 +851,20 @@ class H {
|
|
|
812
851
|
});
|
|
813
852
|
return h.addEventListener("input", () => {
|
|
814
853
|
const d = parseFloat(h.value);
|
|
815
|
-
isNaN(d) ||
|
|
854
|
+
isNaN(d) || o(d);
|
|
816
855
|
}), l.appendChild(p), l.appendChild(h), { row: l, input: h };
|
|
817
856
|
}
|
|
818
857
|
updateMathParams(t) {
|
|
819
858
|
this.mathParamsContainer.innerHTML = "";
|
|
820
859
|
const e = u.math.getConfig(t);
|
|
821
|
-
let s = "Frequency", i = 0.1, a = 10,
|
|
822
|
-
t === "random" ? a = 30 : t === "constant" && (s = "Speed", i = 0.01, a = 2,
|
|
860
|
+
let s = "Frequency", i = 0.1, a = 10, o = 0.1;
|
|
861
|
+
t === "random" ? a = 30 : t === "constant" && (s = "Speed", i = 0.01, a = 2, o = 0.01);
|
|
823
862
|
const l = this.createNumberInput(
|
|
824
863
|
s,
|
|
825
864
|
e.frequency,
|
|
826
865
|
i,
|
|
827
866
|
a,
|
|
828
|
-
|
|
867
|
+
o,
|
|
829
868
|
(d) => u.math.setConfig(t, { frequency: d })
|
|
830
869
|
);
|
|
831
870
|
this.mathParamsContainer.appendChild(l.row);
|
|
@@ -853,7 +892,7 @@ class H {
|
|
|
853
892
|
0,
|
|
854
893
|
1,
|
|
855
894
|
0.01,
|
|
856
|
-
(
|
|
895
|
+
(b) => u.math.setConfig(t, { phase: b })
|
|
857
896
|
);
|
|
858
897
|
this.mathParamsContainer.appendChild(d.row);
|
|
859
898
|
}
|
|
@@ -904,19 +943,19 @@ class H {
|
|
|
904
943
|
this.setSignalType("none"), this.setEase("linear"), this.setBehaviour("forward"), this.setMidiId(null);
|
|
905
944
|
}
|
|
906
945
|
}
|
|
907
|
-
class
|
|
946
|
+
class it extends u {
|
|
908
947
|
constructor(t, e, s = {}) {
|
|
909
948
|
super(t, e, s), this.pingPongDirection = 1, this.min = 0, this.max = 100, this.initialOptions = s, this.min = s.min ?? 0, this.max = s.max ?? 100;
|
|
910
|
-
const i =
|
|
949
|
+
const i = r("details", {
|
|
911
950
|
className: "cp-controller-details"
|
|
912
|
-
}), a =
|
|
951
|
+
}), a = r("summary", {
|
|
913
952
|
className: "cp-controller-summary"
|
|
914
953
|
});
|
|
915
|
-
this.input =
|
|
954
|
+
this.input = r("input", {
|
|
916
955
|
type: "range",
|
|
917
956
|
className: "cp-input-range",
|
|
918
957
|
step: s.step ?? "any"
|
|
919
|
-
}), s.min !== void 0 && (this.input.min = String(s.min)), s.max !== void 0 && (this.input.max = String(s.max)), this.input.value = String(this.value), this.display =
|
|
958
|
+
}), s.min !== void 0 && (this.input.min = String(s.min)), s.max !== void 0 && (this.input.max = String(s.max)), this.input.value = String(this.value), this.display = r(
|
|
920
959
|
"span",
|
|
921
960
|
{
|
|
922
961
|
className: "cp-value-display"
|
|
@@ -928,11 +967,11 @@ class et extends u {
|
|
|
928
967
|
}), this.input.addEventListener("click", (f) => {
|
|
929
968
|
f.stopPropagation();
|
|
930
969
|
});
|
|
931
|
-
const
|
|
970
|
+
const o = r("div", {
|
|
932
971
|
className: "cp-controller-summary-content"
|
|
933
972
|
});
|
|
934
|
-
|
|
935
|
-
const l =
|
|
973
|
+
o.appendChild(this.input), o.appendChild(this.display), a.appendChild(o), i.appendChild(a);
|
|
974
|
+
const l = r("div", { className: "cp-number-settings" }), p = this.createSetting(
|
|
936
975
|
"min",
|
|
937
976
|
s.min,
|
|
938
977
|
(f) => this.setMin(f)
|
|
@@ -950,10 +989,10 @@ class et extends u {
|
|
|
950
989
|
(f) => this.setStep(f)
|
|
951
990
|
);
|
|
952
991
|
this.stepInput = d.input, l.appendChild(d.row);
|
|
953
|
-
const
|
|
954
|
-
l.appendChild(
|
|
992
|
+
const b = r("hr", { className: "cp-separator" });
|
|
993
|
+
l.appendChild(b), this.signalHandler = new W({
|
|
955
994
|
container: l,
|
|
956
|
-
onChange: (f,
|
|
995
|
+
onChange: (f, y) => this.applySignal(f, y)
|
|
957
996
|
}), i.appendChild(l), this.appendWidget(i);
|
|
958
997
|
}
|
|
959
998
|
// Setters
|
|
@@ -987,14 +1026,14 @@ class et extends u {
|
|
|
987
1026
|
return i + Math.round((t - i) / s) * s;
|
|
988
1027
|
}
|
|
989
1028
|
createSetting(t, e, s) {
|
|
990
|
-
const i =
|
|
1029
|
+
const i = r("div", { className: "cp-setting-row" }), a = r("label", { className: "cp-setting-label" }, [
|
|
991
1030
|
t
|
|
992
|
-
]),
|
|
1031
|
+
]), o = r("input", {
|
|
993
1032
|
type: "number",
|
|
994
1033
|
className: "cp-input-number cp-input-small",
|
|
995
1034
|
step: "any"
|
|
996
1035
|
});
|
|
997
|
-
return e !== void 0 && (
|
|
1036
|
+
return e !== void 0 && (o.value = String(e)), o.addEventListener("input", () => s(o.value)), i.appendChild(a), i.appendChild(o), { row: i, input: o };
|
|
998
1037
|
}
|
|
999
1038
|
updateDisplay() {
|
|
1000
1039
|
this.input.value = String(this.value), this.display.textContent = String(this.value.toFixed(1));
|
|
@@ -1035,13 +1074,13 @@ class et extends u {
|
|
|
1035
1074
|
), this.setStep(this.initialOptions.step), this.signalHandler?.reset();
|
|
1036
1075
|
}
|
|
1037
1076
|
}
|
|
1038
|
-
class
|
|
1077
|
+
class nt extends u {
|
|
1039
1078
|
constructor(t, e, s) {
|
|
1040
|
-
super(t, e, s), this.optionValues = [], this.select =
|
|
1041
|
-
const
|
|
1079
|
+
super(t, e, s), this.optionValues = [], this.select = r("select", { className: "cp-select" }), this.optionValues = s.options || [], this.optionValues.forEach((i, a) => {
|
|
1080
|
+
const o = r("option", { value: String(a) }, [
|
|
1042
1081
|
String(i)
|
|
1043
1082
|
]);
|
|
1044
|
-
this.select.appendChild(
|
|
1083
|
+
this.select.appendChild(o);
|
|
1045
1084
|
}), this.updateDisplay(), this.select.addEventListener("change", () => {
|
|
1046
1085
|
const i = parseInt(this.select.value), a = this.optionValues[i];
|
|
1047
1086
|
this.setValue(a);
|
|
@@ -1049,7 +1088,7 @@ class st extends u {
|
|
|
1049
1088
|
}
|
|
1050
1089
|
setOptions(t) {
|
|
1051
1090
|
this.select.innerHTML = "", this.optionValues = t, this.optionValues.forEach((e, s) => {
|
|
1052
|
-
const i =
|
|
1091
|
+
const i = r("option", { value: String(s) }, [
|
|
1053
1092
|
String(e)
|
|
1054
1093
|
]);
|
|
1055
1094
|
this.select.appendChild(i);
|
|
@@ -1060,24 +1099,24 @@ class st extends u {
|
|
|
1060
1099
|
t !== -1 && (this.select.value = String(t));
|
|
1061
1100
|
}
|
|
1062
1101
|
}
|
|
1063
|
-
class
|
|
1102
|
+
class at extends u {
|
|
1064
1103
|
constructor(t, e, s = {}) {
|
|
1065
1104
|
const i = { action: e };
|
|
1066
1105
|
super(i, "action", s), this.domElement.querySelector(".cp-label")?.remove();
|
|
1067
1106
|
const a = s.label ?? t;
|
|
1068
|
-
this.button =
|
|
1107
|
+
this.button = r("button", { className: "cp-button" }, [
|
|
1069
1108
|
String(a)
|
|
1070
1109
|
]), this.button.addEventListener("click", () => {
|
|
1071
|
-
const
|
|
1072
|
-
typeof
|
|
1110
|
+
const o = this.value;
|
|
1111
|
+
typeof o == "function" && o(), this.emitChange(o);
|
|
1073
1112
|
}), this.appendWidget(this.button);
|
|
1074
1113
|
}
|
|
1075
1114
|
updateDisplay() {
|
|
1076
1115
|
}
|
|
1077
1116
|
}
|
|
1078
|
-
class
|
|
1117
|
+
class ot extends u {
|
|
1079
1118
|
constructor(t, e, s = {}) {
|
|
1080
|
-
super(t, e, s), this.input =
|
|
1119
|
+
super(t, e, s), this.input = r("input", {
|
|
1081
1120
|
type: "checkbox",
|
|
1082
1121
|
className: "cp-checkbox"
|
|
1083
1122
|
}), this.input.checked = this.value, this.input.addEventListener("change", () => {
|
|
@@ -1088,10 +1127,10 @@ class nt extends u {
|
|
|
1088
1127
|
this.input.checked = this.value;
|
|
1089
1128
|
}
|
|
1090
1129
|
}
|
|
1091
|
-
class
|
|
1130
|
+
class rt extends u {
|
|
1092
1131
|
constructor(t, e, s) {
|
|
1093
|
-
super(t, e, s), this.buttons = [], this.optionValues = [], this.container =
|
|
1094
|
-
const a =
|
|
1132
|
+
super(t, e, s), this.buttons = [], this.optionValues = [], this.container = r("div", { className: "cp-radios" }), this.optionValues = s.options || [], this.optionValues.forEach((i) => {
|
|
1133
|
+
const a = r("button", { className: "cp-button cp-radio" }, [
|
|
1095
1134
|
String(i)
|
|
1096
1135
|
]);
|
|
1097
1136
|
a.addEventListener("click", () => {
|
|
@@ -1106,9 +1145,9 @@ class at extends u {
|
|
|
1106
1145
|
});
|
|
1107
1146
|
}
|
|
1108
1147
|
}
|
|
1109
|
-
class
|
|
1148
|
+
class lt extends u {
|
|
1110
1149
|
constructor(t, e, s = {}) {
|
|
1111
|
-
super(t, e, s), this.input =
|
|
1150
|
+
super(t, e, s), this.input = r("input", {
|
|
1112
1151
|
type: "color",
|
|
1113
1152
|
className: "cp-input-color",
|
|
1114
1153
|
value: this.value || "#000000"
|
|
@@ -1121,9 +1160,9 @@ class rt extends u {
|
|
|
1121
1160
|
this.input.value = this.value;
|
|
1122
1161
|
}
|
|
1123
1162
|
}
|
|
1124
|
-
function
|
|
1163
|
+
function V(n) {
|
|
1125
1164
|
const t = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
|
|
1126
|
-
n = n.replace(t, (s, i, a,
|
|
1165
|
+
n = n.replace(t, (s, i, a, o) => i + i + a + a + o + o);
|
|
1127
1166
|
const e = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(n);
|
|
1128
1167
|
return e ? [
|
|
1129
1168
|
parseInt(e[1], 16),
|
|
@@ -1131,43 +1170,43 @@ function $(n) {
|
|
|
1131
1170
|
parseInt(e[3], 16)
|
|
1132
1171
|
] : [0, 0, 0];
|
|
1133
1172
|
}
|
|
1134
|
-
function
|
|
1173
|
+
function ct(n, t, e) {
|
|
1135
1174
|
return "#" + ((1 << 24) + (Math.round(n) << 16) + (Math.round(t) << 8) + Math.round(e)).toString(16).slice(1);
|
|
1136
1175
|
}
|
|
1137
|
-
function
|
|
1176
|
+
function I(n) {
|
|
1138
1177
|
const t = n / 255;
|
|
1139
1178
|
return t <= 0.04045 ? t / 12.92 : Math.pow((t + 0.055) / 1.055, 2.4);
|
|
1140
1179
|
}
|
|
1141
|
-
function
|
|
1180
|
+
function B(n) {
|
|
1142
1181
|
return n <= 31308e-7 ? n * 12.92 * 255 : (1.055 * Math.pow(n, 1 / 2.4) - 0.055) * 255;
|
|
1143
1182
|
}
|
|
1144
|
-
function
|
|
1145
|
-
const [s, i, a] =
|
|
1146
|
-
return
|
|
1183
|
+
function pt(n, t, e) {
|
|
1184
|
+
const [s, i, a] = V(n), [o, l, p] = V(t), h = I(s), d = I(i), b = I(a), f = I(o), y = I(l), x = I(p), g = h + e * (f - h), L = d + e * (y - d), w = b + e * (x - b), c = B(g), m = B(L), v = B(w);
|
|
1185
|
+
return ct(c, m, v);
|
|
1147
1186
|
}
|
|
1148
|
-
class
|
|
1187
|
+
class ht extends u {
|
|
1149
1188
|
constructor(t, e, s = {}) {
|
|
1150
1189
|
super(t, e, s), this.stops = [], this.pingPongDirection = 1, this.animationT = 0, this.manualPosition = 0, this.initialOptions = s, this.stops = s.stops || [
|
|
1151
1190
|
{ color: "#000000", position: 0 },
|
|
1152
1191
|
{ color: "#ffffff", position: 1 }
|
|
1153
1192
|
], this.sortStops();
|
|
1154
|
-
const i =
|
|
1193
|
+
const i = r("details", {
|
|
1155
1194
|
className: "cp-controller-details"
|
|
1156
|
-
}), a =
|
|
1195
|
+
}), a = r("summary", {
|
|
1157
1196
|
className: "cp-controller-summary"
|
|
1158
|
-
}),
|
|
1197
|
+
}), o = r("div", {
|
|
1159
1198
|
className: "cp-controller-summary-content"
|
|
1160
1199
|
});
|
|
1161
|
-
this.displayText =
|
|
1200
|
+
this.displayText = r(
|
|
1162
1201
|
"span",
|
|
1163
1202
|
{ className: "cp-value-display" },
|
|
1164
1203
|
[String(this.value)]
|
|
1165
|
-
),
|
|
1166
|
-
const l =
|
|
1167
|
-
this.stopsContainer =
|
|
1204
|
+
), o.appendChild(this.displayText), a.appendChild(o), i.appendChild(a);
|
|
1205
|
+
const l = r("div", { className: "cp-number-settings" });
|
|
1206
|
+
this.stopsContainer = r("div", {
|
|
1168
1207
|
className: "cp-stops-container"
|
|
1169
1208
|
}), this.renderStops(), l.appendChild(this.stopsContainer);
|
|
1170
|
-
const p =
|
|
1209
|
+
const p = r(
|
|
1171
1210
|
"button",
|
|
1172
1211
|
{
|
|
1173
1212
|
className: "cp-button"
|
|
@@ -1177,10 +1216,10 @@ class ct extends u {
|
|
|
1177
1216
|
p.addEventListener("click", () => {
|
|
1178
1217
|
this.stops.push({ color: "#ffffff", position: 0.5 }), this.sortStops(), this.renderStops(), this.updateOutput();
|
|
1179
1218
|
}), l.appendChild(p);
|
|
1180
|
-
const h =
|
|
1181
|
-
l.appendChild(h), this.signalHandler = new
|
|
1219
|
+
const h = r("hr", { className: "cp-separator" });
|
|
1220
|
+
l.appendChild(h), this.signalHandler = new W({
|
|
1182
1221
|
container: l,
|
|
1183
|
-
onChange: (d,
|
|
1222
|
+
onChange: (d, b) => this.applySignal(d, b)
|
|
1184
1223
|
}), i.appendChild(l), this.appendWidget(i), this.updateOutput(0);
|
|
1185
1224
|
}
|
|
1186
1225
|
sortStops() {
|
|
@@ -1188,7 +1227,7 @@ class ct extends u {
|
|
|
1188
1227
|
}
|
|
1189
1228
|
renderStops() {
|
|
1190
1229
|
this.stopsContainer.innerHTML = "", this.stops.forEach((t, e) => {
|
|
1191
|
-
const s =
|
|
1230
|
+
const s = r("div", { className: "cp-gradient-stop-row" }), i = r("input", {
|
|
1192
1231
|
type: "color",
|
|
1193
1232
|
className: "cp-input-color",
|
|
1194
1233
|
value: t.color
|
|
@@ -1196,7 +1235,7 @@ class ct extends u {
|
|
|
1196
1235
|
i.addEventListener("input", (l) => {
|
|
1197
1236
|
t.color = l.target.value, this.updateOutput();
|
|
1198
1237
|
});
|
|
1199
|
-
const a =
|
|
1238
|
+
const a = r("input", {
|
|
1200
1239
|
type: "number",
|
|
1201
1240
|
className: "cp-input-number cp-input-small",
|
|
1202
1241
|
min: "0",
|
|
@@ -1208,10 +1247,10 @@ class ct extends u {
|
|
|
1208
1247
|
let p = parseFloat(l.target.value);
|
|
1209
1248
|
isNaN(p) && (p = 0), t.position = Math.max(0, Math.min(1, p)), this.sortStops(), this.renderStops(), this.updateOutput();
|
|
1210
1249
|
});
|
|
1211
|
-
const
|
|
1250
|
+
const o = X(() => {
|
|
1212
1251
|
this.stops.splice(e, 1), this.renderStops(), this.updateOutput();
|
|
1213
1252
|
});
|
|
1214
|
-
s.appendChild(i), s.appendChild(a), s.appendChild(
|
|
1253
|
+
s.appendChild(i), s.appendChild(a), s.appendChild(o), this.stopsContainer.appendChild(s);
|
|
1215
1254
|
});
|
|
1216
1255
|
}
|
|
1217
1256
|
// Calculate color at t (0-1) and update value
|
|
@@ -1230,8 +1269,8 @@ class ct extends u {
|
|
|
1230
1269
|
for (let s = 0; s < this.stops.length - 1; s++) {
|
|
1231
1270
|
const i = this.stops[s], a = this.stops[s + 1];
|
|
1232
1271
|
if (t >= i.position && t <= a.position) {
|
|
1233
|
-
const
|
|
1234
|
-
e =
|
|
1272
|
+
const o = a.position - i.position, l = o === 0 ? 0 : (t - i.position) / o;
|
|
1273
|
+
e = pt(i.color, a.color, l);
|
|
1235
1274
|
break;
|
|
1236
1275
|
}
|
|
1237
1276
|
}
|
|
@@ -1270,24 +1309,24 @@ class ct extends u {
|
|
|
1270
1309
|
], this.sortStops(), this.renderStops(), this.signalHandler?.reset(), this.updateOutput(0);
|
|
1271
1310
|
}
|
|
1272
1311
|
}
|
|
1273
|
-
class
|
|
1312
|
+
class dt extends u {
|
|
1274
1313
|
constructor(t, e, s = {}) {
|
|
1275
1314
|
super(t, e, s), this.items = [], this.initialOptions = s, this.itemType = s.itemType || "string", this.items = this.parseValue(this.value);
|
|
1276
|
-
const i =
|
|
1315
|
+
const i = r("details", {
|
|
1277
1316
|
className: "cp-controller-details"
|
|
1278
|
-
}), a =
|
|
1317
|
+
}), a = r("summary", {
|
|
1279
1318
|
className: "cp-controller-summary"
|
|
1280
|
-
}),
|
|
1319
|
+
}), o = r("div", {
|
|
1281
1320
|
className: "cp-controller-summary-content"
|
|
1282
|
-
}), l =
|
|
1321
|
+
}), l = r("span", { className: "cp-value-display" }, [
|
|
1283
1322
|
`${this.items.length} items`
|
|
1284
1323
|
]);
|
|
1285
|
-
|
|
1286
|
-
const p =
|
|
1287
|
-
this.itemsContainer =
|
|
1324
|
+
o.appendChild(l), a.appendChild(o), i.appendChild(a);
|
|
1325
|
+
const p = r("div", { className: "cp-number-settings" });
|
|
1326
|
+
this.itemsContainer = r("div", {
|
|
1288
1327
|
className: "cp-stops-container"
|
|
1289
1328
|
}), this.renderItems(), p.appendChild(this.itemsContainer);
|
|
1290
|
-
const h =
|
|
1329
|
+
const h = r(
|
|
1291
1330
|
"button",
|
|
1292
1331
|
{
|
|
1293
1332
|
className: "cp-button cp-input-small",
|
|
@@ -1329,25 +1368,25 @@ class pt extends u {
|
|
|
1329
1368
|
}
|
|
1330
1369
|
renderItems() {
|
|
1331
1370
|
this.itemsContainer.innerHTML = "", this.items.forEach((t, e) => {
|
|
1332
|
-
const s =
|
|
1371
|
+
const s = r("div", { className: "cp-array-row" });
|
|
1333
1372
|
let i;
|
|
1334
|
-
this.itemType === "color" ? i =
|
|
1373
|
+
this.itemType === "color" ? i = r("input", {
|
|
1335
1374
|
type: "color",
|
|
1336
1375
|
className: "cp-input-color",
|
|
1337
1376
|
value: t
|
|
1338
|
-
}) : this.itemType === "number" ? i =
|
|
1377
|
+
}) : this.itemType === "number" ? i = r("input", {
|
|
1339
1378
|
type: "number",
|
|
1340
1379
|
className: "cp-input-number cp-input-small",
|
|
1341
1380
|
step: "any",
|
|
1342
1381
|
value: t
|
|
1343
|
-
}) : i =
|
|
1382
|
+
}) : i = r("input", {
|
|
1344
1383
|
type: "text",
|
|
1345
1384
|
className: "cp-input-number cp-input-small",
|
|
1346
1385
|
value: t
|
|
1347
|
-
}), i.addEventListener("input", (
|
|
1348
|
-
this.items[e] =
|
|
1386
|
+
}), i.addEventListener("input", (o) => {
|
|
1387
|
+
this.items[e] = o.target.value, this.updateValue();
|
|
1349
1388
|
});
|
|
1350
|
-
const a =
|
|
1389
|
+
const a = X(() => {
|
|
1351
1390
|
this.items.splice(e, 1), this.renderItems(), this.updateValue();
|
|
1352
1391
|
});
|
|
1353
1392
|
s.appendChild(i), s.appendChild(a), this.itemsContainer.appendChild(s);
|
|
@@ -1366,7 +1405,7 @@ class pt extends u {
|
|
|
1366
1405
|
this.items = this.parseValue(t), this.renderItems(), this.updateValue();
|
|
1367
1406
|
}
|
|
1368
1407
|
}
|
|
1369
|
-
class
|
|
1408
|
+
class ut {
|
|
1370
1409
|
constructor() {
|
|
1371
1410
|
this.frames = 0, this.pollingInterval = 1e3, this.prevTime = performance.now(), this.render = () => {
|
|
1372
1411
|
this.frames++;
|
|
@@ -1378,58 +1417,58 @@ class ht {
|
|
|
1378
1417
|
i && (s = ` / ${Math.round(i.usedJSHeapSize / 1048576)}MB`), this.domElement.textContent = `${e} FPS${s}`, this.prevTime = t, this.frames = 0;
|
|
1379
1418
|
}
|
|
1380
1419
|
this.rafId = requestAnimationFrame(this.render);
|
|
1381
|
-
}, this.domElement =
|
|
1420
|
+
}, this.domElement = r("span", { className: "cp-stats" }), this.rafId = requestAnimationFrame(this.render);
|
|
1382
1421
|
}
|
|
1383
1422
|
destroy() {
|
|
1384
1423
|
cancelAnimationFrame(this.rafId);
|
|
1385
1424
|
}
|
|
1386
1425
|
}
|
|
1387
|
-
class
|
|
1426
|
+
class J {
|
|
1388
1427
|
constructor() {
|
|
1389
1428
|
this.controllers = [], this.folders = [];
|
|
1390
1429
|
}
|
|
1391
1430
|
addNumber(t, e, s = {}) {
|
|
1392
|
-
const i = new
|
|
1431
|
+
const i = new st(t, e, s);
|
|
1393
1432
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1394
1433
|
}
|
|
1395
1434
|
addRange(t, e, s = {}) {
|
|
1396
|
-
const i = new
|
|
1435
|
+
const i = new it(t, e, s);
|
|
1397
1436
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1398
1437
|
}
|
|
1399
1438
|
addSelect(t, e, s = {}) {
|
|
1400
|
-
const i = new
|
|
1439
|
+
const i = new nt(t, e, s);
|
|
1401
1440
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1402
1441
|
}
|
|
1403
1442
|
addBoolean(t, e, s = {}) {
|
|
1404
|
-
const i = new
|
|
1443
|
+
const i = new ot(t, e, s);
|
|
1405
1444
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1406
1445
|
}
|
|
1407
1446
|
addButton(t, e, s = {}) {
|
|
1408
|
-
const i = new
|
|
1447
|
+
const i = new at(t, e, s);
|
|
1409
1448
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1410
1449
|
}
|
|
1411
1450
|
addRadio(t, e, s = {}) {
|
|
1412
|
-
const i = new
|
|
1451
|
+
const i = new rt(t, e, s);
|
|
1413
1452
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1414
1453
|
}
|
|
1415
1454
|
addColor(t, e, s = {}) {
|
|
1416
|
-
const i = new
|
|
1455
|
+
const i = new lt(t, e, s);
|
|
1417
1456
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1418
1457
|
}
|
|
1419
1458
|
addGradient(t, e, s = {}) {
|
|
1420
|
-
const i = new
|
|
1459
|
+
const i = new ht(t, e, s);
|
|
1421
1460
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1422
1461
|
}
|
|
1423
1462
|
addArray(t, e, s = {}) {
|
|
1424
|
-
const i = new
|
|
1463
|
+
const i = new dt(t, e, s);
|
|
1425
1464
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1426
1465
|
}
|
|
1427
1466
|
addFolder(t) {
|
|
1428
|
-
const e = new
|
|
1467
|
+
const e = new mt(t);
|
|
1429
1468
|
return this.addSeparator(), this.contentElement.appendChild(e.domElement), this.folders.push(e), e;
|
|
1430
1469
|
}
|
|
1431
1470
|
addSeparator() {
|
|
1432
|
-
const t =
|
|
1471
|
+
const t = r("hr", { className: "cp-separator" });
|
|
1433
1472
|
this.contentElement.appendChild(t);
|
|
1434
1473
|
}
|
|
1435
1474
|
save() {
|
|
@@ -1467,71 +1506,71 @@ class U {
|
|
|
1467
1506
|
t.reset();
|
|
1468
1507
|
}
|
|
1469
1508
|
}
|
|
1470
|
-
class
|
|
1509
|
+
class mt extends J {
|
|
1471
1510
|
constructor(t) {
|
|
1472
|
-
super(), this.title = t, this.domElement =
|
|
1511
|
+
super(), this.title = t, this.domElement = r("details", {
|
|
1473
1512
|
className: "cp-folder",
|
|
1474
1513
|
open: !0
|
|
1475
|
-
}), this.summaryElement =
|
|
1514
|
+
}), this.summaryElement = r(
|
|
1476
1515
|
"summary",
|
|
1477
1516
|
{
|
|
1478
1517
|
className: "cp-summary"
|
|
1479
1518
|
},
|
|
1480
1519
|
[t]
|
|
1481
|
-
), this.domElement.appendChild(this.summaryElement), this.contentElement =
|
|
1520
|
+
), this.domElement.appendChild(this.summaryElement), this.contentElement = r("div", {
|
|
1482
1521
|
className: "cp-content cp-folder-content"
|
|
1483
1522
|
}), this.domElement.appendChild(this.contentElement);
|
|
1484
1523
|
}
|
|
1485
1524
|
}
|
|
1486
|
-
class
|
|
1525
|
+
class gt extends J {
|
|
1487
1526
|
constructor(t, e = {}) {
|
|
1488
|
-
super(),
|
|
1527
|
+
super(), K(), this.domElement = r("details", {
|
|
1489
1528
|
className: "cp-root",
|
|
1490
1529
|
open: !0
|
|
1491
|
-
}), this.summaryElement =
|
|
1530
|
+
}), this.summaryElement = r("summary", {
|
|
1492
1531
|
className: "cp-summary cp-summary-root"
|
|
1493
1532
|
}), this.domElement.appendChild(this.summaryElement);
|
|
1494
|
-
const s =
|
|
1533
|
+
const s = r("span", {}, [
|
|
1495
1534
|
e.title || "ControlPanel"
|
|
1496
1535
|
]);
|
|
1497
|
-
this.summaryElement.appendChild(s), this.stats = new
|
|
1498
|
-
let i = !1, a = 0,
|
|
1536
|
+
this.summaryElement.appendChild(s), this.stats = new ut(), this.summaryElement.appendChild(this.stats.domElement);
|
|
1537
|
+
let i = !1, a = 0, o = 0, l = 0, p = 0;
|
|
1499
1538
|
this.summaryElement.addEventListener("mousedown", (c) => {
|
|
1500
1539
|
if (c.target !== this.summaryElement && c.target !== s) return;
|
|
1501
|
-
i = !0, a = c.clientX,
|
|
1540
|
+
i = !0, a = c.clientX, o = c.clientY;
|
|
1502
1541
|
const m = this.domElement.getBoundingClientRect();
|
|
1503
1542
|
l = m.left, p = m.top, c.preventDefault();
|
|
1504
1543
|
}), document.addEventListener("mousemove", (c) => {
|
|
1505
1544
|
if (!i) return;
|
|
1506
|
-
const m = c.clientX - a, v = c.clientY -
|
|
1507
|
-
this.domElement.style.left = `${
|
|
1545
|
+
const m = c.clientX - a, v = c.clientY - o, A = l + m, N = p + v;
|
|
1546
|
+
this.domElement.style.left = `${A}px`, this.domElement.style.top = `${N}px`, this.domElement.style.right = "auto", this.domElement.style.bottom = "auto";
|
|
1508
1547
|
}), document.addEventListener("mouseup", () => {
|
|
1509
1548
|
i && (i = !1, this.savePositionAndSize());
|
|
1510
1549
|
}), new ResizeObserver(() => {
|
|
1511
1550
|
i || this.savePositionAndSize();
|
|
1512
|
-
}).observe(this.domElement), this.restorePositionAndSize(), this.contentElement =
|
|
1513
|
-
const d = this.addFolder("_Signals"),
|
|
1551
|
+
}).observe(this.domElement), this.restorePositionAndSize(), this.contentElement = r("div", { className: "cp-content" }), this.domElement.appendChild(this.contentElement);
|
|
1552
|
+
const d = this.addFolder("_Signals"), b = {
|
|
1514
1553
|
audioInput: null,
|
|
1515
1554
|
fftSize: 2048
|
|
1516
1555
|
};
|
|
1517
|
-
d.addRadio(
|
|
1556
|
+
d.addRadio(b, "audioInput", {
|
|
1518
1557
|
label: "Audio Signal",
|
|
1519
1558
|
options: ["microphone", "browser"]
|
|
1520
1559
|
}).onChange((c) => {
|
|
1521
|
-
|
|
1522
|
-
}), d.addSelect(
|
|
1560
|
+
q.setInput(c);
|
|
1561
|
+
}), d.addSelect(b, "fftSize", {
|
|
1523
1562
|
label: "FFT Size",
|
|
1524
1563
|
options: [256, 512, 1024, 2048]
|
|
1525
1564
|
}).onChange((c) => {
|
|
1526
|
-
|
|
1527
|
-
}), d.addRange(
|
|
1565
|
+
q.setFFTSize(c);
|
|
1566
|
+
}), d.addRange(q, "smoothingTimeConstant", {
|
|
1528
1567
|
min: 0,
|
|
1529
1568
|
max: 0.99,
|
|
1530
1569
|
step: 0.01,
|
|
1531
1570
|
label: "Smoothing"
|
|
1532
1571
|
}).onChange((c) => {
|
|
1533
|
-
|
|
1534
|
-
}), d.addRange(
|
|
1572
|
+
q.analyser.smoothingTimeConstant = c;
|
|
1573
|
+
}), d.addRange(q, "spectrumBoost", {
|
|
1535
1574
|
min: 1,
|
|
1536
1575
|
max: 5,
|
|
1537
1576
|
step: 0.1,
|
|
@@ -1539,14 +1578,14 @@ class ut extends U {
|
|
|
1539
1578
|
}), t ? t.appendChild(this.domElement) : document.body.appendChild(this.domElement);
|
|
1540
1579
|
const f = e.title || "ControlPanel";
|
|
1541
1580
|
this.presetStoragePrefix = `cp-presets-${f}-`;
|
|
1542
|
-
const
|
|
1581
|
+
const y = this.addFolder("_User Presets"), x = () => {
|
|
1543
1582
|
const c = ["Default"];
|
|
1544
1583
|
if (typeof localStorage > "u") return c;
|
|
1545
1584
|
for (let m = 0; m < localStorage.length; m++) {
|
|
1546
1585
|
const v = localStorage.key(m);
|
|
1547
1586
|
if (v && v.startsWith(this.presetStoragePrefix)) {
|
|
1548
|
-
const
|
|
1549
|
-
|
|
1587
|
+
const A = v.substring(this.presetStoragePrefix.length);
|
|
1588
|
+
A !== "Default" && !c.includes(A) && c.push(A);
|
|
1550
1589
|
}
|
|
1551
1590
|
}
|
|
1552
1591
|
return c.sort();
|
|
@@ -1561,13 +1600,13 @@ class ut extends U {
|
|
|
1561
1600
|
}
|
|
1562
1601
|
const m = this.presetStoragePrefix + c;
|
|
1563
1602
|
this.saveToLocalStorage(m);
|
|
1564
|
-
const v =
|
|
1565
|
-
|
|
1603
|
+
const v = x();
|
|
1604
|
+
w.setOptions(v), g.selected = c, w.setValue(c);
|
|
1566
1605
|
}
|
|
1567
1606
|
},
|
|
1568
1607
|
load: () => {
|
|
1569
1608
|
const c = g.selected, m = this.presetStoragePrefix + c;
|
|
1570
|
-
this.loadFromLocalStorage(m), g.selected = c,
|
|
1609
|
+
this.loadFromLocalStorage(m), g.selected = c, w.setValue(c);
|
|
1571
1610
|
},
|
|
1572
1611
|
delete: () => {
|
|
1573
1612
|
if (g.selected === "Default") {
|
|
@@ -1577,74 +1616,74 @@ class ut extends U {
|
|
|
1577
1616
|
if (confirm(`Delete preset "${g.selected}"?`)) {
|
|
1578
1617
|
const c = this.presetStoragePrefix + g.selected;
|
|
1579
1618
|
localStorage.removeItem(c);
|
|
1580
|
-
const m =
|
|
1581
|
-
|
|
1619
|
+
const m = x();
|
|
1620
|
+
w.setOptions(m), g.selected = "Default", w.setValue("Default"), this.reset();
|
|
1582
1621
|
}
|
|
1583
1622
|
},
|
|
1584
1623
|
export: () => {
|
|
1585
|
-
const c = this.save(), m = (
|
|
1586
|
-
const
|
|
1624
|
+
const c = this.save(), m = (O) => {
|
|
1625
|
+
const M = {
|
|
1587
1626
|
controllers: {},
|
|
1588
1627
|
folders: {}
|
|
1589
1628
|
};
|
|
1590
|
-
for (const [
|
|
1591
|
-
|
|
1592
|
-
for (const [
|
|
1593
|
-
|
|
1629
|
+
for (const [k, j] of Object.entries(O.controllers))
|
|
1630
|
+
k.startsWith("_") || (M.controllers[k] = j);
|
|
1631
|
+
for (const [k, j] of Object.entries(
|
|
1632
|
+
O.folders
|
|
1594
1633
|
))
|
|
1595
|
-
|
|
1596
|
-
return
|
|
1597
|
-
}, v = m(c),
|
|
1634
|
+
k.startsWith("_") || (M.folders[k] = m(j));
|
|
1635
|
+
return M;
|
|
1636
|
+
}, v = m(c), A = {
|
|
1598
1637
|
_presetName: g.selected || "CustomPreset",
|
|
1599
1638
|
_exportDate: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1600
1639
|
_instructions: "To add as factory preset: Copy 'controllers' and 'folders' fields into the presets.json file",
|
|
1601
1640
|
...v
|
|
1602
|
-
},
|
|
1603
|
-
|
|
1604
|
-
const
|
|
1605
|
-
|
|
1641
|
+
}, N = JSON.stringify(A, null, 2), C = new Blob([N], { type: "application/json" }), E = URL.createObjectURL(C), S = document.createElement("a");
|
|
1642
|
+
S.href = E;
|
|
1643
|
+
const T = (/* @__PURE__ */ new Date()).toISOString().split("T")[0], D = g.selected.replace(/[^a-z0-9]/gi, "-").toLowerCase();
|
|
1644
|
+
S.download = `${f.toLowerCase()}-preset-${D}-${T}.json`, document.body.appendChild(S), S.click(), document.body.removeChild(S), URL.revokeObjectURL(E);
|
|
1606
1645
|
},
|
|
1607
1646
|
import: () => {
|
|
1608
1647
|
const c = document.createElement("input");
|
|
1609
1648
|
c.type = "file", c.accept = ".json", c.onchange = (m) => {
|
|
1610
1649
|
const v = m.target.files?.[0];
|
|
1611
1650
|
if (!v) return;
|
|
1612
|
-
const
|
|
1613
|
-
|
|
1651
|
+
const A = new FileReader();
|
|
1652
|
+
A.onload = (N) => {
|
|
1614
1653
|
try {
|
|
1615
|
-
const C =
|
|
1616
|
-
controllers:
|
|
1617
|
-
folders:
|
|
1654
|
+
const C = N.target?.result, E = JSON.parse(C), S = {
|
|
1655
|
+
controllers: E.controllers || {},
|
|
1656
|
+
folders: E.folders || {}
|
|
1618
1657
|
};
|
|
1619
|
-
if (!
|
|
1658
|
+
if (!S.controllers || !S.folders) {
|
|
1620
1659
|
alert(
|
|
1621
1660
|
"Invalid preset file: missing 'controllers' or 'folders'"
|
|
1622
1661
|
);
|
|
1623
1662
|
return;
|
|
1624
1663
|
}
|
|
1625
|
-
this.load(
|
|
1626
|
-
const
|
|
1664
|
+
this.load(S);
|
|
1665
|
+
const T = E._presetName || "ImportedPreset";
|
|
1627
1666
|
if (confirm(
|
|
1628
|
-
`Preset loaded! Save as "${
|
|
1667
|
+
`Preset loaded! Save as "${T}" to User Presets?`
|
|
1629
1668
|
)) {
|
|
1630
|
-
const
|
|
1631
|
-
this.saveToLocalStorage(
|
|
1632
|
-
const
|
|
1633
|
-
|
|
1669
|
+
const O = this.presetStoragePrefix + T;
|
|
1670
|
+
this.saveToLocalStorage(O);
|
|
1671
|
+
const M = x();
|
|
1672
|
+
w.setOptions(M), g.selected = T, w.setValue(T);
|
|
1634
1673
|
}
|
|
1635
1674
|
} catch (C) {
|
|
1636
1675
|
alert(
|
|
1637
1676
|
`Failed to import preset: ${C instanceof Error ? C.message : "Invalid JSON"}`
|
|
1638
1677
|
), console.error("Import error:", C);
|
|
1639
1678
|
}
|
|
1640
|
-
},
|
|
1679
|
+
}, A.readAsText(v);
|
|
1641
1680
|
}, c.click();
|
|
1642
1681
|
}
|
|
1643
|
-
},
|
|
1682
|
+
}, L = x(), w = y.addSelect(g, "selected", {
|
|
1644
1683
|
label: "Preset",
|
|
1645
|
-
options:
|
|
1684
|
+
options: L
|
|
1646
1685
|
});
|
|
1647
|
-
|
|
1686
|
+
y.addButton("Load", () => g.load()), y.addButton("Save", () => g.save()), y.addButton("Delete", () => g.delete()), y.addButton("Export", () => g.export()), y.addButton("Import", () => g.import());
|
|
1648
1687
|
}
|
|
1649
1688
|
saveToLocalStorage(t) {
|
|
1650
1689
|
const e = this.save();
|
|
@@ -1699,23 +1738,23 @@ class ut extends U {
|
|
|
1699
1738
|
}
|
|
1700
1739
|
}
|
|
1701
1740
|
export {
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1741
|
+
dt as ArrayController,
|
|
1742
|
+
G as AudioSignals,
|
|
1743
|
+
ot as BooleanController,
|
|
1744
|
+
at as ButtonController,
|
|
1745
|
+
lt as ColorController,
|
|
1746
|
+
gt as ControlPanel,
|
|
1747
|
+
J as ControlPanelContainer,
|
|
1709
1748
|
u as Controller,
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1749
|
+
mt as Folder,
|
|
1750
|
+
ht as GradientController,
|
|
1751
|
+
tt as MathSignals,
|
|
1752
|
+
$ as MidiSignals,
|
|
1753
|
+
st as NumberController,
|
|
1754
|
+
rt as RadioController,
|
|
1755
|
+
it as RangeController,
|
|
1756
|
+
nt as SelectController,
|
|
1757
|
+
q as audioSignals,
|
|
1758
|
+
et as mathSignals,
|
|
1759
|
+
_ as midiSignals
|
|
1721
1760
|
};
|