@deephaven/grid 0.4.1-modules.0 → 0.5.2-beta.0

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 (74) hide show
  1. package/dist/CellInputField.js +88 -40
  2. package/dist/CellInputField.js.map +1 -1
  3. package/dist/Grid.js +1484 -1449
  4. package/dist/Grid.js.map +1 -1
  5. package/dist/GridColorUtils.js +51 -18
  6. package/dist/GridColorUtils.js.map +1 -1
  7. package/dist/GridMetricCalculator.js +994 -1017
  8. package/dist/GridMetricCalculator.js.map +1 -1
  9. package/dist/GridModel.js +286 -171
  10. package/dist/GridModel.js.map +1 -1
  11. package/dist/GridMouseHandler.js +59 -39
  12. package/dist/GridMouseHandler.js.map +1 -1
  13. package/dist/GridRange.js +630 -572
  14. package/dist/GridRange.js.map +1 -1
  15. package/dist/GridRenderer.d.ts.map +1 -1
  16. package/dist/GridRenderer.js +1564 -1650
  17. package/dist/GridRenderer.js.map +1 -1
  18. package/dist/GridTestUtils.js +29 -15
  19. package/dist/GridTestUtils.js.map +1 -1
  20. package/dist/GridUtils.js +717 -679
  21. package/dist/GridUtils.js.map +1 -1
  22. package/dist/KeyHandler.js +18 -6
  23. package/dist/KeyHandler.js.map +1 -1
  24. package/dist/MockGridModel.js +210 -105
  25. package/dist/MockGridModel.js.map +1 -1
  26. package/dist/MockTreeGridModel.js +183 -113
  27. package/dist/MockTreeGridModel.js.map +1 -1
  28. package/dist/errors/PasteError.js +44 -5
  29. package/dist/errors/PasteError.js.map +1 -1
  30. package/dist/errors/index.js +1 -1
  31. package/dist/errors/index.js.map +1 -1
  32. package/dist/index.js +15 -15
  33. package/dist/index.js.map +1 -1
  34. package/dist/key-handlers/EditKeyHandler.js +75 -42
  35. package/dist/key-handlers/EditKeyHandler.js.map +1 -1
  36. package/dist/key-handlers/PasteKeyHandler.js +78 -42
  37. package/dist/key-handlers/PasteKeyHandler.js.map +1 -1
  38. package/dist/key-handlers/SelectionKeyHandler.js +234 -220
  39. package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
  40. package/dist/key-handlers/TreeKeyHandler.js +72 -42
  41. package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
  42. package/dist/key-handlers/index.js +4 -4
  43. package/dist/key-handlers/index.js.map +1 -1
  44. package/dist/memoizeClear.js +1 -1
  45. package/dist/memoizeClear.js.map +1 -1
  46. package/dist/mouse-handlers/EditMouseHandler.js +50 -18
  47. package/dist/mouse-handlers/EditMouseHandler.js.map +1 -1
  48. package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +163 -141
  49. package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
  50. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js +86 -47
  51. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
  52. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.d.ts.map +1 -1
  53. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js +171 -143
  54. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
  55. package/dist/mouse-handlers/GridRowMoveMouseHandler.js +147 -125
  56. package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
  57. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js +86 -47
  58. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
  59. package/dist/mouse-handlers/GridRowTreeMouseHandler.js +76 -46
  60. package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
  61. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.d.ts.map +1 -1
  62. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js +62 -31
  63. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -1
  64. package/dist/mouse-handlers/GridSelectionMouseHandler.js +222 -200
  65. package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
  66. package/dist/mouse-handlers/GridSeparatorMouseHandler.js +253 -206
  67. package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
  68. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.d.ts.map +1 -1
  69. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js +172 -144
  70. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -1
  71. package/dist/mouse-handlers/index.js +10 -10
  72. package/dist/mouse-handlers/index.js.map +1 -1
  73. package/dist/tsconfig.tsbuildinfo +1 -1
  74. package/package.json +4 -5
@@ -1,241 +1,263 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
2
+
3
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
4
+
5
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
6
+
7
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
8
+
9
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
10
+
11
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
12
+
13
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
14
+
15
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
16
+
17
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
18
+
19
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
20
+
21
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
22
+
1
23
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
24
 
3
- import GridMouseHandler from "../GridMouseHandler.js";
4
- import GridUtils from "../GridUtils.js";
25
+ import GridMouseHandler from '../GridMouseHandler';
26
+ import GridUtils from '../GridUtils';
5
27
  var DEFAULT_INTERVAL_MS = 100;
6
28
 
7
- class GridSelectionMouseHandler extends GridMouseHandler {
8
- constructor() {
9
- super(...arguments);
29
+ var GridSelectionMouseHandler = /*#__PURE__*/function (_GridMouseHandler) {
30
+ _inherits(GridSelectionMouseHandler, _GridMouseHandler);
10
31
 
11
- _defineProperty(this, "startPoint", null);
32
+ var _super = _createSuper(GridSelectionMouseHandler);
12
33
 
13
- _defineProperty(this, "hasExtendedFloating", false);
34
+ function GridSelectionMouseHandler() {
35
+ var _this;
14
36
 
15
- _defineProperty(this, "timer", null);
37
+ _classCallCheck(this, GridSelectionMouseHandler);
16
38
 
17
- _defineProperty(this, "lastTriggerTime", null);
39
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
40
+ args[_key] = arguments[_key];
41
+ }
18
42
 
19
- _defineProperty(this, "dragBounds", null);
20
- }
43
+ _this = _super.call.apply(_super, [this].concat(args));
21
44
 
22
- onDown(gridPoint, grid, event) {
23
- var {
24
- x,
25
- y,
26
- column,
27
- row
28
- } = gridPoint;
29
- var {
30
- metrics
31
- } = grid;
32
- var {
33
- gridX,
34
- gridY,
35
- maxX,
36
- maxY
37
- } = metrics;
38
- var gridMouseX = x - gridX;
39
- var gridMouseY = y - gridY;
40
-
41
- if (gridMouseX < 0 || gridMouseY < 0 || column == null && gridMouseX > maxX || row == null && gridMouseY > maxY) {
42
- return false;
43
- }
45
+ _defineProperty(_assertThisInitialized(_this), "startPoint", null);
44
46
 
45
- var isModifierKey = GridUtils.isModifierKeyDown(event);
46
- var isShiftKey = event.shiftKey;
47
+ _defineProperty(_assertThisInitialized(_this), "hasExtendedFloating", false);
47
48
 
48
- if (!isModifierKey) {
49
- if (isShiftKey) {
50
- grid.trimSelectedRanges();
51
- } else {
52
- grid.clearSelectedRanges();
53
- }
54
- }
49
+ _defineProperty(_assertThisInitialized(_this), "timer", null);
55
50
 
56
- var theme = grid.getTheme();
57
- var {
58
- autoSelectRow,
59
- autoSelectColumn
60
- } = theme; // If they click a column/row header, don't want to select the whole table if auto select column/row is on
51
+ _defineProperty(_assertThisInitialized(_this), "lastTriggerTime", null);
61
52
 
62
- if ((column !== null || !autoSelectColumn) && (row !== null || !autoSelectRow)) {
63
- grid.focus();
64
- grid.moveCursorToPosition(column, row, isShiftKey, true, isShiftKey && isModifierKey);
65
- }
53
+ _defineProperty(_assertThisInitialized(_this), "dragBounds", null);
66
54
 
67
- this.startPoint = gridPoint;
68
- this.hasExtendedFloating = false;
69
- this.dragBounds = GridUtils.getScrollDragBounds(metrics, row, column);
70
- return true;
55
+ return _this;
71
56
  }
72
57
 
73
- onDrag(gridPoint, grid) {
74
- if (this.startPoint === null) {
75
- return false;
76
- }
58
+ _createClass(GridSelectionMouseHandler, [{
59
+ key: "onDown",
60
+ value: function onDown(gridPoint, grid, event) {
61
+ var x = gridPoint.x,
62
+ y = gridPoint.y,
63
+ column = gridPoint.column,
64
+ row = gridPoint.row;
65
+ var metrics = grid.metrics;
66
+ var gridX = metrics.gridX,
67
+ gridY = metrics.gridY,
68
+ maxX = metrics.maxX,
69
+ maxY = metrics.maxY;
70
+ var gridMouseX = x - gridX;
71
+ var gridMouseY = y - gridY;
72
+
73
+ if (gridMouseX < 0 || gridMouseY < 0 || column == null && gridMouseX > maxX || row == null && gridMouseY > maxY) {
74
+ return false;
75
+ }
77
76
 
78
- this.stopTimer();
79
- var {
80
- row: startRow,
81
- column: startColumn
82
- } = this.startPoint;
83
- var {
84
- x,
85
- y
86
- } = gridPoint;
87
- var {
88
- row,
89
- column
90
- } = gridPoint;
91
- var {
92
- metrics
93
- } = grid;
94
- var {
95
- left,
96
- lastLeft,
97
- top,
98
- lastTop,
99
- columnWidth,
100
- rowHeight
101
- } = metrics;
102
- var dragBounds = GridUtils.getScrollDragBounds(metrics, startRow, startColumn); // If we're dragging outside of the grid entirely, then we should start scrolling
103
-
104
- var deltaX = 0;
105
- var deltaY = 0;
106
-
107
- if (left < lastLeft) {
108
- if (x < dragBounds.x) {
109
- deltaX = x - dragBounds.x;
110
- } else if (x > dragBounds.x2) {
111
- deltaX = x - dragBounds.x2;
77
+ var isModifierKey = GridUtils.isModifierKeyDown(event);
78
+ var isShiftKey = event.shiftKey;
79
+
80
+ if (!isModifierKey) {
81
+ if (isShiftKey) {
82
+ grid.trimSelectedRanges();
83
+ } else {
84
+ grid.clearSelectedRanges();
85
+ }
112
86
  }
113
- }
114
87
 
115
- if (top < lastTop) {
116
- if (y < dragBounds.y) {
117
- deltaY = y - dragBounds.y;
118
- } else if (y > dragBounds.y2) {
119
- deltaY = y - dragBounds.y2;
88
+ var theme = grid.getTheme();
89
+ var autoSelectRow = theme.autoSelectRow,
90
+ autoSelectColumn = theme.autoSelectColumn; // If they click a column/row header, don't want to select the whole table if auto select column/row is on
91
+
92
+ if ((column !== null || !autoSelectColumn) && (row !== null || !autoSelectRow)) {
93
+ grid.focus();
94
+ grid.moveCursorToPosition(column, row, isShiftKey, true, isShiftKey && isModifierKey);
120
95
  }
96
+
97
+ this.startPoint = gridPoint;
98
+ this.hasExtendedFloating = false;
99
+ this.dragBounds = GridUtils.getScrollDragBounds(metrics, row, column);
100
+ return true;
121
101
  }
102
+ }, {
103
+ key: "onDrag",
104
+ value: function onDrag(gridPoint, grid) {
105
+ if (this.startPoint === null) {
106
+ return false;
107
+ }
122
108
 
123
- if (deltaX !== 0 || deltaY !== 0) {
124
- // Have it go faster depending on how far out they've dragged
125
- this.startTimer(grid, gridPoint, deltaX > 0 ? Math.ceil(deltaX / columnWidth) : Math.floor(deltaX / columnWidth), deltaY > 0 ? Math.ceil(deltaY / rowHeight) : Math.floor(deltaY / rowHeight));
126
- } else if (row != null && column != null) {
127
- var {
128
- floatingTopRowCount,
129
- floatingBottomRowCount,
130
- floatingLeftColumnCount,
131
- floatingRightColumnCount,
132
- columnCount,
133
- rowCount,
134
- bottom,
135
- right,
136
- topVisible,
137
- bottomVisible,
138
- leftVisible,
139
- rightVisible
140
- } = metrics; // When selection crosses from a floating area to a non floating area, we need to scroll instead of jumping to the floating area
141
- // So when that happens, just adjust the point to be past the new boundary
142
-
143
- if (!this.hasExtendedFloating) {
144
- if (startRow < floatingTopRowCount && row >= floatingTopRowCount) {
145
- // Extending from floating top into the view
146
- row = floatingTopRowCount;
147
- this.hasExtendedFloating = true;
148
- } else if (startRow >= rowCount - floatingBottomRowCount && row < rowCount - floatingBottomRowCount) {
149
- // Extending from floating bottom into the view
150
- row = rowCount - floatingBottomRowCount - 1;
151
- this.hasExtendedFloating = true;
109
+ this.stopTimer();
110
+ var _this$startPoint = this.startPoint,
111
+ startRow = _this$startPoint.row,
112
+ startColumn = _this$startPoint.column;
113
+ var x = gridPoint.x,
114
+ y = gridPoint.y;
115
+ var row = gridPoint.row,
116
+ column = gridPoint.column;
117
+ var metrics = grid.metrics;
118
+ var left = metrics.left,
119
+ lastLeft = metrics.lastLeft,
120
+ top = metrics.top,
121
+ lastTop = metrics.lastTop,
122
+ columnWidth = metrics.columnWidth,
123
+ rowHeight = metrics.rowHeight;
124
+ var dragBounds = GridUtils.getScrollDragBounds(metrics, startRow, startColumn); // If we're dragging outside of the grid entirely, then we should start scrolling
125
+
126
+ var deltaX = 0;
127
+ var deltaY = 0;
128
+
129
+ if (left < lastLeft) {
130
+ if (x < dragBounds.x) {
131
+ deltaX = x - dragBounds.x;
132
+ } else if (x > dragBounds.x2) {
133
+ deltaX = x - dragBounds.x2;
152
134
  }
135
+ }
153
136
 
154
- if (startColumn < floatingLeftColumnCount && column >= floatingLeftColumnCount) {
155
- // Extending from floating left into the view
156
- column = floatingLeftColumnCount;
157
- this.hasExtendedFloating = true;
158
- } else if (startColumn >= columnCount - floatingRightColumnCount && column < columnCount - floatingRightColumnCount) {
159
- // Extending from floating right into the view
160
- column = columnCount - floatingRightColumnCount - 1;
161
- this.hasExtendedFloating = true;
137
+ if (top < lastTop) {
138
+ if (y < dragBounds.y) {
139
+ deltaY = y - dragBounds.y;
140
+ } else if (y > dragBounds.y2) {
141
+ deltaY = y - dragBounds.y2;
162
142
  }
163
- } // When a selection is dragging from within the main area to over a floating area, scroll.
164
-
143
+ }
165
144
 
166
- if (!GridUtils.isFloatingRow(startRow, metrics) && GridUtils.isFloatingRow(row, metrics)) {
167
- // Need to scroll
168
- if (startRow > row && row < top) {
169
- row = topVisible - 1;
170
- } else if (startRow < row && row > bottom) {
171
- row = bottomVisible + 1;
145
+ if (deltaX !== 0 || deltaY !== 0) {
146
+ // Have it go faster depending on how far out they've dragged
147
+ this.startTimer(grid, gridPoint, deltaX > 0 ? Math.ceil(deltaX / columnWidth) : Math.floor(deltaX / columnWidth), deltaY > 0 ? Math.ceil(deltaY / rowHeight) : Math.floor(deltaY / rowHeight));
148
+ } else if (row != null && column != null) {
149
+ var floatingTopRowCount = metrics.floatingTopRowCount,
150
+ floatingBottomRowCount = metrics.floatingBottomRowCount,
151
+ floatingLeftColumnCount = metrics.floatingLeftColumnCount,
152
+ floatingRightColumnCount = metrics.floatingRightColumnCount,
153
+ columnCount = metrics.columnCount,
154
+ rowCount = metrics.rowCount,
155
+ bottom = metrics.bottom,
156
+ right = metrics.right,
157
+ topVisible = metrics.topVisible,
158
+ bottomVisible = metrics.bottomVisible,
159
+ leftVisible = metrics.leftVisible,
160
+ rightVisible = metrics.rightVisible; // When selection crosses from a floating area to a non floating area, we need to scroll instead of jumping to the floating area
161
+ // So when that happens, just adjust the point to be past the new boundary
162
+
163
+ if (!this.hasExtendedFloating) {
164
+ if (startRow < floatingTopRowCount && row >= floatingTopRowCount) {
165
+ // Extending from floating top into the view
166
+ row = floatingTopRowCount;
167
+ this.hasExtendedFloating = true;
168
+ } else if (startRow >= rowCount - floatingBottomRowCount && row < rowCount - floatingBottomRowCount) {
169
+ // Extending from floating bottom into the view
170
+ row = rowCount - floatingBottomRowCount - 1;
171
+ this.hasExtendedFloating = true;
172
+ }
173
+
174
+ if (startColumn < floatingLeftColumnCount && column >= floatingLeftColumnCount) {
175
+ // Extending from floating left into the view
176
+ column = floatingLeftColumnCount;
177
+ this.hasExtendedFloating = true;
178
+ } else if (startColumn >= columnCount - floatingRightColumnCount && column < columnCount - floatingRightColumnCount) {
179
+ // Extending from floating right into the view
180
+ column = columnCount - floatingRightColumnCount - 1;
181
+ this.hasExtendedFloating = true;
182
+ }
183
+ } // When a selection is dragging from within the main area to over a floating area, scroll.
184
+
185
+
186
+ if (!GridUtils.isFloatingRow(startRow, metrics) && GridUtils.isFloatingRow(row, metrics)) {
187
+ // Need to scroll
188
+ if (startRow > row && row < top) {
189
+ row = topVisible - 1;
190
+ } else if (startRow < row && row > bottom) {
191
+ row = bottomVisible + 1;
192
+ }
172
193
  }
173
- }
174
194
 
175
- if (!GridUtils.isFloatingColumn(startColumn, metrics) && GridUtils.isFloatingColumn(column, metrics)) {
176
- if (startColumn > column && column < left) {
177
- column = leftVisible - 1;
178
- } else if (startColumn < column && column > right) {
179
- column = rightVisible + 1;
195
+ if (!GridUtils.isFloatingColumn(startColumn, metrics) && GridUtils.isFloatingColumn(column, metrics)) {
196
+ if (startColumn > column && column < left) {
197
+ column = leftVisible - 1;
198
+ } else if (startColumn < column && column > right) {
199
+ column = rightVisible + 1;
200
+ }
180
201
  }
202
+
203
+ grid.moveCursorToPosition(column, row, true, true);
181
204
  }
182
205
 
183
- grid.moveCursorToPosition(column, row, true, true);
206
+ return true;
184
207
  }
208
+ }, {
209
+ key: "onUp",
210
+ value: function onUp(gridPoint, grid) {
211
+ if (this.startPoint !== null) {
212
+ this.startPoint = null;
213
+ this.dragBounds = null;
214
+ this.stopTimer();
215
+ grid.commitSelection();
216
+ }
185
217
 
186
- return true;
187
- }
188
-
189
- onUp(gridPoint, grid) {
190
- if (this.startPoint !== null) {
191
- this.startPoint = null;
192
- this.dragBounds = null;
193
- this.stopTimer();
194
- grid.commitSelection();
218
+ return false;
195
219
  }
220
+ }, {
221
+ key: "moveSelection",
222
+ value: function moveSelection(grid, gridPoint, deltaX, deltaY) {
223
+ var row = gridPoint.row,
224
+ column = gridPoint.column;
225
+ var metrics = grid.metrics;
226
+ var _grid$state = grid.state,
227
+ selectionEndRow = _grid$state.selectionEndRow,
228
+ selectionEndColumn = _grid$state.selectionEndColumn;
229
+ var rowCount = metrics.rowCount,
230
+ columnCount = metrics.columnCount;
231
+ var minX = deltaX < 0 && column != null ? column : 0;
232
+ var maxX = deltaX > 0 && column != null ? column : columnCount - 1;
233
+ var minY = deltaY < 0 && row != null ? row : 0;
234
+ var maxY = deltaY > 0 && row != null ? row : rowCount - 1;
235
+ grid.moveCursorToPosition(Math.min(Math.max(minX, selectionEndColumn + deltaX), maxX), Math.min(Math.max(minY, selectionEndRow + deltaY), maxY), true);
236
+ this.lastTriggerTime = Date.now();
237
+ }
238
+ }, {
239
+ key: "startTimer",
240
+ value: function startTimer(grid, gridPoint, deltaX, deltaY) {
241
+ var _this2 = this;
196
242
 
197
- return false;
198
- }
199
-
200
- moveSelection(grid, gridPoint, deltaX, deltaY) {
201
- var {
202
- row,
203
- column
204
- } = gridPoint;
205
- var {
206
- metrics
207
- } = grid;
208
- var {
209
- selectionEndRow,
210
- selectionEndColumn
211
- } = grid.state;
212
- var {
213
- rowCount,
214
- columnCount
215
- } = metrics;
216
- var minX = deltaX < 0 && column != null ? column : 0;
217
- var maxX = deltaX > 0 && column != null ? column : columnCount - 1;
218
- var minY = deltaY < 0 && row != null ? row : 0;
219
- var maxY = deltaY > 0 && row != null ? row : rowCount - 1;
220
- grid.moveCursorToPosition(Math.min(Math.max(minX, selectionEndColumn + deltaX), maxX), Math.min(Math.max(minY, selectionEndRow + deltaY), maxY), true);
221
- this.lastTriggerTime = Date.now();
222
- }
223
-
224
- startTimer(grid, gridPoint, deltaX, deltaY) {
225
- this.stopTimer();
226
- var timeout = this.lastTriggerTime != null ? DEFAULT_INTERVAL_MS - Math.min(DEFAULT_INTERVAL_MS, Date.now() - this.lastTriggerTime) : 0;
227
- this.timer = setTimeout(() => {
228
- this.moveSelection(grid, gridPoint, deltaX, deltaY);
229
- this.startTimer(grid, gridPoint, deltaX, deltaY);
230
- }, timeout);
231
- }
243
+ this.stopTimer();
244
+ var timeout = this.lastTriggerTime != null ? DEFAULT_INTERVAL_MS - Math.min(DEFAULT_INTERVAL_MS, Date.now() - this.lastTriggerTime) : 0;
245
+ this.timer = setTimeout(function () {
246
+ _this2.moveSelection(grid, gridPoint, deltaX, deltaY);
232
247
 
233
- stopTimer() {
234
- clearTimeout(this.timer);
235
- this.timer = null;
236
- }
248
+ _this2.startTimer(grid, gridPoint, deltaX, deltaY);
249
+ }, timeout);
250
+ }
251
+ }, {
252
+ key: "stopTimer",
253
+ value: function stopTimer() {
254
+ clearTimeout(this.timer);
255
+ this.timer = null;
256
+ }
257
+ }]);
237
258
 
238
- }
259
+ return GridSelectionMouseHandler;
260
+ }(GridMouseHandler);
239
261
 
240
262
  export default GridSelectionMouseHandler;
241
263
  //# sourceMappingURL=GridSelectionMouseHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mouse-handlers/GridSelectionMouseHandler.js"],"names":["GridMouseHandler","GridUtils","DEFAULT_INTERVAL_MS","GridSelectionMouseHandler","onDown","gridPoint","grid","event","x","y","column","row","metrics","gridX","gridY","maxX","maxY","gridMouseX","gridMouseY","isModifierKey","isModifierKeyDown","isShiftKey","shiftKey","trimSelectedRanges","clearSelectedRanges","theme","getTheme","autoSelectRow","autoSelectColumn","focus","moveCursorToPosition","startPoint","hasExtendedFloating","dragBounds","getScrollDragBounds","onDrag","stopTimer","startRow","startColumn","left","lastLeft","top","lastTop","columnWidth","rowHeight","deltaX","deltaY","x2","y2","startTimer","Math","ceil","floor","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","columnCount","rowCount","bottom","right","topVisible","bottomVisible","leftVisible","rightVisible","isFloatingRow","isFloatingColumn","onUp","commitSelection","moveSelection","selectionEndRow","selectionEndColumn","state","minX","minY","min","max","lastTriggerTime","Date","now","timeout","timer","setTimeout","clearTimeout"],"mappings":"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","sourcesContent":["import GridMouseHandler from '../GridMouseHandler';\nimport GridUtils from '../GridUtils';\n\nconst DEFAULT_INTERVAL_MS = 100;\n\nclass GridSelectionMouseHandler extends GridMouseHandler {\n startPoint = null;\n\n hasExtendedFloating = false;\n\n // Timer used when holding a drag past the end of the grid\n timer = null;\n\n lastTriggerTime = null;\n\n dragBounds = null;\n\n onDown(gridPoint, grid, event) {\n const { x, y, column, row } = gridPoint;\n const { metrics } = grid;\n const { gridX, gridY, maxX, maxY } = metrics;\n const gridMouseX = x - gridX;\n const gridMouseY = y - gridY;\n if (\n gridMouseX < 0 ||\n gridMouseY < 0 ||\n (column == null && gridMouseX > maxX) ||\n (row == null && gridMouseY > maxY)\n ) {\n return false;\n }\n\n const isModifierKey = GridUtils.isModifierKeyDown(event);\n const isShiftKey = event.shiftKey;\n if (!isModifierKey) {\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n }\n\n const theme = grid.getTheme();\n const { autoSelectRow, autoSelectColumn } = theme;\n // If they click a column/row header, don't want to select the whole table if auto select column/row is on\n if (\n (column !== null || !autoSelectColumn) &&\n (row !== null || !autoSelectRow)\n ) {\n grid.focus();\n grid.moveCursorToPosition(\n column,\n row,\n isShiftKey,\n true,\n isShiftKey && isModifierKey\n );\n }\n\n this.startPoint = gridPoint;\n this.hasExtendedFloating = false;\n this.dragBounds = GridUtils.getScrollDragBounds(metrics, row, column);\n\n return true;\n }\n\n onDrag(gridPoint, grid) {\n if (this.startPoint === null) {\n return false;\n }\n\n this.stopTimer();\n\n const { row: startRow, column: startColumn } = this.startPoint;\n const { x, y } = gridPoint;\n let { row, column } = gridPoint;\n const { metrics } = grid;\n const { left, lastLeft, top, lastTop, columnWidth, rowHeight } = metrics;\n const dragBounds = GridUtils.getScrollDragBounds(\n metrics,\n startRow,\n startColumn\n );\n\n // If we're dragging outside of the grid entirely, then we should start scrolling\n let deltaX = 0;\n let deltaY = 0;\n if (left < lastLeft) {\n if (x < dragBounds.x) {\n deltaX = x - dragBounds.x;\n } else if (x > dragBounds.x2) {\n deltaX = x - dragBounds.x2;\n }\n }\n if (top < lastTop) {\n if (y < dragBounds.y) {\n deltaY = y - dragBounds.y;\n } else if (y > dragBounds.y2) {\n deltaY = y - dragBounds.y2;\n }\n }\n\n if (deltaX !== 0 || deltaY !== 0) {\n // Have it go faster depending on how far out they've dragged\n this.startTimer(\n grid,\n gridPoint,\n deltaX > 0\n ? Math.ceil(deltaX / columnWidth)\n : Math.floor(deltaX / columnWidth),\n deltaY > 0\n ? Math.ceil(deltaY / rowHeight)\n : Math.floor(deltaY / rowHeight)\n );\n } else if (row != null && column != null) {\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n rowCount,\n bottom,\n right,\n topVisible,\n bottomVisible,\n leftVisible,\n rightVisible,\n } = metrics;\n // When selection crosses from a floating area to a non floating area, we need to scroll instead of jumping to the floating area\n // So when that happens, just adjust the point to be past the new boundary\n if (!this.hasExtendedFloating) {\n if (startRow < floatingTopRowCount && row >= floatingTopRowCount) {\n // Extending from floating top into the view\n row = floatingTopRowCount;\n this.hasExtendedFloating = true;\n } else if (\n startRow >= rowCount - floatingBottomRowCount &&\n row < rowCount - floatingBottomRowCount\n ) {\n // Extending from floating bottom into the view\n row = rowCount - floatingBottomRowCount - 1;\n this.hasExtendedFloating = true;\n }\n\n if (\n startColumn < floatingLeftColumnCount &&\n column >= floatingLeftColumnCount\n ) {\n // Extending from floating left into the view\n column = floatingLeftColumnCount;\n this.hasExtendedFloating = true;\n } else if (\n startColumn >= columnCount - floatingRightColumnCount &&\n column < columnCount - floatingRightColumnCount\n ) {\n // Extending from floating right into the view\n column = columnCount - floatingRightColumnCount - 1;\n this.hasExtendedFloating = true;\n }\n }\n\n // When a selection is dragging from within the main area to over a floating area, scroll.\n if (\n !GridUtils.isFloatingRow(startRow, metrics) &&\n GridUtils.isFloatingRow(row, metrics)\n ) {\n // Need to scroll\n if (startRow > row && row < top) {\n row = topVisible - 1;\n } else if (startRow < row && row > bottom) {\n row = bottomVisible + 1;\n }\n }\n if (\n !GridUtils.isFloatingColumn(startColumn, metrics) &&\n GridUtils.isFloatingColumn(column, metrics)\n ) {\n if (startColumn > column && column < left) {\n column = leftVisible - 1;\n } else if (startColumn < column && column > right) {\n column = rightVisible + 1;\n }\n }\n grid.moveCursorToPosition(column, row, true, true);\n }\n return true;\n }\n\n onUp(gridPoint, grid) {\n if (this.startPoint !== null) {\n this.startPoint = null;\n this.dragBounds = null;\n this.stopTimer();\n grid.commitSelection();\n }\n\n return false;\n }\n\n moveSelection(grid, gridPoint, deltaX, deltaY) {\n const { row, column } = gridPoint;\n const { metrics } = grid;\n const { selectionEndRow, selectionEndColumn } = grid.state;\n const { rowCount, columnCount } = metrics;\n const minX = deltaX < 0 && column != null ? column : 0;\n const maxX = deltaX > 0 && column != null ? column : columnCount - 1;\n const minY = deltaY < 0 && row != null ? row : 0;\n const maxY = deltaY > 0 && row != null ? row : rowCount - 1;\n grid.moveCursorToPosition(\n Math.min(Math.max(minX, selectionEndColumn + deltaX), maxX),\n Math.min(Math.max(minY, selectionEndRow + deltaY), maxY),\n true\n );\n this.lastTriggerTime = Date.now();\n }\n\n startTimer(grid, gridPoint, deltaX, deltaY) {\n this.stopTimer();\n\n const timeout =\n this.lastTriggerTime != null\n ? DEFAULT_INTERVAL_MS -\n Math.min(DEFAULT_INTERVAL_MS, Date.now() - this.lastTriggerTime)\n : 0;\n this.timer = setTimeout(() => {\n this.moveSelection(grid, gridPoint, deltaX, deltaY);\n this.startTimer(grid, gridPoint, deltaX, deltaY);\n }, timeout);\n }\n\n stopTimer() {\n clearTimeout(this.timer);\n this.timer = null;\n }\n}\n\nexport default GridSelectionMouseHandler;\n"],"file":"GridSelectionMouseHandler.js"}
1
+ {"version":3,"sources":["../../src/mouse-handlers/GridSelectionMouseHandler.js"],"names":["GridMouseHandler","GridUtils","DEFAULT_INTERVAL_MS","GridSelectionMouseHandler","gridPoint","grid","event","x","y","column","row","metrics","gridX","gridY","maxX","maxY","gridMouseX","gridMouseY","isModifierKey","isModifierKeyDown","isShiftKey","shiftKey","trimSelectedRanges","clearSelectedRanges","theme","getTheme","autoSelectRow","autoSelectColumn","focus","moveCursorToPosition","startPoint","hasExtendedFloating","dragBounds","getScrollDragBounds","stopTimer","startRow","startColumn","left","lastLeft","top","lastTop","columnWidth","rowHeight","deltaX","deltaY","x2","y2","startTimer","Math","ceil","floor","floatingTopRowCount","floatingBottomRowCount","floatingLeftColumnCount","floatingRightColumnCount","columnCount","rowCount","bottom","right","topVisible","bottomVisible","leftVisible","rightVisible","isFloatingRow","isFloatingColumn","commitSelection","state","selectionEndRow","selectionEndColumn","minX","minY","min","max","lastTriggerTime","Date","now","timeout","timer","setTimeout","moveSelection","clearTimeout"],"mappings":"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","sourcesContent":["import GridMouseHandler from '../GridMouseHandler';\nimport GridUtils from '../GridUtils';\n\nconst DEFAULT_INTERVAL_MS = 100;\n\nclass GridSelectionMouseHandler extends GridMouseHandler {\n startPoint = null;\n\n hasExtendedFloating = false;\n\n // Timer used when holding a drag past the end of the grid\n timer = null;\n\n lastTriggerTime = null;\n\n dragBounds = null;\n\n onDown(gridPoint, grid, event) {\n const { x, y, column, row } = gridPoint;\n const { metrics } = grid;\n const { gridX, gridY, maxX, maxY } = metrics;\n const gridMouseX = x - gridX;\n const gridMouseY = y - gridY;\n if (\n gridMouseX < 0 ||\n gridMouseY < 0 ||\n (column == null && gridMouseX > maxX) ||\n (row == null && gridMouseY > maxY)\n ) {\n return false;\n }\n\n const isModifierKey = GridUtils.isModifierKeyDown(event);\n const isShiftKey = event.shiftKey;\n if (!isModifierKey) {\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n }\n\n const theme = grid.getTheme();\n const { autoSelectRow, autoSelectColumn } = theme;\n // If they click a column/row header, don't want to select the whole table if auto select column/row is on\n if (\n (column !== null || !autoSelectColumn) &&\n (row !== null || !autoSelectRow)\n ) {\n grid.focus();\n grid.moveCursorToPosition(\n column,\n row,\n isShiftKey,\n true,\n isShiftKey && isModifierKey\n );\n }\n\n this.startPoint = gridPoint;\n this.hasExtendedFloating = false;\n this.dragBounds = GridUtils.getScrollDragBounds(metrics, row, column);\n\n return true;\n }\n\n onDrag(gridPoint, grid) {\n if (this.startPoint === null) {\n return false;\n }\n\n this.stopTimer();\n\n const { row: startRow, column: startColumn } = this.startPoint;\n const { x, y } = gridPoint;\n let { row, column } = gridPoint;\n const { metrics } = grid;\n const { left, lastLeft, top, lastTop, columnWidth, rowHeight } = metrics;\n const dragBounds = GridUtils.getScrollDragBounds(\n metrics,\n startRow,\n startColumn\n );\n\n // If we're dragging outside of the grid entirely, then we should start scrolling\n let deltaX = 0;\n let deltaY = 0;\n if (left < lastLeft) {\n if (x < dragBounds.x) {\n deltaX = x - dragBounds.x;\n } else if (x > dragBounds.x2) {\n deltaX = x - dragBounds.x2;\n }\n }\n if (top < lastTop) {\n if (y < dragBounds.y) {\n deltaY = y - dragBounds.y;\n } else if (y > dragBounds.y2) {\n deltaY = y - dragBounds.y2;\n }\n }\n\n if (deltaX !== 0 || deltaY !== 0) {\n // Have it go faster depending on how far out they've dragged\n this.startTimer(\n grid,\n gridPoint,\n deltaX > 0\n ? Math.ceil(deltaX / columnWidth)\n : Math.floor(deltaX / columnWidth),\n deltaY > 0\n ? Math.ceil(deltaY / rowHeight)\n : Math.floor(deltaY / rowHeight)\n );\n } else if (row != null && column != null) {\n const {\n floatingTopRowCount,\n floatingBottomRowCount,\n floatingLeftColumnCount,\n floatingRightColumnCount,\n columnCount,\n rowCount,\n bottom,\n right,\n topVisible,\n bottomVisible,\n leftVisible,\n rightVisible,\n } = metrics;\n // When selection crosses from a floating area to a non floating area, we need to scroll instead of jumping to the floating area\n // So when that happens, just adjust the point to be past the new boundary\n if (!this.hasExtendedFloating) {\n if (startRow < floatingTopRowCount && row >= floatingTopRowCount) {\n // Extending from floating top into the view\n row = floatingTopRowCount;\n this.hasExtendedFloating = true;\n } else if (\n startRow >= rowCount - floatingBottomRowCount &&\n row < rowCount - floatingBottomRowCount\n ) {\n // Extending from floating bottom into the view\n row = rowCount - floatingBottomRowCount - 1;\n this.hasExtendedFloating = true;\n }\n\n if (\n startColumn < floatingLeftColumnCount &&\n column >= floatingLeftColumnCount\n ) {\n // Extending from floating left into the view\n column = floatingLeftColumnCount;\n this.hasExtendedFloating = true;\n } else if (\n startColumn >= columnCount - floatingRightColumnCount &&\n column < columnCount - floatingRightColumnCount\n ) {\n // Extending from floating right into the view\n column = columnCount - floatingRightColumnCount - 1;\n this.hasExtendedFloating = true;\n }\n }\n\n // When a selection is dragging from within the main area to over a floating area, scroll.\n if (\n !GridUtils.isFloatingRow(startRow, metrics) &&\n GridUtils.isFloatingRow(row, metrics)\n ) {\n // Need to scroll\n if (startRow > row && row < top) {\n row = topVisible - 1;\n } else if (startRow < row && row > bottom) {\n row = bottomVisible + 1;\n }\n }\n if (\n !GridUtils.isFloatingColumn(startColumn, metrics) &&\n GridUtils.isFloatingColumn(column, metrics)\n ) {\n if (startColumn > column && column < left) {\n column = leftVisible - 1;\n } else if (startColumn < column && column > right) {\n column = rightVisible + 1;\n }\n }\n grid.moveCursorToPosition(column, row, true, true);\n }\n return true;\n }\n\n onUp(gridPoint, grid) {\n if (this.startPoint !== null) {\n this.startPoint = null;\n this.dragBounds = null;\n this.stopTimer();\n grid.commitSelection();\n }\n\n return false;\n }\n\n moveSelection(grid, gridPoint, deltaX, deltaY) {\n const { row, column } = gridPoint;\n const { metrics } = grid;\n const { selectionEndRow, selectionEndColumn } = grid.state;\n const { rowCount, columnCount } = metrics;\n const minX = deltaX < 0 && column != null ? column : 0;\n const maxX = deltaX > 0 && column != null ? column : columnCount - 1;\n const minY = deltaY < 0 && row != null ? row : 0;\n const maxY = deltaY > 0 && row != null ? row : rowCount - 1;\n grid.moveCursorToPosition(\n Math.min(Math.max(minX, selectionEndColumn + deltaX), maxX),\n Math.min(Math.max(minY, selectionEndRow + deltaY), maxY),\n true\n );\n this.lastTriggerTime = Date.now();\n }\n\n startTimer(grid, gridPoint, deltaX, deltaY) {\n this.stopTimer();\n\n const timeout =\n this.lastTriggerTime != null\n ? DEFAULT_INTERVAL_MS -\n Math.min(DEFAULT_INTERVAL_MS, Date.now() - this.lastTriggerTime)\n : 0;\n this.timer = setTimeout(() => {\n this.moveSelection(grid, gridPoint, deltaX, deltaY);\n this.startTimer(grid, gridPoint, deltaX, deltaY);\n }, timeout);\n }\n\n stopTimer() {\n clearTimeout(this.timer);\n this.timer = null;\n }\n}\n\nexport default GridSelectionMouseHandler;\n"],"file":"GridSelectionMouseHandler.js"}