handsontable 0.0.0-next-ac97c93-20230617 → 0.0.0-next-acb8c02-20230620

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of handsontable might be problematic. Click here for more details.

Files changed (237) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +61 -12
  3. package/3rdparty/walkontable/src/cell/coords.mjs +61 -12
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +44 -7
  6. package/3rdparty/walkontable/src/cell/range.mjs +44 -7
  7. package/3rdparty/walkontable/src/core/_base.js +9 -3
  8. package/3rdparty/walkontable/src/core/_base.mjs +9 -3
  9. package/3rdparty/walkontable/src/core/clone.js +2 -2
  10. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  11. package/3rdparty/walkontable/src/core/core.js +3 -2
  12. package/3rdparty/walkontable/src/core/core.mjs +3 -2
  13. package/3rdparty/walkontable/src/event.js +7 -7
  14. package/3rdparty/walkontable/src/event.mjs +7 -7
  15. package/3rdparty/walkontable/src/facade/core.js +2 -2
  16. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  17. package/3rdparty/walkontable/src/index.js +10 -2
  18. package/3rdparty/walkontable/src/index.mjs +2 -2
  19. package/3rdparty/walkontable/src/overlay/_base.js +1 -1
  20. package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
  21. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -4
  22. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -4
  23. package/3rdparty/walkontable/src/overlay/top.js +2 -4
  24. package/3rdparty/walkontable/src/overlay/top.mjs +2 -4
  25. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
  26. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  27. package/3rdparty/walkontable/src/selection/border/constants.js +18 -0
  28. package/3rdparty/walkontable/src/selection/border/constants.mjs +13 -0
  29. package/3rdparty/walkontable/src/selection/constants.js +63 -0
  30. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  31. package/3rdparty/walkontable/src/selection/index.js +30 -0
  32. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  33. package/3rdparty/walkontable/src/selection/manager.js +329 -0
  34. package/3rdparty/walkontable/src/selection/manager.mjs +323 -0
  35. package/3rdparty/walkontable/src/selection/scanner.js +364 -0
  36. package/3rdparty/walkontable/src/selection/scanner.mjs +360 -0
  37. package/3rdparty/walkontable/src/selection/selection.js +133 -0
  38. package/3rdparty/walkontable/src/selection/selection.mjs +127 -0
  39. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
  40. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  41. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
  42. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  43. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
  44. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  45. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
  46. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  47. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
  48. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  49. package/3rdparty/walkontable/src/table.js +7 -79
  50. package/3rdparty/walkontable/src/table.mjs +8 -80
  51. package/base.js +2 -2
  52. package/base.mjs +2 -2
  53. package/core.d.ts +5 -3
  54. package/core.js +127 -309
  55. package/core.mjs +127 -309
  56. package/dataMap/metaManager/metaSchema.js +19 -0
  57. package/dataMap/metaManager/metaSchema.mjs +19 -0
  58. package/dist/handsontable.css +8 -3
  59. package/dist/handsontable.full.css +8 -3
  60. package/dist/handsontable.full.js +13260 -10403
  61. package/dist/handsontable.full.min.css +3 -3
  62. package/dist/handsontable.full.min.js +112 -112
  63. package/dist/handsontable.js +19121 -16264
  64. package/dist/handsontable.min.css +3 -3
  65. package/dist/handsontable.min.js +4 -4
  66. package/editorManager.js +21 -82
  67. package/editorManager.mjs +26 -86
  68. package/editors/textEditor/textEditor.js +3 -11
  69. package/editors/textEditor/textEditor.mjs +4 -12
  70. package/helpers/mixed.js +1 -1
  71. package/helpers/mixed.mjs +1 -1
  72. package/helpers/number.d.ts +1 -0
  73. package/helpers/number.js +18 -0
  74. package/helpers/number.mjs +17 -0
  75. package/package.json +1 -1
  76. package/pluginHooks.d.ts +5 -1
  77. package/pluginHooks.js +89 -1
  78. package/pluginHooks.mjs +89 -1
  79. package/plugins/collapsibleColumns/collapsibleColumns.js +81 -24
  80. package/plugins/collapsibleColumns/collapsibleColumns.mjs +81 -24
  81. package/plugins/columnSorting/columnSorting.js +50 -8
  82. package/plugins/columnSorting/columnSorting.mjs +49 -9
  83. package/plugins/columnSorting/index.js +4 -2
  84. package/plugins/columnSorting/index.mjs +1 -1
  85. package/plugins/contextMenu/utils.js +25 -0
  86. package/plugins/contextMenu/utils.mjs +24 -0
  87. package/plugins/copyPaste/copyPaste.js +5 -1
  88. package/plugins/copyPaste/copyPaste.mjs +5 -1
  89. package/plugins/customBorders/customBorders.js +18 -53
  90. package/plugins/customBorders/customBorders.mjs +19 -54
  91. package/plugins/dropdownMenu/dropdownMenu.js +79 -25
  92. package/plugins/dropdownMenu/dropdownMenu.mjs +79 -25
  93. package/plugins/mergeCells/mergeCells.js +5 -18
  94. package/plugins/mergeCells/mergeCells.mjs +5 -18
  95. package/plugins/multiColumnSorting/multiColumnSorting.js +42 -3
  96. package/plugins/multiColumnSorting/multiColumnSorting.mjs +42 -3
  97. package/plugins/nestedHeaders/nestedHeaders.js +132 -10
  98. package/plugins/nestedHeaders/nestedHeaders.mjs +132 -10
  99. package/plugins/nestedHeaders/stateManager/index.js +37 -0
  100. package/plugins/nestedHeaders/stateManager/index.mjs +37 -0
  101. package/plugins/nestedRows/nestedRows.js +52 -7
  102. package/plugins/nestedRows/nestedRows.mjs +52 -7
  103. package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
  104. package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
  105. package/selection/highlight/highlight.js +312 -89
  106. package/selection/highlight/highlight.mjs +302 -85
  107. package/selection/highlight/types/activeHeader.js +10 -9
  108. package/selection/highlight/types/activeHeader.mjs +10 -8
  109. package/selection/highlight/types/area.js +12 -27
  110. package/selection/highlight/types/area.mjs +16 -30
  111. package/selection/highlight/types/areaLayered.js +54 -0
  112. package/selection/highlight/types/areaLayered.mjs +49 -0
  113. package/selection/highlight/types/column.js +50 -0
  114. package/selection/highlight/types/column.mjs +45 -0
  115. package/selection/highlight/types/customSelection.js +7 -10
  116. package/selection/highlight/types/customSelection.mjs +7 -9
  117. package/selection/highlight/types/fill.js +5 -8
  118. package/selection/highlight/types/fill.mjs +5 -7
  119. package/selection/highlight/types/{cell.js → focus.js} +5 -8
  120. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  121. package/selection/highlight/types/header.js +10 -20
  122. package/selection/highlight/types/header.mjs +10 -19
  123. package/selection/highlight/types/{index.js → row.js} +27 -31
  124. package/selection/highlight/types/{index.mjs → row.mjs} +24 -29
  125. package/selection/highlight/visualSelection.js +31 -27
  126. package/selection/highlight/visualSelection.mjs +31 -27
  127. package/selection/index.js +4 -7
  128. package/selection/index.mjs +2 -3
  129. package/selection/mouseEventHandler.js +1 -1
  130. package/selection/mouseEventHandler.mjs +1 -1
  131. package/selection/range.js +8 -8
  132. package/selection/range.mjs +8 -8
  133. package/selection/selection.js +315 -181
  134. package/selection/selection.mjs +310 -180
  135. package/selection/transformation.js +233 -96
  136. package/selection/transformation.mjs +230 -93
  137. package/selection/utils.js +12 -36
  138. package/selection/utils.mjs +13 -36
  139. package/settings.d.ts +1 -0
  140. package/shortcutContexts/commands/editor/closeAndSave.js +15 -0
  141. package/shortcutContexts/commands/editor/closeAndSave.mjs +10 -0
  142. package/shortcutContexts/commands/editor/closeWithoutSaving.js +13 -0
  143. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  144. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  145. package/shortcutContexts/commands/editor/fastOpen.mjs +11 -0
  146. package/shortcutContexts/commands/editor/index.js +16 -0
  147. package/shortcutContexts/commands/editor/index.mjs +12 -0
  148. package/shortcutContexts/commands/editor/open.js +29 -0
  149. package/shortcutContexts/commands/editor/open.mjs +24 -0
  150. package/shortcutContexts/commands/emptySelectedCells.js +12 -0
  151. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  152. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  153. package/shortcutContexts/commands/extendCellsSelection/down.mjs +10 -0
  154. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +21 -0
  155. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +16 -0
  156. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  157. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  158. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  159. package/shortcutContexts/commands/extendCellsSelection/left.mjs +10 -0
  160. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  161. package/shortcutContexts/commands/extendCellsSelection/right.mjs +10 -0
  162. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  163. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +14 -0
  164. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +22 -0
  165. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +17 -0
  166. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +17 -0
  167. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +12 -0
  168. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +17 -0
  169. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +12 -0
  170. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +40 -0
  171. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +35 -0
  172. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +40 -0
  173. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +35 -0
  174. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +22 -0
  175. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +17 -0
  176. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  177. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +14 -0
  178. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  179. package/shortcutContexts/commands/extendCellsSelection/up.mjs +10 -0
  180. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +21 -0
  181. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +16 -0
  182. package/shortcutContexts/commands/index.js +52 -0
  183. package/shortcutContexts/commands/index.mjs +48 -0
  184. package/shortcutContexts/commands/moveCellSelection/down.js +12 -0
  185. package/shortcutContexts/commands/moveCellSelection/down.mjs +7 -0
  186. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +29 -0
  187. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +24 -0
  188. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  189. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  190. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +13 -0
  191. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  192. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +13 -0
  193. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  194. package/shortcutContexts/commands/moveCellSelection/left.js +11 -0
  195. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  196. package/shortcutContexts/commands/moveCellSelection/right.js +11 -0
  197. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  198. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
  199. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +11 -0
  200. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
  201. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +12 -0
  202. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
  203. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +8 -0
  204. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
  205. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +11 -0
  206. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +36 -0
  207. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +31 -0
  208. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +36 -0
  209. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +31 -0
  210. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
  211. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +11 -0
  212. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
  213. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +13 -0
  214. package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
  215. package/shortcutContexts/commands/moveCellSelection/up.mjs +7 -0
  216. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +29 -0
  217. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +24 -0
  218. package/shortcutContexts/commands/populateSelectedCellsData.js +35 -0
  219. package/shortcutContexts/commands/populateSelectedCellsData.mjs +30 -0
  220. package/shortcutContexts/commands/selectAll.js +11 -0
  221. package/shortcutContexts/commands/selectAll.mjs +6 -0
  222. package/shortcutContexts/constants.js +19 -0
  223. package/shortcutContexts/constants.mjs +12 -0
  224. package/shortcutContexts/editor.js +29 -0
  225. package/shortcutContexts/editor.mjs +25 -0
  226. package/shortcutContexts/grid.js +244 -0
  227. package/shortcutContexts/grid.mjs +240 -0
  228. package/shortcutContexts/index.js +29 -0
  229. package/shortcutContexts/index.mjs +15 -0
  230. package/shortcuts/manager.js +2 -0
  231. package/shortcuts/manager.mjs +2 -0
  232. package/tableView.js +58 -9
  233. package/tableView.mjs +58 -9
  234. package/3rdparty/walkontable/src/selection.js +0 -355
  235. package/3rdparty/walkontable/src/selection.mjs +0 -349
  236. package/selection/highlight/constants.js +0 -16
  237. package/selection/highlight/constants.mjs +0 -6
@@ -23,6 +23,7 @@ require("core-js/modules/es.object.get-prototype-of.js");
23
23
  var _base = require("../base");
24
24
  var _array = require("../../helpers/array");
25
25
  var _commandExecutor = _interopRequireDefault(require("../contextMenu/commandExecutor"));
26
+ var _utils = require("../contextMenu/utils");
26
27
  var _eventManager = _interopRequireDefault(require("../../eventManager"));
27
28
  var _element = require("../../helpers/dom/element");
28
29
  var _itemsFactory = _interopRequireDefault(require("../contextMenu/itemsFactory"));
@@ -54,6 +55,7 @@ exports.PLUGIN_KEY = PLUGIN_KEY;
54
55
  var PLUGIN_PRIORITY = 230;
55
56
  exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
56
57
  var BUTTON_CLASS_NAME = 'changeType';
58
+ var SHORTCUTS_GROUP = PLUGIN_KEY;
57
59
 
58
60
  /* eslint-disable jsdoc/require-description-complete-sentence */
59
61
  /**
@@ -182,6 +184,7 @@ var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
182
184
  if (typeof settings.callback === 'function') {
183
185
  this.commandExecutor.setCommonCallback(settings.callback);
184
186
  }
187
+ this.registerShortcuts();
185
188
  _get(_getPrototypeOf(DropdownMenu.prototype), "enablePlugin", this).call(this);
186
189
  this.callOnPluginsReady(function () {
187
190
  _this2.hot.runHooks('afterDropdownMenuDefaultOptions', predefinedItems);
@@ -245,9 +248,71 @@ var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
245
248
  if (this.menu) {
246
249
  this.menu.destroy();
247
250
  }
251
+ this.unregisterShortcuts();
248
252
  _get(_getPrototypeOf(DropdownMenu.prototype), "disablePlugin", this).call(this);
249
253
  }
250
254
 
255
+ /**
256
+ * Register shortcuts responsible for toggling dropdown menu.
257
+ *
258
+ * @private
259
+ */
260
+ }, {
261
+ key: "registerShortcuts",
262
+ value: function registerShortcuts() {
263
+ var _this3 = this;
264
+ var context = this.hot.getShortcutManager().getContext('grid');
265
+ var callback = function callback() {
266
+ var _this3$hot$getSelecte = _this3.hot.getSelectedRangeLast(),
267
+ highlight = _this3$hot$getSelecte.highlight;
268
+ if ((highlight.isHeader() && highlight.row === -1 || highlight.isCell()) && highlight.col >= 0) {
269
+ _this3.hot.selectColumns(highlight.col, highlight.col, -1);
270
+ var _this3$hot$getSelecte2 = _this3.hot.getSelectedRangeLast(),
271
+ from = _this3$hot$getSelecte2.from;
272
+ var offset = (0, _utils.getDocumentOffsetByElement)(_this3.menu.container, _this3.hot.rootDocument);
273
+ var target = _this3.hot.getCell(-1, from.col, true);
274
+ var rect = target.getBoundingClientRect();
275
+ _this3.open({
276
+ left: rect.left + offset.left,
277
+ top: rect.top + target.offsetHeight + offset.top,
278
+ width: rect.width,
279
+ height: rect.height
280
+ });
281
+ _this3.hot._registerTimeout(function () {
282
+ _this3.menu.selectFirstCell();
283
+ });
284
+ }
285
+ };
286
+ context.addShortcuts([{
287
+ keys: [['Shift', 'Alt', 'ArrowDown'], ['Shift', 'Enter']],
288
+ callback: callback,
289
+ runOnlyIf: function runOnlyIf() {
290
+ var _this3$hot$getSelecte3;
291
+ return ((_this3$hot$getSelecte3 = _this3.hot.getSelectedRangeLast()) === null || _this3$hot$getSelecte3 === void 0 ? void 0 : _this3$hot$getSelecte3.highlight.isHeader()) && !_this3.menu.isOpened();
292
+ },
293
+ group: SHORTCUTS_GROUP
294
+ }, {
295
+ keys: [['Shift', 'Alt', 'ArrowDown']],
296
+ callback: callback,
297
+ runOnlyIf: function runOnlyIf() {
298
+ var _this3$hot$getSelecte4;
299
+ return ((_this3$hot$getSelecte4 = _this3.hot.getSelectedRangeLast()) === null || _this3$hot$getSelecte4 === void 0 ? void 0 : _this3$hot$getSelecte4.highlight.isCell()) && !_this3.menu.isOpened();
300
+ },
301
+ group: SHORTCUTS_GROUP
302
+ }]);
303
+ }
304
+
305
+ /**
306
+ * Unregister shortcuts responsible for toggling dropdown menu.
307
+ *
308
+ * @private
309
+ */
310
+ }, {
311
+ key: "unregisterShortcuts",
312
+ value: function unregisterShortcuts() {
313
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
314
+ }
315
+
251
316
  /**
252
317
  * Registers the DOM listeners.
253
318
  *
@@ -256,27 +321,27 @@ var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
256
321
  }, {
257
322
  key: "registerEvents",
258
323
  value: function registerEvents() {
259
- var _this3 = this;
324
+ var _this4 = this;
260
325
  this.eventManager.addEventListener(this.hot.rootElement, 'click', function (event) {
261
- return _this3.onTableClick(event);
326
+ return _this4.onTableClick(event);
262
327
  });
263
328
  }
264
329
 
265
330
  /**
266
331
  * Opens menu and re-position it based on the passed coordinates.
267
332
  *
268
- * @param {object|Event} position An object with `pageX` and `pageY` properties which contains values relative to
269
- * the top left of the fully rendered content area in the browser or with `clientX`
270
- * and `clientY` properties which contains values relative to the upper left edge
271
- * of the content area (the viewport) of the browser window. This object is structurally
272
- * compatible with native mouse event so it can be used either.
333
+ * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties
334
+ * which contains coordinates relative to the browsers viewport (without included scroll offsets).
335
+ * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`
336
+ * coordinates.
273
337
  * @fires Hooks#beforeDropdownMenuShow
274
338
  * @fires Hooks#afterDropdownMenuShow
275
339
  */
276
340
  }, {
277
341
  key: "open",
278
342
  value: function open(position) {
279
- if (!this.menu) {
343
+ var _this$menu;
344
+ if ((_this$menu = this.menu) !== null && _this$menu !== void 0 && _this$menu.isOpened()) {
280
345
  return;
281
346
  }
282
347
  this.menu.open();
@@ -292,10 +357,8 @@ var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
292
357
  }, {
293
358
  key: "close",
294
359
  value: function close() {
295
- if (!this.menu) {
296
- return;
297
- }
298
- this.menu.close();
360
+ var _this$menu2;
361
+ (_this$menu2 = this.menu) === null || _this$menu2 === void 0 ? void 0 : _this$menu2.close();
299
362
  }
300
363
 
301
364
  /**
@@ -367,21 +430,12 @@ var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
367
430
  key: "onTableClick",
368
431
  value: function onTableClick(event) {
369
432
  event.stopPropagation();
370
- if ((0, _element.hasClass)(event.target, BUTTON_CLASS_NAME) && !this.menu.isOpened()) {
371
- var offsetTop = 0;
372
- var offsetLeft = 0;
373
- if (this.hot.rootDocument !== this.menu.container.ownerDocument) {
374
- var frameElement = this.hot.rootWindow.frameElement;
375
- var _frameElement$getBoun = frameElement.getBoundingClientRect(),
376
- top = _frameElement$getBoun.top,
377
- left = _frameElement$getBoun.left;
378
- offsetTop = top;
379
- offsetLeft = left;
380
- }
433
+ if ((0, _element.hasClass)(event.target, BUTTON_CLASS_NAME)) {
434
+ var offset = (0, _utils.getDocumentOffsetByElement)(this.menu.container, this.hot.rootDocument);
381
435
  var rect = event.target.getBoundingClientRect();
382
436
  this.open({
383
- left: rect.left + offsetLeft,
384
- top: rect.top + event.target.offsetHeight + 3 + offsetTop,
437
+ left: rect.left + offset.left,
438
+ top: rect.top + event.target.offsetHeight + 3 + offset.top,
385
439
  width: rect.width,
386
440
  height: rect.height
387
441
  });
@@ -33,6 +33,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
33
33
  import { BasePlugin } from "../base/index.mjs";
34
34
  import { arrayEach } from "../../helpers/array.mjs";
35
35
  import CommandExecutor from "../contextMenu/commandExecutor.mjs";
36
+ import { getDocumentOffsetByElement } from "../contextMenu/utils.mjs";
36
37
  import EventManager from "../../eventManager.mjs";
37
38
  import { hasClass } from "../../helpers/dom/element.mjs";
38
39
  import ItemsFactory from "../contextMenu/itemsFactory.mjs";
@@ -47,6 +48,7 @@ Hooks.getSingleton().register('afterDropdownMenuExecute');
47
48
  export var PLUGIN_KEY = 'dropdownMenu';
48
49
  export var PLUGIN_PRIORITY = 230;
49
50
  var BUTTON_CLASS_NAME = 'changeType';
51
+ var SHORTCUTS_GROUP = PLUGIN_KEY;
50
52
 
51
53
  /* eslint-disable jsdoc/require-description-complete-sentence */
52
54
  /**
@@ -176,6 +178,7 @@ export var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
176
178
  if (typeof settings.callback === 'function') {
177
179
  this.commandExecutor.setCommonCallback(settings.callback);
178
180
  }
181
+ this.registerShortcuts();
179
182
  _get(_getPrototypeOf(DropdownMenu.prototype), "enablePlugin", this).call(this);
180
183
  this.callOnPluginsReady(function () {
181
184
  _this2.hot.runHooks('afterDropdownMenuDefaultOptions', predefinedItems);
@@ -239,9 +242,71 @@ export var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
239
242
  if (this.menu) {
240
243
  this.menu.destroy();
241
244
  }
245
+ this.unregisterShortcuts();
242
246
  _get(_getPrototypeOf(DropdownMenu.prototype), "disablePlugin", this).call(this);
243
247
  }
244
248
 
249
+ /**
250
+ * Register shortcuts responsible for toggling dropdown menu.
251
+ *
252
+ * @private
253
+ */
254
+ }, {
255
+ key: "registerShortcuts",
256
+ value: function registerShortcuts() {
257
+ var _this3 = this;
258
+ var context = this.hot.getShortcutManager().getContext('grid');
259
+ var callback = function callback() {
260
+ var _this3$hot$getSelecte = _this3.hot.getSelectedRangeLast(),
261
+ highlight = _this3$hot$getSelecte.highlight;
262
+ if ((highlight.isHeader() && highlight.row === -1 || highlight.isCell()) && highlight.col >= 0) {
263
+ _this3.hot.selectColumns(highlight.col, highlight.col, -1);
264
+ var _this3$hot$getSelecte2 = _this3.hot.getSelectedRangeLast(),
265
+ from = _this3$hot$getSelecte2.from;
266
+ var offset = getDocumentOffsetByElement(_this3.menu.container, _this3.hot.rootDocument);
267
+ var target = _this3.hot.getCell(-1, from.col, true);
268
+ var rect = target.getBoundingClientRect();
269
+ _this3.open({
270
+ left: rect.left + offset.left,
271
+ top: rect.top + target.offsetHeight + offset.top,
272
+ width: rect.width,
273
+ height: rect.height
274
+ });
275
+ _this3.hot._registerTimeout(function () {
276
+ _this3.menu.selectFirstCell();
277
+ });
278
+ }
279
+ };
280
+ context.addShortcuts([{
281
+ keys: [['Shift', 'Alt', 'ArrowDown'], ['Shift', 'Enter']],
282
+ callback: callback,
283
+ runOnlyIf: function runOnlyIf() {
284
+ var _this3$hot$getSelecte3;
285
+ return ((_this3$hot$getSelecte3 = _this3.hot.getSelectedRangeLast()) === null || _this3$hot$getSelecte3 === void 0 ? void 0 : _this3$hot$getSelecte3.highlight.isHeader()) && !_this3.menu.isOpened();
286
+ },
287
+ group: SHORTCUTS_GROUP
288
+ }, {
289
+ keys: [['Shift', 'Alt', 'ArrowDown']],
290
+ callback: callback,
291
+ runOnlyIf: function runOnlyIf() {
292
+ var _this3$hot$getSelecte4;
293
+ return ((_this3$hot$getSelecte4 = _this3.hot.getSelectedRangeLast()) === null || _this3$hot$getSelecte4 === void 0 ? void 0 : _this3$hot$getSelecte4.highlight.isCell()) && !_this3.menu.isOpened();
294
+ },
295
+ group: SHORTCUTS_GROUP
296
+ }]);
297
+ }
298
+
299
+ /**
300
+ * Unregister shortcuts responsible for toggling dropdown menu.
301
+ *
302
+ * @private
303
+ */
304
+ }, {
305
+ key: "unregisterShortcuts",
306
+ value: function unregisterShortcuts() {
307
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
308
+ }
309
+
245
310
  /**
246
311
  * Registers the DOM listeners.
247
312
  *
@@ -250,27 +315,27 @@ export var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
250
315
  }, {
251
316
  key: "registerEvents",
252
317
  value: function registerEvents() {
253
- var _this3 = this;
318
+ var _this4 = this;
254
319
  this.eventManager.addEventListener(this.hot.rootElement, 'click', function (event) {
255
- return _this3.onTableClick(event);
320
+ return _this4.onTableClick(event);
256
321
  });
257
322
  }
258
323
 
259
324
  /**
260
325
  * Opens menu and re-position it based on the passed coordinates.
261
326
  *
262
- * @param {object|Event} position An object with `pageX` and `pageY` properties which contains values relative to
263
- * the top left of the fully rendered content area in the browser or with `clientX`
264
- * and `clientY` properties which contains values relative to the upper left edge
265
- * of the content area (the viewport) of the browser window. This object is structurally
266
- * compatible with native mouse event so it can be used either.
327
+ * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties
328
+ * which contains coordinates relative to the browsers viewport (without included scroll offsets).
329
+ * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`
330
+ * coordinates.
267
331
  * @fires Hooks#beforeDropdownMenuShow
268
332
  * @fires Hooks#afterDropdownMenuShow
269
333
  */
270
334
  }, {
271
335
  key: "open",
272
336
  value: function open(position) {
273
- if (!this.menu) {
337
+ var _this$menu;
338
+ if ((_this$menu = this.menu) !== null && _this$menu !== void 0 && _this$menu.isOpened()) {
274
339
  return;
275
340
  }
276
341
  this.menu.open();
@@ -286,10 +351,8 @@ export var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
286
351
  }, {
287
352
  key: "close",
288
353
  value: function close() {
289
- if (!this.menu) {
290
- return;
291
- }
292
- this.menu.close();
354
+ var _this$menu2;
355
+ (_this$menu2 = this.menu) === null || _this$menu2 === void 0 ? void 0 : _this$menu2.close();
293
356
  }
294
357
 
295
358
  /**
@@ -361,21 +424,12 @@ export var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
361
424
  key: "onTableClick",
362
425
  value: function onTableClick(event) {
363
426
  event.stopPropagation();
364
- if (hasClass(event.target, BUTTON_CLASS_NAME) && !this.menu.isOpened()) {
365
- var offsetTop = 0;
366
- var offsetLeft = 0;
367
- if (this.hot.rootDocument !== this.menu.container.ownerDocument) {
368
- var frameElement = this.hot.rootWindow.frameElement;
369
- var _frameElement$getBoun = frameElement.getBoundingClientRect(),
370
- top = _frameElement$getBoun.top,
371
- left = _frameElement$getBoun.left;
372
- offsetTop = top;
373
- offsetLeft = left;
374
- }
427
+ if (hasClass(event.target, BUTTON_CLASS_NAME)) {
428
+ var offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);
375
429
  var rect = event.target.getBoundingClientRect();
376
430
  this.open({
377
- left: rect.left + offsetLeft,
378
- top: rect.top + event.target.offsetHeight + 3 + offsetTop,
431
+ left: rect.left + offset.left,
432
+ top: rect.top + event.target.offsetHeight + 3 + offset.top,
379
433
  width: rect.width,
380
434
  height: rect.height
381
435
  });
@@ -243,9 +243,6 @@ var MergeCells = /*#__PURE__*/function (_BasePlugin) {
243
243
  this.addHook('afterDrawSelection', function () {
244
244
  return _this2.onAfterDrawSelection.apply(_this2, arguments);
245
245
  });
246
- this.addHook('beforeRemoveCellClassNames', function () {
247
- return _this2.onBeforeRemoveCellClassNames.apply(_this2, arguments);
248
- });
249
246
  this.addHook('beforeUndoStackChange', function (action, source) {
250
247
  if (source === 'MergeCells') {
251
248
  return false;
@@ -662,8 +659,11 @@ var MergeCells = /*#__PURE__*/function (_BasePlugin) {
662
659
  gridContext.addShortcut({
663
660
  keys: [['Control', 'm']],
664
661
  callback: function callback() {
665
- _this7.toggleMerge(_this7.hot.getSelectedRangeLast());
666
- _this7.hot.render();
662
+ var range = _this7.hot.getSelectedRangeLast();
663
+ if (range && !range.isSingleHeader()) {
664
+ _this7.toggleMerge(range);
665
+ _this7.hot.render();
666
+ }
667
667
  },
668
668
  runOnlyIf: function runOnlyIf(event) {
669
669
  return !event.altKey;
@@ -1340,19 +1340,6 @@ var MergeCells = /*#__PURE__*/function (_BasePlugin) {
1340
1340
  }
1341
1341
  return this.selectionCalculations.getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel);
1342
1342
  }
1343
-
1344
- /**
1345
- * `beforeRemoveCellClassNames` hook callback. Used to remove additional class name from all cells in the table.
1346
- *
1347
- * @private
1348
- * @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from
1349
- * all the cells in the table.
1350
- */
1351
- }, {
1352
- key: "onBeforeRemoveCellClassNames",
1353
- value: function onBeforeRemoveCellClassNames() {
1354
- return this.selectionCalculations.getSelectedMergedCellClassNameToRemove();
1355
- }
1356
1343
  }], [{
1357
1344
  key: "PLUGIN_KEY",
1358
1345
  get: function get() {
@@ -236,9 +236,6 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
236
236
  this.addHook('afterDrawSelection', function () {
237
237
  return _this2.onAfterDrawSelection.apply(_this2, arguments);
238
238
  });
239
- this.addHook('beforeRemoveCellClassNames', function () {
240
- return _this2.onBeforeRemoveCellClassNames.apply(_this2, arguments);
241
- });
242
239
  this.addHook('beforeUndoStackChange', function (action, source) {
243
240
  if (source === 'MergeCells') {
244
241
  return false;
@@ -655,8 +652,11 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
655
652
  gridContext.addShortcut({
656
653
  keys: [['Control', 'm']],
657
654
  callback: function callback() {
658
- _this7.toggleMerge(_this7.hot.getSelectedRangeLast());
659
- _this7.hot.render();
655
+ var range = _this7.hot.getSelectedRangeLast();
656
+ if (range && !range.isSingleHeader()) {
657
+ _this7.toggleMerge(range);
658
+ _this7.hot.render();
659
+ }
660
660
  },
661
661
  runOnlyIf: function runOnlyIf(event) {
662
662
  return !event.altKey;
@@ -1333,19 +1333,6 @@ export var MergeCells = /*#__PURE__*/function (_BasePlugin) {
1333
1333
  }
1334
1334
  return this.selectionCalculations.getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel);
1335
1335
  }
1336
-
1337
- /**
1338
- * `beforeRemoveCellClassNames` hook callback. Used to remove additional class name from all cells in the table.
1339
- *
1340
- * @private
1341
- * @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from
1342
- * all the cells in the table.
1343
- */
1344
- }, {
1345
- key: "onBeforeRemoveCellClassNames",
1346
- value: function onBeforeRemoveCellClassNames() {
1347
- return this.selectionCalculations.getSelectedMergedCellClassNameToRemove();
1348
- }
1349
1336
  }], [{
1350
1337
  key: "PLUGIN_KEY",
1351
1338
  get: function get() {
@@ -16,8 +16,8 @@ require("core-js/modules/es.string.iterator.js");
16
16
  require("core-js/modules/web.dom-collections.iterator.js");
17
17
  exports.__esModule = true;
18
18
  exports.PLUGIN_PRIORITY = exports.PLUGIN_KEY = exports.MultiColumnSorting = void 0;
19
- require("core-js/modules/es.array.concat.js");
20
19
  require("core-js/modules/es.array.sort.js");
20
+ require("core-js/modules/es.array.concat.js");
21
21
  require("core-js/modules/es.object.set-prototype-of.js");
22
22
  require("core-js/modules/es.object.get-prototype-of.js");
23
23
  var _columnSorting = require("../columnSorting");
@@ -45,8 +45,8 @@ var PLUGIN_KEY = 'multiColumnSorting';
45
45
  exports.PLUGIN_KEY = PLUGIN_KEY;
46
46
  var PLUGIN_PRIORITY = 170;
47
47
  exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
48
- var APPEND_COLUMN_CONFIG_STRATEGY = 'append';
49
48
  var CONFLICTED_PLUGIN_KEY = 'columnSorting';
49
+ var SHORTCUTS_GROUP = PLUGIN_KEY;
50
50
  (0, _sortService.registerRootComparator)(PLUGIN_KEY, _rootComparator.rootComparator);
51
51
 
52
52
  /**
@@ -151,6 +151,45 @@ var MultiColumnSorting = /*#__PURE__*/function (_ColumnSorting) {
151
151
  _get(_getPrototypeOf(MultiColumnSorting.prototype), "disablePlugin", this).call(this);
152
152
  }
153
153
 
154
+ /**
155
+ * Register shortcuts responsible for toggling column sorting functionality.
156
+ *
157
+ * @private
158
+ */
159
+ }, {
160
+ key: "registerShortcuts",
161
+ value: function registerShortcuts() {
162
+ var _this2 = this;
163
+ _get(_getPrototypeOf(MultiColumnSorting.prototype), "registerShortcuts", this).call(this);
164
+ this.hot.getShortcutManager().getContext('grid').addShortcut({
165
+ keys: [['Control/Meta', 'Enter']],
166
+ callback: function callback() {
167
+ var _this2$hot$getSelecte = _this2.hot.getSelectedRangeLast(),
168
+ highlight = _this2$hot$getSelecte.highlight;
169
+ if (highlight.row === -1 && highlight.col >= 0) {
170
+ _this2.sort(_this2.getNextSortConfig(highlight.col, _columnSorting.APPEND_COLUMN_CONFIG_STRATEGY));
171
+ }
172
+ },
173
+ runOnlyIf: function runOnlyIf() {
174
+ var _this2$hot$getSelecte2;
175
+ return (_this2$hot$getSelecte2 = _this2.hot.getSelectedRangeLast()) === null || _this2$hot$getSelecte2 === void 0 ? void 0 : _this2$hot$getSelecte2.highlight.isHeader();
176
+ },
177
+ group: SHORTCUTS_GROUP
178
+ });
179
+ }
180
+
181
+ /**
182
+ * Unregister shortcuts responsible for toggling column sorting functionality.
183
+ *
184
+ * @private
185
+ */
186
+ }, {
187
+ key: "unregisterShortcuts",
188
+ value: function unregisterShortcuts() {
189
+ _get(_getPrototypeOf(MultiColumnSorting.prototype), "unregisterShortcuts", this).call(this);
190
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
191
+ }
192
+
154
193
  /**
155
194
  * Sorts the table by chosen columns and orders.
156
195
  *
@@ -319,7 +358,7 @@ var MultiColumnSorting = /*#__PURE__*/function (_ColumnSorting) {
319
358
  if (this.hot.getShortcutManager().isCtrlPressed()) {
320
359
  this.hot.deselectCell();
321
360
  this.hot.selectColumns(coords.col);
322
- this.sort(this.getNextSortConfig(coords.col, APPEND_COLUMN_CONFIG_STRATEGY));
361
+ this.sort(this.getNextSortConfig(coords.col, _columnSorting.APPEND_COLUMN_CONFIG_STRATEGY));
323
362
  } else {
324
363
  this.sort(this.getColumnNextConfig(coords.col));
325
364
  }
@@ -1,6 +1,6 @@
1
1
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
- import "core-js/modules/es.array.concat.js";
3
2
  import "core-js/modules/es.array.sort.js";
3
+ import "core-js/modules/es.array.concat.js";
4
4
  import "core-js/modules/es.object.set-prototype-of.js";
5
5
  import "core-js/modules/es.object.get-prototype-of.js";
6
6
  import "core-js/modules/es.object.to-string.js";
@@ -30,7 +30,7 @@ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) ===
30
30
  function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
31
31
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
32
32
  function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
33
- import { ColumnSorting } from "../columnSorting/index.mjs";
33
+ import { APPEND_COLUMN_CONFIG_STRATEGY, ColumnSorting } from "../columnSorting/index.mjs";
34
34
  import { registerRootComparator } from "../columnSorting/sortService/index.mjs";
35
35
  import { wasHeaderClickedProperly } from "../columnSorting/utils.mjs";
36
36
  import { addClass, removeClass } from "../../helpers/dom/element.mjs";
@@ -39,8 +39,8 @@ import { warnAboutPluginsConflict } from "./utils.mjs";
39
39
  import { getClassesToAdd, getClassesToRemove } from "./domHelpers.mjs";
40
40
  export var PLUGIN_KEY = 'multiColumnSorting';
41
41
  export var PLUGIN_PRIORITY = 170;
42
- var APPEND_COLUMN_CONFIG_STRATEGY = 'append';
43
42
  var CONFLICTED_PLUGIN_KEY = 'columnSorting';
43
+ var SHORTCUTS_GROUP = PLUGIN_KEY;
44
44
  registerRootComparator(PLUGIN_KEY, rootComparator);
45
45
 
46
46
  /**
@@ -145,6 +145,45 @@ export var MultiColumnSorting = /*#__PURE__*/function (_ColumnSorting) {
145
145
  _get(_getPrototypeOf(MultiColumnSorting.prototype), "disablePlugin", this).call(this);
146
146
  }
147
147
 
148
+ /**
149
+ * Register shortcuts responsible for toggling column sorting functionality.
150
+ *
151
+ * @private
152
+ */
153
+ }, {
154
+ key: "registerShortcuts",
155
+ value: function registerShortcuts() {
156
+ var _this2 = this;
157
+ _get(_getPrototypeOf(MultiColumnSorting.prototype), "registerShortcuts", this).call(this);
158
+ this.hot.getShortcutManager().getContext('grid').addShortcut({
159
+ keys: [['Control/Meta', 'Enter']],
160
+ callback: function callback() {
161
+ var _this2$hot$getSelecte = _this2.hot.getSelectedRangeLast(),
162
+ highlight = _this2$hot$getSelecte.highlight;
163
+ if (highlight.row === -1 && highlight.col >= 0) {
164
+ _this2.sort(_this2.getNextSortConfig(highlight.col, APPEND_COLUMN_CONFIG_STRATEGY));
165
+ }
166
+ },
167
+ runOnlyIf: function runOnlyIf() {
168
+ var _this2$hot$getSelecte2;
169
+ return (_this2$hot$getSelecte2 = _this2.hot.getSelectedRangeLast()) === null || _this2$hot$getSelecte2 === void 0 ? void 0 : _this2$hot$getSelecte2.highlight.isHeader();
170
+ },
171
+ group: SHORTCUTS_GROUP
172
+ });
173
+ }
174
+
175
+ /**
176
+ * Unregister shortcuts responsible for toggling column sorting functionality.
177
+ *
178
+ * @private
179
+ */
180
+ }, {
181
+ key: "unregisterShortcuts",
182
+ value: function unregisterShortcuts() {
183
+ _get(_getPrototypeOf(MultiColumnSorting.prototype), "unregisterShortcuts", this).call(this);
184
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
185
+ }
186
+
148
187
  /**
149
188
  * Sorts the table by chosen columns and orders.
150
189
  *