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

Sign up to get free protection for your applications and to get access to all the features.
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;