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
@@ -2,8 +2,6 @@ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableTo
2
2
  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."); }
3
3
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
4
4
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
5
- 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; }
6
- 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; }
7
5
  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); }
8
6
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
9
7
  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."); }
@@ -19,6 +17,8 @@ import "core-js/modules/es.set.js";
19
17
  import "core-js/modules/es.string.iterator.js";
20
18
  import "core-js/modules/web.dom-collections.iterator.js";
21
19
  import "core-js/modules/es.array.map.js";
20
+ import "core-js/modules/es.string.starts-with.js";
21
+ import "core-js/modules/es.array.slice.js";
22
22
  import "core-js/modules/es.array.includes.js";
23
23
  import "core-js/modules/es.string.includes.js";
24
24
  import "core-js/modules/es.array.reverse.js";
@@ -35,13 +35,9 @@ import "core-js/modules/es.reflect.construct.js";
35
35
  import "core-js/modules/es.reflect.get.js";
36
36
  import "core-js/modules/es.object.get-own-property-descriptor.js";
37
37
  import "core-js/modules/es.symbol.iterator.js";
38
- import "core-js/modules/es.array.slice.js";
39
38
  import "core-js/modules/es.function.name.js";
40
39
  import "core-js/modules/es.array.from.js";
41
40
  import "core-js/modules/es.regexp.exec.js";
42
- import "core-js/modules/es.object.keys.js";
43
- import "core-js/modules/es.array.filter.js";
44
- import "core-js/modules/es.object.get-own-property-descriptors.js";
45
41
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
46
42
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
47
43
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
@@ -70,14 +66,15 @@ import { error, warn } from "../../helpers/console.mjs";
70
66
  import { isNumeric } from "../../helpers/number.mjs";
71
67
  import { isDefined, isUndefined } from "../../helpers/mixed.mjs";
72
68
  import { setupEngine, setupSheet, unregisterEngine, getRegisteredHotInstances } from "./engine/register.mjs";
73
- import { isEscapedFormulaExpression, unescapeFormulaExpression } from "./utils.mjs";
74
- import { getEngineSettingsWithOverrides } from "./engine/settings.mjs";
69
+ import { isEscapedFormulaExpression, unescapeFormulaExpression, isDate, isDateValid, getDateInHfFormat, getDateFromExcelDate, getDateInHotFormat, isFormula } from "./utils.mjs";
70
+ import { getEngineSettingsWithOverrides, haveEngineSettingsChanged } from "./engine/settings.mjs";
75
71
  import { isArrayOfArrays } from "../../helpers/data.mjs";
76
72
  import { toUpperCaseFirst } from "../../helpers/string.mjs";
77
73
  import Hooks from "../../pluginHooks.mjs";
74
+ import IndexSyncer from "./indexSyncer/index.mjs";
78
75
  export var PLUGIN_KEY = 'formulas';
76
+ export var SETTING_KEYS = ['maxRows', 'maxColumns', 'language'];
79
77
  export var PLUGIN_PRIORITY = 260;
80
- var ROW_MOVE_UNDO_REDO_NAME = 'row_move';
81
78
  Hooks.getSingleton().register('afterNamedExpressionAdded');
82
79
  Hooks.getSingleton().register('afterNamedExpressionRemoved');
83
80
  Hooks.getSingleton().register('afterSheetAdded');
@@ -183,6 +180,24 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
183
180
  * @type {string|null}
184
181
  */
185
182
  _defineProperty(_assertThisInitialized(_this), "sheetName", null);
183
+ /**
184
+ * Index synchronizer responsible for manipulating with some general options related to indexes synchronization.
185
+ *
186
+ * @type {IndexSyncer|null}
187
+ */
188
+ _defineProperty(_assertThisInitialized(_this), "indexSyncer", null);
189
+ /**
190
+ * Index synchronizer responsible for syncing the order of HOT and HF's data for the axis of the rows.
191
+ *
192
+ * @type {AxisSyncer|null}
193
+ */
194
+ _defineProperty(_assertThisInitialized(_this), "rowAxisSyncer", null);
195
+ /**
196
+ * Index synchronizer responsible for syncing the order of HOT and HF's data for the axis of the columns.
197
+ *
198
+ * @type {AxisSyncer|null}
199
+ */
200
+ _defineProperty(_assertThisInitialized(_this), "columnAxisSyncer", null);
186
201
  return _this;
187
202
  }
188
203
  _createClass(Formulas, [{
@@ -290,24 +305,66 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
290
305
  this.addHook('afterRemoveCol', function () {
291
306
  return _this8.onAfterRemoveCol.apply(_this8, arguments);
292
307
  });
308
+ this.indexSyncer = new IndexSyncer(this.hot.rowIndexMapper, this.hot.columnIndexMapper, function (postponedAction) {
309
+ _this8.hot.addHookOnce('init', function () {
310
+ // Engine is initialized after executing callback to `afterLoadData` hook. Thus, some actions on indexes should
311
+ // be postponed.
312
+ postponedAction();
313
+ });
314
+ });
315
+ this.rowAxisSyncer = this.indexSyncer.getForAxis('row');
316
+ this.columnAxisSyncer = this.indexSyncer.getForAxis('column');
317
+ this.hot.addHook('afterRowSequenceChange', this.rowAxisSyncer.getIndexesChangeSyncMethod());
318
+ this.hot.addHook('afterColumnSequenceChange', this.columnAxisSyncer.getIndexesChangeSyncMethod());
319
+ this.hot.addHook('beforeRowMove', function (movedRows, finalIndex, _, movePossible) {
320
+ _this8.rowAxisSyncer.storeMovesInformation(movedRows, finalIndex, movePossible);
321
+ });
322
+ this.hot.addHook('beforeColumnMove', function (movedColumns, finalIndex, _, movePossible) {
323
+ _this8.columnAxisSyncer.storeMovesInformation(movedColumns, finalIndex, movePossible);
324
+ });
325
+ this.hot.addHook('afterRowMove', function (movedRows, finalIndex, dropIndex, movePossible, orderChanged) {
326
+ _this8.rowAxisSyncer.calculateAndSyncMoves(movePossible, orderChanged);
327
+ });
328
+ this.hot.addHook('afterColumnMove', function (movedColumns, finalIndex, dropIndex, movePossible, orderChanged) {
329
+ _this8.columnAxisSyncer.calculateAndSyncMoves(movePossible, orderChanged);
330
+ });
331
+ this.hot.addHook('beforeColumnFreeze', function (column, freezePerformed) {
332
+ _this8.columnAxisSyncer.storeMovesInformation([column], _this8.hot.getSettings().fixedColumnsStart, freezePerformed);
333
+ });
334
+ this.hot.addHook('afterColumnFreeze', function (_, freezePerformed) {
335
+ _this8.columnAxisSyncer.calculateAndSyncMoves(freezePerformed, freezePerformed);
336
+ });
337
+ this.hot.addHook('beforeColumnUnfreeze', function (column, unfreezePerformed) {
338
+ _this8.columnAxisSyncer.storeMovesInformation([column], _this8.hot.getSettings().fixedColumnsStart - 1, unfreezePerformed);
339
+ });
340
+ this.hot.addHook('afterColumnUnfreeze', function (_, unfreezePerformed) {
341
+ _this8.columnAxisSyncer.calculateAndSyncMoves(unfreezePerformed, unfreezePerformed);
342
+ });
343
+
344
+ // TODO: Actions related to overwriting dates from HOT format to HF default format are done as callback to this
345
+ // hook, because some hooks, such as `afterLoadData` doesn't have information about composed cell properties.
346
+ // Another hooks are triggered to late for setting HF's engine data needed for some actions.
347
+ this.addHook('afterCellMetaReset', function () {
348
+ return _this8.onAfterCellMetaReset.apply(_this8, arguments);
349
+ });
293
350
 
294
351
  // Handling undo actions on data just using HyperFormula's UndoRedo mechanism
295
- this.addHook('beforeUndo', function (action) {
296
- // TODO: Move action isn't handled by HyperFormula.
297
- if ((action === null || action === void 0 ? void 0 : action.actionType) === ROW_MOVE_UNDO_REDO_NAME) {
298
- return;
299
- }
352
+ this.addHook('beforeUndo', function () {
353
+ _this8.indexSyncer.setPerformUndo(true);
300
354
  _this8.engine.undo();
301
355
  });
302
356
 
303
357
  // Handling redo actions on data just using HyperFormula's UndoRedo mechanism
304
- this.addHook('beforeRedo', function (action) {
305
- // TODO: Move action isn't handled by HyperFormula.
306
- if ((action === null || action === void 0 ? void 0 : action.actionType) === ROW_MOVE_UNDO_REDO_NAME) {
307
- return;
308
- }
358
+ this.addHook('beforeRedo', function () {
359
+ _this8.indexSyncer.setPerformRedo(true);
309
360
  _this8.engine.redo();
310
361
  });
362
+ this.addHook('afterUndo', function () {
363
+ _this8.indexSyncer.setPerformUndo(false);
364
+ });
365
+ this.addHook('afterUndo', function () {
366
+ _this8.indexSyncer.setPerformRedo(false);
367
+ });
311
368
  this.addHook('afterDetachChild', function () {
312
369
  return _this8.onAfterDetachChild.apply(_this8, arguments);
313
370
  });
@@ -350,7 +407,10 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
350
407
  }, {
351
408
  key: "updatePlugin",
352
409
  value: function updatePlugin(newSettings) {
353
- this.engine.updateConfig(getEngineSettingsWithOverrides(this.hot.getSettings()));
410
+ var newEngineSettings = getEngineSettingsWithOverrides(this.hot.getSettings());
411
+ if (haveEngineSettingsChanged(this.engine.getConfig(), newEngineSettings)) {
412
+ this.engine.updateConfig(newEngineSettings);
413
+ }
354
414
  var pluginSettings = this.hot.getSettings()[PLUGIN_KEY];
355
415
  if (isDefined(pluginSettings) && isDefined(pluginSettings.sheetName) && pluginSettings.sheetName !== this.sheetName) {
356
416
  this.switchSheet(pluginSettings.sheetName);
@@ -389,63 +449,6 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
389
449
  _get(_getPrototypeOf(Formulas.prototype), "destroy", this).call(this);
390
450
  }
391
451
 
392
- /**
393
- * Helper function for `toPhysicalRowPosition` and `toPhysicalColumnPosition`.
394
- *
395
- * @private
396
- * @param {number} visualIndex Visual entry index.
397
- * @param {number} physicalIndex Physical entry index.
398
- * @param {number} entriesCount Visual entries count.
399
- * @param {number} sourceEntriesCount Source entries count.
400
- * @param {boolean} contained `true` if it should return only indexes within boundaries of the table (basically
401
- * `toPhysical` alias.
402
- * @returns {*}
403
- */
404
- }, {
405
- key: "getPhysicalIndexPosition",
406
- value: function getPhysicalIndexPosition(visualIndex, physicalIndex, entriesCount, sourceEntriesCount, contained) {
407
- if (!contained) {
408
- if (visualIndex >= entriesCount) {
409
- return sourceEntriesCount + (visualIndex - entriesCount);
410
- }
411
- }
412
- return physicalIndex;
413
- }
414
-
415
- /**
416
- * Returns the physical row index. The difference between this and Core's `toPhysical` is that it doesn't return
417
- * `null` on rows with indexes higher than the number of rows.
418
- *
419
- * @private
420
- * @param {number} row Visual row index.
421
- * @param {boolean} [contained] `true` if it should return only indexes within boundaries of the table (basically
422
- * `toPhysical` alias.
423
- * @returns {number} The physical row index.
424
- */
425
- }, {
426
- key: "toPhysicalRowPosition",
427
- value: function toPhysicalRowPosition(row) {
428
- var contained = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
429
- return this.getPhysicalIndexPosition(row, this.hot.toPhysicalRow(row), this.hot.countRows(), this.hot.countSourceRows(), contained);
430
- }
431
-
432
- /**
433
- * Returns the physical column index. The difference between this and Core's `toPhysical` is that it doesn't return
434
- * `null` on columns with indexes higher than the number of columns.
435
- *
436
- * @private
437
- * @param {number} column Visual column index.
438
- * @param {boolean} [contained] `true` if it should return only indexes within boundaries of the table (basically
439
- * `toPhysical` alias.
440
- * @returns {number} The physical column index.
441
- */
442
- }, {
443
- key: "toPhysicalColumnPosition",
444
- value: function toPhysicalColumnPosition(column) {
445
- var contained = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
446
- return this.getPhysicalIndexPosition(column, this.hot.toPhysicalColumn(column), this.hot.countCols(), this.hot.countSourceCols(), contained);
447
- }
448
-
449
452
  /**
450
453
  * Add a sheet to the shared HyperFormula instance.
451
454
  *
@@ -516,8 +519,8 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
516
519
  if (physicalRow !== null && physicalColumn !== null) {
517
520
  return this.engine.getCellType({
518
521
  sheet: sheet,
519
- row: physicalRow,
520
- col: physicalColumn
522
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),
523
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column)
521
524
  });
522
525
  } else {
523
526
  // Should return `EMPTY` when out of bounds (according to the test cases).
@@ -537,15 +540,10 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
537
540
  key: "isFormulaCellType",
538
541
  value: function isFormulaCellType(row, column) {
539
542
  var sheet = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.sheetId;
540
- var physicalRow = this.hot.toPhysicalRow(row);
541
- var physicalColumn = this.hot.toPhysicalColumn(column);
542
- if (physicalRow === null || physicalColumn === null) {
543
- return false;
544
- }
545
543
  return this.engine.doesCellHaveFormula({
546
544
  sheet: sheet,
547
- row: physicalRow,
548
- col: physicalColumn
545
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),
546
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column)
549
547
  });
550
548
  }
551
549
 
@@ -610,11 +608,9 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
610
608
  var _ref8 = (_change$address3 = change.address) !== null && _change$address3 !== void 0 ? _change$address3 : {},
611
609
  row = _ref8.row,
612
610
  col = _ref8.col;
613
- var visualRow = isDefined(row) ? _this12.hot.toVisualRow(row) : null;
614
- var visualColumn = isDefined(col) ? _this12.hot.toVisualColumn(col) : null;
615
611
 
616
612
  // Don't try to validate cells outside of the visual part of the table.
617
- if (visualRow === null || visualColumn === null) {
613
+ if (isDefined(row) === false || isDefined(col) === false || row >= _this12.hot.countRows() || col >= _this12.hot.countCols()) {
618
614
  return;
619
615
  }
620
616
 
@@ -633,7 +629,7 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
633
629
  }
634
630
 
635
631
  // It will just re-render certain cell when necessary.
636
- boundHot.validateCell(boundHot.getDataAtCell(visualRow, visualColumn), boundHot.getCellMeta(visualRow, visualColumn), function () {});
632
+ boundHot.validateCell(boundHot.getDataAtCell(row, col), boundHot.getCellMeta(row, col), function () {});
637
633
  }
638
634
  });
639
635
  }
@@ -651,14 +647,24 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
651
647
  key: "syncChangeWithEngine",
652
648
  value: function syncChangeWithEngine(row, column, newValue) {
653
649
  var address = {
654
- row: this.toPhysicalRowPosition(row),
655
- col: this.toPhysicalColumnPosition(column),
650
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),
651
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column),
656
652
  sheet: this.sheetId
657
653
  };
658
654
  if (!this.engine.isItPossibleToSetCellContents(address)) {
659
655
  warn("Not possible to set cell data at ".concat(JSON.stringify(address)));
660
656
  return;
661
657
  }
658
+ var cellMeta = this.hot.getCellMeta(row, column);
659
+ if (isDate(newValue, cellMeta.type)) {
660
+ if (isDateValid(newValue, cellMeta.dateFormat)) {
661
+ // Rewriting date in HOT format to HF format.
662
+ newValue = getDateInHfFormat(newValue, cellMeta.dateFormat);
663
+ } else if (isFormula(newValue) === false) {
664
+ // Escaping value from date parsing using "'" sign (HF feature).
665
+ newValue = "'".concat(newValue);
666
+ }
667
+ }
662
668
  return this.engine.setCellContents(address, newValue);
663
669
  }
664
670
 
@@ -678,11 +684,16 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
678
684
  var visualColumn = this.hot.propToCol(prop);
679
685
  if (this.isFormulaCellType(visualRow, visualColumn)) {
680
686
  var address = {
681
- row: this.hot.toPhysicalRow(visualRow),
682
- col: this.hot.toPhysicalColumn(visualColumn),
687
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
688
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
683
689
  sheet: this.sheetId
684
690
  };
685
- var cellValue = this.engine.getCellValue(address);
691
+ var cellMeta = this.hot.getCellMeta(visualRow, visualColumn);
692
+ var cellValue = this.engine.getCellValue(address); // Date as an integer (Excel-like date).
693
+
694
+ if (cellMeta.type === 'date' && isNumeric(cellValue)) {
695
+ cellValue = getDateFromExcelDate(cellValue, cellMeta.dateFormat);
696
+ }
686
697
 
687
698
  // If `cellValue` is an object it is expected to be an error
688
699
  return _typeof(cellValue) === 'object' && cellValue !== null ? cellValue.value : cellValue;
@@ -703,19 +714,41 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
703
714
  }, {
704
715
  key: "onBeforeAutofill",
705
716
  value: function onBeforeAutofill(fillData, sourceRange, targetRange) {
706
- var _this13 = this;
707
- var withSheetId = function withSheetId(range) {
708
- return _objectSpread(_objectSpread({}, range), {}, {
709
- sheet: _this13.sheetId
710
- });
711
- };
717
+ var _sourceRange$getTopSt = sourceRange.getTopStartCorner(),
718
+ sourceTopStartRow = _sourceRange$getTopSt.row,
719
+ sourceTopStartColumn = _sourceRange$getTopSt.col;
720
+ var _sourceRange$getBotto = sourceRange.getBottomEndCorner(),
721
+ sourceBottomEndRow = _sourceRange$getBotto.row,
722
+ sourceBottomEndColumn = _sourceRange$getBotto.col;
723
+ var _targetRange$getTopSt = targetRange.getTopStartCorner(),
724
+ targetTopStartRow = _targetRange$getTopSt.row,
725
+ targetTopStartColumn = _targetRange$getTopSt.col;
726
+ var _targetRange$getBotto = targetRange.getBottomEndCorner(),
727
+ targetBottomEndRow = _targetRange$getBotto.row,
728
+ targetBottomEndColumn = _targetRange$getBotto.col;
712
729
  var engineSourceRange = {
713
- start: withSheetId(sourceRange.getTopStartCorner()),
714
- end: withSheetId(sourceRange.getBottomEndCorner())
730
+ start: {
731
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(sourceTopStartRow),
732
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(sourceTopStartColumn),
733
+ sheet: this.sheetId
734
+ },
735
+ end: {
736
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(sourceBottomEndRow),
737
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(sourceBottomEndColumn),
738
+ sheet: this.sheetId
739
+ }
715
740
  };
716
741
  var engineTargetRange = {
717
- start: withSheetId(targetRange.getTopStartCorner()),
718
- end: withSheetId(targetRange.getBottomEndCorner())
742
+ start: {
743
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(targetTopStartRow),
744
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(targetTopStartColumn),
745
+ sheet: this.sheetId
746
+ },
747
+ end: {
748
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(targetBottomEndRow),
749
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(targetBottomEndColumn),
750
+ sheet: this.sheetId
751
+ }
719
752
  };
720
753
 
721
754
  // Blocks the autofill operation if HyperFormula says that at least one of
@@ -723,7 +756,33 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
723
756
  if (this.engine.isItPossibleToSetCellContents(engineTargetRange) === false) {
724
757
  return false;
725
758
  }
726
- return this.engine.getFillRangeData(engineSourceRange, engineTargetRange);
759
+ var fillRangeData = this.engine.getFillRangeData(engineSourceRange, engineTargetRange);
760
+ var _engineSourceRange$st = engineSourceRange.start,
761
+ sourceStartRow = _engineSourceRange$st.row,
762
+ sourceStartColumn = _engineSourceRange$st.col;
763
+ var _engineSourceRange$en = engineSourceRange.end,
764
+ sourceEndRow = _engineSourceRange$en.row,
765
+ sourceEndColumn = _engineSourceRange$en.col;
766
+ var populationRowLength = sourceEndRow - sourceStartRow + 1;
767
+ var populationColumnLength = sourceEndColumn - sourceStartColumn + 1;
768
+ for (var populatedRowIndex = 0; populatedRowIndex < fillRangeData.length; populatedRowIndex += 1) {
769
+ for (var populatedColumnIndex = 0; populatedColumnIndex < fillRangeData[populatedRowIndex].length; populatedColumnIndex += 1) {
770
+ var populatedValue = fillRangeData[populatedRowIndex][populatedColumnIndex];
771
+ var sourceRow = populatedRowIndex % populationRowLength;
772
+ var sourceColumn = populatedColumnIndex % populationColumnLength;
773
+ var sourceCellMeta = this.hot.getCellMeta(sourceRow, sourceColumn);
774
+ if (isDate(populatedValue, sourceCellMeta.type)) {
775
+ if (populatedValue.startsWith('\'')) {
776
+ // Populating values on HOT side without apostrophe.
777
+ fillRangeData[populatedRowIndex][populatedColumnIndex] = populatedValue.slice(1);
778
+ } else if (this.isFormulaCellType(sourceRow, sourceColumn, this.sheetId) === false) {
779
+ // Populating date in proper format, coming from the source cell.
780
+ fillRangeData[populatedRowIndex][populatedColumnIndex] = getDateInHotFormat(populatedValue, sourceCellMeta.dateFormat);
781
+ }
782
+ }
783
+ }
784
+ }
785
+ return fillRangeData;
727
786
  }
728
787
 
729
788
  /**
@@ -747,6 +806,40 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
747
806
  _classPrivateFieldSet(this, _hotWasInitializedWithEmptyData, isUndefined(this.hot.getSettings().data));
748
807
  }
749
808
 
809
+ /**
810
+ * Callback to `afterCellMetaReset` hook which is triggered after setting cell meta.
811
+ *
812
+ * @private
813
+ */
814
+ }, {
815
+ key: "onAfterCellMetaReset",
816
+ value: function onAfterCellMetaReset() {
817
+ var _this13 = this;
818
+ var sourceDataArray = this.hot.getSourceDataArray();
819
+ var valueChanged = false;
820
+ sourceDataArray.forEach(function (rowData, rowIndex) {
821
+ rowData.forEach(function (cellValue, columnIndex) {
822
+ var cellMeta = _this13.hot.getCellMeta(rowIndex, columnIndex);
823
+ var dateFormat = cellMeta.dateFormat;
824
+ if (isDate(cellValue, cellMeta.type)) {
825
+ valueChanged = true;
826
+ if (isDateValid(cellValue, dateFormat)) {
827
+ // Rewriting date in HOT format to HF format.
828
+ sourceDataArray[rowIndex][columnIndex] = getDateInHfFormat(cellValue, dateFormat);
829
+ } else if (_this13.isFormulaCellType(rowIndex, columnIndex) === false) {
830
+ // Escaping value from date parsing using "'" sign (HF feature).
831
+ sourceDataArray[rowIndex][columnIndex] = "'".concat(cellValue);
832
+ }
833
+ }
834
+ });
835
+ });
836
+ if (valueChanged === true) {
837
+ _classPrivateFieldSet(this, _internalOperationPending, true);
838
+ this.engine.setSheetContent(this.sheetId, sourceDataArray);
839
+ _classPrivateFieldSet(this, _internalOperationPending, false);
840
+ }
841
+ }
842
+
750
843
  /**
751
844
  * `afterLoadData` hook callback.
752
845
  *
@@ -767,7 +860,8 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
767
860
  var sourceDataArray = this.hot.getSourceDataArray();
768
861
  if (this.engine.isItPossibleToReplaceSheetContent(this.sheetId, sourceDataArray)) {
769
862
  _classPrivateFieldSet(this, _internalOperationPending, true);
770
- var dependentCells = this.engine.setSheetContent(this.sheetId, this.hot.getSourceDataArray());
863
+ var dependentCells = this.engine.setSheetContent(this.sheetId, sourceDataArray);
864
+ this.indexSyncer.setupSyncEndpoint(this.engine, this.sheetId);
771
865
  this.renderDependentSheets(dependentCells);
772
866
  _classPrivateFieldSet(this, _internalOperationPending, false);
773
867
  }
@@ -780,24 +874,27 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
780
874
  * `modifyData` hook callback.
781
875
  *
782
876
  * @private
783
- * @param {number} row Physical row height.
784
- * @param {number} column Physical column index.
877
+ * @param {number} physicalRow Physical row index.
878
+ * @param {number} visualColumn Visual column index.
785
879
  * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value`
786
880
  * property.
787
881
  * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).
788
882
  */
789
883
  }, {
790
884
  key: "onModifyData",
791
- value: function onModifyData(row, column, valueHolder, ioMode) {
885
+ value: function onModifyData(physicalRow, visualColumn, valueHolder, ioMode) {
792
886
  if (ioMode !== 'get' || _classPrivateFieldGet(this, _internalOperationPending) || this.sheetName === null || !this.engine.doesSheetExist(this.sheetName)) {
793
887
  return;
794
888
  }
795
- var visualRow = this.hot.toVisualRow(row);
889
+ var visualRow = this.hot.toVisualRow(physicalRow);
890
+ if (visualRow === null || visualColumn === null) {
891
+ return;
892
+ }
796
893
 
797
894
  // `column` is here as visual index because of inconsistencies related to hook execution in `src/dataMap`.
798
- var isFormulaCellType = this.isFormulaCellType(visualRow, column);
895
+ var isFormulaCellType = this.isFormulaCellType(visualRow, visualColumn);
799
896
  if (!isFormulaCellType) {
800
- var cellType = this.getCellType(visualRow, column);
897
+ var cellType = this.getCellType(visualRow, visualColumn);
801
898
  if (cellType !== 'ARRAY') {
802
899
  if (isEscapedFormulaExpression(valueHolder.value)) {
803
900
  valueHolder.value = unescapeFormulaExpression(valueHolder.value);
@@ -805,14 +902,16 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
805
902
  return;
806
903
  }
807
904
  }
808
-
809
- // `toPhysicalColumn` is here because of inconsistencies related to hook execution in `DataMap`.
810
905
  var address = {
811
- row: row,
812
- col: this.toPhysicalColumnPosition(column),
906
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
907
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
813
908
  sheet: this.sheetId
814
909
  };
815
- var cellValue = this.engine.getCellValue(address);
910
+ var cellValue = this.engine.getCellValue(address); // Date as an integer (Excel like date).
911
+ var cellMeta = this.hot.getCellMeta(visualRow, visualColumn);
912
+ if (cellMeta.type === 'date' && isNumeric(cellValue)) {
913
+ cellValue = getDateFromExcelDate(cellValue, cellMeta.dateFormat);
914
+ }
816
915
 
817
916
  // If `cellValue` is an object it is expected to be an error
818
917
  var value = _typeof(cellValue) === 'object' && cellValue !== null ? cellValue.value : cellValue;
@@ -837,6 +936,9 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
837
936
  }
838
937
  var visualRow = this.hot.toVisualRow(row);
839
938
  var visualColumn = this.hot.propToCol(columnOrProp);
939
+ if (visualRow === null || visualColumn === null) {
940
+ return;
941
+ }
840
942
 
841
943
  // `column` is here as visual index because of inconsistencies related to hook execution in `src/dataMap`.
842
944
  var isFormulaCellType = this.isFormulaCellType(visualRow, visualColumn);
@@ -856,9 +958,8 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
856
958
  return;
857
959
  }
858
960
  var address = {
859
- row: row,
860
- // Workaround for inconsistencies in `src/dataSource.js`
861
- col: this.toPhysicalColumnPosition(visualColumn),
961
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
962
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
862
963
  sheet: this.sheetId
863
964
  };
864
965
  valueHolder.value = this.engine.getCellSerialized(address);
@@ -884,21 +985,21 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
884
985
  var dependentCells = this.engine.batch(function () {
885
986
  changes.forEach(function (_ref9) {
886
987
  var _ref10 = _slicedToArray(_ref9, 4),
887
- row = _ref10[0],
988
+ visualRow = _ref10[0],
888
989
  prop = _ref10[1],
889
990
  newValue = _ref10[3];
890
- var column = _this14.hot.propToCol(prop);
891
- var physicalRow = _this14.hot.toPhysicalRow(row);
892
- var physicalColumn = _this14.hot.toPhysicalColumn(column);
991
+ var visualColumn = _this14.hot.propToCol(prop);
992
+ var physicalRow = _this14.hot.toPhysicalRow(visualRow);
993
+ var physicalColumn = _this14.hot.toPhysicalColumn(visualColumn);
893
994
  var address = {
894
- row: physicalRow,
895
- col: physicalColumn,
995
+ row: _this14.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
996
+ col: _this14.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
896
997
  sheet: _this14.sheetId
897
998
  };
898
999
  if (physicalRow !== null && physicalColumn !== null) {
899
- _this14.syncChangeWithEngine(row, column, newValue);
1000
+ _this14.syncChangeWithEngine(visualRow, visualColumn, newValue);
900
1001
  } else {
901
- outOfBoundsChanges.push([row, column, newValue]);
1002
+ outOfBoundsChanges.push([visualRow, visualColumn, newValue]);
902
1003
  }
903
1004
  changedCells.push({
904
1005
  address: address
@@ -944,16 +1045,16 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
944
1045
  var changedCells = [];
945
1046
  changes.forEach(function (_ref13) {
946
1047
  var _ref14 = _slicedToArray(_ref13, 4),
947
- row = _ref14[0],
1048
+ visualRow = _ref14[0],
948
1049
  prop = _ref14[1],
949
1050
  newValue = _ref14[3];
950
- var column = _this15.hot.propToCol(prop);
951
- if (!isNumeric(column)) {
1051
+ var visualColumn = _this15.hot.propToCol(prop);
1052
+ if (!isNumeric(visualColumn)) {
952
1053
  return;
953
1054
  }
954
1055
  var address = {
955
- row: row,
956
- col: _this15.toPhysicalColumnPosition(column),
1056
+ row: _this15.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
1057
+ col: _this15.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
957
1058
  sheet: _this15.sheetId
958
1059
  };
959
1060
  if (!_this15.engine.isItPossibleToSetCellContents(address)) {
@@ -973,14 +1074,19 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
973
1074
  * `beforeCreateRow` hook callback.
974
1075
  *
975
1076
  * @private
976
- * @param {number} row Represents the visual index of first newly created row in the data source array.
1077
+ * @param {number} visualRow Represents the visual index of first newly created row in the data source array.
977
1078
  * @param {number} amount Number of newly created rows in the data source array.
978
1079
  * @returns {*|boolean} If false is returned the action is canceled.
979
1080
  */
980
1081
  }, {
981
1082
  key: "onBeforeCreateRow",
982
- value: function onBeforeCreateRow(row, amount) {
983
- if (this.sheetId === null || !this.engine.doesSheetExist(this.sheetName) || !this.engine.isItPossibleToAddRows(this.sheetId, [this.toPhysicalRowPosition(row), amount])) {
1083
+ value: function onBeforeCreateRow(visualRow, amount) {
1084
+ var hfRowIndex = this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow);
1085
+ if (visualRow >= this.hot.countRows()) {
1086
+ hfRowIndex = visualRow; // Row beyond the table boundaries.
1087
+ }
1088
+
1089
+ if (this.sheetId === null || !this.engine.doesSheetExist(this.sheetName) || !this.engine.isItPossibleToAddRows(this.sheetId, [hfRowIndex, amount])) {
984
1090
  return false;
985
1091
  }
986
1092
  }
@@ -989,14 +1095,19 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
989
1095
  * `beforeCreateCol` hook callback.
990
1096
  *
991
1097
  * @private
992
- * @param {number} col Represents the visual index of first newly created column in the data source.
1098
+ * @param {number} visualColumn Represents the visual index of first newly created column in the data source.
993
1099
  * @param {number} amount Number of newly created columns in the data source.
994
1100
  * @returns {*|boolean} If false is returned the action is canceled.
995
1101
  */
996
1102
  }, {
997
1103
  key: "onBeforeCreateCol",
998
- value: function onBeforeCreateCol(col, amount) {
999
- if (this.sheetId === null || !this.engine.doesSheetExist(this.sheetName) || !this.engine.isItPossibleToAddColumns(this.sheetId, [this.toPhysicalColumnPosition(col), amount])) {
1104
+ value: function onBeforeCreateCol(visualColumn, amount) {
1105
+ var hfColumnIndex = this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn);
1106
+ if (visualColumn >= this.hot.countCols()) {
1107
+ hfColumnIndex = visualColumn; // Column beyond the table boundaries.
1108
+ }
1109
+
1110
+ if (this.sheetId === null || !this.engine.doesSheetExist(this.sheetName) || !this.engine.isItPossibleToAddColumns(this.sheetId, [hfColumnIndex, amount])) {
1000
1111
  return false;
1001
1112
  }
1002
1113
  }
@@ -1014,8 +1125,9 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
1014
1125
  key: "onBeforeRemoveRow",
1015
1126
  value: function onBeforeRemoveRow(row, amount, physicalRows) {
1016
1127
  var _this16 = this;
1017
- var possible = physicalRows.every(function (physicalRow) {
1018
- return _this16.engine.isItPossibleToRemoveRows(_this16.sheetId, [physicalRow, 1]);
1128
+ var hfRows = this.rowAxisSyncer.setRemovedHfIndexes(physicalRows);
1129
+ var possible = hfRows.every(function (hfRow) {
1130
+ return _this16.engine.isItPossibleToRemoveRows(_this16.sheetId, [hfRow, 1]);
1019
1131
  });
1020
1132
  return possible === false ? false : void 0;
1021
1133
  }
@@ -1033,8 +1145,9 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
1033
1145
  key: "onBeforeRemoveCol",
1034
1146
  value: function onBeforeRemoveCol(col, amount, physicalColumns) {
1035
1147
  var _this17 = this;
1036
- var possible = physicalColumns.every(function (physicalColumn) {
1037
- return _this17.engine.isItPossibleToRemoveColumns(_this17.sheetId, [physicalColumn, 1]);
1148
+ var hfColumns = this.columnAxisSyncer.setRemovedHfIndexes(physicalColumns);
1149
+ var possible = hfColumns.every(function (hfColumn) {
1150
+ return _this17.engine.isItPossibleToRemoveColumns(_this17.sheetId, [hfColumn, 1]);
1038
1151
  });
1039
1152
  return possible === false ? false : void 0;
1040
1153
  }
@@ -1043,18 +1156,18 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
1043
1156
  * `afterCreateRow` hook callback.
1044
1157
  *
1045
1158
  * @private
1046
- * @param {number} row Represents the visual index of first newly created row in the data source array.
1159
+ * @param {number} visualRow Represents the visual index of first newly created row in the data source array.
1047
1160
  * @param {number} amount Number of newly created rows in the data source array.
1048
1161
  * @param {string} [source] String that identifies source of hook call
1049
1162
  * ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).
1050
1163
  */
1051
1164
  }, {
1052
1165
  key: "onAfterCreateRow",
1053
- value: function onAfterCreateRow(row, amount, source) {
1166
+ value: function onAfterCreateRow(visualRow, amount, source) {
1054
1167
  if (isBlockedSource(source)) {
1055
1168
  return;
1056
1169
  }
1057
- var changes = this.engine.addRows(this.sheetId, [this.toPhysicalRowPosition(row), amount]);
1170
+ var changes = this.engine.addRows(this.sheetId, [this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow), amount]);
1058
1171
  this.renderDependentSheets(changes);
1059
1172
  }
1060
1173
 
@@ -1062,18 +1175,18 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
1062
1175
  * `afterCreateCol` hook callback.
1063
1176
  *
1064
1177
  * @private
1065
- * @param {number} col Represents the visual index of first newly created column in the data source.
1178
+ * @param {number} visualColumn Represents the visual index of first newly created column in the data source.
1066
1179
  * @param {number} amount Number of newly created columns in the data source.
1067
1180
  * @param {string} [source] String that identifies source of hook call
1068
1181
  * ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).
1069
1182
  */
1070
1183
  }, {
1071
1184
  key: "onAfterCreateCol",
1072
- value: function onAfterCreateCol(col, amount, source) {
1185
+ value: function onAfterCreateCol(visualColumn, amount, source) {
1073
1186
  if (isBlockedSource(source)) {
1074
1187
  return;
1075
1188
  }
1076
- var changes = this.engine.addColumns(this.sheetId, [this.toPhysicalColumnPosition(col), amount]);
1189
+ var changes = this.engine.addColumns(this.sheetId, [this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn), amount]);
1077
1190
  this.renderDependentSheets(changes);
1078
1191
  }
1079
1192
 
@@ -1094,10 +1207,10 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
1094
1207
  if (isBlockedSource(source)) {
1095
1208
  return;
1096
1209
  }
1097
- var descendingPhysicalRows = physicalRows.sort().reverse();
1210
+ var descendingHfRows = this.rowAxisSyncer.getRemovedHfIndexes().sort().reverse();
1098
1211
  var changes = this.engine.batch(function () {
1099
- descendingPhysicalRows.forEach(function (physicalRow) {
1100
- _this18.engine.removeRows(_this18.sheetId, [physicalRow, 1]);
1212
+ descendingHfRows.forEach(function (hfRow) {
1213
+ _this18.engine.removeRows(_this18.sheetId, [hfRow, 1]);
1101
1214
  });
1102
1215
  });
1103
1216
  this.renderDependentSheets(changes);
@@ -1120,10 +1233,10 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
1120
1233
  if (isBlockedSource(source)) {
1121
1234
  return;
1122
1235
  }
1123
- var descendingPhysicalColumns = physicalColumns.sort().reverse();
1236
+ var descendingHfColumns = this.columnAxisSyncer.getRemovedHfIndexes().sort().reverse();
1124
1237
  var changes = this.engine.batch(function () {
1125
- descendingPhysicalColumns.forEach(function (physicalColumn) {
1126
- _this19.engine.removeColumns(_this19.sheetId, [physicalColumn, 1]);
1238
+ descendingHfColumns.forEach(function (hfColumn) {
1239
+ _this19.engine.removeColumns(_this19.sheetId, [hfColumn, 1]);
1127
1240
  });
1128
1241
  });
1129
1242
  this.renderDependentSheets(changes);
@@ -1248,6 +1361,11 @@ export var Formulas = /*#__PURE__*/function (_BasePlugin) {
1248
1361
  get: function get() {
1249
1362
  return PLUGIN_PRIORITY;
1250
1363
  }
1364
+ }, {
1365
+ key: "SETTING_KEYS",
1366
+ get: function get() {
1367
+ return [PLUGIN_KEY].concat(SETTING_KEYS);
1368
+ }
1251
1369
  }]);
1252
1370
  return Formulas;
1253
1371
  }(BasePlugin);