handsontable 0.0.0-next-02c94b0-20240416 → 0.0.0-next-534415d-20240418

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

Potentially problematic release.


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

Files changed (63) hide show
  1. package/3rdparty/walkontable/src/calculator/viewportColumns.js +2 -2
  2. package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +2 -2
  3. package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -1
  4. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +1 -1
  5. package/3rdparty/walkontable/src/overlay/_base.js +24 -20
  6. package/3rdparty/walkontable/src/overlay/_base.mjs +24 -20
  7. package/3rdparty/walkontable/src/overlay/bottom.js +3 -6
  8. package/3rdparty/walkontable/src/overlay/bottom.mjs +3 -6
  9. package/3rdparty/walkontable/src/overlay/inlineStart.js +3 -6
  10. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +3 -6
  11. package/3rdparty/walkontable/src/overlay/top.js +3 -6
  12. package/3rdparty/walkontable/src/overlay/top.mjs +3 -6
  13. package/3rdparty/walkontable/src/overlays.js +46 -24
  14. package/3rdparty/walkontable/src/overlays.mjs +46 -24
  15. package/3rdparty/walkontable/src/table.js +10 -11
  16. package/3rdparty/walkontable/src/table.mjs +10 -11
  17. package/base.js +2 -2
  18. package/base.mjs +2 -2
  19. package/dataMap/metaManager/mods/extendMetaProperties.js +37 -31
  20. package/dataMap/metaManager/mods/extendMetaProperties.mjs +37 -31
  21. package/dist/handsontable.css +2 -2
  22. package/dist/handsontable.full.css +2 -2
  23. package/dist/handsontable.full.js +169 -152
  24. package/dist/handsontable.full.min.css +2 -2
  25. package/dist/handsontable.full.min.js +10 -10
  26. package/dist/handsontable.js +169 -152
  27. package/dist/handsontable.min.css +2 -2
  28. package/dist/handsontable.min.js +10 -10
  29. package/helpers/mixed.js +1 -1
  30. package/helpers/mixed.mjs +1 -1
  31. package/package.json +1 -1
  32. package/plugins/autoRowSize/autoRowSize.js +2 -2
  33. package/plugins/autoRowSize/autoRowSize.mjs +2 -2
  34. package/plugins/collapsibleColumns/collapsibleColumns.js +1 -1
  35. package/plugins/collapsibleColumns/collapsibleColumns.mjs +1 -1
  36. package/plugins/comments/comments.js +2 -8
  37. package/plugins/comments/comments.mjs +2 -8
  38. package/plugins/filters/filters.js +1 -1
  39. package/plugins/filters/filters.mjs +1 -1
  40. package/plugins/filters/ui/multipleSelect.js +15 -12
  41. package/plugins/filters/ui/multipleSelect.mjs +15 -12
  42. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -1
  43. package/plugins/hiddenColumns/contextMenuItem/hideColumn.mjs +1 -1
  44. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +1 -1
  45. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +1 -1
  46. package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -1
  47. package/plugins/hiddenRows/contextMenuItem/hideRow.mjs +1 -1
  48. package/plugins/hiddenRows/contextMenuItem/showRow.js +1 -1
  49. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +1 -1
  50. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -1
  51. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -1
  52. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -1
  53. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -1
  54. package/plugins/manualColumnMove/manualColumnMove.js +1 -1
  55. package/plugins/manualColumnMove/manualColumnMove.mjs +1 -1
  56. package/plugins/manualColumnResize/manualColumnResize.js +2 -2
  57. package/plugins/manualColumnResize/manualColumnResize.mjs +2 -2
  58. package/plugins/manualRowMove/manualRowMove.js +1 -1
  59. package/plugins/manualRowMove/manualRowMove.mjs +1 -1
  60. package/plugins/manualRowResize/manualRowResize.js +2 -2
  61. package/plugins/manualRowResize/manualRowResize.mjs +2 -2
  62. package/tableView.js +1 -4
  63. package/tableView.mjs +1 -4
@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 0.0.0-next-02c94b0-20240416
29
- * Release date: 16/04/2024 (built at 16/04/2024 08:48:15)
28
+ * Version: 0.0.0-next-534415d-20240418
29
+ * Release date: 16/04/2024 (built at 18/04/2024 11:28:10)
30
30
  */
31
31
  (function webpackUniversalModuleDefinition(root, factory) {
32
32
  if(typeof exports === 'object' && typeof module === 'object')
@@ -107,8 +107,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
107
107
  Handsontable.CellCoords = _src.CellCoords;
108
108
  Handsontable.CellRange = _src.CellRange;
109
109
  Handsontable.packageName = 'handsontable';
110
- Handsontable.buildDate = "16/04/2024 08:48:15";
111
- Handsontable.version = "0.0.0-next-02c94b0-20240416";
110
+ Handsontable.buildDate = "18/04/2024 11:28:10";
111
+ Handsontable.version = "0.0.0-next-534415d-20240418";
112
112
  Handsontable.languages = {
113
113
  dictionaryKeys: _registry.dictionaryKeys,
114
114
  getLanguageDictionary: _registry.getLanguageDictionary,
@@ -8551,7 +8551,7 @@ const domMessages = {
8551
8551
  function _injectProductInfo(key, element) {
8552
8552
  const hasValidType = !isEmpty(key);
8553
8553
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
8554
- const hotVersion = "0.0.0-next-02c94b0-20240416";
8554
+ const hotVersion = "0.0.0-next-534415d-20240418";
8555
8555
  let keyValidityDate;
8556
8556
  let consoleMessageState = 'invalid';
8557
8557
  let domMessageState = 'invalid';
@@ -15979,15 +15979,12 @@ class TableView {
15979
15979
 
15980
15980
  /**
15981
15981
  * Adjust overlays elements size and master table size.
15982
- *
15983
- * @param {boolean} [force=false] When `true`, it adjust the DOM nodes sizes for all overlays.
15984
15982
  */
15985
15983
  adjustElementsSize() {
15986
- let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
15987
15984
  if (this.hot.isRenderSuspended()) {
15988
15985
  this.postponedAdjustElementsSize = true;
15989
15986
  } else {
15990
- this._wt.wtOverlays.adjustElementsSize(force);
15987
+ this._wt.wtOverlays.adjustElementsSize();
15991
15988
  }
15992
15989
  }
15993
15990
 
@@ -17531,9 +17528,9 @@ class ViewportColumnsCalculator {
17531
17528
  const inlineStartColumnOffset = calculationType === _constants.FULLY_VISIBLE_TYPE ? firstVisibleColumnWidth : 0;
17532
17529
  if (
17533
17530
  // the table is to the left of the viewport
17534
- mostRightScrollOffset < -1 * _classPrivateFieldGet(_options, this).inlineStartOffset || scrollOffset > startPositions.at(-1) + inlineEndColumnOffset ||
17531
+ mostRightScrollOffset < -1 * _classPrivateFieldGet(_options, this).inlineStartOffset || scrollOffset >= startPositions.at(-1) + inlineEndColumnOffset ||
17535
17532
  // the table is to the right of the viewport
17536
- -1 * _classPrivateFieldGet(_options, this).scrollOffset - _classPrivateFieldGet(_options, this).viewportWidth > -1 * inlineStartColumnOffset) {
17533
+ -1 * _classPrivateFieldGet(_options, this).scrollOffset - _classPrivateFieldGet(_options, this).viewportWidth >= -1 * inlineStartColumnOffset) {
17537
17534
  this.isVisibleInTrimmingContainer = false;
17538
17535
  } else {
17539
17536
  this.isVisibleInTrimmingContainer = true;
@@ -17949,7 +17946,7 @@ class ViewportRowsCalculator {
17949
17946
  const mostBottomScrollOffset = scrollOffset + viewportHeight - horizontalScrollbarHeight;
17950
17947
  const topRowOffset = calculationType === _constants.FULLY_VISIBLE_TYPE ? firstVisibleRowHeight : 0;
17951
17948
  const bottomRowOffset = calculationType === _constants.FULLY_VISIBLE_TYPE ? 0 : lastVisibleRowHeight;
17952
- if (mostBottomScrollOffset < topRowOffset || scrollOffset > startPositions.at(-1) + bottomRowOffset) {
17949
+ if (mostBottomScrollOffset <= topRowOffset || scrollOffset >= startPositions.at(-1) + bottomRowOffset) {
17953
17950
  this.isVisibleInTrimmingContainer = false;
17954
17951
  } else {
17955
17952
  this.isVisibleInTrimmingContainer = true;
@@ -19764,6 +19761,7 @@ var _default = exports["default"] = Event;
19764
19761
 
19765
19762
  var _interopRequireDefault = __webpack_require__(1);
19766
19763
  exports.__esModule = true;
19764
+ __webpack_require__(8);
19767
19765
  __webpack_require__(90);
19768
19766
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(122));
19769
19767
  var _element = __webpack_require__(107);
@@ -19772,9 +19770,16 @@ var _array = __webpack_require__(113);
19772
19770
  var _unicode = __webpack_require__(126);
19773
19771
  var _browser = __webpack_require__(116);
19774
19772
  var _overlay = __webpack_require__(166);
19773
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
19774
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
19775
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
19776
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
19777
+ 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"); }
19775
19778
  /**
19776
19779
  * @class Overlays
19777
19780
  */
19781
+ var _overlays = /*#__PURE__*/new WeakMap();
19782
+ var _hasRenderingStateChanged = /*#__PURE__*/new WeakMap();
19778
19783
  class Overlays {
19779
19784
  /**
19780
19785
  * @param {Walkontable} wotInstance The Walkontable instance. @todo refactoring remove.
@@ -19792,6 +19797,12 @@ class Overlays {
19792
19797
  * @type {Walkontable}
19793
19798
  */
19794
19799
  (0, _defineProperty2.default)(this, "wot", null);
19800
+ /**
19801
+ * An array of the all overlays.
19802
+ *
19803
+ * @type {Overlay[]}
19804
+ */
19805
+ _classPrivateFieldInitSpec(this, _overlays, []);
19795
19806
  /**
19796
19807
  * Refer to the TopOverlay instance.
19797
19808
  *
@@ -19841,6 +19852,12 @@ class Overlays {
19841
19852
  * @type {Settings}
19842
19853
  */
19843
19854
  (0, _defineProperty2.default)(this, "wtSettings", null);
19855
+ /**
19856
+ * Indicates whether the rendering state has changed for one of the overlays.
19857
+ *
19858
+ * @type {boolean}
19859
+ */
19860
+ _classPrivateFieldInitSpec(this, _hasRenderingStateChanged, false);
19844
19861
  /**
19845
19862
  * The instance of the ResizeObserver that observes the size of the Walkontable wrapper element.
19846
19863
  * In case of the size change detection the `onContainerElementResize` is fired.
@@ -19900,7 +19917,7 @@ class Overlays {
19900
19917
  */
19901
19918
  getOverlays() {
19902
19919
  let includeMaster = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
19903
- const overlays = [this.topOverlay, this.topInlineStartCornerOverlay, this.inlineStartOverlay, this.bottomOverlay, this.bottomInlineStartCornerOverlay];
19920
+ const overlays = [..._classPrivateFieldGet(_overlays, this)];
19904
19921
  if (includeMaster) {
19905
19922
  overlays.push(this.wtTable);
19906
19923
  }
@@ -19945,29 +19962,31 @@ class Overlays {
19945
19962
  // TODO cond. Has no any visual impact. They're initially hidden in same way like left, top, and bottom overlays.
19946
19963
  this.topInlineStartCornerOverlay = new _overlay.TopInlineStartCornerOverlay(...args, this.topOverlay, this.inlineStartOverlay);
19947
19964
  this.bottomInlineStartCornerOverlay = new _overlay.BottomInlineStartCornerOverlay(...args, this.bottomOverlay, this.inlineStartOverlay);
19965
+ _classPrivateFieldSet(_overlays, this, [this.topOverlay, this.bottomOverlay, this.inlineStartOverlay, this.topInlineStartCornerOverlay, this.bottomInlineStartCornerOverlay]);
19948
19966
  }
19949
19967
 
19950
19968
  /**
19951
- * Update state of rendering, check if changed.
19952
- *
19953
- * @package
19954
- * @returns {boolean} Returns `true` if changes applied to overlay needs scroll synchronization.
19969
+ * Runs logic for the overlays before the table is drawn.
19955
19970
  */
19956
- updateStateOfRendering() {
19957
- let syncScroll = this.topOverlay.updateStateOfRendering();
19958
- syncScroll = this.bottomOverlay.updateStateOfRendering() || syncScroll;
19959
- syncScroll = this.inlineStartOverlay.updateStateOfRendering() || syncScroll;
19971
+ beforeDraw() {
19972
+ _classPrivateFieldSet(_hasRenderingStateChanged, this, _classPrivateFieldGet(_overlays, this).reduce((acc, overlay) => {
19973
+ return overlay.hasRenderingStateChanged() || acc;
19974
+ }, false));
19975
+ _classPrivateFieldGet(_overlays, this).forEach(overlay => overlay.updateStateOfRendering('before'));
19976
+ }
19960
19977
 
19961
- // todo refactoring: move conditions into updateStateOfRendering(),
19962
- if (this.inlineStartOverlay.needFullRender) {
19963
- if (this.topOverlay.needFullRender) {
19964
- syncScroll = this.topInlineStartCornerOverlay.updateStateOfRendering() || syncScroll;
19965
- }
19966
- if (this.bottomOverlay.needFullRender) {
19967
- syncScroll = this.bottomInlineStartCornerOverlay.updateStateOfRendering() || syncScroll;
19978
+ /**
19979
+ * Runs logic for the overlays after the table is drawn.
19980
+ */
19981
+ afterDraw() {
19982
+ this.syncScrollWithMaster();
19983
+ _classPrivateFieldGet(_overlays, this).forEach(overlay => {
19984
+ const hasRenderingStateChanged = overlay.hasRenderingStateChanged();
19985
+ overlay.updateStateOfRendering('after');
19986
+ if (hasRenderingStateChanged && !overlay.needFullRender) {
19987
+ overlay.reset();
19968
19988
  }
19969
- }
19970
- return syncScroll;
19989
+ });
19971
19990
  }
19972
19991
 
19973
19992
  /**
@@ -20207,6 +20226,9 @@ class Overlays {
20207
20226
  * Synchronize overlay scrollbars with the master scrollbar.
20208
20227
  */
20209
20228
  syncScrollWithMaster() {
20229
+ if (!_classPrivateFieldGet(_hasRenderingStateChanged, this)) {
20230
+ return;
20231
+ }
20210
20232
  const master = this.topOverlay.mainTableScrollableElement;
20211
20233
  const {
20212
20234
  scrollLeft,
@@ -20221,6 +20243,7 @@ class Overlays {
20221
20243
  if (this.inlineStartOverlay.needFullRender) {
20222
20244
  this.inlineStartOverlay.clone.wtTable.holder.scrollTop = scrollTop; // todo rethink, *overlay.setScroll*()
20223
20245
  }
20246
+ _classPrivateFieldSet(_hasRenderingStateChanged, this, false);
20224
20247
  }
20225
20248
 
20226
20249
  /**
@@ -20311,11 +20334,8 @@ class Overlays {
20311
20334
 
20312
20335
  /**
20313
20336
  * Adjust overlays elements size and master table size.
20314
- *
20315
- * @param {boolean} [force=false] When `true`, it adjust the DOM nodes sizes for all overlays.
20316
20337
  */
20317
20338
  adjustElementsSize() {
20318
- let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
20319
20339
  const {
20320
20340
  wtViewport
20321
20341
  } = this.wot;
@@ -20365,9 +20385,9 @@ class Overlays {
20365
20385
  this.hasScrollbarRight = true;
20366
20386
  }
20367
20387
  }
20368
- this.topOverlay.adjustElementsSize(force);
20369
- this.inlineStartOverlay.adjustElementsSize(force);
20370
- this.bottomOverlay.adjustElementsSize(force);
20388
+ this.topOverlay.adjustElementsSize();
20389
+ this.inlineStartOverlay.adjustElementsSize();
20390
+ this.bottomOverlay.adjustElementsSize();
20371
20391
  }
20372
20392
 
20373
20393
  /**
@@ -20890,7 +20910,6 @@ class Table {
20890
20910
  const rowHeadersCount = rowHeaders.length;
20891
20911
  const columnHeaders = wtSettings.getSetting('columnHeaders');
20892
20912
  const columnHeadersCount = columnHeaders.length;
20893
- let syncScroll = false;
20894
20913
  let runFastDraw = fastDraw;
20895
20914
  if (this.isMaster) {
20896
20915
  this.holderOffset = (0, _element.offset)(this.holder);
@@ -20905,7 +20924,7 @@ class Table {
20905
20924
  }
20906
20925
  }
20907
20926
  if (this.isMaster) {
20908
- syncScroll = wtOverlays.updateStateOfRendering();
20927
+ wtOverlays.beforeDraw();
20909
20928
  }
20910
20929
  if (runFastDraw) {
20911
20930
  if (this.isMaster) {
@@ -20946,7 +20965,7 @@ class Table {
20946
20965
  let workspaceWidth;
20947
20966
  if (this.isMaster) {
20948
20967
  workspaceWidth = this.dataAccessObject.workspaceWidth;
20949
- this.dataAccessObject.wtViewport.containerWidth = null;
20968
+ wtViewport.containerWidth = null;
20950
20969
  this.markOversizedColumnHeaders();
20951
20970
  }
20952
20971
  this.adjustColumnHeaderHeights();
@@ -20954,10 +20973,10 @@ class Table {
20954
20973
  this.markOversizedRows();
20955
20974
  }
20956
20975
  if (this.isMaster) {
20957
- this.dataAccessObject.wtViewport.createVisibleCalculators();
20958
- this.dataAccessObject.wtViewport.createPartiallyVisibleCalculators();
20959
- this.dataAccessObject.wtOverlays.refresh(false);
20960
- this.dataAccessObject.wtOverlays.applyToDOM();
20976
+ wtViewport.createVisibleCalculators();
20977
+ wtViewport.createPartiallyVisibleCalculators();
20978
+ wtOverlays.refresh(false);
20979
+ wtOverlays.applyToDOM();
20961
20980
  const hiderWidth = (0, _element.outerWidth)(this.hider);
20962
20981
  const tableWidth = (0, _element.outerWidth)(this.TABLE);
20963
20982
  if (hiderWidth !== 0 && tableWidth !== hiderWidth) {
@@ -20965,9 +20984,9 @@ class Table {
20965
20984
  this.columnUtils.calculateWidths();
20966
20985
  this.tableRenderer.renderer.colGroup.render();
20967
20986
  }
20968
- if (workspaceWidth !== this.dataAccessObject.wtViewport.getWorkspaceWidth()) {
20987
+ if (workspaceWidth !== wtViewport.getWorkspaceWidth()) {
20969
20988
  // workspace width changed though to shown/hidden vertical scrollbar. Let's reapply stretching
20970
- this.dataAccessObject.wtViewport.containerWidth = null;
20989
+ wtViewport.containerWidth = null;
20971
20990
  this.columnUtils.calculateWidths();
20972
20991
  this.tableRenderer.renderer.colGroup.render();
20973
20992
  }
@@ -21000,8 +21019,8 @@ class Table {
21000
21019
  } else {
21001
21020
  this.dataAccessObject.selectionManager.setActiveOverlay(this.facadeGetter()).render(runFastDraw);
21002
21021
  }
21003
- if (syncScroll) {
21004
- wtOverlays.syncScrollWithMaster();
21022
+ if (this.isMaster) {
21023
+ wtOverlays.afterDraw();
21005
21024
  }
21006
21025
  this.dataAccessObject.drawn = true;
21007
21026
  return this;
@@ -24057,7 +24076,6 @@ __webpack_require__(8);
24057
24076
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(122));
24058
24077
  var _element = __webpack_require__(107);
24059
24078
  var _object = __webpack_require__(117);
24060
- var _array = __webpack_require__(113);
24061
24079
  var _console = __webpack_require__(130);
24062
24080
  var _constants = __webpack_require__(193);
24063
24081
  var _clone = _interopRequireDefault(__webpack_require__(194));
@@ -24110,24 +24128,35 @@ class Overlay {
24110
24128
  this.holder = holder;
24111
24129
  this.wtRootElement = wtRootElement;
24112
24130
  this.trimmingContainer = (0, _element.getTrimmingContainer)(this.hider.parentNode.parentNode);
24113
- this.updateStateOfRendering();
24131
+ this.needFullRender = this.shouldBeRendered();
24114
24132
  this.clone = this.makeClone();
24115
24133
  }
24116
24134
 
24117
24135
  /**
24118
- * Update internal state of object with an information about the need of full rendering of the overlay.
24136
+ * Checks if the overlay rendering state has changed.
24137
+ *
24138
+ * @returns {boolean}
24139
+ */
24140
+ hasRenderingStateChanged() {
24141
+ return this.needFullRender !== this.shouldBeRendered();
24142
+ }
24143
+
24144
+ /**
24145
+ * Updates internal state with an information about the need of full rendering of the overlay in the next draw cycles.
24119
24146
  *
24120
- * @returns {boolean} Returns `true` if the state has changed since the last check.
24147
+ * If the state is changed to render the overlay, the `needFullRender` property is set to `true` which means that
24148
+ * the overlay will be fully rendered in the current draw cycle. If the state is changed to not render the overlay,
24149
+ * the `needFullRender` property is set to `false` which means that the overlay will be fully rendered in the
24150
+ * current draw cycle but it will not be rendered in the next draw cycles.
24151
+ *
24152
+ * @param {'before' | 'after'} drawPhase The phase of the rendering process.
24121
24153
  */
24122
- updateStateOfRendering() {
24123
- // todo refactoring: conceive introducing final state machine, normal -> changed (once) -> needs-full-render -> ...? -> normal
24124
- const previousState = this.needFullRender;
24125
- this.needFullRender = this.shouldBeRendered();
24126
- const changed = previousState !== this.needFullRender;
24127
- if (changed && !this.needFullRender) {
24128
- this.reset();
24154
+ updateStateOfRendering(drawPhase) {
24155
+ if (drawPhase === 'before' && this.shouldBeRendered()) {
24156
+ this.needFullRender = true;
24157
+ } else if (drawPhase === 'after' && !this.shouldBeRendered()) {
24158
+ this.needFullRender = false;
24129
24159
  }
24130
- return changed;
24131
24160
  }
24132
24161
 
24133
24162
  /**
@@ -24354,27 +24383,21 @@ class Overlay {
24354
24383
  */
24355
24384
  refresh() {
24356
24385
  let fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
24357
- // When hot settings are changed we allow to refresh overlay once before blocking
24358
- const nextCycleRenderFlag = this.shouldBeRendered();
24359
- if (this.clone && (this.needFullRender || nextCycleRenderFlag)) {
24386
+ if (this.needFullRender) {
24360
24387
  this.clone.draw(fastDraw);
24361
24388
  }
24362
- this.needFullRender = nextCycleRenderFlag;
24363
24389
  }
24364
24390
 
24365
24391
  /**
24366
24392
  * Reset overlay styles to initial values.
24367
24393
  */
24368
24394
  reset() {
24369
- if (!this.clone) {
24370
- return;
24371
- }
24372
24395
  const holder = this.clone.wtTable.holder; // todo refactoring: DEMETER
24373
24396
  const hider = this.clone.wtTable.hider; // todo refactoring: DEMETER
24374
24397
  const holderStyle = holder.style;
24375
24398
  const hiderStyle = hider.style;
24376
24399
  const rootStyle = holder.parentNode.style;
24377
- (0, _array.arrayEach)([holderStyle, hiderStyle, rootStyle], style => {
24400
+ [holderStyle, hiderStyle, rootStyle].forEach(style => {
24378
24401
  style.width = '';
24379
24402
  style.height = '';
24380
24403
  });
@@ -25194,7 +25217,7 @@ class BottomOverlay extends _base.Overlay {
25194
25217
  * @returns {boolean}
25195
25218
  */
25196
25219
  resetFixedPosition() {
25197
- if (!this.needFullRender || !this.wot.wtTable.holder.parentNode) {
25220
+ if (!this.needFullRender || !this.shouldBeRendered() || !this.wot.wtTable.holder.parentNode) {
25198
25221
  // removed from DOM
25199
25222
  return false;
25200
25223
  }
@@ -25291,14 +25314,11 @@ class BottomOverlay extends _base.Overlay {
25291
25314
  }
25292
25315
 
25293
25316
  /**
25294
- * Adjust overlay root element, childs and master table element sizes (width, height).
25295
- *
25296
- * @param {boolean} [force=false] When `true`, it adjusts the DOM nodes sizes for that overlay.
25317
+ * Adjust overlay root element, children and master table element sizes (width, height).
25297
25318
  */
25298
25319
  adjustElementsSize() {
25299
- let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
25300
25320
  this.updateTrimmingContainer();
25301
- if (this.needFullRender || force) {
25321
+ if (this.needFullRender) {
25302
25322
  this.adjustRootElementSize();
25303
25323
  this.adjustRootChildrenSize();
25304
25324
  }
@@ -25711,7 +25731,7 @@ class InlineStartOverlay extends _base.Overlay {
25711
25731
  const {
25712
25732
  wtTable
25713
25733
  } = this.wot;
25714
- if (!this.needFullRender || !wtTable.holder.parentNode) {
25734
+ if (!this.needFullRender || !this.shouldBeRendered() || !wtTable.holder.parentNode) {
25715
25735
  // removed from DOM
25716
25736
  return false;
25717
25737
  }
@@ -25783,14 +25803,11 @@ class InlineStartOverlay extends _base.Overlay {
25783
25803
  }
25784
25804
 
25785
25805
  /**
25786
- * Adjust overlay root element, childs and master table element sizes (width, height).
25787
- *
25788
- * @param {boolean} [force=false] When `true`, it adjusts the DOM nodes sizes for that overlay.
25806
+ * Adjust overlay root element, children and master table element sizes (width, height).
25789
25807
  */
25790
25808
  adjustElementsSize() {
25791
- let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
25792
25809
  this.updateTrimmingContainer();
25793
- if (this.needFullRender || force) {
25810
+ if (this.needFullRender) {
25794
25811
  this.adjustRootElementSize();
25795
25812
  this.adjustRootChildrenSize();
25796
25813
  }
@@ -28015,7 +28032,7 @@ class TopOverlay extends _base.Overlay {
28015
28032
  * @returns {boolean}
28016
28033
  */
28017
28034
  resetFixedPosition() {
28018
- if (!this.needFullRender || !this.wot.wtTable.holder.parentNode) {
28035
+ if (!this.needFullRender || !this.shouldBeRendered() || !this.wot.wtTable.holder.parentNode) {
28019
28036
  // removed from DOM
28020
28037
  return false;
28021
28038
  }
@@ -28103,14 +28120,11 @@ class TopOverlay extends _base.Overlay {
28103
28120
  }
28104
28121
 
28105
28122
  /**
28106
- * Adjust overlay root element, childs and master table element sizes (width, height).
28107
- *
28108
- * @param {boolean} [force=false] When `true`, it adjusts the DOM nodes sizes for that overlay.
28123
+ * Adjust overlay root element, children and master table element sizes (width, height).
28109
28124
  */
28110
28125
  adjustElementsSize() {
28111
- let force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
28112
28126
  this.updateTrimmingContainer();
28113
- if (this.needFullRender || force) {
28127
+ if (this.needFullRender) {
28114
28128
  this.adjustRootElementSize();
28115
28129
  this.adjustRootChildrenSize();
28116
28130
  }
@@ -42738,7 +42752,13 @@ exports.DynamicCellMetaMod = DynamicCellMetaMod;
42738
42752
  var _interopRequireDefault = __webpack_require__(1);
42739
42753
  exports.__esModule = true;
42740
42754
  __webpack_require__(8);
42755
+ __webpack_require__(90);
42741
42756
  var _defineProperty2 = _interopRequireDefault(__webpack_require__(122));
42757
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
42758
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
42759
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
42760
+ 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"); }
42761
+ var _initOnlyCallback = /*#__PURE__*/new WeakMap();
42742
42762
  /**
42743
42763
  * @class ExtendMetaPropertiesMod
42744
42764
  */
@@ -42756,11 +42776,7 @@ class ExtendMetaPropertiesMod {
42756
42776
  * @type {Map}
42757
42777
  */
42758
42778
  (0, _defineProperty2.default)(this, "propDescriptors", new Map([['ariaTags', {
42759
- onChange(propName, value, isInitialChange) {
42760
- if (!isInitialChange) {
42761
- throw new Error(`The \`${propName}\` option can not be updated after the Handsontable instance was initialized.`);
42762
- }
42763
- }
42779
+ initOnly: true
42764
42780
  }], ['fixedColumnsLeft', {
42765
42781
  target: 'fixedColumnsStart',
42766
42782
  onChange(propName) {
@@ -42773,48 +42789,52 @@ class ExtendMetaPropertiesMod {
42773
42789
  }
42774
42790
  }
42775
42791
  }], ['layoutDirection', {
42776
- onChange(propName, value, isInitialChange) {
42777
- if (!isInitialChange) {
42778
- throw new Error(`The \`${propName}\` option can not be updated after the Handsontable is initialized.`);
42779
- }
42792
+ initOnly: true
42793
+ }], ['renderAllColumns', {
42794
+ initOnly: true
42795
+ }], ['renderAllRows', {
42796
+ initOnly: true
42797
+ }]]));
42798
+ /**
42799
+ * Callback called when the prop is marked as `initOnly`.
42800
+ *
42801
+ * @param {string} propName The property name.
42802
+ * @param {*} value The new value.
42803
+ * @param {boolean} isInitialChange Is the change initial.
42804
+ */
42805
+ _classPrivateFieldInitSpec(this, _initOnlyCallback, (propName, value, isInitialChange) => {
42806
+ if (!isInitialChange) {
42807
+ throw new Error(`The \`${propName}\` option can not be updated after the Handsontable is initialized.`);
42780
42808
  }
42781
- }]
42782
- // Temporary commented out due to the bug in the React wrapper.
42783
- // ['renderAllColumns', {
42784
- // onChange(propName, value, isInitialChange) {
42785
- // if (!isInitialChange) {
42786
- // throw new Error(`The \`${propName}\` option can not be updated after the Handsontable is initialized.`);
42787
- // }
42788
- // }
42789
- // }],
42790
- // ['renderAllRows', {
42791
- // onChange(propName, value, isInitialChange) {
42792
- // if (!isInitialChange) {
42793
- // throw new Error(`The \`${propName}\` option can not be updated after the Handsontable is initialized.`);
42794
- // }
42795
- // }
42796
- // }],
42797
- ]));
42809
+ });
42798
42810
  this.metaManager = metaManager;
42799
42811
  this.extendMetaProps();
42800
42812
  }
42801
-
42802
42813
  /**
42803
42814
  * Extends the meta options based on the object descriptors from the `propDescriptors` list.
42804
42815
  */
42805
42816
  extendMetaProps() {
42806
42817
  this.propDescriptors.forEach((descriptor, alias) => {
42807
42818
  const {
42819
+ initOnly,
42808
42820
  target,
42809
- onChange = () => {}
42821
+ onChange
42810
42822
  } = descriptor;
42811
42823
  const hasTarget = typeof target === 'string';
42812
42824
  const targetProp = hasTarget ? target : alias;
42813
42825
  const origProp = `_${targetProp}`;
42814
42826
  this.metaManager.globalMeta.meta[origProp] = this.metaManager.globalMeta.meta[targetProp];
42815
- this.installPropWatcher(alias, origProp, onChange);
42816
- if (hasTarget) {
42817
- this.installPropWatcher(target, origProp, onChange);
42827
+ if (onChange) {
42828
+ this.installPropWatcher(alias, origProp, onChange);
42829
+ if (hasTarget) {
42830
+ this.installPropWatcher(target, origProp, onChange);
42831
+ }
42832
+ } else if (initOnly) {
42833
+ this.installPropWatcher(alias, origProp, _classPrivateFieldGet(_initOnlyCallback, this));
42834
+ if (!this.metaManager.globalMeta.meta._initOnlySettings) {
42835
+ this.metaManager.globalMeta.meta._initOnlySettings = [];
42836
+ }
42837
+ this.metaManager.globalMeta.meta._initOnlySettings.push(alias);
42818
42838
  }
42819
42839
  });
42820
42840
  }
@@ -53486,7 +53506,7 @@ class AutoRowSize extends _base.BasePlugin {
53486
53506
  this.inProgress = false;
53487
53507
 
53488
53508
  // @TODO Should call once per render cycle, currently fired separately in different plugins
53489
- this.hot.view.adjustElementsSize(true);
53509
+ this.hot.view.adjustElementsSize();
53490
53510
 
53491
53511
  // tmp
53492
53512
  if (this.hot.view._wt.wtOverlays.inlineStartOverlay.needFullRender) {
@@ -53510,7 +53530,7 @@ class AutoRowSize extends _base.BasePlugin {
53510
53530
  loop();
53511
53531
  } else {
53512
53532
  this.inProgress = false;
53513
- this.hot.view.adjustElementsSize(false);
53533
+ this.hot.view.adjustElementsSize();
53514
53534
  }
53515
53535
  }
53516
53536
 
@@ -54508,7 +54528,7 @@ class CollapsibleColumns extends _base.BasePlugin {
54508
54528
  }
54509
54529
  this.hot.runHooks(actionTranslator.afterHook, currentCollapsedColumns, destinationCollapsedColumns, isActionPossible, isActionPerformed);
54510
54530
  this.hot.render();
54511
- this.hot.view.adjustElementsSize(true);
54531
+ this.hot.view.adjustElementsSize();
54512
54532
  }
54513
54533
 
54514
54534
  /**
@@ -57539,10 +57559,7 @@ class Comments extends _base.BasePlugin {
57539
57559
  this.hide();
57540
57560
  manager.setActiveContextName('grid');
57541
57561
  },
57542
- runOnlyIf: () => {
57543
- var _this$hot$getSelected2;
57544
- return ((_this$hot$getSelected2 = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected2 === void 0 ? void 0 : _this$hot$getSelected2.highlight.isCell()) && _classPrivateFieldGet(_editor, this).isVisible();
57545
- },
57562
+ runOnlyIf: () => _classPrivateFieldGet(_editor, this).isVisible() && _classPrivateFieldGet(_editor, this).isFocused(),
57546
57563
  group: SHORTCUTS_GROUP
57547
57564
  });
57548
57565
  pluginContext.addShortcut({
@@ -57551,10 +57568,7 @@ class Comments extends _base.BasePlugin {
57551
57568
  this.hide();
57552
57569
  manager.setActiveContextName('grid');
57553
57570
  },
57554
- runOnlyIf: () => {
57555
- var _this$hot$getSelected3;
57556
- return ((_this$hot$getSelected3 = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected3 === void 0 ? void 0 : _this$hot$getSelected3.highlight.isCell()) && _classPrivateFieldGet(_editor, this).isVisible();
57557
- },
57571
+ runOnlyIf: () => _classPrivateFieldGet(_editor, this).isVisible() && _classPrivateFieldGet(_editor, this).isFocused(),
57558
57572
  group: SHORTCUTS_GROUP
57559
57573
  });
57560
57574
  }
@@ -66485,7 +66499,7 @@ class Filters extends _base.BasePlugin {
66485
66499
  }
66486
66500
  }
66487
66501
  this.hot.runHooks('afterFilter', conditions);
66488
- this.hot.view.adjustElementsSize(true);
66502
+ this.hot.view.adjustElementsSize();
66489
66503
  this.hot.render();
66490
66504
  if (this.hot.selection.isSelected()) {
66491
66505
  this.hot.selectCell(navigableHeaders ? -1 : 0, this.hot.getSelectedRangeLast().highlight.col);
@@ -69624,7 +69638,6 @@ __webpack_require__(8);
69624
69638
  __webpack_require__(90);
69625
69639
  var _element = __webpack_require__(107);
69626
69640
  var _object = __webpack_require__(117);
69627
- var _array = __webpack_require__(113);
69628
69641
  var _unicode = __webpack_require__(126);
69629
69642
  var _function = __webpack_require__(115);
69630
69643
  var _data = __webpack_require__(223);
@@ -69870,6 +69883,7 @@ class MultipleSelectUI extends _base.BaseUI {
69870
69883
  beforeOnCellMouseUp: () => {
69871
69884
  _classPrivateFieldGet(_itemsBox, this).listen();
69872
69885
  },
69886
+ hiddenRows: true,
69873
69887
  maxCols: 1,
69874
69888
  autoWrapCol: true,
69875
69889
  height: 110,
@@ -69961,13 +69975,16 @@ class MultipleSelectUI extends _base.BaseUI {
69961
69975
  exports.MultipleSelectUI = MultipleSelectUI;
69962
69976
  function _onInput(event) {
69963
69977
  const value = event.target.value.toLocaleLowerCase(this.getLocale());
69964
- let filteredItems;
69965
- if (value === '') {
69966
- filteredItems = [..._classPrivateFieldGet(_items, this)];
69967
- } else {
69968
- filteredItems = (0, _array.arrayFilter)(_classPrivateFieldGet(_items, this), item => `${item.value}`.toLocaleLowerCase(this.getLocale()).indexOf(value) >= 0);
69969
- }
69970
- _classPrivateFieldGet(_itemsBox, this).loadData(filteredItems);
69978
+ const hiddenRows = _classPrivateFieldGet(_itemsBox, this).getPlugin('hiddenRows');
69979
+ hiddenRows.showRows(hiddenRows.getHiddenRows());
69980
+ _classPrivateFieldGet(_items, this).forEach((item, index) => {
69981
+ item.checked = `${item.value}`.toLocaleLowerCase(this.getLocale()).indexOf(value) >= 0;
69982
+ if (!item.checked) {
69983
+ hiddenRows.hideRow(index);
69984
+ }
69985
+ });
69986
+ _classPrivateFieldGet(_itemsBox, this).view.adjustElementsSize();
69987
+ _classPrivateFieldGet(_itemsBox, this).render();
69971
69988
  }
69972
69989
  /**
69973
69990
  * 'keydown' event listener for input element.
@@ -69992,7 +70009,7 @@ function _onInputKeyDown(event) {
69992
70009
  function _onSelectAllClick(event) {
69993
70010
  const changes = [];
69994
70011
  event.preventDefault();
69995
- (0, _array.arrayEach)(_classPrivateFieldGet(_itemsBox, this).getSourceData(), (row, rowIndex) => {
70012
+ _classPrivateFieldGet(_itemsBox, this).getSourceData().forEach((row, rowIndex) => {
69996
70013
  row.checked = true;
69997
70014
  changes.push((0, _data.dataRowToChangesArray)(row, rowIndex)[0]);
69998
70015
  });
@@ -70006,7 +70023,7 @@ function _onSelectAllClick(event) {
70006
70023
  function _onClearAllClick(event) {
70007
70024
  const changes = [];
70008
70025
  event.preventDefault();
70009
- (0, _array.arrayEach)(_classPrivateFieldGet(_itemsBox, this).getSourceData(), (row, rowIndex) => {
70026
+ _classPrivateFieldGet(_itemsBox, this).getSourceData().forEach((row, rowIndex) => {
70010
70027
  row.checked = false;
70011
70028
  changes.push((0, _data.dataRowToChangesArray)(row, rowIndex)[0]);
70012
70029
  });
@@ -70022,7 +70039,7 @@ var _default = exports["default"] = MultipleSelectUI;
70022
70039
  */
70023
70040
  function valueToItems(availableItems, selectedValue) {
70024
70041
  const arrayAssertion = (0, _utils.createArrayAssertion)(selectedValue);
70025
- return (0, _array.arrayMap)(availableItems, item => {
70042
+ return availableItems.map(item => {
70026
70043
  item.checked = arrayAssertion(item.value);
70027
70044
  return item;
70028
70045
  });
@@ -70036,7 +70053,7 @@ function valueToItems(availableItems, selectedValue) {
70036
70053
  */
70037
70054
  function itemsToValue(availableItems) {
70038
70055
  const items = [];
70039
- (0, _array.arrayEach)(availableItems, item => {
70056
+ availableItems.forEach(item => {
70040
70057
  if (item.checked) {
70041
70058
  items.push(item.value);
70042
70059
  }
@@ -73857,7 +73874,7 @@ function hideColumnItem(hiddenColumnsPlugin) {
73857
73874
  this.deselectCell();
73858
73875
  }
73859
73876
  this.render();
73860
- this.view.adjustElementsSize(true);
73877
+ this.view.adjustElementsSize();
73861
73878
  },
73862
73879
  disabled: false,
73863
73880
  hidden() {
@@ -73909,7 +73926,7 @@ function showColumnItem(hiddenColumnsPlugin) {
73909
73926
  // We render columns at first. It was needed for getting fixed columns.
73910
73927
  // Please take a look at #6864 for broader description.
73911
73928
  this.render();
73912
- this.view.adjustElementsSize(true);
73929
+ this.view.adjustElementsSize();
73913
73930
  const allColumnsSelected = endVisualColumn - startVisualColumn + 1 === this.countCols();
73914
73931
 
73915
73932
  // When all headers needs to be selected then do nothing. The header selection is
@@ -74549,7 +74566,7 @@ function hideRowItem(hiddenRowsPlugin) {
74549
74566
  this.deselectCell();
74550
74567
  }
74551
74568
  this.render();
74552
- this.view.adjustElementsSize(true);
74569
+ this.view.adjustElementsSize();
74553
74570
  },
74554
74571
  disabled: false,
74555
74572
  hidden() {
@@ -74601,7 +74618,7 @@ function showRowItem(hiddenRowsPlugin) {
74601
74618
  // We render rows at first. It was needed for getting fixed rows.
74602
74619
  // Please take a look at #6864 for broader description.
74603
74620
  this.render();
74604
- this.view.adjustElementsSize(true);
74621
+ this.view.adjustElementsSize();
74605
74622
  const allRowsSelected = endVisualRow - startVisualRow + 1 === this.countRows();
74606
74623
 
74607
74624
  // When all headers needs to be selected then do nothing. The header selection is
@@ -74915,7 +74932,7 @@ function freezeColumnItem(manualColumnFreezePlugin) {
74915
74932
  }] = selected;
74916
74933
  manualColumnFreezePlugin.freezeColumn(selectedColumn);
74917
74934
  this.render();
74918
- this.view.adjustElementsSize(true);
74935
+ this.view.adjustElementsSize();
74919
74936
  },
74920
74937
  hidden() {
74921
74938
  const selection = this.getSelectedRange();
@@ -74962,7 +74979,7 @@ function unfreezeColumnItem(manualColumnFreezePlugin) {
74962
74979
  }] = selected;
74963
74980
  manualColumnFreezePlugin.unfreezeColumn(selectedColumn);
74964
74981
  this.render();
74965
- this.view.adjustElementsSize(true);
74982
+ this.view.adjustElementsSize();
74966
74983
  },
74967
74984
  hidden() {
74968
74985
  const selection = this.getSelectedRange();
@@ -75664,7 +75681,7 @@ function _onMouseUp() {
75664
75681
  if (movePerformed === true) {
75665
75682
  this.persistentStateSave();
75666
75683
  this.hot.render();
75667
- this.hot.view.adjustElementsSize(true);
75684
+ this.hot.view.adjustElementsSize();
75668
75685
  const selectionStart = this.hot.toVisualColumn(firstMovedPhysicalColumn);
75669
75686
  const selectionEnd = selectionStart + columnsLen - 1;
75670
75687
  this.hot.selectColumns(selectionStart, selectionEnd);
@@ -76360,7 +76377,7 @@ class ManualColumnResize extends _base.BasePlugin {
76360
76377
  const render = () => {
76361
76378
  this.hot.forceFullRender = true;
76362
76379
  this.hot.view.render(); // updates all
76363
- this.hot.view.adjustElementsSize(true);
76380
+ this.hot.view.adjustElementsSize();
76364
76381
  };
76365
76382
  const resize = (column, forceRender) => {
76366
76383
  const hookNewSize = this.hot.runHooks('beforeColumnResize', _classPrivateFieldGet(_newSize, this), column, true);
@@ -76525,7 +76542,7 @@ function _onMouseUp() {
76525
76542
  const render = () => {
76526
76543
  this.hot.forceFullRender = true;
76527
76544
  this.hot.view.render(); // updates all
76528
- this.hot.view.adjustElementsSize(true);
76545
+ this.hot.view.adjustElementsSize();
76529
76546
  };
76530
76547
  const resize = (column, forceRender) => {
76531
76548
  this.hot.runHooks('beforeColumnResize', _classPrivateFieldGet(_newSize, this), column, false);
@@ -77247,7 +77264,7 @@ function _onMouseUp() {
77247
77264
  if (movePerformed === true) {
77248
77265
  this.persistentStateSave();
77249
77266
  this.hot.render();
77250
- this.hot.view.adjustElementsSize(true);
77267
+ this.hot.view.adjustElementsSize();
77251
77268
  const selectionStart = this.hot.toVisualRow(firstMovedPhysicalRow);
77252
77269
  const selectionEnd = selectionStart + rowsLen - 1;
77253
77270
  this.hot.selectRows(selectionStart, selectionEnd);
@@ -77934,7 +77951,7 @@ class ManualRowResize extends _base.BasePlugin {
77934
77951
  const render = () => {
77935
77952
  this.hot.forceFullRender = true;
77936
77953
  this.hot.view.render(); // updates all
77937
- this.hot.view.adjustElementsSize(true);
77954
+ this.hot.view.adjustElementsSize();
77938
77955
  };
77939
77956
  const resize = (row, forceRender) => {
77940
77957
  const hookNewSize = this.hot.runHooks('beforeRowResize', this.getActualRowHeight(row), row, true);
@@ -78063,7 +78080,7 @@ function _onMouseUp() {
78063
78080
  const render = () => {
78064
78081
  this.hot.forceFullRender = true;
78065
78082
  this.hot.view.render(); // updates all
78066
- this.hot.view.adjustElementsSize(true);
78083
+ this.hot.view.adjustElementsSize();
78067
78084
  };
78068
78085
  const runHooks = (row, forceRender) => {
78069
78086
  this.hot.runHooks('beforeRowResize', this.getActualRowHeight(row), row, false);