@patchbayhq/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,93 @@
1
+ import { type GridCell, type GridDirection, type GridProps, type StepKey, type StepNote, type StepSequencerProps } from "./api";
2
+ export type GridState = GridProps;
3
+ export type StepSequencerState = StepSequencerProps;
4
+ export type GridCellChange = {
5
+ active: boolean;
6
+ cells: GridCell[];
7
+ directions: GridDirection[];
8
+ index: number;
9
+ type: "cell";
10
+ y: number;
11
+ };
12
+ export type GridDirectionChange = {
13
+ cells: GridCell[];
14
+ direction: GridDirection;
15
+ directions: GridDirection[];
16
+ index: number;
17
+ type: "direction";
18
+ };
19
+ export type GridStateChange = GridCellChange | GridDirectionChange;
20
+ export type StepKeyChange = {
21
+ activeKey: StepKey;
22
+ bars: number;
23
+ key: StepKey;
24
+ loop: StepSequencerState["loop"];
25
+ notes: StepNote[];
26
+ phase: "press" | "release";
27
+ pressed: boolean;
28
+ type: "key";
29
+ };
30
+ export type StepCellChange = {
31
+ active: boolean;
32
+ activeKey: StepKey;
33
+ bars: number;
34
+ lane: number;
35
+ loop: StepSequencerState["loop"];
36
+ notes: StepNote[];
37
+ step: number;
38
+ type: "cell";
39
+ };
40
+ export type StepLoopChange = {
41
+ activeKey: StepKey;
42
+ bars: number;
43
+ loop: StepSequencerState["loop"];
44
+ notes: StepNote[];
45
+ type: "loop";
46
+ };
47
+ export type StepSequencerStateChange = StepKeyChange | StepCellChange | StepLoopChange;
48
+ export declare const gridColumnCount = 16;
49
+ export declare const gridRowCount = 16;
50
+ export declare const stepLaneCount = 8;
51
+ export declare const stepStepCount = 16;
52
+ export declare const stepStepsPerBar = 4;
53
+ export type StepNoteAccent = "orange" | "blue";
54
+ export declare const stepKeys: readonly ["C4", "C#4", "D4", "D#4", "E4", "F4", "F#4", "G4", "G#4"];
55
+ export declare function createGridState(input?: Partial<GridProps>): GridState;
56
+ export declare function toggleGridCell(stateInput: GridState, index: number, y: number): {
57
+ change: GridCellChange;
58
+ state: GridState;
59
+ };
60
+ export declare function cycleGridDirection(stateInput: GridState, index: number): {
61
+ change: GridDirectionChange;
62
+ state: GridState;
63
+ };
64
+ export declare function quantizeGridY(value: number): number;
65
+ export declare function gridRowFromY(value: number): number;
66
+ export declare function createStepSequencerState(input?: Partial<StepSequencerProps>): StepSequencerState;
67
+ export declare function selectStepKey(stateInput: StepSequencerState, key: StepKey): {
68
+ change: StepKeyChange;
69
+ state: StepSequencerState;
70
+ };
71
+ export declare function createStepKeyChange(stateInput: StepSequencerState, key: StepKey, pressed: boolean): StepKeyChange;
72
+ export declare function selectStepLoopBar(stateInput: StepSequencerState, bar: number): {
73
+ change: StepLoopChange;
74
+ state: StepSequencerState;
75
+ };
76
+ export declare function setStepLoopStart(stateInput: StepSequencerState, start: number): {
77
+ change: StepLoopChange;
78
+ state: StepSequencerState;
79
+ };
80
+ export declare function setStepLoopEnd(stateInput: StepSequencerState, end: number): {
81
+ change: StepLoopChange;
82
+ state: StepSequencerState;
83
+ };
84
+ export declare function toggleStepNote(stateInput: StepSequencerState, step: number, lane: number): {
85
+ change: StepCellChange;
86
+ state: StepSequencerState;
87
+ };
88
+ export declare function stepLoopBarState(loop: StepSequencerState["loop"], bar: number): {
89
+ active: boolean;
90
+ inLoop: boolean;
91
+ };
92
+ export declare function stepNoteAccent(step: number): StepNoteAccent;
93
+ //# sourceMappingURL=sequencers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequencers.d.ts","sourceRoot":"","sources":["../src/sequencers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,240 @@
1
+ import { gridPropsSchema, stepSequencerPropsSchema, } from "./api";
2
+ export const gridColumnCount = 16;
3
+ export const gridRowCount = 16;
4
+ export const stepLaneCount = 8;
5
+ export const stepStepCount = 16;
6
+ export const stepStepsPerBar = 4;
7
+ export const stepKeys = [
8
+ "C4",
9
+ "C#4",
10
+ "D4",
11
+ "D#4",
12
+ "E4",
13
+ "F4",
14
+ "F#4",
15
+ "G4",
16
+ "G#4",
17
+ ];
18
+ const directionCycle = [
19
+ "right",
20
+ "left",
21
+ "off",
22
+ ];
23
+ const loopLengths = [1, 2, 4];
24
+ const sameRowTolerance = 1 / (gridRowCount - 1) / 2;
25
+ export function createGridState(input = {}) {
26
+ const state = gridPropsSchema.parse(input);
27
+ return {
28
+ ...state,
29
+ cells: state.cells.map((cell) => ({ ...cell })),
30
+ directions: [...state.directions],
31
+ };
32
+ }
33
+ export function toggleGridCell(stateInput, index, y) {
34
+ const state = createGridState(stateInput);
35
+ const cellIndex = clampInteger(index, 1, state.cells.length) - 1;
36
+ const current = state.cells[cellIndex] ?? defaultGridCell();
37
+ const nextY = quantizeGridY(y);
38
+ const shouldDeactivate = current.active && Math.abs(current.y - nextY) <= sameRowTolerance;
39
+ const nextCell = shouldDeactivate
40
+ ? { ...current, active: false }
41
+ : { ...current, active: true, y: nextY };
42
+ const cells = state.cells.map((cell, nextIndex) => nextIndex === cellIndex ? nextCell : cell);
43
+ const nextState = createGridState({ ...state, cells });
44
+ return {
45
+ change: {
46
+ active: nextCell.active,
47
+ cells: nextState.cells,
48
+ directions: nextState.directions,
49
+ index: cellIndex + 1,
50
+ type: "cell",
51
+ y: nextCell.y,
52
+ },
53
+ state: nextState,
54
+ };
55
+ }
56
+ export function cycleGridDirection(stateInput, index) {
57
+ const state = createGridState(stateInput);
58
+ const directionIndex = clampInteger(index, 1, state.directions.length) - 1;
59
+ const current = normalizeDirection(state.directions[directionIndex]);
60
+ const nextDirection = directionCycle[(directionCycle.indexOf(current) + 1) % directionCycle.length] ?? "right";
61
+ const directions = state.directions.map((direction, nextIndex) => nextIndex === directionIndex ? nextDirection : direction);
62
+ const nextState = createGridState({ ...state, directions });
63
+ return {
64
+ change: {
65
+ cells: nextState.cells,
66
+ direction: nextDirection,
67
+ directions: nextState.directions,
68
+ index: directionIndex + 1,
69
+ type: "direction",
70
+ },
71
+ state: nextState,
72
+ };
73
+ }
74
+ export function quantizeGridY(value) {
75
+ return (Math.round(clamp(value, 0, 1) * (gridRowCount - 1)) / (gridRowCount - 1));
76
+ }
77
+ export function gridRowFromY(value) {
78
+ return (gridRowCount - Math.round(quantizeGridY(value) * (gridRowCount - 1)));
79
+ }
80
+ export function createStepSequencerState(input = {}) {
81
+ const state = stepSequencerPropsSchema.parse(input);
82
+ return {
83
+ ...state,
84
+ loop: { ...state.loop },
85
+ notes: state.notes.map((note) => ({ ...note })),
86
+ };
87
+ }
88
+ export function selectStepKey(stateInput, key) {
89
+ const state = createStepSequencerState(stateInput);
90
+ const nextState = createStepSequencerState({ ...state, activeKey: key });
91
+ return {
92
+ change: {
93
+ activeKey: nextState.activeKey,
94
+ bars: nextState.bars,
95
+ key: nextState.activeKey,
96
+ loop: nextState.loop,
97
+ notes: nextState.notes,
98
+ phase: "press",
99
+ pressed: true,
100
+ type: "key",
101
+ },
102
+ state: nextState,
103
+ };
104
+ }
105
+ export function createStepKeyChange(stateInput, key, pressed) {
106
+ const state = createStepSequencerState(stateInput);
107
+ return {
108
+ activeKey: state.activeKey,
109
+ bars: state.bars,
110
+ key,
111
+ loop: state.loop,
112
+ notes: state.notes,
113
+ phase: pressed ? "press" : "release",
114
+ pressed,
115
+ type: "key",
116
+ };
117
+ }
118
+ export function selectStepLoopBar(stateInput, bar) {
119
+ const state = createStepSequencerState(stateInput);
120
+ const barCount = Math.ceil(stepStepCount / stepStepsPerBar);
121
+ const nextStartBar = clampInteger(bar, 1, barCount) - 1;
122
+ const currentStartBar = Math.floor((state.loop.start - 1) / stepStepsPerBar);
123
+ const currentLoopBars = Math.max(1, Math.ceil((state.loop.end - state.loop.start + 1) / stepStepsPerBar));
124
+ const nextLoopBars = currentStartBar === nextStartBar
125
+ ? nextLoopLength(nextStartBar, currentLoopBars, barCount)
126
+ : 1;
127
+ const loop = {
128
+ start: nextStartBar * stepStepsPerBar + 1,
129
+ end: nextStartBar * stepStepsPerBar + nextLoopBars * stepStepsPerBar,
130
+ };
131
+ const nextState = createStepSequencerState({ ...state, loop });
132
+ return {
133
+ change: {
134
+ activeKey: nextState.activeKey,
135
+ bars: nextState.bars,
136
+ loop: nextState.loop,
137
+ notes: nextState.notes,
138
+ type: "loop",
139
+ },
140
+ state: nextState,
141
+ };
142
+ }
143
+ export function setStepLoopStart(stateInput, start) {
144
+ const state = createStepSequencerState(stateInput);
145
+ const loop = {
146
+ start: clampInteger(start, 1, state.loop.end),
147
+ end: state.loop.end,
148
+ };
149
+ return createStepLoopResult(state, loop);
150
+ }
151
+ export function setStepLoopEnd(stateInput, end) {
152
+ const state = createStepSequencerState(stateInput);
153
+ const loop = {
154
+ start: state.loop.start,
155
+ end: clampInteger(end, state.loop.start, stepStepCount),
156
+ };
157
+ return createStepLoopResult(state, loop);
158
+ }
159
+ export function toggleStepNote(stateInput, step, lane) {
160
+ const state = createStepSequencerState(stateInput);
161
+ const nextStep = clampInteger(step, 1, stepStepCount);
162
+ const nextLane = clampInteger(lane, 1, stepLaneCount);
163
+ const exists = state.notes.some((note) => note.step === nextStep && note.lane === nextLane);
164
+ const notes = exists
165
+ ? state.notes.filter((note) => note.step !== nextStep || note.lane !== nextLane)
166
+ : [
167
+ ...state.notes,
168
+ {
169
+ duration: 1,
170
+ lane: nextLane,
171
+ step: nextStep,
172
+ velocity: 1,
173
+ },
174
+ ];
175
+ const nextState = createStepSequencerState({ ...state, notes });
176
+ return {
177
+ change: {
178
+ active: !exists,
179
+ activeKey: nextState.activeKey,
180
+ bars: nextState.bars,
181
+ lane: nextLane,
182
+ loop: nextState.loop,
183
+ notes: nextState.notes,
184
+ step: nextStep,
185
+ type: "cell",
186
+ },
187
+ state: nextState,
188
+ };
189
+ }
190
+ export function stepLoopBarState(loop, bar) {
191
+ const start = (bar - 1) * stepStepsPerBar + 1;
192
+ const end = start + stepStepsPerBar - 1;
193
+ return {
194
+ active: start === loop.start,
195
+ inLoop: start <= loop.end && end >= loop.start,
196
+ };
197
+ }
198
+ export function stepNoteAccent(step) {
199
+ return (clampInteger(step, 1, stepStepCount) - 1) % stepStepsPerBar === 0
200
+ ? "blue"
201
+ : "orange";
202
+ }
203
+ function createStepLoopResult(state, loop) {
204
+ const nextState = createStepSequencerState({ ...state, loop });
205
+ return {
206
+ change: {
207
+ activeKey: nextState.activeKey,
208
+ bars: nextState.bars,
209
+ loop: nextState.loop,
210
+ notes: nextState.notes,
211
+ type: "loop",
212
+ },
213
+ state: nextState,
214
+ };
215
+ }
216
+ function defaultGridCell() {
217
+ return {
218
+ active: false,
219
+ color: "blue",
220
+ y: 0.5,
221
+ };
222
+ }
223
+ function normalizeDirection(direction) {
224
+ return direction === "left" || direction === "off" || direction === "right"
225
+ ? direction
226
+ : "right";
227
+ }
228
+ function nextLoopLength(startBar, currentLength, barCount) {
229
+ const maxLength = barCount - startBar;
230
+ const allowed = loopLengths.filter((length) => length <= maxLength);
231
+ const currentIndex = allowed.indexOf(currentLength);
232
+ return allowed[(currentIndex + 1) % allowed.length] ?? 1;
233
+ }
234
+ function clampInteger(value, min, max) {
235
+ return Math.round(clamp(value, min, max));
236
+ }
237
+ function clamp(value, min, max) {
238
+ return Math.min(max, Math.max(min, value));
239
+ }
240
+ //# sourceMappingURL=sequencers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequencers.js","sourceRoot":"","sources":["../src/sequencers.ts"],"names":[],"mappings":"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"}