solid-pianoroll 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +95 -23
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +95 -24
- package/dist/esm/index.js.map +1 -1
- package/dist/source/PianoRoll.jsx +1 -0
- package/dist/source/PianoRollNotes.jsx +2 -0
- package/dist/source/ScrollContainer.jsx +64 -15
- package/dist/source/index.jsx +2 -1
- package/dist/source/types.js +1 -0
- package/dist/source/usePianoRoll.js +32 -0
- package/dist/types/PianoRoll.d.ts +3 -3
- package/dist/types/index.d.ts +2 -1
- package/dist/types/types.d.ts +2 -0
- package/dist/types/usePianoRoll.d.ts +20 -0
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -281,6 +281,9 @@ const PianoRollNotes = props => {
|
|
|
281
281
|
window.addEventListener("mousemove", handleMouseMove);
|
|
282
282
|
window.addEventListener("mouseup", handleMouseUp);
|
|
283
283
|
};
|
|
284
|
+
_el$3.$$dblclick = () => {
|
|
285
|
+
context.onRemoveNote?.(index);
|
|
286
|
+
};
|
|
284
287
|
_el$3.$$mousemove = event => {
|
|
285
288
|
if (context.isDragging) return;
|
|
286
289
|
const relativeX = context.horizontalViewPort.getScaledValue(context.horizontalViewPort.getPosition(event.clientX));
|
|
@@ -334,7 +337,7 @@ const PianoRollNotes = props => {
|
|
|
334
337
|
return _el$;
|
|
335
338
|
})();
|
|
336
339
|
};
|
|
337
|
-
web.delegateEvents(["mousemove", "mousedown"]);
|
|
340
|
+
web.delegateEvents(["mousemove", "dblclick", "mousedown"]);
|
|
338
341
|
|
|
339
342
|
const _tmpl$$3 = /*#__PURE__*/web.template(`<div class="PianoRoll-Vertical-Scroller"><div></div></div>`, 4);
|
|
340
343
|
const ScrollContainer = props => {
|
|
@@ -342,8 +345,8 @@ const ScrollContainer = props => {
|
|
|
342
345
|
const context = usePianoRollContext();
|
|
343
346
|
const gridDivisorTicks = solidJs.createMemo(() => context.ppq * 4 / context.gridDivision);
|
|
344
347
|
const forwardEventToNote = event => {
|
|
345
|
-
const x = "clientX" in event ? event.clientX : event.touches[0]?.clientX;
|
|
346
|
-
const y = "clientY" in event ? event.clientY : event.touches[0]?.clientY;
|
|
348
|
+
const x = "clientX" in event ? event.clientX : event.touches[0]?.clientX ?? 0;
|
|
349
|
+
const y = "clientY" in event ? event.clientY : event.touches[0]?.clientY ?? 0;
|
|
347
350
|
const elementUnderMouse = [...(context.notesContainer?.querySelectorAll?.("div") ?? [])].find(element => {
|
|
348
351
|
const rect = element.getBoundingClientRect();
|
|
349
352
|
return x >= rect.left && rect.left + rect.width > x && y >= rect.top && rect.top + rect.height > y;
|
|
@@ -398,6 +401,30 @@ const ScrollContainer = props => {
|
|
|
398
401
|
top: scrollTop
|
|
399
402
|
});
|
|
400
403
|
});
|
|
404
|
+
const insertOrUpdateNote = event => {
|
|
405
|
+
const position = context.horizontalViewPort.getPosition(event.clientX);
|
|
406
|
+
const midi = 127 - Math.floor(context.verticalViewPort.getPosition(event.clientY));
|
|
407
|
+
const eventPositionTicks = Math.floor(position / gridDivisorTicks()) * gridDivisorTicks();
|
|
408
|
+
const velocity = 127;
|
|
409
|
+
const existingNote = newNote();
|
|
410
|
+
const ticks = existingNote?.ticks ?? eventPositionTicks;
|
|
411
|
+
const durationTicks = existingNote?.ticks ? eventPositionTicks - existingNote?.ticks : gridDivisorTicks();
|
|
412
|
+
const note = {
|
|
413
|
+
midi,
|
|
414
|
+
ticks,
|
|
415
|
+
durationTicks,
|
|
416
|
+
velocity
|
|
417
|
+
};
|
|
418
|
+
if (existingNote) {
|
|
419
|
+
context.onNoteChange?.(newNoteIndex(), note);
|
|
420
|
+
return newNoteIndex();
|
|
421
|
+
} else {
|
|
422
|
+
return context.onInsertNote?.(note) ?? -1;
|
|
423
|
+
}
|
|
424
|
+
};
|
|
425
|
+
const [newNoteIndex, setNewNoteIndex] = solidJs.createSignal(-1);
|
|
426
|
+
const newNote = solidJs.createMemo(() => context.notes[newNoteIndex()]);
|
|
427
|
+
const [isMouseDown, setIsMouseDown] = solidJs.createSignal(false);
|
|
401
428
|
return (() => {
|
|
402
429
|
const _el$ = _tmpl$$3.cloneNode(true),
|
|
403
430
|
_el$2 = _el$.firstChild;
|
|
@@ -408,30 +435,43 @@ const ScrollContainer = props => {
|
|
|
408
435
|
_el$.$$touchend = forwardEventToNote;
|
|
409
436
|
_el$.$$touchmove = forwardEventToNote;
|
|
410
437
|
_el$.$$touchstart = forwardEventToNote;
|
|
411
|
-
_el$.$$mouseup =
|
|
412
|
-
|
|
413
|
-
if (
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
durationTicks,
|
|
423
|
-
velocity
|
|
424
|
-
};
|
|
425
|
-
context.onInsertNote?.(note);
|
|
438
|
+
_el$.$$mouseup = event => {
|
|
439
|
+
setIsMouseDown(false);
|
|
440
|
+
if (newNote()) return;
|
|
441
|
+
if (forwardEventToNote(event)) return;
|
|
442
|
+
if (!event.altKey) return;
|
|
443
|
+
insertOrUpdateNote(event);
|
|
444
|
+
};
|
|
445
|
+
_el$.$$click = event => {
|
|
446
|
+
if (newNote()) {
|
|
447
|
+
setNewNoteIndex(-1);
|
|
448
|
+
return;
|
|
426
449
|
}
|
|
450
|
+
if (forwardEventToNote(event)) return;
|
|
451
|
+
if (!event.altKey) return;
|
|
452
|
+
insertOrUpdateNote(event);
|
|
453
|
+
};
|
|
454
|
+
_el$.$$dblclick = event => {
|
|
455
|
+
if (newNote()) return;
|
|
456
|
+
if (context.isDragging) return;
|
|
457
|
+
if (forwardEventToNote(event)) return;
|
|
458
|
+
insertOrUpdateNote(event);
|
|
427
459
|
};
|
|
428
|
-
_el$.$$click = forwardEventToNote;
|
|
429
460
|
_el$.$$mousemove = event => {
|
|
461
|
+
event.preventDefault();
|
|
430
462
|
if (forwardEventToNote(event)) return;
|
|
431
463
|
if (context.isDragging) return;
|
|
432
|
-
|
|
464
|
+
if (!isMouseDown()) {
|
|
465
|
+
context.onNoteDragModeChange(undefined);
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
468
|
+
const index = insertOrUpdateNote(event);
|
|
469
|
+
setNewNoteIndex(index);
|
|
470
|
+
};
|
|
471
|
+
_el$.$$mousedown = event => {
|
|
472
|
+
if (forwardEventToNote(event)) return;
|
|
473
|
+
setIsMouseDown(true);
|
|
433
474
|
};
|
|
434
|
-
_el$.$$mousedown = forwardEventToNote;
|
|
435
475
|
_el$.addEventListener("scroll", handleScroll);
|
|
436
476
|
const _ref$ = props.ref;
|
|
437
477
|
typeof _ref$ === "function" ? web.use(_ref$, _el$) : props.ref = _el$;
|
|
@@ -449,7 +489,7 @@ const ScrollContainer = props => {
|
|
|
449
489
|
return _el$;
|
|
450
490
|
})();
|
|
451
491
|
};
|
|
452
|
-
web.delegateEvents(["mousedown", "mousemove", "
|
|
492
|
+
web.delegateEvents(["mousedown", "mousemove", "dblclick", "click", "mouseup", "touchstart", "touchmove", "touchend"]);
|
|
453
493
|
|
|
454
494
|
const _tmpl$$2 = /*#__PURE__*/web.template(`<input type="range" min="1" max="11" step="0.01">`, 1);
|
|
455
495
|
const VerticalZoomControl = () => {
|
|
@@ -586,7 +626,7 @@ const PianoRollGrid = () => {
|
|
|
586
626
|
|
|
587
627
|
const _tmpl$ = /*#__PURE__*/web.template(`<div><div><div></div></div></div>`, 6);
|
|
588
628
|
const PianoRoll = allProps => {
|
|
589
|
-
const [contextProps, divProps] = solidJs.splitProps(allProps, ["ppq", "notes", "position", "duration", "zoom", "verticalPosition", "verticalZoom", "onVerticalZoomChange", "onVerticalPositionChange", "onZoomChange", "onPositionChange", "onNoteChange", "gridDivision", "snapToGrid", "onInsertNote"]);
|
|
629
|
+
const [contextProps, divProps] = solidJs.splitProps(allProps, ["ppq", "notes", "position", "duration", "zoom", "verticalPosition", "verticalZoom", "onVerticalZoomChange", "onVerticalPositionChange", "onZoomChange", "onPositionChange", "onNoteChange", "gridDivision", "snapToGrid", "onInsertNote", "onRemoveNote"]);
|
|
590
630
|
const [scrollContainer, setScrollContainer] = solidJs.createSignal();
|
|
591
631
|
const [notesContainer, setNotesContainer] = solidJs.createSignal();
|
|
592
632
|
return web.createComponent(PianoRollContextProvider, web.mergeProps(contextProps, {
|
|
@@ -630,5 +670,37 @@ const PianoRoll = allProps => {
|
|
|
630
670
|
}));
|
|
631
671
|
};
|
|
632
672
|
|
|
673
|
+
const usePianoRoll = () => {
|
|
674
|
+
const [position, setPosition] = solidJs.createSignal(0);
|
|
675
|
+
const [zoom, setZoom] = solidJs.createSignal(10);
|
|
676
|
+
const [verticalZoom, setVerticalZoom] = solidJs.createSignal(5);
|
|
677
|
+
const [verticalPosition, setVerticalPosition] = solidJs.createSignal(64);
|
|
678
|
+
const [gridDivision, setGridDivision] = solidJs.createSignal(16);
|
|
679
|
+
const [snapToGrid, setSnapToGrid] = solidJs.createSignal(true);
|
|
680
|
+
const [notes, setNotes] = solidJs.createSignal([]);
|
|
681
|
+
const [duration, setDuration] = solidJs.createSignal(0);
|
|
682
|
+
solidJs.createEffect(() => {
|
|
683
|
+
setDuration((notes()[notes().length - 1]?.ticks ?? 0) + (notes()[notes().length - 1]?.durationTicks ?? 0));
|
|
684
|
+
});
|
|
685
|
+
return {
|
|
686
|
+
position,
|
|
687
|
+
setPosition,
|
|
688
|
+
zoom,
|
|
689
|
+
setZoom,
|
|
690
|
+
verticalPosition,
|
|
691
|
+
setVerticalPosition,
|
|
692
|
+
verticalZoom,
|
|
693
|
+
setVerticalZoom,
|
|
694
|
+
gridDivision,
|
|
695
|
+
setGridDivision,
|
|
696
|
+
snapToGrid,
|
|
697
|
+
setSnapToGrid,
|
|
698
|
+
notes,
|
|
699
|
+
setNotes,
|
|
700
|
+
duration
|
|
701
|
+
};
|
|
702
|
+
};
|
|
703
|
+
|
|
633
704
|
exports.PianoRoll = PianoRoll;
|
|
705
|
+
exports.usePianoRoll = usePianoRoll;
|
|
634
706
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../node_modules/style-inject/dist/style-inject.es.js","../../src/useBoundingClientRect.ts","../../src/helpers.ts","../../src/useViewPortScaler.ts","../../src/PianoRollContext.tsx","../../src/HorizontalZoomControl.tsx","../../src/PianoRollKeys.tsx","../../src/PianoRollNotes.tsx","../../src/ScrollContainer.tsx","../../src/VerticalZoomControl.tsx","../../src/PianoRollGrid.tsx","../../src/PianoRoll.tsx"],"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 { Accessor, createEffect, createSignal, onCleanup, onMount } 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","export const clamp = (value: number, min: number, max: number) => {\n return Math.max(min, Math.min(max, value));\n};\n","import { createMemo } from \"solid-js\";\nimport { clamp } from \"./helpers\";\n\nexport type ViewPortScaler = ReturnType<typeof useViewPortScaler>;\n\nexport default function useViewPortScaler(\n getState: () => {\n virtualPosition: number;\n virtualRange: number;\n\n viewPortOffset: number;\n viewPortSize: number;\n\n zoom: number;\n },\n) {\n const state = createMemo(() => getState());\n\n function getScaledValue(position: number) {\n const virtualSize = state().viewPortSize * state().zoom;\n return (position / state().virtualRange) * virtualSize;\n }\n\n function getCoordinates(position: number) {\n return getScaledValue(position) - getScaledValue(state().virtualPosition);\n }\n\n function getPosition(offset: number) {\n const visibleDuration = state().virtualRange / state().zoom;\n const percentX = (offset - state().viewPortOffset) / state().viewPortSize;\n const position = state().virtualPosition + percentX * visibleDuration;\n\n return position;\n }\n\n function getVirtualDimensions(position: number, length: number) {\n const virtualLeft = getCoordinates(position);\n const virtualWidth = getScaledValue(length);\n\n const offset = clamp(virtualLeft, 0, state().viewPortSize);\n const size = clamp(virtualWidth - (offset - virtualLeft), 0, state().viewPortSize - offset);\n\n return { offset, size };\n }\n\n return {\n getScaledValue,\n getCoordinates,\n getPosition,\n getVirtualDimensions,\n };\n}\n","import {\n createContext,\n createEffect,\n createMemo,\n createSignal,\n JSX,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\n\nimport { PianoRollProps } from \"./PianoRoll\";\nimport useBoundingClientRect, { ClientRect } from \"./useBoundingClientRect\";\nimport useViewPortScaler, { ViewPortScaler } from \"./useViewPortScaler\";\n\nexport type NoteDragMode = \"trimStart\" | \"move\" | \"trimEnd\" | undefined;\ntype PianoRollContext = {\n horizontalViewPort: ViewPortScaler;\n verticalViewPort: ViewPortScaler;\n clientRect: ClientRect;\n\n notesContainer?: HTMLDivElement;\n\n isDragging: boolean;\n onIsDraggingChange: (isDragging: boolean) => void;\n\n noteDragMode: NoteDragMode;\n onNoteDragModeChange: (isDragging: NoteDragMode) => void;\n} & PianoRollProps;\n\nconst PianoRollContext = createContext<PianoRollContext>(undefined!);\n\nexport const PianoRollContextProvider = (\n props: {\n scrollContainer?: HTMLDivElement;\n notesContainer?: HTMLDivElement;\n\n children: JSX.Element;\n } & PianoRollProps,\n) => {\n const [noteDragMode, setNoteDragMode] = createSignal<NoteDragMode>();\n const [isDragging, setIsDragging] = createSignal(false);\n\n const [_ownProps, contextProps] = splitProps(props, [\"children\", \"scrollContainer\"]);\n const clientRect = useBoundingClientRect(() => props.scrollContainer);\n\n const horizontalViewPort = useViewPortScaler(() => ({\n viewPortOffset: clientRect().left,\n viewPortSize: clientRect().width,\n\n virtualPosition: props.position,\n virtualRange: props.duration,\n zoom: props.zoom,\n }));\n\n const verticalViewPort = useViewPortScaler(() => ({\n viewPortOffset: clientRect().top,\n viewPortSize: clientRect().height,\n\n virtualPosition: props.verticalPosition,\n zoom: props.verticalZoom,\n\n virtualRange: 128,\n }));\n\n const getContextValue = () => {\n return {\n ...contextProps,\n horizontalViewPort,\n verticalViewPort,\n clientRect: clientRect(),\n\n isDragging: isDragging(),\n onIsDraggingChange: setIsDragging,\n\n noteDragMode: noteDragMode(),\n onNoteDragModeChange: setNoteDragMode,\n };\n };\n\n const [contextValue, setContextValue] = createStore<PianoRollContext>(getContextValue());\n\n createEffect(() => {\n setContextValue(getContextValue());\n });\n\n return (\n <PianoRollContext.Provider value={contextValue}>{props.children}</PianoRollContext.Provider>\n );\n};\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","import { usePianoRollContext } from \"./PianoRollContext\";\n\nconst HorizontalZoomControl = () => {\n const context = usePianoRollContext();\n\n return (\n <input\n value={context.zoom}\n onInput={(event) => context.onZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n max=\"500\"\n min=\"1\"\n step={0.01}\n style={{\n \"margin-left\": \"50px\",\n \"margin-right\": \"16px\",\n }}\n />\n );\n};\n\nexport default HorizontalZoomControl;\n","import styles from \"./PianoRollKeys.module.css\";\nimport { createMemo, Index, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollKeys = () => {\n const context = usePianoRollContext();\n\n return (\n <div class={styles.PianoRollKeys}>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n context.verticalViewPort.getVirtualDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollKeys-Key\"]}\n title={key().name}\n data-index={key().number % 12}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n \"background-color\": key().isBlack ? \"#000\" : \"#fff\",\n \"border-width\": `${\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12) ? \"0.1px\" : 0\n } 1px ${\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12) ? \"0.1px\" : 0\n } 0`,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </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 { createEffect, createMemo, Index, Ref, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollNotes = (props: { ref: Ref<HTMLDivElement | undefined> }) => {\n const context = usePianoRollContext();\n\n const gridDivisionTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n\n const snapValueToGridIfEnabled = (value: number, altKey: boolean) =>\n context.snapToGrid && !altKey\n ? Math.round(value / gridDivisionTicks()) * gridDivisionTicks()\n : value;\n\n return (\n <div\n class=\"PianoRoll-Notes-Container\"\n style={{\n position: \"absolute\",\n width: `${context.clientRect.width}px`,\n height: `${context.clientRect.height}px`,\n }}\n >\n <div\n class=\"PianoRoll-Notes\"\n ref={props.ref}\n style={{\n position: \"relative\",\n width: `${context.clientRect.width}px`,\n height: \"100%\",\n }}\n >\n <Index each={context.notes}>\n {(note, index) => {\n const horizontalVirtualDimensions = createMemo(() =>\n context.verticalViewPort.getVirtualDimensions(127 - note().midi, 1),\n );\n\n const verticalVirtualDimensions = createMemo(() =>\n context.horizontalViewPort.getVirtualDimensions(note().ticks, note().durationTicks),\n );\n\n return (\n <Show\n when={!!horizontalVirtualDimensions().size && !!verticalVirtualDimensions().size}\n >\n <div\n class=\"PianoRoll-Note\"\n onMouseMove={(event) => {\n if (context.isDragging) return;\n\n const relativeX = context.horizontalViewPort.getScaledValue(\n context.horizontalViewPort.getPosition(event.clientX),\n );\n const noteStartX = context.horizontalViewPort.getScaledValue(note().ticks);\n const noteEndX = context.horizontalViewPort.getScaledValue(\n note().ticks + note().durationTicks,\n );\n\n context.onNoteDragModeChange(\n relativeX - noteStartX < 3\n ? \"trimStart\"\n : noteEndX - relativeX < 3\n ? \"trimEnd\"\n : \"move\",\n );\n }}\n onMouseDown={(event) => {\n context.onIsDraggingChange(true);\n const initialPosition = context.horizontalViewPort.getPosition(event.clientX);\n const diffPosition = initialPosition - note().ticks;\n\n const handleMouseMove = (mouseMoveEvent: MouseEvent) => {\n const ticks = snapValueToGridIfEnabled(\n Math.max(\n context.horizontalViewPort.getPosition(mouseMoveEvent.clientX) -\n diffPosition,\n 0,\n ),\n mouseMoveEvent.altKey,\n );\n\n context.onNoteChange?.(index, {\n ...note(),\n ...(context.noteDragMode === \"move\" && {\n midi: Math.round(\n 127 - context.verticalViewPort.getPosition(mouseMoveEvent.clientY),\n ),\n }),\n ...((context.noteDragMode === \"move\" ||\n context.noteDragMode === \"trimStart\") && {\n ticks,\n }),\n ...(context.noteDragMode === \"trimStart\" && {\n durationTicks: note().durationTicks + note().ticks - ticks,\n }),\n ...(context.noteDragMode === \"trimEnd\" && {\n durationTicks: snapValueToGridIfEnabled(\n context.horizontalViewPort.getPosition(mouseMoveEvent.clientX) -\n note().ticks,\n mouseMoveEvent.altKey,\n ),\n }),\n });\n };\n const handleMouseUp = () => {\n context.onIsDraggingChange(false);\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }}\n style={{\n \"z-index\": 2,\n position: \"absolute\",\n \"box-sizing\": \"border-box\",\n top: `${horizontalVirtualDimensions().offset}px`,\n height: `${horizontalVirtualDimensions().size}px`,\n left: `${verticalVirtualDimensions().offset}px`,\n width: `${verticalVirtualDimensions().size}px`,\n \"border-width\": \"0.5px\",\n \"border-style\": \"solid\",\n \"background-color\": `rgba(255,0,0, ${(128 + note().velocity) / 256})`,\n \"border-color\": \"#a00\",\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </div>\n </div>\n );\n};\n\nexport default PianoRollNotes;\n","import { createEffect, createMemo, Ref } from \"solid-js\";\nimport { clamp } from \"./helpers\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst ScrollContainer = (props: { ref: Ref<HTMLDivElement> }) => {\n let scrollContentRef: HTMLDivElement | undefined;\n const context = usePianoRollContext();\n\n const gridDivisorTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n\n const forwardEventToNote = (event: MouseEvent | PointerEvent | TouchEvent) => {\n const x = \"clientX\" in event ? event.clientX : event.touches[0]?.clientX;\n const y = \"clientY\" in event ? event.clientY : event.touches[0]?.clientY;\n\n const elementUnderMouse = [...(context.notesContainer?.querySelectorAll?.(\"div\") ?? [])].find(\n (element) => {\n const rect = element.getBoundingClientRect();\n\n return (\n x >= rect.left &&\n rect.left + rect.width > x &&\n y >= rect.top &&\n rect.top + rect.height > y\n );\n },\n );\n\n if (elementUnderMouse) {\n return elementUnderMouse.dispatchEvent(new MouseEvent(event.type, event));\n }\n };\n\n const handleScroll = (event: UIEvent & { currentTarget: Element }) => {\n event.preventDefault();\n\n if (didUpdateScroll) {\n didUpdateScroll = false;\n return;\n }\n const maxVerticalPosition = 128 - 128 / context.verticalZoom;\n const maxPosition = context.duration - context.duration / context.zoom;\n\n const { width, height } = context.clientRect;\n const { scrollTop, scrollLeft, scrollWidth, scrollHeight } = event.currentTarget;\n\n const scrollTopAmount = scrollTop / (scrollHeight - height);\n const scrollLeftAmount = scrollLeft / (scrollWidth - width);\n\n context.onVerticalPositionChange?.(maxVerticalPosition * scrollTopAmount);\n context.onPositionChange?.(maxPosition * scrollLeftAmount);\n };\n\n let didUpdateScroll = false;\n\n createEffect(() => {\n const maxVerticalPosition = 128 - 128 / context.verticalZoom;\n const maxPosition = context.duration - context.duration / context.zoom;\n\n const scrollTopAmount =\n maxVerticalPosition > 0 ? context.verticalPosition / maxVerticalPosition : 0;\n const scrollLeftAmount = maxPosition > 0 ? context.position / maxPosition : 0;\n\n const { height, width } = context.clientRect;\n\n if (!scrollContentRef?.parentElement) return;\n\n const scrollDivHeight = clamp(context.verticalZoom * height, height, 10000);\n const scrollTop = scrollTopAmount * (scrollDivHeight - height);\n\n const scrollDivWidth = clamp(context.zoom * width, width, 10000);\n const scrollLeft = scrollLeftAmount * (scrollDivWidth - width);\n\n didUpdateScroll = true;\n\n scrollContentRef.style.height = `${scrollDivHeight}px`;\n scrollContentRef.style.width = `${scrollDivWidth}px`;\n\n scrollContentRef.parentElement.scrollTo({\n left: scrollLeft,\n top: scrollTop,\n });\n });\n\n return (\n <div\n ref={props.ref}\n class=\"PianoRoll-Vertical-Scroller\"\n style={{\n flex: 1,\n ...(context.noteDragMode && {\n cursor:\n context.noteDragMode === \"trimStart\"\n ? \"w-resize\"\n : context.noteDragMode === \"trimEnd\"\n ? \"e-resize\"\n : \"pointer\",\n }),\n \"z-index\": 4,\n overflow: \"scroll\",\n \"pointer-events\": \"auto\",\n }}\n onScroll={handleScroll}\n onMouseDown={forwardEventToNote}\n onMouseMove={(event) => {\n if (forwardEventToNote(event)) return;\n if (context.isDragging) return;\n context.onNoteDragModeChange(undefined);\n }}\n onClick={forwardEventToNote}\n onDblClick={(event) => {\n if (!forwardEventToNote(event)) {\n const position = context.horizontalViewPort.getPosition(event.clientX);\n const midi = 127 - Math.floor(context.verticalViewPort.getPosition(event.clientY));\n\n const ticks = Math.floor(position / gridDivisorTicks()) * gridDivisorTicks();\n const durationTicks = gridDivisorTicks();\n const velocity = 127;\n\n const note = { midi, ticks, durationTicks, velocity };\n\n context.onInsertNote?.(note);\n }\n }}\n onMouseUp={forwardEventToNote}\n onTouchStart={forwardEventToNote}\n onTouchMove={forwardEventToNote}\n onTouchEnd={forwardEventToNote}\n onTouchCancel={forwardEventToNote}\n onDragStart={forwardEventToNote}\n onDrag={forwardEventToNote}\n onDragEnd={forwardEventToNote}\n >\n <div ref={scrollContentRef}></div>\n </div>\n );\n};\n\nexport default ScrollContainer;\n","import { usePianoRollContext } from \"./PianoRollContext\";\n\nconst VerticalZoomControl = () => {\n const context = usePianoRollContext();\n\n return (\n <input\n value={context.verticalZoom}\n onInput={(event) => context.onVerticalZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n min=\"1\"\n max=\"11\"\n step={0.01}\n {...{ orient: \"vertical\" }}\n style={{\n width: \"16px\",\n ...({\n \"writing-mode\": \"bt-lr\" /* IE */,\n \"-webkit-appearance\": \"slider-vertical\" /* WebKit */,\n } as any),\n }}\n />\n );\n};\n\nexport default VerticalZoomControl;\n","import { createEffect, createMemo, Index, Ref, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { blackKeys, keys } from \"./PianoRollKeys\";\n\nconst PianoRollGrid = () => {\n const context = usePianoRollContext();\n\n const gridDivisorTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n const gridArray = createMemo(() => {\n const numberOfLines = context.duration / gridDivisorTicks();\n return Array.from({ length: numberOfLines }).map((_, index) => index * gridDivisorTicks());\n });\n\n return (\n <div\n class=\"PianoRoll-Grid-Container\"\n style={{\n position: \"absolute\",\n width: `${context.clientRect.width}px`,\n height: `${context.clientRect.height}px`,\n }}\n >\n <div\n class=\"PianoRoll-Grid\"\n style={{\n position: \"relative\",\n width: `${context.clientRect.width}px`,\n height: \"100%\",\n }}\n >\n <Index each={gridArray()}>\n {(tick, index) => {\n const virtualDimensions = createMemo(() =>\n context.horizontalViewPort.getVirtualDimensions(tick(), gridDivisorTicks()),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class=\"PianoRoll-Grid-Time\"\n style={{\n \"z-index\": 1,\n position: \"absolute\",\n \"box-sizing\": \"border-box\",\n background: index % 4 === 0 ? \"#ccc\" : \"#ddd\",\n top: `0px`,\n height: `100%`,\n left: `${virtualDimensions().offset}px`,\n width: `${virtualDimensions().size}px`,\n \"border-left\": \"1px gray solid\",\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n context.verticalViewPort.getVirtualDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class=\"PianoRoll-Grid-Key\"\n style={{\n position: \"absolute\",\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n width: \"100%\",\n \"background-color\": key().isBlack ? \"rgba(0,0,0,0.2)\" : \"none\",\n \"border-style\": \"solid\",\n \"border-color\": \"gray\",\n \"border-width\": `${\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12) ? \"0.1px\" : 0\n } 1px ${\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12) ? \"0.1px\" : 0\n } 0`,\n \"z-index\": 1,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </div>\n </div>\n );\n};\n\nexport default PianoRollGrid;\n","import styles from \"./PianoRoll.module.css\";\nimport { Midi } from \"@tonejs/midi\";\n\nimport { JSX, splitProps, createSignal } from \"solid-js\";\nimport HorizontalZoomControl from \"./HorizontalZoomControl\";\n\nimport { PianoRollContextProvider } from \"./PianoRollContext\";\nimport PianoRollKeys from \"./PianoRollKeys\";\nimport PianoRollNotes from \"./PianoRollNotes\";\nimport ScrollContainer from \"./ScrollContainer\";\nimport VerticalZoomControl from \"./VerticalZoomControl\";\nimport PianoRollGrid from \"./PianoRollGrid\";\n\ntype Note = Pick<\n ReturnType<Midi[\"tracks\"][number][\"notes\"][number][\"toJSON\"]>,\n \"durationTicks\" | \"midi\" | \"ticks\" | \"velocity\"\n>;\n\nexport type GridDivision = 1 | 2 | 4 | 8 | 16 | 32 | 64;\n\nexport type PianoRollProps = {\n ppq: number;\n notes: Note[];\n\n gridDivision: GridDivision;\n snapToGrid: boolean;\n\n verticalPosition: number;\n verticalZoom: number;\n\n position: number;\n duration: number;\n zoom: number;\n\n onVerticalZoomChange?: (zoom: number) => void;\n onVerticalPositionChange?: (zoom: number) => void;\n onZoomChange?: (zoom: number) => void;\n onPositionChange?: (zoom: number) => void;\n\n onNoteChange?: (index: number, note: Note) => void;\n onInsertNote?: (note: Note) => void;\n};\n\nconst PianoRoll = (allProps: PianoRollProps & JSX.IntrinsicElements[\"div\"]) => {\n const [contextProps, divProps] = splitProps(allProps, [\n \"ppq\",\n \"notes\",\n \"position\",\n \"duration\",\n \"zoom\",\n \"verticalPosition\",\n \"verticalZoom\",\n \"onVerticalZoomChange\",\n \"onVerticalPositionChange\",\n \"onZoomChange\",\n \"onPositionChange\",\n \"onNoteChange\",\n \"gridDivision\",\n \"snapToGrid\",\n \"onInsertNote\",\n ]);\n\n const [scrollContainer, setScrollContainer] = createSignal<HTMLDivElement>();\n const [notesContainer, setNotesContainer] = createSignal<HTMLDivElement>();\n\n return (\n <PianoRollContextProvider\n {...contextProps}\n scrollContainer={scrollContainer()}\n notesContainer={notesContainer()}\n >\n <div {...divProps} class={styles.PianoRoll}>\n <div class={styles.PianoRollContainer}>\n <PianoRollKeys />\n\n <div class={styles.PianoRollInnerContainer}>\n <PianoRollNotes ref={setNotesContainer} />\n <PianoRollGrid />\n <ScrollContainer ref={setScrollContainer} />\n </div>\n\n <VerticalZoomControl />\n </div>\n\n <HorizontalZoomControl />\n </div>\n </PianoRollContextProvider>\n );\n};\n\nexport default PianoRoll;\n"],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","defaultRect","left","width","top","height","bottom","right","x","y","useBoundingClientRect","containerRef","boundingClientRect","setBoundingClientRect","createSignal","createEffect","container","updateBoundingClientRect","getBoundingClientRect","resizeObserver","ResizeObserver","observe","disconnect","clamp","value","min","max","Math","useViewPortScaler","getState","state","createMemo","getScaledValue","position","virtualSize","viewPortSize","zoom","virtualRange","getCoordinates","virtualPosition","getPosition","offset","visibleDuration","percentX","viewPortOffset","getVirtualDimensions","length","virtualLeft","virtualWidth","size","PianoRollContext","createContext","undefined","PianoRollContextProvider","props","noteDragMode","setNoteDragMode","isDragging","setIsDragging","_ownProps","contextProps","splitProps","clientRect","scrollContainer","horizontalViewPort","duration","verticalViewPort","verticalPosition","verticalZoom","getContextValue","onIsDraggingChange","onNoteDragModeChange","contextValue","setContextValue","createStore","_$createComponent","children","usePianoRollContext","context","useContext","Error","HorizontalZoomControl","_tmpl$","event","onZoomChange","currentTarget","valueAsNumber","_$effect","_$delegateEvents","PianoRollKeys","_$insert","Index","keys","key","virtualDimensions","number","Show","styles","name","isBlack","blackKeys","includes","_$className","_$setAttribute","keyNames","Array","from","map","_","index","floor","PianoRollNotes","gridDivisionTicks","ppq","gridDivision","snapValueToGridIfEnabled","altKey","snapToGrid","round","notes","note","horizontalVirtualDimensions","midi","verticalVirtualDimensions","ticks","durationTicks","_$memo","_tmpl$2","initialPosition","clientX","diffPosition","handleMouseMove","mouseMoveEvent","onNoteChange","clientY","handleMouseUp","window","removeEventListener","addEventListener","relativeX","noteStartX","noteEndX","velocity","ScrollContainer","scrollContentRef","gridDivisorTicks","forwardEventToNote","touches","elementUnderMouse","notesContainer","querySelectorAll","find","element","rect","dispatchEvent","MouseEvent","handleScroll","preventDefault","didUpdateScroll","maxVerticalPosition","maxPosition","scrollTop","scrollLeft","scrollWidth","scrollHeight","scrollTopAmount","scrollLeftAmount","onVerticalPositionChange","onPositionChange","parentElement","scrollDivHeight","scrollDivWidth","scrollTo","onInsertNote","_$use","_$style","flex","cursor","overflow","VerticalZoomControl","onVerticalZoomChange","_$spread","_$mergeProps","orient","PianoRollGrid","gridArray","numberOfLines","tick","PianoRoll","allProps","divProps","setScrollContainer","setNotesContainer","PianoRollContainer","PianoRollInnerContainer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../node_modules/style-inject/dist/style-inject.es.js","../../src/useBoundingClientRect.ts","../../src/helpers.ts","../../src/useViewPortScaler.ts","../../src/PianoRollContext.tsx","../../src/HorizontalZoomControl.tsx","../../src/PianoRollKeys.tsx","../../src/PianoRollNotes.tsx","../../src/ScrollContainer.tsx","../../src/VerticalZoomControl.tsx","../../src/PianoRollGrid.tsx","../../src/PianoRoll.tsx","../../src/usePianoRoll.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { Accessor, createEffect, createSignal, onCleanup, onMount } 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","export const clamp = (value: number, min: number, max: number) => {\n return Math.max(min, Math.min(max, value));\n};\n","import { createMemo } from \"solid-js\";\nimport { clamp } from \"./helpers\";\n\nexport type ViewPortScaler = ReturnType<typeof useViewPortScaler>;\n\nexport default function useViewPortScaler(\n getState: () => {\n virtualPosition: number;\n virtualRange: number;\n\n viewPortOffset: number;\n viewPortSize: number;\n\n zoom: number;\n },\n) {\n const state = createMemo(() => getState());\n\n function getScaledValue(position: number) {\n const virtualSize = state().viewPortSize * state().zoom;\n return (position / state().virtualRange) * virtualSize;\n }\n\n function getCoordinates(position: number) {\n return getScaledValue(position) - getScaledValue(state().virtualPosition);\n }\n\n function getPosition(offset: number) {\n const visibleDuration = state().virtualRange / state().zoom;\n const percentX = (offset - state().viewPortOffset) / state().viewPortSize;\n const position = state().virtualPosition + percentX * visibleDuration;\n\n return position;\n }\n\n function getVirtualDimensions(position: number, length: number) {\n const virtualLeft = getCoordinates(position);\n const virtualWidth = getScaledValue(length);\n\n const offset = clamp(virtualLeft, 0, state().viewPortSize);\n const size = clamp(virtualWidth - (offset - virtualLeft), 0, state().viewPortSize - offset);\n\n return { offset, size };\n }\n\n return {\n getScaledValue,\n getCoordinates,\n getPosition,\n getVirtualDimensions,\n };\n}\n","import {\n createContext,\n createEffect,\n createMemo,\n createSignal,\n JSX,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\n\nimport { PianoRollProps } from \"./PianoRoll\";\nimport useBoundingClientRect, { ClientRect } from \"./useBoundingClientRect\";\nimport useViewPortScaler, { ViewPortScaler } from \"./useViewPortScaler\";\n\nexport type NoteDragMode = \"trimStart\" | \"move\" | \"trimEnd\" | undefined;\ntype PianoRollContext = {\n horizontalViewPort: ViewPortScaler;\n verticalViewPort: ViewPortScaler;\n clientRect: ClientRect;\n\n notesContainer?: HTMLDivElement;\n\n isDragging: boolean;\n onIsDraggingChange: (isDragging: boolean) => void;\n\n noteDragMode: NoteDragMode;\n onNoteDragModeChange: (isDragging: NoteDragMode) => void;\n} & PianoRollProps;\n\nconst PianoRollContext = createContext<PianoRollContext>(undefined!);\n\nexport const PianoRollContextProvider = (\n props: {\n scrollContainer?: HTMLDivElement;\n notesContainer?: HTMLDivElement;\n\n children: JSX.Element;\n } & PianoRollProps,\n) => {\n const [noteDragMode, setNoteDragMode] = createSignal<NoteDragMode>();\n const [isDragging, setIsDragging] = createSignal(false);\n\n const [_ownProps, contextProps] = splitProps(props, [\"children\", \"scrollContainer\"]);\n const clientRect = useBoundingClientRect(() => props.scrollContainer);\n\n const horizontalViewPort = useViewPortScaler(() => ({\n viewPortOffset: clientRect().left,\n viewPortSize: clientRect().width,\n\n virtualPosition: props.position,\n virtualRange: props.duration,\n zoom: props.zoom,\n }));\n\n const verticalViewPort = useViewPortScaler(() => ({\n viewPortOffset: clientRect().top,\n viewPortSize: clientRect().height,\n\n virtualPosition: props.verticalPosition,\n zoom: props.verticalZoom,\n\n virtualRange: 128,\n }));\n\n const getContextValue = () => {\n return {\n ...contextProps,\n horizontalViewPort,\n verticalViewPort,\n clientRect: clientRect(),\n\n isDragging: isDragging(),\n onIsDraggingChange: setIsDragging,\n\n noteDragMode: noteDragMode(),\n onNoteDragModeChange: setNoteDragMode,\n };\n };\n\n const [contextValue, setContextValue] = createStore<PianoRollContext>(getContextValue());\n\n createEffect(() => {\n setContextValue(getContextValue());\n });\n\n return (\n <PianoRollContext.Provider value={contextValue}>{props.children}</PianoRollContext.Provider>\n );\n};\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","import { usePianoRollContext } from \"./PianoRollContext\";\n\nconst HorizontalZoomControl = () => {\n const context = usePianoRollContext();\n\n return (\n <input\n value={context.zoom}\n onInput={(event) => context.onZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n max=\"500\"\n min=\"1\"\n step={0.01}\n style={{\n \"margin-left\": \"50px\",\n \"margin-right\": \"16px\",\n }}\n />\n );\n};\n\nexport default HorizontalZoomControl;\n","import styles from \"./PianoRollKeys.module.css\";\nimport { createMemo, Index, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollKeys = () => {\n const context = usePianoRollContext();\n\n return (\n <div class={styles.PianoRollKeys}>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n context.verticalViewPort.getVirtualDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollKeys-Key\"]}\n title={key().name}\n data-index={key().number % 12}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n \"background-color\": key().isBlack ? \"#000\" : \"#fff\",\n \"border-width\": `${\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12) ? \"0.1px\" : 0\n } 1px ${\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12) ? \"0.1px\" : 0\n } 0`,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </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, Index, Ref, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollNotes = (props: { ref: Ref<HTMLDivElement | undefined> }) => {\n const context = usePianoRollContext();\n\n const gridDivisionTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n\n const snapValueToGridIfEnabled = (value: number, altKey: boolean) =>\n context.snapToGrid && !altKey\n ? Math.round(value / gridDivisionTicks()) * gridDivisionTicks()\n : value;\n\n return (\n <div\n class=\"PianoRoll-Notes-Container\"\n style={{\n position: \"absolute\",\n width: `${context.clientRect.width}px`,\n height: `${context.clientRect.height}px`,\n }}\n >\n <div\n class=\"PianoRoll-Notes\"\n ref={props.ref}\n style={{\n position: \"relative\",\n width: `${context.clientRect.width}px`,\n height: \"100%\",\n }}\n >\n <Index each={context.notes}>\n {(note, index) => {\n const horizontalVirtualDimensions = createMemo(() =>\n context.verticalViewPort.getVirtualDimensions(127 - note().midi, 1),\n );\n\n const verticalVirtualDimensions = createMemo(() =>\n context.horizontalViewPort.getVirtualDimensions(note().ticks, note().durationTicks),\n );\n\n return (\n <Show\n when={!!horizontalVirtualDimensions().size && !!verticalVirtualDimensions().size}\n >\n <div\n class=\"PianoRoll-Note\"\n onMouseMove={(event) => {\n if (context.isDragging) return;\n\n const relativeX = context.horizontalViewPort.getScaledValue(\n context.horizontalViewPort.getPosition(event.clientX),\n );\n const noteStartX = context.horizontalViewPort.getScaledValue(note().ticks);\n const noteEndX = context.horizontalViewPort.getScaledValue(\n note().ticks + note().durationTicks,\n );\n\n context.onNoteDragModeChange(\n relativeX - noteStartX < 3\n ? \"trimStart\"\n : noteEndX - relativeX < 3\n ? \"trimEnd\"\n : \"move\",\n );\n }}\n onDblClick={() => {\n context.onRemoveNote?.(index);\n }}\n onMouseDown={(event) => {\n context.onIsDraggingChange(true);\n const initialPosition = context.horizontalViewPort.getPosition(event.clientX);\n const diffPosition = initialPosition - note().ticks;\n\n const handleMouseMove = (mouseMoveEvent: MouseEvent) => {\n const ticks = snapValueToGridIfEnabled(\n Math.max(\n context.horizontalViewPort.getPosition(mouseMoveEvent.clientX) -\n diffPosition,\n 0,\n ),\n mouseMoveEvent.altKey,\n );\n\n context.onNoteChange?.(index, {\n ...note(),\n ...(context.noteDragMode === \"move\" && {\n midi: Math.round(\n 127 - context.verticalViewPort.getPosition(mouseMoveEvent.clientY),\n ),\n }),\n ...((context.noteDragMode === \"move\" ||\n context.noteDragMode === \"trimStart\") && {\n ticks,\n }),\n ...(context.noteDragMode === \"trimStart\" && {\n durationTicks: note().durationTicks + note().ticks - ticks,\n }),\n ...(context.noteDragMode === \"trimEnd\" && {\n durationTicks: snapValueToGridIfEnabled(\n context.horizontalViewPort.getPosition(mouseMoveEvent.clientX) -\n note().ticks,\n mouseMoveEvent.altKey,\n ),\n }),\n });\n };\n const handleMouseUp = () => {\n context.onIsDraggingChange(false);\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }}\n style={{\n \"z-index\": 2,\n position: \"absolute\",\n \"box-sizing\": \"border-box\",\n top: `${horizontalVirtualDimensions().offset}px`,\n height: `${horizontalVirtualDimensions().size}px`,\n left: `${verticalVirtualDimensions().offset}px`,\n width: `${verticalVirtualDimensions().size}px`,\n \"border-width\": \"0.5px\",\n \"border-style\": \"solid\",\n \"background-color\": `rgba(255,0,0, ${(128 + note().velocity) / 256})`,\n \"border-color\": \"#a00\",\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </div>\n </div>\n );\n};\n\nexport default PianoRollNotes;\n","import { createEffect, createMemo, createSignal, Ref } from \"solid-js\";\nimport { clamp } from \"./helpers\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst ScrollContainer = (props: { ref: Ref<HTMLDivElement> }) => {\n let scrollContentRef: HTMLDivElement | undefined;\n const context = usePianoRollContext();\n\n const gridDivisorTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n\n const forwardEventToNote = (event: MouseEvent | PointerEvent | TouchEvent) => {\n const x = \"clientX\" in event ? event.clientX : event.touches[0]?.clientX ?? 0;\n const y = \"clientY\" in event ? event.clientY : event.touches[0]?.clientY ?? 0;\n\n const elementUnderMouse = [...(context.notesContainer?.querySelectorAll?.(\"div\") ?? [])].find(\n (element) => {\n const rect = element.getBoundingClientRect();\n\n return (\n x >= rect.left &&\n rect.left + rect.width > x &&\n y >= rect.top &&\n rect.top + rect.height > y\n );\n },\n );\n\n if (elementUnderMouse) {\n return elementUnderMouse.dispatchEvent(new MouseEvent(event.type, event));\n }\n };\n\n const handleScroll = (event: UIEvent & { currentTarget: Element }) => {\n event.preventDefault();\n\n if (didUpdateScroll) {\n didUpdateScroll = false;\n return;\n }\n const maxVerticalPosition = 128 - 128 / context.verticalZoom;\n const maxPosition = context.duration - context.duration / context.zoom;\n\n const { width, height } = context.clientRect;\n const { scrollTop, scrollLeft, scrollWidth, scrollHeight } = event.currentTarget;\n\n const scrollTopAmount = scrollTop / (scrollHeight - height);\n const scrollLeftAmount = scrollLeft / (scrollWidth - width);\n\n context.onVerticalPositionChange?.(maxVerticalPosition * scrollTopAmount);\n context.onPositionChange?.(maxPosition * scrollLeftAmount);\n };\n\n let didUpdateScroll = false;\n\n createEffect(() => {\n const maxVerticalPosition = 128 - 128 / context.verticalZoom;\n const maxPosition = context.duration - context.duration / context.zoom;\n\n const scrollTopAmount =\n maxVerticalPosition > 0 ? context.verticalPosition / maxVerticalPosition : 0;\n const scrollLeftAmount = maxPosition > 0 ? context.position / maxPosition : 0;\n\n const { height, width } = context.clientRect;\n\n if (!scrollContentRef?.parentElement) return;\n\n const scrollDivHeight = clamp(context.verticalZoom * height, height, 10000);\n const scrollTop = scrollTopAmount * (scrollDivHeight - height);\n\n const scrollDivWidth = clamp(context.zoom * width, width, 10000);\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 const insertOrUpdateNote = (event: MouseEvent) => {\n const position = context.horizontalViewPort.getPosition(event.clientX);\n const midi = 127 - Math.floor(context.verticalViewPort.getPosition(event.clientY));\n const eventPositionTicks = Math.floor(position / gridDivisorTicks()) * gridDivisorTicks();\n const velocity = 127;\n\n const existingNote = newNote();\n\n const ticks = existingNote?.ticks ?? eventPositionTicks;\n const durationTicks = existingNote?.ticks\n ? eventPositionTicks - existingNote?.ticks\n : gridDivisorTicks();\n\n const note = { midi, ticks, durationTicks, velocity };\n\n if (existingNote) {\n context.onNoteChange?.(newNoteIndex(), note);\n return newNoteIndex();\n } else {\n return context.onInsertNote?.(note) ?? -1;\n }\n };\n\n const [newNoteIndex, setNewNoteIndex] = createSignal(-1);\n const newNote = createMemo(() => context.notes[newNoteIndex()]);\n const [isMouseDown, setIsMouseDown] = createSignal(false);\n\n return (\n <div\n ref={props.ref}\n class=\"PianoRoll-Vertical-Scroller\"\n style={{\n flex: 1,\n ...(context.noteDragMode && {\n cursor:\n context.noteDragMode === \"trimStart\"\n ? \"w-resize\"\n : context.noteDragMode === \"trimEnd\"\n ? \"e-resize\"\n : \"pointer\",\n }),\n \"z-index\": 4,\n overflow: \"scroll\",\n \"pointer-events\": \"auto\",\n }}\n onScroll={handleScroll}\n onMouseDown={(event) => {\n if (forwardEventToNote(event)) return;\n\n setIsMouseDown(true);\n }}\n onMouseMove={(event) => {\n event.preventDefault();\n\n if (forwardEventToNote(event)) return;\n if (context.isDragging) return;\n\n if (!isMouseDown()) {\n context.onNoteDragModeChange(undefined);\n return;\n }\n\n const index = insertOrUpdateNote(event);\n\n setNewNoteIndex(index);\n }}\n onDblClick={(event) => {\n if (newNote()) return;\n if (context.isDragging) return;\n if (forwardEventToNote(event)) return;\n\n insertOrUpdateNote(event);\n }}\n onClick={(event) => {\n if (newNote()) {\n setNewNoteIndex(-1);\n return;\n }\n\n if (forwardEventToNote(event)) return;\n if (!event.altKey) return;\n\n insertOrUpdateNote(event);\n }}\n onMouseUp={(event) => {\n setIsMouseDown(false);\n if (newNote()) return;\n if (forwardEventToNote(event)) return;\n if (!event.altKey) return;\n\n insertOrUpdateNote(event);\n }}\n onTouchStart={forwardEventToNote}\n onTouchMove={forwardEventToNote}\n onTouchEnd={forwardEventToNote}\n onTouchCancel={forwardEventToNote}\n onDragStart={forwardEventToNote}\n onDrag={forwardEventToNote}\n onDragEnd={forwardEventToNote}\n >\n <div ref={scrollContentRef}></div>\n </div>\n );\n};\n\nexport default ScrollContainer;\n","import { usePianoRollContext } from \"./PianoRollContext\";\n\nconst VerticalZoomControl = () => {\n const context = usePianoRollContext();\n\n return (\n <input\n value={context.verticalZoom}\n onInput={(event) => context.onVerticalZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n min=\"1\"\n max=\"11\"\n step={0.01}\n {...{ orient: \"vertical\" }}\n style={{\n width: \"16px\",\n ...({\n \"writing-mode\": \"bt-lr\" /* IE */,\n \"-webkit-appearance\": \"slider-vertical\" /* WebKit */,\n } as any),\n }}\n />\n );\n};\n\nexport default VerticalZoomControl;\n","import { createEffect, createMemo, Index, Ref, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { blackKeys, keys } from \"./PianoRollKeys\";\n\nconst PianoRollGrid = () => {\n const context = usePianoRollContext();\n\n const gridDivisorTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n const gridArray = createMemo(() => {\n const numberOfLines = context.duration / gridDivisorTicks();\n return Array.from({ length: numberOfLines }).map((_, index) => index * gridDivisorTicks());\n });\n\n return (\n <div\n class=\"PianoRoll-Grid-Container\"\n style={{\n position: \"absolute\",\n width: `${context.clientRect.width}px`,\n height: `${context.clientRect.height}px`,\n }}\n >\n <div\n class=\"PianoRoll-Grid\"\n style={{\n position: \"relative\",\n width: `${context.clientRect.width}px`,\n height: \"100%\",\n }}\n >\n <Index each={gridArray()}>\n {(tick, index) => {\n const virtualDimensions = createMemo(() =>\n context.horizontalViewPort.getVirtualDimensions(tick(), gridDivisorTicks()),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class=\"PianoRoll-Grid-Time\"\n style={{\n \"z-index\": 1,\n position: \"absolute\",\n \"box-sizing\": \"border-box\",\n background: index % 4 === 0 ? \"#ccc\" : \"#ddd\",\n top: `0px`,\n height: `100%`,\n left: `${virtualDimensions().offset}px`,\n width: `${virtualDimensions().size}px`,\n \"border-left\": \"1px gray solid\",\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n context.verticalViewPort.getVirtualDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class=\"PianoRoll-Grid-Key\"\n style={{\n position: \"absolute\",\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n width: \"100%\",\n \"background-color\": key().isBlack ? \"rgba(0,0,0,0.2)\" : \"none\",\n \"border-style\": \"solid\",\n \"border-color\": \"gray\",\n \"border-width\": `${\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12) ? \"0.1px\" : 0\n } 1px ${\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12) ? \"0.1px\" : 0\n } 0`,\n \"z-index\": 1,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </div>\n </div>\n );\n};\n\nexport default PianoRollGrid;\n","import styles from \"./PianoRoll.module.css\";\nimport { Midi } from \"@tonejs/midi\";\n\nimport { JSX, splitProps, createSignal } from \"solid-js\";\nimport HorizontalZoomControl from \"./HorizontalZoomControl\";\n\nimport { PianoRollContextProvider } from \"./PianoRollContext\";\nimport PianoRollKeys from \"./PianoRollKeys\";\nimport PianoRollNotes from \"./PianoRollNotes\";\nimport ScrollContainer from \"./ScrollContainer\";\nimport VerticalZoomControl from \"./VerticalZoomControl\";\nimport PianoRollGrid from \"./PianoRollGrid\";\nimport { Note } from \"./types\";\n\nexport type GridDivision = 1 | 2 | 4 | 8 | 16 | 32 | 64;\n\nexport type PianoRollProps = {\n ppq: number;\n notes: Note[];\n\n gridDivision: GridDivision;\n snapToGrid: boolean;\n\n verticalPosition: number;\n verticalZoom: number;\n\n position: number;\n duration: number;\n zoom: number;\n\n onVerticalZoomChange?: (zoom: number) => void;\n onVerticalPositionChange?: (zoom: number) => void;\n onZoomChange?: (zoom: number) => void;\n onPositionChange?: (zoom: number) => void;\n\n onNoteChange?: (index: number, note: Note) => void;\n onInsertNote?: (note: Note) => number;\n onRemoveNote?: (index: number) => void;\n};\n\nconst PianoRoll = (allProps: PianoRollProps & JSX.IntrinsicElements[\"div\"]) => {\n const [contextProps, divProps] = splitProps(allProps, [\n \"ppq\",\n \"notes\",\n \"position\",\n \"duration\",\n \"zoom\",\n \"verticalPosition\",\n \"verticalZoom\",\n \"onVerticalZoomChange\",\n \"onVerticalPositionChange\",\n \"onZoomChange\",\n \"onPositionChange\",\n \"onNoteChange\",\n \"gridDivision\",\n \"snapToGrid\",\n \"onInsertNote\",\n \"onRemoveNote\",\n ]);\n\n const [scrollContainer, setScrollContainer] = createSignal<HTMLDivElement>();\n const [notesContainer, setNotesContainer] = createSignal<HTMLDivElement>();\n\n return (\n <PianoRollContextProvider\n {...contextProps}\n scrollContainer={scrollContainer()}\n notesContainer={notesContainer()}\n >\n <div {...divProps} class={styles.PianoRoll}>\n <div class={styles.PianoRollContainer}>\n <PianoRollKeys />\n\n <div class={styles.PianoRollInnerContainer}>\n <PianoRollNotes ref={setNotesContainer} />\n <PianoRollGrid />\n <ScrollContainer ref={setScrollContainer} />\n </div>\n\n <VerticalZoomControl />\n </div>\n\n <HorizontalZoomControl />\n </div>\n </PianoRollContextProvider>\n );\n};\n\nexport default PianoRoll;\n","import { createEffect, createSignal } from \"solid-js\";\nimport { GridDivision } from \"./PianoRoll\";\nimport { Note } from \"./types\";\n\nconst usePianoRoll = () => {\n const [position, setPosition] = createSignal(0);\n\n const [zoom, setZoom] = createSignal(10);\n const [verticalZoom, setVerticalZoom] = createSignal(5);\n const [verticalPosition, setVerticalPosition] = createSignal(64);\n\n const [gridDivision, setGridDivision] = createSignal<GridDivision>(16);\n const [snapToGrid, setSnapToGrid] = createSignal(true);\n\n const [notes, setNotes] = createSignal<Note[]>([]);\n const [duration, setDuration] = createSignal(0);\n\n createEffect(() => {\n setDuration(\n (notes()[notes().length - 1]?.ticks ?? 0) + (notes()[notes().length - 1]?.durationTicks ?? 0),\n );\n });\n\n return {\n position,\n setPosition,\n\n zoom,\n setZoom,\n\n verticalPosition,\n setVerticalPosition,\n\n verticalZoom,\n setVerticalZoom,\n\n gridDivision,\n setGridDivision,\n\n snapToGrid,\n setSnapToGrid,\n\n notes,\n setNotes,\n\n duration,\n };\n};\n\nexport default usePianoRoll;\n"],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","defaultRect","left","width","top","height","bottom","right","x","y","useBoundingClientRect","containerRef","boundingClientRect","setBoundingClientRect","createSignal","createEffect","container","updateBoundingClientRect","getBoundingClientRect","resizeObserver","ResizeObserver","observe","disconnect","clamp","value","min","max","Math","useViewPortScaler","getState","state","createMemo","getScaledValue","position","virtualSize","viewPortSize","zoom","virtualRange","getCoordinates","virtualPosition","getPosition","offset","visibleDuration","percentX","viewPortOffset","getVirtualDimensions","length","virtualLeft","virtualWidth","size","PianoRollContext","createContext","undefined","PianoRollContextProvider","props","noteDragMode","setNoteDragMode","isDragging","setIsDragging","_ownProps","contextProps","splitProps","clientRect","scrollContainer","horizontalViewPort","duration","verticalViewPort","verticalPosition","verticalZoom","getContextValue","onIsDraggingChange","onNoteDragModeChange","contextValue","setContextValue","createStore","_$createComponent","children","usePianoRollContext","context","useContext","Error","HorizontalZoomControl","_tmpl$","event","onZoomChange","currentTarget","valueAsNumber","_$effect","_$delegateEvents","PianoRollKeys","_$insert","Index","keys","key","virtualDimensions","number","Show","styles","name","isBlack","blackKeys","includes","_$className","_$setAttribute","keyNames","Array","from","map","_","index","floor","PianoRollNotes","gridDivisionTicks","ppq","gridDivision","snapValueToGridIfEnabled","altKey","snapToGrid","round","notes","note","horizontalVirtualDimensions","midi","verticalVirtualDimensions","ticks","durationTicks","_$memo","_tmpl$2","initialPosition","clientX","diffPosition","handleMouseMove","mouseMoveEvent","onNoteChange","clientY","handleMouseUp","window","removeEventListener","addEventListener","onRemoveNote","relativeX","noteStartX","noteEndX","velocity","ScrollContainer","scrollContentRef","gridDivisorTicks","forwardEventToNote","touches","elementUnderMouse","notesContainer","querySelectorAll","find","element","rect","dispatchEvent","MouseEvent","handleScroll","preventDefault","didUpdateScroll","maxVerticalPosition","maxPosition","scrollTop","scrollLeft","scrollWidth","scrollHeight","scrollTopAmount","scrollLeftAmount","onVerticalPositionChange","onPositionChange","parentElement","scrollDivHeight","scrollDivWidth","scrollTo","insertOrUpdateNote","eventPositionTicks","existingNote","newNote","newNoteIndex","onInsertNote","setNewNoteIndex","isMouseDown","setIsMouseDown","_$use","_$style","flex","cursor","overflow","VerticalZoomControl","onVerticalZoomChange","_$spread","_$mergeProps","orient","PianoRollGrid","gridArray","numberOfLines","tick","PianoRoll","allProps","divProps","setScrollContainer","setNotesContainer","PianoRollContainer","PianoRollInnerContainer","usePianoRoll","setPosition","setZoom","setVerticalZoom","setVerticalPosition","setGridDivision","setSnapToGrid","setNotes","setDuration"],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -279,6 +279,9 @@ const PianoRollNotes = props => {
|
|
|
279
279
|
window.addEventListener("mousemove", handleMouseMove);
|
|
280
280
|
window.addEventListener("mouseup", handleMouseUp);
|
|
281
281
|
};
|
|
282
|
+
_el$3.$$dblclick = () => {
|
|
283
|
+
context.onRemoveNote?.(index);
|
|
284
|
+
};
|
|
282
285
|
_el$3.$$mousemove = event => {
|
|
283
286
|
if (context.isDragging) return;
|
|
284
287
|
const relativeX = context.horizontalViewPort.getScaledValue(context.horizontalViewPort.getPosition(event.clientX));
|
|
@@ -332,7 +335,7 @@ const PianoRollNotes = props => {
|
|
|
332
335
|
return _el$;
|
|
333
336
|
})();
|
|
334
337
|
};
|
|
335
|
-
delegateEvents(["mousemove", "mousedown"]);
|
|
338
|
+
delegateEvents(["mousemove", "dblclick", "mousedown"]);
|
|
336
339
|
|
|
337
340
|
const _tmpl$$3 = /*#__PURE__*/template(`<div class="PianoRoll-Vertical-Scroller"><div></div></div>`, 4);
|
|
338
341
|
const ScrollContainer = props => {
|
|
@@ -340,8 +343,8 @@ const ScrollContainer = props => {
|
|
|
340
343
|
const context = usePianoRollContext();
|
|
341
344
|
const gridDivisorTicks = createMemo(() => context.ppq * 4 / context.gridDivision);
|
|
342
345
|
const forwardEventToNote = event => {
|
|
343
|
-
const x = "clientX" in event ? event.clientX : event.touches[0]?.clientX;
|
|
344
|
-
const y = "clientY" in event ? event.clientY : event.touches[0]?.clientY;
|
|
346
|
+
const x = "clientX" in event ? event.clientX : event.touches[0]?.clientX ?? 0;
|
|
347
|
+
const y = "clientY" in event ? event.clientY : event.touches[0]?.clientY ?? 0;
|
|
345
348
|
const elementUnderMouse = [...(context.notesContainer?.querySelectorAll?.("div") ?? [])].find(element => {
|
|
346
349
|
const rect = element.getBoundingClientRect();
|
|
347
350
|
return x >= rect.left && rect.left + rect.width > x && y >= rect.top && rect.top + rect.height > y;
|
|
@@ -396,6 +399,30 @@ const ScrollContainer = props => {
|
|
|
396
399
|
top: scrollTop
|
|
397
400
|
});
|
|
398
401
|
});
|
|
402
|
+
const insertOrUpdateNote = event => {
|
|
403
|
+
const position = context.horizontalViewPort.getPosition(event.clientX);
|
|
404
|
+
const midi = 127 - Math.floor(context.verticalViewPort.getPosition(event.clientY));
|
|
405
|
+
const eventPositionTicks = Math.floor(position / gridDivisorTicks()) * gridDivisorTicks();
|
|
406
|
+
const velocity = 127;
|
|
407
|
+
const existingNote = newNote();
|
|
408
|
+
const ticks = existingNote?.ticks ?? eventPositionTicks;
|
|
409
|
+
const durationTicks = existingNote?.ticks ? eventPositionTicks - existingNote?.ticks : gridDivisorTicks();
|
|
410
|
+
const note = {
|
|
411
|
+
midi,
|
|
412
|
+
ticks,
|
|
413
|
+
durationTicks,
|
|
414
|
+
velocity
|
|
415
|
+
};
|
|
416
|
+
if (existingNote) {
|
|
417
|
+
context.onNoteChange?.(newNoteIndex(), note);
|
|
418
|
+
return newNoteIndex();
|
|
419
|
+
} else {
|
|
420
|
+
return context.onInsertNote?.(note) ?? -1;
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
const [newNoteIndex, setNewNoteIndex] = createSignal(-1);
|
|
424
|
+
const newNote = createMemo(() => context.notes[newNoteIndex()]);
|
|
425
|
+
const [isMouseDown, setIsMouseDown] = createSignal(false);
|
|
399
426
|
return (() => {
|
|
400
427
|
const _el$ = _tmpl$$3.cloneNode(true),
|
|
401
428
|
_el$2 = _el$.firstChild;
|
|
@@ -406,30 +433,43 @@ const ScrollContainer = props => {
|
|
|
406
433
|
_el$.$$touchend = forwardEventToNote;
|
|
407
434
|
_el$.$$touchmove = forwardEventToNote;
|
|
408
435
|
_el$.$$touchstart = forwardEventToNote;
|
|
409
|
-
_el$.$$mouseup =
|
|
410
|
-
|
|
411
|
-
if (
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
durationTicks,
|
|
421
|
-
velocity
|
|
422
|
-
};
|
|
423
|
-
context.onInsertNote?.(note);
|
|
436
|
+
_el$.$$mouseup = event => {
|
|
437
|
+
setIsMouseDown(false);
|
|
438
|
+
if (newNote()) return;
|
|
439
|
+
if (forwardEventToNote(event)) return;
|
|
440
|
+
if (!event.altKey) return;
|
|
441
|
+
insertOrUpdateNote(event);
|
|
442
|
+
};
|
|
443
|
+
_el$.$$click = event => {
|
|
444
|
+
if (newNote()) {
|
|
445
|
+
setNewNoteIndex(-1);
|
|
446
|
+
return;
|
|
424
447
|
}
|
|
448
|
+
if (forwardEventToNote(event)) return;
|
|
449
|
+
if (!event.altKey) return;
|
|
450
|
+
insertOrUpdateNote(event);
|
|
451
|
+
};
|
|
452
|
+
_el$.$$dblclick = event => {
|
|
453
|
+
if (newNote()) return;
|
|
454
|
+
if (context.isDragging) return;
|
|
455
|
+
if (forwardEventToNote(event)) return;
|
|
456
|
+
insertOrUpdateNote(event);
|
|
425
457
|
};
|
|
426
|
-
_el$.$$click = forwardEventToNote;
|
|
427
458
|
_el$.$$mousemove = event => {
|
|
459
|
+
event.preventDefault();
|
|
428
460
|
if (forwardEventToNote(event)) return;
|
|
429
461
|
if (context.isDragging) return;
|
|
430
|
-
|
|
462
|
+
if (!isMouseDown()) {
|
|
463
|
+
context.onNoteDragModeChange(undefined);
|
|
464
|
+
return;
|
|
465
|
+
}
|
|
466
|
+
const index = insertOrUpdateNote(event);
|
|
467
|
+
setNewNoteIndex(index);
|
|
468
|
+
};
|
|
469
|
+
_el$.$$mousedown = event => {
|
|
470
|
+
if (forwardEventToNote(event)) return;
|
|
471
|
+
setIsMouseDown(true);
|
|
431
472
|
};
|
|
432
|
-
_el$.$$mousedown = forwardEventToNote;
|
|
433
473
|
_el$.addEventListener("scroll", handleScroll);
|
|
434
474
|
const _ref$ = props.ref;
|
|
435
475
|
typeof _ref$ === "function" ? use(_ref$, _el$) : props.ref = _el$;
|
|
@@ -447,7 +487,7 @@ const ScrollContainer = props => {
|
|
|
447
487
|
return _el$;
|
|
448
488
|
})();
|
|
449
489
|
};
|
|
450
|
-
delegateEvents(["mousedown", "mousemove", "
|
|
490
|
+
delegateEvents(["mousedown", "mousemove", "dblclick", "click", "mouseup", "touchstart", "touchmove", "touchend"]);
|
|
451
491
|
|
|
452
492
|
const _tmpl$$2 = /*#__PURE__*/template(`<input type="range" min="1" max="11" step="0.01">`, 1);
|
|
453
493
|
const VerticalZoomControl = () => {
|
|
@@ -584,7 +624,7 @@ const PianoRollGrid = () => {
|
|
|
584
624
|
|
|
585
625
|
const _tmpl$ = /*#__PURE__*/template(`<div><div><div></div></div></div>`, 6);
|
|
586
626
|
const PianoRoll = allProps => {
|
|
587
|
-
const [contextProps, divProps] = splitProps(allProps, ["ppq", "notes", "position", "duration", "zoom", "verticalPosition", "verticalZoom", "onVerticalZoomChange", "onVerticalPositionChange", "onZoomChange", "onPositionChange", "onNoteChange", "gridDivision", "snapToGrid", "onInsertNote"]);
|
|
627
|
+
const [contextProps, divProps] = splitProps(allProps, ["ppq", "notes", "position", "duration", "zoom", "verticalPosition", "verticalZoom", "onVerticalZoomChange", "onVerticalPositionChange", "onZoomChange", "onPositionChange", "onNoteChange", "gridDivision", "snapToGrid", "onInsertNote", "onRemoveNote"]);
|
|
588
628
|
const [scrollContainer, setScrollContainer] = createSignal();
|
|
589
629
|
const [notesContainer, setNotesContainer] = createSignal();
|
|
590
630
|
return createComponent(PianoRollContextProvider, mergeProps(contextProps, {
|
|
@@ -628,5 +668,36 @@ const PianoRoll = allProps => {
|
|
|
628
668
|
}));
|
|
629
669
|
};
|
|
630
670
|
|
|
631
|
-
|
|
671
|
+
const usePianoRoll = () => {
|
|
672
|
+
const [position, setPosition] = createSignal(0);
|
|
673
|
+
const [zoom, setZoom] = createSignal(10);
|
|
674
|
+
const [verticalZoom, setVerticalZoom] = createSignal(5);
|
|
675
|
+
const [verticalPosition, setVerticalPosition] = createSignal(64);
|
|
676
|
+
const [gridDivision, setGridDivision] = createSignal(16);
|
|
677
|
+
const [snapToGrid, setSnapToGrid] = createSignal(true);
|
|
678
|
+
const [notes, setNotes] = createSignal([]);
|
|
679
|
+
const [duration, setDuration] = createSignal(0);
|
|
680
|
+
createEffect(() => {
|
|
681
|
+
setDuration((notes()[notes().length - 1]?.ticks ?? 0) + (notes()[notes().length - 1]?.durationTicks ?? 0));
|
|
682
|
+
});
|
|
683
|
+
return {
|
|
684
|
+
position,
|
|
685
|
+
setPosition,
|
|
686
|
+
zoom,
|
|
687
|
+
setZoom,
|
|
688
|
+
verticalPosition,
|
|
689
|
+
setVerticalPosition,
|
|
690
|
+
verticalZoom,
|
|
691
|
+
setVerticalZoom,
|
|
692
|
+
gridDivision,
|
|
693
|
+
setGridDivision,
|
|
694
|
+
snapToGrid,
|
|
695
|
+
setSnapToGrid,
|
|
696
|
+
notes,
|
|
697
|
+
setNotes,
|
|
698
|
+
duration
|
|
699
|
+
};
|
|
700
|
+
};
|
|
701
|
+
|
|
702
|
+
export { PianoRoll, usePianoRoll };
|
|
632
703
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../node_modules/style-inject/dist/style-inject.es.js","../../src/useBoundingClientRect.ts","../../src/helpers.ts","../../src/useViewPortScaler.ts","../../src/PianoRollContext.tsx","../../src/HorizontalZoomControl.tsx","../../src/PianoRollKeys.tsx","../../src/PianoRollNotes.tsx","../../src/ScrollContainer.tsx","../../src/VerticalZoomControl.tsx","../../src/PianoRollGrid.tsx","../../src/PianoRoll.tsx"],"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 { Accessor, createEffect, createSignal, onCleanup, onMount } 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","export const clamp = (value: number, min: number, max: number) => {\n return Math.max(min, Math.min(max, value));\n};\n","import { createMemo } from \"solid-js\";\nimport { clamp } from \"./helpers\";\n\nexport type ViewPortScaler = ReturnType<typeof useViewPortScaler>;\n\nexport default function useViewPortScaler(\n getState: () => {\n virtualPosition: number;\n virtualRange: number;\n\n viewPortOffset: number;\n viewPortSize: number;\n\n zoom: number;\n },\n) {\n const state = createMemo(() => getState());\n\n function getScaledValue(position: number) {\n const virtualSize = state().viewPortSize * state().zoom;\n return (position / state().virtualRange) * virtualSize;\n }\n\n function getCoordinates(position: number) {\n return getScaledValue(position) - getScaledValue(state().virtualPosition);\n }\n\n function getPosition(offset: number) {\n const visibleDuration = state().virtualRange / state().zoom;\n const percentX = (offset - state().viewPortOffset) / state().viewPortSize;\n const position = state().virtualPosition + percentX * visibleDuration;\n\n return position;\n }\n\n function getVirtualDimensions(position: number, length: number) {\n const virtualLeft = getCoordinates(position);\n const virtualWidth = getScaledValue(length);\n\n const offset = clamp(virtualLeft, 0, state().viewPortSize);\n const size = clamp(virtualWidth - (offset - virtualLeft), 0, state().viewPortSize - offset);\n\n return { offset, size };\n }\n\n return {\n getScaledValue,\n getCoordinates,\n getPosition,\n getVirtualDimensions,\n };\n}\n","import {\n createContext,\n createEffect,\n createMemo,\n createSignal,\n JSX,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\n\nimport { PianoRollProps } from \"./PianoRoll\";\nimport useBoundingClientRect, { ClientRect } from \"./useBoundingClientRect\";\nimport useViewPortScaler, { ViewPortScaler } from \"./useViewPortScaler\";\n\nexport type NoteDragMode = \"trimStart\" | \"move\" | \"trimEnd\" | undefined;\ntype PianoRollContext = {\n horizontalViewPort: ViewPortScaler;\n verticalViewPort: ViewPortScaler;\n clientRect: ClientRect;\n\n notesContainer?: HTMLDivElement;\n\n isDragging: boolean;\n onIsDraggingChange: (isDragging: boolean) => void;\n\n noteDragMode: NoteDragMode;\n onNoteDragModeChange: (isDragging: NoteDragMode) => void;\n} & PianoRollProps;\n\nconst PianoRollContext = createContext<PianoRollContext>(undefined!);\n\nexport const PianoRollContextProvider = (\n props: {\n scrollContainer?: HTMLDivElement;\n notesContainer?: HTMLDivElement;\n\n children: JSX.Element;\n } & PianoRollProps,\n) => {\n const [noteDragMode, setNoteDragMode] = createSignal<NoteDragMode>();\n const [isDragging, setIsDragging] = createSignal(false);\n\n const [_ownProps, contextProps] = splitProps(props, [\"children\", \"scrollContainer\"]);\n const clientRect = useBoundingClientRect(() => props.scrollContainer);\n\n const horizontalViewPort = useViewPortScaler(() => ({\n viewPortOffset: clientRect().left,\n viewPortSize: clientRect().width,\n\n virtualPosition: props.position,\n virtualRange: props.duration,\n zoom: props.zoom,\n }));\n\n const verticalViewPort = useViewPortScaler(() => ({\n viewPortOffset: clientRect().top,\n viewPortSize: clientRect().height,\n\n virtualPosition: props.verticalPosition,\n zoom: props.verticalZoom,\n\n virtualRange: 128,\n }));\n\n const getContextValue = () => {\n return {\n ...contextProps,\n horizontalViewPort,\n verticalViewPort,\n clientRect: clientRect(),\n\n isDragging: isDragging(),\n onIsDraggingChange: setIsDragging,\n\n noteDragMode: noteDragMode(),\n onNoteDragModeChange: setNoteDragMode,\n };\n };\n\n const [contextValue, setContextValue] = createStore<PianoRollContext>(getContextValue());\n\n createEffect(() => {\n setContextValue(getContextValue());\n });\n\n return (\n <PianoRollContext.Provider value={contextValue}>{props.children}</PianoRollContext.Provider>\n );\n};\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","import { usePianoRollContext } from \"./PianoRollContext\";\n\nconst HorizontalZoomControl = () => {\n const context = usePianoRollContext();\n\n return (\n <input\n value={context.zoom}\n onInput={(event) => context.onZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n max=\"500\"\n min=\"1\"\n step={0.01}\n style={{\n \"margin-left\": \"50px\",\n \"margin-right\": \"16px\",\n }}\n />\n );\n};\n\nexport default HorizontalZoomControl;\n","import styles from \"./PianoRollKeys.module.css\";\nimport { createMemo, Index, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollKeys = () => {\n const context = usePianoRollContext();\n\n return (\n <div class={styles.PianoRollKeys}>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n context.verticalViewPort.getVirtualDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollKeys-Key\"]}\n title={key().name}\n data-index={key().number % 12}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n \"background-color\": key().isBlack ? \"#000\" : \"#fff\",\n \"border-width\": `${\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12) ? \"0.1px\" : 0\n } 1px ${\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12) ? \"0.1px\" : 0\n } 0`,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </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 { createEffect, createMemo, Index, Ref, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollNotes = (props: { ref: Ref<HTMLDivElement | undefined> }) => {\n const context = usePianoRollContext();\n\n const gridDivisionTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n\n const snapValueToGridIfEnabled = (value: number, altKey: boolean) =>\n context.snapToGrid && !altKey\n ? Math.round(value / gridDivisionTicks()) * gridDivisionTicks()\n : value;\n\n return (\n <div\n class=\"PianoRoll-Notes-Container\"\n style={{\n position: \"absolute\",\n width: `${context.clientRect.width}px`,\n height: `${context.clientRect.height}px`,\n }}\n >\n <div\n class=\"PianoRoll-Notes\"\n ref={props.ref}\n style={{\n position: \"relative\",\n width: `${context.clientRect.width}px`,\n height: \"100%\",\n }}\n >\n <Index each={context.notes}>\n {(note, index) => {\n const horizontalVirtualDimensions = createMemo(() =>\n context.verticalViewPort.getVirtualDimensions(127 - note().midi, 1),\n );\n\n const verticalVirtualDimensions = createMemo(() =>\n context.horizontalViewPort.getVirtualDimensions(note().ticks, note().durationTicks),\n );\n\n return (\n <Show\n when={!!horizontalVirtualDimensions().size && !!verticalVirtualDimensions().size}\n >\n <div\n class=\"PianoRoll-Note\"\n onMouseMove={(event) => {\n if (context.isDragging) return;\n\n const relativeX = context.horizontalViewPort.getScaledValue(\n context.horizontalViewPort.getPosition(event.clientX),\n );\n const noteStartX = context.horizontalViewPort.getScaledValue(note().ticks);\n const noteEndX = context.horizontalViewPort.getScaledValue(\n note().ticks + note().durationTicks,\n );\n\n context.onNoteDragModeChange(\n relativeX - noteStartX < 3\n ? \"trimStart\"\n : noteEndX - relativeX < 3\n ? \"trimEnd\"\n : \"move\",\n );\n }}\n onMouseDown={(event) => {\n context.onIsDraggingChange(true);\n const initialPosition = context.horizontalViewPort.getPosition(event.clientX);\n const diffPosition = initialPosition - note().ticks;\n\n const handleMouseMove = (mouseMoveEvent: MouseEvent) => {\n const ticks = snapValueToGridIfEnabled(\n Math.max(\n context.horizontalViewPort.getPosition(mouseMoveEvent.clientX) -\n diffPosition,\n 0,\n ),\n mouseMoveEvent.altKey,\n );\n\n context.onNoteChange?.(index, {\n ...note(),\n ...(context.noteDragMode === \"move\" && {\n midi: Math.round(\n 127 - context.verticalViewPort.getPosition(mouseMoveEvent.clientY),\n ),\n }),\n ...((context.noteDragMode === \"move\" ||\n context.noteDragMode === \"trimStart\") && {\n ticks,\n }),\n ...(context.noteDragMode === \"trimStart\" && {\n durationTicks: note().durationTicks + note().ticks - ticks,\n }),\n ...(context.noteDragMode === \"trimEnd\" && {\n durationTicks: snapValueToGridIfEnabled(\n context.horizontalViewPort.getPosition(mouseMoveEvent.clientX) -\n note().ticks,\n mouseMoveEvent.altKey,\n ),\n }),\n });\n };\n const handleMouseUp = () => {\n context.onIsDraggingChange(false);\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }}\n style={{\n \"z-index\": 2,\n position: \"absolute\",\n \"box-sizing\": \"border-box\",\n top: `${horizontalVirtualDimensions().offset}px`,\n height: `${horizontalVirtualDimensions().size}px`,\n left: `${verticalVirtualDimensions().offset}px`,\n width: `${verticalVirtualDimensions().size}px`,\n \"border-width\": \"0.5px\",\n \"border-style\": \"solid\",\n \"background-color\": `rgba(255,0,0, ${(128 + note().velocity) / 256})`,\n \"border-color\": \"#a00\",\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </div>\n </div>\n );\n};\n\nexport default PianoRollNotes;\n","import { createEffect, createMemo, Ref } from \"solid-js\";\nimport { clamp } from \"./helpers\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst ScrollContainer = (props: { ref: Ref<HTMLDivElement> }) => {\n let scrollContentRef: HTMLDivElement | undefined;\n const context = usePianoRollContext();\n\n const gridDivisorTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n\n const forwardEventToNote = (event: MouseEvent | PointerEvent | TouchEvent) => {\n const x = \"clientX\" in event ? event.clientX : event.touches[0]?.clientX;\n const y = \"clientY\" in event ? event.clientY : event.touches[0]?.clientY;\n\n const elementUnderMouse = [...(context.notesContainer?.querySelectorAll?.(\"div\") ?? [])].find(\n (element) => {\n const rect = element.getBoundingClientRect();\n\n return (\n x >= rect.left &&\n rect.left + rect.width > x &&\n y >= rect.top &&\n rect.top + rect.height > y\n );\n },\n );\n\n if (elementUnderMouse) {\n return elementUnderMouse.dispatchEvent(new MouseEvent(event.type, event));\n }\n };\n\n const handleScroll = (event: UIEvent & { currentTarget: Element }) => {\n event.preventDefault();\n\n if (didUpdateScroll) {\n didUpdateScroll = false;\n return;\n }\n const maxVerticalPosition = 128 - 128 / context.verticalZoom;\n const maxPosition = context.duration - context.duration / context.zoom;\n\n const { width, height } = context.clientRect;\n const { scrollTop, scrollLeft, scrollWidth, scrollHeight } = event.currentTarget;\n\n const scrollTopAmount = scrollTop / (scrollHeight - height);\n const scrollLeftAmount = scrollLeft / (scrollWidth - width);\n\n context.onVerticalPositionChange?.(maxVerticalPosition * scrollTopAmount);\n context.onPositionChange?.(maxPosition * scrollLeftAmount);\n };\n\n let didUpdateScroll = false;\n\n createEffect(() => {\n const maxVerticalPosition = 128 - 128 / context.verticalZoom;\n const maxPosition = context.duration - context.duration / context.zoom;\n\n const scrollTopAmount =\n maxVerticalPosition > 0 ? context.verticalPosition / maxVerticalPosition : 0;\n const scrollLeftAmount = maxPosition > 0 ? context.position / maxPosition : 0;\n\n const { height, width } = context.clientRect;\n\n if (!scrollContentRef?.parentElement) return;\n\n const scrollDivHeight = clamp(context.verticalZoom * height, height, 10000);\n const scrollTop = scrollTopAmount * (scrollDivHeight - height);\n\n const scrollDivWidth = clamp(context.zoom * width, width, 10000);\n const scrollLeft = scrollLeftAmount * (scrollDivWidth - width);\n\n didUpdateScroll = true;\n\n scrollContentRef.style.height = `${scrollDivHeight}px`;\n scrollContentRef.style.width = `${scrollDivWidth}px`;\n\n scrollContentRef.parentElement.scrollTo({\n left: scrollLeft,\n top: scrollTop,\n });\n });\n\n return (\n <div\n ref={props.ref}\n class=\"PianoRoll-Vertical-Scroller\"\n style={{\n flex: 1,\n ...(context.noteDragMode && {\n cursor:\n context.noteDragMode === \"trimStart\"\n ? \"w-resize\"\n : context.noteDragMode === \"trimEnd\"\n ? \"e-resize\"\n : \"pointer\",\n }),\n \"z-index\": 4,\n overflow: \"scroll\",\n \"pointer-events\": \"auto\",\n }}\n onScroll={handleScroll}\n onMouseDown={forwardEventToNote}\n onMouseMove={(event) => {\n if (forwardEventToNote(event)) return;\n if (context.isDragging) return;\n context.onNoteDragModeChange(undefined);\n }}\n onClick={forwardEventToNote}\n onDblClick={(event) => {\n if (!forwardEventToNote(event)) {\n const position = context.horizontalViewPort.getPosition(event.clientX);\n const midi = 127 - Math.floor(context.verticalViewPort.getPosition(event.clientY));\n\n const ticks = Math.floor(position / gridDivisorTicks()) * gridDivisorTicks();\n const durationTicks = gridDivisorTicks();\n const velocity = 127;\n\n const note = { midi, ticks, durationTicks, velocity };\n\n context.onInsertNote?.(note);\n }\n }}\n onMouseUp={forwardEventToNote}\n onTouchStart={forwardEventToNote}\n onTouchMove={forwardEventToNote}\n onTouchEnd={forwardEventToNote}\n onTouchCancel={forwardEventToNote}\n onDragStart={forwardEventToNote}\n onDrag={forwardEventToNote}\n onDragEnd={forwardEventToNote}\n >\n <div ref={scrollContentRef}></div>\n </div>\n );\n};\n\nexport default ScrollContainer;\n","import { usePianoRollContext } from \"./PianoRollContext\";\n\nconst VerticalZoomControl = () => {\n const context = usePianoRollContext();\n\n return (\n <input\n value={context.verticalZoom}\n onInput={(event) => context.onVerticalZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n min=\"1\"\n max=\"11\"\n step={0.01}\n {...{ orient: \"vertical\" }}\n style={{\n width: \"16px\",\n ...({\n \"writing-mode\": \"bt-lr\" /* IE */,\n \"-webkit-appearance\": \"slider-vertical\" /* WebKit */,\n } as any),\n }}\n />\n );\n};\n\nexport default VerticalZoomControl;\n","import { createEffect, createMemo, Index, Ref, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { blackKeys, keys } from \"./PianoRollKeys\";\n\nconst PianoRollGrid = () => {\n const context = usePianoRollContext();\n\n const gridDivisorTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n const gridArray = createMemo(() => {\n const numberOfLines = context.duration / gridDivisorTicks();\n return Array.from({ length: numberOfLines }).map((_, index) => index * gridDivisorTicks());\n });\n\n return (\n <div\n class=\"PianoRoll-Grid-Container\"\n style={{\n position: \"absolute\",\n width: `${context.clientRect.width}px`,\n height: `${context.clientRect.height}px`,\n }}\n >\n <div\n class=\"PianoRoll-Grid\"\n style={{\n position: \"relative\",\n width: `${context.clientRect.width}px`,\n height: \"100%\",\n }}\n >\n <Index each={gridArray()}>\n {(tick, index) => {\n const virtualDimensions = createMemo(() =>\n context.horizontalViewPort.getVirtualDimensions(tick(), gridDivisorTicks()),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class=\"PianoRoll-Grid-Time\"\n style={{\n \"z-index\": 1,\n position: \"absolute\",\n \"box-sizing\": \"border-box\",\n background: index % 4 === 0 ? \"#ccc\" : \"#ddd\",\n top: `0px`,\n height: `100%`,\n left: `${virtualDimensions().offset}px`,\n width: `${virtualDimensions().size}px`,\n \"border-left\": \"1px gray solid\",\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n context.verticalViewPort.getVirtualDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class=\"PianoRoll-Grid-Key\"\n style={{\n position: \"absolute\",\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n width: \"100%\",\n \"background-color\": key().isBlack ? \"rgba(0,0,0,0.2)\" : \"none\",\n \"border-style\": \"solid\",\n \"border-color\": \"gray\",\n \"border-width\": `${\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12) ? \"0.1px\" : 0\n } 1px ${\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12) ? \"0.1px\" : 0\n } 0`,\n \"z-index\": 1,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </div>\n </div>\n );\n};\n\nexport default PianoRollGrid;\n","import styles from \"./PianoRoll.module.css\";\nimport { Midi } from \"@tonejs/midi\";\n\nimport { JSX, splitProps, createSignal } from \"solid-js\";\nimport HorizontalZoomControl from \"./HorizontalZoomControl\";\n\nimport { PianoRollContextProvider } from \"./PianoRollContext\";\nimport PianoRollKeys from \"./PianoRollKeys\";\nimport PianoRollNotes from \"./PianoRollNotes\";\nimport ScrollContainer from \"./ScrollContainer\";\nimport VerticalZoomControl from \"./VerticalZoomControl\";\nimport PianoRollGrid from \"./PianoRollGrid\";\n\ntype Note = Pick<\n ReturnType<Midi[\"tracks\"][number][\"notes\"][number][\"toJSON\"]>,\n \"durationTicks\" | \"midi\" | \"ticks\" | \"velocity\"\n>;\n\nexport type GridDivision = 1 | 2 | 4 | 8 | 16 | 32 | 64;\n\nexport type PianoRollProps = {\n ppq: number;\n notes: Note[];\n\n gridDivision: GridDivision;\n snapToGrid: boolean;\n\n verticalPosition: number;\n verticalZoom: number;\n\n position: number;\n duration: number;\n zoom: number;\n\n onVerticalZoomChange?: (zoom: number) => void;\n onVerticalPositionChange?: (zoom: number) => void;\n onZoomChange?: (zoom: number) => void;\n onPositionChange?: (zoom: number) => void;\n\n onNoteChange?: (index: number, note: Note) => void;\n onInsertNote?: (note: Note) => void;\n};\n\nconst PianoRoll = (allProps: PianoRollProps & JSX.IntrinsicElements[\"div\"]) => {\n const [contextProps, divProps] = splitProps(allProps, [\n \"ppq\",\n \"notes\",\n \"position\",\n \"duration\",\n \"zoom\",\n \"verticalPosition\",\n \"verticalZoom\",\n \"onVerticalZoomChange\",\n \"onVerticalPositionChange\",\n \"onZoomChange\",\n \"onPositionChange\",\n \"onNoteChange\",\n \"gridDivision\",\n \"snapToGrid\",\n \"onInsertNote\",\n ]);\n\n const [scrollContainer, setScrollContainer] = createSignal<HTMLDivElement>();\n const [notesContainer, setNotesContainer] = createSignal<HTMLDivElement>();\n\n return (\n <PianoRollContextProvider\n {...contextProps}\n scrollContainer={scrollContainer()}\n notesContainer={notesContainer()}\n >\n <div {...divProps} class={styles.PianoRoll}>\n <div class={styles.PianoRollContainer}>\n <PianoRollKeys />\n\n <div class={styles.PianoRollInnerContainer}>\n <PianoRollNotes ref={setNotesContainer} />\n <PianoRollGrid />\n <ScrollContainer ref={setScrollContainer} />\n </div>\n\n <VerticalZoomControl />\n </div>\n\n <HorizontalZoomControl />\n </div>\n </PianoRollContextProvider>\n );\n};\n\nexport default PianoRoll;\n"],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","defaultRect","left","width","top","height","bottom","right","x","y","useBoundingClientRect","containerRef","boundingClientRect","setBoundingClientRect","createSignal","createEffect","container","updateBoundingClientRect","getBoundingClientRect","resizeObserver","ResizeObserver","observe","disconnect","clamp","value","min","max","Math","useViewPortScaler","getState","state","createMemo","getScaledValue","position","virtualSize","viewPortSize","zoom","virtualRange","getCoordinates","virtualPosition","getPosition","offset","visibleDuration","percentX","viewPortOffset","getVirtualDimensions","length","virtualLeft","virtualWidth","size","PianoRollContext","createContext","undefined","PianoRollContextProvider","props","noteDragMode","setNoteDragMode","isDragging","setIsDragging","_ownProps","contextProps","splitProps","clientRect","scrollContainer","horizontalViewPort","duration","verticalViewPort","verticalPosition","verticalZoom","getContextValue","onIsDraggingChange","onNoteDragModeChange","contextValue","setContextValue","createStore","_$createComponent","children","usePianoRollContext","context","useContext","Error","HorizontalZoomControl","_tmpl$","event","onZoomChange","currentTarget","valueAsNumber","_$effect","_$delegateEvents","PianoRollKeys","_$insert","keys","key","virtualDimensions","number","styles","name","isBlack","blackKeys","includes","_$className","_$setAttribute","keyNames","Array","from","map","_","index","floor","PianoRollNotes","gridDivisionTicks","ppq","gridDivision","snapValueToGridIfEnabled","altKey","snapToGrid","round","notes","note","horizontalVirtualDimensions","midi","verticalVirtualDimensions","ticks","durationTicks","_$memo","_tmpl$2","initialPosition","clientX","diffPosition","handleMouseMove","mouseMoveEvent","onNoteChange","clientY","handleMouseUp","window","removeEventListener","addEventListener","relativeX","noteStartX","noteEndX","velocity","ScrollContainer","scrollContentRef","gridDivisorTicks","forwardEventToNote","touches","elementUnderMouse","notesContainer","querySelectorAll","find","element","rect","dispatchEvent","MouseEvent","handleScroll","preventDefault","didUpdateScroll","maxVerticalPosition","maxPosition","scrollTop","scrollLeft","scrollWidth","scrollHeight","scrollTopAmount","scrollLeftAmount","onVerticalPositionChange","onPositionChange","parentElement","scrollDivHeight","scrollDivWidth","scrollTo","onInsertNote","_$use","_$style","flex","cursor","overflow","VerticalZoomControl","onVerticalZoomChange","_$spread","_$mergeProps","orient","PianoRollGrid","gridArray","numberOfLines","tick","PianoRoll","allProps","divProps","setScrollContainer","setNotesContainer","PianoRollContainer","PianoRollInnerContainer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../node_modules/style-inject/dist/style-inject.es.js","../../src/useBoundingClientRect.ts","../../src/helpers.ts","../../src/useViewPortScaler.ts","../../src/PianoRollContext.tsx","../../src/HorizontalZoomControl.tsx","../../src/PianoRollKeys.tsx","../../src/PianoRollNotes.tsx","../../src/ScrollContainer.tsx","../../src/VerticalZoomControl.tsx","../../src/PianoRollGrid.tsx","../../src/PianoRoll.tsx","../../src/usePianoRoll.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { Accessor, createEffect, createSignal, onCleanup, onMount } 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","export const clamp = (value: number, min: number, max: number) => {\n return Math.max(min, Math.min(max, value));\n};\n","import { createMemo } from \"solid-js\";\nimport { clamp } from \"./helpers\";\n\nexport type ViewPortScaler = ReturnType<typeof useViewPortScaler>;\n\nexport default function useViewPortScaler(\n getState: () => {\n virtualPosition: number;\n virtualRange: number;\n\n viewPortOffset: number;\n viewPortSize: number;\n\n zoom: number;\n },\n) {\n const state = createMemo(() => getState());\n\n function getScaledValue(position: number) {\n const virtualSize = state().viewPortSize * state().zoom;\n return (position / state().virtualRange) * virtualSize;\n }\n\n function getCoordinates(position: number) {\n return getScaledValue(position) - getScaledValue(state().virtualPosition);\n }\n\n function getPosition(offset: number) {\n const visibleDuration = state().virtualRange / state().zoom;\n const percentX = (offset - state().viewPortOffset) / state().viewPortSize;\n const position = state().virtualPosition + percentX * visibleDuration;\n\n return position;\n }\n\n function getVirtualDimensions(position: number, length: number) {\n const virtualLeft = getCoordinates(position);\n const virtualWidth = getScaledValue(length);\n\n const offset = clamp(virtualLeft, 0, state().viewPortSize);\n const size = clamp(virtualWidth - (offset - virtualLeft), 0, state().viewPortSize - offset);\n\n return { offset, size };\n }\n\n return {\n getScaledValue,\n getCoordinates,\n getPosition,\n getVirtualDimensions,\n };\n}\n","import {\n createContext,\n createEffect,\n createMemo,\n createSignal,\n JSX,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport { createStore } from \"solid-js/store\";\n\nimport { PianoRollProps } from \"./PianoRoll\";\nimport useBoundingClientRect, { ClientRect } from \"./useBoundingClientRect\";\nimport useViewPortScaler, { ViewPortScaler } from \"./useViewPortScaler\";\n\nexport type NoteDragMode = \"trimStart\" | \"move\" | \"trimEnd\" | undefined;\ntype PianoRollContext = {\n horizontalViewPort: ViewPortScaler;\n verticalViewPort: ViewPortScaler;\n clientRect: ClientRect;\n\n notesContainer?: HTMLDivElement;\n\n isDragging: boolean;\n onIsDraggingChange: (isDragging: boolean) => void;\n\n noteDragMode: NoteDragMode;\n onNoteDragModeChange: (isDragging: NoteDragMode) => void;\n} & PianoRollProps;\n\nconst PianoRollContext = createContext<PianoRollContext>(undefined!);\n\nexport const PianoRollContextProvider = (\n props: {\n scrollContainer?: HTMLDivElement;\n notesContainer?: HTMLDivElement;\n\n children: JSX.Element;\n } & PianoRollProps,\n) => {\n const [noteDragMode, setNoteDragMode] = createSignal<NoteDragMode>();\n const [isDragging, setIsDragging] = createSignal(false);\n\n const [_ownProps, contextProps] = splitProps(props, [\"children\", \"scrollContainer\"]);\n const clientRect = useBoundingClientRect(() => props.scrollContainer);\n\n const horizontalViewPort = useViewPortScaler(() => ({\n viewPortOffset: clientRect().left,\n viewPortSize: clientRect().width,\n\n virtualPosition: props.position,\n virtualRange: props.duration,\n zoom: props.zoom,\n }));\n\n const verticalViewPort = useViewPortScaler(() => ({\n viewPortOffset: clientRect().top,\n viewPortSize: clientRect().height,\n\n virtualPosition: props.verticalPosition,\n zoom: props.verticalZoom,\n\n virtualRange: 128,\n }));\n\n const getContextValue = () => {\n return {\n ...contextProps,\n horizontalViewPort,\n verticalViewPort,\n clientRect: clientRect(),\n\n isDragging: isDragging(),\n onIsDraggingChange: setIsDragging,\n\n noteDragMode: noteDragMode(),\n onNoteDragModeChange: setNoteDragMode,\n };\n };\n\n const [contextValue, setContextValue] = createStore<PianoRollContext>(getContextValue());\n\n createEffect(() => {\n setContextValue(getContextValue());\n });\n\n return (\n <PianoRollContext.Provider value={contextValue}>{props.children}</PianoRollContext.Provider>\n );\n};\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","import { usePianoRollContext } from \"./PianoRollContext\";\n\nconst HorizontalZoomControl = () => {\n const context = usePianoRollContext();\n\n return (\n <input\n value={context.zoom}\n onInput={(event) => context.onZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n max=\"500\"\n min=\"1\"\n step={0.01}\n style={{\n \"margin-left\": \"50px\",\n \"margin-right\": \"16px\",\n }}\n />\n );\n};\n\nexport default HorizontalZoomControl;\n","import styles from \"./PianoRollKeys.module.css\";\nimport { createMemo, Index, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollKeys = () => {\n const context = usePianoRollContext();\n\n return (\n <div class={styles.PianoRollKeys}>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n context.verticalViewPort.getVirtualDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class={styles[\"PianoRollKeys-Key\"]}\n title={key().name}\n data-index={key().number % 12}\n style={{\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n \"background-color\": key().isBlack ? \"#000\" : \"#fff\",\n \"border-width\": `${\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12) ? \"0.1px\" : 0\n } 1px ${\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12) ? \"0.1px\" : 0\n } 0`,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </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, Index, Ref, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst PianoRollNotes = (props: { ref: Ref<HTMLDivElement | undefined> }) => {\n const context = usePianoRollContext();\n\n const gridDivisionTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n\n const snapValueToGridIfEnabled = (value: number, altKey: boolean) =>\n context.snapToGrid && !altKey\n ? Math.round(value / gridDivisionTicks()) * gridDivisionTicks()\n : value;\n\n return (\n <div\n class=\"PianoRoll-Notes-Container\"\n style={{\n position: \"absolute\",\n width: `${context.clientRect.width}px`,\n height: `${context.clientRect.height}px`,\n }}\n >\n <div\n class=\"PianoRoll-Notes\"\n ref={props.ref}\n style={{\n position: \"relative\",\n width: `${context.clientRect.width}px`,\n height: \"100%\",\n }}\n >\n <Index each={context.notes}>\n {(note, index) => {\n const horizontalVirtualDimensions = createMemo(() =>\n context.verticalViewPort.getVirtualDimensions(127 - note().midi, 1),\n );\n\n const verticalVirtualDimensions = createMemo(() =>\n context.horizontalViewPort.getVirtualDimensions(note().ticks, note().durationTicks),\n );\n\n return (\n <Show\n when={!!horizontalVirtualDimensions().size && !!verticalVirtualDimensions().size}\n >\n <div\n class=\"PianoRoll-Note\"\n onMouseMove={(event) => {\n if (context.isDragging) return;\n\n const relativeX = context.horizontalViewPort.getScaledValue(\n context.horizontalViewPort.getPosition(event.clientX),\n );\n const noteStartX = context.horizontalViewPort.getScaledValue(note().ticks);\n const noteEndX = context.horizontalViewPort.getScaledValue(\n note().ticks + note().durationTicks,\n );\n\n context.onNoteDragModeChange(\n relativeX - noteStartX < 3\n ? \"trimStart\"\n : noteEndX - relativeX < 3\n ? \"trimEnd\"\n : \"move\",\n );\n }}\n onDblClick={() => {\n context.onRemoveNote?.(index);\n }}\n onMouseDown={(event) => {\n context.onIsDraggingChange(true);\n const initialPosition = context.horizontalViewPort.getPosition(event.clientX);\n const diffPosition = initialPosition - note().ticks;\n\n const handleMouseMove = (mouseMoveEvent: MouseEvent) => {\n const ticks = snapValueToGridIfEnabled(\n Math.max(\n context.horizontalViewPort.getPosition(mouseMoveEvent.clientX) -\n diffPosition,\n 0,\n ),\n mouseMoveEvent.altKey,\n );\n\n context.onNoteChange?.(index, {\n ...note(),\n ...(context.noteDragMode === \"move\" && {\n midi: Math.round(\n 127 - context.verticalViewPort.getPosition(mouseMoveEvent.clientY),\n ),\n }),\n ...((context.noteDragMode === \"move\" ||\n context.noteDragMode === \"trimStart\") && {\n ticks,\n }),\n ...(context.noteDragMode === \"trimStart\" && {\n durationTicks: note().durationTicks + note().ticks - ticks,\n }),\n ...(context.noteDragMode === \"trimEnd\" && {\n durationTicks: snapValueToGridIfEnabled(\n context.horizontalViewPort.getPosition(mouseMoveEvent.clientX) -\n note().ticks,\n mouseMoveEvent.altKey,\n ),\n }),\n });\n };\n const handleMouseUp = () => {\n context.onIsDraggingChange(false);\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"mouseup\", handleMouseUp);\n };\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"mouseup\", handleMouseUp);\n }}\n style={{\n \"z-index\": 2,\n position: \"absolute\",\n \"box-sizing\": \"border-box\",\n top: `${horizontalVirtualDimensions().offset}px`,\n height: `${horizontalVirtualDimensions().size}px`,\n left: `${verticalVirtualDimensions().offset}px`,\n width: `${verticalVirtualDimensions().size}px`,\n \"border-width\": \"0.5px\",\n \"border-style\": \"solid\",\n \"background-color\": `rgba(255,0,0, ${(128 + note().velocity) / 256})`,\n \"border-color\": \"#a00\",\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </div>\n </div>\n );\n};\n\nexport default PianoRollNotes;\n","import { createEffect, createMemo, createSignal, Ref } from \"solid-js\";\nimport { clamp } from \"./helpers\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\n\nconst ScrollContainer = (props: { ref: Ref<HTMLDivElement> }) => {\n let scrollContentRef: HTMLDivElement | undefined;\n const context = usePianoRollContext();\n\n const gridDivisorTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n\n const forwardEventToNote = (event: MouseEvent | PointerEvent | TouchEvent) => {\n const x = \"clientX\" in event ? event.clientX : event.touches[0]?.clientX ?? 0;\n const y = \"clientY\" in event ? event.clientY : event.touches[0]?.clientY ?? 0;\n\n const elementUnderMouse = [...(context.notesContainer?.querySelectorAll?.(\"div\") ?? [])].find(\n (element) => {\n const rect = element.getBoundingClientRect();\n\n return (\n x >= rect.left &&\n rect.left + rect.width > x &&\n y >= rect.top &&\n rect.top + rect.height > y\n );\n },\n );\n\n if (elementUnderMouse) {\n return elementUnderMouse.dispatchEvent(new MouseEvent(event.type, event));\n }\n };\n\n const handleScroll = (event: UIEvent & { currentTarget: Element }) => {\n event.preventDefault();\n\n if (didUpdateScroll) {\n didUpdateScroll = false;\n return;\n }\n const maxVerticalPosition = 128 - 128 / context.verticalZoom;\n const maxPosition = context.duration - context.duration / context.zoom;\n\n const { width, height } = context.clientRect;\n const { scrollTop, scrollLeft, scrollWidth, scrollHeight } = event.currentTarget;\n\n const scrollTopAmount = scrollTop / (scrollHeight - height);\n const scrollLeftAmount = scrollLeft / (scrollWidth - width);\n\n context.onVerticalPositionChange?.(maxVerticalPosition * scrollTopAmount);\n context.onPositionChange?.(maxPosition * scrollLeftAmount);\n };\n\n let didUpdateScroll = false;\n\n createEffect(() => {\n const maxVerticalPosition = 128 - 128 / context.verticalZoom;\n const maxPosition = context.duration - context.duration / context.zoom;\n\n const scrollTopAmount =\n maxVerticalPosition > 0 ? context.verticalPosition / maxVerticalPosition : 0;\n const scrollLeftAmount = maxPosition > 0 ? context.position / maxPosition : 0;\n\n const { height, width } = context.clientRect;\n\n if (!scrollContentRef?.parentElement) return;\n\n const scrollDivHeight = clamp(context.verticalZoom * height, height, 10000);\n const scrollTop = scrollTopAmount * (scrollDivHeight - height);\n\n const scrollDivWidth = clamp(context.zoom * width, width, 10000);\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 const insertOrUpdateNote = (event: MouseEvent) => {\n const position = context.horizontalViewPort.getPosition(event.clientX);\n const midi = 127 - Math.floor(context.verticalViewPort.getPosition(event.clientY));\n const eventPositionTicks = Math.floor(position / gridDivisorTicks()) * gridDivisorTicks();\n const velocity = 127;\n\n const existingNote = newNote();\n\n const ticks = existingNote?.ticks ?? eventPositionTicks;\n const durationTicks = existingNote?.ticks\n ? eventPositionTicks - existingNote?.ticks\n : gridDivisorTicks();\n\n const note = { midi, ticks, durationTicks, velocity };\n\n if (existingNote) {\n context.onNoteChange?.(newNoteIndex(), note);\n return newNoteIndex();\n } else {\n return context.onInsertNote?.(note) ?? -1;\n }\n };\n\n const [newNoteIndex, setNewNoteIndex] = createSignal(-1);\n const newNote = createMemo(() => context.notes[newNoteIndex()]);\n const [isMouseDown, setIsMouseDown] = createSignal(false);\n\n return (\n <div\n ref={props.ref}\n class=\"PianoRoll-Vertical-Scroller\"\n style={{\n flex: 1,\n ...(context.noteDragMode && {\n cursor:\n context.noteDragMode === \"trimStart\"\n ? \"w-resize\"\n : context.noteDragMode === \"trimEnd\"\n ? \"e-resize\"\n : \"pointer\",\n }),\n \"z-index\": 4,\n overflow: \"scroll\",\n \"pointer-events\": \"auto\",\n }}\n onScroll={handleScroll}\n onMouseDown={(event) => {\n if (forwardEventToNote(event)) return;\n\n setIsMouseDown(true);\n }}\n onMouseMove={(event) => {\n event.preventDefault();\n\n if (forwardEventToNote(event)) return;\n if (context.isDragging) return;\n\n if (!isMouseDown()) {\n context.onNoteDragModeChange(undefined);\n return;\n }\n\n const index = insertOrUpdateNote(event);\n\n setNewNoteIndex(index);\n }}\n onDblClick={(event) => {\n if (newNote()) return;\n if (context.isDragging) return;\n if (forwardEventToNote(event)) return;\n\n insertOrUpdateNote(event);\n }}\n onClick={(event) => {\n if (newNote()) {\n setNewNoteIndex(-1);\n return;\n }\n\n if (forwardEventToNote(event)) return;\n if (!event.altKey) return;\n\n insertOrUpdateNote(event);\n }}\n onMouseUp={(event) => {\n setIsMouseDown(false);\n if (newNote()) return;\n if (forwardEventToNote(event)) return;\n if (!event.altKey) return;\n\n insertOrUpdateNote(event);\n }}\n onTouchStart={forwardEventToNote}\n onTouchMove={forwardEventToNote}\n onTouchEnd={forwardEventToNote}\n onTouchCancel={forwardEventToNote}\n onDragStart={forwardEventToNote}\n onDrag={forwardEventToNote}\n onDragEnd={forwardEventToNote}\n >\n <div ref={scrollContentRef}></div>\n </div>\n );\n};\n\nexport default ScrollContainer;\n","import { usePianoRollContext } from \"./PianoRollContext\";\n\nconst VerticalZoomControl = () => {\n const context = usePianoRollContext();\n\n return (\n <input\n value={context.verticalZoom}\n onInput={(event) => context.onVerticalZoomChange?.(event.currentTarget.valueAsNumber)}\n type=\"range\"\n min=\"1\"\n max=\"11\"\n step={0.01}\n {...{ orient: \"vertical\" }}\n style={{\n width: \"16px\",\n ...({\n \"writing-mode\": \"bt-lr\" /* IE */,\n \"-webkit-appearance\": \"slider-vertical\" /* WebKit */,\n } as any),\n }}\n />\n );\n};\n\nexport default VerticalZoomControl;\n","import { createEffect, createMemo, Index, Ref, Show } from \"solid-js\";\nimport { usePianoRollContext } from \"./PianoRollContext\";\nimport { blackKeys, keys } from \"./PianoRollKeys\";\n\nconst PianoRollGrid = () => {\n const context = usePianoRollContext();\n\n const gridDivisorTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);\n const gridArray = createMemo(() => {\n const numberOfLines = context.duration / gridDivisorTicks();\n return Array.from({ length: numberOfLines }).map((_, index) => index * gridDivisorTicks());\n });\n\n return (\n <div\n class=\"PianoRoll-Grid-Container\"\n style={{\n position: \"absolute\",\n width: `${context.clientRect.width}px`,\n height: `${context.clientRect.height}px`,\n }}\n >\n <div\n class=\"PianoRoll-Grid\"\n style={{\n position: \"relative\",\n width: `${context.clientRect.width}px`,\n height: \"100%\",\n }}\n >\n <Index each={gridArray()}>\n {(tick, index) => {\n const virtualDimensions = createMemo(() =>\n context.horizontalViewPort.getVirtualDimensions(tick(), gridDivisorTicks()),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class=\"PianoRoll-Grid-Time\"\n style={{\n \"z-index\": 1,\n position: \"absolute\",\n \"box-sizing\": \"border-box\",\n background: index % 4 === 0 ? \"#ccc\" : \"#ddd\",\n top: `0px`,\n height: `100%`,\n left: `${virtualDimensions().offset}px`,\n width: `${virtualDimensions().size}px`,\n \"border-left\": \"1px gray solid\",\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n <Index each={keys}>\n {(key) => {\n const virtualDimensions = createMemo(() =>\n context.verticalViewPort.getVirtualDimensions(127 - key().number, 1),\n );\n\n return (\n <Show when={virtualDimensions().size > 0}>\n <div\n class=\"PianoRoll-Grid-Key\"\n style={{\n position: \"absolute\",\n top: `${virtualDimensions().offset}px`,\n height: `${virtualDimensions().size}px`,\n width: \"100%\",\n \"background-color\": key().isBlack ? \"rgba(0,0,0,0.2)\" : \"none\",\n \"border-style\": \"solid\",\n \"border-color\": \"gray\",\n \"border-width\": `${\n !key().isBlack && !blackKeys.includes((key().number + 1) % 12) ? \"0.1px\" : 0\n } 1px ${\n !key().isBlack && !blackKeys.includes((key().number - 1) % 12) ? \"0.1px\" : 0\n } 0`,\n \"z-index\": 1,\n }}\n ></div>\n </Show>\n );\n }}\n </Index>\n </div>\n </div>\n );\n};\n\nexport default PianoRollGrid;\n","import styles from \"./PianoRoll.module.css\";\nimport { Midi } from \"@tonejs/midi\";\n\nimport { JSX, splitProps, createSignal } from \"solid-js\";\nimport HorizontalZoomControl from \"./HorizontalZoomControl\";\n\nimport { PianoRollContextProvider } from \"./PianoRollContext\";\nimport PianoRollKeys from \"./PianoRollKeys\";\nimport PianoRollNotes from \"./PianoRollNotes\";\nimport ScrollContainer from \"./ScrollContainer\";\nimport VerticalZoomControl from \"./VerticalZoomControl\";\nimport PianoRollGrid from \"./PianoRollGrid\";\nimport { Note } from \"./types\";\n\nexport type GridDivision = 1 | 2 | 4 | 8 | 16 | 32 | 64;\n\nexport type PianoRollProps = {\n ppq: number;\n notes: Note[];\n\n gridDivision: GridDivision;\n snapToGrid: boolean;\n\n verticalPosition: number;\n verticalZoom: number;\n\n position: number;\n duration: number;\n zoom: number;\n\n onVerticalZoomChange?: (zoom: number) => void;\n onVerticalPositionChange?: (zoom: number) => void;\n onZoomChange?: (zoom: number) => void;\n onPositionChange?: (zoom: number) => void;\n\n onNoteChange?: (index: number, note: Note) => void;\n onInsertNote?: (note: Note) => number;\n onRemoveNote?: (index: number) => void;\n};\n\nconst PianoRoll = (allProps: PianoRollProps & JSX.IntrinsicElements[\"div\"]) => {\n const [contextProps, divProps] = splitProps(allProps, [\n \"ppq\",\n \"notes\",\n \"position\",\n \"duration\",\n \"zoom\",\n \"verticalPosition\",\n \"verticalZoom\",\n \"onVerticalZoomChange\",\n \"onVerticalPositionChange\",\n \"onZoomChange\",\n \"onPositionChange\",\n \"onNoteChange\",\n \"gridDivision\",\n \"snapToGrid\",\n \"onInsertNote\",\n \"onRemoveNote\",\n ]);\n\n const [scrollContainer, setScrollContainer] = createSignal<HTMLDivElement>();\n const [notesContainer, setNotesContainer] = createSignal<HTMLDivElement>();\n\n return (\n <PianoRollContextProvider\n {...contextProps}\n scrollContainer={scrollContainer()}\n notesContainer={notesContainer()}\n >\n <div {...divProps} class={styles.PianoRoll}>\n <div class={styles.PianoRollContainer}>\n <PianoRollKeys />\n\n <div class={styles.PianoRollInnerContainer}>\n <PianoRollNotes ref={setNotesContainer} />\n <PianoRollGrid />\n <ScrollContainer ref={setScrollContainer} />\n </div>\n\n <VerticalZoomControl />\n </div>\n\n <HorizontalZoomControl />\n </div>\n </PianoRollContextProvider>\n );\n};\n\nexport default PianoRoll;\n","import { createEffect, createSignal } from \"solid-js\";\nimport { GridDivision } from \"./PianoRoll\";\nimport { Note } from \"./types\";\n\nconst usePianoRoll = () => {\n const [position, setPosition] = createSignal(0);\n\n const [zoom, setZoom] = createSignal(10);\n const [verticalZoom, setVerticalZoom] = createSignal(5);\n const [verticalPosition, setVerticalPosition] = createSignal(64);\n\n const [gridDivision, setGridDivision] = createSignal<GridDivision>(16);\n const [snapToGrid, setSnapToGrid] = createSignal(true);\n\n const [notes, setNotes] = createSignal<Note[]>([]);\n const [duration, setDuration] = createSignal(0);\n\n createEffect(() => {\n setDuration(\n (notes()[notes().length - 1]?.ticks ?? 0) + (notes()[notes().length - 1]?.durationTicks ?? 0),\n );\n });\n\n return {\n position,\n setPosition,\n\n zoom,\n setZoom,\n\n verticalPosition,\n setVerticalPosition,\n\n verticalZoom,\n setVerticalZoom,\n\n gridDivision,\n setGridDivision,\n\n snapToGrid,\n setSnapToGrid,\n\n notes,\n setNotes,\n\n duration,\n };\n};\n\nexport default usePianoRoll;\n"],"names":["styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","defaultRect","left","width","top","height","bottom","right","x","y","useBoundingClientRect","containerRef","boundingClientRect","setBoundingClientRect","createSignal","createEffect","container","updateBoundingClientRect","getBoundingClientRect","resizeObserver","ResizeObserver","observe","disconnect","clamp","value","min","max","Math","useViewPortScaler","getState","state","createMemo","getScaledValue","position","virtualSize","viewPortSize","zoom","virtualRange","getCoordinates","virtualPosition","getPosition","offset","visibleDuration","percentX","viewPortOffset","getVirtualDimensions","length","virtualLeft","virtualWidth","size","PianoRollContext","createContext","undefined","PianoRollContextProvider","props","noteDragMode","setNoteDragMode","isDragging","setIsDragging","_ownProps","contextProps","splitProps","clientRect","scrollContainer","horizontalViewPort","duration","verticalViewPort","verticalPosition","verticalZoom","getContextValue","onIsDraggingChange","onNoteDragModeChange","contextValue","setContextValue","createStore","_$createComponent","children","usePianoRollContext","context","useContext","Error","HorizontalZoomControl","_tmpl$","event","onZoomChange","currentTarget","valueAsNumber","_$effect","_$delegateEvents","PianoRollKeys","_$insert","keys","key","virtualDimensions","number","styles","name","isBlack","blackKeys","includes","_$className","_$setAttribute","keyNames","Array","from","map","_","index","floor","PianoRollNotes","gridDivisionTicks","ppq","gridDivision","snapValueToGridIfEnabled","altKey","snapToGrid","round","notes","note","horizontalVirtualDimensions","midi","verticalVirtualDimensions","ticks","durationTicks","_$memo","_tmpl$2","initialPosition","clientX","diffPosition","handleMouseMove","mouseMoveEvent","onNoteChange","clientY","handleMouseUp","window","removeEventListener","addEventListener","onRemoveNote","relativeX","noteStartX","noteEndX","velocity","ScrollContainer","scrollContentRef","gridDivisorTicks","forwardEventToNote","touches","elementUnderMouse","notesContainer","querySelectorAll","find","element","rect","dispatchEvent","MouseEvent","handleScroll","preventDefault","didUpdateScroll","maxVerticalPosition","maxPosition","scrollTop","scrollLeft","scrollWidth","scrollHeight","scrollTopAmount","scrollLeftAmount","onVerticalPositionChange","onPositionChange","parentElement","scrollDivHeight","scrollDivWidth","scrollTo","insertOrUpdateNote","eventPositionTicks","existingNote","newNote","newNoteIndex","onInsertNote","setNewNoteIndex","isMouseDown","setIsMouseDown","_$use","_$style","flex","cursor","overflow","VerticalZoomControl","onVerticalZoomChange","_$spread","_$mergeProps","orient","PianoRollGrid","gridArray","numberOfLines","tick","PianoRoll","allProps","divProps","setScrollContainer","setNotesContainer","PianoRollContainer","PianoRollInnerContainer","usePianoRoll","setPosition","setZoom","setVerticalZoom","setVerticalPosition","setGridDivision","setSnapToGrid","setNotes","setDuration"],"mappings":"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"}
|
|
@@ -32,6 +32,8 @@ const PianoRollNotes = (props) => {
|
|
|
32
32
|
: noteEndX - relativeX < 3
|
|
33
33
|
? "trimEnd"
|
|
34
34
|
: "move");
|
|
35
|
+
}} onDblClick={() => {
|
|
36
|
+
context.onRemoveNote?.(index);
|
|
35
37
|
}} onMouseDown={(event) => {
|
|
36
38
|
context.onIsDraggingChange(true);
|
|
37
39
|
const initialPosition = context.horizontalViewPort.getPosition(event.clientX);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createEffect, createMemo } from "solid-js";
|
|
1
|
+
import { createEffect, createMemo, createSignal } from "solid-js";
|
|
2
2
|
import { clamp } from "./helpers";
|
|
3
3
|
import { usePianoRollContext } from "./PianoRollContext";
|
|
4
4
|
const ScrollContainer = (props) => {
|
|
@@ -6,8 +6,8 @@ const ScrollContainer = (props) => {
|
|
|
6
6
|
const context = usePianoRollContext();
|
|
7
7
|
const gridDivisorTicks = createMemo(() => (context.ppq * 4) / context.gridDivision);
|
|
8
8
|
const forwardEventToNote = (event) => {
|
|
9
|
-
const x = "clientX" in event ? event.clientX : event.touches[0]?.clientX;
|
|
10
|
-
const y = "clientY" in event ? event.clientY : event.touches[0]?.clientY;
|
|
9
|
+
const x = "clientX" in event ? event.clientX : event.touches[0]?.clientX ?? 0;
|
|
10
|
+
const y = "clientY" in event ? event.clientY : event.touches[0]?.clientY ?? 0;
|
|
11
11
|
const elementUnderMouse = [...(context.notesContainer?.querySelectorAll?.("div") ?? [])].find((element) => {
|
|
12
12
|
const rect = element.getBoundingClientRect();
|
|
13
13
|
return (x >= rect.left &&
|
|
@@ -55,6 +55,28 @@ const ScrollContainer = (props) => {
|
|
|
55
55
|
top: scrollTop,
|
|
56
56
|
});
|
|
57
57
|
});
|
|
58
|
+
const insertOrUpdateNote = (event) => {
|
|
59
|
+
const position = context.horizontalViewPort.getPosition(event.clientX);
|
|
60
|
+
const midi = 127 - Math.floor(context.verticalViewPort.getPosition(event.clientY));
|
|
61
|
+
const eventPositionTicks = Math.floor(position / gridDivisorTicks()) * gridDivisorTicks();
|
|
62
|
+
const velocity = 127;
|
|
63
|
+
const existingNote = newNote();
|
|
64
|
+
const ticks = existingNote?.ticks ?? eventPositionTicks;
|
|
65
|
+
const durationTicks = existingNote?.ticks
|
|
66
|
+
? eventPositionTicks - existingNote?.ticks
|
|
67
|
+
: gridDivisorTicks();
|
|
68
|
+
const note = { midi, ticks, durationTicks, velocity };
|
|
69
|
+
if (existingNote) {
|
|
70
|
+
context.onNoteChange?.(newNoteIndex(), note);
|
|
71
|
+
return newNoteIndex();
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
return context.onInsertNote?.(note) ?? -1;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const [newNoteIndex, setNewNoteIndex] = createSignal(-1);
|
|
78
|
+
const newNote = createMemo(() => context.notes[newNoteIndex()]);
|
|
79
|
+
const [isMouseDown, setIsMouseDown] = createSignal(false);
|
|
58
80
|
return (<div ref={props.ref} class="PianoRoll-Vertical-Scroller" style={{
|
|
59
81
|
flex: 1,
|
|
60
82
|
...(context.noteDragMode && {
|
|
@@ -67,23 +89,50 @@ const ScrollContainer = (props) => {
|
|
|
67
89
|
"z-index": 4,
|
|
68
90
|
overflow: "scroll",
|
|
69
91
|
"pointer-events": "auto",
|
|
70
|
-
}} onScroll={handleScroll} onMouseDown={
|
|
92
|
+
}} onScroll={handleScroll} onMouseDown={(event) => {
|
|
93
|
+
if (forwardEventToNote(event))
|
|
94
|
+
return;
|
|
95
|
+
setIsMouseDown(true);
|
|
96
|
+
}} onMouseMove={(event) => {
|
|
97
|
+
event.preventDefault();
|
|
71
98
|
if (forwardEventToNote(event))
|
|
72
99
|
return;
|
|
73
100
|
if (context.isDragging)
|
|
74
101
|
return;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
102
|
+
if (!isMouseDown()) {
|
|
103
|
+
context.onNoteDragModeChange(undefined);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const index = insertOrUpdateNote(event);
|
|
107
|
+
setNewNoteIndex(index);
|
|
108
|
+
}} onDblClick={(event) => {
|
|
109
|
+
if (newNote())
|
|
110
|
+
return;
|
|
111
|
+
if (context.isDragging)
|
|
112
|
+
return;
|
|
113
|
+
if (forwardEventToNote(event))
|
|
114
|
+
return;
|
|
115
|
+
insertOrUpdateNote(event);
|
|
116
|
+
}} onClick={(event) => {
|
|
117
|
+
if (newNote()) {
|
|
118
|
+
setNewNoteIndex(-1);
|
|
119
|
+
return;
|
|
85
120
|
}
|
|
86
|
-
|
|
121
|
+
if (forwardEventToNote(event))
|
|
122
|
+
return;
|
|
123
|
+
if (!event.altKey)
|
|
124
|
+
return;
|
|
125
|
+
insertOrUpdateNote(event);
|
|
126
|
+
}} onMouseUp={(event) => {
|
|
127
|
+
setIsMouseDown(false);
|
|
128
|
+
if (newNote())
|
|
129
|
+
return;
|
|
130
|
+
if (forwardEventToNote(event))
|
|
131
|
+
return;
|
|
132
|
+
if (!event.altKey)
|
|
133
|
+
return;
|
|
134
|
+
insertOrUpdateNote(event);
|
|
135
|
+
}} onTouchStart={forwardEventToNote} onTouchMove={forwardEventToNote} onTouchEnd={forwardEventToNote} onTouchCancel={forwardEventToNote} onDragStart={forwardEventToNote} onDrag={forwardEventToNote} onDragEnd={forwardEventToNote}>
|
|
87
136
|
<div ref={scrollContentRef}></div>
|
|
88
137
|
</div>);
|
|
89
138
|
};
|
package/dist/source/index.jsx
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { createEffect, createSignal } from "solid-js";
|
|
2
|
+
const usePianoRoll = () => {
|
|
3
|
+
const [position, setPosition] = createSignal(0);
|
|
4
|
+
const [zoom, setZoom] = createSignal(10);
|
|
5
|
+
const [verticalZoom, setVerticalZoom] = createSignal(5);
|
|
6
|
+
const [verticalPosition, setVerticalPosition] = createSignal(64);
|
|
7
|
+
const [gridDivision, setGridDivision] = createSignal(16);
|
|
8
|
+
const [snapToGrid, setSnapToGrid] = createSignal(true);
|
|
9
|
+
const [notes, setNotes] = createSignal([]);
|
|
10
|
+
const [duration, setDuration] = createSignal(0);
|
|
11
|
+
createEffect(() => {
|
|
12
|
+
setDuration((notes()[notes().length - 1]?.ticks ?? 0) + (notes()[notes().length - 1]?.durationTicks ?? 0));
|
|
13
|
+
});
|
|
14
|
+
return {
|
|
15
|
+
position,
|
|
16
|
+
setPosition,
|
|
17
|
+
zoom,
|
|
18
|
+
setZoom,
|
|
19
|
+
verticalPosition,
|
|
20
|
+
setVerticalPosition,
|
|
21
|
+
verticalZoom,
|
|
22
|
+
setVerticalZoom,
|
|
23
|
+
gridDivision,
|
|
24
|
+
setGridDivision,
|
|
25
|
+
snapToGrid,
|
|
26
|
+
setSnapToGrid,
|
|
27
|
+
notes,
|
|
28
|
+
setNotes,
|
|
29
|
+
duration,
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export default usePianoRoll;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { Midi } from "@tonejs/midi";
|
|
2
1
|
import { JSX } from "solid-js";
|
|
3
|
-
|
|
2
|
+
import { Note } from "./types";
|
|
4
3
|
export type GridDivision = 1 | 2 | 4 | 8 | 16 | 32 | 64;
|
|
5
4
|
export type PianoRollProps = {
|
|
6
5
|
ppq: number;
|
|
@@ -17,7 +16,8 @@ export type PianoRollProps = {
|
|
|
17
16
|
onZoomChange?: (zoom: number) => void;
|
|
18
17
|
onPositionChange?: (zoom: number) => void;
|
|
19
18
|
onNoteChange?: (index: number, note: Note) => void;
|
|
20
|
-
onInsertNote?: (note: Note) =>
|
|
19
|
+
onInsertNote?: (note: Note) => number;
|
|
20
|
+
onRemoveNote?: (index: number) => void;
|
|
21
21
|
};
|
|
22
22
|
declare const PianoRoll: (allProps: PianoRollProps & JSX.IntrinsicElements["div"]) => JSX.Element;
|
|
23
23
|
export default PianoRoll;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { GridDivision } from "./PianoRoll";
|
|
2
|
+
import { Note } from "./types";
|
|
3
|
+
declare const usePianoRoll: () => {
|
|
4
|
+
position: import("solid-js").Accessor<number>;
|
|
5
|
+
setPosition: import("solid-js").Setter<number>;
|
|
6
|
+
zoom: import("solid-js").Accessor<number>;
|
|
7
|
+
setZoom: import("solid-js").Setter<number>;
|
|
8
|
+
verticalPosition: import("solid-js").Accessor<number>;
|
|
9
|
+
setVerticalPosition: import("solid-js").Setter<number>;
|
|
10
|
+
verticalZoom: import("solid-js").Accessor<number>;
|
|
11
|
+
setVerticalZoom: import("solid-js").Setter<number>;
|
|
12
|
+
gridDivision: import("solid-js").Accessor<GridDivision>;
|
|
13
|
+
setGridDivision: import("solid-js").Setter<GridDivision>;
|
|
14
|
+
snapToGrid: import("solid-js").Accessor<boolean>;
|
|
15
|
+
setSnapToGrid: import("solid-js").Setter<boolean>;
|
|
16
|
+
notes: import("solid-js").Accessor<Note[]>;
|
|
17
|
+
setNotes: import("solid-js").Setter<Note[]>;
|
|
18
|
+
duration: import("solid-js").Accessor<number>;
|
|
19
|
+
};
|
|
20
|
+
export default usePianoRoll;
|
package/package.json
CHANGED