handsontable 0.0.0-next-802f59c-20241024 → 0.0.0-next-627918e-20241025

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of handsontable might be problematic. Click here for more details.

Files changed (128) hide show
  1. package/3rdparty/walkontable/src/calculator/index.js +1 -2
  2. package/3rdparty/walkontable/src/calculator/index.mjs +2 -2
  3. package/3rdparty/walkontable/src/calculator/viewportRows.js +3 -3
  4. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +3 -3
  5. package/3rdparty/walkontable/src/core/_base.js +3 -0
  6. package/3rdparty/walkontable/src/core/_base.mjs +3 -0
  7. package/3rdparty/walkontable/src/core/clone.js +1 -0
  8. package/3rdparty/walkontable/src/core/clone.mjs +1 -0
  9. package/3rdparty/walkontable/src/core/core.js +2 -0
  10. package/3rdparty/walkontable/src/core/core.mjs +2 -0
  11. package/3rdparty/walkontable/src/facade/core.js +3 -0
  12. package/3rdparty/walkontable/src/facade/core.mjs +3 -0
  13. package/3rdparty/walkontable/src/index.js +0 -1
  14. package/3rdparty/walkontable/src/index.mjs +2 -2
  15. package/3rdparty/walkontable/src/overlay/_base.js +3 -1
  16. package/3rdparty/walkontable/src/overlay/_base.mjs +3 -1
  17. package/3rdparty/walkontable/src/overlay/bottom.js +2 -2
  18. package/3rdparty/walkontable/src/overlay/bottom.mjs +2 -2
  19. package/3rdparty/walkontable/src/overlay/inlineStart.js +1 -1
  20. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +1 -1
  21. package/3rdparty/walkontable/src/overlay/top.js +1 -1
  22. package/3rdparty/walkontable/src/overlay/top.mjs +1 -1
  23. package/3rdparty/walkontable/src/overlays.js +6 -7
  24. package/3rdparty/walkontable/src/overlays.mjs +6 -7
  25. package/3rdparty/walkontable/src/renderer/colGroup.js +1 -1
  26. package/3rdparty/walkontable/src/renderer/colGroup.mjs +1 -1
  27. package/3rdparty/walkontable/src/renderer/table.js +1 -1
  28. package/3rdparty/walkontable/src/renderer/table.mjs +1 -1
  29. package/3rdparty/walkontable/src/settings.js +8 -2
  30. package/3rdparty/walkontable/src/settings.mjs +8 -2
  31. package/3rdparty/walkontable/src/table.js +35 -8
  32. package/3rdparty/walkontable/src/table.mjs +35 -8
  33. package/3rdparty/walkontable/src/types.js +1 -0
  34. package/3rdparty/walkontable/src/types.mjs +1 -0
  35. package/3rdparty/walkontable/src/utils/column.js +43 -1
  36. package/3rdparty/walkontable/src/utils/column.mjs +43 -1
  37. package/3rdparty/walkontable/src/utils/columnStretching.js +197 -0
  38. package/3rdparty/walkontable/src/utils/columnStretching.mjs +193 -0
  39. package/3rdparty/walkontable/src/utils/stylesHandler.js +179 -0
  40. package/3rdparty/walkontable/src/utils/stylesHandler.mjs +175 -0
  41. package/3rdparty/walkontable/src/viewport.js +88 -66
  42. package/3rdparty/walkontable/src/viewport.mjs +89 -67
  43. package/base.js +2 -2
  44. package/base.mjs +2 -2
  45. package/core/hooks/constants.js +0 -2
  46. package/core/hooks/constants.mjs +0 -2
  47. package/core/hooks/index.d.ts +2 -2
  48. package/core.d.ts +2 -2
  49. package/core.js +18 -6
  50. package/core.mjs +18 -6
  51. package/dataMap/metaManager/metaSchema.js +17 -0
  52. package/dataMap/metaManager/metaSchema.mjs +17 -0
  53. package/dist/handsontable.css +17 -9
  54. package/dist/handsontable.full.css +17 -7
  55. package/dist/handsontable.full.js +4217 -4534
  56. package/dist/handsontable.full.min.css +5 -4
  57. package/dist/handsontable.full.min.js +26 -26
  58. package/dist/handsontable.js +3923 -4234
  59. package/dist/handsontable.min.css +5 -4
  60. package/dist/handsontable.min.js +24 -24
  61. package/editors/autocompleteEditor/autocompleteEditor.js +1 -1
  62. package/editors/autocompleteEditor/autocompleteEditor.mjs +1 -1
  63. package/editors/baseEditor/baseEditor.js +1 -1
  64. package/editors/baseEditor/baseEditor.mjs +1 -1
  65. package/editors/dateEditor/dateEditor.js +2 -0
  66. package/editors/dateEditor/dateEditor.mjs +2 -0
  67. package/editors/handsontableEditor/handsontableEditor.js +1 -1
  68. package/editors/handsontableEditor/handsontableEditor.mjs +1 -1
  69. package/editors/selectEditor/selectEditor.js +20 -9
  70. package/editors/selectEditor/selectEditor.mjs +20 -9
  71. package/editors/textEditor/textEditor.js +4 -11
  72. package/editors/textEditor/textEditor.mjs +4 -11
  73. package/helpers/mixed.js +2 -2
  74. package/helpers/mixed.mjs +2 -2
  75. package/helpers/themes.js +17 -0
  76. package/helpers/themes.mjs +13 -0
  77. package/index.d.ts +0 -7
  78. package/package.json +10 -8
  79. package/plugins/comments/commentEditor.js +8 -1
  80. package/plugins/comments/commentEditor.mjs +8 -1
  81. package/plugins/comments/comments.js +2 -2
  82. package/plugins/comments/comments.mjs +2 -2
  83. package/plugins/contextMenu/menu/menu.js +4 -4
  84. package/plugins/contextMenu/menu/menu.mjs +4 -4
  85. package/plugins/index.d.ts +0 -3
  86. package/plugins/index.js +0 -3
  87. package/plugins/index.mjs +1 -3
  88. package/plugins/manualColumnMove/manualColumnMove.js +3 -1
  89. package/plugins/manualColumnMove/manualColumnMove.mjs +3 -1
  90. package/plugins/manualColumnResize/manualColumnResize.js +12 -24
  91. package/plugins/manualColumnResize/manualColumnResize.mjs +12 -24
  92. package/plugins/manualRowMove/manualRowMove.js +1 -1
  93. package/plugins/manualRowMove/manualRowMove.mjs +1 -1
  94. package/plugins/manualRowResize/manualRowResize.js +1 -2
  95. package/plugins/manualRowResize/manualRowResize.mjs +2 -3
  96. package/plugins/mergeCells/mergeCells.js +1 -1
  97. package/plugins/mergeCells/mergeCells.mjs +1 -1
  98. package/plugins/nestedRows/ui/headers.js +3 -1
  99. package/plugins/nestedRows/ui/headers.mjs +3 -1
  100. package/settings.d.ts +1 -0
  101. package/styles/handsontable.css +1983 -0
  102. package/styles/handsontable.min.css +30 -0
  103. package/styles/ht-theme-gemini.css +706 -0
  104. package/styles/ht-theme-gemini.min.css +30 -0
  105. package/styles/ht-theme-main.css +714 -0
  106. package/styles/ht-theme-main.min.css +30 -0
  107. package/stylesManager.js +1 -0
  108. package/stylesManager.mjs +0 -0
  109. package/tableView.js +40 -39
  110. package/tableView.mjs +40 -39
  111. package/utils/autoResize.js +4 -1
  112. package/utils/autoResize.mjs +4 -1
  113. package/utils/ghostTable.js +1 -1
  114. package/utils/ghostTable.mjs +1 -1
  115. package/plugins/stretchColumns/calculator.js +0 -159
  116. package/plugins/stretchColumns/calculator.mjs +0 -155
  117. package/plugins/stretchColumns/index.d.ts +0 -1
  118. package/plugins/stretchColumns/index.js +0 -7
  119. package/plugins/stretchColumns/index.mjs +0 -1
  120. package/plugins/stretchColumns/strategies/_base.js +0 -85
  121. package/plugins/stretchColumns/strategies/_base.mjs +0 -81
  122. package/plugins/stretchColumns/strategies/all.js +0 -68
  123. package/plugins/stretchColumns/strategies/all.mjs +0 -64
  124. package/plugins/stretchColumns/strategies/last.js +0 -77
  125. package/plugins/stretchColumns/strategies/last.mjs +0 -73
  126. package/plugins/stretchColumns/stretchColumns.d.ts +0 -11
  127. package/plugins/stretchColumns/stretchColumns.js +0 -211
  128. package/plugins/stretchColumns/stretchColumns.mjs +0 -207
@@ -375,7 +375,7 @@ class AutocompleteEditor extends _handsontableEditor.HandsontableEditor {
375
375
  let lastRowHeight = 0;
376
376
  let height = null;
377
377
  do {
378
- lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view._wt.getSetting('defaultRowHeight');
378
+ lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view.getDefaultRowHeight();
379
379
  tempHeight += lastRowHeight;
380
380
  i += 1;
381
381
  } while (tempHeight < spaceAvailable);
@@ -372,7 +372,7 @@ export class AutocompleteEditor extends HandsontableEditor {
372
372
  let lastRowHeight = 0;
373
373
  let height = null;
374
374
  do {
375
- lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view._wt.getSetting('defaultRowHeight');
375
+ lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view.getDefaultRowHeight();
376
376
  tempHeight += lastRowHeight;
377
377
  i += 1;
378
378
  } while (tempHeight < spaceAvailable);
@@ -492,7 +492,7 @@ class BaseEditor {
492
492
  const actualVerticalScrollbarWidth = (0, _element.hasVerticalScrollbar)(scrollableContainerTop) ? scrollbarWidth : 0;
493
493
  const actualHorizontalScrollbarWidth = (0, _element.hasHorizontalScrollbar)(scrollableContainerLeft) ? scrollbarWidth : 0;
494
494
  const maxWidth = this.hot.view.maximumVisibleElementWidth(cellStartOffset) - actualVerticalScrollbarWidth + inlineStartBorderCompensation;
495
- const maxHeight = Math.max(this.hot.view.maximumVisibleElementHeight(cellTopOffset) - actualHorizontalScrollbarWidth + topBorderCompensation, 23);
495
+ const maxHeight = Math.max(this.hot.view.maximumVisibleElementHeight(cellTopOffset) - actualHorizontalScrollbarWidth + topBorderCompensation, this.hot.view.getDefaultRowHeight());
496
496
  return {
497
497
  top: topPos,
498
498
  start: inlineStartPos,
@@ -488,7 +488,7 @@ export class BaseEditor {
488
488
  const actualVerticalScrollbarWidth = hasVerticalScrollbar(scrollableContainerTop) ? scrollbarWidth : 0;
489
489
  const actualHorizontalScrollbarWidth = hasHorizontalScrollbar(scrollableContainerLeft) ? scrollbarWidth : 0;
490
490
  const maxWidth = this.hot.view.maximumVisibleElementWidth(cellStartOffset) - actualVerticalScrollbarWidth + inlineStartBorderCompensation;
491
- const maxHeight = Math.max(this.hot.view.maximumVisibleElementHeight(cellTopOffset) - actualHorizontalScrollbarWidth + topBorderCompensation, 23);
491
+ const maxHeight = Math.max(this.hot.view.maximumVisibleElementHeight(cellTopOffset) - actualHorizontalScrollbarWidth + topBorderCompensation, this.hot.view.getDefaultRowHeight());
492
492
  return {
493
493
  top: topPos,
494
494
  start: inlineStartPos,
@@ -66,7 +66,9 @@ class DateEditor extends _textEditor.TextEditor {
66
66
  this.datePickerStyle.left = 0;
67
67
  this.datePickerStyle.zIndex = 9999;
68
68
  this.datePicker.setAttribute('dir', this.hot.isRtl() ? 'rtl' : 'ltr');
69
+ const themeClassName = this.hot.getSettings().themeName;
69
70
  (0, _element.addClass)(this.datePicker, 'htDatepickerHolder');
71
+ (0, _element.addClass)(this.datePicker, themeClassName);
70
72
  this.hot.rootDocument.body.appendChild(this.datePicker);
71
73
 
72
74
  /**
@@ -62,7 +62,9 @@ export class DateEditor extends TextEditor {
62
62
  this.datePickerStyle.left = 0;
63
63
  this.datePickerStyle.zIndex = 9999;
64
64
  this.datePicker.setAttribute('dir', this.hot.isRtl() ? 'rtl' : 'ltr');
65
+ const themeClassName = this.hot.getSettings().themeName;
65
66
  addClass(this.datePicker, 'htDatepickerHolder');
67
+ addClass(this.datePicker, themeClassName);
66
68
  this.hot.rootDocument.body.appendChild(this.datePicker);
67
69
 
68
70
  /**
@@ -158,7 +158,7 @@ class HandsontableEditor extends _textEditor.TextEditor {
158
158
  * @returns {number}
159
159
  */
160
160
  getHeight() {
161
- return this.htEditor.view.getTableHeight();
161
+ return this.htEditor.view.getTableHeight() + 1;
162
162
  }
163
163
 
164
164
  /**
@@ -155,7 +155,7 @@ export class HandsontableEditor extends TextEditor {
155
155
  * @returns {number}
156
156
  */
157
157
  getHeight() {
158
- return this.htEditor.view.getTableHeight();
158
+ return this.htEditor.view.getTableHeight() + 1;
159
159
  }
160
160
 
161
161
  /**
@@ -4,6 +4,7 @@ exports.__esModule = true;
4
4
  var _baseEditor = require("../baseEditor");
5
5
  var _element = require("../../helpers/dom/element");
6
6
  var _object = require("../../helpers/object");
7
+ var _a11y = require("../../helpers/a11y");
7
8
  const EDITOR_VISIBLE_CLASS_NAME = 'ht_editor_visible';
8
9
  const SHORTCUTS_GROUP = 'selectEditor';
9
10
  const EDITOR_TYPE = exports.EDITOR_TYPE = 'select';
@@ -21,11 +22,21 @@ class SelectEditor extends _baseEditor.BaseEditor {
21
22
  * Initializes editor instance, DOM Element and mount hooks.
22
23
  */
23
24
  init() {
25
+ this.selectWrapper = this.hot.rootDocument.createElement('div');
24
26
  this.select = this.hot.rootDocument.createElement('select');
25
27
  this.select.setAttribute('data-hot-input', 'true');
26
- this.select.style.display = 'none';
27
- (0, _element.addClass)(this.select, 'htSelectEditor');
28
- this.hot.rootElement.appendChild(this.select);
28
+ this.selectWrapper.style.display = 'none';
29
+ const ARROW = this.hot.rootDocument.createElement('DIV');
30
+ const isAriaEnabled = this.hot.getSettings().ariaTags;
31
+ ARROW.className = 'htAutocompleteArrow';
32
+ if (isAriaEnabled) {
33
+ ARROW.setAttribute(...(0, _a11y.A11Y_HIDDEN)());
34
+ }
35
+ ARROW.appendChild(this.hot.rootDocument.createTextNode(String.fromCharCode(9660)));
36
+ (0, _element.addClass)(this.selectWrapper, 'htSelectEditor');
37
+ this.selectWrapper.appendChild(this.select);
38
+ this.selectWrapper.insertBefore(ARROW, this.selectWrapper.firstChild);
39
+ this.hot.rootElement.appendChild(this.selectWrapper);
29
40
  this.registerHooks();
30
41
  }
31
42
 
@@ -53,7 +64,7 @@ class SelectEditor extends _baseEditor.BaseEditor {
53
64
  open() {
54
65
  this._opened = true;
55
66
  this.refreshDimensions();
56
- this.select.style.display = '';
67
+ this.selectWrapper.style.display = '';
57
68
  const shortcutManager = this.hot.getShortcutManager();
58
69
  shortcutManager.setActiveContextName('editor');
59
70
  this.registerShortcuts();
@@ -64,9 +75,9 @@ class SelectEditor extends _baseEditor.BaseEditor {
64
75
  */
65
76
  close() {
66
77
  this._opened = false;
67
- this.select.style.display = 'none';
68
- if ((0, _element.hasClass)(this.select, EDITOR_VISIBLE_CLASS_NAME)) {
69
- (0, _element.removeClass)(this.select, EDITOR_VISIBLE_CLASS_NAME);
78
+ this.selectWrapper.style.display = 'none';
79
+ if ((0, _element.hasClass)(this.selectWrapper, EDITOR_VISIBLE_CLASS_NAME)) {
80
+ (0, _element.removeClass)(this.selectWrapper, EDITOR_VISIBLE_CLASS_NAME);
70
81
  }
71
82
  this.unregisterShortcuts();
72
83
  this.clearHooks();
@@ -172,13 +183,13 @@ class SelectEditor extends _baseEditor.BaseEditor {
172
183
  width,
173
184
  height
174
185
  } = this.getEditedCellRect();
175
- const selectStyle = this.select.style;
186
+ const selectStyle = this.selectWrapper.style;
176
187
  selectStyle.height = `${height}px`;
177
188
  selectStyle.width = `${width}px`;
178
189
  selectStyle.top = `${top}px`;
179
190
  selectStyle[this.hot.isRtl() ? 'right' : 'left'] = `${start}px`;
180
191
  selectStyle.margin = '0px';
181
- (0, _element.addClass)(this.select, EDITOR_VISIBLE_CLASS_NAME);
192
+ (0, _element.addClass)(this.selectWrapper, EDITOR_VISIBLE_CLASS_NAME);
182
193
  }
183
194
 
184
195
  /**
@@ -1,6 +1,7 @@
1
1
  import { BaseEditor, EDITOR_STATE } from "../baseEditor/index.mjs";
2
2
  import { addClass, empty, fastInnerHTML, hasClass, removeClass } from "../../helpers/dom/element.mjs";
3
3
  import { objectEach } from "../../helpers/object.mjs";
4
+ import { A11Y_HIDDEN } from "../../helpers/a11y.mjs";
4
5
  const EDITOR_VISIBLE_CLASS_NAME = 'ht_editor_visible';
5
6
  const SHORTCUTS_GROUP = 'selectEditor';
6
7
  export const EDITOR_TYPE = 'select';
@@ -18,11 +19,21 @@ export class SelectEditor extends BaseEditor {
18
19
  * Initializes editor instance, DOM Element and mount hooks.
19
20
  */
20
21
  init() {
22
+ this.selectWrapper = this.hot.rootDocument.createElement('div');
21
23
  this.select = this.hot.rootDocument.createElement('select');
22
24
  this.select.setAttribute('data-hot-input', 'true');
23
- this.select.style.display = 'none';
24
- addClass(this.select, 'htSelectEditor');
25
- this.hot.rootElement.appendChild(this.select);
25
+ this.selectWrapper.style.display = 'none';
26
+ const ARROW = this.hot.rootDocument.createElement('DIV');
27
+ const isAriaEnabled = this.hot.getSettings().ariaTags;
28
+ ARROW.className = 'htAutocompleteArrow';
29
+ if (isAriaEnabled) {
30
+ ARROW.setAttribute(...A11Y_HIDDEN());
31
+ }
32
+ ARROW.appendChild(this.hot.rootDocument.createTextNode(String.fromCharCode(9660)));
33
+ addClass(this.selectWrapper, 'htSelectEditor');
34
+ this.selectWrapper.appendChild(this.select);
35
+ this.selectWrapper.insertBefore(ARROW, this.selectWrapper.firstChild);
36
+ this.hot.rootElement.appendChild(this.selectWrapper);
26
37
  this.registerHooks();
27
38
  }
28
39
 
@@ -50,7 +61,7 @@ export class SelectEditor extends BaseEditor {
50
61
  open() {
51
62
  this._opened = true;
52
63
  this.refreshDimensions();
53
- this.select.style.display = '';
64
+ this.selectWrapper.style.display = '';
54
65
  const shortcutManager = this.hot.getShortcutManager();
55
66
  shortcutManager.setActiveContextName('editor');
56
67
  this.registerShortcuts();
@@ -61,9 +72,9 @@ export class SelectEditor extends BaseEditor {
61
72
  */
62
73
  close() {
63
74
  this._opened = false;
64
- this.select.style.display = 'none';
65
- if (hasClass(this.select, EDITOR_VISIBLE_CLASS_NAME)) {
66
- removeClass(this.select, EDITOR_VISIBLE_CLASS_NAME);
75
+ this.selectWrapper.style.display = 'none';
76
+ if (hasClass(this.selectWrapper, EDITOR_VISIBLE_CLASS_NAME)) {
77
+ removeClass(this.selectWrapper, EDITOR_VISIBLE_CLASS_NAME);
67
78
  }
68
79
  this.unregisterShortcuts();
69
80
  this.clearHooks();
@@ -169,13 +180,13 @@ export class SelectEditor extends BaseEditor {
169
180
  width,
170
181
  height
171
182
  } = this.getEditedCellRect();
172
- const selectStyle = this.select.style;
183
+ const selectStyle = this.selectWrapper.style;
173
184
  selectStyle.height = `${height}px`;
174
185
  selectStyle.width = `${width}px`;
175
186
  selectStyle.top = `${top}px`;
176
187
  selectStyle[this.hot.isRtl() ? 'right' : 'left'] = `${start}px`;
177
188
  selectStyle.margin = '0px';
178
- addClass(this.select, EDITOR_VISIBLE_CLASS_NAME);
189
+ addClass(this.selectWrapper, EDITOR_VISIBLE_CLASS_NAME);
179
190
  }
180
191
 
181
192
  /**
@@ -309,19 +309,12 @@ class TextEditor extends _baseEditor.BaseEditor {
309
309
  this.TEXTAREA.style.fontSize = cellComputedStyle.fontSize;
310
310
  this.TEXTAREA.style.fontFamily = cellComputedStyle.fontFamily;
311
311
  this.TEXTAREA.style.backgroundColor = this.TD.style.backgroundColor;
312
- const textareaComputedStyle = this.hot.rootWindow.getComputedStyle(this.TEXTAREA);
313
- const horizontalPadding = parseInt(textareaComputedStyle.paddingLeft, 10) + parseInt(textareaComputedStyle.paddingRight, 10);
314
- const verticalPadding = parseInt(textareaComputedStyle.paddingTop, 10) + parseInt(textareaComputedStyle.paddingBottom, 10);
315
- const finalWidth = width - horizontalPadding;
316
- const finalHeight = height - verticalPadding;
317
- const finalMaxWidth = maxWidth - horizontalPadding;
318
- const finalMaxHeight = maxHeight - verticalPadding;
319
312
  this.autoResize.init(this.TEXTAREA, {
320
- minWidth: Math.min(finalWidth, finalMaxWidth),
321
- minHeight: Math.min(finalHeight, finalMaxHeight),
313
+ minWidth: Math.min(width, maxWidth),
314
+ minHeight: Math.min(height, maxHeight),
322
315
  // TEXTAREA should never be wider than visible part of the viewport (should not cover the scrollbar)
323
- maxWidth: finalMaxWidth,
324
- maxHeight: finalMaxHeight
316
+ maxWidth,
317
+ maxHeight
325
318
  }, true);
326
319
  }
327
320
 
@@ -305,19 +305,12 @@ export class TextEditor extends BaseEditor {
305
305
  this.TEXTAREA.style.fontSize = cellComputedStyle.fontSize;
306
306
  this.TEXTAREA.style.fontFamily = cellComputedStyle.fontFamily;
307
307
  this.TEXTAREA.style.backgroundColor = this.TD.style.backgroundColor;
308
- const textareaComputedStyle = this.hot.rootWindow.getComputedStyle(this.TEXTAREA);
309
- const horizontalPadding = parseInt(textareaComputedStyle.paddingLeft, 10) + parseInt(textareaComputedStyle.paddingRight, 10);
310
- const verticalPadding = parseInt(textareaComputedStyle.paddingTop, 10) + parseInt(textareaComputedStyle.paddingBottom, 10);
311
- const finalWidth = width - horizontalPadding;
312
- const finalHeight = height - verticalPadding;
313
- const finalMaxWidth = maxWidth - horizontalPadding;
314
- const finalMaxHeight = maxHeight - verticalPadding;
315
308
  this.autoResize.init(this.TEXTAREA, {
316
- minWidth: Math.min(finalWidth, finalMaxWidth),
317
- minHeight: Math.min(finalHeight, finalMaxHeight),
309
+ minWidth: Math.min(width, maxWidth),
310
+ minHeight: Math.min(height, maxHeight),
318
311
  // TEXTAREA should never be wider than visible part of the viewport (should not cover the scrollbar)
319
- maxWidth: finalMaxWidth,
320
- maxHeight: finalMaxHeight
312
+ maxWidth,
313
+ maxHeight
321
314
  }, true);
322
315
  }
323
316
 
package/helpers/mixed.js CHANGED
@@ -134,7 +134,7 @@ const domMessages = {
134
134
  function _injectProductInfo(key, element) {
135
135
  const hasValidType = !isEmpty(key);
136
136
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
137
- const hotVersion = "0.0.0-next-802f59c-20241024";
137
+ const hotVersion = "0.0.0-next-627918e-20241025";
138
138
  let keyValidityDate;
139
139
  let consoleMessageState = 'invalid';
140
140
  let domMessageState = 'invalid';
@@ -188,7 +188,7 @@ function _injectProductInfo(key, element) {
188
188
  });
189
189
  if (message) {
190
190
  const messageNode = document.createElement('div');
191
- messageNode.className = 'hot-display-license-info';
191
+ messageNode.className = 'handsontable hot-display-license-info';
192
192
  messageNode.innerHTML = domMessages[domMessageState]({
193
193
  keyValidityDate,
194
194
  hotVersion
package/helpers/mixed.mjs CHANGED
@@ -124,7 +124,7 @@ const domMessages = {
124
124
  export function _injectProductInfo(key, element) {
125
125
  const hasValidType = !isEmpty(key);
126
126
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
127
- const hotVersion = "0.0.0-next-802f59c-20241024";
127
+ const hotVersion = "0.0.0-next-627918e-20241025";
128
128
  let keyValidityDate;
129
129
  let consoleMessageState = 'invalid';
130
130
  let domMessageState = 'invalid';
@@ -178,7 +178,7 @@ export function _injectProductInfo(key, element) {
178
178
  });
179
179
  if (message) {
180
180
  const messageNode = document.createElement('div');
181
- messageNode.className = 'hot-display-license-info';
181
+ messageNode.className = 'handsontable hot-display-license-info';
182
182
  messageNode.innerHTML = domMessages[domMessageState]({
183
183
  keyValidityDate,
184
184
  hotVersion
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.getThemeClassName = getThemeClassName;
5
+ /**
6
+ * Get theme class name from rootElement class.
7
+ *
8
+ * @param {string} className Class names.
9
+ * @returns {string}
10
+ */
11
+ function getThemeClassName(className) {
12
+ if (!className || typeof className !== 'string') {
13
+ return false;
14
+ }
15
+ const [match] = className.match(/ht-theme-[a-zA-Z0-9_-]+/) || [];
16
+ return match;
17
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Get theme class name from rootElement class.
3
+ *
4
+ * @param {string} className Class names.
5
+ * @returns {string}
6
+ */
7
+ export function getThemeClassName(className) {
8
+ if (!className || typeof className !== 'string') {
9
+ return false;
10
+ }
11
+ const [match] = className.match(/ht-theme-[a-zA-Z0-9_-]+/) || [];
12
+ return match;
13
+ }
package/index.d.ts CHANGED
@@ -220,9 +220,6 @@ import {
220
220
  SearchCallback,
221
221
  SearchQueryMethod,
222
222
  } from './plugins/search';
223
- import {
224
- Settings as StretchColumnsSettings,
225
- } from './plugins/stretchColumns';
226
223
  import {
227
224
  TouchScroll as _TouchScroll,
228
225
  Settings as TouchScrollSettings,
@@ -526,10 +523,6 @@ declare namespace Handsontable {
526
523
  export { SearchQueryMethod };
527
524
  }
528
525
 
529
- export namespace StretchColumns {
530
- export { StretchColumnsSettings as Settings };
531
- }
532
-
533
526
  export namespace TouchScroll {
534
527
  export { TouchScrollSettings as Settings };
535
528
  }
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "url": "https://github.com/handsontable/handsontable/issues"
11
11
  },
12
12
  "author": "Handsoncode <hello@handsontable.com>",
13
- "version": "0.0.0-next-802f59c-20241024",
13
+ "version": "0.0.0-next-627918e-20241025",
14
14
  "main": "index",
15
15
  "module": "index.mjs",
16
16
  "jsnext:main": "index.mjs",
@@ -50,7 +50,6 @@
50
50
  "@babel/register": "^7.8.3",
51
51
  "@babel/runtime": "^7.11.2",
52
52
  "@babel/types": "^7.12.12",
53
- "@typescript-eslint/eslint-plugin": "^4.33.0",
54
53
  "babel-jest": "^26.6.3",
55
54
  "babel-loader": "^8.0.4",
56
55
  "babel-plugin-forbidden-imports": "^0.1.2",
@@ -94,8 +93,10 @@
94
93
  "string-replace-loader": "^3.1.0",
95
94
  "stylelint": "^16.3.1",
96
95
  "typescript": "3.8.2",
96
+ "@typescript-eslint/eslint-plugin": "^4.33.0",
97
97
  "webpack": "^5.88.1",
98
- "webpack-cli": "^5.1.4"
98
+ "webpack-cli": "^5.1.4",
99
+ "webpack-remove-empty-scripts": "^1.0.4"
99
100
  },
100
101
  "optionalDependencies": {
101
102
  "hyperformula": "^2.6.2"
@@ -472,11 +473,6 @@
472
473
  "require": "./plugins/search/index.js",
473
474
  "import": "./plugins/search/index.mjs"
474
475
  },
475
- "./plugins/stretchColumns": {
476
- "types": "./plugins/stretchColumns/index.d.ts",
477
- "require": "./plugins/stretchColumns/index.js",
478
- "import": "./plugins/stretchColumns/index.mjs"
479
- },
480
476
  "./plugins/touchScroll": {
481
477
  "types": "./plugins/touchScroll/index.d.ts",
482
478
  "require": "./plugins/touchScroll/index.js",
@@ -772,6 +768,12 @@
772
768
  "./dist/languages/zh-CN.min.js": "./dist/languages/zh-CN.min.js",
773
769
  "./dist/languages/zh-TW.js": "./dist/languages/zh-TW.js",
774
770
  "./dist/languages/zh-TW.min.js": "./dist/languages/zh-TW.min.js",
771
+ "./styles/handsontable.css": "./styles/handsontable.css",
772
+ "./styles/handsontable.min.css": "./styles/handsontable.min.css",
773
+ "./styles/ht-theme-gemini.css": "./styles/ht-theme-gemini.css",
774
+ "./styles/ht-theme-gemini.min.css": "./styles/ht-theme-gemini.min.css",
775
+ "./styles/ht-theme-main.css": "./styles/ht-theme-main.css",
776
+ "./styles/ht-theme-main.min.css": "./styles/ht-theme-main.min.css",
775
777
  ".": {
776
778
  "types": "./index.d.ts",
777
779
  "import": "./index.mjs",
@@ -25,6 +25,7 @@ var _editor = /*#__PURE__*/new WeakMap();
25
25
  var _editorStyle = /*#__PURE__*/new WeakMap();
26
26
  var _hidden = /*#__PURE__*/new WeakMap();
27
27
  var _resizeObserver = /*#__PURE__*/new WeakMap();
28
+ var _themeClassName = /*#__PURE__*/new WeakMap();
28
29
  class CommentEditor {
29
30
  static get CLASS_EDITOR_CONTAINER() {
30
31
  return 'htCommentsContainer';
@@ -43,7 +44,7 @@ class CommentEditor {
43
44
  * @type {Document}
44
45
  */
45
46
 
46
- constructor(rootDocument, isRtl) {
47
+ constructor(rootDocument, isRtl, themeClassName) {
47
48
  var _this = this;
48
49
  _classPrivateFieldInitSpec(this, _rootDocument, void 0);
49
50
  /**
@@ -70,8 +71,13 @@ class CommentEditor {
70
71
  * @type {EditorResizeObserver}
71
72
  */
72
73
  _classPrivateFieldInitSpec(this, _resizeObserver, new _editorResizeObserver.EditorResizeObserver());
74
+ /**
75
+ * @type {string}
76
+ */
77
+ _classPrivateFieldInitSpec(this, _themeClassName, void 0);
73
78
  _classPrivateFieldSet(_rootDocument, this, rootDocument);
74
79
  _classPrivateFieldSet(_isRtl, this, isRtl);
80
+ _classPrivateFieldSet(_themeClassName, this, themeClassName);
75
81
  _classPrivateFieldSet(_editor, this, this.createEditor());
76
82
  _classPrivateFieldSet(_editorStyle, this, _classPrivateFieldGet(_editor, this).style);
77
83
  _classPrivateFieldGet(_resizeObserver, this).setObservedElement(this.getInputElement());
@@ -223,6 +229,7 @@ class CommentEditor {
223
229
  _classPrivateFieldSet(_container, this, _classPrivateFieldGet(_rootDocument, this).createElement('div'));
224
230
  _classPrivateFieldGet(_container, this).setAttribute('dir', _classPrivateFieldGet(_isRtl, this) ? 'rtl' : 'ltr');
225
231
  (0, _element.addClass)(_classPrivateFieldGet(_container, this), CommentEditor.CLASS_EDITOR_CONTAINER);
232
+ (0, _element.addClass)(_classPrivateFieldGet(_container, this), _classPrivateFieldGet(_themeClassName, this));
226
233
  _classPrivateFieldGet(_rootDocument, this).body.appendChild(_classPrivateFieldGet(_container, this));
227
234
  (0, _element.addClass)(editor, CommentEditor.CLASS_EDITOR);
228
235
  (0, _element.addClass)(textarea, CommentEditor.CLASS_INPUT);
@@ -21,6 +21,7 @@ var _editor = /*#__PURE__*/new WeakMap();
21
21
  var _editorStyle = /*#__PURE__*/new WeakMap();
22
22
  var _hidden = /*#__PURE__*/new WeakMap();
23
23
  var _resizeObserver = /*#__PURE__*/new WeakMap();
24
+ var _themeClassName = /*#__PURE__*/new WeakMap();
24
25
  class CommentEditor {
25
26
  static get CLASS_EDITOR_CONTAINER() {
26
27
  return 'htCommentsContainer';
@@ -39,7 +40,7 @@ class CommentEditor {
39
40
  * @type {Document}
40
41
  */
41
42
 
42
- constructor(rootDocument, isRtl) {
43
+ constructor(rootDocument, isRtl, themeClassName) {
43
44
  var _this = this;
44
45
  _classPrivateFieldInitSpec(this, _rootDocument, void 0);
45
46
  /**
@@ -66,8 +67,13 @@ class CommentEditor {
66
67
  * @type {EditorResizeObserver}
67
68
  */
68
69
  _classPrivateFieldInitSpec(this, _resizeObserver, new EditorResizeObserver());
70
+ /**
71
+ * @type {string}
72
+ */
73
+ _classPrivateFieldInitSpec(this, _themeClassName, void 0);
69
74
  _classPrivateFieldSet(_rootDocument, this, rootDocument);
70
75
  _classPrivateFieldSet(_isRtl, this, isRtl);
76
+ _classPrivateFieldSet(_themeClassName, this, themeClassName);
71
77
  _classPrivateFieldSet(_editor, this, this.createEditor());
72
78
  _classPrivateFieldSet(_editorStyle, this, _classPrivateFieldGet(_editor, this).style);
73
79
  _classPrivateFieldGet(_resizeObserver, this).setObservedElement(this.getInputElement());
@@ -219,6 +225,7 @@ class CommentEditor {
219
225
  _classPrivateFieldSet(_container, this, _classPrivateFieldGet(_rootDocument, this).createElement('div'));
220
226
  _classPrivateFieldGet(_container, this).setAttribute('dir', _classPrivateFieldGet(_isRtl, this) ? 'rtl' : 'ltr');
221
227
  addClass(_classPrivateFieldGet(_container, this), CommentEditor.CLASS_EDITOR_CONTAINER);
228
+ addClass(_classPrivateFieldGet(_container, this), _classPrivateFieldGet(_themeClassName, this));
222
229
  _classPrivateFieldGet(_rootDocument, this).body.appendChild(_classPrivateFieldGet(_container, this));
223
230
  addClass(editor, CommentEditor.CLASS_EDITOR);
224
231
  addClass(textarea, CommentEditor.CLASS_INPUT);
@@ -218,7 +218,7 @@ class Comments extends _base.BasePlugin {
218
218
  return;
219
219
  }
220
220
  if (!_classPrivateFieldGet(_editor, this)) {
221
- _classPrivateFieldSet(_editor, this, new _commentEditor.default(this.hot.rootDocument, this.hot.isRtl()));
221
+ _classPrivateFieldSet(_editor, this, new _commentEditor.default(this.hot.rootDocument, this.hot.isRtl(), this.hot.getSettings().themeName));
222
222
  _classPrivateFieldGet(_editor, this).addLocalHook('resize', function () {
223
223
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
224
224
  args[_key] = arguments[_key];
@@ -575,7 +575,7 @@ class Comments extends _base.BasePlugin {
575
575
  } else {
576
576
  _classPrivateFieldGet(_editor, this).resetSize();
577
577
  }
578
- const lastColWidth = isBeforeRenderedColumns ? 0 : wtTable.getColumnWidth(renderableColumn);
578
+ const lastColWidth = isBeforeRenderedColumns ? 0 : wtTable.getStretchedColumnWidth(renderableColumn);
579
579
  const lastRowHeight = targetingPreviousRow && !isBeforeRenderedRows ? (0, _element.outerHeight)(TD) : 0;
580
580
  const {
581
581
  left,
@@ -214,7 +214,7 @@ export class Comments extends BasePlugin {
214
214
  return;
215
215
  }
216
216
  if (!_classPrivateFieldGet(_editor, this)) {
217
- _classPrivateFieldSet(_editor, this, new CommentEditor(this.hot.rootDocument, this.hot.isRtl()));
217
+ _classPrivateFieldSet(_editor, this, new CommentEditor(this.hot.rootDocument, this.hot.isRtl(), this.hot.getSettings().themeName));
218
218
  _classPrivateFieldGet(_editor, this).addLocalHook('resize', function () {
219
219
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
220
220
  args[_key] = arguments[_key];
@@ -571,7 +571,7 @@ export class Comments extends BasePlugin {
571
571
  } else {
572
572
  _classPrivateFieldGet(_editor, this).resetSize();
573
573
  }
574
- const lastColWidth = isBeforeRenderedColumns ? 0 : wtTable.getColumnWidth(renderableColumn);
574
+ const lastColWidth = isBeforeRenderedColumns ? 0 : wtTable.getStretchedColumnWidth(renderableColumn);
575
575
  const lastRowHeight = targetingPreviousRow && !isBeforeRenderedRows ? outerHeight(TD) : 0;
576
576
  const {
577
577
  left,
@@ -579,10 +579,8 @@ class Menu {
579
579
  const currentRowHeight = itemCell ? (0, _element.outerHeight)(this.hotMenu.getCell(index, 0)) : 0;
580
580
  return accumulator + (value.name === _predefinedItems.SEPARATOR ? 1 : currentRowHeight);
581
581
  }, 0);
582
-
583
- // Additional 3px to menu's size because of additional border around its `table.htCore`.
584
- holderStyle.width = `${currentHiderWidth + 3}px`;
585
- holderStyle.height = `${realHeight + 3}px`;
582
+ holderStyle.width = `${currentHiderWidth}px`;
583
+ holderStyle.height = `${realHeight}px`;
586
584
  hiderStyle.height = holderStyle.height;
587
585
  }
588
586
 
@@ -612,8 +610,10 @@ class Menu {
612
610
  container = doc.querySelector(`.${this.options.className}.${className}`);
613
611
  }
614
612
  if (!container) {
613
+ const themeClassName = this.hot.getSettings().themeName;
615
614
  container = doc.createElement('div');
616
615
  (0, _element.addClass)(container, `htMenu ${this.options.className}`);
616
+ (0, _element.addClass)(container, themeClassName);
617
617
  if (className) {
618
618
  (0, _element.addClass)(container, className);
619
619
  }
@@ -575,10 +575,8 @@ export class Menu {
575
575
  const currentRowHeight = itemCell ? outerHeight(this.hotMenu.getCell(index, 0)) : 0;
576
576
  return accumulator + (value.name === SEPARATOR ? 1 : currentRowHeight);
577
577
  }, 0);
578
-
579
- // Additional 3px to menu's size because of additional border around its `table.htCore`.
580
- holderStyle.width = `${currentHiderWidth + 3}px`;
581
- holderStyle.height = `${realHeight + 3}px`;
578
+ holderStyle.width = `${currentHiderWidth}px`;
579
+ holderStyle.height = `${realHeight}px`;
582
580
  hiderStyle.height = holderStyle.height;
583
581
  }
584
582
 
@@ -608,8 +606,10 @@ export class Menu {
608
606
  container = doc.querySelector(`.${this.options.className}.${className}`);
609
607
  }
610
608
  if (!container) {
609
+ const themeClassName = this.hot.getSettings().themeName;
611
610
  container = doc.createElement('div');
612
611
  addClass(container, `htMenu ${this.options.className}`);
612
+ addClass(container, themeClassName);
613
613
  if (className) {
614
614
  addClass(container, className);
615
615
  }
@@ -29,7 +29,6 @@ import { NestedHeaders } from './nestedHeaders';
29
29
  import { NestedRows } from './nestedRows';
30
30
  import { PersistentState } from './persistentState';
31
31
  import { Search } from './search';
32
- import { StretchColumns } from './stretchColumns';
33
32
  import { TouchScroll } from './touchScroll';
34
33
  import { TrimRows } from './trimRows';
35
34
  import { UndoRedo } from './undoRedo';
@@ -66,7 +65,6 @@ export interface Plugins {
66
65
  nestedRows: NestedRows;
67
66
  persistentState: PersistentState;
68
67
  search: Search;
69
- stretchColumns: StretchColumns;
70
68
  touchScroll: TouchScroll;
71
69
  trimRows: TrimRows;
72
70
  undoRedo: UndoRedo;
@@ -107,7 +105,6 @@ export {
107
105
  NestedRows,
108
106
  PersistentState,
109
107
  Search,
110
- StretchColumns,
111
108
  TouchScroll,
112
109
  TrimRows,
113
110
  UndoRedo
package/plugins/index.js CHANGED
@@ -64,8 +64,6 @@ var _persistentState = require("./persistentState");
64
64
  exports.PersistentState = _persistentState.PersistentState;
65
65
  var _search = require("./search");
66
66
  exports.Search = _search.Search;
67
- var _stretchColumns = require("./stretchColumns");
68
- exports.StretchColumns = _stretchColumns.StretchColumns;
69
67
  var _touchScroll = require("./touchScroll");
70
68
  exports.TouchScroll = _touchScroll.TouchScroll;
71
69
  var _trimRows = require("./trimRows");
@@ -110,7 +108,6 @@ function registerAllPlugins() {
110
108
  (0, _registry.registerPlugin)(_nestedRows.NestedRows);
111
109
  (0, _registry.registerPlugin)(_persistentState.PersistentState);
112
110
  (0, _registry.registerPlugin)(_search.Search);
113
- (0, _registry.registerPlugin)(_stretchColumns.StretchColumns);
114
111
  (0, _registry.registerPlugin)(_touchScroll.TouchScroll);
115
112
  (0, _registry.registerPlugin)(_trimRows.TrimRows);
116
113
  (0, _registry.registerPlugin)(_undoRedo.UndoRedo);
package/plugins/index.mjs CHANGED
@@ -29,7 +29,6 @@ import { NestedHeaders } from "./nestedHeaders/index.mjs";
29
29
  import { NestedRows } from "./nestedRows/index.mjs";
30
30
  import { PersistentState } from "./persistentState/index.mjs";
31
31
  import { Search } from "./search/index.mjs";
32
- import { StretchColumns } from "./stretchColumns/index.mjs";
33
32
  import { TouchScroll } from "./touchScroll/index.mjs";
34
33
  import { TrimRows } from "./trimRows/index.mjs";
35
34
  import { UndoRedo } from "./undoRedo/index.mjs";
@@ -68,10 +67,9 @@ export function registerAllPlugins() {
68
67
  registerPlugin(NestedRows);
69
68
  registerPlugin(PersistentState);
70
69
  registerPlugin(Search);
71
- registerPlugin(StretchColumns);
72
70
  registerPlugin(TouchScroll);
73
71
  registerPlugin(TrimRows);
74
72
  registerPlugin(UndoRedo);
75
73
  }
76
- export { AutoColumnSize, Autofill, AutoRowSize, BasePlugin, BindRowsWithHeaders, CollapsibleColumns, ColumnSorting, ColumnSummary, Comments, ContextMenu, CopyPaste, CustomBorders, DragToScroll, DropdownMenu, ExportFile, Filters, Formulas, HiddenColumns, HiddenRows, ManualColumnFreeze, ManualColumnMove, ManualColumnResize, ManualRowMove, ManualRowResize, MergeCells, MultiColumnSorting, MultipleSelectionHandles, NestedHeaders, NestedRows, PersistentState, Search, StretchColumns, TouchScroll, TrimRows, UndoRedo };
74
+ export { AutoColumnSize, Autofill, AutoRowSize, BasePlugin, BindRowsWithHeaders, CollapsibleColumns, ColumnSorting, ColumnSummary, Comments, ContextMenu, CopyPaste, CustomBorders, DragToScroll, DropdownMenu, ExportFile, Filters, Formulas, HiddenColumns, HiddenRows, ManualColumnFreeze, ManualColumnMove, ManualColumnResize, ManualRowMove, ManualRowResize, MergeCells, MultiColumnSorting, MultipleSelectionHandles, NestedHeaders, NestedRows, PersistentState, Search, TouchScroll, TrimRows, UndoRedo };
77
75
  export { getPlugin, getPluginsNames, registerPlugin } from "./registry.mjs";