@carbon/ibm-products 2.43.2-canary.1 → 2.43.2-canary.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. package/css/index-full-carbon.css +3 -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-released-only.css.map +1 -1
  6. package/css/index-without-carbon-released-only.min.css.map +1 -1
  7. package/css/index-without-carbon.css +3 -2
  8. package/css/index-without-carbon.css.map +1 -1
  9. package/css/index-without-carbon.min.css +1 -1
  10. package/css/index-without-carbon.min.css.map +1 -1
  11. package/css/index.css +3 -2
  12. package/css/index.css.map +1 -1
  13. package/css/index.min.css +1 -1
  14. package/css/index.min.css.map +1 -1
  15. package/es/components/DataSpreadsheet/DataSpreadsheet.js +22 -12
  16. package/es/components/DataSpreadsheet/DataSpreadsheetBody.d.ts +9 -1
  17. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +18 -2
  18. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.d.ts +8 -0
  19. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +17 -6
  20. package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +4 -1
  21. package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.d.ts +3 -1
  22. package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +15 -3
  23. package/es/components/DataSpreadsheet/types/index.d.ts +1 -1
  24. package/es/components/DataSpreadsheet/utils/moveColumnIndicatorLine.js +34 -2
  25. package/es/components/Datagrid/types/index.d.ts +5 -1
  26. package/es/components/Datagrid/useColumnCenterAlign.d.ts +8 -1
  27. package/es/components/Datagrid/useColumnCenterAlign.js +1 -1
  28. package/es/components/Datagrid/useInlineEdit.d.ts +8 -1
  29. package/es/components/Datagrid/useInlineEdit.js +1 -1
  30. package/es/components/Decorator/Decorator.js +2 -1
  31. package/es/components/DecoratorBase/DecoratorBase.js +3 -5
  32. package/es/components/DecoratorDualButton/DecoratorDualButton.js +2 -1
  33. package/es/components/DecoratorLink/DecoratorLink.js +2 -1
  34. package/es/components/DecoratorSingleButton/DecoratorSingleButton.js +2 -1
  35. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +22 -12
  36. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.d.ts +9 -1
  37. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +18 -2
  38. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.d.ts +8 -0
  39. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +17 -6
  40. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +4 -1
  41. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.d.ts +3 -1
  42. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +15 -3
  43. package/lib/components/DataSpreadsheet/types/index.d.ts +1 -1
  44. package/lib/components/DataSpreadsheet/utils/moveColumnIndicatorLine.js +34 -2
  45. package/lib/components/Datagrid/types/index.d.ts +5 -1
  46. package/lib/components/Datagrid/useColumnCenterAlign.d.ts +8 -1
  47. package/lib/components/Datagrid/useColumnCenterAlign.js +1 -1
  48. package/lib/components/Datagrid/useInlineEdit.d.ts +8 -1
  49. package/lib/components/Datagrid/useInlineEdit.js +1 -1
  50. package/lib/components/Decorator/Decorator.js +2 -1
  51. package/lib/components/DecoratorBase/DecoratorBase.js +3 -5
  52. package/lib/components/DecoratorDualButton/DecoratorDualButton.js +2 -1
  53. package/lib/components/DecoratorLink/DecoratorLink.js +2 -1
  54. package/lib/components/DecoratorSingleButton/DecoratorSingleButton.js +2 -1
  55. package/package.json +4 -4
  56. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +1 -0
  57. package/scss/components/StatusIcon/_status-icon.scss +4 -4
  58. package/scss/components/StringFormatter/_string-formatter.scss +2 -2
  59. package/scss/components/UserProfileImage/_user-profile-image.scss +6 -2
@@ -79,7 +79,15 @@ interface DataSpreadsheetBodyProps {
79
79
  /**
80
80
  * Array of selection area data
81
81
  */
82
- selectionAreaData?: object[];
82
+ selectionAreaData?: any[];
83
+ /**
84
+ * Header reordering is active
85
+ */
86
+ selectedHeaderReorderActive?: boolean;
87
+ /**
88
+ * Set header reordering active or not
89
+ */
90
+ setSelectedHeaderReorderActive?: Dispatch<SetStateAction<boolean>>;
83
91
  /**
84
92
  * Array of selection areas
85
93
  */
@@ -40,6 +40,8 @@ var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
40
40
  selectionAreaData = _ref.selectionAreaData,
41
41
  setSelectionAreaData = _ref.setSelectionAreaData,
42
42
  setActiveCellCoordinates = _ref.setActiveCellCoordinates,
43
+ selectedHeaderReorderActive = _ref.selectedHeaderReorderActive,
44
+ setSelectedHeaderReorderActive = _ref.setSelectedHeaderReorderActive,
43
45
  selectionAreas = _ref.selectionAreas,
44
46
  setContainerHasFocus = _ref.setContainerHasFocus,
45
47
  setSelectionAreas = _ref.setSelectionAreas,
@@ -75,8 +77,12 @@ var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
75
77
  // back to the consumer
76
78
  useEffect(function () {
77
79
  if (selectionAreaData !== null && selectionAreaData !== void 0 && selectionAreaData.length) {
78
- var _previousState$select;
79
- if (!clickAndHoldActive && previousState !== null && previousState !== void 0 && previousState.clickAndHoldActive || (previousState === null || previousState === 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)) {
80
+ var _previousState$select, _selectionAreaData$, _previousState$select2;
81
+ var selectionChanged = false;
82
+ if ((previousState === null || previousState === 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) || (selectionAreaData === null || selectionAreaData === void 0 || (_selectionAreaData$ = selectionAreaData[0]) === null || _selectionAreaData$ === void 0 ? void 0 : _selectionAreaData$.cells.length) !== (previousState === null || previousState === void 0 || (_previousState$select2 = previousState.selectionAreaData) === null || _previousState$select2 === void 0 || (_previousState$select2 = _previousState$select2[0]) === null || _previousState$select2 === void 0 ? void 0 : _previousState$select2.cells.length)) {
83
+ selectionChanged = true;
84
+ }
85
+ if (!clickAndHoldActive && previousState !== null && previousState !== void 0 && previousState.clickAndHoldActive || selectionChanged) {
80
86
  onSelectionAreaChange === null || onSelectionAreaChange === void 0 || onSelectionAreaChange(selectionAreaData);
81
87
  }
82
88
  }
@@ -151,6 +157,8 @@ var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
151
157
  setClickAndHoldActive: setClickAndHoldActive,
152
158
  setSelectionAreas: setSelectionAreas,
153
159
  setValidStartingPoint: setValidStartingPoint,
160
+ selectedHeaderReorderActive: selectedHeaderReorderActive,
161
+ setSelectedHeaderReorderActive: setSelectedHeaderReorderActive,
154
162
  validStartingPoint: validStartingPoint,
155
163
  ref: ref,
156
164
  setHeaderCellHoldActive: setHeaderCellHoldActive,
@@ -457,6 +465,10 @@ DataSpreadsheetBody.propTypes = {
457
465
  * The scrollbar width
458
466
  */
459
467
  scrollBarSize: PropTypes.number,
468
+ /**
469
+ * Header reordering is active
470
+ */
471
+ selectedHeaderReorderActive: PropTypes.bool,
460
472
  /**
461
473
  * Array of selection area data
462
474
  */
@@ -493,6 +505,10 @@ DataSpreadsheetBody.propTypes = {
493
505
  * Setter fn for header cell hold active value
494
506
  */
495
507
  setHeaderCellHoldActive: PropTypes.func,
508
+ /**
509
+ * Set header reordering active or not
510
+ */
511
+ setSelectedHeaderReorderActive: PropTypes.func,
496
512
  /**
497
513
  * Setter fn for selectionAreaData state value
498
514
  */
@@ -56,6 +56,14 @@ interface DataSpreadsheetHeaderProps {
56
56
  * Setter fn for activeCellCoordinates value
57
57
  */
58
58
  setActiveCellCoordinates?: Dispatch<SetStateAction<ActiveCellCoordinates | null>>;
59
+ /**
60
+ * Header reordering is active
61
+ */
62
+ selectedHeaderReorderActive?: boolean;
63
+ /**
64
+ * Set header reordering active or not
65
+ */
66
+ setSelectedHeaderReorderActive?: Dispatch<SetStateAction<boolean>>;
59
67
  /**
60
68
  * Setter fn for currentMatcher value
61
69
  */
@@ -31,6 +31,8 @@ var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref) {
31
31
  headerGroups = _ref.headerGroups,
32
32
  scrollBarSize = _ref.scrollBarSize,
33
33
  selectionAreas = _ref.selectionAreas,
34
+ selectedHeaderReorderActive = _ref.selectedHeaderReorderActive,
35
+ setSelectedHeaderReorderActive = _ref.setSelectedHeaderReorderActive,
34
36
  setActiveCellCoordinates = _ref.setActiveCellCoordinates,
35
37
  setCurrentMatcher = _ref.setCurrentMatcher,
36
38
  setSelectionAreas = _ref.setSelectionAreas,
@@ -46,10 +48,6 @@ var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref) {
46
48
  _useState2 = _slicedToArray(_useState, 2),
47
49
  scrollBarSizeValue = _useState2[0],
48
50
  setScrollBarSizeValue = _useState2[1];
49
- var _useState3 = useState(false),
50
- _useState4 = _slicedToArray(_useState3, 2),
51
- selectedHeaderReorderActive = _useState4[0],
52
- setSelectedHeaderReorderActive = _useState4[1];
53
51
  var previousState = usePreviousValue({
54
52
  cellSize: cellSize
55
53
  }) || {};
@@ -107,11 +105,16 @@ var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref) {
107
105
  // Remove columns, need to call handleHeaderCellSelection
108
106
  return;
109
107
  }
110
- setSelectedHeaderReorderActive(true);
111
108
  var selectionAreaToClone = selectionAreas === null || selectionAreas === void 0 ? void 0 : selectionAreas.filter(function (item) {
112
109
  return (item === null || item === void 0 ? void 0 : item.matcher) === currentMatcher;
113
110
  });
114
111
  var selectionAreaElement = ref.current.querySelector("[data-matcher-id=\"".concat(selectionAreaToClone === null || selectionAreaToClone === void 0 || (_selectionAreaToClone = selectionAreaToClone[0]) === null || _selectionAreaToClone === void 0 ? void 0 : _selectionAreaToClone.matcher, "\"]"));
112
+ if (selectionAreaElement) {
113
+ selectionAreaElement.classList.add("".concat(blockClass, "__selection-area--element"));
114
+ }
115
+ if (typeof setSelectedHeaderReorderActive === 'function') {
116
+ setSelectedHeaderReorderActive(true);
117
+ }
115
118
  var clickXPosition = event.clientX;
116
119
  var headerButtonCoords = event.target.getBoundingClientRect();
117
120
  var headerIndex = event.target.getAttribute('data-column-index');
@@ -189,7 +192,7 @@ var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref) {
189
192
  "data-column-index": index,
190
193
  tabIndex: -1,
191
194
  onMouseDown: selectedHeader ? handleHeaderMouseDown(index) : undefined,
192
- onMouseUp: selectedHeader ? function () {
195
+ onMouseUp: selectedHeader && typeof setSelectedHeaderReorderActive === 'function' ? function () {
193
196
  return setSelectedHeaderReorderActive(false);
194
197
  } : undefined,
195
198
  onClick: !selectedHeader ? handleColumnHeaderClick(index) : undefined,
@@ -254,6 +257,10 @@ DataSpreadsheetHeader.propTypes = {
254
257
  * The aria label applied to the Select all button
255
258
  */
256
259
  selectAllAriaLabel: PropTypes.string.isRequired,
260
+ /**
261
+ * Header reordering is active
262
+ */
263
+ selectedHeaderReorderActive: PropTypes.bool,
257
264
  /**
258
265
  * All of the cell selection area items
259
266
  */
@@ -271,6 +278,10 @@ DataSpreadsheetHeader.propTypes = {
271
278
  * Setter fn for header cell hold active value
272
279
  */
273
280
  setHeaderCellHoldActive: PropTypes.func,
281
+ /**
282
+ * Set header reordering active or not
283
+ */
284
+ setSelectedHeaderReorderActive: PropTypes.func,
274
285
  /**
275
286
  * Setter fn for selectionAreaData state value
276
287
  */
@@ -40,9 +40,12 @@ var useSpreadsheetMouseMove = function useSpreadsheetMouseMove(_ref) {
40
40
  var totalSpreadsheetScrollingWidth = listContainer.scrollWidth;
41
41
  var clonedSelectionWidth = clonedSelectionElement.offsetWidth;
42
42
  var clonePlacement = Math.max(xPositionRelativeToSpreadsheet - offsetXValue, defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth);
43
+ var leftPosition = totalSpreadsheetScrollingWidth - clonedSelectionWidth >= clonePlacement ? clonePlacement + scrollAmount : totalSpreadsheetScrollingWidth - clonedSelectionWidth;
43
44
  // Moves the position of the cloned selection area to follow mouse, and
44
45
  // add the amount horizontally scrolled
45
- clonedSelectionElement.style.left = px(totalSpreadsheetScrollingWidth - clonedSelectionWidth >= clonePlacement ? clonePlacement + scrollAmount : totalSpreadsheetScrollingWidth - clonedSelectionWidth);
46
+ if (leftPosition < spreadsheetCoords.right - 40) {
47
+ clonedSelectionElement.style.left = px(leftPosition);
48
+ }
46
49
  };
47
50
  if (headerCellHoldActive) {
48
51
  ref.current.addEventListener('mousemove', handleMouseMove);
@@ -1,6 +1,8 @@
1
- export function useSpreadsheetMouseUp({ currentMatcher, setSelectionAreas, setClickAndHoldActive, setValidStartingPoint, validStartingPoint, blockClass, ref, setHeaderCellHoldActive, setColumnOrder, visibleColumns, setActiveCellCoordinates, activeCellCoordinates, rows, defaultColumn, selectionAreas, }: {
1
+ export function useSpreadsheetMouseUp({ currentMatcher, setSelectionAreas, selectedHeaderReorderActive, setSelectedHeaderReorderActive, setClickAndHoldActive, setValidStartingPoint, validStartingPoint, blockClass, ref, setHeaderCellHoldActive, setColumnOrder, visibleColumns, setActiveCellCoordinates, activeCellCoordinates, rows, defaultColumn, selectionAreas, }: {
2
2
  currentMatcher: any;
3
3
  setSelectionAreas: any;
4
+ selectedHeaderReorderActive: any;
5
+ setSelectedHeaderReorderActive: any;
4
6
  setClickAndHoldActive: any;
5
7
  setValidStartingPoint: any;
6
8
  validStartingPoint: any;
@@ -14,6 +14,8 @@ import { deepCloneObject } from '../../../global/js/utils/deepCloneObject.js';
14
14
  var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
15
15
  var currentMatcher = _ref.currentMatcher,
16
16
  setSelectionAreas = _ref.setSelectionAreas,
17
+ selectedHeaderReorderActive = _ref.selectedHeaderReorderActive,
18
+ setSelectedHeaderReorderActive = _ref.setSelectedHeaderReorderActive,
17
19
  setClickAndHoldActive = _ref.setClickAndHoldActive,
18
20
  setValidStartingPoint = _ref.setValidStartingPoint,
19
21
  validStartingPoint = _ref.validStartingPoint,
@@ -30,15 +32,22 @@ var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
30
32
  selectionAreas = _ref.selectionAreas;
31
33
  useEffect(function () {
32
34
  var handleMouseUp = function handleMouseUp(event) {
35
+ var _selectionAreas$;
36
+ var isHoldingColumn = false;
37
+ if (selectionAreas !== null && selectionAreas !== void 0 && (_selectionAreas$ = selectionAreas[0]) !== null && _selectionAreas$ !== void 0 && _selectionAreas$.header && selectionAreas[0].header.type === 'column') {
38
+ isHoldingColumn = true;
39
+ }
33
40
  // Remove the cloned selection area on mouse up
34
- if (!validStartingPoint) {
41
+ if (!validStartingPoint && isHoldingColumn) {
35
42
  setHeaderCellHoldActive(false);
43
+ var selectionAreaElement = ref.current.querySelector(".".concat(blockClass, "__selection-area--element"));
36
44
  var selectionAreaCloneElement = ref.current.querySelector(".".concat(blockClass, "__selection-area--element-cloned"));
37
45
  if (!selectionAreaCloneElement) {
38
46
  return;
39
47
  }
40
48
  // Mouse up while a cloned selection area exists/a column is being reordered
41
49
  if (selectionAreaCloneElement) {
50
+ var _selectionAreaElement;
42
51
  var closestCell = event.target.closest(".".concat(blockClass, "--interactive-cell-element"));
43
52
  var newColumnIndex = parseInt === null || parseInt === void 0 ? void 0 : parseInt(closestCell === null || closestCell === void 0 ? void 0 : closestCell.getAttribute('data-column-index'));
44
53
  var originalColumnIndex = parseInt === null || parseInt === void 0 ? void 0 : parseInt(selectionAreaCloneElement === null || selectionAreaCloneElement === void 0 ? void 0 : selectionAreaCloneElement.getAttribute('data-column-index-original'));
@@ -81,6 +90,7 @@ var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
81
90
  selectionAreaClone[indexOfItemToUpdate].point1.column = Math.min.apply(Math, _toConsumableArray(newIndexArray));
82
91
  selectionAreaClone[indexOfItemToUpdate].point2.column = Math.max.apply(Math, _toConsumableArray(newIndexArray));
83
92
  }
93
+ selectionAreaClone[indexOfItemToUpdate].areaCreated = false;
84
94
  return selectionAreaClone;
85
95
  });
86
96
  // Only reorder columns if the new index is _not_ part of the
@@ -125,11 +135,13 @@ var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
125
135
  var indicatorLineElement = ref.current.querySelector(".".concat(blockClass, "__reorder-indicator-line"));
126
136
  indicatorLineElement === null || indicatorLineElement === void 0 || indicatorLineElement.remove();
127
137
  selectionAreaCloneElement === null || selectionAreaCloneElement === void 0 || selectionAreaCloneElement.remove();
138
+ selectionAreaElement === null || selectionAreaElement === void 0 || (_selectionAreaElement = selectionAreaElement.classList) === null || _selectionAreaElement === void 0 || _selectionAreaElement.remove("".concat(blockClass, "__selection-area--element"));
139
+ setSelectedHeaderReorderActive(false);
128
140
  }
129
141
  }
130
142
  // Mouse up was on a spreadsheet body cell which is a valid
131
143
  // start/end point for creating a selection area
132
- if (validStartingPoint) {
144
+ if (validStartingPoint || event.type === 'mouseup') {
133
145
  setClickAndHoldActive(false);
134
146
  setValidStartingPoint(false);
135
147
  var cellButton = event.target.closest(".".concat(blockClass, "__body--td"));
@@ -158,7 +170,7 @@ var useSpreadsheetMouseUp = function useSpreadsheetMouseUp(_ref) {
158
170
  return function () {
159
171
  document.removeEventListener('mouseup', handleMouseUp);
160
172
  };
161
- }, [blockClass, currentMatcher, setSelectionAreas, setClickAndHoldActive, setValidStartingPoint, validStartingPoint, ref, setHeaderCellHoldActive, setColumnOrder, visibleColumns, setActiveCellCoordinates, activeCellCoordinates, rows, defaultColumn, selectionAreas]);
173
+ }, [blockClass, currentMatcher, setSelectionAreas, setClickAndHoldActive, setValidStartingPoint, validStartingPoint, selectedHeaderReorderActive, setSelectedHeaderReorderActive, ref, setHeaderCellHoldActive, setColumnOrder, visibleColumns, setActiveCellCoordinates, activeCellCoordinates, rows, defaultColumn, selectionAreas]);
162
174
  };
163
175
 
164
176
  export { useSpreadsheetMouseUp };
@@ -13,7 +13,7 @@ export interface PrevState {
13
13
  cellEditorValue?: string;
14
14
  activeCellCoordinates?: ActiveCellCoordinates;
15
15
  isEditing?: boolean;
16
- selectionAreaData?: object[];
16
+ selectionAreaData?: any[];
17
17
  clickAndHoldActive?: boolean;
18
18
  rowHeight?: number;
19
19
  cellSize?: Size;
@@ -22,11 +22,43 @@ var moveColumnIndicatorLine = function moveColumnIndicatorLine(_ref) {
22
22
  var indicatorLineElement = ref.current.querySelector(".".concat(blockClass, "__reorder-indicator-line"));
23
23
  var matcherId = clonedSelectionElement === null || clonedSelectionElement === void 0 ? void 0 : clonedSelectionElement.getAttribute('data-matcher-id');
24
24
  var selectionAreaOrigin = ref.current.querySelector("[data-matcher-id=\"".concat(matcherId, "\"]"));
25
+ var listContainer = ref.current.querySelector(".".concat(blockClass, "__list--container"));
26
+ var scrollSpeed = 10; // Scrolling speed
27
+ var leftEdgeThreshold = 120; // Distance from the left edge to start scrolling
28
+ var rightEdgeThreshold = 100; // Distance from the right edge to start scrolling
29
+
30
+ var _event = event,
31
+ clientX = _event.clientX;
32
+ var _listContainer$getBou = listContainer.getBoundingClientRect(),
33
+ left = _listContainer$getBou.left,
34
+ right = _listContainer$getBou.right;
35
+
36
+ // Is near left side of viewport
37
+ if (clientX < leftEdgeThreshold) {
38
+ window.scrollBy(-scrollSpeed, 0);
39
+ }
40
+
41
+ // Is near right side of viewport
42
+ if (clientX > window.innerWidth - rightEdgeThreshold) {
43
+ window.scrollBy(scrollSpeed, 0);
44
+ }
45
+
46
+ // Is near left edge of table
47
+ if (clientX > left && clientX < left + leftEdgeThreshold) {
48
+ listContainer.scrollBy(-scrollSpeed, 0);
49
+ }
50
+
51
+ // Is near right edge of table
52
+ if (clientX < right && clientX > right - rightEdgeThreshold) {
53
+ listContainer.scrollBy(scrollSpeed, 0);
54
+ }
25
55
  if (Number(newColumnIndex) > Number(originalColumnIndex)) {
26
- indicatorLineElement.style.left = px(closestCellCoords.left - spreadsheetCoords.left + closestCell.offsetWidth - 2 + leftScrollAmount);
56
+ var leftPosition = closestCellCoords.left - spreadsheetCoords.left + closestCell.offsetWidth - 2 + leftScrollAmount;
57
+ indicatorLineElement.style.left = px(leftPosition);
27
58
  }
28
59
  if (Number(newColumnIndex) < Number(originalColumnIndex)) {
29
- indicatorLineElement.style.left = px(closestCellCoords.left - spreadsheetCoords.left + leftScrollAmount);
60
+ var _leftPosition = closestCellCoords.left - spreadsheetCoords.left + leftScrollAmount;
61
+ indicatorLineElement.style.left = px(_leftPosition);
30
62
  }
31
63
  if (Number(newColumnIndex) === Number(originalColumnIndex)) {
32
64
  indicatorLineElement.style.left = selectionAreaOrigin.style.left;
@@ -6,7 +6,7 @@ import { RadioButtonGroupProps } from '@carbon/react/lib/components/RadioButtonG
6
6
  import { CheckboxProps } from '@carbon/react/lib/components/Checkbox';
7
7
  import { NumberInputProps } from '@carbon/react/lib/components/NumberInput/NumberInput';
8
8
  import { CSSProperties, JSXElementConstructor, MutableRefObject, ReactNode, TouchEventHandler } from 'react';
9
- import { Cell, ColumnInstance, FilterValue, Filters, HeaderGroup, Row, TableCommonProps, TableDispatch, TableInstance, TableToggleAllRowsSelectedProps, UseExpandedRowProps, UseFiltersInstanceProps, UsePaginationInstanceProps, UseResizeColumnsColumnProps, UseResizeColumnsState, UseRowSelectInstanceProps, UseRowSelectRowProps, UseRowSelectState, UseSortByColumnProps, UseTableHooks } from 'react-table';
9
+ import { Cell, Column, ColumnInstance, FilterValue, Filters, HeaderGroup, Meta, Row, TableCommonProps, TableDispatch, TableInstance, TableToggleAllRowsSelectedProps, UseExpandedRowProps, UseFiltersInstanceProps, UsePaginationInstanceProps, UseResizeColumnsColumnProps, UseResizeColumnsState, UseRowSelectInstanceProps, UseRowSelectRowProps, UseRowSelectState, UseSortByColumnProps, UseTableHooks } from 'react-table';
10
10
  import { CarbonIconType } from '@carbon/react/icons';
11
11
  import { type ButtonProps } from '@carbon/react';
12
12
  import { TableBatchActionsProps } from '@carbon/react/lib/components/DataTable/TableBatchActions';
@@ -88,6 +88,8 @@ export interface DatagridTableHooks<T extends object = any> extends UseTableHook
88
88
  export interface DatagridColumn<T extends object = any> extends ColumnInstance<T> {
89
89
  sticky?: 'left' | 'right';
90
90
  className?: string;
91
+ disableSortBy?: boolean;
92
+ centerAlignedColumn?: boolean;
91
93
  }
92
94
  export interface DataGridCell<T extends object = any> extends Omit<Cell<T>, 'column'> {
93
95
  column: DatagridColumn<any>;
@@ -195,6 +197,7 @@ export interface DataGridState<T extends object = any> extends TableCommonProps,
195
197
  expandedRowIds?: object;
196
198
  onRowClick?: (row: any, event: any) => void;
197
199
  onSort?: boolean;
200
+ column?: DatagridColumn;
198
201
  expandedContentHeight?: number;
199
202
  onRowExpand?: (row: DatagridRow, event: React.MouseEvent<HTMLElement>) => void;
200
203
  ExpandedRowContentComponent?: JSXElementConstructor<any>;
@@ -213,4 +216,5 @@ export interface ResizeHeaderProps {
213
216
  resizerAriaLabel?: string;
214
217
  isFetching?: boolean;
215
218
  }
219
+ export type VisibleColumns<T extends object = {}> = (allColumns: Array<ColumnInstance<T>>, meta: Meta<T>) => Array<Column<T>>;
216
220
  export {};
@@ -1,2 +1,9 @@
1
+ /**
2
+ * Copyright IBM Corp. 2020, 2024
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { Hooks } from 'react-table';
8
+ declare const useColumnCenterAlign: (hooks: Hooks) => void;
1
9
  export default useColumnCenterAlign;
2
- declare function useColumnCenterAlign(hooks: any): void;
@@ -15,7 +15,7 @@ var useColumnCenterAlign = function useColumnCenterAlign(hooks) {
15
15
  var centerAlignRenderer = function centerAlignRenderer(tableProps, column) {
16
16
  return /*#__PURE__*/React__default.createElement("div", {
17
17
  className: cx("".concat(blockClass, "__center-align-cell-renderer"), {
18
- sortDisabled: !tableProps.isTableSortable || tableProps.column.disableSortBy === true
18
+ sortDisabled: !tableProps.isTableSortable || tableProps.column && tableProps.column.disableSortBy === true
19
19
  })
20
20
  }, column.Cell(tableProps));
21
21
  };
@@ -1,2 +1,9 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022, 2024
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { Hooks } from 'react-table';
8
+ declare const useInlineEdit: (hooks: Hooks) => void;
1
9
  export default useInlineEdit;
2
- declare function useInlineEdit(hooks: any): void;
@@ -25,7 +25,7 @@ var useInlineEdit = function useInlineEdit(hooks) {
25
25
  tabIndex: -1,
26
26
  value: cell.value,
27
27
  cell: cell,
28
- isDisabled: isDisabled,
28
+ disabledCell: isDisabled,
29
29
  instance: instance,
30
30
  type: type
31
31
  });
@@ -87,7 +87,8 @@ Decorator.propTypes = {
87
87
  */
88
88
  small: PropTypes.bool,
89
89
  /**
90
- * Determines the theme of the component.
90
+ * Override the default theme of the component.
91
+ * Useful if you want "invert" the component's theme.
91
92
  */
92
93
  theme: PropTypes.oneOf(['light', 'dark']),
93
94
  /**
@@ -23,8 +23,7 @@ var defaults = {
23
23
  onContextMenu: function onContextMenu() {},
24
24
  onContextMenuLabel: function onContextMenuLabel() {},
25
25
  onContextMenuValue: function onContextMenuValue() {},
26
- scoreThresholds: [0, 4, 7, 10],
27
- theme: 'light'
26
+ scoreThresholds: [0, 4, 7, 10]
28
27
  };
29
28
 
30
29
  /**
@@ -56,8 +55,7 @@ var DecoratorBase = /*#__PURE__*/React__default.forwardRef(function (_ref, ref)
56
55
  _ref$scoreThresholds = _ref.scoreThresholds,
57
56
  scoreThresholds = _ref$scoreThresholds === void 0 ? defaults.scoreThresholds : _ref$scoreThresholds,
58
57
  small = _ref.small,
59
- _ref$theme = _ref.theme,
60
- theme = _ref$theme === void 0 ? defaults.theme : _ref$theme,
58
+ theme = _ref.theme,
61
59
  truncateValue = _ref.truncateValue,
62
60
  value = _ref.value,
63
61
  valueTitle = _ref.valueTitle,
@@ -67,7 +65,7 @@ var DecoratorBase = /*#__PURE__*/React__default.forwardRef(function (_ref, ref)
67
65
  var _value = truncate(value, truncateValue);
68
66
 
69
67
  // These class names apply to all types of DecoratorBase.
70
- var classNames = cx(blockClass, className, "".concat(blockClass, "--").concat(theme), _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(blockClass, "--sm"), small), "".concat(blockClass, "--truncate-end"), truncateValue === 'end'), "".concat(blockClass, "--truncate-start"), truncateValue === 'start'), "".concat(blockClass, "--truncate-midline"), truncateValue === null || truncateValue === void 0 ? void 0 : truncateValue.maxLength));
68
+ var classNames = cx(blockClass, className, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(blockClass, "--").concat(theme), theme), "".concat(blockClass, "--sm"), small), "".concat(blockClass, "--truncate-end"), truncateValue === 'end'), "".concat(blockClass, "--truncate-start"), truncateValue === 'start'), "".concat(blockClass, "--truncate-midline"), truncateValue === null || truncateValue === void 0 ? void 0 : truncateValue.maxLength));
71
69
 
72
70
  // These properties apply to all <DecoratorIcons>.
73
71
  var decoratorIconsProps = {
@@ -111,7 +111,8 @@ DecoratorDualButton.propTypes = {
111
111
  */
112
112
  small: PropTypes.bool,
113
113
  /**
114
- * Determines the theme of the component.
114
+ * Override the default theme of the component.
115
+ * Useful if you want "invert" the component's theme.
115
116
  */
116
117
  theme: PropTypes.oneOf(['light', 'dark']),
117
118
  /**
@@ -101,7 +101,8 @@ DecoratorLink.propTypes = {
101
101
  */
102
102
  small: PropTypes.bool,
103
103
  /**
104
- * Determines the theme of the component.
104
+ * Override the default theme of the component.
105
+ * Useful if you want "invert" the component's theme.
105
106
  */
106
107
  theme: PropTypes.oneOf(['light', 'dark']),
107
108
  /**
@@ -101,7 +101,8 @@ DecoratorSingleButton.propTypes = {
101
101
  */
102
102
  small: PropTypes.bool,
103
103
  /**
104
- * Determines the theme of the component.
104
+ * Override the default theme of the component.
105
+ * Useful if you want "invert" the component's theme.
105
106
  */
106
107
  theme: PropTypes.oneOf(['light', 'dark']),
107
108
  /**
@@ -121,15 +121,19 @@ exports.DataSpreadsheet = /*#__PURE__*/React__default["default"].forwardRef(func
121
121
  _useState18 = _rollupPluginBabelHelpers.slicedToArray(_useState17, 2),
122
122
  headerCellHoldActive = _useState18[0],
123
123
  setHeaderCellHoldActive = _useState18[1];
124
- var isBlurSpreadsheet = React.useRef(false);
125
124
  var _useState19 = React.useState(false),
126
125
  _useState20 = _rollupPluginBabelHelpers.slicedToArray(_useState19, 2),
127
- isActiveHeaderCellChanged = _useState20[0],
128
- setIsActiveHeaderCellChanged = _useState20[1];
126
+ selectedHeaderReorderActive = _useState20[0],
127
+ setSelectedHeaderReorderActive = _useState20[1];
128
+ var isBlurSpreadsheet = React.useRef(false);
129
129
  var _useState21 = React.useState(false),
130
130
  _useState22 = _rollupPluginBabelHelpers.slicedToArray(_useState21, 2),
131
- activeCellInsideSelectionArea = _useState22[0],
132
- setActiveCellInsideSelectionArea = _useState22[1];
131
+ isActiveHeaderCellChanged = _useState22[0],
132
+ setIsActiveHeaderCellChanged = _useState22[1];
133
+ var _useState23 = React.useState(false),
134
+ _useState24 = _rollupPluginBabelHelpers.slicedToArray(_useState23, 2),
135
+ activeCellInsideSelectionArea = _useState24[0],
136
+ setActiveCellInsideSelectionArea = _useState24[1];
133
137
  var previousState = usePreviousValue.usePreviousValue({
134
138
  activeCellCoordinates: activeCellCoordinates,
135
139
  isEditing: isEditing,
@@ -137,10 +141,10 @@ exports.DataSpreadsheet = /*#__PURE__*/React__default["default"].forwardRef(func
137
141
  }) || {};
138
142
  var cellSizeValue = getCellSize.getCellSize(cellSize);
139
143
  var cellEditorRef = React.useRef();
140
- var _useState23 = React.useState(),
141
- _useState24 = _rollupPluginBabelHelpers.slicedToArray(_useState23, 2),
142
- activeCellContent = _useState24[0],
143
- setActiveCellContent = _useState24[1];
144
+ var _useState25 = React.useState(),
145
+ _useState26 = _rollupPluginBabelHelpers.slicedToArray(_useState25, 2),
146
+ activeCellContent = _useState26[0],
147
+ setActiveCellContent = _useState26[1];
144
148
  var activeCellRef = React.useRef();
145
149
  var cellEditorRulerRef = React.useRef();
146
150
  var defaultColumn = React.useMemo(function () {
@@ -624,6 +628,8 @@ exports.DataSpreadsheet = /*#__PURE__*/React__default["default"].forwardRef(func
624
628
  columns: columns,
625
629
  currentMatcher: currentMatcher,
626
630
  defaultColumn: defaultColumn,
631
+ selectedHeaderReorderActive: selectedHeaderReorderActive,
632
+ setSelectedHeaderReorderActive: setSelectedHeaderReorderActive,
627
633
  headerGroups: headerGroups,
628
634
  rows: rows,
629
635
  scrollBarSize: scrollBarSize,
@@ -647,6 +653,8 @@ exports.DataSpreadsheet = /*#__PURE__*/React__default["default"].forwardRef(func
647
653
  currentMatcher: currentMatcher,
648
654
  setCurrentMatcher: setCurrentMatcher,
649
655
  setContainerHasFocus: setContainerHasFocus,
656
+ selectedHeaderReorderActive: selectedHeaderReorderActive,
657
+ setSelectedHeaderReorderActive: setSelectedHeaderReorderActive,
650
658
  selectionAreas: selectionAreas,
651
659
  setSelectionAreas: setSelectionAreas,
652
660
  headerGroups: headerGroups,
@@ -697,9 +705,11 @@ exports.DataSpreadsheet = /*#__PURE__*/React__default["default"].forwardRef(func
697
705
  updateData: updateData
698
706
  }),
699
707
  onChange: function onChange(event) {
700
- setCellEditorValue(event.target.value);
701
- if (cellEditorRulerRef !== null && cellEditorRulerRef !== void 0 && cellEditorRulerRef.current) {
702
- cellEditorRulerRef.current.textContent = event.target.value;
708
+ if (previousState.isEditing) {
709
+ setCellEditorValue(event.target.value);
710
+ if (cellEditorRulerRef !== null && cellEditorRulerRef !== void 0 && cellEditorRulerRef.current) {
711
+ cellEditorRulerRef.current.textContent = event.target.value;
712
+ }
703
713
  }
704
714
  },
705
715
  ref: cellEditorRef,
@@ -79,7 +79,15 @@ interface DataSpreadsheetBodyProps {
79
79
  /**
80
80
  * Array of selection area data
81
81
  */
82
- selectionAreaData?: object[];
82
+ selectionAreaData?: any[];
83
+ /**
84
+ * Header reordering is active
85
+ */
86
+ selectedHeaderReorderActive?: boolean;
87
+ /**
88
+ * Set header reordering active or not
89
+ */
90
+ setSelectedHeaderReorderActive?: Dispatch<SetStateAction<boolean>>;
83
91
  /**
84
92
  * Array of selection areas
85
93
  */
@@ -49,6 +49,8 @@ var DataSpreadsheetBody = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
49
49
  selectionAreaData = _ref.selectionAreaData,
50
50
  setSelectionAreaData = _ref.setSelectionAreaData,
51
51
  setActiveCellCoordinates = _ref.setActiveCellCoordinates,
52
+ selectedHeaderReorderActive = _ref.selectedHeaderReorderActive,
53
+ setSelectedHeaderReorderActive = _ref.setSelectedHeaderReorderActive,
52
54
  selectionAreas = _ref.selectionAreas,
53
55
  setContainerHasFocus = _ref.setContainerHasFocus,
54
56
  setSelectionAreas = _ref.setSelectionAreas,
@@ -84,8 +86,12 @@ var DataSpreadsheetBody = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
84
86
  // back to the consumer
85
87
  React.useEffect(function () {
86
88
  if (selectionAreaData !== null && selectionAreaData !== void 0 && selectionAreaData.length) {
87
- var _previousState$select;
88
- if (!clickAndHoldActive && previousState !== null && previousState !== void 0 && previousState.clickAndHoldActive || (previousState === null || previousState === 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)) {
89
+ var _previousState$select, _selectionAreaData$, _previousState$select2;
90
+ var selectionChanged = false;
91
+ if ((previousState === null || previousState === 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) || (selectionAreaData === null || selectionAreaData === void 0 || (_selectionAreaData$ = selectionAreaData[0]) === null || _selectionAreaData$ === void 0 ? void 0 : _selectionAreaData$.cells.length) !== (previousState === null || previousState === void 0 || (_previousState$select2 = previousState.selectionAreaData) === null || _previousState$select2 === void 0 || (_previousState$select2 = _previousState$select2[0]) === null || _previousState$select2 === void 0 ? void 0 : _previousState$select2.cells.length)) {
92
+ selectionChanged = true;
93
+ }
94
+ if (!clickAndHoldActive && previousState !== null && previousState !== void 0 && previousState.clickAndHoldActive || selectionChanged) {
89
95
  onSelectionAreaChange === null || onSelectionAreaChange === void 0 || onSelectionAreaChange(selectionAreaData);
90
96
  }
91
97
  }
@@ -160,6 +166,8 @@ var DataSpreadsheetBody = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
160
166
  setClickAndHoldActive: setClickAndHoldActive,
161
167
  setSelectionAreas: setSelectionAreas,
162
168
  setValidStartingPoint: setValidStartingPoint,
169
+ selectedHeaderReorderActive: selectedHeaderReorderActive,
170
+ setSelectedHeaderReorderActive: setSelectedHeaderReorderActive,
163
171
  validStartingPoint: validStartingPoint,
164
172
  ref: ref,
165
173
  setHeaderCellHoldActive: setHeaderCellHoldActive,
@@ -466,6 +474,10 @@ DataSpreadsheetBody.propTypes = {
466
474
  * The scrollbar width
467
475
  */
468
476
  scrollBarSize: index["default"].number,
477
+ /**
478
+ * Header reordering is active
479
+ */
480
+ selectedHeaderReorderActive: index["default"].bool,
469
481
  /**
470
482
  * Array of selection area data
471
483
  */
@@ -502,6 +514,10 @@ DataSpreadsheetBody.propTypes = {
502
514
  * Setter fn for header cell hold active value
503
515
  */
504
516
  setHeaderCellHoldActive: index["default"].func,
517
+ /**
518
+ * Set header reordering active or not
519
+ */
520
+ setSelectedHeaderReorderActive: index["default"].func,
505
521
  /**
506
522
  * Setter fn for selectionAreaData state value
507
523
  */
@@ -56,6 +56,14 @@ interface DataSpreadsheetHeaderProps {
56
56
  * Setter fn for activeCellCoordinates value
57
57
  */
58
58
  setActiveCellCoordinates?: Dispatch<SetStateAction<ActiveCellCoordinates | null>>;
59
+ /**
60
+ * Header reordering is active
61
+ */
62
+ selectedHeaderReorderActive?: boolean;
63
+ /**
64
+ * Set header reordering active or not
65
+ */
66
+ setSelectedHeaderReorderActive?: Dispatch<SetStateAction<boolean>>;
59
67
  /**
60
68
  * Setter fn for currentMatcher value
61
69
  */