zds-pickers 4.0.5 → 4.0.6
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.es.js +3 -1
- package/dist/types/index.d.ts +266 -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/main.ts +34 -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.app.json +26 -0
- package/tsconfig.json +34 -0
- package/tsconfig.node.json +24 -0
- package/vite.config.ts +45 -0
- package/dist/index.d.ts +0 -244
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react'
|
|
2
|
+
// biome-ignore lint/correctness/noUnusedImports: <explanation>
|
|
3
|
+
import React from 'react'
|
|
4
|
+
import type * as Soundfont from 'soundfont-player'
|
|
5
|
+
import { getMapping } from 'zds-mappings'
|
|
6
|
+
import { Statuses, statusOptions } from '../lib/midi/export'
|
|
7
|
+
import OctavePlayer from '../lib/other/OctavePlayer'
|
|
8
|
+
import CCPicker from '../lib/pickers/CCPicker'
|
|
9
|
+
import ChannelMappingPicker from '../lib/pickers/ChannelMappingPicker'
|
|
10
|
+
import ChannelPicker from '../lib/pickers/ChannelPicker'
|
|
11
|
+
import Knob from '../lib/pickers/Knob'
|
|
12
|
+
import KnobPicker from '../lib/pickers/KnobPicker'
|
|
13
|
+
import LatchPicker from '../lib/pickers/LatchPicker'
|
|
14
|
+
import MappingPicker from '../lib/pickers/MappingPicker'
|
|
15
|
+
import NotePicker from '../lib/pickers/NotePicker'
|
|
16
|
+
import PianoPicker from '../lib/pickers/PianoPicker'
|
|
17
|
+
import PolarityPicker from '../lib/pickers/PolarityPicker'
|
|
18
|
+
import ResponseCurve from '../lib/pickers/ResponseCurve'
|
|
19
|
+
import ResponseCurvePicker from '../lib/pickers/ResponseCurvePicker'
|
|
20
|
+
import StatusPicker from '../lib/pickers/StatusPicker'
|
|
21
|
+
import ValuePicker from '../lib/pickers/ValuePicker'
|
|
22
|
+
|
|
23
|
+
const meta: Meta = {
|
|
24
|
+
title: 'Pickers',
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const gmMapping = getMapping('General MIDI')
|
|
28
|
+
|
|
29
|
+
const CCPickerStory: StoryObj<typeof CCPicker> = {
|
|
30
|
+
render: args => <CCPicker {...args} />,
|
|
31
|
+
args: {
|
|
32
|
+
disabled: false,
|
|
33
|
+
label: 'CC #',
|
|
34
|
+
shrinkLabel: false,
|
|
35
|
+
value: 7,
|
|
36
|
+
},
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const ChannelPickerStory: StoryObj<typeof ChannelPicker> = {
|
|
40
|
+
render: args => <ChannelPicker {...args} />,
|
|
41
|
+
args: {
|
|
42
|
+
disabled: false,
|
|
43
|
+
label: 'Channel',
|
|
44
|
+
shrinkLabel: false,
|
|
45
|
+
value: 9,
|
|
46
|
+
},
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const ChannelMappingPickerStory: StoryObj<typeof ChannelMappingPicker> = {
|
|
50
|
+
render: args => <ChannelMappingPicker {...args} />,
|
|
51
|
+
args: {
|
|
52
|
+
channels: [
|
|
53
|
+
'',
|
|
54
|
+
'No Mapping',
|
|
55
|
+
'',
|
|
56
|
+
'Alesis DM Pro',
|
|
57
|
+
'',
|
|
58
|
+
'',
|
|
59
|
+
'',
|
|
60
|
+
'BFD3',
|
|
61
|
+
'',
|
|
62
|
+
'',
|
|
63
|
+
'Roland TD-20',
|
|
64
|
+
'Roland TD-30 Perc 1 (Latin)',
|
|
65
|
+
'',
|
|
66
|
+
'',
|
|
67
|
+
'',
|
|
68
|
+
'',
|
|
69
|
+
].map((label, value) => ({ label, value })),
|
|
70
|
+
disabled: false,
|
|
71
|
+
label: 'Channel',
|
|
72
|
+
shrinkLabel: false,
|
|
73
|
+
value: 7,
|
|
74
|
+
},
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const KnobStory: StoryObj<typeof Knob> = {
|
|
78
|
+
render: args => <Knob {...args} />,
|
|
79
|
+
args: {
|
|
80
|
+
disabled: false,
|
|
81
|
+
max: 127,
|
|
82
|
+
min: 0,
|
|
83
|
+
value: 45,
|
|
84
|
+
wheelEnabled: false,
|
|
85
|
+
},
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const KnobPickerStory: StoryObj<typeof KnobPicker> = {
|
|
89
|
+
render: args => <KnobPicker {...args} />,
|
|
90
|
+
args: {
|
|
91
|
+
disabled: false,
|
|
92
|
+
includePicker: true,
|
|
93
|
+
label: 'Sensitivity',
|
|
94
|
+
max: 127,
|
|
95
|
+
min: 0,
|
|
96
|
+
shrinkLabel: false,
|
|
97
|
+
// size: 35,
|
|
98
|
+
value: 87,
|
|
99
|
+
wheelEnabled: false,
|
|
100
|
+
},
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const LatchPickerStory: StoryObj<typeof LatchPicker> = {
|
|
104
|
+
render: args => <LatchPicker {...args} />,
|
|
105
|
+
args: {
|
|
106
|
+
disabled: false,
|
|
107
|
+
label: 'Mode',
|
|
108
|
+
shrinkLabel: false,
|
|
109
|
+
value: 0,
|
|
110
|
+
},
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const MappingPickerStory: StoryObj<typeof MappingPicker> = {
|
|
114
|
+
render: args => <MappingPicker {...args} />,
|
|
115
|
+
args: {
|
|
116
|
+
allowClearing: true,
|
|
117
|
+
disabled: false,
|
|
118
|
+
label: 'Mapping',
|
|
119
|
+
preserveMenuWidth: false,
|
|
120
|
+
shrinkLabel: false,
|
|
121
|
+
value: 'EZDrummer',
|
|
122
|
+
},
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const NotePickerStory1: StoryObj<typeof NotePicker> = {
|
|
126
|
+
render: args => <NotePicker {...args} />,
|
|
127
|
+
args: {
|
|
128
|
+
channel: 0,
|
|
129
|
+
disabled: false,
|
|
130
|
+
isMelodicMode: false,
|
|
131
|
+
label: 'Note #',
|
|
132
|
+
mapping: gmMapping,
|
|
133
|
+
shrinkLabel: false,
|
|
134
|
+
value: 38,
|
|
135
|
+
},
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const NotePickerStory2: StoryObj<typeof NotePicker> = {
|
|
139
|
+
render: args => <NotePicker {...args} />,
|
|
140
|
+
args: {
|
|
141
|
+
channel: 0,
|
|
142
|
+
disabled: false,
|
|
143
|
+
isMelodicMode: false,
|
|
144
|
+
label: 'No mapping',
|
|
145
|
+
shrinkLabel: false,
|
|
146
|
+
value: 38,
|
|
147
|
+
},
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const NotePickerStory3: StoryObj<typeof NotePicker> = {
|
|
151
|
+
render: args => <NotePicker {...args} />,
|
|
152
|
+
args: {
|
|
153
|
+
channel: 0,
|
|
154
|
+
disabled: false,
|
|
155
|
+
isMelodicMode: false,
|
|
156
|
+
label: 'Action button',
|
|
157
|
+
mapping: gmMapping,
|
|
158
|
+
// selectProps: {
|
|
159
|
+
// actionButton: (
|
|
160
|
+
// <button
|
|
161
|
+
// onClick={e => {
|
|
162
|
+
// window.alert('click')
|
|
163
|
+
// }}>
|
|
164
|
+
// ?
|
|
165
|
+
// </button>
|
|
166
|
+
// ),
|
|
167
|
+
// },
|
|
168
|
+
shrinkLabel: false,
|
|
169
|
+
value: 38,
|
|
170
|
+
},
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
const OctavePlayerStory: StoryObj<typeof OctavePlayer> = {
|
|
174
|
+
render: args => <OctavePlayer {...args} />,
|
|
175
|
+
args: {
|
|
176
|
+
instrumentName: {
|
|
177
|
+
control: { type: 'select' },
|
|
178
|
+
options: [undefined, 'acoustic_grand_piano'],
|
|
179
|
+
} as unknown as Soundfont.InstrumentName,
|
|
180
|
+
height: 100,
|
|
181
|
+
width: 200,
|
|
182
|
+
octave: 4,
|
|
183
|
+
},
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// # NotePicker
|
|
187
|
+
// <Canvas withToolbar>
|
|
188
|
+
// <Story
|
|
189
|
+
// height={120}
|
|
190
|
+
// name="NotePicker"
|
|
191
|
+
// >
|
|
192
|
+
// <NotePicker
|
|
193
|
+
// channel={number('channel', 0, 'NotePicker')}
|
|
194
|
+
// disabled={boolean('disabled', false, 'NotePicker')}
|
|
195
|
+
// isMelodicMode={boolean('isMelodicMode', false, 'NotePicker')}
|
|
196
|
+
// label={text('label', 'Note #', 'NotePicker')}
|
|
197
|
+
// mapping={gmMapping}
|
|
198
|
+
// onChange={action('handleChange')}
|
|
199
|
+
// shrinkLabel={boolean('shrinkLabel', false, 'NotePicker')}
|
|
200
|
+
// value={number('value', 38, {}, 'NotePicker')}
|
|
201
|
+
// />
|
|
202
|
+
// <br />
|
|
203
|
+
// <NotePicker
|
|
204
|
+
// channel={number('channel', 0, 'NotePicker2')}
|
|
205
|
+
// disabled={boolean('disabled', false, 'NotePicker2')}
|
|
206
|
+
// isMelodicMode={boolean('isMelodicMode', false, 'NotePicker2')}
|
|
207
|
+
// label="No mapping"
|
|
208
|
+
// onChange={action('handleChange2')}
|
|
209
|
+
// shrinkLabel={boolean('shrinkLabel', false, 'NotePicker')}
|
|
210
|
+
// value={number('value', 38, {}, 'NotePicker2')}
|
|
211
|
+
// />
|
|
212
|
+
// <br />
|
|
213
|
+
// <NotePicker
|
|
214
|
+
// channel={number('channel', 0, 'NotePicker3')}
|
|
215
|
+
// disabled={boolean('disabled', false, 'NotePicker3')}
|
|
216
|
+
// isMelodicMode={boolean('isMelodicMode', false, 'NotePicker3')}
|
|
217
|
+
// label="Action button"
|
|
218
|
+
// mapping={gmMapping}
|
|
219
|
+
// onChange={action('handleChange3')}
|
|
220
|
+
// selectProps={{actionButton:<button onClick={e=>{
|
|
221
|
+
// console.log('click')
|
|
222
|
+
// }}>?</button>}}
|
|
223
|
+
// shrinkLabel={boolean('shrinkLabel', false, 'NotePicker')}
|
|
224
|
+
// value={number('value', 38, {}, 'NotePicker3')}
|
|
225
|
+
// />
|
|
226
|
+
// </Story>
|
|
227
|
+
// </Canvas>
|
|
228
|
+
|
|
229
|
+
const PianoPickerStory: StoryObj<typeof PianoPicker> = {
|
|
230
|
+
render: args => <PianoPicker {...args} />,
|
|
231
|
+
args: {
|
|
232
|
+
instrumentName: 'acoustic_grand_piano',
|
|
233
|
+
height: 100,
|
|
234
|
+
width: 1000,
|
|
235
|
+
},
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
const PolarityPickerStory: StoryObj<typeof PolarityPicker> = {
|
|
239
|
+
render: args => <PolarityPicker {...args} />,
|
|
240
|
+
args: {
|
|
241
|
+
disabled: false,
|
|
242
|
+
label: 'Polarity',
|
|
243
|
+
labelOff: 'Normally Off',
|
|
244
|
+
labelOn: 'Normally On',
|
|
245
|
+
shrinkLabel: false,
|
|
246
|
+
value: 0,
|
|
247
|
+
},
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
const ResponseCurveStory: StoryObj<typeof ResponseCurve> = {
|
|
251
|
+
render: args => <ResponseCurve {...args} />,
|
|
252
|
+
args: {
|
|
253
|
+
disabled: false,
|
|
254
|
+
inverted: false,
|
|
255
|
+
value: 0,
|
|
256
|
+
},
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
const ResponseCurvePickerStory: StoryObj<typeof ResponseCurvePicker> = {
|
|
260
|
+
render: args => <ResponseCurvePicker {...args} />,
|
|
261
|
+
args: {
|
|
262
|
+
disabled: false,
|
|
263
|
+
inverted: false,
|
|
264
|
+
label: 'Response',
|
|
265
|
+
shrinkLabel: false,
|
|
266
|
+
value: 0,
|
|
267
|
+
},
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
const StatusPickerStory: StoryObj<typeof StatusPicker> = {
|
|
271
|
+
render: args => <StatusPicker {...args} />,
|
|
272
|
+
args: {
|
|
273
|
+
disabled: false,
|
|
274
|
+
label: 'Status Msg',
|
|
275
|
+
shrinkLabel: false,
|
|
276
|
+
statuses: statusOptions,
|
|
277
|
+
value: Statuses.noteOn,
|
|
278
|
+
},
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
const ValuePickerStory: StoryObj<typeof ValuePicker> = {
|
|
282
|
+
render: args => <ValuePicker {...args} />,
|
|
283
|
+
args: {
|
|
284
|
+
disabled: false,
|
|
285
|
+
highToLow: false,
|
|
286
|
+
label: 'Value',
|
|
287
|
+
max: 127,
|
|
288
|
+
min: 0,
|
|
289
|
+
shrinkLabel: false,
|
|
290
|
+
},
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
export {
|
|
294
|
+
ChannelPickerStory as ChannelPicker,
|
|
295
|
+
ChannelMappingPickerStory as ChannelMappingPicker,
|
|
296
|
+
CCPickerStory as ContinuousChangePicker,
|
|
297
|
+
KnobStory as Knob,
|
|
298
|
+
KnobPickerStory as KnobPicker,
|
|
299
|
+
LatchPickerStory as LatchPicker,
|
|
300
|
+
MappingPickerStory as MappingPicker,
|
|
301
|
+
NotePickerStory1 as NotePickerSimple,
|
|
302
|
+
NotePickerStory2 as NotePickerNoMapping,
|
|
303
|
+
NotePickerStory3 as NotePickerActionButton,
|
|
304
|
+
OctavePlayerStory as OctavePlayer,
|
|
305
|
+
PianoPickerStory as PianoPicker,
|
|
306
|
+
PolarityPickerStory as PolarityPicker,
|
|
307
|
+
ResponseCurveStory as ResponseCurve,
|
|
308
|
+
ResponseCurvePickerStory as ResponseCurvePicker,
|
|
309
|
+
StatusPickerStory as StatusPicker,
|
|
310
|
+
ValuePickerStory as ValuePicker,
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export default meta
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
|
|
4
|
+
"target": "ES2020",
|
|
5
|
+
"useDefineForClassFields": true,
|
|
6
|
+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
7
|
+
"module": "ESNext",
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
|
|
10
|
+
/* Bundler mode */
|
|
11
|
+
"moduleResolution": "bundler",
|
|
12
|
+
"allowImportingTsExtensions": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"moduleDetection": "force",
|
|
15
|
+
"noEmit": true,
|
|
16
|
+
"jsx": "react-jsx",
|
|
17
|
+
|
|
18
|
+
/* Linting */
|
|
19
|
+
"strict": true,
|
|
20
|
+
"noUnusedLocals": true,
|
|
21
|
+
"noUnusedParameters": true,
|
|
22
|
+
"noFallthroughCasesInSwitch": true,
|
|
23
|
+
"noUncheckedSideEffectImports": true
|
|
24
|
+
},
|
|
25
|
+
"include": ["src"]
|
|
26
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"baseUrl": ".",
|
|
4
|
+
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
|
|
5
|
+
"target": "ES2020",
|
|
6
|
+
"useDefineForClassFields": true,
|
|
7
|
+
"lib": ["ES2021", "DOM", "DOM.Iterable"],
|
|
8
|
+
"module": "ESNext",
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
|
|
11
|
+
/* output */
|
|
12
|
+
"declaration": true,
|
|
13
|
+
"declarationDir": "./dist/types",
|
|
14
|
+
"emitDeclarationOnly": false,
|
|
15
|
+
"outDir": "./dist",
|
|
16
|
+
|
|
17
|
+
/* Bundler mode */
|
|
18
|
+
"moduleResolution": "Bundler",
|
|
19
|
+
"isolatedModules": true,
|
|
20
|
+
"moduleDetection": "force",
|
|
21
|
+
"jsx": "react-jsx",
|
|
22
|
+
|
|
23
|
+
/* Linting */
|
|
24
|
+
"strict": true,
|
|
25
|
+
"noUnusedLocals": true,
|
|
26
|
+
"noUnusedParameters": true,
|
|
27
|
+
"noFallthroughCasesInSwitch": true,
|
|
28
|
+
"noUncheckedSideEffectImports": true,
|
|
29
|
+
|
|
30
|
+
"paths": {}
|
|
31
|
+
},
|
|
32
|
+
"include": ["lib"],
|
|
33
|
+
"exclude": ["node_modules", "**/*.spec.ts", "**/*.spec.tsx", "stories"]
|
|
34
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
|
4
|
+
"target": "ES2022",
|
|
5
|
+
"lib": ["ES2023"],
|
|
6
|
+
"module": "ESNext",
|
|
7
|
+
"skipLibCheck": true,
|
|
8
|
+
|
|
9
|
+
/* Bundler mode */
|
|
10
|
+
"moduleResolution": "bundler",
|
|
11
|
+
"allowImportingTsExtensions": true,
|
|
12
|
+
"isolatedModules": true,
|
|
13
|
+
"moduleDetection": "force",
|
|
14
|
+
"noEmit": true,
|
|
15
|
+
|
|
16
|
+
/* Linting */
|
|
17
|
+
"strict": true,
|
|
18
|
+
"noUnusedLocals": true,
|
|
19
|
+
"noUnusedParameters": true,
|
|
20
|
+
"noFallthroughCasesInSwitch": true,
|
|
21
|
+
"noUncheckedSideEffectImports": true
|
|
22
|
+
},
|
|
23
|
+
"include": ["vite.config.ts"]
|
|
24
|
+
}
|
package/vite.config.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { resolve } from 'node:path'
|
|
2
|
+
import react from '@vitejs/plugin-react-swc'
|
|
3
|
+
import { defineConfig } from 'vite'
|
|
4
|
+
import dts from 'vite-plugin-dts'
|
|
5
|
+
|
|
6
|
+
export default defineConfig({
|
|
7
|
+
plugins: [
|
|
8
|
+
react(),
|
|
9
|
+
dts({
|
|
10
|
+
include: ['lib'],
|
|
11
|
+
rollupTypes: true,
|
|
12
|
+
entryRoot: 'lib',
|
|
13
|
+
outDir: 'dist/types',
|
|
14
|
+
}),
|
|
15
|
+
],
|
|
16
|
+
build: {
|
|
17
|
+
lib: {
|
|
18
|
+
entry: resolve(__dirname, 'lib/main'),
|
|
19
|
+
name: 'zds-pickers',
|
|
20
|
+
formats: ['es', 'cjs'],
|
|
21
|
+
fileName: format => `index.${format}.js`,
|
|
22
|
+
},
|
|
23
|
+
sourcemap: false,
|
|
24
|
+
rollupOptions: {
|
|
25
|
+
external: [
|
|
26
|
+
'react',
|
|
27
|
+
'react-dom',
|
|
28
|
+
'react/jsx-runtime',
|
|
29
|
+
'react-select',
|
|
30
|
+
'd3-drag',
|
|
31
|
+
'd3-scale',
|
|
32
|
+
'd3-selection',
|
|
33
|
+
],
|
|
34
|
+
output: {
|
|
35
|
+
globals: {
|
|
36
|
+
react: 'React',
|
|
37
|
+
'react-dom': 'ReactDOM',
|
|
38
|
+
'react-select': 'ReactSelect',
|
|
39
|
+
},
|
|
40
|
+
preserveModules: false,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
minify: true,
|
|
44
|
+
},
|
|
45
|
+
})
|
package/dist/index.d.ts
DELETED
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
import { default as default_2 } from 'soundfont-player';
|
|
2
|
-
import { ForwardRefExoticComponent } from 'react';
|
|
3
|
-
import { GroupBase } from 'react-select';
|
|
4
|
-
import { JSX as JSX_2 } from 'react/jsx-runtime';
|
|
5
|
-
import { JSX as JSX_3 } from 'react';
|
|
6
|
-
import { JSXElementConstructor } from 'react';
|
|
7
|
-
import { Mapping } from 'zds-mappings';
|
|
8
|
-
import { ReactElement } from 'react';
|
|
9
|
-
import { ReactNode } from 'react';
|
|
10
|
-
import { RefAttributes } from 'react';
|
|
11
|
-
import { SelectInstance } from 'react-select';
|
|
12
|
-
|
|
13
|
-
export declare const CCPicker: ForwardRefExoticComponent<CCPickerProps & RefAttributes<SelectInstance<Option_2<number>, false, GroupBase<Option_2<number>>>>>;
|
|
14
|
-
|
|
15
|
-
declare type CCPickerProps = SelectProps<number>;
|
|
16
|
-
|
|
17
|
-
export declare const ccValues: Option_2<number>[];
|
|
18
|
-
|
|
19
|
-
export declare const ChannelMappingPicker: ForwardRefExoticComponent<ChannelMappingPickerProps & RefAttributes<SelectInstance<Option_2<InternalValue>, false, GroupBase<Option_2<InternalValue>>>>>;
|
|
20
|
-
|
|
21
|
-
declare interface ChannelMappingPickerProps extends SelectProps<InternalValue> {
|
|
22
|
-
channels: Option_2<number>[];
|
|
23
|
-
className?: string;
|
|
24
|
-
filterOptions?: (candidate: Option_2<InternalValue>, inputValue: string) => boolean;
|
|
25
|
-
value: number;
|
|
26
|
-
onChange: (value: InternalValue) => void;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export declare const ChannelPicker: ForwardRefExoticComponent<ChannelPickerProps & RefAttributes<SelectInstance<Option_2<number>, false, GroupBase<Option_2<number>>>>>;
|
|
30
|
-
|
|
31
|
-
declare type ChannelPickerProps = SelectProps<number>;
|
|
32
|
-
|
|
33
|
-
export declare const combineStatusWithChannel: (channel: number, status: Status_2) => number;
|
|
34
|
-
|
|
35
|
-
export declare const extractStatusAndChannel: (status: number) => {
|
|
36
|
-
status: Status_2;
|
|
37
|
-
channel: number;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
export declare const getStatusLabel: (val: Status_2) => string | number | true | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode>;
|
|
41
|
-
|
|
42
|
-
declare type InternalValue = number | 'separator';
|
|
43
|
-
|
|
44
|
-
export declare const Knob: (props: KnobProps) => JSX_2.Element;
|
|
45
|
-
|
|
46
|
-
export declare const KnobPicker: ForwardRefExoticComponent<SelectProps<number> & {
|
|
47
|
-
highToLow?: boolean;
|
|
48
|
-
includeLabel?: boolean;
|
|
49
|
-
includePicker?: boolean;
|
|
50
|
-
knobProps?: Partial<KnobPickerProps>;
|
|
51
|
-
max?: number;
|
|
52
|
-
min?: number;
|
|
53
|
-
wheelEnabled?: boolean;
|
|
54
|
-
wheelSensitivity?: number;
|
|
55
|
-
value: number;
|
|
56
|
-
} & RefAttributes<SelectInstance<Option_2<number>, false, GroupBase<Option_2<number>>>>>;
|
|
57
|
-
|
|
58
|
-
declare type KnobPickerProps = SelectProps<number> & {
|
|
59
|
-
highToLow?: boolean;
|
|
60
|
-
includeLabel?: boolean;
|
|
61
|
-
includePicker?: boolean;
|
|
62
|
-
knobProps?: Partial<KnobPickerProps>;
|
|
63
|
-
max?: number;
|
|
64
|
-
min?: number;
|
|
65
|
-
wheelEnabled?: boolean;
|
|
66
|
-
wheelSensitivity?: number;
|
|
67
|
-
value: number;
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
declare type KnobProps = {
|
|
71
|
-
disabled?: boolean;
|
|
72
|
-
max?: number;
|
|
73
|
-
min?: number;
|
|
74
|
-
onChange?: (value: number) => void;
|
|
75
|
-
value?: number;
|
|
76
|
-
wheelEnabled?: boolean;
|
|
77
|
-
wheelSensitivity?: number;
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
export declare const LatchPicker: ForwardRefExoticComponent<LatchPickerProps & RefAttributes<SelectInstance<Option_2<number>, false, GroupBase<Option_2<number>>>>>;
|
|
81
|
-
|
|
82
|
-
declare type LatchPickerProps = SelectProps<number>;
|
|
83
|
-
|
|
84
|
-
export declare const MappingPicker: ForwardRefExoticComponent<SelectProps<string> & {
|
|
85
|
-
allowClearing: boolean;
|
|
86
|
-
} & RefAttributes<SelectInstance<Option_2<string>, false, GroupBase<Option_2<string>>>>>;
|
|
87
|
-
|
|
88
|
-
export declare const MASK_CHANNEL = 15;
|
|
89
|
-
|
|
90
|
-
export declare const MASK_STATUS = 240;
|
|
91
|
-
|
|
92
|
-
export declare const NotePicker: ForwardRefExoticComponent<SelectProps<number> & {
|
|
93
|
-
channel: number;
|
|
94
|
-
disabled?: boolean;
|
|
95
|
-
isMelodicMode?: boolean;
|
|
96
|
-
mapping?: Mapping;
|
|
97
|
-
onChange: (value: number) => void;
|
|
98
|
-
} & RefAttributes<SelectInstance<Option_2<number>, false, GroupBase<Option_2<number>>>>>;
|
|
99
|
-
|
|
100
|
-
export declare const OctavePlayer: ({ format, height, hostname, instrumentName, octave, onChange, onClick, onDoubleClick, onKeyMouseEnter, onKeyMouseLeave, soundfont, Tooltip, width, }: WithProviderProps) => JSX_2.Element;
|
|
101
|
-
|
|
102
|
-
declare type Option_2<T> = {
|
|
103
|
-
label: React.ReactNode;
|
|
104
|
-
value: T;
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
export declare const PianoPicker: ({ format, height, hostname, instrumentName, onChange, onClick, onDoubleClick, onKeyMouseEnter, onKeyMouseLeave, soundfont, width, }: WithProviderProps) => JSX_2.Element;
|
|
108
|
-
|
|
109
|
-
export declare const PolarityPicker: ForwardRefExoticComponent<SelectProps<number> & {
|
|
110
|
-
labelOff?: string;
|
|
111
|
-
labelOn?: string;
|
|
112
|
-
} & RefAttributes<SelectInstance<Option_2<number>, false, GroupBase<Option_2<number>>>>>;
|
|
113
|
-
|
|
114
|
-
export declare const RESPONSE_CURVES: Option_2<number>[];
|
|
115
|
-
|
|
116
|
-
export declare type ResponseCurve = {
|
|
117
|
-
value: string | number;
|
|
118
|
-
label: React.ReactNode;
|
|
119
|
-
c1: number;
|
|
120
|
-
c2: number;
|
|
121
|
-
x1: number;
|
|
122
|
-
y1: number;
|
|
123
|
-
x2: number;
|
|
124
|
-
y2: number;
|
|
125
|
-
labelX: number;
|
|
126
|
-
labelY: number;
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
export declare const ResponseCurve: (props: ResponseCurveProps) => JSX_2.Element;
|
|
130
|
-
|
|
131
|
-
export declare const ResponseCurvePicker: ForwardRefExoticComponent<SelectProps<number> & {
|
|
132
|
-
inverted?: boolean;
|
|
133
|
-
Tooltip?: React.FC<TooltipProps>;
|
|
134
|
-
} & RefAttributes<SelectInstance<Option_2<number>, false, GroupBase<Option_2<number>>>>>;
|
|
135
|
-
|
|
136
|
-
declare type ResponseCurveProps = {
|
|
137
|
-
autosize: boolean;
|
|
138
|
-
disabled?: boolean;
|
|
139
|
-
inverted: boolean;
|
|
140
|
-
onChange: (event: {
|
|
141
|
-
target: {
|
|
142
|
-
value: number;
|
|
143
|
-
};
|
|
144
|
-
}) => void;
|
|
145
|
-
Tooltip: React.FC<TooltipProps>;
|
|
146
|
-
value: number;
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
export declare const Select: <T>(props: SelectProps<T> & {
|
|
150
|
-
ref?: React.ForwardedRef<SelectInstance<Option_2<T>, false, GroupBase<Option_2<T>>>>;
|
|
151
|
-
}) => JSX_3.Element;
|
|
152
|
-
|
|
153
|
-
declare type SelectProps<T> = {
|
|
154
|
-
className?: string;
|
|
155
|
-
components?: object;
|
|
156
|
-
disabled?: boolean;
|
|
157
|
-
filterOptions?: (candidate: Option_2<T>, inputValue: string) => boolean;
|
|
158
|
-
formatOptionLabel?: (option: Option_2<unknown>, { context }: {
|
|
159
|
-
context: 'menu' | 'value';
|
|
160
|
-
}) => React.ReactNode;
|
|
161
|
-
isSearchable?: boolean;
|
|
162
|
-
label?: string;
|
|
163
|
-
onChange: (value: Option_2<T>['value']) => void;
|
|
164
|
-
options: Option_2<T>[] | {
|
|
165
|
-
entries: Option_2<T>[];
|
|
166
|
-
}[];
|
|
167
|
-
preserveMenuWidth?: boolean;
|
|
168
|
-
shrinkLabel?: boolean;
|
|
169
|
-
value: Option_2<T>['value'];
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
declare type Status = (typeof Statuses_2)[keyof typeof Statuses_2]
|
|
173
|
-
|
|
174
|
-
declare type Status_2 = (typeof Statuses)[keyof typeof Statuses];
|
|
175
|
-
|
|
176
|
-
export declare const Statuses: {
|
|
177
|
-
noteOff: number;
|
|
178
|
-
noteOn: number;
|
|
179
|
-
aftertouch: number;
|
|
180
|
-
controlChange: number;
|
|
181
|
-
programChange: number;
|
|
182
|
-
channelPressure: number;
|
|
183
|
-
pitchWheel: number;
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
declare const Statuses_2 = {
|
|
187
|
-
noteOff: 8, // 1000
|
|
188
|
-
noteOn: 9, // 1001
|
|
189
|
-
aftertouch: 10, // 1010
|
|
190
|
-
controlChange: 11, // 1011
|
|
191
|
-
programChange: 12, // 1100
|
|
192
|
-
channelPressure: 13, // 1101
|
|
193
|
-
pitchWheel: 14, // 1110
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
export declare const StatusPicker: ForwardRefExoticComponent<SelectProps<number> & {
|
|
197
|
-
statuses: Option_2<Status>[];
|
|
198
|
-
} & RefAttributes<SelectInstance<Option_2<number>, false, GroupBase<Option_2<number>>>>>;
|
|
199
|
-
|
|
200
|
-
export declare const SVGText: (props: TextProps) => JSX_2.Element;
|
|
201
|
-
|
|
202
|
-
declare type TextProps = Partial<HTMLOrSVGElement> & {
|
|
203
|
-
className?: string;
|
|
204
|
-
dx?: number;
|
|
205
|
-
dy?: number;
|
|
206
|
-
maxHeight?: number;
|
|
207
|
-
maxWidth?: number;
|
|
208
|
-
transform?: string;
|
|
209
|
-
text: string;
|
|
210
|
-
textAnchor?: React.CSSProperties['textAnchor'];
|
|
211
|
-
verticalAnchor?: 'start' | 'middle' | 'end';
|
|
212
|
-
x?: number;
|
|
213
|
-
y?: number;
|
|
214
|
-
};
|
|
215
|
-
|
|
216
|
-
declare type TooltipProps = {
|
|
217
|
-
children?: React.ReactNode;
|
|
218
|
-
placement?: 'left' | 'right' | 'top' | 'bottom';
|
|
219
|
-
title: React.ReactNode;
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
export declare const ValuePicker: ForwardRefExoticComponent<SelectProps<number> & {
|
|
223
|
-
highToLow?: boolean;
|
|
224
|
-
max?: number;
|
|
225
|
-
min?: number;
|
|
226
|
-
} & RefAttributes<SelectInstance<Option_2<number>, false, GroupBase<Option_2<number>>>>>;
|
|
227
|
-
|
|
228
|
-
declare type WithProviderProps = {
|
|
229
|
-
format?: 'mp3' | 'ogg';
|
|
230
|
-
height: number;
|
|
231
|
-
hostname?: string;
|
|
232
|
-
instrumentName: default_2.InstrumentName;
|
|
233
|
-
octave?: number;
|
|
234
|
-
onChange?: (note: number) => void;
|
|
235
|
-
onClick?: (note: number) => void;
|
|
236
|
-
onDoubleClick?: (note: number) => void;
|
|
237
|
-
onKeyMouseEnter?: (note: number) => void;
|
|
238
|
-
onKeyMouseLeave?: (note: number) => void;
|
|
239
|
-
soundfont?: 'MusyngKite' | 'FluidR3_GM';
|
|
240
|
-
Tooltip?: TooltipProps;
|
|
241
|
-
width: number;
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
export { }
|