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
package/helpers/a11y.mjs CHANGED
@@ -15,6 +15,7 @@ export const A11Y_SCOPE_COL = () => ['scope', 'col'];
15
15
  export const A11Y_SCOPE_ROW = () => ['scope', 'row'];
16
16
  export const A11Y_TEXT = () => ['type', 'text'];
17
17
  export const A11Y_LABEL = val => ['aria-label', val];
18
+ export const A11Y_DESCRIPTION = val => ['aria-description', val];
18
19
  export const A11Y_HIDDEN = () => ['aria-hidden', 'true'];
19
20
  export const A11Y_DISABLED = () => ['aria-disabled', 'true'];
20
21
  export const A11Y_MULTISELECTABLE = () => ['aria-multiselectable', 'true'];
@@ -3,6 +3,7 @@
3
3
  exports.__esModule = true;
4
4
  exports.addClass = addClass;
5
5
  exports.addEvent = addEvent;
6
+ exports.appendElement = appendElement;
6
7
  exports.clearTextSelection = clearTextSelection;
7
8
  exports.closest = closest;
8
9
  exports.closestDown = closestDown;
@@ -1136,4 +1137,32 @@ function runWithSelectedContendEditableElement(element, callback) {
1136
1137
  makeElementContentEditableAndSelectItsContent(element, invisibleSelection);
1137
1138
  callback();
1138
1139
  removeContentEditableFromElementAndDeselect(element, invisibleSelection);
1140
+ }
1141
+
1142
+ /**
1143
+ * Creates a new DOM element and appends it to the parent element with the provided class name(s) and attributes.
1144
+ *
1145
+ * @param {HTMLElement} parentElement The parent element.
1146
+ * @param {object} properties The properties object.
1147
+ * @param {string} properties.tagName The type of the new element.
1148
+ * @param {string|string[]} properties.className Class name as string or array of strings.
1149
+ * @param {Array[]} properties.attributes An array containing the attributes to be added. Each element of the array
1150
+ * should be an array in a form of `[attributeName, attributeValue]`.
1151
+ * @returns {HTMLElement} The created div element.
1152
+ */
1153
+ function appendElement(parentElement, _ref) {
1154
+ let {
1155
+ tagName,
1156
+ className,
1157
+ attributes
1158
+ } = _ref;
1159
+ const element = parentElement.ownerDocument.createElement(tagName);
1160
+ if (className) {
1161
+ addClass(element, className);
1162
+ }
1163
+ if (attributes && attributes.length) {
1164
+ setAttribute(element, attributes);
1165
+ }
1166
+ parentElement.appendChild(element);
1167
+ return element;
1139
1168
  }
@@ -1077,4 +1077,32 @@ export function runWithSelectedContendEditableElement(element, callback) {
1077
1077
  makeElementContentEditableAndSelectItsContent(element, invisibleSelection);
1078
1078
  callback();
1079
1079
  removeContentEditableFromElementAndDeselect(element, invisibleSelection);
1080
+ }
1081
+
1082
+ /**
1083
+ * Creates a new DOM element and appends it to the parent element with the provided class name(s) and attributes.
1084
+ *
1085
+ * @param {HTMLElement} parentElement The parent element.
1086
+ * @param {object} properties The properties object.
1087
+ * @param {string} properties.tagName The type of the new element.
1088
+ * @param {string|string[]} properties.className Class name as string or array of strings.
1089
+ * @param {Array[]} properties.attributes An array containing the attributes to be added. Each element of the array
1090
+ * should be an array in a form of `[attributeName, attributeValue]`.
1091
+ * @returns {HTMLElement} The created div element.
1092
+ */
1093
+ export function appendElement(parentElement, _ref) {
1094
+ let {
1095
+ tagName,
1096
+ className,
1097
+ attributes
1098
+ } = _ref;
1099
+ const element = parentElement.ownerDocument.createElement(tagName);
1100
+ if (className) {
1101
+ addClass(element, className);
1102
+ }
1103
+ if (attributes && attributes.length) {
1104
+ setAttribute(element, attributes);
1105
+ }
1106
+ parentElement.appendChild(element);
1107
+ return element;
1080
1108
  }
package/helpers/mixed.js CHANGED
@@ -134,7 +134,7 @@ const domMessages = {
134
134
  function _injectProductInfo(key, element) {
135
135
  const hasValidType = !isEmpty(key);
136
136
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
137
- const hotVersion = "0.0.0-next-e54c3d6-20231026";
137
+ const hotVersion = "0.0.0-next-42d5bd7-20231027";
138
138
  let keyValidityDate;
139
139
  let consoleMessageState = 'invalid';
140
140
  let domMessageState = 'invalid';
package/helpers/mixed.mjs CHANGED
@@ -124,7 +124,7 @@ const domMessages = {
124
124
  export function _injectProductInfo(key, element) {
125
125
  const hasValidType = !isEmpty(key);
126
126
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
127
- const hotVersion = "0.0.0-next-e54c3d6-20231026";
127
+ const hotVersion = "0.0.0-next-42d5bd7-20231027";
128
128
  let keyValidityDate;
129
129
  let consoleMessageState = 'invalid';
130
130
  let domMessageState = 'invalid';
package/i18n/constants.js CHANGED
@@ -171,4 +171,30 @@ exports.CHECKBOX_RENDERER_NAMESPACE = CHECKBOX_RENDERER_NAMESPACE;
171
171
  const CHECKBOX_CHECKED = `${CHECKBOX_RENDERER_NAMESPACE}checked`;
172
172
  exports.CHECKBOX_CHECKED = CHECKBOX_CHECKED;
173
173
  const CHECKBOX_UNCHECKED = `${CHECKBOX_RENDERER_NAMESPACE}unchecked`;
174
- exports.CHECKBOX_UNCHECKED = CHECKBOX_UNCHECKED;
174
+ exports.CHECKBOX_UNCHECKED = CHECKBOX_UNCHECKED;
175
+ const COLUMN_HEADER_NAMESPACE = 'ColumnHeader:';
176
+ exports.COLUMN_HEADER_NAMESPACE = COLUMN_HEADER_NAMESPACE;
177
+ const COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN = `${COLUMN_HEADER_NAMESPACE}description.expandColumn`;
178
+ exports.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN = COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN;
179
+ const COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN = `${COLUMN_HEADER_NAMESPACE}description.collapseColumn`;
180
+ exports.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN = COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN;
181
+ const COLUMN_HEADER_DESCRIPTION_SORT_ROWS = `${COLUMN_HEADER_NAMESPACE}description.sortRows`;
182
+ exports.COLUMN_HEADER_DESCRIPTION_SORT_ROWS = COLUMN_HEADER_DESCRIPTION_SORT_ROWS;
183
+ const COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER = `${COLUMN_HEADER_NAMESPACE}label.multiColumnSortOrder`;
184
+ exports.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER = COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER;
185
+ const COLUMN_HEADER_LABEL_OPEN_MENU = `${COLUMN_HEADER_NAMESPACE}label.openMenu`;
186
+ exports.COLUMN_HEADER_LABEL_OPEN_MENU = COLUMN_HEADER_LABEL_OPEN_MENU;
187
+ const COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN = `${COLUMN_HEADER_NAMESPACE}label.beforeHiddenColumn`;
188
+ exports.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN = COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN;
189
+ const COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN = `${COLUMN_HEADER_NAMESPACE}label.afterHiddenColumn`;
190
+ exports.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN = COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN;
191
+ const ROW_HEADER_NAMESPACE = 'RowHeader:';
192
+ exports.ROW_HEADER_NAMESPACE = ROW_HEADER_NAMESPACE;
193
+ const ROW_HEADER_DESCRIPTION_EXPAND_ROW = `${ROW_HEADER_NAMESPACE}description.expandRow`;
194
+ exports.ROW_HEADER_DESCRIPTION_EXPAND_ROW = ROW_HEADER_DESCRIPTION_EXPAND_ROW;
195
+ const ROW_HEADER_DESCRIPTION_COLLAPSE_ROW = `${ROW_HEADER_NAMESPACE}description.collapseRow`;
196
+ exports.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW = ROW_HEADER_DESCRIPTION_COLLAPSE_ROW;
197
+ const ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW = `${ROW_HEADER_NAMESPACE}label.beforeHiddenRow`;
198
+ exports.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW = ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW;
199
+ const ROW_HEADER_LABEL_AFTER_HIDDEN_ROW = `${ROW_HEADER_NAMESPACE}label.afterHiddenRow`;
200
+ exports.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW = ROW_HEADER_LABEL_AFTER_HIDDEN_ROW;
@@ -86,4 +86,17 @@ export const FILTERS_BUTTONS_PLACEHOLDER_VALUE = `${FILTERS_NAMESPACE}buttons.pl
86
86
  export const FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE = `${FILTERS_NAMESPACE}buttons.placeholder.secondValue`;
87
87
  export const CHECKBOX_RENDERER_NAMESPACE = 'CheckboxRenderer:';
88
88
  export const CHECKBOX_CHECKED = `${CHECKBOX_RENDERER_NAMESPACE}checked`;
89
- export const CHECKBOX_UNCHECKED = `${CHECKBOX_RENDERER_NAMESPACE}unchecked`;
89
+ export const CHECKBOX_UNCHECKED = `${CHECKBOX_RENDERER_NAMESPACE}unchecked`;
90
+ export const COLUMN_HEADER_NAMESPACE = 'ColumnHeader:';
91
+ export const COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN = `${COLUMN_HEADER_NAMESPACE}description.expandColumn`;
92
+ export const COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN = `${COLUMN_HEADER_NAMESPACE}description.collapseColumn`;
93
+ export const COLUMN_HEADER_DESCRIPTION_SORT_ROWS = `${COLUMN_HEADER_NAMESPACE}description.sortRows`;
94
+ export const COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER = `${COLUMN_HEADER_NAMESPACE}label.multiColumnSortOrder`;
95
+ export const COLUMN_HEADER_LABEL_OPEN_MENU = `${COLUMN_HEADER_NAMESPACE}label.openMenu`;
96
+ export const COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN = `${COLUMN_HEADER_NAMESPACE}label.beforeHiddenColumn`;
97
+ export const COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN = `${COLUMN_HEADER_NAMESPACE}label.afterHiddenColumn`;
98
+ export const ROW_HEADER_NAMESPACE = 'RowHeader:';
99
+ export const ROW_HEADER_DESCRIPTION_EXPAND_ROW = `${ROW_HEADER_NAMESPACE}description.expandRow`;
100
+ export const ROW_HEADER_DESCRIPTION_COLLAPSE_ROW = `${ROW_HEADER_NAMESPACE}description.collapseRow`;
101
+ export const ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW = `${ROW_HEADER_NAMESPACE}label.beforeHiddenRow`;
102
+ export const ROW_HEADER_LABEL_AFTER_HIDDEN_ROW = `${ROW_HEADER_NAMESPACE}label.afterHiddenRow`;
@@ -91,7 +91,18 @@ const dictionary = {
91
91
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',
92
92
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value',
93
93
  [C.CHECKBOX_CHECKED]: 'Checked',
94
- [C.CHECKBOX_UNCHECKED]: 'Unchecked'
94
+ [C.CHECKBOX_UNCHECKED]: 'Unchecked',
95
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Press ENTER to expand column.',
96
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Press ENTER to collapse column.',
97
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Press ENTER to change sorting.',
98
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Multi-column sorting order:',
99
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Press CTRL/CMD+ENTER to open menu.',
100
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'The next column is hidden.',
101
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'The previous column is hidden.',
102
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Press ENTER to expand row.',
103
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Press ENTER to collapse row.',
104
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'The next row is hidden.',
105
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'The previous row is hidden.'
95
106
  };
96
107
  var _default = dictionary;
97
108
  exports.default = _default;
@@ -85,6 +85,17 @@ const dictionary = {
85
85
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',
86
86
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value',
87
87
  [C.CHECKBOX_CHECKED]: 'Checked',
88
- [C.CHECKBOX_UNCHECKED]: 'Unchecked'
88
+ [C.CHECKBOX_UNCHECKED]: 'Unchecked',
89
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Press ENTER to expand column.',
90
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Press ENTER to collapse column.',
91
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Press ENTER to change sorting.',
92
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Multi-column sorting order:',
93
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Press CTRL/CMD+ENTER to open menu.',
94
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'The next column is hidden.',
95
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'The previous column is hidden.',
96
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Press ENTER to expand row.',
97
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Press ENTER to collapse row.',
98
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'The next row is hidden.',
99
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'The previous row is hidden.'
89
100
  };
90
101
  export default dictionary;
@@ -91,7 +91,18 @@ const dictionary = {
91
91
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Wartość',
92
92
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Druga wartość',
93
93
  [C.CHECKBOX_CHECKED]: 'Zaznaczony',
94
- [C.CHECKBOX_UNCHECKED]: 'Odznaczony'
94
+ [C.CHECKBOX_UNCHECKED]: 'Odznaczony',
95
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Naciśnij ENTER aby rozwinąć kolumnę.',
96
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Naciśnij ENTER aby zwinąć kolumnę.',
97
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Naciśnij ENTER aby zmienić sortowanie.',
98
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Kolejność w sortowaniu po wielu kolumnach:',
99
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Naciśnij CTRL/CMD+ENTER aby otworzyć menu kontekstowe.',
100
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'Następna kolumna jest ukryta.',
101
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'Poprzednia kolumna jest ukryta.',
102
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Naciśnij ENTER aby rozwinąć wiersz.',
103
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Naciśnij ENTER aby zwinąć wiersz.',
104
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'Następny wiersz jest ukryty.',
105
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'Poprzedni wiersz jest ukryty.'
95
106
  };
96
107
  var _default = dictionary;
97
108
  exports.default = _default;
@@ -85,6 +85,17 @@ const dictionary = {
85
85
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Wartość',
86
86
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Druga wartość',
87
87
  [C.CHECKBOX_CHECKED]: 'Zaznaczony',
88
- [C.CHECKBOX_UNCHECKED]: 'Odznaczony'
88
+ [C.CHECKBOX_UNCHECKED]: 'Odznaczony',
89
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Naciśnij ENTER aby rozwinąć kolumnę.',
90
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Naciśnij ENTER aby zwinąć kolumnę.',
91
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Naciśnij ENTER aby zmienić sortowanie.',
92
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Kolejność w sortowaniu po wielu kolumnach:',
93
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Naciśnij CTRL/CMD+ENTER aby otworzyć menu kontekstowe.',
94
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'Następna kolumna jest ukryta.',
95
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'Poprzednia kolumna jest ukryta.',
96
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Naciśnij ENTER aby rozwinąć wiersz.',
97
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Naciśnij ENTER aby zwinąć wiersz.',
98
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'Następny wiersz jest ukryty.',
99
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'Poprzedni wiersz jest ukryty.'
89
100
  };
90
101
  export default dictionary;
package/languages/all.js CHANGED
@@ -520,7 +520,18 @@ const dictionary = {
520
520
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',
521
521
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value',
522
522
  [C.CHECKBOX_CHECKED]: 'Checked',
523
- [C.CHECKBOX_UNCHECKED]: 'Unchecked'
523
+ [C.CHECKBOX_UNCHECKED]: 'Unchecked',
524
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Press ENTER to expand column.',
525
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Press ENTER to collapse column.',
526
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Press ENTER to change sorting.',
527
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Multi-column sorting order:',
528
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Press CTRL/CMD+ENTER to open menu.',
529
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'The next column is hidden.',
530
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'The previous column is hidden.',
531
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Press ENTER to expand row.',
532
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Press ENTER to collapse row.',
533
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'The next row is hidden.',
534
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'The previous row is hidden.'
524
535
  };
525
536
  _handsontable.default.languages.registerLanguageDictionary(dictionary);
526
537
  var _default = dictionary;
@@ -1422,7 +1433,18 @@ const dictionary = {
1422
1433
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Wartość',
1423
1434
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Druga wartość',
1424
1435
  [C.CHECKBOX_CHECKED]: 'Zaznaczony',
1425
- [C.CHECKBOX_UNCHECKED]: 'Odznaczony'
1436
+ [C.CHECKBOX_UNCHECKED]: 'Odznaczony',
1437
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Naciśnij ENTER aby rozwinąć kolumnę.',
1438
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Naciśnij ENTER aby zwinąć kolumnę.',
1439
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Naciśnij ENTER aby zmienić sortowanie.',
1440
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Kolejność w sortowaniu po wielu kolumnach:',
1441
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Naciśnij CTRL/CMD+ENTER aby otworzyć menu kontekstowe.',
1442
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'Następna kolumna jest ukryta.',
1443
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'Poprzednia kolumna jest ukryta.',
1444
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Naciśnij ENTER aby rozwinąć wiersz.',
1445
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Naciśnij ENTER aby zwinąć wiersz.',
1446
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'Następny wiersz jest ukryty.',
1447
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'Poprzedni wiersz jest ukryty.'
1426
1448
  };
1427
1449
  _handsontable.default.languages.registerLanguageDictionary(dictionary);
1428
1450
  var _default = dictionary;
@@ -154,7 +154,18 @@ const dictionary = {
154
154
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',
155
155
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value',
156
156
  [C.CHECKBOX_CHECKED]: 'Checked',
157
- [C.CHECKBOX_UNCHECKED]: 'Unchecked'
157
+ [C.CHECKBOX_UNCHECKED]: 'Unchecked',
158
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Press ENTER to expand column.',
159
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Press ENTER to collapse column.',
160
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Press ENTER to change sorting.',
161
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Multi-column sorting order:',
162
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Press CTRL/CMD+ENTER to open menu.',
163
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'The next column is hidden.',
164
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'The previous column is hidden.',
165
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Press ENTER to expand row.',
166
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Press ENTER to collapse row.',
167
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'The next row is hidden.',
168
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'The previous row is hidden.'
158
169
  };
159
170
  _handsontable.default.languages.registerLanguageDictionary(dictionary);
160
171
  var _default = dictionary;
@@ -86,7 +86,18 @@ const dictionary = {
86
86
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',
87
87
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value',
88
88
  [C.CHECKBOX_CHECKED]: 'Checked',
89
- [C.CHECKBOX_UNCHECKED]: 'Unchecked'
89
+ [C.CHECKBOX_UNCHECKED]: 'Unchecked',
90
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Press ENTER to expand column.',
91
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Press ENTER to collapse column.',
92
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Press ENTER to change sorting.',
93
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Multi-column sorting order:',
94
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Press CTRL/CMD+ENTER to open menu.',
95
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'The next column is hidden.',
96
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'The previous column is hidden.',
97
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Press ENTER to expand row.',
98
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Press ENTER to collapse row.',
99
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'The next row is hidden.',
100
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'The previous row is hidden.'
90
101
  };
91
102
  Handsontable.languages.registerLanguageDictionary(dictionary);
92
103
  export default dictionary;
@@ -520,7 +520,18 @@ const dictionary = {
520
520
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Value',
521
521
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Second value',
522
522
  [C.CHECKBOX_CHECKED]: 'Checked',
523
- [C.CHECKBOX_UNCHECKED]: 'Unchecked'
523
+ [C.CHECKBOX_UNCHECKED]: 'Unchecked',
524
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Press ENTER to expand column.',
525
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Press ENTER to collapse column.',
526
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Press ENTER to change sorting.',
527
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Multi-column sorting order:',
528
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Press CTRL/CMD+ENTER to open menu.',
529
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'The next column is hidden.',
530
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'The previous column is hidden.',
531
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Press ENTER to expand row.',
532
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Press ENTER to collapse row.',
533
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'The next row is hidden.',
534
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'The previous row is hidden.'
524
535
  };
525
536
  _handsontable.default.languages.registerLanguageDictionary(dictionary);
526
537
  var _default = dictionary;
@@ -1422,7 +1433,18 @@ const dictionary = {
1422
1433
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Wartość',
1423
1434
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Druga wartość',
1424
1435
  [C.CHECKBOX_CHECKED]: 'Zaznaczony',
1425
- [C.CHECKBOX_UNCHECKED]: 'Odznaczony'
1436
+ [C.CHECKBOX_UNCHECKED]: 'Odznaczony',
1437
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Naciśnij ENTER aby rozwinąć kolumnę.',
1438
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Naciśnij ENTER aby zwinąć kolumnę.',
1439
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Naciśnij ENTER aby zmienić sortowanie.',
1440
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Kolejność w sortowaniu po wielu kolumnach:',
1441
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Naciśnij CTRL/CMD+ENTER aby otworzyć menu kontekstowe.',
1442
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'Następna kolumna jest ukryta.',
1443
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'Poprzednia kolumna jest ukryta.',
1444
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Naciśnij ENTER aby rozwinąć wiersz.',
1445
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Naciśnij ENTER aby zwinąć wiersz.',
1446
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'Następny wiersz jest ukryty.',
1447
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'Poprzedni wiersz jest ukryty.'
1426
1448
  };
1427
1449
  _handsontable.default.languages.registerLanguageDictionary(dictionary);
1428
1450
  var _default = dictionary;
@@ -154,7 +154,18 @@ const dictionary = {
154
154
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Wartość',
155
155
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Druga wartość',
156
156
  [C.CHECKBOX_CHECKED]: 'Zaznaczony',
157
- [C.CHECKBOX_UNCHECKED]: 'Odznaczony'
157
+ [C.CHECKBOX_UNCHECKED]: 'Odznaczony',
158
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Naciśnij ENTER aby rozwinąć kolumnę.',
159
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Naciśnij ENTER aby zwinąć kolumnę.',
160
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Naciśnij ENTER aby zmienić sortowanie.',
161
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Kolejność w sortowaniu po wielu kolumnach:',
162
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Naciśnij CTRL/CMD+ENTER aby otworzyć menu kontekstowe.',
163
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'Następna kolumna jest ukryta.',
164
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'Poprzednia kolumna jest ukryta.',
165
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Naciśnij ENTER aby rozwinąć wiersz.',
166
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Naciśnij ENTER aby zwinąć wiersz.',
167
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'Następny wiersz jest ukryty.',
168
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'Poprzedni wiersz jest ukryty.'
158
169
  };
159
170
  _handsontable.default.languages.registerLanguageDictionary(dictionary);
160
171
  var _default = dictionary;
@@ -86,7 +86,18 @@ const dictionary = {
86
86
  [C.FILTERS_BUTTONS_PLACEHOLDER_VALUE]: 'Wartość',
87
87
  [C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE]: 'Druga wartość',
88
88
  [C.CHECKBOX_CHECKED]: 'Zaznaczony',
89
- [C.CHECKBOX_UNCHECKED]: 'Odznaczony'
89
+ [C.CHECKBOX_UNCHECKED]: 'Odznaczony',
90
+ [C.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN]: 'Naciśnij ENTER aby rozwinąć kolumnę.',
91
+ [C.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN]: 'Naciśnij ENTER aby zwinąć kolumnę.',
92
+ [C.COLUMN_HEADER_DESCRIPTION_SORT_ROWS]: 'Naciśnij ENTER aby zmienić sortowanie.',
93
+ [C.COLUMN_HEADER_LABEL_MULTI_COLUMN_SORT_ORDER]: 'Kolejność w sortowaniu po wielu kolumnach:',
94
+ [C.COLUMN_HEADER_LABEL_OPEN_MENU]: 'Naciśnij CTRL/CMD+ENTER aby otworzyć menu kontekstowe.',
95
+ [C.COLUMN_HEADER_LABEL_BEFORE_HIDDEN_COLUMN]: 'Następna kolumna jest ukryta.',
96
+ [C.COLUMN_HEADER_LABEL_AFTER_HIDDEN_COLUMN]: 'Poprzednia kolumna jest ukryta.',
97
+ [C.ROW_HEADER_DESCRIPTION_EXPAND_ROW]: 'Naciśnij ENTER aby rozwinąć wiersz.',
98
+ [C.ROW_HEADER_DESCRIPTION_COLLAPSE_ROW]: 'Naciśnij ENTER aby zwinąć wiersz.',
99
+ [C.ROW_HEADER_LABEL_BEFORE_HIDDEN_ROW]: 'Następny wiersz jest ukryty.',
100
+ [C.ROW_HEADER_LABEL_AFTER_HIDDEN_ROW]: 'Poprzedni wiersz jest ukryty.'
90
101
  };
91
102
  Handsontable.languages.registerLanguageDictionary(dictionary);
92
103
  export default dictionary;
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "url": "https://github.com/handsontable/handsontable/issues"
11
11
  },
12
12
  "author": "Handsoncode <hello@handsontable.com>",
13
- "version": "0.0.0-next-e54c3d6-20231026",
13
+ "version": "0.0.0-next-42d5bd7-20231027",
14
14
  "main": "index",
15
15
  "module": "index.mjs",
16
16
  "jsnext:main": "index.mjs",
@@ -11,6 +11,7 @@ var _element = require("../../helpers/dom/element");
11
11
  var _eventManager = _interopRequireDefault(require("../../eventManager"));
12
12
  var _event = require("../../helpers/dom/event");
13
13
  var _a11y = require("../../helpers/a11y");
14
+ var _constants = require("../../i18n/constants");
14
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
16
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
16
17
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
@@ -520,7 +521,7 @@ class CollapsibleColumns extends _base.BasePlugin {
520
521
 
521
522
  // Add ARIA tags
522
523
  if (isAriaTagsEnabled) {
523
- (0, _element.setAttribute)(TH, ...(0, _a11y.A11Y_EXPANDED)(false));
524
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(false), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN))]);
524
525
  }
525
526
  } else {
526
527
  (0, _element.addClass)(collapsibleElement, 'expanded');
@@ -528,7 +529,7 @@ class CollapsibleColumns extends _base.BasePlugin {
528
529
 
529
530
  // Add ARIA tags
530
531
  if (isAriaTagsEnabled) {
531
- (0, _element.setAttribute)(TH, ...(0, _a11y.A11Y_EXPANDED)(true));
532
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_EXPANDED)(true), (0, _a11y.A11Y_DESCRIPTION)(this.hot.getTranslatedPhrase(_constants.COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN))]);
532
533
  }
533
534
  }
534
535
  if (isAriaTagsEnabled) {
@@ -17,7 +17,8 @@ import { warn } from "../../helpers/console.mjs";
17
17
  import { addClass, hasClass, removeClass, fastInnerText, removeAttribute, setAttribute } from "../../helpers/dom/element.mjs";
18
18
  import EventManager from "../../eventManager.mjs";
19
19
  import { stopImmediatePropagation } from "../../helpers/dom/event.mjs";
20
- import { A11Y_EXPANDED, A11Y_HIDDEN } from "../../helpers/a11y.mjs";
20
+ import { A11Y_DESCRIPTION, A11Y_EXPANDED, A11Y_HIDDEN } from "../../helpers/a11y.mjs";
21
+ import { COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN, COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN } from "../../i18n/constants.mjs";
21
22
  export const PLUGIN_KEY = 'collapsibleColumns';
22
23
  export const PLUGIN_PRIORITY = 290;
23
24
  const SETTING_KEYS = ['nestedHeaders'];
@@ -514,7 +515,7 @@ export class CollapsibleColumns extends BasePlugin {
514
515
 
515
516
  // Add ARIA tags
516
517
  if (isAriaTagsEnabled) {
517
- setAttribute(TH, ...A11Y_EXPANDED(false));
518
+ setAttribute(TH, [A11Y_EXPANDED(false), A11Y_DESCRIPTION(this.hot.getTranslatedPhrase(COLUMN_HEADER_DESCRIPTION_EXPAND_COLUMN))]);
518
519
  }
519
520
  } else {
520
521
  addClass(collapsibleElement, 'expanded');
@@ -522,7 +523,7 @@ export class CollapsibleColumns extends BasePlugin {
522
523
 
523
524
  // Add ARIA tags
524
525
  if (isAriaTagsEnabled) {
525
- setAttribute(TH, ...A11Y_EXPANDED(true));
526
+ setAttribute(TH, [A11Y_EXPANDED(true), A11Y_DESCRIPTION(this.hot.getTranslatedPhrase(COLUMN_HEADER_DESCRIPTION_COLLAPSE_COLUMN))]);
526
527
  }
527
528
  }
528
529
  if (isAriaTagsEnabled) {
@@ -16,6 +16,7 @@ var _domHelpers = require("./domHelpers");
16
16
  var _rootComparator = require("./rootComparator");
17
17
  var _sortService = require("./sortService");
18
18
  var _a11y = require("../../helpers/a11y");
19
+ var _constants = require("../../i18n/constants");
19
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
21
  const PLUGIN_KEY = 'columnSorting';
21
22
  exports.PLUGIN_KEY = PLUGIN_KEY;
@@ -26,6 +27,7 @@ exports.APPEND_COLUMN_CONFIG_STRATEGY = APPEND_COLUMN_CONFIG_STRATEGY;
26
27
  const REPLACE_COLUMN_CONFIG_STRATEGY = 'replace';
27
28
  exports.REPLACE_COLUMN_CONFIG_STRATEGY = REPLACE_COLUMN_CONFIG_STRATEGY;
28
29
  const SHORTCUTS_GROUP = PLUGIN_KEY;
30
+ const SORTING_INDICATOR_CLASS = 'columnSortingIndicator';
29
31
  (0, _sortService.registerRootComparator)(PLUGIN_KEY, _rootComparator.rootComparator);
30
32
  _pluginHooks.default.getSingleton().register('beforeColumnSort');
31
33
  _pluginHooks.default.getSingleton().register('afterColumnSort');
@@ -644,12 +646,14 @@ class ColumnSorting extends _base.BasePlugin {
644
646
  return;
645
647
  }
646
648
  const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];
649
+ const ariaTags = this.hot.getSettings().ariaTags;
647
650
  const showSortIndicator = pluginSettingsForColumn.indicator;
648
651
  const headerActionEnabled = pluginSettingsForColumn.headerAction;
652
+ const currentSortState = this.columnStatesManager.getSortOrderOfColumn(column);
649
653
  this.updateHeaderClasses(headerSpanElement, this.columnStatesManager, column, showSortIndicator, headerActionEnabled);
650
- if (this.hot.getSettings().ariaTags) {
651
- const currentSortState = this.columnStatesManager.getSortOrderOfColumn(column);
652
- (0, _element.setAttribute)(TH, ...(0, _a11y.A11Y_SORT)(currentSortState ? `${currentSortState}ending` : 'none'));
654
+ this.updateSortingIndicator(column, headerSpanElement);
655
+ if (ariaTags) {
656
+ (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))]);
653
657
  }
654
658
  }
655
659
 
@@ -670,6 +674,28 @@ class ColumnSorting extends _base.BasePlugin {
670
674
  }
671
675
  }
672
676
 
677
+ /**
678
+ * Update sorting indicator.
679
+ *
680
+ * @private
681
+ * @param {number} column Visual column index.
682
+ * @param {HTMLElement} headerSpanElement Header span element.
683
+ */
684
+ updateSortingIndicator(column, headerSpanElement) {
685
+ const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];
686
+ const ariaTags = this.hot.getSettings().ariaTags;
687
+ const showSortIndicator = pluginSettingsForColumn.indicator;
688
+ const isColumnSorted = this.columnStatesManager.isColumnSorted(column);
689
+ const indicatorElement = headerSpanElement.querySelector(`.${SORTING_INDICATOR_CLASS}`);
690
+ if (showSortIndicator && isColumnSorted && !indicatorElement) {
691
+ (0, _element.appendElement)(headerSpanElement, {
692
+ tagName: 'div',
693
+ className: SORTING_INDICATOR_CLASS,
694
+ attributes: ariaTags ? [(0, _a11y.A11Y_HIDDEN)()] : []
695
+ });
696
+ }
697
+ }
698
+
673
699
  /**
674
700
  * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called
675
701
  * for `updateSettings` in specific situations.
@@ -1,5 +1,5 @@
1
1
  import "core-js/modules/es.array.push.js";
2
- import { addClass, removeClass, setAttribute } from "../../helpers/dom/element.mjs";
2
+ import { addClass, appendElement, removeClass, setAttribute } from "../../helpers/dom/element.mjs";
3
3
  import { isUndefined, isDefined } from "../../helpers/mixed.mjs";
4
4
  import { isObject } from "../../helpers/object.mjs";
5
5
  import { isFunction } from "../../helpers/function.mjs";
@@ -12,12 +12,14 @@ import { getNextSortOrder, areValidSortStates, getHeaderSpanElement, isFirstLeve
12
12
  import { getClassesToRemove, getClassesToAdd } from "./domHelpers.mjs";
13
13
  import { rootComparator } from "./rootComparator.mjs";
14
14
  import { registerRootComparator, sort } from "./sortService/index.mjs";
15
- import { A11Y_SORT } from "../../helpers/a11y.mjs";
15
+ import { A11Y_DESCRIPTION, A11Y_HIDDEN, A11Y_SORT } from "../../helpers/a11y.mjs";
16
+ import { COLUMN_HEADER_DESCRIPTION_SORT_ROWS } from "../../i18n/constants.mjs";
16
17
  export const PLUGIN_KEY = 'columnSorting';
17
18
  export const PLUGIN_PRIORITY = 50;
18
19
  export const APPEND_COLUMN_CONFIG_STRATEGY = 'append';
19
20
  export const REPLACE_COLUMN_CONFIG_STRATEGY = 'replace';
20
21
  const SHORTCUTS_GROUP = PLUGIN_KEY;
22
+ const SORTING_INDICATOR_CLASS = 'columnSortingIndicator';
21
23
  registerRootComparator(PLUGIN_KEY, rootComparator);
22
24
  Hooks.getSingleton().register('beforeColumnSort');
23
25
  Hooks.getSingleton().register('afterColumnSort');
@@ -636,12 +638,14 @@ export class ColumnSorting extends BasePlugin {
636
638
  return;
637
639
  }
638
640
  const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];
641
+ const ariaTags = this.hot.getSettings().ariaTags;
639
642
  const showSortIndicator = pluginSettingsForColumn.indicator;
640
643
  const headerActionEnabled = pluginSettingsForColumn.headerAction;
644
+ const currentSortState = this.columnStatesManager.getSortOrderOfColumn(column);
641
645
  this.updateHeaderClasses(headerSpanElement, this.columnStatesManager, column, showSortIndicator, headerActionEnabled);
642
- if (this.hot.getSettings().ariaTags) {
643
- const currentSortState = this.columnStatesManager.getSortOrderOfColumn(column);
644
- setAttribute(TH, ...A11Y_SORT(currentSortState ? `${currentSortState}ending` : 'none'));
646
+ this.updateSortingIndicator(column, headerSpanElement);
647
+ if (ariaTags) {
648
+ setAttribute(TH, [A11Y_SORT(currentSortState ? `${currentSortState}ending` : 'none'), A11Y_DESCRIPTION(this.hot.getTranslatedPhrase(COLUMN_HEADER_DESCRIPTION_SORT_ROWS))]);
645
649
  }
646
650
  }
647
651
 
@@ -662,6 +666,28 @@ export class ColumnSorting extends BasePlugin {
662
666
  }
663
667
  }
664
668
 
669
+ /**
670
+ * Update sorting indicator.
671
+ *
672
+ * @private
673
+ * @param {number} column Visual column index.
674
+ * @param {HTMLElement} headerSpanElement Header span element.
675
+ */
676
+ updateSortingIndicator(column, headerSpanElement) {
677
+ const pluginSettingsForColumn = this.getFirstCellSettings(column)[this.pluginKey];
678
+ const ariaTags = this.hot.getSettings().ariaTags;
679
+ const showSortIndicator = pluginSettingsForColumn.indicator;
680
+ const isColumnSorted = this.columnStatesManager.isColumnSorted(column);
681
+ const indicatorElement = headerSpanElement.querySelector(`.${SORTING_INDICATOR_CLASS}`);
682
+ if (showSortIndicator && isColumnSorted && !indicatorElement) {
683
+ appendElement(headerSpanElement, {
684
+ tagName: 'div',
685
+ className: SORTING_INDICATOR_CLASS,
686
+ attributes: ariaTags ? [A11Y_HIDDEN()] : []
687
+ });
688
+ }
689
+ }
690
+
665
691
  /**
666
692
  * Overwriting base plugin's `onUpdateSettings` method. Please keep in mind that `onAfterUpdateSettings` isn't called
667
693
  * for `updateSettings` in specific situations.
@@ -5,6 +5,8 @@ exports.createMenuItemRenderer = createMenuItemRenderer;
5
5
  var _utils = require("./utils");
6
6
  var _element = require("../../../helpers/dom/element");
7
7
  var _a11y = require("../../../helpers/a11y");
8
+ const SUBMENU_INDICATOR_CLASSNAME = 'submenuIndicator';
9
+
8
10
  /**
9
11
  * Creates the menu renderer function.
10
12
  *
@@ -37,6 +39,16 @@ function createMenuItemRenderer(mainTableHot) {
37
39
  const isFocusable = !(0, _utils.isItemDisabled)(item, mainTableHot) && !(0, _utils.isItemSelectionDisabled)(item) && !(0, _utils.isItemSeparator)(item);
38
40
  (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)] : [])]);
39
41
  }
42
+ if ((0, _utils.isItemSubMenu)(item)) {
43
+ const submenuIndicatorElement = TD.querySelector('.submenuIndicator');
44
+ if (!submenuIndicatorElement) {
45
+ (0, _element.appendElement)(TD, {
46
+ tagName: 'div',
47
+ attributes: mainTableHot.getSettings().ariaTags ? [(0, _a11y.A11Y_HIDDEN)()] : [],
48
+ className: SUBMENU_INDICATOR_CLASSNAME
49
+ });
50
+ }
51
+ }
40
52
  TD.className = '';
41
53
  TD.appendChild(wrapper);
42
54
  if ((0, _utils.isItemSeparator)(item)) {