solid-pianoroll 0.0.24 → 0.0.26

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.
Files changed (53) hide show
  1. package/dist/{cjs/index.js → dev.cjs} +408 -430
  2. package/dist/dev.css +212 -0
  3. package/dist/dev.js +1330 -0
  4. package/dist/dev.jsx +1130 -0
  5. package/dist/index.cjs +1330 -0
  6. package/dist/index.css +212 -0
  7. package/dist/{types/usePianoRollState.d.ts → index.d.ts} +38 -6
  8. package/dist/{esm/index.js → index.js} +412 -429
  9. package/dist/index.jsx +1130 -0
  10. package/package.json +46 -34
  11. package/dist/cjs/index.js.map +0 -1
  12. package/dist/esm/index.js.map +0 -1
  13. package/dist/source/PianoRoll.jsx +0 -82
  14. package/dist/source/PianoRollContext.jsx +0 -11
  15. package/dist/source/PianoRollGrid.jsx +0 -64
  16. package/dist/source/PianoRollKeys.jsx +0 -72
  17. package/dist/source/PianoRollNotes.jsx +0 -160
  18. package/dist/source/PianoRollNotesScroller.jsx +0 -16
  19. package/dist/source/PianoRollScale.jsx +0 -43
  20. package/dist/source/PianoRollScrollZoomViewPort.jsx +0 -49
  21. package/dist/source/PianoRollTrackList.jsx +0 -27
  22. package/dist/source/PianoRollTrackListScroller.jsx +0 -16
  23. package/dist/source/index.jsx +0 -5
  24. package/dist/source/types.js +0 -1
  25. package/dist/source/useBoundingClientRect.js +0 -29
  26. package/dist/source/useNotes.js +0 -23
  27. package/dist/source/usePianoRollGrid.js +0 -45
  28. package/dist/source/usePianoRollState.js +0 -126
  29. package/dist/source/viewport/PlayHead.jsx +0 -43
  30. package/dist/source/viewport/ScrollZoomContainer.jsx +0 -104
  31. package/dist/source/viewport/ScrollZoomViewPort.jsx +0 -31
  32. package/dist/source/viewport/ZoomSliderControl.jsx +0 -29
  33. package/dist/source/viewport/createViewPortDimension.js +0 -51
  34. package/dist/types/PianoRoll.d.ts +0 -8
  35. package/dist/types/PianoRollContext.d.ts +0 -45
  36. package/dist/types/PianoRollGrid.d.ts +0 -2
  37. package/dist/types/PianoRollKeys.d.ts +0 -9
  38. package/dist/types/PianoRollNotes.d.ts +0 -5
  39. package/dist/types/PianoRollNotesScroller.d.ts +0 -3
  40. package/dist/types/PianoRollScale.d.ts +0 -2
  41. package/dist/types/PianoRollScrollZoomViewPort.d.ts +0 -3
  42. package/dist/types/PianoRollTrackList.d.ts +0 -2
  43. package/dist/types/PianoRollTrackListScroller.d.ts +0 -3
  44. package/dist/types/index.d.ts +0 -6
  45. package/dist/types/types.d.ts +0 -8
  46. package/dist/types/useBoundingClientRect.d.ts +0 -3
  47. package/dist/types/useNotes.d.ts +0 -9
  48. package/dist/types/usePianoRollGrid.d.ts +0 -13
  49. package/dist/types/viewport/PlayHead.d.ts +0 -8
  50. package/dist/types/viewport/ScrollZoomContainer.d.ts +0 -8
  51. package/dist/types/viewport/ScrollZoomViewPort.d.ts +0 -39
  52. package/dist/types/viewport/ZoomSliderControl.d.ts +0 -6
  53. 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
- function styleInject(css, ref) {
8
- if (ref === void 0) ref = {};
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
- var css_248z$6 = ".PianoRoll-module_PianoRoll__rkRYx {\n box-sizing: border-box;\n display: flex;\n overflow: hidden;\n flex-direction: column;\n height: 100%;\n user-select: none;\n}\n\n.PianoRoll-module_PianoRollContainer__Oyxr7 {\n overflow: hidden;\n height: 100%;\n display: flex;\n flex-direction: row;\n}\n\n.PianoRoll-module_PianoRollLeftColumn__S6SZQ {\n display: flex;\n overflow: hidden;\n flex-direction: column;\n max-width: 250px;\n margin-top: 30px;\n}\n.PianoRoll-module_PianoRollLeftColumn__S6SZQ.PianoRoll-module_showTrackList__mqsrT {\n width: 30%;\n margin-top: 0;\n}\n\n.PianoRoll-module_PianoRollRightColumn__V98HV {\n display: flex;\n position: relative;\n flex-direction: column;\n flex: 1;\n height: 100%;\n}\n";
33
- var styles$6 = {"PianoRoll":"PianoRoll-module_PianoRoll__rkRYx","PianoRollContainer":"PianoRoll-module_PianoRollContainer__Oyxr7","PianoRollLeftColumn":"PianoRoll-module_PianoRollLeftColumn__S6SZQ","showTrackList":"PianoRoll-module_showTrackList__mqsrT","PianoRollRightColumn":"PianoRoll-module_PianoRollRightColumn__V98HV"};
34
- styleInject(css_248z$6);
35
-
36
- const defaultState = {
10
+ // css-module:./PianoRoll.module.css#css-module
11
+ var PianoRoll_module_default = { "PianoRoll": "_PianoRoll_1v1e7_1", "PianoRollContainer": "_PianoRollContainer_1v1e7_10", "PianoRollLeftColumn": "_PianoRollLeftColumn_1v1e7_17", "showTrackList": "_showTrackList_1v1e7_24", "PianoRollRightColumn": "_PianoRollRightColumn_1v1e7_29" };
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
- left: 0,
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
- const propNameToHandlerName = name => `on${name[0]?.toUpperCase()}${name.slice(1)}Change`;
66
- const pianoRollStatePropNames = [...Object.keys(defaultState), ...Object.keys(defaultState).map(propNameToHandlerName), "onNoteChange", "onInsertNote", "onRemoveNote", "onNoteDown", "onNoteUp", "isKeyDown", "snapValueToGridIfEnabled"];
67
- const createPianoRollstate = initialState => {
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(Object.entries(state).map(entry => {
73
- const handlerName = propNameToHandlerName(entry[0]);
74
- return [handlerName, (value, originalEvent) => {
75
- const handler = initialState?.[handlerName];
76
- setState(entry[0], value);
77
- if (handler) {
78
- handler(value, originalEvent);
79
- }
80
- }];
81
- }));
82
- const onPlayheadPositionChange = (playheadPosition, originalEvent) => {
83
- handlers.onPlayHeadPositionChange(snapValueToGridIfEnabled(playheadPosition, !!originalEvent?.altKey));
84
- };
85
- const updateNotes = async (trackIndex, getNotes) => {
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) return;
70
+ if (!track)
71
+ return;
88
72
  const notes = track.notes;
89
- handlers.onTracksChange([...state.tracks.slice(0, trackIndex), {
90
- ...track,
91
- notes: getNotes(notes)
92
- }, ...state.tracks.slice(trackIndex + 1)]);
93
- };
94
- const onNoteChange = (trackIndex, noteIndex, note) => {
95
- updateNotes(trackIndex, notes => [...notes.slice(0, noteIndex), note, ...notes.slice(noteIndex + 1)]);
96
- };
97
- const onInsertNote = (trackIndex, note) => {
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) return -1;
88
+ if (!track)
89
+ return -1;
100
90
  const notes = track.notes;
101
- const newNoteIndex = Math.max(notes.findIndex(({
102
- ticks
103
- }) => ticks > note.ticks), 0);
104
- updateNotes(trackIndex, notes => [...notes.slice(0, newNoteIndex), note, ...notes.slice(newNoteIndex)]);
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 => [...notes.slice(0, noteIndex), ...notes.slice(noteIndex + 1)]);
109
- };
110
- const updateKeyPressedState = (trackIndex, keyNumber, value) => {
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
- const PianoRollContext = solidJs.createContext();
144
- const PianoRollContextProvider = PianoRollContext.Provider;
145
- const usePianoRollContext = () => {
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) throw new Error("No PianoRollContext found");
147
+ if (!context)
148
+ throw new Error("No PianoRollContext found");
148
149
  return context;
149
- };
150
- const splitContextProps = allProps => solidJs.splitProps(allProps, [...pianoRollStatePropNames, "showAllTracks", "showTrackList"]);
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
+ // css-module:./PianoRollKeys.module.css#css-module
154
+ var PianoRollKeys_module_default = { "PianoRollKeys": "_PianoRollKeys_1ne9i_1", "Key": "_Key_1ne9i_14", "black": "_black_1ne9i_29", "white": "_white_1ne9i_38", "down": "_down_1ne9i_46" };
156
155
  function createViewPortDimension(getState) {
157
- const getStateWithFunctions = () => {
158
- const state = getState();
159
- const onZoomChange = zoom => state.onZoomChange?.(clamp(zoom, state.minZoom, state.maxZoom));
160
- const onPositionChange = position => state.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
- ...state,
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
- function isVisible({
203
- offset,
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
- const clamp = (value, min, max) => Math.max(min, Math.min(max, value));
210
+ __name(createViewPortDimension, "createViewPortDimension");
211
+ var clamp = /* @__PURE__ */ __name((value, min, max) => Math.max(min, Math.min(max, value)), "clamp");
211
212
 
212
- const defaultViewPortProps = {
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
- const ScrollZoomViewPort = props => {
222
+ var ScrollZoomViewPort = /* @__PURE__ */ __name((props) => {
221
223
  const viewPorts = Object.entries(props.dimensions).map(([name, viewPortProps]) => createViewPortDimension(() => ({
222
- name: 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
- const ScrollZoomViewPortContext = solidJs.createContext([]);
237
- const useViewPortDimension = name => {
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(viewPort => viewPort.name === name) : viewPorts[viewPorts.length - 1];
240
- if (!viewPort) throw new Error(`ViewPort dimension "${name}" not found.`);
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
- var css_248z$4 = ".ScrollZoomContainer-module_ScrollZoomContainer__o2bRt {\n height: 100%;\n width: 100%;\n z-index: 4;\n}\n";
245
- var styles$4 = {"ScrollZoomContainer":"ScrollZoomContainer-module_ScrollZoomContainer__o2bRt"};
246
- styleInject(css_248z$4);
247
+ // css-module:./ScrollZoomContainer.module.css#css-module
248
+ var ScrollZoomContainer_module_default = { "ScrollZoomContainer": "_ScrollZoomContainer_f395r_1" };
247
249
 
248
- const _tmpl$$8 = /*#__PURE__*/web.template(`<div><div><div><div></div></div></div></div>`, 8);
249
- const ScrollZoomContainer = props => {
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) return;
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$$8.cloneNode(true),
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
- ...(typeof divProps.style === "object" && divProps.style)
333
+ ...typeof divProps.style === "object" && divProps.style
333
334
  };
334
335
  },
335
336
  get classList() {
336
337
  return {
337
- [styles$4.ScrollZoomContainer]: true,
338
+ [ScrollZoomContainer_module_default.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$: undefined,
362
- _v$2: undefined,
363
- _v$3: undefined,
364
- _v$4: undefined
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
- const _tmpl$$7 = /*#__PURE__*/web.template(`<div></div>`, 2);
371
- const PianoRollKeys = () => {
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$$7.cloneNode(true);
388
- web.insert(_el$, web.createComponent(ScrollZoomContainer, {
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$$7.cloneNode(true);
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
- [styles$5["Key"]]: true,
425
- [styles$5["black"]]: key().isBlack,
426
- [styles$5["white"]]: !key().isBlack,
427
- [styles$5["down"]]: isDown()
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
+ [PianoRollKeys_module_default["Key"]]: true,
425
+ [PianoRollKeys_module_default["black"]]: key().isBlack,
426
+ [PianoRollKeys_module_default["white"]]: !key().isBlack,
427
+ [PianoRollKeys_module_default["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: undefined,
443
- _v$4: undefined,
444
- _v$5: undefined,
445
- _v$6: undefined,
446
- _v$7: undefined,
447
- _v$8: undefined
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$ = styles$5.PianoRollKeys,
458
- _v$2 = `${horizontalViewPort().pixelSize}px`;
451
+ web.effect((_p$) => {
452
+ const _v$ = PianoRollKeys_module_default.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$: undefined,
464
- _v$2: undefined
457
+ _v$: void 0,
458
+ _v$2: void 0
465
459
  });
466
460
  return _el$;
467
461
  })();
468
- };
469
- const blackKeys = [1, 3, 6, 8, 10];
470
- const keyNames = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
471
- const keys = Array.from({
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
- var css_248z$3 = ".PianoRollNotes-module_PianoRollNotes__6pF-y {\n position: absolute;\n flex: 1;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n cursor: grab;\n}\n.PianoRollNotes-module_PianoRollNotes__6pF-y .PianoRollNotes-module_Note__-jxLb {\n position: absolute;\n box-sizing: border-box;\n border-width: 0.5px;\n border-style: solid;\n border-color: #a00;\n cursor: move;\n}\n.PianoRollNotes-module_PianoRollNotes__6pF-y .PianoRollNotes-module_Note__-jxLb.PianoRollNotes-module_trimStart__vuBlj {\n cursor: w-resize;\n}\n.PianoRollNotes-module_PianoRollNotes__6pF-y .PianoRollNotes-module_Note__-jxLb.PianoRollNotes-module_trimEnd__zPdjr {\n cursor: e-resize;\n}";
481
- var styles$3 = {"PianoRollNotes":"PianoRollNotes-module_PianoRollNotes__6pF-y","Note":"PianoRollNotes-module_Note__-jxLb","trimStart":"PianoRollNotes-module_trimStart__vuBlj","trimEnd":"PianoRollNotes-module_trimEnd__zPdjr"};
482
- styleInject(css_248z$3);
475
+ // css-module:./PianoRollNotes.module.css#css-module
476
+ var PianoRollNotes_module_default = { "PianoRollNotes": "_PianoRollNotes_u3pew_1", "Note": "_Note_u3pew_12", "trimStart": "_trimStart_u3pew_22", "trimEnd": "_trimEnd_u3pew_26" };
483
477
 
484
- const _tmpl$$6 = /*#__PURE__*/web.template(`<div></div>`, 2);
485
- const PianoRollNotes = props => {
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) return;
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
- ...(noteDragMode() === "move" && {
516
+ ...noteDragMode() === "move" && {
521
517
  ticks
522
- }),
523
- ...(noteDragMode() === "trimStart" && {
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
- ...(noteDragMode() === "trimEnd" && {
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 = noteDragMode => {
557
- return noteDragMode ? [styles$3.Note, styles$3[noteDragMode]] : [styles$3.Note];
558
- };
551
+ }, "startDragging");
552
+ const getClasses = /* @__PURE__ */ __name((noteDragMode2) => {
553
+ return noteDragMode2 ? [PianoRollNotes_module_default.Note, PianoRollNotes_module_default[noteDragMode2]] : [PianoRollNotes_module_default.Note];
554
+ }, "getClasses");
559
555
  return (() => {
560
- const _el$ = _tmpl$$6.cloneNode(true);
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$$6.cloneNode(true);
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()) return;
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$: undefined,
652
- _v$2: undefined,
653
- _v$3: undefined,
654
- _v$4: undefined,
655
- _v$5: undefined,
656
- _v$6: undefined,
657
- _v$7: undefined
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
- [styles$3.PianoRollNotes]: true
659
+ web.effect((_$p) => web.classList(_el$, {
660
+ [PianoRollNotes_module_default.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
- var css_248z$2 = ".PianoRollGrid-module_PianoRollGrid__tG119 {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n.PianoRollGrid-module_PianoRollGrid-Row__nRMCs {\n position: absolute;\n border-style: solid;\n border-color: gray;\n width: 100%;\n border-width: 0;\n}\n.PianoRollGrid-module_PianoRollGrid-Row__nRMCs.PianoRollGrid-module_IsDark__jRyyy {\n background-color: rgba(0, 0, 0, 0.2);\n}\n\n.PianoRollGrid-module_PianoRollGrid-Row__nRMCs.PianoRollGrid-module_Key__8ZwPN {\n border-width: 0px 1px 0px 0;\n}\n.PianoRollGrid-module_PianoRollGrid-Row__nRMCs.PianoRollGrid-module_IsBlackAndNextIsWhite__UF8O2 {\n background-color: rgba(0, 0, 0, 0.2);\n border-width: 0.1px 1px 0.1px 0;\n}\n\n.PianoRollGrid-module_PianoRollGrid-Time__jLz3E {\n position: absolute;\n box-sizing: border-box;\n top: 0px;\n height: 100%;\n border-left-style: solid;\n border-left-width: 0.5px;\n border-left-color: #bbb;\n background: #ccc;\n}\n\n.PianoRollGrid-module_PianoRollGrid-Time__jLz3E.PianoRollGrid-module_Highlighted__N1J6q {\n background: #ddd;\n}\n\n.PianoRollGrid-module_PianoRollGrid-Time__jLz3E.PianoRollGrid-module_HighlightedBorder__Vnrff {\n border-left-color: gray;\n}\n";
677
- var styles$2 = {"PianoRollGrid":"PianoRollGrid-module_PianoRollGrid__tG119","PianoRollGrid-Row":"PianoRollGrid-module_PianoRollGrid-Row__nRMCs","IsDark":"PianoRollGrid-module_IsDark__jRyyy","Key":"PianoRollGrid-module_Key__8ZwPN","IsBlackAndNextIsWhite":"PianoRollGrid-module_IsBlackAndNextIsWhite__UF8O2","PianoRollGrid-Time":"PianoRollGrid-module_PianoRollGrid-Time__jLz3E","Highlighted":"PianoRollGrid-module_Highlighted__N1J6q","HighlightedBorder":"PianoRollGrid-module_HighlightedBorder__Vnrff"};
678
- styleInject(css_248z$2);
679
-
680
- const usePianoRollGrid = () => {
668
+ // css-module:./PianoRollGrid.module.css#css-module
669
+ var PianoRollGrid_module_default = { "PianoRollGrid": "_PianoRollGrid_qke5f_1", "PianoRollGrid-Row": "_PianoRollGrid-Row_qke5f_7", "IsDark": "_IsDark_qke5f_14", "Key": "_Key_qke5f_18", "IsBlackAndNextIsWhite": "_IsBlackAndNextIsWhite_qke5f_21", "PianoRollGrid-Time": "_PianoRollGrid-Time_qke5f_26", "Highlighted": "_Highlighted_qke5f_37", "HighlightedBorder": "_HighlightedBorder_qke5f_41" };
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) return 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
- const gridDivisorTicks = solidJs.createMemo(() => calculateVisibleGridDivisorTicks(selectedGridDivisorTicks()));
687
+ __name(calculateVisibleGridDivisorTicks, "calculateVisibleGridDivisorTicks");
688
+ const gridDivisorTicks = solidJs.createMemo(
689
+ () => calculateVisibleGridDivisorTicks(selectedGridDivisorTicks())
690
+ );
697
691
  const gridArray = solidJs.createMemo(() => {
698
- const numberOfLines = Math.ceil(horizontalViewPort().calculateVisibleRange() / gridDivisorTicks() + 1);
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
- const _tmpl$$5 = /*#__PURE__*/web.template(`<div></div>`, 2);
724
- const PianoRollGrid = () => {
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 = usePianoRollGrid();
724
+ const gridArray = usePianoRollGrid_default();
729
725
  return (() => {
730
- const _el$ = _tmpl$$5.cloneNode(true);
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$$5.cloneNode(true);
742
- web.effect(_p$ => {
737
+ const _el$2 = _tmpl$4.cloneNode(true);
738
+ web.effect((_p$) => {
743
739
  const _v$ = {
744
- [styles$2["PianoRollGrid-Time"]]: true,
745
- [styles$2["Highlighted"]]: entry().isHighlighted,
746
- [styles$2["HighlightedBorder"]]: entry().hasHighlightedBorder
747
- },
748
- _v$2 = `${entry().virtualDimensions.offset}px`,
749
- _v$3 = `${entry().virtualDimensions.size}px`;
740
+ [PianoRollGrid_module_default["PianoRollGrid-Time"]]: true,
741
+ [PianoRollGrid_module_default["Highlighted"]]: entry().isHighlighted,
742
+ [PianoRollGrid_module_default["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$: undefined,
756
- _v$2: undefined,
757
- _v$3: undefined
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$$5.cloneNode(true);
779
- web.effect(_p$ => {
772
+ const _el$3 = _tmpl$4.cloneNode(true);
773
+ web.effect((_p$) => {
780
774
  const _v$4 = {
781
- [styles$2["PianoRollGrid-Row"]]: true,
782
- [styles$2["Key"]]: true,
783
- [styles$2["IsDark"]]: key().isBlack,
784
- [styles$2["IsBlackAndNextIsWhite"]]: !key().isBlack && !blackKeys.includes((key().number + 1) % 12)
785
- },
786
- _v$5 = `${virtualDimensions().offset}px`,
787
- _v$6 = `${virtualDimensions().size}px`;
775
+ [PianoRollGrid_module_default["PianoRollGrid-Row"]]: true,
776
+ [PianoRollGrid_module_default["Key"]]: true,
777
+ [PianoRollGrid_module_default["IsDark"]]: key().isBlack,
778
+ [PianoRollGrid_module_default["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: undefined,
794
- _v$5: undefined,
795
- _v$6: undefined
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$$5.cloneNode(true);
821
- web.effect(_p$ => {
812
+ const _el$4 = _tmpl$4.cloneNode(true);
813
+ web.effect((_p$) => {
822
814
  const _v$7 = {
823
- [styles$2["PianoRollGrid-Row"]]: true,
824
- [styles$2["IsDark"]]: index() % 2 === 0
825
- },
826
- _v$8 = `${virtualDimensions().offset}px`,
827
- _v$9 = `${virtualDimensions().size}px`;
815
+ [PianoRollGrid_module_default["PianoRollGrid-Row"]]: true,
816
+ [PianoRollGrid_module_default["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: undefined,
834
- _v$8: undefined,
835
- _v$9: undefined
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$, styles$2.PianoRollGrid));
834
+ web.effect(() => web.className(_el$, PianoRollGrid_module_default.PianoRollGrid));
845
835
  return _el$;
846
836
  })();
847
- };
848
-
849
- const _tmpl$$4 = /*#__PURE__*/web.template(`<input step="0.01">`, 1);
850
- const ZoomSliderControl = props => {
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$$4.cloneNode(true);
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" /* IE */,
885
- "-webkit-appearance": "slider-vertical" /* WebKit */
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
- ...(typeof props.style === "object" && props.style)
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
- var css_248z$1 = ".PianoRollTrackList-module_PianoRollTrackList__-sDf0 {\n position: relative;\n height: 100%;\n flex: 1;\n}\n\n.PianoRollTrackList-module_Track__mZP1K {\n border-width: 0px;\n position: absolute;\n box-sizing: border-box;\n width: 100%;\n border-color: #000;\n border-style: solid;\n border-right-width: 1px;\n border-bottom-width: 1px;\n padding: 2px;\n cursor: pointer;\n background: lightgrey;\n}\n.PianoRollTrackList-module_Track__mZP1K.PianoRollTrackList-module_selected__0b-mf {\n background: gray;\n}";
902
- var styles$1 = {"PianoRollTrackList":"PianoRollTrackList-module_PianoRollTrackList__-sDf0","Track":"PianoRollTrackList-module_Track__mZP1K","selected":"PianoRollTrackList-module_selected__0b-mf"};
903
- styleInject(css_248z$1);
904
-
905
- const _tmpl$$3 = /*#__PURE__*/web.template(`<div></div>`, 2),
906
- _tmpl$2$1 = /*#__PURE__*/web.template(`<div> </div>`, 2);
907
- const PianoRollTrackList = () => {
891
+ // css-module:./PianoRollTrackList.module.css#css-module
892
+ var PianoRollTrackList_module_default = { "PianoRollTrackList": "_PianoRollTrackList_11kti_1", "Track": "_Track_11kti_7", "selected": "_selected_11kti_21" };
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$$3.cloneNode(true);
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$2$1.cloneNode(true),
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
- [styles$1["Track"]]: true,
931
- [styles$1["selected"]]: index === context.selectedTrackIndex
932
- },
933
- _v$2 = track().name,
934
- _v$3 = `${virtualDimensions().offset}px`,
935
- _v$4 = `${virtualDimensions().size}px`;
917
+ [PianoRollTrackList_module_default["Track"]]: true,
918
+ [PianoRollTrackList_module_default["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$: undefined,
943
- _v$2: undefined,
944
- _v$3: undefined,
945
- _v$4: undefined
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$, styles$1.PianoRollTrackList));
936
+ web.effect(() => web.className(_el$, PianoRollTrackList_module_default.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
- const defaultRect = {
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) return;
1025
- const updateBoundingClientRect = () => {
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
- const PianoRollNotesScroller = props => {
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(ScrollZoomContainer, {
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
- const PianoRollTrackListScroller = props => {
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(ScrollZoomContainer, {
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
- var css_248z = ".PianoRollScale-module_PianoRollScale__5wGRm {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n.PianoRollScale-module_PianoRollScale-Time__03hGQ {\n position: absolute;\n box-sizing: border-box;\n top: 0px;\n height: 100%;\n border-left-style: solid;\n border-left-width: 0.5px;\n border-left-color: x#666;\n border-bottom-color: #333;\n border-bottom-style: solid;\n border-bottom-width: 0.5px;\n background: #777;\n display: flex;\n align-items: center;\n}\n\n.PianoRollScale-module_PianoRollScale-Label__aoRi6 {\n position: absolute;\n z-index: 1;\n color: #ccc;\n margin-left: 3px;\n font-size: 0.8em;\n}\n\n.PianoRollScale-module_PianoRollScale-Time__03hGQ.PianoRollScale-module_Highlighted__ziWn5 {\n background: #666;\n}\n\n.PianoRollScale-module_PianoRollScale-Time__03hGQ.PianoRollScale-module_HighlightedBorder__-OoZE {\n border-left-color: #111;\n}\n";
1077
- var styles = {"PianoRollScale":"PianoRollScale-module_PianoRollScale__5wGRm","PianoRollScale-Time":"PianoRollScale-module_PianoRollScale-Time__03hGQ","PianoRollScale-Label":"PianoRollScale-module_PianoRollScale-Label__aoRi6","Highlighted":"PianoRollScale-module_Highlighted__ziWn5","HighlightedBorder":"PianoRollScale-module_HighlightedBorder__-OoZE"};
1078
- styleInject(css_248z);
1064
+ // css-module:./PianoRollScale.module.css#css-module
1065
+ var PianoRollScale_module_default = { "PianoRollScale": "_PianoRollScale_1khhn_1", "PianoRollScale-Time": "_PianoRollScale-Time_1khhn_7", "PianoRollScale-Label": "_PianoRollScale-Label_1khhn_23", "Highlighted": "_Highlighted_1khhn_31", "HighlightedBorder": "_HighlightedBorder_1khhn_35" };
1079
1066
 
1080
- const _tmpl$$2 = /*#__PURE__*/web.template(`<div></div>`, 2);
1081
- const PianoRollScale = () => {
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 = usePianoRollGrid();
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$$2.cloneNode(true);
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$$2.cloneNode(true);
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$$2.cloneNode(true);
1104
+ const _el$3 = _tmpl$7.cloneNode(true);
1117
1105
  web.insert(_el$3, () => entry().label);
1118
- web.effect(() => web.className(_el$3, styles["PianoRollScale-Label"]));
1106
+ web.effect(() => web.className(_el$3, PianoRollScale_module_default["PianoRollScale-Label"]));
1119
1107
  return _el$3;
1120
1108
  }
1121
1109
  }));
1122
- web.effect(_p$ => {
1110
+ web.effect((_p$) => {
1123
1111
  const _v$ = {
1124
- [styles["PianoRollScale-Time"]]: true,
1125
- [styles["Highlighted"]]: entry().isHighlighted,
1126
- [styles["HighlightedBorder"]]: entry().hasHighlightedBorder
1127
- },
1128
- _v$2 = `${entry().virtualDimensions.offset}px`,
1129
- _v$3 = `${entry().virtualDimensions.size}px`;
1112
+ [PianoRollScale_module_default["PianoRollScale-Time"]]: true,
1113
+ [PianoRollScale_module_default["Highlighted"]]: entry().isHighlighted,
1114
+ [PianoRollScale_module_default["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$: undefined,
1136
- _v$2: undefined,
1137
- _v$3: undefined
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$, styles.PianoRollScale));
1130
+ web.effect(() => web.className(_el$, PianoRollScale_module_default.PianoRollScale));
1145
1131
  return _el$;
1146
1132
  })();
1147
- };
1133
+ }, "PianoRollScale");
1134
+ var PianoRollScale_default = PianoRollScale;
1148
1135
  web.delegateEvents(["mousedown"]);
1149
1136
 
1150
- const _tmpl$$1 = /*#__PURE__*/web.template(`<div><button><div></div></button></div>`, 6),
1151
- _tmpl$2 = /*#__PURE__*/web.template(`<div><div></div><div></div></div>`, 6),
1152
- _tmpl$3 = /*#__PURE__*/web.template(`<div><div><div></div></div></div>`, 6),
1153
- _tmpl$4 = /*#__PURE__*/web.template(`<div></div>`, 2);
1154
- const PianoRoll = allProps => {
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$4.cloneNode(true);
1150
+ const _el$ = _tmpl$42.cloneNode(true);
1163
1151
  web.spread(_el$, web.mergeProps(divProps, {
1164
1152
  get ["class"]() {
1165
- return styles$6.PianoRoll;
1153
+ return PianoRoll_module_default.PianoRoll;
1166
1154
  }
1167
1155
  }), false, true);
1168
- web.insert(_el$, web.createComponent(PianoRollScrollZoomViewPort, {
1156
+ web.insert(_el$, web.createComponent(PianoRollScrollZoomViewPort_default, {
1169
1157
  get children() {
1170
1158
  return [(() => {
1171
- const _el$2 = _tmpl$3.cloneNode(true),
1172
- _el$3 = _el$2.firstChild,
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$$1.cloneNode(true),
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(PianoRollTrackListScroller, {
1190
+ return web.createComponent(PianoRollTrackListScroller_default, {
1207
1191
  get children() {
1208
- return web.createComponent(PianoRollTrackList, {});
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(PianoRollKeys, {});
1202
+ return web.createComponent(PianoRollKeys_default, {});
1219
1203
  }
1220
1204
  }), null);
1221
- web.insert(_el$2, web.createComponent(PianoRollNotesScroller, {
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$2.cloneNode(true),
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(PianoRollScale, {}));
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(PianoRollGrid, {}), null);
1238
- web.insert(_el$10, web.createComponent(PianoRollNotes, {}), null);
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(ZoomSliderControl, {
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$ = styles$6.PianoRollContainer,
1251
- _v$2 = {
1252
- [styles$6.PianoRollLeftColumn]: true,
1253
- [styles$6.showTrackList]: context.showTrackList
1254
- };
1231
+ web.effect((_p$) => {
1232
+ const _v$ = PianoRoll_module_default.PianoRollContainer, _v$2 = {
1233
+ [PianoRoll_module_default.PianoRollLeftColumn]: true,
1234
+ [PianoRoll_module_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$: undefined,
1260
- _v$2: undefined
1240
+ _v$: void 0,
1241
+ _v$2: void 0
1261
1242
  });
1262
1243
  return _el$2;
1263
- })(), web.createComponent(ZoomSliderControl, {
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
- const _tmpl$ = /*#__PURE__*/web.template(`<div class="PlayHead"></div>`, 2);
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) return;
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$.cloneNode(true);
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
- ...(typeof divProps.style === "object" && divProps.style)
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 = event => {
1309
- const newPosition = viewPort.calculatePosition(event.clientX);
1310
- props.onPositionChange?.(newPosition, event);
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
- const useNotes = () => {
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(notes().findIndex(({
1331
- ticks
1332
- }) => ticks > note.ticks), 0);
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