@carbon/react 1.63.2 → 1.64.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 +1562 -1193
- package/es/components/{Slug → AILabel}/index.js +47 -35
- package/es/components/{AiSkeleton/AiSkeletonIcon.d.ts → AISkeleton/AISkeletonIcon.d.ts} +4 -4
- package/es/components/{AiSkeleton/AiSkeletonIcon.js → AISkeleton/AISkeletonIcon.js} +5 -5
- package/es/components/{AiSkeleton/AiSkeletonPlaceholder.d.ts → AISkeleton/AISkeletonPlaceholder.d.ts} +4 -4
- package/es/components/{AiSkeleton/AiSkeletonPlaceholder.js → AISkeleton/AISkeletonPlaceholder.js} +5 -5
- package/es/components/{AiSkeleton/AiSkeletonText.d.ts → AISkeleton/AISkeletonText.d.ts} +4 -4
- package/es/components/{AiSkeleton/AiSkeletonText.js → AISkeleton/AISkeletonText.js} +3 -3
- package/es/components/AISkeleton/index.d.ts +10 -0
- package/es/components/Accordion/AccordionItem.js +1 -0
- package/es/components/CheckboxGroup/CheckboxGroup.js +1 -1
- package/es/components/ComboBox/ComboBox.js +4 -4
- package/es/components/ComposedModal/ComposedModal.js +1 -1
- package/es/components/DataTable/DataTable.js +1 -1
- package/es/components/DatePicker/DatePicker.js +16 -1
- package/es/components/DatePickerInput/DatePickerInput.js +1 -1
- package/es/components/Dropdown/Dropdown.js +12 -6
- package/es/components/FluidMultiSelect/FluidMultiSelect.js +4 -2
- package/es/components/Menu/MenuItem.js +45 -63
- package/es/components/Modal/Modal.js +1 -1
- package/es/components/MultiSelect/FilterableMultiSelect.js +44 -23
- package/es/components/MultiSelect/MultiSelect.js +6 -4
- package/es/components/NumberInput/NumberInput.js +12 -4
- package/es/components/OverflowMenu/OverflowMenu.js +2 -1
- package/es/components/OverflowMenu/next/index.js +2 -1
- package/es/components/RadioButtonGroup/RadioButtonGroup.js +1 -1
- package/es/components/RadioTile/RadioTile.js +1 -1
- package/es/components/Select/Select.js +1 -1
- package/es/components/Tabs/Tabs.js +3 -3
- package/es/components/Tag/DismissibleTag.js +1 -1
- package/es/components/Tag/OperationalTag.js +1 -1
- package/es/components/Tag/SelectableTag.js +3 -1
- package/es/components/Tag/Tag.js +1 -1
- package/es/components/TextArea/TextArea.js +1 -1
- package/es/components/TextInput/PasswordInput.js +5 -0
- package/es/components/TextInput/TextInput.js +1 -1
- package/es/components/Tile/Tile.js +2 -2
- package/es/components/TreeView/TreeNode.d.ts +150 -0
- package/es/components/TreeView/TreeNode.js +22 -15
- package/es/components/TreeView/TreeView.d.ts +59 -0
- package/es/components/TreeView/TreeView.js +37 -23
- package/es/components/TreeView/index.d.ts +11 -0
- package/es/components/UIShell/SwitcherItem.d.ts +4 -0
- package/es/components/UIShell/SwitcherItem.js +7 -1
- package/es/index.d.ts +4 -2
- package/es/index.js +6 -6
- package/es/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js +143 -0
- package/es/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs.js +39 -0
- package/lib/components/{Slug → AILabel}/index.js +49 -37
- package/lib/components/{AiSkeleton/AiSkeletonIcon.d.ts → AISkeleton/AISkeletonIcon.d.ts} +4 -4
- package/lib/components/{AiSkeleton/AiSkeletonIcon.js → AISkeleton/AISkeletonIcon.js} +5 -5
- package/lib/components/{AiSkeleton/AiSkeletonPlaceholder.d.ts → AISkeleton/AISkeletonPlaceholder.d.ts} +4 -4
- package/lib/components/{AiSkeleton/AiSkeletonPlaceholder.js → AISkeleton/AISkeletonPlaceholder.js} +5 -5
- package/lib/components/{AiSkeleton/AiSkeletonText.d.ts → AISkeleton/AISkeletonText.d.ts} +4 -4
- package/lib/components/{AiSkeleton/AiSkeletonText.js → AISkeleton/AISkeletonText.js} +3 -3
- package/lib/components/AISkeleton/index.d.ts +10 -0
- package/lib/components/Accordion/AccordionItem.js +1 -0
- package/lib/components/CheckboxGroup/CheckboxGroup.js +1 -1
- package/lib/components/ComboBox/ComboBox.js +4 -4
- package/lib/components/ComposedModal/ComposedModal.js +1 -1
- package/lib/components/DataTable/DataTable.js +2 -2
- package/lib/components/DatePicker/DatePicker.js +15 -0
- package/lib/components/DatePickerInput/DatePickerInput.js +1 -1
- package/lib/components/Dropdown/Dropdown.js +12 -6
- package/lib/components/FluidMultiSelect/FluidMultiSelect.js +4 -2
- package/lib/components/Menu/MenuItem.js +44 -62
- package/lib/components/Modal/Modal.js +1 -1
- package/lib/components/MultiSelect/FilterableMultiSelect.js +43 -22
- package/lib/components/MultiSelect/MultiSelect.js +6 -4
- package/lib/components/NumberInput/NumberInput.js +12 -4
- package/lib/components/OverflowMenu/OverflowMenu.js +2 -1
- package/lib/components/OverflowMenu/next/index.js +2 -1
- package/lib/components/RadioButtonGroup/RadioButtonGroup.js +1 -1
- package/lib/components/RadioTile/RadioTile.js +1 -1
- package/lib/components/Select/Select.js +1 -1
- package/lib/components/Tabs/Tabs.js +2 -2
- package/lib/components/Tag/DismissibleTag.js +1 -1
- package/lib/components/Tag/OperationalTag.js +1 -1
- package/lib/components/Tag/SelectableTag.js +3 -1
- package/lib/components/Tag/Tag.js +1 -1
- package/lib/components/TextArea/TextArea.js +1 -1
- package/lib/components/TextInput/PasswordInput.js +5 -0
- package/lib/components/TextInput/TextInput.js +1 -1
- package/lib/components/Tile/Tile.js +2 -2
- package/lib/components/TreeView/TreeNode.d.ts +150 -0
- package/lib/components/TreeView/TreeNode.js +24 -17
- package/lib/components/TreeView/TreeView.d.ts +59 -0
- package/lib/components/TreeView/TreeView.js +39 -25
- package/lib/components/TreeView/index.d.ts +11 -0
- package/lib/components/UIShell/SwitcherItem.d.ts +4 -0
- package/lib/components/UIShell/SwitcherItem.js +7 -1
- package/lib/index.d.ts +4 -2
- package/lib/index.js +20 -14
- package/lib/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js +148 -0
- package/lib/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs.js +47 -0
- package/package.json +5 -5
- package/scss/components/ai-label/_ai-label.scss +9 -0
- package/scss/components/ai-label/_index.scss +9 -0
- package/es/components/AiSkeleton/index.d.ts +0 -10
- package/es/components/DataTable/tools/instanceId.js +0 -20
- package/lib/components/AiSkeleton/index.d.ts +0 -10
- package/lib/components/DataTable/tools/instanceId.js +0 -24
|
@@ -562,6 +562,21 @@ const DatePicker = /*#__PURE__*/React__default["default"].forwardRef(function Da
|
|
|
562
562
|
}
|
|
563
563
|
}, [value, prefix]); //eslint-disable-line react-hooks/exhaustive-deps
|
|
564
564
|
|
|
565
|
+
React.useEffect(() => {
|
|
566
|
+
if (!calendarRef.current || !startInputField.current) return;
|
|
567
|
+
const handleKeyDown = event => {
|
|
568
|
+
if (match.match(event, keys.Tab) && !event.shiftKey && document.activeElement === endInputField.current && calendarRef.current.isOpen) {
|
|
569
|
+
calendarRef.current.close();
|
|
570
|
+
// Remove focus from endDate calendar input
|
|
571
|
+
document.activeElement instanceof HTMLElement &&
|
|
572
|
+
// this is to fix the TS warning
|
|
573
|
+
document?.activeElement?.blur();
|
|
574
|
+
onCalendarClose(calendarRef.current.selectedDates, '', calendarRef.current, event);
|
|
575
|
+
}
|
|
576
|
+
};
|
|
577
|
+
document.addEventListener('keydown', handleKeyDown, true);
|
|
578
|
+
return () => document.removeEventListener('keydown', handleKeyDown, true);
|
|
579
|
+
}, [calendarRef, startInputField, endInputField, onCalendarClose]);
|
|
565
580
|
let fluidError;
|
|
566
581
|
if (isFluid) {
|
|
567
582
|
if (invalid) {
|
|
@@ -107,7 +107,7 @@ const DatePickerInput = /*#__PURE__*/React__default["default"].forwardRef(functi
|
|
|
107
107
|
|
|
108
108
|
// Slug is always size `mini`
|
|
109
109
|
let normalizedSlug;
|
|
110
|
-
if (slug && slug['type']?.displayName === '
|
|
110
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
111
111
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
112
112
|
size: 'mini'
|
|
113
113
|
});
|
|
@@ -23,6 +23,7 @@ require('../FluidForm/FluidForm.js');
|
|
|
23
23
|
var FormContext = require('../FluidForm/FormContext.js');
|
|
24
24
|
var useId = require('../../internal/useId.js');
|
|
25
25
|
var react = require('@floating-ui/react');
|
|
26
|
+
var floatingUi_core = require('../../node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js');
|
|
26
27
|
var ListBoxPropTypes = require('../ListBox/ListBoxPropTypes.js');
|
|
27
28
|
|
|
28
29
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -82,7 +83,8 @@ const Dropdown = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
|
|
|
82
83
|
} = _ref;
|
|
83
84
|
const {
|
|
84
85
|
refs,
|
|
85
|
-
floatingStyles
|
|
86
|
+
floatingStyles,
|
|
87
|
+
middlewareData
|
|
86
88
|
} = react.useFloating(autoAlign ? {
|
|
87
89
|
placement: direction,
|
|
88
90
|
// The floating element is positioned relative to its nearest
|
|
@@ -101,15 +103,19 @@ const Dropdown = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
|
|
|
101
103
|
width: `${rects.reference.width}px`
|
|
102
104
|
});
|
|
103
105
|
}
|
|
104
|
-
}), react.flip()],
|
|
106
|
+
}), react.flip(), floatingUi_core.hide()],
|
|
105
107
|
whileElementsMounted: react.autoUpdate
|
|
106
108
|
} : {} // When autoAlign is turned off, floating-ui will not be used
|
|
107
109
|
);
|
|
108
110
|
React.useEffect(() => {
|
|
109
111
|
if (autoAlign) {
|
|
110
|
-
|
|
112
|
+
const updatedFloatingStyles = {
|
|
113
|
+
...floatingStyles,
|
|
114
|
+
visibility: middlewareData.hide?.referenceHidden ? 'hidden' : 'visible'
|
|
115
|
+
};
|
|
116
|
+
Object.keys(updatedFloatingStyles).forEach(style => {
|
|
111
117
|
if (refs.floating.current) {
|
|
112
|
-
refs.floating.current.style[style] =
|
|
118
|
+
refs.floating.current.style[style] = updatedFloatingStyles[style];
|
|
113
119
|
}
|
|
114
120
|
});
|
|
115
121
|
}
|
|
@@ -270,11 +276,11 @@ const Dropdown = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref) =
|
|
|
270
276
|
};
|
|
271
277
|
const menuProps = React.useMemo(() => getMenuProps({
|
|
272
278
|
ref: autoAlign ? refs.setFloating : null
|
|
273
|
-
}), [autoAlign]);
|
|
279
|
+
}), [autoAlign, getMenuProps, refs.setFloating]);
|
|
274
280
|
|
|
275
281
|
// Slug is always size `mini`
|
|
276
282
|
let normalizedSlug;
|
|
277
|
-
if (slug && slug['type']?.displayName === '
|
|
283
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
278
284
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
279
285
|
size: 'mini'
|
|
280
286
|
});
|
|
@@ -63,7 +63,8 @@ FluidMultiSelect.propTypes = {
|
|
|
63
63
|
clearSelectionText: PropTypes__default["default"].string,
|
|
64
64
|
/**
|
|
65
65
|
* Provide a compare function that is used to determine the ordering of
|
|
66
|
-
* options. See 'sortItems' for more control.
|
|
66
|
+
* options. See 'sortItems' for more control. Consider declaring function
|
|
67
|
+
* with `useCallback` to prevent unnecessary re-renders.
|
|
67
68
|
*/
|
|
68
69
|
compareItems: PropTypes__default["default"].func,
|
|
69
70
|
/**
|
|
@@ -116,7 +117,8 @@ FluidMultiSelect.propTypes = {
|
|
|
116
117
|
/**
|
|
117
118
|
* Helper function passed to downshift that allows the library to render a
|
|
118
119
|
* given item to a string label. By default, it extracts the `label` field
|
|
119
|
-
* from a given item to serve as the item label in the list.
|
|
120
|
+
* from a given item to serve as the item label in the list. Consider
|
|
121
|
+
* declaring function with `useCallback` to prevent unnecessary re-renders.
|
|
120
122
|
*/
|
|
121
123
|
itemToString: PropTypes__default["default"].func,
|
|
122
124
|
/**
|
|
@@ -13,6 +13,7 @@ var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelper
|
|
|
13
13
|
var cx = require('classnames');
|
|
14
14
|
var PropTypes = require('prop-types');
|
|
15
15
|
var React = require('react');
|
|
16
|
+
var react = require('@floating-ui/react');
|
|
16
17
|
var iconsReact = require('@carbon/icons-react');
|
|
17
18
|
var useControllableState = require('../../internal/useControllableState.js');
|
|
18
19
|
var useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
@@ -33,9 +34,6 @@ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
|
33
34
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
34
35
|
|
|
35
36
|
var _CaretLeft, _CaretRight;
|
|
36
|
-
const hoverIntentDelay = 150; // in ms
|
|
37
|
-
const leaveIntentDelay = 300; // in ms
|
|
38
|
-
|
|
39
37
|
const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(_ref, forwardRef) {
|
|
40
38
|
let {
|
|
41
39
|
children,
|
|
@@ -48,19 +46,37 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(_ref, forwardRe
|
|
|
48
46
|
shortcut,
|
|
49
47
|
...rest
|
|
50
48
|
} = _ref;
|
|
49
|
+
const [submenuOpen, setSubmenuOpen] = React.useState(false);
|
|
50
|
+
const [rtl, setRtl] = React.useState(false);
|
|
51
|
+
const {
|
|
52
|
+
refs,
|
|
53
|
+
floatingStyles,
|
|
54
|
+
context: floatingContext
|
|
55
|
+
} = react.useFloating({
|
|
56
|
+
open: submenuOpen,
|
|
57
|
+
onOpenChange: setSubmenuOpen,
|
|
58
|
+
placement: rtl ? 'left-start' : 'right-start',
|
|
59
|
+
whileElementsMounted: react.autoUpdate,
|
|
60
|
+
middleware: [react.offset({
|
|
61
|
+
mainAxis: -6,
|
|
62
|
+
crossAxis: -6
|
|
63
|
+
})]
|
|
64
|
+
});
|
|
65
|
+
const {
|
|
66
|
+
getReferenceProps,
|
|
67
|
+
getFloatingProps
|
|
68
|
+
} = react.useInteractions([react.useHover(floatingContext, {
|
|
69
|
+
delay: 100,
|
|
70
|
+
enabled: true,
|
|
71
|
+
handleClose: react.safePolygon({
|
|
72
|
+
requireIntent: false
|
|
73
|
+
})
|
|
74
|
+
})]);
|
|
51
75
|
const prefix = usePrefix.usePrefix();
|
|
52
76
|
const context = React.useContext(MenuContext.MenuContext);
|
|
53
77
|
const menuItem = React.useRef(null);
|
|
54
|
-
const ref = useMergedRefs.useMergedRefs([forwardRef, menuItem]);
|
|
55
|
-
const [boundaries, setBoundaries] = React.useState({
|
|
56
|
-
x: -1,
|
|
57
|
-
y: -1
|
|
58
|
-
});
|
|
59
|
-
const [rtl, setRtl] = React.useState(false);
|
|
78
|
+
const ref = useMergedRefs.useMergedRefs([forwardRef, menuItem, refs.setReference]);
|
|
60
79
|
const hasChildren = Boolean(children);
|
|
61
|
-
const [submenuOpen, setSubmenuOpen] = React.useState(false);
|
|
62
|
-
const hoverIntentTimeout = React.useRef(null);
|
|
63
|
-
const leaveIntentTimeout = React.useRef(null);
|
|
64
80
|
const isDisabled = disabled && !hasChildren;
|
|
65
81
|
const isDanger = kind === 'danger' && !hasChildren;
|
|
66
82
|
function registerItem() {
|
|
@@ -76,31 +92,10 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(_ref, forwardRe
|
|
|
76
92
|
if (!menuItem.current) {
|
|
77
93
|
return;
|
|
78
94
|
}
|
|
79
|
-
const {
|
|
80
|
-
x,
|
|
81
|
-
y,
|
|
82
|
-
width,
|
|
83
|
-
height
|
|
84
|
-
} = menuItem.current.getBoundingClientRect();
|
|
85
|
-
if (rtl) {
|
|
86
|
-
setBoundaries({
|
|
87
|
-
x: [-x, x - width],
|
|
88
|
-
y: [y, y + height]
|
|
89
|
-
});
|
|
90
|
-
} else {
|
|
91
|
-
setBoundaries({
|
|
92
|
-
x: [x, x + width],
|
|
93
|
-
y: [y, y + height]
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
95
|
setSubmenuOpen(true);
|
|
97
96
|
}
|
|
98
97
|
function closeSubmenu() {
|
|
99
98
|
setSubmenuOpen(false);
|
|
100
|
-
setBoundaries({
|
|
101
|
-
x: -1,
|
|
102
|
-
y: -1
|
|
103
|
-
});
|
|
104
99
|
}
|
|
105
100
|
function handleClick(e) {
|
|
106
101
|
if (!isDisabled) {
|
|
@@ -114,27 +109,6 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(_ref, forwardRe
|
|
|
114
109
|
}
|
|
115
110
|
}
|
|
116
111
|
}
|
|
117
|
-
function handleMouseEnter() {
|
|
118
|
-
if (leaveIntentTimeout.current) {
|
|
119
|
-
// When mouse reenters before closing keep sub menu open
|
|
120
|
-
clearTimeout(leaveIntentTimeout.current);
|
|
121
|
-
leaveIntentTimeout.current = null;
|
|
122
|
-
}
|
|
123
|
-
hoverIntentTimeout.current = setTimeout(() => {
|
|
124
|
-
openSubmenu();
|
|
125
|
-
}, hoverIntentDelay);
|
|
126
|
-
}
|
|
127
|
-
function handleMouseLeave() {
|
|
128
|
-
if (hoverIntentTimeout.current) {
|
|
129
|
-
clearTimeout(hoverIntentTimeout.current);
|
|
130
|
-
// Avoid closing the sub menu as soon as mouse leaves
|
|
131
|
-
// prevents accidental closure due to scroll bar
|
|
132
|
-
leaveIntentTimeout.current = setTimeout(() => {
|
|
133
|
-
closeSubmenu();
|
|
134
|
-
menuItem.current?.focus();
|
|
135
|
-
}, leaveIntentDelay);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
112
|
function handleKeyDown(e) {
|
|
139
113
|
if (hasChildren && match.match(e, keys.ArrowRight)) {
|
|
140
114
|
openSubmenu();
|
|
@@ -179,7 +153,18 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(_ref, forwardRe
|
|
|
179
153
|
});
|
|
180
154
|
}
|
|
181
155
|
}, [iconsAllowed, IconElement, context.state.hasIcons, context]);
|
|
182
|
-
|
|
156
|
+
React.useEffect(() => {
|
|
157
|
+
Object.keys(floatingStyles).forEach(style => {
|
|
158
|
+
if (refs.floating.current && style !== 'position') {
|
|
159
|
+
refs.floating.current.style[style] = floatingStyles[style];
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}, [floatingStyles, refs.floating]);
|
|
163
|
+
return /*#__PURE__*/React__default["default"].createElement(react.FloatingFocusManager, {
|
|
164
|
+
context: floatingContext,
|
|
165
|
+
order: ['reference', 'floating'],
|
|
166
|
+
modal: false
|
|
167
|
+
}, /*#__PURE__*/React__default["default"].createElement("li", _rollupPluginBabelHelpers["extends"]({
|
|
183
168
|
role: "menuitem"
|
|
184
169
|
}, rest, {
|
|
185
170
|
ref: ref,
|
|
@@ -189,10 +174,8 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(_ref, forwardRe
|
|
|
189
174
|
"aria-haspopup": hasChildren ?? undefined,
|
|
190
175
|
"aria-expanded": hasChildren ? submenuOpen : undefined,
|
|
191
176
|
onClick: handleClick,
|
|
192
|
-
onMouseEnter: hasChildren ? handleMouseEnter : undefined,
|
|
193
|
-
onMouseLeave: hasChildren ? handleMouseLeave : undefined,
|
|
194
177
|
onKeyDown: handleKeyDown
|
|
195
|
-
}), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
178
|
+
}, getReferenceProps()), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
196
179
|
className: `${prefix}--menu-item__icon`
|
|
197
180
|
}, iconsAllowed && IconElement && /*#__PURE__*/React__default["default"].createElement(IconElement, null)), /*#__PURE__*/React__default["default"].createElement(Text.Text, {
|
|
198
181
|
as: "div",
|
|
@@ -202,16 +185,15 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(_ref, forwardRe
|
|
|
202
185
|
className: `${prefix}--menu-item__shortcut`
|
|
203
186
|
}, shortcut), hasChildren && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
204
187
|
className: `${prefix}--menu-item__shortcut`
|
|
205
|
-
}, rtl ? _CaretLeft || (_CaretLeft = /*#__PURE__*/React__default["default"].createElement(iconsReact.CaretLeft, null)) : _CaretRight || (_CaretRight = /*#__PURE__*/React__default["default"].createElement(iconsReact.CaretRight, null))), /*#__PURE__*/React__default["default"].createElement(Menu.Menu, {
|
|
188
|
+
}, rtl ? _CaretLeft || (_CaretLeft = /*#__PURE__*/React__default["default"].createElement(iconsReact.CaretLeft, null)) : _CaretRight || (_CaretRight = /*#__PURE__*/React__default["default"].createElement(iconsReact.CaretRight, null))), /*#__PURE__*/React__default["default"].createElement(Menu.Menu, _rollupPluginBabelHelpers["extends"]({
|
|
206
189
|
label: label,
|
|
207
190
|
open: submenuOpen,
|
|
208
191
|
onClose: () => {
|
|
209
192
|
closeSubmenu();
|
|
210
193
|
menuItem.current?.focus();
|
|
211
194
|
},
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}, children)));
|
|
195
|
+
ref: refs.setFloating
|
|
196
|
+
}, getFloatingProps()), children))));
|
|
215
197
|
});
|
|
216
198
|
MenuItem.propTypes = {
|
|
217
199
|
/**
|
|
@@ -240,7 +240,7 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal(_
|
|
|
240
240
|
|
|
241
241
|
// Slug is always size `sm`
|
|
242
242
|
let normalizedSlug;
|
|
243
|
-
if (slug && slug['type']?.displayName === '
|
|
243
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
244
244
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
245
245
|
size: 'sm'
|
|
246
246
|
});
|
|
@@ -176,20 +176,23 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
176
176
|
setPrevOpen(open);
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
-
//
|
|
180
|
-
const sortedItems =
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
179
|
+
// memoize sorted items to reduce unnecessary expensive sort on rerender
|
|
180
|
+
const sortedItems = React.useMemo(() => {
|
|
181
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
182
|
+
return sortItems(filterItems(items, {
|
|
183
|
+
itemToString: itemToString$1,
|
|
184
|
+
inputValue
|
|
185
|
+
}), {
|
|
186
|
+
selectedItems: {
|
|
187
|
+
top: controlledSelectedItems,
|
|
188
|
+
fixed: [],
|
|
189
|
+
'top-after-reopen': topItems
|
|
190
|
+
}[selectionFeedback],
|
|
191
|
+
itemToString: itemToString$1,
|
|
192
|
+
compareItems,
|
|
193
|
+
locale
|
|
194
|
+
});
|
|
195
|
+
}, [items, inputValue, controlledSelectedItems, topItems, selectionFeedback, itemToString$1, compareItems, locale]);
|
|
193
196
|
const inline = type === 'inline';
|
|
194
197
|
const showWarning = !invalid && warn;
|
|
195
198
|
const wrapperClasses = cx__default["default"](`${prefix}--multi-select__wrapper`, `${prefix}--multi-select--filterable__wrapper`, `${prefix}--list-box__wrapper`, containerClassName, {
|
|
@@ -229,9 +232,15 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
229
232
|
setTopItems(controlledSelectedItems);
|
|
230
233
|
}
|
|
231
234
|
}, [controlledSelectedItems, isOpen, setTopItems]);
|
|
235
|
+
const validateHighlightFocus = () => {
|
|
236
|
+
if (controlledSelectedItems.length > 0) {
|
|
237
|
+
setHighlightedIndex(0);
|
|
238
|
+
}
|
|
239
|
+
};
|
|
232
240
|
function handleMenuChange(forceIsOpen) {
|
|
233
241
|
const nextIsOpen = forceIsOpen ?? !isOpen;
|
|
234
242
|
setIsOpen(nextIsOpen);
|
|
243
|
+
validateHighlightFocus();
|
|
235
244
|
if (onMenuChange) {
|
|
236
245
|
onMenuChange(nextIsOpen);
|
|
237
246
|
}
|
|
@@ -249,9 +258,8 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
249
258
|
} = Downshift.useCombobox({
|
|
250
259
|
isOpen,
|
|
251
260
|
items: sortedItems,
|
|
261
|
+
// defaultHighlightedIndex: 0, // after selection, highlight the first item.
|
|
252
262
|
itemToString: itemToString$1,
|
|
253
|
-
defaultHighlightedIndex: 0,
|
|
254
|
-
// after selection, highlight the first item.
|
|
255
263
|
id,
|
|
256
264
|
labelId,
|
|
257
265
|
menuId,
|
|
@@ -296,24 +304,37 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
296
304
|
return changes;
|
|
297
305
|
case FunctionToggleMenu:
|
|
298
306
|
case ToggleButtonClick:
|
|
307
|
+
validateHighlightFocus();
|
|
299
308
|
if (changes.isOpen && !changes.selectedItem) {
|
|
300
309
|
return {
|
|
301
|
-
...changes
|
|
302
|
-
highlightedIndex: 0
|
|
310
|
+
...changes
|
|
303
311
|
};
|
|
304
312
|
}
|
|
305
|
-
return
|
|
313
|
+
return {
|
|
314
|
+
...changes,
|
|
315
|
+
highlightedIndex: null
|
|
316
|
+
};
|
|
306
317
|
case InputChange:
|
|
307
318
|
if (onInputValueChange) {
|
|
308
319
|
onInputValueChange(changes.inputValue);
|
|
309
320
|
}
|
|
310
321
|
setInputValue(changes.inputValue ?? '');
|
|
311
322
|
setIsOpen(true);
|
|
312
|
-
return
|
|
323
|
+
return {
|
|
324
|
+
...changes,
|
|
325
|
+
highlightedIndex: 0
|
|
326
|
+
};
|
|
313
327
|
case InputClick:
|
|
328
|
+
validateHighlightFocus();
|
|
329
|
+
if (changes.isOpen && !changes.selectedItem) {
|
|
330
|
+
return {
|
|
331
|
+
...changes
|
|
332
|
+
};
|
|
333
|
+
}
|
|
314
334
|
return {
|
|
315
335
|
...changes,
|
|
316
|
-
isOpen: false
|
|
336
|
+
isOpen: false,
|
|
337
|
+
highlightedIndex: null
|
|
317
338
|
};
|
|
318
339
|
case MenuMouseLeave:
|
|
319
340
|
return {
|
|
@@ -397,7 +418,7 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
397
418
|
|
|
398
419
|
// Slug is always size `mini`
|
|
399
420
|
let normalizedSlug;
|
|
400
|
-
if (slug && slug['type']?.displayName === '
|
|
421
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
401
422
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
402
423
|
size: 'mini'
|
|
403
424
|
});
|
|
@@ -322,7 +322,7 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
|
|
|
322
322
|
setIsOpenWrapper(changes.isOpen || false);
|
|
323
323
|
return {
|
|
324
324
|
...changes,
|
|
325
|
-
highlightedIndex: 0
|
|
325
|
+
highlightedIndex: controlledSelectedItems.length > 0 ? 0 : undefined
|
|
326
326
|
};
|
|
327
327
|
case ItemClick:
|
|
328
328
|
setHighlightedIndex(changes.selectedItem);
|
|
@@ -397,7 +397,7 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
|
|
|
397
397
|
|
|
398
398
|
// Slug is always size `mini`
|
|
399
399
|
let normalizedSlug;
|
|
400
|
-
if (slug && slug['type']?.displayName === '
|
|
400
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
401
401
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
402
402
|
size: 'mini'
|
|
403
403
|
});
|
|
@@ -517,7 +517,8 @@ MultiSelect.propTypes = {
|
|
|
517
517
|
clearSelectionText: PropTypes__default["default"].string,
|
|
518
518
|
/**
|
|
519
519
|
* Provide a compare function that is used to determine the ordering of
|
|
520
|
-
* options. See 'sortItems' for more control.
|
|
520
|
+
* options. See 'sortItems' for more control. Consider
|
|
521
|
+
* declaring function with `useCallback` to prevent unnecessary re-renders.
|
|
521
522
|
*/
|
|
522
523
|
compareItems: PropTypes__default["default"].func,
|
|
523
524
|
/**
|
|
@@ -571,7 +572,8 @@ MultiSelect.propTypes = {
|
|
|
571
572
|
/**
|
|
572
573
|
* Helper function passed to downshift that allows the library to render a
|
|
573
574
|
* given item to a string label. By default, it extracts the `label` field
|
|
574
|
-
* from a given item to serve as the item label in the list.
|
|
575
|
+
* from a given item to serve as the item label in the list. Consider
|
|
576
|
+
* declaring function with `useCallback` to prevent unnecessary re-renders.
|
|
575
577
|
*/
|
|
576
578
|
itemToString: PropTypes__default["default"].func,
|
|
577
579
|
/**
|
|
@@ -173,9 +173,17 @@ const NumberInput = /*#__PURE__*/React__default["default"].forwardRef(function N
|
|
|
173
173
|
const Icon = normalizedProps.icon;
|
|
174
174
|
function handleStepperClick(event, direction) {
|
|
175
175
|
if (inputRef.current) {
|
|
176
|
-
|
|
176
|
+
const currentValue = Number(inputRef.current.value);
|
|
177
|
+
let newValue = direction === 'up' ? currentValue + step : currentValue - step;
|
|
178
|
+
if (min !== undefined) {
|
|
179
|
+
newValue = Math.max(newValue, min);
|
|
180
|
+
}
|
|
181
|
+
if (max !== undefined) {
|
|
182
|
+
newValue = Math.min(newValue, max);
|
|
183
|
+
}
|
|
184
|
+
const currentInputValue = inputRef.current ? inputRef.current.value : '';
|
|
177
185
|
const state = {
|
|
178
|
-
value: allowEmpty &&
|
|
186
|
+
value: allowEmpty && currentInputValue === '' && step === 0 ? '' : newValue,
|
|
179
187
|
direction: direction
|
|
180
188
|
};
|
|
181
189
|
setValue(state.value);
|
|
@@ -190,7 +198,7 @@ const NumberInput = /*#__PURE__*/React__default["default"].forwardRef(function N
|
|
|
190
198
|
|
|
191
199
|
// Slug is always size `mini`
|
|
192
200
|
let normalizedSlug;
|
|
193
|
-
if (slug && slug['type']?.displayName === '
|
|
201
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
194
202
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
195
203
|
size: 'mini'
|
|
196
204
|
});
|
|
@@ -198,7 +206,7 @@ const NumberInput = /*#__PURE__*/React__default["default"].forwardRef(function N
|
|
|
198
206
|
|
|
199
207
|
// Need to update the internal value when the revert button is clicked
|
|
200
208
|
let isRevertActive;
|
|
201
|
-
if (slug && slug['type']?.displayName === '
|
|
209
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
202
210
|
isRevertActive = normalizedSlug.props.revertActive;
|
|
203
211
|
}
|
|
204
212
|
React.useEffect(() => {
|
|
@@ -416,7 +416,8 @@ class OverflowMenu extends React__default["default"].Component {
|
|
|
416
416
|
id: id,
|
|
417
417
|
ref: mergeRefs["default"](this._triggerRef, ref),
|
|
418
418
|
size: size,
|
|
419
|
-
label: iconDescription
|
|
419
|
+
label: iconDescription,
|
|
420
|
+
kind: "ghost"
|
|
420
421
|
}), /*#__PURE__*/React__default["default"].createElement(IconElement, iconProps)), open && this.state.hasMountedTrigger && wrappedMenuBody));
|
|
421
422
|
}
|
|
422
423
|
}
|
|
@@ -106,7 +106,8 @@ const OverflowMenu = /*#__PURE__*/React__default["default"].forwardRef(function
|
|
|
106
106
|
onMouseDown: handleMousedown,
|
|
107
107
|
ref: floatingRef,
|
|
108
108
|
label: label,
|
|
109
|
-
align: tooltipAlignment
|
|
109
|
+
align: tooltipAlignment,
|
|
110
|
+
kind: "ghost"
|
|
110
111
|
}, /*#__PURE__*/React__default["default"].createElement(IconElement, {
|
|
111
112
|
className: `${prefix}--overflow-menu__icon`
|
|
112
113
|
})), /*#__PURE__*/React__default["default"].createElement(Menu.Menu, {
|
|
@@ -111,7 +111,7 @@ const RadioButtonGroup = /*#__PURE__*/React__default["default"].forwardRef((prop
|
|
|
111
111
|
|
|
112
112
|
// Slug is always size `mini`
|
|
113
113
|
let normalizedSlug;
|
|
114
|
-
if (slug && slug['type']?.displayName === '
|
|
114
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
115
115
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
116
116
|
size: 'mini',
|
|
117
117
|
kind: 'default'
|
|
@@ -81,7 +81,7 @@ const RadioTile = /*#__PURE__*/React__default["default"].forwardRef(function Rad
|
|
|
81
81
|
|
|
82
82
|
// Slug is always size `xs`
|
|
83
83
|
let normalizedSlug;
|
|
84
|
-
if (slug && slug['type']?.displayName === '
|
|
84
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
85
85
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
86
86
|
size: 'xs'
|
|
87
87
|
});
|
|
@@ -135,7 +135,7 @@ const Select = /*#__PURE__*/React__default["default"].forwardRef(function Select
|
|
|
135
135
|
|
|
136
136
|
// Slug is always size `mini`
|
|
137
137
|
let normalizedSlug;
|
|
138
|
-
if (slug && slug['type']?.displayName === '
|
|
138
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
139
139
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
140
140
|
size: 'mini'
|
|
141
141
|
});
|
|
@@ -798,7 +798,7 @@ const Tab = /*#__PURE__*/React.forwardRef(function Tab(_ref8, forwardRef) {
|
|
|
798
798
|
};
|
|
799
799
|
useEvent.useEvent(dismissIconRef, 'mouseover', onDismissIconMouseEnter);
|
|
800
800
|
useEvent.useEvent(dismissIconRef, 'mouseleave', onDismissIconMouseLeave);
|
|
801
|
-
|
|
801
|
+
useIsomorphicEffect["default"](() => {
|
|
802
802
|
function handler() {
|
|
803
803
|
const elementTabId = document.getElementById(`${id}`) || tabRef.current;
|
|
804
804
|
if (elementTabId?.closest(`.${prefix}--tabs--vertical`)) {
|
|
@@ -1139,7 +1139,7 @@ function TabPanels(_ref11) {
|
|
|
1139
1139
|
const prefix = usePrefix.usePrefix();
|
|
1140
1140
|
const refs = React.useRef([]);
|
|
1141
1141
|
const hiddenStates = React.useRef([]);
|
|
1142
|
-
|
|
1142
|
+
useIsomorphicEffect["default"](() => {
|
|
1143
1143
|
const tabContainer = refs.current[0]?.previousElementSibling;
|
|
1144
1144
|
const isVertical = tabContainer?.classList.contains(`${prefix}--tabs--vertical`);
|
|
1145
1145
|
const parentHasHeight = tabContainer?.parentElement?.style.height;
|
|
@@ -60,7 +60,7 @@ const DismissibleTag = _ref => {
|
|
|
60
60
|
}
|
|
61
61
|
};
|
|
62
62
|
let normalizedSlug;
|
|
63
|
-
if (slug && slug['type']?.displayName === '
|
|
63
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
64
64
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
65
65
|
size: 'sm',
|
|
66
66
|
kind: 'inline'
|
|
@@ -62,7 +62,7 @@ const OperationalTag = _ref => {
|
|
|
62
62
|
setIsEllipsisApplied(isEllipsisActive.isEllipsisActive(newElement));
|
|
63
63
|
}, [prefix, tagRef]);
|
|
64
64
|
let normalizedSlug;
|
|
65
|
-
if (slug && slug['type']?.displayName === '
|
|
65
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
66
66
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
67
67
|
size: 'sm',
|
|
68
68
|
kind: 'inline'
|
|
@@ -53,7 +53,7 @@ const SelectableTag = _ref => {
|
|
|
53
53
|
setIsEllipsisApplied(isEllipsisActive.isEllipsisActive(newElement));
|
|
54
54
|
}, [prefix, tagRef]);
|
|
55
55
|
let normalizedSlug;
|
|
56
|
-
if (slug && slug['type']?.displayName === '
|
|
56
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
57
57
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
58
58
|
size: 'sm',
|
|
59
59
|
kind: 'inline'
|
|
@@ -75,6 +75,7 @@ const SelectableTag = _ref => {
|
|
|
75
75
|
leaveDelayMs: 0,
|
|
76
76
|
onMouseEnter: () => false
|
|
77
77
|
}, /*#__PURE__*/React__default["default"].createElement(Tag["default"], _rollupPluginBabelHelpers["extends"]({
|
|
78
|
+
"aria-pressed": selectedTag,
|
|
78
79
|
ref: tagRef,
|
|
79
80
|
slug: slug,
|
|
80
81
|
size: size,
|
|
@@ -89,6 +90,7 @@ const SelectableTag = _ref => {
|
|
|
89
90
|
}, text), normalizedSlug));
|
|
90
91
|
}
|
|
91
92
|
return /*#__PURE__*/React__default["default"].createElement(Tag["default"], _rollupPluginBabelHelpers["extends"]({
|
|
93
|
+
"aria-pressed": selectedTag,
|
|
92
94
|
ref: tagRef,
|
|
93
95
|
slug: slug,
|
|
94
96
|
size: size,
|
|
@@ -99,7 +99,7 @@ const Tag = /*#__PURE__*/React__default["default"].forwardRef(function Tag(_ref,
|
|
|
99
99
|
|
|
100
100
|
// Slug is always size `md` and `inline`
|
|
101
101
|
let normalizedSlug;
|
|
102
|
-
if (slug && slug['type']?.displayName === '
|
|
102
|
+
if (slug && slug['type']?.displayName === 'AILabel' && !isInteractiveTag) {
|
|
103
103
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
104
104
|
size: 'sm',
|
|
105
105
|
kind: 'inline'
|
|
@@ -265,7 +265,7 @@ const TextArea = /*#__PURE__*/React__default["default"].forwardRef((props, forwa
|
|
|
265
265
|
|
|
266
266
|
// Slug is always size `mini`
|
|
267
267
|
let normalizedSlug;
|
|
268
|
-
if (slug && slug['type']?.displayName === '
|
|
268
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
269
269
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
270
270
|
size: 'mini'
|
|
271
271
|
});
|
|
@@ -158,6 +158,11 @@ const PasswordInput = /*#__PURE__*/React__default["default"].forwardRef(function
|
|
|
158
158
|
if (tooltipPosition === 'right' || tooltipPosition === 'left') {
|
|
159
159
|
align = tooltipPosition;
|
|
160
160
|
}
|
|
161
|
+
if (!hidePasswordLabel || hidePasswordLabel.trim() === '') {
|
|
162
|
+
console.warn('Warning: The "hidePasswordLabel" should not be blank.');
|
|
163
|
+
} else if (!showPasswordLabel || showPasswordLabel.trim() === '') {
|
|
164
|
+
console.warn('Warning: The "showPasswordLabel" should not be blank.');
|
|
165
|
+
}
|
|
161
166
|
const input = /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("input", _rollupPluginBabelHelpers["extends"]({}, util.textInputProps({
|
|
162
167
|
sharedTextInputProps,
|
|
163
168
|
invalid: normalizedProps.invalid,
|
|
@@ -191,7 +191,7 @@ const TextInput = /*#__PURE__*/React__default["default"].forwardRef(function Tex
|
|
|
191
191
|
|
|
192
192
|
// Slug is always size `mini`
|
|
193
193
|
let normalizedSlug;
|
|
194
|
-
if (slug && slug['type']?.displayName === '
|
|
194
|
+
if (slug && slug['type']?.displayName === 'AILabel') {
|
|
195
195
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
196
196
|
size: 'mini'
|
|
197
197
|
});
|