@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,263 +1,277 @@
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
  /* eslint class-methods-use-this: "off" */
2
24
  import clamp from 'lodash.clamp';
3
- import GridRange from "../GridRange.js";
4
- import GridUtils from "../GridUtils.js";
5
- import KeyHandler from "../KeyHandler.js";
6
-
7
- class SelectionKeyHandler extends KeyHandler {
8
- onDown(e, grid) {
9
- switch (e.key) {
10
- case 'a':
11
- if (GridUtils.isModifierKeyDown(e)) {
12
- grid.selectAll();
13
- return true;
14
- }
25
+ import GridRange from '../GridRange';
26
+ import GridUtils from '../GridUtils';
27
+ import KeyHandler from '../KeyHandler';
15
28
 
16
- break;
29
+ var SelectionKeyHandler = /*#__PURE__*/function (_KeyHandler) {
30
+ _inherits(SelectionKeyHandler, _KeyHandler);
17
31
 
18
- case 'ArrowUp':
19
- return this.handleArrowMove(0, -1, e, grid);
32
+ var _super = _createSuper(SelectionKeyHandler);
20
33
 
21
- case 'ArrowDown':
22
- return this.handleArrowMove(0, 1, e, grid);
34
+ function SelectionKeyHandler() {
35
+ _classCallCheck(this, SelectionKeyHandler);
23
36
 
24
- case 'ArrowRight':
25
- return this.handleArrowMove(1, 0, e, grid);
37
+ return _super.apply(this, arguments);
38
+ }
26
39
 
27
- case 'ArrowLeft':
28
- return this.handleArrowMove(-1, 0, e, grid);
40
+ _createClass(SelectionKeyHandler, [{
41
+ key: "onDown",
42
+ value: function onDown(e, grid) {
43
+ switch (e.key) {
44
+ case 'a':
45
+ if (GridUtils.isModifierKeyDown(e)) {
46
+ grid.selectAll();
47
+ return true;
48
+ }
29
49
 
30
- case 'k': // h/j/k/l keys are grouped together for quick navigation by power users
50
+ break;
31
51
 
32
- case 'PageUp':
33
- return this.handlePageUp(e, grid);
52
+ case 'ArrowUp':
53
+ return this.handleArrowMove(0, -1, e, grid);
34
54
 
35
- case 'j':
36
- case 'PageDown':
37
- return this.handlePageDown(e, grid);
55
+ case 'ArrowDown':
56
+ return this.handleArrowMove(0, 1, e, grid);
38
57
 
39
- case 'Home':
40
- case 'h':
41
- grid.clearSelectedRanges();
42
- grid.moveCursorToPosition(0, grid.state.cursorRow);
43
- return true;
44
-
45
- case 'l':
46
- case 'End':
47
- {
48
- var {
49
- model
50
- } = grid.props;
51
- var {
52
- columnCount
53
- } = model;
54
- grid.clearSelectedRanges();
55
- grid.moveCursorToPosition(columnCount - 1, grid.state.cursorRow);
56
- break;
57
- }
58
+ case 'ArrowRight':
59
+ return this.handleArrowMove(1, 0, e, grid);
58
60
 
59
- case 'Escape':
60
- grid.clearSelectedRanges();
61
- return true;
61
+ case 'ArrowLeft':
62
+ return this.handleArrowMove(-1, 0, e, grid);
62
63
 
63
- case 'Enter':
64
- if (grid.state.selectedRanges.length > 0) {
65
- grid.moveCursorInDirection(e.shiftKey ? GridRange.SELECTION_DIRECTION.UP : GridRange.SELECTION_DIRECTION.DOWN);
66
- return true;
67
- }
64
+ case 'k': // h/j/k/l keys are grouped together for quick navigation by power users
68
65
 
69
- break;
66
+ case 'PageUp':
67
+ return this.handlePageUp(e, grid);
70
68
 
71
- case 'Tab':
72
- if (grid.state.selectedRanges.length > 0) {
73
- grid.moveCursorInDirection(e.shiftKey ? GridRange.SELECTION_DIRECTION.LEFT : GridRange.SELECTION_DIRECTION.RIGHT);
69
+ case 'j':
70
+ case 'PageDown':
71
+ return this.handlePageDown(e, grid);
72
+
73
+ case 'Home':
74
+ case 'h':
75
+ grid.clearSelectedRanges();
76
+ grid.moveCursorToPosition(0, grid.state.cursorRow);
74
77
  return true;
75
- }
76
78
 
77
- break;
79
+ case 'l':
80
+ case 'End':
81
+ {
82
+ var model = grid.props.model;
83
+ var columnCount = model.columnCount;
84
+ grid.clearSelectedRanges();
85
+ grid.moveCursorToPosition(columnCount - 1, grid.state.cursorRow);
86
+ break;
87
+ }
88
+
89
+ case 'Escape':
90
+ grid.clearSelectedRanges();
91
+ return true;
78
92
 
79
- default:
80
- break;
81
- }
93
+ case 'Enter':
94
+ if (grid.state.selectedRanges.length > 0) {
95
+ grid.moveCursorInDirection(e.shiftKey ? GridRange.SELECTION_DIRECTION.UP : GridRange.SELECTION_DIRECTION.DOWN);
96
+ return true;
97
+ }
82
98
 
83
- return false;
84
- }
99
+ break;
85
100
 
86
- handleArrowMove(deltaColumn, deltaRow, event, grid) {
87
- var isShiftKey = event.shiftKey;
88
- var isModifierKey = GridUtils.isModifierKeyDown(event);
101
+ case 'Tab':
102
+ if (grid.state.selectedRanges.length > 0) {
103
+ grid.moveCursorInDirection(e.shiftKey ? GridRange.SELECTION_DIRECTION.LEFT : GridRange.SELECTION_DIRECTION.RIGHT);
104
+ return true;
105
+ }
89
106
 
90
- if (isShiftKey) {
91
- grid.trimSelectedRanges();
92
- } else {
93
- grid.clearSelectedRanges();
94
- }
107
+ break;
95
108
 
96
- var {
97
- cursorRow,
98
- cursorColumn,
99
- selectionEndColumn,
100
- selectionEndRow
101
- } = grid.state;
102
- var column = isShiftKey ? selectionEndColumn : cursorColumn;
103
- var row = isShiftKey ? selectionEndRow : cursorRow;
104
-
105
- if (isModifierKey) {
106
- var {
107
- model
108
- } = grid.props;
109
- var {
110
- columnCount,
111
- rowCount
112
- } = model;
113
- var maximizePreviousRange = isModifierKey && isShiftKey;
114
- var moveToColumn = null;
115
- var moveToRow = null;
116
-
117
- if (deltaColumn < 0) {
118
- moveToColumn = 0;
119
- moveToRow = row;
120
- } else if (deltaColumn > 0) {
121
- moveToColumn = columnCount - 1;
122
- moveToRow = row;
123
- } else if (deltaRow < 0) {
124
- moveToColumn = column;
125
- moveToRow = 0;
126
- } else if (deltaRow > 0) {
127
- moveToColumn = column;
128
- moveToRow = rowCount - 1;
109
+ default:
110
+ break;
129
111
  }
130
112
 
131
- if (moveToColumn != null && moveToRow != null) {
132
- grid.moveCursorToPosition(moveToColumn, moveToRow, isShiftKey, true, maximizePreviousRange);
133
- }
134
- } else {
135
- var {
136
- theme
137
- } = grid.props;
138
- var {
139
- autoSelectRow,
140
- autoSelectColumn
141
- } = theme;
142
-
143
- if (autoSelectRow && deltaColumn !== 0) {
144
- var {
145
- lastLeft
146
- } = grid.metrics;
147
- var {
148
- left
149
- } = grid.state;
150
- left = clamp(left + deltaColumn, 0, lastLeft);
151
- grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);
152
- grid.setViewState({
153
- left
154
- });
155
- } else if (autoSelectColumn && deltaRow !== 0) {
156
- var {
157
- lastTop
158
- } = grid.metrics;
159
- var {
160
- top
161
- } = grid.state;
162
- top = clamp(top + deltaRow, 0, lastTop);
163
- grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);
164
- grid.setViewState({
165
- top
166
- });
113
+ return false;
114
+ }
115
+ }, {
116
+ key: "handleArrowMove",
117
+ value: function handleArrowMove(deltaColumn, deltaRow, event, grid) {
118
+ var isShiftKey = event.shiftKey;
119
+ var isModifierKey = GridUtils.isModifierKeyDown(event);
120
+
121
+ if (isShiftKey) {
122
+ grid.trimSelectedRanges();
167
123
  } else {
168
- grid.moveCursor(deltaColumn, deltaRow, isShiftKey);
124
+ grid.clearSelectedRanges();
169
125
  }
170
- }
171
126
 
172
- return true;
173
- }
127
+ var _grid$state = grid.state,
128
+ cursorRow = _grid$state.cursorRow,
129
+ cursorColumn = _grid$state.cursorColumn,
130
+ selectionEndColumn = _grid$state.selectionEndColumn,
131
+ selectionEndRow = _grid$state.selectionEndRow;
132
+ var column = isShiftKey ? selectionEndColumn : cursorColumn;
133
+ var row = isShiftKey ? selectionEndRow : cursorRow;
134
+
135
+ if (isModifierKey) {
136
+ var model = grid.props.model;
137
+ var columnCount = model.columnCount,
138
+ rowCount = model.rowCount;
139
+ var maximizePreviousRange = isModifierKey && isShiftKey;
140
+ var moveToColumn = null;
141
+ var moveToRow = null;
142
+
143
+ if (deltaColumn < 0) {
144
+ moveToColumn = 0;
145
+ moveToRow = row;
146
+ } else if (deltaColumn > 0) {
147
+ moveToColumn = columnCount - 1;
148
+ moveToRow = row;
149
+ } else if (deltaRow < 0) {
150
+ moveToColumn = column;
151
+ moveToRow = 0;
152
+ } else if (deltaRow > 0) {
153
+ moveToColumn = column;
154
+ moveToRow = rowCount - 1;
155
+ }
174
156
 
175
- handlePageUp(e, grid) {
176
- var isShiftKey = e.shiftKey;
157
+ if (moveToColumn != null && moveToRow != null) {
158
+ grid.moveCursorToPosition(moveToColumn, moveToRow, isShiftKey, true, maximizePreviousRange);
159
+ }
160
+ } else {
161
+ var theme = grid.props.theme;
162
+ var autoSelectRow = theme.autoSelectRow,
163
+ autoSelectColumn = theme.autoSelectColumn;
164
+
165
+ if (autoSelectRow && deltaColumn !== 0) {
166
+ var lastLeft = grid.metrics.lastLeft;
167
+ var left = grid.state.left;
168
+ left = clamp(left + deltaColumn, 0, lastLeft);
169
+ grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);
170
+ grid.setViewState({
171
+ left: left
172
+ });
173
+ } else if (autoSelectColumn && deltaRow !== 0) {
174
+ var lastTop = grid.metrics.lastTop;
175
+ var top = grid.state.top;
176
+ top = clamp(top + deltaRow, 0, lastTop);
177
+ grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);
178
+ grid.setViewState({
179
+ top: top
180
+ });
181
+ } else {
182
+ grid.moveCursor(deltaColumn, deltaRow, isShiftKey);
183
+ }
184
+ }
177
185
 
178
- if (isShiftKey) {
179
- grid.trimSelectedRanges();
180
- } else {
181
- grid.clearSelectedRanges();
186
+ return true;
182
187
  }
188
+ }, {
189
+ key: "handlePageUp",
190
+ value: function handlePageUp(e, grid) {
191
+ var isShiftKey = e.shiftKey;
183
192
 
184
- var {
185
- cursorColumn,
186
- selectionEndRow
187
- } = grid.state;
188
- var row = selectionEndRow;
189
- var column = cursorColumn;
193
+ if (isShiftKey) {
194
+ grid.trimSelectedRanges();
195
+ } else {
196
+ grid.clearSelectedRanges();
197
+ }
190
198
 
191
- if (row == null) {
192
- return false;
193
- }
199
+ var _grid$state2 = grid.state,
200
+ cursorColumn = _grid$state2.cursorColumn,
201
+ selectionEndRow = _grid$state2.selectionEndRow;
202
+ var row = selectionEndRow;
203
+ var column = cursorColumn;
194
204
 
195
- var metricState = grid.getMetricState();
196
- var {
197
- metricCalculator
198
- } = grid;
199
- var {
200
- bottomVisible,
201
- topVisible,
202
- hasHorizontalBar
203
- } = metricCalculator.getMetrics(metricState);
204
- var selectRangeEndPosition = row - (bottomVisible - topVisible);
205
- selectRangeEndPosition -= hasHorizontalBar ? 0 : 1; // Don't move beyond the top table row.
206
-
207
- selectRangeEndPosition = Math.max(selectRangeEndPosition, 0);
208
- var viewportPosition = Math.max(selectRangeEndPosition - (row - topVisible), 0);
209
- grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);
210
- grid.setViewState({
211
- top: viewportPosition
212
- });
213
- return true;
214
- }
205
+ if (row == null) {
206
+ return false;
207
+ }
215
208
 
216
- handlePageDown(e, grid) {
217
- var isShiftKey = e.shiftKey;
209
+ var metricState = grid.getMetricState();
210
+ var metricCalculator = grid.metricCalculator;
218
211
 
219
- if (isShiftKey) {
220
- grid.trimSelectedRanges();
221
- } else {
222
- grid.clearSelectedRanges();
223
- }
212
+ var _metricCalculator$get = metricCalculator.getMetrics(metricState),
213
+ bottomVisible = _metricCalculator$get.bottomVisible,
214
+ topVisible = _metricCalculator$get.topVisible,
215
+ hasHorizontalBar = _metricCalculator$get.hasHorizontalBar;
224
216
 
225
- var {
226
- selectionEndRow,
227
- cursorColumn
228
- } = grid.state;
229
- var row = selectionEndRow;
230
- var column = cursorColumn;
217
+ var selectRangeEndPosition = row - (bottomVisible - topVisible);
218
+ selectRangeEndPosition -= hasHorizontalBar ? 0 : 1; // Don't move beyond the top table row.
231
219
 
232
- if (row === null) {
233
- return false;
220
+ selectRangeEndPosition = Math.max(selectRangeEndPosition, 0);
221
+ var viewportPosition = Math.max(selectRangeEndPosition - (row - topVisible), 0);
222
+ grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);
223
+ grid.setViewState({
224
+ top: viewportPosition
225
+ });
226
+ return true;
234
227
  }
228
+ }, {
229
+ key: "handlePageDown",
230
+ value: function handlePageDown(e, grid) {
231
+ var isShiftKey = e.shiftKey;
235
232
 
236
- var metricState = grid.getMetricState();
237
- var {
238
- metricCalculator
239
- } = grid;
240
- var {
241
- bottomVisible,
242
- topVisible,
243
- hasHorizontalBar,
244
- rowCount,
245
- lastTop
246
- } = metricCalculator.getMetrics(metricState);
247
- var lastRowIndex = rowCount - 1;
248
- var selectRangeEndPosition = bottomVisible - topVisible + row;
249
- selectRangeEndPosition += hasHorizontalBar ? 0 : 1; // Don't move beyond the bottom table row.
250
-
251
- selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);
252
- var viewportPosition = Math.min(lastTop, selectRangeEndPosition - (row - topVisible));
253
- grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);
254
- grid.setViewState({
255
- top: viewportPosition
256
- });
257
- return true;
258
- }
233
+ if (isShiftKey) {
234
+ grid.trimSelectedRanges();
235
+ } else {
236
+ grid.clearSelectedRanges();
237
+ }
238
+
239
+ var _grid$state3 = grid.state,
240
+ selectionEndRow = _grid$state3.selectionEndRow,
241
+ cursorColumn = _grid$state3.cursorColumn;
242
+ var row = selectionEndRow;
243
+ var column = cursorColumn;
244
+
245
+ if (row === null) {
246
+ return false;
247
+ }
248
+
249
+ var metricState = grid.getMetricState();
250
+ var metricCalculator = grid.metricCalculator;
251
+
252
+ var _metricCalculator$get2 = metricCalculator.getMetrics(metricState),
253
+ bottomVisible = _metricCalculator$get2.bottomVisible,
254
+ topVisible = _metricCalculator$get2.topVisible,
255
+ hasHorizontalBar = _metricCalculator$get2.hasHorizontalBar,
256
+ rowCount = _metricCalculator$get2.rowCount,
257
+ lastTop = _metricCalculator$get2.lastTop;
258
+
259
+ var lastRowIndex = rowCount - 1;
260
+ var selectRangeEndPosition = bottomVisible - topVisible + row;
261
+ selectRangeEndPosition += hasHorizontalBar ? 0 : 1; // Don't move beyond the bottom table row.
262
+
263
+ selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);
264
+ var viewportPosition = Math.min(lastTop, selectRangeEndPosition - (row - topVisible));
265
+ grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);
266
+ grid.setViewState({
267
+ top: viewportPosition
268
+ });
269
+ return true;
270
+ }
271
+ }]);
259
272
 
260
- }
273
+ return SelectionKeyHandler;
274
+ }(KeyHandler);
261
275
 
262
276
  export default SelectionKeyHandler;
263
277
  //# sourceMappingURL=SelectionKeyHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"names":["clamp","GridRange","GridUtils","KeyHandler","SelectionKeyHandler","onDown","e","grid","key","isModifierKeyDown","selectAll","handleArrowMove","handlePageUp","handlePageDown","clearSelectedRanges","moveCursorToPosition","state","cursorRow","model","props","columnCount","selectedRanges","length","moveCursorInDirection","shiftKey","SELECTION_DIRECTION","UP","DOWN","LEFT","RIGHT","deltaColumn","deltaRow","event","isShiftKey","isModifierKey","trimSelectedRanges","cursorColumn","selectionEndColumn","selectionEndRow","column","row","rowCount","maximizePreviousRange","moveToColumn","moveToRow","theme","autoSelectRow","autoSelectColumn","lastLeft","metrics","left","setViewState","lastTop","top","moveCursor","metricState","getMetricState","metricCalculator","bottomVisible","topVisible","hasHorizontalBar","getMetrics","selectRangeEndPosition","Math","max","viewportPosition","lastRowIndex","min"],"mappings":"AAAA;AACA,OAAOA,KAAP,MAAkB,cAAlB;OAEOC,S;OACAC,S;OACAC,U;;AAEP,MAAMC,mBAAN,SAAkCD,UAAlC,CAA6C;AAC3CE,EAAAA,MAAM,CAACC,CAAD,EAAmBC,IAAnB,EAAwC;AAC5C,YAAQD,CAAC,CAACE,GAAV;AACE,WAAK,GAAL;AACE,YAAIN,SAAS,CAACO,iBAAV,CAA4BH,CAA5B,CAAJ,EAAoC;AAClCC,UAAAA,IAAI,CAACG,SAAL;AACA,iBAAO,IAAP;AACD;;AACD;;AACF,WAAK,SAAL;AACE,eAAO,KAAKC,eAAL,CAAqB,CAArB,EAAwB,CAAC,CAAzB,EAA4BL,CAA5B,EAA+BC,IAA/B,CAAP;;AACF,WAAK,WAAL;AACE,eAAO,KAAKI,eAAL,CAAqB,CAArB,EAAwB,CAAxB,EAA2BL,CAA3B,EAA8BC,IAA9B,CAAP;;AACF,WAAK,YAAL;AACE,eAAO,KAAKI,eAAL,CAAqB,CAArB,EAAwB,CAAxB,EAA2BL,CAA3B,EAA8BC,IAA9B,CAAP;;AACF,WAAK,WAAL;AACE,eAAO,KAAKI,eAAL,CAAqB,CAAC,CAAtB,EAAyB,CAAzB,EAA4BL,CAA5B,EAA+BC,IAA/B,CAAP;;AACF,WAAK,GAAL,CAfF,CAeY;;AACV,WAAK,QAAL;AACE,eAAO,KAAKK,YAAL,CAAkBN,CAAlB,EAAqBC,IAArB,CAAP;;AACF,WAAK,GAAL;AACA,WAAK,UAAL;AACE,eAAO,KAAKM,cAAL,CAAoBP,CAApB,EAAuBC,IAAvB,CAAP;;AACF,WAAK,MAAL;AACA,WAAK,GAAL;AACEA,QAAAA,IAAI,CAACO,mBAAL;AACAP,QAAAA,IAAI,CAACQ,oBAAL,CAA0B,CAA1B,EAA6BR,IAAI,CAACS,KAAL,CAAWC,SAAxC;AACA,eAAO,IAAP;;AACF,WAAK,GAAL;AACA,WAAK,KAAL;AAAY;AACV,cAAM;AAAEC,YAAAA;AAAF,cAAYX,IAAI,CAACY,KAAvB;AACA,cAAM;AAAEC,YAAAA;AAAF,cAAkBF,KAAxB;AACAX,UAAAA,IAAI,CAACO,mBAAL;AACAP,UAAAA,IAAI,CAACQ,oBAAL,CAA0BK,WAAW,GAAG,CAAxC,EAA2Cb,IAAI,CAACS,KAAL,CAAWC,SAAtD;AACA;AACD;;AACD,WAAK,QAAL;AACEV,QAAAA,IAAI,CAACO,mBAAL;AACA,eAAO,IAAP;;AACF,WAAK,OAAL;AACE,YAAIP,IAAI,CAACS,KAAL,CAAWK,cAAX,CAA0BC,MAA1B,GAAmC,CAAvC,EAA0C;AACxCf,UAAAA,IAAI,CAACgB,qBAAL,CACEjB,CAAC,CAACkB,QAAF,GACIvB,SAAS,CAACwB,mBAAV,CAA8BC,EADlC,GAEIzB,SAAS,CAACwB,mBAAV,CAA8BE,IAHpC;AAKA,iBAAO,IAAP;AACD;;AACD;;AACF,WAAK,KAAL;AACE,YAAIpB,IAAI,CAACS,KAAL,CAAWK,cAAX,CAA0BC,MAA1B,GAAmC,CAAvC,EAA0C;AACxCf,UAAAA,IAAI,CAACgB,qBAAL,CACEjB,CAAC,CAACkB,QAAF,GACIvB,SAAS,CAACwB,mBAAV,CAA8BG,IADlC,GAEI3B,SAAS,CAACwB,mBAAV,CAA8BI,KAHpC;AAKA,iBAAO,IAAP;AACD;;AACD;;AACF;AACE;AA1DJ;;AA4DA,WAAO,KAAP;AACD;;AAEDlB,EAAAA,eAAe,CACbmB,WADa,EAEbC,QAFa,EAGbC,KAHa,EAIbzB,IAJa,EAKJ;AACT,QAAM0B,UAAU,GAAGD,KAAK,CAACR,QAAzB;AACA,QAAMU,aAAa,GAAGhC,SAAS,CAACO,iBAAV,CAA4BuB,KAA5B,CAAtB;;AACA,QAAIC,UAAJ,EAAgB;AACd1B,MAAAA,IAAI,CAAC4B,kBAAL;AACD,KAFD,MAEO;AACL5B,MAAAA,IAAI,CAACO,mBAAL;AACD;;AAED,QAAM;AACJG,MAAAA,SADI;AAEJmB,MAAAA,YAFI;AAGJC,MAAAA,kBAHI;AAIJC,MAAAA;AAJI,QAKF/B,IAAI,CAACS,KALT;AAMA,QAAMuB,MAAM,GAAGN,UAAU,GAAGI,kBAAH,GAAwBD,YAAjD;AACA,QAAMI,GAAG,GAAGP,UAAU,GAAGK,eAAH,GAAqBrB,SAA3C;;AACA,QAAIiB,aAAJ,EAAmB;AACjB,UAAM;AAAEhB,QAAAA;AAAF,UAAYX,IAAI,CAACY,KAAvB;AACA,UAAM;AAAEC,QAAAA,WAAF;AAAeqB,QAAAA;AAAf,UAA4BvB,KAAlC;AACA,UAAMwB,qBAAqB,GAAGR,aAAa,IAAID,UAA/C;AACA,UAAIU,YAAY,GAAG,IAAnB;AACA,UAAIC,SAAS,GAAG,IAAhB;;AACA,UAAId,WAAW,GAAG,CAAlB,EAAqB;AACnBa,QAAAA,YAAY,GAAG,CAAf;AACAC,QAAAA,SAAS,GAAGJ,GAAZ;AACD,OAHD,MAGO,IAAIV,WAAW,GAAG,CAAlB,EAAqB;AAC1Ba,QAAAA,YAAY,GAAGvB,WAAW,GAAG,CAA7B;AACAwB,QAAAA,SAAS,GAAGJ,GAAZ;AACD,OAHM,MAGA,IAAIT,QAAQ,GAAG,CAAf,EAAkB;AACvBY,QAAAA,YAAY,GAAGJ,MAAf;AACAK,QAAAA,SAAS,GAAG,CAAZ;AACD,OAHM,MAGA,IAAIb,QAAQ,GAAG,CAAf,EAAkB;AACvBY,QAAAA,YAAY,GAAGJ,MAAf;AACAK,QAAAA,SAAS,GAAGH,QAAQ,GAAG,CAAvB;AACD;;AACD,UAAIE,YAAY,IAAI,IAAhB,IAAwBC,SAAS,IAAI,IAAzC,EAA+C;AAC7CrC,QAAAA,IAAI,CAACQ,oBAAL,CACE4B,YADF,EAEEC,SAFF,EAGEX,UAHF,EAIE,IAJF,EAKES,qBALF;AAOD;AACF,KA5BD,MA4BO;AACL,UAAM;AAAEG,QAAAA;AAAF,UAAYtC,IAAI,CAACY,KAAvB;AACA,UAAM;AAAE2B,QAAAA,aAAF;AAAiBC,QAAAA;AAAjB,UAAsCF,KAA5C;;AACA,UAAIC,aAAa,IAAIhB,WAAW,KAAK,CAArC,EAAwC;AACtC,YAAM;AAAEkB,UAAAA;AAAF,YAAezC,IAAI,CAAC0C,OAA1B;AACA,YAAI;AAAEC,UAAAA;AAAF,YAAW3C,IAAI,CAACS,KAApB;AAEAkC,QAAAA,IAAI,GAAGlD,KAAK,CAACkD,IAAI,GAAGpB,WAAR,EAAqB,CAArB,EAAwBkB,QAAxB,CAAZ;AAEAzC,QAAAA,IAAI,CAACQ,oBAAL,CAA0BmC,IAA1B,EAAgCjC,SAAhC,EAA2CgB,UAA3C,EAAuD,KAAvD;AAEA1B,QAAAA,IAAI,CAAC4C,YAAL,CAAkB;AAAED,UAAAA;AAAF,SAAlB;AACD,OATD,MASO,IAAIH,gBAAgB,IAAIhB,QAAQ,KAAK,CAArC,EAAwC;AAC7C,YAAM;AAAEqB,UAAAA;AAAF,YAAc7C,IAAI,CAAC0C,OAAzB;AACA,YAAI;AAAEI,UAAAA;AAAF,YAAU9C,IAAI,CAACS,KAAnB;AAEAqC,QAAAA,GAAG,GAAGrD,KAAK,CAACqD,GAAG,GAAGtB,QAAP,EAAiB,CAAjB,EAAoBqB,OAApB,CAAX;AAEA7C,QAAAA,IAAI,CAACQ,oBAAL,CAA0BsC,GAA1B,EAA+BjB,YAA/B,EAA6CH,UAA7C,EAAyD,KAAzD;AAEA1B,QAAAA,IAAI,CAAC4C,YAAL,CAAkB;AAAEE,UAAAA;AAAF,SAAlB;AACD,OATM,MASA;AACL9C,QAAAA,IAAI,CAAC+C,UAAL,CAAgBxB,WAAhB,EAA6BC,QAA7B,EAAuCE,UAAvC;AACD;AACF;;AACD,WAAO,IAAP;AACD;;AAEDrB,EAAAA,YAAY,CAACN,CAAD,EAAmBC,IAAnB,EAAwC;AAClD,QAAM0B,UAAU,GAAG3B,CAAC,CAACkB,QAArB;;AAEA,QAAIS,UAAJ,EAAgB;AACd1B,MAAAA,IAAI,CAAC4B,kBAAL;AACD,KAFD,MAEO;AACL5B,MAAAA,IAAI,CAACO,mBAAL;AACD;;AAED,QAAM;AAAEsB,MAAAA,YAAF;AAAgBE,MAAAA;AAAhB,QAAoC/B,IAAI,CAACS,KAA/C;AACA,QAAMwB,GAAkB,GAAGF,eAA3B;AACA,QAAMC,MAAqB,GAAGH,YAA9B;;AACA,QAAII,GAAG,IAAI,IAAX,EAAiB;AACf,aAAO,KAAP;AACD;;AACD,QAAMe,WAAW,GAAGhD,IAAI,CAACiD,cAAL,EAApB;AACA,QAAM;AAAEC,MAAAA;AAAF,QAAuBlD,IAA7B;AACA,QAAM;AACJmD,MAAAA,aADI;AAEJC,MAAAA,UAFI;AAGJC,MAAAA;AAHI,QAIFH,gBAAgB,CAACI,UAAjB,CAA4BN,WAA5B,CAJJ;AAMA,QAAIO,sBAAsB,GAAGtB,GAAG,IAAIkB,aAAa,GAAGC,UAApB,CAAhC;AACAG,IAAAA,sBAAsB,IAAIF,gBAAgB,GAAG,CAAH,GAAO,CAAjD,CAxBkD,CA0BlD;;AACAE,IAAAA,sBAAsB,GAAGC,IAAI,CAACC,GAAL,CAASF,sBAAT,EAAiC,CAAjC,CAAzB;AACA,QAAMG,gBAAgB,GAAGF,IAAI,CAACC,GAAL,CACvBF,sBAAsB,IAAItB,GAAG,GAAGmB,UAAV,CADC,EAEvB,CAFuB,CAAzB;AAKApD,IAAAA,IAAI,CAACQ,oBAAL,CACEwB,MADF,EAEEuB,sBAFF,EAGE7B,UAHF,EAIE,KAJF;AAMA1B,IAAAA,IAAI,CAAC4C,YAAL,CAAkB;AAAEE,MAAAA,GAAG,EAAEY;AAAP,KAAlB;AACA,WAAO,IAAP;AACD;;AAEDpD,EAAAA,cAAc,CAACP,CAAD,EAAmBC,IAAnB,EAAwC;AACpD,QAAM0B,UAAU,GAAG3B,CAAC,CAACkB,QAArB;;AAEA,QAAIS,UAAJ,EAAgB;AACd1B,MAAAA,IAAI,CAAC4B,kBAAL;AACD,KAFD,MAEO;AACL5B,MAAAA,IAAI,CAACO,mBAAL;AACD;;AAED,QAAM;AAAEwB,MAAAA,eAAF;AAAmBF,MAAAA;AAAnB,QAAoC7B,IAAI,CAACS,KAA/C;AACA,QAAMwB,GAAkB,GAAGF,eAA3B;AACA,QAAMC,MAAqB,GAAGH,YAA9B;;AACA,QAAII,GAAG,KAAK,IAAZ,EAAkB;AAChB,aAAO,KAAP;AACD;;AACD,QAAMe,WAAW,GAAGhD,IAAI,CAACiD,cAAL,EAApB;AACA,QAAM;AAAEC,MAAAA;AAAF,QAAuBlD,IAA7B;AACA,QAAM;AACJmD,MAAAA,aADI;AAEJC,MAAAA,UAFI;AAGJC,MAAAA,gBAHI;AAIJnB,MAAAA,QAJI;AAKJW,MAAAA;AALI,QAMFK,gBAAgB,CAACI,UAAjB,CAA4BN,WAA5B,CANJ;AAOA,QAAMW,YAAY,GAAGzB,QAAQ,GAAG,CAAhC;AAEA,QAAIqB,sBAAsB,GAAGJ,aAAa,GAAGC,UAAhB,GAA6BnB,GAA1D;AACAsB,IAAAA,sBAAsB,IAAIF,gBAAgB,GAAG,CAAH,GAAO,CAAjD,CA3BoD,CA6BpD;;AACAE,IAAAA,sBAAsB,GAAGC,IAAI,CAACI,GAAL,CAASL,sBAAT,EAAiCI,YAAjC,CAAzB;AAEA,QAAMD,gBAAgB,GAAGF,IAAI,CAACI,GAAL,CACvBf,OADuB,EAEvBU,sBAAsB,IAAItB,GAAG,GAAGmB,UAAV,CAFC,CAAzB;AAIApD,IAAAA,IAAI,CAACQ,oBAAL,CACEwB,MADF,EAEEuB,sBAFF,EAGE7B,UAHF,EAIE,KAJF;AAMA1B,IAAAA,IAAI,CAAC4C,YAAL,CAAkB;AAAEE,MAAAA,GAAG,EAAEY;AAAP,KAAlB;AAEA,WAAO,IAAP;AACD;;AAvO0C;;AA0O7C,eAAe7D,mBAAf","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport clamp from 'lodash.clamp';\nimport Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport GridUtils from '../GridUtils';\nimport KeyHandler from '../KeyHandler';\n\nclass SelectionKeyHandler extends KeyHandler {\n onDown(e: KeyboardEvent, grid: Grid): boolean {\n switch (e.key) {\n case 'a':\n if (GridUtils.isModifierKeyDown(e)) {\n grid.selectAll();\n return true;\n }\n break;\n case 'ArrowUp':\n return this.handleArrowMove(0, -1, e, grid);\n case 'ArrowDown':\n return this.handleArrowMove(0, 1, e, grid);\n case 'ArrowRight':\n return this.handleArrowMove(1, 0, e, grid);\n case 'ArrowLeft':\n return this.handleArrowMove(-1, 0, e, grid);\n case 'k': // h/j/k/l keys are grouped together for quick navigation by power users\n case 'PageUp':\n return this.handlePageUp(e, grid);\n case 'j':\n case 'PageDown':\n return this.handlePageDown(e, grid);\n case 'Home':\n case 'h':\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(0, grid.state.cursorRow);\n return true;\n case 'l':\n case 'End': {\n const { model } = grid.props;\n const { columnCount } = model;\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(columnCount - 1, grid.state.cursorRow);\n break;\n }\n case 'Escape':\n grid.clearSelectedRanges();\n return true;\n case 'Enter':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(\n e.shiftKey\n ? GridRange.SELECTION_DIRECTION.UP\n : GridRange.SELECTION_DIRECTION.DOWN\n );\n return true;\n }\n break;\n case 'Tab':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(\n e.shiftKey\n ? GridRange.SELECTION_DIRECTION.LEFT\n : GridRange.SELECTION_DIRECTION.RIGHT\n );\n return true;\n }\n break;\n default:\n break;\n }\n return false;\n }\n\n handleArrowMove(\n deltaColumn: number,\n deltaRow: number,\n event: KeyboardEvent,\n grid: Grid\n ): boolean {\n const isShiftKey = event.shiftKey;\n const isModifierKey = GridUtils.isModifierKeyDown(event);\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow,\n } = grid.state;\n const column = isShiftKey ? selectionEndColumn : cursorColumn;\n const row = isShiftKey ? selectionEndRow : cursorRow;\n if (isModifierKey) {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n const maximizePreviousRange = isModifierKey && isShiftKey;\n let moveToColumn = null;\n let moveToRow = null;\n if (deltaColumn < 0) {\n moveToColumn = 0;\n moveToRow = row;\n } else if (deltaColumn > 0) {\n moveToColumn = columnCount - 1;\n moveToRow = row;\n } else if (deltaRow < 0) {\n moveToColumn = column;\n moveToRow = 0;\n } else if (deltaRow > 0) {\n moveToColumn = column;\n moveToRow = rowCount - 1;\n }\n if (moveToColumn != null && moveToRow != null) {\n grid.moveCursorToPosition(\n moveToColumn,\n moveToRow,\n isShiftKey,\n true,\n maximizePreviousRange\n );\n }\n } else {\n const { theme } = grid.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n if (autoSelectRow && deltaColumn !== 0) {\n const { lastLeft } = grid.metrics;\n let { left } = grid.state;\n\n left = clamp(left + deltaColumn, 0, lastLeft);\n\n grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);\n\n grid.setViewState({ left });\n } else if (autoSelectColumn && deltaRow !== 0) {\n const { lastTop } = grid.metrics;\n let { top } = grid.state;\n\n top = clamp(top + deltaRow, 0, lastTop);\n\n grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);\n\n grid.setViewState({ top });\n } else {\n grid.moveCursor(deltaColumn, deltaRow, isShiftKey);\n }\n }\n return true;\n }\n\n handlePageUp(e: KeyboardEvent, grid: Grid): boolean {\n const isShiftKey = e.shiftKey;\n\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { cursorColumn, selectionEndRow } = grid.state;\n const row: number | null = selectionEndRow;\n const column: number | null = cursorColumn;\n if (row == null) {\n return false;\n }\n const metricState = grid.getMetricState();\n const { metricCalculator } = grid;\n const {\n bottomVisible,\n topVisible,\n hasHorizontalBar,\n } = metricCalculator.getMetrics(metricState);\n\n let selectRangeEndPosition = row - (bottomVisible - topVisible);\n selectRangeEndPosition -= hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the top table row.\n selectRangeEndPosition = Math.max(selectRangeEndPosition, 0);\n const viewportPosition = Math.max(\n selectRangeEndPosition - (row - topVisible),\n 0\n );\n\n grid.moveCursorToPosition(\n column,\n selectRangeEndPosition,\n isShiftKey,\n false\n );\n grid.setViewState({ top: viewportPosition });\n return true;\n }\n\n handlePageDown(e: KeyboardEvent, grid: Grid): boolean {\n const isShiftKey = e.shiftKey;\n\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { selectionEndRow, cursorColumn } = grid.state;\n const row: number | null = selectionEndRow;\n const column: number | null = cursorColumn;\n if (row === null) {\n return false;\n }\n const metricState = grid.getMetricState();\n const { metricCalculator } = grid;\n const {\n bottomVisible,\n topVisible,\n hasHorizontalBar,\n rowCount,\n lastTop,\n } = metricCalculator.getMetrics(metricState);\n const lastRowIndex = rowCount - 1;\n\n let selectRangeEndPosition = bottomVisible - topVisible + row;\n selectRangeEndPosition += hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the bottom table row.\n selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);\n\n const viewportPosition = Math.min(\n lastTop,\n selectRangeEndPosition - (row - topVisible)\n );\n grid.moveCursorToPosition(\n column,\n selectRangeEndPosition,\n isShiftKey,\n false\n );\n grid.setViewState({ top: viewportPosition });\n\n return true;\n }\n}\n\nexport default SelectionKeyHandler;\n"],"file":"SelectionKeyHandler.js"}
1
+ {"version":3,"sources":["../../src/key-handlers/SelectionKeyHandler.ts"],"names":["clamp","GridRange","GridUtils","KeyHandler","SelectionKeyHandler","e","grid","key","isModifierKeyDown","selectAll","handleArrowMove","handlePageUp","handlePageDown","clearSelectedRanges","moveCursorToPosition","state","cursorRow","model","props","columnCount","selectedRanges","length","moveCursorInDirection","shiftKey","SELECTION_DIRECTION","UP","DOWN","LEFT","RIGHT","deltaColumn","deltaRow","event","isShiftKey","isModifierKey","trimSelectedRanges","cursorColumn","selectionEndColumn","selectionEndRow","column","row","rowCount","maximizePreviousRange","moveToColumn","moveToRow","theme","autoSelectRow","autoSelectColumn","lastLeft","metrics","left","setViewState","lastTop","top","moveCursor","metricState","getMetricState","metricCalculator","getMetrics","bottomVisible","topVisible","hasHorizontalBar","selectRangeEndPosition","Math","max","viewportPosition","lastRowIndex","min"],"mappings":"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","sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport clamp from 'lodash.clamp';\nimport Grid from '../Grid';\nimport GridRange from '../GridRange';\nimport GridUtils from '../GridUtils';\nimport KeyHandler from '../KeyHandler';\n\nclass SelectionKeyHandler extends KeyHandler {\n onDown(e: KeyboardEvent, grid: Grid): boolean {\n switch (e.key) {\n case 'a':\n if (GridUtils.isModifierKeyDown(e)) {\n grid.selectAll();\n return true;\n }\n break;\n case 'ArrowUp':\n return this.handleArrowMove(0, -1, e, grid);\n case 'ArrowDown':\n return this.handleArrowMove(0, 1, e, grid);\n case 'ArrowRight':\n return this.handleArrowMove(1, 0, e, grid);\n case 'ArrowLeft':\n return this.handleArrowMove(-1, 0, e, grid);\n case 'k': // h/j/k/l keys are grouped together for quick navigation by power users\n case 'PageUp':\n return this.handlePageUp(e, grid);\n case 'j':\n case 'PageDown':\n return this.handlePageDown(e, grid);\n case 'Home':\n case 'h':\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(0, grid.state.cursorRow);\n return true;\n case 'l':\n case 'End': {\n const { model } = grid.props;\n const { columnCount } = model;\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(columnCount - 1, grid.state.cursorRow);\n break;\n }\n case 'Escape':\n grid.clearSelectedRanges();\n return true;\n case 'Enter':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(\n e.shiftKey\n ? GridRange.SELECTION_DIRECTION.UP\n : GridRange.SELECTION_DIRECTION.DOWN\n );\n return true;\n }\n break;\n case 'Tab':\n if (grid.state.selectedRanges.length > 0) {\n grid.moveCursorInDirection(\n e.shiftKey\n ? GridRange.SELECTION_DIRECTION.LEFT\n : GridRange.SELECTION_DIRECTION.RIGHT\n );\n return true;\n }\n break;\n default:\n break;\n }\n return false;\n }\n\n handleArrowMove(\n deltaColumn: number,\n deltaRow: number,\n event: KeyboardEvent,\n grid: Grid\n ): boolean {\n const isShiftKey = event.shiftKey;\n const isModifierKey = GridUtils.isModifierKeyDown(event);\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const {\n cursorRow,\n cursorColumn,\n selectionEndColumn,\n selectionEndRow,\n } = grid.state;\n const column = isShiftKey ? selectionEndColumn : cursorColumn;\n const row = isShiftKey ? selectionEndRow : cursorRow;\n if (isModifierKey) {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n const maximizePreviousRange = isModifierKey && isShiftKey;\n let moveToColumn = null;\n let moveToRow = null;\n if (deltaColumn < 0) {\n moveToColumn = 0;\n moveToRow = row;\n } else if (deltaColumn > 0) {\n moveToColumn = columnCount - 1;\n moveToRow = row;\n } else if (deltaRow < 0) {\n moveToColumn = column;\n moveToRow = 0;\n } else if (deltaRow > 0) {\n moveToColumn = column;\n moveToRow = rowCount - 1;\n }\n if (moveToColumn != null && moveToRow != null) {\n grid.moveCursorToPosition(\n moveToColumn,\n moveToRow,\n isShiftKey,\n true,\n maximizePreviousRange\n );\n }\n } else {\n const { theme } = grid.props;\n const { autoSelectRow, autoSelectColumn } = theme;\n if (autoSelectRow && deltaColumn !== 0) {\n const { lastLeft } = grid.metrics;\n let { left } = grid.state;\n\n left = clamp(left + deltaColumn, 0, lastLeft);\n\n grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);\n\n grid.setViewState({ left });\n } else if (autoSelectColumn && deltaRow !== 0) {\n const { lastTop } = grid.metrics;\n let { top } = grid.state;\n\n top = clamp(top + deltaRow, 0, lastTop);\n\n grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);\n\n grid.setViewState({ top });\n } else {\n grid.moveCursor(deltaColumn, deltaRow, isShiftKey);\n }\n }\n return true;\n }\n\n handlePageUp(e: KeyboardEvent, grid: Grid): boolean {\n const isShiftKey = e.shiftKey;\n\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { cursorColumn, selectionEndRow } = grid.state;\n const row: number | null = selectionEndRow;\n const column: number | null = cursorColumn;\n if (row == null) {\n return false;\n }\n const metricState = grid.getMetricState();\n const { metricCalculator } = grid;\n const {\n bottomVisible,\n topVisible,\n hasHorizontalBar,\n } = metricCalculator.getMetrics(metricState);\n\n let selectRangeEndPosition = row - (bottomVisible - topVisible);\n selectRangeEndPosition -= hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the top table row.\n selectRangeEndPosition = Math.max(selectRangeEndPosition, 0);\n const viewportPosition = Math.max(\n selectRangeEndPosition - (row - topVisible),\n 0\n );\n\n grid.moveCursorToPosition(\n column,\n selectRangeEndPosition,\n isShiftKey,\n false\n );\n grid.setViewState({ top: viewportPosition });\n return true;\n }\n\n handlePageDown(e: KeyboardEvent, grid: Grid): boolean {\n const isShiftKey = e.shiftKey;\n\n if (isShiftKey) {\n grid.trimSelectedRanges();\n } else {\n grid.clearSelectedRanges();\n }\n\n const { selectionEndRow, cursorColumn } = grid.state;\n const row: number | null = selectionEndRow;\n const column: number | null = cursorColumn;\n if (row === null) {\n return false;\n }\n const metricState = grid.getMetricState();\n const { metricCalculator } = grid;\n const {\n bottomVisible,\n topVisible,\n hasHorizontalBar,\n rowCount,\n lastTop,\n } = metricCalculator.getMetrics(metricState);\n const lastRowIndex = rowCount - 1;\n\n let selectRangeEndPosition = bottomVisible - topVisible + row;\n selectRangeEndPosition += hasHorizontalBar ? 0 : 1;\n\n // Don't move beyond the bottom table row.\n selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);\n\n const viewportPosition = Math.min(\n lastTop,\n selectRangeEndPosition - (row - topVisible)\n );\n grid.moveCursorToPosition(\n column,\n selectRangeEndPosition,\n isShiftKey,\n false\n );\n grid.setViewState({ top: viewportPosition });\n\n return true;\n }\n}\n\nexport default SelectionKeyHandler;\n"],"file":"SelectionKeyHandler.js"}