@carbon/ibm-products 1.10.0 → 1.11.2

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 (102) hide show
  1. package/css/index-full-carbon.css +249 -218
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +5 -5
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +21 -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 +102 -212
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +4 -4
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +219 -212
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +5 -5
  16. package/css/index.min.css.map +1 -1
  17. package/es/components/AddSelect/AddSelect.js +88 -87
  18. package/es/components/AddSelect/AddSelectColumn.js +193 -19
  19. package/es/components/AddSelect/AddSelectList.js +5 -5
  20. package/es/components/AddSelect/AddSelectSidebar.js +3 -15
  21. package/es/components/AddSelect/add-select-utils.js +64 -0
  22. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
  23. package/es/components/ButtonMenu/ButtonMenu.js +11 -3
  24. package/es/components/CreateFullPage/CreateFullPageStep.js +4 -4
  25. package/es/components/CreateTearsheet/CreateTearsheetStep.js +4 -4
  26. package/es/components/DataSpreadsheet/DataSpreadsheet.js +255 -140
  27. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +37 -38
  28. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +55 -6
  29. package/es/components/DataSpreadsheet/hooks/useMoveActiveCell.js +27 -0
  30. package/es/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +28 -0
  31. package/es/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +41 -0
  32. package/es/components/DataSpreadsheet/{checkActiveHeaderCell.js → utils/checkActiveHeaderCell.js} +1 -1
  33. package/es/components/DataSpreadsheet/{createActiveCellFn.js → utils/createActiveCellFn.js} +20 -9
  34. package/es/components/DataSpreadsheet/{createCellSelectionArea.js → utils/createCellSelectionArea.js} +8 -4
  35. package/es/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
  36. package/es/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
  37. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +46 -0
  38. package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +82 -0
  39. package/es/components/DataSpreadsheet/utils/removeCellSelections.js +30 -0
  40. package/es/components/InlineEdit/InlineEdit.js +49 -8
  41. package/es/components/OptionsTile/OptionsTile.js +20 -20
  42. package/es/components/OptionsTile/index.js +1 -1
  43. package/es/components/PageHeader/PageHeader.js +35 -32
  44. package/es/components/PageHeader/PageHeaderTitle.js +2 -1
  45. package/es/components/PageHeader/PageHeaderUtils.js +21 -22
  46. package/es/components/index.js +0 -1
  47. package/es/global/js/package-settings.js +1 -2
  48. package/lib/components/AddSelect/AddSelect.js +91 -87
  49. package/lib/components/AddSelect/AddSelectColumn.js +193 -16
  50. package/lib/components/AddSelect/AddSelectList.js +5 -5
  51. package/lib/components/AddSelect/AddSelectSidebar.js +9 -15
  52. package/lib/components/AddSelect/add-select-utils.js +78 -0
  53. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
  54. package/lib/components/ButtonMenu/ButtonMenu.js +11 -3
  55. package/lib/components/CreateFullPage/CreateFullPageStep.js +4 -4
  56. package/lib/components/CreateTearsheet/CreateTearsheetStep.js +4 -4
  57. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +263 -142
  58. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +39 -36
  59. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +62 -8
  60. package/lib/components/DataSpreadsheet/hooks/useMoveActiveCell.js +37 -0
  61. package/lib/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +39 -0
  62. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +52 -0
  63. package/lib/components/DataSpreadsheet/{checkActiveHeaderCell.js → utils/checkActiveHeaderCell.js} +1 -1
  64. package/lib/components/DataSpreadsheet/{createActiveCellFn.js → utils/createActiveCellFn.js} +20 -9
  65. package/lib/components/DataSpreadsheet/{createCellSelectionArea.js → utils/createCellSelectionArea.js} +8 -4
  66. package/lib/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
  67. package/lib/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
  68. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +59 -0
  69. package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +92 -0
  70. package/lib/components/DataSpreadsheet/utils/removeCellSelections.js +41 -0
  71. package/lib/components/InlineEdit/InlineEdit.js +52 -10
  72. package/lib/components/OptionsTile/OptionsTile.js +19 -19
  73. package/lib/components/PageHeader/PageHeader.js +35 -32
  74. package/lib/components/PageHeader/PageHeaderTitle.js +2 -1
  75. package/lib/components/PageHeader/PageHeaderUtils.js +21 -22
  76. package/lib/components/index.js +0 -8
  77. package/lib/global/js/package-settings.js +1 -2
  78. package/package.json +13 -13
  79. package/scss/components/AddSelect/_add-select.scss +20 -0
  80. package/scss/components/BreadcrumbWithOverflow/_breadcrumb-with-overflow.scss +7 -3
  81. package/scss/components/CreateSidePanel/_create-side-panel.scss +1 -1
  82. package/scss/components/CreateSidePanel/_storybook-styles.scss +1 -1
  83. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +14 -1
  84. package/scss/components/EditSidePanel/_edit-side-panel.scss +9 -0
  85. package/scss/components/EditSidePanel/_storybook-styles.scss +1 -1
  86. package/scss/components/InlineEdit/_inline-edit.scss +35 -37
  87. package/scss/components/ModifiedTabs/_modified-tabs.scss +5 -0
  88. package/scss/components/NotificationsPanel/_notifications-panel.scss +7 -3
  89. package/scss/components/OptionsTile/_index.scss +1 -1
  90. package/scss/components/OptionsTile/_options-tile.scss +17 -17
  91. package/scss/components/OptionsTile/_storybook-styles.scss +4 -4
  92. package/scss/components/PageHeader/_page-header.scss +3 -2
  93. package/scss/components/SidePanel/_side-panel.scss +8 -8
  94. package/scss/components/Tearsheet/_tearsheet.scss +4 -0
  95. package/scss/components/_index.scss +0 -1
  96. package/es/components/LoadingBar/LoadingBar.js +0 -156
  97. package/es/components/LoadingBar/index.js +0 -7
  98. package/lib/components/LoadingBar/LoadingBar.js +0 -170
  99. package/lib/components/LoadingBar/index.js +0 -13
  100. package/scss/components/LoadingBar/_index.scss +0 -8
  101. package/scss/components/LoadingBar/_loading-bar.scss +0 -224
  102. package/scss/components/LoadingBar/_storybook-styles.scss +0 -14
@@ -29,9 +29,13 @@ var _deepCloneObject = require("../../global/js/utils/deepCloneObject");
29
29
 
30
30
  var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
31
31
 
32
- var _createCellSelectionArea = require("./createCellSelectionArea");
32
+ var _removeCellSelections = require("./utils/removeCellSelections");
33
33
 
34
- var _checkActiveHeaderCell = require("./checkActiveHeaderCell");
34
+ var _createCellSelectionArea = require("./utils/createCellSelectionArea");
35
+
36
+ var _checkActiveHeaderCell = require("./utils/checkActiveHeaderCell");
37
+
38
+ var _handleHeaderCellSelection = require("./utils/handleHeaderCellSelection");
35
39
 
36
40
  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); }
37
41
 
@@ -45,7 +49,8 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
45
49
  */
46
50
  var blockClass = "".concat(_settings.pkg.prefix, "--data-spreadsheet");
47
51
  var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
48
- var activeCellCoordinates = _ref.activeCellCoordinates,
52
+ var columns = _ref.columns,
53
+ activeCellCoordinates = _ref.activeCellCoordinates,
49
54
  defaultColumn = _ref.defaultColumn,
50
55
  getTableBodyProps = _ref.getTableBodyProps,
51
56
  id = _ref.id,
@@ -61,8 +66,7 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
61
66
  setClickAndHoldActive = _ref.setClickAndHoldActive,
62
67
  currentMatcher = _ref.currentMatcher,
63
68
  setCurrentMatcher = _ref.setCurrentMatcher;
64
- var currentMatcherRef = ref; // Create cell selection areas based on selectionAreas array
65
-
69
+ // Create cell selection areas based on selectionAreas array
66
70
  (0, _react.useEffect)(function () {
67
71
  if (selectionAreas && selectionAreas.length) {
68
72
  selectionAreas.map(function (area) {
@@ -82,6 +86,7 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
82
86
  (0, _createCellSelectionArea.createCellSelectionArea)({
83
87
  area: area,
84
88
  blockClass: blockClass,
89
+ defaultColumn: defaultColumn,
85
90
  selectionAreas: selectionAreas,
86
91
  setSelectionAreas: setSelectionAreas
87
92
  });
@@ -90,7 +95,7 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
90
95
  return;
91
96
  });
92
97
  }
93
- }, [selectionAreas, setSelectionAreas]); // Mouse up
98
+ }, [selectionAreas, setSelectionAreas, defaultColumn]); // Mouse up
94
99
 
95
100
  (0, _react.useEffect)(function () {
96
101
  var handleMouseUp = function handleMouseUp(event) {
@@ -116,26 +121,6 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
116
121
  selectionAreaClone[indexOfItemToUpdate].areaCreated = false;
117
122
  return selectionAreaClone;
118
123
  });
119
- } else {
120
- var selectionAreaClone = (0, _deepCloneObject.deepCloneObject)(selectionAreas);
121
- var indexOfItemToUpdate = selectionAreaClone.findIndex(function (item) {
122
- return item.matcher === currentMatcher;
123
- });
124
-
125
- if (indexOfItemToUpdate === -1) {
126
- return;
127
- }
128
-
129
- var notYetCreatedSelections = selectionAreaClone.filter(function (item) {
130
- return !item.areaCreated && item.matcher === currentMatcher;
131
- });
132
- var previouslyCreatedSelectionAreas = selectionAreaClone.filter(function (item) {
133
- return item.point2 && item.areaCreated;
134
- }); // We want to ensure that there is only ever one item in selectionAreas
135
- // that has not been created yet. This item's point1 values will always
136
- // be equal to the activeCellCoordinates
137
-
138
- setSelectionAreas([].concat((0, _toConsumableArray2.default)(notYetCreatedSelections), (0, _toConsumableArray2.default)(previouslyCreatedSelectionAreas)));
139
124
  }
140
125
  };
141
126
 
@@ -166,7 +151,8 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
166
151
  row: cell.row.index,
167
152
  column: columnIndex
168
153
  };
169
- var tempMatcher = (0, _uuidv.default)(); // prevent multiple selections unless cmd key is held
154
+ var tempMatcher = (0, _uuidv.default)();
155
+ setClickAndHoldActive(true); // prevent multiple selections unless cmd key is held
170
156
  // meaning that selectionAreas should only have one item by default
171
157
 
172
158
  if (isHoldingCommandKey) {
@@ -202,9 +188,8 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
202
188
  } else {
203
189
  setActiveCellCoordinates(activeCoordinates); // remove all previous cell selections
204
190
 
205
- var cellSelections = spreadsheetBodyRef.current.querySelectorAll(".".concat(blockClass, "__selection-area--element"));
206
- (0, _toConsumableArray2.default)(cellSelections).forEach(function (element) {
207
- return element.remove();
191
+ (0, _removeCellSelections.removeCellSelections)({
192
+ spreadsheetRef: ref
208
193
  });
209
194
  setSelectionAreas([{
210
195
  point1: activeCoordinates,
@@ -212,11 +197,8 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
212
197
  }]);
213
198
  setCurrentMatcher(tempMatcher);
214
199
  }
215
-
216
- currentMatcherRef.current = tempMatcher;
217
- setClickAndHoldActive(true);
218
200
  };
219
- }, [currentMatcherRef, currentMatcher, activeCellCoordinates, selectionAreas, setActiveCellCoordinates, setSelectionAreas, setContainerHasFocus, setClickAndHoldActive, setCurrentMatcher]);
201
+ }, [currentMatcher, activeCellCoordinates, selectionAreas, setActiveCellCoordinates, setSelectionAreas, setContainerHasFocus, setClickAndHoldActive, setCurrentMatcher, ref]);
220
202
  var handleBodyCellHover = (0, _react.useCallback)(function (cell, columnIndex) {
221
203
  return function () {
222
204
  if (clickAndHoldActive) {
@@ -247,7 +229,22 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
247
229
  });
248
230
  }
249
231
  };
250
- }, [clickAndHoldActive, currentMatcher, setSelectionAreas]); // Renders each cell in the spreadsheet body
232
+ }, [clickAndHoldActive, currentMatcher, setSelectionAreas]);
233
+ var handleRowHeaderClick = (0, _react.useCallback)(function (index) {
234
+ return function () {
235
+ (0, _handleHeaderCellSelection.handleHeaderCellSelection)({
236
+ type: 'row',
237
+ activeCellCoordinates: activeCellCoordinates,
238
+ rows: rows,
239
+ columns: columns,
240
+ setActiveCellCoordinates: setActiveCellCoordinates,
241
+ setCurrentMatcher: setCurrentMatcher,
242
+ setSelectionAreas: setSelectionAreas,
243
+ spreadsheetRef: ref,
244
+ index: index
245
+ });
246
+ };
247
+ }, [columns, ref, setSelectionAreas, setCurrentMatcher, setActiveCellCoordinates, activeCellCoordinates, rows]); // Renders each row/cell in the spreadsheet body
251
248
 
252
249
  var RenderRow = (0, _react.useCallback)(function (_ref2) {
253
250
  var index = _ref2.index,
@@ -264,6 +261,7 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
264
261
  "data-row-index": index,
265
262
  "data-column-index": "header",
266
263
  type: "button",
264
+ onClick: handleRowHeaderClick(index),
267
265
  className: (0, _classnames.default)("".concat(blockClass, "__td"), "".concat(blockClass, "__td-th"), "".concat(blockClass, "--interactive-cell-element"), (0, _defineProperty2.default)({}, "".concat(blockClass, "__td-th--active-header"), (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === index || (0, _checkActiveHeaderCell.checkActiveHeaderCell)(index, selectionAreas, 'row'))),
268
266
  style: {
269
267
  width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth
@@ -282,7 +280,7 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
282
280
  type: "button"
283
281
  }), cell.render('Cell'));
284
282
  }));
285
- }, [prepareRow, rows, defaultColumn.rowHeaderWidth, handleBodyCellClick, handleBodyCellHover, activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row, selectionAreas]);
283
+ }, [prepareRow, rows, defaultColumn.rowHeaderWidth, activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row, selectionAreas, handleRowHeaderClick, handleBodyCellClick, handleBodyCellHover]);
286
284
  var spreadsheetBodyRef = (0, _react.useRef)();
287
285
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
288
286
  ref: spreadsheetBodyRef,
@@ -310,6 +308,11 @@ DataSpreadsheetBody.propTypes = {
310
308
  */
311
309
  clickAndHoldActive: _propTypes.default.bool,
312
310
 
311
+ /**
312
+ * All of the spreadsheet columns
313
+ */
314
+ columns: _propTypes.default.array,
315
+
313
316
  /**
314
317
  * This represents the id of the current cell selection area
315
318
  */
@@ -2,6 +2,8 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
5
7
  Object.defineProperty(exports, "__esModule", {
6
8
  value: true
7
9
  });
@@ -11,7 +13,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
13
 
12
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
15
 
14
- var _react = _interopRequireDefault(require("react"));
16
+ var _react = _interopRequireWildcard(require("react"));
15
17
 
16
18
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
19
 
@@ -19,7 +21,13 @@ var _classnames = _interopRequireDefault(require("classnames"));
19
21
 
20
22
  var _settings = require("../../settings");
21
23
 
22
- var _checkActiveHeaderCell = require("./checkActiveHeaderCell");
24
+ var _checkActiveHeaderCell = require("./utils/checkActiveHeaderCell");
25
+
26
+ var _handleHeaderCellSelection = require("./utils/handleHeaderCellSelection");
27
+
28
+ 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); }
29
+
30
+ 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; }
23
31
 
24
32
  /**
25
33
  * Copyright IBM Corp. 2022, 2022
@@ -28,12 +36,33 @@ var _checkActiveHeaderCell = require("./checkActiveHeaderCell");
28
36
  * LICENSE file in the root directory of this source tree.
29
37
  */
30
38
  var blockClass = "".concat(_settings.pkg.prefix, "--data-spreadsheet");
31
-
32
- var DataSpreadsheetHeader = function DataSpreadsheetHeader(_ref) {
39
+ var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
33
40
  var activeCellCoordinates = _ref.activeCellCoordinates,
41
+ columns = _ref.columns,
34
42
  defaultColumn = _ref.defaultColumn,
35
43
  headerGroups = _ref.headerGroups,
36
- selectionAreas = _ref.selectionAreas;
44
+ selectionAreas = _ref.selectionAreas,
45
+ setActiveCellCoordinates = _ref.setActiveCellCoordinates,
46
+ setCurrentMatcher = _ref.setCurrentMatcher,
47
+ setSelectionAreas = _ref.setSelectionAreas,
48
+ rows = _ref.rows;
49
+
50
+ var handleColumnHeaderClick = function handleColumnHeaderClick(index) {
51
+ return function () {
52
+ (0, _handleHeaderCellSelection.handleHeaderCellSelection)({
53
+ type: 'column',
54
+ activeCellCoordinates: activeCellCoordinates,
55
+ rows: rows,
56
+ columns: columns,
57
+ setActiveCellCoordinates: setActiveCellCoordinates,
58
+ setCurrentMatcher: setCurrentMatcher,
59
+ setSelectionAreas: setSelectionAreas,
60
+ spreadsheetRef: ref,
61
+ index: index
62
+ });
63
+ };
64
+ };
65
+
37
66
  return /*#__PURE__*/_react.default.createElement("div", {
38
67
  className: (0, _classnames.default)("".concat(blockClass, "__header--container"))
39
68
  }, headerGroups.map(function (headerGroup, index) {
@@ -57,6 +86,7 @@ var DataSpreadsheetHeader = function DataSpreadsheetHeader(_ref) {
57
86
  "data-row-index": "header",
58
87
  "data-column-index": index,
59
88
  tabIndex: -1,
89
+ onClick: handleColumnHeaderClick(index),
60
90
  style: {
61
91
  height: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeight
62
92
  }
@@ -66,8 +96,7 @@ var DataSpreadsheetHeader = function DataSpreadsheetHeader(_ref) {
66
96
  }), column.render('Header'));
67
97
  }));
68
98
  }));
69
- };
70
-
99
+ });
71
100
  exports.DataSpreadsheetHeader = DataSpreadsheetHeader;
72
101
  DataSpreadsheetHeader.propTypes = {
73
102
  /**
@@ -78,6 +107,11 @@ DataSpreadsheetHeader.propTypes = {
78
107
  column: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])
79
108
  }),
80
109
 
110
+ /**
111
+ * All of the spreadsheet columns
112
+ */
113
+ columns: _propTypes.default.array,
114
+
81
115
  /**
82
116
  * Default spreadsheet sizing values
83
117
  */
@@ -92,8 +126,28 @@ DataSpreadsheetHeader.propTypes = {
92
126
  */
93
127
  headerGroups: _propTypes.default.arrayOf(_propTypes.default.object),
94
128
 
129
+ /**
130
+ * All of the spreadsheet row data
131
+ */
132
+ rows: _propTypes.default.arrayOf(_propTypes.default.object),
133
+
95
134
  /**
96
135
  * All of the cell selection area items
97
136
  */
98
- selectionAreas: _propTypes.default.arrayOf(_propTypes.default.object)
137
+ selectionAreas: _propTypes.default.arrayOf(_propTypes.default.object),
138
+
139
+ /**
140
+ * Setter fn for activeCellCoordinates value
141
+ */
142
+ setActiveCellCoordinates: _propTypes.default.func,
143
+
144
+ /**
145
+ * Setter fn for currentMatcher value
146
+ */
147
+ setCurrentMatcher: _propTypes.default.func,
148
+
149
+ /**
150
+ * Setter fn for selectionAreas value
151
+ */
152
+ setSelectionAreas: _propTypes.default.func
99
153
  };
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useMoveActiveCell = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ /**
11
+ * Copyright IBM Corp. 2022, 2022
12
+ *
13
+ * This source code is licensed under the Apache-2.0 license found in the
14
+ * LICENSE file in the root directory of this source tree.
15
+ */
16
+ // Moves the placement of the active cell
17
+ var useMoveActiveCell = function useMoveActiveCell(_ref) {
18
+ var spreadsheetRef = _ref.spreadsheetRef,
19
+ activeCellCoordinates = _ref.activeCellCoordinates,
20
+ containerHasFocus = _ref.containerHasFocus,
21
+ createActiveCell = _ref.createActiveCell;
22
+ (0, _react.useEffect)(function () {
23
+ 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, "\"]"));
24
+ var shouldPlaceActiveCellInHeader = (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' && true;
25
+ var selectAllElement = spreadsheetRef === null || spreadsheetRef === void 0 ? void 0 : spreadsheetRef.current.querySelector("[data-row-index=\"header\"][data-column-index=\"header\"]");
26
+
27
+ if (containerHasFocus) {
28
+ createActiveCell({
29
+ placementElement: activeCellCoordinates ? activeCellPlacementElement : selectAllElement,
30
+ coords: activeCellCoordinates,
31
+ addToHeader: shouldPlaceActiveCellInHeader
32
+ });
33
+ }
34
+ }, [activeCellCoordinates, spreadsheetRef, createActiveCell, containerHasFocus]);
35
+ };
36
+
37
+ exports.useMoveActiveCell = useMoveActiveCell;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useResetSpreadsheetFocus = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ var _settings = require("../../../settings");
11
+
12
+ /**
13
+ * Copyright IBM Corp. 2022, 2022
14
+ *
15
+ * This source code is licensed under the Apache-2.0 license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ */
18
+ var useResetSpreadsheetFocus = function useResetSpreadsheetFocus(_ref) {
19
+ var activeKeys = _ref.activeKeys,
20
+ _ref$blockClass = _ref.blockClass,
21
+ blockClass = _ref$blockClass === void 0 ? "".concat(_settings.pkg.prefix, "--data-spreadsheet") : _ref$blockClass,
22
+ focusedElement = _ref.focusedElement,
23
+ removeActiveCell = _ref.removeActiveCell,
24
+ setContainerHasFocus = _ref.setContainerHasFocus;
25
+ // Reset everything when spreadsheet loses focus
26
+ (0, _react.useEffect)(function () {
27
+ if (!focusedElement.classList.contains("".concat(blockClass, "--interactive-cell-element"))) {
28
+ setContainerHasFocus(false);
29
+ removeActiveCell();
30
+ activeKeys.current = [];
31
+ }
32
+
33
+ if (focusedElement.classList.contains(blockClass) || focusedElement.classList.contains("".concat(blockClass, "--interactive-cell-element"))) {
34
+ setContainerHasFocus(true);
35
+ }
36
+ }, [focusedElement, removeActiveCell, activeKeys, blockClass, setContainerHasFocus]);
37
+ };
38
+
39
+ exports.useResetSpreadsheetFocus = useResetSpreadsheetFocus;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useSpreadsheetOutsideClick = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ var _settings = require("../../../settings");
11
+
12
+ /**
13
+ * Copyright IBM Corp. 2022, 2022
14
+ *
15
+ * This source code is licensed under the Apache-2.0 license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ */
18
+ // Click outside useEffect for spreadsheet
19
+ var useSpreadsheetOutsideClick = function useSpreadsheetOutsideClick(_ref) {
20
+ var spreadsheetRef = _ref.spreadsheetRef,
21
+ _ref$blockClass = _ref.blockClass,
22
+ blockClass = _ref$blockClass === void 0 ? "".concat(_settings.pkg.prefix, "--data-spreadsheet") : _ref$blockClass,
23
+ setActiveCellCoordinates = _ref.setActiveCellCoordinates,
24
+ setSelectionAreas = _ref.setSelectionAreas,
25
+ removeActiveCell = _ref.removeActiveCell,
26
+ removeCellSelections = _ref.removeCellSelections,
27
+ setContainerHasFocus = _ref.setContainerHasFocus,
28
+ activeKeys = _ref.activeKeys,
29
+ removeCellEditor = _ref.removeCellEditor;
30
+ (0, _react.useEffect)(function () {
31
+ var handleOutsideClick = function handleOutsideClick(event) {
32
+ if (!spreadsheetRef.current || spreadsheetRef.current.contains(event.target) || event.target.classList.contains("".concat(blockClass, "__active-cell--highlight")) || event.target.classList.contains("".concat(blockClass, "--interactive-cell-element"))) {
33
+ return;
34
+ }
35
+
36
+ setActiveCellCoordinates(null);
37
+ setSelectionAreas([]);
38
+ removeActiveCell();
39
+ removeCellSelections();
40
+ setContainerHasFocus(false);
41
+ removeCellEditor();
42
+ activeKeys.current = [];
43
+ };
44
+
45
+ document.addEventListener('click', handleOutsideClick);
46
+ return function () {
47
+ document.removeEventListener('click', handleOutsideClick);
48
+ };
49
+ }, [spreadsheetRef, removeActiveCell, removeCellSelections, activeKeys, blockClass, setActiveCellCoordinates, setContainerHasFocus, setSelectionAreas, removeCellEditor]);
50
+ };
51
+
52
+ exports.useSpreadsheetOutsideClick = useSpreadsheetOutsideClick;
@@ -9,7 +9,7 @@ exports.checkActiveHeaderCell = void 0;
9
9
 
10
10
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
11
 
12
- var _deepCloneObject = require("../../global/js/utils/deepCloneObject");
12
+ var _deepCloneObject = require("../../../global/js/utils/deepCloneObject");
13
13
 
14
14
  /**
15
15
  * Copyright IBM Corp. 2022, 2022
@@ -7,7 +7,7 @@ exports.createActiveCellFn = void 0;
7
7
 
8
8
  var _layout = require("@carbon/layout");
9
9
 
10
- var _settings = require("../../settings");
10
+ var _settings = require("../../../settings");
11
11
 
12
12
  /**
13
13
  * Copyright IBM Corp. 2022, 2022
@@ -25,7 +25,9 @@ var createActiveCellFn = function createActiveCellFn(_ref) {
25
25
  blockClass = _ref$blockClass === void 0 ? "".concat(_settings.pkg.prefix, "--data-spreadsheet") : _ref$blockClass,
26
26
  onActiveCellChange = _ref.onActiveCellChange,
27
27
  activeCellValue = _ref.activeCellValue,
28
- handleActiveCellMouseEnter = _ref.handleActiveCellMouseEnter;
28
+ activeCellRef = _ref.activeCellRef,
29
+ cellEditorRef = _ref.cellEditorRef,
30
+ defaultColumn = _ref.defaultColumn;
29
31
 
30
32
  if (!coords) {
31
33
  return;
@@ -33,23 +35,32 @@ var createActiveCellFn = function createActiveCellFn(_ref) {
33
35
  // to `.${blockClass}__header--container`, otherwise it should be appended to `.${blockClass}__listContainer` firstElementChild
34
36
 
35
37
 
38
+ var point1Element = document.querySelector("[data-row-index=\"".concat(coords.row, "\"][data-column-index=\"").concat(coords.column, "\"]")) || document.querySelector(".".concat(blockClass, "__body--td")); // if we can't find the point1 element (this can happen in the case where a virtualized row is not present anymore in the DOM), we get the default height/width of the first body cell we find
39
+
40
+ var selectionAreaCellWidth = point1Element.offsetWidth;
41
+ var selectionAreaCellHeight = point1Element.offsetHeight;
36
42
  var activeElementContainer = addToHeader ? contextRef === null || contextRef === void 0 ? void 0 : contextRef.current.querySelector(".".concat(blockClass, "__header--container")) : contextRef === null || contextRef === void 0 ? void 0 : contextRef.current.querySelector(".".concat(blockClass, "__list--container")).firstElementChild;
37
43
  var relativePosition = {
38
- top: placementElement.getBoundingClientRect().top - activeElementContainer.getBoundingClientRect().top,
39
- left: placementElement.getBoundingClientRect().left - activeElementContainer.getBoundingClientRect().left
44
+ top: placementElement ? placementElement.getBoundingClientRect().top - activeElementContainer.getBoundingClientRect().top : coords.row === 0 ? 0 : selectionAreaCellHeight * coords.row,
45
+ // calculate top value here if virtualized row is not in DOM
46
+ left: placementElement ? placementElement.getBoundingClientRect().left - activeElementContainer.getBoundingClientRect().left : coords.column === 0 ? 0 + (defaultColumn.rowHeaderWidth - 4) : selectionAreaCellWidth * coords.column + (defaultColumn.rowHeaderWidth - 4) // calculate left value here if virtualized row is not in DOM, accounting for row header cell width (including borders)
47
+
40
48
  };
41
- var activeCellButton = (contextRef === null || contextRef === void 0 ? void 0 : contextRef.current.querySelector(".".concat(blockClass, "__active-cell--highlight"))) || document.createElement('button');
42
- activeCellButton.classList.add("".concat(blockClass, "__active-cell--highlight"), "".concat(blockClass, "--interactive-cell-element"));
43
- activeCellButton.addEventListener('mouseenter', handleActiveCellMouseEnter);
44
- activeCellButton.style.width = (0, _layout.px)(placementElement === null || placementElement === void 0 ? void 0 : placementElement.offsetWidth);
45
- activeCellButton.style.height = (0, _layout.px)(placementElement === null || placementElement === void 0 ? void 0 : placementElement.offsetHeight);
49
+ var activeCellButton = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current;
50
+ activeCellButton.style.width = (0, _layout.px)(placementElement ? placementElement === null || placementElement === void 0 ? void 0 : placementElement.offsetWidth : selectionAreaCellWidth);
51
+ activeCellButton.style.height = (0, _layout.px)(placementElement ? placementElement === null || placementElement === void 0 ? void 0 : placementElement.offsetHeight : selectionAreaCellHeight);
46
52
  activeCellButton.style.left = (0, _layout.px)(relativePosition.left);
47
53
  activeCellButton.style.top = (0, _layout.px)(relativePosition.top);
54
+ activeCellButton.style.display = 'block';
48
55
  activeCellButton.setAttribute('data-active-row-index', typeof (coords === null || coords === void 0 ? void 0 : coords.row) === 'number' ? coords.row : 'header');
49
56
  activeCellButton.setAttribute('data-active-column-index', typeof (coords === null || coords === void 0 ? void 0 : coords.column) === 'number' ? coords.column : 'header');
50
57
  activeElementContainer.appendChild(activeCellButton);
51
58
  activeCellButton.focus();
52
59
 
60
+ if (!addToHeader) {
61
+ activeElementContainer.appendChild(cellEditorRef.current);
62
+ }
63
+
53
64
  if (typeof (coords === null || coords === void 0 ? void 0 : coords.column) === 'number' && typeof (coords === null || coords === void 0 ? void 0 : coords.row) === 'number') {
54
65
  onActiveCellChange === null || onActiveCellChange === void 0 ? void 0 : onActiveCellChange(activeCellValue);
55
66
  }
@@ -7,7 +7,7 @@ exports.createCellSelectionArea = void 0;
7
7
 
8
8
  var _layout = require("@carbon/layout");
9
9
 
10
- var _deepCloneObject = require("../../global/js/utils/deepCloneObject");
10
+ var _deepCloneObject = require("../../../global/js/utils/deepCloneObject");
11
11
 
12
12
  /**
13
13
  * Copyright IBM Corp. 2022, 2022
@@ -18,13 +18,15 @@ var _deepCloneObject = require("../../global/js/utils/deepCloneObject");
18
18
  var createCellSelectionArea = function createCellSelectionArea(_ref) {
19
19
  var area = _ref.area,
20
20
  blockClass = _ref.blockClass,
21
+ defaultColumn = _ref.defaultColumn,
21
22
  selectionAreas = _ref.selectionAreas,
22
23
  setSelectionAreas = _ref.setSelectionAreas;
23
24
  var greatestRow = Math.max(area.point1.row, area.point2.row);
24
25
  var greatestColumn = Math.max(area.point1.column, area.point2.column);
25
26
  var lowestRowIndex = Math.min(area.point1.row, area.point2.row);
26
27
  var lowestColumnIndex = Math.min(area.point1.column, area.point2.column);
27
- var point1Element = document.querySelector("[data-row-index=\"".concat(area.point1.row, "\"][data-column-index=\"").concat(area.point1.column, "\"]"));
28
+ var point1Element = document.querySelector("[data-row-index=\"".concat(area.point1.row, "\"][data-column-index=\"").concat(area.point1.column, "\"]")) || document.querySelector(".".concat(blockClass, "__body--td")); // if we can't find the point1 element (this can happen in the case where a virtualized row is not present anymore in the DOM), we get the default height/width of the first body cell we find
29
+
28
30
  var selectionAreaCellWidth = point1Element.offsetWidth;
29
31
  var selectionAreaCellHeight = point1Element.offsetHeight;
30
32
  var selectionAreaTotalWidth = selectionAreaCellWidth * (greatestColumn - lowestColumnIndex + 1);
@@ -32,8 +34,10 @@ var createCellSelectionArea = function createCellSelectionArea(_ref) {
32
34
  var bodyContainer = document.querySelector(".".concat(blockClass, "__list--container")).firstElementChild;
33
35
  var placementElement = bodyContainer.querySelector("[data-row-index=\"".concat(lowestRowIndex, "\"][data-column-index=\"").concat(lowestColumnIndex, "\"]"));
34
36
  var relativePosition = {
35
- top: placementElement.getBoundingClientRect().top - bodyContainer.getBoundingClientRect().top,
36
- left: placementElement.getBoundingClientRect().left - bodyContainer.getBoundingClientRect().left
37
+ top: placementElement ? placementElement.getBoundingClientRect().top - bodyContainer.getBoundingClientRect().top : lowestRowIndex === 0 ? 0 : selectionAreaCellHeight * lowestRowIndex,
38
+ // calculate top value here if virtualized row is not in DOM
39
+ left: placementElement ? placementElement.getBoundingClientRect().left - bodyContainer.getBoundingClientRect().left : lowestColumnIndex === 0 ? 0 + (defaultColumn.rowHeaderWidth - 4) : selectionAreaCellWidth * lowestColumnIndex + (defaultColumn.rowHeaderWidth - 4) // calculate left value here if virtualized row is not in DOM, accounting for row header cell width (including borders)
40
+
37
41
  };
38
42
  var selectionAreaElement = document.querySelector("[data-matcher-id=\"".concat(area.matcher, "\"]")) || document.createElement('div');
39
43
  selectionAreaElement.classList.add("".concat(blockClass, "__selection-area--element"));
@@ -13,6 +13,12 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
13
13
 
14
14
  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; }
15
15
 
16
+ /**
17
+ * Copyright IBM Corp. 2022, 2022
18
+ *
19
+ * This source code is licensed under the Apache-2.0 license found in the
20
+ * LICENSE file in the root directory of this source tree.
21
+ */
16
22
  // cspell:disable
17
23
  var pets = ['dog', 'cat', 'bird', 'lizard', 'frog', 'hamster', 'fish', 'rabbit', 'snake'];
18
24
  var petNames = ['Bruno', 'Willow', 'Kona', 'Heidi', 'Rusty', 'Bonnie', 'Cash', 'Gucci', 'Brody', 'Emma', 'Loki', 'Angel', 'Astro', 'Sherman', 'Layla', 'Peanut', 'Grace', 'Mickey', 'Sasha', 'Finn', 'Tucker', 'Bear', 'Mocha', 'Roscoe']; // cspell:enable
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.handleHeaderCellSelection = void 0;
9
+
10
+ var _uuidv = _interopRequireDefault(require("../../../global/js/utils/uuidv4"));
11
+
12
+ var _removeCellSelections = require("./removeCellSelections");
13
+
14
+ /**
15
+ * Copyright IBM Corp. 2022, 2022
16
+ *
17
+ * This source code is licensed under the Apache-2.0 license found in the
18
+ * LICENSE file in the root directory of this source tree.
19
+ */
20
+ var handleHeaderCellSelection = function handleHeaderCellSelection(_ref) {
21
+ var type = _ref.type,
22
+ activeCellCoordinates = _ref.activeCellCoordinates,
23
+ rows = _ref.rows,
24
+ columns = _ref.columns,
25
+ setActiveCellCoordinates = _ref.setActiveCellCoordinates,
26
+ setCurrentMatcher = _ref.setCurrentMatcher,
27
+ setSelectionAreas = _ref.setSelectionAreas,
28
+ spreadsheetRef = _ref.spreadsheetRef,
29
+ index = _ref.index,
30
+ isKeyboard = _ref.isKeyboard;
31
+ var rowValue = isKeyboard ? activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row : index;
32
+ var columnValue = isKeyboard ? activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column : index;
33
+ var point1 = {
34
+ row: type === 'column' ? 0 : rowValue,
35
+ column: type === 'column' ? columnValue : 0
36
+ };
37
+ var point2 = {
38
+ row: type === 'column' ? rows.length - 1 : rowValue,
39
+ // going to always be the last row
40
+ column: type === 'column' ? columnValue : columns.length - 1
41
+ };
42
+ var tempMatcher = (0, _uuidv.default)();
43
+ setActiveCellCoordinates({
44
+ row: type === 'column' ? 0 : rowValue,
45
+ column: type === 'column' ? columnValue : 0
46
+ });
47
+ setCurrentMatcher(tempMatcher);
48
+ (0, _removeCellSelections.removeCellSelections)({
49
+ spreadsheetRef: spreadsheetRef
50
+ });
51
+ setSelectionAreas([{
52
+ point1: point1,
53
+ point2: point2,
54
+ areaCreated: false,
55
+ matcher: tempMatcher
56
+ }]);
57
+ };
58
+
59
+ exports.handleHeaderCellSelection = handleHeaderCellSelection;