handsontable 14.2.0 → 14.3.0-next-3fa6b18-20240410

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.
Files changed (469) hide show
  1. package/3rdparty/walkontable/src/calculator/renderAllColumns.js +1 -1
  2. package/3rdparty/walkontable/src/calculator/renderAllColumns.mjs +1 -1
  3. package/3rdparty/walkontable/src/calculator/renderAllRows.js +1 -1
  4. package/3rdparty/walkontable/src/calculator/renderAllRows.mjs +1 -1
  5. package/3rdparty/walkontable/src/calculator/viewportColumns.js +13 -18
  6. package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +13 -18
  7. package/3rdparty/walkontable/src/calculator/viewportRows.js +11 -16
  8. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +11 -16
  9. package/3rdparty/walkontable/src/cell/coords.js +13 -18
  10. package/3rdparty/walkontable/src/cell/coords.mjs +13 -18
  11. package/3rdparty/walkontable/src/cell/range.d.ts +2 -1
  12. package/3rdparty/walkontable/src/cell/range.js +42 -30
  13. package/3rdparty/walkontable/src/cell/range.mjs +42 -30
  14. package/3rdparty/walkontable/src/core/_base.js +2 -2
  15. package/3rdparty/walkontable/src/core/_base.mjs +2 -2
  16. package/3rdparty/walkontable/src/core/clone.js +1 -1
  17. package/3rdparty/walkontable/src/core/clone.mjs +1 -1
  18. package/3rdparty/walkontable/src/event.js +72 -104
  19. package/3rdparty/walkontable/src/event.mjs +72 -104
  20. package/3rdparty/walkontable/src/filter/column.js +1 -1
  21. package/3rdparty/walkontable/src/filter/column.mjs +1 -1
  22. package/3rdparty/walkontable/src/filter/row.js +1 -1
  23. package/3rdparty/walkontable/src/filter/row.mjs +1 -1
  24. package/3rdparty/walkontable/src/index.js +1 -1
  25. package/3rdparty/walkontable/src/overlay/_base.js +1 -1
  26. package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
  27. package/3rdparty/walkontable/src/overlay/bottom.js +1 -1
  28. package/3rdparty/walkontable/src/overlay/bottom.mjs +1 -1
  29. package/3rdparty/walkontable/src/overlay/inlineStart.js +15 -1
  30. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +16 -2
  31. package/3rdparty/walkontable/src/overlay/top.js +12 -1
  32. package/3rdparty/walkontable/src/overlay/top.mjs +13 -2
  33. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.js +1 -1
  34. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.mjs +1 -1
  35. package/3rdparty/walkontable/src/overlays.js +47 -5
  36. package/3rdparty/walkontable/src/overlays.mjs +47 -5
  37. package/3rdparty/walkontable/src/renderer/_base.js +1 -1
  38. package/3rdparty/walkontable/src/renderer/_base.mjs +1 -1
  39. package/3rdparty/walkontable/src/renderer/cells.js +1 -1
  40. package/3rdparty/walkontable/src/renderer/cells.mjs +1 -1
  41. package/3rdparty/walkontable/src/renderer/rowHeaders.js +1 -1
  42. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +1 -1
  43. package/3rdparty/walkontable/src/renderer/rows.js +1 -1
  44. package/3rdparty/walkontable/src/renderer/rows.mjs +1 -1
  45. package/3rdparty/walkontable/src/renderer/table.js +1 -1
  46. package/3rdparty/walkontable/src/renderer/table.mjs +1 -1
  47. package/3rdparty/walkontable/src/scroll.js +16 -18
  48. package/3rdparty/walkontable/src/scroll.mjs +16 -18
  49. package/3rdparty/walkontable/src/selection/manager.js +48 -69
  50. package/3rdparty/walkontable/src/selection/manager.mjs +48 -69
  51. package/3rdparty/walkontable/src/selection/scanner.js +33 -42
  52. package/3rdparty/walkontable/src/selection/scanner.mjs +33 -42
  53. package/3rdparty/walkontable/src/settings.js +1 -1
  54. package/3rdparty/walkontable/src/settings.mjs +1 -1
  55. package/3rdparty/walkontable/src/table.js +1 -1
  56. package/3rdparty/walkontable/src/table.mjs +1 -1
  57. package/3rdparty/walkontable/src/utils/column.js +1 -1
  58. package/3rdparty/walkontable/src/utils/column.mjs +1 -1
  59. package/3rdparty/walkontable/src/utils/columnStretching.js +28 -45
  60. package/3rdparty/walkontable/src/utils/columnStretching.mjs +28 -45
  61. package/3rdparty/walkontable/src/utils/nodesPool.js +1 -1
  62. package/3rdparty/walkontable/src/utils/nodesPool.mjs +1 -1
  63. package/3rdparty/walkontable/src/utils/orderView/view.js +2 -2
  64. package/3rdparty/walkontable/src/utils/orderView/view.mjs +2 -2
  65. package/3rdparty/walkontable/src/utils/orderView/viewSize.js +1 -1
  66. package/3rdparty/walkontable/src/utils/orderView/viewSize.mjs +1 -1
  67. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js +1 -1
  68. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.mjs +1 -1
  69. package/3rdparty/walkontable/src/utils/row.js +1 -1
  70. package/3rdparty/walkontable/src/utils/row.mjs +1 -1
  71. package/CHANGELOG.md +20 -0
  72. package/base.js +2 -2
  73. package/base.mjs +2 -2
  74. package/core/viewportScroll/index.js +4 -1
  75. package/core/viewportScroll/index.mjs +4 -1
  76. package/core/viewportScroll/scrollStrategies/focusScroll.js +15 -0
  77. package/core/viewportScroll/scrollStrategies/focusScroll.mjs +11 -0
  78. package/core.d.ts +4 -3
  79. package/core.js +98 -43
  80. package/core.mjs +98 -43
  81. package/dataMap/dataMap.js +1 -1
  82. package/dataMap/dataMap.mjs +1 -1
  83. package/dataMap/dataSource.js +2 -2
  84. package/dataMap/dataSource.mjs +2 -2
  85. package/dataMap/metaManager/lazyFactoryMap.js +3 -5
  86. package/dataMap/metaManager/lazyFactoryMap.mjs +2 -4
  87. package/dataMap/metaManager/metaLayers/cellMeta.js +2 -2
  88. package/dataMap/metaManager/metaLayers/cellMeta.mjs +2 -2
  89. package/dataMap/metaManager/metaLayers/columnMeta.js +1 -1
  90. package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -1
  91. package/dataMap/metaManager/metaLayers/globalMeta.js +1 -1
  92. package/dataMap/metaManager/metaLayers/globalMeta.mjs +1 -1
  93. package/dataMap/metaManager/metaLayers/tableMeta.js +1 -1
  94. package/dataMap/metaManager/metaLayers/tableMeta.mjs +1 -1
  95. package/dataMap/metaManager/metaSchema.js +272 -272
  96. package/dataMap/metaManager/metaSchema.mjs +272 -272
  97. package/dataMap/metaManager/mods/dynamicCellMeta.js +1 -1
  98. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
  99. package/dataMap/metaManager/mods/extendMetaProperties.js +1 -1
  100. package/dataMap/metaManager/mods/extendMetaProperties.mjs +1 -1
  101. package/dataMap/replaceData.js +1 -1
  102. package/dataMap/replaceData.mjs +1 -1
  103. package/dist/handsontable.css +4 -4
  104. package/dist/handsontable.full.css +4 -4
  105. package/dist/handsontable.full.js +9814 -10020
  106. package/dist/handsontable.full.min.css +3 -3
  107. package/dist/handsontable.full.min.js +292 -292
  108. package/dist/handsontable.js +7484 -7056
  109. package/dist/handsontable.min.css +3 -3
  110. package/dist/handsontable.min.js +25 -25
  111. package/dist/languages/all.min.js +1 -1
  112. package/dist/languages/ar-AR.min.js +1 -1
  113. package/dist/languages/cs-CZ.min.js +1 -1
  114. package/dist/languages/de-CH.min.js +1 -1
  115. package/dist/languages/de-DE.min.js +1 -1
  116. package/dist/languages/en-US.min.js +1 -1
  117. package/dist/languages/es-MX.min.js +1 -1
  118. package/dist/languages/fr-FR.min.js +1 -1
  119. package/dist/languages/hr-HR.min.js +1 -1
  120. package/dist/languages/it-IT.min.js +1 -1
  121. package/dist/languages/ja-JP.min.js +1 -1
  122. package/dist/languages/ko-KR.min.js +1 -1
  123. package/dist/languages/lv-LV.min.js +1 -1
  124. package/dist/languages/nb-NO.min.js +1 -1
  125. package/dist/languages/nl-NL.min.js +1 -1
  126. package/dist/languages/pl-PL.min.js +1 -1
  127. package/dist/languages/pt-BR.min.js +1 -1
  128. package/dist/languages/ru-RU.min.js +1 -1
  129. package/dist/languages/sr-SP.min.js +1 -1
  130. package/dist/languages/zh-CN.min.js +1 -1
  131. package/dist/languages/zh-TW.min.js +1 -1
  132. package/editorManager.js +26 -24
  133. package/editorManager.mjs +26 -24
  134. package/editors/autocompleteEditor/autocompleteEditor.js +7 -11
  135. package/editors/autocompleteEditor/autocompleteEditor.mjs +7 -11
  136. package/editors/baseEditor/baseEditor.js +1 -1
  137. package/editors/baseEditor/baseEditor.mjs +1 -1
  138. package/editors/dateEditor/dateEditor.js +49 -11
  139. package/editors/dateEditor/dateEditor.mjs +49 -11
  140. package/editors/selectEditor/selectEditor.js +20 -19
  141. package/editors/selectEditor/selectEditor.mjs +20 -19
  142. package/editors/textEditor/textEditor.js +1 -1
  143. package/editors/textEditor/textEditor.mjs +1 -1
  144. package/eventManager.js +2 -2
  145. package/eventManager.mjs +2 -2
  146. package/focusManager.js +64 -82
  147. package/focusManager.mjs +64 -82
  148. package/helpers/dom/element.js +23 -1
  149. package/helpers/dom/element.mjs +21 -1
  150. package/helpers/mixed.js +2 -2
  151. package/helpers/mixed.mjs +2 -2
  152. package/helpers/object.js +2 -2
  153. package/helpers/object.mjs +2 -2
  154. package/i18n/languages/ar-AR.d.ts +5 -0
  155. package/i18n/languages/ar-AR.js +1 -1
  156. package/i18n/languages/cs-CZ.d.ts +5 -0
  157. package/i18n/languages/cs-CZ.js +1 -1
  158. package/i18n/languages/de-CH.js +1 -1
  159. package/i18n/languages/de-DE.js +1 -1
  160. package/i18n/languages/en-US.js +1 -1
  161. package/i18n/languages/es-MX.js +1 -1
  162. package/i18n/languages/fr-FR.js +1 -1
  163. package/i18n/languages/hr-HR.d.ts +5 -0
  164. package/i18n/languages/hr-HR.js +1 -1
  165. package/i18n/languages/it-IT.js +1 -1
  166. package/i18n/languages/ja-JP.js +1 -1
  167. package/i18n/languages/ko-KR.js +1 -1
  168. package/i18n/languages/lv-LV.js +1 -1
  169. package/i18n/languages/nb-NO.js +1 -1
  170. package/i18n/languages/nl-NL.js +1 -1
  171. package/i18n/languages/pl-PL.js +1 -1
  172. package/i18n/languages/pt-BR.js +1 -1
  173. package/i18n/languages/ru-RU.js +1 -1
  174. package/i18n/languages/sr-SP.d.ts +5 -0
  175. package/i18n/languages/sr-SP.js +1 -1
  176. package/i18n/languages/zh-CN.js +1 -1
  177. package/i18n/languages/zh-TW.js +1 -1
  178. package/i18n/registry.js +1 -1
  179. package/index.d.ts +10 -0
  180. package/index.js +1 -1
  181. package/package.json +14 -10
  182. package/pluginHooks.d.ts +4 -3
  183. package/pluginHooks.js +143 -82
  184. package/pluginHooks.mjs +143 -82
  185. package/plugins/autoColumnSize/autoColumnSize.js +50 -66
  186. package/plugins/autoColumnSize/autoColumnSize.mjs +50 -66
  187. package/plugins/autoRowSize/autoRowSize.js +29 -35
  188. package/plugins/autoRowSize/autoRowSize.mjs +29 -35
  189. package/plugins/autofill/autofill.js +31 -39
  190. package/plugins/autofill/autofill.mjs +31 -39
  191. package/plugins/base/base.js +13 -18
  192. package/plugins/base/base.mjs +13 -18
  193. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +6 -6
  194. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +6 -6
  195. package/plugins/collapsibleColumns/collapsibleColumns.js +60 -51
  196. package/plugins/collapsibleColumns/collapsibleColumns.mjs +60 -51
  197. package/plugins/columnSorting/columnSorting.js +50 -46
  198. package/plugins/columnSorting/columnSorting.mjs +50 -46
  199. package/plugins/columnSorting/columnStatesManager.js +1 -1
  200. package/plugins/columnSorting/columnStatesManager.mjs +1 -1
  201. package/plugins/columnSummary/columnSummary.js +36 -40
  202. package/plugins/columnSummary/columnSummary.mjs +36 -40
  203. package/plugins/columnSummary/endpoints.js +1 -1
  204. package/plugins/columnSummary/endpoints.mjs +1 -1
  205. package/plugins/comments/commentEditor.js +1 -1
  206. package/plugins/comments/commentEditor.mjs +1 -1
  207. package/plugins/comments/comments.js +117 -159
  208. package/plugins/comments/comments.mjs +117 -159
  209. package/plugins/comments/contextMenuItem/addEditComment.js +1 -1
  210. package/plugins/comments/contextMenuItem/readOnlyComment.js +1 -1
  211. package/plugins/comments/contextMenuItem/removeComment.js +1 -1
  212. package/plugins/comments/displaySwitch.js +1 -1
  213. package/plugins/comments/displaySwitch.mjs +1 -1
  214. package/plugins/contextMenu/commandExecutor.js +1 -1
  215. package/plugins/contextMenu/commandExecutor.mjs +1 -1
  216. package/plugins/contextMenu/contextMenu.js +24 -30
  217. package/plugins/contextMenu/contextMenu.mjs +24 -30
  218. package/plugins/contextMenu/itemsFactory.js +2 -2
  219. package/plugins/contextMenu/itemsFactory.mjs +2 -2
  220. package/plugins/contextMenu/menu/cursor.js +1 -1
  221. package/plugins/contextMenu/menu/cursor.mjs +1 -1
  222. package/plugins/contextMenu/menu/defaultShortcutsList.js +26 -10
  223. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +26 -10
  224. package/plugins/contextMenu/menu/menu.js +14 -22
  225. package/plugins/contextMenu/menu/menu.mjs +14 -22
  226. package/plugins/contextMenu/menu/positioner.js +41 -58
  227. package/plugins/contextMenu/menu/positioner.mjs +41 -58
  228. package/plugins/contextMenu/predefinedItems/alignment.js +1 -1
  229. package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -1
  230. package/plugins/contextMenu/predefinedItems/columnLeft.js +1 -1
  231. package/plugins/contextMenu/predefinedItems/columnRight.js +1 -1
  232. package/plugins/contextMenu/predefinedItems/index.js +1 -1
  233. package/plugins/contextMenu/predefinedItems/readOnly.js +1 -1
  234. package/plugins/contextMenu/predefinedItems/redo.js +1 -1
  235. package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -1
  236. package/plugins/contextMenu/predefinedItems/removeRow.js +1 -1
  237. package/plugins/contextMenu/predefinedItems/rowAbove.js +1 -1
  238. package/plugins/contextMenu/predefinedItems/rowBelow.js +1 -1
  239. package/plugins/contextMenu/predefinedItems/undo.js +1 -1
  240. package/plugins/copyPaste/contextMenuItem/cut.js +1 -1
  241. package/plugins/copyPaste/copyPaste.js +120 -161
  242. package/plugins/copyPaste/copyPaste.mjs +120 -161
  243. package/plugins/copyPaste/copyableRanges.js +43 -66
  244. package/plugins/copyPaste/copyableRanges.mjs +43 -66
  245. package/plugins/customBorders/contextMenuItem/bottom.js +1 -1
  246. package/plugins/customBorders/contextMenuItem/left.js +1 -1
  247. package/plugins/customBorders/contextMenuItem/noBorders.js +1 -1
  248. package/plugins/customBorders/contextMenuItem/right.js +1 -1
  249. package/plugins/customBorders/contextMenuItem/top.js +1 -1
  250. package/plugins/customBorders/customBorders.js +14 -16
  251. package/plugins/customBorders/customBorders.mjs +13 -15
  252. package/plugins/dragToScroll/dragToScroll.js +7 -7
  253. package/plugins/dragToScroll/dragToScroll.mjs +7 -7
  254. package/plugins/dropdownMenu/dropdownMenu.js +84 -110
  255. package/plugins/dropdownMenu/dropdownMenu.mjs +84 -110
  256. package/plugins/exportFile/dataProvider.js +2 -2
  257. package/plugins/exportFile/dataProvider.mjs +2 -2
  258. package/plugins/exportFile/exportFile.js +2 -2
  259. package/plugins/exportFile/exportFile.mjs +1 -1
  260. package/plugins/exportFile/types/_base.js +1 -1
  261. package/plugins/exportFile/types/_base.mjs +1 -1
  262. package/plugins/filters/component/_base.js +1 -1
  263. package/plugins/filters/component/_base.mjs +1 -1
  264. package/plugins/filters/component/actionBar.js +11 -11
  265. package/plugins/filters/component/actionBar.mjs +9 -9
  266. package/plugins/filters/component/condition.js +15 -17
  267. package/plugins/filters/component/condition.mjs +14 -16
  268. package/plugins/filters/component/operators.js +7 -7
  269. package/plugins/filters/component/operators.mjs +7 -7
  270. package/plugins/filters/component/value.js +26 -30
  271. package/plugins/filters/component/value.mjs +25 -29
  272. package/plugins/filters/condition/beginsWith.js +1 -1
  273. package/plugins/filters/condition/between.js +1 -1
  274. package/plugins/filters/condition/contains.js +1 -1
  275. package/plugins/filters/condition/date/after.js +1 -1
  276. package/plugins/filters/condition/date/before.js +1 -1
  277. package/plugins/filters/condition/date/today.js +1 -1
  278. package/plugins/filters/condition/date/tomorrow.js +1 -1
  279. package/plugins/filters/condition/date/yesterday.js +1 -1
  280. package/plugins/filters/condition/empty.js +1 -1
  281. package/plugins/filters/condition/endsWith.js +1 -1
  282. package/plugins/filters/condition/equal.js +1 -1
  283. package/plugins/filters/condition/greaterThan.js +1 -1
  284. package/plugins/filters/condition/greaterThanOrEqual.js +1 -1
  285. package/plugins/filters/condition/lessThan.js +1 -1
  286. package/plugins/filters/condition/lessThanOrEqual.js +1 -1
  287. package/plugins/filters/condition/none.js +1 -1
  288. package/plugins/filters/condition/notBetween.js +1 -1
  289. package/plugins/filters/condition/notContains.js +1 -1
  290. package/plugins/filters/condition/notEmpty.js +1 -1
  291. package/plugins/filters/condition/notEqual.js +1 -1
  292. package/plugins/filters/conditionCollection.js +1 -1
  293. package/plugins/filters/conditionCollection.mjs +1 -1
  294. package/plugins/filters/conditionUpdateObserver.js +23 -25
  295. package/plugins/filters/conditionUpdateObserver.mjs +23 -25
  296. package/plugins/filters/dataFilter.js +2 -2
  297. package/plugins/filters/dataFilter.mjs +2 -2
  298. package/plugins/filters/filters.js +84 -98
  299. package/plugins/filters/filters.mjs +83 -97
  300. package/plugins/filters/logicalOperations/conjunction.js +1 -1
  301. package/plugins/filters/logicalOperations/disjunction.js +1 -1
  302. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +1 -1
  303. package/plugins/filters/ui/_base.js +2 -2
  304. package/plugins/filters/ui/_base.mjs +1 -1
  305. package/plugins/filters/ui/input.js +13 -19
  306. package/plugins/filters/ui/input.mjs +13 -19
  307. package/plugins/filters/ui/link.js +8 -13
  308. package/plugins/filters/ui/link.mjs +8 -13
  309. package/plugins/filters/ui/multipleSelect.js +86 -113
  310. package/plugins/filters/ui/multipleSelect.mjs +85 -112
  311. package/plugins/filters/ui/radioInput.js +12 -20
  312. package/plugins/filters/ui/radioInput.mjs +12 -20
  313. package/plugins/filters/ui/select.js +51 -73
  314. package/plugins/filters/ui/select.mjs +49 -71
  315. package/plugins/formulas/formulas.js +270 -328
  316. package/plugins/formulas/formulas.mjs +271 -329
  317. package/plugins/formulas/indexSyncer/axisSyncer.js +38 -61
  318. package/plugins/formulas/indexSyncer/axisSyncer.mjs +38 -61
  319. package/plugins/formulas/indexSyncer/index.js +25 -48
  320. package/plugins/formulas/indexSyncer/index.mjs +25 -48
  321. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +1 -1
  322. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +1 -1
  323. package/plugins/hiddenColumns/hiddenColumns.js +68 -87
  324. package/plugins/hiddenColumns/hiddenColumns.mjs +68 -87
  325. package/plugins/hiddenRows/contextMenuItem/hideRow.js +1 -1
  326. package/plugins/hiddenRows/contextMenuItem/showRow.js +1 -1
  327. package/plugins/hiddenRows/hiddenRows.js +67 -86
  328. package/plugins/hiddenRows/hiddenRows.mjs +67 -86
  329. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -1
  330. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -1
  331. package/plugins/manualColumnFreeze/manualColumnFreeze.js +24 -32
  332. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +25 -33
  333. package/plugins/manualColumnMove/manualColumnMove.js +133 -177
  334. package/plugins/manualColumnMove/manualColumnMove.mjs +133 -177
  335. package/plugins/manualColumnMove/ui/_base.js +1 -1
  336. package/plugins/manualColumnMove/ui/_base.mjs +1 -1
  337. package/plugins/manualColumnResize/manualColumnResize.js +169 -230
  338. package/plugins/manualColumnResize/manualColumnResize.mjs +169 -230
  339. package/plugins/manualRowMove/manualRowMove.js +106 -135
  340. package/plugins/manualRowMove/manualRowMove.mjs +106 -135
  341. package/plugins/manualRowMove/ui/_base.js +1 -1
  342. package/plugins/manualRowMove/ui/_base.mjs +1 -1
  343. package/plugins/manualRowResize/manualRowResize.js +150 -209
  344. package/plugins/manualRowResize/manualRowResize.mjs +150 -209
  345. package/plugins/mergeCells/calculations/autofill.js +1 -1
  346. package/plugins/mergeCells/calculations/autofill.mjs +1 -1
  347. package/plugins/mergeCells/calculations/selection.js +3 -72
  348. package/plugins/mergeCells/calculations/selection.mjs +3 -72
  349. package/plugins/mergeCells/cellCoords.js +1 -1
  350. package/plugins/mergeCells/cellCoords.mjs +1 -1
  351. package/plugins/mergeCells/cellsCollection.js +118 -2
  352. package/plugins/mergeCells/cellsCollection.mjs +118 -2
  353. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +12 -2
  354. package/plugins/mergeCells/contextMenuItem/toggleMerge.mjs +11 -1
  355. package/plugins/mergeCells/focusOrder.js +305 -0
  356. package/plugins/mergeCells/focusOrder.mjs +300 -0
  357. package/plugins/mergeCells/mergeCells.js +500 -398
  358. package/plugins/mergeCells/mergeCells.mjs +500 -398
  359. package/plugins/multiColumnSorting/multiColumnSorting.js +9 -3
  360. package/plugins/multiColumnSorting/multiColumnSorting.mjs +9 -3
  361. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +2 -2
  362. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +2 -2
  363. package/plugins/nestedHeaders/nestedHeaders.js +206 -254
  364. package/plugins/nestedHeaders/nestedHeaders.mjs +207 -255
  365. package/plugins/nestedHeaders/stateManager/headersTree.js +21 -32
  366. package/plugins/nestedHeaders/stateManager/headersTree.mjs +21 -32
  367. package/plugins/nestedHeaders/stateManager/index.js +30 -41
  368. package/plugins/nestedHeaders/stateManager/index.mjs +30 -41
  369. package/plugins/nestedHeaders/stateManager/sourceSettings.js +19 -30
  370. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +19 -30
  371. package/plugins/nestedHeaders/utils/ghostTable.js +1 -1
  372. package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -1
  373. package/plugins/nestedRows/data/dataManager.js +2 -2
  374. package/plugins/nestedRows/data/dataManager.mjs +2 -2
  375. package/plugins/nestedRows/nestedRows.js +154 -185
  376. package/plugins/nestedRows/nestedRows.mjs +155 -186
  377. package/plugins/nestedRows/ui/_base.js +1 -1
  378. package/plugins/nestedRows/ui/_base.mjs +1 -1
  379. package/plugins/nestedRows/ui/contextMenu.js +13 -17
  380. package/plugins/nestedRows/ui/contextMenu.mjs +11 -15
  381. package/plugins/nestedRows/utils/rowMoveController.js +6 -6
  382. package/plugins/nestedRows/utils/rowMoveController.mjs +6 -6
  383. package/plugins/persistentState/persistentState.js +1 -1
  384. package/plugins/persistentState/persistentState.mjs +1 -1
  385. package/plugins/persistentState/storage.js +3 -3
  386. package/plugins/persistentState/storage.mjs +3 -3
  387. package/plugins/search/search.js +8 -8
  388. package/plugins/search/search.mjs +8 -8
  389. package/plugins/touchScroll/touchScroll.js +16 -20
  390. package/plugins/touchScroll/touchScroll.mjs +17 -21
  391. package/plugins/trimRows/trimRows.js +7 -7
  392. package/plugins/trimRows/trimRows.mjs +7 -7
  393. package/plugins/undoRedo/index.js +1 -1
  394. package/renderers/checkboxRenderer/checkboxRenderer.js +8 -5
  395. package/renderers/checkboxRenderer/checkboxRenderer.mjs +8 -5
  396. package/selection/highlight/highlight.js +16 -18
  397. package/selection/highlight/highlight.mjs +15 -17
  398. package/selection/highlight/visualSelection.js +3 -1
  399. package/selection/highlight/visualSelection.mjs +3 -1
  400. package/selection/range.js +3 -5
  401. package/selection/range.mjs +2 -4
  402. package/selection/selection.js +227 -69
  403. package/selection/selection.mjs +225 -67
  404. package/selection/transformation.js +149 -118
  405. package/selection/transformation.mjs +149 -118
  406. package/shortcutContexts/commands/editor/closeAndSave.js +2 -2
  407. package/shortcutContexts/commands/editor/closeAndSave.mjs +2 -2
  408. package/shortcutContexts/commands/editor/open.js +18 -3
  409. package/shortcutContexts/commands/editor/open.mjs +18 -3
  410. package/shortcutContexts/commands/extendCellsSelection/down.js +1 -1
  411. package/shortcutContexts/commands/extendCellsSelection/down.mjs +1 -1
  412. package/shortcutContexts/commands/extendCellsSelection/left.js +1 -1
  413. package/shortcutContexts/commands/extendCellsSelection/left.mjs +1 -1
  414. package/shortcutContexts/commands/extendCellsSelection/right.js +1 -1
  415. package/shortcutContexts/commands/extendCellsSelection/right.mjs +1 -1
  416. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +1 -1
  417. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +1 -1
  418. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +3 -1
  419. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +3 -1
  420. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +9 -3
  421. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +9 -3
  422. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +10 -3
  423. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +10 -3
  424. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +3 -1
  425. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +3 -1
  426. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +3 -1
  427. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +3 -1
  428. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +3 -1
  429. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +3 -1
  430. package/shortcutContexts/commands/extendCellsSelection/toRows.js +1 -1
  431. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +1 -1
  432. package/shortcutContexts/commands/extendCellsSelection/up.js +1 -1
  433. package/shortcutContexts/commands/extendCellsSelection/up.mjs +1 -1
  434. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +6 -1
  435. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +6 -1
  436. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +6 -1
  437. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +6 -1
  438. package/shortcutContexts/grid.js +9 -3
  439. package/shortcutContexts/grid.mjs +9 -3
  440. package/shortcuts/context.js +3 -2
  441. package/shortcuts/context.mjs +3 -2
  442. package/shortcuts/manager.js +2 -2
  443. package/shortcuts/manager.mjs +2 -2
  444. package/tableView.js +53 -79
  445. package/tableView.mjs +53 -79
  446. package/translations/changesObservable/observable.js +21 -38
  447. package/translations/changesObservable/observable.mjs +21 -38
  448. package/translations/changesObservable/observer.js +7 -12
  449. package/translations/changesObservable/observer.mjs +6 -11
  450. package/translations/indexMapper.js +1 -1
  451. package/translations/indexMapper.mjs +1 -1
  452. package/translations/mapCollections/aggregatedCollection.js +2 -2
  453. package/translations/mapCollections/aggregatedCollection.mjs +2 -2
  454. package/translations/mapCollections/mapCollection.js +1 -1
  455. package/translations/mapCollections/mapCollection.mjs +1 -1
  456. package/translations/maps/indexMap.js +2 -2
  457. package/translations/maps/indexMap.mjs +2 -2
  458. package/translations/maps/linkedPhysicalIndexToValueMap.js +1 -1
  459. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +1 -1
  460. package/utils/dataStructures/linkedList.js +7 -2
  461. package/utils/dataStructures/linkedList.mjs +7 -2
  462. package/utils/dataStructures/tree.js +2 -2
  463. package/utils/dataStructures/tree.mjs +2 -2
  464. package/utils/ghostTable.js +1 -1
  465. package/utils/ghostTable.mjs +1 -1
  466. package/utils/interval.js +27 -45
  467. package/utils/interval.mjs +27 -45
  468. package/utils/samplesGenerator.js +1 -1
  469. package/utils/samplesGenerator.mjs +1 -1
@@ -2,13 +2,11 @@ import "core-js/modules/es.error.cause.js";
2
2
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
3
3
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
4
4
  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; }
5
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
6
6
  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); }
7
- function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
8
- function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
9
- function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
10
- function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
11
- function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
7
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
8
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
9
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
12
10
  import Highlight, { AREA_TYPE, HEADER_TYPE, FOCUS_TYPE } from "./highlight/highlight.mjs";
13
11
  import SelectionRange from "./range.mjs";
14
12
  import { createObjectPropListener, mixin } from "./../helpers/object.mjs";
@@ -24,6 +22,9 @@ import { A11Y_SELECTED } from "../helpers/a11y.mjs";
24
22
  * @class Selection
25
23
  * @util
26
24
  */
25
+ var _transformation = /*#__PURE__*/new WeakMap();
26
+ var _focusTransformation = /*#__PURE__*/new WeakMap();
27
+ var _isFocusSelectionChanged = /*#__PURE__*/new WeakMap();
27
28
  var _disableHeadersHighlight = /*#__PURE__*/new WeakMap();
28
29
  var _selectionSource = /*#__PURE__*/new WeakMap();
29
30
  var _expectedLayersCount = /*#__PURE__*/new WeakMap();
@@ -63,11 +64,17 @@ class Selection {
63
64
  */
64
65
  _defineProperty(this, "highlight", void 0);
65
66
  /**
66
- * The module for modifying coordinates.
67
+ * The module for modifying coordinates of the start and end selection.
67
68
  *
68
69
  * @type {Transformation}
69
70
  */
70
- _defineProperty(this, "transformation", void 0);
71
+ _classPrivateFieldInitSpec(this, _transformation, void 0);
72
+ /**
73
+ * The module for modifying coordinates of the focus selection.
74
+ *
75
+ * @type {Transformation}
76
+ */
77
+ _classPrivateFieldInitSpec(this, _focusTransformation, void 0);
71
78
  /**
72
79
  * The collection of the selection layer levels where the whole row was selected using the row header or
73
80
  * the corner header.
@@ -82,34 +89,31 @@ class Selection {
82
89
  * @type {Set<number>}
83
90
  */
84
91
  _defineProperty(this, "selectedByColumnHeader", new Set());
92
+ /**
93
+ * The flag which determines if the focus selection was changed.
94
+ *
95
+ * @type {boolean}
96
+ */
97
+ _classPrivateFieldInitSpec(this, _isFocusSelectionChanged, false);
85
98
  /**
86
99
  * When sets disable highlighting the headers even when the logical coordinates points on them.
87
100
  *
88
101
  * @type {boolean}
89
102
  */
90
- _classPrivateFieldInitSpec(this, _disableHeadersHighlight, {
91
- writable: true,
92
- value: false
93
- });
103
+ _classPrivateFieldInitSpec(this, _disableHeadersHighlight, false);
94
104
  /**
95
105
  * The source of the selection. It can be one of the following values: `mouse`, `unknown` or any other string.
96
106
  *
97
107
  * @type {'mouse' | 'unknown' | string}
98
108
  */
99
- _classPrivateFieldInitSpec(this, _selectionSource, {
100
- writable: true,
101
- value: 'unknown'
102
- });
109
+ _classPrivateFieldInitSpec(this, _selectionSource, 'unknown');
103
110
  /**
104
111
  * The number of expected layers. It is used mostly to track when the last selection layer of non-contiguous
105
112
  * selection is applied, thus the viewport scroll is triggered.
106
113
  *
107
114
  * @param {number}
108
115
  */
109
- _classPrivateFieldInitSpec(this, _expectedLayersCount, {
110
- writable: true,
111
- value: -1
112
- });
116
+ _classPrivateFieldInitSpec(this, _expectedLayersCount, -1);
113
117
  this.settings = settings;
114
118
  this.tableProps = tableProps;
115
119
  this.highlight = new Highlight({
@@ -132,71 +136,112 @@ class Selection {
132
136
  createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
133
137
  createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to)
134
138
  });
135
- this.transformation = new Transformation(this.selectedRange, {
139
+ _classPrivateFieldSet(_transformation, this, new Transformation(this.selectedRange, {
136
140
  rowIndexMapper: this.tableProps.rowIndexMapper,
137
141
  columnIndexMapper: this.tableProps.columnIndexMapper,
138
142
  countRenderableRows: () => this.tableProps.countRenderableRows(),
139
143
  countRenderableColumns: () => this.tableProps.countRenderableColumns(),
140
- countRowHeaders: () => this.tableProps.countRowHeaders(),
141
- countColHeaders: () => this.tableProps.countColHeaders(),
142
144
  visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
143
145
  renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
146
+ findFirstNonHiddenRenderableRow: function () {
147
+ return _this.tableProps.findFirstNonHiddenRenderableRow(...arguments);
148
+ },
149
+ findFirstNonHiddenRenderableColumn: function () {
150
+ return _this.tableProps.findFirstNonHiddenRenderableColumn(...arguments);
151
+ },
144
152
  createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
145
- navigableHeaders: () => settings.navigableHeaders,
146
153
  fixedRowsBottom: () => settings.fixedRowsBottom,
147
154
  minSpareRows: () => settings.minSpareRows,
148
155
  minSpareCols: () => settings.minSpareCols,
149
156
  autoWrapRow: () => settings.autoWrapRow,
150
157
  autoWrapCol: () => settings.autoWrapCol
151
- });
152
- this.transformation.addLocalHook('beforeTransformStart', function () {
158
+ }));
159
+ _classPrivateFieldSet(_focusTransformation, this, new Transformation(this.selectedRange, {
160
+ rowIndexMapper: this.tableProps.rowIndexMapper,
161
+ columnIndexMapper: this.tableProps.columnIndexMapper,
162
+ countRenderableRows: () => {
163
+ const range = this.selectedRange.current();
164
+ return this.tableProps.countRenderableRowsInRange(0, range.getOuterBottomEndCorner().row);
165
+ },
166
+ countRenderableColumns: () => {
167
+ const range = this.selectedRange.current();
168
+ return this.tableProps.countRenderableColumnsInRange(0, range.getOuterBottomEndCorner().col);
169
+ },
170
+ visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
171
+ renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
172
+ findFirstNonHiddenRenderableRow: function () {
173
+ return _this.tableProps.findFirstNonHiddenRenderableRow(...arguments);
174
+ },
175
+ findFirstNonHiddenRenderableColumn: function () {
176
+ return _this.tableProps.findFirstNonHiddenRenderableColumn(...arguments);
177
+ },
178
+ createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
179
+ fixedRowsBottom: () => 0,
180
+ minSpareRows: () => 0,
181
+ minSpareCols: () => 0,
182
+ autoWrapRow: () => true,
183
+ autoWrapCol: () => true
184
+ }));
185
+ _classPrivateFieldGet(_transformation, this).addLocalHook('beforeTransformStart', function () {
153
186
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
154
187
  args[_key] = arguments[_key];
155
188
  }
156
189
  return _this.runLocalHooks('beforeModifyTransformStart', ...args);
157
190
  });
158
- this.transformation.addLocalHook('afterTransformStart', function () {
191
+ _classPrivateFieldGet(_transformation, this).addLocalHook('afterTransformStart', function () {
159
192
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
160
193
  args[_key2] = arguments[_key2];
161
194
  }
162
195
  return _this.runLocalHooks('afterModifyTransformStart', ...args);
163
196
  });
164
- this.transformation.addLocalHook('beforeTransformEnd', function () {
197
+ _classPrivateFieldGet(_transformation, this).addLocalHook('beforeTransformEnd', function () {
165
198
  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
166
199
  args[_key3] = arguments[_key3];
167
200
  }
168
201
  return _this.runLocalHooks('beforeModifyTransformEnd', ...args);
169
202
  });
170
- this.transformation.addLocalHook('afterTransformEnd', function () {
203
+ _classPrivateFieldGet(_transformation, this).addLocalHook('afterTransformEnd', function () {
171
204
  for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
172
205
  args[_key4] = arguments[_key4];
173
206
  }
174
207
  return _this.runLocalHooks('afterModifyTransformEnd', ...args);
175
208
  });
176
- this.transformation.addLocalHook('insertRowRequire', function () {
209
+ _classPrivateFieldGet(_transformation, this).addLocalHook('insertRowRequire', function () {
177
210
  for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
178
211
  args[_key5] = arguments[_key5];
179
212
  }
180
213
  return _this.runLocalHooks('insertRowRequire', ...args);
181
214
  });
182
- this.transformation.addLocalHook('insertColRequire', function () {
215
+ _classPrivateFieldGet(_transformation, this).addLocalHook('insertColRequire', function () {
183
216
  for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
184
217
  args[_key6] = arguments[_key6];
185
218
  }
186
219
  return _this.runLocalHooks('insertColRequire', ...args);
187
220
  });
188
- this.transformation.addLocalHook('beforeRowWrap', function () {
221
+ _classPrivateFieldGet(_transformation, this).addLocalHook('beforeRowWrap', function () {
189
222
  for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
190
223
  args[_key7] = arguments[_key7];
191
224
  }
192
225
  return _this.runLocalHooks('beforeRowWrap', ...args);
193
226
  });
194
- this.transformation.addLocalHook('beforeColumnWrap', function () {
227
+ _classPrivateFieldGet(_transformation, this).addLocalHook('beforeColumnWrap', function () {
195
228
  for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
196
229
  args[_key8] = arguments[_key8];
197
230
  }
198
231
  return _this.runLocalHooks('beforeColumnWrap', ...args);
199
232
  });
233
+ _classPrivateFieldGet(_focusTransformation, this).addLocalHook('beforeTransformStart', function () {
234
+ for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
235
+ args[_key9] = arguments[_key9];
236
+ }
237
+ return _this.runLocalHooks('beforeModifyTransformFocus', ...args);
238
+ });
239
+ _classPrivateFieldGet(_focusTransformation, this).addLocalHook('afterTransformStart', function () {
240
+ for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
241
+ args[_key10] = arguments[_key10];
242
+ }
243
+ return _this.runLocalHooks('afterModifyTransformFocus', ...args);
244
+ });
200
245
  }
201
246
 
202
247
  /**
@@ -214,14 +259,14 @@ class Selection {
214
259
  * @param {'mouse' | 'unknown' | string} sourceName The source name.
215
260
  */
216
261
  markSource(sourceName) {
217
- _classPrivateFieldSet(this, _selectionSource, sourceName);
262
+ _classPrivateFieldSet(_selectionSource, this, sourceName);
218
263
  }
219
264
 
220
265
  /**
221
266
  * Marks end of the selection source. It restores the selection source to default value which is 'unknown'.
222
267
  */
223
268
  markEndSource() {
224
- _classPrivateFieldSet(this, _selectionSource, 'unknown');
269
+ _classPrivateFieldSet(_selectionSource, this, 'unknown');
225
270
  }
226
271
 
227
272
  /**
@@ -230,7 +275,7 @@ class Selection {
230
275
  * @returns {'mouse' | 'unknown' | string}
231
276
  */
232
277
  getSelectionSource() {
233
- return _classPrivateFieldGet(this, _selectionSource);
278
+ return _classPrivateFieldGet(_selectionSource, this);
234
279
  }
235
280
 
236
281
  /**
@@ -240,7 +285,7 @@ class Selection {
240
285
  * @param {number} layersCount The number of expected layers.
241
286
  */
242
287
  setExpectedLayers(layersCount) {
243
- _classPrivateFieldSet(this, _expectedLayersCount, layersCount);
288
+ _classPrivateFieldSet(_expectedLayersCount, this, layersCount);
244
289
  }
245
290
 
246
291
  /**
@@ -256,7 +301,7 @@ class Selection {
256
301
  finish() {
257
302
  this.runLocalHooks('afterSelectionFinished', Array.from(this.selectedRange));
258
303
  this.inProgress = false;
259
- _classPrivateFieldSet(this, _expectedLayersCount, -1);
304
+ _classPrivateFieldSet(_expectedLayersCount, this, -1);
260
305
  }
261
306
 
262
307
  /**
@@ -287,6 +332,7 @@ class Selection {
287
332
  // We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords
288
333
  // should be handled by next methods.
289
334
  const coordsClone = coords.clone();
335
+ _classPrivateFieldSet(_isFocusSelectionChanged, this, false);
290
336
  this.runLocalHooks(`beforeSetRangeStart${fragment ? 'Only' : ''}`, coordsClone);
291
337
  if (!isMultipleMode || isMultipleMode && !isMultipleSelection && isUndefined(multipleSelection)) {
292
338
  this.selectedRange.clear();
@@ -344,7 +390,20 @@ class Selection {
344
390
  cellRange.setFrom(cellRange.highlight);
345
391
  cellRange.setTo(cellRange.highlight);
346
392
  } else {
393
+ const horizontalDir = cellRange.getHorizontalDirection();
394
+ const verticalDir = cellRange.getVerticalDirection();
395
+ const isMultiple = this.isMultiple();
347
396
  cellRange.setTo(coordsClone);
397
+ if (isMultiple && (horizontalDir !== cellRange.getHorizontalDirection() || cellRange.getWidth() === 1 && !cellRange.includes(cellRange.highlight))) {
398
+ cellRange.from.assign({
399
+ col: cellRange.highlight.col
400
+ });
401
+ }
402
+ if (isMultiple && (verticalDir !== cellRange.getVerticalDirection() || cellRange.getHeight() === 1 && !cellRange.includes(cellRange.highlight))) {
403
+ cellRange.from.assign({
404
+ row: cellRange.highlight.row
405
+ });
406
+ }
348
407
  }
349
408
 
350
409
  // Prevent creating "area" selection that overlaps headers.
@@ -354,11 +413,7 @@ class Selection {
354
413
  }
355
414
  }
356
415
  this.runLocalHooks('beforeHighlightSet');
357
- const focusHighlight = this.highlight.getFocus();
358
- focusHighlight.clear();
359
- if (this.highlight.isEnabledFor(FOCUS_TYPE, cellRange.highlight)) {
360
- focusHighlight.add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
361
- }
416
+ this.setRangeFocus(this.selectedRange.current().highlight);
362
417
  const layerLevel = this.getLayerLevel();
363
418
 
364
419
  // If the next layer level is lower than previous then clear all area and header highlights. This is the
@@ -429,8 +484,8 @@ class Selection {
429
484
  columnHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
430
485
  }
431
486
  }
432
- const highlightRowHeaders = !_classPrivateFieldGet(this, _disableHeadersHighlight) && this.isEntireRowSelected() && (countCols > 0 && countCols === cellRange.getWidth() || countCols === 0 && this.isSelectedByRowHeader());
433
- const highlightColumnHeaders = !_classPrivateFieldGet(this, _disableHeadersHighlight) && this.isEntireColumnSelected() && (countRows > 0 && countRows === cellRange.getHeight() || countRows === 0 && this.isSelectedByColumnHeader());
487
+ const highlightRowHeaders = !_classPrivateFieldGet(_disableHeadersHighlight, this) && this.isEntireRowSelected() && (countCols > 0 && countCols === cellRange.getWidth() || countCols === 0 && this.isSelectedByRowHeader());
488
+ const highlightColumnHeaders = !_classPrivateFieldGet(_disableHeadersHighlight, this) && this.isEntireColumnSelected() && (countRows > 0 && countRows === cellRange.getHeight() || countRows === 0 && this.isSelectedByColumnHeader());
434
489
  if (highlightRowHeaders) {
435
490
  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();
436
491
  }
@@ -441,20 +496,36 @@ class Selection {
441
496
  activeCornerHeaderHighlight.add(this.tableProps.createCellCoords(-this.tableProps.countColHeaders(), -this.tableProps.countRowHeaders())).add(this.tableProps.createCellCoords(-1, -1)).commit();
442
497
  }
443
498
  }
444
- const isLastLayer = _classPrivateFieldGet(this, _expectedLayersCount) === -1 || this.selectedRange.size() === _classPrivateFieldGet(this, _expectedLayersCount);
499
+ const isLastLayer = _classPrivateFieldGet(_expectedLayersCount, this) === -1 || this.selectedRange.size() === _classPrivateFieldGet(_expectedLayersCount, this);
445
500
  this.runLocalHooks('afterSetRangeEnd', coords, isLastLayer);
446
501
  }
447
502
 
448
503
  /**
449
- * Returns information if we have a multiselection. This method check multiselection only on the latest layer of
450
- * the selection.
504
+ * Sets the selection focus position at the specified coordinates.
451
505
  *
452
- * @returns {boolean}
506
+ * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.
453
507
  */
454
- isMultiple() {
455
- const isMultipleListener = createObjectPropListener(!this.selectedRange.current().isSingle());
456
- this.runLocalHooks('afterIsMultipleSelection', isMultipleListener);
457
- return isMultipleListener.value;
508
+ setRangeFocus(coords) {
509
+ if (this.selectedRange.isEmpty()) {
510
+ return;
511
+ }
512
+ const cellRange = this.selectedRange.current();
513
+ if (!this.inProgress) {
514
+ this.runLocalHooks('beforeSetFocus', coords);
515
+ }
516
+ const focusHighlight = this.highlight.getFocus();
517
+ focusHighlight.clear();
518
+ cellRange.setHighlight(coords);
519
+ if (!this.inProgress) {
520
+ this.runLocalHooks('beforeHighlightSet');
521
+ }
522
+ if (this.highlight.isEnabledFor(FOCUS_TYPE, cellRange.highlight)) {
523
+ focusHighlight.add(cellRange.highlight).commit().syncWith(cellRange);
524
+ }
525
+ if (!this.inProgress) {
526
+ _classPrivateFieldSet(_isFocusSelectionChanged, this, true);
527
+ this.runLocalHooks('afterSetFocus', cellRange.highlight);
528
+ }
458
529
  }
459
530
 
460
531
  /**
@@ -467,7 +538,13 @@ class Selection {
467
538
  */
468
539
  transformStart(rowDelta, colDelta) {
469
540
  let createMissingRecords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
470
- this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, createMissingRecords));
541
+ if (this.settings.navigableHeaders) {
542
+ _classPrivateFieldGet(_transformation, this).setOffsetSize({
543
+ x: this.tableProps.countRowHeaders(),
544
+ y: this.tableProps.countColHeaders()
545
+ });
546
+ }
547
+ this.setRangeStart(_classPrivateFieldGet(_transformation, this).transformStart(rowDelta, colDelta, createMissingRecords));
471
548
  }
472
549
 
473
550
  /**
@@ -477,7 +554,44 @@ class Selection {
477
554
  * @param {number} colDelta Columns number to move, value can be passed as negative number.
478
555
  */
479
556
  transformEnd(rowDelta, colDelta) {
480
- this.setRangeEnd(this.transformation.transformEnd(rowDelta, colDelta));
557
+ if (this.settings.navigableHeaders) {
558
+ _classPrivateFieldGet(_transformation, this).setOffsetSize({
559
+ x: this.tableProps.countRowHeaders(),
560
+ y: this.tableProps.countColHeaders()
561
+ });
562
+ }
563
+ this.setRangeEnd(_classPrivateFieldGet(_transformation, this).transformEnd(rowDelta, colDelta));
564
+ }
565
+
566
+ /**
567
+ * Transforms the focus cell selection relative to the current focus position.
568
+ *
569
+ * @param {number} rowDelta Rows number to move, value can be passed as negative number.
570
+ * @param {number} colDelta Columns number to move, value can be passed as negative number.
571
+ */
572
+ transformFocus(rowDelta, colDelta) {
573
+ const range = this.selectedRange.current();
574
+ const {
575
+ row,
576
+ col
577
+ } = range.getOuterTopStartCorner();
578
+ const columnsInRange = this.tableProps.countRenderableColumnsInRange(0, col - 1);
579
+ const rowsInRange = this.tableProps.countRenderableRowsInRange(0, row - 1);
580
+ if (range.highlight.isHeader()) {
581
+ // for header focus selection calculate the new coords based on the selection including headers
582
+ _classPrivateFieldGet(_focusTransformation, this).setOffsetSize({
583
+ x: col < 0 ? Math.abs(col) : -columnsInRange,
584
+ y: row < 0 ? Math.abs(row) : -rowsInRange
585
+ });
586
+ } else {
587
+ // for focus selection in cells calculate the new coords only based on the selected cells
588
+ _classPrivateFieldGet(_focusTransformation, this).setOffsetSize({
589
+ x: col < 0 ? 0 : -columnsInRange,
590
+ y: row < 0 ? 0 : -rowsInRange
591
+ });
592
+ }
593
+ const focusCoords = _classPrivateFieldGet(_focusTransformation, this).transformStart(rowDelta, colDelta);
594
+ this.setRangeFocus(focusCoords.normalize());
481
595
  }
482
596
 
483
597
  /**
@@ -498,6 +612,30 @@ class Selection {
498
612
  return !this.selectedRange.isEmpty();
499
613
  }
500
614
 
615
+ /**
616
+ * Returns information if we have a multi-selection. This method check multi-selection only on the latest layer of
617
+ * the selection.
618
+ *
619
+ * @returns {boolean}
620
+ */
621
+ isMultiple() {
622
+ if (!this.isSelected()) {
623
+ return false;
624
+ }
625
+ const isMultipleListener = createObjectPropListener(!this.selectedRange.current().isSingle());
626
+ this.runLocalHooks('afterIsMultipleSelection', isMultipleListener);
627
+ return isMultipleListener.value;
628
+ }
629
+
630
+ /**
631
+ * Checks if the last selection involves changing the focus cell position only.
632
+ *
633
+ * @returns {boolean}
634
+ */
635
+ isFocusSelectionChanged() {
636
+ return this.isSelected() && _classPrivateFieldGet(_isFocusSelectionChanged, this);
637
+ }
638
+
501
639
  /**
502
640
  * Returns `true` if the selection was applied by clicking to the row header. If the `layerLevel`
503
641
  * argument is passed then only that layer will be checked. Otherwise, it checks if any row header
@@ -696,7 +834,7 @@ class Selection {
696
834
  focusPosition,
697
835
  disableHeadersHighlight
698
836
  } = options;
699
- _classPrivateFieldSet(this, _disableHeadersHighlight, disableHeadersHighlight);
837
+ _classPrivateFieldSet(_disableHeadersHighlight, this, disableHeadersHighlight);
700
838
  if (focusPosition && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.row) && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.col)) {
701
839
  highlight = this.tableProps.createCellCoords(clamp(focusPosition.row, rowFrom, nrOfRows - 1), clamp(focusPosition.col, columnFrom, nrOfColumns - 1));
702
840
  }
@@ -712,7 +850,7 @@ class Selection {
712
850
  }
713
851
  this.setRangeEnd(endCoords);
714
852
  this.finish();
715
- _classPrivateFieldSet(this, _disableHeadersHighlight, false);
853
+ _classPrivateFieldSet(_disableHeadersHighlight, this, false);
716
854
  }
717
855
 
718
856
  /**
@@ -780,9 +918,10 @@ class Selection {
780
918
  *
781
919
  * @param {number|string} startColumn Visual column index or column property from which the selection starts.
782
920
  * @param {number|string} [endColumn] Visual column index or column property from to the selection finishes.
783
- * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
784
- * The value can take visual row index from -N to N, where negative values
785
- * point to the headers and positive values point to the cell range.
921
+ * @param {number | { row: number, col: number }} [focusPosition=0] The argument allows changing the cell/header focus
922
+ * position. The value can take visual row index from -N to N, where negative values point to the headers and positive
923
+ * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus
924
+ * position horizontally.
786
925
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
787
926
  */
788
927
  selectColumns(startColumn) {
@@ -803,11 +942,20 @@ class Selection {
803
942
  countColHeaders
804
943
  });
805
944
  if (isValid) {
806
- const fromRow = countColHeaders === 0 ? 0 : clamp(focusPosition, columnHeaderLastIndex, -1);
945
+ let highlightRow = 0;
946
+ let highlightColumn = 0;
947
+ if (Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.row) && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.col)) {
948
+ highlightRow = clamp(focusPosition.row, columnHeaderLastIndex, countRows - 1);
949
+ highlightColumn = clamp(focusPosition.col, Math.min(start, end), Math.max(start, end));
950
+ } else {
951
+ highlightRow = clamp(focusPosition, columnHeaderLastIndex, countRows - 1);
952
+ highlightColumn = start;
953
+ }
954
+ const highlight = this.tableProps.createCellCoords(highlightRow, highlightColumn);
955
+ const fromRow = countColHeaders === 0 ? 0 : clamp(highlight.row, columnHeaderLastIndex, -1);
807
956
  const toRow = countRows - 1;
808
957
  const from = this.tableProps.createCellCoords(fromRow, start);
809
958
  const to = this.tableProps.createCellCoords(toRow, end);
810
- const highlight = this.tableProps.createCellCoords(clamp(focusPosition, columnHeaderLastIndex, countRows - 1), start);
811
959
  this.runLocalHooks('beforeSelectColumns', from, to, highlight);
812
960
 
813
961
  // disallow modifying row axis for that hooks
@@ -827,9 +975,10 @@ class Selection {
827
975
  *
828
976
  * @param {number} startRow Visual row index from which the selection starts.
829
977
  * @param {number} [endRow] Visual row index from to the selection finishes.
830
- * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
831
- * The value can take visual column index from -N to N, where negative values
832
- * point to the headers and positive values point to the cell range.
978
+ * @param {number | { row: number, col: number }} [focusPosition=0] The argument allows changing the cell/header focus
979
+ * position. The value can take visual row index from -N to N, where negative values point to the headers and positive
980
+ * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus
981
+ * position horizontally.
833
982
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
834
983
  */
835
984
  selectRows(startRow) {
@@ -848,11 +997,20 @@ class Selection {
848
997
  countColHeaders: 0
849
998
  });
850
999
  if (isValid) {
851
- const fromColumn = countRowHeaders === 0 ? 0 : clamp(focusPosition, rowHeaderLastIndex, -1);
1000
+ let highlightRow = 0;
1001
+ let highlightColumn = 0;
1002
+ if (Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.row) && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.col)) {
1003
+ highlightRow = clamp(focusPosition.row, Math.min(startRow, endRow), Math.max(startRow, endRow));
1004
+ highlightColumn = clamp(focusPosition.col, rowHeaderLastIndex, countCols - 1);
1005
+ } else {
1006
+ highlightRow = startRow;
1007
+ highlightColumn = clamp(focusPosition, rowHeaderLastIndex, countCols - 1);
1008
+ }
1009
+ const highlight = this.tableProps.createCellCoords(highlightRow, highlightColumn);
1010
+ const fromColumn = countRowHeaders === 0 ? 0 : clamp(highlight.col, rowHeaderLastIndex, -1);
852
1011
  const toColumn = countCols - 1;
853
1012
  const from = this.tableProps.createCellCoords(startRow, fromColumn);
854
1013
  const to = this.tableProps.createCellCoords(endRow, toColumn);
855
- const highlight = this.tableProps.createCellCoords(startRow, clamp(focusPosition, rowHeaderLastIndex, countCols - 1));
856
1014
  this.runLocalHooks('beforeSelectRows', from, to, highlight);
857
1015
 
858
1016
  // disallow modifying column axis for that hooks