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')
@@ -105,8 +105,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
105
105
  Handsontable.CellCoords = _src.CellCoords;
106
106
  Handsontable.CellRange = _src.CellRange;
107
107
  Handsontable.packageName = 'handsontable';
108
- Handsontable.buildDate = "26/10/2023 20:16:53";
109
- Handsontable.version = "0.0.0-next-e54c3d6-20231026";
108
+ Handsontable.buildDate = "27/10/2023 07:59:06";
109
+ Handsontable.version = "0.0.0-next-42d5bd7-20231027";
110
110
  Handsontable.languages = {
111
111
  dictionaryKeys: _registry.dictionaryKeys,
112
112
  getLanguageDictionary: _registry.getLanguageDictionary,
@@ -4568,7 +4568,7 @@ function Core(rootElement, userSettings) {
4568
4568
  * @function getTranslatedPhrase
4569
4569
  * @since 0.35.0
4570
4570
  * @param {string} dictionaryKey Constant which is dictionary key.
4571
- * @param {*} extraArguments Arguments which will be handled by formatters.
4571
+ * @param {*} [extraArguments] Arguments which will be handled by formatters.
4572
4572
  * @returns {string}
4573
4573
  */
4574
4574
  this.getTranslatedPhrase = function (dictionaryKey, extraArguments) {
@@ -7094,6 +7094,7 @@ module.exports = typeof Bun == 'function' && Bun && typeof Bun.version == 'strin
7094
7094
  exports.__esModule = true;
7095
7095
  exports.addClass = addClass;
7096
7096
  exports.addEvent = addEvent;
7097
+ exports.appendElement = appendElement;
7097
7098
  exports.clearTextSelection = clearTextSelection;
7098
7099
  exports.closest = closest;
7099
7100
  exports.closestDown = closestDown;
@@ -8229,6 +8230,34 @@ function runWithSelectedContendEditableElement(element, callback) {
8229
8230
  removeContentEditableFromElementAndDeselect(element, invisibleSelection);
8230
8231
  }
8231
8232
 
8233
+ /**
8234
+ * Creates a new DOM element and appends it to the parent element with the provided class name(s) and attributes.
8235
+ *
8236
+ * @param {HTMLElement} parentElement The parent element.
8237
+ * @param {object} properties The properties object.
8238
+ * @param {string} properties.tagName The type of the new element.
8239
+ * @param {string|string[]} properties.className Class name as string or array of strings.
8240
+ * @param {Array[]} properties.attributes An array containing the attributes to be added. Each element of the array
8241
+ * should be an array in a form of `[attributeName, attributeValue]`.
8242
+ * @returns {HTMLElement} The created div element.
8243
+ */
8244
+ function appendElement(parentElement, _ref) {
8245
+ let {
8246
+ tagName,
8247
+ className,
8248
+ attributes
8249
+ } = _ref;
8250
+ const element = parentElement.ownerDocument.createElement(tagName);
8251
+ if (className) {
8252
+ addClass(element, className);
8253
+ }
8254
+ if (attributes && attributes.length) {
8255
+ setAttribute(element, attributes);
8256
+ }
8257
+ parentElement.appendChild(element);
8258
+ return element;
8259
+ }
8260
+
8232
8261
  /***/ }),
8233
8262
  /* 108 */
8234
8263
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -8494,7 +8523,7 @@ const domMessages = {
8494
8523
  function _injectProductInfo(key, element) {
8495
8524
  const hasValidType = !isEmpty(key);
8496
8525
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
8497
- const hotVersion = "0.0.0-next-e54c3d6-20231026";
8526
+ const hotVersion = "0.0.0-next-42d5bd7-20231027";
8498
8527
  let keyValidityDate;
8499
8528
  let consoleMessageState = 'invalid';
8500
8529
  let domMessageState = 'invalid';
@@ -8976,6 +9005,8 @@ const A11Y_TEXT = () => ['type', 'text'];
8976
9005
  exports.A11Y_TEXT = A11Y_TEXT;
8977
9006
  const A11Y_LABEL = val => ['aria-label', val];
8978
9007
  exports.A11Y_LABEL = A11Y_LABEL;
9008
+ const A11Y_DESCRIPTION = val => ['aria-description', val];
9009
+ exports.A11Y_DESCRIPTION = A11Y_DESCRIPTION;
8979
9010
  const A11Y_HIDDEN = () => ['aria-hidden', 'true'];
8980
9011
  exports.A11Y_HIDDEN = A11Y_HIDDEN;
8981
9012
  const A11Y_DISABLED = () => ['aria-disabled', 'true'];
@@ -22228,6 +22259,9 @@ class RowHeadersRenderer extends _base.default {
22228
22259
  const TH = orderView.getCurrentNode();
22229
22260
  TH.className = '';
22230
22261
  TH.removeAttribute('style');
22262
+
22263
+ // Remove all accessibility-related attributes for the header to start fresh.
22264
+ (0, _element.removeAttribute)(TH, [new RegExp('aria-(.*)'), new RegExp('role')]);
22231
22265
  if (this.table.isAriaEnabled()) {
22232
22266
  (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_ROWHEADER)(), (0, _a11y.A11Y_SCOPE_ROW)(), (0, _a11y.A11Y_COLINDEX)(visibleColumnIndex + 1), (0, _a11y.A11Y_TABINDEX)(-1)]);
22233
22267
  }
@@ -22945,6 +22979,9 @@ class ColumnHeadersRenderer extends _base.default {
22945
22979
  const TH = TR.childNodes[renderedColumnIndex + rowHeadersCount];
22946
22980
  TH.className = '';
22947
22981
  TH.removeAttribute('style');
22982
+
22983
+ // Remove all accessibility-related attributes for the header to start fresh.
22984
+ (0, _element.removeAttribute)(TH, [new RegExp('aria-(.*)'), new RegExp('role')]);
22948
22985
  if (this.table.isAriaEnabled()) {
22949
22986
  (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)()])]);
22950
22987
  }
@@ -32192,7 +32229,18 @@ const dictionary = {
32192
32229
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',
32193
32230
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value',
32194
32231
  [C.CHECKBOX_CHECKED]: 'Checked',
32195
- [C.CHECKBOX_UNCHECKED]: 'Unchecked'
32232
+ [C.CHECKBOX_UNCHECKED]: 'Unchecked',
32233
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Press ENTER to expand column.',
32234
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Press ENTER to collapse column.',
32235
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Press ENTER to change sorting.',
32236
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Multi-column sorting order:',
32237
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Press CTRL/CMD+ENTER to open menu.',
32238
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'The next column is hidden.',
32239
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'The previous column is hidden.',
32240
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Press ENTER to expand row.',
32241
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Press ENTER to collapse row.',
32242
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'The next row is hidden.',
32243
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'The previous row is hidden.'
32196
32244
  };
32197
32245
  var _default = dictionary;
32198
32246
  exports["default"] = _default;
@@ -32376,6 +32424,32 @@ const CHECKBOX_CHECKED = `${CHECKBOX_RENDERER_NAMESPACE}checked`;
32376
32424
  exports.CHECKBOX_CHECKED = CHECKBOX_CHECKED;
32377
32425
  const CHECKBOX_UNCHECKED = `${CHECKBOX_RENDERER_NAMESPACE}unchecked`;
32378
32426
  exports.CHECKBOX_UNCHECKED = CHECKBOX_UNCHECKED;
32427
+ const COLUMN_HEADER_NAMESPACE = 'ColumnHeader:';
32428
+ exports.COLUMN_HEADER_NAMESPACE = COLUMN_HEADER_NAMESPACE;
32429
+ const COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN = `${COLUMN_HEADER_NAMESPACE}description.expandColumn`;
32430
+ exports.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN = COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN;
32431
+ const COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN = `${COLUMN_HEADER_NAMESPACE}description.collapseColumn`;
32432
+ exports.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN = COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN;
32433
+ const COLUMN_HEADER_DESCRIPTION_SORT_ROWS = `${COLUMN_HEADER_NAMESPACE}description.sortRows`;
32434
+ exports.COLUMN_HEADER_DESCRIPTION_SORT_ROWS = COLUMN_HEADER_DESCRIPTION_SORT_ROWS;
32435
+ const COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER = `${COLUMN_HEADER_NAMESPACE}label.multiColumnSortOrder`;
32436
+ exports.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER = COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER;
32437
+ const COLUMN_HEADER_LABEL_OPEN_MENU = `${COLUMN_HEADER_NAMESPACE}label.openMenu`;
32438
+ exports.COLUMN_HEADER_LABEL_OPEN_MENU = COLUMN_HEADER_LABEL_OPEN_MENU;
32439
+ const COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN = `${COLUMN_HEADER_NAMESPACE}label.beforeHiddenColumn`;
32440
+ exports.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN = COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN;
32441
+ const COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN = `${COLUMN_HEADER_NAMESPACE}label.afterHiddenColumn`;
32442
+ exports.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN = COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN;
32443
+ const ROW_HEADER_NAMESPACE = 'RowHeader:';
32444
+ exports.ROW_HEADER_NAMESPACE = ROW_HEADER_NAMESPACE;
32445
+ const ROW_HEADER_DESCRIPTION_EXPAND_ROW = `${ROW_HEADER_NAMESPACE}description.expandRow`;
32446
+ exports.ROW_HEADER_DESCRIPTION_EXPAND_ROW = ROW_HEADER_DESCRIPTION_EXPAND_ROW;
32447
+ const ROW_HEADER_DESCRIPTION_COLLAPSE_ROW = `${ROW_HEADER_NAMESPACE}description.collapseRow`;
32448
+ exports.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW = ROW_HEADER_DESCRIPTION_COLLAPSE_ROW;
32449
+ const ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW = `${ROW_HEADER_NAMESPACE}label.beforeHiddenRow`;
32450
+ exports.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW = ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW;
32451
+ const ROW_HEADER_LABEL_AFTER_HIDDEN_ROW = `${ROW_HEADER_NAMESPACE}label.afterHiddenRow`;
32452
+ exports.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW = ROW_HEADER_LABEL_AFTER_HIDDEN_ROW;
32379
32453
 
32380
32454
  /***/ }),
32381
32455
  /* 251 */
@@ -53112,6 +53186,7 @@ var _element = __webpack_require__(107);
53112
53186
  var _eventManager = _interopRequireDefault(__webpack_require__(127));
53113
53187
  var _event = __webpack_require__(122);
53114
53188
  var _a11y = __webpack_require__(114);
53189
+ var _constants = __webpack_require__(250);
53115
53190
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
53116
53191
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
53117
53192
  const PLUGIN_KEY = 'collapsibleColumns';
@@ -53612,7 +53687,7 @@ class CollapsibleColumns extends _base.BasePlugin {
53612
53687
 
53613
53688
  // Add ARIA tags
53614
53689
  if (isAriaTagsEnabled) {
53615
- (0, _element.setAttribute)(TH, ...(0, _a11y.A11Y_EXPANDED)(false));
53690
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(false), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN))]);
53616
53691
  }
53617
53692
  } else {
53618
53693
  (0, _element.addClass)(collapsibleElement, 'expanded');
@@ -53620,7 +53695,7 @@ class CollapsibleColumns extends _base.BasePlugin {
53620
53695
 
53621
53696
  // Add ARIA tags
53622
53697
  if (isAriaTagsEnabled) {
53623
- (0, _element.setAttribute)(TH, ...(0, _a11y.A11Y_EXPANDED)(true));
53698
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(true), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN))]);
53624
53699
  }
53625
53700
  }
53626
53701
  if (isAriaTagsEnabled) {
@@ -53725,6 +53800,7 @@ var _domHelpers = __webpack_require__(447);
53725
53800
  var _rootComparator = __webpack_require__(448);
53726
53801
  var _sortService = __webpack_require__(449);
53727
53802
  var _a11y = __webpack_require__(114);
53803
+ var _constants = __webpack_require__(250);
53728
53804
  const PLUGIN_KEY = 'columnSorting';
53729
53805
  exports.PLUGIN_KEY = PLUGIN_KEY;
53730
53806
  const PLUGIN_PRIORITY = 50;
@@ -53734,6 +53810,7 @@ exports.APPEND_COLUMN_CONFIG_STRATEGY = APPEND_COLUMN_CONFIG_STRATEGY;
53734
53810
  const REPLACE_COLUMN_CONFIG_STRATEGY = 'replace';
53735
53811
  exports.REPLACE_COLUMN_CONFIG_STRATEGY = REPLACE_COLUMN_CONFIG_STRATEGY;
53736
53812
  const SHORTCUTS_GROUP = PLUGIN_KEY;
53813
+ const SORTING_INDICATOR_CLASS = 'columnSortingIndicator';
53737
53814
  (0, _sortService.registerRootComparator)(PLUGIN_KEY, _rootComparator.rootComparator);
53738
53815
  _pluginHooks.default.getSingleton().register('beforeColumnSort');
53739
53816
  _pluginHooks.default.getSingleton().register('afterColumnSort');
@@ -54352,12 +54429,14 @@ class ColumnSorting extends _base.BasePlugin {
54352
54429
  return;
54353
54430
  }
54354
54431
  const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];
54432
+ const ariaTags = this.hot.getSettings().ariaTags;
54355
54433
  const showSortIndicator = pluginSettingsForColumn.indicator;
54356
54434
  const headerActionEnabled = pluginSettingsForColumn.headerAction;
54435
+ const currentSortState = this.columnStatesManager.getSortOrderOfColumn(column);
54357
54436
  this.updateHeaderClasses(headerSpanElement, this.columnStatesManager, column, showSortIndicator, headerActionEnabled);
54358
- if (this.hot.getSettings().ariaTags) {
54359
- const currentSortState = this.columnStatesManager.getSortOrderOfColumn(column);
54360
- (0, _element.setAttribute)(TH, ...(0, _a11y.A11Y_SORT)(currentSortState ? `${currentSortState}ending` : 'none'));
54437
+ this.updateSortingIndicator(column, headerSpanElement);
54438
+ if (ariaTags) {
54439
+ (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))]);
54361
54440
  }
54362
54441
  }
54363
54442
 
@@ -54378,6 +54457,28 @@ class ColumnSorting extends _base.BasePlugin {
54378
54457
  }
54379
54458
  }
54380
54459
 
54460
+ /**
54461
+ * Update sorting indicator.
54462
+ *
54463
+ * @private
54464
+ * @param {number} column Visual column index.
54465
+ * @param {HTMLElement} headerSpanElement Header span element.
54466
+ */
54467
+ updateSortingIndicator(column, headerSpanElement) {
54468
+ const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];
54469
+ const ariaTags = this.hot.getSettings().ariaTags;
54470
+ const showSortIndicator = pluginSettingsForColumn.indicator;
54471
+ const isColumnSorted = this.columnStatesManager.isColumnSorted(column);
54472
+ const indicatorElement = headerSpanElement.querySelector(`.${SORTING_INDICATOR_CLASS}`);
54473
+ if (showSortIndicator && isColumnSorted && !indicatorElement) {
54474
+ (0, _element.appendElement)(headerSpanElement, {
54475
+ tagName: 'div',
54476
+ className: SORTING_INDICATOR_CLASS,
54477
+ attributes: ariaTags ? [(0, _a11y.A11Y_HIDDEN)()] : []
54478
+ });
54479
+ }
54480
+ }
54481
+
54381
54482
  /**
54382
54483
  * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called
54383
54484
  * for `updateSettings` in specific situations.
@@ -60905,6 +61006,8 @@ exports.createMenuItemRenderer = createMenuItemRenderer;
60905
61006
  var _utils = __webpack_require__(495);
60906
61007
  var _element = __webpack_require__(107);
60907
61008
  var _a11y = __webpack_require__(114);
61009
+ const SUBMENU_INDICATOR_CLASSNAME = 'submenuIndicator';
61010
+
60908
61011
  /**
60909
61012
  * Creates the menu renderer function.
60910
61013
  *
@@ -60937,6 +61040,16 @@ function createMenuItemRenderer(mainTableHot) {
60937
61040
  const isFocusable = !(0, _utils.isItemDisabled)(item, mainTableHot) && !(0, _utils.isItemSelectionDisabled)(item) && !(0, _utils.isItemSeparator)(item);
60938
61041
  (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)] : [])]);
60939
61042
  }
61043
+ if ((0, _utils.isItemSubMenu)(item)) {
61044
+ const submenuIndicatorElement = TD.querySelector('.submenuIndicator');
61045
+ if (!submenuIndicatorElement) {
61046
+ (0, _element.appendElement)(TD, {
61047
+ tagName: 'div',
61048
+ attributes: mainTableHot.getSettings().ariaTags ? [(0, _a11y.A11Y_HIDDEN)()] : [],
61049
+ className: SUBMENU_INDICATOR_CLASSNAME
61050
+ });
61051
+ }
61052
+ }
60940
61053
  TD.className = '';
60941
61054
  TD.appendChild(wrapper);
60942
61055
  if ((0, _utils.isItemSeparator)(item)) {
@@ -64469,6 +64582,7 @@ var _menu = __webpack_require__(489);
64469
64582
  var _pluginHooks = _interopRequireDefault(__webpack_require__(124));
64470
64583
  var _predefinedItems = __webpack_require__(464);
64471
64584
  __webpack_require__(526);
64585
+ var _constants = __webpack_require__(250);
64472
64586
  var _a11y = __webpack_require__(114);
64473
64587
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
64474
64588
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
@@ -64894,7 +65008,7 @@ class DropdownMenu extends _base.BasePlugin {
64894
65008
  button.type = 'button';
64895
65009
  button.tabIndex = -1;
64896
65010
  if (this.hot.getSettings().ariaTags) {
64897
- (0, _element.setAttribute)(button, [(0, _a11y.A11Y_HIDDEN)()]);
65011
+ (0, _element.setAttribute)(button, [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_LABEL_OPEN_MENU))]);
64898
65012
  (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_HASPOPUP)('menu')]);
64899
65013
  }
64900
65014
 
@@ -68194,11 +68308,8 @@ class InputUI extends _base.BaseUI {
68194
68308
  */
68195
68309
  build() {
68196
68310
  super.build();
68197
- const icon = this.hot.rootDocument.createElement('div');
68198
68311
  (0, _classPrivateFieldSet2.default)(this, _input, this._element.firstChild);
68199
68312
  (0, _element.addClass)(this._element, 'htUIInput');
68200
- (0, _element.addClass)(icon, 'htUIInputIcon');
68201
- this._element.appendChild(icon);
68202
68313
  this.update();
68203
68314
  }
68204
68315
 
@@ -68464,9 +68575,11 @@ var _classPrivateFieldGet2 = _interopRequireDefault(__webpack_require__(129));
68464
68575
  var _menu2 = __webpack_require__(489);
68465
68576
  var _object = __webpack_require__(117);
68466
68577
  var _array = __webpack_require__(113);
68578
+ var _element = __webpack_require__(107);
68467
68579
  var C = _interopRequireWildcard(__webpack_require__(250));
68468
68580
  var _predefinedItems = __webpack_require__(464);
68469
68581
  var _base = __webpack_require__(568);
68582
+ var _a11y = __webpack_require__(114);
68470
68583
  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); }
68471
68584
  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; }
68472
68585
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
@@ -68623,6 +68736,10 @@ class SelectUI extends _base.BaseUI {
68623
68736
  (0, _classPrivateFieldSet2.default)(this, _caption, caption);
68624
68737
  (0, _classPrivateFieldSet2.default)(this, _captionElement, caption.element);
68625
68738
  (0, _classPrivateFieldSet2.default)(this, _dropdown, dropdown);
68739
+ if (this.hot.getSettings().ariaTags) {
68740
+ (0, _element.setAttribute)(dropdown.element, [(0, _a11y.A11Y_HIDDEN)()]);
68741
+ (0, _element.setAttribute)(this._element, [(0, _a11y.A11Y_LISTBOX)()]);
68742
+ }
68626
68743
  (0, _array.arrayEach)([caption, dropdown], element => this._element.appendChild(element.element));
68627
68744
  (0, _classPrivateFieldGet2.default)(this, _menu).addLocalHook('select', command => _classPrivateMethodGet(this, _onMenuSelect, _onMenuSelect2).call(this, command));
68628
68745
  (0, _classPrivateFieldGet2.default)(this, _menu).addLocalHook('afterClose', () => _classPrivateMethodGet(this, _onMenuClosed, _onMenuClosed2).call(this));
@@ -72903,9 +73020,13 @@ var _pluginHooks = _interopRequireDefault(__webpack_require__(124));
72903
73020
  var _hideColumn = _interopRequireDefault(__webpack_require__(591));
72904
73021
  var _showColumn = _interopRequireDefault(__webpack_require__(592));
72905
73022
  var _translations = __webpack_require__(226);
73023
+ var _a11y = __webpack_require__(114);
73024
+ var _constants = __webpack_require__(250);
72906
73025
  __webpack_require__(593);
73026
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
72907
73027
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
72908
73028
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
73029
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
72909
73030
  _pluginHooks.default.getSingleton().register('beforeHideColumns');
72910
73031
  _pluginHooks.default.getSingleton().register('afterHideColumns');
72911
73032
  _pluginHooks.default.getSingleton().register('beforeUnhideColumns');
@@ -72913,6 +73034,9 @@ _pluginHooks.default.getSingleton().register('afterUnhideColumns');
72913
73034
  const PLUGIN_KEY = 'hiddenColumns';
72914
73035
  exports.PLUGIN_KEY = PLUGIN_KEY;
72915
73036
  const PLUGIN_PRIORITY = 310;
73037
+ exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
73038
+ const BEFORE_INDICATOR_CLASSNAME = 'beforeHiddenColumnIndicator';
73039
+ const AFTER_INDICATOR_CLASSNAME = 'afterHiddenColumnIndicator';
72916
73040
 
72917
73041
  /* eslint-disable jsdoc/require-description-complete-sentence */
72918
73042
 
@@ -73020,12 +73144,18 @@ const PLUGIN_PRIORITY = 310;
73020
73144
  * ```
73021
73145
  * :::
73022
73146
  */
73023
- exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
73024
73147
  var _settings = /*#__PURE__*/new WeakMap();
73025
73148
  var _hiddenColumnsMap = /*#__PURE__*/new WeakMap();
73149
+ var _clearIndicatorElements = /*#__PURE__*/new WeakSet();
73026
73150
  class HiddenColumns extends _base.BasePlugin {
73027
73151
  constructor() {
73028
73152
  super(...arguments);
73153
+ /**
73154
+ * Remove the indicator elements from the provided column header element.
73155
+ *
73156
+ * @param {HTMLElement} TH Column header element.
73157
+ */
73158
+ _classPrivateMethodInitSpec(this, _clearIndicatorElements);
73029
73159
  /**
73030
73160
  * Cached plugin settings.
73031
73161
  *
@@ -73109,8 +73239,15 @@ class HiddenColumns extends _base.BasePlugin {
73109
73239
  * Disables the plugin functionality for this Handsontable instance.
73110
73240
  */
73111
73241
  disablePlugin() {
73242
+ const clearColHeader = (columnIndex, TH) => {
73243
+ _classPrivateMethodGet(this, _clearIndicatorElements, _clearIndicatorElements2).call(this, TH);
73244
+ };
73112
73245
  this.hot.columnIndexMapper.unregisterMap(this.pluginName);
73113
73246
  (0, _classPrivateFieldSet2.default)(this, _settings, {});
73247
+ this.hot.addHook('afterGetColHeader', clearColHeader);
73248
+ this.hot.addHookOnce('afterViewRender', () => {
73249
+ this.hot.removeHook('afterGetColHeader', clearColHeader);
73250
+ });
73114
73251
  super.disablePlugin();
73115
73252
  this.resetCellsMeta();
73116
73253
  }
@@ -73252,7 +73389,6 @@ class HiddenColumns extends _base.BasePlugin {
73252
73389
  }
73253
73390
  });
73254
73391
  }
73255
-
73256
73392
  /**
73257
73393
  * Adds the additional column width for the hidden column indicators.
73258
73394
  *
@@ -73357,14 +73493,35 @@ class HiddenColumns extends _base.BasePlugin {
73357
73493
  * @param {HTMLElement} TH Header's TH element.
73358
73494
  */
73359
73495
  onAfterGetColHeader(column, TH) {
73496
+ const areAriaTagsEnabled = this.hot.getSettings().ariaTags;
73497
+ const beforeHiddenColumnIndicatorElement = TH.querySelector('.beforeHiddenColumnIndicator');
73498
+ const afterHiddenColumnIndicatorElement = TH.querySelector('.afterHiddenColumnIndicator');
73360
73499
  if (!(0, _classPrivateFieldGet2.default)(this, _settings).indicators || column < 0) {
73500
+ beforeHiddenColumnIndicatorElement === null || beforeHiddenColumnIndicatorElement === void 0 || beforeHiddenColumnIndicatorElement.remove();
73501
+ afterHiddenColumnIndicatorElement === null || afterHiddenColumnIndicatorElement === void 0 || afterHiddenColumnIndicatorElement.remove();
73361
73502
  return;
73362
73503
  }
73363
73504
  const classList = [];
73364
73505
  if (column >= 1 && this.isHidden(column - 1)) {
73506
+ if (!afterHiddenColumnIndicatorElement) {
73507
+ const attributesToAdd = areAriaTagsEnabled ? [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN))] : [];
73508
+ (0, _element.appendElement)(TH, {
73509
+ tagName: 'div',
73510
+ attributes: attributesToAdd,
73511
+ className: AFTER_INDICATOR_CLASSNAME
73512
+ });
73513
+ }
73365
73514
  classList.push('afterHiddenColumn');
73366
73515
  }
73367
73516
  if (column < this.hot.countCols() - 1 && this.isHidden(column + 1)) {
73517
+ if (!beforeHiddenColumnIndicatorElement) {
73518
+ const attributesToAdd = areAriaTagsEnabled ? [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN))] : [];
73519
+ (0, _element.appendElement)(TH, {
73520
+ tagName: 'div',
73521
+ attributes: attributesToAdd,
73522
+ className: BEFORE_INDICATOR_CLASSNAME
73523
+ });
73524
+ }
73368
73525
  classList.push('beforeHiddenColumn');
73369
73526
  }
73370
73527
  (0, _element.addClass)(TH, classList);
@@ -73403,6 +73560,11 @@ class HiddenColumns extends _base.BasePlugin {
73403
73560
  }
73404
73561
  }
73405
73562
  exports.HiddenColumns = HiddenColumns;
73563
+ function _clearIndicatorElements2(TH) {
73564
+ Array.from(TH.querySelectorAll(`.${AFTER_INDICATOR_CLASSNAME}, .${BEFORE_INDICATOR_CLASSNAME}`)).forEach(element => {
73565
+ element.remove();
73566
+ });
73567
+ }
73406
73568
 
73407
73569
  /***/ }),
73408
73570
  /* 591 */
@@ -73615,9 +73777,13 @@ var _pluginHooks = _interopRequireDefault(__webpack_require__(124));
73615
73777
  var _hideRow = _interopRequireDefault(__webpack_require__(596));
73616
73778
  var _showRow = _interopRequireDefault(__webpack_require__(597));
73617
73779
  var _translations = __webpack_require__(226);
73780
+ var _a11y = __webpack_require__(114);
73781
+ var _constants = __webpack_require__(250);
73618
73782
  __webpack_require__(598);
73783
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
73619
73784
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
73620
73785
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
73786
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
73621
73787
  _pluginHooks.default.getSingleton().register('beforeHideRows');
73622
73788
  _pluginHooks.default.getSingleton().register('afterHideRows');
73623
73789
  _pluginHooks.default.getSingleton().register('beforeUnhideRows');
@@ -73625,6 +73791,9 @@ _pluginHooks.default.getSingleton().register('afterUnhideRows');
73625
73791
  const PLUGIN_KEY = 'hiddenRows';
73626
73792
  exports.PLUGIN_KEY = PLUGIN_KEY;
73627
73793
  const PLUGIN_PRIORITY = 320;
73794
+ exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
73795
+ const AFTER_INDICATOR_CLASSNAME = 'afterHiddenRowIndicator';
73796
+ const BEFORE_INDICATOR_CLASSNAME = 'beforeHiddenRowIndicator';
73628
73797
 
73629
73798
  /* eslint-disable jsdoc/require-description-complete-sentence */
73630
73799
 
@@ -73732,12 +73901,18 @@ const PLUGIN_PRIORITY = 320;
73732
73901
  * ```
73733
73902
  * :::
73734
73903
  */
73735
- exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
73736
73904
  var _settings = /*#__PURE__*/new WeakMap();
73737
73905
  var _hiddenRowsMap = /*#__PURE__*/new WeakMap();
73906
+ var _clearIndicatorElements = /*#__PURE__*/new WeakSet();
73738
73907
  class HiddenRows extends _base.BasePlugin {
73739
73908
  constructor() {
73740
73909
  super(...arguments);
73910
+ /**
73911
+ * Remove the indicator elements from the provided row header element.
73912
+ *
73913
+ * @param {HTMLElement} TH Column header element.
73914
+ */
73915
+ _classPrivateMethodInitSpec(this, _clearIndicatorElements);
73741
73916
  /**
73742
73917
  * Cached settings from Handsontable settings.
73743
73918
  *
@@ -73821,8 +73996,15 @@ class HiddenRows extends _base.BasePlugin {
73821
73996
  * Disables the plugin functionality for this Handsontable instance.
73822
73997
  */
73823
73998
  disablePlugin() {
73999
+ const clearRowHeader = (columnIndex, TH) => {
74000
+ _classPrivateMethodGet(this, _clearIndicatorElements, _clearIndicatorElements2).call(this, TH);
74001
+ };
73824
74002
  this.hot.rowIndexMapper.unregisterMap(this.pluginName);
73825
74003
  (0, _classPrivateFieldSet2.default)(this, _settings, {});
74004
+ this.hot.addHook('afterGetRowHeader', clearRowHeader);
74005
+ this.hot.addHookOnce('afterViewRender', () => {
74006
+ this.hot.removeHook('afterGetRowHeader', clearRowHeader);
74007
+ });
73826
74008
  super.disablePlugin();
73827
74009
  this.resetCellsMeta();
73828
74010
  }
@@ -73961,7 +74143,6 @@ class HiddenRows extends _base.BasePlugin {
73961
74143
  }
73962
74144
  });
73963
74145
  }
73964
-
73965
74146
  /**
73966
74147
  * Adds the additional row height for the hidden row indicators.
73967
74148
  *
@@ -74061,14 +74242,35 @@ class HiddenRows extends _base.BasePlugin {
74061
74242
  * @param {HTMLElement} TH Header's TH element.
74062
74243
  */
74063
74244
  onAfterGetRowHeader(row, TH) {
74245
+ const areAriaTagsEnabled = this.hot.getSettings().ariaTags;
74246
+ const beforeHiddenRowIndicatorElement = TH.querySelector('.beforeHiddenRowIndicator');
74247
+ const afterHiddenRowIndicatorElement = TH.querySelector('.afterHiddenRowIndicator');
74064
74248
  if (!(0, _classPrivateFieldGet2.default)(this, _settings).indicators || row < 0) {
74249
+ beforeHiddenRowIndicatorElement === null || beforeHiddenRowIndicatorElement === void 0 || beforeHiddenRowIndicatorElement.remove();
74250
+ afterHiddenRowIndicatorElement === null || afterHiddenRowIndicatorElement === void 0 || afterHiddenRowIndicatorElement.remove();
74065
74251
  return;
74066
74252
  }
74067
74253
  const classList = [];
74068
74254
  if (row >= 1 && this.isHidden(row - 1)) {
74255
+ if (!afterHiddenRowIndicatorElement) {
74256
+ const attributesToAdd = areAriaTagsEnabled ? [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW))] : [];
74257
+ (0, _element.appendElement)(TH, {
74258
+ tagName: 'div',
74259
+ attributes: attributesToAdd,
74260
+ className: AFTER_INDICATOR_CLASSNAME
74261
+ });
74262
+ }
74069
74263
  classList.push('afterHiddenRow');
74070
74264
  }
74071
74265
  if (row < this.hot.countRows() - 1 && this.isHidden(row + 1)) {
74266
+ if (!beforeHiddenRowIndicatorElement) {
74267
+ const attributesToAdd = areAriaTagsEnabled ? [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW))] : [];
74268
+ (0, _element.appendElement)(TH, {
74269
+ tagName: 'div',
74270
+ attributes: attributesToAdd,
74271
+ className: BEFORE_INDICATOR_CLASSNAME
74272
+ });
74273
+ }
74072
74274
  classList.push('beforeHiddenRow');
74073
74275
  }
74074
74276
  (0, _element.addClass)(TH, classList);
@@ -74107,6 +74309,11 @@ class HiddenRows extends _base.BasePlugin {
74107
74309
  }
74108
74310
  }
74109
74311
  exports.HiddenRows = HiddenRows;
74312
+ function _clearIndicatorElements2(TH) {
74313
+ Array.from(TH.querySelectorAll(`.${AFTER_INDICATOR_CLASSNAME}, .${BEFORE_INDICATOR_CLASSNAME}`)).forEach(element => {
74314
+ element.remove();
74315
+ });
74316
+ }
74110
74317
 
74111
74318
  /***/ }),
74112
74319
  /* 596 */
@@ -80205,6 +80412,8 @@ var _element = __webpack_require__(107);
80205
80412
  var _rootComparator = __webpack_require__(631);
80206
80413
  var _utils2 = __webpack_require__(632);
80207
80414
  var _domHelpers = __webpack_require__(633);
80415
+ var _a11y = __webpack_require__(114);
80416
+ var _constants = __webpack_require__(250);
80208
80417
  __webpack_require__(634);
80209
80418
  const PLUGIN_KEY = 'multiColumnSorting';
80210
80419
  exports.PLUGIN_KEY = PLUGIN_KEY;
@@ -80466,6 +80675,25 @@ class MultiColumnSorting extends _columnSorting.ColumnSorting {
80466
80675
  }
80467
80676
  }
80468
80677
 
80678
+ /**
80679
+ * Update sorting indicator.
80680
+ *
80681
+ * @private
80682
+ * @param {number} column Visual column index.
80683
+ * @param {HTMLElement} headerSpanElement Header span element.
80684
+ */
80685
+ updateSortingIndicator(column, headerSpanElement) {
80686
+ super.updateSortingIndicator(column, headerSpanElement);
80687
+ const indicatorElement = headerSpanElement.querySelector('.columnSortingIndicator');
80688
+ if (!indicatorElement || !this.hot.getSettings().ariaTags || !this.columnStatesManager.isColumnSorted(column) || this.columnStatesManager.getNumberOfSortedColumns() <= 1) {
80689
+ return;
80690
+ }
80691
+ const multiColumnSortingOrder = this.columnStatesManager.getIndexOfColumnInSortQueue(column) + 1;
80692
+ const a11yLabelAttribute = (0, _a11y.A11Y_LABEL)(`${this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER)} ${multiColumnSortingOrder}.`);
80693
+ (0, _element.removeAttribute)(indicatorElement, (0, _a11y.A11Y_HIDDEN)()[0]);
80694
+ (0, _element.setAttribute)(indicatorElement, ...a11yLabelAttribute);
80695
+ }
80696
+
80469
80697
  /**
80470
80698
  * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called
80471
80699
  * for `updateSettings` in specific situations.
@@ -84225,7 +84453,8 @@ class NestedRows extends _base.BasePlugin {
84225
84453
  /**
84226
84454
  * Updates the plugin's state.
84227
84455
  *
84228
- * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:
84456
+ * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the
84457
+ * following configuration options:
84229
84458
  * - [`nestedRows`](@/api/options.md#nestedrows)
84230
84459
  */
84231
84460
  updatePlugin() {
@@ -85813,6 +86042,7 @@ var _number = __webpack_require__(140);
85813
86042
  var _element = __webpack_require__(107);
85814
86043
  var _base = _interopRequireDefault(__webpack_require__(658));
85815
86044
  var _a11y = __webpack_require__(114);
86045
+ var _constants = __webpack_require__(250);
85816
86046
  /**
85817
86047
  * Class responsible for the UI in the Nested Rows' row headers.
85818
86048
  *
@@ -85830,7 +86060,6 @@ class HeadersUI extends _base.default {
85830
86060
  return {
85831
86061
  indicatorContainer: 'ht_nestingLevels',
85832
86062
  parent: 'ht_nestingParent',
85833
- indicator: 'ht_nestingLevel',
85834
86063
  emptyIndicator: 'ht_nestingLevel_empty',
85835
86064
  button: 'ht_nestingButton',
85836
86065
  expandButton: 'ht_nestingExpand',
@@ -85908,12 +86137,12 @@ class HeadersUI extends _base.default {
85908
86137
  if (this.collapsingUI.areChildrenCollapsed(rowIndex)) {
85909
86138
  (0, _element.addClass)(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.expandButton}`);
85910
86139
  if (ariaEnabled) {
85911
- (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(false)]);
86140
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(false), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.ROW_HEADER_DESCRIPTION_EXPAND_ROW))]);
85912
86141
  }
85913
86142
  } else {
85914
86143
  (0, _element.addClass)(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.collapseButton}`);
85915
86144
  if (ariaEnabled) {
85916
- (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(true)]);
86145
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(true), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW))]);
85917
86146
  }
85918
86147
  }
85919
86148
  innerDiv.appendChild(buttonsContainer);