handsontable 15.2.0 → 15.3.0-next-6f5f494-20250424

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 (224) hide show
  1. package/3rdparty/walkontable/src/cell/range.js +14 -0
  2. package/3rdparty/walkontable/src/cell/range.mjs +14 -0
  3. package/3rdparty/walkontable/src/core/_base.js +2 -2
  4. package/3rdparty/walkontable/src/core/_base.mjs +3 -3
  5. package/3rdparty/walkontable/src/overlay/_base.js +0 -2
  6. package/3rdparty/walkontable/src/overlay/_base.mjs +0 -2
  7. package/3rdparty/walkontable/src/overlay/bottom.js +9 -6
  8. package/3rdparty/walkontable/src/overlay/bottom.mjs +9 -6
  9. package/3rdparty/walkontable/src/overlay/inlineStart.js +8 -5
  10. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +8 -5
  11. package/3rdparty/walkontable/src/overlay/top.js +11 -6
  12. package/3rdparty/walkontable/src/overlay/top.mjs +11 -6
  13. package/3rdparty/walkontable/src/overlays.js +15 -11
  14. package/3rdparty/walkontable/src/overlays.mjs +15 -11
  15. package/3rdparty/walkontable/src/renderer/rowHeaders.js +4 -1
  16. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +4 -1
  17. package/3rdparty/walkontable/src/selection/border/border.js +5 -0
  18. package/3rdparty/walkontable/src/selection/border/border.mjs +5 -0
  19. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +3 -4
  20. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +3 -4
  21. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +8 -10
  22. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +8 -10
  23. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +3 -4
  24. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +3 -4
  25. package/3rdparty/walkontable/src/table.js +5 -2
  26. package/3rdparty/walkontable/src/table.mjs +5 -2
  27. package/3rdparty/walkontable/src/utils/orderView/viewDiffer/viewOrder.js +0 -2
  28. package/3rdparty/walkontable/src/utils/orderView/viewDiffer/viewOrder.mjs +0 -2
  29. package/CHANGELOG.md +45 -1
  30. package/README.md +1 -1
  31. package/base.js +2 -2
  32. package/base.mjs +2 -2
  33. package/core/focusCatcher/focusDetector.js +1 -1
  34. package/core/focusCatcher/focusDetector.mjs +2 -2
  35. package/core/hooks/constants.js +8 -0
  36. package/core/hooks/constants.mjs +8 -0
  37. package/core/hooks/index.d.ts +1 -0
  38. package/core/viewportScroll/scrollStrategies/columnHeaderScroll.js +7 -5
  39. package/core/viewportScroll/scrollStrategies/columnHeaderScroll.mjs +7 -5
  40. package/core/viewportScroll/scrollStrategies/focusScroll.js +8 -1
  41. package/core/viewportScroll/scrollStrategies/focusScroll.mjs +8 -1
  42. package/core/viewportScroll/scrollStrategies/multipleScroll.js +13 -1
  43. package/core/viewportScroll/scrollStrategies/multipleScroll.mjs +13 -1
  44. package/core/viewportScroll/scrollStrategies/noncontiguousScroll.js +13 -1
  45. package/core/viewportScroll/scrollStrategies/noncontiguousScroll.mjs +13 -1
  46. package/core/viewportScroll/scrollStrategies/rowHeaderScroll.js +7 -5
  47. package/core/viewportScroll/scrollStrategies/rowHeaderScroll.mjs +7 -5
  48. package/core/viewportScroll/scrollStrategies/singleScroll.js +8 -4
  49. package/core/viewportScroll/scrollStrategies/singleScroll.mjs +8 -4
  50. package/core/viewportScroll/utils.js +111 -0
  51. package/core/viewportScroll/utils.mjs +106 -0
  52. package/core.d.ts +2 -3
  53. package/core.js +125 -71
  54. package/core.mjs +126 -72
  55. package/dataMap/dataMap.js +0 -7
  56. package/dataMap/dataMap.mjs +0 -7
  57. package/dataMap/metaManager/index.js +8 -9
  58. package/dataMap/metaManager/index.mjs +8 -9
  59. package/dataMap/metaManager/mods/dynamicCellMeta.js +4 -1
  60. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +4 -1
  61. package/dist/handsontable.css +4 -15
  62. package/dist/handsontable.full.css +4 -17
  63. package/dist/handsontable.full.js +4573 -4013
  64. package/dist/handsontable.full.min.css +3 -3
  65. package/dist/handsontable.full.min.js +148 -148
  66. package/dist/handsontable.js +4287 -3730
  67. package/dist/handsontable.min.css +3 -3
  68. package/dist/handsontable.min.js +19 -19
  69. package/editorManager.js +1 -7
  70. package/editorManager.mjs +1 -7
  71. package/editors/autocompleteEditor/autocompleteEditor.js +31 -7
  72. package/editors/autocompleteEditor/autocompleteEditor.mjs +31 -7
  73. package/focusManager.js +4 -2
  74. package/focusManager.mjs +4 -2
  75. package/helpers/browser.js +1 -1
  76. package/helpers/browser.mjs +1 -1
  77. package/helpers/dom/element.d.ts +1 -0
  78. package/helpers/dom/element.js +20 -0
  79. package/helpers/dom/element.mjs +19 -0
  80. package/helpers/mixed.js +2 -2
  81. package/helpers/mixed.mjs +2 -2
  82. package/helpers/object.js +3 -0
  83. package/helpers/object.mjs +3 -0
  84. package/package.json +1 -1
  85. package/plugins/autoColumnSize/autoColumnSize.js +38 -17
  86. package/plugins/autoColumnSize/autoColumnSize.mjs +38 -17
  87. package/plugins/autoRowSize/autoRowSize.js +12 -6
  88. package/plugins/autoRowSize/autoRowSize.mjs +12 -6
  89. package/plugins/columnSorting/columnSorting.js +0 -4
  90. package/plugins/columnSorting/columnSorting.mjs +0 -4
  91. package/plugins/comments/comments.js +1 -0
  92. package/plugins/comments/comments.mjs +1 -0
  93. package/plugins/contextMenu/menu/defaultShortcutsList.js +2 -2
  94. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +2 -2
  95. package/plugins/contextMenu/menu/menu.js +1 -0
  96. package/plugins/contextMenu/menu/menu.mjs +1 -0
  97. package/plugins/contextMenu/menu/positioner.js +10 -2
  98. package/plugins/contextMenu/menu/positioner.mjs +10 -2
  99. package/plugins/contextMenu/predefinedItems/redo.js +3 -3
  100. package/plugins/contextMenu/predefinedItems/redo.mjs +3 -3
  101. package/plugins/contextMenu/predefinedItems/undo.js +3 -3
  102. package/plugins/contextMenu/predefinedItems/undo.mjs +3 -3
  103. package/plugins/copyPaste/copyPaste.js +12 -9
  104. package/plugins/copyPaste/copyPaste.mjs +12 -9
  105. package/plugins/copyPaste/pasteEvent.js +3 -0
  106. package/plugins/copyPaste/pasteEvent.mjs +3 -0
  107. package/plugins/exportFile/exportFile.d.ts +1 -0
  108. package/plugins/exportFile/exportFile.js +2 -1
  109. package/plugins/exportFile/exportFile.mjs +2 -1
  110. package/plugins/exportFile/types/csv.js +76 -11
  111. package/plugins/exportFile/types/csv.mjs +76 -11
  112. package/plugins/filters/filters.js +24 -23
  113. package/plugins/filters/filters.mjs +24 -23
  114. package/plugins/filters/ui/multipleSelect.js +7 -1
  115. package/plugins/filters/ui/multipleSelect.mjs +7 -1
  116. package/plugins/formulas/formulas.d.ts +1 -1
  117. package/plugins/formulas/formulas.js +57 -60
  118. package/plugins/formulas/formulas.mjs +59 -62
  119. package/plugins/formulas/indexSyncer/axisSyncer.js +5 -1
  120. package/plugins/formulas/indexSyncer/axisSyncer.mjs +5 -1
  121. package/plugins/hiddenColumns/hiddenColumns.js +1 -1
  122. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  123. package/plugins/hiddenRows/hiddenRows.js +1 -1
  124. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  125. package/plugins/manualColumnResize/manualColumnResize.js +4 -6
  126. package/plugins/manualColumnResize/manualColumnResize.mjs +4 -6
  127. package/plugins/manualRowResize/manualRowResize.js +4 -6
  128. package/plugins/manualRowResize/manualRowResize.mjs +4 -6
  129. package/plugins/mergeCells/mergeCells.js +10 -30
  130. package/plugins/mergeCells/mergeCells.mjs +10 -30
  131. package/plugins/mergeCells/renderer.js +15 -0
  132. package/plugins/mergeCells/renderer.mjs +15 -0
  133. package/plugins/mergeCells/utils.js +31 -0
  134. package/plugins/mergeCells/utils.mjs +27 -0
  135. package/plugins/nestedRows/data/dataManager.js +2 -2
  136. package/plugins/nestedRows/data/dataManager.mjs +2 -2
  137. package/plugins/undoRedo/actions/index.js +0 -2
  138. package/plugins/undoRedo/actions/index.mjs +0 -2
  139. package/plugins/undoRedo/actions/removeColumn.js +19 -14
  140. package/plugins/undoRedo/actions/removeColumn.mjs +19 -14
  141. package/plugins/undoRedo/actions/removeRow.js +12 -4
  142. package/plugins/undoRedo/actions/removeRow.mjs +12 -4
  143. package/selection/selection.js +3 -1
  144. package/selection/selection.mjs +3 -1
  145. package/shortcutContexts/commands/extendCellsSelection/down.js +7 -2
  146. package/shortcutContexts/commands/extendCellsSelection/down.mjs +7 -2
  147. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +8 -2
  148. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +8 -2
  149. package/shortcutContexts/commands/extendCellsSelection/left.js +7 -2
  150. package/shortcutContexts/commands/extendCellsSelection/left.mjs +7 -2
  151. package/shortcutContexts/commands/extendCellsSelection/right.js +7 -2
  152. package/shortcutContexts/commands/extendCellsSelection/right.mjs +7 -2
  153. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +7 -2
  154. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +7 -2
  155. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +3 -1
  156. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +3 -1
  157. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +3 -1
  158. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +3 -1
  159. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +3 -1
  160. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +3 -1
  161. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +3 -1
  162. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +3 -1
  163. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +3 -1
  164. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +3 -1
  165. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +3 -1
  166. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +3 -1
  167. package/shortcutContexts/commands/extendCellsSelection/toRows.js +7 -2
  168. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +7 -2
  169. package/shortcutContexts/commands/extendCellsSelection/up.js +7 -2
  170. package/shortcutContexts/commands/extendCellsSelection/up.mjs +7 -2
  171. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +8 -2
  172. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +8 -2
  173. package/shortcutContexts/commands/index.js +0 -2
  174. package/shortcutContexts/commands/index.mjs +0 -2
  175. package/shortcutContexts/commands/moveCellSelection/down.js +2 -0
  176. package/shortcutContexts/commands/moveCellSelection/down.mjs +2 -0
  177. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +6 -1
  178. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +6 -1
  179. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +8 -3
  180. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -3
  181. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +8 -3
  182. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -3
  183. package/shortcutContexts/commands/moveCellSelection/left.js +6 -1
  184. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -1
  185. package/shortcutContexts/commands/moveCellSelection/right.js +6 -1
  186. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -1
  187. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +4 -1
  188. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +4 -1
  189. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +2 -0
  190. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +2 -0
  191. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +2 -0
  192. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +2 -0
  193. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +2 -0
  194. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +2 -0
  195. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +2 -0
  196. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +2 -0
  197. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +2 -0
  198. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +2 -0
  199. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +6 -1
  200. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +6 -1
  201. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +2 -0
  202. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +2 -0
  203. package/shortcutContexts/commands/moveCellSelection/up.js +2 -0
  204. package/shortcutContexts/commands/moveCellSelection/up.mjs +2 -0
  205. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +6 -1
  206. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +6 -1
  207. package/shortcutContexts/commands/selectAllCells.js +7 -2
  208. package/shortcutContexts/commands/selectAllCells.mjs +7 -2
  209. package/shortcutContexts/commands/selectAllCellsAndHeaders.js +7 -2
  210. package/shortcutContexts/commands/selectAllCellsAndHeaders.mjs +7 -2
  211. package/shortcutContexts/index.js +2 -2
  212. package/shortcutContexts/index.mjs +0 -2
  213. package/styles/handsontable.css +15 -17
  214. package/styles/handsontable.min.css +3 -3
  215. package/styles/ht-theme-horizon.css +2 -2
  216. package/styles/ht-theme-horizon.min.css +2 -2
  217. package/styles/ht-theme-main.css +2 -2
  218. package/styles/ht-theme-main.min.css +2 -2
  219. package/tableView.js +5 -8
  220. package/tableView.mjs +5 -8
  221. package/translations/indexMapper.js +0 -1
  222. package/translations/indexMapper.mjs +0 -1
  223. package/utils/ghostTable.js +3 -0
  224. package/utils/ghostTable.mjs +3 -0
package/core.mjs CHANGED
@@ -1,5 +1,6 @@
1
1
  import "core-js/modules/es.error.cause.js";
2
2
  import "core-js/modules/es.array.push.js";
3
+ import "core-js/modules/es.object.from-entries.js";
3
4
  import "core-js/modules/es.set.difference.v2.js";
4
5
  import "core-js/modules/es.set.intersection.v2.js";
5
6
  import "core-js/modules/es.set.is-disjoint-from.v2.js";
@@ -14,7 +15,7 @@ import "core-js/modules/esnext.iterator.map.js";
14
15
  import "core-js/modules/web.immediate.js";
15
16
  import { addClass, empty, observeVisibilityChangeOnce, removeClass } from "./helpers/dom/element.mjs";
16
17
  import { isFunction } from "./helpers/function.mjs";
17
- import { isDefined, isUndefined, isRegExp, _injectProductInfo, isEmpty } from "./helpers/mixed.mjs";
18
+ import { isDefined, isUndefined, isRegExp, _injectProductInfo, isEmpty, stringify } from "./helpers/mixed.mjs";
18
19
  import { isMobileBrowser, isIpadOS } from "./helpers/browser.mjs";
19
20
  import EditorManager from "./editorManager.mjs";
20
21
  import EventManager from "./eventManager.mjs";
@@ -221,12 +222,15 @@ export default function Core(rootElement, userSettings) {
221
222
  return instance.isLtr() ? 1 : -1;
222
223
  };
223
224
  userSettings.language = getValidLanguageCode(userSettings.language);
224
- const metaManager = new MetaManager(instance, userSettings, [DynamicCellMetaMod, ExtendMetaPropertiesMod]);
225
+ const settingsWithoutHooks = Object.fromEntries(Object.entries(userSettings).filter(_ref => {
226
+ let [key] = _ref;
227
+ return !(Hooks.getSingleton().isRegistered(key) || Hooks.getSingleton().isDeprecated(key));
228
+ }));
229
+ const metaManager = new MetaManager(instance, settingsWithoutHooks, [DynamicCellMetaMod, ExtendMetaPropertiesMod]);
225
230
  const tableMeta = metaManager.getTableMeta();
226
231
  const globalMeta = metaManager.getGlobalMeta();
227
232
  const pluginsRegistry = createUniqueMap();
228
233
  this.container = this.rootDocument.createElement('div');
229
- this.renderCall = false;
230
234
  rootElement.insertBefore(this.container, rootElement.firstChild);
231
235
  if (isRootInstance(this)) {
232
236
  _injectProductInfo(userSettings.licenseKey, rootElement);
@@ -258,6 +262,9 @@ export default function Core(rootElement, userSettings) {
258
262
  this.rowIndexMapper.addLocalHook('indexesSequenceChange', source => {
259
263
  instance.runHooks('afterRowSequenceChange', source);
260
264
  });
265
+ eventManager.addEventListener(this.rootDocument.documentElement, 'compositionstart', event => {
266
+ instance.runHooks('beforeCompositionStart', event);
267
+ });
261
268
  dataSource = new DataSource(instance);
262
269
  if (!this.rootElement.id || this.rootElement.id.substring(0, 3) === 'ht_') {
263
270
  this.rootElement.id = this.guid; // if root element does not have an id, assign a random id
@@ -333,10 +340,11 @@ export default function Core(rootElement, userSettings) {
333
340
  }
334
341
  });
335
342
  this.selection = selection;
336
- const onIndexMapperCacheUpdate = _ref => {
343
+ const onIndexMapperCacheUpdate = _ref2 => {
337
344
  let {
338
345
  hiddenIndexesChanged
339
- } = _ref;
346
+ } = _ref2;
347
+ this.forceFullRender = true;
340
348
  if (hiddenIndexesChanged) {
341
349
  this.selection.commit();
342
350
  }
@@ -515,9 +523,9 @@ export default function Core(rootElement, userSettings) {
515
523
  const sortedIndexes = [...indexes];
516
524
 
517
525
  // Sort the indexes in ascending order.
518
- sortedIndexes.sort((_ref2, _ref3) => {
519
- let [indexA] = _ref2;
520
- let [indexB] = _ref3;
526
+ sortedIndexes.sort((_ref3, _ref4) => {
527
+ let [indexA] = _ref3;
528
+ let [indexB] = _ref4;
521
529
  if (indexA === indexB) {
522
530
  return 0;
523
531
  }
@@ -525,8 +533,8 @@ export default function Core(rootElement, userSettings) {
525
533
  });
526
534
 
527
535
  // Normalize the {index, amount} groups into bigger groups.
528
- const normalizedIndexes = arrayReduce(sortedIndexes, (acc, _ref4) => {
529
- let [groupIndex, groupAmount] = _ref4;
536
+ const normalizedIndexes = arrayReduce(sortedIndexes, (acc, _ref5) => {
537
+ let [groupIndex, groupAmount] = _ref5;
530
538
  const previousItem = acc[acc.length - 1];
531
539
  const [prevIndex, prevAmount] = previousItem;
532
540
  const prevLastIndex = prevIndex + prevAmount;
@@ -594,8 +602,8 @@ export default function Core(rootElement, userSettings) {
594
602
  let offset = 0;
595
603
 
596
604
  // Normalize the {index, amount} groups into bigger groups.
597
- arrayEach(indexes, _ref5 => {
598
- let [groupIndex, groupAmount] = _ref5;
605
+ arrayEach(indexes, _ref6 => {
606
+ let [groupIndex, groupAmount] = _ref6;
599
607
  const calcIndex = isEmpty(groupIndex) ? instance.countRows() - 1 : Math.max(groupIndex - offset, 0);
600
608
 
601
609
  // If the 'index' is an integer decrease it by 'offset' otherwise pass it through to make the value
@@ -620,13 +628,6 @@ export default function Core(rootElement, userSettings) {
620
628
  }
621
629
  }
622
630
  const totalRows = instance.countRows();
623
- if (totalRows === 0) {
624
- selection.deselect();
625
- } else if (source === 'ContextMenu.removeRow') {
626
- selection.refresh();
627
- } else {
628
- selection.shiftRows(groupIndex, -groupAmount);
629
- }
630
631
  const fixedRowsTop = tableMeta.fixedRowsTop;
631
632
  if (fixedRowsTop >= calcIndex + 1) {
632
633
  tableMeta.fixedRowsTop -= Math.min(groupAmount, fixedRowsTop - calcIndex);
@@ -635,6 +636,13 @@ export default function Core(rootElement, userSettings) {
635
636
  if (fixedRowsBottom && calcIndex >= totalRows - fixedRowsBottom) {
636
637
  tableMeta.fixedRowsBottom -= Math.min(groupAmount, fixedRowsBottom);
637
638
  }
639
+ if (totalRows === 0) {
640
+ selection.deselect();
641
+ } else if (source === 'ContextMenu.removeRow') {
642
+ selection.refresh();
643
+ } else {
644
+ selection.shiftRows(groupIndex, -groupAmount);
645
+ }
638
646
  offset += groupAmount;
639
647
  });
640
648
  };
@@ -649,8 +657,8 @@ export default function Core(rootElement, userSettings) {
649
657
  let offset = 0;
650
658
 
651
659
  // Normalize the {index, amount} groups into bigger groups.
652
- arrayEach(indexes, _ref6 => {
653
- let [groupIndex, groupAmount] = _ref6;
660
+ arrayEach(indexes, _ref7 => {
661
+ let [groupIndex, groupAmount] = _ref7;
654
662
  const calcIndex = isEmpty(groupIndex) ? instance.countCols() - 1 : Math.max(groupIndex - offset, 0);
655
663
  let physicalColumnIndex = instance.toPhysicalColumn(calcIndex);
656
664
 
@@ -1028,7 +1036,7 @@ export default function Core(rootElement, userSettings) {
1028
1036
  if (isMobileBrowser() || isIpadOS()) {
1029
1037
  addClass(instance.rootElement, 'mobile');
1030
1038
  }
1031
- this.updateSettings(tableMeta, true);
1039
+ this.updateSettings(userSettings, true);
1032
1040
  this.view = new TableView(this);
1033
1041
  const themeName = tableMeta.themeName || getThemeClassName(instance.rootElement);
1034
1042
 
@@ -1044,8 +1052,7 @@ export default function Core(rootElement, userSettings) {
1044
1052
  installFocusCatcher(instance);
1045
1053
  }
1046
1054
  instance.runHooks('init');
1047
- this.forceFullRender = true; // used when data was changed
1048
- this.view.render();
1055
+ this.render();
1049
1056
 
1050
1057
  // Run the logic only if it's the table's initialization and the root element is not visible.
1051
1058
  if (!!firstRun && instance.rootElement.offsetParent === null) {
@@ -1218,13 +1225,11 @@ export default function Core(rootElement, userSettings) {
1218
1225
  datamap.set(changes[i][0], changes[i][1], changes[i][3]);
1219
1226
  }
1220
1227
  const hasChanges = changes.length > 0;
1221
- instance.forceFullRender = true; // used when data was changed or when all cells need to be re-rendered
1222
-
1223
1228
  if (hasChanges) {
1224
1229
  grid.adjustRowsAndCols();
1225
1230
  instance.runHooks('beforeChangeRender', changes, source);
1226
1231
  editorManager.closeEditor();
1227
- instance.view.render();
1232
+ instance.render();
1228
1233
  editorManager.prepareEditor();
1229
1234
  instance.view.adjustElementsSize();
1230
1235
  instance.runHooks('afterChange', changes, source || 'edit');
@@ -1233,7 +1238,7 @@ export default function Core(rootElement, userSettings) {
1233
1238
  activeEditor.refreshValue();
1234
1239
  }
1235
1240
  } else {
1236
- instance.view.render();
1241
+ instance.render();
1237
1242
  }
1238
1243
  }
1239
1244
 
@@ -1383,9 +1388,22 @@ export default function Core(rootElement, userSettings) {
1383
1388
  ...tableMeta
1384
1389
  };
1385
1390
  }
1386
- if (cellProperties.type === 'numeric' && typeof newValue === 'string' && isNumericLike(newValue)) {
1391
+ const {
1392
+ type,
1393
+ checkedTemplate,
1394
+ uncheckedTemplate
1395
+ } = cellProperties;
1396
+ if (type === 'numeric' && typeof newValue === 'string' && isNumericLike(newValue)) {
1387
1397
  filteredChanges[i][3] = getParsedNumber(newValue);
1388
1398
  }
1399
+ if (type === 'checkbox') {
1400
+ const stringifiedValue = stringify(newValue);
1401
+ const isChecked = stringifiedValue === stringify(checkedTemplate);
1402
+ const isUnchecked = stringifiedValue === stringify(uncheckedTemplate);
1403
+ if (isChecked || isUnchecked) {
1404
+ filteredChanges[i][3] = isChecked ? checkedTemplate : uncheckedTemplate;
1405
+ }
1406
+ }
1389
1407
  }
1390
1408
  return filteredChanges;
1391
1409
  }
@@ -1609,11 +1627,11 @@ export default function Core(rootElement, userSettings) {
1609
1627
  this.getSelected = function () {
1610
1628
  // https://github.com/handsontable/handsontable/issues/44 //cjl
1611
1629
  if (selection.isSelected()) {
1612
- return arrayMap(selection.getSelectedRange(), _ref7 => {
1630
+ return arrayMap(selection.getSelectedRange(), _ref8 => {
1613
1631
  let {
1614
1632
  from,
1615
1633
  to
1616
- } = _ref7;
1634
+ } = _ref8;
1617
1635
  return [from.row, from.col, to.row, to.col];
1618
1636
  });
1619
1637
  }
@@ -1787,11 +1805,7 @@ export default function Core(rootElement, userSettings) {
1787
1805
  const nextValue = this.renderSuspendedCounter - 1;
1788
1806
  this.renderSuspendedCounter = Math.max(nextValue, 0);
1789
1807
  if (!this.isRenderSuspended() && nextValue === this.renderSuspendedCounter) {
1790
- if (this.renderCall) {
1791
- this.render();
1792
- } else {
1793
- instance.view.render();
1794
- }
1808
+ instance.view.render();
1795
1809
  }
1796
1810
  };
1797
1811
 
@@ -1807,9 +1821,8 @@ export default function Core(rootElement, userSettings) {
1807
1821
  */
1808
1822
  this.render = function () {
1809
1823
  if (this.view) {
1810
- this.renderCall = true;
1811
- this.forceFullRender = true; // used when data was changed or when all cells need to be re-rendered
1812
-
1824
+ // used when data was changed or when all cells need to be re-rendered (slow render)
1825
+ this.forceFullRender = true;
1813
1826
  if (!this.isRenderSuspended()) {
1814
1827
  instance.view.render();
1815
1828
  }
@@ -2302,23 +2315,27 @@ export default function Core(rootElement, userSettings) {
2302
2315
  if (isDefined(settings.ganttChart)) {
2303
2316
  throw new Error('Since 8.0.0 the "ganttChart" setting is no longer supported.');
2304
2317
  }
2318
+ if (settings.language) {
2319
+ setLanguage(settings.language);
2320
+ }
2305
2321
 
2306
2322
  // eslint-disable-next-line no-restricted-syntax
2307
2323
  for (i in settings) {
2308
- if (i === 'data') {
2309
- // Do nothing. loadData will be triggered later
2310
- } else if (i === 'language') {
2311
- setLanguage(settings.language);
2324
+ if (i === 'data' || i === 'language') {
2325
+ // Do nothing. loadData and language change will be triggered later
2312
2326
  } else if (i === 'className') {
2313
2327
  setClassName('className', settings.className);
2314
2328
  } else if (i === 'tableClassName' && instance.table) {
2315
2329
  setClassName('tableClassName', settings.tableClassName);
2316
2330
  instance.view._wt.wtOverlays.syncOverlayTableClassNames();
2317
2331
  } else if (Hooks.getSingleton().isRegistered(i) || Hooks.getSingleton().isDeprecated(i)) {
2318
- if (isFunction(settings[i])) {
2319
- Hooks.getSingleton().addAsFixed(i, settings[i], instance);
2320
- } else if (Array.isArray(settings[i])) {
2321
- Hooks.getSingleton().add(i, settings[i], instance);
2332
+ const hook = settings[i];
2333
+ if (isFunction(hook)) {
2334
+ Hooks.getSingleton().addAsFixed(i, hook, instance);
2335
+ tableMeta[i] = hook;
2336
+ } else if (Array.isArray(hook)) {
2337
+ Hooks.getSingleton().add(i, hook, instance);
2338
+ tableMeta[i] = hook;
2322
2339
  }
2323
2340
  } else if (!init && hasOwnProperty(settings, i)) {
2324
2341
  // Update settings
@@ -2422,8 +2439,7 @@ export default function Core(rootElement, userSettings) {
2422
2439
  }
2423
2440
  grid.adjustRowsAndCols();
2424
2441
  if (instance.view && !firstRun) {
2425
- instance.forceFullRender = true; // used when data was changed
2426
- instance.view.render();
2442
+ instance.render();
2427
2443
  instance.view._wt.wtOverlays.adjustElementsSize();
2428
2444
  }
2429
2445
  if (!init && instance.view && (currentHeight === '' || height === '' || height === undefined) && currentHeight !== height) {
@@ -2852,15 +2868,15 @@ export default function Core(rootElement, userSettings) {
2852
2868
  const isThereAnySetSourceListener = this.hasHook('afterSetSourceDataAtCell');
2853
2869
  const changesForHook = [];
2854
2870
  if (isThereAnySetSourceListener) {
2855
- arrayEach(input, _ref8 => {
2856
- let [changeRow, changeProp, changeValue] = _ref8;
2871
+ arrayEach(input, _ref9 => {
2872
+ let [changeRow, changeProp, changeValue] = _ref9;
2857
2873
  changesForHook.push([changeRow, changeProp, dataSource.getAtCell(changeRow, changeProp),
2858
2874
  // The previous value.
2859
2875
  changeValue]);
2860
2876
  });
2861
2877
  }
2862
- arrayEach(input, _ref9 => {
2863
- let [changeRow, changeProp, changeValue] = _ref9;
2878
+ arrayEach(input, _ref10 => {
2879
+ let [changeRow, changeProp, changeValue] = _ref10;
2864
2880
  dataSource.setAtCell(changeRow, changeProp, changeValue);
2865
2881
  });
2866
2882
  if (isThereAnySetSourceListener) {
@@ -3080,11 +3096,16 @@ export default function Core(rootElement, userSettings) {
3080
3096
  * @function getCellMeta
3081
3097
  * @param {number} row Visual row index.
3082
3098
  * @param {number} column Visual column index.
3099
+ * @param {object} options Execution options for the `getCellMeta` method.
3100
+ * @param {boolean} [options.skipMetaExtension=false] If `true`, skips extending the cell meta object. This means, the `cells` function, as well as the `afterGetCellMeta` and `beforeGetCellMeta` hooks, will not be called.
3083
3101
  * @returns {object} The cell properties object.
3084
3102
  * @fires Hooks#beforeGetCellMeta
3085
3103
  * @fires Hooks#afterGetCellMeta
3086
3104
  */
3087
3105
  this.getCellMeta = function (row, column) {
3106
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
3107
+ skipMetaExtension: false
3108
+ };
3088
3109
  let physicalRow = this.toPhysicalRow(row);
3089
3110
  let physicalColumn = this.toPhysicalColumn(column);
3090
3111
  if (physicalRow === null) {
@@ -3095,7 +3116,8 @@ export default function Core(rootElement, userSettings) {
3095
3116
  }
3096
3117
  return metaManager.getCellMeta(physicalRow, physicalColumn, {
3097
3118
  visualRow: row,
3098
- visualColumn: column
3119
+ visualColumn: column,
3120
+ ...options
3099
3121
  });
3100
3122
  };
3101
3123
 
@@ -4072,6 +4094,8 @@ export default function Core(rootElement, userSettings) {
4072
4094
  * col: 50,
4073
4095
  * verticalSnap: 'bottom',
4074
4096
  * horizontalSnap: 'end',
4097
+ * }, () => {
4098
+ * // callback function executed after the viewport is scrolled
4075
4099
  * });
4076
4100
  * ```
4077
4101
  *
@@ -4094,9 +4118,10 @@ export default function Core(rootElement, userSettings) {
4094
4118
  * be positioned at the start or end of the viewport.
4095
4119
  * @param {boolean} [options.considerHiddenIndexes=true] If `true`, we handle visual indexes, otherwise we handle only indexes which
4096
4120
  * may be rendered when they are in the viewport (we don't consider hidden indexes as they aren't rendered).
4121
+ * @param {Function} [callback] The callback function to call after the viewport is scrolled.
4097
4122
  * @returns {boolean} `true` if viewport was scrolled, `false` otherwise.
4098
4123
  */
4099
- this.scrollViewportTo = function (options) {
4124
+ this.scrollViewportTo = function (options, callback) {
4100
4125
  // Support for backward compatibility arguments: (row, col, snapToBottom, snapToRight, considerHiddenIndexes)
4101
4126
  if (typeof options === 'number') {
4102
4127
  var _arguments$;
@@ -4117,6 +4142,9 @@ export default function Core(rootElement, userSettings) {
4117
4142
  } = options !== null && options !== void 0 ? options : {};
4118
4143
  let renderableRow = row;
4119
4144
  let renderableColumn = col;
4145
+ if (isFunction(callback)) {
4146
+ this.addHookOnce('afterScroll', callback);
4147
+ }
4120
4148
  if (considerHiddenIndexes === undefined || considerHiddenIndexes) {
4121
4149
  const isValidRowGrid = Number.isInteger(row) && row >= 0;
4122
4150
  const isValidColumnGrid = Number.isInteger(col) && col >= 0;
@@ -4130,16 +4158,24 @@ export default function Core(rootElement, userSettings) {
4130
4158
  }
4131
4159
  const isRowInteger = Number.isInteger(renderableRow);
4132
4160
  const isColumnInteger = Number.isInteger(renderableColumn);
4161
+ let isScrolled = false;
4133
4162
  if (isRowInteger && renderableRow >= 0 && isColumnInteger && renderableColumn >= 0) {
4134
- return instance.view.scrollViewport(instance._createCellCoords(renderableRow, renderableColumn), options.horizontalSnap, options.verticalSnap);
4135
- }
4136
- if (isRowInteger && renderableRow >= 0 && (isColumnInteger && renderableColumn < 0 || !isColumnInteger)) {
4137
- return instance.view.scrollViewportVertically(renderableRow, options.verticalSnap);
4138
- }
4139
- if (isColumnInteger && renderableColumn >= 0 && (isRowInteger && renderableRow < 0 || !isRowInteger)) {
4140
- return instance.view.scrollViewportHorizontally(renderableColumn, options.horizontalSnap);
4163
+ isScrolled = instance.view.scrollViewport(instance._createCellCoords(renderableRow, renderableColumn), options.horizontalSnap, options.verticalSnap);
4164
+ } else if (isRowInteger && renderableRow >= 0 && (isColumnInteger && renderableColumn < 0 || !isColumnInteger)) {
4165
+ isScrolled = instance.view.scrollViewportVertically(renderableRow, options.verticalSnap);
4166
+ } else if (isColumnInteger && renderableColumn >= 0 && (isRowInteger && renderableRow < 0 || !isRowInteger)) {
4167
+ isScrolled = instance.view.scrollViewportHorizontally(renderableColumn, options.horizontalSnap);
4168
+ }
4169
+ if (isFunction(callback)) {
4170
+ if (isScrolled) {
4171
+ // fast render triggers `afterScroll` hook
4172
+ this.view.render();
4173
+ } else {
4174
+ this.removeHook('afterScroll', callback);
4175
+ this._registerMicrotask(() => callback());
4176
+ }
4141
4177
  }
4142
- return false;
4178
+ return isScrolled;
4143
4179
  };
4144
4180
 
4145
4181
  /**
@@ -4149,24 +4185,28 @@ export default function Core(rootElement, userSettings) {
4149
4185
  * @memberof Core#
4150
4186
  * @fires Hooks#afterScroll
4151
4187
  * @function scrollToFocusedCell
4152
- * @param {Function} callback The callback function to call after the viewport is scrolled.
4188
+ * @param {Function} [callback] The callback function to call after the viewport is scrolled.
4189
+ * @returns {boolean} `true` if the viewport was scrolled, `false` otherwise.
4153
4190
  */
4154
- this.scrollToFocusedCell = function () {
4155
- let callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : () => {};
4191
+ this.scrollToFocusedCell = function (callback) {
4156
4192
  if (!this.selection.isSelected()) {
4157
- return;
4193
+ return false;
4194
+ }
4195
+ if (isFunction(callback)) {
4196
+ this.addHookOnce('afterScroll', callback);
4158
4197
  }
4159
- this.addHookOnce('afterScroll', callback);
4160
4198
  const {
4161
4199
  highlight
4162
4200
  } = this.getSelectedRangeLast();
4163
4201
  const isScrolled = this.scrollViewportTo(highlight.toObject());
4164
4202
  if (isScrolled) {
4203
+ // fast render triggers `afterScroll` hook
4165
4204
  this.view.render();
4166
- } else {
4205
+ } else if (isFunction(callback)) {
4167
4206
  this.removeHook('afterScroll', callback);
4168
- this._registerImmediate(() => callback());
4207
+ this._registerMicrotask(() => callback());
4169
4208
  }
4209
+ return isScrolled;
4170
4210
  };
4171
4211
 
4172
4212
  /**
@@ -4207,8 +4247,8 @@ export default function Core(rootElement, userSettings) {
4207
4247
  instance.batchExecution(() => {
4208
4248
  instance.rowIndexMapper.unregisterAll();
4209
4249
  instance.columnIndexMapper.unregisterAll();
4210
- pluginsRegistry.getItems().forEach(_ref10 => {
4211
- let [, plugin] = _ref10;
4250
+ pluginsRegistry.getItems().forEach(_ref11 => {
4251
+ let [, plugin] = _ref11;
4212
4252
  plugin.destroy();
4213
4253
  });
4214
4254
  pluginsRegistry.clear();
@@ -4675,6 +4715,20 @@ export default function Core(rootElement, userSettings) {
4675
4715
  });
4676
4716
  };
4677
4717
 
4718
+ /**
4719
+ * Registers a microtask callback.
4720
+ *
4721
+ * @param {Function} callback Function to be delayed in execution.
4722
+ * @private
4723
+ */
4724
+ this._registerMicrotask = function (callback) {
4725
+ this.rootWindow.queueMicrotask(() => {
4726
+ if (!this.isDestroyed) {
4727
+ callback();
4728
+ }
4729
+ });
4730
+ };
4731
+
4678
4732
  /**
4679
4733
  * Gets the instance of the EditorManager.
4680
4734
  *
@@ -357,8 +357,6 @@ class DataMap {
357
357
  }
358
358
  }
359
359
  this.hot.runHooks('afterCreateRow', newVisualRowIndex, numberOfCreatedRows, source);
360
- this.hot.forceFullRender = true; // used when data was changed
361
-
362
360
  return {
363
361
  delta: numberOfCreatedRows,
364
362
  startPhysicalIndex: physicalRowIndex
@@ -444,8 +442,6 @@ class DataMap {
444
442
  }
445
443
  const newVisualColumnIndex = this.hot.toVisualColumn(startPhysicalIndex);
446
444
  this.hot.runHooks('afterCreateCol', newVisualColumnIndex, numberOfCreatedCols, source);
447
- this.hot.forceFullRender = true; // used when data was changed
448
-
449
445
  this.refreshDuckSchema();
450
446
  return {
451
447
  delta: numberOfCreatedCols,
@@ -492,8 +488,6 @@ class DataMap {
492
488
  this.metaManager.removeRow(rowPhysicalIndex, 1);
493
489
  });
494
490
  this.hot.runHooks('afterRemoveRow', rowIndex, numberOfRemovedIndexes, removedPhysicalIndexes, source);
495
- this.hot.forceFullRender = true; // used when data was changed
496
-
497
491
  return true;
498
492
  }
499
493
 
@@ -553,7 +547,6 @@ class DataMap {
553
547
  }
554
548
  }
555
549
  this.hot.runHooks('afterRemoveCol', columnIndex, amount, removedPhysicalIndexes, source);
556
- this.hot.forceFullRender = true; // used when data was changed
557
550
  this.refreshDuckSchema();
558
551
  return true;
559
552
  }
@@ -353,8 +353,6 @@ class DataMap {
353
353
  }
354
354
  }
355
355
  this.hot.runHooks('afterCreateRow', newVisualRowIndex, numberOfCreatedRows, source);
356
- this.hot.forceFullRender = true; // used when data was changed
357
-
358
356
  return {
359
357
  delta: numberOfCreatedRows,
360
358
  startPhysicalIndex: physicalRowIndex
@@ -440,8 +438,6 @@ class DataMap {
440
438
  }
441
439
  const newVisualColumnIndex = this.hot.toVisualColumn(startPhysicalIndex);
442
440
  this.hot.runHooks('afterCreateCol', newVisualColumnIndex, numberOfCreatedCols, source);
443
- this.hot.forceFullRender = true; // used when data was changed
444
-
445
441
  this.refreshDuckSchema();
446
442
  return {
447
443
  delta: numberOfCreatedCols,
@@ -488,8 +484,6 @@ class DataMap {
488
484
  this.metaManager.removeRow(rowPhysicalIndex, 1);
489
485
  });
490
486
  this.hot.runHooks('afterRemoveRow', rowIndex, numberOfRemovedIndexes, removedPhysicalIndexes, source);
491
- this.hot.forceFullRender = true; // used when data was changed
492
-
493
487
  return true;
494
488
  }
495
489
 
@@ -549,7 +543,6 @@ class DataMap {
549
543
  }
550
544
  }
551
545
  this.hot.runHooks('afterRemoveCol', columnIndex, amount, removedPhysicalIndexes, source);
552
- this.hot.forceFullRender = true; // used when data was changed
553
546
  this.refreshDuckSchema();
554
547
  return true;
555
548
  }
@@ -139,22 +139,21 @@ class MetaManager {
139
139
  *
140
140
  * @param {number} physicalRow The physical row index.
141
141
  * @param {number} physicalColumn The physical column index.
142
- * @param {object} options Additional options that are used to extend the cell meta object.
142
+ * @param {object} options Options for the `getCellMeta` method.
143
143
  * @param {number} options.visualRow The visual row index of the currently requested cell meta object.
144
144
  * @param {number} options.visualColumn The visual column index of the currently requested cell meta object.
145
+ * @param {boolean} [options.skipMetaExtension=false] If `true`, omits the `afterGetCellMeta` hook which calls the `extendCellMeta` method.
145
146
  * @returns {object}
146
147
  */
147
- getCellMeta(physicalRow, physicalColumn, _ref) {
148
- let {
149
- visualRow,
150
- visualColumn
151
- } = _ref;
148
+ getCellMeta(physicalRow, physicalColumn, options) {
152
149
  const cellMeta = this.cellMeta.getMeta(physicalRow, physicalColumn);
153
- cellMeta.visualRow = visualRow;
154
- cellMeta.visualCol = visualColumn;
150
+ cellMeta.visualRow = options.visualRow;
151
+ cellMeta.visualCol = options.visualColumn;
155
152
  cellMeta.row = physicalRow;
156
153
  cellMeta.col = physicalColumn;
157
- this.runLocalHooks('afterGetCellMeta', cellMeta);
154
+ if (!options.skipMetaExtension) {
155
+ this.runLocalHooks('afterGetCellMeta', cellMeta);
156
+ }
158
157
  return cellMeta;
159
158
  }
160
159
 
@@ -135,22 +135,21 @@ export default class MetaManager {
135
135
  *
136
136
  * @param {number} physicalRow The physical row index.
137
137
  * @param {number} physicalColumn The physical column index.
138
- * @param {object} options Additional options that are used to extend the cell meta object.
138
+ * @param {object} options Options for the `getCellMeta` method.
139
139
  * @param {number} options.visualRow The visual row index of the currently requested cell meta object.
140
140
  * @param {number} options.visualColumn The visual column index of the currently requested cell meta object.
141
+ * @param {boolean} [options.skipMetaExtension=false] If `true`, omits the `afterGetCellMeta` hook which calls the `extendCellMeta` method.
141
142
  * @returns {object}
142
143
  */
143
- getCellMeta(physicalRow, physicalColumn, _ref) {
144
- let {
145
- visualRow,
146
- visualColumn
147
- } = _ref;
144
+ getCellMeta(physicalRow, physicalColumn, options) {
148
145
  const cellMeta = this.cellMeta.getMeta(physicalRow, physicalColumn);
149
- cellMeta.visualRow = visualRow;
150
- cellMeta.visualCol = visualColumn;
146
+ cellMeta.visualRow = options.visualRow;
147
+ cellMeta.visualCol = options.visualColumn;
151
148
  cellMeta.row = physicalRow;
152
149
  cellMeta.col = physicalColumn;
153
- this.runLocalHooks('afterGetCellMeta', cellMeta);
150
+ if (!options.skipMetaExtension) {
151
+ this.runLocalHooks('afterGetCellMeta', cellMeta);
152
+ }
154
153
  return cellMeta;
155
154
  }
156
155
 
@@ -32,6 +32,7 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
32
32
  */
33
33
  class DynamicCellMetaMod {
34
34
  constructor(metaManager) {
35
+ var _this = this;
35
36
  /**
36
37
  * @type {MetaManager}
37
38
  */
@@ -41,7 +42,9 @@ class DynamicCellMetaMod {
41
42
  */
42
43
  _defineProperty(this, "metaSyncMemo", new Map());
43
44
  this.metaManager = metaManager;
44
- metaManager.addLocalHook('afterGetCellMeta', cellMeta => this.extendCellMeta(cellMeta));
45
+ metaManager.addLocalHook('afterGetCellMeta', function () {
46
+ return _this.extendCellMeta(...arguments);
47
+ });
45
48
  _hooks.Hooks.getSingleton().add('beforeRender', forceFullRender => {
46
49
  if (forceFullRender) {
47
50
  this.metaSyncMemo.clear();
@@ -29,6 +29,7 @@ import { isFunction } from "../../../helpers/function.mjs";
29
29
  */
30
30
  export class DynamicCellMetaMod {
31
31
  constructor(metaManager) {
32
+ var _this = this;
32
33
  /**
33
34
  * @type {MetaManager}
34
35
  */
@@ -38,7 +39,9 @@ export class DynamicCellMetaMod {
38
39
  */
39
40
  _defineProperty(this, "metaSyncMemo", new Map());
40
41
  this.metaManager = metaManager;
41
- metaManager.addLocalHook('afterGetCellMeta', cellMeta => this.extendCellMeta(cellMeta));
42
+ metaManager.addLocalHook('afterGetCellMeta', function () {
43
+ return _this.extendCellMeta(...arguments);
44
+ });
42
45
  Hooks.getSingleton().add('beforeRender', forceFullRender => {
43
46
  if (forceFullRender) {
44
47
  this.metaSyncMemo.clear();