solid-pianoroll 0.0.24 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/{cjs/index.js → dev.cjs} +408 -430
  2. package/dist/dev.css +212 -0
  3. package/dist/dev.js +1330 -0
  4. package/dist/dev.jsx +1130 -0
  5. package/dist/index.cjs +1330 -0
  6. package/dist/index.css +212 -0
  7. package/dist/{types/usePianoRollState.d.ts → index.d.ts} +38 -6
  8. package/dist/{esm/index.js → index.js} +412 -429
  9. package/dist/index.jsx +1130 -0
  10. package/package.json +46 -34
  11. package/dist/cjs/index.js.map +0 -1
  12. package/dist/esm/index.js.map +0 -1
  13. package/dist/source/PianoRoll.jsx +0 -82
  14. package/dist/source/PianoRollContext.jsx +0 -11
  15. package/dist/source/PianoRollGrid.jsx +0 -64
  16. package/dist/source/PianoRollKeys.jsx +0 -72
  17. package/dist/source/PianoRollNotes.jsx +0 -160
  18. package/dist/source/PianoRollNotesScroller.jsx +0 -16
  19. package/dist/source/PianoRollScale.jsx +0 -43
  20. package/dist/source/PianoRollScrollZoomViewPort.jsx +0 -49
  21. package/dist/source/PianoRollTrackList.jsx +0 -27
  22. package/dist/source/PianoRollTrackListScroller.jsx +0 -16
  23. package/dist/source/index.jsx +0 -5
  24. package/dist/source/types.js +0 -1
  25. package/dist/source/useBoundingClientRect.js +0 -29
  26. package/dist/source/useNotes.js +0 -23
  27. package/dist/source/usePianoRollGrid.js +0 -45
  28. package/dist/source/usePianoRollState.js +0 -126
  29. package/dist/source/viewport/PlayHead.jsx +0 -43
  30. package/dist/source/viewport/ScrollZoomContainer.jsx +0 -104
  31. package/dist/source/viewport/ScrollZoomViewPort.jsx +0 -31
  32. package/dist/source/viewport/ZoomSliderControl.jsx +0 -29
  33. package/dist/source/viewport/createViewPortDimension.js +0 -51
  34. package/dist/types/PianoRoll.d.ts +0 -8
  35. package/dist/types/PianoRollContext.d.ts +0 -45
  36. package/dist/types/PianoRollGrid.d.ts +0 -2
  37. package/dist/types/PianoRollKeys.d.ts +0 -9
  38. package/dist/types/PianoRollNotes.d.ts +0 -5
  39. package/dist/types/PianoRollNotesScroller.d.ts +0 -3
  40. package/dist/types/PianoRollScale.d.ts +0 -2
  41. package/dist/types/PianoRollScrollZoomViewPort.d.ts +0 -3
  42. package/dist/types/PianoRollTrackList.d.ts +0 -2
  43. package/dist/types/PianoRollTrackListScroller.d.ts +0 -3
  44. package/dist/types/index.d.ts +0 -6
  45. package/dist/types/types.d.ts +0 -8
  46. package/dist/types/useBoundingClientRect.d.ts +0 -3
  47. package/dist/types/useNotes.d.ts +0 -9
  48. package/dist/types/usePianoRollGrid.d.ts +0 -13
  49. package/dist/types/viewport/PlayHead.d.ts +0 -8
  50. package/dist/types/viewport/ScrollZoomContainer.d.ts +0 -8
  51. package/dist/types/viewport/ScrollZoomViewPort.d.ts +0 -39
  52. package/dist/types/viewport/ZoomSliderControl.d.ts +0 -6
  53. package/dist/types/viewport/createViewPortDimension.d.ts +0 -40
@@ -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 \"./types\";\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 playHeadPosition: 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 playHeadPosition: 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\ntype PropNameToHandlerName<PropName extends string> = `on${Capitalize<PropName>}Change`;\n\ntype StateChangeHandlerObject = {\n [PropName in keyof typeof defaultState as PropNameToHandlerName<PropName>]: (\n value: typeof defaultState[PropName],\n originalEvent?: MouseEvent | KeyboardEvent,\n ) => void;\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 \"snapValueToGridIfEnabled\",\n] as (keyof ReturnType<typeof createPianoRollstate>)[];\n\nconst createPianoRollstate = (\n initialState?: Partial<PianoRollState & StateChangeHandlerObject>,\n) => {\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 const handlerName = propNameToHandlerName(entry[0]) as PropNameToHandlerName<typeof entry[0]>;\n return [\n handlerName,\n (value: typeof entry[1], originalEvent?: MouseEvent | KeyboardEvent) => {\n const handler = initialState?.[handlerName] as\n | ((value: typeof entry[1], originalEvent?: MouseEvent | KeyboardEvent) => void)\n | undefined;\n\n setState(entry[0], value);\n\n if (handler) {\n handler(value, originalEvent);\n }\n },\n ];\n }),\n ) as StateChangeHandlerObject;\n\n const onPlayheadPositionChange = (\n playheadPosition: number,\n originalEvent?: MouseEvent | KeyboardEvent,\n ) => {\n handlers.onPlayHeadPositionChange(\n snapValueToGridIfEnabled(playheadPosition, !!originalEvent?.altKey),\n );\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 const snapValueToGridIfEnabled = (value: number, altKey: boolean) => {\n const gridDivisionTicks = (state.ppq * 4) / state.gridDivision;\n\n return state.snapToGrid && !altKey\n ? Math.round(value / gridDivisionTicks) * gridDivisionTicks\n : value;\n };\n\n return mergeProps(state, {\n ...handlers,\n onNoteChange,\n onInsertNote,\n onRemoveNote,\n onNoteDown,\n onNoteUp,\n isKeyDown,\n snapValueToGridIfEnabled,\n onPlayheadPositionChange,\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\nexport type PianoRollContext = {\n showAllTracks?: boolean;\n showTrackList?: boolean;\n} & ReturnType<typeof createPianoRollstate>;\n\nconst PianoRollContext = createContext<PianoRollContext>();\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 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 = context.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 : context.snapValueToGridIfEnabled(\n horiontalPosition - note.ticks,\n mouseMoveEvent.altKey,\n ),\n }),\n ...(noteDragMode() === \"trimEnd\" && {\n ticks: ticks < note.ticks ? ticks : note.ticks,\n durationTicks:\n ticks < note.ticks\n ? note.ticks - ticks\n : context.snapValueToGridIfEnabled(\n horiontalPosition - note.ticks,\n mouseMoveEvent.altKey,\n ),\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 = context.snapValueToGridIfEnabled(\n horiontalPosition,\n mouseDownEvent.altKey,\n context,\n );\n\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\": `${track.color}`,\n\n opacity: (note.velocity / 128 + 2) / 3,\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\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollScale = () => {\n const horizontalViewPort = createMemo(() => useViewPortDimension(\"horizontal\"));\n const grid = usePianoRollGrid();\n const context = usePianoRollContext();\n\n const updatePlayheadPosition = (event: MouseEvent) => {\n const position = horizontalViewPort().calculatePosition(event.clientX);\n context.onPlayHeadPositionChange(position, event);\n };\n\n return (\n <div\n class={styles.PianoRollScale}\n onMouseDown={(event) => {\n updatePlayheadPosition(event);\n\n const handleMouseUp = () => {\n window.removeEventListener(\"mousemove\", updatePlayheadPosition);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n\n window.addEventListener(\"mousemove\", updatePlayheadPosition);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }}\n >\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 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 \"border-right\": \"1px black solid\",\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 <PianoRollNotesScroller>\n {allProps.children}\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\n <div style={{ flex: 1, position: \"relative\", overflow: \"hidden\" }}>\n <PianoRollGrid />\n <PianoRollNotes />\n </div>\n </div>\n </PianoRollNotesScroller>\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, event: MouseEvent) => 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 = (event: MouseEvent) => {\n const newPosition = viewPort.calculatePosition(event.clientX);\n props.onPositionChange?.(newPosition, event);\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","playHeadPosition","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","handlerName","value","originalEvent","handler","onPlayheadPositionChange","playheadPosition","onPlayHeadPositionChange","snapValueToGridIfEnabled","altKey","updateNotes","trackIndex","getNotes","track","notes","onTracksChange","onNoteChange","noteIndex","note","onInsertNote","newNoteIndex","Math","max","findIndex","ticks","onRemoveNote","updateKeyPressedState","keyNumber","onPressedKeysChange","onNoteDown","onNoteUp","isKeyDown","gridDivisionTicks","round","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","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","isDragging","setIsDragging","noteDragMode","setNoteDragMode","currentNoteIndex","setCurrentNoteIndex","currentNoteTrackIndex","setCurrentNoteTrackIndex","diffPosition","setDiffPosition","getInitialNote","setInitialNote","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","color","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","updatePlayheadPosition","PianoRoll","showTrackList","onModeChange","PianoRollContainer","PianoRollLeftColumn","PlayHead","sync","newPosition","leftPosition","cursor","useNotes","onNotesChange","splice"],"mappings":"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"}
@@ -1,82 +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
- "border-right": "1px black solid",
29
- }}>
30
- <button title={context.mode === "keys" ? "Tracks Mode" : "Keys Mode"} onClick={() => context.onModeChange(context.mode === "keys" ? "tracks" : "keys")} style={{
31
- "font-size": "16px",
32
- "line-height": "16px",
33
- cursor: "pointer",
34
- overflow: "hidden",
35
- }}>
36
- <div>{context.mode === "keys" ? "≡" : "🎹"}</div>
37
- </button>
38
- </div>
39
- </Show>
40
- <div style={{ flex: 1, display: "flex", overflow: "hidden" }}>
41
- <Show when={context.showTrackList}>
42
- <PianoRollTrackListScroller>
43
- <PianoRollTrackList />
44
- </PianoRollTrackListScroller>
45
- </Show>
46
- <Show when={context.mode === "keys"}>
47
- <PianoRollKeys />
48
- </Show>
49
- </div>
50
- </div>
51
-
52
- <PianoRollNotesScroller>
53
- {allProps.children}
54
- <div style={{
55
- width: "100%",
56
- display: "flex",
57
- height: "100%",
58
- "flex-direction": "column",
59
- overflow: "hidden",
60
- }}>
61
- <div style={{ height: "30px" }}>
62
- <PianoRollScale />
63
- </div>
64
-
65
- <div style={{ flex: 1, position: "relative", overflow: "hidden" }}>
66
- <PianoRollGrid />
67
- <PianoRollNotes />
68
- </div>
69
- </div>
70
- </PianoRollNotesScroller>
71
-
72
- <ZoomSliderControl orientation="vertical" disabled={context.mode !== "keys"}/>
73
- </div>
74
- <ZoomSliderControl orientation="horizontal" style={{
75
- "margin-left": `${context.tracksScrollerClientRect.width + 24}px`,
76
- "margin-right": "24px",
77
- }}/>
78
- </PianoRollScrollZoomViewPort>
79
- </div>
80
- </PianoRollContextProvider>);
81
- };
82
- 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;