@tremolo-ui/functions 0.1.1 → 0.1.3
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/NumberInput/type.cjs +45 -0
- package/dist/NumberInput/type.cjs.map +1 -0
- package/dist/NumberInput/type.d.cts +20 -0
- package/dist/NumberInput/type.d.cts.map +1 -0
- package/dist/NumberInput/type.d.ts +20 -0
- package/dist/NumberInput/type.d.ts.map +1 -0
- package/dist/NumberInput/type.js +43 -0
- package/dist/NumberInput/type.js.map +1 -0
- package/dist/Slider/type.cjs +36 -0
- package/dist/Slider/type.cjs.map +1 -0
- package/dist/Slider/type.d.cts +15 -0
- package/dist/Slider/type.d.cts.map +1 -0
- package/dist/Slider/type.d.ts +15 -0
- package/dist/Slider/type.d.ts.map +1 -0
- package/dist/Slider/type.js +35 -0
- package/dist/Slider/type.js.map +1 -0
- package/dist/index.cjs +264 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +161 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +161 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +238 -0
- package/dist/index.js.map +1 -0
- package/package.json +17 -17
- package/src/index.ts +30 -4
- package/dist/cjs/components/NumberInput/type.js +0 -51
- package/dist/cjs/components/NumberInput/type.js.map +0 -1
- package/dist/cjs/components/NumberInput/types/components/NumberInput/type.d.ts +0 -16
- package/dist/cjs/components/NumberInput/types/components/NumberInput/type.d.ts.map +0 -1
- package/dist/cjs/components/NumberInput/types/components/Slider/type.d.ts +0 -10
- package/dist/cjs/components/NumberInput/types/components/Slider/type.d.ts.map +0 -1
- package/dist/cjs/components/NumberInput/types/index.d.ts +0 -13
- package/dist/cjs/components/NumberInput/types/index.d.ts.map +0 -1
- package/dist/cjs/components/NumberInput/types/math.d.ts +0 -66
- package/dist/cjs/components/NumberInput/types/math.d.ts.map +0 -1
- package/dist/cjs/components/NumberInput/types/midi.d.ts +0 -61
- package/dist/cjs/components/NumberInput/types/midi.d.ts.map +0 -1
- package/dist/cjs/components/NumberInput/types/types.d.ts +0 -6
- package/dist/cjs/components/NumberInput/types/types.d.ts.map +0 -1
- package/dist/cjs/components/NumberInput/types/util.d.ts +0 -20
- package/dist/cjs/components/NumberInput/types/util.d.ts.map +0 -1
- package/dist/cjs/components/Slider/type.js +0 -38
- package/dist/cjs/components/Slider/type.js.map +0 -1
- package/dist/cjs/components/Slider/types/components/NumberInput/type.d.ts +0 -16
- package/dist/cjs/components/Slider/types/components/NumberInput/type.d.ts.map +0 -1
- package/dist/cjs/components/Slider/types/components/Slider/type.d.ts +0 -10
- package/dist/cjs/components/Slider/types/components/Slider/type.d.ts.map +0 -1
- package/dist/cjs/components/Slider/types/index.d.ts +0 -13
- package/dist/cjs/components/Slider/types/index.d.ts.map +0 -1
- package/dist/cjs/components/Slider/types/math.d.ts +0 -66
- package/dist/cjs/components/Slider/types/math.d.ts.map +0 -1
- package/dist/cjs/components/Slider/types/midi.d.ts +0 -61
- package/dist/cjs/components/Slider/types/midi.d.ts.map +0 -1
- package/dist/cjs/components/Slider/types/types.d.ts +0 -6
- package/dist/cjs/components/Slider/types/types.d.ts.map +0 -1
- package/dist/cjs/components/Slider/types/util.d.ts +0 -20
- package/dist/cjs/components/Slider/types/util.d.ts.map +0 -1
- package/dist/cjs/index.js +0 -282
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/types/components/NumberInput/type.d.ts +0 -16
- package/dist/cjs/types/components/NumberInput/type.d.ts.map +0 -1
- package/dist/cjs/types/components/Slider/type.d.ts +0 -10
- package/dist/cjs/types/components/Slider/type.d.ts.map +0 -1
- package/dist/cjs/types/index.d.ts +0 -13
- package/dist/cjs/types/index.d.ts.map +0 -1
- package/dist/cjs/types/math.d.ts +0 -66
- package/dist/cjs/types/math.d.ts.map +0 -1
- package/dist/cjs/types/midi.d.ts +0 -61
- package/dist/cjs/types/midi.d.ts.map +0 -1
- package/dist/cjs/types/types.d.ts +0 -6
- package/dist/cjs/types/types.d.ts.map +0 -1
- package/dist/cjs/types/util.d.ts +0 -20
- package/dist/cjs/types/util.d.ts.map +0 -1
- package/dist/esm/components/NumberInput/type.js +0 -48
- package/dist/esm/components/NumberInput/type.js.map +0 -1
- package/dist/esm/components/NumberInput/types/components/NumberInput/type.d.ts +0 -16
- package/dist/esm/components/NumberInput/types/components/NumberInput/type.d.ts.map +0 -1
- package/dist/esm/components/NumberInput/types/components/Slider/type.d.ts +0 -10
- package/dist/esm/components/NumberInput/types/components/Slider/type.d.ts.map +0 -1
- package/dist/esm/components/NumberInput/types/index.d.ts +0 -13
- package/dist/esm/components/NumberInput/types/index.d.ts.map +0 -1
- package/dist/esm/components/NumberInput/types/math.d.ts +0 -66
- package/dist/esm/components/NumberInput/types/math.d.ts.map +0 -1
- package/dist/esm/components/NumberInput/types/midi.d.ts +0 -61
- package/dist/esm/components/NumberInput/types/midi.d.ts.map +0 -1
- package/dist/esm/components/NumberInput/types/types.d.ts +0 -6
- package/dist/esm/components/NumberInput/types/types.d.ts.map +0 -1
- package/dist/esm/components/NumberInput/types/util.d.ts +0 -20
- package/dist/esm/components/NumberInput/types/util.d.ts.map +0 -1
- package/dist/esm/components/Slider/type.js +0 -36
- package/dist/esm/components/Slider/type.js.map +0 -1
- package/dist/esm/components/Slider/types/components/NumberInput/type.d.ts +0 -16
- package/dist/esm/components/Slider/types/components/NumberInput/type.d.ts.map +0 -1
- package/dist/esm/components/Slider/types/components/Slider/type.d.ts +0 -10
- package/dist/esm/components/Slider/types/components/Slider/type.d.ts.map +0 -1
- package/dist/esm/components/Slider/types/index.d.ts +0 -13
- package/dist/esm/components/Slider/types/index.d.ts.map +0 -1
- package/dist/esm/components/Slider/types/math.d.ts +0 -66
- package/dist/esm/components/Slider/types/math.d.ts.map +0 -1
- package/dist/esm/components/Slider/types/midi.d.ts +0 -61
- package/dist/esm/components/Slider/types/midi.d.ts.map +0 -1
- package/dist/esm/components/Slider/types/types.d.ts +0 -6
- package/dist/esm/components/Slider/types/types.d.ts.map +0 -1
- package/dist/esm/components/Slider/types/util.d.ts +0 -20
- package/dist/esm/components/Slider/types/util.d.ts.map +0 -1
- package/dist/esm/index.js +0 -255
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/types/components/NumberInput/type.d.ts +0 -16
- package/dist/esm/types/components/NumberInput/type.d.ts.map +0 -1
- package/dist/esm/types/components/Slider/type.d.ts +0 -10
- package/dist/esm/types/components/Slider/type.d.ts.map +0 -1
- package/dist/esm/types/index.d.ts +0 -13
- package/dist/esm/types/index.d.ts.map +0 -1
- package/dist/esm/types/math.d.ts +0 -66
- package/dist/esm/types/math.d.ts.map +0 -1
- package/dist/esm/types/midi.d.ts +0 -61
- package/dist/esm/types/midi.d.ts.map +0 -1
- package/dist/esm/types/types.d.ts +0 -6
- package/dist/esm/types/types.d.ts.map +0 -1
- package/dist/esm/types/util.d.ts +0 -20
- package/dist/esm/types/util.d.ts.map +0 -1
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
//#region src/math.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* clamp value between min and max
|
|
4
|
+
* @category Math
|
|
5
|
+
*/
|
|
6
|
+
declare function clamp(value: number, min: number, max: number): number;
|
|
7
|
+
/**
|
|
8
|
+
* Normalize the value from 0 to 1
|
|
9
|
+
* @category Math
|
|
10
|
+
*/
|
|
11
|
+
declare function normalizeValue(rawValue: number, min: number, max: number, skew?: number): number;
|
|
12
|
+
/**
|
|
13
|
+
* Convert normalized values back to raw values.
|
|
14
|
+
* @category Math
|
|
15
|
+
*/
|
|
16
|
+
declare function rawValue(normalizedValue: number, min: number, max: number, skew?: number): number;
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* @category Math
|
|
20
|
+
*/
|
|
21
|
+
declare function skewWithCenterValue(centerValue: number, min: number, max: number): number;
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* @category Math
|
|
25
|
+
*/
|
|
26
|
+
declare function stepValue(value: number, step: number): number;
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* @category Math
|
|
30
|
+
*/
|
|
31
|
+
declare function toFixed(x: number, fractionDigits?: number): number;
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* @category Math
|
|
35
|
+
*/
|
|
36
|
+
declare function integerPart(x: number | string): string | undefined;
|
|
37
|
+
/**
|
|
38
|
+
*
|
|
39
|
+
* @category Math
|
|
40
|
+
*/
|
|
41
|
+
declare function decimalPart(x: number | string): string | undefined;
|
|
42
|
+
/**
|
|
43
|
+
*
|
|
44
|
+
* @category Math
|
|
45
|
+
*/
|
|
46
|
+
declare function radian(degree: number): number;
|
|
47
|
+
/**
|
|
48
|
+
*
|
|
49
|
+
* @category Math
|
|
50
|
+
*/
|
|
51
|
+
declare function degree(radian: number): number;
|
|
52
|
+
/**
|
|
53
|
+
*
|
|
54
|
+
* @category Math
|
|
55
|
+
*/
|
|
56
|
+
declare function mapValue(value: number, inMin: number, inMax: number, outMin: number, outMax: number): number;
|
|
57
|
+
/**
|
|
58
|
+
*
|
|
59
|
+
* @category Math
|
|
60
|
+
*/
|
|
61
|
+
declare function dbToGain(db: number): number;
|
|
62
|
+
/**
|
|
63
|
+
*
|
|
64
|
+
* @category Math
|
|
65
|
+
*/
|
|
66
|
+
declare function gainToDb(gain: number): number;
|
|
67
|
+
//# sourceMappingURL=math.d.ts.map
|
|
68
|
+
//#endregion
|
|
69
|
+
//#region src/midi.d.ts
|
|
70
|
+
/**
|
|
71
|
+
* @category MIDI
|
|
72
|
+
*/
|
|
73
|
+
declare const whiteKeys: readonly ["A", "B", "C", "D", "E", "F", "G"];
|
|
74
|
+
/**
|
|
75
|
+
* @category MIDI
|
|
76
|
+
*/
|
|
77
|
+
type WhiteKey = (typeof whiteKeys)[number];
|
|
78
|
+
/**
|
|
79
|
+
* @category MIDI
|
|
80
|
+
*/
|
|
81
|
+
declare const noteKeys: readonly ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
|
|
82
|
+
/**
|
|
83
|
+
* @category MIDI
|
|
84
|
+
*/
|
|
85
|
+
type NoteKey = (typeof noteKeys)[number];
|
|
86
|
+
/**
|
|
87
|
+
* @category MIDI
|
|
88
|
+
*/
|
|
89
|
+
declare function parseNoteName(noteName: string): {
|
|
90
|
+
letter: WhiteKey;
|
|
91
|
+
accidental: "#" | "##" | "b" | "bb" | "";
|
|
92
|
+
octave: number;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Convert noteName to noteNumber
|
|
96
|
+
* @category MIDI
|
|
97
|
+
*/
|
|
98
|
+
declare function noteNumber(noteName: string): number;
|
|
99
|
+
/**
|
|
100
|
+
* Convert noteNumber to noteName
|
|
101
|
+
* C-1 = 0
|
|
102
|
+
* G9 = 127
|
|
103
|
+
* @param noteNumber noteNumber
|
|
104
|
+
* @category MIDI
|
|
105
|
+
*/
|
|
106
|
+
declare function noteName(noteNumber: number): `${NoteKey}${number}`;
|
|
107
|
+
/**
|
|
108
|
+
* Convert noteNumber to noteKey
|
|
109
|
+
* @category MIDI
|
|
110
|
+
*/
|
|
111
|
+
declare function noteKey(noteNumber: number): NoteKey;
|
|
112
|
+
/**
|
|
113
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
114
|
+
* @category MIDI
|
|
115
|
+
*/
|
|
116
|
+
declare function isWhiteKey(note: number | string): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
119
|
+
* @category MIDI
|
|
120
|
+
*/
|
|
121
|
+
declare function isBlackKey(note: number | string): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
124
|
+
* @param detune [cent]
|
|
125
|
+
* @param a4 A4 frequency [Hz]
|
|
126
|
+
* @returns frequency [Hz]
|
|
127
|
+
* @category MIDI
|
|
128
|
+
*/
|
|
129
|
+
declare function noteToFrequency(note: number | string, detune?: number, a4?: number): number;
|
|
130
|
+
//# sourceMappingURL=midi.d.ts.map
|
|
131
|
+
//#endregion
|
|
132
|
+
//#region src/types.d.ts
|
|
133
|
+
/**
|
|
134
|
+
* Options for setting the amount of keyboard and mouse wheel changes.
|
|
135
|
+
* @category Types
|
|
136
|
+
*/
|
|
137
|
+
type InputEventOption = ['normalized' | 'raw', number];
|
|
138
|
+
//# sourceMappingURL=types.d.ts.map
|
|
139
|
+
//#endregion
|
|
140
|
+
//#region src/util.d.ts
|
|
141
|
+
type Operator = '+' | '-' | '*' | '/';
|
|
142
|
+
/**
|
|
143
|
+
* @category Utility
|
|
144
|
+
*/
|
|
145
|
+
declare function styleHelper(value: string | number): string;
|
|
146
|
+
declare function styleHelper(value: string | number, op: Operator, influencer?: number): string;
|
|
147
|
+
/**
|
|
148
|
+
* @category Utility
|
|
149
|
+
*/
|
|
150
|
+
declare function isEmpty(obj: object): boolean;
|
|
151
|
+
/**
|
|
152
|
+
* @category Utility
|
|
153
|
+
*/
|
|
154
|
+
declare function mod(n: number, m: number): number;
|
|
155
|
+
/**
|
|
156
|
+
* @category Utility
|
|
157
|
+
*/
|
|
158
|
+
declare function xor(a?: boolean, b?: boolean): boolean;
|
|
159
|
+
//#endregion
|
|
160
|
+
export { type InputEventOption, type NoteKey, type WhiteKey, clamp, dbToGain, decimalPart, degree, gainToDb, integerPart, isBlackKey, isEmpty, isWhiteKey, mapValue, mod, normalizeValue, noteKey, noteKeys, noteName, noteNumber, noteToFrequency, parseNoteName, radian, rawValue, skewWithCenterValue, stepValue, styleHelper, toFixed, whiteKeys, xor };
|
|
161
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/math.ts","../../src/midi.ts","../../src/types.ts","../../src/util.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
//#region src/math.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* clamp value between min and max
|
|
4
|
+
* @category Math
|
|
5
|
+
*/
|
|
6
|
+
declare function clamp(value: number, min: number, max: number): number;
|
|
7
|
+
/**
|
|
8
|
+
* Normalize the value from 0 to 1
|
|
9
|
+
* @category Math
|
|
10
|
+
*/
|
|
11
|
+
declare function normalizeValue(rawValue: number, min: number, max: number, skew?: number): number;
|
|
12
|
+
/**
|
|
13
|
+
* Convert normalized values back to raw values.
|
|
14
|
+
* @category Math
|
|
15
|
+
*/
|
|
16
|
+
declare function rawValue(normalizedValue: number, min: number, max: number, skew?: number): number;
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* @category Math
|
|
20
|
+
*/
|
|
21
|
+
declare function skewWithCenterValue(centerValue: number, min: number, max: number): number;
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* @category Math
|
|
25
|
+
*/
|
|
26
|
+
declare function stepValue(value: number, step: number): number;
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* @category Math
|
|
30
|
+
*/
|
|
31
|
+
declare function toFixed(x: number, fractionDigits?: number): number;
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* @category Math
|
|
35
|
+
*/
|
|
36
|
+
declare function integerPart(x: number | string): string | undefined;
|
|
37
|
+
/**
|
|
38
|
+
*
|
|
39
|
+
* @category Math
|
|
40
|
+
*/
|
|
41
|
+
declare function decimalPart(x: number | string): string | undefined;
|
|
42
|
+
/**
|
|
43
|
+
*
|
|
44
|
+
* @category Math
|
|
45
|
+
*/
|
|
46
|
+
declare function radian(degree: number): number;
|
|
47
|
+
/**
|
|
48
|
+
*
|
|
49
|
+
* @category Math
|
|
50
|
+
*/
|
|
51
|
+
declare function degree(radian: number): number;
|
|
52
|
+
/**
|
|
53
|
+
*
|
|
54
|
+
* @category Math
|
|
55
|
+
*/
|
|
56
|
+
declare function mapValue(value: number, inMin: number, inMax: number, outMin: number, outMax: number): number;
|
|
57
|
+
/**
|
|
58
|
+
*
|
|
59
|
+
* @category Math
|
|
60
|
+
*/
|
|
61
|
+
declare function dbToGain(db: number): number;
|
|
62
|
+
/**
|
|
63
|
+
*
|
|
64
|
+
* @category Math
|
|
65
|
+
*/
|
|
66
|
+
declare function gainToDb(gain: number): number;
|
|
67
|
+
//# sourceMappingURL=math.d.ts.map
|
|
68
|
+
//#endregion
|
|
69
|
+
//#region src/midi.d.ts
|
|
70
|
+
/**
|
|
71
|
+
* @category MIDI
|
|
72
|
+
*/
|
|
73
|
+
declare const whiteKeys: readonly ["A", "B", "C", "D", "E", "F", "G"];
|
|
74
|
+
/**
|
|
75
|
+
* @category MIDI
|
|
76
|
+
*/
|
|
77
|
+
type WhiteKey = (typeof whiteKeys)[number];
|
|
78
|
+
/**
|
|
79
|
+
* @category MIDI
|
|
80
|
+
*/
|
|
81
|
+
declare const noteKeys: readonly ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
|
|
82
|
+
/**
|
|
83
|
+
* @category MIDI
|
|
84
|
+
*/
|
|
85
|
+
type NoteKey = (typeof noteKeys)[number];
|
|
86
|
+
/**
|
|
87
|
+
* @category MIDI
|
|
88
|
+
*/
|
|
89
|
+
declare function parseNoteName(noteName: string): {
|
|
90
|
+
letter: WhiteKey;
|
|
91
|
+
accidental: "#" | "##" | "b" | "bb" | "";
|
|
92
|
+
octave: number;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Convert noteName to noteNumber
|
|
96
|
+
* @category MIDI
|
|
97
|
+
*/
|
|
98
|
+
declare function noteNumber(noteName: string): number;
|
|
99
|
+
/**
|
|
100
|
+
* Convert noteNumber to noteName
|
|
101
|
+
* C-1 = 0
|
|
102
|
+
* G9 = 127
|
|
103
|
+
* @param noteNumber noteNumber
|
|
104
|
+
* @category MIDI
|
|
105
|
+
*/
|
|
106
|
+
declare function noteName(noteNumber: number): `${NoteKey}${number}`;
|
|
107
|
+
/**
|
|
108
|
+
* Convert noteNumber to noteKey
|
|
109
|
+
* @category MIDI
|
|
110
|
+
*/
|
|
111
|
+
declare function noteKey(noteNumber: number): NoteKey;
|
|
112
|
+
/**
|
|
113
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
114
|
+
* @category MIDI
|
|
115
|
+
*/
|
|
116
|
+
declare function isWhiteKey(note: number | string): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
119
|
+
* @category MIDI
|
|
120
|
+
*/
|
|
121
|
+
declare function isBlackKey(note: number | string): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
124
|
+
* @param detune [cent]
|
|
125
|
+
* @param a4 A4 frequency [Hz]
|
|
126
|
+
* @returns frequency [Hz]
|
|
127
|
+
* @category MIDI
|
|
128
|
+
*/
|
|
129
|
+
declare function noteToFrequency(note: number | string, detune?: number, a4?: number): number;
|
|
130
|
+
//# sourceMappingURL=midi.d.ts.map
|
|
131
|
+
//#endregion
|
|
132
|
+
//#region src/types.d.ts
|
|
133
|
+
/**
|
|
134
|
+
* Options for setting the amount of keyboard and mouse wheel changes.
|
|
135
|
+
* @category Types
|
|
136
|
+
*/
|
|
137
|
+
type InputEventOption = ['normalized' | 'raw', number];
|
|
138
|
+
//# sourceMappingURL=types.d.ts.map
|
|
139
|
+
//#endregion
|
|
140
|
+
//#region src/util.d.ts
|
|
141
|
+
type Operator = '+' | '-' | '*' | '/';
|
|
142
|
+
/**
|
|
143
|
+
* @category Utility
|
|
144
|
+
*/
|
|
145
|
+
declare function styleHelper(value: string | number): string;
|
|
146
|
+
declare function styleHelper(value: string | number, op: Operator, influencer?: number): string;
|
|
147
|
+
/**
|
|
148
|
+
* @category Utility
|
|
149
|
+
*/
|
|
150
|
+
declare function isEmpty(obj: object): boolean;
|
|
151
|
+
/**
|
|
152
|
+
* @category Utility
|
|
153
|
+
*/
|
|
154
|
+
declare function mod(n: number, m: number): number;
|
|
155
|
+
/**
|
|
156
|
+
* @category Utility
|
|
157
|
+
*/
|
|
158
|
+
declare function xor(a?: boolean, b?: boolean): boolean;
|
|
159
|
+
//#endregion
|
|
160
|
+
export { type InputEventOption, type NoteKey, type WhiteKey, clamp, dbToGain, decimalPart, degree, gainToDb, integerPart, isBlackKey, isEmpty, isWhiteKey, mapValue, mod, normalizeValue, noteKey, noteKeys, noteName, noteNumber, noteToFrequency, parseNoteName, radian, rawValue, skewWithCenterValue, stepValue, styleHelper, toFixed, whiteKeys, xor };
|
|
161
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/math.ts","../../src/midi.ts","../../src/types.ts","../../src/util.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
//#region src/math.ts
|
|
2
|
+
/**
|
|
3
|
+
* clamp value between min and max
|
|
4
|
+
* @category Math
|
|
5
|
+
*/
|
|
6
|
+
function clamp(value, min, max) {
|
|
7
|
+
return Math.max(min, Math.min(value, max));
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Normalize the value from 0 to 1
|
|
11
|
+
* @category Math
|
|
12
|
+
*/
|
|
13
|
+
function normalizeValue(rawValue$1, min, max, skew = 1) {
|
|
14
|
+
if (min >= max) throw new RangeError("requirements: min < max");
|
|
15
|
+
const v = clamp((rawValue$1 - min) / (max - min), 0, 1);
|
|
16
|
+
return Math.pow(v, skew);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Convert normalized values back to raw values.
|
|
20
|
+
* @category Math
|
|
21
|
+
*/
|
|
22
|
+
function rawValue(normalizedValue, min, max, skew = 1) {
|
|
23
|
+
if (min >= max) throw new RangeError("requirements: min < max");
|
|
24
|
+
const v = skew == 1 ? clamp(normalizedValue, 0, 1) : Math.exp(Math.log(clamp(normalizedValue, 0, 1)) / skew);
|
|
25
|
+
return min + v * (max - min);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
*
|
|
29
|
+
* @category Math
|
|
30
|
+
*/
|
|
31
|
+
function skewWithCenterValue(centerValue, min, max) {
|
|
32
|
+
if (!(min <= centerValue && centerValue <= max)) throw new RangeError("requirements: min <= centerValue <= max");
|
|
33
|
+
return Math.log(.5) / Math.log((centerValue - min) / (max - min));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
*
|
|
37
|
+
* @category Math
|
|
38
|
+
*/
|
|
39
|
+
function stepValue(value, step) {
|
|
40
|
+
if (step <= 0) throw new RangeError("requirements: step > 0");
|
|
41
|
+
const quotient = Math.floor(value / step);
|
|
42
|
+
const decimalDigits = decimalPart(step)?.length;
|
|
43
|
+
const v = toFixed(quotient * step, decimalDigits);
|
|
44
|
+
const next = toFixed((quotient + 1) * step, decimalDigits);
|
|
45
|
+
return Math.abs(value - v) < Math.abs(value - next) ? v : next;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
*
|
|
49
|
+
* @category Math
|
|
50
|
+
*/
|
|
51
|
+
function toFixed(x, fractionDigits) {
|
|
52
|
+
return Number(x.toFixed(fractionDigits));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
*
|
|
56
|
+
* @category Math
|
|
57
|
+
*/
|
|
58
|
+
function integerPart(x) {
|
|
59
|
+
if (Number.isNaN(x)) return void 0;
|
|
60
|
+
return String(x).split(".")[0];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
*
|
|
64
|
+
* @category Math
|
|
65
|
+
*/
|
|
66
|
+
function decimalPart(x) {
|
|
67
|
+
return String(x).split(".")[1];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
*
|
|
71
|
+
* @category Math
|
|
72
|
+
*/
|
|
73
|
+
function radian(degree$1) {
|
|
74
|
+
return Math.PI * degree$1 / 180;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
*
|
|
78
|
+
* @category Math
|
|
79
|
+
*/
|
|
80
|
+
function degree(radian$1) {
|
|
81
|
+
return 180 * radian$1 / Math.PI;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
*
|
|
85
|
+
* @category Math
|
|
86
|
+
*/
|
|
87
|
+
function mapValue(value, inMin, inMax, outMin, outMax) {
|
|
88
|
+
return (value - inMin) / (inMax - inMin) * (outMax - outMin) + outMin;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
*
|
|
92
|
+
* @category Math
|
|
93
|
+
*/
|
|
94
|
+
function dbToGain(db) {
|
|
95
|
+
return Math.pow(10, db / 20);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
*
|
|
99
|
+
* @category Math
|
|
100
|
+
*/
|
|
101
|
+
function gainToDb(gain) {
|
|
102
|
+
return 20 * (Math.log(gain) / Math.LN10);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
//#endregion
|
|
106
|
+
//#region src/util.ts
|
|
107
|
+
function styleHelper(value, op, influencer) {
|
|
108
|
+
if (op && influencer) if (typeof value == "number") {
|
|
109
|
+
if (op == "+") return `${value + influencer}px`;
|
|
110
|
+
if (op == "-") return `${value - influencer}px`;
|
|
111
|
+
if (op == "*") return `${value * influencer}px`;
|
|
112
|
+
if (op == "/") return `${value / influencer}px`;
|
|
113
|
+
} else return `calc(${value}px ${op} ${influencer})`;
|
|
114
|
+
else if (typeof value == "number") return `${value}px`;
|
|
115
|
+
else return value;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* @category Utility
|
|
119
|
+
*/
|
|
120
|
+
function isEmpty(obj) {
|
|
121
|
+
return Object.keys(obj).length == 0;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* @category Utility
|
|
125
|
+
*/
|
|
126
|
+
function mod(n, m) {
|
|
127
|
+
return (n % m + m) % m;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* @category Utility
|
|
131
|
+
*/
|
|
132
|
+
function xor(a = false, b = false) {
|
|
133
|
+
return (a || b) && a != b;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
//#endregion
|
|
137
|
+
//#region src/midi.ts
|
|
138
|
+
/**
|
|
139
|
+
* @category MIDI
|
|
140
|
+
*/
|
|
141
|
+
const whiteKeys = [
|
|
142
|
+
"A",
|
|
143
|
+
"B",
|
|
144
|
+
"C",
|
|
145
|
+
"D",
|
|
146
|
+
"E",
|
|
147
|
+
"F",
|
|
148
|
+
"G"
|
|
149
|
+
];
|
|
150
|
+
/**
|
|
151
|
+
* @category MIDI
|
|
152
|
+
*/
|
|
153
|
+
const noteKeys = [
|
|
154
|
+
"C",
|
|
155
|
+
"C#",
|
|
156
|
+
"D",
|
|
157
|
+
"D#",
|
|
158
|
+
"E",
|
|
159
|
+
"F",
|
|
160
|
+
"F#",
|
|
161
|
+
"G",
|
|
162
|
+
"G#",
|
|
163
|
+
"A",
|
|
164
|
+
"A#",
|
|
165
|
+
"B"
|
|
166
|
+
];
|
|
167
|
+
/**
|
|
168
|
+
* @category MIDI
|
|
169
|
+
*/
|
|
170
|
+
function parseNoteName(noteName$1) {
|
|
171
|
+
const m = noteName$1.match(/^([a-g])(#{0,2}|b{0,2})(-?\d+)$/i);
|
|
172
|
+
if (!m) throw new Error("Invalid note name");
|
|
173
|
+
const [, letter, accidental, octave] = m;
|
|
174
|
+
return {
|
|
175
|
+
letter: letter.toLocaleUpperCase(),
|
|
176
|
+
accidental,
|
|
177
|
+
octave: Number(octave)
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Convert noteName to noteNumber
|
|
182
|
+
* @category MIDI
|
|
183
|
+
*/
|
|
184
|
+
function noteNumber(noteName$1) {
|
|
185
|
+
const { letter, accidental, octave } = parseNoteName(noteName$1);
|
|
186
|
+
const noteIndex = noteKeys.indexOf(letter.toLocaleUpperCase());
|
|
187
|
+
const accidentalValue = (accidental[0] == "b" ? -1 : 1) * accidental.length;
|
|
188
|
+
return noteIndex + 12 * (Number(octave) + 1) + accidentalValue;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Convert noteNumber to noteName
|
|
192
|
+
* C-1 = 0
|
|
193
|
+
* G9 = 127
|
|
194
|
+
* @param noteNumber noteNumber
|
|
195
|
+
* @category MIDI
|
|
196
|
+
*/
|
|
197
|
+
function noteName(noteNumber$1) {
|
|
198
|
+
const noteIndex = mod(noteNumber$1, 12);
|
|
199
|
+
const octave = Math.floor(noteNumber$1 / 12) - 1;
|
|
200
|
+
return `${noteKeys[noteIndex]}${octave}`;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Convert noteNumber to noteKey
|
|
204
|
+
* @category MIDI
|
|
205
|
+
*/
|
|
206
|
+
function noteKey(noteNumber$1) {
|
|
207
|
+
return noteKeys[mod(noteNumber$1, 12)];
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
211
|
+
* @category MIDI
|
|
212
|
+
*/
|
|
213
|
+
function isWhiteKey(note) {
|
|
214
|
+
const n = typeof note == "string" ? noteNumber(note) : note;
|
|
215
|
+
return mod(n, 12) == 0 || mod(n, 12) == 2 || mod(n, 12) == 4 || mod(n, 12) == 5 || mod(n, 12) == 7 || mod(n, 12) == 9 || mod(n, 12) == 11;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
219
|
+
* @category MIDI
|
|
220
|
+
*/
|
|
221
|
+
function isBlackKey(note) {
|
|
222
|
+
return !isWhiteKey(note);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'
|
|
226
|
+
* @param detune [cent]
|
|
227
|
+
* @param a4 A4 frequency [Hz]
|
|
228
|
+
* @returns frequency [Hz]
|
|
229
|
+
* @category MIDI
|
|
230
|
+
*/
|
|
231
|
+
function noteToFrequency(note, detune = 0, a4 = 440) {
|
|
232
|
+
const n = typeof note == "string" ? noteNumber(note) : note;
|
|
233
|
+
return a4 / 32 * 2 ** ((n - 9 + detune / 100) / 12);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
//#endregion
|
|
237
|
+
export { clamp, dbToGain, decimalPart, degree, gainToDb, integerPart, isBlackKey, isEmpty, isWhiteKey, mapValue, mod, normalizeValue, noteKey, noteKeys, noteName, noteNumber, noteToFrequency, parseNoteName, radian, rawValue, skewWithCenterValue, stepValue, styleHelper, toFixed, whiteKeys, xor };
|
|
238
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["value: number","min: number","max: number","rawValue: number","rawValue","normalizedValue: number","centerValue: number","step: number","x: number","fractionDigits?: number","x: number | string","degree: number","degree","radian: number","radian","inMin: number","inMax: number","outMin: number","outMax: number","db: number","gain: number","value: string | number","op?: Operator","influencer?: number","obj: object","n: number","m: number","noteName: string","noteName","noteNumber: number","noteNumber","note: number | string"],"sources":["../src/math.ts","../src/util.ts","../src/midi.ts"],"sourcesContent":["/**\n * clamp value between min and max\n * @category Math\n */\nexport function clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(value, max))\n}\n\n/**\n * Normalize the value from 0 to 1\n * @category Math\n */\nexport function normalizeValue(\n rawValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v = clamp((rawValue - min) / (max - min), 0, 1)\n return Math.pow(v, skew)\n}\n\n/**\n * Convert normalized values back to raw values.\n * @category Math\n */\nexport function rawValue(\n normalizedValue: number,\n min: number,\n max: number,\n skew = 1,\n) {\n if (min >= max) throw new RangeError('requirements: min < max')\n const v =\n skew == 1\n ? clamp(normalizedValue, 0, 1)\n : Math.exp(Math.log(clamp(normalizedValue, 0, 1)) / skew)\n return min + v * (max - min)\n}\n\n/**\n *\n * @category Math\n */\nexport function skewWithCenterValue(\n centerValue: number,\n min: number,\n max: number,\n) {\n if (!(min <= centerValue && centerValue <= max))\n throw new RangeError('requirements: min <= centerValue <= max')\n return Math.log(0.5) / Math.log((centerValue - min) / (max - min))\n}\n\n/**\n *\n * @category Math\n */\nexport function stepValue(value: number, step: number) {\n if (step <= 0) throw new RangeError('requirements: step > 0')\n const quotient = Math.floor(value / step)\n const decimalDigits = decimalPart(step)?.length\n const v = toFixed(quotient * step, decimalDigits)\n const next = toFixed((quotient + 1) * step, decimalDigits)\n return Math.abs(value - v) < Math.abs(value - next) ? v : next\n}\n\n/**\n *\n * @category Math\n */\nexport function toFixed(x: number, fractionDigits?: number) {\n return Number(x.toFixed(fractionDigits))\n}\n\n/**\n *\n * @category Math\n */\nexport function integerPart(x: number | string): string | undefined {\n if (Number.isNaN(x)) {\n return undefined\n }\n return String(x).split('.')[0]\n}\n\n/**\n *\n * @category Math\n */\nexport function decimalPart(x: number | string): string | undefined {\n return String(x).split('.')[1]\n}\n\n/**\n *\n * @category Math\n */\nexport function radian(degree: number) {\n return (Math.PI * degree) / 180\n}\n\n/**\n *\n * @category Math\n */\nexport function degree(radian: number) {\n return (180 * radian) / Math.PI\n}\n\n/**\n *\n * @category Math\n */\nexport function mapValue(\n value: number,\n inMin: number,\n inMax: number,\n outMin: number,\n outMax: number,\n) {\n return ((value - inMin) / (inMax - inMin)) * (outMax - outMin) + outMin\n}\n\n/**\n *\n * @category Math\n */\nexport function dbToGain(db: number) {\n return Math.pow(10, db / 20)\n}\n\n/**\n *\n * @category Math\n */\nexport function gainToDb(gain: number) {\n return 20 * (Math.log(gain) / Math.LN10)\n}\n","type Operator = '+' | '-' | '*' | '/'\n\n/**\n * @category Utility\n */\nexport function styleHelper(value: string | number): string\nexport function styleHelper(\n value: string | number,\n op: Operator,\n influencer?: number,\n): string\nexport function styleHelper(\n value: string | number,\n op?: Operator,\n influencer?: number,\n) {\n if (op && influencer) {\n if (typeof value == 'number') {\n if (op == '+') return `${value + influencer}px`\n if (op == '-') return `${value - influencer}px`\n if (op == '*') return `${value * influencer}px`\n if (op == '/') return `${value / influencer}px`\n } else {\n return `calc(${value}px ${op} ${influencer})`\n }\n } else {\n if (typeof value == 'number') {\n return `${value}px`\n } else {\n return value\n }\n }\n}\n\n/**\n * @category Utility\n */\nexport function isEmpty(obj: object) {\n return Object.keys(obj).length == 0\n}\n\n/**\n * @category Utility\n */\nexport function mod(n: number, m: number) {\n return ((n % m) + m) % m\n}\n\n/**\n * @category Utility\n */\nexport function xor(a = false, b = false) {\n return (a || b) && a != b\n}\n","import { mod } from './util'\n\n/**\n * @category MIDI\n */\nexport const whiteKeys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] as const\n\n/**\n * @category MIDI\n */\nexport type WhiteKey = (typeof whiteKeys)[number]\n\n/**\n * @category MIDI\n */\nexport const noteKeys = [\n 'C',\n 'C#',\n 'D',\n 'D#',\n 'E',\n 'F',\n 'F#',\n 'G',\n 'G#',\n 'A',\n 'A#',\n 'B',\n] as const\n\n/**\n * @category MIDI\n */\nexport type NoteKey = (typeof noteKeys)[number]\n\n/**\n * @category MIDI\n */\nexport function parseNoteName(noteName: string) {\n const m = noteName.match(/^([a-g])(#{0,2}|b{0,2})(-?\\d+)$/i)\n if (!m) throw new Error('Invalid note name')\n const [, letter, accidental, octave] = m\n return {\n letter: letter.toLocaleUpperCase() as WhiteKey,\n accidental: accidental as '#' | '##' | 'b' | 'bb' | '',\n octave: Number(octave),\n }\n}\n\n/**\n * Convert noteName to noteNumber\n * @category MIDI\n */\nexport function noteNumber(noteName: string) {\n const { letter, accidental, octave } = parseNoteName(noteName)\n const noteIndex = noteKeys.indexOf(letter.toLocaleUpperCase() as NoteKey)\n const accidentalValue = (accidental[0] == 'b' ? -1 : 1) * accidental.length\n return noteIndex + 12 * (Number(octave) + 1) + accidentalValue\n}\n\n/**\n * Convert noteNumber to noteName\n * C-1 = 0\n * G9 = 127\n * @param noteNumber noteNumber\n * @category MIDI\n */\nexport function noteName(noteNumber: number): `${NoteKey}${number}` {\n const noteIndex = mod(noteNumber, 12)\n const octave = Math.floor(noteNumber / 12) - 1\n return `${noteKeys[noteIndex]}${octave}`\n}\n\n/**\n * Convert noteNumber to noteKey\n * @category MIDI\n */\nexport function noteKey(noteNumber: number): NoteKey {\n return noteKeys[mod(noteNumber, 12)]\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @category MIDI\n */\nexport function isWhiteKey(note: number | string) {\n const n = typeof note == 'string' ? noteNumber(note) : note\n return (\n mod(n, 12) == 0 ||\n mod(n, 12) == 2 ||\n mod(n, 12) == 4 ||\n mod(n, 12) == 5 ||\n mod(n, 12) == 7 ||\n mod(n, 12) == 9 ||\n mod(n, 12) == 11\n )\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @category MIDI\n */\nexport function isBlackKey(note: number | string) {\n return !isWhiteKey(note)\n}\n\n/**\n * @param note noteNumber: 0 ~ 127 or noteName e.g. 'C3'\n * @param detune [cent]\n * @param a4 A4 frequency [Hz]\n * @returns frequency [Hz]\n * @category MIDI\n */\nexport function noteToFrequency(note: number | string, detune = 0, a4 = 440) {\n const n = typeof note == 'string' ? noteNumber(note) : note\n return (a4 / 32) * 2 ** ((n - 9 + detune / 100) / 12)\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tremolo-ui/functions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "functions used in @tremolo-ui/react",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"scripts": {
|
|
8
8
|
"test": "jest",
|
|
9
|
-
"typecheck": "tsc",
|
|
10
|
-
"build:package": "tsc &&
|
|
11
|
-
"watch:package": "
|
|
9
|
+
"typecheck": "tsc --noEmit",
|
|
10
|
+
"build:package": "tsc && tsdown",
|
|
11
|
+
"watch:package": "tsdown --watch",
|
|
12
12
|
"clean": "npm run clean:build",
|
|
13
|
-
"clean:build": "rimraf ./dist
|
|
13
|
+
"clean:build": "rimraf ./dist",
|
|
14
14
|
"lint": "eslint --fix --ext .ts,.tsx .",
|
|
15
15
|
"format": "prettier --write ."
|
|
16
16
|
},
|
|
@@ -41,32 +41,32 @@
|
|
|
41
41
|
"exports": {
|
|
42
42
|
".": {
|
|
43
43
|
"require": {
|
|
44
|
-
"default": "./dist/
|
|
45
|
-
"types": "./dist/
|
|
44
|
+
"default": "./dist/index.cjs",
|
|
45
|
+
"types": "./dist/index.d.cts"
|
|
46
46
|
},
|
|
47
47
|
"import": {
|
|
48
|
-
"default": "./dist/
|
|
49
|
-
"types": "./dist/
|
|
48
|
+
"default": "./dist/index.js",
|
|
49
|
+
"types": "./dist/index.d.ts"
|
|
50
50
|
}
|
|
51
51
|
},
|
|
52
52
|
"./NumberInput": {
|
|
53
53
|
"require": {
|
|
54
|
-
"default": "./dist/
|
|
55
|
-
"types": "./dist/
|
|
54
|
+
"default": "./dist/NumberInput/type.cjs",
|
|
55
|
+
"types": "./dist/types/NumberInput/type.d.cts"
|
|
56
56
|
},
|
|
57
57
|
"import": {
|
|
58
|
-
"default": "./dist/
|
|
59
|
-
"types": "./dist/
|
|
58
|
+
"default": "./dist/NumberInput/type.js",
|
|
59
|
+
"types": "./dist/types/NumberInput/type.d.ts"
|
|
60
60
|
}
|
|
61
61
|
},
|
|
62
62
|
"./Slider": {
|
|
63
63
|
"require": {
|
|
64
|
-
"default": "./dist/
|
|
65
|
-
"types": "./dist/
|
|
64
|
+
"default": "./dist/Slider/type.cjs",
|
|
65
|
+
"types": "./dist/types/Slider/type.d.cts"
|
|
66
66
|
},
|
|
67
67
|
"import": {
|
|
68
|
-
"default": "./dist/
|
|
69
|
-
"types": "./dist/
|
|
68
|
+
"default": "./dist/Slider/type.js",
|
|
69
|
+
"types": "./dist/types/Slider/type.d.ts"
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
}
|