handsontable 0.0.0-next-010265d-20231005 → 0.0.0-next-9379dd1-20231020

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 (414) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +50 -11
  3. package/3rdparty/walkontable/src/cell/coords.mjs +50 -11
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +38 -7
  6. package/3rdparty/walkontable/src/cell/range.mjs +38 -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 +12 -10
  14. package/3rdparty/walkontable/src/event.mjs +12 -10
  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 +13 -2
  20. package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
  21. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
  22. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
  23. package/3rdparty/walkontable/src/overlay/top.js +2 -6
  24. package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
  25. package/3rdparty/walkontable/src/renderer/cells.js +10 -0
  26. package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
  27. package/3rdparty/walkontable/src/renderer/columnHeaders.js +10 -0
  28. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +11 -1
  29. package/3rdparty/walkontable/src/renderer/rowHeaders.js +5 -0
  30. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +5 -0
  31. package/3rdparty/walkontable/src/renderer/rows.js +13 -0
  32. package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
  33. package/3rdparty/walkontable/src/renderer/table.js +9 -0
  34. package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
  35. package/3rdparty/walkontable/src/scroll.js +2 -0
  36. package/3rdparty/walkontable/src/scroll.mjs +2 -0
  37. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
  38. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  39. package/3rdparty/walkontable/src/selection/border/constants.js +16 -0
  40. package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
  41. package/3rdparty/walkontable/src/selection/constants.js +62 -0
  42. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  43. package/3rdparty/walkontable/src/selection/index.js +26 -0
  44. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  45. package/3rdparty/walkontable/src/selection/manager.js +274 -0
  46. package/3rdparty/walkontable/src/selection/manager.mjs +269 -0
  47. package/3rdparty/walkontable/src/selection/scanner.js +270 -0
  48. package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
  49. package/3rdparty/walkontable/src/selection/selection.js +101 -0
  50. package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
  51. package/3rdparty/walkontable/src/settings.js +13 -4
  52. package/3rdparty/walkontable/src/settings.mjs +13 -4
  53. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
  54. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  55. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
  56. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  57. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
  58. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  59. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
  60. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  61. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
  62. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  63. package/3rdparty/walkontable/src/table.js +19 -78
  64. package/3rdparty/walkontable/src/table.mjs +20 -79
  65. package/base.js +2 -2
  66. package/base.mjs +2 -2
  67. package/cellTypes/dateType/dateType.d.ts +3 -3
  68. package/cellTypes/dateType/dateType.js +2 -2
  69. package/cellTypes/dateType/dateType.mjs +2 -2
  70. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  71. package/cellTypes/handsontableType/handsontableType.js +2 -2
  72. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  73. package/cellTypes/index.d.ts +3 -0
  74. package/cellTypes/index.js +4 -0
  75. package/cellTypes/index.mjs +3 -1
  76. package/cellTypes/selectType/index.d.ts +1 -0
  77. package/cellTypes/selectType/index.js +6 -0
  78. package/cellTypes/selectType/index.mjs +1 -0
  79. package/cellTypes/selectType/selectType.d.ts +14 -0
  80. package/cellTypes/selectType/selectType.js +13 -0
  81. package/cellTypes/selectType/selectType.mjs +8 -0
  82. package/core/focusCatcher/focusDetector.js +63 -0
  83. package/core/focusCatcher/focusDetector.mjs +59 -0
  84. package/core/focusCatcher/index.js +142 -0
  85. package/core/focusCatcher/index.mjs +138 -0
  86. package/core/index.js +9 -0
  87. package/core/index.mjs +1 -0
  88. package/core.d.ts +9 -4
  89. package/core.js +285 -327
  90. package/core.mjs +285 -327
  91. package/dataMap/metaManager/metaSchema.js +65 -0
  92. package/dataMap/metaManager/metaSchema.mjs +65 -0
  93. package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
  94. package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
  95. package/dataMap/replaceData.js +5 -0
  96. package/dataMap/replaceData.mjs +5 -0
  97. package/dist/handsontable.css +40 -5
  98. package/dist/handsontable.full.css +40 -5
  99. package/dist/handsontable.full.js +11744 -6945
  100. package/dist/handsontable.full.min.css +4 -4
  101. package/dist/handsontable.full.min.js +141 -141
  102. package/dist/handsontable.js +14036 -9237
  103. package/dist/handsontable.min.css +3 -3
  104. package/dist/handsontable.min.js +21 -21
  105. package/dist/languages/all.js +6 -2
  106. package/dist/languages/all.min.js +1 -1
  107. package/dist/languages/en-US.js +3 -1
  108. package/dist/languages/en-US.min.js +1 -1
  109. package/dist/languages/pl-PL.js +3 -1
  110. package/dist/languages/pl-PL.min.js +1 -1
  111. package/editorManager.js +15 -87
  112. package/editorManager.mjs +16 -87
  113. package/editors/autocompleteEditor/autocompleteEditor.js +53 -2
  114. package/editors/autocompleteEditor/autocompleteEditor.mjs +54 -3
  115. package/editors/dateEditor/dateEditor.js +26 -7
  116. package/editors/dateEditor/dateEditor.mjs +27 -8
  117. package/editors/handsontableEditor/handsontableEditor.js +9 -1
  118. package/editors/handsontableEditor/handsontableEditor.mjs +10 -2
  119. package/editors/textEditor/textEditor.js +19 -27
  120. package/editors/textEditor/textEditor.mjs +22 -30
  121. package/focusManager.d.ts +12 -0
  122. package/focusManager.js +265 -0
  123. package/focusManager.mjs +261 -0
  124. package/helpers/a11y.js +79 -0
  125. package/helpers/a11y.mjs +38 -0
  126. package/helpers/dom/element.js +188 -9
  127. package/helpers/dom/element.mjs +182 -9
  128. package/helpers/mixed.js +1 -1
  129. package/helpers/mixed.mjs +1 -1
  130. package/helpers/number.d.ts +1 -0
  131. package/helpers/number.js +18 -0
  132. package/helpers/number.mjs +17 -0
  133. package/i18n/constants.js +7 -1
  134. package/i18n/constants.mjs +4 -1
  135. package/i18n/languages/en-US.js +3 -1
  136. package/i18n/languages/en-US.mjs +3 -1
  137. package/i18n/languages/pl-PL.js +3 -1
  138. package/i18n/languages/pl-PL.mjs +3 -1
  139. package/languages/all.js +6 -2
  140. package/languages/en-US.js +3 -1
  141. package/languages/en-US.mjs +3 -1
  142. package/languages/index.js +6 -2
  143. package/languages/pl-PL.js +3 -1
  144. package/languages/pl-PL.mjs +3 -1
  145. package/package.json +21 -1
  146. package/pluginHooks.d.ts +12 -1
  147. package/pluginHooks.js +152 -1
  148. package/pluginHooks.mjs +152 -1
  149. package/plugins/collapsibleColumns/collapsibleColumns.js +74 -4
  150. package/plugins/collapsibleColumns/collapsibleColumns.mjs +75 -5
  151. package/plugins/columnSorting/columnSorting.js +43 -0
  152. package/plugins/columnSorting/columnSorting.mjs +44 -3
  153. package/plugins/columnSorting/index.js +3 -1
  154. package/plugins/columnSorting/index.mjs +1 -1
  155. package/plugins/comments/commentEditor.js +1 -0
  156. package/plugins/comments/commentEditor.mjs +1 -0
  157. package/plugins/comments/comments.js +252 -189
  158. package/plugins/comments/comments.mjs +251 -190
  159. package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
  160. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  161. package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
  162. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
  163. package/plugins/comments/contextMenuItem/removeComment.js +38 -0
  164. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  165. package/plugins/contextMenu/commandExecutor.js +2 -3
  166. package/plugins/contextMenu/commandExecutor.mjs +2 -3
  167. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  168. package/plugins/contextMenu/contextMenu.js +75 -36
  169. package/plugins/contextMenu/contextMenu.mjs +74 -35
  170. package/plugins/contextMenu/itemsFactory.js +2 -3
  171. package/plugins/contextMenu/itemsFactory.mjs +3 -4
  172. package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
  173. package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
  174. package/plugins/contextMenu/menu/index.js +9 -0
  175. package/plugins/contextMenu/menu/index.mjs +1 -0
  176. package/plugins/contextMenu/{menu.js → menu/menu.js} +96 -308
  177. package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +97 -309
  178. package/plugins/contextMenu/menu/navigator.js +152 -0
  179. package/plugins/contextMenu/menu/navigator.mjs +148 -0
  180. package/plugins/contextMenu/menu/positioner.js +213 -0
  181. package/plugins/contextMenu/menu/positioner.mjs +209 -0
  182. package/plugins/contextMenu/menu/utils.js +177 -0
  183. package/plugins/contextMenu/menu/utils.mjs +163 -0
  184. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  185. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  186. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  187. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  188. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  189. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  190. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  191. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  192. package/plugins/contextMenu/{predefinedItems.js → predefinedItems/index.js} +14 -14
  193. package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
  194. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  195. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  196. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  197. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  198. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  199. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  200. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  201. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  202. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  203. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  204. package/plugins/contextMenu/utils.js +35 -151
  205. package/plugins/contextMenu/utils.mjs +35 -144
  206. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  207. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  208. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  209. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  210. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  211. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  212. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  213. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  214. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  215. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  216. package/plugins/copyPaste/copyPaste.js +127 -78
  217. package/plugins/copyPaste/copyPaste.mjs +128 -79
  218. package/plugins/customBorders/customBorders.js +23 -20
  219. package/plugins/customBorders/customBorders.mjs +24 -21
  220. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  221. package/plugins/dropdownMenu/dropdownMenu.js +97 -38
  222. package/plugins/dropdownMenu/dropdownMenu.mjs +96 -37
  223. package/plugins/filters/constants.mjs +1 -1
  224. package/plugins/filters/filters.js +31 -14
  225. package/plugins/filters/filters.mjs +31 -14
  226. package/plugins/filters/ui/select.js +3 -3
  227. package/plugins/filters/ui/select.mjs +2 -2
  228. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  229. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  230. package/plugins/manualColumnMove/manualColumnMove.js +3 -1
  231. package/plugins/manualColumnMove/manualColumnMove.mjs +3 -1
  232. package/plugins/mergeCells/mergeCells.js +5 -16
  233. package/plugins/mergeCells/mergeCells.mjs +5 -16
  234. package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
  235. package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
  236. package/plugins/nestedHeaders/nestedHeaders.js +240 -10
  237. package/plugins/nestedHeaders/nestedHeaders.mjs +241 -11
  238. package/plugins/nestedHeaders/stateManager/index.js +102 -3
  239. package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
  240. package/plugins/nestedRows/nestedRows.js +41 -0
  241. package/plugins/nestedRows/nestedRows.mjs +41 -0
  242. package/plugins/nestedRows/ui/headers.js +11 -0
  243. package/plugins/nestedRows/ui/headers.mjs +12 -1
  244. package/renderers/autocompleteRenderer/autocompleteRenderer.js +8 -0
  245. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
  246. package/renderers/baseRenderer/baseRenderer.js +17 -0
  247. package/renderers/baseRenderer/baseRenderer.mjs +18 -1
  248. package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
  249. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  250. package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
  251. package/renderers/dateRenderer/dateRenderer.js +29 -0
  252. package/renderers/dateRenderer/dateRenderer.mjs +24 -0
  253. package/renderers/dateRenderer/index.d.ts +1 -0
  254. package/renderers/dateRenderer/index.js +6 -0
  255. package/renderers/dateRenderer/index.mjs +1 -0
  256. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
  257. package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
  258. package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
  259. package/renderers/handsontableRenderer/index.d.ts +1 -0
  260. package/renderers/handsontableRenderer/index.js +6 -0
  261. package/renderers/handsontableRenderer/index.mjs +1 -0
  262. package/renderers/index.d.ts +9 -0
  263. package/renderers/selectRenderer/index.d.ts +1 -0
  264. package/renderers/selectRenderer/index.js +6 -0
  265. package/renderers/selectRenderer/index.mjs +1 -0
  266. package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
  267. package/renderers/selectRenderer/selectRenderer.js +27 -0
  268. package/renderers/selectRenderer/selectRenderer.mjs +22 -0
  269. package/selection/highlight/highlight.js +256 -71
  270. package/selection/highlight/highlight.mjs +250 -71
  271. package/selection/highlight/types/activeHeader.js +10 -8
  272. package/selection/highlight/types/activeHeader.mjs +10 -8
  273. package/selection/highlight/types/area.js +6 -18
  274. package/selection/highlight/types/area.mjs +6 -18
  275. package/selection/highlight/types/areaLayered.js +31 -0
  276. package/selection/highlight/types/areaLayered.mjs +26 -0
  277. package/selection/highlight/types/column.js +27 -0
  278. package/selection/highlight/types/column.mjs +22 -0
  279. package/selection/highlight/types/customSelection.js +7 -9
  280. package/selection/highlight/types/customSelection.mjs +7 -9
  281. package/selection/highlight/types/fill.js +5 -7
  282. package/selection/highlight/types/fill.mjs +5 -7
  283. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  284. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  285. package/selection/highlight/types/header.js +9 -18
  286. package/selection/highlight/types/header.mjs +9 -18
  287. package/selection/highlight/types/row.js +27 -0
  288. package/selection/highlight/types/row.mjs +22 -0
  289. package/selection/highlight/visualSelection.js +31 -27
  290. package/selection/highlight/visualSelection.mjs +31 -27
  291. package/selection/index.js +4 -7
  292. package/selection/index.mjs +2 -3
  293. package/selection/mouseEventHandler.js +7 -1
  294. package/selection/mouseEventHandler.mjs +7 -1
  295. package/selection/range.js +8 -8
  296. package/selection/range.mjs +8 -8
  297. package/selection/selection.js +321 -152
  298. package/selection/selection.mjs +318 -151
  299. package/selection/transformation.js +232 -90
  300. package/selection/transformation.mjs +232 -90
  301. package/selection/utils.js +15 -21
  302. package/selection/utils.mjs +16 -21
  303. package/settings.d.ts +4 -0
  304. package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
  305. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  306. package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
  307. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  308. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  309. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  310. package/shortcutContexts/commands/editor/index.js +16 -0
  311. package/shortcutContexts/commands/editor/index.mjs +12 -0
  312. package/shortcutContexts/commands/editor/open.js +27 -0
  313. package/shortcutContexts/commands/editor/open.mjs +23 -0
  314. package/shortcutContexts/commands/emptySelectedCells.js +11 -0
  315. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  316. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  317. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  318. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +25 -0
  319. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
  320. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  321. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  322. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  323. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  324. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  325. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  326. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  327. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  328. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
  329. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  330. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
  331. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  332. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
  333. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  334. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
  335. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  336. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
  337. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  338. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
  339. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  340. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  341. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  342. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  343. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  344. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +25 -0
  345. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
  346. package/shortcutContexts/commands/index.js +35 -0
  347. package/shortcutContexts/commands/index.mjs +31 -0
  348. package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
  349. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  350. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +33 -0
  351. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
  352. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  353. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  354. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
  355. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  356. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
  357. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  358. package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
  359. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  360. package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
  361. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  362. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
  363. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  364. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
  365. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  366. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
  367. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  368. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
  369. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  370. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
  371. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  372. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
  373. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  374. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
  375. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  376. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
  377. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  378. package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
  379. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  380. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +33 -0
  381. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
  382. package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
  383. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  384. package/shortcutContexts/commands/scrollToFocusedCell.js +35 -0
  385. package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
  386. package/shortcutContexts/commands/selectAll.js +12 -0
  387. package/shortcutContexts/commands/selectAll.mjs +8 -0
  388. package/shortcutContexts/constants.js +13 -0
  389. package/shortcutContexts/constants.mjs +8 -0
  390. package/shortcutContexts/editor.js +25 -0
  391. package/shortcutContexts/editor.mjs +21 -0
  392. package/shortcutContexts/grid.js +163 -0
  393. package/shortcutContexts/grid.mjs +159 -0
  394. package/shortcutContexts/index.js +24 -0
  395. package/shortcutContexts/index.mjs +11 -0
  396. package/shortcuts/context.js +20 -2
  397. package/shortcuts/context.mjs +20 -3
  398. package/shortcuts/manager.js +25 -7
  399. package/shortcuts/manager.mjs +26 -7
  400. package/shortcuts/recorder.js +3 -3
  401. package/shortcuts/recorder.mjs +3 -3
  402. package/shortcuts/utils.js +19 -5
  403. package/shortcuts/utils.mjs +18 -4
  404. package/tableView.js +111 -13
  405. package/tableView.mjs +112 -14
  406. package/3rdparty/walkontable/src/selection.js +0 -295
  407. package/3rdparty/walkontable/src/selection.mjs +0 -290
  408. package/plugins/contextMenu/predefinedItems.mjs +0 -68
  409. package/plugins/copyPaste/focusableElement.js +0 -186
  410. package/plugins/copyPaste/focusableElement.mjs +0 -180
  411. package/selection/highlight/constants.js +0 -15
  412. package/selection/highlight/constants.mjs +0 -6
  413. package/selection/highlight/types/index.js +0 -35
  414. package/selection/highlight/types/index.mjs +0 -31
@@ -13,7 +13,7 @@ import { rangeEach } from "../../helpers/number.mjs";
13
13
  import { arrayEach, arrayMap, arrayReduce } from "../../helpers/array.mjs";
14
14
  import { isObject } from "../../helpers/object.mjs";
15
15
  import { isUndefined } from "../../helpers/mixed.mjs";
16
- import { SEPARATOR } from "../contextMenu/predefinedItems.mjs";
16
+ import { SEPARATOR } from "../contextMenu/predefinedItems/index.mjs";
17
17
  import Hooks from "../../pluginHooks.mjs";
18
18
  import hideRowItem from "./contextMenuItem/hideRow.mjs";
19
19
  import showRowItem from "./contextMenuItem/showRow.mjs";
@@ -387,7 +387,9 @@ class ManualColumnMove extends _base.BasePlugin {
387
387
  const priv = privatePool.get(this);
388
388
  const firstVisible = this.hot.view.getFirstFullyVisibleColumn();
389
389
  if (this.isFixedColumnsStart(priv.hoveredColumn) && firstVisible > 0) {
390
- this.hot.scrollViewportTo(void 0, this.hot.columnIndexMapper.getNearestNotHiddenIndex(firstVisible - 1, -1));
390
+ this.hot.scrollViewportTo({
391
+ col: this.hot.columnIndexMapper.getNearestNotHiddenIndex(firstVisible - 1, -1)
392
+ });
391
393
  }
392
394
  const wtTable = this.hot.view._wt.wtTable;
393
395
  const scrollableElement = this.hot.view._wt.wtOverlays.scrollableElement;
@@ -381,7 +381,9 @@ export class ManualColumnMove extends BasePlugin {
381
381
  const priv = privatePool.get(this);
382
382
  const firstVisible = this.hot.view.getFirstFullyVisibleColumn();
383
383
  if (this.isFixedColumnsStart(priv.hoveredColumn) && firstVisible > 0) {
384
- this.hot.scrollViewportTo(void 0, this.hot.columnIndexMapper.getNearestNotHiddenIndex(firstVisible - 1, -1));
384
+ this.hot.scrollViewportTo({
385
+ col: this.hot.columnIndexMapper.getNearestNotHiddenIndex(firstVisible - 1, -1)
386
+ });
385
387
  }
386
388
  const wtTable = this.hot.view._wt.wtTable;
387
389
  const scrollableElement = this.hot.view._wt.wtOverlays.scrollableElement;
@@ -188,9 +188,6 @@ 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
- });
194
191
  this.addHook('beforeUndoStackChange', (action, source) => {
195
192
  if (source === 'MergeCells') {
196
193
  return false;
@@ -575,8 +572,11 @@ class MergeCells extends _base.BasePlugin {
575
572
  gridContext.addShortcut({
576
573
  keys: [['Control', 'm']],
577
574
  callback: () => {
578
- this.toggleMerge(this.hot.getSelectedRangeLast());
579
- this.hot.render();
575
+ const range = this.hot.getSelectedRangeLast();
576
+ if (range && !range.isSingleHeader()) {
577
+ this.toggleMerge(range);
578
+ this.hot.render();
579
+ }
580
580
  },
581
581
  runOnlyIf: event => !event.altKey,
582
582
  // right ALT in some systems triggers ALT+CTRL
@@ -1199,16 +1199,5 @@ class MergeCells extends _base.BasePlugin {
1199
1199
  }
1200
1200
  return this.selectionCalculations.getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel);
1201
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
- }
1213
1202
  }
1214
1203
  exports.MergeCells = MergeCells;
@@ -182,9 +182,6 @@ 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
- });
188
185
  this.addHook('beforeUndoStackChange', (action, source) => {
189
186
  if (source === 'MergeCells') {
190
187
  return false;
@@ -569,8 +566,11 @@ export class MergeCells extends BasePlugin {
569
566
  gridContext.addShortcut({
570
567
  keys: [['Control', 'm']],
571
568
  callback: () => {
572
- this.toggleMerge(this.hot.getSelectedRangeLast());
573
- this.hot.render();
569
+ const range = this.hot.getSelectedRangeLast();
570
+ if (range && !range.isSingleHeader()) {
571
+ this.toggleMerge(range);
572
+ this.hot.render();
573
+ }
574
574
  },
575
575
  runOnlyIf: event => !event.altKey,
576
576
  // right ALT in some systems triggers ALT+CTRL
@@ -1193,15 +1193,4 @@ export class MergeCells extends BasePlugin {
1193
1193
  }
1194
1194
  return this.selectionCalculations.getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel);
1195
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
- }
1207
1196
  }
@@ -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';
16
15
  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,6 +113,41 @@ 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: [['Shift', '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
+
116
151
  /**
117
152
  * Sorts the table by chosen columns and orders.
118
153
  *
@@ -262,7 +297,7 @@ class MultiColumnSorting extends _columnSorting.ColumnSorting {
262
297
  if (this.hot.getShortcutManager().isCtrlPressed()) {
263
298
  this.hot.deselectCell();
264
299
  this.hot.selectColumns(coords.col);
265
- this.sort(this.getNextSortConfig(coords.col, APPEND_COLUMN_CONFIG_STRATEGY));
300
+ this.sort(this.getNextSortConfig(coords.col, _columnSorting.APPEND_COLUMN_CONFIG_STRATEGY));
266
301
  } else {
267
302
  this.sort(this.getColumnNextConfig(coords.col));
268
303
  }
@@ -1,4 +1,4 @@
1
- import { ColumnSorting } from "../columnSorting/index.mjs";
1
+ import { APPEND_COLUMN_CONFIG_STRATEGY, 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';
11
10
  const CONFLICTED_PLUGIN_KEY = 'columnSorting';
11
+ const SHORTCUTS_GROUP = PLUGIN_KEY;
12
12
  registerRootComparator(PLUGIN_KEY, rootComparator);
13
13
 
14
14
  /**
@@ -108,6 +108,41 @@ 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: [['Shift', '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
+
111
146
  /**
112
147
  * Sorts the table by chosen columns and orders.
113
148
  *
@@ -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 _event = require("../../helpers/dom/event");
9
8
  var _templateLiteralTag = require("../../helpers/templateLiteralTag");
9
+ var _event = require("../../helpers/dom/event");
10
10
  var _console = require("../../helpers/console");
11
11
  var _selection = require("../../selection");
12
12
  var _base = require("../base");
@@ -75,13 +75,14 @@ const PLUGIN_PRIORITY = 280;
75
75
  exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
76
76
  var _stateManager = /*#__PURE__*/new WeakMap();
77
77
  var _hidingIndexMapObserver = /*#__PURE__*/new WeakMap();
78
+ var _focusInitialCoords = /*#__PURE__*/new WeakMap();
79
+ var _isColumnsSelectionInProgress = /*#__PURE__*/new WeakMap();
78
80
  class NestedHeaders extends _base.BasePlugin {
79
81
  constructor() {
80
82
  super(...arguments);
81
83
  /**
82
84
  * The state manager for the nested headers.
83
85
  *
84
- * @private
85
86
  * @type {StateManager}
86
87
  */
87
88
  _classPrivateFieldInitSpec(this, _stateManager, {
@@ -92,13 +93,30 @@ class NestedHeaders extends _base.BasePlugin {
92
93
  * The instance of the ChangesObservable class that allows track the changes that happens in the
93
94
  * column indexes.
94
95
  *
95
- * @private
96
96
  * @type {ChangesObservable}
97
97
  */
98
98
  _classPrivateFieldInitSpec(this, _hidingIndexMapObserver, {
99
99
  writable: true,
100
100
  value: null
101
101
  });
102
+ /**
103
+ * Holds the coords that points to the place where the column selection starts.
104
+ *
105
+ * @type {number|null}
106
+ */
107
+ _classPrivateFieldInitSpec(this, _focusInitialCoords, {
108
+ writable: true,
109
+ value: null
110
+ });
111
+ /**
112
+ * Determines if there is performed the column selection.
113
+ *
114
+ * @type {boolean}
115
+ */
116
+ _classPrivateFieldInitSpec(this, _isColumnsSelectionInProgress, {
117
+ writable: true,
118
+ value: false
119
+ });
102
120
  /**
103
121
  * Custom helper for getting widths of the nested headers.
104
122
  *
@@ -158,6 +176,19 @@ class NestedHeaders extends _base.BasePlugin {
158
176
  this.addHook('beforeOnCellMouseOver', function () {
159
177
  return _this.onBeforeOnCellMouseOver(...arguments);
160
178
  });
179
+ this.addHook('beforeOnCellMouseUp', function () {
180
+ return _this.onBeforeOnCellMouseUp(...arguments);
181
+ });
182
+ this.addHook('beforeSelectionHighlightSet', function () {
183
+ return _this.onBeforeSelectionHighlightSet(...arguments);
184
+ });
185
+ this.addHook('modifyTransformStart', function () {
186
+ return _this.onModifyTransformStart(...arguments);
187
+ });
188
+ this.addHook('afterSelection', () => this.updateFocusHighlightPosition());
189
+ this.addHook('beforeViewportScrollHorizontally', function () {
190
+ return _this.onBeforeViewportScrollHorizontally(...arguments);
191
+ });
161
192
  this.addHook('afterGetColumnHeaderRenderers', array => this.onAfterGetColumnHeaderRenderers(array));
162
193
  this.addHook('modifyColWidth', function () {
163
194
  return _this.onModifyColWidth(...arguments);
@@ -171,9 +202,17 @@ class NestedHeaders extends _base.BasePlugin {
171
202
  this.addHook('beforeCopy', function () {
172
203
  return _this.onBeforeCopy(...arguments);
173
204
  });
205
+ this.addHook('beforeSelectColumns', function () {
206
+ return _this.onBeforeSelectColumns(...arguments);
207
+ });
174
208
  this.addHook('afterViewportColumnCalculatorOverride', function () {
175
209
  return _this.onAfterViewportColumnCalculatorOverride(...arguments);
176
210
  });
211
+ this.addHook('modifyFocusedElement', function () {
212
+ return _this.onModifyFocusedElement(...arguments);
213
+ });
214
+ this.hot.columnIndexMapper.addLocalHook('cacheUpdated', () => this.updateFocusHighlightPosition());
215
+ this.hot.rowIndexMapper.addLocalHook('cacheUpdated', () => this.updateFocusHighlightPosition());
177
216
  super.enablePlugin();
178
217
  this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.
179
218
  }
@@ -389,6 +428,67 @@ class NestedHeaders extends _base.BasePlugin {
389
428
  return this.hot.getColHeader(visualColumnIndex, headerLevel);
390
429
  }
391
430
 
431
+ /**
432
+ * Updates the selection focus highlight position to point to the nested header root element (TH)
433
+ * even when the logical coordinates point in-between the header.
434
+ *
435
+ * @private
436
+ */
437
+ updateFocusHighlightPosition() {
438
+ var _this$hot;
439
+ const selection = (_this$hot = this.hot) === null || _this$hot === void 0 ? void 0 : _this$hot.getSelectedRangeLast();
440
+ if (!selection) {
441
+ return;
442
+ }
443
+ const {
444
+ highlight
445
+ } = selection;
446
+ const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
447
+ if (isNestedHeadersRange) {
448
+ const columnIndex = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(highlight.row, highlight.col);
449
+ const focusHighlight = this.hot.selection.highlight.getFocus();
450
+
451
+ // Correct the highlight/focus selection to highlight the correct TH element
452
+ focusHighlight.visualCellRange.highlight.col = columnIndex;
453
+ focusHighlight.visualCellRange.from.col = columnIndex;
454
+ focusHighlight.visualCellRange.to.col = columnIndex;
455
+ focusHighlight.commit();
456
+ }
457
+ }
458
+
459
+ /**
460
+ * Allows to control to which column index the viewport will be scrolled. To ensure that the viewport
461
+ * is scrolled to the correct column for the nested header the most left and the most right visual column
462
+ * indexes are used.
463
+ *
464
+ * @private
465
+ * @param {number} visualColumn A visual column index to which the viewport will be scrolled.
466
+ * @returns {number}
467
+ */
468
+ onBeforeViewportScrollHorizontally(visualColumn) {
469
+ const selection = this.hot.getSelectedRangeLast();
470
+ if (!selection) {
471
+ return visualColumn;
472
+ }
473
+ const {
474
+ highlight
475
+ } = selection;
476
+ const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
477
+ if (!isNestedHeadersRange) {
478
+ return visualColumn;
479
+ }
480
+ const firstColumn = this.hot.view.getFirstFullyVisibleColumn();
481
+ const lastColumn = this.hot.view.getLastFullyVisibleColumn();
482
+ const mostLeftColumnIndex = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(highlight.row, highlight.col);
483
+ const mostRightColumnIndex = _classPrivateFieldGet(this, _stateManager).findRightMostColumnIndex(highlight.row, highlight.col);
484
+
485
+ // do not scroll the viewport when the header is wider than the viewport
486
+ if (mostLeftColumnIndex < firstColumn && mostRightColumnIndex > lastColumn) {
487
+ return visualColumn;
488
+ }
489
+ return mostLeftColumnIndex < firstColumn ? mostLeftColumnIndex : mostRightColumnIndex;
490
+ }
491
+
392
492
  /**
393
493
  * Allows to control which header DOM element will be used to highlight.
394
494
  *
@@ -404,7 +504,6 @@ class NestedHeaders extends _base.BasePlugin {
404
504
  return visualColumn;
405
505
  }
406
506
  const {
407
- classNames,
408
507
  columnCursor,
409
508
  selectionType,
410
509
  selectionWidth
@@ -419,8 +518,8 @@ class NestedHeaders extends _base.BasePlugin {
419
518
  }
420
519
  } else if (selectionType === _selection.ACTIVE_HEADER_TYPE) {
421
520
  if (colspan > selectionWidth - columnCursor || !isRoot) {
422
- // Reset the class names array so the generated TH element won't be modified.
423
- classNames.length = 0;
521
+ // Prevents adding any CSS class names to the TH element
522
+ return null;
424
523
  }
425
524
  }
426
525
  return visualColumn;
@@ -508,6 +607,8 @@ class NestedHeaders extends _base.BasePlugin {
508
607
  if (!headerNodeData) {
509
608
  return;
510
609
  }
610
+ _classPrivateFieldSet(this, _focusInitialCoords, coords.clone());
611
+ _classPrivateFieldSet(this, _isColumnsSelectionInProgress, true);
511
612
  const {
512
613
  selection
513
614
  } = this.hot;
@@ -573,14 +674,129 @@ class NestedHeaders extends _base.BasePlugin {
573
674
  controller.column = true;
574
675
  controller.cell = true;
575
676
  const columnsToSelect = [];
677
+ const headerLevel = (0, _number.clamp)(coords.row, -Infinity, -1);
576
678
  if (coords.col < from.col) {
577
- columnsToSelect.push(bottomEndCoords.col, columnIndex);
679
+ columnsToSelect.push(bottomEndCoords.col, columnIndex, headerLevel);
578
680
  } else if (coords.col > from.col) {
579
- columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1);
681
+ columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1, headerLevel);
580
682
  } else {
581
- columnsToSelect.push(columnIndex, columnIndex + origColspan - 1);
683
+ columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, headerLevel);
684
+ }
685
+ this.hot.selection.selectColumns(...columnsToSelect);
686
+ }
687
+
688
+ /**
689
+ * Switches internal flag about selection progress to `false`.
690
+ *
691
+ * @private
692
+ */
693
+ onBeforeOnCellMouseUp() {
694
+ _classPrivateFieldSet(this, _isColumnsSelectionInProgress, false);
695
+ }
696
+
697
+ /**
698
+ * The hook checks and ensures that the focus position that depends on the selected columns
699
+ * range is always positioned within the range.
700
+ *
701
+ * @private
702
+ */
703
+ onBeforeSelectionHighlightSet() {
704
+ const {
705
+ navigableHeaders
706
+ } = this.hot.getSettings();
707
+ if (!this.hot.view.isMouseDown() || !_classPrivateFieldGet(this, _isColumnsSelectionInProgress) || !navigableHeaders) {
708
+ return;
709
+ }
710
+ const selectedRange = this.hot.getSelectedRangeLast();
711
+ const columnStart = selectedRange.getTopStartCorner().col;
712
+ const columnEnd = selectedRange.getBottomEndCorner().col;
713
+ const {
714
+ columnIndex,
715
+ origColspan
716
+ } = _classPrivateFieldGet(this, _stateManager).getHeaderTreeNodeData(_classPrivateFieldGet(this, _focusInitialCoords).row, _classPrivateFieldGet(this, _focusInitialCoords).col);
717
+ selectedRange.setHighlight(_classPrivateFieldGet(this, _focusInitialCoords));
718
+ if (origColspan > selectedRange.getWidth() || columnIndex < columnStart || columnIndex + origColspan - 1 > columnEnd) {
719
+ const headerLevel = _classPrivateFieldGet(this, _stateManager).findTopMostEntireHeaderLevel((0, _number.clamp)(columnStart, columnIndex, columnIndex + origColspan - 1), (0, _number.clamp)(columnEnd, columnIndex, columnIndex + origColspan - 1));
720
+ selectedRange.highlight.row = headerLevel;
721
+ selectedRange.highlight.col = selectedRange.from.col;
722
+ }
723
+ }
724
+
725
+ /**
726
+ * `modifyTransformStart` hook is called every time the keyboard navigation is used.
727
+ *
728
+ * @private
729
+ * @param {object} delta The transformation delta.
730
+ */
731
+ onModifyTransformStart(delta) {
732
+ const {
733
+ highlight
734
+ } = this.hot.getSelectedRangeLast();
735
+ const nextCoords = this.hot._createCellCoords(highlight.row + delta.row, highlight.col + delta.col);
736
+ const isNestedHeadersRange = nextCoords.isHeader() && nextCoords.col >= 0;
737
+ if (!isNestedHeadersRange) {
738
+ return;
739
+ }
740
+ const visualColumnIndexStart = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(nextCoords.row, nextCoords.col);
741
+ const visualColumnIndexEnd = _classPrivateFieldGet(this, _stateManager).findRightMostColumnIndex(nextCoords.row, nextCoords.col);
742
+ if (delta.col < 0) {
743
+ const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexStart - 1 : visualColumnIndexEnd;
744
+ const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);
745
+ if (notHiddenColumnIndex === null) {
746
+ // There are no visible columns anymore, so move the selection out of the table edge. This will
747
+ // be processed by the selection Transformer class as a move selection to the previous row (if autoWrapRow is enabled).
748
+ delta.col = -this.hot.view.countRenderableColumnsInRange(0, highlight.col);
749
+ } else {
750
+ delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, highlight.col) - 1, 1);
751
+ }
752
+ } else if (delta.col > 0) {
753
+ const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexEnd + 1 : visualColumnIndexStart;
754
+ const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, 1);
755
+ if (notHiddenColumnIndex === null) {
756
+ // There are no visible columns anymore, so move the selection out of the table edge. This will
757
+ // be processed by the selection Transformer class as a move selection to the next row (if autoWrapRow is enabled).
758
+ delta.col = this.hot.view.countRenderableColumnsInRange(highlight.col, this.hot.countCols());
759
+ } else {
760
+ delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(highlight.col, notHiddenColumnIndex) - 1, 1);
761
+ }
762
+ }
763
+ }
764
+
765
+ /**
766
+ * The hook observes the column selection from the Selection API and modifies the column range to
767
+ * ensure that the whole nested column will be covered.
768
+ *
769
+ * @private
770
+ * @param {CellCoords} from The coords object where the selection starts.
771
+ * @param {CellCoords} to The coords object where the selection ends.
772
+ */
773
+ onBeforeSelectColumns(from, to) {
774
+ const headerLevel = from.row;
775
+ const startNodeData = this._getHeaderTreeNodeDataByCoords({
776
+ row: headerLevel,
777
+ col: from.col
778
+ });
779
+ const endNodeData = this._getHeaderTreeNodeDataByCoords({
780
+ row: headerLevel,
781
+ col: to.col
782
+ });
783
+ if (to.col < from.col) {
784
+ // Column selection from right to left
785
+ if (startNodeData) {
786
+ from.col = startNodeData.columnIndex + startNodeData.origColspan - 1;
787
+ }
788
+ if (endNodeData) {
789
+ to.col = endNodeData.columnIndex;
790
+ }
791
+ } else if (to.col >= from.col) {
792
+ // Column selection from left to right or a single column selection
793
+ if (startNodeData) {
794
+ from.col = startNodeData.columnIndex;
795
+ }
796
+ if (endNodeData) {
797
+ to.col = endNodeData.columnIndex + endNodeData.origColspan - 1;
798
+ }
582
799
  }
583
- this.hot.selectColumns(...columnsToSelect);
584
800
  }
585
801
 
586
802
  /**
@@ -665,6 +881,20 @@ class NestedHeaders extends _base.BasePlugin {
665
881
  return label;
666
882
  }
667
883
 
884
+ /**
885
+ * `modifyFocusedElement` hook callback.
886
+ *
887
+ * @private
888
+ * @param {number} row Row index.
889
+ * @param {number} column Column index.
890
+ * @returns {HTMLTableCellElement} The `TH` element to be focused.
891
+ */
892
+ onModifyFocusedElement(row, column) {
893
+ if (row < 0) {
894
+ return this.hot.getCell(row, _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(row, column), true);
895
+ }
896
+ }
897
+
668
898
  /**
669
899
  * Updates the plugin state after HoT initialization.
670
900
  *