@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.
Files changed (82) hide show
  1. package/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +994 -1023
  2. package/es/components/Button/Button.d.ts +1 -1
  3. package/es/components/Button/Button.js +13 -89
  4. package/es/components/Button/ButtonBase.d.ts +10 -0
  5. package/es/components/Button/ButtonBase.js +110 -0
  6. package/es/components/CodeSnippet/CodeSnippet.Skeleton.d.ts +37 -0
  7. package/es/components/CodeSnippet/CodeSnippet.d.ts +196 -0
  8. package/es/components/CodeSnippet/CodeSnippet.js +20 -18
  9. package/es/components/CodeSnippet/index.d.ts +10 -0
  10. package/es/components/ComboBox/ComboBox.d.ts +2 -2
  11. package/es/components/ComboBox/ComboBox.js +13 -5
  12. package/es/components/ComboButton/index.d.ts +51 -0
  13. package/es/components/ComboButton/index.js +9 -7
  14. package/es/components/ComposedModal/ComposedModal.js +2 -2
  15. package/es/components/DataTable/TableBatchAction.d.ts +1 -5
  16. package/es/components/Dropdown/Dropdown.js +3 -1
  17. package/es/components/IconButton/index.js +2 -3
  18. package/es/components/Menu/Menu.js +2 -0
  19. package/es/components/Modal/Modal.js +2 -2
  20. package/es/components/ModalWrapper/ModalWrapper.d.ts +1 -1
  21. package/es/components/MultiSelect/FilterableMultiSelect.js +31 -0
  22. package/es/components/MultiSelect/MultiSelect.js +37 -7
  23. package/es/components/Slider/Slider.Skeleton.js +6 -2
  24. package/es/components/Slug/index.js +8 -13
  25. package/es/components/StructuredList/StructuredList.d.ts +8 -0
  26. package/es/components/StructuredList/StructuredList.js +28 -10
  27. package/es/components/Tag/DismissibleTag.js +119 -0
  28. package/es/components/Tag/OperationalTag.js +99 -0
  29. package/es/components/Tag/SelectableTag.js +98 -0
  30. package/es/components/Tag/index.d.ts +4 -1
  31. package/es/components/TreeView/TreeNode.js +1 -1
  32. package/es/components/UIShell/SideNavMenu.js +11 -1
  33. package/es/components/UIShell/SideNavMenuItem.d.ts +4 -0
  34. package/es/components/UIShell/SideNavMenuItem.js +8 -1
  35. package/es/components/UIShell/SwitcherItem.d.ts +4 -0
  36. package/es/components/UIShell/SwitcherItem.js +6 -0
  37. package/es/feature-flags.js +2 -1
  38. package/es/index.js +5 -2
  39. package/es/internal/environment.js +5 -1
  40. package/es/internal/keyboard/navigation.js +6 -2
  41. package/es/internal/useOutsideClick.js +31 -0
  42. package/lib/components/Button/Button.d.ts +1 -1
  43. package/lib/components/Button/Button.js +13 -90
  44. package/lib/components/Button/ButtonBase.d.ts +10 -0
  45. package/lib/components/Button/ButtonBase.js +119 -0
  46. package/lib/components/CodeSnippet/CodeSnippet.Skeleton.d.ts +37 -0
  47. package/lib/components/CodeSnippet/CodeSnippet.d.ts +196 -0
  48. package/lib/components/CodeSnippet/CodeSnippet.js +20 -18
  49. package/lib/components/CodeSnippet/index.d.ts +10 -0
  50. package/lib/components/ComboBox/ComboBox.d.ts +2 -2
  51. package/lib/components/ComboBox/ComboBox.js +13 -5
  52. package/lib/components/ComboButton/index.d.ts +51 -0
  53. package/lib/components/ComboButton/index.js +9 -7
  54. package/lib/components/ComposedModal/ComposedModal.js +2 -2
  55. package/lib/components/DataTable/TableBatchAction.d.ts +1 -5
  56. package/lib/components/Dropdown/Dropdown.js +3 -1
  57. package/lib/components/IconButton/index.js +2 -3
  58. package/lib/components/Menu/Menu.js +2 -0
  59. package/lib/components/Modal/Modal.js +2 -2
  60. package/lib/components/ModalWrapper/ModalWrapper.d.ts +1 -1
  61. package/lib/components/MultiSelect/FilterableMultiSelect.js +31 -0
  62. package/lib/components/MultiSelect/MultiSelect.js +37 -7
  63. package/lib/components/Slider/Slider.Skeleton.js +5 -1
  64. package/lib/components/Slug/index.js +8 -13
  65. package/lib/components/StructuredList/StructuredList.d.ts +8 -0
  66. package/lib/components/StructuredList/StructuredList.js +27 -9
  67. package/lib/components/Tag/DismissibleTag.js +129 -0
  68. package/lib/components/Tag/OperationalTag.js +109 -0
  69. package/lib/components/Tag/SelectableTag.js +108 -0
  70. package/lib/components/Tag/index.d.ts +4 -1
  71. package/lib/components/TreeView/TreeNode.js +1 -1
  72. package/lib/components/UIShell/SideNavMenu.js +11 -1
  73. package/lib/components/UIShell/SideNavMenuItem.d.ts +4 -0
  74. package/lib/components/UIShell/SideNavMenuItem.js +8 -1
  75. package/lib/components/UIShell/SwitcherItem.d.ts +4 -0
  76. package/lib/components/UIShell/SwitcherItem.js +6 -0
  77. package/lib/feature-flags.js +2 -1
  78. package/lib/index.js +10 -4
  79. package/lib/internal/environment.js +5 -1
  80. package/lib/internal/keyboard/navigation.js +6 -2
  81. package/lib/internal/useOutsideClick.js +35 -0
  82. 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(Button["default"], _rollupPluginBabelHelpers["extends"]({}, rest, {
57
+ }, /*#__PURE__*/React__default["default"].createElement(ButtonBase["default"], _rollupPluginBabelHelpers["extends"]({}, rest, {
59
58
  disabled: disabled,
60
59
  kind: kind,
61
60
  ref: ref,
@@ -42,6 +42,8 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(_ref, forwardRef) {
42
42
  onOpen,
43
43
  open,
44
44
  size = 'sm',
45
+ // TODO: #16004
46
+ // eslint-disable-next-line ssr-friendly/no-dom-globals-in-react-fc
45
47
  target = document.body,
46
48
  x = 0,
47
49
  y = 0,
@@ -237,11 +237,11 @@ const Modal = /*#__PURE__*/React__default["default"].forwardRef(function Modal(_
237
237
  };
238
238
  }, []);
239
239
 
240
- // Slug is always size `lg`
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: 'lg'
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" | "ghost" | "tertiary" | "danger" | "danger--primary" | "danger--ghost" | "danger--tertiary">;
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
- ToggleButtonKeyDownHome,
53
- ToggleButtonKeyDownEnd
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
- break;
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 ToggleButtonKeyDownHome:
275
- case ToggleButtonKeyDownEnd:
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 = document?.dir === 'rtl';
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
- "aria-busy": "true"
170
- }), children) :
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;