handsontable 14.0.0-next-dd92f79-20231124 → 14.0.0-next-88de277-20231127

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/3rdparty/walkontable/src/overlay/_base.js +2 -2
  2. package/3rdparty/walkontable/src/overlay/_base.mjs +2 -2
  3. package/3rdparty/walkontable/src/renderer/columnHeaders.js +1 -1
  4. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +2 -2
  5. package/3rdparty/walkontable/src/renderer/rows.js +1 -1
  6. package/3rdparty/walkontable/src/renderer/rows.mjs +2 -2
  7. package/3rdparty/walkontable/src/selection/manager.js +20 -6
  8. package/3rdparty/walkontable/src/selection/manager.mjs +20 -6
  9. package/base.js +2 -2
  10. package/base.mjs +2 -2
  11. package/core.js +1 -1
  12. package/core.mjs +1 -1
  13. package/dataMap/replaceData.js +3 -1
  14. package/dataMap/replaceData.mjs +3 -1
  15. package/dist/handsontable.css +62 -44
  16. package/dist/handsontable.full.css +62 -44
  17. package/dist/handsontable.full.js +123 -302
  18. package/dist/handsontable.full.min.css +5 -5
  19. package/dist/handsontable.full.min.js +64 -64
  20. package/dist/handsontable.js +123 -302
  21. package/dist/handsontable.min.css +5 -5
  22. package/dist/handsontable.min.js +19 -19
  23. package/dist/languages/all.js +2 -24
  24. package/dist/languages/all.min.js +1 -1
  25. package/dist/languages/en-US.js +1 -12
  26. package/dist/languages/en-US.min.js +1 -1
  27. package/dist/languages/pl-PL.js +1 -12
  28. package/dist/languages/pl-PL.min.js +1 -1
  29. package/editors/dateEditor/dateEditor.js +0 -7
  30. package/editors/dateEditor/dateEditor.mjs +1 -8
  31. package/editors/handsontableEditor/handsontableEditor.js +0 -7
  32. package/editors/handsontableEditor/handsontableEditor.mjs +1 -8
  33. package/editors/passwordEditor/passwordEditor.js +4 -0
  34. package/editors/passwordEditor/passwordEditor.mjs +5 -1
  35. package/helpers/a11y.js +2 -2
  36. package/helpers/a11y.mjs +1 -1
  37. package/helpers/dom/element.js +0 -29
  38. package/helpers/dom/element.mjs +0 -28
  39. package/helpers/mixed.js +2 -2
  40. package/helpers/mixed.mjs +2 -2
  41. package/i18n/constants.js +1 -14
  42. package/i18n/constants.mjs +1 -14
  43. package/i18n/languages/en-US.js +1 -12
  44. package/i18n/languages/en-US.mjs +1 -12
  45. package/i18n/languages/pl-PL.js +1 -12
  46. package/i18n/languages/pl-PL.mjs +1 -12
  47. package/languages/all.js +2 -24
  48. package/languages/en-US.js +1 -12
  49. package/languages/en-US.mjs +1 -12
  50. package/languages/index.js +2 -24
  51. package/languages/pl-PL.js +1 -12
  52. package/languages/pl-PL.mjs +1 -12
  53. package/package.json +1 -1
  54. package/plugins/collapsibleColumns/collapsibleColumns.js +2 -3
  55. package/plugins/collapsibleColumns/collapsibleColumns.mjs +3 -4
  56. package/plugins/columnSorting/columnSorting.js +4 -30
  57. package/plugins/columnSorting/columnSorting.mjs +6 -32
  58. package/plugins/contextMenu/menu/menuItemRenderer.js +0 -12
  59. package/plugins/contextMenu/menu/menuItemRenderer.mjs +2 -14
  60. package/plugins/dropdownMenu/dropdownMenu.js +1 -2
  61. package/plugins/dropdownMenu/dropdownMenu.mjs +2 -3
  62. package/plugins/filters/ui/input.js +3 -0
  63. package/plugins/filters/ui/input.mjs +3 -0
  64. package/plugins/hiddenColumns/hiddenColumns.js +0 -44
  65. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -45
  66. package/plugins/hiddenRows/hiddenRows.js +0 -44
  67. package/plugins/hiddenRows/hiddenRows.mjs +1 -45
  68. package/plugins/multiColumnSorting/multiColumnSorting.js +0 -21
  69. package/plugins/multiColumnSorting/multiColumnSorting.mjs +1 -22
  70. package/plugins/nestedRows/nestedRows.js +1 -2
  71. package/plugins/nestedRows/nestedRows.mjs +1 -2
  72. package/plugins/nestedRows/ui/headers.js +3 -3
  73. package/plugins/nestedRows/ui/headers.mjs +4 -4
  74. package/renderers/autocompleteRenderer/autocompleteRenderer.js +0 -3
  75. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +1 -4
  76. package/renderers/checkboxRenderer/checkboxRenderer.js +0 -1
  77. package/renderers/checkboxRenderer/checkboxRenderer.mjs +0 -1
  78. package/renderers/dateRenderer/dateRenderer.js +0 -5
  79. package/renderers/dateRenderer/dateRenderer.mjs +0 -5
  80. package/renderers/handsontableRenderer/handsontableRenderer.js +0 -5
  81. package/renderers/handsontableRenderer/handsontableRenderer.mjs +0 -5
  82. package/renderers/selectRenderer/selectRenderer.js +0 -5
  83. package/renderers/selectRenderer/selectRenderer.mjs +0 -5
  84. package/selection/highlight/types/focus.js +2 -0
  85. package/selection/highlight/types/focus.mjs +2 -0
  86. package/selection/selection.js +0 -1
  87. package/selection/selection.mjs +0 -1
  88. package/tableView.js +35 -2
  89. package/tableView.mjs +35 -2
@@ -249,8 +249,8 @@ class Overlay {
249
249
  rootDocument,
250
250
  rootWindow
251
251
  } = this.domBindings;
252
- const clone = rootDocument.createElement('DIV');
253
- const clonedTable = rootDocument.createElement('TABLE');
252
+ const clone = rootDocument.createElement('div');
253
+ const clonedTable = rootDocument.createElement('table');
254
254
  const tableParent = wtTable.wtRootElement.parentNode;
255
255
  clone.className = `${_constants.CLONE_CLASS_NAMES.get(this.type)} handsontable`;
256
256
  clone.setAttribute('dir', this.isRtl() ? 'rtl' : 'ltr');
@@ -245,8 +245,8 @@ export class Overlay {
245
245
  rootDocument,
246
246
  rootWindow
247
247
  } = this.domBindings;
248
- const clone = rootDocument.createElement('DIV');
249
- const clonedTable = rootDocument.createElement('TABLE');
248
+ const clone = rootDocument.createElement('div');
249
+ const clonedTable = rootDocument.createElement('table');
250
250
  const tableParent = wtTable.wtRootElement.parentNode;
251
251
  clone.className = `${CLONE_CLASS_NAMES.get(this.type)} handsontable`;
252
252
  clone.setAttribute('dir', this.isRtl() ? 'rtl' : 'ltr');
@@ -71,7 +71,7 @@ class ColumnHeadersRenderer extends _base.default {
71
71
  columnHeadersCount
72
72
  } = this.table;
73
73
  if (this.table.isAriaEnabled()) {
74
- (0, _element.setAttribute)(this.rootNode, [(0, _a11y.A11Y_PRESENTATION)()]);
74
+ (0, _element.setAttribute)(this.rootNode, [(0, _a11y.A11Y_ROWGROUP)()]);
75
75
  }
76
76
  for (let rowHeaderIndex = 0; rowHeaderIndex < columnHeadersCount; rowHeaderIndex += 1) {
77
77
  const {
@@ -1,6 +1,6 @@
1
1
  import { empty, setAttribute, removeAttribute } from "./../../../../helpers/dom/element.mjs";
2
2
  import BaseRenderer from "./_base.mjs";
3
- import { A11Y_COLINDEX, A11Y_COLUMNHEADER, A11Y_PRESENTATION, A11Y_ROW, A11Y_ROWINDEX, A11Y_SCOPE_COL, A11Y_TABINDEX } from "../../../../helpers/a11y.mjs";
3
+ import { A11Y_COLINDEX, A11Y_COLUMNHEADER, A11Y_ROW, A11Y_ROWGROUP, A11Y_ROWINDEX, A11Y_SCOPE_COL, A11Y_TABINDEX } from "../../../../helpers/a11y.mjs";
4
4
  /**
5
5
  * Column headers renderer responsible for managing (inserting, tracking, rendering) TR and TH elements.
6
6
  *
@@ -67,7 +67,7 @@ export default class ColumnHeadersRenderer extends BaseRenderer {
67
67
  columnHeadersCount
68
68
  } = this.table;
69
69
  if (this.table.isAriaEnabled()) {
70
- setAttribute(this.rootNode, [A11Y_PRESENTATION()]);
70
+ setAttribute(this.rootNode, [A11Y_ROWGROUP()]);
71
71
  }
72
72
  for (let rowHeaderIndex = 0; rowHeaderIndex < columnHeadersCount; rowHeaderIndex += 1) {
73
73
  const {
@@ -61,7 +61,7 @@ class RowsRenderer extends _base.default {
61
61
  the number of rendered rows by specifying the table height and/or turning off the "renderAllRows" option.`);
62
62
  }
63
63
  if (this.table.isAriaEnabled()) {
64
- (0, _element.setAttribute)(this.rootNode, [(0, _a11y.A11Y_PRESENTATION)()]);
64
+ (0, _element.setAttribute)(this.rootNode, [(0, _a11y.A11Y_ROWGROUP)()]);
65
65
  }
66
66
  this.orderView.setSize(rowsToRender).setOffset(this.table.renderedRowToSource(0)).start();
67
67
  for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {
@@ -7,7 +7,7 @@ import { toSingleLine } from "./../../../../helpers/templateLiteralTag.mjs";
7
7
  import { OrderView } from "./../utils/orderView/index.mjs";
8
8
  import BaseRenderer from "./_base.mjs";
9
9
  import { setAttribute } from "../../../../helpers/dom/element.mjs";
10
- import { A11Y_PRESENTATION, A11Y_ROW, A11Y_ROWINDEX } from "../../../../helpers/a11y.mjs";
10
+ import { A11Y_ROW, A11Y_ROWGROUP, A11Y_ROWINDEX } from "../../../../helpers/a11y.mjs";
11
11
  let performanceWarningAppeared = false;
12
12
 
13
13
  /**
@@ -57,7 +57,7 @@ export default class RowsRenderer extends BaseRenderer {
57
57
  the number of rendered rows by specifying the table height and/or turning off the "renderAllRows" option.`);
58
58
  }
59
59
  if (this.table.isAriaEnabled()) {
60
- setAttribute(this.rootNode, [A11Y_PRESENTATION()]);
60
+ setAttribute(this.rootNode, [A11Y_ROWGROUP()]);
61
61
  }
62
62
  this.orderView.setSize(rowsToRender).setOffset(this.table.renderedRowToSource(0)).start();
63
63
  for (let visibleRowIndex = 0; visibleRowIndex < rowsToRender; visibleRowIndex++) {
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
+ require("core-js/modules/es.array.push.js");
4
5
  require("core-js/modules/es.array.unscopables.flat.js");
5
6
  require("core-js/modules/es.error.cause.js");
6
7
  var _element = require("../../../../helpers/dom/element");
@@ -189,10 +190,12 @@ class SelectionManager {
189
190
  }
190
191
  const selections = Array.from(_classPrivateFieldGet(this, _selections));
191
192
  const classNamesMap = new Map();
193
+ const headerAttributesMap = new Map();
192
194
  for (let i = 0; i < selections.length; i++) {
193
195
  const selection = selections[i];
194
196
  const {
195
197
  className,
198
+ headerAttributes,
196
199
  createLayers,
197
200
  selectionType
198
201
  } = selection.settings;
@@ -219,6 +222,14 @@ class SelectionManager {
219
222
  } else {
220
223
  classNamesMap.set(element, new Map([[className, 1]]));
221
224
  }
225
+ if (headerAttributes) {
226
+ if (!headerAttributesMap.has(element)) {
227
+ headerAttributesMap.set(element, []);
228
+ }
229
+ if (element.nodeName === 'TH') {
230
+ headerAttributesMap.get(element).push(...headerAttributes);
231
+ }
232
+ }
222
233
  });
223
234
  }
224
235
  const corners = selection.getCorners();
@@ -226,7 +237,7 @@ class SelectionManager {
226
237
  borderInstance === null || borderInstance === void 0 || borderInstance.appear(corners);
227
238
  }
228
239
  classNamesMap.forEach((classNamesLayers, element) => {
229
- var _classPrivateFieldGet4, _classPrivateFieldGet5;
240
+ var _classPrivateFieldGet4;
230
241
  const classNames = Array.from(classNamesLayers).map(_ref => {
231
242
  let [className, occurrenceCount] = _ref;
232
243
  if (occurrenceCount === 1) {
@@ -240,10 +251,13 @@ class SelectionManager {
240
251
  (0, _element.addClass)(element, classNames);
241
252
  if (element.nodeName === 'TD' && Array.isArray((_classPrivateFieldGet4 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.cellAttributes)) {
242
253
  (0, _element.setAttribute)(element, _classPrivateFieldGet(this, _selections).options.cellAttributes);
243
- } else if (element.nodeName === 'TH' && Array.isArray((_classPrivateFieldGet5 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.headerAttributes)) {
244
- (0, _element.setAttribute)(element, _classPrivateFieldGet(this, _selections).options.headerAttributes);
245
254
  }
246
255
  });
256
+
257
+ // Set the attributes for the headers if they're focused.
258
+ Array.from(headerAttributesMap.keys()).forEach(element => {
259
+ (0, _element.setAttribute)(element, [...headerAttributesMap.get(element)]);
260
+ });
247
261
  }
248
262
  }
249
263
  exports.SelectionManager = SelectionManager;
@@ -256,13 +270,13 @@ function _resetCells2() {
256
270
  }
257
271
  }
258
272
  appliedOverlaysClasses.forEach(className => {
259
- var _classPrivateFieldGet6, _classPrivateFieldGet7;
273
+ var _classPrivateFieldGet5, _classPrivateFieldGet6;
260
274
  const nodes = _classPrivateFieldGet(this, _activeOverlaysWot).wtTable.TABLE.querySelectorAll(`.${className}`);
261
275
  let cellAttributes = [];
262
- if (Array.isArray((_classPrivateFieldGet6 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.cellAttributes)) {
276
+ if (Array.isArray((_classPrivateFieldGet5 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.cellAttributes)) {
263
277
  cellAttributes = _classPrivateFieldGet(this, _selections).options.cellAttributes.map(el => el[0]);
264
278
  }
265
- if (Array.isArray((_classPrivateFieldGet7 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.headerAttributes)) {
279
+ if (Array.isArray((_classPrivateFieldGet6 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.headerAttributes)) {
266
280
  cellAttributes = [...cellAttributes, ..._classPrivateFieldGet(this, _selections).options.headerAttributes.map(el => el[0])];
267
281
  }
268
282
  for (let i = 0, len = nodes.length; i < len; i++) {
@@ -1,3 +1,4 @@
1
+ import "core-js/modules/es.array.push.js";
1
2
  import "core-js/modules/es.array.unscopables.flat.js";
2
3
  import "core-js/modules/es.error.cause.js";
3
4
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
@@ -185,10 +186,12 @@ export class SelectionManager {
185
186
  }
186
187
  const selections = Array.from(_classPrivateFieldGet(this, _selections));
187
188
  const classNamesMap = new Map();
189
+ const headerAttributesMap = new Map();
188
190
  for (let i = 0; i < selections.length; i++) {
189
191
  const selection = selections[i];
190
192
  const {
191
193
  className,
194
+ headerAttributes,
192
195
  createLayers,
193
196
  selectionType
194
197
  } = selection.settings;
@@ -215,6 +218,14 @@ export class SelectionManager {
215
218
  } else {
216
219
  classNamesMap.set(element, new Map([[className, 1]]));
217
220
  }
221
+ if (headerAttributes) {
222
+ if (!headerAttributesMap.has(element)) {
223
+ headerAttributesMap.set(element, []);
224
+ }
225
+ if (element.nodeName === 'TH') {
226
+ headerAttributesMap.get(element).push(...headerAttributes);
227
+ }
228
+ }
218
229
  });
219
230
  }
220
231
  const corners = selection.getCorners();
@@ -222,7 +233,7 @@ export class SelectionManager {
222
233
  borderInstance === null || borderInstance === void 0 || borderInstance.appear(corners);
223
234
  }
224
235
  classNamesMap.forEach((classNamesLayers, element) => {
225
- var _classPrivateFieldGet4, _classPrivateFieldGet5;
236
+ var _classPrivateFieldGet4;
226
237
  const classNames = Array.from(classNamesLayers).map(_ref => {
227
238
  let [className, occurrenceCount] = _ref;
228
239
  if (occurrenceCount === 1) {
@@ -236,10 +247,13 @@ export class SelectionManager {
236
247
  addClass(element, classNames);
237
248
  if (element.nodeName === 'TD' && Array.isArray((_classPrivateFieldGet4 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.cellAttributes)) {
238
249
  setAttribute(element, _classPrivateFieldGet(this, _selections).options.cellAttributes);
239
- } else if (element.nodeName === 'TH' && Array.isArray((_classPrivateFieldGet5 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.headerAttributes)) {
240
- setAttribute(element, _classPrivateFieldGet(this, _selections).options.headerAttributes);
241
250
  }
242
251
  });
252
+
253
+ // Set the attributes for the headers if they're focused.
254
+ Array.from(headerAttributesMap.keys()).forEach(element => {
255
+ setAttribute(element, [...headerAttributesMap.get(element)]);
256
+ });
243
257
  }
244
258
  }
245
259
  function _resetCells2() {
@@ -251,13 +265,13 @@ function _resetCells2() {
251
265
  }
252
266
  }
253
267
  appliedOverlaysClasses.forEach(className => {
254
- var _classPrivateFieldGet6, _classPrivateFieldGet7;
268
+ var _classPrivateFieldGet5, _classPrivateFieldGet6;
255
269
  const nodes = _classPrivateFieldGet(this, _activeOverlaysWot).wtTable.TABLE.querySelectorAll(`.${className}`);
256
270
  let cellAttributes = [];
257
- if (Array.isArray((_classPrivateFieldGet6 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.cellAttributes)) {
271
+ if (Array.isArray((_classPrivateFieldGet5 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.cellAttributes)) {
258
272
  cellAttributes = _classPrivateFieldGet(this, _selections).options.cellAttributes.map(el => el[0]);
259
273
  }
260
- if (Array.isArray((_classPrivateFieldGet7 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.headerAttributes)) {
274
+ if (Array.isArray((_classPrivateFieldGet6 = _classPrivateFieldGet(this, _selections).options) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.headerAttributes)) {
261
275
  cellAttributes = [...cellAttributes, ..._classPrivateFieldGet(this, _selections).options.headerAttributes.map(el => el[0])];
262
276
  }
263
277
  for (let i = 0, len = nodes.length; i < len; i++) {
package/base.js CHANGED
@@ -43,8 +43,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
43
43
  Handsontable.CellCoords = _src.CellCoords;
44
44
  Handsontable.CellRange = _src.CellRange;
45
45
  Handsontable.packageName = 'handsontable';
46
- Handsontable.buildDate = "24/11/2023 11:03:39";
47
- Handsontable.version = "14.0.0-next-dd92f79-20231124";
46
+ Handsontable.buildDate = "27/11/2023 10:19:22";
47
+ Handsontable.version = "14.0.0-next-88de277-20231127";
48
48
  Handsontable.languages = {
49
49
  dictionaryKeys: _registry.dictionaryKeys,
50
50
  getLanguageDictionary: _registry.getLanguageDictionary,
package/base.mjs CHANGED
@@ -35,8 +35,8 @@ Handsontable.hooks = Hooks.getSingleton();
35
35
  Handsontable.CellCoords = CellCoords;
36
36
  Handsontable.CellRange = CellRange;
37
37
  Handsontable.packageName = 'handsontable';
38
- Handsontable.buildDate = "24/11/2023 11:03:45";
39
- Handsontable.version = "14.0.0-next-dd92f79-20231124";
38
+ Handsontable.buildDate = "27/11/2023 10:19:29";
39
+ Handsontable.version = "14.0.0-next-88de277-20231127";
40
40
  Handsontable.languages = {
41
41
  dictionaryKeys,
42
42
  getLanguageDictionary,
package/core.js CHANGED
@@ -4428,7 +4428,7 @@ function Core(rootElement, userSettings) {
4428
4428
  * @function getTranslatedPhrase
4429
4429
  * @since 0.35.0
4430
4430
  * @param {string} dictionaryKey Constant which is dictionary key.
4431
- * @param {*} [extraArguments] Arguments which will be handled by formatters.
4431
+ * @param {*} extraArguments Arguments which will be handled by formatters.
4432
4432
  * @returns {string}
4433
4433
  */
4434
4434
  this.getTranslatedPhrase = function (dictionaryKey, extraArguments) {
package/core.mjs CHANGED
@@ -4423,7 +4423,7 @@ export default function Core(rootElement, userSettings) {
4423
4423
  * @function getTranslatedPhrase
4424
4424
  * @since 0.35.0
4425
4425
  * @param {string} dictionaryKey Constant which is dictionary key.
4426
- * @param {*} [extraArguments] Arguments which will be handled by formatters.
4426
+ * @param {*} extraArguments Arguments which will be handled by formatters.
4427
4427
  * @returns {string}
4428
4428
  */
4429
4429
  this.getTranslatedPhrase = function (dictionaryKey, extraArguments) {
@@ -114,6 +114,8 @@ function replaceData(data, setDataMapFunction, callbackFunction, config) {
114
114
  hotInstance.render();
115
115
  }
116
116
  if (hotInstance.getSettings().ariaTags) {
117
- (0, _element.setAttribute)(hotInstance.rootElement, [(0, _a11y.A11Y_ROWCOUNT)(hotInstance.countRows()), (0, _a11y.A11Y_COLCOUNT)(hotInstance.countCols())]);
117
+ (0, _element.setAttribute)(hotInstance.rootElement, [(0, _a11y.A11Y_ROWCOUNT)(-1),
118
+ // If run after initialization, add the number of row headers.
119
+ (0, _a11y.A11Y_COLCOUNT)(hotInstance.countCols() + (hotInstance.view ? hotInstance.countRowHeaders() : 0))]);
118
120
  }
119
121
  }
@@ -109,7 +109,9 @@ function replaceData(data, setDataMapFunction, callbackFunction, config) {
109
109
  hotInstance.render();
110
110
  }
111
111
  if (hotInstance.getSettings().ariaTags) {
112
- setAttribute(hotInstance.rootElement, [A11Y_ROWCOUNT(hotInstance.countRows()), A11Y_COLCOUNT(hotInstance.countCols())]);
112
+ setAttribute(hotInstance.rootElement, [A11Y_ROWCOUNT(-1),
113
+ // If run after initialization, add the number of row headers.
114
+ A11Y_COLCOUNT(hotInstance.countCols() + (hotInstance.view ? hotInstance.countRowHeaders() : 0))]);
113
115
  }
114
116
  }
115
117
  export { replaceData };
@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 14.0.0-next-dd92f79-20231124
29
- * Release date: 22/11/2023 (built at 24/11/2023 11:03:49)
28
+ * Version: 14.0.0-next-88de277-20231127
29
+ * Release date: 29/11/2023 (built at 27/11/2023 10:19:34)
30
30
  */
31
31
  /**
32
32
  * Fix for bootstrap styles
@@ -504,10 +504,8 @@ innerBorderBottom - Property controlled by bottom overlay
504
504
  .handsontable .columnSorting.sortAction:hover {
505
505
  text-decoration: underline;
506
506
  cursor: pointer;
507
- }
508
-
509
- /* Arrow position */
510
- .handsontable span.colHeader.columnSorting .columnSortingIndicator::before {
507
+ } /* Arrow position */
508
+ .handsontable span.colHeader.columnSorting::before {
511
509
  /* Centering start */
512
510
  top: 50%;
513
511
  /* One extra pixel for purpose of proper positioning of sorting arrow, when `font-size` set to default */
@@ -527,7 +525,7 @@ innerBorderBottom - Property controlled by bottom overlay
527
525
  background-position-x: right;
528
526
  }
529
527
 
530
- [dir=rtl].handsontable span.colHeader.columnSorting .columnSortingIndicator::before {
528
+ [dir=rtl].handsontable span.colHeader.columnSorting::before {
531
529
  /* Centering end */
532
530
  /* For purpose of continuous mouse over experience, when moving between the `span` and the `::before` elements */
533
531
  padding-right: 8px;
@@ -537,12 +535,12 @@ innerBorderBottom - Property controlled by bottom overlay
537
535
  background-position-x: left;
538
536
  }
539
537
 
540
- .handsontable span.colHeader.columnSorting.ascending .columnSortingIndicator::before {
538
+ .handsontable span.colHeader.columnSorting.ascending::before {
541
539
  /* arrow up; 20 x 40 px, scaled to 5 x 10 px; base64 size: 0.3kB */
542
540
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFNJREFUeAHtzjkSgCAUBNHPgsoy97+ulGXRqJE5L+xkxoYt2UdsLb5bqFINz+aLuuLn5rIu2RkO3fZpWENimNgiw6iBYRTPMLJjGFxQZ1hxxb/xBI1qC8k39CdKAAAAAElFTkSuQmCC);
543
541
  }
544
542
 
545
- .handsontable span.colHeader.columnSorting.descending .columnSortingIndicator::before {
543
+ .handsontable span.colHeader.columnSorting.descending::before {
546
544
  /* arrow down; 20 x 40 px, scaled to 5 x 10 px; base64 size: 0.3kB */
547
545
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAMAAADJ7yrpAAAAKlBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKE86IAAAADXRSTlMABBEmRGprlJW72e77tTkTKwAAAFJJREFUeAHtzjkSgCAQRNFmQYUZ7n9dKUvru0TmvPAn3br0QfgdZ5xx6x+rQn23GqTYnq1FDcnuzZIO2WmedVqIRVxgGKEyjNgYRjKGkZ1hFIZ3I70LyM0VtU8AAAAASUVORK5CYII=);
548
546
  }
@@ -696,7 +694,7 @@ TextRenderer readOnly cell
696
694
  position: relative;
697
695
  }
698
696
 
699
- .handsontable .htSubmenu .submenuIndicator::after {
697
+ .handsontable .htSubmenu :after {
700
698
  content: "▶";
701
699
  color: #777;
702
700
  position: absolute;
@@ -704,11 +702,11 @@ TextRenderer readOnly cell
704
702
  font-size: 9px;
705
703
  }
706
704
 
707
- [dir=rtl].handsontable .htSubmenu .submenuIndicator::after {
705
+ [dir=rtl].handsontable .htSubmenu :after {
708
706
  content: "";
709
707
  }
710
708
 
711
- [dir=rtl].handsontable .htSubmenu .submenuIndicator::before {
709
+ [dir=rtl].handsontable .htSubmenu :before {
712
710
  content: "◀";
713
711
  color: #777;
714
712
  position: absolute;
@@ -1476,6 +1474,10 @@ textarea.HandsontableCopyPaste {
1476
1474
  border: 1px solid #d2d1d1;
1477
1475
  }
1478
1476
 
1477
+ .handsontable .htUIInputIcon {
1478
+ position: absolute;
1479
+ }
1480
+
1479
1481
  /* Button */
1480
1482
  .handsontable .htUIInput.htUIButton {
1481
1483
  cursor: pointer;
@@ -1616,13 +1618,12 @@ textarea.HandsontableCopyPaste {
1616
1618
  /*
1617
1619
  * Handsontable HiddenColumns
1618
1620
  */
1619
- .handsontable th.beforeHiddenColumn,
1620
- .handsontable th.afterHiddenColumn {
1621
+ .handsontable th.beforeHiddenColumn {
1621
1622
  position: relative;
1622
1623
  }
1623
1624
 
1624
- .handsontable th.beforeHiddenColumn .beforeHiddenColumnIndicator::after,
1625
- .handsontable th.afterHiddenColumn .afterHiddenColumnIndicator::before {
1625
+ .handsontable th.beforeHiddenColumn::after,
1626
+ .handsontable th.afterHiddenColumn::before {
1626
1627
  color: #bbb;
1627
1628
  position: absolute;
1628
1629
  top: 50%;
@@ -1630,33 +1631,37 @@ textarea.HandsontableCopyPaste {
1630
1631
  transform: translateY(-50%);
1631
1632
  }
1632
1633
 
1633
- .handsontable th.beforeHiddenColumn .beforeHiddenColumnIndicator::after {
1634
+ .handsontable th.afterHiddenColumn {
1635
+ position: relative;
1636
+ }
1637
+
1638
+ .handsontable th.beforeHiddenColumn::after {
1634
1639
  right: 1px;
1635
- content: "◀";
1640
+ content: "◀"; /* left arrow */
1636
1641
  }
1637
1642
 
1638
- [dir=rtl].handsontable th.beforeHiddenColumn .beforeHiddenColumnIndicator::after {
1643
+ [dir=rtl].handsontable th.beforeHiddenColumn::after {
1639
1644
  right: initial;
1640
1645
  left: 1px;
1641
- content: "▶";
1646
+ content: "▶"; /* right arrow */
1642
1647
  }
1643
1648
 
1644
- .handsontable th.afterHiddenColumn .afterHiddenColumnIndicator::before {
1649
+ .handsontable th.afterHiddenColumn::before {
1645
1650
  left: 1px;
1646
- content: "▶";
1651
+ content: "▶"; /* right arrow */
1647
1652
  }
1648
1653
 
1649
- [dir=rtl].handsontable th.afterHiddenColumn .afterHiddenColumnIndicator::before {
1654
+ [dir=rtl].handsontable th.afterHiddenColumn::before {
1650
1655
  right: 1px;
1651
1656
  left: initial;
1652
- content: "◀";
1657
+ content: "◀"; /* left arrow */
1653
1658
  }
1654
1659
  @charset "UTF-8";
1655
1660
  /*!
1656
1661
  * Handsontable HiddenRows
1657
1662
  */
1658
- .handsontable th.beforeHiddenRow .beforeHiddenRowIndicator::before,
1659
- .handsontable th.afterHiddenRow .afterHiddenRowIndicator::after {
1663
+ .handsontable th.beforeHiddenRow::before,
1664
+ .handsontable th.afterHiddenRow::after {
1660
1665
  color: #bbb;
1661
1666
  font-size: 6pt;
1662
1667
  line-height: 6pt;
@@ -1669,18 +1674,18 @@ textarea.HandsontableCopyPaste {
1669
1674
  position: relative;
1670
1675
  }
1671
1676
 
1672
- .handsontable th.beforeHiddenRow .beforeHiddenRowIndicator::before {
1673
- content: "▲"; /* up-pointing triangle */
1677
+ .handsontable th.beforeHiddenRow::before {
1678
+ content: "▲";
1674
1679
  bottom: 2px;
1675
1680
  }
1676
1681
 
1677
- .handsontable th.afterHiddenRow .afterHiddenRowIndicator::after {
1678
- content: "▼"; /* down-pointing triangle */
1682
+ .handsontable th.afterHiddenRow::after {
1683
+ content: "▼";
1679
1684
  top: 2px;
1680
1685
  }
1681
1686
 
1682
- .handsontable.ht__selection--rows tbody th.beforeHiddenRow.ht__highlight .beforeHiddenRowIndicator::before,
1683
- .handsontable.ht__selection--rows tbody th.afterHiddenRow.ht__highlight .afterHiddenRowIndicator::after {
1687
+ .handsontable.ht__selection--rows tbody th.beforeHiddenRow.ht__highlight:before,
1688
+ .handsontable.ht__selection--rows tbody th.afterHiddenRow.ht__highlight:after {
1684
1689
  color: #eee;
1685
1690
  }
1686
1691
 
@@ -1833,7 +1838,7 @@ textarea.HandsontableCopyPaste {
1833
1838
  opacity: 0.58;
1834
1839
  }
1835
1840
  /* Column's number position */
1836
- .handsontable span.colHeader.columnSorting .columnSortingIndicator::after {
1841
+ .handsontable span.colHeader.columnSorting::after {
1837
1842
  /* Centering start */
1838
1843
  top: 50%;
1839
1844
  /* Two extra pixels (-2 instead of -4) for purpose of proper positioning of numeric indicators, when `font-size` set to default */
@@ -1852,7 +1857,7 @@ textarea.HandsontableCopyPaste {
1852
1857
  text-decoration: underline;
1853
1858
  }
1854
1859
 
1855
- [dir=rtl].handsontable span.colHeader.columnSorting .columnSortingIndicator::after {
1860
+ [dir=rtl].handsontable span.colHeader.columnSorting::after {
1856
1861
  left: -15px;
1857
1862
  right: unset;
1858
1863
  /* For purpose of continuous mouse over experience, when moving between the `::before` and the `::after` elements */
@@ -1861,41 +1866,41 @@ textarea.HandsontableCopyPaste {
1861
1866
  }
1862
1867
 
1863
1868
  /* Workaround for IE9 - IE11, https://stackoverflow.com/a/21902566, https://stackoverflow.com/a/32120247 */
1864
- .handsontable span.colHeader.columnSorting .columnSortingIndicator::after {
1869
+ .handsontable span.colHeader.columnSorting::after {
1865
1870
  text-decoration: none;
1866
1871
  }
1867
1872
 
1868
1873
  /* We support up to 7 numeric indicators, describing order of column in sorted columns queue */
1869
- .handsontable span.colHeader.columnSorting[class^=sort-] .columnSortingIndicator::after,
1870
- .handsontable span.colHeader.columnSorting[class*=" sort-"] .columnSortingIndicator::after {
1874
+ .handsontable span.colHeader.columnSorting[class^=sort-]::after,
1875
+ .handsontable span.colHeader.columnSorting[class*=" sort-"]::after {
1871
1876
  content: "+";
1872
1877
  }
1873
1878
 
1874
- .handsontable span.colHeader.columnSorting.sort-1 .columnSortingIndicator::after {
1879
+ .handsontable span.colHeader.columnSorting.sort-1::after {
1875
1880
  content: "1";
1876
1881
  }
1877
1882
 
1878
- .handsontable span.colHeader.columnSorting.sort-2 .columnSortingIndicator::after {
1883
+ .handsontable span.colHeader.columnSorting.sort-2::after {
1879
1884
  content: "2";
1880
1885
  }
1881
1886
 
1882
- .handsontable span.colHeader.columnSorting.sort-3 .columnSortingIndicator::after {
1887
+ .handsontable span.colHeader.columnSorting.sort-3::after {
1883
1888
  content: "3";
1884
1889
  }
1885
1890
 
1886
- .handsontable span.colHeader.columnSorting.sort-4 .columnSortingIndicator::after {
1891
+ .handsontable span.colHeader.columnSorting.sort-4::after {
1887
1892
  content: "4";
1888
1893
  }
1889
1894
 
1890
- .handsontable span.colHeader.columnSorting.sort-5 .columnSortingIndicator::after {
1895
+ .handsontable span.colHeader.columnSorting.sort-5::after {
1891
1896
  content: "5";
1892
1897
  }
1893
1898
 
1894
- .handsontable span.colHeader.columnSorting.sort-6 .columnSortingIndicator::after {
1899
+ .handsontable span.colHeader.columnSorting.sort-6::after {
1895
1900
  content: "6";
1896
1901
  }
1897
1902
 
1898
- .handsontable span.colHeader.columnSorting.sort-7 .columnSortingIndicator::after {
1903
+ .handsontable span.colHeader.columnSorting.sort-7::after {
1899
1904
  content: "7";
1900
1905
  }
1901
1906
 
@@ -1906,6 +1911,7 @@ textarea.HandsontableCopyPaste {
1906
1911
  .handsontable thead th.hiddenHeader:not(:first-of-type) {
1907
1912
  display: none;
1908
1913
  }
1914
+ @charset "UTF-8";
1909
1915
  .handsontable th.ht_nestingLevels {
1910
1916
  text-align: left;
1911
1917
  padding-left: 7px;
@@ -1939,6 +1945,10 @@ textarea.HandsontableCopyPaste {
1939
1945
  right: unset;
1940
1946
  }
1941
1947
 
1948
+ .handsontable th span.ht_nestingLevel {
1949
+ display: inline-block;
1950
+ }
1951
+
1942
1952
  .handsontable th span.ht_nestingLevel_empty {
1943
1953
  display: inline-block;
1944
1954
  width: 10px;
@@ -1950,6 +1960,14 @@ textarea.HandsontableCopyPaste {
1950
1960
  float: right;
1951
1961
  }
1952
1962
 
1963
+ .handsontable th span.ht_nestingLevel::after {
1964
+ content: "┐";
1965
+ font-size: 9px;
1966
+ display: inline-block;
1967
+ position: relative;
1968
+ bottom: 3px;
1969
+ }
1970
+
1953
1971
  .handsontable th div.ht_nestingButton {
1954
1972
  display: inline-block;
1955
1973
  position: absolute;