@carbon/ibm-products 1.8.0 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. package/css/index-full-carbon.css +82 -9
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +3 -3
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +1 -2
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +1 -1
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +82 -9
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +3 -3
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +82 -9
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +3 -3
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/AddSelect/AddSelect.js +104 -16
  18. package/es/components/AddSelect/AddSelectBreadcrumbs.js +4 -4
  19. package/es/components/AddSelect/AddSelectColumn.js +21 -0
  20. package/es/components/AddSelect/AddSelectList.js +67 -8
  21. package/es/components/AddSelect/AddSelectSidebar.js +7 -1
  22. package/es/components/DataSpreadsheet/DataSpreadsheet.js +42 -2
  23. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +194 -10
  24. package/es/components/DataSpreadsheet/createActiveCellFn.js +1 -1
  25. package/es/components/DataSpreadsheet/createCellSelectionArea.js +45 -0
  26. package/es/components/InlineEdit/InlineEdit.js +23 -13
  27. package/es/global/js/utils/DisplayBox.js +31 -0
  28. package/es/global/js/utils/deepCloneObject.js +26 -0
  29. package/lib/components/AddSelect/AddSelect.js +102 -15
  30. package/lib/components/AddSelect/AddSelectBreadcrumbs.js +2 -3
  31. package/lib/components/AddSelect/AddSelectColumn.js +37 -0
  32. package/lib/components/AddSelect/AddSelectList.js +65 -8
  33. package/lib/components/AddSelect/AddSelectSidebar.js +7 -1
  34. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +42 -2
  35. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +198 -10
  36. package/lib/components/DataSpreadsheet/createActiveCellFn.js +1 -1
  37. package/lib/components/DataSpreadsheet/createCellSelectionArea.js +56 -0
  38. package/lib/components/InlineEdit/InlineEdit.js +23 -13
  39. package/lib/global/js/utils/DisplayBox.js +46 -0
  40. package/lib/global/js/utils/deepCloneObject.js +37 -0
  41. package/package.json +8 -8
  42. package/scss/components/ActionBar/_storybook-styles.scss +8 -0
  43. package/scss/components/ActionSet/_storybook-styles.scss +1 -3
  44. package/scss/components/AddSelect/_add-select.scss +58 -2
  45. package/scss/components/BreadcrumbWithOverflow/_storybook-styles.scss +8 -0
  46. package/scss/components/ButtonSetWithOverflow/_storybook-styles.scss +8 -0
  47. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +18 -0
  48. package/scss/components/InlineEdit/_inline-edit.scss +11 -4
  49. package/scss/components/InlineEdit/_storybook-styles.scss +1 -0
  50. package/scss/components/TagSet/_storybook-styles.scss +8 -0
  51. package/scss/components/Tearsheet/_tearsheet.scss +1 -2
  52. package/scss/global/styles/_display-box.scss +62 -0
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022, 2022
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
+ import PropTypes from 'prop-types';
8
+ import React from 'react';
9
+ import cx from 'classnames';
10
+ var blockClass = 'ccs-sb--display-box';
11
+ export var DisplayBox = function DisplayBox(_ref) {
12
+ var children = _ref.children,
13
+ className = _ref.className,
14
+ msg = _ref.msg;
15
+ return /*#__PURE__*/React.createElement("div", {
16
+ className: cx(blockClass, className)
17
+ }, /*#__PURE__*/React.createElement("div", {
18
+ className: "".concat(blockClass, "__indicator")
19
+ }, /*#__PURE__*/React.createElement("div", {
20
+ className: "".concat(blockClass, "__message")
21
+ }, msg || /*#__PURE__*/React.createElement(React.Fragment, null, "width available to component", /*#__PURE__*/React.createElement("br", null), "(use containerWidth control to adjust)")), /*#__PURE__*/React.createElement("div", {
22
+ className: "".concat(blockClass, "__indicator--left")
23
+ }), /*#__PURE__*/React.createElement("div", {
24
+ className: "".concat(blockClass, "__indicator--right")
25
+ })), children);
26
+ };
27
+ DisplayBox.propTypes = {
28
+ children: PropTypes.node,
29
+ className: PropTypes.string,
30
+ msg: PropTypes.node
31
+ };
@@ -0,0 +1,26 @@
1
+ import _typeof from "@babel/runtime/helpers/typeof";
2
+
3
+ /**
4
+ * Copyright IBM Corp. 2022, 2022
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.
8
+ */
9
+ // Utility to return a deep clone of a nested object or array.
10
+ export var deepCloneObject = function deepCloneObject(objectToClone) {
11
+ // Return the value if objectToClone is not an object
12
+ if (_typeof(objectToClone) !== 'object' || objectToClone === null) {
13
+ return objectToClone;
14
+ } // Create a new array/object to hold the values
15
+
16
+
17
+ var clonedObject = Array.isArray(objectToClone) ? [] : {};
18
+
19
+ for (var key in objectToClone) {
20
+ var value = objectToClone[key]; // Recursively check for nested objects/arrays
21
+
22
+ clonedObject[key] = deepCloneObject(value);
23
+ }
24
+
25
+ return clonedObject;
26
+ };
@@ -37,12 +37,19 @@ var _AddSelectBreadcrumbs = require("./AddSelectBreadcrumbs");
37
37
 
38
38
  var _AddSelectList = require("./AddSelectList");
39
39
 
40
- var _excluded = ["className", "description", "influencerTitle", "inputPlaceholder", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSearchFilter", "onSubmit", "onSubmitButtonText", "open", "removeIconDescription", "textInputLabel", "title"];
40
+ var _AddSelectColumn = require("./AddSelectColumn");
41
+
42
+ var _excluded = ["className", "description", "influencerTitle", "inputPlaceholder", "items", "itemsLabel", "multi", "noResultsDescription", "noResultsTitle", "noSelectionDescription", "noSelectionTitle", "onClose", "onCloseButtonText", "onSearchFilter", "onSubmit", "onSubmitButtonText", "open", "removeIconDescription", "textInputLabel", "title"],
43
+ _excluded2 = ["children"];
41
44
 
42
45
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
43
46
 
44
47
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
45
48
 
49
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
50
+
51
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
52
+
46
53
  var componentName = 'AddSelect'; // Default values for props
47
54
 
48
55
  var defaults = {
@@ -93,7 +100,78 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
93
100
  var _useState7 = (0, _react.useState)(''),
94
101
  _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
95
102
  searchTerm = _useState8[0],
96
- setSearchTerm = _useState8[1]; // handlers
103
+ setSearchTerm = _useState8[1];
104
+
105
+ var _useState9 = (0, _react.useState)({}),
106
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
107
+ normalizedItems = _useState10[0],
108
+ setNormalizedItems = _useState10[1];
109
+
110
+ var _useState11 = (0, _react.useState)(false),
111
+ _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
112
+ useNormalizedItems = _useState12[0],
113
+ setUsedNormalizedItems = _useState12[1];
114
+
115
+ (0, _react.useEffect)(function () {
116
+ var normalize = function normalize(arr, parentId) {
117
+ return arr.reduce(function (acc, cur) {
118
+ var children = cur.children,
119
+ item = (0, _objectWithoutProperties2.default)(cur, _excluded2);
120
+ acc[cur.id] = _objectSpread({}, item);
121
+
122
+ if (parentId) {
123
+ acc[cur.id].parent = parentId;
124
+ }
125
+
126
+ if (children) {
127
+ acc[cur.id].children = children.map(function (child) {
128
+ return child.id;
129
+ });
130
+ var child = normalize(children, cur.id);
131
+ return _objectSpread(_objectSpread({}, acc), child);
132
+ }
133
+
134
+ return acc;
135
+ }, {});
136
+ };
137
+
138
+ if (multi && items.find(function (item) {
139
+ return item.children;
140
+ })) {
141
+ var newItems = normalize(items);
142
+ setNormalizedItems(newItems);
143
+ setUsedNormalizedItems(true);
144
+ }
145
+ }, [items, multi]);
146
+
147
+ var getPages = function getPages() {
148
+ var results = [];
149
+ var itemIds = Object.keys(normalizedItems);
150
+ var topLevelItems = [];
151
+ itemIds.forEach(function (itemId) {
152
+ if (!normalizedItems[itemId].parent) {
153
+ topLevelItems.push(normalizedItems[itemId]);
154
+ }
155
+ });
156
+ results.push(topLevelItems);
157
+
158
+ if (path.length) {
159
+ var pathIds = path.map(function (p) {
160
+ return p.id;
161
+ });
162
+ pathIds.forEach(function (pathId) {
163
+ var childItems = [];
164
+ itemIds.forEach(function (itemId) {
165
+ if (normalizedItems[itemId].parent === pathId) {
166
+ childItems.push(normalizedItems[itemId]);
167
+ }
168
+ });
169
+ results.push(childItems);
170
+ });
171
+ }
172
+
173
+ return results;
174
+ }; // handlers
97
175
 
98
176
 
99
177
  var handleSearch = function handleSearch(e) {
@@ -130,7 +208,16 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
130
208
  return results;
131
209
  };
132
210
 
133
- var filteredItems = getFilteredItems(); // main content
211
+ var itemsToDisplay = useNormalizedItems ? getPages() : getFilteredItems();
212
+ var commonListProps = {
213
+ multi: multi,
214
+ multiSelection: multiSelection,
215
+ path: path,
216
+ setMultiSelection: setMultiSelection,
217
+ setPath: setPath,
218
+ setSingleSelection: setSingleSelection,
219
+ singleSelection: singleSelection
220
+ }; // main content
134
221
 
135
222
  var body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
136
223
  className: "".concat(blockClass, "__header")
@@ -148,25 +235,25 @@ var AddSelect = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
148
235
  setPath: setPath
149
236
  }) : /*#__PURE__*/_react.default.createElement("p", {
150
237
  className: "".concat(blockClass, "__items-label")
151
- }, itemsLabel), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
238
+ }, itemsLabel), !useNormalizedItems && /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Tag, {
152
239
  type: "gray",
153
240
  size: "sm",
154
241
  className: "".concat(blockClass, "__items-label-tag")
155
- }, filteredItems.length))), filteredItems.length > 0 ? /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, {
156
- filteredItems: filteredItems,
157
- multi: multi,
158
- multiSelection: multiSelection,
159
- path: path,
160
- setMultiSelection: setMultiSelection,
161
- setPath: setPath,
162
- setSingleSelection: setSingleSelection,
163
- singleSelection: singleSelection
164
- }) : /*#__PURE__*/_react.default.createElement("div", {
242
+ }, itemsToDisplay.length))), useNormalizedItems ? /*#__PURE__*/_react.default.createElement("div", {
243
+ className: "".concat(blockClass, "__columns")
244
+ }, itemsToDisplay.map(function (page, idx) {
245
+ return /*#__PURE__*/_react.default.createElement(_AddSelectColumn.AddSelectColumn, (0, _extends2.default)({}, commonListProps, {
246
+ key: idx,
247
+ filteredItems: page
248
+ }));
249
+ })) : /*#__PURE__*/_react.default.createElement("div", null, itemsToDisplay.length > 0 ? /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, (0, _extends2.default)({}, commonListProps, {
250
+ filteredItems: itemsToDisplay
251
+ })) : /*#__PURE__*/_react.default.createElement("div", {
165
252
  className: "".concat(blockClass, "__body")
166
253
  }, /*#__PURE__*/_react.default.createElement(_NoDataEmptyState.NoDataEmptyState, {
167
254
  subtitle: noResultsDescription,
168
255
  title: noResultsTitle
169
- })));
256
+ }))));
170
257
 
171
258
  var commonTearsheetProps = {
172
259
  open: open,
@@ -29,11 +29,10 @@ var AddSelectBreadcrumbs = function AddSelectBreadcrumbs(_ref) {
29
29
  setPath = _ref.setPath;
30
30
 
31
31
  var clickHandler = function clickHandler(id) {
32
- var newPath = (0, _toConsumableArray2.default)(path);
33
- var pathIdx = newPath.findIndex(function (entry) {
32
+ var pathIdx = path.findIndex(function (entry) {
34
33
  return entry.id === id;
35
34
  });
36
- var finalPath = newPath.splice(0, pathIdx + 1);
35
+ var finalPath = (0, _toConsumableArray2.default)(path).splice(0, pathIdx + 1);
37
36
  setPath(finalPath);
38
37
  };
39
38
 
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.AddSelectColumn = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ var _settings = require("../../settings");
15
+
16
+ var _AddSelectList = require("./AddSelectList");
17
+
18
+ //
19
+ // Copyright IBM Corp. 2022
20
+ //
21
+ // This source code is licensed under the Apache-2.0 license found in the
22
+ // LICENSE file in the root directory of this source tree.
23
+ //
24
+ // import PropTypes from 'prop-types';
25
+ var componentName = 'AddSelect';
26
+
27
+ var AddSelectColumn = function AddSelectColumn(props) {
28
+ var blockClass = "".concat(_settings.pkg.prefix, "--add-select__col");
29
+ return /*#__PURE__*/_react.default.createElement("div", {
30
+ className: blockClass
31
+ }, /*#__PURE__*/_react.default.createElement(_AddSelectList.AddSelectList, (0, _extends2.default)({}, props, {
32
+ inColumn: true
33
+ })));
34
+ };
35
+
36
+ exports.AddSelectColumn = AddSelectColumn;
37
+ AddSelectColumn.displayName = componentName;
@@ -29,6 +29,7 @@ var componentName = 'AddSelectList';
29
29
 
30
30
  var AddSelectList = function AddSelectList(_ref) {
31
31
  var filteredItems = _ref.filteredItems,
32
+ inColumn = _ref.inColumn,
32
33
  multi = _ref.multi,
33
34
  multiSelection = _ref.multiSelection,
34
35
  path = _ref.path,
@@ -57,11 +58,59 @@ var AddSelectList = function AddSelectList(_ref) {
57
58
 
58
59
  var onNavigateItem = function onNavigateItem(_ref2) {
59
60
  var id = _ref2.id,
60
- title = _ref2.title;
61
- setPath([].concat((0, _toConsumableArray2.default)(path), [{
62
- id: id,
63
- title: title
64
- }]));
61
+ title = _ref2.title,
62
+ parent = _ref2.parent;
63
+
64
+ // if multi select
65
+ if (multi) {
66
+ // if top level reset the path
67
+ if (!parent) {
68
+ setPath([{
69
+ id: id,
70
+ title: title
71
+ }]);
72
+ } else {
73
+ var pathIds = path.map(function (p) {
74
+ return p.id;
75
+ }); // if item is already selected somewhere go back to that item
76
+
77
+ if (pathIds.includes(id)) {
78
+ var pathIdx = pathIds.findIndex(function (pathId) {
79
+ return pathId === id;
80
+ });
81
+ var newPath = (0, _toConsumableArray2.default)(path).splice(0, pathIdx + 1);
82
+ setPath((0, _toConsumableArray2.default)(newPath));
83
+ } else {
84
+ // if the item is on the same level as another selected item start from the parent level
85
+ if (path.find(function (p) {
86
+ return p.parent === parent;
87
+ })) {
88
+ var parentIdx = path.findIndex(function (p) {
89
+ return p.id === parent;
90
+ });
91
+
92
+ var _newPath = (0, _toConsumableArray2.default)(path).splice(0, parentIdx + 1);
93
+
94
+ setPath([].concat((0, _toConsumableArray2.default)(_newPath), [{
95
+ id: id,
96
+ title: title,
97
+ parent: parent
98
+ }]));
99
+ } else {
100
+ setPath([].concat((0, _toConsumableArray2.default)(path), [{
101
+ id: id,
102
+ title: title,
103
+ parent: parent
104
+ }]));
105
+ }
106
+ }
107
+ }
108
+ } else {
109
+ setPath([].concat((0, _toConsumableArray2.default)(path), [{
110
+ id: id,
111
+ title: title
112
+ }]));
113
+ }
65
114
  };
66
115
 
67
116
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -71,15 +120,22 @@ var AddSelectList = function AddSelectList(_ref) {
71
120
  className: "".concat(blockClass)
72
121
  }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListBody, null, filteredItems.map(function (item) {
73
122
  return /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListRow, {
74
- key: item.id
75
- }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListCell, null, /*#__PURE__*/_react.default.createElement("div", {
123
+ key: item.id,
124
+ className: "".concat(blockClass, "-row")
125
+ }, /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.StructuredListCell, {
126
+ className: "".concat(blockClass, "-cell")
127
+ }, /*#__PURE__*/_react.default.createElement("div", {
76
128
  className: "".concat(blockClass, "-cell-wrapper")
77
129
  }, multi ? /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Checkbox, {
78
130
  className: "".concat(blockClass, "-checkbox"),
79
131
  onChange: function onChange(value) {
80
132
  return handleMultiSelection(item.id, value);
81
133
  },
82
- labelText: item.title,
134
+ labelText: !inColumn ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
135
+ className: "".concat(blockClass, "-cell-title")
136
+ }, item.title), /*#__PURE__*/_react.default.createElement("span", {
137
+ className: "".concat(blockClass, "-cell-subtitle")
138
+ }, item.subtitle)) : item.title,
83
139
  id: item.id,
84
140
  checked: multiSelection.includes(item.id)
85
141
  }) : /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.RadioButton, {
@@ -101,6 +157,7 @@ var AddSelectList = function AddSelectList(_ref) {
101
157
  exports.AddSelectList = AddSelectList;
102
158
  AddSelectList.propTypes = {
103
159
  filteredItems: _propTypes.default.array,
160
+ inColumn: _propTypes.default.bool,
104
161
  multi: _propTypes.default.bool,
105
162
  multiSelection: _propTypes.default.array,
106
163
  path: _propTypes.default.array,
@@ -63,7 +63,13 @@ var AddSelectSidebar = function AddSelectSidebar(_ref) {
63
63
  id = _ref2.id;
64
64
  return /*#__PURE__*/_react.default.createElement("div", {
65
65
  className: "".concat(blockClass, "-accordion-title")
66
- }, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("p", null, title), /*#__PURE__*/_react.default.createElement("p", null, subtitle)), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
66
+ }, /*#__PURE__*/_react.default.createElement("div", {
67
+ className: "".concat(blockClass, "-selected-item")
68
+ }, /*#__PURE__*/_react.default.createElement("p", {
69
+ className: "".concat(blockClass, "-selected-item-title")
70
+ }, title), /*#__PURE__*/_react.default.createElement("p", {
71
+ className: "".concat(blockClass, "-selected-item-subtitle")
72
+ }, subtitle)), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.Button, {
67
73
  renderIcon: _iconsReact.SubtractAlt32,
68
74
  iconDescription: removeIconDescription,
69
75
  hasIconOnly: true,
@@ -88,6 +88,21 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
88
88
  activeCellCoordinates = _useState4[0],
89
89
  setActiveCellCoordinates = _useState4[1];
90
90
 
91
+ var _useState5 = (0, _react.useState)([]),
92
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
93
+ selectionAreas = _useState6[0],
94
+ setSelectionAreas = _useState6[1];
95
+
96
+ var _useState7 = (0, _react.useState)(false),
97
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
98
+ clickAndHoldActive = _useState8[0],
99
+ setClickAndHoldActive = _useState8[1];
100
+
101
+ var _useState9 = (0, _react.useState)(null),
102
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
103
+ currentMatcher = _useState10[0],
104
+ setCurrentMatcher = _useState10[1];
105
+
91
106
  var cellSizeValue = (0, _getCellSize.getCellSize)(cellSize);
92
107
  var defaultColumn = (0, _react.useMemo)(function () {
93
108
  return {
@@ -130,6 +145,13 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
130
145
  if (activeCellHighlight) {
131
146
  activeCellHighlight.remove();
132
147
  }
148
+ }, [spreadsheetRef]); // Removes the cell selection elements
149
+
150
+ var removeCellSelections = (0, _react.useCallback)(function () {
151
+ var cellSelections = spreadsheetRef.current.querySelectorAll(".".concat(blockClass, "__selection-area--element"));
152
+ Array.from(cellSelections).forEach(function (element) {
153
+ return element.remove();
154
+ });
133
155
  }, [spreadsheetRef]); // Click outside useEffect
134
156
 
135
157
  (0, _react.useEffect)(function () {
@@ -138,7 +160,9 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
138
160
  return;
139
161
  }
140
162
 
163
+ setSelectionAreas([]);
141
164
  removeActiveCell();
165
+ removeCellSelections();
142
166
  setContainerHasFocus(false);
143
167
  setActiveCellCoordinates(null);
144
168
  };
@@ -147,7 +171,7 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
147
171
  return function () {
148
172
  document.removeEventListener('click', handleOutsideClick);
149
173
  };
150
- }, [spreadsheetRef, removeActiveCell]);
174
+ }, [spreadsheetRef, removeActiveCell, removeCellSelections]);
151
175
  var createActiveCell = (0, _react.useCallback)(function (_ref2) {
152
176
  var placementElement = _ref2.placementElement,
153
177
  coords = _ref2.coords,
@@ -194,12 +218,21 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
194
218
 
195
219
  if ([35, 36, 37, 38, 39, 40].indexOf(keyCode) > -1) {
196
220
  event.preventDefault();
221
+ } // Clear out all cell selection areas if user uses any arrow key
222
+
223
+
224
+ if ([37, 38, 39, 40].indexOf(keyCode) > -1) {
225
+ if (selectionAreas !== null && selectionAreas !== void 0 && selectionAreas.length) {
226
+ setSelectionAreas([]);
227
+ removeCellSelections();
228
+ }
197
229
  }
198
230
 
199
231
  switch (keyCode) {
200
232
  // Tab
201
233
  case 9:
202
234
  {
235
+ setSelectionAreas([]);
203
236
  removeActiveCell();
204
237
  setContainerHasFocus(false);
205
238
  setActiveCellCoordinates(null);
@@ -343,7 +376,7 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
343
376
  break;
344
377
  }
345
378
  }
346
- }, [handleInitialArrowPress, activeCellCoordinates, removeActiveCell, columns.length, rows.length]); // Adds active cell highlight to correct cell onKeyDown
379
+ }, [handleInitialArrowPress, activeCellCoordinates, selectionAreas === null || selectionAreas === void 0 ? void 0 : selectionAreas.length, removeCellSelections, removeActiveCell, columns.length, rows.length]); // Adds active cell highlight to correct cell onKeyDown
347
380
 
348
381
  (0, _react.useEffect)(function () {
349
382
  var activeCellPlacementElement = spreadsheetRef === null || spreadsheetRef === void 0 ? void 0 : spreadsheetRef.current.querySelector("[data-row-index=\"".concat(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row, "\"][data-column-index=\"").concat(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column, "\"]"));
@@ -376,6 +409,13 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
376
409
  defaultColumn: defaultColumn,
377
410
  headerGroups: headerGroups
378
411
  }), /*#__PURE__*/_react.default.createElement(_DataSpreadsheetBody.DataSpreadsheetBody, {
412
+ clickAndHoldActive: clickAndHoldActive,
413
+ setClickAndHoldActive: setClickAndHoldActive,
414
+ currentMatcher: currentMatcher,
415
+ setCurrentMatcher: setCurrentMatcher,
416
+ setContainerHasFocus: setContainerHasFocus,
417
+ selectionAreas: selectionAreas,
418
+ setSelectionAreas: setSelectionAreas,
379
419
  cellSize: cellSize,
380
420
  defaultColumn: defaultColumn,
381
421
  getTableBodyProps: getTableBodyProps,