handsontable 0.0.0-next-ecc62fd-20230525 → 0.0.0-next-93e34dc-20230601
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 +82 -300
- package/core.mjs +82 -300
- 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 +12245 -9953
- package/dist/handsontable.full.min.css +3 -3
- package/dist/handsontable.full.min.js +120 -120
- package/dist/handsontable.js +15898 -13606
- package/dist/handsontable.min.css +3 -3
- package/dist/handsontable.min.js +4 -4
- package/editorManager.js +20 -82
- package/editorManager.mjs +25 -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.js +1 -1
- package/pluginHooks.mjs +1 -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 +89 -9
- package/plugins/nestedHeaders/nestedHeaders.mjs +89 -9
- 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 +23 -28
- package/selection/highlight/visualSelection.mjs +23 -28
- 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 +296 -180
- package/selection/selection.mjs +291 -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 +24 -0
- package/shortcutContexts/commands/extendCellsSelection/index.mjs +20 -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/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/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 +232 -0
- package/shortcutContexts/grid.mjs +228 -0
- package/shortcutContexts/index.js +29 -0
- package/shortcutContexts/index.mjs +15 -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();
|
146
136
|
},
|
147
|
-
|
148
|
-
return _this.tableProps.
|
137
|
+
countRenderableColumns: function countRenderableColumns() {
|
138
|
+
return _this.tableProps.countRenderableColumns();
|
139
|
+
},
|
140
|
+
countRowHeaders: function countRowHeaders() {
|
141
|
+
return _this.tableProps.countRowHeaders();
|
142
|
+
},
|
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
|
},
|
@@ -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) {
|
347
370
|
return void highlight.clear();
|
348
371
|
});
|
349
|
-
arrayEach(this.highlight.
|
372
|
+
arrayEach(this.highlight.getActiveCornerHeaders(), function (highlight) {
|
373
|
+
return void highlight.clear();
|
374
|
+
});
|
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,48 @@ var Selection = /*#__PURE__*/function () {
|
|
624
686
|
}
|
625
687
|
|
626
688
|
/**
|
627
|
-
*
|
689
|
+
* Selects all cells and headers.
|
628
690
|
*
|
629
|
-
* @param {boolean} [
|
630
|
-
*
|
631
|
-
*
|
632
|
-
*
|
691
|
+
* @param {number|boolean} [rowHeaderLevel=false] If passed as `true`, it selects all row headers.
|
692
|
+
* If a value is passed as a number (from -1 to -N), then it additionally allows moving the cell
|
693
|
+
* focus (highlight) to the header (available when the `navigableHeaders` is enabled).
|
694
|
+
* @param {number|boolean} [columnHeaderLevel=false] If passed as `true`, it selects all column headers.
|
695
|
+
* If a value is passed as a number (from -1 to -N), then it additionally allows moving the cell
|
696
|
+
* focus (highlight) to the header (available when the `navigableHeaders` is enabled).
|
633
697
|
*/
|
634
698
|
}, {
|
635
699
|
key: "selectAll",
|
636
700
|
value: function selectAll() {
|
637
|
-
var
|
638
|
-
var
|
701
|
+
var rowHeaderLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
702
|
+
var columnHeaderLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
639
703
|
var nrOfRows = this.tableProps.countRows();
|
640
704
|
var nrOfColumns = this.tableProps.countCols();
|
705
|
+
var countRowHeaders = this.tableProps.countRowHeaders();
|
706
|
+
var countColHeaders = this.tableProps.countColHeaders();
|
707
|
+
var rowFrom = rowHeaderLevel ? -countColHeaders : 0;
|
708
|
+
if (Number.isInteger(rowHeaderLevel)) {
|
709
|
+
rowFrom = clamp(rowHeaderLevel, -countColHeaders, -1);
|
710
|
+
}
|
711
|
+
var columnFrom = columnHeaderLevel ? -countRowHeaders : 0;
|
712
|
+
if (Number.isInteger(columnHeaderLevel)) {
|
713
|
+
columnFrom = clamp(columnHeaderLevel, -countRowHeaders, -1);
|
714
|
+
}
|
641
715
|
|
642
716
|
// We can't select cells when there is no data.
|
643
|
-
if (
|
717
|
+
if (rowFrom === 0 && columnFrom === 0 && (nrOfRows === 0 || nrOfColumns === 0)) {
|
644
718
|
return;
|
645
719
|
}
|
646
|
-
var startCoords = this.tableProps.createCellCoords(
|
720
|
+
var startCoords = this.tableProps.createCellCoords(rowFrom < 0 ? -countColHeaders : 0, columnFrom < 0 ? -countRowHeaders : 0);
|
721
|
+
var highlight = this.tableProps.createCellCoords(rowFrom, columnFrom);
|
647
722
|
var endCoords = this.tableProps.createCellCoords(nrOfRows - 1, nrOfColumns - 1);
|
648
723
|
this.clear();
|
649
|
-
this.setRangeStartOnly(startCoords);
|
650
|
-
|
651
|
-
|
724
|
+
this.setRangeStartOnly(startCoords, void 0, highlight);
|
725
|
+
if (columnFrom < 0) {
|
726
|
+
this.selectedByRowHeader.add(this.getLayerLevel());
|
727
|
+
}
|
728
|
+
if (rowFrom < 0) {
|
729
|
+
this.selectedByColumnHeader.add(this.getLayerLevel());
|
730
|
+
}
|
652
731
|
this.setRangeEnd(endCoords);
|
653
732
|
this.finish();
|
654
733
|
}
|
@@ -665,7 +744,7 @@ var Selection = /*#__PURE__*/function () {
|
|
665
744
|
}, {
|
666
745
|
key: "selectCells",
|
667
746
|
value: function selectCells(selectionRanges) {
|
668
|
-
var
|
747
|
+
var _this4 = this;
|
669
748
|
var selectionType = detectSelectionType(selectionRanges);
|
670
749
|
if (selectionType === SELECTION_TYPE_EMPTY) {
|
671
750
|
return false;
|
@@ -674,36 +753,33 @@ var Selection = /*#__PURE__*/function () {
|
|
674
753
|
}
|
675
754
|
var selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {
|
676
755
|
propToCol: function propToCol(prop) {
|
677
|
-
return
|
756
|
+
return _this4.tableProps.propToCol(prop);
|
678
757
|
},
|
679
758
|
keepDirection: true
|
680
759
|
});
|
681
|
-
var
|
682
|
-
var
|
760
|
+
var navigableHeaders = this.settings.navigableHeaders;
|
761
|
+
var tableParams = {
|
762
|
+
countRows: this.tableProps.countRows(),
|
763
|
+
countCols: this.tableProps.countCols(),
|
764
|
+
countRowHeaders: navigableHeaders ? this.tableProps.countRowHeaders() : 0,
|
765
|
+
countColHeaders: navigableHeaders ? this.tableProps.countColHeaders() : 0
|
766
|
+
};
|
683
767
|
|
684
768
|
// Check if every layer of the coordinates are valid.
|
685
769
|
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;
|
770
|
+
var cellRange = selectionSchemaNormalizer(selection);
|
771
|
+
var rangeValidity = cellRange.isValid(tableParams);
|
772
|
+
return !(rangeValidity && !cellRange.containsHeaders() || rangeValidity && cellRange.containsHeaders() && cellRange.isSingleHeader());
|
694
773
|
});
|
695
774
|
if (isValid) {
|
696
775
|
this.clear();
|
697
776
|
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();
|
777
|
+
var _selectionSchemaNorma = selectionSchemaNormalizer(selection),
|
778
|
+
from = _selectionSchemaNorma.from,
|
779
|
+
to = _selectionSchemaNorma.to;
|
780
|
+
_this4.setRangeStartOnly(from.clone(), false);
|
781
|
+
_this4.setRangeEnd(to.clone());
|
782
|
+
_this4.finish();
|
707
783
|
});
|
708
784
|
}
|
709
785
|
return isValid;
|
@@ -715,24 +791,36 @@ var Selection = /*#__PURE__*/function () {
|
|
715
791
|
*
|
716
792
|
* @param {number|string} startColumn Visual column index or column property from which the selection starts.
|
717
793
|
* @param {number|string} [endColumn] Visual column index or column property from to the selection finishes.
|
718
|
-
* @param {number} [headerLevel
|
719
|
-
*
|
720
|
-
*
|
794
|
+
* @param {number} [headerLevel=0] The header level allows changing the cell/header highlight position. The value can
|
795
|
+
* take 0 to -N, where 0 means highlighting the cell nearest the column header, -1
|
796
|
+
* means the highlighting header starting from the header closest to the cells.
|
721
797
|
* @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
|
722
798
|
*/
|
723
799
|
}, {
|
724
800
|
key: "selectColumns",
|
725
801
|
value: function selectColumns(startColumn) {
|
726
802
|
var endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;
|
727
|
-
var headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] :
|
803
|
+
var headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
728
804
|
var start = typeof startColumn === 'string' ? this.tableProps.propToCol(startColumn) : startColumn;
|
729
805
|
var end = typeof endColumn === 'string' ? this.tableProps.propToCol(endColumn) : endColumn;
|
730
|
-
var
|
731
|
-
var
|
732
|
-
var
|
806
|
+
var countRows = this.tableProps.countRows();
|
807
|
+
var countCols = this.tableProps.countCols();
|
808
|
+
var countColHeaders = this.tableProps.countColHeaders();
|
809
|
+
var columnHeaderLastIndex = countColHeaders === 0 ? 0 : -countColHeaders;
|
810
|
+
var fromCoords = new CellCoords(columnHeaderLastIndex, start);
|
811
|
+
var toCoords = new CellCoords(countRows - 1, end);
|
812
|
+
var isValid = new CellRange(fromCoords, fromCoords, toCoords).isValid({
|
813
|
+
countRows: countRows,
|
814
|
+
countCols: countCols,
|
815
|
+
countRowHeaders: 0,
|
816
|
+
countColHeaders: countColHeaders
|
817
|
+
});
|
733
818
|
if (isValid) {
|
734
|
-
this.
|
735
|
-
this.
|
819
|
+
var from = this.tableProps.createCellCoords(countColHeaders === 0 ? 0 : clamp(headerLevel, columnHeaderLastIndex, -1), start);
|
820
|
+
var highlight = this.tableProps.createCellCoords(clamp(headerLevel, columnHeaderLastIndex, 0), start);
|
821
|
+
this.setRangeStartOnly(from, void 0, highlight);
|
822
|
+
this.selectedByColumnHeader.add(this.getLayerLevel());
|
823
|
+
this.setRangeEnd(this.tableProps.createCellCoords(countRows - 1, end));
|
736
824
|
this.finish();
|
737
825
|
}
|
738
826
|
return isValid;
|
@@ -743,22 +831,34 @@ var Selection = /*#__PURE__*/function () {
|
|
743
831
|
*
|
744
832
|
* @param {number} startRow Visual row index from which the selection starts.
|
745
833
|
* @param {number} [endRow] Visual row index from to the selection finishes.
|
746
|
-
* @param {number} [headerLevel
|
747
|
-
*
|
748
|
-
*
|
834
|
+
* @param {number} [headerLevel=0] The header level allows changing the cell/header highlight position. The value can
|
835
|
+
* take 0 to -N, where 0 means highlighting the cell nearest the row header, -1
|
836
|
+
* means the highlighting header starting from the header closest to the cells.
|
749
837
|
* @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
|
750
838
|
*/
|
751
839
|
}, {
|
752
840
|
key: "selectRows",
|
753
841
|
value: function selectRows(startRow) {
|
754
842
|
var endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;
|
755
|
-
var headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] :
|
756
|
-
var
|
757
|
-
var
|
758
|
-
var
|
843
|
+
var headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
844
|
+
var countRows = this.tableProps.countRows();
|
845
|
+
var countCols = this.tableProps.countCols();
|
846
|
+
var countRowHeaders = this.tableProps.countRowHeaders();
|
847
|
+
var rowHeaderLastIndex = countRowHeaders === 0 ? 0 : -countRowHeaders;
|
848
|
+
var fromCoords = new CellCoords(startRow, rowHeaderLastIndex);
|
849
|
+
var toCoords = new CellCoords(endRow, countCols - 1);
|
850
|
+
var isValid = new CellRange(fromCoords, fromCoords, toCoords).isValid({
|
851
|
+
countRows: countRows,
|
852
|
+
countCols: countCols,
|
853
|
+
countRowHeaders: countRowHeaders,
|
854
|
+
countColHeaders: 0
|
855
|
+
});
|
759
856
|
if (isValid) {
|
760
|
-
this.
|
761
|
-
this.
|
857
|
+
var from = this.tableProps.createCellCoords(startRow, countRowHeaders === 0 ? 0 : clamp(headerLevel, rowHeaderLastIndex, -1));
|
858
|
+
var highlight = this.tableProps.createCellCoords(startRow, clamp(headerLevel, rowHeaderLastIndex, 0));
|
859
|
+
this.setRangeStartOnly(from, void 0, highlight);
|
860
|
+
this.selectedByRowHeader.add(this.getLayerLevel());
|
861
|
+
this.setRangeEnd(this.tableProps.createCellCoords(endRow, countCols - 1));
|
762
862
|
this.finish();
|
763
863
|
}
|
764
864
|
return isValid;
|
@@ -777,19 +877,31 @@ var Selection = /*#__PURE__*/function () {
|
|
777
877
|
if (!this.isSelected()) {
|
778
878
|
return;
|
779
879
|
}
|
780
|
-
var
|
880
|
+
var focusHighlight = this.highlight.getFocus();
|
781
881
|
var currentLayer = this.getLayerLevel();
|
782
|
-
|
882
|
+
focusHighlight.commit().syncWith(this.selectedRange.current());
|
783
883
|
|
784
884
|
// Rewriting rendered ranges going through all layers.
|
785
885
|
for (var layerLevel = 0; layerLevel < this.selectedRange.size(); layerLevel += 1) {
|
786
886
|
this.highlight.useLayerLevel(layerLevel);
|
787
|
-
var areaHighlight = this.highlight.
|
788
|
-
var
|
789
|
-
var
|
887
|
+
var areaHighlight = this.highlight.createArea();
|
888
|
+
var areaLayeredHighlight = this.highlight.createLayeredArea();
|
889
|
+
var rowHeaderHighlight = this.highlight.createRowHeader();
|
890
|
+
var columnHeaderHighlight = this.highlight.createColumnHeader();
|
891
|
+
var activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
|
892
|
+
var activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
|
893
|
+
var activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
|
894
|
+
var rowHighlight = this.highlight.createRowHighlight();
|
895
|
+
var columnHighlight = this.highlight.createColumnHighlight();
|
790
896
|
areaHighlight.commit();
|
791
|
-
|
792
|
-
|
897
|
+
areaLayeredHighlight.commit();
|
898
|
+
rowHeaderHighlight.commit();
|
899
|
+
columnHeaderHighlight.commit();
|
900
|
+
activeRowHeaderHighlight.commit();
|
901
|
+
activeColumnHeaderHighlight.commit();
|
902
|
+
activeCornerHeaderHighlight.commit();
|
903
|
+
rowHighlight.commit();
|
904
|
+
columnHighlight.commit();
|
793
905
|
}
|
794
906
|
|
795
907
|
// Reverting starting layer for the Highlight.
|