solid-pianoroll 0.0.22 → 0.0.24
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 +434 -229
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +434 -229
- package/dist/esm/index.js.map +1 -1
- package/dist/source/PianoRoll.jsx +53 -62
- package/dist/source/PianoRollGrid.jsx +22 -46
- package/dist/source/PianoRollKeys.jsx +4 -8
- package/dist/source/PianoRollNotes.jsx +12 -8
- package/dist/source/PianoRollNotesScroller.jsx +16 -0
- package/dist/source/PianoRollScale.jsx +43 -0
- package/dist/source/PianoRollScrollZoomViewPort.jsx +49 -0
- package/dist/source/PianoRollTrackListScroller.jsx +16 -0
- package/dist/source/usePianoRollGrid.js +45 -0
- package/dist/source/usePianoRollState.js +24 -2
- package/dist/source/viewport/PlayHead.jsx +3 -3
- package/dist/source/viewport/ScrollZoomContainer.jsx +2 -2
- package/dist/source/viewport/ZoomSliderControl.jsx +4 -1
- package/dist/types/PianoRoll.d.ts +0 -1
- package/dist/types/PianoRollContext.d.ts +15 -80
- package/dist/types/PianoRollNotesScroller.d.ts +3 -0
- package/dist/types/PianoRollScale.d.ts +2 -0
- package/dist/types/PianoRollScrollZoomViewPort.d.ts +3 -0
- package/dist/types/PianoRollTrackListScroller.d.ts +3 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/types.d.ts +2 -0
- package/dist/types/usePianoRollGrid.d.ts +13 -0
- package/dist/types/usePianoRollState.d.ts +34 -17
- package/dist/types/viewport/PlayHead.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,82 +1,11 @@
|
|
|
1
1
|
import { PianoRollProps } from "./PianoRoll";
|
|
2
|
-
|
|
2
|
+
import createPianoRollstate from "./usePianoRollState";
|
|
3
|
+
export type PianoRollContext = {
|
|
3
4
|
showAllTracks?: boolean;
|
|
4
5
|
showTrackList?: boolean;
|
|
5
|
-
} &
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
onNoteChange: (trackIndex: number, noteIndex: number, note: import("./types").Note) => void;
|
|
21
|
-
onInsertNote: (trackIndex: number, note: import("./types").Note) => number;
|
|
22
|
-
onRemoveNote: (trackIndex: number, noteIndex: number) => void;
|
|
23
|
-
onNoteDown: (trackIndex: number, keyNumber: number) => void;
|
|
24
|
-
onNoteUp: (trackIndex: number, keyNumber: number) => void;
|
|
25
|
-
isKeyDown: (trackIndex: number, keyNumber: number) => boolean;
|
|
26
|
-
onPpqChange: (value: number) => void;
|
|
27
|
-
onModeChange: (value: "keys" | "tracks") => void;
|
|
28
|
-
onPositionChange: (value: number) => void;
|
|
29
|
-
onZoomChange: (value: number) => void;
|
|
30
|
-
onVerticalZoomChange: (value: number) => void;
|
|
31
|
-
onVerticalPositionChange: (value: number) => void;
|
|
32
|
-
onVerticalTrackZoomChange: (value: number) => void;
|
|
33
|
-
onVerticalTrackPositionChange: (value: number) => void;
|
|
34
|
-
onGridDivisionChange: (value: import("./PianoRoll").GridDivision) => void;
|
|
35
|
-
onSnapToGridChange: (value: boolean) => void;
|
|
36
|
-
onDurationChange: (value: number) => void;
|
|
37
|
-
onTracksChange: (value: import("./types").Track[]) => void;
|
|
38
|
-
onSelectedTrackIndexChange: (value: number) => void;
|
|
39
|
-
onPressedKeysChange: (value: Record<number, Record<number, boolean>>) => void;
|
|
40
|
-
}>;
|
|
41
|
-
export declare const usePianoRollContext: () => {
|
|
42
|
-
showAllTracks?: boolean;
|
|
43
|
-
showTrackList?: boolean;
|
|
44
|
-
} & {
|
|
45
|
-
ppq: number;
|
|
46
|
-
mode: "keys" | "tracks";
|
|
47
|
-
position: number;
|
|
48
|
-
zoom: number;
|
|
49
|
-
verticalZoom: number;
|
|
50
|
-
verticalPosition: number;
|
|
51
|
-
verticalTrackZoom: number;
|
|
52
|
-
verticalTrackPosition: number;
|
|
53
|
-
gridDivision: import("./PianoRoll").GridDivision;
|
|
54
|
-
snapToGrid: boolean;
|
|
55
|
-
duration: number;
|
|
56
|
-
tracks: import("./types").Track[];
|
|
57
|
-
selectedTrackIndex: number;
|
|
58
|
-
pressedKeys: Record<number, Record<number, boolean>>;
|
|
59
|
-
onNoteChange: (trackIndex: number, noteIndex: number, note: import("./types").Note) => void;
|
|
60
|
-
onInsertNote: (trackIndex: number, note: import("./types").Note) => number;
|
|
61
|
-
onRemoveNote: (trackIndex: number, noteIndex: number) => void;
|
|
62
|
-
onNoteDown: (trackIndex: number, keyNumber: number) => void;
|
|
63
|
-
onNoteUp: (trackIndex: number, keyNumber: number) => void;
|
|
64
|
-
isKeyDown: (trackIndex: number, keyNumber: number) => boolean;
|
|
65
|
-
onPpqChange: (value: number) => void;
|
|
66
|
-
onModeChange: (value: "keys" | "tracks") => void;
|
|
67
|
-
onPositionChange: (value: number) => void;
|
|
68
|
-
onZoomChange: (value: number) => void;
|
|
69
|
-
onVerticalZoomChange: (value: number) => void;
|
|
70
|
-
onVerticalPositionChange: (value: number) => void;
|
|
71
|
-
onVerticalTrackZoomChange: (value: number) => void;
|
|
72
|
-
onVerticalTrackPositionChange: (value: number) => void;
|
|
73
|
-
onGridDivisionChange: (value: import("./PianoRoll").GridDivision) => void;
|
|
74
|
-
onSnapToGridChange: (value: boolean) => void;
|
|
75
|
-
onDurationChange: (value: number) => void;
|
|
76
|
-
onTracksChange: (value: import("./types").Track[]) => void;
|
|
77
|
-
onSelectedTrackIndexChange: (value: number) => void;
|
|
78
|
-
onPressedKeysChange: (value: Record<number, Record<number, boolean>>) => void;
|
|
79
|
-
};
|
|
6
|
+
} & ReturnType<typeof createPianoRollstate>;
|
|
7
|
+
export declare const PianoRollContextProvider: import("solid-js/types/reactive/signal").ContextProviderComponent<PianoRollContext>;
|
|
8
|
+
export declare const usePianoRollContext: () => PianoRollContext;
|
|
80
9
|
export declare const splitContextProps: (allProps: PianoRollProps) => [Pick<PianoRollProps, "onDurationChange" | keyof {
|
|
81
10
|
ppq: number;
|
|
82
11
|
mode: "keys" | "tracks";
|
|
@@ -86,13 +15,16 @@ export declare const splitContextProps: (allProps: PianoRollProps) => [Pick<Pian
|
|
|
86
15
|
verticalPosition: number;
|
|
87
16
|
verticalTrackZoom: number;
|
|
88
17
|
verticalTrackPosition: number;
|
|
89
|
-
|
|
18
|
+
playHeadPosition: number;
|
|
19
|
+
gridDivision: import("./types").GridDivision;
|
|
90
20
|
snapToGrid: boolean;
|
|
91
21
|
duration: number;
|
|
92
22
|
tracks: import("./types").Track[];
|
|
93
23
|
selectedTrackIndex: number;
|
|
94
24
|
pressedKeys: Record<number, Record<number, boolean>>;
|
|
95
|
-
|
|
25
|
+
notesScrollerClientRect: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">;
|
|
26
|
+
tracksScrollerClientRect: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">;
|
|
27
|
+
} | "onPpqChange" | "onModeChange" | "onPositionChange" | "onZoomChange" | "onVerticalZoomChange" | "onVerticalPositionChange" | "onVerticalTrackZoomChange" | "onVerticalTrackPositionChange" | "onPlayHeadPositionChange" | "onGridDivisionChange" | "onSnapToGridChange" | "onTracksChange" | "onSelectedTrackIndexChange" | "onPressedKeysChange" | "onNotesScrollerClientRectChange" | "onTracksScrollerClientRectChange" | "onNoteChange" | "onInsertNote" | "onRemoveNote" | "onNoteDown" | "onNoteUp" | "isKeyDown" | "snapValueToGridIfEnabled" | "onPlayheadPositionChange" | "showAllTracks" | "showTrackList">, Omit<PianoRollProps, "onDurationChange" | keyof {
|
|
96
28
|
ppq: number;
|
|
97
29
|
mode: "keys" | "tracks";
|
|
98
30
|
position: number;
|
|
@@ -101,10 +33,13 @@ export declare const splitContextProps: (allProps: PianoRollProps) => [Pick<Pian
|
|
|
101
33
|
verticalPosition: number;
|
|
102
34
|
verticalTrackZoom: number;
|
|
103
35
|
verticalTrackPosition: number;
|
|
104
|
-
|
|
36
|
+
playHeadPosition: number;
|
|
37
|
+
gridDivision: import("./types").GridDivision;
|
|
105
38
|
snapToGrid: boolean;
|
|
106
39
|
duration: number;
|
|
107
40
|
tracks: import("./types").Track[];
|
|
108
41
|
selectedTrackIndex: number;
|
|
109
42
|
pressedKeys: Record<number, Record<number, boolean>>;
|
|
110
|
-
|
|
43
|
+
notesScrollerClientRect: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">;
|
|
44
|
+
tracksScrollerClientRect: Pick<import("./useBoundingClientRect").ClientRect, "height" | "width" | "left" | "top">;
|
|
45
|
+
} | "onPpqChange" | "onModeChange" | "onPositionChange" | "onZoomChange" | "onVerticalZoomChange" | "onVerticalPositionChange" | "onVerticalTrackZoomChange" | "onVerticalTrackPositionChange" | "onPlayHeadPositionChange" | "onGridDivisionChange" | "onSnapToGridChange" | "onTracksChange" | "onSelectedTrackIndexChange" | "onPressedKeysChange" | "onNotesScrollerClientRectChange" | "onTracksScrollerClientRectChange" | "onNoteChange" | "onInsertNote" | "onRemoveNote" | "onNoteDown" | "onNoteUp" | "isKeyDown" | "snapValueToGridIfEnabled" | "onPlayheadPositionChange" | "showAllTracks" | "showTrackList">];
|
package/dist/types/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ import PianoRoll from "./PianoRoll";
|
|
|
2
2
|
import PlayHead from "./viewport/PlayHead";
|
|
3
3
|
import useNotes from "./useNotes";
|
|
4
4
|
import createPianoRollstate from "./usePianoRollState";
|
|
5
|
+
export type { Note, Track, GridDivision } from "./types";
|
|
5
6
|
export { PianoRoll, createPianoRollstate, useNotes, PlayHead };
|
package/dist/types/types.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Midi } from "@tonejs/midi";
|
|
2
|
+
export type GridDivision = 1 | 2 | 4 | 8 | 16 | 32 | 64;
|
|
2
3
|
export type Note = Pick<ReturnType<Midi["tracks"][number]["notes"][number]["toJSON"]>, "durationTicks" | "midi" | "ticks" | "velocity">;
|
|
3
4
|
export type Track = {
|
|
4
5
|
name: string;
|
|
5
6
|
notes: Note[];
|
|
7
|
+
color: string;
|
|
6
8
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
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,5 +1,6 @@
|
|
|
1
|
-
import { GridDivision } from "./
|
|
1
|
+
import { GridDivision } from "./types";
|
|
2
2
|
import { Note, Track } from "./types";
|
|
3
|
+
import { ClientRect } from "./useBoundingClientRect";
|
|
3
4
|
type PianoRollState = {
|
|
4
5
|
ppq: number;
|
|
5
6
|
mode: "keys" | "tracks";
|
|
@@ -9,15 +10,23 @@ type PianoRollState = {
|
|
|
9
10
|
verticalPosition: number;
|
|
10
11
|
verticalTrackZoom: number;
|
|
11
12
|
verticalTrackPosition: number;
|
|
13
|
+
playHeadPosition: number;
|
|
12
14
|
gridDivision: GridDivision;
|
|
13
15
|
snapToGrid: boolean;
|
|
14
16
|
duration: number;
|
|
15
17
|
tracks: Track[];
|
|
16
18
|
selectedTrackIndex: number;
|
|
17
19
|
pressedKeys: Record<number, Record<number, boolean>>;
|
|
20
|
+
notesScrollerClientRect: Pick<ClientRect, "left" | "width" | "top" | "height">;
|
|
21
|
+
tracksScrollerClientRect: Pick<ClientRect, "left" | "width" | "top" | "height">;
|
|
18
22
|
};
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
declare const defaultState: PianoRollState;
|
|
24
|
+
type PropNameToHandlerName<PropName extends string> = `on${Capitalize<PropName>}Change`;
|
|
25
|
+
type StateChangeHandlerObject = {
|
|
26
|
+
[PropName in keyof typeof defaultState as PropNameToHandlerName<PropName>]: (value: typeof defaultState[PropName], originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
27
|
+
};
|
|
28
|
+
export declare const pianoRollStatePropNames: ("onDurationChange" | keyof PianoRollState | "onPpqChange" | "onModeChange" | "onPositionChange" | "onZoomChange" | "onVerticalZoomChange" | "onVerticalPositionChange" | "onVerticalTrackZoomChange" | "onVerticalTrackPositionChange" | "onPlayHeadPositionChange" | "onGridDivisionChange" | "onSnapToGridChange" | "onTracksChange" | "onSelectedTrackIndexChange" | "onPressedKeysChange" | "onNotesScrollerClientRectChange" | "onTracksScrollerClientRectChange" | "onNoteChange" | "onInsertNote" | "onRemoveNote" | "onNoteDown" | "onNoteUp" | "isKeyDown" | "snapValueToGridIfEnabled" | "onPlayheadPositionChange")[];
|
|
29
|
+
declare const createPianoRollstate: (initialState?: Partial<PianoRollState & StateChangeHandlerObject>) => {
|
|
21
30
|
ppq: number;
|
|
22
31
|
mode: "keys" | "tracks";
|
|
23
32
|
position: number;
|
|
@@ -26,31 +35,39 @@ declare const createPianoRollstate: (initialState?: Partial<PianoRollState>) =>
|
|
|
26
35
|
verticalPosition: number;
|
|
27
36
|
verticalTrackZoom: number;
|
|
28
37
|
verticalTrackPosition: number;
|
|
38
|
+
playHeadPosition: number;
|
|
29
39
|
gridDivision: GridDivision;
|
|
30
40
|
snapToGrid: boolean;
|
|
31
41
|
duration: number;
|
|
32
42
|
tracks: Track[];
|
|
33
43
|
selectedTrackIndex: number;
|
|
34
44
|
pressedKeys: Record<number, Record<number, boolean>>;
|
|
45
|
+
notesScrollerClientRect: Pick<ClientRect, "left" | "width" | "top" | "height">;
|
|
46
|
+
tracksScrollerClientRect: Pick<ClientRect, "left" | "width" | "top" | "height">;
|
|
35
47
|
onNoteChange: (trackIndex: number, noteIndex: number, note: Note) => void;
|
|
36
48
|
onInsertNote: (trackIndex: number, note: Note) => number;
|
|
37
49
|
onRemoveNote: (trackIndex: number, noteIndex: number) => void;
|
|
38
50
|
onNoteDown: (trackIndex: number, keyNumber: number) => void;
|
|
39
51
|
onNoteUp: (trackIndex: number, keyNumber: number) => void;
|
|
40
52
|
isKeyDown: (trackIndex: number, keyNumber: number) => boolean;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
snapValueToGridIfEnabled: (value: number, altKey: boolean) => number;
|
|
54
|
+
onPlayheadPositionChange: (playheadPosition: number, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
55
|
+
onPpqChange: (value: number, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
56
|
+
onModeChange: (value: "keys" | "tracks", originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
57
|
+
onPositionChange: (value: number, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
58
|
+
onZoomChange: (value: number, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
59
|
+
onVerticalZoomChange: (value: number, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
60
|
+
onVerticalPositionChange: (value: number, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
61
|
+
onVerticalTrackZoomChange: (value: number, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
62
|
+
onVerticalTrackPositionChange: (value: number, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
63
|
+
onPlayHeadPositionChange: (value: number, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
64
|
+
onGridDivisionChange: (value: GridDivision, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
65
|
+
onSnapToGridChange: (value: boolean, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
66
|
+
onDurationChange: (value: number, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
67
|
+
onTracksChange: (value: Track[], originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
68
|
+
onSelectedTrackIndexChange: (value: number, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
69
|
+
onPressedKeysChange: (value: Record<number, Record<number, boolean>>, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
70
|
+
onNotesScrollerClientRectChange: (value: Pick<ClientRect, "height" | "width" | "left" | "top">, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
71
|
+
onTracksScrollerClientRectChange: (value: Pick<ClientRect, "height" | "width" | "left" | "top">, originalEvent?: MouseEvent | KeyboardEvent) => void;
|
|
55
72
|
};
|
|
56
73
|
export default createPianoRollstate;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { JSX } from "solid-js";
|
|
2
2
|
declare const PlayHead: (allProps: {
|
|
3
3
|
position: number;
|
|
4
|
-
onPositionChange?: (playHeadPosition: number) => void;
|
|
4
|
+
onPositionChange?: (playHeadPosition: number, event: MouseEvent) => void;
|
|
5
5
|
sync?: boolean;
|
|
6
6
|
dimensionName?: string;
|
|
7
7
|
} & JSX.HTMLAttributes<HTMLDivElement>) => JSX.Element;
|
package/package.json
CHANGED