@carbon/ibm-products 2.0.0-rc.25 → 2.0.0-rc.27

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. package/README.md +10 -4
  2. package/css/index-full-carbon.css +129 -127
  3. package/css/index-full-carbon.css.map +1 -1
  4. package/css/index-full-carbon.min.css +3 -3
  5. package/css/index-full-carbon.min.css.map +1 -1
  6. package/css/index-without-carbon-released-only.css +69 -118
  7. package/css/index-without-carbon-released-only.css.map +1 -1
  8. package/css/index-without-carbon-released-only.min.css +2 -2
  9. package/css/index-without-carbon-released-only.min.css.map +1 -1
  10. package/css/index-without-carbon.css +129 -127
  11. package/css/index-without-carbon.css.map +1 -1
  12. package/css/index-without-carbon.min.css +3 -3
  13. package/css/index-without-carbon.min.css.map +1 -1
  14. package/css/index.css +129 -127
  15. package/css/index.css.map +1 -1
  16. package/css/index.min.css +3 -3
  17. package/css/index.min.css.map +1 -1
  18. package/es/components/AddSelect/AddSelectBody.js +1 -0
  19. package/es/components/AddSelect/AddSelectFormControl.js +92 -0
  20. package/es/components/AddSelect/AddSelectList.js +26 -195
  21. package/es/components/AddSelect/AddSelectRow.js +220 -0
  22. package/es/components/AddSelect/hooks/useFocus.js +35 -0
  23. package/es/components/Card/Card.js +8 -6
  24. package/es/components/Card/CardHeader.js +2 -2
  25. package/es/components/Datagrid/Datagrid/DatagridEmptyBody.js +15 -20
  26. package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +6 -2
  27. package/es/components/Datagrid/Datagrid/DatagridRefBody.js +3 -1
  28. package/es/components/Datagrid/Datagrid/DatagridRow.js +6 -2
  29. package/es/components/Datagrid/Datagrid/DatagridSimpleBody.js +3 -1
  30. package/es/components/Datagrid/Datagrid/DatagridToolbar.js +1 -1
  31. package/es/components/Datagrid/Datagrid/DatagridVirtualBody.js +3 -1
  32. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +15 -65
  33. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +5 -2
  34. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +112 -0
  35. package/es/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +1 -0
  36. package/es/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +11 -0
  37. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +29 -23
  38. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -0
  39. package/es/components/Datagrid/index.js +7 -7
  40. package/es/components/Datagrid/useInfiniteScroll.js +5 -1
  41. package/es/components/Datagrid/useOnRowClick.js +3 -3
  42. package/es/components/Datagrid/useSortableColumns.js +7 -5
  43. package/es/components/Datagrid/utils/getAutoSizedColumnWidth.js +29 -0
  44. package/es/components/ExampleComponent/ExampleComponent.js +39 -5
  45. package/es/components/ExampleComponent/useExample.js +51 -0
  46. package/es/components/ExpressiveCard/ExpressiveCard.js +3 -3
  47. package/es/components/InlineEditV1/InlineEditV1.js +15 -20
  48. package/es/components/InlineEditV2/InlineEditV2.js +21 -31
  49. package/es/components/PageHeader/PageHeader.js +4 -3
  50. package/es/components/ProductiveCard/ProductiveCard.js +3 -3
  51. package/es/components/index.js +1 -1
  52. package/es/global/js/package-settings.js +24 -3
  53. package/es/global/js/utils/story-helper.js +9 -0
  54. package/es/global/js/utils/test-helper.js +38 -6
  55. package/lib/components/AddSelect/AddSelectBody.js +1 -0
  56. package/lib/components/AddSelect/AddSelectFormControl.js +110 -0
  57. package/lib/components/AddSelect/AddSelectList.js +29 -203
  58. package/lib/components/AddSelect/AddSelectRow.js +247 -0
  59. package/lib/components/AddSelect/hooks/useFocus.js +46 -0
  60. package/lib/components/Card/Card.js +7 -5
  61. package/lib/components/Card/CardHeader.js +2 -2
  62. package/lib/components/Datagrid/Datagrid/DatagridEmptyBody.js +14 -19
  63. package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +6 -2
  64. package/lib/components/Datagrid/Datagrid/DatagridRefBody.js +3 -1
  65. package/lib/components/Datagrid/Datagrid/DatagridRow.js +6 -2
  66. package/lib/components/Datagrid/Datagrid/DatagridSimpleBody.js +3 -1
  67. package/lib/components/Datagrid/Datagrid/DatagridToolbar.js +1 -1
  68. package/lib/components/Datagrid/Datagrid/DatagridVirtualBody.js +3 -1
  69. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/Columns.js +16 -69
  70. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/CustomizeColumnsTearsheet.js +5 -2
  71. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/DraggableItemsList.js +132 -0
  72. package/lib/components/Datagrid/Datagrid/addons/CustomizeColumns/TearsheetWrapper.js +1 -0
  73. package/lib/components/Datagrid/Datagrid/addons/Filtering/hooks/useFilters.js +11 -0
  74. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +23 -16
  75. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -0
  76. package/lib/components/Datagrid/index.js +9 -1
  77. package/lib/components/Datagrid/useInfiniteScroll.js +5 -0
  78. package/lib/components/Datagrid/useOnRowClick.js +3 -3
  79. package/lib/components/Datagrid/useSortableColumns.js +7 -5
  80. package/lib/components/Datagrid/utils/getAutoSizedColumnWidth.js +40 -0
  81. package/lib/components/ExampleComponent/ExampleComponent.js +47 -4
  82. package/lib/components/ExampleComponent/useExample.js +63 -0
  83. package/lib/components/ExpressiveCard/ExpressiveCard.js +3 -3
  84. package/lib/components/InlineEditV1/InlineEditV1.js +14 -19
  85. package/lib/components/InlineEditV2/InlineEditV2.js +20 -30
  86. package/lib/components/PageHeader/PageHeader.js +4 -3
  87. package/lib/components/ProductiveCard/ProductiveCard.js +3 -3
  88. package/lib/components/index.js +6 -0
  89. package/lib/global/js/package-settings.js +24 -3
  90. package/lib/global/js/utils/story-helper.js +13 -2
  91. package/lib/global/js/utils/test-helper.js +42 -8
  92. package/package.json +2 -2
  93. package/scss/components/ActionBar/_action-bar.scss +0 -4
  94. package/scss/components/AddSelect/_add-select.scss +4 -16
  95. package/scss/components/Card/_card.scss +13 -6
  96. package/scss/components/Datagrid/styles/addons/_CustomizeColumnsTearsheet.scss +15 -2
  97. package/scss/components/Datagrid/styles/addons/_RowSizeDropdown.scss +18 -6
  98. package/scss/components/ExportModal/_export-modal.scss +0 -4
  99. package/scss/components/ExpressiveCard/_expressive-card.scss +1 -1
  100. package/scss/components/InlineEditV1/_inline-edit-v1.scss +5 -89
  101. package/scss/components/InlineEditV2/_inline-edit-v2.scss +42 -3
  102. package/scss/components/PageHeader/_page-header.scss +2 -3
  103. package/scss/components/ProductiveCard/_productive-card.scss +31 -2
  104. package/scss/components/SidePanel/_side-panel.scss +2 -1
  105. package/scss/components/TagSet/_tag-set.scss +1 -0
  106. package/scss/components/UserProfileImage/_user-profile-image.scss +5 -0
@@ -1,6 +1,8 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
+ var _excluded = ["filteredItems", "multi"];
4
6
  //
5
7
  // Copyright IBM Corp. 2022, 2022
6
8
  //
@@ -8,218 +10,47 @@ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
8
10
  // LICENSE file in the root directory of this source tree.
9
11
  //
10
12
  import React from 'react';
11
- import { Button, Checkbox, Dropdown, RadioButton } from '@carbon/react';
12
- import { ChevronRight, View } from '@carbon/react/icons';
13
13
  import PropTypes from 'prop-types';
14
14
  import cx from 'classnames';
15
15
  import { pkg } from '../../settings';
16
- import { UserProfileImage } from '../UserProfileImage';
16
+ import { AddSelectRow } from './AddSelectRow';
17
+ import useFocus from './hooks/useFocus';
17
18
  var blockClass = "".concat(pkg.prefix, "--add-select__selections");
18
19
  var componentName = 'AddSelectList';
19
20
  export var AddSelectList = function AddSelectList(_ref) {
20
- var _modifiers$options;
21
-
22
- var appliedModifiers = _ref.appliedModifiers,
23
- displayMetalPanel = _ref.displayMetalPanel,
24
- filteredItems = _ref.filteredItems,
25
- metaIconDescription = _ref.metaIconDescription,
26
- modifiers = _ref.modifiers,
21
+ var filteredItems = _ref.filteredItems,
27
22
  multi = _ref.multi,
28
- multiSelection = _ref.multiSelection,
29
- navIconDescription = _ref.navIconDescription,
30
- parentId = _ref.parentId,
31
- setAppliedModifiers = _ref.setAppliedModifiers,
32
- setDisplayMetaPanel = _ref.setDisplayMetaPanel,
33
- setMultiSelection = _ref.setMultiSelection,
34
- setParentSelected = _ref.setParentSelected,
35
- setSingleSelection = _ref.setSingleSelection,
36
- singleSelection = _ref.singleSelection;
37
- var hasModifiers = (modifiers === null || modifiers === void 0 ? void 0 : (_modifiers$options = modifiers.options) === null || _modifiers$options === void 0 ? void 0 : _modifiers$options.length) > 0;
38
-
39
- var handleSingleSelection = function handleSingleSelection(value) {
40
- setSingleSelection(value);
41
- };
42
-
43
- var handleMultiSelection = function handleMultiSelection(event, _ref2) {
44
- var checked = _ref2.checked,
45
- id = _ref2.id;
46
-
47
- if (checked) {
48
- var newValues = [].concat(_toConsumableArray(multiSelection), [id]);
49
- setMultiSelection(newValues);
50
- } else {
51
- var _newValues = multiSelection.filter(function (v) {
52
- return v !== id;
53
- });
54
-
55
- setMultiSelection(_newValues);
56
- }
57
- };
58
-
59
- var onNavigateItem = function onNavigateItem(_ref3) {
60
- var id = _ref3.id,
61
- title = _ref3.title;
62
- setParentSelected(id, title, parentId);
63
- };
64
-
65
- var isSelected = function isSelected(id) {
66
- if (multi) {
67
- return multiSelection.includes(id);
68
- }
23
+ rest = _objectWithoutProperties(_ref, _excluded);
69
24
 
70
- return id === singleSelection;
71
- };
72
-
73
- var getAvatarProps = function getAvatarProps(_ref4) {
74
- var src = _ref4.src,
75
- alt = _ref4.alt,
76
- icon = _ref4.icon,
77
- backgroundColor = _ref4.backgroundColor,
78
- theme = _ref4.theme;
79
- return {
80
- className: "".concat(blockClass, "-cell-avatar"),
81
- size: 'lg',
82
- theme: theme,
83
- image: src,
84
- imageDescription: alt,
85
- icon: icon,
86
- backgroundColor: backgroundColor
87
- };
88
- };
89
-
90
- var getItemIcon = function getItemIcon(_ref5) {
91
- var Icon = _ref5.icon;
92
- return /*#__PURE__*/React.createElement(Icon, null);
93
- };
94
-
95
- var modifierHandler = function modifierHandler(id, selectedItem) {
96
- var modifiersClone = _toConsumableArray(appliedModifiers);
97
-
98
- var modifierIdx = modifiersClone.findIndex(function (item) {
99
- return item.id === id;
100
- });
101
- modifiersClone[modifierIdx] = _defineProperty({
102
- id: id
103
- }, modifiers.id, selectedItem);
104
- setAppliedModifiers(modifiersClone);
105
- };
106
-
107
- var metaPanelHandler = function metaPanelHandler(item) {
108
- if (item.meta) {
109
- setDisplayMetaPanel(item);
110
- }
111
- };
112
-
113
- var isInMetaPanel = function isInMetaPanel(id) {
114
- return id === (displayMetalPanel === null || displayMetalPanel === void 0 ? void 0 : displayMetalPanel.id);
115
- };
25
+ var _useFocus = useFocus(filteredItems.length),
26
+ _useFocus2 = _slicedToArray(_useFocus, 2),
27
+ focus = _useFocus2[0],
28
+ setFocus = _useFocus2[1];
116
29
 
117
30
  return /*#__PURE__*/React.createElement("div", {
31
+ id: "add-select-focus",
118
32
  className: cx("".concat(blockClass, "-wrapper"), _defineProperty({}, "".concat(blockClass, "-wrapper-multi"), multi))
119
33
  }, /*#__PURE__*/React.createElement("div", {
120
34
  className: "".concat(blockClass)
121
35
  }, /*#__PURE__*/React.createElement("div", {
122
- className: "".concat(blockClass, "-body")
123
- }, filteredItems.map(function (item) {
124
- var _cx2;
125
-
126
- return /*#__PURE__*/React.createElement("div", {
36
+ className: "".concat(blockClass, "-body"),
37
+ role: "treegrid",
38
+ "aria-label": "add select tree label"
39
+ }, filteredItems.map(function (item, index) {
40
+ return /*#__PURE__*/React.createElement(AddSelectRow, _extends({
127
41
  key: item.id,
128
- className: cx("".concat(blockClass, "-row"), (_cx2 = {}, _defineProperty(_cx2, "".concat(blockClass, "-row--selected"), isSelected(item.id)), _defineProperty(_cx2, "".concat(blockClass, "-row-meta--selected"), isInMetaPanel(item.id)), _cx2))
129
- }, /*#__PURE__*/React.createElement("div", {
130
- className: "".concat(blockClass, "-cell")
131
- }, /*#__PURE__*/React.createElement("div", {
132
- className: "".concat(blockClass, "-cell-wrapper")
133
- }, multi ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
134
- className: "".concat(blockClass, "-checkbox")
135
- }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Checkbox, {
136
- onChange: handleMultiSelection,
137
- labelText: item.title,
138
- id: item.id,
139
- checked: isSelected(item.id),
140
- className: "".concat(blockClass, "-checkbox-wrapper")
141
- })), /*#__PURE__*/React.createElement("div", {
142
- className: "".concat(blockClass, "-checkbox-label-wrapper")
143
- }, item.avatar && /*#__PURE__*/React.createElement(UserProfileImage, getAvatarProps(item.avatar)), item.icon && /*#__PURE__*/React.createElement("div", {
144
- className: "".concat(blockClass, "-cell-icon")
145
- }, getItemIcon(item)), /*#__PURE__*/React.createElement("div", {
146
- className: "".concat(blockClass, "-checkbox-label-text")
147
- }, /*#__PURE__*/React.createElement("span", {
148
- className: "".concat(blockClass, "-cell-title")
149
- }, item.title), item.subtitle && /*#__PURE__*/React.createElement("span", {
150
- className: "".concat(blockClass, "-cell-subtitle")
151
- }, item.subtitle)))), hasModifiers && /*#__PURE__*/React.createElement(Dropdown, {
152
- id: "add-select-modifier-".concat(item.id),
153
- type: "inline",
154
- items: modifiers.options,
155
- label: modifiers.label,
156
- disabled: !isSelected(item.id),
157
- className: "".concat(blockClass, "-dropdown"),
158
- initialSelectedItem: item[modifiers.id],
159
- onChange: function onChange(_ref6) {
160
- var selectedItem = _ref6.selectedItem;
161
- return modifierHandler(item.id, selectedItem);
162
- }
163
- })) : /*#__PURE__*/React.createElement(RadioButton, {
164
- className: "".concat(blockClass, "-radio"),
165
- name: "add-select-selections",
166
- id: item.id,
167
- value: item.value,
168
- labelText: item.title,
169
- onChange: function onChange() {
170
- return handleSingleSelection(item.id);
171
- },
172
- checked: isSelected(item.id)
173
- }), item.children && /*#__PURE__*/React.createElement(Button, {
174
- className: "".concat(blockClass, "-view-children"),
175
- renderIcon: function renderIcon(props) {
176
- return /*#__PURE__*/React.createElement(ChevronRight, _extends({
177
- size: 16
178
- }, props));
179
- },
180
- iconDescription: navIconDescription,
181
- tooltipPosition: "left",
182
- tooltipAlignment: "center",
183
- hasIconOnly: true,
184
- onClick: function onClick() {
185
- return onNavigateItem(item);
186
- },
187
- kind: "ghost",
188
- size: "sm"
189
- }), item.meta && /*#__PURE__*/React.createElement(Button, {
190
- className: "".concat(blockClass, "-view-meta"),
191
- renderIcon: function renderIcon(props) {
192
- return /*#__PURE__*/React.createElement(View, _extends({
193
- size: 16
194
- }, props));
195
- },
196
- iconDescription: metaIconDescription,
197
- tooltipPosition: "left",
198
- tooltipAlignment: "center",
199
- hasIconOnly: true,
200
- kind: "ghost",
201
- size: "sm",
202
- onClick: function onClick() {
203
- return metaPanelHandler(item);
204
- }
205
- }))));
42
+ index: index,
43
+ focus: focus,
44
+ setSize: filteredItems.length,
45
+ item: item,
46
+ multi: multi,
47
+ setFocus: setFocus
48
+ }, rest));
206
49
  }))));
207
50
  };
208
51
  AddSelectList.propTypes = {
209
- appliedModifiers: PropTypes.array,
210
- displayMetalPanel: PropTypes.object,
211
52
  filteredItems: PropTypes.array,
212
- metaIconDescription: PropTypes.string,
213
- modifiers: PropTypes.object,
214
- multi: PropTypes.bool,
215
- multiSelection: PropTypes.array,
216
- navIconDescription: PropTypes.string,
217
- parentId: PropTypes.string,
218
- setAppliedModifiers: PropTypes.func,
219
- setDisplayMetaPanel: PropTypes.func,
220
- setMultiSelection: PropTypes.func,
221
- setParentSelected: PropTypes.func,
222
- setSingleSelection: PropTypes.func,
223
- singleSelection: PropTypes.string
53
+ focus: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
54
+ multi: PropTypes.bool
224
55
  };
225
56
  AddSelectList.displayName = componentName;
@@ -0,0 +1,220 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
+ //
5
+ // Copyright IBM Corp. 2022, 2022
6
+ //
7
+ // This source code is licensed under the Apache-2.0 license found in the
8
+ // LICENSE file in the root directory of this source tree.
9
+ //
10
+ import React, { useRef, useEffect, useCallback } from 'react';
11
+ import { Button, Dropdown } from '@carbon/react';
12
+ import { ChevronRight, View } from '@carbon/react/icons';
13
+ import PropTypes from 'prop-types';
14
+ import cx from 'classnames';
15
+ import { pkg } from '../../settings';
16
+ import { AddSelectFormControl } from './AddSelectFormControl';
17
+ var blockClass = "".concat(pkg.prefix, "--add-select__selections");
18
+ var componentName = 'AddSelectList';
19
+ export var AddSelectRow = function AddSelectRow(_ref) {
20
+ var _modifiers$options, _cx;
21
+
22
+ var appliedModifiers = _ref.appliedModifiers,
23
+ displayMetalPanel = _ref.displayMetalPanel,
24
+ index = _ref.index,
25
+ focus = _ref.focus,
26
+ item = _ref.item,
27
+ metaIconDescription = _ref.metaIconDescription,
28
+ modifiers = _ref.modifiers,
29
+ multi = _ref.multi,
30
+ multiSelection = _ref.multiSelection,
31
+ navIconDescription = _ref.navIconDescription,
32
+ parentId = _ref.parentId,
33
+ setAppliedModifiers = _ref.setAppliedModifiers,
34
+ setDisplayMetaPanel = _ref.setDisplayMetaPanel,
35
+ setFocus = _ref.setFocus,
36
+ setMultiSelection = _ref.setMultiSelection,
37
+ setParentSelected = _ref.setParentSelected,
38
+ setSingleSelection = _ref.setSingleSelection,
39
+ singleSelection = _ref.singleSelection;
40
+ var ref = useRef(null);
41
+ useEffect(function () {
42
+ if (focus === index) {
43
+ ref.current.focus();
44
+ }
45
+ }, [focus, index]);
46
+
47
+ var isSelected = function isSelected() {
48
+ if (multi) {
49
+ return multiSelection.includes(item.id);
50
+ }
51
+
52
+ return item.id === singleSelection;
53
+ };
54
+
55
+ var getTabIndex = function getTabIndex() {
56
+ // on initial load make the first item tabbable
57
+ if (index === 0 && focus === '') {
58
+ return 0;
59
+ } // make it so only the last focused item is tabbable
60
+
61
+
62
+ if (focus === index && focus !== '') {
63
+ return 0;
64
+ } // make unfocused items un-tabbable
65
+
66
+
67
+ return -1;
68
+ };
69
+
70
+ var focusHandler = useCallback(function (reset) {
71
+ setFocus(reset ? '' : index);
72
+ }, [setFocus, index]);
73
+
74
+ var handleSingleSelection = function handleSingleSelection() {
75
+ setSingleSelection(item.id);
76
+ };
77
+
78
+ var onSelectKeyDown = function onSelectKeyDown(_ref2) {
79
+ var key = _ref2.key;
80
+
81
+ if (key === 'Enter' || key === ' ') {
82
+ if (multi) {
83
+ handleMultiSelection();
84
+ } else {
85
+ handleSingleSelection();
86
+ }
87
+ } else if (key === 'ArrowRight' && item.children) {
88
+ onNavigateItem();
89
+ }
90
+ };
91
+
92
+ var handleMultiSelection = function handleMultiSelection() {
93
+ var checked = isSelected();
94
+
95
+ if (!checked) {
96
+ var newValues = [].concat(_toConsumableArray(multiSelection), [item.id]);
97
+ setMultiSelection(newValues);
98
+ } else {
99
+ var _newValues = multiSelection.filter(function (v) {
100
+ return v !== item.id;
101
+ });
102
+
103
+ setMultiSelection(_newValues);
104
+ }
105
+ };
106
+
107
+ var onNavigateItem = function onNavigateItem() {
108
+ focusHandler(true);
109
+ setParentSelected(item.id, item.title, parentId);
110
+ };
111
+
112
+ var modifierHandler = function modifierHandler(id, selectedItem) {
113
+ var modifiersClone = _toConsumableArray(appliedModifiers);
114
+
115
+ var modifierIdx = modifiersClone.findIndex(function (item) {
116
+ return item.id === id;
117
+ });
118
+ modifiersClone[modifierIdx] = _defineProperty({
119
+ id: id
120
+ }, modifiers.id, selectedItem);
121
+ setAppliedModifiers(modifiersClone);
122
+ };
123
+
124
+ var metaPanelHandler = function metaPanelHandler() {
125
+ if (item.meta) {
126
+ setDisplayMetaPanel(item);
127
+ }
128
+ };
129
+
130
+ var isInMetaPanel = function isInMetaPanel(id) {
131
+ return id === (displayMetalPanel === null || displayMetalPanel === void 0 ? void 0 : displayMetalPanel.id);
132
+ };
133
+
134
+ var hasModifiers = (modifiers === null || modifiers === void 0 ? void 0 : (_modifiers$options = modifiers.options) === null || _modifiers$options === void 0 ? void 0 : _modifiers$options.length) > 0;
135
+ var tabIndex = getTabIndex();
136
+ var selected = isSelected();
137
+ return /*#__PURE__*/React.createElement("div", {
138
+ className: cx("".concat(blockClass, "-row"), (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "-row--selected"), isSelected(item.id)), _defineProperty(_cx, "".concat(blockClass, "-row-meta--selected"), isInMetaPanel(item.id)), _cx)),
139
+ onKeyDown: onSelectKeyDown,
140
+ tabIndex: tabIndex,
141
+ ref: ref,
142
+ role: "row"
143
+ }, /*#__PURE__*/React.createElement("div", {
144
+ className: "".concat(blockClass, "-cell")
145
+ }, /*#__PURE__*/React.createElement("div", {
146
+ className: "".concat(blockClass, "-cell-wrapper")
147
+ }, multi ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(AddSelectFormControl, {
148
+ type: "checkbox",
149
+ item: item,
150
+ selected: selected,
151
+ onClick: handleMultiSelection
152
+ }), hasModifiers && /*#__PURE__*/React.createElement(Dropdown, {
153
+ id: "add-select-modifier-".concat(item.id),
154
+ type: "inline",
155
+ items: modifiers.options,
156
+ label: modifiers.label,
157
+ disabled: !isSelected(item.id),
158
+ className: "".concat(blockClass, "-dropdown"),
159
+ initialSelectedItem: item[modifiers.id],
160
+ onChange: function onChange(_ref3) {
161
+ var selectedItem = _ref3.selectedItem;
162
+ return modifierHandler(item.id, selectedItem);
163
+ }
164
+ })) : /*#__PURE__*/React.createElement(AddSelectFormControl, {
165
+ type: "radio",
166
+ item: item,
167
+ selected: selected,
168
+ onClick: handleSingleSelection
169
+ }), item.children && /*#__PURE__*/React.createElement(Button, {
170
+ className: "".concat(blockClass, "-view-children"),
171
+ renderIcon: function renderIcon(props) {
172
+ return /*#__PURE__*/React.createElement(ChevronRight, _extends({
173
+ size: 16
174
+ }, props));
175
+ },
176
+ iconDescription: navIconDescription,
177
+ tooltipPosition: "left",
178
+ tooltipAlignment: "center",
179
+ hasIconOnly: true,
180
+ onClick: onNavigateItem,
181
+ kind: "ghost",
182
+ size: "sm"
183
+ }), item.meta && /*#__PURE__*/React.createElement(Button, {
184
+ className: "".concat(blockClass, "-view-meta"),
185
+ renderIcon: function renderIcon(props) {
186
+ return /*#__PURE__*/React.createElement(View, _extends({
187
+ size: 16
188
+ }, props));
189
+ },
190
+ iconDescription: metaIconDescription,
191
+ tooltipPosition: "left",
192
+ tooltipAlignment: "center",
193
+ hasIconOnly: true,
194
+ kind: "ghost",
195
+ size: "sm",
196
+ onClick: metaPanelHandler
197
+ }))));
198
+ };
199
+ AddSelectRow.propTypes = {
200
+ appliedModifiers: PropTypes.array,
201
+ displayMetalPanel: PropTypes.object,
202
+ filteredItems: PropTypes.array,
203
+ focus: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
204
+ index: PropTypes.number,
205
+ item: PropTypes.object,
206
+ metaIconDescription: PropTypes.string,
207
+ modifiers: PropTypes.object,
208
+ multi: PropTypes.bool,
209
+ multiSelection: PropTypes.array,
210
+ navIconDescription: PropTypes.string,
211
+ parentId: PropTypes.string,
212
+ setAppliedModifiers: PropTypes.func,
213
+ setDisplayMetaPanel: PropTypes.func,
214
+ setFocus: PropTypes.func,
215
+ setMultiSelection: PropTypes.func,
216
+ setParentSelected: PropTypes.func,
217
+ setSingleSelection: PropTypes.func,
218
+ singleSelection: PropTypes.string
219
+ };
220
+ AddSelectRow.displayName = componentName;
@@ -0,0 +1,35 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import { useCallback, useState, useEffect } from 'react';
3
+
4
+ var useFocus = function useFocus(size) {
5
+ // the state should represent the location of the item in the array
6
+ // make it '' initially so that it doesn't automatically focus the first item
7
+ var _useState = useState(''),
8
+ _useState2 = _slicedToArray(_useState, 2),
9
+ currentFocus = _useState2[0],
10
+ setCurrentFocus = _useState2[1];
11
+
12
+ var handleKeyDown = useCallback(function (e) {
13
+ var focus = currentFocus === '' ? 0 : currentFocus;
14
+
15
+ if (e.keyCode === 40) {
16
+ // Down arrow
17
+ e.preventDefault();
18
+ setCurrentFocus(focus === size - 1 ? 0 : focus + 1);
19
+ } else if (e.keyCode === 38) {
20
+ // Up arrow
21
+ e.preventDefault();
22
+ setCurrentFocus(focus === 0 ? size - 1 : focus - 1);
23
+ }
24
+ }, [size, currentFocus, setCurrentFocus]);
25
+ useEffect(function () {
26
+ var el = document.querySelector('#add-select-focus');
27
+ el.addEventListener('keydown', handleKeyDown, false);
28
+ return function () {
29
+ el.removeEventListener('keydown', handleKeyDown, false);
30
+ };
31
+ }, [handleKeyDown]);
32
+ return [currentFocus, setCurrentFocus];
33
+ };
34
+
35
+ export default useFocus;
@@ -17,7 +17,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
17
17
  //
18
18
  import React, { forwardRef } from 'react';
19
19
  import cx from 'classnames';
20
- import { Button, IconButton, OverflowMenu, OverflowMenuItem } from '@carbon/react';
20
+ import { Button, IconButton, OverflowMenu, OverflowMenuItem, Layer } from '@carbon/react';
21
21
  import PropTypes from 'prop-types';
22
22
  import { CardHeader } from './CardHeader';
23
23
  import { CardFooter } from './CardFooter';
@@ -94,7 +94,9 @@ export var Card = /*#__PURE__*/forwardRef(function (_ref, ref) {
94
94
  if (overflowActions.length > 0) {
95
95
  var pos = actionsPlacement === 'top' ? 'bottom' : 'top';
96
96
  var size = actionsPlacement === 'top' ? 'sm' : 'md';
97
- return /*#__PURE__*/React.createElement(OverflowMenu, {
97
+ return /*#__PURE__*/React.createElement(Layer, {
98
+ level: 2
99
+ }, /*#__PURE__*/React.createElement(OverflowMenu, {
98
100
  size: size,
99
101
  direction: pos,
100
102
  flipped: true,
@@ -106,7 +108,7 @@ export var Card = /*#__PURE__*/forwardRef(function (_ref, ref) {
106
108
  return /*#__PURE__*/React.createElement(OverflowMenuItem, _extends({
107
109
  key: id
108
110
  }, rest));
109
- }));
111
+ })));
110
112
  }
111
113
 
112
114
  var icons = actionIcons.map(function (_ref3) {
@@ -248,8 +250,8 @@ Card.propTypes = {
248
250
  children: PropTypes.node,
249
251
  className: PropTypes.string,
250
252
  clickZone: PropTypes.oneOf(['one', 'two', 'three']),
251
- description: PropTypes.string,
252
- label: PropTypes.string,
253
+ description: PropTypes.oneOfType([PropTypes.string, PropTypes.object, PropTypes.node]),
254
+ label: PropTypes.oneOfType([PropTypes.string, PropTypes.object, PropTypes.node]),
253
255
  media: PropTypes.node,
254
256
  mediaPosition: PropTypes.oneOf(['top', 'left']),
255
257
  onClick: PropTypes.func,
@@ -274,7 +276,7 @@ Card.propTypes = {
274
276
  secondaryButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
275
277
  secondaryButtonKind: PropTypes.oneOf(['secondary', 'ghost']),
276
278
  secondaryButtonText: PropTypes.string,
277
- title: PropTypes.string,
279
+ title: PropTypes.oneOfType([PropTypes.string, PropTypes.object, PropTypes.node]),
278
280
  titleSize: PropTypes.oneOf(['default', 'large'])
279
281
  };
280
282
  Card.displayName = componentName;
@@ -60,7 +60,7 @@ export var CardHeader = function CardHeader(_ref) {
60
60
  };
61
61
  CardHeader.propTypes = {
62
62
  actions: PropTypes.oneOfType([PropTypes.array, PropTypes.node]),
63
- description: PropTypes.string,
63
+ description: PropTypes.oneOfType([PropTypes.string, PropTypes.object, PropTypes.node]),
64
64
  hasActions: PropTypes.bool,
65
65
  label: PropTypes.string,
66
66
  noActionIcons: PropTypes.bool,
@@ -68,7 +68,7 @@ CardHeader.propTypes = {
68
68
  primaryButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
69
69
  primaryButtonPlacement: PropTypes.oneOf(['top', 'bottom']),
70
70
  primaryButtonText: PropTypes.string,
71
- title: PropTypes.string,
71
+ title: PropTypes.oneOfType([PropTypes.string, PropTypes.object, PropTypes.node]),
72
72
  titleSize: PropTypes.oneOf(['default', 'large'])
73
73
  };
74
74
  CardHeader.displayName = componentName;
@@ -1,16 +1,15 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
 
3
- /*
4
- * Licensed Materials - Property of IBM
5
- * 5724-Q36
6
- * (c) Copyright IBM Corp. 2020
7
- * US Government Users Restricted Rights - Use, duplication or disclosure
8
- * restricted by GSA ADP Schedule Contract with IBM Corp.
3
+ /**
4
+ * Copyright IBM Corp. 2020, 2023
5
+ *
6
+ * This source code is licensed under the Apache-2.0 license found in the
7
+ * LICENSE file in the root directory of this source tree.
9
8
  */
10
9
  import React from 'react';
11
10
  import { pkg } from '../../../settings';
12
11
  import { TableBody, TableRow, TableCell } from '@carbon/react';
13
- import { NoDataEmptyState, ErrorEmptyState } from '../../EmptyStates';
12
+ import { NoDataEmptyState, ErrorEmptyState, NotFoundEmptyState } from '../../EmptyStates';
14
13
  var blockClass = "".concat(pkg.prefix, "--datagrid");
15
14
 
16
15
  var DatagridEmptyBody = function DatagridEmptyBody(datagridState) {
@@ -24,25 +23,21 @@ var DatagridEmptyBody = function DatagridEmptyBody(datagridState) {
24
23
  illustrationTheme = datagridState.illustrationTheme,
25
24
  emptyStateAction = datagridState.emptyStateAction,
26
25
  emptyStateLink = datagridState.emptyStateLink;
27
- return /*#__PURE__*/React.createElement(TableBody, _extends({}, getTableBodyProps(), {
28
- className: "".concat(blockClass, "__empty-state-body")
29
- }), /*#__PURE__*/React.createElement(TableRow, null, /*#__PURE__*/React.createElement(TableCell, {
30
- colSpan: headers.length
31
- }, emptyStateType === 'error' && /*#__PURE__*/React.createElement(ErrorEmptyState, {
32
- illustrationTheme: illustrationTheme,
33
- size: emptyStateSize,
34
- title: emptyStateTitle,
35
- subtitle: emptyStateDescription,
36
- action: emptyStateAction,
37
- link: emptyStateLink
38
- }), emptyStateType === 'noData' && /*#__PURE__*/React.createElement(NoDataEmptyState, {
26
+ var emptyStateProps = {
39
27
  illustrationTheme: illustrationTheme,
40
28
  size: emptyStateSize,
41
29
  title: emptyStateTitle,
42
30
  subtitle: emptyStateDescription,
43
31
  action: emptyStateAction,
44
32
  link: emptyStateLink
45
- }))));
33
+ };
34
+ return /*#__PURE__*/React.createElement(TableBody, _extends({}, getTableBodyProps({
35
+ role: false
36
+ }), {
37
+ className: "".concat(blockClass, "__empty-state-body")
38
+ }), /*#__PURE__*/React.createElement(TableRow, null, /*#__PURE__*/React.createElement(TableCell, {
39
+ colSpan: headers.length
40
+ }, emptyStateType === 'error' && /*#__PURE__*/React.createElement(ErrorEmptyState, emptyStateProps), emptyStateType === 'noData' && /*#__PURE__*/React.createElement(NoDataEmptyState, emptyStateProps), emptyStateType === 'notFound' && /*#__PURE__*/React.createElement(NotFoundEmptyState, emptyStateProps))));
46
41
  };
47
42
 
48
43
  export default DatagridEmptyBody;
@@ -16,7 +16,9 @@ import { pkg } from '../../../settings';
16
16
  var blockClass = "".concat(pkg.prefix, "--datagrid");
17
17
 
18
18
  var HeaderRow = function HeaderRow(datagridState, headRef, headerGroup) {
19
- return /*#__PURE__*/React.createElement(TableRow, _extends({}, headerGroup.getHeaderGroupProps(), {
19
+ return /*#__PURE__*/React.createElement(TableRow, _extends({}, headerGroup.getHeaderGroupProps({
20
+ role: false
21
+ }), {
20
22
  className: cx("".concat(blockClass, "__head"), headerGroup.getHeaderGroupProps().className),
21
23
  ref: headRef
22
24
  }), datagridState.headers.filter(function (_ref) {
@@ -32,7 +34,9 @@ var HeaderRow = function HeaderRow(datagridState, headRef, headerGroup) {
32
34
  });
33
35
  }
34
36
 
35
- return /*#__PURE__*/React.createElement(TableHeader, _extends({}, header.getHeaderProps(), {
37
+ return /*#__PURE__*/React.createElement(TableHeader, _extends({}, header.getHeaderProps({
38
+ role: false
39
+ }), {
36
40
  className: cx((_cx = {}, _defineProperty(_cx, "".concat(blockClass, "__resizableColumn"), header.getResizerProps), _defineProperty(_cx, "".concat(blockClass, "__isResizing"), header.isResizing), _defineProperty(_cx, "".concat(blockClass, "__sortableColumn"), header.canSort), _defineProperty(_cx, "".concat(blockClass, "__isSorted"), header.isSorted), _cx), header.getHeaderProps().className),
37
41
  key: header.id
38
42
  }), header.render('Header'), header.getResizerProps && /*#__PURE__*/React.createElement("div", _extends({}, header.getResizerProps(), {
@@ -24,7 +24,9 @@ var DatagridRefBody = function DatagridRefBody(datagridState) {
24
24
  var getTableBodyProps = datagridState.getTableBodyProps,
25
25
  rows = datagridState.rows,
26
26
  prepareRow = datagridState.prepareRow;
27
- return /*#__PURE__*/React.createElement("tbody", _extends({}, getTableBodyProps(), {
27
+ return /*#__PURE__*/React.createElement("tbody", _extends({}, getTableBodyProps({
28
+ role: false
29
+ }), {
28
30
  className: cx("".concat(blockClass, "__simple-body"), getTableBodyProps().className)
29
31
  }), rows.map(function (row) {
30
32
  prepareRow(row);