handsontable 0.0.0-next-03bda88-20230622 → 0.0.0-next-c3d199b-20230626

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 (284) 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/CHANGELOG.md +0 -31
  52. package/base.js +2 -2
  53. package/base.mjs +2 -2
  54. package/core.d.ts +5 -3
  55. package/core.js +127 -309
  56. package/core.mjs +127 -309
  57. package/dataMap/metaManager/metaSchema.js +19 -0
  58. package/dataMap/metaManager/metaSchema.mjs +19 -0
  59. package/dist/handsontable.css +8 -3
  60. package/dist/handsontable.full.css +8 -3
  61. package/dist/handsontable.full.js +15283 -12109
  62. package/dist/handsontable.full.min.css +3 -3
  63. package/dist/handsontable.full.min.js +115 -115
  64. package/dist/handsontable.js +23364 -20190
  65. package/dist/handsontable.min.css +3 -3
  66. package/dist/handsontable.min.js +4 -4
  67. package/editorManager.js +21 -94
  68. package/editorManager.mjs +26 -98
  69. package/editors/textEditor/textEditor.js +3 -11
  70. package/editors/textEditor/textEditor.mjs +4 -12
  71. package/helpers/mixed.js +2 -2
  72. package/helpers/mixed.mjs +2 -2
  73. package/helpers/number.d.ts +1 -0
  74. package/helpers/number.js +18 -0
  75. package/helpers/number.mjs +17 -0
  76. package/package.json +1 -1
  77. package/pluginHooks.d.ts +5 -1
  78. package/pluginHooks.js +89 -1
  79. package/pluginHooks.mjs +89 -1
  80. package/plugins/collapsibleColumns/collapsibleColumns.js +81 -24
  81. package/plugins/collapsibleColumns/collapsibleColumns.mjs +81 -24
  82. package/plugins/columnSorting/columnSorting.js +50 -8
  83. package/plugins/columnSorting/columnSorting.mjs +49 -9
  84. package/plugins/columnSorting/index.js +4 -2
  85. package/plugins/columnSorting/index.mjs +1 -1
  86. package/plugins/comments/commentEditor.js +1 -0
  87. package/plugins/comments/commentEditor.mjs +1 -0
  88. package/plugins/comments/comments.js +263 -224
  89. package/plugins/comments/comments.mjs +271 -234
  90. package/plugins/comments/contextMenuItem/addEditComment.js +51 -0
  91. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  92. package/plugins/comments/contextMenuItem/readOnlyComment.js +63 -0
  93. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +55 -0
  94. package/plugins/comments/contextMenuItem/removeComment.js +48 -0
  95. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  96. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  97. package/plugins/contextMenu/contextMenu.js +80 -29
  98. package/plugins/contextMenu/contextMenu.mjs +81 -30
  99. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  100. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  101. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  102. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  103. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  104. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  105. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  106. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  107. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  108. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  109. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  110. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  111. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  112. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  113. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  114. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  115. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  116. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  117. package/plugins/contextMenu/utils.js +25 -16
  118. package/plugins/contextMenu/utils.mjs +24 -15
  119. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  120. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  121. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  122. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  123. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  124. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  125. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  126. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  127. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  128. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  129. package/plugins/copyPaste/copyPaste.js +6 -2
  130. package/plugins/copyPaste/copyPaste.mjs +6 -2
  131. package/plugins/customBorders/customBorders.js +25 -53
  132. package/plugins/customBorders/customBorders.mjs +26 -54
  133. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  134. package/plugins/dropdownMenu/dropdownMenu.js +94 -30
  135. package/plugins/dropdownMenu/dropdownMenu.mjs +94 -30
  136. package/plugins/mergeCells/mergeCells.js +5 -18
  137. package/plugins/mergeCells/mergeCells.mjs +5 -18
  138. package/plugins/multiColumnSorting/multiColumnSorting.js +42 -3
  139. package/plugins/multiColumnSorting/multiColumnSorting.mjs +42 -3
  140. package/plugins/nestedHeaders/nestedHeaders.js +132 -10
  141. package/plugins/nestedHeaders/nestedHeaders.mjs +132 -10
  142. package/plugins/nestedHeaders/stateManager/index.js +37 -0
  143. package/plugins/nestedHeaders/stateManager/index.mjs +37 -0
  144. package/plugins/nestedRows/nestedRows.js +52 -7
  145. package/plugins/nestedRows/nestedRows.mjs +52 -7
  146. package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
  147. package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
  148. package/selection/highlight/highlight.js +312 -89
  149. package/selection/highlight/highlight.mjs +302 -85
  150. package/selection/highlight/types/activeHeader.js +10 -9
  151. package/selection/highlight/types/activeHeader.mjs +10 -8
  152. package/selection/highlight/types/area.js +12 -27
  153. package/selection/highlight/types/area.mjs +16 -30
  154. package/selection/highlight/types/areaLayered.js +54 -0
  155. package/selection/highlight/types/areaLayered.mjs +49 -0
  156. package/selection/highlight/types/column.js +50 -0
  157. package/selection/highlight/types/column.mjs +45 -0
  158. package/selection/highlight/types/customSelection.js +7 -10
  159. package/selection/highlight/types/customSelection.mjs +7 -9
  160. package/selection/highlight/types/fill.js +5 -8
  161. package/selection/highlight/types/fill.mjs +5 -7
  162. package/selection/highlight/types/{cell.js → focus.js} +5 -8
  163. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  164. package/selection/highlight/types/header.js +10 -20
  165. package/selection/highlight/types/header.mjs +10 -19
  166. package/selection/highlight/types/{index.js → row.js} +27 -31
  167. package/selection/highlight/types/{index.mjs → row.mjs} +24 -29
  168. package/selection/highlight/visualSelection.js +31 -27
  169. package/selection/highlight/visualSelection.mjs +31 -27
  170. package/selection/index.js +4 -7
  171. package/selection/index.mjs +2 -3
  172. package/selection/mouseEventHandler.js +1 -1
  173. package/selection/mouseEventHandler.mjs +1 -1
  174. package/selection/range.js +8 -8
  175. package/selection/range.mjs +8 -8
  176. package/selection/selection.js +315 -181
  177. package/selection/selection.mjs +310 -180
  178. package/selection/transformation.js +233 -96
  179. package/selection/transformation.mjs +230 -93
  180. package/selection/utils.js +12 -36
  181. package/selection/utils.mjs +13 -36
  182. package/settings.d.ts +1 -0
  183. package/shortcutContexts/commands/editor/closeAndSave.js +15 -0
  184. package/shortcutContexts/commands/editor/closeAndSave.mjs +10 -0
  185. package/shortcutContexts/commands/editor/closeWithoutSaving.js +13 -0
  186. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  187. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  188. package/shortcutContexts/commands/editor/fastOpen.mjs +11 -0
  189. package/shortcutContexts/commands/editor/index.js +16 -0
  190. package/shortcutContexts/commands/editor/index.mjs +12 -0
  191. package/shortcutContexts/commands/editor/open.js +29 -0
  192. package/shortcutContexts/commands/editor/open.mjs +24 -0
  193. package/shortcutContexts/commands/emptySelectedCells.js +12 -0
  194. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  195. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  196. package/shortcutContexts/commands/extendCellsSelection/down.mjs +10 -0
  197. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +21 -0
  198. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +16 -0
  199. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  200. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  201. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  202. package/shortcutContexts/commands/extendCellsSelection/left.mjs +10 -0
  203. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  204. package/shortcutContexts/commands/extendCellsSelection/right.mjs +10 -0
  205. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  206. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +14 -0
  207. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +22 -0
  208. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +17 -0
  209. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +17 -0
  210. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +12 -0
  211. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +17 -0
  212. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +12 -0
  213. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +40 -0
  214. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +35 -0
  215. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +40 -0
  216. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +35 -0
  217. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +22 -0
  218. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +17 -0
  219. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  220. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +14 -0
  221. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  222. package/shortcutContexts/commands/extendCellsSelection/up.mjs +10 -0
  223. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +21 -0
  224. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +16 -0
  225. package/shortcutContexts/commands/index.js +52 -0
  226. package/shortcutContexts/commands/index.mjs +48 -0
  227. package/shortcutContexts/commands/moveCellSelection/down.js +12 -0
  228. package/shortcutContexts/commands/moveCellSelection/down.mjs +7 -0
  229. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +29 -0
  230. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +24 -0
  231. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  232. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  233. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +13 -0
  234. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  235. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +13 -0
  236. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  237. package/shortcutContexts/commands/moveCellSelection/left.js +11 -0
  238. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  239. package/shortcutContexts/commands/moveCellSelection/right.js +11 -0
  240. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  241. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
  242. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +11 -0
  243. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
  244. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +12 -0
  245. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
  246. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +8 -0
  247. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
  248. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +11 -0
  249. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +36 -0
  250. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +31 -0
  251. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +36 -0
  252. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +31 -0
  253. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
  254. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +11 -0
  255. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
  256. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +13 -0
  257. package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
  258. package/shortcutContexts/commands/moveCellSelection/up.mjs +7 -0
  259. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +29 -0
  260. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +24 -0
  261. package/shortcutContexts/commands/populateSelectedCellsData.js +35 -0
  262. package/shortcutContexts/commands/populateSelectedCellsData.mjs +30 -0
  263. package/shortcutContexts/commands/selectAll.js +11 -0
  264. package/shortcutContexts/commands/selectAll.mjs +6 -0
  265. package/shortcutContexts/constants.js +19 -0
  266. package/shortcutContexts/constants.mjs +12 -0
  267. package/shortcutContexts/editor.js +29 -0
  268. package/shortcutContexts/editor.mjs +25 -0
  269. package/shortcutContexts/grid.js +247 -0
  270. package/shortcutContexts/grid.mjs +243 -0
  271. package/shortcutContexts/index.js +29 -0
  272. package/shortcutContexts/index.mjs +15 -0
  273. package/shortcuts/manager.js +2 -0
  274. package/shortcuts/manager.mjs +2 -0
  275. package/shortcuts/recorder.js +2 -2
  276. package/shortcuts/recorder.mjs +2 -2
  277. package/shortcuts/utils.js +21 -5
  278. package/shortcuts/utils.mjs +20 -4
  279. package/tableView.js +63 -11
  280. package/tableView.mjs +63 -11
  281. package/3rdparty/walkontable/src/selection.js +0 -355
  282. package/3rdparty/walkontable/src/selection.mjs +0 -349
  283. package/selection/highlight/constants.js +0 -16
  284. package/selection/highlight/constants.mjs +0 -6
@@ -32,7 +32,9 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
32
32
  function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
33
33
  import { BasePlugin } from "../base/index.mjs";
34
34
  import { arrayEach } from "../../helpers/array.mjs";
35
+ import { objectEach } from "../../helpers/object.mjs";
35
36
  import CommandExecutor from "../contextMenu/commandExecutor.mjs";
37
+ import { getDocumentOffsetByElement } from "../contextMenu/utils.mjs";
36
38
  import EventManager from "../../eventManager.mjs";
37
39
  import { hasClass } from "../../helpers/dom/element.mjs";
38
40
  import ItemsFactory from "../contextMenu/itemsFactory.mjs";
@@ -47,6 +49,7 @@ Hooks.getSingleton().register('afterDropdownMenuExecute');
47
49
  export var PLUGIN_KEY = 'dropdownMenu';
48
50
  export var PLUGIN_PRIORITY = 230;
49
51
  var BUTTON_CLASS_NAME = 'changeType';
52
+ var SHORTCUTS_GROUP = PLUGIN_KEY;
50
53
 
51
54
  /* eslint-disable jsdoc/require-description-complete-sentence */
52
55
  /**
@@ -176,6 +179,7 @@ export var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
176
179
  if (typeof settings.callback === 'function') {
177
180
  this.commandExecutor.setCommonCallback(settings.callback);
178
181
  }
182
+ this.registerShortcuts();
179
183
  _get(_getPrototypeOf(DropdownMenu.prototype), "enablePlugin", this).call(this);
180
184
  this.callOnPluginsReady(function () {
181
185
  _this2.hot.runHooks('afterDropdownMenuDefaultOptions', predefinedItems);
@@ -239,9 +243,71 @@ export var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
239
243
  if (this.menu) {
240
244
  this.menu.destroy();
241
245
  }
246
+ this.unregisterShortcuts();
242
247
  _get(_getPrototypeOf(DropdownMenu.prototype), "disablePlugin", this).call(this);
243
248
  }
244
249
 
250
+ /**
251
+ * Register shortcuts responsible for toggling dropdown menu.
252
+ *
253
+ * @private
254
+ */
255
+ }, {
256
+ key: "registerShortcuts",
257
+ value: function registerShortcuts() {
258
+ var _this3 = this;
259
+ var context = this.hot.getShortcutManager().getContext('grid');
260
+ var callback = function callback() {
261
+ var _this3$hot$getSelecte = _this3.hot.getSelectedRangeLast(),
262
+ highlight = _this3$hot$getSelecte.highlight;
263
+ if ((highlight.isHeader() && highlight.row === -1 || highlight.isCell()) && highlight.col >= 0) {
264
+ _this3.hot.selectColumns(highlight.col, highlight.col, -1);
265
+ var _this3$hot$getSelecte2 = _this3.hot.getSelectedRangeLast(),
266
+ from = _this3$hot$getSelecte2.from;
267
+ var offset = getDocumentOffsetByElement(_this3.menu.container, _this3.hot.rootDocument);
268
+ var target = _this3.hot.getCell(-1, from.col, true);
269
+ var rect = target.getBoundingClientRect();
270
+ _this3.open({
271
+ left: rect.left + offset.left,
272
+ top: rect.top + target.offsetHeight + offset.top
273
+ }, {
274
+ left: rect.width
275
+ });
276
+ _this3.hot._registerTimeout(function () {
277
+ _this3.menu.selectFirstCell();
278
+ });
279
+ }
280
+ };
281
+ context.addShortcuts([{
282
+ keys: [['Shift', 'Alt', 'ArrowDown'], ['Shift', 'Enter']],
283
+ callback: callback,
284
+ runOnlyIf: function runOnlyIf() {
285
+ var _this3$hot$getSelecte3;
286
+ return ((_this3$hot$getSelecte3 = _this3.hot.getSelectedRangeLast()) === null || _this3$hot$getSelecte3 === void 0 ? void 0 : _this3$hot$getSelecte3.highlight.isHeader()) && !_this3.menu.isOpened();
287
+ },
288
+ group: SHORTCUTS_GROUP
289
+ }, {
290
+ keys: [['Shift', 'Alt', 'ArrowDown']],
291
+ callback: callback,
292
+ runOnlyIf: function runOnlyIf() {
293
+ var _this3$hot$getSelecte4;
294
+ return ((_this3$hot$getSelecte4 = _this3.hot.getSelectedRangeLast()) === null || _this3$hot$getSelecte4 === void 0 ? void 0 : _this3$hot$getSelecte4.highlight.isCell()) && !_this3.menu.isOpened();
295
+ },
296
+ group: SHORTCUTS_GROUP
297
+ }]);
298
+ }
299
+
300
+ /**
301
+ * Unregister shortcuts responsible for toggling dropdown menu.
302
+ *
303
+ * @private
304
+ */
305
+ }, {
306
+ key: "unregisterShortcuts",
307
+ value: function unregisterShortcuts() {
308
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
309
+ }
310
+
245
311
  /**
246
312
  * Registers the DOM listeners.
247
313
  *
@@ -250,33 +316,42 @@ export var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
250
316
  }, {
251
317
  key: "registerEvents",
252
318
  value: function registerEvents() {
253
- var _this3 = this;
319
+ var _this4 = this;
254
320
  this.eventManager.addEventListener(this.hot.rootElement, 'click', function (event) {
255
- return _this3.onTableClick(event);
321
+ return _this4.onTableClick(event);
256
322
  });
257
323
  }
258
324
 
259
325
  /**
260
326
  * Opens menu and re-position it based on the passed coordinates.
261
327
  *
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.
328
+ * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties
329
+ * which contains coordinates relative to the browsers viewport (without included scroll offsets).
330
+ * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`
331
+ * coordinates.
332
+ * @param {{ above: number, below: number, left: number, right: number }} offset An object allows applying
333
+ * the offset to the menu position.
267
334
  * @fires Hooks#beforeDropdownMenuShow
268
335
  * @fires Hooks#afterDropdownMenuShow
269
336
  */
270
337
  }, {
271
338
  key: "open",
272
339
  value: function open(position) {
273
- if (!this.menu) {
340
+ var _this$menu,
341
+ _this5 = this;
342
+ var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
343
+ above: 0,
344
+ below: 0,
345
+ left: 0,
346
+ right: 0
347
+ };
348
+ if ((_this$menu = this.menu) !== null && _this$menu !== void 0 && _this$menu.isOpened()) {
274
349
  return;
275
350
  }
276
351
  this.menu.open();
277
- if (position.width) {
278
- this.menu.setOffset('left', position.width);
279
- }
352
+ objectEach(offset, function (value, key) {
353
+ _this5.menu.setOffset(key, value);
354
+ });
280
355
  this.menu.setPosition(position);
281
356
  }
282
357
 
@@ -286,10 +361,8 @@ export var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
286
361
  }, {
287
362
  key: "close",
288
363
  value: function close() {
289
- if (!this.menu) {
290
- return;
291
- }
292
- this.menu.close();
364
+ var _this$menu2;
365
+ (_this$menu2 = this.menu) === null || _this$menu2 === void 0 ? void 0 : _this$menu2.close();
293
366
  }
294
367
 
295
368
  /**
@@ -361,23 +434,14 @@ export var DropdownMenu = /*#__PURE__*/function (_BasePlugin) {
361
434
  key: "onTableClick",
362
435
  value: function onTableClick(event) {
363
436
  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
- }
437
+ if (hasClass(event.target, BUTTON_CLASS_NAME)) {
438
+ var offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);
375
439
  var rect = event.target.getBoundingClientRect();
376
440
  this.open({
377
- left: rect.left + offsetLeft,
378
- top: rect.top + event.target.offsetHeight + 3 + offsetTop,
379
- width: rect.width,
380
- height: rect.height
441
+ left: rect.left + offset.left,
442
+ top: rect.top + event.target.offsetHeight + 3 + offset.top
443
+ }, {
444
+ left: rect.width
381
445
  });
382
446
  }
383
447
  }
@@ -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
  *
@@ -25,8 +25,8 @@ require("core-js/modules/es.weak-map.js");
25
25
  require("core-js/modules/web.dom-collections.iterator.js");
26
26
  var _element = require("../../helpers/dom/element");
27
27
  var _number = require("../../helpers/number");
28
- var _event = require("../../helpers/dom/event");
29
28
  var _templateLiteralTag = require("../../helpers/templateLiteralTag");
29
+ var _event = require("../../helpers/dom/event");
30
30
  var _console = require("../../helpers/console");
31
31
  var _selection = require("../../selection");
32
32
  var _base = require("../base");
@@ -201,6 +201,12 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
201
201
  this.addHook('beforeOnCellMouseOver', function () {
202
202
  return _this2.onBeforeOnCellMouseOver.apply(_this2, arguments);
203
203
  });
204
+ this.addHook('modifyTransformStart', function () {
205
+ return _this2.onModifyTransformStart.apply(_this2, arguments);
206
+ });
207
+ this.addHook('afterSelection', function () {
208
+ return _this2.updateFocusHighlightPosition();
209
+ });
204
210
  this.addHook('afterGetColumnHeaderRenderers', function (array) {
205
211
  return _this2.onAfterGetColumnHeaderRenderers(array);
206
212
  });
@@ -216,9 +222,18 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
216
222
  this.addHook('beforeCopy', function () {
217
223
  return _this2.onBeforeCopy.apply(_this2, arguments);
218
224
  });
225
+ this.addHook('beforeSelectColumns', function () {
226
+ return _this2.onBeforeSelectColumns.apply(_this2, arguments);
227
+ });
219
228
  this.addHook('afterViewportColumnCalculatorOverride', function () {
220
229
  return _this2.onAfterViewportColumnCalculatorOverride.apply(_this2, arguments);
221
230
  });
231
+ this.hot.columnIndexMapper.addLocalHook('cacheUpdated', function () {
232
+ return _this2.updateFocusHighlightPosition();
233
+ });
234
+ this.hot.rowIndexMapper.addLocalHook('cacheUpdated', function () {
235
+ return _this2.updateFocusHighlightPosition();
236
+ });
222
237
  _get(_getPrototypeOf(NestedHeaders.prototype), "enablePlugin", this).call(this);
223
238
  this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.
224
239
  }
@@ -440,6 +455,34 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
440
455
  return this.hot.getColHeader(visualColumnIndex, headerLevel);
441
456
  }
442
457
 
458
+ /**
459
+ * Updates the selection focus highlight position to point to the nested header root element (TH)
460
+ * even when the logical coordinates point in-between the header.
461
+ *
462
+ * @private
463
+ */
464
+ }, {
465
+ key: "updateFocusHighlightPosition",
466
+ value: function updateFocusHighlightPosition() {
467
+ var _this$hot;
468
+ var selection = (_this$hot = this.hot) === null || _this$hot === void 0 ? void 0 : _this$hot.getSelectedRangeLast();
469
+ if (!selection) {
470
+ return;
471
+ }
472
+ var highlight = selection.highlight;
473
+ var isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
474
+ if (isNestedHeadersRange) {
475
+ var columnIndex = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(highlight.row, highlight.col);
476
+ var focusHighlight = this.hot.selection.highlight.getFocus();
477
+
478
+ // Correct the highlight/focus selection to highlight the correct TH element
479
+ focusHighlight.visualCellRange.highlight.col = columnIndex;
480
+ focusHighlight.visualCellRange.from.col = columnIndex;
481
+ focusHighlight.visualCellRange.to.col = columnIndex;
482
+ focusHighlight.commit();
483
+ }
484
+ }
485
+
443
486
  /**
444
487
  * Allows to control which header DOM element will be used to highlight.
445
488
  *
@@ -456,8 +499,7 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
456
499
  if (!headerNodeData) {
457
500
  return visualColumn;
458
501
  }
459
- var classNames = highlightMeta.classNames,
460
- columnCursor = highlightMeta.columnCursor,
502
+ var columnCursor = highlightMeta.columnCursor,
461
503
  selectionType = highlightMeta.selectionType,
462
504
  selectionWidth = highlightMeta.selectionWidth;
463
505
  var _classPrivateFieldGet4 = _classPrivateFieldGet(this, _stateManager).getHeaderSettings(headerLevel, visualColumn),
@@ -469,8 +511,8 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
469
511
  }
470
512
  } else if (selectionType === _selection.ACTIVE_HEADER_TYPE) {
471
513
  if (colspan > selectionWidth - columnCursor || !isRoot) {
472
- // Reset the class names array so the generated TH element won't be modified.
473
- classNames.length = 0;
514
+ // Prevents adding any CSS class names to the TH element
515
+ return null;
474
516
  }
475
517
  }
476
518
  return visualColumn;
@@ -601,7 +643,7 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
601
643
  }, {
602
644
  key: "onBeforeOnCellMouseOver",
603
645
  value: function onBeforeOnCellMouseOver(event, coords, TD, controller) {
604
- var _this$hot;
646
+ var _this$hot$selection;
605
647
  if (!this.hot.view.isMouseDown()) {
606
648
  return;
607
649
  }
@@ -622,13 +664,93 @@ var NestedHeaders = /*#__PURE__*/function (_BasePlugin) {
622
664
  controller.cell = true;
623
665
  var columnsToSelect = [];
624
666
  if (coords.col < from.col) {
625
- columnsToSelect.push(bottomEndCoords.col, columnIndex);
667
+ columnsToSelect.push(bottomEndCoords.col, columnIndex, coords.row);
626
668
  } else if (coords.col > from.col) {
627
- columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1);
669
+ columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1, coords.row);
628
670
  } else {
629
- columnsToSelect.push(columnIndex, columnIndex + origColspan - 1);
671
+ columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, coords.row);
672
+ }
673
+ (_this$hot$selection = this.hot.selection).selectColumns.apply(_this$hot$selection, columnsToSelect);
674
+ }
675
+
676
+ /**
677
+ * `modifyTransformStart` hook is called every time the keyboard navigation is used.
678
+ *
679
+ * @private
680
+ * @param {object} delta The transformation delta.
681
+ */
682
+ }, {
683
+ key: "onModifyTransformStart",
684
+ value: function onModifyTransformStart(delta) {
685
+ var _this$hot$getSelected = this.hot.getSelectedRangeLast(),
686
+ highlight = _this$hot$getSelected.highlight;
687
+ var nextCoords = this.hot._createCellCoords(highlight.row + delta.row, highlight.col + delta.col);
688
+ var isNestedHeadersRange = nextCoords.isHeader() && nextCoords.col >= 0;
689
+ if (!isNestedHeadersRange) {
690
+ return;
691
+ }
692
+ var visualColumnIndexStart = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(nextCoords.row, nextCoords.col);
693
+ var visualColumnIndexEnd = _classPrivateFieldGet(this, _stateManager).findRightMostColumnIndex(nextCoords.row, nextCoords.col);
694
+ if (delta.col < 0) {
695
+ var nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexStart - 1 : visualColumnIndexEnd;
696
+ var notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);
697
+ if (notHiddenColumnIndex === null) {
698
+ // There are no visible columns anymore, so move the selection out of the table edge. This will
699
+ // be processed by the selection Transformer class as a move selection to the previous row (if autoWrapRow is enabled).
700
+ delta.col = -this.hot.view.countRenderableColumnsInRange(0, highlight.col);
701
+ } else {
702
+ delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, highlight.col) - 1, 1);
703
+ }
704
+ } else if (delta.col > 0) {
705
+ var _nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexEnd + 1 : visualColumnIndexStart;
706
+ var _notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(_nextColumn, 1);
707
+ if (_notHiddenColumnIndex === null) {
708
+ // There are no visible columns anymore, so move the selection out of the table edge. This will
709
+ // be processed by the selection Transformer class as a move selection to the next row (if autoWrapRow is enabled).
710
+ delta.col = this.hot.view.countRenderableColumnsInRange(highlight.col, this.hot.countCols());
711
+ } else {
712
+ delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(highlight.col, _notHiddenColumnIndex) - 1, 1);
713
+ }
714
+ }
715
+ }
716
+
717
+ /**
718
+ * The hook observes the column selection from the Selection API and modifies the column range to
719
+ * ensure that the whole nested column will be covered.
720
+ *
721
+ * @private
722
+ * @param {*} from The coords object where the selection starts.
723
+ * @param {*} to The coords object where the selection ends.
724
+ */
725
+ }, {
726
+ key: "onBeforeSelectColumns",
727
+ value: function onBeforeSelectColumns(from, to) {
728
+ var headerLevel = from.row;
729
+ var startNodeData = this._getHeaderTreeNodeDataByCoords({
730
+ row: headerLevel,
731
+ col: from.col
732
+ });
733
+ var endNodeData = this._getHeaderTreeNodeDataByCoords({
734
+ row: headerLevel,
735
+ col: to.col
736
+ });
737
+ if (to.col < from.col) {
738
+ // Column selection from right to left
739
+ if (startNodeData) {
740
+ from.col = startNodeData.columnIndex + startNodeData.origColspan - 1;
741
+ }
742
+ if (endNodeData) {
743
+ to.col = endNodeData.columnIndex;
744
+ }
745
+ } else if (to.col >= from.col) {
746
+ // Column selection from left to right or a single column selection
747
+ if (startNodeData) {
748
+ from.col = startNodeData.columnIndex;
749
+ }
750
+ if (endNodeData) {
751
+ to.col = endNodeData.columnIndex + endNodeData.origColspan - 1;
752
+ }
630
753
  }
631
- (_this$hot = this.hot).selectColumns.apply(_this$hot, columnsToSelect);
632
754
  }
633
755
 
634
756
  /**