@carbon/react 1.54.0-rc.0 → 1.55.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 +994 -1023
- package/es/components/Button/Button.d.ts +1 -1
- package/es/components/Button/Button.js +13 -89
- package/es/components/Button/ButtonBase.d.ts +10 -0
- package/es/components/Button/ButtonBase.js +110 -0
- package/es/components/CodeSnippet/CodeSnippet.Skeleton.d.ts +37 -0
- package/es/components/CodeSnippet/CodeSnippet.d.ts +196 -0
- package/es/components/CodeSnippet/CodeSnippet.js +20 -18
- package/es/components/CodeSnippet/index.d.ts +10 -0
- package/es/components/ComboBox/ComboBox.d.ts +2 -2
- package/es/components/ComboBox/ComboBox.js +13 -5
- package/es/components/ComboButton/index.d.ts +51 -0
- package/es/components/ComboButton/index.js +9 -7
- package/es/components/ComposedModal/ComposedModal.js +2 -2
- package/es/components/DataTable/TableBatchAction.d.ts +1 -5
- package/es/components/Dropdown/Dropdown.js +3 -1
- package/es/components/IconButton/index.js +2 -3
- package/es/components/Menu/Menu.js +2 -0
- package/es/components/Modal/Modal.js +2 -2
- package/es/components/ModalWrapper/ModalWrapper.d.ts +1 -1
- package/es/components/MultiSelect/FilterableMultiSelect.js +31 -0
- package/es/components/MultiSelect/MultiSelect.js +37 -7
- package/es/components/Slider/Slider.Skeleton.js +6 -2
- package/es/components/Slug/index.js +8 -13
- package/es/components/StructuredList/StructuredList.d.ts +8 -0
- package/es/components/StructuredList/StructuredList.js +28 -10
- package/es/components/Tag/DismissibleTag.js +119 -0
- package/es/components/Tag/OperationalTag.js +99 -0
- package/es/components/Tag/SelectableTag.js +98 -0
- package/es/components/Tag/index.d.ts +4 -1
- package/es/components/TreeView/TreeNode.js +1 -1
- package/es/components/UIShell/SideNavMenu.js +11 -1
- package/es/components/UIShell/SideNavMenuItem.d.ts +4 -0
- package/es/components/UIShell/SideNavMenuItem.js +8 -1
- package/es/components/UIShell/SwitcherItem.d.ts +4 -0
- package/es/components/UIShell/SwitcherItem.js +6 -0
- package/es/feature-flags.js +2 -1
- package/es/index.js +5 -2
- package/es/internal/environment.js +5 -1
- package/es/internal/keyboard/navigation.js +6 -2
- package/es/internal/useOutsideClick.js +31 -0
- package/lib/components/Button/Button.d.ts +1 -1
- package/lib/components/Button/Button.js +13 -90
- package/lib/components/Button/ButtonBase.d.ts +10 -0
- package/lib/components/Button/ButtonBase.js +119 -0
- package/lib/components/CodeSnippet/CodeSnippet.Skeleton.d.ts +37 -0
- package/lib/components/CodeSnippet/CodeSnippet.d.ts +196 -0
- package/lib/components/CodeSnippet/CodeSnippet.js +20 -18
- package/lib/components/CodeSnippet/index.d.ts +10 -0
- package/lib/components/ComboBox/ComboBox.d.ts +2 -2
- package/lib/components/ComboBox/ComboBox.js +13 -5
- package/lib/components/ComboButton/index.d.ts +51 -0
- package/lib/components/ComboButton/index.js +9 -7
- package/lib/components/ComposedModal/ComposedModal.js +2 -2
- package/lib/components/DataTable/TableBatchAction.d.ts +1 -5
- package/lib/components/Dropdown/Dropdown.js +3 -1
- package/lib/components/IconButton/index.js +2 -3
- package/lib/components/Menu/Menu.js +2 -0
- package/lib/components/Modal/Modal.js +2 -2
- package/lib/components/ModalWrapper/ModalWrapper.d.ts +1 -1
- package/lib/components/MultiSelect/FilterableMultiSelect.js +31 -0
- package/lib/components/MultiSelect/MultiSelect.js +37 -7
- package/lib/components/Slider/Slider.Skeleton.js +5 -1
- package/lib/components/Slug/index.js +8 -13
- package/lib/components/StructuredList/StructuredList.d.ts +8 -0
- package/lib/components/StructuredList/StructuredList.js +27 -9
- package/lib/components/Tag/DismissibleTag.js +129 -0
- package/lib/components/Tag/OperationalTag.js +109 -0
- package/lib/components/Tag/SelectableTag.js +108 -0
- package/lib/components/Tag/index.d.ts +4 -1
- package/lib/components/TreeView/TreeNode.js +1 -1
- package/lib/components/UIShell/SideNavMenu.js +11 -1
- package/lib/components/UIShell/SideNavMenuItem.d.ts +4 -0
- package/lib/components/UIShell/SideNavMenuItem.js +8 -1
- package/lib/components/UIShell/SwitcherItem.d.ts +4 -0
- package/lib/components/UIShell/SwitcherItem.js +6 -0
- package/lib/feature-flags.js +2 -1
- package/lib/index.js +10 -4
- package/lib/internal/environment.js +5 -1
- package/lib/internal/keyboard/navigation.js +6 -2
- package/lib/internal/useOutsideClick.js +35 -0
- package/package.json +6 -6
|
@@ -12,12 +12,11 @@ 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 Button = require('../Button/Button.js');
|
|
16
|
-
require('../Button/Button.Skeleton.js');
|
|
17
15
|
var cx = require('classnames');
|
|
18
16
|
require('../Tooltip/DefinitionTooltip.js');
|
|
19
17
|
var Tooltip = require('../Tooltip/Tooltip.js');
|
|
20
18
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
19
|
+
var ButtonBase = require('../Button/ButtonBase.js');
|
|
21
20
|
|
|
22
21
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
23
22
|
|
|
@@ -55,7 +54,7 @@ const IconButton = /*#__PURE__*/React__default["default"].forwardRef(function Ic
|
|
|
55
54
|
enterDelayMs: enterDelayMs,
|
|
56
55
|
label: label,
|
|
57
56
|
leaveDelayMs: leaveDelayMs
|
|
58
|
-
}, /*#__PURE__*/React__default["default"].createElement(
|
|
57
|
+
}, /*#__PURE__*/React__default["default"].createElement(ButtonBase["default"], _rollupPluginBabelHelpers["extends"]({}, rest, {
|
|
59
58
|
disabled: disabled,
|
|
60
59
|
kind: kind,
|
|
61
60
|
ref: ref,
|
|
@@ -237,11 +237,11 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal(_
|
|
|
237
237
|
};
|
|
238
238
|
}, []);
|
|
239
239
|
|
|
240
|
-
// Slug is always size `
|
|
240
|
+
// Slug is always size `sm`
|
|
241
241
|
let normalizedSlug;
|
|
242
242
|
if (slug && slug['type']?.displayName === 'Slug') {
|
|
243
243
|
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
244
|
-
size: '
|
|
244
|
+
size: 'sm'
|
|
245
245
|
});
|
|
246
246
|
}
|
|
247
247
|
const modalButton = /*#__PURE__*/React__default["default"].createElement("div", {
|
|
@@ -59,7 +59,7 @@ export default class ModalWrapper extends React.Component<ModalWrapperProps, Mod
|
|
|
59
59
|
shouldCloseAfterSubmit: PropTypes.Requireable<boolean>;
|
|
60
60
|
status: PropTypes.Requireable<string>;
|
|
61
61
|
triggerButtonIconDescription: PropTypes.Requireable<string>;
|
|
62
|
-
triggerButtonKind: PropTypes.Requireable<"primary" | "secondary" | "
|
|
62
|
+
triggerButtonKind: PropTypes.Requireable<"primary" | "secondary" | "danger" | "ghost" | "danger--primary" | "danger--ghost" | "danger--tertiary" | "tertiary">;
|
|
63
63
|
withHeader: PropTypes.Requireable<boolean>;
|
|
64
64
|
};
|
|
65
65
|
triggerButton: React.RefObject<HTMLButtonElement>;
|
|
@@ -149,6 +149,9 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
149
149
|
if (onMenuChange) {
|
|
150
150
|
onMenuChange(nextIsOpen);
|
|
151
151
|
}
|
|
152
|
+
if (!isOpen) {
|
|
153
|
+
setHighlightedIndex(0);
|
|
154
|
+
}
|
|
152
155
|
}
|
|
153
156
|
function handleOnOuterClick() {
|
|
154
157
|
handleOnMenuChange(false);
|
|
@@ -172,6 +175,34 @@ const FilterableMultiSelect = /*#__PURE__*/React__default["default"].forwardRef(
|
|
|
172
175
|
break;
|
|
173
176
|
case stateChangeTypes.keyDownEscape:
|
|
174
177
|
handleOnMenuChange(false);
|
|
178
|
+
setHighlightedIndex(0);
|
|
179
|
+
break;
|
|
180
|
+
case stateChangeTypes.changeInput:
|
|
181
|
+
setHighlightedIndex(0);
|
|
182
|
+
break;
|
|
183
|
+
case stateChangeTypes.keyDownEnter:
|
|
184
|
+
if (!isOpen) {
|
|
185
|
+
setHighlightedIndex(0);
|
|
186
|
+
}
|
|
187
|
+
break;
|
|
188
|
+
case stateChangeTypes.clickItem:
|
|
189
|
+
if (isOpen) {
|
|
190
|
+
const sortedItems = sortItems(filterItems(items, {
|
|
191
|
+
itemToString: itemToString$1,
|
|
192
|
+
inputValue
|
|
193
|
+
}), {
|
|
194
|
+
selectedItems: {
|
|
195
|
+
top: changes.selectedItems,
|
|
196
|
+
fixed: [],
|
|
197
|
+
'top-after-reopen': topItems
|
|
198
|
+
}[selectionFeedback],
|
|
199
|
+
itemToString: itemToString$1,
|
|
200
|
+
compareItems,
|
|
201
|
+
locale
|
|
202
|
+
});
|
|
203
|
+
const sortedSelectedIndex = sortedItems.indexOf(changes.selectedItem);
|
|
204
|
+
setHighlightedIndex(sortedSelectedIndex);
|
|
205
|
+
}
|
|
175
206
|
break;
|
|
176
207
|
}
|
|
177
208
|
}
|
|
@@ -48,9 +48,11 @@ const {
|
|
|
48
48
|
ToggleButtonKeyDownEscape,
|
|
49
49
|
ToggleButtonKeyDownSpaceButton,
|
|
50
50
|
ItemMouseMove,
|
|
51
|
+
MenuMouseLeave,
|
|
51
52
|
ToggleButtonClick,
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
ToggleButtonKeyDownPageDown,
|
|
54
|
+
ToggleButtonKeyDownPageUp,
|
|
55
|
+
FunctionSetHighlightedIndex
|
|
54
56
|
} = Downshift.useSelect.stateChangeTypes;
|
|
55
57
|
const defaultItemToString = item => {
|
|
56
58
|
if (typeof item === 'string') {
|
|
@@ -146,7 +148,8 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
|
|
|
146
148
|
getMenuProps,
|
|
147
149
|
getItemProps,
|
|
148
150
|
selectedItem,
|
|
149
|
-
highlightedIndex
|
|
151
|
+
highlightedIndex,
|
|
152
|
+
setHighlightedIndex
|
|
150
153
|
} = Downshift.useSelect(selectProps);
|
|
151
154
|
const toggleButtonProps = getToggleButtonProps({
|
|
152
155
|
onFocus: () => {
|
|
@@ -165,6 +168,7 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
|
|
|
165
168
|
setItemsCleared(true);
|
|
166
169
|
}
|
|
167
170
|
if ((match.match(e, keys.Space) || match.match(e, keys.ArrowDown) || match.match(e, keys.Enter)) && !isOpen) {
|
|
171
|
+
setHighlightedIndex(0);
|
|
168
172
|
setItemsCleared(false);
|
|
169
173
|
setIsOpenWrapper(true);
|
|
170
174
|
}
|
|
@@ -248,7 +252,6 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
|
|
|
248
252
|
setTopItems(controlledSelectedItems);
|
|
249
253
|
}
|
|
250
254
|
switch (type) {
|
|
251
|
-
case ItemClick:
|
|
252
255
|
case ToggleButtonKeyDownSpaceButton:
|
|
253
256
|
case ToggleButtonKeyDownEnter:
|
|
254
257
|
if (changes.selectedItem === undefined) {
|
|
@@ -268,11 +271,38 @@ const MultiSelect = /*#__PURE__*/React__default["default"].forwardRef((_ref, ref
|
|
|
268
271
|
break;
|
|
269
272
|
case ToggleButtonClick:
|
|
270
273
|
setIsOpenWrapper(changes.isOpen || false);
|
|
271
|
-
|
|
274
|
+
return {
|
|
275
|
+
...changes,
|
|
276
|
+
highlightedIndex: 0
|
|
277
|
+
};
|
|
278
|
+
case ItemClick:
|
|
279
|
+
setHighlightedIndex(changes.selectedItem);
|
|
280
|
+
onItemChange(changes.selectedItem);
|
|
281
|
+
return {
|
|
282
|
+
...changes,
|
|
283
|
+
highlightedIndex: state.highlightedIndex
|
|
284
|
+
};
|
|
285
|
+
case MenuMouseLeave:
|
|
286
|
+
return {
|
|
287
|
+
...changes,
|
|
288
|
+
highlightedIndex: state.highlightedIndex
|
|
289
|
+
};
|
|
290
|
+
case FunctionSetHighlightedIndex:
|
|
291
|
+
if (!isOpen) {
|
|
292
|
+
return {
|
|
293
|
+
...changes,
|
|
294
|
+
highlightedIndex: 0
|
|
295
|
+
};
|
|
296
|
+
} else {
|
|
297
|
+
return {
|
|
298
|
+
...changes,
|
|
299
|
+
highlightedIndex: props.items.indexOf(highlightedIndex)
|
|
300
|
+
};
|
|
301
|
+
}
|
|
272
302
|
case ToggleButtonKeyDownArrowDown:
|
|
273
303
|
case ToggleButtonKeyDownArrowUp:
|
|
274
|
-
case
|
|
275
|
-
case
|
|
304
|
+
case ToggleButtonKeyDownPageDown:
|
|
305
|
+
case ToggleButtonKeyDownPageUp:
|
|
276
306
|
if (highlightedIndex > -1) {
|
|
277
307
|
const itemArray = document.querySelectorAll(`li.${prefix}--list-box__menu-item[role="option"]`);
|
|
278
308
|
props.scrollIntoView(itemArray[highlightedIndex]);
|
|
@@ -14,6 +14,7 @@ var PropTypes = require('prop-types');
|
|
|
14
14
|
var React = require('react');
|
|
15
15
|
var cx = require('classnames');
|
|
16
16
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
17
|
+
var useIsomorphicEffect = require('../../internal/useIsomorphicEffect.js');
|
|
17
18
|
var SliderHandles = require('./SliderHandles.js');
|
|
18
19
|
|
|
19
20
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -31,7 +32,10 @@ const SliderSkeleton = _ref => {
|
|
|
31
32
|
...rest
|
|
32
33
|
} = _ref;
|
|
33
34
|
const prefix = usePrefix.usePrefix();
|
|
34
|
-
const isRtl =
|
|
35
|
+
const [isRtl, setIsRtl] = React.useState(false);
|
|
36
|
+
useIsomorphicEffect["default"](() => {
|
|
37
|
+
setIsRtl(document ? document.dir === 'rtl' : false);
|
|
38
|
+
}, []);
|
|
35
39
|
const containerClasses = cx__default["default"](`${prefix}--slider-container`, `${prefix}--skeleton`, {
|
|
36
40
|
[`${prefix}--slider-container--two-handles`]: twoHandles,
|
|
37
41
|
[`${prefix}--slider-container--rtl`]: isRtl
|
|
@@ -148,26 +148,21 @@ Slug.propTypes = {
|
|
|
148
148
|
*/
|
|
149
149
|
align: PropTypes__default["default"].oneOf(['top', 'top-left',
|
|
150
150
|
// deprecated use top-start instead
|
|
151
|
-
'top-right',
|
|
151
|
+
'top-start', 'top-right',
|
|
152
152
|
// deprecated use top-end instead
|
|
153
|
-
|
|
154
|
-
'bottom', 'bottom-left',
|
|
153
|
+
'top-end', 'bottom', 'bottom-left',
|
|
155
154
|
// deprecated use bottom-start instead
|
|
156
|
-
'bottom-right',
|
|
155
|
+
'bottom-start', 'bottom-right',
|
|
157
156
|
// deprecated use bottom-end instead
|
|
158
|
-
|
|
159
|
-
'left', 'left-bottom',
|
|
157
|
+
'bottom-end', 'left', 'left-bottom',
|
|
160
158
|
// deprecated use left-end instead
|
|
161
|
-
'left-top',
|
|
159
|
+
'left-end', 'left-top',
|
|
162
160
|
// deprecated use left-start instead
|
|
163
|
-
|
|
164
|
-
'right', 'right-bottom',
|
|
161
|
+
'left-start', 'right', 'right-bottom',
|
|
165
162
|
// deprecated use right-end instead
|
|
166
|
-
'right-top',
|
|
163
|
+
'right-end', 'right-top',
|
|
167
164
|
// deprecated use right-start instead
|
|
168
|
-
|
|
169
|
-
// new values to match floating-ui
|
|
170
|
-
'top-start', 'top-end', 'bottom-start', 'bottom-end', 'left-end', 'left-start', 'right-end', 'right-start']),
|
|
165
|
+
'right-start']),
|
|
171
166
|
/**
|
|
172
167
|
* Will auto-align the popover. This prop is currently experimental and is subject to future changes.
|
|
173
168
|
*/
|
|
@@ -144,6 +144,10 @@ export interface StructuredListRowProps extends DivAttrs {
|
|
|
144
144
|
* Provide a handler that is invoked on the key down event for the control
|
|
145
145
|
*/
|
|
146
146
|
onKeyDown?(event: KeyboardEvent): void;
|
|
147
|
+
/**
|
|
148
|
+
* Mark if this row should be selectable
|
|
149
|
+
*/
|
|
150
|
+
selection?: boolean;
|
|
147
151
|
}
|
|
148
152
|
export declare function StructuredListRow(props: StructuredListRowProps): import("react/jsx-runtime").JSX.Element;
|
|
149
153
|
export declare namespace StructuredListRow {
|
|
@@ -172,6 +176,10 @@ export declare namespace StructuredListRow {
|
|
|
172
176
|
* Provide a handler that is invoked on the key down event for the control,
|
|
173
177
|
*/
|
|
174
178
|
onKeyDown: PropTypes.Requireable<(...args: any[]) => any>;
|
|
179
|
+
/**
|
|
180
|
+
* Mark if this row should be selectable
|
|
181
|
+
*/
|
|
182
|
+
selection: PropTypes.Requireable<boolean>;
|
|
175
183
|
};
|
|
176
184
|
}
|
|
177
185
|
export interface StructuredListInputProps extends DivAttrs {
|
|
@@ -17,6 +17,8 @@ var useId = require('../../internal/useId.js');
|
|
|
17
17
|
var deprecate = require('../../prop-types/deprecate.js');
|
|
18
18
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
19
19
|
require('../Text/index.js');
|
|
20
|
+
var iconsReact = require('@carbon/icons-react');
|
|
21
|
+
var useOutsideClick = require('../../internal/useOutsideClick.js');
|
|
20
22
|
var Text = require('../Text/Text.js');
|
|
21
23
|
|
|
22
24
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -25,6 +27,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
25
27
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
26
28
|
var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
|
|
27
29
|
|
|
30
|
+
var _StructuredListCell, _RadioButtonChecked, _RadioButton;
|
|
28
31
|
const GridSelectedRowStateContext = /*#__PURE__*/React__default["default"].createContext(null);
|
|
29
32
|
const GridSelectedRowDispatchContext = /*#__PURE__*/React__default["default"].createContext(null);
|
|
30
33
|
function StructuredListWrapper(props) {
|
|
@@ -147,6 +150,7 @@ function StructuredListRow(props) {
|
|
|
147
150
|
className,
|
|
148
151
|
head,
|
|
149
152
|
onClick,
|
|
153
|
+
selection,
|
|
150
154
|
...other
|
|
151
155
|
} = props;
|
|
152
156
|
const [hasFocusWithin, setHasFocusWithin] = React.useState(false);
|
|
@@ -159,25 +163,35 @@ function StructuredListRow(props) {
|
|
|
159
163
|
};
|
|
160
164
|
const classes = cx__default["default"](`${prefix}--structured-list-row`, {
|
|
161
165
|
[`${prefix}--structured-list-row--header-row`]: head,
|
|
162
|
-
[`${prefix}--structured-list-row--focused-within`]: hasFocusWithin,
|
|
166
|
+
[`${prefix}--structured-list-row--focused-within`]: hasFocusWithin && !selection || hasFocusWithin && selection && (selectedRow === id || selectedRow === null),
|
|
167
|
+
// Ensure focus on the first item when navigating through Tab keys and no row is selected (selectedRow === null)
|
|
163
168
|
[`${prefix}--structured-list-row--selected`]: selectedRow === id
|
|
164
169
|
}, className);
|
|
170
|
+
const itemRef = React.useRef(null);
|
|
171
|
+
const handleClick = () => {
|
|
172
|
+
setHasFocusWithin(false);
|
|
173
|
+
};
|
|
174
|
+
useOutsideClick.useOutsideClick(itemRef, handleClick);
|
|
165
175
|
return head ? /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
|
|
166
176
|
role: "row"
|
|
167
177
|
}, other, {
|
|
168
|
-
className: classes
|
|
169
|
-
|
|
170
|
-
|
|
178
|
+
className: classes
|
|
179
|
+
}), selection && (_StructuredListCell || (_StructuredListCell = /*#__PURE__*/React__default["default"].createElement(StructuredListCell, {
|
|
180
|
+
head: true
|
|
181
|
+
}))), children) :
|
|
171
182
|
/*#__PURE__*/
|
|
172
183
|
// eslint-disable-next-line jsx-a11y/interactive-supports-focus
|
|
173
|
-
React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
|
|
174
|
-
"aria-busy": "true"
|
|
175
|
-
}, other, {
|
|
184
|
+
React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({}, other, {
|
|
176
185
|
role: "row",
|
|
177
186
|
className: classes,
|
|
187
|
+
ref: itemRef,
|
|
178
188
|
onClick: event => {
|
|
179
189
|
setSelectedRow?.(id);
|
|
180
190
|
onClick && onClick(event);
|
|
191
|
+
if (selection) {
|
|
192
|
+
// focus items only when selection is enabled
|
|
193
|
+
setHasFocusWithin(true);
|
|
194
|
+
}
|
|
181
195
|
},
|
|
182
196
|
onFocus: () => {
|
|
183
197
|
setHasFocusWithin(true);
|
|
@@ -188,7 +202,7 @@ function StructuredListRow(props) {
|
|
|
188
202
|
onKeyDown: onKeyDown
|
|
189
203
|
}), /*#__PURE__*/React__default["default"].createElement(GridRowContext.Provider, {
|
|
190
204
|
value: value
|
|
191
|
-
}, children));
|
|
205
|
+
}, selection && /*#__PURE__*/React__default["default"].createElement(StructuredListCell, null, selectedRow === id ? _RadioButtonChecked || (_RadioButtonChecked = /*#__PURE__*/React__default["default"].createElement(iconsReact.RadioButtonChecked, null)) : _RadioButton || (_RadioButton = /*#__PURE__*/React__default["default"].createElement(iconsReact.RadioButton, null))), children));
|
|
192
206
|
}
|
|
193
207
|
StructuredListRow.propTypes = {
|
|
194
208
|
/**
|
|
@@ -214,7 +228,11 @@ StructuredListRow.propTypes = {
|
|
|
214
228
|
/**
|
|
215
229
|
* Provide a handler that is invoked on the key down event for the control,
|
|
216
230
|
*/
|
|
217
|
-
onKeyDown: PropTypes__default["default"].func
|
|
231
|
+
onKeyDown: PropTypes__default["default"].func,
|
|
232
|
+
/**
|
|
233
|
+
* Mark if this row should be selectable
|
|
234
|
+
*/
|
|
235
|
+
selection: PropTypes__default["default"].bool
|
|
218
236
|
};
|
|
219
237
|
function StructuredListInput(props) {
|
|
220
238
|
const defaultId = useId.useId('structureListInput');
|
|
@@ -0,0 +1,129 @@
|
|
|
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 setupGetInstanceId = require('../../tools/setupGetInstanceId.js');
|
|
17
|
+
var usePrefix = require('../../internal/usePrefix.js');
|
|
18
|
+
var Tag = require('./Tag.js');
|
|
19
|
+
var iconsReact = require('@carbon/icons-react');
|
|
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
|
+
var _Close;
|
|
28
|
+
const getInstanceId = setupGetInstanceId["default"]();
|
|
29
|
+
const DismissibleTag = _ref => {
|
|
30
|
+
let {
|
|
31
|
+
children,
|
|
32
|
+
className,
|
|
33
|
+
disabled,
|
|
34
|
+
id,
|
|
35
|
+
renderIcon,
|
|
36
|
+
title = 'Clear filter',
|
|
37
|
+
onClose,
|
|
38
|
+
slug,
|
|
39
|
+
size,
|
|
40
|
+
type,
|
|
41
|
+
...other
|
|
42
|
+
} = _ref;
|
|
43
|
+
const prefix = usePrefix.usePrefix();
|
|
44
|
+
const tagId = id || `tag-${getInstanceId()}`;
|
|
45
|
+
const tagClasses = cx__default["default"](`${prefix}--tag--filter`, className);
|
|
46
|
+
const handleClose = event => {
|
|
47
|
+
if (onClose) {
|
|
48
|
+
event.stopPropagation();
|
|
49
|
+
onClose(event);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
let normalizedSlug;
|
|
53
|
+
if (slug && slug['type']?.displayName === 'Slug') {
|
|
54
|
+
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
55
|
+
size: 'sm',
|
|
56
|
+
kind: 'inline'
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Removing onClick from the spread operator
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
62
|
+
const {
|
|
63
|
+
onClick,
|
|
64
|
+
...otherProps
|
|
65
|
+
} = other;
|
|
66
|
+
return /*#__PURE__*/React__default["default"].createElement(Tag["default"], _rollupPluginBabelHelpers["extends"]({
|
|
67
|
+
type: type,
|
|
68
|
+
size: size,
|
|
69
|
+
renderIcon: renderIcon,
|
|
70
|
+
disabled: disabled,
|
|
71
|
+
className: tagClasses,
|
|
72
|
+
id: tagId
|
|
73
|
+
}, otherProps), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
74
|
+
className: `${prefix}--interactive--tag-children`
|
|
75
|
+
}, children, normalizedSlug, /*#__PURE__*/React__default["default"].createElement("button", {
|
|
76
|
+
type: "button",
|
|
77
|
+
className: `${prefix}--tag__close-icon`,
|
|
78
|
+
onClick: handleClose,
|
|
79
|
+
disabled: disabled,
|
|
80
|
+
"aria-label": title,
|
|
81
|
+
title: title
|
|
82
|
+
}, _Close || (_Close = /*#__PURE__*/React__default["default"].createElement(iconsReact.Close, null)))));
|
|
83
|
+
};
|
|
84
|
+
DismissibleTag.propTypes = {
|
|
85
|
+
/**
|
|
86
|
+
* Provide content to be rendered inside of a `DismissibleTag`
|
|
87
|
+
*/
|
|
88
|
+
children: PropTypes__default["default"].node,
|
|
89
|
+
/**
|
|
90
|
+
* Provide a custom className that is applied to the containing <span>
|
|
91
|
+
*/
|
|
92
|
+
className: PropTypes__default["default"].string,
|
|
93
|
+
/**
|
|
94
|
+
* Specify if the `DismissibleTag` is disabled
|
|
95
|
+
*/
|
|
96
|
+
disabled: PropTypes__default["default"].bool,
|
|
97
|
+
/**
|
|
98
|
+
* Specify the id for the tag.
|
|
99
|
+
*/
|
|
100
|
+
id: PropTypes__default["default"].string,
|
|
101
|
+
/**
|
|
102
|
+
* Click handler for filter tag close button.
|
|
103
|
+
*/
|
|
104
|
+
onClose: PropTypes__default["default"].func,
|
|
105
|
+
/**
|
|
106
|
+
* Optional prop to render a custom icon.
|
|
107
|
+
* Can be a React component class
|
|
108
|
+
*/
|
|
109
|
+
renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object]),
|
|
110
|
+
/**
|
|
111
|
+
* Specify the size of the Tag. Currently supports either `sm`,
|
|
112
|
+
* `md` (default) or `lg` sizes.
|
|
113
|
+
*/
|
|
114
|
+
size: PropTypes__default["default"].oneOf(Object.keys(Tag.SIZES)),
|
|
115
|
+
/**
|
|
116
|
+
* **Experimental:** Provide a `Slug` component to be rendered inside the `DismissibleTag` component
|
|
117
|
+
*/
|
|
118
|
+
slug: PropTypes__default["default"].node,
|
|
119
|
+
/**
|
|
120
|
+
* Text to show on clear filters
|
|
121
|
+
*/
|
|
122
|
+
title: PropTypes__default["default"].string,
|
|
123
|
+
/**
|
|
124
|
+
* Specify the type of the `Tag`
|
|
125
|
+
*/
|
|
126
|
+
type: PropTypes__default["default"].oneOf(Object.keys(Tag.TYPES))
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
exports["default"] = DismissibleTag;
|
|
@@ -0,0 +1,109 @@
|
|
|
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 setupGetInstanceId = require('../../tools/setupGetInstanceId.js');
|
|
17
|
+
var usePrefix = require('../../internal/usePrefix.js');
|
|
18
|
+
var Tag = require('./Tag.js');
|
|
19
|
+
|
|
20
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
21
|
+
|
|
22
|
+
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
23
|
+
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
24
|
+
var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
|
|
25
|
+
|
|
26
|
+
const getInstanceId = setupGetInstanceId["default"]();
|
|
27
|
+
const TYPES = {
|
|
28
|
+
red: 'Red',
|
|
29
|
+
magenta: 'Magenta',
|
|
30
|
+
purple: 'Purple',
|
|
31
|
+
blue: 'Blue',
|
|
32
|
+
cyan: 'Cyan',
|
|
33
|
+
teal: 'Teal',
|
|
34
|
+
green: 'Green',
|
|
35
|
+
gray: 'Gray',
|
|
36
|
+
'cool-gray': 'Cool-Gray',
|
|
37
|
+
'warm-gray': 'Warm-Gray'
|
|
38
|
+
};
|
|
39
|
+
const OperationalTag = _ref => {
|
|
40
|
+
let {
|
|
41
|
+
children,
|
|
42
|
+
className,
|
|
43
|
+
disabled,
|
|
44
|
+
id,
|
|
45
|
+
renderIcon,
|
|
46
|
+
slug,
|
|
47
|
+
size,
|
|
48
|
+
type = 'gray',
|
|
49
|
+
...other
|
|
50
|
+
} = _ref;
|
|
51
|
+
const prefix = usePrefix.usePrefix();
|
|
52
|
+
const tagId = id || `tag-${getInstanceId()}`;
|
|
53
|
+
const tagClasses = cx__default["default"](`${prefix}--tag--operational`, className);
|
|
54
|
+
let normalizedSlug;
|
|
55
|
+
if (slug && slug['type']?.displayName === 'Slug') {
|
|
56
|
+
normalizedSlug = /*#__PURE__*/React__default["default"].cloneElement(slug, {
|
|
57
|
+
size: 'sm',
|
|
58
|
+
kind: 'inline'
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return /*#__PURE__*/React__default["default"].createElement(Tag["default"], _rollupPluginBabelHelpers["extends"]({
|
|
62
|
+
type: type,
|
|
63
|
+
size: size,
|
|
64
|
+
renderIcon: renderIcon,
|
|
65
|
+
disabled: disabled,
|
|
66
|
+
className: tagClasses,
|
|
67
|
+
id: tagId
|
|
68
|
+
}, other), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
69
|
+
className: `${prefix}--interactive--tag-children`
|
|
70
|
+
}, children, normalizedSlug));
|
|
71
|
+
};
|
|
72
|
+
OperationalTag.propTypes = {
|
|
73
|
+
/**
|
|
74
|
+
* Provide content to be rendered inside of a `OperationalTag`
|
|
75
|
+
*/
|
|
76
|
+
children: PropTypes__default["default"].node,
|
|
77
|
+
/**
|
|
78
|
+
* Provide a custom className that is applied to the containing <span>
|
|
79
|
+
*/
|
|
80
|
+
className: PropTypes__default["default"].string,
|
|
81
|
+
/**
|
|
82
|
+
* Specify if the `OperationalTag` is disabled
|
|
83
|
+
*/
|
|
84
|
+
disabled: PropTypes__default["default"].bool,
|
|
85
|
+
/**
|
|
86
|
+
* Specify the id for the tag.
|
|
87
|
+
*/
|
|
88
|
+
id: PropTypes__default["default"].string,
|
|
89
|
+
/**
|
|
90
|
+
* Optional prop to render a custom icon.
|
|
91
|
+
* Can be a React component class
|
|
92
|
+
*/
|
|
93
|
+
renderIcon: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].object]),
|
|
94
|
+
/**
|
|
95
|
+
* Specify the size of the Tag. Currently supports either `sm`,
|
|
96
|
+
* `md` (default) or `lg` sizes.
|
|
97
|
+
*/
|
|
98
|
+
size: PropTypes__default["default"].oneOf(Object.keys(Tag.SIZES)),
|
|
99
|
+
/**
|
|
100
|
+
* **Experimental:** Provide a `Slug` component to be rendered inside the `OperationalTag` component
|
|
101
|
+
*/
|
|
102
|
+
slug: PropTypes__default["default"].node,
|
|
103
|
+
/**
|
|
104
|
+
* Specify the type of the `Tag`
|
|
105
|
+
*/
|
|
106
|
+
type: PropTypes__default["default"].oneOf(Object.keys(TYPES))
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
exports["default"] = OperationalTag;
|