handsontable 16.0.1-next-eee5f08-20250710 → 16.1.0-next-abd8f2e-20250904

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 +32 -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 +7844 -2990
  67. package/dist/handsontable.full.min.css +4 -5
  68. package/dist/handsontable.full.min.js +167 -165
  69. package/dist/handsontable.js +9639 -4806
  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 +292 -0
  330. package/plugins/loading/loading.mjs +287 -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
@@ -265,7 +265,7 @@ class ManualColumnResize extends _base.BasePlugin {
265
265
  * @param {HTMLCellElement} TH TH HTML element.
266
266
  */
267
267
  setupHandlePosition(TH) {
268
- if (!TH.parentNode) {
268
+ if (!TH.parentNode || _classPrivateFieldGet(_dblclick, this) > 1) {
269
269
  return;
270
270
  }
271
271
  _classPrivateFieldSet(_currentTH, this, TH);
@@ -417,8 +417,8 @@ class ManualColumnResize extends _base.BasePlugin {
417
417
  */
418
418
  afterMouseDownTimeout() {
419
419
  const render = () => {
420
- this.hot.render();
421
420
  this.hot.view.adjustElementsSize();
421
+ this.hot.render();
422
422
  };
423
423
  const resize = (column, forceRender) => {
424
424
  const hookNewSize = this.hot.runHooks('beforeColumnResize', _classPrivateFieldGet(_newSize, this), column, true);
@@ -577,8 +577,8 @@ function _onMouseMove(event) {
577
577
  */
578
578
  function _onMouseUp() {
579
579
  const render = () => {
580
- this.hot.render();
581
580
  this.hot.view.adjustElementsSize();
581
+ this.hot.render();
582
582
  };
583
583
  const resize = (column, forceRender) => {
584
584
  this.hot.runHooks('beforeColumnResize', _classPrivateFieldGet(_newSize, this), column, false);
@@ -260,7 +260,7 @@ export class ManualColumnResize extends BasePlugin {
260
260
  * @param {HTMLCellElement} TH TH HTML element.
261
261
  */
262
262
  setupHandlePosition(TH) {
263
- if (!TH.parentNode) {
263
+ if (!TH.parentNode || _classPrivateFieldGet(_dblclick, this) > 1) {
264
264
  return;
265
265
  }
266
266
  _classPrivateFieldSet(_currentTH, this, TH);
@@ -412,8 +412,8 @@ export class ManualColumnResize extends BasePlugin {
412
412
  */
413
413
  afterMouseDownTimeout() {
414
414
  const render = () => {
415
- this.hot.render();
416
415
  this.hot.view.adjustElementsSize();
416
+ this.hot.render();
417
417
  };
418
418
  const resize = (column, forceRender) => {
419
419
  const hookNewSize = this.hot.runHooks('beforeColumnResize', _classPrivateFieldGet(_newSize, this), column, true);
@@ -571,8 +571,8 @@ function _onMouseMove(event) {
571
571
  */
572
572
  function _onMouseUp() {
573
573
  const render = () => {
574
- this.hot.render();
575
574
  this.hot.view.adjustElementsSize();
575
+ this.hot.render();
576
576
  };
577
577
  const resize = (column, forceRender) => {
578
578
  this.hot.runHooks('beforeColumnResize', _classPrivateFieldGet(_newSize, this), column, false);
@@ -395,7 +395,7 @@ class ManualRowMove extends _base.BasePlugin {
395
395
  * @returns {Array}
396
396
  */
397
397
  prepareRowsToMoving() {
398
- const selection = this.hot.getSelectedRangeLast();
398
+ const selection = this.hot.getSelectedRangeActive();
399
399
  const selectedRows = [];
400
400
  if (!selection) {
401
401
  return selectedRows;
@@ -528,7 +528,7 @@ function _onBeforeOnCellMouseDown(event, coords, TD, controller) {
528
528
  wtViewport
529
529
  } = this.hot.view._wt;
530
530
  const isHeaderSelection = this.hot.selection.isSelectedByRowHeader();
531
- const selection = this.hot.getSelectedRangeLast();
531
+ const selection = this.hot.getSelectedRangeActive();
532
532
  if (!selection || !isHeaderSelection || _classPrivateFieldGet(_pressed, this) || event.button !== 0) {
533
533
  _classPrivateFieldSet(_pressed, this, false);
534
534
  _classPrivateFieldGet(_rowsToMove, this).length = 0;
@@ -589,7 +589,7 @@ function _onMouseMove(event) {
589
589
  * a boolean value that allows or disallows changing the selection for that particular area.
590
590
  */
591
591
  function _onBeforeOnCellMouseOver(event, coords, TD, controller) {
592
- const selectedRange = this.hot.getSelectedRangeLast();
592
+ const selectedRange = this.hot.getSelectedRangeActive();
593
593
  if (!selectedRange || !_classPrivateFieldGet(_pressed, this)) {
594
594
  return;
595
595
  }
@@ -624,8 +624,8 @@ function _onMouseUp() {
624
624
  _classPrivateFieldGet(_rowsToMove, this).length = 0;
625
625
  if (movePerformed === true) {
626
626
  this.persistentStateSave();
627
- this.hot.render();
628
627
  this.hot.view.adjustElementsSize();
628
+ this.hot.render();
629
629
  const selectionStart = this.hot.toVisualRow(firstMovedPhysicalRow);
630
630
  const selectionEnd = selectionStart + rowsLen - 1;
631
631
  this.hot.selectRows(selectionStart, selectionEnd);
@@ -391,7 +391,7 @@ export class ManualRowMove extends BasePlugin {
391
391
  * @returns {Array}
392
392
  */
393
393
  prepareRowsToMoving() {
394
- const selection = this.hot.getSelectedRangeLast();
394
+ const selection = this.hot.getSelectedRangeActive();
395
395
  const selectedRows = [];
396
396
  if (!selection) {
397
397
  return selectedRows;
@@ -523,7 +523,7 @@ function _onBeforeOnCellMouseDown(event, coords, TD, controller) {
523
523
  wtViewport
524
524
  } = this.hot.view._wt;
525
525
  const isHeaderSelection = this.hot.selection.isSelectedByRowHeader();
526
- const selection = this.hot.getSelectedRangeLast();
526
+ const selection = this.hot.getSelectedRangeActive();
527
527
  if (!selection || !isHeaderSelection || _classPrivateFieldGet(_pressed, this) || event.button !== 0) {
528
528
  _classPrivateFieldSet(_pressed, this, false);
529
529
  _classPrivateFieldGet(_rowsToMove, this).length = 0;
@@ -584,7 +584,7 @@ function _onMouseMove(event) {
584
584
  * a boolean value that allows or disallows changing the selection for that particular area.
585
585
  */
586
586
  function _onBeforeOnCellMouseOver(event, coords, TD, controller) {
587
- const selectedRange = this.hot.getSelectedRangeLast();
587
+ const selectedRange = this.hot.getSelectedRangeActive();
588
588
  if (!selectedRange || !_classPrivateFieldGet(_pressed, this)) {
589
589
  return;
590
590
  }
@@ -619,8 +619,8 @@ function _onMouseUp() {
619
619
  _classPrivateFieldGet(_rowsToMove, this).length = 0;
620
620
  if (movePerformed === true) {
621
621
  this.persistentStateSave();
622
- this.hot.render();
623
622
  this.hot.view.adjustElementsSize();
623
+ this.hot.render();
624
624
  const selectionStart = this.hot.toVisualRow(firstMovedPhysicalRow);
625
625
  const selectionEnd = selectionStart + rowsLen - 1;
626
626
  this.hot.selectRows(selectionStart, selectionEnd);
@@ -249,6 +249,9 @@ class ManualRowResize extends _base.BasePlugin {
249
249
  * @param {HTMLCellElement} TH TH HTML element.
250
250
  */
251
251
  setupHandlePosition(TH) {
252
+ if (_classPrivateFieldGet(_dblclick, this) > 1) {
253
+ return;
254
+ }
252
255
  _classPrivateFieldSet(_currentTH, this, TH);
253
256
  const {
254
257
  view
@@ -414,8 +417,8 @@ class ManualRowResize extends _base.BasePlugin {
414
417
  */
415
418
  afterMouseDownTimeout() {
416
419
  const render = () => {
417
- this.hot.render();
418
420
  this.hot.view.adjustElementsSize();
421
+ this.hot.render();
419
422
  };
420
423
  const resize = (row, forceRender) => {
421
424
  const hookNewSize = this.hot.runHooks('beforeRowResize', this.getActualRowHeight(row), row, true);
@@ -542,8 +545,8 @@ function _onMouseMove(event) {
542
545
  */
543
546
  function _onMouseUp() {
544
547
  const render = () => {
545
- this.hot.render();
546
548
  this.hot.view.adjustElementsSize();
549
+ this.hot.render();
547
550
  };
548
551
  const runHooks = (row, forceRender) => {
549
552
  this.hot.runHooks('beforeRowResize', this.getActualRowHeight(row), row, false);
@@ -244,6 +244,9 @@ export class ManualRowResize extends BasePlugin {
244
244
  * @param {HTMLCellElement} TH TH HTML element.
245
245
  */
246
246
  setupHandlePosition(TH) {
247
+ if (_classPrivateFieldGet(_dblclick, this) > 1) {
248
+ return;
249
+ }
247
250
  _classPrivateFieldSet(_currentTH, this, TH);
248
251
  const {
249
252
  view
@@ -409,8 +412,8 @@ export class ManualRowResize extends BasePlugin {
409
412
  */
410
413
  afterMouseDownTimeout() {
411
414
  const render = () => {
412
- this.hot.render();
413
415
  this.hot.view.adjustElementsSize();
416
+ this.hot.render();
414
417
  };
415
418
  const resize = (row, forceRender) => {
416
419
  const hookNewSize = this.hot.runHooks('beforeRowResize', this.getActualRowHeight(row), row, true);
@@ -536,8 +539,8 @@ function _onMouseMove(event) {
536
539
  */
537
540
  function _onMouseUp() {
538
541
  const render = () => {
539
- this.hot.render();
540
542
  this.hot.view.adjustElementsSize();
543
+ this.hot.render();
541
544
  };
542
545
  const runHooks = (row, forceRender) => {
543
546
  this.hot.runHooks('beforeRowResize', this.getActualRowHeight(row), row, false);
@@ -14,38 +14,38 @@ function toggleMergeItem(plugin) {
14
14
  return {
15
15
  key: 'mergeCells',
16
16
  name() {
17
- const sel = this.getSelectedLast();
18
- if (sel) {
19
- const info = plugin.mergedCellsCollection.get(sel[0], sel[1]);
20
- if (info.row === sel[0] && info.col === sel[1] && info.row + info.rowspan - 1 === sel[2] && info.col + info.colspan - 1 === sel[3]) {
17
+ const selection = this.getSelectedActive();
18
+ if (selection) {
19
+ const info = plugin.mergedCellsCollection.get(selection[0], selection[1]);
20
+ if (info.row === selection[0] && info.col === selection[1] && info.row + info.rowspan - 1 === selection[2] && info.col + info.colspan - 1 === selection[3]) {
21
21
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNMERGE_CELLS);
22
22
  }
23
23
  }
24
24
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_MERGE_CELLS);
25
25
  },
26
26
  callback() {
27
- const currentRange = this.getSelectedRangeLast();
28
- if (!currentRange) {
27
+ const activeRange = this.getSelectedRangeActive();
28
+ if (!activeRange) {
29
29
  return;
30
30
  }
31
- currentRange.setDirection(this.isRtl() ? 'NE-SW' : 'NW-SE');
31
+ activeRange.setDirection(this.isRtl() ? 'NE-SW' : 'NW-SE');
32
32
  const {
33
33
  from,
34
34
  to
35
- } = currentRange;
36
- plugin.toggleMerge(currentRange);
35
+ } = activeRange;
36
+ plugin.toggleMerge(activeRange);
37
37
  this.selectCell(from.row, from.col, to.row, to.col, false);
38
38
  },
39
39
  disabled() {
40
- const sel = this.getSelectedLast();
41
- if (!sel) {
40
+ const selection = this.getSelectedActive();
41
+ if (!selection) {
42
42
  return true;
43
43
  }
44
44
  const isSingleCell = _cellCoords.default.isSingleCell({
45
- row: sel[0],
46
- col: sel[1],
47
- rowspan: sel[2] - sel[0] + 1,
48
- colspan: sel[3] - sel[1] + 1
45
+ row: selection[0],
46
+ col: selection[1],
47
+ rowspan: selection[2] - selection[0] + 1,
48
+ colspan: selection[3] - selection[1] + 1
49
49
  });
50
50
  return isSingleCell || this.selection.isSelectedByCorner();
51
51
  },
@@ -8,38 +8,38 @@ export default function toggleMergeItem(plugin) {
8
8
  return {
9
9
  key: 'mergeCells',
10
10
  name() {
11
- const sel = this.getSelectedLast();
12
- if (sel) {
13
- const info = plugin.mergedCellsCollection.get(sel[0], sel[1]);
14
- if (info.row === sel[0] && info.col === sel[1] && info.row + info.rowspan - 1 === sel[2] && info.col + info.colspan - 1 === sel[3]) {
11
+ const selection = this.getSelectedActive();
12
+ if (selection) {
13
+ const info = plugin.mergedCellsCollection.get(selection[0], selection[1]);
14
+ if (info.row === selection[0] && info.col === selection[1] && info.row + info.rowspan - 1 === selection[2] && info.col + info.colspan - 1 === selection[3]) {
15
15
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNMERGE_CELLS);
16
16
  }
17
17
  }
18
18
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_MERGE_CELLS);
19
19
  },
20
20
  callback() {
21
- const currentRange = this.getSelectedRangeLast();
22
- if (!currentRange) {
21
+ const activeRange = this.getSelectedRangeActive();
22
+ if (!activeRange) {
23
23
  return;
24
24
  }
25
- currentRange.setDirection(this.isRtl() ? 'NE-SW' : 'NW-SE');
25
+ activeRange.setDirection(this.isRtl() ? 'NE-SW' : 'NW-SE');
26
26
  const {
27
27
  from,
28
28
  to
29
- } = currentRange;
30
- plugin.toggleMerge(currentRange);
29
+ } = activeRange;
30
+ plugin.toggleMerge(activeRange);
31
31
  this.selectCell(from.row, from.col, to.row, to.col, false);
32
32
  },
33
33
  disabled() {
34
- const sel = this.getSelectedLast();
35
- if (!sel) {
34
+ const selection = this.getSelectedActive();
35
+ if (!selection) {
36
36
  return true;
37
37
  }
38
38
  const isSingleCell = MergedCellCoords.isSingleCell({
39
- row: sel[0],
40
- col: sel[1],
41
- rowspan: sel[2] - sel[0] + 1,
42
- colspan: sel[3] - sel[1] + 1
39
+ row: selection[0],
40
+ col: selection[1],
41
+ rowspan: selection[2] - selection[0] + 1,
42
+ colspan: selection[3] - selection[1] + 1
43
43
  });
44
44
  return isSingleCell || this.selection.isSelectedByCorner();
45
45
  },
@@ -3,6 +3,8 @@
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.error.cause.js");
5
5
  require("core-js/modules/es.array.push.js");
6
+ require("core-js/modules/esnext.iterator.constructor.js");
7
+ require("core-js/modules/esnext.iterator.for-each.js");
6
8
  var _linkedList = _interopRequireDefault(require("../../utils/dataStructures/linkedList"));
7
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
10
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
@@ -35,11 +37,13 @@ class FocusOrder {
35
37
  /**
36
38
  * Pushes a new node to the provided list order.
37
39
  *
38
- * @param {CellRange} selectedRange The selected range to build the focus order for.
39
- * @param {LinkedList} listOrder The list order to push the node to.
40
- * @param {WeakSet} mergeCellsVisitor The set of visited cells.
41
- * @param {number} row The visual row index.
42
- * @param {number} column The visual column index.
40
+ * @param {object} options The options object.
41
+ * @param {CellRange} options.selectedRange The selected range to build the focus order for.
42
+ * @param {number} options.selectionLayer The selection layer index.
43
+ * @param {LinkedList} options.listOrder The list order to push the node to.
44
+ * @param {WeakSet} options.mergeCellsVisitor The set of visited cells.
45
+ * @param {number} options.row The visual row index.
46
+ * @param {number} options.column The visual column index.
43
47
  * @returns {NodeStructure | null}
44
48
  */
45
49
  _classPrivateMethodInitSpec(this, _FocusOrder_brand);
@@ -183,53 +187,73 @@ class FocusOrder {
183
187
  /**
184
188
  * Rebuilds the focus order list based on the provided selection.
185
189
  *
186
- * @param {CellRange} selectedRange The selected range to build the focus order for.
190
+ * @param {CellRange[]} selectedRanges The selected ranges to build the focus order for.
187
191
  */
188
- buildFocusOrder(selectedRange) {
189
- const topStart = selectedRange.getTopStartCorner();
190
- const bottomEnd = selectedRange.getBottomEndCorner();
191
- const visitedHorizontalCells = new WeakSet();
192
+ buildFocusOrder(selectedRanges) {
192
193
  _classPrivateFieldSet(_cellsHorizontalOrder, this, new _linkedList.default());
193
- for (let r = topStart.row; r <= bottomEnd.row; r++) {
194
- if (_classPrivateFieldGet(_rowIndexMapper, this).isHidden(r)) {
195
- // eslint-disable-next-line no-continue
196
- continue;
197
- }
198
- for (let c = topStart.col; c <= bottomEnd.col; c++) {
199
- if (_classPrivateFieldGet(_columnIndexMapper, this).isHidden(c)) {
194
+ selectedRanges.forEach((range, selectionLayer) => {
195
+ const visitedHorizontalCells = new WeakSet();
196
+ const topStart = range.getTopStartCorner();
197
+ const bottomEnd = range.getBottomEndCorner();
198
+ for (let r = topStart.row; r <= bottomEnd.row; r++) {
199
+ if (_classPrivateFieldGet(_rowIndexMapper, this).isHidden(r)) {
200
200
  // eslint-disable-next-line no-continue
201
201
  continue;
202
202
  }
203
- const node = _assertClassBrand(_FocusOrder_brand, this, _pushOrderNode).call(this, selectedRange, _classPrivateFieldGet(_cellsHorizontalOrder, this), visitedHorizontalCells, r, c);
204
- if (node) {
205
- _classPrivateFieldSet(_currentHorizontalLinkedNode, this, node);
203
+ for (let c = topStart.col; c <= bottomEnd.col; c++) {
204
+ if (_classPrivateFieldGet(_columnIndexMapper, this).isHidden(c)) {
205
+ // eslint-disable-next-line no-continue
206
+ continue;
207
+ }
208
+ const node = _assertClassBrand(_FocusOrder_brand, this, _pushOrderNode).call(this, {
209
+ selectedRange: range,
210
+ selectionLayer,
211
+ listOrder: _classPrivateFieldGet(_cellsHorizontalOrder, this),
212
+ mergeCellsVisitor: visitedHorizontalCells,
213
+ row: r,
214
+ column: c
215
+ });
216
+ if (node) {
217
+ _classPrivateFieldSet(_currentHorizontalLinkedNode, this, node);
218
+ }
206
219
  }
207
220
  }
208
- }
221
+ });
209
222
 
210
223
  // create circular linked list
211
224
  if (_classPrivateFieldGet(_cellsHorizontalOrder, this).first) {
212
225
  _classPrivateFieldGet(_cellsHorizontalOrder, this).first.prev = _classPrivateFieldGet(_cellsHorizontalOrder, this).last;
213
226
  _classPrivateFieldGet(_cellsHorizontalOrder, this).last.next = _classPrivateFieldGet(_cellsHorizontalOrder, this).first;
214
227
  }
215
- const visitedVerticalCells = new WeakSet();
216
228
  _classPrivateFieldSet(_cellsVerticalOrder, this, new _linkedList.default());
217
- for (let c = topStart.col; c <= bottomEnd.col; c++) {
218
- if (_classPrivateFieldGet(_columnIndexMapper, this).isHidden(c)) {
219
- // eslint-disable-next-line no-continue
220
- continue;
221
- }
222
- for (let r = topStart.row; r <= bottomEnd.row; r++) {
223
- if (_classPrivateFieldGet(_rowIndexMapper, this).isHidden(r)) {
229
+ selectedRanges.forEach((range, selectionLayer) => {
230
+ const visitedVerticalCells = new WeakSet();
231
+ const topStart = range.getTopStartCorner();
232
+ const bottomEnd = range.getBottomEndCorner();
233
+ for (let c = topStart.col; c <= bottomEnd.col; c++) {
234
+ if (_classPrivateFieldGet(_columnIndexMapper, this).isHidden(c)) {
224
235
  // eslint-disable-next-line no-continue
225
236
  continue;
226
237
  }
227
- const node = _assertClassBrand(_FocusOrder_brand, this, _pushOrderNode).call(this, selectedRange, _classPrivateFieldGet(_cellsVerticalOrder, this), visitedVerticalCells, r, c);
228
- if (node) {
229
- _classPrivateFieldSet(_currentVerticalLinkedNode, this, node);
238
+ for (let r = topStart.row; r <= bottomEnd.row; r++) {
239
+ if (_classPrivateFieldGet(_rowIndexMapper, this).isHidden(r)) {
240
+ // eslint-disable-next-line no-continue
241
+ continue;
242
+ }
243
+ const node = _assertClassBrand(_FocusOrder_brand, this, _pushOrderNode).call(this, {
244
+ selectedRange: range,
245
+ selectionLayer,
246
+ listOrder: _classPrivateFieldGet(_cellsVerticalOrder, this),
247
+ mergeCellsVisitor: visitedVerticalCells,
248
+ row: r,
249
+ column: c
250
+ });
251
+ if (node) {
252
+ _classPrivateFieldSet(_currentVerticalLinkedNode, this, node);
253
+ }
230
254
  }
231
255
  }
232
- }
256
+ });
233
257
 
234
258
  // create circular linked list
235
259
  if (_classPrivateFieldGet(_cellsVerticalOrder, this).first) {
@@ -242,38 +266,49 @@ class FocusOrder {
242
266
  *
243
267
  * @param {number} row The visual row index.
244
268
  * @param {number} column The visual column index.
269
+ * @param {number} selectionLayerIndex The index of the selection layer to which the focus should be marked as active.
245
270
  * @returns {FocusOrder}
246
271
  */
247
- setActiveNode(row, column) {
272
+ setActiveNode(row, column, selectionLayerIndex) {
248
273
  _classPrivateFieldGet(_cellsHorizontalOrder, this).inorder(node => {
249
274
  const {
275
+ selectionLayer,
250
276
  rowStart,
251
277
  rowEnd,
252
278
  colStart,
253
279
  colEnd
254
280
  } = node.data;
255
- if (row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {
281
+ if (selectionLayer === selectionLayerIndex && row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {
256
282
  _classPrivateFieldSet(_currentHorizontalLinkedNode, this, node);
257
- return false;
283
+ return true;
258
284
  }
259
285
  });
260
286
  _classPrivateFieldGet(_cellsVerticalOrder, this).inorder(node => {
261
287
  const {
288
+ selectionLayer,
262
289
  rowStart,
263
290
  rowEnd,
264
291
  colStart,
265
292
  colEnd
266
293
  } = node.data;
267
- if (row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {
294
+ if (selectionLayer === selectionLayerIndex && row >= rowStart && row <= rowEnd && column >= colStart && column <= colEnd) {
268
295
  _classPrivateFieldSet(_currentVerticalLinkedNode, this, node);
269
- return false;
296
+ return true;
270
297
  }
271
298
  });
272
299
  return this;
273
300
  }
274
301
  }
275
302
  exports.FocusOrder = FocusOrder;
276
- function _pushOrderNode(selectedRange, listOrder, mergeCellsVisitor, row, column) {
303
+ function _pushOrderNode(_ref2) {
304
+ let {
305
+ selectedRange,
306
+ selectionLayer,
307
+ listOrder,
308
+ mergeCellsVisitor,
309
+ row,
310
+ column
311
+ } = _ref2;
277
312
  const topStart = selectedRange.getTopStartCorner();
278
313
  const bottomEnd = selectedRange.getBottomEndCorner();
279
314
  const highlight = selectedRange.highlight.clone().normalize();
@@ -282,6 +317,7 @@ function _pushOrderNode(selectedRange, listOrder, mergeCellsVisitor, row, column
282
317
  return null;
283
318
  }
284
319
  const node = {
320
+ selectionLayer,
285
321
  colStart: column,
286
322
  colEnd: column,
287
323
  rowStart: row,