@digitalmeadow/control-panel 1.0.19 → 1.0.21
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 -1
- 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 +185 -163
- package/dist/index.umd.cjs +33 -14
- package/dist/styles.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/stats.d.ts.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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
2
|
@font-face {
|
|
3
3
|
font-family: "IosevkaTermNF";
|
|
4
|
-
src: url("
|
|
4
|
+
src: url("${Y}") format("woff2");
|
|
5
5
|
font-weight: 400;
|
|
6
6
|
font-style: normal;
|
|
7
7
|
font-display: swap;
|
|
@@ -9,12 +9,12 @@ const W = `
|
|
|
9
9
|
|
|
10
10
|
@font-face {
|
|
11
11
|
font-family: "IosevkaTermNF";
|
|
12
|
-
src: url("
|
|
12
|
+
src: url("${Q}") format("woff2");
|
|
13
13
|
font-weight: 600;
|
|
14
14
|
font-style: normal;
|
|
15
15
|
font-display: swap;
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
.cp-root {
|
|
19
19
|
--cp-scale: 1;
|
|
20
20
|
|
|
@@ -26,7 +26,6 @@ const W = `
|
|
|
26
26
|
|
|
27
27
|
--cp-border-width: calc(1px * var(--cp-scale));
|
|
28
28
|
|
|
29
|
-
--cp-font-family: "IosevkaTermNF";
|
|
30
29
|
--cp-font-size-main: calc(10px * var(--cp-scale));
|
|
31
30
|
--cp-font-size-details: calc(10px * var(--cp-scale));
|
|
32
31
|
|
|
@@ -65,9 +64,6 @@ const W = `
|
|
|
65
64
|
sans-serif;
|
|
66
65
|
font-size: var(--cp-font-size-main);
|
|
67
66
|
line-height: 1.1;
|
|
68
|
-
|
|
69
|
-
-webkit-font-smoothing: antialiased
|
|
70
|
-
font-synthesis: none;
|
|
71
67
|
}
|
|
72
68
|
|
|
73
69
|
/* Apply blend mode to selected children except color inputs */
|
|
@@ -168,6 +164,19 @@ const W = `
|
|
|
168
164
|
border-radius: var(--cp-border-radius);
|
|
169
165
|
font-family: inherit;
|
|
170
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;
|
|
171
180
|
}
|
|
172
181
|
|
|
173
182
|
.cp-input-number:focus {
|
|
@@ -218,7 +227,7 @@ const W = `
|
|
|
218
227
|
|
|
219
228
|
.cp-checkbox:checked {
|
|
220
229
|
background: transparent;
|
|
221
|
-
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='
|
|
230
|
+
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='var(--cp-swatch-size)' height='var(--cp-swatch-size)' viewBox='0 0 8 8'%3E%3Ccircle cx='4' cy='4' r='2' fill='%23fff'/%3E%3C/svg%3E");
|
|
222
231
|
}
|
|
223
232
|
|
|
224
233
|
.cp-button {
|
|
@@ -286,8 +295,11 @@ const W = `
|
|
|
286
295
|
}
|
|
287
296
|
.cp-input-range::-moz-range-thumb {
|
|
288
297
|
width: calc(4px * var(--cp-scale));
|
|
289
|
-
height: calc(
|
|
298
|
+
height: calc(8px * var(--cp-scale));
|
|
290
299
|
background: #fff;
|
|
300
|
+
border: none;
|
|
301
|
+
border-radius: var(--cp-border-radius);
|
|
302
|
+
appearance: none;
|
|
291
303
|
cursor: grab;
|
|
292
304
|
}
|
|
293
305
|
|
|
@@ -382,16 +394,23 @@ const W = `
|
|
|
382
394
|
.cp-input-color {
|
|
383
395
|
width: var(--cp-swatch-size);
|
|
384
396
|
height: var(--cp-swatch-size);
|
|
385
|
-
border: var(--cp-border-width) solid
|
|
397
|
+
border: var(--cp-border-width) solid #BBB;
|
|
386
398
|
border-radius: 50%;
|
|
399
|
+
appearance: none;
|
|
387
400
|
-webkit-appearance: none;
|
|
401
|
+
background: none;
|
|
402
|
+
padding: 0;
|
|
388
403
|
}
|
|
389
404
|
.cp-input-color::-webkit-color-swatch-wrapper {
|
|
390
405
|
padding: 0;
|
|
391
406
|
}
|
|
392
407
|
.cp-input-color::-webkit-color-swatch {
|
|
393
|
-
border:
|
|
394
|
-
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%;
|
|
395
414
|
}
|
|
396
415
|
|
|
397
416
|
.cp-color-swatch {
|
|
@@ -406,11 +425,11 @@ const W = `
|
|
|
406
425
|
gap: var(--cp-space-2);
|
|
407
426
|
}
|
|
408
427
|
`;
|
|
409
|
-
let
|
|
410
|
-
function
|
|
411
|
-
if (
|
|
428
|
+
let P = !1;
|
|
429
|
+
function K() {
|
|
430
|
+
if (P) return;
|
|
412
431
|
const n = document.createElement("style");
|
|
413
|
-
n.id = "control-panel-styles", n.textContent =
|
|
432
|
+
n.id = "control-panel-styles", n.textContent = Z, document.head.appendChild(n), P = !0;
|
|
414
433
|
}
|
|
415
434
|
function r(n, t = {}, e = []) {
|
|
416
435
|
const s = document.createElement(n);
|
|
@@ -420,7 +439,7 @@ function r(n, t = {}, e = []) {
|
|
|
420
439
|
typeof i == "string" ? s.appendChild(document.createTextNode(i)) : s.appendChild(i);
|
|
421
440
|
return s;
|
|
422
441
|
}
|
|
423
|
-
function
|
|
442
|
+
function X(n) {
|
|
424
443
|
const t = r(
|
|
425
444
|
"button",
|
|
426
445
|
{
|
|
@@ -430,13 +449,13 @@ function j(n) {
|
|
|
430
449
|
);
|
|
431
450
|
return t.addEventListener("click", n), t;
|
|
432
451
|
}
|
|
433
|
-
function
|
|
452
|
+
function U(n) {
|
|
434
453
|
return n.replace(/([A-Z])/g, " $1").replace(/^./, (t) => t.toUpperCase()).trim();
|
|
435
454
|
}
|
|
436
|
-
function
|
|
455
|
+
function R(n, t, e) {
|
|
437
456
|
return Math.min(Math.max(n, t), e);
|
|
438
457
|
}
|
|
439
|
-
function
|
|
458
|
+
function H(n, t, e) {
|
|
440
459
|
if (t.length !== e.length)
|
|
441
460
|
throw new Error("Input and output ranges must have the same length");
|
|
442
461
|
if (t.length < 2)
|
|
@@ -451,7 +470,7 @@ function Y(n, t, e) {
|
|
|
451
470
|
const i = t[s], a = t[s + 1], o = e[s], l = e[s + 1];
|
|
452
471
|
return (n - i) / (a - i) * (l - o) + o;
|
|
453
472
|
}
|
|
454
|
-
class
|
|
473
|
+
class G {
|
|
455
474
|
constructor() {
|
|
456
475
|
this.source = null, this.stream = null, this.fftSize = 2048, this.smoothingTimeConstant = 0.82, this.spectrumBoost = 3, this.levels = {
|
|
457
476
|
volume: 0,
|
|
@@ -491,16 +510,16 @@ class X {
|
|
|
491
510
|
if (this.analyser.getByteFrequencyData(this.dataArray), this.analyser.getByteTimeDomainData(this.waveformArray), this.spectrumBoost !== 1) {
|
|
492
511
|
const p = this.dataArray.length;
|
|
493
512
|
for (let h = 0; h < p; h++) {
|
|
494
|
-
const
|
|
495
|
-
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);
|
|
496
515
|
}
|
|
497
516
|
}
|
|
498
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]);
|
|
499
518
|
this.processLevel("bass", i), this.processLevel("mids", a), this.processLevel("highs", o), this.processLevel("volume", l);
|
|
500
519
|
}
|
|
501
520
|
processLevel(t, e) {
|
|
502
|
-
this.peaks[t] -= 5e-4, this.peaks[t] =
|
|
503
|
-
|
|
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]),
|
|
504
523
|
0,
|
|
505
524
|
1
|
|
506
525
|
);
|
|
@@ -517,8 +536,8 @@ class X {
|
|
|
517
536
|
return () => this.levels[t];
|
|
518
537
|
}
|
|
519
538
|
}
|
|
520
|
-
const
|
|
521
|
-
class
|
|
539
|
+
const q = new G();
|
|
540
|
+
class $ {
|
|
522
541
|
constructor() {
|
|
523
542
|
this.midiAccess = null, this.values = /* @__PURE__ */ new Map(), this.isListening = !1, this.resolveListen = null, this.listeningCallback = null, this.init();
|
|
524
543
|
}
|
|
@@ -564,8 +583,8 @@ class G {
|
|
|
564
583
|
return () => this.values.get(t) ?? 0;
|
|
565
584
|
}
|
|
566
585
|
}
|
|
567
|
-
const
|
|
568
|
-
class
|
|
586
|
+
const _ = new $();
|
|
587
|
+
class tt {
|
|
569
588
|
constructor() {
|
|
570
589
|
this.configs = /* @__PURE__ */ new Map(), this.lastRandomUpdateTime = 0, this.currentRandomValue = 0, this.startTime = performance.now(), this.configs.set("constant", {
|
|
571
590
|
frequency: 0.1,
|
|
@@ -659,10 +678,10 @@ class K {
|
|
|
659
678
|
this.startTime = performance.now(), this.lastRandomUpdateTime = 0, this.currentRandomValue = 0;
|
|
660
679
|
}
|
|
661
680
|
}
|
|
662
|
-
const
|
|
681
|
+
const et = new tt(), F = class F {
|
|
663
682
|
constructor(t, e, s = {}) {
|
|
664
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" });
|
|
665
|
-
const i = s.label ??
|
|
684
|
+
const i = s.label ?? U(e), a = r("label", { className: "cp-label" }, [
|
|
666
685
|
String(i)
|
|
667
686
|
]);
|
|
668
687
|
a.setAttribute("title", String(i)), this.domElement.appendChild(a), s.disabled && this.domElement.setAttribute("data-disabled", "true");
|
|
@@ -693,9 +712,9 @@ const Q = new K(), A = class A {
|
|
|
693
712
|
this.domElement.appendChild(t);
|
|
694
713
|
}
|
|
695
714
|
};
|
|
696
|
-
|
|
697
|
-
let u =
|
|
698
|
-
class
|
|
715
|
+
F.audio = q, F.midi = _, F.math = et;
|
|
716
|
+
let u = F;
|
|
717
|
+
class st extends u {
|
|
699
718
|
constructor(t, e, s = {}) {
|
|
700
719
|
super(t, e, s), this.input = r("input", {
|
|
701
720
|
type: "number",
|
|
@@ -713,7 +732,7 @@ class tt extends u {
|
|
|
713
732
|
this.input.value = String(this.value);
|
|
714
733
|
}
|
|
715
734
|
}
|
|
716
|
-
const
|
|
735
|
+
const z = {
|
|
717
736
|
linear: (n) => n,
|
|
718
737
|
quadIn: (n) => n * n,
|
|
719
738
|
quadOut: (n) => n * (2 - n),
|
|
@@ -728,7 +747,7 @@ const R = {
|
|
|
728
747
|
sineOut: (n) => Math.sin(n * Math.PI / 2),
|
|
729
748
|
sineInOut: (n) => -(Math.cos(Math.PI * n) - 1) / 2
|
|
730
749
|
};
|
|
731
|
-
class
|
|
750
|
+
class W {
|
|
732
751
|
constructor(t) {
|
|
733
752
|
this.rafId = null, this.currentSignalType = null, this.currentMidiId = null, this.currentEase = "linear", this.currentBehaviour = "forward", this.loop = () => {
|
|
734
753
|
if (this.currentSignalType) {
|
|
@@ -745,7 +764,7 @@ class H {
|
|
|
745
764
|
)() : ["volume", "bass", "mids", "highs"].includes(this.currentSignalType) && (e = u.audio.getSignal(
|
|
746
765
|
this.currentSignalType
|
|
747
766
|
)());
|
|
748
|
-
const s =
|
|
767
|
+
const s = z[this.currentEase](e);
|
|
749
768
|
this.onChange(s, this.currentBehaviour), this.rafId = requestAnimationFrame(this.loop);
|
|
750
769
|
}
|
|
751
770
|
}, this.onChange = t.onChange, this.setupControllers(t.container);
|
|
@@ -801,7 +820,7 @@ class H {
|
|
|
801
820
|
this.behaviourRow = i.row, this.behaviourSelect = i.select, this.behaviourRow.style.display = "none", this.behaviourSelect.value = this.currentBehaviour, t.appendChild(this.behaviourRow);
|
|
802
821
|
const a = this.createSettingSelect(
|
|
803
822
|
"ease",
|
|
804
|
-
Object.keys(
|
|
823
|
+
Object.keys(z),
|
|
805
824
|
(l) => this.setEase(l)
|
|
806
825
|
);
|
|
807
826
|
this.easeRow = a.row, this.easeSelect = a.select, this.easeRow.style.display = "none", this.easeSelect.value = this.currentEase, t.appendChild(this.easeRow);
|
|
@@ -873,7 +892,7 @@ class H {
|
|
|
873
892
|
0,
|
|
874
893
|
1,
|
|
875
894
|
0.01,
|
|
876
|
-
(
|
|
895
|
+
(b) => u.math.setConfig(t, { phase: b })
|
|
877
896
|
);
|
|
878
897
|
this.mathParamsContainer.appendChild(d.row);
|
|
879
898
|
}
|
|
@@ -924,7 +943,7 @@ class H {
|
|
|
924
943
|
this.setSignalType("none"), this.setEase("linear"), this.setBehaviour("forward"), this.setMidiId(null);
|
|
925
944
|
}
|
|
926
945
|
}
|
|
927
|
-
class
|
|
946
|
+
class it extends u {
|
|
928
947
|
constructor(t, e, s = {}) {
|
|
929
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;
|
|
930
949
|
const i = r("details", {
|
|
@@ -943,10 +962,10 @@ class et extends u {
|
|
|
943
962
|
},
|
|
944
963
|
[String(this.value.toFixed(1))]
|
|
945
964
|
), this.input.addEventListener("input", () => {
|
|
946
|
-
const
|
|
947
|
-
isNaN(
|
|
948
|
-
}), this.input.addEventListener("click", (
|
|
949
|
-
|
|
965
|
+
const f = parseFloat(this.input.value);
|
|
966
|
+
isNaN(f) || (this.setValue(f), this.display.textContent = String(f.toFixed(1)));
|
|
967
|
+
}), this.input.addEventListener("click", (f) => {
|
|
968
|
+
f.stopPropagation();
|
|
950
969
|
});
|
|
951
970
|
const o = r("div", {
|
|
952
971
|
className: "cp-controller-summary-content"
|
|
@@ -955,25 +974,25 @@ class et extends u {
|
|
|
955
974
|
const l = r("div", { className: "cp-number-settings" }), p = this.createSetting(
|
|
956
975
|
"min",
|
|
957
976
|
s.min,
|
|
958
|
-
(
|
|
977
|
+
(f) => this.setMin(f)
|
|
959
978
|
);
|
|
960
979
|
this.minInput = p.input, l.appendChild(p.row);
|
|
961
980
|
const h = this.createSetting(
|
|
962
981
|
"max",
|
|
963
982
|
s.max,
|
|
964
|
-
(
|
|
983
|
+
(f) => this.setMax(f)
|
|
965
984
|
);
|
|
966
985
|
this.maxInput = h.input, l.appendChild(h.row);
|
|
967
986
|
const d = this.createSetting(
|
|
968
987
|
"step",
|
|
969
988
|
s.step,
|
|
970
|
-
(
|
|
989
|
+
(f) => this.setStep(f)
|
|
971
990
|
);
|
|
972
991
|
this.stepInput = d.input, l.appendChild(d.row);
|
|
973
|
-
const
|
|
974
|
-
l.appendChild(
|
|
992
|
+
const b = r("hr", { className: "cp-separator" });
|
|
993
|
+
l.appendChild(b), this.signalHandler = new W({
|
|
975
994
|
container: l,
|
|
976
|
-
onChange: (
|
|
995
|
+
onChange: (f, y) => this.applySignal(f, y)
|
|
977
996
|
}), i.appendChild(l), this.appendWidget(i);
|
|
978
997
|
}
|
|
979
998
|
// Setters
|
|
@@ -1055,7 +1074,7 @@ class et extends u {
|
|
|
1055
1074
|
), this.setStep(this.initialOptions.step), this.signalHandler?.reset();
|
|
1056
1075
|
}
|
|
1057
1076
|
}
|
|
1058
|
-
class
|
|
1077
|
+
class nt extends u {
|
|
1059
1078
|
constructor(t, e, s) {
|
|
1060
1079
|
super(t, e, s), this.optionValues = [], this.select = r("select", { className: "cp-select" }), this.optionValues = s.options || [], this.optionValues.forEach((i, a) => {
|
|
1061
1080
|
const o = r("option", { value: String(a) }, [
|
|
@@ -1080,7 +1099,7 @@ class st extends u {
|
|
|
1080
1099
|
t !== -1 && (this.select.value = String(t));
|
|
1081
1100
|
}
|
|
1082
1101
|
}
|
|
1083
|
-
class
|
|
1102
|
+
class at extends u {
|
|
1084
1103
|
constructor(t, e, s = {}) {
|
|
1085
1104
|
const i = { action: e };
|
|
1086
1105
|
super(i, "action", s), this.domElement.querySelector(".cp-label")?.remove();
|
|
@@ -1095,7 +1114,7 @@ class it extends u {
|
|
|
1095
1114
|
updateDisplay() {
|
|
1096
1115
|
}
|
|
1097
1116
|
}
|
|
1098
|
-
class
|
|
1117
|
+
class ot extends u {
|
|
1099
1118
|
constructor(t, e, s = {}) {
|
|
1100
1119
|
super(t, e, s), this.input = r("input", {
|
|
1101
1120
|
type: "checkbox",
|
|
@@ -1108,7 +1127,7 @@ class nt extends u {
|
|
|
1108
1127
|
this.input.checked = this.value;
|
|
1109
1128
|
}
|
|
1110
1129
|
}
|
|
1111
|
-
class
|
|
1130
|
+
class rt extends u {
|
|
1112
1131
|
constructor(t, e, s) {
|
|
1113
1132
|
super(t, e, s), this.buttons = [], this.optionValues = [], this.container = r("div", { className: "cp-radios" }), this.optionValues = s.options || [], this.optionValues.forEach((i) => {
|
|
1114
1133
|
const a = r("button", { className: "cp-button cp-radio" }, [
|
|
@@ -1126,7 +1145,7 @@ class at extends u {
|
|
|
1126
1145
|
});
|
|
1127
1146
|
}
|
|
1128
1147
|
}
|
|
1129
|
-
class
|
|
1148
|
+
class lt extends u {
|
|
1130
1149
|
constructor(t, e, s = {}) {
|
|
1131
1150
|
super(t, e, s), this.input = r("input", {
|
|
1132
1151
|
type: "color",
|
|
@@ -1141,7 +1160,7 @@ class ot extends u {
|
|
|
1141
1160
|
this.input.value = this.value;
|
|
1142
1161
|
}
|
|
1143
1162
|
}
|
|
1144
|
-
function
|
|
1163
|
+
function V(n) {
|
|
1145
1164
|
const t = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
|
|
1146
1165
|
n = n.replace(t, (s, i, a, o) => i + i + a + a + o + o);
|
|
1147
1166
|
const e = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(n);
|
|
@@ -1151,21 +1170,21 @@ function $(n) {
|
|
|
1151
1170
|
parseInt(e[3], 16)
|
|
1152
1171
|
] : [0, 0, 0];
|
|
1153
1172
|
}
|
|
1154
|
-
function
|
|
1173
|
+
function ct(n, t, e) {
|
|
1155
1174
|
return "#" + ((1 << 24) + (Math.round(n) << 16) + (Math.round(t) << 8) + Math.round(e)).toString(16).slice(1);
|
|
1156
1175
|
}
|
|
1157
|
-
function
|
|
1176
|
+
function I(n) {
|
|
1158
1177
|
const t = n / 255;
|
|
1159
1178
|
return t <= 0.04045 ? t / 12.92 : Math.pow((t + 0.055) / 1.055, 2.4);
|
|
1160
1179
|
}
|
|
1161
|
-
function
|
|
1180
|
+
function B(n) {
|
|
1162
1181
|
return n <= 31308e-7 ? n * 12.92 * 255 : (1.055 * Math.pow(n, 1 / 2.4) - 0.055) * 255;
|
|
1163
1182
|
}
|
|
1164
|
-
function
|
|
1165
|
-
const [s, i, a] =
|
|
1166
|
-
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);
|
|
1167
1186
|
}
|
|
1168
|
-
class
|
|
1187
|
+
class ht extends u {
|
|
1169
1188
|
constructor(t, e, s = {}) {
|
|
1170
1189
|
super(t, e, s), this.stops = [], this.pingPongDirection = 1, this.animationT = 0, this.manualPosition = 0, this.initialOptions = s, this.stops = s.stops || [
|
|
1171
1190
|
{ color: "#000000", position: 0 },
|
|
@@ -1198,9 +1217,9 @@ class ct extends u {
|
|
|
1198
1217
|
this.stops.push({ color: "#ffffff", position: 0.5 }), this.sortStops(), this.renderStops(), this.updateOutput();
|
|
1199
1218
|
}), l.appendChild(p);
|
|
1200
1219
|
const h = r("hr", { className: "cp-separator" });
|
|
1201
|
-
l.appendChild(h), this.signalHandler = new
|
|
1220
|
+
l.appendChild(h), this.signalHandler = new W({
|
|
1202
1221
|
container: l,
|
|
1203
|
-
onChange: (d,
|
|
1222
|
+
onChange: (d, b) => this.applySignal(d, b)
|
|
1204
1223
|
}), i.appendChild(l), this.appendWidget(i), this.updateOutput(0);
|
|
1205
1224
|
}
|
|
1206
1225
|
sortStops() {
|
|
@@ -1228,7 +1247,7 @@ class ct extends u {
|
|
|
1228
1247
|
let p = parseFloat(l.target.value);
|
|
1229
1248
|
isNaN(p) && (p = 0), t.position = Math.max(0, Math.min(1, p)), this.sortStops(), this.renderStops(), this.updateOutput();
|
|
1230
1249
|
});
|
|
1231
|
-
const o =
|
|
1250
|
+
const o = X(() => {
|
|
1232
1251
|
this.stops.splice(e, 1), this.renderStops(), this.updateOutput();
|
|
1233
1252
|
});
|
|
1234
1253
|
s.appendChild(i), s.appendChild(a), s.appendChild(o), this.stopsContainer.appendChild(s);
|
|
@@ -1251,7 +1270,7 @@ class ct extends u {
|
|
|
1251
1270
|
const i = this.stops[s], a = this.stops[s + 1];
|
|
1252
1271
|
if (t >= i.position && t <= a.position) {
|
|
1253
1272
|
const o = a.position - i.position, l = o === 0 ? 0 : (t - i.position) / o;
|
|
1254
|
-
e =
|
|
1273
|
+
e = pt(i.color, a.color, l);
|
|
1255
1274
|
break;
|
|
1256
1275
|
}
|
|
1257
1276
|
}
|
|
@@ -1290,7 +1309,7 @@ class ct extends u {
|
|
|
1290
1309
|
], this.sortStops(), this.renderStops(), this.signalHandler?.reset(), this.updateOutput(0);
|
|
1291
1310
|
}
|
|
1292
1311
|
}
|
|
1293
|
-
class
|
|
1312
|
+
class dt extends u {
|
|
1294
1313
|
constructor(t, e, s = {}) {
|
|
1295
1314
|
super(t, e, s), this.items = [], this.initialOptions = s, this.itemType = s.itemType || "string", this.items = this.parseValue(this.value);
|
|
1296
1315
|
const i = r("details", {
|
|
@@ -1367,7 +1386,7 @@ class pt extends u {
|
|
|
1367
1386
|
}), i.addEventListener("input", (o) => {
|
|
1368
1387
|
this.items[e] = o.target.value, this.updateValue();
|
|
1369
1388
|
});
|
|
1370
|
-
const a =
|
|
1389
|
+
const a = X(() => {
|
|
1371
1390
|
this.items.splice(e, 1), this.renderItems(), this.updateValue();
|
|
1372
1391
|
});
|
|
1373
1392
|
s.appendChild(i), s.appendChild(a), this.itemsContainer.appendChild(s);
|
|
@@ -1386,7 +1405,7 @@ class pt extends u {
|
|
|
1386
1405
|
this.items = this.parseValue(t), this.renderItems(), this.updateValue();
|
|
1387
1406
|
}
|
|
1388
1407
|
}
|
|
1389
|
-
class
|
|
1408
|
+
class ut {
|
|
1390
1409
|
constructor() {
|
|
1391
1410
|
this.frames = 0, this.pollingInterval = 1e3, this.prevTime = performance.now(), this.render = () => {
|
|
1392
1411
|
this.frames++;
|
|
@@ -1404,48 +1423,48 @@ class ht {
|
|
|
1404
1423
|
cancelAnimationFrame(this.rafId);
|
|
1405
1424
|
}
|
|
1406
1425
|
}
|
|
1407
|
-
class
|
|
1426
|
+
class J {
|
|
1408
1427
|
constructor() {
|
|
1409
1428
|
this.controllers = [], this.folders = [];
|
|
1410
1429
|
}
|
|
1411
1430
|
addNumber(t, e, s = {}) {
|
|
1412
|
-
const i = new
|
|
1431
|
+
const i = new st(t, e, s);
|
|
1413
1432
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1414
1433
|
}
|
|
1415
1434
|
addRange(t, e, s = {}) {
|
|
1416
|
-
const i = new
|
|
1435
|
+
const i = new it(t, e, s);
|
|
1417
1436
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1418
1437
|
}
|
|
1419
1438
|
addSelect(t, e, s = {}) {
|
|
1420
|
-
const i = new
|
|
1439
|
+
const i = new nt(t, e, s);
|
|
1421
1440
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1422
1441
|
}
|
|
1423
1442
|
addBoolean(t, e, s = {}) {
|
|
1424
|
-
const i = new
|
|
1443
|
+
const i = new ot(t, e, s);
|
|
1425
1444
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1426
1445
|
}
|
|
1427
1446
|
addButton(t, e, s = {}) {
|
|
1428
|
-
const i = new
|
|
1447
|
+
const i = new at(t, e, s);
|
|
1429
1448
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1430
1449
|
}
|
|
1431
1450
|
addRadio(t, e, s = {}) {
|
|
1432
|
-
const i = new
|
|
1451
|
+
const i = new rt(t, e, s);
|
|
1433
1452
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1434
1453
|
}
|
|
1435
1454
|
addColor(t, e, s = {}) {
|
|
1436
|
-
const i = new
|
|
1455
|
+
const i = new lt(t, e, s);
|
|
1437
1456
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1438
1457
|
}
|
|
1439
1458
|
addGradient(t, e, s = {}) {
|
|
1440
|
-
const i = new
|
|
1459
|
+
const i = new ht(t, e, s);
|
|
1441
1460
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1442
1461
|
}
|
|
1443
1462
|
addArray(t, e, s = {}) {
|
|
1444
|
-
const i = new
|
|
1463
|
+
const i = new dt(t, e, s);
|
|
1445
1464
|
return this.contentElement.appendChild(i.domElement), this.controllers.push(i), i;
|
|
1446
1465
|
}
|
|
1447
1466
|
addFolder(t) {
|
|
1448
|
-
const e = new
|
|
1467
|
+
const e = new mt(t);
|
|
1449
1468
|
return this.addSeparator(), this.contentElement.appendChild(e.domElement), this.folders.push(e), e;
|
|
1450
1469
|
}
|
|
1451
1470
|
addSeparator() {
|
|
@@ -1487,7 +1506,7 @@ class U {
|
|
|
1487
1506
|
t.reset();
|
|
1488
1507
|
}
|
|
1489
1508
|
}
|
|
1490
|
-
class
|
|
1509
|
+
class mt extends J {
|
|
1491
1510
|
constructor(t) {
|
|
1492
1511
|
super(), this.title = t, this.domElement = r("details", {
|
|
1493
1512
|
className: "cp-folder",
|
|
@@ -1503,9 +1522,9 @@ class dt extends U {
|
|
|
1503
1522
|
}), this.domElement.appendChild(this.contentElement);
|
|
1504
1523
|
}
|
|
1505
1524
|
}
|
|
1506
|
-
class
|
|
1525
|
+
class gt extends J {
|
|
1507
1526
|
constructor(t, e = {}) {
|
|
1508
|
-
super(),
|
|
1527
|
+
super(), K(), this.domElement = r("details", {
|
|
1509
1528
|
className: "cp-root",
|
|
1510
1529
|
open: !0
|
|
1511
1530
|
}), this.summaryElement = r("summary", {
|
|
@@ -1514,7 +1533,7 @@ class ut extends U {
|
|
|
1514
1533
|
const s = r("span", {}, [
|
|
1515
1534
|
e.title || "ControlPanel"
|
|
1516
1535
|
]);
|
|
1517
|
-
this.summaryElement.appendChild(s), this.stats = new
|
|
1536
|
+
this.summaryElement.appendChild(s), this.stats = new ut(), this.summaryElement.appendChild(this.stats.domElement);
|
|
1518
1537
|
let i = !1, a = 0, o = 0, l = 0, p = 0;
|
|
1519
1538
|
this.summaryElement.addEventListener("mousedown", (c) => {
|
|
1520
1539
|
if (c.target !== this.summaryElement && c.target !== s) return;
|
|
@@ -1523,57 +1542,57 @@ class ut extends U {
|
|
|
1523
1542
|
l = m.left, p = m.top, c.preventDefault();
|
|
1524
1543
|
}), document.addEventListener("mousemove", (c) => {
|
|
1525
1544
|
if (!i) return;
|
|
1526
|
-
const m = c.clientX - a, v = c.clientY - o,
|
|
1527
|
-
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";
|
|
1528
1547
|
}), document.addEventListener("mouseup", () => {
|
|
1529
1548
|
i && (i = !1, this.savePositionAndSize());
|
|
1530
1549
|
}), new ResizeObserver(() => {
|
|
1531
1550
|
i || this.savePositionAndSize();
|
|
1532
1551
|
}).observe(this.domElement), this.restorePositionAndSize(), this.contentElement = r("div", { className: "cp-content" }), this.domElement.appendChild(this.contentElement);
|
|
1533
|
-
const d = this.addFolder("_Signals"),
|
|
1552
|
+
const d = this.addFolder("_Signals"), b = {
|
|
1534
1553
|
audioInput: null,
|
|
1535
1554
|
fftSize: 2048
|
|
1536
1555
|
};
|
|
1537
|
-
d.addRadio(
|
|
1556
|
+
d.addRadio(b, "audioInput", {
|
|
1538
1557
|
label: "Audio Signal",
|
|
1539
1558
|
options: ["microphone", "browser"]
|
|
1540
1559
|
}).onChange((c) => {
|
|
1541
|
-
|
|
1542
|
-
}), d.addSelect(
|
|
1560
|
+
q.setInput(c);
|
|
1561
|
+
}), d.addSelect(b, "fftSize", {
|
|
1543
1562
|
label: "FFT Size",
|
|
1544
1563
|
options: [256, 512, 1024, 2048]
|
|
1545
1564
|
}).onChange((c) => {
|
|
1546
|
-
|
|
1547
|
-
}), d.addRange(
|
|
1565
|
+
q.setFFTSize(c);
|
|
1566
|
+
}), d.addRange(q, "smoothingTimeConstant", {
|
|
1548
1567
|
min: 0,
|
|
1549
1568
|
max: 0.99,
|
|
1550
1569
|
step: 0.01,
|
|
1551
1570
|
label: "Smoothing"
|
|
1552
1571
|
}).onChange((c) => {
|
|
1553
|
-
|
|
1554
|
-
}), d.addRange(
|
|
1572
|
+
q.analyser.smoothingTimeConstant = c;
|
|
1573
|
+
}), d.addRange(q, "spectrumBoost", {
|
|
1555
1574
|
min: 1,
|
|
1556
1575
|
max: 5,
|
|
1557
1576
|
step: 0.1,
|
|
1558
1577
|
label: "Compression"
|
|
1559
1578
|
}), t ? t.appendChild(this.domElement) : document.body.appendChild(this.domElement);
|
|
1560
|
-
const
|
|
1561
|
-
this.presetStoragePrefix = `cp-presets-${
|
|
1562
|
-
const
|
|
1579
|
+
const f = e.title || "ControlPanel";
|
|
1580
|
+
this.presetStoragePrefix = `cp-presets-${f}-`;
|
|
1581
|
+
const y = this.addFolder("_User Presets"), x = () => {
|
|
1563
1582
|
const c = ["Default"];
|
|
1564
1583
|
if (typeof localStorage > "u") return c;
|
|
1565
1584
|
for (let m = 0; m < localStorage.length; m++) {
|
|
1566
1585
|
const v = localStorage.key(m);
|
|
1567
1586
|
if (v && v.startsWith(this.presetStoragePrefix)) {
|
|
1568
|
-
const
|
|
1569
|
-
|
|
1587
|
+
const A = v.substring(this.presetStoragePrefix.length);
|
|
1588
|
+
A !== "Default" && !c.includes(A) && c.push(A);
|
|
1570
1589
|
}
|
|
1571
1590
|
}
|
|
1572
1591
|
return c.sort();
|
|
1573
|
-
},
|
|
1592
|
+
}, g = {
|
|
1574
1593
|
selected: "Default",
|
|
1575
1594
|
save: () => {
|
|
1576
|
-
const c = prompt("Preset Name:",
|
|
1595
|
+
const c = prompt("Preset Name:", g.selected);
|
|
1577
1596
|
if (c) {
|
|
1578
1597
|
if (c === "Default") {
|
|
1579
1598
|
alert("Cannot overwrite Default preset");
|
|
@@ -1581,90 +1600,90 @@ class ut extends U {
|
|
|
1581
1600
|
}
|
|
1582
1601
|
const m = this.presetStoragePrefix + c;
|
|
1583
1602
|
this.saveToLocalStorage(m);
|
|
1584
|
-
const v =
|
|
1585
|
-
|
|
1603
|
+
const v = x();
|
|
1604
|
+
w.setOptions(v), g.selected = c, w.setValue(c);
|
|
1586
1605
|
}
|
|
1587
1606
|
},
|
|
1588
1607
|
load: () => {
|
|
1589
|
-
const c =
|
|
1590
|
-
this.loadFromLocalStorage(m),
|
|
1608
|
+
const c = g.selected, m = this.presetStoragePrefix + c;
|
|
1609
|
+
this.loadFromLocalStorage(m), g.selected = c, w.setValue(c);
|
|
1591
1610
|
},
|
|
1592
1611
|
delete: () => {
|
|
1593
|
-
if (
|
|
1612
|
+
if (g.selected === "Default") {
|
|
1594
1613
|
alert("Cannot delete Default preset");
|
|
1595
1614
|
return;
|
|
1596
1615
|
}
|
|
1597
|
-
if (confirm(`Delete preset "${
|
|
1598
|
-
const c = this.presetStoragePrefix +
|
|
1616
|
+
if (confirm(`Delete preset "${g.selected}"?`)) {
|
|
1617
|
+
const c = this.presetStoragePrefix + g.selected;
|
|
1599
1618
|
localStorage.removeItem(c);
|
|
1600
|
-
const m =
|
|
1601
|
-
|
|
1619
|
+
const m = x();
|
|
1620
|
+
w.setOptions(m), g.selected = "Default", w.setValue("Default"), this.reset();
|
|
1602
1621
|
}
|
|
1603
1622
|
},
|
|
1604
1623
|
export: () => {
|
|
1605
|
-
const c = this.save(), m = (
|
|
1606
|
-
const
|
|
1624
|
+
const c = this.save(), m = (O) => {
|
|
1625
|
+
const M = {
|
|
1607
1626
|
controllers: {},
|
|
1608
1627
|
folders: {}
|
|
1609
1628
|
};
|
|
1610
|
-
for (const [
|
|
1611
|
-
|
|
1612
|
-
for (const [
|
|
1613
|
-
|
|
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
|
|
1614
1633
|
))
|
|
1615
|
-
|
|
1616
|
-
return
|
|
1617
|
-
}, v = m(c),
|
|
1618
|
-
_presetName:
|
|
1634
|
+
k.startsWith("_") || (M.folders[k] = m(j));
|
|
1635
|
+
return M;
|
|
1636
|
+
}, v = m(c), A = {
|
|
1637
|
+
_presetName: g.selected || "CustomPreset",
|
|
1619
1638
|
_exportDate: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1620
1639
|
_instructions: "To add as factory preset: Copy 'controllers' and 'folders' fields into the presets.json file",
|
|
1621
1640
|
...v
|
|
1622
|
-
},
|
|
1623
|
-
|
|
1624
|
-
const
|
|
1625
|
-
|
|
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);
|
|
1626
1645
|
},
|
|
1627
1646
|
import: () => {
|
|
1628
1647
|
const c = document.createElement("input");
|
|
1629
1648
|
c.type = "file", c.accept = ".json", c.onchange = (m) => {
|
|
1630
1649
|
const v = m.target.files?.[0];
|
|
1631
1650
|
if (!v) return;
|
|
1632
|
-
const
|
|
1633
|
-
|
|
1651
|
+
const A = new FileReader();
|
|
1652
|
+
A.onload = (N) => {
|
|
1634
1653
|
try {
|
|
1635
|
-
const C =
|
|
1636
|
-
controllers:
|
|
1637
|
-
folders:
|
|
1654
|
+
const C = N.target?.result, E = JSON.parse(C), S = {
|
|
1655
|
+
controllers: E.controllers || {},
|
|
1656
|
+
folders: E.folders || {}
|
|
1638
1657
|
};
|
|
1639
|
-
if (!
|
|
1658
|
+
if (!S.controllers || !S.folders) {
|
|
1640
1659
|
alert(
|
|
1641
1660
|
"Invalid preset file: missing 'controllers' or 'folders'"
|
|
1642
1661
|
);
|
|
1643
1662
|
return;
|
|
1644
1663
|
}
|
|
1645
|
-
this.load(
|
|
1646
|
-
const
|
|
1664
|
+
this.load(S);
|
|
1665
|
+
const T = E._presetName || "ImportedPreset";
|
|
1647
1666
|
if (confirm(
|
|
1648
|
-
`Preset loaded! Save as "${
|
|
1667
|
+
`Preset loaded! Save as "${T}" to User Presets?`
|
|
1649
1668
|
)) {
|
|
1650
|
-
const
|
|
1651
|
-
this.saveToLocalStorage(
|
|
1652
|
-
const
|
|
1653
|
-
|
|
1669
|
+
const O = this.presetStoragePrefix + T;
|
|
1670
|
+
this.saveToLocalStorage(O);
|
|
1671
|
+
const M = x();
|
|
1672
|
+
w.setOptions(M), g.selected = T, w.setValue(T);
|
|
1654
1673
|
}
|
|
1655
1674
|
} catch (C) {
|
|
1656
1675
|
alert(
|
|
1657
1676
|
`Failed to import preset: ${C instanceof Error ? C.message : "Invalid JSON"}`
|
|
1658
1677
|
), console.error("Import error:", C);
|
|
1659
1678
|
}
|
|
1660
|
-
},
|
|
1679
|
+
}, A.readAsText(v);
|
|
1661
1680
|
}, c.click();
|
|
1662
1681
|
}
|
|
1663
|
-
},
|
|
1682
|
+
}, L = x(), w = y.addSelect(g, "selected", {
|
|
1664
1683
|
label: "Preset",
|
|
1665
|
-
options:
|
|
1684
|
+
options: L
|
|
1666
1685
|
});
|
|
1667
|
-
|
|
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());
|
|
1668
1687
|
}
|
|
1669
1688
|
saveToLocalStorage(t) {
|
|
1670
1689
|
const e = this.save();
|
|
@@ -1690,7 +1709,9 @@ class ut extends U {
|
|
|
1690
1709
|
this.save(), this.saveToLocalStorage(t);
|
|
1691
1710
|
}
|
|
1692
1711
|
savePositionAndSize() {
|
|
1693
|
-
const t = this.domElement.getBoundingClientRect()
|
|
1712
|
+
const t = this.domElement.getBoundingClientRect();
|
|
1713
|
+
if (t.width === 0 || t.height === 0) return;
|
|
1714
|
+
const e = `cp-position-${this.presetStoragePrefix}`, s = {
|
|
1694
1715
|
left: t.left,
|
|
1695
1716
|
top: t.top,
|
|
1696
1717
|
width: this.domElement.offsetWidth,
|
|
@@ -1708,7 +1729,8 @@ class ut extends U {
|
|
|
1708
1729
|
const e = sessionStorage.getItem(t);
|
|
1709
1730
|
if (e) {
|
|
1710
1731
|
const s = JSON.parse(e);
|
|
1711
|
-
|
|
1732
|
+
if (s.width === 0 || s.height === 0) return;
|
|
1733
|
+
console.log(s), this.domElement.style.left = `${s.left}px`, this.domElement.style.top = `${s.top}px`, this.domElement.style.right = "auto", this.domElement.style.bottom = "auto", this.domElement.style.width = `${s.width}px`, this.domElement.style.height = `${s.height}px`;
|
|
1712
1734
|
}
|
|
1713
1735
|
} catch (e) {
|
|
1714
1736
|
console.warn("Failed to restore panel position/size", e);
|
|
@@ -1719,23 +1741,23 @@ class ut extends U {
|
|
|
1719
1741
|
}
|
|
1720
1742
|
}
|
|
1721
1743
|
export {
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1744
|
+
dt as ArrayController,
|
|
1745
|
+
G as AudioSignals,
|
|
1746
|
+
ot as BooleanController,
|
|
1747
|
+
at as ButtonController,
|
|
1748
|
+
lt as ColorController,
|
|
1749
|
+
gt as ControlPanel,
|
|
1750
|
+
J as ControlPanelContainer,
|
|
1729
1751
|
u as Controller,
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1752
|
+
mt as Folder,
|
|
1753
|
+
ht as GradientController,
|
|
1754
|
+
tt as MathSignals,
|
|
1755
|
+
$ as MidiSignals,
|
|
1756
|
+
st as NumberController,
|
|
1757
|
+
rt as RadioController,
|
|
1758
|
+
it as RangeController,
|
|
1759
|
+
nt as SelectController,
|
|
1760
|
+
q as audioSignals,
|
|
1761
|
+
et as mathSignals,
|
|
1762
|
+
_ as midiSignals
|
|
1741
1763
|
};
|