handsontable 17.1.0-rc8 → 17.1.0
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.
- package/CHANGELOG.md +6 -1
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core.js +13 -5
- package/core.mjs +13 -5
- package/dist/handsontable.full.js +284 -127
- package/dist/handsontable.full.min.js +108 -108
- package/dist/handsontable.js +69 -28
- package/dist/handsontable.min.js +30 -30
- package/dist/languages/all.min.js +1 -1
- package/dist/themes/classic.js +2 -2
- package/dist/themes/classic.min.js +2 -2
- package/dist/themes/horizon.js +2 -2
- package/dist/themes/horizon.min.js +2 -2
- package/dist/themes/main.js +2 -2
- package/dist/themes/main.min.js +2 -2
- package/dist/themes/static/variables/colors/ant.js +2 -2
- package/dist/themes/static/variables/colors/ant.min.js +2 -2
- package/dist/themes/static/variables/colors/classic.js +2 -2
- package/dist/themes/static/variables/colors/classic.min.js +2 -2
- package/dist/themes/static/variables/colors/horizon.js +2 -2
- package/dist/themes/static/variables/colors/horizon.min.js +2 -2
- package/dist/themes/static/variables/colors/main.js +2 -2
- package/dist/themes/static/variables/colors/main.min.js +2 -2
- package/dist/themes/static/variables/colors/material.js +2 -2
- package/dist/themes/static/variables/colors/material.min.js +2 -2
- package/dist/themes/static/variables/colors/shadcn.js +2 -2
- package/dist/themes/static/variables/colors/shadcn.min.js +2 -2
- package/dist/themes/static/variables/density.js +2 -2
- package/dist/themes/static/variables/density.min.js +2 -2
- package/dist/themes/static/variables/helpers/iconsMap.js +2 -2
- package/dist/themes/static/variables/helpers/iconsMap.min.js +2 -2
- package/dist/themes/static/variables/icons/horizon.js +2 -2
- package/dist/themes/static/variables/icons/horizon.min.js +2 -2
- package/dist/themes/static/variables/icons/main.js +2 -2
- package/dist/themes/static/variables/icons/main.min.js +2 -2
- package/dist/themes/static/variables/sizing.js +2 -2
- package/dist/themes/static/variables/sizing.min.js +2 -2
- package/dist/themes/static/variables/tokens/classic.js +2 -2
- package/dist/themes/static/variables/tokens/classic.min.js +2 -2
- package/dist/themes/static/variables/tokens/horizon.js +2 -2
- package/dist/themes/static/variables/tokens/horizon.min.js +2 -2
- package/dist/themes/static/variables/tokens/main.js +2 -2
- package/dist/themes/static/variables/tokens/main.min.js +2 -2
- package/helpers/dom/element.js +2 -4
- package/helpers/dom/element.mjs +2 -4
- package/helpers/mixed.js +1 -1
- package/helpers/mixed.mjs +1 -1
- package/package.json +1 -1
- package/plugins/dataProvider/query/pagination.js +6 -3
- package/plugins/dataProvider/query/pagination.mjs +17 -7
- package/plugins/dialog/dialog.js +2 -1
- package/plugins/dialog/dialog.mjs +2 -1
- package/plugins/emptyDataState/emptyDataState.js +1 -1
- package/plugins/emptyDataState/emptyDataState.mjs +1 -1
- package/plugins/pagination/pagination.d.ts +1 -0
- package/plugins/pagination/pagination.js +7 -0
- package/plugins/pagination/pagination.mjs +7 -0
- package/selection/mouseEventHandler.js +12 -2
- package/selection/mouseEventHandler.mjs +12 -2
- package/styles/handsontable.css +2 -2
- package/styles/handsontable.min.css +2 -2
- package/styles/handsontableStyles.js +1 -1
- package/styles/handsontableStyles.mjs +1 -1
- package/styles/ht-icons-horizon.min.css +2 -2
- package/styles/ht-icons-main.min.css +2 -2
- package/styles/ht-theme-classic-no-icons.min.css +2 -2
- package/styles/ht-theme-classic.min.css +2 -2
- package/styles/ht-theme-horizon-no-icons.min.css +2 -2
- package/styles/ht-theme-horizon.min.css +2 -2
- package/styles/ht-theme-main-no-icons.min.css +2 -2
- package/styles/ht-theme-main.min.css +2 -2
- package/themes/engine/manager.js +50 -2
- package/themes/engine/manager.mjs +50 -2
package/CHANGELOG.md
CHANGED
|
@@ -9,7 +9,7 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
9
9
|
|
|
10
10
|
<!-- UNVERSIONED -->
|
|
11
11
|
|
|
12
|
-
## [17.1.0
|
|
12
|
+
## [17.1.0] - 2026-05-19
|
|
13
13
|
|
|
14
14
|
### Added
|
|
15
15
|
- Added a hit area for dropdown menu and collapsible buttons [#12070](https://github.com/handsontable/handsontable/pull/12070)
|
|
@@ -78,6 +78,11 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
78
78
|
- Fixed one-pixel horizontal alignment for the left pagination caret [#2791](https://github.com/handsontable/handsontable/pull/2791)
|
|
79
79
|
- Fixed setDataAtRowProp interrupting edits in progress [#4305](https://github.com/handsontable/handsontable/issues/4305)
|
|
80
80
|
- React: Fixed the React wrapper skipping settings updates when `dataSchema` or `columns` contains non-plain objects such as `Date`, `Set`, or `Map`. [#12207](https://github.com/handsontable/handsontable/pull/12207)
|
|
81
|
+
- Fixed the loading overlay resetting the grid scroll position to the top when no cell was selected before showing the overlay. [#12514](https://github.com/handsontable/handsontable/issues/12514)
|
|
82
|
+
- Fixed a memory leak caused by ThemeManager not unsubscribing from the shared theme object on destroy. [#12570](https://github.com/handsontable/handsontable/issues/12570)
|
|
83
|
+
- Fixed viewport scroll jump when Ctrl+clicking a selected cell to deselect it. [#12574](https://github.com/handsontable/handsontable/issues/12574)
|
|
84
|
+
- Fixed a memory leak where IntersectionObserver instances were not properly disconnected when `document.body` had zero height. [#12578](https://github.com/handsontable/handsontable/issues/12578)
|
|
85
|
+
- Fixed the browser page scrolling to the grid when `dataProvider` loads rows for the first time into an empty grid with `emptyDataState` enabled. [#12591](https://github.com/handsontable/handsontable/issues/12591)
|
|
81
86
|
|
|
82
87
|
### Security
|
|
83
88
|
- Patched critical and high dependency vulnerabilities across the monorepo and aligned Angular wrapper tooling for compatibility. [#12237](https://github.com/handsontable/handsontable/issues/12237)
|
package/base.js
CHANGED
|
@@ -60,8 +60,8 @@ Handsontable.hooks = _hooks.Hooks.getSingleton();
|
|
|
60
60
|
Handsontable.CellCoords = _src.CellCoords;
|
|
61
61
|
Handsontable.CellRange = _src.CellRange;
|
|
62
62
|
Handsontable.packageName = 'handsontable';
|
|
63
|
-
Handsontable.buildDate = "
|
|
64
|
-
Handsontable.version = "17.1.0
|
|
63
|
+
Handsontable.buildDate = "19/05/2026 14:51:41";
|
|
64
|
+
Handsontable.version = "17.1.0";
|
|
65
65
|
Handsontable.languages = {
|
|
66
66
|
dictionaryKeys: _registry.dictionaryKeys,
|
|
67
67
|
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 = "
|
|
39
|
-
Handsontable.version = "17.1.0
|
|
38
|
+
Handsontable.buildDate = "19/05/2026 14:51:41";
|
|
39
|
+
Handsontable.version = "17.1.0";
|
|
40
40
|
Handsontable.languages = {
|
|
41
41
|
dictionaryKeys,
|
|
42
42
|
getLanguageDictionary,
|
package/core.js
CHANGED
|
@@ -225,6 +225,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
225
225
|
this.rootGridElement.appendChild(this.rootElement);
|
|
226
226
|
this.rootWrapperElement.appendChild(this.rootGridElement);
|
|
227
227
|
this.rootContainer.appendChild(this.rootWrapperElement);
|
|
228
|
+
this.rootWrapperElement.__hotInstance = this;
|
|
228
229
|
(0, _element.addClass)(this.rootPortalElement, 'ht-portal');
|
|
229
230
|
this.rootDocument.body.appendChild(this.rootPortalElement);
|
|
230
231
|
}
|
|
@@ -452,7 +453,9 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
452
453
|
const selectionSource = selection.getSelectionSource();
|
|
453
454
|
const ignoreScrollSources = [
|
|
454
455
|
'loadData',
|
|
455
|
-
'updateData'
|
|
456
|
+
'updateData',
|
|
457
|
+
'deselect',
|
|
458
|
+
'shift'
|
|
456
459
|
];
|
|
457
460
|
if (isLastSelectionLayer && !ignoreScrollSources.includes(selectionSource) && (!preventScrolling.isTouched() || preventScrolling.isTouched() && !preventScrolling.value)) {
|
|
458
461
|
viewportScroller.scrollTo(cellCoords);
|
|
@@ -483,14 +486,16 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
483
486
|
'shift',
|
|
484
487
|
'refresh',
|
|
485
488
|
'loadData',
|
|
486
|
-
'updateData'
|
|
489
|
+
'updateData',
|
|
490
|
+
'deselect'
|
|
487
491
|
].includes(selectionSource)) {
|
|
488
492
|
editorManager.closeEditor(null);
|
|
489
493
|
}
|
|
490
494
|
if (![
|
|
491
495
|
'refresh',
|
|
492
496
|
'loadData',
|
|
493
|
-
'updateData'
|
|
497
|
+
'updateData',
|
|
498
|
+
'deselect'
|
|
494
499
|
].includes(selectionSource)) {
|
|
495
500
|
instance.view.render();
|
|
496
501
|
editorManager.prepareEditor();
|
|
@@ -514,7 +519,10 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
514
519
|
const { from, to } = cellRanges[selectionLayerLevel];
|
|
515
520
|
this.runHooks('afterSelectionEnd', from.row, from.col, to.row, to.col, selectionLayerLevel);
|
|
516
521
|
this.runHooks('afterSelectionEndByProp', from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), selectionLayerLevel);
|
|
517
|
-
if (
|
|
522
|
+
if ([
|
|
523
|
+
'refresh',
|
|
524
|
+
'deselect'
|
|
525
|
+
].includes(selection.getSelectionSource())) {
|
|
518
526
|
instance.view.render();
|
|
519
527
|
editorManager.prepareEditor();
|
|
520
528
|
}
|
|
@@ -1080,7 +1088,7 @@ function Core(rootContainer, userSettings, rootInstanceSymbol = false) {
|
|
|
1080
1088
|
focusGridManager.init();
|
|
1081
1089
|
if ((0, _rootInstance.isRootInstance)(this)) {
|
|
1082
1090
|
(0, _a11yAnnouncer.install)(instance.rootPortalElement);
|
|
1083
|
-
(0, _mixed._injectProductInfo)(mergedUserSettings.licenseKey, this.rootWrapperElement, "
|
|
1091
|
+
(0, _mixed._injectProductInfo)(mergedUserSettings.licenseKey, this.rootWrapperElement, "19/05/2026");
|
|
1084
1092
|
}
|
|
1085
1093
|
instance.runHooks('init');
|
|
1086
1094
|
this.render();
|
package/core.mjs
CHANGED
|
@@ -210,6 +210,7 @@ const deprecationWarns = new Set();
|
|
|
210
210
|
this.rootGridElement.appendChild(this.rootElement);
|
|
211
211
|
this.rootWrapperElement.appendChild(this.rootGridElement);
|
|
212
212
|
this.rootContainer.appendChild(this.rootWrapperElement);
|
|
213
|
+
this.rootWrapperElement.__hotInstance = this;
|
|
213
214
|
addClass(this.rootPortalElement, 'ht-portal');
|
|
214
215
|
this.rootDocument.body.appendChild(this.rootPortalElement);
|
|
215
216
|
}
|
|
@@ -437,7 +438,9 @@ const deprecationWarns = new Set();
|
|
|
437
438
|
const selectionSource = selection.getSelectionSource();
|
|
438
439
|
const ignoreScrollSources = [
|
|
439
440
|
'loadData',
|
|
440
|
-
'updateData'
|
|
441
|
+
'updateData',
|
|
442
|
+
'deselect',
|
|
443
|
+
'shift'
|
|
441
444
|
];
|
|
442
445
|
if (isLastSelectionLayer && !ignoreScrollSources.includes(selectionSource) && (!preventScrolling.isTouched() || preventScrolling.isTouched() && !preventScrolling.value)) {
|
|
443
446
|
viewportScroller.scrollTo(cellCoords);
|
|
@@ -468,14 +471,16 @@ const deprecationWarns = new Set();
|
|
|
468
471
|
'shift',
|
|
469
472
|
'refresh',
|
|
470
473
|
'loadData',
|
|
471
|
-
'updateData'
|
|
474
|
+
'updateData',
|
|
475
|
+
'deselect'
|
|
472
476
|
].includes(selectionSource)) {
|
|
473
477
|
editorManager.closeEditor(null);
|
|
474
478
|
}
|
|
475
479
|
if (![
|
|
476
480
|
'refresh',
|
|
477
481
|
'loadData',
|
|
478
|
-
'updateData'
|
|
482
|
+
'updateData',
|
|
483
|
+
'deselect'
|
|
479
484
|
].includes(selectionSource)) {
|
|
480
485
|
instance.view.render();
|
|
481
486
|
editorManager.prepareEditor();
|
|
@@ -499,7 +504,10 @@ const deprecationWarns = new Set();
|
|
|
499
504
|
const { from, to } = cellRanges[selectionLayerLevel];
|
|
500
505
|
this.runHooks('afterSelectionEnd', from.row, from.col, to.row, to.col, selectionLayerLevel);
|
|
501
506
|
this.runHooks('afterSelectionEndByProp', from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), selectionLayerLevel);
|
|
502
|
-
if (
|
|
507
|
+
if ([
|
|
508
|
+
'refresh',
|
|
509
|
+
'deselect'
|
|
510
|
+
].includes(selection.getSelectionSource())) {
|
|
503
511
|
instance.view.render();
|
|
504
512
|
editorManager.prepareEditor();
|
|
505
513
|
}
|
|
@@ -1065,7 +1073,7 @@ const deprecationWarns = new Set();
|
|
|
1065
1073
|
focusGridManager.init();
|
|
1066
1074
|
if (isRootInstance(this)) {
|
|
1067
1075
|
installAccessibilityAnnouncer(instance.rootPortalElement);
|
|
1068
|
-
_injectProductInfo(mergedUserSettings.licenseKey, this.rootWrapperElement, "
|
|
1076
|
+
_injectProductInfo(mergedUserSettings.licenseKey, this.rootWrapperElement, "19/05/2026");
|
|
1069
1077
|
}
|
|
1070
1078
|
instance.runHooks('init');
|
|
1071
1079
|
this.render();
|