handsontable 14.3.0-next-dda3c4b-20240415 → 14.4.0-next-f62dd73-20240521

Sign up to get free protection for your applications and to get access to all the features.
Files changed (195) hide show
  1. package/3rdparty/walkontable/src/calculator/viewportRows.js +3 -3
  2. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +3 -3
  3. package/3rdparty/walkontable/src/core/_base.js +1 -1
  4. package/3rdparty/walkontable/src/core/_base.mjs +1 -1
  5. package/3rdparty/walkontable/src/overlay/_base.js +24 -20
  6. package/3rdparty/walkontable/src/overlay/_base.mjs +24 -20
  7. package/3rdparty/walkontable/src/overlay/bottom.js +3 -6
  8. package/3rdparty/walkontable/src/overlay/bottom.mjs +3 -6
  9. package/3rdparty/walkontable/src/overlay/inlineStart.js +22 -19
  10. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +22 -19
  11. package/3rdparty/walkontable/src/overlay/top.js +13 -12
  12. package/3rdparty/walkontable/src/overlay/top.mjs +13 -12
  13. package/3rdparty/walkontable/src/overlays.js +46 -24
  14. package/3rdparty/walkontable/src/overlays.mjs +46 -24
  15. package/3rdparty/walkontable/src/selection/manager.js +7 -0
  16. package/3rdparty/walkontable/src/selection/manager.mjs +7 -0
  17. package/3rdparty/walkontable/src/selection/scanner.js +7 -0
  18. package/3rdparty/walkontable/src/selection/scanner.mjs +7 -0
  19. package/3rdparty/walkontable/src/table.js +10 -11
  20. package/3rdparty/walkontable/src/table.mjs +10 -11
  21. package/3rdparty/walkontable/src/utils/columnStretching.js +4 -0
  22. package/3rdparty/walkontable/src/utils/columnStretching.mjs +4 -0
  23. package/3rdparty/walkontable/src/viewport.js +18 -10
  24. package/3rdparty/walkontable/src/viewport.mjs +18 -10
  25. package/CHANGELOG.md +56 -12
  26. package/base.js +2 -2
  27. package/base.mjs +2 -2
  28. package/core.d.ts +2 -2
  29. package/core.js +93 -162
  30. package/core.mjs +93 -162
  31. package/dataMap/dataMap.js +10 -4
  32. package/dataMap/dataMap.mjs +10 -4
  33. package/dataMap/dataSource.js +16 -3
  34. package/dataMap/dataSource.mjs +16 -3
  35. package/dataMap/metaManager/lazyFactoryMap.js +7 -0
  36. package/dataMap/metaManager/lazyFactoryMap.mjs +7 -0
  37. package/dataMap/metaManager/metaSchema.js +38 -0
  38. package/dataMap/metaManager/metaSchema.mjs +38 -0
  39. package/dataMap/metaManager/mods/dynamicCellMeta.js +7 -0
  40. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +7 -0
  41. package/dataMap/metaManager/mods/extendMetaProperties.js +44 -31
  42. package/dataMap/metaManager/mods/extendMetaProperties.mjs +44 -31
  43. package/dataMap/metaManager/utils.js +7 -0
  44. package/dataMap/metaManager/utils.mjs +7 -0
  45. package/dist/handsontable.css +4 -5
  46. package/dist/handsontable.full.css +4 -5
  47. package/dist/handsontable.full.js +5878 -4657
  48. package/dist/handsontable.full.min.css +4 -4
  49. package/dist/handsontable.full.min.js +59 -59
  50. package/dist/handsontable.js +5383 -4277
  51. package/dist/handsontable.min.css +4 -4
  52. package/dist/handsontable.min.js +20 -20
  53. package/editorManager.js +0 -67
  54. package/editorManager.mjs +0 -67
  55. package/editors/autocompleteEditor/autocompleteEditor.js +6 -4
  56. package/editors/autocompleteEditor/autocompleteEditor.mjs +6 -4
  57. package/editors/baseEditor/baseEditor.js +1 -36
  58. package/editors/baseEditor/baseEditor.mjs +2 -37
  59. package/editors/dateEditor/dateEditor.js +4 -1
  60. package/editors/dateEditor/dateEditor.mjs +4 -1
  61. package/editors/dropdownEditor/dropdownEditor.js +8 -5
  62. package/editors/dropdownEditor/dropdownEditor.mjs +8 -5
  63. package/editors/handsontableEditor/handsontableEditor.js +2 -2
  64. package/editors/handsontableEditor/handsontableEditor.mjs +2 -2
  65. package/editors/selectEditor/selectEditor.js +1 -9
  66. package/editors/selectEditor/selectEditor.mjs +1 -9
  67. package/editors/textEditor/textEditor.js +2 -11
  68. package/editors/textEditor/textEditor.mjs +2 -11
  69. package/focusManager.js +3 -5
  70. package/focusManager.mjs +3 -5
  71. package/helpers/array.js +7 -0
  72. package/helpers/array.mjs +7 -0
  73. package/helpers/mixed.js +2 -2
  74. package/helpers/mixed.mjs +2 -2
  75. package/helpers/number.js +12 -2
  76. package/helpers/number.mjs +12 -2
  77. package/package.json +3 -3
  78. package/pluginHooks.d.ts +1 -1
  79. package/pluginHooks.js +79 -2
  80. package/pluginHooks.mjs +79 -2
  81. package/plugins/autoColumnSize/autoColumnSize.js +7 -0
  82. package/plugins/autoColumnSize/autoColumnSize.mjs +7 -0
  83. package/plugins/autoRowSize/autoRowSize.js +2 -2
  84. package/plugins/autoRowSize/autoRowSize.mjs +2 -2
  85. package/plugins/autofill/autofill.js +1 -1
  86. package/plugins/autofill/autofill.mjs +1 -1
  87. package/plugins/base/base.d.ts +1 -1
  88. package/plugins/base/base.js +6 -2
  89. package/plugins/base/base.mjs +6 -2
  90. package/plugins/collapsibleColumns/collapsibleColumns.js +1 -1
  91. package/plugins/collapsibleColumns/collapsibleColumns.mjs +1 -1
  92. package/plugins/columnSorting/sortFunction/date.js +2 -46
  93. package/plugins/columnSorting/sortFunction/date.mjs +2 -45
  94. package/plugins/columnSorting/sortFunction/time.js +17 -0
  95. package/plugins/columnSorting/sortFunction/time.mjs +13 -0
  96. package/plugins/columnSorting/sortService/registry.js +4 -2
  97. package/plugins/columnSorting/sortService/registry.mjs +3 -1
  98. package/plugins/columnSorting/utils.js +64 -0
  99. package/plugins/columnSorting/utils.mjs +62 -0
  100. package/plugins/columnSummary/columnSummary.js +27 -10
  101. package/plugins/columnSummary/columnSummary.mjs +27 -10
  102. package/plugins/columnSummary/endpoints.js +15 -0
  103. package/plugins/columnSummary/endpoints.mjs +15 -0
  104. package/plugins/comments/comments.js +2 -8
  105. package/plugins/comments/comments.mjs +2 -8
  106. package/plugins/comments/contextMenuItem/addEditComment.js +0 -1
  107. package/plugins/comments/contextMenuItem/addEditComment.mjs +0 -1
  108. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  109. package/plugins/copyPaste/copyPaste.js +9 -2
  110. package/plugins/copyPaste/copyPaste.mjs +9 -2
  111. package/plugins/copyPaste/pasteEvent.js +1 -0
  112. package/plugins/copyPaste/pasteEvent.mjs +1 -0
  113. package/plugins/filters/filters.js +1 -1
  114. package/plugins/filters/filters.mjs +1 -1
  115. package/plugins/filters/ui/multipleSelect.js +22 -14
  116. package/plugins/filters/ui/multipleSelect.mjs +22 -14
  117. package/plugins/filters/utils.js +7 -0
  118. package/plugins/filters/utils.mjs +7 -0
  119. package/plugins/formulas/formulas.d.ts +10 -0
  120. package/plugins/formulas/formulas.js +11 -2
  121. package/plugins/formulas/formulas.mjs +11 -2
  122. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -1
  123. package/plugins/hiddenColumns/contextMenuItem/hideColumn.mjs +1 -1
  124. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +1 -1
  125. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +1 -1
  126. package/plugins/hiddenColumns/hiddenColumns.js +8 -1
  127. package/plugins/hiddenColumns/hiddenColumns.mjs +8 -1
  128. package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -1
  129. package/plugins/hiddenRows/contextMenuItem/hideRow.mjs +1 -1
  130. package/plugins/hiddenRows/contextMenuItem/showRow.js +1 -1
  131. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +1 -1
  132. package/plugins/hiddenRows/hiddenRows.js +7 -0
  133. package/plugins/hiddenRows/hiddenRows.mjs +7 -0
  134. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -1
  135. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -1
  136. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -1
  137. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -1
  138. package/plugins/manualColumnMove/manualColumnMove.js +1 -1
  139. package/plugins/manualColumnMove/manualColumnMove.mjs +1 -1
  140. package/plugins/manualColumnResize/manualColumnResize.js +3 -3
  141. package/plugins/manualColumnResize/manualColumnResize.mjs +3 -3
  142. package/plugins/manualRowMove/manualRowMove.js +1 -1
  143. package/plugins/manualRowMove/manualRowMove.mjs +1 -1
  144. package/plugins/manualRowResize/manualRowResize.d.ts +1 -0
  145. package/plugins/manualRowResize/manualRowResize.js +11 -2
  146. package/plugins/manualRowResize/manualRowResize.mjs +11 -2
  147. package/plugins/mergeCells/cellsCollection.js +7 -0
  148. package/plugins/mergeCells/cellsCollection.mjs +7 -0
  149. package/plugins/mergeCells/mergeCells.js +7 -0
  150. package/plugins/mergeCells/mergeCells.mjs +7 -0
  151. package/plugins/nestedHeaders/stateManager/nodeModifiers/collapse.js +7 -0
  152. package/plugins/nestedHeaders/stateManager/nodeModifiers/collapse.mjs +7 -0
  153. package/plugins/nestedHeaders/stateManager/nodeModifiers/expand.js +7 -0
  154. package/plugins/nestedHeaders/stateManager/nodeModifiers/expand.mjs +7 -0
  155. package/plugins/nestedRows/nestedRows.js +7 -0
  156. package/plugins/nestedRows/nestedRows.mjs +7 -0
  157. package/plugins/trimRows/trimRows.js +7 -0
  158. package/plugins/trimRows/trimRows.mjs +7 -0
  159. package/selection/selection.js +163 -4
  160. package/selection/selection.mjs +163 -4
  161. package/selection/utils.js +7 -0
  162. package/selection/utils.mjs +7 -0
  163. package/settings.d.ts +1 -0
  164. package/shortcutContexts/commands/editor/closeAndSave.js +2 -3
  165. package/shortcutContexts/commands/editor/closeAndSave.mjs +2 -3
  166. package/shortcutContexts/commands/editor/closeAndSaveByArrowKeys.js +27 -0
  167. package/shortcutContexts/commands/editor/closeAndSaveByArrowKeys.mjs +24 -0
  168. package/shortcutContexts/commands/editor/closeAndSaveByEnter.js +11 -0
  169. package/shortcutContexts/commands/editor/closeAndSaveByEnter.mjs +8 -0
  170. package/shortcutContexts/commands/editor/index.js +3 -1
  171. package/shortcutContexts/commands/editor/index.mjs +3 -1
  172. package/shortcutContexts/editor.js +9 -1
  173. package/shortcutContexts/editor.mjs +9 -1
  174. package/shortcutContexts/index.js +1 -1
  175. package/shortcutContexts/index.mjs +1 -1
  176. package/shortcuts/keyObserver.js +7 -0
  177. package/shortcuts/keyObserver.mjs +7 -0
  178. package/shortcuts/utils.js +7 -0
  179. package/shortcuts/utils.mjs +7 -0
  180. package/tableView.js +1 -4
  181. package/tableView.mjs +1 -4
  182. package/translations/changesObservable/observable.js +7 -0
  183. package/translations/changesObservable/observable.mjs +7 -0
  184. package/translations/indexMapper.js +7 -0
  185. package/translations/indexMapper.mjs +8 -1
  186. package/utils/dataStructures/uniqueSet.js +7 -0
  187. package/utils/dataStructures/uniqueSet.mjs +7 -0
  188. package/utils/ghostTable.js +0 -4
  189. package/utils/ghostTable.mjs +0 -4
  190. package/utils/paginator.js +7 -0
  191. package/utils/paginator.mjs +7 -0
  192. package/validators/dateValidator/dateValidator.js +1 -3
  193. package/validators/dateValidator/dateValidator.mjs +1 -3
  194. package/validators/timeValidator/timeValidator.js +1 -3
  195. package/validators/timeValidator/timeValidator.mjs +1 -3
@@ -9,8 +9,6 @@ import { addClass, getComputedStyle, isThisHotChild, setCaretPosition, hasClass,
9
9
  import { rangeEach } from "../../helpers/number.mjs";
10
10
  import { createInputElementResizer } from "../../utils/autoResize.mjs";
11
11
  import { isDefined } from "../../helpers/mixed.mjs";
12
- import { SHORTCUTS_GROUP_NAVIGATION } from "../../editorManager.mjs";
13
- import { SHORTCUTS_GROUP_EDITOR } from "../baseEditor/baseEditor.mjs";
14
12
  import { updateCaretPosition } from "./caretPositioner.mjs";
15
13
  import { A11Y_HIDDEN, A11Y_TABINDEX } from "../../helpers/a11y.mjs";
16
14
  const EDITOR_VISIBLE_CLASS_NAME = 'ht_editor_visible';
@@ -146,12 +144,12 @@ export class TextEditor extends BaseEditor {
146
144
  const {
147
145
  allowInvalid
148
146
  } = cellProperties;
149
- if (allowInvalid) {
147
+ if (allowInvalid && !this.isOpened()) {
150
148
  // Remove an empty space from textarea (added by copyPaste plugin to make copy/paste
151
149
  // functionality work with IME)
152
150
  this.TEXTAREA.value = '';
153
151
  }
154
- if (previousState !== EDITOR_STATE.FINISHED) {
152
+ if (previousState !== EDITOR_STATE.FINISHED && !this.isOpened()) {
155
153
  this.hideEditableElement();
156
154
  }
157
155
  }
@@ -377,7 +375,6 @@ export class TextEditor extends BaseEditor {
377
375
  registerShortcuts() {
378
376
  const shortcutManager = this.hot.getShortcutManager();
379
377
  const editorContext = shortcutManager.getContext('editor');
380
- const gridContext = shortcutManager.getContext('grid');
381
378
  const contextConfig = {
382
379
  runOnlyIf: () => isDefined(this.hot.getSelected()),
383
380
  group: SHORTCUTS_GROUP
@@ -386,10 +383,6 @@ export class TextEditor extends BaseEditor {
386
383
  this.hot.rootDocument.execCommand('insertText', false, '\n');
387
384
  };
388
385
  editorContext.addShortcuts([{
389
- keys: [['Tab'], ['Shift', 'Tab'], ['PageUp'], ['PageDown']],
390
- forwardToContext: gridContext,
391
- callback: () => {}
392
- }, {
393
386
  keys: [['Control', 'Enter']],
394
387
  callback: () => {
395
388
  insertNewLine();
@@ -435,8 +428,6 @@ export class TextEditor extends BaseEditor {
435
428
  unregisterShortcuts() {
436
429
  const shortcutManager = this.hot.getShortcutManager();
437
430
  const editorContext = shortcutManager.getContext('editor');
438
- editorContext.removeShortcutsByGroup(SHORTCUTS_GROUP_NAVIGATION);
439
431
  editorContext.removeShortcutsByGroup(SHORTCUTS_GROUP);
440
- editorContext.removeShortcutsByGroup(SHORTCUTS_GROUP_EDITOR);
441
432
  }
442
433
  }
package/focusManager.js CHANGED
@@ -63,7 +63,7 @@ class FocusManager {
63
63
  *
64
64
  * @type {number}
65
65
  */
66
- _classPrivateFieldInitSpec(this, _refocusDelay, 50);
66
+ _classPrivateFieldInitSpec(this, _refocusDelay, 1);
67
67
  /**
68
68
  * Getter function for the element to be used when refocusing the browser after a delay. If `null`, the active
69
69
  * editor's `TEXTAREA` element will be used.
@@ -274,9 +274,7 @@ function _focusEditorElement() {
274
274
  * @param {object} newSettings The new settings passed to the `updateSettings` method.
275
275
  */
276
276
  function _onUpdateSettings(newSettings) {
277
- if (newSettings.imeFastEdit && this.getFocusMode() !== FOCUS_MODES.MIXED) {
278
- this.setFocusMode(FOCUS_MODES.MIXED);
279
- } else if (!newSettings.imeFastEdit && this.getFocusMode() !== FOCUS_MODES.CELL) {
280
- this.setFocusMode(FOCUS_MODES.CELL);
277
+ if (typeof newSettings.imeFastEdit === 'boolean') {
278
+ this.setFocusMode(newSettings.imeFastEdit ? FOCUS_MODES.MIXED : FOCUS_MODES.CELL);
281
279
  }
282
280
  }
package/focusManager.mjs CHANGED
@@ -60,7 +60,7 @@ export class FocusManager {
60
60
  *
61
61
  * @type {number}
62
62
  */
63
- _classPrivateFieldInitSpec(this, _refocusDelay, 50);
63
+ _classPrivateFieldInitSpec(this, _refocusDelay, 1);
64
64
  /**
65
65
  * Getter function for the element to be used when refocusing the browser after a delay. If `null`, the active
66
66
  * editor's `TEXTAREA` element will be used.
@@ -270,9 +270,7 @@ function _focusEditorElement() {
270
270
  * @param {object} newSettings The new settings passed to the `updateSettings` method.
271
271
  */
272
272
  function _onUpdateSettings(newSettings) {
273
- if (newSettings.imeFastEdit && this.getFocusMode() !== FOCUS_MODES.MIXED) {
274
- this.setFocusMode(FOCUS_MODES.MIXED);
275
- } else if (!newSettings.imeFastEdit && this.getFocusMode() !== FOCUS_MODES.CELL) {
276
- this.setFocusMode(FOCUS_MODES.CELL);
273
+ if (typeof newSettings.imeFastEdit === 'boolean') {
274
+ this.setFocusMode(newSettings.imeFastEdit ? FOCUS_MODES.MIXED : FOCUS_MODES.CELL);
277
275
  }
278
276
  }
package/helpers/array.js CHANGED
@@ -19,6 +19,13 @@ exports.pivot = pivot;
19
19
  exports.stringToArray = stringToArray;
20
20
  exports.to2dArray = to2dArray;
21
21
  require("core-js/modules/es.array.push.js");
22
+ require("core-js/modules/esnext.set.difference.v2.js");
23
+ require("core-js/modules/esnext.set.intersection.v2.js");
24
+ require("core-js/modules/esnext.set.is-disjoint-from.v2.js");
25
+ require("core-js/modules/esnext.set.is-subset-of.v2.js");
26
+ require("core-js/modules/esnext.set.is-superset-of.v2.js");
27
+ require("core-js/modules/esnext.set.symmetric-difference.v2.js");
28
+ require("core-js/modules/esnext.set.union.v2.js");
22
29
  /**
23
30
  * @param {Array} arr An array to process.
24
31
  */
package/helpers/array.mjs CHANGED
@@ -1,4 +1,11 @@
1
1
  import "core-js/modules/es.array.push.js";
2
+ import "core-js/modules/esnext.set.difference.v2.js";
3
+ import "core-js/modules/esnext.set.intersection.v2.js";
4
+ import "core-js/modules/esnext.set.is-disjoint-from.v2.js";
5
+ import "core-js/modules/esnext.set.is-subset-of.v2.js";
6
+ import "core-js/modules/esnext.set.is-superset-of.v2.js";
7
+ import "core-js/modules/esnext.set.symmetric-difference.v2.js";
8
+ import "core-js/modules/esnext.set.union.v2.js";
2
9
  /**
3
10
  * @param {Array} arr An array to process.
4
11
  */
package/helpers/mixed.js CHANGED
@@ -134,7 +134,7 @@ const domMessages = {
134
134
  function _injectProductInfo(key, element) {
135
135
  const hasValidType = !isEmpty(key);
136
136
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
137
- const hotVersion = "14.3.0-next-dda3c4b-20240415";
137
+ const hotVersion = "14.4.0-next-f62dd73-20240521";
138
138
  let keyValidityDate;
139
139
  let consoleMessageState = 'invalid';
140
140
  let domMessageState = 'invalid';
@@ -142,7 +142,7 @@ function _injectProductInfo(key, element) {
142
142
  const schemaValidity = _checkKeySchema(key);
143
143
  if (hasValidType || isNonCommercial || schemaValidity) {
144
144
  if (schemaValidity) {
145
- const releaseDate = (0, _moment.default)("16/04/2024", 'DD/MM/YYYY');
145
+ const releaseDate = (0, _moment.default)("28/05/2024", 'DD/MM/YYYY');
146
146
  const releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);
147
147
  const keyValidityDays = _extractTime(key);
148
148
  keyValidityDate = (0, _moment.default)((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');
package/helpers/mixed.mjs CHANGED
@@ -124,7 +124,7 @@ const domMessages = {
124
124
  export function _injectProductInfo(key, element) {
125
125
  const hasValidType = !isEmpty(key);
126
126
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
127
- const hotVersion = "14.3.0-next-dda3c4b-20240415";
127
+ const hotVersion = "14.4.0-next-f62dd73-20240521";
128
128
  let keyValidityDate;
129
129
  let consoleMessageState = 'invalid';
130
130
  let domMessageState = 'invalid';
@@ -132,7 +132,7 @@ export function _injectProductInfo(key, element) {
132
132
  const schemaValidity = _checkKeySchema(key);
133
133
  if (hasValidType || isNonCommercial || schemaValidity) {
134
134
  if (schemaValidity) {
135
- const releaseDate = moment("16/04/2024", 'DD/MM/YYYY');
135
+ const releaseDate = moment("28/05/2024", 'DD/MM/YYYY');
136
136
  const releaseDays = Math.floor(releaseDate.toDate().getTime() / 8.64e7);
137
137
  const keyValidityDays = _extractTime(key);
138
138
  keyValidityDate = moment((keyValidityDays + 1) * 8.64e7, 'x').format('MMMM DD, YYYY');
package/helpers/number.js CHANGED
@@ -7,13 +7,19 @@ exports.isNumericLike = isNumericLike;
7
7
  exports.rangeEach = rangeEach;
8
8
  exports.rangeEachReverse = rangeEachReverse;
9
9
  exports.valueAccordingPercent = valueAccordingPercent;
10
+ require("core-js/modules/esnext.set.difference.v2.js");
11
+ require("core-js/modules/esnext.set.intersection.v2.js");
12
+ require("core-js/modules/esnext.set.is-disjoint-from.v2.js");
13
+ require("core-js/modules/esnext.set.is-subset-of.v2.js");
14
+ require("core-js/modules/esnext.set.is-superset-of.v2.js");
15
+ require("core-js/modules/esnext.set.symmetric-difference.v2.js");
16
+ require("core-js/modules/esnext.set.union.v2.js");
10
17
  /* eslint-disable jsdoc/require-description-complete-sentence */
11
18
  /**
12
19
  * Checks if the passed value is numeric one. For example these values (passed as string or number)
13
20
  * are considered as numeric values:
14
21
  * - 0.001
15
22
  * - .001
16
- * - - 10000
17
23
  * - 10000
18
24
  * - 1e+26
19
25
  * - 22e-26
@@ -21,6 +27,10 @@ exports.valueAccordingPercent = valueAccordingPercent;
21
27
  * - 0xabcdef (hex)
22
28
  * - 0x1 (hex)
23
29
  *
30
+ * these values are not considered as numeric:
31
+ * - - 1000
32
+ * - 100 000
33
+ *
24
34
  * @param {*} value The value to check.
25
35
  * @param {string[]} additionalDelimiters An additional delimiters to be used while checking the numeric value.
26
36
  * @returns {boolean}
@@ -37,7 +47,7 @@ function isNumeric(value) {
37
47
  return /\d/.test(value);
38
48
  }
39
49
  const delimiter = Array.from(new Set(['.', ...additionalDelimiters])).map(d => `\\${d}`).join('|');
40
- return new RegExp(`^[+-]?\\s*(((${delimiter})?\\d+((${delimiter})\\d+)?(e[+-]?\\d+)?)|(0x[a-f\\d]+))$`, 'i').test(value.trim());
50
+ return new RegExp(`^[+-]?(((${delimiter})?\\d+((${delimiter})\\d+)?(e[+-]?\\d+)?)|(0x[a-f\\d]+))$`, 'i').test(value.trim());
41
51
  } else if (type === 'object') {
42
52
  return !!value && typeof value.valueOf() === 'number' && !(value instanceof Date);
43
53
  }
@@ -1,10 +1,16 @@
1
+ import "core-js/modules/esnext.set.difference.v2.js";
2
+ import "core-js/modules/esnext.set.intersection.v2.js";
3
+ import "core-js/modules/esnext.set.is-disjoint-from.v2.js";
4
+ import "core-js/modules/esnext.set.is-subset-of.v2.js";
5
+ import "core-js/modules/esnext.set.is-superset-of.v2.js";
6
+ import "core-js/modules/esnext.set.symmetric-difference.v2.js";
7
+ import "core-js/modules/esnext.set.union.v2.js";
1
8
  /* eslint-disable jsdoc/require-description-complete-sentence */
2
9
  /**
3
10
  * Checks if the passed value is numeric one. For example these values (passed as string or number)
4
11
  * are considered as numeric values:
5
12
  * - 0.001
6
13
  * - .001
7
- * - - 10000
8
14
  * - 10000
9
15
  * - 1e+26
10
16
  * - 22e-26
@@ -12,6 +18,10 @@
12
18
  * - 0xabcdef (hex)
13
19
  * - 0x1 (hex)
14
20
  *
21
+ * these values are not considered as numeric:
22
+ * - - 1000
23
+ * - 100 000
24
+ *
15
25
  * @param {*} value The value to check.
16
26
  * @param {string[]} additionalDelimiters An additional delimiters to be used while checking the numeric value.
17
27
  * @returns {boolean}
@@ -28,7 +38,7 @@ export function isNumeric(value) {
28
38
  return /\d/.test(value);
29
39
  }
30
40
  const delimiter = Array.from(new Set(['.', ...additionalDelimiters])).map(d => `\\${d}`).join('|');
31
- return new RegExp(`^[+-]?\\s*(((${delimiter})?\\d+((${delimiter})\\d+)?(e[+-]?\\d+)?)|(0x[a-f\\d]+))$`, 'i').test(value.trim());
41
+ return new RegExp(`^[+-]?(((${delimiter})?\\d+((${delimiter})\\d+)?(e[+-]?\\d+)?)|(0x[a-f\\d]+))$`, 'i').test(value.trim());
32
42
  } else if (type === 'object') {
33
43
  return !!value && typeof value.valueOf() === 'number' && !(value instanceof Date);
34
44
  }
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "url": "https://github.com/handsontable/handsontable/issues"
11
11
  },
12
12
  "author": "Handsoncode <hello@handsontable.com>",
13
- "version": "14.3.0-next-dda3c4b-20240415",
13
+ "version": "14.4.0-next-f62dd73-20240521",
14
14
  "main": "index",
15
15
  "module": "index.mjs",
16
16
  "jsnext:main": "index.mjs",
@@ -34,9 +34,9 @@
34
34
  "dependencies": {
35
35
  "@handsontable/pikaday": "^1.0.0",
36
36
  "@types/pikaday": "1.7.4",
37
- "core-js": "^3.31.1",
37
+ "core-js": "^3.37.0",
38
38
  "dompurify": "^2.1.1",
39
- "moment": "2.29.4",
39
+ "moment": "2.30.1",
40
40
  "numbro": "2.1.2",
41
41
  "pikaday": "1.8.2"
42
42
  },
package/pluginHooks.d.ts CHANGED
@@ -261,7 +261,7 @@ export interface Events {
261
261
  }
262
262
 
263
263
  export class Hooks {
264
- add<K extends keyof Events>(key: K, callback: Events[K] | Array<Events[K]>, context?: Core): Hooks;
264
+ add<K extends keyof Events>(key: K, callback: Events[K] | Array<Events[K]>, context?: Core, orderIndex?: number): Hooks;
265
265
  createEmptyBucket(): Bucket;
266
266
  deregister(key: string): void;
267
267
  destroy(context?: Core): void;
package/pluginHooks.js CHANGED
@@ -3,6 +3,7 @@
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.error.cause.js");
5
5
  require("core-js/modules/es.array.push.js");
6
+ require("core-js/modules/es.array.unscopables.flat-map.js");
6
7
  var _array = require("./helpers/array");
7
8
  var _object = require("./helpers/object");
8
9
  var _string = require("./helpers/string");
@@ -2665,6 +2666,7 @@ const REMOVED_HOOKS = new Map([['modifyRow', '8.0.0'], ['modifyCol', '8.0.0'], [
2665
2666
  */
2666
2667
  /* eslint-enable jsdoc/require-description-complete-sentence */
2667
2668
  const DEPRECATED_HOOKS = new Map([[]]);
2669
+ const callbackOrder = new WeakMap();
2668
2670
  class Hooks {
2669
2671
  static getSingleton() {
2670
2672
  return getGlobalSingleton();
@@ -2704,7 +2706,10 @@ class Hooks {
2704
2706
  const bucket = Object.create(null);
2705
2707
 
2706
2708
  // eslint-disable-next-line no-return-assign
2707
- (0, _array.arrayEach)(REGISTERED_HOOKS, hook => bucket[hook] = []);
2709
+ (0, _array.arrayEach)(REGISTERED_HOOKS, hook => {
2710
+ bucket[hook] = [];
2711
+ this.initOrderMap(bucket, hook);
2712
+ });
2708
2713
  return bucket;
2709
2714
  }
2710
2715
 
@@ -2736,6 +2741,10 @@ class Hooks {
2736
2741
  * @param {string} key Hook name.
2737
2742
  * @param {Function|Array} callback Callback function or an array of functions.
2738
2743
  * @param {object} [context=null] The context for the hook callback to be added - a Handsontable instance or leave empty.
2744
+ * @param {number} [orderIndex] Order index of the callback.
2745
+ * If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.
2746
+ * If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.
2747
+ * If 0 or no order index is provided, the callback will be added between the "negative" and "positive" indexes.
2739
2748
  * @returns {Hooks} Instance of Hooks.
2740
2749
  *
2741
2750
  * @example
@@ -2755,6 +2764,7 @@ class Hooks {
2755
2764
  */
2756
2765
  add(key, callback) {
2757
2766
  let context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
2767
+ let orderIndex = arguments.length > 3 ? arguments[3] : undefined;
2758
2768
  if (Array.isArray(callback)) {
2759
2769
  (0, _array.arrayEach)(callback, c => this.add(key, c, context));
2760
2770
  } else {
@@ -2771,6 +2781,7 @@ class Hooks {
2771
2781
  if (typeof bucket[key] === 'undefined') {
2772
2782
  this.register(key);
2773
2783
  bucket[key] = [];
2784
+ this.initOrderMap(bucket, key);
2774
2785
  }
2775
2786
  callback.skip = false;
2776
2787
  if (bucket[key].indexOf(callback) === -1) {
@@ -2789,6 +2800,8 @@ class Hooks {
2789
2800
  bucket[key].push(callback);
2790
2801
  }
2791
2802
  }
2803
+ this.setCallbackOrderIndex(bucket, key, callback, orderIndex);
2804
+ this.orderBucketByOrderIndex(bucket, key);
2792
2805
  }
2793
2806
  return this;
2794
2807
  }
@@ -2800,6 +2813,10 @@ class Hooks {
2800
2813
  * @param {string} key Hook/Event name.
2801
2814
  * @param {Function|Array} callback Callback function.
2802
2815
  * @param {object} [context=null] A Handsontable instance.
2816
+ * @param {number} [orderIndex] Order index of the callback.
2817
+ * If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.
2818
+ * If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.
2819
+ * If 0 or no order index is provided, the callback will be added between the "negative" and "positive" indexes.
2803
2820
  *
2804
2821
  * @example
2805
2822
  * ```js
@@ -2808,11 +2825,12 @@ class Hooks {
2808
2825
  */
2809
2826
  once(key, callback) {
2810
2827
  let context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
2828
+ let orderIndex = arguments.length > 3 ? arguments[3] : undefined;
2811
2829
  if (Array.isArray(callback)) {
2812
2830
  (0, _array.arrayEach)(callback, c => this.once(key, c, context));
2813
2831
  } else {
2814
2832
  callback.runOnce = true;
2815
- this.add(key, callback, context);
2833
+ this.add(key, callback, context, orderIndex);
2816
2834
  }
2817
2835
  }
2818
2836
 
@@ -3040,6 +3058,65 @@ class Hooks {
3040
3058
  getRegistered() {
3041
3059
  return REGISTERED_HOOKS;
3042
3060
  }
3061
+
3062
+ /**
3063
+ * Sets the order index of the callback in the bucket object.
3064
+ *
3065
+ * @private
3066
+ * @param {object} bucket The bucket object.
3067
+ * @param {string} key Hook name.
3068
+ * @param {Function} callback Callback function.
3069
+ * @param {number|undefined} orderIndex Order index of the callback.
3070
+ */
3071
+ setCallbackOrderIndex(bucket, key, callback, orderIndex) {
3072
+ const normalizedOrderIndex = Number.isInteger(orderIndex) ? orderIndex : 0;
3073
+ const orderMap = this.getCallbackOrderMap(bucket, key);
3074
+ orderMap.set(normalizedOrderIndex, [...(orderMap.get(normalizedOrderIndex) || []), callback]);
3075
+ }
3076
+
3077
+ /**
3078
+ * Reorders the callbacks in the bucket object by their order index.
3079
+ *
3080
+ * @private
3081
+ * @param {objcet} bucket The bucket object.
3082
+ * @param {string} key Hook name.
3083
+ */
3084
+ orderBucketByOrderIndex(bucket, key) {
3085
+ const orderMap = this.getCallbackOrderMap(bucket, key);
3086
+ if (orderMap === undefined || orderMap.size === 0 || orderMap.size === 1 && orderMap.has(0)) {
3087
+ return;
3088
+ }
3089
+ bucket[key] = [...orderMap].sort((a, b) => a[0] - b[0]).flatMap(_ref => {
3090
+ let [, callbacks] = _ref;
3091
+ return callbacks;
3092
+ });
3093
+ }
3094
+
3095
+ /**
3096
+ * Extends the bucket object with the order property.
3097
+ *
3098
+ * @private
3099
+ * @param {object} bucket The bucket object.
3100
+ * @param {string} hook The hook name.
3101
+ */
3102
+ initOrderMap(bucket, hook) {
3103
+ if (!callbackOrder.has(bucket)) {
3104
+ callbackOrder.set(bucket, []);
3105
+ }
3106
+ callbackOrder.get(bucket)[hook] = new Map();
3107
+ }
3108
+
3109
+ /**
3110
+ * Returns the order map for the provided hook.
3111
+ *
3112
+ * @private
3113
+ * @param {object} bucket The bucket object.
3114
+ * @param {string} hook The hook name.
3115
+ * @returns {Map<number, Array<Function>>} Returns the order map for the provided hook.
3116
+ */
3117
+ getCallbackOrderMap(bucket, hook) {
3118
+ return callbackOrder.get(bucket)[hook];
3119
+ }
3043
3120
  }
3044
3121
  const globalSingleton = new Hooks();
3045
3122
 
package/pluginHooks.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.array.unscopables.flat-map.js";
3
4
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
5
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
5
6
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
@@ -2661,6 +2662,7 @@ const REMOVED_HOOKS = new Map([['modifyRow', '8.0.0'], ['modifyCol', '8.0.0'], [
2661
2662
  */
2662
2663
  /* eslint-enable jsdoc/require-description-complete-sentence */
2663
2664
  const DEPRECATED_HOOKS = new Map([[]]);
2665
+ const callbackOrder = new WeakMap();
2664
2666
  class Hooks {
2665
2667
  static getSingleton() {
2666
2668
  return getGlobalSingleton();
@@ -2700,7 +2702,10 @@ class Hooks {
2700
2702
  const bucket = Object.create(null);
2701
2703
 
2702
2704
  // eslint-disable-next-line no-return-assign
2703
- arrayEach(REGISTERED_HOOKS, hook => bucket[hook] = []);
2705
+ arrayEach(REGISTERED_HOOKS, hook => {
2706
+ bucket[hook] = [];
2707
+ this.initOrderMap(bucket, hook);
2708
+ });
2704
2709
  return bucket;
2705
2710
  }
2706
2711
 
@@ -2732,6 +2737,10 @@ class Hooks {
2732
2737
  * @param {string} key Hook name.
2733
2738
  * @param {Function|Array} callback Callback function or an array of functions.
2734
2739
  * @param {object} [context=null] The context for the hook callback to be added - a Handsontable instance or leave empty.
2740
+ * @param {number} [orderIndex] Order index of the callback.
2741
+ * If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.
2742
+ * If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.
2743
+ * If 0 or no order index is provided, the callback will be added between the "negative" and "positive" indexes.
2735
2744
  * @returns {Hooks} Instance of Hooks.
2736
2745
  *
2737
2746
  * @example
@@ -2751,6 +2760,7 @@ class Hooks {
2751
2760
  */
2752
2761
  add(key, callback) {
2753
2762
  let context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
2763
+ let orderIndex = arguments.length > 3 ? arguments[3] : undefined;
2754
2764
  if (Array.isArray(callback)) {
2755
2765
  arrayEach(callback, c => this.add(key, c, context));
2756
2766
  } else {
@@ -2767,6 +2777,7 @@ class Hooks {
2767
2777
  if (typeof bucket[key] === 'undefined') {
2768
2778
  this.register(key);
2769
2779
  bucket[key] = [];
2780
+ this.initOrderMap(bucket, key);
2770
2781
  }
2771
2782
  callback.skip = false;
2772
2783
  if (bucket[key].indexOf(callback) === -1) {
@@ -2785,6 +2796,8 @@ class Hooks {
2785
2796
  bucket[key].push(callback);
2786
2797
  }
2787
2798
  }
2799
+ this.setCallbackOrderIndex(bucket, key, callback, orderIndex);
2800
+ this.orderBucketByOrderIndex(bucket, key);
2788
2801
  }
2789
2802
  return this;
2790
2803
  }
@@ -2796,6 +2809,10 @@ class Hooks {
2796
2809
  * @param {string} key Hook/Event name.
2797
2810
  * @param {Function|Array} callback Callback function.
2798
2811
  * @param {object} [context=null] A Handsontable instance.
2812
+ * @param {number} [orderIndex] Order index of the callback.
2813
+ * If > 0, the callback will be added after the others, for example, with an index of 1, the callback will be added before the ones with an index of 2, 3, etc., but after the ones with an index of 0 and lower.
2814
+ * If < 0, the callback will be added before the others, for example, with an index of -1, the callback will be added after the ones with an index of -2, -3, etc., but before the ones with an index of 0 and higher.
2815
+ * If 0 or no order index is provided, the callback will be added between the "negative" and "positive" indexes.
2799
2816
  *
2800
2817
  * @example
2801
2818
  * ```js
@@ -2804,11 +2821,12 @@ class Hooks {
2804
2821
  */
2805
2822
  once(key, callback) {
2806
2823
  let context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
2824
+ let orderIndex = arguments.length > 3 ? arguments[3] : undefined;
2807
2825
  if (Array.isArray(callback)) {
2808
2826
  arrayEach(callback, c => this.once(key, c, context));
2809
2827
  } else {
2810
2828
  callback.runOnce = true;
2811
- this.add(key, callback, context);
2829
+ this.add(key, callback, context, orderIndex);
2812
2830
  }
2813
2831
  }
2814
2832
 
@@ -3036,6 +3054,65 @@ class Hooks {
3036
3054
  getRegistered() {
3037
3055
  return REGISTERED_HOOKS;
3038
3056
  }
3057
+
3058
+ /**
3059
+ * Sets the order index of the callback in the bucket object.
3060
+ *
3061
+ * @private
3062
+ * @param {object} bucket The bucket object.
3063
+ * @param {string} key Hook name.
3064
+ * @param {Function} callback Callback function.
3065
+ * @param {number|undefined} orderIndex Order index of the callback.
3066
+ */
3067
+ setCallbackOrderIndex(bucket, key, callback, orderIndex) {
3068
+ const normalizedOrderIndex = Number.isInteger(orderIndex) ? orderIndex : 0;
3069
+ const orderMap = this.getCallbackOrderMap(bucket, key);
3070
+ orderMap.set(normalizedOrderIndex, [...(orderMap.get(normalizedOrderIndex) || []), callback]);
3071
+ }
3072
+
3073
+ /**
3074
+ * Reorders the callbacks in the bucket object by their order index.
3075
+ *
3076
+ * @private
3077
+ * @param {objcet} bucket The bucket object.
3078
+ * @param {string} key Hook name.
3079
+ */
3080
+ orderBucketByOrderIndex(bucket, key) {
3081
+ const orderMap = this.getCallbackOrderMap(bucket, key);
3082
+ if (orderMap === undefined || orderMap.size === 0 || orderMap.size === 1 && orderMap.has(0)) {
3083
+ return;
3084
+ }
3085
+ bucket[key] = [...orderMap].sort((a, b) => a[0] - b[0]).flatMap(_ref => {
3086
+ let [, callbacks] = _ref;
3087
+ return callbacks;
3088
+ });
3089
+ }
3090
+
3091
+ /**
3092
+ * Extends the bucket object with the order property.
3093
+ *
3094
+ * @private
3095
+ * @param {object} bucket The bucket object.
3096
+ * @param {string} hook The hook name.
3097
+ */
3098
+ initOrderMap(bucket, hook) {
3099
+ if (!callbackOrder.has(bucket)) {
3100
+ callbackOrder.set(bucket, []);
3101
+ }
3102
+ callbackOrder.get(bucket)[hook] = new Map();
3103
+ }
3104
+
3105
+ /**
3106
+ * Returns the order map for the provided hook.
3107
+ *
3108
+ * @private
3109
+ * @param {object} bucket The bucket object.
3110
+ * @param {string} hook The hook name.
3111
+ * @returns {Map<number, Array<Function>>} Returns the order map for the provided hook.
3112
+ */
3113
+ getCallbackOrderMap(bucket, hook) {
3114
+ return callbackOrder.get(bucket)[hook];
3115
+ }
3039
3116
  }
3040
3117
  const globalSingleton = new Hooks();
3041
3118
 
@@ -3,6 +3,13 @@
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.error.cause.js");
5
5
  require("core-js/modules/es.array.push.js");
6
+ require("core-js/modules/esnext.set.difference.v2.js");
7
+ require("core-js/modules/esnext.set.intersection.v2.js");
8
+ require("core-js/modules/esnext.set.is-disjoint-from.v2.js");
9
+ require("core-js/modules/esnext.set.is-subset-of.v2.js");
10
+ require("core-js/modules/esnext.set.is-superset-of.v2.js");
11
+ require("core-js/modules/esnext.set.symmetric-difference.v2.js");
12
+ require("core-js/modules/esnext.set.union.v2.js");
6
13
  var _base = require("../base");
7
14
  var _array = require("../../helpers/array");
8
15
  var _feature = require("../../helpers/feature");
@@ -1,5 +1,12 @@
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/esnext.set.difference.v2.js";
4
+ import "core-js/modules/esnext.set.intersection.v2.js";
5
+ import "core-js/modules/esnext.set.is-disjoint-from.v2.js";
6
+ import "core-js/modules/esnext.set.is-subset-of.v2.js";
7
+ import "core-js/modules/esnext.set.is-superset-of.v2.js";
8
+ import "core-js/modules/esnext.set.symmetric-difference.v2.js";
9
+ import "core-js/modules/esnext.set.union.v2.js";
3
10
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
4
11
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
5
12
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
@@ -344,7 +344,7 @@ class AutoRowSize extends _base.BasePlugin {
344
344
  this.inProgress = false;
345
345
 
346
346
  // @TODO Should call once per render cycle, currently fired separately in different plugins
347
- this.hot.view.adjustElementsSize(true);
347
+ this.hot.view.adjustElementsSize();
348
348
 
349
349
  // tmp
350
350
  if (this.hot.view._wt.wtOverlays.inlineStartOverlay.needFullRender) {
@@ -368,7 +368,7 @@ class AutoRowSize extends _base.BasePlugin {
368
368
  loop();
369
369
  } else {
370
370
  this.inProgress = false;
371
- this.hot.view.adjustElementsSize(false);
371
+ this.hot.view.adjustElementsSize();
372
372
  }
373
373
  }
374
374
 
@@ -340,7 +340,7 @@ export class AutoRowSize extends BasePlugin {
340
340
  this.inProgress = false;
341
341
 
342
342
  // @TODO Should call once per render cycle, currently fired separately in different plugins
343
- this.hot.view.adjustElementsSize(true);
343
+ this.hot.view.adjustElementsSize();
344
344
 
345
345
  // tmp
346
346
  if (this.hot.view._wt.wtOverlays.inlineStartOverlay.needFullRender) {
@@ -364,7 +364,7 @@ export class AutoRowSize extends BasePlugin {
364
364
  loop();
365
365
  } else {
366
366
  this.inProgress = false;
367
- this.hot.view.adjustElementsSize(false);
367
+ this.hot.view.adjustElementsSize();
368
368
  }
369
369
  }
370
370
 
@@ -260,7 +260,7 @@ class Autofill extends _base.BasePlugin {
260
260
  this.hot.render();
261
261
  } else {
262
262
  // reset to avoid some range bug
263
- this.hot._refreshBorders();
263
+ this.hot.view.render();
264
264
  }
265
265
  return true;
266
266
  }
@@ -256,7 +256,7 @@ export class Autofill extends BasePlugin {
256
256
  this.hot.render();
257
257
  } else {
258
258
  // reset to avoid some range bug
259
- this.hot._refreshBorders();
259
+ this.hot.view.render();
260
260
  }
261
261
  return true;
262
262
  }