zds-pickers 4.0.25 → 4.1.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zds-pickers",
3
- "version": "4.0.25",
3
+ "version": "4.1.0",
4
4
  "main": "./dist/index.cjs.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "types": "./dist/types/index.d.ts",
@@ -28,16 +28,6 @@
28
28
  "type": "git",
29
29
  "url": "git+https://github.com/dkadrios/zds-pickers.git"
30
30
  },
31
- "scripts": {
32
- "dev": "vite",
33
- "build": "vite build && tsc",
34
- "build-storybook": "storybook build",
35
- "lint": "biome check --write",
36
- "preview": "vite preview",
37
- "sb": "storybook dev --quiet -p 6006 --no-open",
38
- "sb:watch": "nodemon --watch .storybook -e ts,tsx,js,jsx --exec 'npm run sb'",
39
- "prepublishOnly": "npm run build"
40
- },
41
31
  "devDependencies": {
42
32
  "@biomejs/biome": "1.9.4",
43
33
  "@storybook/addon-actions": "8.6.3",
@@ -71,8 +61,8 @@
71
61
  "d3-selection": "3.0.0",
72
62
  "react-svgmt": "2.0.2",
73
63
  "soundfont-player": "0.12.0",
74
- "tonal": "6.4.0",
75
- "zds-react-piano": "4.0.10"
64
+ "tonal": "6.4.2",
65
+ "zds-react-piano": "4.1.0"
76
66
  },
77
67
  "peerDependencies": {
78
68
  "classnames": ">=2.5.1",
@@ -80,5 +70,15 @@
80
70
  "react-dom": ">=18.0.0",
81
71
  "react-select": ">=5.10.0",
82
72
  "zds-mappings": "1.4.9"
73
+ },
74
+ "scripts": {
75
+ "dev": "vite",
76
+ "build": "vite build && tsc",
77
+ "build-storybook": "storybook build",
78
+ "lint": "biome check --write",
79
+ "preview": "vite preview",
80
+ "sb": "storybook dev --quiet -p 6006 --no-open",
81
+ "sb:watch": "nodemon --watch .storybook -e ts,tsx,js,jsx --exec 'npm run sb'",
82
+ "prepublishOnly": "npm run build"
83
83
  }
84
84
  }
@@ -347,3 +347,19 @@ body .response-curve-picker text.button-selected {
347
347
  color: #f8e8d5;
348
348
  }
349
349
 
350
+ /*
351
+ * Styles of "selected" keys (persistent selection state)
352
+ */
353
+ .ReactPiano__Key--selected {
354
+ background: #ff6b35;
355
+ }
356
+
357
+ .ReactPiano__Key--selected.ReactPiano__Key--accidental {
358
+ border: 1px solid #fff;
359
+ border-top: 1px solid #ff6b35;
360
+ }
361
+
362
+ .ReactPiano__Key--selected.ReactPiano__Key--natural {
363
+ border: 1px solid #ff6b35;
364
+ }
365
+
@@ -8,6 +8,7 @@ import { OctavePlayer } from '../lib/other/OctavePlayer'
8
8
  import { CCPicker } from '../lib/pickers/CCPicker'
9
9
  import { ChannelMappingPicker } from '../lib/pickers/ChannelMappingPicker'
10
10
  import { ChannelPicker } from '../lib/pickers/ChannelPicker'
11
+ import { KeyPicker } from '../lib/pickers/KeyPicker'
11
12
  import { Knob } from '../lib/pickers/Knob'
12
13
  import { KnobPicker } from '../lib/pickers/KnobPicker'
13
14
  import { LatchPicker } from '../lib/pickers/LatchPicker'
@@ -16,7 +17,6 @@ import { NotePicker } from '../lib/pickers/NotePicker'
16
17
  import { PianoPicker } from '../lib/pickers/PianoPicker'
17
18
  import { PolarityPicker } from '../lib/pickers/PolarityPicker'
18
19
  import { ResponseCurve } from '../lib/pickers/ResponseCurve'
19
- import { KeyPicker } from '../lib/pickers/KeyPicker'
20
20
  import { ResponseCurvePicker } from '../lib/pickers/ResponseCurvePicker'
21
21
  import {
22
22
  type Option,
@@ -134,18 +134,30 @@ const ChannelMappingPickerUndefinedStory: StoryObj<
134
134
  }
135
135
 
136
136
  const KeyPickerStory: StoryObj<typeof KeyPicker> = {
137
- render: args => <KeyPicker {...args} />,
137
+ render: (args) => <KeyPicker {...args} />,
138
+ args: {
139
+ instrumentName: 'acoustic_grand_piano',
140
+ height: 100,
141
+ width: 200,
142
+ octave: 4,
143
+ value: 65,
144
+ },
145
+ }
146
+
147
+ const KeyPickerUndefinedStory: StoryObj<typeof KeyPicker> = {
148
+ render: (args) => <KeyPicker {...args} />,
138
149
  args: {
139
150
  instrumentName: 'acoustic_grand_piano',
140
151
  height: 100,
141
152
  width: 200,
142
153
  octave: 4,
154
+ value: noSelection,
143
155
  },
144
156
  }
145
157
 
146
158
 
147
159
  const KnobStory: StoryObj<typeof Knob> = {
148
- render: args => <Knob {...args} />,
160
+ render: (args) => <Knob {...args} />,
149
161
  args: {
150
162
  disabled: false,
151
163
  max: 127,
@@ -156,7 +168,7 @@ const KnobStory: StoryObj<typeof Knob> = {
156
168
  }
157
169
 
158
170
  const KnobPickerStory: StoryObj<typeof KnobPicker> = {
159
- render: args => <KnobPicker {...args} />,
171
+ render: (args) => <KnobPicker {...args} />,
160
172
  args: {
161
173
  disabled: false,
162
174
  includePicker: true,
@@ -171,7 +183,7 @@ const KnobPickerStory: StoryObj<typeof KnobPicker> = {
171
183
  }
172
184
 
173
185
  const LatchPickerStory: StoryObj<typeof LatchPicker> = {
174
- render: args => <LatchPicker {...args} />,
186
+ render: (args) => <LatchPicker {...args} />,
175
187
  args: {
176
188
  disabled: false,
177
189
  label: 'Mode',
@@ -181,7 +193,7 @@ const LatchPickerStory: StoryObj<typeof LatchPicker> = {
181
193
  }
182
194
 
183
195
  const MappingPickerStory: StoryObj<typeof MappingPicker> = {
184
- render: args => <MappingPicker {...args} />,
196
+ render: (args) => <MappingPicker {...args} />,
185
197
  args: {
186
198
  allowClearing: true,
187
199
  disabled: false,
@@ -193,7 +205,7 @@ const MappingPickerStory: StoryObj<typeof MappingPicker> = {
193
205
  }
194
206
 
195
207
  const NotePickerStory1: StoryObj<typeof NotePicker> = {
196
- render: args => <NotePicker {...args} />,
208
+ render: (args) => <NotePicker {...args} />,
197
209
  args: {
198
210
  channel: 0,
199
211
  disabled: false,
@@ -206,7 +218,7 @@ const NotePickerStory1: StoryObj<typeof NotePicker> = {
206
218
  }
207
219
 
208
220
  const NotePickerStory2: StoryObj<typeof NotePicker> = {
209
- render: args => <NotePicker {...args} />,
221
+ render: (args) => <NotePicker {...args} />,
210
222
  args: {
211
223
  channel: 0,
212
224
  disabled: false,
@@ -218,7 +230,7 @@ const NotePickerStory2: StoryObj<typeof NotePicker> = {
218
230
  }
219
231
 
220
232
  const NotePickerStory3: StoryObj<typeof NotePicker> = {
221
- render: args => <NotePicker {...args} />,
233
+ render: (args) => <NotePicker {...args} />,
222
234
  args: {
223
235
  channel: 0,
224
236
  disabled: false,
@@ -230,7 +242,8 @@ const NotePickerStory3: StoryObj<typeof NotePicker> = {
230
242
  type="button"
231
243
  onClick={() => {
232
244
  window.alert('click')
233
- }}>
245
+ }}
246
+ >
234
247
  ?
235
248
  </button>
236
249
  ),
@@ -240,7 +253,7 @@ const NotePickerStory3: StoryObj<typeof NotePicker> = {
240
253
  }
241
254
 
242
255
  const NotePickerStory4: StoryObj<typeof NotePicker> = {
243
- render: args => <NotePicker {...args} />,
256
+ render: (args) => <NotePicker {...args} />,
244
257
  args: {
245
258
  channel: 0,
246
259
  disabled: false,
@@ -253,7 +266,7 @@ const NotePickerStory4: StoryObj<typeof NotePicker> = {
253
266
  }
254
267
 
255
268
  const OctavePlayerStory: StoryObj<typeof OctavePlayer> = {
256
- render: args => <OctavePlayer {...args} />,
269
+ render: (args) => <OctavePlayer {...args} />,
257
270
  args: {
258
271
  instrumentName: 'acoustic_grand_piano',
259
272
  height: 100,
@@ -263,16 +276,27 @@ const OctavePlayerStory: StoryObj<typeof OctavePlayer> = {
263
276
  }
264
277
 
265
278
  const PianoPickerStory: StoryObj<typeof PianoPicker> = {
266
- render: args => <PianoPicker {...args} />,
279
+ render: (args) => <PianoPicker {...args} />,
280
+ args: {
281
+ instrumentName: 'acoustic_grand_piano',
282
+ height: 100,
283
+ width: 1000,
284
+ selectedNotes: [65], // F4 selected
285
+ },
286
+ }
287
+
288
+ const PianoPickerNoSelectionStory: StoryObj<typeof PianoPicker> = {
289
+ render: (args) => <PianoPicker {...args} />,
267
290
  args: {
268
291
  instrumentName: 'acoustic_grand_piano',
269
292
  height: 100,
270
293
  width: 1000,
294
+ selectedNotes: [], // No selection
271
295
  },
272
296
  }
273
297
 
274
298
  const PolarityPickerStory: StoryObj<typeof PolarityPicker> = {
275
- render: args => <PolarityPicker {...args} />,
299
+ render: (args) => <PolarityPicker {...args} />,
276
300
  args: {
277
301
  disabled: false,
278
302
  label: 'Polarity',
@@ -284,7 +308,7 @@ const PolarityPickerStory: StoryObj<typeof PolarityPicker> = {
284
308
  }
285
309
 
286
310
  const PolarityPickerUndefinedStory: StoryObj<typeof PolarityPicker> = {
287
- render: args => <PolarityPicker {...args} />,
311
+ render: (args) => <PolarityPicker {...args} />,
288
312
  args: {
289
313
  disabled: false,
290
314
  label: 'Polarity',
@@ -296,7 +320,7 @@ const PolarityPickerUndefinedStory: StoryObj<typeof PolarityPicker> = {
296
320
  }
297
321
 
298
322
  const ResponseCurveStory: StoryObj<typeof ResponseCurve> = {
299
- render: args => <ResponseCurve {...args} />,
323
+ render: (args) => <ResponseCurve {...args} />,
300
324
  args: {
301
325
  disabled: false,
302
326
  inverted: false,
@@ -305,7 +329,7 @@ const ResponseCurveStory: StoryObj<typeof ResponseCurve> = {
305
329
  }
306
330
 
307
331
  const ResponseCurvePickerStory: StoryObj<typeof ResponseCurvePicker> = {
308
- render: args => <ResponseCurvePicker {...args} />,
332
+ render: (args) => <ResponseCurvePicker {...args} />,
309
333
  args: {
310
334
  disabled: false,
311
335
  inverted: false,
@@ -317,7 +341,7 @@ const ResponseCurvePickerStory: StoryObj<typeof ResponseCurvePicker> = {
317
341
 
318
342
  const ResponseCurvePickerUndefinedStory: StoryObj<typeof ResponseCurvePicker> =
319
343
  {
320
- render: args => <ResponseCurvePicker {...args} />,
344
+ render: (args) => <ResponseCurvePicker {...args} />,
321
345
  args: {
322
346
  disabled: false,
323
347
  inverted: false,
@@ -328,7 +352,7 @@ const ResponseCurvePickerUndefinedStory: StoryObj<typeof ResponseCurvePicker> =
328
352
  }
329
353
 
330
354
  const StatusPickerStory: StoryObj<typeof StatusPicker> = {
331
- render: args => <StatusPicker {...args} />,
355
+ render: (args) => <StatusPicker {...args} />,
332
356
  args: {
333
357
  disabled: false,
334
358
  label: 'Status Msg',
@@ -339,7 +363,7 @@ const StatusPickerStory: StoryObj<typeof StatusPicker> = {
339
363
  }
340
364
 
341
365
  const StatusPickerUndefinedStory: StoryObj<typeof StatusPicker> = {
342
- render: args => <StatusPicker {...args} />,
366
+ render: (args) => <StatusPicker {...args} />,
343
367
  args: {
344
368
  disabled: false,
345
369
  label: 'Status Msg',
@@ -350,7 +374,7 @@ const StatusPickerUndefinedStory: StoryObj<typeof StatusPicker> = {
350
374
  }
351
375
 
352
376
  const ValuePickerStory: StoryObj<typeof ValuePicker> = {
353
- render: args => <ValuePicker {...args} />,
377
+ render: (args) => <ValuePicker {...args} />,
354
378
  args: {
355
379
  disabled: false,
356
380
  highToLow: false,
@@ -362,7 +386,7 @@ const ValuePickerStory: StoryObj<typeof ValuePicker> = {
362
386
  }
363
387
 
364
388
  const ValuePickerUndefinedStory: StoryObj<typeof ValuePicker> = {
365
- render: args => <ValuePicker {...args} />,
389
+ render: (args) => <ValuePicker {...args} />,
366
390
  args: {
367
391
  disabled: false,
368
392
  highToLow: false,
@@ -382,6 +406,7 @@ export {
382
406
  CCPickerStory as ChangeController,
383
407
  CCPickerUndefinedStory as ChangeControllerNoValue,
384
408
  KeyPickerStory as KeyPicker,
409
+ KeyPickerUndefinedStory as KeyPickerNoValue,
385
410
  KnobStory as Knob,
386
411
  KnobPickerStory as KnobPicker,
387
412
  LatchPickerStory as LatchPicker,
@@ -392,6 +417,7 @@ export {
392
417
  NotePickerStory4 as NotePickerNoValue,
393
418
  OctavePlayerStory as OctavePlayer,
394
419
  PianoPickerStory as PianoPicker,
420
+ PianoPickerNoSelectionStory as PianoPickerNoSelection,
395
421
  PolarityPickerStory as PolarityPicker,
396
422
  PolarityPickerUndefinedStory as PolarityPickerNoValue,
397
423
  ResponseCurveStory as ResponseCurve,
package/vite.config.ts CHANGED
@@ -14,17 +14,26 @@ export default defineConfig({
14
14
  outDir: 'dist',
15
15
  sourcemap: true,
16
16
  rollupOptions: {
17
- external: [
18
- 'react',
19
- 'react-dom',
20
- 'react/jsx-runtime',
21
- 'react-select',
22
- 'd3-drag',
23
- 'd3-scale',
24
- 'd3-selection',
25
- ],
17
+ external: id => {
18
+ return [
19
+ 'react',
20
+ 'react-dom',
21
+ 'react/jsx-runtime',
22
+ 'react-select',
23
+ 'd3-drag',
24
+ 'd3-scale',
25
+ 'd3-selection',
26
+ 'classnames',
27
+ 'zds-mappings',
28
+ ].some(pkg => id === pkg || id.startsWith(`${pkg}/`))
29
+ },
26
30
  output: {
27
31
  exports: 'named',
32
+ globals: {
33
+ react: 'React',
34
+ 'react-dom': 'ReactDOM',
35
+ 'react-select': 'ReactSelect',
36
+ },
28
37
  },
29
38
  },
30
39
  // minify: true,