@carbon/react 1.56.0-rc.0 → 1.56.0-rc.1

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.
@@ -49,9 +49,14 @@ const Button = /*#__PURE__*/React__default.forwardRef(function Button(props, ref
49
49
  };
50
50
  const iconOnlyImage = !ButtonImageElement ? null : /*#__PURE__*/React__default.createElement(ButtonImageElement, null);
51
51
  if (!isIconOnlyButton(hasIconOnly)) {
52
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
53
+ const {
54
+ tooltipAlignment,
55
+ ...propsWithoutTooltipAlignment
56
+ } = props;
52
57
  return /*#__PURE__*/React__default.createElement(ButtonBase, _extends({
53
58
  ref: ref
54
- }, props));
59
+ }, propsWithoutTooltipAlignment));
55
60
  } else {
56
61
  let align = undefined;
57
62
  if (tooltipPosition === 'top' || tooltipPosition === 'bottom') {
@@ -11,7 +11,7 @@ import cx from 'classnames';
11
11
  import { useSelect } from 'downshift';
12
12
  import isEqual from 'lodash.isequal';
13
13
  import PropTypes from 'prop-types';
14
- import React__default, { useContext, useRef, useState } from 'react';
14
+ import React__default, { useContext, useRef, useState, useMemo } from 'react';
15
15
  import ListBox from '../ListBox/index.js';
16
16
  import { sortingPropTypes } from './MultiSelectPropTypes.js';
17
17
  import { defaultSortItems, defaultCompareItems } from './tools/sorting.js';
@@ -116,17 +116,32 @@ const MultiSelect = /*#__PURE__*/React__default.forwardRef((_ref, ref) => {
116
116
  onChange,
117
117
  selectedItems: selected
118
118
  });
119
+
120
+ // Filter out items with an object having undefined values
121
+ const filteredItems = useMemo(() => {
122
+ return items.filter(item => {
123
+ if (typeof item === 'object' && item !== null) {
124
+ for (const key in item) {
125
+ if (Object.hasOwn(item, key) && item[key] === undefined) {
126
+ return false; // Return false if any property has an undefined value
127
+ }
128
+ }
129
+ }
130
+
131
+ return true; // Return true if item is not an object with undefined values
132
+ });
133
+ }, [items]);
119
134
  const selectProps = {
120
135
  ...downshiftProps,
121
136
  stateReducer,
122
137
  isOpen,
123
- itemToString: items => {
124
- return Array.isArray(items) && items.map(function (item) {
138
+ itemToString: filteredItems => {
139
+ return Array.isArray(filteredItems) && filteredItems.map(function (item) {
125
140
  return itemToString(item);
126
141
  }).join(', ') || '';
127
142
  },
128
143
  selectedItem: controlledSelectedItems,
129
- items,
144
+ items: filteredItems,
130
145
  isItemDisabled(item, _index) {
131
146
  return item.disabled;
132
147
  }
@@ -342,7 +357,7 @@ const MultiSelect = /*#__PURE__*/React__default.forwardRef((_ref, ref) => {
342
357
  size: 'mini'
343
358
  });
344
359
  }
345
- const itemsSelectedText = selectedItems.length > 0 && selectedItems.map(item => item.text);
360
+ const itemsSelectedText = selectedItems.length > 0 && selectedItems.map(item => item?.text);
346
361
  return /*#__PURE__*/React__default.createElement("div", {
347
362
  className: wrapperClasses
348
363
  }, /*#__PURE__*/React__default.createElement("label", _extends({
@@ -393,7 +408,7 @@ const MultiSelect = /*#__PURE__*/React__default.forwardRef((_ref, ref) => {
393
408
  translateWithId: translateWithId
394
409
  })), normalizedSlug), /*#__PURE__*/React__default.createElement(ListBox.Menu, getMenuProps(), isOpen &&
395
410
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
396
- sortItems(items, sortOptions).map((item, index) => {
411
+ sortItems(filteredItems, sortOptions).map((item, index) => {
397
412
  const isChecked = selectedItems.filter(selected => isEqual(selected, item)).length > 0;
398
413
  const itemProps = getItemProps({
399
414
  item,
@@ -71,6 +71,9 @@ const NumberInput = /*#__PURE__*/React__default.forwardRef(function NumberInput(
71
71
  if (defaultValue !== undefined) {
72
72
  return defaultValue;
73
73
  }
74
+ if (allowEmpty) {
75
+ return '';
76
+ }
74
77
  return 0;
75
78
  });
76
79
  const [prevControlledValue, setPrevControlledValue] = useState(controlledValue);
@@ -130,7 +133,7 @@ const NumberInput = /*#__PURE__*/React__default.forwardRef(function NumberInput(
130
133
  return;
131
134
  }
132
135
  const state = {
133
- value: Number(event.target.value),
136
+ value: allowEmpty && event.target.value === '' ? '' : Number(event.target.value),
134
137
  direction: value < event.target.value ? 'up' : 'down'
135
138
  };
136
139
  setValue(state.value);
@@ -157,7 +160,7 @@ const NumberInput = /*#__PURE__*/React__default.forwardRef(function NumberInput(
157
160
  if (inputRef.current) {
158
161
  direction === 'up' ? inputRef.current.stepUp() : inputRef.current.stepDown();
159
162
  const state = {
160
- value: Number(inputRef.current.value),
163
+ value: allowEmpty && inputRef.current.value === '' ? '' : Number(inputRef.current.value),
161
164
  direction: direction
162
165
  };
163
166
  setValue(state.value);
@@ -50,7 +50,7 @@ export interface RadioButtonProps extends Omit<React.InputHTMLAttributes<HTMLInp
50
50
  * Provide an optional `onChange` hook that is called each time the value of
51
51
  * the underlying `<input>` changes
52
52
  */
53
- onChange?: (value: string | number, name: string | undefined, event: any) => void;
53
+ onChange?: (value: string | number, name: string | undefined, event: React.ChangeEvent<HTMLInputElement>) => void;
54
54
  /**
55
55
  * Provide a handler that is invoked when a user clicks on the control
56
56
  */
@@ -54,7 +54,7 @@ export interface RadioButtonGroupProps extends Omit<React.InputHTMLAttributes<HT
54
54
  * Provide an optional `onChange` hook that is called whenever the value of
55
55
  * the group changes
56
56
  */
57
- onChange?: (selection: unknown, name: string, evt: unknown) => void;
57
+ onChange?: (selection: React.ReactNode, name: string, event: React.ChangeEvent<HTMLInputElement>) => void;
58
58
  /**
59
59
  * Provide where radio buttons should be placed
60
60
  */
@@ -88,7 +88,7 @@ export interface SelectableTileProps extends HTMLAttributes<HTMLDivElement> {
88
88
  /**
89
89
  * The empty handler of the `<input>`.
90
90
  */
91
- onChange?(event: ChangeEvent<HTMLDivElement>): void;
91
+ onChange?(event: ChangeEvent<HTMLDivElement>, selected?: boolean, id?: string): void;
92
92
  /**
93
93
  * Specify the function to run when the SelectableTile is clicked
94
94
  */
@@ -244,7 +244,7 @@ const SelectableTile = /*#__PURE__*/React__default.forwardRef(function Selectabl
244
244
  }
245
245
  setIsSelected(!isSelected);
246
246
  clickHandler(evt);
247
- onChange(evt);
247
+ onChange(evt, isSelected, id);
248
248
  }
249
249
 
250
250
  // TODO: rename to handleKeyDown when handleKeyDown prop is deprecated
@@ -253,13 +253,13 @@ const SelectableTile = /*#__PURE__*/React__default.forwardRef(function Selectabl
253
253
  if (matches(evt, [Enter, Space])) {
254
254
  evt.preventDefault();
255
255
  setIsSelected(!isSelected);
256
- onChange(evt);
256
+ onChange(evt, isSelected, id);
257
257
  }
258
258
  keyDownHandler(evt);
259
259
  }
260
260
  function handleChange(event) {
261
261
  setIsSelected(event.target.checked);
262
- onChange(event);
262
+ onChange(event, isSelected, id);
263
263
  }
264
264
  if (selected !== prevSelected) {
265
265
  setIsSelected(selected);
@@ -214,6 +214,6 @@ declare class HeaderMenu extends React.Component<HeaderMenuProps, HeaderMenuStat
214
214
  */
215
215
  _renderMenuItem: (item: React.ReactNode, index: number) => React.ReactElement<any, string | React.JSXElementConstructor<any>> | undefined;
216
216
  }
217
- declare const HeaderMenuForwardRef: React.ForwardRefExoticComponent<React.RefAttributes<unknown>>;
217
+ declare const HeaderMenuForwardRef: React.ForwardRefExoticComponent<HeaderMenuProps & React.RefAttributes<unknown>>;
218
218
  export { HeaderMenu };
219
219
  export default HeaderMenuForwardRef;
@@ -259,9 +259,7 @@ _defineProperty(HeaderMenu, "propTypes", {
259
259
  });
260
260
  _defineProperty(HeaderMenu, "contextType", PrefixContext);
261
261
  const HeaderMenuForwardRef = /*#__PURE__*/React__default.forwardRef((props, ref) => {
262
- return /*#__PURE__*/React__default.createElement(HeaderMenu, _extends({
263
- menuLinkName: "link"
264
- }, props, {
262
+ return /*#__PURE__*/React__default.createElement(HeaderMenu, _extends({}, props, {
265
263
  focusRef: ref
266
264
  }));
267
265
  });
@@ -58,9 +58,14 @@ const Button = /*#__PURE__*/React__default["default"].forwardRef(function Button
58
58
  };
59
59
  const iconOnlyImage = !ButtonImageElement ? null : /*#__PURE__*/React__default["default"].createElement(ButtonImageElement, null);
60
60
  if (!isIconOnlyButton(hasIconOnly)) {
61
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
62
+ const {
63
+ tooltipAlignment,
64
+ ...propsWithoutTooltipAlignment
65
+ } = props;
61
66
  return /*#__PURE__*/React__default["default"].createElement(ButtonBase["default"], _rollupPluginBabelHelpers["extends"]({
62
67
  ref: ref
63
- }, props));
68
+ }, propsWithoutTooltipAlignment));
64
69
  } else {
65
70
  let align = undefined;
66
71
  if (tooltipPosition === 'top' || tooltipPosition === 'bottom') {
@@ -127,17 +127,32 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
127
127
  onChange,
128
128
  selectedItems: selected
129
129
  });
130
+
131
+ // Filter out items with an object having undefined values
132
+ const filteredItems = React.useMemo(() => {
133
+ return items.filter(item => {
134
+ if (typeof item === 'object' && item !== null) {
135
+ for (const key in item) {
136
+ if (Object.hasOwn(item, key) && item[key] === undefined) {
137
+ return false; // Return false if any property has an undefined value
138
+ }
139
+ }
140
+ }
141
+
142
+ return true; // Return true if item is not an object with undefined values
143
+ });
144
+ }, [items]);
130
145
  const selectProps = {
131
146
  ...downshiftProps,
132
147
  stateReducer,
133
148
  isOpen,
134
- itemToString: items => {
135
- return Array.isArray(items) && items.map(function (item) {
149
+ itemToString: filteredItems => {
150
+ return Array.isArray(filteredItems) && filteredItems.map(function (item) {
136
151
  return itemToString(item);
137
152
  }).join(', ') || '';
138
153
  },
139
154
  selectedItem: controlledSelectedItems,
140
- items,
155
+ items: filteredItems,
141
156
  isItemDisabled(item, _index) {
142
157
  return item.disabled;
143
158
  }
@@ -353,7 +368,7 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
353
368
  size: 'mini'
354
369
  });
355
370
  }
356
- const itemsSelectedText = selectedItems.length > 0 && selectedItems.map(item => item.text);
371
+ const itemsSelectedText = selectedItems.length > 0 && selectedItems.map(item => item?.text);
357
372
  return /*#__PURE__*/React__default["default"].createElement("div", {
358
373
  className: wrapperClasses
359
374
  }, /*#__PURE__*/React__default["default"].createElement("label", _rollupPluginBabelHelpers["extends"]({
@@ -404,7 +419,7 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
404
419
  translateWithId: translateWithId
405
420
  })), normalizedSlug), /*#__PURE__*/React__default["default"].createElement(index["default"].Menu, getMenuProps(), isOpen &&
406
421
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
407
- sortItems(items, sortOptions).map((item, index$1) => {
422
+ sortItems(filteredItems, sortOptions).map((item, index$1) => {
408
423
  const isChecked = selectedItems.filter(selected => isEqual__default["default"](selected, item)).length > 0;
409
424
  const itemProps = getItemProps({
410
425
  item,
@@ -81,6 +81,9 @@ const NumberInput = /*#__PURE__*/React__default["default"].forwardRef(function N
81
81
  if (defaultValue !== undefined) {
82
82
  return defaultValue;
83
83
  }
84
+ if (allowEmpty) {
85
+ return '';
86
+ }
84
87
  return 0;
85
88
  });
86
89
  const [prevControlledValue, setPrevControlledValue] = React.useState(controlledValue);
@@ -140,7 +143,7 @@ const NumberInput = /*#__PURE__*/React__default["default"].forwardRef(function N
140
143
  return;
141
144
  }
142
145
  const state = {
143
- value: Number(event.target.value),
146
+ value: allowEmpty && event.target.value === '' ? '' : Number(event.target.value),
144
147
  direction: value < event.target.value ? 'up' : 'down'
145
148
  };
146
149
  setValue(state.value);
@@ -167,7 +170,7 @@ const NumberInput = /*#__PURE__*/React__default["default"].forwardRef(function N
167
170
  if (inputRef.current) {
168
171
  direction === 'up' ? inputRef.current.stepUp() : inputRef.current.stepDown();
169
172
  const state = {
170
- value: Number(inputRef.current.value),
173
+ value: allowEmpty && inputRef.current.value === '' ? '' : Number(inputRef.current.value),
171
174
  direction: direction
172
175
  };
173
176
  setValue(state.value);
@@ -50,7 +50,7 @@ export interface RadioButtonProps extends Omit<React.InputHTMLAttributes<HTMLInp
50
50
  * Provide an optional `onChange` hook that is called each time the value of
51
51
  * the underlying `<input>` changes
52
52
  */
53
- onChange?: (value: string | number, name: string | undefined, event: any) => void;
53
+ onChange?: (value: string | number, name: string | undefined, event: React.ChangeEvent<HTMLInputElement>) => void;
54
54
  /**
55
55
  * Provide a handler that is invoked when a user clicks on the control
56
56
  */
@@ -54,7 +54,7 @@ export interface RadioButtonGroupProps extends Omit<React.InputHTMLAttributes<HT
54
54
  * Provide an optional `onChange` hook that is called whenever the value of
55
55
  * the group changes
56
56
  */
57
- onChange?: (selection: unknown, name: string, evt: unknown) => void;
57
+ onChange?: (selection: React.ReactNode, name: string, event: React.ChangeEvent<HTMLInputElement>) => void;
58
58
  /**
59
59
  * Provide where radio buttons should be placed
60
60
  */
@@ -88,7 +88,7 @@ export interface SelectableTileProps extends HTMLAttributes<HTMLDivElement> {
88
88
  /**
89
89
  * The empty handler of the `<input>`.
90
90
  */
91
- onChange?(event: ChangeEvent<HTMLDivElement>): void;
91
+ onChange?(event: ChangeEvent<HTMLDivElement>, selected?: boolean, id?: string): void;
92
92
  /**
93
93
  * Specify the function to run when the SelectableTile is clicked
94
94
  */
@@ -254,7 +254,7 @@ const SelectableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
254
254
  }
255
255
  setIsSelected(!isSelected);
256
256
  clickHandler(evt);
257
- onChange(evt);
257
+ onChange(evt, isSelected, id);
258
258
  }
259
259
 
260
260
  // TODO: rename to handleKeyDown when handleKeyDown prop is deprecated
@@ -263,13 +263,13 @@ const SelectableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
263
263
  if (match.matches(evt, [keys.Enter, keys.Space])) {
264
264
  evt.preventDefault();
265
265
  setIsSelected(!isSelected);
266
- onChange(evt);
266
+ onChange(evt, isSelected, id);
267
267
  }
268
268
  keyDownHandler(evt);
269
269
  }
270
270
  function handleChange(event) {
271
271
  setIsSelected(event.target.checked);
272
- onChange(event);
272
+ onChange(event, isSelected, id);
273
273
  }
274
274
  if (selected !== prevSelected) {
275
275
  setIsSelected(selected);
@@ -214,6 +214,6 @@ declare class HeaderMenu extends React.Component<HeaderMenuProps, HeaderMenuStat
214
214
  */
215
215
  _renderMenuItem: (item: React.ReactNode, index: number) => React.ReactElement<any, string | React.JSXElementConstructor<any>> | undefined;
216
216
  }
217
- declare const HeaderMenuForwardRef: React.ForwardRefExoticComponent<React.RefAttributes<unknown>>;
217
+ declare const HeaderMenuForwardRef: React.ForwardRefExoticComponent<HeaderMenuProps & React.RefAttributes<unknown>>;
218
218
  export { HeaderMenu };
219
219
  export default HeaderMenuForwardRef;
@@ -269,9 +269,7 @@ _rollupPluginBabelHelpers.defineProperty(HeaderMenu, "propTypes", {
269
269
  });
270
270
  _rollupPluginBabelHelpers.defineProperty(HeaderMenu, "contextType", usePrefix.PrefixContext);
271
271
  const HeaderMenuForwardRef = /*#__PURE__*/React__default["default"].forwardRef((props, ref) => {
272
- return /*#__PURE__*/React__default["default"].createElement(HeaderMenu, _rollupPluginBabelHelpers["extends"]({
273
- menuLinkName: "link"
274
- }, props, {
272
+ return /*#__PURE__*/React__default["default"].createElement(HeaderMenu, _rollupPluginBabelHelpers["extends"]({}, props, {
275
273
  focusRef: ref
276
274
  }));
277
275
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carbon/react",
3
3
  "description": "React components for the Carbon Design System",
4
- "version": "1.56.0-rc.0",
4
+ "version": "1.56.0-rc.1",
5
5
  "license": "Apache-2.0",
6
6
  "main": "lib/index.js",
7
7
  "module": "es/index.js",
@@ -49,11 +49,11 @@
49
49
  "dependencies": {
50
50
  "@babel/runtime": "^7.18.3",
51
51
  "@carbon/feature-flags": "^0.19.0",
52
- "@carbon/icons-react": "^11.40.0-rc.0",
52
+ "@carbon/icons-react": "^11.40.0-rc.1",
53
53
  "@carbon/layout": "^11.21.0",
54
- "@carbon/styles": "^1.55.0",
54
+ "@carbon/styles": "^1.55.1-rc.0",
55
55
  "@floating-ui/react": "^0.26.0",
56
- "@ibm/telemetry-js": "^1.2.1",
56
+ "@ibm/telemetry-js": "^1.4.0",
57
57
  "classnames": "2.5.1",
58
58
  "copy-to-clipboard": "^3.3.1",
59
59
  "downshift": "8.5.0",
@@ -141,5 +141,5 @@
141
141
  "**/*.scss",
142
142
  "**/*.css"
143
143
  ],
144
- "gitHead": "ecf1b3cc2c2e9ed4908bab90938120e0d4b2aea4"
144
+ "gitHead": "c6ef02eb0fa5b2dcaccbbe60d45f26884a167948"
145
145
  }
package/telemetry.yml CHANGED
@@ -813,4 +813,7 @@ collect:
813
813
  - 'normal'
814
814
  # unstable__Slug - dotType
815
815
  - 'default'
816
- - 'hollow'
816
+ - 'hollow'
817
+ js:
818
+ tokens: null
819
+ functions: {}