@carbon/ibm-products 1.16.0 → 1.18.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. package/README.md +30 -27
  2. package/css/components/Datagrid/styles/datagrid.css +24 -4
  3. package/css/components/Datagrid/styles/datagrid.css.map +1 -1
  4. package/css/components/Datagrid/styles/index.css +24 -4
  5. package/css/components/Datagrid/styles/index.css.map +1 -1
  6. package/css/index-full-carbon.css +241 -93
  7. package/css/index-full-carbon.css.map +1 -1
  8. package/css/index-full-carbon.min.css +7 -4
  9. package/css/index-full-carbon.min.css.map +1 -1
  10. package/css/index-without-carbon-released-only.css +9 -3
  11. package/css/index-without-carbon-released-only.css.map +1 -1
  12. package/css/index-without-carbon-released-only.min.css +4 -1
  13. package/css/index-without-carbon-released-only.min.css.map +1 -1
  14. package/css/index-without-carbon.css +124 -27
  15. package/css/index-without-carbon.css.map +1 -1
  16. package/css/index-without-carbon.min.css +6 -3
  17. package/css/index-without-carbon.min.css.map +1 -1
  18. package/css/index.css +150 -58
  19. package/css/index.css.map +1 -1
  20. package/css/index.min.css +7 -4
  21. package/css/index.min.css.map +1 -1
  22. package/es/components/AddSelect/AddSelect.js +57 -8
  23. package/es/components/AddSelect/AddSelectColumn.js +31 -73
  24. package/es/components/AddSelect/AddSelectFilter.js +2 -2
  25. package/es/components/AddSelect/AddSelectList.js +32 -6
  26. package/es/components/AddSelect/AddSelectMetaPanel.js +54 -0
  27. package/es/components/AddSelect/AddSelectSidebar.js +19 -1
  28. package/es/components/AddSelect/AddSelectSort.js +61 -0
  29. package/es/components/AddSelect/add-select-utils.js +21 -0
  30. package/es/components/AddSelect/hooks/useItemSort.js +20 -0
  31. package/es/components/DataSpreadsheet/DataSpreadsheet.js +28 -13
  32. package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +60 -42
  33. package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +73 -6
  34. package/es/components/DataSpreadsheet/hooks/index.js +3 -1
  35. package/es/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +65 -19
  36. package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +60 -0
  37. package/es/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +153 -0
  38. package/es/components/DataSpreadsheet/utils/checkSelectedHeaderCell.js +16 -0
  39. package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +11 -6
  40. package/es/components/DataSpreadsheet/utils/getSpreadsheetWidth.js +8 -2
  41. package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +7 -3
  42. package/es/components/DataSpreadsheet/utils/moveColumnIndicatorLine.js +34 -0
  43. package/es/components/Datagrid/Datagrid/Datagrid.js +25 -13
  44. package/es/components/Datagrid/Datagrid/DatagridEmptyBody.js +22 -3
  45. package/es/components/Datagrid/Datagrid/DatagridHead.js +8 -16
  46. package/es/components/Datagrid/Datagrid/DatagridHeaderRow.js +10 -10
  47. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +3 -3
  48. package/es/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -1
  49. package/es/components/Datagrid/Datagrid/index.js +6 -7
  50. package/es/components/Datagrid/index.js +1 -1
  51. package/es/components/ExportModal/ExportModal.js +10 -5
  52. package/es/components/SidePanel/SidePanel.js +5 -1
  53. package/es/components/WebTerminal/WebTerminal.js +36 -11
  54. package/es/components/WebTerminal/WebTerminalContentWrapper.js +49 -0
  55. package/es/components/WebTerminal/index.js +2 -1
  56. package/es/components/index.js +1 -1
  57. package/es/global/js/package-settings.js +1 -0
  58. package/lib/components/AddSelect/AddSelect.js +58 -8
  59. package/lib/components/AddSelect/AddSelectColumn.js +32 -71
  60. package/lib/components/AddSelect/AddSelectFilter.js +2 -2
  61. package/lib/components/AddSelect/AddSelectList.js +30 -4
  62. package/lib/components/AddSelect/AddSelectMetaPanel.js +77 -0
  63. package/lib/components/AddSelect/AddSelectSidebar.js +20 -1
  64. package/lib/components/AddSelect/AddSelectSort.js +79 -0
  65. package/lib/components/AddSelect/add-select-utils.js +29 -2
  66. package/lib/components/AddSelect/hooks/useItemSort.js +33 -0
  67. package/lib/components/DataSpreadsheet/DataSpreadsheet.js +27 -12
  68. package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +62 -41
  69. package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +76 -6
  70. package/lib/components/DataSpreadsheet/hooks/index.js +17 -1
  71. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetEdit.js +68 -18
  72. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseMove.js +74 -0
  73. package/lib/components/DataSpreadsheet/hooks/useSpreadsheetMouseUp.js +161 -0
  74. package/lib/components/DataSpreadsheet/utils/checkSelectedHeaderCell.js +26 -0
  75. package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +11 -6
  76. package/lib/components/DataSpreadsheet/utils/getSpreadsheetWidth.js +8 -2
  77. package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +7 -3
  78. package/lib/components/DataSpreadsheet/utils/moveColumnIndicatorLine.js +45 -0
  79. package/lib/components/Datagrid/Datagrid/Datagrid.js +26 -9
  80. package/lib/components/Datagrid/Datagrid/DatagridEmptyBody.js +24 -3
  81. package/lib/components/Datagrid/Datagrid/DatagridHead.js +8 -16
  82. package/lib/components/Datagrid/Datagrid/DatagridHeaderRow.js +10 -10
  83. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeDropdown.js +3 -3
  84. package/lib/components/Datagrid/Datagrid/addons/RowSize/RowSizeRadioGroup.js +1 -1
  85. package/lib/components/Datagrid/Datagrid/index.js +3 -5
  86. package/lib/components/Datagrid/index.js +2 -2
  87. package/lib/components/ExportModal/ExportModal.js +9 -4
  88. package/lib/components/SidePanel/SidePanel.js +5 -1
  89. package/lib/components/WebTerminal/WebTerminal.js +36 -10
  90. package/lib/components/WebTerminal/WebTerminalContentWrapper.js +58 -0
  91. package/lib/components/WebTerminal/index.js +9 -1
  92. package/lib/components/index.js +6 -0
  93. package/lib/global/js/package-settings.js +1 -0
  94. package/package.json +17 -16
  95. package/scss/components/AddSelect/_add-select.scss +45 -5
  96. package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +31 -13
  97. package/scss/components/Datagrid/_storybook-styles.scss +5 -0
  98. package/scss/components/Datagrid/styles/datagrid.scss +43 -5
  99. package/scss/components/SidePanel/_side-panel.scss +22 -3
  100. package/scss/components/WebTerminal/_storybook-styles.scss +5 -0
  101. package/scss/components/WebTerminal/_web-terminal.scss +14 -4
@@ -17,7 +17,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
17
17
  */
18
18
  // Import portions of React that are needed.
19
19
  import React, { useMemo, useRef, useState, useCallback, useEffect } from 'react';
20
- import { useBlockLayout, useTable } from 'react-table'; // Other standard imports.
20
+ import { useBlockLayout, useTable, useColumnOrder } from 'react-table'; // Other standard imports.
21
21
 
22
22
  import PropTypes from 'prop-types';
23
23
  import cx from 'classnames';
@@ -125,8 +125,13 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
125
125
 
126
126
  var _useState17 = useState(false),
127
127
  _useState18 = _slicedToArray(_useState17, 2),
128
- activeCellInsideSelectionArea = _useState18[0],
129
- setActiveCellInsideSelectionArea = _useState18[1];
128
+ headerCellHoldActive = _useState18[0],
129
+ setHeaderCellHoldActive = _useState18[1];
130
+
131
+ var _useState19 = useState(false),
132
+ _useState20 = _slicedToArray(_useState19, 2),
133
+ activeCellInsideSelectionArea = _useState20[0],
134
+ setActiveCellInsideSelectionArea = _useState20[1];
130
135
 
131
136
  var previousState = usePreviousValue({
132
137
  activeCellCoordinates: activeCellCoordinates,
@@ -135,10 +140,10 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
135
140
  var cellSizeValue = getCellSize(cellSize);
136
141
  var cellEditorRef = useRef();
137
142
 
138
- var _useState19 = useState(),
139
- _useState20 = _slicedToArray(_useState19, 2),
140
- activeCellContent = _useState20[0],
141
- setActiveCellContent = _useState20[1];
143
+ var _useState21 = useState(),
144
+ _useState22 = _slicedToArray(_useState21, 2),
145
+ activeCellContent = _useState22[0],
146
+ setActiveCellContent = _useState22[1];
142
147
 
143
148
  var activeCellRef = useRef();
144
149
  var cellEditorRulerRef = useRef();
@@ -166,13 +171,15 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
166
171
  columns: columns,
167
172
  data: data,
168
173
  defaultColumn: defaultColumn
169
- }, useBlockLayout),
174
+ }, useBlockLayout, useColumnOrder),
170
175
  getTableProps = _useTable.getTableProps,
171
176
  getTableBodyProps = _useTable.getTableBodyProps,
172
177
  headerGroups = _useTable.headerGroups,
173
178
  rows = _useTable.rows,
174
179
  totalColumnsWidth = _useTable.totalColumnsWidth,
175
- prepareRow = _useTable.prepareRow; // Update the spreadsheet data after editing a cell
180
+ prepareRow = _useTable.prepareRow,
181
+ setColumnOrder = _useTable.setColumnOrder,
182
+ visibleColumns = _useTable.visibleColumns; // Update the spreadsheet data after editing a cell
176
183
 
177
184
 
178
185
  var updateData = useCallback(function (rowIndex, columnId) {
@@ -575,10 +582,12 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
575
582
 
576
583
  var startEditMode = function startEditMode() {
577
584
  setIsEditing(true);
585
+ setClickAndHoldActive(false);
578
586
  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;
579
- var activeCellValue = activeCellFullData ? Object.values(activeCellFullData.row.values)[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column] : null;
587
+ var activeCellValue = activeCellFullData ? activeCellFullData.row.cells[activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column].value : null;
580
588
  setCellEditorValue(activeCellValue);
581
589
  cellEditorRulerRef.current.textContent = activeCellValue;
590
+ cellEditorRef.current.style.width = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.width;
582
591
  }; // Sets the initial placement of the cell editor cursor at the end of the text area
583
592
  // this is not done for us by default in Safari
584
593
 
@@ -699,7 +708,7 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
699
708
  activeCellRef: activeCellRef,
700
709
  cellEditorRef: cellEditorRef,
701
710
  cellEditorRulerRef: cellEditorRulerRef,
702
- columns: columns,
711
+ visibleColumns: visibleColumns,
703
712
  defaultColumn: defaultColumn,
704
713
  cellEditorValue: cellEditorValue
705
714
  });
@@ -769,7 +778,10 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
769
778
  setCurrentMatcher: setCurrentMatcher,
770
779
  setSelectionAreaData: setSelectionAreaData,
771
780
  totalVisibleColumns: totalVisibleColumns,
772
- updateActiveCellCoordinates: updateActiveCellCoordinates
781
+ updateActiveCellCoordinates: updateActiveCellCoordinates,
782
+ setHeaderCellHoldActive: setHeaderCellHoldActive,
783
+ headerCellHoldActive: headerCellHoldActive,
784
+ visibleColumns: visibleColumns
773
785
  }), /*#__PURE__*/React.createElement(DataSpreadsheetBody, {
774
786
  activeCellCoordinates: activeCellCoordinates,
775
787
  ref: spreadsheetRef,
@@ -798,7 +810,10 @@ export var DataSpreadsheet = /*#__PURE__*/React.forwardRef(function (_ref, ref)
798
810
  columns: columns,
799
811
  defaultEmptyRowCount: defaultEmptyRowCount,
800
812
  setActiveCellInsideSelectionArea: setActiveCellInsideSelectionArea,
801
- totalVisibleColumns: totalVisibleColumns
813
+ totalVisibleColumns: totalVisibleColumns,
814
+ setHeaderCellHoldActive: setHeaderCellHoldActive,
815
+ setColumnOrder: setColumnOrder,
816
+ visibleColumns: visibleColumns
802
817
  }), /*#__PURE__*/React.createElement("button", {
803
818
  onMouseDown: handleActiveCellMouseDown,
804
819
  onClick: handleActiveCellClick,
@@ -1,6 +1,7 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
5
 
5
6
  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; }
6
7
 
@@ -12,7 +13,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
12
13
  * This source code is licensed under the Apache-2.0 license found in the
13
14
  * LICENSE file in the root directory of this source tree.
14
15
  */
15
- import React, { useRef, useCallback, useEffect, forwardRef } from 'react';
16
+ import React, { useRef, useCallback, useEffect, forwardRef, useState } from 'react';
16
17
  import PropTypes from 'prop-types';
17
18
  import { FixedSizeList } from 'react-window';
18
19
  import cx from 'classnames';
@@ -24,8 +25,10 @@ import { usePreviousValue } from '../../global/js/hooks';
24
25
  import { removeCellSelections } from './utils/removeCellSelections';
25
26
  import { createCellSelectionArea } from './utils/createCellSelectionArea';
26
27
  import { checkActiveHeaderCell } from './utils/checkActiveHeaderCell';
28
+ import { checkSelectedHeaderCell } from './utils/checkSelectedHeaderCell';
27
29
  import { handleHeaderCellSelection } from './utils/handleHeaderCellSelection';
28
30
  import { getSpreadsheetWidth } from './utils/getSpreadsheetWidth';
31
+ import { useSpreadsheetMouseUp } from './hooks';
29
32
  var blockClass = "".concat(pkg.prefix, "--data-spreadsheet");
30
33
  export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
31
34
  var columns = _ref.columns,
@@ -52,7 +55,16 @@ export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
52
55
  setCurrentMatcher = _ref.setCurrentMatcher,
53
56
  onSelectionAreaChange = _ref.onSelectionAreaChange,
54
57
  setActiveCellInsideSelectionArea = _ref.setActiveCellInsideSelectionArea,
55
- totalVisibleColumns = _ref.totalVisibleColumns;
58
+ totalVisibleColumns = _ref.totalVisibleColumns,
59
+ setHeaderCellHoldActive = _ref.setHeaderCellHoldActive,
60
+ setColumnOrder = _ref.setColumnOrder,
61
+ visibleColumns = _ref.visibleColumns;
62
+
63
+ var _useState = useState(false),
64
+ _useState2 = _slicedToArray(_useState, 2),
65
+ validStartingPoint = _useState2[0],
66
+ setValidStartingPoint = _useState2[1];
67
+
56
68
  var contentScrollRef = useRef();
57
69
  var previousState = usePreviousValue({
58
70
  selectionAreaData: selectionAreaData,
@@ -117,14 +129,15 @@ export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
117
129
  defaultColumn: defaultColumn,
118
130
  selectionAreas: selectionAreas,
119
131
  setSelectionAreas: setSelectionAreas,
120
- setActiveCellInsideSelectionArea: setActiveCellInsideSelectionArea
132
+ setActiveCellInsideSelectionArea: setActiveCellInsideSelectionArea,
133
+ visibleColumns: visibleColumns
121
134
  });
122
135
  }
123
136
 
124
137
  return;
125
138
  });
126
139
  }
127
- }, [selectionAreas, setSelectionAreas, defaultColumn, onSelectionAreaChange, setSelectionAreaData, ref, activeCellCoordinates, setActiveCellInsideSelectionArea]);
140
+ }, [selectionAreas, setSelectionAreas, defaultColumn, onSelectionAreaChange, setSelectionAreaData, ref, activeCellCoordinates, setActiveCellInsideSelectionArea, visibleColumns]);
128
141
 
129
142
  var populateSelectionAreaCellData = function populateSelectionAreaCellData(_ref2) {
130
143
  var rowStart = _ref2.rowStart,
@@ -140,41 +153,23 @@ export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
140
153
  }
141
154
 
142
155
  return cellContainer;
143
- }; // Mouse up
144
-
145
-
146
- useEffect(function () {
147
- var handleMouseUp = function handleMouseUp(event) {
148
- setClickAndHoldActive(false);
149
- var cellButton = event.target.closest(".".concat(blockClass, "__body--td"));
150
-
151
- if (cellButton) {
152
- var endCellCoordinates = {
153
- row: Number(cellButton.getAttribute('data-row-index')),
154
- column: Number(cellButton.getAttribute('data-column-index'))
155
- };
156
- setSelectionAreas(function (prev) {
157
- var selectionAreaClone = deepCloneObject(prev);
158
- var indexOfItemToUpdate = selectionAreaClone.findIndex(function (item) {
159
- return item.matcher === currentMatcher;
160
- }); // No items in the array have an object that matches the value of currentMatcher
161
-
162
- if (indexOfItemToUpdate === -1) {
163
- return prev;
164
- }
165
-
166
- selectionAreaClone[indexOfItemToUpdate].point2 = endCellCoordinates;
167
- selectionAreaClone[indexOfItemToUpdate].areaCreated = false;
168
- return selectionAreaClone;
169
- });
170
- }
171
- };
156
+ };
172
157
 
173
- document.addEventListener('mouseup', handleMouseUp);
174
- return function () {
175
- document.removeEventListener('mouseup', handleMouseUp);
176
- };
177
- }, [selectionAreas, currentMatcher, setSelectionAreas, setClickAndHoldActive, setCurrentMatcher, ref]); // Make sure that if the cellSize prop changes, the active
158
+ useSpreadsheetMouseUp({
159
+ currentMatcher: currentMatcher,
160
+ setClickAndHoldActive: setClickAndHoldActive,
161
+ setSelectionAreas: setSelectionAreas,
162
+ setValidStartingPoint: setValidStartingPoint,
163
+ validStartingPoint: validStartingPoint,
164
+ ref: ref,
165
+ setHeaderCellHoldActive: setHeaderCellHoldActive,
166
+ setColumnOrder: setColumnOrder,
167
+ visibleColumns: visibleColumns,
168
+ setActiveCellCoordinates: setActiveCellCoordinates,
169
+ rows: rows,
170
+ activeCellCoordinates: activeCellCoordinates,
171
+ defaultColumn: defaultColumn
172
+ }); // Make sure that if the cellSize prop changes, the active
178
173
  // cell also gets updated with the new size
179
174
 
180
175
  useEffect(function () {
@@ -190,6 +185,9 @@ export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
190
185
  var handleBodyCellClick = useCallback(function (cell, columnIndex) {
191
186
  return function (event) {
192
187
  event.preventDefault();
188
+ var closestBodyCell = event.target.closest(".".concat(blockClass, "__body--td"));
189
+ var isValidSelectionAreaStart = closestBodyCell.classList.contains("".concat(blockClass, "__body--td"));
190
+ setValidStartingPoint(isValidSelectionAreaStart);
193
191
  var isHoldingCommandKey = event.metaKey || event.ctrlKey;
194
192
  var isHoldingShiftKey = event.shiftKey;
195
193
  setContainerHasFocus(true);
@@ -349,6 +347,8 @@ export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
349
347
  var row = rows[index];
350
348
 
351
349
  if (rows && rows.length) {
350
+ var _cx;
351
+
352
352
  prepareRow(row);
353
353
  return /*#__PURE__*/React.createElement("div", _extends({}, row.getRowProps({
354
354
  style: style
@@ -366,11 +366,13 @@ export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
366
366
  "data-column-index": "header",
367
367
  type: "button",
368
368
  onClick: handleRowHeaderClick(index),
369
- className: cx("".concat(blockClass, "__td"), "".concat(blockClass, "__td-th"), "".concat(blockClass, "--interactive-cell-element"), _defineProperty({}, "".concat(blockClass, "__td-th--active-header"), (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === index || checkActiveHeaderCell(index, selectionAreas, 'row'))),
369
+ className: cx("".concat(blockClass, "__td"), "".concat(blockClass, "__td-th"), "".concat(blockClass, "--interactive-cell-element"), (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "__td-th--active-header"), (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === index || checkActiveHeaderCell(index, selectionAreas, 'row')), _defineProperty(_cx, "".concat(blockClass, "__td-th--selected-header"), checkSelectedHeaderCell(index, selectionAreas, 'row')), _cx)),
370
370
  style: {
371
371
  width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeaderWidth
372
372
  }
373
373
  }, index + 1)), row.cells.map(function (cell, index) {
374
+ var _cell$column;
375
+
374
376
  return /*#__PURE__*/React.createElement("div", _extends({
375
377
  key: "cell_".concat(index),
376
378
  "aria-colindex": index + 1
@@ -378,7 +380,7 @@ export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
378
380
  role: "gridcell",
379
381
  style: _objectSpread(_objectSpread({}, cell.getCellProps().style), {}, {
380
382
  display: 'grid',
381
- minWidth: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.width
383
+ minWidth: (cell === null || cell === void 0 ? void 0 : (_cell$column = cell.column) === null || _cell$column === void 0 ? void 0 : _cell$column.width) || (defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.width)
382
384
  })
383
385
  }), /*#__PURE__*/React.createElement("button", {
384
386
  id: "".concat(blockClass, "__cell--").concat(cell.row.index, "--").concat(index),
@@ -407,7 +409,8 @@ export var DataSpreadsheetBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
407
409
  scrollBarSizeValue: scrollBarSize,
408
410
  totalVisibleColumns: totalVisibleColumns,
409
411
  defaultColumn: defaultColumn,
410
- totalColumnsWidth: totalColumnsWidth
412
+ totalColumnsWidth: totalColumnsWidth,
413
+ visibleColumns: visibleColumns
411
414
  }),
412
415
  outerRef: contentScrollRef
413
416
  }, rows !== null && rows !== void 0 && rows.length ? RenderRow : RenderEmptyRows));
@@ -520,6 +523,11 @@ DataSpreadsheetBody.propTypes = {
520
523
  */
521
524
  setClickAndHoldActive: PropTypes.func,
522
525
 
526
+ /**
527
+ * Setter fn for column ordering, provided from react-table
528
+ */
529
+ setColumnOrder: PropTypes.func,
530
+
523
531
  /**
524
532
  * Setter fn for containerHasFocus state value
525
533
  */
@@ -530,6 +538,11 @@ DataSpreadsheetBody.propTypes = {
530
538
  */
531
539
  setCurrentMatcher: PropTypes.func,
532
540
 
541
+ /**
542
+ * Setter fn for header cell hold active value
543
+ */
544
+ setHeaderCellHoldActive: PropTypes.func,
545
+
533
546
  /**
534
547
  * Setter fn for selectionAreaData state value
535
548
  */
@@ -549,5 +562,10 @@ DataSpreadsheetBody.propTypes = {
549
562
  * The total number of columns to be initially visible, additional columns will be rendered and
550
563
  * visible via horizontal scrollbar
551
564
  */
552
- totalVisibleColumns: PropTypes.number
565
+ totalVisibleColumns: PropTypes.number,
566
+
567
+ /**
568
+ * Prop from react-table used to reorder columns
569
+ */
570
+ visibleColumns: PropTypes.array
553
571
  };
@@ -15,12 +15,15 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
15
15
  import React, { forwardRef, useEffect, useState } from 'react';
16
16
  import PropTypes from 'prop-types';
17
17
  import cx from 'classnames';
18
+ import { px } from '@carbon/layout';
18
19
  import { pkg } from '../../settings';
19
20
  import { usePreviousValue } from '../../global/js/hooks';
20
21
  import { checkActiveHeaderCell } from './utils/checkActiveHeaderCell';
22
+ import { checkSelectedHeaderCell } from './utils/checkSelectedHeaderCell';
21
23
  import { handleHeaderCellSelection } from './utils/handleHeaderCellSelection';
22
24
  import { selectAllCells } from './utils/selectAllCells';
23
25
  import { getSpreadsheetWidth } from './utils/getSpreadsheetWidth';
26
+ import { useSpreadsheetMouseMove } from './hooks';
24
27
  var blockClass = "".concat(pkg.prefix, "--data-spreadsheet");
25
28
  export var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref) {
26
29
  var activeCellCoordinates = _ref.activeCellCoordinates,
@@ -36,13 +39,21 @@ export var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref)
36
39
  setSelectionAreaData = _ref.setSelectionAreaData,
37
40
  rows = _ref.rows,
38
41
  totalVisibleColumns = _ref.totalVisibleColumns,
39
- updateActiveCellCoordinates = _ref.updateActiveCellCoordinates;
42
+ updateActiveCellCoordinates = _ref.updateActiveCellCoordinates,
43
+ setHeaderCellHoldActive = _ref.setHeaderCellHoldActive,
44
+ headerCellHoldActive = _ref.headerCellHoldActive,
45
+ visibleColumns = _ref.visibleColumns;
40
46
 
41
47
  var _useState = useState(0),
42
48
  _useState2 = _slicedToArray(_useState, 2),
43
49
  scrollBarSizeValue = _useState2[0],
44
50
  setScrollBarSizeValue = _useState2[1];
45
51
 
52
+ var _useState3 = useState(false),
53
+ _useState4 = _slicedToArray(_useState3, 2),
54
+ selectedHeaderReorderActive = _useState4[0],
55
+ setSelectedHeaderReorderActive = _useState4[1];
56
+
46
57
  var previousState = usePreviousValue({
47
58
  cellSize: cellSize
48
59
  });
@@ -88,6 +99,39 @@ export var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref)
88
99
  });
89
100
  };
90
101
 
102
+ var handleHeaderMouseDown = function handleHeaderMouseDown(index) {
103
+ return function (event) {
104
+ var _selectionAreaToClone;
105
+
106
+ setSelectedHeaderReorderActive(true);
107
+ var clickXPosition = event.clientX;
108
+ var headerButtonCoords = event.target.getBoundingClientRect();
109
+ var offsetXValue = clickXPosition - headerButtonCoords.left;
110
+ var bodyContainer = document.querySelector(".".concat(blockClass, "__list--container")).firstElementChild;
111
+ var selectionAreaToClone = selectionAreas.filter(function (item) {
112
+ var _item$header;
113
+
114
+ return (item === null || item === void 0 ? void 0 : (_item$header = item.header) === null || _item$header === void 0 ? void 0 : _item$header.index) === index;
115
+ });
116
+ var selectionAreaElement = ref.current.querySelector("[data-matcher-id=\"".concat((_selectionAreaToClone = selectionAreaToClone[0]) === null || _selectionAreaToClone === void 0 ? void 0 : _selectionAreaToClone.matcher, "\"]"));
117
+ var selectionAreaClonedElement = selectionAreaElement.cloneNode();
118
+ var reorderIndicatorLine = selectionAreaElement.cloneNode();
119
+ reorderIndicatorLine.className = "".concat(blockClass, "__reorder-indicator-line");
120
+ reorderIndicatorLine.style.width = px(2);
121
+ selectionAreaClonedElement.classList.add("".concat(blockClass, "__selection-area--element-cloned"));
122
+ selectionAreaClonedElement.setAttribute('data-clone-offset-x', offsetXValue);
123
+ selectionAreaClonedElement.setAttribute('data-column-index-original', index);
124
+ bodyContainer.appendChild(selectionAreaClonedElement);
125
+ bodyContainer.appendChild(reorderIndicatorLine);
126
+ setHeaderCellHoldActive(true);
127
+ };
128
+ };
129
+
130
+ useSpreadsheetMouseMove({
131
+ ref: ref,
132
+ headerCellHoldActive: headerCellHoldActive,
133
+ defaultColumn: defaultColumn
134
+ });
91
135
  return /*#__PURE__*/React.createElement("div", {
92
136
  className: cx("".concat(blockClass, "__header--container")),
93
137
  role: "rowgroup"
@@ -101,7 +145,8 @@ export var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref)
101
145
  headerGroup: headerGroup,
102
146
  scrollBarSizeValue: scrollBarSizeValue,
103
147
  totalVisibleColumns: totalVisibleColumns,
104
- defaultColumn: defaultColumn
148
+ defaultColumn: defaultColumn,
149
+ visibleColumns: visibleColumns
105
150
  }),
106
151
  overflow: 'hidden'
107
152
  }),
@@ -122,6 +167,9 @@ export var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref)
122
167
  onClick: handleSelectAllClick,
123
168
  className: cx("".concat(blockClass, "__th"), "".concat(blockClass, "--interactive-cell-element"), "".concat(blockClass, "__th--select-all"), _defineProperty({}, "".concat(blockClass, "__th--active-header"), (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === 'header' && (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row) === 'header'))
124
169
  }, "\xA0")), headerGroup.headers.map(function (column, index) {
170
+ var _cx2;
171
+
172
+ var selectedHeader = checkSelectedHeaderCell(index, selectionAreas, 'column');
125
173
  return /*#__PURE__*/React.createElement("div", _extends({
126
174
  key: "column_".concat(index),
127
175
  role: "columnheader",
@@ -131,12 +179,16 @@ export var DataSpreadsheetHeader = /*#__PURE__*/forwardRef(function (_ref, ref)
131
179
  "data-row-index": "header",
132
180
  "data-column-index": index,
133
181
  tabIndex: -1,
134
- onClick: handleColumnHeaderClick(index),
182
+ onMouseDown: selectedHeader ? handleHeaderMouseDown(index) : null,
183
+ onMouseUp: selectedHeader ? function () {
184
+ return setSelectedHeaderReorderActive(false);
185
+ } : null,
186
+ onClick: !selectedHeader ? handleColumnHeaderClick(index) : null,
135
187
  style: {
136
188
  height: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.rowHeight,
137
- width: defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.width
189
+ width: (column === null || column === void 0 ? void 0 : column.width) || (defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.width)
138
190
  },
139
- className: cx("".concat(blockClass, "__th"), "".concat(blockClass, "--interactive-cell-element"), _defineProperty({}, "".concat(blockClass, "__th--active-header"), (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === index || checkActiveHeaderCell(index, selectionAreas, 'column'))),
191
+ className: cx("".concat(blockClass, "__th"), "".concat(blockClass, "--interactive-cell-element"), (_cx2 = {}, _defineProperty(_cx2, "".concat(blockClass, "__th--active-header"), (activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column) === index || checkActiveHeaderCell(index, selectionAreas, 'column')), _defineProperty(_cx2, "".concat(blockClass, "__th--selected-header"), selectedHeader), _defineProperty(_cx2, "".concat(blockClass, "__th--selected-header-reorder-active"), selectedHeaderReorderActive), _cx2)),
140
192
  type: "button"
141
193
  }, column.render('Header')));
142
194
  }));
@@ -170,6 +222,11 @@ DataSpreadsheetHeader.propTypes = {
170
222
  width: PropTypes.number
171
223
  }),
172
224
 
225
+ /**
226
+ * Whether or not a click/hold is active on a header cell
227
+ */
228
+ headerCellHoldActive: PropTypes.bool,
229
+
173
230
  /**
174
231
  * Headers provided from useTable hook
175
232
  */
@@ -200,6 +257,11 @@ DataSpreadsheetHeader.propTypes = {
200
257
  */
201
258
  setCurrentMatcher: PropTypes.func,
202
259
 
260
+ /**
261
+ * Setter fn for header cell hold active value
262
+ */
263
+ setHeaderCellHoldActive: PropTypes.func,
264
+
203
265
  /**
204
266
  * Setter fn for selectionAreaData state value
205
267
  */
@@ -219,5 +281,10 @@ DataSpreadsheetHeader.propTypes = {
219
281
  /**
220
282
  * Function used to update the active cell coordinates
221
283
  */
222
- updateActiveCellCoordinates: PropTypes.func
284
+ updateActiveCellCoordinates: PropTypes.func,
285
+
286
+ /**
287
+ * Array of visible columns provided by react-table useTable hook
288
+ */
289
+ visibleColumns: PropTypes.array
223
290
  };
@@ -8,4 +8,6 @@ export { useMoveActiveCell } from './useMoveActiveCell';
8
8
  export { useMultipleKeyTracking } from './useMultipleKeyTracking';
9
9
  export { useResetSpreadsheetFocus } from './useResetSpreadsheetFocus';
10
10
  export { useSpreadsheetOutsideClick } from './useSpreadsheetOutsideClick';
11
- export { useSpreadsheetEdit } from './useSpreadsheetEdit';
11
+ export { useSpreadsheetEdit } from './useSpreadsheetEdit';
12
+ export { useSpreadsheetMouseUp } from './useSpreadsheetMouseUp';
13
+ export { useSpreadsheetMouseMove } from './useSpreadsheetMouseMove';
@@ -1,11 +1,15 @@
1
- // /**
2
- // * Copyright IBM Corp. 2022, 2022
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 { useEffect } from 'react';
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+
3
+ /**
4
+ * Copyright IBM Corp. 2022, 2022
5
+ *
6
+ * This source code is licensed under the Apache-2.0 license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */
9
+ import { useEffect, useState } from 'react';
8
10
  import { px } from '@carbon/layout';
11
+ import { pkg } from '../../../settings';
12
+ import { usePreviousValue } from '../../../global/js/hooks';
9
13
  export var useSpreadsheetEdit = function useSpreadsheetEdit(_ref) {
10
14
  var isEditing = _ref.isEditing,
11
15
  rows = _ref.rows,
@@ -13,10 +17,29 @@ export var useSpreadsheetEdit = function useSpreadsheetEdit(_ref) {
13
17
  activeCellRef = _ref.activeCellRef,
14
18
  cellEditorRef = _ref.cellEditorRef,
15
19
  cellEditorRulerRef = _ref.cellEditorRulerRef,
16
- columns = _ref.columns,
20
+ visibleColumns = _ref.visibleColumns,
17
21
  defaultColumn = _ref.defaultColumn,
18
- cellEditorValue = _ref.cellEditorValue;
22
+ cellEditorValue = _ref.cellEditorValue,
23
+ _ref$blockClass = _ref.blockClass,
24
+ blockClass = _ref$blockClass === void 0 ? "".concat(pkg.prefix, "--data-spreadsheet") : _ref$blockClass;
25
+
26
+ var _useState = useState(null),
27
+ _useState2 = _slicedToArray(_useState, 2),
28
+ nextIndex = _useState2[0],
29
+ setNextIndex = _useState2[1];
30
+
31
+ var previousState = usePreviousValue({
32
+ nextIndex: nextIndex
33
+ });
19
34
  useEffect(function () {
35
+ if (!(previousState !== null && previousState !== void 0 && previousState.nextIndex)) {
36
+ setNextIndex(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column);
37
+ }
38
+ }, [previousState === null || previousState === void 0 ? void 0 : previousState.nextIndex, activeCellCoordinates]);
39
+ useEffect(function () {
40
+ var rulerWidth = cellEditorRulerRef.current.offsetWidth;
41
+ var cellEditorCurrentWidth = parseInt(cellEditorRef.current.style.width);
42
+
20
43
  if (isEditing) {
21
44
  var _rows$activeCellCoord, _cellProps$column, _cellEditorRef$curren;
22
45
 
@@ -26,25 +49,47 @@ export var useSpreadsheetEdit = function useSpreadsheetEdit(_ref) {
26
49
  cellEditorRef.current.style.left = activeCellLeftPosition;
27
50
  cellEditorRef.current.style.top = activeCellTopPosition;
28
51
  cellEditorRef.current.style.display = 'block';
29
- cellEditorRef.current.style.width = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.width;
30
52
  cellEditorRef.current.style.height = activeCellRef === null || activeCellRef === void 0 ? void 0 : activeCellRef.current.style.height;
31
53
  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
32
54
 
33
55
  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';
34
56
  (_cellEditorRef$curren = cellEditorRef.current) === null || _cellEditorRef$curren === void 0 ? void 0 : _cellEditorRef$curren.focus();
35
- var rulerWidth = cellEditorRulerRef.current.offsetWidth;
36
- var cellWidth = activeCellRef.current.offsetWidth;
37
57
 
38
- if (rulerWidth >= cellWidth) {
39
- var widthMultiplier = Math.floor(rulerWidth / cellWidth) + 1;
40
- var startingColumnPosition = activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column;
58
+ if (rulerWidth < cellEditorCurrentWidth) {
59
+ var _visibleColumns$nextI;
60
+
61
+ var currentColumnWidth = ((_visibleColumns$nextI = visibleColumns[nextIndex]) === null || _visibleColumns$nextI === void 0 ? void 0 : _visibleColumns$nextI.width) || (defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.width); // If the contents of the cell editor is deleted past the point of the next column
62
+
63
+ if (rulerWidth < cellEditorCurrentWidth - currentColumnWidth) {
64
+ cellEditorRef.current.style.width = px(parseInt(cellEditorRef.current.style.width) - currentColumnWidth);
65
+ setNextIndex(function (prev) {
66
+ if (prev === 0) {
67
+ return prev;
68
+ }
69
+
70
+ return prev - 1;
71
+ });
72
+ } // Decrease cell editor width by increment of current column width
73
+
74
+ }
75
+
76
+ if (rulerWidth >= cellEditorCurrentWidth) {
77
+ var _visibleColumns;
78
+
79
+ setNextIndex(function (prev) {
80
+ if (prev === visibleColumns.length - 1) {
81
+ return prev;
82
+ }
83
+
84
+ return prev + 1;
85
+ });
86
+ var onLastColumnIndex = nextIndex + 1 === visibleColumns.length;
87
+ var nextColumnWidth = onLastColumnIndex ? 0 : ((_visibleColumns = visibleColumns[nextIndex + 1]) === null || _visibleColumns === void 0 ? void 0 : _visibleColumns.width) || (defaultColumn === null || defaultColumn === void 0 ? void 0 : defaultColumn.width);
41
88
  var startingRowPosition = activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row;
42
- var totalColumns = columns.length;
43
89
  var totalRows = rows.length;
44
- var totalMultiplierPossible = totalColumns - startingColumnPosition;
45
90
  var totalCellEditorMaxHeight = (totalRows - startingRowPosition) * defaultColumn.rowHeight;
46
91
  cellEditorRef.current.style.maxHeight = px(totalCellEditorMaxHeight);
47
- cellEditorRef.current.style.width = px(cellWidth * (widthMultiplier <= totalMultiplierPossible ? widthMultiplier : totalMultiplierPossible));
92
+ cellEditorRef.current.style.width = px(nextColumnWidth + cellEditorCurrentWidth);
48
93
  cellEditorRef.current.style.height = px(cellEditorRef.current.scrollHeight); // adds dynamic height to cell editor
49
94
  // Cell editor has reached max height, we need to add the scrolling back.
50
95
  // We also need to subtract 1 to account for the fact that the cell editor
@@ -63,6 +108,7 @@ export var useSpreadsheetEdit = function useSpreadsheetEdit(_ref) {
63
108
  cellEditorRef.current.style.display = 'none';
64
109
  cellEditorRef.current.blur();
65
110
  activeCellRef.current.focus();
111
+ setNextIndex(activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column);
66
112
  }
67
- }, [isEditing, activeCellCoordinates, rows, cellEditorValue, columns.length, defaultColumn, cellEditorValue, activeCellRef, cellEditorRef, cellEditorRulerRef]);
113
+ }, [isEditing, activeCellCoordinates, rows, cellEditorValue, defaultColumn, activeCellRef, cellEditorRef, cellEditorRulerRef, visibleColumns, blockClass, previousState === null || previousState === void 0 ? void 0 : previousState.cellEditorValue, nextIndex]);
68
114
  };
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Copyright IBM Corp. 2022, 2022
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 { useEffect } from 'react';
8
+ import { px } from '@carbon/layout';
9
+ import { pkg } from '../../../settings';
10
+ import { getScrollbarWidth } from '../../../global/js/utils/getScrollbarWidth';
11
+ import { moveColumnIndicatorLine } from '../utils/moveColumnIndicatorLine'; // Used specifically for reordering columns, will move the position of the
12
+ // cloned selection area to follow the position of the cursor
13
+
14
+ export var useSpreadsheetMouseMove = function useSpreadsheetMouseMove(_ref) {
15
+ var ref = _ref.ref,
16
+ _ref$blockClass = _ref.blockClass,
17
+ blockClass = _ref$blockClass === void 0 ? "".concat(pkg.prefix, "--data-spreadsheet") : _ref$blockClass,
18
+ headerCellHoldActive = _ref.headerCellHoldActive,
19
+ defaultColumn = _ref.defaultColumn;
20
+ useEffect(function () {
21
+ var handleMouseMove = function handleMouseMove(event) {
22
+ var clonedSelectionElement = ref.current.querySelector(".".concat(blockClass, "__selection-area--element-cloned"));
23
+
24
+ if (clonedSelectionElement) {
25
+ ref.current.addEventListener('mousemove', handleMouseMove);
26
+ }
27
+
28
+ var spreadsheetCoords = ref.current.getBoundingClientRect();
29
+ moveColumnIndicatorLine({
30
+ clonedSelectionElement: clonedSelectionElement,
31
+ ref: ref,
32
+ spreadsheetCoords: spreadsheetCoords
33
+ });
34
+ var scrollbarWidth = getScrollbarWidth();
35
+ var spreadsheetWrapperElement = ref.current;
36
+ spreadsheetWrapperElement.getBoundingClientRect();
37
+ var xPositionRelativeToSpreadsheet = event.clientX - spreadsheetCoords.left;
38
+ var offsetXValue = clonedSelectionElement === null || clonedSelectionElement === void 0 ? void 0 : clonedSelectionElement.getAttribute('data-clone-offset-x');
39
+ var totalSpreadsheetWidth = ref.current.offsetWidth;
40
+ var clonedSelectionWidth = clonedSelectionElement.offsetWidth;
41
+ 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
42
+
43
+ clonedSelectionElement.style.left = px(totalSpreadsheetWidth - clonedSelectionWidth - scrollbarWidth >= clonePlacement ? clonePlacement : totalSpreadsheetWidth - clonedSelectionWidth - scrollbarWidth);
44
+ };
45
+
46
+ if (headerCellHoldActive) {
47
+ ref.current.addEventListener('mousemove', handleMouseMove);
48
+ }
49
+
50
+ var spreadsheetRef = ref.current;
51
+
52
+ if (!headerCellHoldActive) {
53
+ spreadsheetRef === null || spreadsheetRef === void 0 ? void 0 : spreadsheetRef.removeEventListener('mousemove', handleMouseMove);
54
+ }
55
+
56
+ return function () {
57
+ spreadsheetRef === null || spreadsheetRef === void 0 ? void 0 : spreadsheetRef.removeEventListener('mousemove', handleMouseMove);
58
+ };
59
+ });
60
+ };