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
@@ -1,5 +1,7 @@
1
1
  import "core-js/modules/es.error.cause.js";
2
2
  import "core-js/modules/es.array.push.js";
3
+ import "core-js/modules/esnext.iterator.constructor.js";
4
+ import "core-js/modules/esnext.iterator.for-each.js";
3
5
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
4
6
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
5
7
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -31,11 +33,13 @@ export class FocusOrder {
31
33
  /**
32
34
  * Pushes a new node to the provided list order.
33
35
  *
34
- * @param {CellRange} selectedRange The selected range to build the focus order for.
35
- * @param {LinkedList} listOrder The list order to push the node to.
36
- * @param {WeakSet} mergeCellsVisitor The set of visited cells.
37
- * @param {number} row The visual row index.
38
- * @param {number} column The visual column index.
36
+ * @param {object} options The options object.
37
+ * @param {CellRange} options.selectedRange The selected range to build the focus order for.
38
+ * @param {number} options.selectionLayer The selection layer index.
39
+ * @param {LinkedList} options.listOrder The list order to push the node to.
40
+ * @param {WeakSet} options.mergeCellsVisitor The set of visited cells.
41
+ * @param {number} options.row The visual row index.
42
+ * @param {number} options.column The visual column index.
39
43
  * @returns {NodeStructure | null}
40
44
  */
41
45
  _classPrivateMethodInitSpec(this, _FocusOrder_brand);
@@ -179,53 +183,73 @@ export class FocusOrder {
179
183
  /**
180
184
  * Rebuilds the focus order list based on the provided selection.
181
185
  *
182
- * @param {CellRange} selectedRange The selected range to build the focus order for.
186
+ * @param {CellRange[]} selectedRanges The selected ranges to build the focus order for.
183
187
  */
184
- buildFocusOrder(selectedRange) {
185
- const topStart = selectedRange.getTopStartCorner();
186
- const bottomEnd = selectedRange.getBottomEndCorner();
187
- const visitedHorizontalCells = new WeakSet();
188
+ buildFocusOrder(selectedRanges) {
188
189
  _classPrivateFieldSet(_cellsHorizontalOrder, this, new LinkedList());
189
- for (let r = topStart.row; r <= bottomEnd.row; r++) {
190
- if (_classPrivateFieldGet(_rowIndexMapper, this).isHidden(r)) {
191
- // eslint-disable-next-line no-continue
192
- continue;
193
- }
194
- for (let c = topStart.col; c <= bottomEnd.col; c++) {
195
- if (_classPrivateFieldGet(_columnIndexMapper, this).isHidden(c)) {
190
+ selectedRanges.forEach((range, selectionLayer) => {
191
+ const visitedHorizontalCells = new WeakSet();
192
+ const topStart = range.getTopStartCorner();
193
+ const bottomEnd = range.getBottomEndCorner();
194
+ for (let r = topStart.row; r <= bottomEnd.row; r++) {
195
+ if (_classPrivateFieldGet(_rowIndexMapper, this).isHidden(r)) {
196
196
  // eslint-disable-next-line no-continue
197
197
  continue;
198
198
  }
199
- const node = _assertClassBrand(_FocusOrder_brand, this, _pushOrderNode).call(this, selectedRange, _classPrivateFieldGet(_cellsHorizontalOrder, this), visitedHorizontalCells, r, c);
200
- if (node) {
201
- _classPrivateFieldSet(_currentHorizontalLinkedNode, this, node);
199
+ for (let c = topStart.col; c <= bottomEnd.col; c++) {
200
+ if (_classPrivateFieldGet(_columnIndexMapper, this).isHidden(c)) {
201
+ // eslint-disable-next-line no-continue
202
+ continue;
203
+ }
204
+ const node = _assertClassBrand(_FocusOrder_brand, this, _pushOrderNode).call(this, {
205
+ selectedRange: range,
206
+ selectionLayer,
207
+ listOrder: _classPrivateFieldGet(_cellsHorizontalOrder, this),
208
+ mergeCellsVisitor: visitedHorizontalCells,
209
+ row: r,
210
+ column: c
211
+ });
212
+ if (node) {
213
+ _classPrivateFieldSet(_currentHorizontalLinkedNode, this, node);
214
+ }
202
215
  }
203
216
  }
204
- }
217
+ });
205
218
 
206
219
  // create circular linked list
207
220
  if (_classPrivateFieldGet(_cellsHorizontalOrder, this).first) {
208
221
  _classPrivateFieldGet(_cellsHorizontalOrder, this).first.prev = _classPrivateFieldGet(_cellsHorizontalOrder, this).last;
209
222
  _classPrivateFieldGet(_cellsHorizontalOrder, this).last.next = _classPrivateFieldGet(_cellsHorizontalOrder, this).first;
210
223
  }
211
- const visitedVerticalCells = new WeakSet();
212
224
  _classPrivateFieldSet(_cellsVerticalOrder, this, new LinkedList());
213
- for (let c = topStart.col; c <= bottomEnd.col; c++) {
214
- if (_classPrivateFieldGet(_columnIndexMapper, this).isHidden(c)) {
215
- // eslint-disable-next-line no-continue
216
- continue;
217
- }
218
- for (let r = topStart.row; r <= bottomEnd.row; r++) {
219
- if (_classPrivateFieldGet(_rowIndexMapper, this).isHidden(r)) {
225
+ selectedRanges.forEach((range, selectionLayer) => {
226
+ const visitedVerticalCells = new WeakSet();
227
+ const topStart = range.getTopStartCorner();
228
+ const bottomEnd = range.getBottomEndCorner();
229
+ for (let c = topStart.col; c <= bottomEnd.col; c++) {
230
+ if (_classPrivateFieldGet(_columnIndexMapper, this).isHidden(c)) {
220
231
  // eslint-disable-next-line no-continue
221
232
  continue;
222
233
  }
223
- const node = _assertClassBrand(_FocusOrder_brand, this, _pushOrderNode).call(this, selectedRange, _classPrivateFieldGet(_cellsVerticalOrder, this), visitedVerticalCells, r, c);
224
- if (node) {
225
- _classPrivateFieldSet(_currentVerticalLinkedNode, this, node);
234
+ for (let r = topStart.row; r <= bottomEnd.row; r++) {
235
+ if (_classPrivateFieldGet(_rowIndexMapper, this).isHidden(r)) {
236
+ // eslint-disable-next-line no-continue
237
+ continue;
238
+ }
239
+ const node = _assertClassBrand(_FocusOrder_brand, this, _pushOrderNode).call(this, {
240
+ selectedRange: range,
241
+ selectionLayer,
242
+ listOrder: _classPrivateFieldGet(_cellsVerticalOrder, this),
243
+ mergeCellsVisitor: visitedVerticalCells,
244
+ row: r,
245
+ column: c
246
+ });
247
+ if (node) {
248
+ _classPrivateFieldSet(_currentVerticalLinkedNode, this, node);
249
+ }
226
250
  }
227
251
  }
228
- }
252
+ });
229
253
 
230
254
  // create circular linked list
231
255
  if (_classPrivateFieldGet(_cellsVerticalOrder, this).first) {
@@ -238,37 +262,48 @@ export class FocusOrder {
238
262
  *
239
263
  * @param {number} row The visual row index.
240
264
  * @param {number} column The visual column index.
265
+ * @param {number} selectionLayerIndex The index of the selection layer to which the focus should be marked as active.
241
266
  * @returns {FocusOrder}
242
267
  */
243
- setActiveNode(row, column) {
268
+ setActiveNode(row, column, selectionLayerIndex) {
244
269
  _classPrivateFieldGet(_cellsHorizontalOrder, this).inorder(node => {
245
270
  const {
271
+ selectionLayer,
246
272
  rowStart,
247
273
  rowEnd,
248
274
  colStart,
249
275
  colEnd
250
276
  } = node.data;
251
- if (row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {
277
+ if (selectionLayer === selectionLayerIndex && row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {
252
278
  _classPrivateFieldSet(_currentHorizontalLinkedNode, this, node);
253
- return false;
279
+ return true;
254
280
  }
255
281
  });
256
282
  _classPrivateFieldGet(_cellsVerticalOrder, this).inorder(node => {
257
283
  const {
284
+ selectionLayer,
258
285
  rowStart,
259
286
  rowEnd,
260
287
  colStart,
261
288
  colEnd
262
289
  } = node.data;
263
- if (row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {
290
+ if (selectionLayer === selectionLayerIndex && row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {
264
291
  _classPrivateFieldSet(_currentVerticalLinkedNode, this, node);
265
- return false;
292
+ return true;
266
293
  }
267
294
  });
268
295
  return this;
269
296
  }
270
297
  }
271
- function _pushOrderNode(selectedRange, listOrder, mergeCellsVisitor, row, column) {
298
+ function _pushOrderNode(_ref2) {
299
+ let {
300
+ selectedRange,
301
+ selectionLayer,
302
+ listOrder,
303
+ mergeCellsVisitor,
304
+ row,
305
+ column
306
+ } = _ref2;
272
307
  const topStart = selectedRange.getTopStartCorner();
273
308
  const bottomEnd = selectedRange.getBottomEndCorner();
274
309
  const highlight = selectedRange.highlight.clone().normalize();
@@ -277,6 +312,7 @@ function _pushOrderNode(selectedRange, listOrder, mergeCellsVisitor, row, column
277
312
  return null;
278
313
  }
279
314
  const node = {
315
+ selectionLayer,
280
316
  colStart: column,
281
317
  colEnd: column,
282
318
  rowStart: row,
@@ -554,7 +554,7 @@ class MergeCells extends _base.BasePlugin {
554
554
  * @param {CellRange} [cellRange] Selection cell range.
555
555
  */
556
556
  mergeSelection() {
557
- let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hot.getSelectedRangeLast();
557
+ let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hot.getSelectedRangeActive();
558
558
  if (!cellRange) {
559
559
  return;
560
560
  }
@@ -574,7 +574,7 @@ class MergeCells extends _base.BasePlugin {
574
574
  * @param {CellRange} [cellRange] Selection cell range.
575
575
  */
576
576
  unmergeSelection() {
577
- let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hot.getSelectedRangeLast();
577
+ let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hot.getSelectedRangeActive();
578
578
  if (!cellRange) {
579
579
  return;
580
580
  }
@@ -741,7 +741,7 @@ class MergeCells extends _base.BasePlugin {
741
741
  gridContext.addShortcut({
742
742
  keys: [['Control', 'm']],
743
743
  callback: () => {
744
- const range = this.hot.getSelectedRangeLast();
744
+ const range = this.hot.getSelectedRangeActive();
745
745
  if (range && !range.isSingleHeader()) {
746
746
  this.toggleMerge(range);
747
747
  this.hot.render();
@@ -946,7 +946,7 @@ function _onAfterInit() {
946
946
  function _onAfterIsMultipleSelection(isMultiple) {
947
947
  if (isMultiple) {
948
948
  const mergedCells = this.mergedCellsCollection.mergedCells;
949
- const selectionRange = this.hot.getSelectedRangeLast();
949
+ const selectionRange = this.hot.getSelectedRangeActive();
950
950
  const topStartCoords = selectionRange.getTopStartCorner();
951
951
  const bottomEndCoords = selectionRange.getBottomEndCorner();
952
952
  for (let group = 0; group < mergedCells.length; group += 1) {
@@ -972,7 +972,7 @@ function _onModifyTransformFocus(delta) {
972
972
  * @param {object} delta The transformation delta.
973
973
  */
974
974
  function _onModifyTransformStart(delta) {
975
- const selectedRange = this.hot.getSelectedRangeLast();
975
+ const selectedRange = this.hot.getSelectedRangeActive();
976
976
  const {
977
977
  highlight
978
978
  } = selectedRange;
@@ -1047,7 +1047,7 @@ function _onModifyTransformStart(delta) {
1047
1047
  * @param {{ row: number, col: number }} delta The transformation delta.
1048
1048
  */
1049
1049
  function _onModifyTransformEnd(delta) {
1050
- const selectedRange = this.hot.getSelectedRangeLast();
1050
+ const selectedRange = this.hot.getSelectedRangeActive();
1051
1051
  const cloneRange = selectedRange.clone();
1052
1052
  const {
1053
1053
  to
@@ -1193,7 +1193,7 @@ function _onBeforeSelectionFocusSet() {
1193
1193
  if (_classPrivateFieldGet(_lastSelectedFocus, this).isCell()) {
1194
1194
  return;
1195
1195
  }
1196
- const selectedRange = this.hot.getSelectedRangeLast();
1196
+ const selectedRange = this.hot.getSelectedRangeActive();
1197
1197
  const verticalDir = selectedRange.getVerticalDirection();
1198
1198
  const horizontalDir = selectedRange.getHorizontalDirection();
1199
1199
  const focusCoords = _classPrivateFieldGet(_lastSelectedFocus, this).clone().normalize();
@@ -1211,43 +1211,53 @@ function _onBeforeSelectionFocusSet() {
1211
1211
  * @param {number} column The visual column index.
1212
1212
  */
1213
1213
  function _onAfterSelectionFocusSet(row, column) {
1214
- const selectedRange = this.hot.getSelectedRangeLast();
1215
1214
  const {
1216
1215
  columnIndexMapper,
1217
1216
  rowIndexMapper
1218
1217
  } = this.hot;
1218
+ let activeSelectionLayerIndex = this.hot.getActiveSelectionLayerIndex();
1219
1219
  let notHiddenRowIndex = null;
1220
1220
  let notHiddenColumnIndex = null;
1221
1221
  if (_classPrivateFieldGet(_lastFocusDelta, this).col < 0) {
1222
1222
  const {
1223
1223
  rowEnd,
1224
- colEnd
1224
+ colEnd,
1225
+ selectionLayer
1225
1226
  } = _classPrivateFieldGet(_focusOrder, this).getPrevHorizontalNode();
1226
1227
  notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colEnd, -1);
1227
1228
  notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowEnd, -1);
1229
+ activeSelectionLayerIndex = selectionLayer;
1228
1230
  } else if (_classPrivateFieldGet(_lastFocusDelta, this).col > 0) {
1229
1231
  const {
1230
1232
  rowStart,
1231
- colStart
1233
+ colStart,
1234
+ selectionLayer
1232
1235
  } = _classPrivateFieldGet(_focusOrder, this).getNextHorizontalNode();
1233
1236
  notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colStart, 1);
1234
1237
  notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowStart, 1);
1238
+ activeSelectionLayerIndex = selectionLayer;
1235
1239
  } else if (_classPrivateFieldGet(_lastFocusDelta, this).row < 0) {
1236
1240
  const {
1237
1241
  rowEnd,
1238
- colEnd
1242
+ colEnd,
1243
+ selectionLayer
1239
1244
  } = _classPrivateFieldGet(_focusOrder, this).getPrevVerticalNode();
1240
1245
  notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colEnd, -1);
1241
1246
  notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowEnd, -1);
1247
+ activeSelectionLayerIndex = selectionLayer;
1242
1248
  } else if (_classPrivateFieldGet(_lastFocusDelta, this).row > 0) {
1243
1249
  const {
1244
1250
  rowStart,
1245
- colStart
1251
+ colStart,
1252
+ selectionLayer
1246
1253
  } = _classPrivateFieldGet(_focusOrder, this).getNextVerticalNode();
1247
1254
  notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colStart, 1);
1248
1255
  notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowStart, 1);
1256
+ activeSelectionLayerIndex = selectionLayer;
1249
1257
  }
1250
1258
  if (notHiddenRowIndex !== null || notHiddenColumnIndex !== null) {
1259
+ this.hot.selection.setActiveSelectionLayerIndex(activeSelectionLayerIndex);
1260
+ const selectedRange = this.hot.getSelectedRangeActive();
1251
1261
  const coords = this.hot._createCellCoords(notHiddenRowIndex, notHiddenColumnIndex);
1252
1262
  const mergeParent = this.mergedCellsCollection.get(coords.row, coords.col);
1253
1263
  const focusHighlight = this.hot.selection.highlight.getFocus();
@@ -1264,7 +1274,7 @@ function _onAfterSelectionFocusSet(row, column) {
1264
1274
  focusHighlight.clear();
1265
1275
  focusHighlight.add(coords).commit();
1266
1276
  }
1267
- _classPrivateFieldGet(_focusOrder, this).setActiveNode(row, column);
1277
+ _classPrivateFieldGet(_focusOrder, this).setActiveNode(row, column, activeSelectionLayerIndex);
1268
1278
  _classPrivateFieldSet(_lastFocusDelta, this, {
1269
1279
  row: 0,
1270
1280
  col: 0
@@ -1274,10 +1284,7 @@ function _onAfterSelectionFocusSet(row, column) {
1274
1284
  * Creates the horizontal and vertical cells order matrix (linked lists) for focused cell.
1275
1285
  */
1276
1286
  function _onAfterSelectionEnd() {
1277
- const selection = this.hot.getSelectedRangeLast();
1278
- if (!selection.isHeader()) {
1279
- _classPrivateFieldGet(_focusOrder, this).buildFocusOrder(this.hot.getSelectedRangeLast());
1280
- }
1287
+ _classPrivateFieldGet(_focusOrder, this).buildFocusOrder(this.hot.getSelectedRange());
1281
1288
  }
1282
1289
  /**
1283
1290
  * The `afterGetCellMeta` hook callback.
@@ -1392,7 +1399,7 @@ function _onAfterChange(changes, source) {
1392
1399
  */
1393
1400
  function _onBeforeDrawAreaBorders(corners, className) {
1394
1401
  if (className && className === 'area') {
1395
- const selectedRange = this.hot.getSelectedRangeLast();
1402
+ const selectedRange = this.hot.getSelectedRangeActive();
1396
1403
  const mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(selectedRange);
1397
1404
  (0, _array.arrayEach)(mergedCellsWithinRange, mergedCell => {
1398
1405
  if (selectedRange.getBottomEndCorner().row === mergedCell.getLastRow() && selectedRange.getBottomEndCorner().col === mergedCell.getLastColumn()) {
@@ -1442,7 +1449,7 @@ function _onBeforeBeginEditing(row, column, initialValue, event) {
1442
1449
  if (!(event instanceof MouseEvent)) {
1443
1450
  return;
1444
1451
  }
1445
- const selection = this.hot.getSelectedRangeLast();
1452
+ const selection = this.hot.getSelectedRangeActive();
1446
1453
  const mergeCell = this.mergedCellsCollection.getByRange(selection);
1447
1454
  if (!mergeCell) {
1448
1455
  return;
@@ -550,7 +550,7 @@ export class MergeCells extends BasePlugin {
550
550
  * @param {CellRange} [cellRange] Selection cell range.
551
551
  */
552
552
  mergeSelection() {
553
- let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hot.getSelectedRangeLast();
553
+ let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hot.getSelectedRangeActive();
554
554
  if (!cellRange) {
555
555
  return;
556
556
  }
@@ -570,7 +570,7 @@ export class MergeCells extends BasePlugin {
570
570
  * @param {CellRange} [cellRange] Selection cell range.
571
571
  */
572
572
  unmergeSelection() {
573
- let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hot.getSelectedRangeLast();
573
+ let cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hot.getSelectedRangeActive();
574
574
  if (!cellRange) {
575
575
  return;
576
576
  }
@@ -737,7 +737,7 @@ export class MergeCells extends BasePlugin {
737
737
  gridContext.addShortcut({
738
738
  keys: [['Control', 'm']],
739
739
  callback: () => {
740
- const range = this.hot.getSelectedRangeLast();
740
+ const range = this.hot.getSelectedRangeActive();
741
741
  if (range && !range.isSingleHeader()) {
742
742
  this.toggleMerge(range);
743
743
  this.hot.render();
@@ -941,7 +941,7 @@ function _onAfterInit() {
941
941
  function _onAfterIsMultipleSelection(isMultiple) {
942
942
  if (isMultiple) {
943
943
  const mergedCells = this.mergedCellsCollection.mergedCells;
944
- const selectionRange = this.hot.getSelectedRangeLast();
944
+ const selectionRange = this.hot.getSelectedRangeActive();
945
945
  const topStartCoords = selectionRange.getTopStartCorner();
946
946
  const bottomEndCoords = selectionRange.getBottomEndCorner();
947
947
  for (let group = 0; group < mergedCells.length; group += 1) {
@@ -967,7 +967,7 @@ function _onModifyTransformFocus(delta) {
967
967
  * @param {object} delta The transformation delta.
968
968
  */
969
969
  function _onModifyTransformStart(delta) {
970
- const selectedRange = this.hot.getSelectedRangeLast();
970
+ const selectedRange = this.hot.getSelectedRangeActive();
971
971
  const {
972
972
  highlight
973
973
  } = selectedRange;
@@ -1042,7 +1042,7 @@ function _onModifyTransformStart(delta) {
1042
1042
  * @param {{ row: number, col: number }} delta The transformation delta.
1043
1043
  */
1044
1044
  function _onModifyTransformEnd(delta) {
1045
- const selectedRange = this.hot.getSelectedRangeLast();
1045
+ const selectedRange = this.hot.getSelectedRangeActive();
1046
1046
  const cloneRange = selectedRange.clone();
1047
1047
  const {
1048
1048
  to
@@ -1188,7 +1188,7 @@ function _onBeforeSelectionFocusSet() {
1188
1188
  if (_classPrivateFieldGet(_lastSelectedFocus, this).isCell()) {
1189
1189
  return;
1190
1190
  }
1191
- const selectedRange = this.hot.getSelectedRangeLast();
1191
+ const selectedRange = this.hot.getSelectedRangeActive();
1192
1192
  const verticalDir = selectedRange.getVerticalDirection();
1193
1193
  const horizontalDir = selectedRange.getHorizontalDirection();
1194
1194
  const focusCoords = _classPrivateFieldGet(_lastSelectedFocus, this).clone().normalize();
@@ -1206,43 +1206,53 @@ function _onBeforeSelectionFocusSet() {
1206
1206
  * @param {number} column The visual column index.
1207
1207
  */
1208
1208
  function _onAfterSelectionFocusSet(row, column) {
1209
- const selectedRange = this.hot.getSelectedRangeLast();
1210
1209
  const {
1211
1210
  columnIndexMapper,
1212
1211
  rowIndexMapper
1213
1212
  } = this.hot;
1213
+ let activeSelectionLayerIndex = this.hot.getActiveSelectionLayerIndex();
1214
1214
  let notHiddenRowIndex = null;
1215
1215
  let notHiddenColumnIndex = null;
1216
1216
  if (_classPrivateFieldGet(_lastFocusDelta, this).col < 0) {
1217
1217
  const {
1218
1218
  rowEnd,
1219
- colEnd
1219
+ colEnd,
1220
+ selectionLayer
1220
1221
  } = _classPrivateFieldGet(_focusOrder, this).getPrevHorizontalNode();
1221
1222
  notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colEnd, -1);
1222
1223
  notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowEnd, -1);
1224
+ activeSelectionLayerIndex = selectionLayer;
1223
1225
  } else if (_classPrivateFieldGet(_lastFocusDelta, this).col > 0) {
1224
1226
  const {
1225
1227
  rowStart,
1226
- colStart
1228
+ colStart,
1229
+ selectionLayer
1227
1230
  } = _classPrivateFieldGet(_focusOrder, this).getNextHorizontalNode();
1228
1231
  notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colStart, 1);
1229
1232
  notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowStart, 1);
1233
+ activeSelectionLayerIndex = selectionLayer;
1230
1234
  } else if (_classPrivateFieldGet(_lastFocusDelta, this).row < 0) {
1231
1235
  const {
1232
1236
  rowEnd,
1233
- colEnd
1237
+ colEnd,
1238
+ selectionLayer
1234
1239
  } = _classPrivateFieldGet(_focusOrder, this).getPrevVerticalNode();
1235
1240
  notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colEnd, -1);
1236
1241
  notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowEnd, -1);
1242
+ activeSelectionLayerIndex = selectionLayer;
1237
1243
  } else if (_classPrivateFieldGet(_lastFocusDelta, this).row > 0) {
1238
1244
  const {
1239
1245
  rowStart,
1240
- colStart
1246
+ colStart,
1247
+ selectionLayer
1241
1248
  } = _classPrivateFieldGet(_focusOrder, this).getNextVerticalNode();
1242
1249
  notHiddenColumnIndex = columnIndexMapper.getNearestNotHiddenIndex(colStart, 1);
1243
1250
  notHiddenRowIndex = rowIndexMapper.getNearestNotHiddenIndex(rowStart, 1);
1251
+ activeSelectionLayerIndex = selectionLayer;
1244
1252
  }
1245
1253
  if (notHiddenRowIndex !== null || notHiddenColumnIndex !== null) {
1254
+ this.hot.selection.setActiveSelectionLayerIndex(activeSelectionLayerIndex);
1255
+ const selectedRange = this.hot.getSelectedRangeActive();
1246
1256
  const coords = this.hot._createCellCoords(notHiddenRowIndex, notHiddenColumnIndex);
1247
1257
  const mergeParent = this.mergedCellsCollection.get(coords.row, coords.col);
1248
1258
  const focusHighlight = this.hot.selection.highlight.getFocus();
@@ -1259,7 +1269,7 @@ function _onAfterSelectionFocusSet(row, column) {
1259
1269
  focusHighlight.clear();
1260
1270
  focusHighlight.add(coords).commit();
1261
1271
  }
1262
- _classPrivateFieldGet(_focusOrder, this).setActiveNode(row, column);
1272
+ _classPrivateFieldGet(_focusOrder, this).setActiveNode(row, column, activeSelectionLayerIndex);
1263
1273
  _classPrivateFieldSet(_lastFocusDelta, this, {
1264
1274
  row: 0,
1265
1275
  col: 0
@@ -1269,10 +1279,7 @@ function _onAfterSelectionFocusSet(row, column) {
1269
1279
  * Creates the horizontal and vertical cells order matrix (linked lists) for focused cell.
1270
1280
  */
1271
1281
  function _onAfterSelectionEnd() {
1272
- const selection = this.hot.getSelectedRangeLast();
1273
- if (!selection.isHeader()) {
1274
- _classPrivateFieldGet(_focusOrder, this).buildFocusOrder(this.hot.getSelectedRangeLast());
1275
- }
1282
+ _classPrivateFieldGet(_focusOrder, this).buildFocusOrder(this.hot.getSelectedRange());
1276
1283
  }
1277
1284
  /**
1278
1285
  * The `afterGetCellMeta` hook callback.
@@ -1387,7 +1394,7 @@ function _onAfterChange(changes, source) {
1387
1394
  */
1388
1395
  function _onBeforeDrawAreaBorders(corners, className) {
1389
1396
  if (className && className === 'area') {
1390
- const selectedRange = this.hot.getSelectedRangeLast();
1397
+ const selectedRange = this.hot.getSelectedRangeActive();
1391
1398
  const mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(selectedRange);
1392
1399
  arrayEach(mergedCellsWithinRange, mergedCell => {
1393
1400
  if (selectedRange.getBottomEndCorner().row === mergedCell.getLastRow() && selectedRange.getBottomEndCorner().col === mergedCell.getLastColumn()) {
@@ -1437,7 +1444,7 @@ function _onBeforeBeginEditing(row, column, initialValue, event) {
1437
1444
  if (!(event instanceof MouseEvent)) {
1438
1445
  return;
1439
1446
  }
1440
- const selection = this.hot.getSelectedRangeLast();
1447
+ const selection = this.hot.getSelectedRangeActive();
1441
1448
  const mergeCell = this.mergedCellsCollection.getByRange(selection);
1442
1449
  if (!mergeCell) {
1443
1450
  return;
@@ -42,7 +42,7 @@ function createMergeCellRenderer(plugin) {
42
42
  if (!(0, _object.isObject)(mergedCell)) {
43
43
  TD.removeAttribute('rowspan');
44
44
  TD.removeAttribute('colspan');
45
- if ((0, _browser.isSafari)() && updateNextCellsHeight.has(row) && !hot.getSettings().rowHeaders) {
45
+ if (updateNextCellsHeight.has(row) && !hot.getSettings().rowHeaders) {
46
46
  TD.style.height = `${updateNextCellsHeight.get(row)}px`;
47
47
  updateNextCellsHeight.delete(row);
48
48
  }
@@ -57,13 +57,19 @@ function createMergeCellRenderer(plugin) {
57
57
  } = mergedCell;
58
58
  const [lastMergedRowIndex, lastMergedColumnIndex] = plugin.translateMergedCellToRenderable(origRow, origRowspan, origColumn, origColspan);
59
59
  const isVirtualRenderingEnabled = plugin.getSetting('virtualized');
60
-
61
- // Safari bug fix - the height of the cells next to the merged cell must be defined
62
- // so that their height is proportional to the height of the merged cell
63
- // (this emulates default behavior in Chrome, FF etc.)
64
- if ((0, _browser.isSafari)() && origColumn === 0 && !hot.getSettings().rowHeaders) {
65
- const height = (0, _utils.sumCellsHeights)(hot, origRow, origRowspan);
66
- updateNextCellsHeight.set(row, height / origRowspan);
60
+ if (origColumn === 0 && !hot.getSettings().rowHeaders) {
61
+ const rowHeights = hot._getRowHeightFromSettings(row);
62
+ if (rowHeights !== undefined) {
63
+ const borderBoxSizing = hot.stylesHandler.areCellsBorderBox();
64
+ const borderCompensation = borderBoxSizing ? 0 : 1;
65
+ updateNextCellsHeight.set(row, rowHeights - borderCompensation);
66
+ } else if ((0, _browser.isSafari)()) {
67
+ // Safari bug fix - the height of the cells next to the merged cell must be defined
68
+ // so that their height is proportional to the height of the merged cell
69
+ // (this emulates default behavior in Chrome, FF etc.)
70
+ const height = (0, _utils.sumCellsHeights)(hot, origRow, origRowspan);
71
+ updateNextCellsHeight.set(row, height / origRowspan);
72
+ }
67
73
  }
68
74
  const renderedRowIndex = rowMapper.getRenderableFromVisualIndex(row);
69
75
  const renderedColumnIndex = columnMapper.getRenderableFromVisualIndex(col);
@@ -38,7 +38,7 @@ export function createMergeCellRenderer(plugin) {
38
38
  if (!isObject(mergedCell)) {
39
39
  TD.removeAttribute('rowspan');
40
40
  TD.removeAttribute('colspan');
41
- if (isSafari() && updateNextCellsHeight.has(row) && !hot.getSettings().rowHeaders) {
41
+ if (updateNextCellsHeight.has(row) && !hot.getSettings().rowHeaders) {
42
42
  TD.style.height = `${updateNextCellsHeight.get(row)}px`;
43
43
  updateNextCellsHeight.delete(row);
44
44
  }
@@ -53,13 +53,19 @@ export function createMergeCellRenderer(plugin) {
53
53
  } = mergedCell;
54
54
  const [lastMergedRowIndex, lastMergedColumnIndex] = plugin.translateMergedCellToRenderable(origRow, origRowspan, origColumn, origColspan);
55
55
  const isVirtualRenderingEnabled = plugin.getSetting('virtualized');
56
-
57
- // Safari bug fix - the height of the cells next to the merged cell must be defined
58
- // so that their height is proportional to the height of the merged cell
59
- // (this emulates default behavior in Chrome, FF etc.)
60
- if (isSafari() && origColumn === 0 && !hot.getSettings().rowHeaders) {
61
- const height = sumCellsHeights(hot, origRow, origRowspan);
62
- updateNextCellsHeight.set(row, height / origRowspan);
56
+ if (origColumn === 0 && !hot.getSettings().rowHeaders) {
57
+ const rowHeights = hot._getRowHeightFromSettings(row);
58
+ if (rowHeights !== undefined) {
59
+ const borderBoxSizing = hot.stylesHandler.areCellsBorderBox();
60
+ const borderCompensation = borderBoxSizing ? 0 : 1;
61
+ updateNextCellsHeight.set(row, rowHeights - borderCompensation);
62
+ } else if (isSafari()) {
63
+ // Safari bug fix - the height of the cells next to the merged cell must be defined
64
+ // so that their height is proportional to the height of the merged cell
65
+ // (this emulates default behavior in Chrome, FF etc.)
66
+ const height = sumCellsHeights(hot, origRow, origRowspan);
67
+ updateNextCellsHeight.set(row, height / origRowspan);
68
+ }
63
69
  }
64
70
  const renderedRowIndex = rowMapper.getRenderableFromVisualIndex(row);
65
71
  const renderedColumnIndex = columnMapper.getRenderableFromVisualIndex(col);
@@ -122,7 +122,7 @@ class MultiColumnSorting extends _columnSorting.ColumnSorting {
122
122
  callback: () => {
123
123
  const {
124
124
  highlight
125
- } = this.hot.getSelectedRangeLast();
125
+ } = this.hot.getSelectedRangeActive();
126
126
  if (highlight.row === -1 && highlight.col >= 0) {
127
127
  this.sort(this.getNextSortConfig(highlight.col, _columnSorting.APPEND_COLUMN_CONFIG_STRATEGY));
128
128
  }
@@ -132,8 +132,8 @@ class MultiColumnSorting extends _columnSorting.ColumnSorting {
132
132
  },
133
133
  runOnlyIf: () => {
134
134
  var _this$hot$getSelected, _this$hot$getSelected2;
135
- const highlight = (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight;
136
- return highlight && ((_this$hot$getSelected2 = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected2 === void 0 ? void 0 : _this$hot$getSelected2.isSingle()) && this.hot.selection.isCellVisible(highlight) && highlight.isHeader();
135
+ const highlight = (_this$hot$getSelected = this.hot.getSelectedRangeActive()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight;
136
+ return highlight && ((_this$hot$getSelected2 = this.hot.getSelectedRangeActive()) === null || _this$hot$getSelected2 === void 0 ? void 0 : _this$hot$getSelected2.isSingle()) && this.hot.selection.isCellVisible(highlight) && highlight.isHeader();
137
137
  },
138
138
  relativeToGroup: _shortcutContexts.EDITOR_EDIT_GROUP,
139
139
  position: 'before',
@@ -119,7 +119,7 @@ export class MultiColumnSorting extends ColumnSorting {
119
119
  callback: () => {
120
120
  const {
121
121
  highlight
122
- } = this.hot.getSelectedRangeLast();
122
+ } = this.hot.getSelectedRangeActive();
123
123
  if (highlight.row === -1 && highlight.col >= 0) {
124
124
  this.sort(this.getNextSortConfig(highlight.col, APPEND_COLUMN_CONFIG_STRATEGY));
125
125
  }
@@ -129,8 +129,8 @@ export class MultiColumnSorting extends ColumnSorting {
129
129
  },
130
130
  runOnlyIf: () => {
131
131
  var _this$hot$getSelected, _this$hot$getSelected2;
132
- const highlight = (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight;
133
- return highlight && ((_this$hot$getSelected2 = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected2 === void 0 ? void 0 : _this$hot$getSelected2.isSingle()) && this.hot.selection.isCellVisible(highlight) && highlight.isHeader();
132
+ const highlight = (_this$hot$getSelected = this.hot.getSelectedRangeActive()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight;
133
+ return highlight && ((_this$hot$getSelected2 = this.hot.getSelectedRangeActive()) === null || _this$hot$getSelected2 === void 0 ? void 0 : _this$hot$getSelected2.isSingle()) && this.hot.selection.isCellVisible(highlight) && highlight.isHeader();
134
134
  },
135
135
  relativeToGroup: SHORTCUTS_GROUP_EDITOR,
136
136
  position: 'before',
@@ -89,7 +89,7 @@ class MultipleSelectionHandles extends _base.BasePlugin {
89
89
  this.eventManager.addEventListener(rootElement, 'touchstart', event => {
90
90
  let selectedRange;
91
91
  if ((0, _element.hasClass)(event.target, 'topSelectionHandle-HitArea')) {
92
- selectedRange = _this.hot.getSelectedRangeLast();
92
+ selectedRange = _this.hot.getSelectedRangeActive();
93
93
  _this.dragged.push('top');
94
94
  _this.touchStartRange = {
95
95
  width: selectedRange.getWidth(),
@@ -99,7 +99,7 @@ class MultipleSelectionHandles extends _base.BasePlugin {
99
99
  event.preventDefault();
100
100
  return false;
101
101
  } else if ((0, _element.hasClass)(event.target, 'bottomSelectionHandle-HitArea')) {
102
- selectedRange = _this.hot.getSelectedRangeLast();
102
+ selectedRange = _this.hot.getSelectedRangeActive();
103
103
  _this.dragged.push('bottom');
104
104
  _this.touchStartRange = {
105
105
  width: selectedRange.getWidth(),
@@ -145,7 +145,7 @@ class MultipleSelectionHandles extends _base.BasePlugin {
145
145
  if (targetCoords.col === -1) {
146
146
  targetCoords.col = 0;
147
147
  }
148
- selectedRange = _this.hot.getSelectedRangeLast();
148
+ selectedRange = _this.hot.getSelectedRangeActive();
149
149
  rangeWidth = selectedRange.getWidth();
150
150
  rangeHeight = selectedRange.getHeight();
151
151
  rangeDirection = selectedRange.getDirection();