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