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.
@@ -1,82 +1,11 @@
1
1
  import { PianoRollProps } from "./PianoRoll";
2
- export declare const PianoRollContextProvider: import("solid-js/types/reactive/signal").ContextProviderComponent<{
2
+ import createPianoRollstate from "./usePianoRollState";
3
+ export type PianoRollContext = {
3
4
  showAllTracks?: boolean;
4
5
  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
- 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
- gridDivision: import("./PianoRoll").GridDivision;
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
- } | "onPpqChange" | "onModeChange" | "onPositionChange" | "onZoomChange" | "onVerticalZoomChange" | "onVerticalPositionChange" | "onVerticalTrackZoomChange" | "onVerticalTrackPositionChange" | "onGridDivisionChange" | "onSnapToGridChange" | "onTracksChange" | "onSelectedTrackIndexChange" | "onPressedKeysChange" | "onNoteChange" | "onInsertNote" | "onRemoveNote" | "onNoteDown" | "onNoteUp" | "isKeyDown" | "showAllTracks" | "showTrackList">, Omit<PianoRollProps, "onDurationChange" | keyof {
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
- gridDivision: import("./PianoRoll").GridDivision;
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
- } | "onPpqChange" | "onModeChange" | "onPositionChange" | "onZoomChange" | "onVerticalZoomChange" | "onVerticalPositionChange" | "onVerticalTrackZoomChange" | "onVerticalTrackPositionChange" | "onGridDivisionChange" | "onSnapToGridChange" | "onTracksChange" | "onSelectedTrackIndexChange" | "onPressedKeysChange" | "onNoteChange" | "onInsertNote" | "onRemoveNote" | "onNoteDown" | "onNoteUp" | "isKeyDown" | "showAllTracks" | "showTrackList">];
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">];
@@ -0,0 +1,3 @@
1
+ import { ParentProps } from "solid-js";
2
+ declare const PianoRollNotesScroller: (props: ParentProps) => import("solid-js").JSX.Element;
3
+ export default PianoRollNotesScroller;
@@ -0,0 +1,2 @@
1
+ declare const PianoRollScale: () => import("solid-js").JSX.Element;
2
+ export default PianoRollScale;
@@ -0,0 +1,3 @@
1
+ import { ParentProps } from "solid-js";
2
+ declare const PianoRollScrollZoomViewPort: (props: ParentProps) => import("solid-js").JSX.Element;
3
+ export default PianoRollScrollZoomViewPort;
@@ -0,0 +1,3 @@
1
+ import { ParentProps } from "solid-js";
2
+ declare const PianoRollTrackListScroller: (props: ParentProps) => import("solid-js").JSX.Element;
3
+ export default PianoRollTrackListScroller;
@@ -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 };
@@ -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 "./PianoRoll";
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
- export declare const pianoRollStatePropNames: ("onDurationChange" | keyof PianoRollState | "onPpqChange" | "onModeChange" | "onPositionChange" | "onZoomChange" | "onVerticalZoomChange" | "onVerticalPositionChange" | "onVerticalTrackZoomChange" | "onVerticalTrackPositionChange" | "onGridDivisionChange" | "onSnapToGridChange" | "onTracksChange" | "onSelectedTrackIndexChange" | "onPressedKeysChange" | "onNoteChange" | "onInsertNote" | "onRemoveNote" | "onNoteDown" | "onNoteUp" | "isKeyDown")[];
20
- declare const createPianoRollstate: (initialState?: Partial<PianoRollState>) => {
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
- onPpqChange: (value: number) => void;
42
- onModeChange: (value: "keys" | "tracks") => void;
43
- onPositionChange: (value: number) => void;
44
- onZoomChange: (value: number) => void;
45
- onVerticalZoomChange: (value: number) => void;
46
- onVerticalPositionChange: (value: number) => void;
47
- onVerticalTrackZoomChange: (value: number) => void;
48
- onVerticalTrackPositionChange: (value: number) => void;
49
- onGridDivisionChange: (value: GridDivision) => void;
50
- onSnapToGridChange: (value: boolean) => void;
51
- onDurationChange: (value: number) => void;
52
- onTracksChange: (value: Track[]) => void;
53
- onSelectedTrackIndexChange: (value: number) => void;
54
- onPressedKeysChange: (value: Record<number, Record<number, boolean>>) => void;
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
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.0.22",
2
+ "version": "0.0.24",
3
3
  "name": "solid-pianoroll",
4
4
  "description": "Pianoroll UI Control for Solid JS apps",
5
5
  "license": "MIT",