@carbon/ibm-products 1.11.0 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. package/README.md +0 -3
  2. package/css/index-full-carbon.css +1543 -529
  3. package/css/index-full-carbon.css.map +1 -1
  4. package/css/index-full-carbon.min.css +5 -5
  5. package/css/index-full-carbon.min.css.map +1 -1
  6. package/css/index-without-carbon-released-only.css +12 -0
  7. package/css/index-without-carbon-released-only.css.map +1 -1
  8. package/css/index-without-carbon-released-only.min.css +2 -2
  9. package/css/index-without-carbon-released-only.min.css.map +1 -1
  10. package/css/index-without-carbon.css +77 -187
  11. package/css/index-without-carbon.css.map +1 -1
  12. package/css/index-without-carbon.min.css +4 -4
  13. package/css/index-without-carbon.min.css.map +1 -1
  14. package/css/index.css +194 -187
  15. package/css/index.css.map +1 -1
  16. package/css/index.min.css +5 -5
  17. package/css/index.min.css.map +1 -1
  18. package/es/components/AddSelect/AddSelect.js +63 -12
  19. package/es/components/AddSelect/AddSelectColumn.js +58 -22
  20. package/es/components/AddSelect/AddSelectList.js +38 -18
  21. package/es/components/AddSelect/AddSelectSidebar.js +2 -1
  22. package/es/components/ButtonMenu/ButtonMenu.js +11 -3
  23. package/es/components/CreateFullPage/CreateFullPageStep.js +4 -4
  24. package/es/components/CreateTearsheet/CreateTearsheetStep.js +4 -4
  25. package/es/components/DataSpreadsheet/DataSpreadsheet.js +107 -89
  26. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +93 -20
  27. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +50 -2
  28. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +3 -1
  29. package/es/components/ImportModal/ImportModal.js +2 -2
  30. package/es/components/UserProfileImage/UserProfileImage.js +1 -1
  31. package/es/components/index.js +0 -1
  32. package/es/global/js/package-settings.js +1 -2
  33. package/lib/components/AddSelect/AddSelect.js +63 -12
  34. package/lib/components/AddSelect/AddSelectColumn.js +57 -21
  35. package/lib/components/AddSelect/AddSelectList.js +39 -17
  36. package/lib/components/AddSelect/AddSelectSidebar.js +2 -1
  37. package/lib/components/ButtonMenu/ButtonMenu.js +11 -3
  38. package/lib/components/CreateFullPage/CreateFullPageStep.js +4 -4
  39. package/lib/components/CreateTearsheet/CreateTearsheetStep.js +4 -4
  40. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +108 -91
  41. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +94 -20
  42. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +52 -7
  43. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +3 -1
  44. package/lib/components/ImportModal/ImportModal.js +1 -1
  45. package/lib/components/UserProfileImage/UserProfileImage.js +1 -1
  46. package/lib/components/index.js +0 -8
  47. package/lib/global/js/package-settings.js +1 -2
  48. package/package.json +16 -16
  49. package/scss/components/AboutModal/_about-modal.scss +2 -2
  50. package/scss/components/ActionSet/_action-set.scss +3 -1
  51. package/scss/components/AddSelect/_add-select.scss +41 -2
  52. package/scss/components/CreateModal/_create-modal.scss +7 -5
  53. package/scss/components/CreateModal/_storybook-styles.scss +8 -7
  54. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +21 -3
  55. package/scss/components/ExportModal/_export-modal.scss +3 -3
  56. package/scss/components/InlineEdit/_inline-edit.scss +3 -0
  57. package/scss/components/ModifiedTabs/_modified-tabs.scss +4 -9
  58. package/scss/components/NotificationsPanel/_notifications-panel.scss +9 -5
  59. package/scss/components/OptionsTile/_options-tile.scss +0 -1
  60. package/scss/components/RemoveModal/_remove-modal.scss +3 -3
  61. package/scss/components/TagSet/_tag-set.scss +2 -1
  62. package/scss/components/Tearsheet/_tearsheet.scss +4 -1
  63. package/scss/components/_index.scss +0 -1
  64. package/es/components/LoadingBar/LoadingBar.js +0 -156
  65. package/es/components/LoadingBar/index.js +0 -7
  66. package/lib/components/LoadingBar/LoadingBar.js +0 -170
  67. package/lib/components/LoadingBar/index.js +0 -13
  68. package/scss/components/LoadingBar/_index.scss +0 -8
  69. package/scss/components/LoadingBar/_loading-bar.scss +0 -224
  70. package/scss/components/LoadingBar/_storybook-styles.scss +0 -14
@@ -2,7 +2,7 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- var _typeof3 = require("@babel/runtime/helpers/typeof");
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
6
 
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
@@ -11,8 +11,6 @@ exports.DataSpreadsheet = void 0;
11
11
 
12
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
13
 
14
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
15
-
16
14
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
17
15
 
18
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
@@ -43,8 +41,6 @@ var _getScrollbarWidth = require("../../global/js/utils/getScrollbarWidth");
43
41
 
44
42
  var _hooks = require("../../global/js/hooks");
45
43
 
46
- var _deepCloneObject = require("../../global/js/utils/deepCloneObject");
47
-
48
44
  var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
49
45
 
50
46
  var _useResetSpreadsheetFocus = require("./hooks/useResetSpreadsheetFocus");
@@ -61,11 +57,11 @@ var _handleMultipleKeys = require("./utils/handleMultipleKeys");
61
57
 
62
58
  var _handleHeaderCellSelection = require("./utils/handleHeaderCellSelection");
63
59
 
64
- var _excluded = ["cellSize", "className", "columns", "data", "onDataUpdate", "id", "onActiveCellChange"];
60
+ var _excluded = ["cellSize", "className", "columns", "data", "onDataUpdate", "id", "onActiveCellChange", "onSelectionAreaChange"];
65
61
 
66
62
  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); }
67
63
 
68
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(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; }
64
+ 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; }
69
65
 
70
66
  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; }
71
67
 
@@ -80,7 +76,9 @@ var defaults = {
80
76
  cellSize: 'standard',
81
77
  columns: Object.freeze([]),
82
78
  data: Object.freeze([]),
83
- onDataUpdate: Object.freeze(function () {})
79
+ onDataUpdate: Object.freeze(function () {}),
80
+ onActiveCellChange: Object.freeze(function () {}),
81
+ onSelectionAreaChange: Object.freeze(function () {})
84
82
  };
85
83
  /**
86
84
  * DataSpreadsheet: used to organize and display large amounts of structured data, separated by columns and rows in a grid-like format.
@@ -97,7 +95,10 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
97
95
  _ref$onDataUpdate = _ref.onDataUpdate,
98
96
  onDataUpdate = _ref$onDataUpdate === void 0 ? defaults.onDataUpdate : _ref$onDataUpdate,
99
97
  id = _ref.id,
100
- onActiveCellChange = _ref.onActiveCellChange,
98
+ _ref$onActiveCellChan = _ref.onActiveCellChange,
99
+ onActiveCellChange = _ref$onActiveCellChan === void 0 ? defaults.onActiveCellChange : _ref$onActiveCellChan,
100
+ _ref$onSelectionAreaC = _ref.onSelectionAreaChange,
101
+ onSelectionAreaChange = _ref$onSelectionAreaC === void 0 ? defaults.onSelectionAreaChange : _ref$onSelectionAreaC,
101
102
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
102
103
  var localRef = (0, _react.useRef)();
103
104
  var spreadsheetRef = ref || localRef;
@@ -118,32 +119,42 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
118
119
  selectionAreas = _useState6[0],
119
120
  setSelectionAreas = _useState6[1];
120
121
 
121
- var _useState7 = (0, _react.useState)(false),
122
+ var _useState7 = (0, _react.useState)([]),
122
123
  _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
123
- clickAndHoldActive = _useState8[0],
124
- setClickAndHoldActive = _useState8[1];
124
+ selectionAreaData = _useState8[0],
125
+ setSelectionAreaData = _useState8[1];
125
126
 
126
- var _useState9 = (0, _react.useState)(''),
127
+ var _useState9 = (0, _react.useState)(false),
127
128
  _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
128
- currentMatcher = _useState10[0],
129
- setCurrentMatcher = _useState10[1];
129
+ clickAndHoldActive = _useState10[0],
130
+ setClickAndHoldActive = _useState10[1];
130
131
 
131
- var _useState11 = (0, _react.useState)(false),
132
+ var _useState11 = (0, _react.useState)(''),
132
133
  _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
133
- isEditing = _useState12[0],
134
- setIsEditing = _useState12[1];
134
+ currentMatcher = _useState12[0],
135
+ setCurrentMatcher = _useState12[1];
135
136
 
136
- var _useState13 = (0, _react.useState)(''),
137
+ var _useState13 = (0, _react.useState)(false),
137
138
  _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
138
- cellEditorValue = _useState14[0],
139
- setCellEditorValue = _useState14[1];
139
+ isEditing = _useState14[0],
140
+ setIsEditing = _useState14[1];
141
+
142
+ var _useState15 = (0, _react.useState)(''),
143
+ _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
144
+ cellEditorValue = _useState16[0],
145
+ setCellEditorValue = _useState16[1];
140
146
 
141
147
  var previousState = (0, _hooks.usePreviousValue)({
142
148
  activeCellCoordinates: activeCellCoordinates
143
149
  });
144
150
  var cellSizeValue = (0, _getCellSize.getCellSize)(cellSize);
145
151
  var cellEditorRef = (0, _react.useRef)();
146
- var currentMatcherRef = (0, _react.useRef)();
152
+
153
+ var _useState17 = (0, _react.useState)(),
154
+ _useState18 = (0, _slicedToArray2.default)(_useState17, 2),
155
+ activeCellContent = _useState18[0],
156
+ setActiveCellContent = _useState18[1];
157
+
147
158
  var activeKeys = (0, _react.useRef)([]);
148
159
  var activeCellRef = (0, _react.useRef)();
149
160
  var defaultColumn = (0, _react.useMemo)(function () {
@@ -219,10 +230,18 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
219
230
  removeCellEditor();
220
231
  updateData(prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.row, cellProps.column.id);
221
232
  }
222
- }, [activeCellCoordinates, previousState === null || previousState === void 0 ? void 0 : previousState.activeCellCoordinates, updateData, rows, isEditing, removeCellEditor]);
223
- var handleActiveCellMouseEnter = (0, _react.useCallback)(function () {
224
- handleActiveCellMouseEnterCallback(selectionAreas, clickAndHoldActive);
225
- }, [clickAndHoldActive, selectionAreas, handleActiveCellMouseEnterCallback]);
233
+
234
+ if ((prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.row) !== (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) || (prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.column) !== (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column)) {
235
+ if (activeCellCoordinates && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) !== 'header' && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) !== 'header') {
236
+ var activeCellFullData = typeof (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'number' && typeof (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'number' ? rows[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row].cells[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column] : null;
237
+ setActiveCellContent(activeCellFullData.render('Cell'));
238
+ }
239
+
240
+ if (activeCellCoordinates && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
241
+ setActiveCellContent(null);
242
+ }
243
+ }
244
+ }, [activeCellCoordinates, previousState === null || previousState === void 0 ? void 0 : previousState.activeCellCoordinates, updateData, rows, isEditing, removeCellEditor, activeCellContent]);
226
245
  var createActiveCell = (0, _react.useCallback)(function (_ref2) {
227
246
  var placementElement = _ref2.placementElement,
228
247
  coords = _ref2.coords,
@@ -326,6 +345,7 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
326
345
 
327
346
  if (selectionAreas !== null && selectionAreas !== void 0 && selectionAreas.length && key !== 'Shift' && !activeKeys.current.includes('Shift')) {
328
347
  setSelectionAreas([]);
348
+ setSelectionAreaData([]);
329
349
  removeCellSelections({
330
350
  spreadsheetRef: spreadsheetRef
331
351
  });
@@ -509,6 +529,18 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
509
529
  var activeCellFullData = typeof (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'number' && typeof (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'number' ? rows[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row].cells[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column] : null;
510
530
  var activeCellValue = activeCellFullData ? Object.values(activeCellFullData.row.values)[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column] : null;
511
531
  setCellEditorValue(activeCellValue);
532
+ };
533
+
534
+ var handleActiveCellClick = function handleActiveCellClick() {
535
+ if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
536
+ var indexValue = (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' ? activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column : activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row;
537
+ handleRowColumnHeaderClick({
538
+ isKeyboard: false,
539
+ index: indexValue
540
+ });
541
+ }
542
+
543
+ return;
512
544
  }; // Go into edit mode if 'Enter' key is pressed on activeCellRef
513
545
 
514
546
 
@@ -521,31 +553,42 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
521
553
  }
522
554
 
523
555
  if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header' || (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
524
- var handleHeaderCellProps = {
525
- activeCellCoordinates: activeCellCoordinates,
526
- rows: rows,
527
- columns: columns,
528
- setActiveCellCoordinates: setActiveCellCoordinates,
529
- setCurrentMatcher: setCurrentMatcher,
530
- setSelectionAreas: setSelectionAreas,
531
- spreadsheetRef: spreadsheetRef,
556
+ handleRowColumnHeaderClick({
532
557
  isKeyboard: true
533
- }; // Select an entire column
534
-
535
- if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header') {
536
- (0, _handleHeaderCellSelection.handleHeaderCellSelection)(_objectSpread({
537
- type: 'column'
538
- }, handleHeaderCellProps));
539
- } // Select an entire row
540
-
541
-
542
- if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
543
- (0, _handleHeaderCellSelection.handleHeaderCellSelection)(_objectSpread({
544
- type: 'row'
545
- }, handleHeaderCellProps));
546
- }
558
+ });
547
559
  }
548
560
  }
561
+ };
562
+
563
+ var handleRowColumnHeaderClick = function handleRowColumnHeaderClick(_ref4) {
564
+ var isKeyboard = _ref4.isKeyboard,
565
+ _ref4$index = _ref4.index,
566
+ index = _ref4$index === void 0 ? null : _ref4$index;
567
+ var handleHeaderCellProps = {
568
+ activeCellCoordinates: activeCellCoordinates,
569
+ rows: rows,
570
+ columns: columns,
571
+ setActiveCellCoordinates: setActiveCellCoordinates,
572
+ setCurrentMatcher: setCurrentMatcher,
573
+ setSelectionAreas: setSelectionAreas,
574
+ spreadsheetRef: spreadsheetRef,
575
+ isKeyboard: isKeyboard,
576
+ setSelectionAreaData: setSelectionAreaData,
577
+ index: index
578
+ }; // Select an entire column
579
+
580
+ if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header') {
581
+ (0, _handleHeaderCellSelection.handleHeaderCellSelection)(_objectSpread({
582
+ type: 'column'
583
+ }, handleHeaderCellProps));
584
+ } // Select an entire row
585
+
586
+
587
+ if ((activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header') {
588
+ (0, _handleHeaderCellSelection.handleHeaderCellSelection)(_objectSpread({
589
+ type: 'row'
590
+ }, handleHeaderCellProps));
591
+ }
549
592
  }; // Go into edit mode if double click is detected on activeCellRef
550
593
 
551
594
 
@@ -586,44 +629,8 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
586
629
  }
587
630
 
588
631
  return;
589
- }; // Only update if there are cell selection areas
590
- // Find point object that matches currentMatcher and remove the second point
591
- // because hovering over the active cell while clicking and holding should
592
- // remove the previously existing selection area
593
-
594
-
595
- var handleActiveCellMouseEnterCallback = (0, _react.useCallback)(function (areas, clickHold) {
596
- var freshMatcherValue = currentMatcherRef.current;
597
-
598
- if (!freshMatcherValue) {
599
- return;
600
- }
601
-
602
- if (areas && areas.length && clickHold && freshMatcherValue) {
603
- setSelectionAreas(function (prev) {
604
- var selectionAreaClone = (0, _deepCloneObject.deepCloneObject)(prev);
605
- var indexOfItemToUpdate = selectionAreaClone.findIndex(function (item) {
606
- return item.matcher === freshMatcherValue;
607
- });
608
-
609
- if (indexOfItemToUpdate === -1) {
610
- return prev;
611
- }
612
-
613
- if ((0, _typeof2.default)(selectionAreaClone[indexOfItemToUpdate].point2) === 'object' && selectionAreaClone[indexOfItemToUpdate].areaCreated) {
614
- selectionAreaClone[indexOfItemToUpdate].point2 = null;
615
- selectionAreaClone[indexOfItemToUpdate].areaCreated = false;
616
- removeCellSelections({
617
- matcher: freshMatcherValue,
618
- spreadsheetRef: spreadsheetRef
619
- });
620
- return selectionAreaClone;
621
- }
632
+ };
622
633
 
623
- return prev;
624
- });
625
- }
626
- }, [spreadsheetRef, removeCellSelections]);
627
634
  (0, _react.useEffect)(function () {
628
635
  if (isEditing) {
629
636
  var _rows$activeCellCoord, _cellProps$column, _cellEditorRef$curren;
@@ -636,7 +643,7 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
636
643
  cellEditorRef.current.style.display = 'block';
637
644
  cellEditorRef.current.style.width = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.width;
638
645
  cellEditorRef.current.style.height = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.height;
639
- cellEditorRef.current.style.paddingTop = "".concat((parseInt(activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.height) - 16) / 2, "px"); // calculate paddingTop based on cellHeight which could be variable depending on the cellSize prop
646
+ cellEditorRef.current.style.paddingTop = "".concat((parseInt(activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.height) - 16) / 2 - 1, "px"); // calculate paddingTop based on cellHeight which could be variable depending on the cellSize prop
640
647
 
641
648
  cellEditorRef.current.style.textAlign = (cellProps === null || cellProps === void 0 ? void 0 : (_cellProps$column = cellProps.column) === null || _cellProps$column === void 0 ? void 0 : _cellProps$column.placement) === 'right' ? 'right' : 'left';
642
649
  (_cellEditorRef$curren = cellEditorRef.current) === null || _cellEditorRef$curren === void 0 ? void 0 : _cellEditorRef$curren.focus();
@@ -678,15 +685,17 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
678
685
  }), /*#__PURE__*/_react.default.createElement(_DataSpreadsheetHeader.DataSpreadsheetHeader, {
679
686
  ref: spreadsheetRef,
680
687
  activeCellCoordinates: activeCellCoordinates,
681
- cellSizeValue: cellSizeValue,
688
+ cellSize: cellSize,
682
689
  columns: columns,
683
690
  defaultColumn: defaultColumn,
684
691
  headerGroups: headerGroups,
685
692
  rows: rows,
693
+ scrollBarSize: scrollBarSize,
686
694
  selectionAreas: selectionAreas,
687
695
  setActiveCellCoordinates: setActiveCellCoordinates,
688
696
  setSelectionAreas: setSelectionAreas,
689
- setCurrentMatcher: setCurrentMatcher
697
+ setCurrentMatcher: setCurrentMatcher,
698
+ setSelectionAreaData: setSelectionAreaData
690
699
  }), /*#__PURE__*/_react.default.createElement(_DataSpreadsheetBody.DataSpreadsheetBody, {
691
700
  activeCellCoordinates: activeCellCoordinates,
692
701
  ref: spreadsheetRef,
@@ -701,21 +710,24 @@ var DataSpreadsheet = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
701
710
  defaultColumn: defaultColumn,
702
711
  getTableBodyProps: getTableBodyProps,
703
712
  onActiveCellChange: onActiveCellChange,
713
+ onSelectionAreaChange: onSelectionAreaChange,
704
714
  prepareRow: prepareRow,
705
715
  rows: rows,
716
+ selectionAreaData: selectionAreaData,
717
+ setSelectionAreaData: setSelectionAreaData,
706
718
  setActiveCellCoordinates: setActiveCellCoordinates,
707
719
  scrollBarSize: scrollBarSize,
708
720
  totalColumnsWidth: totalColumnsWidth,
709
721
  id: id,
710
722
  columns: columns
711
723
  }), /*#__PURE__*/_react.default.createElement("button", {
724
+ onClick: handleActiveCellClick,
712
725
  onKeyDown: handleActiveCellKeyDown,
713
- onMouseEnter: handleActiveCellMouseEnter,
714
726
  onDoubleClick: handleActiveCellDoubleClick,
715
727
  ref: activeCellRef,
716
728
  className: (0, _classnames.default)("".concat(blockClass, "--interactive-cell-element"), "".concat(blockClass, "__active-cell--highlight")),
717
729
  type: "button"
718
- }), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextArea, {
730
+ }, activeCellContent), /*#__PURE__*/_react.default.createElement(_carbonComponentsReact.TextArea, {
719
731
  value: cellEditorValue,
720
732
  onKeyDown: handleEditSubmit,
721
733
  onChange: function onChange(event) {
@@ -776,7 +788,12 @@ DataSpreadsheet.propTypes = {
776
788
  /**
777
789
  * The setter fn for the data prop
778
790
  */
779
- onDataUpdate: _propTypes.default.func
791
+ onDataUpdate: _propTypes.default.func,
792
+
793
+ /**
794
+ * The event handler that is called when the selection area values change
795
+ */
796
+ onSelectionAreaChange: _propTypes.default.func
780
797
  /* TODO: add types and DocGen for all props. */
781
798
 
782
799
  };
@@ -29,6 +29,8 @@ var _deepCloneObject = require("../../global/js/utils/deepCloneObject");
29
29
 
30
30
  var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
31
31
 
32
+ var _hooks = require("../../global/js/hooks");
33
+
32
34
  var _removeCellSelections = require("./utils/removeCellSelections");
33
35
 
34
36
  var _createCellSelectionArea = require("./utils/createCellSelectionArea");
@@ -56,6 +58,8 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
56
58
  id = _ref.id,
57
59
  prepareRow = _ref.prepareRow,
58
60
  rows = _ref.rows,
61
+ selectionAreaData = _ref.selectionAreaData,
62
+ setSelectionAreaData = _ref.setSelectionAreaData,
59
63
  setActiveCellCoordinates = _ref.setActiveCellCoordinates,
60
64
  selectionAreas = _ref.selectionAreas,
61
65
  setContainerHasFocus = _ref.setContainerHasFocus,
@@ -65,24 +69,60 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
65
69
  clickAndHoldActive = _ref.clickAndHoldActive,
66
70
  setClickAndHoldActive = _ref.setClickAndHoldActive,
67
71
  currentMatcher = _ref.currentMatcher,
68
- setCurrentMatcher = _ref.setCurrentMatcher;
69
- // Create cell selection areas based on selectionAreas array
72
+ setCurrentMatcher = _ref.setCurrentMatcher,
73
+ onSelectionAreaChange = _ref.onSelectionAreaChange;
74
+ var previousState = (0, _hooks.usePreviousValue)({
75
+ selectionAreaData: selectionAreaData,
76
+ clickAndHoldActive: clickAndHoldActive
77
+ }); // Call the `onSelectionAreaChange` handler to send selection area data
78
+ // back to the consumer
79
+
80
+ (0, _react.useEffect)(function () {
81
+ if (selectionAreaData.length) {
82
+ var _previousState$select;
83
+
84
+ if (!clickAndHoldActive && previousState !== null && previousState !== void 0 && previousState.clickAndHoldActive || (previousState === null || previousState === void 0 ? void 0 : (_previousState$select = previousState.selectionAreaData) === null || _previousState$select === void 0 ? void 0 : _previousState$select.length) !== (selectionAreaData === null || selectionAreaData === void 0 ? void 0 : selectionAreaData.length)) {
85
+ onSelectionAreaChange(selectionAreaData);
86
+ }
87
+ }
88
+ }, [previousState === null || previousState === void 0 ? void 0 : previousState.selectionAreaData, selectionAreaData, onSelectionAreaChange, clickAndHoldActive, previousState === null || previousState === void 0 ? void 0 : previousState.clickAndHoldActive]); // Create cell selection areas based on selectionAreas array
89
+
70
90
  (0, _react.useEffect)(function () {
71
91
  if (selectionAreas && selectionAreas.length) {
72
92
  selectionAreas.map(function (area) {
73
- if (!area.areaCreated && area.point1 && area.point2 && area.matcher) {
74
- // Do not create a cell selection area if point1 and point2 have the same values
75
- // Cell selections must have two distinctly different points for an area to be created
76
- if (area.point1.row === area.point2.row && area.point1.column === area.point2.column) {
77
- var selectionAreasClone = (0, _deepCloneObject.deepCloneObject)(selectionAreas);
78
- var indexOfCurrentArea = selectionAreasClone.findIndex(function (item) {
79
- return item.matcher === area.matcher;
93
+ // Setup selection area data that will be sent back to consumer via onSelectionAreaChange prop
94
+ if (area.areaCreated) {
95
+ var rowStart = Math.min(area.point1.row, area.point2.row);
96
+ var rowEnd = Math.max(area.point1.row, area.point2.row);
97
+ var columnStart = Math.min(area.point1.column, area.point2.column);
98
+ var columnEnd = Math.max(area.point1.column, area.point2.column);
99
+ var selectionData = {
100
+ rows: {
101
+ start: rowStart,
102
+ end: rowEnd
103
+ },
104
+ columns: {
105
+ start: columnStart,
106
+ end: columnEnd
107
+ },
108
+ cells: populateSelectionAreaCellData({
109
+ rowStart: rowStart,
110
+ rowEnd: rowEnd,
111
+ columnStart: columnStart,
112
+ columnEnd: columnEnd
113
+ }),
114
+ selectionId: area.matcher
115
+ };
116
+ setSelectionAreaData(function (prev) {
117
+ var prevValues = (0, _deepCloneObject.deepCloneObject)(prev);
118
+ var newAreaData = prevValues.filter(function (item) {
119
+ return item.selectionId !== area.matcher;
80
120
  });
81
- selectionAreasClone[indexOfCurrentArea].areaCreated = false;
82
- selectionAreasClone[indexOfCurrentArea].point2 = null;
83
- return setSelectionAreas(selectionAreasClone);
84
- }
121
+ return [].concat((0, _toConsumableArray2.default)(newAreaData), [selectionData]);
122
+ });
123
+ }
85
124
 
125
+ if (!area.areaCreated && area.point1 && area.point2 && area.matcher) {
86
126
  (0, _createCellSelectionArea.createCellSelectionArea)({
87
127
  area: area,
88
128
  blockClass: blockClass,
@@ -95,7 +135,24 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
95
135
  return;
96
136
  });
97
137
  }
98
- }, [selectionAreas, setSelectionAreas, defaultColumn]); // Mouse up
138
+ }, [selectionAreas, setSelectionAreas, defaultColumn, onSelectionAreaChange, setSelectionAreaData]);
139
+
140
+ var populateSelectionAreaCellData = function populateSelectionAreaCellData(_ref2) {
141
+ var rowStart = _ref2.rowStart,
142
+ rowEnd = _ref2.rowEnd,
143
+ columnStart = _ref2.columnStart,
144
+ columnEnd = _ref2.columnEnd;
145
+ var cellContainer = [];
146
+
147
+ for (var rowIndex = rowStart; rowIndex <= rowEnd; rowIndex++) {
148
+ for (var columnIndex = columnStart; columnIndex <= columnEnd; columnIndex++) {
149
+ cellContainer.push([rowIndex, columnIndex]);
150
+ }
151
+ }
152
+
153
+ return cellContainer;
154
+ }; // Mouse up
155
+
99
156
 
100
157
  (0, _react.useEffect)(function () {
101
158
  var handleMouseUp = function handleMouseUp(event) {
@@ -196,9 +253,10 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
196
253
  matcher: tempMatcher
197
254
  }]);
198
255
  setCurrentMatcher(tempMatcher);
256
+ setSelectionAreaData([]);
199
257
  }
200
258
  };
201
- }, [currentMatcher, activeCellCoordinates, selectionAreas, setActiveCellCoordinates, setSelectionAreas, setContainerHasFocus, setClickAndHoldActive, setCurrentMatcher, ref]);
259
+ }, [currentMatcher, activeCellCoordinates, selectionAreas, setActiveCellCoordinates, setSelectionAreas, setContainerHasFocus, setClickAndHoldActive, setCurrentMatcher, ref, setSelectionAreaData]);
202
260
  var handleBodyCellHover = (0, _react.useCallback)(function (cell, columnIndex) {
203
261
  return function () {
204
262
  if (clickAndHoldActive) {
@@ -241,14 +299,15 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
241
299
  setCurrentMatcher: setCurrentMatcher,
242
300
  setSelectionAreas: setSelectionAreas,
243
301
  spreadsheetRef: ref,
244
- index: index
302
+ index: index,
303
+ setSelectionAreaData: setSelectionAreaData
245
304
  });
246
305
  };
247
- }, [columns, ref, setSelectionAreas, setCurrentMatcher, setActiveCellCoordinates, activeCellCoordinates, rows]); // Renders each row/cell in the spreadsheet body
306
+ }, [columns, ref, setSelectionAreas, setCurrentMatcher, setActiveCellCoordinates, activeCellCoordinates, rows, setSelectionAreaData]); // Renders each row/cell in the spreadsheet body
248
307
 
249
- var RenderRow = (0, _react.useCallback)(function (_ref2) {
250
- var index = _ref2.index,
251
- style = _ref2.style;
308
+ var RenderRow = (0, _react.useCallback)(function (_ref3) {
309
+ var index = _ref3.index,
310
+ style = _ref3.style;
252
311
  var row = rows[index];
253
312
  prepareRow(row);
254
313
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, row.getRowProps({
@@ -342,6 +401,11 @@ DataSpreadsheetBody.propTypes = {
342
401
  */
343
402
  onActiveCellChange: _propTypes.default.func,
344
403
 
404
+ /**
405
+ * The event handler that is called when the selection areas change
406
+ */
407
+ onSelectionAreaChange: _propTypes.default.func,
408
+
345
409
  /**
346
410
  * Prepare row function from react-table
347
411
  */
@@ -357,6 +421,11 @@ DataSpreadsheetBody.propTypes = {
357
421
  */
358
422
  scrollBarSize: _propTypes.default.number,
359
423
 
424
+ /**
425
+ * Array of selection area data
426
+ */
427
+ selectionAreaData: _propTypes.default.array,
428
+
360
429
  /**
361
430
  * Array of selection areas
362
431
  */
@@ -382,6 +451,11 @@ DataSpreadsheetBody.propTypes = {
382
451
  */
383
452
  setCurrentMatcher: _propTypes.default.func,
384
453
 
454
+ /**
455
+ * Setter fn for selectionAreaData state value
456
+ */
457
+ setSelectionAreaData: _propTypes.default.func,
458
+
385
459
  /**
386
460
  * Setter fn for selectionAreas state value
387
461
  */
@@ -13,40 +13,66 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
13
13
 
14
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
15
 
16
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
+
16
18
  var _react = _interopRequireWildcard(require("react"));
17
19
 
18
20
  var _propTypes = _interopRequireDefault(require("prop-types"));
19
21
 
20
22
  var _classnames = _interopRequireDefault(require("classnames"));
21
23
 
24
+ var _layout = require("@carbon/layout");
25
+
22
26
  var _settings = require("../../settings");
23
27
 
24
28
  var _checkActiveHeaderCell = require("./utils/checkActiveHeaderCell");
25
29
 
26
30
  var _handleHeaderCellSelection = require("./utils/handleHeaderCellSelection");
27
31
 
32
+ var _hooks = require("../../global/js/hooks");
33
+
28
34
  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
35
 
30
36
  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; }
31
37
 
32
- /**
33
- * Copyright IBM Corp. 2022, 2022
34
- *
35
- * This source code is licensed under the Apache-2.0 license found in the
36
- * LICENSE file in the root directory of this source tree.
37
- */
38
+ 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; }
39
+
40
+ 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; }
41
+
38
42
  var blockClass = "".concat(_settings.pkg.prefix, "--data-spreadsheet");
39
43
  var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
40
44
  var activeCellCoordinates = _ref.activeCellCoordinates,
45
+ cellSize = _ref.cellSize,
41
46
  columns = _ref.columns,
42
47
  defaultColumn = _ref.defaultColumn,
43
48
  headerGroups = _ref.headerGroups,
49
+ scrollBarSize = _ref.scrollBarSize,
44
50
  selectionAreas = _ref.selectionAreas,
45
51
  setActiveCellCoordinates = _ref.setActiveCellCoordinates,
46
52
  setCurrentMatcher = _ref.setCurrentMatcher,
47
53
  setSelectionAreas = _ref.setSelectionAreas,
54
+ setSelectionAreaData = _ref.setSelectionAreaData,
48
55
  rows = _ref.rows;
49
56
 
57
+ var _useState = (0, _react.useState)(0),
58
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
59
+ scrollBarSizeValue = _useState2[0],
60
+ setScrollBarSizeValue = _useState2[1];
61
+
62
+ var previousState = (0, _hooks.usePreviousValue)({
63
+ cellSize: cellSize
64
+ });
65
+ (0, _react.useEffect)(function () {
66
+ if ((previousState === null || previousState === void 0 ? void 0 : previousState.cellSize) !== cellSize) {
67
+ var _ref$current;
68
+
69
+ var scrollContainer = ref === null || ref === void 0 ? void 0 : (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.querySelector(".".concat(blockClass, "__list--container"));
70
+ var hasScrollBar = (scrollContainer === null || scrollContainer === void 0 ? void 0 : scrollContainer.scrollHeight) > (scrollContainer === null || scrollContainer === void 0 ? void 0 : scrollContainer.clientHeight);
71
+ var scrollBarValue = hasScrollBar ? 0 : scrollBarSize;
72
+ setScrollBarSizeValue(scrollBarValue);
73
+ }
74
+ }, [cellSize, ref, scrollBarSize, previousState === null || previousState === void 0 ? void 0 : previousState.cellSize]);
75
+
50
76
  var handleColumnHeaderClick = function handleColumnHeaderClick(index) {
51
77
  return function () {
52
78
  (0, _handleHeaderCellSelection.handleHeaderCellSelection)({
@@ -58,7 +84,8 @@ var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref,
58
84
  setCurrentMatcher: setCurrentMatcher,
59
85
  setSelectionAreas: setSelectionAreas,
60
86
  spreadsheetRef: ref,
61
- index: index
87
+ index: index,
88
+ setSelectionAreaData: setSelectionAreaData
62
89
  });
63
90
  };
64
91
  };
@@ -69,6 +96,9 @@ var DataSpreadsheetHeader = /*#__PURE__*/(0, _react.forwardRef)(function (_ref,
69
96
  return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
70
97
  key: "header_".concat(index)
71
98
  }, headerGroup.getHeaderGroupProps(), {
99
+ style: _objectSpread(_objectSpread({}, headerGroup.getHeaderGroupProps().style), {}, {
100
+ width: (0, _layout.px)(parseInt(headerGroup.getHeaderGroupProps().style.width) + scrollBarSizeValue)
101
+ }),
72
102
  className: "".concat(blockClass, "__tr")
73
103
  }), /*#__PURE__*/_react.default.createElement("button", {
74
104
  "data-row-index": "header",
@@ -107,6 +137,11 @@ DataSpreadsheetHeader.propTypes = {
107
137
  column: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])
108
138
  }),
109
139
 
140
+ /**
141
+ * Specifies the cell height
142
+ */
143
+ cellSize: _propTypes.default.oneOf(['compact', 'standard', 'medium', 'large']),
144
+
110
145
  /**
111
146
  * All of the spreadsheet columns
112
147
  */
@@ -131,6 +166,11 @@ DataSpreadsheetHeader.propTypes = {
131
166
  */
132
167
  rows: _propTypes.default.arrayOf(_propTypes.default.object),
133
168
 
169
+ /**
170
+ * The scrollbar width
171
+ */
172
+ scrollBarSize: _propTypes.default.number,
173
+
134
174
  /**
135
175
  * All of the cell selection area items
136
176
  */
@@ -146,6 +186,11 @@ DataSpreadsheetHeader.propTypes = {
146
186
  */
147
187
  setCurrentMatcher: _propTypes.default.func,
148
188
 
189
+ /**
190
+ * Setter fn for selectionAreaData state value
191
+ */
192
+ setSelectionAreaData: _propTypes.default.func,
193
+
149
194
  /**
150
195
  * Setter fn for selectionAreas value
151
196
  */