handsontable 16.1.1 → 16.2.0-next-90d1117-20251117
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/3rdparty/walkontable/src/overlays.js +1 -1
- package/3rdparty/walkontable/src/overlays.mjs +1 -1
- package/3rdparty/walkontable/src/selection/border/border.js +19 -3
- package/3rdparty/walkontable/src/selection/border/border.mjs +19 -3
- package/CHANGELOG.md +39 -0
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core/coordsMapper/index.js +11 -0
- package/core/coordsMapper/index.mjs +1 -0
- package/core/hooks/bucket.js +7 -1
- package/core/hooks/bucket.mjs +7 -1
- package/core/hooks/constants.js +54 -0
- package/core/hooks/constants.mjs +54 -0
- package/core/hooks/index.d.ts +6 -0
- package/core/index.js +10 -4
- package/core/index.mjs +2 -1
- package/core.d.ts +3 -2
- package/core.js +67 -26
- package/core.mjs +56 -15
- package/dataMap/metaManager/metaSchema.js +197 -20
- package/dataMap/metaManager/metaSchema.mjs +197 -20
- package/dist/handsontable.css +175 -3
- package/dist/handsontable.full.css +175 -3
- package/dist/handsontable.full.js +10864 -8426
- package/dist/handsontable.full.min.css +5 -4
- package/dist/handsontable.full.min.js +194 -193
- package/dist/handsontable.js +7126 -4827
- package/dist/handsontable.min.css +4 -4
- package/dist/handsontable.min.js +43 -42
- package/dist/languages/all.js +168 -21
- package/dist/languages/all.min.js +1 -1
- package/dist/languages/ar-AR.js +8 -1
- package/dist/languages/ar-AR.min.js +1 -1
- package/dist/languages/cs-CZ.js +8 -1
- package/dist/languages/cs-CZ.min.js +1 -1
- package/dist/languages/de-CH.js +8 -1
- package/dist/languages/de-CH.min.js +1 -1
- package/dist/languages/de-DE.js +8 -1
- package/dist/languages/de-DE.min.js +1 -1
- package/dist/languages/en-US.js +8 -1
- package/dist/languages/en-US.min.js +1 -1
- package/dist/languages/es-MX.js +8 -1
- package/dist/languages/es-MX.min.js +1 -1
- package/dist/languages/fa-IR.js +8 -1
- package/dist/languages/fa-IR.min.js +1 -1
- package/dist/languages/fr-FR.js +8 -1
- package/dist/languages/fr-FR.min.js +1 -1
- package/dist/languages/hr-HR.js +8 -1
- package/dist/languages/hr-HR.min.js +1 -1
- package/dist/languages/it-IT.js +8 -1
- package/dist/languages/it-IT.min.js +1 -1
- package/dist/languages/ja-JP.js +8 -1
- package/dist/languages/ja-JP.min.js +1 -1
- package/dist/languages/ko-KR.js +8 -1
- package/dist/languages/ko-KR.min.js +1 -1
- package/dist/languages/lv-LV.js +8 -1
- package/dist/languages/lv-LV.min.js +1 -1
- package/dist/languages/nb-NO.js +8 -1
- package/dist/languages/nb-NO.min.js +1 -1
- package/dist/languages/nl-NL.js +8 -1
- package/dist/languages/nl-NL.min.js +1 -1
- package/dist/languages/pl-PL.js +8 -1
- package/dist/languages/pl-PL.min.js +1 -1
- package/dist/languages/pt-BR.js +8 -1
- package/dist/languages/pt-BR.min.js +1 -1
- package/dist/languages/ru-RU.js +8 -1
- package/dist/languages/ru-RU.min.js +1 -1
- package/dist/languages/sr-SP.js +8 -1
- package/dist/languages/sr-SP.min.js +1 -1
- package/dist/languages/zh-CN.js +8 -1
- package/dist/languages/zh-CN.min.js +1 -1
- package/dist/languages/zh-TW.js +8 -1
- package/dist/languages/zh-TW.min.js +1 -1
- package/editors/autocompleteEditor/autocompleteEditor.js +21 -1
- package/editors/autocompleteEditor/autocompleteEditor.mjs +22 -2
- package/focusManager/constants.js +25 -0
- package/focusManager/constants.mjs +22 -0
- package/focusManager/eventListener.js +107 -0
- package/focusManager/eventListener.mjs +103 -0
- package/{focusManager.d.ts → focusManager/grid.d.ts} +1 -1
- package/{focusManager.js → focusManager/grid.js} +48 -17
- package/{focusManager.mjs → focusManager/grid.mjs} +47 -16
- package/focusManager/index.d.ts +2 -0
- package/focusManager/index.js +20 -0
- package/focusManager/index.mjs +20 -0
- package/focusManager/scope.js +133 -0
- package/focusManager/scope.mjs +129 -0
- package/focusManager/scopeManager.d.ts +19 -0
- package/focusManager/scopeManager.js +268 -0
- package/focusManager/scopeManager.mjs +263 -0
- package/focusManager/scopes/grid.js +120 -0
- package/focusManager/scopes/grid.mjs +116 -0
- package/focusManager/scopes/index.js +13 -0
- package/focusManager/scopes/index.mjs +9 -0
- package/{utils → focusManager/utils}/focusDetector.js +21 -31
- package/{utils → focusManager/utils}/focusDetector.mjs +21 -31
- package/focusManager/utils/utils.js +95 -0
- package/focusManager/utils/utils.mjs +89 -0
- package/helpers/dom/element.js +1 -1
- package/helpers/dom/element.mjs +2 -2
- package/helpers/dom/event.js +1 -1
- package/helpers/dom/event.mjs +1 -1
- package/helpers/mixed.js +2 -65
- package/helpers/mixed.mjs +2 -63
- package/i18n/constants.js +10 -1
- package/i18n/constants.mjs +10 -1
- package/i18n/languages/ar-AR.js +8 -1
- package/i18n/languages/ar-AR.mjs +8 -1
- package/i18n/languages/cs-CZ.js +8 -1
- package/i18n/languages/cs-CZ.mjs +8 -1
- package/i18n/languages/de-CH.js +8 -1
- package/i18n/languages/de-CH.mjs +8 -1
- package/i18n/languages/de-DE.js +8 -1
- package/i18n/languages/de-DE.mjs +8 -1
- package/i18n/languages/en-US.js +8 -1
- package/i18n/languages/en-US.mjs +8 -1
- package/i18n/languages/es-MX.js +8 -1
- package/i18n/languages/es-MX.mjs +8 -1
- package/i18n/languages/fa-IR.js +8 -1
- package/i18n/languages/fa-IR.mjs +8 -1
- package/i18n/languages/fr-FR.js +8 -1
- package/i18n/languages/fr-FR.mjs +8 -1
- package/i18n/languages/hr-HR.js +8 -1
- package/i18n/languages/hr-HR.mjs +8 -1
- package/i18n/languages/it-IT.js +8 -1
- package/i18n/languages/it-IT.mjs +8 -1
- package/i18n/languages/ja-JP.js +8 -1
- package/i18n/languages/ja-JP.mjs +8 -1
- package/i18n/languages/ko-KR.js +8 -1
- package/i18n/languages/ko-KR.mjs +8 -1
- package/i18n/languages/lv-LV.js +8 -1
- package/i18n/languages/lv-LV.mjs +8 -1
- package/i18n/languages/nb-NO.js +8 -1
- package/i18n/languages/nb-NO.mjs +8 -1
- package/i18n/languages/nl-NL.js +8 -1
- package/i18n/languages/nl-NL.mjs +8 -1
- package/i18n/languages/pl-PL.js +8 -1
- package/i18n/languages/pl-PL.mjs +8 -1
- package/i18n/languages/pt-BR.js +8 -1
- package/i18n/languages/pt-BR.mjs +8 -1
- package/i18n/languages/ru-RU.js +8 -1
- package/i18n/languages/ru-RU.mjs +8 -1
- package/i18n/languages/sr-SP.js +8 -1
- package/i18n/languages/sr-SP.mjs +8 -1
- package/i18n/languages/zh-CN.js +8 -1
- package/i18n/languages/zh-CN.mjs +8 -1
- package/i18n/languages/zh-TW.js +8 -1
- package/i18n/languages/zh-TW.mjs +8 -1
- package/index.d.ts +9 -0
- package/languages/all.js +168 -21
- package/languages/ar-AR.js +8 -1
- package/languages/ar-AR.mjs +8 -1
- package/languages/cs-CZ.js +8 -1
- package/languages/cs-CZ.mjs +8 -1
- package/languages/de-CH.js +8 -1
- package/languages/de-CH.mjs +8 -1
- package/languages/de-DE.js +8 -1
- package/languages/de-DE.mjs +8 -1
- package/languages/en-US.js +8 -1
- package/languages/en-US.mjs +8 -1
- package/languages/es-MX.js +8 -1
- package/languages/es-MX.mjs +8 -1
- package/languages/fa-IR.js +8 -1
- package/languages/fa-IR.mjs +8 -1
- package/languages/fr-FR.js +8 -1
- package/languages/fr-FR.mjs +8 -1
- package/languages/hr-HR.js +8 -1
- package/languages/hr-HR.mjs +8 -1
- package/languages/index.js +168 -21
- package/languages/it-IT.js +8 -1
- package/languages/it-IT.mjs +8 -1
- package/languages/ja-JP.js +8 -1
- package/languages/ja-JP.mjs +8 -1
- package/languages/ko-KR.js +8 -1
- package/languages/ko-KR.mjs +8 -1
- package/languages/lv-LV.js +8 -1
- package/languages/lv-LV.mjs +8 -1
- package/languages/nb-NO.js +8 -1
- package/languages/nb-NO.mjs +8 -1
- package/languages/nl-NL.js +8 -1
- package/languages/nl-NL.mjs +8 -1
- package/languages/pl-PL.js +8 -1
- package/languages/pl-PL.mjs +8 -1
- package/languages/pt-BR.js +8 -1
- package/languages/pt-BR.mjs +8 -1
- package/languages/ru-RU.js +8 -1
- package/languages/ru-RU.mjs +8 -1
- package/languages/sr-SP.js +8 -1
- package/languages/sr-SP.mjs +8 -1
- package/languages/zh-CN.js +8 -1
- package/languages/zh-CN.mjs +8 -1
- package/languages/zh-TW.js +8 -1
- package/languages/zh-TW.mjs +8 -1
- package/package.json +25 -7
- package/plugins/autoRowSize/autoRowSize.js +8 -1
- package/plugins/autoRowSize/autoRowSize.mjs +8 -1
- package/plugins/base/base.js +36 -10
- package/plugins/base/base.mjs +36 -10
- package/plugins/columnSummary/endpoints.js +13 -3
- package/plugins/columnSummary/endpoints.mjs +13 -3
- package/plugins/customBorders/customBorders.d.ts +1 -0
- package/plugins/customBorders/customBorders.js +32 -2
- package/plugins/customBorders/customBorders.mjs +32 -2
- package/plugins/dialog/constants.js +7 -0
- package/plugins/dialog/constants.mjs +4 -0
- package/plugins/dialog/dialog.d.ts +22 -2
- package/plugins/dialog/dialog.js +197 -81
- package/plugins/dialog/dialog.mjs +196 -81
- package/plugins/dialog/templates/base.js +60 -0
- package/plugins/dialog/templates/base.mjs +56 -0
- package/plugins/dialog/templates/confirm.js +106 -0
- package/plugins/dialog/templates/confirm.mjs +102 -0
- package/plugins/dialog/templates/index.js +6 -0
- package/plugins/dialog/templates/index.mjs +4 -0
- package/plugins/dialog/ui.js +125 -41
- package/plugins/dialog/ui.mjs +119 -35
- package/plugins/emptyDataState/emptyDataState.d.ts +24 -0
- package/plugins/emptyDataState/emptyDataState.js +526 -0
- package/plugins/emptyDataState/emptyDataState.mjs +521 -0
- package/plugins/emptyDataState/index.d.ts +1 -0
- package/plugins/emptyDataState/index.js +7 -0
- package/plugins/emptyDataState/index.mjs +1 -0
- package/plugins/emptyDataState/ui.js +282 -0
- package/plugins/emptyDataState/ui.mjs +278 -0
- package/plugins/filters/component/value.js +16 -1
- package/plugins/filters/component/value.mjs +16 -1
- package/plugins/filters/filters.d.ts +5 -1
- package/plugins/filters/filters.js +22 -1
- package/plugins/filters/filters.mjs +22 -1
- package/plugins/filters/ui/multipleSelect.js +90 -79
- package/plugins/filters/ui/multipleSelect.mjs +90 -79
- package/plugins/index.d.ts +3 -0
- package/plugins/index.js +3 -0
- package/plugins/index.mjs +3 -1
- package/plugins/mergeCells/utils.js +1 -5
- package/plugins/mergeCells/utils.mjs +1 -5
- package/plugins/pagination/pagination.js +37 -175
- package/plugins/pagination/pagination.mjs +37 -175
- package/plugins/pagination/strategies/autoPageSize.js +2 -2
- package/plugins/pagination/strategies/autoPageSize.mjs +2 -2
- package/plugins/pagination/ui.js +6 -10
- package/plugins/pagination/ui.mjs +7 -11
- package/plugins/stretchColumns/calculator.js +3 -1
- package/plugins/stretchColumns/calculator.mjs +3 -1
- package/plugins/undoRedo/undoRedo.js +16 -6
- package/plugins/undoRedo/undoRedo.mjs +16 -5
- package/renderers/checkboxRenderer/checkboxRenderer.js +12 -15
- package/renderers/checkboxRenderer/checkboxRenderer.mjs +12 -15
- package/selection/selection.js +1 -1
- package/selection/selection.mjs +1 -1
- package/settings.d.ts +3 -0
- package/shortcutContexts/commands/index.js +2 -1
- package/shortcutContexts/commands/index.mjs +2 -1
- package/shortcutContexts/commands/tabNavigation.js +51 -0
- package/shortcutContexts/commands/tabNavigation.mjs +48 -0
- package/shortcutContexts/constants.js +16 -1
- package/shortcutContexts/constants.mjs +16 -1
- package/shortcutContexts/editor.js +2 -2
- package/shortcutContexts/editor.mjs +3 -3
- package/shortcutContexts/grid.js +19 -3
- package/shortcutContexts/grid.mjs +20 -4
- package/shortcuts/manager.d.ts +1 -0
- package/shortcuts/manager.js +17 -2
- package/shortcuts/manager.mjs +17 -2
- package/styles/handsontable.css +192 -35
- package/styles/handsontable.min.css +3 -3
- package/styles/ht-icons-horizon.css +233 -0
- package/styles/ht-icons-horizon.min.css +30 -0
- package/styles/ht-icons-main.css +233 -0
- package/styles/ht-icons-main.min.css +30 -0
- package/styles/ht-theme-classic-no-icons.css +399 -0
- package/styles/ht-theme-classic-no-icons.min.css +30 -0
- package/styles/ht-theme-classic.css +308 -556
- package/styles/ht-theme-classic.min.css +3 -3
- package/styles/ht-theme-horizon-no-icons.css +405 -0
- package/styles/ht-theme-horizon-no-icons.min.css +30 -0
- package/styles/ht-theme-horizon.css +312 -556
- package/styles/ht-theme-horizon.min.css +3 -3
- package/styles/ht-theme-main-no-icons.css +396 -0
- package/styles/ht-theme-main-no-icons.min.css +30 -0
- package/styles/ht-theme-main.css +303 -556
- package/styles/ht-theme-main.min.css +3 -3
- package/tableView.js +23 -5
- package/tableView.mjs +23 -5
- package/utils/dataStructures/uniqueMap.js +10 -0
- package/utils/dataStructures/uniqueMap.mjs +10 -0
- package/utils/ghostTable.js +0 -3
- package/utils/ghostTable.mjs +0 -3
- package/utils/stylesHandler.js +19 -4
- package/utils/stylesHandler.mjs +19 -4
- package/core/focusCatcher/index.js +0 -131
- package/core/focusCatcher/index.mjs +0 -127
- package/core/focusCatcher/utils.js +0 -31
- package/core/focusCatcher/utils.mjs +0 -27
- package/plugins/pagination/focusController.js +0 -27
- package/plugins/pagination/focusController.mjs +0 -23
|
@@ -624,7 +624,7 @@ class Overlays {
|
|
|
624
624
|
// The internal row height calculator contains a known issue that results in a 1px miscalculation.
|
|
625
625
|
// Ideally, this should be addressed at the core level. However, resolving it is non-trivial,
|
|
626
626
|
// as the flaw is embedded across multiple core modules and corresponding test cases.
|
|
627
|
-
// This limitation does not affect when the
|
|
627
|
+
// This limitation does not affect when the external calculator is used (AutoRowSize), which
|
|
628
628
|
// computes heights accurately, so no adjustment is required when using it.
|
|
629
629
|
const hiderHeightComp = this.wtSettings.getSetting('externalRowCalculator') ? 0 : 1;
|
|
630
630
|
const proposedHiderHeight = headerColumnSize + this.topOverlay.sumCellSizes(0, totalRows) + hiderHeightComp;
|
|
@@ -621,7 +621,7 @@ class Overlays {
|
|
|
621
621
|
// The internal row height calculator contains a known issue that results in a 1px miscalculation.
|
|
622
622
|
// Ideally, this should be addressed at the core level. However, resolving it is non-trivial,
|
|
623
623
|
// as the flaw is embedded across multiple core modules and corresponding test cases.
|
|
624
|
-
// This limitation does not affect when the
|
|
624
|
+
// This limitation does not affect when the external calculator is used (AutoRowSize), which
|
|
625
625
|
// computes heights accurately, so no adjustment is required when using it.
|
|
626
626
|
const hiderHeightComp = this.wtSettings.getSetting('externalRowCalculator') ? 0 : 1;
|
|
627
627
|
const proposedHiderHeight = headerColumnSize + this.topOverlay.sumCellSizes(0, totalRows) + hiderHeightComp;
|
|
@@ -6,6 +6,10 @@ var _event = require("../../../../../helpers/dom/event");
|
|
|
6
6
|
var _object = require("../../../../../helpers/object");
|
|
7
7
|
var _browser = require("../../../../../helpers/browser");
|
|
8
8
|
var _utils = require("./utils");
|
|
9
|
+
const BORDER_STYLE_CLASS_PREFIX = 'ht-border-style-';
|
|
10
|
+
const BORDER_STYLE_VERTICAL_SUFFIX = '-vertical';
|
|
11
|
+
const BORDER_STYLE_HORIZONTAL_SUFFIX = '-horizontal';
|
|
12
|
+
|
|
9
13
|
/**
|
|
10
14
|
*
|
|
11
15
|
*/
|
|
@@ -144,15 +148,27 @@ class Border {
|
|
|
144
148
|
for (let i = 0; i < 5; i++) {
|
|
145
149
|
const position = borderDivs[i];
|
|
146
150
|
const div = rootDocument.createElement('div');
|
|
151
|
+
const getSettingsProperty = property => this.settings[position] && this.settings[position][property] ? this.settings[position][property] : settings.border[property];
|
|
147
152
|
div.className = `wtBorder ${this.settings.className || ''}`; // + borderDivs[i];
|
|
148
153
|
|
|
149
154
|
if (this.settings[position] && this.settings[position].hide) {
|
|
150
155
|
div.className += ' hidden';
|
|
151
156
|
}
|
|
152
157
|
style = div.style;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
158
|
+
const borderStyle = getSettingsProperty('style');
|
|
159
|
+
if (borderStyle) {
|
|
160
|
+
if (['start', 'end'].includes(position)) {
|
|
161
|
+
div.className += ` ${BORDER_STYLE_CLASS_PREFIX}${borderStyle}${BORDER_STYLE_VERTICAL_SUFFIX}`;
|
|
162
|
+
} else {
|
|
163
|
+
div.className += ` ${BORDER_STYLE_CLASS_PREFIX}${borderStyle}${BORDER_STYLE_HORIZONTAL_SUFFIX}`;
|
|
164
|
+
}
|
|
165
|
+
style.setProperty('--ht-custom-border-size', `${getSettingsProperty('width')}px`);
|
|
166
|
+
style.setProperty('--ht-custom-border-color', getSettingsProperty('color'));
|
|
167
|
+
} else {
|
|
168
|
+
style.backgroundColor = getSettingsProperty('color');
|
|
169
|
+
}
|
|
170
|
+
style.height = `${getSettingsProperty('width')}px`;
|
|
171
|
+
style.width = `${getSettingsProperty('width')}px`;
|
|
156
172
|
this.main.appendChild(div);
|
|
157
173
|
}
|
|
158
174
|
this.top = this.main.childNodes[0];
|
|
@@ -3,6 +3,10 @@ import { stopImmediatePropagation } from "../../../../../helpers/dom/event.mjs";
|
|
|
3
3
|
import { objectEach } from "../../../../../helpers/object.mjs";
|
|
4
4
|
import { isMobileBrowser } from "../../../../../helpers/browser.mjs";
|
|
5
5
|
import { getCornerStyle } from "./utils.mjs";
|
|
6
|
+
const BORDER_STYLE_CLASS_PREFIX = 'ht-border-style-';
|
|
7
|
+
const BORDER_STYLE_VERTICAL_SUFFIX = '-vertical';
|
|
8
|
+
const BORDER_STYLE_HORIZONTAL_SUFFIX = '-horizontal';
|
|
9
|
+
|
|
6
10
|
/**
|
|
7
11
|
*
|
|
8
12
|
*/
|
|
@@ -141,15 +145,27 @@ class Border {
|
|
|
141
145
|
for (let i = 0; i < 5; i++) {
|
|
142
146
|
const position = borderDivs[i];
|
|
143
147
|
const div = rootDocument.createElement('div');
|
|
148
|
+
const getSettingsProperty = property => this.settings[position] && this.settings[position][property] ? this.settings[position][property] : settings.border[property];
|
|
144
149
|
div.className = `wtBorder ${this.settings.className || ''}`; // + borderDivs[i];
|
|
145
150
|
|
|
146
151
|
if (this.settings[position] && this.settings[position].hide) {
|
|
147
152
|
div.className += ' hidden';
|
|
148
153
|
}
|
|
149
154
|
style = div.style;
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
155
|
+
const borderStyle = getSettingsProperty('style');
|
|
156
|
+
if (borderStyle) {
|
|
157
|
+
if (['start', 'end'].includes(position)) {
|
|
158
|
+
div.className += ` ${BORDER_STYLE_CLASS_PREFIX}${borderStyle}${BORDER_STYLE_VERTICAL_SUFFIX}`;
|
|
159
|
+
} else {
|
|
160
|
+
div.className += ` ${BORDER_STYLE_CLASS_PREFIX}${borderStyle}${BORDER_STYLE_HORIZONTAL_SUFFIX}`;
|
|
161
|
+
}
|
|
162
|
+
style.setProperty('--ht-custom-border-size', `${getSettingsProperty('width')}px`);
|
|
163
|
+
style.setProperty('--ht-custom-border-color', getSettingsProperty('color'));
|
|
164
|
+
} else {
|
|
165
|
+
style.backgroundColor = getSettingsProperty('color');
|
|
166
|
+
}
|
|
167
|
+
style.height = `${getSettingsProperty('width')}px`;
|
|
168
|
+
style.width = `${getSettingsProperty('width')}px`;
|
|
153
169
|
this.main.appendChild(div);
|
|
154
170
|
}
|
|
155
171
|
this.top = this.main.childNodes[0];
|
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,43 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
9
9
|
|
|
10
10
|
<!-- UNVERSIONED -->
|
|
11
11
|
|
|
12
|
+
## [16.2.0] - 2025-11-20
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- Improved focus management by introducing a focus scopes mechanism. [#11804](https://github.com/handsontable/handsontable/pull/11804)
|
|
16
|
+
- Introduced an "auto" option for the `roundFloat` setting in the Column Summary plugin and ensured proper recalculation of endpoints after data updates. [#11833](https://github.com/handsontable/handsontable/pull/11833)
|
|
17
|
+
- Added an Enter key handler and a new `searchMode` option to the Filters plugin. [#11871](https://github.com/handsontable/handsontable/pull/11871)
|
|
18
|
+
- Implemented a `style` option for the Custom Borders plugin, enabling style customization. [#11876](https://github.com/handsontable/handsontable/pull/11876)
|
|
19
|
+
- Introduced a new "dotted" border style to the Custom Borders plugin. [#11877](https://github.com/handsontable/handsontable/pull/11877)
|
|
20
|
+
- Added the EmptyDataState plugin to improve UX when no data is available. [#11879](https://github.com/handsontable/handsontable/pull/11879)
|
|
21
|
+
- Added a `settings` entry to the Handsontable exports. [#11883](https://github.com/handsontable/handsontable/pull/11883)
|
|
22
|
+
- Added new global button CSS class names. [#11896](https://github.com/handsontable/handsontable/pull/11896)
|
|
23
|
+
- Introduced `minRowHeights` as an alias for `rowHeights` for API consistency. [#11898](https://github.com/handsontable/handsontable/pull/11898)
|
|
24
|
+
- Added a new `template` option to the Dialog plugin. [#11902](https://github.com/handsontable/handsontable/pull/11902)
|
|
25
|
+
- Added new theme variables and implemented `no-icons` and `icons-only` style variants. [#11913](https://github.com/handsontable/handsontable/pull/11913)
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- Refined dropdown behavior when the input is empty - focus now remains on the input field. [#11863](https://github.com/handsontable/handsontable/pull/11863)
|
|
29
|
+
- Improved how the Autocomplete and Dropdown editors respond to clicks outside the open editor. [#11873](https://github.com/handsontable/handsontable/pull/11873)
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
- Fixed the datepicker icon size issue on iPad. [#11860](https://github.com/handsontable/handsontable/pull/11860)
|
|
33
|
+
- Corrected header size rendering on iPad. [#11861](https://github.com/handsontable/handsontable/pull/11861)
|
|
34
|
+
- Fixed an issue with header text size with `collapsibleColumns` enabled. [#11864](https://github.com/handsontable/handsontable/pull/11864)
|
|
35
|
+
- Fixed an issue with an unwanted empty space on the right side of the table when using the modern themes. [#11868](https://github.com/handsontable/handsontable/pull/11868)
|
|
36
|
+
- Fixed row misalignment for multi-line cell content. [#11872](https://github.com/handsontable/handsontable/pull/11872)
|
|
37
|
+
- Improved column width calculations for checkbox-typed cells. [#11891](https://github.com/handsontable/handsontable/pull/11891)
|
|
38
|
+
- Fixed a problem, where using `minSpareRows` would crash the table when configured alongside the Column Summary plugin. [#11911](https://github.com/handsontable/handsontable/pull/11911)
|
|
39
|
+
- Fixed an issue preventing re-adding a previously removed hook callback. [#11914](https://github.com/handsontable/handsontable/pull/11914)
|
|
40
|
+
- Stabilized the height of the first row when it's empty. [#11918](https://github.com/handsontable/handsontable/pull/11918)
|
|
41
|
+
- Fixed a problem where resizing the window vertically did not resize the table. [#11919](https://github.com/handsontable/handsontable/pull/11919)
|
|
42
|
+
- Fixed an issue where the dialog overlay could make the table unresponsive after rapid show/hide calls. [#11925](https://github.com/handsontable/handsontable/pull/11925)
|
|
43
|
+
- Fixed an issue with TouchEvent on Firefox. [#11928](https://github.com/handsontable/handsontable/pull/11928)
|
|
44
|
+
- React: Fixed and issue with Collapsible Columns being reset in React wrapper. [#11923](https://github.com/handsontable/handsontable/pull/11923)
|
|
45
|
+
|
|
46
|
+
### Security
|
|
47
|
+
- Updated dev dependencies to address high-severity vulnerabilities. [#11895](https://github.com/handsontable/handsontable/pull/11895)
|
|
48
|
+
|
|
12
49
|
## [16.1.1] - 2025-09-23
|
|
13
50
|
|
|
14
51
|
### Fixed
|
|
@@ -25,6 +62,8 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
25
62
|
- Added a new `initialState` configuration option. [#11777](https://github.com/handsontable/handsontable/pull/11777)
|
|
26
63
|
- Introduced the Loading plugin. [#11792](https://github.com/handsontable/handsontable/pull/11792)
|
|
27
64
|
- Added a new "classic" theme. [#11790](https://github.com/handsontable/handsontable/pull/11790)
|
|
65
|
+
- Added a [Deprecation policy](https://handsontable.com/docs/deprecation-policy/) page to the documentation.
|
|
66
|
+
- Added a [Long Term Support (LTS)](https://handsontable.com/docs/long-term-support/) page to the documentation.
|
|
28
67
|
|
|
29
68
|
### Changed
|
|
30
69
|
- Enabled focus navigation between multiple selection layers. [#11756](https://github.com/handsontable/handsontable/pull/11756)
|
package/base.js
CHANGED
|
@@ -45,8 +45,8 @@ Handsontable.hooks = _hooks.Hooks.getSingleton();
|
|
|
45
45
|
Handsontable.CellCoords = _src.CellCoords;
|
|
46
46
|
Handsontable.CellRange = _src.CellRange;
|
|
47
47
|
Handsontable.packageName = 'handsontable';
|
|
48
|
-
Handsontable.buildDate = "
|
|
49
|
-
Handsontable.version = "16.
|
|
48
|
+
Handsontable.buildDate = "17/11/2025 11:48:41";
|
|
49
|
+
Handsontable.version = "16.2.0-next-90d1117-20251117";
|
|
50
50
|
Handsontable.languages = {
|
|
51
51
|
dictionaryKeys: _registry.dictionaryKeys,
|
|
52
52
|
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 = "16.
|
|
38
|
+
Handsontable.buildDate = "17/11/2025 11:48:47";
|
|
39
|
+
Handsontable.version = "16.2.0-next-90d1117-20251117";
|
|
40
40
|
Handsontable.languages = {
|
|
41
41
|
dictionaryKeys,
|
|
42
42
|
getLanguageDictionary,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
4
|
+
require("core-js/modules/esnext.iterator.for-each.js");
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
var _rangeToRenderableMapper = require("./rangeToRenderableMapper");
|
|
7
|
+
Object.keys(_rangeToRenderableMapper).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _rangeToRenderableMapper[key]) return;
|
|
10
|
+
exports[key] = _rangeToRenderableMapper[key];
|
|
11
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./rangeToRenderableMapper.mjs";
|
package/core/hooks/bucket.js
CHANGED
|
@@ -95,7 +95,13 @@ class HooksBucket {
|
|
|
95
95
|
_constants.REGISTERED_HOOKS.push(hookName);
|
|
96
96
|
}
|
|
97
97
|
const hooks = _classPrivateFieldGet(_hooks, this).get(hookName);
|
|
98
|
-
|
|
98
|
+
const existingHook = hooks.find(hook => hook.callback === callback);
|
|
99
|
+
if (existingHook) {
|
|
100
|
+
if (existingHook.skip === true) {
|
|
101
|
+
// Re-enable the hook if it was previously added and then removed.
|
|
102
|
+
existingHook.skip = false;
|
|
103
|
+
}
|
|
104
|
+
|
|
99
105
|
// adding the same hook twice is now silently ignored
|
|
100
106
|
return;
|
|
101
107
|
}
|
package/core/hooks/bucket.mjs
CHANGED
|
@@ -92,7 +92,13 @@ export class HooksBucket {
|
|
|
92
92
|
REGISTERED_HOOKS.push(hookName);
|
|
93
93
|
}
|
|
94
94
|
const hooks = _classPrivateFieldGet(_hooks, this).get(hookName);
|
|
95
|
-
|
|
95
|
+
const existingHook = hooks.find(hook => hook.callback === callback);
|
|
96
|
+
if (existingHook) {
|
|
97
|
+
if (existingHook.skip === true) {
|
|
98
|
+
// Re-enable the hook if it was previously added and then removed.
|
|
99
|
+
existingHook.skip = false;
|
|
100
|
+
}
|
|
101
|
+
|
|
96
102
|
// adding the same hook twice is now silently ignored
|
|
97
103
|
return;
|
|
98
104
|
}
|
package/core/hooks/constants.js
CHANGED
|
@@ -305,6 +305,17 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
|
|
|
305
305
|
* :::
|
|
306
306
|
*/
|
|
307
307
|
'beforeCreateCol',
|
|
308
|
+
/**
|
|
309
|
+
* Fired after the cache of the column sequence has been updated.
|
|
310
|
+
*
|
|
311
|
+
* @since 16.2.0
|
|
312
|
+
* @event Hooks#afterColumnSequenceCacheUpdate
|
|
313
|
+
* @param {object} indexesChangesState Object containing information about the changes to the column sequence.
|
|
314
|
+
* @param {boolean} indexesChangesState.indexesSequenceChanged Indicates if the sequence of indexes has changed.
|
|
315
|
+
* @param {boolean} indexesChangesState.trimmedIndexesChanged Indicates if the trimmed indexes have changed.
|
|
316
|
+
* @param {boolean} indexesChangesState.hiddenIndexesChanged Indicates if the hidden indexes have changed.
|
|
317
|
+
*/
|
|
318
|
+
'afterColumnSequenceCacheUpdate',
|
|
308
319
|
/**
|
|
309
320
|
* Fired after the order of columns has changed.
|
|
310
321
|
* This hook is fired by changing column indexes of any type supported by the {@link IndexMapper}.
|
|
@@ -583,6 +594,17 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
|
|
|
583
594
|
* @param {object} cellProperties Object containing the cell's properties.
|
|
584
595
|
*/
|
|
585
596
|
'afterRenderer',
|
|
597
|
+
/**
|
|
598
|
+
* Fired after the cache of the row sequence has been updated.
|
|
599
|
+
*
|
|
600
|
+
* @since 16.2.0
|
|
601
|
+
* @event Hooks#afterRowSequenceCacheUpdate
|
|
602
|
+
* @param {object} indexesChangesState Object containing information about the changes to the row sequence.
|
|
603
|
+
* @param {boolean} indexesChangesState.indexesSequenceChanged Indicates if the sequence of indexes has changed.
|
|
604
|
+
* @param {boolean} indexesChangesState.trimmedIndexesChanged Indicates if the trimmed indexes have changed.
|
|
605
|
+
* @param {boolean} indexesChangesState.hiddenIndexesChanged Indicates if the hidden indexes have changed.
|
|
606
|
+
*/
|
|
607
|
+
'afterRowSequenceCacheUpdate',
|
|
586
608
|
/**
|
|
587
609
|
* Fired after the order of rows has changed.
|
|
588
610
|
* This hook is fired by changing row indexes of any type supported by the {@link IndexMapper}.
|
|
@@ -3029,6 +3051,38 @@ const REGISTERED_HOOKS = exports.REGISTERED_HOOKS = [/* eslint-disable jsdoc/req
|
|
|
3029
3051
|
* @event Hooks#afterLoadingHide
|
|
3030
3052
|
*/
|
|
3031
3053
|
'afterLoadingHide',
|
|
3054
|
+
/**
|
|
3055
|
+
* Fired by {@link EmptyDataState} plugin before showing the empty data state overlay. This hook is fired when {@link Options#emptyDataState}
|
|
3056
|
+
* option is enabled.
|
|
3057
|
+
*
|
|
3058
|
+
* @since 16.2.0
|
|
3059
|
+
* @event Hooks#beforeEmptyDataStateShow
|
|
3060
|
+
*/
|
|
3061
|
+
'beforeEmptyDataStateShow',
|
|
3062
|
+
/**
|
|
3063
|
+
* Fired by {@link EmptyDataState} plugin after showing the empty data state overlay. This hook is fired when {@link Options#emptyDataState}
|
|
3064
|
+
* option is enabled.
|
|
3065
|
+
*
|
|
3066
|
+
* @since 16.2.0
|
|
3067
|
+
* @event Hooks#afterEmptyDataStateShow
|
|
3068
|
+
*/
|
|
3069
|
+
'afterEmptyDataStateShow',
|
|
3070
|
+
/**
|
|
3071
|
+
* Fired by {@link EmptyDataState} plugin before hiding the empty data state overlay. This hook is fired when {@link Options#emptyDataState}
|
|
3072
|
+
* option is enabled.
|
|
3073
|
+
*
|
|
3074
|
+
* @since 16.2.0
|
|
3075
|
+
* @event Hooks#beforeEmptyDataStateHide
|
|
3076
|
+
*/
|
|
3077
|
+
'beforeEmptyDataStateHide',
|
|
3078
|
+
/**
|
|
3079
|
+
* Fired by {@link EmptyDataState} plugin after hiding the empty data state overlay. This hook is fired when {@link Options#emptyDataState}
|
|
3080
|
+
* option is enabled.
|
|
3081
|
+
*
|
|
3082
|
+
* @since 16.2.0
|
|
3083
|
+
* @event Hooks#afterEmptyDataStateHide
|
|
3084
|
+
*/
|
|
3085
|
+
'afterEmptyDataStateHide',
|
|
3032
3086
|
/**
|
|
3033
3087
|
* Fired after the editor is opened and rendered.
|
|
3034
3088
|
*
|
package/core/hooks/constants.mjs
CHANGED
|
@@ -302,6 +302,17 @@ export const REGISTERED_HOOKS = [/* eslint-disable jsdoc/require-description-com
|
|
|
302
302
|
* :::
|
|
303
303
|
*/
|
|
304
304
|
'beforeCreateCol',
|
|
305
|
+
/**
|
|
306
|
+
* Fired after the cache of the column sequence has been updated.
|
|
307
|
+
*
|
|
308
|
+
* @since 16.2.0
|
|
309
|
+
* @event Hooks#afterColumnSequenceCacheUpdate
|
|
310
|
+
* @param {object} indexesChangesState Object containing information about the changes to the column sequence.
|
|
311
|
+
* @param {boolean} indexesChangesState.indexesSequenceChanged Indicates if the sequence of indexes has changed.
|
|
312
|
+
* @param {boolean} indexesChangesState.trimmedIndexesChanged Indicates if the trimmed indexes have changed.
|
|
313
|
+
* @param {boolean} indexesChangesState.hiddenIndexesChanged Indicates if the hidden indexes have changed.
|
|
314
|
+
*/
|
|
315
|
+
'afterColumnSequenceCacheUpdate',
|
|
305
316
|
/**
|
|
306
317
|
* Fired after the order of columns has changed.
|
|
307
318
|
* This hook is fired by changing column indexes of any type supported by the {@link IndexMapper}.
|
|
@@ -580,6 +591,17 @@ export const REGISTERED_HOOKS = [/* eslint-disable jsdoc/require-description-com
|
|
|
580
591
|
* @param {object} cellProperties Object containing the cell's properties.
|
|
581
592
|
*/
|
|
582
593
|
'afterRenderer',
|
|
594
|
+
/**
|
|
595
|
+
* Fired after the cache of the row sequence has been updated.
|
|
596
|
+
*
|
|
597
|
+
* @since 16.2.0
|
|
598
|
+
* @event Hooks#afterRowSequenceCacheUpdate
|
|
599
|
+
* @param {object} indexesChangesState Object containing information about the changes to the row sequence.
|
|
600
|
+
* @param {boolean} indexesChangesState.indexesSequenceChanged Indicates if the sequence of indexes has changed.
|
|
601
|
+
* @param {boolean} indexesChangesState.trimmedIndexesChanged Indicates if the trimmed indexes have changed.
|
|
602
|
+
* @param {boolean} indexesChangesState.hiddenIndexesChanged Indicates if the hidden indexes have changed.
|
|
603
|
+
*/
|
|
604
|
+
'afterRowSequenceCacheUpdate',
|
|
583
605
|
/**
|
|
584
606
|
* Fired after the order of rows has changed.
|
|
585
607
|
* This hook is fired by changing row indexes of any type supported by the {@link IndexMapper}.
|
|
@@ -3026,6 +3048,38 @@ export const REGISTERED_HOOKS = [/* eslint-disable jsdoc/require-description-com
|
|
|
3026
3048
|
* @event Hooks#afterLoadingHide
|
|
3027
3049
|
*/
|
|
3028
3050
|
'afterLoadingHide',
|
|
3051
|
+
/**
|
|
3052
|
+
* Fired by {@link EmptyDataState} plugin before showing the empty data state overlay. This hook is fired when {@link Options#emptyDataState}
|
|
3053
|
+
* option is enabled.
|
|
3054
|
+
*
|
|
3055
|
+
* @since 16.2.0
|
|
3056
|
+
* @event Hooks#beforeEmptyDataStateShow
|
|
3057
|
+
*/
|
|
3058
|
+
'beforeEmptyDataStateShow',
|
|
3059
|
+
/**
|
|
3060
|
+
* Fired by {@link EmptyDataState} plugin after showing the empty data state overlay. This hook is fired when {@link Options#emptyDataState}
|
|
3061
|
+
* option is enabled.
|
|
3062
|
+
*
|
|
3063
|
+
* @since 16.2.0
|
|
3064
|
+
* @event Hooks#afterEmptyDataStateShow
|
|
3065
|
+
*/
|
|
3066
|
+
'afterEmptyDataStateShow',
|
|
3067
|
+
/**
|
|
3068
|
+
* Fired by {@link EmptyDataState} plugin before hiding the empty data state overlay. This hook is fired when {@link Options#emptyDataState}
|
|
3069
|
+
* option is enabled.
|
|
3070
|
+
*
|
|
3071
|
+
* @since 16.2.0
|
|
3072
|
+
* @event Hooks#beforeEmptyDataStateHide
|
|
3073
|
+
*/
|
|
3074
|
+
'beforeEmptyDataStateHide',
|
|
3075
|
+
/**
|
|
3076
|
+
* Fired by {@link EmptyDataState} plugin after hiding the empty data state overlay. This hook is fired when {@link Options#emptyDataState}
|
|
3077
|
+
* option is enabled.
|
|
3078
|
+
*
|
|
3079
|
+
* @since 16.2.0
|
|
3080
|
+
* @event Hooks#afterEmptyDataStateHide
|
|
3081
|
+
*/
|
|
3082
|
+
'afterEmptyDataStateHide',
|
|
3029
3083
|
/**
|
|
3030
3084
|
* Fired after the editor is opened and rendered.
|
|
3031
3085
|
*
|
package/core/hooks/index.d.ts
CHANGED
|
@@ -61,6 +61,7 @@ export interface Events {
|
|
|
61
61
|
afterColumnFreeze?: (columnIndex: number, isFreezingPerformed: boolean) => void;
|
|
62
62
|
afterColumnMove?: (movedColumns: number[], finalIndex: number, dropIndex: number | undefined, movePossible: boolean, orderChanged: boolean) => void;
|
|
63
63
|
afterColumnResize?: (newSize: number, column: number, isDoubleClick: boolean) => void;
|
|
64
|
+
afterColumnSequenceCacheUpdate?: (indexesChangesState: { indexesSequenceChanged: boolean, trimmedIndexesChanged: boolean, hiddenIndexesChanged: boolean }) => void;
|
|
64
65
|
afterColumnSequenceChange?: (source: 'init' | 'move' | 'insert' | 'remove' | 'update') => void;
|
|
65
66
|
afterColumnSort?: (currentSortConfig: ColumnSortingConfig[], destinationSortConfigs: ColumnSortingConfig[]) => void;
|
|
66
67
|
afterColumnUnfreeze?: (columnIndex: number, isUnfreezingPerformed: boolean) => void;
|
|
@@ -75,6 +76,10 @@ export interface Events {
|
|
|
75
76
|
afterLoadingShow?: () => void;
|
|
76
77
|
beforeLoadingHide?: () => boolean | void;
|
|
77
78
|
afterLoadingHide?: () => void;
|
|
79
|
+
beforeEmptyDataStateShow?: () => void;
|
|
80
|
+
afterEmptyDataStateShow?: () => void;
|
|
81
|
+
beforeEmptyDataStateHide?: () => void;
|
|
82
|
+
afterEmptyDataStateHide?: () => void;
|
|
78
83
|
afterCopyLimit?: (selectedRows: number, selectedColumns: number, copyRowsLimit: number, copyColumnsLimit: number) => void;
|
|
79
84
|
afterCreateCol?: (index: number, amount: number, source?: ChangeSource) => void;
|
|
80
85
|
afterCreateRow?: (index: number, amount: number, source?: ChangeSource) => void;
|
|
@@ -131,6 +136,7 @@ export interface Events {
|
|
|
131
136
|
afterRenderer?: (TD: HTMLTableCellElement, row: number, column: number, prop: string | number, value: string, cellProperties: CellProperties) => void;
|
|
132
137
|
afterRowMove?: (movedRows: number[], finalIndex: number, dropIndex: number | undefined, movePossible: boolean, orderChanged: boolean) => void;
|
|
133
138
|
afterRowResize?: (newSize: number, row: number, isDoubleClick: boolean) => void;
|
|
139
|
+
afterRowSequenceCacheUpdate?: (indexesChangesState: { indexesSequenceChanged: boolean, trimmedIndexesChanged: boolean, hiddenIndexesChanged: boolean }) => void;
|
|
134
140
|
afterRowSequenceChange?: (source: 'init' | 'move' | 'insert' | 'remove' | 'update') => void;
|
|
135
141
|
afterScrollHorizontally?: () => void;
|
|
136
142
|
afterScrollVertically?: () => void;
|
package/core/index.js
CHANGED
|
@@ -3,11 +3,17 @@
|
|
|
3
3
|
require("core-js/modules/esnext.iterator.constructor.js");
|
|
4
4
|
require("core-js/modules/esnext.iterator.for-each.js");
|
|
5
5
|
exports.__esModule = true;
|
|
6
|
-
var
|
|
7
|
-
Object.keys(
|
|
6
|
+
var _coordsMapper = require("./coordsMapper");
|
|
7
|
+
Object.keys(_coordsMapper).forEach(function (key) {
|
|
8
8
|
if (key === "default" || key === "__esModule") return;
|
|
9
|
-
if (key in exports && exports[key] ===
|
|
10
|
-
exports[key] =
|
|
9
|
+
if (key in exports && exports[key] === _coordsMapper[key]) return;
|
|
10
|
+
exports[key] = _coordsMapper[key];
|
|
11
|
+
});
|
|
12
|
+
var _hooks = require("./hooks");
|
|
13
|
+
Object.keys(_hooks).forEach(function (key) {
|
|
14
|
+
if (key === "default" || key === "__esModule") return;
|
|
15
|
+
if (key in exports && exports[key] === _hooks[key]) return;
|
|
16
|
+
exports[key] = _hooks[key];
|
|
11
17
|
});
|
|
12
18
|
var _viewportScroll = require("./viewportScroll");
|
|
13
19
|
Object.keys(_viewportScroll).forEach(function (key) {
|
package/core/index.mjs
CHANGED
package/core.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ import { BaseValidator } from './validators/base';
|
|
|
19
19
|
import { Plugins } from './plugins';
|
|
20
20
|
import { CellType } from './cellTypes';
|
|
21
21
|
import { ShortcutManager } from './shortcuts';
|
|
22
|
-
import {
|
|
22
|
+
import { GridFocusManager, FocusScopeManager } from './focusManager';
|
|
23
23
|
|
|
24
24
|
type AlterActions = 'insert_row_above' | 'insert_row_below' |
|
|
25
25
|
'insert_col_start' | 'insert_col_end' |
|
|
@@ -90,7 +90,8 @@ export default class Core {
|
|
|
90
90
|
getFirstPartiallyVisibleRow(): number | null;
|
|
91
91
|
getFirstRenderedVisibleColumn(): number | null;
|
|
92
92
|
getFirstRenderedVisibleRow(): number | null;
|
|
93
|
-
getFocusManager():
|
|
93
|
+
getFocusManager(): GridFocusManager;
|
|
94
|
+
getFocusScopeManager(): FocusScopeManager;
|
|
94
95
|
getInstance(): Core;
|
|
95
96
|
getLastFullyVisibleColumn(): number | null;
|
|
96
97
|
getLastFullyVisibleRow(): number | null;
|