solid-pianoroll 0.0.23 → 0.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{cjs/index.js → dev.cjs} +446 -426
- package/dist/dev.css +212 -0
- package/dist/dev.js +1330 -0
- package/dist/dev.jsx +1130 -0
- package/dist/index.cjs +1330 -0
- package/dist/index.css +212 -0
- package/dist/index.d.ts +105 -0
- package/dist/{esm/index.js → index.js} +450 -425
- package/dist/index.jsx +1130 -0
- package/package.json +43 -34
- package/dist/cjs/index.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/source/PianoRoll.jsx +0 -78
- package/dist/source/PianoRollContext.jsx +0 -11
- package/dist/source/PianoRollGrid.jsx +0 -64
- package/dist/source/PianoRollKeys.jsx +0 -72
- package/dist/source/PianoRollNotes.jsx +0 -162
- package/dist/source/PianoRollNotesScroller.jsx +0 -16
- package/dist/source/PianoRollScale.jsx +0 -29
- package/dist/source/PianoRollScrollZoomViewPort.jsx +0 -49
- package/dist/source/PianoRollTrackList.jsx +0 -27
- package/dist/source/PianoRollTrackListScroller.jsx +0 -16
- package/dist/source/index.jsx +0 -5
- package/dist/source/types.js +0 -1
- package/dist/source/useBoundingClientRect.js +0 -29
- package/dist/source/useNotes.js +0 -23
- package/dist/source/usePianoRollGrid.js +0 -45
- package/dist/source/usePianoRollState.js +0 -106
- package/dist/source/viewport/PlayHead.jsx +0 -43
- package/dist/source/viewport/ScrollZoomContainer.jsx +0 -104
- package/dist/source/viewport/ScrollZoomViewPort.jsx +0 -31
- package/dist/source/viewport/ZoomSliderControl.jsx +0 -29
- package/dist/source/viewport/createViewPortDimension.js +0 -51
- package/dist/types/PianoRoll.d.ts +0 -9
- package/dist/types/PianoRollContext.d.ts +0 -122
- package/dist/types/PianoRollGrid.d.ts +0 -2
- package/dist/types/PianoRollKeys.d.ts +0 -9
- package/dist/types/PianoRollNotes.d.ts +0 -5
- package/dist/types/PianoRollNotesScroller.d.ts +0 -3
- package/dist/types/PianoRollScale.d.ts +0 -2
- package/dist/types/PianoRollScrollZoomViewPort.d.ts +0 -3
- package/dist/types/PianoRollTrackList.d.ts +0 -2
- package/dist/types/PianoRollTrackListScroller.d.ts +0 -3
- package/dist/types/index.d.ts +0 -5
- package/dist/types/types.d.ts +0 -6
- package/dist/types/useBoundingClientRect.d.ts +0 -3
- package/dist/types/useNotes.d.ts +0 -9
- package/dist/types/usePianoRollGrid.d.ts +0 -13
- package/dist/types/usePianoRollState.d.ts +0 -63
- package/dist/types/viewport/PlayHead.d.ts +0 -8
- package/dist/types/viewport/ScrollZoomContainer.d.ts +0 -8
- package/dist/types/viewport/ScrollZoomViewPort.d.ts +0 -39
- package/dist/types/viewport/ZoomSliderControl.d.ts +0 -6
- package/dist/types/viewport/createViewPortDimension.d.ts +0 -40
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { createContext, useContext } from "solid-js";
|
|
2
|
-
import createViewPortDimension from "./createViewPortDimension";
|
|
3
|
-
const defaultViewPortProps = {
|
|
4
|
-
pixelOffset: 0,
|
|
5
|
-
position: 0,
|
|
6
|
-
range: 1,
|
|
7
|
-
zoom: 1,
|
|
8
|
-
minZoom: 1,
|
|
9
|
-
maxZoom: Infinity,
|
|
10
|
-
};
|
|
11
|
-
export const ScrollZoomViewPort = (props) => {
|
|
12
|
-
const viewPorts = Object.entries(props.dimensions).map(([name, viewPortProps]) => createViewPortDimension(() => ({
|
|
13
|
-
name: name,
|
|
14
|
-
...defaultViewPortProps,
|
|
15
|
-
...viewPortProps(),
|
|
16
|
-
})));
|
|
17
|
-
const parentViewPorts = useContext(ScrollZoomViewPortContext);
|
|
18
|
-
return (<ScrollZoomViewPortContext.Provider value={[...parentViewPorts, ...viewPorts]}>
|
|
19
|
-
{props.children}
|
|
20
|
-
</ScrollZoomViewPortContext.Provider>);
|
|
21
|
-
};
|
|
22
|
-
const ScrollZoomViewPortContext = createContext([]);
|
|
23
|
-
export const useViewPortDimension = (name) => {
|
|
24
|
-
const viewPorts = useContext(ScrollZoomViewPortContext);
|
|
25
|
-
const viewPort = name
|
|
26
|
-
? viewPorts.find((viewPort) => viewPort.name === name)
|
|
27
|
-
: viewPorts[viewPorts.length - 1];
|
|
28
|
-
if (!viewPort)
|
|
29
|
-
throw new Error(`ViewPort dimension "${name}" not found.`);
|
|
30
|
-
return viewPort;
|
|
31
|
-
};
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { createMemo, mergeProps } from "solid-js";
|
|
2
|
-
import { useViewPortDimension } from "./ScrollZoomViewPort";
|
|
3
|
-
const ZoomSliderControl = (props) => {
|
|
4
|
-
const propsWithDefaults = mergeProps({ orientation: "horizontal" }, props);
|
|
5
|
-
const dimension = createMemo(() => useViewPortDimension(props.dimensionName ?? propsWithDefaults.orientation));
|
|
6
|
-
return (<input min={dimension().minZoom} max={dimension().maxZoom} step={0.01} {...props} value={dimension().zoom} onInput={(event) => {
|
|
7
|
-
const value = event.currentTarget.valueAsNumber;
|
|
8
|
-
dimension().onZoomChange?.(value);
|
|
9
|
-
}} type="range" {...{ orient: propsWithDefaults.orientation }} style={propsWithDefaults.orientation === "vertical"
|
|
10
|
-
? {
|
|
11
|
-
margin: 0,
|
|
12
|
-
"margin-left": "4px",
|
|
13
|
-
"margin-right": "4px",
|
|
14
|
-
width: "16px",
|
|
15
|
-
transform: "rotate(180deg)",
|
|
16
|
-
...{
|
|
17
|
-
"writing-mode": "bt-lr" /* IE */,
|
|
18
|
-
"-webkit-appearance": "slider-vertical" /* WebKit */,
|
|
19
|
-
},
|
|
20
|
-
...(typeof props.style === "object" && props.style),
|
|
21
|
-
}
|
|
22
|
-
: {
|
|
23
|
-
margin: 0,
|
|
24
|
-
"margin-top": "4px",
|
|
25
|
-
"margin-bottom": "4px",
|
|
26
|
-
...(typeof props.style === "object" && props.style),
|
|
27
|
-
}}/>);
|
|
28
|
-
};
|
|
29
|
-
export default ZoomSliderControl;
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { createEffect } from "solid-js";
|
|
2
|
-
import { createStore } from "solid-js/store";
|
|
3
|
-
export default function createViewPortDimension(getState) {
|
|
4
|
-
const getStateWithFunctions = () => {
|
|
5
|
-
const state = getState();
|
|
6
|
-
const onZoomChange = (zoom) => state.onZoomChange?.(clamp(zoom, state.minZoom, state.maxZoom));
|
|
7
|
-
const onPositionChange = (position) => state.onPositionChange?.(position);
|
|
8
|
-
return {
|
|
9
|
-
...state,
|
|
10
|
-
onZoomChange,
|
|
11
|
-
onPositionChange,
|
|
12
|
-
calculatePixelOffset,
|
|
13
|
-
calculatePixelValue,
|
|
14
|
-
calculatePosition,
|
|
15
|
-
calculatePixelDimensions,
|
|
16
|
-
calculateVisibleRange,
|
|
17
|
-
calculateMaxPosition,
|
|
18
|
-
isVisible,
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
const [state, setState] = createStore(getStateWithFunctions());
|
|
22
|
-
createEffect(() => setState(getStateWithFunctions()));
|
|
23
|
-
function calculatePixelValue(position = state.position) {
|
|
24
|
-
const virtualSize = state.pixelSize * state.zoom;
|
|
25
|
-
return (position / state.range) * virtualSize;
|
|
26
|
-
}
|
|
27
|
-
function calculatePixelOffset(position) {
|
|
28
|
-
return calculatePixelValue(position) - calculatePixelValue(state.position);
|
|
29
|
-
}
|
|
30
|
-
function calculatePosition(offset) {
|
|
31
|
-
const percentX = (offset - state.pixelOffset) / state.pixelSize;
|
|
32
|
-
const position = state.position + percentX * calculateVisibleRange();
|
|
33
|
-
return position;
|
|
34
|
-
}
|
|
35
|
-
function calculateVisibleRange() {
|
|
36
|
-
return state.range / state.zoom;
|
|
37
|
-
}
|
|
38
|
-
function calculateMaxPosition() {
|
|
39
|
-
return state.range - state.range / state.zoom;
|
|
40
|
-
}
|
|
41
|
-
function calculatePixelDimensions(position, length) {
|
|
42
|
-
const offset = calculatePixelOffset(position);
|
|
43
|
-
const size = calculatePixelValue(length);
|
|
44
|
-
return { offset, size };
|
|
45
|
-
}
|
|
46
|
-
function isVisible({ offset, size }) {
|
|
47
|
-
return offset + size > 0 && offset < state.pixelSize;
|
|
48
|
-
}
|
|
49
|
-
return state;
|
|
50
|
-
}
|
|
51
|
-
export const clamp = (value, min, max) => Math.max(min, Math.min(max, value));
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { JSX, ParentProps } from "solid-js";
|
|
2
|
-
import createPianoRollstate from "./usePianoRollState";
|
|
3
|
-
export type GridDivision = 1 | 2 | 4 | 8 | 16 | 32 | 64;
|
|
4
|
-
export type PianoRollProps = {
|
|
5
|
-
showAllTracks?: boolean;
|
|
6
|
-
showTrackList?: boolean;
|
|
7
|
-
} & ReturnType<typeof createPianoRollstate> & Omit<JSX.IntrinsicElements["div"], "onDurationChange">;
|
|
8
|
-
declare const PianoRoll: (allProps: ParentProps<PianoRollProps>) => JSX.Element;
|
|
9
|
-
export default PianoRoll;
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { PianoRollProps } from "./PianoRoll";
|
|
2
|
-
export declare const PianoRollContextProvider: import("solid-js/types/reactive/signal").ContextProviderComponent<{
|
|
3
|
-
showAllTracks?: boolean;
|
|
4
|
-
showTrackList?: boolean;
|
|
5
|
-
} & {
|
|
6
|
-
ppq: number;
|
|
7
|
-
mode: "keys" | "tracks";
|
|
8
|
-
position: number;
|
|
9
|
-
zoom: number;
|
|
10
|
-
verticalZoom: number;
|
|
11
|
-
verticalPosition: number;
|
|
12
|
-
verticalTrackZoom: number;
|
|
13
|
-
verticalTrackPosition: number;
|
|
14
|
-
gridDivision: import("./PianoRoll").GridDivision;
|
|
15
|
-
snapToGrid: boolean;
|
|
16
|
-
duration: number;
|
|
17
|
-
tracks: import("./types").Track[];
|
|
18
|
-
selectedTrackIndex: number;
|
|
19
|
-
pressedKeys: Record<number, Record<number, boolean>>;
|
|
20
|
-
notesScrollerClientRect: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">;
|
|
21
|
-
tracksScrollerClientRect: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">;
|
|
22
|
-
onNoteChange: (trackIndex: number, noteIndex: number, note: import("./types").Note) => void;
|
|
23
|
-
onInsertNote: (trackIndex: number, note: import("./types").Note) => number;
|
|
24
|
-
onRemoveNote: (trackIndex: number, noteIndex: number) => void;
|
|
25
|
-
onNoteDown: (trackIndex: number, keyNumber: number) => void;
|
|
26
|
-
onNoteUp: (trackIndex: number, keyNumber: number) => void;
|
|
27
|
-
isKeyDown: (trackIndex: number, keyNumber: number) => boolean;
|
|
28
|
-
onPpqChange: (value: number) => void;
|
|
29
|
-
onModeChange: (value: "keys" | "tracks") => void;
|
|
30
|
-
onPositionChange: (value: number) => void;
|
|
31
|
-
onZoomChange: (value: number) => void;
|
|
32
|
-
onVerticalZoomChange: (value: number) => void;
|
|
33
|
-
onVerticalPositionChange: (value: number) => void;
|
|
34
|
-
onVerticalTrackZoomChange: (value: number) => void;
|
|
35
|
-
onVerticalTrackPositionChange: (value: number) => void;
|
|
36
|
-
onGridDivisionChange: (value: import("./PianoRoll").GridDivision) => void;
|
|
37
|
-
onSnapToGridChange: (value: boolean) => void;
|
|
38
|
-
onDurationChange: (value: number) => void;
|
|
39
|
-
onTracksChange: (value: import("./types").Track[]) => void;
|
|
40
|
-
onSelectedTrackIndexChange: (value: number) => void;
|
|
41
|
-
onPressedKeysChange: (value: Record<number, Record<number, boolean>>) => void;
|
|
42
|
-
onNotesScrollerClientRectChange: (value: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">) => void;
|
|
43
|
-
onTracksScrollerClientRectChange: (value: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">) => void;
|
|
44
|
-
}>;
|
|
45
|
-
export declare const usePianoRollContext: () => {
|
|
46
|
-
showAllTracks?: boolean;
|
|
47
|
-
showTrackList?: boolean;
|
|
48
|
-
} & {
|
|
49
|
-
ppq: number;
|
|
50
|
-
mode: "keys" | "tracks";
|
|
51
|
-
position: number;
|
|
52
|
-
zoom: number;
|
|
53
|
-
verticalZoom: number;
|
|
54
|
-
verticalPosition: number;
|
|
55
|
-
verticalTrackZoom: number;
|
|
56
|
-
verticalTrackPosition: number;
|
|
57
|
-
gridDivision: import("./PianoRoll").GridDivision;
|
|
58
|
-
snapToGrid: boolean;
|
|
59
|
-
duration: number;
|
|
60
|
-
tracks: import("./types").Track[];
|
|
61
|
-
selectedTrackIndex: number;
|
|
62
|
-
pressedKeys: Record<number, Record<number, boolean>>;
|
|
63
|
-
notesScrollerClientRect: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">;
|
|
64
|
-
tracksScrollerClientRect: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">;
|
|
65
|
-
onNoteChange: (trackIndex: number, noteIndex: number, note: import("./types").Note) => void;
|
|
66
|
-
onInsertNote: (trackIndex: number, note: import("./types").Note) => number;
|
|
67
|
-
onRemoveNote: (trackIndex: number, noteIndex: number) => void;
|
|
68
|
-
onNoteDown: (trackIndex: number, keyNumber: number) => void;
|
|
69
|
-
onNoteUp: (trackIndex: number, keyNumber: number) => void;
|
|
70
|
-
isKeyDown: (trackIndex: number, keyNumber: number) => boolean;
|
|
71
|
-
onPpqChange: (value: number) => void;
|
|
72
|
-
onModeChange: (value: "keys" | "tracks") => void;
|
|
73
|
-
onPositionChange: (value: number) => void;
|
|
74
|
-
onZoomChange: (value: number) => void;
|
|
75
|
-
onVerticalZoomChange: (value: number) => void;
|
|
76
|
-
onVerticalPositionChange: (value: number) => void;
|
|
77
|
-
onVerticalTrackZoomChange: (value: number) => void;
|
|
78
|
-
onVerticalTrackPositionChange: (value: number) => void;
|
|
79
|
-
onGridDivisionChange: (value: import("./PianoRoll").GridDivision) => void;
|
|
80
|
-
onSnapToGridChange: (value: boolean) => void;
|
|
81
|
-
onDurationChange: (value: number) => void;
|
|
82
|
-
onTracksChange: (value: import("./types").Track[]) => void;
|
|
83
|
-
onSelectedTrackIndexChange: (value: number) => void;
|
|
84
|
-
onPressedKeysChange: (value: Record<number, Record<number, boolean>>) => void;
|
|
85
|
-
onNotesScrollerClientRectChange: (value: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">) => void;
|
|
86
|
-
onTracksScrollerClientRectChange: (value: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">) => void;
|
|
87
|
-
};
|
|
88
|
-
export declare const splitContextProps: (allProps: PianoRollProps) => [Pick<PianoRollProps, "onDurationChange" | keyof {
|
|
89
|
-
ppq: number;
|
|
90
|
-
mode: "keys" | "tracks";
|
|
91
|
-
position: number;
|
|
92
|
-
zoom: number;
|
|
93
|
-
verticalZoom: number;
|
|
94
|
-
verticalPosition: number;
|
|
95
|
-
verticalTrackZoom: number;
|
|
96
|
-
verticalTrackPosition: number;
|
|
97
|
-
gridDivision: import("./PianoRoll").GridDivision;
|
|
98
|
-
snapToGrid: boolean;
|
|
99
|
-
duration: number;
|
|
100
|
-
tracks: import("./types").Track[];
|
|
101
|
-
selectedTrackIndex: number;
|
|
102
|
-
pressedKeys: Record<number, Record<number, boolean>>;
|
|
103
|
-
notesScrollerClientRect: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">;
|
|
104
|
-
tracksScrollerClientRect: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">;
|
|
105
|
-
} | "onPpqChange" | "onModeChange" | "onPositionChange" | "onZoomChange" | "onVerticalZoomChange" | "onVerticalPositionChange" | "onVerticalTrackZoomChange" | "onVerticalTrackPositionChange" | "onGridDivisionChange" | "onSnapToGridChange" | "onTracksChange" | "onSelectedTrackIndexChange" | "onPressedKeysChange" | "onNotesScrollerClientRectChange" | "onTracksScrollerClientRectChange" | "onNoteChange" | "onInsertNote" | "onRemoveNote" | "onNoteDown" | "onNoteUp" | "isKeyDown" | "showAllTracks" | "showTrackList">, Omit<PianoRollProps, "onDurationChange" | keyof {
|
|
106
|
-
ppq: number;
|
|
107
|
-
mode: "keys" | "tracks";
|
|
108
|
-
position: number;
|
|
109
|
-
zoom: number;
|
|
110
|
-
verticalZoom: number;
|
|
111
|
-
verticalPosition: number;
|
|
112
|
-
verticalTrackZoom: number;
|
|
113
|
-
verticalTrackPosition: number;
|
|
114
|
-
gridDivision: import("./PianoRoll").GridDivision;
|
|
115
|
-
snapToGrid: boolean;
|
|
116
|
-
duration: number;
|
|
117
|
-
tracks: import("./types").Track[];
|
|
118
|
-
selectedTrackIndex: number;
|
|
119
|
-
pressedKeys: Record<number, Record<number, boolean>>;
|
|
120
|
-
notesScrollerClientRect: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">;
|
|
121
|
-
tracksScrollerClientRect: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">;
|
|
122
|
-
} | "onPpqChange" | "onModeChange" | "onPositionChange" | "onZoomChange" | "onVerticalZoomChange" | "onVerticalPositionChange" | "onVerticalTrackZoomChange" | "onVerticalTrackPositionChange" | "onGridDivisionChange" | "onSnapToGridChange" | "onTracksChange" | "onSelectedTrackIndexChange" | "onPressedKeysChange" | "onNotesScrollerClientRectChange" | "onTracksScrollerClientRectChange" | "onNoteChange" | "onInsertNote" | "onRemoveNote" | "onNoteDown" | "onNoteUp" | "isKeyDown" | "showAllTracks" | "showTrackList">];
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
declare const PianoRollKeys: () => import("solid-js").JSX.Element;
|
|
2
|
-
export declare const blackKeys: number[];
|
|
3
|
-
export declare const keyNames: string[];
|
|
4
|
-
export declare const keys: {
|
|
5
|
-
number: number;
|
|
6
|
-
name: string;
|
|
7
|
-
isBlack: boolean;
|
|
8
|
-
}[];
|
|
9
|
-
export default PianoRollKeys;
|
package/dist/types/index.d.ts
DELETED
package/dist/types/types.d.ts
DELETED
package/dist/types/useNotes.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Note } from "./types";
|
|
2
|
-
declare const useNotes: () => {
|
|
3
|
-
notes: import("solid-js").Accessor<Note[]>;
|
|
4
|
-
onNotesChange: import("solid-js").Setter<Note[]>;
|
|
5
|
-
onNoteChange: (index: number, note: Note) => void;
|
|
6
|
-
onInsertNote: (note: Note) => number;
|
|
7
|
-
onRemoveNote: (index: number) => void;
|
|
8
|
-
};
|
|
9
|
-
export default useNotes;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
declare const usePianoRollGrid: () => import("solid-js").Accessor<{
|
|
2
|
-
index: number;
|
|
3
|
-
ticks: number;
|
|
4
|
-
isHighlighted: boolean;
|
|
5
|
-
hasHighlightedBorder: boolean;
|
|
6
|
-
showLabel: boolean;
|
|
7
|
-
virtualDimensions: {
|
|
8
|
-
offset: number;
|
|
9
|
-
size: number;
|
|
10
|
-
};
|
|
11
|
-
label: string;
|
|
12
|
-
}[]>;
|
|
13
|
-
export default usePianoRollGrid;
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { GridDivision } from "./PianoRoll";
|
|
2
|
-
import { Note, Track } from "./types";
|
|
3
|
-
import { ClientRect } from "./useBoundingClientRect";
|
|
4
|
-
type PianoRollState = {
|
|
5
|
-
ppq: number;
|
|
6
|
-
mode: "keys" | "tracks";
|
|
7
|
-
position: number;
|
|
8
|
-
zoom: number;
|
|
9
|
-
verticalZoom: number;
|
|
10
|
-
verticalPosition: number;
|
|
11
|
-
verticalTrackZoom: number;
|
|
12
|
-
verticalTrackPosition: number;
|
|
13
|
-
gridDivision: GridDivision;
|
|
14
|
-
snapToGrid: boolean;
|
|
15
|
-
duration: number;
|
|
16
|
-
tracks: Track[];
|
|
17
|
-
selectedTrackIndex: number;
|
|
18
|
-
pressedKeys: Record<number, Record<number, boolean>>;
|
|
19
|
-
notesScrollerClientRect: Pick<ClientRect, "left" | "width" | "top" | "height">;
|
|
20
|
-
tracksScrollerClientRect: Pick<ClientRect, "left" | "width" | "top" | "height">;
|
|
21
|
-
};
|
|
22
|
-
export declare const pianoRollStatePropNames: ("onDurationChange" | keyof PianoRollState | "onPpqChange" | "onModeChange" | "onPositionChange" | "onZoomChange" | "onVerticalZoomChange" | "onVerticalPositionChange" | "onVerticalTrackZoomChange" | "onVerticalTrackPositionChange" | "onGridDivisionChange" | "onSnapToGridChange" | "onTracksChange" | "onSelectedTrackIndexChange" | "onPressedKeysChange" | "onNotesScrollerClientRectChange" | "onTracksScrollerClientRectChange" | "onNoteChange" | "onInsertNote" | "onRemoveNote" | "onNoteDown" | "onNoteUp" | "isKeyDown")[];
|
|
23
|
-
declare const createPianoRollstate: (initialState?: Partial<PianoRollState>) => {
|
|
24
|
-
ppq: number;
|
|
25
|
-
mode: "keys" | "tracks";
|
|
26
|
-
position: number;
|
|
27
|
-
zoom: number;
|
|
28
|
-
verticalZoom: number;
|
|
29
|
-
verticalPosition: number;
|
|
30
|
-
verticalTrackZoom: number;
|
|
31
|
-
verticalTrackPosition: number;
|
|
32
|
-
gridDivision: GridDivision;
|
|
33
|
-
snapToGrid: boolean;
|
|
34
|
-
duration: number;
|
|
35
|
-
tracks: Track[];
|
|
36
|
-
selectedTrackIndex: number;
|
|
37
|
-
pressedKeys: Record<number, Record<number, boolean>>;
|
|
38
|
-
notesScrollerClientRect: Pick<ClientRect, "left" | "width" | "top" | "height">;
|
|
39
|
-
tracksScrollerClientRect: Pick<ClientRect, "left" | "width" | "top" | "height">;
|
|
40
|
-
onNoteChange: (trackIndex: number, noteIndex: number, note: Note) => void;
|
|
41
|
-
onInsertNote: (trackIndex: number, note: Note) => number;
|
|
42
|
-
onRemoveNote: (trackIndex: number, noteIndex: number) => void;
|
|
43
|
-
onNoteDown: (trackIndex: number, keyNumber: number) => void;
|
|
44
|
-
onNoteUp: (trackIndex: number, keyNumber: number) => void;
|
|
45
|
-
isKeyDown: (trackIndex: number, keyNumber: number) => boolean;
|
|
46
|
-
onPpqChange: (value: number) => void;
|
|
47
|
-
onModeChange: (value: "keys" | "tracks") => void;
|
|
48
|
-
onPositionChange: (value: number) => void;
|
|
49
|
-
onZoomChange: (value: number) => void;
|
|
50
|
-
onVerticalZoomChange: (value: number) => void;
|
|
51
|
-
onVerticalPositionChange: (value: number) => void;
|
|
52
|
-
onVerticalTrackZoomChange: (value: number) => void;
|
|
53
|
-
onVerticalTrackPositionChange: (value: number) => void;
|
|
54
|
-
onGridDivisionChange: (value: GridDivision) => void;
|
|
55
|
-
onSnapToGridChange: (value: boolean) => void;
|
|
56
|
-
onDurationChange: (value: number) => void;
|
|
57
|
-
onTracksChange: (value: Track[]) => void;
|
|
58
|
-
onSelectedTrackIndexChange: (value: number) => void;
|
|
59
|
-
onPressedKeysChange: (value: Record<number, Record<number, boolean>>) => void;
|
|
60
|
-
onNotesScrollerClientRectChange: (value: Pick<ClientRect, "height" | "width" | "left" | "top">) => void;
|
|
61
|
-
onTracksScrollerClientRectChange: (value: Pick<ClientRect, "height" | "width" | "left" | "top">) => void;
|
|
62
|
-
};
|
|
63
|
-
export default createPianoRollstate;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { JSX } from "solid-js";
|
|
2
|
-
declare const PlayHead: (allProps: {
|
|
3
|
-
position: number;
|
|
4
|
-
onPositionChange?: (playHeadPosition: number) => void;
|
|
5
|
-
sync?: boolean;
|
|
6
|
-
dimensionName?: string;
|
|
7
|
-
} & JSX.HTMLAttributes<HTMLDivElement>) => JSX.Element;
|
|
8
|
-
export default PlayHead;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { JSX, ParentProps, Ref } from "solid-js";
|
|
2
|
-
declare const ScrollZoomContainer: (props: ParentProps<{
|
|
3
|
-
ref?: Ref<HTMLDivElement>;
|
|
4
|
-
verticalDimensionName?: string;
|
|
5
|
-
horizontalDimensionName?: string;
|
|
6
|
-
showScrollbar?: boolean;
|
|
7
|
-
} & JSX.IntrinsicElements["div"]>) => JSX.Element;
|
|
8
|
-
export default ScrollZoomContainer;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { ParentProps } from "solid-js";
|
|
2
|
-
import { ViewPortDimensionName, ViewPortDimensionState } from "./createViewPortDimension";
|
|
3
|
-
declare const defaultViewPortProps: {
|
|
4
|
-
pixelOffset: number;
|
|
5
|
-
position: number;
|
|
6
|
-
range: number;
|
|
7
|
-
zoom: number;
|
|
8
|
-
minZoom: number;
|
|
9
|
-
maxZoom: number;
|
|
10
|
-
};
|
|
11
|
-
export declare const ScrollZoomViewPort: (props: ParentProps<{
|
|
12
|
-
dimensions: Record<ViewPortDimensionName, () => Omit<ViewPortDimensionState, "name" | keyof typeof defaultViewPortProps> & Partial<Pick<ViewPortDimensionState, keyof typeof defaultViewPortProps>>>;
|
|
13
|
-
}>) => import("solid-js").JSX.Element;
|
|
14
|
-
export declare const useViewPortDimension: (name: ViewPortDimensionName) => {
|
|
15
|
-
onZoomChange: (zoom: number) => void;
|
|
16
|
-
onPositionChange: (position: number) => void;
|
|
17
|
-
calculatePixelOffset: (position: number) => number;
|
|
18
|
-
calculatePixelValue: (position?: number) => number;
|
|
19
|
-
calculatePosition: (offset: number) => number;
|
|
20
|
-
calculatePixelDimensions: (position: number, length: number) => {
|
|
21
|
-
offset: number;
|
|
22
|
-
size: number;
|
|
23
|
-
};
|
|
24
|
-
calculateVisibleRange: () => number;
|
|
25
|
-
calculateMaxPosition: () => number;
|
|
26
|
-
isVisible: ({ offset, size }: {
|
|
27
|
-
offset: number;
|
|
28
|
-
size: number;
|
|
29
|
-
}) => boolean;
|
|
30
|
-
position: number;
|
|
31
|
-
range: number;
|
|
32
|
-
pixelOffset: number;
|
|
33
|
-
pixelSize: number;
|
|
34
|
-
name: string;
|
|
35
|
-
zoom: number;
|
|
36
|
-
minZoom: number;
|
|
37
|
-
maxZoom: number;
|
|
38
|
-
};
|
|
39
|
-
export {};
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
export type ViewPortDimension = ReturnType<typeof createViewPortDimension>;
|
|
2
|
-
export type ViewPortDimensionName = string;
|
|
3
|
-
export type ViewPortDimensionState = {
|
|
4
|
-
position: number;
|
|
5
|
-
range: number;
|
|
6
|
-
pixelOffset: number;
|
|
7
|
-
pixelSize: number;
|
|
8
|
-
name: ViewPortDimensionName;
|
|
9
|
-
onZoomChange?: (zoom: number) => void;
|
|
10
|
-
onPositionChange?: (zoom: number) => void;
|
|
11
|
-
zoom: number;
|
|
12
|
-
minZoom: number;
|
|
13
|
-
maxZoom: number;
|
|
14
|
-
};
|
|
15
|
-
export default function createViewPortDimension(getState: () => ViewPortDimensionState): {
|
|
16
|
-
onZoomChange: (zoom: number) => void;
|
|
17
|
-
onPositionChange: (position: number) => void;
|
|
18
|
-
calculatePixelOffset: (position: number) => number;
|
|
19
|
-
calculatePixelValue: (position?: number) => number;
|
|
20
|
-
calculatePosition: (offset: number) => number;
|
|
21
|
-
calculatePixelDimensions: (position: number, length: number) => {
|
|
22
|
-
offset: number;
|
|
23
|
-
size: number;
|
|
24
|
-
};
|
|
25
|
-
calculateVisibleRange: () => number;
|
|
26
|
-
calculateMaxPosition: () => number;
|
|
27
|
-
isVisible: ({ offset, size }: {
|
|
28
|
-
offset: number;
|
|
29
|
-
size: number;
|
|
30
|
-
}) => boolean;
|
|
31
|
-
position: number;
|
|
32
|
-
range: number;
|
|
33
|
-
pixelOffset: number;
|
|
34
|
-
pixelSize: number;
|
|
35
|
-
name: string;
|
|
36
|
-
zoom: number;
|
|
37
|
-
minZoom: number;
|
|
38
|
-
maxZoom: number;
|
|
39
|
-
};
|
|
40
|
-
export declare const clamp: (value: number, min: number, max: number) => number;
|