handsontable 0.0.0-next-e54c3d6-20231026 → 0.0.0-next-42d5bd7-20231027

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.

Files changed (63) hide show
  1. package/3rdparty/walkontable/src/renderer/columnHeaders.js +3 -0
  2. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +4 -1
  3. package/3rdparty/walkontable/src/renderer/rowHeaders.js +3 -0
  4. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +4 -1
  5. package/base.js +2 -2
  6. package/base.mjs +2 -2
  7. package/core.js +1 -1
  8. package/core.mjs +1 -1
  9. package/dist/handsontable.css +45 -63
  10. package/dist/handsontable.full.css +45 -63
  11. package/dist/handsontable.full.js +253 -24
  12. package/dist/handsontable.full.min.css +5 -5
  13. package/dist/handsontable.full.min.js +105 -105
  14. package/dist/handsontable.js +253 -24
  15. package/dist/handsontable.min.css +5 -5
  16. package/dist/handsontable.min.js +19 -19
  17. package/dist/languages/all.js +24 -2
  18. package/dist/languages/all.min.js +1 -1
  19. package/dist/languages/en-US.js +12 -1
  20. package/dist/languages/en-US.min.js +1 -1
  21. package/dist/languages/pl-PL.js +12 -1
  22. package/dist/languages/pl-PL.min.js +1 -1
  23. package/helpers/a11y.js +2 -0
  24. package/helpers/a11y.mjs +1 -0
  25. package/helpers/dom/element.js +29 -0
  26. package/helpers/dom/element.mjs +28 -0
  27. package/helpers/mixed.js +1 -1
  28. package/helpers/mixed.mjs +1 -1
  29. package/i18n/constants.js +27 -1
  30. package/i18n/constants.mjs +14 -1
  31. package/i18n/languages/en-US.js +12 -1
  32. package/i18n/languages/en-US.mjs +12 -1
  33. package/i18n/languages/pl-PL.js +12 -1
  34. package/i18n/languages/pl-PL.mjs +12 -1
  35. package/languages/all.js +24 -2
  36. package/languages/en-US.js +12 -1
  37. package/languages/en-US.mjs +12 -1
  38. package/languages/index.js +24 -2
  39. package/languages/pl-PL.js +12 -1
  40. package/languages/pl-PL.mjs +12 -1
  41. package/package.json +1 -1
  42. package/plugins/collapsibleColumns/collapsibleColumns.js +3 -2
  43. package/plugins/collapsibleColumns/collapsibleColumns.mjs +4 -3
  44. package/plugins/columnSorting/columnSorting.js +29 -3
  45. package/plugins/columnSorting/columnSorting.mjs +31 -5
  46. package/plugins/contextMenu/menu/menuItemRenderer.js +12 -0
  47. package/plugins/contextMenu/menu/menuItemRenderer.mjs +14 -2
  48. package/plugins/dropdownMenu/dropdownMenu.js +2 -1
  49. package/plugins/dropdownMenu/dropdownMenu.mjs +3 -2
  50. package/plugins/filters/ui/input.js +0 -3
  51. package/plugins/filters/ui/input.mjs +0 -3
  52. package/plugins/filters/ui/select.js +6 -0
  53. package/plugins/filters/ui/select.mjs +6 -0
  54. package/plugins/hiddenColumns/hiddenColumns.js +48 -3
  55. package/plugins/hiddenColumns/hiddenColumns.mjs +47 -2
  56. package/plugins/hiddenRows/hiddenRows.js +48 -3
  57. package/plugins/hiddenRows/hiddenRows.mjs +47 -2
  58. package/plugins/multiColumnSorting/multiColumnSorting.js +21 -0
  59. package/plugins/multiColumnSorting/multiColumnSorting.mjs +22 -1
  60. package/plugins/nestedRows/nestedRows.js +2 -1
  61. package/plugins/nestedRows/nestedRows.mjs +2 -1
  62. package/plugins/nestedRows/ui/headers.js +3 -3
  63. package/plugins/nestedRows/ui/headers.mjs +4 -4
@@ -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: 0.0.0-next-e54c3d6-20231026
29
- * Release date: 31/08/2023 (built at 26/10/2023 20:16:53)
28
+ * Version: 0.0.0-next-42d5bd7-20231027
29
+ * Release date: 31/08/2023 (built at 27/10/2023 07:59:06)
30
30
  */
31
31
  (function webpackUniversalModuleDefinition(root, factory) {
32
32
  if(typeof exports === 'object' && typeof module === 'object')
@@ -42664,8 +42664,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
42664
42664
  Handsontable.CellCoords = _src.CellCoords;
42665
42665
  Handsontable.CellRange = _src.CellRange;
42666
42666
  Handsontable.packageName = 'handsontable';
42667
- Handsontable.buildDate = "26/10/2023 20:16:53";
42668
- Handsontable.version = "0.0.0-next-e54c3d6-20231026";
42667
+ Handsontable.buildDate = "27/10/2023 07:59:06";
42668
+ Handsontable.version = "0.0.0-next-42d5bd7-20231027";
42669
42669
  Handsontable.languages = {
42670
42670
  dictionaryKeys: _registry.dictionaryKeys,
42671
42671
  getLanguageDictionary: _registry.getLanguageDictionary,
@@ -47127,7 +47127,7 @@ function Core(rootElement, userSettings) {
47127
47127
  * @function getTranslatedPhrase
47128
47128
  * @since 0.35.0
47129
47129
  * @param {string} dictionaryKey Constant which is dictionary key.
47130
- * @param {*} extraArguments Arguments which will be handled by formatters.
47130
+ * @param {*} [extraArguments] Arguments which will be handled by formatters.
47131
47131
  * @returns {string}
47132
47132
  */
47133
47133
  this.getTranslatedPhrase = function (dictionaryKey, extraArguments) {
@@ -49653,6 +49653,7 @@ module.exports = typeof Bun == 'function' && Bun && typeof Bun.version == 'strin
49653
49653
  exports.__esModule = true;
49654
49654
  exports.addClass = addClass;
49655
49655
  exports.addEvent = addEvent;
49656
+ exports.appendElement = appendElement;
49656
49657
  exports.clearTextSelection = clearTextSelection;
49657
49658
  exports.closest = closest;
49658
49659
  exports.closestDown = closestDown;
@@ -50788,6 +50789,34 @@ function runWithSelectedContendEditableElement(element, callback) {
50788
50789
  removeContentEditableFromElementAndDeselect(element, invisibleSelection);
50789
50790
  }
50790
50791
 
50792
+ /**
50793
+ * Creates a new DOM element and appends it to the parent element with the provided class name(s) and attributes.
50794
+ *
50795
+ * @param {HTMLElement} parentElement The parent element.
50796
+ * @param {object} properties The properties object.
50797
+ * @param {string} properties.tagName The type of the new element.
50798
+ * @param {string|string[]} properties.className Class name as string or array of strings.
50799
+ * @param {Array[]} properties.attributes An array containing the attributes to be added. Each element of the array
50800
+ * should be an array in a form of `[attributeName, attributeValue]`.
50801
+ * @returns {HTMLElement} The created div element.
50802
+ */
50803
+ function appendElement(parentElement, _ref) {
50804
+ let {
50805
+ tagName,
50806
+ className,
50807
+ attributes
50808
+ } = _ref;
50809
+ const element = parentElement.ownerDocument.createElement(tagName);
50810
+ if (className) {
50811
+ addClass(element, className);
50812
+ }
50813
+ if (attributes && attributes.length) {
50814
+ setAttribute(element, attributes);
50815
+ }
50816
+ parentElement.appendChild(element);
50817
+ return element;
50818
+ }
50819
+
50791
50820
  /***/ }),
50792
50821
  /* 303 */
50793
50822
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -52766,7 +52795,7 @@ const domMessages = {
52766
52795
  function _injectProductInfo(key, element) {
52767
52796
  const hasValidType = !isEmpty(key);
52768
52797
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
52769
- const hotVersion = "0.0.0-next-e54c3d6-20231026";
52798
+ const hotVersion = "0.0.0-next-42d5bd7-20231027";
52770
52799
  let keyValidityDate;
52771
52800
  let consoleMessageState = 'invalid';
52772
52801
  let domMessageState = 'invalid';
@@ -60042,6 +60071,8 @@ const A11Y_TEXT = () => ['type', 'text'];
60042
60071
  exports.A11Y_TEXT = A11Y_TEXT;
60043
60072
  const A11Y_LABEL = val => ['aria-label', val];
60044
60073
  exports.A11Y_LABEL = A11Y_LABEL;
60074
+ const A11Y_DESCRIPTION = val => ['aria-description', val];
60075
+ exports.A11Y_DESCRIPTION = A11Y_DESCRIPTION;
60045
60076
  const A11Y_HIDDEN = () => ['aria-hidden', 'true'];
60046
60077
  exports.A11Y_HIDDEN = A11Y_HIDDEN;
60047
60078
  const A11Y_DISABLED = () => ['aria-disabled', 'true'];
@@ -73294,6 +73325,9 @@ class RowHeadersRenderer extends _base.default {
73294
73325
  const TH = orderView.getCurrentNode();
73295
73326
  TH.className = '';
73296
73327
  TH.removeAttribute('style');
73328
+
73329
+ // Remove all accessibility-related attributes for the header to start fresh.
73330
+ (0, _element.removeAttribute)(TH, [new RegExp('aria-(.*)'), new RegExp('role')]);
73297
73331
  if (this.table.isAriaEnabled()) {
73298
73332
  (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_ROWHEADER)(), (0, _a11y.A11Y_SCOPE_ROW)(), (0, _a11y.A11Y_COLINDEX)(visibleColumnIndex + 1), (0, _a11y.A11Y_TABINDEX)(-1)]);
73299
73333
  }
@@ -74011,6 +74045,9 @@ class ColumnHeadersRenderer extends _base.default {
74011
74045
  const TH = TR.childNodes[renderedColumnIndex + rowHeadersCount];
74012
74046
  TH.className = '';
74013
74047
  TH.removeAttribute('style');
74048
+
74049
+ // Remove all accessibility-related attributes for the header to start fresh.
74050
+ (0, _element.removeAttribute)(TH, [new RegExp('aria-(.*)'), new RegExp('role')]);
74014
74051
  if (this.table.isAriaEnabled()) {
74015
74052
  (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_COLINDEX)(renderedColumnIndex + 1 + this.table.rowHeadersCount), (0, _a11y.A11Y_TABINDEX)(-1), ...(renderedColumnIndex < 0 ? [(0, _a11y.A11Y_PRESENTATION)()] : [(0, _a11y.A11Y_COLUMNHEADER)(), (0, _a11y.A11Y_SCOPE_COL)()])]);
74016
74053
  }
@@ -83258,7 +83295,18 @@ const dictionary = {
83258
83295
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',
83259
83296
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value',
83260
83297
  [C.CHECKBOX_CHECKED]: 'Checked',
83261
- [C.CHECKBOX_UNCHECKED]: 'Unchecked'
83298
+ [C.CHECKBOX_UNCHECKED]: 'Unchecked',
83299
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Press ENTER to expand column.',
83300
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Press ENTER to collapse column.',
83301
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Press ENTER to change sorting.',
83302
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Multi-column sorting order:',
83303
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Press CTRL/CMD+ENTER to open menu.',
83304
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'The next column is hidden.',
83305
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'The previous column is hidden.',
83306
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Press ENTER to expand row.',
83307
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Press ENTER to collapse row.',
83308
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'The next row is hidden.',
83309
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'The previous row is hidden.'
83262
83310
  };
83263
83311
  var _default = dictionary;
83264
83312
  exports["default"] = _default;
@@ -83442,6 +83490,32 @@ const CHECKBOX_CHECKED = `${CHECKBOX_RENDERER_NAMESPACE}checked`;
83442
83490
  exports.CHECKBOX_CHECKED = CHECKBOX_CHECKED;
83443
83491
  const CHECKBOX_UNCHECKED = `${CHECKBOX_RENDERER_NAMESPACE}unchecked`;
83444
83492
  exports.CHECKBOX_UNCHECKED = CHECKBOX_UNCHECKED;
83493
+ const COLUMN_HEADER_NAMESPACE = 'ColumnHeader:';
83494
+ exports.COLUMN_HEADER_NAMESPACE = COLUMN_HEADER_NAMESPACE;
83495
+ const COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN = `${COLUMN_HEADER_NAMESPACE}description.expandColumn`;
83496
+ exports.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN = COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN;
83497
+ const COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN = `${COLUMN_HEADER_NAMESPACE}description.collapseColumn`;
83498
+ exports.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN = COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN;
83499
+ const COLUMN_HEADER_DESCRIPTION_SORT_ROWS = `${COLUMN_HEADER_NAMESPACE}description.sortRows`;
83500
+ exports.COLUMN_HEADER_DESCRIPTION_SORT_ROWS = COLUMN_HEADER_DESCRIPTION_SORT_ROWS;
83501
+ const COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER = `${COLUMN_HEADER_NAMESPACE}label.multiColumnSortOrder`;
83502
+ exports.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER = COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER;
83503
+ const COLUMN_HEADER_LABEL_OPEN_MENU = `${COLUMN_HEADER_NAMESPACE}label.openMenu`;
83504
+ exports.COLUMN_HEADER_LABEL_OPEN_MENU = COLUMN_HEADER_LABEL_OPEN_MENU;
83505
+ const COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN = `${COLUMN_HEADER_NAMESPACE}label.beforeHiddenColumn`;
83506
+ exports.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN = COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN;
83507
+ const COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN = `${COLUMN_HEADER_NAMESPACE}label.afterHiddenColumn`;
83508
+ exports.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN = COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN;
83509
+ const ROW_HEADER_NAMESPACE = 'RowHeader:';
83510
+ exports.ROW_HEADER_NAMESPACE = ROW_HEADER_NAMESPACE;
83511
+ const ROW_HEADER_DESCRIPTION_EXPAND_ROW = `${ROW_HEADER_NAMESPACE}description.expandRow`;
83512
+ exports.ROW_HEADER_DESCRIPTION_EXPAND_ROW = ROW_HEADER_DESCRIPTION_EXPAND_ROW;
83513
+ const ROW_HEADER_DESCRIPTION_COLLAPSE_ROW = `${ROW_HEADER_NAMESPACE}description.collapseRow`;
83514
+ exports.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW = ROW_HEADER_DESCRIPTION_COLLAPSE_ROW;
83515
+ const ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW = `${ROW_HEADER_NAMESPACE}label.beforeHiddenRow`;
83516
+ exports.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW = ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW;
83517
+ const ROW_HEADER_LABEL_AFTER_HIDDEN_ROW = `${ROW_HEADER_NAMESPACE}label.afterHiddenRow`;
83518
+ exports.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW = ROW_HEADER_LABEL_AFTER_HIDDEN_ROW;
83445
83519
 
83446
83520
  /***/ }),
83447
83521
  /* 582 */
@@ -105471,6 +105545,7 @@ var _element = __webpack_require__(302);
105471
105545
  var _eventManager = _interopRequireDefault(__webpack_require__(458));
105472
105546
  var _event = __webpack_require__(453);
105473
105547
  var _a11y = __webpack_require__(445);
105548
+ var _constants = __webpack_require__(581);
105474
105549
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
105475
105550
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
105476
105551
  const PLUGIN_KEY = 'collapsibleColumns';
@@ -105971,7 +106046,7 @@ class CollapsibleColumns extends _base.BasePlugin {
105971
106046
 
105972
106047
  // Add ARIA tags
105973
106048
  if (isAriaTagsEnabled) {
105974
- (0, _element.setAttribute)(TH, ...(0, _a11y.A11Y_EXPANDED)(false));
106049
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(false), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN))]);
105975
106050
  }
105976
106051
  } else {
105977
106052
  (0, _element.addClass)(collapsibleElement, 'expanded');
@@ -105979,7 +106054,7 @@ class CollapsibleColumns extends _base.BasePlugin {
105979
106054
 
105980
106055
  // Add ARIA tags
105981
106056
  if (isAriaTagsEnabled) {
105982
- (0, _element.setAttribute)(TH, ...(0, _a11y.A11Y_EXPANDED)(true));
106057
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(true), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN))]);
105983
106058
  }
105984
106059
  }
105985
106060
  if (isAriaTagsEnabled) {
@@ -106084,6 +106159,7 @@ var _domHelpers = __webpack_require__(778);
106084
106159
  var _rootComparator = __webpack_require__(779);
106085
106160
  var _sortService = __webpack_require__(780);
106086
106161
  var _a11y = __webpack_require__(445);
106162
+ var _constants = __webpack_require__(581);
106087
106163
  const PLUGIN_KEY = 'columnSorting';
106088
106164
  exports.PLUGIN_KEY = PLUGIN_KEY;
106089
106165
  const PLUGIN_PRIORITY = 50;
@@ -106093,6 +106169,7 @@ exports.APPEND_COLUMN_CONFIG_STRATEGY = APPEND_COLUMN_CONFIG_STRATEGY;
106093
106169
  const REPLACE_COLUMN_CONFIG_STRATEGY = 'replace';
106094
106170
  exports.REPLACE_COLUMN_CONFIG_STRATEGY = REPLACE_COLUMN_CONFIG_STRATEGY;
106095
106171
  const SHORTCUTS_GROUP = PLUGIN_KEY;
106172
+ const SORTING_INDICATOR_CLASS = 'columnSortingIndicator';
106096
106173
  (0, _sortService.registerRootComparator)(PLUGIN_KEY, _rootComparator.rootComparator);
106097
106174
  _pluginHooks.default.getSingleton().register('beforeColumnSort');
106098
106175
  _pluginHooks.default.getSingleton().register('afterColumnSort');
@@ -106711,12 +106788,14 @@ class ColumnSorting extends _base.BasePlugin {
106711
106788
  return;
106712
106789
  }
106713
106790
  const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];
106791
+ const ariaTags = this.hot.getSettings().ariaTags;
106714
106792
  const showSortIndicator = pluginSettingsForColumn.indicator;
106715
106793
  const headerActionEnabled = pluginSettingsForColumn.headerAction;
106794
+ const currentSortState = this.columnStatesManager.getSortOrderOfColumn(column);
106716
106795
  this.updateHeaderClasses(headerSpanElement, this.columnStatesManager, column, showSortIndicator, headerActionEnabled);
106717
- if (this.hot.getSettings().ariaTags) {
106718
- const currentSortState = this.columnStatesManager.getSortOrderOfColumn(column);
106719
- (0, _element.setAttribute)(TH, ...(0, _a11y.A11Y_SORT)(currentSortState ? `${currentSortState}ending` : 'none'));
106796
+ this.updateSortingIndicator(column, headerSpanElement);
106797
+ if (ariaTags) {
106798
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_SORT)(currentSortState ? `${currentSortState}ending` : 'none'), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_DESCRIPTION_SORT_ROWS))]);
106720
106799
  }
106721
106800
  }
106722
106801
 
@@ -106737,6 +106816,28 @@ class ColumnSorting extends _base.BasePlugin {
106737
106816
  }
106738
106817
  }
106739
106818
 
106819
+ /**
106820
+ * Update sorting indicator.
106821
+ *
106822
+ * @private
106823
+ * @param {number} column Visual column index.
106824
+ * @param {HTMLElement} headerSpanElement Header span element.
106825
+ */
106826
+ updateSortingIndicator(column, headerSpanElement) {
106827
+ const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];
106828
+ const ariaTags = this.hot.getSettings().ariaTags;
106829
+ const showSortIndicator = pluginSettingsForColumn.indicator;
106830
+ const isColumnSorted = this.columnStatesManager.isColumnSorted(column);
106831
+ const indicatorElement = headerSpanElement.querySelector(`.${SORTING_INDICATOR_CLASS}`);
106832
+ if (showSortIndicator && isColumnSorted && !indicatorElement) {
106833
+ (0, _element.appendElement)(headerSpanElement, {
106834
+ tagName: 'div',
106835
+ className: SORTING_INDICATOR_CLASS,
106836
+ attributes: ariaTags ? [(0, _a11y.A11Y_HIDDEN)()] : []
106837
+ });
106838
+ }
106839
+ }
106840
+
106740
106841
  /**
106741
106842
  * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called
106742
106843
  * for `updateSettings` in specific situations.
@@ -113264,6 +113365,8 @@ exports.createMenuItemRenderer = createMenuItemRenderer;
113264
113365
  var _utils = __webpack_require__(826);
113265
113366
  var _element = __webpack_require__(302);
113266
113367
  var _a11y = __webpack_require__(445);
113368
+ const SUBMENU_INDICATOR_CLASSNAME = 'submenuIndicator';
113369
+
113267
113370
  /**
113268
113371
  * Creates the menu renderer function.
113269
113372
  *
@@ -113296,6 +113399,16 @@ function createMenuItemRenderer(mainTableHot) {
113296
113399
  const isFocusable = !(0, _utils.isItemDisabled)(item, mainTableHot) && !(0, _utils.isItemSelectionDisabled)(item) && !(0, _utils.isItemSeparator)(item);
113297
113400
  (0, _element.setAttribute)(TD, [(0, _a11y.A11Y_MENU_ITEM)(), (0, _a11y.A11Y_LABEL)(itemValue), ...(isFocusable ? [(0, _a11y.A11Y_TABINDEX)(-1)] : []), ...((0, _utils.isItemDisabled)(item, mainTableHot) ? [(0, _a11y.A11Y_DISABLED)()] : []), ...((0, _utils.isItemSubMenu)(item) ? [(0, _a11y.A11Y_EXPANDED)(false)] : [])]);
113298
113401
  }
113402
+ if ((0, _utils.isItemSubMenu)(item)) {
113403
+ const submenuIndicatorElement = TD.querySelector('.submenuIndicator');
113404
+ if (!submenuIndicatorElement) {
113405
+ (0, _element.appendElement)(TD, {
113406
+ tagName: 'div',
113407
+ attributes: mainTableHot.getSettings().ariaTags ? [(0, _a11y.A11Y_HIDDEN)()] : [],
113408
+ className: SUBMENU_INDICATOR_CLASSNAME
113409
+ });
113410
+ }
113411
+ }
113299
113412
  TD.className = '';
113300
113413
  TD.appendChild(wrapper);
113301
113414
  if ((0, _utils.isItemSeparator)(item)) {
@@ -116828,6 +116941,7 @@ var _menu = __webpack_require__(820);
116828
116941
  var _pluginHooks = _interopRequireDefault(__webpack_require__(455));
116829
116942
  var _predefinedItems = __webpack_require__(795);
116830
116943
  __webpack_require__(857);
116944
+ var _constants = __webpack_require__(581);
116831
116945
  var _a11y = __webpack_require__(445);
116832
116946
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
116833
116947
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
@@ -117253,7 +117367,7 @@ class DropdownMenu extends _base.BasePlugin {
117253
117367
  button.type = 'button';
117254
117368
  button.tabIndex = -1;
117255
117369
  if (this.hot.getSettings().ariaTags) {
117256
- (0, _element.setAttribute)(button, [(0, _a11y.A11Y_HIDDEN)()]);
117370
+ (0, _element.setAttribute)(button, [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_LABEL_OPEN_MENU))]);
117257
117371
  (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_HASPOPUP)('menu')]);
117258
117372
  }
117259
117373
 
@@ -120553,11 +120667,8 @@ class InputUI extends _base.BaseUI {
120553
120667
  */
120554
120668
  build() {
120555
120669
  super.build();
120556
- const icon = this.hot.rootDocument.createElement('div');
120557
120670
  (0, _classPrivateFieldSet2.default)(this, _input, this._element.firstChild);
120558
120671
  (0, _element.addClass)(this._element, 'htUIInput');
120559
- (0, _element.addClass)(icon, 'htUIInputIcon');
120560
- this._element.appendChild(icon);
120561
120672
  this.update();
120562
120673
  }
120563
120674
 
@@ -120823,9 +120934,11 @@ var _classPrivateFieldGet2 = _interopRequireDefault(__webpack_require__(460));
120823
120934
  var _menu2 = __webpack_require__(820);
120824
120935
  var _object = __webpack_require__(448);
120825
120936
  var _array = __webpack_require__(444);
120937
+ var _element = __webpack_require__(302);
120826
120938
  var C = _interopRequireWildcard(__webpack_require__(581));
120827
120939
  var _predefinedItems = __webpack_require__(795);
120828
120940
  var _base = __webpack_require__(899);
120941
+ var _a11y = __webpack_require__(445);
120829
120942
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
120830
120943
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
120831
120944
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
@@ -120982,6 +121095,10 @@ class SelectUI extends _base.BaseUI {
120982
121095
  (0, _classPrivateFieldSet2.default)(this, _caption, caption);
120983
121096
  (0, _classPrivateFieldSet2.default)(this, _captionElement, caption.element);
120984
121097
  (0, _classPrivateFieldSet2.default)(this, _dropdown, dropdown);
121098
+ if (this.hot.getSettings().ariaTags) {
121099
+ (0, _element.setAttribute)(dropdown.element, [(0, _a11y.A11Y_HIDDEN)()]);
121100
+ (0, _element.setAttribute)(this._element, [(0, _a11y.A11Y_LISTBOX)()]);
121101
+ }
120985
121102
  (0, _array.arrayEach)([caption, dropdown], element => this._element.appendChild(element.element));
120986
121103
  (0, _classPrivateFieldGet2.default)(this, _menu).addLocalHook('select', command => _classPrivateMethodGet(this, _onMenuSelect, _onMenuSelect2).call(this, command));
120987
121104
  (0, _classPrivateFieldGet2.default)(this, _menu).addLocalHook('afterClose', () => _classPrivateMethodGet(this, _onMenuClosed, _onMenuClosed2).call(this));
@@ -125262,9 +125379,13 @@ var _pluginHooks = _interopRequireDefault(__webpack_require__(455));
125262
125379
  var _hideColumn = _interopRequireDefault(__webpack_require__(922));
125263
125380
  var _showColumn = _interopRequireDefault(__webpack_require__(923));
125264
125381
  var _translations = __webpack_require__(557);
125382
+ var _a11y = __webpack_require__(445);
125383
+ var _constants = __webpack_require__(581);
125265
125384
  __webpack_require__(924);
125385
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
125266
125386
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
125267
125387
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
125388
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
125268
125389
  _pluginHooks.default.getSingleton().register('beforeHideColumns');
125269
125390
  _pluginHooks.default.getSingleton().register('afterHideColumns');
125270
125391
  _pluginHooks.default.getSingleton().register('beforeUnhideColumns');
@@ -125272,6 +125393,9 @@ _pluginHooks.default.getSingleton().register('afterUnhideColumns');
125272
125393
  const PLUGIN_KEY = 'hiddenColumns';
125273
125394
  exports.PLUGIN_KEY = PLUGIN_KEY;
125274
125395
  const PLUGIN_PRIORITY = 310;
125396
+ exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
125397
+ const BEFORE_INDICATOR_CLASSNAME = 'beforeHiddenColumnIndicator';
125398
+ const AFTER_INDICATOR_CLASSNAME = 'afterHiddenColumnIndicator';
125275
125399
 
125276
125400
  /* eslint-disable jsdoc/require-description-complete-sentence */
125277
125401
 
@@ -125379,12 +125503,18 @@ const PLUGIN_PRIORITY = 310;
125379
125503
  * ```
125380
125504
  * :::
125381
125505
  */
125382
- exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
125383
125506
  var _settings = /*#__PURE__*/new WeakMap();
125384
125507
  var _hiddenColumnsMap = /*#__PURE__*/new WeakMap();
125508
+ var _clearIndicatorElements = /*#__PURE__*/new WeakSet();
125385
125509
  class HiddenColumns extends _base.BasePlugin {
125386
125510
  constructor() {
125387
125511
  super(...arguments);
125512
+ /**
125513
+ * Remove the indicator elements from the provided column header element.
125514
+ *
125515
+ * @param {HTMLElement} TH Column header element.
125516
+ */
125517
+ _classPrivateMethodInitSpec(this, _clearIndicatorElements);
125388
125518
  /**
125389
125519
  * Cached plugin settings.
125390
125520
  *
@@ -125468,8 +125598,15 @@ class HiddenColumns extends _base.BasePlugin {
125468
125598
  * Disables the plugin functionality for this Handsontable instance.
125469
125599
  */
125470
125600
  disablePlugin() {
125601
+ const clearColHeader = (columnIndex, TH) => {
125602
+ _classPrivateMethodGet(this, _clearIndicatorElements, _clearIndicatorElements2).call(this, TH);
125603
+ };
125471
125604
  this.hot.columnIndexMapper.unregisterMap(this.pluginName);
125472
125605
  (0, _classPrivateFieldSet2.default)(this, _settings, {});
125606
+ this.hot.addHook('afterGetColHeader', clearColHeader);
125607
+ this.hot.addHookOnce('afterViewRender', () => {
125608
+ this.hot.removeHook('afterGetColHeader', clearColHeader);
125609
+ });
125473
125610
  super.disablePlugin();
125474
125611
  this.resetCellsMeta();
125475
125612
  }
@@ -125611,7 +125748,6 @@ class HiddenColumns extends _base.BasePlugin {
125611
125748
  }
125612
125749
  });
125613
125750
  }
125614
-
125615
125751
  /**
125616
125752
  * Adds the additional column width for the hidden column indicators.
125617
125753
  *
@@ -125716,14 +125852,35 @@ class HiddenColumns extends _base.BasePlugin {
125716
125852
  * @param {HTMLElement} TH Header's TH element.
125717
125853
  */
125718
125854
  onAfterGetColHeader(column, TH) {
125855
+ const areAriaTagsEnabled = this.hot.getSettings().ariaTags;
125856
+ const beforeHiddenColumnIndicatorElement = TH.querySelector('.beforeHiddenColumnIndicator');
125857
+ const afterHiddenColumnIndicatorElement = TH.querySelector('.afterHiddenColumnIndicator');
125719
125858
  if (!(0, _classPrivateFieldGet2.default)(this, _settings).indicators || column < 0) {
125859
+ beforeHiddenColumnIndicatorElement === null || beforeHiddenColumnIndicatorElement === void 0 || beforeHiddenColumnIndicatorElement.remove();
125860
+ afterHiddenColumnIndicatorElement === null || afterHiddenColumnIndicatorElement === void 0 || afterHiddenColumnIndicatorElement.remove();
125720
125861
  return;
125721
125862
  }
125722
125863
  const classList = [];
125723
125864
  if (column >= 1 && this.isHidden(column - 1)) {
125865
+ if (!afterHiddenColumnIndicatorElement) {
125866
+ const attributesToAdd = areAriaTagsEnabled ? [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN))] : [];
125867
+ (0, _element.appendElement)(TH, {
125868
+ tagName: 'div',
125869
+ attributes: attributesToAdd,
125870
+ className: AFTER_INDICATOR_CLASSNAME
125871
+ });
125872
+ }
125724
125873
  classList.push('afterHiddenColumn');
125725
125874
  }
125726
125875
  if (column < this.hot.countCols() - 1 && this.isHidden(column + 1)) {
125876
+ if (!beforeHiddenColumnIndicatorElement) {
125877
+ const attributesToAdd = areAriaTagsEnabled ? [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN))] : [];
125878
+ (0, _element.appendElement)(TH, {
125879
+ tagName: 'div',
125880
+ attributes: attributesToAdd,
125881
+ className: BEFORE_INDICATOR_CLASSNAME
125882
+ });
125883
+ }
125727
125884
  classList.push('beforeHiddenColumn');
125728
125885
  }
125729
125886
  (0, _element.addClass)(TH, classList);
@@ -125762,6 +125919,11 @@ class HiddenColumns extends _base.BasePlugin {
125762
125919
  }
125763
125920
  }
125764
125921
  exports.HiddenColumns = HiddenColumns;
125922
+ function _clearIndicatorElements2(TH) {
125923
+ Array.from(TH.querySelectorAll(`.${AFTER_INDICATOR_CLASSNAME}, .${BEFORE_INDICATOR_CLASSNAME}`)).forEach(element => {
125924
+ element.remove();
125925
+ });
125926
+ }
125765
125927
 
125766
125928
  /***/ }),
125767
125929
  /* 922 */
@@ -125974,9 +126136,13 @@ var _pluginHooks = _interopRequireDefault(__webpack_require__(455));
125974
126136
  var _hideRow = _interopRequireDefault(__webpack_require__(927));
125975
126137
  var _showRow = _interopRequireDefault(__webpack_require__(928));
125976
126138
  var _translations = __webpack_require__(557);
126139
+ var _a11y = __webpack_require__(445);
126140
+ var _constants = __webpack_require__(581);
125977
126141
  __webpack_require__(929);
126142
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
125978
126143
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
125979
126144
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
126145
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
125980
126146
  _pluginHooks.default.getSingleton().register('beforeHideRows');
125981
126147
  _pluginHooks.default.getSingleton().register('afterHideRows');
125982
126148
  _pluginHooks.default.getSingleton().register('beforeUnhideRows');
@@ -125984,6 +126150,9 @@ _pluginHooks.default.getSingleton().register('afterUnhideRows');
125984
126150
  const PLUGIN_KEY = 'hiddenRows';
125985
126151
  exports.PLUGIN_KEY = PLUGIN_KEY;
125986
126152
  const PLUGIN_PRIORITY = 320;
126153
+ exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
126154
+ const AFTER_INDICATOR_CLASSNAME = 'afterHiddenRowIndicator';
126155
+ const BEFORE_INDICATOR_CLASSNAME = 'beforeHiddenRowIndicator';
125987
126156
 
125988
126157
  /* eslint-disable jsdoc/require-description-complete-sentence */
125989
126158
 
@@ -126091,12 +126260,18 @@ const PLUGIN_PRIORITY = 320;
126091
126260
  * ```
126092
126261
  * :::
126093
126262
  */
126094
- exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
126095
126263
  var _settings = /*#__PURE__*/new WeakMap();
126096
126264
  var _hiddenRowsMap = /*#__PURE__*/new WeakMap();
126265
+ var _clearIndicatorElements = /*#__PURE__*/new WeakSet();
126097
126266
  class HiddenRows extends _base.BasePlugin {
126098
126267
  constructor() {
126099
126268
  super(...arguments);
126269
+ /**
126270
+ * Remove the indicator elements from the provided row header element.
126271
+ *
126272
+ * @param {HTMLElement} TH Column header element.
126273
+ */
126274
+ _classPrivateMethodInitSpec(this, _clearIndicatorElements);
126100
126275
  /**
126101
126276
  * Cached settings from Handsontable settings.
126102
126277
  *
@@ -126180,8 +126355,15 @@ class HiddenRows extends _base.BasePlugin {
126180
126355
  * Disables the plugin functionality for this Handsontable instance.
126181
126356
  */
126182
126357
  disablePlugin() {
126358
+ const clearRowHeader = (columnIndex, TH) => {
126359
+ _classPrivateMethodGet(this, _clearIndicatorElements, _clearIndicatorElements2).call(this, TH);
126360
+ };
126183
126361
  this.hot.rowIndexMapper.unregisterMap(this.pluginName);
126184
126362
  (0, _classPrivateFieldSet2.default)(this, _settings, {});
126363
+ this.hot.addHook('afterGetRowHeader', clearRowHeader);
126364
+ this.hot.addHookOnce('afterViewRender', () => {
126365
+ this.hot.removeHook('afterGetRowHeader', clearRowHeader);
126366
+ });
126185
126367
  super.disablePlugin();
126186
126368
  this.resetCellsMeta();
126187
126369
  }
@@ -126320,7 +126502,6 @@ class HiddenRows extends _base.BasePlugin {
126320
126502
  }
126321
126503
  });
126322
126504
  }
126323
-
126324
126505
  /**
126325
126506
  * Adds the additional row height for the hidden row indicators.
126326
126507
  *
@@ -126420,14 +126601,35 @@ class HiddenRows extends _base.BasePlugin {
126420
126601
  * @param {HTMLElement} TH Header's TH element.
126421
126602
  */
126422
126603
  onAfterGetRowHeader(row, TH) {
126604
+ const areAriaTagsEnabled = this.hot.getSettings().ariaTags;
126605
+ const beforeHiddenRowIndicatorElement = TH.querySelector('.beforeHiddenRowIndicator');
126606
+ const afterHiddenRowIndicatorElement = TH.querySelector('.afterHiddenRowIndicator');
126423
126607
  if (!(0, _classPrivateFieldGet2.default)(this, _settings).indicators || row < 0) {
126608
+ beforeHiddenRowIndicatorElement === null || beforeHiddenRowIndicatorElement === void 0 || beforeHiddenRowIndicatorElement.remove();
126609
+ afterHiddenRowIndicatorElement === null || afterHiddenRowIndicatorElement === void 0 || afterHiddenRowIndicatorElement.remove();
126424
126610
  return;
126425
126611
  }
126426
126612
  const classList = [];
126427
126613
  if (row >= 1 && this.isHidden(row - 1)) {
126614
+ if (!afterHiddenRowIndicatorElement) {
126615
+ const attributesToAdd = areAriaTagsEnabled ? [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW))] : [];
126616
+ (0, _element.appendElement)(TH, {
126617
+ tagName: 'div',
126618
+ attributes: attributesToAdd,
126619
+ className: AFTER_INDICATOR_CLASSNAME
126620
+ });
126621
+ }
126428
126622
  classList.push('afterHiddenRow');
126429
126623
  }
126430
126624
  if (row < this.hot.countRows() - 1 && this.isHidden(row + 1)) {
126625
+ if (!beforeHiddenRowIndicatorElement) {
126626
+ const attributesToAdd = areAriaTagsEnabled ? [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW))] : [];
126627
+ (0, _element.appendElement)(TH, {
126628
+ tagName: 'div',
126629
+ attributes: attributesToAdd,
126630
+ className: BEFORE_INDICATOR_CLASSNAME
126631
+ });
126632
+ }
126431
126633
  classList.push('beforeHiddenRow');
126432
126634
  }
126433
126635
  (0, _element.addClass)(TH, classList);
@@ -126466,6 +126668,11 @@ class HiddenRows extends _base.BasePlugin {
126466
126668
  }
126467
126669
  }
126468
126670
  exports.HiddenRows = HiddenRows;
126671
+ function _clearIndicatorElements2(TH) {
126672
+ Array.from(TH.querySelectorAll(`.${AFTER_INDICATOR_CLASSNAME}, .${BEFORE_INDICATOR_CLASSNAME}`)).forEach(element => {
126673
+ element.remove();
126674
+ });
126675
+ }
126469
126676
 
126470
126677
  /***/ }),
126471
126678
  /* 927 */
@@ -132564,6 +132771,8 @@ var _element = __webpack_require__(302);
132564
132771
  var _rootComparator = __webpack_require__(962);
132565
132772
  var _utils2 = __webpack_require__(963);
132566
132773
  var _domHelpers = __webpack_require__(964);
132774
+ var _a11y = __webpack_require__(445);
132775
+ var _constants = __webpack_require__(581);
132567
132776
  __webpack_require__(965);
132568
132777
  const PLUGIN_KEY = 'multiColumnSorting';
132569
132778
  exports.PLUGIN_KEY = PLUGIN_KEY;
@@ -132825,6 +133034,25 @@ class MultiColumnSorting extends _columnSorting.ColumnSorting {
132825
133034
  }
132826
133035
  }
132827
133036
 
133037
+ /**
133038
+ * Update sorting indicator.
133039
+ *
133040
+ * @private
133041
+ * @param {number} column Visual column index.
133042
+ * @param {HTMLElement} headerSpanElement Header span element.
133043
+ */
133044
+ updateSortingIndicator(column, headerSpanElement) {
133045
+ super.updateSortingIndicator(column, headerSpanElement);
133046
+ const indicatorElement = headerSpanElement.querySelector('.columnSortingIndicator');
133047
+ if (!indicatorElement || !this.hot.getSettings().ariaTags || !this.columnStatesManager.isColumnSorted(column) || this.columnStatesManager.getNumberOfSortedColumns() <= 1) {
133048
+ return;
133049
+ }
133050
+ const multiColumnSortingOrder = this.columnStatesManager.getIndexOfColumnInSortQueue(column) + 1;
133051
+ const a11yLabelAttribute = (0, _a11y.A11Y_LABEL)(`${this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER)} ${multiColumnSortingOrder}.`);
133052
+ (0, _element.removeAttribute)(indicatorElement, (0, _a11y.A11Y_HIDDEN)()[0]);
133053
+ (0, _element.setAttribute)(indicatorElement, ...a11yLabelAttribute);
133054
+ }
133055
+
132828
133056
  /**
132829
133057
  * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called
132830
133058
  * for `updateSettings` in specific situations.
@@ -136584,7 +136812,8 @@ class NestedRows extends _base.BasePlugin {
136584
136812
  /**
136585
136813
  * Updates the plugin's state.
136586
136814
  *
136587
- * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:
136815
+ * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the
136816
+ * following configuration options:
136588
136817
  * - [`nestedRows`](@/api/options.md#nestedrows)
136589
136818
  */
136590
136819
  updatePlugin() {
@@ -138172,6 +138401,7 @@ var _number = __webpack_require__(471);
138172
138401
  var _element = __webpack_require__(302);
138173
138402
  var _base = _interopRequireDefault(__webpack_require__(989));
138174
138403
  var _a11y = __webpack_require__(445);
138404
+ var _constants = __webpack_require__(581);
138175
138405
  /**
138176
138406
  * Class responsible for the UI in the Nested Rows' row headers.
138177
138407
  *
@@ -138189,7 +138419,6 @@ class HeadersUI extends _base.default {
138189
138419
  return {
138190
138420
  indicatorContainer: 'ht_nestingLevels',
138191
138421
  parent: 'ht_nestingParent',
138192
- indicator: 'ht_nestingLevel',
138193
138422
  emptyIndicator: 'ht_nestingLevel_empty',
138194
138423
  button: 'ht_nestingButton',
138195
138424
  expandButton: 'ht_nestingExpand',
@@ -138267,12 +138496,12 @@ class HeadersUI extends _base.default {
138267
138496
  if (this.collapsingUI.areChildrenCollapsed(rowIndex)) {
138268
138497
  (0, _element.addClass)(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.expandButton}`);
138269
138498
  if (ariaEnabled) {
138270
- (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(false)]);
138499
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(false), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.ROW_HEADER_DESCRIPTION_EXPAND_ROW))]);
138271
138500
  }
138272
138501
  } else {
138273
138502
  (0, _element.addClass)(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.collapseButton}`);
138274
138503
  if (ariaEnabled) {
138275
- (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(true)]);
138504
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(true), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW))]);
138276
138505
  }
138277
138506
  }
138278
138507
  innerDiv.appendChild(buttonsContainer);