handsontable 0.0.0-next-a1e4b4f-20230628 → 0.0.0-next-e697250-20230707

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 (456) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +50 -28
  3. package/3rdparty/walkontable/src/cell/coords.mjs +50 -28
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +69 -36
  6. package/3rdparty/walkontable/src/cell/range.mjs +68 -35
  7. package/3rdparty/walkontable/src/event.js +3 -5
  8. package/3rdparty/walkontable/src/event.mjs +3 -5
  9. package/3rdparty/walkontable/src/overlay/_base.js +6 -7
  10. package/3rdparty/walkontable/src/overlay/_base.mjs +6 -7
  11. package/3rdparty/walkontable/src/overlay/bottom.js +6 -7
  12. package/3rdparty/walkontable/src/overlay/bottom.mjs +6 -7
  13. package/3rdparty/walkontable/src/overlay/top.js +6 -7
  14. package/3rdparty/walkontable/src/overlay/top.mjs +6 -7
  15. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.js +10 -12
  16. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.mjs +10 -12
  17. package/3rdparty/walkontable/src/overlays.js +55 -64
  18. package/3rdparty/walkontable/src/overlays.mjs +55 -64
  19. package/3rdparty/walkontable/src/renderer/table.js +0 -2
  20. package/3rdparty/walkontable/src/renderer/table.mjs +0 -2
  21. package/3rdparty/walkontable/src/scroll.js +20 -23
  22. package/3rdparty/walkontable/src/scroll.mjs +20 -23
  23. package/3rdparty/walkontable/src/selection/border/border.js +1 -0
  24. package/3rdparty/walkontable/src/selection/border/border.mjs +1 -0
  25. package/3rdparty/walkontable/src/selection/manager.js +40 -45
  26. package/3rdparty/walkontable/src/selection/manager.mjs +33 -38
  27. package/3rdparty/walkontable/src/selection/scanner.js +5 -4
  28. package/3rdparty/walkontable/src/selection/scanner.mjs +1 -0
  29. package/3rdparty/walkontable/src/settings.js +13 -15
  30. package/3rdparty/walkontable/src/settings.mjs +13 -15
  31. package/3rdparty/walkontable/src/table.js +23 -26
  32. package/3rdparty/walkontable/src/table.mjs +23 -26
  33. package/CHANGELOG.md +56 -0
  34. package/base.js +2 -4
  35. package/base.mjs +2 -2
  36. package/common.d.ts +1 -1
  37. package/core.d.ts +7 -9
  38. package/core.js +241 -439
  39. package/core.mjs +245 -443
  40. package/dataMap/dataMap.js +1 -0
  41. package/dataMap/dataMap.mjs +1 -0
  42. package/dataMap/dataSource.js +5 -5
  43. package/dataMap/dataSource.mjs +5 -5
  44. package/dataMap/metaManager/lazyFactoryMap.js +1 -0
  45. package/dataMap/metaManager/lazyFactoryMap.mjs +1 -0
  46. package/dataMap/metaManager/metaLayers/cellMeta.js +1 -0
  47. package/dataMap/metaManager/metaLayers/cellMeta.mjs +1 -0
  48. package/dataMap/metaManager/metaSchema.js +33 -24
  49. package/dataMap/metaManager/metaSchema.mjs +33 -24
  50. package/dist/handsontable.css +25 -3
  51. package/dist/handsontable.full.css +25 -3
  52. package/dist/handsontable.full.js +14539 -11358
  53. package/dist/handsontable.full.min.css +5 -5
  54. package/dist/handsontable.full.min.js +137 -125
  55. package/dist/handsontable.js +31414 -28455
  56. package/dist/handsontable.min.css +5 -5
  57. package/dist/handsontable.min.js +11 -3
  58. package/dist/languages/all.js +133 -0
  59. package/dist/languages/ar-AR.js +7 -0
  60. package/dist/languages/cs-CZ.js +7 -0
  61. package/dist/languages/de-CH.js +7 -0
  62. package/dist/languages/de-DE.js +7 -0
  63. package/dist/languages/en-US.js +7 -0
  64. package/dist/languages/es-MX.js +7 -0
  65. package/dist/languages/fr-FR.js +7 -0
  66. package/dist/languages/it-IT.js +7 -0
  67. package/dist/languages/ja-JP.js +7 -0
  68. package/dist/languages/ko-KR.js +7 -0
  69. package/dist/languages/lv-LV.js +7 -0
  70. package/dist/languages/nb-NO.js +7 -0
  71. package/dist/languages/nl-NL.js +7 -0
  72. package/dist/languages/pl-PL.js +7 -0
  73. package/dist/languages/pt-BR.js +7 -0
  74. package/dist/languages/ru-RU.js +7 -0
  75. package/dist/languages/sr-SP.js +7 -0
  76. package/dist/languages/zh-CN.js +7 -0
  77. package/dist/languages/zh-TW.js +7 -0
  78. package/editorManager.js +19 -89
  79. package/editorManager.mjs +24 -93
  80. package/editors/baseEditor/baseEditor.js +1 -0
  81. package/editors/baseEditor/baseEditor.mjs +1 -0
  82. package/editors/textEditor/textEditor.js +14 -20
  83. package/editors/textEditor/textEditor.mjs +16 -22
  84. package/helpers/dom/element.js +0 -11
  85. package/helpers/dom/element.mjs +0 -10
  86. package/helpers/mixed.js +2 -2
  87. package/helpers/mixed.mjs +2 -2
  88. package/helpers/number.d.ts +1 -0
  89. package/helpers/number.js +18 -0
  90. package/helpers/number.mjs +17 -0
  91. package/helpers/object.js +2 -0
  92. package/helpers/object.mjs +2 -0
  93. package/i18n/languages/ar-AR.js +7 -1
  94. package/i18n/languages/cs-CZ.js +7 -1
  95. package/i18n/languages/de-CH.js +7 -1
  96. package/i18n/languages/de-DE.js +7 -1
  97. package/i18n/languages/en-US.js +7 -1
  98. package/i18n/languages/es-MX.js +7 -1
  99. package/i18n/languages/fr-FR.js +7 -1
  100. package/i18n/languages/it-IT.js +7 -1
  101. package/i18n/languages/ja-JP.js +7 -1
  102. package/i18n/languages/ko-KR.js +7 -1
  103. package/i18n/languages/lv-LV.js +7 -1
  104. package/i18n/languages/nb-NO.js +7 -1
  105. package/i18n/languages/nl-NL.js +7 -1
  106. package/i18n/languages/pl-PL.js +7 -1
  107. package/i18n/languages/pt-BR.js +7 -1
  108. package/i18n/languages/ru-RU.js +7 -1
  109. package/i18n/languages/sr-SP.js +7 -1
  110. package/i18n/languages/zh-CN.js +7 -1
  111. package/i18n/languages/zh-TW.js +7 -1
  112. package/languages/all.js +133 -0
  113. package/languages/ar-AR.js +7 -0
  114. package/languages/cs-CZ.js +7 -0
  115. package/languages/de-CH.js +7 -0
  116. package/languages/de-DE.js +7 -0
  117. package/languages/en-US.js +7 -0
  118. package/languages/es-MX.js +7 -0
  119. package/languages/fr-FR.js +7 -0
  120. package/languages/index.js +133 -0
  121. package/languages/it-IT.js +7 -0
  122. package/languages/ja-JP.js +7 -0
  123. package/languages/ko-KR.js +7 -0
  124. package/languages/lv-LV.js +7 -0
  125. package/languages/nb-NO.js +7 -0
  126. package/languages/nl-NL.js +7 -0
  127. package/languages/pl-PL.js +7 -0
  128. package/languages/pt-BR.js +7 -0
  129. package/languages/ru-RU.js +7 -0
  130. package/languages/sr-SP.js +7 -0
  131. package/languages/zh-CN.js +7 -0
  132. package/languages/zh-TW.js +7 -0
  133. package/package.json +3 -2
  134. package/pluginHooks.d.ts +8 -2
  135. package/pluginHooks.js +116 -18
  136. package/pluginHooks.mjs +115 -15
  137. package/plugins/autoColumnSize/autoColumnSize.js +1 -0
  138. package/plugins/autoColumnSize/autoColumnSize.mjs +1 -0
  139. package/plugins/autoRowSize/autoRowSize.js +3 -2
  140. package/plugins/autoRowSize/autoRowSize.mjs +3 -2
  141. package/plugins/autofill/autofill.js +2 -2
  142. package/plugins/autofill/autofill.mjs +3 -3
  143. package/plugins/autofill/utils.js +1 -39
  144. package/plugins/autofill/utils.mjs +0 -37
  145. package/plugins/base/base.js +1 -0
  146. package/plugins/base/base.mjs +1 -0
  147. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +1 -0
  148. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.mjs +1 -0
  149. package/plugins/collapsibleColumns/collapsibleColumns.js +82 -24
  150. package/plugins/collapsibleColumns/collapsibleColumns.mjs +82 -24
  151. package/plugins/columnSorting/columnSorting.js +51 -8
  152. package/plugins/columnSorting/columnSorting.mjs +50 -9
  153. package/plugins/columnSorting/columnStatesManager.js +1 -0
  154. package/plugins/columnSorting/columnStatesManager.mjs +1 -0
  155. package/plugins/columnSorting/index.js +4 -2
  156. package/plugins/columnSorting/index.mjs +1 -1
  157. package/plugins/columnSorting/rootComparator.js +1 -0
  158. package/plugins/columnSorting/rootComparator.mjs +1 -0
  159. package/plugins/comments/commentEditor.js +1 -0
  160. package/plugins/comments/commentEditor.mjs +1 -0
  161. package/plugins/comments/comments.js +289 -224
  162. package/plugins/comments/comments.mjs +297 -234
  163. package/plugins/comments/contextMenuItem/addEditComment.js +51 -0
  164. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  165. package/plugins/comments/contextMenuItem/readOnlyComment.js +63 -0
  166. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +55 -0
  167. package/plugins/comments/contextMenuItem/removeComment.js +48 -0
  168. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  169. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  170. package/plugins/contextMenu/contextMenu.js +81 -29
  171. package/plugins/contextMenu/contextMenu.mjs +82 -30
  172. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  173. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  174. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  175. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  176. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  177. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  178. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  179. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  180. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  181. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  182. package/plugins/contextMenu/predefinedItems/removeColumn.js +8 -5
  183. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +6 -3
  184. package/plugins/contextMenu/predefinedItems/removeRow.js +8 -5
  185. package/plugins/contextMenu/predefinedItems/removeRow.mjs +6 -3
  186. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  187. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  188. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  189. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  190. package/plugins/contextMenu/utils.js +25 -16
  191. package/plugins/contextMenu/utils.mjs +24 -15
  192. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  193. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  194. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  195. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  196. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  197. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  198. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  199. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  200. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  201. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  202. package/plugins/copyPaste/copyPaste.js +100 -14
  203. package/plugins/copyPaste/copyPaste.mjs +100 -14
  204. package/plugins/copyPaste/copyableRanges.js +25 -31
  205. package/plugins/copyPaste/copyableRanges.mjs +18 -24
  206. package/plugins/copyPaste/focusableElement.js +219 -0
  207. package/plugins/copyPaste/focusableElement.mjs +213 -0
  208. package/plugins/customBorders/customBorders.d.ts +2 -0
  209. package/plugins/customBorders/customBorders.js +19 -50
  210. package/plugins/customBorders/customBorders.mjs +19 -50
  211. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  212. package/plugins/dropdownMenu/dropdownMenu.js +94 -30
  213. package/plugins/dropdownMenu/dropdownMenu.mjs +94 -30
  214. package/plugins/exportFile/dataProvider.js +1 -0
  215. package/plugins/exportFile/dataProvider.mjs +1 -0
  216. package/plugins/filters/component/value.js +1 -0
  217. package/plugins/filters/component/value.mjs +1 -0
  218. package/plugins/filters/condition/beginsWith.js +1 -0
  219. package/plugins/filters/condition/beginsWith.mjs +1 -0
  220. package/plugins/filters/condition/between.js +1 -0
  221. package/plugins/filters/condition/between.mjs +1 -0
  222. package/plugins/filters/condition/byValue.js +1 -0
  223. package/plugins/filters/condition/byValue.mjs +1 -0
  224. package/plugins/filters/condition/contains.js +1 -0
  225. package/plugins/filters/condition/contains.mjs +1 -0
  226. package/plugins/filters/condition/date/after.js +1 -0
  227. package/plugins/filters/condition/date/after.mjs +1 -0
  228. package/plugins/filters/condition/date/before.js +1 -0
  229. package/plugins/filters/condition/date/before.mjs +1 -0
  230. package/plugins/filters/condition/endsWith.js +1 -0
  231. package/plugins/filters/condition/endsWith.mjs +1 -0
  232. package/plugins/filters/condition/equal.js +1 -0
  233. package/plugins/filters/condition/equal.mjs +1 -0
  234. package/plugins/filters/condition/greaterThan.js +1 -0
  235. package/plugins/filters/condition/greaterThan.mjs +1 -0
  236. package/plugins/filters/condition/greaterThanOrEqual.js +1 -0
  237. package/plugins/filters/condition/greaterThanOrEqual.mjs +1 -0
  238. package/plugins/filters/condition/lessThan.js +1 -0
  239. package/plugins/filters/condition/lessThan.mjs +1 -0
  240. package/plugins/filters/condition/lessThanOrEqual.js +1 -0
  241. package/plugins/filters/condition/lessThanOrEqual.mjs +1 -0
  242. package/plugins/filters/conditionCollection.js +1 -0
  243. package/plugins/filters/conditionCollection.mjs +1 -0
  244. package/plugins/filters/filters.js +68 -42
  245. package/plugins/filters/filters.mjs +67 -41
  246. package/plugins/filters/ui/multipleSelect.js +1 -0
  247. package/plugins/filters/ui/multipleSelect.mjs +1 -0
  248. package/plugins/formulas/formulas.js +191 -168
  249. package/plugins/formulas/formulas.mjs +191 -168
  250. package/plugins/formulas/indexSyncer/axisSyncer.js +379 -0
  251. package/plugins/formulas/indexSyncer/axisSyncer.mjs +374 -0
  252. package/plugins/formulas/indexSyncer/index.js +225 -0
  253. package/plugins/formulas/indexSyncer/index.mjs +219 -0
  254. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -0
  255. package/plugins/hiddenColumns/contextMenuItem/hideColumn.mjs +1 -0
  256. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +1 -0
  257. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +1 -0
  258. package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -0
  259. package/plugins/hiddenRows/contextMenuItem/hideRow.mjs +1 -0
  260. package/plugins/hiddenRows/contextMenuItem/showRow.js +1 -0
  261. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +1 -0
  262. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -0
  263. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -0
  264. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -0
  265. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -0
  266. package/plugins/manualColumnResize/manualColumnResize.js +36 -5
  267. package/plugins/manualColumnResize/manualColumnResize.mjs +36 -5
  268. package/plugins/manualRowMove/manualRowMove.js +31 -12
  269. package/plugins/manualRowMove/manualRowMove.mjs +32 -13
  270. package/plugins/manualRowResize/manualRowResize.js +40 -9
  271. package/plugins/manualRowResize/manualRowResize.mjs +40 -9
  272. package/plugins/mergeCells/calculations/autofill.js +1 -0
  273. package/plugins/mergeCells/calculations/autofill.mjs +1 -0
  274. package/plugins/mergeCells/cellsCollection.js +1 -0
  275. package/plugins/mergeCells/cellsCollection.mjs +1 -0
  276. package/plugins/mergeCells/mergeCells.js +6 -2
  277. package/plugins/mergeCells/mergeCells.mjs +6 -2
  278. package/plugins/multiColumnSorting/multiColumnSorting.js +42 -3
  279. package/plugins/multiColumnSorting/multiColumnSorting.mjs +42 -3
  280. package/plugins/multiColumnSorting/rootComparator.js +1 -0
  281. package/plugins/multiColumnSorting/rootComparator.mjs +1 -0
  282. package/plugins/nestedHeaders/nestedHeaders.js +129 -6
  283. package/plugins/nestedHeaders/nestedHeaders.mjs +129 -6
  284. package/plugins/nestedHeaders/stateManager/headersTree.js +24 -26
  285. package/plugins/nestedHeaders/stateManager/headersTree.mjs +21 -23
  286. package/plugins/nestedHeaders/stateManager/index.js +40 -3
  287. package/plugins/nestedHeaders/stateManager/index.mjs +37 -0
  288. package/plugins/nestedHeaders/stateManager/matrixGenerator.js +1 -0
  289. package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +2 -1
  290. package/plugins/nestedHeaders/stateManager/settingsNormalizer.mjs +1 -0
  291. package/plugins/nestedHeaders/utils/ghostTable.js +30 -35
  292. package/plugins/nestedHeaders/utils/ghostTable.mjs +30 -35
  293. package/plugins/nestedRows/data/dataManager.js +1 -0
  294. package/plugins/nestedRows/data/dataManager.mjs +1 -0
  295. package/plugins/nestedRows/nestedRows.js +53 -7
  296. package/plugins/nestedRows/nestedRows.mjs +53 -7
  297. package/plugins/nestedRows/ui/collapsing.js +1 -0
  298. package/plugins/nestedRows/ui/collapsing.mjs +1 -0
  299. package/plugins/nestedRows/utils/rowMoveController.js +1 -0
  300. package/plugins/nestedRows/utils/rowMoveController.mjs +1 -0
  301. package/plugins/persistentState/storage.js +1 -0
  302. package/plugins/persistentState/storage.mjs +1 -0
  303. package/plugins/registry.js +4 -1
  304. package/plugins/registry.mjs +1 -0
  305. package/plugins/undoRedo/undoRedo.js +1 -1
  306. package/plugins/undoRedo/undoRedo.mjs +1 -1
  307. package/renderers/baseRenderer/baseRenderer.js +0 -3
  308. package/renderers/baseRenderer/baseRenderer.mjs +0 -3
  309. package/renderers/checkboxRenderer/checkboxRenderer.js +2 -2
  310. package/renderers/checkboxRenderer/checkboxRenderer.mjs +1 -1
  311. package/selection/highlight/highlight.js +120 -98
  312. package/selection/highlight/highlight.mjs +118 -96
  313. package/selection/highlight/visualSelection.js +30 -17
  314. package/selection/highlight/visualSelection.mjs +30 -17
  315. package/selection/mouseEventHandler.js +1 -1
  316. package/selection/mouseEventHandler.mjs +1 -1
  317. package/selection/range.js +8 -8
  318. package/selection/range.mjs +8 -8
  319. package/selection/selection.js +246 -153
  320. package/selection/selection.mjs +247 -154
  321. package/selection/transformation.js +233 -96
  322. package/selection/transformation.mjs +230 -93
  323. package/selection/utils.js +12 -35
  324. package/selection/utils.mjs +13 -35
  325. package/settings.d.ts +2 -1
  326. package/shortcutContexts/commands/editor/closeAndSave.js +15 -0
  327. package/shortcutContexts/commands/editor/closeAndSave.mjs +10 -0
  328. package/shortcutContexts/commands/editor/closeWithoutSaving.js +13 -0
  329. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  330. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  331. package/shortcutContexts/commands/editor/fastOpen.mjs +11 -0
  332. package/shortcutContexts/commands/editor/index.js +16 -0
  333. package/shortcutContexts/commands/editor/index.mjs +12 -0
  334. package/shortcutContexts/commands/editor/open.js +29 -0
  335. package/shortcutContexts/commands/editor/open.mjs +24 -0
  336. package/shortcutContexts/commands/emptySelectedCells.js +12 -0
  337. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  338. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  339. package/shortcutContexts/commands/extendCellsSelection/down.mjs +10 -0
  340. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +21 -0
  341. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +16 -0
  342. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  343. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  344. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  345. package/shortcutContexts/commands/extendCellsSelection/left.mjs +10 -0
  346. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  347. package/shortcutContexts/commands/extendCellsSelection/right.mjs +10 -0
  348. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  349. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +14 -0
  350. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +22 -0
  351. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +17 -0
  352. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +17 -0
  353. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +12 -0
  354. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +17 -0
  355. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +12 -0
  356. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +40 -0
  357. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +35 -0
  358. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +40 -0
  359. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +35 -0
  360. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +22 -0
  361. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +17 -0
  362. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  363. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +14 -0
  364. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  365. package/shortcutContexts/commands/extendCellsSelection/up.mjs +10 -0
  366. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +21 -0
  367. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +16 -0
  368. package/shortcutContexts/commands/index.js +53 -0
  369. package/shortcutContexts/commands/index.mjs +49 -0
  370. package/shortcutContexts/commands/moveCellSelection/down.js +12 -0
  371. package/shortcutContexts/commands/moveCellSelection/down.mjs +7 -0
  372. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +29 -0
  373. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +24 -0
  374. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  375. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  376. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +13 -0
  377. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  378. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +13 -0
  379. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  380. package/shortcutContexts/commands/moveCellSelection/left.js +11 -0
  381. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  382. package/shortcutContexts/commands/moveCellSelection/right.js +11 -0
  383. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  384. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
  385. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +11 -0
  386. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
  387. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +12 -0
  388. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
  389. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +8 -0
  390. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
  391. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +11 -0
  392. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +36 -0
  393. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +31 -0
  394. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +36 -0
  395. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +31 -0
  396. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
  397. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +11 -0
  398. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
  399. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +13 -0
  400. package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
  401. package/shortcutContexts/commands/moveCellSelection/up.mjs +7 -0
  402. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +29 -0
  403. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +24 -0
  404. package/shortcutContexts/commands/populateSelectedCellsData.js +35 -0
  405. package/shortcutContexts/commands/populateSelectedCellsData.mjs +30 -0
  406. package/shortcutContexts/commands/scrollToFocusedCell.js +38 -0
  407. package/shortcutContexts/commands/scrollToFocusedCell.mjs +33 -0
  408. package/shortcutContexts/commands/selectAll.js +11 -0
  409. package/shortcutContexts/commands/selectAll.mjs +6 -0
  410. package/shortcutContexts/constants.js +19 -0
  411. package/shortcutContexts/constants.mjs +12 -0
  412. package/shortcutContexts/editor.js +29 -0
  413. package/shortcutContexts/editor.mjs +25 -0
  414. package/shortcutContexts/grid.js +252 -0
  415. package/shortcutContexts/grid.mjs +248 -0
  416. package/shortcutContexts/index.js +29 -0
  417. package/shortcutContexts/index.mjs +15 -0
  418. package/shortcuts/context.js +1 -0
  419. package/shortcuts/context.mjs +1 -0
  420. package/shortcuts/manager.js +2 -0
  421. package/shortcuts/manager.mjs +2 -0
  422. package/shortcuts/recorder.js +2 -2
  423. package/shortcuts/recorder.mjs +2 -2
  424. package/shortcuts/utils.js +21 -5
  425. package/shortcuts/utils.mjs +20 -4
  426. package/tableView.js +112 -82
  427. package/tableView.mjs +112 -82
  428. package/translations/changesObservable/observable.js +41 -46
  429. package/translations/changesObservable/observable.mjs +36 -41
  430. package/translations/changesObservable/observer.js +1 -1
  431. package/translations/indexMapper.d.ts +0 -2
  432. package/translations/indexMapper.js +38 -64
  433. package/translations/indexMapper.mjs +39 -64
  434. package/translations/maps/linkedPhysicalIndexToValueMap.js +1 -0
  435. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +1 -0
  436. package/translations/maps/utils/indexesSequence.js +1 -0
  437. package/translations/maps/utils/indexesSequence.mjs +1 -0
  438. package/translations/maps/utils/physicallyIndexed.js +1 -0
  439. package/translations/maps/utils/physicallyIndexed.mjs +1 -0
  440. package/utils/dataStructures/priorityMap.js +1 -0
  441. package/utils/dataStructures/priorityMap.mjs +1 -0
  442. package/utils/dataStructures/tree.js +16 -18
  443. package/utils/dataStructures/tree.mjs +16 -18
  444. package/utils/dataStructures/uniqueMap.js +1 -0
  445. package/utils/dataStructures/uniqueMap.mjs +1 -0
  446. package/utils/dataStructures/uniqueSet.js +1 -0
  447. package/utils/dataStructures/uniqueSet.mjs +1 -0
  448. package/utils/ghostTable.js +1 -0
  449. package/utils/ghostTable.mjs +1 -0
  450. package/utils/parseTable.js +5 -1
  451. package/utils/parseTable.mjs +5 -1
  452. package/utils/staticRegister.js +1 -0
  453. package/utils/staticRegister.mjs +1 -0
  454. package/focusManager.d.ts +0 -12
  455. package/focusManager.js +0 -275
  456. package/focusManager.mjs +0 -270
@@ -1,11 +1,5 @@
1
1
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
2
  var _templateObject;
3
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
5
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
7
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
8
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
9
3
  function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
10
4
  import "core-js/modules/es.array.iterator.js";
11
5
  import "core-js/modules/es.object.to-string.js";
@@ -26,21 +20,22 @@ import "core-js/modules/es.symbol.description.js";
26
20
  import "core-js/modules/es.array.slice.js";
27
21
  import "core-js/modules/es.object.freeze.js";
28
22
  import "core-js/modules/es.symbol.iterator.js";
29
- import "core-js/modules/es.function.name.js";
30
- import "core-js/modules/es.regexp.exec.js";
31
23
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
32
24
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
33
25
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
26
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
34
27
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
35
28
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
29
+ import { CellCoords, CellRange } from "./../3rdparty/walkontable/src/index.mjs";
36
30
  import Highlight, { AREA_TYPE, HEADER_TYPE, FOCUS_TYPE } from "./highlight/highlight.mjs";
37
31
  import SelectionRange from "./range.mjs";
38
32
  import { createObjectPropListener, mixin } from "./../helpers/object.mjs";
39
33
  import { isUndefined } from "./../helpers/mixed.mjs";
34
+ import { clamp } from "./../helpers/number.mjs";
40
35
  import { arrayEach } from "./../helpers/array.mjs";
41
36
  import localHooks from "./../mixins/localHooks.mjs";
42
37
  import Transformation from "./transformation.mjs";
43
- import { detectSelectionType, isValidCoord, normalizeSelectionFactory, SELECTION_TYPE_EMPTY, SELECTION_TYPE_UNRECOGNIZED } from "./utils.mjs";
38
+ import { detectSelectionType, normalizeSelectionFactory, SELECTION_TYPE_EMPTY, SELECTION_TYPE_UNRECOGNIZED } from "./utils.mjs";
44
39
  import { toSingleLine } from "./../helpers/templateLiteralTag.mjs";
45
40
  /**
46
41
  * @class Selection
@@ -55,57 +50,62 @@ var Selection = /*#__PURE__*/function () {
55
50
  *
56
51
  * @type {GridSettings}
57
52
  */
58
- this.settings = settings;
53
+ _defineProperty(this, "settings", void 0);
59
54
  /**
60
55
  * An additional object with dynamically defined properties which describes table state.
61
56
  *
62
57
  * @type {object}
63
58
  */
64
- this.tableProps = tableProps;
59
+ _defineProperty(this, "tableProps", void 0);
65
60
  /**
66
61
  * The flag which determines if the selection is in progress.
67
62
  *
68
63
  * @type {boolean}
69
64
  */
70
- this.inProgress = false;
65
+ _defineProperty(this, "inProgress", false);
71
66
  /**
72
- * The flag indicates that selection was performed by clicking the corner overlay.
67
+ * Selection data layer (handle visual coordinates).
73
68
  *
74
- * @type {boolean}
69
+ * @type {SelectionRange}
75
70
  */
76
- this.selectedByCorner = false;
71
+ _defineProperty(this, "selectedRange", new SelectionRange(function (highlight, from, to) {
72
+ return _this.tableProps.createCellRange(highlight, from, to);
73
+ }));
77
74
  /**
78
- * The collection of the selection layer levels where the whole row was selected using the row header or
79
- * the corner header.
75
+ * Visualization layer.
80
76
  *
81
- * @type {Set.<number>}
77
+ * @type {Highlight}
82
78
  */
83
- this.selectedByRowHeader = new Set();
79
+ _defineProperty(this, "highlight", void 0);
84
80
  /**
85
- * The collection of the selection layer levels where the whole column was selected using the column header or
86
- * the corner header.
81
+ * The module for modifying coordinates.
87
82
  *
88
- * @type {Set.<number>}
83
+ * @type {Transformation}
89
84
  */
90
- this.selectedByColumnHeader = new Set();
85
+ _defineProperty(this, "transformation", void 0);
91
86
  /**
92
- * Selection data layer (handle visual coordinates).
87
+ * The collection of the selection layer levels where the whole row was selected using the row header or
88
+ * the corner header.
93
89
  *
94
- * @type {SelectionRange}
90
+ * @type {Set<number>}
95
91
  */
96
- this.selectedRange = new SelectionRange(function (highlight, from, to) {
97
- return _this.tableProps.createCellRange(highlight, from, to);
98
- });
92
+ _defineProperty(this, "selectedByRowHeader", new Set());
99
93
  /**
100
- * Visualization layer.
94
+ * The collection of the selection layer levels where the whole column was selected using the column header or
95
+ * the corner header.
101
96
  *
102
- * @type {Highlight}
97
+ * @type {Set<number>}
103
98
  */
99
+ _defineProperty(this, "selectedByColumnHeader", new Set());
100
+ this.settings = settings;
101
+ this.tableProps = tableProps;
104
102
  this.highlight = new Highlight({
105
103
  headerClassName: settings.currentHeaderClassName,
106
104
  activeHeaderClassName: settings.activeHeaderClassName,
107
105
  rowClassName: settings.currentRowClassName,
108
106
  columnClassName: settings.currentColClassName,
107
+ rowIndexMapper: this.tableProps.rowIndexMapper,
108
+ columnIndexMapper: this.tableProps.columnIndexMapper,
109
109
  disabledCellSelection: function disabledCellSelection(row, column) {
110
110
  return _this.tableProps.isDisabledCellSelection(row, column);
111
111
  },
@@ -126,25 +126,16 @@ var Selection = /*#__PURE__*/function () {
126
126
  },
127
127
  createCellRange: function createCellRange(highlight, from, to) {
128
128
  return _this.tableProps.createCellRange(highlight, from, to);
129
- },
130
- rowIndexMapper: function rowIndexMapper() {
131
- return _this.tableProps.rowIndexMapper();
132
- },
133
- columnIndexMapper: function columnIndexMapper() {
134
- return _this.tableProps.columnIndexMapper();
135
129
  }
136
130
  });
137
- /**
138
- * The module for modifying coordinates.
139
- *
140
- * @type {Transformation}
141
- */
142
131
  this.transformation = new Transformation(this.selectedRange, {
143
- countRows: function countRows() {
144
- return _this.tableProps.countRowsTranslated();
132
+ rowIndexMapper: this.tableProps.rowIndexMapper,
133
+ columnIndexMapper: this.tableProps.columnIndexMapper,
134
+ countRenderableRows: function countRenderableRows() {
135
+ return _this.tableProps.countRenderableRows();
145
136
  },
146
- countCols: function countCols() {
147
- return _this.tableProps.countColsTranslated();
137
+ countRenderableColumns: function countRenderableColumns() {
138
+ return _this.tableProps.countRenderableColumns();
148
139
  },
149
140
  countRowHeaders: function countRowHeaders() {
150
141
  return _this.tableProps.countRowHeaders();
@@ -161,6 +152,9 @@ var Selection = /*#__PURE__*/function () {
161
152
  createCellCoords: function createCellCoords(row, column) {
162
153
  return _this.tableProps.createCellCoords(row, column);
163
154
  },
155
+ navigableHeaders: function navigableHeaders() {
156
+ return settings.navigableHeaders;
157
+ },
164
158
  fixedRowsBottom: function fixedRowsBottom() {
165
159
  return settings.fixedRowsBottom;
166
160
  },
@@ -227,7 +221,7 @@ var Selection = /*#__PURE__*/function () {
227
221
  }
228
222
 
229
223
  /**
230
- * Indicate that selection process began. It sets internaly `.inProgress` property to `true`.
224
+ * Indicate that selection process began. It sets internally `.inProgress` property to `true`.
231
225
  */
232
226
  }, {
233
227
  key: "begin",
@@ -236,7 +230,7 @@ var Selection = /*#__PURE__*/function () {
236
230
  }
237
231
 
238
232
  /**
239
- * Indicate that selection process finished. It sets internaly `.inProgress` property to `false`.
233
+ * Indicate that selection process finished. It sets internally `.inProgress` property to `false`.
240
234
  */
241
235
  }, {
242
236
  key: "finish",
@@ -265,35 +259,27 @@ var Selection = /*#__PURE__*/function () {
265
259
  * the default trigger will be used.
266
260
  * @param {boolean} [fragment=false] If `true`, the selection will be treated as a partial selection where the
267
261
  * `setRangeEnd` method won't be called on every `setRangeStart` call.
262
+ * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
268
263
  */
269
264
  }, {
270
265
  key: "setRangeStart",
271
266
  value: function setRangeStart(coords, multipleSelection) {
272
267
  var fragment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
268
+ var highlightCoords = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : coords;
273
269
  var isMultipleMode = this.settings.selectionMode === 'multiple';
274
270
  var isMultipleSelection = isUndefined(multipleSelection) ? this.tableProps.getShortcutManager().isCtrlPressed() : multipleSelection;
275
- var isRowNegative = coords.row < 0;
276
- var isColumnNegative = coords.col < 0;
277
- var selectedByCorner = isRowNegative && isColumnNegative;
278
271
  // We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords
279
272
  // should be handled by next methods.
280
273
  var coordsClone = coords.clone();
281
- this.selectedByCorner = selectedByCorner;
282
274
  this.runLocalHooks("beforeSetRangeStart".concat(fragment ? 'Only' : ''), coordsClone);
283
275
  if (!isMultipleMode || isMultipleMode && !isMultipleSelection && isUndefined(multipleSelection)) {
284
276
  this.selectedRange.clear();
285
277
  }
286
- this.selectedRange.add(coordsClone);
278
+ this.selectedRange.add(coordsClone).current().setHighlight(highlightCoords.clone());
287
279
  if (this.getLayerLevel() === 0) {
288
280
  this.selectedByRowHeader.clear();
289
281
  this.selectedByColumnHeader.clear();
290
282
  }
291
- if (!selectedByCorner && isColumnNegative) {
292
- this.selectedByRowHeader.add(this.getLayerLevel());
293
- }
294
- if (!selectedByCorner && isRowNegative) {
295
- this.selectedByColumnHeader.add(this.getLayerLevel());
296
- }
297
283
  if (!fragment) {
298
284
  this.setRangeEnd(coords);
299
285
  }
@@ -306,11 +292,13 @@ var Selection = /*#__PURE__*/function () {
306
292
  * @param {boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works
307
293
  * only when 'selectionMode' is set as 'multiple'. If the argument is not defined
308
294
  * the default trigger will be used.
295
+ * @param {CellCoords} [highlightCoords] If set, allows changing the coordinates of the highlight/focus cell.
309
296
  */
310
297
  }, {
311
298
  key: "setRangeStartOnly",
312
299
  value: function setRangeStartOnly(coords, multipleSelection) {
313
- this.setRangeStart(coords, multipleSelection, true);
300
+ var highlightCoords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : coords;
301
+ this.setRangeStart(coords, multipleSelection, true, highlightCoords);
314
302
  }
315
303
 
316
304
  /**
@@ -324,21 +312,39 @@ var Selection = /*#__PURE__*/function () {
324
312
  if (this.selectedRange.isEmpty()) {
325
313
  return;
326
314
  }
327
-
328
- // We are creating copy. We would like to modify just the end of the selection by below hook. Then original coords
329
- // should be handled by next methods.
330
315
  var coordsClone = coords.clone();
316
+ var countRows = this.tableProps.countRows();
317
+ var countCols = this.tableProps.countCols();
318
+ var isSingle = this.selectedRange.current().clone().setTo(coords).isSingleHeader();
319
+
320
+ // Ignore processing the end range when the header selection starts overlapping the corner and
321
+ // the selection is not a single header highlight.
322
+ if ((countRows > 0 || countCols > 0) && (countRows === 0 && coordsClone.col < 0 && !isSingle || countCols === 0 && coordsClone.row < 0 && !isSingle)) {
323
+ return;
324
+ }
331
325
  this.runLocalHooks('beforeSetRangeEnd', coordsClone);
332
326
  this.begin();
333
327
  var cellRange = this.selectedRange.current();
334
- if (this.settings.selectionMode !== 'single') {
335
- cellRange.setTo(this.tableProps.createCellCoords(coordsClone.row, coordsClone.col));
328
+ if (!this.settings.navigableHeaders) {
329
+ cellRange.highlight.normalize();
330
+ }
331
+ if (this.settings.selectionMode === 'single') {
332
+ cellRange.setFrom(cellRange.highlight);
333
+ cellRange.setTo(cellRange.highlight);
334
+ } else {
335
+ cellRange.setTo(coordsClone);
336
336
  }
337
337
 
338
- // Set up current selection.
339
- this.highlight.getFocus().clear();
338
+ // Prevent creating "area" selection that overlaps headers.
339
+ if (countRows > 0 && countCols > 0) {
340
+ if (!this.settings.navigableHeaders || this.settings.navigableHeaders && !cellRange.isSingleHeader()) {
341
+ cellRange.to.normalize();
342
+ }
343
+ }
344
+ var focusHighlight = this.highlight.getFocus();
345
+ focusHighlight.clear();
340
346
  if (this.highlight.isEnabledFor(FOCUS_TYPE, cellRange.highlight)) {
341
- this.highlight.getFocus().add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
347
+ focusHighlight.add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
342
348
  }
343
349
  var layerLevel = this.getLayerLevel();
344
350
 
@@ -363,6 +369,9 @@ var Selection = /*#__PURE__*/function () {
363
369
  arrayEach(this.highlight.getActiveColumnHeaders(), function (highlight) {
364
370
  return void highlight.clear();
365
371
  });
372
+ arrayEach(this.highlight.getActiveCornerHeaders(), function (highlight) {
373
+ return void highlight.clear();
374
+ });
366
375
  arrayEach(this.highlight.getRowHighlights(), function (highlight) {
367
376
  return void highlight.clear();
368
377
  });
@@ -377,6 +386,7 @@ var Selection = /*#__PURE__*/function () {
377
386
  var columnHeaderHighlight = this.highlight.createColumnHeader();
378
387
  var activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
379
388
  var activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
389
+ var activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
380
390
  var rowHighlight = this.highlight.createRowHighlight();
381
391
  var columnHighlight = this.highlight.createColumnHighlight();
382
392
  areaHighlight.clear();
@@ -385,6 +395,7 @@ var Selection = /*#__PURE__*/function () {
385
395
  columnHeaderHighlight.clear();
386
396
  activeRowHeaderHighlight.clear();
387
397
  activeColumnHeaderHighlight.clear();
398
+ activeCornerHeaderHighlight.clear();
388
399
  rowHighlight.clear();
389
400
  columnHighlight.clear();
390
401
  if (this.highlight.isEnabledFor(AREA_TYPE, cellRange.highlight) && (this.isMultiple() || layerLevel >= 1)) {
@@ -406,36 +417,33 @@ var Selection = /*#__PURE__*/function () {
406
417
  }
407
418
  }
408
419
  if (this.highlight.isEnabledFor(HEADER_TYPE, cellRange.highlight)) {
409
- var rowCoordsFrom = this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), -1);
410
- var rowCoordsTo = this.tableProps.createCellCoords(cellRange.to.row, -1);
411
- var columnCoordsFrom = this.tableProps.createCellCoords(-1, Math.max(cellRange.from.col, 0));
412
- var columnCoordsTo = this.tableProps.createCellCoords(-1, cellRange.to.col);
413
- if (this.settings.selectionMode === 'single') {
414
- rowHeaderHighlight.add(rowCoordsFrom).commit();
415
- columnHeaderHighlight.add(columnCoordsFrom).commit();
416
- rowHighlight.add(rowCoordsFrom).commit();
417
- columnHighlight.add(columnCoordsFrom).commit();
418
- } else {
419
- rowHeaderHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
420
- columnHeaderHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
421
- rowHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
422
- columnHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
423
- }
424
- if (this.isEntireRowSelected()) {
425
- var isRowSelected = this.tableProps.countCols() === cellRange.getWidth();
426
-
427
- // Make sure that the whole row is selected (in case where selectionMode is set to 'single')
428
- if (isRowSelected) {
429
- activeRowHeaderHighlight.add(this.tableProps.createCellCoords(cellRange.from.row, Math.min(-this.tableProps.countRowHeaders(), -1))).add(this.tableProps.createCellCoords(cellRange.to.row, -1)).commit();
420
+ if (!cellRange.isSingleHeader()) {
421
+ var rowCoordsFrom = this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), -1);
422
+ var rowCoordsTo = this.tableProps.createCellCoords(cellRange.to.row, -1);
423
+ var columnCoordsFrom = this.tableProps.createCellCoords(-1, Math.max(cellRange.from.col, 0));
424
+ var columnCoordsTo = this.tableProps.createCellCoords(-1, cellRange.to.col);
425
+ if (this.settings.selectionMode === 'single') {
426
+ rowHeaderHighlight.add(rowCoordsFrom).commit();
427
+ columnHeaderHighlight.add(columnCoordsFrom).commit();
428
+ rowHighlight.add(rowCoordsFrom).commit();
429
+ columnHighlight.add(columnCoordsFrom).commit();
430
+ } else {
431
+ rowHeaderHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
432
+ columnHeaderHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
433
+ rowHighlight.add(rowCoordsFrom).add(rowCoordsTo).commit();
434
+ columnHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
430
435
  }
431
436
  }
432
- if (this.isEntireColumnSelected()) {
433
- var isColumnSelected = this.tableProps.countRows() === cellRange.getHeight();
434
-
435
- // Make sure that the whole column is selected (in case where selectionMode is set to 'single')
436
- if (isColumnSelected) {
437
- activeColumnHeaderHighlight.add(this.tableProps.createCellCoords(Math.min(-this.tableProps.countColHeaders(), -1), cellRange.from.col)).add(this.tableProps.createCellCoords(-1, cellRange.to.col)).commit();
438
- }
437
+ var highlightRowHeaders = this.isEntireRowSelected() && (countCols > 0 && countCols === cellRange.getWidth() || countCols === 0 && (this.isSelectedByRowHeader() || this.isSelectedByCorner()));
438
+ var highlightColumnHeaders = this.isEntireColumnSelected() && (countRows > 0 && countRows === cellRange.getHeight() || countRows === 0 && (this.isSelectedByColumnHeader() || this.isSelectedByCorner()));
439
+ if (highlightRowHeaders) {
440
+ activeRowHeaderHighlight.add(this.tableProps.createCellCoords(Math.max(cellRange.from.row, 0), Math.min(-this.tableProps.countRowHeaders(), -1))).add(this.tableProps.createCellCoords(Math.max(cellRange.to.row, 0), -1)).commit();
441
+ }
442
+ if (highlightColumnHeaders) {
443
+ activeColumnHeaderHighlight.add(this.tableProps.createCellCoords(Math.min(-this.tableProps.countColHeaders(), -1), Math.max(cellRange.from.col, 0))).add(this.tableProps.createCellCoords(-1, Math.max(cellRange.to.col, 0))).commit();
444
+ }
445
+ if (highlightRowHeaders && highlightColumnHeaders) {
446
+ activeCornerHeaderHighlight.add(this.tableProps.createCellCoords(-this.tableProps.countColHeaders(), -this.tableProps.countRowHeaders())).add(this.tableProps.createCellCoords(-1, -1)).commit();
439
447
  }
440
448
  }
441
449
  this.runLocalHooks('afterSetRangeEnd', coords);
@@ -460,14 +468,14 @@ var Selection = /*#__PURE__*/function () {
460
468
  *
461
469
  * @param {number} rowDelta Rows number to move, value can be passed as negative number.
462
470
  * @param {number} colDelta Columns number to move, value can be passed as negative number.
463
- * @param {boolean} [force=false] If `true` the new rows/columns will be created if necessary. Otherwise, row/column will
464
- * be created according to `minSpareRows/minSpareCols` settings of Handsontable.
471
+ * @param {boolean} [createMissingRecords=false] If `true` the new rows/columns will be created if necessary.
472
+ * Otherwise, row/column will be created according to `minSpareRows/minSpareCols` settings of Handsontable.
465
473
  */
466
474
  }, {
467
475
  key: "transformStart",
468
476
  value: function transformStart(rowDelta, colDelta) {
469
- var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
470
- this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, force));
477
+ var createMissingRecords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
478
+ this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, createMissingRecords));
471
479
  }
472
480
 
473
481
  /**
@@ -516,7 +524,7 @@ var Selection = /*#__PURE__*/function () {
516
524
  key: "isSelectedByRowHeader",
517
525
  value: function isSelectedByRowHeader() {
518
526
  var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
519
- return !this.isSelectedByCorner(layerLevel) && this.isEntireRowSelected(layerLevel);
527
+ return !this.isSelectedByCorner(layerLevel) && (layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel));
520
528
  }
521
529
 
522
530
  /**
@@ -529,8 +537,22 @@ var Selection = /*#__PURE__*/function () {
529
537
  }, {
530
538
  key: "isEntireRowSelected",
531
539
  value: function isEntireRowSelected() {
540
+ var _this2 = this;
532
541
  var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
533
- return layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel);
542
+ var tester = function tester(range) {
543
+ var _range$getOuterTopSta = range.getOuterTopStartCorner(),
544
+ col = _range$getOuterTopSta.col;
545
+ var rowHeaders = _this2.tableProps.countRowHeaders();
546
+ var countCols = _this2.tableProps.countCols();
547
+ return (rowHeaders > 0 && col < 0 || rowHeaders === 0) && range.getWidth() === countCols;
548
+ };
549
+ if (layerLevel === -1) {
550
+ return Array.from(this.selectedRange).some(function (range) {
551
+ return tester(range);
552
+ });
553
+ }
554
+ var range = this.selectedRange.peekByIndex(layerLevel);
555
+ return range ? tester(range) : false;
534
556
  }
535
557
 
536
558
  /**
@@ -545,7 +567,7 @@ var Selection = /*#__PURE__*/function () {
545
567
  key: "isSelectedByColumnHeader",
546
568
  value: function isSelectedByColumnHeader() {
547
569
  var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
548
- return !this.isSelectedByCorner() && this.isEntireColumnSelected(layerLevel);
570
+ return !this.isSelectedByCorner() && (layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel));
549
571
  }
550
572
 
551
573
  /**
@@ -558,8 +580,22 @@ var Selection = /*#__PURE__*/function () {
558
580
  }, {
559
581
  key: "isEntireColumnSelected",
560
582
  value: function isEntireColumnSelected() {
583
+ var _this3 = this;
561
584
  var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();
562
- return layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel);
585
+ var tester = function tester(range) {
586
+ var _range$getOuterTopSta2 = range.getOuterTopStartCorner(),
587
+ row = _range$getOuterTopSta2.row;
588
+ var colHeaders = _this3.tableProps.countColHeaders();
589
+ var countRows = _this3.tableProps.countRows();
590
+ return (colHeaders > 0 && row < 0 || colHeaders === 0) && range.getHeight() === countRows;
591
+ };
592
+ if (layerLevel === -1) {
593
+ return Array.from(this.selectedRange).some(function (range) {
594
+ return tester(range);
595
+ });
596
+ }
597
+ var range = this.selectedRange.peekByIndex(layerLevel);
598
+ return range ? tester(range) : false;
563
599
  }
564
600
 
565
601
  /**
@@ -581,7 +617,7 @@ var Selection = /*#__PURE__*/function () {
581
617
  }, {
582
618
  key: "isSelectedByCorner",
583
619
  value: function isSelectedByCorner() {
584
- return this.selectedByCorner;
620
+ return this.selectedByColumnHeader.has(this.getLayerLevel()) && this.selectedByRowHeader.has(this.getLayerLevel());
585
621
  }
586
622
 
587
623
  /**
@@ -650,33 +686,49 @@ var Selection = /*#__PURE__*/function () {
650
686
  }
651
687
 
652
688
  /**
653
- * Select all cells.
689
+ * Selects all cells and headers.
654
690
  *
655
- * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers, `false`
656
- * otherwise.
657
- * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column headers, `false`
658
- * otherwise.
691
+ * @param {boolean} [includeRowHeaders=false] `true` If the selection should include the row headers,
692
+ * `false` otherwise.
693
+ * @param {boolean} [includeColumnHeaders=false] `true` If the selection should include the column
694
+ * headers, `false` otherwise.
695
+ * @param {{row: number, col: number}} [focusPosition] The argument allows changing the cell/header
696
+ * focus position. The value takes an object with a `row` and `col` properties from -N to N, where
697
+ * negative values point to the headers and positive values point to the cell range.
659
698
  */
660
699
  }, {
661
700
  key: "selectAll",
662
701
  value: function selectAll() {
663
702
  var includeRowHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
664
703
  var includeColumnHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
704
+ var focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
705
+ row: this.tableProps.countColHeaders() > 0 ? -this.tableProps.countColHeaders() : 0,
706
+ col: this.tableProps.countRowHeaders() > 0 ? -this.tableProps.countRowHeaders() : 0
707
+ };
665
708
  var nrOfRows = this.tableProps.countRows();
666
709
  var nrOfColumns = this.tableProps.countCols();
710
+ var countRowHeaders = this.tableProps.countRowHeaders();
711
+ var countColHeaders = this.tableProps.countColHeaders();
712
+ var rowFrom = includeRowHeaders ? -countColHeaders : 0;
713
+ var columnFrom = includeColumnHeaders ? -countRowHeaders : 0;
667
714
 
668
715
  // We can't select cells when there is no data.
669
- if (!includeRowHeaders && !includeColumnHeaders && (nrOfRows === 0 || nrOfColumns === 0)) {
716
+ if (rowFrom === 0 && columnFrom === 0 && (nrOfRows === 0 || nrOfColumns === 0)) {
670
717
  return;
671
718
  }
672
- var rowFrom = includeColumnHeaders ? -this.tableProps.countColHeaders() : 0;
673
- var columnFrom = includeRowHeaders ? -this.tableProps.countRowHeaders() : 0;
719
+ var highlightRow = Number.isInteger(focusPosition.row) ? focusPosition.row : 0;
720
+ var highlightColumn = Number.isInteger(focusPosition.col) ? focusPosition.col : 0;
674
721
  var startCoords = this.tableProps.createCellCoords(rowFrom, columnFrom);
722
+ var highlight = this.tableProps.createCellCoords(clamp(highlightRow, rowFrom, nrOfRows - 1), clamp(highlightColumn, columnFrom, nrOfColumns - 1));
675
723
  var endCoords = this.tableProps.createCellCoords(nrOfRows - 1, nrOfColumns - 1);
676
724
  this.clear();
677
- this.setRangeStartOnly(startCoords);
678
- this.selectedByRowHeader.add(this.getLayerLevel());
679
- this.selectedByColumnHeader.add(this.getLayerLevel());
725
+ this.setRangeStartOnly(startCoords, void 0, highlight);
726
+ if (columnFrom < 0) {
727
+ this.selectedByRowHeader.add(this.getLayerLevel());
728
+ }
729
+ if (rowFrom < 0) {
730
+ this.selectedByColumnHeader.add(this.getLayerLevel());
731
+ }
680
732
  this.setRangeEnd(endCoords);
681
733
  this.finish();
682
734
  }
@@ -693,7 +745,7 @@ var Selection = /*#__PURE__*/function () {
693
745
  }, {
694
746
  key: "selectCells",
695
747
  value: function selectCells(selectionRanges) {
696
- var _this2 = this;
748
+ var _this4 = this;
697
749
  var selectionType = detectSelectionType(selectionRanges);
698
750
  if (selectionType === SELECTION_TYPE_EMPTY) {
699
751
  return false;
@@ -702,36 +754,33 @@ var Selection = /*#__PURE__*/function () {
702
754
  }
703
755
  var selectionSchemaNormalizer = normalizeSelectionFactory(selectionType, {
704
756
  propToCol: function propToCol(prop) {
705
- return _this2.tableProps.propToCol(prop);
757
+ return _this4.tableProps.propToCol(prop);
706
758
  },
707
759
  keepDirection: true
708
760
  });
709
- var nrOfRows = this.tableProps.countRows();
710
- var nrOfColumns = this.tableProps.countCols();
761
+ var navigableHeaders = this.settings.navigableHeaders;
762
+ var tableParams = {
763
+ countRows: this.tableProps.countRows(),
764
+ countCols: this.tableProps.countCols(),
765
+ countRowHeaders: navigableHeaders ? this.tableProps.countRowHeaders() : 0,
766
+ countColHeaders: navigableHeaders ? this.tableProps.countColHeaders() : 0
767
+ };
711
768
 
712
769
  // Check if every layer of the coordinates are valid.
713
770
  var isValid = !selectionRanges.some(function (selection) {
714
- var _selectionSchemaNorma = selectionSchemaNormalizer(selection),
715
- _selectionSchemaNorma2 = _slicedToArray(_selectionSchemaNorma, 4),
716
- rowStart = _selectionSchemaNorma2[0],
717
- columnStart = _selectionSchemaNorma2[1],
718
- rowEnd = _selectionSchemaNorma2[2],
719
- columnEnd = _selectionSchemaNorma2[3];
720
- var _isValid = isValidCoord(rowStart, nrOfRows) && isValidCoord(columnStart, nrOfColumns) && isValidCoord(rowEnd, nrOfRows) && isValidCoord(columnEnd, nrOfColumns);
721
- return !_isValid;
771
+ var cellRange = selectionSchemaNormalizer(selection);
772
+ var rangeValidity = cellRange.isValid(tableParams);
773
+ return !(rangeValidity && !cellRange.containsHeaders() || rangeValidity && cellRange.containsHeaders() && cellRange.isSingleHeader());
722
774
  });
723
775
  if (isValid) {
724
776
  this.clear();
725
777
  arrayEach(selectionRanges, function (selection) {
726
- var _selectionSchemaNorma3 = selectionSchemaNormalizer(selection),
727
- _selectionSchemaNorma4 = _slicedToArray(_selectionSchemaNorma3, 4),
728
- rowStart = _selectionSchemaNorma4[0],
729
- columnStart = _selectionSchemaNorma4[1],
730
- rowEnd = _selectionSchemaNorma4[2],
731
- columnEnd = _selectionSchemaNorma4[3];
732
- _this2.setRangeStartOnly(_this2.tableProps.createCellCoords(rowStart, columnStart), false);
733
- _this2.setRangeEnd(_this2.tableProps.createCellCoords(rowEnd, columnEnd));
734
- _this2.finish();
778
+ var _selectionSchemaNorma = selectionSchemaNormalizer(selection),
779
+ from = _selectionSchemaNorma.from,
780
+ to = _selectionSchemaNorma.to;
781
+ _this4.setRangeStartOnly(from.clone(), false);
782
+ _this4.setRangeEnd(to.clone());
783
+ _this4.finish();
735
784
  });
736
785
  }
737
786
  return isValid;
@@ -743,24 +792,45 @@ var Selection = /*#__PURE__*/function () {
743
792
  *
744
793
  * @param {number|string} startColumn Visual column index or column property from which the selection starts.
745
794
  * @param {number|string} [endColumn] Visual column index or column property from to the selection finishes.
746
- * @param {number} [headerLevel=-1] A row header index that triggers the column selection. The value can
747
- * take -1 to -N, where -1 means the header closest to the cells.
748
- *
795
+ * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
796
+ * The value can take visual row index from -N to N, where negative values
797
+ * point to the headers and positive values point to the cell range.
749
798
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
750
799
  */
751
800
  }, {
752
801
  key: "selectColumns",
753
802
  value: function selectColumns(startColumn) {
754
803
  var endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;
755
- var headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
804
+ var focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
756
805
  var start = typeof startColumn === 'string' ? this.tableProps.propToCol(startColumn) : startColumn;
757
806
  var end = typeof endColumn === 'string' ? this.tableProps.propToCol(endColumn) : endColumn;
758
- var nrOfColumns = this.tableProps.countCols();
759
- var nrOfRows = this.tableProps.countRows();
760
- var isValid = isValidCoord(start, nrOfColumns) && isValidCoord(end, nrOfColumns);
807
+ var countRows = this.tableProps.countRows();
808
+ var countCols = this.tableProps.countCols();
809
+ var countColHeaders = this.tableProps.countColHeaders();
810
+ var columnHeaderLastIndex = countColHeaders === 0 ? 0 : -countColHeaders;
811
+ var fromCoords = new CellCoords(columnHeaderLastIndex, start);
812
+ var toCoords = new CellCoords(countRows - 1, end);
813
+ var isValid = new CellRange(fromCoords, fromCoords, toCoords).isValid({
814
+ countRows: countRows,
815
+ countCols: countCols,
816
+ countRowHeaders: 0,
817
+ countColHeaders: countColHeaders
818
+ });
761
819
  if (isValid) {
762
- this.setRangeStartOnly(this.tableProps.createCellCoords(headerLevel, start));
763
- this.setRangeEnd(this.tableProps.createCellCoords(nrOfRows - 1, end));
820
+ var fromRow = countColHeaders === 0 ? 0 : clamp(focusPosition, columnHeaderLastIndex, -1);
821
+ var toRow = countRows - 1;
822
+ var from = this.tableProps.createCellCoords(fromRow, start);
823
+ var to = this.tableProps.createCellCoords(toRow, end);
824
+ var highlight = this.tableProps.createCellCoords(clamp(focusPosition, columnHeaderLastIndex, countRows - 1), start);
825
+ this.runLocalHooks('beforeSelectColumns', from, to, highlight);
826
+
827
+ // disallow modifying row axis for that hooks
828
+ from.row = fromRow;
829
+ to.row = toRow;
830
+ this.setRangeStartOnly(from, void 0, highlight);
831
+ this.selectedByColumnHeader.add(this.getLayerLevel());
832
+ this.setRangeEnd(to);
833
+ this.runLocalHooks('afterSelectColumns', from, to, highlight);
764
834
  this.finish();
765
835
  }
766
836
  return isValid;
@@ -771,22 +841,43 @@ var Selection = /*#__PURE__*/function () {
771
841
  *
772
842
  * @param {number} startRow Visual row index from which the selection starts.
773
843
  * @param {number} [endRow] Visual row index from to the selection finishes.
774
- * @param {number} [headerLevel=-1] A column header index that triggers the row selection.
775
- * The value can take -1 to -N, where -1 means the header
776
- * closest to the cells.
844
+ * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
845
+ * The value can take visual column index from -N to N, where negative values
846
+ * point to the headers and positive values point to the cell range.
777
847
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
778
848
  */
779
849
  }, {
780
850
  key: "selectRows",
781
851
  value: function selectRows(startRow) {
782
852
  var endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;
783
- var headerLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1;
784
- var nrOfRows = this.tableProps.countRows();
785
- var nrOfColumns = this.tableProps.countCols();
786
- var isValid = isValidCoord(startRow, nrOfRows) && isValidCoord(endRow, nrOfRows);
853
+ var focusPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
854
+ var countRows = this.tableProps.countRows();
855
+ var countCols = this.tableProps.countCols();
856
+ var countRowHeaders = this.tableProps.countRowHeaders();
857
+ var rowHeaderLastIndex = countRowHeaders === 0 ? 0 : -countRowHeaders;
858
+ var fromCoords = new CellCoords(startRow, rowHeaderLastIndex);
859
+ var toCoords = new CellCoords(endRow, countCols - 1);
860
+ var isValid = new CellRange(fromCoords, fromCoords, toCoords).isValid({
861
+ countRows: countRows,
862
+ countCols: countCols,
863
+ countRowHeaders: countRowHeaders,
864
+ countColHeaders: 0
865
+ });
787
866
  if (isValid) {
788
- this.setRangeStartOnly(this.tableProps.createCellCoords(startRow, headerLevel));
789
- this.setRangeEnd(this.tableProps.createCellCoords(endRow, nrOfColumns - 1));
867
+ var fromColumn = countRowHeaders === 0 ? 0 : clamp(focusPosition, rowHeaderLastIndex, -1);
868
+ var toColumn = countCols - 1;
869
+ var from = this.tableProps.createCellCoords(startRow, fromColumn);
870
+ var to = this.tableProps.createCellCoords(endRow, toColumn);
871
+ var highlight = this.tableProps.createCellCoords(startRow, clamp(focusPosition, rowHeaderLastIndex, countCols - 1));
872
+ this.runLocalHooks('beforeSelectRows', from, to, highlight);
873
+
874
+ // disallow modifying column axis for that hooks
875
+ from.col = fromColumn;
876
+ to.col = toColumn;
877
+ this.setRangeStartOnly(from, void 0, highlight);
878
+ this.selectedByRowHeader.add(this.getLayerLevel());
879
+ this.setRangeEnd(to);
880
+ this.runLocalHooks('afterSelectRows', from, to, highlight);
790
881
  this.finish();
791
882
  }
792
883
  return isValid;
@@ -818,6 +909,7 @@ var Selection = /*#__PURE__*/function () {
818
909
  var columnHeaderHighlight = this.highlight.createColumnHeader();
819
910
  var activeRowHeaderHighlight = this.highlight.createActiveRowHeader();
820
911
  var activeColumnHeaderHighlight = this.highlight.createActiveColumnHeader();
912
+ var activeCornerHeaderHighlight = this.highlight.createActiveCornerHeader();
821
913
  var rowHighlight = this.highlight.createRowHighlight();
822
914
  var columnHighlight = this.highlight.createColumnHighlight();
823
915
  areaHighlight.commit();
@@ -826,6 +918,7 @@ var Selection = /*#__PURE__*/function () {
826
918
  columnHeaderHighlight.commit();
827
919
  activeRowHeaderHighlight.commit();
828
920
  activeColumnHeaderHighlight.commit();
921
+ activeCornerHeaderHighlight.commit();
829
922
  rowHighlight.commit();
830
923
  columnHighlight.commit();
831
924
  }