zds-pickers 4.0.19 → 4.0.21

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.
@@ -15,7 +15,9 @@ const filterOptions = (option, input) => {
15
15
  }
16
16
  return true;
17
17
  };
18
- const ChannelPicker = forwardRef(({ className, ...rest }, ref) => {
19
- return (_jsx(Select, { ...rest, className: cl(className, 'channel-picker'), filterOptions: filterOptions, formatOptionLabel: formatOptionLabel, options: options, ref: ref }));
18
+ const ChannelPicker = forwardRef(({ className, value = undefined, ...rest }, ref) => {
19
+ return (_jsx(Select, { ...rest, className: cl(className, 'channel-picker'), filterOptions: filterOptions, formatOptionLabel: formatOptionLabel, options: value === undefined
20
+ ? [...options, { value: undefined, label: '--' }]
21
+ : options, value: value, ref: ref }));
20
22
  });
21
23
  export { ChannelPicker };
@@ -3,7 +3,8 @@ import { Children, forwardRef, isValidElement, useCallback, useMemo, } from 'rea
3
3
  import ReactSelect, { components as originalComponents, } from 'react-select';
4
4
  import { omit } from '../utils';
5
5
  const { IndicatorsContainer, Placeholder, ValueContainer } = originalComponents;
6
- const CustomIndicatorsContainer = ({ children, ...rest }) => {
6
+ const CustomIndicatorsContainer = (props) => {
7
+ const { children, ...rest } = props;
7
8
  const actionButton = rest.selectProps?.actionButton;
8
9
  return (_jsx(IndicatorsContainer, { ...rest, children: _jsxs("div", { onMouseDown: e => {
9
10
  e.stopPropagation();
@@ -1,6 +1,6 @@
1
1
  import type { GroupBase, SelectInstance } from 'react-select';
2
2
  import type { Option, SelectProps } from './Select';
3
- type Channel = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15;
3
+ type Channel = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | undefined;
4
4
  type ChannelPickerProps = Omit<SelectProps<Channel>, 'options'>;
5
5
  type ChannelPickerRef = SelectInstance<Option<Channel>, false, GroupBase<Option<Channel>>>;
6
6
  declare const ChannelPicker: import("react").ForwardRefExoticComponent<ChannelPickerProps & import("react").RefAttributes<SelectInstance<Option<Channel>, false, GroupBase<Option<Channel>>>>>;
@@ -13,6 +13,7 @@ type KnobPickerProps = SelectProps<number> & {
13
13
  };
14
14
  type KnobPickerRef = SelectInstance<Option<number>, false, GroupBase<Option<number>>>;
15
15
  declare const KnobPicker: import("react").ForwardRefExoticComponent<Partial<import("node_modules/react-select/dist/declarations/src/components").SelectComponents<Option<number>, false, GroupBase<Option<number>>>> & {
16
+ actionButton?: React.ReactNode;
16
17
  className?: string;
17
18
  components?: object;
18
19
  disabled?: boolean;
@@ -22,6 +23,9 @@ declare const KnobPicker: import("react").ForwardRefExoticComponent<Partial<impo
22
23
  }) => React.ReactNode;
23
24
  isSearchable?: boolean;
24
25
  label?: string;
26
+ menuPortalTarget?: HTMLElement | null;
27
+ menuPosition?: "fixed" | "absolute";
28
+ menuShouldScrollIntoView?: boolean;
25
29
  onChange: (value: number) => void;
26
30
  options: Option<number>[] | {
27
31
  entries: Option<number>[];
@@ -33,7 +37,7 @@ declare const KnobPicker: import("react").ForwardRefExoticComponent<Partial<impo
33
37
  placeholder?: React.ReactNode;
34
38
  };
35
39
  shrinkLabel?: boolean;
36
- value: number;
40
+ value?: number | undefined;
37
41
  } & {
38
42
  highToLow?: boolean;
39
43
  includeLabel?: boolean;
@@ -8,6 +8,7 @@ type ResponseCurvePickerProps = SelectProps<Curve> & {
8
8
  };
9
9
  type ResponseCurvePickerRef = SelectInstance<Option<Curve>, false, GroupBase<Option<Curve>>>;
10
10
  declare const ResponseCurvePicker: import("react").ForwardRefExoticComponent<Partial<import("node_modules/react-select/dist/declarations/src/components").SelectComponents<Option<Curve>, false, GroupBase<Option<Curve>>>> & {
11
+ actionButton?: React.ReactNode;
11
12
  className?: string;
12
13
  components?: object;
13
14
  disabled?: boolean;
@@ -17,6 +18,9 @@ declare const ResponseCurvePicker: import("react").ForwardRefExoticComponent<Par
17
18
  }) => React.ReactNode;
18
19
  isSearchable?: boolean;
19
20
  label?: string;
21
+ menuPortalTarget?: HTMLElement | null;
22
+ menuPosition?: "fixed" | "absolute";
23
+ menuShouldScrollIntoView?: boolean;
20
24
  onChange: (value: Curve) => void;
21
25
  options: Option<Curve>[] | {
22
26
  entries: Option<Curve>[];
@@ -28,7 +32,7 @@ declare const ResponseCurvePicker: import("react").ForwardRefExoticComponent<Par
28
32
  placeholder?: React.ReactNode;
29
33
  };
30
34
  shrinkLabel?: boolean;
31
- value: Curve;
35
+ value?: Curve | undefined;
32
36
  } & {
33
37
  inverted?: boolean;
34
38
  Tooltip?: React.FC<TooltipProps>;
@@ -10,6 +10,7 @@ type Option<T> = {
10
10
  value: T;
11
11
  };
12
12
  type SelectProps<T> = SelectComponentsConfig<Option<T>, false, GroupBase<Option<T>>> & {
13
+ actionButton?: React.ReactNode;
13
14
  className?: string;
14
15
  components?: object;
15
16
  disabled?: boolean;
@@ -19,6 +20,9 @@ type SelectProps<T> = SelectComponentsConfig<Option<T>, false, GroupBase<Option<
19
20
  }) => React.ReactNode;
20
21
  isSearchable?: boolean;
21
22
  label?: string;
23
+ menuPortalTarget?: HTMLElement | null;
24
+ menuPosition?: 'fixed' | 'absolute';
25
+ menuShouldScrollIntoView?: boolean;
22
26
  onChange: (value: Option<T>['value']) => void;
23
27
  options: Option<T>[] | {
24
28
  entries: Option<T>[];
@@ -26,7 +30,7 @@ type SelectProps<T> = SelectComponentsConfig<Option<T>, false, GroupBase<Option<
26
30
  preserveMenuWidth?: boolean;
27
31
  selectProps?: PassedSelectProps;
28
32
  shrinkLabel?: boolean;
29
- value: Option<T>['value'];
33
+ value?: Option<T>['value'];
30
34
  };
31
35
  declare const Select: <T>(props: SelectProps<T> & {
32
36
  ref?: React.ForwardedRef<SelectInstance<Option<T>, false, GroupBase<Option<T>>>>;
@@ -22,6 +22,7 @@ type Channel =
22
22
  | 13
23
23
  | 14
24
24
  | 15
25
+ | undefined
25
26
 
26
27
  interface FormatOptionLabelContext {
27
28
  context: 'menu' | 'value'
@@ -58,14 +59,19 @@ const filterOptions = (option: Option<Channel>, input: string) => {
58
59
  const ChannelPicker = forwardRef<
59
60
  SelectInstance<Option<Channel>, false, GroupBase<Option<Channel>>>,
60
61
  ChannelPickerProps
61
- >(({ className, ...rest }, ref) => {
62
+ >(({ className, value = undefined, ...rest }, ref) => {
62
63
  return (
63
64
  <Select
64
65
  {...rest}
65
66
  className={cl(className, 'channel-picker')}
66
67
  filterOptions={filterOptions}
67
68
  formatOptionLabel={formatOptionLabel}
68
- options={options}
69
+ options={
70
+ value === undefined
71
+ ? [...options, { value: undefined, label: '--' }]
72
+ : options
73
+ }
74
+ value={value}
69
75
  ref={ref}
70
76
  />
71
77
  )
@@ -39,10 +39,10 @@ interface CustomIndicatorsContainerProps<T>
39
39
  PassedSelectProps
40
40
  }
41
41
 
42
- const CustomIndicatorsContainer = <T,>({
43
- children,
44
- ...rest
45
- }: CustomIndicatorsContainerProps<T>) => {
42
+ const CustomIndicatorsContainer = <T,>(
43
+ props: CustomIndicatorsContainerProps<T>,
44
+ ) => {
45
+ const { children, ...rest } = props
46
46
  const actionButton = rest.selectProps?.actionButton
47
47
 
48
48
  return (
@@ -92,6 +92,7 @@ type SelectProps<T> = SelectComponentsConfig<
92
92
  false,
93
93
  GroupBase<Option<T>>
94
94
  > & {
95
+ actionButton?: React.ReactNode
95
96
  className?: string
96
97
  components?: object
97
98
  disabled?: boolean
@@ -102,12 +103,15 @@ type SelectProps<T> = SelectComponentsConfig<
102
103
  ) => React.ReactNode
103
104
  isSearchable?: boolean
104
105
  label?: string
106
+ menuPortalTarget?: HTMLElement | null
107
+ menuPosition?: 'fixed' | 'absolute'
108
+ menuShouldScrollIntoView?: boolean
105
109
  onChange: (value: Option<T>['value']) => void
106
110
  options: Option<T>[] | { entries: Option<T>[] }[]
107
111
  preserveMenuWidth?: boolean
108
112
  selectProps?: PassedSelectProps
109
113
  shrinkLabel?: boolean
110
- value: Option<T>['value']
114
+ value?: Option<T>['value']
111
115
  }
112
116
 
113
117
  const Select = forwardRef(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zds-pickers",
3
- "version": "4.0.19",
3
+ "version": "4.0.21",
4
4
  "main": "./dist/index.cjs.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "types": "./dist/types/index.d.ts",
@@ -60,6 +60,7 @@
60
60
  "prop-types": "15.8.1",
61
61
  "react-dom": "18.2.0",
62
62
  "react": "18.2.0",
63
+ "rc-slider": "11.1.8",
63
64
  "storybook": "8.5.0",
64
65
  "typescript": "5.7.3",
65
66
  "vite": "6.0.7",
@@ -46,6 +46,16 @@ const ChannelPickerStory: StoryObj<typeof ChannelPicker> = {
46
46
  },
47
47
  }
48
48
 
49
+ const ChannelPickerUndefinedStory: StoryObj<typeof ChannelPicker> = {
50
+ render: args => <ChannelPicker {...args} />,
51
+ args: {
52
+ disabled: false,
53
+ label: 'Channel',
54
+ shrinkLabel: false,
55
+ value: undefined,
56
+ },
57
+ }
58
+
49
59
  const ChannelMappingPickerStory: StoryObj<typeof ChannelMappingPicker> = {
50
60
  render: args => <ChannelMappingPicker {...args} />,
51
61
  args: {
@@ -155,22 +165,33 @@ const NotePickerStory3: StoryObj<typeof NotePicker> = {
155
165
  isMelodicMode: false,
156
166
  label: 'Action button',
157
167
  mapping: gmMapping,
158
- selectProps: {
159
- actionButton: (
160
- <button
161
- type="button"
162
- onClick={() => {
163
- window.alert('click')
164
- }}>
165
- ?
166
- </button>
167
- ),
168
- },
168
+ actionButton: (
169
+ <button
170
+ type="button"
171
+ onClick={() => {
172
+ window.alert('click')
173
+ }}>
174
+ ?
175
+ </button>
176
+ ),
169
177
  shrinkLabel: false,
170
178
  value: 38,
171
179
  },
172
180
  }
173
181
 
182
+ const NotePickerStory4: StoryObj<typeof NotePicker> = {
183
+ render: args => <NotePicker {...args} />,
184
+ args: {
185
+ channel: 0,
186
+ disabled: false,
187
+ isMelodicMode: false,
188
+ label: 'Note #',
189
+ mapping: gmMapping,
190
+ shrinkLabel: false,
191
+ value: undefined,
192
+ },
193
+ }
194
+
174
195
  const OctavePlayerStory: StoryObj<typeof OctavePlayer> = {
175
196
  render: args => <OctavePlayer {...args} />,
176
197
  args: {
@@ -184,49 +205,6 @@ const OctavePlayerStory: StoryObj<typeof OctavePlayer> = {
184
205
  },
185
206
  }
186
207
 
187
- // # NotePicker
188
- // <Canvas withToolbar>
189
- // <Story
190
- // height={120}
191
- // name="NotePicker"
192
- // >
193
- // <NotePicker
194
- // channel={number('channel', 0, 'NotePicker')}
195
- // disabled={boolean('disabled', false, 'NotePicker')}
196
- // isMelodicMode={boolean('isMelodicMode', false, 'NotePicker')}
197
- // label={text('label', 'Note #', 'NotePicker')}
198
- // mapping={gmMapping}
199
- // onChange={action('handleChange')}
200
- // shrinkLabel={boolean('shrinkLabel', false, 'NotePicker')}
201
- // value={number('value', 38, {}, 'NotePicker')}
202
- // />
203
- // <br />
204
- // <NotePicker
205
- // channel={number('channel', 0, 'NotePicker2')}
206
- // disabled={boolean('disabled', false, 'NotePicker2')}
207
- // isMelodicMode={boolean('isMelodicMode', false, 'NotePicker2')}
208
- // label="No mapping"
209
- // onChange={action('handleChange2')}
210
- // shrinkLabel={boolean('shrinkLabel', false, 'NotePicker')}
211
- // value={number('value', 38, {}, 'NotePicker2')}
212
- // />
213
- // <br />
214
- // <NotePicker
215
- // channel={number('channel', 0, 'NotePicker3')}
216
- // disabled={boolean('disabled', false, 'NotePicker3')}
217
- // isMelodicMode={boolean('isMelodicMode', false, 'NotePicker3')}
218
- // label="Action button"
219
- // mapping={gmMapping}
220
- // onChange={action('handleChange3')}
221
- // selectProps={{actionButton:<button onClick={e=>{
222
- // console.log('click')
223
- // }}>?</button>}}
224
- // shrinkLabel={boolean('shrinkLabel', false, 'NotePicker')}
225
- // value={number('value', 38, {}, 'NotePicker3')}
226
- // />
227
- // </Story>
228
- // </Canvas>
229
-
230
208
  const PianoPickerStory: StoryObj<typeof PianoPicker> = {
231
209
  render: args => <PianoPicker {...args} />,
232
210
  args: {
@@ -293,6 +271,7 @@ const ValuePickerStory: StoryObj<typeof ValuePicker> = {
293
271
 
294
272
  export {
295
273
  ChannelPickerStory as ChannelPicker,
274
+ ChannelPickerUndefinedStory as ChannelPickerNoValue,
296
275
  ChannelMappingPickerStory as ChannelMappingPicker,
297
276
  CCPickerStory as ContinuousChangePicker,
298
277
  KnobStory as Knob,
@@ -302,6 +281,7 @@ export {
302
281
  NotePickerStory1 as NotePickerSimple,
303
282
  NotePickerStory2 as NotePickerNoMapping,
304
283
  NotePickerStory3 as NotePickerActionButton,
284
+ NotePickerStory4 as NotePickerNoValue,
305
285
  OctavePlayerStory as OctavePlayer,
306
286
  PianoPickerStory as PianoPicker,
307
287
  PolarityPickerStory as PolarityPicker,