handsontable 0.0.0-next-08765b9-20230809 → 0.0.0-next-7e1ba35-20230821

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 (299) hide show
  1. package/3rdparty/walkontable/src/{selection/border/border.js → border.js} +12 -7
  2. package/3rdparty/walkontable/src/{selection/border/border.mjs → border.mjs} +12 -7
  3. package/3rdparty/walkontable/src/cell/coords.d.ts +1 -6
  4. package/3rdparty/walkontable/src/cell/coords.js +11 -50
  5. package/3rdparty/walkontable/src/cell/coords.mjs +11 -50
  6. package/3rdparty/walkontable/src/cell/range.d.ts +2 -9
  7. package/3rdparty/walkontable/src/cell/range.js +7 -38
  8. package/3rdparty/walkontable/src/cell/range.mjs +7 -38
  9. package/3rdparty/walkontable/src/core/_base.js +3 -9
  10. package/3rdparty/walkontable/src/core/_base.mjs +3 -9
  11. package/3rdparty/walkontable/src/core/clone.js +2 -2
  12. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  13. package/3rdparty/walkontable/src/core/core.js +2 -3
  14. package/3rdparty/walkontable/src/core/core.mjs +2 -3
  15. package/3rdparty/walkontable/src/event.js +7 -7
  16. package/3rdparty/walkontable/src/event.mjs +7 -7
  17. package/3rdparty/walkontable/src/facade/core.js +2 -2
  18. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  19. package/3rdparty/walkontable/src/index.js +2 -10
  20. package/3rdparty/walkontable/src/index.mjs +2 -2
  21. package/3rdparty/walkontable/src/overlay/_base.js +1 -1
  22. package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
  23. package/3rdparty/walkontable/src/overlay/inlineStart.js +6 -2
  24. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +6 -2
  25. package/3rdparty/walkontable/src/overlay/top.js +6 -2
  26. package/3rdparty/walkontable/src/overlay/top.mjs +6 -2
  27. package/3rdparty/walkontable/src/selection.js +295 -0
  28. package/3rdparty/walkontable/src/selection.mjs +290 -0
  29. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +0 -9
  30. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +0 -9
  31. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +0 -9
  32. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +0 -9
  33. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +0 -9
  34. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +0 -9
  35. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +0 -9
  36. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +0 -9
  37. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +0 -9
  38. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +0 -9
  39. package/3rdparty/walkontable/src/table.js +78 -6
  40. package/3rdparty/walkontable/src/table.mjs +79 -7
  41. package/base.js +2 -2
  42. package/base.mjs +2 -2
  43. package/common.d.ts +1 -1
  44. package/core.d.ts +3 -6
  45. package/core.js +290 -173
  46. package/core.mjs +290 -173
  47. package/dataMap/metaManager/metaSchema.js +0 -41
  48. package/dataMap/metaManager/metaSchema.mjs +0 -41
  49. package/dist/handsontable.css +4 -24
  50. package/dist/handsontable.full.css +4 -24
  51. package/dist/handsontable.full.js +5384 -8679
  52. package/dist/handsontable.full.min.css +3 -4
  53. package/dist/handsontable.full.min.js +960 -29
  54. package/dist/handsontable.js +8132 -11427
  55. package/dist/handsontable.min.css +3 -4
  56. package/dist/handsontable.min.js +61 -24
  57. package/editorManager.js +75 -11
  58. package/editorManager.mjs +74 -11
  59. package/editors/baseEditor/baseEditor.d.ts +1 -0
  60. package/editors/textEditor/textEditor.js +11 -3
  61. package/editors/textEditor/textEditor.mjs +12 -4
  62. package/helpers/mixed.js +1 -1
  63. package/helpers/mixed.mjs +1 -1
  64. package/helpers/number.d.ts +0 -1
  65. package/helpers/number.js +0 -18
  66. package/helpers/number.mjs +0 -17
  67. package/package.json +1 -1
  68. package/pluginHooks.d.ts +1 -7
  69. package/pluginHooks.js +1 -106
  70. package/pluginHooks.mjs +1 -106
  71. package/plugins/collapsibleColumns/collapsibleColumns.js +4 -58
  72. package/plugins/collapsibleColumns/collapsibleColumns.mjs +4 -58
  73. package/plugins/columnSorting/columnSorting.js +0 -38
  74. package/plugins/columnSorting/columnSorting.mjs +2 -38
  75. package/plugins/columnSorting/index.js +1 -3
  76. package/plugins/columnSorting/index.mjs +1 -1
  77. package/plugins/comments/commentEditor.js +0 -1
  78. package/plugins/comments/commentEditor.mjs +0 -1
  79. package/plugins/comments/comments.js +189 -251
  80. package/plugins/comments/comments.mjs +190 -250
  81. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  82. package/plugins/contextMenu/contextMenu.js +30 -72
  83. package/plugins/contextMenu/contextMenu.mjs +31 -73
  84. package/plugins/contextMenu/predefinedItems/alignment.js +0 -7
  85. package/plugins/contextMenu/predefinedItems/alignment.mjs +0 -7
  86. package/plugins/contextMenu/predefinedItems/clearColumn.js +3 -5
  87. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +3 -5
  88. package/plugins/contextMenu/predefinedItems/columnLeft.js +3 -5
  89. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +3 -5
  90. package/plugins/contextMenu/predefinedItems/columnRight.js +3 -5
  91. package/plugins/contextMenu/predefinedItems/columnRight.mjs +3 -5
  92. package/plugins/contextMenu/predefinedItems/readOnly.js +0 -7
  93. package/plugins/contextMenu/predefinedItems/readOnly.mjs +0 -7
  94. package/plugins/contextMenu/predefinedItems/removeColumn.js +5 -7
  95. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +3 -5
  96. package/plugins/contextMenu/predefinedItems/removeRow.js +5 -7
  97. package/plugins/contextMenu/predefinedItems/removeRow.mjs +3 -5
  98. package/plugins/contextMenu/predefinedItems/rowAbove.js +3 -5
  99. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +3 -5
  100. package/plugins/contextMenu/predefinedItems/rowBelow.js +3 -5
  101. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +3 -5
  102. package/plugins/contextMenu/utils.js +16 -28
  103. package/plugins/contextMenu/utils.mjs +15 -27
  104. package/plugins/copyPaste/contextMenuItem/copy.js +0 -7
  105. package/plugins/copyPaste/contextMenuItem/copy.mjs +0 -7
  106. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +1 -9
  107. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +1 -9
  108. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +1 -9
  109. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +1 -9
  110. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +1 -9
  111. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +1 -9
  112. package/plugins/copyPaste/contextMenuItem/cut.js +0 -7
  113. package/plugins/copyPaste/contextMenuItem/cut.mjs +0 -7
  114. package/plugins/copyPaste/copyPaste.js +10 -14
  115. package/plugins/copyPaste/copyPaste.mjs +10 -14
  116. package/plugins/customBorders/customBorders.js +20 -23
  117. package/plugins/customBorders/customBorders.mjs +21 -24
  118. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  119. package/plugins/dropdownMenu/dropdownMenu.js +32 -89
  120. package/plugins/dropdownMenu/dropdownMenu.mjs +32 -89
  121. package/plugins/filters/filters.js +14 -31
  122. package/plugins/filters/filters.mjs +13 -30
  123. package/plugins/manualColumnResize/manualColumnResize.js +6 -0
  124. package/plugins/manualColumnResize/manualColumnResize.mjs +7 -1
  125. package/plugins/mergeCells/mergeCells.js +17 -5
  126. package/plugins/mergeCells/mergeCells.mjs +17 -5
  127. package/plugins/multiColumnSorting/multiColumnSorting.js +2 -37
  128. package/plugins/multiColumnSorting/multiColumnSorting.mjs +2 -37
  129. package/plugins/nestedHeaders/nestedHeaders.js +8 -121
  130. package/plugins/nestedHeaders/nestedHeaders.mjs +8 -121
  131. package/plugins/nestedHeaders/stateManager/index.js +0 -37
  132. package/plugins/nestedHeaders/stateManager/index.mjs +0 -37
  133. package/plugins/nestedRows/nestedRows.js +0 -41
  134. package/plugins/nestedRows/nestedRows.mjs +0 -41
  135. package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
  136. package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
  137. package/selection/highlight/constants.js +15 -0
  138. package/selection/highlight/constants.mjs +6 -0
  139. package/selection/highlight/highlight.js +71 -256
  140. package/selection/highlight/highlight.mjs +71 -250
  141. package/selection/highlight/types/activeHeader.js +8 -10
  142. package/selection/highlight/types/activeHeader.mjs +8 -10
  143. package/selection/highlight/types/area.js +18 -6
  144. package/selection/highlight/types/area.mjs +18 -6
  145. package/selection/highlight/types/{focus.js → cell.js} +7 -5
  146. package/selection/highlight/types/{focus.mjs → cell.mjs} +7 -5
  147. package/selection/highlight/types/customSelection.js +9 -7
  148. package/selection/highlight/types/customSelection.mjs +9 -7
  149. package/selection/highlight/types/fill.js +7 -5
  150. package/selection/highlight/types/fill.mjs +7 -5
  151. package/selection/highlight/types/header.js +18 -9
  152. package/selection/highlight/types/header.mjs +18 -9
  153. package/selection/highlight/types/index.js +35 -0
  154. package/selection/highlight/types/index.mjs +31 -0
  155. package/selection/highlight/visualSelection.js +27 -31
  156. package/selection/highlight/visualSelection.mjs +27 -31
  157. package/selection/index.js +7 -4
  158. package/selection/index.mjs +3 -2
  159. package/selection/mouseEventHandler.js +1 -1
  160. package/selection/mouseEventHandler.mjs +1 -1
  161. package/selection/range.js +8 -8
  162. package/selection/range.mjs +8 -8
  163. package/selection/selection.js +154 -290
  164. package/selection/selection.mjs +153 -287
  165. package/selection/transformation.js +90 -232
  166. package/selection/transformation.mjs +90 -232
  167. package/selection/utils.js +21 -15
  168. package/selection/utils.mjs +21 -16
  169. package/settings.d.ts +0 -2
  170. package/shortcuts/manager.js +0 -2
  171. package/shortcuts/manager.mjs +0 -2
  172. package/shortcuts/recorder.js +2 -2
  173. package/shortcuts/recorder.mjs +2 -2
  174. package/shortcuts/utils.js +5 -19
  175. package/shortcuts/utils.mjs +4 -18
  176. package/tableView.js +13 -67
  177. package/tableView.mjs +13 -67
  178. package/3rdparty/walkontable/src/selection/border/constants.js +0 -16
  179. package/3rdparty/walkontable/src/selection/border/constants.mjs +0 -12
  180. package/3rdparty/walkontable/src/selection/constants.js +0 -62
  181. package/3rdparty/walkontable/src/selection/constants.mjs +0 -51
  182. package/3rdparty/walkontable/src/selection/index.js +0 -26
  183. package/3rdparty/walkontable/src/selection/index.mjs +0 -5
  184. package/3rdparty/walkontable/src/selection/manager.js +0 -259
  185. package/3rdparty/walkontable/src/selection/manager.mjs +0 -254
  186. package/3rdparty/walkontable/src/selection/scanner.js +0 -270
  187. package/3rdparty/walkontable/src/selection/scanner.mjs +0 -267
  188. package/3rdparty/walkontable/src/selection/selection.js +0 -101
  189. package/3rdparty/walkontable/src/selection/selection.mjs +0 -96
  190. package/core/focusCatcher/focusDetector.js +0 -58
  191. package/core/focusCatcher/focusDetector.mjs +0 -54
  192. package/core/focusCatcher/index.js +0 -142
  193. package/core/focusCatcher/index.mjs +0 -138
  194. package/core/index.js +0 -9
  195. package/core/index.mjs +0 -1
  196. package/plugins/comments/contextMenuItem/addEditComment.js +0 -41
  197. package/plugins/comments/contextMenuItem/addEditComment.mjs +0 -35
  198. package/plugins/comments/contextMenuItem/readOnlyComment.js +0 -49
  199. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +0 -43
  200. package/plugins/comments/contextMenuItem/removeComment.js +0 -38
  201. package/plugins/comments/contextMenuItem/removeComment.mjs +0 -32
  202. package/selection/highlight/types/areaLayered.js +0 -31
  203. package/selection/highlight/types/areaLayered.mjs +0 -26
  204. package/selection/highlight/types/column.js +0 -27
  205. package/selection/highlight/types/column.mjs +0 -22
  206. package/selection/highlight/types/row.js +0 -27
  207. package/selection/highlight/types/row.mjs +0 -22
  208. package/shortcutContexts/commands/editor/closeAndSave.js +0 -12
  209. package/shortcutContexts/commands/editor/closeAndSave.mjs +0 -8
  210. package/shortcutContexts/commands/editor/closeWithoutSaving.js +0 -12
  211. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +0 -8
  212. package/shortcutContexts/commands/editor/fastOpen.js +0 -16
  213. package/shortcutContexts/commands/editor/fastOpen.mjs +0 -12
  214. package/shortcutContexts/commands/editor/index.js +0 -16
  215. package/shortcutContexts/commands/editor/index.mjs +0 -12
  216. package/shortcutContexts/commands/editor/open.js +0 -27
  217. package/shortcutContexts/commands/editor/open.mjs +0 -23
  218. package/shortcutContexts/commands/emptySelectedCells.js +0 -11
  219. package/shortcutContexts/commands/emptySelectedCells.mjs +0 -7
  220. package/shortcutContexts/commands/extendCellsSelection/down.js +0 -15
  221. package/shortcutContexts/commands/extendCellsSelection/down.mjs +0 -11
  222. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +0 -21
  223. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +0 -17
  224. package/shortcutContexts/commands/extendCellsSelection/index.js +0 -26
  225. package/shortcutContexts/commands/extendCellsSelection/index.mjs +0 -22
  226. package/shortcutContexts/commands/extendCellsSelection/left.js +0 -15
  227. package/shortcutContexts/commands/extendCellsSelection/left.mjs +0 -11
  228. package/shortcutContexts/commands/extendCellsSelection/right.js +0 -15
  229. package/shortcutContexts/commands/extendCellsSelection/right.mjs +0 -11
  230. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +0 -19
  231. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +0 -15
  232. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +0 -29
  233. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +0 -25
  234. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +0 -19
  235. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +0 -15
  236. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +0 -19
  237. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +0 -15
  238. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +0 -29
  239. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +0 -25
  240. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +0 -29
  241. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +0 -25
  242. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +0 -29
  243. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +0 -25
  244. package/shortcutContexts/commands/extendCellsSelection/toRows.js +0 -19
  245. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +0 -15
  246. package/shortcutContexts/commands/extendCellsSelection/up.js +0 -15
  247. package/shortcutContexts/commands/extendCellsSelection/up.mjs +0 -11
  248. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +0 -21
  249. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +0 -17
  250. package/shortcutContexts/commands/index.js +0 -35
  251. package/shortcutContexts/commands/index.mjs +0 -31
  252. package/shortcutContexts/commands/moveCellSelection/down.js +0 -13
  253. package/shortcutContexts/commands/moveCellSelection/down.mjs +0 -9
  254. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +0 -31
  255. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +0 -27
  256. package/shortcutContexts/commands/moveCellSelection/index.js +0 -28
  257. package/shortcutContexts/commands/moveCellSelection/index.mjs +0 -24
  258. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +0 -12
  259. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +0 -8
  260. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +0 -12
  261. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +0 -8
  262. package/shortcutContexts/commands/moveCellSelection/left.js +0 -10
  263. package/shortcutContexts/commands/moveCellSelection/left.mjs +0 -6
  264. package/shortcutContexts/commands/moveCellSelection/right.js +0 -10
  265. package/shortcutContexts/commands/moveCellSelection/right.mjs +0 -6
  266. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +0 -17
  267. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +0 -13
  268. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +0 -18
  269. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +0 -14
  270. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +0 -14
  271. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +0 -10
  272. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +0 -17
  273. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +0 -13
  274. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +0 -19
  275. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +0 -15
  276. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +0 -21
  277. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +0 -17
  278. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +0 -17
  279. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +0 -13
  280. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +0 -19
  281. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +0 -15
  282. package/shortcutContexts/commands/moveCellSelection/up.js +0 -13
  283. package/shortcutContexts/commands/moveCellSelection/up.mjs +0 -9
  284. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +0 -31
  285. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +0 -27
  286. package/shortcutContexts/commands/populateSelectedCellsData.js +0 -29
  287. package/shortcutContexts/commands/populateSelectedCellsData.mjs +0 -25
  288. package/shortcutContexts/commands/scrollToFocusedCell.js +0 -36
  289. package/shortcutContexts/commands/scrollToFocusedCell.mjs +0 -32
  290. package/shortcutContexts/commands/selectAll.js +0 -10
  291. package/shortcutContexts/commands/selectAll.mjs +0 -6
  292. package/shortcutContexts/constants.js +0 -13
  293. package/shortcutContexts/constants.mjs +0 -8
  294. package/shortcutContexts/editor.js +0 -25
  295. package/shortcutContexts/editor.mjs +0 -21
  296. package/shortcutContexts/grid.js +0 -163
  297. package/shortcutContexts/grid.mjs +0 -159
  298. package/shortcutContexts/index.js +0 -24
  299. package/shortcutContexts/index.mjs +0 -11
@@ -1,6 +1,6 @@
1
1
  import "core-js/modules/es.array.push.js";
2
2
  import { BasePlugin } from "../base/index.mjs";
3
- import { addClass, closest, hasClass, removeClass, outerHeight, isDetached } from "../../helpers/dom/element.mjs";
3
+ import { addClass, closest, hasClass, removeClass, outerHeight, isDetached, overlayContainsElement } from "../../helpers/dom/element.mjs";
4
4
  import EventManager from "../../eventManager.mjs";
5
5
  import { arrayEach } from "../../helpers/array.mjs";
6
6
  import { rangeEach } from "../../helpers/number.mjs";
@@ -213,6 +213,12 @@ export class ManualColumnResize extends BasePlugin {
213
213
  return;
214
214
  }
215
215
  this.currentTH = TH;
216
+ const hotRootElement = this.hot.rootElement;
217
+
218
+ // Handling elements placed only inside columns header of the main instance.
219
+ if (overlayContainsElement('top_inline_start_corner', this.currentTH, hotRootElement) === false && overlayContainsElement('top', this.currentTH, hotRootElement) === false) {
220
+ return;
221
+ }
216
222
  const {
217
223
  _wt: wt
218
224
  } = this.hot.view;
@@ -188,6 +188,9 @@ class MergeCells extends _base.BasePlugin {
188
188
  this.addHook('afterDrawSelection', function () {
189
189
  return _this.onAfterDrawSelection(...arguments);
190
190
  });
191
+ this.addHook('beforeRemoveCellClassNames', function () {
192
+ return _this.onBeforeRemoveCellClassNames(...arguments);
193
+ });
191
194
  this.addHook('beforeUndoStackChange', (action, source) => {
192
195
  if (source === 'MergeCells') {
193
196
  return false;
@@ -494,6 +497,7 @@ class MergeCells extends _base.BasePlugin {
494
497
  (0, _number.rangeEach)(0, currentCollection.rowspan - 1, i => {
495
498
  (0, _number.rangeEach)(0, currentCollection.colspan - 1, j => {
496
499
  this.hot.removeCellMeta(currentCollection.row + i, currentCollection.col + j, 'hidden');
500
+ this.hot.removeCellMeta(currentCollection.row + i, currentCollection.col + j, 'copyable');
497
501
  });
498
502
  });
499
503
  this.hot.removeCellMeta(currentCollection.row, currentCollection.col, 'spanned');
@@ -571,11 +575,8 @@ class MergeCells extends _base.BasePlugin {
571
575
  gridContext.addShortcut({
572
576
  keys: [['Control', 'm']],
573
577
  callback: () => {
574
- const range = this.hot.getSelectedRangeLast();
575
- if (range && !range.isSingleHeader()) {
576
- this.toggleMerge(range);
577
- this.hot.render();
578
- }
578
+ this.toggleMerge(this.hot.getSelectedRangeLast());
579
+ this.hot.render();
579
580
  },
580
581
  runOnlyIf: event => !event.altKey,
581
582
  // right ALT in some systems triggers ALT+CTRL
@@ -1198,5 +1199,16 @@ class MergeCells extends _base.BasePlugin {
1198
1199
  }
1199
1200
  return this.selectionCalculations.getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel);
1200
1201
  }
1202
+
1203
+ /**
1204
+ * `beforeRemoveCellClassNames` hook callback. Used to remove additional class name from all cells in the table.
1205
+ *
1206
+ * @private
1207
+ * @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from
1208
+ * all the cells in the table.
1209
+ */
1210
+ onBeforeRemoveCellClassNames() {
1211
+ return this.selectionCalculations.getSelectedMergedCellClassNameToRemove();
1212
+ }
1201
1213
  }
1202
1214
  exports.MergeCells = MergeCells;
@@ -182,6 +182,9 @@ export class MergeCells extends BasePlugin {
182
182
  this.addHook('afterDrawSelection', function () {
183
183
  return _this.onAfterDrawSelection(...arguments);
184
184
  });
185
+ this.addHook('beforeRemoveCellClassNames', function () {
186
+ return _this.onBeforeRemoveCellClassNames(...arguments);
187
+ });
185
188
  this.addHook('beforeUndoStackChange', (action, source) => {
186
189
  if (source === 'MergeCells') {
187
190
  return false;
@@ -488,6 +491,7 @@ export class MergeCells extends BasePlugin {
488
491
  rangeEach(0, currentCollection.rowspan - 1, i => {
489
492
  rangeEach(0, currentCollection.colspan - 1, j => {
490
493
  this.hot.removeCellMeta(currentCollection.row + i, currentCollection.col + j, 'hidden');
494
+ this.hot.removeCellMeta(currentCollection.row + i, currentCollection.col + j, 'copyable');
491
495
  });
492
496
  });
493
497
  this.hot.removeCellMeta(currentCollection.row, currentCollection.col, 'spanned');
@@ -565,11 +569,8 @@ export class MergeCells extends BasePlugin {
565
569
  gridContext.addShortcut({
566
570
  keys: [['Control', 'm']],
567
571
  callback: () => {
568
- const range = this.hot.getSelectedRangeLast();
569
- if (range && !range.isSingleHeader()) {
570
- this.toggleMerge(range);
571
- this.hot.render();
572
- }
572
+ this.toggleMerge(this.hot.getSelectedRangeLast());
573
+ this.hot.render();
573
574
  },
574
575
  runOnlyIf: event => !event.altKey,
575
576
  // right ALT in some systems triggers ALT+CTRL
@@ -1192,4 +1193,15 @@ export class MergeCells extends BasePlugin {
1192
1193
  }
1193
1194
  return this.selectionCalculations.getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel);
1194
1195
  }
1196
+
1197
+ /**
1198
+ * `beforeRemoveCellClassNames` hook callback. Used to remove additional class name from all cells in the table.
1199
+ *
1200
+ * @private
1201
+ * @returns {string[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from
1202
+ * all the cells in the table.
1203
+ */
1204
+ onBeforeRemoveCellClassNames() {
1205
+ return this.selectionCalculations.getSelectedMergedCellClassNameToRemove();
1206
+ }
1195
1207
  }
@@ -12,8 +12,8 @@ const PLUGIN_KEY = 'multiColumnSorting';
12
12
  exports.PLUGIN_KEY = PLUGIN_KEY;
13
13
  const PLUGIN_PRIORITY = 170;
14
14
  exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
15
+ const APPEND_COLUMN_CONFIG_STRATEGY = 'append';
15
16
  const CONFLICTED_PLUGIN_KEY = 'columnSorting';
16
- const SHORTCUTS_GROUP = PLUGIN_KEY;
17
17
  (0, _sortService.registerRootComparator)(PLUGIN_KEY, _rootComparator.rootComparator);
18
18
 
19
19
  /**
@@ -113,41 +113,6 @@ class MultiColumnSorting extends _columnSorting.ColumnSorting {
113
113
  super.disablePlugin();
114
114
  }
115
115
 
116
- /**
117
- * Register shortcuts responsible for toggling column sorting functionality.
118
- *
119
- * @private
120
- */
121
- registerShortcuts() {
122
- super.registerShortcuts();
123
- this.hot.getShortcutManager().getContext('grid').addShortcut({
124
- keys: [['Control/Meta', 'Enter']],
125
- callback: () => {
126
- const {
127
- highlight
128
- } = this.hot.getSelectedRangeLast();
129
- if (highlight.row === -1 && highlight.col >= 0) {
130
- this.sort(this.getNextSortConfig(highlight.col, _columnSorting.APPEND_COLUMN_CONFIG_STRATEGY));
131
- }
132
- },
133
- runOnlyIf: () => {
134
- var _this$hot$getSelected;
135
- return (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isHeader();
136
- },
137
- group: SHORTCUTS_GROUP
138
- });
139
- }
140
-
141
- /**
142
- * Unregister shortcuts responsible for toggling column sorting functionality.
143
- *
144
- * @private
145
- */
146
- unregisterShortcuts() {
147
- super.unregisterShortcuts();
148
- this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
149
- }
150
-
151
116
  /**
152
117
  * Sorts the table by chosen columns and orders.
153
118
  *
@@ -297,7 +262,7 @@ class MultiColumnSorting extends _columnSorting.ColumnSorting {
297
262
  if (this.hot.getShortcutManager().isCtrlPressed()) {
298
263
  this.hot.deselectCell();
299
264
  this.hot.selectColumns(coords.col);
300
- this.sort(this.getNextSortConfig(coords.col, _columnSorting.APPEND_COLUMN_CONFIG_STRATEGY));
265
+ this.sort(this.getNextSortConfig(coords.col, APPEND_COLUMN_CONFIG_STRATEGY));
301
266
  } else {
302
267
  this.sort(this.getColumnNextConfig(coords.col));
303
268
  }
@@ -1,4 +1,4 @@
1
- import { APPEND_COLUMN_CONFIG_STRATEGY, ColumnSorting } from "../columnSorting/index.mjs";
1
+ import { ColumnSorting } from "../columnSorting/index.mjs";
2
2
  import { registerRootComparator } from "../columnSorting/sortService/index.mjs";
3
3
  import { wasHeaderClickedProperly } from "../columnSorting/utils.mjs";
4
4
  import { addClass, removeClass } from "../../helpers/dom/element.mjs";
@@ -7,8 +7,8 @@ import { warnAboutPluginsConflict } from "./utils.mjs";
7
7
  import { getClassesToAdd, getClassesToRemove } from "./domHelpers.mjs";
8
8
  export const PLUGIN_KEY = 'multiColumnSorting';
9
9
  export const PLUGIN_PRIORITY = 170;
10
+ const APPEND_COLUMN_CONFIG_STRATEGY = 'append';
10
11
  const CONFLICTED_PLUGIN_KEY = 'columnSorting';
11
- const SHORTCUTS_GROUP = PLUGIN_KEY;
12
12
  registerRootComparator(PLUGIN_KEY, rootComparator);
13
13
 
14
14
  /**
@@ -108,41 +108,6 @@ export class MultiColumnSorting extends ColumnSorting {
108
108
  super.disablePlugin();
109
109
  }
110
110
 
111
- /**
112
- * Register shortcuts responsible for toggling column sorting functionality.
113
- *
114
- * @private
115
- */
116
- registerShortcuts() {
117
- super.registerShortcuts();
118
- this.hot.getShortcutManager().getContext('grid').addShortcut({
119
- keys: [['Control/Meta', 'Enter']],
120
- callback: () => {
121
- const {
122
- highlight
123
- } = this.hot.getSelectedRangeLast();
124
- if (highlight.row === -1 && highlight.col >= 0) {
125
- this.sort(this.getNextSortConfig(highlight.col, APPEND_COLUMN_CONFIG_STRATEGY));
126
- }
127
- },
128
- runOnlyIf: () => {
129
- var _this$hot$getSelected;
130
- return (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isHeader();
131
- },
132
- group: SHORTCUTS_GROUP
133
- });
134
- }
135
-
136
- /**
137
- * Unregister shortcuts responsible for toggling column sorting functionality.
138
- *
139
- * @private
140
- */
141
- unregisterShortcuts() {
142
- super.unregisterShortcuts();
143
- this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
144
- }
145
-
146
111
  /**
147
112
  * Sorts the table by chosen columns and orders.
148
113
  *
@@ -5,8 +5,8 @@ exports.__esModule = true;
5
5
  require("core-js/modules/es.array.push.js");
6
6
  var _element = require("../../helpers/dom/element");
7
7
  var _number = require("../../helpers/number");
8
- var _templateLiteralTag = require("../../helpers/templateLiteralTag");
9
8
  var _event = require("../../helpers/dom/event");
9
+ var _templateLiteralTag = require("../../helpers/templateLiteralTag");
10
10
  var _console = require("../../helpers/console");
11
11
  var _selection = require("../../selection");
12
12
  var _base = require("../base");
@@ -158,10 +158,6 @@ class NestedHeaders extends _base.BasePlugin {
158
158
  this.addHook('beforeOnCellMouseOver', function () {
159
159
  return _this.onBeforeOnCellMouseOver(...arguments);
160
160
  });
161
- this.addHook('modifyTransformStart', function () {
162
- return _this.onModifyTransformStart(...arguments);
163
- });
164
- this.addHook('afterSelection', () => this.updateFocusHighlightPosition());
165
161
  this.addHook('afterGetColumnHeaderRenderers', array => this.onAfterGetColumnHeaderRenderers(array));
166
162
  this.addHook('modifyColWidth', function () {
167
163
  return _this.onModifyColWidth(...arguments);
@@ -175,14 +171,9 @@ class NestedHeaders extends _base.BasePlugin {
175
171
  this.addHook('beforeCopy', function () {
176
172
  return _this.onBeforeCopy(...arguments);
177
173
  });
178
- this.addHook('beforeSelectColumns', function () {
179
- return _this.onBeforeSelectColumns(...arguments);
180
- });
181
174
  this.addHook('afterViewportColumnCalculatorOverride', function () {
182
175
  return _this.onAfterViewportColumnCalculatorOverride(...arguments);
183
176
  });
184
- this.hot.columnIndexMapper.addLocalHook('cacheUpdated', () => this.updateFocusHighlightPosition());
185
- this.hot.rowIndexMapper.addLocalHook('cacheUpdated', () => this.updateFocusHighlightPosition());
186
177
  super.enablePlugin();
187
178
  this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.
188
179
  }
@@ -398,34 +389,6 @@ class NestedHeaders extends _base.BasePlugin {
398
389
  return this.hot.getColHeader(visualColumnIndex, headerLevel);
399
390
  }
400
391
 
401
- /**
402
- * Updates the selection focus highlight position to point to the nested header root element (TH)
403
- * even when the logical coordinates point in-between the header.
404
- *
405
- * @private
406
- */
407
- updateFocusHighlightPosition() {
408
- var _this$hot;
409
- const selection = (_this$hot = this.hot) === null || _this$hot === void 0 ? void 0 : _this$hot.getSelectedRangeLast();
410
- if (!selection) {
411
- return;
412
- }
413
- const {
414
- highlight
415
- } = selection;
416
- const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
417
- if (isNestedHeadersRange) {
418
- const columnIndex = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(highlight.row, highlight.col);
419
- const focusHighlight = this.hot.selection.highlight.getFocus();
420
-
421
- // Correct the highlight/focus selection to highlight the correct TH element
422
- focusHighlight.visualCellRange.highlight.col = columnIndex;
423
- focusHighlight.visualCellRange.from.col = columnIndex;
424
- focusHighlight.visualCellRange.to.col = columnIndex;
425
- focusHighlight.commit();
426
- }
427
- }
428
-
429
392
  /**
430
393
  * Allows to control which header DOM element will be used to highlight.
431
394
  *
@@ -441,6 +404,7 @@ class NestedHeaders extends _base.BasePlugin {
441
404
  return visualColumn;
442
405
  }
443
406
  const {
407
+ classNames,
444
408
  columnCursor,
445
409
  selectionType,
446
410
  selectionWidth
@@ -455,8 +419,8 @@ class NestedHeaders extends _base.BasePlugin {
455
419
  }
456
420
  } else if (selectionType === _selection.ACTIVE_HEADER_TYPE) {
457
421
  if (colspan > selectionWidth - columnCursor || !isRoot) {
458
- // Prevents adding any CSS class names to the TH element
459
- return null;
422
+ // Reset the class names array so the generated TH element won't be modified.
423
+ classNames.length = 0;
460
424
  }
461
425
  }
462
426
  return visualColumn;
@@ -610,90 +574,13 @@ class NestedHeaders extends _base.BasePlugin {
610
574
  controller.cell = true;
611
575
  const columnsToSelect = [];
612
576
  if (coords.col < from.col) {
613
- columnsToSelect.push(bottomEndCoords.col, columnIndex, coords.row);
577
+ columnsToSelect.push(bottomEndCoords.col, columnIndex);
614
578
  } else if (coords.col > from.col) {
615
- columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1, coords.row);
579
+ columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1);
616
580
  } else {
617
- columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, coords.row);
618
- }
619
- this.hot.selection.selectColumns(...columnsToSelect);
620
- }
621
-
622
- /**
623
- * `modifyTransformStart` hook is called every time the keyboard navigation is used.
624
- *
625
- * @private
626
- * @param {object} delta The transformation delta.
627
- */
628
- onModifyTransformStart(delta) {
629
- const {
630
- highlight
631
- } = this.hot.getSelectedRangeLast();
632
- const nextCoords = this.hot._createCellCoords(highlight.row + delta.row, highlight.col + delta.col);
633
- const isNestedHeadersRange = nextCoords.isHeader() && nextCoords.col >= 0;
634
- if (!isNestedHeadersRange) {
635
- return;
636
- }
637
- const visualColumnIndexStart = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(nextCoords.row, nextCoords.col);
638
- const visualColumnIndexEnd = _classPrivateFieldGet(this, _stateManager).findRightMostColumnIndex(nextCoords.row, nextCoords.col);
639
- if (delta.col < 0) {
640
- const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexStart - 1 : visualColumnIndexEnd;
641
- const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);
642
- if (notHiddenColumnIndex === null) {
643
- // There are no visible columns anymore, so move the selection out of the table edge. This will
644
- // be processed by the selection Transformer class as a move selection to the previous row (if autoWrapRow is enabled).
645
- delta.col = -this.hot.view.countRenderableColumnsInRange(0, highlight.col);
646
- } else {
647
- delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, highlight.col) - 1, 1);
648
- }
649
- } else if (delta.col > 0) {
650
- const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexEnd + 1 : visualColumnIndexStart;
651
- const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, 1);
652
- if (notHiddenColumnIndex === null) {
653
- // There are no visible columns anymore, so move the selection out of the table edge. This will
654
- // be processed by the selection Transformer class as a move selection to the next row (if autoWrapRow is enabled).
655
- delta.col = this.hot.view.countRenderableColumnsInRange(highlight.col, this.hot.countCols());
656
- } else {
657
- delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(highlight.col, notHiddenColumnIndex) - 1, 1);
658
- }
659
- }
660
- }
661
-
662
- /**
663
- * The hook observes the column selection from the Selection API and modifies the column range to
664
- * ensure that the whole nested column will be covered.
665
- *
666
- * @private
667
- * @param {*} from The coords object where the selection starts.
668
- * @param {*} to The coords object where the selection ends.
669
- */
670
- onBeforeSelectColumns(from, to) {
671
- const headerLevel = from.row;
672
- const startNodeData = this._getHeaderTreeNodeDataByCoords({
673
- row: headerLevel,
674
- col: from.col
675
- });
676
- const endNodeData = this._getHeaderTreeNodeDataByCoords({
677
- row: headerLevel,
678
- col: to.col
679
- });
680
- if (to.col < from.col) {
681
- // Column selection from right to left
682
- if (startNodeData) {
683
- from.col = startNodeData.columnIndex + startNodeData.origColspan - 1;
684
- }
685
- if (endNodeData) {
686
- to.col = endNodeData.columnIndex;
687
- }
688
- } else if (to.col >= from.col) {
689
- // Column selection from left to right or a single column selection
690
- if (startNodeData) {
691
- from.col = startNodeData.columnIndex;
692
- }
693
- if (endNodeData) {
694
- to.col = endNodeData.columnIndex + endNodeData.origColspan - 1;
695
- }
581
+ columnsToSelect.push(columnIndex, columnIndex + origColspan - 1);
696
582
  }
583
+ this.hot.selectColumns(...columnsToSelect);
697
584
  }
698
585
 
699
586
  /**
@@ -12,8 +12,8 @@ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!priva
12
12
  function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
13
13
  import { addClass, removeClass } from "../../helpers/dom/element.mjs";
14
14
  import { isNumeric } from "../../helpers/number.mjs";
15
- import { toSingleLine } from "../../helpers/templateLiteralTag.mjs";
16
15
  import { isLeftClick, isRightClick } from "../../helpers/dom/event.mjs";
16
+ import { toSingleLine } from "../../helpers/templateLiteralTag.mjs";
17
17
  import { warn } from "../../helpers/console.mjs";
18
18
  import { ACTIVE_HEADER_TYPE, HEADER_TYPE } from "../../selection/index.mjs";
19
19
  import { BasePlugin } from "../base/index.mjs";
@@ -152,10 +152,6 @@ export class NestedHeaders extends BasePlugin {
152
152
  this.addHook('beforeOnCellMouseOver', function () {
153
153
  return _this.onBeforeOnCellMouseOver(...arguments);
154
154
  });
155
- this.addHook('modifyTransformStart', function () {
156
- return _this.onModifyTransformStart(...arguments);
157
- });
158
- this.addHook('afterSelection', () => this.updateFocusHighlightPosition());
159
155
  this.addHook('afterGetColumnHeaderRenderers', array => this.onAfterGetColumnHeaderRenderers(array));
160
156
  this.addHook('modifyColWidth', function () {
161
157
  return _this.onModifyColWidth(...arguments);
@@ -169,14 +165,9 @@ export class NestedHeaders extends BasePlugin {
169
165
  this.addHook('beforeCopy', function () {
170
166
  return _this.onBeforeCopy(...arguments);
171
167
  });
172
- this.addHook('beforeSelectColumns', function () {
173
- return _this.onBeforeSelectColumns(...arguments);
174
- });
175
168
  this.addHook('afterViewportColumnCalculatorOverride', function () {
176
169
  return _this.onAfterViewportColumnCalculatorOverride(...arguments);
177
170
  });
178
- this.hot.columnIndexMapper.addLocalHook('cacheUpdated', () => this.updateFocusHighlightPosition());
179
- this.hot.rowIndexMapper.addLocalHook('cacheUpdated', () => this.updateFocusHighlightPosition());
180
171
  super.enablePlugin();
181
172
  this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.
182
173
  }
@@ -392,34 +383,6 @@ export class NestedHeaders extends BasePlugin {
392
383
  return this.hot.getColHeader(visualColumnIndex, headerLevel);
393
384
  }
394
385
 
395
- /**
396
- * Updates the selection focus highlight position to point to the nested header root element (TH)
397
- * even when the logical coordinates point in-between the header.
398
- *
399
- * @private
400
- */
401
- updateFocusHighlightPosition() {
402
- var _this$hot;
403
- const selection = (_this$hot = this.hot) === null || _this$hot === void 0 ? void 0 : _this$hot.getSelectedRangeLast();
404
- if (!selection) {
405
- return;
406
- }
407
- const {
408
- highlight
409
- } = selection;
410
- const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
411
- if (isNestedHeadersRange) {
412
- const columnIndex = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(highlight.row, highlight.col);
413
- const focusHighlight = this.hot.selection.highlight.getFocus();
414
-
415
- // Correct the highlight/focus selection to highlight the correct TH element
416
- focusHighlight.visualCellRange.highlight.col = columnIndex;
417
- focusHighlight.visualCellRange.from.col = columnIndex;
418
- focusHighlight.visualCellRange.to.col = columnIndex;
419
- focusHighlight.commit();
420
- }
421
- }
422
-
423
386
  /**
424
387
  * Allows to control which header DOM element will be used to highlight.
425
388
  *
@@ -435,6 +398,7 @@ export class NestedHeaders extends BasePlugin {
435
398
  return visualColumn;
436
399
  }
437
400
  const {
401
+ classNames,
438
402
  columnCursor,
439
403
  selectionType,
440
404
  selectionWidth
@@ -449,8 +413,8 @@ export class NestedHeaders extends BasePlugin {
449
413
  }
450
414
  } else if (selectionType === ACTIVE_HEADER_TYPE) {
451
415
  if (colspan > selectionWidth - columnCursor || !isRoot) {
452
- // Prevents adding any CSS class names to the TH element
453
- return null;
416
+ // Reset the class names array so the generated TH element won't be modified.
417
+ classNames.length = 0;
454
418
  }
455
419
  }
456
420
  return visualColumn;
@@ -604,90 +568,13 @@ export class NestedHeaders extends BasePlugin {
604
568
  controller.cell = true;
605
569
  const columnsToSelect = [];
606
570
  if (coords.col < from.col) {
607
- columnsToSelect.push(bottomEndCoords.col, columnIndex, coords.row);
571
+ columnsToSelect.push(bottomEndCoords.col, columnIndex);
608
572
  } else if (coords.col > from.col) {
609
- columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1, coords.row);
573
+ columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1);
610
574
  } else {
611
- columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, coords.row);
612
- }
613
- this.hot.selection.selectColumns(...columnsToSelect);
614
- }
615
-
616
- /**
617
- * `modifyTransformStart` hook is called every time the keyboard navigation is used.
618
- *
619
- * @private
620
- * @param {object} delta The transformation delta.
621
- */
622
- onModifyTransformStart(delta) {
623
- const {
624
- highlight
625
- } = this.hot.getSelectedRangeLast();
626
- const nextCoords = this.hot._createCellCoords(highlight.row + delta.row, highlight.col + delta.col);
627
- const isNestedHeadersRange = nextCoords.isHeader() && nextCoords.col >= 0;
628
- if (!isNestedHeadersRange) {
629
- return;
630
- }
631
- const visualColumnIndexStart = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(nextCoords.row, nextCoords.col);
632
- const visualColumnIndexEnd = _classPrivateFieldGet(this, _stateManager).findRightMostColumnIndex(nextCoords.row, nextCoords.col);
633
- if (delta.col < 0) {
634
- const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexStart - 1 : visualColumnIndexEnd;
635
- const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);
636
- if (notHiddenColumnIndex === null) {
637
- // There are no visible columns anymore, so move the selection out of the table edge. This will
638
- // be processed by the selection Transformer class as a move selection to the previous row (if autoWrapRow is enabled).
639
- delta.col = -this.hot.view.countRenderableColumnsInRange(0, highlight.col);
640
- } else {
641
- delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, highlight.col) - 1, 1);
642
- }
643
- } else if (delta.col > 0) {
644
- const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexEnd + 1 : visualColumnIndexStart;
645
- const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, 1);
646
- if (notHiddenColumnIndex === null) {
647
- // There are no visible columns anymore, so move the selection out of the table edge. This will
648
- // be processed by the selection Transformer class as a move selection to the next row (if autoWrapRow is enabled).
649
- delta.col = this.hot.view.countRenderableColumnsInRange(highlight.col, this.hot.countCols());
650
- } else {
651
- delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(highlight.col, notHiddenColumnIndex) - 1, 1);
652
- }
653
- }
654
- }
655
-
656
- /**
657
- * The hook observes the column selection from the Selection API and modifies the column range to
658
- * ensure that the whole nested column will be covered.
659
- *
660
- * @private
661
- * @param {*} from The coords object where the selection starts.
662
- * @param {*} to The coords object where the selection ends.
663
- */
664
- onBeforeSelectColumns(from, to) {
665
- const headerLevel = from.row;
666
- const startNodeData = this._getHeaderTreeNodeDataByCoords({
667
- row: headerLevel,
668
- col: from.col
669
- });
670
- const endNodeData = this._getHeaderTreeNodeDataByCoords({
671
- row: headerLevel,
672
- col: to.col
673
- });
674
- if (to.col < from.col) {
675
- // Column selection from right to left
676
- if (startNodeData) {
677
- from.col = startNodeData.columnIndex + startNodeData.origColspan - 1;
678
- }
679
- if (endNodeData) {
680
- to.col = endNodeData.columnIndex;
681
- }
682
- } else if (to.col >= from.col) {
683
- // Column selection from left to right or a single column selection
684
- if (startNodeData) {
685
- from.col = startNodeData.columnIndex;
686
- }
687
- if (endNodeData) {
688
- to.col = endNodeData.columnIndex + endNodeData.origColspan - 1;
689
- }
575
+ columnsToSelect.push(columnIndex, columnIndex + origColspan - 1);
690
576
  }
577
+ this.hot.selectColumns(...columnsToSelect);
691
578
  }
692
579
 
693
580
  /**
@@ -367,43 +367,6 @@ class StateManager {
367
367
  return stepBackColumn;
368
368
  }
369
369
 
370
- /**
371
- * The method is helpful in cases where the column index targets in-between currently
372
- * collapsed column. In that case, the method returns the right-most column index
373
- * where the nested header ends.
374
- *
375
- * @param {number} headerLevel Header level (there is support for negative and positive values).
376
- * @param {number} columnIndex A visual column index.
377
- * @returns {number}
378
- */
379
- findRightMostColumnIndex(headerLevel, columnIndex) {
380
- var _this$getHeaderSettin3;
381
- const {
382
- isRoot,
383
- origColspan
384
- } = (_this$getHeaderSettin3 = this.getHeaderSettings(headerLevel, columnIndex)) !== null && _this$getHeaderSettin3 !== void 0 ? _this$getHeaderSettin3 : {
385
- isRoot: true,
386
- origColspan: 1
387
- };
388
- if (isRoot) {
389
- return columnIndex + origColspan - 1;
390
- }
391
- let stepForthColumn = columnIndex + 1;
392
- while (stepForthColumn < this.getColumnsCount()) {
393
- var _this$getHeaderSettin4;
394
- const {
395
- isRoot: isRootNode
396
- } = (_this$getHeaderSettin4 = this.getHeaderSettings(headerLevel, stepForthColumn)) !== null && _this$getHeaderSettin4 !== void 0 ? _this$getHeaderSettin4 : {
397
- isRoot: true
398
- };
399
- if (isRootNode) {
400
- break;
401
- }
402
- stepForthColumn += 1;
403
- }
404
- return stepForthColumn - 1;
405
- }
406
-
407
370
  /**
408
371
  * Gets a total number of headers levels.
409
372
  *