@carbon/ibm-products 1.8.0 → 1.9.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 (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,