handsontable 0.0.0-next-b7cca45-20230605 → 0.0.0-next-aa25cac-20230607
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of handsontable might be problematic. Click here for more details.
- package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
- package/3rdparty/walkontable/src/cell/coords.js +61 -12
- package/3rdparty/walkontable/src/cell/coords.mjs +61 -12
- package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
- package/3rdparty/walkontable/src/cell/range.js +44 -7
- package/3rdparty/walkontable/src/cell/range.mjs +44 -7
- package/3rdparty/walkontable/src/core/_base.js +9 -3
- package/3rdparty/walkontable/src/core/_base.mjs +9 -3
- package/3rdparty/walkontable/src/core/clone.js +2 -2
- package/3rdparty/walkontable/src/core/clone.mjs +2 -2
- package/3rdparty/walkontable/src/core/core.js +3 -2
- package/3rdparty/walkontable/src/core/core.mjs +3 -2
- package/3rdparty/walkontable/src/event.js +7 -7
- package/3rdparty/walkontable/src/event.mjs +7 -7
- package/3rdparty/walkontable/src/facade/core.js +2 -2
- package/3rdparty/walkontable/src/facade/core.mjs +2 -2
- package/3rdparty/walkontable/src/index.js +10 -2
- package/3rdparty/walkontable/src/index.mjs +2 -2
- package/3rdparty/walkontable/src/overlay/_base.js +1 -1
- package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
- package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -4
- package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -4
- package/3rdparty/walkontable/src/overlay/top.js +2 -4
- package/3rdparty/walkontable/src/overlay/top.mjs +2 -4
- package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
- package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
- package/3rdparty/walkontable/src/selection/border/constants.js +18 -0
- package/3rdparty/walkontable/src/selection/border/constants.mjs +13 -0
- package/3rdparty/walkontable/src/selection/constants.js +63 -0
- package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
- package/3rdparty/walkontable/src/selection/index.js +30 -0
- package/3rdparty/walkontable/src/selection/index.mjs +5 -0
- package/3rdparty/walkontable/src/selection/manager.js +328 -0
- package/3rdparty/walkontable/src/selection/manager.mjs +322 -0
- package/3rdparty/walkontable/src/selection/scanner.js +363 -0
- package/3rdparty/walkontable/src/selection/scanner.mjs +359 -0
- package/3rdparty/walkontable/src/selection/selection.js +133 -0
- package/3rdparty/walkontable/src/selection/selection.mjs +127 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
- package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
- package/3rdparty/walkontable/src/table.js +7 -79
- package/3rdparty/walkontable/src/table.mjs +8 -80
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core.d.ts +5 -3
- package/core.js +123 -308
- package/core.mjs +123 -308
- package/dataMap/metaManager/metaSchema.js +15 -0
- package/dataMap/metaManager/metaSchema.mjs +15 -0
- package/dist/handsontable.css +8 -3
- package/dist/handsontable.full.css +8 -3
- package/dist/handsontable.full.js +12578 -10028
- package/dist/handsontable.full.min.css +3 -3
- package/dist/handsontable.full.min.js +120 -120
- package/dist/handsontable.js +18881 -16331
- package/dist/handsontable.min.css +3 -3
- package/dist/handsontable.min.js +4 -4
- package/editorManager.js +21 -82
- package/editorManager.mjs +26 -86
- package/editors/textEditor/textEditor.js +3 -11
- package/editors/textEditor/textEditor.mjs +4 -12
- package/helpers/mixed.js +1 -1
- package/helpers/mixed.mjs +1 -1
- package/helpers/number.d.ts +1 -0
- package/helpers/number.js +18 -0
- package/helpers/number.mjs +17 -0
- package/package.json +1 -1
- package/pluginHooks.d.ts +5 -1
- package/pluginHooks.js +89 -1
- package/pluginHooks.mjs +89 -1
- package/plugins/copyPaste/copyPaste.js +5 -1
- package/plugins/copyPaste/copyPaste.mjs +5 -1
- package/plugins/customBorders/customBorders.js +18 -52
- package/plugins/customBorders/customBorders.mjs +19 -53
- package/plugins/mergeCells/mergeCells.js +5 -18
- package/plugins/mergeCells/mergeCells.mjs +5 -18
- package/plugins/nestedHeaders/nestedHeaders.js +132 -10
- package/plugins/nestedHeaders/nestedHeaders.mjs +132 -10
- package/plugins/nestedHeaders/stateManager/index.js +37 -0
- package/plugins/nestedHeaders/stateManager/index.mjs +37 -0
- package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
- package/selection/highlight/highlight.js +311 -88
- package/selection/highlight/highlight.mjs +301 -84
- package/selection/highlight/types/activeHeader.js +10 -9
- package/selection/highlight/types/activeHeader.mjs +10 -8
- package/selection/highlight/types/area.js +12 -27
- package/selection/highlight/types/area.mjs +16 -30
- package/selection/highlight/types/areaLayered.js +54 -0
- package/selection/highlight/types/areaLayered.mjs +49 -0
- package/selection/highlight/types/column.js +50 -0
- package/selection/highlight/types/column.mjs +45 -0
- package/selection/highlight/types/customSelection.js +7 -10
- package/selection/highlight/types/customSelection.mjs +7 -9
- package/selection/highlight/types/fill.js +5 -8
- package/selection/highlight/types/fill.mjs +5 -7
- package/selection/highlight/types/{cell.js → focus.js} +5 -8
- package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
- package/selection/highlight/types/header.js +10 -20
- package/selection/highlight/types/header.mjs +10 -19
- package/selection/highlight/types/{index.js → row.js} +27 -31
- package/selection/highlight/types/{index.mjs → row.mjs} +24 -29
- package/selection/highlight/visualSelection.js +31 -27
- package/selection/highlight/visualSelection.mjs +31 -27
- package/selection/index.js +4 -7
- package/selection/index.mjs +2 -3
- package/selection/mouseEventHandler.js +1 -1
- package/selection/mouseEventHandler.mjs +1 -1
- package/selection/range.js +8 -8
- package/selection/range.mjs +8 -8
- package/selection/selection.js +315 -180
- package/selection/selection.mjs +310 -179
- package/selection/transformation.js +233 -96
- package/selection/transformation.mjs +230 -93
- package/selection/utils.js +12 -35
- package/selection/utils.mjs +13 -35
- package/settings.d.ts +1 -0
- package/shortcutContexts/commands/editor/closeAndSave.js +15 -0
- package/shortcutContexts/commands/editor/closeAndSave.mjs +10 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.js +13 -0
- package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
- package/shortcutContexts/commands/editor/fastOpen.js +16 -0
- package/shortcutContexts/commands/editor/fastOpen.mjs +11 -0
- package/shortcutContexts/commands/editor/index.js +16 -0
- package/shortcutContexts/commands/editor/index.mjs +12 -0
- package/shortcutContexts/commands/editor/open.js +29 -0
- package/shortcutContexts/commands/editor/open.mjs +24 -0
- package/shortcutContexts/commands/emptySelectedCells.js +12 -0
- package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
- package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/down.mjs +10 -0
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +21 -0
- package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +16 -0
- package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
- package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
- package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/left.mjs +10 -0
- package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/right.mjs +10 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +14 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +22 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +17 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +17 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +12 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +17 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +12 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +39 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +34 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +39 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +34 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +22 -0
- package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +17 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
- package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +14 -0
- package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
- package/shortcutContexts/commands/extendCellsSelection/up.mjs +10 -0
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +21 -0
- package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +16 -0
- package/shortcutContexts/commands/index.js +51 -0
- package/shortcutContexts/commands/index.mjs +47 -0
- package/shortcutContexts/commands/moveCellSelection/down.js +12 -0
- package/shortcutContexts/commands/moveCellSelection/down.mjs +7 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +11 -0
- package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
- package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +13 -0
- package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.js +13 -0
- package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/left.js +11 -0
- package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/right.js +11 -0
- package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +11 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
- package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +12 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +8 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
- package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +11 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +35 -0
- package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +30 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.js +35 -0
- package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +30 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +11 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
- package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +13 -0
- package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
- package/shortcutContexts/commands/moveCellSelection/up.mjs +7 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +11 -0
- package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +6 -0
- package/shortcutContexts/commands/populateSelectedCellsData.js +35 -0
- package/shortcutContexts/commands/populateSelectedCellsData.mjs +30 -0
- package/shortcutContexts/commands/selectAll.js +11 -0
- package/shortcutContexts/commands/selectAll.mjs +6 -0
- package/shortcutContexts/constants.js +19 -0
- package/shortcutContexts/constants.mjs +12 -0
- package/shortcutContexts/editor.js +29 -0
- package/shortcutContexts/editor.mjs +25 -0
- package/shortcutContexts/grid.js +244 -0
- package/shortcutContexts/grid.mjs +240 -0
- package/shortcutContexts/index.js +29 -0
- package/shortcutContexts/index.mjs +15 -0
- package/shortcuts/manager.js +2 -0
- package/shortcuts/manager.mjs +2 -0
- package/tableView.js +58 -9
- package/tableView.mjs +58 -9
- package/3rdparty/walkontable/src/selection.js +0 -354
- package/3rdparty/walkontable/src/selection.mjs +0 -348
- package/selection/highlight/constants.js +0 -16
- package/selection/highlight/constants.mjs +0 -6
package/selection/selection.mjs
CHANGED
@@ -1,11 +1,5 @@
|
|
1
1
|
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
2
2
|
var _templateObject;
|
3
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
4
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
5
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
6
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
7
|
-
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
8
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
9
3
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
10
4
|
import "core-js/modules/es.array.iterator.js";
|
11
5
|
import "core-js/modules/es.object.to-string.js";
|
@@ -26,22 +20,22 @@ import "core-js/modules/es.symbol.description.js";
|
|
26
20
|
import "core-js/modules/es.array.slice.js";
|
27
21
|
import "core-js/modules/es.object.freeze.js";
|
28
22
|
import "core-js/modules/es.symbol.iterator.js";
|
29
|
-
import "core-js/modules/es.function.name.js";
|
30
|
-
import "core-js/modules/es.regexp.exec.js";
|
31
23
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
32
24
|
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, _toPropertyKey(descriptor.key), descriptor); } }
|
33
25
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
26
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
34
27
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
35
28
|
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
36
|
-
import
|
37
|
-
import { AREA_TYPE, HEADER_TYPE,
|
29
|
+
import { CellCoords, CellRange } from "./../3rdparty/walkontable/src/index.mjs";
|
30
|
+
import Highlight, { AREA_TYPE, HEADER_TYPE, FOCUS_TYPE } from "./highlight/highlight.mjs";
|
38
31
|
import SelectionRange from "./range.mjs";
|
39
32
|
import { createObjectPropListener, mixin } from "./../helpers/object.mjs";
|
40
33
|
import { isUndefined } from "./../helpers/mixed.mjs";
|
34
|
+
import { clamp } from "./../helpers/number.mjs";
|
41
35
|
import { arrayEach } from "./../helpers/array.mjs";
|
42
36
|
import localHooks from "./../mixins/localHooks.mjs";
|
43
37
|
import Transformation from "./transformation.mjs";
|
44
|
-
import { detectSelectionType,
|
38
|
+
import { detectSelectionType, normalizeSelectionFactory, SELECTION_TYPE_EMPTY, SELECTION_TYPE_UNRECOGNIZED } from "./utils.mjs";
|
45
39
|
import { toSingleLine } from "./../helpers/templateLiteralTag.mjs";
|
46
40
|
/**
|
47
41
|
* @class Selection
|
@@ -56,57 +50,62 @@ var Selection = /*#__PURE__*/function () {
|
|
56
50
|
*
|
57
51
|
* @type {GridSettings}
|
58
52
|
*/
|
59
|
-
this
|
53
|
+
_defineProperty(this, "settings", void 0);
|
60
54
|
/**
|
61
55
|
* An additional object with dynamically defined properties which describes table state.
|
62
56
|
*
|
63
57
|
* @type {object}
|
64
58
|
*/
|
65
|
-
this
|
59
|
+
_defineProperty(this, "tableProps", void 0);
|
66
60
|
/**
|
67
61
|
* The flag which determines if the selection is in progress.
|
68
62
|
*
|
69
63
|
* @type {boolean}
|
70
64
|
*/
|
71
|
-
this
|
65
|
+
_defineProperty(this, "inProgress", false);
|
72
66
|
/**
|
73
|
-
*
|
67
|
+
* Selection data layer (handle visual coordinates).
|
74
68
|
*
|
75
|
-
* @type {
|
69
|
+
* @type {SelectionRange}
|
76
70
|
*/
|
77
|
-
this
|
71
|
+
_defineProperty(this, "selectedRange", new SelectionRange(function (highlight, from, to) {
|
72
|
+
return _this.tableProps.createCellRange(highlight, from, to);
|
73
|
+
}));
|
78
74
|
/**
|
79
|
-
*
|
80
|
-
* the corner header.
|
75
|
+
* Visualization layer.
|
81
76
|
*
|
82
|
-
* @type {
|
77
|
+
* @type {Highlight}
|
83
78
|
*/
|
84
|
-
this
|
79
|
+
_defineProperty(this, "highlight", void 0);
|
85
80
|
/**
|
86
|
-
* The
|
87
|
-
* the corner header.
|
81
|
+
* The module for modifying coordinates.
|
88
82
|
*
|
89
|
-
* @type {
|
83
|
+
* @type {Transformation}
|
90
84
|
*/
|
91
|
-
this
|
85
|
+
_defineProperty(this, "transformation", void 0);
|
92
86
|
/**
|
93
|
-
*
|
87
|
+
* The collection of the selection layer levels where the whole row was selected using the row header or
|
88
|
+
* the corner header.
|
94
89
|
*
|
95
|
-
* @type {
|
90
|
+
* @type {Set<number>}
|
96
91
|
*/
|
97
|
-
this
|
98
|
-
return _this.tableProps.createCellRange(highlight, from, to);
|
99
|
-
});
|
92
|
+
_defineProperty(this, "selectedByRowHeader", new Set());
|
100
93
|
/**
|
101
|
-
*
|
94
|
+
* The collection of the selection layer levels where the whole column was selected using the column header or
|
95
|
+
* the corner header.
|
102
96
|
*
|
103
|
-
* @type {
|
97
|
+
* @type {Set<number>}
|
104
98
|
*/
|
99
|
+
_defineProperty(this, "selectedByColumnHeader", new Set());
|
100
|
+
this.settings = settings;
|
101
|
+
this.tableProps = tableProps;
|
105
102
|
this.highlight = new Highlight({
|
106
103
|
headerClassName: settings.currentHeaderClassName,
|
107
104
|
activeHeaderClassName: settings.activeHeaderClassName,
|
108
105
|
rowClassName: settings.currentRowClassName,
|
109
106
|
columnClassName: settings.currentColClassName,
|
107
|
+
rowIndexMapper: this.tableProps.rowIndexMapper,
|
108
|
+
columnIndexMapper: this.tableProps.columnIndexMapper,
|
110
109
|
disabledCellSelection: function disabledCellSelection(row, column) {
|
111
110
|
return _this.tableProps.isDisabledCellSelection(row, column);
|
112
111
|
},
|
@@ -127,25 +126,22 @@ var Selection = /*#__PURE__*/function () {
|
|
127
126
|
},
|
128
127
|
createCellRange: function createCellRange(highlight, from, to) {
|
129
128
|
return _this.tableProps.createCellRange(highlight, from, to);
|
130
|
-
},
|
131
|
-
rowIndexMapper: function rowIndexMapper() {
|
132
|
-
return _this.tableProps.rowIndexMapper();
|
133
|
-
},
|
134
|
-
columnIndexMapper: function columnIndexMapper() {
|
135
|
-
return _this.tableProps.columnIndexMapper();
|
136
129
|
}
|
137
130
|
});
|
138
|
-
/**
|
139
|
-
* The module for modifying coordinates.
|
140
|
-
*
|
141
|
-
* @type {Transformation}
|
142
|
-
*/
|
143
131
|
this.transformation = new Transformation(this.selectedRange, {
|
144
|
-
|
145
|
-
|
132
|
+
rowIndexMapper: this.tableProps.rowIndexMapper,
|
133
|
+
columnIndexMapper: this.tableProps.columnIndexMapper,
|
134
|
+
countRenderableRows: function countRenderableRows() {
|
135
|
+
return _this.tableProps.countRenderableRows();
|
136
|
+
},
|
137
|
+
countRenderableColumns: function countRenderableColumns() {
|
138
|
+
return _this.tableProps.countRenderableColumns();
|
139
|
+
},
|
140
|
+
countRowHeaders: function countRowHeaders() {
|
141
|
+
return _this.tableProps.countRowHeaders();
|
146
142
|
},
|
147
|
-
|
148
|
-
return _this.tableProps.
|
143
|
+
countColHeaders: function countColHeaders() {
|
144
|
+
return _this.tableProps.countColHeaders();
|
149
145
|
},
|
150
146
|
visualToRenderableCoords: function visualToRenderableCoords(coords) {
|
151
147
|
return _this.tableProps.visualToRenderableCoords(coords);
|
@@ -156,6 +152,9 @@ var Selection = /*#__PURE__*/function () {
|
|
156
152
|
createCellCoords: function createCellCoords(row, column) {
|
157
153
|
return _this.tableProps.createCellCoords(row, column);
|
158
154
|
},
|
155
|
+
navigableHeaders: function navigableHeaders() {
|
156
|
+
return settings.navigableHeaders;
|
157
|
+
},
|
159
158
|
fixedRowsBottom: function fixedRowsBottom() {
|
160
159
|
return settings.fixedRowsBottom;
|
161
160
|
},
|
@@ -222,7 +221,7 @@ var Selection = /*#__PURE__*/function () {
|
|
222
221
|
}
|
223
222
|
|
224
223
|
/**
|
225
|
-
* Indicate that selection process began. It sets
|
224
|
+
* Indicate that selection process began. It sets internally `.inProgress` property to `true`.
|
226
225
|
*/
|
227
226
|
}, {
|
228
227
|
key: "begin",
|
@@ -231,7 +230,7 @@ var Selection = /*#__PURE__*/function () {
|
|
231
230
|
}
|
232
231
|
|
233
232
|
/**
|
234
|
-
* Indicate that selection process finished. It sets
|
233
|
+
* Indicate that selection process finished. It sets internally `.inProgress` property to `false`.
|
235
234
|
*/
|
236
235
|
}, {
|
237
236
|
key: "finish",
|
@@ -260,35 +259,27 @@ var Selection = /*#__PURE__*/function () {
|
|
260
259
|
* the default trigger will be used.
|
261
260
|
* @param {boolean} [fragment=false] If `true`, the selection will be treated as a partial selection where the
|
262
261
|
* `setRangeEnd` method won't be called on every `setRangeStart` call.
|
262
|
+
* @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
|
263
263
|
*/
|
264
264
|
}, {
|
265
265
|
key: "setRangeStart",
|
266
266
|
value: function setRangeStart(coords, multipleSelection) {
|
267
267
|
var fragment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
268
|
+
var highlightCoords = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : coords;
|
268
269
|
var isMultipleMode = this.settings.selectionMode === 'multiple';
|
269
270
|
var isMultipleSelection = isUndefined(multipleSelection) ? this.tableProps.getShortcutManager().isCtrlPressed() : multipleSelection;
|
270
|
-
var isRowNegative = coords.row < 0;
|
271
|
-
var isColumnNegative = coords.col < 0;
|
272
|
-
var selectedByCorner = isRowNegative && isColumnNegative;
|
273
271
|
// We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords
|
274
272
|
// should be handled by next methods.
|
275
273
|
var coordsClone = coords.clone();
|
276
|
-
this.selectedByCorner = selectedByCorner;
|
277
274
|
this.runLocalHooks("beforeSetRangeStart".concat(fragment ? 'Only' : ''), coordsClone);
|
278
275
|
if (!isMultipleMode || isMultipleMode && !isMultipleSelection && isUndefined(multipleSelection)) {
|
279
276
|
this.selectedRange.clear();
|
280
277
|
}
|
281
|
-
this.selectedRange.add(coordsClone);
|
278
|
+
this.selectedRange.add(coordsClone).current().setHighlight(highlightCoords.clone());
|
282
279
|
if (this.getLayerLevel() === 0) {
|
283
280
|
this.selectedByRowHeader.clear();
|
284
281
|
this.selectedByColumnHeader.clear();
|
285
282
|
}
|
286
|
-
if (!selectedByCorner && isColumnNegative) {
|
287
|
-
this.selectedByRowHeader.add(this.getLayerLevel());
|
288
|
-
}
|
289
|
-
if (!selectedByCorner && isRowNegative) {
|
290
|
-
this.selectedByColumnHeader.add(this.getLayerLevel());
|
291
|
-
}
|
292
283
|
if (!fragment) {
|
293
284
|
this.setRangeEnd(coords);
|
294
285
|
}
|
@@ -301,11 +292,13 @@ var Selection = /*#__PURE__*/function () {
|
|
301
292
|
* @param {boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works
|
302
293
|
* only when 'selectionMode' is set as 'multiple'. If the argument is not defined
|
303
294
|
* the default trigger will be used.
|
295
|
+
* @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
|
304
296
|
*/
|
305
297
|
}, {
|
306
298
|
key: "setRangeStartOnly",
|
307
299
|
value: function setRangeStartOnly(coords, multipleSelection) {
|
308
|
-
|
300
|
+
var highlightCoords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : coords;
|
301
|
+
this.setRangeStart(coords, multipleSelection, true, highlightCoords);
|
309
302
|
}
|
310
303
|
|
311
304
|
/**
|
@@ -319,21 +312,39 @@ var Selection = /*#__PURE__*/function () {
|
|
319
312
|
if (this.selectedRange.isEmpty()) {
|
320
313
|
return;
|
321
314
|
}
|
322
|
-
|
323
|
-
// We are creating copy. We would like to modify just the end of the selection by below hook. Then original coords
|
324
|
-
// should be handled by next methods.
|
325
315
|
var coordsClone = coords.clone();
|
316
|
+
var countRows = this.tableProps.countRows();
|
317
|
+
var countCols = this.tableProps.countCols();
|
318
|
+
var isSingle = this.selectedRange.current().clone().setTo(coords).isSingleHeader();
|
319
|
+
|
320
|
+
// Ignore processing the end range when the header selection starts overlapping the corner and
|
321
|
+
// the selection is not a single header highlight.
|
322
|
+
if ((countRows > 0 || countCols > 0) && (countRows === 0 && coordsClone.col < 0 && !isSingle || countCols === 0 && coordsClone.row < 0 && !isSingle)) {
|
323
|
+
return;
|
324
|
+
}
|
326
325
|
this.runLocalHooks('beforeSetRangeEnd', coordsClone);
|
327
326
|
this.begin();
|
328
327
|
var cellRange = this.selectedRange.current();
|
329
|
-
if (this.settings.
|
330
|
-
cellRange.
|
328
|
+
if (!this.settings.navigableHeaders) {
|
329
|
+
cellRange.highlight.normalize();
|
330
|
+
}
|
331
|
+
if (this.settings.selectionMode === 'single') {
|
332
|
+
cellRange.setFrom(cellRange.highlight);
|
333
|
+
cellRange.setTo(cellRange.highlight);
|
334
|
+
} else {
|
335
|
+
cellRange.setTo(coordsClone);
|
331
336
|
}
|
332
337
|
|
333
|
-
//
|
334
|
-
|
335
|
-
|
336
|
-
|
338
|
+
// Prevent creating "area" selection that overlaps headers.
|
339
|
+
if (countRows > 0 && countCols > 0) {
|
340
|
+
if (!this.settings.navigableHeaders || this.settings.navigableHeaders && !cellRange.isSingleHeader()) {
|
341
|
+
cellRange.to.normalize();
|
342
|
+
}
|
343
|
+
}
|
344
|
+
var focusHighlight = this.highlight.getFocus();
|
345
|
+
focusHighlight.clear();
|
346
|
+
if (this.highlight.isEnabledFor(FOCUS_TYPE, cellRange.highlight)) {
|
347
|
+
focusHighlight.add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
|
337
348
|
}
|
338
349
|
var layerLevel = this.getLayerLevel();
|
339
350
|
|
@@ -343,73 +354,96 @@ var Selection = /*#__PURE__*/function () {
|
|
343
354
|
arrayEach(this.highlight.getAreas(), function (highlight) {
|
344
355
|
return void highlight.clear();
|
345
356
|
});
|
346
|
-
arrayEach(this.highlight.
|
357
|
+
arrayEach(this.highlight.getLayeredAreas(), function (highlight) {
|
358
|
+
return void highlight.clear();
|
359
|
+
});
|
360
|
+
arrayEach(this.highlight.getRowHeaders(), function (highlight) {
|
361
|
+
return void highlight.clear();
|
362
|
+
});
|
363
|
+
arrayEach(this.highlight.getColumnHeaders(), function (highlight) {
|
364
|
+
return void highlight.clear();
|
365
|
+
});
|
366
|
+
arrayEach(this.highlight.getActiveRowHeaders(), function (highlight) {
|
367
|
+
return void highlight.clear();
|
368
|
+
});
|
369
|
+
arrayEach(this.highlight.getActiveColumnHeaders(), function (highlight) {
|
370
|
+
return void highlight.clear();
|
371
|
+
});
|
372
|
+
arrayEach(this.highlight.getActiveCornerHeaders(), function (highlight) {
|
347
373
|
return void highlight.clear();
|
348
374
|
});
|
349
|
-
arrayEach(this.highlight.
|
375
|
+
arrayEach(this.highlight.getRowHighlights(), function (highlight) {
|
376
|
+
return void highlight.clear();
|
377
|
+
});
|
378
|
+
arrayEach(this.highlight.getColumnHighlights(), function (highlight) {
|
350
379
|
return void highlight.clear();
|
351
380
|
});
|
352
381
|
}
|
353
382
|
this.highlight.useLayerLevel(layerLevel);
|
354
|
-
var areaHighlight = this.highlight.
|
355
|
-
var
|
356
|
-
var
|
383
|
+
var areaHighlight = this.highlight.createArea();
|
384
|
+
var layeredAreaHighlight = this.highlight.createLayeredArea();
|
385
|
+
var rowHeaderHighlight = this.highlight.createRowHeader();
|
386
|
+
var columnHeaderHighlight = this.highlight.createColumnHeader();
|
387
|
+
var activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
|
388
|
+
var activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
|
389
|
+
var activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
|
390
|
+
var rowHighlight = this.highlight.createRowHighlight();
|
391
|
+
var columnHighlight = this.highlight.createColumnHighlight();
|
357
392
|
areaHighlight.clear();
|
358
|
-
|
359
|
-
|
393
|
+
layeredAreaHighlight.clear();
|
394
|
+
rowHeaderHighlight.clear();
|
395
|
+
columnHeaderHighlight.clear();
|
396
|
+
activeRowHeaderHighlight.clear();
|
397
|
+
activeColumnHeaderHighlight.clear();
|
398
|
+
activeCornerHeaderHighlight.clear();
|
399
|
+
rowHighlight.clear();
|
400
|
+
columnHighlight.clear();
|
360
401
|
if (this.highlight.isEnabledFor(AREA_TYPE, cellRange.highlight) && (this.isMultiple() || layerLevel >= 1)) {
|
361
402
|
areaHighlight.add(cellRange.from).add(cellRange.to).commit();
|
403
|
+
layeredAreaHighlight.add(cellRange.from).add(cellRange.to).commit();
|
362
404
|
if (layerLevel === 1) {
|
363
405
|
// For single cell selection in the same layer, we do not create area selection to prevent blue background.
|
364
406
|
// When non-consecutive selection is performed we have to add that missing area selection to the previous layer
|
365
407
|
// based on previous coordinates. It only occurs when the previous selection wasn't select multiple cells.
|
366
408
|
var previousRange = this.selectedRange.previous();
|
367
|
-
this.highlight.useLayerLevel(layerLevel - 1)
|
409
|
+
this.highlight.useLayerLevel(layerLevel - 1);
|
410
|
+
this.highlight.createArea().add(previousRange.from).commit()
|
411
|
+
// Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
|
412
|
+
.syncWith(previousRange);
|
413
|
+
this.highlight.createLayeredArea().add(previousRange.from).commit()
|
368
414
|
// Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
|
369
415
|
.syncWith(previousRange);
|
370
416
|
this.highlight.useLayerLevel(layerLevel);
|
371
417
|
}
|
372
418
|
}
|
373
419
|
if (this.highlight.isEnabledFor(HEADER_TYPE, cellRange.highlight)) {
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
}
|
390
|
-
if (this.settings.selectionMode === 'single') {
|
391
|
-
if (this.isSelectedByAnyHeader()) {
|
392
|
-
headerCellRange.from.normalize();
|
420
|
+
if (!cellRange.isSingleHeader()) {
|
421
|
+
var rowCoordsFrom = this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), -1);
|
422
|
+
var rowCoordsTo = this.tableProps.createCellCoords(cellRange.to.row, -1);
|
423
|
+
var columnCoordsFrom = this.tableProps.createCellCoords(-1, Math.max(cellRange.from.col, 0));
|
424
|
+
var columnCoordsTo = this.tableProps.createCellCoords(-1, cellRange.to.col);
|
425
|
+
if (this.settings.selectionMode === 'single') {
|
426
|
+
rowHeaderHighlight.add(rowCoordsFrom).commit();
|
427
|
+
columnHeaderHighlight.add(columnCoordsFrom).commit();
|
428
|
+
rowHighlight.add(rowCoordsFrom).commit();
|
429
|
+
columnHighlight.add(columnCoordsFrom).commit();
|
430
|
+
} else {
|
431
|
+
rowHeaderHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
|
432
|
+
columnHeaderHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
|
433
|
+
rowHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
|
434
|
+
columnHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
|
393
435
|
}
|
394
|
-
headerHighlight.add(headerCellRange.from).commit();
|
395
|
-
} else {
|
396
|
-
headerHighlight.add(headerCellRange.from).add(headerCellRange.to).commit();
|
397
436
|
}
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
if (isRowSelected) {
|
403
|
-
activeHeaderHighlight.add(this.tableProps.createCellCoords(cellRange.from.row, -1)).add(this.tableProps.createCellCoords(cellRange.to.row, -1)).commit();
|
404
|
-
}
|
437
|
+
var highlightRowHeaders = this.isEntireRowSelected() && (countCols > 0 && countCols === cellRange.getWidth() || countCols === 0 && (this.isSelectedByRowHeader() || this.isSelectedByCorner()));
|
438
|
+
var highlightColumnHeaders = this.isEntireColumnSelected() && (countRows > 0 && countRows === cellRange.getHeight() || countRows === 0 && (this.isSelectedByColumnHeader() || this.isSelectedByCorner()));
|
439
|
+
if (highlightRowHeaders) {
|
440
|
+
activeRowHeaderHighlight.add(this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), Math.min(-this.tableProps.countRowHeaders(), -1))).add(this.tableProps.createCellCoords(Math.max(cellRange.to.row, 0), -1)).commit();
|
405
441
|
}
|
406
|
-
if (
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
activeHeaderHighlight.add(this.tableProps.createCellCoords(-1, cellRange.from.col)).add(this.tableProps.createCellCoords(-1, cellRange.to.col)).commit();
|
412
|
-
}
|
442
|
+
if (highlightColumnHeaders) {
|
443
|
+
activeColumnHeaderHighlight.add(this.tableProps.createCellCoords(Math.min(-this.tableProps.countColHeaders(), -1), Math.max(cellRange.from.col, 0))).add(this.tableProps.createCellCoords(-1, Math.max(cellRange.to.col, 0))).commit();
|
444
|
+
}
|
445
|
+
if (highlightRowHeaders && highlightColumnHeaders) {
|
446
|
+
activeCornerHeaderHighlight.add(this.tableProps.createCellCoords(-this.tableProps.countColHeaders(), -this.tableProps.countRowHeaders())).add(this.tableProps.createCellCoords(-1, -1)).commit();
|
413
447
|
}
|
414
448
|
}
|
415
449
|
this.runLocalHooks('afterSetRangeEnd', coords);
|
@@ -434,14 +468,14 @@ var Selection = /*#__PURE__*/function () {
|
|
434
468
|
*
|
435
469
|
* @param {number} rowDelta Rows number to move, value can be passed as negative number.
|
436
470
|
* @param {number} colDelta Columns number to move, value can be passed as negative number.
|
437
|
-
* @param {boolean} [
|
438
|
-
*
|
471
|
+
* @param {boolean} [createMissingRecords=false] If `true` the new rows/columns will be created if necessary.
|
472
|
+
* Otherwise, row/column will be created according to `minSpareRows/minSpareCols` settings of Handsontable.
|
439
473
|
*/
|
440
474
|
}, {
|
441
475
|
key: "transformStart",
|
442
476
|
value: function transformStart(rowDelta, colDelta) {
|
443
|
-
var
|
444
|
-
this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta,
|
477
|
+
var createMissingRecords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
478
|
+
this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, createMissingRecords));
|
445
479
|
}
|
446
480
|
|
447
481
|
/**
|
@@ -490,7 +524,7 @@ var Selection = /*#__PURE__*/function () {
|
|
490
524
|
key: "isSelectedByRowHeader",
|
491
525
|
value: function isSelectedByRowHeader() {
|
492
526
|
var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
|
493
|
-
return !this.isSelectedByCorner(layerLevel) && this.
|
527
|
+
return !this.isSelectedByCorner(layerLevel) && (layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel));
|
494
528
|
}
|
495
529
|
|
496
530
|
/**
|
@@ -503,8 +537,22 @@ var Selection = /*#__PURE__*/function () {
|
|
503
537
|
}, {
|
504
538
|
key: "isEntireRowSelected",
|
505
539
|
value: function isEntireRowSelected() {
|
540
|
+
var _this2 = this;
|
506
541
|
var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
|
507
|
-
|
542
|
+
var tester = function tester(range) {
|
543
|
+
var _range$getOuterTopSta = range.getOuterTopStartCorner(),
|
544
|
+
col = _range$getOuterTopSta.col;
|
545
|
+
var rowHeaders = _this2.tableProps.countRowHeaders();
|
546
|
+
var countCols = _this2.tableProps.countCols();
|
547
|
+
return (rowHeaders > 0 && col < 0 || rowHeaders === 0) && range.getWidth() === countCols;
|
548
|
+
};
|
549
|
+
if (layerLevel === -1) {
|
550
|
+
return Array.from(this.selectedRange).some(function (range) {
|
551
|
+
return tester(range);
|
552
|
+
});
|
553
|
+
}
|
554
|
+
var range = this.selectedRange.peekByIndex(layerLevel);
|
555
|
+
return range ? tester(range) : false;
|
508
556
|
}
|
509
557
|
|
510
558
|
/**
|
@@ -519,7 +567,7 @@ var Selection = /*#__PURE__*/function () {
|
|
519
567
|
key: "isSelectedByColumnHeader",
|
520
568
|
value: function isSelectedByColumnHeader() {
|
521
569
|
var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
|
522
|
-
return !this.isSelectedByCorner() && this.
|
570
|
+
return !this.isSelectedByCorner() && (layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel));
|
523
571
|
}
|
524
572
|
|
525
573
|
/**
|
@@ -532,8 +580,22 @@ var Selection = /*#__PURE__*/function () {
|
|
532
580
|
}, {
|
533
581
|
key: "isEntireColumnSelected",
|
534
582
|
value: function isEntireColumnSelected() {
|
583
|
+
var _this3 = this;
|
535
584
|
var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
|
536
|
-
|
585
|
+
var tester = function tester(range) {
|
586
|
+
var _range$getOuterTopSta2 = range.getOuterTopStartCorner(),
|
587
|
+
row = _range$getOuterTopSta2.row;
|
588
|
+
var colHeaders = _this3.tableProps.countColHeaders();
|
589
|
+
var countRows = _this3.tableProps.countRows();
|
590
|
+
return (colHeaders > 0 && row < 0 || colHeaders === 0) && range.getHeight() === countRows;
|
591
|
+
};
|
592
|
+
if (layerLevel === -1) {
|
593
|
+
return Array.from(this.selectedRange).some(function (range) {
|
594
|
+
return tester(range);
|
595
|
+
});
|
596
|
+
}
|
597
|
+
var range = this.selectedRange.peekByIndex(layerLevel);
|
598
|
+
return range ? tester(range) : false;
|
537
599
|
}
|
538
600
|
|
539
601
|
/**
|
@@ -555,7 +617,7 @@ var Selection = /*#__PURE__*/function () {
|
|
555
617
|
}, {
|
556
618
|
key: "isSelectedByCorner",
|
557
619
|
value: function isSelectedByCorner() {
|
558
|
-
return this.
|
620
|
+
return this.selectedByColumnHeader.has(this.getLayerLevel()) && this.selectedByRowHeader.has(this.getLayerLevel());
|
559
621
|
}
|
560
622
|
|
561
623
|
/**
|
@@ -624,31 +686,49 @@ var Selection = /*#__PURE__*/function () {
|
|
624
686
|
}
|
625
687
|
|
626
688
|
/**
|
627
|
-
*
|
689
|
+
* Selects all cells and headers.
|
628
690
|
*
|
629
|
-
* @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,
|
630
|
-
* otherwise.
|
631
|
-
* @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
|
632
|
-
* otherwise.
|
691
|
+
* @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,
|
692
|
+
* `false` otherwise.
|
693
|
+
* @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
|
694
|
+
* headers, `false` otherwise.
|
695
|
+
* @param {{row: number, col: number}} [focusPosition] The argument allows changing the cell/header
|
696
|
+
* focus position. The value takes an object with a `row` and `col` properties from -N to N, where
|
697
|
+
* negative values point to the headers and positive values point to the cell range.
|
633
698
|
*/
|
634
699
|
}, {
|
635
700
|
key: "selectAll",
|
636
701
|
value: function selectAll() {
|
637
702
|
var includeRowHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
638
703
|
var includeColumnHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
704
|
+
var focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
|
705
|
+
row: this.tableProps.countRowHeaders() > 0 ? -this.tableProps.countRowHeaders() : 0,
|
706
|
+
col: this.tableProps.countColHeaders() > 0 ? -this.tableProps.countColHeaders() : 0
|
707
|
+
};
|
639
708
|
var nrOfRows = this.tableProps.countRows();
|
640
709
|
var nrOfColumns = this.tableProps.countCols();
|
710
|
+
var countRowHeaders = this.tableProps.countRowHeaders();
|
711
|
+
var countColHeaders = this.tableProps.countColHeaders();
|
712
|
+
var rowFrom = includeRowHeaders ? -countColHeaders : 0;
|
713
|
+
var columnFrom = includeColumnHeaders ? -countRowHeaders : 0;
|
641
714
|
|
642
715
|
// We can't select cells when there is no data.
|
643
|
-
if (
|
716
|
+
if (rowFrom === 0 && columnFrom === 0 && (nrOfRows === 0 || nrOfColumns === 0)) {
|
644
717
|
return;
|
645
718
|
}
|
646
|
-
var
|
719
|
+
var highlightRow = Number.isInteger(focusPosition.row) ? focusPosition.row : 0;
|
720
|
+
var highlightColumn = Number.isInteger(focusPosition.col) ? focusPosition.col : 0;
|
721
|
+
var startCoords = this.tableProps.createCellCoords(rowFrom, columnFrom);
|
722
|
+
var highlight = this.tableProps.createCellCoords(clamp(highlightRow, rowFrom, nrOfRows - 1), clamp(highlightColumn, columnFrom, nrOfColumns - 1));
|
647
723
|
var endCoords = this.tableProps.createCellCoords(nrOfRows - 1, nrOfColumns - 1);
|
648
724
|
this.clear();
|
649
|
-
this.setRangeStartOnly(startCoords);
|
650
|
-
|
651
|
-
|
725
|
+
this.setRangeStartOnly(startCoords, void 0, highlight);
|
726
|
+
if (columnFrom < 0) {
|
727
|
+
this.selectedByRowHeader.add(this.getLayerLevel());
|
728
|
+
}
|
729
|
+
if (rowFrom < 0) {
|
730
|
+
this.selectedByColumnHeader.add(this.getLayerLevel());
|
731
|
+
}
|
652
732
|
this.setRangeEnd(endCoords);
|
653
733
|
this.finish();
|
654
734
|
}
|
@@ -665,7 +745,7 @@ var Selection = /*#__PURE__*/function () {
|
|
665
745
|
}, {
|
666
746
|
key: "selectCells",
|
667
747
|
value: function selectCells(selectionRanges) {
|
668
|
-
var
|
748
|
+
var _this4 = this;
|
669
749
|
var selectionType = detectSelectionType(selectionRanges);
|
670
750
|
if (selectionType === SELECTION_TYPE_EMPTY) {
|
671
751
|
return false;
|
@@ -674,36 +754,33 @@ var Selection = /*#__PURE__*/function () {
|
|
674
754
|
}
|
675
755
|
var selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {
|
676
756
|
propToCol: function propToCol(prop) {
|
677
|
-
return
|
757
|
+
return _this4.tableProps.propToCol(prop);
|
678
758
|
},
|
679
759
|
keepDirection: true
|
680
760
|
});
|
681
|
-
var
|
682
|
-
var
|
761
|
+
var navigableHeaders = this.settings.navigableHeaders;
|
762
|
+
var tableParams = {
|
763
|
+
countRows: this.tableProps.countRows(),
|
764
|
+
countCols: this.tableProps.countCols(),
|
765
|
+
countRowHeaders: navigableHeaders ? this.tableProps.countRowHeaders() : 0,
|
766
|
+
countColHeaders: navigableHeaders ? this.tableProps.countColHeaders() : 0
|
767
|
+
};
|
683
768
|
|
684
769
|
// Check if every layer of the coordinates are valid.
|
685
770
|
var isValid = !selectionRanges.some(function (selection) {
|
686
|
-
var
|
687
|
-
|
688
|
-
|
689
|
-
columnStart = _selectionSchemaNorma2[1],
|
690
|
-
rowEnd = _selectionSchemaNorma2[2],
|
691
|
-
columnEnd = _selectionSchemaNorma2[3];
|
692
|
-
var _isValid = isValidCoord(rowStart, nrOfRows) && isValidCoord(columnStart, nrOfColumns) && isValidCoord(rowEnd, nrOfRows) && isValidCoord(columnEnd, nrOfColumns);
|
693
|
-
return !_isValid;
|
771
|
+
var cellRange = selectionSchemaNormalizer(selection);
|
772
|
+
var rangeValidity = cellRange.isValid(tableParams);
|
773
|
+
return !(rangeValidity && !cellRange.containsHeaders() || rangeValidity && cellRange.containsHeaders() && cellRange.isSingleHeader());
|
694
774
|
});
|
695
775
|
if (isValid) {
|
696
776
|
this.clear();
|
697
777
|
arrayEach(selectionRanges, function (selection) {
|
698
|
-
var
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
_this2.setRangeStartOnly(_this2.tableProps.createCellCoords(rowStart, columnStart), false);
|
705
|
-
_this2.setRangeEnd(_this2.tableProps.createCellCoords(rowEnd, columnEnd));
|
706
|
-
_this2.finish();
|
778
|
+
var _selectionSchemaNorma = selectionSchemaNormalizer(selection),
|
779
|
+
from = _selectionSchemaNorma.from,
|
780
|
+
to = _selectionSchemaNorma.to;
|
781
|
+
_this4.setRangeStartOnly(from.clone(), false);
|
782
|
+
_this4.setRangeEnd(to.clone());
|
783
|
+
_this4.finish();
|
707
784
|
});
|
708
785
|
}
|
709
786
|
return isValid;
|
@@ -715,24 +792,45 @@ var Selection = /*#__PURE__*/function () {
|
|
715
792
|
*
|
716
793
|
* @param {number|string} startColumn Visual column index or column property from which the selection starts.
|
717
794
|
* @param {number|string} [endColumn] Visual column index or column property from to the selection finishes.
|
718
|
-
* @param {number} [
|
719
|
-
*
|
720
|
-
*
|
795
|
+
* @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
|
796
|
+
* The value can take visual row index from -N to N, where negative values
|
797
|
+
* point to the headers and positive values point to the cell range.
|
721
798
|
* @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
|
722
799
|
*/
|
723
800
|
}, {
|
724
801
|
key: "selectColumns",
|
725
802
|
value: function selectColumns(startColumn) {
|
726
803
|
var endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;
|
727
|
-
var
|
804
|
+
var focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
728
805
|
var start = typeof startColumn === 'string' ? this.tableProps.propToCol(startColumn) : startColumn;
|
729
806
|
var end = typeof endColumn === 'string' ? this.tableProps.propToCol(endColumn) : endColumn;
|
730
|
-
var
|
731
|
-
var
|
732
|
-
var
|
807
|
+
var countRows = this.tableProps.countRows();
|
808
|
+
var countCols = this.tableProps.countCols();
|
809
|
+
var countColHeaders = this.tableProps.countColHeaders();
|
810
|
+
var columnHeaderLastIndex = countColHeaders === 0 ? 0 : -countColHeaders;
|
811
|
+
var fromCoords = new CellCoords(columnHeaderLastIndex, start);
|
812
|
+
var toCoords = new CellCoords(countRows - 1, end);
|
813
|
+
var isValid = new CellRange(fromCoords, fromCoords, toCoords).isValid({
|
814
|
+
countRows: countRows,
|
815
|
+
countCols: countCols,
|
816
|
+
countRowHeaders: 0,
|
817
|
+
countColHeaders: countColHeaders
|
818
|
+
});
|
733
819
|
if (isValid) {
|
734
|
-
|
735
|
-
|
820
|
+
var fromRow = countColHeaders === 0 ? 0 : clamp(focusPosition, columnHeaderLastIndex, -1);
|
821
|
+
var toRow = countRows - 1;
|
822
|
+
var from = this.tableProps.createCellCoords(fromRow, start);
|
823
|
+
var to = this.tableProps.createCellCoords(toRow, end);
|
824
|
+
var highlight = this.tableProps.createCellCoords(clamp(focusPosition, columnHeaderLastIndex, countRows - 1), start);
|
825
|
+
this.runLocalHooks('beforeSelectColumns', from, to, highlight);
|
826
|
+
|
827
|
+
// disallow modifying row axis for that hooks
|
828
|
+
from.row = fromRow;
|
829
|
+
to.row = toRow;
|
830
|
+
this.setRangeStartOnly(from, void 0, highlight);
|
831
|
+
this.selectedByColumnHeader.add(this.getLayerLevel());
|
832
|
+
this.setRangeEnd(to);
|
833
|
+
this.runLocalHooks('afterSelectColumns', from, to, highlight);
|
736
834
|
this.finish();
|
737
835
|
}
|
738
836
|
return isValid;
|
@@ -743,22 +841,43 @@ var Selection = /*#__PURE__*/function () {
|
|
743
841
|
*
|
744
842
|
* @param {number} startRow Visual row index from which the selection starts.
|
745
843
|
* @param {number} [endRow] Visual row index from to the selection finishes.
|
746
|
-
* @param {number} [
|
747
|
-
*
|
748
|
-
*
|
844
|
+
* @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
|
845
|
+
* The value can take visual column index from -N to N, where negative values
|
846
|
+
* point to the headers and positive values point to the cell range.
|
749
847
|
* @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
|
750
848
|
*/
|
751
849
|
}, {
|
752
850
|
key: "selectRows",
|
753
851
|
value: function selectRows(startRow) {
|
754
852
|
var endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;
|
755
|
-
var
|
756
|
-
var
|
757
|
-
var
|
758
|
-
var
|
853
|
+
var focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
854
|
+
var countRows = this.tableProps.countRows();
|
855
|
+
var countCols = this.tableProps.countCols();
|
856
|
+
var countRowHeaders = this.tableProps.countRowHeaders();
|
857
|
+
var rowHeaderLastIndex = countRowHeaders === 0 ? 0 : -countRowHeaders;
|
858
|
+
var fromCoords = new CellCoords(startRow, rowHeaderLastIndex);
|
859
|
+
var toCoords = new CellCoords(endRow, countCols - 1);
|
860
|
+
var isValid = new CellRange(fromCoords, fromCoords, toCoords).isValid({
|
861
|
+
countRows: countRows,
|
862
|
+
countCols: countCols,
|
863
|
+
countRowHeaders: countRowHeaders,
|
864
|
+
countColHeaders: 0
|
865
|
+
});
|
759
866
|
if (isValid) {
|
760
|
-
|
761
|
-
|
867
|
+
var fromColumn = countRowHeaders === 0 ? 0 : clamp(focusPosition, rowHeaderLastIndex, -1);
|
868
|
+
var toColumn = countCols - 1;
|
869
|
+
var from = this.tableProps.createCellCoords(startRow, fromColumn);
|
870
|
+
var to = this.tableProps.createCellCoords(endRow, toColumn);
|
871
|
+
var highlight = this.tableProps.createCellCoords(startRow, clamp(focusPosition, rowHeaderLastIndex, countCols - 1));
|
872
|
+
this.runLocalHooks('beforeSelectRows', from, to, highlight);
|
873
|
+
|
874
|
+
// disallow modifying column axis for that hooks
|
875
|
+
from.col = fromColumn;
|
876
|
+
to.col = toColumn;
|
877
|
+
this.setRangeStartOnly(from, void 0, highlight);
|
878
|
+
this.selectedByRowHeader.add(this.getLayerLevel());
|
879
|
+
this.setRangeEnd(to);
|
880
|
+
this.runLocalHooks('afterSelectRows', from, to, highlight);
|
762
881
|
this.finish();
|
763
882
|
}
|
764
883
|
return isValid;
|
@@ -777,19 +896,31 @@ var Selection = /*#__PURE__*/function () {
|
|
777
896
|
if (!this.isSelected()) {
|
778
897
|
return;
|
779
898
|
}
|
780
|
-
var
|
899
|
+
var focusHighlight = this.highlight.getFocus();
|
781
900
|
var currentLayer = this.getLayerLevel();
|
782
|
-
|
901
|
+
focusHighlight.commit().syncWith(this.selectedRange.current());
|
783
902
|
|
784
903
|
// Rewriting rendered ranges going through all layers.
|
785
904
|
for (var layerLevel = 0; layerLevel < this.selectedRange.size(); layerLevel += 1) {
|
786
905
|
this.highlight.useLayerLevel(layerLevel);
|
787
|
-
var areaHighlight = this.highlight.
|
788
|
-
var
|
789
|
-
var
|
906
|
+
var areaHighlight = this.highlight.createArea();
|
907
|
+
var areaLayeredHighlight = this.highlight.createLayeredArea();
|
908
|
+
var rowHeaderHighlight = this.highlight.createRowHeader();
|
909
|
+
var columnHeaderHighlight = this.highlight.createColumnHeader();
|
910
|
+
var activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
|
911
|
+
var activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
|
912
|
+
var activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
|
913
|
+
var rowHighlight = this.highlight.createRowHighlight();
|
914
|
+
var columnHighlight = this.highlight.createColumnHighlight();
|
790
915
|
areaHighlight.commit();
|
791
|
-
|
792
|
-
|
916
|
+
areaLayeredHighlight.commit();
|
917
|
+
rowHeaderHighlight.commit();
|
918
|
+
columnHeaderHighlight.commit();
|
919
|
+
activeRowHeaderHighlight.commit();
|
920
|
+
activeColumnHeaderHighlight.commit();
|
921
|
+
activeCornerHeaderHighlight.commit();
|
922
|
+
rowHighlight.commit();
|
923
|
+
columnHighlight.commit();
|
793
924
|
}
|
794
925
|
|
795
926
|
// Reverting starting layer for the Highlight.
|