handsontable 0.0.0-next-e54c3d6-20231026 → 0.0.0-next-0c0e2e5-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 (65) hide show
  1. package/3rdparty/walkontable/src/cell/coords.js +2 -1
  2. package/3rdparty/walkontable/src/cell/coords.mjs +2 -1
  3. package/3rdparty/walkontable/src/renderer/columnHeaders.js +3 -0
  4. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +4 -1
  5. package/3rdparty/walkontable/src/renderer/rowHeaders.js +3 -0
  6. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +4 -1
  7. package/base.js +2 -2
  8. package/base.mjs +2 -2
  9. package/core.js +1 -1
  10. package/core.mjs +1 -1
  11. package/dist/handsontable.css +45 -63
  12. package/dist/handsontable.full.css +45 -63
  13. package/dist/handsontable.full.js +255 -25
  14. package/dist/handsontable.full.min.css +5 -5
  15. package/dist/handsontable.full.min.js +105 -105
  16. package/dist/handsontable.js +255 -25
  17. package/dist/handsontable.min.css +5 -5
  18. package/dist/handsontable.min.js +19 -19
  19. package/dist/languages/all.js +24 -2
  20. package/dist/languages/all.min.js +1 -1
  21. package/dist/languages/en-US.js +12 -1
  22. package/dist/languages/en-US.min.js +1 -1
  23. package/dist/languages/pl-PL.js +12 -1
  24. package/dist/languages/pl-PL.min.js +1 -1
  25. package/helpers/a11y.js +2 -0
  26. package/helpers/a11y.mjs +1 -0
  27. package/helpers/dom/element.js +29 -0
  28. package/helpers/dom/element.mjs +28 -0
  29. package/helpers/mixed.js +1 -1
  30. package/helpers/mixed.mjs +1 -1
  31. package/i18n/constants.js +27 -1
  32. package/i18n/constants.mjs +14 -1
  33. package/i18n/languages/en-US.js +12 -1
  34. package/i18n/languages/en-US.mjs +12 -1
  35. package/i18n/languages/pl-PL.js +12 -1
  36. package/i18n/languages/pl-PL.mjs +12 -1
  37. package/languages/all.js +24 -2
  38. package/languages/en-US.js +12 -1
  39. package/languages/en-US.mjs +12 -1
  40. package/languages/index.js +24 -2
  41. package/languages/pl-PL.js +12 -1
  42. package/languages/pl-PL.mjs +12 -1
  43. package/package.json +1 -1
  44. package/plugins/collapsibleColumns/collapsibleColumns.js +3 -2
  45. package/plugins/collapsibleColumns/collapsibleColumns.mjs +4 -3
  46. package/plugins/columnSorting/columnSorting.js +29 -3
  47. package/plugins/columnSorting/columnSorting.mjs +31 -5
  48. package/plugins/contextMenu/menu/menuItemRenderer.js +12 -0
  49. package/plugins/contextMenu/menu/menuItemRenderer.mjs +14 -2
  50. package/plugins/dropdownMenu/dropdownMenu.js +2 -1
  51. package/plugins/dropdownMenu/dropdownMenu.mjs +3 -2
  52. package/plugins/filters/ui/input.js +0 -3
  53. package/plugins/filters/ui/input.mjs +0 -3
  54. package/plugins/filters/ui/select.js +6 -0
  55. package/plugins/filters/ui/select.mjs +6 -0
  56. package/plugins/hiddenColumns/hiddenColumns.js +48 -3
  57. package/plugins/hiddenColumns/hiddenColumns.mjs +47 -2
  58. package/plugins/hiddenRows/hiddenRows.js +48 -3
  59. package/plugins/hiddenRows/hiddenRows.mjs +47 -2
  60. package/plugins/multiColumnSorting/multiColumnSorting.js +21 -0
  61. package/plugins/multiColumnSorting/multiColumnSorting.mjs +22 -1
  62. package/plugins/nestedRows/nestedRows.js +2 -1
  63. package/plugins/nestedRows/nestedRows.mjs +2 -1
  64. package/plugins/nestedRows/ui/headers.js +3 -3
  65. 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-0c0e2e5-20231027
29
+ * Release date: 31/08/2023 (built at 27/10/2023 09:24:26)
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 09:24:26";
109
+ Handsontable.version = "0.0.0-next-0c0e2e5-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-0c0e2e5-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'];
@@ -18357,7 +18388,8 @@ class CellCoords {
18357
18388
  * Assigns the coordinates from another `CellCoords` instance (or compatible literal object)
18358
18389
  * to your `CellCoords` instance.
18359
18390
  *
18360
- * @param {CellCoords | { row?: number, col?: number }} coords The CellCoords instance or compatible literal object.
18391
+ * @param {CellCoords | { row: number | undefined, col: number | undefined }} coords The CellCoords
18392
+ * instance or compatible literal object.
18361
18393
  * @returns {CellCoords}
18362
18394
  */
18363
18395
  assign(coords) {
@@ -22228,6 +22260,9 @@ class RowHeadersRenderer extends _base.default {
22228
22260
  const TH = orderView.getCurrentNode();
22229
22261
  TH.className = '';
22230
22262
  TH.removeAttribute('style');
22263
+
22264
+ // Remove all accessibility-related attributes for the header to start fresh.
22265
+ (0, _element.removeAttribute)(TH, [new RegExp('aria-(.*)'), new RegExp('role')]);
22231
22266
  if (this.table.isAriaEnabled()) {
22232
22267
  (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
22268
  }
@@ -22945,6 +22980,9 @@ class ColumnHeadersRenderer extends _base.default {
22945
22980
  const TH = TR.childNodes[renderedColumnIndex + rowHeadersCount];
22946
22981
  TH.className = '';
22947
22982
  TH.removeAttribute('style');
22983
+
22984
+ // Remove all accessibility-related attributes for the header to start fresh.
22985
+ (0, _element.removeAttribute)(TH, [new RegExp('aria-(.*)'), new RegExp('role')]);
22948
22986
  if (this.table.isAriaEnabled()) {
22949
22987
  (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
22988
  }
@@ -32192,7 +32230,18 @@ const dictionary = {
32192
32230
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',
32193
32231
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value',
32194
32232
  [C.CHECKBOX_CHECKED]: 'Checked',
32195
- [C.CHECKBOX_UNCHECKED]: 'Unchecked'
32233
+ [C.CHECKBOX_UNCHECKED]: 'Unchecked',
32234
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Press ENTER to expand column.',
32235
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Press ENTER to collapse column.',
32236
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Press ENTER to change sorting.',
32237
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Multi-column sorting order:',
32238
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Press CTRL/CMD+ENTER to open menu.',
32239
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'The next column is hidden.',
32240
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'The previous column is hidden.',
32241
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Press ENTER to expand row.',
32242
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Press ENTER to collapse row.',
32243
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'The next row is hidden.',
32244
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'The previous row is hidden.'
32196
32245
  };
32197
32246
  var _default = dictionary;
32198
32247
  exports["default"] = _default;
@@ -32376,6 +32425,32 @@ const CHECKBOX_CHECKED = `${CHECKBOX_RENDERER_NAMESPACE}checked`;
32376
32425
  exports.CHECKBOX_CHECKED = CHECKBOX_CHECKED;
32377
32426
  const CHECKBOX_UNCHECKED = `${CHECKBOX_RENDERER_NAMESPACE}unchecked`;
32378
32427
  exports.CHECKBOX_UNCHECKED = CHECKBOX_UNCHECKED;
32428
+ const COLUMN_HEADER_NAMESPACE = 'ColumnHeader:';
32429
+ exports.COLUMN_HEADER_NAMESPACE = COLUMN_HEADER_NAMESPACE;
32430
+ const COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN = `${COLUMN_HEADER_NAMESPACE}description.expandColumn`;
32431
+ exports.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN = COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN;
32432
+ const COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN = `${COLUMN_HEADER_NAMESPACE}description.collapseColumn`;
32433
+ exports.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN = COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN;
32434
+ const COLUMN_HEADER_DESCRIPTION_SORT_ROWS = `${COLUMN_HEADER_NAMESPACE}description.sortRows`;
32435
+ exports.COLUMN_HEADER_DESCRIPTION_SORT_ROWS = COLUMN_HEADER_DESCRIPTION_SORT_ROWS;
32436
+ const COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER = `${COLUMN_HEADER_NAMESPACE}label.multiColumnSortOrder`;
32437
+ exports.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER = COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER;
32438
+ const COLUMN_HEADER_LABEL_OPEN_MENU = `${COLUMN_HEADER_NAMESPACE}label.openMenu`;
32439
+ exports.COLUMN_HEADER_LABEL_OPEN_MENU = COLUMN_HEADER_LABEL_OPEN_MENU;
32440
+ const COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN = `${COLUMN_HEADER_NAMESPACE}label.beforeHiddenColumn`;
32441
+ exports.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN = COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN;
32442
+ const COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN = `${COLUMN_HEADER_NAMESPACE}label.afterHiddenColumn`;
32443
+ exports.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN = COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN;
32444
+ const ROW_HEADER_NAMESPACE = 'RowHeader:';
32445
+ exports.ROW_HEADER_NAMESPACE = ROW_HEADER_NAMESPACE;
32446
+ const ROW_HEADER_DESCRIPTION_EXPAND_ROW = `${ROW_HEADER_NAMESPACE}description.expandRow`;
32447
+ exports.ROW_HEADER_DESCRIPTION_EXPAND_ROW = ROW_HEADER_DESCRIPTION_EXPAND_ROW;
32448
+ const ROW_HEADER_DESCRIPTION_COLLAPSE_ROW = `${ROW_HEADER_NAMESPACE}description.collapseRow`;
32449
+ exports.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW = ROW_HEADER_DESCRIPTION_COLLAPSE_ROW;
32450
+ const ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW = `${ROW_HEADER_NAMESPACE}label.beforeHiddenRow`;
32451
+ exports.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW = ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW;
32452
+ const ROW_HEADER_LABEL_AFTER_HIDDEN_ROW = `${ROW_HEADER_NAMESPACE}label.afterHiddenRow`;
32453
+ exports.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW = ROW_HEADER_LABEL_AFTER_HIDDEN_ROW;
32379
32454
 
32380
32455
  /***/ }),
32381
32456
  /* 251 */
@@ -53112,6 +53187,7 @@ var _element = __webpack_require__(107);
53112
53187
  var _eventManager = _interopRequireDefault(__webpack_require__(127));
53113
53188
  var _event = __webpack_require__(122);
53114
53189
  var _a11y = __webpack_require__(114);
53190
+ var _constants = __webpack_require__(250);
53115
53191
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
53116
53192
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
53117
53193
  const PLUGIN_KEY = 'collapsibleColumns';
@@ -53612,7 +53688,7 @@ class CollapsibleColumns extends _base.BasePlugin {
53612
53688
 
53613
53689
  // Add ARIA tags
53614
53690
  if (isAriaTagsEnabled) {
53615
- (0, _element.setAttribute)(TH, ...(0, _a11y.A11Y_EXPANDED)(false));
53691
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(false), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN))]);
53616
53692
  }
53617
53693
  } else {
53618
53694
  (0, _element.addClass)(collapsibleElement, 'expanded');
@@ -53620,7 +53696,7 @@ class CollapsibleColumns extends _base.BasePlugin {
53620
53696
 
53621
53697
  // Add ARIA tags
53622
53698
  if (isAriaTagsEnabled) {
53623
- (0, _element.setAttribute)(TH, ...(0, _a11y.A11Y_EXPANDED)(true));
53699
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(true), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN))]);
53624
53700
  }
53625
53701
  }
53626
53702
  if (isAriaTagsEnabled) {
@@ -53725,6 +53801,7 @@ var _domHelpers = __webpack_require__(447);
53725
53801
  var _rootComparator = __webpack_require__(448);
53726
53802
  var _sortService = __webpack_require__(449);
53727
53803
  var _a11y = __webpack_require__(114);
53804
+ var _constants = __webpack_require__(250);
53728
53805
  const PLUGIN_KEY = 'columnSorting';
53729
53806
  exports.PLUGIN_KEY = PLUGIN_KEY;
53730
53807
  const PLUGIN_PRIORITY = 50;
@@ -53734,6 +53811,7 @@ exports.APPEND_COLUMN_CONFIG_STRATEGY = APPEND_COLUMN_CONFIG_STRATEGY;
53734
53811
  const REPLACE_COLUMN_CONFIG_STRATEGY = 'replace';
53735
53812
  exports.REPLACE_COLUMN_CONFIG_STRATEGY = REPLACE_COLUMN_CONFIG_STRATEGY;
53736
53813
  const SHORTCUTS_GROUP = PLUGIN_KEY;
53814
+ const SORTING_INDICATOR_CLASS = 'columnSortingIndicator';
53737
53815
  (0, _sortService.registerRootComparator)(PLUGIN_KEY, _rootComparator.rootComparator);
53738
53816
  _pluginHooks.default.getSingleton().register('beforeColumnSort');
53739
53817
  _pluginHooks.default.getSingleton().register('afterColumnSort');
@@ -54352,12 +54430,14 @@ class ColumnSorting extends _base.BasePlugin {
54352
54430
  return;
54353
54431
  }
54354
54432
  const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];
54433
+ const ariaTags = this.hot.getSettings().ariaTags;
54355
54434
  const showSortIndicator = pluginSettingsForColumn.indicator;
54356
54435
  const headerActionEnabled = pluginSettingsForColumn.headerAction;
54436
+ const currentSortState = this.columnStatesManager.getSortOrderOfColumn(column);
54357
54437
  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'));
54438
+ this.updateSortingIndicator(column, headerSpanElement);
54439
+ if (ariaTags) {
54440
+ (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
54441
  }
54362
54442
  }
54363
54443
 
@@ -54378,6 +54458,28 @@ class ColumnSorting extends _base.BasePlugin {
54378
54458
  }
54379
54459
  }
54380
54460
 
54461
+ /**
54462
+ * Update sorting indicator.
54463
+ *
54464
+ * @private
54465
+ * @param {number} column Visual column index.
54466
+ * @param {HTMLElement} headerSpanElement Header span element.
54467
+ */
54468
+ updateSortingIndicator(column, headerSpanElement) {
54469
+ const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];
54470
+ const ariaTags = this.hot.getSettings().ariaTags;
54471
+ const showSortIndicator = pluginSettingsForColumn.indicator;
54472
+ const isColumnSorted = this.columnStatesManager.isColumnSorted(column);
54473
+ const indicatorElement = headerSpanElement.querySelector(`.${SORTING_INDICATOR_CLASS}`);
54474
+ if (showSortIndicator && isColumnSorted && !indicatorElement) {
54475
+ (0, _element.appendElement)(headerSpanElement, {
54476
+ tagName: 'div',
54477
+ className: SORTING_INDICATOR_CLASS,
54478
+ attributes: ariaTags ? [(0, _a11y.A11Y_HIDDEN)()] : []
54479
+ });
54480
+ }
54481
+ }
54482
+
54381
54483
  /**
54382
54484
  * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called
54383
54485
  * for `updateSettings` in specific situations.
@@ -60905,6 +61007,8 @@ exports.createMenuItemRenderer = createMenuItemRenderer;
60905
61007
  var _utils = __webpack_require__(495);
60906
61008
  var _element = __webpack_require__(107);
60907
61009
  var _a11y = __webpack_require__(114);
61010
+ const SUBMENU_INDICATOR_CLASSNAME = 'submenuIndicator';
61011
+
60908
61012
  /**
60909
61013
  * Creates the menu renderer function.
60910
61014
  *
@@ -60937,6 +61041,16 @@ function createMenuItemRenderer(mainTableHot) {
60937
61041
  const isFocusable = !(0, _utils.isItemDisabled)(item, mainTableHot) && !(0, _utils.isItemSelectionDisabled)(item) && !(0, _utils.isItemSeparator)(item);
60938
61042
  (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
61043
  }
61044
+ if ((0, _utils.isItemSubMenu)(item)) {
61045
+ const submenuIndicatorElement = TD.querySelector('.submenuIndicator');
61046
+ if (!submenuIndicatorElement) {
61047
+ (0, _element.appendElement)(TD, {
61048
+ tagName: 'div',
61049
+ attributes: mainTableHot.getSettings().ariaTags ? [(0, _a11y.A11Y_HIDDEN)()] : [],
61050
+ className: SUBMENU_INDICATOR_CLASSNAME
61051
+ });
61052
+ }
61053
+ }
60940
61054
  TD.className = '';
60941
61055
  TD.appendChild(wrapper);
60942
61056
  if ((0, _utils.isItemSeparator)(item)) {
@@ -64469,6 +64583,7 @@ var _menu = __webpack_require__(489);
64469
64583
  var _pluginHooks = _interopRequireDefault(__webpack_require__(124));
64470
64584
  var _predefinedItems = __webpack_require__(464);
64471
64585
  __webpack_require__(526);
64586
+ var _constants = __webpack_require__(250);
64472
64587
  var _a11y = __webpack_require__(114);
64473
64588
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
64474
64589
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
@@ -64894,7 +65009,7 @@ class DropdownMenu extends _base.BasePlugin {
64894
65009
  button.type = 'button';
64895
65010
  button.tabIndex = -1;
64896
65011
  if (this.hot.getSettings().ariaTags) {
64897
- (0, _element.setAttribute)(button, [(0, _a11y.A11Y_HIDDEN)()]);
65012
+ (0, _element.setAttribute)(button, [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_LABEL_OPEN_MENU))]);
64898
65013
  (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_HASPOPUP)('menu')]);
64899
65014
  }
64900
65015
 
@@ -68194,11 +68309,8 @@ class InputUI extends _base.BaseUI {
68194
68309
  */
68195
68310
  build() {
68196
68311
  super.build();
68197
- const icon = this.hot.rootDocument.createElement('div');
68198
68312
  (0, _classPrivateFieldSet2.default)(this, _input, this._element.firstChild);
68199
68313
  (0, _element.addClass)(this._element, 'htUIInput');
68200
- (0, _element.addClass)(icon, 'htUIInputIcon');
68201
- this._element.appendChild(icon);
68202
68314
  this.update();
68203
68315
  }
68204
68316
 
@@ -68464,9 +68576,11 @@ var _classPrivateFieldGet2 = _interopRequireDefault(__webpack_require__(129));
68464
68576
  var _menu2 = __webpack_require__(489);
68465
68577
  var _object = __webpack_require__(117);
68466
68578
  var _array = __webpack_require__(113);
68579
+ var _element = __webpack_require__(107);
68467
68580
  var C = _interopRequireWildcard(__webpack_require__(250));
68468
68581
  var _predefinedItems = __webpack_require__(464);
68469
68582
  var _base = __webpack_require__(568);
68583
+ var _a11y = __webpack_require__(114);
68470
68584
  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
68585
  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
68586
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
@@ -68623,6 +68737,10 @@ class SelectUI extends _base.BaseUI {
68623
68737
  (0, _classPrivateFieldSet2.default)(this, _caption, caption);
68624
68738
  (0, _classPrivateFieldSet2.default)(this, _captionElement, caption.element);
68625
68739
  (0, _classPrivateFieldSet2.default)(this, _dropdown, dropdown);
68740
+ if (this.hot.getSettings().ariaTags) {
68741
+ (0, _element.setAttribute)(dropdown.element, [(0, _a11y.A11Y_HIDDEN)()]);
68742
+ (0, _element.setAttribute)(this._element, [(0, _a11y.A11Y_LISTBOX)()]);
68743
+ }
68626
68744
  (0, _array.arrayEach)([caption, dropdown], element => this._element.appendChild(element.element));
68627
68745
  (0, _classPrivateFieldGet2.default)(this, _menu).addLocalHook('select', command => _classPrivateMethodGet(this, _onMenuSelect, _onMenuSelect2).call(this, command));
68628
68746
  (0, _classPrivateFieldGet2.default)(this, _menu).addLocalHook('afterClose', () => _classPrivateMethodGet(this, _onMenuClosed, _onMenuClosed2).call(this));
@@ -72903,9 +73021,13 @@ var _pluginHooks = _interopRequireDefault(__webpack_require__(124));
72903
73021
  var _hideColumn = _interopRequireDefault(__webpack_require__(591));
72904
73022
  var _showColumn = _interopRequireDefault(__webpack_require__(592));
72905
73023
  var _translations = __webpack_require__(226);
73024
+ var _a11y = __webpack_require__(114);
73025
+ var _constants = __webpack_require__(250);
72906
73026
  __webpack_require__(593);
73027
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
72907
73028
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
72908
73029
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
73030
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
72909
73031
  _pluginHooks.default.getSingleton().register('beforeHideColumns');
72910
73032
  _pluginHooks.default.getSingleton().register('afterHideColumns');
72911
73033
  _pluginHooks.default.getSingleton().register('beforeUnhideColumns');
@@ -72913,6 +73035,9 @@ _pluginHooks.default.getSingleton().register('afterUnhideColumns');
72913
73035
  const PLUGIN_KEY = 'hiddenColumns';
72914
73036
  exports.PLUGIN_KEY = PLUGIN_KEY;
72915
73037
  const PLUGIN_PRIORITY = 310;
73038
+ exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
73039
+ const BEFORE_INDICATOR_CLASSNAME = 'beforeHiddenColumnIndicator';
73040
+ const AFTER_INDICATOR_CLASSNAME = 'afterHiddenColumnIndicator';
72916
73041
 
72917
73042
  /* eslint-disable jsdoc/require-description-complete-sentence */
72918
73043
 
@@ -73020,12 +73145,18 @@ const PLUGIN_PRIORITY = 310;
73020
73145
  * ```
73021
73146
  * :::
73022
73147
  */
73023
- exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
73024
73148
  var _settings = /*#__PURE__*/new WeakMap();
73025
73149
  var _hiddenColumnsMap = /*#__PURE__*/new WeakMap();
73150
+ var _clearIndicatorElements = /*#__PURE__*/new WeakSet();
73026
73151
  class HiddenColumns extends _base.BasePlugin {
73027
73152
  constructor() {
73028
73153
  super(...arguments);
73154
+ /**
73155
+ * Remove the indicator elements from the provided column header element.
73156
+ *
73157
+ * @param {HTMLElement} TH Column header element.
73158
+ */
73159
+ _classPrivateMethodInitSpec(this, _clearIndicatorElements);
73029
73160
  /**
73030
73161
  * Cached plugin settings.
73031
73162
  *
@@ -73109,8 +73240,15 @@ class HiddenColumns extends _base.BasePlugin {
73109
73240
  * Disables the plugin functionality for this Handsontable instance.
73110
73241
  */
73111
73242
  disablePlugin() {
73243
+ const clearColHeader = (columnIndex, TH) => {
73244
+ _classPrivateMethodGet(this, _clearIndicatorElements, _clearIndicatorElements2).call(this, TH);
73245
+ };
73112
73246
  this.hot.columnIndexMapper.unregisterMap(this.pluginName);
73113
73247
  (0, _classPrivateFieldSet2.default)(this, _settings, {});
73248
+ this.hot.addHook('afterGetColHeader', clearColHeader);
73249
+ this.hot.addHookOnce('afterViewRender', () => {
73250
+ this.hot.removeHook('afterGetColHeader', clearColHeader);
73251
+ });
73114
73252
  super.disablePlugin();
73115
73253
  this.resetCellsMeta();
73116
73254
  }
@@ -73252,7 +73390,6 @@ class HiddenColumns extends _base.BasePlugin {
73252
73390
  }
73253
73391
  });
73254
73392
  }
73255
-
73256
73393
  /**
73257
73394
  * Adds the additional column width for the hidden column indicators.
73258
73395
  *
@@ -73357,14 +73494,35 @@ class HiddenColumns extends _base.BasePlugin {
73357
73494
  * @param {HTMLElement} TH Header's TH element.
73358
73495
  */
73359
73496
  onAfterGetColHeader(column, TH) {
73497
+ const areAriaTagsEnabled = this.hot.getSettings().ariaTags;
73498
+ const beforeHiddenColumnIndicatorElement = TH.querySelector('.beforeHiddenColumnIndicator');
73499
+ const afterHiddenColumnIndicatorElement = TH.querySelector('.afterHiddenColumnIndicator');
73360
73500
  if (!(0, _classPrivateFieldGet2.default)(this, _settings).indicators || column < 0) {
73501
+ beforeHiddenColumnIndicatorElement === null || beforeHiddenColumnIndicatorElement === void 0 || beforeHiddenColumnIndicatorElement.remove();
73502
+ afterHiddenColumnIndicatorElement === null || afterHiddenColumnIndicatorElement === void 0 || afterHiddenColumnIndicatorElement.remove();
73361
73503
  return;
73362
73504
  }
73363
73505
  const classList = [];
73364
73506
  if (column >= 1 && this.isHidden(column - 1)) {
73507
+ if (!afterHiddenColumnIndicatorElement) {
73508
+ const attributesToAdd = areAriaTagsEnabled ? [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN))] : [];
73509
+ (0, _element.appendElement)(TH, {
73510
+ tagName: 'div',
73511
+ attributes: attributesToAdd,
73512
+ className: AFTER_INDICATOR_CLASSNAME
73513
+ });
73514
+ }
73365
73515
  classList.push('afterHiddenColumn');
73366
73516
  }
73367
73517
  if (column < this.hot.countCols() - 1 && this.isHidden(column + 1)) {
73518
+ if (!beforeHiddenColumnIndicatorElement) {
73519
+ const attributesToAdd = areAriaTagsEnabled ? [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN))] : [];
73520
+ (0, _element.appendElement)(TH, {
73521
+ tagName: 'div',
73522
+ attributes: attributesToAdd,
73523
+ className: BEFORE_INDICATOR_CLASSNAME
73524
+ });
73525
+ }
73368
73526
  classList.push('beforeHiddenColumn');
73369
73527
  }
73370
73528
  (0, _element.addClass)(TH, classList);
@@ -73403,6 +73561,11 @@ class HiddenColumns extends _base.BasePlugin {
73403
73561
  }
73404
73562
  }
73405
73563
  exports.HiddenColumns = HiddenColumns;
73564
+ function _clearIndicatorElements2(TH) {
73565
+ Array.from(TH.querySelectorAll(`.${AFTER_INDICATOR_CLASSNAME}, .${BEFORE_INDICATOR_CLASSNAME}`)).forEach(element => {
73566
+ element.remove();
73567
+ });
73568
+ }
73406
73569
 
73407
73570
  /***/ }),
73408
73571
  /* 591 */
@@ -73615,9 +73778,13 @@ var _pluginHooks = _interopRequireDefault(__webpack_require__(124));
73615
73778
  var _hideRow = _interopRequireDefault(__webpack_require__(596));
73616
73779
  var _showRow = _interopRequireDefault(__webpack_require__(597));
73617
73780
  var _translations = __webpack_require__(226);
73781
+ var _a11y = __webpack_require__(114);
73782
+ var _constants = __webpack_require__(250);
73618
73783
  __webpack_require__(598);
73784
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
73619
73785
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
73620
73786
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
73787
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
73621
73788
  _pluginHooks.default.getSingleton().register('beforeHideRows');
73622
73789
  _pluginHooks.default.getSingleton().register('afterHideRows');
73623
73790
  _pluginHooks.default.getSingleton().register('beforeUnhideRows');
@@ -73625,6 +73792,9 @@ _pluginHooks.default.getSingleton().register('afterUnhideRows');
73625
73792
  const PLUGIN_KEY = 'hiddenRows';
73626
73793
  exports.PLUGIN_KEY = PLUGIN_KEY;
73627
73794
  const PLUGIN_PRIORITY = 320;
73795
+ exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
73796
+ const AFTER_INDICATOR_CLASSNAME = 'afterHiddenRowIndicator';
73797
+ const BEFORE_INDICATOR_CLASSNAME = 'beforeHiddenRowIndicator';
73628
73798
 
73629
73799
  /* eslint-disable jsdoc/require-description-complete-sentence */
73630
73800
 
@@ -73732,12 +73902,18 @@ const PLUGIN_PRIORITY = 320;
73732
73902
  * ```
73733
73903
  * :::
73734
73904
  */
73735
- exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
73736
73905
  var _settings = /*#__PURE__*/new WeakMap();
73737
73906
  var _hiddenRowsMap = /*#__PURE__*/new WeakMap();
73907
+ var _clearIndicatorElements = /*#__PURE__*/new WeakSet();
73738
73908
  class HiddenRows extends _base.BasePlugin {
73739
73909
  constructor() {
73740
73910
  super(...arguments);
73911
+ /**
73912
+ * Remove the indicator elements from the provided row header element.
73913
+ *
73914
+ * @param {HTMLElement} TH Column header element.
73915
+ */
73916
+ _classPrivateMethodInitSpec(this, _clearIndicatorElements);
73741
73917
  /**
73742
73918
  * Cached settings from Handsontable settings.
73743
73919
  *
@@ -73821,8 +73997,15 @@ class HiddenRows extends _base.BasePlugin {
73821
73997
  * Disables the plugin functionality for this Handsontable instance.
73822
73998
  */
73823
73999
  disablePlugin() {
74000
+ const clearRowHeader = (columnIndex, TH) => {
74001
+ _classPrivateMethodGet(this, _clearIndicatorElements, _clearIndicatorElements2).call(this, TH);
74002
+ };
73824
74003
  this.hot.rowIndexMapper.unregisterMap(this.pluginName);
73825
74004
  (0, _classPrivateFieldSet2.default)(this, _settings, {});
74005
+ this.hot.addHook('afterGetRowHeader', clearRowHeader);
74006
+ this.hot.addHookOnce('afterViewRender', () => {
74007
+ this.hot.removeHook('afterGetRowHeader', clearRowHeader);
74008
+ });
73826
74009
  super.disablePlugin();
73827
74010
  this.resetCellsMeta();
73828
74011
  }
@@ -73961,7 +74144,6 @@ class HiddenRows extends _base.BasePlugin {
73961
74144
  }
73962
74145
  });
73963
74146
  }
73964
-
73965
74147
  /**
73966
74148
  * Adds the additional row height for the hidden row indicators.
73967
74149
  *
@@ -74061,14 +74243,35 @@ class HiddenRows extends _base.BasePlugin {
74061
74243
  * @param {HTMLElement} TH Header's TH element.
74062
74244
  */
74063
74245
  onAfterGetRowHeader(row, TH) {
74246
+ const areAriaTagsEnabled = this.hot.getSettings().ariaTags;
74247
+ const beforeHiddenRowIndicatorElement = TH.querySelector('.beforeHiddenRowIndicator');
74248
+ const afterHiddenRowIndicatorElement = TH.querySelector('.afterHiddenRowIndicator');
74064
74249
  if (!(0, _classPrivateFieldGet2.default)(this, _settings).indicators || row < 0) {
74250
+ beforeHiddenRowIndicatorElement === null || beforeHiddenRowIndicatorElement === void 0 || beforeHiddenRowIndicatorElement.remove();
74251
+ afterHiddenRowIndicatorElement === null || afterHiddenRowIndicatorElement === void 0 || afterHiddenRowIndicatorElement.remove();
74065
74252
  return;
74066
74253
  }
74067
74254
  const classList = [];
74068
74255
  if (row >= 1 && this.isHidden(row - 1)) {
74256
+ if (!afterHiddenRowIndicatorElement) {
74257
+ const attributesToAdd = areAriaTagsEnabled ? [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW))] : [];
74258
+ (0, _element.appendElement)(TH, {
74259
+ tagName: 'div',
74260
+ attributes: attributesToAdd,
74261
+ className: AFTER_INDICATOR_CLASSNAME
74262
+ });
74263
+ }
74069
74264
  classList.push('afterHiddenRow');
74070
74265
  }
74071
74266
  if (row < this.hot.countRows() - 1 && this.isHidden(row + 1)) {
74267
+ if (!beforeHiddenRowIndicatorElement) {
74268
+ const attributesToAdd = areAriaTagsEnabled ? [(0, _a11y.A11Y_LABEL)(this.hot.getTranslatedPhrase(_constants.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW))] : [];
74269
+ (0, _element.appendElement)(TH, {
74270
+ tagName: 'div',
74271
+ attributes: attributesToAdd,
74272
+ className: BEFORE_INDICATOR_CLASSNAME
74273
+ });
74274
+ }
74072
74275
  classList.push('beforeHiddenRow');
74073
74276
  }
74074
74277
  (0, _element.addClass)(TH, classList);
@@ -74107,6 +74310,11 @@ class HiddenRows extends _base.BasePlugin {
74107
74310
  }
74108
74311
  }
74109
74312
  exports.HiddenRows = HiddenRows;
74313
+ function _clearIndicatorElements2(TH) {
74314
+ Array.from(TH.querySelectorAll(`.${AFTER_INDICATOR_CLASSNAME}, .${BEFORE_INDICATOR_CLASSNAME}`)).forEach(element => {
74315
+ element.remove();
74316
+ });
74317
+ }
74110
74318
 
74111
74319
  /***/ }),
74112
74320
  /* 596 */
@@ -80205,6 +80413,8 @@ var _element = __webpack_require__(107);
80205
80413
  var _rootComparator = __webpack_require__(631);
80206
80414
  var _utils2 = __webpack_require__(632);
80207
80415
  var _domHelpers = __webpack_require__(633);
80416
+ var _a11y = __webpack_require__(114);
80417
+ var _constants = __webpack_require__(250);
80208
80418
  __webpack_require__(634);
80209
80419
  const PLUGIN_KEY = 'multiColumnSorting';
80210
80420
  exports.PLUGIN_KEY = PLUGIN_KEY;
@@ -80466,6 +80676,25 @@ class MultiColumnSorting extends _columnSorting.ColumnSorting {
80466
80676
  }
80467
80677
  }
80468
80678
 
80679
+ /**
80680
+ * Update sorting indicator.
80681
+ *
80682
+ * @private
80683
+ * @param {number} column Visual column index.
80684
+ * @param {HTMLElement} headerSpanElement Header span element.
80685
+ */
80686
+ updateSortingIndicator(column, headerSpanElement) {
80687
+ super.updateSortingIndicator(column, headerSpanElement);
80688
+ const indicatorElement = headerSpanElement.querySelector('.columnSortingIndicator');
80689
+ if (!indicatorElement || !this.hot.getSettings().ariaTags || !this.columnStatesManager.isColumnSorted(column) || this.columnStatesManager.getNumberOfSortedColumns() <= 1) {
80690
+ return;
80691
+ }
80692
+ const multiColumnSortingOrder = this.columnStatesManager.getIndexOfColumnInSortQueue(column) + 1;
80693
+ const a11yLabelAttribute = (0, _a11y.A11Y_LABEL)(`${this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER)} ${multiColumnSortingOrder}.`);
80694
+ (0, _element.removeAttribute)(indicatorElement, (0, _a11y.A11Y_HIDDEN)()[0]);
80695
+ (0, _element.setAttribute)(indicatorElement, ...a11yLabelAttribute);
80696
+ }
80697
+
80469
80698
  /**
80470
80699
  * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called
80471
80700
  * for `updateSettings` in specific situations.
@@ -84225,7 +84454,8 @@ class NestedRows extends _base.BasePlugin {
84225
84454
  /**
84226
84455
  * Updates the plugin's state.
84227
84456
  *
84228
- * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the following configuration options:
84457
+ * This method is executed when [`updateSettings()`](@/api/core.md#updatesettings) is invoked with any of the
84458
+ * following configuration options:
84229
84459
  * - [`nestedRows`](@/api/options.md#nestedrows)
84230
84460
  */
84231
84461
  updatePlugin() {
@@ -85813,6 +86043,7 @@ var _number = __webpack_require__(140);
85813
86043
  var _element = __webpack_require__(107);
85814
86044
  var _base = _interopRequireDefault(__webpack_require__(658));
85815
86045
  var _a11y = __webpack_require__(114);
86046
+ var _constants = __webpack_require__(250);
85816
86047
  /**
85817
86048
  * Class responsible for the UI in the Nested Rows' row headers.
85818
86049
  *
@@ -85830,7 +86061,6 @@ class HeadersUI extends _base.default {
85830
86061
  return {
85831
86062
  indicatorContainer: 'ht_nestingLevels',
85832
86063
  parent: 'ht_nestingParent',
85833
- indicator: 'ht_nestingLevel',
85834
86064
  emptyIndicator: 'ht_nestingLevel_empty',
85835
86065
  button: 'ht_nestingButton',
85836
86066
  expandButton: 'ht_nestingExpand',
@@ -85908,12 +86138,12 @@ class HeadersUI extends _base.default {
85908
86138
  if (this.collapsingUI.areChildrenCollapsed(rowIndex)) {
85909
86139
  (0, _element.addClass)(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.expandButton}`);
85910
86140
  if (ariaEnabled) {
85911
- (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(false)]);
86141
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(false), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.ROW_HEADER_DESCRIPTION_EXPAND_ROW))]);
85912
86142
  }
85913
86143
  } else {
85914
86144
  (0, _element.addClass)(buttonsContainer, `${HeadersUI.CSS_CLASSES.button} ${HeadersUI.CSS_CLASSES.collapseButton}`);
85915
86145
  if (ariaEnabled) {
85916
- (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(true)]);
86146
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(true), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW))]);
85917
86147
  }
85918
86148
  }
85919
86149
  innerDiv.appendChild(buttonsContainer);