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