handsontable 0.0.0-next-5a535ed-20240403 → 0.0.0-next-c2810a1-20240403

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

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/calculator/viewportColumns.js +12 -17
  2. package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +12 -17
  3. package/3rdparty/walkontable/src/calculator/viewportRows.js +10 -15
  4. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +10 -15
  5. package/3rdparty/walkontable/src/cell/coords.js +12 -17
  6. package/3rdparty/walkontable/src/cell/coords.mjs +12 -17
  7. package/3rdparty/walkontable/src/cell/range.d.ts +2 -1
  8. package/3rdparty/walkontable/src/cell/range.js +40 -28
  9. package/3rdparty/walkontable/src/cell/range.mjs +40 -28
  10. package/3rdparty/walkontable/src/core/_base.js +1 -1
  11. package/3rdparty/walkontable/src/core/_base.mjs +1 -1
  12. package/3rdparty/walkontable/src/event.js +72 -104
  13. package/3rdparty/walkontable/src/event.mjs +72 -104
  14. package/3rdparty/walkontable/src/overlay/inlineStart.js +15 -1
  15. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +16 -2
  16. package/3rdparty/walkontable/src/overlay/top.js +11 -0
  17. package/3rdparty/walkontable/src/overlay/top.mjs +12 -1
  18. package/3rdparty/walkontable/src/overlays.js +46 -4
  19. package/3rdparty/walkontable/src/overlays.mjs +46 -4
  20. package/3rdparty/walkontable/src/scroll.js +15 -17
  21. package/3rdparty/walkontable/src/scroll.mjs +15 -17
  22. package/3rdparty/walkontable/src/selection/manager.js +48 -69
  23. package/3rdparty/walkontable/src/selection/manager.mjs +48 -69
  24. package/3rdparty/walkontable/src/selection/scanner.js +33 -42
  25. package/3rdparty/walkontable/src/selection/scanner.mjs +33 -42
  26. package/3rdparty/walkontable/src/utils/columnStretching.js +27 -44
  27. package/3rdparty/walkontable/src/utils/columnStretching.mjs +27 -44
  28. package/3rdparty/walkontable/src/utils/orderView/view.js +1 -1
  29. package/3rdparty/walkontable/src/utils/orderView/view.mjs +1 -1
  30. package/base.js +2 -2
  31. package/base.mjs +2 -2
  32. package/core/viewportScroll/index.js +4 -1
  33. package/core/viewportScroll/index.mjs +4 -1
  34. package/core/viewportScroll/scrollStrategies/focusScroll.js +15 -0
  35. package/core/viewportScroll/scrollStrategies/focusScroll.mjs +11 -0
  36. package/core.d.ts +4 -3
  37. package/core.js +77 -22
  38. package/core.mjs +77 -22
  39. package/dataMap/dataSource.js +1 -1
  40. package/dataMap/dataSource.mjs +1 -1
  41. package/dataMap/metaManager/metaLayers/cellMeta.js +1 -1
  42. package/dataMap/metaManager/metaLayers/cellMeta.mjs +1 -1
  43. package/dataMap/metaManager/metaSchema.js +1 -1
  44. package/dataMap/metaManager/metaSchema.mjs +1 -1
  45. package/dataMap/replaceData.js +1 -1
  46. package/dataMap/replaceData.mjs +1 -1
  47. package/dist/handsontable.css +4 -4
  48. package/dist/handsontable.full.css +4 -4
  49. package/dist/handsontable.full.js +9063 -9122
  50. package/dist/handsontable.full.min.css +3 -3
  51. package/dist/handsontable.full.min.js +292 -292
  52. package/dist/handsontable.js +6968 -6574
  53. package/dist/handsontable.min.css +3 -3
  54. package/dist/handsontable.min.js +25 -25
  55. package/dist/languages/all.min.js +1 -1
  56. package/dist/languages/ar-AR.min.js +1 -1
  57. package/dist/languages/cs-CZ.min.js +1 -1
  58. package/dist/languages/de-CH.min.js +1 -1
  59. package/dist/languages/de-DE.min.js +1 -1
  60. package/dist/languages/en-US.min.js +1 -1
  61. package/dist/languages/es-MX.min.js +1 -1
  62. package/dist/languages/fr-FR.min.js +1 -1
  63. package/dist/languages/hr-HR.min.js +1 -1
  64. package/dist/languages/it-IT.min.js +1 -1
  65. package/dist/languages/ja-JP.min.js +1 -1
  66. package/dist/languages/ko-KR.min.js +1 -1
  67. package/dist/languages/lv-LV.min.js +1 -1
  68. package/dist/languages/nb-NO.min.js +1 -1
  69. package/dist/languages/nl-NL.min.js +1 -1
  70. package/dist/languages/pl-PL.min.js +1 -1
  71. package/dist/languages/pt-BR.min.js +1 -1
  72. package/dist/languages/ru-RU.min.js +1 -1
  73. package/dist/languages/sr-SP.min.js +1 -1
  74. package/dist/languages/zh-CN.min.js +1 -1
  75. package/dist/languages/zh-TW.min.js +1 -1
  76. package/editorManager.js +25 -23
  77. package/editorManager.mjs +25 -23
  78. package/editors/autocompleteEditor/autocompleteEditor.js +6 -10
  79. package/editors/autocompleteEditor/autocompleteEditor.mjs +6 -10
  80. package/editors/selectEditor/selectEditor.js +20 -19
  81. package/editors/selectEditor/selectEditor.mjs +20 -19
  82. package/eventManager.js +1 -1
  83. package/eventManager.mjs +1 -1
  84. package/focusManager.js +64 -82
  85. package/focusManager.mjs +64 -82
  86. package/helpers/dom/element.js +23 -1
  87. package/helpers/dom/element.mjs +21 -1
  88. package/helpers/mixed.js +1 -1
  89. package/helpers/mixed.mjs +1 -1
  90. package/helpers/object.js +2 -2
  91. package/helpers/object.mjs +2 -2
  92. package/i18n/languages/ar-AR.d.ts +5 -0
  93. package/i18n/languages/cs-CZ.d.ts +5 -0
  94. package/i18n/languages/hr-HR.d.ts +5 -0
  95. package/i18n/languages/sr-SP.d.ts +5 -0
  96. package/index.d.ts +10 -0
  97. package/package.json +7 -2
  98. package/pluginHooks.d.ts +4 -3
  99. package/pluginHooks.js +99 -38
  100. package/pluginHooks.mjs +99 -38
  101. package/plugins/autoColumnSize/autoColumnSize.js +49 -65
  102. package/plugins/autoColumnSize/autoColumnSize.mjs +49 -65
  103. package/plugins/autoRowSize/autoRowSize.js +28 -34
  104. package/plugins/autoRowSize/autoRowSize.mjs +28 -34
  105. package/plugins/autofill/autofill.js +30 -38
  106. package/plugins/autofill/autofill.mjs +30 -38
  107. package/plugins/base/base.js +12 -17
  108. package/plugins/base/base.mjs +12 -17
  109. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +5 -5
  110. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +5 -5
  111. package/plugins/collapsibleColumns/collapsibleColumns.js +59 -50
  112. package/plugins/collapsibleColumns/collapsibleColumns.mjs +59 -50
  113. package/plugins/columnSorting/columnSorting.js +49 -45
  114. package/plugins/columnSorting/columnSorting.mjs +49 -45
  115. package/plugins/columnSummary/columnSummary.js +22 -26
  116. package/plugins/columnSummary/columnSummary.mjs +22 -26
  117. package/plugins/comments/comments.js +116 -158
  118. package/plugins/comments/comments.mjs +116 -158
  119. package/plugins/contextMenu/contextMenu.js +20 -26
  120. package/plugins/contextMenu/contextMenu.mjs +20 -26
  121. package/plugins/contextMenu/itemsFactory.js +1 -1
  122. package/plugins/contextMenu/itemsFactory.mjs +1 -1
  123. package/plugins/contextMenu/menu/defaultShortcutsList.js +26 -10
  124. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +26 -10
  125. package/plugins/contextMenu/menu/menu.js +13 -21
  126. package/plugins/contextMenu/menu/menu.mjs +13 -21
  127. package/plugins/contextMenu/menu/positioner.js +41 -58
  128. package/plugins/contextMenu/menu/positioner.mjs +41 -58
  129. package/plugins/copyPaste/copyPaste.js +116 -157
  130. package/plugins/copyPaste/copyPaste.mjs +116 -157
  131. package/plugins/copyPaste/copyableRanges.js +43 -66
  132. package/plugins/copyPaste/copyableRanges.mjs +43 -66
  133. package/plugins/customBorders/customBorders.js +11 -13
  134. package/plugins/customBorders/customBorders.mjs +11 -13
  135. package/plugins/dragToScroll/dragToScroll.js +6 -6
  136. package/plugins/dragToScroll/dragToScroll.mjs +6 -6
  137. package/plugins/dropdownMenu/dropdownMenu.js +81 -107
  138. package/plugins/dropdownMenu/dropdownMenu.mjs +81 -107
  139. package/plugins/exportFile/dataProvider.js +1 -1
  140. package/plugins/exportFile/dataProvider.mjs +1 -1
  141. package/plugins/filters/component/actionBar.js +9 -9
  142. package/plugins/filters/component/actionBar.mjs +8 -8
  143. package/plugins/filters/component/condition.js +13 -15
  144. package/plugins/filters/component/condition.mjs +13 -15
  145. package/plugins/filters/component/operators.js +6 -6
  146. package/plugins/filters/component/operators.mjs +6 -6
  147. package/plugins/filters/component/value.js +24 -28
  148. package/plugins/filters/component/value.mjs +24 -28
  149. package/plugins/filters/conditionUpdateObserver.js +22 -24
  150. package/plugins/filters/conditionUpdateObserver.mjs +22 -24
  151. package/plugins/filters/dataFilter.js +1 -1
  152. package/plugins/filters/dataFilter.mjs +1 -1
  153. package/plugins/filters/filters.js +81 -95
  154. package/plugins/filters/filters.mjs +81 -95
  155. package/plugins/filters/ui/input.js +13 -19
  156. package/plugins/filters/ui/input.mjs +13 -19
  157. package/plugins/filters/ui/link.js +8 -13
  158. package/plugins/filters/ui/link.mjs +8 -13
  159. package/plugins/filters/ui/multipleSelect.js +85 -112
  160. package/plugins/filters/ui/multipleSelect.mjs +85 -112
  161. package/plugins/filters/ui/radioInput.js +12 -20
  162. package/plugins/filters/ui/radioInput.mjs +12 -20
  163. package/plugins/filters/ui/select.js +50 -72
  164. package/plugins/filters/ui/select.mjs +49 -71
  165. package/plugins/formulas/formulas.js +268 -326
  166. package/plugins/formulas/formulas.mjs +269 -327
  167. package/plugins/formulas/indexSyncer/axisSyncer.js +38 -61
  168. package/plugins/formulas/indexSyncer/axisSyncer.mjs +38 -61
  169. package/plugins/formulas/indexSyncer/index.js +25 -48
  170. package/plugins/formulas/indexSyncer/index.mjs +25 -48
  171. package/plugins/hiddenColumns/hiddenColumns.js +64 -83
  172. package/plugins/hiddenColumns/hiddenColumns.mjs +64 -83
  173. package/plugins/hiddenRows/hiddenRows.js +63 -82
  174. package/plugins/hiddenRows/hiddenRows.mjs +63 -82
  175. package/plugins/manualColumnFreeze/manualColumnFreeze.js +24 -32
  176. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +25 -33
  177. package/plugins/manualColumnMove/manualColumnMove.js +126 -170
  178. package/plugins/manualColumnMove/manualColumnMove.mjs +126 -170
  179. package/plugins/manualColumnResize/manualColumnResize.js +169 -230
  180. package/plugins/manualColumnResize/manualColumnResize.mjs +169 -230
  181. package/plugins/manualRowMove/manualRowMove.js +99 -128
  182. package/plugins/manualRowMove/manualRowMove.mjs +99 -128
  183. package/plugins/manualRowResize/manualRowResize.js +150 -209
  184. package/plugins/manualRowResize/manualRowResize.mjs +150 -209
  185. package/plugins/mergeCells/calculations/selection.js +2 -71
  186. package/plugins/mergeCells/calculations/selection.mjs +2 -71
  187. package/plugins/mergeCells/cellsCollection.js +117 -1
  188. package/plugins/mergeCells/cellsCollection.mjs +117 -1
  189. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +11 -1
  190. package/plugins/mergeCells/contextMenuItem/toggleMerge.mjs +11 -1
  191. package/plugins/mergeCells/focusOrder.js +305 -0
  192. package/plugins/mergeCells/focusOrder.mjs +300 -0
  193. package/plugins/mergeCells/mergeCells.js +499 -397
  194. package/plugins/mergeCells/mergeCells.mjs +499 -397
  195. package/plugins/multiColumnSorting/multiColumnSorting.js +8 -2
  196. package/plugins/multiColumnSorting/multiColumnSorting.mjs +8 -2
  197. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +1 -1
  198. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +1 -1
  199. package/plugins/nestedHeaders/nestedHeaders.js +205 -253
  200. package/plugins/nestedHeaders/nestedHeaders.mjs +206 -254
  201. package/plugins/nestedHeaders/stateManager/headersTree.js +21 -32
  202. package/plugins/nestedHeaders/stateManager/headersTree.mjs +21 -32
  203. package/plugins/nestedHeaders/stateManager/index.js +30 -41
  204. package/plugins/nestedHeaders/stateManager/index.mjs +30 -41
  205. package/plugins/nestedHeaders/stateManager/sourceSettings.js +19 -30
  206. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +19 -30
  207. package/plugins/nestedRows/data/dataManager.js +1 -1
  208. package/plugins/nestedRows/data/dataManager.mjs +1 -1
  209. package/plugins/nestedRows/nestedRows.js +151 -182
  210. package/plugins/nestedRows/nestedRows.mjs +152 -183
  211. package/plugins/nestedRows/ui/contextMenu.js +11 -15
  212. package/plugins/nestedRows/ui/contextMenu.mjs +10 -14
  213. package/plugins/nestedRows/utils/rowMoveController.js +1 -1
  214. package/plugins/nestedRows/utils/rowMoveController.mjs +1 -1
  215. package/plugins/persistentState/storage.js +2 -2
  216. package/plugins/persistentState/storage.mjs +2 -2
  217. package/plugins/search/search.js +7 -7
  218. package/plugins/search/search.mjs +7 -7
  219. package/plugins/touchScroll/touchScroll.js +15 -19
  220. package/plugins/touchScroll/touchScroll.mjs +16 -20
  221. package/plugins/trimRows/trimRows.js +6 -6
  222. package/plugins/trimRows/trimRows.mjs +6 -6
  223. package/renderers/checkboxRenderer/checkboxRenderer.js +8 -5
  224. package/renderers/checkboxRenderer/checkboxRenderer.mjs +8 -5
  225. package/selection/highlight/highlight.js +14 -14
  226. package/selection/highlight/highlight.mjs +13 -13
  227. package/selection/highlight/visualSelection.js +2 -0
  228. package/selection/highlight/visualSelection.mjs +2 -0
  229. package/selection/selection.js +225 -67
  230. package/selection/selection.mjs +224 -66
  231. package/selection/transformation.js +149 -118
  232. package/selection/transformation.mjs +149 -118
  233. package/shortcutContexts/commands/editor/closeAndSave.js +2 -2
  234. package/shortcutContexts/commands/editor/closeAndSave.mjs +2 -2
  235. package/shortcutContexts/commands/editor/open.js +18 -3
  236. package/shortcutContexts/commands/editor/open.mjs +18 -3
  237. package/shortcutContexts/commands/extendCellsSelection/down.js +1 -1
  238. package/shortcutContexts/commands/extendCellsSelection/down.mjs +1 -1
  239. package/shortcutContexts/commands/extendCellsSelection/left.js +1 -1
  240. package/shortcutContexts/commands/extendCellsSelection/left.mjs +1 -1
  241. package/shortcutContexts/commands/extendCellsSelection/right.js +1 -1
  242. package/shortcutContexts/commands/extendCellsSelection/right.mjs +1 -1
  243. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +1 -1
  244. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +1 -1
  245. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +3 -1
  246. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +3 -1
  247. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +9 -3
  248. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +9 -3
  249. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +10 -3
  250. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +10 -3
  251. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +3 -1
  252. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +3 -1
  253. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +3 -1
  254. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +3 -1
  255. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +3 -1
  256. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +3 -1
  257. package/shortcutContexts/commands/extendCellsSelection/toRows.js +1 -1
  258. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +1 -1
  259. package/shortcutContexts/commands/extendCellsSelection/up.js +1 -1
  260. package/shortcutContexts/commands/extendCellsSelection/up.mjs +1 -1
  261. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +6 -1
  262. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +6 -1
  263. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +6 -1
  264. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +6 -1
  265. package/shortcutContexts/grid.js +9 -3
  266. package/shortcutContexts/grid.mjs +9 -3
  267. package/shortcuts/context.js +2 -1
  268. package/shortcuts/context.mjs +2 -1
  269. package/tableView.js +52 -78
  270. package/tableView.mjs +52 -78
  271. package/translations/changesObservable/observable.js +21 -38
  272. package/translations/changesObservable/observable.mjs +21 -38
  273. package/translations/changesObservable/observer.js +7 -12
  274. package/translations/changesObservable/observer.mjs +6 -11
  275. package/translations/mapCollections/aggregatedCollection.js +1 -1
  276. package/translations/mapCollections/aggregatedCollection.mjs +1 -1
  277. package/translations/maps/indexMap.js +1 -1
  278. package/translations/maps/indexMap.mjs +1 -1
  279. package/utils/dataStructures/linkedList.js +6 -1
  280. package/utils/dataStructures/linkedList.mjs +6 -1
  281. package/utils/dataStructures/tree.js +1 -1
  282. package/utils/dataStructures/tree.mjs +1 -1
  283. package/utils/interval.js +26 -44
  284. package/utils/interval.mjs +26 -44
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Scroll strategy for changed the focus position of the selection.
3
+ *
4
+ * @param {Core} hot Handsontable instance.
5
+ * @returns {function(): function(CellCoords): void}
6
+ */
7
+ export function focusScrollStrategy(hot) {
8
+ return cellCoords => {
9
+ hot.scrollViewportTo(cellCoords.toObject());
10
+ };
11
+ }
package/core.d.ts CHANGED
@@ -3,6 +3,7 @@ import { Events } from './pluginHooks';
3
3
  import {
4
4
  CellValue,
5
5
  RowObject,
6
+ SimpleCellCoords,
6
7
  } from './common';
7
8
  import {
8
9
  GridSettings,
@@ -135,12 +136,12 @@ export default class Core {
135
136
  scrollViewportTo(options: { row?: number, col?: number, verticalSnap?: 'top' | 'bottom', horizontalSnap?: 'start' | 'end', considerHiddenIndexes?: boolean }): boolean;
136
137
  scrollViewportTo(row?: number, column?: number, snapToBottom?: boolean, snapToRight?: boolean, considerHiddenIndexes?: boolean): boolean;
137
138
  scrollToFocusedCell(callback?: () => void): void;
138
- selectAll(includeRowHeaders?: boolean, includeColumnHeaders?: boolean, options?: { focusPosition?: { row: number, col: number }, disableHeadersHighlight?: boolean }): void;
139
+ selectAll(includeRowHeaders?: boolean, includeColumnHeaders?: boolean, options?: { focusPosition?: SimpleCellCoords | CellCoords, disableHeadersHighlight?: boolean }): void;
139
140
  selectCell(row: number, column: number, endRow?: number, endColumn?: number, scrollToCell?: boolean, changeListener?: boolean): boolean;
140
141
  selectCellByProp(row: number, prop: string, endRow?: number, endProp?: string, scrollToCell?: boolean): boolean;
141
142
  selectCells(coords: Array<[number, number | string, number, number | string]> | CellRange[], scrollToCell?: boolean, changeListener?: boolean): boolean;
142
- selectColumns(startColumn: number | string, endColumn?: number | string, focusPosition?: number): boolean;
143
- selectRows(startRow: number, endRow?: number, focusPosition?: number): boolean;
143
+ selectColumns(startColumn: number | string, endColumn?: number | string, focusPosition?: number | SimpleCellCoords | CellCoords): boolean;
144
+ selectRows(startRow: number, endRow?: number, focusPosition?: number | SimpleCellCoords | CellCoords): boolean;
144
145
  setCellMeta(row: number, column: number, key: string, val: any): void;
145
146
  setCellMeta<K extends keyof CellMeta>(row: number, column: number, key: K, val: CellMeta[K]): void;
146
147
  setCellMetaObject(row: number, column: number, prop: CellMeta): void;
package/core.js CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  exports.default = Core;
5
- require("core-js/modules/es.array.push.js");
6
5
  require("core-js/modules/es.error.cause.js");
6
+ require("core-js/modules/es.array.push.js");
7
7
  require("core-js/modules/web.immediate.js");
8
8
  var _element = require("./helpers/dom/element");
9
9
  var _function = require("./helpers/function");
@@ -273,6 +273,26 @@ function Core(rootElement, userSettings) {
273
273
  renderableRow >= 0 ? instance.rowIndexMapper.getVisualFromRenderableIndex(renderableRow) : renderableRow, renderableColumn >= 0 ? instance.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn) : renderableColumn // eslint-disable-line max-len
274
274
  );
275
275
  };
276
+ const findFirstNonHiddenRenderableRow = (visualRowFrom, visualRowTo) => {
277
+ const dir = visualRowTo > visualRowFrom ? 1 : -1;
278
+ const minIndex = Math.min(visualRowFrom, visualRowTo);
279
+ const maxIndex = Math.max(visualRowFrom, visualRowTo);
280
+ const rowIndex = instance.rowIndexMapper.getNearestNotHiddenIndex(visualRowFrom, dir);
281
+ if (rowIndex === null || dir === 1 && rowIndex > maxIndex || dir === -1 && rowIndex < minIndex) {
282
+ return null;
283
+ }
284
+ return rowIndex >= 0 ? instance.rowIndexMapper.getRenderableFromVisualIndex(rowIndex) : rowIndex;
285
+ };
286
+ const findFirstNonHiddenRenderableColumn = (visualColumnFrom, visualColumnTo) => {
287
+ const dir = visualColumnTo > visualColumnFrom ? 1 : -1;
288
+ const minIndex = Math.min(visualColumnFrom, visualColumnTo);
289
+ const maxIndex = Math.max(visualColumnFrom, visualColumnTo);
290
+ const columnIndex = instance.columnIndexMapper.getNearestNotHiddenIndex(visualColumnFrom, dir);
291
+ if (columnIndex === null || dir === 1 && columnIndex > maxIndex || dir === -1 && columnIndex < minIndex) {
292
+ return null;
293
+ }
294
+ return columnIndex >= 0 ? instance.columnIndexMapper.getRenderableFromVisualIndex(columnIndex) : columnIndex;
295
+ };
276
296
  let selection = new _selection.Selection(tableMeta, {
277
297
  rowIndexMapper: instance.rowIndexMapper,
278
298
  columnIndexMapper: instance.columnIndexMapper,
@@ -284,11 +304,19 @@ function Core(rootElement, userSettings) {
284
304
  countRenderableRows: () => this.view.countRenderableRows(),
285
305
  countRowHeaders: () => this.countRowHeaders(),
286
306
  countColHeaders: () => this.countColHeaders(),
307
+ countRenderableRowsInRange: function () {
308
+ return _this.view.countRenderableRowsInRange(...arguments);
309
+ },
310
+ countRenderableColumnsInRange: function () {
311
+ return _this.view.countRenderableColumnsInRange(...arguments);
312
+ },
287
313
  getShortcutManager: () => instance.getShortcutManager(),
288
314
  createCellCoords: (row, column) => instance._createCellCoords(row, column),
289
315
  createCellRange: (highlight, from, to) => instance._createCellRange(highlight, from, to),
290
316
  visualToRenderableCoords,
291
317
  renderableToVisualCoords,
318
+ findFirstNonHiddenRenderableRow,
319
+ findFirstNonHiddenRenderableColumn,
292
320
  isDisabledCellSelection: (visualRow, visualColumn) => {
293
321
  if (visualRow < 0 || visualColumn < 0) {
294
322
  return instance.getSettings().disableVisualSelection;
@@ -339,6 +367,17 @@ function Core(rootElement, userSettings) {
339
367
  }
340
368
  this._refreshBorders(null);
341
369
  });
370
+ this.selection.addLocalHook('beforeSetFocus', cellCoords => {
371
+ this.runHooks('beforeSelectionFocusSet', cellCoords.row, cellCoords.col);
372
+ });
373
+ this.selection.addLocalHook('afterSetFocus', cellCoords => {
374
+ const preventScrolling = (0, _object.createObjectPropListener)(false);
375
+ this.runHooks('afterSelectionFocusSet', cellCoords.row, cellCoords.col, preventScrolling);
376
+ if (!preventScrolling.isTouched() || preventScrolling.isTouched() && !preventScrolling.value) {
377
+ viewportScroller.scrollTo(cellCoords);
378
+ }
379
+ this._refreshBorders(null);
380
+ });
342
381
  this.selection.addLocalHook('afterSelectionFinished', cellRanges => {
343
382
  const selectionLayerLevel = cellRanges.length - 1;
344
383
  const {
@@ -405,25 +444,35 @@ function Core(rootElement, userSettings) {
405
444
  args[_key9] = arguments[_key9];
406
445
  }
407
446
  return _this.runHooks('afterModifyTransformStart', ...args);
408
- }).addLocalHook('beforeModifyTransformEnd', function () {
447
+ }).addLocalHook('beforeModifyTransformFocus', function () {
409
448
  for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
410
449
  args[_key10] = arguments[_key10];
411
450
  }
412
- return _this.runHooks('modifyTransformEnd', ...args);
413
- }).addLocalHook('afterModifyTransformEnd', function () {
451
+ return _this.runHooks('modifyTransformFocus', ...args);
452
+ }).addLocalHook('afterModifyTransformFocus', function () {
414
453
  for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
415
454
  args[_key11] = arguments[_key11];
416
455
  }
417
- return _this.runHooks('afterModifyTransformEnd', ...args);
418
- }).addLocalHook('beforeRowWrap', function () {
456
+ return _this.runHooks('afterModifyTransformFocus', ...args);
457
+ }).addLocalHook('beforeModifyTransformEnd', function () {
419
458
  for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
420
459
  args[_key12] = arguments[_key12];
421
460
  }
422
- return _this.runHooks('beforeRowWrap', ...args);
423
- }).addLocalHook('beforeColumnWrap', function () {
461
+ return _this.runHooks('modifyTransformEnd', ...args);
462
+ }).addLocalHook('afterModifyTransformEnd', function () {
424
463
  for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {
425
464
  args[_key13] = arguments[_key13];
426
465
  }
466
+ return _this.runHooks('afterModifyTransformEnd', ...args);
467
+ }).addLocalHook('beforeRowWrap', function () {
468
+ for (var _len14 = arguments.length, args = new Array(_len14), _key14 = 0; _key14 < _len14; _key14++) {
469
+ args[_key14] = arguments[_key14];
470
+ }
471
+ return _this.runHooks('beforeRowWrap', ...args);
472
+ }).addLocalHook('beforeColumnWrap', function () {
473
+ for (var _len15 = arguments.length, args = new Array(_len15), _key15 = 0; _key15 < _len15; _key15++) {
474
+ args[_key15] = arguments[_key15];
475
+ }
427
476
  return _this.runHooks('beforeColumnWrap', ...args);
428
477
  }).addLocalHook('insertRowRequire', totalRows => this.alter('insert_row_above', totalRows, 1, 'auto')).addLocalHook('insertColRequire', totalCols => this.alter('insert_col_start', totalCols, 1, 'auto'));
429
478
  grid = {
@@ -1561,8 +1610,8 @@ function Core(rootElement, userSettings) {
1561
1610
  * @returns {Array} Returns removed portion of columns.
1562
1611
  */
1563
1612
  this.spliceCol = function (column, index, amount) {
1564
- for (var _len14 = arguments.length, elements = new Array(_len14 > 3 ? _len14 - 3 : 0), _key14 = 3; _key14 < _len14; _key14++) {
1565
- elements[_key14 - 3] = arguments[_key14];
1613
+ for (var _len16 = arguments.length, elements = new Array(_len16 > 3 ? _len16 - 3 : 0), _key16 = 3; _key16 < _len16; _key16++) {
1614
+ elements[_key16 - 3] = arguments[_key16];
1566
1615
  }
1567
1616
  return datamap.spliceCol(column, index, amount, ...elements);
1568
1617
  };
@@ -1579,8 +1628,8 @@ function Core(rootElement, userSettings) {
1579
1628
  * @returns {Array} Returns removed portion of rows.
1580
1629
  */
1581
1630
  this.spliceRow = function (row, index, amount) {
1582
- for (var _len15 = arguments.length, elements = new Array(_len15 > 3 ? _len15 - 3 : 0), _key15 = 3; _key15 < _len15; _key15++) {
1583
- elements[_key15 - 3] = arguments[_key15];
1631
+ for (var _len17 = arguments.length, elements = new Array(_len17 > 3 ? _len17 - 3 : 0), _key17 = 3; _key17 < _len17; _key17++) {
1632
+ elements[_key17 - 3] = arguments[_key17];
1584
1633
  }
1585
1634
  return datamap.spliceRow(row, index, amount, ...elements);
1586
1635
  };
@@ -2977,8 +3026,8 @@ function Core(rootElement, userSettings) {
2977
3026
  */
2978
3027
  this.spliceCellsMeta = function (visualIndex) {
2979
3028
  let deleteAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
2980
- for (var _len16 = arguments.length, cellMetaRows = new Array(_len16 > 2 ? _len16 - 2 : 0), _key16 = 2; _key16 < _len16; _key16++) {
2981
- cellMetaRows[_key16 - 2] = arguments[_key16];
3029
+ for (var _len18 = arguments.length, cellMetaRows = new Array(_len18 > 2 ? _len18 - 2 : 0), _key18 = 2; _key18 < _len18; _key18++) {
3030
+ cellMetaRows[_key18 - 2] = arguments[_key18];
2982
3031
  }
2983
3032
  if (cellMetaRows.length > 0 && !Array.isArray(cellMetaRows[0])) {
2984
3033
  throw new Error('The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.');
@@ -3900,6 +3949,8 @@ function Core(rootElement, userSettings) {
3900
3949
  * hot.selectColumns(1, 2, -1);
3901
3950
  * // Select range of columns using visual indexes and mark the second cell as highlighted.
3902
3951
  * hot.selectColumns(2, 1, 1);
3952
+ * // Select range of columns using visual indexes and move the focus position somewhere in the middle of the range.
3953
+ * hot.selectColumns(2, 5, { row: 2, col: 3 });
3903
3954
  * // Select range of columns using column properties.
3904
3955
  * hot.selectColumns('id', 'last_name');
3905
3956
  * ```
@@ -3909,10 +3960,11 @@ function Core(rootElement, userSettings) {
3909
3960
  * @function selectColumns
3910
3961
  * @param {number} startColumn The visual column index from which the selection starts.
3911
3962
  * @param {number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`
3912
- * is not defined the column defined by `startColumn` will be selected.
3913
- * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
3914
- * The value can take visual row index from -N to N, where negative values
3915
- * point to the headers and positive values point to the cell range.
3963
+ * is not defined the column defined by `startColumn` will be selected.
3964
+ * @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus
3965
+ * position. The value can take visual row index from -N to N, where negative values point to the headers and positive
3966
+ * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus
3967
+ * position horizontally.
3916
3968
  * @returns {boolean} `true` if selection was successful, `false` otherwise.
3917
3969
  */
3918
3970
  this.selectColumns = function (startColumn) {
@@ -3934,6 +3986,8 @@ function Core(rootElement, userSettings) {
3934
3986
  * hot.selectRows(1, 2, -1);
3935
3987
  * // Select range of rows using visual indexes and mark the second cell as highlighted.
3936
3988
  * hot.selectRows(2, 1, 1);
3989
+ * // Select range of rows using visual indexes and move the focus position somewhere in the middle of the range.
3990
+ * hot.selectRows(2, 5, { row: 2, col: 3 });
3937
3991
  * ```
3938
3992
  *
3939
3993
  * @memberof Core#
@@ -3941,10 +3995,11 @@ function Core(rootElement, userSettings) {
3941
3995
  * @function selectRows
3942
3996
  * @param {number} startRow The visual row index from which the selection starts.
3943
3997
  * @param {number} [endRow=startRow] The visual row index to which the selection finishes. If `endRow`
3944
- * is not defined the row defined by `startRow` will be selected.
3945
- * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
3946
- * The value can take visual column index from -N to N, where negative values
3947
- * point to the headers and positive values point to the cell range.
3998
+ * is not defined the row defined by `startRow` will be selected.
3999
+ * @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus
4000
+ * position. The value can take visual row index from -N to N, where negative values point to the headers and positive
4001
+ * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus
4002
+ * position vertically.
3948
4003
  * @returns {boolean} `true` if selection was successful, `false` otherwise.
3949
4004
  */
3950
4005
  this.selectRows = function (startRow) {
package/core.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import "core-js/modules/es.array.push.js";
2
1
  import "core-js/modules/es.error.cause.js";
2
+ import "core-js/modules/es.array.push.js";
3
3
  import "core-js/modules/web.immediate.js";
4
4
  import { addClass, empty, observeVisibilityChangeOnce, removeClass } from "./helpers/dom/element.mjs";
5
5
  import { isFunction } from "./helpers/function.mjs";
@@ -268,6 +268,26 @@ export default function Core(rootElement, userSettings) {
268
268
  renderableRow >= 0 ? instance.rowIndexMapper.getVisualFromRenderableIndex(renderableRow) : renderableRow, renderableColumn >= 0 ? instance.columnIndexMapper.getVisualFromRenderableIndex(renderableColumn) : renderableColumn // eslint-disable-line max-len
269
269
  );
270
270
  };
271
+ const findFirstNonHiddenRenderableRow = (visualRowFrom, visualRowTo) => {
272
+ const dir = visualRowTo > visualRowFrom ? 1 : -1;
273
+ const minIndex = Math.min(visualRowFrom, visualRowTo);
274
+ const maxIndex = Math.max(visualRowFrom, visualRowTo);
275
+ const rowIndex = instance.rowIndexMapper.getNearestNotHiddenIndex(visualRowFrom, dir);
276
+ if (rowIndex === null || dir === 1 && rowIndex > maxIndex || dir === -1 && rowIndex < minIndex) {
277
+ return null;
278
+ }
279
+ return rowIndex >= 0 ? instance.rowIndexMapper.getRenderableFromVisualIndex(rowIndex) : rowIndex;
280
+ };
281
+ const findFirstNonHiddenRenderableColumn = (visualColumnFrom, visualColumnTo) => {
282
+ const dir = visualColumnTo > visualColumnFrom ? 1 : -1;
283
+ const minIndex = Math.min(visualColumnFrom, visualColumnTo);
284
+ const maxIndex = Math.max(visualColumnFrom, visualColumnTo);
285
+ const columnIndex = instance.columnIndexMapper.getNearestNotHiddenIndex(visualColumnFrom, dir);
286
+ if (columnIndex === null || dir === 1 && columnIndex > maxIndex || dir === -1 && columnIndex < minIndex) {
287
+ return null;
288
+ }
289
+ return columnIndex >= 0 ? instance.columnIndexMapper.getRenderableFromVisualIndex(columnIndex) : columnIndex;
290
+ };
271
291
  let selection = new Selection(tableMeta, {
272
292
  rowIndexMapper: instance.rowIndexMapper,
273
293
  columnIndexMapper: instance.columnIndexMapper,
@@ -279,11 +299,19 @@ export default function Core(rootElement, userSettings) {
279
299
  countRenderableRows: () => this.view.countRenderableRows(),
280
300
  countRowHeaders: () => this.countRowHeaders(),
281
301
  countColHeaders: () => this.countColHeaders(),
302
+ countRenderableRowsInRange: function () {
303
+ return _this.view.countRenderableRowsInRange(...arguments);
304
+ },
305
+ countRenderableColumnsInRange: function () {
306
+ return _this.view.countRenderableColumnsInRange(...arguments);
307
+ },
282
308
  getShortcutManager: () => instance.getShortcutManager(),
283
309
  createCellCoords: (row, column) => instance._createCellCoords(row, column),
284
310
  createCellRange: (highlight, from, to) => instance._createCellRange(highlight, from, to),
285
311
  visualToRenderableCoords,
286
312
  renderableToVisualCoords,
313
+ findFirstNonHiddenRenderableRow,
314
+ findFirstNonHiddenRenderableColumn,
287
315
  isDisabledCellSelection: (visualRow, visualColumn) => {
288
316
  if (visualRow < 0 || visualColumn < 0) {
289
317
  return instance.getSettings().disableVisualSelection;
@@ -334,6 +362,17 @@ export default function Core(rootElement, userSettings) {
334
362
  }
335
363
  this._refreshBorders(null);
336
364
  });
365
+ this.selection.addLocalHook('beforeSetFocus', cellCoords => {
366
+ this.runHooks('beforeSelectionFocusSet', cellCoords.row, cellCoords.col);
367
+ });
368
+ this.selection.addLocalHook('afterSetFocus', cellCoords => {
369
+ const preventScrolling = createObjectPropListener(false);
370
+ this.runHooks('afterSelectionFocusSet', cellCoords.row, cellCoords.col, preventScrolling);
371
+ if (!preventScrolling.isTouched() || preventScrolling.isTouched() && !preventScrolling.value) {
372
+ viewportScroller.scrollTo(cellCoords);
373
+ }
374
+ this._refreshBorders(null);
375
+ });
337
376
  this.selection.addLocalHook('afterSelectionFinished', cellRanges => {
338
377
  const selectionLayerLevel = cellRanges.length - 1;
339
378
  const {
@@ -400,25 +439,35 @@ export default function Core(rootElement, userSettings) {
400
439
  args[_key9] = arguments[_key9];
401
440
  }
402
441
  return _this.runHooks('afterModifyTransformStart', ...args);
403
- }).addLocalHook('beforeModifyTransformEnd', function () {
442
+ }).addLocalHook('beforeModifyTransformFocus', function () {
404
443
  for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
405
444
  args[_key10] = arguments[_key10];
406
445
  }
407
- return _this.runHooks('modifyTransformEnd', ...args);
408
- }).addLocalHook('afterModifyTransformEnd', function () {
446
+ return _this.runHooks('modifyTransformFocus', ...args);
447
+ }).addLocalHook('afterModifyTransformFocus', function () {
409
448
  for (var _len11 = arguments.length, args = new Array(_len11), _key11 = 0; _key11 < _len11; _key11++) {
410
449
  args[_key11] = arguments[_key11];
411
450
  }
412
- return _this.runHooks('afterModifyTransformEnd', ...args);
413
- }).addLocalHook('beforeRowWrap', function () {
451
+ return _this.runHooks('afterModifyTransformFocus', ...args);
452
+ }).addLocalHook('beforeModifyTransformEnd', function () {
414
453
  for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
415
454
  args[_key12] = arguments[_key12];
416
455
  }
417
- return _this.runHooks('beforeRowWrap', ...args);
418
- }).addLocalHook('beforeColumnWrap', function () {
456
+ return _this.runHooks('modifyTransformEnd', ...args);
457
+ }).addLocalHook('afterModifyTransformEnd', function () {
419
458
  for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {
420
459
  args[_key13] = arguments[_key13];
421
460
  }
461
+ return _this.runHooks('afterModifyTransformEnd', ...args);
462
+ }).addLocalHook('beforeRowWrap', function () {
463
+ for (var _len14 = arguments.length, args = new Array(_len14), _key14 = 0; _key14 < _len14; _key14++) {
464
+ args[_key14] = arguments[_key14];
465
+ }
466
+ return _this.runHooks('beforeRowWrap', ...args);
467
+ }).addLocalHook('beforeColumnWrap', function () {
468
+ for (var _len15 = arguments.length, args = new Array(_len15), _key15 = 0; _key15 < _len15; _key15++) {
469
+ args[_key15] = arguments[_key15];
470
+ }
422
471
  return _this.runHooks('beforeColumnWrap', ...args);
423
472
  }).addLocalHook('insertRowRequire', totalRows => this.alter('insert_row_above', totalRows, 1, 'auto')).addLocalHook('insertColRequire', totalCols => this.alter('insert_col_start', totalCols, 1, 'auto'));
424
473
  grid = {
@@ -1556,8 +1605,8 @@ export default function Core(rootElement, userSettings) {
1556
1605
  * @returns {Array} Returns removed portion of columns.
1557
1606
  */
1558
1607
  this.spliceCol = function (column, index, amount) {
1559
- for (var _len14 = arguments.length, elements = new Array(_len14 > 3 ? _len14 - 3 : 0), _key14 = 3; _key14 < _len14; _key14++) {
1560
- elements[_key14 - 3] = arguments[_key14];
1608
+ for (var _len16 = arguments.length, elements = new Array(_len16 > 3 ? _len16 - 3 : 0), _key16 = 3; _key16 < _len16; _key16++) {
1609
+ elements[_key16 - 3] = arguments[_key16];
1561
1610
  }
1562
1611
  return datamap.spliceCol(column, index, amount, ...elements);
1563
1612
  };
@@ -1574,8 +1623,8 @@ export default function Core(rootElement, userSettings) {
1574
1623
  * @returns {Array} Returns removed portion of rows.
1575
1624
  */
1576
1625
  this.spliceRow = function (row, index, amount) {
1577
- for (var _len15 = arguments.length, elements = new Array(_len15 > 3 ? _len15 - 3 : 0), _key15 = 3; _key15 < _len15; _key15++) {
1578
- elements[_key15 - 3] = arguments[_key15];
1626
+ for (var _len17 = arguments.length, elements = new Array(_len17 > 3 ? _len17 - 3 : 0), _key17 = 3; _key17 < _len17; _key17++) {
1627
+ elements[_key17 - 3] = arguments[_key17];
1579
1628
  }
1580
1629
  return datamap.spliceRow(row, index, amount, ...elements);
1581
1630
  };
@@ -2972,8 +3021,8 @@ export default function Core(rootElement, userSettings) {
2972
3021
  */
2973
3022
  this.spliceCellsMeta = function (visualIndex) {
2974
3023
  let deleteAmount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
2975
- for (var _len16 = arguments.length, cellMetaRows = new Array(_len16 > 2 ? _len16 - 2 : 0), _key16 = 2; _key16 < _len16; _key16++) {
2976
- cellMetaRows[_key16 - 2] = arguments[_key16];
3024
+ for (var _len18 = arguments.length, cellMetaRows = new Array(_len18 > 2 ? _len18 - 2 : 0), _key18 = 2; _key18 < _len18; _key18++) {
3025
+ cellMetaRows[_key18 - 2] = arguments[_key18];
2977
3026
  }
2978
3027
  if (cellMetaRows.length > 0 && !Array.isArray(cellMetaRows[0])) {
2979
3028
  throw new Error('The 3rd argument (cellMetaRows) has to be passed as an array of cell meta objects array.');
@@ -3895,6 +3944,8 @@ export default function Core(rootElement, userSettings) {
3895
3944
  * hot.selectColumns(1, 2, -1);
3896
3945
  * // Select range of columns using visual indexes and mark the second cell as highlighted.
3897
3946
  * hot.selectColumns(2, 1, 1);
3947
+ * // Select range of columns using visual indexes and move the focus position somewhere in the middle of the range.
3948
+ * hot.selectColumns(2, 5, { row: 2, col: 3 });
3898
3949
  * // Select range of columns using column properties.
3899
3950
  * hot.selectColumns('id', 'last_name');
3900
3951
  * ```
@@ -3904,10 +3955,11 @@ export default function Core(rootElement, userSettings) {
3904
3955
  * @function selectColumns
3905
3956
  * @param {number} startColumn The visual column index from which the selection starts.
3906
3957
  * @param {number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`
3907
- * is not defined the column defined by `startColumn` will be selected.
3908
- * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
3909
- * The value can take visual row index from -N to N, where negative values
3910
- * point to the headers and positive values point to the cell range.
3958
+ * is not defined the column defined by `startColumn` will be selected.
3959
+ * @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus
3960
+ * position. The value can take visual row index from -N to N, where negative values point to the headers and positive
3961
+ * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus
3962
+ * position horizontally.
3911
3963
  * @returns {boolean} `true` if selection was successful, `false` otherwise.
3912
3964
  */
3913
3965
  this.selectColumns = function (startColumn) {
@@ -3929,6 +3981,8 @@ export default function Core(rootElement, userSettings) {
3929
3981
  * hot.selectRows(1, 2, -1);
3930
3982
  * // Select range of rows using visual indexes and mark the second cell as highlighted.
3931
3983
  * hot.selectRows(2, 1, 1);
3984
+ * // Select range of rows using visual indexes and move the focus position somewhere in the middle of the range.
3985
+ * hot.selectRows(2, 5, { row: 2, col: 3 });
3932
3986
  * ```
3933
3987
  *
3934
3988
  * @memberof Core#
@@ -3936,10 +3990,11 @@ export default function Core(rootElement, userSettings) {
3936
3990
  * @function selectRows
3937
3991
  * @param {number} startRow The visual row index from which the selection starts.
3938
3992
  * @param {number} [endRow=startRow] The visual row index to which the selection finishes. If `endRow`
3939
- * is not defined the row defined by `startRow` will be selected.
3940
- * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
3941
- * The value can take visual column index from -N to N, where negative values
3942
- * point to the headers and positive values point to the cell range.
3993
+ * is not defined the row defined by `startRow` will be selected.
3994
+ * @param {number | { row: number, col: number } | CellCoords} [focusPosition=0] The argument allows changing the cell/header focus
3995
+ * position. The value can take visual row index from -N to N, where negative values point to the headers and positive
3996
+ * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus
3997
+ * position vertically.
3943
3998
  * @returns {boolean} `true` if selection was successful, `false` otherwise.
3944
3999
  */
3945
4000
  this.selectRows = function (startRow) {
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
- require("core-js/modules/es.array.push.js");
5
4
  require("core-js/modules/es.error.cause.js");
5
+ require("core-js/modules/es.array.push.js");
6
6
  var _object = require("../helpers/object");
7
7
  var _data = require("../helpers/data");
8
8
  var _array = require("../helpers/array");
@@ -1,5 +1,5 @@
1
- import "core-js/modules/es.array.push.js";
2
1
  import "core-js/modules/es.error.cause.js";
2
+ import "core-js/modules/es.array.push.js";
3
3
  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; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
5
5
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
- require("core-js/modules/es.array.push.js");
5
4
  require("core-js/modules/es.error.cause.js");
5
+ require("core-js/modules/es.array.push.js");
6
6
  var _object = require("../../../helpers/object");
7
7
  var _utils = require("../utils");
8
8
  var _lazyFactoryMap = _interopRequireDefault(require("../lazyFactoryMap"));
@@ -1,5 +1,5 @@
1
- import "core-js/modules/es.array.push.js";
2
1
  import "core-js/modules/es.error.cause.js";
2
+ import "core-js/modules/es.array.push.js";
3
3
  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; }
4
4
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
5
5
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
@@ -1759,7 +1759,7 @@ var _default = () => {
1759
1759
  *
1760
1760
  * // enable the `DropdownMenu` plugin
1761
1761
  * // and modify individual context menu options
1762
- * dropdownMenu: ['row_above', 'row_below', '---------', 'undo', 'redo'],
1762
+ * dropdownMenu: ['---------', 'undo', 'redo'],
1763
1763
  *
1764
1764
  * // enable the `DropdownMenu` plugin
1765
1765
  * // and apply a custom dropdown menu configuration
@@ -1756,7 +1756,7 @@ export default (() => {
1756
1756
  *
1757
1757
  * // enable the `DropdownMenu` plugin
1758
1758
  * // and modify individual context menu options
1759
- * dropdownMenu: ['row_above', 'row_below', '---------', 'undo', 'redo'],
1759
+ * dropdownMenu: ['---------', 'undo', 'redo'],
1760
1760
  *
1761
1761
  * // enable the `DropdownMenu` plugin
1762
1762
  * // and apply a custom dropdown menu configuration
@@ -2,8 +2,8 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  exports.replaceData = replaceData;
5
- require("core-js/modules/es.array.push.js");
6
5
  require("core-js/modules/es.error.cause.js");
6
+ require("core-js/modules/es.array.push.js");
7
7
  var _string = require("../helpers/string");
8
8
  var _function = require("../helpers/function");
9
9
  var _dataMap = _interopRequireDefault(require("./dataMap"));
@@ -1,5 +1,5 @@
1
- import "core-js/modules/es.array.push.js";
2
1
  import "core-js/modules/es.error.cause.js";
2
+ import "core-js/modules/es.array.push.js";
3
3
  import { toUpperCaseFirst } from "../helpers/string.mjs";
4
4
  import { isFunction } from "../helpers/function.mjs";
5
5
  import DataMap from "./dataMap.mjs";
@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 0.0.0-next-5a535ed-20240403
29
- * Release date: 06/03/2024 (built at 03/04/2024 12:33:57)
28
+ * Version: 0.0.0-next-c2810a1-20240403
29
+ * Release date: 06/03/2024 (built at 03/04/2024 13:17:53)
30
30
  */
31
31
  /**
32
32
  * Fix for bootstrap styles
@@ -1708,7 +1708,7 @@ textarea.HandsontableCopyPaste {
1708
1708
  cursor: grab;
1709
1709
  }
1710
1710
 
1711
- .handsontable.ht__manualColumnMove.on-moving--columns,
1711
+ .handsontable.ht__manualColumnMove.on-moving--columns *,
1712
1712
  .handsontable.ht__manualColumnMove.on-moving--columns thead th.ht__highlight {
1713
1713
  cursor: move;
1714
1714
  cursor: -moz-grabbing;
@@ -1759,7 +1759,7 @@ textarea.HandsontableCopyPaste {
1759
1759
  cursor: grab;
1760
1760
  }
1761
1761
 
1762
- .handsontable.ht__manualRowMove.on-moving--rows,
1762
+ .handsontable.ht__manualRowMove.on-moving--rows *,
1763
1763
  .handsontable.ht__manualRowMove.on-moving--rows tbody th.ht__highlight {
1764
1764
  cursor: move;
1765
1765
  cursor: -moz-grabbing;
@@ -25,8 +25,8 @@
25
25
  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
26
26
  * USE OR INABILITY TO USE THIS SOFTWARE.
27
27
  *
28
- * Version: 0.0.0-next-5a535ed-20240403
29
- * Release date: 06/03/2024 (built at 03/04/2024 12:33:57)
28
+ * Version: 0.0.0-next-c2810a1-20240403
29
+ * Release date: 06/03/2024 (built at 03/04/2024 13:17:53)
30
30
  */
31
31
  /**
32
32
  * Fix for bootstrap styles
@@ -1941,7 +1941,7 @@ textarea.HandsontableCopyPaste {
1941
1941
  cursor: grab;
1942
1942
  }
1943
1943
 
1944
- .handsontable.ht__manualColumnMove.on-moving--columns,
1944
+ .handsontable.ht__manualColumnMove.on-moving--columns *,
1945
1945
  .handsontable.ht__manualColumnMove.on-moving--columns thead th.ht__highlight {
1946
1946
  cursor: move;
1947
1947
  cursor: -moz-grabbing;
@@ -1992,7 +1992,7 @@ textarea.HandsontableCopyPaste {
1992
1992
  cursor: grab;
1993
1993
  }
1994
1994
 
1995
- .handsontable.ht__manualRowMove.on-moving--rows,
1995
+ .handsontable.ht__manualRowMove.on-moving--rows *,
1996
1996
  .handsontable.ht__manualRowMove.on-moving--rows tbody th.ht__highlight {
1997
1997
  cursor: move;
1998
1998
  cursor: -moz-grabbing;