@carbon/react 1.101.0 → 1.102.0-rc.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.
Files changed (152) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +998 -963
  2. package/es/components/Accordion/AccordionItem.js +8 -6
  3. package/es/components/ComboBox/ComboBox.js +3 -3
  4. package/es/components/ComposedModal/ComposedModal.js +0 -1
  5. package/es/components/ContainedList/ContainedList.d.ts +1 -1
  6. package/es/components/ContainedList/ContainedList.js +9 -34
  7. package/es/components/ContentSwitcher/ContentSwitcher.d.ts +3 -3
  8. package/es/components/ContentSwitcher/ContentSwitcher.js +1 -2
  9. package/es/components/DataTable/DataTable.d.ts +6 -2
  10. package/es/components/DataTable/DataTable.js +3 -1
  11. package/es/components/DataTable/Table.js +1 -1
  12. package/es/components/DataTable/TableToolbarSearch.d.ts +11 -2
  13. package/es/components/DataTable/TableToolbarSearch.js +10 -3
  14. package/es/components/DataTable/stories/examples/TableToolbarFilter.d.ts +3 -0
  15. package/es/components/DataTableSkeleton/DataTableSkeleton.d.ts +2 -12
  16. package/es/components/DataTableSkeleton/DataTableSkeleton.js +1 -8
  17. package/es/components/DatePicker/DatePicker.js +4 -1
  18. package/es/components/DatePickerInput/DatePickerInput.d.ts +2 -5
  19. package/es/components/DatePickerInput/DatePickerInput.js +2 -13
  20. package/es/components/Dropdown/Dropdown.js +1 -0
  21. package/es/components/ExpandableSearch/ExpandableSearch.js +2 -1
  22. package/es/components/ExpandableSearch/index.js +12 -0
  23. package/es/components/FluidSelect/FluidSelect.d.ts +3 -3
  24. package/es/components/FluidTextArea/FluidTextArea.d.ts +2 -4
  25. package/es/components/FluidTextArea/FluidTextArea.js +1 -2
  26. package/es/components/FluidTimePickerSelect/FluidTimePickerSelect.d.ts +3 -3
  27. package/es/components/Grid/Column.d.ts +1 -1
  28. package/es/components/Grid/Column.js +2 -2
  29. package/es/components/Loading/Loading.d.ts +1 -1
  30. package/es/components/Loading/Loading.js +3 -1
  31. package/es/components/Menu/Menu.d.ts +1 -1
  32. package/es/components/Menu/Menu.js +6 -2
  33. package/es/components/Menu/MenuItem.js +2 -2
  34. package/es/components/Modal/Modal.js +0 -1
  35. package/es/components/MultiSelect/FilterableMultiSelect.js +4 -3
  36. package/es/components/MultiSelect/MultiSelect.js +5 -8
  37. package/es/components/MultiSelect/MultiSelectPropTypes.d.ts +6 -8
  38. package/es/components/MultiSelect/tools/sorting.d.ts +16 -9
  39. package/es/components/MultiSelect/tools/sorting.js +10 -14
  40. package/es/components/OverflowMenu/OverflowMenu.js +1 -0
  41. package/es/components/OverflowMenuItem/OverflowMenuItem.d.ts +5 -1
  42. package/es/components/OverflowMenuItem/OverflowMenuItem.js +12 -2
  43. package/es/components/Popover/index.js +3 -3
  44. package/es/components/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
  45. package/es/components/RadioButtonGroup/RadioButtonGroup.js +8 -11
  46. package/es/components/Search/Search.js +3 -2
  47. package/es/components/Search/utils.d.ts +7 -0
  48. package/es/components/Search/utils.js +10 -0
  49. package/es/components/Select/Select.d.ts +2 -2
  50. package/es/components/Select/Select.js +1 -1
  51. package/es/components/SelectItem/SelectItem.d.ts +3 -3
  52. package/es/components/StructuredList/StructuredList.js +2 -2
  53. package/es/components/Tabs/Tabs.js +9 -4
  54. package/es/components/Tag/DismissibleTag.d.ts +1 -1
  55. package/es/components/Tag/DismissibleTag.js +2 -2
  56. package/es/components/Tag/OperationalTag.d.ts +1 -1
  57. package/es/components/Tag/OperationalTag.js +2 -2
  58. package/es/components/Tag/SelectableTag.d.ts +1 -1
  59. package/es/components/Tag/SelectableTag.js +2 -2
  60. package/es/components/Tag/Tag.d.ts +1 -1
  61. package/es/components/Tag/Tag.js +2 -2
  62. package/es/components/TextArea/TextArea.d.ts +1 -2
  63. package/es/components/TextArea/TextArea.js +4 -5
  64. package/es/components/TextInput/ControlledPasswordInput.js +1 -1
  65. package/es/components/TimePickerSelect/TimePickerSelect.d.ts +4 -4
  66. package/es/components/Toggletip/index.js +1 -2
  67. package/es/components/TreeView/TreeNode.js +2 -2
  68. package/es/components/TreeView/TreeView.d.ts +1 -1
  69. package/es/components/UIShell/HeaderPanel.d.ts +1 -1
  70. package/es/components/UIShell/HeaderPanel.js +4 -2
  71. package/es/components/UIShell/SideNav.js +3 -3
  72. package/es/components/UIShell/Switcher.d.ts +1 -1
  73. package/es/components/UIShell/Switcher.js +1 -1
  74. package/es/feature-flags.js +2 -2
  75. package/es/internal/FloatingMenu.js +3 -3
  76. package/lib/components/Accordion/AccordionItem.js +7 -5
  77. package/lib/components/ComboBox/ComboBox.js +3 -3
  78. package/lib/components/ComposedModal/ComposedModal.js +0 -1
  79. package/lib/components/ContainedList/ContainedList.d.ts +1 -1
  80. package/lib/components/ContainedList/ContainedList.js +9 -34
  81. package/lib/components/ContentSwitcher/ContentSwitcher.d.ts +3 -3
  82. package/lib/components/ContentSwitcher/ContentSwitcher.js +1 -2
  83. package/lib/components/DataTable/DataTable.d.ts +6 -2
  84. package/lib/components/DataTable/DataTable.js +3 -1
  85. package/lib/components/DataTable/Table.js +1 -1
  86. package/lib/components/DataTable/TableToolbarSearch.d.ts +11 -2
  87. package/lib/components/DataTable/TableToolbarSearch.js +10 -3
  88. package/lib/components/DataTable/stories/examples/TableToolbarFilter.d.ts +3 -0
  89. package/lib/components/DataTableSkeleton/DataTableSkeleton.d.ts +2 -12
  90. package/lib/components/DataTableSkeleton/DataTableSkeleton.js +1 -8
  91. package/lib/components/DatePicker/DatePicker.js +4 -1
  92. package/lib/components/DatePickerInput/DatePickerInput.d.ts +2 -5
  93. package/lib/components/DatePickerInput/DatePickerInput.js +2 -13
  94. package/lib/components/Dropdown/Dropdown.js +1 -0
  95. package/lib/components/ExpandableSearch/ExpandableSearch.js +2 -1
  96. package/lib/components/ExpandableSearch/index.js +17 -0
  97. package/lib/components/FeatureFlags/index.js +5 -5
  98. package/lib/components/FluidSelect/FluidSelect.d.ts +3 -3
  99. package/lib/components/FluidTextArea/FluidTextArea.d.ts +2 -4
  100. package/lib/components/FluidTextArea/FluidTextArea.js +1 -2
  101. package/lib/components/FluidTimePickerSelect/FluidTimePickerSelect.d.ts +3 -3
  102. package/lib/components/Grid/Column.d.ts +1 -1
  103. package/lib/components/Grid/Column.js +2 -21
  104. package/lib/components/Loading/Loading.d.ts +1 -1
  105. package/lib/components/Loading/Loading.js +3 -1
  106. package/lib/components/Menu/Menu.d.ts +1 -1
  107. package/lib/components/Menu/Menu.js +6 -2
  108. package/lib/components/Menu/MenuItem.js +2 -2
  109. package/lib/components/Modal/Modal.js +0 -1
  110. package/lib/components/MultiSelect/FilterableMultiSelect.js +4 -3
  111. package/lib/components/MultiSelect/MultiSelect.js +5 -8
  112. package/lib/components/MultiSelect/MultiSelectPropTypes.d.ts +6 -8
  113. package/lib/components/MultiSelect/tools/sorting.d.ts +16 -9
  114. package/lib/components/MultiSelect/tools/sorting.js +10 -14
  115. package/lib/components/OverflowMenu/OverflowMenu.js +1 -0
  116. package/lib/components/OverflowMenuItem/OverflowMenuItem.d.ts +5 -1
  117. package/lib/components/OverflowMenuItem/OverflowMenuItem.js +12 -2
  118. package/lib/components/Popover/index.js +3 -3
  119. package/lib/components/RadioButtonGroup/RadioButtonGroup.d.ts +1 -1
  120. package/lib/components/RadioButtonGroup/RadioButtonGroup.js +7 -10
  121. package/lib/components/Search/Search.js +3 -2
  122. package/lib/components/Search/utils.d.ts +7 -0
  123. package/lib/components/Search/utils.js +12 -0
  124. package/lib/components/Select/Select.d.ts +2 -2
  125. package/lib/components/Select/Select.js +1 -1
  126. package/lib/components/SelectItem/SelectItem.d.ts +3 -3
  127. package/lib/components/StructuredList/StructuredList.js +2 -2
  128. package/lib/components/Tabs/Tabs.js +9 -4
  129. package/lib/components/Tag/DismissibleTag.d.ts +1 -1
  130. package/lib/components/Tag/DismissibleTag.js +2 -2
  131. package/lib/components/Tag/OperationalTag.d.ts +1 -1
  132. package/lib/components/Tag/OperationalTag.js +2 -2
  133. package/lib/components/Tag/SelectableTag.d.ts +1 -1
  134. package/lib/components/Tag/SelectableTag.js +2 -2
  135. package/lib/components/Tag/Tag.d.ts +1 -1
  136. package/lib/components/Tag/Tag.js +2 -2
  137. package/lib/components/TextArea/TextArea.d.ts +1 -2
  138. package/lib/components/TextArea/TextArea.js +4 -5
  139. package/lib/components/TextInput/ControlledPasswordInput.js +1 -1
  140. package/lib/components/TimePickerSelect/TimePickerSelect.d.ts +4 -4
  141. package/lib/components/Toggletip/index.js +1 -2
  142. package/lib/components/TreeView/TreeNode.js +2 -2
  143. package/lib/components/TreeView/TreeView.d.ts +1 -1
  144. package/lib/components/UIShell/HeaderPanel.d.ts +1 -1
  145. package/lib/components/UIShell/HeaderPanel.js +4 -2
  146. package/lib/components/UIShell/SideNav.js +3 -3
  147. package/lib/components/UIShell/Switcher.d.ts +1 -1
  148. package/lib/components/UIShell/Switcher.js +1 -1
  149. package/lib/feature-flags.js +2 -21
  150. package/lib/internal/FloatingMenu.js +3 -22
  151. package/package.json +7 -7
  152. package/telemetry.yml +0 -1
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright IBM Corp. 2016, 2023
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ Object.defineProperty(exports, '__esModule', { value: true });
11
+
12
+ var ExpandableSearch = require('./ExpandableSearch.js');
13
+
14
+
15
+
16
+ exports.ExpandableSearch = ExpandableSearch.default;
17
+ exports.default = ExpandableSearch.default;
@@ -7,7 +7,7 @@
7
7
 
8
8
  'use strict';
9
9
 
10
- var FeatureFlags$1 = require('@carbon/feature-flags');
10
+ var featureFlags = require('@carbon/feature-flags');
11
11
  var PropTypes = require('prop-types');
12
12
  var React = require('react');
13
13
  var deprecate = require('../../prop-types/deprecate.js');
@@ -17,7 +17,7 @@ var deprecate = require('../../prop-types/deprecate.js');
17
17
  * Our FeatureFlagContext is used alongside the FeatureFlags component to enable
18
18
  * or disable feature flags in a given React tree
19
19
  */
20
- const FeatureFlagContext = /*#__PURE__*/React.createContext(FeatureFlags$1.FeatureFlags);
20
+ const FeatureFlagContext = /*#__PURE__*/React.createContext(featureFlags.FeatureFlags);
21
21
 
22
22
  /**
23
23
  * Supports an object of feature flag values with the `flags` prop, merging them
@@ -54,12 +54,12 @@ function FeatureFlags({
54
54
  ...flags
55
55
  };
56
56
  const [scope, updateScope] = React.useState(() => {
57
- const scope = FeatureFlags$1.createScope(combinedFlags);
57
+ const scope = featureFlags.createScope(combinedFlags);
58
58
  scope.mergeWithScope(parentScope);
59
59
  return scope;
60
60
  });
61
61
  if (parentScope !== prevParentScope) {
62
- const scope = FeatureFlags$1.createScope(combinedFlags);
62
+ const scope = featureFlags.createScope(combinedFlags);
63
63
  scope.mergeWithScope(parentScope);
64
64
  updateScope(scope);
65
65
  setPrevParentScope(parentScope);
@@ -69,7 +69,7 @@ function FeatureFlags({
69
69
  // for flags that are passed in. If they have changed, then we re-create the
70
70
  // FeatureFlagScope using the new flags
71
71
  useChangedValue(combinedFlags, isEqual, changedFlags => {
72
- const scope = FeatureFlags$1.createScope(changedFlags);
72
+ const scope = featureFlags.createScope(changedFlags);
73
73
  scope.mergeWithScope(parentScope);
74
74
  updateScope(scope);
75
75
  });
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Copyright IBM Corp. 2022
2
+ * Copyright IBM Corp. 2022, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import React from 'react';
7
+ import React, { type SelectHTMLAttributes } from 'react';
8
8
  export interface FluidSelectProps {
9
9
  /**
10
10
  * Provide the contents of your Select
@@ -17,7 +17,7 @@ export interface FluidSelectProps {
17
17
  /**
18
18
  * Optionally provide the default value of the `<select>`
19
19
  */
20
- defaultValue?: any;
20
+ defaultValue?: SelectHTMLAttributes<HTMLSelectElement>['defaultValue'];
21
21
  /**
22
22
  * Specify whether the control is disabled
23
23
  */
@@ -8,8 +8,7 @@ import PropTypes from 'prop-types';
8
8
  import React from 'react';
9
9
  export interface FluidTextAreaProps {
10
10
  /**
11
- * Provide a custom className that is applied directly to the underlying
12
- * `<textarea>` node
11
+ * Provide a custom className that is applied to the wrapper node
13
12
  */
14
13
  className?: string;
15
14
  /**
@@ -101,8 +100,7 @@ declare const FluidTextArea: {
101
100
  ({ className, ...other }: FluidTextAreaProps): import("react/jsx-runtime").JSX.Element;
102
101
  propTypes: {
103
102
  /**
104
- * Provide a custom className that is applied directly to the underlying
105
- * `<textarea>` node
103
+ * Provide a custom className that is applied to the wrapper node
106
104
  */
107
105
  className: PropTypes.Requireable<string>;
108
106
  /**
@@ -35,8 +35,7 @@ const FluidTextArea = ({
35
35
  };
36
36
  FluidTextArea.propTypes = {
37
37
  /**
38
- * Provide a custom className that is applied directly to the underlying
39
- * `<textarea>` node
38
+ * Provide a custom className that is applied to the wrapper node
40
39
  */
41
40
  className: PropTypes.string,
42
41
  /**
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Copyright IBM Corp. 2022
2
+ * Copyright IBM Corp. 2022, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import React from 'react';
7
+ import React, { type SelectHTMLAttributes } from 'react';
8
8
  export interface FluidTimePickerSelectProps {
9
9
  /**
10
10
  * Provide the contents of your Select
@@ -17,7 +17,7 @@ export interface FluidTimePickerSelectProps {
17
17
  /**
18
18
  * Optionally provide the default value of the `<select>`
19
19
  */
20
- defaultValue?: any;
20
+ defaultValue?: SelectHTMLAttributes<HTMLSelectElement>['defaultValue'];
21
21
  /**
22
22
  * Specify whether the control is disabled
23
23
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2023
2
+ * Copyright IBM Corp. 2016, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -10,32 +10,13 @@
10
10
  Object.defineProperty(exports, '__esModule', { value: true });
11
11
 
12
12
  var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
13
- var FeatureFlags = require('@carbon/feature-flags');
13
+ var featureFlags = require('@carbon/feature-flags');
14
14
  var cx = require('classnames');
15
15
  var PropTypes = require('prop-types');
16
16
  var React = require('react');
17
17
  var usePrefix = require('../../internal/usePrefix.js');
18
18
  var GridContext = require('./GridContext.js');
19
19
 
20
- function _interopNamespaceDefault(e) {
21
- var n = Object.create(null);
22
- if (e) {
23
- Object.keys(e).forEach(function (k) {
24
- if (k !== 'default') {
25
- var d = Object.getOwnPropertyDescriptor(e, k);
26
- Object.defineProperty(n, k, d.get ? d : {
27
- enumerable: true,
28
- get: function () { return e[k]; }
29
- });
30
- }
31
- });
32
- }
33
- n.default = e;
34
- return Object.freeze(n);
35
- }
36
-
37
- var FeatureFlags__namespace = /*#__PURE__*/_interopNamespaceDefault(FeatureFlags);
38
-
39
20
  // eslint-disable-next-line react/display-name -- https://github.com/carbon-design-system/carbon/issues/20452
40
21
  const Column = /*#__PURE__*/React.forwardRef(({
41
22
  as,
@@ -75,7 +56,7 @@ const Column = /*#__PURE__*/React.forwardRef(({
75
56
  }, rest), children);
76
57
  });
77
58
  const percentSpanType = PropTypes.oneOf(['25%', '50%', '75%', '100%']);
78
- const spanPropType = FeatureFlags__namespace.enabled('enable-css-grid') ? PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.shape({
59
+ const spanPropType = featureFlags.enabled('enable-css-grid') ? PropTypes.oneOfType([PropTypes.bool, PropTypes.number, PropTypes.shape({
79
60
  span: PropTypes.oneOfType([PropTypes.number, percentSpanType]),
80
61
  offset: PropTypes.number,
81
62
  start: PropTypes.number,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2025
2
+ * Copyright IBM Corp. 2016, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -40,7 +40,9 @@ function Loading({
40
40
  className: loadingClassName
41
41
  }), /*#__PURE__*/React.createElement("svg", {
42
42
  className: `${prefix}--loading__svg`,
43
- viewBox: "0 0 100 100"
43
+ viewBox: "0 0 100 100",
44
+ role: "img",
45
+ "aria-label": description
44
46
  }, /*#__PURE__*/React.createElement("title", null, description), small ? /*#__PURE__*/React.createElement("circle", {
45
47
  className: `${prefix}--loading__background`,
46
48
  cx: "50%",
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2023, 2025
2
+ * Copyright IBM Corp. 2023, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -86,10 +86,14 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu({
86
86
  }
87
87
  function handleOpen() {
88
88
  if (menu.current) {
89
- focusReturn.current = document.activeElement;
89
+ const {
90
+ activeElement,
91
+ dir
92
+ } = document;
93
+ focusReturn.current = activeElement instanceof HTMLElement ? activeElement : null;
90
94
  if (legacyAutoalign) {
91
95
  const pos = calculatePosition();
92
- if ((document?.dir === 'rtl' || direction === 'rtl') && !rest?.id?.includes('MenuButton')) {
96
+ if ((dir === 'rtl' || direction === 'rtl') && !rest?.id?.includes('MenuButton')) {
93
97
  menu.current.style.insetInlineStart = `initial`;
94
98
  menu.current.style.insetInlineEnd = `${pos[0]}px`;
95
99
  } else {
@@ -71,7 +71,7 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem({
71
71
  const context = React.useContext(MenuContext.MenuContext);
72
72
  const menuItem = React.useRef(null);
73
73
  const ref = useMergedRefs.useMergedRefs([forwardRef, menuItem, refs.setReference]);
74
- const hasChildren = Boolean(children);
74
+ const hasChildren = React.Children.toArray(children).length > 0;
75
75
  const isDisabled = disabled && !hasChildren;
76
76
  const isDanger = kind === 'danger' && !hasChildren;
77
77
  function registerItem() {
@@ -79,7 +79,7 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem({
79
79
  type: 'registerItem',
80
80
  payload: {
81
81
  ref: menuItem,
82
- disabled: Boolean(disabled)
82
+ disabled: disabled ?? false
83
83
  }
84
84
  });
85
85
  }
@@ -162,7 +162,6 @@ const ModalDialog = /*#__PURE__*/React.forwardRef(function ModalDialog({
162
162
  const {
163
163
  target
164
164
  } = evt;
165
- evt.stopPropagation();
166
165
  const shouldCloseOnOutsideClick =
167
166
  // Passive modals can close on clicks outside the modal when
168
167
  // preventCloseOnClickOutside is undefined or explicitly set to false.
@@ -222,7 +222,6 @@ const FilterableMultiSelect = /*#__PURE__*/React.forwardRef(function FilterableM
222
222
  item => !item.disabled);
223
223
 
224
224
  // Sort only non-select-all items, select-all item must stay at the top
225
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- https://github.com/carbon-design-system/carbon/issues/20452
226
225
  const sortedReal = sortItems(nonSelectAllItems, {
227
226
  selectedItems: {
228
227
  top: controlledSelectedItems,
@@ -315,6 +314,7 @@ const FilterableMultiSelect = /*#__PURE__*/React.forwardRef(function FilterableM
315
314
  React.useEffect(() => {
316
315
  const handleClickOutside = event => {
317
316
  const target = event.target;
317
+ if (!(target instanceof Node)) return;
318
318
  const wrapper = document.getElementById(id)?.closest(`.${prefix}--multi-select__wrapper`);
319
319
 
320
320
  // If click is outside our component and menu is open or input is focused
@@ -616,10 +616,11 @@ const FilterableMultiSelect = /*#__PURE__*/React.forwardRef(function FilterableM
616
616
 
617
617
  // Memoize the value of getMenuProps to avoid an infinite loop
618
618
  const menuProps = React.useMemo(() => getMenuProps({
619
- ref: autoAlign ? refs.setFloating : null
619
+ ref: autoAlign ? refs.setFloating : null,
620
+ hidden: !isOpen
620
621
  }, {
621
622
  suppressRefError: true
622
- }), [autoAlign, getMenuProps, refs.setFloating]);
623
+ }), [autoAlign, getMenuProps, isOpen, refs.setFloating]);
623
624
  const handleFocus = evt => {
624
625
  if (evt?.target.classList.contains(`${prefix}--tag__close-icon`) || evt?.target.classList.contains(`${prefix}--list-box__selection`)) {
625
626
  setIsFocused(false);
@@ -426,8 +426,9 @@ const MultiSelect = /*#__PURE__*/React.forwardRef(({
426
426
 
427
427
  // Memoize the value of getMenuProps to avoid an infinite loop
428
428
  const menuProps = React.useMemo(() => getMenuProps({
429
- ref: enableFloatingStyles ? refs.setFloating : null
430
- }), [enableFloatingStyles, getMenuProps, refs.setFloating]);
429
+ ref: enableFloatingStyles ? refs.setFloating : null,
430
+ hidden: !isOpen
431
+ }), [enableFloatingStyles, getMenuProps, isOpen, refs.setFloating]);
431
432
  const allLabelProps = getLabelProps();
432
433
  const labelProps = /*#__PURE__*/React.isValidElement(titleText) ? {
433
434
  id: allLabelProps.id
@@ -474,9 +475,7 @@ const MultiSelect = /*#__PURE__*/React.forwardRef(({
474
475
  }, selectedItems.length > 0 && /*#__PURE__*/React.createElement(index$2.default.Selection, {
475
476
  readOnly: readOnly,
476
477
  clearSelection: !disabled && !readOnly ? clearSelection : noopFn.noopFn,
477
- selectionCount: selectedItemsLength
478
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
479
- ,
478
+ selectionCount: selectedItemsLength,
480
479
  translateWithId: translateWithId,
481
480
  disabled: disabled
482
481
  }), /*#__PURE__*/React.createElement("button", _rollupPluginBabelHelpers.extends({
@@ -495,9 +494,7 @@ const MultiSelect = /*#__PURE__*/React.forwardRef(({
495
494
  translateWithId: translateWithId
496
495
  })), slug ? normalizedDecorator : decorator ? /*#__PURE__*/React.createElement("div", {
497
496
  className: `${prefix}--list-box__inner-wrapper--decorator`
498
- }, normalizedDecorator) : ''), /*#__PURE__*/React.createElement(index$2.default.Menu, menuProps, isOpen &&
499
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- https://github.com/carbon-design-system/carbon/issues/20452
500
- sortItems(filteredItems, sortOptions).map((item, index) => {
497
+ }, normalizedDecorator) : ''), /*#__PURE__*/React.createElement(index$2.default.Menu, menuProps, isOpen && sortItems(filteredItems, sortOptions).map((item, index) => {
501
498
  const {
502
499
  hasIndividualSelections,
503
500
  nonSelectAllSelectedCount,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2023
2
+ * Copyright IBM Corp. 2016, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -34,17 +34,15 @@ export declare const sortingPropTypes: {
34
34
  */
35
35
  sortItems: PropTypes.Requireable<(...args: any[]) => any>;
36
36
  };
37
- interface DownshiftTypedProps<ItemType> {
38
- itemToString?(item: ItemType): string;
39
- }
40
37
  interface SharedOptions {
41
38
  locale: string;
42
39
  }
43
- interface CompareItems {
44
- (itemA: string, itemB: string, options: SharedOptions): number;
45
- }
46
- export interface SortItemsOptions<ItemType> extends SharedOptions, DownshiftTypedProps<ItemType> {
40
+ export type CompareItems = (itemA: string, itemB: string, options: {
41
+ locale: string;
42
+ }) => number;
43
+ export interface SortItemsOptions<ItemType> extends SharedOptions {
47
44
  compareItems: CompareItems;
45
+ itemToString: (item: ItemType) => string;
48
46
  selectedItems: ItemType[];
49
47
  }
50
48
  export interface MultiSelectSortingProps<ItemType> {
@@ -1,9 +1,16 @@
1
- export function defaultCompareItems(itemA: string, itemB: string, { locale }: {
2
- locale: string;
3
- }): number;
4
- export function defaultSortItems(items: any, { selectedItems, itemToString, compareItems, locale }: {
5
- selectedItems?: never[] | undefined;
6
- itemToString: any;
7
- compareItems: any;
8
- locale?: string | undefined;
9
- }): any;
1
+ /**
2
+ * Copyright IBM Corp. 2016, 2026
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import type { CompareItems, SortItemsOptions } from '../MultiSelectPropTypes';
8
+ /**
9
+ * Use `localeCompare` with the `numeric` option enabled to sort two
10
+ * alphanumeric strings.
11
+ */
12
+ export declare const defaultCompareItems: CompareItems;
13
+ /**
14
+ * Default sorting function for options in a selection control.
15
+ */
16
+ export declare const defaultSortItems: <T>(items: T[], { selectedItems, itemToString, compareItems, locale }: SortItemsOptions<T>) => T[];
@@ -7,16 +7,11 @@
7
7
 
8
8
  'use strict';
9
9
 
10
+ const isSelectAllItem = item => typeof item === 'object' && item !== null && 'isSelectAll' in item;
11
+
10
12
  /**
11
- * Use the locale `localeCompare` with the `numeric` option to sort two
12
- * alpha-numeric strings.
13
- *
14
- * @param {string} itemA - The first string to compare.
15
- * @param {string} itemB - The second string to compare.
16
- * @param {object} options - Options for comparing.
17
- * @param {string} options.locale - The locale to use for comparison.
18
- * @returns {number} A negative number if itemA comes before itemB, a positive
19
- * number if itemA comes after itemB, or 0 if they are equal.
13
+ * Use `localeCompare` with the `numeric` option enabled to sort two
14
+ * alphanumeric strings.
20
15
  */
21
16
  const defaultCompareItems = (itemA, itemB, {
22
17
  locale
@@ -25,18 +20,19 @@ const defaultCompareItems = (itemA, itemB, {
25
20
  });
26
21
 
27
22
  /**
28
- * Default sorting algorithm for options in a selection control
23
+ * Default sorting function for options in a selection control.
29
24
  */
30
25
  const defaultSortItems = (items, {
31
- selectedItems = [],
26
+ selectedItems,
32
27
  itemToString,
33
28
  compareItems,
34
- locale = 'en'
29
+ locale
35
30
  }) => {
31
+ // TODO: Should this util mutate items or should that be avoided?
36
32
  return items.sort((itemA, itemB) => {
37
33
  // Always place "select all" option at the beginning
38
- if (itemA.isSelectAll) return -1;
39
- if (itemB.isSelectAll) return 1;
34
+ if (isSelectAllItem(itemA) && itemA.isSelectAll) return -1;
35
+ if (isSelectAllItem(itemB) && itemB.isSelectAll) return 1;
40
36
  const hasItemA = selectedItems.includes(itemA);
41
37
  const hasItemB = selectedItems.includes(itemB);
42
38
  if (hasItemA && !hasItemB) return -1;
@@ -259,6 +259,7 @@ const OverflowMenu = /*#__PURE__*/React.forwardRef(({
259
259
  const focusinEventName = hasFocusin ? 'focusin' : 'focus';
260
260
  hFocusIn.current = on(menuBody.ownerDocument, focusinEventName, event => {
261
261
  const target = event.target;
262
+ if (!(target instanceof Element)) return;
262
263
  const triggerEl = triggerRef.current;
263
264
  if (typeof target.matches === 'function') {
264
265
  if (!menuBody.contains(target) && triggerEl && !target.matches(`.${prefix}--overflow-menu:first-child, .${prefix}--overflow-menu-options:first-child`)) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2025
2
+ * Copyright IBM Corp. 2016, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -14,6 +14,10 @@ export interface OverflowMenuItemProps extends React.HTMLAttributes<HTMLElement>
14
14
  * A callback to tell the parent menu component that the menu should be closed.
15
15
  */
16
16
  closeMenu?: () => void;
17
+ /**
18
+ * Specify the message read by screen readers for the danger overflow menu item variant
19
+ */
20
+ dangerDescription?: string;
17
21
  /**
18
22
  * `true` to make this menu item disabled.
19
23
  */
@@ -19,12 +19,14 @@ var usePrefix = require('../../internal/usePrefix.js');
19
19
  var warning = require('../../internal/warning.js');
20
20
  var Text = require('../Text/Text.js');
21
21
  require('../Text/TextDirection.js');
22
+ var useId = require('../../internal/useId.js');
22
23
 
23
24
  const frFn = React.forwardRef;
24
25
  const OverflowMenuItem = frFn((props, ref) => {
25
26
  const {
26
27
  className,
27
28
  closeMenu,
29
+ dangerDescription = 'danger',
28
30
  disabled = false,
29
31
  handleOverflowMenuItemFocus,
30
32
  hasDivider = false,
@@ -68,13 +70,17 @@ const OverflowMenuItem = frFn((props, ref) => {
68
70
  [`${prefix}--overflow-menu-options__option--disabled`]: disabled
69
71
  }, wrapperClassName);
70
72
  const TagToUse = href ? 'a' : 'button';
73
+ const assistiveId = useId.useId('danger-description');
71
74
  const OverflowMenuItemContent = (() => {
72
75
  if (typeof itemText !== 'string') {
73
76
  return itemText;
74
77
  }
75
- return /*#__PURE__*/React.createElement("div", {
78
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
76
79
  className: `${prefix}--overflow-menu-options__option-content`
77
- }, itemText);
80
+ }, itemText), isDelete && /*#__PURE__*/React.createElement("span", {
81
+ id: assistiveId,
82
+ className: `${prefix}--visually-hidden`
83
+ }, dangerDescription));
78
84
  })();
79
85
  return /*#__PURE__*/React.createElement(Text.Text, {
80
86
  as: "li",
@@ -114,6 +120,10 @@ OverflowMenuItem.propTypes = {
114
120
  * A callback to tell the parent menu component that the menu should be closed.
115
121
  */
116
122
  closeMenu: PropTypes.func,
123
+ /**
124
+ * Specify the message read by screen readers for the danger overflow menu item variant
125
+ */
126
+ dangerDescription: PropTypes.string,
117
127
  /**
118
128
  * `true` to make this menu item disabled.
119
129
  */
@@ -162,7 +162,8 @@ forwardRef) {
162
162
  // Middleware order matters, arrow should be last
163
163
  middleware: [react.offset(!isTabTip ? {
164
164
  alignmentAxis: alignmentAxisOffset,
165
- mainAxis: popoverDimensions?.current?.offset
165
+ // Use 4px spacing when no caret, otherwise use the caret offset
166
+ mainAxis: caret ? popoverDimensions?.current?.offset : 4
166
167
  } : 0), autoAlign && react.flip({
167
168
  fallbackPlacements: isTabTip ? align.includes('bottom') ? ['bottom-start', 'bottom-end', 'top-start', 'top-end'] : ['top-start', 'top-end', 'bottom-start', 'bottom-end'] : align.includes('bottom') ? ['bottom', 'bottom-start', 'bottom-end', 'right', 'right-start', 'right-end', 'left', 'left-start', 'left-end', 'top', 'top-start', 'top-end'] : ['top', 'top-start', 'top-end', 'left', 'left-start', 'left-end', 'right', 'right-start', 'right-end', 'bottom', 'bottom-start', 'bottom-end'],
168
169
  fallbackStrategy: 'initialPlacement',
@@ -299,10 +300,9 @@ forwardRef) {
299
300
  return item;
300
301
  }
301
302
  });
302
- const BaseComponentAsAny = BaseComponent;
303
303
  return /*#__PURE__*/React.createElement(PopoverContext.Provider, {
304
304
  value: value
305
- }, /*#__PURE__*/React.createElement(BaseComponentAsAny, _rollupPluginBabelHelpers.extends({}, rest, {
305
+ }, /*#__PURE__*/React.createElement(BaseComponent, _rollupPluginBabelHelpers.extends({}, rest, {
306
306
  className: className,
307
307
  ref: ref
308
308
  }), enableFloatingStyles || isTabTip ? mappedChildren : children));
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2025
2
+ * Copyright IBM Corp. 2016, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -47,17 +47,14 @@ const RadioButtonGroup = /*#__PURE__*/React.forwardRef((props, ref) => {
47
47
  } = props;
48
48
  const prefix = usePrefix.usePrefix();
49
49
  const [selected, setSelected] = React.useState(valueSelected ?? defaultSelected);
50
- const [prevValueSelected, setPrevValueSelected] = React.useState(valueSelected);
50
+ const prevValueSelected = React.useRef(valueSelected);
51
51
  const radioButtonGroupInstanceId = useId.useId();
52
-
53
- /**
54
- * prop + state alignment - getDerivedStateFromProps
55
- * only update if selected prop changes
56
- */
57
- if (valueSelected !== prevValueSelected) {
58
- setSelected(valueSelected);
59
- setPrevValueSelected(valueSelected);
60
- }
52
+ React.useEffect(() => {
53
+ if (valueSelected !== prevValueSelected.current) {
54
+ setSelected(valueSelected);
55
+ prevValueSelected.current = valueSelected;
56
+ }
57
+ }, [valueSelected]);
61
58
  function getRadioButtons() {
62
59
  const mappedChildren = React.Children.map(children, radioButton => {
63
60
  if (!radioButton) {
@@ -26,6 +26,7 @@ var FormContext = require('../FluidForm/FormContext.js');
26
26
  var noopFn = require('../../internal/noopFn.js');
27
27
  require('../Tooltip/DefinitionTooltip.js');
28
28
  var Tooltip = require('../Tooltip/Tooltip.js');
29
+ var utils = require('./utils.js');
29
30
 
30
31
  var _Close;
31
32
  const Search = /*#__PURE__*/React.forwardRef(({
@@ -51,7 +52,7 @@ const Search = /*#__PURE__*/React.forwardRef(({
51
52
  value,
52
53
  ...rest
53
54
  }, forwardRef) => {
54
- const hasPropValue = Boolean(value || defaultValue);
55
+ const hasPropValue = utils.isSearchValuePresent(value) || utils.isSearchValuePresent(defaultValue);
55
56
  const prefix = usePrefix.usePrefix();
56
57
  const {
57
58
  isFluid
@@ -78,7 +79,7 @@ const Search = /*#__PURE__*/React.forwardRef(({
78
79
  [`${prefix}--search-close--hidden`]: !hasContent || !isExpanded
79
80
  });
80
81
  if (value !== prevValue) {
81
- setHasContent(!!value);
82
+ setHasContent(utils.isSearchValuePresent(value));
82
83
  setPrevValue(value);
83
84
  }
84
85
  function clearInput() {
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Copyright IBM Corp. 2026
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ export declare const isSearchValuePresent: (value: string | number | undefined) => boolean;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright IBM Corp. 2016, 2023
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ const isSearchValuePresent = value => value !== '' && typeof value !== 'undefined';
11
+
12
+ exports.isSearchValuePresent = isSearchValuePresent;
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import React, { type ChangeEventHandler, type ComponentPropsWithRef, type ReactNode } from 'react';
7
+ import React, { type ChangeEventHandler, type ComponentPropsWithRef, type ReactNode, type SelectHTMLAttributes } from 'react';
8
8
  type ExcludedAttributes = 'size';
9
9
  export interface SelectProps extends Omit<ComponentPropsWithRef<'select'>, ExcludedAttributes> {
10
10
  /**
@@ -22,7 +22,7 @@ export interface SelectProps extends Omit<ComponentPropsWithRef<'select'>, Exclu
22
22
  /**
23
23
  * Optionally provide the default value of the `<select>`
24
24
  */
25
- defaultValue?: any;
25
+ defaultValue?: SelectHTMLAttributes<HTMLSelectElement>['defaultValue'];
26
26
  /**
27
27
  * Specify whether the control is disabled
28
28
  */
@@ -38,7 +38,7 @@ const Select = /*#__PURE__*/React.forwardRef(({
38
38
  hideLabel = false,
39
39
  invalid = false,
40
40
  invalidText = '',
41
- helperText = '',
41
+ helperText,
42
42
  light = false,
43
43
  readOnly,
44
44
  size,