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
@@ -25,8 +25,8 @@ require("core-js/modules/es.weak-map.js");
|
|
25
25
|
require("core-js/modules/web.dom-collections.iterator.js");
|
26
26
|
var _element = require("../../helpers/dom/element");
|
27
27
|
var _number = require("../../helpers/number");
|
28
|
-
var _event = require("../../helpers/dom/event");
|
29
28
|
var _templateLiteralTag = require("../../helpers/templateLiteralTag");
|
29
|
+
var _event = require("../../helpers/dom/event");
|
30
30
|
var _console = require("../../helpers/console");
|
31
31
|
var _selection = require("../../selection");
|
32
32
|
var _base = require("../base");
|
@@ -201,6 +201,12 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
201
201
|
this.addHook('beforeOnCellMouseOver', function () {
|
202
202
|
return _this2.onBeforeOnCellMouseOver.apply(_this2, arguments);
|
203
203
|
});
|
204
|
+
this.addHook('modifyTransformStart', function () {
|
205
|
+
return _this2.onModifyTransformStart.apply(_this2, arguments);
|
206
|
+
});
|
207
|
+
this.addHook('afterSelection', function () {
|
208
|
+
return _this2.updateFocusHighlightPosition();
|
209
|
+
});
|
204
210
|
this.addHook('afterGetColumnHeaderRenderers', function (array) {
|
205
211
|
return _this2.onAfterGetColumnHeaderRenderers(array);
|
206
212
|
});
|
@@ -216,9 +222,18 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
216
222
|
this.addHook('beforeCopy', function () {
|
217
223
|
return _this2.onBeforeCopy.apply(_this2, arguments);
|
218
224
|
});
|
225
|
+
this.addHook('beforeSelectColumns', function () {
|
226
|
+
return _this2.onBeforeSelectColumns.apply(_this2, arguments);
|
227
|
+
});
|
219
228
|
this.addHook('afterViewportColumnCalculatorOverride', function () {
|
220
229
|
return _this2.onAfterViewportColumnCalculatorOverride.apply(_this2, arguments);
|
221
230
|
});
|
231
|
+
this.hot.columnIndexMapper.addLocalHook('cacheUpdated', function () {
|
232
|
+
return _this2.updateFocusHighlightPosition();
|
233
|
+
});
|
234
|
+
this.hot.rowIndexMapper.addLocalHook('cacheUpdated', function () {
|
235
|
+
return _this2.updateFocusHighlightPosition();
|
236
|
+
});
|
222
237
|
_get(_getPrototypeOf(NestedHeaders.prototype), "enablePlugin", this).call(this);
|
223
238
|
this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.
|
224
239
|
}
|
@@ -440,6 +455,34 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
440
455
|
return this.hot.getColHeader(visualColumnIndex, headerLevel);
|
441
456
|
}
|
442
457
|
|
458
|
+
/**
|
459
|
+
* Updates the selection focus highlight position to point to the nested header root element (TH)
|
460
|
+
* even when the logical coordinates point in-between the header.
|
461
|
+
*
|
462
|
+
* @private
|
463
|
+
*/
|
464
|
+
}, {
|
465
|
+
key: "updateFocusHighlightPosition",
|
466
|
+
value: function updateFocusHighlightPosition() {
|
467
|
+
var _this$hot;
|
468
|
+
var selection = (_this$hot = this.hot) === null || _this$hot === void 0 ? void 0 : _this$hot.getSelectedRangeLast();
|
469
|
+
if (!selection) {
|
470
|
+
return;
|
471
|
+
}
|
472
|
+
var highlight = selection.highlight;
|
473
|
+
var isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
|
474
|
+
if (isNestedHeadersRange) {
|
475
|
+
var columnIndex = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(highlight.row, highlight.col);
|
476
|
+
var focusHighlight = this.hot.selection.highlight.getFocus();
|
477
|
+
|
478
|
+
// Correct the highlight/focus selection to highlight the correct TH element
|
479
|
+
focusHighlight.visualCellRange.highlight.col = columnIndex;
|
480
|
+
focusHighlight.visualCellRange.from.col = columnIndex;
|
481
|
+
focusHighlight.visualCellRange.to.col = columnIndex;
|
482
|
+
focusHighlight.commit();
|
483
|
+
}
|
484
|
+
}
|
485
|
+
|
443
486
|
/**
|
444
487
|
* Allows to control which header DOM element will be used to highlight.
|
445
488
|
*
|
@@ -456,8 +499,7 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
456
499
|
if (!headerNodeData) {
|
457
500
|
return visualColumn;
|
458
501
|
}
|
459
|
-
var
|
460
|
-
columnCursor = highlightMeta.columnCursor,
|
502
|
+
var columnCursor = highlightMeta.columnCursor,
|
461
503
|
selectionType = highlightMeta.selectionType,
|
462
504
|
selectionWidth = highlightMeta.selectionWidth;
|
463
505
|
var _classPrivateFieldGet4 = _classPrivateFieldGet(this, _stateManager).getHeaderSettings(headerLevel, visualColumn),
|
@@ -469,8 +511,8 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
469
511
|
}
|
470
512
|
} else if (selectionType === _selection.ACTIVE_HEADER_TYPE) {
|
471
513
|
if (colspan > selectionWidth - columnCursor || !isRoot) {
|
472
|
-
//
|
473
|
-
|
514
|
+
// Prevents adding any CSS class names to the TH element
|
515
|
+
return null;
|
474
516
|
}
|
475
517
|
}
|
476
518
|
return visualColumn;
|
@@ -601,7 +643,7 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
601
643
|
}, {
|
602
644
|
key: "onBeforeOnCellMouseOver",
|
603
645
|
value: function onBeforeOnCellMouseOver(event, coords, TD, controller) {
|
604
|
-
var _this$
|
646
|
+
var _this$hot2;
|
605
647
|
if (!this.hot.view.isMouseDown()) {
|
606
648
|
return;
|
607
649
|
}
|
@@ -622,13 +664,93 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
622
664
|
controller.cell = true;
|
623
665
|
var columnsToSelect = [];
|
624
666
|
if (coords.col < from.col) {
|
625
|
-
columnsToSelect.push(bottomEndCoords.col, columnIndex);
|
667
|
+
columnsToSelect.push(bottomEndCoords.col, columnIndex, coords.row);
|
626
668
|
} else if (coords.col > from.col) {
|
627
|
-
columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1);
|
669
|
+
columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1, coords.row);
|
628
670
|
} else {
|
629
|
-
columnsToSelect.push(columnIndex, columnIndex + origColspan - 1);
|
671
|
+
columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, coords.row);
|
672
|
+
}
|
673
|
+
(_this$hot2 = this.hot).selectColumns.apply(_this$hot2, columnsToSelect);
|
674
|
+
}
|
675
|
+
|
676
|
+
/**
|
677
|
+
* `modifyTransformStart` hook is called every time the keyboard navigation is used.
|
678
|
+
*
|
679
|
+
* @private
|
680
|
+
* @param {object} delta The transformation delta.
|
681
|
+
*/
|
682
|
+
}, {
|
683
|
+
key: "onModifyTransformStart",
|
684
|
+
value: function onModifyTransformStart(delta) {
|
685
|
+
var _this$hot$getSelected = this.hot.getSelectedRangeLast(),
|
686
|
+
highlight = _this$hot$getSelected.highlight;
|
687
|
+
var nextCoords = this.hot._createCellCoords(highlight.row + delta.row, highlight.col + delta.col);
|
688
|
+
var isNestedHeadersRange = nextCoords.isHeader() && nextCoords.col >= 0;
|
689
|
+
if (!isNestedHeadersRange) {
|
690
|
+
return;
|
691
|
+
}
|
692
|
+
var visualColumnIndexStart = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(nextCoords.row, nextCoords.col);
|
693
|
+
var visualColumnIndexEnd = _classPrivateFieldGet(this, _stateManager).findRightMostColumnIndex(nextCoords.row, nextCoords.col);
|
694
|
+
if (delta.col < 0) {
|
695
|
+
var nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexStart - 1 : visualColumnIndexEnd;
|
696
|
+
var notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);
|
697
|
+
if (notHiddenColumnIndex === null) {
|
698
|
+
// There are no visible columns anymore, so move the selection out of the table edge. This will
|
699
|
+
// be processed by the selection Transformer class as a move selection to the previous row (if autoWrapRow is enabled).
|
700
|
+
delta.col = -this.hot.view.countRenderableColumnsInRange(0, highlight.col);
|
701
|
+
} else {
|
702
|
+
delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, highlight.col) - 1, 1);
|
703
|
+
}
|
704
|
+
} else if (delta.col > 0) {
|
705
|
+
var _nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexEnd + 1 : visualColumnIndexStart;
|
706
|
+
var _notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(_nextColumn, 1);
|
707
|
+
if (_notHiddenColumnIndex === null) {
|
708
|
+
// There are no visible columns anymore, so move the selection out of the table edge. This will
|
709
|
+
// be processed by the selection Transformer class as a move selection to the next row (if autoWrapRow is enabled).
|
710
|
+
delta.col = this.hot.view.countRenderableColumnsInRange(highlight.col, this.hot.countCols());
|
711
|
+
} else {
|
712
|
+
delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(highlight.col, _notHiddenColumnIndex) - 1, 1);
|
713
|
+
}
|
714
|
+
}
|
715
|
+
}
|
716
|
+
|
717
|
+
/**
|
718
|
+
* The hook observes the column selection from the Selection API and modifies the column range to
|
719
|
+
* ensure that the whole nested column will be covered.
|
720
|
+
*
|
721
|
+
* @private
|
722
|
+
* @param {*} from The coords object where the selection starts.
|
723
|
+
* @param {*} to The coords object where the selection ends.
|
724
|
+
*/
|
725
|
+
}, {
|
726
|
+
key: "onBeforeSelectColumns",
|
727
|
+
value: function onBeforeSelectColumns(from, to) {
|
728
|
+
var headerLevel = from.row;
|
729
|
+
var startNodeData = this._getHeaderTreeNodeDataByCoords({
|
730
|
+
row: headerLevel,
|
731
|
+
col: from.col
|
732
|
+
});
|
733
|
+
var endNodeData = this._getHeaderTreeNodeDataByCoords({
|
734
|
+
row: headerLevel,
|
735
|
+
col: to.col
|
736
|
+
});
|
737
|
+
if (to.col < from.col) {
|
738
|
+
// Column selection from right to left
|
739
|
+
if (startNodeData) {
|
740
|
+
from.col = startNodeData.columnIndex + startNodeData.origColspan - 1;
|
741
|
+
}
|
742
|
+
if (endNodeData) {
|
743
|
+
to.col = endNodeData.columnIndex;
|
744
|
+
}
|
745
|
+
} else if (to.col >= from.col) {
|
746
|
+
// Column selection from left to right or a single column selection
|
747
|
+
if (startNodeData) {
|
748
|
+
from.col = startNodeData.columnIndex;
|
749
|
+
}
|
750
|
+
if (endNodeData) {
|
751
|
+
to.col = endNodeData.columnIndex + endNodeData.origColspan - 1;
|
752
|
+
}
|
630
753
|
}
|
631
|
-
(_this$hot = this.hot).selectColumns.apply(_this$hot, columnsToSelect);
|
632
754
|
}
|
633
755
|
|
634
756
|
/**
|
@@ -45,8 +45,8 @@ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!priva
|
|
45
45
|
function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
46
46
|
import { addClass, removeClass } from "../../helpers/dom/element.mjs";
|
47
47
|
import { isNumeric } from "../../helpers/number.mjs";
|
48
|
-
import { isLeftClick, isRightClick } from "../../helpers/dom/event.mjs";
|
49
48
|
import { toSingleLine } from "../../helpers/templateLiteralTag.mjs";
|
49
|
+
import { isLeftClick, isRightClick } from "../../helpers/dom/event.mjs";
|
50
50
|
import { warn } from "../../helpers/console.mjs";
|
51
51
|
import { ACTIVE_HEADER_TYPE, HEADER_TYPE } from "../../selection/index.mjs";
|
52
52
|
import { BasePlugin } from "../base/index.mjs";
|
@@ -194,6 +194,12 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
194
194
|
this.addHook('beforeOnCellMouseOver', function () {
|
195
195
|
return _this2.onBeforeOnCellMouseOver.apply(_this2, arguments);
|
196
196
|
});
|
197
|
+
this.addHook('modifyTransformStart', function () {
|
198
|
+
return _this2.onModifyTransformStart.apply(_this2, arguments);
|
199
|
+
});
|
200
|
+
this.addHook('afterSelection', function () {
|
201
|
+
return _this2.updateFocusHighlightPosition();
|
202
|
+
});
|
197
203
|
this.addHook('afterGetColumnHeaderRenderers', function (array) {
|
198
204
|
return _this2.onAfterGetColumnHeaderRenderers(array);
|
199
205
|
});
|
@@ -209,9 +215,18 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
209
215
|
this.addHook('beforeCopy', function () {
|
210
216
|
return _this2.onBeforeCopy.apply(_this2, arguments);
|
211
217
|
});
|
218
|
+
this.addHook('beforeSelectColumns', function () {
|
219
|
+
return _this2.onBeforeSelectColumns.apply(_this2, arguments);
|
220
|
+
});
|
212
221
|
this.addHook('afterViewportColumnCalculatorOverride', function () {
|
213
222
|
return _this2.onAfterViewportColumnCalculatorOverride.apply(_this2, arguments);
|
214
223
|
});
|
224
|
+
this.hot.columnIndexMapper.addLocalHook('cacheUpdated', function () {
|
225
|
+
return _this2.updateFocusHighlightPosition();
|
226
|
+
});
|
227
|
+
this.hot.rowIndexMapper.addLocalHook('cacheUpdated', function () {
|
228
|
+
return _this2.updateFocusHighlightPosition();
|
229
|
+
});
|
215
230
|
_get(_getPrototypeOf(NestedHeaders.prototype), "enablePlugin", this).call(this);
|
216
231
|
this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.
|
217
232
|
}
|
@@ -433,6 +448,34 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
433
448
|
return this.hot.getColHeader(visualColumnIndex, headerLevel);
|
434
449
|
}
|
435
450
|
|
451
|
+
/**
|
452
|
+
* Updates the selection focus highlight position to point to the nested header root element (TH)
|
453
|
+
* even when the logical coordinates point in-between the header.
|
454
|
+
*
|
455
|
+
* @private
|
456
|
+
*/
|
457
|
+
}, {
|
458
|
+
key: "updateFocusHighlightPosition",
|
459
|
+
value: function updateFocusHighlightPosition() {
|
460
|
+
var _this$hot;
|
461
|
+
var selection = (_this$hot = this.hot) === null || _this$hot === void 0 ? void 0 : _this$hot.getSelectedRangeLast();
|
462
|
+
if (!selection) {
|
463
|
+
return;
|
464
|
+
}
|
465
|
+
var highlight = selection.highlight;
|
466
|
+
var isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
|
467
|
+
if (isNestedHeadersRange) {
|
468
|
+
var columnIndex = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(highlight.row, highlight.col);
|
469
|
+
var focusHighlight = this.hot.selection.highlight.getFocus();
|
470
|
+
|
471
|
+
// Correct the highlight/focus selection to highlight the correct TH element
|
472
|
+
focusHighlight.visualCellRange.highlight.col = columnIndex;
|
473
|
+
focusHighlight.visualCellRange.from.col = columnIndex;
|
474
|
+
focusHighlight.visualCellRange.to.col = columnIndex;
|
475
|
+
focusHighlight.commit();
|
476
|
+
}
|
477
|
+
}
|
478
|
+
|
436
479
|
/**
|
437
480
|
* Allows to control which header DOM element will be used to highlight.
|
438
481
|
*
|
@@ -449,8 +492,7 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
449
492
|
if (!headerNodeData) {
|
450
493
|
return visualColumn;
|
451
494
|
}
|
452
|
-
var
|
453
|
-
columnCursor = highlightMeta.columnCursor,
|
495
|
+
var columnCursor = highlightMeta.columnCursor,
|
454
496
|
selectionType = highlightMeta.selectionType,
|
455
497
|
selectionWidth = highlightMeta.selectionWidth;
|
456
498
|
var _classPrivateFieldGet4 = _classPrivateFieldGet(this, _stateManager).getHeaderSettings(headerLevel, visualColumn),
|
@@ -462,8 +504,8 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
462
504
|
}
|
463
505
|
} else if (selectionType === ACTIVE_HEADER_TYPE) {
|
464
506
|
if (colspan > selectionWidth - columnCursor || !isRoot) {
|
465
|
-
//
|
466
|
-
|
507
|
+
// Prevents adding any CSS class names to the TH element
|
508
|
+
return null;
|
467
509
|
}
|
468
510
|
}
|
469
511
|
return visualColumn;
|
@@ -594,7 +636,7 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
594
636
|
}, {
|
595
637
|
key: "onBeforeOnCellMouseOver",
|
596
638
|
value: function onBeforeOnCellMouseOver(event, coords, TD, controller) {
|
597
|
-
var _this$
|
639
|
+
var _this$hot2;
|
598
640
|
if (!this.hot.view.isMouseDown()) {
|
599
641
|
return;
|
600
642
|
}
|
@@ -615,13 +657,93 @@ export var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
|
|
615
657
|
controller.cell = true;
|
616
658
|
var columnsToSelect = [];
|
617
659
|
if (coords.col < from.col) {
|
618
|
-
columnsToSelect.push(bottomEndCoords.col, columnIndex);
|
660
|
+
columnsToSelect.push(bottomEndCoords.col, columnIndex, coords.row);
|
619
661
|
} else if (coords.col > from.col) {
|
620
|
-
columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1);
|
662
|
+
columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1, coords.row);
|
621
663
|
} else {
|
622
|
-
columnsToSelect.push(columnIndex, columnIndex + origColspan - 1);
|
664
|
+
columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, coords.row);
|
665
|
+
}
|
666
|
+
(_this$hot2 = this.hot).selectColumns.apply(_this$hot2, columnsToSelect);
|
667
|
+
}
|
668
|
+
|
669
|
+
/**
|
670
|
+
* `modifyTransformStart` hook is called every time the keyboard navigation is used.
|
671
|
+
*
|
672
|
+
* @private
|
673
|
+
* @param {object} delta The transformation delta.
|
674
|
+
*/
|
675
|
+
}, {
|
676
|
+
key: "onModifyTransformStart",
|
677
|
+
value: function onModifyTransformStart(delta) {
|
678
|
+
var _this$hot$getSelected = this.hot.getSelectedRangeLast(),
|
679
|
+
highlight = _this$hot$getSelected.highlight;
|
680
|
+
var nextCoords = this.hot._createCellCoords(highlight.row + delta.row, highlight.col + delta.col);
|
681
|
+
var isNestedHeadersRange = nextCoords.isHeader() && nextCoords.col >= 0;
|
682
|
+
if (!isNestedHeadersRange) {
|
683
|
+
return;
|
684
|
+
}
|
685
|
+
var visualColumnIndexStart = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(nextCoords.row, nextCoords.col);
|
686
|
+
var visualColumnIndexEnd = _classPrivateFieldGet(this, _stateManager).findRightMostColumnIndex(nextCoords.row, nextCoords.col);
|
687
|
+
if (delta.col < 0) {
|
688
|
+
var nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexStart - 1 : visualColumnIndexEnd;
|
689
|
+
var notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);
|
690
|
+
if (notHiddenColumnIndex === null) {
|
691
|
+
// There are no visible columns anymore, so move the selection out of the table edge. This will
|
692
|
+
// be processed by the selection Transformer class as a move selection to the previous row (if autoWrapRow is enabled).
|
693
|
+
delta.col = -this.hot.view.countRenderableColumnsInRange(0, highlight.col);
|
694
|
+
} else {
|
695
|
+
delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, highlight.col) - 1, 1);
|
696
|
+
}
|
697
|
+
} else if (delta.col > 0) {
|
698
|
+
var _nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexEnd + 1 : visualColumnIndexStart;
|
699
|
+
var _notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(_nextColumn, 1);
|
700
|
+
if (_notHiddenColumnIndex === null) {
|
701
|
+
// There are no visible columns anymore, so move the selection out of the table edge. This will
|
702
|
+
// be processed by the selection Transformer class as a move selection to the next row (if autoWrapRow is enabled).
|
703
|
+
delta.col = this.hot.view.countRenderableColumnsInRange(highlight.col, this.hot.countCols());
|
704
|
+
} else {
|
705
|
+
delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(highlight.col, _notHiddenColumnIndex) - 1, 1);
|
706
|
+
}
|
707
|
+
}
|
708
|
+
}
|
709
|
+
|
710
|
+
/**
|
711
|
+
* The hook observes the column selection from the Selection API and modifies the column range to
|
712
|
+
* ensure that the whole nested column will be covered.
|
713
|
+
*
|
714
|
+
* @private
|
715
|
+
* @param {*} from The coords object where the selection starts.
|
716
|
+
* @param {*} to The coords object where the selection ends.
|
717
|
+
*/
|
718
|
+
}, {
|
719
|
+
key: "onBeforeSelectColumns",
|
720
|
+
value: function onBeforeSelectColumns(from, to) {
|
721
|
+
var headerLevel = from.row;
|
722
|
+
var startNodeData = this._getHeaderTreeNodeDataByCoords({
|
723
|
+
row: headerLevel,
|
724
|
+
col: from.col
|
725
|
+
});
|
726
|
+
var endNodeData = this._getHeaderTreeNodeDataByCoords({
|
727
|
+
row: headerLevel,
|
728
|
+
col: to.col
|
729
|
+
});
|
730
|
+
if (to.col < from.col) {
|
731
|
+
// Column selection from right to left
|
732
|
+
if (startNodeData) {
|
733
|
+
from.col = startNodeData.columnIndex + startNodeData.origColspan - 1;
|
734
|
+
}
|
735
|
+
if (endNodeData) {
|
736
|
+
to.col = endNodeData.columnIndex;
|
737
|
+
}
|
738
|
+
} else if (to.col >= from.col) {
|
739
|
+
// Column selection from left to right or a single column selection
|
740
|
+
if (startNodeData) {
|
741
|
+
from.col = startNodeData.columnIndex;
|
742
|
+
}
|
743
|
+
if (endNodeData) {
|
744
|
+
to.col = endNodeData.columnIndex + endNodeData.origColspan - 1;
|
745
|
+
}
|
623
746
|
}
|
624
|
-
(_this$hot = this.hot).selectColumns.apply(_this$hot, columnsToSelect);
|
625
747
|
}
|
626
748
|
|
627
749
|
/**
|
@@ -416,6 +416,43 @@ var StateManager = /*#__PURE__*/function () {
|
|
416
416
|
return stepBackColumn;
|
417
417
|
}
|
418
418
|
|
419
|
+
/**
|
420
|
+
* The method is helpful in cases where the column index targets in-between currently
|
421
|
+
* collapsed column. In that case, the method returns the right-most column index
|
422
|
+
* where the nested header ends.
|
423
|
+
*
|
424
|
+
* @param {number} headerLevel Header level (there is support for negative and positive values).
|
425
|
+
* @param {number} columnIndex A visual column index.
|
426
|
+
* @returns {number}
|
427
|
+
*/
|
428
|
+
}, {
|
429
|
+
key: "findRightMostColumnIndex",
|
430
|
+
value: function findRightMostColumnIndex(headerLevel, columnIndex) {
|
431
|
+
var _this$getHeaderSettin3;
|
432
|
+
var _ref4 = (_this$getHeaderSettin3 = this.getHeaderSettings(headerLevel, columnIndex)) !== null && _this$getHeaderSettin3 !== void 0 ? _this$getHeaderSettin3 : {
|
433
|
+
isRoot: true,
|
434
|
+
origColspan: 1
|
435
|
+
},
|
436
|
+
isRoot = _ref4.isRoot,
|
437
|
+
origColspan = _ref4.origColspan;
|
438
|
+
if (isRoot) {
|
439
|
+
return columnIndex + origColspan - 1;
|
440
|
+
}
|
441
|
+
var stepForthColumn = columnIndex + 1;
|
442
|
+
while (stepForthColumn < this.getColumnsCount()) {
|
443
|
+
var _this$getHeaderSettin4;
|
444
|
+
var _ref5 = (_this$getHeaderSettin4 = this.getHeaderSettings(headerLevel, stepForthColumn)) !== null && _this$getHeaderSettin4 !== void 0 ? _this$getHeaderSettin4 : {
|
445
|
+
isRoot: true
|
446
|
+
},
|
447
|
+
isRootNode = _ref5.isRoot;
|
448
|
+
if (isRootNode) {
|
449
|
+
break;
|
450
|
+
}
|
451
|
+
stepForthColumn += 1;
|
452
|
+
}
|
453
|
+
return stepForthColumn - 1;
|
454
|
+
}
|
455
|
+
|
419
456
|
/**
|
420
457
|
* Gets a total number of headers levels.
|
421
458
|
*
|
@@ -411,6 +411,43 @@ var StateManager = /*#__PURE__*/function () {
|
|
411
411
|
return stepBackColumn;
|
412
412
|
}
|
413
413
|
|
414
|
+
/**
|
415
|
+
* The method is helpful in cases where the column index targets in-between currently
|
416
|
+
* collapsed column. In that case, the method returns the right-most column index
|
417
|
+
* where the nested header ends.
|
418
|
+
*
|
419
|
+
* @param {number} headerLevel Header level (there is support for negative and positive values).
|
420
|
+
* @param {number} columnIndex A visual column index.
|
421
|
+
* @returns {number}
|
422
|
+
*/
|
423
|
+
}, {
|
424
|
+
key: "findRightMostColumnIndex",
|
425
|
+
value: function findRightMostColumnIndex(headerLevel, columnIndex) {
|
426
|
+
var _this$getHeaderSettin3;
|
427
|
+
var _ref4 = (_this$getHeaderSettin3 = this.getHeaderSettings(headerLevel, columnIndex)) !== null && _this$getHeaderSettin3 !== void 0 ? _this$getHeaderSettin3 : {
|
428
|
+
isRoot: true,
|
429
|
+
origColspan: 1
|
430
|
+
},
|
431
|
+
isRoot = _ref4.isRoot,
|
432
|
+
origColspan = _ref4.origColspan;
|
433
|
+
if (isRoot) {
|
434
|
+
return columnIndex + origColspan - 1;
|
435
|
+
}
|
436
|
+
var stepForthColumn = columnIndex + 1;
|
437
|
+
while (stepForthColumn < this.getColumnsCount()) {
|
438
|
+
var _this$getHeaderSettin4;
|
439
|
+
var _ref5 = (_this$getHeaderSettin4 = this.getHeaderSettings(headerLevel, stepForthColumn)) !== null && _this$getHeaderSettin4 !== void 0 ? _this$getHeaderSettin4 : {
|
440
|
+
isRoot: true
|
441
|
+
},
|
442
|
+
isRootNode = _ref5.isRoot;
|
443
|
+
if (isRootNode) {
|
444
|
+
break;
|
445
|
+
}
|
446
|
+
stepForthColumn += 1;
|
447
|
+
}
|
448
|
+
return stepForthColumn - 1;
|
449
|
+
}
|
450
|
+
|
414
451
|
/**
|
415
452
|
* Gets a total number of headers levels.
|
416
453
|
*
|
@@ -16,7 +16,7 @@ var _baseRenderer = require("../baseRenderer");
|
|
16
16
|
var _eventManager = _interopRequireDefault(require("../../eventManager"));
|
17
17
|
var _element = require("../../helpers/dom/element");
|
18
18
|
var _mixed = require("../../helpers/mixed");
|
19
|
-
var
|
19
|
+
var _shortcutContexts = require("../../shortcutContexts");
|
20
20
|
var _pluginHooks = _interopRequireDefault(require("../../pluginHooks"));
|
21
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
22
22
|
var isListeningKeyDownEvent = new WeakMap();
|
@@ -163,7 +163,7 @@ function checkboxRenderer(instance, TD, row, col, prop, value, cellProperties) {
|
|
163
163
|
return !areSelectedCheckboxCells(); // False blocks next action associated with the keyboard shortcut.
|
164
164
|
},
|
165
165
|
|
166
|
-
relativeToGroup:
|
166
|
+
relativeToGroup: _shortcutContexts.EDITOR_EDIT_GROUP,
|
167
167
|
position: 'before'
|
168
168
|
}], config);
|
169
169
|
}
|
@@ -11,7 +11,7 @@ import { baseRenderer } from "../baseRenderer/index.mjs";
|
|
11
11
|
import EventManager from "../../eventManager.mjs";
|
12
12
|
import { empty, addClass } from "../../helpers/dom/element.mjs";
|
13
13
|
import { isEmpty, stringify } from "../../helpers/mixed.mjs";
|
14
|
-
import { SHORTCUTS_GROUP_EDITOR } from "../../
|
14
|
+
import { EDITOR_EDIT_GROUP as SHORTCUTS_GROUP_EDITOR } from "../../shortcutContexts/index.mjs";
|
15
15
|
import Hooks from "../../pluginHooks.mjs";
|
16
16
|
var isListeningKeyDownEvent = new WeakMap();
|
17
17
|
var isCheckboxListenerAdded = new WeakMap();
|