handsontable 12.3.3 → 12.4.0-next-acb5d99-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 (172) 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/core/_base.js +16 -20
  6. package/3rdparty/walkontable/src/core/_base.mjs +16 -20
  7. package/3rdparty/walkontable/src/event.js +4 -0
  8. package/3rdparty/walkontable/src/event.mjs +4 -0
  9. package/3rdparty/walkontable/src/overlay/_base.js +6 -7
  10. package/3rdparty/walkontable/src/overlay/_base.mjs +6 -7
  11. package/3rdparty/walkontable/src/overlay/bottom.js +6 -7
  12. package/3rdparty/walkontable/src/overlay/bottom.mjs +6 -7
  13. package/3rdparty/walkontable/src/overlay/top.js +6 -7
  14. package/3rdparty/walkontable/src/overlay/top.mjs +6 -7
  15. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.js +10 -12
  16. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.mjs +10 -12
  17. package/3rdparty/walkontable/src/overlays.js +55 -64
  18. package/3rdparty/walkontable/src/overlays.mjs +55 -64
  19. package/3rdparty/walkontable/src/scroll.js +20 -23
  20. package/3rdparty/walkontable/src/scroll.mjs +20 -23
  21. package/3rdparty/walkontable/src/settings.js +13 -15
  22. package/3rdparty/walkontable/src/settings.mjs +13 -15
  23. package/3rdparty/walkontable/src/table.js +22 -26
  24. package/3rdparty/walkontable/src/table.mjs +22 -26
  25. package/CHANGELOG.md +14 -0
  26. package/base.js +2 -4
  27. package/base.mjs +2 -2
  28. package/core.js +23 -6
  29. package/core.mjs +23 -6
  30. package/dataMap/dataSource.js +5 -5
  31. package/dataMap/dataSource.mjs +5 -5
  32. package/dataMap/metaManager/metaSchema.js +9 -7
  33. package/dataMap/metaManager/metaSchema.mjs +9 -7
  34. package/dist/handsontable.css +2 -2
  35. package/dist/handsontable.full.css +2 -2
  36. package/dist/handsontable.full.js +7364 -5992
  37. package/dist/handsontable.full.min.css +2 -2
  38. package/dist/handsontable.full.min.js +256 -234
  39. package/dist/handsontable.js +4326 -3275
  40. package/dist/handsontable.min.css +2 -2
  41. package/dist/handsontable.min.js +11 -3
  42. package/dist/languages/all.js +133 -0
  43. package/dist/languages/ar-AR.js +7 -0
  44. package/dist/languages/cs-CZ.js +7 -0
  45. package/dist/languages/de-CH.js +7 -0
  46. package/dist/languages/de-DE.js +7 -0
  47. package/dist/languages/en-US.js +7 -0
  48. package/dist/languages/es-MX.js +7 -0
  49. package/dist/languages/fr-FR.js +7 -0
  50. package/dist/languages/it-IT.js +7 -0
  51. package/dist/languages/ja-JP.js +7 -0
  52. package/dist/languages/ko-KR.js +7 -0
  53. package/dist/languages/lv-LV.js +7 -0
  54. package/dist/languages/nb-NO.js +7 -0
  55. package/dist/languages/nl-NL.js +7 -0
  56. package/dist/languages/pl-PL.js +7 -0
  57. package/dist/languages/pt-BR.js +7 -0
  58. package/dist/languages/ru-RU.js +7 -0
  59. package/dist/languages/sr-SP.js +7 -0
  60. package/dist/languages/zh-CN.js +7 -0
  61. package/dist/languages/zh-TW.js +7 -0
  62. package/editors/autocompleteEditor/autocompleteEditor.js +8 -9
  63. package/editors/autocompleteEditor/autocompleteEditor.mjs +8 -9
  64. package/helpers/mixed.js +2 -2
  65. package/helpers/mixed.mjs +2 -2
  66. package/i18n/languages/ar-AR.js +7 -1
  67. package/i18n/languages/cs-CZ.js +7 -1
  68. package/i18n/languages/de-CH.js +7 -1
  69. package/i18n/languages/de-DE.js +7 -1
  70. package/i18n/languages/en-US.js +7 -1
  71. package/i18n/languages/es-MX.js +7 -1
  72. package/i18n/languages/fr-FR.js +7 -1
  73. package/i18n/languages/it-IT.js +7 -1
  74. package/i18n/languages/ja-JP.js +7 -1
  75. package/i18n/languages/ko-KR.js +7 -1
  76. package/i18n/languages/lv-LV.js +7 -1
  77. package/i18n/languages/nb-NO.js +7 -1
  78. package/i18n/languages/nl-NL.js +7 -1
  79. package/i18n/languages/pl-PL.js +7 -1
  80. package/i18n/languages/pt-BR.js +7 -1
  81. package/i18n/languages/ru-RU.js +7 -1
  82. package/i18n/languages/sr-SP.js +7 -1
  83. package/i18n/languages/zh-CN.js +7 -1
  84. package/i18n/languages/zh-TW.js +7 -1
  85. package/languages/all.js +133 -0
  86. package/languages/ar-AR.js +7 -0
  87. package/languages/cs-CZ.js +7 -0
  88. package/languages/de-CH.js +7 -0
  89. package/languages/de-DE.js +7 -0
  90. package/languages/en-US.js +7 -0
  91. package/languages/es-MX.js +7 -0
  92. package/languages/fr-FR.js +7 -0
  93. package/languages/index.js +133 -0
  94. package/languages/it-IT.js +7 -0
  95. package/languages/ja-JP.js +7 -0
  96. package/languages/ko-KR.js +7 -0
  97. package/languages/lv-LV.js +7 -0
  98. package/languages/nb-NO.js +7 -0
  99. package/languages/nl-NL.js +7 -0
  100. package/languages/pl-PL.js +7 -0
  101. package/languages/pt-BR.js +7 -0
  102. package/languages/ru-RU.js +7 -0
  103. package/languages/sr-SP.js +7 -0
  104. package/languages/zh-CN.js +7 -0
  105. package/languages/zh-TW.js +7 -0
  106. package/package.json +3 -2
  107. package/pluginHooks.js +16 -6
  108. package/pluginHooks.mjs +15 -3
  109. package/plugins/autoRowSize/autoRowSize.js +2 -2
  110. package/plugins/autoRowSize/autoRowSize.mjs +2 -2
  111. package/plugins/base/base.js +9 -10
  112. package/plugins/base/base.mjs +9 -10
  113. package/plugins/collapsibleColumns/collapsibleColumns.js +24 -7
  114. package/plugins/collapsibleColumns/collapsibleColumns.mjs +24 -7
  115. package/plugins/copyPaste/copyPaste.js +92 -16
  116. package/plugins/copyPaste/copyPaste.mjs +92 -16
  117. package/plugins/copyPaste/copyableRanges.js +39 -39
  118. package/plugins/copyPaste/copyableRanges.mjs +32 -32
  119. package/plugins/customBorders/customBorders.d.ts +2 -0
  120. package/plugins/customBorders/customBorders.js +6 -7
  121. package/plugins/customBorders/customBorders.mjs +6 -7
  122. package/plugins/filters/filters.js +5 -0
  123. package/plugins/filters/filters.mjs +5 -0
  124. package/plugins/formulas/engine/register.js +9 -0
  125. package/plugins/formulas/engine/register.mjs +13 -4
  126. package/plugins/formulas/engine/settings.js +18 -3
  127. package/plugins/formulas/engine/settings.mjs +16 -3
  128. package/plugins/formulas/formulas.js +308 -162
  129. package/plugins/formulas/formulas.mjs +308 -163
  130. package/plugins/formulas/indexSyncer/axisSyncer.js +379 -0
  131. package/plugins/formulas/indexSyncer/axisSyncer.mjs +374 -0
  132. package/plugins/formulas/indexSyncer/index.js +225 -0
  133. package/plugins/formulas/indexSyncer/index.mjs +219 -0
  134. package/plugins/formulas/utils.js +81 -0
  135. package/plugins/formulas/utils.mjs +74 -0
  136. package/plugins/hiddenColumns/hiddenColumns.js +12 -7
  137. package/plugins/hiddenColumns/hiddenColumns.mjs +12 -7
  138. package/plugins/hiddenRows/hiddenRows.js +12 -7
  139. package/plugins/hiddenRows/hiddenRows.mjs +12 -7
  140. package/plugins/manualRowMove/manualRowMove.js +26 -11
  141. package/plugins/manualRowMove/manualRowMove.mjs +27 -12
  142. package/plugins/nestedHeaders/nestedHeaders.js +26 -7
  143. package/plugins/nestedHeaders/nestedHeaders.mjs +26 -7
  144. package/plugins/nestedHeaders/stateManager/headersTree.js +23 -26
  145. package/plugins/nestedHeaders/stateManager/headersTree.mjs +20 -23
  146. package/plugins/nestedHeaders/stateManager/index.js +21 -3
  147. package/plugins/nestedHeaders/stateManager/index.mjs +18 -0
  148. package/plugins/nestedHeaders/stateManager/matrixGenerator.js +1 -0
  149. package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +1 -1
  150. package/plugins/nestedHeaders/stateManager/sourceSettings.js +19 -0
  151. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +19 -0
  152. package/plugins/nestedHeaders/utils/ghostTable.js +30 -35
  153. package/plugins/nestedHeaders/utils/ghostTable.mjs +30 -35
  154. package/plugins/registry.js +3 -1
  155. package/plugins/undoRedo/undoRedo.js +0 -1
  156. package/plugins/undoRedo/undoRedo.mjs +0 -1
  157. package/selection/highlight/visualSelection.js +5 -6
  158. package/selection/highlight/visualSelection.mjs +5 -6
  159. package/tableView.js +62 -72
  160. package/tableView.mjs +62 -72
  161. package/translations/changesObservable/observable.js +41 -46
  162. package/translations/changesObservable/observable.mjs +36 -41
  163. package/translations/changesObservable/observer.js +8 -1
  164. package/translations/changesObservable/observer.mjs +7 -0
  165. package/translations/indexMapper.js +21 -0
  166. package/translations/indexMapper.mjs +21 -0
  167. package/translations/maps/linkedPhysicalIndexToValueMap.js +6 -0
  168. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +6 -0
  169. package/utils/dataStructures/tree.js +15 -18
  170. package/utils/dataStructures/tree.mjs +15 -18
  171. package/utils/parseTable.js +5 -1
  172. 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');
@@ -123,14 +121,31 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
123
121
  _args[_key] = arguments[_key];
124
122
  }
125
123
  _this = _super.call.apply(_super, [this].concat(_args));
124
+ /**
125
+ * Flag used to bypass hooks in internal operations.
126
+ *
127
+ * @private
128
+ * @type {boolean}
129
+ */
126
130
  _classPrivateFieldInitSpec(_assertThisInitialized(_this), _internalOperationPending, {
127
131
  writable: true,
128
132
  value: false
129
133
  });
134
+ /**
135
+ * Flag needed to mark if Handsontable was initialized with no data.
136
+ * (Required to work around the fact, that Handsontable auto-generates sample data, when no data is provided).
137
+ *
138
+ * @type {boolean}
139
+ */
130
140
  _classPrivateFieldInitSpec(_assertThisInitialized(_this), _hotWasInitializedWithEmptyData, {
131
141
  writable: true,
132
142
  value: false
133
143
  });
144
+ /**
145
+ * The list of the HyperFormula listeners.
146
+ *
147
+ * @type {Array}
148
+ */
134
149
  _classPrivateFieldInitSpec(_assertThisInitialized(_this), _engineListeners, {
135
150
  writable: true,
136
151
  value: [['valuesUpdated', function () {
@@ -153,9 +168,44 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
153
168
  return (_this7 = _this).onEngineSheetRemoved.apply(_this7, arguments);
154
169
  }]]
155
170
  });
171
+ /**
172
+ * Static register used to set up one global HyperFormula instance.
173
+ * TODO: currently used in tests, might be removed later.
174
+ *
175
+ * @private
176
+ * @type {object}
177
+ */
156
178
  _defineProperty(_assertThisInitialized(_this), "staticRegister", (0, _staticRegister.default)('formulas'));
179
+ /**
180
+ * The engine instance that will be used for this instance of Handsontable.
181
+ *
182
+ * @type {HyperFormula|null}
183
+ */
157
184
  _defineProperty(_assertThisInitialized(_this), "engine", null);
185
+ /**
186
+ * HyperFormula's sheet name.
187
+ *
188
+ * @type {string|null}
189
+ */
158
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);
159
209
  return _this;
160
210
  }
161
211
  _createClass(Formulas, [{
@@ -263,24 +313,66 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
263
313
  this.addHook('afterRemoveCol', function () {
264
314
  return _this8.onAfterRemoveCol.apply(_this8, arguments);
265
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
+ });
266
358
 
267
359
  // Handling undo actions on data just using HyperFormula's UndoRedo mechanism
268
- this.addHook('beforeUndo', function (action) {
269
- // TODO: Move action isn't handled by HyperFormula.
270
- if ((action === null || action === void 0 ? void 0 : action.actionType) === ROW_MOVE_UNDO_REDO_NAME) {
271
- return;
272
- }
360
+ this.addHook('beforeUndo', function () {
361
+ _this8.indexSyncer.setPerformUndo(true);
273
362
  _this8.engine.undo();
274
363
  });
275
364
 
276
365
  // Handling redo actions on data just using HyperFormula's UndoRedo mechanism
277
- this.addHook('beforeRedo', function (action) {
278
- // TODO: Move action isn't handled by HyperFormula.
279
- if ((action === null || action === void 0 ? void 0 : action.actionType) === ROW_MOVE_UNDO_REDO_NAME) {
280
- return;
281
- }
366
+ this.addHook('beforeRedo', function () {
367
+ _this8.indexSyncer.setPerformRedo(true);
282
368
  _this8.engine.redo();
283
369
  });
370
+ this.addHook('afterUndo', function () {
371
+ _this8.indexSyncer.setPerformUndo(false);
372
+ });
373
+ this.addHook('afterUndo', function () {
374
+ _this8.indexSyncer.setPerformRedo(false);
375
+ });
284
376
  this.addHook('afterDetachChild', function () {
285
377
  return _this8.onAfterDetachChild.apply(_this8, arguments);
286
378
  });
@@ -323,7 +415,10 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
323
415
  }, {
324
416
  key: "updatePlugin",
325
417
  value: function updatePlugin(newSettings) {
326
- 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
+ }
327
422
  var pluginSettings = this.hot.getSettings()[PLUGIN_KEY];
328
423
  if ((0, _mixed.isDefined)(pluginSettings) && (0, _mixed.isDefined)(pluginSettings.sheetName) && pluginSettings.sheetName !== this.sheetName) {
329
424
  this.switchSheet(pluginSettings.sheetName);
@@ -362,63 +457,6 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
362
457
  _get(_getPrototypeOf(Formulas.prototype), "destroy", this).call(this);
363
458
  }
364
459
 
365
- /**
366
- * Helper function for `toPhysicalRowPosition` and `toPhysicalColumnPosition`.
367
- *
368
- * @private
369
- * @param {number} visualIndex Visual entry index.
370
- * @param {number} physicalIndex Physical entry index.
371
- * @param {number} entriesCount Visual entries count.
372
- * @param {number} sourceEntriesCount Source entries count.
373
- * @param {boolean} contained `true` if it should return only indexes within boundaries of the table (basically
374
- * `toPhysical` alias.
375
- * @returns {*}
376
- */
377
- }, {
378
- key: "getPhysicalIndexPosition",
379
- value: function getPhysicalIndexPosition(visualIndex, physicalIndex, entriesCount, sourceEntriesCount, contained) {
380
- if (!contained) {
381
- if (visualIndex >= entriesCount) {
382
- return sourceEntriesCount + (visualIndex - entriesCount);
383
- }
384
- }
385
- return physicalIndex;
386
- }
387
-
388
- /**
389
- * Returns the physical row index. The difference between this and Core's `toPhysical` is that it doesn't return
390
- * `null` on rows with indexes higher than the number of rows.
391
- *
392
- * @private
393
- * @param {number} row Visual row index.
394
- * @param {boolean} [contained] `true` if it should return only indexes within boundaries of the table (basically
395
- * `toPhysical` alias.
396
- * @returns {number} The physical row index.
397
- */
398
- }, {
399
- key: "toPhysicalRowPosition",
400
- value: function toPhysicalRowPosition(row) {
401
- var contained = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
402
- return this.getPhysicalIndexPosition(row, this.hot.toPhysicalRow(row), this.hot.countRows(), this.hot.countSourceRows(), contained);
403
- }
404
-
405
- /**
406
- * Returns the physical column index. The difference between this and Core's `toPhysical` is that it doesn't return
407
- * `null` on columns with indexes higher than the number of columns.
408
- *
409
- * @private
410
- * @param {number} column Visual column index.
411
- * @param {boolean} [contained] `true` if it should return only indexes within boundaries of the table (basically
412
- * `toPhysical` alias.
413
- * @returns {number} The physical column index.
414
- */
415
- }, {
416
- key: "toPhysicalColumnPosition",
417
- value: function toPhysicalColumnPosition(column) {
418
- var contained = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
419
- return this.getPhysicalIndexPosition(column, this.hot.toPhysicalColumn(column), this.hot.countCols(), this.hot.countSourceCols(), contained);
420
- }
421
-
422
460
  /**
423
461
  * Add a sheet to the shared HyperFormula instance.
424
462
  *
@@ -489,8 +527,8 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
489
527
  if (physicalRow !== null && physicalColumn !== null) {
490
528
  return this.engine.getCellType({
491
529
  sheet: sheet,
492
- row: physicalRow,
493
- col: physicalColumn
530
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),
531
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column)
494
532
  });
495
533
  } else {
496
534
  // Should return `EMPTY` when out of bounds (according to the test cases).
@@ -510,15 +548,10 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
510
548
  key: "isFormulaCellType",
511
549
  value: function isFormulaCellType(row, column) {
512
550
  var sheet = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.sheetId;
513
- var physicalRow = this.hot.toPhysicalRow(row);
514
- var physicalColumn = this.hot.toPhysicalColumn(column);
515
- if (physicalRow === null || physicalColumn === null) {
516
- return false;
517
- }
518
551
  return this.engine.doesCellHaveFormula({
519
552
  sheet: sheet,
520
- row: physicalRow,
521
- col: physicalColumn
553
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),
554
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column)
522
555
  });
523
556
  }
524
557
 
@@ -583,11 +616,9 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
583
616
  var _ref8 = (_change$address3 = change.address) !== null && _change$address3 !== void 0 ? _change$address3 : {},
584
617
  row = _ref8.row,
585
618
  col = _ref8.col;
586
- var visualRow = (0, _mixed.isDefined)(row) ? _this12.hot.toVisualRow(row) : null;
587
- var visualColumn = (0, _mixed.isDefined)(col) ? _this12.hot.toVisualColumn(col) : null;
588
619
 
589
620
  // Don't try to validate cells outside of the visual part of the table.
590
- 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()) {
591
622
  return;
592
623
  }
593
624
 
@@ -606,7 +637,7 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
606
637
  }
607
638
 
608
639
  // It will just re-render certain cell when necessary.
609
- boundHot.validateCell(boundHot.getDataAtCell(visualRow, visualColumn), boundHot.getCellMeta(visualRow, visualColumn), function () {});
640
+ boundHot.validateCell(boundHot.getDataAtCell(row, col), boundHot.getCellMeta(row, col), function () {});
610
641
  }
611
642
  });
612
643
  }
@@ -624,14 +655,24 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
624
655
  key: "syncChangeWithEngine",
625
656
  value: function syncChangeWithEngine(row, column, newValue) {
626
657
  var address = {
627
- row: this.toPhysicalRowPosition(row),
628
- col: this.toPhysicalColumnPosition(column),
658
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(row),
659
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(column),
629
660
  sheet: this.sheetId
630
661
  };
631
662
  if (!this.engine.isItPossibleToSetCellContents(address)) {
632
663
  (0, _console.warn)("Not possible to set cell data at ".concat(JSON.stringify(address)));
633
664
  return;
634
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
+ }
635
676
  return this.engine.setCellContents(address, newValue);
636
677
  }
637
678
 
@@ -651,11 +692,16 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
651
692
  var visualColumn = this.hot.propToCol(prop);
652
693
  if (this.isFormulaCellType(visualRow, visualColumn)) {
653
694
  var address = {
654
- row: this.hot.toPhysicalRow(visualRow),
655
- col: this.hot.toPhysicalColumn(visualColumn),
695
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
696
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
656
697
  sheet: this.sheetId
657
698
  };
658
- 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
+ }
659
705
 
660
706
  // If `cellValue` is an object it is expected to be an error
661
707
  return _typeof(cellValue) === 'object' && cellValue !== null ? cellValue.value : cellValue;
@@ -676,19 +722,41 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
676
722
  }, {
677
723
  key: "onBeforeAutofill",
678
724
  value: function onBeforeAutofill(fillData, sourceRange, targetRange) {
679
- var _this13 = this;
680
- var withSheetId = function withSheetId(range) {
681
- return _objectSpread(_objectSpread({}, range), {}, {
682
- sheet: _this13.sheetId
683
- });
684
- };
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;
685
737
  var engineSourceRange = {
686
- start: withSheetId(sourceRange.getTopStartCorner()),
687
- 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
+ }
688
748
  };
689
749
  var engineTargetRange = {
690
- start: withSheetId(targetRange.getTopStartCorner()),
691
- 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
+ }
692
760
  };
693
761
 
694
762
  // Blocks the autofill operation if HyperFormula says that at least one of
@@ -696,7 +764,33 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
696
764
  if (this.engine.isItPossibleToSetCellContents(engineTargetRange) === false) {
697
765
  return false;
698
766
  }
699
- 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;
700
794
  }
701
795
 
702
796
  /**
@@ -720,6 +814,40 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
720
814
  _classPrivateFieldSet(this, _hotWasInitializedWithEmptyData, (0, _mixed.isUndefined)(this.hot.getSettings().data));
721
815
  }
722
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
+
723
851
  /**
724
852
  * `afterLoadData` hook callback.
725
853
  *
@@ -740,7 +868,8 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
740
868
  var sourceDataArray = this.hot.getSourceDataArray();
741
869
  if (this.engine.isItPossibleToReplaceSheetContent(this.sheetId, sourceDataArray)) {
742
870
  _classPrivateFieldSet(this, _internalOperationPending, true);
743
- 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);
744
873
  this.renderDependentSheets(dependentCells);
745
874
  _classPrivateFieldSet(this, _internalOperationPending, false);
746
875
  }
@@ -753,24 +882,27 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
753
882
  * `modifyData` hook callback.
754
883
  *
755
884
  * @private
756
- * @param {number} row Physical row height.
757
- * @param {number} column Physical column index.
885
+ * @param {number} physicalRow Physical row index.
886
+ * @param {number} visualColumn Visual column index.
758
887
  * @param {object} valueHolder Object which contains original value which can be modified by overwriting `.value`
759
888
  * property.
760
889
  * @param {string} ioMode String which indicates for what operation hook is fired (`get` or `set`).
761
890
  */
762
891
  }, {
763
892
  key: "onModifyData",
764
- value: function onModifyData(row, column, valueHolder, ioMode) {
893
+ value: function onModifyData(physicalRow, visualColumn, valueHolder, ioMode) {
765
894
  if (ioMode !== 'get' || _classPrivateFieldGet(this, _internalOperationPending) || this.sheetName === null || !this.engine.doesSheetExist(this.sheetName)) {
766
895
  return;
767
896
  }
768
- var visualRow = this.hot.toVisualRow(row);
897
+ var visualRow = this.hot.toVisualRow(physicalRow);
898
+ if (visualRow === null || visualColumn === null) {
899
+ return;
900
+ }
769
901
 
770
902
  // `column` is here as visual index because of inconsistencies related to hook execution in `src/dataMap`.
771
- var isFormulaCellType = this.isFormulaCellType(visualRow, column);
903
+ var isFormulaCellType = this.isFormulaCellType(visualRow, visualColumn);
772
904
  if (!isFormulaCellType) {
773
- var cellType = this.getCellType(visualRow, column);
905
+ var cellType = this.getCellType(visualRow, visualColumn);
774
906
  if (cellType !== 'ARRAY') {
775
907
  if ((0, _utils.isEscapedFormulaExpression)(valueHolder.value)) {
776
908
  valueHolder.value = (0, _utils.unescapeFormulaExpression)(valueHolder.value);
@@ -778,14 +910,16 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
778
910
  return;
779
911
  }
780
912
  }
781
-
782
- // `toPhysicalColumn` is here because of inconsistencies related to hook execution in `DataMap`.
783
913
  var address = {
784
- row: row,
785
- col: this.toPhysicalColumnPosition(column),
914
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
915
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
786
916
  sheet: this.sheetId
787
917
  };
788
- 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
+ }
789
923
 
790
924
  // If `cellValue` is an object it is expected to be an error
791
925
  var value = _typeof(cellValue) === 'object' && cellValue !== null ? cellValue.value : cellValue;
@@ -810,6 +944,9 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
810
944
  }
811
945
  var visualRow = this.hot.toVisualRow(row);
812
946
  var visualColumn = this.hot.propToCol(columnOrProp);
947
+ if (visualRow === null || visualColumn === null) {
948
+ return;
949
+ }
813
950
 
814
951
  // `column` is here as visual index because of inconsistencies related to hook execution in `src/dataMap`.
815
952
  var isFormulaCellType = this.isFormulaCellType(visualRow, visualColumn);
@@ -829,9 +966,8 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
829
966
  return;
830
967
  }
831
968
  var address = {
832
- row: row,
833
- // Workaround for inconsistencies in `src/dataSource.js`
834
- col: this.toPhysicalColumnPosition(visualColumn),
969
+ row: this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
970
+ col: this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
835
971
  sheet: this.sheetId
836
972
  };
837
973
  valueHolder.value = this.engine.getCellSerialized(address);
@@ -857,21 +993,21 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
857
993
  var dependentCells = this.engine.batch(function () {
858
994
  changes.forEach(function (_ref9) {
859
995
  var _ref10 = _slicedToArray(_ref9, 4),
860
- row = _ref10[0],
996
+ visualRow = _ref10[0],
861
997
  prop = _ref10[1],
862
998
  newValue = _ref10[3];
863
- var column = _this14.hot.propToCol(prop);
864
- var physicalRow = _this14.hot.toPhysicalRow(row);
865
- 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);
866
1002
  var address = {
867
- row: physicalRow,
868
- col: physicalColumn,
1003
+ row: _this14.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
1004
+ col: _this14.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
869
1005
  sheet: _this14.sheetId
870
1006
  };
871
1007
  if (physicalRow !== null && physicalColumn !== null) {
872
- _this14.syncChangeWithEngine(row, column, newValue);
1008
+ _this14.syncChangeWithEngine(visualRow, visualColumn, newValue);
873
1009
  } else {
874
- outOfBoundsChanges.push([row, column, newValue]);
1010
+ outOfBoundsChanges.push([visualRow, visualColumn, newValue]);
875
1011
  }
876
1012
  changedCells.push({
877
1013
  address: address
@@ -917,16 +1053,16 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
917
1053
  var changedCells = [];
918
1054
  changes.forEach(function (_ref13) {
919
1055
  var _ref14 = _slicedToArray(_ref13, 4),
920
- row = _ref14[0],
1056
+ visualRow = _ref14[0],
921
1057
  prop = _ref14[1],
922
1058
  newValue = _ref14[3];
923
- var column = _this15.hot.propToCol(prop);
924
- if (!(0, _number.isNumeric)(column)) {
1059
+ var visualColumn = _this15.hot.propToCol(prop);
1060
+ if (!(0, _number.isNumeric)(visualColumn)) {
925
1061
  return;
926
1062
  }
927
1063
  var address = {
928
- row: row,
929
- col: _this15.toPhysicalColumnPosition(column),
1064
+ row: _this15.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow),
1065
+ col: _this15.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn),
930
1066
  sheet: _this15.sheetId
931
1067
  };
932
1068
  if (!_this15.engine.isItPossibleToSetCellContents(address)) {
@@ -946,14 +1082,19 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
946
1082
  * `beforeCreateRow` hook callback.
947
1083
  *
948
1084
  * @private
949
- * @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.
950
1086
  * @param {number} amount Number of newly created rows in the data source array.
951
1087
  * @returns {*|boolean} If false is returned the action is canceled.
952
1088
  */
953
1089
  }, {
954
1090
  key: "onBeforeCreateRow",
955
- value: function onBeforeCreateRow(row, amount) {
956
- 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])) {
957
1098
  return false;
958
1099
  }
959
1100
  }
@@ -962,14 +1103,19 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
962
1103
  * `beforeCreateCol` hook callback.
963
1104
  *
964
1105
  * @private
965
- * @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.
966
1107
  * @param {number} amount Number of newly created columns in the data source.
967
1108
  * @returns {*|boolean} If false is returned the action is canceled.
968
1109
  */
969
1110
  }, {
970
1111
  key: "onBeforeCreateCol",
971
- value: function onBeforeCreateCol(col, amount) {
972
- 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])) {
973
1119
  return false;
974
1120
  }
975
1121
  }
@@ -987,8 +1133,9 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
987
1133
  key: "onBeforeRemoveRow",
988
1134
  value: function onBeforeRemoveRow(row, amount, physicalRows) {
989
1135
  var _this16 = this;
990
- var possible = physicalRows.every(function (physicalRow) {
991
- 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]);
992
1139
  });
993
1140
  return possible === false ? false : void 0;
994
1141
  }
@@ -1006,8 +1153,9 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
1006
1153
  key: "onBeforeRemoveCol",
1007
1154
  value: function onBeforeRemoveCol(col, amount, physicalColumns) {
1008
1155
  var _this17 = this;
1009
- var possible = physicalColumns.every(function (physicalColumn) {
1010
- 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]);
1011
1159
  });
1012
1160
  return possible === false ? false : void 0;
1013
1161
  }
@@ -1016,18 +1164,18 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
1016
1164
  * `afterCreateRow` hook callback.
1017
1165
  *
1018
1166
  * @private
1019
- * @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.
1020
1168
  * @param {number} amount Number of newly created rows in the data source array.
1021
1169
  * @param {string} [source] String that identifies source of hook call
1022
1170
  * ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).
1023
1171
  */
1024
1172
  }, {
1025
1173
  key: "onAfterCreateRow",
1026
- value: function onAfterCreateRow(row, amount, source) {
1174
+ value: function onAfterCreateRow(visualRow, amount, source) {
1027
1175
  if (isBlockedSource(source)) {
1028
1176
  return;
1029
1177
  }
1030
- var changes = this.engine.addRows(this.sheetId, [this.toPhysicalRowPosition(row), amount]);
1178
+ var changes = this.engine.addRows(this.sheetId, [this.rowAxisSyncer.getHfIndexFromVisualIndex(visualRow), amount]);
1031
1179
  this.renderDependentSheets(changes);
1032
1180
  }
1033
1181
 
@@ -1035,18 +1183,18 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
1035
1183
  * `afterCreateCol` hook callback.
1036
1184
  *
1037
1185
  * @private
1038
- * @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.
1039
1187
  * @param {number} amount Number of newly created columns in the data source.
1040
1188
  * @param {string} [source] String that identifies source of hook call
1041
1189
  * ([list of all available sources]{@link https://handsontable.com/docs/javascript-data-grid/events-and-hooks/#handsontable-hooks}).
1042
1190
  */
1043
1191
  }, {
1044
1192
  key: "onAfterCreateCol",
1045
- value: function onAfterCreateCol(col, amount, source) {
1193
+ value: function onAfterCreateCol(visualColumn, amount, source) {
1046
1194
  if (isBlockedSource(source)) {
1047
1195
  return;
1048
1196
  }
1049
- var changes = this.engine.addColumns(this.sheetId, [this.toPhysicalColumnPosition(col), amount]);
1197
+ var changes = this.engine.addColumns(this.sheetId, [this.columnAxisSyncer.getHfIndexFromVisualIndex(visualColumn), amount]);
1050
1198
  this.renderDependentSheets(changes);
1051
1199
  }
1052
1200
 
@@ -1067,10 +1215,10 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
1067
1215
  if (isBlockedSource(source)) {
1068
1216
  return;
1069
1217
  }
1070
- var descendingPhysicalRows = physicalRows.sort().reverse();
1218
+ var descendingHfRows = this.rowAxisSyncer.getRemovedHfIndexes().sort().reverse();
1071
1219
  var changes = this.engine.batch(function () {
1072
- descendingPhysicalRows.forEach(function (physicalRow) {
1073
- _this18.engine.removeRows(_this18.sheetId, [physicalRow, 1]);
1220
+ descendingHfRows.forEach(function (hfRow) {
1221
+ _this18.engine.removeRows(_this18.sheetId, [hfRow, 1]);
1074
1222
  });
1075
1223
  });
1076
1224
  this.renderDependentSheets(changes);
@@ -1093,10 +1241,10 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
1093
1241
  if (isBlockedSource(source)) {
1094
1242
  return;
1095
1243
  }
1096
- var descendingPhysicalColumns = physicalColumns.sort().reverse();
1244
+ var descendingHfColumns = this.columnAxisSyncer.getRemovedHfIndexes().sort().reverse();
1097
1245
  var changes = this.engine.batch(function () {
1098
- descendingPhysicalColumns.forEach(function (physicalColumn) {
1099
- _this19.engine.removeColumns(_this19.sheetId, [physicalColumn, 1]);
1246
+ descendingHfColumns.forEach(function (hfColumn) {
1247
+ _this19.engine.removeColumns(_this19.sheetId, [hfColumn, 1]);
1100
1248
  });
1101
1249
  });
1102
1250
  this.renderDependentSheets(changes);
@@ -1221,13 +1369,11 @@ var Formulas = /*#__PURE__*/function (_BasePlugin) {
1221
1369
  get: function get() {
1222
1370
  return PLUGIN_PRIORITY;
1223
1371
  }
1224
-
1225
- /**
1226
- * Flag used to bypass hooks in internal operations.
1227
- *
1228
- * @private
1229
- * @type {boolean}
1230
- */
1372
+ }, {
1373
+ key: "SETTING_KEYS",
1374
+ get: function get() {
1375
+ return [PLUGIN_KEY].concat(SETTING_KEYS);
1376
+ }
1231
1377
  }]);
1232
1378
  return Formulas;
1233
1379
  }(_base.BasePlugin);