handsontable 12.3.3-next-e19badf-20230328 → 12.4.0-next-ddbea0c-20230512

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.
Files changed (148) hide show
  1. package/3rdparty/walkontable/src/cell/coords.js +13 -16
  2. package/3rdparty/walkontable/src/cell/coords.mjs +13 -16
  3. package/3rdparty/walkontable/src/cell/range.js +25 -29
  4. package/3rdparty/walkontable/src/cell/range.mjs +24 -28
  5. package/3rdparty/walkontable/src/event.js +4 -0
  6. package/3rdparty/walkontable/src/event.mjs +4 -0
  7. package/3rdparty/walkontable/src/overlay/_base.js +6 -7
  8. package/3rdparty/walkontable/src/overlay/_base.mjs +6 -7
  9. package/3rdparty/walkontable/src/overlay/bottom.js +6 -7
  10. package/3rdparty/walkontable/src/overlay/bottom.mjs +6 -7
  11. package/3rdparty/walkontable/src/overlay/top.js +6 -7
  12. package/3rdparty/walkontable/src/overlay/top.mjs +6 -7
  13. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.js +10 -12
  14. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.mjs +10 -12
  15. package/3rdparty/walkontable/src/overlays.js +55 -64
  16. package/3rdparty/walkontable/src/overlays.mjs +55 -64
  17. package/3rdparty/walkontable/src/scroll.js +20 -23
  18. package/3rdparty/walkontable/src/scroll.mjs +20 -23
  19. package/3rdparty/walkontable/src/settings.js +13 -15
  20. package/3rdparty/walkontable/src/settings.mjs +13 -15
  21. package/3rdparty/walkontable/src/table.js +22 -26
  22. package/3rdparty/walkontable/src/table.mjs +22 -26
  23. package/CHANGELOG.md +14 -0
  24. package/base.js +2 -4
  25. package/base.mjs +2 -2
  26. package/core.js +23 -6
  27. package/core.mjs +23 -6
  28. package/dataMap/dataSource.js +5 -5
  29. package/dataMap/dataSource.mjs +5 -5
  30. package/dataMap/metaManager/metaSchema.js +9 -7
  31. package/dataMap/metaManager/metaSchema.mjs +9 -7
  32. package/dist/handsontable.css +2 -2
  33. package/dist/handsontable.full.css +2 -2
  34. package/dist/handsontable.full.js +5047 -4193
  35. package/dist/handsontable.full.min.css +2 -2
  36. package/dist/handsontable.full.min.js +86 -78
  37. package/dist/handsontable.js +4023 -3170
  38. package/dist/handsontable.min.css +2 -2
  39. package/dist/handsontable.min.js +11 -3
  40. package/dist/languages/all.js +133 -0
  41. package/dist/languages/ar-AR.js +7 -0
  42. package/dist/languages/cs-CZ.js +7 -0
  43. package/dist/languages/de-CH.js +7 -0
  44. package/dist/languages/de-DE.js +7 -0
  45. package/dist/languages/en-US.js +7 -0
  46. package/dist/languages/es-MX.js +7 -0
  47. package/dist/languages/fr-FR.js +7 -0
  48. package/dist/languages/it-IT.js +7 -0
  49. package/dist/languages/ja-JP.js +7 -0
  50. package/dist/languages/ko-KR.js +7 -0
  51. package/dist/languages/lv-LV.js +7 -0
  52. package/dist/languages/nb-NO.js +7 -0
  53. package/dist/languages/nl-NL.js +7 -0
  54. package/dist/languages/pl-PL.js +7 -0
  55. package/dist/languages/pt-BR.js +7 -0
  56. package/dist/languages/ru-RU.js +7 -0
  57. package/dist/languages/sr-SP.js +7 -0
  58. package/dist/languages/zh-CN.js +7 -0
  59. package/dist/languages/zh-TW.js +7 -0
  60. package/helpers/mixed.js +2 -2
  61. package/helpers/mixed.mjs +2 -2
  62. package/i18n/languages/ar-AR.js +7 -1
  63. package/i18n/languages/cs-CZ.js +7 -1
  64. package/i18n/languages/de-CH.js +7 -1
  65. package/i18n/languages/de-DE.js +7 -1
  66. package/i18n/languages/en-US.js +7 -1
  67. package/i18n/languages/es-MX.js +7 -1
  68. package/i18n/languages/fr-FR.js +7 -1
  69. package/i18n/languages/it-IT.js +7 -1
  70. package/i18n/languages/ja-JP.js +7 -1
  71. package/i18n/languages/ko-KR.js +7 -1
  72. package/i18n/languages/lv-LV.js +7 -1
  73. package/i18n/languages/nb-NO.js +7 -1
  74. package/i18n/languages/nl-NL.js +7 -1
  75. package/i18n/languages/pl-PL.js +7 -1
  76. package/i18n/languages/pt-BR.js +7 -1
  77. package/i18n/languages/ru-RU.js +7 -1
  78. package/i18n/languages/sr-SP.js +7 -1
  79. package/i18n/languages/zh-CN.js +7 -1
  80. package/i18n/languages/zh-TW.js +7 -1
  81. package/languages/all.js +133 -0
  82. package/languages/ar-AR.js +7 -0
  83. package/languages/cs-CZ.js +7 -0
  84. package/languages/de-CH.js +7 -0
  85. package/languages/de-DE.js +7 -0
  86. package/languages/en-US.js +7 -0
  87. package/languages/es-MX.js +7 -0
  88. package/languages/fr-FR.js +7 -0
  89. package/languages/index.js +133 -0
  90. package/languages/it-IT.js +7 -0
  91. package/languages/ja-JP.js +7 -0
  92. package/languages/ko-KR.js +7 -0
  93. package/languages/lv-LV.js +7 -0
  94. package/languages/nb-NO.js +7 -0
  95. package/languages/nl-NL.js +7 -0
  96. package/languages/pl-PL.js +7 -0
  97. package/languages/pt-BR.js +7 -0
  98. package/languages/ru-RU.js +7 -0
  99. package/languages/sr-SP.js +7 -0
  100. package/languages/zh-CN.js +7 -0
  101. package/languages/zh-TW.js +7 -0
  102. package/package.json +3 -2
  103. package/pluginHooks.js +16 -6
  104. package/pluginHooks.mjs +15 -3
  105. package/plugins/autoRowSize/autoRowSize.js +2 -2
  106. package/plugins/autoRowSize/autoRowSize.mjs +2 -2
  107. package/plugins/copyPaste/copyableRanges.js +25 -31
  108. package/plugins/copyPaste/copyableRanges.mjs +18 -24
  109. package/plugins/customBorders/customBorders.d.ts +2 -0
  110. package/plugins/filters/filters.js +5 -0
  111. package/plugins/filters/filters.mjs +5 -0
  112. package/plugins/formulas/engine/register.js +9 -0
  113. package/plugins/formulas/engine/register.mjs +13 -4
  114. package/plugins/formulas/engine/settings.js +18 -3
  115. package/plugins/formulas/engine/settings.mjs +16 -3
  116. package/plugins/formulas/formulas.js +274 -155
  117. package/plugins/formulas/formulas.mjs +274 -156
  118. package/plugins/formulas/indexSyncer/axisSyncer.js +379 -0
  119. package/plugins/formulas/indexSyncer/axisSyncer.mjs +374 -0
  120. package/plugins/formulas/indexSyncer/index.js +225 -0
  121. package/plugins/formulas/indexSyncer/index.mjs +219 -0
  122. package/plugins/formulas/utils.js +81 -0
  123. package/plugins/formulas/utils.mjs +74 -0
  124. package/plugins/manualRowMove/manualRowMove.js +26 -11
  125. package/plugins/manualRowMove/manualRowMove.mjs +27 -12
  126. package/plugins/nestedHeaders/stateManager/headersTree.js +23 -26
  127. package/plugins/nestedHeaders/stateManager/headersTree.mjs +20 -23
  128. package/plugins/nestedHeaders/stateManager/index.js +3 -3
  129. package/plugins/nestedHeaders/stateManager/matrixGenerator.js +1 -0
  130. package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +1 -1
  131. package/plugins/nestedHeaders/utils/ghostTable.js +30 -35
  132. package/plugins/nestedHeaders/utils/ghostTable.mjs +30 -35
  133. package/plugins/registry.js +3 -1
  134. package/plugins/undoRedo/undoRedo.js +0 -1
  135. package/plugins/undoRedo/undoRedo.mjs +0 -1
  136. package/selection/highlight/visualSelection.js +5 -6
  137. package/selection/highlight/visualSelection.mjs +5 -6
  138. package/tableView.js +62 -72
  139. package/tableView.mjs +62 -72
  140. package/translations/changesObservable/observable.js +41 -46
  141. package/translations/changesObservable/observable.mjs +36 -41
  142. package/translations/changesObservable/observer.js +1 -1
  143. package/translations/indexMapper.js +21 -0
  144. package/translations/indexMapper.mjs +21 -0
  145. package/utils/dataStructures/tree.js +15 -18
  146. package/utils/dataStructures/tree.mjs +15 -18
  147. package/utils/parseTable.js +5 -1
  148. package/utils/parseTable.mjs +5 -1
@@ -11,15 +11,11 @@ require("core-js/modules/es.reflect.construct.js");
11
11
  require("core-js/modules/es.reflect.get.js");
12
12
  require("core-js/modules/es.object.get-own-property-descriptor.js");
13
13
  require("core-js/modules/es.symbol.iterator.js");
14
- require("core-js/modules/es.array.slice.js");
15
14
  require("core-js/modules/es.function.name.js");
16
15
  require("core-js/modules/es.array.from.js");
17
16
  require("core-js/modules/es.regexp.exec.js");
18
- require("core-js/modules/es.object.keys.js");
19
- require("core-js/modules/es.array.filter.js");
20
- require("core-js/modules/es.object.get-own-property-descriptors.js");
21
17
  exports.__esModule = true;
22
- exports.PLUGIN_PRIORITY = exports.PLUGIN_KEY = exports.Formulas = void 0;
18
+ exports.SETTING_KEYS = exports.PLUGIN_PRIORITY = exports.PLUGIN_KEY = exports.Formulas = void 0;
23
19
  require("core-js/modules/es.array.concat.js");
24
20
  require("core-js/modules/es.object.to-string.js");
25
21
  require("core-js/modules/web.dom-collections.for-each.js");
@@ -28,6 +24,8 @@ require("core-js/modules/es.set.js");
28
24
  require("core-js/modules/es.string.iterator.js");
29
25
  require("core-js/modules/web.dom-collections.iterator.js");
30
26
  require("core-js/modules/es.array.map.js");
27
+ require("core-js/modules/es.string.starts-with.js");
28
+ require("core-js/modules/es.array.slice.js");
31
29
  require("core-js/modules/es.array.includes.js");
32
30
  require("core-js/modules/es.string.includes.js");
33
31
  require("core-js/modules/es.array.reverse.js");
@@ -44,13 +42,12 @@ var _settings = require("./engine/settings");
44
42
  var _data = require("../../helpers/data");
45
43
  var _string = require("../../helpers/string");
46
44
  var _pluginHooks = _interopRequireDefault(require("../../pluginHooks"));
45
+ var _indexSyncer = _interopRequireDefault(require("./indexSyncer"));
47
46
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
48
47
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
49
48
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
50
49
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
51
50
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
52
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
53
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
54
51
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
55
52
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
56
53
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -82,9 +79,10 @@ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!priva
82
79
  function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
83
80
  var PLUGIN_KEY = 'formulas';
84
81
  exports.PLUGIN_KEY = PLUGIN_KEY;
82
+ var SETTING_KEYS = ['maxRows', 'maxColumns', 'language'];
83
+ exports.SETTING_KEYS = SETTING_KEYS;
85
84
  var PLUGIN_PRIORITY = 260;
86
85
  exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
87
- var ROW_MOVE_UNDO_REDO_NAME = 'row_move';
88
86
  _pluginHooks.default.getSingleton().register('afterNamedExpressionAdded');
89
87
  _pluginHooks.default.getSingleton().register('afterNamedExpressionRemoved');
90
88
  _pluginHooks.default.getSingleton().register('afterSheetAdded');
@@ -190,6 +188,24 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
190
188
  * @type {string|null}
191
189
  */
192
190
  _defineProperty(_assertThisInitialized(_this), "sheetName", null);
191
+ /**
192
+ * Index synchronizer responsible for manipulating with some general options related to indexes synchronization.
193
+ *
194
+ * @type {IndexSyncer|null}
195
+ */
196
+ _defineProperty(_assertThisInitialized(_this), "indexSyncer", null);
197
+ /**
198
+ * Index synchronizer responsible for syncing the order of HOT and HF's data for the axis of the rows.
199
+ *
200
+ * @type {AxisSyncer|null}
201
+ */
202
+ _defineProperty(_assertThisInitialized(_this), "rowAxisSyncer", null);
203
+ /**
204
+ * Index synchronizer responsible for syncing the order of HOT and HF's data for the axis of the columns.
205
+ *
206
+ * @type {AxisSyncer|null}
207
+ */
208
+ _defineProperty(_assertThisInitialized(_this), "columnAxisSyncer", null);
193
209
  return _this;
194
210
  }
195
211
  _createClass(Formulas, [{
@@ -297,24 +313,66 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
297
313
  this.addHook('afterRemoveCol', function () {
298
314
  return _this8.onAfterRemoveCol.apply(_this8, arguments);
299
315
  });
316
+ this.indexSyncer = new _indexSyncer.default(this.hot.rowIndexMapper, this.hot.columnIndexMapper, function (postponedAction) {
317
+ _this8.hot.addHookOnce('init', function () {
318
+ // Engine is initialized after executing callback to `afterLoadData` hook. Thus, some actions on indexes should
319
+ // be postponed.
320
+ postponedAction();
321
+ });
322
+ });
323
+ this.rowAxisSyncer = this.indexSyncer.getForAxis('row');
324
+ this.columnAxisSyncer = this.indexSyncer.getForAxis('column');
325
+ this.hot.addHook('afterRowSequenceChange', this.rowAxisSyncer.getIndexesChangeSyncMethod());
326
+ this.hot.addHook('afterColumnSequenceChange', this.columnAxisSyncer.getIndexesChangeSyncMethod());
327
+ this.hot.addHook('beforeRowMove', function (movedRows, finalIndex, _, movePossible) {
328
+ _this8.rowAxisSyncer.storeMovesInformation(movedRows, finalIndex, movePossible);
329
+ });
330
+ this.hot.addHook('beforeColumnMove', function (movedColumns, finalIndex, _, movePossible) {
331
+ _this8.columnAxisSyncer.storeMovesInformation(movedColumns, finalIndex, movePossible);
332
+ });
333
+ this.hot.addHook('afterRowMove', function (movedRows, finalIndex, dropIndex, movePossible, orderChanged) {
334
+ _this8.rowAxisSyncer.calculateAndSyncMoves(movePossible, orderChanged);
335
+ });
336
+ this.hot.addHook('afterColumnMove', function (movedColumns, finalIndex, dropIndex, movePossible, orderChanged) {
337
+ _this8.columnAxisSyncer.calculateAndSyncMoves(movePossible, orderChanged);
338
+ });
339
+ this.hot.addHook('beforeColumnFreeze', function (column, freezePerformed) {
340
+ _this8.columnAxisSyncer.storeMovesInformation([column], _this8.hot.getSettings().fixedColumnsStart, freezePerformed);
341
+ });
342
+ this.hot.addHook('afterColumnFreeze', function (_, freezePerformed) {
343
+ _this8.columnAxisSyncer.calculateAndSyncMoves(freezePerformed, freezePerformed);
344
+ });
345
+ this.hot.addHook('beforeColumnUnfreeze', function (column, unfreezePerformed) {
346
+ _this8.columnAxisSyncer.storeMovesInformation([column], _this8.hot.getSettings().fixedColumnsStart - 1, unfreezePerformed);
347
+ });
348
+ this.hot.addHook('afterColumnUnfreeze', function (_, unfreezePerformed) {
349
+ _this8.columnAxisSyncer.calculateAndSyncMoves(unfreezePerformed, unfreezePerformed);
350
+ });
351
+
352
+ // TODO: Actions related to overwriting dates from HOT format to HF default format are done as callback to this
353
+ // hook, because some hooks, such as `afterLoadData` doesn't have information about composed cell properties.
354
+ // Another hooks are triggered to late for setting HF's engine data needed for some actions.
355
+ this.addHook('afterCellMetaReset', function () {
356
+ return _this8.onAfterCellMetaReset.apply(_this8, arguments);
357
+ });
300
358
 
301
359
  // Handling undo actions on data just using HyperFormula's UndoRedo mechanism
302
- this.addHook('beforeUndo', function (action) {
303
- // TODO: Move action isn't handled by HyperFormula.
304
- if ((action === null || action === void 0 ? void 0 : action.actionType) === ROW_MOVE_UNDO_REDO_NAME) {
305
- return;
306
- }
360
+ this.addHook('beforeUndo', function () {
361
+ _this8.indexSyncer.setPerformUndo(true);
307
362
  _this8.engine.undo();
308
363
  });
309
364
 
310
365
  // Handling redo actions on data just using HyperFormula's UndoRedo mechanism
311
- this.addHook('beforeRedo', function (action) {
312
- // TODO: Move action isn't handled by HyperFormula.
313
- if ((action === null || action === void 0 ? void 0 : action.actionType) === ROW_MOVE_UNDO_REDO_NAME) {
314
- return;
315
- }
366
+ this.addHook('beforeRedo', function () {
367
+ _this8.indexSyncer.setPerformRedo(true);
316
368
  _this8.engine.redo();
317
369
  });
370
+ this.addHook('afterUndo', function () {
371
+ _this8.indexSyncer.setPerformUndo(false);
372
+ });
373
+ this.addHook('afterUndo', function () {
374
+ _this8.indexSyncer.setPerformRedo(false);
375
+ });
318
376
  this.addHook('afterDetachChild', function () {
319
377
  return _this8.onAfterDetachChild.apply(_this8, arguments);
320
378
  });
@@ -357,7 +415,10 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
357
415
  }, {
358
416
  key: "updatePlugin",
359
417
  value: function updatePlugin(newSettings) {
360
- this.engine.updateConfig((0, _settings.getEngineSettingsWithOverrides)(this.hot.getSettings()));
418
+ var newEngineSettings = (0, _settings.getEngineSettingsWithOverrides)(this.hot.getSettings());
419
+ if ((0, _settings.haveEngineSettingsChanged)(this.engine.getConfig(), newEngineSettings)) {
420
+ this.engine.updateConfig(newEngineSettings);
421
+ }
361
422
  var pluginSettings = this.hot.getSettings()[PLUGIN_KEY];
362
423
  if ((0, _mixed.isDefined)(pluginSettings) && (0, _mixed.isDefined)(pluginSettings.sheetName) && pluginSettings.sheetName !== this.sheetName) {
363
424
  this.switchSheet(pluginSettings.sheetName);
@@ -396,63 +457,6 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
396
457
  _get(_getPrototypeOf(Formulas.prototype), "destroy", this).call(this);
397
458
  }
398
459
 
399
- /**
400
- * Helper function for `toPhysicalRowPosition` and `toPhysicalColumnPosition`.
401
- *
402
- * @private
403
- * @param {number} visualIndex Visual entry index.
404
- * @param {number} physicalIndex Physical entry index.
405
- * @param {number} entriesCount Visual entries count.
406
- * @param {number} sourceEntriesCount Source entries count.
407
- * @param {boolean} contained `true` if it should return only indexes within boundaries of the table (basically
408
- * `toPhysical` alias.
409
- * @returns {*}
410
- */
411
- }, {
412
- key: "getPhysicalIndexPosition",
413
- value: function getPhysicalIndexPosition(visualIndex, physicalIndex, entriesCount, sourceEntriesCount, contained) {
414
- if (!contained) {
415
- if (visualIndex >= entriesCount) {
416
- return sourceEntriesCount + (visualIndex - entriesCount);
417
- }
418
- }
419
- return physicalIndex;
420
- }
421
-
422
- /**
423
- * Returns the physical row index. The difference between this and Core's `toPhysical` is that it doesn't return
424
- * `null` on rows with indexes higher than the number of rows.
425
- *
426
- * @private
427
- * @param {number} row Visual row index.
428
- * @param {boolean} [contained] `true` if it should return only indexes within boundaries of the table (basically
429
- * `toPhysical` alias.
430
- * @returns {number} The physical row index.
431
- */
432
- }, {
433
- key: "toPhysicalRowPosition",
434
- value: function toPhysicalRowPosition(row) {
435
- var contained = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
436
- return this.getPhysicalIndexPosition(row, this.hot.toPhysicalRow(row), this.hot.countRows(), this.hot.countSourceRows(), contained);
437
- }
438
-
439
- /**
440
- * Returns the physical column index. The difference between this and Core's `toPhysical` is that it doesn't return
441
- * `null` on columns with indexes higher than the number of columns.
442
- *
443
- * @private
444
- * @param {number} column Visual column index.
445
- * @param {boolean} [contained] `true` if it should return only indexes within boundaries of the table (basically
446
- * `toPhysical` alias.
447
- * @returns {number} The physical column index.
448
- */
449
- }, {
450
- key: "toPhysicalColumnPosition",
451
- value: function toPhysicalColumnPosition(column) {
452
- var contained = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
453
- return this.getPhysicalIndexPosition(column, this.hot.toPhysicalColumn(column), this.hot.countCols(), this.hot.countSourceCols(), contained);
454
- }
455
-
456
460
  /**
457
461
  * Add a sheet to the shared HyperFormula instance.
458
462
  *
@@ -523,8 +527,8 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
523
527
  if (physicalRow !== null && physicalColumn !== null) {
524
528
  return this.engine.getCellType({
525
529
  sheet: sheet,
526
- row: physicalRow,
527
- col: physicalColumn
530
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),
531
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column)
528
532
  });
529
533
  } else {
530
534
  // Should return `EMPTY` when out of bounds (according to the test cases).
@@ -544,15 +548,10 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
544
548
  key: "isFormulaCellType",
545
549
  value: function isFormulaCellType(row, column) {
546
550
  var sheet = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.sheetId;
547
- var physicalRow = this.hot.toPhysicalRow(row);
548
- var physicalColumn = this.hot.toPhysicalColumn(column);
549
- if (physicalRow === null || physicalColumn === null) {
550
- return false;
551
- }
552
551
  return this.engine.doesCellHaveFormula({
553
552
  sheet: sheet,
554
- row: physicalRow,
555
- col: physicalColumn
553
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),
554
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column)
556
555
  });
557
556
  }
558
557
 
@@ -617,11 +616,9 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
617
616
  var _ref8 = (_change$address3 = change.address) !== null && _change$address3 !== void 0 ? _change$address3 : {},
618
617
  row = _ref8.row,
619
618
  col = _ref8.col;
620
- var visualRow = (0, _mixed.isDefined)(row) ? _this12.hot.toVisualRow(row) : null;
621
- var visualColumn = (0, _mixed.isDefined)(col) ? _this12.hot.toVisualColumn(col) : null;
622
619
 
623
620
  // Don't try to validate cells outside of the visual part of the table.
624
- if (visualRow === null || visualColumn === null) {
621
+ if ((0, _mixed.isDefined)(row) === false || (0, _mixed.isDefined)(col) === false || row >= _this12.hot.countRows() || col >= _this12.hot.countCols()) {
625
622
  return;
626
623
  }
627
624
 
@@ -640,7 +637,7 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
640
637
  }
641
638
 
642
639
  // It will just re-render certain cell when necessary.
643
- boundHot.validateCell(boundHot.getDataAtCell(visualRow, visualColumn), boundHot.getCellMeta(visualRow, visualColumn), function () {});
640
+ boundHot.validateCell(boundHot.getDataAtCell(row, col), boundHot.getCellMeta(row, col), function () {});
644
641
  }
645
642
  });
646
643
  }
@@ -658,14 +655,24 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
658
655
  key: "syncChangeWithEngine",
659
656
  value: function syncChangeWithEngine(row, column, newValue) {
660
657
  var address = {
661
- row: this.toPhysicalRowPosition(row),
662
- col: this.toPhysicalColumnPosition(column),
658
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),
659
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column),
663
660
  sheet: this.sheetId
664
661
  };
665
662
  if (!this.engine.isItPossibleToSetCellContents(address)) {
666
663
  (0, _console.warn)("Not possible to set cell data at ".concat(JSON.stringify(address)));
667
664
  return;
668
665
  }
666
+ var cellMeta = this.hot.getCellMeta(row, column);
667
+ if ((0, _utils.isDate)(newValue, cellMeta.type)) {
668
+ if ((0, _utils.isDateValid)(newValue, cellMeta.dateFormat)) {
669
+ // Rewriting date in HOT format to HF format.
670
+ newValue = (0, _utils.getDateInHfFormat)(newValue, cellMeta.dateFormat);
671
+ } else if ((0, _utils.isFormula)(newValue) === false) {
672
+ // Escaping value from date parsing using "'" sign (HF feature).
673
+ newValue = "'".concat(newValue);
674
+ }
675
+ }
669
676
  return this.engine.setCellContents(address, newValue);
670
677
  }
671
678
 
@@ -685,11 +692,16 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
685
692
  var visualColumn = this.hot.propToCol(prop);
686
693
  if (this.isFormulaCellType(visualRow, visualColumn)) {
687
694
  var address = {
688
- row: this.hot.toPhysicalRow(visualRow),
689
- col: this.hot.toPhysicalColumn(visualColumn),
695
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
696
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
690
697
  sheet: this.sheetId
691
698
  };
692
- var cellValue = this.engine.getCellValue(address);
699
+ var cellMeta = this.hot.getCellMeta(visualRow, visualColumn);
700
+ var cellValue = this.engine.getCellValue(address); // Date as an integer (Excel-like date).
701
+
702
+ if (cellMeta.type === 'date' && (0, _number.isNumeric)(cellValue)) {
703
+ cellValue = (0, _utils.getDateFromExcelDate)(cellValue, cellMeta.dateFormat);
704
+ }
693
705
 
694
706
  // If `cellValue` is an object it is expected to be an error
695
707
  return _typeof(cellValue) === 'object' && cellValue !== null ? cellValue.value : cellValue;
@@ -710,19 +722,41 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
710
722
  }, {
711
723
  key: "onBeforeAutofill",
712
724
  value: function onBeforeAutofill(fillData, sourceRange, targetRange) {
713
- var _this13 = this;
714
- var withSheetId = function withSheetId(range) {
715
- return _objectSpread(_objectSpread({}, range), {}, {
716
- sheet: _this13.sheetId
717
- });
718
- };
725
+ var _sourceRange$getTopSt = sourceRange.getTopStartCorner(),
726
+ sourceTopStartRow = _sourceRange$getTopSt.row,
727
+ sourceTopStartColumn = _sourceRange$getTopSt.col;
728
+ var _sourceRange$getBotto = sourceRange.getBottomEndCorner(),
729
+ sourceBottomEndRow = _sourceRange$getBotto.row,
730
+ sourceBottomEndColumn = _sourceRange$getBotto.col;
731
+ var _targetRange$getTopSt = targetRange.getTopStartCorner(),
732
+ targetTopStartRow = _targetRange$getTopSt.row,
733
+ targetTopStartColumn = _targetRange$getTopSt.col;
734
+ var _targetRange$getBotto = targetRange.getBottomEndCorner(),
735
+ targetBottomEndRow = _targetRange$getBotto.row,
736
+ targetBottomEndColumn = _targetRange$getBotto.col;
719
737
  var engineSourceRange = {
720
- start: withSheetId(sourceRange.getTopStartCorner()),
721
- end: withSheetId(sourceRange.getBottomEndCorner())
738
+ start: {
739
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(sourceTopStartRow),
740
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(sourceTopStartColumn),
741
+ sheet: this.sheetId
742
+ },
743
+ end: {
744
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(sourceBottomEndRow),
745
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(sourceBottomEndColumn),
746
+ sheet: this.sheetId
747
+ }
722
748
  };
723
749
  var engineTargetRange = {
724
- start: withSheetId(targetRange.getTopStartCorner()),
725
- end: withSheetId(targetRange.getBottomEndCorner())
750
+ start: {
751
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(targetTopStartRow),
752
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(targetTopStartColumn),
753
+ sheet: this.sheetId
754
+ },
755
+ end: {
756
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(targetBottomEndRow),
757
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(targetBottomEndColumn),
758
+ sheet: this.sheetId
759
+ }
726
760
  };
727
761
 
728
762
  // Blocks the autofill operation if HyperFormula says that at least one of
@@ -730,7 +764,33 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
730
764
  if (this.engine.isItPossibleToSetCellContents(engineTargetRange) === false) {
731
765
  return false;
732
766
  }
733
- return this.engine.getFillRangeData(engineSourceRange, engineTargetRange);
767
+ var fillRangeData = this.engine.getFillRangeData(engineSourceRange, engineTargetRange);
768
+ var _engineSourceRange$st = engineSourceRange.start,
769
+ sourceStartRow = _engineSourceRange$st.row,
770
+ sourceStartColumn = _engineSourceRange$st.col;
771
+ var _engineSourceRange$en = engineSourceRange.end,
772
+ sourceEndRow = _engineSourceRange$en.row,
773
+ sourceEndColumn = _engineSourceRange$en.col;
774
+ var populationRowLength = sourceEndRow - sourceStartRow + 1;
775
+ var populationColumnLength = sourceEndColumn - sourceStartColumn + 1;
776
+ for (var populatedRowIndex = 0; populatedRowIndex < fillRangeData.length; populatedRowIndex += 1) {
777
+ for (var populatedColumnIndex = 0; populatedColumnIndex < fillRangeData[populatedRowIndex].length; populatedColumnIndex += 1) {
778
+ var populatedValue = fillRangeData[populatedRowIndex][populatedColumnIndex];
779
+ var sourceRow = populatedRowIndex % populationRowLength;
780
+ var sourceColumn = populatedColumnIndex % populationColumnLength;
781
+ var sourceCellMeta = this.hot.getCellMeta(sourceRow, sourceColumn);
782
+ if ((0, _utils.isDate)(populatedValue, sourceCellMeta.type)) {
783
+ if (populatedValue.startsWith('\'')) {
784
+ // Populating values on HOT side without apostrophe.
785
+ fillRangeData[populatedRowIndex][populatedColumnIndex] = populatedValue.slice(1);
786
+ } else if (this.isFormulaCellType(sourceRow, sourceColumn, this.sheetId) === false) {
787
+ // Populating date in proper format, coming from the source cell.
788
+ fillRangeData[populatedRowIndex][populatedColumnIndex] = (0, _utils.getDateInHotFormat)(populatedValue, sourceCellMeta.dateFormat);
789
+ }
790
+ }
791
+ }
792
+ }
793
+ return fillRangeData;
734
794
  }
735
795
 
736
796
  /**
@@ -754,6 +814,40 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
754
814
  _classPrivateFieldSet(this, _hotWasInitializedWithEmptyData, (0, _mixed.isUndefined)(this.hot.getSettings().data));
755
815
  }
756
816
 
817
+ /**
818
+ * Callback to `afterCellMetaReset` hook which is triggered after setting cell meta.
819
+ *
820
+ * @private
821
+ */
822
+ }, {
823
+ key: "onAfterCellMetaReset",
824
+ value: function onAfterCellMetaReset() {
825
+ var _this13 = this;
826
+ var sourceDataArray = this.hot.getSourceDataArray();
827
+ var valueChanged = false;
828
+ sourceDataArray.forEach(function (rowData, rowIndex) {
829
+ rowData.forEach(function (cellValue, columnIndex) {
830
+ var cellMeta = _this13.hot.getCellMeta(rowIndex, columnIndex);
831
+ var dateFormat = cellMeta.dateFormat;
832
+ if ((0, _utils.isDate)(cellValue, cellMeta.type)) {
833
+ valueChanged = true;
834
+ if ((0, _utils.isDateValid)(cellValue, dateFormat)) {
835
+ // Rewriting date in HOT format to HF format.
836
+ sourceDataArray[rowIndex][columnIndex] = (0, _utils.getDateInHfFormat)(cellValue, dateFormat);
837
+ } else if (_this13.isFormulaCellType(rowIndex, columnIndex) === false) {
838
+ // Escaping value from date parsing using "'" sign (HF feature).
839
+ sourceDataArray[rowIndex][columnIndex] = "'".concat(cellValue);
840
+ }
841
+ }
842
+ });
843
+ });
844
+ if (valueChanged === true) {
845
+ _classPrivateFieldSet(this, _internalOperationPending, true);
846
+ this.engine.setSheetContent(this.sheetId, sourceDataArray);
847
+ _classPrivateFieldSet(this, _internalOperationPending, false);
848
+ }
849
+ }
850
+
757
851
  /**
758
852
  * `afterLoadData` hook callback.
759
853
  *
@@ -774,7 +868,8 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
774
868
  var sourceDataArray = this.hot.getSourceDataArray();
775
869
  if (this.engine.isItPossibleToReplaceSheetContent(this.sheetId, sourceDataArray)) {
776
870
  _classPrivateFieldSet(this, _internalOperationPending, true);
777
- var dependentCells = this.engine.setSheetContent(this.sheetId, this.hot.getSourceDataArray());
871
+ var dependentCells = this.engine.setSheetContent(this.sheetId, sourceDataArray);
872
+ this.indexSyncer.setupSyncEndpoint(this.engine, this.sheetId);
778
873
  this.renderDependentSheets(dependentCells);
779
874
  _classPrivateFieldSet(this, _internalOperationPending, false);
780
875
  }
@@ -787,24 +882,27 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
787
882
  * `modifyData` hook callback.
788
883
  *
789
884
  * @private
790
- * @param {number} row Physical row height.
791
- * @param {number} column Physical column index.
885
+ * @param {number} physicalRow Physical row index.
886
+ * @param {number} visualColumn Visual column index.
792
887
  * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value`
793
888
  * property.
794
889
  * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).
795
890
  */
796
891
  }, {
797
892
  key: "onModifyData",
798
- value: function onModifyData(row, column, valueHolder, ioMode) {
893
+ value: function onModifyData(physicalRow, visualColumn, valueHolder, ioMode) {
799
894
  if (ioMode !== 'get' || _classPrivateFieldGet(this, _internalOperationPending) || this.sheetName === null || !this.engine.doesSheetExist(this.sheetName)) {
800
895
  return;
801
896
  }
802
- var visualRow = this.hot.toVisualRow(row);
897
+ var visualRow = this.hot.toVisualRow(physicalRow);
898
+ if (visualRow === null || visualColumn === null) {
899
+ return;
900
+ }
803
901
 
804
902
  // `column` is here as visual index because of inconsistencies related to hook execution in `src/dataMap`.
805
- var isFormulaCellType = this.isFormulaCellType(visualRow, column);
903
+ var isFormulaCellType = this.isFormulaCellType(visualRow, visualColumn);
806
904
  if (!isFormulaCellType) {
807
- var cellType = this.getCellType(visualRow, column);
905
+ var cellType = this.getCellType(visualRow, visualColumn);
808
906
  if (cellType !== 'ARRAY') {
809
907
  if ((0, _utils.isEscapedFormulaExpression)(valueHolder.value)) {
810
908
  valueHolder.value = (0, _utils.unescapeFormulaExpression)(valueHolder.value);
@@ -812,14 +910,16 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
812
910
  return;
813
911
  }
814
912
  }
815
-
816
- // `toPhysicalColumn` is here because of inconsistencies related to hook execution in `DataMap`.
817
913
  var address = {
818
- row: row,
819
- col: this.toPhysicalColumnPosition(column),
914
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
915
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
820
916
  sheet: this.sheetId
821
917
  };
822
- var cellValue = this.engine.getCellValue(address);
918
+ var cellValue = this.engine.getCellValue(address); // Date as an integer (Excel like date).
919
+ var cellMeta = this.hot.getCellMeta(visualRow, visualColumn);
920
+ if (cellMeta.type === 'date' && (0, _number.isNumeric)(cellValue)) {
921
+ cellValue = (0, _utils.getDateFromExcelDate)(cellValue, cellMeta.dateFormat);
922
+ }
823
923
 
824
924
  // If `cellValue` is an object it is expected to be an error
825
925
  var value = _typeof(cellValue) === 'object' && cellValue !== null ? cellValue.value : cellValue;
@@ -844,6 +944,9 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
844
944
  }
845
945
  var visualRow = this.hot.toVisualRow(row);
846
946
  var visualColumn = this.hot.propToCol(columnOrProp);
947
+ if (visualRow === null || visualColumn === null) {
948
+ return;
949
+ }
847
950
 
848
951
  // `column` is here as visual index because of inconsistencies related to hook execution in `src/dataMap`.
849
952
  var isFormulaCellType = this.isFormulaCellType(visualRow, visualColumn);
@@ -863,9 +966,8 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
863
966
  return;
864
967
  }
865
968
  var address = {
866
- row: row,
867
- // Workaround for inconsistencies in `src/dataSource.js`
868
- col: this.toPhysicalColumnPosition(visualColumn),
969
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
970
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
869
971
  sheet: this.sheetId
870
972
  };
871
973
  valueHolder.value = this.engine.getCellSerialized(address);
@@ -891,21 +993,21 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
891
993
  var dependentCells = this.engine.batch(function () {
892
994
  changes.forEach(function (_ref9) {
893
995
  var _ref10 = _slicedToArray(_ref9, 4),
894
- row = _ref10[0],
996
+ visualRow = _ref10[0],
895
997
  prop = _ref10[1],
896
998
  newValue = _ref10[3];
897
- var column = _this14.hot.propToCol(prop);
898
- var physicalRow = _this14.hot.toPhysicalRow(row);
899
- var physicalColumn = _this14.hot.toPhysicalColumn(column);
999
+ var visualColumn = _this14.hot.propToCol(prop);
1000
+ var physicalRow = _this14.hot.toPhysicalRow(visualRow);
1001
+ var physicalColumn = _this14.hot.toPhysicalColumn(visualColumn);
900
1002
  var address = {
901
- row: physicalRow,
902
- col: physicalColumn,
1003
+ row: _this14.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
1004
+ col: _this14.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
903
1005
  sheet: _this14.sheetId
904
1006
  };
905
1007
  if (physicalRow !== null && physicalColumn !== null) {
906
- _this14.syncChangeWithEngine(row, column, newValue);
1008
+ _this14.syncChangeWithEngine(visualRow, visualColumn, newValue);
907
1009
  } else {
908
- outOfBoundsChanges.push([row, column, newValue]);
1010
+ outOfBoundsChanges.push([visualRow, visualColumn, newValue]);
909
1011
  }
910
1012
  changedCells.push({
911
1013
  address: address
@@ -951,16 +1053,16 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
951
1053
  var changedCells = [];
952
1054
  changes.forEach(function (_ref13) {
953
1055
  var _ref14 = _slicedToArray(_ref13, 4),
954
- row = _ref14[0],
1056
+ visualRow = _ref14[0],
955
1057
  prop = _ref14[1],
956
1058
  newValue = _ref14[3];
957
- var column = _this15.hot.propToCol(prop);
958
- if (!(0, _number.isNumeric)(column)) {
1059
+ var visualColumn = _this15.hot.propToCol(prop);
1060
+ if (!(0, _number.isNumeric)(visualColumn)) {
959
1061
  return;
960
1062
  }
961
1063
  var address = {
962
- row: row,
963
- col: _this15.toPhysicalColumnPosition(column),
1064
+ row: _this15.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
1065
+ col: _this15.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
964
1066
  sheet: _this15.sheetId
965
1067
  };
966
1068
  if (!_this15.engine.isItPossibleToSetCellContents(address)) {
@@ -980,14 +1082,19 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
980
1082
  * `beforeCreateRow` hook callback.
981
1083
  *
982
1084
  * @private
983
- * @param {number} row Represents the visual index of first newly created row in the data source array.
1085
+ * @param {number} visualRow Represents the visual index of first newly created row in the data source array.
984
1086
  * @param {number} amount Number of newly created rows in the data source array.
985
1087
  * @returns {*|boolean} If false is returned the action is canceled.
986
1088
  */
987
1089
  }, {
988
1090
  key: "onBeforeCreateRow",
989
- value: function onBeforeCreateRow(row, amount) {
990
- if (this.sheetId === null || !this.engine.doesSheetExist(this.sheetName) || !this.engine.isItPossibleToAddRows(this.sheetId, [this.toPhysicalRowPosition(row), amount])) {
1091
+ value: function onBeforeCreateRow(visualRow, amount) {
1092
+ var hfRowIndex = this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow);
1093
+ if (visualRow >= this.hot.countRows()) {
1094
+ hfRowIndex = visualRow; // Row beyond the table boundaries.
1095
+ }
1096
+
1097
+ if (this.sheetId === null || !this.engine.doesSheetExist(this.sheetName) || !this.engine.isItPossibleToAddRows(this.sheetId, [hfRowIndex, amount])) {
991
1098
  return false;
992
1099
  }
993
1100
  }
@@ -996,14 +1103,19 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
996
1103
  * `beforeCreateCol` hook callback.
997
1104
  *
998
1105
  * @private
999
- * @param {number} col Represents the visual index of first newly created column in the data source.
1106
+ * @param {number} visualColumn Represents the visual index of first newly created column in the data source.
1000
1107
  * @param {number} amount Number of newly created columns in the data source.
1001
1108
  * @returns {*|boolean} If false is returned the action is canceled.
1002
1109
  */
1003
1110
  }, {
1004
1111
  key: "onBeforeCreateCol",
1005
- value: function onBeforeCreateCol(col, amount) {
1006
- if (this.sheetId === null || !this.engine.doesSheetExist(this.sheetName) || !this.engine.isItPossibleToAddColumns(this.sheetId, [this.toPhysicalColumnPosition(col), amount])) {
1112
+ value: function onBeforeCreateCol(visualColumn, amount) {
1113
+ var hfColumnIndex = this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn);
1114
+ if (visualColumn >= this.hot.countCols()) {
1115
+ hfColumnIndex = visualColumn; // Column beyond the table boundaries.
1116
+ }
1117
+
1118
+ if (this.sheetId === null || !this.engine.doesSheetExist(this.sheetName) || !this.engine.isItPossibleToAddColumns(this.sheetId, [hfColumnIndex, amount])) {
1007
1119
  return false;
1008
1120
  }
1009
1121
  }
@@ -1021,8 +1133,9 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
1021
1133
  key: "onBeforeRemoveRow",
1022
1134
  value: function onBeforeRemoveRow(row, amount, physicalRows) {
1023
1135
  var _this16 = this;
1024
- var possible = physicalRows.every(function (physicalRow) {
1025
- return _this16.engine.isItPossibleToRemoveRows(_this16.sheetId, [physicalRow, 1]);
1136
+ var hfRows = this.rowAxisSyncer.setRemovedHfIndexes(physicalRows);
1137
+ var possible = hfRows.every(function (hfRow) {
1138
+ return _this16.engine.isItPossibleToRemoveRows(_this16.sheetId, [hfRow, 1]);
1026
1139
  });
1027
1140
  return possible === false ? false : void 0;
1028
1141
  }
@@ -1040,8 +1153,9 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
1040
1153
  key: "onBeforeRemoveCol",
1041
1154
  value: function onBeforeRemoveCol(col, amount, physicalColumns) {
1042
1155
  var _this17 = this;
1043
- var possible = physicalColumns.every(function (physicalColumn) {
1044
- return _this17.engine.isItPossibleToRemoveColumns(_this17.sheetId, [physicalColumn, 1]);
1156
+ var hfColumns = this.columnAxisSyncer.setRemovedHfIndexes(physicalColumns);
1157
+ var possible = hfColumns.every(function (hfColumn) {
1158
+ return _this17.engine.isItPossibleToRemoveColumns(_this17.sheetId, [hfColumn, 1]);
1045
1159
  });
1046
1160
  return possible === false ? false : void 0;
1047
1161
  }
@@ -1050,18 +1164,18 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
1050
1164
  * `afterCreateRow` hook callback.
1051
1165
  *
1052
1166
  * @private
1053
- * @param {number} row Represents the visual index of first newly created row in the data source array.
1167
+ * @param {number} visualRow Represents the visual index of first newly created row in the data source array.
1054
1168
  * @param {number} amount Number of newly created rows in the data source array.
1055
1169
  * @param {string} [source] String that identifies source of hook call
1056
1170
  * ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).
1057
1171
  */
1058
1172
  }, {
1059
1173
  key: "onAfterCreateRow",
1060
- value: function onAfterCreateRow(row, amount, source) {
1174
+ value: function onAfterCreateRow(visualRow, amount, source) {
1061
1175
  if (isBlockedSource(source)) {
1062
1176
  return;
1063
1177
  }
1064
- var changes = this.engine.addRows(this.sheetId, [this.toPhysicalRowPosition(row), amount]);
1178
+ var changes = this.engine.addRows(this.sheetId, [this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow), amount]);
1065
1179
  this.renderDependentSheets(changes);
1066
1180
  }
1067
1181
 
@@ -1069,18 +1183,18 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
1069
1183
  * `afterCreateCol` hook callback.
1070
1184
  *
1071
1185
  * @private
1072
- * @param {number} col Represents the visual index of first newly created column in the data source.
1186
+ * @param {number} visualColumn Represents the visual index of first newly created column in the data source.
1073
1187
  * @param {number} amount Number of newly created columns in the data source.
1074
1188
  * @param {string} [source] String that identifies source of hook call
1075
1189
  * ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).
1076
1190
  */
1077
1191
  }, {
1078
1192
  key: "onAfterCreateCol",
1079
- value: function onAfterCreateCol(col, amount, source) {
1193
+ value: function onAfterCreateCol(visualColumn, amount, source) {
1080
1194
  if (isBlockedSource(source)) {
1081
1195
  return;
1082
1196
  }
1083
- var changes = this.engine.addColumns(this.sheetId, [this.toPhysicalColumnPosition(col), amount]);
1197
+ var changes = this.engine.addColumns(this.sheetId, [this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn), amount]);
1084
1198
  this.renderDependentSheets(changes);
1085
1199
  }
1086
1200
 
@@ -1101,10 +1215,10 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
1101
1215
  if (isBlockedSource(source)) {
1102
1216
  return;
1103
1217
  }
1104
- var descendingPhysicalRows = physicalRows.sort().reverse();
1218
+ var descendingHfRows = this.rowAxisSyncer.getRemovedHfIndexes().sort().reverse();
1105
1219
  var changes = this.engine.batch(function () {
1106
- descendingPhysicalRows.forEach(function (physicalRow) {
1107
- _this18.engine.removeRows(_this18.sheetId, [physicalRow, 1]);
1220
+ descendingHfRows.forEach(function (hfRow) {
1221
+ _this18.engine.removeRows(_this18.sheetId, [hfRow, 1]);
1108
1222
  });
1109
1223
  });
1110
1224
  this.renderDependentSheets(changes);
@@ -1127,10 +1241,10 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
1127
1241
  if (isBlockedSource(source)) {
1128
1242
  return;
1129
1243
  }
1130
- var descendingPhysicalColumns = physicalColumns.sort().reverse();
1244
+ var descendingHfColumns = this.columnAxisSyncer.getRemovedHfIndexes().sort().reverse();
1131
1245
  var changes = this.engine.batch(function () {
1132
- descendingPhysicalColumns.forEach(function (physicalColumn) {
1133
- _this19.engine.removeColumns(_this19.sheetId, [physicalColumn, 1]);
1246
+ descendingHfColumns.forEach(function (hfColumn) {
1247
+ _this19.engine.removeColumns(_this19.sheetId, [hfColumn, 1]);
1134
1248
  });
1135
1249
  });
1136
1250
  this.renderDependentSheets(changes);
@@ -1255,6 +1369,11 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
1255
1369
  get: function get() {
1256
1370
  return PLUGIN_PRIORITY;
1257
1371
  }
1372
+ }, {
1373
+ key: "SETTING_KEYS",
1374
+ get: function get() {
1375
+ return [PLUGIN_KEY].concat(SETTING_KEYS);
1376
+ }
1258
1377
  }]);
1259
1378
  return Formulas;
1260
1379
  }(_base.BasePlugin);