@carbon/ibm-products 1.18.1 → 1.18.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 (30) hide show
  1. package/css/index-full-carbon.css +4 -2
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +1 -1
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon.css +4 -2
  6. package/css/index-without-carbon.css.map +1 -1
  7. package/css/index-without-carbon.min.css +1 -1
  8. package/css/index-without-carbon.min.css.map +1 -1
  9. package/css/index.css +4 -2
  10. package/css/index.css.map +1 -1
  11. package/css/index.min.css +1 -1
  12. package/css/index.min.css.map +1 -1
  13. package/es/components/DataSpreadsheet/DataSpreadsheet.js +2 -2
  14. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +34 -5
  15. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +1 -1
  16. package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +8 -4
  17. package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +3 -1
  18. package/es/components/DataSpreadsheet/utils/getCellSize.js +10 -10
  19. package/es/components/DataSpreadsheet/utils/moveColumnIndicatorLine.js +4 -3
  20. package/es/components/ExportModal/ExportModal.js +1 -1
  21. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +2 -2
  22. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +34 -5
  23. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +1 -1
  24. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +8 -4
  25. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +3 -1
  26. package/lib/components/DataSpreadsheet/utils/getCellSize.js +4 -4
  27. package/lib/components/DataSpreadsheet/utils/moveColumnIndicatorLine.js +4 -3
  28. package/lib/components/ExportModal/ExportModal.js +1 -1
  29. package/package.json +2 -2
  30. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +6 -0
@@ -4,7 +4,7 @@
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- import { baseFontSize, sizeXSmall as compact, sizeSmall as standard, sizeMedium as medium, sizeLarge as large } from '@carbon/layout';
7
+ import { baseFontSize, sizeXSmall as xs, sizeSmall as sm, sizeMedium as md, sizeLarge as lg } from '@carbon/layout';
8
8
 
9
9
  var getSizeInPixels = function getSizeInPixels(carbonSize) {
10
10
  return Number(carbonSize.replace('rem', '') * baseFontSize);
@@ -12,19 +12,19 @@ var getSizeInPixels = function getSizeInPixels(carbonSize) {
12
12
 
13
13
  export var getCellSize = function getCellSize(cellSize) {
14
14
  switch (cellSize) {
15
- case 'compact':
16
- return getSizeInPixels(compact);
15
+ case 'xs':
16
+ return getSizeInPixels(xs);
17
17
 
18
- case 'standard':
19
- return getSizeInPixels(standard);
18
+ case 'sm':
19
+ return getSizeInPixels(sm);
20
20
 
21
- case 'medium':
22
- return getSizeInPixels(medium);
21
+ case 'md':
22
+ return getSizeInPixels(md);
23
23
 
24
- case 'large':
25
- return getSizeInPixels(large);
24
+ case 'lg':
25
+ return getSizeInPixels(lg);
26
26
 
27
27
  default:
28
- return getSizeInPixels(standard);
28
+ return getSizeInPixels(sm);
29
29
  }
30
30
  };
@@ -11,7 +11,8 @@ export var moveColumnIndicatorLine = function moveColumnIndicatorLine(_ref) {
11
11
  blockClass = _ref$blockClass === void 0 ? "".concat(pkg.prefix, "--data-spreadsheet") : _ref$blockClass,
12
12
  clonedSelectionElement = _ref.clonedSelectionElement,
13
13
  ref = _ref.ref,
14
- spreadsheetCoords = _ref.spreadsheetCoords;
14
+ spreadsheetCoords = _ref.spreadsheetCoords,
15
+ leftScrollAmount = _ref.leftScrollAmount;
15
16
  var closestCell = event.target.closest(".".concat(blockClass, "--interactive-cell-element"));
16
17
  var newColumnIndex = closestCell === null || closestCell === void 0 ? void 0 : closestCell.getAttribute('data-column-index');
17
18
  var originalColumnIndex = clonedSelectionElement === null || clonedSelectionElement === void 0 ? void 0 : clonedSelectionElement.getAttribute('data-column-index-original');
@@ -21,11 +22,11 @@ export var moveColumnIndicatorLine = function moveColumnIndicatorLine(_ref) {
21
22
  var selectionAreaOrigin = ref.current.querySelector("[data-matcher-id=\"".concat(matcherId, "\"]"));
22
23
 
23
24
  if (Number(newColumnIndex) > Number(originalColumnIndex)) {
24
- indicatorLineElement.style.left = px(closestCellCoords.left - spreadsheetCoords.left + closestCell.offsetWidth - 2);
25
+ indicatorLineElement.style.left = px(closestCellCoords.left - spreadsheetCoords.left + closestCell.offsetWidth - 2 + leftScrollAmount);
25
26
  }
26
27
 
27
28
  if (Number(newColumnIndex) < Number(originalColumnIndex)) {
28
- indicatorLineElement.style.left = px(closestCellCoords.left - spreadsheetCoords.left);
29
+ indicatorLineElement.style.left = px(closestCellCoords.left - spreadsheetCoords.left + leftScrollAmount);
29
30
  }
30
31
 
31
32
  if (Number(newColumnIndex) === Number(originalColumnIndex)) {
@@ -79,7 +79,7 @@ export var ExportModal = /*#__PURE__*/forwardRef(function (_ref, ref) {
79
79
 
80
80
  setName(filename);
81
81
  setExtension(preformattedExtensions === null || preformattedExtensions === void 0 ? void 0 : (_preformattedExtensio = preformattedExtensions[0]) === null || _preformattedExtensio === void 0 ? void 0 : _preformattedExtensio.extension);
82
- }, [filename, preformattedExtensions]);
82
+ }, [filename, preformattedExtensions, open]);
83
83
 
84
84
  var onNameChangeHandler = function onNameChangeHandler(evt) {
85
85
  setName(evt.target.value);
@@ -81,7 +81,7 @@ var blockClass = "".concat(_settings.pkg.prefix, "--data-spreadsheet");
81
81
  var componentName = 'DataSpreadsheet'; // Default values for props
82
82
 
83
83
  var defaults = {
84
- cellSize: 'standard',
84
+ cellSize: 'sm',
85
85
  columns: Object.freeze([]),
86
86
  data: Object.freeze([]),
87
87
  defaultEmptyRowCount: 16,
@@ -900,7 +900,7 @@ DataSpreadsheet.propTypes = {
900
900
  /**
901
901
  * Specifies the cell height
902
902
  */
903
- cellSize: _propTypes.default.oneOf(['compact', 'standard', 'medium', 'large']),
903
+ cellSize: _propTypes.default.oneOf(['xs', 'sm', 'md', 'lg']),
904
904
 
905
905
  /**
906
906
  * Provide an optional class to be applied to the containing node.
@@ -96,7 +96,8 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
96
96
  var contentScrollRef = (0, _react.useRef)();
97
97
  var previousState = (0, _hooks.usePreviousValue)({
98
98
  selectionAreaData: selectionAreaData,
99
- clickAndHoldActive: clickAndHoldActive
99
+ clickAndHoldActive: clickAndHoldActive,
100
+ rowHeight: defaultColumn.rowHeight
100
101
  }); // Set custom css property containing the spreadsheet total width
101
102
 
102
103
  (0, _react.useEffect)(function () {
@@ -176,7 +177,7 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
176
177
 
177
178
  for (var rowIndex = rowStart; rowIndex <= rowEnd; rowIndex++) {
178
179
  for (var columnIndex = columnStart; columnIndex <= columnEnd; columnIndex++) {
179
- cellContainer.push([rowIndex, columnIndex]);
180
+ cellContainer.push([rowIndex, columnIndex, "".concat(blockClass, "__cell--").concat(rowIndex, "--").concat(columnIndex)]);
180
181
  }
181
182
  }
182
183
 
@@ -198,16 +199,44 @@ var DataSpreadsheetBody = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, re
198
199
  activeCellCoordinates: activeCellCoordinates,
199
200
  defaultColumn: defaultColumn
200
201
  }); // Make sure that if the cellSize prop changes, the active
201
- // cell also gets updated with the new size
202
+ // cell also gets updated with the new size and new top placement
203
+ // value. All of the cell selections will be updated as well
202
204
 
203
205
  (0, _react.useEffect)(function () {
204
206
  var listContainer = spreadsheetBodyRef === null || spreadsheetBodyRef === void 0 ? void 0 : spreadsheetBodyRef.current;
205
207
  var activeCellButton = listContainer.querySelector(".".concat(blockClass, "__active-cell--highlight"));
206
208
 
207
- if (activeCellButton) {
209
+ if (activeCellButton && defaultColumn.rowHeight !== previousState.rowHeight) {
208
210
  activeCellButton.style.height = "".concat(defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeight, "px");
211
+
212
+ if (activeCellCoordinates) {
213
+ var activeTargetElement = ref.current.querySelector("[data-row-index=\"".concat(activeCellCoordinates.row, "\"][data-column-index=\"").concat(activeCellCoordinates.column, "\"]"));
214
+
215
+ var _listContainer = ref.current.querySelector(".".concat(blockClass, "__list--container"));
216
+
217
+ var newActiveCellTopPosition = activeTargetElement.getBoundingClientRect().top - _listContainer.getBoundingClientRect().top;
218
+
219
+ activeCellButton.style.top = (0, _layout.px)(newActiveCellTopPosition);
220
+ (0, _removeCellSelections.removeCellSelections)({
221
+ spreadsheetRef: ref
222
+ });
223
+ selectionAreas.map(function (area) {
224
+ if (!area.areaCreated && area.point1 && area.point2 && area.matcher) {
225
+ return (0, _createCellSelectionArea.createCellSelectionArea)({
226
+ ref: ref,
227
+ area: area,
228
+ blockClass: blockClass,
229
+ defaultColumn: defaultColumn,
230
+ selectionAreas: selectionAreas,
231
+ setSelectionAreas: setSelectionAreas,
232
+ setActiveCellInsideSelectionArea: setActiveCellInsideSelectionArea,
233
+ visibleColumns: visibleColumns
234
+ });
235
+ }
236
+ });
237
+ }
209
238
  }
210
- }, [defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeight]); // onClick fn for each cell in the data spreadsheet body,
239
+ }, [defaultColumn, ref, activeCellCoordinates, previousState === null || previousState === void 0 ? void 0 : previousState.rowHeight, selectionAreas, setActiveCellInsideSelectionArea, setSelectionAreas, visibleColumns]); // onClick fn for each cell in the data spreadsheet body,
211
240
  // adds the active cell highlight
212
241
 
213
242
  var handleBodyCellClick = (0, _react.useCallback)(function (cell, columnIndex) {
@@ -230,7 +230,7 @@ DataSpreadsheetHeader.propTypes = {
230
230
  /**
231
231
  * Specifies the cell height
232
232
  */
233
- cellSize: _propTypes.default.oneOf(['compact', 'standard', 'medium', 'large']),
233
+ cellSize: _propTypes.default.oneOf(['xs', 'sm', 'md', 'lg']),
234
234
 
235
235
  /**
236
236
  * All of the spreadsheet columns
@@ -38,21 +38,25 @@ var useSpreadsheetMouseMove = function useSpreadsheetMouseMove(_ref) {
38
38
  }
39
39
 
40
40
  var spreadsheetCoords = ref.current.getBoundingClientRect();
41
+ var listContainer = ref.current.querySelector(".".concat(blockClass, "__list--container"));
42
+ var scrollAmount = listContainer.scrollLeft;
41
43
  (0, _moveColumnIndicatorLine.moveColumnIndicatorLine)({
42
44
  clonedSelectionElement: clonedSelectionElement,
43
45
  ref: ref,
44
- spreadsheetCoords: spreadsheetCoords
46
+ spreadsheetCoords: spreadsheetCoords,
47
+ leftScrollAmount: scrollAmount
45
48
  });
46
49
  var scrollbarWidth = (0, _getScrollbarWidth.getScrollbarWidth)();
47
50
  var spreadsheetWrapperElement = ref.current;
48
51
  spreadsheetWrapperElement.getBoundingClientRect();
49
52
  var xPositionRelativeToSpreadsheet = event.clientX - spreadsheetCoords.left;
50
53
  var offsetXValue = clonedSelectionElement === null || clonedSelectionElement === void 0 ? void 0 : clonedSelectionElement.getAttribute('data-clone-offset-x');
51
- var totalSpreadsheetWidth = ref.current.offsetWidth;
54
+ var totalSpreadsheetScrollingWidth = listContainer.scrollWidth;
52
55
  var clonedSelectionWidth = clonedSelectionElement.offsetWidth;
53
- var clonePlacement = Math.max(xPositionRelativeToSpreadsheet - offsetXValue, defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth); // Moves the position of the cloned selection area to follow mouse
56
+ var clonePlacement = Math.max(xPositionRelativeToSpreadsheet - offsetXValue, defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth); // Moves the position of the cloned selection area to follow mouse, and
57
+ // add the amount horizontally scrolled
54
58
 
55
- clonedSelectionElement.style.left = (0, _layout.px)(totalSpreadsheetWidth - clonedSelectionWidth - scrollbarWidth >= clonePlacement ? clonePlacement : totalSpreadsheetWidth - clonedSelectionWidth - scrollbarWidth);
59
+ clonedSelectionElement.style.left = (0, _layout.px)(totalSpreadsheetScrollingWidth - clonedSelectionWidth - scrollbarWidth >= clonePlacement ? clonePlacement + scrollAmount : totalSpreadsheetScrollingWidth - clonedSelectionWidth - scrollbarWidth);
56
60
  };
57
61
 
58
62
  if (headerCellHoldActive) {
@@ -64,7 +64,9 @@ var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
64
64
  var selectionAreaToMove = ref.current.querySelector("[data-matcher-id=\"".concat(currentMatcher, "\"]"));
65
65
  var spreadsheetPosition = ref.current.getBoundingClientRect();
66
66
  var newIndexPosition = columnToMoveToElement.getBoundingClientRect();
67
- var relativeNewPosition = newIndexPosition.left - spreadsheetPosition.left;
67
+ var listContainer = ref.current.querySelector(".".concat(blockClass, "__list--container"));
68
+ var leftScrollAmount = listContainer.scrollLeft;
69
+ var relativeNewPosition = newIndexPosition.left - spreadsheetPosition.left + leftScrollAmount;
68
70
  var cloneColumnWidth = selectionAreaCloneElement.offsetWidth;
69
71
  var columnsWidthUpToNewIndex = 0;
70
72
  var newIndexLessThanStarting = newColumnIndex < originalColumnIndex;
@@ -19,16 +19,16 @@ var getSizeInPixels = function getSizeInPixels(carbonSize) {
19
19
 
20
20
  var getCellSize = function getCellSize(cellSize) {
21
21
  switch (cellSize) {
22
- case 'compact':
22
+ case 'xs':
23
23
  return getSizeInPixels(_layout.sizeXSmall);
24
24
 
25
- case 'standard':
25
+ case 'sm':
26
26
  return getSizeInPixels(_layout.sizeSmall);
27
27
 
28
- case 'medium':
28
+ case 'md':
29
29
  return getSizeInPixels(_layout.sizeMedium);
30
30
 
31
- case 'large':
31
+ case 'lg':
32
32
  return getSizeInPixels(_layout.sizeLarge);
33
33
 
34
34
  default:
@@ -20,7 +20,8 @@ var moveColumnIndicatorLine = function moveColumnIndicatorLine(_ref) {
20
20
  blockClass = _ref$blockClass === void 0 ? "".concat(_settings.pkg.prefix, "--data-spreadsheet") : _ref$blockClass,
21
21
  clonedSelectionElement = _ref.clonedSelectionElement,
22
22
  ref = _ref.ref,
23
- spreadsheetCoords = _ref.spreadsheetCoords;
23
+ spreadsheetCoords = _ref.spreadsheetCoords,
24
+ leftScrollAmount = _ref.leftScrollAmount;
24
25
  var closestCell = event.target.closest(".".concat(blockClass, "--interactive-cell-element"));
25
26
  var newColumnIndex = closestCell === null || closestCell === void 0 ? void 0 : closestCell.getAttribute('data-column-index');
26
27
  var originalColumnIndex = clonedSelectionElement === null || clonedSelectionElement === void 0 ? void 0 : clonedSelectionElement.getAttribute('data-column-index-original');
@@ -30,11 +31,11 @@ var moveColumnIndicatorLine = function moveColumnIndicatorLine(_ref) {
30
31
  var selectionAreaOrigin = ref.current.querySelector("[data-matcher-id=\"".concat(matcherId, "\"]"));
31
32
 
32
33
  if (Number(newColumnIndex) > Number(originalColumnIndex)) {
33
- indicatorLineElement.style.left = (0, _layout.px)(closestCellCoords.left - spreadsheetCoords.left + closestCell.offsetWidth - 2);
34
+ indicatorLineElement.style.left = (0, _layout.px)(closestCellCoords.left - spreadsheetCoords.left + closestCell.offsetWidth - 2 + leftScrollAmount);
34
35
  }
35
36
 
36
37
  if (Number(newColumnIndex) < Number(originalColumnIndex)) {
37
- indicatorLineElement.style.left = (0, _layout.px)(closestCellCoords.left - spreadsheetCoords.left);
38
+ indicatorLineElement.style.left = (0, _layout.px)(closestCellCoords.left - spreadsheetCoords.left + leftScrollAmount);
38
39
  }
39
40
 
40
41
  if (Number(newColumnIndex) === Number(originalColumnIndex)) {
@@ -100,7 +100,7 @@ var ExportModal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
100
100
 
101
101
  setName(filename);
102
102
  setExtension(preformattedExtensions === null || preformattedExtensions === void 0 ? void 0 : (_preformattedExtensio = preformattedExtensions[0]) === null || _preformattedExtensio === void 0 ? void 0 : _preformattedExtensio.extension);
103
- }, [filename, preformattedExtensions]);
103
+ }, [filename, preformattedExtensions, open]);
104
104
 
105
105
  var onNameChangeHandler = function onNameChangeHandler(evt) {
106
106
  setName(evt.target.value);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carbon/ibm-products",
3
3
  "description": "Carbon for IBM Products",
4
- "version": "1.18.1",
4
+ "version": "1.18.2",
5
5
  "license": "Apache-2.0",
6
6
  "main": "lib/index.js",
7
7
  "module": "es/index.js",
@@ -93,5 +93,5 @@
93
93
  "react": "^16.8.6 || ^17.0.1",
94
94
  "react-dom": "^16.8.6 || ^17.0.1"
95
95
  },
96
- "gitHead": "af43f7248a6bf9c65da17758b2345aad9808c317"
96
+ "gitHead": "70599ae0b945e59183b28a57c44b50119e89ae9d"
97
97
  }
@@ -12,6 +12,10 @@
12
12
  // Define all component styles in a mixin which is then exported using
13
13
  // the Carbon import-once mechanism.
14
14
  @mixin set-header-borders {
15
+ border-right: 1px solid $active-ui;
16
+ border-bottom: 1px solid $active-ui;
17
+ }
18
+ @mixin set-active-header-borders {
15
19
  border-right: 1px solid $text-03;
16
20
  border-bottom: 1px solid $text-03;
17
21
  }
@@ -214,6 +218,8 @@
214
218
  }
215
219
  .#{$block-class}__th--active-header,
216
220
  .#{$block-class}__td-th--active-header.#{$block-class}__td {
221
+ @include set-active-header-borders();
222
+
217
223
  background-color: $hover-selected-ui;
218
224
  }
219
225
  .#{$block-class}__th--selected-header,