zds-pickers 4.0.5 → 4.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/.editorconfig +19 -0
- package/.github/workflows/codeql-analysis.yml +67 -0
- package/.nvmrc +1 -0
- package/.prettierignore +0 -0
- package/.prettierrc +13 -0
- package/.storybook/main.ts +42 -0
- package/.storybook/manager.ts +12 -0
- package/.storybook/preview.tsx +26 -0
- package/.vscode/extensions.json +32 -0
- package/.vscode/javascript.code-snippets +229 -0
- package/.vscode/settings.json +358 -0
- package/biome.jsonc +158 -0
- package/dist/index.cjs.js +13 -12
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.es.js +638 -644
- package/dist/index.es.js.map +1 -0
- package/dist/types/index.d.ts +34 -2
- package/dist/types/pickers/CCPicker.d.ts +2 -1
- package/dist/types/pickers/ChannelMappingPicker.d.ts +2 -1
- package/dist/types/pickers/ChannelPicker.d.ts +5 -3
- package/dist/types/pickers/LatchPicker.d.ts +5 -3
- package/dist/types/pickers/MappingPicker.d.ts +2 -1
- package/dist/types/pickers/NotePicker.d.ts +2 -1
- package/dist/types/pickers/PolarityPicker.d.ts +6 -4
- package/dist/types/pickers/ResponseCurve.d.ts +14 -5
- package/dist/types/pickers/ResponseCurvePicker.d.ts +6 -4
- package/dist/types/pickers/StatusPicker.d.ts +2 -1
- package/dist/types/pickers/ValuePicker.d.ts +2 -1
- package/lib/@types/nebiru-react-rotary-knob.d.ts +20 -0
- package/lib/@types/react-svgmt.d.ts +74 -0
- package/lib/@types/zds-mappings.d.ts +55 -0
- package/lib/@types/zds-react-piano.d.ts +17 -0
- package/lib/hooks/useComponentSize.ts +52 -0
- package/lib/hooks/useStateWithDynamicDefault.ts +13 -0
- package/lib/index.ts +51 -0
- package/lib/midi/ccValues.ts +139 -0
- package/lib/midi/export.ts +54 -0
- package/lib/other/DefaultTooltip.ts +14 -0
- package/lib/other/OctavePlayer.tsx +141 -0
- package/lib/other/SVGText.tsx +221 -0
- package/lib/other/SoundFontProvider.tsx +130 -0
- package/lib/pickers/CCPicker.tsx +28 -0
- package/lib/pickers/ChannelMappingPicker.tsx +135 -0
- package/lib/pickers/ChannelPicker.tsx +76 -0
- package/lib/pickers/Knob.tsx +93 -0
- package/lib/pickers/KnobPicker.tsx +93 -0
- package/lib/pickers/LatchPicker.tsx +33 -0
- package/lib/pickers/MappingPicker.tsx +68 -0
- package/lib/pickers/NotePicker.tsx +95 -0
- package/lib/pickers/PianoPicker.tsx +77 -0
- package/lib/pickers/PolarityPicker.tsx +39 -0
- package/lib/pickers/ResponseCurve.tsx +304 -0
- package/lib/pickers/ResponseCurvePicker.tsx +74 -0
- package/lib/pickers/Select.tsx +248 -0
- package/lib/pickers/StatusPicker.tsx +28 -0
- package/lib/pickers/ValuePicker.tsx +67 -0
- package/lib/pickers/knobSkin10.tsx +94 -0
- package/lib/rotaryKnob/InternalInput.tsx +43 -0
- package/lib/rotaryKnob/Types.ts +6 -0
- package/lib/rotaryKnob/helpers/DrawCircle.tsx +41 -0
- package/lib/rotaryKnob/helpers/DrawLine.tsx +32 -0
- package/lib/rotaryKnob/helpers/HelpersOverlay.tsx +43 -0
- package/lib/rotaryKnob/helpers/KnobVisualHelpers.tsx +138 -0
- package/lib/rotaryKnob/index.tsx +417 -0
- package/lib/rotaryKnob/knobdefaultskin.ts +56 -0
- package/lib/rotaryKnob/utils.ts +112 -0
- package/lib/temp/acoustic_grand_piano-mp3.js +94 -0
- package/lib/utils.ts +41 -0
- package/package.json +2 -6
- package/stories/assets/sampleStyles.css +349 -0
- package/stories/assets/utils.js +7 -0
- package/stories/picker.stories.tsx +313 -0
- package/tsconfig.json +34 -0
- package/vite.config.ts +48 -0
- package/dist/index.d.ts +0 -244
- package/dist/types/main.d.ts +0 -19
package/dist/types/index.d.ts
CHANGED
|
@@ -1,2 +1,34 @@
|
|
|
1
|
-
export
|
|
2
|
-
export {}
|
|
1
|
+
export { default as ChannelMappingPicker } from './pickers/ChannelMappingPicker';
|
|
2
|
+
export { default as ChannelPicker } from './pickers/ChannelPicker';
|
|
3
|
+
export { default as Knob } from './pickers/Knob';
|
|
4
|
+
export { default as KnobPicker } from './pickers/KnobPicker';
|
|
5
|
+
export { default as LatchPicker } from './pickers/LatchPicker';
|
|
6
|
+
export { default as MappingPicker } from './pickers/MappingPicker';
|
|
7
|
+
export { default as NotePicker } from './pickers/NotePicker';
|
|
8
|
+
export { default as OctavePlayer } from './other/OctavePlayer';
|
|
9
|
+
export { default as PianoPicker } from './pickers/PianoPicker';
|
|
10
|
+
export { default as PolarityPicker } from './pickers/PolarityPicker';
|
|
11
|
+
export { default as ResponseCurvePicker } from './pickers/ResponseCurvePicker';
|
|
12
|
+
export { default as Select } from './pickers/Select';
|
|
13
|
+
export { default as StatusPicker } from './pickers/StatusPicker';
|
|
14
|
+
export { default as SVGText } from './other/SVGText';
|
|
15
|
+
export { default as ValuePicker } from './pickers/ValuePicker';
|
|
16
|
+
export type * from './pickers/ChannelMappingPicker';
|
|
17
|
+
export type * from './pickers/ChannelPicker';
|
|
18
|
+
export type * from './pickers/Knob';
|
|
19
|
+
export type * from './pickers/KnobPicker';
|
|
20
|
+
export type * from './pickers/LatchPicker';
|
|
21
|
+
export type * from './pickers/MappingPicker';
|
|
22
|
+
export type * from './pickers/NotePicker';
|
|
23
|
+
export type * from './other/OctavePlayer';
|
|
24
|
+
export type * from './pickers/PianoPicker';
|
|
25
|
+
export type * from './pickers/PolarityPicker';
|
|
26
|
+
export type * from './pickers/ResponseCurvePicker';
|
|
27
|
+
export type * from './pickers/Select';
|
|
28
|
+
export type * from './pickers/StatusPicker';
|
|
29
|
+
export type * from './other/SVGText';
|
|
30
|
+
export type * from './pickers/ValuePicker';
|
|
31
|
+
export type * from './midi/export';
|
|
32
|
+
export { combineStatusWithChannel, extractStatusAndChannel, getStatusLabel, MASK_CHANNEL, MASK_STATUS, Statuses, } from './midi/export';
|
|
33
|
+
export { default as ResponseCurve, RESPONSE_CURVES, } from './pickers/ResponseCurve';
|
|
34
|
+
export { default as ccValues } from './midi/ccValues';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { GroupBase, SelectInstance } from 'react-select';
|
|
2
2
|
import type { Option, SelectProps } from './Select';
|
|
3
3
|
type CCPickerProps = SelectProps<number>;
|
|
4
|
+
type CCPickerRef = SelectInstance<Option<number>, false, GroupBase<Option<number>>>;
|
|
4
5
|
declare const CCPicker: import("react").ForwardRefExoticComponent<CCPickerProps & import("react").RefAttributes<SelectInstance<Option<number>, false, GroupBase<Option<number>>>>>;
|
|
5
6
|
export default CCPicker;
|
|
6
|
-
export type { CCPickerProps };
|
|
7
|
+
export type { CCPickerProps, CCPickerRef };
|
|
@@ -8,6 +8,7 @@ interface ChannelMappingPickerProps extends SelectProps<InternalValue> {
|
|
|
8
8
|
value: number;
|
|
9
9
|
onChange: (value: InternalValue) => void;
|
|
10
10
|
}
|
|
11
|
+
type ChannelMappingPickerRef = SelectInstance<Option<number>, false, GroupBase<Option<number>>>;
|
|
11
12
|
declare const ChannelMappingPicker: import("react").ForwardRefExoticComponent<ChannelMappingPickerProps & import("react").RefAttributes<SelectInstance<Option<InternalValue>, false, GroupBase<Option<InternalValue>>>>>;
|
|
12
13
|
export default ChannelMappingPicker;
|
|
13
|
-
export type { ChannelMappingPickerProps };
|
|
14
|
+
export type { ChannelMappingPickerProps, ChannelMappingPickerRef };
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { GroupBase, SelectInstance } from 'react-select';
|
|
2
2
|
import type { Option, SelectProps } from './Select';
|
|
3
|
-
type
|
|
4
|
-
|
|
3
|
+
type Channel = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15;
|
|
4
|
+
type ChannelPickerProps = SelectProps<Channel>;
|
|
5
|
+
type ChannelPickerRef = SelectInstance<Option<Channel>, false, GroupBase<Option<Channel>>>;
|
|
6
|
+
declare const ChannelPicker: import("react").ForwardRefExoticComponent<ChannelPickerProps & import("react").RefAttributes<SelectInstance<Option<Channel>, false, GroupBase<Option<Channel>>>>>;
|
|
5
7
|
export default ChannelPicker;
|
|
6
|
-
export type { ChannelPickerProps };
|
|
8
|
+
export type { Channel, ChannelPickerProps, ChannelPickerRef };
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { GroupBase, SelectInstance } from 'react-select';
|
|
2
|
+
import type { Polarity } from './PolarityPicker';
|
|
2
3
|
import type { Option, SelectProps } from './Select';
|
|
3
|
-
type LatchPickerProps = SelectProps<
|
|
4
|
-
|
|
4
|
+
type LatchPickerProps = SelectProps<Polarity>;
|
|
5
|
+
type LatchPickerRef = SelectInstance<Option<Polarity>, false, GroupBase<Option<Polarity>>>;
|
|
6
|
+
declare const LatchPicker: import("react").ForwardRefExoticComponent<LatchPickerProps & import("react").RefAttributes<SelectInstance<Option<Polarity>, false, GroupBase<Option<Polarity>>>>>;
|
|
5
7
|
export default LatchPicker;
|
|
6
|
-
export type { LatchPickerProps };
|
|
8
|
+
export type { LatchPickerProps, LatchPickerRef };
|
|
@@ -3,8 +3,9 @@ import type { Option, SelectProps } from './Select';
|
|
|
3
3
|
type MappingPickerProps = SelectProps<string> & {
|
|
4
4
|
allowClearing: boolean;
|
|
5
5
|
};
|
|
6
|
+
type MappingPickerRef = SelectInstance<Option<string>, false, GroupBase<Option<string>>>;
|
|
6
7
|
declare const MappingPicker: import("react").ForwardRefExoticComponent<SelectProps<string> & {
|
|
7
8
|
allowClearing: boolean;
|
|
8
9
|
} & import("react").RefAttributes<SelectInstance<Option<string>, false, GroupBase<Option<string>>>>>;
|
|
9
10
|
export default MappingPicker;
|
|
10
|
-
export type { MappingPickerProps };
|
|
11
|
+
export type { MappingPickerProps, MappingPickerRef };
|
|
@@ -8,6 +8,7 @@ type NotePickerProps = SelectProps<number> & {
|
|
|
8
8
|
mapping?: Mapping;
|
|
9
9
|
onChange: (value: number) => void;
|
|
10
10
|
};
|
|
11
|
+
type NotePickerRef = SelectInstance<Option<number>, false, GroupBase<Option<number>>>;
|
|
11
12
|
declare const NotePicker: import("react").ForwardRefExoticComponent<SelectProps<number> & {
|
|
12
13
|
channel: number;
|
|
13
14
|
disabled?: boolean;
|
|
@@ -16,4 +17,4 @@ declare const NotePicker: import("react").ForwardRefExoticComponent<SelectProps<
|
|
|
16
17
|
onChange: (value: number) => void;
|
|
17
18
|
} & import("react").RefAttributes<SelectInstance<Option<number>, false, GroupBase<Option<number>>>>>;
|
|
18
19
|
export default NotePicker;
|
|
19
|
-
export type { NotePickerProps };
|
|
20
|
+
export type { NotePickerProps, NotePickerRef };
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { GroupBase, SelectInstance } from 'react-select';
|
|
2
2
|
import type { Option, SelectProps } from './Select';
|
|
3
|
-
type
|
|
3
|
+
type Polarity = 0 | 1;
|
|
4
|
+
type PolarityPickerProps = SelectProps<Polarity> & {
|
|
4
5
|
labelOff?: string;
|
|
5
6
|
labelOn?: string;
|
|
6
7
|
};
|
|
7
|
-
|
|
8
|
+
type PolarityPickerRef = SelectInstance<Option<Polarity>, false, GroupBase<Option<Polarity>>>;
|
|
9
|
+
declare const PolarityPicker: import("react").ForwardRefExoticComponent<SelectProps<Polarity> & {
|
|
8
10
|
labelOff?: string;
|
|
9
11
|
labelOn?: string;
|
|
10
|
-
} & import("react").RefAttributes<SelectInstance<Option<
|
|
12
|
+
} & import("react").RefAttributes<SelectInstance<Option<Polarity>, false, GroupBase<Option<Polarity>>>>>;
|
|
11
13
|
export default PolarityPicker;
|
|
12
|
-
export type { PolarityPickerProps };
|
|
14
|
+
export type { Polarity, PolarityPickerProps, PolarityPickerRef };
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { type TooltipProps } from '../other/DefaultTooltip';
|
|
2
2
|
import type { Option } from './Select';
|
|
3
|
+
declare const RESPONSE_CURVE_0 = 0;
|
|
4
|
+
declare const RESPONSE_CURVE_1 = 1;
|
|
5
|
+
declare const RESPONSE_CURVE_2 = 2;
|
|
6
|
+
declare const RESPONSE_CURVE_3 = 3;
|
|
7
|
+
declare const RESPONSE_CURVE_4 = 4;
|
|
8
|
+
declare const RESPONSE_CURVE_5 = 5;
|
|
9
|
+
declare const RESPONSE_CURVE_6 = 6;
|
|
10
|
+
declare const RESPONSE_CURVE_7 = 7;
|
|
11
|
+
type Curve = typeof RESPONSE_CURVE_0 | typeof RESPONSE_CURVE_1 | typeof RESPONSE_CURVE_2 | typeof RESPONSE_CURVE_3 | typeof RESPONSE_CURVE_4 | typeof RESPONSE_CURVE_5 | typeof RESPONSE_CURVE_6 | typeof RESPONSE_CURVE_7;
|
|
3
12
|
type ResponseCurve = {
|
|
4
|
-
value:
|
|
13
|
+
value: Curve;
|
|
5
14
|
label: React.ReactNode;
|
|
6
15
|
c1: number;
|
|
7
16
|
c2: number;
|
|
@@ -12,20 +21,20 @@ type ResponseCurve = {
|
|
|
12
21
|
labelX: number;
|
|
13
22
|
labelY: number;
|
|
14
23
|
};
|
|
15
|
-
declare const RESPONSE_CURVES: Option<
|
|
24
|
+
declare const RESPONSE_CURVES: Option<Curve>[];
|
|
16
25
|
type ResponseCurveProps = {
|
|
17
26
|
autosize: boolean;
|
|
18
27
|
disabled?: boolean;
|
|
19
28
|
inverted: boolean;
|
|
20
29
|
onChange: (event: {
|
|
21
30
|
target: {
|
|
22
|
-
value:
|
|
31
|
+
value: Curve;
|
|
23
32
|
};
|
|
24
33
|
}) => void;
|
|
25
34
|
Tooltip: React.FC<TooltipProps>;
|
|
26
|
-
value:
|
|
35
|
+
value: Curve;
|
|
27
36
|
};
|
|
28
37
|
declare const ResponseCurve: (props: ResponseCurveProps) => import("react/jsx-runtime").JSX.Element;
|
|
29
38
|
export default ResponseCurve;
|
|
30
39
|
export { RESPONSE_CURVES };
|
|
31
|
-
export type { ResponseCurveProps };
|
|
40
|
+
export type { Curve, ResponseCurve, ResponseCurveProps };
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import type { GroupBase, SelectInstance } from 'react-select';
|
|
2
2
|
import { type TooltipProps } from '../other/DefaultTooltip';
|
|
3
|
+
import { type Curve } from './ResponseCurve';
|
|
3
4
|
import type { Option, SelectProps } from './Select';
|
|
4
|
-
type ResponseCurvePickerProps = SelectProps<
|
|
5
|
+
type ResponseCurvePickerProps = SelectProps<Curve> & {
|
|
5
6
|
inverted?: boolean;
|
|
6
7
|
Tooltip?: React.FC<TooltipProps>;
|
|
7
8
|
};
|
|
8
|
-
|
|
9
|
+
type ResponseCurvePickerRef = SelectInstance<Option<Curve>, false, GroupBase<Option<Curve>>>;
|
|
10
|
+
declare const ResponseCurvePicker: import("react").ForwardRefExoticComponent<SelectProps<Curve> & {
|
|
9
11
|
inverted?: boolean;
|
|
10
12
|
Tooltip?: React.FC<TooltipProps>;
|
|
11
|
-
} & import("react").RefAttributes<SelectInstance<Option<
|
|
13
|
+
} & import("react").RefAttributes<SelectInstance<Option<Curve>, false, GroupBase<Option<Curve>>>>>;
|
|
12
14
|
export default ResponseCurvePicker;
|
|
13
|
-
export type { ResponseCurvePickerProps };
|
|
15
|
+
export type { ResponseCurvePickerProps, ResponseCurvePickerRef };
|
|
@@ -4,8 +4,9 @@ import type { Option, SelectProps } from './Select';
|
|
|
4
4
|
type StatusPickerProps = SelectProps<Status> & {
|
|
5
5
|
statuses: Option<Status>[];
|
|
6
6
|
};
|
|
7
|
+
type StatusPickerRef = SelectInstance<Option<Status>, false, GroupBase<Option<Status>>>;
|
|
7
8
|
declare const StatusPicker: import("react").ForwardRefExoticComponent<SelectProps<number> & {
|
|
8
9
|
statuses: Option<Status>[];
|
|
9
10
|
} & import("react").RefAttributes<SelectInstance<Option<number>, false, GroupBase<Option<number>>>>>;
|
|
10
11
|
export default StatusPicker;
|
|
11
|
-
export type { StatusPickerProps };
|
|
12
|
+
export type { StatusPickerProps, StatusPickerRef };
|
|
@@ -5,10 +5,11 @@ type ValuePickerProps = SelectProps<number> & {
|
|
|
5
5
|
max?: number;
|
|
6
6
|
min?: number;
|
|
7
7
|
};
|
|
8
|
+
type ValuePickerRef = SelectInstance<Option<number>, false, GroupBase<Option<number>>>;
|
|
8
9
|
declare const ValuePicker: import("react").ForwardRefExoticComponent<SelectProps<number> & {
|
|
9
10
|
highToLow?: boolean;
|
|
10
11
|
max?: number;
|
|
11
12
|
min?: number;
|
|
12
13
|
} & import("react").RefAttributes<SelectInstance<Option<number>, false, GroupBase<Option<number>>>>>;
|
|
13
14
|
export default ValuePicker;
|
|
14
|
-
export type { ValuePickerProps };
|
|
15
|
+
export type { ValuePickerProps, ValuePickerRef };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
declare module 'nebiru-react-rotary-knob' {
|
|
2
|
+
const Knob: React.ComponentType<{
|
|
3
|
+
clampMax: number
|
|
4
|
+
clampMin: number
|
|
5
|
+
className: string
|
|
6
|
+
disabled: boolean
|
|
7
|
+
max: number
|
|
8
|
+
min: number
|
|
9
|
+
onChange: (value: number) => void
|
|
10
|
+
onWheel?: (event: WheelEvent) => void
|
|
11
|
+
preciseMode: boolean
|
|
12
|
+
rotateDegrees: number
|
|
13
|
+
skin: typeof import('./knobSkin10').default
|
|
14
|
+
style: React.CSSProperties
|
|
15
|
+
unlockDistance: number
|
|
16
|
+
value: number
|
|
17
|
+
}>
|
|
18
|
+
|
|
19
|
+
export { Knob }
|
|
20
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
declare module 'react-svgmt' {
|
|
2
|
+
import React from 'react'
|
|
3
|
+
|
|
4
|
+
type DrawCircleProps = React.SVGProps<SVGCircleElement> & {
|
|
5
|
+
r: number
|
|
6
|
+
borderColor?: string
|
|
7
|
+
fillColor?: string
|
|
8
|
+
borderWidth?: number
|
|
9
|
+
fillOpacity: number
|
|
10
|
+
cx: number
|
|
11
|
+
cy: number
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
class DrawCircle extends React.Component<DrawCircleProps> {
|
|
15
|
+
render(): React.JSX.Element
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type InternalInputProps = {
|
|
19
|
+
min: number
|
|
20
|
+
max: number
|
|
21
|
+
value: number
|
|
22
|
+
step?: number
|
|
23
|
+
inputRef: React.RefObject<HTMLInputElement>
|
|
24
|
+
onChange: (val: number) => void
|
|
25
|
+
style?: React.CSSProperties
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
class InternalInput extends React.Component<InternalInputProps> {
|
|
29
|
+
static defaultProps: {
|
|
30
|
+
step: number
|
|
31
|
+
}
|
|
32
|
+
render(): React.JSX.Element
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type Point = {
|
|
36
|
+
x: number
|
|
37
|
+
y: number
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
type DrawLineProps = React.SVGProps<SVGLineElement> & {
|
|
41
|
+
width?: number
|
|
42
|
+
color?: string
|
|
43
|
+
p1: Point
|
|
44
|
+
p2: Point
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
class DrawLine extends React.Component<DrawLineProps> {
|
|
48
|
+
render(): React.JSX.Element
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
type SvgLoaderProps = {
|
|
52
|
+
svg?: string
|
|
53
|
+
svgXML?: string
|
|
54
|
+
width?: string | number
|
|
55
|
+
height?: string | number
|
|
56
|
+
style?: React.CSSProperties
|
|
57
|
+
onSVGReady?: (svg: SVGElement) => void
|
|
58
|
+
children?: React.ReactNode
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
type SvgProxyProps = {
|
|
62
|
+
children?: React.ReactNode
|
|
63
|
+
selector: string
|
|
64
|
+
transform?: string
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
class SvgLoader extends React.Component<SvgLoaderProps> {
|
|
68
|
+
render(): React.JSX.Element
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
class SvgProxy extends React.Component<SvgProxyProps> {
|
|
72
|
+
render(): React.JSX.Element
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
declare module 'zds-mappings' {
|
|
2
|
+
function cloneMapping(mappingName: string): Mapping
|
|
3
|
+
function createUserMapping(mappingName: string): Mapping
|
|
4
|
+
function editUserMapping(
|
|
5
|
+
mappingName: string,
|
|
6
|
+
noteNum: number,
|
|
7
|
+
field: string,
|
|
8
|
+
value: string | number,
|
|
9
|
+
): Mapping
|
|
10
|
+
|
|
11
|
+
function getMapping(mappingName: string): Mapping
|
|
12
|
+
|
|
13
|
+
function emptyMapping(): Mapping
|
|
14
|
+
|
|
15
|
+
function getNextAvailableMappingName(path: string): string
|
|
16
|
+
function reverse(mapping: Mapping): string
|
|
17
|
+
function storeMapping(mappingName: string, rawContent: string): void
|
|
18
|
+
function validateContent(content: string): boolean
|
|
19
|
+
|
|
20
|
+
function getAvailableGroups(): { label: string; value: string }[]
|
|
21
|
+
function getStockNames(): string[]
|
|
22
|
+
function getUserMappingNames(): string[]
|
|
23
|
+
function removeMapping(mappingName: string): void
|
|
24
|
+
function renameUserMapping(
|
|
25
|
+
oldKey: string,
|
|
26
|
+
newKey: string,
|
|
27
|
+
): { [key: string]: string | number }
|
|
28
|
+
|
|
29
|
+
interface MapItem {
|
|
30
|
+
note: number
|
|
31
|
+
group: string
|
|
32
|
+
name: string
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type Mapping = MapItem[]
|
|
36
|
+
|
|
37
|
+
export {
|
|
38
|
+
cloneMapping,
|
|
39
|
+
createUserMapping,
|
|
40
|
+
emptyMapping,
|
|
41
|
+
editUserMapping,
|
|
42
|
+
getAvailableGroups,
|
|
43
|
+
getMapping,
|
|
44
|
+
getNextAvailableMappingName,
|
|
45
|
+
getStockNames,
|
|
46
|
+
getUserMappingNames,
|
|
47
|
+
removeMapping,
|
|
48
|
+
renameUserMapping,
|
|
49
|
+
reverse,
|
|
50
|
+
storeMapping,
|
|
51
|
+
validateContent,
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export type { MapItem, Mapping }
|
|
55
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
declare module 'zds-react-piano' {
|
|
2
|
+
type NoteRange = {
|
|
3
|
+
first: number
|
|
4
|
+
last: number
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
const ReactPiano: React.ComponentType<{
|
|
8
|
+
disabled?: boolean
|
|
9
|
+
keyWidthToHeight: number
|
|
10
|
+
noteRange: NoteRange
|
|
11
|
+
width: number
|
|
12
|
+
}>
|
|
13
|
+
|
|
14
|
+
export { ReactPiano as Piano }
|
|
15
|
+
|
|
16
|
+
export type { NoteRange }
|
|
17
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { useCallback, useLayoutEffect, useState } from 'react'
|
|
2
|
+
|
|
3
|
+
const getSize = (el: HTMLDivElement | null) =>
|
|
4
|
+
el
|
|
5
|
+
? {
|
|
6
|
+
width: el.offsetWidth,
|
|
7
|
+
height: el.offsetHeight,
|
|
8
|
+
}
|
|
9
|
+
: {
|
|
10
|
+
width: 0,
|
|
11
|
+
height: 0,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const useComponentSize = (ref: React.RefObject<HTMLDivElement>) => {
|
|
15
|
+
const [componentSize, setComponentSize] = useState(
|
|
16
|
+
getSize(ref ? ref.current : null),
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
const handleResize = useCallback(() => {
|
|
20
|
+
if (ref.current) {
|
|
21
|
+
setComponentSize(getSize(ref.current))
|
|
22
|
+
}
|
|
23
|
+
}, [ref])
|
|
24
|
+
|
|
25
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>
|
|
26
|
+
useLayoutEffect(() => {
|
|
27
|
+
if (!ref.current) return
|
|
28
|
+
|
|
29
|
+
handleResize()
|
|
30
|
+
|
|
31
|
+
if (typeof ResizeObserver === 'function') {
|
|
32
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
33
|
+
handleResize()
|
|
34
|
+
})
|
|
35
|
+
resizeObserver.observe(ref.current)
|
|
36
|
+
|
|
37
|
+
return () => {
|
|
38
|
+
resizeObserver.disconnect()
|
|
39
|
+
// resizeObserver = null
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
window.addEventListener('resize', handleResize)
|
|
43
|
+
|
|
44
|
+
return () => {
|
|
45
|
+
window.removeEventListener('resize', handleResize)
|
|
46
|
+
}
|
|
47
|
+
}, [ref.current])
|
|
48
|
+
|
|
49
|
+
return componentSize
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export default useComponentSize
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react'
|
|
2
|
+
|
|
3
|
+
const useStateWithDynamicDefault = <T>(defaultVal: T) => {
|
|
4
|
+
const [state, setState] = useState<T>(defaultVal)
|
|
5
|
+
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
setState(defaultVal)
|
|
8
|
+
}, [defaultVal])
|
|
9
|
+
|
|
10
|
+
return [state, setState] as const
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default useStateWithDynamicDefault
|
package/lib/index.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Components
|
|
2
|
+
export { default as ChannelMappingPicker } from './pickers/ChannelMappingPicker'
|
|
3
|
+
export { default as ChannelPicker } from './pickers/ChannelPicker'
|
|
4
|
+
export { default as Knob } from './pickers/Knob'
|
|
5
|
+
export { default as KnobPicker } from './pickers/KnobPicker'
|
|
6
|
+
export { default as LatchPicker } from './pickers/LatchPicker'
|
|
7
|
+
export { default as MappingPicker } from './pickers/MappingPicker'
|
|
8
|
+
export { default as NotePicker } from './pickers/NotePicker'
|
|
9
|
+
export { default as OctavePlayer } from './other/OctavePlayer'
|
|
10
|
+
export { default as PianoPicker } from './pickers/PianoPicker'
|
|
11
|
+
export { default as PolarityPicker } from './pickers/PolarityPicker'
|
|
12
|
+
export { default as ResponseCurvePicker } from './pickers/ResponseCurvePicker'
|
|
13
|
+
export { default as Select } from './pickers/Select'
|
|
14
|
+
export { default as StatusPicker } from './pickers/StatusPicker'
|
|
15
|
+
export { default as SVGText } from './other/SVGText'
|
|
16
|
+
export { default as ValuePicker } from './pickers/ValuePicker'
|
|
17
|
+
|
|
18
|
+
// Types
|
|
19
|
+
export type * from './pickers/ChannelMappingPicker'
|
|
20
|
+
export type * from './pickers/ChannelPicker'
|
|
21
|
+
export type * from './pickers/Knob'
|
|
22
|
+
export type * from './pickers/KnobPicker'
|
|
23
|
+
export type * from './pickers/LatchPicker'
|
|
24
|
+
export type * from './pickers/MappingPicker'
|
|
25
|
+
export type * from './pickers/NotePicker'
|
|
26
|
+
export type * from './other/OctavePlayer'
|
|
27
|
+
export type * from './pickers/PianoPicker'
|
|
28
|
+
export type * from './pickers/PolarityPicker'
|
|
29
|
+
export type * from './pickers/ResponseCurvePicker'
|
|
30
|
+
export type * from './pickers/Select'
|
|
31
|
+
export type * from './pickers/StatusPicker'
|
|
32
|
+
export type * from './other/SVGText'
|
|
33
|
+
export type * from './pickers/ValuePicker'
|
|
34
|
+
export type * from './midi/export'
|
|
35
|
+
|
|
36
|
+
// MIDI Values & Functions
|
|
37
|
+
export {
|
|
38
|
+
combineStatusWithChannel,
|
|
39
|
+
extractStatusAndChannel,
|
|
40
|
+
getStatusLabel,
|
|
41
|
+
MASK_CHANNEL,
|
|
42
|
+
MASK_STATUS,
|
|
43
|
+
Statuses,
|
|
44
|
+
} from './midi/export'
|
|
45
|
+
|
|
46
|
+
export {
|
|
47
|
+
default as ResponseCurve,
|
|
48
|
+
RESPONSE_CURVES,
|
|
49
|
+
} from './pickers/ResponseCurve'
|
|
50
|
+
|
|
51
|
+
export { default as ccValues } from './midi/ccValues'
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import type { Option } from '../pickers/Select'
|
|
2
|
+
|
|
3
|
+
const CC_NAMES = [
|
|
4
|
+
'Bank Select',
|
|
5
|
+
'Modulation Wheel',
|
|
6
|
+
'Breath Controller',
|
|
7
|
+
'',
|
|
8
|
+
'Foot Control',
|
|
9
|
+
'Portamento Time',
|
|
10
|
+
'Data Entry Slider',
|
|
11
|
+
'Volume',
|
|
12
|
+
'Balance',
|
|
13
|
+
'',
|
|
14
|
+
'Pan',
|
|
15
|
+
'Expression',
|
|
16
|
+
'Effect Control 1',
|
|
17
|
+
'Effect Control 2',
|
|
18
|
+
'',
|
|
19
|
+
'',
|
|
20
|
+
'',
|
|
21
|
+
'',
|
|
22
|
+
'',
|
|
23
|
+
'',
|
|
24
|
+
'',
|
|
25
|
+
'',
|
|
26
|
+
'',
|
|
27
|
+
'',
|
|
28
|
+
'',
|
|
29
|
+
'',
|
|
30
|
+
'',
|
|
31
|
+
'',
|
|
32
|
+
'',
|
|
33
|
+
'',
|
|
34
|
+
'',
|
|
35
|
+
'',
|
|
36
|
+
'Controller 0',
|
|
37
|
+
'Controller 1',
|
|
38
|
+
'Controller 2',
|
|
39
|
+
'Controller 3',
|
|
40
|
+
'Controller 4',
|
|
41
|
+
'Controller 5',
|
|
42
|
+
'Controller 6',
|
|
43
|
+
'Controller 7',
|
|
44
|
+
'Controller 8',
|
|
45
|
+
'Controller 9',
|
|
46
|
+
'Controller 10',
|
|
47
|
+
'Controller 11',
|
|
48
|
+
'Controller 12',
|
|
49
|
+
'Controller 13',
|
|
50
|
+
'Controller 14',
|
|
51
|
+
'Controller 15',
|
|
52
|
+
'Controller 16',
|
|
53
|
+
'Controller 17',
|
|
54
|
+
'Controller 18',
|
|
55
|
+
'Controller 19',
|
|
56
|
+
'Controller 20',
|
|
57
|
+
'Controller 21',
|
|
58
|
+
'Controller 22',
|
|
59
|
+
'Controller 23',
|
|
60
|
+
'Controller 24',
|
|
61
|
+
'Controller 25',
|
|
62
|
+
'Controller 26',
|
|
63
|
+
'Controller 27',
|
|
64
|
+
'Controller 28',
|
|
65
|
+
'Controller 29',
|
|
66
|
+
'Controller 30',
|
|
67
|
+
'Controller 31',
|
|
68
|
+
'Sustain',
|
|
69
|
+
'Portamento',
|
|
70
|
+
'Sostenuto',
|
|
71
|
+
'Soft Pedal',
|
|
72
|
+
'Legato Pedal',
|
|
73
|
+
'Sustain 2',
|
|
74
|
+
'Sound Variation',
|
|
75
|
+
'Resonance/Timbre',
|
|
76
|
+
'Sound Release Time',
|
|
77
|
+
'Sound Attack Time',
|
|
78
|
+
'Frequency Cutoff',
|
|
79
|
+
'Sound Control 6',
|
|
80
|
+
'Sound Control 7',
|
|
81
|
+
'Sound Control 8',
|
|
82
|
+
'Sound Control 9',
|
|
83
|
+
'Sound Control 10',
|
|
84
|
+
'Decay or General 1',
|
|
85
|
+
'Hi-Pass or General 2',
|
|
86
|
+
'General 3',
|
|
87
|
+
'General 4',
|
|
88
|
+
'Portamento Amount',
|
|
89
|
+
'',
|
|
90
|
+
'',
|
|
91
|
+
'',
|
|
92
|
+
'',
|
|
93
|
+
'',
|
|
94
|
+
'',
|
|
95
|
+
'Reverb Level',
|
|
96
|
+
'Tremolo Depth',
|
|
97
|
+
'Chorus Level',
|
|
98
|
+
'Detune',
|
|
99
|
+
'Phaser Depth',
|
|
100
|
+
'Data Entry +1',
|
|
101
|
+
'Data Entry -1',
|
|
102
|
+
'Non-registered LSB',
|
|
103
|
+
'Non-registered MSB',
|
|
104
|
+
'Registered msb',
|
|
105
|
+
'Registered lsb',
|
|
106
|
+
'',
|
|
107
|
+
'',
|
|
108
|
+
'',
|
|
109
|
+
'',
|
|
110
|
+
'',
|
|
111
|
+
'',
|
|
112
|
+
'',
|
|
113
|
+
'',
|
|
114
|
+
'Shift 1',
|
|
115
|
+
'Shift 2',
|
|
116
|
+
'Shift 3',
|
|
117
|
+
'Shift 4',
|
|
118
|
+
'Shift 5',
|
|
119
|
+
'Shift 6',
|
|
120
|
+
'',
|
|
121
|
+
'',
|
|
122
|
+
'',
|
|
123
|
+
'',
|
|
124
|
+
'All Sound Off',
|
|
125
|
+
'All Controllers Off',
|
|
126
|
+
'Local Mode',
|
|
127
|
+
'All Notes Off',
|
|
128
|
+
'Omni Mode Off',
|
|
129
|
+
'Omni Mode On',
|
|
130
|
+
'Mono Mode On',
|
|
131
|
+
'Poly Mode',
|
|
132
|
+
].map(
|
|
133
|
+
(label, value): Option<number> => ({
|
|
134
|
+
label: String(label).length ? `${value} - ${label}` : String(value),
|
|
135
|
+
value,
|
|
136
|
+
}),
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
export default CC_NAMES
|