@brett_lamy/docstream 1.11.0 → 1.13.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.
package/README.md CHANGED
@@ -246,7 +246,11 @@ setMethod(code, song.tracks[1].chain, "room", formatNumber(0.5)) // exact edit,
246
246
  mixCode(song, { solo: new Set([0]) }) // the code with other tracks silenced
247
247
  ```
248
248
 
249
- `StrudelRack`, `StepGrid`, `Knob` and `Fader` are exported for custom studios. The parser
249
+ The master strip's **Rack | Grid** switch puts the modules on a masonry grid: drag a module's
250
+ title to move it, drag its corner to resize it (arrow keys work on both handles).
251
+ `<StrudelRack layout="grid" persistKey="my-song" />` starts there and remembers the arrangement.
252
+
253
+ `StrudelRack`, `RackGrid`, `StepGrid`, `Knob` and `Fader` are exported for custom studios. The parser
250
254
  (acorn) loads only when a rack opens.
251
255
 
252
256
  ## GitBook Syntax
@@ -0,0 +1,23 @@
1
+ import { type ReactNode } from "react";
2
+ export interface GridItem {
3
+ key: string;
4
+ label: string;
5
+ node: ReactNode;
6
+ /** Default width in twelfths of the grid (12 = full width). */
7
+ span?: number;
8
+ }
9
+ export interface GridLayout {
10
+ order: string[];
11
+ /** Width in twelfths, and an optional minimum height in px, per item key. */
12
+ sizes: Record<string, {
13
+ w: number;
14
+ h?: number;
15
+ }>;
16
+ }
17
+ export interface RackGridProps {
18
+ items: GridItem[];
19
+ layout: GridLayout;
20
+ onLayoutChange: (layout: GridLayout) => void;
21
+ }
22
+ export declare function RackGrid({ items, layout, onLayoutChange }: RackGridProps): import("react").JSX.Element;
23
+ //# sourceMappingURL=RackGrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RackGrid.d.ts","sourceRoot":"","sources":["../../src/strudel/RackGrid.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAuF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE3H,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,SAAS,CAAA;IACf,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACjD;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,MAAM,EAAE,UAAU,CAAA;IAClB,cAAc,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;CAC7C;AAaD,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,aAAa,+BAiMxE"}
@@ -0,0 +1,182 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* A masonry grid of modules you can rearrange and resize. Columns follow the container's width; every module spans
3
+ some of them and as many 8px rows as its content (or the height you dragged it to) needs, and `dense` flow packs
4
+ the gaps. Drag a module's grip to move it (others reflow under the pointer); drag its corner to resize. Both
5
+ handles are keyboard-operable: arrows move or resize, Home/End move to the ends. */
6
+ import { useEffect, useLayoutEffect, useRef, useState } from "react";
7
+ const ROW = 8;
8
+ const GAP = 10;
9
+ /** Items in layout order: known keys first, new ones appended. */
10
+ function ordered(items, order) {
11
+ const byKey = new Map(items.map((i) => [i.key, i]));
12
+ const out = order.map((k) => byKey.get(k)).filter((i) => !!i);
13
+ for (const i of items)
14
+ if (!order.includes(i.key))
15
+ out.push(i);
16
+ return out;
17
+ }
18
+ export function RackGrid({ items, layout, onLayoutChange }) {
19
+ const gridRef = useRef(null);
20
+ const [cols, setCols] = useState(12);
21
+ const [heights, setHeights] = useState({});
22
+ const [dragging, setDragging] = useState(null);
23
+ const drag = useRef(null);
24
+ const elements = useRef(new Map());
25
+ const list = ordered(items, layout.order);
26
+ const keys = list.map((i) => i.key);
27
+ const layoutRef = useRef(layout);
28
+ layoutRef.current = layout;
29
+ // Columns: one per ~84px of width, at most 12 — spans are stored in twelfths and scaled.
30
+ useLayoutEffect(() => {
31
+ const grid = gridRef.current;
32
+ if (!grid)
33
+ return;
34
+ const measure = () => setCols(Math.max(2, Math.min(12, Math.floor((grid.clientWidth + GAP) / 84))));
35
+ measure();
36
+ const ro = new ResizeObserver(measure);
37
+ ro.observe(grid);
38
+ return () => ro.disconnect();
39
+ }, []);
40
+ // Masonry: each module spans as many rows as its content is tall.
41
+ useEffect(() => {
42
+ const ro = new ResizeObserver((entries) => {
43
+ setHeights((prev) => {
44
+ let next = prev;
45
+ for (const e of entries) {
46
+ const key = e.target.dataset.content;
47
+ const h = Math.ceil(e.target.offsetHeight);
48
+ if (prev[key] !== h)
49
+ next = { ...next, [key]: h };
50
+ }
51
+ return next;
52
+ });
53
+ });
54
+ elements.current.forEach((el) => {
55
+ const content = el.querySelector("[data-content]");
56
+ if (content)
57
+ ro.observe(content);
58
+ });
59
+ return () => ro.disconnect();
60
+ }, [keys.join("|")]);
61
+ const span = (item) => {
62
+ const w = layout.sizes[item.key]?.w ?? item.span ?? 6;
63
+ return Math.max(1, Math.min(cols, Math.round((w / 12) * cols)));
64
+ };
65
+ const rows = (item) => {
66
+ const h = Math.max(heights[item.key] ?? 120, layout.sizes[item.key]?.h ?? 0);
67
+ return Math.ceil((h + GAP) / (ROW + GAP));
68
+ };
69
+ const setSize = (key, size) => {
70
+ const cur = layoutRef.current;
71
+ onLayoutChange({ order: keys, sizes: { ...cur.sizes, [key]: { ...cur.sizes[key], w: cur.sizes[key]?.w ?? 6, ...size } } });
72
+ };
73
+ const move = (key, to) => {
74
+ const from = keys.indexOf(key);
75
+ const next = keys.filter((k) => k !== key);
76
+ next.splice(Math.max(0, Math.min(next.length, to)), 0, key);
77
+ if (from !== next.indexOf(key))
78
+ onLayoutChange({ ...layoutRef.current, order: next });
79
+ };
80
+ // Moving: the module follows the pointer; hovering another module takes its place.
81
+ const place = (key, x, y) => {
82
+ const el = elements.current.get(key);
83
+ const grid = gridRef.current;
84
+ const d = drag.current;
85
+ if (!el || !grid || !d)
86
+ return;
87
+ const box = grid.getBoundingClientRect();
88
+ el.style.transform = `translate(${x - d.dx - box.left - el.offsetLeft}px, ${y - d.dy - box.top - el.offsetTop}px)`;
89
+ };
90
+ const onGripDown = (key) => (e) => {
91
+ if (e.button !== 0)
92
+ return;
93
+ const el = elements.current.get(key);
94
+ const r = el.getBoundingClientRect();
95
+ e.currentTarget.setPointerCapture(e.pointerId);
96
+ drag.current = { key, dx: e.clientX - r.left, dy: e.clientY - r.top, x: e.clientX, y: e.clientY };
97
+ setDragging(key);
98
+ };
99
+ const onGripMove = (e) => {
100
+ const d = drag.current;
101
+ if (!d)
102
+ return;
103
+ d.x = e.clientX;
104
+ d.y = e.clientY;
105
+ place(d.key, e.clientX, e.clientY);
106
+ const dragged = elements.current.get(d.key);
107
+ dragged.style.pointerEvents = "none";
108
+ const under = document.elementFromPoint(e.clientX, e.clientY)?.closest("[data-grid-key]");
109
+ dragged.style.pointerEvents = "";
110
+ const target = under?.dataset.gridKey;
111
+ if (target && target !== d.key)
112
+ move(d.key, keys.indexOf(target));
113
+ };
114
+ const onGripUp = () => {
115
+ const d = drag.current;
116
+ if (!d)
117
+ return;
118
+ const el = elements.current.get(d.key);
119
+ if (el)
120
+ el.style.transform = "";
121
+ drag.current = null;
122
+ setDragging(null);
123
+ };
124
+ // After a reorder the module's slot moved: keep it under the pointer.
125
+ useLayoutEffect(() => {
126
+ const d = drag.current;
127
+ if (d)
128
+ place(d.key, d.x, d.y);
129
+ });
130
+ const onGripKey = (key) => (e) => {
131
+ const i = keys.indexOf(key);
132
+ const to = { ArrowLeft: i - 1, ArrowUp: i - 1, ArrowRight: i + 1, ArrowDown: i + 1, Home: 0, End: keys.length - 1 }[e.key];
133
+ if (to === undefined)
134
+ return;
135
+ e.preventDefault();
136
+ move(key, to);
137
+ };
138
+ // Resizing: the corner sets the width in columns and a minimum height.
139
+ const resize = useRef(null);
140
+ const onCornerDown = (key) => (e) => {
141
+ const r = elements.current.get(key).getBoundingClientRect();
142
+ e.currentTarget.setPointerCapture(e.pointerId);
143
+ resize.current = { key, left: r.left, top: r.top };
144
+ };
145
+ const onCornerMove = (e) => {
146
+ const r = resize.current;
147
+ const grid = gridRef.current;
148
+ if (!r || !grid)
149
+ return;
150
+ const colWidth = (grid.clientWidth - GAP * (cols - 1)) / cols;
151
+ const c = Math.max(1, Math.min(cols, Math.round((e.clientX - r.left + GAP) / (colWidth + GAP))));
152
+ setSize(r.key, { w: Math.round((c / cols) * 12 * 100) / 100, h: Math.max(60, Math.round(e.clientY - r.top)) });
153
+ };
154
+ const onCornerUp = () => {
155
+ resize.current = null;
156
+ };
157
+ const onCornerKey = (item) => (e) => {
158
+ const w = layout.sizes[item.key]?.w ?? item.span ?? 6;
159
+ const h = layout.sizes[item.key]?.h ?? heights[item.key] ?? 120;
160
+ const step = 12 / cols;
161
+ const next = {
162
+ ArrowRight: { w: Math.min(12, w + step) },
163
+ ArrowLeft: { w: Math.max(step, w - step) },
164
+ ArrowDown: { h: h + 24 },
165
+ ArrowUp: { h: Math.max(0, h - 24) },
166
+ }[e.key];
167
+ if (!next)
168
+ return;
169
+ e.preventDefault();
170
+ setSize(item.key, next);
171
+ };
172
+ return (_jsx("div", { ref: gridRef, className: "strudel-grid", style: { gridTemplateColumns: `repeat(${cols}, minmax(0, 1fr))`, gridAutoRows: ROW, rowGap: GAP, columnGap: GAP }, children: list.map((item) => {
173
+ const h = layout.sizes[item.key]?.h;
174
+ return (_jsxs("div", { ref: (el) => {
175
+ if (el)
176
+ elements.current.set(item.key, el);
177
+ else
178
+ elements.current.delete(item.key);
179
+ }, className: "strudel-grid__item", "data-grid-key": item.key, "data-dragging": dragging === item.key || undefined, style: { gridColumn: `span ${span(item)}`, gridRow: `span ${rows(item)}` }, children: [_jsx("div", { "data-content": item.key, className: "strudel-grid__content", style: h ? { minHeight: h } : undefined, children: item.node }), _jsx("button", { type: "button", className: "strudel-grid__grip", "aria-label": `Move ${item.label}`, title: "Drag to move (arrow keys too)", onPointerDown: onGripDown(item.key), onPointerMove: onGripMove, onPointerUp: onGripUp, onPointerCancel: onGripUp, onKeyDown: onGripKey(item.key) }), _jsx("button", { type: "button", className: "strudel-grid__corner", "aria-label": `Resize ${item.label}`, title: "Drag to resize (arrow keys too)", onPointerDown: onCornerDown(item.key), onPointerMove: onCornerMove, onPointerUp: onCornerUp, onPointerCancel: onCornerUp, onKeyDown: onCornerKey(item) })] }, item.key));
180
+ }) }));
181
+ }
182
+ //# sourceMappingURL=RackGrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RackGrid.js","sourceRoot":"","sources":["../../src/strudel/RackGrid.tsx"],"names":[],"mappings":"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"}
@@ -5,6 +5,10 @@ export interface StrudelRackProps {
5
5
  /** The code to play for the current mute/solo mix (the written code with silenced tracks). */
6
6
  onPlayableChange?: (code: string) => void;
7
7
  className?: string;
8
+ /** "rack": modules stacked full width. "grid": a masonry grid you drag and resize. Defaults to "rack". */
9
+ layout?: "rack" | "grid";
10
+ /** Remember the layout (mode, order and sizes) in localStorage under this key. */
11
+ persistKey?: string;
8
12
  }
9
13
  interface Param {
10
14
  label: string;
@@ -19,6 +23,6 @@ export declare const STRUDEL_PARAMS: Record<string, Param>;
19
23
  /** A name for a track: its label, the sounds of a drum row, or its role and synth. */
20
24
  export declare function trackName(track: StrudelTrack): string;
21
25
  /** Equipment generated from Strudel code. Controlled: `code` in, edited code out through `onChange`. */
22
- export declare function StrudelRack({ code, onChange, onPlayableChange, className }: StrudelRackProps): import("react").JSX.Element;
26
+ export declare function StrudelRack({ code, onChange, onPlayableChange, className, layout, persistKey }: StrudelRackProps): import("react").JSX.Element;
23
27
  export default StrudelRack;
24
28
  //# sourceMappingURL=StrudelRack.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StrudelRack.d.ts","sourceRoot":"","sources":["../../src/strudel/StrudelRack.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAmG,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AAKlJ,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAC/B;AAKD,uGAAuG;AACvG,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAsBhD,CAAA;AAcD,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAarD;AAmJD,wGAAwG;AACxG,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE,gBAAgB,+BA8E5F;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"StrudelRack.d.ts","sourceRoot":"","sources":["../../src/strudel/StrudelRack.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAmG,KAAK,YAAY,EAAE,MAAM,eAAe,CAAA;AAMlJ,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0GAA0G;IAC1G,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAgBD,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAC/B;AAKD,uGAAuG;AACvG,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAsBhD,CAAA;AAcD,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAarD;AAoJD,wGAAwG;AACxG,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAe,EAAE,UAAU,EAAE,EAAE,gBAAgB,+BA0HzH;AAED,eAAe,WAAW,CAAA"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  /* The rack: equipment generated from a Strudel song's syntax tree. Every track becomes a device — mute/solo,
3
3
  a gain fader, its sound and scale, a step grid for its pattern, and a knob for each effect it uses (plus any
4
4
  you add) — and the song gets a master strip with the tempo. Every control edits the code in place (edit.ts),
@@ -10,6 +10,17 @@ import { findCall, parseStrudel, StrudelSyntaxError } from "./ast/program.js";
10
10
  import { formatNumber, isAudible, mixCode, removeMethod, setMethod, setMiniAtom, setMiniSource, setTempo } from "./ast/edit.js";
11
11
  import { Fader, Knob, defaultFormat } from "./controls.js";
12
12
  import { StepGrid } from "./StepGrid.js";
13
+ import { RackGrid } from "./RackGrid.js";
14
+ function load(key) {
15
+ if (!key)
16
+ return {};
17
+ try {
18
+ return JSON.parse(localStorage.getItem(`strudel-rack:${key}`) ?? "{}");
19
+ }
20
+ catch {
21
+ return {};
22
+ }
23
+ }
13
24
  const hz = (v) => (v >= 1000 ? `${+(v / 1000).toFixed(1)}k` : v.toFixed(0));
14
25
  const pct = (v) => `${Math.round(v * 100)}`;
15
26
  /** Effects the rack knows how to draw, in display order. Others still parse; they just get no knob. */
@@ -80,7 +91,7 @@ function Device({ song, track, mix, onMix, onChange, }) {
80
91
  const Icon = track.kind === "drums" ? Drum : track.kind === "melodic" ? KeyboardMusic : AudioWaveform;
81
92
  const set = (method, value) => onChange(setMethod(code, chain, method, formatNumber(value)));
82
93
  const setAtom = (mini) => (atom, text) => onChange(setMiniAtom(code, mini, atom, text));
83
- return (_jsxs("section", { className: "strudel-device", "data-kind": track.kind, "data-audible": audible, "aria-label": name, children: [_jsxs("header", { className: "strudel-device__head", children: [_jsx(Icon, { size: 15, "aria-hidden": "true" }), _jsx("span", { className: "strudel-device__name", title: code.slice(track.start, track.end), children: name }), _jsx("button", { type: "button", className: "strudel-device__toggle", "data-kind": "mute", "aria-pressed": mix.muted?.has(track.index) || track.muted, onClick: () => onMix("mute"), title: "Mute", children: "M" }), _jsx("button", { type: "button", className: "strudel-device__toggle", "data-kind": "solo", "aria-pressed": !!mix.solo?.has(track.index), onClick: () => onMix("solo"), title: "Solo", children: "S" })] }), _jsxs("div", { className: "strudel-device__body", children: [_jsx(Fader, { label: "Gain", value: gain ?? 1, min: 0, max: 1.5, defaultValue: 1, disabled: !!gainCall && gain === null, ...(gainCall && gain === null ? { display: "∿", title: "Modulated by a pattern" } : {}), format: pct, onChange: (v) => set("gain", v) }), _jsxs("div", { className: "strudel-device__main", children: [(synth || scaleMatch) && (_jsxs("div", { className: "strudel-device__selects", children: [synth && (_jsxs("label", { children: [_jsx("span", { children: "Sound" }), _jsx("select", { value: synth.value, onChange: (e) => onChange(setMiniAtom(code, sound, synth, e.target.value)), children: SYNTHS.map((s) => (_jsx("option", { children: s }, s))) })] })), scaleMatch && (_jsxs("label", { children: [_jsx("span", { children: "Key" }), _jsx("select", { value: scaleMatch[1].toUpperCase().replace(/^([A-G])B$/, "$1b"), onChange: (e) => onChange(setMiniSource(code, scale, `${e.target.value}${scaleMatch[2]}:${scaleMatch[3]}`)), children: NOTES.map((n) => (_jsx("option", { children: n }, n))) }), _jsx("select", { value: scaleMatch[3], onChange: (e) => onChange(setMiniSource(code, scale, `${scaleMatch[1]}${scaleMatch[2]}:${e.target.value}`)), children: (MODES.includes(scaleMatch[3]) ? MODES : [scaleMatch[3], ...MODES]).map((m) => (_jsx("option", { children: m }, m))) })] }))] })), pattern?.mini && _jsx(StepGrid, { mini: pattern.mini, onAtomChange: setAtom(pattern), label: `${name} steps` }), !pattern && sound?.mini && !synth && _jsx(StepGrid, { mini: sound.mini, onAtomChange: setAtom(sound), label: `${name} sounds` }), pattern?.error && _jsx("p", { className: "strudel-device__error", children: pattern.error.message }), _jsxs("div", { className: "strudel-device__knobs", children: [present.map((p) => {
94
+ return (_jsxs("section", { className: "strudel-device", "data-kind": track.kind, "data-audible": audible, "aria-label": name, children: [_jsxs("header", { className: "strudel-device__head", children: [_jsx("span", { className: "strudel-device__led", "aria-hidden": "true" }), _jsx(Icon, { size: 14, "aria-hidden": "true" }), _jsx("span", { className: "strudel-device__name", title: code.slice(track.start, track.end), children: name }), _jsx("button", { type: "button", className: "strudel-device__toggle", "data-kind": "mute", "aria-pressed": mix.muted?.has(track.index) || track.muted, onClick: () => onMix("mute"), title: "Mute", children: "M" }), _jsx("button", { type: "button", className: "strudel-device__toggle", "data-kind": "solo", "aria-pressed": !!mix.solo?.has(track.index), onClick: () => onMix("solo"), title: "Solo", children: "S" })] }), _jsxs("div", { className: "strudel-device__body", children: [_jsx(Fader, { label: "Gain", value: gain ?? 1, min: 0, max: 1.5, defaultValue: 1, disabled: !!gainCall && gain === null, ...(gainCall && gain === null ? { display: "∿", title: "Modulated by a pattern" } : {}), format: pct, onChange: (v) => set("gain", v) }), _jsxs("div", { className: "strudel-device__main", children: [(synth || scaleMatch) && (_jsxs("div", { className: "strudel-device__selects strudel-lcd", children: [synth && (_jsxs("label", { children: [_jsx("span", { children: "Sound" }), _jsx("select", { value: synth.value, onChange: (e) => onChange(setMiniAtom(code, sound, synth, e.target.value)), children: SYNTHS.map((s) => (_jsx("option", { children: s }, s))) })] })), scaleMatch && (_jsxs("label", { children: [_jsx("span", { children: "Key" }), _jsx("select", { value: scaleMatch[1].toUpperCase().replace(/^([A-G])B$/, "$1b"), onChange: (e) => onChange(setMiniSource(code, scale, `${e.target.value}${scaleMatch[2]}:${scaleMatch[3]}`)), children: NOTES.map((n) => (_jsx("option", { children: n }, n))) }), _jsx("select", { value: scaleMatch[3], onChange: (e) => onChange(setMiniSource(code, scale, `${scaleMatch[1]}${scaleMatch[2]}:${e.target.value}`)), children: (MODES.includes(scaleMatch[3]) ? MODES : [scaleMatch[3], ...MODES]).map((m) => (_jsx("option", { children: m }, m))) })] }))] })), pattern?.mini && _jsx(StepGrid, { mini: pattern.mini, onAtomChange: setAtom(pattern), label: `${name} steps` }), !pattern && sound?.mini && !synth && _jsx(StepGrid, { mini: sound.mini, onAtomChange: setAtom(sound), label: `${name} sounds` }), pattern?.error && _jsx("p", { className: "strudel-device__error", children: pattern.error.message }), _jsxs("div", { className: "strudel-device__knobs", children: [present.map((p) => {
84
95
  const call = findCall(chain, p);
85
96
  const value = firstNumber(call);
86
97
  const spec = STRUDEL_PARAMS[p];
@@ -88,7 +99,20 @@ function Device({ song, track, mix, onMix, onChange, }) {
88
99
  }), missing.length > 0 && (_jsxs("label", { className: "strudel-device__add", title: "Add an effect", children: [_jsx(Plus, { size: 14, "aria-hidden": "true" }), _jsxs("select", { "aria-label": `Add an effect to ${name}`, value: "", onChange: (e) => e.target.value && set(e.target.value, STRUDEL_PARAMS[e.target.value].default), children: [_jsx("option", { value: "", children: "Add\u2026" }), missing.map((p) => (_jsxs("option", { value: p, children: [STRUDEL_PARAMS[p].label, " (", p, ")"] }, p)))] })] }))] })] })] })] }));
89
100
  }
90
101
  /** Equipment generated from Strudel code. Controlled: `code` in, edited code out through `onChange`. */
91
- export function StrudelRack({ code, onChange, onPlayableChange, className }) {
102
+ export function StrudelRack({ code, onChange, onPlayableChange, className, layout = "rack", persistKey }) {
103
+ const [saved] = useState(() => load(persistKey));
104
+ const [mode, setMode] = useState(saved.mode ?? layout);
105
+ const [grid, setGrid] = useState(saved.grid ?? { order: [], sizes: {} });
106
+ useEffect(() => {
107
+ if (!persistKey)
108
+ return;
109
+ try {
110
+ localStorage.setItem(`strudel-rack:${persistKey}`, JSON.stringify({ mode, grid }));
111
+ }
112
+ catch {
113
+ // Storage unavailable (private mode): the layout just isn't remembered.
114
+ }
115
+ }, [persistKey, mode, grid]);
92
116
  const parsed = useMemo(() => {
93
117
  try {
94
118
  return { song: parseStrudel(code) };
@@ -117,7 +141,14 @@ export function StrudelRack({ code, onChange, onPlayableChange, className }) {
117
141
  const cps = song.tempo?.cps;
118
142
  const master = song.masterChain;
119
143
  const postgain = master ? firstNumber(findCall(master, "postgain")) : null;
120
- return (_jsxs("div", { className: `strudel-rack ${className ?? ""}`.trim(), children: [_jsxs("div", { className: "strudel-rack__master", role: "group", "aria-label": "Master", children: [_jsx("span", { className: "strudel-rack__title", children: "Master" }), _jsx(Knob, { label: "Tempo", value: cps && Number.isFinite(cps) ? cps : 0.5, min: 0.1, max: 2, defaultValue: 0.5, format: (v) => `${Math.round(v * 240)} bpm`, onChange: (v) => onChange(setTempo(song, v)) }), master && (_jsx(Knob, { label: "Output", value: postgain ?? 1, min: 0, max: 2, defaultValue: 1, format: pct, onChange: (v) => onChange(setMethod(code, master, "postgain", formatNumber(v))) })), _jsxs("span", { className: "strudel-rack__summary", children: [song.tracks.length, " track", song.tracks.length === 1 ? "" : "s", song.layout === "stack" ? " · stack" : song.layout === "labels" ? " · $:" : ""] })] }), song.tracks.length === 0 && _jsx("p", { className: "strudel-rack__error", children: "No pattern found." }), song.tracks.map((t) => (_jsx(Device, { song: song, track: t, mix: mix, onChange: onChange, onMix: (kind) => (kind === "mute" ? setMuted(toggle(muted, t.index)) : setSolo(toggle(solo, t.index))) }, t.index)))] }));
144
+ const masterStrip = (_jsxs("div", { className: "strudel-rack__master", role: "group", "aria-label": "Master", children: [_jsxs("span", { className: "strudel-rack__title", children: ["Master", _jsx("small", { children: "Strudel" })] }), _jsxs("output", { className: "strudel-lcd strudel-lcd--bpm", "aria-label": "Tempo", children: [Math.round((cps && Number.isFinite(cps) ? cps : 0.5) * 2400) / 10, _jsx("small", { children: "BPM" })] }), _jsx(Knob, { size: "lg", label: "Tempo", value: cps && Number.isFinite(cps) ? cps : 0.5, min: 0.1, max: 2, defaultValue: 0.5, format: (v) => `${Math.round(v * 240)} bpm`, onChange: (v) => onChange(setTempo(song, v)) }), master && (_jsx(Knob, { size: "lg", label: "Output", value: postgain ?? 1, min: 0, max: 2, defaultValue: 1, format: pct, onChange: (v) => onChange(setMethod(code, master, "postgain", formatNumber(v))) })), _jsxs("span", { className: "strudel-rack__summary", children: [song.tracks.length, " track", song.tracks.length === 1 ? "" : "s", song.layout === "stack" ? " · stack" : song.layout === "labels" ? " · $:" : ""] }), _jsx("div", { className: "strudel-rack__mode", role: "radiogroup", "aria-label": "Layout", children: ["rack", "grid"].map((m) => (_jsx("button", { type: "button", role: "radio", "aria-checked": mode === m, onClick: () => setMode(m), children: m }, m))) })] }));
145
+ const devices = song.tracks.map((t) => ({
146
+ key: `track-${t.index}`,
147
+ label: trackName(t),
148
+ span: 6,
149
+ node: (_jsx(Device, { song: song, track: t, mix: mix, onChange: onChange, onMix: (kind) => (kind === "mute" ? setMuted(toggle(muted, t.index)) : setSolo(toggle(solo, t.index))) })),
150
+ }));
151
+ return (_jsxs("div", { className: `strudel-rack ${className ?? ""}`.trim(), "data-mode": mode, children: [mode === "grid" ? (_jsx(RackGrid, { items: [{ key: "master", label: "Master", span: 12, node: masterStrip }, ...devices], layout: grid, onLayoutChange: setGrid })) : (_jsxs(_Fragment, { children: [masterStrip, devices.map((d) => (_jsx("div", { children: d.node }, d.key)))] })), song.tracks.length === 0 && _jsx("p", { className: "strudel-rack__error", children: "No pattern found." })] }));
121
152
  }
122
153
  export default StrudelRack;
123
154
  //# sourceMappingURL=StrudelRack.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StrudelRack.js","sourceRoot":"","sources":["../../src/strudel/StrudelRack.tsx"],"names":[],"mappings":";AAAA;;;oFAGoF;AACpF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,SAAS,EAAiB,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAA0E,MAAM,eAAe,CAAA;AAClJ,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAA;AAC7I,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAmBrC,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AACnF,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAA;AAEnD,uGAAuG;AACvG,MAAM,CAAC,MAAM,cAAc,GAA0B;IACnD,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;IACnF,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;IACtF,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;IACnD,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;IAClF,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1D,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE;IACvD,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IACxE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE;IAC3D,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;IACtD,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE;IAC5D,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IACpE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE;IACzD,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;IACtD,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;IACxD,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;IACtD,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE;IACtL,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IACpE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;IACnD,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IACpE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACzE,aAAa,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;CACnF,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AACxG,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;AAC7G,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,OAAO,CAAC,CAAA;AAInN,MAAM,WAAW,GAAG,CAAC,IAAwB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAChH,MAAM,UAAU,GAAG,CAAC,IAAwB,EAAe,EAAE;IAC3D,MAAM,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IACvB,OAAO,CAAC,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAChD,CAAC,CAAA;AAED,sFAAsF;AACtF,MAAM,UAAU,SAAS,CAAC,KAAmB;IAC3C,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC,KAAK,CAAA;IACnC,MAAM,IAAI,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IACjE,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;QACrF,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACvI,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IAC/D,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAA;IACnE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,IAAI,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;IAC7I,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AACxD,CAAC;AAED,SAAS,MAAM,CAAC,EACd,IAAI,EACJ,KAAK,EACL,GAAG,EACH,KAAK,EACL,QAAQ,GAOT;IACC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;IACrB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IACzB,MAAM,IAAI,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IACrD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,SAAS,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAC1J,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAClE,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IACnC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACtE,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACtG,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;IAClD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAClF,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;IAClC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;IAC7E,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAA;IACjG,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACrC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAA;IAErG,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,KAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC5G,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,EAAE,CAAC,CAAC,IAAc,EAAE,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;IAE/G,OAAO,CACL,mBAAS,SAAS,EAAC,gBAAgB,eAAY,KAAK,CAAC,IAAI,kBAAgB,OAAO,gBAAc,IAAI,aAChG,kBAAQ,SAAS,EAAC,sBAAsB,aACtC,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,EACrC,eAAM,SAAS,EAAC,sBAAsB,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,YAC7E,IAAI,GACA,EACP,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,wBAAwB,eAAW,MAAM,kBAAe,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAC,MAAM,kBAErK,EACT,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,wBAAwB,eAAW,MAAM,kBAAe,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAC,MAAM,kBAEvJ,IACF,EACT,eAAK,SAAS,EAAC,sBAAsB,aACnC,KAAC,KAAK,IACJ,KAAK,EAAC,MAAM,EACZ,KAAK,EAAE,IAAI,IAAI,CAAC,EAChB,GAAG,EAAE,CAAC,EACN,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,CAAC,EACf,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI,KAAK,IAAI,KACjC,CAAC,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACxF,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAC/B,EACF,eAAK,SAAS,EAAC,sBAAsB,aAClC,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,CACxB,eAAK,SAAS,EAAC,yBAAyB,aACrC,KAAK,IAAI,CACR,4BACE,mCAAkB,EAClB,iBAAQ,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,KAAM,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,YACpG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjB,2BAAiB,CAAC,IAAL,CAAC,CAAc,CAC7B,CAAC,GACK,IACH,CACT,EACA,UAAU,IAAI,CACb,4BACE,iCAAgB,EAChB,iBACE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAChE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,KAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAE3G,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,2BAAiB,CAAC,IAAL,CAAC,CAAc,CAC7B,CAAC,GACK,EACT,iBAAQ,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,KAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,YACvI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAE,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChF,2BAAiB,CAAC,IAAL,CAAC,CAAc,CAC7B,CAAC,GACK,IACH,CACT,IACG,CACP,EACA,OAAO,EAAE,IAAI,IAAI,KAAC,QAAQ,IAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,QAAQ,GAAI,EACzG,CAAC,OAAO,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,KAAC,QAAQ,IAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,SAAS,GAAI,EAC1H,OAAO,EAAE,KAAK,IAAI,YAAG,SAAS,EAAC,uBAAuB,YAAE,OAAO,CAAC,KAAK,CAAC,OAAO,GAAK,EACnF,eAAK,SAAS,EAAC,uBAAuB,aACnC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;wCACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAE,CAAA;wCAChC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;wCAC/B,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAE,CAAA;wCAC/B,OAAO,CACL,eAAa,SAAS,EAAC,sBAAsB,aAC3C,KAAC,IAAI,IACH,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,EAC5B,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,GAAG,EAAE,IAAI,CAAC,GAAG,KACT,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACnC,YAAY,EAAE,IAAI,CAAC,OAAO,EAC1B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,aAAa,EACpC,QAAQ,EAAE,KAAK,KAAK,IAAI,KACpB,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,kBAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACjI,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAC1B,EACF,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,wBAAwB,gBAAa,UAAU,IAAI,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,YAChJ,KAAC,CAAC,IAAC,IAAI,EAAE,EAAE,GAAI,GACR,KAfD,CAAC,CAgBL,CACP,CAAA;oCACH,CAAC,CAAC,EACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CACrB,iBAAO,SAAS,EAAC,qBAAqB,EAAC,KAAK,EAAC,eAAe,aAC1D,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,EACrC,gCACc,oBAAoB,IAAI,EAAE,EACtC,KAAK,EAAC,EAAE,EACR,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,OAAO,CAAC,aAE/F,iBAAQ,KAAK,EAAC,EAAE,0BAAc,EAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,kBAAgB,KAAK,EAAE,CAAC,aACrB,cAAc,CAAC,CAAC,CAAE,CAAC,KAAK,QAAI,CAAC,UADnB,CAAC,CAEL,CACV,CAAC,IACK,IACH,CACT,IACG,IACF,IACF,IACE,CACX,CAAA;AACH,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAoB;IAC3F,MAAM,MAAM,GAAG,OAAO,CAAC,GAA8C,EAAE;QACrE,IAAI,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAA;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;QACpG,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IACV,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAsB,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;IACxE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAsB,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;IACtE,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAClD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IAE3D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI;YAAE,gBAAgB,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;IAClD,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;IAEf,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CACL,cAAK,SAAS,EAAE,gBAAgB,SAAS,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,YACtD,YAAG,SAAS,EAAC,qBAAqB,EAAC,IAAI,EAAC,OAAO,YAC5C,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GACpC,GACA,CACP,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,GAAwB,EAAE,CAAS,EAAE,EAAE;QACrD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAChC,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,CAAA;IAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAA;IAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAE1E,OAAO,CACL,eAAK,SAAS,EAAE,gBAAgB,SAAS,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,aACtD,eAAK,SAAS,EAAC,sBAAsB,EAAC,IAAI,EAAC,OAAO,gBAAY,QAAQ,aACpE,eAAM,SAAS,EAAC,qBAAqB,uBAAc,EACnD,KAAC,IAAI,IACH,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAC9C,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,CAAC,EACN,YAAY,EAAE,GAAG,EACjB,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,EAC3C,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAC5C,EACD,MAAM,IAAI,CACT,KAAC,IAAI,IACH,KAAK,EAAC,QAAQ,EACd,KAAK,EAAE,QAAQ,IAAI,CAAC,EACpB,GAAG,EAAE,CAAC,EACN,GAAG,EAAE,CAAC,EACN,YAAY,EAAE,CAAC,EACf,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAC/E,CACH,EACD,gBAAM,SAAS,EAAC,uBAAuB,aACpC,IAAI,CAAC,MAAM,CAAC,MAAM,YAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAC7D,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAC1E,IACH,EACL,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,YAAG,SAAS,EAAC,qBAAqB,kCAAsB,EACpF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACtB,KAAC,MAAM,IAEL,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,CAAC,EACR,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IALjG,CAAC,CAAC,KAAK,CAMZ,CACH,CAAC,IACE,CACP,CAAA;AACH,CAAC;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"StrudelRack.js","sourceRoot":"","sources":["../../src/strudel/StrudelRack.tsx"],"names":[],"mappings":"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"}
@@ -12,6 +12,8 @@ export interface ControlProps {
12
12
  /** Shown instead of the value, e.g. "∿" for a modulated parameter. */
13
13
  display?: string;
14
14
  title?: string;
15
+ /** Knob only: "lg" for master controls. */
16
+ size?: "md" | "lg";
15
17
  }
16
18
  export declare function defaultFormat(v: number): string;
17
19
  export declare function Knob(props: ControlProps): import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../../src/strudel/controls.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,oDAAoD;IACpD,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAcD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/C;AAqED,wBAAgB,IAAI,CAAC,KAAK,EAAE,YAAY,+BAqBvC;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,YAAY,+BAcxC"}
1
+ {"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../../src/strudel/controls.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,oDAAoD;IACpD,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2CAA2C;IAC3C,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CACnB;AAcD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/C;AAgED,wBAAgB,IAAI,CAAC,KAAK,EAAE,YAAY,+BAmDvC;AAID,wBAAgB,KAAK,CAAC,KAAK,EAAE,YAAY,+BAqBxC"}
@@ -1,7 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /* The rack's hardware: a rotary knob and a fader. Both are ARIA sliders — drag (Shift for fine), arrow keys,
3
- Page Up/Down, Home/End — and double-click resets to the default. Values map logarithmically when `log`. */
4
- import { useRef } from "react";
2
+ /* The rack's hardware: a rotary knob (rubber skirt, machined cap, LED ring) and a channel fader (slotted
3
+ track, tick scale, chunky cap). Both are ARIA sliders — drag (Shift for fine), arrow keys, Page Up/Down,
4
+ Home/End — and double-click resets to the default. Values map logarithmically when `log`. */
5
+ import { useId, useRef } from "react";
5
6
  const clamp = (v, min, max) => Math.min(max, Math.max(min, v));
6
7
  function toUnit(v, { min, max, log }) {
7
8
  if (log && min > 0)
@@ -22,7 +23,7 @@ export function defaultFormat(v) {
22
23
  return v.toFixed(1);
23
24
  return v.toFixed(2);
24
25
  }
25
- function useDrag(props, axis, travel) {
26
+ function useDrag(props, travel) {
26
27
  const start = useRef(null);
27
28
  const set = (unit) => props.onChange(fromUnit(unit, props));
28
29
  const onPointerDown = (e) => {
@@ -30,14 +31,13 @@ function useDrag(props, axis, travel) {
30
31
  return;
31
32
  e.currentTarget.setPointerCapture(e.pointerId);
32
33
  e.currentTarget.focus();
33
- start.current = { pos: axis === "y" ? e.clientY : e.clientX, unit: toUnit(props.value, props) };
34
+ start.current = { pos: e.clientY, unit: toUnit(props.value, props) };
34
35
  };
35
36
  const onPointerMove = (e) => {
36
37
  const s = start.current;
37
38
  if (!s)
38
39
  return;
39
- const delta = axis === "y" ? s.pos - e.clientY : e.clientX - s.pos;
40
- set(s.unit + (delta / travel) * (e.shiftKey ? 0.2 : 1));
40
+ set(s.unit + ((s.pos - e.clientY) / travel) * (e.shiftKey ? 0.2 : 1));
41
41
  };
42
42
  const onPointerUp = () => {
43
43
  start.current = null;
@@ -82,28 +82,34 @@ function aria(props, format) {
82
82
  };
83
83
  }
84
84
  const ARC = 270;
85
- const polar = (deg, r) => {
85
+ const LEDS = 15;
86
+ const polar = (deg, r, c = 30) => {
86
87
  const a = ((deg - 90) * Math.PI) / 180;
87
- return [20 + r * Math.cos(a), 20 + r * Math.sin(a)];
88
- };
89
- const arc = (from, to, r) => {
90
- const [x1, y1] = polar(from, r);
91
- const [x2, y2] = polar(to, r);
92
- return `M ${x1} ${y1} A ${r} ${r} 0 ${to - from > 180 ? 1 : 0} 1 ${x2} ${y2}`;
88
+ return [c + r * Math.cos(a), c + r * Math.sin(a)];
93
89
  };
94
90
  export function Knob(props) {
91
+ const id = useId().replace(/:/g, "");
95
92
  const format = props.format ?? defaultFormat;
96
- const handlers = useDrag(props, "y", 160);
93
+ const handlers = useDrag(props, 160);
97
94
  const u = toUnit(props.value, props);
98
- const from = -ARC / 2;
99
- const to = from + ARC * u;
100
- const [px, py] = polar(to, 11);
101
- return (_jsxs("div", { className: "strudel-knob", "data-disabled": props.disabled || undefined, children: [_jsx("div", { className: "strudel-knob__dial", ...aria(props, format), ...handlers, children: _jsxs("svg", { viewBox: "0 0 40 40", "aria-hidden": "true", children: [_jsx("path", { d: arc(from, from + ARC, 16), className: "strudel-knob__track" }), !props.disabled && u > 0.001 && _jsx("path", { d: arc(from, to, 16), className: "strudel-knob__fill" }), _jsx("circle", { cx: "20", cy: "20", r: "11.5", className: "strudel-knob__cap" }), _jsx("line", { x1: "20", y1: "20", x2: px, y2: py, className: "strudel-knob__pointer" })] }) }), _jsx("span", { className: "strudel-knob__value", children: props.display ?? format(props.value) }), _jsx("span", { className: "strudel-knob__label", children: props.label })] }));
95
+ const angle = -ARC / 2 + ARC * u;
96
+ // A bipolar parameter (pan, speed) lights from the centre; the rest light from the left.
97
+ const bipolar = props.min < 0 || props.label === "Pan";
98
+ const zero = bipolar ? toUnit(props.min < 0 ? 0 : (props.min + props.max) / 2, props) : 0;
99
+ const lit = (i) => {
100
+ const t = i / (LEDS - 1);
101
+ return !props.disabled && (bipolar ? (t >= Math.min(zero, u) - 0.001 && t <= Math.max(zero, u) + 0.001) : t <= u + 0.001);
102
+ };
103
+ return (_jsxs("div", { className: "strudel-knob", "data-size": props.size ?? "md", "data-disabled": props.disabled || undefined, children: [_jsx("div", { className: "strudel-knob__dial", ...aria(props, format), ...handlers, children: _jsxs("svg", { viewBox: "0 0 60 60", "aria-hidden": "true", children: [_jsxs("defs", { children: [_jsxs("radialGradient", { id: `${id}-skirt`, cx: "50%", cy: "35%", r: "70%", children: [_jsx("stop", { offset: "0", stopColor: "#4a4d55" }), _jsx("stop", { offset: ".6", stopColor: "#1d1f24" }), _jsx("stop", { offset: "1", stopColor: "#0b0c0e" })] }), _jsxs("linearGradient", { id: `${id}-cap`, x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0", stopColor: "#f2f3f5" }), _jsx("stop", { offset: ".45", stopColor: "#a9adb5" }), _jsx("stop", { offset: ".55", stopColor: "#8a8f98" }), _jsx("stop", { offset: "1", stopColor: "#d7dae0" })] })] }), Array.from({ length: LEDS }, (_, i) => {
104
+ const [x, y] = polar(-ARC / 2 + (ARC * i) / (LEDS - 1), 27);
105
+ return _jsx("circle", { cx: x, cy: y, r: "1.7", className: "strudel-knob__led", "data-on": lit(i) || undefined }, i);
106
+ }), _jsx("circle", { cx: "30", cy: "31.5", r: "19.5", className: "strudel-knob__shadow" }), _jsx("circle", { cx: "30", cy: "30", r: "19", fill: `url(#${id}-skirt)`, className: "strudel-knob__skirt" }), _jsxs("g", { transform: `rotate(${angle} 30 30)`, children: [Array.from({ length: 24 }, (_, i) => (_jsx("line", { x1: "30", y1: "11.6", x2: "30", y2: "14", transform: `rotate(${i * 15} 30 30)`, className: "strudel-knob__ridge" }, i))), _jsx("circle", { cx: "30", cy: "30", r: "12.5", fill: `url(#${id}-cap)`, className: "strudel-knob__cap" }), _jsx("circle", { cx: "30", cy: "30", r: "12.5", className: "strudel-knob__brush" }), _jsx("line", { x1: "30", y1: "19.5", x2: "30", y2: "26", className: "strudel-knob__pointer" })] })] }) }), _jsx("span", { className: "strudel-knob__value", children: props.display ?? format(props.value) }), _jsx("span", { className: "strudel-knob__label", children: props.label })] }));
102
107
  }
108
+ const TICKS = [10, 8, 6, 4, 2, 0];
103
109
  export function Fader(props) {
104
110
  const format = props.format ?? defaultFormat;
105
- const handlers = useDrag(props, "y", 90);
111
+ const handlers = useDrag(props, 104);
106
112
  const u = toUnit(props.value, props);
107
- return (_jsxs("div", { className: "strudel-fader", "data-disabled": props.disabled || undefined, children: [_jsx("span", { className: "strudel-fader__value", children: props.display ?? format(props.value) }), _jsxs("div", { className: "strudel-fader__track", ...aria(props, format), ...handlers, "aria-orientation": "vertical", children: [_jsx("div", { className: "strudel-fader__fill", style: { height: `${u * 100}%` } }), _jsx("div", { className: "strudel-fader__thumb", style: { bottom: `calc(${u * 100}% - 5px)` } })] }), _jsx("span", { className: "strudel-fader__label", children: props.label })] }));
113
+ return (_jsxs("div", { className: "strudel-fader", "data-disabled": props.disabled || undefined, children: [_jsx("span", { className: "strudel-fader__value", children: props.display ?? format(props.value) }), _jsxs("div", { className: "strudel-fader__body", children: [_jsx("div", { className: "strudel-fader__scale", "aria-hidden": "true", children: TICKS.map((t) => (_jsx("span", { children: t }, t))) }), _jsxs("div", { className: "strudel-fader__track", ...aria(props, format), ...handlers, "aria-orientation": "vertical", children: [_jsx("div", { className: "strudel-fader__slot" }), _jsx("div", { className: "strudel-fader__cap", style: { bottom: `calc(${u} * (100% - 22px))` } })] })] }), _jsx("span", { className: "strudel-fader__label", children: props.label })] }));
108
114
  }
109
115
  //# sourceMappingURL=controls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"controls.js","sourceRoot":"","sources":["../../src/strudel/controls.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controls.js","sourceRoot":"","sources":["../../src/strudel/controls.tsx"],"names":[],"mappings":";AAAA;;+FAE+F;AAC/F,OAAO,EAAE,KAAK,EAAE,MAAM,EAAyC,MAAM,OAAO,CAAA;AAoB5E,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;AAEtF,SAAS,MAAM,CAAC,CAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAA6C;IACrF,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;IACnF,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;AACjD,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAA6C;IACvF,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACxB,OAAO,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACrB,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IAClD,IAAI,CAAC,IAAI,GAAG;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACjC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAChC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AACrB,CAAC;AAED,SAAS,OAAO,CAAC,KAAmB,EAAE,MAAc;IAClD,MAAM,KAAK,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAA;IAChE,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IACnE,MAAM,aAAa,GAAG,CAAC,CAA4B,EAAE,EAAE;QACrD,IAAI,KAAK,CAAC,QAAQ;YAAE,OAAM;QAC1B,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAC9C,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,CAAA;QACvB,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAA;IACtE,CAAC,CAAA;IACD,MAAM,aAAa,GAAG,CAAC,CAA4B,EAAE,EAAE;QACrD,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAA;QACvB,IAAI,CAAC,CAAC;YAAE,OAAM;QACd,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACvE,CAAC,CAAA;IACD,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;IACtB,CAAC,CAAA;IACD,MAAM,SAAS,GAAG,CAAC,CAA6B,EAAE,EAAE;QAClD,IAAI,KAAK,CAAC,QAAQ;YAAE,OAAM;QAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QACpC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;QACrC,MAAM,IAAI,GAA2B;YACnC,OAAO,EAAE,CAAC,GAAG,IAAI;YACjB,UAAU,EAAE,CAAC,GAAG,IAAI;YACpB,SAAS,EAAE,CAAC,GAAG,IAAI;YACnB,SAAS,EAAE,CAAC,GAAG,IAAI;YACnB,MAAM,EAAE,CAAC,GAAG,GAAG;YACf,QAAQ,EAAE,CAAC,GAAG,GAAG;YACjB,IAAI,EAAE,CAAC;YACP,GAAG,EAAE,CAAC;SACP,CAAA;QACD,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;YAAE,OAAM;QAC5B,CAAC,CAAC,cAAc,EAAE,CAAA;QAClB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAE,CAAC,CAAA;IACnB,CAAC,CAAA;IACD,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;YAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAC7F,CAAC,CAAA;IACD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,CAAA;AAC9G,CAAC;AAED,SAAS,IAAI,CAAC,KAAmB,EAAE,MAA6B;IAC9D,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,YAAY,EAAE,KAAK,CAAC,KAAK;QACzB,eAAe,EAAE,KAAK,CAAC,GAAG;QAC1B,eAAe,EAAE,KAAK,CAAC,GAAG;QAC1B,eAAe,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,gBAAgB,EAAE,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QACtD,eAAe,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;QAC5C,KAAK,EAAE,KAAK,CAAC,KAAK;KACV,CAAA;AACZ,CAAC;AAED,MAAM,GAAG,GAAG,GAAG,CAAA;AACf,MAAM,IAAI,GAAG,EAAE,CAAA;AACf,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,CAAS,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE;IAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAA;IACtC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAU,CAAA;AAC5D,CAAC,CAAA;AAED,MAAM,UAAU,IAAI,CAAC,KAAmB;IACtC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,aAAa,CAAA;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACpC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;IAChC,yFAAyF;IACzF,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAA;IACtD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACzF,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE;QACxB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;QACxB,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAA;IAC3H,CAAC,CAAA;IACD,OAAO,CACL,eAAK,SAAS,EAAC,cAAc,eAAY,KAAK,CAAC,IAAI,IAAI,IAAI,mBAAiB,KAAK,CAAC,QAAQ,IAAI,SAAS,aACrG,cAAK,SAAS,EAAC,oBAAoB,KAAK,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,KAAM,QAAQ,YACvE,eAAK,OAAO,EAAC,WAAW,iBAAa,MAAM,aACzC,2BACE,0BAAgB,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAC,KAAK,EAAC,EAAE,EAAC,KAAK,EAAC,CAAC,EAAC,KAAK,aAC1D,eAAM,MAAM,EAAC,GAAG,EAAC,SAAS,EAAC,SAAS,GAAG,EACvC,eAAM,MAAM,EAAC,IAAI,EAAC,SAAS,EAAC,SAAS,GAAG,EACxC,eAAM,MAAM,EAAC,GAAG,EAAC,SAAS,EAAC,SAAS,GAAG,IACxB,EACjB,0BAAgB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,aAC1D,eAAM,MAAM,EAAC,GAAG,EAAC,SAAS,EAAC,SAAS,GAAG,EACvC,eAAM,MAAM,EAAC,KAAK,EAAC,SAAS,EAAC,SAAS,GAAG,EACzC,eAAM,MAAM,EAAC,KAAK,EAAC,SAAS,EAAC,SAAS,GAAG,EACzC,eAAM,MAAM,EAAC,GAAG,EAAC,SAAS,EAAC,SAAS,GAAG,IACxB,IACZ,EACN,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;4BACrC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;4BAC3D,OAAO,iBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAC,KAAK,EAAC,SAAS,EAAC,mBAAmB,aAAU,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,IAAnF,CAAC,CAAsF,CAAA;wBAC7G,CAAC,CAAC,EACF,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,MAAM,EAAC,CAAC,EAAC,MAAM,EAAC,SAAS,EAAC,sBAAsB,GAAG,EACtE,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAC,qBAAqB,GAAG,EAE5F,aAAG,SAAS,EAAE,UAAU,KAAK,SAAS,aACnC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACpC,eAAc,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAC,qBAAqB,IAA1G,CAAC,CAA4G,CACzH,CAAC,EACF,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,MAAM,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAC,mBAAmB,GAAG,EAC1F,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,MAAM,EAAC,SAAS,EAAC,qBAAqB,GAAG,EACnE,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,SAAS,EAAC,uBAAuB,GAAG,IAC1E,IACA,GACF,EACN,eAAM,SAAS,EAAC,qBAAqB,YAAE,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAQ,EACnF,eAAM,SAAS,EAAC,qBAAqB,YAAE,KAAK,CAAC,KAAK,GAAQ,IACtD,CACP,CAAA;AACH,CAAC;AAED,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAEjC,MAAM,UAAU,KAAK,CAAC,KAAmB;IACvC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,aAAa,CAAA;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACpC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACpC,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,mBAAgB,KAAK,CAAC,QAAQ,IAAI,SAAS,aACvE,eAAM,SAAS,EAAC,sBAAsB,YAAE,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAQ,EACpF,eAAK,SAAS,EAAC,qBAAqB,aAClC,cAAK,SAAS,EAAC,sBAAsB,iBAAa,MAAM,YACrD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,yBAAe,CAAC,IAAL,CAAC,CAAY,CACzB,CAAC,GACE,EACN,eAAK,SAAS,EAAC,sBAAsB,KAAK,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,KAAM,QAAQ,sBAAmB,UAAU,aACtG,cAAK,SAAS,EAAC,qBAAqB,GAAG,EACvC,cAAK,SAAS,EAAC,oBAAoB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,mBAAmB,EAAE,GAAI,IACnF,IACF,EACN,eAAM,SAAS,EAAC,sBAAsB,YAAE,KAAK,CAAC,KAAK,GAAQ,IACvD,CACP,CAAA;AACH,CAAC"}
@@ -3,6 +3,8 @@ export type { StrudelPlayerProps } from "./StrudelPlayer.js";
3
3
  export { StrudelRack, STRUDEL_PARAMS, trackName } from "./StrudelRack.js";
4
4
  export type { StrudelRackProps } from "./StrudelRack.js";
5
5
  export { StepGrid } from "./StepGrid.js";
6
+ export { RackGrid } from "./RackGrid.js";
7
+ export type { GridItem, GridLayout, RackGridProps } from "./RackGrid.js";
6
8
  export type { StepGridProps } from "./StepGrid.js";
7
9
  export { Fader, Knob } from "./controls.js";
8
10
  export type { ControlProps } from "./controls.js";