handsontable 12.3.1-next-83e8a23-20230111 → 12.3.1-next-8792e1c-20230202
Sign up to get free protection for your applications and to get access to all the features.
- package/3rdparty/walkontable/src/overlays.js +20 -2
- package/3rdparty/walkontable/src/overlays.mjs +20 -2
- package/3rdparty/walkontable/src/table.js +33 -6
- package/3rdparty/walkontable/src/table.mjs +33 -6
- package/CHANGELOG.md +9 -7
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core.js +6 -0
- package/core.mjs +6 -0
- package/dist/handsontable.css +2 -2
- package/dist/handsontable.full.css +2 -2
- package/dist/handsontable.full.js +1249 -1118
- package/dist/handsontable.full.min.css +2 -2
- package/dist/handsontable.full.min.js +91 -91
- package/dist/handsontable.js +958 -827
- package/dist/handsontable.min.css +2 -2
- package/dist/handsontable.min.js +3 -3
- package/helpers/mixed.js +2 -2
- package/helpers/mixed.mjs +2 -2
- package/package.json +1 -1
- package/plugins/mergeCells/calculations/autofill.js +3 -0
- package/plugins/mergeCells/calculations/autofill.mjs +3 -0
- package/plugins/mergeCells/mergeCells.js +108 -35
- package/plugins/mergeCells/mergeCells.mjs +108 -35
- package/shortcuts/manager.js +9 -0
- package/shortcuts/manager.mjs +9 -0
- package/shortcuts/recorder.js +3 -0
- package/shortcuts/recorder.mjs +3 -0
@@ -1,10 +1,14 @@
|
|
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
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
3
3
|
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."); }
|
4
|
-
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); }
|
5
|
-
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; }
|
6
4
|
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; } }
|
7
5
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
6
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
7
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
8
|
+
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); }
|
9
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
10
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
11
|
+
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; }
|
8
12
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
9
13
|
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); } }
|
10
14
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
@@ -24,6 +28,12 @@ import "core-js/modules/es.object.to-string.js";
|
|
24
28
|
import "core-js/modules/es.string.iterator.js";
|
25
29
|
import "core-js/modules/es.weak-map.js";
|
26
30
|
import "core-js/modules/web.dom-collections.iterator.js";
|
31
|
+
import "core-js/modules/web.dom-collections.for-each.js";
|
32
|
+
import "core-js/modules/es.set.js";
|
33
|
+
import "core-js/modules/es.array.map.js";
|
34
|
+
import "core-js/modules/es.function.name.js";
|
35
|
+
import "core-js/modules/es.regexp.exec.js";
|
36
|
+
import "core-js/modules/es.string.replace.js";
|
27
37
|
import "core-js/modules/es.array.includes.js";
|
28
38
|
import "core-js/modules/es.string.includes.js";
|
29
39
|
import "core-js/modules/es.object.set-prototype-of.js";
|
@@ -37,10 +47,8 @@ import "core-js/modules/es.symbol.js";
|
|
37
47
|
import "core-js/modules/es.symbol.description.js";
|
38
48
|
import "core-js/modules/es.number.constructor.js";
|
39
49
|
import "core-js/modules/es.symbol.iterator.js";
|
40
|
-
import "core-js/modules/es.array.slice.js";
|
41
|
-
import "core-js/modules/es.function.name.js";
|
42
50
|
import "core-js/modules/es.array.from.js";
|
43
|
-
import "core-js/modules/es.
|
51
|
+
import "core-js/modules/es.array.slice.js";
|
44
52
|
import { BasePlugin } from "../base/index.mjs";
|
45
53
|
import Hooks from "../../pluginHooks.mjs";
|
46
54
|
import MergedCellsCollection from "./cellsCollection.mjs";
|
@@ -53,6 +61,8 @@ import { isObject, clone } from "../../helpers/object.mjs";
|
|
53
61
|
import { warn } from "../../helpers/console.mjs";
|
54
62
|
import { rangeEach } from "../../helpers/number.mjs";
|
55
63
|
import { applySpanProperties } from "./utils.mjs";
|
64
|
+
import { getStyle } from "../../helpers/dom/element.mjs";
|
65
|
+
import { isChrome } from "../../helpers/browser.mjs";
|
56
66
|
Hooks.getSingleton().register('beforeMergeCells');
|
57
67
|
Hooks.getSingleton().register('afterMergeCells');
|
58
68
|
Hooks.getSingleton().register('beforeUnmergeCells');
|
@@ -252,7 +262,8 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
252
262
|
/**
|
253
263
|
* Updates the plugin's state.
|
254
264
|
*
|
255
|
-
* This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the
|
265
|
+
* This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the
|
266
|
+
* following configuration options:
|
256
267
|
* - [`mergeCells`](@/api/options.md#mergecells)
|
257
268
|
*/
|
258
269
|
}, {
|
@@ -265,6 +276,56 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
265
276
|
_get(_getPrototypeOf(MergeCells.prototype), "updatePlugin", this).call(this);
|
266
277
|
}
|
267
278
|
|
279
|
+
/**
|
280
|
+
* If the browser is recognized as Chrome, force an additional repaint to prevent showing the effects of a Chrome bug.
|
281
|
+
*
|
282
|
+
* Issue described in https://github.com/handsontable/dev-handsontable/issues/521.
|
283
|
+
*
|
284
|
+
* @private
|
285
|
+
*/
|
286
|
+
}, {
|
287
|
+
key: "ifChromeForceRepaint",
|
288
|
+
value: function ifChromeForceRepaint() {
|
289
|
+
var _this3 = this;
|
290
|
+
if (!isChrome()) {
|
291
|
+
return;
|
292
|
+
}
|
293
|
+
var rowsToRefresh = [];
|
294
|
+
var rowIndexesToRefresh = [];
|
295
|
+
this.mergedCellsCollection.mergedCells.forEach(function (mergedCell) {
|
296
|
+
var row = mergedCell.row,
|
297
|
+
rowspan = mergedCell.rowspan;
|
298
|
+
for (var r = row + 1; r < row + rowspan; r++) {
|
299
|
+
rowIndexesToRefresh.push(r);
|
300
|
+
}
|
301
|
+
});
|
302
|
+
|
303
|
+
// Remove duplicates
|
304
|
+
rowIndexesToRefresh = _toConsumableArray(new Set(rowIndexesToRefresh));
|
305
|
+
rowIndexesToRefresh.forEach(function (rowIndex) {
|
306
|
+
var renderableRowIndex = _this3.hot.rowIndexMapper.getRenderableFromVisualIndex(rowIndex);
|
307
|
+
_this3.hot.view._wt.wtOverlays.getOverlays(true).map(function (overlay) {
|
308
|
+
return (overlay === null || overlay === void 0 ? void 0 : overlay.name) === 'master' ? overlay : overlay.clone.wtTable;
|
309
|
+
}).forEach(function (wtTableRef) {
|
310
|
+
var rowToRefresh = wtTableRef.getRow(renderableRowIndex);
|
311
|
+
if (rowToRefresh) {
|
312
|
+
// Modify the TR's `background` property to later modify it asynchronously.
|
313
|
+
// The background color is getting modified only with the alpha, so the change should not be visible (and is
|
314
|
+
// covered by the TDs' background color).
|
315
|
+
rowToRefresh.style.background = getStyle(rowToRefresh, 'backgroundColor').replace(')', ', 0.99)');
|
316
|
+
rowsToRefresh.push(rowToRefresh);
|
317
|
+
}
|
318
|
+
});
|
319
|
+
});
|
320
|
+
|
321
|
+
// Asynchronously revert the TRs' `background` property to force a fresh repaint.
|
322
|
+
this.hot._registerTimeout(function () {
|
323
|
+
rowsToRefresh.forEach(function (rowElement) {
|
324
|
+
rowElement.style.background = getStyle(rowElement, 'backgroundColor').replace(', 0.99)', ')');
|
325
|
+
});
|
326
|
+
}, 1);
|
327
|
+
}
|
328
|
+
|
268
329
|
/**
|
269
330
|
* Validates a single setting object, represented by a single merged cell information object.
|
270
331
|
*
|
@@ -304,19 +365,19 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
304
365
|
}, {
|
305
366
|
key: "generateFromSettings",
|
306
367
|
value: function generateFromSettings(settings) {
|
307
|
-
var
|
368
|
+
var _this4 = this;
|
308
369
|
if (Array.isArray(settings)) {
|
309
370
|
var populatedNulls = [];
|
310
371
|
arrayEach(settings, function (setting) {
|
311
|
-
if (!
|
372
|
+
if (!_this4.validateSetting(setting)) {
|
312
373
|
return;
|
313
374
|
}
|
314
|
-
var highlight =
|
315
|
-
var rangeEnd =
|
316
|
-
var mergeRange =
|
375
|
+
var highlight = _this4.hot._createCellCoords(setting.row, setting.col);
|
376
|
+
var rangeEnd = _this4.hot._createCellCoords(setting.row + setting.rowspan - 1, setting.col + setting.colspan - 1);
|
377
|
+
var mergeRange = _this4.hot._createCellRange(highlight, highlight, rangeEnd);
|
317
378
|
|
318
379
|
// Merging without data population.
|
319
|
-
|
380
|
+
_this4.mergeRange(mergeRange, true, true);
|
320
381
|
rangeEach(setting.row, setting.row + setting.rowspan - 1, function (rowIndex) {
|
321
382
|
rangeEach(setting.col, setting.col + setting.colspan - 1, function (columnIndex) {
|
322
383
|
// Not resetting a cell representing a merge area's value.
|
@@ -422,15 +483,17 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
422
483
|
* @private
|
423
484
|
* @param {CellRange} cellRange Cell range to merge.
|
424
485
|
* @param {boolean} [auto=false] `true` if is called automatically, e.g. At initialization.
|
425
|
-
* @param {boolean} [preventPopulation=false] `true`, if the method should not run `populateFromArray` at the end,
|
426
|
-
*
|
486
|
+
* @param {boolean} [preventPopulation=false] `true`, if the method should not run `populateFromArray` at the end,
|
487
|
+
* but rather return its arguments.
|
488
|
+
* @returns {Array|boolean} Returns an array of [row, column, dataUnderCollection] if preventPopulation is set to
|
489
|
+
* true. If the the merging process went successful, it returns `true`, otherwise - `false`.
|
427
490
|
* @fires Hooks#beforeMergeCells
|
428
491
|
* @fires Hooks#afterMergeCells
|
429
492
|
*/
|
430
493
|
}, {
|
431
494
|
key: "mergeRange",
|
432
495
|
value: function mergeRange(cellRange) {
|
433
|
-
var
|
496
|
+
var _this5 = this;
|
434
497
|
var auto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
435
498
|
var preventPopulation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
436
499
|
var topStart = cellRange.getTopStartCorner();
|
@@ -454,9 +517,9 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
454
517
|
clearedData[i] = [];
|
455
518
|
}
|
456
519
|
if (i === 0 && j === 0) {
|
457
|
-
clearedValue =
|
520
|
+
clearedValue = _this5.hot.getSourceDataAtCell(_this5.hot.toPhysicalRow(mergeParent.row), _this5.hot.toPhysicalColumn(mergeParent.col));
|
458
521
|
} else {
|
459
|
-
|
522
|
+
_this5.hot.setCellMeta(mergeParent.row + i, mergeParent.col + j, 'hidden', true);
|
460
523
|
}
|
461
524
|
clearedData[i][j] = clearedValue;
|
462
525
|
});
|
@@ -469,6 +532,9 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
469
532
|
} else {
|
470
533
|
this.hot.populateFromArray(mergeParent.row, mergeParent.col, clearedData, void 0, void 0, this.pluginName);
|
471
534
|
}
|
535
|
+
if (!auto) {
|
536
|
+
this.ifChromeForceRepaint();
|
537
|
+
}
|
472
538
|
this.hot.runHooks('afterMergeCells', cellRange, mergeParent, auto);
|
473
539
|
return populationInfo;
|
474
540
|
}
|
@@ -488,7 +554,7 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
488
554
|
}, {
|
489
555
|
key: "unmergeRange",
|
490
556
|
value: function unmergeRange(cellRange) {
|
491
|
-
var
|
557
|
+
var _this6 = this;
|
492
558
|
var auto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
493
559
|
var mergedCells = this.mergedCellsCollection.getWithinRange(cellRange);
|
494
560
|
if (!mergedCells) {
|
@@ -496,13 +562,13 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
496
562
|
}
|
497
563
|
this.hot.runHooks('beforeUnmergeCells', cellRange, auto);
|
498
564
|
arrayEach(mergedCells, function (currentCollection) {
|
499
|
-
|
565
|
+
_this6.mergedCellsCollection.remove(currentCollection.row, currentCollection.col);
|
500
566
|
rangeEach(0, currentCollection.rowspan - 1, function (i) {
|
501
567
|
rangeEach(0, currentCollection.colspan - 1, function (j) {
|
502
|
-
|
568
|
+
_this6.hot.removeCellMeta(currentCollection.row + i, currentCollection.col + j, 'hidden');
|
503
569
|
});
|
504
570
|
});
|
505
|
-
|
571
|
+
_this6.hot.removeCellMeta(currentCollection.row, currentCollection.col, 'spanned');
|
506
572
|
});
|
507
573
|
this.hot.runHooks('afterUnmergeCells', cellRange, auto);
|
508
574
|
this.hot.render();
|
@@ -582,14 +648,14 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
582
648
|
}, {
|
583
649
|
key: "registerShortcuts",
|
584
650
|
value: function registerShortcuts() {
|
585
|
-
var
|
651
|
+
var _this7 = this;
|
586
652
|
var shortcutManager = this.hot.getShortcutManager();
|
587
653
|
var gridContext = shortcutManager.getContext('grid');
|
588
654
|
gridContext.addShortcut({
|
589
655
|
keys: [['Control', 'm']],
|
590
656
|
callback: function callback() {
|
591
|
-
|
592
|
-
|
657
|
+
_this7.toggleMerge(_this7.hot.getSelectedRangeLast());
|
658
|
+
_this7.hot.render();
|
593
659
|
},
|
594
660
|
runOnlyIf: function runOnlyIf(event) {
|
595
661
|
return !event.altKey;
|
@@ -613,7 +679,8 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
613
679
|
}
|
614
680
|
|
615
681
|
/**
|
616
|
-
* Modifies the information on whether the current selection contains multiple cells. The `afterIsMultipleSelection`
|
682
|
+
* Modifies the information on whether the current selection contains multiple cells. The `afterIsMultipleSelection`
|
683
|
+
* hook callback.
|
617
684
|
*
|
618
685
|
* @private
|
619
686
|
* @param {boolean} isMultiple Determines whether the current selection contains multiple cells.
|
@@ -709,7 +776,7 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
709
776
|
}, {
|
710
777
|
key: "onModifyTransformEnd",
|
711
778
|
value: function onModifyTransformEnd(delta) {
|
712
|
-
var
|
779
|
+
var _this8 = this;
|
713
780
|
var currentSelectionRange = this.hot.getSelectedRangeLast();
|
714
781
|
var newDelta = clone(delta);
|
715
782
|
var newSelectionRange = this.selectionCalculations.getUpdatedSelectionRange(currentSelectionRange, delta);
|
@@ -719,7 +786,7 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
719
786
|
tempDelta = clone(newDelta);
|
720
787
|
this.selectionCalculations.getUpdatedSelectionRange(currentSelectionRange, newDelta);
|
721
788
|
arrayEach(mergedCellsWithinRange, function (mergedCell) {
|
722
|
-
|
789
|
+
_this8.selectionCalculations.snapDelta(newDelta, currentSelectionRange, mergedCell);
|
723
790
|
});
|
724
791
|
} while (newDelta.row !== tempDelta.row || newDelta.col !== tempDelta.col);
|
725
792
|
delta.row = newDelta.row;
|
@@ -837,7 +904,8 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
837
904
|
|
838
905
|
/**
|
839
906
|
* `beforeSetRangeEnd` hook callback.
|
840
|
-
* While selecting cells with keyboard or mouse, make sure that rectangular area is expanded to the extent of the
|
907
|
+
* While selecting cells with keyboard or mouse, make sure that rectangular area is expanded to the extent of the
|
908
|
+
* merged cell.
|
841
909
|
*
|
842
910
|
* Note: Please keep in mind that callback may modify both start and end range coordinates by the reference.
|
843
911
|
*
|
@@ -1209,13 +1277,15 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
1209
1277
|
}
|
1210
1278
|
|
1211
1279
|
/**
|
1212
|
-
* `afterModifyTransformStart` hook callback. Fixes a problem with navigating through merged cells at the edges of
|
1213
|
-
* with the ENTER/SHIFT+ENTER/TAB/SHIFT+TAB keys.
|
1280
|
+
* `afterModifyTransformStart` hook callback. Fixes a problem with navigating through merged cells at the edges of
|
1281
|
+
* the table with the ENTER/SHIFT+ENTER/TAB/SHIFT+TAB keys.
|
1214
1282
|
*
|
1215
1283
|
* @private
|
1216
1284
|
* @param {CellCoords} coords Coordinates of the to-be-selected cell.
|
1217
|
-
* @param {number} rowTransformDir Row transformation direction (negative value = up, 0 = none, positive value =
|
1218
|
-
*
|
1285
|
+
* @param {number} rowTransformDir Row transformation direction (negative value = up, 0 = none, positive value =
|
1286
|
+
* down).
|
1287
|
+
* @param {number} colTransformDir Column transformation direction (negative value = up, 0 = none, positive value =
|
1288
|
+
* down).
|
1219
1289
|
*/
|
1220
1290
|
}, {
|
1221
1291
|
key: "onAfterModifyTransformStart",
|
@@ -1247,9 +1317,11 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
1247
1317
|
* @private
|
1248
1318
|
* @param {number} currentRow Visual row index of the currently processed cell.
|
1249
1319
|
* @param {number} currentColumn Visual column index of the currently cell.
|
1250
|
-
* @param {Array} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow,
|
1320
|
+
* @param {Array} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow,
|
1321
|
+
* endColumn]`.
|
1251
1322
|
* @param {number|undefined} layerLevel Number indicating which layer of selection is currently processed.
|
1252
|
-
* @returns {string|undefined} A `String`, which will act as an additional `className` to be added to the currently
|
1323
|
+
* @returns {string|undefined} A `String`, which will act as an additional `className` to be added to the currently
|
1324
|
+
* processed cell.
|
1253
1325
|
*/
|
1254
1326
|
}, {
|
1255
1327
|
key: "onAfterDrawSelection",
|
@@ -1265,7 +1337,8 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
|
|
1265
1337
|
* `beforeRemoveCellClassNames` hook callback. Used to remove additional class name from all cells in the table.
|
1266
1338
|
*
|
1267
1339
|
* @private
|
1268
|
-
* @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from
|
1340
|
+
* @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from
|
1341
|
+
* all the cells in the table.
|
1269
1342
|
*/
|
1270
1343
|
}, {
|
1271
1344
|
key: "onBeforeRemoveCellClassNames",
|
package/shortcuts/manager.js
CHANGED
@@ -151,6 +151,15 @@ var createShortcutManager = function createShortcutManager(_ref) {
|
|
151
151
|
isCtrlPressed: function isCtrlPressed() {
|
152
152
|
return !isCtrlKeySilenced && (keyRecorder.isPressed('control') || keyRecorder.isPressed('meta'));
|
153
153
|
},
|
154
|
+
/**
|
155
|
+
* Release every previously pressed key.
|
156
|
+
*
|
157
|
+
* @type {Function}
|
158
|
+
* @memberof ShortcutManager#
|
159
|
+
*/
|
160
|
+
releasePressedKeys: function releasePressedKeys() {
|
161
|
+
return keyRecorder.releasePressedKeys();
|
162
|
+
},
|
154
163
|
/**
|
155
164
|
* Destroy a context manager instance.
|
156
165
|
*
|
package/shortcuts/manager.mjs
CHANGED
@@ -146,6 +146,15 @@ export var createShortcutManager = function createShortcutManager(_ref) {
|
|
146
146
|
isCtrlPressed: function isCtrlPressed() {
|
147
147
|
return !isCtrlKeySilenced && (keyRecorder.isPressed('control') || keyRecorder.isPressed('meta'));
|
148
148
|
},
|
149
|
+
/**
|
150
|
+
* Release every previously pressed key.
|
151
|
+
*
|
152
|
+
* @type {Function}
|
153
|
+
* @memberof ShortcutManager#
|
154
|
+
*/
|
155
|
+
releasePressedKeys: function releasePressedKeys() {
|
156
|
+
return keyRecorder.releasePressedKeys();
|
157
|
+
},
|
149
158
|
/**
|
150
159
|
* Destroy a context manager instance.
|
151
160
|
*
|
package/shortcuts/recorder.js
CHANGED
@@ -160,6 +160,9 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
|
|
160
160
|
unmount: unmount,
|
161
161
|
isPressed: function isPressed(key) {
|
162
162
|
return modifierKeysObserver.isPressed(key);
|
163
|
+
},
|
164
|
+
releasePressedKeys: function releasePressedKeys() {
|
165
|
+
return modifierKeysObserver.releaseAll();
|
163
166
|
}
|
164
167
|
};
|
165
168
|
}
|
package/shortcuts/recorder.mjs
CHANGED
@@ -156,6 +156,9 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
|
|
156
156
|
unmount: unmount,
|
157
157
|
isPressed: function isPressed(key) {
|
158
158
|
return modifierKeysObserver.isPressed(key);
|
159
|
+
},
|
160
|
+
releasePressedKeys: function releasePressedKeys() {
|
161
|
+
return modifierKeysObserver.releaseAll();
|
159
162
|
}
|
160
163
|
};
|
161
164
|
}
|