@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.
- package/dist/CellInputField.js +88 -40
- package/dist/CellInputField.js.map +1 -1
- package/dist/Grid.js +1484 -1449
- package/dist/Grid.js.map +1 -1
- package/dist/GridColorUtils.js +51 -18
- package/dist/GridColorUtils.js.map +1 -1
- package/dist/GridMetricCalculator.js +994 -1017
- package/dist/GridMetricCalculator.js.map +1 -1
- package/dist/GridModel.js +286 -171
- package/dist/GridModel.js.map +1 -1
- package/dist/GridMouseHandler.js +59 -39
- package/dist/GridMouseHandler.js.map +1 -1
- package/dist/GridRange.js +630 -572
- package/dist/GridRange.js.map +1 -1
- package/dist/GridRenderer.d.ts.map +1 -1
- package/dist/GridRenderer.js +1564 -1650
- package/dist/GridRenderer.js.map +1 -1
- package/dist/GridTestUtils.js +29 -15
- package/dist/GridTestUtils.js.map +1 -1
- package/dist/GridUtils.js +717 -679
- package/dist/GridUtils.js.map +1 -1
- package/dist/KeyHandler.js +18 -6
- package/dist/KeyHandler.js.map +1 -1
- package/dist/MockGridModel.js +210 -105
- package/dist/MockGridModel.js.map +1 -1
- package/dist/MockTreeGridModel.js +183 -113
- package/dist/MockTreeGridModel.js.map +1 -1
- package/dist/errors/PasteError.js +44 -5
- package/dist/errors/PasteError.js.map +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/errors/index.js.map +1 -1
- package/dist/index.js +15 -15
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/EditKeyHandler.js +75 -42
- package/dist/key-handlers/EditKeyHandler.js.map +1 -1
- package/dist/key-handlers/PasteKeyHandler.js +78 -42
- package/dist/key-handlers/PasteKeyHandler.js.map +1 -1
- package/dist/key-handlers/SelectionKeyHandler.js +234 -220
- package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
- package/dist/key-handlers/TreeKeyHandler.js +72 -42
- package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
- package/dist/key-handlers/index.js +4 -4
- package/dist/key-handlers/index.js.map +1 -1
- package/dist/memoizeClear.js +1 -1
- package/dist/memoizeClear.js.map +1 -1
- package/dist/mouse-handlers/EditMouseHandler.js +50 -18
- package/dist/mouse-handlers/EditMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +163 -141
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js +86 -47
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js +171 -143
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js +147 -125
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js +86 -47
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js +76 -46
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js +62 -31
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSelectionMouseHandler.js +222 -200
- package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js +253 -206
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js +172 -144
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/index.js +10 -10
- package/dist/mouse-handlers/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- 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
|
|
4
|
-
import GridUtils from
|
|
5
|
-
import KeyHandler from
|
|
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
|
-
|
|
29
|
+
var SelectionKeyHandler = /*#__PURE__*/function (_KeyHandler) {
|
|
30
|
+
_inherits(SelectionKeyHandler, _KeyHandler);
|
|
17
31
|
|
|
18
|
-
|
|
19
|
-
return this.handleArrowMove(0, -1, e, grid);
|
|
32
|
+
var _super = _createSuper(SelectionKeyHandler);
|
|
20
33
|
|
|
21
|
-
|
|
22
|
-
|
|
34
|
+
function SelectionKeyHandler() {
|
|
35
|
+
_classCallCheck(this, SelectionKeyHandler);
|
|
23
36
|
|
|
24
|
-
|
|
25
|
-
|
|
37
|
+
return _super.apply(this, arguments);
|
|
38
|
+
}
|
|
26
39
|
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
50
|
+
break;
|
|
31
51
|
|
|
32
|
-
|
|
33
|
-
|
|
52
|
+
case 'ArrowUp':
|
|
53
|
+
return this.handleArrowMove(0, -1, e, grid);
|
|
34
54
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return this.handlePageDown(e, grid);
|
|
55
|
+
case 'ArrowDown':
|
|
56
|
+
return this.handleArrowMove(0, 1, e, grid);
|
|
38
57
|
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
return true;
|
|
61
|
+
case 'ArrowLeft':
|
|
62
|
+
return this.handleArrowMove(-1, 0, e, grid);
|
|
62
63
|
|
|
63
|
-
|
|
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
|
-
|
|
66
|
+
case 'PageUp':
|
|
67
|
+
return this.handlePageUp(e, grid);
|
|
70
68
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
-
|
|
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
|
-
|
|
80
|
-
|
|
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
|
-
|
|
84
|
-
}
|
|
99
|
+
break;
|
|
85
100
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
91
|
-
grid.trimSelectedRanges();
|
|
92
|
-
} else {
|
|
93
|
-
grid.clearSelectedRanges();
|
|
94
|
-
}
|
|
107
|
+
break;
|
|
95
108
|
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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.
|
|
124
|
+
grid.clearSelectedRanges();
|
|
169
125
|
}
|
|
170
|
-
}
|
|
171
126
|
|
|
172
|
-
|
|
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
|
-
|
|
176
|
-
|
|
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
|
-
|
|
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
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
var column = cursorColumn;
|
|
193
|
+
if (isShiftKey) {
|
|
194
|
+
grid.trimSelectedRanges();
|
|
195
|
+
} else {
|
|
196
|
+
grid.clearSelectedRanges();
|
|
197
|
+
}
|
|
190
198
|
|
|
191
|
-
|
|
192
|
-
|
|
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
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
217
|
-
|
|
209
|
+
var metricState = grid.getMetricState();
|
|
210
|
+
var metricCalculator = grid.metricCalculator;
|
|
218
211
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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
|
-
|
|
226
|
-
|
|
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
|
-
|
|
233
|
-
|
|
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
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
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"}
|