@carbon/react 1.62.1 → 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.
- package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +822 -822
- package/es/components/Checkbox/Checkbox.js +2 -3
- package/es/components/CheckboxGroup/CheckboxGroup.js +2 -3
- package/es/components/ComboBox/ComboBox.js +4 -3
- package/es/components/DataTable/DataTable.js +1 -1
- package/es/components/DataTable/TableSelectRow.js +3 -2
- package/es/components/DataTable/TableToolbarSearch.js +3 -4
- package/es/components/DatePickerInput/DatePickerInput.js +2 -3
- package/es/components/Dropdown/Dropdown.js +3 -6
- package/es/components/FluidSearch/FluidSearch.Skeleton.js +40 -0
- package/es/components/FluidSearch/FluidSearch.js +96 -0
- package/es/components/Modal/Modal.js +2 -3
- package/es/components/MultiSelect/FilterableMultiSelect.js +10 -7
- package/es/components/MultiSelect/MultiSelect.js +10 -10
- package/es/components/Pagination/experimental/PageSelector.js +2 -3
- package/es/components/RadioButtonGroup/RadioButtonGroup.js +2 -5
- package/es/components/Select/Select.js +3 -6
- package/es/components/Tag/DismissibleTag.js +2 -3
- package/es/components/Tag/OperationalTag.js +2 -3
- package/es/components/Tag/SelectableTag.js +2 -3
- package/es/components/Tag/Tag.js +3 -5
- package/es/components/TextArea/TextArea.js +32 -6
- package/es/components/TextInput/ControlledPasswordInput.js +3 -6
- package/es/components/TextInput/TextInput.js +29 -2
- package/es/index.d.ts +1 -0
- package/es/index.js +2 -0
- package/es/internal/useAnnouncer.js +8 -3
- package/lib/components/Checkbox/Checkbox.js +2 -3
- package/lib/components/CheckboxGroup/CheckboxGroup.js +2 -3
- package/lib/components/ComboBox/ComboBox.js +4 -3
- package/lib/components/DataTable/DataTable.js +1 -1
- package/lib/components/DataTable/TableSelectRow.js +2 -1
- package/lib/components/DataTable/TableToolbarSearch.js +2 -3
- package/lib/components/DatePickerInput/DatePickerInput.js +2 -3
- package/lib/components/Dropdown/Dropdown.js +2 -5
- package/lib/components/FluidSearch/FluidSearch.Skeleton.js +50 -0
- package/lib/components/FluidSearch/FluidSearch.js +106 -0
- package/lib/components/Modal/Modal.js +2 -3
- package/lib/components/MultiSelect/FilterableMultiSelect.js +9 -6
- package/lib/components/MultiSelect/MultiSelect.js +9 -9
- package/lib/components/Pagination/experimental/PageSelector.js +2 -3
- package/lib/components/RadioButtonGroup/RadioButtonGroup.js +2 -5
- package/lib/components/Select/Select.js +2 -5
- package/lib/components/Tag/DismissibleTag.js +2 -3
- package/lib/components/Tag/OperationalTag.js +2 -3
- package/lib/components/Tag/SelectableTag.js +2 -3
- package/lib/components/Tag/Tag.js +3 -5
- package/lib/components/TextArea/TextArea.js +32 -6
- package/lib/components/TextInput/ControlledPasswordInput.js +2 -5
- package/lib/components/TextInput/TextInput.js +28 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +4 -0
- package/lib/internal/useAnnouncer.js +8 -3
- package/package.json +18 -17
package/es/components/Tag/Tag.js
CHANGED
|
@@ -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
|
|
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-${
|
|
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
|
|
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
|
|
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
|
|
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
|
|
11
|
-
if (
|
|
12
|
-
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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('
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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,
|
|
@@ -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;
|
|
@@ -0,0 +1,106 @@
|
|
|
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 Search = require('../Search/Search.js');
|
|
17
|
+
require('../Search/Search.Skeleton.js');
|
|
18
|
+
var usePrefix = require('../../internal/usePrefix.js');
|
|
19
|
+
var FormContext = require('../FluidForm/FormContext.js');
|
|
20
|
+
|
|
21
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
22
|
+
|
|
23
|
+
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
24
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
25
|
+
var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
|
|
26
|
+
|
|
27
|
+
const FluidSearch = /*#__PURE__*/React__default["default"].forwardRef(function FluidSearch(_ref, ref) {
|
|
28
|
+
let {
|
|
29
|
+
className,
|
|
30
|
+
...other
|
|
31
|
+
} = _ref;
|
|
32
|
+
const prefix = usePrefix.usePrefix();
|
|
33
|
+
const classNames = cx__default["default"](`${prefix}--search--fluid`, className);
|
|
34
|
+
return /*#__PURE__*/React__default["default"].createElement(FormContext.FormContext.Provider, {
|
|
35
|
+
value: {
|
|
36
|
+
isFluid: true
|
|
37
|
+
}
|
|
38
|
+
}, /*#__PURE__*/React__default["default"].createElement(Search["default"], _rollupPluginBabelHelpers["extends"]({
|
|
39
|
+
ref: ref,
|
|
40
|
+
className: classNames
|
|
41
|
+
}, other)));
|
|
42
|
+
});
|
|
43
|
+
FluidSearch.propTypes = {
|
|
44
|
+
/**
|
|
45
|
+
* Specify an optional value for the `autocomplete` property on the underlying
|
|
46
|
+
* `<input>`, defaults to "off"
|
|
47
|
+
*/
|
|
48
|
+
autoComplete: PropTypes__default["default"].string,
|
|
49
|
+
/**
|
|
50
|
+
* Specify an optional className to be applied to the container node
|
|
51
|
+
*/
|
|
52
|
+
className: PropTypes__default["default"].string,
|
|
53
|
+
/**
|
|
54
|
+
* Specify a label to be read by screen readers on the "close" button
|
|
55
|
+
*/
|
|
56
|
+
closeButtonLabelText: PropTypes__default["default"].string,
|
|
57
|
+
/**
|
|
58
|
+
* Optionally provide the default value of the `<input>`
|
|
59
|
+
*/
|
|
60
|
+
defaultValue: PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].number]),
|
|
61
|
+
/**
|
|
62
|
+
* Specify whether the `<input>` should be disabled
|
|
63
|
+
*/
|
|
64
|
+
disabled: PropTypes__default["default"].bool,
|
|
65
|
+
/**
|
|
66
|
+
* Specify a custom `id` for the input
|
|
67
|
+
*/
|
|
68
|
+
id: PropTypes__default["default"].string,
|
|
69
|
+
/**
|
|
70
|
+
* Provide the label text for the Search icon
|
|
71
|
+
*/
|
|
72
|
+
labelText: PropTypes__default["default"].node.isRequired,
|
|
73
|
+
/**
|
|
74
|
+
* Optional callback called when the search value changes.
|
|
75
|
+
*/
|
|
76
|
+
onChange: PropTypes__default["default"].func,
|
|
77
|
+
/**
|
|
78
|
+
* Optional callback called when the search value is cleared.
|
|
79
|
+
*/
|
|
80
|
+
onClear: PropTypes__default["default"].func,
|
|
81
|
+
/**
|
|
82
|
+
* Provide a handler that is invoked on the key down event for the input
|
|
83
|
+
*/
|
|
84
|
+
onKeyDown: PropTypes__default["default"].func,
|
|
85
|
+
/**
|
|
86
|
+
* Provide an optional placeholder text for the Search.
|
|
87
|
+
* Note: if the label and placeholder differ,
|
|
88
|
+
* VoiceOver on Mac will read both
|
|
89
|
+
*/
|
|
90
|
+
placeholder: PropTypes__default["default"].string,
|
|
91
|
+
/**
|
|
92
|
+
* Specify the role for the underlying `<input>`, defaults to `searchbox`
|
|
93
|
+
*/
|
|
94
|
+
role: PropTypes__default["default"].string,
|
|
95
|
+
/**
|
|
96
|
+
* Optional prop to specify the type of the `<input>`
|
|
97
|
+
*/
|
|
98
|
+
type: PropTypes__default["default"].string,
|
|
99
|
+
/**
|
|
100
|
+
* Specify the value of the `<input>`
|
|
101
|
+
*/
|
|
102
|
+
value: PropTypes__default["default"].oneOfType([PropTypes__default["default"].string, PropTypes__default["default"].number])
|
|
103
|
+
};
|
|
104
|
+
var FluidSearch$1 = FluidSearch;
|
|
105
|
+
|
|
106
|
+
exports["default"] = FluidSearch$1;
|
|
@@ -24,7 +24,7 @@ var requiredIfGivenPropIsTruthy = require('../../prop-types/requiredIfGivenPropI
|
|
|
24
24
|
var wrapFocus = require('../../internal/wrapFocus.js');
|
|
25
25
|
var debounce = require('lodash.debounce');
|
|
26
26
|
var useIsomorphicEffect = require('../../internal/useIsomorphicEffect.js');
|
|
27
|
-
var
|
|
27
|
+
var useId = require('../../internal/useId.js');
|
|
28
28
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
29
29
|
var index$2 = require('../IconButton/index.js');
|
|
30
30
|
var noopFn = require('../../internal/noopFn.js');
|
|
@@ -42,7 +42,6 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
42
42
|
var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
|
|
43
43
|
var debounce__default = /*#__PURE__*/_interopDefaultLegacy(debounce);
|
|
44
44
|
|
|
45
|
-
const getInstanceId = setupGetInstanceId["default"]();
|
|
46
45
|
const ModalSizes = ['xs', 'sm', 'md', 'lg'];
|
|
47
46
|
const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal(_ref, ref) {
|
|
48
47
|
let {
|
|
@@ -87,7 +86,7 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal(_
|
|
|
87
86
|
const startTrap = React.useRef(null);
|
|
88
87
|
const endTrap = React.useRef(null);
|
|
89
88
|
const [isScrollable, setIsScrollable] = React.useState(false);
|
|
90
|
-
const modalInstanceId = `modal-${
|
|
89
|
+
const modalInstanceId = `modal-${useId.useId()}`;
|
|
91
90
|
const modalLabelId = `${prefix}--modal-header__label--${modalInstanceId}`;
|
|
92
91
|
const modalHeadingId = `${prefix}--modal-header__heading--${modalInstanceId}`;
|
|
93
92
|
const modalBodyId = `${prefix}--modal-body--${modalInstanceId}`;
|