@deephaven/grid 0.5.2-beta.0 → 0.6.1-demo.10
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 +40 -88
- package/dist/CellInputField.js.map +1 -1
- package/dist/Grid.js +1449 -1484
- package/dist/Grid.js.map +1 -1
- package/dist/GridColorUtils.js +18 -51
- package/dist/GridColorUtils.js.map +1 -1
- package/dist/GridMetricCalculator.d.ts +8 -1
- package/dist/GridMetricCalculator.d.ts.map +1 -1
- package/dist/GridMetricCalculator.js +1031 -994
- package/dist/GridMetricCalculator.js.map +1 -1
- package/dist/GridModel.d.ts +4 -1
- package/dist/GridModel.d.ts.map +1 -1
- package/dist/GridModel.js +175 -286
- package/dist/GridModel.js.map +1 -1
- package/dist/GridMouseHandler.js +39 -59
- package/dist/GridMouseHandler.js.map +1 -1
- package/dist/GridRange.js +572 -630
- package/dist/GridRange.js.map +1 -1
- package/dist/GridRenderer.js +1650 -1564
- package/dist/GridRenderer.js.map +1 -1
- package/dist/GridTestUtils.js +15 -29
- package/dist/GridTestUtils.js.map +1 -1
- package/dist/GridUtils.js +679 -717
- package/dist/GridUtils.js.map +1 -1
- package/dist/KeyHandler.js +6 -18
- package/dist/KeyHandler.js.map +1 -1
- package/dist/MockGridModel.js +105 -210
- package/dist/MockGridModel.js.map +1 -1
- package/dist/MockTreeGridModel.js +113 -183
- package/dist/MockTreeGridModel.js.map +1 -1
- package/dist/errors/PasteError.js +5 -44
- 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 +42 -75
- package/dist/key-handlers/EditKeyHandler.js.map +1 -1
- package/dist/key-handlers/PasteKeyHandler.js +42 -78
- package/dist/key-handlers/PasteKeyHandler.js.map +1 -1
- package/dist/key-handlers/SelectionKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/SelectionKeyHandler.js +239 -229
- package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
- package/dist/key-handlers/TreeKeyHandler.js +42 -72
- 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 +18 -50
- package/dist/mouse-handlers/EditMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +141 -163
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js +47 -86
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js +145 -171
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js +125 -147
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js +47 -86
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js +46 -76
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js +31 -62
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSelectionMouseHandler.js +200 -222
- package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js +206 -253
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js +146 -172
- 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 +6 -10
|
@@ -1,277 +1,287 @@
|
|
|
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
|
-
|
|
23
1
|
/* eslint class-methods-use-this: "off" */
|
|
24
2
|
import clamp from 'lodash.clamp';
|
|
25
|
-
import GridRange from
|
|
26
|
-
import GridUtils from
|
|
27
|
-
import KeyHandler from
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
+
}
|
|
33
15
|
|
|
34
|
-
|
|
35
|
-
_classCallCheck(this, SelectionKeyHandler);
|
|
16
|
+
break;
|
|
36
17
|
|
|
37
|
-
|
|
38
|
-
|
|
18
|
+
case 'ArrowUp':
|
|
19
|
+
return this.handleArrowMove(0, -1, e, grid);
|
|
39
20
|
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
}
|
|
21
|
+
case 'ArrowDown':
|
|
22
|
+
return this.handleArrowMove(0, 1, e, grid);
|
|
49
23
|
|
|
50
|
-
|
|
24
|
+
case 'ArrowRight':
|
|
25
|
+
return this.handleArrowMove(1, 0, e, grid);
|
|
51
26
|
|
|
52
|
-
|
|
53
|
-
|
|
27
|
+
case 'ArrowLeft':
|
|
28
|
+
return this.handleArrowMove(-1, 0, e, grid);
|
|
54
29
|
|
|
55
|
-
|
|
56
|
-
return this.handleArrowMove(0, 1, e, grid);
|
|
30
|
+
case 'k': // h/j/k/l keys are grouped together for quick navigation by power users
|
|
57
31
|
|
|
58
|
-
|
|
59
|
-
|
|
32
|
+
case 'PageUp':
|
|
33
|
+
return this.handlePageUp(e, grid);
|
|
60
34
|
|
|
61
|
-
|
|
62
|
-
|
|
35
|
+
case 'j':
|
|
36
|
+
case 'PageDown':
|
|
37
|
+
return this.handlePageDown(e, grid);
|
|
63
38
|
|
|
64
|
-
|
|
39
|
+
case 'h':
|
|
40
|
+
grid.clearSelectedRanges();
|
|
41
|
+
grid.moveCursorToPosition(0, grid.state.cursorRow);
|
|
42
|
+
return true;
|
|
43
|
+
|
|
44
|
+
case 'l':
|
|
45
|
+
{
|
|
46
|
+
var {
|
|
47
|
+
model
|
|
48
|
+
} = grid.props;
|
|
49
|
+
var {
|
|
50
|
+
columnCount
|
|
51
|
+
} = model;
|
|
52
|
+
grid.clearSelectedRanges();
|
|
53
|
+
grid.moveCursorToPosition(columnCount - 1, grid.state.cursorRow);
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
65
56
|
|
|
66
|
-
|
|
67
|
-
|
|
57
|
+
case 'Home':
|
|
58
|
+
if (!e.shiftKey) {
|
|
59
|
+
grid.clearSelectedRanges();
|
|
60
|
+
}
|
|
68
61
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return this.handlePageDown(e, grid);
|
|
62
|
+
grid.moveCursorToPosition(GridUtils.isModifierKeyDown(e) ? grid.state.cursorColumn : 0, GridUtils.isModifierKeyDown(e) ? 0 : grid.state.cursorRow, e.shiftKey, true, true);
|
|
63
|
+
return true;
|
|
72
64
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
65
|
+
case 'End':
|
|
66
|
+
{
|
|
67
|
+
var {
|
|
68
|
+
model: _model
|
|
69
|
+
} = grid.props;
|
|
70
|
+
var {
|
|
71
|
+
columnCount: _columnCount,
|
|
72
|
+
rowCount
|
|
73
|
+
} = _model;
|
|
78
74
|
|
|
79
|
-
|
|
80
|
-
case 'End':
|
|
81
|
-
{
|
|
82
|
-
var model = grid.props.model;
|
|
83
|
-
var columnCount = model.columnCount;
|
|
75
|
+
if (!e.shiftKey) {
|
|
84
76
|
grid.clearSelectedRanges();
|
|
85
|
-
grid.moveCursorToPosition(columnCount - 1, grid.state.cursorRow);
|
|
86
|
-
break;
|
|
87
77
|
}
|
|
88
78
|
|
|
89
|
-
|
|
90
|
-
grid.clearSelectedRanges();
|
|
79
|
+
grid.moveCursorToPosition(GridUtils.isModifierKeyDown(e) ? grid.state.cursorColumn : _columnCount - 1, GridUtils.isModifierKeyDown(e) ? rowCount - 1 : grid.state.cursorRow, e.shiftKey, true, true);
|
|
91
80
|
return true;
|
|
81
|
+
}
|
|
92
82
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return true;
|
|
97
|
-
}
|
|
83
|
+
case 'Escape':
|
|
84
|
+
grid.clearSelectedRanges();
|
|
85
|
+
return true;
|
|
98
86
|
|
|
99
|
-
|
|
87
|
+
case 'Enter':
|
|
88
|
+
if (grid.state.selectedRanges.length > 0) {
|
|
89
|
+
grid.moveCursorInDirection(e.shiftKey ? GridRange.SELECTION_DIRECTION.UP : GridRange.SELECTION_DIRECTION.DOWN);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
100
92
|
|
|
101
|
-
|
|
102
|
-
if (grid.state.selectedRanges.length > 0) {
|
|
103
|
-
grid.moveCursorInDirection(e.shiftKey ? GridRange.SELECTION_DIRECTION.LEFT : GridRange.SELECTION_DIRECTION.RIGHT);
|
|
104
|
-
return true;
|
|
105
|
-
}
|
|
93
|
+
break;
|
|
106
94
|
|
|
107
|
-
|
|
95
|
+
case 'Tab':
|
|
96
|
+
if (grid.state.selectedRanges.length > 0) {
|
|
97
|
+
grid.moveCursorInDirection(e.shiftKey ? GridRange.SELECTION_DIRECTION.LEFT : GridRange.SELECTION_DIRECTION.RIGHT);
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
108
100
|
|
|
109
|
-
|
|
110
|
-
break;
|
|
111
|
-
}
|
|
101
|
+
break;
|
|
112
102
|
|
|
113
|
-
|
|
103
|
+
default:
|
|
104
|
+
break;
|
|
114
105
|
}
|
|
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();
|
|
123
|
-
} else {
|
|
124
|
-
grid.clearSelectedRanges();
|
|
125
|
-
}
|
|
126
106
|
|
|
127
|
-
|
|
128
|
-
|
|
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
|
-
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
156
109
|
|
|
157
|
-
|
|
158
|
-
|
|
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
|
-
}
|
|
110
|
+
handleArrowMove(deltaColumn, deltaRow, event, grid) {
|
|
111
|
+
var isShiftKey = event.shiftKey;
|
|
112
|
+
var isModifierKey = GridUtils.isModifierKeyDown(event);
|
|
185
113
|
|
|
186
|
-
|
|
114
|
+
if (isShiftKey) {
|
|
115
|
+
grid.trimSelectedRanges();
|
|
116
|
+
} else {
|
|
117
|
+
grid.clearSelectedRanges();
|
|
187
118
|
}
|
|
188
|
-
}, {
|
|
189
|
-
key: "handlePageUp",
|
|
190
|
-
value: function handlePageUp(e, grid) {
|
|
191
|
-
var isShiftKey = e.shiftKey;
|
|
192
119
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
120
|
+
var {
|
|
121
|
+
cursorRow,
|
|
122
|
+
cursorColumn,
|
|
123
|
+
selectionEndColumn,
|
|
124
|
+
selectionEndRow
|
|
125
|
+
} = grid.state;
|
|
126
|
+
var column = isShiftKey ? selectionEndColumn : cursorColumn;
|
|
127
|
+
var row = isShiftKey ? selectionEndRow : cursorRow;
|
|
128
|
+
|
|
129
|
+
if (isModifierKey) {
|
|
130
|
+
var {
|
|
131
|
+
model
|
|
132
|
+
} = grid.props;
|
|
133
|
+
var {
|
|
134
|
+
columnCount,
|
|
135
|
+
rowCount
|
|
136
|
+
} = model;
|
|
137
|
+
var maximizePreviousRange = isModifierKey && isShiftKey;
|
|
138
|
+
var moveToColumn = null;
|
|
139
|
+
var moveToRow = null;
|
|
140
|
+
|
|
141
|
+
if (deltaColumn < 0) {
|
|
142
|
+
moveToColumn = 0;
|
|
143
|
+
moveToRow = row;
|
|
144
|
+
} else if (deltaColumn > 0) {
|
|
145
|
+
moveToColumn = columnCount - 1;
|
|
146
|
+
moveToRow = row;
|
|
147
|
+
} else if (deltaRow < 0) {
|
|
148
|
+
moveToColumn = column;
|
|
149
|
+
moveToRow = 0;
|
|
150
|
+
} else if (deltaRow > 0) {
|
|
151
|
+
moveToColumn = column;
|
|
152
|
+
moveToRow = rowCount - 1;
|
|
197
153
|
}
|
|
198
154
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
var
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
155
|
+
if (moveToColumn != null && moveToRow != null) {
|
|
156
|
+
grid.moveCursorToPosition(moveToColumn, moveToRow, isShiftKey, true, maximizePreviousRange);
|
|
157
|
+
}
|
|
158
|
+
} else {
|
|
159
|
+
var {
|
|
160
|
+
theme
|
|
161
|
+
} = grid.props;
|
|
162
|
+
var {
|
|
163
|
+
autoSelectRow,
|
|
164
|
+
autoSelectColumn
|
|
165
|
+
} = theme;
|
|
166
|
+
|
|
167
|
+
if (autoSelectRow && deltaColumn !== 0) {
|
|
168
|
+
var {
|
|
169
|
+
lastLeft
|
|
170
|
+
} = grid.metrics;
|
|
171
|
+
var {
|
|
172
|
+
left
|
|
173
|
+
} = grid.state;
|
|
174
|
+
left = clamp(left + deltaColumn, 0, lastLeft);
|
|
175
|
+
grid.moveCursorToPosition(left, cursorRow, isShiftKey, false);
|
|
176
|
+
grid.setViewState({
|
|
177
|
+
left
|
|
178
|
+
});
|
|
179
|
+
} else if (autoSelectColumn && deltaRow !== 0) {
|
|
180
|
+
var {
|
|
181
|
+
lastTop
|
|
182
|
+
} = grid.metrics;
|
|
183
|
+
var {
|
|
184
|
+
top
|
|
185
|
+
} = grid.state;
|
|
186
|
+
top = clamp(top + deltaRow, 0, lastTop);
|
|
187
|
+
grid.moveCursorToPosition(top, cursorColumn, isShiftKey, false);
|
|
188
|
+
grid.setViewState({
|
|
189
|
+
top
|
|
190
|
+
});
|
|
191
|
+
} else {
|
|
192
|
+
grid.moveCursor(deltaColumn, deltaRow, isShiftKey);
|
|
207
193
|
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
208
198
|
|
|
209
|
-
|
|
210
|
-
|
|
199
|
+
handlePageUp(e, grid) {
|
|
200
|
+
var isShiftKey = e.shiftKey;
|
|
211
201
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
202
|
+
if (isShiftKey) {
|
|
203
|
+
grid.trimSelectedRanges();
|
|
204
|
+
} else {
|
|
205
|
+
grid.clearSelectedRanges();
|
|
206
|
+
}
|
|
216
207
|
|
|
217
|
-
|
|
218
|
-
|
|
208
|
+
var {
|
|
209
|
+
cursorColumn,
|
|
210
|
+
selectionEndRow
|
|
211
|
+
} = grid.state;
|
|
212
|
+
var row = selectionEndRow;
|
|
213
|
+
var column = cursorColumn;
|
|
219
214
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);
|
|
223
|
-
grid.setViewState({
|
|
224
|
-
top: viewportPosition
|
|
225
|
-
});
|
|
226
|
-
return true;
|
|
215
|
+
if (row == null) {
|
|
216
|
+
return false;
|
|
227
217
|
}
|
|
228
|
-
}, {
|
|
229
|
-
key: "handlePageDown",
|
|
230
|
-
value: function handlePageDown(e, grid) {
|
|
231
|
-
var isShiftKey = e.shiftKey;
|
|
232
218
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
219
|
+
var metricState = grid.getMetricState();
|
|
220
|
+
var {
|
|
221
|
+
metricCalculator
|
|
222
|
+
} = grid;
|
|
223
|
+
var {
|
|
224
|
+
bottomVisible,
|
|
225
|
+
topVisible,
|
|
226
|
+
hasHorizontalBar
|
|
227
|
+
} = metricCalculator.getMetrics(metricState);
|
|
228
|
+
var selectRangeEndPosition = row - (bottomVisible - topVisible);
|
|
229
|
+
selectRangeEndPosition -= hasHorizontalBar ? 0 : 1; // Don't move beyond the top table row.
|
|
230
|
+
|
|
231
|
+
selectRangeEndPosition = Math.max(selectRangeEndPosition, 0);
|
|
232
|
+
var viewportPosition = Math.max(selectRangeEndPosition - (row - topVisible), 0);
|
|
233
|
+
grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);
|
|
234
|
+
grid.setViewState({
|
|
235
|
+
top: viewportPosition
|
|
236
|
+
});
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
238
239
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
cursorColumn = _grid$state3.cursorColumn;
|
|
242
|
-
var row = selectionEndRow;
|
|
243
|
-
var column = cursorColumn;
|
|
240
|
+
handlePageDown(e, grid) {
|
|
241
|
+
var isShiftKey = e.shiftKey;
|
|
244
242
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
243
|
+
if (isShiftKey) {
|
|
244
|
+
grid.trimSelectedRanges();
|
|
245
|
+
} else {
|
|
246
|
+
grid.clearSelectedRanges();
|
|
247
|
+
}
|
|
248
248
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
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;
|
|
249
|
+
var {
|
|
250
|
+
selectionEndRow,
|
|
251
|
+
cursorColumn
|
|
252
|
+
} = grid.state;
|
|
253
|
+
var row = selectionEndRow;
|
|
254
|
+
var column = cursorColumn;
|
|
255
|
+
|
|
256
|
+
if (row === null) {
|
|
257
|
+
return false;
|
|
270
258
|
}
|
|
271
|
-
}]);
|
|
272
259
|
|
|
273
|
-
|
|
274
|
-
|
|
260
|
+
var metricState = grid.getMetricState();
|
|
261
|
+
var {
|
|
262
|
+
metricCalculator
|
|
263
|
+
} = grid;
|
|
264
|
+
var {
|
|
265
|
+
bottomVisible,
|
|
266
|
+
topVisible,
|
|
267
|
+
hasHorizontalBar,
|
|
268
|
+
rowCount,
|
|
269
|
+
lastTop
|
|
270
|
+
} = metricCalculator.getMetrics(metricState);
|
|
271
|
+
var lastRowIndex = rowCount - 1;
|
|
272
|
+
var selectRangeEndPosition = bottomVisible - topVisible + row;
|
|
273
|
+
selectRangeEndPosition += hasHorizontalBar ? 0 : 1; // Don't move beyond the bottom table row.
|
|
274
|
+
|
|
275
|
+
selectRangeEndPosition = Math.min(selectRangeEndPosition, lastRowIndex);
|
|
276
|
+
var viewportPosition = Math.min(lastTop, selectRangeEndPosition - (row - topVisible));
|
|
277
|
+
grid.moveCursorToPosition(column, selectRangeEndPosition, isShiftKey, false);
|
|
278
|
+
grid.setViewState({
|
|
279
|
+
top: viewportPosition
|
|
280
|
+
});
|
|
281
|
+
return true;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
}
|
|
275
285
|
|
|
276
286
|
export default SelectionKeyHandler;
|
|
277
287
|
//# sourceMappingURL=SelectionKeyHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
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"}
|
|
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","shiftKey","cursorColumn","rowCount","selectedRanges","length","moveCursorInDirection","SELECTION_DIRECTION","UP","DOWN","LEFT","RIGHT","deltaColumn","deltaRow","event","isShiftKey","isModifierKey","trimSelectedRanges","selectionEndColumn","selectionEndRow","column","row","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":"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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 'h':\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(0, grid.state.cursorRow);\n return true;\n case 'l': {\n const { model } = grid.props;\n const { columnCount } = model;\n grid.clearSelectedRanges();\n grid.moveCursorToPosition(columnCount - 1, grid.state.cursorRow);\n return true;\n }\n case 'Home':\n if (!e.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n GridUtils.isModifierKeyDown(e) ? grid.state.cursorColumn : 0,\n GridUtils.isModifierKeyDown(e) ? 0 : grid.state.cursorRow,\n e.shiftKey,\n true,\n true\n );\n return true;\n case 'End': {\n const { model } = grid.props;\n const { columnCount, rowCount } = model;\n if (!e.shiftKey) {\n grid.clearSelectedRanges();\n }\n grid.moveCursorToPosition(\n GridUtils.isModifierKeyDown(e)\n ? grid.state.cursorColumn\n : columnCount - 1,\n GridUtils.isModifierKeyDown(e) ? rowCount - 1 : grid.state.cursorRow,\n e.shiftKey,\n true,\n true\n );\n return true;\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"}
|