handsontable 15.1.0-next-7652ed7-20250219 → 15.2.0-next-8670a33-20250312

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 (161) hide show
  1. package/3rdparty/walkontable/src/selection/border/border.js +16 -3
  2. package/3rdparty/walkontable/src/selection/border/border.mjs +17 -4
  3. package/3rdparty/walkontable/src/selection/scanner.js +1 -1
  4. package/3rdparty/walkontable/src/selection/scanner.mjs +2 -2
  5. package/3rdparty/walkontable/src/table.js +3 -2
  6. package/3rdparty/walkontable/src/table.mjs +4 -3
  7. package/3rdparty/walkontable/src/utils/orderView/viewDiffer/viewOrder.js +1 -0
  8. package/3rdparty/walkontable/src/utils/orderView/viewDiffer/viewOrder.mjs +1 -0
  9. package/3rdparty/walkontable/src/viewport.js +30 -3
  10. package/3rdparty/walkontable/src/viewport.mjs +30 -3
  11. package/CHANGELOG.md +40 -0
  12. package/base.js +2 -2
  13. package/base.mjs +2 -2
  14. package/core.js +2 -37
  15. package/core.mjs +2 -37
  16. package/dataMap/dataMap.js +4 -12
  17. package/dataMap/dataMap.mjs +4 -12
  18. package/dataMap/dataSource.js +2 -2
  19. package/dataMap/dataSource.mjs +2 -2
  20. package/dataMap/metaManager/metaSchema.js +2 -2
  21. package/dataMap/metaManager/metaSchema.mjs +2 -2
  22. package/dist/handsontable.css +2 -2
  23. package/dist/handsontable.full.css +2 -2
  24. package/dist/handsontable.full.js +494 -400
  25. package/dist/handsontable.full.min.css +2 -2
  26. package/dist/handsontable.full.min.js +73 -73
  27. package/dist/handsontable.js +494 -400
  28. package/dist/handsontable.min.css +2 -2
  29. package/dist/handsontable.min.js +43 -43
  30. package/dist/languages/all.js +139 -28
  31. package/dist/languages/all.min.js +1 -1
  32. package/dist/languages/fa-IR.js +167 -0
  33. package/dist/languages/fa-IR.min.js +1 -0
  34. package/dist/languages/it-IT.js +3 -0
  35. package/dist/languages/it-IT.min.js +1 -1
  36. package/dist/languages/sr-SP.js +3 -0
  37. package/dist/languages/sr-SP.min.js +1 -1
  38. package/editors/autocompleteEditor/autocompleteEditor.js +25 -20
  39. package/editors/autocompleteEditor/autocompleteEditor.mjs +25 -20
  40. package/editors/dateEditor/dateEditor.d.ts +0 -2
  41. package/editors/dateEditor/dateEditor.js +18 -7
  42. package/editors/dateEditor/dateEditor.mjs +17 -6
  43. package/focusManager.js +5 -3
  44. package/focusManager.mjs +6 -4
  45. package/helpers/dom/element.d.ts +1 -0
  46. package/helpers/dom/element.js +21 -2
  47. package/helpers/dom/element.mjs +20 -2
  48. package/helpers/dom/event.js +2 -1
  49. package/helpers/dom/event.mjs +2 -1
  50. package/helpers/mixed.js +2 -2
  51. package/helpers/mixed.mjs +2 -2
  52. package/helpers/number.js +1 -0
  53. package/helpers/number.mjs +1 -0
  54. package/i18n/languages/fa-IR.d.ts +5 -0
  55. package/i18n/languages/fa-IR.js +96 -0
  56. package/i18n/languages/fa-IR.mjs +90 -0
  57. package/i18n/languages/index.d.ts +2 -0
  58. package/i18n/languages/index.js +2 -0
  59. package/i18n/languages/index.mjs +2 -1
  60. package/i18n/languages/it-IT.js +3 -0
  61. package/i18n/languages/it-IT.mjs +3 -0
  62. package/i18n/languages/sr-SP.js +3 -0
  63. package/i18n/languages/sr-SP.mjs +3 -0
  64. package/i18n/phraseFormatters/substituteVariables.js +1 -0
  65. package/i18n/phraseFormatters/substituteVariables.mjs +1 -0
  66. package/languages/all.js +139 -28
  67. package/languages/fa-IR.js +167 -0
  68. package/languages/fa-IR.mjs +92 -0
  69. package/languages/index.js +139 -28
  70. package/languages/index.mjs +2 -1
  71. package/languages/it-IT.js +3 -0
  72. package/languages/it-IT.mjs +3 -0
  73. package/languages/sr-SP.js +3 -0
  74. package/languages/sr-SP.mjs +3 -0
  75. package/package.json +13 -2
  76. package/plugins/columnSorting/columnSorting.js +17 -1
  77. package/plugins/columnSorting/columnSorting.mjs +18 -2
  78. package/plugins/columnSorting/columnStatesManager.js +1 -0
  79. package/plugins/columnSorting/columnStatesManager.mjs +1 -0
  80. package/plugins/columnSorting/utils.js +14 -0
  81. package/plugins/columnSorting/utils.mjs +13 -0
  82. package/plugins/comments/comments.js +5 -2
  83. package/plugins/comments/comments.mjs +6 -3
  84. package/plugins/contextMenu/menu/menu.js +9 -3
  85. package/plugins/contextMenu/menu/menu.mjs +9 -3
  86. package/plugins/contextMenu/predefinedItems/columnLeft.js +3 -8
  87. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +3 -8
  88. package/plugins/contextMenu/predefinedItems/columnRight.js +2 -9
  89. package/plugins/contextMenu/predefinedItems/columnRight.mjs +2 -9
  90. package/plugins/contextMenu/predefinedItems/rowAbove.js +3 -8
  91. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +3 -8
  92. package/plugins/contextMenu/predefinedItems/rowBelow.js +2 -9
  93. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +2 -9
  94. package/plugins/copyPaste/copyPaste.js +3 -3
  95. package/plugins/copyPaste/copyPaste.mjs +4 -4
  96. package/plugins/exportFile/types/csv.js +1 -0
  97. package/plugins/exportFile/types/csv.mjs +1 -0
  98. package/plugins/filters/conditionCollection.js +0 -26
  99. package/plugins/filters/conditionCollection.mjs +0 -26
  100. package/plugins/filters/filters.d.ts +2 -0
  101. package/plugins/filters/filters.js +77 -8
  102. package/plugins/filters/filters.mjs +77 -8
  103. package/plugins/mergeCells/mergeCells.js +9 -6
  104. package/plugins/mergeCells/mergeCells.mjs +9 -6
  105. package/plugins/multiColumnSorting/multiColumnSorting.js +1 -21
  106. package/plugins/multiColumnSorting/multiColumnSorting.mjs +1 -21
  107. package/plugins/nestedHeaders/nestedHeaders.js +5 -3
  108. package/plugins/nestedHeaders/nestedHeaders.mjs +5 -3
  109. package/plugins/nestedHeaders/stateManager/index.js +1 -0
  110. package/plugins/nestedHeaders/stateManager/index.mjs +1 -0
  111. package/plugins/undoRedo/actions/_base.js +10 -0
  112. package/plugins/undoRedo/actions/_base.mjs +10 -0
  113. package/plugins/undoRedo/actions/cellAlignment.js +1 -1
  114. package/plugins/undoRedo/actions/cellAlignment.mjs +1 -1
  115. package/plugins/undoRedo/actions/columnMove.js +1 -1
  116. package/plugins/undoRedo/actions/columnMove.mjs +1 -1
  117. package/plugins/undoRedo/actions/columnSort.js +1 -1
  118. package/plugins/undoRedo/actions/columnSort.mjs +1 -1
  119. package/plugins/undoRedo/actions/createColumn.js +1 -1
  120. package/plugins/undoRedo/actions/createColumn.mjs +1 -1
  121. package/plugins/undoRedo/actions/createRow.js +1 -1
  122. package/plugins/undoRedo/actions/createRow.mjs +1 -1
  123. package/plugins/undoRedo/actions/dataChange.js +1 -1
  124. package/plugins/undoRedo/actions/dataChange.mjs +1 -1
  125. package/plugins/undoRedo/actions/filters.js +3 -3
  126. package/plugins/undoRedo/actions/filters.mjs +3 -3
  127. package/plugins/undoRedo/actions/mergeCells.js +4 -1
  128. package/plugins/undoRedo/actions/mergeCells.mjs +4 -1
  129. package/plugins/undoRedo/actions/removeColumn.js +4 -2
  130. package/plugins/undoRedo/actions/removeColumn.mjs +4 -2
  131. package/plugins/undoRedo/actions/removeRow.js +1 -1
  132. package/plugins/undoRedo/actions/removeRow.mjs +1 -1
  133. package/plugins/undoRedo/actions/rowMove.js +1 -1
  134. package/plugins/undoRedo/actions/rowMove.mjs +1 -1
  135. package/plugins/undoRedo/actions/unmergeCells.js +4 -1
  136. package/plugins/undoRedo/actions/unmergeCells.mjs +4 -1
  137. package/plugins/undoRedo/undoRedo.d.ts +48 -17
  138. package/renderers/checkboxRenderer/checkboxRenderer.js +1 -1
  139. package/renderers/checkboxRenderer/checkboxRenderer.mjs +2 -2
  140. package/renderers/numericRenderer/numericRenderer.js +10 -2
  141. package/renderers/numericRenderer/numericRenderer.mjs +10 -2
  142. package/renderers/textRenderer/textRenderer.js +3 -12
  143. package/renderers/textRenderer/textRenderer.mjs +4 -13
  144. package/shortcuts/utils.js +1 -0
  145. package/shortcuts/utils.mjs +1 -0
  146. package/styles/handsontable.css +83 -99
  147. package/styles/handsontable.min.css +3 -3
  148. package/styles/ht-theme-horizon.css +14 -2
  149. package/styles/ht-theme-horizon.min.css +3 -3
  150. package/styles/ht-theme-main.css +14 -2
  151. package/styles/ht-theme-main.min.css +3 -3
  152. package/tableView.js +9 -0
  153. package/tableView.mjs +9 -0
  154. package/translations/maps/linkedPhysicalIndexToValueMap.js +1 -0
  155. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +1 -0
  156. package/translations/maps/utils/physicallyIndexed.js +1 -0
  157. package/translations/maps/utils/physicallyIndexed.mjs +1 -0
  158. package/utils/dataStructures/priorityMap.js +1 -0
  159. package/utils/dataStructures/priorityMap.mjs +1 -0
  160. package/plugins/multiColumnSorting/utils.js +0 -13
  161. package/plugins/multiColumnSorting/utils.mjs +0 -9
@@ -27,7 +27,7 @@ class RemoveRowAction extends _base.BaseAction {
27
27
  rowIndexesSequence,
28
28
  removedCellMetas
29
29
  } = _ref;
30
- super();
30
+ super('remove_row');
31
31
  /**
32
32
  * @param {number} index The visual row index.
33
33
  */
@@ -24,7 +24,7 @@ export class RemoveRowAction extends BaseAction {
24
24
  rowIndexesSequence,
25
25
  removedCellMetas
26
26
  } = _ref;
27
- super();
27
+ super('remove_row');
28
28
  /**
29
29
  * @param {number} index The visual row index.
30
30
  */
@@ -21,7 +21,7 @@ class RowMoveAction extends _base.BaseAction {
21
21
  rows,
22
22
  finalIndex
23
23
  } = _ref;
24
- super();
24
+ super('row_move');
25
25
  /**
26
26
  * @param {number[]} rows An array with moved rows.
27
27
  */
@@ -18,7 +18,7 @@ export class RowMoveAction extends BaseAction {
18
18
  rows,
19
19
  finalIndex
20
20
  } = _ref;
21
- super();
21
+ super('row_move');
22
22
  /**
23
23
  * @param {number[]} rows An array with moved rows.
24
24
  */
@@ -17,7 +17,10 @@ class UnmergeCellsAction extends _base.BaseAction {
17
17
  let {
18
18
  cellRange
19
19
  } = _ref;
20
- super();
20
+ super('unmerge_cells');
21
+ /**
22
+ * @param {CellRange} cellRange The merged cell range.
23
+ */
21
24
  _defineProperty(this, "cellRange", void 0);
22
25
  this.cellRange = cellRange;
23
26
  }
@@ -14,7 +14,10 @@ export class UnmergeCellsAction extends BaseAction {
14
14
  let {
15
15
  cellRange
16
16
  } = _ref;
17
- super();
17
+ super('unmerge_cells');
18
+ /**
19
+ * @param {CellRange} cellRange The merged cell range.
20
+ */
18
21
  _defineProperty(this, "cellRange", void 0);
19
22
  this.cellRange = cellRange;
20
23
  }
@@ -1,30 +1,59 @@
1
+ import CellRange from '../../3rdparty/walkontable/src/cell/range';
1
2
  import Core from '../../core';
2
3
  import { CellValue, CellChange } from '../../common';
3
4
  import { ColumnConditions } from '../filters';
4
5
  import { BasePlugin } from '../base';
6
+ import { Config as ColumnSortingConfig } from '../columnSorting';
5
7
 
6
8
  export type Settings = boolean;
7
9
 
8
- export interface ChangeAction {
9
- actionType: 'change';
10
- changes: CellChange[];
11
- selected: Array<[number, number]>;
10
+ export interface CellAlignmentAction {
11
+ actionType: 'cell_alignment';
12
+ stateBefore: { [row: number]: string[] };
13
+ range: CellRange[];
14
+ type: 'horizontal' | 'vertical';
15
+ alignment: 'htLeft' | 'htCenter' | 'htRight' | 'htJustify' | 'htTop' | 'htMiddle' | 'htBottom';
12
16
  }
13
- export interface InsertRowAction {
14
- actionType: 'insert_row';
15
- amount: number;
16
- index: number;
17
+ export interface ColumnMoveAction {
18
+ actionType: 'col_move';
19
+ columns: number[];
20
+ finalColumnIndex: number;
17
21
  }
18
- export interface RemoveRowAction {
19
- actionType: 'remove_row';
20
- index: number;
21
- data: CellValue[][];
22
+ export interface ColumnSortAction {
23
+ actionType: 'col_sort';
24
+ previousSortState: ColumnSortingConfig[];
25
+ nextSortState: ColumnSortingConfig[];
22
26
  }
23
27
  export interface InsertColAction {
24
28
  actionType: 'insert_col';
25
29
  amount: number;
26
30
  index: number;
27
31
  }
32
+ export interface InsertRowAction {
33
+ actionType: 'insert_row';
34
+ amount: number;
35
+ index: number;
36
+ }
37
+ export interface ChangeAction {
38
+ actionType: 'change';
39
+ changes: CellChange[];
40
+ selected: Array<[number, number]>;
41
+ countCols: number;
42
+ countRows: number;
43
+ }
44
+ export interface FilterAction {
45
+ actionType: 'filter';
46
+ conditionsStack: ColumnConditions[];
47
+ previousConditionsStack: ColumnConditions[];
48
+ }
49
+ export interface MergeAction {
50
+ actionType: 'merge_cells';
51
+ cellRange: CellRange[];
52
+ }
53
+ export interface UnmergeAction {
54
+ actionType: 'unmerge_cells';
55
+ cellRange: CellRange[];
56
+ }
28
57
  export interface RemoveColAction {
29
58
  actionType: 'remove_col';
30
59
  amount: number;
@@ -34,13 +63,15 @@ export interface RemoveColAction {
34
63
  headers: string[];
35
64
  data: CellValue[][];
36
65
  }
37
- export interface FilterAction {
38
- actionType: 'filter';
39
- conditionsStack: ColumnConditions[];
66
+ export interface RemoveRowAction {
67
+ actionType: 'remove_row';
68
+ index: number;
69
+ data: CellValue[][];
40
70
  }
41
71
 
42
- export type Action = ChangeAction | InsertRowAction | RemoveRowAction | InsertColAction |
43
- RemoveColAction | FilterAction;
72
+ export type Action = CellAlignmentAction | ColumnMoveAction | ColumnSortAction |
73
+ InsertColAction | InsertRowAction | ChangeAction | FilterAction | MergeAction |
74
+ UnmergeAction | RemoveColAction | RemoveRowAction;
44
75
 
45
76
  export class UndoRedo extends BasePlugin {
46
77
  constructor(hotInstance: Core);
@@ -309,7 +309,7 @@ function checkboxRenderer(hotInstance, TD, row, col, prop, value, cellProperties
309
309
  continue;
310
310
  }
311
311
  const cell = hotInstance.getCell(visualRow, visualColumn);
312
- if (cell instanceof HTMLElement) {
312
+ if ((0, _element.isHTMLElement)(cell)) {
313
313
  const checkboxes = cell.querySelectorAll('input[type=checkbox]');
314
314
  if (checkboxes.length > 0) {
315
315
  return true;
@@ -4,7 +4,7 @@ import "core-js/modules/esnext.iterator.every.js";
4
4
  import "core-js/modules/esnext.iterator.map.js";
5
5
  import { baseRenderer } from "../baseRenderer/index.mjs";
6
6
  import EventManager from "../../eventManager.mjs";
7
- import { empty, addClass, setAttribute } from "../../helpers/dom/element.mjs";
7
+ import { empty, addClass, setAttribute, isHTMLElement } from "../../helpers/dom/element.mjs";
8
8
  import { isEmpty, stringify } from "../../helpers/mixed.mjs";
9
9
  import { EDITOR_EDIT_GROUP as SHORTCUTS_GROUP_EDITOR } from "../../shortcutContexts/index.mjs";
10
10
  import { Hooks } from "../../core/hooks/index.mjs";
@@ -304,7 +304,7 @@ export function checkboxRenderer(hotInstance, TD, row, col, prop, value, cellPro
304
304
  continue;
305
305
  }
306
306
  const cell = hotInstance.getCell(visualRow, visualColumn);
307
- if (cell instanceof HTMLElement) {
307
+ if (isHTMLElement(cell)) {
308
308
  const checkboxes = cell.querySelectorAll('input[type=checkbox]');
309
309
  if (checkboxes.length > 0) {
310
310
  return true;
@@ -50,8 +50,16 @@ function getRenderedValue(value, cellProperties) {
50
50
  function numericRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {
51
51
  let newValue = value;
52
52
  if ((0, _number.isNumeric)(newValue)) {
53
- const className = cellProperties.className || '';
54
- const classArr = className.length ? className.split(' ') : [];
53
+ let classArr = [];
54
+ if (Array.isArray(cellProperties.className)) {
55
+ classArr = cellProperties.className;
56
+ } else {
57
+ var _cellProperties$class;
58
+ const className = (_cellProperties$class = cellProperties.className) !== null && _cellProperties$class !== void 0 ? _cellProperties$class : '';
59
+ if (className.length) {
60
+ classArr = className.split(' ');
61
+ }
62
+ }
55
63
  newValue = getRenderedValue(newValue, cellProperties);
56
64
  if (classArr.indexOf('htLeft') < 0 && classArr.indexOf('htCenter') < 0 && classArr.indexOf('htRight') < 0 && classArr.indexOf('htJustify') < 0) {
57
65
  classArr.push('htRight');
@@ -44,8 +44,16 @@ export function getRenderedValue(value, cellProperties) {
44
44
  export function numericRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {
45
45
  let newValue = value;
46
46
  if (isNumeric(newValue)) {
47
- const className = cellProperties.className || '';
48
- const classArr = className.length ? className.split(' ') : [];
47
+ let classArr = [];
48
+ if (Array.isArray(cellProperties.className)) {
49
+ classArr = cellProperties.className;
50
+ } else {
51
+ var _cellProperties$class;
52
+ const className = (_cellProperties$class = cellProperties.className) !== null && _cellProperties$class !== void 0 ? _cellProperties$class : '';
53
+ if (className.length) {
54
+ classArr = className.split(' ');
55
+ }
56
+ }
49
57
  newValue = getRenderedValue(newValue, cellProperties);
50
58
  if (classArr.indexOf('htLeft') < 0 && classArr.indexOf('htCenter') < 0 && classArr.indexOf('htRight') < 0 && classArr.indexOf('htJustify') < 0) {
51
59
  classArr.push('htRight');
@@ -29,17 +29,8 @@ function textRenderer(hotInstance, TD, row, col, prop, value, cellProperties) {
29
29
  if (cellProperties.trimWhitespace) {
30
30
  escaped = escaped.trim();
31
31
  }
32
- if (cellProperties.rendererTemplate) {
33
- (0, _element.empty)(TD);
34
- const TEMPLATE = hotInstance.rootDocument.createElement('TEMPLATE');
35
- TEMPLATE.setAttribute('bind', '{{}}');
36
- TEMPLATE.innerHTML = cellProperties.rendererTemplate;
37
- HTMLTemplateElement.decorate(TEMPLATE);
38
- TEMPLATE.model = hotInstance.getSourceDataAtRow(row);
39
- TD.appendChild(TEMPLATE);
40
- } else {
41
- // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips
42
- (0, _element.fastInnerText)(TD, escaped);
43
- }
32
+
33
+ // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips
34
+ (0, _element.fastInnerText)(TD, escaped);
44
35
  }
45
36
  textRenderer.RENDERER_TYPE = RENDERER_TYPE;
@@ -1,5 +1,5 @@
1
1
  import { baseRenderer } from "../baseRenderer/index.mjs";
2
- import { empty, fastInnerText } from "../../helpers/dom/element.mjs";
2
+ import { fastInnerText } from "../../helpers/dom/element.mjs";
3
3
  import { stringify } from "../../helpers/mixed.mjs";
4
4
  export const RENDERER_TYPE = 'text';
5
5
 
@@ -25,17 +25,8 @@ export function textRenderer(hotInstance, TD, row, col, prop, value, cellPropert
25
25
  if (cellProperties.trimWhitespace) {
26
26
  escaped = escaped.trim();
27
27
  }
28
- if (cellProperties.rendererTemplate) {
29
- empty(TD);
30
- const TEMPLATE = hotInstance.rootDocument.createElement('TEMPLATE');
31
- TEMPLATE.setAttribute('bind', '{{}}');
32
- TEMPLATE.innerHTML = cellProperties.rendererTemplate;
33
- HTMLTemplateElement.decorate(TEMPLATE);
34
- TEMPLATE.model = hotInstance.getSourceDataAtRow(row);
35
- TD.appendChild(TEMPLATE);
36
- } else {
37
- // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips
38
- fastInnerText(TD, escaped);
39
- }
28
+
29
+ // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips
30
+ fastInnerText(TD, escaped);
40
31
  }
41
32
  textRenderer.RENDERER_TYPE = RENDERER_TYPE;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
+ require("core-js/modules/esnext.iterator.constructor.js");
4
5
  require("core-js/modules/esnext.iterator.map.js");
5
6
  // This file handles key-name discrepancies between browsers.
6
7
  // For the list of discrepancies, go to: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values.
@@ -1,3 +1,4 @@
1
+ import "core-js/modules/esnext.iterator.constructor.js";
1
2
  import "core-js/modules/esnext.iterator.map.js";
2
3
  // This file handles key-name discrepancies between browsers.
3
4
  // For the list of discrepancies, go to: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values.
@@ -25,10 +25,12 @@
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: 15.1.0-next-7652ed7-20250219
29
- * Release date: 20/02/2025 (built at 19/02/2025 10:42:22)
28
+ * Version: 15.2.0-next-8670a33-20250312
29
+ * Release date: 19/03/2025 (built at 12/03/2025 10:12:02)
30
30
  */
31
31
  .ht-wrapper:not([class*=ht-theme]) {
32
+ --ht-gap-size: 4px;
33
+ --ht-checkbox-size: 16px;
32
34
  --ht-cell-horizontal-padding: 8px;
33
35
  --ht-cell-vertical-padding: 4px;
34
36
  --ht-font-size: 14px;
@@ -87,8 +89,13 @@
87
89
  .handsontable.htGhostTable table tbody tr th {
88
90
  border-top-width: 0;
89
91
  }
92
+ .handsontable.htGhostTable table tbody tr:first-of-type th,
93
+ .handsontable.htGhostTable table tbody tr:first-of-type td {
94
+ height: calc(var(--ht-cell-vertical-padding) * 2 + var(--ht-line-height) + 1px);
95
+ }
90
96
  .handsontable.htHasScrollX .ht_master .wtHolder, .handsontable.htHasScrollY .ht_master .wtHolder {
91
97
  background-color: var(--ht-background-color);
98
+ border-radius: var(--ht-wrapper-border-radius, 0);
92
99
  }
93
100
  .handsontable tr.ht__row_even th {
94
101
  background-color: var(--ht-row-header-even-background-color);
@@ -176,17 +183,10 @@
176
183
  color: var(--ht-header-highlighted-foreground-color);
177
184
  background-color: var(--ht-header-highlighted-background-color);
178
185
  }
179
- .handsontable th.ht__highlight .relative::after {
180
- content: "";
181
- display: block;
182
- position: absolute;
183
- background-color: var(--ht-accent-color);
184
- }
185
186
  .handsontable th.ht__active_highlight {
186
187
  border-color: var(--ht-header-active-border-color);
187
188
  color: var(--ht-header-active-foreground-color);
188
189
  background-color: var(--ht-header-active-background-color);
189
- box-shadow: -1px 0 0 0 var(--ht-header-active-border-color);
190
190
  }
191
191
  .handsontable tbody tr.ht__row_odd th.ht__highlight, .handsontable tbody tr.ht__row_even th.ht__highlight {
192
192
  color: var(--ht-header-row-highlighted-foreground-color);
@@ -196,45 +196,37 @@
196
196
  color: var(--ht-header-row-active-foreground-color);
197
197
  background-color: var(--ht-header-row-active-background-color);
198
198
  }
199
+ .handsontable tbody tr:first-of-type th,
200
+ .handsontable tbody tr:first-of-type td {
201
+ height: calc(var(--ht-cell-vertical-padding) * 2 + var(--ht-line-height) + 2px);
202
+ }
199
203
  .handsontable tbody tr th {
200
204
  padding: 0;
201
205
  color: var(--ht-header-row-foreground-color);
202
206
  background-color: var(--ht-header-row-background-color);
203
207
  }
208
+ .handsontable tbody tr th.ht__active_highlight {
209
+ box-shadow: 0 -1px 0 0 var(--ht-header-active-border-color);
210
+ }
204
211
  .handsontable tbody tr th .relative {
205
212
  padding: var(--ht-cell-vertical-padding) var(--ht-cell-horizontal-padding);
206
213
  height: 100%;
207
214
  }
208
- .handsontable tbody tr th .relative::after {
209
- top: -1px;
210
- right: -1px;
211
- bottom: -1px;
212
- width: var(--ht-header-highlighted-shadow-size);
213
- }
214
- .handsontable tbody tr th.ht__active_highlight {
215
- box-shadow: 0 -1px 0 0 var(--ht-header-active-border-color);
216
- }
217
215
  .handsontable tbody tr td:first-child {
218
216
  border-inline-start-color: var(--ht-border-color);
219
217
  }
220
218
  .handsontable tbody tr td:last-child {
221
219
  border-inline-end-color: var(--ht-border-color);
222
220
  }
223
- .handsontable thead tr:only-of-type th .relative::after {
224
- bottom: 0;
225
- }
226
221
  .handsontable thead tr th {
227
222
  padding: 0;
228
223
  }
224
+ .handsontable thead tr th.ht__active_highlight {
225
+ box-shadow: -1px 0 0 0 var(--ht-header-active-border-color);
226
+ }
229
227
  .handsontable thead tr th .relative {
230
228
  padding: var(--ht-cell-vertical-padding) var(--ht-cell-horizontal-padding);
231
229
  }
232
- .handsontable thead tr th .relative::after {
233
- left: -1px;
234
- right: -1px;
235
- bottom: -1px;
236
- height: var(--ht-header-highlighted-shadow-size);
237
- }
238
230
  .handsontable thead tr th .relative .colHeader {
239
231
  text-overflow: ellipsis;
240
232
  overflow: hidden;
@@ -261,6 +253,29 @@
261
253
  .handsontable tr:last-child td.ht__active_highlight {
262
254
  border-bottom-color: var(--ht-header-active-border-color);
263
255
  }
256
+ .handsontable div[class^=ht_clone] thead .ht__highlight .relative::after {
257
+ content: "";
258
+ display: block;
259
+ position: absolute;
260
+ left: -1px;
261
+ right: -1px;
262
+ bottom: -1px;
263
+ height: var(--ht-header-highlighted-shadow-size);
264
+ background-color: var(--ht-accent-color);
265
+ }
266
+ .handsontable div[class^=ht_clone] thead tr:only-of-type .ht__highlight .relative::after {
267
+ bottom: 0;
268
+ }
269
+ .handsontable div[class^=ht_clone] tbody .ht__highlight .relative::after {
270
+ content: "";
271
+ display: block;
272
+ position: absolute;
273
+ top: -1px;
274
+ right: -1px;
275
+ bottom: -1px;
276
+ width: var(--ht-header-highlighted-shadow-size);
277
+ background-color: var(--ht-accent-color);
278
+ }
264
279
  .handsontable thead tr:not(:last-child) th {
265
280
  /* Fix for - nested columns with hidden column */
266
281
  overflow: hidden;
@@ -395,11 +410,30 @@
395
410
  [dir=rtl].handsontable tbody tr td[dir=ltr]:last-child {
396
411
  border-inline-start-color: var(--ht-border-color);
397
412
  }
398
- [dir=rtl].handsontable tbody tr th .relative::after {
413
+ [dir=rtl].handsontable div[class^=ht_clone] tbody .ht__highlight .relative::after {
399
414
  right: auto;
400
415
  left: -1px;
401
416
  }
402
417
 
418
+ .handsontable.ht-wrapper:not(.htColumnHeaders) .ht_master .htCore tbody tr:first-child td:first-child {
419
+ border-start-start-radius: var(--ht-wrapper-border-radius);
420
+ }
421
+ .handsontable.ht-wrapper:not(.htColumnHeaders) .ht_master .htCore tbody tr:first-child td:last-child {
422
+ border-start-end-radius: var(--ht-wrapper-border-radius);
423
+ }
424
+ .handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_top_inline_start_corner .htCore tbody tr:first-child td:first-child {
425
+ border-start-start-radius: var(--ht-wrapper-border-radius);
426
+ }
427
+ .handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_top .htCore tbody tr:first-child td:first-child {
428
+ border-start-start-radius: var(--ht-wrapper-border-radius);
429
+ }
430
+ .handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_top .htCore tbody tr:first-child td:last-child {
431
+ border-start-end-radius: var(--ht-wrapper-border-radius);
432
+ }
433
+ .handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_inline_start .htCore tbody tr:first-child th:first-child,
434
+ .handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_inline_start .htCore tbody tr:first-child td:first-child {
435
+ border-start-start-radius: var(--ht-wrapper-border-radius);
436
+ }
403
437
  .handsontable.ht-wrapper .ht_master .htCore {
404
438
  border-radius: var(--ht-wrapper-border-radius);
405
439
  }
@@ -409,11 +443,11 @@
409
443
  .handsontable.ht-wrapper .ht_master .htCore thead tr:first-child th:last-child {
410
444
  border-start-end-radius: var(--ht-wrapper-border-radius);
411
445
  }
412
- .handsontable.ht-wrapper .ht_master .htCore tbody tr:first-child td:first-child {
413
- border-start-start-radius: var(--ht-wrapper-border-radius);
446
+ .handsontable.ht-wrapper .ht_master .htCore thead tr:last-child th:first-child {
447
+ border-end-start-radius: var(--ht-wrapper-border-radius);
414
448
  }
415
- .handsontable.ht-wrapper .ht_master .htCore tbody tr:first-child td:last-child {
416
- border-start-end-radius: var(--ht-wrapper-border-radius);
449
+ .handsontable.ht-wrapper .ht_master .htCore thead tr:last-child th:last-child {
450
+ border-end-end-radius: var(--ht-wrapper-border-radius);
417
451
  }
418
452
  .handsontable.ht-wrapper .ht_master .htCore tbody tr:last-child td:first-child {
419
453
  border-end-start-radius: var(--ht-wrapper-border-radius);
@@ -421,40 +455,12 @@
421
455
  .handsontable.ht-wrapper .ht_master .htCore tbody tr:last-child td:last-child {
422
456
  border-end-end-radius: var(--ht-wrapper-border-radius);
423
457
  }
424
- .handsontable.ht-wrapper:has(.ht_clone_top thead tr th) .ht_master .htCore tbody tr:first-child td:first-child, .handsontable.ht-wrapper:has(.ht_clone_top tbody tr td) .ht_master .htCore tbody tr:first-child td:first-child {
425
- border-start-start-radius: 0;
426
- }
427
- .handsontable.ht-wrapper:has(.ht_clone_top thead tr th) .ht_master .htCore tbody tr:first-child td:last-child, .handsontable.ht-wrapper:has(.ht_clone_top tbody tr td) .ht_master .htCore tbody tr:first-child td:last-child {
428
- border-start-end-radius: 0;
429
- }
430
458
  .handsontable.ht-wrapper .ht_clone_top_inline_start_corner .htCore {
431
459
  border-start-start-radius: var(--ht-wrapper-border-radius);
432
460
  }
433
461
  .handsontable.ht-wrapper .ht_clone_top_inline_start_corner .htCore thead tr:first-child th:first-child {
434
462
  border-start-start-radius: var(--ht-wrapper-border-radius);
435
463
  }
436
- .handsontable.ht-wrapper .ht_clone_top_inline_start_corner .htCore tbody tr:first-child td:first-child,
437
- .handsontable.ht-wrapper .ht_clone_top_inline_start_corner .htCore tbody tr:first-child th:first-child {
438
- border-start-start-radius: var(--ht-wrapper-border-radius);
439
- }
440
- .handsontable.ht-wrapper .ht_clone_top_inline_start_corner .htCore:has(thead tr th) tbody tr:first-child td:first-child,
441
- .handsontable.ht-wrapper .ht_clone_top_inline_start_corner .htCore:has(thead tr th) tbody tr:first-child th:first-child {
442
- border-start-start-radius: 0 !important;
443
- }
444
- .handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore {
445
- border-end-start-radius: var(--ht-wrapper-border-radius);
446
- }
447
- .handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore thead tr:last-child th:first-child {
448
- border-end-start-radius: var(--ht-wrapper-border-radius);
449
- }
450
- .handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore tbody tr:last-child td:first-child,
451
- .handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore tbody tr:last-child th:first-child {
452
- border-end-start-radius: var(--ht-wrapper-border-radius);
453
- }
454
- .handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore:has(thead tr td) tbody tr:last-child td:first-child,
455
- .handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore:has(thead tr td) tbody tr:last-child th:first-child {
456
- border-end-start-radius: 0 !important;
457
- }
458
464
  .handsontable.ht-wrapper .ht_clone_top .htCore {
459
465
  border-start-start-radius: var(--ht-wrapper-border-radius);
460
466
  border-start-end-radius: var(--ht-wrapper-border-radius);
@@ -465,18 +471,6 @@
465
471
  .handsontable.ht-wrapper .ht_clone_top .htCore thead tr:first-child th:last-child {
466
472
  border-start-end-radius: var(--ht-wrapper-border-radius);
467
473
  }
468
- .handsontable.ht-wrapper .ht_clone_top .htCore tbody tr:first-child td:first-child {
469
- border-start-start-radius: var(--ht-wrapper-border-radius);
470
- }
471
- .handsontable.ht-wrapper .ht_clone_top .htCore tbody tr:first-child td:last-child {
472
- border-start-end-radius: var(--ht-wrapper-border-radius);
473
- }
474
- .handsontable.ht-wrapper .ht_clone_top .htCore:has(thead tr th) tbody tr:first-child td:first-child {
475
- border-start-start-radius: 0;
476
- }
477
- .handsontable.ht-wrapper .ht_clone_top .htCore:has(thead tr th) tbody tr:first-child td:last-child {
478
- border-start-end-radius: 0;
479
- }
480
474
  .handsontable.ht-wrapper .ht_clone_inline_start .htCore {
481
475
  border-start-start-radius: var(--ht-wrapper-border-radius);
482
476
  border-end-start-radius: var(--ht-wrapper-border-radius);
@@ -484,40 +478,29 @@
484
478
  .handsontable.ht-wrapper .ht_clone_inline_start .htCore thead tr:first-child th:first-child {
485
479
  border-start-start-radius: var(--ht-wrapper-border-radius);
486
480
  }
487
- .handsontable.ht-wrapper .ht_clone_inline_start .htCore tbody tr:first-child td:first-child,
488
- .handsontable.ht-wrapper .ht_clone_inline_start .htCore tbody tr:first-child th:first-child {
489
- border-start-start-radius: var(--ht-wrapper-border-radius);
490
- }
491
- .handsontable.ht-wrapper .ht_clone_inline_start .htCore tbody tr:last-child td:first-child,
492
- .handsontable.ht-wrapper .ht_clone_inline_start .htCore tbody tr:last-child th:first-child {
481
+ .handsontable.ht-wrapper .ht_clone_inline_start .htCore tbody tr:last-child th:first-child,
482
+ .handsontable.ht-wrapper .ht_clone_inline_start .htCore tbody tr:last-child td:first-child {
493
483
  border-end-start-radius: var(--ht-wrapper-border-radius);
494
484
  }
495
- .handsontable.ht-wrapper .ht_clone_inline_start .htCore:has(thead tr th) tbody tr:first-child td:first-child,
496
- .handsontable.ht-wrapper .ht_clone_inline_start .htCore:has(thead tr th) tbody tr:first-child th:first-child {
497
- border-start-start-radius: 0;
498
- }
499
- .handsontable.ht-wrapper .ht_clone_bottom .htCore {
485
+ .handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore {
500
486
  border-end-start-radius: var(--ht-wrapper-border-radius);
501
- border-end-end-radius: var(--ht-wrapper-border-radius);
502
487
  }
503
- .handsontable.ht-wrapper .ht_clone_bottom .htCore thead tr:last-child th:first-child {
488
+ .handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore tr:last-child th:first-child,
489
+ .handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore tr:last-child td:first-child {
504
490
  border-end-start-radius: var(--ht-wrapper-border-radius);
505
491
  }
506
- .handsontable.ht-wrapper .ht_clone_bottom .htCore thead tr:last-child th:last-child {
492
+ .handsontable.ht-wrapper .ht_clone_bottom .htCore {
493
+ border-end-start-radius: var(--ht-wrapper-border-radius);
507
494
  border-end-end-radius: var(--ht-wrapper-border-radius);
508
495
  }
509
- .handsontable.ht-wrapper .ht_clone_bottom .htCore tbody tr:last-child td:first-child {
496
+ .handsontable.ht-wrapper .ht_clone_bottom .htCore tr:last-child th:first-child,
497
+ .handsontable.ht-wrapper .ht_clone_bottom .htCore tr:last-child td:first-child {
510
498
  border-end-start-radius: var(--ht-wrapper-border-radius);
511
499
  }
512
- .handsontable.ht-wrapper .ht_clone_bottom .htCore tbody tr:last-child td:last-child {
500
+ .handsontable.ht-wrapper .ht_clone_bottom .htCore tr:last-child th:last-child,
501
+ .handsontable.ht-wrapper .ht_clone_bottom .htCore tr:last-child td:last-child {
513
502
  border-end-end-radius: var(--ht-wrapper-border-radius);
514
503
  }
515
- .handsontable.ht-wrapper .ht_clone_bottom .htCore:has(thead tr th) tbody tr:last-child td:first-child {
516
- border-end-start-radius: 0;
517
- }
518
- .handsontable.ht-wrapper .ht_clone_bottom .htCore:has(thead tr th) tbody tr:last-child td:last-child {
519
- border-end-end-radius: 0;
520
- }
521
504
  .handsontable.ht-wrapper.htHasScrollX .htCore {
522
505
  border-end-start-radius: 0;
523
506
  border-end-end-radius: 0;
@@ -525,12 +508,12 @@
525
508
  .handsontable.ht-wrapper.htHasScrollX .htCore thead tr:last-child th:first-child,
526
509
  .handsontable.ht-wrapper.htHasScrollX .htCore tbody tr:last-child td:first-child,
527
510
  .handsontable.ht-wrapper.htHasScrollX .htCore tbody tr:last-child th:first-child {
528
- border-end-start-radius: 0;
511
+ border-end-start-radius: 0 !important;
529
512
  }
530
513
  .handsontable.ht-wrapper.htHasScrollX .htCore thead tr:last-child th:last-child,
531
514
  .handsontable.ht-wrapper.htHasScrollX .htCore tbody tr:last-child td:last-child,
532
515
  .handsontable.ht-wrapper.htHasScrollX .htCore tbody tr:last-child th:last-child {
533
- border-end-end-radius: 0;
516
+ border-end-end-radius: 0 !important;
534
517
  }
535
518
  .handsontable.ht-wrapper.htHasScrollY .htCore {
536
519
  border-start-end-radius: 0;
@@ -539,12 +522,12 @@
539
522
  .handsontable.ht-wrapper.htHasScrollY .htCore thead tr:first-child th:last-child,
540
523
  .handsontable.ht-wrapper.htHasScrollY .htCore tbody tr:first-child td:last-child,
541
524
  .handsontable.ht-wrapper.htHasScrollY .htCore tbody tr:first-child th:last-child {
542
- border-start-end-radius: 0;
525
+ border-start-end-radius: 0 !important;
543
526
  }
544
527
  .handsontable.ht-wrapper.htHasScrollY .htCore thead tr:last-child th:last-child,
545
528
  .handsontable.ht-wrapper.htHasScrollY .htCore tbody tr:last-child td:last-child,
546
529
  .handsontable.ht-wrapper.htHasScrollY .htCore tbody tr:last-child th:last-child {
547
- border-end-end-radius: 0;
530
+ border-end-end-radius: 0 !important;
548
531
  }
549
532
 
550
533
  .handsontable.mobile {
@@ -793,7 +776,6 @@
793
776
  margin: 0;
794
777
  vertical-align: middle;
795
778
  cursor: pointer;
796
- appearance: none;
797
779
  margin-top: -2px;
798
780
  }
799
781
  .handsontable .htCheckboxRendererInput:first-child {
@@ -936,6 +918,7 @@
936
918
  background-color: var(--ht-cell-editor-background-color, #ffffff);
937
919
  box-shadow: inset 0 0 0 var(--ht-cell-editor-border-width, 2px) var(--ht-cell-editor-border-color, #1a42e8), 0 0 var(--ht-cell-editor-shadow-blur-radius, 0) 0 var(--ht-cell-editor-shadow-color, transparent);
938
920
  border: none;
921
+ border-radius: 0;
939
922
  -webkit-appearance: none !important;
940
923
  box-sizing: border-box;
941
924
  /* Miscellaneous */
@@ -967,6 +950,7 @@
967
950
  line-height: inherit !important;
968
951
  box-shadow: inset 0 0 0 var(--ht-cell-editor-border-width, 2px) var(--ht-cell-editor-border-color, #1a42e8), 0 0 var(--ht-cell-editor-shadow-blur-radius, 0) 0 var(--ht-cell-editor-shadow-color, transparent);
969
952
  border: none;
953
+ border-radius: 0;
970
954
  box-sizing: border-box;
971
955
  -webkit-appearance: none !important;
972
956
  }