handsontable 14.1.0 → 14.2.0-next-4873a35-20240228

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 (161) hide show
  1. package/3rdparty/walkontable/src/core/_base.js +12 -0
  2. package/3rdparty/walkontable/src/core/_base.mjs +12 -0
  3. package/3rdparty/walkontable/src/scroll.js +131 -98
  4. package/3rdparty/walkontable/src/scroll.mjs +133 -100
  5. package/3rdparty/walkontable/src/selection/border/border.js +3 -3
  6. package/3rdparty/walkontable/src/selection/border/border.mjs +3 -3
  7. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +26 -0
  8. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +26 -0
  9. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +26 -0
  10. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +26 -0
  11. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +20 -0
  12. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +20 -0
  13. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +20 -0
  14. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +20 -0
  15. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +20 -0
  16. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +20 -0
  17. package/3rdparty/walkontable/src/table.js +2 -0
  18. package/3rdparty/walkontable/src/table.mjs +2 -0
  19. package/3rdparty/walkontable/src/viewport.js +9 -0
  20. package/3rdparty/walkontable/src/viewport.mjs +10 -1
  21. package/CHANGELOG.md +38 -0
  22. package/base.js +2 -2
  23. package/base.mjs +2 -2
  24. package/core/index.js +6 -0
  25. package/core/index.mjs +2 -1
  26. package/core/viewportScroll/index.js +65 -0
  27. package/core/viewportScroll/index.mjs +61 -0
  28. package/core/viewportScroll/scrollStrategies/columnHeaderScroll.js +20 -0
  29. package/core/viewportScroll/scrollStrategies/columnHeaderScroll.mjs +16 -0
  30. package/core/viewportScroll/scrollStrategies/cornerHeaderScroll.js +14 -0
  31. package/core/viewportScroll/scrollStrategies/cornerHeaderScroll.mjs +10 -0
  32. package/core/viewportScroll/scrollStrategies/multipleScroll.js +15 -0
  33. package/core/viewportScroll/scrollStrategies/multipleScroll.mjs +11 -0
  34. package/core/viewportScroll/scrollStrategies/noncontiguousScroll.js +15 -0
  35. package/core/viewportScroll/scrollStrategies/noncontiguousScroll.mjs +11 -0
  36. package/core/viewportScroll/scrollStrategies/rowHeaderScroll.js +20 -0
  37. package/core/viewportScroll/scrollStrategies/rowHeaderScroll.mjs +16 -0
  38. package/core/viewportScroll/scrollStrategies/singleScroll.js +46 -0
  39. package/core/viewportScroll/scrollStrategies/singleScroll.mjs +42 -0
  40. package/core.d.ts +1 -1
  41. package/core.js +11 -52
  42. package/core.mjs +12 -53
  43. package/dataMap/metaManager/index.js +1 -1
  44. package/dataMap/metaManager/index.mjs +1 -1
  45. package/dataMap/metaManager/metaLayers/cellMeta.js +6 -1
  46. package/dataMap/metaManager/metaLayers/cellMeta.mjs +6 -1
  47. package/dataMap/metaManager/metaSchema.js +36 -12
  48. package/dataMap/metaManager/metaSchema.mjs +36 -12
  49. package/dist/handsontable.css +2 -2
  50. package/dist/handsontable.full.css +2 -2
  51. package/dist/handsontable.full.js +2996 -1928
  52. package/dist/handsontable.full.min.css +2 -2
  53. package/dist/handsontable.full.min.js +42 -42
  54. package/dist/handsontable.js +2998 -1930
  55. package/dist/handsontable.min.css +2 -2
  56. package/dist/handsontable.min.js +25 -25
  57. package/dist/languages/all.js +130 -25
  58. package/dist/languages/all.min.js +1 -1
  59. package/dist/languages/hr-HR.js +167 -0
  60. package/dist/languages/hr-HR.min.js +1 -0
  61. package/editorManager.js +15 -4
  62. package/editorManager.mjs +15 -4
  63. package/editors/autocompleteEditor/autocompleteEditor.js +2 -2
  64. package/editors/autocompleteEditor/autocompleteEditor.mjs +2 -2
  65. package/editors/baseEditor/baseEditor.js +1 -1
  66. package/editors/baseEditor/baseEditor.mjs +1 -1
  67. package/editors/checkboxEditor/checkboxEditor.js +5 -4
  68. package/editors/checkboxEditor/checkboxEditor.mjs +5 -4
  69. package/editors/dateEditor/dateEditor.js +1 -1
  70. package/editors/dateEditor/dateEditor.mjs +1 -1
  71. package/editors/dropdownEditor/dropdownEditor.js +1 -1
  72. package/editors/dropdownEditor/dropdownEditor.mjs +1 -1
  73. package/editors/handsontableEditor/handsontableEditor.js +1 -1
  74. package/editors/handsontableEditor/handsontableEditor.mjs +1 -1
  75. package/editors/selectEditor/selectEditor.js +1 -1
  76. package/editors/selectEditor/selectEditor.mjs +1 -1
  77. package/editors/textEditor/textEditor.js +1 -2
  78. package/editors/textEditor/textEditor.mjs +1 -2
  79. package/editors/timeEditor/timeEditor.js +1 -1
  80. package/editors/timeEditor/timeEditor.mjs +1 -1
  81. package/helpers/mixed.js +2 -2
  82. package/helpers/mixed.mjs +2 -2
  83. package/helpers/moves.js +86 -0
  84. package/helpers/moves.mjs +82 -0
  85. package/i18n/languages/hr-HR.js +96 -0
  86. package/i18n/languages/hr-HR.mjs +90 -0
  87. package/i18n/languages/index.js +2 -0
  88. package/i18n/languages/index.mjs +2 -1
  89. package/languages/all.js +130 -25
  90. package/languages/hr-HR.js +167 -0
  91. package/languages/hr-HR.mjs +92 -0
  92. package/languages/index.js +130 -25
  93. package/languages/index.mjs +2 -1
  94. package/package.json +11 -1
  95. package/pluginHooks.d.ts +4 -2
  96. package/pluginHooks.js +33 -3
  97. package/pluginHooks.mjs +33 -3
  98. package/plugins/autoColumnSize/autoColumnSize.js +6 -1
  99. package/plugins/autoColumnSize/autoColumnSize.mjs +6 -1
  100. package/plugins/autoRowSize/autoRowSize.js +5 -0
  101. package/plugins/autoRowSize/autoRowSize.mjs +5 -0
  102. package/plugins/autofill/autofill.js +3 -2
  103. package/plugins/autofill/autofill.mjs +3 -2
  104. package/plugins/dropdownMenu/dropdownMenu.js +58 -4
  105. package/plugins/dropdownMenu/dropdownMenu.mjs +58 -4
  106. package/plugins/filters/component/value.js +51 -5
  107. package/plugins/filters/component/value.mjs +51 -5
  108. package/plugins/filters/utils.js +1 -1
  109. package/plugins/filters/utils.mjs +1 -1
  110. package/plugins/formulas/formulas.js +10 -1
  111. package/plugins/formulas/formulas.mjs +10 -1
  112. package/plugins/formulas/indexSyncer/axisSyncer.js +3 -75
  113. package/plugins/formulas/indexSyncer/axisSyncer.mjs +3 -75
  114. package/plugins/manualColumnResize/manualColumnResize.js +3 -0
  115. package/plugins/manualColumnResize/manualColumnResize.mjs +3 -0
  116. package/plugins/mergeCells/cellsCollection.js +1 -1
  117. package/plugins/mergeCells/cellsCollection.mjs +1 -1
  118. package/plugins/mergeCells/mergeCells.js +30 -0
  119. package/plugins/mergeCells/mergeCells.mjs +30 -0
  120. package/plugins/undoRedo/undoRedo.js +61 -14
  121. package/plugins/undoRedo/undoRedo.mjs +61 -14
  122. package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -1
  123. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +1 -1
  124. package/renderers/baseRenderer/baseRenderer.js +1 -1
  125. package/renderers/baseRenderer/baseRenderer.mjs +1 -1
  126. package/renderers/checkboxRenderer/checkboxRenderer.js +36 -8
  127. package/renderers/checkboxRenderer/checkboxRenderer.mjs +36 -8
  128. package/renderers/dateRenderer/dateRenderer.js +1 -1
  129. package/renderers/dateRenderer/dateRenderer.mjs +1 -1
  130. package/renderers/dropdownRenderer/dropdownRenderer.js +1 -1
  131. package/renderers/dropdownRenderer/dropdownRenderer.mjs +1 -1
  132. package/renderers/handsontableRenderer/handsontableRenderer.js +1 -1
  133. package/renderers/handsontableRenderer/handsontableRenderer.mjs +1 -1
  134. package/renderers/htmlRenderer/htmlRenderer.js +1 -1
  135. package/renderers/htmlRenderer/htmlRenderer.mjs +1 -1
  136. package/renderers/numericRenderer/index.js +2 -1
  137. package/renderers/numericRenderer/index.mjs +1 -1
  138. package/renderers/numericRenderer/numericRenderer.js +28 -13
  139. package/renderers/numericRenderer/numericRenderer.mjs +27 -13
  140. package/renderers/passwordRenderer/passwordRenderer.js +1 -1
  141. package/renderers/passwordRenderer/passwordRenderer.mjs +1 -1
  142. package/renderers/selectRenderer/selectRenderer.js +1 -1
  143. package/renderers/selectRenderer/selectRenderer.mjs +1 -1
  144. package/renderers/textRenderer/textRenderer.js +1 -1
  145. package/renderers/textRenderer/textRenderer.mjs +1 -1
  146. package/renderers/timeRenderer/timeRenderer.js +1 -1
  147. package/renderers/timeRenderer/timeRenderer.mjs +1 -1
  148. package/selection/mouseEventHandler.js +4 -0
  149. package/selection/mouseEventHandler.mjs +4 -0
  150. package/selection/selection.js +64 -5
  151. package/selection/selection.mjs +64 -5
  152. package/shortcuts/recorder.js +27 -8
  153. package/shortcuts/recorder.mjs +27 -8
  154. package/tableView.js +86 -5
  155. package/tableView.mjs +87 -6
  156. package/utils/autoResize.js +0 -1
  157. package/utils/autoResize.mjs +0 -1
  158. package/utils/ghostTable.js +6 -6
  159. package/utils/ghostTable.mjs +6 -6
  160. package/utils/parseTable.js +9 -1
  161. package/utils/parseTable.mjs +9 -1
@@ -15,10 +15,16 @@ var _predefinedItems = require("../contextMenu/predefinedItems");
15
15
  var _a11y = require("../../helpers/a11y");
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
18
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
18
19
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
19
20
  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; }
20
21
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
21
22
  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); }
23
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
24
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
25
+ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
26
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
27
+ function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
22
28
  function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
23
29
  _pluginHooks.default.getSingleton().register('afterDropdownMenuDefaultOptions');
24
30
  _pluginHooks.default.getSingleton().register('beforeDropdownMenuShow');
@@ -80,6 +86,7 @@ const SHORTCUTS_GROUP = PLUGIN_KEY;
80
86
  * ```
81
87
  * :::
82
88
  */
89
+ var _isButtonClicked = /*#__PURE__*/new WeakMap();
83
90
  var _addCustomShortcuts = /*#__PURE__*/new WeakSet();
84
91
  var _onTableClick = /*#__PURE__*/new WeakSet();
85
92
  var _onAfterGetColHeader = /*#__PURE__*/new WeakSet();
@@ -87,6 +94,8 @@ var _onMenuBeforeOpen = /*#__PURE__*/new WeakSet();
87
94
  var _onMenuAfterOpen = /*#__PURE__*/new WeakSet();
88
95
  var _onSubMenuAfterOpen = /*#__PURE__*/new WeakSet();
89
96
  var _onMenuAfterClose = /*#__PURE__*/new WeakSet();
97
+ var _onBeforeViewportScrollHorizontally = /*#__PURE__*/new WeakSet();
98
+ var _onBeforeOnCellMouseDown = /*#__PURE__*/new WeakSet();
90
99
  class DropdownMenu extends _base.BasePlugin {
91
100
  static get PLUGIN_KEY() {
92
101
  return PLUGIN_KEY;
@@ -118,6 +127,21 @@ class DropdownMenu extends _base.BasePlugin {
118
127
  super(hotInstance);
119
128
 
120
129
  // One listener for enable/disable functionality
130
+ /**
131
+ * Hook sets the internal flag to `true` when the button is clicked.
132
+ *
133
+ * @param {MouseEvent} event The mouse event object.
134
+ */
135
+ _classPrivateMethodInitSpec(this, _onBeforeOnCellMouseDown);
136
+ /**
137
+ * Hook allows blocking horizontal scroll when the menu is opened by clicking on
138
+ * the column header button. This prevents from scrolling the viewport (jump effect) when
139
+ * the button is clicked.
140
+ *
141
+ * @param {number} visualColumn Visual column index.
142
+ * @returns {number | null}
143
+ */
144
+ _classPrivateMethodInitSpec(this, _onBeforeViewportScrollHorizontally);
121
145
  /**
122
146
  * On menu after close listener.
123
147
  *
@@ -182,6 +206,15 @@ class DropdownMenu extends _base.BasePlugin {
182
206
  * @type {Menu}
183
207
  */
184
208
  _defineProperty(this, "menu", null);
209
+ /**
210
+ * Flag which determines if the button that opens the menu was clicked.
211
+ *
212
+ * @type {boolean}
213
+ */
214
+ _classPrivateFieldInitSpec(this, _isButtonClicked, {
215
+ writable: true,
216
+ value: false
217
+ });
185
218
  this.hot.addHook('afterGetColHeader', (col, TH) => _classPrivateMethodGet(this, _onAfterGetColHeader, _onAfterGetColHeader2).call(this, col, TH));
186
219
  }
187
220
 
@@ -207,6 +240,18 @@ class DropdownMenu extends _base.BasePlugin {
207
240
  return;
208
241
  }
209
242
  this.itemsFactory = new _itemsFactory.ItemsFactory(this.hot, DropdownMenu.DEFAULT_ITEMS);
243
+ this.addHook('beforeOnCellMouseDown', function () {
244
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
245
+ args[_key] = arguments[_key];
246
+ }
247
+ return _classPrivateMethodGet(_this, _onBeforeOnCellMouseDown, _onBeforeOnCellMouseDown2).call(_this, ...args);
248
+ });
249
+ this.addHook('beforeViewportScrollHorizontally', function () {
250
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
251
+ args[_key2] = arguments[_key2];
252
+ }
253
+ return _classPrivateMethodGet(_this, _onBeforeViewportScrollHorizontally, _onBeforeViewportScrollHorizontally2).call(_this, ...args);
254
+ });
210
255
  const settings = this.hot.getSettings()[PLUGIN_KEY];
211
256
  const predefinedItems = {
212
257
  items: this.itemsFactory.getItems(settings)
@@ -236,8 +281,8 @@ class DropdownMenu extends _base.BasePlugin {
236
281
  this.menu.addLocalHook('afterSubmenuOpen', subMenuInstance => _classPrivateMethodGet(this, _onSubMenuAfterOpen, _onSubMenuAfterOpen2).call(this, subMenuInstance));
237
282
  this.menu.addLocalHook('afterClose', () => _classPrivateMethodGet(this, _onMenuAfterClose, _onMenuAfterClose2).call(this));
238
283
  this.menu.addLocalHook('executeCommand', function () {
239
- for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
240
- params[_key] = arguments[_key];
284
+ for (var _len3 = arguments.length, params = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
285
+ params[_key3] = arguments[_key3];
241
286
  }
242
287
  return _this.executeCommand.call(_this, ...params);
243
288
  });
@@ -410,8 +455,8 @@ class DropdownMenu extends _base.BasePlugin {
410
455
  * @param {*} params Additional parameters passed to the command executor.
411
456
  */
412
457
  executeCommand(commandName) {
413
- for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
414
- params[_key2 - 1] = arguments[_key2];
458
+ for (var _len4 = arguments.length, params = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
459
+ params[_key4 - 1] = arguments[_key4];
415
460
  }
416
461
  this.commandExecutor.execute(commandName, ...params);
417
462
  }
@@ -455,6 +500,7 @@ function _onTableClick2(event) {
455
500
  if ((0, _element.hasClass)(event.target, BUTTON_CLASS_NAME)) {
456
501
  const offset = (0, _utils.getDocumentOffsetByElement)(this.menu.container, this.hot.rootDocument);
457
502
  const rect = event.target.getBoundingClientRect();
503
+ _classPrivateFieldSet(this, _isButtonClicked, false);
458
504
  this.open({
459
505
  left: rect.left + offset.left,
460
506
  top: rect.top + event.target.offsetHeight + 3 + offset.top
@@ -516,6 +562,14 @@ function _onMenuAfterClose2() {
516
562
  this.hot.listen();
517
563
  this.hot.runHooks('afterDropdownMenuHide', this);
518
564
  }
565
+ function _onBeforeViewportScrollHorizontally2(visualColumn) {
566
+ return _classPrivateFieldGet(this, _isButtonClicked) ? null : visualColumn;
567
+ }
568
+ function _onBeforeOnCellMouseDown2(event) {
569
+ if ((0, _element.hasClass)(event.target, BUTTON_CLASS_NAME)) {
570
+ _classPrivateFieldSet(this, _isButtonClicked, true);
571
+ }
572
+ }
519
573
  DropdownMenu.SEPARATOR = {
520
574
  name: _predefinedItems.SEPARATOR
521
575
  };
@@ -1,9 +1,15 @@
1
1
  import "core-js/modules/es.error.cause.js";
2
2
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
3
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
3
4
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
4
5
  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; }
5
6
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
6
7
  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); }
8
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
9
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
10
+ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
11
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
12
+ function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
7
13
  function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
8
14
  import { BasePlugin } from "../base/index.mjs";
9
15
  import { arrayEach } from "../../helpers/array.mjs";
@@ -76,6 +82,7 @@ const SHORTCUTS_GROUP = PLUGIN_KEY;
76
82
  * ```
77
83
  * :::
78
84
  */
85
+ var _isButtonClicked = /*#__PURE__*/new WeakMap();
79
86
  var _addCustomShortcuts = /*#__PURE__*/new WeakSet();
80
87
  var _onTableClick = /*#__PURE__*/new WeakSet();
81
88
  var _onAfterGetColHeader = /*#__PURE__*/new WeakSet();
@@ -83,6 +90,8 @@ var _onMenuBeforeOpen = /*#__PURE__*/new WeakSet();
83
90
  var _onMenuAfterOpen = /*#__PURE__*/new WeakSet();
84
91
  var _onSubMenuAfterOpen = /*#__PURE__*/new WeakSet();
85
92
  var _onMenuAfterClose = /*#__PURE__*/new WeakSet();
93
+ var _onBeforeViewportScrollHorizontally = /*#__PURE__*/new WeakSet();
94
+ var _onBeforeOnCellMouseDown = /*#__PURE__*/new WeakSet();
86
95
  export class DropdownMenu extends BasePlugin {
87
96
  static get PLUGIN_KEY() {
88
97
  return PLUGIN_KEY;
@@ -114,6 +123,21 @@ export class DropdownMenu extends BasePlugin {
114
123
  super(hotInstance);
115
124
 
116
125
  // One listener for enable/disable functionality
126
+ /**
127
+ * Hook sets the internal flag to `true` when the button is clicked.
128
+ *
129
+ * @param {MouseEvent} event The mouse event object.
130
+ */
131
+ _classPrivateMethodInitSpec(this, _onBeforeOnCellMouseDown);
132
+ /**
133
+ * Hook allows blocking horizontal scroll when the menu is opened by clicking on
134
+ * the column header button. This prevents from scrolling the viewport (jump effect) when
135
+ * the button is clicked.
136
+ *
137
+ * @param {number} visualColumn Visual column index.
138
+ * @returns {number | null}
139
+ */
140
+ _classPrivateMethodInitSpec(this, _onBeforeViewportScrollHorizontally);
117
141
  /**
118
142
  * On menu after close listener.
119
143
  *
@@ -178,6 +202,15 @@ export class DropdownMenu extends BasePlugin {
178
202
  * @type {Menu}
179
203
  */
180
204
  _defineProperty(this, "menu", null);
205
+ /**
206
+ * Flag which determines if the button that opens the menu was clicked.
207
+ *
208
+ * @type {boolean}
209
+ */
210
+ _classPrivateFieldInitSpec(this, _isButtonClicked, {
211
+ writable: true,
212
+ value: false
213
+ });
181
214
  this.hot.addHook('afterGetColHeader', (col, TH) => _classPrivateMethodGet(this, _onAfterGetColHeader, _onAfterGetColHeader2).call(this, col, TH));
182
215
  }
183
216
 
@@ -203,6 +236,18 @@ export class DropdownMenu extends BasePlugin {
203
236
  return;
204
237
  }
205
238
  this.itemsFactory = new ItemsFactory(this.hot, DropdownMenu.DEFAULT_ITEMS);
239
+ this.addHook('beforeOnCellMouseDown', function () {
240
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
241
+ args[_key] = arguments[_key];
242
+ }
243
+ return _classPrivateMethodGet(_this, _onBeforeOnCellMouseDown, _onBeforeOnCellMouseDown2).call(_this, ...args);
244
+ });
245
+ this.addHook('beforeViewportScrollHorizontally', function () {
246
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
247
+ args[_key2] = arguments[_key2];
248
+ }
249
+ return _classPrivateMethodGet(_this, _onBeforeViewportScrollHorizontally, _onBeforeViewportScrollHorizontally2).call(_this, ...args);
250
+ });
206
251
  const settings = this.hot.getSettings()[PLUGIN_KEY];
207
252
  const predefinedItems = {
208
253
  items: this.itemsFactory.getItems(settings)
@@ -232,8 +277,8 @@ export class DropdownMenu extends BasePlugin {
232
277
  this.menu.addLocalHook('afterSubmenuOpen', subMenuInstance => _classPrivateMethodGet(this, _onSubMenuAfterOpen, _onSubMenuAfterOpen2).call(this, subMenuInstance));
233
278
  this.menu.addLocalHook('afterClose', () => _classPrivateMethodGet(this, _onMenuAfterClose, _onMenuAfterClose2).call(this));
234
279
  this.menu.addLocalHook('executeCommand', function () {
235
- for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
236
- params[_key] = arguments[_key];
280
+ for (var _len3 = arguments.length, params = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
281
+ params[_key3] = arguments[_key3];
237
282
  }
238
283
  return _this.executeCommand.call(_this, ...params);
239
284
  });
@@ -406,8 +451,8 @@ export class DropdownMenu extends BasePlugin {
406
451
  * @param {*} params Additional parameters passed to the command executor.
407
452
  */
408
453
  executeCommand(commandName) {
409
- for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
410
- params[_key2 - 1] = arguments[_key2];
454
+ for (var _len4 = arguments.length, params = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
455
+ params[_key4 - 1] = arguments[_key4];
411
456
  }
412
457
  this.commandExecutor.execute(commandName, ...params);
413
458
  }
@@ -450,6 +495,7 @@ function _onTableClick2(event) {
450
495
  if (hasClass(event.target, BUTTON_CLASS_NAME)) {
451
496
  const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);
452
497
  const rect = event.target.getBoundingClientRect();
498
+ _classPrivateFieldSet(this, _isButtonClicked, false);
453
499
  this.open({
454
500
  left: rect.left + offset.left,
455
501
  top: rect.top + event.target.offsetHeight + 3 + offset.top
@@ -511,6 +557,14 @@ function _onMenuAfterClose2() {
511
557
  this.hot.listen();
512
558
  this.hot.runHooks('afterDropdownMenuHide', this);
513
559
  }
560
+ function _onBeforeViewportScrollHorizontally2(visualColumn) {
561
+ return _classPrivateFieldGet(this, _isButtonClicked) ? null : visualColumn;
562
+ }
563
+ function _onBeforeOnCellMouseDown2(event) {
564
+ if (hasClass(event.target, BUTTON_CLASS_NAME)) {
565
+ _classPrivateFieldSet(this, _isButtonClicked, true);
566
+ }
567
+ }
514
568
  DropdownMenu.SEPARATOR = {
515
569
  name: SEPARATOR
516
570
  };
@@ -13,6 +13,7 @@ var _base = require("./_base");
13
13
  var _multipleSelect = require("../ui/multipleSelect");
14
14
  var _constants2 = require("../constants");
15
15
  var _conditionRegisterer = require("../conditionRegisterer");
16
+ var _numericRenderer = require("../../../renderers/numericRenderer");
16
17
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
17
18
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
19
  function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
@@ -26,12 +27,29 @@ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(
26
27
  * @class ValueComponent
27
28
  */
28
29
  var _onInputKeyDown = /*#__PURE__*/new WeakSet();
30
+ var _triggerModifyMultipleSelectionValueHook = /*#__PURE__*/new WeakSet();
31
+ var _onModifyDisplayedValue = /*#__PURE__*/new WeakSet();
29
32
  class ValueComponent extends _base.BaseComponent {
30
33
  constructor(hotInstance, options) {
31
34
  super(hotInstance, {
32
35
  id: options.id,
33
36
  stateless: false
34
37
  });
38
+ /**
39
+ * Modify the value displayed in the multiple select list.
40
+ *
41
+ * @param {*} value Cell value.
42
+ * @param {object} meta The cell meta object.
43
+ * @returns {*} Returns the modified value.
44
+ */
45
+ _classPrivateMethodInitSpec(this, _onModifyDisplayedValue);
46
+ /**
47
+ * Trigger the `modifyFiltersMultiSelectValue` hook.
48
+ *
49
+ * @param {object} item Item from the multiple select list.
50
+ * @param {Map} metaMap Map of row meta objects.
51
+ */
52
+ _classPrivateMethodInitSpec(this, _triggerModifyMultipleSelectionValueHook);
35
53
  /**
36
54
  * Key down listener.
37
55
  *
@@ -56,6 +74,7 @@ class ValueComponent extends _base.BaseComponent {
56
74
  */
57
75
  registerHooks() {
58
76
  this.getMultipleSelectElement().addLocalHook('keydown', event => _classPrivateMethodGet(this, _onInputKeyDown, _onInputKeyDown2).call(this, event)).addLocalHook('listTabKeydown', event => this.runLocalHooks('listTabKeydown', event));
77
+ this.hot.addHook('modifyFiltersMultiSelectValue', (value, meta) => _classPrivateMethodGet(this, _onModifyDisplayedValue, _onModifyDisplayedValue2).call(this, value, meta));
59
78
  }
60
79
 
61
80
  /**
@@ -113,15 +132,19 @@ class ValueComponent extends _base.BaseComponent {
113
132
  const state = {};
114
133
  const defaultBlankCellValue = this.hot.getTranslatedPhrase(C.FILTERS_VALUES_BLANK_CELLS);
115
134
  if (firstByValueCondition) {
116
- const rowValues = (0, _utils.unifyColumnValues)((0, _array.arrayMap)(filteredRowsFactory(physicalColumn, conditionsStack), row => row.value));
135
+ const filteredRows = filteredRowsFactory(physicalColumn, conditionsStack);
136
+ const rowValues = (0, _array.arrayMap)(filteredRows, row => row.value);
137
+ const rowMetaMap = new Map(filteredRows.map(row => [row.value, this.hot.getCellMeta(row.meta.visualRow, row.meta.visualCol)]));
138
+ const unifiedRowValues = (0, _utils.unifyColumnValues)(rowValues);
117
139
  if (conditionArgsChange) {
118
140
  firstByValueCondition.args[0] = conditionArgsChange;
119
141
  }
120
142
  const selectedValues = [];
121
- const itemsSnapshot = (0, _utils.intersectValues)(rowValues, firstByValueCondition.args[0], defaultBlankCellValue, item => {
143
+ const itemsSnapshot = (0, _utils.intersectValues)(unifiedRowValues, firstByValueCondition.args[0], defaultBlankCellValue, item => {
122
144
  if (item.checked) {
123
145
  selectedValues.push(item.value);
124
146
  }
147
+ _classPrivateMethodGet(this, _triggerModifyMultipleSelectionValueHook, _triggerModifyMultipleSelectionValueHook2).call(this, item, rowMetaMap);
125
148
  });
126
149
  const column = stateInfo.editedConditionStack.column;
127
150
  state.locale = this.hot.getCellMeta(0, column).locale;
@@ -182,8 +205,13 @@ class ValueComponent extends _base.BaseComponent {
182
205
  */
183
206
  reset() {
184
207
  const defaultBlankCellValue = this.hot.getTranslatedPhrase(C.FILTERS_VALUES_BLANK_CELLS);
185
- const values = (0, _utils.unifyColumnValues)(this._getColumnVisibleValues());
186
- const items = (0, _utils.intersectValues)(values, values, defaultBlankCellValue);
208
+ const rowEntries = this._getColumnVisibleValues();
209
+ const rowValues = rowEntries.map(entry => entry.value);
210
+ const rowMetaMap = new Map(rowEntries.map(row => [row.value, row.meta]));
211
+ const values = (0, _utils.unifyColumnValues)(rowValues);
212
+ const items = (0, _utils.intersectValues)(values, values, defaultBlankCellValue, item => {
213
+ _classPrivateMethodGet(this, _triggerModifyMultipleSelectionValueHook, _triggerModifyMultipleSelectionValueHook2).call(this, item, rowMetaMap);
214
+ });
187
215
  this.getMultipleSelectElement().setItems(items);
188
216
  super.reset();
189
217
  this.getMultipleSelectElement().setValue(values);
@@ -203,7 +231,12 @@ class ValueComponent extends _base.BaseComponent {
203
231
  if (selectedColumn === null) {
204
232
  return [];
205
233
  }
206
- return (0, _array.arrayMap)(this.hot.getDataAtCol(selectedColumn.visualIndex), v => (0, _utils.toEmptyString)(v));
234
+ return (0, _array.arrayMap)(this.hot.getDataAtCol(selectedColumn.visualIndex), (v, rowIndex) => {
235
+ return {
236
+ value: (0, _utils.toEmptyString)(v),
237
+ meta: this.hot.getCellMeta(rowIndex, selectedColumn.visualIndex)
238
+ };
239
+ });
207
240
  }
208
241
  }
209
242
  exports.ValueComponent = ValueComponent;
@@ -212,4 +245,17 @@ function _onInputKeyDown2(event) {
212
245
  this.runLocalHooks('cancel');
213
246
  (0, _event.stopImmediatePropagation)(event);
214
247
  }
248
+ }
249
+ function _triggerModifyMultipleSelectionValueHook2(item, metaMap) {
250
+ if (this.hot.hasHook('modifyFiltersMultiSelectValue')) {
251
+ item.visualValue = this.hot.runHooks('modifyFiltersMultiSelectValue', item.visualValue, metaMap.get(item.value));
252
+ }
253
+ }
254
+ function _onModifyDisplayedValue2(value, meta) {
255
+ switch (meta.type) {
256
+ case 'numeric':
257
+ return (0, _numericRenderer.getRenderedValue)(value, meta);
258
+ default:
259
+ return value;
260
+ }
215
261
  }
@@ -16,17 +16,35 @@ import { BaseComponent } from "./_base.mjs";
16
16
  import { MultipleSelectUI } from "../ui/multipleSelect.mjs";
17
17
  import { CONDITION_BY_VALUE, CONDITION_NONE } from "../constants.mjs";
18
18
  import { getConditionDescriptor } from "../conditionRegisterer.mjs";
19
+ import { getRenderedValue as getRenderedNumericValue } from "../../../renderers/numericRenderer/index.mjs";
19
20
  /**
20
21
  * @private
21
22
  * @class ValueComponent
22
23
  */
23
24
  var _onInputKeyDown = /*#__PURE__*/new WeakSet();
25
+ var _triggerModifyMultipleSelectionValueHook = /*#__PURE__*/new WeakSet();
26
+ var _onModifyDisplayedValue = /*#__PURE__*/new WeakSet();
24
27
  export class ValueComponent extends BaseComponent {
25
28
  constructor(hotInstance, options) {
26
29
  super(hotInstance, {
27
30
  id: options.id,
28
31
  stateless: false
29
32
  });
33
+ /**
34
+ * Modify the value displayed in the multiple select list.
35
+ *
36
+ * @param {*} value Cell value.
37
+ * @param {object} meta The cell meta object.
38
+ * @returns {*} Returns the modified value.
39
+ */
40
+ _classPrivateMethodInitSpec(this, _onModifyDisplayedValue);
41
+ /**
42
+ * Trigger the `modifyFiltersMultiSelectValue` hook.
43
+ *
44
+ * @param {object} item Item from the multiple select list.
45
+ * @param {Map} metaMap Map of row meta objects.
46
+ */
47
+ _classPrivateMethodInitSpec(this, _triggerModifyMultipleSelectionValueHook);
30
48
  /**
31
49
  * Key down listener.
32
50
  *
@@ -51,6 +69,7 @@ export class ValueComponent extends BaseComponent {
51
69
  */
52
70
  registerHooks() {
53
71
  this.getMultipleSelectElement().addLocalHook('keydown', event => _classPrivateMethodGet(this, _onInputKeyDown, _onInputKeyDown2).call(this, event)).addLocalHook('listTabKeydown', event => this.runLocalHooks('listTabKeydown', event));
72
+ this.hot.addHook('modifyFiltersMultiSelectValue', (value, meta) => _classPrivateMethodGet(this, _onModifyDisplayedValue, _onModifyDisplayedValue2).call(this, value, meta));
54
73
  }
55
74
 
56
75
  /**
@@ -108,15 +127,19 @@ export class ValueComponent extends BaseComponent {
108
127
  const state = {};
109
128
  const defaultBlankCellValue = this.hot.getTranslatedPhrase(C.FILTERS_VALUES_BLANK_CELLS);
110
129
  if (firstByValueCondition) {
111
- const rowValues = unifyColumnValues(arrayMap(filteredRowsFactory(physicalColumn, conditionsStack), row => row.value));
130
+ const filteredRows = filteredRowsFactory(physicalColumn, conditionsStack);
131
+ const rowValues = arrayMap(filteredRows, row => row.value);
132
+ const rowMetaMap = new Map(filteredRows.map(row => [row.value, this.hot.getCellMeta(row.meta.visualRow, row.meta.visualCol)]));
133
+ const unifiedRowValues = unifyColumnValues(rowValues);
112
134
  if (conditionArgsChange) {
113
135
  firstByValueCondition.args[0] = conditionArgsChange;
114
136
  }
115
137
  const selectedValues = [];
116
- const itemsSnapshot = intersectValues(rowValues, firstByValueCondition.args[0], defaultBlankCellValue, item => {
138
+ const itemsSnapshot = intersectValues(unifiedRowValues, firstByValueCondition.args[0], defaultBlankCellValue, item => {
117
139
  if (item.checked) {
118
140
  selectedValues.push(item.value);
119
141
  }
142
+ _classPrivateMethodGet(this, _triggerModifyMultipleSelectionValueHook, _triggerModifyMultipleSelectionValueHook2).call(this, item, rowMetaMap);
120
143
  });
121
144
  const column = stateInfo.editedConditionStack.column;
122
145
  state.locale = this.hot.getCellMeta(0, column).locale;
@@ -177,8 +200,13 @@ export class ValueComponent extends BaseComponent {
177
200
  */
178
201
  reset() {
179
202
  const defaultBlankCellValue = this.hot.getTranslatedPhrase(C.FILTERS_VALUES_BLANK_CELLS);
180
- const values = unifyColumnValues(this._getColumnVisibleValues());
181
- const items = intersectValues(values, values, defaultBlankCellValue);
203
+ const rowEntries = this._getColumnVisibleValues();
204
+ const rowValues = rowEntries.map(entry => entry.value);
205
+ const rowMetaMap = new Map(rowEntries.map(row => [row.value, row.meta]));
206
+ const values = unifyColumnValues(rowValues);
207
+ const items = intersectValues(values, values, defaultBlankCellValue, item => {
208
+ _classPrivateMethodGet(this, _triggerModifyMultipleSelectionValueHook, _triggerModifyMultipleSelectionValueHook2).call(this, item, rowMetaMap);
209
+ });
182
210
  this.getMultipleSelectElement().setItems(items);
183
211
  super.reset();
184
212
  this.getMultipleSelectElement().setValue(values);
@@ -198,7 +226,12 @@ export class ValueComponent extends BaseComponent {
198
226
  if (selectedColumn === null) {
199
227
  return [];
200
228
  }
201
- return arrayMap(this.hot.getDataAtCol(selectedColumn.visualIndex), v => toEmptyString(v));
229
+ return arrayMap(this.hot.getDataAtCol(selectedColumn.visualIndex), (v, rowIndex) => {
230
+ return {
231
+ value: toEmptyString(v),
232
+ meta: this.hot.getCellMeta(rowIndex, selectedColumn.visualIndex)
233
+ };
234
+ });
202
235
  }
203
236
  }
204
237
  function _onInputKeyDown2(event) {
@@ -206,4 +239,17 @@ function _onInputKeyDown2(event) {
206
239
  this.runLocalHooks('cancel');
207
240
  stopImmediatePropagation(event);
208
241
  }
242
+ }
243
+ function _triggerModifyMultipleSelectionValueHook2(item, metaMap) {
244
+ if (this.hot.hasHook('modifyFiltersMultiSelectValue')) {
245
+ item.visualValue = this.hot.runHooks('modifyFiltersMultiSelectValue', item.visualValue, metaMap.get(item.value));
246
+ }
247
+ }
248
+ function _onModifyDisplayedValue2(value, meta) {
249
+ switch (meta.type) {
250
+ case 'numeric':
251
+ return getRenderedNumericValue(value, meta);
252
+ default:
253
+ return value;
254
+ }
209
255
  }
@@ -77,7 +77,7 @@ function toEmptyString(value) {
77
77
  }
78
78
 
79
79
  /**
80
- * Unify column values (replace `null` and `undefined` values into empty string, unique values and sort them).
80
+ * Unify column values (remove duplicated values and sort them).
81
81
  *
82
82
  * @param {Array} values An array of values.
83
83
  * @returns {Array}
@@ -68,7 +68,7 @@ export function toEmptyString(value) {
68
68
  }
69
69
 
70
70
  /**
71
- * Unify column values (replace `null` and `undefined` values into empty string, unique values and sort them).
71
+ * Unify column values (remove duplicated values and sort them).
72
72
  *
73
73
  * @param {Array} values An array of values.
74
74
  * @returns {Array}
@@ -1069,7 +1069,15 @@ function _onModifyData2(physicalRow, visualColumn, valueHolder, ioMode) {
1069
1069
  sheet: this.sheetId
1070
1070
  };
1071
1071
  let cellValue = this.engine.getCellValue(address); // Date as an integer (Excel like date).
1072
- const cellMeta = this.hot.getCellMeta(visualRow, visualColumn);
1072
+
1073
+ // TODO: Workaround. We use HOT's `getCellsMeta` method instead of HOT's `getCellMeta` method. Getting cell meta
1074
+ // using the second method lead to execution of the `cells` method. Using the `getDataAtCell` (which may be useful)
1075
+ // in a callback to the `cells` method leads to triggering the `modifyData` hook. Thus, the `onModifyData` callback
1076
+ // is executed once again and it cause creation of an infinite loop.
1077
+ let cellMeta = this.hot.getCellsMeta().find(singleCellMeta => singleCellMeta.visualRow === visualRow && singleCellMeta.visualCol === visualColumn);
1078
+ if (cellMeta === undefined) {
1079
+ cellMeta = {};
1080
+ }
1073
1081
  if (cellMeta.type === 'date' && (0, _number.isNumeric)(cellValue)) {
1074
1082
  cellValue = (0, _utils.getDateFromExcelDate)(cellValue, cellMeta.dateFormat);
1075
1083
  }
@@ -1282,6 +1290,7 @@ function _onEngineSheetAdded2(addedSheetDisplayName) {
1282
1290
  this.hot.runHooks('afterSheetAdded', addedSheetDisplayName);
1283
1291
  }
1284
1292
  function _onEngineSheetRenamed2(oldDisplayName, newDisplayName) {
1293
+ this.sheetName = newDisplayName;
1285
1294
  this.hot.runHooks('afterSheetRenamed', oldDisplayName, newDisplayName);
1286
1295
  }
1287
1296
  function _onEngineSheetRemoved2(removedSheetDisplayName, changes) {
@@ -1064,7 +1064,15 @@ function _onModifyData2(physicalRow, visualColumn, valueHolder, ioMode) {
1064
1064
  sheet: this.sheetId
1065
1065
  };
1066
1066
  let cellValue = this.engine.getCellValue(address); // Date as an integer (Excel like date).
1067
- const cellMeta = this.hot.getCellMeta(visualRow, visualColumn);
1067
+
1068
+ // TODO: Workaround. We use HOT's `getCellsMeta` method instead of HOT's `getCellMeta` method. Getting cell meta
1069
+ // using the second method lead to execution of the `cells` method. Using the `getDataAtCell` (which may be useful)
1070
+ // in a callback to the `cells` method leads to triggering the `modifyData` hook. Thus, the `onModifyData` callback
1071
+ // is executed once again and it cause creation of an infinite loop.
1072
+ let cellMeta = this.hot.getCellsMeta().find(singleCellMeta => singleCellMeta.visualRow === visualRow && singleCellMeta.visualCol === visualColumn);
1073
+ if (cellMeta === undefined) {
1074
+ cellMeta = {};
1075
+ }
1068
1076
  if (cellMeta.type === 'date' && isNumeric(cellValue)) {
1069
1077
  cellValue = getDateFromExcelDate(cellValue, cellMeta.dateFormat);
1070
1078
  }
@@ -1277,6 +1285,7 @@ function _onEngineSheetAdded2(addedSheetDisplayName) {
1277
1285
  this.hot.runHooks('afterSheetAdded', addedSheetDisplayName);
1278
1286
  }
1279
1287
  function _onEngineSheetRenamed2(oldDisplayName, newDisplayName) {
1288
+ this.sheetName = newDisplayName;
1280
1289
  this.hot.runHooks('afterSheetRenamed', oldDisplayName, newDisplayName);
1281
1290
  }
1282
1291
  function _onEngineSheetRemoved2(removedSheetDisplayName, changes) {