solid-pianoroll 0.0.15 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -42,8 +42,8 @@ const usePianoRollContext = () => {
42
42
  };
43
43
  const splitContextProps = allProps => solidJs.splitProps(allProps, ["mode", "duration", "gridDivision", "tracks", "position", "ppq", "snapToGrid", "verticalPosition", "verticalZoom", "zoom", "onInsertNote", "onNoteChange", "onPositionChange", "onRemoveNote", "onVerticalPositionChange", "onVerticalZoomChange", "onZoomChange", "showAllTracks", "selectedTrackIndex", "onSelectedTrackIndexChange"]);
44
44
 
45
- var css_248z$3 = ".PianoRollKeys-module_PianoRollKeys__5vnQ0 {\n position: relative;\n height: 100%;\n width: 50px;\n}\n\n.PianoRollKeys-module_Key__jybNC {\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}\n\n.PianoRollKeys-module_black__7rncB {\n background: black;\n}\n\n.PianoRollKeys-module_white__fR2Lm {\n background: white;\n}\n\n.PianoRollKeys-module_whiteAndNextIsWhite__PN1O8 {\n border-top-width: 0.1px;\n}\n\n.PianoRollKeys-module_whiteAndPreviousIsWhite__-fP3q {\n border-bottom-width: 0.1px;\n}\n";
46
- var styles$3 = {"PianoRollKeys":"PianoRollKeys-module_PianoRollKeys__5vnQ0","Key":"PianoRollKeys-module_Key__jybNC","black":"PianoRollKeys-module_black__7rncB","white":"PianoRollKeys-module_white__fR2Lm","whiteAndNextIsWhite":"PianoRollKeys-module_whiteAndNextIsWhite__PN1O8","whiteAndPreviousIsWhite":"PianoRollKeys-module_whiteAndPreviousIsWhite__-fP3q"};
45
+ var css_248z$3 = ".PianoRollKeys-module_PianoRollKeys__5vnQ0 {\n position: relative;\n height: 100%;\n width: 50px;\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 overflow: hidden;\n}\n\n.PianoRollKeys-module_Key__jybNC {\n transition-property: background-color, box-shadow;\n transition-duration: 400ms;\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}\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}\n\n.PianoRollKeys-module_white__fR2Lm {\n background: white;\n border-top-width: 0.5px;\n border-bottom-width: 0.5px;\n}\n\n.PianoRollKeys-module_down__GcNeZ {\n transition: none;\n background: red;\n}\n";
46
+ var styles$3 = {"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"};
47
47
  styleInject(css_248z$3);
48
48
 
49
49
  function createViewPortDimension(getState) {
@@ -126,37 +126,66 @@ const PianoRollKeys = () => {
126
126
  web.insert(_el$, web.createComponent(solidJs.Index, {
127
127
  each: keys,
128
128
  children: key => {
129
+ const [isDown, setIsDown] = solidJs.createSignal(false);
129
130
  const virtualDimensions = solidJs.createMemo(() => viewPort().calculatePixelDimensions(127 - key().number, 1));
131
+ const previousIsBlack = blackKeys.includes((key().number - 1) % 12);
132
+ const nextIsBlack = blackKeys.includes((key().number + 1) % 12);
130
133
  return web.createComponent(solidJs.Show, {
131
134
  get when() {
132
135
  return virtualDimensions().size > 0;
133
136
  },
134
137
  get children() {
135
138
  const _el$2 = _tmpl$$8.cloneNode(true);
139
+ _el$2.$$mouseup = () => setIsDown(false);
140
+ _el$2.$$mousedown = () => setIsDown(true);
141
+ web.insert(_el$2, web.createComponent(solidJs.Show, {
142
+ get when() {
143
+ return key().isBlack && false;
144
+ },
145
+ get children() {
146
+ const _el$3 = _tmpl$$8.cloneNode(true);
147
+ web.effect(_p$ => {
148
+ const _v$ = styles$3["black-separator"],
149
+ _v$2 = `${virtualDimensions().offset}px`,
150
+ _v$3 = `${virtualDimensions().size / 2 - 0.25}px`;
151
+ _v$ !== _p$._v$ && web.className(_el$3, _p$._v$ = _v$);
152
+ _v$2 !== _p$._v$2 && _el$3.style.setProperty("top", _p$._v$2 = _v$2);
153
+ _v$3 !== _p$._v$3 && _el$3.style.setProperty("height", _p$._v$3 = _v$3);
154
+ return _p$;
155
+ }, {
156
+ _v$: undefined,
157
+ _v$2: undefined,
158
+ _v$3: undefined
159
+ });
160
+ return _el$3;
161
+ }
162
+ }));
136
163
  web.effect(_p$ => {
137
- const _v$ = {
164
+ const _v$4 = {
138
165
  [styles$3["Key"]]: true,
139
166
  [styles$3["black"]]: key().isBlack,
140
167
  [styles$3["white"]]: !key().isBlack,
141
- [styles$3["whiteAndNextIsWhite"]]: !key().isBlack && !blackKeys.includes((key().number + 1) % 12),
142
- [styles$3["whiteAndPreviousIsWhite"]]: !key().isBlack && !blackKeys.includes((key().number - 1) % 12)
168
+ [styles$3["down"]]: isDown()
143
169
  },
144
- _v$2 = key().name,
145
- _v$3 = key().number % 12,
146
- _v$4 = `${virtualDimensions().offset}px`,
147
- _v$5 = `${virtualDimensions().size}px`;
148
- _p$._v$ = web.classList(_el$2, _v$, _p$._v$);
149
- _v$2 !== _p$._v$2 && web.setAttribute(_el$2, "title", _p$._v$2 = _v$2);
150
- _v$3 !== _p$._v$3 && web.setAttribute(_el$2, "data-index", _p$._v$3 = _v$3);
151
- _v$4 !== _p$._v$4 && _el$2.style.setProperty("top", _p$._v$4 = _v$4);
152
- _v$5 !== _p$._v$5 && _el$2.style.setProperty("height", _p$._v$5 = _v$5);
170
+ _v$5 = key().name,
171
+ _v$6 = key().number % 12,
172
+ _v$7 = `${virtualDimensions().offset - (!key().isBlack && nextIsBlack ? virtualDimensions().size / 2 : 0)}px`,
173
+ _v$8 = `${virtualDimensions().size + (!key().isBlack && nextIsBlack ? virtualDimensions().size / 2 : 0) + (!key().isBlack && previousIsBlack ? virtualDimensions().size / 2 : 0)}px`,
174
+ _v$9 = [`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`].filter(item => !!item).join(", ");
175
+ _p$._v$4 = web.classList(_el$2, _v$4, _p$._v$4);
176
+ _v$5 !== _p$._v$5 && web.setAttribute(_el$2, "title", _p$._v$5 = _v$5);
177
+ _v$6 !== _p$._v$6 && web.setAttribute(_el$2, "data-index", _p$._v$6 = _v$6);
178
+ _v$7 !== _p$._v$7 && _el$2.style.setProperty("top", _p$._v$7 = _v$7);
179
+ _v$8 !== _p$._v$8 && _el$2.style.setProperty("height", _p$._v$8 = _v$8);
180
+ _v$9 !== _p$._v$9 && _el$2.style.setProperty("box-shadow", _p$._v$9 = _v$9);
153
181
  return _p$;
154
182
  }, {
155
- _v$: undefined,
156
- _v$2: undefined,
157
- _v$3: undefined,
158
183
  _v$4: undefined,
159
- _v$5: undefined
184
+ _v$5: undefined,
185
+ _v$6: undefined,
186
+ _v$7: undefined,
187
+ _v$8: undefined,
188
+ _v$9: undefined
160
189
  });
161
190
  return _el$2;
162
191
  }
@@ -176,6 +205,7 @@ const keys = Array.from({
176
205
  name: `${keyNames[index % 12]} ${Math.floor(index / 12) - 2}`,
177
206
  isBlack: blackKeys.includes(index % 12)
178
207
  }));
208
+ web.delegateEvents(["mousedown", "mouseup"]);
179
209
 
180
210
  var css_248z$2 = ".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}";
181
211
  var styles$2 = {"PianoRollNotes":"PianoRollNotes-module_PianoRollNotes__6pF-y","Note":"PianoRollNotes-module_Note__-jxLb","trimStart":"PianoRollNotes-module_trimStart__vuBlj","trimEnd":"PianoRollNotes-module_trimEnd__zPdjr"};
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../node_modules/style-inject/dist/style-inject.es.js","../../src/PianoRollContext.tsx","../../src/viewport/createViewPortDimension.ts","../../src/viewport/ScrollZoomViewPort.tsx","../../src/PianoRollKeys.tsx","../../src/PianoRollNotes.tsx","../../src/viewport/ScrollContainer.tsx","../../src/PianoRollGrid.tsx","../../src/useBoundingClientRect.ts","../../src/viewport/VerticalZoomControl.tsx","../../src/viewport/HorizontalZoomControl.tsx","../../src/PianoRollTrackList.tsx","../../src/PianoRoll.tsx","../../src/PlayHead.tsx","../../src/useNotes.ts","../../src/usePianoRoll.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { createContext, JSX, splitProps, useContext } from \"solid-js\";\n\nimport { PianoRollProps } from \"./PianoRoll\";\n\nconst PianoRollContext = createContext<PianoRollProps>();\n\nexport const PianoRollContextProvider = PianoRollContext.Provider;\n\nexport const usePianoRollContext = () => {\n const context = useContext(PianoRollContext);\n\n if (!context) throw new Error(\"No PianoRollContext found\");\n\n return context;\n};\n\nexport const splitContextProps = (allProps: PianoRollProps & JSX.IntrinsicElements[\"div\"]) =>\n splitProps(allProps, [\n \"mode\",\n \"duration\",\n \"gridDivision\",\n \"tracks\",\n \"position\",\n \"ppq\",\n \"snapToGrid\",\n \"verticalPosition\",\n \"verticalZoom\",\n \"zoom\",\n \"onInsertNote\",\n \"onNoteChange\",\n \"onPositionChange\",\n \"onRemoveNote\",\n \"onVerticalPositionChange\",\n \"onVerticalZoomChange\",\n \"onZoomChange\",\n \"showAllTracks\",\n \"selectedTrackIndex\",\n \"onSelectedTrackIndexChange\",\n ]);\n","import { createEffect } from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\n\nexport type ViewPortDimension = ReturnType<typeof createViewPortDimension>;\nexport type ViewPortDimensionName = \"horizontal\" | \"vertical\";\nexport type ViewPortDimensionState = {\n position: number;\n range: number;\n\n pixelOffset: number;\n pixelSize: number;\n\n name: ViewPortDimensionName;\n\n onZoomChange?: (zoom: number) => void;\n onPositionChange?: (zoom: number) => void;\n\n zoom: number;\n};\n\nexport default function createViewPortDimension(getState: () => ViewPortDimensionState) {\n const getStateWithFunctions = () => ({\n ...getState(),\n calculatePixelOffset,\n calculatePixelValue,\n calculatePosition,\n calculatePixelDimensions,\n calculateVisibleRange,\n calculateMaxPosition,\n isVisible,\n });\n\n const [state, setState] = createStore(getStateWithFunctions());\n\n createEffect(() => setState(getStateWithFunctions()));\n\n function calculatePixelValue(position: number = state.position) {\n const virtualSize = state.pixelSize * state.zoom;\n return (position / state.range) * virtualSize;\n }\n\n function calculatePixelOffset(position: number) {\n return calculatePixelValue(position) - calculatePixelValue(state.position);\n }\n\n function calculatePosition(offset: number) {\n const percentX = (offset - state.pixelOffset) / state.pixelSize;\n const position = state.position + percentX * calculateVisibleRange();\n\n return position;\n }\n\n function calculateVisibleRange() {\n return state.range / state.zoom;\n }\n\n function calculateMaxPosition() {\n return state.range - state.range / state.zoom;\n }\n\n function calculatePixelDimensions(position: number, length: number) {\n const offset = calculatePixelOffset(position);\n const size = calculatePixelValue(length);\n\n return { offset, size };\n }\n\n function isVisible({ offset, size }: { offset: number; size: number }) {\n return offset + size > 0 && offset < state.pixelSize;\n }\n\n return state;\n}\n\nexport const clamp = (value: number, min: number, max: number) =>\n Math.max(min, Math.min(max, value));\n","import { createContext, ParentProps, useContext } from \"solid-js\";\nimport createViewPortDimension, {\n ViewPortDimension,\n ViewPortDimensionName,\n ViewPortDimensionState,\n} from \"./createViewPortDimension\";\n\nexport const ScrollZoomViewPort = (\n props: ParentProps<{\n dimensions: Record<ViewPortDimensionName, () => Omit<ViewPortDimensionState, \"name\">>;\n }>,\n) => {\n const viewPorts = Object.entries(props.dimensions).map(([name, viewPortProps]) =>\n createViewPortDimension(() => ({ name: name as ViewPortDimensionName, ...viewPortProps() })),\n );\n\n const parentViewPorts = useContext(ScrollZoomViewPortContext);\n\n return (\n <ScrollZoomViewPortContext.Provider value={[...parentViewPorts, ...viewPorts]}>\n {props.children}\n </ScrollZoomViewPortContext.Provider>\n );\n};\n\nconst ScrollZoomViewPortContext = createContext<ViewPortDimension[]>([]);\n\nexport const useViewPortDimension = (name: ViewPortDimensionName) => {\n const viewPorts = useContext(ScrollZoomViewPortContext);\n\n const viewPort = name\n ? viewPorts.find((viewPort) => viewPort.name === name)\n : viewPorts[viewPorts.length - 1];\n\n if (!viewPort) throw new Error(`ViewPort dimension \"${name}\" not found.`);\n\n return viewPort;\n};\n","import styles from \"./PianoRollKeys.module.css\";\nimport { createMemo, Index, Show } from \"solid-js\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\n\nconst PianoRollKeys = () => {\n const viewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n\n return (\n <div class={styles.PianoRollKeys}>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n viewPort().calculatePixelDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n classList={{\n [styles[\"Key\"]]: true,\n [styles[\"black\"]]: key().isBlack,\n [styles[\"white\"]]: !key().isBlack,\n [styles[\"whiteAndNextIsWhite\"]]:\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12),\n [styles[\"whiteAndPreviousIsWhite\"]]:\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12),\n }}\n title={key().name}\n data-index={key().number % 12}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </div>\n );\n};\n\nexport const blackKeys = [1, 3, 6, 8, 10];\nexport const keyNames = [\"C\", \"C#\", \"D\", \"D#\", \"E\", \"F\", \"F#\", \"G\", \"G#\", \"A\", \"A#\", \"B\"];\nexport const keys = Array.from({ length: 128 }).map((_, index) => ({\n number: index,\n name: `${keyNames[index % 12]} ${Math.floor(index / 12) - 2}`,\n isBlack: blackKeys.includes(index % 12),\n}));\n\nexport default PianoRollKeys;\n","import { batch, createMemo, createSignal, For, Ref, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport styles from \"./PianoRollNotes.module.scss\";\n\ntype NoteDragMode = \"trimStart\" | \"move\" | \"trimEnd\" | undefined;\n\nconst PianoRollNotes = (props: { ref?: Ref<HTMLDivElement | undefined> }) => {\n const context = usePianoRollContext();\n\n const verticalViewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n\n const gridDivisionTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n\n const snapValueToGridIfEnabled = (value: number, altKey: boolean) =>\n context.snapToGrid && !altKey\n ? Math.round(value / gridDivisionTicks()) * gridDivisionTicks()\n : value;\n\n const insertOrUpdateNote = (event: MouseEvent) => {\n const position = horizontalViewPort().calculatePosition(event.clientX);\n\n const existingNote = currentNote();\n\n const midi =\n context.mode === \"keys\"\n ? 127 - Math.floor(verticalViewPort().calculatePosition(event.clientY))\n : existingNote?.midi ?? 60;\n\n const targetTrackIndex =\n context.mode === \"tracks\"\n ? Math.floor(verticalViewPort().calculatePosition(event.clientY))\n : context.selectedTrackIndex ?? 0;\n\n const eventPositionTicks = Math.floor(position / gridDivisionTicks()) * gridDivisionTicks();\n const velocity = 127;\n\n const ticks = existingNote?.ticks ?? eventPositionTicks;\n const durationTicks = existingNote?.ticks\n ? eventPositionTicks - existingNote?.ticks\n : gridDivisionTicks();\n\n const note = { midi, ticks, durationTicks, velocity };\n\n if (existingNote) {\n context.onNoteChange?.(currentNoteTrackIndex(), currentNoteIndex(), note);\n return currentNoteIndex();\n } else {\n return context.onInsertNote?.(targetTrackIndex, note) ?? -1;\n }\n };\n\n const [isDragging, setIsDragging] = createSignal(false);\n const [noteDragMode, setNoteDragMode] = createSignal<NoteDragMode>();\n const [currentNoteIndex, setCurrentNoteIndex] = createSignal(-1);\n const [currentNoteTrackIndex, setCurrentNoteTrackIndex] = createSignal(-1);\n const [isMouseDown, setIsMouseDown] = createSignal(false);\n\n const currentNote = createMemo(\n () => context.tracks[currentNoteTrackIndex()]?.notes[currentNoteIndex()],\n );\n\n const getClasses = (noteDragMode: NoteDragMode) => {\n return noteDragMode ? [styles.Note, styles[noteDragMode]] : [styles.Note];\n };\n\n return (\n <div\n class={styles.PianoRollNotes}\n ref={props.ref}\n onMouseDown={(event) => {\n batch(() => {\n setIsMouseDown(true);\n const index = insertOrUpdateNote(event);\n\n setCurrentNoteTrackIndex(context.selectedTrackIndex ?? 0);\n setCurrentNoteIndex(index);\n });\n }}\n onMouseMove={(event) => {\n if (isDragging()) return;\n\n if (!isMouseDown()) {\n setNoteDragMode(undefined);\n return;\n }\n\n const index = insertOrUpdateNote(event);\n\n setCurrentNoteIndex(index);\n }}\n onMouseUp={(event) => {\n setIsMouseDown(false);\n if (!event.altKey) return;\n insertOrUpdateNote(event);\n }}\n onDblClick={(event) => {\n insertOrUpdateNote(event);\n }}\n onClick={(event) => {\n if (currentNote()) {\n setCurrentNoteIndex(-1);\n return;\n }\n if (!event.altKey) return;\n insertOrUpdateNote(event);\n }}\n >\n <For each={context.tracks}>\n {(track, trackIndex) => {\n return (\n <Show\n when={\n trackIndex() === context.selectedTrackIndex ||\n context.showAllTracks ||\n context.mode === \"tracks\"\n }\n >\n <For each={track.notes}>\n {(note, noteIndex) => {\n const verticalVirtualDimensions = createMemo(() =>\n verticalViewPort().calculatePixelDimensions(\n context.mode === \"keys\" ? 127 - note.midi : trackIndex(),\n 1,\n ),\n );\n\n const horizontalDimensions = createMemo(() =>\n horizontalViewPort().calculatePixelDimensions(note.ticks, note.durationTicks),\n );\n\n return (\n <Show\n when={\n verticalViewPort().isVisible(verticalVirtualDimensions()) &&\n horizontalViewPort().isVisible(horizontalDimensions())\n }\n >\n <div\n class={getClasses(noteDragMode()).join(\" \")}\n draggable={false}\n onMouseMove={(event) => {\n if (isDragging()) return;\n event.stopPropagation();\n\n const relativeX = horizontalViewPort().calculatePixelValue(\n horizontalViewPort().calculatePosition(event.clientX),\n );\n const noteStartX = horizontalViewPort().calculatePixelValue(note.ticks);\n const noteEndX = horizontalViewPort().calculatePixelValue(\n note.ticks + note.durationTicks,\n );\n\n setNoteDragMode(\n relativeX - noteStartX < 3\n ? \"trimStart\"\n : noteEndX - relativeX < 3\n ? \"trimEnd\"\n : \"move\",\n );\n }}\n onDblClick={(event) => {\n event.stopPropagation();\n context.onRemoveNote?.(trackIndex(), noteIndex());\n }}\n onMouseDown={(event) => {\n event.stopPropagation();\n\n setIsDragging(true);\n\n setCurrentNoteIndex(noteIndex());\n setCurrentNoteTrackIndex(trackIndex());\n\n const initialPosition = horizontalViewPort().calculatePosition(\n event.clientX,\n );\n const diffPosition = initialPosition - note.ticks;\n\n const handleMouseMove = (mouseMoveEvent: MouseEvent) => {\n const note = currentNote();\n if (!note) return;\n\n const ticks = snapValueToGridIfEnabled(\n Math.max(\n horizontalViewPort().calculatePosition(mouseMoveEvent.clientX) -\n diffPosition,\n 0,\n ),\n mouseMoveEvent.altKey,\n );\n\n const updatedNote = {\n ...note,\n ...(noteDragMode() === \"move\" &&\n context.mode === \"keys\" && {\n midi: Math.round(\n 127 -\n verticalViewPort().calculatePosition(mouseMoveEvent.clientY),\n ),\n }),\n ...((noteDragMode() === \"move\" || noteDragMode() === \"trimStart\") && {\n ticks,\n }),\n ...(noteDragMode() === \"trimStart\" && {\n durationTicks: note.durationTicks + note.ticks - ticks,\n }),\n ...(noteDragMode() === \"trimEnd\" && {\n durationTicks: snapValueToGridIfEnabled(\n horizontalViewPort().calculatePosition(mouseMoveEvent.clientX) -\n note.ticks,\n mouseMoveEvent.altKey,\n ),\n }),\n };\n\n const previousTrackIndex = currentNoteTrackIndex();\n const previousNoteIndex = currentNoteIndex();\n\n const targetTrackIndex =\n context.mode === \"tracks\"\n ? Math.floor(\n verticalViewPort().calculatePosition(mouseMoveEvent.clientY),\n )\n : previousTrackIndex;\n\n if (targetTrackIndex === previousTrackIndex) {\n context.onNoteChange?.(\n previousTrackIndex,\n previousNoteIndex,\n updatedNote,\n );\n } else {\n batch(() => {\n if (context.onInsertNote) {\n context.onRemoveNote?.(previousTrackIndex, previousNoteIndex);\n const newNoteIndex = context.onInsertNote(\n targetTrackIndex,\n updatedNote,\n );\n\n setCurrentNoteTrackIndex(targetTrackIndex);\n setCurrentNoteIndex(newNoteIndex);\n }\n });\n }\n };\n const handleMouseUp = () => {\n setIsDragging(false);\n setCurrentNoteIndex(-1);\n setCurrentNoteTrackIndex(-1);\n\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }}\n style={{\n \"background-color\": `rgba(255,0,0, ${(128 + note.velocity) / 256})`,\n\n top: `${verticalVirtualDimensions().offset}px`,\n height: `${verticalVirtualDimensions().size}px`,\n\n left: `${horizontalDimensions().offset}px`,\n width: `${horizontalDimensions().size}px`,\n }}\n ></div>\n </Show>\n );\n }}\n </For>\n </Show>\n );\n }}\n </For>\n </div>\n );\n};\n\nexport default PianoRollNotes;\n","import { createEffect, createMemo, ParentProps, Ref } from \"solid-js\";\n\nimport { useViewPortDimension } from \"./ScrollZoomViewPort\";\n\nconst ScrollContainer = (props: ParentProps<{ ref?: Ref<HTMLDivElement> }>) => {\n let scrollContentRef: HTMLDivElement | undefined;\n\n const verticalViewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n\n const handleScroll = (event: UIEvent & { currentTarget: Element }) => {\n event.preventDefault();\n\n if (didUpdateScroll) {\n didUpdateScroll = false;\n return;\n }\n\n const maxVerticalPosition = verticalViewPort().calculateMaxPosition();\n const maxPosition = horizontalViewPort().calculateMaxPosition();\n\n const height = verticalViewPort().pixelSize;\n const width = horizontalViewPort().pixelSize;\n const { scrollTop, scrollLeft, scrollWidth, scrollHeight } = event.currentTarget;\n\n const scrollTopAmount = scrollTop / (scrollHeight - height);\n const scrollLeftAmount = scrollLeft / (scrollWidth - width);\n\n verticalViewPort().onPositionChange?.(maxVerticalPosition * scrollTopAmount);\n horizontalViewPort().onPositionChange?.(maxPosition * scrollLeftAmount);\n };\n\n const handleWheel = (event: WheelEvent) => {\n if (event.altKey) {\n event.preventDefault();\n\n if (Math.abs(event.deltaX) > Math.abs(event.deltaY)) {\n horizontalViewPort()?.onZoomChange?.(\n horizontalViewPort().zoom * (1 + event.deltaX / horizontalViewPort().pixelSize),\n );\n const maxPosition = horizontalViewPort().calculateMaxPosition();\n\n horizontalViewPort()?.onPositionChange?.(\n Math.min(maxPosition, horizontalViewPort()?.position),\n );\n } else {\n verticalViewPort()?.onZoomChange?.(\n verticalViewPort().zoom * (1 + event.deltaY / verticalViewPort().pixelSize),\n );\n const maxVerticalPosition = verticalViewPort().calculateMaxPosition();\n\n verticalViewPort()?.onPositionChange?.(\n Math.min(maxVerticalPosition, verticalViewPort()?.position),\n );\n }\n }\n };\n\n let didUpdateScroll = false;\n\n createEffect(() => {\n const maxVerticalPosition = verticalViewPort().calculateMaxPosition();\n const maxPosition = horizontalViewPort().calculateMaxPosition();\n\n const scrollTopAmount =\n maxVerticalPosition > 0 ? verticalViewPort().position / maxVerticalPosition : 0;\n const scrollLeftAmount = maxPosition > 0 ? horizontalViewPort().position / maxPosition : 0;\n\n const height = verticalViewPort().pixelSize;\n const width = horizontalViewPort().pixelSize;\n\n if (!scrollContentRef?.parentElement) return;\n\n const scrollDivHeight = verticalViewPort().zoom * verticalViewPort().pixelSize;\n const scrollTop = scrollTopAmount * (scrollDivHeight - height);\n\n const scrollDivWidth = horizontalViewPort().zoom * horizontalViewPort().pixelSize;\n const scrollLeft = scrollLeftAmount * (scrollDivWidth - width);\n\n didUpdateScroll = true;\n\n scrollContentRef.style.height = `${scrollDivHeight}px`;\n scrollContentRef.style.width = `${scrollDivWidth}px`;\n\n scrollContentRef.parentElement.scrollTo({\n left: scrollLeft,\n top: scrollTop,\n });\n });\n\n return (\n <div\n ref={props.ref}\n class=\"PianoRoll-Scroller\"\n style={{\n height: \"100%\",\n width: \"100%\",\n \"z-index\": 4,\n overflow: \"scroll\",\n \"pointer-events\": \"auto\",\n }}\n onScroll={handleScroll}\n onWheel={handleWheel}\n >\n <div ref={scrollContentRef}>\n <div\n style={{\n top: 0,\n left: 0,\n height: `${verticalViewPort().pixelSize}px`,\n width: `${horizontalViewPort().pixelSize}px`,\n position: \"sticky\",\n display: \"flex\",\n }}\n >\n <div\n style={{\n position: \"relative\",\n height: `${verticalViewPort().pixelSize}px`,\n width: `${horizontalViewPort().pixelSize}px`,\n }}\n >\n {props.children}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ScrollContainer;\n","import { createMemo, For, Index, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { blackKeys, keys } from \"./PianoRollKeys\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport styles from \"./PianoRollGrid.module.css\";\n\nconst PianoRollGrid = () => {\n const context = usePianoRollContext();\n\n const verticalViewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n\n const measureTicks = createMemo(() => context.ppq * 4);\n const selectedGridDivisorTicks = createMemo(() => measureTicks() / context.gridDivision);\n\n function calculateVisibleGridDivisorTicks(value: number): number {\n const visibleRange = horizontalViewPort().calculateVisibleRange();\n\n if (visibleRange <= 0) return 0;\n\n if (visibleRange / value > 100) {\n return calculateVisibleGridDivisorTicks(value * 2);\n }\n\n if (visibleRange / value < 30) {\n return calculateVisibleGridDivisorTicks(value / 2);\n }\n\n return value;\n }\n\n const gridDivisorTicks = createMemo(() =>\n calculateVisibleGridDivisorTicks(selectedGridDivisorTicks()),\n );\n\n const gridArray = createMemo(() => {\n const numberOfLines = Math.ceil(\n horizontalViewPort().calculateVisibleRange() / gridDivisorTicks() + 1,\n );\n const startIndex = Math.floor(context.position / gridDivisorTicks());\n\n return Array.from({ length: numberOfLines }).map((_, index) => ({\n index: index + startIndex,\n ticks: (index + startIndex) * gridDivisorTicks(),\n }));\n });\n\n return (\n <div class={styles.PianoRollGrid}>\n <Index each={gridArray()}>\n {(entry) => {\n const virtualDimensions = createMemo(() =>\n horizontalViewPort().calculatePixelDimensions(entry().ticks, gridDivisorTicks()),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollGrid-Time\"]}\n style={{\n background:\n Math.ceil((entry().index + 1 * selectedGridDivisorTicks()) / measureTicks()) %\n 2 ===\n 0\n ? \"#ddd\"\n : \"#ccc\",\n left: `${virtualDimensions().offset}px`,\n width: `${virtualDimensions().size}px`,\n \"border-left-color\":\n (entry().index * gridDivisorTicks()) % selectedGridDivisorTicks() === 0\n ? \"gray\"\n : \"#bbb\",\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n <Show when={context.mode === \"keys\"}>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n verticalViewPort().calculatePixelDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollGrid-Row\"]}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n width: \"100%\",\n \"background-color\": key().isBlack ? \"rgba(0,0,0,0.2)\" : \"none\",\n \"border-width\": `${\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12) ? \"0.1px\" : 0\n } 1px ${\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12) ? \"0.1px\" : 0\n } 0`,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </Show>\n\n <Show when={context.mode === \"tracks\"}>\n <For each={context.tracks}>\n {(track, index) => {\n const virtualDimensions = createMemo(() =>\n verticalViewPort().calculatePixelDimensions(index(), 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollGrid-Row\"]}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n width: \"100%\",\n \"background-color\": index() % 2 === 0 ? \"rgba(0,0,0,0.2)\" : \"none\",\n \"border-width\": 0,\n }}\n ></div>\n </Show>\n );\n }}\n </For>\n </Show>\n </div>\n );\n};\n\nexport default PianoRollGrid;\n","import { Accessor, createEffect, createSignal } from \"solid-js\";\n\nexport type ClientRect = Omit<DOMRect, \"toJSON\">;\n\nconst defaultRect: ClientRect = {\n left: 0,\n width: 0,\n top: 0,\n height: 0,\n bottom: 0,\n right: 0,\n x: 0,\n y: 0,\n};\n\nexport default function useBoundingClientRect(containerRef: Accessor<HTMLElement | undefined>) {\n const [boundingClientRect, setBoundingClientRect] = createSignal<ClientRect>(defaultRect);\n\n createEffect(() => {\n const container = containerRef();\n if (!container) return;\n\n const updateBoundingClientRect = () => {\n setBoundingClientRect(container.getBoundingClientRect() ?? defaultRect);\n };\n\n const resizeObserver = new ResizeObserver(updateBoundingClientRect);\n resizeObserver.observe(container);\n\n updateBoundingClientRect();\n\n return () => {\n resizeObserver.disconnect();\n };\n });\n\n return boundingClientRect;\n}\n","import { JSX } from \"solid-js/jsx-runtime\";\nimport { usePianoRollContext } from \"../PianoRollContext\";\n\nconst VerticalZoomControl = (props: JSX.IntrinsicElements[\"input\"]) => {\n const context = usePianoRollContext();\n\n return (\n <input\n min=\"1\"\n max=\"11\"\n step={0.01}\n {...props}\n value={context.verticalZoom}\n onInput={(event) => context.onVerticalZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n {...{ orient: \"vertical\" }}\n style={{\n width: \"16px\",\n ...({\n \"writing-mode\": \"bt-lr\" /* IE */,\n \"-webkit-appearance\": \"slider-vertical\" /* WebKit */,\n } as unknown as JSX.CSSProperties),\n }}\n />\n );\n};\n\nexport default VerticalZoomControl;\n","import { JSX } from \"solid-js/jsx-runtime\";\n\nimport { usePianoRollContext } from \"../PianoRollContext\";\n\nconst HorizontalZoomControl = (props: JSX.IntrinsicElements[\"input\"]) => {\n const context = usePianoRollContext();\n\n return (\n <input\n max=\"500\"\n min=\"1\"\n step={0.01}\n {...props}\n value={context.zoom}\n onInput={(event) => context.onZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n style={{\n \"margin-left\": \"50px\",\n \"margin-right\": \"16px\",\n ...(typeof props.style === \"object\" && props.style),\n }}\n />\n );\n};\n\nexport default HorizontalZoomControl;\n","import styles from \"./PianoRollTrackList.module.css\";\nimport { createMemo, Index, Show } from \"solid-js\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollTrackList = () => {\n const viewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const context = usePianoRollContext();\n\n return (\n <div class={styles.PianoRollTrackList}>\n <Index each={context.tracks}>\n {(track, index) => {\n const virtualDimensions = createMemo(() =>\n viewPort().calculatePixelDimensions(\n context.mode === \"tracks\" ? index : index * 8,\n context.mode === \"tracks\" ? 1 : 8,\n ),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n classList={{\n [styles[\"Track\"]]: true,\n }}\n title={track().name}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n background: index === context.selectedTrackIndex ? \"gray\" : \"lightgrey\",\n cursor: \"pointer\",\n }}\n onClick={() => context.onSelectedTrackIndexChange?.(index)}\n >\n {index} {track().name || \"[unnamed track]\"}\n </div>\n </Show>\n );\n }}\n </Index>\n </div>\n );\n};\n\nexport default PianoRollTrackList;\n","import styles from \"./PianoRoll.module.css\";\n\nimport { JSX, createSignal, createMemo, ParentProps, createEffect, Show } from \"solid-js\";\n\nimport { PianoRollContextProvider, splitContextProps } from \"./PianoRollContext\";\nimport PianoRollKeys from \"./PianoRollKeys\";\nimport PianoRollNotes from \"./PianoRollNotes\";\nimport ScrollContainer from \"./viewport/ScrollContainer\";\nimport PianoRollGrid from \"./PianoRollGrid\";\nimport { Note, Track } from \"./types\";\nimport { ScrollZoomViewPort as ScrollZoomViewPort } from \"./viewport/ScrollZoomViewPort\";\nimport useBoundingClientRect from \"./useBoundingClientRect\";\nimport { clamp } from \"./viewport/createViewPortDimension\";\nimport VerticalZoomControl from \"./viewport/VerticalZoomControl\";\nimport HorizontalZoomControl from \"./viewport/HorizontalZoomControl\";\nimport PianoRollTrackList from \"./PianoRollTrackList\";\n\nexport type GridDivision = 1 | 2 | 4 | 8 | 16 | 32 | 64;\n\nexport type PianoRollProps = {\n ppq: number;\n tracks: Track[];\n\n gridDivision: GridDivision;\n snapToGrid: boolean;\n\n mode: \"keys\" | \"tracks\";\n showAllTracks?: boolean;\n showTrackList?: boolean;\n\n selectedTrackIndex: number;\n\n verticalPosition: number;\n verticalZoom: number;\n\n position: number;\n duration: number;\n zoom: number;\n\n onVerticalZoomChange?: (zoom: number) => void;\n onVerticalPositionChange?: (zoom: number) => void;\n onZoomChange?: (zoom: number) => void;\n onPositionChange?: (zoom: number) => void;\n\n onNoteChange?: (trackIndex: number, noteIndex: number, note: Note) => void;\n onInsertNote?: (trackIndex: number, note: Note) => number;\n onRemoveNote?: (trackIndex: number, noteIndex: number) => void;\n\n onSelectedTrackIndexChange?: (trackIndex: number) => void;\n};\n\nconst PianoRoll = (allProps: ParentProps<PianoRollProps & JSX.IntrinsicElements[\"div\"]>) => {\n const [contextProps, divProps] = splitContextProps(allProps);\n\n const [scrollerRef, setScrollerRef] = createSignal<HTMLDivElement>();\n const clientRect = useBoundingClientRect(scrollerRef);\n\n const zoomFactor = 500;\n\n const minZoom = createMemo(() => 1 / (zoomFactor / clientRect().width));\n const maxZoom = createMemo(() => 500 * (zoomFactor / clientRect().width));\n\n const minVerticalZoom = createMemo(() => 1 / (zoomFactor / clientRect().height));\n const maxVerticalZoom = createMemo(() => 10 * (zoomFactor / clientRect().height));\n\n createEffect((isInitial) => {\n if (isInitial) return false;\n\n if (contextProps.mode === \"tracks\") {\n contextProps.onVerticalPositionChange?.(0);\n }\n }, true);\n\n return (\n <PianoRollContextProvider value={contextProps}>\n <div {...divProps} class={styles.PianoRoll}>\n <div class={styles.PianoRollContainer}>\n <ScrollZoomViewPort\n dimensions={{\n horizontal: () => ({\n pixelOffset: clientRect().left,\n pixelSize: clientRect().width,\n position: contextProps.position,\n range: contextProps.duration,\n zoom: contextProps.zoom * (zoomFactor / clientRect().width),\n onPositionChange: contextProps.onPositionChange,\n onZoomChange: (zoom) =>\n contextProps.onZoomChange?.(\n clamp(zoom / (zoomFactor / clientRect().width), minZoom(), maxZoom()),\n ),\n }),\n vertical: () => ({\n pixelOffset: clientRect().top,\n pixelSize: clientRect().height,\n position: contextProps.verticalPosition,\n range:\n contextProps.mode === \"keys\" ? 128 : Math.max(contextProps.tracks.length, 16),\n zoom: contextProps.verticalZoom * (zoomFactor / clientRect().height),\n onPositionChange: contextProps.onVerticalPositionChange,\n onZoomChange: (verticalZoom) =>\n contextProps.onVerticalZoomChange?.(\n clamp(\n verticalZoom / (zoomFactor / clientRect().height),\n minVerticalZoom(),\n maxVerticalZoom(),\n ),\n ),\n }),\n }}\n >\n <div style={{ display: \"flex\", width: \"20%\" }}>\n <Show when={allProps.showTrackList}>\n <PianoRollTrackList />\n </Show>\n <Show when={contextProps.mode === \"keys\"}>\n <PianoRollKeys />\n </Show>\n </div>\n\n <ScrollContainer ref={setScrollerRef}>\n {allProps.children}\n <PianoRollGrid />\n <PianoRollNotes />\n </ScrollContainer>\n\n <VerticalZoomControl min={minVerticalZoom()} max={maxVerticalZoom()} />\n </ScrollZoomViewPort>\n </div>\n <HorizontalZoomControl min={minZoom()} max={maxZoom()} />\n </div>\n </PianoRollContextProvider>\n );\n};\n\nexport default PianoRoll;\n","import { createEffect, createMemo, JSX, mergeProps, splitProps } from \"solid-js\";\nimport { clamp } from \"./viewport/createViewPortDimension\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\n\nconst PlayHead = (\n allProps: {\n playHeadPosition?: number;\n sync?: boolean;\n onPlayHeadPositionChange?: (playHeadPosition: number) => void;\n onPositionChange?: (position: number) => void;\n } & JSX.IntrinsicElements[\"div\"],\n) => {\n const propsWithDefauls = mergeProps({ playHeadPosition: 0, sync: false }, allProps);\n const [props, divProps] = splitProps(propsWithDefauls, [\n \"playHeadPosition\",\n \"sync\",\n \"onPlayHeadPositionChange\",\n \"onPositionChange\",\n ]);\n\n const viewPort = useViewPortDimension(\"horizontal\");\n createEffect(() => {\n if (!props.sync) return;\n\n const maxPosition = viewPort.range;\n const newPosition = clamp(\n props.playHeadPosition - viewPort.range / viewPort.zoom / 2,\n 0,\n maxPosition,\n );\n\n props.onPositionChange?.(newPosition);\n });\n\n const leftPosition = createMemo(() => viewPort.calculatePixelOffset(props.playHeadPosition));\n\n return (\n <div\n class=\"PlayHead\"\n {...divProps}\n style={{\n position: \"absolute\",\n height: \"100%\",\n width: \"2px\",\n left: `${leftPosition()}px`,\n \"background-color\": \"green\",\n cursor: \"pointer\",\n ...(typeof divProps.style === \"object\" && divProps.style),\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n const handleMouseMove = ({ movementX }: MouseEvent) => {\n const { parentElement } = event.currentTarget;\n if (!parentElement) return;\n\n const newPosition = viewPort.calculatePosition(leftPosition() + movementX);\n props.onPlayHeadPositionChange?.(newPosition);\n };\n const handleMouseUp = () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }}\n />\n );\n};\n\nexport default PlayHead;\n","import { createSignal } from \"solid-js\";\nimport { Note } from \"./types\";\n\nconst useNotes = () => {\n const [notes, onNotesChange] = createSignal<Note[]>([]);\n const onNoteChange = (index: number, note: Note) => {\n onNotesChange([...notes().slice(0, index), note, ...notes().splice(index + 1)]);\n };\n\n const onInsertNote = (note: Note) => {\n const index = Math.max(\n notes().findIndex(({ ticks }) => ticks > note.ticks),\n 0,\n );\n onNotesChange([...notes().slice(0, index), note, ...notes().splice(index)]);\n return index;\n };\n\n const onRemoveNote = (index: number) => {\n onNotesChange([...notes().slice(0, index), ...notes().splice(index + 1)]);\n };\n\n return {\n notes,\n onNotesChange,\n onNoteChange,\n onInsertNote,\n onRemoveNote,\n };\n};\n\nexport default useNotes;\n","import { createSignal } from \"solid-js\";\nimport { GridDivision } from \"./PianoRoll\";\n\nconst usePianoRoll = () => {\n const [ppq, onPpqChange] = createSignal(120);\n\n const [mode, onModeChange] = createSignal<\"keys\" | \"tracks\">(\"tracks\");\n\n const [position, onPositionChange] = createSignal(0);\n\n const [zoom, onZoomChange] = createSignal(10);\n const [verticalZoom, onVerticalZoomChange] = createSignal(5);\n const [verticalPosition, onVerticalPositionChange] = createSignal(44);\n\n const [gridDivision, onGridDivisionChange] = createSignal<GridDivision>(4);\n const [snapToGrid, onSnapToGridChange] = createSignal(true);\n\n const [duration, onDurationChange] = createSignal(0);\n\n return {\n ppq,\n onPpqChange,\n\n position,\n onPositionChange,\n\n zoom,\n onZoomChange,\n\n verticalPosition,\n onVerticalPositionChange,\n\n verticalZoom,\n onVerticalZoomChange,\n\n gridDivision,\n onGridDivisionChange,\n\n snapToGrid,\n onSnapToGridChange,\n\n mode,\n onModeChange,\n\n duration,\n onDurationChange,\n };\n};\n\nexport default usePianoRoll;\n"],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","PianoRollContext","createContext","PianoRollContextProvider","Provider","usePianoRollContext","context","useContext","Error","splitContextProps","allProps","splitProps","createViewPortDimension","getState","getStateWithFunctions","calculatePixelOffset","calculatePixelValue","calculatePosition","calculatePixelDimensions","calculateVisibleRange","calculateMaxPosition","isVisible","state","setState","createStore","createEffect","position","virtualSize","pixelSize","zoom","range","offset","percentX","pixelOffset","length","size","clamp","value","min","max","Math","ScrollZoomViewPort","props","viewPorts","Object","entries","dimensions","map","name","viewPortProps","parentViewPorts","ScrollZoomViewPortContext","_$createComponent","children","useViewPortDimension","viewPort","find","PianoRollKeys","createMemo","_tmpl$","_$insert","Index","keys","key","virtualDimensions","number","Show","_$effect","styles","isBlack","blackKeys","includes","_$classList","_$setAttribute","keyNames","Array","from","_","index","floor","PianoRollNotes","verticalViewPort","horizontalViewPort","gridDivisionTicks","ppq","gridDivision","snapValueToGridIfEnabled","altKey","snapToGrid","round","insertOrUpdateNote","event","clientX","existingNote","currentNote","midi","mode","clientY","targetTrackIndex","selectedTrackIndex","eventPositionTicks","velocity","ticks","durationTicks","note","onNoteChange","currentNoteTrackIndex","currentNoteIndex","onInsertNote","isDragging","setIsDragging","createSignal","noteDragMode","setNoteDragMode","setCurrentNoteIndex","setCurrentNoteTrackIndex","isMouseDown","setIsMouseDown","tracks","notes","getClasses","Note","undefined","batch","For","track","trackIndex","showAllTracks","noteIndex","verticalVirtualDimensions","horizontalDimensions","_$memo","stopPropagation","initialPosition","diffPosition","handleMouseMove","mouseMoveEvent","updatedNote","previousTrackIndex","previousNoteIndex","onRemoveNote","newNoteIndex","handleMouseUp","window","removeEventListener","addEventListener","relativeX","noteStartX","noteEndX","join","_$className","_$delegateEvents","ScrollContainer","scrollContentRef","handleScroll","preventDefault","didUpdateScroll","maxVerticalPosition","maxPosition","height","width","scrollTop","scrollLeft","scrollWidth","scrollHeight","currentTarget","scrollTopAmount","scrollLeftAmount","onPositionChange","handleWheel","abs","deltaX","deltaY","onZoomChange","parentElement","scrollDivHeight","scrollDivWidth","scrollTo","left","top","_$use","PianoRollGrid","measureTicks","selectedGridDivisorTicks","calculateVisibleGridDivisorTicks","visibleRange","gridDivisorTicks","gridArray","numberOfLines","ceil","startIndex","entry","defaultRect","bottom","right","x","y","useBoundingClientRect","containerRef","boundingClientRect","setBoundingClientRect","container","updateBoundingClientRect","getBoundingClientRect","resizeObserver","ResizeObserver","observe","disconnect","VerticalZoomControl","_$spread","_$mergeProps","verticalZoom","onVerticalZoomChange","valueAsNumber","orient","HorizontalZoomControl","PianoRollTrackList","_tmpl$2","onSelectedTrackIndexChange","PianoRoll","contextProps","divProps","scrollerRef","setScrollerRef","clientRect","zoomFactor","minZoom","maxZoom","minVerticalZoom","maxVerticalZoom","isInitial","onVerticalPositionChange","horizontal","duration","vertical","verticalPosition","showTrackList","PianoRollContainer","PlayHead","propsWithDefauls","mergeProps","playHeadPosition","sync","newPosition","leftPosition","cursor","movementX","onPlayHeadPositionChange","useNotes","onNotesChange","slice","splice","findIndex","usePianoRoll","onPpqChange","onModeChange","onGridDivisionChange","onSnapToGridChange","onDurationChange"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../node_modules/style-inject/dist/style-inject.es.js","../../src/PianoRollContext.tsx","../../src/viewport/createViewPortDimension.ts","../../src/viewport/ScrollZoomViewPort.tsx","../../src/PianoRollKeys.tsx","../../src/PianoRollNotes.tsx","../../src/viewport/ScrollContainer.tsx","../../src/PianoRollGrid.tsx","../../src/useBoundingClientRect.ts","../../src/viewport/VerticalZoomControl.tsx","../../src/viewport/HorizontalZoomControl.tsx","../../src/PianoRollTrackList.tsx","../../src/PianoRoll.tsx","../../src/PlayHead.tsx","../../src/useNotes.ts","../../src/usePianoRoll.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { createContext, JSX, splitProps, useContext } from \"solid-js\";\n\nimport { PianoRollProps } from \"./PianoRoll\";\n\nconst PianoRollContext = createContext<PianoRollProps>();\n\nexport const PianoRollContextProvider = PianoRollContext.Provider;\n\nexport const usePianoRollContext = () => {\n const context = useContext(PianoRollContext);\n\n if (!context) throw new Error(\"No PianoRollContext found\");\n\n return context;\n};\n\nexport const splitContextProps = (allProps: PianoRollProps & JSX.IntrinsicElements[\"div\"]) =>\n splitProps(allProps, [\n \"mode\",\n \"duration\",\n \"gridDivision\",\n \"tracks\",\n \"position\",\n \"ppq\",\n \"snapToGrid\",\n \"verticalPosition\",\n \"verticalZoom\",\n \"zoom\",\n \"onInsertNote\",\n \"onNoteChange\",\n \"onPositionChange\",\n \"onRemoveNote\",\n \"onVerticalPositionChange\",\n \"onVerticalZoomChange\",\n \"onZoomChange\",\n \"showAllTracks\",\n \"selectedTrackIndex\",\n \"onSelectedTrackIndexChange\",\n ]);\n","import { createEffect } from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\n\nexport type ViewPortDimension = ReturnType<typeof createViewPortDimension>;\nexport type ViewPortDimensionName = \"horizontal\" | \"vertical\";\nexport type ViewPortDimensionState = {\n position: number;\n range: number;\n\n pixelOffset: number;\n pixelSize: number;\n\n name: ViewPortDimensionName;\n\n onZoomChange?: (zoom: number) => void;\n onPositionChange?: (zoom: number) => void;\n\n zoom: number;\n};\n\nexport default function createViewPortDimension(getState: () => ViewPortDimensionState) {\n const getStateWithFunctions = () => ({\n ...getState(),\n calculatePixelOffset,\n calculatePixelValue,\n calculatePosition,\n calculatePixelDimensions,\n calculateVisibleRange,\n calculateMaxPosition,\n isVisible,\n });\n\n const [state, setState] = createStore(getStateWithFunctions());\n\n createEffect(() => setState(getStateWithFunctions()));\n\n function calculatePixelValue(position: number = state.position) {\n const virtualSize = state.pixelSize * state.zoom;\n return (position / state.range) * virtualSize;\n }\n\n function calculatePixelOffset(position: number) {\n return calculatePixelValue(position) - calculatePixelValue(state.position);\n }\n\n function calculatePosition(offset: number) {\n const percentX = (offset - state.pixelOffset) / state.pixelSize;\n const position = state.position + percentX * calculateVisibleRange();\n\n return position;\n }\n\n function calculateVisibleRange() {\n return state.range / state.zoom;\n }\n\n function calculateMaxPosition() {\n return state.range - state.range / state.zoom;\n }\n\n function calculatePixelDimensions(position: number, length: number) {\n const offset = calculatePixelOffset(position);\n const size = calculatePixelValue(length);\n\n return { offset, size };\n }\n\n function isVisible({ offset, size }: { offset: number; size: number }) {\n return offset + size > 0 && offset < state.pixelSize;\n }\n\n return state;\n}\n\nexport const clamp = (value: number, min: number, max: number) =>\n Math.max(min, Math.min(max, value));\n","import { createContext, ParentProps, useContext } from \"solid-js\";\nimport createViewPortDimension, {\n ViewPortDimension,\n ViewPortDimensionName,\n ViewPortDimensionState,\n} from \"./createViewPortDimension\";\n\nexport const ScrollZoomViewPort = (\n props: ParentProps<{\n dimensions: Record<ViewPortDimensionName, () => Omit<ViewPortDimensionState, \"name\">>;\n }>,\n) => {\n const viewPorts = Object.entries(props.dimensions).map(([name, viewPortProps]) =>\n createViewPortDimension(() => ({ name: name as ViewPortDimensionName, ...viewPortProps() })),\n );\n\n const parentViewPorts = useContext(ScrollZoomViewPortContext);\n\n return (\n <ScrollZoomViewPortContext.Provider value={[...parentViewPorts, ...viewPorts]}>\n {props.children}\n </ScrollZoomViewPortContext.Provider>\n );\n};\n\nconst ScrollZoomViewPortContext = createContext<ViewPortDimension[]>([]);\n\nexport const useViewPortDimension = (name: ViewPortDimensionName) => {\n const viewPorts = useContext(ScrollZoomViewPortContext);\n\n const viewPort = name\n ? viewPorts.find((viewPort) => viewPort.name === name)\n : viewPorts[viewPorts.length - 1];\n\n if (!viewPort) throw new Error(`ViewPort dimension \"${name}\" not found.`);\n\n return viewPort;\n};\n","import styles from \"./PianoRollKeys.module.css\";\nimport { createMemo, createSignal, Index, Show } from \"solid-js\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\n\nconst PianoRollKeys = () => {\n const viewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n\n return (\n <div class={styles.PianoRollKeys}>\n <Index each={keys}>\n {(key) => {\n const [isDown, setIsDown] = createSignal(false);\n\n const virtualDimensions = createMemo(() =>\n viewPort().calculatePixelDimensions(127 - key().number, 1),\n );\n\n const previousIsBlack = blackKeys.includes((key().number - 1) % 12);\n const nextIsBlack = blackKeys.includes((key().number + 1) % 12);\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n classList={{\n [styles[\"Key\"]]: true,\n [styles[\"black\"]]: key().isBlack,\n [styles[\"white\"]]: !key().isBlack,\n [styles[\"down\"]]: isDown(),\n }}\n onMouseDown={() => setIsDown(true)}\n onMouseUp={() => setIsDown(false)}\n title={key().name}\n data-index={key().number % 12}\n style={{\n top: `${\n virtualDimensions().offset -\n (!key().isBlack && nextIsBlack ? virtualDimensions().size / 2 : 0)\n }px`,\n height: `${\n virtualDimensions().size +\n (!key().isBlack && nextIsBlack ? virtualDimensions().size / 2 : 0) +\n (!key().isBlack && previousIsBlack ? virtualDimensions().size / 2 : 0)\n }px`,\n \"box-shadow\": [\n `0px 0px ${Math.min(virtualDimensions().size / 20, 1)}px ${Math.min(\n virtualDimensions().size / 50,\n 1,\n )}px rgba(0, 0, 0, 0.5) ${key().isBlack ? \"\" : \"inset\"}`,\n isDown() &&\n `0px 0px ${Math.min(virtualDimensions().size / 8, 2)}px ${Math.min(\n virtualDimensions().size / 20,\n 2,\n )}px rgba(0, 0, 0, 0.5) inset`,\n ]\n .filter((item) => !!item)\n .join(\", \"),\n }}\n >\n <Show when={key().isBlack && false}>\n <div\n class={styles[\"black-separator\"]}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size / 2 - 0.25}px`,\n }}\n ></div>\n </Show>\n </div>\n </Show>\n );\n }}\n </Index>\n </div>\n );\n};\n\nexport const blackKeys = [1, 3, 6, 8, 10];\nexport const keyNames = [\"C\", \"C#\", \"D\", \"D#\", \"E\", \"F\", \"F#\", \"G\", \"G#\", \"A\", \"A#\", \"B\"];\nexport const keys = Array.from({ length: 128 }).map((_, index) => ({\n number: index,\n name: `${keyNames[index % 12]} ${Math.floor(index / 12) - 2}`,\n isBlack: blackKeys.includes(index % 12),\n}));\n\nexport default PianoRollKeys;\n","import { batch, createMemo, createSignal, For, Ref, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport styles from \"./PianoRollNotes.module.scss\";\n\ntype NoteDragMode = \"trimStart\" | \"move\" | \"trimEnd\" | undefined;\n\nconst PianoRollNotes = (props: { ref?: Ref<HTMLDivElement | undefined> }) => {\n const context = usePianoRollContext();\n\n const verticalViewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n\n const gridDivisionTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n\n const snapValueToGridIfEnabled = (value: number, altKey: boolean) =>\n context.snapToGrid && !altKey\n ? Math.round(value / gridDivisionTicks()) * gridDivisionTicks()\n : value;\n\n const insertOrUpdateNote = (event: MouseEvent) => {\n const position = horizontalViewPort().calculatePosition(event.clientX);\n\n const existingNote = currentNote();\n\n const midi =\n context.mode === \"keys\"\n ? 127 - Math.floor(verticalViewPort().calculatePosition(event.clientY))\n : existingNote?.midi ?? 60;\n\n const targetTrackIndex =\n context.mode === \"tracks\"\n ? Math.floor(verticalViewPort().calculatePosition(event.clientY))\n : context.selectedTrackIndex ?? 0;\n\n const eventPositionTicks = Math.floor(position / gridDivisionTicks()) * gridDivisionTicks();\n const velocity = 127;\n\n const ticks = existingNote?.ticks ?? eventPositionTicks;\n const durationTicks = existingNote?.ticks\n ? eventPositionTicks - existingNote?.ticks\n : gridDivisionTicks();\n\n const note = { midi, ticks, durationTicks, velocity };\n\n if (existingNote) {\n context.onNoteChange?.(currentNoteTrackIndex(), currentNoteIndex(), note);\n return currentNoteIndex();\n } else {\n return context.onInsertNote?.(targetTrackIndex, note) ?? -1;\n }\n };\n\n const [isDragging, setIsDragging] = createSignal(false);\n const [noteDragMode, setNoteDragMode] = createSignal<NoteDragMode>();\n const [currentNoteIndex, setCurrentNoteIndex] = createSignal(-1);\n const [currentNoteTrackIndex, setCurrentNoteTrackIndex] = createSignal(-1);\n const [isMouseDown, setIsMouseDown] = createSignal(false);\n\n const currentNote = createMemo(\n () => context.tracks[currentNoteTrackIndex()]?.notes[currentNoteIndex()],\n );\n\n const getClasses = (noteDragMode: NoteDragMode) => {\n return noteDragMode ? [styles.Note, styles[noteDragMode]] : [styles.Note];\n };\n\n return (\n <div\n class={styles.PianoRollNotes}\n ref={props.ref}\n onMouseDown={(event) => {\n batch(() => {\n setIsMouseDown(true);\n const index = insertOrUpdateNote(event);\n\n setCurrentNoteTrackIndex(context.selectedTrackIndex ?? 0);\n setCurrentNoteIndex(index);\n });\n }}\n onMouseMove={(event) => {\n if (isDragging()) return;\n\n if (!isMouseDown()) {\n setNoteDragMode(undefined);\n return;\n }\n\n const index = insertOrUpdateNote(event);\n\n setCurrentNoteIndex(index);\n }}\n onMouseUp={(event) => {\n setIsMouseDown(false);\n if (!event.altKey) return;\n insertOrUpdateNote(event);\n }}\n onDblClick={(event) => {\n insertOrUpdateNote(event);\n }}\n onClick={(event) => {\n if (currentNote()) {\n setCurrentNoteIndex(-1);\n return;\n }\n if (!event.altKey) return;\n insertOrUpdateNote(event);\n }}\n >\n <For each={context.tracks}>\n {(track, trackIndex) => {\n return (\n <Show\n when={\n trackIndex() === context.selectedTrackIndex ||\n context.showAllTracks ||\n context.mode === \"tracks\"\n }\n >\n <For each={track.notes}>\n {(note, noteIndex) => {\n const verticalVirtualDimensions = createMemo(() =>\n verticalViewPort().calculatePixelDimensions(\n context.mode === \"keys\" ? 127 - note.midi : trackIndex(),\n 1,\n ),\n );\n\n const horizontalDimensions = createMemo(() =>\n horizontalViewPort().calculatePixelDimensions(note.ticks, note.durationTicks),\n );\n\n return (\n <Show\n when={\n verticalViewPort().isVisible(verticalVirtualDimensions()) &&\n horizontalViewPort().isVisible(horizontalDimensions())\n }\n >\n <div\n class={getClasses(noteDragMode()).join(\" \")}\n draggable={false}\n onMouseMove={(event) => {\n if (isDragging()) return;\n event.stopPropagation();\n\n const relativeX = horizontalViewPort().calculatePixelValue(\n horizontalViewPort().calculatePosition(event.clientX),\n );\n const noteStartX = horizontalViewPort().calculatePixelValue(note.ticks);\n const noteEndX = horizontalViewPort().calculatePixelValue(\n note.ticks + note.durationTicks,\n );\n\n setNoteDragMode(\n relativeX - noteStartX < 3\n ? \"trimStart\"\n : noteEndX - relativeX < 3\n ? \"trimEnd\"\n : \"move\",\n );\n }}\n onDblClick={(event) => {\n event.stopPropagation();\n context.onRemoveNote?.(trackIndex(), noteIndex());\n }}\n onMouseDown={(event) => {\n event.stopPropagation();\n\n setIsDragging(true);\n\n setCurrentNoteIndex(noteIndex());\n setCurrentNoteTrackIndex(trackIndex());\n\n const initialPosition = horizontalViewPort().calculatePosition(\n event.clientX,\n );\n const diffPosition = initialPosition - note.ticks;\n\n const handleMouseMove = (mouseMoveEvent: MouseEvent) => {\n const note = currentNote();\n if (!note) return;\n\n const ticks = snapValueToGridIfEnabled(\n Math.max(\n horizontalViewPort().calculatePosition(mouseMoveEvent.clientX) -\n diffPosition,\n 0,\n ),\n mouseMoveEvent.altKey,\n );\n\n const updatedNote = {\n ...note,\n ...(noteDragMode() === \"move\" &&\n context.mode === \"keys\" && {\n midi: Math.round(\n 127 -\n verticalViewPort().calculatePosition(mouseMoveEvent.clientY),\n ),\n }),\n ...((noteDragMode() === \"move\" || noteDragMode() === \"trimStart\") && {\n ticks,\n }),\n ...(noteDragMode() === \"trimStart\" && {\n durationTicks: note.durationTicks + note.ticks - ticks,\n }),\n ...(noteDragMode() === \"trimEnd\" && {\n durationTicks: snapValueToGridIfEnabled(\n horizontalViewPort().calculatePosition(mouseMoveEvent.clientX) -\n note.ticks,\n mouseMoveEvent.altKey,\n ),\n }),\n };\n\n const previousTrackIndex = currentNoteTrackIndex();\n const previousNoteIndex = currentNoteIndex();\n\n const targetTrackIndex =\n context.mode === \"tracks\"\n ? Math.floor(\n verticalViewPort().calculatePosition(mouseMoveEvent.clientY),\n )\n : previousTrackIndex;\n\n if (targetTrackIndex === previousTrackIndex) {\n context.onNoteChange?.(\n previousTrackIndex,\n previousNoteIndex,\n updatedNote,\n );\n } else {\n batch(() => {\n if (context.onInsertNote) {\n context.onRemoveNote?.(previousTrackIndex, previousNoteIndex);\n const newNoteIndex = context.onInsertNote(\n targetTrackIndex,\n updatedNote,\n );\n\n setCurrentNoteTrackIndex(targetTrackIndex);\n setCurrentNoteIndex(newNoteIndex);\n }\n });\n }\n };\n const handleMouseUp = () => {\n setIsDragging(false);\n setCurrentNoteIndex(-1);\n setCurrentNoteTrackIndex(-1);\n\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }}\n style={{\n \"background-color\": `rgba(255,0,0, ${(128 + note.velocity) / 256})`,\n\n top: `${verticalVirtualDimensions().offset}px`,\n height: `${verticalVirtualDimensions().size}px`,\n\n left: `${horizontalDimensions().offset}px`,\n width: `${horizontalDimensions().size}px`,\n }}\n ></div>\n </Show>\n );\n }}\n </For>\n </Show>\n );\n }}\n </For>\n </div>\n );\n};\n\nexport default PianoRollNotes;\n","import { createEffect, createMemo, ParentProps, Ref } from \"solid-js\";\n\nimport { useViewPortDimension } from \"./ScrollZoomViewPort\";\n\nconst ScrollContainer = (props: ParentProps<{ ref?: Ref<HTMLDivElement> }>) => {\n let scrollContentRef: HTMLDivElement | undefined;\n\n const verticalViewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n\n const handleScroll = (event: UIEvent & { currentTarget: Element }) => {\n event.preventDefault();\n\n if (didUpdateScroll) {\n didUpdateScroll = false;\n return;\n }\n\n const maxVerticalPosition = verticalViewPort().calculateMaxPosition();\n const maxPosition = horizontalViewPort().calculateMaxPosition();\n\n const height = verticalViewPort().pixelSize;\n const width = horizontalViewPort().pixelSize;\n const { scrollTop, scrollLeft, scrollWidth, scrollHeight } = event.currentTarget;\n\n const scrollTopAmount = scrollTop / (scrollHeight - height);\n const scrollLeftAmount = scrollLeft / (scrollWidth - width);\n\n verticalViewPort().onPositionChange?.(maxVerticalPosition * scrollTopAmount);\n horizontalViewPort().onPositionChange?.(maxPosition * scrollLeftAmount);\n };\n\n const handleWheel = (event: WheelEvent) => {\n if (event.altKey) {\n event.preventDefault();\n\n if (Math.abs(event.deltaX) > Math.abs(event.deltaY)) {\n horizontalViewPort()?.onZoomChange?.(\n horizontalViewPort().zoom * (1 + event.deltaX / horizontalViewPort().pixelSize),\n );\n const maxPosition = horizontalViewPort().calculateMaxPosition();\n\n horizontalViewPort()?.onPositionChange?.(\n Math.min(maxPosition, horizontalViewPort()?.position),\n );\n } else {\n verticalViewPort()?.onZoomChange?.(\n verticalViewPort().zoom * (1 + event.deltaY / verticalViewPort().pixelSize),\n );\n const maxVerticalPosition = verticalViewPort().calculateMaxPosition();\n\n verticalViewPort()?.onPositionChange?.(\n Math.min(maxVerticalPosition, verticalViewPort()?.position),\n );\n }\n }\n };\n\n let didUpdateScroll = false;\n\n createEffect(() => {\n const maxVerticalPosition = verticalViewPort().calculateMaxPosition();\n const maxPosition = horizontalViewPort().calculateMaxPosition();\n\n const scrollTopAmount =\n maxVerticalPosition > 0 ? verticalViewPort().position / maxVerticalPosition : 0;\n const scrollLeftAmount = maxPosition > 0 ? horizontalViewPort().position / maxPosition : 0;\n\n const height = verticalViewPort().pixelSize;\n const width = horizontalViewPort().pixelSize;\n\n if (!scrollContentRef?.parentElement) return;\n\n const scrollDivHeight = verticalViewPort().zoom * verticalViewPort().pixelSize;\n const scrollTop = scrollTopAmount * (scrollDivHeight - height);\n\n const scrollDivWidth = horizontalViewPort().zoom * horizontalViewPort().pixelSize;\n const scrollLeft = scrollLeftAmount * (scrollDivWidth - width);\n\n didUpdateScroll = true;\n\n scrollContentRef.style.height = `${scrollDivHeight}px`;\n scrollContentRef.style.width = `${scrollDivWidth}px`;\n\n scrollContentRef.parentElement.scrollTo({\n left: scrollLeft,\n top: scrollTop,\n });\n });\n\n return (\n <div\n ref={props.ref}\n class=\"PianoRoll-Scroller\"\n style={{\n height: \"100%\",\n width: \"100%\",\n \"z-index\": 4,\n overflow: \"scroll\",\n \"pointer-events\": \"auto\",\n }}\n onScroll={handleScroll}\n onWheel={handleWheel}\n >\n <div ref={scrollContentRef}>\n <div\n style={{\n top: 0,\n left: 0,\n height: `${verticalViewPort().pixelSize}px`,\n width: `${horizontalViewPort().pixelSize}px`,\n position: \"sticky\",\n display: \"flex\",\n }}\n >\n <div\n style={{\n position: \"relative\",\n height: `${verticalViewPort().pixelSize}px`,\n width: `${horizontalViewPort().pixelSize}px`,\n }}\n >\n {props.children}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ScrollContainer;\n","import { createMemo, For, Index, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { blackKeys, keys } from \"./PianoRollKeys\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport styles from \"./PianoRollGrid.module.css\";\n\nconst PianoRollGrid = () => {\n const context = usePianoRollContext();\n\n const verticalViewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n\n const measureTicks = createMemo(() => context.ppq * 4);\n const selectedGridDivisorTicks = createMemo(() => measureTicks() / context.gridDivision);\n\n function calculateVisibleGridDivisorTicks(value: number): number {\n const visibleRange = horizontalViewPort().calculateVisibleRange();\n\n if (visibleRange <= 0) return 0;\n\n if (visibleRange / value > 100) {\n return calculateVisibleGridDivisorTicks(value * 2);\n }\n\n if (visibleRange / value < 30) {\n return calculateVisibleGridDivisorTicks(value / 2);\n }\n\n return value;\n }\n\n const gridDivisorTicks = createMemo(() =>\n calculateVisibleGridDivisorTicks(selectedGridDivisorTicks()),\n );\n\n const gridArray = createMemo(() => {\n const numberOfLines = Math.ceil(\n horizontalViewPort().calculateVisibleRange() / gridDivisorTicks() + 1,\n );\n const startIndex = Math.floor(context.position / gridDivisorTicks());\n\n return Array.from({ length: numberOfLines }).map((_, index) => ({\n index: index + startIndex,\n ticks: (index + startIndex) * gridDivisorTicks(),\n }));\n });\n\n return (\n <div class={styles.PianoRollGrid}>\n <Index each={gridArray()}>\n {(entry) => {\n const virtualDimensions = createMemo(() =>\n horizontalViewPort().calculatePixelDimensions(entry().ticks, gridDivisorTicks()),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollGrid-Time\"]}\n style={{\n background:\n Math.ceil((entry().index + 1 * selectedGridDivisorTicks()) / measureTicks()) %\n 2 ===\n 0\n ? \"#ddd\"\n : \"#ccc\",\n left: `${virtualDimensions().offset}px`,\n width: `${virtualDimensions().size}px`,\n \"border-left-color\":\n (entry().index * gridDivisorTicks()) % selectedGridDivisorTicks() === 0\n ? \"gray\"\n : \"#bbb\",\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n <Show when={context.mode === \"keys\"}>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n verticalViewPort().calculatePixelDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollGrid-Row\"]}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n width: \"100%\",\n \"background-color\": key().isBlack ? \"rgba(0,0,0,0.2)\" : \"none\",\n \"border-width\": `${\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12) ? \"0.1px\" : 0\n } 1px ${\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12) ? \"0.1px\" : 0\n } 0`,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </Show>\n\n <Show when={context.mode === \"tracks\"}>\n <For each={context.tracks}>\n {(track, index) => {\n const virtualDimensions = createMemo(() =>\n verticalViewPort().calculatePixelDimensions(index(), 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollGrid-Row\"]}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n width: \"100%\",\n \"background-color\": index() % 2 === 0 ? \"rgba(0,0,0,0.2)\" : \"none\",\n \"border-width\": 0,\n }}\n ></div>\n </Show>\n );\n }}\n </For>\n </Show>\n </div>\n );\n};\n\nexport default PianoRollGrid;\n","import { Accessor, createEffect, createSignal } from \"solid-js\";\n\nexport type ClientRect = Omit<DOMRect, \"toJSON\">;\n\nconst defaultRect: ClientRect = {\n left: 0,\n width: 0,\n top: 0,\n height: 0,\n bottom: 0,\n right: 0,\n x: 0,\n y: 0,\n};\n\nexport default function useBoundingClientRect(containerRef: Accessor<HTMLElement | undefined>) {\n const [boundingClientRect, setBoundingClientRect] = createSignal<ClientRect>(defaultRect);\n\n createEffect(() => {\n const container = containerRef();\n if (!container) return;\n\n const updateBoundingClientRect = () => {\n setBoundingClientRect(container.getBoundingClientRect() ?? defaultRect);\n };\n\n const resizeObserver = new ResizeObserver(updateBoundingClientRect);\n resizeObserver.observe(container);\n\n updateBoundingClientRect();\n\n return () => {\n resizeObserver.disconnect();\n };\n });\n\n return boundingClientRect;\n}\n","import { JSX } from \"solid-js/jsx-runtime\";\nimport { usePianoRollContext } from \"../PianoRollContext\";\n\nconst VerticalZoomControl = (props: JSX.IntrinsicElements[\"input\"]) => {\n const context = usePianoRollContext();\n\n return (\n <input\n min=\"1\"\n max=\"11\"\n step={0.01}\n {...props}\n value={context.verticalZoom}\n onInput={(event) => context.onVerticalZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n {...{ orient: \"vertical\" }}\n style={{\n width: \"16px\",\n ...({\n \"writing-mode\": \"bt-lr\" /* IE */,\n \"-webkit-appearance\": \"slider-vertical\" /* WebKit */,\n } as unknown as JSX.CSSProperties),\n }}\n />\n );\n};\n\nexport default VerticalZoomControl;\n","import { JSX } from \"solid-js/jsx-runtime\";\n\nimport { usePianoRollContext } from \"../PianoRollContext\";\n\nconst HorizontalZoomControl = (props: JSX.IntrinsicElements[\"input\"]) => {\n const context = usePianoRollContext();\n\n return (\n <input\n max=\"500\"\n min=\"1\"\n step={0.01}\n {...props}\n value={context.zoom}\n onInput={(event) => context.onZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n style={{\n \"margin-left\": \"50px\",\n \"margin-right\": \"16px\",\n ...(typeof props.style === \"object\" && props.style),\n }}\n />\n );\n};\n\nexport default HorizontalZoomControl;\n","import styles from \"./PianoRollTrackList.module.css\";\nimport { createMemo, Index, Show } from \"solid-js\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollTrackList = () => {\n const viewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const context = usePianoRollContext();\n\n return (\n <div class={styles.PianoRollTrackList}>\n <Index each={context.tracks}>\n {(track, index) => {\n const virtualDimensions = createMemo(() =>\n viewPort().calculatePixelDimensions(\n context.mode === \"tracks\" ? index : index * 8,\n context.mode === \"tracks\" ? 1 : 8,\n ),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n classList={{\n [styles[\"Track\"]]: true,\n }}\n title={track().name}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n background: index === context.selectedTrackIndex ? \"gray\" : \"lightgrey\",\n cursor: \"pointer\",\n }}\n onClick={() => context.onSelectedTrackIndexChange?.(index)}\n >\n {index} {track().name || \"[unnamed track]\"}\n </div>\n </Show>\n );\n }}\n </Index>\n </div>\n );\n};\n\nexport default PianoRollTrackList;\n","import styles from \"./PianoRoll.module.css\";\n\nimport { JSX, createSignal, createMemo, ParentProps, createEffect, Show } from \"solid-js\";\n\nimport { PianoRollContextProvider, splitContextProps } from \"./PianoRollContext\";\nimport PianoRollKeys from \"./PianoRollKeys\";\nimport PianoRollNotes from \"./PianoRollNotes\";\nimport ScrollContainer from \"./viewport/ScrollContainer\";\nimport PianoRollGrid from \"./PianoRollGrid\";\nimport { Note, Track } from \"./types\";\nimport { ScrollZoomViewPort as ScrollZoomViewPort } from \"./viewport/ScrollZoomViewPort\";\nimport useBoundingClientRect from \"./useBoundingClientRect\";\nimport { clamp } from \"./viewport/createViewPortDimension\";\nimport VerticalZoomControl from \"./viewport/VerticalZoomControl\";\nimport HorizontalZoomControl from \"./viewport/HorizontalZoomControl\";\nimport PianoRollTrackList from \"./PianoRollTrackList\";\n\nexport type GridDivision = 1 | 2 | 4 | 8 | 16 | 32 | 64;\n\nexport type PianoRollProps = {\n ppq: number;\n tracks: Track[];\n\n gridDivision: GridDivision;\n snapToGrid: boolean;\n\n mode: \"keys\" | \"tracks\";\n showAllTracks?: boolean;\n showTrackList?: boolean;\n\n selectedTrackIndex: number;\n\n verticalPosition: number;\n verticalZoom: number;\n\n position: number;\n duration: number;\n zoom: number;\n\n onVerticalZoomChange?: (zoom: number) => void;\n onVerticalPositionChange?: (zoom: number) => void;\n onZoomChange?: (zoom: number) => void;\n onPositionChange?: (zoom: number) => void;\n\n onNoteChange?: (trackIndex: number, noteIndex: number, note: Note) => void;\n onInsertNote?: (trackIndex: number, note: Note) => number;\n onRemoveNote?: (trackIndex: number, noteIndex: number) => void;\n\n onSelectedTrackIndexChange?: (trackIndex: number) => void;\n};\n\nconst PianoRoll = (allProps: ParentProps<PianoRollProps & JSX.IntrinsicElements[\"div\"]>) => {\n const [contextProps, divProps] = splitContextProps(allProps);\n\n const [scrollerRef, setScrollerRef] = createSignal<HTMLDivElement>();\n const clientRect = useBoundingClientRect(scrollerRef);\n\n const zoomFactor = 500;\n\n const minZoom = createMemo(() => 1 / (zoomFactor / clientRect().width));\n const maxZoom = createMemo(() => 500 * (zoomFactor / clientRect().width));\n\n const minVerticalZoom = createMemo(() => 1 / (zoomFactor / clientRect().height));\n const maxVerticalZoom = createMemo(() => 10 * (zoomFactor / clientRect().height));\n\n createEffect((isInitial) => {\n if (isInitial) return false;\n\n if (contextProps.mode === \"tracks\") {\n contextProps.onVerticalPositionChange?.(0);\n }\n }, true);\n\n return (\n <PianoRollContextProvider value={contextProps}>\n <div {...divProps} class={styles.PianoRoll}>\n <div class={styles.PianoRollContainer}>\n <ScrollZoomViewPort\n dimensions={{\n horizontal: () => ({\n pixelOffset: clientRect().left,\n pixelSize: clientRect().width,\n position: contextProps.position,\n range: contextProps.duration,\n zoom: contextProps.zoom * (zoomFactor / clientRect().width),\n onPositionChange: contextProps.onPositionChange,\n onZoomChange: (zoom) =>\n contextProps.onZoomChange?.(\n clamp(zoom / (zoomFactor / clientRect().width), minZoom(), maxZoom()),\n ),\n }),\n vertical: () => ({\n pixelOffset: clientRect().top,\n pixelSize: clientRect().height,\n position: contextProps.verticalPosition,\n range:\n contextProps.mode === \"keys\" ? 128 : Math.max(contextProps.tracks.length, 16),\n zoom: contextProps.verticalZoom * (zoomFactor / clientRect().height),\n onPositionChange: contextProps.onVerticalPositionChange,\n onZoomChange: (verticalZoom) =>\n contextProps.onVerticalZoomChange?.(\n clamp(\n verticalZoom / (zoomFactor / clientRect().height),\n minVerticalZoom(),\n maxVerticalZoom(),\n ),\n ),\n }),\n }}\n >\n <div style={{ display: \"flex\", width: \"20%\" }}>\n <Show when={allProps.showTrackList}>\n <PianoRollTrackList />\n </Show>\n <Show when={contextProps.mode === \"keys\"}>\n <PianoRollKeys />\n </Show>\n </div>\n\n <ScrollContainer ref={setScrollerRef}>\n {allProps.children}\n <PianoRollGrid />\n <PianoRollNotes />\n </ScrollContainer>\n\n <VerticalZoomControl min={minVerticalZoom()} max={maxVerticalZoom()} />\n </ScrollZoomViewPort>\n </div>\n <HorizontalZoomControl min={minZoom()} max={maxZoom()} />\n </div>\n </PianoRollContextProvider>\n );\n};\n\nexport default PianoRoll;\n","import { createEffect, createMemo, JSX, mergeProps, splitProps } from \"solid-js\";\nimport { clamp } from \"./viewport/createViewPortDimension\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\n\nconst PlayHead = (\n allProps: {\n playHeadPosition?: number;\n sync?: boolean;\n onPlayHeadPositionChange?: (playHeadPosition: number) => void;\n onPositionChange?: (position: number) => void;\n } & JSX.IntrinsicElements[\"div\"],\n) => {\n const propsWithDefauls = mergeProps({ playHeadPosition: 0, sync: false }, allProps);\n const [props, divProps] = splitProps(propsWithDefauls, [\n \"playHeadPosition\",\n \"sync\",\n \"onPlayHeadPositionChange\",\n \"onPositionChange\",\n ]);\n\n const viewPort = useViewPortDimension(\"horizontal\");\n createEffect(() => {\n if (!props.sync) return;\n\n const maxPosition = viewPort.range;\n const newPosition = clamp(\n props.playHeadPosition - viewPort.range / viewPort.zoom / 2,\n 0,\n maxPosition,\n );\n\n props.onPositionChange?.(newPosition);\n });\n\n const leftPosition = createMemo(() => viewPort.calculatePixelOffset(props.playHeadPosition));\n\n return (\n <div\n class=\"PlayHead\"\n {...divProps}\n style={{\n position: \"absolute\",\n height: \"100%\",\n width: \"2px\",\n left: `${leftPosition()}px`,\n \"background-color\": \"green\",\n cursor: \"pointer\",\n ...(typeof divProps.style === \"object\" && divProps.style),\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n const handleMouseMove = ({ movementX }: MouseEvent) => {\n const { parentElement } = event.currentTarget;\n if (!parentElement) return;\n\n const newPosition = viewPort.calculatePosition(leftPosition() + movementX);\n props.onPlayHeadPositionChange?.(newPosition);\n };\n const handleMouseUp = () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }}\n />\n );\n};\n\nexport default PlayHead;\n","import { createSignal } from \"solid-js\";\nimport { Note } from \"./types\";\n\nconst useNotes = () => {\n const [notes, onNotesChange] = createSignal<Note[]>([]);\n const onNoteChange = (index: number, note: Note) => {\n onNotesChange([...notes().slice(0, index), note, ...notes().splice(index + 1)]);\n };\n\n const onInsertNote = (note: Note) => {\n const index = Math.max(\n notes().findIndex(({ ticks }) => ticks > note.ticks),\n 0,\n );\n onNotesChange([...notes().slice(0, index), note, ...notes().splice(index)]);\n return index;\n };\n\n const onRemoveNote = (index: number) => {\n onNotesChange([...notes().slice(0, index), ...notes().splice(index + 1)]);\n };\n\n return {\n notes,\n onNotesChange,\n onNoteChange,\n onInsertNote,\n onRemoveNote,\n };\n};\n\nexport default useNotes;\n","import { createSignal } from \"solid-js\";\nimport { GridDivision } from \"./PianoRoll\";\n\nconst usePianoRoll = () => {\n const [ppq, onPpqChange] = createSignal(120);\n\n const [mode, onModeChange] = createSignal<\"keys\" | \"tracks\">(\"tracks\");\n\n const [position, onPositionChange] = createSignal(0);\n\n const [zoom, onZoomChange] = createSignal(10);\n const [verticalZoom, onVerticalZoomChange] = createSignal(5);\n const [verticalPosition, onVerticalPositionChange] = createSignal(44);\n\n const [gridDivision, onGridDivisionChange] = createSignal<GridDivision>(4);\n const [snapToGrid, onSnapToGridChange] = createSignal(true);\n\n const [duration, onDurationChange] = createSignal(0);\n\n return {\n ppq,\n onPpqChange,\n\n position,\n onPositionChange,\n\n zoom,\n onZoomChange,\n\n verticalPosition,\n onVerticalPositionChange,\n\n verticalZoom,\n onVerticalZoomChange,\n\n gridDivision,\n onGridDivisionChange,\n\n snapToGrid,\n onSnapToGridChange,\n\n mode,\n onModeChange,\n\n duration,\n onDurationChange,\n };\n};\n\nexport default usePianoRoll;\n"],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","PianoRollContext","createContext","PianoRollContextProvider","Provider","usePianoRollContext","context","useContext","Error","splitContextProps","allProps","splitProps","createViewPortDimension","getState","getStateWithFunctions","calculatePixelOffset","calculatePixelValue","calculatePosition","calculatePixelDimensions","calculateVisibleRange","calculateMaxPosition","isVisible","state","setState","createStore","createEffect","position","virtualSize","pixelSize","zoom","range","offset","percentX","pixelOffset","length","size","clamp","value","min","max","Math","ScrollZoomViewPort","props","viewPorts","Object","entries","dimensions","map","name","viewPortProps","parentViewPorts","ScrollZoomViewPortContext","_$createComponent","children","useViewPortDimension","viewPort","find","PianoRollKeys","createMemo","_tmpl$","_$insert","Index","keys","key","isDown","setIsDown","createSignal","virtualDimensions","number","previousIsBlack","blackKeys","includes","nextIsBlack","Show","isBlack","_$effect","styles","_$className","filter","item","join","_$classList","_$setAttribute","keyNames","Array","from","_","index","floor","_$delegateEvents","PianoRollNotes","verticalViewPort","horizontalViewPort","gridDivisionTicks","ppq","gridDivision","snapValueToGridIfEnabled","altKey","snapToGrid","round","insertOrUpdateNote","event","clientX","existingNote","currentNote","midi","mode","clientY","targetTrackIndex","selectedTrackIndex","eventPositionTicks","velocity","ticks","durationTicks","note","onNoteChange","currentNoteTrackIndex","currentNoteIndex","onInsertNote","isDragging","setIsDragging","noteDragMode","setNoteDragMode","setCurrentNoteIndex","setCurrentNoteTrackIndex","isMouseDown","setIsMouseDown","tracks","notes","getClasses","Note","undefined","batch","For","track","trackIndex","showAllTracks","noteIndex","verticalVirtualDimensions","horizontalDimensions","_$memo","stopPropagation","initialPosition","diffPosition","handleMouseMove","mouseMoveEvent","updatedNote","previousTrackIndex","previousNoteIndex","onRemoveNote","newNoteIndex","handleMouseUp","window","removeEventListener","addEventListener","relativeX","noteStartX","noteEndX","ScrollContainer","scrollContentRef","handleScroll","preventDefault","didUpdateScroll","maxVerticalPosition","maxPosition","height","width","scrollTop","scrollLeft","scrollWidth","scrollHeight","currentTarget","scrollTopAmount","scrollLeftAmount","onPositionChange","handleWheel","abs","deltaX","deltaY","onZoomChange","parentElement","scrollDivHeight","scrollDivWidth","scrollTo","left","top","_$use","PianoRollGrid","measureTicks","selectedGridDivisorTicks","calculateVisibleGridDivisorTicks","visibleRange","gridDivisorTicks","gridArray","numberOfLines","ceil","startIndex","entry","defaultRect","bottom","right","x","y","useBoundingClientRect","containerRef","boundingClientRect","setBoundingClientRect","container","updateBoundingClientRect","getBoundingClientRect","resizeObserver","ResizeObserver","observe","disconnect","VerticalZoomControl","_$spread","_$mergeProps","verticalZoom","onVerticalZoomChange","valueAsNumber","orient","HorizontalZoomControl","PianoRollTrackList","_tmpl$2","onSelectedTrackIndexChange","PianoRoll","contextProps","divProps","scrollerRef","setScrollerRef","clientRect","zoomFactor","minZoom","maxZoom","minVerticalZoom","maxVerticalZoom","isInitial","onVerticalPositionChange","horizontal","duration","vertical","verticalPosition","showTrackList","PianoRollContainer","PlayHead","propsWithDefauls","mergeProps","playHeadPosition","sync","newPosition","leftPosition","cursor","movementX","onPlayHeadPositionChange","useNotes","onNotesChange","slice","splice","findIndex","usePianoRoll","onPpqChange","onModeChange","onGridDivisionChange","onSnapToGridChange","onDurationChange"],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { createComponent, insert, effect, classList, setAttribute, className, template, delegateEvents, use, memo, spread, mergeProps } from 'solid-js/web';
2
- import { createContext, splitProps, useContext, createEffect, createMemo, Index, Show, createSignal, batch, For, mergeProps as mergeProps$1 } from 'solid-js';
1
+ import { createComponent, delegateEvents, insert, effect, className, classList, setAttribute, template, use, memo, spread, mergeProps } from 'solid-js/web';
2
+ import { createContext, splitProps, useContext, createEffect, createMemo, Index, createSignal, Show, batch, For, mergeProps as mergeProps$1 } from 'solid-js';
3
3
  import { createStore } from 'solid-js/store';
4
4
 
5
5
  function styleInject(css, ref) {
@@ -40,8 +40,8 @@ const usePianoRollContext = () => {
40
40
  };
41
41
  const splitContextProps = allProps => splitProps(allProps, ["mode", "duration", "gridDivision", "tracks", "position", "ppq", "snapToGrid", "verticalPosition", "verticalZoom", "zoom", "onInsertNote", "onNoteChange", "onPositionChange", "onRemoveNote", "onVerticalPositionChange", "onVerticalZoomChange", "onZoomChange", "showAllTracks", "selectedTrackIndex", "onSelectedTrackIndexChange"]);
42
42
 
43
- var css_248z$3 = ".PianoRollKeys-module_PianoRollKeys__5vnQ0 {\n position: relative;\n height: 100%;\n width: 50px;\n}\n\n.PianoRollKeys-module_Key__jybNC {\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}\n\n.PianoRollKeys-module_black__7rncB {\n background: black;\n}\n\n.PianoRollKeys-module_white__fR2Lm {\n background: white;\n}\n\n.PianoRollKeys-module_whiteAndNextIsWhite__PN1O8 {\n border-top-width: 0.1px;\n}\n\n.PianoRollKeys-module_whiteAndPreviousIsWhite__-fP3q {\n border-bottom-width: 0.1px;\n}\n";
44
- var styles$3 = {"PianoRollKeys":"PianoRollKeys-module_PianoRollKeys__5vnQ0","Key":"PianoRollKeys-module_Key__jybNC","black":"PianoRollKeys-module_black__7rncB","white":"PianoRollKeys-module_white__fR2Lm","whiteAndNextIsWhite":"PianoRollKeys-module_whiteAndNextIsWhite__PN1O8","whiteAndPreviousIsWhite":"PianoRollKeys-module_whiteAndPreviousIsWhite__-fP3q"};
43
+ var css_248z$3 = ".PianoRollKeys-module_PianoRollKeys__5vnQ0 {\n position: relative;\n height: 100%;\n width: 50px;\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 overflow: hidden;\n}\n\n.PianoRollKeys-module_Key__jybNC {\n transition-property: background-color, box-shadow;\n transition-duration: 400ms;\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}\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}\n\n.PianoRollKeys-module_white__fR2Lm {\n background: white;\n border-top-width: 0.5px;\n border-bottom-width: 0.5px;\n}\n\n.PianoRollKeys-module_down__GcNeZ {\n transition: none;\n background: red;\n}\n";
44
+ var styles$3 = {"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"};
45
45
  styleInject(css_248z$3);
46
46
 
47
47
  function createViewPortDimension(getState) {
@@ -124,37 +124,66 @@ const PianoRollKeys = () => {
124
124
  insert(_el$, createComponent(Index, {
125
125
  each: keys,
126
126
  children: key => {
127
+ const [isDown, setIsDown] = createSignal(false);
127
128
  const virtualDimensions = createMemo(() => viewPort().calculatePixelDimensions(127 - key().number, 1));
129
+ const previousIsBlack = blackKeys.includes((key().number - 1) % 12);
130
+ const nextIsBlack = blackKeys.includes((key().number + 1) % 12);
128
131
  return createComponent(Show, {
129
132
  get when() {
130
133
  return virtualDimensions().size > 0;
131
134
  },
132
135
  get children() {
133
136
  const _el$2 = _tmpl$$8.cloneNode(true);
137
+ _el$2.$$mouseup = () => setIsDown(false);
138
+ _el$2.$$mousedown = () => setIsDown(true);
139
+ insert(_el$2, createComponent(Show, {
140
+ get when() {
141
+ return key().isBlack && false;
142
+ },
143
+ get children() {
144
+ const _el$3 = _tmpl$$8.cloneNode(true);
145
+ effect(_p$ => {
146
+ const _v$ = styles$3["black-separator"],
147
+ _v$2 = `${virtualDimensions().offset}px`,
148
+ _v$3 = `${virtualDimensions().size / 2 - 0.25}px`;
149
+ _v$ !== _p$._v$ && className(_el$3, _p$._v$ = _v$);
150
+ _v$2 !== _p$._v$2 && _el$3.style.setProperty("top", _p$._v$2 = _v$2);
151
+ _v$3 !== _p$._v$3 && _el$3.style.setProperty("height", _p$._v$3 = _v$3);
152
+ return _p$;
153
+ }, {
154
+ _v$: undefined,
155
+ _v$2: undefined,
156
+ _v$3: undefined
157
+ });
158
+ return _el$3;
159
+ }
160
+ }));
134
161
  effect(_p$ => {
135
- const _v$ = {
162
+ const _v$4 = {
136
163
  [styles$3["Key"]]: true,
137
164
  [styles$3["black"]]: key().isBlack,
138
165
  [styles$3["white"]]: !key().isBlack,
139
- [styles$3["whiteAndNextIsWhite"]]: !key().isBlack && !blackKeys.includes((key().number + 1) % 12),
140
- [styles$3["whiteAndPreviousIsWhite"]]: !key().isBlack && !blackKeys.includes((key().number - 1) % 12)
166
+ [styles$3["down"]]: isDown()
141
167
  },
142
- _v$2 = key().name,
143
- _v$3 = key().number % 12,
144
- _v$4 = `${virtualDimensions().offset}px`,
145
- _v$5 = `${virtualDimensions().size}px`;
146
- _p$._v$ = classList(_el$2, _v$, _p$._v$);
147
- _v$2 !== _p$._v$2 && setAttribute(_el$2, "title", _p$._v$2 = _v$2);
148
- _v$3 !== _p$._v$3 && setAttribute(_el$2, "data-index", _p$._v$3 = _v$3);
149
- _v$4 !== _p$._v$4 && _el$2.style.setProperty("top", _p$._v$4 = _v$4);
150
- _v$5 !== _p$._v$5 && _el$2.style.setProperty("height", _p$._v$5 = _v$5);
168
+ _v$5 = key().name,
169
+ _v$6 = key().number % 12,
170
+ _v$7 = `${virtualDimensions().offset - (!key().isBlack && nextIsBlack ? virtualDimensions().size / 2 : 0)}px`,
171
+ _v$8 = `${virtualDimensions().size + (!key().isBlack && nextIsBlack ? virtualDimensions().size / 2 : 0) + (!key().isBlack && previousIsBlack ? virtualDimensions().size / 2 : 0)}px`,
172
+ _v$9 = [`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`].filter(item => !!item).join(", ");
173
+ _p$._v$4 = classList(_el$2, _v$4, _p$._v$4);
174
+ _v$5 !== _p$._v$5 && setAttribute(_el$2, "title", _p$._v$5 = _v$5);
175
+ _v$6 !== _p$._v$6 && setAttribute(_el$2, "data-index", _p$._v$6 = _v$6);
176
+ _v$7 !== _p$._v$7 && _el$2.style.setProperty("top", _p$._v$7 = _v$7);
177
+ _v$8 !== _p$._v$8 && _el$2.style.setProperty("height", _p$._v$8 = _v$8);
178
+ _v$9 !== _p$._v$9 && _el$2.style.setProperty("box-shadow", _p$._v$9 = _v$9);
151
179
  return _p$;
152
180
  }, {
153
- _v$: undefined,
154
- _v$2: undefined,
155
- _v$3: undefined,
156
181
  _v$4: undefined,
157
- _v$5: undefined
182
+ _v$5: undefined,
183
+ _v$6: undefined,
184
+ _v$7: undefined,
185
+ _v$8: undefined,
186
+ _v$9: undefined
158
187
  });
159
188
  return _el$2;
160
189
  }
@@ -174,6 +203,7 @@ const keys = Array.from({
174
203
  name: `${keyNames[index % 12]} ${Math.floor(index / 12) - 2}`,
175
204
  isBlack: blackKeys.includes(index % 12)
176
205
  }));
206
+ delegateEvents(["mousedown", "mouseup"]);
177
207
 
178
208
  var css_248z$2 = ".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}";
179
209
  var styles$2 = {"PianoRollNotes":"PianoRollNotes-module_PianoRollNotes__6pF-y","Note":"PianoRollNotes-module_Note__-jxLb","trimStart":"PianoRollNotes-module_trimStart__vuBlj","trimEnd":"PianoRollNotes-module_trimEnd__zPdjr"};
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../node_modules/style-inject/dist/style-inject.es.js","../../src/PianoRollContext.tsx","../../src/viewport/createViewPortDimension.ts","../../src/viewport/ScrollZoomViewPort.tsx","../../src/PianoRollKeys.tsx","../../src/PianoRollNotes.tsx","../../src/viewport/ScrollContainer.tsx","../../src/PianoRollGrid.tsx","../../src/useBoundingClientRect.ts","../../src/viewport/VerticalZoomControl.tsx","../../src/viewport/HorizontalZoomControl.tsx","../../src/PianoRollTrackList.tsx","../../src/PianoRoll.tsx","../../src/PlayHead.tsx","../../src/useNotes.ts","../../src/usePianoRoll.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { createContext, JSX, splitProps, useContext } from \"solid-js\";\n\nimport { PianoRollProps } from \"./PianoRoll\";\n\nconst PianoRollContext = createContext<PianoRollProps>();\n\nexport const PianoRollContextProvider = PianoRollContext.Provider;\n\nexport const usePianoRollContext = () => {\n const context = useContext(PianoRollContext);\n\n if (!context) throw new Error(\"No PianoRollContext found\");\n\n return context;\n};\n\nexport const splitContextProps = (allProps: PianoRollProps & JSX.IntrinsicElements[\"div\"]) =>\n splitProps(allProps, [\n \"mode\",\n \"duration\",\n \"gridDivision\",\n \"tracks\",\n \"position\",\n \"ppq\",\n \"snapToGrid\",\n \"verticalPosition\",\n \"verticalZoom\",\n \"zoom\",\n \"onInsertNote\",\n \"onNoteChange\",\n \"onPositionChange\",\n \"onRemoveNote\",\n \"onVerticalPositionChange\",\n \"onVerticalZoomChange\",\n \"onZoomChange\",\n \"showAllTracks\",\n \"selectedTrackIndex\",\n \"onSelectedTrackIndexChange\",\n ]);\n","import { createEffect } from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\n\nexport type ViewPortDimension = ReturnType<typeof createViewPortDimension>;\nexport type ViewPortDimensionName = \"horizontal\" | \"vertical\";\nexport type ViewPortDimensionState = {\n position: number;\n range: number;\n\n pixelOffset: number;\n pixelSize: number;\n\n name: ViewPortDimensionName;\n\n onZoomChange?: (zoom: number) => void;\n onPositionChange?: (zoom: number) => void;\n\n zoom: number;\n};\n\nexport default function createViewPortDimension(getState: () => ViewPortDimensionState) {\n const getStateWithFunctions = () => ({\n ...getState(),\n calculatePixelOffset,\n calculatePixelValue,\n calculatePosition,\n calculatePixelDimensions,\n calculateVisibleRange,\n calculateMaxPosition,\n isVisible,\n });\n\n const [state, setState] = createStore(getStateWithFunctions());\n\n createEffect(() => setState(getStateWithFunctions()));\n\n function calculatePixelValue(position: number = state.position) {\n const virtualSize = state.pixelSize * state.zoom;\n return (position / state.range) * virtualSize;\n }\n\n function calculatePixelOffset(position: number) {\n return calculatePixelValue(position) - calculatePixelValue(state.position);\n }\n\n function calculatePosition(offset: number) {\n const percentX = (offset - state.pixelOffset) / state.pixelSize;\n const position = state.position + percentX * calculateVisibleRange();\n\n return position;\n }\n\n function calculateVisibleRange() {\n return state.range / state.zoom;\n }\n\n function calculateMaxPosition() {\n return state.range - state.range / state.zoom;\n }\n\n function calculatePixelDimensions(position: number, length: number) {\n const offset = calculatePixelOffset(position);\n const size = calculatePixelValue(length);\n\n return { offset, size };\n }\n\n function isVisible({ offset, size }: { offset: number; size: number }) {\n return offset + size > 0 && offset < state.pixelSize;\n }\n\n return state;\n}\n\nexport const clamp = (value: number, min: number, max: number) =>\n Math.max(min, Math.min(max, value));\n","import { createContext, ParentProps, useContext } from \"solid-js\";\nimport createViewPortDimension, {\n ViewPortDimension,\n ViewPortDimensionName,\n ViewPortDimensionState,\n} from \"./createViewPortDimension\";\n\nexport const ScrollZoomViewPort = (\n props: ParentProps<{\n dimensions: Record<ViewPortDimensionName, () => Omit<ViewPortDimensionState, \"name\">>;\n }>,\n) => {\n const viewPorts = Object.entries(props.dimensions).map(([name, viewPortProps]) =>\n createViewPortDimension(() => ({ name: name as ViewPortDimensionName, ...viewPortProps() })),\n );\n\n const parentViewPorts = useContext(ScrollZoomViewPortContext);\n\n return (\n <ScrollZoomViewPortContext.Provider value={[...parentViewPorts, ...viewPorts]}>\n {props.children}\n </ScrollZoomViewPortContext.Provider>\n );\n};\n\nconst ScrollZoomViewPortContext = createContext<ViewPortDimension[]>([]);\n\nexport const useViewPortDimension = (name: ViewPortDimensionName) => {\n const viewPorts = useContext(ScrollZoomViewPortContext);\n\n const viewPort = name\n ? viewPorts.find((viewPort) => viewPort.name === name)\n : viewPorts[viewPorts.length - 1];\n\n if (!viewPort) throw new Error(`ViewPort dimension \"${name}\" not found.`);\n\n return viewPort;\n};\n","import styles from \"./PianoRollKeys.module.css\";\nimport { createMemo, Index, Show } from \"solid-js\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\n\nconst PianoRollKeys = () => {\n const viewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n\n return (\n <div class={styles.PianoRollKeys}>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n viewPort().calculatePixelDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n classList={{\n [styles[\"Key\"]]: true,\n [styles[\"black\"]]: key().isBlack,\n [styles[\"white\"]]: !key().isBlack,\n [styles[\"whiteAndNextIsWhite\"]]:\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12),\n [styles[\"whiteAndPreviousIsWhite\"]]:\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12),\n }}\n title={key().name}\n data-index={key().number % 12}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </div>\n );\n};\n\nexport const blackKeys = [1, 3, 6, 8, 10];\nexport const keyNames = [\"C\", \"C#\", \"D\", \"D#\", \"E\", \"F\", \"F#\", \"G\", \"G#\", \"A\", \"A#\", \"B\"];\nexport const keys = Array.from({ length: 128 }).map((_, index) => ({\n number: index,\n name: `${keyNames[index % 12]} ${Math.floor(index / 12) - 2}`,\n isBlack: blackKeys.includes(index % 12),\n}));\n\nexport default PianoRollKeys;\n","import { batch, createMemo, createSignal, For, Ref, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport styles from \"./PianoRollNotes.module.scss\";\n\ntype NoteDragMode = \"trimStart\" | \"move\" | \"trimEnd\" | undefined;\n\nconst PianoRollNotes = (props: { ref?: Ref<HTMLDivElement | undefined> }) => {\n const context = usePianoRollContext();\n\n const verticalViewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n\n const gridDivisionTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n\n const snapValueToGridIfEnabled = (value: number, altKey: boolean) =>\n context.snapToGrid && !altKey\n ? Math.round(value / gridDivisionTicks()) * gridDivisionTicks()\n : value;\n\n const insertOrUpdateNote = (event: MouseEvent) => {\n const position = horizontalViewPort().calculatePosition(event.clientX);\n\n const existingNote = currentNote();\n\n const midi =\n context.mode === \"keys\"\n ? 127 - Math.floor(verticalViewPort().calculatePosition(event.clientY))\n : existingNote?.midi ?? 60;\n\n const targetTrackIndex =\n context.mode === \"tracks\"\n ? Math.floor(verticalViewPort().calculatePosition(event.clientY))\n : context.selectedTrackIndex ?? 0;\n\n const eventPositionTicks = Math.floor(position / gridDivisionTicks()) * gridDivisionTicks();\n const velocity = 127;\n\n const ticks = existingNote?.ticks ?? eventPositionTicks;\n const durationTicks = existingNote?.ticks\n ? eventPositionTicks - existingNote?.ticks\n : gridDivisionTicks();\n\n const note = { midi, ticks, durationTicks, velocity };\n\n if (existingNote) {\n context.onNoteChange?.(currentNoteTrackIndex(), currentNoteIndex(), note);\n return currentNoteIndex();\n } else {\n return context.onInsertNote?.(targetTrackIndex, note) ?? -1;\n }\n };\n\n const [isDragging, setIsDragging] = createSignal(false);\n const [noteDragMode, setNoteDragMode] = createSignal<NoteDragMode>();\n const [currentNoteIndex, setCurrentNoteIndex] = createSignal(-1);\n const [currentNoteTrackIndex, setCurrentNoteTrackIndex] = createSignal(-1);\n const [isMouseDown, setIsMouseDown] = createSignal(false);\n\n const currentNote = createMemo(\n () => context.tracks[currentNoteTrackIndex()]?.notes[currentNoteIndex()],\n );\n\n const getClasses = (noteDragMode: NoteDragMode) => {\n return noteDragMode ? [styles.Note, styles[noteDragMode]] : [styles.Note];\n };\n\n return (\n <div\n class={styles.PianoRollNotes}\n ref={props.ref}\n onMouseDown={(event) => {\n batch(() => {\n setIsMouseDown(true);\n const index = insertOrUpdateNote(event);\n\n setCurrentNoteTrackIndex(context.selectedTrackIndex ?? 0);\n setCurrentNoteIndex(index);\n });\n }}\n onMouseMove={(event) => {\n if (isDragging()) return;\n\n if (!isMouseDown()) {\n setNoteDragMode(undefined);\n return;\n }\n\n const index = insertOrUpdateNote(event);\n\n setCurrentNoteIndex(index);\n }}\n onMouseUp={(event) => {\n setIsMouseDown(false);\n if (!event.altKey) return;\n insertOrUpdateNote(event);\n }}\n onDblClick={(event) => {\n insertOrUpdateNote(event);\n }}\n onClick={(event) => {\n if (currentNote()) {\n setCurrentNoteIndex(-1);\n return;\n }\n if (!event.altKey) return;\n insertOrUpdateNote(event);\n }}\n >\n <For each={context.tracks}>\n {(track, trackIndex) => {\n return (\n <Show\n when={\n trackIndex() === context.selectedTrackIndex ||\n context.showAllTracks ||\n context.mode === \"tracks\"\n }\n >\n <For each={track.notes}>\n {(note, noteIndex) => {\n const verticalVirtualDimensions = createMemo(() =>\n verticalViewPort().calculatePixelDimensions(\n context.mode === \"keys\" ? 127 - note.midi : trackIndex(),\n 1,\n ),\n );\n\n const horizontalDimensions = createMemo(() =>\n horizontalViewPort().calculatePixelDimensions(note.ticks, note.durationTicks),\n );\n\n return (\n <Show\n when={\n verticalViewPort().isVisible(verticalVirtualDimensions()) &&\n horizontalViewPort().isVisible(horizontalDimensions())\n }\n >\n <div\n class={getClasses(noteDragMode()).join(\" \")}\n draggable={false}\n onMouseMove={(event) => {\n if (isDragging()) return;\n event.stopPropagation();\n\n const relativeX = horizontalViewPort().calculatePixelValue(\n horizontalViewPort().calculatePosition(event.clientX),\n );\n const noteStartX = horizontalViewPort().calculatePixelValue(note.ticks);\n const noteEndX = horizontalViewPort().calculatePixelValue(\n note.ticks + note.durationTicks,\n );\n\n setNoteDragMode(\n relativeX - noteStartX < 3\n ? \"trimStart\"\n : noteEndX - relativeX < 3\n ? \"trimEnd\"\n : \"move\",\n );\n }}\n onDblClick={(event) => {\n event.stopPropagation();\n context.onRemoveNote?.(trackIndex(), noteIndex());\n }}\n onMouseDown={(event) => {\n event.stopPropagation();\n\n setIsDragging(true);\n\n setCurrentNoteIndex(noteIndex());\n setCurrentNoteTrackIndex(trackIndex());\n\n const initialPosition = horizontalViewPort().calculatePosition(\n event.clientX,\n );\n const diffPosition = initialPosition - note.ticks;\n\n const handleMouseMove = (mouseMoveEvent: MouseEvent) => {\n const note = currentNote();\n if (!note) return;\n\n const ticks = snapValueToGridIfEnabled(\n Math.max(\n horizontalViewPort().calculatePosition(mouseMoveEvent.clientX) -\n diffPosition,\n 0,\n ),\n mouseMoveEvent.altKey,\n );\n\n const updatedNote = {\n ...note,\n ...(noteDragMode() === \"move\" &&\n context.mode === \"keys\" && {\n midi: Math.round(\n 127 -\n verticalViewPort().calculatePosition(mouseMoveEvent.clientY),\n ),\n }),\n ...((noteDragMode() === \"move\" || noteDragMode() === \"trimStart\") && {\n ticks,\n }),\n ...(noteDragMode() === \"trimStart\" && {\n durationTicks: note.durationTicks + note.ticks - ticks,\n }),\n ...(noteDragMode() === \"trimEnd\" && {\n durationTicks: snapValueToGridIfEnabled(\n horizontalViewPort().calculatePosition(mouseMoveEvent.clientX) -\n note.ticks,\n mouseMoveEvent.altKey,\n ),\n }),\n };\n\n const previousTrackIndex = currentNoteTrackIndex();\n const previousNoteIndex = currentNoteIndex();\n\n const targetTrackIndex =\n context.mode === \"tracks\"\n ? Math.floor(\n verticalViewPort().calculatePosition(mouseMoveEvent.clientY),\n )\n : previousTrackIndex;\n\n if (targetTrackIndex === previousTrackIndex) {\n context.onNoteChange?.(\n previousTrackIndex,\n previousNoteIndex,\n updatedNote,\n );\n } else {\n batch(() => {\n if (context.onInsertNote) {\n context.onRemoveNote?.(previousTrackIndex, previousNoteIndex);\n const newNoteIndex = context.onInsertNote(\n targetTrackIndex,\n updatedNote,\n );\n\n setCurrentNoteTrackIndex(targetTrackIndex);\n setCurrentNoteIndex(newNoteIndex);\n }\n });\n }\n };\n const handleMouseUp = () => {\n setIsDragging(false);\n setCurrentNoteIndex(-1);\n setCurrentNoteTrackIndex(-1);\n\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }}\n style={{\n \"background-color\": `rgba(255,0,0, ${(128 + note.velocity) / 256})`,\n\n top: `${verticalVirtualDimensions().offset}px`,\n height: `${verticalVirtualDimensions().size}px`,\n\n left: `${horizontalDimensions().offset}px`,\n width: `${horizontalDimensions().size}px`,\n }}\n ></div>\n </Show>\n );\n }}\n </For>\n </Show>\n );\n }}\n </For>\n </div>\n );\n};\n\nexport default PianoRollNotes;\n","import { createEffect, createMemo, ParentProps, Ref } from \"solid-js\";\n\nimport { useViewPortDimension } from \"./ScrollZoomViewPort\";\n\nconst ScrollContainer = (props: ParentProps<{ ref?: Ref<HTMLDivElement> }>) => {\n let scrollContentRef: HTMLDivElement | undefined;\n\n const verticalViewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n\n const handleScroll = (event: UIEvent & { currentTarget: Element }) => {\n event.preventDefault();\n\n if (didUpdateScroll) {\n didUpdateScroll = false;\n return;\n }\n\n const maxVerticalPosition = verticalViewPort().calculateMaxPosition();\n const maxPosition = horizontalViewPort().calculateMaxPosition();\n\n const height = verticalViewPort().pixelSize;\n const width = horizontalViewPort().pixelSize;\n const { scrollTop, scrollLeft, scrollWidth, scrollHeight } = event.currentTarget;\n\n const scrollTopAmount = scrollTop / (scrollHeight - height);\n const scrollLeftAmount = scrollLeft / (scrollWidth - width);\n\n verticalViewPort().onPositionChange?.(maxVerticalPosition * scrollTopAmount);\n horizontalViewPort().onPositionChange?.(maxPosition * scrollLeftAmount);\n };\n\n const handleWheel = (event: WheelEvent) => {\n if (event.altKey) {\n event.preventDefault();\n\n if (Math.abs(event.deltaX) > Math.abs(event.deltaY)) {\n horizontalViewPort()?.onZoomChange?.(\n horizontalViewPort().zoom * (1 + event.deltaX / horizontalViewPort().pixelSize),\n );\n const maxPosition = horizontalViewPort().calculateMaxPosition();\n\n horizontalViewPort()?.onPositionChange?.(\n Math.min(maxPosition, horizontalViewPort()?.position),\n );\n } else {\n verticalViewPort()?.onZoomChange?.(\n verticalViewPort().zoom * (1 + event.deltaY / verticalViewPort().pixelSize),\n );\n const maxVerticalPosition = verticalViewPort().calculateMaxPosition();\n\n verticalViewPort()?.onPositionChange?.(\n Math.min(maxVerticalPosition, verticalViewPort()?.position),\n );\n }\n }\n };\n\n let didUpdateScroll = false;\n\n createEffect(() => {\n const maxVerticalPosition = verticalViewPort().calculateMaxPosition();\n const maxPosition = horizontalViewPort().calculateMaxPosition();\n\n const scrollTopAmount =\n maxVerticalPosition > 0 ? verticalViewPort().position / maxVerticalPosition : 0;\n const scrollLeftAmount = maxPosition > 0 ? horizontalViewPort().position / maxPosition : 0;\n\n const height = verticalViewPort().pixelSize;\n const width = horizontalViewPort().pixelSize;\n\n if (!scrollContentRef?.parentElement) return;\n\n const scrollDivHeight = verticalViewPort().zoom * verticalViewPort().pixelSize;\n const scrollTop = scrollTopAmount * (scrollDivHeight - height);\n\n const scrollDivWidth = horizontalViewPort().zoom * horizontalViewPort().pixelSize;\n const scrollLeft = scrollLeftAmount * (scrollDivWidth - width);\n\n didUpdateScroll = true;\n\n scrollContentRef.style.height = `${scrollDivHeight}px`;\n scrollContentRef.style.width = `${scrollDivWidth}px`;\n\n scrollContentRef.parentElement.scrollTo({\n left: scrollLeft,\n top: scrollTop,\n });\n });\n\n return (\n <div\n ref={props.ref}\n class=\"PianoRoll-Scroller\"\n style={{\n height: \"100%\",\n width: \"100%\",\n \"z-index\": 4,\n overflow: \"scroll\",\n \"pointer-events\": \"auto\",\n }}\n onScroll={handleScroll}\n onWheel={handleWheel}\n >\n <div ref={scrollContentRef}>\n <div\n style={{\n top: 0,\n left: 0,\n height: `${verticalViewPort().pixelSize}px`,\n width: `${horizontalViewPort().pixelSize}px`,\n position: \"sticky\",\n display: \"flex\",\n }}\n >\n <div\n style={{\n position: \"relative\",\n height: `${verticalViewPort().pixelSize}px`,\n width: `${horizontalViewPort().pixelSize}px`,\n }}\n >\n {props.children}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ScrollContainer;\n","import { createMemo, For, Index, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { blackKeys, keys } from \"./PianoRollKeys\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport styles from \"./PianoRollGrid.module.css\";\n\nconst PianoRollGrid = () => {\n const context = usePianoRollContext();\n\n const verticalViewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n\n const measureTicks = createMemo(() => context.ppq * 4);\n const selectedGridDivisorTicks = createMemo(() => measureTicks() / context.gridDivision);\n\n function calculateVisibleGridDivisorTicks(value: number): number {\n const visibleRange = horizontalViewPort().calculateVisibleRange();\n\n if (visibleRange <= 0) return 0;\n\n if (visibleRange / value > 100) {\n return calculateVisibleGridDivisorTicks(value * 2);\n }\n\n if (visibleRange / value < 30) {\n return calculateVisibleGridDivisorTicks(value / 2);\n }\n\n return value;\n }\n\n const gridDivisorTicks = createMemo(() =>\n calculateVisibleGridDivisorTicks(selectedGridDivisorTicks()),\n );\n\n const gridArray = createMemo(() => {\n const numberOfLines = Math.ceil(\n horizontalViewPort().calculateVisibleRange() / gridDivisorTicks() + 1,\n );\n const startIndex = Math.floor(context.position / gridDivisorTicks());\n\n return Array.from({ length: numberOfLines }).map((_, index) => ({\n index: index + startIndex,\n ticks: (index + startIndex) * gridDivisorTicks(),\n }));\n });\n\n return (\n <div class={styles.PianoRollGrid}>\n <Index each={gridArray()}>\n {(entry) => {\n const virtualDimensions = createMemo(() =>\n horizontalViewPort().calculatePixelDimensions(entry().ticks, gridDivisorTicks()),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollGrid-Time\"]}\n style={{\n background:\n Math.ceil((entry().index + 1 * selectedGridDivisorTicks()) / measureTicks()) %\n 2 ===\n 0\n ? \"#ddd\"\n : \"#ccc\",\n left: `${virtualDimensions().offset}px`,\n width: `${virtualDimensions().size}px`,\n \"border-left-color\":\n (entry().index * gridDivisorTicks()) % selectedGridDivisorTicks() === 0\n ? \"gray\"\n : \"#bbb\",\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n <Show when={context.mode === \"keys\"}>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n verticalViewPort().calculatePixelDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollGrid-Row\"]}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n width: \"100%\",\n \"background-color\": key().isBlack ? \"rgba(0,0,0,0.2)\" : \"none\",\n \"border-width\": `${\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12) ? \"0.1px\" : 0\n } 1px ${\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12) ? \"0.1px\" : 0\n } 0`,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </Show>\n\n <Show when={context.mode === \"tracks\"}>\n <For each={context.tracks}>\n {(track, index) => {\n const virtualDimensions = createMemo(() =>\n verticalViewPort().calculatePixelDimensions(index(), 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollGrid-Row\"]}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n width: \"100%\",\n \"background-color\": index() % 2 === 0 ? \"rgba(0,0,0,0.2)\" : \"none\",\n \"border-width\": 0,\n }}\n ></div>\n </Show>\n );\n }}\n </For>\n </Show>\n </div>\n );\n};\n\nexport default PianoRollGrid;\n","import { Accessor, createEffect, createSignal } from \"solid-js\";\n\nexport type ClientRect = Omit<DOMRect, \"toJSON\">;\n\nconst defaultRect: ClientRect = {\n left: 0,\n width: 0,\n top: 0,\n height: 0,\n bottom: 0,\n right: 0,\n x: 0,\n y: 0,\n};\n\nexport default function useBoundingClientRect(containerRef: Accessor<HTMLElement | undefined>) {\n const [boundingClientRect, setBoundingClientRect] = createSignal<ClientRect>(defaultRect);\n\n createEffect(() => {\n const container = containerRef();\n if (!container) return;\n\n const updateBoundingClientRect = () => {\n setBoundingClientRect(container.getBoundingClientRect() ?? defaultRect);\n };\n\n const resizeObserver = new ResizeObserver(updateBoundingClientRect);\n resizeObserver.observe(container);\n\n updateBoundingClientRect();\n\n return () => {\n resizeObserver.disconnect();\n };\n });\n\n return boundingClientRect;\n}\n","import { JSX } from \"solid-js/jsx-runtime\";\nimport { usePianoRollContext } from \"../PianoRollContext\";\n\nconst VerticalZoomControl = (props: JSX.IntrinsicElements[\"input\"]) => {\n const context = usePianoRollContext();\n\n return (\n <input\n min=\"1\"\n max=\"11\"\n step={0.01}\n {...props}\n value={context.verticalZoom}\n onInput={(event) => context.onVerticalZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n {...{ orient: \"vertical\" }}\n style={{\n width: \"16px\",\n ...({\n \"writing-mode\": \"bt-lr\" /* IE */,\n \"-webkit-appearance\": \"slider-vertical\" /* WebKit */,\n } as unknown as JSX.CSSProperties),\n }}\n />\n );\n};\n\nexport default VerticalZoomControl;\n","import { JSX } from \"solid-js/jsx-runtime\";\n\nimport { usePianoRollContext } from \"../PianoRollContext\";\n\nconst HorizontalZoomControl = (props: JSX.IntrinsicElements[\"input\"]) => {\n const context = usePianoRollContext();\n\n return (\n <input\n max=\"500\"\n min=\"1\"\n step={0.01}\n {...props}\n value={context.zoom}\n onInput={(event) => context.onZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n style={{\n \"margin-left\": \"50px\",\n \"margin-right\": \"16px\",\n ...(typeof props.style === \"object\" && props.style),\n }}\n />\n );\n};\n\nexport default HorizontalZoomControl;\n","import styles from \"./PianoRollTrackList.module.css\";\nimport { createMemo, Index, Show } from \"solid-js\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollTrackList = () => {\n const viewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const context = usePianoRollContext();\n\n return (\n <div class={styles.PianoRollTrackList}>\n <Index each={context.tracks}>\n {(track, index) => {\n const virtualDimensions = createMemo(() =>\n viewPort().calculatePixelDimensions(\n context.mode === \"tracks\" ? index : index * 8,\n context.mode === \"tracks\" ? 1 : 8,\n ),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n classList={{\n [styles[\"Track\"]]: true,\n }}\n title={track().name}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n background: index === context.selectedTrackIndex ? \"gray\" : \"lightgrey\",\n cursor: \"pointer\",\n }}\n onClick={() => context.onSelectedTrackIndexChange?.(index)}\n >\n {index} {track().name || \"[unnamed track]\"}\n </div>\n </Show>\n );\n }}\n </Index>\n </div>\n );\n};\n\nexport default PianoRollTrackList;\n","import styles from \"./PianoRoll.module.css\";\n\nimport { JSX, createSignal, createMemo, ParentProps, createEffect, Show } from \"solid-js\";\n\nimport { PianoRollContextProvider, splitContextProps } from \"./PianoRollContext\";\nimport PianoRollKeys from \"./PianoRollKeys\";\nimport PianoRollNotes from \"./PianoRollNotes\";\nimport ScrollContainer from \"./viewport/ScrollContainer\";\nimport PianoRollGrid from \"./PianoRollGrid\";\nimport { Note, Track } from \"./types\";\nimport { ScrollZoomViewPort as ScrollZoomViewPort } from \"./viewport/ScrollZoomViewPort\";\nimport useBoundingClientRect from \"./useBoundingClientRect\";\nimport { clamp } from \"./viewport/createViewPortDimension\";\nimport VerticalZoomControl from \"./viewport/VerticalZoomControl\";\nimport HorizontalZoomControl from \"./viewport/HorizontalZoomControl\";\nimport PianoRollTrackList from \"./PianoRollTrackList\";\n\nexport type GridDivision = 1 | 2 | 4 | 8 | 16 | 32 | 64;\n\nexport type PianoRollProps = {\n ppq: number;\n tracks: Track[];\n\n gridDivision: GridDivision;\n snapToGrid: boolean;\n\n mode: \"keys\" | \"tracks\";\n showAllTracks?: boolean;\n showTrackList?: boolean;\n\n selectedTrackIndex: number;\n\n verticalPosition: number;\n verticalZoom: number;\n\n position: number;\n duration: number;\n zoom: number;\n\n onVerticalZoomChange?: (zoom: number) => void;\n onVerticalPositionChange?: (zoom: number) => void;\n onZoomChange?: (zoom: number) => void;\n onPositionChange?: (zoom: number) => void;\n\n onNoteChange?: (trackIndex: number, noteIndex: number, note: Note) => void;\n onInsertNote?: (trackIndex: number, note: Note) => number;\n onRemoveNote?: (trackIndex: number, noteIndex: number) => void;\n\n onSelectedTrackIndexChange?: (trackIndex: number) => void;\n};\n\nconst PianoRoll = (allProps: ParentProps<PianoRollProps & JSX.IntrinsicElements[\"div\"]>) => {\n const [contextProps, divProps] = splitContextProps(allProps);\n\n const [scrollerRef, setScrollerRef] = createSignal<HTMLDivElement>();\n const clientRect = useBoundingClientRect(scrollerRef);\n\n const zoomFactor = 500;\n\n const minZoom = createMemo(() => 1 / (zoomFactor / clientRect().width));\n const maxZoom = createMemo(() => 500 * (zoomFactor / clientRect().width));\n\n const minVerticalZoom = createMemo(() => 1 / (zoomFactor / clientRect().height));\n const maxVerticalZoom = createMemo(() => 10 * (zoomFactor / clientRect().height));\n\n createEffect((isInitial) => {\n if (isInitial) return false;\n\n if (contextProps.mode === \"tracks\") {\n contextProps.onVerticalPositionChange?.(0);\n }\n }, true);\n\n return (\n <PianoRollContextProvider value={contextProps}>\n <div {...divProps} class={styles.PianoRoll}>\n <div class={styles.PianoRollContainer}>\n <ScrollZoomViewPort\n dimensions={{\n horizontal: () => ({\n pixelOffset: clientRect().left,\n pixelSize: clientRect().width,\n position: contextProps.position,\n range: contextProps.duration,\n zoom: contextProps.zoom * (zoomFactor / clientRect().width),\n onPositionChange: contextProps.onPositionChange,\n onZoomChange: (zoom) =>\n contextProps.onZoomChange?.(\n clamp(zoom / (zoomFactor / clientRect().width), minZoom(), maxZoom()),\n ),\n }),\n vertical: () => ({\n pixelOffset: clientRect().top,\n pixelSize: clientRect().height,\n position: contextProps.verticalPosition,\n range:\n contextProps.mode === \"keys\" ? 128 : Math.max(contextProps.tracks.length, 16),\n zoom: contextProps.verticalZoom * (zoomFactor / clientRect().height),\n onPositionChange: contextProps.onVerticalPositionChange,\n onZoomChange: (verticalZoom) =>\n contextProps.onVerticalZoomChange?.(\n clamp(\n verticalZoom / (zoomFactor / clientRect().height),\n minVerticalZoom(),\n maxVerticalZoom(),\n ),\n ),\n }),\n }}\n >\n <div style={{ display: \"flex\", width: \"20%\" }}>\n <Show when={allProps.showTrackList}>\n <PianoRollTrackList />\n </Show>\n <Show when={contextProps.mode === \"keys\"}>\n <PianoRollKeys />\n </Show>\n </div>\n\n <ScrollContainer ref={setScrollerRef}>\n {allProps.children}\n <PianoRollGrid />\n <PianoRollNotes />\n </ScrollContainer>\n\n <VerticalZoomControl min={minVerticalZoom()} max={maxVerticalZoom()} />\n </ScrollZoomViewPort>\n </div>\n <HorizontalZoomControl min={minZoom()} max={maxZoom()} />\n </div>\n </PianoRollContextProvider>\n );\n};\n\nexport default PianoRoll;\n","import { createEffect, createMemo, JSX, mergeProps, splitProps } from \"solid-js\";\nimport { clamp } from \"./viewport/createViewPortDimension\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\n\nconst PlayHead = (\n allProps: {\n playHeadPosition?: number;\n sync?: boolean;\n onPlayHeadPositionChange?: (playHeadPosition: number) => void;\n onPositionChange?: (position: number) => void;\n } & JSX.IntrinsicElements[\"div\"],\n) => {\n const propsWithDefauls = mergeProps({ playHeadPosition: 0, sync: false }, allProps);\n const [props, divProps] = splitProps(propsWithDefauls, [\n \"playHeadPosition\",\n \"sync\",\n \"onPlayHeadPositionChange\",\n \"onPositionChange\",\n ]);\n\n const viewPort = useViewPortDimension(\"horizontal\");\n createEffect(() => {\n if (!props.sync) return;\n\n const maxPosition = viewPort.range;\n const newPosition = clamp(\n props.playHeadPosition - viewPort.range / viewPort.zoom / 2,\n 0,\n maxPosition,\n );\n\n props.onPositionChange?.(newPosition);\n });\n\n const leftPosition = createMemo(() => viewPort.calculatePixelOffset(props.playHeadPosition));\n\n return (\n <div\n class=\"PlayHead\"\n {...divProps}\n style={{\n position: \"absolute\",\n height: \"100%\",\n width: \"2px\",\n left: `${leftPosition()}px`,\n \"background-color\": \"green\",\n cursor: \"pointer\",\n ...(typeof divProps.style === \"object\" && divProps.style),\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n const handleMouseMove = ({ movementX }: MouseEvent) => {\n const { parentElement } = event.currentTarget;\n if (!parentElement) return;\n\n const newPosition = viewPort.calculatePosition(leftPosition() + movementX);\n props.onPlayHeadPositionChange?.(newPosition);\n };\n const handleMouseUp = () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }}\n />\n );\n};\n\nexport default PlayHead;\n","import { createSignal } from \"solid-js\";\nimport { Note } from \"./types\";\n\nconst useNotes = () => {\n const [notes, onNotesChange] = createSignal<Note[]>([]);\n const onNoteChange = (index: number, note: Note) => {\n onNotesChange([...notes().slice(0, index), note, ...notes().splice(index + 1)]);\n };\n\n const onInsertNote = (note: Note) => {\n const index = Math.max(\n notes().findIndex(({ ticks }) => ticks > note.ticks),\n 0,\n );\n onNotesChange([...notes().slice(0, index), note, ...notes().splice(index)]);\n return index;\n };\n\n const onRemoveNote = (index: number) => {\n onNotesChange([...notes().slice(0, index), ...notes().splice(index + 1)]);\n };\n\n return {\n notes,\n onNotesChange,\n onNoteChange,\n onInsertNote,\n onRemoveNote,\n };\n};\n\nexport default useNotes;\n","import { createSignal } from \"solid-js\";\nimport { GridDivision } from \"./PianoRoll\";\n\nconst usePianoRoll = () => {\n const [ppq, onPpqChange] = createSignal(120);\n\n const [mode, onModeChange] = createSignal<\"keys\" | \"tracks\">(\"tracks\");\n\n const [position, onPositionChange] = createSignal(0);\n\n const [zoom, onZoomChange] = createSignal(10);\n const [verticalZoom, onVerticalZoomChange] = createSignal(5);\n const [verticalPosition, onVerticalPositionChange] = createSignal(44);\n\n const [gridDivision, onGridDivisionChange] = createSignal<GridDivision>(4);\n const [snapToGrid, onSnapToGridChange] = createSignal(true);\n\n const [duration, onDurationChange] = createSignal(0);\n\n return {\n ppq,\n onPpqChange,\n\n position,\n onPositionChange,\n\n zoom,\n onZoomChange,\n\n verticalPosition,\n onVerticalPositionChange,\n\n verticalZoom,\n onVerticalZoomChange,\n\n gridDivision,\n onGridDivisionChange,\n\n snapToGrid,\n onSnapToGridChange,\n\n mode,\n onModeChange,\n\n duration,\n onDurationChange,\n };\n};\n\nexport default usePianoRoll;\n"],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","PianoRollContext","createContext","PianoRollContextProvider","Provider","usePianoRollContext","context","useContext","Error","splitContextProps","allProps","splitProps","createViewPortDimension","getState","getStateWithFunctions","calculatePixelOffset","calculatePixelValue","calculatePosition","calculatePixelDimensions","calculateVisibleRange","calculateMaxPosition","isVisible","state","setState","createStore","createEffect","position","virtualSize","pixelSize","zoom","range","offset","percentX","pixelOffset","length","size","clamp","value","min","max","Math","ScrollZoomViewPort","props","viewPorts","Object","entries","dimensions","map","name","viewPortProps","parentViewPorts","ScrollZoomViewPortContext","_$createComponent","children","useViewPortDimension","viewPort","find","PianoRollKeys","createMemo","_tmpl$","_$insert","keys","key","virtualDimensions","number","_$effect","styles","isBlack","blackKeys","includes","_$classList","_$setAttribute","keyNames","Array","from","_","index","floor","PianoRollNotes","verticalViewPort","horizontalViewPort","gridDivisionTicks","ppq","gridDivision","snapValueToGridIfEnabled","altKey","snapToGrid","round","insertOrUpdateNote","event","clientX","existingNote","currentNote","midi","mode","clientY","targetTrackIndex","selectedTrackIndex","eventPositionTicks","velocity","ticks","durationTicks","note","onNoteChange","currentNoteTrackIndex","currentNoteIndex","onInsertNote","isDragging","setIsDragging","createSignal","noteDragMode","setNoteDragMode","setCurrentNoteIndex","setCurrentNoteTrackIndex","isMouseDown","setIsMouseDown","tracks","notes","getClasses","Note","undefined","batch","track","trackIndex","showAllTracks","noteIndex","verticalVirtualDimensions","horizontalDimensions","_$memo","stopPropagation","initialPosition","diffPosition","handleMouseMove","mouseMoveEvent","updatedNote","previousTrackIndex","previousNoteIndex","onRemoveNote","newNoteIndex","handleMouseUp","window","removeEventListener","addEventListener","relativeX","noteStartX","noteEndX","join","_$className","_$delegateEvents","ScrollContainer","scrollContentRef","handleScroll","preventDefault","didUpdateScroll","maxVerticalPosition","maxPosition","height","width","scrollTop","scrollLeft","scrollWidth","scrollHeight","currentTarget","scrollTopAmount","scrollLeftAmount","onPositionChange","handleWheel","abs","deltaX","deltaY","onZoomChange","parentElement","scrollDivHeight","scrollDivWidth","scrollTo","left","top","_$use","PianoRollGrid","measureTicks","selectedGridDivisorTicks","calculateVisibleGridDivisorTicks","visibleRange","gridDivisorTicks","gridArray","numberOfLines","ceil","startIndex","entry","defaultRect","bottom","right","x","y","useBoundingClientRect","containerRef","boundingClientRect","setBoundingClientRect","container","updateBoundingClientRect","getBoundingClientRect","resizeObserver","ResizeObserver","observe","disconnect","VerticalZoomControl","_$spread","_$mergeProps","verticalZoom","onVerticalZoomChange","valueAsNumber","orient","HorizontalZoomControl","PianoRollTrackList","_tmpl$2","onSelectedTrackIndexChange","PianoRoll","contextProps","divProps","scrollerRef","setScrollerRef","clientRect","zoomFactor","minZoom","maxZoom","minVerticalZoom","maxVerticalZoom","isInitial","onVerticalPositionChange","horizontal","duration","vertical","verticalPosition","showTrackList","PianoRollContainer","PlayHead","propsWithDefauls","mergeProps","playHeadPosition","sync","newPosition","leftPosition","cursor","movementX","onPlayHeadPositionChange","useNotes","onNotesChange","slice","splice","findIndex","usePianoRoll","onPpqChange","onModeChange","onGridDivisionChange","onSnapToGridChange","onDurationChange"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../node_modules/style-inject/dist/style-inject.es.js","../../src/PianoRollContext.tsx","../../src/viewport/createViewPortDimension.ts","../../src/viewport/ScrollZoomViewPort.tsx","../../src/PianoRollKeys.tsx","../../src/PianoRollNotes.tsx","../../src/viewport/ScrollContainer.tsx","../../src/PianoRollGrid.tsx","../../src/useBoundingClientRect.ts","../../src/viewport/VerticalZoomControl.tsx","../../src/viewport/HorizontalZoomControl.tsx","../../src/PianoRollTrackList.tsx","../../src/PianoRoll.tsx","../../src/PlayHead.tsx","../../src/useNotes.ts","../../src/usePianoRoll.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { createContext, JSX, splitProps, useContext } from \"solid-js\";\n\nimport { PianoRollProps } from \"./PianoRoll\";\n\nconst PianoRollContext = createContext<PianoRollProps>();\n\nexport const PianoRollContextProvider = PianoRollContext.Provider;\n\nexport const usePianoRollContext = () => {\n const context = useContext(PianoRollContext);\n\n if (!context) throw new Error(\"No PianoRollContext found\");\n\n return context;\n};\n\nexport const splitContextProps = (allProps: PianoRollProps & JSX.IntrinsicElements[\"div\"]) =>\n splitProps(allProps, [\n \"mode\",\n \"duration\",\n \"gridDivision\",\n \"tracks\",\n \"position\",\n \"ppq\",\n \"snapToGrid\",\n \"verticalPosition\",\n \"verticalZoom\",\n \"zoom\",\n \"onInsertNote\",\n \"onNoteChange\",\n \"onPositionChange\",\n \"onRemoveNote\",\n \"onVerticalPositionChange\",\n \"onVerticalZoomChange\",\n \"onZoomChange\",\n \"showAllTracks\",\n \"selectedTrackIndex\",\n \"onSelectedTrackIndexChange\",\n ]);\n","import { createEffect } from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\n\nexport type ViewPortDimension = ReturnType<typeof createViewPortDimension>;\nexport type ViewPortDimensionName = \"horizontal\" | \"vertical\";\nexport type ViewPortDimensionState = {\n position: number;\n range: number;\n\n pixelOffset: number;\n pixelSize: number;\n\n name: ViewPortDimensionName;\n\n onZoomChange?: (zoom: number) => void;\n onPositionChange?: (zoom: number) => void;\n\n zoom: number;\n};\n\nexport default function createViewPortDimension(getState: () => ViewPortDimensionState) {\n const getStateWithFunctions = () => ({\n ...getState(),\n calculatePixelOffset,\n calculatePixelValue,\n calculatePosition,\n calculatePixelDimensions,\n calculateVisibleRange,\n calculateMaxPosition,\n isVisible,\n });\n\n const [state, setState] = createStore(getStateWithFunctions());\n\n createEffect(() => setState(getStateWithFunctions()));\n\n function calculatePixelValue(position: number = state.position) {\n const virtualSize = state.pixelSize * state.zoom;\n return (position / state.range) * virtualSize;\n }\n\n function calculatePixelOffset(position: number) {\n return calculatePixelValue(position) - calculatePixelValue(state.position);\n }\n\n function calculatePosition(offset: number) {\n const percentX = (offset - state.pixelOffset) / state.pixelSize;\n const position = state.position + percentX * calculateVisibleRange();\n\n return position;\n }\n\n function calculateVisibleRange() {\n return state.range / state.zoom;\n }\n\n function calculateMaxPosition() {\n return state.range - state.range / state.zoom;\n }\n\n function calculatePixelDimensions(position: number, length: number) {\n const offset = calculatePixelOffset(position);\n const size = calculatePixelValue(length);\n\n return { offset, size };\n }\n\n function isVisible({ offset, size }: { offset: number; size: number }) {\n return offset + size > 0 && offset < state.pixelSize;\n }\n\n return state;\n}\n\nexport const clamp = (value: number, min: number, max: number) =>\n Math.max(min, Math.min(max, value));\n","import { createContext, ParentProps, useContext } from \"solid-js\";\nimport createViewPortDimension, {\n ViewPortDimension,\n ViewPortDimensionName,\n ViewPortDimensionState,\n} from \"./createViewPortDimension\";\n\nexport const ScrollZoomViewPort = (\n props: ParentProps<{\n dimensions: Record<ViewPortDimensionName, () => Omit<ViewPortDimensionState, \"name\">>;\n }>,\n) => {\n const viewPorts = Object.entries(props.dimensions).map(([name, viewPortProps]) =>\n createViewPortDimension(() => ({ name: name as ViewPortDimensionName, ...viewPortProps() })),\n );\n\n const parentViewPorts = useContext(ScrollZoomViewPortContext);\n\n return (\n <ScrollZoomViewPortContext.Provider value={[...parentViewPorts, ...viewPorts]}>\n {props.children}\n </ScrollZoomViewPortContext.Provider>\n );\n};\n\nconst ScrollZoomViewPortContext = createContext<ViewPortDimension[]>([]);\n\nexport const useViewPortDimension = (name: ViewPortDimensionName) => {\n const viewPorts = useContext(ScrollZoomViewPortContext);\n\n const viewPort = name\n ? viewPorts.find((viewPort) => viewPort.name === name)\n : viewPorts[viewPorts.length - 1];\n\n if (!viewPort) throw new Error(`ViewPort dimension \"${name}\" not found.`);\n\n return viewPort;\n};\n","import styles from \"./PianoRollKeys.module.css\";\nimport { createMemo, createSignal, Index, Show } from \"solid-js\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\n\nconst PianoRollKeys = () => {\n const viewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n\n return (\n <div class={styles.PianoRollKeys}>\n <Index each={keys}>\n {(key) => {\n const [isDown, setIsDown] = createSignal(false);\n\n const virtualDimensions = createMemo(() =>\n viewPort().calculatePixelDimensions(127 - key().number, 1),\n );\n\n const previousIsBlack = blackKeys.includes((key().number - 1) % 12);\n const nextIsBlack = blackKeys.includes((key().number + 1) % 12);\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n classList={{\n [styles[\"Key\"]]: true,\n [styles[\"black\"]]: key().isBlack,\n [styles[\"white\"]]: !key().isBlack,\n [styles[\"down\"]]: isDown(),\n }}\n onMouseDown={() => setIsDown(true)}\n onMouseUp={() => setIsDown(false)}\n title={key().name}\n data-index={key().number % 12}\n style={{\n top: `${\n virtualDimensions().offset -\n (!key().isBlack && nextIsBlack ? virtualDimensions().size / 2 : 0)\n }px`,\n height: `${\n virtualDimensions().size +\n (!key().isBlack && nextIsBlack ? virtualDimensions().size / 2 : 0) +\n (!key().isBlack && previousIsBlack ? virtualDimensions().size / 2 : 0)\n }px`,\n \"box-shadow\": [\n `0px 0px ${Math.min(virtualDimensions().size / 20, 1)}px ${Math.min(\n virtualDimensions().size / 50,\n 1,\n )}px rgba(0, 0, 0, 0.5) ${key().isBlack ? \"\" : \"inset\"}`,\n isDown() &&\n `0px 0px ${Math.min(virtualDimensions().size / 8, 2)}px ${Math.min(\n virtualDimensions().size / 20,\n 2,\n )}px rgba(0, 0, 0, 0.5) inset`,\n ]\n .filter((item) => !!item)\n .join(\", \"),\n }}\n >\n <Show when={key().isBlack && false}>\n <div\n class={styles[\"black-separator\"]}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size / 2 - 0.25}px`,\n }}\n ></div>\n </Show>\n </div>\n </Show>\n );\n }}\n </Index>\n </div>\n );\n};\n\nexport const blackKeys = [1, 3, 6, 8, 10];\nexport const keyNames = [\"C\", \"C#\", \"D\", \"D#\", \"E\", \"F\", \"F#\", \"G\", \"G#\", \"A\", \"A#\", \"B\"];\nexport const keys = Array.from({ length: 128 }).map((_, index) => ({\n number: index,\n name: `${keyNames[index % 12]} ${Math.floor(index / 12) - 2}`,\n isBlack: blackKeys.includes(index % 12),\n}));\n\nexport default PianoRollKeys;\n","import { batch, createMemo, createSignal, For, Ref, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport styles from \"./PianoRollNotes.module.scss\";\n\ntype NoteDragMode = \"trimStart\" | \"move\" | \"trimEnd\" | undefined;\n\nconst PianoRollNotes = (props: { ref?: Ref<HTMLDivElement | undefined> }) => {\n const context = usePianoRollContext();\n\n const verticalViewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n\n const gridDivisionTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n\n const snapValueToGridIfEnabled = (value: number, altKey: boolean) =>\n context.snapToGrid && !altKey\n ? Math.round(value / gridDivisionTicks()) * gridDivisionTicks()\n : value;\n\n const insertOrUpdateNote = (event: MouseEvent) => {\n const position = horizontalViewPort().calculatePosition(event.clientX);\n\n const existingNote = currentNote();\n\n const midi =\n context.mode === \"keys\"\n ? 127 - Math.floor(verticalViewPort().calculatePosition(event.clientY))\n : existingNote?.midi ?? 60;\n\n const targetTrackIndex =\n context.mode === \"tracks\"\n ? Math.floor(verticalViewPort().calculatePosition(event.clientY))\n : context.selectedTrackIndex ?? 0;\n\n const eventPositionTicks = Math.floor(position / gridDivisionTicks()) * gridDivisionTicks();\n const velocity = 127;\n\n const ticks = existingNote?.ticks ?? eventPositionTicks;\n const durationTicks = existingNote?.ticks\n ? eventPositionTicks - existingNote?.ticks\n : gridDivisionTicks();\n\n const note = { midi, ticks, durationTicks, velocity };\n\n if (existingNote) {\n context.onNoteChange?.(currentNoteTrackIndex(), currentNoteIndex(), note);\n return currentNoteIndex();\n } else {\n return context.onInsertNote?.(targetTrackIndex, note) ?? -1;\n }\n };\n\n const [isDragging, setIsDragging] = createSignal(false);\n const [noteDragMode, setNoteDragMode] = createSignal<NoteDragMode>();\n const [currentNoteIndex, setCurrentNoteIndex] = createSignal(-1);\n const [currentNoteTrackIndex, setCurrentNoteTrackIndex] = createSignal(-1);\n const [isMouseDown, setIsMouseDown] = createSignal(false);\n\n const currentNote = createMemo(\n () => context.tracks[currentNoteTrackIndex()]?.notes[currentNoteIndex()],\n );\n\n const getClasses = (noteDragMode: NoteDragMode) => {\n return noteDragMode ? [styles.Note, styles[noteDragMode]] : [styles.Note];\n };\n\n return (\n <div\n class={styles.PianoRollNotes}\n ref={props.ref}\n onMouseDown={(event) => {\n batch(() => {\n setIsMouseDown(true);\n const index = insertOrUpdateNote(event);\n\n setCurrentNoteTrackIndex(context.selectedTrackIndex ?? 0);\n setCurrentNoteIndex(index);\n });\n }}\n onMouseMove={(event) => {\n if (isDragging()) return;\n\n if (!isMouseDown()) {\n setNoteDragMode(undefined);\n return;\n }\n\n const index = insertOrUpdateNote(event);\n\n setCurrentNoteIndex(index);\n }}\n onMouseUp={(event) => {\n setIsMouseDown(false);\n if (!event.altKey) return;\n insertOrUpdateNote(event);\n }}\n onDblClick={(event) => {\n insertOrUpdateNote(event);\n }}\n onClick={(event) => {\n if (currentNote()) {\n setCurrentNoteIndex(-1);\n return;\n }\n if (!event.altKey) return;\n insertOrUpdateNote(event);\n }}\n >\n <For each={context.tracks}>\n {(track, trackIndex) => {\n return (\n <Show\n when={\n trackIndex() === context.selectedTrackIndex ||\n context.showAllTracks ||\n context.mode === \"tracks\"\n }\n >\n <For each={track.notes}>\n {(note, noteIndex) => {\n const verticalVirtualDimensions = createMemo(() =>\n verticalViewPort().calculatePixelDimensions(\n context.mode === \"keys\" ? 127 - note.midi : trackIndex(),\n 1,\n ),\n );\n\n const horizontalDimensions = createMemo(() =>\n horizontalViewPort().calculatePixelDimensions(note.ticks, note.durationTicks),\n );\n\n return (\n <Show\n when={\n verticalViewPort().isVisible(verticalVirtualDimensions()) &&\n horizontalViewPort().isVisible(horizontalDimensions())\n }\n >\n <div\n class={getClasses(noteDragMode()).join(\" \")}\n draggable={false}\n onMouseMove={(event) => {\n if (isDragging()) return;\n event.stopPropagation();\n\n const relativeX = horizontalViewPort().calculatePixelValue(\n horizontalViewPort().calculatePosition(event.clientX),\n );\n const noteStartX = horizontalViewPort().calculatePixelValue(note.ticks);\n const noteEndX = horizontalViewPort().calculatePixelValue(\n note.ticks + note.durationTicks,\n );\n\n setNoteDragMode(\n relativeX - noteStartX < 3\n ? \"trimStart\"\n : noteEndX - relativeX < 3\n ? \"trimEnd\"\n : \"move\",\n );\n }}\n onDblClick={(event) => {\n event.stopPropagation();\n context.onRemoveNote?.(trackIndex(), noteIndex());\n }}\n onMouseDown={(event) => {\n event.stopPropagation();\n\n setIsDragging(true);\n\n setCurrentNoteIndex(noteIndex());\n setCurrentNoteTrackIndex(trackIndex());\n\n const initialPosition = horizontalViewPort().calculatePosition(\n event.clientX,\n );\n const diffPosition = initialPosition - note.ticks;\n\n const handleMouseMove = (mouseMoveEvent: MouseEvent) => {\n const note = currentNote();\n if (!note) return;\n\n const ticks = snapValueToGridIfEnabled(\n Math.max(\n horizontalViewPort().calculatePosition(mouseMoveEvent.clientX) -\n diffPosition,\n 0,\n ),\n mouseMoveEvent.altKey,\n );\n\n const updatedNote = {\n ...note,\n ...(noteDragMode() === \"move\" &&\n context.mode === \"keys\" && {\n midi: Math.round(\n 127 -\n verticalViewPort().calculatePosition(mouseMoveEvent.clientY),\n ),\n }),\n ...((noteDragMode() === \"move\" || noteDragMode() === \"trimStart\") && {\n ticks,\n }),\n ...(noteDragMode() === \"trimStart\" && {\n durationTicks: note.durationTicks + note.ticks - ticks,\n }),\n ...(noteDragMode() === \"trimEnd\" && {\n durationTicks: snapValueToGridIfEnabled(\n horizontalViewPort().calculatePosition(mouseMoveEvent.clientX) -\n note.ticks,\n mouseMoveEvent.altKey,\n ),\n }),\n };\n\n const previousTrackIndex = currentNoteTrackIndex();\n const previousNoteIndex = currentNoteIndex();\n\n const targetTrackIndex =\n context.mode === \"tracks\"\n ? Math.floor(\n verticalViewPort().calculatePosition(mouseMoveEvent.clientY),\n )\n : previousTrackIndex;\n\n if (targetTrackIndex === previousTrackIndex) {\n context.onNoteChange?.(\n previousTrackIndex,\n previousNoteIndex,\n updatedNote,\n );\n } else {\n batch(() => {\n if (context.onInsertNote) {\n context.onRemoveNote?.(previousTrackIndex, previousNoteIndex);\n const newNoteIndex = context.onInsertNote(\n targetTrackIndex,\n updatedNote,\n );\n\n setCurrentNoteTrackIndex(targetTrackIndex);\n setCurrentNoteIndex(newNoteIndex);\n }\n });\n }\n };\n const handleMouseUp = () => {\n setIsDragging(false);\n setCurrentNoteIndex(-1);\n setCurrentNoteTrackIndex(-1);\n\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }}\n style={{\n \"background-color\": `rgba(255,0,0, ${(128 + note.velocity) / 256})`,\n\n top: `${verticalVirtualDimensions().offset}px`,\n height: `${verticalVirtualDimensions().size}px`,\n\n left: `${horizontalDimensions().offset}px`,\n width: `${horizontalDimensions().size}px`,\n }}\n ></div>\n </Show>\n );\n }}\n </For>\n </Show>\n );\n }}\n </For>\n </div>\n );\n};\n\nexport default PianoRollNotes;\n","import { createEffect, createMemo, ParentProps, Ref } from \"solid-js\";\n\nimport { useViewPortDimension } from \"./ScrollZoomViewPort\";\n\nconst ScrollContainer = (props: ParentProps<{ ref?: Ref<HTMLDivElement> }>) => {\n let scrollContentRef: HTMLDivElement | undefined;\n\n const verticalViewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n\n const handleScroll = (event: UIEvent & { currentTarget: Element }) => {\n event.preventDefault();\n\n if (didUpdateScroll) {\n didUpdateScroll = false;\n return;\n }\n\n const maxVerticalPosition = verticalViewPort().calculateMaxPosition();\n const maxPosition = horizontalViewPort().calculateMaxPosition();\n\n const height = verticalViewPort().pixelSize;\n const width = horizontalViewPort().pixelSize;\n const { scrollTop, scrollLeft, scrollWidth, scrollHeight } = event.currentTarget;\n\n const scrollTopAmount = scrollTop / (scrollHeight - height);\n const scrollLeftAmount = scrollLeft / (scrollWidth - width);\n\n verticalViewPort().onPositionChange?.(maxVerticalPosition * scrollTopAmount);\n horizontalViewPort().onPositionChange?.(maxPosition * scrollLeftAmount);\n };\n\n const handleWheel = (event: WheelEvent) => {\n if (event.altKey) {\n event.preventDefault();\n\n if (Math.abs(event.deltaX) > Math.abs(event.deltaY)) {\n horizontalViewPort()?.onZoomChange?.(\n horizontalViewPort().zoom * (1 + event.deltaX / horizontalViewPort().pixelSize),\n );\n const maxPosition = horizontalViewPort().calculateMaxPosition();\n\n horizontalViewPort()?.onPositionChange?.(\n Math.min(maxPosition, horizontalViewPort()?.position),\n );\n } else {\n verticalViewPort()?.onZoomChange?.(\n verticalViewPort().zoom * (1 + event.deltaY / verticalViewPort().pixelSize),\n );\n const maxVerticalPosition = verticalViewPort().calculateMaxPosition();\n\n verticalViewPort()?.onPositionChange?.(\n Math.min(maxVerticalPosition, verticalViewPort()?.position),\n );\n }\n }\n };\n\n let didUpdateScroll = false;\n\n createEffect(() => {\n const maxVerticalPosition = verticalViewPort().calculateMaxPosition();\n const maxPosition = horizontalViewPort().calculateMaxPosition();\n\n const scrollTopAmount =\n maxVerticalPosition > 0 ? verticalViewPort().position / maxVerticalPosition : 0;\n const scrollLeftAmount = maxPosition > 0 ? horizontalViewPort().position / maxPosition : 0;\n\n const height = verticalViewPort().pixelSize;\n const width = horizontalViewPort().pixelSize;\n\n if (!scrollContentRef?.parentElement) return;\n\n const scrollDivHeight = verticalViewPort().zoom * verticalViewPort().pixelSize;\n const scrollTop = scrollTopAmount * (scrollDivHeight - height);\n\n const scrollDivWidth = horizontalViewPort().zoom * horizontalViewPort().pixelSize;\n const scrollLeft = scrollLeftAmount * (scrollDivWidth - width);\n\n didUpdateScroll = true;\n\n scrollContentRef.style.height = `${scrollDivHeight}px`;\n scrollContentRef.style.width = `${scrollDivWidth}px`;\n\n scrollContentRef.parentElement.scrollTo({\n left: scrollLeft,\n top: scrollTop,\n });\n });\n\n return (\n <div\n ref={props.ref}\n class=\"PianoRoll-Scroller\"\n style={{\n height: \"100%\",\n width: \"100%\",\n \"z-index\": 4,\n overflow: \"scroll\",\n \"pointer-events\": \"auto\",\n }}\n onScroll={handleScroll}\n onWheel={handleWheel}\n >\n <div ref={scrollContentRef}>\n <div\n style={{\n top: 0,\n left: 0,\n height: `${verticalViewPort().pixelSize}px`,\n width: `${horizontalViewPort().pixelSize}px`,\n position: \"sticky\",\n display: \"flex\",\n }}\n >\n <div\n style={{\n position: \"relative\",\n height: `${verticalViewPort().pixelSize}px`,\n width: `${horizontalViewPort().pixelSize}px`,\n }}\n >\n {props.children}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default ScrollContainer;\n","import { createMemo, For, Index, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { blackKeys, keys } from \"./PianoRollKeys\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport styles from \"./PianoRollGrid.module.css\";\n\nconst PianoRollGrid = () => {\n const context = usePianoRollContext();\n\n const verticalViewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n\n const measureTicks = createMemo(() => context.ppq * 4);\n const selectedGridDivisorTicks = createMemo(() => measureTicks() / context.gridDivision);\n\n function calculateVisibleGridDivisorTicks(value: number): number {\n const visibleRange = horizontalViewPort().calculateVisibleRange();\n\n if (visibleRange <= 0) return 0;\n\n if (visibleRange / value > 100) {\n return calculateVisibleGridDivisorTicks(value * 2);\n }\n\n if (visibleRange / value < 30) {\n return calculateVisibleGridDivisorTicks(value / 2);\n }\n\n return value;\n }\n\n const gridDivisorTicks = createMemo(() =>\n calculateVisibleGridDivisorTicks(selectedGridDivisorTicks()),\n );\n\n const gridArray = createMemo(() => {\n const numberOfLines = Math.ceil(\n horizontalViewPort().calculateVisibleRange() / gridDivisorTicks() + 1,\n );\n const startIndex = Math.floor(context.position / gridDivisorTicks());\n\n return Array.from({ length: numberOfLines }).map((_, index) => ({\n index: index + startIndex,\n ticks: (index + startIndex) * gridDivisorTicks(),\n }));\n });\n\n return (\n <div class={styles.PianoRollGrid}>\n <Index each={gridArray()}>\n {(entry) => {\n const virtualDimensions = createMemo(() =>\n horizontalViewPort().calculatePixelDimensions(entry().ticks, gridDivisorTicks()),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollGrid-Time\"]}\n style={{\n background:\n Math.ceil((entry().index + 1 * selectedGridDivisorTicks()) / measureTicks()) %\n 2 ===\n 0\n ? \"#ddd\"\n : \"#ccc\",\n left: `${virtualDimensions().offset}px`,\n width: `${virtualDimensions().size}px`,\n \"border-left-color\":\n (entry().index * gridDivisorTicks()) % selectedGridDivisorTicks() === 0\n ? \"gray\"\n : \"#bbb\",\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n <Show when={context.mode === \"keys\"}>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n verticalViewPort().calculatePixelDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollGrid-Row\"]}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n width: \"100%\",\n \"background-color\": key().isBlack ? \"rgba(0,0,0,0.2)\" : \"none\",\n \"border-width\": `${\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12) ? \"0.1px\" : 0\n } 1px ${\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12) ? \"0.1px\" : 0\n } 0`,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </Show>\n\n <Show when={context.mode === \"tracks\"}>\n <For each={context.tracks}>\n {(track, index) => {\n const virtualDimensions = createMemo(() =>\n verticalViewPort().calculatePixelDimensions(index(), 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollGrid-Row\"]}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n width: \"100%\",\n \"background-color\": index() % 2 === 0 ? \"rgba(0,0,0,0.2)\" : \"none\",\n \"border-width\": 0,\n }}\n ></div>\n </Show>\n );\n }}\n </For>\n </Show>\n </div>\n );\n};\n\nexport default PianoRollGrid;\n","import { Accessor, createEffect, createSignal } from \"solid-js\";\n\nexport type ClientRect = Omit<DOMRect, \"toJSON\">;\n\nconst defaultRect: ClientRect = {\n left: 0,\n width: 0,\n top: 0,\n height: 0,\n bottom: 0,\n right: 0,\n x: 0,\n y: 0,\n};\n\nexport default function useBoundingClientRect(containerRef: Accessor<HTMLElement | undefined>) {\n const [boundingClientRect, setBoundingClientRect] = createSignal<ClientRect>(defaultRect);\n\n createEffect(() => {\n const container = containerRef();\n if (!container) return;\n\n const updateBoundingClientRect = () => {\n setBoundingClientRect(container.getBoundingClientRect() ?? defaultRect);\n };\n\n const resizeObserver = new ResizeObserver(updateBoundingClientRect);\n resizeObserver.observe(container);\n\n updateBoundingClientRect();\n\n return () => {\n resizeObserver.disconnect();\n };\n });\n\n return boundingClientRect;\n}\n","import { JSX } from \"solid-js/jsx-runtime\";\nimport { usePianoRollContext } from \"../PianoRollContext\";\n\nconst VerticalZoomControl = (props: JSX.IntrinsicElements[\"input\"]) => {\n const context = usePianoRollContext();\n\n return (\n <input\n min=\"1\"\n max=\"11\"\n step={0.01}\n {...props}\n value={context.verticalZoom}\n onInput={(event) => context.onVerticalZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n {...{ orient: \"vertical\" }}\n style={{\n width: \"16px\",\n ...({\n \"writing-mode\": \"bt-lr\" /* IE */,\n \"-webkit-appearance\": \"slider-vertical\" /* WebKit */,\n } as unknown as JSX.CSSProperties),\n }}\n />\n );\n};\n\nexport default VerticalZoomControl;\n","import { JSX } from \"solid-js/jsx-runtime\";\n\nimport { usePianoRollContext } from \"../PianoRollContext\";\n\nconst HorizontalZoomControl = (props: JSX.IntrinsicElements[\"input\"]) => {\n const context = usePianoRollContext();\n\n return (\n <input\n max=\"500\"\n min=\"1\"\n step={0.01}\n {...props}\n value={context.zoom}\n onInput={(event) => context.onZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n style={{\n \"margin-left\": \"50px\",\n \"margin-right\": \"16px\",\n ...(typeof props.style === \"object\" && props.style),\n }}\n />\n );\n};\n\nexport default HorizontalZoomControl;\n","import styles from \"./PianoRollTrackList.module.css\";\nimport { createMemo, Index, Show } from \"solid-js\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollTrackList = () => {\n const viewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const context = usePianoRollContext();\n\n return (\n <div class={styles.PianoRollTrackList}>\n <Index each={context.tracks}>\n {(track, index) => {\n const virtualDimensions = createMemo(() =>\n viewPort().calculatePixelDimensions(\n context.mode === \"tracks\" ? index : index * 8,\n context.mode === \"tracks\" ? 1 : 8,\n ),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n classList={{\n [styles[\"Track\"]]: true,\n }}\n title={track().name}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n background: index === context.selectedTrackIndex ? \"gray\" : \"lightgrey\",\n cursor: \"pointer\",\n }}\n onClick={() => context.onSelectedTrackIndexChange?.(index)}\n >\n {index} {track().name || \"[unnamed track]\"}\n </div>\n </Show>\n );\n }}\n </Index>\n </div>\n );\n};\n\nexport default PianoRollTrackList;\n","import styles from \"./PianoRoll.module.css\";\n\nimport { JSX, createSignal, createMemo, ParentProps, createEffect, Show } from \"solid-js\";\n\nimport { PianoRollContextProvider, splitContextProps } from \"./PianoRollContext\";\nimport PianoRollKeys from \"./PianoRollKeys\";\nimport PianoRollNotes from \"./PianoRollNotes\";\nimport ScrollContainer from \"./viewport/ScrollContainer\";\nimport PianoRollGrid from \"./PianoRollGrid\";\nimport { Note, Track } from \"./types\";\nimport { ScrollZoomViewPort as ScrollZoomViewPort } from \"./viewport/ScrollZoomViewPort\";\nimport useBoundingClientRect from \"./useBoundingClientRect\";\nimport { clamp } from \"./viewport/createViewPortDimension\";\nimport VerticalZoomControl from \"./viewport/VerticalZoomControl\";\nimport HorizontalZoomControl from \"./viewport/HorizontalZoomControl\";\nimport PianoRollTrackList from \"./PianoRollTrackList\";\n\nexport type GridDivision = 1 | 2 | 4 | 8 | 16 | 32 | 64;\n\nexport type PianoRollProps = {\n ppq: number;\n tracks: Track[];\n\n gridDivision: GridDivision;\n snapToGrid: boolean;\n\n mode: \"keys\" | \"tracks\";\n showAllTracks?: boolean;\n showTrackList?: boolean;\n\n selectedTrackIndex: number;\n\n verticalPosition: number;\n verticalZoom: number;\n\n position: number;\n duration: number;\n zoom: number;\n\n onVerticalZoomChange?: (zoom: number) => void;\n onVerticalPositionChange?: (zoom: number) => void;\n onZoomChange?: (zoom: number) => void;\n onPositionChange?: (zoom: number) => void;\n\n onNoteChange?: (trackIndex: number, noteIndex: number, note: Note) => void;\n onInsertNote?: (trackIndex: number, note: Note) => number;\n onRemoveNote?: (trackIndex: number, noteIndex: number) => void;\n\n onSelectedTrackIndexChange?: (trackIndex: number) => void;\n};\n\nconst PianoRoll = (allProps: ParentProps<PianoRollProps & JSX.IntrinsicElements[\"div\"]>) => {\n const [contextProps, divProps] = splitContextProps(allProps);\n\n const [scrollerRef, setScrollerRef] = createSignal<HTMLDivElement>();\n const clientRect = useBoundingClientRect(scrollerRef);\n\n const zoomFactor = 500;\n\n const minZoom = createMemo(() => 1 / (zoomFactor / clientRect().width));\n const maxZoom = createMemo(() => 500 * (zoomFactor / clientRect().width));\n\n const minVerticalZoom = createMemo(() => 1 / (zoomFactor / clientRect().height));\n const maxVerticalZoom = createMemo(() => 10 * (zoomFactor / clientRect().height));\n\n createEffect((isInitial) => {\n if (isInitial) return false;\n\n if (contextProps.mode === \"tracks\") {\n contextProps.onVerticalPositionChange?.(0);\n }\n }, true);\n\n return (\n <PianoRollContextProvider value={contextProps}>\n <div {...divProps} class={styles.PianoRoll}>\n <div class={styles.PianoRollContainer}>\n <ScrollZoomViewPort\n dimensions={{\n horizontal: () => ({\n pixelOffset: clientRect().left,\n pixelSize: clientRect().width,\n position: contextProps.position,\n range: contextProps.duration,\n zoom: contextProps.zoom * (zoomFactor / clientRect().width),\n onPositionChange: contextProps.onPositionChange,\n onZoomChange: (zoom) =>\n contextProps.onZoomChange?.(\n clamp(zoom / (zoomFactor / clientRect().width), minZoom(), maxZoom()),\n ),\n }),\n vertical: () => ({\n pixelOffset: clientRect().top,\n pixelSize: clientRect().height,\n position: contextProps.verticalPosition,\n range:\n contextProps.mode === \"keys\" ? 128 : Math.max(contextProps.tracks.length, 16),\n zoom: contextProps.verticalZoom * (zoomFactor / clientRect().height),\n onPositionChange: contextProps.onVerticalPositionChange,\n onZoomChange: (verticalZoom) =>\n contextProps.onVerticalZoomChange?.(\n clamp(\n verticalZoom / (zoomFactor / clientRect().height),\n minVerticalZoom(),\n maxVerticalZoom(),\n ),\n ),\n }),\n }}\n >\n <div style={{ display: \"flex\", width: \"20%\" }}>\n <Show when={allProps.showTrackList}>\n <PianoRollTrackList />\n </Show>\n <Show when={contextProps.mode === \"keys\"}>\n <PianoRollKeys />\n </Show>\n </div>\n\n <ScrollContainer ref={setScrollerRef}>\n {allProps.children}\n <PianoRollGrid />\n <PianoRollNotes />\n </ScrollContainer>\n\n <VerticalZoomControl min={minVerticalZoom()} max={maxVerticalZoom()} />\n </ScrollZoomViewPort>\n </div>\n <HorizontalZoomControl min={minZoom()} max={maxZoom()} />\n </div>\n </PianoRollContextProvider>\n );\n};\n\nexport default PianoRoll;\n","import { createEffect, createMemo, JSX, mergeProps, splitProps } from \"solid-js\";\nimport { clamp } from \"./viewport/createViewPortDimension\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\n\nconst PlayHead = (\n allProps: {\n playHeadPosition?: number;\n sync?: boolean;\n onPlayHeadPositionChange?: (playHeadPosition: number) => void;\n onPositionChange?: (position: number) => void;\n } & JSX.IntrinsicElements[\"div\"],\n) => {\n const propsWithDefauls = mergeProps({ playHeadPosition: 0, sync: false }, allProps);\n const [props, divProps] = splitProps(propsWithDefauls, [\n \"playHeadPosition\",\n \"sync\",\n \"onPlayHeadPositionChange\",\n \"onPositionChange\",\n ]);\n\n const viewPort = useViewPortDimension(\"horizontal\");\n createEffect(() => {\n if (!props.sync) return;\n\n const maxPosition = viewPort.range;\n const newPosition = clamp(\n props.playHeadPosition - viewPort.range / viewPort.zoom / 2,\n 0,\n maxPosition,\n );\n\n props.onPositionChange?.(newPosition);\n });\n\n const leftPosition = createMemo(() => viewPort.calculatePixelOffset(props.playHeadPosition));\n\n return (\n <div\n class=\"PlayHead\"\n {...divProps}\n style={{\n position: \"absolute\",\n height: \"100%\",\n width: \"2px\",\n left: `${leftPosition()}px`,\n \"background-color\": \"green\",\n cursor: \"pointer\",\n ...(typeof divProps.style === \"object\" && divProps.style),\n }}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n const handleMouseMove = ({ movementX }: MouseEvent) => {\n const { parentElement } = event.currentTarget;\n if (!parentElement) return;\n\n const newPosition = viewPort.calculatePosition(leftPosition() + movementX);\n props.onPlayHeadPositionChange?.(newPosition);\n };\n const handleMouseUp = () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }}\n />\n );\n};\n\nexport default PlayHead;\n","import { createSignal } from \"solid-js\";\nimport { Note } from \"./types\";\n\nconst useNotes = () => {\n const [notes, onNotesChange] = createSignal<Note[]>([]);\n const onNoteChange = (index: number, note: Note) => {\n onNotesChange([...notes().slice(0, index), note, ...notes().splice(index + 1)]);\n };\n\n const onInsertNote = (note: Note) => {\n const index = Math.max(\n notes().findIndex(({ ticks }) => ticks > note.ticks),\n 0,\n );\n onNotesChange([...notes().slice(0, index), note, ...notes().splice(index)]);\n return index;\n };\n\n const onRemoveNote = (index: number) => {\n onNotesChange([...notes().slice(0, index), ...notes().splice(index + 1)]);\n };\n\n return {\n notes,\n onNotesChange,\n onNoteChange,\n onInsertNote,\n onRemoveNote,\n };\n};\n\nexport default useNotes;\n","import { createSignal } from \"solid-js\";\nimport { GridDivision } from \"./PianoRoll\";\n\nconst usePianoRoll = () => {\n const [ppq, onPpqChange] = createSignal(120);\n\n const [mode, onModeChange] = createSignal<\"keys\" | \"tracks\">(\"tracks\");\n\n const [position, onPositionChange] = createSignal(0);\n\n const [zoom, onZoomChange] = createSignal(10);\n const [verticalZoom, onVerticalZoomChange] = createSignal(5);\n const [verticalPosition, onVerticalPositionChange] = createSignal(44);\n\n const [gridDivision, onGridDivisionChange] = createSignal<GridDivision>(4);\n const [snapToGrid, onSnapToGridChange] = createSignal(true);\n\n const [duration, onDurationChange] = createSignal(0);\n\n return {\n ppq,\n onPpqChange,\n\n position,\n onPositionChange,\n\n zoom,\n onZoomChange,\n\n verticalPosition,\n onVerticalPositionChange,\n\n verticalZoom,\n onVerticalZoomChange,\n\n gridDivision,\n onGridDivisionChange,\n\n snapToGrid,\n onSnapToGridChange,\n\n mode,\n onModeChange,\n\n duration,\n onDurationChange,\n };\n};\n\nexport default usePianoRoll;\n"],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","PianoRollContext","createContext","PianoRollContextProvider","Provider","usePianoRollContext","context","useContext","Error","splitContextProps","allProps","splitProps","createViewPortDimension","getState","getStateWithFunctions","calculatePixelOffset","calculatePixelValue","calculatePosition","calculatePixelDimensions","calculateVisibleRange","calculateMaxPosition","isVisible","state","setState","createStore","createEffect","position","virtualSize","pixelSize","zoom","range","offset","percentX","pixelOffset","length","size","clamp","value","min","max","Math","ScrollZoomViewPort","props","viewPorts","Object","entries","dimensions","map","name","viewPortProps","parentViewPorts","ScrollZoomViewPortContext","_$createComponent","children","useViewPortDimension","viewPort","find","PianoRollKeys","createMemo","_tmpl$","_$insert","keys","key","isDown","setIsDown","createSignal","virtualDimensions","number","previousIsBlack","blackKeys","includes","nextIsBlack","isBlack","_$effect","styles","_$className","filter","item","join","_$classList","_$setAttribute","keyNames","Array","from","_","index","floor","_$delegateEvents","PianoRollNotes","verticalViewPort","horizontalViewPort","gridDivisionTicks","ppq","gridDivision","snapValueToGridIfEnabled","altKey","snapToGrid","round","insertOrUpdateNote","event","clientX","existingNote","currentNote","midi","mode","clientY","targetTrackIndex","selectedTrackIndex","eventPositionTicks","velocity","ticks","durationTicks","note","onNoteChange","currentNoteTrackIndex","currentNoteIndex","onInsertNote","isDragging","setIsDragging","noteDragMode","setNoteDragMode","setCurrentNoteIndex","setCurrentNoteTrackIndex","isMouseDown","setIsMouseDown","tracks","notes","getClasses","Note","undefined","batch","track","trackIndex","showAllTracks","noteIndex","verticalVirtualDimensions","horizontalDimensions","_$memo","stopPropagation","initialPosition","diffPosition","handleMouseMove","mouseMoveEvent","updatedNote","previousTrackIndex","previousNoteIndex","onRemoveNote","newNoteIndex","handleMouseUp","window","removeEventListener","addEventListener","relativeX","noteStartX","noteEndX","ScrollContainer","scrollContentRef","handleScroll","preventDefault","didUpdateScroll","maxVerticalPosition","maxPosition","height","width","scrollTop","scrollLeft","scrollWidth","scrollHeight","currentTarget","scrollTopAmount","scrollLeftAmount","onPositionChange","handleWheel","abs","deltaX","deltaY","onZoomChange","parentElement","scrollDivHeight","scrollDivWidth","scrollTo","left","top","_$use","PianoRollGrid","measureTicks","selectedGridDivisorTicks","calculateVisibleGridDivisorTicks","visibleRange","gridDivisorTicks","gridArray","numberOfLines","ceil","startIndex","entry","defaultRect","bottom","right","x","y","useBoundingClientRect","containerRef","boundingClientRect","setBoundingClientRect","container","updateBoundingClientRect","getBoundingClientRect","resizeObserver","ResizeObserver","observe","disconnect","VerticalZoomControl","_$spread","_$mergeProps","verticalZoom","onVerticalZoomChange","valueAsNumber","orient","HorizontalZoomControl","PianoRollTrackList","_tmpl$2","onSelectedTrackIndexChange","PianoRoll","contextProps","divProps","scrollerRef","setScrollerRef","clientRect","zoomFactor","minZoom","maxZoom","minVerticalZoom","maxVerticalZoom","isInitial","onVerticalPositionChange","horizontal","duration","vertical","verticalPosition","showTrackList","PianoRollContainer","PlayHead","propsWithDefauls","mergeProps","playHeadPosition","sync","newPosition","leftPosition","cursor","movementX","onPlayHeadPositionChange","useNotes","onNotesChange","slice","splice","findIndex","usePianoRoll","onPpqChange","onModeChange","onGridDivisionChange","onSnapToGridChange","onDurationChange"],"mappings":"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"}
@@ -1,23 +1,42 @@
1
1
  import styles from "./PianoRollKeys.module.css";
2
- import { createMemo, Index, Show } from "solid-js";
2
+ import { createMemo, createSignal, Index, Show } from "solid-js";
3
3
  import { useViewPortDimension } from "./viewport/ScrollZoomViewPort";
4
4
  const PianoRollKeys = () => {
5
5
  const viewPort = createMemo(() => useViewPortDimension("vertical"));
6
6
  return (<div class={styles.PianoRollKeys}>
7
7
  <Index each={keys}>
8
8
  {(key) => {
9
+ const [isDown, setIsDown] = createSignal(false);
9
10
  const virtualDimensions = createMemo(() => viewPort().calculatePixelDimensions(127 - key().number, 1));
11
+ const previousIsBlack = blackKeys.includes((key().number - 1) % 12);
12
+ const nextIsBlack = blackKeys.includes((key().number + 1) % 12);
10
13
  return (<Show when={virtualDimensions().size > 0}>
11
14
  <div classList={{
12
15
  [styles["Key"]]: true,
13
16
  [styles["black"]]: key().isBlack,
14
17
  [styles["white"]]: !key().isBlack,
15
- [styles["whiteAndNextIsWhite"]]: !key().isBlack && !blackKeys.includes((key().number + 1) % 12),
16
- [styles["whiteAndPreviousIsWhite"]]: !key().isBlack && !blackKeys.includes((key().number - 1) % 12),
17
- }} title={key().name} data-index={key().number % 12} style={{
18
+ [styles["down"]]: isDown(),
19
+ }} onMouseDown={() => setIsDown(true)} onMouseUp={() => setIsDown(false)} title={key().name} data-index={key().number % 12} style={{
20
+ top: `${virtualDimensions().offset -
21
+ (!key().isBlack && nextIsBlack ? virtualDimensions().size / 2 : 0)}px`,
22
+ height: `${virtualDimensions().size +
23
+ (!key().isBlack && nextIsBlack ? virtualDimensions().size / 2 : 0) +
24
+ (!key().isBlack && previousIsBlack ? virtualDimensions().size / 2 : 0)}px`,
25
+ "box-shadow": [
26
+ `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"}`,
27
+ isDown() &&
28
+ `0px 0px ${Math.min(virtualDimensions().size / 8, 2)}px ${Math.min(virtualDimensions().size / 20, 2)}px rgba(0, 0, 0, 0.5) inset`,
29
+ ]
30
+ .filter((item) => !!item)
31
+ .join(", "),
32
+ }}>
33
+ <Show when={key().isBlack && false}>
34
+ <div class={styles["black-separator"]} style={{
18
35
  top: `${virtualDimensions().offset}px`,
19
- height: `${virtualDimensions().size}px`,
36
+ height: `${virtualDimensions().size / 2 - 0.25}px`,
20
37
  }}></div>
38
+ </Show>
39
+ </div>
21
40
  </Show>);
22
41
  }}
23
42
  </Index>
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.0.15",
2
+ "version": "0.0.16",
3
3
  "name": "solid-pianoroll",
4
4
  "description": "Pianoroll UI Control for Solid JS apps",
5
5
  "license": "MIT",