handsontable 14.2.0-next-75c8bcd-20240306 → 14.3.0-next-13fe676-20240409

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 +9800 -10020
  106. package/dist/handsontable.full.min.css +3 -3
  107. package/dist/handsontable.full.min.js +292 -292
  108. package/dist/handsontable.js +7470 -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 +35 -11
  139. package/editors/dateEditor/dateEditor.mjs +35 -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
@@ -9,27 +9,28 @@ var _mixed = require("./../helpers/mixed");
9
9
  var _number = require("./../helpers/number");
10
10
  var _array = require("./../helpers/array");
11
11
  var _localHooks = _interopRequireDefault(require("./../mixins/localHooks"));
12
- var _transformation = _interopRequireDefault(require("./transformation"));
12
+ var _transformation2 = _interopRequireDefault(require("./transformation"));
13
13
  var _utils = require("./utils");
14
14
  var _templateLiteralTag = require("./../helpers/templateLiteralTag");
15
15
  var _a11y = require("../helpers/a11y");
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
19
19
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
20
20
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
21
21
  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; }
22
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
22
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
23
23
  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); }
24
- function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
25
- function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
26
- function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
27
- function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
28
- 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; } }
24
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
25
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
26
+ 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"); }
29
27
  /**
30
28
  * @class Selection
31
29
  * @util
32
30
  */
31
+ var _transformation = /*#__PURE__*/new WeakMap();
32
+ var _focusTransformation = /*#__PURE__*/new WeakMap();
33
+ var _isFocusSelectionChanged = /*#__PURE__*/new WeakMap();
33
34
  var _disableHeadersHighlight = /*#__PURE__*/new WeakMap();
34
35
  var _selectionSource = /*#__PURE__*/new WeakMap();
35
36
  var _expectedLayersCount = /*#__PURE__*/new WeakMap();
@@ -69,11 +70,17 @@ class Selection {
69
70
  */
70
71
  _defineProperty(this, "highlight", void 0);
71
72
  /**
72
- * The module for modifying coordinates.
73
+ * The module for modifying coordinates of the start and end selection.
73
74
  *
74
75
  * @type {Transformation}
75
76
  */
76
- _defineProperty(this, "transformation", void 0);
77
+ _classPrivateFieldInitSpec(this, _transformation, void 0);
78
+ /**
79
+ * The module for modifying coordinates of the focus selection.
80
+ *
81
+ * @type {Transformation}
82
+ */
83
+ _classPrivateFieldInitSpec(this, _focusTransformation, void 0);
77
84
  /**
78
85
  * The collection of the selection layer levels where the whole row was selected using the row header or
79
86
  * the corner header.
@@ -88,34 +95,31 @@ class Selection {
88
95
  * @type {Set<number>}
89
96
  */
90
97
  _defineProperty(this, "selectedByColumnHeader", new Set());
98
+ /**
99
+ * The flag which determines if the focus selection was changed.
100
+ *
101
+ * @type {boolean}
102
+ */
103
+ _classPrivateFieldInitSpec(this, _isFocusSelectionChanged, false);
91
104
  /**
92
105
  * When sets disable highlighting the headers even when the logical coordinates points on them.
93
106
  *
94
107
  * @type {boolean}
95
108
  */
96
- _classPrivateFieldInitSpec(this, _disableHeadersHighlight, {
97
- writable: true,
98
- value: false
99
- });
109
+ _classPrivateFieldInitSpec(this, _disableHeadersHighlight, false);
100
110
  /**
101
111
  * The source of the selection. It can be one of the following values: `mouse`, `unknown` or any other string.
102
112
  *
103
113
  * @type {'mouse' | 'unknown' | string}
104
114
  */
105
- _classPrivateFieldInitSpec(this, _selectionSource, {
106
- writable: true,
107
- value: 'unknown'
108
- });
115
+ _classPrivateFieldInitSpec(this, _selectionSource, 'unknown');
109
116
  /**
110
117
  * The number of expected layers. It is used mostly to track when the last selection layer of non-contiguous
111
118
  * selection is applied, thus the viewport scroll is triggered.
112
119
  *
113
120
  * @param {number}
114
121
  */
115
- _classPrivateFieldInitSpec(this, _expectedLayersCount, {
116
- writable: true,
117
- value: -1
118
- });
122
+ _classPrivateFieldInitSpec(this, _expectedLayersCount, -1);
119
123
  this.settings = settings;
120
124
  this.tableProps = tableProps;
121
125
  this.highlight = new _highlight.default({
@@ -138,71 +142,112 @@ class Selection {
138
142
  createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
139
143
  createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to)
140
144
  });
141
- this.transformation = new _transformation.default(this.selectedRange, {
145
+ _classPrivateFieldSet(_transformation, this, new _transformation2.default(this.selectedRange, {
142
146
  rowIndexMapper: this.tableProps.rowIndexMapper,
143
147
  columnIndexMapper: this.tableProps.columnIndexMapper,
144
148
  countRenderableRows: () => this.tableProps.countRenderableRows(),
145
149
  countRenderableColumns: () => this.tableProps.countRenderableColumns(),
146
- countRowHeaders: () => this.tableProps.countRowHeaders(),
147
- countColHeaders: () => this.tableProps.countColHeaders(),
148
150
  visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
149
151
  renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
152
+ findFirstNonHiddenRenderableRow: function () {
153
+ return _this.tableProps.findFirstNonHiddenRenderableRow(...arguments);
154
+ },
155
+ findFirstNonHiddenRenderableColumn: function () {
156
+ return _this.tableProps.findFirstNonHiddenRenderableColumn(...arguments);
157
+ },
150
158
  createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
151
- navigableHeaders: () => settings.navigableHeaders,
152
159
  fixedRowsBottom: () => settings.fixedRowsBottom,
153
160
  minSpareRows: () => settings.minSpareRows,
154
161
  minSpareCols: () => settings.minSpareCols,
155
162
  autoWrapRow: () => settings.autoWrapRow,
156
163
  autoWrapCol: () => settings.autoWrapCol
157
- });
158
- this.transformation.addLocalHook('beforeTransformStart', function () {
164
+ }));
165
+ _classPrivateFieldSet(_focusTransformation, this, new _transformation2.default(this.selectedRange, {
166
+ rowIndexMapper: this.tableProps.rowIndexMapper,
167
+ columnIndexMapper: this.tableProps.columnIndexMapper,
168
+ countRenderableRows: () => {
169
+ const range = this.selectedRange.current();
170
+ return this.tableProps.countRenderableRowsInRange(0, range.getOuterBottomEndCorner().row);
171
+ },
172
+ countRenderableColumns: () => {
173
+ const range = this.selectedRange.current();
174
+ return this.tableProps.countRenderableColumnsInRange(0, range.getOuterBottomEndCorner().col);
175
+ },
176
+ visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
177
+ renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
178
+ findFirstNonHiddenRenderableRow: function () {
179
+ return _this.tableProps.findFirstNonHiddenRenderableRow(...arguments);
180
+ },
181
+ findFirstNonHiddenRenderableColumn: function () {
182
+ return _this.tableProps.findFirstNonHiddenRenderableColumn(...arguments);
183
+ },
184
+ createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
185
+ fixedRowsBottom: () => 0,
186
+ minSpareRows: () => 0,
187
+ minSpareCols: () => 0,
188
+ autoWrapRow: () => true,
189
+ autoWrapCol: () => true
190
+ }));
191
+ _classPrivateFieldGet(_transformation, this).addLocalHook('beforeTransformStart', function () {
159
192
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
160
193
  args[_key] = arguments[_key];
161
194
  }
162
195
  return _this.runLocalHooks('beforeModifyTransformStart', ...args);
163
196
  });
164
- this.transformation.addLocalHook('afterTransformStart', function () {
197
+ _classPrivateFieldGet(_transformation, this).addLocalHook('afterTransformStart', function () {
165
198
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
166
199
  args[_key2] = arguments[_key2];
167
200
  }
168
201
  return _this.runLocalHooks('afterModifyTransformStart', ...args);
169
202
  });
170
- this.transformation.addLocalHook('beforeTransformEnd', function () {
203
+ _classPrivateFieldGet(_transformation, this).addLocalHook('beforeTransformEnd', function () {
171
204
  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
172
205
  args[_key3] = arguments[_key3];
173
206
  }
174
207
  return _this.runLocalHooks('beforeModifyTransformEnd', ...args);
175
208
  });
176
- this.transformation.addLocalHook('afterTransformEnd', function () {
209
+ _classPrivateFieldGet(_transformation, this).addLocalHook('afterTransformEnd', function () {
177
210
  for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
178
211
  args[_key4] = arguments[_key4];
179
212
  }
180
213
  return _this.runLocalHooks('afterModifyTransformEnd', ...args);
181
214
  });
182
- this.transformation.addLocalHook('insertRowRequire', function () {
215
+ _classPrivateFieldGet(_transformation, this).addLocalHook('insertRowRequire', function () {
183
216
  for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
184
217
  args[_key5] = arguments[_key5];
185
218
  }
186
219
  return _this.runLocalHooks('insertRowRequire', ...args);
187
220
  });
188
- this.transformation.addLocalHook('insertColRequire', function () {
221
+ _classPrivateFieldGet(_transformation, this).addLocalHook('insertColRequire', function () {
189
222
  for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
190
223
  args[_key6] = arguments[_key6];
191
224
  }
192
225
  return _this.runLocalHooks('insertColRequire', ...args);
193
226
  });
194
- this.transformation.addLocalHook('beforeRowWrap', function () {
227
+ _classPrivateFieldGet(_transformation, this).addLocalHook('beforeRowWrap', function () {
195
228
  for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
196
229
  args[_key7] = arguments[_key7];
197
230
  }
198
231
  return _this.runLocalHooks('beforeRowWrap', ...args);
199
232
  });
200
- this.transformation.addLocalHook('beforeColumnWrap', function () {
233
+ _classPrivateFieldGet(_transformation, this).addLocalHook('beforeColumnWrap', function () {
201
234
  for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
202
235
  args[_key8] = arguments[_key8];
203
236
  }
204
237
  return _this.runLocalHooks('beforeColumnWrap', ...args);
205
238
  });
239
+ _classPrivateFieldGet(_focusTransformation, this).addLocalHook('beforeTransformStart', function () {
240
+ for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
241
+ args[_key9] = arguments[_key9];
242
+ }
243
+ return _this.runLocalHooks('beforeModifyTransformFocus', ...args);
244
+ });
245
+ _classPrivateFieldGet(_focusTransformation, this).addLocalHook('afterTransformStart', function () {
246
+ for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
247
+ args[_key10] = arguments[_key10];
248
+ }
249
+ return _this.runLocalHooks('afterModifyTransformFocus', ...args);
250
+ });
206
251
  }
207
252
 
208
253
  /**
@@ -220,14 +265,14 @@ class Selection {
220
265
  * @param {'mouse' | 'unknown' | string} sourceName The source name.
221
266
  */
222
267
  markSource(sourceName) {
223
- _classPrivateFieldSet(this, _selectionSource, sourceName);
268
+ _classPrivateFieldSet(_selectionSource, this, sourceName);
224
269
  }
225
270
 
226
271
  /**
227
272
  * Marks end of the selection source. It restores the selection source to default value which is 'unknown'.
228
273
  */
229
274
  markEndSource() {
230
- _classPrivateFieldSet(this, _selectionSource, 'unknown');
275
+ _classPrivateFieldSet(_selectionSource, this, 'unknown');
231
276
  }
232
277
 
233
278
  /**
@@ -236,7 +281,7 @@ class Selection {
236
281
  * @returns {'mouse' | 'unknown' | string}
237
282
  */
238
283
  getSelectionSource() {
239
- return _classPrivateFieldGet(this, _selectionSource);
284
+ return _classPrivateFieldGet(_selectionSource, this);
240
285
  }
241
286
 
242
287
  /**
@@ -246,7 +291,7 @@ class Selection {
246
291
  * @param {number} layersCount The number of expected layers.
247
292
  */
248
293
  setExpectedLayers(layersCount) {
249
- _classPrivateFieldSet(this, _expectedLayersCount, layersCount);
294
+ _classPrivateFieldSet(_expectedLayersCount, this, layersCount);
250
295
  }
251
296
 
252
297
  /**
@@ -262,7 +307,7 @@ class Selection {
262
307
  finish() {
263
308
  this.runLocalHooks('afterSelectionFinished', Array.from(this.selectedRange));
264
309
  this.inProgress = false;
265
- _classPrivateFieldSet(this, _expectedLayersCount, -1);
310
+ _classPrivateFieldSet(_expectedLayersCount, this, -1);
266
311
  }
267
312
 
268
313
  /**
@@ -293,6 +338,7 @@ class Selection {
293
338
  // We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords
294
339
  // should be handled by next methods.
295
340
  const coordsClone = coords.clone();
341
+ _classPrivateFieldSet(_isFocusSelectionChanged, this, false);
296
342
  this.runLocalHooks(`beforeSetRangeStart${fragment ? 'Only' : ''}`, coordsClone);
297
343
  if (!isMultipleMode || isMultipleMode && !isMultipleSelection && (0, _mixed.isUndefined)(multipleSelection)) {
298
344
  this.selectedRange.clear();
@@ -350,7 +396,20 @@ class Selection {
350
396
  cellRange.setFrom(cellRange.highlight);
351
397
  cellRange.setTo(cellRange.highlight);
352
398
  } else {
399
+ const horizontalDir = cellRange.getHorizontalDirection();
400
+ const verticalDir = cellRange.getVerticalDirection();
401
+ const isMultiple = this.isMultiple();
353
402
  cellRange.setTo(coordsClone);
403
+ if (isMultiple && (horizontalDir !== cellRange.getHorizontalDirection() || cellRange.getWidth() === 1 && !cellRange.includes(cellRange.highlight))) {
404
+ cellRange.from.assign({
405
+ col: cellRange.highlight.col
406
+ });
407
+ }
408
+ if (isMultiple && (verticalDir !== cellRange.getVerticalDirection() || cellRange.getHeight() === 1 && !cellRange.includes(cellRange.highlight))) {
409
+ cellRange.from.assign({
410
+ row: cellRange.highlight.row
411
+ });
412
+ }
354
413
  }
355
414
 
356
415
  // Prevent creating "area" selection that overlaps headers.
@@ -360,11 +419,7 @@ class Selection {
360
419
  }
361
420
  }
362
421
  this.runLocalHooks('beforeHighlightSet');
363
- const focusHighlight = this.highlight.getFocus();
364
- focusHighlight.clear();
365
- if (this.highlight.isEnabledFor(_highlight.FOCUS_TYPE, cellRange.highlight)) {
366
- focusHighlight.add(this.selectedRange.current().highlight).commit().syncWith(cellRange);
367
- }
422
+ this.setRangeFocus(this.selectedRange.current().highlight);
368
423
  const layerLevel = this.getLayerLevel();
369
424
 
370
425
  // If the next layer level is lower than previous then clear all area and header highlights. This is the
@@ -435,8 +490,8 @@ class Selection {
435
490
  columnHighlight.add(columnCoordsFrom).add(columnCoordsTo).commit();
436
491
  }
437
492
  }
438
- const highlightRowHeaders = !_classPrivateFieldGet(this, _disableHeadersHighlight) && this.isEntireRowSelected() && (countCols > 0 && countCols === cellRange.getWidth() || countCols === 0 && this.isSelectedByRowHeader());
439
- const highlightColumnHeaders = !_classPrivateFieldGet(this, _disableHeadersHighlight) && this.isEntireColumnSelected() && (countRows > 0 && countRows === cellRange.getHeight() || countRows === 0 && this.isSelectedByColumnHeader());
493
+ const highlightRowHeaders = !_classPrivateFieldGet(_disableHeadersHighlight, this) && this.isEntireRowSelected() && (countCols > 0 && countCols === cellRange.getWidth() || countCols === 0 && this.isSelectedByRowHeader());
494
+ const highlightColumnHeaders = !_classPrivateFieldGet(_disableHeadersHighlight, this) && this.isEntireColumnSelected() && (countRows > 0 && countRows === cellRange.getHeight() || countRows === 0 && this.isSelectedByColumnHeader());
440
495
  if (highlightRowHeaders) {
441
496
  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();
442
497
  }
@@ -447,20 +502,36 @@ class Selection {
447
502
  activeCornerHeaderHighlight.add(this.tableProps.createCellCoords(-this.tableProps.countColHeaders(), -this.tableProps.countRowHeaders())).add(this.tableProps.createCellCoords(-1, -1)).commit();
448
503
  }
449
504
  }
450
- const isLastLayer = _classPrivateFieldGet(this, _expectedLayersCount) === -1 || this.selectedRange.size() === _classPrivateFieldGet(this, _expectedLayersCount);
505
+ const isLastLayer = _classPrivateFieldGet(_expectedLayersCount, this) === -1 || this.selectedRange.size() === _classPrivateFieldGet(_expectedLayersCount, this);
451
506
  this.runLocalHooks('afterSetRangeEnd', coords, isLastLayer);
452
507
  }
453
508
 
454
509
  /**
455
- * Returns information if we have a multiselection. This method check multiselection only on the latest layer of
456
- * the selection.
510
+ * Sets the selection focus position at the specified coordinates.
457
511
  *
458
- * @returns {boolean}
512
+ * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.
459
513
  */
460
- isMultiple() {
461
- const isMultipleListener = (0, _object.createObjectPropListener)(!this.selectedRange.current().isSingle());
462
- this.runLocalHooks('afterIsMultipleSelection', isMultipleListener);
463
- return isMultipleListener.value;
514
+ setRangeFocus(coords) {
515
+ if (this.selectedRange.isEmpty()) {
516
+ return;
517
+ }
518
+ const cellRange = this.selectedRange.current();
519
+ if (!this.inProgress) {
520
+ this.runLocalHooks('beforeSetFocus', coords);
521
+ }
522
+ const focusHighlight = this.highlight.getFocus();
523
+ focusHighlight.clear();
524
+ cellRange.setHighlight(coords);
525
+ if (!this.inProgress) {
526
+ this.runLocalHooks('beforeHighlightSet');
527
+ }
528
+ if (this.highlight.isEnabledFor(_highlight.FOCUS_TYPE, cellRange.highlight)) {
529
+ focusHighlight.add(cellRange.highlight).commit().syncWith(cellRange);
530
+ }
531
+ if (!this.inProgress) {
532
+ _classPrivateFieldSet(_isFocusSelectionChanged, this, true);
533
+ this.runLocalHooks('afterSetFocus', cellRange.highlight);
534
+ }
464
535
  }
465
536
 
466
537
  /**
@@ -473,7 +544,13 @@ class Selection {
473
544
  */
474
545
  transformStart(rowDelta, colDelta) {
475
546
  let createMissingRecords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
476
- this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, createMissingRecords));
547
+ if (this.settings.navigableHeaders) {
548
+ _classPrivateFieldGet(_transformation, this).setOffsetSize({
549
+ x: this.tableProps.countRowHeaders(),
550
+ y: this.tableProps.countColHeaders()
551
+ });
552
+ }
553
+ this.setRangeStart(_classPrivateFieldGet(_transformation, this).transformStart(rowDelta, colDelta, createMissingRecords));
477
554
  }
478
555
 
479
556
  /**
@@ -483,7 +560,44 @@ class Selection {
483
560
  * @param {number} colDelta Columns number to move, value can be passed as negative number.
484
561
  */
485
562
  transformEnd(rowDelta, colDelta) {
486
- this.setRangeEnd(this.transformation.transformEnd(rowDelta, colDelta));
563
+ if (this.settings.navigableHeaders) {
564
+ _classPrivateFieldGet(_transformation, this).setOffsetSize({
565
+ x: this.tableProps.countRowHeaders(),
566
+ y: this.tableProps.countColHeaders()
567
+ });
568
+ }
569
+ this.setRangeEnd(_classPrivateFieldGet(_transformation, this).transformEnd(rowDelta, colDelta));
570
+ }
571
+
572
+ /**
573
+ * Transforms the focus cell selection relative to the current focus position.
574
+ *
575
+ * @param {number} rowDelta Rows number to move, value can be passed as negative number.
576
+ * @param {number} colDelta Columns number to move, value can be passed as negative number.
577
+ */
578
+ transformFocus(rowDelta, colDelta) {
579
+ const range = this.selectedRange.current();
580
+ const {
581
+ row,
582
+ col
583
+ } = range.getOuterTopStartCorner();
584
+ const columnsInRange = this.tableProps.countRenderableColumnsInRange(0, col - 1);
585
+ const rowsInRange = this.tableProps.countRenderableRowsInRange(0, row - 1);
586
+ if (range.highlight.isHeader()) {
587
+ // for header focus selection calculate the new coords based on the selection including headers
588
+ _classPrivateFieldGet(_focusTransformation, this).setOffsetSize({
589
+ x: col < 0 ? Math.abs(col) : -columnsInRange,
590
+ y: row < 0 ? Math.abs(row) : -rowsInRange
591
+ });
592
+ } else {
593
+ // for focus selection in cells calculate the new coords only based on the selected cells
594
+ _classPrivateFieldGet(_focusTransformation, this).setOffsetSize({
595
+ x: col < 0 ? 0 : -columnsInRange,
596
+ y: row < 0 ? 0 : -rowsInRange
597
+ });
598
+ }
599
+ const focusCoords = _classPrivateFieldGet(_focusTransformation, this).transformStart(rowDelta, colDelta);
600
+ this.setRangeFocus(focusCoords.normalize());
487
601
  }
488
602
 
489
603
  /**
@@ -504,6 +618,30 @@ class Selection {
504
618
  return !this.selectedRange.isEmpty();
505
619
  }
506
620
 
621
+ /**
622
+ * Returns information if we have a multi-selection. This method check multi-selection only on the latest layer of
623
+ * the selection.
624
+ *
625
+ * @returns {boolean}
626
+ */
627
+ isMultiple() {
628
+ if (!this.isSelected()) {
629
+ return false;
630
+ }
631
+ const isMultipleListener = (0, _object.createObjectPropListener)(!this.selectedRange.current().isSingle());
632
+ this.runLocalHooks('afterIsMultipleSelection', isMultipleListener);
633
+ return isMultipleListener.value;
634
+ }
635
+
636
+ /**
637
+ * Checks if the last selection involves changing the focus cell position only.
638
+ *
639
+ * @returns {boolean}
640
+ */
641
+ isFocusSelectionChanged() {
642
+ return this.isSelected() && _classPrivateFieldGet(_isFocusSelectionChanged, this);
643
+ }
644
+
507
645
  /**
508
646
  * Returns `true` if the selection was applied by clicking to the row header. If the `layerLevel`
509
647
  * argument is passed then only that layer will be checked. Otherwise, it checks if any row header
@@ -702,7 +840,7 @@ class Selection {
702
840
  focusPosition,
703
841
  disableHeadersHighlight
704
842
  } = options;
705
- _classPrivateFieldSet(this, _disableHeadersHighlight, disableHeadersHighlight);
843
+ _classPrivateFieldSet(_disableHeadersHighlight, this, disableHeadersHighlight);
706
844
  if (focusPosition && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.row) && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.col)) {
707
845
  highlight = this.tableProps.createCellCoords((0, _number.clamp)(focusPosition.row, rowFrom, nrOfRows - 1), (0, _number.clamp)(focusPosition.col, columnFrom, nrOfColumns - 1));
708
846
  }
@@ -718,7 +856,7 @@ class Selection {
718
856
  }
719
857
  this.setRangeEnd(endCoords);
720
858
  this.finish();
721
- _classPrivateFieldSet(this, _disableHeadersHighlight, false);
859
+ _classPrivateFieldSet(_disableHeadersHighlight, this, false);
722
860
  }
723
861
 
724
862
  /**
@@ -786,9 +924,10 @@ class Selection {
786
924
  *
787
925
  * @param {number|string} startColumn Visual column index or column property from which the selection starts.
788
926
  * @param {number|string} [endColumn] Visual column index or column property from to the selection finishes.
789
- * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
790
- * The value can take visual row index from -N to N, where negative values
791
- * point to the headers and positive values point to the cell range.
927
+ * @param {number | { row: number, col: number }} [focusPosition=0] The argument allows changing the cell/header focus
928
+ * position. The value can take visual row index from -N to N, where negative values point to the headers and positive
929
+ * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus
930
+ * position horizontally.
792
931
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
793
932
  */
794
933
  selectColumns(startColumn) {
@@ -809,11 +948,20 @@ class Selection {
809
948
  countColHeaders
810
949
  });
811
950
  if (isValid) {
812
- const fromRow = countColHeaders === 0 ? 0 : (0, _number.clamp)(focusPosition, columnHeaderLastIndex, -1);
951
+ let highlightRow = 0;
952
+ let highlightColumn = 0;
953
+ if (Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.row) && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.col)) {
954
+ highlightRow = (0, _number.clamp)(focusPosition.row, columnHeaderLastIndex, countRows - 1);
955
+ highlightColumn = (0, _number.clamp)(focusPosition.col, Math.min(start, end), Math.max(start, end));
956
+ } else {
957
+ highlightRow = (0, _number.clamp)(focusPosition, columnHeaderLastIndex, countRows - 1);
958
+ highlightColumn = start;
959
+ }
960
+ const highlight = this.tableProps.createCellCoords(highlightRow, highlightColumn);
961
+ const fromRow = countColHeaders === 0 ? 0 : (0, _number.clamp)(highlight.row, columnHeaderLastIndex, -1);
813
962
  const toRow = countRows - 1;
814
963
  const from = this.tableProps.createCellCoords(fromRow, start);
815
964
  const to = this.tableProps.createCellCoords(toRow, end);
816
- const highlight = this.tableProps.createCellCoords((0, _number.clamp)(focusPosition, columnHeaderLastIndex, countRows - 1), start);
817
965
  this.runLocalHooks('beforeSelectColumns', from, to, highlight);
818
966
 
819
967
  // disallow modifying row axis for that hooks
@@ -833,9 +981,10 @@ class Selection {
833
981
  *
834
982
  * @param {number} startRow Visual row index from which the selection starts.
835
983
  * @param {number} [endRow] Visual row index from to the selection finishes.
836
- * @param {number} [focusPosition=0] The argument allows changing the cell/header focus position.
837
- * The value can take visual column index from -N to N, where negative values
838
- * point to the headers and positive values point to the cell range.
984
+ * @param {number | { row: number, col: number }} [focusPosition=0] The argument allows changing the cell/header focus
985
+ * position. The value can take visual row index from -N to N, where negative values point to the headers and positive
986
+ * values point to the cell range. An object with `row` and `col` properties also can be passed to change the focus
987
+ * position horizontally.
839
988
  * @returns {boolean} Returns `true` if selection was successful, `false` otherwise.
840
989
  */
841
990
  selectRows(startRow) {
@@ -854,11 +1003,20 @@ class Selection {
854
1003
  countColHeaders: 0
855
1004
  });
856
1005
  if (isValid) {
857
- const fromColumn = countRowHeaders === 0 ? 0 : (0, _number.clamp)(focusPosition, rowHeaderLastIndex, -1);
1006
+ let highlightRow = 0;
1007
+ let highlightColumn = 0;
1008
+ if (Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.row) && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.col)) {
1009
+ highlightRow = (0, _number.clamp)(focusPosition.row, Math.min(startRow, endRow), Math.max(startRow, endRow));
1010
+ highlightColumn = (0, _number.clamp)(focusPosition.col, rowHeaderLastIndex, countCols - 1);
1011
+ } else {
1012
+ highlightRow = startRow;
1013
+ highlightColumn = (0, _number.clamp)(focusPosition, rowHeaderLastIndex, countCols - 1);
1014
+ }
1015
+ const highlight = this.tableProps.createCellCoords(highlightRow, highlightColumn);
1016
+ const fromColumn = countRowHeaders === 0 ? 0 : (0, _number.clamp)(highlight.col, rowHeaderLastIndex, -1);
858
1017
  const toColumn = countCols - 1;
859
1018
  const from = this.tableProps.createCellCoords(startRow, fromColumn);
860
1019
  const to = this.tableProps.createCellCoords(endRow, toColumn);
861
- const highlight = this.tableProps.createCellCoords(startRow, (0, _number.clamp)(focusPosition, rowHeaderLastIndex, countCols - 1));
862
1020
  this.runLocalHooks('beforeSelectRows', from, to, highlight);
863
1021
 
864
1022
  // disallow modifying column axis for that hooks