@carbon/ibm-products 1.14.0 → 1.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. package/css/index-full-carbon.css +23 -5
  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 +4 -4
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +2 -2
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +23 -5
  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 +23 -5
  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 +25 -19
  18. package/es/components/AddSelect/AddSelectFilter.js +5 -5
  19. package/es/components/DataSpreadsheet/DataSpreadsheet.js +174 -127
  20. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +24 -8
  21. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +31 -6
  22. package/es/components/DataSpreadsheet/hooks/index.js +2 -1
  23. package/es/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +36 -8
  24. package/es/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +68 -0
  25. package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +20 -8
  26. package/es/components/DataSpreadsheet/utils/getSelectionAreaPoints.js +18 -0
  27. package/es/components/DataSpreadsheet/utils/handleActiveCellInSelectionEnter.js +121 -0
  28. package/es/components/DataSpreadsheet/utils/handleActiveCellInSelectionTab.js +108 -0
  29. package/es/components/DataSpreadsheet/utils/handleEditSubmit.js +87 -0
  30. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +42 -8
  31. package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +153 -15
  32. package/es/components/DataSpreadsheet/utils/selectAllCells.js +53 -0
  33. package/es/components/MultiAddSelect/MultiAddSelect.js +150 -3
  34. package/es/components/PageHeader/PageHeader.js +3 -1
  35. package/es/components/SingleAddSelect/SingleAddSelect.js +90 -4
  36. package/es/components/TagSet/TagSet.js +13 -6
  37. package/es/components/Tearsheet/TearsheetShell.js +34 -10
  38. package/es/global/js/package-settings.js +2 -1
  39. package/lib/components/AddSelect/AddSelect.js +25 -19
  40. package/lib/components/AddSelect/AddSelectFilter.js +5 -5
  41. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +178 -126
  42. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +24 -8
  43. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +32 -6
  44. package/lib/components/DataSpreadsheet/hooks/index.js +9 -1
  45. package/lib/components/DataSpreadsheet/hooks/useMultipleKeyTracking.js +36 -8
  46. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +79 -0
  47. package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +21 -8
  48. package/lib/components/DataSpreadsheet/utils/getSelectionAreaPoints.js +27 -0
  49. package/lib/components/DataSpreadsheet/utils/handleActiveCellInSelectionEnter.js +127 -0
  50. package/lib/components/DataSpreadsheet/utils/handleActiveCellInSelectionTab.js +118 -0
  51. package/lib/components/DataSpreadsheet/utils/handleEditSubmit.js +94 -0
  52. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +44 -8
  53. package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +161 -22
  54. package/lib/components/DataSpreadsheet/utils/selectAllCells.js +60 -0
  55. package/lib/components/MultiAddSelect/MultiAddSelect.js +150 -2
  56. package/lib/components/PageHeader/PageHeader.js +3 -1
  57. package/lib/components/SingleAddSelect/SingleAddSelect.js +91 -3
  58. package/lib/components/TagSet/TagSet.js +13 -6
  59. package/lib/components/Tearsheet/TearsheetShell.js +36 -10
  60. package/lib/global/js/package-settings.js +2 -1
  61. package/package.json +11 -11
  62. package/scss/components/AboutModal/_about-modal.scss +4 -0
  63. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +22 -1
  64. package/scss/components/ExportModal/_export-modal.scss +0 -4
@@ -1,11 +1,15 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+
1
3
  /**
2
4
  * Copyright IBM Corp. 2022, 2022
3
5
  *
4
6
  * This source code is licensed under the Apache-2.0 license found in the
5
7
  * LICENSE file in the root directory of this source tree.
6
8
  */
9
+ import { deepCloneObject } from '../../../global/js/utils/deepCloneObject';
7
10
  import uuidv4 from '../../../global/js/utils/uuidv4';
8
11
  import { removeCellSelections } from './removeCellSelections';
12
+ import { checkActiveHeaderCell } from './checkActiveHeaderCell';
9
13
  export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref) {
10
14
  var type = _ref.type,
11
15
  activeCellCoordinates = _ref.activeCellCoordinates,
@@ -17,8 +21,16 @@ export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref)
17
21
  spreadsheetRef = _ref.spreadsheetRef,
18
22
  index = _ref.index,
19
23
  isKeyboard = _ref.isKeyboard,
20
- setSelectionAreaData = _ref.setSelectionAreaData;
21
- setSelectionAreaData([]);
24
+ setSelectionAreaData = _ref.setSelectionAreaData,
25
+ isHoldingCommandKey = _ref.isHoldingCommandKey;
26
+
27
+ if (!isHoldingCommandKey) {
28
+ setSelectionAreaData([]);
29
+ removeCellSelections({
30
+ spreadsheetRef: spreadsheetRef
31
+ });
32
+ }
33
+
22
34
  var rowValue = isKeyboard ? activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row : index;
23
35
  var columnValue = isKeyboard ? activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column : index;
24
36
  var point1 = {
@@ -36,13 +48,35 @@ export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref)
36
48
  column: type === 'column' ? columnValue : 0
37
49
  });
38
50
  setCurrentMatcher(tempMatcher);
39
- removeCellSelections({
40
- spreadsheetRef: spreadsheetRef
41
- });
42
- setSelectionAreas([{
51
+ var newSelectionArea = {
43
52
  point1: point1,
44
53
  point2: point2,
45
54
  areaCreated: false,
46
- matcher: tempMatcher
47
- }]);
55
+ matcher: tempMatcher,
56
+ header: {
57
+ type: type,
58
+ index: index
59
+ }
60
+ };
61
+ setSelectionAreas(function (prev) {
62
+ var selectionsClone = deepCloneObject(prev);
63
+
64
+ if (isHoldingCommandKey) {
65
+ var selectionsFromHeaderCell = selectionsClone.filter(function (item) {
66
+ return item.header.type;
67
+ });
68
+ var previouslyCreatedHeaderSelection = selectionsFromHeaderCell.filter(function (item) {
69
+ return item.header.type === type;
70
+ });
71
+ var isHeaderPartOfPreviousSelection = checkActiveHeaderCell(index, previouslyCreatedHeaderSelection, type); // Prevents row/column header selections from being created multiple times
72
+
73
+ if (previouslyCreatedHeaderSelection.length && isHeaderPartOfPreviousSelection) {
74
+ return prev;
75
+ }
76
+
77
+ return [].concat(_toConsumableArray(prev), [newSelectionArea]);
78
+ }
79
+
80
+ return [newSelectionArea];
81
+ });
48
82
  };
@@ -1,3 +1,9 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+
3
+ 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; }
4
+
5
+ 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) { _defineProperty(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; }
6
+
1
7
  /**
2
8
  * Copyright IBM Corp. 2022, 2022
3
9
  *
@@ -5,6 +11,17 @@
5
11
  * LICENSE file in the root directory of this source tree.
6
12
  */
7
13
  import { deepCloneObject } from '../../../global/js/utils/deepCloneObject';
14
+ import uuidv4 from '../../../global/js/utils/uuidv4';
15
+ import { selectAllCells } from './selectAllCells';
16
+ export var includesResourceKey = function includesResourceKey(arr, usingMac) {
17
+ if (usingMac) {
18
+ return includesMeta(arr);
19
+ }
20
+
21
+ if (!usingMac) {
22
+ return includesControl(arr);
23
+ }
24
+ };
8
25
  export var includesShift = function includesShift(arr) {
9
26
  if (arr.includes('ShiftLeft') || arr.includes('ShiftRight')) {
10
27
  return true;
@@ -30,7 +47,7 @@ var includesControl = function includesControl(arr) {
30
47
  };
31
48
 
32
49
  export var handleMultipleKeys = function handleMultipleKeys(_ref) {
33
- var _selectionAreasClone$;
50
+ var _selectionAreasClone$, _selectionAreasClone$2, _selectionAreasClone$3;
34
51
 
35
52
  var activeCellCoordinates = _ref.activeCellCoordinates,
36
53
  event = _ref.event,
@@ -39,15 +56,21 @@ export var handleMultipleKeys = function handleMultipleKeys(_ref) {
39
56
  currentMatcher = _ref.currentMatcher,
40
57
  rows = _ref.rows,
41
58
  setSelectionAreas = _ref.setSelectionAreas,
42
- columns = _ref.columns;
59
+ columns = _ref.columns,
60
+ updateActiveCellCoordinates = _ref.updateActiveCellCoordinates,
61
+ spreadsheetRef = _ref.spreadsheetRef,
62
+ removeCellSelections = _ref.removeCellSelections,
63
+ blockClass = _ref.blockClass,
64
+ setCurrentMatcher = _ref.setCurrentMatcher,
65
+ usingMac = _ref.usingMac;
43
66
  var selectionAreasClone = deepCloneObject(selectionAreas);
44
67
  var indexOfCurrentArea = selectionAreasClone.findIndex(function (item) {
45
68
  return item.matcher === currentMatcher;
46
69
  });
47
- var pointToUpdate = (_selectionAreasClone$ = selectionAreasClone[indexOfCurrentArea]) !== null && _selectionAreasClone$ !== void 0 && _selectionAreasClone$.point2 ? selectionAreasClone[indexOfCurrentArea].point2 : selectionAreasClone[indexOfCurrentArea].point1; // Down + Shift
70
+ var pointToUpdate = (_selectionAreasClone$ = selectionAreasClone[indexOfCurrentArea]) !== null && _selectionAreasClone$ !== void 0 && _selectionAreasClone$.point2 ? (_selectionAreasClone$2 = selectionAreasClone[indexOfCurrentArea]) === null || _selectionAreasClone$2 === void 0 ? void 0 : _selectionAreasClone$2.point2 : (_selectionAreasClone$3 = selectionAreasClone[indexOfCurrentArea]) === null || _selectionAreasClone$3 === void 0 ? void 0 : _selectionAreasClone$3.point1; // Down + Shift
48
71
 
49
72
  if (includesShift(keysPressedList) && keysPressedList.includes('ArrowDown') && keysPressedList.length === 2) {
50
- if (rows.length - 1 === pointToUpdate.row) {
73
+ if (rows.length - 1 === (pointToUpdate === null || pointToUpdate === void 0 ? void 0 : pointToUpdate.row) || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
51
74
  return;
52
75
  }
53
76
 
@@ -62,7 +85,7 @@ export var handleMultipleKeys = function handleMultipleKeys(_ref) {
62
85
 
63
86
 
64
87
  if (includesShift(keysPressedList) && keysPressedList.includes('ArrowRight') && keysPressedList.length === 2) {
65
- if (columns.length - 1 === pointToUpdate.column) {
88
+ if (columns.length - 1 === (pointToUpdate === null || pointToUpdate === void 0 ? void 0 : pointToUpdate.column) || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
66
89
  return;
67
90
  }
68
91
 
@@ -77,7 +100,7 @@ export var handleMultipleKeys = function handleMultipleKeys(_ref) {
77
100
 
78
101
 
79
102
  if (includesShift(keysPressedList) && keysPressedList.includes('ArrowUp') && keysPressedList.length === 2) {
80
- if (pointToUpdate.row === 0) {
103
+ if ((pointToUpdate === null || pointToUpdate === void 0 ? void 0 : pointToUpdate.row) === 0 || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
81
104
  return;
82
105
  }
83
106
 
@@ -92,7 +115,7 @@ export var handleMultipleKeys = function handleMultipleKeys(_ref) {
92
115
 
93
116
 
94
117
  if (includesShift(keysPressedList) && keysPressedList.includes('ArrowLeft') && keysPressedList.length === 2) {
95
- if (pointToUpdate.column === 0) {
118
+ if ((pointToUpdate === null || pointToUpdate === void 0 ? void 0 : pointToUpdate.column) === 0 || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
96
119
  return;
97
120
  }
98
121
 
@@ -106,7 +129,7 @@ export var handleMultipleKeys = function handleMultipleKeys(_ref) {
106
129
  } // CMD + a (select all)
107
130
 
108
131
 
109
- if (includesMeta(keysPressedList) && keysPressedList.includes('KeyA')) {
132
+ if (includesResourceKey(keysPressedList, usingMac) && keysPressedList.includes('KeyA')) {
110
133
  event.preventDefault();
111
134
  var selectionPoint1 = {
112
135
  row: 0,
@@ -115,7 +138,20 @@ export var handleMultipleKeys = function handleMultipleKeys(_ref) {
115
138
  var selectionPoint2 = {
116
139
  row: rows.length - 1,
117
140
  column: columns.length - 1
118
- };
141
+ }; // If indexOfCurrentArea is -1, it means the active cell is in a cell header position
142
+
143
+ if (indexOfCurrentArea === -1) {
144
+ selectAllCells({
145
+ ref: spreadsheetRef,
146
+ setCurrentMatcher: setCurrentMatcher,
147
+ setSelectionAreas: setSelectionAreas,
148
+ rows: rows,
149
+ columns: columns,
150
+ activeCellCoordinates: activeCellCoordinates,
151
+ updateActiveCellCoordinates: updateActiveCellCoordinates
152
+ });
153
+ }
154
+
119
155
  selectionAreasClone[indexOfCurrentArea].point1 = selectionPoint1;
120
156
  selectionAreasClone[indexOfCurrentArea].point2 = selectionPoint2;
121
157
  selectionAreasClone[indexOfCurrentArea].areaCreated = false;
@@ -126,12 +162,35 @@ export var handleMultipleKeys = function handleMultipleKeys(_ref) {
126
162
  if (includesControl(keysPressedList) && keysPressedList.includes('Space')) {
127
163
  var _selectionPoint = {
128
164
  row: 0,
129
- column: activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column
165
+ column: (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header' ? 0 : activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column
130
166
  };
131
167
  var _selectionPoint2 = {
132
168
  row: rows.length - 1,
133
- column: activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column
134
- };
169
+ column: (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header' ? 0 : activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column
170
+ }; // If indexOfCurrentArea is -1, it means the active cell is in a cell header position
171
+
172
+ if (indexOfCurrentArea === -1) {
173
+ var tempMatcher = uuidv4();
174
+ var newSelectionArea = {
175
+ point1: _selectionPoint,
176
+ point2: _selectionPoint2,
177
+ areaCreated: false,
178
+ matcher: tempMatcher
179
+ };
180
+
181
+ var coordinatesClone = _objectSpread({}, activeCellCoordinates);
182
+
183
+ updateActiveCellCoordinates({
184
+ coords: coordinatesClone,
185
+ updatedValue: {
186
+ column: (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header' ? 0 : activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column,
187
+ row: (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' ? 0 : activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row
188
+ }
189
+ });
190
+ setCurrentMatcher(tempMatcher);
191
+ return setSelectionAreas([newSelectionArea]);
192
+ }
193
+
135
194
  selectionAreasClone[indexOfCurrentArea].point1 = _selectionPoint;
136
195
  selectionAreasClone[indexOfCurrentArea].point2 = _selectionPoint2;
137
196
  selectionAreasClone[indexOfCurrentArea].areaCreated = false;
@@ -141,16 +200,95 @@ export var handleMultipleKeys = function handleMultipleKeys(_ref) {
141
200
 
142
201
  if (includesShift(keysPressedList) && keysPressedList.includes('Space')) {
143
202
  var _selectionPoint3 = {
144
- row: activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row,
203
+ row: (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' ? 0 : activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row,
145
204
  column: 0
146
205
  };
147
206
  var _selectionPoint4 = {
148
- row: activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row,
207
+ row: (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' ? 0 : activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row,
149
208
  column: columns.length - 1
150
- };
209
+ }; // If indexOfCurrentArea is -1, it means the active cell is in a cell header position
210
+
211
+ if (indexOfCurrentArea === -1) {
212
+ var _tempMatcher = uuidv4();
213
+
214
+ var _newSelectionArea = {
215
+ point1: _selectionPoint3,
216
+ point2: _selectionPoint4,
217
+ areaCreated: false,
218
+ matcher: _tempMatcher
219
+ };
220
+
221
+ var _coordinatesClone = _objectSpread({}, activeCellCoordinates);
222
+
223
+ updateActiveCellCoordinates({
224
+ coords: _coordinatesClone,
225
+ updatedValue: {
226
+ column: (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header' ? 0 : activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column,
227
+ row: (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' ? 0 : activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row
228
+ }
229
+ });
230
+ setCurrentMatcher(_tempMatcher);
231
+ return setSelectionAreas([_newSelectionArea]);
232
+ }
233
+
151
234
  selectionAreasClone[indexOfCurrentArea].point1 = _selectionPoint3;
152
235
  selectionAreasClone[indexOfCurrentArea].point2 = _selectionPoint4;
153
236
  selectionAreasClone[indexOfCurrentArea].areaCreated = false;
154
237
  setSelectionAreas(selectionAreasClone);
238
+ } // CMD + HOME (Selects first cell in first row)
239
+
240
+
241
+ if (includesResourceKey(keysPressedList, usingMac) && keysPressedList.includes('Home')) {
242
+ var scrollElement = spreadsheetRef.current.querySelector(".".concat(blockClass, "__list--container"));
243
+ scrollElement.scrollTop = 0;
244
+
245
+ var _coordinatesClone2 = _objectSpread({}, activeCellCoordinates);
246
+
247
+ removeCellSelections({
248
+ spreadsheetRef: spreadsheetRef
249
+ });
250
+ updateActiveCellCoordinates({
251
+ coords: _coordinatesClone2,
252
+ updatedValue: {
253
+ column: 0,
254
+ row: 0
255
+ }
256
+ });
257
+ } // CMD + END (Selects last cell in last row)
258
+
259
+
260
+ if (includesResourceKey(keysPressedList, usingMac) && keysPressedList.includes('End')) {
261
+ var _scrollElement = spreadsheetRef.current.querySelector(".".concat(blockClass, "__list--container"));
262
+
263
+ _scrollElement.scrollTop = _scrollElement.scrollHeight;
264
+
265
+ var _coordinatesClone3 = _objectSpread({}, activeCellCoordinates);
266
+
267
+ removeCellSelections({
268
+ spreadsheetRef: spreadsheetRef
269
+ });
270
+ var lastCellExists = !!rows[(rows === null || rows === void 0 ? void 0 : rows.length) - 1].cells[(columns === null || columns === void 0 ? void 0 : columns.length) - 1];
271
+
272
+ var updateToLastCell = function updateToLastCell() {
273
+ updateActiveCellCoordinates({
274
+ coords: _coordinatesClone3,
275
+ updatedValue: {
276
+ column: columns.length - 1,
277
+ row: rows.length - 1
278
+ }
279
+ });
280
+ }; // With the spreadsheet supporting virtualized data, it's possible that the last cell
281
+ // has never been rendered yet, if that's the case we scroll to the bottom of the spreadsheet
282
+ // and add a timeout to wait for the last row to render to the DOM before updating the active cell coordinates.
283
+ // If we're able to verify that the last row has been rendered, no timeout is used.
284
+
285
+
286
+ if (lastCellExists) {
287
+ updateToLastCell();
288
+ } else {
289
+ setTimeout(function () {
290
+ updateToLastCell();
291
+ }, 1);
292
+ }
155
293
  }
156
294
  };
@@ -0,0 +1,53 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+
3
+ 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; }
4
+
5
+ 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) { _defineProperty(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; }
6
+
7
+ /**
8
+ * Copyright IBM Corp. 2022, 2022
9
+ *
10
+ * This source code is licensed under the Apache-2.0 license found in the
11
+ * LICENSE file in the root directory of this source tree.
12
+ */
13
+ import { removeCellSelections } from './removeCellSelections';
14
+ import uuidv4 from '../../../global/js/utils/uuidv4';
15
+ export var selectAllCells = function selectAllCells(_ref) {
16
+ var activeCellCoordinates = _ref.activeCellCoordinates,
17
+ columns = _ref.columns,
18
+ setCurrentMatcher = _ref.setCurrentMatcher,
19
+ setSelectionAreas = _ref.setSelectionAreas,
20
+ ref = _ref.ref,
21
+ rows = _ref.rows,
22
+ updateActiveCellCoordinates = _ref.updateActiveCellCoordinates;
23
+ removeCellSelections({
24
+ spreadsheetRef: ref
25
+ });
26
+ var selectionPoint1 = {
27
+ row: 0,
28
+ column: 0
29
+ };
30
+ var selectionPoint2 = {
31
+ row: rows.length - 1,
32
+ column: columns.length - 1
33
+ };
34
+ var tempMatcher = uuidv4();
35
+ var newSelectionArea = {
36
+ point1: selectionPoint1,
37
+ point2: selectionPoint2,
38
+ areaCreated: false,
39
+ matcher: tempMatcher
40
+ };
41
+
42
+ var coordinatesClone = _objectSpread({}, activeCellCoordinates);
43
+
44
+ updateActiveCellCoordinates({
45
+ coords: coordinatesClone,
46
+ updatedValue: {
47
+ column: 0,
48
+ row: 0
49
+ }
50
+ });
51
+ setCurrentMatcher(tempMatcher);
52
+ return setSelectionAreas([newSelectionArea]);
53
+ };
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- import React, { forwardRef } from 'react'; // import PropTypes from 'prop-types';
3
-
2
+ import React, { forwardRef } from 'react';
3
+ import PropTypes from 'prop-types';
4
4
  import { AddSelect } from '../AddSelect';
5
5
  import { getDevtoolsProps } from '../../global/js/utils/devtools';
6
6
  import { pkg } from '../../settings';
@@ -12,5 +12,152 @@ export var MultiAddSelect = /*#__PURE__*/forwardRef(function (props, ref) {
12
12
  }, getDevtoolsProps(componentName)));
13
13
  });
14
14
  MultiAddSelect = pkg.checkComponentEnabled(MultiAddSelect, componentName);
15
- MultiAddSelect.propTypes = {};
15
+ MultiAddSelect.propTypes = {
16
+ /**
17
+ * optional class name
18
+ */
19
+ className: PropTypes.string,
20
+
21
+ /**
22
+ * placeholder for column input filter
23
+ */
24
+ columnInputPlaceholder: PropTypes.string,
25
+
26
+ /**
27
+ * text description that appears under the title
28
+ */
29
+ description: PropTypes.string,
30
+
31
+ /**
32
+ * options to display in the global filter box. values are generated
33
+ * from the id which should correlate with a specific property in an
34
+ * item entry
35
+ */
36
+ globalFilters: PropTypes.arrayOf(PropTypes.shape({
37
+ id: PropTypes.string,
38
+ label: PropTypes.string
39
+ })),
40
+ globalFiltersIconDescription: PropTypes.string,
41
+
42
+ /**
43
+ * placeholder text for the global filter dropdown
44
+ */
45
+ globalFiltersPlaceholderText: PropTypes.string,
46
+
47
+ /**
48
+ * text for the global filter primary button
49
+ */
50
+ globalFiltersPrimaryButtonText: PropTypes.string,
51
+
52
+ /**
53
+ * text for the global filter secondary button
54
+ */
55
+ globalFiltersSecondaryButtonText: PropTypes.string,
56
+
57
+ /**
58
+ * label for global search input
59
+ */
60
+ globalSearchLabel: PropTypes.string,
61
+
62
+ /**
63
+ * placeholder for global search input
64
+ */
65
+ globalSearchPlaceholder: PropTypes.string,
66
+
67
+ /**
68
+ * title that displays in the sidebar / influencer
69
+ */
70
+ influencerTitle: PropTypes.string,
71
+
72
+ /**
73
+ * object that contains the item data. for more information reference the
74
+ * "Structuring items" section in the docs tab
75
+ */
76
+ items: PropTypes.shape({
77
+ modifiers: PropTypes.shape({
78
+ label: PropTypes.string,
79
+ options: PropTypes.array
80
+ }),
81
+ sortBy: PropTypes.array,
82
+ filterBy: PropTypes.array,
83
+ entries: PropTypes.arrayOf(PropTypes.shape({
84
+ avatar: PropTypes.shape({
85
+ alt: PropTypes.string,
86
+ icon: PropTypes.object,
87
+ src: PropTypes.string
88
+ }),
89
+ children: PropTypes.object,
90
+ icon: PropTypes.object,
91
+ id: PropTypes.string.isRequired,
92
+ subtitle: PropTypes.string,
93
+ title: PropTypes.string.isRequired,
94
+ value: PropTypes.string.isRequired
95
+ }))
96
+ }),
97
+
98
+ /**
99
+ * label that display above the list of items
100
+ */
101
+ itemsLabel: PropTypes.string,
102
+
103
+ /**
104
+ * text to display when no results are found from the global search
105
+ */
106
+ noResultsDescription: PropTypes.string,
107
+
108
+ /**
109
+ * title to display when no results are found from the global search
110
+ */
111
+ noResultsTitle: PropTypes.string,
112
+
113
+ /**
114
+ * text body that displays in the sidebar when nothing is selected
115
+ */
116
+ noSelectionDescription: PropTypes.string,
117
+
118
+ /**
119
+ * title that displays in the sidebar when nothing is selected
120
+ */
121
+ noSelectionTitle: PropTypes.string,
122
+
123
+ /**
124
+ * function to call when the close button clicked
125
+ */
126
+ onClose: PropTypes.func,
127
+
128
+ /**
129
+ * text for close button
130
+ */
131
+ onCloseButtonText: PropTypes.string,
132
+
133
+ /**
134
+ * function to call when the submit button is clicked. returns a selection
135
+ */
136
+ onSubmit: PropTypes.func,
137
+
138
+ /**
139
+ * text for the submit button
140
+ */
141
+ onSubmitButtonText: PropTypes.string,
142
+
143
+ /**
144
+ * specifies if the component is open or not
145
+ */
146
+ open: PropTypes.bool,
147
+
148
+ /**
149
+ * description for the remove item icon
150
+ */
151
+ removeIconDescription: PropTypes.string,
152
+
153
+ /**
154
+ * text that displays when displaying filtered items
155
+ */
156
+ searchResultsLabel: PropTypes.string,
157
+
158
+ /**
159
+ * header text
160
+ */
161
+ title: PropTypes.string
162
+ };
16
163
  MultiAddSelect.displayName = componentName;
@@ -499,7 +499,8 @@ var TYPES = {
499
499
  gray: 'Gray',
500
500
  'cool-gray': 'Cool-Gray',
501
501
  'warm-gray': 'Warm-Gray',
502
- 'high-contrast': 'High-Contrast'
502
+ 'high-contrast': 'High-Contrast',
503
+ outline: 'Outline'
503
504
  };
504
505
  var tagTypes = Object.keys(TYPES);
505
506
  export var deprecatedProps = {
@@ -513,6 +514,7 @@ export var deprecatedProps = {
513
514
  */
514
515
  hasBackgroundAlways: deprecateProp(PropTypes.bool, 'Property replaced by `withoutBackground`')
515
516
  };
517
+ PageHeader.tagTypes = tagTypes;
516
518
  PageHeader.propTypes = _objectSpread({
517
519
  /**
518
520
  * Specifies the action bar items which are the final items in the row top of the PageHeader.
@@ -1,15 +1,101 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- import React, { forwardRef } from 'react'; // import PropTypes from 'prop-types';
3
-
2
+ import React, { forwardRef } from 'react';
3
+ import PropTypes from 'prop-types';
4
4
  import { AddSelect } from '../AddSelect';
5
5
  import { getDevtoolsProps } from '../../global/js/utils/devtools';
6
6
  import { pkg } from '../../settings';
7
+ import { prepareProps } from '../../global/js/utils/props-helper';
7
8
  var componentName = 'SingleAddSelect';
8
9
  export var SingleAddSelect = /*#__PURE__*/forwardRef(function (props, ref) {
9
- return /*#__PURE__*/React.createElement(AddSelect, _extends({}, props, {
10
+ // remove multi add select specific props
11
+ var validProps = prepareProps(props, ['columnInputPlaceholder', 'globalFilters', 'globalFiltersIconDescription', 'globalFiltersPlaceholderText', 'globalFiltersPrimaryButtonText', 'globalFiltersSecondaryButtonText', 'influencerTitle', 'multi', 'noSelectionDescription', 'noSelectionTitle', 'removeIconDescription']);
12
+ return /*#__PURE__*/React.createElement(AddSelect, _extends({}, validProps, {
10
13
  ref: ref
11
14
  }, getDevtoolsProps(componentName)));
12
15
  });
13
16
  SingleAddSelect = pkg.checkComponentEnabled(SingleAddSelect, componentName);
14
- SingleAddSelect.propTypes = {};
17
+ SingleAddSelect.propTypes = {
18
+ /**
19
+ * optional class name
20
+ */
21
+ className: PropTypes.string,
22
+
23
+ /**
24
+ * text description that appears under the title
25
+ */
26
+ description: PropTypes.string,
27
+
28
+ /**
29
+ * label for global search input
30
+ */
31
+ globalSearchLabel: PropTypes.string,
32
+
33
+ /**
34
+ * placeholder for global search input
35
+ */
36
+ globalSearchPlaceholder: PropTypes.string,
37
+
38
+ /**
39
+ * object that contains the item data. for more information reference the
40
+ * "Structuring items" section in the docs tab
41
+ */
42
+ items: PropTypes.shape({
43
+ entries: PropTypes.arrayOf(PropTypes.shape({
44
+ children: PropTypes.object,
45
+ id: PropTypes.string.isRequired,
46
+ title: PropTypes.string.isRequired,
47
+ value: PropTypes.string.isRequired
48
+ }))
49
+ }),
50
+
51
+ /**
52
+ * label that display above the list of items
53
+ */
54
+ itemsLabel: PropTypes.string,
55
+
56
+ /**
57
+ * text to display when no results are found from the global search
58
+ */
59
+ noResultsDescription: PropTypes.string,
60
+
61
+ /**
62
+ * title to display when no results are found from the global search
63
+ */
64
+ noResultsTitle: PropTypes.string,
65
+
66
+ /**
67
+ * function to call when the close button clicked
68
+ */
69
+ onClose: PropTypes.func,
70
+
71
+ /**
72
+ * text for close button
73
+ */
74
+ onCloseButtonText: PropTypes.string,
75
+
76
+ /**
77
+ * function to call when the submit button is clicked. returns a selection
78
+ */
79
+ onSubmit: PropTypes.func,
80
+
81
+ /**
82
+ * text for the submit button
83
+ */
84
+ onSubmitButtonText: PropTypes.string,
85
+
86
+ /**
87
+ * specifies if the component is open or not
88
+ */
89
+ open: PropTypes.bool,
90
+
91
+ /**
92
+ * text that displays when displaying filtered items
93
+ */
94
+ searchResultsLabel: PropTypes.string,
95
+
96
+ /**
97
+ * header text
98
+ */
99
+ title: PropTypes.string
100
+ };
15
101
  SingleAddSelect.displayName = componentName;