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

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

Potentially problematic release.


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

Files changed (284) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +61 -12
  3. package/3rdparty/walkontable/src/cell/coords.mjs +61 -12
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +44 -7
  6. package/3rdparty/walkontable/src/cell/range.mjs +44 -7
  7. package/3rdparty/walkontable/src/core/_base.js +9 -3
  8. package/3rdparty/walkontable/src/core/_base.mjs +9 -3
  9. package/3rdparty/walkontable/src/core/clone.js +2 -2
  10. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  11. package/3rdparty/walkontable/src/core/core.js +3 -2
  12. package/3rdparty/walkontable/src/core/core.mjs +3 -2
  13. package/3rdparty/walkontable/src/event.js +7 -7
  14. package/3rdparty/walkontable/src/event.mjs +7 -7
  15. package/3rdparty/walkontable/src/facade/core.js +2 -2
  16. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  17. package/3rdparty/walkontable/src/index.js +10 -2
  18. package/3rdparty/walkontable/src/index.mjs +2 -2
  19. package/3rdparty/walkontable/src/overlay/_base.js +1 -1
  20. package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
  21. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -4
  22. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -4
  23. package/3rdparty/walkontable/src/overlay/top.js +2 -4
  24. package/3rdparty/walkontable/src/overlay/top.mjs +2 -4
  25. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
  26. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  27. package/3rdparty/walkontable/src/selection/border/constants.js +18 -0
  28. package/3rdparty/walkontable/src/selection/border/constants.mjs +13 -0
  29. package/3rdparty/walkontable/src/selection/constants.js +63 -0
  30. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  31. package/3rdparty/walkontable/src/selection/index.js +30 -0
  32. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  33. package/3rdparty/walkontable/src/selection/manager.js +329 -0
  34. package/3rdparty/walkontable/src/selection/manager.mjs +323 -0
  35. package/3rdparty/walkontable/src/selection/scanner.js +364 -0
  36. package/3rdparty/walkontable/src/selection/scanner.mjs +360 -0
  37. package/3rdparty/walkontable/src/selection/selection.js +133 -0
  38. package/3rdparty/walkontable/src/selection/selection.mjs +127 -0
  39. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
  40. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  41. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
  42. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  43. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
  44. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  45. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
  46. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  47. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
  48. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  49. package/3rdparty/walkontable/src/table.js +7 -79
  50. package/3rdparty/walkontable/src/table.mjs +8 -80
  51. package/CHANGELOG.md +0 -31
  52. package/base.js +2 -2
  53. package/base.mjs +2 -2
  54. package/core.d.ts +5 -3
  55. package/core.js +127 -309
  56. package/core.mjs +127 -309
  57. package/dataMap/metaManager/metaSchema.js +19 -0
  58. package/dataMap/metaManager/metaSchema.mjs +19 -0
  59. package/dist/handsontable.css +8 -3
  60. package/dist/handsontable.full.css +8 -3
  61. package/dist/handsontable.full.js +15283 -12109
  62. package/dist/handsontable.full.min.css +3 -3
  63. package/dist/handsontable.full.min.js +115 -115
  64. package/dist/handsontable.js +23364 -20190
  65. package/dist/handsontable.min.css +3 -3
  66. package/dist/handsontable.min.js +4 -4
  67. package/editorManager.js +21 -94
  68. package/editorManager.mjs +26 -98
  69. package/editors/textEditor/textEditor.js +3 -11
  70. package/editors/textEditor/textEditor.mjs +4 -12
  71. package/helpers/mixed.js +2 -2
  72. package/helpers/mixed.mjs +2 -2
  73. package/helpers/number.d.ts +1 -0
  74. package/helpers/number.js +18 -0
  75. package/helpers/number.mjs +17 -0
  76. package/package.json +1 -1
  77. package/pluginHooks.d.ts +5 -1
  78. package/pluginHooks.js +89 -1
  79. package/pluginHooks.mjs +89 -1
  80. package/plugins/collapsibleColumns/collapsibleColumns.js +81 -24
  81. package/plugins/collapsibleColumns/collapsibleColumns.mjs +81 -24
  82. package/plugins/columnSorting/columnSorting.js +50 -8
  83. package/plugins/columnSorting/columnSorting.mjs +49 -9
  84. package/plugins/columnSorting/index.js +4 -2
  85. package/plugins/columnSorting/index.mjs +1 -1
  86. package/plugins/comments/commentEditor.js +1 -0
  87. package/plugins/comments/commentEditor.mjs +1 -0
  88. package/plugins/comments/comments.js +263 -224
  89. package/plugins/comments/comments.mjs +271 -234
  90. package/plugins/comments/contextMenuItem/addEditComment.js +51 -0
  91. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  92. package/plugins/comments/contextMenuItem/readOnlyComment.js +63 -0
  93. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +55 -0
  94. package/plugins/comments/contextMenuItem/removeComment.js +48 -0
  95. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  96. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  97. package/plugins/contextMenu/contextMenu.js +80 -29
  98. package/plugins/contextMenu/contextMenu.mjs +81 -30
  99. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  100. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  101. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  102. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  103. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  104. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  105. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  106. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  107. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  108. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  109. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  110. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  111. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  112. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  113. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  114. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  115. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  116. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  117. package/plugins/contextMenu/utils.js +25 -16
  118. package/plugins/contextMenu/utils.mjs +24 -15
  119. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  120. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  121. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  122. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  123. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  124. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  125. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  126. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  127. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  128. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  129. package/plugins/copyPaste/copyPaste.js +6 -2
  130. package/plugins/copyPaste/copyPaste.mjs +6 -2
  131. package/plugins/customBorders/customBorders.js +25 -53
  132. package/plugins/customBorders/customBorders.mjs +26 -54
  133. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  134. package/plugins/dropdownMenu/dropdownMenu.js +94 -30
  135. package/plugins/dropdownMenu/dropdownMenu.mjs +94 -30
  136. package/plugins/mergeCells/mergeCells.js +5 -18
  137. package/plugins/mergeCells/mergeCells.mjs +5 -18
  138. package/plugins/multiColumnSorting/multiColumnSorting.js +42 -3
  139. package/plugins/multiColumnSorting/multiColumnSorting.mjs +42 -3
  140. package/plugins/nestedHeaders/nestedHeaders.js +132 -10
  141. package/plugins/nestedHeaders/nestedHeaders.mjs +132 -10
  142. package/plugins/nestedHeaders/stateManager/index.js +37 -0
  143. package/plugins/nestedHeaders/stateManager/index.mjs +37 -0
  144. package/plugins/nestedRows/nestedRows.js +52 -7
  145. package/plugins/nestedRows/nestedRows.mjs +52 -7
  146. package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
  147. package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
  148. package/selection/highlight/highlight.js +312 -89
  149. package/selection/highlight/highlight.mjs +302 -85
  150. package/selection/highlight/types/activeHeader.js +10 -9
  151. package/selection/highlight/types/activeHeader.mjs +10 -8
  152. package/selection/highlight/types/area.js +12 -27
  153. package/selection/highlight/types/area.mjs +16 -30
  154. package/selection/highlight/types/areaLayered.js +54 -0
  155. package/selection/highlight/types/areaLayered.mjs +49 -0
  156. package/selection/highlight/types/column.js +50 -0
  157. package/selection/highlight/types/column.mjs +45 -0
  158. package/selection/highlight/types/customSelection.js +7 -10
  159. package/selection/highlight/types/customSelection.mjs +7 -9
  160. package/selection/highlight/types/fill.js +5 -8
  161. package/selection/highlight/types/fill.mjs +5 -7
  162. package/selection/highlight/types/{cell.js → focus.js} +5 -8
  163. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  164. package/selection/highlight/types/header.js +10 -20
  165. package/selection/highlight/types/header.mjs +10 -19
  166. package/selection/highlight/types/{index.js → row.js} +27 -31
  167. package/selection/highlight/types/{index.mjs → row.mjs} +24 -29
  168. package/selection/highlight/visualSelection.js +31 -27
  169. package/selection/highlight/visualSelection.mjs +31 -27
  170. package/selection/index.js +4 -7
  171. package/selection/index.mjs +2 -3
  172. package/selection/mouseEventHandler.js +1 -1
  173. package/selection/mouseEventHandler.mjs +1 -1
  174. package/selection/range.js +8 -8
  175. package/selection/range.mjs +8 -8
  176. package/selection/selection.js +315 -181
  177. package/selection/selection.mjs +310 -180
  178. package/selection/transformation.js +233 -96
  179. package/selection/transformation.mjs +230 -93
  180. package/selection/utils.js +12 -36
  181. package/selection/utils.mjs +13 -36
  182. package/settings.d.ts +1 -0
  183. package/shortcutContexts/commands/editor/closeAndSave.js +15 -0
  184. package/shortcutContexts/commands/editor/closeAndSave.mjs +10 -0
  185. package/shortcutContexts/commands/editor/closeWithoutSaving.js +13 -0
  186. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  187. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  188. package/shortcutContexts/commands/editor/fastOpen.mjs +11 -0
  189. package/shortcutContexts/commands/editor/index.js +16 -0
  190. package/shortcutContexts/commands/editor/index.mjs +12 -0
  191. package/shortcutContexts/commands/editor/open.js +29 -0
  192. package/shortcutContexts/commands/editor/open.mjs +24 -0
  193. package/shortcutContexts/commands/emptySelectedCells.js +12 -0
  194. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  195. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  196. package/shortcutContexts/commands/extendCellsSelection/down.mjs +10 -0
  197. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +21 -0
  198. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +16 -0
  199. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  200. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  201. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  202. package/shortcutContexts/commands/extendCellsSelection/left.mjs +10 -0
  203. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  204. package/shortcutContexts/commands/extendCellsSelection/right.mjs +10 -0
  205. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  206. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +14 -0
  207. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +22 -0
  208. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +17 -0
  209. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +17 -0
  210. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +12 -0
  211. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +17 -0
  212. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +12 -0
  213. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +40 -0
  214. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +35 -0
  215. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +40 -0
  216. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +35 -0
  217. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +22 -0
  218. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +17 -0
  219. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  220. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +14 -0
  221. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  222. package/shortcutContexts/commands/extendCellsSelection/up.mjs +10 -0
  223. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +21 -0
  224. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +16 -0
  225. package/shortcutContexts/commands/index.js +52 -0
  226. package/shortcutContexts/commands/index.mjs +48 -0
  227. package/shortcutContexts/commands/moveCellSelection/down.js +12 -0
  228. package/shortcutContexts/commands/moveCellSelection/down.mjs +7 -0
  229. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +29 -0
  230. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +24 -0
  231. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  232. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  233. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +13 -0
  234. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  235. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +13 -0
  236. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  237. package/shortcutContexts/commands/moveCellSelection/left.js +11 -0
  238. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  239. package/shortcutContexts/commands/moveCellSelection/right.js +11 -0
  240. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  241. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
  242. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +11 -0
  243. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
  244. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +12 -0
  245. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
  246. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +8 -0
  247. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
  248. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +11 -0
  249. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +36 -0
  250. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +31 -0
  251. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +36 -0
  252. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +31 -0
  253. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
  254. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +11 -0
  255. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
  256. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +13 -0
  257. package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
  258. package/shortcutContexts/commands/moveCellSelection/up.mjs +7 -0
  259. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +29 -0
  260. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +24 -0
  261. package/shortcutContexts/commands/populateSelectedCellsData.js +35 -0
  262. package/shortcutContexts/commands/populateSelectedCellsData.mjs +30 -0
  263. package/shortcutContexts/commands/selectAll.js +11 -0
  264. package/shortcutContexts/commands/selectAll.mjs +6 -0
  265. package/shortcutContexts/constants.js +19 -0
  266. package/shortcutContexts/constants.mjs +12 -0
  267. package/shortcutContexts/editor.js +29 -0
  268. package/shortcutContexts/editor.mjs +25 -0
  269. package/shortcutContexts/grid.js +247 -0
  270. package/shortcutContexts/grid.mjs +243 -0
  271. package/shortcutContexts/index.js +29 -0
  272. package/shortcutContexts/index.mjs +15 -0
  273. package/shortcuts/manager.js +2 -0
  274. package/shortcuts/manager.mjs +2 -0
  275. package/shortcuts/recorder.js +2 -2
  276. package/shortcuts/recorder.mjs +2 -2
  277. package/shortcuts/utils.js +21 -5
  278. package/shortcuts/utils.mjs +20 -4
  279. package/tableView.js +63 -11
  280. package/tableView.mjs +63 -11
  281. package/3rdparty/walkontable/src/selection.js +0 -355
  282. package/3rdparty/walkontable/src/selection.mjs +0 -349
  283. package/selection/highlight/constants.js +0 -16
  284. package/selection/highlight/constants.mjs +0 -6
@@ -0,0 +1,243 @@
1
+ import { isDefined } from "../helpers/mixed.mjs";
2
+ import { GRID_GROUP, EDITOR_EDIT_GROUP } from "./constants.mjs";
3
+ import { createKeyboardShortcutCommandsPool } from "./commands/index.mjs";
4
+ /**
5
+ * The context that defines shortcut list available for selected cell or cells.
6
+ *
7
+ * @param {Handsontable} hot The Handsontable instance.
8
+ */
9
+ export function shortcutsGridContext(hot) {
10
+ var context = hot.getShortcutManager().addContext('grid');
11
+ var commandsPool = createKeyboardShortcutCommandsPool(hot);
12
+ var config = {
13
+ runOnlyIf: function runOnlyIf() {
14
+ var _hot$getSettings = hot.getSettings(),
15
+ navigableHeaders = _hot$getSettings.navigableHeaders;
16
+ return isDefined(hot.getSelected()) && (navigableHeaders || !navigableHeaders && hot.countRenderedRows() > 0 && hot.countRenderedCols() > 0);
17
+ },
18
+ group: GRID_GROUP
19
+ };
20
+ context.addShortcuts([{
21
+ keys: [['F2']],
22
+ callback: function callback(event) {
23
+ return commandsPool.editorFastOpen(event);
24
+ }
25
+ }, {
26
+ keys: [['Enter'], ['Enter', 'Shift']],
27
+ callback: function callback(event, keys) {
28
+ return commandsPool.editorOpen(event, keys);
29
+ }
30
+ }, {
31
+ keys: [['Backspace'], ['Delete']],
32
+ callback: function callback() {
33
+ return commandsPool.emptySelectedCells();
34
+ }
35
+ }], {
36
+ group: EDITOR_EDIT_GROUP,
37
+ runOnlyIf: function runOnlyIf() {
38
+ return isDefined(hot.getSelected());
39
+ }
40
+ });
41
+ context.addShortcuts([{
42
+ keys: [['Control/Meta', 'A'], ['Control/Meta', 'Shift', 'Space']],
43
+ callback: function callback() {
44
+ return commandsPool.selectAll();
45
+ }
46
+ }, {
47
+ keys: [['Control/Meta', 'Enter']],
48
+ callback: function callback() {
49
+ return commandsPool.populateSelectedCellsData();
50
+ },
51
+ runOnlyIf: function runOnlyIf() {
52
+ return !hot.getSelectedRangeLast().highlight.isHeader() && hot.getSelectedRangeLast().getCellsCount() > 1;
53
+ }
54
+ }, {
55
+ keys: [['Control', 'Space']],
56
+ captureCtrl: true,
57
+ callback: function callback() {
58
+ return commandsPool.extendCellsSelectionToColumns();
59
+ }
60
+ }, {
61
+ keys: [['Shift', 'Space']],
62
+ stopPropagation: true,
63
+ callback: function callback() {
64
+ return commandsPool.extendCellsSelectionToRows();
65
+ }
66
+ }, {
67
+ keys: [['ArrowUp']],
68
+ callback: function callback() {
69
+ return commandsPool.moveCellSelectionUp();
70
+ }
71
+ }, {
72
+ keys: [['ArrowUp', 'Control/Meta']],
73
+ captureCtrl: true,
74
+ callback: function callback() {
75
+ return commandsPool.moveCellSelectionToMostTop();
76
+ }
77
+ }, {
78
+ keys: [['ArrowUp', 'Shift']],
79
+ callback: function callback() {
80
+ return commandsPool.extendCellsSelectionUp();
81
+ }
82
+ }, {
83
+ keys: [['ArrowUp', 'Shift', 'Control/Meta']],
84
+ captureCtrl: true,
85
+ callback: function callback() {
86
+ return commandsPool.extendCellsSelectionToMostTop();
87
+ },
88
+ runOnlyIf: function runOnlyIf() {
89
+ return !(hot.selection.isSelectedByCorner() || hot.selection.isSelectedByColumnHeader());
90
+ }
91
+ }, {
92
+ keys: [['ArrowDown']],
93
+ callback: function callback() {
94
+ return commandsPool.moveCellSelectionDown();
95
+ }
96
+ }, {
97
+ keys: [['ArrowDown', 'Control/Meta']],
98
+ captureCtrl: true,
99
+ callback: function callback() {
100
+ return commandsPool.moveCellSelectionToMostBottom();
101
+ }
102
+ }, {
103
+ keys: [['ArrowDown', 'Shift']],
104
+ callback: function callback() {
105
+ return commandsPool.extendCellsSelectionDown();
106
+ }
107
+ }, {
108
+ keys: [['ArrowDown', 'Shift', 'Control/Meta']],
109
+ captureCtrl: true,
110
+ callback: function callback() {
111
+ return commandsPool.extendCellsSelectionToMostBottom();
112
+ },
113
+ runOnlyIf: function runOnlyIf() {
114
+ return !(hot.selection.isSelectedByCorner() || hot.selection.isSelectedByColumnHeader());
115
+ }
116
+ }, {
117
+ keys: [['ArrowLeft']],
118
+ callback: function callback() {
119
+ return commandsPool.moveCellSelectionLeft();
120
+ }
121
+ }, {
122
+ keys: [['ArrowLeft', 'Control/Meta']],
123
+ captureCtrl: true,
124
+ callback: function callback() {
125
+ return commandsPool.moveCellSelectionToMostLeft();
126
+ }
127
+ }, {
128
+ keys: [['ArrowLeft', 'Shift']],
129
+ callback: function callback() {
130
+ return commandsPool.extendCellsSelectionLeft();
131
+ }
132
+ }, {
133
+ keys: [['ArrowLeft', 'Shift', 'Control/Meta']],
134
+ captureCtrl: true,
135
+ callback: function callback() {
136
+ return commandsPool.extendCellsSelectionToMostLeft();
137
+ },
138
+ runOnlyIf: function runOnlyIf() {
139
+ return !(hot.selection.isSelectedByCorner() || hot.selection.isSelectedByRowHeader());
140
+ }
141
+ }, {
142
+ keys: [['ArrowRight']],
143
+ callback: function callback() {
144
+ return commandsPool.moveCellSelectionRight();
145
+ }
146
+ }, {
147
+ keys: [['ArrowRight', 'Control/Meta']],
148
+ captureCtrl: true,
149
+ callback: function callback() {
150
+ return commandsPool.moveCellSelectionToMostRight();
151
+ }
152
+ }, {
153
+ keys: [['ArrowRight', 'Shift']],
154
+ callback: function callback() {
155
+ return commandsPool.extendCellsSelectionRight();
156
+ }
157
+ }, {
158
+ keys: [['ArrowRight', 'Shift', 'Control/Meta']],
159
+ captureCtrl: true,
160
+ callback: function callback() {
161
+ return commandsPool.extendCellsSelectionToMostRight();
162
+ },
163
+ runOnlyIf: function runOnlyIf() {
164
+ return !(hot.selection.isSelectedByCorner() || hot.selection.isSelectedByRowHeader());
165
+ }
166
+ }, {
167
+ keys: [['Home']],
168
+ captureCtrl: true,
169
+ callback: function callback() {
170
+ return commandsPool.moveCellSelectionToMostInlineStart();
171
+ },
172
+ runOnlyIf: function runOnlyIf() {
173
+ return hot.view.isMainTableNotFullyCoveredByOverlays();
174
+ }
175
+ }, {
176
+ keys: [['Home', 'Shift']],
177
+ callback: function callback() {
178
+ return commandsPool.extendCellsSelectionToMostInlineStart();
179
+ }
180
+ }, {
181
+ keys: [['Home', 'Control/Meta']],
182
+ captureCtrl: true,
183
+ callback: function callback() {
184
+ return commandsPool.moveCellSelectionToMostTopInlineStart();
185
+ },
186
+ runOnlyIf: function runOnlyIf() {
187
+ return hot.view.isMainTableNotFullyCoveredByOverlays();
188
+ }
189
+ }, {
190
+ keys: [['End']],
191
+ captureCtrl: true,
192
+ callback: function callback() {
193
+ return commandsPool.moveCellSelectionToMostInlineEnd();
194
+ },
195
+ runOnlyIf: function runOnlyIf() {
196
+ return hot.view.isMainTableNotFullyCoveredByOverlays();
197
+ }
198
+ }, {
199
+ keys: [['End', 'Shift']],
200
+ callback: function callback() {
201
+ return commandsPool.extendCellsSelectionToMostInlineEnd();
202
+ }
203
+ }, {
204
+ keys: [['End', 'Control/Meta']],
205
+ captureCtrl: true,
206
+ callback: function callback() {
207
+ return commandsPool.moveCellSelectionToMostBottomInlineEnd();
208
+ },
209
+ runOnlyIf: function runOnlyIf() {
210
+ return hot.view.isMainTableNotFullyCoveredByOverlays();
211
+ }
212
+ }, {
213
+ keys: [['PageUp']],
214
+ callback: function callback() {
215
+ return commandsPool.moveCellSelectionUpByViewportHight();
216
+ }
217
+ }, {
218
+ keys: [['PageUp', 'Shift']],
219
+ callback: function callback() {
220
+ return commandsPool.extendCellsSelectionUpByViewportHeight();
221
+ }
222
+ }, {
223
+ keys: [['PageDown']],
224
+ callback: function callback() {
225
+ return commandsPool.moveCellSelectionDownByViewportHeight();
226
+ }
227
+ }, {
228
+ keys: [['PageDown', 'Shift']],
229
+ callback: function callback() {
230
+ return commandsPool.extendCellsSelectionDownByViewportHeight();
231
+ }
232
+ }, {
233
+ keys: [['Tab']],
234
+ callback: function callback() {
235
+ return commandsPool.moveCellSelectionInlineStart();
236
+ }
237
+ }, {
238
+ keys: [['Shift', 'Tab']],
239
+ callback: function callback() {
240
+ return commandsPool.moveCellSelectionInlineEnd();
241
+ }
242
+ }], config);
243
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.object.keys.js");
4
+ exports.__esModule = true;
5
+ var _exportNames = {
6
+ registerAllShortcutContexts: true
7
+ };
8
+ exports.registerAllShortcutContexts = registerAllShortcutContexts;
9
+ require("core-js/modules/es.object.to-string.js");
10
+ require("core-js/modules/web.dom-collections.for-each.js");
11
+ var _editor = require("./editor");
12
+ var _grid = require("./grid");
13
+ var _constants = require("./constants");
14
+ Object.keys(_constants).forEach(function (key) {
15
+ if (key === "default" || key === "__esModule") return;
16
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
17
+ if (key in exports && exports[key] === _constants[key]) return;
18
+ exports[key] = _constants[key];
19
+ });
20
+ /**
21
+ * Register all shortcut contexts.
22
+ *
23
+ * @param {Handsontable} hotInstance The Handsontable instance.
24
+ */
25
+ function registerAllShortcutContexts(hotInstance) {
26
+ [_editor.shortcutsEditorContext, _grid.shortcutsGridContext].forEach(function (context) {
27
+ return context(hotInstance);
28
+ });
29
+ }
@@ -0,0 +1,15 @@
1
+ import "core-js/modules/es.object.to-string.js";
2
+ import "core-js/modules/web.dom-collections.for-each.js";
3
+ import { shortcutsEditorContext } from "./editor.mjs";
4
+ import { shortcutsGridContext } from "./grid.mjs";
5
+ export * from "./constants.mjs";
6
+ /**
7
+ * Register all shortcut contexts.
8
+ *
9
+ * @param {Handsontable} hotInstance The Handsontable instance.
10
+ */
11
+ export function registerAllShortcutContexts(hotInstance) {
12
+ [shortcutsEditorContext, shortcutsGridContext].forEach(function (context) {
13
+ return context(hotInstance);
14
+ });
15
+ }
@@ -3,6 +3,7 @@
3
3
  exports.__esModule = true;
4
4
  exports.createShortcutManager = void 0;
5
5
  var _uniqueMap = require("../utils/dataStructures/uniqueMap");
6
+ var _event = require("../helpers/dom/event");
6
7
  var _context = require("./context");
7
8
  var _recorder = require("./recorder");
8
9
  /* eslint-disable jsdoc/require-description-complete-sentence */
@@ -126,6 +127,7 @@ var createShortcutManager = function createShortcutManager(_ref) {
126
127
  event.preventDefault();
127
128
  }
128
129
  if (stopPropagation) {
130
+ (0, _event.stopImmediatePropagation)(event);
129
131
  event.stopPropagation();
130
132
  }
131
133
  if (isExecutionCancelled) {
@@ -1,4 +1,5 @@
1
1
  import { createUniqueMap } from "../utils/dataStructures/uniqueMap.mjs";
2
+ import { stopImmediatePropagation } from "../helpers/dom/event.mjs";
2
3
  import { createContext } from "./context.mjs";
3
4
  import { useRecorder } from "./recorder.mjs";
4
5
  /* eslint-disable jsdoc/require-description-complete-sentence */
@@ -121,6 +122,7 @@ export var createShortcutManager = function createShortcutManager(_ref) {
121
122
  event.preventDefault();
122
123
  }
123
124
  if (stopPropagation) {
125
+ stopImmediatePropagation(event);
124
126
  event.stopPropagation();
125
127
  }
126
128
  if (isExecutionCancelled) {
@@ -88,7 +88,7 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
88
88
  if (event.keyCode === 229 || result === false || (0, _event.isImmediatePropagationStopped)(event)) {
89
89
  return;
90
90
  }
91
- var pressedKey = (0, _utils.normalizeEventKey)(event.key);
91
+ var pressedKey = (0, _utils.normalizeEventKey)(event);
92
92
  var extraModifierKeys = [];
93
93
  if (isModifierKey(pressedKey)) {
94
94
  modifierKeysObserver.press(pressedKey);
@@ -114,7 +114,7 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
114
114
  if (handleEvent(event) === false) {
115
115
  return;
116
116
  }
117
- var pressedKey = (0, _utils.normalizeEventKey)(event.key);
117
+ var pressedKey = (0, _utils.normalizeEventKey)(event);
118
118
  if (isModifierKey(pressedKey) === false) {
119
119
  return;
120
120
  }
@@ -84,7 +84,7 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
84
84
  if (event.keyCode === 229 || result === false || isImmediatePropagationStopped(event)) {
85
85
  return;
86
86
  }
87
- var pressedKey = normalizeEventKey(event.key);
87
+ var pressedKey = normalizeEventKey(event);
88
88
  var extraModifierKeys = [];
89
89
  if (isModifierKey(pressedKey)) {
90
90
  modifierKeysObserver.press(pressedKey);
@@ -110,7 +110,7 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
110
110
  if (handleEvent(event) === false) {
111
111
  return;
112
112
  }
113
- var pressedKey = normalizeEventKey(event.key);
113
+ var pressedKey = normalizeEventKey(event);
114
114
  if (isModifierKey(pressedKey) === false) {
115
115
  return;
116
116
  }
@@ -10,6 +10,10 @@ require("core-js/modules/web.dom-collections.iterator.js");
10
10
  require("core-js/modules/es.array.join.js");
11
11
  require("core-js/modules/es.array.sort.js");
12
12
  require("core-js/modules/es.array.map.js");
13
+ require("core-js/modules/es.regexp.constructor.js");
14
+ require("core-js/modules/es.regexp.exec.js");
15
+ require("core-js/modules/es.regexp.to-string.js");
16
+ require("core-js/modules/es.string.replace.js");
13
17
  // This file handles key-name discrepancies between browsers.
14
18
  // For the list of discrepancies, go to: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values.
15
19
  var mappings = new Map([[' ', 'space'],
@@ -46,13 +50,25 @@ var getKeysList = function getKeysList(normalizedKeys) {
46
50
  };
47
51
 
48
52
  /**
49
- * Normalize a `KeyboardEvent.key` property, to use it for keyboard shortcuts.
53
+ * The regex tests if the event.code matches to the pattern and it's used to extract letters and digits from
54
+ * the string.
55
+ */
56
+ exports.getKeysList = getKeysList;
57
+ var codeToKeyRegExp = new RegExp('^(?:Key|Digit)([A-Z0-9])$');
58
+
59
+ /**
60
+ * Normalizes a keyboard event key value to a key before its modification. When the keyboard event
61
+ * is triggered with Alt, Control or Shift keys the `key` property contains modified key e.g. for Alt+L
62
+ * it will be `ł`. But that value is only valid for polish keyboard layout. To fix that limitations, for
63
+ * letters and digits the value is taken from the `code` property which holds original value before
64
+ * transformation.
50
65
  *
51
- * @param {string} key KeyboardEvent's key property.
66
+ * @param {Event} event The KeyboardEvent object.
52
67
  * @returns {string}
53
68
  */
54
- exports.getKeysList = getKeysList;
55
- var normalizeEventKey = function normalizeEventKey(key) {
56
- return key.toLowerCase();
69
+ var normalizeEventKey = function normalizeEventKey(_ref) {
70
+ var key = _ref.key,
71
+ code = _ref.code;
72
+ return (codeToKeyRegExp.test(code) ? code.replace(codeToKeyRegExp, '$1') : key).toLowerCase();
57
73
  };
58
74
  exports.normalizeEventKey = normalizeEventKey;
@@ -6,6 +6,10 @@ import "core-js/modules/web.dom-collections.iterator.js";
6
6
  import "core-js/modules/es.array.join.js";
7
7
  import "core-js/modules/es.array.sort.js";
8
8
  import "core-js/modules/es.array.map.js";
9
+ import "core-js/modules/es.regexp.constructor.js";
10
+ import "core-js/modules/es.regexp.exec.js";
11
+ import "core-js/modules/es.regexp.to-string.js";
12
+ import "core-js/modules/es.string.replace.js";
9
13
  // This file handles key-name discrepancies between browsers.
10
14
  // For the list of discrepancies, go to: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values.
11
15
  var mappings = new Map([[' ', 'space'],
@@ -41,11 +45,23 @@ export var getKeysList = function getKeysList(normalizedKeys) {
41
45
  };
42
46
 
43
47
  /**
44
- * Normalize a `KeyboardEvent.key` property, to use it for keyboard shortcuts.
48
+ * The regex tests if the event.code matches to the pattern and it's used to extract letters and digits from
49
+ * the string.
50
+ */
51
+ var codeToKeyRegExp = new RegExp('^(?:Key|Digit)([A-Z0-9])$');
52
+
53
+ /**
54
+ * Normalizes a keyboard event key value to a key before its modification. When the keyboard event
55
+ * is triggered with Alt, Control or Shift keys the `key` property contains modified key e.g. for Alt+L
56
+ * it will be `ł`. But that value is only valid for polish keyboard layout. To fix that limitations, for
57
+ * letters and digits the value is taken from the `code` property which holds original value before
58
+ * transformation.
45
59
  *
46
- * @param {string} key KeyboardEvent's key property.
60
+ * @param {Event} event The KeyboardEvent object.
47
61
  * @returns {string}
48
62
  */
49
- export var normalizeEventKey = function normalizeEventKey(key) {
50
- return key.toLowerCase();
63
+ export var normalizeEventKey = function normalizeEventKey(_ref) {
64
+ var key = _ref.key,
65
+ code = _ref.code;
66
+ return (codeToKeyRegExp.test(code) ? code.replace(codeToKeyRegExp, '$1') : key).toLowerCase();
51
67
  };
package/tableView.js CHANGED
@@ -356,11 +356,14 @@ var TableView = /*#__PURE__*/function () {
356
356
  });
357
357
  this.eventManager.addEventListener(documentElement, 'mouseup', function (event) {
358
358
  if (selection.isInProgress() && (0, _event.isLeftClick)(event)) {
359
- // is left mouse button
360
359
  selection.finish();
361
360
  }
362
361
  priv.mouseDown = false;
363
- if ((0, _element.isOutsideInput)(rootDocument.activeElement) || !selection.isSelected() && !selection.isSelectedByAnyHeader() && !rootElement.contains(event.target) && !(0, _event.isRightClick)(event)) {
362
+ var isOutsideInputElement = (0, _element.isOutsideInput)(rootDocument.activeElement);
363
+ if (!isOutsideInputElement) {
364
+ return;
365
+ }
366
+ if (isOutsideInputElement || !selection.isSelected() && !selection.isSelectedByAnyHeader() && !rootElement.contains(event.target) && !(0, _event.isRightClick)(event)) {
364
367
  _this.instance.unlisten();
365
368
  }
366
369
  });
@@ -613,6 +616,44 @@ var TableView = /*#__PURE__*/function () {
613
616
  return this.countNotHiddenRowIndexes(visualFixedRowsBottom, 1);
614
617
  }
615
618
 
619
+ /**
620
+ * The function returns the number of renderable column indexes within the passed range of the visual indexes.
621
+ *
622
+ * @param {number} columnStart The column visual start index.
623
+ * @param {number} columnEnd The column visual end index.
624
+ * @returns {number}
625
+ */
626
+ }, {
627
+ key: "countRenderableColumnsInRange",
628
+ value: function countRenderableColumnsInRange(columnStart, columnEnd) {
629
+ var count = 0;
630
+ for (var column = columnStart; column <= columnEnd; column++) {
631
+ if (this.instance.columnIndexMapper.getRenderableFromVisualIndex(column) !== null) {
632
+ count += 1;
633
+ }
634
+ }
635
+ return count;
636
+ }
637
+
638
+ /**
639
+ * The function returns the number of renderable row indexes within the passed range of the visual indexes.
640
+ *
641
+ * @param {number} rowStart The row visual start index.
642
+ * @param {number} rowEnd The row visual end index.
643
+ * @returns {number}
644
+ */
645
+ }, {
646
+ key: "countRenderableRowsInRange",
647
+ value: function countRenderableRowsInRange(rowStart, rowEnd) {
648
+ var count = 0;
649
+ for (var row = rowStart; row <= rowEnd; row++) {
650
+ if (this.instance.rowIndexMapper.getRenderableFromVisualIndex(row) !== null) {
651
+ count += 1;
652
+ }
653
+ }
654
+ return count;
655
+ }
656
+
616
657
  /**
617
658
  * Checks if at least one cell than belongs to the main table is not covered by the top, left or
618
659
  * bottom overlay.
@@ -884,15 +925,29 @@ var TableView = /*#__PURE__*/function () {
884
925
  },
885
926
  onBeforeHighlightingRowHeader: function onBeforeHighlightingRowHeader(renderableRow, headerLevel, highlightMeta) {
886
927
  var rowMapper = _this2.instance.rowIndexMapper;
887
- var visualRow = rowMapper.getVisualFromRenderableIndex(renderableRow);
928
+ var areColumnHeadersSelected = renderableRow < 0;
929
+ var visualRow = renderableRow;
930
+ if (!areColumnHeadersSelected) {
931
+ visualRow = rowMapper.getVisualFromRenderableIndex(renderableRow);
932
+ }
888
933
  var newVisualRow = _this2.instance.runHooks('beforeHighlightingRowHeader', visualRow, headerLevel, highlightMeta);
889
- return rowMapper.getRenderableFromVisualIndex(rowMapper.getNearestNotHiddenIndex(newVisualRow, 1));
934
+ if (!areColumnHeadersSelected) {
935
+ return rowMapper.getRenderableFromVisualIndex(rowMapper.getNearestNotHiddenIndex(newVisualRow, 1));
936
+ }
937
+ return newVisualRow;
890
938
  },
891
939
  onBeforeHighlightingColumnHeader: function onBeforeHighlightingColumnHeader(renderableColumn, headerLevel, highlightMeta) {
892
940
  var columnMapper = _this2.instance.columnIndexMapper;
893
- var visualColumn = columnMapper.getVisualFromRenderableIndex(renderableColumn);
941
+ var areRowHeadersSelected = renderableColumn < 0;
942
+ var visualColumn = renderableColumn;
943
+ if (!areRowHeadersSelected) {
944
+ visualColumn = columnMapper.getVisualFromRenderableIndex(renderableColumn);
945
+ }
894
946
  var newVisualColumn = _this2.instance.runHooks('beforeHighlightingColumnHeader', visualColumn, headerLevel, highlightMeta);
895
- return columnMapper.getRenderableFromVisualIndex(columnMapper.getNearestNotHiddenIndex(newVisualColumn, 1));
947
+ if (!areRowHeadersSelected) {
948
+ return columnMapper.getRenderableFromVisualIndex(columnMapper.getNearestNotHiddenIndex(newVisualColumn, 1));
949
+ }
950
+ return newVisualColumn;
896
951
  },
897
952
  onAfterDrawSelection: function onAfterDrawSelection(currentRow, currentColumn, layerLevel) {
898
953
  var cornersOfSelection;
@@ -903,10 +958,7 @@ var TableView = /*#__PURE__*/function () {
903
958
  var selectedRange = _this2.instance.selection.getSelectedRange();
904
959
  var selectionRangeSize = selectedRange.size();
905
960
  if (selectionRangeSize > 0) {
906
- // Selection layers are stored from the "oldest" to the "newest". We should calculate the offset.
907
- // Please look at the `SelectedRange` class and it's method for getting selection's layer for more information.
908
- var selectionOffset = (layerLevel !== null && layerLevel !== void 0 ? layerLevel : 0) + 1 - selectionRangeSize;
909
- var selectionForLayer = selectedRange.peekByIndex(selectionOffset);
961
+ var selectionForLayer = selectedRange.peekByIndex(layerLevel !== null && layerLevel !== void 0 ? layerLevel : 0);
910
962
  cornersOfSelection = [selectionForLayer.from.row, selectionForLayer.from.col, selectionForLayer.to.row, selectionForLayer.to.col];
911
963
  }
912
964
  return _this2.instance.runHooks('afterDrawSelection', visualRowIndex, visualColumnIndex, cornersOfSelection, layerLevel);
@@ -1080,7 +1132,7 @@ var TableView = /*#__PURE__*/function () {
1080
1132
  key: "isSelectedOnlyCell",
1081
1133
  value: function isSelectedOnlyCell() {
1082
1134
  var _this$instance$getSel, _this$instance$getSel2;
1083
- return (_this$instance$getSel = (_this$instance$getSel2 = this.instance.getSelectedRangeLast()) === null || _this$instance$getSel2 === void 0 ? void 0 : _this$instance$getSel2.isSingle()) !== null && _this$instance$getSel !== void 0 ? _this$instance$getSel : false;
1135
+ return (_this$instance$getSel = (_this$instance$getSel2 = this.instance.getSelectedRangeLast()) === null || _this$instance$getSel2 === void 0 ? void 0 : _this$instance$getSel2.isSingleCell()) !== null && _this$instance$getSel !== void 0 ? _this$instance$getSel : false;
1084
1136
  }
1085
1137
 
1086
1138
  /**
package/tableView.mjs CHANGED
@@ -351,11 +351,14 @@ var TableView = /*#__PURE__*/function () {
351
351
  });
352
352
  this.eventManager.addEventListener(documentElement, 'mouseup', function (event) {
353
353
  if (selection.isInProgress() && isLeftClick(event)) {
354
- // is left mouse button
355
354
  selection.finish();
356
355
  }
357
356
  priv.mouseDown = false;
358
- if (isOutsideInput(rootDocument.activeElement) || !selection.isSelected() && !selection.isSelectedByAnyHeader() && !rootElement.contains(event.target) && !isRightClick(event)) {
357
+ var isOutsideInputElement = isOutsideInput(rootDocument.activeElement);
358
+ if (!isOutsideInputElement) {
359
+ return;
360
+ }
361
+ if (isOutsideInputElement || !selection.isSelected() && !selection.isSelectedByAnyHeader() && !rootElement.contains(event.target) && !isRightClick(event)) {
359
362
  _this.instance.unlisten();
360
363
  }
361
364
  });
@@ -608,6 +611,44 @@ var TableView = /*#__PURE__*/function () {
608
611
  return this.countNotHiddenRowIndexes(visualFixedRowsBottom, 1);
609
612
  }
610
613
 
614
+ /**
615
+ * The function returns the number of renderable column indexes within the passed range of the visual indexes.
616
+ *
617
+ * @param {number} columnStart The column visual start index.
618
+ * @param {number} columnEnd The column visual end index.
619
+ * @returns {number}
620
+ */
621
+ }, {
622
+ key: "countRenderableColumnsInRange",
623
+ value: function countRenderableColumnsInRange(columnStart, columnEnd) {
624
+ var count = 0;
625
+ for (var column = columnStart; column <= columnEnd; column++) {
626
+ if (this.instance.columnIndexMapper.getRenderableFromVisualIndex(column) !== null) {
627
+ count += 1;
628
+ }
629
+ }
630
+ return count;
631
+ }
632
+
633
+ /**
634
+ * The function returns the number of renderable row indexes within the passed range of the visual indexes.
635
+ *
636
+ * @param {number} rowStart The row visual start index.
637
+ * @param {number} rowEnd The row visual end index.
638
+ * @returns {number}
639
+ */
640
+ }, {
641
+ key: "countRenderableRowsInRange",
642
+ value: function countRenderableRowsInRange(rowStart, rowEnd) {
643
+ var count = 0;
644
+ for (var row = rowStart; row <= rowEnd; row++) {
645
+ if (this.instance.rowIndexMapper.getRenderableFromVisualIndex(row) !== null) {
646
+ count += 1;
647
+ }
648
+ }
649
+ return count;
650
+ }
651
+
611
652
  /**
612
653
  * Checks if at least one cell than belongs to the main table is not covered by the top, left or
613
654
  * bottom overlay.
@@ -879,15 +920,29 @@ var TableView = /*#__PURE__*/function () {
879
920
  },
880
921
  onBeforeHighlightingRowHeader: function onBeforeHighlightingRowHeader(renderableRow, headerLevel, highlightMeta) {
881
922
  var rowMapper = _this2.instance.rowIndexMapper;
882
- var visualRow = rowMapper.getVisualFromRenderableIndex(renderableRow);
923
+ var areColumnHeadersSelected = renderableRow < 0;
924
+ var visualRow = renderableRow;
925
+ if (!areColumnHeadersSelected) {
926
+ visualRow = rowMapper.getVisualFromRenderableIndex(renderableRow);
927
+ }
883
928
  var newVisualRow = _this2.instance.runHooks('beforeHighlightingRowHeader', visualRow, headerLevel, highlightMeta);
884
- return rowMapper.getRenderableFromVisualIndex(rowMapper.getNearestNotHiddenIndex(newVisualRow, 1));
929
+ if (!areColumnHeadersSelected) {
930
+ return rowMapper.getRenderableFromVisualIndex(rowMapper.getNearestNotHiddenIndex(newVisualRow, 1));
931
+ }
932
+ return newVisualRow;
885
933
  },
886
934
  onBeforeHighlightingColumnHeader: function onBeforeHighlightingColumnHeader(renderableColumn, headerLevel, highlightMeta) {
887
935
  var columnMapper = _this2.instance.columnIndexMapper;
888
- var visualColumn = columnMapper.getVisualFromRenderableIndex(renderableColumn);
936
+ var areRowHeadersSelected = renderableColumn < 0;
937
+ var visualColumn = renderableColumn;
938
+ if (!areRowHeadersSelected) {
939
+ visualColumn = columnMapper.getVisualFromRenderableIndex(renderableColumn);
940
+ }
889
941
  var newVisualColumn = _this2.instance.runHooks('beforeHighlightingColumnHeader', visualColumn, headerLevel, highlightMeta);
890
- return columnMapper.getRenderableFromVisualIndex(columnMapper.getNearestNotHiddenIndex(newVisualColumn, 1));
942
+ if (!areRowHeadersSelected) {
943
+ return columnMapper.getRenderableFromVisualIndex(columnMapper.getNearestNotHiddenIndex(newVisualColumn, 1));
944
+ }
945
+ return newVisualColumn;
891
946
  },
892
947
  onAfterDrawSelection: function onAfterDrawSelection(currentRow, currentColumn, layerLevel) {
893
948
  var cornersOfSelection;
@@ -898,10 +953,7 @@ var TableView = /*#__PURE__*/function () {
898
953
  var selectedRange = _this2.instance.selection.getSelectedRange();
899
954
  var selectionRangeSize = selectedRange.size();
900
955
  if (selectionRangeSize > 0) {
901
- // Selection layers are stored from the "oldest" to the "newest". We should calculate the offset.
902
- // Please look at the `SelectedRange` class and it's method for getting selection's layer for more information.
903
- var selectionOffset = (layerLevel !== null && layerLevel !== void 0 ? layerLevel : 0) + 1 - selectionRangeSize;
904
- var selectionForLayer = selectedRange.peekByIndex(selectionOffset);
956
+ var selectionForLayer = selectedRange.peekByIndex(layerLevel !== null && layerLevel !== void 0 ? layerLevel : 0);
905
957
  cornersOfSelection = [selectionForLayer.from.row, selectionForLayer.from.col, selectionForLayer.to.row, selectionForLayer.to.col];
906
958
  }
907
959
  return _this2.instance.runHooks('afterDrawSelection', visualRowIndex, visualColumnIndex, cornersOfSelection, layerLevel);
@@ -1075,7 +1127,7 @@ var TableView = /*#__PURE__*/function () {
1075
1127
  key: "isSelectedOnlyCell",
1076
1128
  value: function isSelectedOnlyCell() {
1077
1129
  var _this$instance$getSel, _this$instance$getSel2;
1078
- return (_this$instance$getSel = (_this$instance$getSel2 = this.instance.getSelectedRangeLast()) === null || _this$instance$getSel2 === void 0 ? void 0 : _this$instance$getSel2.isSingle()) !== null && _this$instance$getSel !== void 0 ? _this$instance$getSel : false;
1130
+ return (_this$instance$getSel = (_this$instance$getSel2 = this.instance.getSelectedRangeLast()) === null || _this$instance$getSel2 === void 0 ? void 0 : _this$instance$getSel2.isSingleCell()) !== null && _this$instance$getSel !== void 0 ? _this$instance$getSel : false;
1079
1131
  }
1080
1132
 
1081
1133
  /**