handsontable 14.0.0-next-88de277-20231127 → 14.0.0-next-8492c6c-20231128

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -93,7 +93,10 @@ class ColumnHeadersRenderer extends _base.default {
93
93
  // Remove all accessibility-related attributes for the header to start fresh.
94
94
  (0, _element.removeAttribute)(TH, [new RegExp('aria-(.*)'), new RegExp('role')]);
95
95
  if (this.table.isAriaEnabled()) {
96
- (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_COLINDEX)(renderedColumnIndex + 1 + this.table.rowHeadersCount), (0, _a11y.A11Y_TABINDEX)(-1), (0, _a11y.A11Y_COLUMNHEADER)(), ...(renderedColumnIndex >= 0 ? [(0, _a11y.A11Y_SCOPE_COL)()] : [])]);
96
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_COLINDEX)(renderedColumnIndex + 1 + this.table.rowHeadersCount), (0, _a11y.A11Y_TABINDEX)(-1), (0, _a11y.A11Y_COLUMNHEADER)(), ...(renderedColumnIndex >= 0 ? [(0, _a11y.A11Y_SCOPE_COL)()] : [
97
+ // Adding `role=row` to the corner headers to prevent
98
+ // https://github.com/handsontable/dev-handsontable/issues/1574
99
+ (0, _a11y.A11Y_ROW)()])]);
97
100
  }
98
101
  columnHeaderFunctions[rowHeaderIndex](sourceColumnIndex, TH, rowHeaderIndex);
99
102
  }
@@ -89,7 +89,10 @@ export default class ColumnHeadersRenderer extends BaseRenderer {
89
89
  // Remove all accessibility-related attributes for the header to start fresh.
90
90
  removeAttribute(TH, [new RegExp('aria-(.*)'), new RegExp('role')]);
91
91
  if (this.table.isAriaEnabled()) {
92
- setAttribute(TH, [A11Y_COLINDEX(renderedColumnIndex + 1 + this.table.rowHeadersCount), A11Y_TABINDEX(-1), A11Y_COLUMNHEADER(), ...(renderedColumnIndex >= 0 ? [A11Y_SCOPE_COL()] : [])]);
92
+ setAttribute(TH, [A11Y_COLINDEX(renderedColumnIndex + 1 + this.table.rowHeadersCount), A11Y_TABINDEX(-1), A11Y_COLUMNHEADER(), ...(renderedColumnIndex >= 0 ? [A11Y_SCOPE_COL()] : [
93
+ // Adding `role=row` to the corner headers to prevent
94
+ // https://github.com/handsontable/dev-handsontable/issues/1574
95
+ A11Y_ROW()])]);
93
96
  }
94
97
  columnHeaderFunctions[rowHeaderIndex](sourceColumnIndex, TH, rowHeaderIndex);
95
98
  }
package/base.js CHANGED
@@ -43,8 +43,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
43
43
  Handsontable.CellCoords = _src.CellCoords;
44
44
  Handsontable.CellRange = _src.CellRange;
45
45
  Handsontable.packageName = 'handsontable';
46
- Handsontable.buildDate = "27/11/2023 10:19:22";
47
- Handsontable.version = "14.0.0-next-88de277-20231127";
46
+ Handsontable.buildDate = "28/11/2023 14:01:11";
47
+ Handsontable.version = "14.0.0-next-8492c6c-20231128";
48
48
  Handsontable.languages = {
49
49
  dictionaryKeys: _registry.dictionaryKeys,
50
50
  getLanguageDictionary: _registry.getLanguageDictionary,
package/base.mjs CHANGED
@@ -35,8 +35,8 @@ Handsontable.hooks = Hooks.getSingleton();
35
35
  Handsontable.CellCoords = CellCoords;
36
36
  Handsontable.CellRange = CellRange;
37
37
  Handsontable.packageName = 'handsontable';
38
- Handsontable.buildDate = "27/11/2023 10:19:29";
39
- Handsontable.version = "14.0.0-next-88de277-20231127";
38
+ Handsontable.buildDate = "28/11/2023 14:01:17";
39
+ Handsontable.version = "14.0.0-next-8492c6c-20231128";
40
40
  Handsontable.languages = {
41
41
  dictionaryKeys,
42
42
  getLanguageDictionary,
@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 14.0.0-next-88de277-20231127
29
- * Release date: 29/11/2023 (built at 27/11/2023 10:19:34)
28
+ * Version: 14.0.0-next-8492c6c-20231128
29
+ * Release date: 29/11/2023 (built at 28/11/2023 14:01:22)
30
30
  */
31
31
  /**
32
32
  * Fix for bootstrap styles
@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 14.0.0-next-88de277-20231127
29
- * Release date: 29/11/2023 (built at 27/11/2023 10:19:34)
28
+ * Version: 14.0.0-next-8492c6c-20231128
29
+ * Release date: 29/11/2023 (built at 28/11/2023 14:01:22)
30
30
  */
31
31
  /**
32
32
  * Fix for bootstrap styles
@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 14.0.0-next-88de277-20231127
29
- * Release date: 29/11/2023 (built at 27/11/2023 10:19:34)
28
+ * Version: 14.0.0-next-8492c6c-20231128
29
+ * Release date: 29/11/2023 (built at 28/11/2023 14:01:22)
30
30
  */
31
31
  (function webpackUniversalModuleDefinition(root, factory) {
32
32
  if(typeof exports === 'object' && typeof module === 'object')
@@ -43033,8 +43033,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
43033
43033
  Handsontable.CellCoords = _src.CellCoords;
43034
43034
  Handsontable.CellRange = _src.CellRange;
43035
43035
  Handsontable.packageName = 'handsontable';
43036
- Handsontable.buildDate = "27/11/2023 10:19:34";
43037
- Handsontable.version = "14.0.0-next-88de277-20231127";
43036
+ Handsontable.buildDate = "28/11/2023 14:01:22";
43037
+ Handsontable.version = "14.0.0-next-8492c6c-20231128";
43038
43038
  Handsontable.languages = {
43039
43039
  dictionaryKeys: _registry.dictionaryKeys,
43040
43040
  getLanguageDictionary: _registry.getLanguageDictionary,
@@ -53154,7 +53154,7 @@ const domMessages = {
53154
53154
  function _injectProductInfo(key, element) {
53155
53155
  const hasValidType = !isEmpty(key);
53156
53156
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
53157
- const hotVersion = "14.0.0-next-88de277-20231127";
53157
+ const hotVersion = "14.0.0-next-8492c6c-20231128";
53158
53158
  let keyValidityDate;
53159
53159
  let consoleMessageState = 'invalid';
53160
53160
  let domMessageState = 'invalid';
@@ -65617,10 +65617,11 @@ function getListenersCounter() {
65617
65617
  __webpack_require__(275);
65618
65618
  var _interopRequireDefault = __webpack_require__(198);
65619
65619
  exports.__esModule = true;
65620
- var _classPrivateFieldGet5 = _interopRequireDefault(__webpack_require__(466));
65620
+ var _classPrivateFieldGet7 = _interopRequireDefault(__webpack_require__(466));
65621
65621
  var _classPrivateFieldSet2 = _interopRequireDefault(__webpack_require__(469));
65622
65622
  var _console = __webpack_require__(462);
65623
65623
  var _element = __webpack_require__(304);
65624
+ var _function = __webpack_require__(448);
65624
65625
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
65625
65626
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
65626
65627
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
@@ -65645,9 +65646,10 @@ var _hot = /*#__PURE__*/new WeakMap();
65645
65646
  var _focusMode = /*#__PURE__*/new WeakMap();
65646
65647
  var _refocusDelay = /*#__PURE__*/new WeakMap();
65647
65648
  var _refocusElementGetter = /*#__PURE__*/new WeakMap();
65648
- var _getCurrentHighlightCoords = /*#__PURE__*/new WeakSet();
65649
+ var _debouncedSelect = /*#__PURE__*/new WeakMap();
65649
65650
  var _getSelectedCell = /*#__PURE__*/new WeakSet();
65650
- var _manageFocus = /*#__PURE__*/new WeakSet();
65651
+ var _focusCell = /*#__PURE__*/new WeakSet();
65652
+ var _focusEditorElement = /*#__PURE__*/new WeakSet();
65651
65653
  var _onUpdateSettings = /*#__PURE__*/new WeakSet();
65652
65654
  class FocusManager {
65653
65655
  constructor(hotInstance) {
@@ -65655,29 +65657,23 @@ class FocusManager {
65655
65657
  /**
65656
65658
  * Update the manager configuration after calling `updateSettings`.
65657
65659
  *
65658
- * @private
65659
65660
  * @param {object} newSettings The new settings passed to the `updateSettings` method.
65660
65661
  */
65661
65662
  _classPrivateMethodInitSpec(this, _onUpdateSettings);
65662
65663
  /**
65663
- * Manage the browser's focus after cell selection.
65664
- *
65665
- * @private
65664
+ * Manage the browser's focus after cell selection end.
65666
65665
  */
65667
- _classPrivateMethodInitSpec(this, _manageFocus);
65666
+ _classPrivateMethodInitSpec(this, _focusEditorElement);
65668
65667
  /**
65669
- * Get and return the currently selected and highlighted cell/header element.
65670
- *
65671
- * @private
65672
- * @returns {HTMLTableCellElement}
65668
+ * Manage the browser's focus after each cell selection change.
65673
65669
  */
65674
- _classPrivateMethodInitSpec(this, _getSelectedCell);
65670
+ _classPrivateMethodInitSpec(this, _focusCell);
65675
65671
  /**
65676
- * Get the coordinates of the highlight of the currently selected cell/header.
65672
+ * Get and return the currently selected and highlighted cell/header element.
65677
65673
  *
65678
- * @returns {CellCoords}
65674
+ * @param {Function} callback Callback function to be called after the cell element is retrieved.
65679
65675
  */
65680
- _classPrivateMethodInitSpec(this, _getCurrentHighlightCoords);
65676
+ _classPrivateMethodInitSpec(this, _getSelectedCell);
65681
65677
  /**
65682
65678
  * The Handsontable instance.
65683
65679
  */
@@ -65693,7 +65689,7 @@ class FocusManager {
65693
65689
  * - 'mixed' - The browser's focus switches from the lastly selected cell element to the currently active editor's
65694
65690
  * `TEXTAREA` element after a delay defined in the manager.
65695
65691
  *
65696
- * @type {string}
65692
+ * @type {'cell' | 'mixed'}
65697
65693
  */
65698
65694
  _classPrivateFieldInitSpec(this, _focusMode, {
65699
65695
  writable: true,
@@ -65719,20 +65715,35 @@ class FocusManager {
65719
65715
  writable: true,
65720
65716
  value: null
65721
65717
  });
65718
+ /**
65719
+ * Map of the debounced `select` functions.
65720
+ *
65721
+ * @type {Map<number, Function>}
65722
+ */
65723
+ _classPrivateFieldInitSpec(this, _debouncedSelect, {
65724
+ writable: true,
65725
+ value: new Map()
65726
+ });
65722
65727
  const hotSettings = hotInstance.getSettings();
65723
65728
  (0, _classPrivateFieldSet2.default)(this, _hot, hotInstance);
65724
65729
  (0, _classPrivateFieldSet2.default)(this, _focusMode, hotSettings.imeFastEdit ? FOCUS_MODES.MIXED : FOCUS_MODES.CELL);
65725
- (0, _classPrivateFieldGet5.default)(this, _hot).addHook('afterUpdateSettings', function () {
65730
+ (0, _classPrivateFieldGet7.default)(this, _hot).addHook('afterUpdateSettings', function () {
65726
65731
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
65727
65732
  args[_key] = arguments[_key];
65728
65733
  }
65729
65734
  return _classPrivateMethodGet(_this, _onUpdateSettings, _onUpdateSettings2).call(_this, ...args);
65730
65735
  });
65731
- (0, _classPrivateFieldGet5.default)(this, _hot).addHook('afterSelection', function () {
65736
+ (0, _classPrivateFieldGet7.default)(this, _hot).addHook('afterSelection', function () {
65732
65737
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
65733
65738
  args[_key2] = arguments[_key2];
65734
65739
  }
65735
- return _classPrivateMethodGet(_this, _manageFocus, _manageFocus2).call(_this, ...args);
65740
+ return _classPrivateMethodGet(_this, _focusCell, _focusCell2).call(_this, ...args);
65741
+ });
65742
+ (0, _classPrivateFieldGet7.default)(this, _hot).addHook('afterSelectionEnd', function () {
65743
+ for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
65744
+ args[_key3] = arguments[_key3];
65745
+ }
65746
+ return _classPrivateMethodGet(_this, _focusEditorElement, _focusEditorElement2).call(_this, ...args);
65736
65747
  });
65737
65748
  }
65738
65749
 
@@ -65742,7 +65753,7 @@ class FocusManager {
65742
65753
  * @returns {'cell' | 'mixed'}
65743
65754
  */
65744
65755
  getFocusMode() {
65745
- return (0, _classPrivateFieldGet5.default)(this, _focusMode);
65756
+ return (0, _classPrivateFieldGet7.default)(this, _focusMode);
65746
65757
  }
65747
65758
 
65748
65759
  /**
@@ -65765,7 +65776,7 @@ class FocusManager {
65765
65776
  * @returns {number} Delay in milliseconds.
65766
65777
  */
65767
65778
  getRefocusDelay() {
65768
- return (0, _classPrivateFieldGet5.default)(this, _refocusDelay);
65779
+ return (0, _classPrivateFieldGet7.default)(this, _refocusDelay);
65769
65780
  }
65770
65781
 
65771
65782
  /**
@@ -65793,11 +65804,11 @@ class FocusManager {
65793
65804
  * @returns {HTMLTextAreaElement|HTMLElement|undefined}
65794
65805
  */
65795
65806
  getRefocusElement() {
65796
- if (typeof (0, _classPrivateFieldGet5.default)(this, _refocusElementGetter) === 'function') {
65797
- return (0, _classPrivateFieldGet5.default)(this, _refocusElementGetter).call(this);
65807
+ if (typeof (0, _classPrivateFieldGet7.default)(this, _refocusElementGetter) === 'function') {
65808
+ return (0, _classPrivateFieldGet7.default)(this, _refocusElementGetter).call(this);
65798
65809
  } else {
65799
65810
  var _classPrivateFieldGet2;
65800
- return (_classPrivateFieldGet2 = (0, _classPrivateFieldGet5.default)(this, _hot).getActiveEditor()) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.TEXTAREA;
65811
+ return (_classPrivateFieldGet2 = (0, _classPrivateFieldGet7.default)(this, _hot).getActiveEditor()) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.TEXTAREA;
65801
65812
  }
65802
65813
  }
65803
65814
 
@@ -65807,17 +65818,26 @@ class FocusManager {
65807
65818
  * @param {HTMLTableCellElement} [selectedCell] The highlighted cell/header element.
65808
65819
  */
65809
65820
  focusOnHighlightedCell(selectedCell) {
65810
- var _classPrivateFieldGet3;
65811
- const currentHighlightCoords = _classPrivateMethodGet(this, _getCurrentHighlightCoords, _getCurrentHighlightCoords2).call(this);
65812
- const currentlySelectedHighlight = selectedCell || _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this);
65813
- let elementToBeFocused = (0, _classPrivateFieldGet5.default)(this, _hot).runHooks('modifyFocusedElement', currentHighlightCoords.row, currentHighlightCoords.col, currentlySelectedHighlight);
65814
- if (!(elementToBeFocused instanceof HTMLElement)) {
65815
- elementToBeFocused = currentlySelectedHighlight;
65816
- }
65817
- if (elementToBeFocused && !((_classPrivateFieldGet3 = (0, _classPrivateFieldGet5.default)(this, _hot).getActiveEditor()) !== null && _classPrivateFieldGet3 !== void 0 && _classPrivateFieldGet3.isOpened())) {
65818
- elementToBeFocused.focus({
65819
- preventScroll: true
65820
- });
65821
+ const focusElement = element => {
65822
+ var _classPrivateFieldGet3, _classPrivateFieldGet4;
65823
+ const currentHighlightCoords = (_classPrivateFieldGet3 = (0, _classPrivateFieldGet7.default)(this, _hot).getSelectedRangeLast()) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.highlight;
65824
+ if (!currentHighlightCoords || !element) {
65825
+ return;
65826
+ }
65827
+ let elementToBeFocused = (0, _classPrivateFieldGet7.default)(this, _hot).runHooks('modifyFocusedElement', currentHighlightCoords.row, currentHighlightCoords.col, element);
65828
+ if (!(elementToBeFocused instanceof HTMLElement)) {
65829
+ elementToBeFocused = element;
65830
+ }
65831
+ if (elementToBeFocused && !((_classPrivateFieldGet4 = (0, _classPrivateFieldGet7.default)(this, _hot).getActiveEditor()) !== null && _classPrivateFieldGet4 !== void 0 && _classPrivateFieldGet4.isOpened())) {
65832
+ elementToBeFocused.focus({
65833
+ preventScroll: true
65834
+ });
65835
+ }
65836
+ };
65837
+ if (selectedCell) {
65838
+ focusElement(selectedCell);
65839
+ } else {
65840
+ _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this, element => focusElement(element));
65821
65841
  }
65822
65842
  }
65823
65843
 
@@ -65825,49 +65845,63 @@ class FocusManager {
65825
65845
  * Set the focus to the active editor's `TEXTAREA` element after the provided delay. If no delay is provided, it
65826
65846
  * will be taken from the manager's configuration.
65827
65847
  *
65828
- * @param {number} delay Delay in milliseconds.
65848
+ * @param {number} [delay] Delay in milliseconds.
65829
65849
  */
65830
65850
  refocusToEditorTextarea() {
65831
- var _classPrivateFieldGet4;
65832
- let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (0, _classPrivateFieldGet5.default)(this, _refocusDelay);
65851
+ var _classPrivateFieldGet5;
65852
+ let delay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (0, _classPrivateFieldGet7.default)(this, _refocusDelay);
65833
65853
  const refocusElement = this.getRefocusElement();
65834
65854
 
65835
65855
  // Re-focus on the editor's `TEXTAREA` element (or a predefined element) if the `imeFastEdit` option is enabled.
65836
- if ((0, _classPrivateFieldGet5.default)(this, _hot).getSettings().imeFastEdit && !((_classPrivateFieldGet4 = (0, _classPrivateFieldGet5.default)(this, _hot).getActiveEditor()) !== null && _classPrivateFieldGet4 !== void 0 && _classPrivateFieldGet4.isOpened()) && !!refocusElement) {
65837
- (0, _classPrivateFieldGet5.default)(this, _hot)._registerTimeout(() => {
65838
- refocusElement.select();
65839
- }, delay);
65856
+ if ((0, _classPrivateFieldGet7.default)(this, _hot).getSettings().imeFastEdit && !((_classPrivateFieldGet5 = (0, _classPrivateFieldGet7.default)(this, _hot).getActiveEditor()) !== null && _classPrivateFieldGet5 !== void 0 && _classPrivateFieldGet5.isOpened()) && !!refocusElement) {
65857
+ if (!(0, _classPrivateFieldGet7.default)(this, _debouncedSelect).has(delay)) {
65858
+ (0, _classPrivateFieldGet7.default)(this, _debouncedSelect).set(delay, (0, _function.debounce)(() => {
65859
+ refocusElement.select();
65860
+ }, delay));
65861
+ }
65862
+ (0, _classPrivateFieldGet7.default)(this, _debouncedSelect).get(delay)();
65840
65863
  }
65841
65864
  }
65842
65865
  }
65843
65866
  exports.FocusManager = FocusManager;
65844
- function _getCurrentHighlightCoords2() {
65845
- const lastSelectedRange = (0, _classPrivateFieldGet5.default)(this, _hot).getSelectedRangeLast();
65846
- return lastSelectedRange.highlight;
65867
+ function _getSelectedCell2(callback) {
65868
+ var _classPrivateFieldGet6;
65869
+ const highlight = (_classPrivateFieldGet6 = (0, _classPrivateFieldGet7.default)(this, _hot).getSelectedRangeLast()) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.highlight;
65870
+ if (!highlight) {
65871
+ callback(null);
65872
+ return;
65873
+ }
65874
+ const cell = (0, _classPrivateFieldGet7.default)(this, _hot).getCell(highlight.row, highlight.col, true);
65875
+ if (cell === null) {
65876
+ (0, _classPrivateFieldGet7.default)(this, _hot).addHookOnce('afterScroll', () => {
65877
+ callback((0, _classPrivateFieldGet7.default)(this, _hot).getCell(highlight.row, highlight.col, true));
65878
+ });
65879
+ } else {
65880
+ callback(cell);
65881
+ }
65847
65882
  }
65848
- function _getSelectedCell2() {
65849
- const selectedCellCoords = _classPrivateMethodGet(this, _getCurrentHighlightCoords, _getCurrentHighlightCoords2).call(this);
65850
- return (0, _classPrivateFieldGet5.default)(this, _hot).getCell(selectedCellCoords.row, selectedCellCoords.col, true);
65883
+ function _focusCell2() {
65884
+ _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this, selectedCell => {
65885
+ const {
65886
+ activeElement
65887
+ } = (0, _classPrivateFieldGet7.default)(this, _hot).rootDocument;
65888
+
65889
+ // Blurring the `activeElement` removes the unwanted border around the focusable element (#6877)
65890
+ // and resets the `document.activeElement` property. The blurring should happen only when the
65891
+ // previously selected input element has not belonged to the Handsontable editor. If blurring is
65892
+ // triggered for all elements, there is a problem with the disappearing IME editor (#9672).
65893
+ if (activeElement && (0, _element.isOutsideInput)(activeElement)) {
65894
+ activeElement.blur();
65895
+ }
65896
+ this.focusOnHighlightedCell(selectedCell);
65897
+ });
65851
65898
  }
65852
- function _manageFocus2() {
65853
- const selectedCell = _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this);
65854
- const {
65855
- activeElement
65856
- } = (0, _classPrivateFieldGet5.default)(this, _hot).rootDocument;
65857
-
65858
- // Blurring the `activeElement` removes the unwanted border around the focusable element (#6877)
65859
- // and resets the `document.activeElement` property. The blurring should happen only when the
65860
- // previously selected input element has not belonged to the Handsontable editor. If blurring is
65861
- // triggered for all elements, there is a problem with the disappearing IME editor (#9672).
65862
- if (activeElement && (0, _element.isOutsideInput)(activeElement)) {
65863
- activeElement.blur();
65864
- }
65865
- this.focusOnHighlightedCell(selectedCell);
65866
- if (this.getFocusMode() === FOCUS_MODES.MIXED && selectedCell.nodeName === 'TD') {
65867
- (0, _classPrivateFieldGet5.default)(this, _hot).addHookOnce('afterSelectionEnd', () => {
65899
+ function _focusEditorElement2() {
65900
+ _classPrivateMethodGet(this, _getSelectedCell, _getSelectedCell2).call(this, selectedCell => {
65901
+ if (this.getFocusMode() === FOCUS_MODES.MIXED && selectedCell.nodeName === 'TD') {
65868
65902
  this.refocusToEditorTextarea();
65869
- });
65870
- }
65903
+ }
65904
+ });
65871
65905
  }
65872
65906
  function _onUpdateSettings2(newSettings) {
65873
65907
  if (newSettings.imeFastEdit && this.getFocusMode() !== FOCUS_MODES.MIXED) {
@@ -73868,7 +73902,10 @@ class ColumnHeadersRenderer extends _base.default {
73868
73902
  // Remove all accessibility-related attributes for the header to start fresh.
73869
73903
  (0, _element.removeAttribute)(TH, [new RegExp('aria-(.*)'), new RegExp('role')]);
73870
73904
  if (this.table.isAriaEnabled()) {
73871
- (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_COLINDEX)(renderedColumnIndex + 1 + this.table.rowHeadersCount), (0, _a11y.A11Y_TABINDEX)(-1), (0, _a11y.A11Y_COLUMNHEADER)(), ...(renderedColumnIndex >= 0 ? [(0, _a11y.A11Y_SCOPE_COL)()] : [])]);
73905
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_COLINDEX)(renderedColumnIndex + 1 + this.table.rowHeadersCount), (0, _a11y.A11Y_TABINDEX)(-1), (0, _a11y.A11Y_COLUMNHEADER)(), ...(renderedColumnIndex >= 0 ? [(0, _a11y.A11Y_SCOPE_COL)()] : [
73906
+ // Adding `role=row` to the corner headers to prevent
73907
+ // https://github.com/handsontable/dev-handsontable/issues/1574
73908
+ (0, _a11y.A11Y_ROW)()])]);
73872
73909
  }
73873
73910
  columnHeaderFunctions[rowHeaderIndex](sourceColumnIndex, TH, rowHeaderIndex);
73874
73911
  }
@@ -95339,6 +95376,7 @@ const getKeysList = normalizedKeys => {
95339
95376
  */
95340
95377
  exports.getKeysList = getKeysList;
95341
95378
  const codeToKeyRegExp = new RegExp('^(?:Key|Digit)([A-Z0-9])$');
95379
+ const keyCodeNames = new Set(['Backquote', 'Minus', 'Equal', 'BracketLeft', 'BracketRight', 'Backslash', 'Semicolon', 'Quote', 'Comma', 'Period', 'Slash']);
95342
95380
 
95343
95381
  /**
95344
95382
  * Normalizes a keyboard event key value to a key before its modification. When the keyboard event
@@ -95355,7 +95393,13 @@ const normalizeEventKey = _ref => {
95355
95393
  key,
95356
95394
  code
95357
95395
  } = _ref;
95358
- return (codeToKeyRegExp.test(code) ? code.replace(codeToKeyRegExp, '$1') : key).toLowerCase();
95396
+ let normalizedKey = key;
95397
+ if (codeToKeyRegExp.test(code)) {
95398
+ normalizedKey = code.replace(codeToKeyRegExp, '$1');
95399
+ } else if (keyCodeNames.has(code)) {
95400
+ normalizedKey = code;
95401
+ }
95402
+ return normalizedKey.toLowerCase();
95359
95403
  };
95360
95404
  exports.normalizeEventKey = normalizeEventKey;
95361
95405
 
@@ -110943,7 +110987,7 @@ class ContextMenu extends _base.BasePlugin {
110943
110987
  */
110944
110988
  registerShortcuts() {
110945
110989
  this.hot.getShortcutManager().getContext('grid').addShortcut({
110946
- keys: [['Control/Meta', 'Shift', '\\'], ['Shift', 'F10']],
110990
+ keys: [['Control/Meta', 'Shift', 'Backslash'], ['Shift', 'F10']],
110947
110991
  callback: () => {
110948
110992
  const {
110949
110993
  highlight
@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 14.0.0-next-88de277-20231127
29
- * Release date: 29/11/2023 (built at 27/11/2023 10:19:52)
28
+ * Version: 14.0.0-next-8492c6c-20231128
29
+ * Release date: 29/11/2023 (built at 28/11/2023 14:01:40)
30
30
  */.handsontable .table td,.handsontable .table th{border-top:none}.handsontable tr{background:#fff}.handsontable td{background-color:inherit}.handsontable .table caption+thead tr:first-child td,.handsontable .table caption+thead tr:first-child th,.handsontable .table colgroup+thead tr:first-child td,.handsontable .table colgroup+thead tr:first-child th,.handsontable .table thead:first-child tr:first-child td,.handsontable .table thead:first-child tr:first-child th{border-top:1px solid #ccc}.handsontable .table-bordered{border:0;border-collapse:separate}.handsontable .table-bordered td,.handsontable .table-bordered th{border-left:none}.handsontable .table-bordered td:first-child,.handsontable .table-bordered th:first-child{border-left:1px solid #ccc}.handsontable .table>tbody>tr>td,.handsontable .table>tbody>tr>th,.handsontable .table>tfoot>tr>td,.handsontable .table>tfoot>tr>th,.handsontable .table>thead>tr>td,.handsontable .table>thead>tr>th{line-height:21px;padding:0}.col-lg-1.handsontable,.col-lg-10.handsontable,.col-lg-11.handsontable,.col-lg-12.handsontable,.col-lg-2.handsontable,.col-lg-3.handsontable,.col-lg-4.handsontable,.col-lg-5.handsontable,.col-lg-6.handsontable,.col-lg-7.handsontable,.col-lg-8.handsontable,.col-lg-9.handsontable,.col-md-1.handsontable,.col-md-10.handsontable,.col-md-11.handsontable,.col-md-12.handsontable,.col-md-2.handsontable,.col-md-3.handsontable,.col-md-4.handsontable,.col-md-5.handsontable,.col-md-6.handsontable,.col-md-7.handsontable,.col-md-8.handsontable,.col-md-9.handsontable .col-sm-1.handsontable,.col-sm-10.handsontable,.col-sm-11.handsontable,.col-sm-12.handsontable,.col-sm-2.handsontable,.col-sm-3.handsontable,.col-sm-4.handsontable,.col-sm-5.handsontable,.col-sm-6.handsontable,.col-sm-7.handsontable,.col-sm-8.handsontable,.col-sm-9.handsontable .col-xs-1.handsontable,.col-xs-10.handsontable,.col-xs-11.handsontable,.col-xs-12.handsontable,.col-xs-2.handsontable,.col-xs-3.handsontable,.col-xs-4.handsontable,.col-xs-5.handsontable,.col-xs-6.handsontable,.col-xs-7.handsontable,.col-xs-8.handsontable,.col-xs-9.handsontable{padding-left:0;padding-right:0}.handsontable .table-striped>tbody>tr:nth-of-type(2n){background-color:#fff}.handsontable{position:relative}.handsontable .hide{display:none}.handsontable .relative{position:relative}.handsontable .wtHider{width:0}.handsontable .wtSpreader{height:auto;position:relative;width:0}.handsontable div,.handsontable input,.handsontable table,.handsontable tbody,.handsontable td,.handsontable textarea,.handsontable th,.handsontable thead{box-sizing:content-box;-webkit-box-sizing:content-box;-moz-box-sizing:content-box}.handsontable input,.handsontable textarea{min-height:auto}.handsontable table.htCore{border-collapse:separate;border-spacing:0;border-width:0;cursor:default;margin:0;max-height:none;max-width:none;outline-width:0;table-layout:fixed;width:0}.handsontable col,.handsontable col.rowHeader{width:50px}.handsontable td,.handsontable th{background-color:#fff;border-bottom:1px solid #ccc;border-left-width:0;border-right:1px solid #ccc;border-top-width:0;empty-cells:show;height:22px;line-height:21px;outline:none;outline-width:0;overflow:hidden;padding:0 4px;vertical-align:top;white-space:pre-wrap}[dir=rtl].handsontable td,[dir=rtl].handsontable th{border-left:1px solid #ccc;border-right-width:0}.handsontable th:last-child{border-bottom:1px solid #ccc;border-left:none;border-right:1px solid #ccc}[dir=rtl].handsontable th:last-child{border-left:1px solid #ccc;border-right:none}.handsontable td:first-of-type,.handsontable th:first-child,.handsontable th:nth-child(2){border-left:1px solid #ccc}[dir=rtl].handsontable td:first-of-type,[dir=rtl].handsontable th:first-child,[dir=rtl].handsontable th:nth-child(2){border-right:1px solid #ccc}.handsontable .ht_clone_top th:nth-child(2){border-left-width:0;border-right:1px solid #ccc}[dir=rtl].handsontable .ht_clone_top th:nth-child(2){border-left:1px solid #ccc;border-right-width:0}.handsontable.htRowHeaders thead tr th:nth-child(2){border-left:1px solid #ccc}[dir=rtl].handsontable.htRowHeaders thead tr th:nth-child(2){border-right:1px solid #ccc}.handsontable tr:first-child td,.handsontable tr:first-child th{border-top:1px solid #ccc}.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable tbody tr th,.ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top) thead tr th:first-child{border-left:1px solid #ccc;border-right-width:0}[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable tbody tr th,[dir=rtl].ht_master:not(.innerBorderInlineStart):not(.emptyColumns)~.handsontable:not(.ht_clone_top) thead tr th:first-child{border-left-width:0;border-right:1px solid #ccc}.ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr.lastChild th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr:last-child th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom)~.handsontable thead tr.lastChild th,.ht_master:not(.innerBorderTop):not(.innerBorderBottom)~.handsontable thead tr:last-child th{border-bottom-width:0}.handsontable th{background-color:#f0f0f0;color:#222;font-weight:400;text-align:center;white-space:nowrap}.handsontable thead th{padding:0}.handsontable th.active{background-color:#ccc}.handsontable thead th .relative{padding:2px 4px}.handsontable span.colHeader{display:inline-block;line-height:1.1}.handsontable .wtBorder{font-size:0;position:absolute}.handsontable .wtBorder.hidden{display:none!important}.handsontable .wtBorder.current{z-index:10}.handsontable .wtBorder.area{z-index:8}.handsontable .wtBorder.fill{z-index:6}.handsontable .wtBorder.corner{cursor:crosshair;font-size:0}.ht_clone_master{z-index:100}.ht_clone_inline_start{z-index:120}.ht_clone_bottom{z-index:130}.ht_clone_bottom_inline_start_corner{z-index:150}.ht_clone_top{z-index:160}.ht_clone_top_inline_start_corner{z-index:180}.handsontable col.hidden{width:0!important}.handsontable tr.hidden,.handsontable tr.hidden td,.handsontable tr.hidden th{display:none}.ht_clone_bottom,.ht_clone_inline_start,.ht_clone_top,.ht_master{overflow:hidden}.ht_master .wtHolder{overflow:auto}.handsontable .ht_clone_inline_start thead,.handsontable .ht_master thead,.handsontable .ht_master tr th{visibility:hidden}.ht_clone_bottom .wtHolder,.ht_clone_inline_start .wtHolder,.ht_clone_top .wtHolder{overflow:hidden}.handsontable{color:#373737;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica Neue,Arial,sans-serif;font-size:13px;font-weight:400;touch-action:manipulation}.handsontable a{color:#104acc}.handsontable.htAutoSize{left:-99000px;position:absolute;top:-99000px;visibility:hidden}.handsontable td.htInvalid{background-color:#ffbeba!important}.handsontable td.htNoWrap{white-space:nowrap}.handsontable td.invisibleSelection,.handsontable th.invisibleSelection{outline:none}.handsontable td.invisibleSelection::selection,.handsontable th.invisibleSelection::selection{background:hsla(0,0%,100%,0)}.hot-display-license-info{color:#373737;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Helvetica Neue,Arial,sans-serif;font-size:10px;font-weight:400;padding:5px 0 3px;text-align:left}.hot-display-license-info a{color:#104acc;font-size:10px}.handsontable .htFocusCatcher{border:0;height:0;margin:0;opacity:0;padding:0;position:absolute;width:0;z-index:-1}.handsontable .manualColumnResizer{cursor:col-resize;height:25px;position:absolute;top:0;width:5px;z-index:210}.handsontable .manualRowResizer{cursor:row-resize;height:5px;left:0;position:absolute;width:50px;z-index:210}.handsontable .manualColumnResizer.active,.handsontable .manualColumnResizer:hover,.handsontable .manualRowResizer.active,.handsontable .manualRowResizer:hover{background-color:#34a9db}.handsontable .manualColumnResizerGuide{background-color:#34a9db;border-left:none;border-right:1px dashed #777;display:none;margin-left:5px;margin-right:unset;position:absolute;right:unset;top:0;width:0}[dir=rtl].handsontable .manualColumnResizerGuide{border-left:1px dashed #777;border-right:none;left:unset;margin-left:unset;margin-right:5px}.handsontable .manualRowResizerGuide{background-color:#34a9db;border-bottom:1px dashed #777;bottom:0;display:none;height:0;left:0;margin-top:5px;position:absolute}.handsontable .manualColumnResizerGuide.active,.handsontable .manualRowResizerGuide.active{display:block;z-index:209}.handsontable .columnSorting{position:relative}.handsontable .columnSorting.sortAction:hover{cursor:pointer;text-decoration:underline}.handsontable span.colHeader.columnSorting:before{background-position-x:right;background-repeat:no-repeat;background-size:contain;content:"";height:10px;left:unset;margin-top:-6px;padding-left:8px;padding-right:0;position:absolute;right:-9px;top:50%;width:5px}[dir=rtl].handsontable span.colHeader.columnSorting:before{background-position-x:left;left:-9px;padding-left:0;padding-right:8px;right:unset}.handsontable span.colHeader.columnSorting.ascending:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFNJREFUeAHtzjkSgCAUBNHPgsoy97+ulGXRqJE5L+xkxoYt2UdsLb5bqFINz+aLuuLn5rIu2RkO3fZpWENimNgiw6iBYRTPMLJjGFxQZ1hxxb/xBI1qC8k39CdKAAAAAElFTkSuQmCC)}.handsontable span.colHeader.columnSorting.descending:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFJJREFUeAHtzjkSgCAQRNFmQYUZ7n9dKUvru0TmvPAn3br0QfgdZ5xx6x+rQn23GqTYnq1FDcnuzZIO2WmedVqIRVxgGKEyjNgYRjKGkZ1hFIZ3I70LyM0VtU8AAAAASUVORK5CYII=)}.htGhostTable .htCore span.colHeader.columnSorting:not(.indicatorDisabled):before{content:"*";display:inline-block;padding-right:20px;position:relative}.handsontable td.area,.handsontable td.area-1,.handsontable td.area-2,.handsontable td.area-3,.handsontable td.area-4,.handsontable td.area-5,.handsontable td.area-6,.handsontable td.area-7{position:relative}.handsontable td.area-1:before,.handsontable td.area-2:before,.handsontable td.area-3:before,.handsontable td.area-4:before,.handsontable td.area-5:before,.handsontable td.area-6:before,.handsontable td.area-7:before,.handsontable td.area:before{background:#005eff;bottom:0;bottom:-100%\9;content:"";left:0;position:absolute;right:0;top:0}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.handsontable td.area-1:before,.handsontable td.area-2:before,.handsontable td.area-3:before,.handsontable td.area-4:before,.handsontable td.area-5:before,.handsontable td.area-6:before,.handsontable td.area-7:before,.handsontable td.area:before{bottom:-100%}}.handsontable td.area:before{opacity:.1}.handsontable td.area-1:before{opacity:.2}.handsontable td.area-2:before{opacity:.27}.handsontable td.area-3:before{opacity:.35}.handsontable td.area-4:before{opacity:.41}.handsontable td.area-5:before{opacity:.47}.handsontable td.area-6:before{opacity:.54}.handsontable td.area-7:before{opacity:.58}.handsontable tbody th.current,.handsontable thead th.current{box-shadow:inset 0 0 0 2px #4b89ff}.handsontable tbody th.ht__highlight,.handsontable thead th.ht__highlight{background-color:#dcdcdc}.handsontable tbody th.ht__active_highlight,.handsontable thead th.ht__active_highlight{background-color:#8eb0e7;color:#000}.handsontableInput{background-color:#fff;border:none;border-radius:0;box-shadow:inset 0 0 0 2px #5292f7;color:#000;display:block;font-family:inherit;font-size:inherit;line-height:21px;margin:0;outline-width:0;padding:1px 5px 0;resize:none}.handsontableInput:focus{outline:none}.handsontableInputHolder{left:0;position:absolute;top:0}.htSelectEditor{-webkit-appearance:menulist-button!important;position:absolute;width:auto}.htSelectEditor:focus{outline:none}.handsontable .htDimmed{color:#777}.handsontable .htSubmenu{position:relative}.handsontable .htSubmenu :after{color:#777;content:"▶";font-size:9px;position:absolute;right:5px}[dir=rtl].handsontable .htSubmenu :after{content:""}[dir=rtl].handsontable .htSubmenu :before{color:#777;content:"◀";font-size:9px;left:5px;position:absolute}.handsontable .htLeft{text-align:left}.handsontable .htCenter{text-align:center}.handsontable .htRight{text-align:right}.handsontable .htJustify{text-align:justify}.handsontable .htTop{vertical-align:top}.handsontable .htMiddle{vertical-align:middle}.handsontable .htBottom{vertical-align:bottom}.handsontable .htPlaceholder{color:#999}.handsontable.listbox{margin:0}.handsontable.listbox .ht_master table{background:#fff;border:1px solid #ccc;border-collapse:separate}.handsontable.listbox td,.handsontable.listbox th,.handsontable.listbox tr:first-child td,.handsontable.listbox tr:first-child th,.handsontable.listbox tr:last-child th{border-color:transparent!important}.handsontable.listbox td,.handsontable.listbox th{text-overflow:ellipsis;white-space:nowrap}.handsontable.listbox td.htDimmed{color:inherit;cursor:default;font-style:inherit}.handsontable.listbox .wtBorder{visibility:hidden}.handsontable.listbox tr td.current,.handsontable.listbox tr:hover td{background:#eee}.ht_editor_hidden{z-index:-1}.ht_editor_visible{z-index:200}.handsontable td.htSearchResult{background:#fcedd9;color:#583707}.handsontable .collapsibleIndicator{background:#eee;border:1px solid #a6a6a6;border-radius:10px;-webkit-box-shadow:0 0 0 6px #eee;-moz-box-shadow:0 0 0 6px #eee;box-shadow:0 0 0 3px #eee;color:#222;cursor:pointer;font-size:10px;height:10px;left:unset;line-height:8px;position:absolute;right:5px;text-align:center;top:50%;transform:translateY(-50%);width:10px}[dir=rtl].handsontable .collapsibleIndicator{left:5px;right:unset}.handsontable.mobile,.handsontable.mobile .wtHolder{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-overflow-scrolling:touch;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.handsontable.mobile .handsontableInput:focus{-webkit-appearance:none;-webkit-box-shadow:inset 0 0 0 2px #5292f7;-moz-box-shadow:inset 0 0 0 2px #5292f7;box-shadow:inset 0 0 0 2px #5292f7}.handsontable .bottomSelectionHandle,.handsontable .bottomSelectionHandle-HitArea,.handsontable .topSelectionHandle,.handsontable .topSelectionHandle-HitArea{left:-10000px;right:unset;top:-10000px;z-index:9999}[dir=rtl].handsontable .bottomSelectionHandle,[dir=rtl].handsontable .bottomSelectionHandle-HitArea,[dir=rtl].handsontable .topSelectionHandle,[dir=rtl].handsontable .topSelectionHandle-HitArea{left:unset;right:-10000px}.handsontable.hide-tween{-webkit-animation:opacity-hide .3s;animation:opacity-hide .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}.handsontable.show-tween{-webkit-animation:opacity-show .3s;animation:opacity-show .3s;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}
31
31
  /*!
32
32
  * Pikaday