solid-pianoroll 0.0.24 → 0.0.25
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/dist/{cjs/index.js → dev.cjs} +408 -430
- package/dist/dev.css +212 -0
- package/dist/dev.js +1330 -0
- package/dist/dev.jsx +1130 -0
- package/dist/index.cjs +1330 -0
- package/dist/index.css +212 -0
- package/dist/{types/usePianoRollState.d.ts → index.d.ts} +38 -6
- package/dist/{esm/index.js → index.js} +412 -429
- package/dist/index.jsx +1130 -0
- package/package.json +43 -34
- package/dist/cjs/index.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/source/PianoRoll.jsx +0 -82
- package/dist/source/PianoRollContext.jsx +0 -11
- package/dist/source/PianoRollGrid.jsx +0 -64
- package/dist/source/PianoRollKeys.jsx +0 -72
- package/dist/source/PianoRollNotes.jsx +0 -160
- package/dist/source/PianoRollNotesScroller.jsx +0 -16
- package/dist/source/PianoRollScale.jsx +0 -43
- package/dist/source/PianoRollScrollZoomViewPort.jsx +0 -49
- package/dist/source/PianoRollTrackList.jsx +0 -27
- package/dist/source/PianoRollTrackListScroller.jsx +0 -16
- package/dist/source/index.jsx +0 -5
- package/dist/source/types.js +0 -1
- package/dist/source/useBoundingClientRect.js +0 -29
- package/dist/source/useNotes.js +0 -23
- package/dist/source/usePianoRollGrid.js +0 -45
- package/dist/source/usePianoRollState.js +0 -126
- package/dist/source/viewport/PlayHead.jsx +0 -43
- package/dist/source/viewport/ScrollZoomContainer.jsx +0 -104
- package/dist/source/viewport/ScrollZoomViewPort.jsx +0 -31
- package/dist/source/viewport/ZoomSliderControl.jsx +0 -29
- package/dist/source/viewport/createViewPortDimension.js +0 -51
- package/dist/types/PianoRoll.d.ts +0 -8
- package/dist/types/PianoRollContext.d.ts +0 -45
- package/dist/types/PianoRollGrid.d.ts +0 -2
- package/dist/types/PianoRollKeys.d.ts +0 -9
- package/dist/types/PianoRollNotes.d.ts +0 -5
- package/dist/types/PianoRollNotesScroller.d.ts +0 -3
- package/dist/types/PianoRollScale.d.ts +0 -2
- package/dist/types/PianoRollScrollZoomViewPort.d.ts +0 -3
- package/dist/types/PianoRollTrackList.d.ts +0 -2
- package/dist/types/PianoRollTrackListScroller.d.ts +0 -3
- package/dist/types/index.d.ts +0 -6
- package/dist/types/types.d.ts +0 -8
- package/dist/types/useBoundingClientRect.d.ts +0 -3
- package/dist/types/useNotes.d.ts +0 -9
- package/dist/types/usePianoRollGrid.d.ts +0 -13
- package/dist/types/viewport/PlayHead.d.ts +0 -8
- package/dist/types/viewport/ScrollZoomContainer.d.ts +0 -8
- package/dist/types/viewport/ScrollZoomViewPort.d.ts +0 -39
- package/dist/types/viewport/ZoomSliderControl.d.ts +0 -6
- package/dist/types/viewport/createViewPortDimension.d.ts +0 -40
|
@@ -4,36 +4,12 @@ var web = require('solid-js/web');
|
|
|
4
4
|
var solidJs = require('solid-js');
|
|
5
5
|
var store = require('solid-js/store');
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var insertAt = ref.insertAt;
|
|
10
|
-
if (!css || typeof document === 'undefined') {
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
var head = document.head || document.getElementsByTagName('head')[0];
|
|
14
|
-
var style = document.createElement('style');
|
|
15
|
-
style.type = 'text/css';
|
|
16
|
-
if (insertAt === 'top') {
|
|
17
|
-
if (head.firstChild) {
|
|
18
|
-
head.insertBefore(style, head.firstChild);
|
|
19
|
-
} else {
|
|
20
|
-
head.appendChild(style);
|
|
21
|
-
}
|
|
22
|
-
} else {
|
|
23
|
-
head.appendChild(style);
|
|
24
|
-
}
|
|
25
|
-
if (style.styleSheet) {
|
|
26
|
-
style.styleSheet.cssText = css;
|
|
27
|
-
} else {
|
|
28
|
-
style.appendChild(document.createTextNode(css));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
31
9
|
|
|
32
|
-
|
|
33
|
-
var
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const defaultState = {
|
|
10
|
+
// src/PianoRoll.module.css
|
|
11
|
+
var _default = {};
|
|
12
|
+
var defaultState = {
|
|
37
13
|
ppq: 0,
|
|
38
14
|
mode: "keys",
|
|
39
15
|
position: 0,
|
|
@@ -49,65 +25,87 @@ const defaultState = {
|
|
|
49
25
|
tracks: [],
|
|
50
26
|
selectedTrackIndex: 0,
|
|
51
27
|
pressedKeys: {},
|
|
52
|
-
notesScrollerClientRect: {
|
|
53
|
-
|
|
54
|
-
width: 0,
|
|
55
|
-
top: 0,
|
|
56
|
-
height: 0
|
|
57
|
-
},
|
|
58
|
-
tracksScrollerClientRect: {
|
|
59
|
-
left: 0,
|
|
60
|
-
width: 0,
|
|
61
|
-
top: 0,
|
|
62
|
-
height: 0
|
|
63
|
-
}
|
|
28
|
+
notesScrollerClientRect: { left: 0, width: 0, top: 0, height: 0 },
|
|
29
|
+
tracksScrollerClientRect: { left: 0, width: 0, top: 0, height: 0 }
|
|
64
30
|
};
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
31
|
+
var propNameToHandlerName = /* @__PURE__ */ __name((name) => `on${name[0]?.toUpperCase()}${name.slice(1)}Change`, "propNameToHandlerName");
|
|
32
|
+
var pianoRollStatePropNames = [
|
|
33
|
+
...Object.keys(defaultState),
|
|
34
|
+
...Object.keys(defaultState).map(propNameToHandlerName),
|
|
35
|
+
"onNoteChange",
|
|
36
|
+
"onInsertNote",
|
|
37
|
+
"onRemoveNote",
|
|
38
|
+
"onNoteDown",
|
|
39
|
+
"onNoteUp",
|
|
40
|
+
"isKeyDown",
|
|
41
|
+
"snapValueToGridIfEnabled"
|
|
42
|
+
];
|
|
43
|
+
var createPianoRollstate = /* @__PURE__ */ __name((initialState) => {
|
|
68
44
|
const [state, setState] = store.createStore({
|
|
69
45
|
...defaultState,
|
|
70
46
|
...initialState
|
|
71
47
|
});
|
|
72
|
-
const handlers = Object.fromEntries(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
48
|
+
const handlers = Object.fromEntries(
|
|
49
|
+
Object.entries(state).map((entry) => {
|
|
50
|
+
const handlerName = propNameToHandlerName(entry[0]);
|
|
51
|
+
return [
|
|
52
|
+
handlerName,
|
|
53
|
+
(value, originalEvent) => {
|
|
54
|
+
const handler = initialState?.[handlerName];
|
|
55
|
+
setState(entry[0], value);
|
|
56
|
+
if (handler) {
|
|
57
|
+
handler(value, originalEvent);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
];
|
|
61
|
+
})
|
|
62
|
+
);
|
|
63
|
+
const onPlayheadPositionChange = /* @__PURE__ */ __name((playheadPosition, originalEvent) => {
|
|
64
|
+
handlers.onPlayHeadPositionChange(
|
|
65
|
+
snapValueToGridIfEnabled(playheadPosition, !!originalEvent?.altKey)
|
|
66
|
+
);
|
|
67
|
+
}, "onPlayheadPositionChange");
|
|
68
|
+
const updateNotes = /* @__PURE__ */ __name(async (trackIndex, getNotes) => {
|
|
86
69
|
const track = state.tracks[trackIndex];
|
|
87
|
-
if (!track)
|
|
70
|
+
if (!track)
|
|
71
|
+
return;
|
|
88
72
|
const notes = track.notes;
|
|
89
|
-
handlers.onTracksChange([
|
|
90
|
-
...
|
|
91
|
-
notes: getNotes(notes)
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
73
|
+
handlers.onTracksChange([
|
|
74
|
+
...state.tracks.slice(0, trackIndex),
|
|
75
|
+
{ ...track, notes: getNotes(notes) },
|
|
76
|
+
...state.tracks.slice(trackIndex + 1)
|
|
77
|
+
]);
|
|
78
|
+
}, "updateNotes");
|
|
79
|
+
const onNoteChange = /* @__PURE__ */ __name((trackIndex, noteIndex, note) => {
|
|
80
|
+
updateNotes(trackIndex, (notes) => [
|
|
81
|
+
...notes.slice(0, noteIndex),
|
|
82
|
+
note,
|
|
83
|
+
...notes.slice(noteIndex + 1)
|
|
84
|
+
]);
|
|
85
|
+
}, "onNoteChange");
|
|
86
|
+
const onInsertNote = /* @__PURE__ */ __name((trackIndex, note) => {
|
|
98
87
|
const track = state.tracks[trackIndex];
|
|
99
|
-
if (!track)
|
|
88
|
+
if (!track)
|
|
89
|
+
return -1;
|
|
100
90
|
const notes = track.notes;
|
|
101
|
-
const newNoteIndex = Math.max(
|
|
102
|
-
ticks
|
|
103
|
-
|
|
104
|
-
|
|
91
|
+
const newNoteIndex = Math.max(
|
|
92
|
+
notes.findIndex(({ ticks }) => ticks > note.ticks),
|
|
93
|
+
0
|
|
94
|
+
);
|
|
95
|
+
updateNotes(trackIndex, (notes2) => [
|
|
96
|
+
...notes2.slice(0, newNoteIndex),
|
|
97
|
+
note,
|
|
98
|
+
...notes2.slice(newNoteIndex)
|
|
99
|
+
]);
|
|
105
100
|
return newNoteIndex;
|
|
106
|
-
};
|
|
107
|
-
const onRemoveNote = (trackIndex, noteIndex) => {
|
|
108
|
-
updateNotes(trackIndex, notes => [
|
|
109
|
-
|
|
110
|
-
|
|
101
|
+
}, "onInsertNote");
|
|
102
|
+
const onRemoveNote = /* @__PURE__ */ __name((trackIndex, noteIndex) => {
|
|
103
|
+
updateNotes(trackIndex, (notes) => [
|
|
104
|
+
...notes.slice(0, noteIndex),
|
|
105
|
+
...notes.slice(noteIndex + 1)
|
|
106
|
+
]);
|
|
107
|
+
}, "onRemoveNote");
|
|
108
|
+
const updateKeyPressedState = /* @__PURE__ */ __name((trackIndex, keyNumber, value) => {
|
|
111
109
|
handlers.onPressedKeysChange?.({
|
|
112
110
|
...state.pressedKeys,
|
|
113
111
|
[trackIndex]: {
|
|
@@ -115,18 +113,18 @@ const createPianoRollstate = initialState => {
|
|
|
115
113
|
[keyNumber]: value
|
|
116
114
|
}
|
|
117
115
|
});
|
|
118
|
-
};
|
|
119
|
-
const onNoteDown = (trackIndex, keyNumber) => {
|
|
116
|
+
}, "updateKeyPressedState");
|
|
117
|
+
const onNoteDown = /* @__PURE__ */ __name((trackIndex, keyNumber) => {
|
|
120
118
|
updateKeyPressedState(trackIndex, keyNumber, true);
|
|
121
|
-
};
|
|
122
|
-
const onNoteUp = (trackIndex, keyNumber) => {
|
|
119
|
+
}, "onNoteDown");
|
|
120
|
+
const onNoteUp = /* @__PURE__ */ __name((trackIndex, keyNumber) => {
|
|
123
121
|
updateKeyPressedState(trackIndex, keyNumber, false);
|
|
124
|
-
};
|
|
125
|
-
const isKeyDown = (trackIndex, keyNumber) => !!state.pressedKeys[trackIndex]?.[keyNumber];
|
|
126
|
-
const snapValueToGridIfEnabled = (value, altKey) => {
|
|
122
|
+
}, "onNoteUp");
|
|
123
|
+
const isKeyDown = /* @__PURE__ */ __name((trackIndex, keyNumber) => !!state.pressedKeys[trackIndex]?.[keyNumber], "isKeyDown");
|
|
124
|
+
const snapValueToGridIfEnabled = /* @__PURE__ */ __name((value, altKey) => {
|
|
127
125
|
const gridDivisionTicks = state.ppq * 4 / state.gridDivision;
|
|
128
126
|
return state.snapToGrid && !altKey ? Math.round(value / gridDivisionTicks) * gridDivisionTicks : value;
|
|
129
|
-
};
|
|
127
|
+
}, "snapValueToGridIfEnabled");
|
|
130
128
|
return solidJs.mergeProps(state, {
|
|
131
129
|
...handlers,
|
|
132
130
|
onNoteChange,
|
|
@@ -138,28 +136,29 @@ const createPianoRollstate = initialState => {
|
|
|
138
136
|
snapValueToGridIfEnabled,
|
|
139
137
|
onPlayheadPositionChange
|
|
140
138
|
});
|
|
141
|
-
};
|
|
139
|
+
}, "createPianoRollstate");
|
|
140
|
+
exports.createPianoRollstate = createPianoRollstate;
|
|
142
141
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
142
|
+
// src/PianoRollContext.tsx
|
|
143
|
+
var PianoRollContext = solidJs.createContext();
|
|
144
|
+
var PianoRollContextProvider = PianoRollContext.Provider;
|
|
145
|
+
var usePianoRollContext = /* @__PURE__ */ __name(() => {
|
|
146
146
|
const context = solidJs.useContext(PianoRollContext);
|
|
147
|
-
if (!context)
|
|
147
|
+
if (!context)
|
|
148
|
+
throw new Error("No PianoRollContext found");
|
|
148
149
|
return context;
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
var css_248z$5 = ".PianoRollKeys-module_PianoRollKeys__5vnQ0 {\n position: relative;\n height: 100%;\n border-width: 0;\n border-color: #000;\n border-style: solid;\n border-right-width: 1px;\n border-left-width: 1px;\n background: white;\n cursor: pointer;\n background: black;\n}\n\n.PianoRollKeys-module_Key__jybNC {\n transition-property: background-color, box-shadow;\n transition-duration: 200ms;\n transition-timing-function: ease-out;\n border-width: 0px;\n position: absolute;\n box-sizing: border-box;\n width: 120%;\n left: -20%;\n border-color: #000;\n border-style: solid;\n transform: rotateX(0deg);\n perspective: 100px;\n}\n\n.PianoRollKeys-module_black__7rncB {\n background: black;\n border-top-right-radius: 12%;\n border-bottom-right-radius: 12%;\n margin-left: -20%;\n z-index: 1;\n border: 1px black outset;\n}\n\n.PianoRollKeys-module_white__fR2Lm {\n background: white;\n border-top-width: 0.5px;\n border-bottom-width: 0.5px;\n border-top-right-radius: 4%;\n border-bottom-right-radius: 4%;\n}\n\n.PianoRollKeys-module_down__GcNeZ {\n transition: none;\n background: red;\n transform: rotateX(0deg) rotateY(20deg);\n}\n";
|
|
153
|
-
var styles$5 = {"PianoRollKeys":"PianoRollKeys-module_PianoRollKeys__5vnQ0","Key":"PianoRollKeys-module_Key__jybNC","black":"PianoRollKeys-module_black__7rncB","white":"PianoRollKeys-module_white__fR2Lm","down":"PianoRollKeys-module_down__GcNeZ"};
|
|
154
|
-
styleInject(css_248z$5);
|
|
150
|
+
}, "usePianoRollContext");
|
|
151
|
+
var splitContextProps = /* @__PURE__ */ __name((allProps) => solidJs.splitProps(allProps, [...pianoRollStatePropNames, "showAllTracks", "showTrackList"]), "splitContextProps");
|
|
155
152
|
|
|
153
|
+
// src/PianoRollKeys.module.css
|
|
154
|
+
var _default2 = {};
|
|
156
155
|
function createViewPortDimension(getState) {
|
|
157
|
-
const getStateWithFunctions = () => {
|
|
158
|
-
const
|
|
159
|
-
const onZoomChange = zoom =>
|
|
160
|
-
const onPositionChange = position =>
|
|
156
|
+
const getStateWithFunctions = /* @__PURE__ */ __name(() => {
|
|
157
|
+
const state2 = getState();
|
|
158
|
+
const onZoomChange = /* @__PURE__ */ __name((zoom) => state2.onZoomChange?.(clamp(zoom, state2.minZoom, state2.maxZoom)), "onZoomChange");
|
|
159
|
+
const onPositionChange = /* @__PURE__ */ __name((position) => state2.onPositionChange?.(position), "onPositionChange");
|
|
161
160
|
return {
|
|
162
|
-
...
|
|
161
|
+
...state2,
|
|
163
162
|
onZoomChange,
|
|
164
163
|
onPositionChange,
|
|
165
164
|
calculatePixelOffset,
|
|
@@ -170,46 +169,49 @@ function createViewPortDimension(getState) {
|
|
|
170
169
|
calculateMaxPosition,
|
|
171
170
|
isVisible
|
|
172
171
|
};
|
|
173
|
-
};
|
|
172
|
+
}, "getStateWithFunctions");
|
|
174
173
|
const [state, setState] = store.createStore(getStateWithFunctions());
|
|
175
174
|
solidJs.createEffect(() => setState(getStateWithFunctions()));
|
|
176
175
|
function calculatePixelValue(position = state.position) {
|
|
177
176
|
const virtualSize = state.pixelSize * state.zoom;
|
|
178
177
|
return position / state.range * virtualSize;
|
|
179
178
|
}
|
|
179
|
+
__name(calculatePixelValue, "calculatePixelValue");
|
|
180
180
|
function calculatePixelOffset(position) {
|
|
181
181
|
return calculatePixelValue(position) - calculatePixelValue(state.position);
|
|
182
182
|
}
|
|
183
|
+
__name(calculatePixelOffset, "calculatePixelOffset");
|
|
183
184
|
function calculatePosition(offset) {
|
|
184
185
|
const percentX = (offset - state.pixelOffset) / state.pixelSize;
|
|
185
186
|
const position = state.position + percentX * calculateVisibleRange();
|
|
186
187
|
return position;
|
|
187
188
|
}
|
|
189
|
+
__name(calculatePosition, "calculatePosition");
|
|
188
190
|
function calculateVisibleRange() {
|
|
189
191
|
return state.range / state.zoom;
|
|
190
192
|
}
|
|
193
|
+
__name(calculateVisibleRange, "calculateVisibleRange");
|
|
191
194
|
function calculateMaxPosition() {
|
|
192
195
|
return state.range - state.range / state.zoom;
|
|
193
196
|
}
|
|
197
|
+
__name(calculateMaxPosition, "calculateMaxPosition");
|
|
194
198
|
function calculatePixelDimensions(position, length) {
|
|
195
199
|
const offset = calculatePixelOffset(position);
|
|
196
200
|
const size = calculatePixelValue(length);
|
|
197
|
-
return {
|
|
198
|
-
offset,
|
|
199
|
-
size
|
|
200
|
-
};
|
|
201
|
+
return { offset, size };
|
|
201
202
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
size
|
|
205
|
-
}) {
|
|
203
|
+
__name(calculatePixelDimensions, "calculatePixelDimensions");
|
|
204
|
+
function isVisible({ offset, size }) {
|
|
206
205
|
return offset + size > 0 && offset < state.pixelSize;
|
|
207
206
|
}
|
|
207
|
+
__name(isVisible, "isVisible");
|
|
208
208
|
return state;
|
|
209
209
|
}
|
|
210
|
-
|
|
210
|
+
__name(createViewPortDimension, "createViewPortDimension");
|
|
211
|
+
var clamp = /* @__PURE__ */ __name((value, min, max) => Math.max(min, Math.min(max, value)), "clamp");
|
|
211
212
|
|
|
212
|
-
|
|
213
|
+
// src/viewport/ScrollZoomViewPort.tsx
|
|
214
|
+
var defaultViewPortProps = {
|
|
213
215
|
pixelOffset: 0,
|
|
214
216
|
position: 0,
|
|
215
217
|
range: 1,
|
|
@@ -217,9 +219,9 @@ const defaultViewPortProps = {
|
|
|
217
219
|
minZoom: 1,
|
|
218
220
|
maxZoom: Infinity
|
|
219
221
|
};
|
|
220
|
-
|
|
222
|
+
var ScrollZoomViewPort = /* @__PURE__ */ __name((props) => {
|
|
221
223
|
const viewPorts = Object.entries(props.dimensions).map(([name, viewPortProps]) => createViewPortDimension(() => ({
|
|
222
|
-
name
|
|
224
|
+
name,
|
|
223
225
|
...defaultViewPortProps,
|
|
224
226
|
...viewPortProps()
|
|
225
227
|
})));
|
|
@@ -232,21 +234,22 @@ const ScrollZoomViewPort = props => {
|
|
|
232
234
|
return props.children;
|
|
233
235
|
}
|
|
234
236
|
});
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
|
|
237
|
+
}, "ScrollZoomViewPort");
|
|
238
|
+
var ScrollZoomViewPortContext = solidJs.createContext([]);
|
|
239
|
+
var useViewPortDimension = /* @__PURE__ */ __name((name) => {
|
|
238
240
|
const viewPorts = solidJs.useContext(ScrollZoomViewPortContext);
|
|
239
|
-
const viewPort = name ? viewPorts.find(
|
|
240
|
-
if (!viewPort)
|
|
241
|
+
const viewPort = name ? viewPorts.find((viewPort2) => viewPort2.name === name) : viewPorts[viewPorts.length - 1];
|
|
242
|
+
if (!viewPort)
|
|
243
|
+
throw new Error(`ViewPort dimension "${name}" not found.`);
|
|
241
244
|
return viewPort;
|
|
242
|
-
};
|
|
245
|
+
}, "useViewPortDimension");
|
|
243
246
|
|
|
244
|
-
|
|
245
|
-
var
|
|
246
|
-
styleInject(css_248z$4);
|
|
247
|
+
// src/viewport/ScrollZoomContainer.module.css
|
|
248
|
+
var _default3 = {};
|
|
247
249
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
+
// src/viewport/ScrollZoomContainer.tsx
|
|
251
|
+
var _tmpl$ = /* @__PURE__ */ web.template(`<div><div><div><div></div></div></div></div>`, 8);
|
|
252
|
+
var ScrollZoomContainer = /* @__PURE__ */ __name((props) => {
|
|
250
253
|
let scrollContentRef;
|
|
251
254
|
const [ownProps, divProps] = solidJs.splitProps(props, ["ref", "verticalDimensionName", "horizontalDimensionName", "showScrollbar"]);
|
|
252
255
|
const propsWithDefaults = solidJs.mergeProps({
|
|
@@ -256,7 +259,7 @@ const ScrollZoomContainer = props => {
|
|
|
256
259
|
}, ownProps);
|
|
257
260
|
const verticalViewPort = solidJs.createMemo(() => useViewPortDimension(propsWithDefaults.verticalDimensionName));
|
|
258
261
|
const horizontalViewPort = solidJs.createMemo(() => useViewPortDimension(propsWithDefaults.horizontalDimensionName));
|
|
259
|
-
const handleScroll = event => {
|
|
262
|
+
const handleScroll = /* @__PURE__ */ __name((event) => {
|
|
260
263
|
event.preventDefault();
|
|
261
264
|
if (didUpdateScroll) {
|
|
262
265
|
didUpdateScroll = false;
|
|
@@ -276,8 +279,8 @@ const ScrollZoomContainer = props => {
|
|
|
276
279
|
const scrollLeftAmount = scrollLeft / (scrollWidth - width);
|
|
277
280
|
verticalViewPort().onPositionChange?.(maxVerticalPosition * scrollTopAmount);
|
|
278
281
|
horizontalViewPort().onPositionChange?.(maxPosition * scrollLeftAmount);
|
|
279
|
-
};
|
|
280
|
-
const handleWheel = event => {
|
|
282
|
+
}, "handleScroll");
|
|
283
|
+
const handleWheel = /* @__PURE__ */ __name((event) => {
|
|
281
284
|
if (event.altKey) {
|
|
282
285
|
event.preventDefault();
|
|
283
286
|
if (Math.abs(event.deltaX) > Math.abs(event.deltaY)) {
|
|
@@ -294,7 +297,7 @@ const ScrollZoomContainer = props => {
|
|
|
294
297
|
event.currentTarget.scrollLeft += event.deltaX;
|
|
295
298
|
event.currentTarget.scrollTop += event.deltaY;
|
|
296
299
|
}
|
|
297
|
-
};
|
|
300
|
+
}, "handleWheel");
|
|
298
301
|
let didUpdateScroll = false;
|
|
299
302
|
solidJs.createEffect(() => {
|
|
300
303
|
const maxVerticalPosition = verticalViewPort().calculateMaxPosition();
|
|
@@ -303,7 +306,8 @@ const ScrollZoomContainer = props => {
|
|
|
303
306
|
const scrollLeftAmount = maxPosition > 0 ? horizontalViewPort().position / maxPosition : 0;
|
|
304
307
|
const height = verticalViewPort().pixelSize;
|
|
305
308
|
const width = horizontalViewPort().pixelSize;
|
|
306
|
-
if (!scrollContentRef?.parentElement)
|
|
309
|
+
if (!scrollContentRef?.parentElement)
|
|
310
|
+
return;
|
|
307
311
|
const scrollDivHeight = verticalViewPort().zoom * verticalViewPort().pixelSize;
|
|
308
312
|
const scrollTop = scrollTopAmount * (scrollDivHeight - height);
|
|
309
313
|
const scrollDivWidth = horizontalViewPort().zoom * horizontalViewPort().pixelSize;
|
|
@@ -317,10 +321,7 @@ const ScrollZoomContainer = props => {
|
|
|
317
321
|
});
|
|
318
322
|
});
|
|
319
323
|
return (() => {
|
|
320
|
-
const _el$ = _tmpl
|
|
321
|
-
_el$2 = _el$.firstChild,
|
|
322
|
-
_el$3 = _el$2.firstChild,
|
|
323
|
-
_el$4 = _el$3.firstChild;
|
|
324
|
+
const _el$ = _tmpl$.cloneNode(true), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild;
|
|
324
325
|
_el$.addEventListener("wheel", handleWheel);
|
|
325
326
|
_el$.addEventListener("scroll", handleScroll);
|
|
326
327
|
const _ref$ = props.ref;
|
|
@@ -329,12 +330,12 @@ const ScrollZoomContainer = props => {
|
|
|
329
330
|
get style() {
|
|
330
331
|
return {
|
|
331
332
|
overflow: propsWithDefaults.showScrollbar ? "scroll" : "hidden",
|
|
332
|
-
...
|
|
333
|
+
...typeof divProps.style === "object" && divProps.style
|
|
333
334
|
};
|
|
334
335
|
},
|
|
335
336
|
get classList() {
|
|
336
337
|
return {
|
|
337
|
-
[
|
|
338
|
+
[_default3.ScrollZoomContainer]: true,
|
|
338
339
|
...divProps.classList
|
|
339
340
|
};
|
|
340
341
|
}
|
|
@@ -347,35 +348,34 @@ const ScrollZoomContainer = props => {
|
|
|
347
348
|
_el$3.style.setProperty("display", "flex");
|
|
348
349
|
_el$4.style.setProperty("position", "relative");
|
|
349
350
|
web.insert(_el$4, () => props.children);
|
|
350
|
-
web.effect(_p$ => {
|
|
351
|
-
const _v$ = `${verticalViewPort().pixelSize}px`,
|
|
352
|
-
_v$2 = `${horizontalViewPort().pixelSize}px`,
|
|
353
|
-
_v$3 = `${verticalViewPort().pixelSize}px`,
|
|
354
|
-
_v$4 = `${horizontalViewPort().pixelSize}px`;
|
|
351
|
+
web.effect((_p$) => {
|
|
352
|
+
const _v$ = `${verticalViewPort().pixelSize}px`, _v$2 = `${horizontalViewPort().pixelSize}px`, _v$3 = `${verticalViewPort().pixelSize}px`, _v$4 = `${horizontalViewPort().pixelSize}px`;
|
|
355
353
|
_v$ !== _p$._v$ && _el$3.style.setProperty("height", _p$._v$ = _v$);
|
|
356
354
|
_v$2 !== _p$._v$2 && _el$3.style.setProperty("width", _p$._v$2 = _v$2);
|
|
357
355
|
_v$3 !== _p$._v$3 && _el$4.style.setProperty("height", _p$._v$3 = _v$3);
|
|
358
356
|
_v$4 !== _p$._v$4 && _el$4.style.setProperty("width", _p$._v$4 = _v$4);
|
|
359
357
|
return _p$;
|
|
360
358
|
}, {
|
|
361
|
-
_v$:
|
|
362
|
-
_v$2:
|
|
363
|
-
_v$3:
|
|
364
|
-
_v$4:
|
|
359
|
+
_v$: void 0,
|
|
360
|
+
_v$2: void 0,
|
|
361
|
+
_v$3: void 0,
|
|
362
|
+
_v$4: void 0
|
|
365
363
|
});
|
|
366
364
|
return _el$;
|
|
367
365
|
})();
|
|
368
|
-
};
|
|
366
|
+
}, "ScrollZoomContainer");
|
|
367
|
+
var ScrollZoomContainer_default = ScrollZoomContainer;
|
|
369
368
|
|
|
370
|
-
|
|
371
|
-
|
|
369
|
+
// src/PianoRollKeys.tsx
|
|
370
|
+
var _tmpl$2 = /* @__PURE__ */ web.template(`<div></div>`, 2);
|
|
371
|
+
var PianoRollKeys = /* @__PURE__ */ __name(() => {
|
|
372
372
|
const verticalViewPort = solidJs.createMemo(() => useViewPortDimension("vertical"));
|
|
373
373
|
const horizontalViewPort = solidJs.createMemo(() => useViewPortDimension("horizontalKeys"));
|
|
374
374
|
const [isMouseDown, setIsMouseDown] = solidJs.createSignal(false);
|
|
375
375
|
const context = usePianoRollContext();
|
|
376
|
-
const handleMouseUp = () => {
|
|
376
|
+
const handleMouseUp = /* @__PURE__ */ __name(() => {
|
|
377
377
|
setIsMouseDown(false);
|
|
378
|
-
};
|
|
378
|
+
}, "handleMouseUp");
|
|
379
379
|
solidJs.createEffect(() => {
|
|
380
380
|
if (isMouseDown()) {
|
|
381
381
|
window.addEventListener("mouseup", handleMouseUp);
|
|
@@ -384,14 +384,14 @@ const PianoRollKeys = () => {
|
|
|
384
384
|
}
|
|
385
385
|
});
|
|
386
386
|
return (() => {
|
|
387
|
-
const _el$ = _tmpl
|
|
388
|
-
web.insert(_el$, web.createComponent(
|
|
387
|
+
const _el$ = _tmpl$2.cloneNode(true);
|
|
388
|
+
web.insert(_el$, web.createComponent(ScrollZoomContainer_default, {
|
|
389
389
|
horizontalDimensionName: "horizontalKeys",
|
|
390
390
|
showScrollbar: false,
|
|
391
391
|
get children() {
|
|
392
392
|
return web.createComponent(solidJs.Index, {
|
|
393
393
|
each: keys,
|
|
394
|
-
children: key => {
|
|
394
|
+
children: (key) => {
|
|
395
395
|
const isDown = solidJs.createMemo(() => context.isKeyDown(context.selectedTrackIndex, key().number));
|
|
396
396
|
const virtualDimensions = solidJs.createMemo(() => verticalViewPort().calculatePixelDimensions(127 - key().number, 1));
|
|
397
397
|
const previousIsBlack = blackKeys.includes((key().number - 1) % 12);
|
|
@@ -401,7 +401,7 @@ const PianoRollKeys = () => {
|
|
|
401
401
|
return verticalViewPort().isVisible(virtualDimensions());
|
|
402
402
|
},
|
|
403
403
|
get children() {
|
|
404
|
-
const _el$2 = _tmpl
|
|
404
|
+
const _el$2 = _tmpl$2.cloneNode(true);
|
|
405
405
|
_el$2.addEventListener("mouseleave", () => {
|
|
406
406
|
if (isMouseDown()) {
|
|
407
407
|
context.onNoteUp(context.selectedTrackIndex, key().number);
|
|
@@ -419,18 +419,13 @@ const PianoRollKeys = () => {
|
|
|
419
419
|
setIsMouseDown(true);
|
|
420
420
|
context.onNoteDown(context.selectedTrackIndex, key().number);
|
|
421
421
|
};
|
|
422
|
-
web.effect(_p$ => {
|
|
422
|
+
web.effect((_p$) => {
|
|
423
423
|
const _v$3 = {
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
_v$4 = key().name,
|
|
430
|
-
_v$5 = key().number % 12,
|
|
431
|
-
_v$6 = `${virtualDimensions().offset - virtualDimensions().size * (!key().isBlack ? nextIsBlack ? 1 / 2 : 0 : 0)}px`,
|
|
432
|
-
_v$7 = `${virtualDimensions().size + (!key().isBlack && nextIsBlack ? virtualDimensions().size / 2 : 0) + (!key().isBlack && previousIsBlack ? virtualDimensions().size / 2 : 0)}px`,
|
|
433
|
-
_v$8 = `0px 0px ${Math.min(virtualDimensions().size / 20, 1)}px ${Math.min(virtualDimensions().size / 50, 1)}px rgba(0, 0, 0, 0.5) ${key().isBlack ? "" : "inset"}` + isDown() ? `0px 0px ${Math.min(virtualDimensions().size / 8, 2)}px ${Math.min(virtualDimensions().size / 20, 2)}px rgba(0, 0, 0, 0.5) inset` : "";
|
|
424
|
+
[_default2["Key"]]: true,
|
|
425
|
+
[_default2["black"]]: key().isBlack,
|
|
426
|
+
[_default2["white"]]: !key().isBlack,
|
|
427
|
+
[_default2["down"]]: isDown()
|
|
428
|
+
}, _v$4 = key().name, _v$5 = key().number % 12, _v$6 = `${virtualDimensions().offset - virtualDimensions().size * (!key().isBlack ? nextIsBlack ? 1 / 2 : 0 : 0)}px`, _v$7 = `${virtualDimensions().size + (!key().isBlack && nextIsBlack ? virtualDimensions().size / 2 : 0) + (!key().isBlack && previousIsBlack ? virtualDimensions().size / 2 : 0)}px`, _v$8 = `0px 0px ${Math.min(virtualDimensions().size / 20, 1)}px ${Math.min(virtualDimensions().size / 50, 1)}px rgba(0, 0, 0, 0.5) ${key().isBlack ? "" : "inset"}` + isDown() ? `0px 0px ${Math.min(virtualDimensions().size / 8, 2)}px ${Math.min(virtualDimensions().size / 20, 2)}px rgba(0, 0, 0, 0.5) inset` : "";
|
|
434
429
|
_p$._v$3 = web.classList(_el$2, _v$3, _p$._v$3);
|
|
435
430
|
_v$4 !== _p$._v$4 && web.setAttribute(_el$2, "title", _p$._v$4 = _v$4);
|
|
436
431
|
_v$5 !== _p$._v$5 && web.setAttribute(_el$2, "data-index", _p$._v$5 = _v$5);
|
|
@@ -439,12 +434,12 @@ const PianoRollKeys = () => {
|
|
|
439
434
|
_v$8 !== _p$._v$8 && _el$2.style.setProperty("box-shadow", _p$._v$8 = _v$8);
|
|
440
435
|
return _p$;
|
|
441
436
|
}, {
|
|
442
|
-
_v$3:
|
|
443
|
-
_v$4:
|
|
444
|
-
_v$5:
|
|
445
|
-
_v$6:
|
|
446
|
-
_v$7:
|
|
447
|
-
_v$8:
|
|
437
|
+
_v$3: void 0,
|
|
438
|
+
_v$4: void 0,
|
|
439
|
+
_v$5: void 0,
|
|
440
|
+
_v$6: void 0,
|
|
441
|
+
_v$7: void 0,
|
|
442
|
+
_v$8: void 0
|
|
448
443
|
});
|
|
449
444
|
return _el$2;
|
|
450
445
|
}
|
|
@@ -453,36 +448,36 @@ const PianoRollKeys = () => {
|
|
|
453
448
|
});
|
|
454
449
|
}
|
|
455
450
|
}));
|
|
456
|
-
web.effect(_p$ => {
|
|
457
|
-
const _v$ =
|
|
458
|
-
_v$2 = `${horizontalViewPort().pixelSize}px`;
|
|
451
|
+
web.effect((_p$) => {
|
|
452
|
+
const _v$ = _default2.PianoRollKeys, _v$2 = `${horizontalViewPort().pixelSize}px`;
|
|
459
453
|
_v$ !== _p$._v$ && web.className(_el$, _p$._v$ = _v$);
|
|
460
454
|
_v$2 !== _p$._v$2 && _el$.style.setProperty("width", _p$._v$2 = _v$2);
|
|
461
455
|
return _p$;
|
|
462
456
|
}, {
|
|
463
|
-
_v$:
|
|
464
|
-
_v$2:
|
|
457
|
+
_v$: void 0,
|
|
458
|
+
_v$2: void 0
|
|
465
459
|
});
|
|
466
460
|
return _el$;
|
|
467
461
|
})();
|
|
468
|
-
};
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
462
|
+
}, "PianoRollKeys");
|
|
463
|
+
var blackKeys = [1, 3, 6, 8, 10];
|
|
464
|
+
var keyNames = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
|
|
465
|
+
var keys = Array.from({
|
|
472
466
|
length: 128
|
|
473
467
|
}).map((_, index) => ({
|
|
474
468
|
number: index,
|
|
475
469
|
name: `${keyNames[index % 12]} ${Math.floor(index / 12) - 2}`,
|
|
476
470
|
isBlack: blackKeys.includes(index % 12)
|
|
477
471
|
}));
|
|
472
|
+
var PianoRollKeys_default = PianoRollKeys;
|
|
478
473
|
web.delegateEvents(["mousedown", "mouseup"]);
|
|
479
474
|
|
|
480
|
-
|
|
481
|
-
var
|
|
482
|
-
styleInject(css_248z$3);
|
|
475
|
+
// src/PianoRollNotes.module.css
|
|
476
|
+
var _default4 = {};
|
|
483
477
|
|
|
484
|
-
|
|
485
|
-
|
|
478
|
+
// src/PianoRollNotes.tsx
|
|
479
|
+
var _tmpl$3 = /* @__PURE__ */ web.template(`<div></div>`, 2);
|
|
480
|
+
var PianoRollNotes = /* @__PURE__ */ __name((props) => {
|
|
486
481
|
const context = usePianoRollContext();
|
|
487
482
|
const verticalViewPort = solidJs.createMemo(() => useViewPortDimension(context.mode === "keys" ? "vertical" : "verticalTracks"));
|
|
488
483
|
const horizontalViewPort = solidJs.createMemo(() => useViewPortDimension("horizontal"));
|
|
@@ -493,7 +488,7 @@ const PianoRollNotes = props => {
|
|
|
493
488
|
const [currentNoteTrackIndex, setCurrentNoteTrackIndex] = solidJs.createSignal(-1);
|
|
494
489
|
const [diffPosition, setDiffPosition] = solidJs.createSignal(0);
|
|
495
490
|
const [getInitialNote, setInitialNote] = solidJs.createSignal();
|
|
496
|
-
const calculateNoteDragValues = event => {
|
|
491
|
+
const calculateNoteDragValues = /* @__PURE__ */ __name((event) => {
|
|
497
492
|
const targetTrackIndex = context.mode === "tracks" ? clamp(Math.floor(verticalViewPort().calculatePosition(event.clientY)), 0, context.tracks.length - 1) : currentNoteTrackIndex() > -1 ? currentNoteTrackIndex() : context.selectedTrackIndex;
|
|
498
493
|
const midi = context.mode === "keys" ? Math.floor(128 - verticalViewPort().calculatePosition(event.clientY)) : getInitialNote()?.midi ?? 60;
|
|
499
494
|
const horiontalPosition = horizontalViewPort().calculatePosition(event.clientX);
|
|
@@ -502,12 +497,13 @@ const PianoRollNotes = props => {
|
|
|
502
497
|
midi,
|
|
503
498
|
horiontalPosition
|
|
504
499
|
};
|
|
505
|
-
};
|
|
506
|
-
const handleMouseMove = mouseMoveEvent => {
|
|
500
|
+
}, "calculateNoteDragValues");
|
|
501
|
+
const handleMouseMove = /* @__PURE__ */ __name((mouseMoveEvent) => {
|
|
507
502
|
mouseMoveEvent.preventDefault();
|
|
508
503
|
mouseMoveEvent.stopPropagation();
|
|
509
504
|
const note = getInitialNote();
|
|
510
|
-
if (!note)
|
|
505
|
+
if (!note)
|
|
506
|
+
return;
|
|
511
507
|
const {
|
|
512
508
|
targetTrackIndex,
|
|
513
509
|
midi,
|
|
@@ -517,17 +513,17 @@ const PianoRollNotes = props => {
|
|
|
517
513
|
const updatedNote = {
|
|
518
514
|
...note,
|
|
519
515
|
midi,
|
|
520
|
-
...
|
|
516
|
+
...noteDragMode() === "move" && {
|
|
521
517
|
ticks
|
|
522
|
-
}
|
|
523
|
-
...
|
|
518
|
+
},
|
|
519
|
+
...noteDragMode() === "trimStart" && {
|
|
524
520
|
ticks: ticks < note.ticks + note.durationTicks ? ticks : note.ticks + note.durationTicks,
|
|
525
521
|
durationTicks: ticks < note.ticks + note.durationTicks ? note.ticks + note.durationTicks - ticks : context.snapValueToGridIfEnabled(horiontalPosition - note.ticks, mouseMoveEvent.altKey)
|
|
526
|
-
}
|
|
527
|
-
...
|
|
522
|
+
},
|
|
523
|
+
...noteDragMode() === "trimEnd" && {
|
|
528
524
|
ticks: ticks < note.ticks ? ticks : note.ticks,
|
|
529
525
|
durationTicks: ticks < note.ticks ? note.ticks - ticks : context.snapValueToGridIfEnabled(horiontalPosition - note.ticks, mouseMoveEvent.altKey)
|
|
530
|
-
}
|
|
526
|
+
}
|
|
531
527
|
};
|
|
532
528
|
const previousTrackIndex = currentNoteTrackIndex();
|
|
533
529
|
const previousNoteIndex = currentNoteIndex();
|
|
@@ -541,24 +537,24 @@ const PianoRollNotes = props => {
|
|
|
541
537
|
setCurrentNoteIndex(newNoteIndex);
|
|
542
538
|
}
|
|
543
539
|
}
|
|
544
|
-
};
|
|
545
|
-
const stopDragging = () => {
|
|
540
|
+
}, "handleMouseMove");
|
|
541
|
+
const stopDragging = /* @__PURE__ */ __name(() => {
|
|
546
542
|
window.removeEventListener("mousemove", handleMouseMove);
|
|
547
543
|
window.removeEventListener("mouseup", stopDragging);
|
|
548
544
|
setIsDragging(false);
|
|
549
545
|
setCurrentNoteIndex(-1);
|
|
550
546
|
setCurrentNoteTrackIndex(-1);
|
|
551
|
-
};
|
|
552
|
-
const startDragging = () => {
|
|
547
|
+
}, "stopDragging");
|
|
548
|
+
const startDragging = /* @__PURE__ */ __name(() => {
|
|
553
549
|
window.addEventListener("mousemove", handleMouseMove);
|
|
554
550
|
window.addEventListener("mouseup", stopDragging);
|
|
555
|
-
};
|
|
556
|
-
const getClasses =
|
|
557
|
-
return
|
|
558
|
-
};
|
|
551
|
+
}, "startDragging");
|
|
552
|
+
const getClasses = /* @__PURE__ */ __name((noteDragMode2) => {
|
|
553
|
+
return noteDragMode2 ? [_default4.Note, _default4[noteDragMode2]] : [_default4.Note];
|
|
554
|
+
}, "getClasses");
|
|
559
555
|
return (() => {
|
|
560
|
-
const _el$ = _tmpl
|
|
561
|
-
_el$.$$mousedown = mouseDownEvent => {
|
|
556
|
+
const _el$ = _tmpl$3.cloneNode(true);
|
|
557
|
+
_el$.$$mousedown = (mouseDownEvent) => {
|
|
562
558
|
mouseDownEvent.preventDefault();
|
|
563
559
|
mouseDownEvent.stopPropagation();
|
|
564
560
|
const {
|
|
@@ -607,8 +603,8 @@ const PianoRollNotes = props => {
|
|
|
607
603
|
return web.memo(() => !!verticalViewPort().isVisible(verticalVirtualDimensions()))() && horizontalViewPort().isVisible(horizontalDimensions());
|
|
608
604
|
},
|
|
609
605
|
get children() {
|
|
610
|
-
const _el$2 = _tmpl
|
|
611
|
-
_el$2.$$mousedown = event => {
|
|
606
|
+
const _el$2 = _tmpl$3.cloneNode(true);
|
|
607
|
+
_el$2.$$mousedown = (event) => {
|
|
612
608
|
event.stopPropagation();
|
|
613
609
|
const initialPosition = horizontalViewPort().calculatePosition(event.clientX);
|
|
614
610
|
setDiffPosition(noteDragMode() === "trimEnd" ? -(note.ticks + note.durationTicks - initialPosition) : initialPosition - note.ticks);
|
|
@@ -618,12 +614,13 @@ const PianoRollNotes = props => {
|
|
|
618
614
|
setInitialNote(note);
|
|
619
615
|
startDragging();
|
|
620
616
|
};
|
|
621
|
-
_el$2.$$dblclick = event => {
|
|
617
|
+
_el$2.$$dblclick = (event) => {
|
|
622
618
|
event.stopPropagation();
|
|
623
619
|
context.onRemoveNote?.(trackIndex(), noteIndex());
|
|
624
620
|
};
|
|
625
|
-
_el$2.$$mousemove = event => {
|
|
626
|
-
if (isDragging())
|
|
621
|
+
_el$2.$$mousemove = (event) => {
|
|
622
|
+
if (isDragging())
|
|
623
|
+
return;
|
|
627
624
|
event.stopPropagation();
|
|
628
625
|
const relativeX = horizontalViewPort().calculatePixelValue(horizontalViewPort().calculatePosition(event.clientX));
|
|
629
626
|
const noteStartX = horizontalViewPort().calculatePixelValue(note.ticks);
|
|
@@ -631,14 +628,8 @@ const PianoRollNotes = props => {
|
|
|
631
628
|
setNoteDragMode(relativeX - noteStartX < 3 ? "trimStart" : noteEndX - relativeX < 3 ? "trimEnd" : "move");
|
|
632
629
|
};
|
|
633
630
|
web.setAttribute(_el$2, "draggable", false);
|
|
634
|
-
web.effect(_p$ => {
|
|
635
|
-
const _v$ = getClasses(noteDragMode()).join(" "),
|
|
636
|
-
_v$2 = `${track.color}`,
|
|
637
|
-
_v$3 = (note.velocity / 128 + 2) / 3,
|
|
638
|
-
_v$4 = `${verticalVirtualDimensions().offset}px`,
|
|
639
|
-
_v$5 = `${verticalVirtualDimensions().size}px`,
|
|
640
|
-
_v$6 = `${horizontalDimensions().offset}px`,
|
|
641
|
-
_v$7 = `${horizontalDimensions().size}px`;
|
|
631
|
+
web.effect((_p$) => {
|
|
632
|
+
const _v$ = getClasses(noteDragMode()).join(" "), _v$2 = `${track.color}`, _v$3 = (note.velocity / 128 + 2) / 3, _v$4 = `${verticalVirtualDimensions().offset}px`, _v$5 = `${verticalVirtualDimensions().size}px`, _v$6 = `${horizontalDimensions().offset}px`, _v$7 = `${horizontalDimensions().size}px`;
|
|
642
633
|
_v$ !== _p$._v$ && web.className(_el$2, _p$._v$ = _v$);
|
|
643
634
|
_v$2 !== _p$._v$2 && _el$2.style.setProperty("background-color", _p$._v$2 = _v$2);
|
|
644
635
|
_v$3 !== _p$._v$3 && _el$2.style.setProperty("opacity", _p$._v$3 = _v$3);
|
|
@@ -648,13 +639,13 @@ const PianoRollNotes = props => {
|
|
|
648
639
|
_v$7 !== _p$._v$7 && _el$2.style.setProperty("width", _p$._v$7 = _v$7);
|
|
649
640
|
return _p$;
|
|
650
641
|
}, {
|
|
651
|
-
_v$:
|
|
652
|
-
_v$2:
|
|
653
|
-
_v$3:
|
|
654
|
-
_v$4:
|
|
655
|
-
_v$5:
|
|
656
|
-
_v$6:
|
|
657
|
-
_v$7:
|
|
642
|
+
_v$: void 0,
|
|
643
|
+
_v$2: void 0,
|
|
644
|
+
_v$3: void 0,
|
|
645
|
+
_v$4: void 0,
|
|
646
|
+
_v$5: void 0,
|
|
647
|
+
_v$6: void 0,
|
|
648
|
+
_v$7: void 0
|
|
658
649
|
});
|
|
659
650
|
return _el$2;
|
|
660
651
|
}
|
|
@@ -665,26 +656,26 @@ const PianoRollNotes = props => {
|
|
|
665
656
|
});
|
|
666
657
|
}
|
|
667
658
|
}));
|
|
668
|
-
web.effect(_$p => web.classList(_el$, {
|
|
669
|
-
[
|
|
659
|
+
web.effect((_$p) => web.classList(_el$, {
|
|
660
|
+
[_default4.PianoRollNotes]: true
|
|
670
661
|
}, _$p));
|
|
671
662
|
return _el$;
|
|
672
663
|
})();
|
|
673
|
-
};
|
|
664
|
+
}, "PianoRollNotes");
|
|
665
|
+
var PianoRollNotes_default = PianoRollNotes;
|
|
674
666
|
web.delegateEvents(["mousedown", "mousemove", "dblclick"]);
|
|
675
667
|
|
|
676
|
-
|
|
677
|
-
var
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
const usePianoRollGrid = () => {
|
|
668
|
+
// src/PianoRollGrid.module.css
|
|
669
|
+
var _default5 = {};
|
|
670
|
+
var usePianoRollGrid = /* @__PURE__ */ __name(() => {
|
|
681
671
|
const context = usePianoRollContext();
|
|
682
672
|
const horizontalViewPort = solidJs.createMemo(() => useViewPortDimension("horizontal"));
|
|
683
673
|
const measureTicks = solidJs.createMemo(() => context.ppq * 4);
|
|
684
674
|
const selectedGridDivisorTicks = solidJs.createMemo(() => measureTicks() / context.gridDivision);
|
|
685
675
|
function calculateVisibleGridDivisorTicks(value) {
|
|
686
676
|
const visibleRange = horizontalViewPort().calculateVisibleRange();
|
|
687
|
-
if (visibleRange <= 0)
|
|
677
|
+
if (visibleRange <= 0)
|
|
678
|
+
return 0;
|
|
688
679
|
if (visibleRange / value > 100) {
|
|
689
680
|
return calculateVisibleGridDivisorTicks(value * 2);
|
|
690
681
|
}
|
|
@@ -693,13 +684,16 @@ const usePianoRollGrid = () => {
|
|
|
693
684
|
}
|
|
694
685
|
return value;
|
|
695
686
|
}
|
|
696
|
-
|
|
687
|
+
__name(calculateVisibleGridDivisorTicks, "calculateVisibleGridDivisorTicks");
|
|
688
|
+
const gridDivisorTicks = solidJs.createMemo(
|
|
689
|
+
() => calculateVisibleGridDivisorTicks(selectedGridDivisorTicks())
|
|
690
|
+
);
|
|
697
691
|
const gridArray = solidJs.createMemo(() => {
|
|
698
|
-
const numberOfLines = Math.ceil(
|
|
692
|
+
const numberOfLines = Math.ceil(
|
|
693
|
+
horizontalViewPort().calculateVisibleRange() / gridDivisorTicks() + 1
|
|
694
|
+
);
|
|
699
695
|
const startIndex = Math.floor(context.position / gridDivisorTicks());
|
|
700
|
-
return Array.from({
|
|
701
|
-
length: numberOfLines
|
|
702
|
-
}).map((_, i) => {
|
|
696
|
+
return Array.from({ length: numberOfLines }).map((_, i) => {
|
|
703
697
|
const index = i + startIndex;
|
|
704
698
|
const ticks = index * gridDivisorTicks();
|
|
705
699
|
const measurePosition = ticks / context.ppq / 4 + 1;
|
|
@@ -718,43 +712,43 @@ const usePianoRollGrid = () => {
|
|
|
718
712
|
});
|
|
719
713
|
});
|
|
720
714
|
return gridArray;
|
|
721
|
-
};
|
|
715
|
+
}, "usePianoRollGrid");
|
|
716
|
+
var usePianoRollGrid_default = usePianoRollGrid;
|
|
722
717
|
|
|
723
|
-
|
|
724
|
-
|
|
718
|
+
// src/PianoRollGrid.tsx
|
|
719
|
+
var _tmpl$4 = /* @__PURE__ */ web.template(`<div></div>`, 2);
|
|
720
|
+
var PianoRollGrid = /* @__PURE__ */ __name(() => {
|
|
725
721
|
const context = usePianoRollContext();
|
|
726
722
|
const verticalViewPort = solidJs.createMemo(() => useViewPortDimension(context.mode === "keys" ? "vertical" : "verticalTracks"));
|
|
727
723
|
const horizontalViewPort = solidJs.createMemo(() => useViewPortDimension("horizontal"));
|
|
728
|
-
const gridArray =
|
|
724
|
+
const gridArray = usePianoRollGrid_default();
|
|
729
725
|
return (() => {
|
|
730
|
-
const _el$ = _tmpl
|
|
726
|
+
const _el$ = _tmpl$4.cloneNode(true);
|
|
731
727
|
web.insert(_el$, web.createComponent(solidJs.Index, {
|
|
732
728
|
get each() {
|
|
733
729
|
return gridArray();
|
|
734
730
|
},
|
|
735
|
-
children: entry => {
|
|
731
|
+
children: (entry) => {
|
|
736
732
|
return web.createComponent(solidJs.Show, {
|
|
737
733
|
get when() {
|
|
738
734
|
return horizontalViewPort().isVisible(entry().virtualDimensions);
|
|
739
735
|
},
|
|
740
736
|
get children() {
|
|
741
|
-
const _el$2 = _tmpl
|
|
742
|
-
web.effect(_p$ => {
|
|
737
|
+
const _el$2 = _tmpl$4.cloneNode(true);
|
|
738
|
+
web.effect((_p$) => {
|
|
743
739
|
const _v$ = {
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
_v$2 = `${entry().virtualDimensions.offset}px`,
|
|
749
|
-
_v$3 = `${entry().virtualDimensions.size}px`;
|
|
740
|
+
[_default5["PianoRollGrid-Time"]]: true,
|
|
741
|
+
[_default5["Highlighted"]]: entry().isHighlighted,
|
|
742
|
+
[_default5["HighlightedBorder"]]: entry().hasHighlightedBorder
|
|
743
|
+
}, _v$2 = `${entry().virtualDimensions.offset}px`, _v$3 = `${entry().virtualDimensions.size}px`;
|
|
750
744
|
_p$._v$ = web.classList(_el$2, _v$, _p$._v$);
|
|
751
745
|
_v$2 !== _p$._v$2 && _el$2.style.setProperty("left", _p$._v$2 = _v$2);
|
|
752
746
|
_v$3 !== _p$._v$3 && _el$2.style.setProperty("width", _p$._v$3 = _v$3);
|
|
753
747
|
return _p$;
|
|
754
748
|
}, {
|
|
755
|
-
_v$:
|
|
756
|
-
_v$2:
|
|
757
|
-
_v$3:
|
|
749
|
+
_v$: void 0,
|
|
750
|
+
_v$2: void 0,
|
|
751
|
+
_v$3: void 0
|
|
758
752
|
});
|
|
759
753
|
return _el$2;
|
|
760
754
|
}
|
|
@@ -768,31 +762,29 @@ const PianoRollGrid = () => {
|
|
|
768
762
|
get children() {
|
|
769
763
|
return web.createComponent(solidJs.Index, {
|
|
770
764
|
each: keys,
|
|
771
|
-
children: key => {
|
|
765
|
+
children: (key) => {
|
|
772
766
|
const virtualDimensions = solidJs.createMemo(() => verticalViewPort().calculatePixelDimensions(127 - key().number, 1));
|
|
773
767
|
return web.createComponent(solidJs.Show, {
|
|
774
768
|
get when() {
|
|
775
769
|
return verticalViewPort().isVisible(virtualDimensions());
|
|
776
770
|
},
|
|
777
771
|
get children() {
|
|
778
|
-
const _el$3 = _tmpl
|
|
779
|
-
web.effect(_p$ => {
|
|
772
|
+
const _el$3 = _tmpl$4.cloneNode(true);
|
|
773
|
+
web.effect((_p$) => {
|
|
780
774
|
const _v$4 = {
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
_v$5 = `${virtualDimensions().offset}px`,
|
|
787
|
-
_v$6 = `${virtualDimensions().size}px`;
|
|
775
|
+
[_default5["PianoRollGrid-Row"]]: true,
|
|
776
|
+
[_default5["Key"]]: true,
|
|
777
|
+
[_default5["IsDark"]]: key().isBlack,
|
|
778
|
+
[_default5["IsBlackAndNextIsWhite"]]: !key().isBlack && !blackKeys.includes((key().number + 1) % 12)
|
|
779
|
+
}, _v$5 = `${virtualDimensions().offset}px`, _v$6 = `${virtualDimensions().size}px`;
|
|
788
780
|
_p$._v$4 = web.classList(_el$3, _v$4, _p$._v$4);
|
|
789
781
|
_v$5 !== _p$._v$5 && _el$3.style.setProperty("top", _p$._v$5 = _v$5);
|
|
790
782
|
_v$6 !== _p$._v$6 && _el$3.style.setProperty("height", _p$._v$6 = _v$6);
|
|
791
783
|
return _p$;
|
|
792
784
|
}, {
|
|
793
|
-
_v$4:
|
|
794
|
-
_v$5:
|
|
795
|
-
_v$6:
|
|
785
|
+
_v$4: void 0,
|
|
786
|
+
_v$5: void 0,
|
|
787
|
+
_v$6: void 0
|
|
796
788
|
});
|
|
797
789
|
return _el$3;
|
|
798
790
|
}
|
|
@@ -817,22 +809,20 @@ const PianoRollGrid = () => {
|
|
|
817
809
|
return verticalViewPort().isVisible(virtualDimensions());
|
|
818
810
|
},
|
|
819
811
|
get children() {
|
|
820
|
-
const _el$4 = _tmpl
|
|
821
|
-
web.effect(_p$ => {
|
|
812
|
+
const _el$4 = _tmpl$4.cloneNode(true);
|
|
813
|
+
web.effect((_p$) => {
|
|
822
814
|
const _v$7 = {
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
_v$8 = `${virtualDimensions().offset}px`,
|
|
827
|
-
_v$9 = `${virtualDimensions().size}px`;
|
|
815
|
+
[_default5["PianoRollGrid-Row"]]: true,
|
|
816
|
+
[_default5["IsDark"]]: index() % 2 === 0
|
|
817
|
+
}, _v$8 = `${virtualDimensions().offset}px`, _v$9 = `${virtualDimensions().size}px`;
|
|
828
818
|
_p$._v$7 = web.classList(_el$4, _v$7, _p$._v$7);
|
|
829
819
|
_v$8 !== _p$._v$8 && _el$4.style.setProperty("top", _p$._v$8 = _v$8);
|
|
830
820
|
_v$9 !== _p$._v$9 && _el$4.style.setProperty("height", _p$._v$9 = _v$9);
|
|
831
821
|
return _p$;
|
|
832
822
|
}, {
|
|
833
|
-
_v$7:
|
|
834
|
-
_v$8:
|
|
835
|
-
_v$9:
|
|
823
|
+
_v$7: void 0,
|
|
824
|
+
_v$8: void 0,
|
|
825
|
+
_v$9: void 0
|
|
836
826
|
});
|
|
837
827
|
return _el$4;
|
|
838
828
|
}
|
|
@@ -841,19 +831,19 @@ const PianoRollGrid = () => {
|
|
|
841
831
|
});
|
|
842
832
|
}
|
|
843
833
|
}), null);
|
|
844
|
-
web.effect(() => web.className(_el$,
|
|
834
|
+
web.effect(() => web.className(_el$, _default5.PianoRollGrid));
|
|
845
835
|
return _el$;
|
|
846
836
|
})();
|
|
847
|
-
};
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
837
|
+
}, "PianoRollGrid");
|
|
838
|
+
var PianoRollGrid_default = PianoRollGrid;
|
|
839
|
+
var _tmpl$5 = /* @__PURE__ */ web.template(`<input step="0.01">`, 1);
|
|
840
|
+
var ZoomSliderControl = /* @__PURE__ */ __name((props) => {
|
|
851
841
|
const propsWithDefaults = solidJs.mergeProps({
|
|
852
842
|
orientation: "horizontal"
|
|
853
843
|
}, props);
|
|
854
844
|
const dimension = solidJs.createMemo(() => useViewPortDimension(props.dimensionName ?? propsWithDefaults.orientation));
|
|
855
845
|
return (() => {
|
|
856
|
-
const _el$ = _tmpl
|
|
846
|
+
const _el$ = _tmpl$5.cloneNode(true);
|
|
857
847
|
web.spread(_el$, web.mergeProps({
|
|
858
848
|
get min() {
|
|
859
849
|
return dimension().minZoom;
|
|
@@ -865,7 +855,7 @@ const ZoomSliderControl = props => {
|
|
|
865
855
|
get value() {
|
|
866
856
|
return dimension().zoom;
|
|
867
857
|
},
|
|
868
|
-
"onInput": event => {
|
|
858
|
+
"onInput": (event) => {
|
|
869
859
|
const value = event.currentTarget.valueAsNumber;
|
|
870
860
|
dimension().onZoomChange?.(value);
|
|
871
861
|
},
|
|
@@ -881,34 +871,32 @@ const ZoomSliderControl = props => {
|
|
|
881
871
|
width: "16px",
|
|
882
872
|
transform: "rotate(180deg)",
|
|
883
873
|
...{
|
|
884
|
-
"writing-mode": "bt-lr"
|
|
885
|
-
"-webkit-appearance": "slider-vertical"
|
|
874
|
+
"writing-mode": "bt-lr",
|
|
875
|
+
"-webkit-appearance": "slider-vertical"
|
|
886
876
|
},
|
|
887
|
-
|
|
888
|
-
...(typeof props.style === "object" && props.style)
|
|
877
|
+
...typeof props.style === "object" && props.style
|
|
889
878
|
} : {
|
|
890
879
|
margin: 0,
|
|
891
880
|
"margin-top": "4px",
|
|
892
881
|
"margin-bottom": "4px",
|
|
893
|
-
...
|
|
882
|
+
...typeof props.style === "object" && props.style
|
|
894
883
|
};
|
|
895
884
|
}
|
|
896
885
|
}), false, false);
|
|
897
886
|
return _el$;
|
|
898
887
|
})();
|
|
899
|
-
};
|
|
888
|
+
}, "ZoomSliderControl");
|
|
889
|
+
var ZoomSliderControl_default = ZoomSliderControl;
|
|
900
890
|
|
|
901
|
-
|
|
902
|
-
var
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
_tmpl$2$1 = /*#__PURE__*/web.template(`<div> </div>`, 2);
|
|
907
|
-
const PianoRollTrackList = () => {
|
|
891
|
+
// src/PianoRollTrackList.module.css
|
|
892
|
+
var _default6 = {};
|
|
893
|
+
var _tmpl$6 = /* @__PURE__ */ web.template(`<div></div>`, 2);
|
|
894
|
+
var _tmpl$22 = /* @__PURE__ */ web.template(`<div> </div>`, 2);
|
|
895
|
+
var PianoRollTrackList = /* @__PURE__ */ __name(() => {
|
|
908
896
|
const viewPort = solidJs.createMemo(() => useViewPortDimension("verticalTracks"));
|
|
909
897
|
const context = usePianoRollContext();
|
|
910
898
|
return (() => {
|
|
911
|
-
const _el$ = _tmpl
|
|
899
|
+
const _el$ = _tmpl$6.cloneNode(true);
|
|
912
900
|
web.insert(_el$, web.createComponent(solidJs.Index, {
|
|
913
901
|
get each() {
|
|
914
902
|
return context.tracks;
|
|
@@ -920,42 +908,38 @@ const PianoRollTrackList = () => {
|
|
|
920
908
|
return virtualDimensions().size > 0;
|
|
921
909
|
},
|
|
922
910
|
get children() {
|
|
923
|
-
const _el$2 = _tmpl$
|
|
924
|
-
_el$3 = _el$2.firstChild;
|
|
911
|
+
const _el$2 = _tmpl$22.cloneNode(true), _el$3 = _el$2.firstChild;
|
|
925
912
|
_el$2.$$click = () => context.onSelectedTrackIndexChange?.(index);
|
|
926
913
|
web.insert(_el$2, index, _el$3);
|
|
927
914
|
web.insert(_el$2, () => track().name || "[unnamed track]", null);
|
|
928
|
-
web.effect(_p$ => {
|
|
915
|
+
web.effect((_p$) => {
|
|
929
916
|
const _v$ = {
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
_v$2 = track().name,
|
|
934
|
-
_v$3 = `${virtualDimensions().offset}px`,
|
|
935
|
-
_v$4 = `${virtualDimensions().size}px`;
|
|
917
|
+
[_default6["Track"]]: true,
|
|
918
|
+
[_default6["selected"]]: index === context.selectedTrackIndex
|
|
919
|
+
}, _v$2 = track().name, _v$3 = `${virtualDimensions().offset}px`, _v$4 = `${virtualDimensions().size}px`;
|
|
936
920
|
_p$._v$ = web.classList(_el$2, _v$, _p$._v$);
|
|
937
921
|
_v$2 !== _p$._v$2 && web.setAttribute(_el$2, "title", _p$._v$2 = _v$2);
|
|
938
922
|
_v$3 !== _p$._v$3 && _el$2.style.setProperty("top", _p$._v$3 = _v$3);
|
|
939
923
|
_v$4 !== _p$._v$4 && _el$2.style.setProperty("height", _p$._v$4 = _v$4);
|
|
940
924
|
return _p$;
|
|
941
925
|
}, {
|
|
942
|
-
_v$:
|
|
943
|
-
_v$2:
|
|
944
|
-
_v$3:
|
|
945
|
-
_v$4:
|
|
926
|
+
_v$: void 0,
|
|
927
|
+
_v$2: void 0,
|
|
928
|
+
_v$3: void 0,
|
|
929
|
+
_v$4: void 0
|
|
946
930
|
});
|
|
947
931
|
return _el$2;
|
|
948
932
|
}
|
|
949
933
|
});
|
|
950
934
|
}
|
|
951
935
|
}));
|
|
952
|
-
web.effect(() => web.className(_el$,
|
|
936
|
+
web.effect(() => web.className(_el$, _default6.PianoRollTrackList));
|
|
953
937
|
return _el$;
|
|
954
938
|
})();
|
|
955
|
-
};
|
|
939
|
+
}, "PianoRollTrackList");
|
|
940
|
+
var PianoRollTrackList_default = PianoRollTrackList;
|
|
956
941
|
web.delegateEvents(["click"]);
|
|
957
|
-
|
|
958
|
-
const PianoRollScrollZoomViewPort = props => {
|
|
942
|
+
var PianoRollScrollZoomViewPort = /* @__PURE__ */ __name((props) => {
|
|
959
943
|
const zoomFactor = 500;
|
|
960
944
|
const context = usePianoRollContext();
|
|
961
945
|
return web.createComponent(ScrollZoomViewPort, {
|
|
@@ -967,7 +951,7 @@ const PianoRollScrollZoomViewPort = props => {
|
|
|
967
951
|
range: context.duration,
|
|
968
952
|
zoom: context.zoom * (zoomFactor / context.notesScrollerClientRect.width),
|
|
969
953
|
onPositionChange: context.onPositionChange,
|
|
970
|
-
onZoomChange: zoom => context.onZoomChange?.(zoom / (zoomFactor / context.notesScrollerClientRect.width)),
|
|
954
|
+
onZoomChange: (zoom) => context.onZoomChange?.(zoom / (zoomFactor / context.notesScrollerClientRect.width)),
|
|
971
955
|
minZoom: 1,
|
|
972
956
|
maxZoom: 500
|
|
973
957
|
}),
|
|
@@ -978,7 +962,7 @@ const PianoRollScrollZoomViewPort = props => {
|
|
|
978
962
|
range: 128,
|
|
979
963
|
zoom: context.verticalZoom * (zoomFactor / context.notesScrollerClientRect.height),
|
|
980
964
|
onPositionChange: context.onVerticalPositionChange,
|
|
981
|
-
onZoomChange: verticalZoom => context.onVerticalZoomChange?.(verticalZoom / (zoomFactor / context.notesScrollerClientRect.height)),
|
|
965
|
+
onZoomChange: (verticalZoom) => context.onVerticalZoomChange?.(verticalZoom / (zoomFactor / context.notesScrollerClientRect.height)),
|
|
982
966
|
minZoom: 1,
|
|
983
967
|
maxZoom: 10
|
|
984
968
|
}),
|
|
@@ -993,7 +977,7 @@ const PianoRollScrollZoomViewPort = props => {
|
|
|
993
977
|
range: context.tracks.length,
|
|
994
978
|
zoom: context.verticalTrackZoom * (zoomFactor / context.tracksScrollerClientRect.height),
|
|
995
979
|
onPositionChange: context.onVerticalTrackPositionChange,
|
|
996
|
-
onZoomChange: verticalTrackZoom => context.onVerticalTrackZoomChange?.(verticalTrackZoom / (zoomFactor / context.tracksScrollerClientRect.height)),
|
|
980
|
+
onZoomChange: (verticalTrackZoom) => context.onVerticalTrackZoomChange?.(verticalTrackZoom / (zoomFactor / context.tracksScrollerClientRect.height)),
|
|
997
981
|
minZoom: 0.8,
|
|
998
982
|
maxZoom: 3
|
|
999
983
|
}),
|
|
@@ -1005,9 +989,9 @@ const PianoRollScrollZoomViewPort = props => {
|
|
|
1005
989
|
return props.children;
|
|
1006
990
|
}
|
|
1007
991
|
});
|
|
1008
|
-
};
|
|
1009
|
-
|
|
1010
|
-
|
|
992
|
+
}, "PianoRollScrollZoomViewPort");
|
|
993
|
+
var PianoRollScrollZoomViewPort_default = PianoRollScrollZoomViewPort;
|
|
994
|
+
var defaultRect = {
|
|
1011
995
|
left: 0,
|
|
1012
996
|
width: 0,
|
|
1013
997
|
top: 0,
|
|
@@ -1021,10 +1005,11 @@ function useBoundingClientRect(containerRef) {
|
|
|
1021
1005
|
const [boundingClientRect, setBoundingClientRect] = solidJs.createSignal(defaultRect);
|
|
1022
1006
|
solidJs.createEffect(() => {
|
|
1023
1007
|
const container = containerRef();
|
|
1024
|
-
if (!container)
|
|
1025
|
-
|
|
1008
|
+
if (!container)
|
|
1009
|
+
return;
|
|
1010
|
+
const updateBoundingClientRect = /* @__PURE__ */ __name(() => {
|
|
1026
1011
|
setBoundingClientRect(container.getBoundingClientRect() ?? defaultRect);
|
|
1027
|
-
};
|
|
1012
|
+
}, "updateBoundingClientRect");
|
|
1028
1013
|
const resizeObserver = new ResizeObserver(updateBoundingClientRect);
|
|
1029
1014
|
resizeObserver.observe(container);
|
|
1030
1015
|
updateBoundingClientRect();
|
|
@@ -1034,15 +1019,17 @@ function useBoundingClientRect(containerRef) {
|
|
|
1034
1019
|
});
|
|
1035
1020
|
return boundingClientRect;
|
|
1036
1021
|
}
|
|
1022
|
+
__name(useBoundingClientRect, "useBoundingClientRect");
|
|
1037
1023
|
|
|
1038
|
-
|
|
1024
|
+
// src/PianoRollNotesScroller.tsx
|
|
1025
|
+
var PianoRollNotesScroller = /* @__PURE__ */ __name((props) => {
|
|
1039
1026
|
const context = usePianoRollContext();
|
|
1040
1027
|
const [ref, setRef] = solidJs.createSignal();
|
|
1041
1028
|
const clientRect = useBoundingClientRect(ref);
|
|
1042
1029
|
solidJs.createEffect(() => {
|
|
1043
1030
|
context.onNotesScrollerClientRectChange(clientRect());
|
|
1044
1031
|
});
|
|
1045
|
-
return web.createComponent(
|
|
1032
|
+
return web.createComponent(ScrollZoomContainer_default, {
|
|
1046
1033
|
ref: setRef,
|
|
1047
1034
|
get verticalDimensionName() {
|
|
1048
1035
|
return context.mode === "keys" ? "vertical" : "verticalTracks";
|
|
@@ -1051,16 +1038,16 @@ const PianoRollNotesScroller = props => {
|
|
|
1051
1038
|
return props.children;
|
|
1052
1039
|
}
|
|
1053
1040
|
});
|
|
1054
|
-
};
|
|
1055
|
-
|
|
1056
|
-
|
|
1041
|
+
}, "PianoRollNotesScroller");
|
|
1042
|
+
var PianoRollNotesScroller_default = PianoRollNotesScroller;
|
|
1043
|
+
var PianoRollTrackListScroller = /* @__PURE__ */ __name((props) => {
|
|
1057
1044
|
const context = usePianoRollContext();
|
|
1058
1045
|
const [ref, setRef] = solidJs.createSignal();
|
|
1059
1046
|
const clientRect = useBoundingClientRect(ref);
|
|
1060
1047
|
solidJs.createEffect(() => {
|
|
1061
1048
|
context.onTracksScrollerClientRectChange(clientRect());
|
|
1062
1049
|
});
|
|
1063
|
-
return web.createComponent(
|
|
1050
|
+
return web.createComponent(ScrollZoomContainer_default, {
|
|
1064
1051
|
ref: setRef,
|
|
1065
1052
|
horizontalDimensionName: "horizontalTracks",
|
|
1066
1053
|
verticalDimensionName: "verticalTracks",
|
|
@@ -1071,29 +1058,30 @@ const PianoRollTrackListScroller = props => {
|
|
|
1071
1058
|
return props.children;
|
|
1072
1059
|
}
|
|
1073
1060
|
});
|
|
1074
|
-
};
|
|
1061
|
+
}, "PianoRollTrackListScroller");
|
|
1062
|
+
var PianoRollTrackListScroller_default = PianoRollTrackListScroller;
|
|
1075
1063
|
|
|
1076
|
-
|
|
1077
|
-
var
|
|
1078
|
-
styleInject(css_248z);
|
|
1064
|
+
// src/PianoRollScale.module.css
|
|
1065
|
+
var _default7 = {};
|
|
1079
1066
|
|
|
1080
|
-
|
|
1081
|
-
|
|
1067
|
+
// src/PianoRollScale.tsx
|
|
1068
|
+
var _tmpl$7 = /* @__PURE__ */ web.template(`<div></div>`, 2);
|
|
1069
|
+
var PianoRollScale = /* @__PURE__ */ __name(() => {
|
|
1082
1070
|
const horizontalViewPort = solidJs.createMemo(() => useViewPortDimension("horizontal"));
|
|
1083
|
-
const grid =
|
|
1071
|
+
const grid = usePianoRollGrid_default();
|
|
1084
1072
|
const context = usePianoRollContext();
|
|
1085
|
-
const updatePlayheadPosition = event => {
|
|
1073
|
+
const updatePlayheadPosition = /* @__PURE__ */ __name((event) => {
|
|
1086
1074
|
const position = horizontalViewPort().calculatePosition(event.clientX);
|
|
1087
1075
|
context.onPlayHeadPositionChange(position, event);
|
|
1088
|
-
};
|
|
1076
|
+
}, "updatePlayheadPosition");
|
|
1089
1077
|
return (() => {
|
|
1090
|
-
const _el$ = _tmpl
|
|
1091
|
-
_el$.$$mousedown = event => {
|
|
1078
|
+
const _el$ = _tmpl$7.cloneNode(true);
|
|
1079
|
+
_el$.$$mousedown = (event) => {
|
|
1092
1080
|
updatePlayheadPosition(event);
|
|
1093
|
-
const handleMouseUp = () => {
|
|
1081
|
+
const handleMouseUp = /* @__PURE__ */ __name(() => {
|
|
1094
1082
|
window.removeEventListener("mousemove", updatePlayheadPosition);
|
|
1095
1083
|
window.removeEventListener("mouseup", handleMouseUp);
|
|
1096
|
-
};
|
|
1084
|
+
}, "handleMouseUp");
|
|
1097
1085
|
window.addEventListener("mousemove", updatePlayheadPosition);
|
|
1098
1086
|
window.addEventListener("mouseup", handleMouseUp);
|
|
1099
1087
|
};
|
|
@@ -1101,57 +1089,57 @@ const PianoRollScale = () => {
|
|
|
1101
1089
|
get each() {
|
|
1102
1090
|
return grid();
|
|
1103
1091
|
},
|
|
1104
|
-
children: entry => {
|
|
1092
|
+
children: (entry) => {
|
|
1105
1093
|
return web.createComponent(solidJs.Show, {
|
|
1106
1094
|
get when() {
|
|
1107
1095
|
return horizontalViewPort().isVisible(entry().virtualDimensions);
|
|
1108
1096
|
},
|
|
1109
1097
|
get children() {
|
|
1110
|
-
const _el$2 = _tmpl
|
|
1098
|
+
const _el$2 = _tmpl$7.cloneNode(true);
|
|
1111
1099
|
web.insert(_el$2, web.createComponent(solidJs.Show, {
|
|
1112
1100
|
get when() {
|
|
1113
1101
|
return entry().showLabel;
|
|
1114
1102
|
},
|
|
1115
1103
|
get children() {
|
|
1116
|
-
const _el$3 = _tmpl
|
|
1104
|
+
const _el$3 = _tmpl$7.cloneNode(true);
|
|
1117
1105
|
web.insert(_el$3, () => entry().label);
|
|
1118
|
-
web.effect(() => web.className(_el$3,
|
|
1106
|
+
web.effect(() => web.className(_el$3, _default7["PianoRollScale-Label"]));
|
|
1119
1107
|
return _el$3;
|
|
1120
1108
|
}
|
|
1121
1109
|
}));
|
|
1122
|
-
web.effect(_p$ => {
|
|
1110
|
+
web.effect((_p$) => {
|
|
1123
1111
|
const _v$ = {
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
_v$2 = `${entry().virtualDimensions.offset}px`,
|
|
1129
|
-
_v$3 = `${entry().virtualDimensions.size}px`;
|
|
1112
|
+
[_default7["PianoRollScale-Time"]]: true,
|
|
1113
|
+
[_default7["Highlighted"]]: entry().isHighlighted,
|
|
1114
|
+
[_default7["HighlightedBorder"]]: entry().hasHighlightedBorder
|
|
1115
|
+
}, _v$2 = `${entry().virtualDimensions.offset}px`, _v$3 = `${entry().virtualDimensions.size}px`;
|
|
1130
1116
|
_p$._v$ = web.classList(_el$2, _v$, _p$._v$);
|
|
1131
1117
|
_v$2 !== _p$._v$2 && _el$2.style.setProperty("left", _p$._v$2 = _v$2);
|
|
1132
1118
|
_v$3 !== _p$._v$3 && _el$2.style.setProperty("width", _p$._v$3 = _v$3);
|
|
1133
1119
|
return _p$;
|
|
1134
1120
|
}, {
|
|
1135
|
-
_v$:
|
|
1136
|
-
_v$2:
|
|
1137
|
-
_v$3:
|
|
1121
|
+
_v$: void 0,
|
|
1122
|
+
_v$2: void 0,
|
|
1123
|
+
_v$3: void 0
|
|
1138
1124
|
});
|
|
1139
1125
|
return _el$2;
|
|
1140
1126
|
}
|
|
1141
1127
|
});
|
|
1142
1128
|
}
|
|
1143
1129
|
}));
|
|
1144
|
-
web.effect(() => web.className(_el$,
|
|
1130
|
+
web.effect(() => web.className(_el$, _default7.PianoRollScale));
|
|
1145
1131
|
return _el$;
|
|
1146
1132
|
})();
|
|
1147
|
-
};
|
|
1133
|
+
}, "PianoRollScale");
|
|
1134
|
+
var PianoRollScale_default = PianoRollScale;
|
|
1148
1135
|
web.delegateEvents(["mousedown"]);
|
|
1149
1136
|
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1137
|
+
// src/PianoRoll.tsx
|
|
1138
|
+
var _tmpl$8 = /* @__PURE__ */ web.template(`<div><button><div></div></button></div>`, 6);
|
|
1139
|
+
var _tmpl$23 = /* @__PURE__ */ web.template(`<div><div></div><div></div></div>`, 6);
|
|
1140
|
+
var _tmpl$32 = /* @__PURE__ */ web.template(`<div><div><div></div></div></div>`, 6);
|
|
1141
|
+
var _tmpl$42 = /* @__PURE__ */ web.template(`<div></div>`, 2);
|
|
1142
|
+
var PianoRoll = /* @__PURE__ */ __name((allProps) => {
|
|
1155
1143
|
const propsWithDefaults = solidJs.mergeProps({
|
|
1156
1144
|
showAllTracks: false
|
|
1157
1145
|
}, allProps);
|
|
@@ -1159,19 +1147,17 @@ const PianoRoll = allProps => {
|
|
|
1159
1147
|
return web.createComponent(PianoRollContextProvider, {
|
|
1160
1148
|
value: context,
|
|
1161
1149
|
get children() {
|
|
1162
|
-
const _el$ = _tmpl$
|
|
1150
|
+
const _el$ = _tmpl$42.cloneNode(true);
|
|
1163
1151
|
web.spread(_el$, web.mergeProps(divProps, {
|
|
1164
1152
|
get ["class"]() {
|
|
1165
|
-
return
|
|
1153
|
+
return _default.PianoRoll;
|
|
1166
1154
|
}
|
|
1167
1155
|
}), false, true);
|
|
1168
|
-
web.insert(_el$, web.createComponent(
|
|
1156
|
+
web.insert(_el$, web.createComponent(PianoRollScrollZoomViewPort_default, {
|
|
1169
1157
|
get children() {
|
|
1170
1158
|
return [(() => {
|
|
1171
|
-
const _el$2 = _tmpl$
|
|
1172
|
-
|
|
1173
|
-
_el$7 = _el$3.firstChild;
|
|
1174
|
-
web.insert(_el$2, web.createComponent(ZoomSliderControl, {
|
|
1159
|
+
const _el$2 = _tmpl$32.cloneNode(true), _el$3 = _el$2.firstChild, _el$7 = _el$3.firstChild;
|
|
1160
|
+
web.insert(_el$2, web.createComponent(ZoomSliderControl_default, {
|
|
1175
1161
|
orientation: "vertical",
|
|
1176
1162
|
dimensionName: "verticalTracks"
|
|
1177
1163
|
}), _el$3);
|
|
@@ -1180,9 +1166,7 @@ const PianoRoll = allProps => {
|
|
|
1180
1166
|
return context.showTrackList;
|
|
1181
1167
|
},
|
|
1182
1168
|
get children() {
|
|
1183
|
-
const _el$4 = _tmpl
|
|
1184
|
-
_el$5 = _el$4.firstChild,
|
|
1185
|
-
_el$6 = _el$5.firstChild;
|
|
1169
|
+
const _el$4 = _tmpl$8.cloneNode(true), _el$5 = _el$4.firstChild, _el$6 = _el$5.firstChild;
|
|
1186
1170
|
_el$4.style.setProperty("height", "30px");
|
|
1187
1171
|
_el$4.style.setProperty("border-right", "1px black solid");
|
|
1188
1172
|
_el$5.$$click = () => context.onModeChange(context.mode === "keys" ? "tracks" : "keys");
|
|
@@ -1190,7 +1174,7 @@ const PianoRoll = allProps => {
|
|
|
1190
1174
|
_el$5.style.setProperty("line-height", "16px");
|
|
1191
1175
|
_el$5.style.setProperty("cursor", "pointer");
|
|
1192
1176
|
_el$5.style.setProperty("overflow", "hidden");
|
|
1193
|
-
web.insert(_el$6, () => context.mode === "keys" ? "
|
|
1177
|
+
web.insert(_el$6, () => context.mode === "keys" ? "\u2261" : "\u{1F3B9}");
|
|
1194
1178
|
web.effect(() => web.setAttribute(_el$5, "title", context.mode === "keys" ? "Tracks Mode" : "Keys Mode"));
|
|
1195
1179
|
return _el$4;
|
|
1196
1180
|
}
|
|
@@ -1203,9 +1187,9 @@ const PianoRoll = allProps => {
|
|
|
1203
1187
|
return context.showTrackList;
|
|
1204
1188
|
},
|
|
1205
1189
|
get children() {
|
|
1206
|
-
return web.createComponent(
|
|
1190
|
+
return web.createComponent(PianoRollTrackListScroller_default, {
|
|
1207
1191
|
get children() {
|
|
1208
|
-
return web.createComponent(
|
|
1192
|
+
return web.createComponent(PianoRollTrackList_default, {});
|
|
1209
1193
|
}
|
|
1210
1194
|
});
|
|
1211
1195
|
}
|
|
@@ -1215,52 +1199,49 @@ const PianoRoll = allProps => {
|
|
|
1215
1199
|
return context.mode === "keys";
|
|
1216
1200
|
},
|
|
1217
1201
|
get children() {
|
|
1218
|
-
return web.createComponent(
|
|
1202
|
+
return web.createComponent(PianoRollKeys_default, {});
|
|
1219
1203
|
}
|
|
1220
1204
|
}), null);
|
|
1221
|
-
web.insert(_el$2, web.createComponent(
|
|
1205
|
+
web.insert(_el$2, web.createComponent(PianoRollNotesScroller_default, {
|
|
1222
1206
|
get children() {
|
|
1223
1207
|
return [web.memo(() => allProps.children), (() => {
|
|
1224
|
-
const _el$8 = _tmpl$
|
|
1225
|
-
_el$9 = _el$8.firstChild,
|
|
1226
|
-
_el$10 = _el$9.nextSibling;
|
|
1208
|
+
const _el$8 = _tmpl$23.cloneNode(true), _el$9 = _el$8.firstChild, _el$10 = _el$9.nextSibling;
|
|
1227
1209
|
_el$8.style.setProperty("width", "100%");
|
|
1228
1210
|
_el$8.style.setProperty("display", "flex");
|
|
1229
1211
|
_el$8.style.setProperty("height", "100%");
|
|
1230
1212
|
_el$8.style.setProperty("flex-direction", "column");
|
|
1231
1213
|
_el$8.style.setProperty("overflow", "hidden");
|
|
1232
1214
|
_el$9.style.setProperty("height", "30px");
|
|
1233
|
-
web.insert(_el$9, web.createComponent(
|
|
1215
|
+
web.insert(_el$9, web.createComponent(PianoRollScale_default, {}));
|
|
1234
1216
|
_el$10.style.setProperty("flex", "1");
|
|
1235
1217
|
_el$10.style.setProperty("position", "relative");
|
|
1236
1218
|
_el$10.style.setProperty("overflow", "hidden");
|
|
1237
|
-
web.insert(_el$10, web.createComponent(
|
|
1238
|
-
web.insert(_el$10, web.createComponent(
|
|
1219
|
+
web.insert(_el$10, web.createComponent(PianoRollGrid_default, {}), null);
|
|
1220
|
+
web.insert(_el$10, web.createComponent(PianoRollNotes_default, {}), null);
|
|
1239
1221
|
return _el$8;
|
|
1240
1222
|
})()];
|
|
1241
1223
|
}
|
|
1242
1224
|
}), null);
|
|
1243
|
-
web.insert(_el$2, web.createComponent(
|
|
1225
|
+
web.insert(_el$2, web.createComponent(ZoomSliderControl_default, {
|
|
1244
1226
|
orientation: "vertical",
|
|
1245
1227
|
get disabled() {
|
|
1246
1228
|
return context.mode !== "keys";
|
|
1247
1229
|
}
|
|
1248
1230
|
}), null);
|
|
1249
|
-
web.effect(_p$ => {
|
|
1250
|
-
const _v$ =
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
};
|
|
1231
|
+
web.effect((_p$) => {
|
|
1232
|
+
const _v$ = _default.PianoRollContainer, _v$2 = {
|
|
1233
|
+
[_default.PianoRollLeftColumn]: true,
|
|
1234
|
+
[_default.showTrackList]: context.showTrackList
|
|
1235
|
+
};
|
|
1255
1236
|
_v$ !== _p$._v$ && web.className(_el$2, _p$._v$ = _v$);
|
|
1256
1237
|
_p$._v$2 = web.classList(_el$3, _v$2, _p$._v$2);
|
|
1257
1238
|
return _p$;
|
|
1258
1239
|
}, {
|
|
1259
|
-
_v$:
|
|
1260
|
-
_v$2:
|
|
1240
|
+
_v$: void 0,
|
|
1241
|
+
_v$2: void 0
|
|
1261
1242
|
});
|
|
1262
1243
|
return _el$2;
|
|
1263
|
-
})(), web.createComponent(
|
|
1244
|
+
})(), web.createComponent(ZoomSliderControl_default, {
|
|
1264
1245
|
orientation: "horizontal",
|
|
1265
1246
|
get style() {
|
|
1266
1247
|
return {
|
|
@@ -1274,22 +1255,23 @@ const PianoRoll = allProps => {
|
|
|
1274
1255
|
return _el$;
|
|
1275
1256
|
}
|
|
1276
1257
|
});
|
|
1277
|
-
};
|
|
1258
|
+
}, "PianoRoll");
|
|
1259
|
+
exports.PianoRoll = PianoRoll;
|
|
1278
1260
|
web.delegateEvents(["click"]);
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
const PlayHead = allProps => {
|
|
1261
|
+
var _tmpl$9 = /* @__PURE__ */ web.template(`<div class="PlayHead"></div>`, 2);
|
|
1262
|
+
var PlayHead = /* @__PURE__ */ __name((allProps) => {
|
|
1282
1263
|
const [props, divProps] = solidJs.splitProps(allProps, ["position", "sync", "onPositionChange", "dimensionName"]);
|
|
1283
1264
|
const viewPort = useViewPortDimension(props.dimensionName ?? "horizontal");
|
|
1284
1265
|
solidJs.createEffect(() => {
|
|
1285
|
-
if (!props.sync)
|
|
1266
|
+
if (!props.sync)
|
|
1267
|
+
return;
|
|
1286
1268
|
const maxPosition = viewPort.range;
|
|
1287
1269
|
const newPosition = clamp(props.position - viewPort.range / viewPort.zoom / 2, 0, maxPosition);
|
|
1288
1270
|
viewPort.onPositionChange?.(newPosition);
|
|
1289
1271
|
});
|
|
1290
1272
|
const leftPosition = solidJs.createMemo(() => viewPort.calculatePixelOffset(props.position));
|
|
1291
1273
|
return (() => {
|
|
1292
|
-
const _el$ = _tmpl
|
|
1274
|
+
const _el$ = _tmpl$9.cloneNode(true);
|
|
1293
1275
|
web.spread(_el$, web.mergeProps(divProps, {
|
|
1294
1276
|
get style() {
|
|
1295
1277
|
return {
|
|
@@ -1299,43 +1281,44 @@ const PlayHead = allProps => {
|
|
|
1299
1281
|
left: `${leftPosition()}px`,
|
|
1300
1282
|
"background-color": "green",
|
|
1301
1283
|
cursor: "pointer",
|
|
1302
|
-
...
|
|
1284
|
+
...typeof divProps.style === "object" && divProps.style
|
|
1303
1285
|
};
|
|
1304
1286
|
},
|
|
1305
|
-
"onMouseDown": event => {
|
|
1287
|
+
"onMouseDown": (event) => {
|
|
1306
1288
|
event.preventDefault();
|
|
1307
1289
|
event.stopPropagation();
|
|
1308
|
-
const handleMouseMove =
|
|
1309
|
-
const newPosition = viewPort.calculatePosition(
|
|
1310
|
-
props.onPositionChange?.(newPosition,
|
|
1311
|
-
};
|
|
1312
|
-
const handleMouseUp = () => {
|
|
1290
|
+
const handleMouseMove = /* @__PURE__ */ __name((event2) => {
|
|
1291
|
+
const newPosition = viewPort.calculatePosition(event2.clientX);
|
|
1292
|
+
props.onPositionChange?.(newPosition, event2);
|
|
1293
|
+
}, "handleMouseMove");
|
|
1294
|
+
const handleMouseUp = /* @__PURE__ */ __name(() => {
|
|
1313
1295
|
window.removeEventListener("mousemove", handleMouseMove);
|
|
1314
1296
|
window.removeEventListener("mouseup", handleMouseUp);
|
|
1315
|
-
};
|
|
1297
|
+
}, "handleMouseUp");
|
|
1316
1298
|
window.addEventListener("mousemove", handleMouseMove);
|
|
1317
1299
|
window.addEventListener("mouseup", handleMouseUp);
|
|
1318
1300
|
}
|
|
1319
1301
|
}), false, false);
|
|
1320
1302
|
return _el$;
|
|
1321
1303
|
})();
|
|
1322
|
-
};
|
|
1323
|
-
|
|
1324
|
-
|
|
1304
|
+
}, "PlayHead");
|
|
1305
|
+
exports.PlayHead = PlayHead;
|
|
1306
|
+
var useNotes = /* @__PURE__ */ __name(() => {
|
|
1325
1307
|
const [notes, onNotesChange] = solidJs.createSignal([]);
|
|
1326
|
-
const onNoteChange = (index, note) => {
|
|
1308
|
+
const onNoteChange = /* @__PURE__ */ __name((index, note) => {
|
|
1327
1309
|
onNotesChange([...notes().slice(0, index), note, ...notes().splice(index + 1)]);
|
|
1328
|
-
};
|
|
1329
|
-
const onInsertNote = note => {
|
|
1330
|
-
const index = Math.max(
|
|
1331
|
-
ticks
|
|
1332
|
-
|
|
1310
|
+
}, "onNoteChange");
|
|
1311
|
+
const onInsertNote = /* @__PURE__ */ __name((note) => {
|
|
1312
|
+
const index = Math.max(
|
|
1313
|
+
notes().findIndex(({ ticks }) => ticks > note.ticks),
|
|
1314
|
+
0
|
|
1315
|
+
);
|
|
1333
1316
|
onNotesChange([...notes().slice(0, index), note, ...notes().splice(index)]);
|
|
1334
1317
|
return index;
|
|
1335
|
-
};
|
|
1336
|
-
const onRemoveNote = index => {
|
|
1318
|
+
}, "onInsertNote");
|
|
1319
|
+
const onRemoveNote = /* @__PURE__ */ __name((index) => {
|
|
1337
1320
|
onNotesChange([...notes().slice(0, index), ...notes().splice(index + 1)]);
|
|
1338
|
-
};
|
|
1321
|
+
}, "onRemoveNote");
|
|
1339
1322
|
return {
|
|
1340
1323
|
notes,
|
|
1341
1324
|
onNotesChange,
|
|
@@ -1343,10 +1326,5 @@ const useNotes = () => {
|
|
|
1343
1326
|
onInsertNote,
|
|
1344
1327
|
onRemoveNote
|
|
1345
1328
|
};
|
|
1346
|
-
};
|
|
1347
|
-
|
|
1348
|
-
exports.PianoRoll = PianoRoll;
|
|
1349
|
-
exports.PlayHead = PlayHead;
|
|
1350
|
-
exports.createPianoRollstate = createPianoRollstate;
|
|
1329
|
+
}, "useNotes");
|
|
1351
1330
|
exports.useNotes = useNotes;
|
|
1352
|
-
//# sourceMappingURL=index.js.map
|