handsontable 16.0.1 → 16.1.0-next-91b8a0f-20250905

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 (489) hide show
  1. package/3rdparty/walkontable/src/overlays.js +12 -2
  2. package/3rdparty/walkontable/src/overlays.mjs +12 -2
  3. package/3rdparty/walkontable/src/viewport.js +2 -6
  4. package/3rdparty/walkontable/src/viewport.mjs +2 -6
  5. package/CHANGELOG.md +37 -0
  6. package/base.js +2 -2
  7. package/base.mjs +2 -2
  8. package/cellTypes/autocompleteType/accessors/index.js +7 -0
  9. package/cellTypes/autocompleteType/accessors/index.mjs +2 -0
  10. package/cellTypes/autocompleteType/accessors/valueGetter.js +14 -0
  11. package/cellTypes/autocompleteType/accessors/valueGetter.mjs +10 -0
  12. package/cellTypes/autocompleteType/accessors/valueSetter.js +25 -0
  13. package/cellTypes/autocompleteType/accessors/valueSetter.mjs +21 -0
  14. package/cellTypes/autocompleteType/autocompleteType.js +4 -1
  15. package/cellTypes/autocompleteType/autocompleteType.mjs +4 -1
  16. package/cellTypes/checkboxType/accessors/index.js +5 -0
  17. package/cellTypes/checkboxType/accessors/index.mjs +1 -0
  18. package/cellTypes/checkboxType/accessors/valueSetter.js +26 -0
  19. package/cellTypes/checkboxType/accessors/valueSetter.mjs +22 -0
  20. package/cellTypes/checkboxType/checkboxType.js +3 -1
  21. package/cellTypes/checkboxType/checkboxType.mjs +3 -1
  22. package/cellTypes/dropdownType/accessors/index.js +7 -0
  23. package/cellTypes/dropdownType/accessors/index.mjs +2 -0
  24. package/cellTypes/dropdownType/accessors/valueGetter.js +14 -0
  25. package/cellTypes/dropdownType/accessors/valueGetter.mjs +10 -0
  26. package/cellTypes/dropdownType/accessors/valueSetter.js +17 -0
  27. package/cellTypes/dropdownType/accessors/valueSetter.mjs +13 -0
  28. package/cellTypes/dropdownType/dropdownType.js +4 -1
  29. package/cellTypes/dropdownType/dropdownType.mjs +4 -1
  30. package/cellTypes/numericType/accessors/index.js +5 -0
  31. package/cellTypes/numericType/accessors/index.mjs +1 -0
  32. package/cellTypes/numericType/accessors/valueSetter.js +19 -0
  33. package/cellTypes/numericType/accessors/valueSetter.mjs +15 -0
  34. package/cellTypes/numericType/numericType.js +3 -1
  35. package/cellTypes/numericType/numericType.mjs +3 -1
  36. package/core/focusCatcher/index.js +37 -112
  37. package/core/focusCatcher/index.mjs +35 -110
  38. package/core/focusCatcher/utils.js +31 -0
  39. package/core/focusCatcher/utils.mjs +27 -0
  40. package/core/hooks/constants.js +242 -0
  41. package/core/hooks/constants.mjs +242 -0
  42. package/core/hooks/index.d.ts +22 -0
  43. package/core/viewportScroll/scrollStrategies/focusScroll.js +5 -1
  44. package/core/viewportScroll/scrollStrategies/focusScroll.mjs +5 -1
  45. package/core/viewportScroll/utils.js +1 -1
  46. package/core/viewportScroll/utils.mjs +1 -1
  47. package/core.d.ts +4 -0
  48. package/core.js +237 -139
  49. package/core.mjs +240 -142
  50. package/dataMap/dataMap.js +13 -3
  51. package/dataMap/dataMap.mjs +14 -4
  52. package/dataMap/dataSource.js +16 -0
  53. package/dataMap/dataSource.mjs +16 -0
  54. package/dataMap/metaManager/lazyFactoryMap.js +4 -3
  55. package/dataMap/metaManager/lazyFactoryMap.mjs +2 -1
  56. package/dataMap/metaManager/metaLayers/cellMeta.js +3 -2
  57. package/dataMap/metaManager/metaLayers/cellMeta.mjs +3 -2
  58. package/dataMap/metaManager/metaSchema.js +289 -4
  59. package/dataMap/metaManager/metaSchema.mjs +289 -4
  60. package/dataMap/metaManager/utils.js +0 -11
  61. package/dataMap/metaManager/utils.mjs +0 -10
  62. package/dataMap/replaceData.js +1 -0
  63. package/dataMap/replaceData.mjs +1 -0
  64. package/dist/handsontable.css +281 -4
  65. package/dist/handsontable.full.css +281 -4
  66. package/dist/handsontable.full.js +7842 -2990
  67. package/dist/handsontable.full.min.css +4 -5
  68. package/dist/handsontable.full.min.js +167 -165
  69. package/dist/handsontable.js +9638 -4807
  70. package/dist/handsontable.min.css +4 -4
  71. package/dist/handsontable.min.js +52 -50
  72. package/dist/languages/all.js +231 -21
  73. package/dist/languages/all.min.js +1 -1
  74. package/dist/languages/ar-AR.js +11 -1
  75. package/dist/languages/ar-AR.min.js +1 -1
  76. package/dist/languages/cs-CZ.js +11 -1
  77. package/dist/languages/cs-CZ.min.js +1 -1
  78. package/dist/languages/de-CH.js +11 -1
  79. package/dist/languages/de-CH.min.js +1 -1
  80. package/dist/languages/de-DE.js +11 -1
  81. package/dist/languages/de-DE.min.js +1 -1
  82. package/dist/languages/en-US.js +11 -1
  83. package/dist/languages/en-US.min.js +1 -1
  84. package/dist/languages/es-MX.js +11 -1
  85. package/dist/languages/es-MX.min.js +1 -1
  86. package/dist/languages/fa-IR.js +11 -1
  87. package/dist/languages/fa-IR.min.js +1 -1
  88. package/dist/languages/fr-FR.js +11 -1
  89. package/dist/languages/fr-FR.min.js +1 -1
  90. package/dist/languages/hr-HR.js +11 -1
  91. package/dist/languages/hr-HR.min.js +1 -1
  92. package/dist/languages/it-IT.js +11 -1
  93. package/dist/languages/it-IT.min.js +1 -1
  94. package/dist/languages/ja-JP.js +11 -1
  95. package/dist/languages/ja-JP.min.js +1 -1
  96. package/dist/languages/ko-KR.js +11 -1
  97. package/dist/languages/ko-KR.min.js +1 -1
  98. package/dist/languages/lv-LV.js +11 -1
  99. package/dist/languages/lv-LV.min.js +1 -1
  100. package/dist/languages/nb-NO.js +11 -1
  101. package/dist/languages/nb-NO.min.js +1 -1
  102. package/dist/languages/nl-NL.js +11 -1
  103. package/dist/languages/nl-NL.min.js +1 -1
  104. package/dist/languages/pl-PL.js +11 -1
  105. package/dist/languages/pl-PL.min.js +1 -1
  106. package/dist/languages/pt-BR.js +11 -1
  107. package/dist/languages/pt-BR.min.js +1 -1
  108. package/dist/languages/ru-RU.js +11 -1
  109. package/dist/languages/ru-RU.min.js +1 -1
  110. package/dist/languages/sr-SP.js +11 -1
  111. package/dist/languages/sr-SP.min.js +1 -1
  112. package/dist/languages/zh-CN.js +11 -1
  113. package/dist/languages/zh-CN.min.js +1 -1
  114. package/dist/languages/zh-TW.js +11 -1
  115. package/dist/languages/zh-TW.min.js +1 -1
  116. package/editorManager.js +4 -4
  117. package/editorManager.mjs +4 -4
  118. package/editors/autocompleteEditor/autocompleteEditor.js +50 -112
  119. package/editors/autocompleteEditor/autocompleteEditor.mjs +51 -113
  120. package/editors/baseEditor/baseEditor.js +10 -6
  121. package/editors/baseEditor/baseEditor.mjs +10 -6
  122. package/editors/handsontableEditor/handsontableEditor.js +9 -9
  123. package/editors/handsontableEditor/handsontableEditor.mjs +9 -9
  124. package/editors/textEditor/textEditor.js +0 -7
  125. package/editors/textEditor/textEditor.mjs +0 -7
  126. package/focusManager.js +2 -2
  127. package/focusManager.mjs +2 -2
  128. package/helpers/a11y.js +15 -2
  129. package/helpers/a11y.mjs +10 -2
  130. package/helpers/console.js +12 -0
  131. package/helpers/console.mjs +11 -0
  132. package/helpers/dom/element.js +4 -4
  133. package/helpers/dom/element.mjs +4 -4
  134. package/helpers/mixed.js +65 -2
  135. package/helpers/mixed.mjs +63 -2
  136. package/helpers/number.js +28 -0
  137. package/helpers/number.mjs +26 -0
  138. package/helpers/object.js +35 -0
  139. package/helpers/object.mjs +34 -0
  140. package/helpers/string.js +19 -0
  141. package/helpers/string.mjs +18 -0
  142. package/helpers/templateLiteralTag.js +57 -1
  143. package/helpers/templateLiteralTag.mjs +56 -1
  144. package/i18n/constants.js +13 -1
  145. package/i18n/constants.mjs +13 -1
  146. package/i18n/languages/ar-AR.js +11 -1
  147. package/i18n/languages/ar-AR.mjs +11 -1
  148. package/i18n/languages/cs-CZ.js +11 -1
  149. package/i18n/languages/cs-CZ.mjs +11 -1
  150. package/i18n/languages/de-CH.js +11 -1
  151. package/i18n/languages/de-CH.mjs +11 -1
  152. package/i18n/languages/de-DE.js +11 -1
  153. package/i18n/languages/de-DE.mjs +11 -1
  154. package/i18n/languages/en-US.js +11 -1
  155. package/i18n/languages/en-US.mjs +11 -1
  156. package/i18n/languages/es-MX.js +11 -1
  157. package/i18n/languages/es-MX.mjs +11 -1
  158. package/i18n/languages/fa-IR.js +11 -1
  159. package/i18n/languages/fa-IR.mjs +11 -1
  160. package/i18n/languages/fr-FR.js +11 -1
  161. package/i18n/languages/fr-FR.mjs +11 -1
  162. package/i18n/languages/hr-HR.js +11 -1
  163. package/i18n/languages/hr-HR.mjs +11 -1
  164. package/i18n/languages/it-IT.js +11 -1
  165. package/i18n/languages/it-IT.mjs +11 -1
  166. package/i18n/languages/ja-JP.js +11 -1
  167. package/i18n/languages/ja-JP.mjs +11 -1
  168. package/i18n/languages/ko-KR.js +11 -1
  169. package/i18n/languages/ko-KR.mjs +11 -1
  170. package/i18n/languages/lv-LV.js +11 -1
  171. package/i18n/languages/lv-LV.mjs +11 -1
  172. package/i18n/languages/nb-NO.js +11 -1
  173. package/i18n/languages/nb-NO.mjs +11 -1
  174. package/i18n/languages/nl-NL.js +11 -1
  175. package/i18n/languages/nl-NL.mjs +11 -1
  176. package/i18n/languages/pl-PL.js +11 -1
  177. package/i18n/languages/pl-PL.mjs +11 -1
  178. package/i18n/languages/pt-BR.js +11 -1
  179. package/i18n/languages/pt-BR.mjs +11 -1
  180. package/i18n/languages/ru-RU.js +11 -1
  181. package/i18n/languages/ru-RU.mjs +11 -1
  182. package/i18n/languages/sr-SP.js +11 -1
  183. package/i18n/languages/sr-SP.mjs +11 -1
  184. package/i18n/languages/zh-CN.js +11 -1
  185. package/i18n/languages/zh-CN.mjs +11 -1
  186. package/i18n/languages/zh-TW.js +11 -1
  187. package/i18n/languages/zh-TW.mjs +11 -1
  188. package/i18n/phraseFormatters/index.js +3 -1
  189. package/i18n/phraseFormatters/index.mjs +3 -1
  190. package/i18n/registry.js +5 -6
  191. package/i18n/registry.mjs +5 -6
  192. package/index.d.ts +27 -0
  193. package/languages/all.js +231 -21
  194. package/languages/ar-AR.js +11 -1
  195. package/languages/ar-AR.mjs +11 -1
  196. package/languages/cs-CZ.js +11 -1
  197. package/languages/cs-CZ.mjs +11 -1
  198. package/languages/de-CH.js +11 -1
  199. package/languages/de-CH.mjs +11 -1
  200. package/languages/de-DE.js +11 -1
  201. package/languages/de-DE.mjs +11 -1
  202. package/languages/en-US.js +11 -1
  203. package/languages/en-US.mjs +11 -1
  204. package/languages/es-MX.js +11 -1
  205. package/languages/es-MX.mjs +11 -1
  206. package/languages/fa-IR.js +11 -1
  207. package/languages/fa-IR.mjs +11 -1
  208. package/languages/fr-FR.js +11 -1
  209. package/languages/fr-FR.mjs +11 -1
  210. package/languages/hr-HR.js +11 -1
  211. package/languages/hr-HR.mjs +11 -1
  212. package/languages/index.js +231 -21
  213. package/languages/it-IT.js +11 -1
  214. package/languages/it-IT.mjs +11 -1
  215. package/languages/ja-JP.js +11 -1
  216. package/languages/ja-JP.mjs +11 -1
  217. package/languages/ko-KR.js +11 -1
  218. package/languages/ko-KR.mjs +11 -1
  219. package/languages/lv-LV.js +11 -1
  220. package/languages/lv-LV.mjs +11 -1
  221. package/languages/nb-NO.js +11 -1
  222. package/languages/nb-NO.mjs +11 -1
  223. package/languages/nl-NL.js +11 -1
  224. package/languages/nl-NL.mjs +11 -1
  225. package/languages/pl-PL.js +11 -1
  226. package/languages/pl-PL.mjs +11 -1
  227. package/languages/pt-BR.js +11 -1
  228. package/languages/pt-BR.mjs +11 -1
  229. package/languages/ru-RU.js +11 -1
  230. package/languages/ru-RU.mjs +11 -1
  231. package/languages/sr-SP.js +11 -1
  232. package/languages/sr-SP.mjs +11 -1
  233. package/languages/zh-CN.js +11 -1
  234. package/languages/zh-CN.mjs +11 -1
  235. package/languages/zh-TW.js +11 -1
  236. package/languages/zh-TW.mjs +11 -1
  237. package/mixins/localHooks.js +16 -0
  238. package/mixins/localHooks.mjs +16 -0
  239. package/package.json +19 -1
  240. package/plugins/autoRowSize/autoRowSize.js +43 -6
  241. package/plugins/autoRowSize/autoRowSize.mjs +43 -6
  242. package/plugins/autofill/autofill.js +50 -3
  243. package/plugins/autofill/autofill.mjs +50 -3
  244. package/plugins/base/base.js +86 -15
  245. package/plugins/base/base.mjs +87 -16
  246. package/plugins/collapsibleColumns/collapsibleColumns.js +4 -4
  247. package/plugins/collapsibleColumns/collapsibleColumns.mjs +4 -4
  248. package/plugins/columnSorting/columnSorting.js +3 -3
  249. package/plugins/columnSorting/columnSorting.mjs +3 -3
  250. package/plugins/comments/comments.js +52 -22
  251. package/plugins/comments/comments.mjs +52 -22
  252. package/plugins/comments/contextMenuItem/addEditComment.js +3 -3
  253. package/plugins/comments/contextMenuItem/addEditComment.mjs +3 -3
  254. package/plugins/comments/contextMenuItem/readOnlyComment.js +2 -2
  255. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +2 -2
  256. package/plugins/comments/contextMenuItem/removeComment.js +2 -2
  257. package/plugins/comments/contextMenuItem/removeComment.mjs +2 -2
  258. package/plugins/contextMenu/contextMenu.js +4 -5
  259. package/plugins/contextMenu/contextMenu.mjs +4 -5
  260. package/plugins/contextMenu/menu/cursor.js +1 -1
  261. package/plugins/contextMenu/menu/cursor.mjs +1 -1
  262. package/plugins/contextMenu/menu/defaultShortcutsList.js +5 -5
  263. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +5 -5
  264. package/plugins/contextMenu/menu/menu.js +3 -3
  265. package/plugins/contextMenu/menu/menu.mjs +3 -3
  266. package/plugins/contextMenu/menu/positioner.js +1 -1
  267. package/plugins/contextMenu/menu/positioner.mjs +1 -1
  268. package/plugins/contextMenu/predefinedItems/alignment.js +1 -1
  269. package/plugins/contextMenu/predefinedItems/alignment.mjs +1 -1
  270. package/plugins/contextMenu/predefinedItems/clearColumn.js +1 -1
  271. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +1 -1
  272. package/plugins/contextMenu/predefinedItems/columnLeft.js +3 -3
  273. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +3 -3
  274. package/plugins/contextMenu/predefinedItems/columnRight.js +3 -3
  275. package/plugins/contextMenu/predefinedItems/columnRight.mjs +3 -3
  276. package/plugins/contextMenu/predefinedItems/readOnly.js +1 -1
  277. package/plugins/contextMenu/predefinedItems/readOnly.mjs +1 -1
  278. package/plugins/contextMenu/predefinedItems/removeColumn.js +1 -1
  279. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +1 -1
  280. package/plugins/contextMenu/predefinedItems/removeRow.js +1 -1
  281. package/plugins/contextMenu/predefinedItems/removeRow.mjs +1 -1
  282. package/plugins/contextMenu/predefinedItems/rowAbove.js +3 -3
  283. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +3 -3
  284. package/plugins/contextMenu/predefinedItems/rowBelow.js +3 -3
  285. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +3 -3
  286. package/plugins/copyPaste/contextMenuItem/copy.js +1 -1
  287. package/plugins/copyPaste/contextMenuItem/copy.mjs +1 -1
  288. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +3 -3
  289. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +3 -3
  290. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +3 -3
  291. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +3 -3
  292. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +3 -3
  293. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +3 -3
  294. package/plugins/copyPaste/contextMenuItem/cut.js +1 -1
  295. package/plugins/copyPaste/contextMenuItem/cut.mjs +1 -1
  296. package/plugins/copyPaste/copyPaste.js +75 -40
  297. package/plugins/copyPaste/copyPaste.mjs +76 -41
  298. package/plugins/customBorders/customBorders.js +1 -1
  299. package/plugins/customBorders/customBorders.mjs +1 -1
  300. package/plugins/dialog/dialog.d.ts +23 -0
  301. package/plugins/dialog/dialog.js +489 -0
  302. package/plugins/dialog/dialog.mjs +485 -0
  303. package/plugins/dialog/index.d.ts +1 -0
  304. package/plugins/dialog/index.js +7 -0
  305. package/plugins/dialog/index.mjs +1 -0
  306. package/plugins/dialog/ui.js +264 -0
  307. package/plugins/dialog/ui.mjs +259 -0
  308. package/plugins/dropdownMenu/dropdownMenu.js +5 -4
  309. package/plugins/dropdownMenu/dropdownMenu.mjs +5 -4
  310. package/plugins/filters/filters.js +2 -2
  311. package/plugins/filters/filters.mjs +2 -2
  312. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +3 -3
  313. package/plugins/hiddenColumns/contextMenuItem/hideColumn.mjs +3 -3
  314. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +4 -4
  315. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +4 -4
  316. package/plugins/hiddenRows/contextMenuItem/hideRow.js +3 -3
  317. package/plugins/hiddenRows/contextMenuItem/hideRow.mjs +3 -3
  318. package/plugins/hiddenRows/contextMenuItem/showRow.js +4 -4
  319. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +4 -4
  320. package/plugins/index.d.ts +9 -0
  321. package/plugins/index.js +9 -0
  322. package/plugins/index.mjs +7 -1
  323. package/plugins/loading/content.js +36 -0
  324. package/plugins/loading/content.mjs +31 -0
  325. package/plugins/loading/index.d.ts +1 -0
  326. package/plugins/loading/index.js +7 -0
  327. package/plugins/loading/index.mjs +1 -0
  328. package/plugins/loading/loading.d.ts +19 -0
  329. package/plugins/loading/loading.js +290 -0
  330. package/plugins/loading/loading.mjs +285 -0
  331. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +1 -1
  332. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.mjs +1 -1
  333. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +1 -1
  334. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.mjs +1 -1
  335. package/plugins/manualColumnMove/manualColumnMove.js +3 -3
  336. package/plugins/manualColumnMove/manualColumnMove.mjs +3 -3
  337. package/plugins/manualColumnResize/manualColumnResize.js +3 -3
  338. package/plugins/manualColumnResize/manualColumnResize.mjs +3 -3
  339. package/plugins/manualRowMove/manualRowMove.js +4 -4
  340. package/plugins/manualRowMove/manualRowMove.mjs +4 -4
  341. package/plugins/manualRowResize/manualRowResize.js +5 -2
  342. package/plugins/manualRowResize/manualRowResize.mjs +5 -2
  343. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +15 -15
  344. package/plugins/mergeCells/contextMenuItem/toggleMerge.mjs +15 -15
  345. package/plugins/mergeCells/focusOrder.js +75 -39
  346. package/plugins/mergeCells/focusOrder.mjs +75 -39
  347. package/plugins/mergeCells/mergeCells.js +26 -19
  348. package/plugins/mergeCells/mergeCells.mjs +26 -19
  349. package/plugins/mergeCells/renderer.js +14 -8
  350. package/plugins/mergeCells/renderer.mjs +14 -8
  351. package/plugins/multiColumnSorting/multiColumnSorting.js +3 -3
  352. package/plugins/multiColumnSorting/multiColumnSorting.mjs +3 -3
  353. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +3 -3
  354. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +3 -3
  355. package/plugins/nestedHeaders/nestedHeaders.js +47 -41
  356. package/plugins/nestedHeaders/nestedHeaders.mjs +47 -41
  357. package/plugins/nestedRows/nestedRows.js +3 -3
  358. package/plugins/nestedRows/nestedRows.mjs +3 -3
  359. package/plugins/nestedRows/ui/collapsing.js +1 -2
  360. package/plugins/nestedRows/ui/collapsing.mjs +1 -2
  361. package/plugins/nestedRows/ui/contextMenu.js +4 -4
  362. package/plugins/nestedRows/ui/contextMenu.mjs +4 -4
  363. package/plugins/nestedRows/ui/headers.js +4 -1
  364. package/plugins/nestedRows/ui/headers.mjs +4 -1
  365. package/plugins/pagination/focusController.js +27 -0
  366. package/plugins/pagination/focusController.mjs +23 -0
  367. package/plugins/pagination/index.d.ts +1 -0
  368. package/plugins/pagination/index.js +7 -0
  369. package/plugins/pagination/index.mjs +1 -0
  370. package/plugins/pagination/pagination.d.ts +52 -0
  371. package/plugins/pagination/pagination.js +1034 -0
  372. package/plugins/pagination/pagination.mjs +1030 -0
  373. package/plugins/pagination/strategies/autoPageSize.js +96 -0
  374. package/plugins/pagination/strategies/autoPageSize.mjs +92 -0
  375. package/plugins/pagination/strategies/fixedPageSize.js +88 -0
  376. package/plugins/pagination/strategies/fixedPageSize.mjs +84 -0
  377. package/plugins/pagination/strategies/index.js +22 -0
  378. package/plugins/pagination/strategies/index.mjs +18 -0
  379. package/plugins/pagination/ui.js +449 -0
  380. package/plugins/pagination/ui.mjs +443 -0
  381. package/plugins/pagination/utils.js +28 -0
  382. package/plugins/pagination/utils.mjs +24 -0
  383. package/plugins/stretchColumns/calculator.js +4 -0
  384. package/plugins/stretchColumns/calculator.mjs +4 -0
  385. package/plugins/stretchColumns/stretchColumns.js +1 -1
  386. package/plugins/stretchColumns/stretchColumns.mjs +1 -1
  387. package/plugins/undoRedo/actions/dataChange.js +17 -15
  388. package/plugins/undoRedo/actions/dataChange.mjs +17 -15
  389. package/renderers/checkboxRenderer/checkboxRenderer.js +3 -3
  390. package/renderers/checkboxRenderer/checkboxRenderer.mjs +3 -3
  391. package/selection/range.js +11 -0
  392. package/selection/range.mjs +11 -0
  393. package/selection/selection.js +163 -124
  394. package/selection/selection.mjs +163 -124
  395. package/selection/transformation/_base.js +448 -0
  396. package/selection/transformation/_base.mjs +443 -0
  397. package/selection/transformation/extender.js +55 -0
  398. package/selection/transformation/extender.mjs +51 -0
  399. package/selection/transformation/focus.js +77 -0
  400. package/selection/transformation/focus.mjs +73 -0
  401. package/selection/transformation/index.js +7 -0
  402. package/selection/transformation/index.mjs +2 -0
  403. package/selection/utils.js +2 -1
  404. package/selection/utils.mjs +2 -1
  405. package/settings.d.ts +10 -1
  406. package/shortcutContexts/commands/editor/fastOpen.js +1 -1
  407. package/shortcutContexts/commands/editor/fastOpen.mjs +1 -1
  408. package/shortcutContexts/commands/editor/open.js +10 -4
  409. package/shortcutContexts/commands/editor/open.mjs +10 -4
  410. package/shortcutContexts/commands/extendCellsSelection/down.js +1 -1
  411. package/shortcutContexts/commands/extendCellsSelection/down.mjs +1 -1
  412. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +2 -2
  413. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +2 -2
  414. package/shortcutContexts/commands/extendCellsSelection/left.js +1 -1
  415. package/shortcutContexts/commands/extendCellsSelection/left.mjs +1 -1
  416. package/shortcutContexts/commands/extendCellsSelection/right.js +1 -1
  417. package/shortcutContexts/commands/extendCellsSelection/right.mjs +1 -1
  418. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +1 -1
  419. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +1 -1
  420. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +1 -1
  421. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +1 -1
  422. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +1 -1
  423. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +1 -1
  424. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +1 -1
  425. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +1 -1
  426. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +1 -1
  427. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +1 -1
  428. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +1 -1
  429. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +1 -1
  430. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +1 -1
  431. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +1 -1
  432. package/shortcutContexts/commands/extendCellsSelection/toRows.js +1 -1
  433. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +1 -1
  434. package/shortcutContexts/commands/extendCellsSelection/up.js +1 -1
  435. package/shortcutContexts/commands/extendCellsSelection/up.mjs +1 -1
  436. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +2 -2
  437. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +2 -2
  438. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +2 -2
  439. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +2 -2
  440. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +5 -2
  441. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +5 -2
  442. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +5 -2
  443. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +5 -2
  444. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +1 -1
  445. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +1 -1
  446. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +1 -1
  447. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +1 -1
  448. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +1 -1
  449. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +1 -1
  450. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +1 -1
  451. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +1 -1
  452. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +1 -1
  453. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +1 -1
  454. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +1 -1
  455. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +1 -1
  456. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +2 -2
  457. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +2 -2
  458. package/shortcutContexts/commands/scrollToFocusedCell.js +1 -1
  459. package/shortcutContexts/commands/scrollToFocusedCell.mjs +1 -1
  460. package/shortcutContexts/grid.js +3 -3
  461. package/shortcutContexts/grid.mjs +3 -3
  462. package/shortcuts/context.js +4 -1
  463. package/shortcuts/context.mjs +4 -1
  464. package/shortcuts/manager.js +17 -3
  465. package/shortcuts/manager.mjs +17 -3
  466. package/styles/handsontable.css +288 -22
  467. package/styles/handsontable.min.css +3 -3
  468. package/styles/ht-theme-classic.css +828 -0
  469. package/styles/ht-theme-classic.min.css +30 -0
  470. package/styles/ht-theme-horizon.css +122 -26
  471. package/styles/ht-theme-horizon.min.css +3 -3
  472. package/styles/ht-theme-main.css +124 -28
  473. package/styles/ht-theme-main.min.css +3 -3
  474. package/tableView.js +61 -25
  475. package/tableView.mjs +61 -25
  476. package/utils/a11yAnnouncer.js +70 -0
  477. package/utils/a11yAnnouncer.mjs +64 -0
  478. package/{core/focusCatcher → utils}/focusDetector.js +30 -12
  479. package/{core/focusCatcher → utils}/focusDetector.mjs +30 -12
  480. package/utils/samplesGenerator.js +17 -1
  481. package/utils/samplesGenerator.mjs +17 -1
  482. package/utils/stylesHandler.js +23 -8
  483. package/utils/stylesHandler.mjs +23 -8
  484. package/utils/valueAccessors.js +45 -0
  485. package/utils/valueAccessors.mjs +40 -0
  486. package/validators/autocompleteValidator/autocompleteValidator.js +2 -1
  487. package/validators/autocompleteValidator/autocompleteValidator.mjs +2 -1
  488. package/selection/transformation.js +0 -335
  489. package/selection/transformation.mjs +0 -331
@@ -149,7 +149,7 @@ export function checkboxRenderer(hotInstance, TD, row, col, prop, value, cellPro
149
149
  },
150
150
  runOnlyIf: () => {
151
151
  var _hotInstance$getSelec;
152
- return (_hotInstance$getSelec = hotInstance.getSelectedRangeLast()) === null || _hotInstance$getSelec === void 0 ? void 0 : _hotInstance$getSelec.highlight.isCell();
152
+ return (_hotInstance$getSelec = hotInstance.getSelectedRangeActive()) === null || _hotInstance$getSelec === void 0 ? void 0 : _hotInstance$getSelec.highlight.isCell();
153
153
  }
154
154
  }, {
155
155
  keys: [['enter']],
@@ -158,7 +158,7 @@ export function checkboxRenderer(hotInstance, TD, row, col, prop, value, cellPro
158
158
  return !areSelectedCheckboxCells(); // False blocks next action associated with the keyboard shortcut.
159
159
  },
160
160
  runOnlyIf: () => {
161
- const range = hotInstance.getSelectedRangeLast();
161
+ const range = hotInstance.getSelectedRangeActive();
162
162
  return hotInstance.getSettings().enterBeginsEditing && (range === null || range === void 0 ? void 0 : range.highlight.isCell()) && !hotInstance.selection.isMultiple();
163
163
  }
164
164
  }, {
@@ -169,7 +169,7 @@ export function checkboxRenderer(hotInstance, TD, row, col, prop, value, cellPro
169
169
  },
170
170
  runOnlyIf: () => {
171
171
  var _hotInstance$getSelec2;
172
- return (_hotInstance$getSelec2 = hotInstance.getSelectedRangeLast()) === null || _hotInstance$getSelec2 === void 0 ? void 0 : _hotInstance$getSelec2.highlight.isCell();
172
+ return (_hotInstance$getSelec2 = hotInstance.getSelectedRangeActive()) === null || _hotInstance$getSelec2 === void 0 ? void 0 : _hotInstance$getSelec2.highlight.isCell();
173
173
  }
174
174
  }], config);
175
175
  }
@@ -66,6 +66,17 @@ class SelectionRange {
66
66
  return this;
67
67
  }
68
68
 
69
+ /**
70
+ * Pushes a new CellRange instance to the collection.
71
+ *
72
+ * @param {CellRange} cellRange The CellRange instance with defined visual coordinates.
73
+ * @returns {SelectionRange}
74
+ */
75
+ push(cellRange) {
76
+ this.ranges.push(cellRange);
77
+ return this;
78
+ }
79
+
69
80
  /**
70
81
  * Removes from the stack the last added coordinates.
71
82
  *
@@ -63,6 +63,17 @@ class SelectionRange {
63
63
  return this;
64
64
  }
65
65
 
66
+ /**
67
+ * Pushes a new CellRange instance to the collection.
68
+ *
69
+ * @param {CellRange} cellRange The CellRange instance with defined visual coordinates.
70
+ * @returns {SelectionRange}
71
+ */
72
+ push(cellRange) {
73
+ this.ranges.push(cellRange);
74
+ return this;
75
+ }
76
+
66
77
  /**
67
78
  * Removes from the stack the last added coordinates.
68
79
  *
@@ -2,6 +2,7 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.error.cause.js");
5
+ require("core-js/modules/es.array.push.js");
5
6
  require("core-js/modules/es.set.difference.v2.js");
6
7
  require("core-js/modules/es.set.intersection.v2.js");
7
8
  require("core-js/modules/es.set.is-disjoint-from.v2.js");
@@ -20,7 +21,7 @@ var _mixed = require("./../helpers/mixed");
20
21
  var _number = require("./../helpers/number");
21
22
  var _array = require("./../helpers/array");
22
23
  var _localHooks = _interopRequireDefault(require("./../mixins/localHooks"));
23
- var _transformation2 = _interopRequireDefault(require("./transformation"));
24
+ var _transformation = require("./transformation");
24
25
  var _utils = require("./utils");
25
26
  var _templateLiteralTag = require("./../helpers/templateLiteralTag");
26
27
  var _a11y = require("../helpers/a11y");
@@ -34,16 +35,26 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
34
35
  function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
35
36
  function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
36
37
  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"); }
38
+ /**
39
+ * @typedef {object} SelectionState
40
+ * @property {CellRange[]} ranges The array of all ranges.
41
+ * @property {CellRange} activeRange The active range.
42
+ * @property {number} activeSelectionLayer The active selection layer.
43
+ * @property {number[]} selectedByRowHeader The state of the selected row headers.
44
+ * @property {number[]} selectedByColumnHeader The state of the selected column headers.
45
+ * @property {boolean} disableHeadersHighlight The state of the disable headers highlight.
46
+ */
37
47
  /**
38
48
  * @class Selection
39
49
  * @util
40
50
  */
41
- var _transformation = /*#__PURE__*/new WeakMap();
51
+ var _extenderTransformation = /*#__PURE__*/new WeakMap();
42
52
  var _focusTransformation = /*#__PURE__*/new WeakMap();
43
53
  var _isFocusSelectionChanged = /*#__PURE__*/new WeakMap();
44
54
  var _disableHeadersHighlight = /*#__PURE__*/new WeakMap();
45
55
  var _selectionSource = /*#__PURE__*/new WeakMap();
46
56
  var _expectedLayersCount = /*#__PURE__*/new WeakMap();
57
+ var _activeSelectionLayer = /*#__PURE__*/new WeakMap();
47
58
  class Selection {
48
59
  constructor(settings, tableProps) {
49
60
  var _this = this;
@@ -82,13 +93,13 @@ class Selection {
82
93
  /**
83
94
  * The module for modifying coordinates of the start and end selection.
84
95
  *
85
- * @type {Transformation}
96
+ * @type {ExtenderTransformation}
86
97
  */
87
- _classPrivateFieldInitSpec(this, _transformation, void 0);
98
+ _classPrivateFieldInitSpec(this, _extenderTransformation, void 0);
88
99
  /**
89
100
  * The module for modifying coordinates of the focus selection.
90
101
  *
91
- * @type {Transformation}
102
+ * @type {FocusTransformation}
92
103
  */
93
104
  _classPrivateFieldInitSpec(this, _focusTransformation, void 0);
94
105
  /**
@@ -130,6 +141,13 @@ class Selection {
130
141
  * @param {number}
131
142
  */
132
143
  _classPrivateFieldInitSpec(this, _expectedLayersCount, -1);
144
+ /**
145
+ * The index of the active range layer. Active range layer is the layer that has visible focus highlight.
146
+ * Focus highlight may jump between selection range layers.
147
+ *
148
+ * @type {number}
149
+ */
150
+ _classPrivateFieldInitSpec(this, _activeSelectionLayer, 0);
133
151
  this.settings = settings;
134
152
  this.tableProps = tableProps;
135
153
  this.highlight = new _highlight.default({
@@ -152,95 +170,67 @@ class Selection {
152
170
  createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
153
171
  createCellRange: (highlight, from, to) => this.tableProps.createCellRange(highlight, from, to)
154
172
  });
155
- _classPrivateFieldSet(_transformation, this, new _transformation2.default(this.selectedRange, {
156
- rowIndexMapper: this.tableProps.rowIndexMapper,
157
- columnIndexMapper: this.tableProps.columnIndexMapper,
158
- countRenderableRows: () => this.tableProps.countRenderableRows(),
159
- countRenderableColumns: () => this.tableProps.countRenderableColumns(),
160
- visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
161
- renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
162
- findFirstNonHiddenRenderableRow: function () {
163
- return _this.tableProps.findFirstNonHiddenRenderableRow(...arguments);
164
- },
165
- findFirstNonHiddenRenderableColumn: function () {
166
- return _this.tableProps.findFirstNonHiddenRenderableColumn(...arguments);
167
- },
168
- createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
173
+ _classPrivateFieldSet(_extenderTransformation, this, new _transformation.ExtenderTransformation(this.selectedRange, {
174
+ ...this.tableProps,
175
+ navigableHeaders: () => settings.navigableHeaders,
169
176
  fixedRowsBottom: () => settings.fixedRowsBottom,
170
177
  minSpareRows: () => settings.minSpareRows,
171
178
  minSpareCols: () => settings.minSpareCols,
172
179
  autoWrapRow: () => settings.autoWrapRow,
173
180
  autoWrapCol: () => settings.autoWrapCol
174
181
  }));
175
- _classPrivateFieldSet(_focusTransformation, this, new _transformation2.default(this.selectedRange, {
176
- rowIndexMapper: this.tableProps.rowIndexMapper,
177
- columnIndexMapper: this.tableProps.columnIndexMapper,
178
- countRenderableRows: () => {
179
- const range = this.selectedRange.current();
180
- return this.tableProps.countRenderableRowsInRange(0, range.getOuterBottomEndCorner().row);
181
- },
182
- countRenderableColumns: () => {
183
- const range = this.selectedRange.current();
184
- return this.tableProps.countRenderableColumnsInRange(0, range.getOuterBottomEndCorner().col);
185
- },
186
- visualToRenderableCoords: coords => this.tableProps.visualToRenderableCoords(coords),
187
- renderableToVisualCoords: coords => this.tableProps.renderableToVisualCoords(coords),
188
- findFirstNonHiddenRenderableRow: function () {
189
- return _this.tableProps.findFirstNonHiddenRenderableRow(...arguments);
190
- },
191
- findFirstNonHiddenRenderableColumn: function () {
192
- return _this.tableProps.findFirstNonHiddenRenderableColumn(...arguments);
193
- },
194
- createCellCoords: (row, column) => this.tableProps.createCellCoords(row, column),
182
+ _classPrivateFieldSet(_focusTransformation, this, new _transformation.FocusTransformation(this.selectedRange, {
183
+ ...this.tableProps,
184
+ navigableHeaders: () => settings.navigableHeaders,
195
185
  fixedRowsBottom: () => 0,
196
186
  minSpareRows: () => 0,
197
187
  minSpareCols: () => 0,
198
188
  autoWrapRow: () => true,
199
189
  autoWrapCol: () => true
200
190
  }));
201
- _classPrivateFieldGet(_transformation, this).addLocalHook('beforeTransformStart', function () {
191
+ _classPrivateFieldGet(_extenderTransformation, this).addLocalHook('beforeTransformStart', function () {
202
192
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
203
193
  args[_key] = arguments[_key];
204
194
  }
205
195
  return _this.runLocalHooks('beforeModifyTransformStart', ...args);
206
196
  });
207
- _classPrivateFieldGet(_transformation, this).addLocalHook('afterTransformStart', function () {
197
+ _classPrivateFieldGet(_extenderTransformation, this).addLocalHook('afterTransformStart', function () {
208
198
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
209
199
  args[_key2] = arguments[_key2];
210
200
  }
211
201
  return _this.runLocalHooks('afterModifyTransformStart', ...args);
212
202
  });
213
- _classPrivateFieldGet(_transformation, this).addLocalHook('beforeTransformEnd', function () {
203
+ _classPrivateFieldGet(_extenderTransformation, this).addLocalHook('beforeTransformEnd', function () {
214
204
  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
215
205
  args[_key3] = arguments[_key3];
216
206
  }
217
207
  return _this.runLocalHooks('beforeModifyTransformEnd', ...args);
218
208
  });
219
- _classPrivateFieldGet(_transformation, this).addLocalHook('afterTransformEnd', function () {
209
+ _classPrivateFieldGet(_extenderTransformation, this).addLocalHook('afterTransformEnd', function () {
220
210
  for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
221
211
  args[_key4] = arguments[_key4];
222
212
  }
223
213
  return _this.runLocalHooks('afterModifyTransformEnd', ...args);
224
214
  });
225
- _classPrivateFieldGet(_transformation, this).addLocalHook('insertRowRequire', function () {
215
+ _classPrivateFieldGet(_extenderTransformation, this).addLocalHook('insertRowRequire', function () {
226
216
  for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
227
217
  args[_key5] = arguments[_key5];
228
218
  }
229
219
  return _this.runLocalHooks('insertRowRequire', ...args);
230
220
  });
231
- _classPrivateFieldGet(_transformation, this).addLocalHook('insertColRequire', function () {
221
+ _classPrivateFieldGet(_extenderTransformation, this).addLocalHook('insertColRequire', function () {
232
222
  for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
233
223
  args[_key6] = arguments[_key6];
234
224
  }
235
225
  return _this.runLocalHooks('insertColRequire', ...args);
236
226
  });
237
- _classPrivateFieldGet(_transformation, this).addLocalHook('beforeRowWrap', function () {
227
+ _classPrivateFieldGet(_extenderTransformation, this).addLocalHook('beforeRowWrap', function () {
238
228
  for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
239
229
  args[_key7] = arguments[_key7];
240
230
  }
241
231
  return _this.runLocalHooks('beforeRowWrap', ...args);
242
232
  });
243
- _classPrivateFieldGet(_transformation, this).addLocalHook('beforeColumnWrap', function () {
233
+ _classPrivateFieldGet(_extenderTransformation, this).addLocalHook('beforeColumnWrap', function () {
244
234
  for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
245
235
  args[_key8] = arguments[_key8];
246
236
  }
@@ -261,7 +251,7 @@ class Selection {
261
251
  }
262
252
 
263
253
  /**
264
- * Get data layer for current selection.
254
+ * Gets all selection range layers of the selection.
265
255
  *
266
256
  * @returns {SelectionRange}
267
257
  */
@@ -269,6 +259,33 @@ class Selection {
269
259
  return this.selectedRange;
270
260
  }
271
261
 
262
+ /**
263
+ * Gets the active selection range layer.
264
+ *
265
+ * @returns {CellRange}
266
+ */
267
+ getActiveSelectedRange() {
268
+ return this.selectedRange.peekByIndex(_classPrivateFieldGet(_activeSelectionLayer, this));
269
+ }
270
+
271
+ /**
272
+ * Gets the index of the active selection range layer.
273
+ *
274
+ * @returns {number}
275
+ */
276
+ getActiveSelectionLayerIndex() {
277
+ return _classPrivateFieldGet(_activeSelectionLayer, this);
278
+ }
279
+
280
+ /**
281
+ * Sets the index of the active selection range layer.
282
+ *
283
+ * @param {number} layerIndex The index of the active selection range layer.
284
+ */
285
+ setActiveSelectionLayerIndex(layerIndex) {
286
+ _classPrivateFieldSet(_activeSelectionLayer, this, layerIndex);
287
+ }
288
+
272
289
  /**
273
290
  * Marks the source of the selection. It can be one of the following values: `mouse`, or any other string.
274
291
  *
@@ -348,10 +365,20 @@ class Selection {
348
365
  // We are creating copy. We would like to modify just the start of the selection by below hook. Then original coords
349
366
  // should be handled by next methods.
350
367
  const coordsClone = coords.clone();
368
+ _classPrivateFieldSet(_disableHeadersHighlight, this, false);
351
369
  _classPrivateFieldSet(_isFocusSelectionChanged, this, false);
352
370
  this.runLocalHooks(`beforeSetRangeStart${fragment ? 'Only' : ''}`, coordsClone);
353
371
  if (!isMultipleMode || isMultipleMode && !isMultipleSelection && (0, _mixed.isUndefined)(multipleSelection)) {
354
372
  this.selectedRange.clear();
373
+ (0, _array.arrayEach)(this.highlight.getAreas(), highlight => void highlight.clear());
374
+ (0, _array.arrayEach)(this.highlight.getLayeredAreas(), highlight => void highlight.clear());
375
+ (0, _array.arrayEach)(this.highlight.getRowHeaders(), highlight => void highlight.clear());
376
+ (0, _array.arrayEach)(this.highlight.getColumnHeaders(), highlight => void highlight.clear());
377
+ (0, _array.arrayEach)(this.highlight.getActiveRowHeaders(), highlight => void highlight.clear());
378
+ (0, _array.arrayEach)(this.highlight.getActiveColumnHeaders(), highlight => void highlight.clear());
379
+ (0, _array.arrayEach)(this.highlight.getActiveCornerHeaders(), highlight => void highlight.clear());
380
+ (0, _array.arrayEach)(this.highlight.getRowHighlights(), highlight => void highlight.clear());
381
+ (0, _array.arrayEach)(this.highlight.getColumnHighlights(), highlight => void highlight.clear());
355
382
  }
356
383
  this.selectedRange.add(coordsClone).current().setHighlight(highlightCoords.clone());
357
384
  if (this.getLayerLevel() === 0) {
@@ -381,15 +408,18 @@ class Selection {
381
408
  * Ends selection range on given coordinate object.
382
409
  *
383
410
  * @param {CellCoords} coords Visual coords.
411
+ * @param {number} [layerIndex] The layer index to set the end on. If not provided, the current layer level is used.
384
412
  */
385
413
  setRangeEnd(coords) {
414
+ let layerIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLayerLevel();
386
415
  if (this.selectedRange.isEmpty()) {
387
416
  return;
388
417
  }
418
+ this.setActiveSelectionLayerIndex(layerIndex);
389
419
  const coordsClone = coords.clone();
390
420
  const countRows = this.tableProps.countRows();
391
421
  const countCols = this.tableProps.countCols();
392
- const isSingle = this.selectedRange.current().clone().setTo(coords).isSingleHeader();
422
+ const isSingle = this.getActiveSelectedRange().clone().setTo(coords).isSingleHeader();
393
423
 
394
424
  // Ignore processing the end range when the header selection starts overlapping the corner and
395
425
  // the selection is not a single header highlight.
@@ -398,7 +428,7 @@ class Selection {
398
428
  }
399
429
  this.runLocalHooks('beforeSetRangeEnd', coordsClone);
400
430
  this.begin();
401
- const cellRange = this.selectedRange.current();
431
+ const cellRange = this.getActiveSelectedRange();
402
432
  if (!this.settings.navigableHeaders) {
403
433
  cellRange.highlight.normalize();
404
434
  }
@@ -429,8 +459,8 @@ class Selection {
429
459
  }
430
460
  }
431
461
  this.runLocalHooks('beforeHighlightSet');
432
- this.setRangeFocus(this.selectedRange.current().highlight);
433
- this.applyAndCommit();
462
+ this.setRangeFocus(this.getActiveSelectedRange().highlight, layerIndex);
463
+ this.applyAndCommit(this.getActiveSelectedRange(), layerIndex);
434
464
  const isLastLayer = _classPrivateFieldGet(_expectedLayersCount, this) === -1 || this.selectedRange.size() === _classPrivateFieldGet(_expectedLayersCount, this);
435
465
  this.runLocalHooks('afterSetRangeEnd', coords, isLastLayer);
436
466
  }
@@ -443,24 +473,10 @@ class Selection {
443
473
  * @param {number} [layerLevel] The layer level to apply. If not provided, the current layer level is used.
444
474
  */
445
475
  applyAndCommit() {
446
- let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.selectedRange.current();
476
+ let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getActiveSelectedRange();
447
477
  let layerLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLayerLevel();
448
478
  const countRows = this.tableProps.countRows();
449
479
  const countCols = this.tableProps.countCols();
450
-
451
- // If the next layer level is lower than previous then clear all area and header highlights. This is the
452
- // indication that the new selection is performing.
453
- if (layerLevel < this.highlight.layerLevel) {
454
- (0, _array.arrayEach)(this.highlight.getAreas(), highlight => void highlight.clear());
455
- (0, _array.arrayEach)(this.highlight.getLayeredAreas(), highlight => void highlight.clear());
456
- (0, _array.arrayEach)(this.highlight.getRowHeaders(), highlight => void highlight.clear());
457
- (0, _array.arrayEach)(this.highlight.getColumnHeaders(), highlight => void highlight.clear());
458
- (0, _array.arrayEach)(this.highlight.getActiveRowHeaders(), highlight => void highlight.clear());
459
- (0, _array.arrayEach)(this.highlight.getActiveColumnHeaders(), highlight => void highlight.clear());
460
- (0, _array.arrayEach)(this.highlight.getActiveCornerHeaders(), highlight => void highlight.clear());
461
- (0, _array.arrayEach)(this.highlight.getRowHighlights(), highlight => void highlight.clear());
462
- (0, _array.arrayEach)(this.highlight.getColumnHighlights(), highlight => void highlight.clear());
463
- }
464
480
  this.highlight.useLayerLevel(layerLevel);
465
481
  const areaHighlight = this.highlight.createArea();
466
482
  const layeredAreaHighlight = this.highlight.createLayeredArea();
@@ -487,7 +503,7 @@ class Selection {
487
503
  // For single cell selection in the same layer, we do not create area selection to prevent blue background.
488
504
  // When non-consecutive selection is performed we have to add that missing area selection to the previous layer
489
505
  // based on previous coordinates. It only occurs when the previous selection wasn't select multiple cells.
490
- const previousRange = this.selectedRange.previous();
506
+ const previousRange = this.selectedRange.peekByIndex(layerLevel - 1);
491
507
  this.highlight.useLayerLevel(layerLevel - 1);
492
508
  this.highlight.createArea().add(previousRange.from).commit()
493
509
  // Range may start with hidden indexes. Commit would not found start point (as we add just the `from` coords).
@@ -534,12 +550,17 @@ class Selection {
534
550
  * Sets the selection focus position at the specified coordinates.
535
551
  *
536
552
  * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.
553
+ * @param {number} [layerIndex] The layer index to set the focus on.
537
554
  */
538
555
  setRangeFocus(coords) {
556
+ let layerIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLayerLevel();
539
557
  if (this.selectedRange.isEmpty()) {
540
558
  return;
541
559
  }
542
- const cellRange = this.selectedRange.current();
560
+ this.setActiveSelectionLayerIndex(layerIndex);
561
+ _classPrivateFieldGet(_extenderTransformation, this).setActiveLayerIndex(layerIndex);
562
+ _classPrivateFieldGet(_focusTransformation, this).setActiveLayerIndex(layerIndex);
563
+ const cellRange = this.getActiveSelectedRange();
543
564
  if (!this.inProgress) {
544
565
  this.runLocalHooks('beforeSetFocus', coords);
545
566
  }
@@ -568,15 +589,10 @@ class Selection {
568
589
  */
569
590
  transformStart(rowDelta, colDelta) {
570
591
  let createMissingRecords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
571
- if (this.settings.navigableHeaders) {
572
- _classPrivateFieldGet(_transformation, this).setOffsetSize({
573
- x: this.tableProps.countRowHeaders(),
574
- y: this.tableProps.countColHeaders()
575
- });
576
- } else {
577
- _classPrivateFieldGet(_transformation, this).resetOffsetSize();
578
- }
579
- this.setRangeStart(_classPrivateFieldGet(_transformation, this).transformStart(rowDelta, colDelta, createMissingRecords));
592
+ const {
593
+ visualCoords
594
+ } = _classPrivateFieldGet(_extenderTransformation, this).transformStart(rowDelta, colDelta, createMissingRecords);
595
+ this.setRangeStart(visualCoords);
580
596
  }
581
597
 
582
598
  /**
@@ -586,15 +602,11 @@ class Selection {
586
602
  * @param {number} colDelta Columns number to move, value can be passed as negative number.
587
603
  */
588
604
  transformEnd(rowDelta, colDelta) {
589
- if (this.settings.navigableHeaders) {
590
- _classPrivateFieldGet(_transformation, this).setOffsetSize({
591
- x: this.tableProps.countRowHeaders(),
592
- y: this.tableProps.countColHeaders()
593
- });
594
- } else {
595
- _classPrivateFieldGet(_transformation, this).resetOffsetSize();
596
- }
597
- this.setRangeEnd(_classPrivateFieldGet(_transformation, this).transformEnd(rowDelta, colDelta));
605
+ const {
606
+ visualCoords,
607
+ selectionLayer
608
+ } = _classPrivateFieldGet(_extenderTransformation, this).transformEnd(rowDelta, colDelta);
609
+ this.setRangeEnd(visualCoords, selectionLayer);
598
610
  }
599
611
 
600
612
  /**
@@ -604,28 +616,11 @@ class Selection {
604
616
  * @param {number} colDelta Columns number to move, value can be passed as negative number.
605
617
  */
606
618
  transformFocus(rowDelta, colDelta) {
607
- const range = this.selectedRange.current();
608
619
  const {
609
- row,
610
- col
611
- } = range.getOuterTopStartCorner();
612
- const columnsInRange = this.tableProps.countRenderableColumnsInRange(0, col - 1);
613
- const rowsInRange = this.tableProps.countRenderableRowsInRange(0, row - 1);
614
- if (range.highlight.isHeader()) {
615
- // for header focus selection calculate the new coords based on the selection including headers
616
- _classPrivateFieldGet(_focusTransformation, this).setOffsetSize({
617
- x: col < 0 ? Math.abs(col) : -columnsInRange,
618
- y: row < 0 ? Math.abs(row) : -rowsInRange
619
- });
620
- } else {
621
- // for focus selection in cells calculate the new coords only based on the selected cells
622
- _classPrivateFieldGet(_focusTransformation, this).setOffsetSize({
623
- x: col < 0 ? 0 : -columnsInRange,
624
- y: row < 0 ? 0 : -rowsInRange
625
- });
626
- }
627
- const focusCoords = _classPrivateFieldGet(_focusTransformation, this).transformStart(rowDelta, colDelta);
628
- this.setRangeFocus(focusCoords.normalize());
620
+ selectionLayer,
621
+ visualCoords
622
+ } = _classPrivateFieldGet(_focusTransformation, this).transformStart(rowDelta, colDelta);
623
+ this.setRangeFocus(visualCoords.normalize(), selectionLayer);
629
624
  }
630
625
 
631
626
  /**
@@ -638,7 +633,7 @@ class Selection {
638
633
  if (!this.isSelected()) {
639
634
  return;
640
635
  }
641
- const range = this.selectedRange.current();
636
+ const range = this.getActiveSelectedRange();
642
637
  if (this.isSelectedByCorner()) {
643
638
  this.selectAll(true, true, {
644
639
  disableHeadersHighlight: true
@@ -687,7 +682,7 @@ class Selection {
687
682
  if (!this.isSelected()) {
688
683
  return;
689
684
  }
690
- const range = this.selectedRange.current();
685
+ const range = this.getActiveSelectedRange();
691
686
  if (this.isSelectedByCorner()) {
692
687
  this.selectAll(true, true, {
693
688
  disableHeadersHighlight: true
@@ -752,7 +747,7 @@ class Selection {
752
747
  * @returns {boolean}
753
748
  */
754
749
  isMultiple() {
755
- let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.selectedRange.current();
750
+ let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getActiveSelectedRange();
756
751
  if (!this.isSelected()) {
757
752
  return false;
758
753
  }
@@ -945,7 +940,7 @@ class Selection {
945
940
  * the logical coordinates points on them.
946
941
  */
947
942
  selectAll() {
948
- var _this$getSelectedRang;
943
+ var _this$getActiveSelect;
949
944
  let includeRowHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
950
945
  let includeColumnHeaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
951
946
  let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
@@ -963,19 +958,20 @@ class Selection {
963
958
  if (rowFrom === 0 && columnFrom === 0 && (nrOfRows === 0 || nrOfColumns === 0)) {
964
959
  return;
965
960
  }
966
- let highlight = (_this$getSelectedRang = this.getSelectedRange().current()) === null || _this$getSelectedRang === void 0 ? void 0 : _this$getSelectedRang.highlight;
961
+ let highlight = (_this$getActiveSelect = this.getActiveSelectedRange()) === null || _this$getActiveSelect === void 0 ? void 0 : _this$getActiveSelect.highlight;
967
962
  const {
968
963
  focusPosition,
969
964
  disableHeadersHighlight
970
965
  } = options;
971
- _classPrivateFieldSet(_disableHeadersHighlight, this, disableHeadersHighlight);
972
966
  if (focusPosition && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.row) && Number.isInteger(focusPosition === null || focusPosition === void 0 ? void 0 : focusPosition.col)) {
973
967
  highlight = this.tableProps.createCellCoords((0, _number.clamp)(focusPosition.row, rowFrom, nrOfRows - 1), (0, _number.clamp)(focusPosition.col, columnFrom, nrOfColumns - 1));
974
968
  }
975
969
  const startCoords = this.tableProps.createCellCoords(rowFrom, columnFrom);
976
970
  const endCoords = this.tableProps.createCellCoords(nrOfRows - 1, nrOfColumns - 1);
977
971
  this.clear();
972
+ this.runLocalHooks('beforeSelectAll', startCoords, endCoords, highlight);
978
973
  this.setRangeStartOnly(startCoords, undefined, highlight);
974
+ _classPrivateFieldSet(_disableHeadersHighlight, this, disableHeadersHighlight);
979
975
  if (columnFrom < 0) {
980
976
  this.selectedByRowHeader.add(this.getLayerLevel());
981
977
  }
@@ -983,8 +979,8 @@ class Selection {
983
979
  this.selectedByColumnHeader.add(this.getLayerLevel());
984
980
  }
985
981
  this.setRangeEnd(endCoords);
982
+ this.runLocalHooks('afterSelectAll', startCoords, endCoords, highlight);
986
983
  this.finish();
987
- _classPrivateFieldSet(_disableHeadersHighlight, this, false);
988
984
  }
989
985
 
990
986
  /**
@@ -1091,10 +1087,6 @@ class Selection {
1091
1087
  const from = this.tableProps.createCellCoords(fromRow, start);
1092
1088
  const to = this.tableProps.createCellCoords(toRow, end);
1093
1089
  this.runLocalHooks('beforeSelectColumns', from, to, highlight);
1094
-
1095
- // disallow modifying row axis for that hooks
1096
- from.row = fromRow;
1097
- to.row = toRow;
1098
1090
  this.setRangeStartOnly(from, undefined, highlight);
1099
1091
  this.selectedByColumnHeader.add(this.getLayerLevel());
1100
1092
  this.setRangeEnd(to);
@@ -1146,10 +1138,6 @@ class Selection {
1146
1138
  const from = this.tableProps.createCellCoords(startRow, fromColumn);
1147
1139
  const to = this.tableProps.createCellCoords(endRow, toColumn);
1148
1140
  this.runLocalHooks('beforeSelectRows', from, to, highlight);
1149
-
1150
- // disallow modifying column axis for that hooks
1151
- from.col = fromColumn;
1152
- to.col = toColumn;
1153
1141
  this.setRangeStartOnly(from, undefined, highlight);
1154
1142
  this.selectedByRowHeader.add(this.getLayerLevel());
1155
1143
  this.setRangeEnd(to);
@@ -1159,6 +1147,57 @@ class Selection {
1159
1147
  return isValid;
1160
1148
  }
1161
1149
 
1150
+ /**
1151
+ * Allows importing the selection for all layers from the provided array of CellRange objects.
1152
+ * The method clears the current selection and sets the new one without triggering any
1153
+ * selection related hooks.
1154
+ *
1155
+ * @param {SelectionState} selectionState The selection state to import.
1156
+ */
1157
+ importSelection(_ref) {
1158
+ let {
1159
+ ranges,
1160
+ activeRange,
1161
+ activeSelectionLayer,
1162
+ selectedByRowHeader,
1163
+ selectedByColumnHeader,
1164
+ disableHeadersHighlight
1165
+ } = _ref;
1166
+ if (ranges.length === 0) {
1167
+ return;
1168
+ }
1169
+ this.selectedRange.clear();
1170
+ this.highlight.clear();
1171
+ this.inProgress = true;
1172
+ _classPrivateFieldSet(_disableHeadersHighlight, this, disableHeadersHighlight);
1173
+ this.selectedByRowHeader = new Set(selectedByRowHeader);
1174
+ this.selectedByColumnHeader = new Set(selectedByColumnHeader);
1175
+ this.setActiveSelectionLayerIndex(0);
1176
+ ranges.forEach((cellRange, selectionLayerIndex) => {
1177
+ this.selectedRange.push(cellRange);
1178
+ this.applyAndCommit(cellRange, selectionLayerIndex);
1179
+ });
1180
+ this.setRangeFocus(activeRange.highlight, activeSelectionLayer);
1181
+ _classPrivateFieldSet(_disableHeadersHighlight, this, false);
1182
+ this.inProgress = false;
1183
+ }
1184
+
1185
+ /**
1186
+ * Exports all selection layers with other properties related to the selection state.
1187
+ *
1188
+ * @returns {SelectionState}
1189
+ */
1190
+ exportSelection() {
1191
+ return {
1192
+ ranges: Array.from(this.selectedRange).map(range => range.clone()),
1193
+ activeRange: this.getActiveSelectedRange(),
1194
+ activeSelectionLayer: this.getActiveSelectionLayerIndex(),
1195
+ selectedByRowHeader: Array.from(this.selectedByRowHeader),
1196
+ selectedByColumnHeader: Array.from(this.selectedByColumnHeader),
1197
+ disableHeadersHighlight: _classPrivateFieldGet(_disableHeadersHighlight, this)
1198
+ };
1199
+ }
1200
+
1162
1201
  /**
1163
1202
  * Refreshes the whole selection by clearing, reapplying and committing (calculating visual to renderable indexes)
1164
1203
  * the selection by using already added visual ranges. The method can be useful when underneath some indexes
@@ -1225,7 +1264,7 @@ class Selection {
1225
1264
  return;
1226
1265
  }
1227
1266
  const currentLayer = this.getLayerLevel();
1228
- const cellRange = this.selectedRange.current();
1267
+ const cellRange = this.getActiveSelectedRange();
1229
1268
  if (this.highlight.isEnabledFor(_highlight.FOCUS_TYPE, cellRange.highlight)) {
1230
1269
  this.highlight.getFocus().commit().syncWith(cellRange);
1231
1270
  }