@carbon/react 1.62.0 → 1.63.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 (58) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +1066 -1025
  2. package/es/components/Checkbox/Checkbox.js +2 -3
  3. package/es/components/CheckboxGroup/CheckboxGroup.js +2 -3
  4. package/es/components/ComboBox/ComboBox.js +4 -3
  5. package/es/components/DataTable/DataTable.js +1 -1
  6. package/es/components/DataTable/TableSelectRow.js +3 -2
  7. package/es/components/DataTable/TableToolbarSearch.js +3 -4
  8. package/es/components/DatePickerInput/DatePickerInput.js +2 -3
  9. package/es/components/Dropdown/Dropdown.js +8 -12
  10. package/es/components/FluidSearch/FluidSearch.Skeleton.js +40 -0
  11. package/es/components/FluidSearch/FluidSearch.js +96 -0
  12. package/es/components/Menu/Menu.js +1 -0
  13. package/es/components/Modal/Modal.js +2 -3
  14. package/es/components/MultiSelect/FilterableMultiSelect.js +10 -7
  15. package/es/components/MultiSelect/MultiSelect.js +10 -10
  16. package/es/components/Pagination/experimental/PageSelector.js +2 -3
  17. package/es/components/RadioButtonGroup/RadioButtonGroup.js +2 -5
  18. package/es/components/Select/Select.js +3 -6
  19. package/es/components/Tabs/Tabs.js +4 -2
  20. package/es/components/Tag/DismissibleTag.js +2 -3
  21. package/es/components/Tag/OperationalTag.js +2 -3
  22. package/es/components/Tag/SelectableTag.js +2 -3
  23. package/es/components/Tag/Tag.js +3 -5
  24. package/es/components/TextArea/TextArea.js +32 -6
  25. package/es/components/TextInput/ControlledPasswordInput.js +3 -6
  26. package/es/components/TextInput/TextInput.js +29 -2
  27. package/es/index.d.ts +1 -0
  28. package/es/index.js +2 -0
  29. package/es/internal/useAnnouncer.js +8 -3
  30. package/lib/components/Checkbox/Checkbox.js +2 -3
  31. package/lib/components/CheckboxGroup/CheckboxGroup.js +2 -3
  32. package/lib/components/ComboBox/ComboBox.js +4 -3
  33. package/lib/components/DataTable/DataTable.js +1 -1
  34. package/lib/components/DataTable/TableSelectRow.js +2 -1
  35. package/lib/components/DataTable/TableToolbarSearch.js +2 -3
  36. package/lib/components/DatePickerInput/DatePickerInput.js +2 -3
  37. package/lib/components/Dropdown/Dropdown.js +7 -11
  38. package/lib/components/FluidSearch/FluidSearch.Skeleton.js +50 -0
  39. package/lib/components/FluidSearch/FluidSearch.js +106 -0
  40. package/lib/components/Menu/Menu.js +1 -0
  41. package/lib/components/Modal/Modal.js +2 -3
  42. package/lib/components/MultiSelect/FilterableMultiSelect.js +9 -6
  43. package/lib/components/MultiSelect/MultiSelect.js +9 -9
  44. package/lib/components/Pagination/experimental/PageSelector.js +2 -3
  45. package/lib/components/RadioButtonGroup/RadioButtonGroup.js +2 -5
  46. package/lib/components/Select/Select.js +2 -5
  47. package/lib/components/Tabs/Tabs.js +4 -2
  48. package/lib/components/Tag/DismissibleTag.js +2 -3
  49. package/lib/components/Tag/OperationalTag.js +2 -3
  50. package/lib/components/Tag/SelectableTag.js +2 -3
  51. package/lib/components/Tag/Tag.js +3 -5
  52. package/lib/components/TextArea/TextArea.js +32 -6
  53. package/lib/components/TextInput/ControlledPasswordInput.js +2 -5
  54. package/lib/components/TextInput/TextInput.js +28 -1
  55. package/lib/index.d.ts +1 -0
  56. package/lib/index.js +4 -0
  57. package/lib/internal/useAnnouncer.js +8 -3
  58. package/package.json +18 -17
@@ -9,7 +9,7 @@ import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js
9
9
  import PropTypes from 'prop-types';
10
10
  import React__default, { useRef, useState, useLayoutEffect } from 'react';
11
11
  import cx from 'classnames';
12
- import setupGetInstanceId from '../../tools/setupGetInstanceId.js';
12
+ import { useId } from '../../internal/useId.js';
13
13
  import { usePrefix } from '../../internal/usePrefix.js';
14
14
  import Tag, { SIZES } from './Tag.js';
15
15
  import '../Tooltip/DefinitionTooltip.js';
@@ -18,7 +18,6 @@ import '../Text/index.js';
18
18
  import { isEllipsisActive } from './isEllipsisActive.js';
19
19
  import { Text } from '../Text/Text.js';
20
20
 
21
- const getInstanceId = setupGetInstanceId();
22
21
  const TYPES = {
23
22
  red: 'Red',
24
23
  magenta: 'Magenta',
@@ -45,7 +44,7 @@ const OperationalTag = _ref => {
45
44
  } = _ref;
46
45
  const prefix = usePrefix();
47
46
  const tagRef = useRef();
48
- const tagId = id || `tag-${getInstanceId()}`;
47
+ const tagId = id || `tag-${useId()}`;
49
48
  const tagClasses = cx(`${prefix}--tag--operational`, className);
50
49
  const [isEllipsisApplied, setIsEllipsisApplied] = useState(false);
51
50
  useLayoutEffect(() => {
@@ -9,7 +9,7 @@ import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js
9
9
  import PropTypes from 'prop-types';
10
10
  import React__default, { useRef, useState, useLayoutEffect } from 'react';
11
11
  import cx from 'classnames';
12
- import setupGetInstanceId from '../../tools/setupGetInstanceId.js';
12
+ import { useId } from '../../internal/useId.js';
13
13
  import { usePrefix } from '../../internal/usePrefix.js';
14
14
  import Tag, { SIZES } from './Tag.js';
15
15
  import '../Tooltip/DefinitionTooltip.js';
@@ -18,7 +18,6 @@ import '../Text/index.js';
18
18
  import { isEllipsisActive } from './isEllipsisActive.js';
19
19
  import { Text } from '../Text/Text.js';
20
20
 
21
- const getInstanceId = setupGetInstanceId();
22
21
  const SelectableTag = _ref => {
23
22
  let {
24
23
  className,
@@ -33,7 +32,7 @@ const SelectableTag = _ref => {
33
32
  } = _ref;
34
33
  const prefix = usePrefix();
35
34
  const tagRef = useRef();
36
- const tagId = id || `tag-${getInstanceId()}`;
35
+ const tagId = id || `tag-${useId()}`;
37
36
  const [selectedTag, setSelectedTag] = useState(selected);
38
37
  const tagClasses = cx(`${prefix}--tag--selectable`, className, {
39
38
  [`${prefix}--tag--selectable-selected`]: selectedTag
@@ -10,7 +10,7 @@ import PropTypes from 'prop-types';
10
10
  import React__default, { useRef, useState, useLayoutEffect } from 'react';
11
11
  import cx from 'classnames';
12
12
  import { Close } from '@carbon/icons-react';
13
- import setupGetInstanceId from '../../tools/setupGetInstanceId.js';
13
+ import { useId } from '../../internal/useId.js';
14
14
  import { usePrefix } from '../../internal/usePrefix.js';
15
15
  import '../Text/index.js';
16
16
  import deprecate from '../../prop-types/deprecate.js';
@@ -21,7 +21,6 @@ import { useMergeRefs } from '@floating-ui/react';
21
21
  import { Text } from '../Text/Text.js';
22
22
 
23
23
  var _Close;
24
- const getInstanceId = setupGetInstanceId();
25
24
  const TYPES = {
26
25
  red: 'Red',
27
26
  magenta: 'Magenta',
@@ -63,7 +62,7 @@ const Tag = /*#__PURE__*/React__default.forwardRef(function Tag(_ref, forwardRef
63
62
  const prefix = usePrefix();
64
63
  const tagRef = useRef();
65
64
  const ref = useMergeRefs([forwardRef, tagRef]);
66
- const tagId = id || `tag-${getInstanceId()}`;
65
+ const tagId = id || `tag-${useId()}`;
67
66
  const [isEllipsisApplied, setIsEllipsisApplied] = useState(false);
68
67
  useLayoutEffect(() => {
69
68
  const newElement = tagRef.current?.getElementsByClassName(`${prefix}--tag__label`)[0];
@@ -117,8 +116,7 @@ const Tag = /*#__PURE__*/React__default.forwardRef(function Tag(_ref, forwardRef
117
116
  }
118
117
  const ComponentTag = BaseComponent ?? (other.onClick || className?.includes(`${prefix}--tag--operational`) ? 'button' : 'div');
119
118
  const labelClasses = cx({
120
- [`${prefix}--tag__label`]: !isInteractiveTag,
121
- [`${prefix}--tag--${type}`]: type && !isInteractiveTag
119
+ [`${prefix}--tag__label`]: !isInteractiveTag
122
120
  });
123
121
  return /*#__PURE__*/React__default.createElement(ComponentTag, _extends({
124
122
  ref: ref,
@@ -17,12 +17,11 @@ import { FormContext } from '../FluidForm/FormContext.js';
17
17
  import { useAnnouncer } from '../../internal/useAnnouncer.js';
18
18
  import useIsomorphicEffect from '../../internal/useIsomorphicEffect.js';
19
19
  import { useMergedRefs } from '../../internal/useMergedRefs.js';
20
- import setupGetInstanceId from '../../tools/setupGetInstanceId.js';
20
+ import { useId } from '../../internal/useId.js';
21
21
  import { noopFn } from '../../internal/noopFn.js';
22
22
  import '../Text/index.js';
23
23
  import { Text } from '../Text/Text.js';
24
24
 
25
- const getInstanceId = setupGetInstanceId();
26
25
  const TextArea = /*#__PURE__*/React__default.forwardRef((props, forwardRef) => {
27
26
  const {
28
27
  className,
@@ -55,9 +54,7 @@ const TextArea = /*#__PURE__*/React__default.forwardRef((props, forwardRef) => {
55
54
  defaultValue,
56
55
  value
57
56
  } = other;
58
- const {
59
- current: textAreaInstanceId
60
- } = useRef(getInstanceId());
57
+ const textAreaInstanceId = useId();
61
58
  const textareaRef = useRef(null);
62
59
  const ref = useMergedRefs([forwardRef, textareaRef]);
63
60
  function getInitialTextCount() {
@@ -217,7 +214,33 @@ const TextArea = /*#__PURE__*/React__default.forwardRef((props, forwardRef) => {
217
214
  textareaProps.maxLength = maxCount;
218
215
  }
219
216
  }
217
+ const announcerRef = useRef(null);
218
+ const [prevAnnouncement, setPrevAnnouncement] = useState('');
220
219
  const ariaAnnouncement = useAnnouncer(textCount, maxCount, counterMode === 'word' ? 'words' : undefined);
220
+ useEffect(() => {
221
+ if (ariaAnnouncement && ariaAnnouncement !== prevAnnouncement) {
222
+ const announcer = announcerRef.current;
223
+ if (announcer) {
224
+ // Clear the content first
225
+ announcer.textContent = '';
226
+
227
+ // Set the new content after a small delay
228
+ const timeoutId = setTimeout(() => {
229
+ if (announcer) {
230
+ announcer.textContent = ariaAnnouncement;
231
+ setPrevAnnouncement(ariaAnnouncement);
232
+ }
233
+ }, counterMode === 'word' ? 2000 : 1000);
234
+
235
+ //clear the timeout
236
+ return () => {
237
+ if (timeoutId) {
238
+ clearTimeout(timeoutId);
239
+ }
240
+ };
241
+ }
242
+ }
243
+ }, [ariaAnnouncement, prevAnnouncement, counterMode]);
221
244
  const input = /*#__PURE__*/React__default.createElement("textarea", _extends({}, other, textareaProps, {
222
245
  placeholder: placeholder,
223
246
  "aria-readonly": other.readOnly ? true : false,
@@ -250,7 +273,10 @@ const TextArea = /*#__PURE__*/React__default.forwardRef((props, forwardRef) => {
250
273
  className: `${prefix}--text-area__invalid-icon ${prefix}--text-area__invalid-icon--warning`
251
274
  }), input, normalizedSlug, /*#__PURE__*/React__default.createElement("span", {
252
275
  className: `${prefix}--text-area__counter-alert`,
253
- role: "alert"
276
+ role: "alert",
277
+ "aria-live": "assertive",
278
+ "aria-atomic": "true",
279
+ ref: announcerRef
254
280
  }, ariaAnnouncement), isFluid && /*#__PURE__*/React__default.createElement("hr", {
255
281
  className: `${prefix}--text-area__divider`
256
282
  }), isFluid && invalid ? error : null, isFluid && warn && !invalid ? warning : null), !invalid && !warn && !isFluid ? helper : null, invalid && !isFluid ? error : null, warn && !invalid && !isFluid ? warning : null);
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';
9
- import React__default, { useRef } from 'react';
9
+ import React__default from 'react';
10
10
  import cx from 'classnames';
11
11
  import PropTypes from 'prop-types';
12
12
  import { WarningFilled, ViewOff, View } from '@carbon/icons-react';
@@ -14,10 +14,9 @@ import { textInputProps } from './util.js';
14
14
  import { warning } from '../../internal/warning.js';
15
15
  import deprecate from '../../prop-types/deprecate.js';
16
16
  import { usePrefix } from '../../internal/usePrefix.js';
17
- import setupGetInstanceId from '../../tools/setupGetInstanceId.js';
17
+ import { useId } from '../../internal/useId.js';
18
18
  import { noopFn } from '../../internal/noopFn.js';
19
19
 
20
- const getInstanceId = setupGetInstanceId();
21
20
  let didWarnAboutDeprecation = false;
22
21
  const ControlledPasswordInput = /*#__PURE__*/React__default.forwardRef(function ControlledPasswordInput(_ref, ref) {
23
22
  let {
@@ -45,9 +44,7 @@ const ControlledPasswordInput = /*#__PURE__*/React__default.forwardRef(function
45
44
  ...other
46
45
  } = _ref;
47
46
  const prefix = usePrefix();
48
- const {
49
- current: controlledPasswordInstanceId
50
- } = useRef(getInstanceId());
47
+ const controlledPasswordInstanceId = useId();
51
48
  if (process.env.NODE_ENV !== "production") {
52
49
  process.env.NODE_ENV !== "production" ? warning(didWarnAboutDeprecation, '`<TextInput.ControlledPasswordInput>` has been deprecated in favor of `<TextInput.PasswordInput />` and will be removed in the next major release of `carbon-components-react`') : void 0;
53
50
  didWarnAboutDeprecation = true;
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import PropTypes from 'prop-types';
9
- import React__default, { useState, useContext } from 'react';
9
+ import React__default, { useState, useContext, useRef, useEffect } from 'react';
10
10
  import cx from 'classnames';
11
11
  import { useNormalizedInputProps } from '../../internal/useNormalizedInputProps.js';
12
12
  import PasswordInput from './PasswordInput.js';
@@ -152,7 +152,31 @@ const TextInput = /*#__PURE__*/React__default.forwardRef(function TextInput(_ref
152
152
  const {
153
153
  isFluid
154
154
  } = useContext(FormContext);
155
+ const announcerRef = useRef(null);
156
+ const [prevAnnouncement, setPrevAnnouncement] = useState('');
155
157
  const ariaAnnouncement = useAnnouncer(textCount, maxCount);
158
+ useEffect(() => {
159
+ if (ariaAnnouncement && ariaAnnouncement !== prevAnnouncement) {
160
+ const announcer = announcerRef.current;
161
+ if (announcer) {
162
+ // Clear the content first
163
+ announcer.textContent = '';
164
+ // Set the new content after a small delay
165
+ const timeoutId = setTimeout(() => {
166
+ if (announcer) {
167
+ announcer.textContent = ariaAnnouncement;
168
+ setPrevAnnouncement(ariaAnnouncement);
169
+ }
170
+ }, 1000);
171
+ // clear the timeout
172
+ return () => {
173
+ if (timeoutId) {
174
+ clearTimeout(timeoutId);
175
+ }
176
+ };
177
+ }
178
+ }
179
+ }, [ariaAnnouncement, prevAnnouncement]);
156
180
  const Icon = normalizedProps.icon;
157
181
 
158
182
  // Slug is always size `mini`
@@ -175,7 +199,10 @@ const TextInput = /*#__PURE__*/React__default.forwardRef(function TextInput(_ref
175
199
  className: iconClasses
176
200
  }), input, normalizedSlug, /*#__PURE__*/React__default.createElement("span", {
177
201
  className: `${prefix}--text-input__counter-alert`,
178
- role: "alert"
202
+ role: "alert",
203
+ "aria-live": "assertive",
204
+ "aria-atomic": "true",
205
+ ref: announcerRef
179
206
  }, ariaAnnouncement), isFluid && /*#__PURE__*/React__default.createElement("hr", {
180
207
  className: `${prefix}--text-input__divider`
181
208
  }), isFluid && !inline && normalizedProps.validation), !isFluid && !inline && (normalizedProps.validation || helper)));
package/es/index.d.ts CHANGED
@@ -102,6 +102,7 @@ export { FluidDatePickerInput as unstable__FluidDatePickerInput } from './compon
102
102
  export { FluidDropdown as unstable__FluidDropdown, FluidDropdownSkeleton as unstable__FluidDropdownSkeleton, } from './components/FluidDropdown';
103
103
  export { FluidMultiSelect as unstable__FluidMultiSelect, FluidMultiSelectSkeleton as unstable__FluidMultiSelectSkeleton, } from './components/FluidMultiSelect';
104
104
  export { FluidSelect as unstable__FluidSelect, FluidSelectSkeleton as unstable__FluidSelectSkeleton, } from './components/FluidSelect';
105
+ export { FluidSearch as unstable__FluidSearch, FluidSearchSkeleton as unstable__FluidSearchSkeleton, } from './components/FluidSearch';
105
106
  export { FluidTextArea as unstable__FluidTextArea, FluidTextAreaSkeleton as unstable__FluidTextAreaSkeleton, } from './components/FluidTextArea';
106
107
  export { FluidTextInput as unstable__FluidTextInput, FluidTextInputSkeleton as unstable__FluidTextInputSkeleton, } from './components/FluidTextInput';
107
108
  export { FluidTimePicker as unstable__FluidTimePicker, FluidTimePickerSkeleton as unstable__FluidTimePickerSkeleton, } from './components/FluidTimePicker';
package/es/index.js CHANGED
@@ -175,6 +175,7 @@ export { GlobalTheme, Theme, ThemeContext, usePrefersDarkScheme, useTheme } from
175
175
  export { PrefixContext, usePrefix } from './internal/usePrefix.js';
176
176
  export { useIdPrefix } from './internal/useIdPrefix.js';
177
177
  export { default as unstable__FluidDatePickerSkeleton } from './components/FluidDatePicker/FluidDatePicker.Skeleton.js';
178
+ export { default as unstable__FluidSearchSkeleton } from './components/FluidSearch/FluidSearch.Skeleton.js';
178
179
  export { default as unstable__FluidTextArea } from './components/FluidTextArea/FluidTextArea.js';
179
180
  export { default as unstable__FluidTextAreaSkeleton } from './components/FluidTextArea/FluidTextArea.Skeleton.js';
180
181
  export { default as unstable__FluidTextInput } from './components/FluidTextInput/FluidTextInput.js';
@@ -198,6 +199,7 @@ export { default as unstable__FluidMultiSelect } from './components/FluidMultiSe
198
199
  export { default as unstable__FluidMultiSelectSkeleton } from './components/FluidMultiSelect/FluidMultiSelect.Skeleton.js';
199
200
  export { default as unstable__FluidSelect } from './components/FluidSelect/FluidSelect.js';
200
201
  export { default as unstable__FluidSelectSkeleton } from './components/FluidSelect/FluidSelect.Skeleton.js';
202
+ export { default as unstable__FluidSearch } from './components/FluidSearch/FluidSearch.js';
201
203
  export { default as unstable__FluidTimePicker } from './components/FluidTimePicker/FluidTimePicker.js';
202
204
  export { default as unstable__FluidTimePickerSkeleton } from './components/FluidTimePicker/FluidTimePicker.Skeleton.js';
203
205
  export { default as unstable__FluidTimePickerSelect } from './components/FluidTimePickerSelect/FluidTimePickerSelect.js';
@@ -7,10 +7,15 @@
7
7
 
8
8
  function useAnnouncer(textCount, maxCount) {
9
9
  let entityName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'characters';
10
- const lastTen = maxCount - 10;
11
- if (textCount >= lastTen) {
12
- return `${maxCount - textCount} ${entityName} left.`;
10
+ const remaining = maxCount - textCount;
11
+ if (remaining <= 10 && remaining > 0) {
12
+ const entity = remaining === 1 ? entityName.slice(0, -1) : entityName;
13
+ return `${remaining} ${entity} left.`;
13
14
  }
15
+ if (remaining <= 0) {
16
+ return `Maximum ${entityName} reached.`;
17
+ }
18
+ return null;
14
19
  }
15
20
 
16
21
  export { useAnnouncer };
@@ -16,7 +16,7 @@ var cx = require('classnames');
16
16
  require('../Text/index.js');
17
17
  var usePrefix = require('../../internal/usePrefix.js');
18
18
  var iconsReact = require('@carbon/icons-react');
19
- var setupGetInstanceId = require('../../tools/setupGetInstanceId.js');
19
+ var useId = require('../../internal/useId.js');
20
20
  var noopFn = require('../../internal/noopFn.js');
21
21
  var Text = require('../Text/Text.js');
22
22
 
@@ -26,7 +26,6 @@ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
26
26
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
27
27
  var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
28
28
 
29
- const getInstanceId = setupGetInstanceId["default"]();
30
29
  const Checkbox = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) => {
31
30
  let {
32
31
  className,
@@ -49,7 +48,7 @@ const Checkbox = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
49
48
  const prefix = usePrefix.usePrefix();
50
49
  const showWarning = !readOnly && !invalid && warn;
51
50
  const showHelper = !invalid && !warn;
52
- const checkboxGroupInstanceId = getInstanceId();
51
+ const checkboxGroupInstanceId = useId.useId();
53
52
  const helperId = !helperText ? undefined : `checkbox-helper-text-${checkboxGroupInstanceId}`;
54
53
  const helper = helperText ? /*#__PURE__*/React__default["default"].createElement("div", {
55
54
  id: helperId,
@@ -15,7 +15,7 @@ var React = require('react');
15
15
  var cx = require('classnames');
16
16
  var usePrefix = require('../../internal/usePrefix.js');
17
17
  var iconsReact = require('@carbon/icons-react');
18
- var setupGetInstanceId = require('../../tools/setupGetInstanceId.js');
18
+ var useId = require('../../internal/useId.js');
19
19
 
20
20
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
21
21
 
@@ -23,7 +23,6 @@ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
23
23
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
24
24
  var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
25
25
 
26
- const getInstanceId = setupGetInstanceId["default"]();
27
26
  const CheckboxGroup = _ref => {
28
27
  let {
29
28
  children,
@@ -43,7 +42,7 @@ const CheckboxGroup = _ref => {
43
42
  const prefix = usePrefix.usePrefix();
44
43
  const showWarning = !readOnly && !invalid && warn;
45
44
  const showHelper = !invalid && !warn;
46
- const checkboxGroupInstanceId = getInstanceId();
45
+ const checkboxGroupInstanceId = useId.useId();
47
46
  const helperId = !helperText ? undefined : `checkbox-group-helper-text-${checkboxGroupInstanceId}`;
48
47
  const helper = helperText ? /*#__PURE__*/React__default["default"].createElement("div", {
49
48
  id: helperId,
@@ -17,7 +17,7 @@ var React = require('react');
17
17
  require('../Text/index.js');
18
18
  var iconsReact = require('@carbon/icons-react');
19
19
  var index = require('../ListBox/index.js');
20
- var setupGetInstanceId = require('../../tools/setupGetInstanceId.js');
20
+ var useId = require('../../internal/useId.js');
21
21
  var mergeRefs = require('../../tools/mergeRefs.js');
22
22
  var deprecate = require('../../prop-types/deprecate.js');
23
23
  var usePrefix = require('../../internal/usePrefix.js');
@@ -92,7 +92,6 @@ const findHighlightedIndex = (_ref2, inputValue) => {
92
92
  }
93
93
  return -1;
94
94
  };
95
- const getInstanceId = setupGetInstanceId["default"]();
96
95
  const ComboBox = /*#__PURE__*/React.forwardRef((props, ref) => {
97
96
  const {
98
97
  ['aria-label']: ariaLabel = 'Choose an item',
@@ -154,7 +153,7 @@ const ComboBox = /*#__PURE__*/React.forwardRef((props, ref) => {
154
153
  isFluid
155
154
  } = React.useContext(FormContext.FormContext);
156
155
  const textInput = React.useRef(null);
157
- const comboBoxInstanceId = getInstanceId();
156
+ const comboBoxInstanceId = useId.useId();
158
157
  const [inputValue, setInputValue] = React.useState(getInputValue({
159
158
  initialSelectedItem,
160
159
  inputValue: '',
@@ -393,6 +392,8 @@ const ComboBox = /*#__PURE__*/React.forwardRef((props, ref) => {
393
392
  // when both the message is supplied *and* when the component is in
394
393
  // the matching state (invalid, warn, etc).
395
394
  const ariaDescribedBy = invalid && invalidText && invalidTextId || warn && warnText && warnTextId || helperText && !isFluid && helperTextId || undefined;
395
+
396
+ // Memoize the value of getMenuProps to avoid an infinite loop
396
397
  const menuProps = React.useMemo(() => getMenuProps({
397
398
  'aria-label': deprecatedAriaLabel || ariaLabel,
398
399
  ref: autoAlign ? refs.setFloating : null
@@ -12,7 +12,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
12
12
  var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
13
13
  var PropTypes = require('prop-types');
14
14
  var React = require('react');
15
- var isEqual = require('lodash.isequal');
15
+ var isEqual = require('react-fast-compare');
16
16
  var getDerivedStateFromProps = require('./state/getDerivedStateFromProps.js');
17
17
  var sorting = require('./state/sorting.js');
18
18
  var cells = require('./tools/cells.js');
@@ -38,9 +38,10 @@ const TableSelectRow = _ref => {
38
38
  className
39
39
  } = _ref;
40
40
  const prefix = usePrefix.usePrefix();
41
+ const uniqueNameId = React.useId();
41
42
  const selectionInputProps = {
42
43
  id,
43
- name,
44
+ name: name ? name : uniqueNameId,
44
45
  onClick: onSelect,
45
46
  onChange,
46
47
  checked,
@@ -15,7 +15,7 @@ var PropTypes = require('prop-types');
15
15
  var React = require('react');
16
16
  var Search = require('../Search/Search.js');
17
17
  require('../Search/Search.Skeleton.js');
18
- var instanceId = require('./tools/instanceId.js');
18
+ var useId = require('../../internal/useId.js');
19
19
  var usePrefix = require('../../internal/usePrefix.js');
20
20
  var noopFn = require('../../internal/noopFn.js');
21
21
 
@@ -25,7 +25,6 @@ var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
25
25
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
26
26
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
27
27
 
28
- const getInstanceId = instanceId["default"]();
29
28
  const translationKeys = {
30
29
  'carbon.table.toolbar.search.label': 'Filter table',
31
30
  'carbon.table.toolbar.search.placeholder': 'Filter table'
@@ -61,7 +60,7 @@ const TableToolbarSearch = _ref => {
61
60
  const [expandedState, setExpandedState] = React.useState(Boolean(defaultExpanded || defaultValue));
62
61
  const expanded = controlled ? expandedProp : expandedState;
63
62
  const [value, setValue] = React.useState(defaultValue || '');
64
- const uniqueId = React.useMemo(getInstanceId, []);
63
+ const uniqueId = useId.useId();
65
64
  const [focusTarget, setFocusTarget] = React.useState(null);
66
65
  const prefix = usePrefix.usePrefix();
67
66
  React.useEffect(() => {
@@ -16,7 +16,7 @@ var React = require('react');
16
16
  var usePrefix = require('../../internal/usePrefix.js');
17
17
  require('../FluidForm/FluidForm.js');
18
18
  var FormContext = require('../FluidForm/FormContext.js');
19
- var setupGetInstanceId = require('../../tools/setupGetInstanceId.js');
19
+ var useId = require('../../internal/useId.js');
20
20
  require('../Text/index.js');
21
21
  var Text = require('../Text/Text.js');
22
22
 
@@ -26,7 +26,6 @@ var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
26
26
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
27
27
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
28
28
 
29
- const getInstanceId = setupGetInstanceId["default"]();
30
29
  const DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(function DatePickerInput(props, ref) {
31
30
  const {
32
31
  datePickerType,
@@ -52,7 +51,7 @@ const DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(functi
52
51
  const {
53
52
  isFluid
54
53
  } = React.useContext(FormContext.FormContext);
55
- const datePickerInputInstanceId = getInstanceId();
54
+ const datePickerInputInstanceId = useId.useId();
56
55
  const datePickerInputProps = {
57
56
  id,
58
57
  onChange: event => {
@@ -21,7 +21,7 @@ var deprecate = require('../../prop-types/deprecate.js');
21
21
  var usePrefix = require('../../internal/usePrefix.js');
22
22
  require('../FluidForm/FluidForm.js');
23
23
  var FormContext = require('../FluidForm/FormContext.js');
24
- var setupGetInstanceId = require('../../tools/setupGetInstanceId.js');
24
+ var useId = require('../../internal/useId.js');
25
25
  var react = require('@floating-ui/react');
26
26
  var ListBoxPropTypes = require('../ListBox/ListBoxPropTypes.js');
27
27
 
@@ -31,7 +31,6 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
31
31
  var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
32
32
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
33
33
 
34
- const getInstanceId = setupGetInstanceId["default"]();
35
34
  const {
36
35
  ToggleButtonKeyDownArrowDown,
37
36
  ToggleButtonKeyDownArrowUp,
@@ -135,9 +134,7 @@ const Dropdown = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
135
134
  return isObject && 'disabled' in item && item.disabled === true;
136
135
  }
137
136
  };
138
- const {
139
- current: dropdownInstanceId
140
- } = React.useRef(getInstanceId());
137
+ const dropdownInstanceId = useId.useId();
141
138
  function stateReducer(state, actionAndChanges) {
142
139
  const {
143
140
  changes,
@@ -273,8 +270,9 @@ const Dropdown = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
273
270
  }
274
271
  }
275
272
  };
276
- const menuProps = getMenuProps();
277
- const menuRef = mergeRefs["default"](menuProps.ref, refs.setFloating);
273
+ const menuProps = React.useMemo(() => getMenuProps({
274
+ ref: autoAlign ? refs.setFloating : null
275
+ }), [autoAlign]);
278
276
 
279
277
  // Slug is always size `mini`
280
278
  let normalizedSlug;
@@ -299,7 +297,7 @@ const Dropdown = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
299
297
  warnText: warnText,
300
298
  light: light,
301
299
  isOpen: isOpen,
302
- ref: refs.setReference,
300
+ ref: autoAlign ? refs.setReference : null,
303
301
  id: id
304
302
  }, invalid && /*#__PURE__*/React__default["default"].createElement(iconsReact.WarningFilled, {
305
303
  className: `${prefix}--list-box__invalid-icon`
@@ -322,9 +320,7 @@ const Dropdown = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
322
320
  }, selectedItem ? renderSelectedItem ? renderSelectedItem(selectedItem) : itemToString(selectedItem) : label), /*#__PURE__*/React__default["default"].createElement(index["default"].MenuIcon, {
323
321
  isOpen: isOpen,
324
322
  translateWithId: translateWithId
325
- })), normalizedSlug, /*#__PURE__*/React__default["default"].createElement(index["default"].Menu, _rollupPluginBabelHelpers["extends"]({}, menuProps, {
326
- ref: menuRef
327
- }), isOpen && items.map((item, index$1) => {
323
+ })), normalizedSlug, /*#__PURE__*/React__default["default"].createElement(index["default"].Menu, menuProps, isOpen && items.map((item, index$1) => {
328
324
  const isObject = item !== null && typeof item === 'object';
329
325
  const itemProps = getItemProps({
330
326
  item,
@@ -0,0 +1,50 @@
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 _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
13
+ var PropTypes = require('prop-types');
14
+ var React = require('react');
15
+ var cx = require('classnames');
16
+ var usePrefix = require('../../internal/usePrefix.js');
17
+ var FormContext = require('../FluidForm/FormContext.js');
18
+
19
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
20
+
21
+ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
22
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
23
+ var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
24
+
25
+ function FluidSearchSkeleton(_ref) {
26
+ let {
27
+ className,
28
+ ...other
29
+ } = _ref;
30
+ const prefix = usePrefix.usePrefix();
31
+ return /*#__PURE__*/React__default["default"].createElement(FormContext.FormContext.Provider, {
32
+ value: {
33
+ isFluid: true
34
+ }
35
+ }, /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
36
+ className: cx__default["default"](`${prefix}--form-item ${prefix}--text-input--fluid__skeleton`, className)
37
+ }, other), /*#__PURE__*/React__default["default"].createElement("span", {
38
+ className: `${prefix}--label ${prefix}--skeleton`
39
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
40
+ className: `${prefix}--skeleton ${prefix}--text-input`
41
+ })));
42
+ }
43
+ FluidSearchSkeleton.propTypes = {
44
+ /**
45
+ * Specify an optional className to be applied to the outer FluidForm wrapper
46
+ */
47
+ className: PropTypes__default["default"].string
48
+ };
49
+
50
+ exports["default"] = FluidSearchSkeleton;