@carbon/react 1.84.0 → 1.85.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 (151) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +784 -784
  2. package/es/components/AILabel/index.js +6 -1
  3. package/es/components/Checkbox/Checkbox.d.ts +2 -2
  4. package/es/components/Checkbox/Checkbox.js +8 -8
  5. package/es/components/CheckboxGroup/CheckboxGroup.d.ts +2 -2
  6. package/es/components/CheckboxGroup/CheckboxGroup.js +9 -8
  7. package/es/components/CodeSnippet/CodeSnippet.js +2 -4
  8. package/es/components/ComboBox/ComboBox.d.ts +1 -1
  9. package/es/components/ComboBox/ComboBox.js +8 -7
  10. package/es/components/ComposedModal/ComposedModal.d.ts +1 -1
  11. package/es/components/ComposedModal/ComposedModal.js +15 -10
  12. package/es/components/ContainedList/ContainedList.d.ts +1 -1
  13. package/es/components/ContainedList/ContainedList.js +4 -2
  14. package/es/components/ContentSwitcher/ContentSwitcher.js +6 -5
  15. package/es/components/DataTable/DataTable.js +3 -0
  16. package/es/components/DataTable/TableDecoratorRow.d.ts +2 -2
  17. package/es/components/DataTable/TableDecoratorRow.js +8 -8
  18. package/es/components/DataTable/TableExpandRow.d.ts +1 -1
  19. package/es/components/DataTable/TableExpandRow.js +15 -6
  20. package/es/components/DataTable/TableHeader.js +10 -10
  21. package/es/components/DataTable/TableRow.js +12 -4
  22. package/es/components/DataTable/tools/normalize.js +2 -1
  23. package/es/components/DatePickerInput/DatePickerInput.js +8 -7
  24. package/es/components/Dialog/index.d.ts +5 -1
  25. package/es/components/Dialog/index.js +20 -0
  26. package/es/components/Dropdown/Dropdown.d.ts +1 -1
  27. package/es/components/Dropdown/Dropdown.js +8 -10
  28. package/es/components/FileUploader/FileUploaderButton.js +2 -2
  29. package/es/components/FileUploader/FileUploaderDropContainer.js +2 -2
  30. package/es/components/FileUploader/FileUploaderItem.js +2 -2
  31. package/es/components/Layer/index.d.ts +1 -3
  32. package/es/components/Layer/index.js +9 -8
  33. package/es/components/Menu/Menu.js +0 -6
  34. package/es/components/Modal/Modal.d.ts +2 -2
  35. package/es/components/Modal/Modal.js +20 -9
  36. package/es/components/MultiSelect/FilterableMultiSelect.d.ts +1 -1
  37. package/es/components/MultiSelect/FilterableMultiSelect.js +8 -7
  38. package/es/components/MultiSelect/MultiSelect.d.ts +1 -1
  39. package/es/components/MultiSelect/MultiSelect.js +8 -7
  40. package/es/components/NumberInput/NumberInput.d.ts +1 -1
  41. package/es/components/NumberInput/NumberInput.js +9 -8
  42. package/es/components/PageHeader/PageHeader.js +2 -2
  43. package/es/components/Popover/index.js +2 -1
  44. package/es/components/RadioButton/RadioButton.d.ts +2 -2
  45. package/es/components/RadioButton/RadioButton.js +8 -8
  46. package/es/components/RadioButtonGroup/RadioButtonGroup.d.ts +2 -2
  47. package/es/components/RadioButtonGroup/RadioButtonGroup.js +9 -8
  48. package/es/components/RadioTile/RadioTile.d.ts +1 -1
  49. package/es/components/RadioTile/RadioTile.js +8 -7
  50. package/es/components/Select/Select.d.ts +2 -2
  51. package/es/components/Select/Select.js +8 -7
  52. package/es/components/Tag/DismissibleTag.d.ts +1 -1
  53. package/es/components/Tag/DismissibleTag.js +9 -8
  54. package/es/components/Tag/Tag.d.ts +1 -1
  55. package/es/components/Tag/Tag.js +9 -8
  56. package/es/components/TextArea/TextArea.js +8 -7
  57. package/es/components/TextInput/TextInput.d.ts +1 -1
  58. package/es/components/TextInput/TextInput.js +20 -9
  59. package/es/components/Tile/Tile.d.ts +2 -2
  60. package/es/components/Tile/Tile.js +30 -36
  61. package/es/components/Toggletip/index.js +2 -2
  62. package/es/components/Tooltip/DefinitionTooltip.js +1 -0
  63. package/es/components/TreeView/TreeNode.js +3 -3
  64. package/es/components/TreeView/TreeView.js +3 -3
  65. package/es/components/UIShell/Content.d.ts +5 -3
  66. package/es/components/UIShell/HeaderPanel.d.ts +2 -2
  67. package/es/components/UIShell/HeaderPanel.js +9 -5
  68. package/es/internal/Selection.js +8 -3
  69. package/es/internal/environment.js +1 -12
  70. package/es/internal/{__mocks__/mockHTMLElement.d.ts → index.d.ts} +2 -4
  71. package/es/internal/useResizeObserver.d.ts +1 -1
  72. package/es/internal/utils.d.ts +14 -0
  73. package/es/internal/utils.js +18 -0
  74. package/es/tools/uniqueId.d.ts +1 -6
  75. package/lib/components/AILabel/index.js +6 -1
  76. package/lib/components/Checkbox/Checkbox.d.ts +2 -2
  77. package/lib/components/Checkbox/Checkbox.js +7 -7
  78. package/lib/components/CheckboxGroup/CheckboxGroup.d.ts +2 -2
  79. package/lib/components/CheckboxGroup/CheckboxGroup.js +8 -7
  80. package/lib/components/CodeSnippet/CodeSnippet.js +2 -4
  81. package/lib/components/ComboBox/ComboBox.d.ts +1 -1
  82. package/lib/components/ComboBox/ComboBox.js +11 -10
  83. package/lib/components/ComposedModal/ComposedModal.d.ts +1 -1
  84. package/lib/components/ComposedModal/ComposedModal.js +16 -11
  85. package/lib/components/ContainedList/ContainedList.d.ts +1 -1
  86. package/lib/components/ContainedList/ContainedList.js +4 -2
  87. package/lib/components/ContentSwitcher/ContentSwitcher.js +5 -4
  88. package/lib/components/DataTable/DataTable.js +3 -0
  89. package/lib/components/DataTable/TableDecoratorRow.d.ts +2 -2
  90. package/lib/components/DataTable/TableDecoratorRow.js +8 -8
  91. package/lib/components/DataTable/TableExpandRow.d.ts +1 -1
  92. package/lib/components/DataTable/TableExpandRow.js +14 -5
  93. package/lib/components/DataTable/TableHeader.js +9 -9
  94. package/lib/components/DataTable/TableRow.js +11 -3
  95. package/lib/components/DataTable/tools/normalize.js +2 -1
  96. package/lib/components/DatePickerInput/DatePickerInput.js +7 -6
  97. package/lib/components/Dialog/index.d.ts +5 -1
  98. package/lib/components/Dialog/index.js +20 -0
  99. package/lib/components/Dropdown/Dropdown.d.ts +1 -1
  100. package/lib/components/Dropdown/Dropdown.js +12 -14
  101. package/lib/components/FileUploader/FileUploaderButton.js +2 -2
  102. package/lib/components/FileUploader/FileUploaderDropContainer.js +2 -2
  103. package/lib/components/FileUploader/FileUploaderItem.js +2 -2
  104. package/lib/components/Layer/index.d.ts +1 -3
  105. package/lib/components/Layer/index.js +9 -8
  106. package/lib/components/Menu/Menu.js +0 -6
  107. package/lib/components/Modal/Modal.d.ts +2 -2
  108. package/lib/components/Modal/Modal.js +28 -17
  109. package/lib/components/MultiSelect/FilterableMultiSelect.d.ts +1 -1
  110. package/lib/components/MultiSelect/FilterableMultiSelect.js +12 -11
  111. package/lib/components/MultiSelect/MultiSelect.d.ts +1 -1
  112. package/lib/components/MultiSelect/MultiSelect.js +13 -12
  113. package/lib/components/NumberInput/NumberInput.d.ts +1 -1
  114. package/lib/components/NumberInput/NumberInput.js +8 -7
  115. package/lib/components/PageHeader/PageHeader.js +2 -2
  116. package/lib/components/Popover/index.js +2 -1
  117. package/lib/components/RadioButton/RadioButton.d.ts +2 -2
  118. package/lib/components/RadioButton/RadioButton.js +7 -7
  119. package/lib/components/RadioButtonGroup/RadioButtonGroup.d.ts +2 -2
  120. package/lib/components/RadioButtonGroup/RadioButtonGroup.js +10 -9
  121. package/lib/components/RadioTile/RadioTile.d.ts +1 -1
  122. package/lib/components/RadioTile/RadioTile.js +7 -6
  123. package/lib/components/Select/Select.d.ts +2 -2
  124. package/lib/components/Select/Select.js +7 -6
  125. package/lib/components/Tag/DismissibleTag.d.ts +1 -1
  126. package/lib/components/Tag/DismissibleTag.js +8 -7
  127. package/lib/components/Tag/Tag.d.ts +1 -1
  128. package/lib/components/Tag/Tag.js +8 -7
  129. package/lib/components/TextArea/TextArea.js +7 -6
  130. package/lib/components/TextInput/TextInput.d.ts +1 -1
  131. package/lib/components/TextInput/TextInput.js +19 -8
  132. package/lib/components/Tile/Tile.d.ts +2 -2
  133. package/lib/components/Tile/Tile.js +29 -35
  134. package/lib/components/Toggletip/index.js +2 -2
  135. package/lib/components/Tooltip/DefinitionTooltip.js +1 -0
  136. package/lib/components/TreeView/TreeNode.js +3 -3
  137. package/lib/components/TreeView/TreeView.js +3 -3
  138. package/lib/components/UIShell/Content.d.ts +5 -3
  139. package/lib/components/UIShell/HeaderPanel.d.ts +2 -2
  140. package/lib/components/UIShell/HeaderPanel.js +8 -4
  141. package/lib/internal/Selection.js +8 -3
  142. package/lib/internal/environment.js +1 -12
  143. package/lib/internal/{__mocks__/mockHTMLElement.d.ts → index.d.ts} +2 -4
  144. package/lib/internal/useResizeObserver.d.ts +1 -1
  145. package/lib/internal/utils.d.ts +14 -0
  146. package/lib/internal/utils.js +22 -0
  147. package/lib/tools/uniqueId.d.ts +1 -6
  148. package/package.json +11 -20
  149. package/telemetry.yml +1 -0
  150. package/es/tools/uniqueId.js +0 -14
  151. package/lib/tools/uniqueId.js +0 -18
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2023
2
+ * Copyright IBM Corp. 2016, 2025
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, { ReactNode } from 'react';
7
+ import React, { type ReactNode } from 'react';
8
8
  import type { RadioButtonProps } from '../RadioButton';
9
9
  export declare const RadioButtonGroupContext: React.Context<null>;
10
10
  type ExcludedAttributes = 'onChange';
@@ -13,12 +13,14 @@ var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelper
13
13
  var PropTypes = require('prop-types');
14
14
  var React = require('react');
15
15
  var cx = require('classnames');
16
- var index = require('../Text/index.js');
16
+ var index$1 = require('../Text/index.js');
17
17
  var usePrefix = require('../../internal/usePrefix.js');
18
18
  var iconsReact = require('@carbon/icons-react');
19
19
  var deprecate = require('../../prop-types/deprecate.js');
20
20
  var mergeRefs = require('../../tools/mergeRefs.js');
21
21
  var useId = require('../../internal/useId.js');
22
+ var index = require('../AILabel/index.js');
23
+ var utils = require('../../internal/utils.js');
22
24
 
23
25
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
24
26
 
@@ -113,13 +115,12 @@ const RadioButtonGroup = /*#__PURE__*/React__default["default"].forwardRef((prop
113
115
  const divRef = React.useRef(null);
114
116
 
115
117
  // AILabel is always size `mini`
116
- let normalizedDecorator = /*#__PURE__*/React__default["default"].isValidElement(slug ?? decorator) ? slug ?? decorator : null;
117
- if (normalizedDecorator && normalizedDecorator['type']?.displayName === 'AILabel') {
118
- normalizedDecorator = /*#__PURE__*/React__default["default"].cloneElement(normalizedDecorator, {
119
- size: 'mini',
120
- kind: 'default'
121
- });
122
- }
118
+ const candidate = slug ?? decorator;
119
+ const candidateIsAILabel = utils.isComponentElement(candidate, index.AILabel);
120
+ const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
121
+ size: 'mini',
122
+ kind: 'default'
123
+ }) : null;
123
124
  return /*#__PURE__*/React__default["default"].createElement("div", {
124
125
  className: wrapperClasses,
125
126
  ref: mergeRefs["default"](divRef, ref)
@@ -128,7 +129,7 @@ const RadioButtonGroup = /*#__PURE__*/React__default["default"].forwardRef((prop
128
129
  disabled: disabled,
129
130
  "data-invalid": invalid ? true : undefined,
130
131
  "aria-describedby": showHelper && helperText ? helperId : undefined
131
- }, rest), legendText && /*#__PURE__*/React__default["default"].createElement(index.Legend, {
132
+ }, rest), legendText && /*#__PURE__*/React__default["default"].createElement(index$1.Legend, {
132
133
  className: `${prefix}--label`
133
134
  }, legendText, slug ? normalizedDecorator : decorator ? /*#__PURE__*/React__default["default"].createElement("div", {
134
135
  className: `${prefix}--radio-button-group-inner--decorator`
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2023
2
+ * Copyright IBM Corp. 2016, 2025
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.
@@ -22,6 +22,8 @@ var deprecate = require('../../prop-types/deprecate.js');
22
22
  var noopFn = require('../../internal/noopFn.js');
23
23
  require('../Text/index.js');
24
24
  var index = require('../FeatureFlags/index.js');
25
+ var index$1 = require('../AILabel/index.js');
26
+ var utils = require('../../internal/utils.js');
25
27
  var Text = require('../Text/Text.js');
26
28
 
27
29
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -82,12 +84,11 @@ const RadioTile = /*#__PURE__*/React__default["default"].forwardRef(function Rad
82
84
  }
83
85
 
84
86
  // AILabel is always size `xs`
85
- let normalizedDecorator = /*#__PURE__*/React__default["default"].isValidElement(slug ?? decorator) ? slug ?? decorator : null;
86
- if (normalizedDecorator && normalizedDecorator['type']?.displayName === 'AILabel') {
87
- normalizedDecorator = /*#__PURE__*/React__default["default"].cloneElement(normalizedDecorator, {
88
- size: 'xs'
89
- });
90
- }
87
+ const candidate = slug ?? decorator;
88
+ const candidateIsAILabel = utils.isComponentElement(candidate, index$1.AILabel);
89
+ const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
90
+ size: 'xs'
91
+ }) : null;
91
92
  return /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement("input", {
92
93
  checked: checked,
93
94
  className: `${prefix}--tile-input`,
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2023
2
+ * Copyright IBM Corp. 2016, 2025
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, { ChangeEventHandler, ComponentPropsWithRef, ReactNode } from 'react';
7
+ import React, { type ChangeEventHandler, type ComponentPropsWithRef, type ReactNode } from 'react';
8
8
  type ExcludedAttributes = 'size';
9
9
  export interface SelectProps extends Omit<ComponentPropsWithRef<'select'>, ExcludedAttributes> {
10
10
  /**
@@ -21,6 +21,8 @@ var FormContext = require('../FluidForm/FormContext.js');
21
21
  var useId = require('../../internal/useId.js');
22
22
  var events = require('../../tools/events.js');
23
23
  require('../Text/index.js');
24
+ var index = require('../AILabel/index.js');
25
+ var utils = require('../../internal/utils.js');
24
26
  var Text = require('../Text/Text.js');
25
27
 
26
28
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -144,12 +146,11 @@ const Select = /*#__PURE__*/React__default["default"].forwardRef(function Select
144
146
  };
145
147
 
146
148
  // AILabel always size `mini`
147
- let normalizedDecorator = /*#__PURE__*/React__default["default"].isValidElement(slug ?? decorator) ? slug ?? decorator : null;
148
- if (normalizedDecorator && normalizedDecorator['type']?.displayName === 'AILabel') {
149
- normalizedDecorator = /*#__PURE__*/React__default["default"].cloneElement(normalizedDecorator, {
150
- size: 'mini'
151
- });
152
- }
149
+ const candidate = slug ?? decorator;
150
+ const candidateIsAILabel = utils.isComponentElement(candidate, index.AILabel);
151
+ const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
152
+ size: 'mini'
153
+ }) : null;
153
154
  const input = (() => {
154
155
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("select", _rollupPluginBabelHelpers["extends"]({}, other, ariaProps, {
155
156
  id: id,
@@ -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, { ReactNode } from 'react';
7
+ import React, { type ReactNode } from 'react';
8
8
  import { PolymorphicProps } from '../../types/common';
9
9
  import { SIZES, TYPES } from './Tag';
10
10
  export interface DismissibleTagBaseProps {
@@ -23,6 +23,8 @@ var Tooltip = require('../Tooltip/Tooltip.js');
23
23
  require('../Text/index.js');
24
24
  var isEllipsisActive = require('./isEllipsisActive.js');
25
25
  var mergeRefs = require('../../tools/mergeRefs.js');
26
+ var index = require('../AILabel/index.js');
27
+ var utils = require('../../internal/utils.js');
26
28
  var Text = require('../Text/Text.js');
27
29
 
28
30
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -64,13 +66,12 @@ const DismissibleTag = /*#__PURE__*/React.forwardRef(({
64
66
  onClose(event);
65
67
  }
66
68
  };
67
- let normalizedDecorator = /*#__PURE__*/React__default["default"].isValidElement(slug ?? decorator) ? slug ?? decorator : null;
68
- if (normalizedDecorator && normalizedDecorator['type']?.displayName === 'AILabel') {
69
- normalizedDecorator = /*#__PURE__*/React__default["default"].cloneElement(normalizedDecorator, {
70
- size: 'sm',
71
- kind: 'inline'
72
- });
73
- }
69
+ const candidate = slug ?? decorator;
70
+ const candidateIsAILabel = utils.isComponentElement(candidate, index.AILabel);
71
+ const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
72
+ size: 'sm',
73
+ kind: 'inline'
74
+ }) : null;
74
75
  const tooltipClasses = cx__default["default"](`${prefix}--icon-tooltip`, `${prefix}--tag-label-tooltip`);
75
76
 
76
77
  // Removing onClick from the spread operator
@@ -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, { ReactNode } from 'react';
7
+ import React, { type ReactNode } from 'react';
8
8
  import { PolymorphicComponentPropWithRef } from '../../internal/PolymorphicProps';
9
9
  import { SelectableTagBaseProps } from './SelectableTag';
10
10
  import { OperationalTagBaseProps } from './OperationalTag';
@@ -22,6 +22,8 @@ var DefinitionTooltip = require('../Tooltip/DefinitionTooltip.js');
22
22
  require('../Tooltip/Tooltip.js');
23
23
  var isEllipsisActive = require('./isEllipsisActive.js');
24
24
  var useMergedRefs = require('../../internal/useMergedRefs.js');
25
+ var index = require('../AILabel/index.js');
26
+ var utils = require('../../internal/utils.js');
25
27
  var Text = require('../Text/Text.js');
26
28
 
27
29
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -104,13 +106,12 @@ const TagBase = /*#__PURE__*/React__default["default"].forwardRef(({
104
106
  };
105
107
 
106
108
  // AILabel is always size `sm` and `inline`
107
- let normalizedDecorator = /*#__PURE__*/React__default["default"].isValidElement(slug ?? decorator) ? slug ?? decorator : null;
108
- if (normalizedDecorator && normalizedDecorator['type']?.displayName === 'AILabel' && !isInteractiveTag) {
109
- normalizedDecorator = /*#__PURE__*/React__default["default"].cloneElement(normalizedDecorator, {
110
- size: 'sm',
111
- kind: 'inline'
112
- });
113
- }
109
+ const candidate = slug ?? decorator;
110
+ const candidateIsAILabel = utils.isComponentElement(candidate, index.AILabel);
111
+ const normalizedDecorator = candidateIsAILabel && !isInteractiveTag ? /*#__PURE__*/React.cloneElement(candidate, {
112
+ size: 'sm',
113
+ kind: 'inline'
114
+ }) : null;
114
115
  if (filter) {
115
116
  const ComponentTag = BaseComponent ?? 'div';
116
117
  return /*#__PURE__*/React__default["default"].createElement(ComponentTag, _rollupPluginBabelHelpers["extends"]({
@@ -24,6 +24,8 @@ var useMergedRefs = require('../../internal/useMergedRefs.js');
24
24
  var useId = require('../../internal/useId.js');
25
25
  var noopFn = require('../../internal/noopFn.js');
26
26
  require('../Text/index.js');
27
+ var index = require('../AILabel/index.js');
28
+ var utils = require('../../internal/utils.js');
27
29
  var Text = require('../Text/Text.js');
28
30
 
29
31
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -268,12 +270,11 @@ const TextArea = frFn((props, forwardRef) => {
268
270
  }));
269
271
 
270
272
  // AILabel is always size `mini`
271
- let normalizedDecorator = /*#__PURE__*/React__default["default"].isValidElement(slug ?? decorator) ? slug ?? decorator : null;
272
- if (normalizedDecorator && normalizedDecorator['type']?.displayName === 'AILabel') {
273
- normalizedDecorator = /*#__PURE__*/React__default["default"].cloneElement(normalizedDecorator, {
274
- size: 'mini'
275
- });
276
- }
273
+ const candidate = slug ?? decorator;
274
+ const candidateIsAILabel = utils.isComponentElement(candidate, index.AILabel);
275
+ const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
276
+ size: 'mini'
277
+ }) : null;
277
278
  return /*#__PURE__*/React__default["default"].createElement("div", {
278
279
  className: formItemClasses
279
280
  }, /*#__PURE__*/React__default["default"].createElement("div", {
@@ -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, { ReactNode } from 'react';
7
+ import React, { type ReactNode } from 'react';
8
8
  type ExcludedAttributes = 'defaultValue' | 'id' | 'size' | 'value';
9
9
  export interface TextInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, ExcludedAttributes> {
10
10
  /**
@@ -17,9 +17,12 @@ var deprecate = require('../../prop-types/deprecate.js');
17
17
  var util = require('./util.js');
18
18
  require('../FluidForm/FluidForm.js');
19
19
  var FormContext = require('../FluidForm/FormContext.js');
20
+ var useMergedRefs = require('../../internal/useMergedRefs.js');
20
21
  var usePrefix = require('../../internal/usePrefix.js');
21
22
  var getAnnouncement = require('../../internal/getAnnouncement.js');
22
23
  require('../Text/index.js');
24
+ var index = require('../AILabel/index.js');
25
+ var utils = require('../../internal/utils.js');
23
26
  var Text = require('../Text/Text.js');
24
27
 
25
28
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -58,7 +61,16 @@ const TextInput = /*#__PURE__*/React__default["default"].forwardRef(function Tex
58
61
  defaultValue,
59
62
  value
60
63
  } = rest;
61
- const [textCount, setTextCount] = React.useState(defaultValue?.toString().length || value?.toString().length || 0);
64
+ const inputRef = React.useRef(null);
65
+ const mergedRef = useMergedRefs.useMergedRefs([ref, inputRef]);
66
+ function getInitialTextCount() {
67
+ const targetValue = defaultValue || value || inputRef.current?.value || '';
68
+ return targetValue.toString().length;
69
+ }
70
+ const [textCount, setTextCount] = React.useState(getInitialTextCount());
71
+ React.useEffect(() => {
72
+ setTextCount(getInitialTextCount());
73
+ }, [value, defaultValue, enableCounter]);
62
74
  const normalizedProps = useNormalizedInputProps.useNormalizedInputProps({
63
75
  id,
64
76
  readOnly,
@@ -91,7 +103,7 @@ const TextInput = /*#__PURE__*/React__default["default"].forwardRef(function Tex
91
103
  },
92
104
  placeholder,
93
105
  type,
94
- ref,
106
+ ref: mergedRef,
95
107
  className: textInputClasses,
96
108
  title: placeholder,
97
109
  disabled: normalizedProps.disabled,
@@ -189,12 +201,11 @@ const TextInput = /*#__PURE__*/React__default["default"].forwardRef(function Tex
189
201
  const Icon = normalizedProps.icon;
190
202
 
191
203
  // AILabel is always size `mini`
192
- let normalizedDecorator = /*#__PURE__*/React__default["default"].isValidElement(slug ?? decorator) ? slug ?? decorator : null;
193
- if (normalizedDecorator && normalizedDecorator['type']?.displayName === 'AILabel') {
194
- normalizedDecorator = /*#__PURE__*/React__default["default"].cloneElement(normalizedDecorator, {
195
- size: 'mini'
196
- });
197
- }
204
+ const candidate = slug ?? decorator;
205
+ const candidateIsAILabel = utils.isComponentElement(candidate, index.AILabel);
206
+ const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
207
+ size: 'mini'
208
+ }) : null;
198
209
  return /*#__PURE__*/React__default["default"].createElement("div", {
199
210
  className: inputWrapperClasses
200
211
  }, !inline ? labelWrapper : /*#__PURE__*/React__default["default"].createElement("div", {
@@ -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 ChangeEvent, type HTMLAttributes, type KeyboardEvent, type MouseEvent, type ReactNode } from 'react';
7
+ import React, { type HTMLAttributes, type KeyboardEvent, type MouseEvent, type ReactNode } from 'react';
8
8
  export interface TileProps extends HTMLAttributes<HTMLDivElement> {
9
9
  children?: ReactNode;
10
10
  className?: string;
@@ -105,7 +105,7 @@ export interface SelectableTileProps extends HTMLAttributes<HTMLDivElement> {
105
105
  /**
106
106
  * The empty handler of the `<input>`.
107
107
  */
108
- onChange?(event: ChangeEvent<HTMLDivElement>, selected?: boolean, id?: string): void;
108
+ onChange?(event: MouseEvent<HTMLDivElement> | KeyboardEvent<HTMLDivElement>, selected?: boolean, id?: string): void;
109
109
  /**
110
110
  * Specify the function to run when the SelectableTile is clicked
111
111
  */
@@ -26,6 +26,8 @@ var useMergedRefs = require('../../internal/useMergedRefs.js');
26
26
  var index = require('../FeatureFlags/index.js');
27
27
  var useId = require('../../internal/useId.js');
28
28
  require('../Text/index.js');
29
+ var index$1 = require('../AILabel/index.js');
30
+ var utils = require('../../internal/utils.js');
29
31
  var Text = require('../Text/Text.js');
30
32
 
31
33
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -234,7 +236,11 @@ const SelectableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
234
236
  const clickHandler = onClick;
235
237
  const keyDownHandler = onKeyDown;
236
238
  const [isSelected, setIsSelected] = React.useState(selected);
237
- const [prevSelected, setPrevSelected] = React.useState(selected);
239
+
240
+ // Use useEffect to sync with prop changes instead of render-time logic
241
+ React.useEffect(() => {
242
+ setIsSelected(selected);
243
+ }, [selected]);
238
244
  const classes = cx__default["default"](`${prefix}--tile`, `${prefix}--tile--selectable`, {
239
245
  [`${prefix}--tile--is-selected`]: isSelected,
240
246
  [`${prefix}--tile--light`]: light,
@@ -244,50 +250,40 @@ const SelectableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
244
250
  [`${prefix}--tile--decorator`]: decorator,
245
251
  [`${prefix}--tile--decorator-rounded`]: decorator && hasRoundedCorners
246
252
  }, className);
253
+
254
+ // Single function to handle selection changes
255
+ const handleSelectionChange = React.useCallback((evt, newSelected) => {
256
+ setIsSelected(newSelected);
257
+ onChange(evt, newSelected, id);
258
+ }, [onChange, id]);
247
259
  function handleClick(evt) {
248
260
  evt.preventDefault();
249
261
  evt?.persist?.();
250
- if (normalizedDecorator && decoratorRef.current && decoratorRef.current.contains(evt.target)) {
262
+ if (normalizedDecorator && decoratorRef.current && evt.target instanceof Node && decoratorRef.current.contains(evt.target)) {
251
263
  return;
252
264
  }
253
- setIsSelected(prevSelected => {
254
- const newSelected = !prevSelected;
255
- onChange(evt, newSelected, id);
256
- return newSelected;
257
- });
265
+ const newSelected = !isSelected;
266
+ handleSelectionChange(evt, newSelected);
258
267
  clickHandler(evt);
259
268
  }
260
269
  function handleKeyDown(evt) {
261
270
  evt?.persist?.();
262
271
  if (match.matches(evt, [keys.Enter, keys.Space])) {
263
272
  evt.preventDefault();
264
- setIsSelected(prevSelected => {
265
- const newSelected = !prevSelected;
266
- onChange(evt, newSelected, id);
267
- return newSelected;
268
- });
273
+ const newSelected = !isSelected;
274
+ handleSelectionChange(evt, newSelected);
269
275
  }
270
276
  keyDownHandler(evt);
271
277
  }
272
- function handleChange(event) {
273
- const newSelected = event.target.checked;
274
- setIsSelected(newSelected);
275
- onChange(event, newSelected, id);
276
- }
277
- if (selected !== prevSelected) {
278
- setIsSelected(selected);
279
- setPrevSelected(selected);
280
- }
281
278
 
282
279
  // AILabel is always size `xs`
283
280
  const decoratorRef = React.useRef(null);
284
- let normalizedDecorator = /*#__PURE__*/React__default["default"].isValidElement(slug ?? decorator) ? slug ?? decorator : null;
285
- if (normalizedDecorator && normalizedDecorator['type']?.displayName === 'AILabel') {
286
- normalizedDecorator = /*#__PURE__*/React__default["default"].cloneElement(normalizedDecorator, {
287
- size: 'xs',
288
- ref: decoratorRef
289
- });
290
- }
281
+ const candidate = slug ?? decorator;
282
+ const candidateIsAILabel = utils.isComponentElement(candidate, index$1.AILabel);
283
+ const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
284
+ size: 'xs',
285
+ ref: decoratorRef
286
+ }) : null;
291
287
  return (
292
288
  /*#__PURE__*/
293
289
  // eslint-disable-next-line jsx-a11y/interactive-supports-focus
@@ -302,7 +298,6 @@ const SelectableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
302
298
  tabIndex: !disabled ? tabIndex : undefined,
303
299
  ref: ref,
304
300
  id: id,
305
- onChange: !disabled ? handleChange : undefined,
306
301
  title: title
307
302
  }, rest), /*#__PURE__*/React__default["default"].createElement("span", {
308
303
  className: `${prefix}--tile__checkmark ${prefix}--tile__checkmark--persistent`
@@ -515,12 +510,11 @@ const ExpandableTile = /*#__PURE__*/React__default["default"].forwardRef(functio
515
510
  const belowTheFoldId = useId.useId('expandable-tile-interactive');
516
511
 
517
512
  // AILabel is always size `xs`
518
- let normalizedDecorator = /*#__PURE__*/React__default["default"].isValidElement(slug ?? decorator) ? slug ?? decorator : null;
519
- if (normalizedDecorator && normalizedDecorator['type']?.displayName === 'AILabel') {
520
- normalizedDecorator = /*#__PURE__*/React__default["default"].cloneElement(normalizedDecorator, {
521
- size: 'xs'
522
- });
523
- }
513
+ const candidate = slug ?? decorator;
514
+ const candidateIsAILabel = utils.isComponentElement(candidate, index$1.AILabel);
515
+ const normalizedDecorator = candidateIsAILabel ? /*#__PURE__*/React.cloneElement(candidate, {
516
+ size: 'xs'
517
+ }) : null;
524
518
  return interactive ? /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
525
519
  ref: ref,
526
520
  className: interactiveClassNames
@@ -98,6 +98,7 @@ function Toggletip({
98
98
  buttonProps: {
99
99
  'aria-expanded': open,
100
100
  'aria-controls': id,
101
+ 'aria-describedby': open ? id : undefined,
101
102
  onClick: actions.toggle
102
103
  },
103
104
  contentProps: {
@@ -269,8 +270,7 @@ const ToggletipContent = /*#__PURE__*/React__default["default"].forwardRef(funct
269
270
  return /*#__PURE__*/React__default["default"].createElement(index.PopoverContent, _rollupPluginBabelHelpers["extends"]({
270
271
  className: customClassName
271
272
  }, toggletip?.contentProps, {
272
- ref: ref,
273
- "aria-live": "polite"
273
+ ref: ref
274
274
  }), /*#__PURE__*/React__default["default"].createElement("div", {
275
275
  className: `${prefix}--toggletip-content`
276
276
  }, children));
@@ -67,6 +67,7 @@ const DefinitionTooltip = ({
67
67
  }, /*#__PURE__*/React__default["default"].createElement("button", _rollupPluginBabelHelpers["extends"]({}, rest, {
68
68
  className: cx__default["default"](`${prefix}--definition-term`, triggerClassName),
69
69
  "aria-controls": tooltipId,
70
+ "aria-describedby": tooltipId,
70
71
  "aria-expanded": isOpen,
71
72
  onBlur: () => {
72
73
  setOpen(false);
@@ -18,7 +18,7 @@ var keys = require('../../internal/keyboard/keys.js');
18
18
  var match = require('../../internal/keyboard/match.js');
19
19
  var useControllableState = require('../../internal/useControllableState.js');
20
20
  var usePrefix = require('../../internal/usePrefix.js');
21
- var uniqueId = require('../../tools/uniqueId.js');
21
+ var useId = require('../../internal/useId.js');
22
22
  var index = require('../FeatureFlags/index.js');
23
23
 
24
24
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -53,7 +53,7 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef(({
53
53
  const enableTreeviewControllable = index.useFeatureFlag('enable-treeview-controllable');
54
54
  const {
55
55
  current: id
56
- } = React.useRef(nodeId || uniqueId.uniqueId());
56
+ } = React.useRef(nodeId || useId.useId());
57
57
  const controllableExpandedState = useControllableState.useControllableState({
58
58
  value: isExpanded,
59
59
  onChange: newValue => {
@@ -82,7 +82,7 @@ const TreeNode = /*#__PURE__*/React__default["default"].forwardRef(({
82
82
  function enhanceTreeNodes(children) {
83
83
  return React__default["default"].Children.map(children, node => {
84
84
  if (! /*#__PURE__*/React__default["default"].isValidElement(node)) return node;
85
- const isTreeNode = node.type.displayName === 'TreeNode';
85
+ const isTreeNode = node.type === TreeNode;
86
86
  if (isTreeNode) {
87
87
  return /*#__PURE__*/React__default["default"].cloneElement(node, {
88
88
  active,
@@ -17,7 +17,7 @@ var keys = require('../../internal/keyboard/keys.js');
17
17
  var match = require('../../internal/keyboard/match.js');
18
18
  var useControllableState = require('../../internal/useControllableState.js');
19
19
  var usePrefix = require('../../internal/usePrefix.js');
20
- var uniqueId = require('../../tools/uniqueId.js');
20
+ var useId = require('../../internal/useId.js');
21
21
  var index = require('../FeatureFlags/index.js');
22
22
  var TreeNode = require('./TreeNode.js');
23
23
 
@@ -43,7 +43,7 @@ const TreeView = ({
43
43
  const enableTreeviewControllable = index.useFeatureFlag('enable-treeview-controllable');
44
44
  const {
45
45
  current: treeId
46
- } = React.useRef(rest.id || uniqueId.uniqueId());
46
+ } = React.useRef(rest.id || useId.useId());
47
47
  const prefix = usePrefix.usePrefix();
48
48
  const treeClasses = cx__default["default"](className, `${prefix}--tree`, {
49
49
  // @ts-ignore - will always be false according to prop types
@@ -122,7 +122,7 @@ const TreeView = ({
122
122
  function enhanceTreeNodes(children) {
123
123
  return React__default["default"].Children.map(children, child => {
124
124
  if (! /*#__PURE__*/React__default["default"].isValidElement(child)) return child;
125
- const isTreeNode = child.type.displayName === 'TreeNode';
125
+ const isTreeNode = child.type === TreeNode["default"];
126
126
  if (isTreeNode) {
127
127
  const node = child;
128
128
  const sharedNodeProps = {
@@ -75,6 +75,8 @@ declare const Content: {
75
75
  inert?: boolean | undefined;
76
76
  inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined;
77
77
  is?: string | undefined;
78
+ exportparts?: string | undefined;
79
+ part?: string | undefined;
78
80
  "aria-activedescendant"?: string | undefined;
79
81
  "aria-atomic"?: (boolean | "true" | "false") | undefined;
80
82
  "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined;
@@ -149,7 +151,7 @@ declare const Content: {
149
151
  onBlurCapture?: React.FocusEventHandler<HTMLElement> | undefined;
150
152
  onChange?: React.FormEventHandler<HTMLElement> | undefined;
151
153
  onChangeCapture?: React.FormEventHandler<HTMLElement> | undefined;
152
- onBeforeInput?: React.FormEventHandler<HTMLElement> | undefined;
154
+ onBeforeInput?: React.InputEventHandler<HTMLElement> | undefined;
153
155
  onBeforeInputCapture?: React.FormEventHandler<HTMLElement> | undefined;
154
156
  onInput?: React.FormEventHandler<HTMLElement> | undefined;
155
157
  onInputCapture?: React.FormEventHandler<HTMLElement> | undefined;
@@ -199,8 +201,6 @@ declare const Content: {
199
201
  onProgressCapture?: React.ReactEventHandler<HTMLElement> | undefined;
200
202
  onRateChange?: React.ReactEventHandler<HTMLElement> | undefined;
201
203
  onRateChangeCapture?: React.ReactEventHandler<HTMLElement> | undefined;
202
- onResize?: React.ReactEventHandler<HTMLElement> | undefined;
203
- onResizeCapture?: React.ReactEventHandler<HTMLElement> | undefined;
204
204
  onSeeked?: React.ReactEventHandler<HTMLElement> | undefined;
205
205
  onSeekedCapture?: React.ReactEventHandler<HTMLElement> | undefined;
206
206
  onSeeking?: React.ReactEventHandler<HTMLElement> | undefined;
@@ -281,6 +281,8 @@ declare const Content: {
281
281
  onLostPointerCaptureCapture?: React.PointerEventHandler<HTMLElement> | undefined;
282
282
  onScroll?: React.UIEventHandler<HTMLElement> | undefined;
283
283
  onScrollCapture?: React.UIEventHandler<HTMLElement> | undefined;
284
+ onScrollEnd?: React.UIEventHandler<HTMLElement> | undefined;
285
+ onScrollEndCapture?: React.UIEventHandler<HTMLElement> | undefined;
284
286
  onWheel?: React.WheelEventHandler<HTMLElement> | undefined;
285
287
  onWheelCapture?: React.WheelEventHandler<HTMLElement> | undefined;
286
288
  onAnimationStart?: React.AnimationEventHandler<HTMLElement> | undefined;
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Copyright IBM Corp. 2016, 2023
2
+ * Copyright IBM Corp. 2016, 2025
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, { ReactNode } from 'react';
7
+ import React, { type ReactNode } from 'react';
8
8
  export interface HeaderPanelProps {
9
9
  /**
10
10
  * Specify whether focus and blur listeners are added. They are by default.
@@ -18,6 +18,7 @@ var keys = require('../../internal/keyboard/keys.js');
18
18
  var match = require('../../internal/keyboard/match.js');
19
19
  var useEvent = require('../../internal/useEvent.js');
20
20
  var useMergedRefs = require('../../internal/useMergedRefs.js');
21
+ var Switcher = require('./Switcher.js');
21
22
 
22
23
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
23
24
 
@@ -68,10 +69,13 @@ const HeaderPanel = /*#__PURE__*/React__default["default"].forwardRef(function H
68
69
  };
69
70
  }
70
71
  useEvent.useWindowEvent('click', () => {
71
- const focusedElement = document.activeElement;
72
- setLastClickedElement(focusedElement);
73
- const childJsxElement = children;
74
- if (childJsxElement?.type?.displayName === 'Switcher' && !focusedElement?.closest(`.${prefix}--header-panel--expanded`) && !focusedElement?.closest(`.${prefix}--header__action`) && !headerPanelReference?.current?.classList.contains(`${prefix}--switcher`) && expanded) {
72
+ const {
73
+ activeElement
74
+ } = document;
75
+ if (!(activeElement instanceof HTMLElement)) return;
76
+ setLastClickedElement(activeElement);
77
+ const isChildASwitcher = /*#__PURE__*/React.isValidElement(children) && typeof children.type !== 'string' && children.type === Switcher["default"];
78
+ if (isChildASwitcher && !activeElement.closest(`.${prefix}--header-panel--expanded`) && !activeElement.closest(`.${prefix}--header__action`) && !headerPanelReference?.current?.classList.contains(`${prefix}--switcher`) && expanded) {
75
79
  setExpandedState(false);
76
80
  onHeaderPanelFocus();
77
81
  }
@@ -25,9 +25,14 @@ const callOnChangeHandler = ({
25
25
  }) => {
26
26
  if (isControlled) {
27
27
  if (isMounted && onChangeHandlerControlled) {
28
- onChangeHandlerControlled({
29
- selectedItems
30
- });
28
+ // Use setTimeout to defer the controlled onChange call,
29
+ // avoiding React’s warning: "Cannot update a component while rendering a different component".
30
+ // This ensures the parent state updates after rendering completes.
31
+ setTimeout(() => {
32
+ onChangeHandlerControlled({
33
+ selectedItems
34
+ });
35
+ }, 0);
31
36
  }
32
37
  } else {
33
38
  onChangeHandlerUncontrolled(selectedItems);