handsontable 14.3.0 → 14.4.0-next-0a79a1f-20240521
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/calculator/viewportRows.js +3 -3
- package/3rdparty/walkontable/src/calculator/viewportRows.mjs +3 -3
- package/3rdparty/walkontable/src/core/_base.js +1 -1
- package/3rdparty/walkontable/src/core/_base.mjs +1 -1
- package/3rdparty/walkontable/src/overlay/_base.js +24 -20
- package/3rdparty/walkontable/src/overlay/_base.mjs +24 -20
- package/3rdparty/walkontable/src/overlay/bottom.js +3 -6
- package/3rdparty/walkontable/src/overlay/bottom.mjs +3 -6
- package/3rdparty/walkontable/src/overlay/inlineStart.js +22 -19
- package/3rdparty/walkontable/src/overlay/inlineStart.mjs +22 -19
- package/3rdparty/walkontable/src/overlay/top.js +13 -12
- package/3rdparty/walkontable/src/overlay/top.mjs +13 -12
- package/3rdparty/walkontable/src/overlays.js +46 -24
- package/3rdparty/walkontable/src/overlays.mjs +46 -24
- package/3rdparty/walkontable/src/selection/manager.js +7 -0
- package/3rdparty/walkontable/src/selection/manager.mjs +7 -0
- package/3rdparty/walkontable/src/selection/scanner.js +7 -0
- package/3rdparty/walkontable/src/selection/scanner.mjs +7 -0
- package/3rdparty/walkontable/src/table.js +10 -11
- package/3rdparty/walkontable/src/table.mjs +10 -11
- package/3rdparty/walkontable/src/utils/columnStretching.js +4 -0
- package/3rdparty/walkontable/src/utils/columnStretching.mjs +4 -0
- package/3rdparty/walkontable/src/viewport.js +18 -10
- package/3rdparty/walkontable/src/viewport.mjs +18 -10
- package/CHANGELOG.md +37 -0
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core.d.ts +2 -2
- package/core.js +93 -162
- package/core.mjs +93 -162
- package/dataMap/dataMap.js +10 -4
- package/dataMap/dataMap.mjs +10 -4
- package/dataMap/dataSource.js +16 -3
- package/dataMap/dataSource.mjs +16 -3
- package/dataMap/metaManager/lazyFactoryMap.js +7 -0
- package/dataMap/metaManager/lazyFactoryMap.mjs +7 -0
- package/dataMap/metaManager/metaSchema.js +38 -0
- package/dataMap/metaManager/metaSchema.mjs +38 -0
- package/dataMap/metaManager/mods/dynamicCellMeta.js +7 -0
- package/dataMap/metaManager/mods/dynamicCellMeta.mjs +7 -0
- package/dataMap/metaManager/mods/extendMetaProperties.js +44 -31
- package/dataMap/metaManager/mods/extendMetaProperties.mjs +44 -31
- package/dataMap/metaManager/utils.js +7 -0
- package/dataMap/metaManager/utils.mjs +7 -0
- package/dist/handsontable.css +4 -5
- package/dist/handsontable.full.css +4 -5
- package/dist/handsontable.full.js +5878 -4657
- package/dist/handsontable.full.min.css +4 -4
- package/dist/handsontable.full.min.js +59 -59
- package/dist/handsontable.js +5383 -4277
- package/dist/handsontable.min.css +4 -4
- package/dist/handsontable.min.js +20 -20
- package/editorManager.js +0 -67
- package/editorManager.mjs +0 -67
- package/editors/autocompleteEditor/autocompleteEditor.js +6 -4
- package/editors/autocompleteEditor/autocompleteEditor.mjs +6 -4
- package/editors/baseEditor/baseEditor.js +1 -36
- package/editors/baseEditor/baseEditor.mjs +2 -37
- package/editors/dateEditor/dateEditor.js +4 -1
- package/editors/dateEditor/dateEditor.mjs +4 -1
- package/editors/dropdownEditor/dropdownEditor.js +8 -5
- package/editors/dropdownEditor/dropdownEditor.mjs +8 -5
- package/editors/handsontableEditor/handsontableEditor.js +2 -2
- package/editors/handsontableEditor/handsontableEditor.mjs +2 -2
- package/editors/selectEditor/selectEditor.js +1 -9
- package/editors/selectEditor/selectEditor.mjs +1 -9
- package/editors/textEditor/textEditor.js +2 -11
- package/editors/textEditor/textEditor.mjs +2 -11
- package/focusManager.js +3 -5
- package/focusManager.mjs +3 -5
- package/helpers/array.js +7 -0
- package/helpers/array.mjs +7 -0
- package/helpers/mixed.js +2 -2
- package/helpers/mixed.mjs +2 -2
- package/helpers/number.js +12 -2
- package/helpers/number.mjs +12 -2
- package/package.json +3 -3
- package/pluginHooks.d.ts +1 -1
- package/pluginHooks.js +79 -2
- package/pluginHooks.mjs +79 -2
- package/plugins/autoColumnSize/autoColumnSize.js +7 -0
- package/plugins/autoColumnSize/autoColumnSize.mjs +7 -0
- package/plugins/autoRowSize/autoRowSize.js +2 -2
- package/plugins/autoRowSize/autoRowSize.mjs +2 -2
- package/plugins/autofill/autofill.js +1 -1
- package/plugins/autofill/autofill.mjs +1 -1
- package/plugins/base/base.d.ts +1 -1
- package/plugins/base/base.js +6 -2
- package/plugins/base/base.mjs +6 -2
- package/plugins/collapsibleColumns/collapsibleColumns.js +1 -1
- package/plugins/collapsibleColumns/collapsibleColumns.mjs +1 -1
- package/plugins/columnSorting/sortFunction/date.js +2 -46
- package/plugins/columnSorting/sortFunction/date.mjs +2 -45
- package/plugins/columnSorting/sortFunction/time.js +17 -0
- package/plugins/columnSorting/sortFunction/time.mjs +13 -0
- package/plugins/columnSorting/sortService/registry.js +4 -2
- package/plugins/columnSorting/sortService/registry.mjs +3 -1
- package/plugins/columnSorting/utils.js +64 -0
- package/plugins/columnSorting/utils.mjs +62 -0
- package/plugins/columnSummary/columnSummary.js +27 -10
- package/plugins/columnSummary/columnSummary.mjs +27 -10
- package/plugins/columnSummary/endpoints.js +15 -0
- package/plugins/columnSummary/endpoints.mjs +15 -0
- package/plugins/comments/comments.js +2 -8
- package/plugins/comments/comments.mjs +2 -8
- package/plugins/comments/contextMenuItem/addEditComment.js +0 -1
- package/plugins/comments/contextMenuItem/addEditComment.mjs +0 -1
- package/plugins/contextMenu/contextMenu.d.ts +1 -1
- package/plugins/copyPaste/copyPaste.js +9 -2
- package/plugins/copyPaste/copyPaste.mjs +9 -2
- package/plugins/copyPaste/pasteEvent.js +1 -0
- package/plugins/copyPaste/pasteEvent.mjs +1 -0
- package/plugins/filters/filters.js +1 -1
- package/plugins/filters/filters.mjs +1 -1
- package/plugins/filters/ui/multipleSelect.js +22 -14
- package/plugins/filters/ui/multipleSelect.mjs +22 -14
- package/plugins/filters/utils.js +7 -0
- package/plugins/filters/utils.mjs +7 -0
- package/plugins/formulas/formulas.d.ts +10 -0
- package/plugins/formulas/formulas.js +11 -2
- package/plugins/formulas/formulas.mjs +11 -2
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -1
- package/plugins/hiddenColumns/contextMenuItem/hideColumn.mjs +1 -1
- package/plugins/hiddenColumns/contextMenuItem/showColumn.js +1 -1
- package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +1 -1
- package/plugins/hiddenColumns/hiddenColumns.js +8 -1
- package/plugins/hiddenColumns/hiddenColumns.mjs +8 -1
- package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -1
- package/plugins/hiddenRows/contextMenuItem/hideRow.mjs +1 -1
- package/plugins/hiddenRows/contextMenuItem/showRow.js +1 -1
- package/plugins/hiddenRows/contextMenuItem/showRow.mjs +1 -1
- package/plugins/hiddenRows/hiddenRows.js +7 -0
- package/plugins/hiddenRows/hiddenRows.mjs +7 -0
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -1
- package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -1
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -1
- package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -1
- package/plugins/manualColumnMove/manualColumnMove.js +1 -1
- package/plugins/manualColumnMove/manualColumnMove.mjs +1 -1
- package/plugins/manualColumnResize/manualColumnResize.js +3 -3
- package/plugins/manualColumnResize/manualColumnResize.mjs +3 -3
- package/plugins/manualRowMove/manualRowMove.js +1 -1
- package/plugins/manualRowMove/manualRowMove.mjs +1 -1
- package/plugins/manualRowResize/manualRowResize.d.ts +1 -0
- package/plugins/manualRowResize/manualRowResize.js +11 -2
- package/plugins/manualRowResize/manualRowResize.mjs +11 -2
- package/plugins/mergeCells/cellsCollection.js +7 -0
- package/plugins/mergeCells/cellsCollection.mjs +7 -0
- package/plugins/mergeCells/mergeCells.js +7 -0
- package/plugins/mergeCells/mergeCells.mjs +7 -0
- package/plugins/nestedHeaders/stateManager/nodeModifiers/collapse.js +7 -0
- package/plugins/nestedHeaders/stateManager/nodeModifiers/collapse.mjs +7 -0
- package/plugins/nestedHeaders/stateManager/nodeModifiers/expand.js +7 -0
- package/plugins/nestedHeaders/stateManager/nodeModifiers/expand.mjs +7 -0
- package/plugins/nestedRows/nestedRows.js +7 -0
- package/plugins/nestedRows/nestedRows.mjs +7 -0
- package/plugins/trimRows/trimRows.js +7 -0
- package/plugins/trimRows/trimRows.mjs +7 -0
- package/selection/selection.js +163 -4
- package/selection/selection.mjs +163 -4
- package/selection/utils.js +7 -0
- package/selection/utils.mjs +7 -0
- package/settings.d.ts +1 -0
- package/shortcutContexts/commands/editor/closeAndSave.js +2 -3
- package/shortcutContexts/commands/editor/closeAndSave.mjs +2 -3
- package/shortcutContexts/commands/editor/closeAndSaveByArrowKeys.js +27 -0
- package/shortcutContexts/commands/editor/closeAndSaveByArrowKeys.mjs +24 -0
- package/shortcutContexts/commands/editor/closeAndSaveByEnter.js +11 -0
- package/shortcutContexts/commands/editor/closeAndSaveByEnter.mjs +8 -0
- package/shortcutContexts/commands/editor/index.js +3 -1
- package/shortcutContexts/commands/editor/index.mjs +3 -1
- package/shortcutContexts/editor.js +9 -1
- package/shortcutContexts/editor.mjs +9 -1
- package/shortcutContexts/index.js +1 -1
- package/shortcutContexts/index.mjs +1 -1
- package/shortcuts/keyObserver.js +7 -0
- package/shortcuts/keyObserver.mjs +7 -0
- package/shortcuts/utils.js +7 -0
- package/shortcuts/utils.mjs +7 -0
- package/tableView.js +1 -4
- package/tableView.mjs +1 -4
- package/translations/changesObservable/observable.js +7 -0
- package/translations/changesObservable/observable.mjs +7 -0
- package/translations/indexMapper.js +7 -0
- package/translations/indexMapper.mjs +8 -1
- package/utils/dataStructures/uniqueSet.js +7 -0
- package/utils/dataStructures/uniqueSet.mjs +7 -0
- package/utils/ghostTable.js +0 -4
- package/utils/ghostTable.mjs +0 -4
- package/utils/paginator.js +7 -0
- package/utils/paginator.mjs +7 -0
- package/validators/dateValidator/dateValidator.js +1 -3
- package/validators/dateValidator/dateValidator.mjs +1 -3
- package/validators/timeValidator/timeValidator.js +1 -3
- package/validators/timeValidator/timeValidator.mjs +1 -3
@@ -9,12 +9,19 @@ var _array = require("../../../helpers/array");
|
|
9
9
|
var _unicode = require("../../../helpers/unicode");
|
10
10
|
var _browser = require("../../../helpers/browser");
|
11
11
|
var _overlay = require("./overlay");
|
12
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
13
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
12
14
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
13
15
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
14
16
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
17
|
+
function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
|
18
|
+
function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
|
19
|
+
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
|
15
20
|
/**
|
16
21
|
* @class Overlays
|
17
22
|
*/
|
23
|
+
var _overlays = /*#__PURE__*/new WeakMap();
|
24
|
+
var _hasRenderingStateChanged = /*#__PURE__*/new WeakMap();
|
18
25
|
class Overlays {
|
19
26
|
/**
|
20
27
|
* @param {Walkontable} wotInstance The Walkontable instance. @todo refactoring remove.
|
@@ -32,6 +39,12 @@ class Overlays {
|
|
32
39
|
* @type {Walkontable}
|
33
40
|
*/
|
34
41
|
_defineProperty(this, "wot", null);
|
42
|
+
/**
|
43
|
+
* An array of the all overlays.
|
44
|
+
*
|
45
|
+
* @type {Overlay[]}
|
46
|
+
*/
|
47
|
+
_classPrivateFieldInitSpec(this, _overlays, []);
|
35
48
|
/**
|
36
49
|
* Refer to the TopOverlay instance.
|
37
50
|
*
|
@@ -81,6 +94,12 @@ class Overlays {
|
|
81
94
|
* @type {Settings}
|
82
95
|
*/
|
83
96
|
_defineProperty(this, "wtSettings", null);
|
97
|
+
/**
|
98
|
+
* Indicates whether the rendering state has changed for one of the overlays.
|
99
|
+
*
|
100
|
+
* @type {boolean}
|
101
|
+
*/
|
102
|
+
_classPrivateFieldInitSpec(this, _hasRenderingStateChanged, false);
|
84
103
|
/**
|
85
104
|
* The instance of the ResizeObserver that observes the size of the Walkontable wrapper element.
|
86
105
|
* In case of the size change detection the `onContainerElementResize` is fired.
|
@@ -140,7 +159,7 @@ class Overlays {
|
|
140
159
|
*/
|
141
160
|
getOverlays() {
|
142
161
|
let includeMaster = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
143
|
-
const overlays = [
|
162
|
+
const overlays = [..._classPrivateFieldGet(_overlays, this)];
|
144
163
|
if (includeMaster) {
|
145
164
|
overlays.push(this.wtTable);
|
146
165
|
}
|
@@ -185,29 +204,31 @@ class Overlays {
|
|
185
204
|
// TODO cond. Has no any visual impact. They're initially hidden in same way like left, top, and bottom overlays.
|
186
205
|
this.topInlineStartCornerOverlay = new _overlay.TopInlineStartCornerOverlay(...args, this.topOverlay, this.inlineStartOverlay);
|
187
206
|
this.bottomInlineStartCornerOverlay = new _overlay.BottomInlineStartCornerOverlay(...args, this.bottomOverlay, this.inlineStartOverlay);
|
207
|
+
_classPrivateFieldSet(_overlays, this, [this.topOverlay, this.bottomOverlay, this.inlineStartOverlay, this.topInlineStartCornerOverlay, this.bottomInlineStartCornerOverlay]);
|
188
208
|
}
|
189
209
|
|
190
210
|
/**
|
191
|
-
*
|
192
|
-
*
|
193
|
-
* @package
|
194
|
-
* @returns {boolean} Returns `true` if changes applied to overlay needs scroll synchronization.
|
211
|
+
* Runs logic for the overlays before the table is drawn.
|
195
212
|
*/
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
213
|
+
beforeDraw() {
|
214
|
+
_classPrivateFieldSet(_hasRenderingStateChanged, this, _classPrivateFieldGet(_overlays, this).reduce((acc, overlay) => {
|
215
|
+
return overlay.hasRenderingStateChanged() || acc;
|
216
|
+
}, false));
|
217
|
+
_classPrivateFieldGet(_overlays, this).forEach(overlay => overlay.updateStateOfRendering('before'));
|
218
|
+
}
|
200
219
|
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
220
|
+
/**
|
221
|
+
* Runs logic for the overlays after the table is drawn.
|
222
|
+
*/
|
223
|
+
afterDraw() {
|
224
|
+
this.syncScrollWithMaster();
|
225
|
+
_classPrivateFieldGet(_overlays, this).forEach(overlay => {
|
226
|
+
const hasRenderingStateChanged = overlay.hasRenderingStateChanged();
|
227
|
+
overlay.updateStateOfRendering('after');
|
228
|
+
if (hasRenderingStateChanged && !overlay.needFullRender) {
|
229
|
+
overlay.reset();
|
208
230
|
}
|
209
|
-
}
|
210
|
-
return syncScroll;
|
231
|
+
});
|
211
232
|
}
|
212
233
|
|
213
234
|
/**
|
@@ -447,6 +468,9 @@ class Overlays {
|
|
447
468
|
* Synchronize overlay scrollbars with the master scrollbar.
|
448
469
|
*/
|
449
470
|
syncScrollWithMaster() {
|
471
|
+
if (!_classPrivateFieldGet(_hasRenderingStateChanged, this)) {
|
472
|
+
return;
|
473
|
+
}
|
450
474
|
const master = this.topOverlay.mainTableScrollableElement;
|
451
475
|
const {
|
452
476
|
scrollLeft,
|
@@ -461,6 +485,7 @@ class Overlays {
|
|
461
485
|
if (this.inlineStartOverlay.needFullRender) {
|
462
486
|
this.inlineStartOverlay.clone.wtTable.holder.scrollTop = scrollTop; // todo rethink, *overlay.setScroll*()
|
463
487
|
}
|
488
|
+
_classPrivateFieldSet(_hasRenderingStateChanged, this, false);
|
464
489
|
}
|
465
490
|
|
466
491
|
/**
|
@@ -551,11 +576,8 @@ class Overlays {
|
|
551
576
|
|
552
577
|
/**
|
553
578
|
* Adjust overlays elements size and master table size.
|
554
|
-
*
|
555
|
-
* @param {boolean} [force=false] When `true`, it adjust the DOM nodes sizes for all overlays.
|
556
579
|
*/
|
557
580
|
adjustElementsSize() {
|
558
|
-
let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
559
581
|
const {
|
560
582
|
wtViewport
|
561
583
|
} = this.wot;
|
@@ -605,9 +627,9 @@ class Overlays {
|
|
605
627
|
this.hasScrollbarRight = true;
|
606
628
|
}
|
607
629
|
}
|
608
|
-
this.topOverlay.adjustElementsSize(
|
609
|
-
this.inlineStartOverlay.adjustElementsSize(
|
610
|
-
this.bottomOverlay.adjustElementsSize(
|
630
|
+
this.topOverlay.adjustElementsSize();
|
631
|
+
this.inlineStartOverlay.adjustElementsSize();
|
632
|
+
this.bottomOverlay.adjustElementsSize();
|
611
633
|
}
|
612
634
|
|
613
635
|
/**
|
@@ -1,8 +1,13 @@
|
|
1
1
|
import "core-js/modules/es.error.cause.js";
|
2
2
|
import "core-js/modules/es.array.push.js";
|
3
|
+
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
4
|
+
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
3
5
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
4
6
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
5
7
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
8
|
+
function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
|
9
|
+
function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
|
10
|
+
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
|
6
11
|
import { getScrollableElement, getScrollbarWidth } from "../../../helpers/dom/element.mjs";
|
7
12
|
import { requestAnimationFrame } from "../../../helpers/feature.mjs";
|
8
13
|
import { arrayEach } from "../../../helpers/array.mjs";
|
@@ -12,6 +17,8 @@ import { InlineStartOverlay, TopOverlay, TopInlineStartCornerOverlay, BottomOver
|
|
12
17
|
/**
|
13
18
|
* @class Overlays
|
14
19
|
*/
|
20
|
+
var _overlays = /*#__PURE__*/new WeakMap();
|
21
|
+
var _hasRenderingStateChanged = /*#__PURE__*/new WeakMap();
|
15
22
|
class Overlays {
|
16
23
|
/**
|
17
24
|
* @param {Walkontable} wotInstance The Walkontable instance. @todo refactoring remove.
|
@@ -29,6 +36,12 @@ class Overlays {
|
|
29
36
|
* @type {Walkontable}
|
30
37
|
*/
|
31
38
|
_defineProperty(this, "wot", null);
|
39
|
+
/**
|
40
|
+
* An array of the all overlays.
|
41
|
+
*
|
42
|
+
* @type {Overlay[]}
|
43
|
+
*/
|
44
|
+
_classPrivateFieldInitSpec(this, _overlays, []);
|
32
45
|
/**
|
33
46
|
* Refer to the TopOverlay instance.
|
34
47
|
*
|
@@ -78,6 +91,12 @@ class Overlays {
|
|
78
91
|
* @type {Settings}
|
79
92
|
*/
|
80
93
|
_defineProperty(this, "wtSettings", null);
|
94
|
+
/**
|
95
|
+
* Indicates whether the rendering state has changed for one of the overlays.
|
96
|
+
*
|
97
|
+
* @type {boolean}
|
98
|
+
*/
|
99
|
+
_classPrivateFieldInitSpec(this, _hasRenderingStateChanged, false);
|
81
100
|
/**
|
82
101
|
* The instance of the ResizeObserver that observes the size of the Walkontable wrapper element.
|
83
102
|
* In case of the size change detection the `onContainerElementResize` is fired.
|
@@ -137,7 +156,7 @@ class Overlays {
|
|
137
156
|
*/
|
138
157
|
getOverlays() {
|
139
158
|
let includeMaster = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
140
|
-
const overlays = [
|
159
|
+
const overlays = [..._classPrivateFieldGet(_overlays, this)];
|
141
160
|
if (includeMaster) {
|
142
161
|
overlays.push(this.wtTable);
|
143
162
|
}
|
@@ -182,29 +201,31 @@ class Overlays {
|
|
182
201
|
// TODO cond. Has no any visual impact. They're initially hidden in same way like left, top, and bottom overlays.
|
183
202
|
this.topInlineStartCornerOverlay = new TopInlineStartCornerOverlay(...args, this.topOverlay, this.inlineStartOverlay);
|
184
203
|
this.bottomInlineStartCornerOverlay = new BottomInlineStartCornerOverlay(...args, this.bottomOverlay, this.inlineStartOverlay);
|
204
|
+
_classPrivateFieldSet(_overlays, this, [this.topOverlay, this.bottomOverlay, this.inlineStartOverlay, this.topInlineStartCornerOverlay, this.bottomInlineStartCornerOverlay]);
|
185
205
|
}
|
186
206
|
|
187
207
|
/**
|
188
|
-
*
|
189
|
-
*
|
190
|
-
* @package
|
191
|
-
* @returns {boolean} Returns `true` if changes applied to overlay needs scroll synchronization.
|
208
|
+
* Runs logic for the overlays before the table is drawn.
|
192
209
|
*/
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
210
|
+
beforeDraw() {
|
211
|
+
_classPrivateFieldSet(_hasRenderingStateChanged, this, _classPrivateFieldGet(_overlays, this).reduce((acc, overlay) => {
|
212
|
+
return overlay.hasRenderingStateChanged() || acc;
|
213
|
+
}, false));
|
214
|
+
_classPrivateFieldGet(_overlays, this).forEach(overlay => overlay.updateStateOfRendering('before'));
|
215
|
+
}
|
197
216
|
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
217
|
+
/**
|
218
|
+
* Runs logic for the overlays after the table is drawn.
|
219
|
+
*/
|
220
|
+
afterDraw() {
|
221
|
+
this.syncScrollWithMaster();
|
222
|
+
_classPrivateFieldGet(_overlays, this).forEach(overlay => {
|
223
|
+
const hasRenderingStateChanged = overlay.hasRenderingStateChanged();
|
224
|
+
overlay.updateStateOfRendering('after');
|
225
|
+
if (hasRenderingStateChanged && !overlay.needFullRender) {
|
226
|
+
overlay.reset();
|
205
227
|
}
|
206
|
-
}
|
207
|
-
return syncScroll;
|
228
|
+
});
|
208
229
|
}
|
209
230
|
|
210
231
|
/**
|
@@ -444,6 +465,9 @@ class Overlays {
|
|
444
465
|
* Synchronize overlay scrollbars with the master scrollbar.
|
445
466
|
*/
|
446
467
|
syncScrollWithMaster() {
|
468
|
+
if (!_classPrivateFieldGet(_hasRenderingStateChanged, this)) {
|
469
|
+
return;
|
470
|
+
}
|
447
471
|
const master = this.topOverlay.mainTableScrollableElement;
|
448
472
|
const {
|
449
473
|
scrollLeft,
|
@@ -458,6 +482,7 @@ class Overlays {
|
|
458
482
|
if (this.inlineStartOverlay.needFullRender) {
|
459
483
|
this.inlineStartOverlay.clone.wtTable.holder.scrollTop = scrollTop; // todo rethink, *overlay.setScroll*()
|
460
484
|
}
|
485
|
+
_classPrivateFieldSet(_hasRenderingStateChanged, this, false);
|
461
486
|
}
|
462
487
|
|
463
488
|
/**
|
@@ -548,11 +573,8 @@ class Overlays {
|
|
548
573
|
|
549
574
|
/**
|
550
575
|
* Adjust overlays elements size and master table size.
|
551
|
-
*
|
552
|
-
* @param {boolean} [force=false] When `true`, it adjust the DOM nodes sizes for all overlays.
|
553
576
|
*/
|
554
577
|
adjustElementsSize() {
|
555
|
-
let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
556
578
|
const {
|
557
579
|
wtViewport
|
558
580
|
} = this.wot;
|
@@ -602,9 +624,9 @@ class Overlays {
|
|
602
624
|
this.hasScrollbarRight = true;
|
603
625
|
}
|
604
626
|
}
|
605
|
-
this.topOverlay.adjustElementsSize(
|
606
|
-
this.inlineStartOverlay.adjustElementsSize(
|
607
|
-
this.bottomOverlay.adjustElementsSize(
|
627
|
+
this.topOverlay.adjustElementsSize();
|
628
|
+
this.inlineStartOverlay.adjustElementsSize();
|
629
|
+
this.bottomOverlay.adjustElementsSize();
|
608
630
|
}
|
609
631
|
|
610
632
|
/**
|
@@ -4,6 +4,13 @@ exports.__esModule = true;
|
|
4
4
|
require("core-js/modules/es.error.cause.js");
|
5
5
|
require("core-js/modules/es.array.push.js");
|
6
6
|
require("core-js/modules/es.array.unscopables.flat.js");
|
7
|
+
require("core-js/modules/esnext.set.difference.v2.js");
|
8
|
+
require("core-js/modules/esnext.set.intersection.v2.js");
|
9
|
+
require("core-js/modules/esnext.set.is-disjoint-from.v2.js");
|
10
|
+
require("core-js/modules/esnext.set.is-subset-of.v2.js");
|
11
|
+
require("core-js/modules/esnext.set.is-superset-of.v2.js");
|
12
|
+
require("core-js/modules/esnext.set.symmetric-difference.v2.js");
|
13
|
+
require("core-js/modules/esnext.set.union.v2.js");
|
7
14
|
var _element = require("../../../../helpers/dom/element");
|
8
15
|
var _scanner2 = require("./scanner");
|
9
16
|
var _border = _interopRequireDefault(require("./border/border"));
|
@@ -1,6 +1,13 @@
|
|
1
1
|
import "core-js/modules/es.error.cause.js";
|
2
2
|
import "core-js/modules/es.array.push.js";
|
3
3
|
import "core-js/modules/es.array.unscopables.flat.js";
|
4
|
+
import "core-js/modules/esnext.set.difference.v2.js";
|
5
|
+
import "core-js/modules/esnext.set.intersection.v2.js";
|
6
|
+
import "core-js/modules/esnext.set.is-disjoint-from.v2.js";
|
7
|
+
import "core-js/modules/esnext.set.is-subset-of.v2.js";
|
8
|
+
import "core-js/modules/esnext.set.is-superset-of.v2.js";
|
9
|
+
import "core-js/modules/esnext.set.symmetric-difference.v2.js";
|
10
|
+
import "core-js/modules/esnext.set.union.v2.js";
|
4
11
|
function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
|
5
12
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
6
13
|
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
exports.__esModule = true;
|
4
4
|
require("core-js/modules/es.error.cause.js");
|
5
|
+
require("core-js/modules/esnext.set.difference.v2.js");
|
6
|
+
require("core-js/modules/esnext.set.intersection.v2.js");
|
7
|
+
require("core-js/modules/esnext.set.is-disjoint-from.v2.js");
|
8
|
+
require("core-js/modules/esnext.set.is-subset-of.v2.js");
|
9
|
+
require("core-js/modules/esnext.set.is-superset-of.v2.js");
|
10
|
+
require("core-js/modules/esnext.set.symmetric-difference.v2.js");
|
11
|
+
require("core-js/modules/esnext.set.union.v2.js");
|
5
12
|
var _element = require("../../../../helpers/dom/element");
|
6
13
|
function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
|
7
14
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
@@ -1,4 +1,11 @@
|
|
1
1
|
import "core-js/modules/es.error.cause.js";
|
2
|
+
import "core-js/modules/esnext.set.difference.v2.js";
|
3
|
+
import "core-js/modules/esnext.set.intersection.v2.js";
|
4
|
+
import "core-js/modules/esnext.set.is-disjoint-from.v2.js";
|
5
|
+
import "core-js/modules/esnext.set.is-subset-of.v2.js";
|
6
|
+
import "core-js/modules/esnext.set.is-superset-of.v2.js";
|
7
|
+
import "core-js/modules/esnext.set.symmetric-difference.v2.js";
|
8
|
+
import "core-js/modules/esnext.set.union.v2.js";
|
2
9
|
function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
|
3
10
|
function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
|
4
11
|
function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
|
@@ -251,7 +251,6 @@ class Table {
|
|
251
251
|
const rowHeadersCount = rowHeaders.length;
|
252
252
|
const columnHeaders = wtSettings.getSetting('columnHeaders');
|
253
253
|
const columnHeadersCount = columnHeaders.length;
|
254
|
-
let syncScroll = false;
|
255
254
|
let runFastDraw = fastDraw;
|
256
255
|
if (this.isMaster) {
|
257
256
|
this.holderOffset = (0, _element.offset)(this.holder);
|
@@ -266,7 +265,7 @@ class Table {
|
|
266
265
|
}
|
267
266
|
}
|
268
267
|
if (this.isMaster) {
|
269
|
-
|
268
|
+
wtOverlays.beforeDraw();
|
270
269
|
}
|
271
270
|
if (runFastDraw) {
|
272
271
|
if (this.isMaster) {
|
@@ -307,7 +306,7 @@ class Table {
|
|
307
306
|
let workspaceWidth;
|
308
307
|
if (this.isMaster) {
|
309
308
|
workspaceWidth = this.dataAccessObject.workspaceWidth;
|
310
|
-
|
309
|
+
wtViewport.containerWidth = null;
|
311
310
|
this.markOversizedColumnHeaders();
|
312
311
|
}
|
313
312
|
this.adjustColumnHeaderHeights();
|
@@ -315,10 +314,10 @@ class Table {
|
|
315
314
|
this.markOversizedRows();
|
316
315
|
}
|
317
316
|
if (this.isMaster) {
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
317
|
+
wtViewport.createVisibleCalculators();
|
318
|
+
wtViewport.createPartiallyVisibleCalculators();
|
319
|
+
wtOverlays.refresh(false);
|
320
|
+
wtOverlays.applyToDOM();
|
322
321
|
const hiderWidth = (0, _element.outerWidth)(this.hider);
|
323
322
|
const tableWidth = (0, _element.outerWidth)(this.TABLE);
|
324
323
|
if (hiderWidth !== 0 && tableWidth !== hiderWidth) {
|
@@ -326,9 +325,9 @@ class Table {
|
|
326
325
|
this.columnUtils.calculateWidths();
|
327
326
|
this.tableRenderer.renderer.colGroup.render();
|
328
327
|
}
|
329
|
-
if (workspaceWidth !==
|
328
|
+
if (workspaceWidth !== wtViewport.getWorkspaceWidth()) {
|
330
329
|
// workspace width changed though to shown/hidden vertical scrollbar. Let's reapply stretching
|
331
|
-
|
330
|
+
wtViewport.containerWidth = null;
|
332
331
|
this.columnUtils.calculateWidths();
|
333
332
|
this.tableRenderer.renderer.colGroup.render();
|
334
333
|
}
|
@@ -361,8 +360,8 @@ class Table {
|
|
361
360
|
} else {
|
362
361
|
this.dataAccessObject.selectionManager.setActiveOverlay(this.facadeGetter()).render(runFastDraw);
|
363
362
|
}
|
364
|
-
if (
|
365
|
-
wtOverlays.
|
363
|
+
if (this.isMaster) {
|
364
|
+
wtOverlays.afterDraw();
|
366
365
|
}
|
367
366
|
this.dataAccessObject.drawn = true;
|
368
367
|
return this;
|
@@ -247,7 +247,6 @@ class Table {
|
|
247
247
|
const rowHeadersCount = rowHeaders.length;
|
248
248
|
const columnHeaders = wtSettings.getSetting('columnHeaders');
|
249
249
|
const columnHeadersCount = columnHeaders.length;
|
250
|
-
let syncScroll = false;
|
251
250
|
let runFastDraw = fastDraw;
|
252
251
|
if (this.isMaster) {
|
253
252
|
this.holderOffset = offset(this.holder);
|
@@ -262,7 +261,7 @@ class Table {
|
|
262
261
|
}
|
263
262
|
}
|
264
263
|
if (this.isMaster) {
|
265
|
-
|
264
|
+
wtOverlays.beforeDraw();
|
266
265
|
}
|
267
266
|
if (runFastDraw) {
|
268
267
|
if (this.isMaster) {
|
@@ -303,7 +302,7 @@ class Table {
|
|
303
302
|
let workspaceWidth;
|
304
303
|
if (this.isMaster) {
|
305
304
|
workspaceWidth = this.dataAccessObject.workspaceWidth;
|
306
|
-
|
305
|
+
wtViewport.containerWidth = null;
|
307
306
|
this.markOversizedColumnHeaders();
|
308
307
|
}
|
309
308
|
this.adjustColumnHeaderHeights();
|
@@ -311,10 +310,10 @@ class Table {
|
|
311
310
|
this.markOversizedRows();
|
312
311
|
}
|
313
312
|
if (this.isMaster) {
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
313
|
+
wtViewport.createVisibleCalculators();
|
314
|
+
wtViewport.createPartiallyVisibleCalculators();
|
315
|
+
wtOverlays.refresh(false);
|
316
|
+
wtOverlays.applyToDOM();
|
318
317
|
const hiderWidth = outerWidth(this.hider);
|
319
318
|
const tableWidth = outerWidth(this.TABLE);
|
320
319
|
if (hiderWidth !== 0 && tableWidth !== hiderWidth) {
|
@@ -322,9 +321,9 @@ class Table {
|
|
322
321
|
this.columnUtils.calculateWidths();
|
323
322
|
this.tableRenderer.renderer.colGroup.render();
|
324
323
|
}
|
325
|
-
if (workspaceWidth !==
|
324
|
+
if (workspaceWidth !== wtViewport.getWorkspaceWidth()) {
|
326
325
|
// workspace width changed though to shown/hidden vertical scrollbar. Let's reapply stretching
|
327
|
-
|
326
|
+
wtViewport.containerWidth = null;
|
328
327
|
this.columnUtils.calculateWidths();
|
329
328
|
this.tableRenderer.renderer.colGroup.render();
|
330
329
|
}
|
@@ -357,8 +356,8 @@ class Table {
|
|
357
356
|
} else {
|
358
357
|
this.dataAccessObject.selectionManager.setActiveOverlay(this.facadeGetter()).render(runFastDraw);
|
359
358
|
}
|
360
|
-
if (
|
361
|
-
wtOverlays.
|
359
|
+
if (this.isMaster) {
|
360
|
+
wtOverlays.afterDraw();
|
362
361
|
}
|
363
362
|
this.dataAccessObject.drawn = true;
|
364
363
|
return this;
|
@@ -105,6 +105,10 @@ class ColumnStretching {
|
|
105
105
|
if (_classPrivateFieldGet(_stretchMode, this).call(this) === 'none') {
|
106
106
|
return;
|
107
107
|
}
|
108
|
+
this.stretchAllRatio = 0;
|
109
|
+
this.stretchAllColumnsWidth = [];
|
110
|
+
this.needVerifyLastColumnWidth = true;
|
111
|
+
this.stretchLastWidth = 0;
|
108
112
|
_classPrivateFieldSet(_totalTargetWidth, this, totalWidth);
|
109
113
|
let sumAll = 0;
|
110
114
|
for (let i = 0; i < _classPrivateFieldGet(_totalColumns, this).call(this); i++) {
|
@@ -102,6 +102,10 @@ export class ColumnStretching {
|
|
102
102
|
if (_classPrivateFieldGet(_stretchMode, this).call(this) === 'none') {
|
103
103
|
return;
|
104
104
|
}
|
105
|
+
this.stretchAllRatio = 0;
|
106
|
+
this.stretchAllColumnsWidth = [];
|
107
|
+
this.needVerifyLastColumnWidth = true;
|
108
|
+
this.stretchLastWidth = 0;
|
105
109
|
_classPrivateFieldSet(_totalTargetWidth, this, totalWidth);
|
106
110
|
let sumAll = 0;
|
107
111
|
for (let i = 0; i < _classPrivateFieldGet(_totalColumns, this).call(this); i++) {
|
@@ -398,15 +398,19 @@ class Viewport {
|
|
398
398
|
if (!this.rowsVisibleCalculator) {
|
399
399
|
return false;
|
400
400
|
}
|
401
|
-
|
401
|
+
let {
|
402
402
|
startRow,
|
403
|
-
endRow
|
404
|
-
isVisibleInTrimmingContainer
|
403
|
+
endRow
|
405
404
|
} = proposedRowsVisibleCalculator;
|
406
405
|
|
407
|
-
// if there are no fully visible rows at all
|
406
|
+
// if there are no fully visible rows at all...
|
408
407
|
if (startRow === null && endRow === null) {
|
409
|
-
|
408
|
+
if (!proposedRowsVisibleCalculator.isVisibleInTrimmingContainer) {
|
409
|
+
return true;
|
410
|
+
}
|
411
|
+
// ...use partially visible rows calculator to determine what render type is needed
|
412
|
+
startRow = this.rowsPartiallyVisibleCalculator.startRow;
|
413
|
+
endRow = this.rowsPartiallyVisibleCalculator.endRow;
|
410
414
|
}
|
411
415
|
const {
|
412
416
|
startRow: renderedStartRow,
|
@@ -432,15 +436,19 @@ class Viewport {
|
|
432
436
|
if (!this.columnsVisibleCalculator) {
|
433
437
|
return false;
|
434
438
|
}
|
435
|
-
|
439
|
+
let {
|
436
440
|
startColumn,
|
437
|
-
endColumn
|
438
|
-
isVisibleInTrimmingContainer
|
441
|
+
endColumn
|
439
442
|
} = proposedColumnsVisibleCalculator;
|
440
443
|
|
441
|
-
// if there are no fully visible columns at all
|
444
|
+
// if there are no fully visible columns at all...
|
442
445
|
if (startColumn === null && endColumn === null) {
|
443
|
-
|
446
|
+
if (!proposedColumnsVisibleCalculator.isVisibleInTrimmingContainer) {
|
447
|
+
return true;
|
448
|
+
}
|
449
|
+
// ...use partially visible columns calculator to determine what render type is needed
|
450
|
+
startColumn = this.columnsPartiallyVisibleCalculator.startColumn;
|
451
|
+
endColumn = this.columnsPartiallyVisibleCalculator.endColumn;
|
444
452
|
}
|
445
453
|
const {
|
446
454
|
startColumn: renderedStartColumn,
|
@@ -395,15 +395,19 @@ class Viewport {
|
|
395
395
|
if (!this.rowsVisibleCalculator) {
|
396
396
|
return false;
|
397
397
|
}
|
398
|
-
|
398
|
+
let {
|
399
399
|
startRow,
|
400
|
-
endRow
|
401
|
-
isVisibleInTrimmingContainer
|
400
|
+
endRow
|
402
401
|
} = proposedRowsVisibleCalculator;
|
403
402
|
|
404
|
-
// if there are no fully visible rows at all
|
403
|
+
// if there are no fully visible rows at all...
|
405
404
|
if (startRow === null && endRow === null) {
|
406
|
-
|
405
|
+
if (!proposedRowsVisibleCalculator.isVisibleInTrimmingContainer) {
|
406
|
+
return true;
|
407
|
+
}
|
408
|
+
// ...use partially visible rows calculator to determine what render type is needed
|
409
|
+
startRow = this.rowsPartiallyVisibleCalculator.startRow;
|
410
|
+
endRow = this.rowsPartiallyVisibleCalculator.endRow;
|
407
411
|
}
|
408
412
|
const {
|
409
413
|
startRow: renderedStartRow,
|
@@ -429,15 +433,19 @@ class Viewport {
|
|
429
433
|
if (!this.columnsVisibleCalculator) {
|
430
434
|
return false;
|
431
435
|
}
|
432
|
-
|
436
|
+
let {
|
433
437
|
startColumn,
|
434
|
-
endColumn
|
435
|
-
isVisibleInTrimmingContainer
|
438
|
+
endColumn
|
436
439
|
} = proposedColumnsVisibleCalculator;
|
437
440
|
|
438
|
-
// if there are no fully visible columns at all
|
441
|
+
// if there are no fully visible columns at all...
|
439
442
|
if (startColumn === null && endColumn === null) {
|
440
|
-
|
443
|
+
if (!proposedColumnsVisibleCalculator.isVisibleInTrimmingContainer) {
|
444
|
+
return true;
|
445
|
+
}
|
446
|
+
// ...use partially visible columns calculator to determine what render type is needed
|
447
|
+
startColumn = this.columnsPartiallyVisibleCalculator.startColumn;
|
448
|
+
endColumn = this.columnsPartiallyVisibleCalculator.endColumn;
|
441
449
|
}
|
442
450
|
const {
|
443
451
|
startColumn: renderedStartColumn,
|
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
|
+
## [14.4.0] - 2024-05-28
|
13
|
+
|
14
|
+
### Added
|
15
|
+
- Improved UX for column filtering [#10454](https://github.com/handsontable/handsontable/issues/10454)
|
16
|
+
- Extended the `manualRowResize` plugin with a method that retrieves the row height value from the last attempt at manually changing said row height. [#10941](https://github.com/handsontable/handsontable/pull/10941)
|
17
|
+
- Added an option to place the hook callbacks in a different order. [#10970](https://github.com/handsontable/handsontable/pull/10970)
|
18
|
+
- Add new `dataDotNotation` option which, when set as `false` allows using object keys with dots. [#10973](https://github.com/handsontable/handsontable/pull/10973)
|
19
|
+
|
20
|
+
### Changed
|
21
|
+
- Improved editor's behavior after dataset altering [#10963](https://github.com/handsontable/handsontable/pull/10963)
|
22
|
+
- React: Synchronized the `rollup` version between the wrappers and updated the `rollup` plugin dependencies. [#10962](https://github.com/handsontable/handsontable/pull/10962)
|
23
|
+
|
24
|
+
### Fixed
|
25
|
+
- Fixed unwanted table re-rerender for oversized rows/columns. [#10912](https://github.com/handsontable/handsontable/pull/10912)
|
26
|
+
- Fixed `Ctrl/Cmd` + `Enter` keyboard shortcut for comments [#10920](https://github.com/handsontable/handsontable/pull/10920)
|
27
|
+
- Fixed rows and columns unfreeze issue when headers are disabled [#10926](https://github.com/handsontable/handsontable/pull/10926)
|
28
|
+
- Fixed `imeFastEdit` option being reset after `updateSettings` call [#10933](https://github.com/handsontable/handsontable/pull/10933)
|
29
|
+
- Added horizontal scroll to the Filter's "by value" component [#10940](https://github.com/handsontable/handsontable/pull/10940)
|
30
|
+
- Improved fast typing values between editors [#10947](https://github.com/handsontable/handsontable/pull/10947)
|
31
|
+
- Removed double borders for column headers [#10948](https://github.com/handsontable/handsontable/pull/10948)
|
32
|
+
- Fixed column widths calculations when `stretchH: 'all'` option was used. [#10954](https://github.com/handsontable/handsontable/pull/10954)
|
33
|
+
- Fixed columns summary cell meta missing state after calling the `updateSettings` method. [#10955](https://github.com/handsontable/handsontable/pull/10955)
|
34
|
+
- Fixed sorting of the time of the `time` column types [#10956](https://github.com/handsontable/handsontable/pull/10956)
|
35
|
+
- Fixed data populate error when `correctFormat` was used [#10957](https://github.com/handsontable/handsontable/pull/10957)
|
36
|
+
- Fixed cell meta coordinates overwrite by _GhostTable_ [#10961](https://github.com/handsontable/handsontable/pull/10961)
|
37
|
+
- Fixed a problem where `setDataAtRowProp` threw an error when trying to save data into a trimmed-out column. [#10964](https://github.com/handsontable/handsontable/pull/10964)
|
38
|
+
- Fixed a problem where the table scrolled all the way right after inserting a new row over a table-wide selection. [#10965](https://github.com/handsontable/handsontable/pull/10965)
|
39
|
+
- Fixed a bug that prevents copy/cut/paste from outside elements [#10976](https://github.com/handsontable/handsontable/pull/10976)
|
40
|
+
- Fixed a problem where the autocomplete dropdown was not displayed with the right dimensions after previously filtering out all the choices. [#10977](https://github.com/handsontable/handsontable/pull/10977)
|
41
|
+
- Fixed a bug related to not clearing the dataset correctly for formulas [#10983](https://github.com/handsontable/handsontable/pull/10983)
|
42
|
+
- Improved typings for the ContextMenu plugin. [#10984](https://github.com/handsontable/handsontable/pull/10984)
|
43
|
+
- Added missing type for `namedExpressions` [#10986](https://github.com/handsontable/handsontable/pull/10986)
|
44
|
+
- Fixed double borders for row/column headers [#10988](https://github.com/handsontable/handsontable/pull/10988)
|
45
|
+
- Fixed a problem, where trying to render a hidden instance made it render all of its rows by disabling the rendering for hidden instances. [#10989](https://github.com/handsontable/handsontable/pull/10989)
|
46
|
+
- Fixed an error in numeric cell types that occur after entering non-numeric values. [#10931](https://github.com/handsontable/handsontable/pull/10931)
|
47
|
+
- React: Prevented the react wrapper from throwing errors on updating component props when the component had any init-only settings pre-declared. [#10921](https://github.com/handsontable/handsontable/pull/10921)
|
48
|
+
|
12
49
|
## [14.3.0] - 2024-04-16
|
13
50
|
|
14
51
|
### Added
|