solid-pianoroll 0.0.23 → 0.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/{cjs/index.js → dev.cjs} +446 -426
  2. package/dist/dev.css +212 -0
  3. package/dist/dev.js +1330 -0
  4. package/dist/dev.jsx +1130 -0
  5. package/dist/index.cjs +1330 -0
  6. package/dist/index.css +212 -0
  7. package/dist/index.d.ts +105 -0
  8. package/dist/{esm/index.js → index.js} +450 -425
  9. package/dist/index.jsx +1130 -0
  10. package/package.json +43 -34
  11. package/dist/cjs/index.js.map +0 -1
  12. package/dist/esm/index.js.map +0 -1
  13. package/dist/source/PianoRoll.jsx +0 -78
  14. package/dist/source/PianoRollContext.jsx +0 -11
  15. package/dist/source/PianoRollGrid.jsx +0 -64
  16. package/dist/source/PianoRollKeys.jsx +0 -72
  17. package/dist/source/PianoRollNotes.jsx +0 -162
  18. package/dist/source/PianoRollNotesScroller.jsx +0 -16
  19. package/dist/source/PianoRollScale.jsx +0 -29
  20. package/dist/source/PianoRollScrollZoomViewPort.jsx +0 -49
  21. package/dist/source/PianoRollTrackList.jsx +0 -27
  22. package/dist/source/PianoRollTrackListScroller.jsx +0 -16
  23. package/dist/source/index.jsx +0 -5
  24. package/dist/source/types.js +0 -1
  25. package/dist/source/useBoundingClientRect.js +0 -29
  26. package/dist/source/useNotes.js +0 -23
  27. package/dist/source/usePianoRollGrid.js +0 -45
  28. package/dist/source/usePianoRollState.js +0 -106
  29. package/dist/source/viewport/PlayHead.jsx +0 -43
  30. package/dist/source/viewport/ScrollZoomContainer.jsx +0 -104
  31. package/dist/source/viewport/ScrollZoomViewPort.jsx +0 -31
  32. package/dist/source/viewport/ZoomSliderControl.jsx +0 -29
  33. package/dist/source/viewport/createViewPortDimension.js +0 -51
  34. package/dist/types/PianoRoll.d.ts +0 -9
  35. package/dist/types/PianoRollContext.d.ts +0 -122
  36. package/dist/types/PianoRollGrid.d.ts +0 -2
  37. package/dist/types/PianoRollKeys.d.ts +0 -9
  38. package/dist/types/PianoRollNotes.d.ts +0 -5
  39. package/dist/types/PianoRollNotesScroller.d.ts +0 -3
  40. package/dist/types/PianoRollScale.d.ts +0 -2
  41. package/dist/types/PianoRollScrollZoomViewPort.d.ts +0 -3
  42. package/dist/types/PianoRollTrackList.d.ts +0 -2
  43. package/dist/types/PianoRollTrackListScroller.d.ts +0 -3
  44. package/dist/types/index.d.ts +0 -5
  45. package/dist/types/types.d.ts +0 -6
  46. package/dist/types/useBoundingClientRect.d.ts +0 -3
  47. package/dist/types/useNotes.d.ts +0 -9
  48. package/dist/types/usePianoRollGrid.d.ts +0 -13
  49. package/dist/types/usePianoRollState.d.ts +0 -63
  50. package/dist/types/viewport/PlayHead.d.ts +0 -8
  51. package/dist/types/viewport/ScrollZoomContainer.d.ts +0 -8
  52. package/dist/types/viewport/ScrollZoomViewPort.d.ts +0 -39
  53. package/dist/types/viewport/ZoomSliderControl.d.ts +0 -6
  54. package/dist/types/viewport/createViewPortDimension.d.ts +0 -40
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../node_modules/style-inject/dist/style-inject.es.js","../../src/usePianoRollState.ts","../../src/PianoRollContext.tsx","../../src/viewport/createViewPortDimension.ts","../../src/viewport/ScrollZoomViewPort.tsx","../../src/viewport/ScrollZoomContainer.tsx","../../src/PianoRollKeys.tsx","../../src/PianoRollNotes.tsx","../../src/usePianoRollGrid.ts","../../src/PianoRollGrid.tsx","../../src/viewport/ZoomSliderControl.tsx","../../src/PianoRollTrackList.tsx","../../src/PianoRollScrollZoomViewPort.tsx","../../src/useBoundingClientRect.ts","../../src/PianoRollNotesScroller.tsx","../../src/PianoRollTrackListScroller.tsx","../../src/PianoRollScale.tsx","../../src/PianoRoll.tsx","../../src/viewport/PlayHead.tsx","../../src/useNotes.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 { mergeProps } from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\nimport { GridDivision } from \"./PianoRoll\";\nimport { Note, Track } from \"./types\";\nimport { ClientRect } from \"./useBoundingClientRect\";\n\ntype PianoRollState = {\n ppq: number;\n mode: \"keys\" | \"tracks\";\n position: number;\n zoom: number;\n verticalZoom: number;\n verticalPosition: number;\n verticalTrackZoom: number;\n verticalTrackPosition: number;\n gridDivision: GridDivision;\n snapToGrid: boolean;\n duration: number;\n tracks: Track[];\n selectedTrackIndex: number;\n pressedKeys: Record<number, Record<number, boolean>>;\n notesScrollerClientRect: Pick<ClientRect, \"left\" | \"width\" | \"top\" | \"height\">;\n tracksScrollerClientRect: Pick<ClientRect, \"left\" | \"width\" | \"top\" | \"height\">;\n};\n\nconst defaultState: PianoRollState = {\n ppq: 0,\n mode: \"keys\",\n position: 0,\n zoom: 10,\n verticalZoom: 5,\n verticalPosition: 44,\n verticalTrackZoom: 0.5,\n verticalTrackPosition: 0,\n gridDivision: 4,\n snapToGrid: true,\n duration: 0,\n tracks: [],\n selectedTrackIndex: 0,\n pressedKeys: {},\n notesScrollerClientRect: { left: 0, width: 0, top: 0, height: 0 },\n tracksScrollerClientRect: { left: 0, width: 0, top: 0, height: 0 },\n};\n\nconst propNameToHandlerName = (name: string) => `on${name[0]?.toUpperCase()}${name.slice(1)}Change`;\n\nexport const pianoRollStatePropNames = [\n ...Object.keys(defaultState),\n ...Object.keys(defaultState).map(propNameToHandlerName),\n \"onNoteChange\",\n \"onInsertNote\",\n \"onRemoveNote\",\n \"onNoteDown\",\n \"onNoteUp\",\n \"isKeyDown\",\n] as (keyof ReturnType<typeof createPianoRollstate>)[];\n\nconst createPianoRollstate = (initialState?: Partial<PianoRollState>) => {\n const [state, setState] = createStore<PianoRollState>({\n ...defaultState,\n ...initialState,\n });\n\n const handlers = Object.fromEntries(\n (Object.entries(state) as Entries<typeof state>).map((entry) => {\n return [\n propNameToHandlerName(entry[0]),\n (value: typeof entry[1]) => setState(entry[0], value),\n ];\n }),\n ) as {\n [key in keyof typeof state as `on${Capitalize<key>}Change`]: (value: typeof state[key]) => void;\n };\n\n const updateNotes = async (trackIndex: number, getNotes: (notes: Note[]) => Note[]) => {\n const track = state.tracks[trackIndex];\n if (!track) return;\n\n const notes = track.notes;\n\n handlers.onTracksChange([\n ...state.tracks.slice(0, trackIndex),\n { ...track, notes: getNotes(notes) },\n ...state.tracks.slice(trackIndex + 1),\n ]);\n };\n\n const onNoteChange = (trackIndex: number, noteIndex: number, note: Note) => {\n updateNotes(trackIndex, (notes) => [\n ...notes.slice(0, noteIndex),\n note,\n ...notes.slice(noteIndex + 1),\n ]);\n };\n\n const onInsertNote = (trackIndex: number, note: Note) => {\n const track = state.tracks[trackIndex];\n if (!track) return -1;\n\n const notes = track.notes;\n\n const newNoteIndex = Math.max(\n notes.findIndex(({ ticks }) => ticks > note.ticks),\n 0,\n );\n\n updateNotes(trackIndex, (notes) => [\n ...notes.slice(0, newNoteIndex),\n note,\n ...notes.slice(newNoteIndex),\n ]);\n\n return newNoteIndex;\n };\n\n const onRemoveNote = (trackIndex: number, noteIndex: number) => {\n updateNotes(trackIndex, (notes) => [\n ...notes.slice(0, noteIndex),\n ...notes.slice(noteIndex + 1),\n ]);\n };\n\n const updateKeyPressedState = (trackIndex: number, keyNumber: number, value: boolean) => {\n handlers.onPressedKeysChange?.({\n ...state.pressedKeys,\n [trackIndex]: {\n ...state.pressedKeys[trackIndex],\n [keyNumber]: value,\n },\n });\n };\n\n const onNoteDown = (trackIndex: number, keyNumber: number) => {\n updateKeyPressedState(trackIndex, keyNumber, true);\n };\n\n const onNoteUp = (trackIndex: number, keyNumber: number) => {\n updateKeyPressedState(trackIndex, keyNumber, false);\n };\n\n const isKeyDown = (trackIndex: number, keyNumber: number) =>\n !!state.pressedKeys[trackIndex]?.[keyNumber];\n\n return mergeProps(state, {\n ...handlers,\n onNoteChange,\n onInsertNote,\n onRemoveNote,\n onNoteDown,\n onNoteUp,\n isKeyDown,\n });\n};\n\ntype Entries<T> = {\n [K in keyof T]: [K, T[K]];\n}[keyof T][];\n\nexport default createPianoRollstate;\n","import { createContext, splitProps, useContext } from \"solid-js\";\n\nimport { PianoRollProps } from \"./PianoRoll\";\nimport createPianoRollstate, { pianoRollStatePropNames } from \"./usePianoRollState\";\n\nconst PianoRollContext = createContext<\n {\n showAllTracks?: boolean;\n showTrackList?: boolean;\n } & ReturnType<typeof createPianoRollstate>\n>();\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) =>\n splitProps(allProps, [...pianoRollStatePropNames, \"showAllTracks\", \"showTrackList\"]);\n","import { createEffect } from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\n\nexport type ViewPortDimension = ReturnType<typeof createViewPortDimension>;\nexport type ViewPortDimensionName = string;\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 minZoom: number;\n maxZoom: number;\n};\n\nexport default function createViewPortDimension(getState: () => ViewPortDimensionState) {\n const getStateWithFunctions = () => {\n const state = getState();\n\n const onZoomChange = (zoom: number) =>\n state.onZoomChange?.(clamp(zoom, state.minZoom, state.maxZoom));\n\n const onPositionChange = (position: number) => state.onPositionChange?.(position);\n\n return {\n ...state,\n onZoomChange,\n onPositionChange,\n calculatePixelOffset,\n calculatePixelValue,\n calculatePosition,\n calculatePixelDimensions,\n calculateVisibleRange,\n calculateMaxPosition,\n isVisible,\n };\n };\n\n const [state, setState] = createStore(getStateWithFunctions());\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\nconst defaultViewPortProps = {\n pixelOffset: 0,\n position: 0,\n range: 1,\n zoom: 1,\n minZoom: 1,\n maxZoom: Infinity,\n};\n\nexport const ScrollZoomViewPort = (\n props: ParentProps<{\n dimensions: Record<\n ViewPortDimensionName,\n () => Omit<ViewPortDimensionState, \"name\" | keyof typeof defaultViewPortProps> &\n Partial<Pick<ViewPortDimensionState, keyof typeof defaultViewPortProps>>\n >;\n }>,\n) => {\n const viewPorts = Object.entries(props.dimensions).map(([name, viewPortProps]) =>\n createViewPortDimension(() => ({\n name: name as ViewPortDimensionName,\n ...defaultViewPortProps,\n ...viewPortProps(),\n })),\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 { createEffect, createMemo, JSX, mergeProps, ParentProps, Ref, splitProps } from \"solid-js\";\n\nimport { useViewPortDimension } from \"./ScrollZoomViewPort\";\n\nimport styles from \"./ScrollZoomContainer.module.css\";\n\nconst ScrollZoomContainer = (\n props: ParentProps<\n {\n ref?: Ref<HTMLDivElement>;\n verticalDimensionName?: string;\n horizontalDimensionName?: string;\n showScrollbar?: boolean;\n } & JSX.IntrinsicElements[\"div\"]\n >,\n) => {\n let scrollContentRef: HTMLDivElement | undefined;\n\n const [ownProps, divProps] = splitProps(props, [\n \"ref\",\n \"verticalDimensionName\",\n \"horizontalDimensionName\",\n \"showScrollbar\",\n ]);\n\n const propsWithDefaults = mergeProps(\n {\n verticalDimensionName: \"vertical\",\n horizontalDimensionName: \"horizontal\",\n showScrollbar: true,\n },\n ownProps,\n );\n\n const verticalViewPort = createMemo(() =>\n useViewPortDimension(propsWithDefaults.verticalDimensionName),\n );\n const horizontalViewPort = createMemo(() =>\n useViewPortDimension(propsWithDefaults.horizontalDimensionName),\n );\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 & { currentTarget: Element }) => {\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 } else if (!props.showScrollbar) {\n event.preventDefault();\n event.currentTarget.scrollLeft += event.deltaX;\n event.currentTarget.scrollTop += event.deltaY;\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 onScroll={handleScroll}\n onWheel={handleWheel}\n {...divProps}\n style={{\n overflow: propsWithDefaults.showScrollbar ? \"scroll\" : \"hidden\",\n ...(typeof divProps.style === \"object\" && divProps.style),\n }}\n classList={{\n [styles.ScrollZoomContainer]: true,\n ...divProps.classList,\n }}\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 ScrollZoomContainer;\n","import styles from \"./PianoRollKeys.module.css\";\nimport { createEffect, createMemo, createSignal, Index, Show } from \"solid-js\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport ScrollZoomContainer from \"./viewport/ScrollZoomContainer\";\n\nconst PianoRollKeys = () => {\n const verticalViewPort = createMemo(() => useViewPortDimension(\"vertical\"));\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontalKeys\"));\n const [isMouseDown, setIsMouseDown] = createSignal(false);\n const context = usePianoRollContext();\n\n const handleMouseUp = () => {\n setIsMouseDown(false);\n };\n\n createEffect(() => {\n if (isMouseDown()) {\n window.addEventListener(\"mouseup\", handleMouseUp);\n } else {\n window.removeEventListener(\"mouseup\", handleMouseUp);\n }\n });\n\n return (\n <div class={styles.PianoRollKeys} style={{ width: `${horizontalViewPort().pixelSize}px` }}>\n <ScrollZoomContainer horizontalDimensionName=\"horizontalKeys\" showScrollbar={false}>\n <Index each={keys}>\n {(key) => {\n const isDown = createMemo(() =>\n context.isKeyDown(context.selectedTrackIndex, key().number),\n );\n const virtualDimensions = createMemo(() =>\n verticalViewPort().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={verticalViewPort().isVisible(virtualDimensions())}>\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={() => {\n setIsMouseDown(true);\n context.onNoteDown(context.selectedTrackIndex, key().number);\n }}\n onMouseUp={() => {\n context.onNoteUp(context.selectedTrackIndex, key().number);\n }}\n onMouseEnter={() => {\n if (isMouseDown()) {\n context.onNoteDown(context.selectedTrackIndex, key().number);\n }\n }}\n onMouseLeave={() => {\n if (isMouseDown()) {\n context.onNoteUp(context.selectedTrackIndex, key().number);\n }\n }}\n title={key().name}\n data-index={key().number % 12}\n style={{\n top: `${\n virtualDimensions().offset -\n virtualDimensions().size * (!key().isBlack ? (nextIsBlack ? 1 / 2 : 0) : 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\"}` + 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 }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </ScrollZoomContainer>\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 { createMemo, createSignal, For, Ref, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport styles from \"./PianoRollNotes.module.scss\";\nimport { clamp } from \"./viewport/createViewPortDimension\";\nimport { Note } from \"./types\";\n\ntype NoteDragMode = \"trimStart\" | \"move\" | \"trimEnd\" | undefined;\n\nconst PianoRollNotes = (props: { ref?: Ref<HTMLDivElement | undefined> }) => {\n const context = usePianoRollContext();\n\n const verticalViewPort = createMemo(() =>\n useViewPortDimension(context.mode === \"keys\" ? \"vertical\" : \"verticalTracks\"),\n );\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n\n const gridDivisionTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\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\n const [diffPosition, setDiffPosition] = createSignal(0);\n const [getInitialNote, setInitialNote] = createSignal<Note>();\n\n const snapValueToGridIfEnabled = (value: number, altKey: boolean) =>\n context.snapToGrid && !altKey\n ? Math.round(value / gridDivisionTicks()) * gridDivisionTicks()\n : value;\n\n const calculateNoteDragValues = (event: MouseEvent) => {\n const targetTrackIndex =\n context.mode === \"tracks\"\n ? clamp(\n Math.floor(verticalViewPort().calculatePosition(event.clientY)),\n 0,\n context.tracks.length - 1,\n )\n : currentNoteTrackIndex() > -1\n ? currentNoteTrackIndex()\n : context.selectedTrackIndex;\n\n const midi =\n context.mode === \"keys\"\n ? Math.floor(128 - verticalViewPort().calculatePosition(event.clientY))\n : getInitialNote()?.midi ?? 60;\n\n const horiontalPosition = horizontalViewPort().calculatePosition(event.clientX);\n\n return {\n targetTrackIndex,\n midi,\n horiontalPosition,\n };\n };\n\n const handleMouseMove = (mouseMoveEvent: MouseEvent) => {\n mouseMoveEvent.preventDefault();\n mouseMoveEvent.stopPropagation();\n\n const note = getInitialNote();\n if (!note) return;\n\n const { targetTrackIndex, midi, horiontalPosition } = calculateNoteDragValues(mouseMoveEvent);\n\n const ticks = snapValueToGridIfEnabled(\n horiontalPosition - diffPosition(),\n mouseMoveEvent.altKey,\n );\n\n const updatedNote = {\n ...note,\n midi,\n ...(noteDragMode() === \"move\" && { ticks }),\n ...(noteDragMode() === \"trimStart\" && {\n ticks: ticks < note.ticks + note.durationTicks ? ticks : note.ticks + note.durationTicks,\n durationTicks:\n ticks < note.ticks + note.durationTicks\n ? note.ticks + note.durationTicks - ticks\n : snapValueToGridIfEnabled(horiontalPosition - note.ticks, mouseMoveEvent.altKey),\n }),\n ...(noteDragMode() === \"trimEnd\" && {\n ticks: ticks < note.ticks ? ticks : note.ticks,\n durationTicks:\n ticks < note.ticks\n ? note.ticks - ticks\n : snapValueToGridIfEnabled(horiontalPosition - note.ticks, mouseMoveEvent.altKey),\n }),\n };\n\n const previousTrackIndex = currentNoteTrackIndex();\n const previousNoteIndex = currentNoteIndex();\n\n if (targetTrackIndex === previousTrackIndex) {\n context.onNoteChange?.(previousTrackIndex, previousNoteIndex, updatedNote);\n } else {\n if (context.onInsertNote) {\n context.onRemoveNote?.(previousTrackIndex, previousNoteIndex);\n const newNoteIndex = context.onInsertNote(targetTrackIndex, updatedNote);\n\n setCurrentNoteTrackIndex(targetTrackIndex);\n setCurrentNoteIndex(newNoteIndex);\n }\n }\n };\n\n const stopDragging = () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", stopDragging);\n setIsDragging(false);\n setCurrentNoteIndex(-1);\n setCurrentNoteTrackIndex(-1);\n };\n\n const startDragging = () => {\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", stopDragging);\n };\n\n const getClasses = (noteDragMode: NoteDragMode) => {\n return noteDragMode ? [styles.Note, styles[noteDragMode]] : [styles.Note];\n };\n\n return (\n <div\n classList={{ [styles.PianoRollNotes]: true }}\n ref={props.ref}\n onMouseDown={(mouseDownEvent) => {\n mouseDownEvent.preventDefault();\n mouseDownEvent.stopPropagation();\n\n const { targetTrackIndex, midi, horiontalPosition } =\n calculateNoteDragValues(mouseDownEvent);\n\n const ticks = snapValueToGridIfEnabled(horiontalPosition, mouseDownEvent.altKey);\n const durationTicks = gridDivisionTicks();\n\n const newNote: Note = {\n midi,\n ticks,\n durationTicks,\n velocity: 100,\n };\n\n const newNoteIndex = context.onInsertNote(targetTrackIndex, newNote);\n\n setIsDragging(true);\n setCurrentNoteTrackIndex(targetTrackIndex);\n setCurrentNoteIndex(newNoteIndex);\n setInitialNote(newNote);\n setDiffPosition(0);\n setNoteDragMode(\"trimEnd\");\n\n startDragging();\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 const initialPosition = horizontalViewPort().calculatePosition(\n event.clientX,\n );\n\n setDiffPosition(\n noteDragMode() === \"trimEnd\"\n ? -(note.ticks + note.durationTicks - initialPosition)\n : initialPosition - note.ticks,\n );\n setIsDragging(true);\n setCurrentNoteIndex(noteIndex());\n setCurrentNoteTrackIndex(trackIndex());\n setInitialNote(note);\n\n startDragging();\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 { createMemo } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\n\nconst usePianoRollGrid = () => {\n const context = usePianoRollContext();\n\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\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((_, i) => {\n const index = i + startIndex;\n const ticks = index * gridDivisorTicks();\n\n const measurePosition = ticks / context.ppq / 4 + 1;\n\n const bars = Math.floor(measurePosition);\n const beats = Math.floor((measurePosition - bars) * 4);\n\n const label = `${bars}${beats ? `.${beats}` : \"\"}`;\n return {\n index,\n ticks,\n isHighlighted:\n Math.ceil(((index + 1) * selectedGridDivisorTicks()) / measureTicks()) % 2 === 0,\n hasHighlightedBorder: (index * gridDivisorTicks()) % selectedGridDivisorTicks() === 0,\n showLabel: ((index * selectedGridDivisorTicks()) / measureTicks()) % 2 === 0,\n virtualDimensions: horizontalViewPort().calculatePixelDimensions(ticks, gridDivisorTicks()),\n label,\n };\n });\n });\n\n return gridArray;\n};\n\nexport default usePianoRollGrid;\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\";\nimport usePianoRollGrid from \"./usePianoRollGrid\";\n\nconst PianoRollGrid = () => {\n const context = usePianoRollContext();\n\n const verticalViewPort = createMemo(() =>\n useViewPortDimension(context.mode === \"keys\" ? \"vertical\" : \"verticalTracks\"),\n );\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n const gridArray = usePianoRollGrid();\n\n return (\n <div class={styles.PianoRollGrid}>\n <Index each={gridArray()}>\n {(entry) => {\n return (\n <Show when={horizontalViewPort().isVisible(entry().virtualDimensions)}>\n <div\n classList={{\n [styles[\"PianoRollGrid-Time\"]]: true,\n [styles[\"Highlighted\"]]: entry().isHighlighted,\n [styles[\"HighlightedBorder\"]]: entry().hasHighlightedBorder,\n }}\n style={{\n left: `${entry().virtualDimensions.offset}px`,\n width: `${entry().virtualDimensions.size}px`,\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={verticalViewPort().isVisible(virtualDimensions())}>\n <div\n classList={{\n [styles[\"PianoRollGrid-Row\"]]: true,\n [styles[\"Key\"]]: true,\n [styles[\"IsDark\"]]: key().isBlack,\n [styles[\"IsBlackAndNextIsWhite\"]]:\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12),\n }}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\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={verticalViewPort().isVisible(virtualDimensions())}>\n <div\n classList={{\n [styles[\"PianoRollGrid-Row\"]]: true,\n [styles[\"IsDark\"]]: index() % 2 === 0,\n }}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n }}\n ></div>\n </Show>\n );\n }}\n </For>\n </Show>\n </div>\n );\n};\n\nexport default PianoRollGrid;\n","import { createMemo, mergeProps } from \"solid-js\";\nimport { JSX } from \"solid-js/jsx-runtime\";\nimport { useViewPortDimension } from \"./ScrollZoomViewPort\";\n\nconst ZoomSliderControl = (\n props: {\n dimensionName?: string;\n orientation?: \"horizontal\" | \"vertical\";\n } & JSX.IntrinsicElements[\"input\"],\n) => {\n const propsWithDefaults = mergeProps({ orientation: \"horizontal\" }, props);\n const dimension = createMemo(() =>\n useViewPortDimension(props.dimensionName ?? propsWithDefaults.orientation),\n );\n\n return (\n <input\n min={dimension().minZoom}\n max={dimension().maxZoom}\n step={0.01}\n {...props}\n value={dimension().zoom}\n onInput={(event) => {\n const value = event.currentTarget.valueAsNumber;\n dimension().onZoomChange?.(value);\n }}\n type=\"range\"\n {...{ orient: propsWithDefaults.orientation }}\n style={\n propsWithDefaults.orientation === \"vertical\"\n ? {\n margin: 0,\n \"margin-left\": \"4px\",\n \"margin-right\": \"4px\",\n width: \"16px\",\n transform: \"rotate(180deg)\",\n ...({\n \"writing-mode\": \"bt-lr\" /* IE */,\n \"-webkit-appearance\": \"slider-vertical\" /* WebKit */,\n } as unknown as JSX.CSSProperties),\n ...(typeof props.style === \"object\" && props.style),\n }\n : {\n margin: 0,\n \"margin-top\": \"4px\",\n \"margin-bottom\": \"4px\",\n ...(typeof props.style === \"object\" && props.style),\n }\n }\n />\n );\n};\n\nexport default ZoomSliderControl;\n","import styles from \"./PianoRollTrackList.module.scss\";\nimport { createMemo, Index, Show } from \"solid-js\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollTrackList = () => {\n const viewPort = createMemo(() => useViewPortDimension(\"verticalTracks\"));\n const context = usePianoRollContext();\n\n return (\n <div class={styles.PianoRollTrackList}>\n <Index each={context.tracks}>\n {(track, index) => {\n const virtualDimensions = createMemo(() => viewPort().calculatePixelDimensions(index, 1));\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n classList={{\n [styles[\"Track\"]]: true,\n [styles[\"selected\"]]: index === context.selectedTrackIndex,\n }}\n title={track().name}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\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 { ParentProps } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { ScrollZoomViewPort } from \"./viewport/ScrollZoomViewPort\";\n\nconst PianoRollScrollZoomViewPort = (props: ParentProps) => {\n const zoomFactor = 500;\n\n const context = usePianoRollContext();\n\n return (\n <ScrollZoomViewPort\n dimensions={{\n horizontal: () => ({\n pixelOffset: context.notesScrollerClientRect.left,\n pixelSize: context.notesScrollerClientRect.width,\n position: context.position,\n range: context.duration,\n zoom: context.zoom * (zoomFactor / context.notesScrollerClientRect.width),\n onPositionChange: context.onPositionChange,\n onZoomChange: (zoom) =>\n context.onZoomChange?.(zoom / (zoomFactor / context.notesScrollerClientRect.width)),\n minZoom: 1,\n maxZoom: 500,\n }),\n vertical: () => ({\n pixelOffset: context.notesScrollerClientRect.top,\n pixelSize: context.notesScrollerClientRect.height,\n position: context.verticalPosition,\n range: 128,\n zoom: context.verticalZoom * (zoomFactor / context.notesScrollerClientRect.height),\n onPositionChange: context.onVerticalPositionChange,\n onZoomChange: (verticalZoom) =>\n context.onVerticalZoomChange?.(\n verticalZoom / (zoomFactor / context.notesScrollerClientRect.height),\n ),\n minZoom: 1,\n maxZoom: 10,\n }),\n horizontalTracks: () => ({\n pixelOffset: 0,\n pixelSize: context.tracksScrollerClientRect.width,\n }),\n verticalTracks: () => ({\n pixelOffset: context.tracksScrollerClientRect.top,\n pixelSize: context.tracksScrollerClientRect.height,\n position: context.verticalTrackPosition,\n range: context.tracks.length,\n zoom: context.verticalTrackZoom * (zoomFactor / context.tracksScrollerClientRect.height),\n onPositionChange: context.onVerticalTrackPositionChange,\n onZoomChange: (verticalTrackZoom) =>\n context.onVerticalTrackZoomChange?.(\n verticalTrackZoom / (zoomFactor / context.tracksScrollerClientRect.height),\n ),\n minZoom: 0.8,\n maxZoom: 3,\n }),\n horizontalKeys: () => ({ pixelSize: 60 }),\n }}\n >\n {props.children}\n </ScrollZoomViewPort>\n );\n};\n\nexport default PianoRollScrollZoomViewPort;\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 { createEffect, createSignal, ParentProps } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport useBoundingClientRect from \"./useBoundingClientRect\";\nimport ScrollZoomContainer from \"./viewport/ScrollZoomContainer\";\n\nconst PianoRollNotesScroller = (props: ParentProps) => {\n const context = usePianoRollContext();\n\n const [ref, setRef] = createSignal<HTMLDivElement>();\n const clientRect = useBoundingClientRect(ref);\n\n createEffect(() => {\n context.onNotesScrollerClientRectChange(clientRect());\n });\n\n return (\n <ScrollZoomContainer\n ref={setRef}\n verticalDimensionName={context.mode === \"keys\" ? \"vertical\" : \"verticalTracks\"}\n >\n {props.children}\n </ScrollZoomContainer>\n );\n};\n\nexport default PianoRollNotesScroller;\n","import { createEffect, createSignal, ParentProps } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport useBoundingClientRect from \"./useBoundingClientRect\";\nimport ScrollZoomContainer from \"./viewport/ScrollZoomContainer\";\n\nconst PianoRollTrackListScroller = (props: ParentProps) => {\n const context = usePianoRollContext();\n\n const [ref, setRef] = createSignal<HTMLDivElement>();\n const clientRect = useBoundingClientRect(ref);\n\n createEffect(() => {\n context.onTracksScrollerClientRectChange(clientRect());\n });\n\n return (\n <ScrollZoomContainer\n ref={setRef}\n horizontalDimensionName=\"horizontalTracks\"\n verticalDimensionName=\"verticalTracks\"\n showScrollbar={context.mode === \"keys\"}\n >\n {props.children}\n </ScrollZoomContainer>\n );\n};\n\nexport default PianoRollTrackListScroller;\n","import { createMemo, Index, Show } from \"solid-js\";\nimport { useViewPortDimension } from \"./viewport/ScrollZoomViewPort\";\nimport styles from \"./PianoRollScale.module.css\";\nimport usePianoRollGrid from \"./usePianoRollGrid\";\n\nconst PianoRollScale = () => {\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n const grid = usePianoRollGrid();\n\n return (\n <div class={styles.PianoRollScale}>\n <Index each={grid()}>\n {(entry) => {\n return (\n <Show when={horizontalViewPort().isVisible(entry().virtualDimensions)}>\n <div\n classList={{\n [styles[\"PianoRollScale-Time\"]]: true,\n [styles[\"Highlighted\"]]: entry().isHighlighted,\n [styles[\"HighlightedBorder\"]]: entry().hasHighlightedBorder,\n }}\n style={{\n left: `${entry().virtualDimensions.offset}px`,\n width: `${entry().virtualDimensions.size}px`,\n }}\n >\n <Show when={entry().showLabel}>\n <div class={styles[\"PianoRollScale-Label\"]}>{entry().label}</div>\n </Show>\n </div>\n </Show>\n );\n }}\n </Index>\n </div>\n );\n};\n\nexport default PianoRollScale;\n","import styles from \"./PianoRoll.module.css\";\n\nimport { JSX, ParentProps, Show, mergeProps } from \"solid-js\";\n\nimport { PianoRollContextProvider, splitContextProps } from \"./PianoRollContext\";\nimport PianoRollKeys from \"./PianoRollKeys\";\nimport PianoRollNotes from \"./PianoRollNotes\";\nimport PianoRollGrid from \"./PianoRollGrid\";\nimport ZoomSliderControl from \"./viewport/ZoomSliderControl\";\nimport PianoRollTrackList from \"./PianoRollTrackList\";\nimport createPianoRollstate from \"./usePianoRollState\";\nimport PianoRollScrollZoomViewPort from \"./PianoRollScrollZoomViewPort\";\nimport PianoRollNotesScroller from \"./PianoRollNotesScroller\";\nimport PianoRollTrackListScroller from \"./PianoRollTrackListScroller\";\nimport PianoRollScale from \"./PianoRollScale\";\n\nexport type GridDivision = 1 | 2 | 4 | 8 | 16 | 32 | 64;\n\nexport type PianoRollProps = {\n showAllTracks?: boolean;\n showTrackList?: boolean;\n} & ReturnType<typeof createPianoRollstate> &\n Omit<JSX.IntrinsicElements[\"div\"], \"onDurationChange\">;\n\nconst PianoRoll = (allProps: ParentProps<PianoRollProps>) => {\n const propsWithDefaults = mergeProps({ showAllTracks: false }, allProps);\n const [context, divProps] = splitContextProps(propsWithDefaults);\n\n return (\n <PianoRollContextProvider value={context}>\n <div {...divProps} class={styles.PianoRoll}>\n <PianoRollScrollZoomViewPort>\n <div class={styles.PianoRollContainer}>\n <ZoomSliderControl orientation=\"vertical\" dimensionName=\"verticalTracks\" />\n <div\n classList={{\n [styles.PianoRollLeftColumn]: true,\n [styles.showTrackList]: context.showTrackList,\n }}\n >\n <Show when={context.showTrackList}>\n <div\n style={{\n height: \"30px\",\n }}\n >\n <button\n title={context.mode === \"keys\" ? \"Tracks Mode\" : \"Keys Mode\"}\n onClick={() =>\n context.onModeChange(context.mode === \"keys\" ? \"tracks\" : \"keys\")\n }\n style={{\n \"font-size\": \"16px\",\n \"line-height\": \"16px\",\n cursor: \"pointer\",\n overflow: \"hidden\",\n }}\n >\n <div>{context.mode === \"keys\" ? \"≡\" : \"🎹\"}</div>\n </button>\n </div>\n </Show>\n <div style={{ flex: 1, display: \"flex\", overflow: \"hidden\" }}>\n <Show when={context.showTrackList}>\n <PianoRollTrackListScroller>\n <PianoRollTrackList />\n </PianoRollTrackListScroller>\n </Show>\n <Show when={context.mode === \"keys\"}>\n <PianoRollKeys />\n </Show>\n </div>\n </div>\n\n <div\n style={{\n width: \"100%\",\n display: \"flex\",\n height: \"100%\",\n \"flex-direction\": \"column\",\n overflow: \"hidden\",\n }}\n >\n <div style={{ height: \"30px\" }}>\n <PianoRollScale />\n </div>\n <PianoRollNotesScroller>\n {allProps.children}\n <PianoRollGrid />\n <PianoRollNotes />\n </PianoRollNotesScroller>\n </div>\n\n <ZoomSliderControl orientation=\"vertical\" disabled={context.mode !== \"keys\"} />\n </div>\n <ZoomSliderControl\n orientation=\"horizontal\"\n style={{\n \"margin-left\": `${context.tracksScrollerClientRect.width + 24}px`,\n \"margin-right\": \"24px\",\n }}\n />\n </PianoRollScrollZoomViewPort>\n </div>\n </PianoRollContextProvider>\n );\n};\n\nexport default PianoRoll;\n","import { createEffect, createMemo, JSX, splitProps } from \"solid-js\";\nimport { clamp } from \"./createViewPortDimension\";\nimport { useViewPortDimension } from \"./ScrollZoomViewPort\";\n\nconst PlayHead = (\n allProps: {\n position: number;\n onPositionChange?: (playHeadPosition: number) => void;\n sync?: boolean;\n dimensionName?: string;\n } & JSX.IntrinsicElements[\"div\"],\n) => {\n const [props, divProps] = splitProps(allProps, [\n \"position\",\n \"sync\",\n \"onPositionChange\",\n \"dimensionName\",\n ]);\n\n const viewPort = useViewPortDimension(props.dimensionName ?? \"horizontal\");\n\n createEffect(() => {\n if (!props.sync) return;\n\n const maxPosition = viewPort.range;\n const newPosition = clamp(props.position - viewPort.range / viewPort.zoom / 2, 0, maxPosition);\n\n viewPort.onPositionChange?.(newPosition);\n });\n\n const leftPosition = createMemo(() => viewPort.calculatePixelOffset(props.position));\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 = ({ clientX }: MouseEvent) => {\n const newPosition = viewPort.calculatePosition(clientX);\n props.onPositionChange?.(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"],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","defaultState","ppq","mode","position","zoom","verticalZoom","verticalPosition","verticalTrackZoom","verticalTrackPosition","gridDivision","snapToGrid","duration","tracks","selectedTrackIndex","pressedKeys","notesScrollerClientRect","left","width","top","height","tracksScrollerClientRect","propNameToHandlerName","name","toUpperCase","slice","pianoRollStatePropNames","Object","keys","map","createPianoRollstate","initialState","state","setState","createStore","handlers","fromEntries","entries","entry","value","updateNotes","trackIndex","getNotes","track","notes","onTracksChange","onNoteChange","noteIndex","note","onInsertNote","newNoteIndex","Math","max","findIndex","ticks","onRemoveNote","updateKeyPressedState","keyNumber","onPressedKeysChange","onNoteDown","onNoteUp","isKeyDown","mergeProps","PianoRollContext","createContext","PianoRollContextProvider","Provider","usePianoRollContext","context","useContext","Error","splitContextProps","allProps","splitProps","createViewPortDimension","getState","getStateWithFunctions","onZoomChange","clamp","minZoom","maxZoom","onPositionChange","calculatePixelOffset","calculatePixelValue","calculatePosition","calculatePixelDimensions","calculateVisibleRange","calculateMaxPosition","isVisible","createEffect","virtualSize","pixelSize","range","offset","percentX","pixelOffset","length","size","min","defaultViewPortProps","Infinity","ScrollZoomViewPort","props","viewPorts","dimensions","viewPortProps","parentViewPorts","ScrollZoomViewPortContext","_$createComponent","children","useViewPortDimension","viewPort","find","ScrollZoomContainer","scrollContentRef","ownProps","divProps","propsWithDefaults","verticalDimensionName","horizontalDimensionName","showScrollbar","verticalViewPort","createMemo","horizontalViewPort","handleScroll","event","preventDefault","didUpdateScroll","maxVerticalPosition","maxPosition","scrollTop","scrollLeft","scrollWidth","scrollHeight","currentTarget","scrollTopAmount","scrollLeftAmount","handleWheel","altKey","abs","deltaX","deltaY","parentElement","scrollDivHeight","scrollDivWidth","scrollTo","_tmpl$","_$spread","_$mergeProps","overflow","styles","classList","_$use","_$insert","_$effect","PianoRollKeys","isMouseDown","setIsMouseDown","createSignal","handleMouseUp","window","addEventListener","removeEventListener","key","isDown","number","virtualDimensions","previousIsBlack","blackKeys","includes","nextIsBlack","isBlack","_$classList","_$setAttribute","_$className","keyNames","Array","from","_","index","floor","_$delegateEvents","PianoRollNotes","gridDivisionTicks","isDragging","setIsDragging","noteDragMode","setNoteDragMode","currentNoteIndex","setCurrentNoteIndex","currentNoteTrackIndex","setCurrentNoteTrackIndex","diffPosition","setDiffPosition","getInitialNote","setInitialNote","snapValueToGridIfEnabled","round","calculateNoteDragValues","targetTrackIndex","clientY","midi","horiontalPosition","clientX","handleMouseMove","mouseMoveEvent","stopPropagation","updatedNote","durationTicks","previousTrackIndex","previousNoteIndex","stopDragging","startDragging","getClasses","Note","mouseDownEvent","newNote","velocity","showAllTracks","verticalVirtualDimensions","horizontalDimensions","_$memo","initialPosition","relativeX","noteStartX","noteEndX","join","usePianoRollGrid","measureTicks","selectedGridDivisorTicks","calculateVisibleGridDivisorTicks","visibleRange","gridDivisorTicks","gridArray","numberOfLines","ceil","startIndex","i","measurePosition","bars","beats","label","isHighlighted","hasHighlightedBorder","showLabel","PianoRollGrid","ZoomSliderControl","orientation","dimension","dimensionName","valueAsNumber","orient","margin","transform","PianoRollTrackList","_tmpl$2","onSelectedTrackIndexChange","PianoRollScrollZoomViewPort","zoomFactor","horizontal","vertical","onVerticalPositionChange","onVerticalZoomChange","horizontalTracks","verticalTracks","onVerticalTrackPositionChange","onVerticalTrackZoomChange","horizontalKeys","defaultRect","bottom","right","x","y","useBoundingClientRect","containerRef","boundingClientRect","setBoundingClientRect","container","updateBoundingClientRect","getBoundingClientRect","resizeObserver","ResizeObserver","observe","disconnect","PianoRollNotesScroller","setRef","clientRect","onNotesScrollerClientRectChange","PianoRollTrackListScroller","onTracksScrollerClientRectChange","PianoRollScale","grid","PianoRoll","showTrackList","onModeChange","PianoRollContainer","PianoRollLeftColumn","PlayHead","sync","newPosition","leftPosition","cursor","useNotes","onNotesChange","splice"],"mappings":"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"}
@@ -1,78 +0,0 @@
1
- import styles from "./PianoRoll.module.css";
2
- import { Show, mergeProps } from "solid-js";
3
- import { PianoRollContextProvider, splitContextProps } from "./PianoRollContext";
4
- import PianoRollKeys from "./PianoRollKeys";
5
- import PianoRollNotes from "./PianoRollNotes";
6
- import PianoRollGrid from "./PianoRollGrid";
7
- import ZoomSliderControl from "./viewport/ZoomSliderControl";
8
- import PianoRollTrackList from "./PianoRollTrackList";
9
- import PianoRollScrollZoomViewPort from "./PianoRollScrollZoomViewPort";
10
- import PianoRollNotesScroller from "./PianoRollNotesScroller";
11
- import PianoRollTrackListScroller from "./PianoRollTrackListScroller";
12
- import PianoRollScale from "./PianoRollScale";
13
- const PianoRoll = (allProps) => {
14
- const propsWithDefaults = mergeProps({ showAllTracks: false }, allProps);
15
- const [context, divProps] = splitContextProps(propsWithDefaults);
16
- return (<PianoRollContextProvider value={context}>
17
- <div {...divProps} class={styles.PianoRoll}>
18
- <PianoRollScrollZoomViewPort>
19
- <div class={styles.PianoRollContainer}>
20
- <ZoomSliderControl orientation="vertical" dimensionName="verticalTracks"/>
21
- <div classList={{
22
- [styles.PianoRollLeftColumn]: true,
23
- [styles.showTrackList]: context.showTrackList,
24
- }}>
25
- <Show when={context.showTrackList}>
26
- <div style={{
27
- height: "30px",
28
- }}>
29
- <button title={context.mode === "keys" ? "Tracks Mode" : "Keys Mode"} onClick={() => context.onModeChange(context.mode === "keys" ? "tracks" : "keys")} style={{
30
- "font-size": "16px",
31
- "line-height": "16px",
32
- cursor: "pointer",
33
- overflow: "hidden",
34
- }}>
35
- <div>{context.mode === "keys" ? "≡" : "🎹"}</div>
36
- </button>
37
- </div>
38
- </Show>
39
- <div style={{ flex: 1, display: "flex", overflow: "hidden" }}>
40
- <Show when={context.showTrackList}>
41
- <PianoRollTrackListScroller>
42
- <PianoRollTrackList />
43
- </PianoRollTrackListScroller>
44
- </Show>
45
- <Show when={context.mode === "keys"}>
46
- <PianoRollKeys />
47
- </Show>
48
- </div>
49
- </div>
50
-
51
- <div style={{
52
- width: "100%",
53
- display: "flex",
54
- height: "100%",
55
- "flex-direction": "column",
56
- overflow: "hidden",
57
- }}>
58
- <div style={{ height: "30px" }}>
59
- <PianoRollScale />
60
- </div>
61
- <PianoRollNotesScroller>
62
- {allProps.children}
63
- <PianoRollGrid />
64
- <PianoRollNotes />
65
- </PianoRollNotesScroller>
66
- </div>
67
-
68
- <ZoomSliderControl orientation="vertical" disabled={context.mode !== "keys"}/>
69
- </div>
70
- <ZoomSliderControl orientation="horizontal" style={{
71
- "margin-left": `${context.tracksScrollerClientRect.width + 24}px`,
72
- "margin-right": "24px",
73
- }}/>
74
- </PianoRollScrollZoomViewPort>
75
- </div>
76
- </PianoRollContextProvider>);
77
- };
78
- export default PianoRoll;
@@ -1,11 +0,0 @@
1
- import { createContext, splitProps, useContext } from "solid-js";
2
- import { pianoRollStatePropNames } from "./usePianoRollState";
3
- const PianoRollContext = createContext();
4
- export const PianoRollContextProvider = PianoRollContext.Provider;
5
- export const usePianoRollContext = () => {
6
- const context = useContext(PianoRollContext);
7
- if (!context)
8
- throw new Error("No PianoRollContext found");
9
- return context;
10
- };
11
- export const splitContextProps = (allProps) => splitProps(allProps, [...pianoRollStatePropNames, "showAllTracks", "showTrackList"]);
@@ -1,64 +0,0 @@
1
- import { createMemo, For, Index, Show } from "solid-js";
2
- import { usePianoRollContext } from "./PianoRollContext";
3
- import { blackKeys, keys } from "./PianoRollKeys";
4
- import { useViewPortDimension } from "./viewport/ScrollZoomViewPort";
5
- import styles from "./PianoRollGrid.module.css";
6
- import usePianoRollGrid from "./usePianoRollGrid";
7
- const PianoRollGrid = () => {
8
- const context = usePianoRollContext();
9
- const verticalViewPort = createMemo(() => useViewPortDimension(context.mode === "keys" ? "vertical" : "verticalTracks"));
10
- const horizontalViewPort = createMemo(() => useViewPortDimension("horizontal"));
11
- const gridArray = usePianoRollGrid();
12
- return (<div class={styles.PianoRollGrid}>
13
- <Index each={gridArray()}>
14
- {(entry) => {
15
- return (<Show when={horizontalViewPort().isVisible(entry().virtualDimensions)}>
16
- <div classList={{
17
- [styles["PianoRollGrid-Time"]]: true,
18
- [styles["Highlighted"]]: entry().isHighlighted,
19
- [styles["HighlightedBorder"]]: entry().hasHighlightedBorder,
20
- }} style={{
21
- left: `${entry().virtualDimensions.offset}px`,
22
- width: `${entry().virtualDimensions.size}px`,
23
- }}></div>
24
- </Show>);
25
- }}
26
- </Index>
27
- <Show when={context.mode === "keys"}>
28
- <Index each={keys}>
29
- {(key) => {
30
- const virtualDimensions = createMemo(() => verticalViewPort().calculatePixelDimensions(127 - key().number, 1));
31
- return (<Show when={verticalViewPort().isVisible(virtualDimensions())}>
32
- <div classList={{
33
- [styles["PianoRollGrid-Row"]]: true,
34
- [styles["Key"]]: true,
35
- [styles["IsDark"]]: key().isBlack,
36
- [styles["IsBlackAndNextIsWhite"]]: !key().isBlack && !blackKeys.includes((key().number + 1) % 12),
37
- }} style={{
38
- top: `${virtualDimensions().offset}px`,
39
- height: `${virtualDimensions().size}px`,
40
- }}></div>
41
- </Show>);
42
- }}
43
- </Index>
44
- </Show>
45
-
46
- <Show when={context.mode === "tracks"}>
47
- <For each={context.tracks}>
48
- {(track, index) => {
49
- const virtualDimensions = createMemo(() => verticalViewPort().calculatePixelDimensions(index(), 1));
50
- return (<Show when={verticalViewPort().isVisible(virtualDimensions())}>
51
- <div classList={{
52
- [styles["PianoRollGrid-Row"]]: true,
53
- [styles["IsDark"]]: index() % 2 === 0,
54
- }} style={{
55
- top: `${virtualDimensions().offset}px`,
56
- height: `${virtualDimensions().size}px`,
57
- }}></div>
58
- </Show>);
59
- }}
60
- </For>
61
- </Show>
62
- </div>);
63
- };
64
- export default PianoRollGrid;
@@ -1,72 +0,0 @@
1
- import styles from "./PianoRollKeys.module.css";
2
- import { createEffect, createMemo, createSignal, Index, Show } from "solid-js";
3
- import { useViewPortDimension } from "./viewport/ScrollZoomViewPort";
4
- import { usePianoRollContext } from "./PianoRollContext";
5
- import ScrollZoomContainer from "./viewport/ScrollZoomContainer";
6
- const PianoRollKeys = () => {
7
- const verticalViewPort = createMemo(() => useViewPortDimension("vertical"));
8
- const horizontalViewPort = createMemo(() => useViewPortDimension("horizontalKeys"));
9
- const [isMouseDown, setIsMouseDown] = createSignal(false);
10
- const context = usePianoRollContext();
11
- const handleMouseUp = () => {
12
- setIsMouseDown(false);
13
- };
14
- createEffect(() => {
15
- if (isMouseDown()) {
16
- window.addEventListener("mouseup", handleMouseUp);
17
- }
18
- else {
19
- window.removeEventListener("mouseup", handleMouseUp);
20
- }
21
- });
22
- return (<div class={styles.PianoRollKeys} style={{ width: `${horizontalViewPort().pixelSize}px` }}>
23
- <ScrollZoomContainer horizontalDimensionName="horizontalKeys" showScrollbar={false}>
24
- <Index each={keys}>
25
- {(key) => {
26
- const isDown = createMemo(() => context.isKeyDown(context.selectedTrackIndex, key().number));
27
- const virtualDimensions = createMemo(() => verticalViewPort().calculatePixelDimensions(127 - key().number, 1));
28
- const previousIsBlack = blackKeys.includes((key().number - 1) % 12);
29
- const nextIsBlack = blackKeys.includes((key().number + 1) % 12);
30
- return (<Show when={verticalViewPort().isVisible(virtualDimensions())}>
31
- <div classList={{
32
- [styles["Key"]]: true,
33
- [styles["black"]]: key().isBlack,
34
- [styles["white"]]: !key().isBlack,
35
- [styles["down"]]: isDown(),
36
- }} onMouseDown={() => {
37
- setIsMouseDown(true);
38
- context.onNoteDown(context.selectedTrackIndex, key().number);
39
- }} onMouseUp={() => {
40
- context.onNoteUp(context.selectedTrackIndex, key().number);
41
- }} onMouseEnter={() => {
42
- if (isMouseDown()) {
43
- context.onNoteDown(context.selectedTrackIndex, key().number);
44
- }
45
- }} onMouseLeave={() => {
46
- if (isMouseDown()) {
47
- context.onNoteUp(context.selectedTrackIndex, key().number);
48
- }
49
- }} title={key().name} data-index={key().number % 12} style={{
50
- top: `${virtualDimensions().offset -
51
- virtualDimensions().size * (!key().isBlack ? (nextIsBlack ? 1 / 2 : 0) : 0)}px`,
52
- height: `${virtualDimensions().size +
53
- (!key().isBlack && nextIsBlack ? virtualDimensions().size / 2 : 0) +
54
- (!key().isBlack && previousIsBlack ? virtualDimensions().size / 2 : 0)}px`,
55
- "box-shadow": `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()
56
- ? `0px 0px ${Math.min(virtualDimensions().size / 8, 2)}px ${Math.min(virtualDimensions().size / 20, 2)}px rgba(0, 0, 0, 0.5) inset`
57
- : "",
58
- }}></div>
59
- </Show>);
60
- }}
61
- </Index>
62
- </ScrollZoomContainer>
63
- </div>);
64
- };
65
- export const blackKeys = [1, 3, 6, 8, 10];
66
- export const keyNames = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
67
- export const keys = Array.from({ length: 128 }).map((_, index) => ({
68
- number: index,
69
- name: `${keyNames[index % 12]} ${Math.floor(index / 12) - 2}`,
70
- isBlack: blackKeys.includes(index % 12),
71
- }));
72
- export default PianoRollKeys;