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
@@ -86,7 +86,7 @@ export class MultipleSelectionHandles extends BasePlugin {
86
86
  this.eventManager.addEventListener(rootElement, 'touchstart', event => {
87
87
  let selectedRange;
88
88
  if (hasClass(event.target, 'topSelectionHandle-HitArea')) {
89
- selectedRange = _this.hot.getSelectedRangeLast();
89
+ selectedRange = _this.hot.getSelectedRangeActive();
90
90
  _this.dragged.push('top');
91
91
  _this.touchStartRange = {
92
92
  width: selectedRange.getWidth(),
@@ -96,7 +96,7 @@ export class MultipleSelectionHandles extends BasePlugin {
96
96
  event.preventDefault();
97
97
  return false;
98
98
  } else if (hasClass(event.target, 'bottomSelectionHandle-HitArea')) {
99
- selectedRange = _this.hot.getSelectedRangeLast();
99
+ selectedRange = _this.hot.getSelectedRangeActive();
100
100
  _this.dragged.push('bottom');
101
101
  _this.touchStartRange = {
102
102
  width: selectedRange.getWidth(),
@@ -142,7 +142,7 @@ export class MultipleSelectionHandles extends BasePlugin {
142
142
  if (targetCoords.col === -1) {
143
143
  targetCoords.col = 0;
144
144
  }
145
- selectedRange = _this.hot.getSelectedRangeLast();
145
+ selectedRange = _this.hot.getSelectedRangeActive();
146
146
  rangeWidth = selectedRange.getWidth();
147
147
  rangeHeight = selectedRange.getHeight();
148
148
  rangeDirection = selectedRange.getDirection();
@@ -103,13 +103,21 @@ var _hidingIndexMapObserver = /*#__PURE__*/new WeakMap();
103
103
  var _focusInitialCoords = /*#__PURE__*/new WeakMap();
104
104
  var _isColumnsSelectionInProgress = /*#__PURE__*/new WeakMap();
105
105
  var _recentlyHighlightCoords = /*#__PURE__*/new WeakMap();
106
+ var _updateFocusHighlightPosition = /*#__PURE__*/new WeakMap();
106
107
  var _NestedHeaders_brand = /*#__PURE__*/new WeakSet();
107
108
  class NestedHeaders extends _base.BasePlugin {
108
109
  constructor() {
109
110
  super(...arguments);
110
111
  /**
111
- * Updates the selection focus highlight position to point to the nested header root element (TH)
112
- * even when the logical coordinates point in-between the header.
112
+ * Allows to control to which column index the viewport will be scrolled. To ensure that the viewport
113
+ * is scrolled to the correct column for the nested header the most left and the most right visual column
114
+ * indexes are used.
115
+ *
116
+ * @param {number} visualColumn A visual column index to which the viewport will be scrolled.
117
+ * @param {{ value: 'auto' | 'start' | 'end' }} snapping If `'start'`, viewport is scrolled to show
118
+ * the cell on the left of the table. If `'end'`, viewport is scrolled to show the cell on the right of
119
+ * the table. When `'auto'`, the viewport is scrolled only when the column is outside of the viewport.
120
+ * @returns {number}
113
121
  */
114
122
  _classPrivateMethodInitSpec(this, _NestedHeaders_brand);
115
123
  /**
@@ -160,6 +168,34 @@ class NestedHeaders extends _base.BasePlugin {
160
168
  * @type {boolean}
161
169
  */
162
170
  _defineProperty(this, "detectedOverlappedHeaders", false);
171
+ /**
172
+ * Updates the selection focus highlight position to point to the nested header root element (TH)
173
+ * even when the logical coordinates point in-between the header.
174
+ *
175
+ * The method uses arrow function to keep the reference to the class method. Necessary for
176
+ * the `removeLocalHook` method of the row and column index mapper.
177
+ */
178
+ _classPrivateFieldInitSpec(this, _updateFocusHighlightPosition, () => {
179
+ var _this$hot;
180
+ const selection = (_this$hot = this.hot) === null || _this$hot === void 0 ? void 0 : _this$hot.getSelectedRangeActive();
181
+ if (!selection) {
182
+ return;
183
+ }
184
+ const {
185
+ highlight
186
+ } = selection;
187
+ const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
188
+ if (isNestedHeadersRange) {
189
+ const columnIndex = _classPrivateFieldGet(_stateManager, this).findLeftMostColumnIndex(highlight.row, highlight.col);
190
+ const focusHighlight = this.hot.selection.highlight.getFocus();
191
+
192
+ // Correct the highlight/focus selection to highlight the correct TH element
193
+ focusHighlight.visualCellRange.highlight.col = columnIndex;
194
+ focusHighlight.visualCellRange.from.col = columnIndex;
195
+ focusHighlight.visualCellRange.to.col = columnIndex;
196
+ focusHighlight.commit();
197
+ }
198
+ });
163
199
  }
164
200
  static get PLUGIN_KEY() {
165
201
  return PLUGIN_KEY;
@@ -234,8 +270,8 @@ class NestedHeaders extends _base.BasePlugin {
234
270
  }
235
271
  return _assertClassBrand(_NestedHeaders_brand, _this, _onModifyTransformStart).call(_this, ...args);
236
272
  });
237
- this.addHook('afterSelection', () => _assertClassBrand(_NestedHeaders_brand, this, _updateFocusHighlightPosition).call(this));
238
- this.addHook('afterSelectionFocusSet', () => _assertClassBrand(_NestedHeaders_brand, this, _updateFocusHighlightPosition).call(this));
273
+ this.addHook('afterSelection', () => _classPrivateFieldGet(_updateFocusHighlightPosition, this).call(this));
274
+ this.addHook('afterSelectionFocusSet', () => _classPrivateFieldGet(_updateFocusHighlightPosition, this).call(this));
239
275
  this.addHook('beforeViewportScrollHorizontally', function () {
240
276
  for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
241
277
  args[_key8] = arguments[_key8];
@@ -285,8 +321,8 @@ class NestedHeaders extends _base.BasePlugin {
285
321
  }
286
322
  return _assertClassBrand(_NestedHeaders_brand, _this, _onModifyFocusedElement).call(_this, ...args);
287
323
  });
288
- this.hot.columnIndexMapper.addLocalHook('cacheUpdated', () => _assertClassBrand(_NestedHeaders_brand, this, _updateFocusHighlightPosition).call(this));
289
- this.hot.rowIndexMapper.addLocalHook('cacheUpdated', () => _assertClassBrand(_NestedHeaders_brand, this, _updateFocusHighlightPosition).call(this));
324
+ this.hot.columnIndexMapper.addLocalHook('cacheUpdated', _classPrivateFieldGet(_updateFocusHighlightPosition, this));
325
+ this.hot.rowIndexMapper.addLocalHook('cacheUpdated', _classPrivateFieldGet(_updateFocusHighlightPosition, this));
290
326
  super.enablePlugin();
291
327
  this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.
292
328
  }
@@ -346,6 +382,8 @@ class NestedHeaders extends _base.BasePlugin {
346
382
  * Disables the plugin functionality for this Handsontable instance.
347
383
  */
348
384
  disablePlugin() {
385
+ this.hot.rowIndexMapper.removeLocalHook('cacheUpdated', _classPrivateFieldGet(_updateFocusHighlightPosition, this));
386
+ this.hot.columnIndexMapper.removeLocalHook('cacheUpdated', _classPrivateFieldGet(_updateFocusHighlightPosition, this));
349
387
  this.clearColspans();
350
388
  _classPrivateFieldGet(_stateManager, this).clear();
351
389
  _classPrivateFieldGet(_hidingIndexMapObserver, this).unsubscribe();
@@ -543,41 +581,9 @@ class NestedHeaders extends _base.BasePlugin {
543
581
  }
544
582
  }
545
583
  exports.NestedHeaders = NestedHeaders;
546
- function _updateFocusHighlightPosition() {
547
- var _this$hot;
548
- const selection = (_this$hot = this.hot) === null || _this$hot === void 0 ? void 0 : _this$hot.getSelectedRangeLast();
549
- if (!selection) {
550
- return;
551
- }
552
- const {
553
- highlight
554
- } = selection;
555
- const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
556
- if (isNestedHeadersRange) {
557
- const columnIndex = _classPrivateFieldGet(_stateManager, this).findLeftMostColumnIndex(highlight.row, highlight.col);
558
- const focusHighlight = this.hot.selection.highlight.getFocus();
559
-
560
- // Correct the highlight/focus selection to highlight the correct TH element
561
- focusHighlight.visualCellRange.highlight.col = columnIndex;
562
- focusHighlight.visualCellRange.from.col = columnIndex;
563
- focusHighlight.visualCellRange.to.col = columnIndex;
564
- focusHighlight.commit();
565
- }
566
- }
567
- /**
568
- * Allows to control to which column index the viewport will be scrolled. To ensure that the viewport
569
- * is scrolled to the correct column for the nested header the most left and the most right visual column
570
- * indexes are used.
571
- *
572
- * @param {number} visualColumn A visual column index to which the viewport will be scrolled.
573
- * @param {{ value: 'auto' | 'start' | 'end' }} snapping If `'start'`, viewport is scrolled to show
574
- * the cell on the left of the table. If `'end'`, viewport is scrolled to show the cell on the right of
575
- * the table. When `'auto'`, the viewport is scrolled only when the column is outside of the viewport.
576
- * @returns {number}
577
- */
578
584
  function _onBeforeViewportScrollHorizontally(visualColumn, snapping) {
579
585
  var _classPrivateFieldGet4;
580
- const selection = this.hot.getSelectedRangeLast();
586
+ const selection = this.hot.getSelectedRangeActive();
581
587
  if (!selection) {
582
588
  return visualColumn;
583
589
  }
@@ -793,7 +799,7 @@ function _onBeforeOnCellMouseOver(event, coords, TD, controller) {
793
799
  columnIndex,
794
800
  origColspan
795
801
  } = headerNodeData;
796
- const selectedRange = this.hot.getSelectedRangeLast();
802
+ const selectedRange = this.hot.getSelectedRangeActive();
797
803
  const topStartCoords = selectedRange.getTopStartCorner();
798
804
  const bottomEndCoords = selectedRange.getBottomEndCorner();
799
805
  const {
@@ -854,7 +860,7 @@ function _onBeforeSelectionHighlightSet() {
854
860
  function _onModifyTransformStart(delta) {
855
861
  const {
856
862
  highlight
857
- } = this.hot.getSelectedRangeLast();
863
+ } = this.hot.getSelectedRangeActive();
858
864
  const nextCoords = this.hot._createCellCoords(highlight.row + delta.row, highlight.col + delta.col);
859
865
  const isNestedHeadersRange = nextCoords.isHeader() && nextCoords.col >= 0;
860
866
  if (!isNestedHeadersRange) {
@@ -99,13 +99,21 @@ var _hidingIndexMapObserver = /*#__PURE__*/new WeakMap();
99
99
  var _focusInitialCoords = /*#__PURE__*/new WeakMap();
100
100
  var _isColumnsSelectionInProgress = /*#__PURE__*/new WeakMap();
101
101
  var _recentlyHighlightCoords = /*#__PURE__*/new WeakMap();
102
+ var _updateFocusHighlightPosition = /*#__PURE__*/new WeakMap();
102
103
  var _NestedHeaders_brand = /*#__PURE__*/new WeakSet();
103
104
  export class NestedHeaders extends BasePlugin {
104
105
  constructor() {
105
106
  super(...arguments);
106
107
  /**
107
- * Updates the selection focus highlight position to point to the nested header root element (TH)
108
- * even when the logical coordinates point in-between the header.
108
+ * Allows to control to which column index the viewport will be scrolled. To ensure that the viewport
109
+ * is scrolled to the correct column for the nested header the most left and the most right visual column
110
+ * indexes are used.
111
+ *
112
+ * @param {number} visualColumn A visual column index to which the viewport will be scrolled.
113
+ * @param {{ value: 'auto' | 'start' | 'end' }} snapping If `'start'`, viewport is scrolled to show
114
+ * the cell on the left of the table. If `'end'`, viewport is scrolled to show the cell on the right of
115
+ * the table. When `'auto'`, the viewport is scrolled only when the column is outside of the viewport.
116
+ * @returns {number}
109
117
  */
110
118
  _classPrivateMethodInitSpec(this, _NestedHeaders_brand);
111
119
  /**
@@ -156,6 +164,34 @@ export class NestedHeaders extends BasePlugin {
156
164
  * @type {boolean}
157
165
  */
158
166
  _defineProperty(this, "detectedOverlappedHeaders", false);
167
+ /**
168
+ * Updates the selection focus highlight position to point to the nested header root element (TH)
169
+ * even when the logical coordinates point in-between the header.
170
+ *
171
+ * The method uses arrow function to keep the reference to the class method. Necessary for
172
+ * the `removeLocalHook` method of the row and column index mapper.
173
+ */
174
+ _classPrivateFieldInitSpec(this, _updateFocusHighlightPosition, () => {
175
+ var _this$hot;
176
+ const selection = (_this$hot = this.hot) === null || _this$hot === void 0 ? void 0 : _this$hot.getSelectedRangeActive();
177
+ if (!selection) {
178
+ return;
179
+ }
180
+ const {
181
+ highlight
182
+ } = selection;
183
+ const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
184
+ if (isNestedHeadersRange) {
185
+ const columnIndex = _classPrivateFieldGet(_stateManager, this).findLeftMostColumnIndex(highlight.row, highlight.col);
186
+ const focusHighlight = this.hot.selection.highlight.getFocus();
187
+
188
+ // Correct the highlight/focus selection to highlight the correct TH element
189
+ focusHighlight.visualCellRange.highlight.col = columnIndex;
190
+ focusHighlight.visualCellRange.from.col = columnIndex;
191
+ focusHighlight.visualCellRange.to.col = columnIndex;
192
+ focusHighlight.commit();
193
+ }
194
+ });
159
195
  }
160
196
  static get PLUGIN_KEY() {
161
197
  return PLUGIN_KEY;
@@ -230,8 +266,8 @@ export class NestedHeaders extends BasePlugin {
230
266
  }
231
267
  return _assertClassBrand(_NestedHeaders_brand, _this, _onModifyTransformStart).call(_this, ...args);
232
268
  });
233
- this.addHook('afterSelection', () => _assertClassBrand(_NestedHeaders_brand, this, _updateFocusHighlightPosition).call(this));
234
- this.addHook('afterSelectionFocusSet', () => _assertClassBrand(_NestedHeaders_brand, this, _updateFocusHighlightPosition).call(this));
269
+ this.addHook('afterSelection', () => _classPrivateFieldGet(_updateFocusHighlightPosition, this).call(this));
270
+ this.addHook('afterSelectionFocusSet', () => _classPrivateFieldGet(_updateFocusHighlightPosition, this).call(this));
235
271
  this.addHook('beforeViewportScrollHorizontally', function () {
236
272
  for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
237
273
  args[_key8] = arguments[_key8];
@@ -281,8 +317,8 @@ export class NestedHeaders extends BasePlugin {
281
317
  }
282
318
  return _assertClassBrand(_NestedHeaders_brand, _this, _onModifyFocusedElement).call(_this, ...args);
283
319
  });
284
- this.hot.columnIndexMapper.addLocalHook('cacheUpdated', () => _assertClassBrand(_NestedHeaders_brand, this, _updateFocusHighlightPosition).call(this));
285
- this.hot.rowIndexMapper.addLocalHook('cacheUpdated', () => _assertClassBrand(_NestedHeaders_brand, this, _updateFocusHighlightPosition).call(this));
320
+ this.hot.columnIndexMapper.addLocalHook('cacheUpdated', _classPrivateFieldGet(_updateFocusHighlightPosition, this));
321
+ this.hot.rowIndexMapper.addLocalHook('cacheUpdated', _classPrivateFieldGet(_updateFocusHighlightPosition, this));
286
322
  super.enablePlugin();
287
323
  this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.
288
324
  }
@@ -342,6 +378,8 @@ export class NestedHeaders extends BasePlugin {
342
378
  * Disables the plugin functionality for this Handsontable instance.
343
379
  */
344
380
  disablePlugin() {
381
+ this.hot.rowIndexMapper.removeLocalHook('cacheUpdated', _classPrivateFieldGet(_updateFocusHighlightPosition, this));
382
+ this.hot.columnIndexMapper.removeLocalHook('cacheUpdated', _classPrivateFieldGet(_updateFocusHighlightPosition, this));
345
383
  this.clearColspans();
346
384
  _classPrivateFieldGet(_stateManager, this).clear();
347
385
  _classPrivateFieldGet(_hidingIndexMapObserver, this).unsubscribe();
@@ -538,41 +576,9 @@ export class NestedHeaders extends BasePlugin {
538
576
  return _classPrivateFieldGet(_stateManager, this).getHeaderTreeNodeData(coords.row, coords.col);
539
577
  }
540
578
  }
541
- function _updateFocusHighlightPosition() {
542
- var _this$hot;
543
- const selection = (_this$hot = this.hot) === null || _this$hot === void 0 ? void 0 : _this$hot.getSelectedRangeLast();
544
- if (!selection) {
545
- return;
546
- }
547
- const {
548
- highlight
549
- } = selection;
550
- const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
551
- if (isNestedHeadersRange) {
552
- const columnIndex = _classPrivateFieldGet(_stateManager, this).findLeftMostColumnIndex(highlight.row, highlight.col);
553
- const focusHighlight = this.hot.selection.highlight.getFocus();
554
-
555
- // Correct the highlight/focus selection to highlight the correct TH element
556
- focusHighlight.visualCellRange.highlight.col = columnIndex;
557
- focusHighlight.visualCellRange.from.col = columnIndex;
558
- focusHighlight.visualCellRange.to.col = columnIndex;
559
- focusHighlight.commit();
560
- }
561
- }
562
- /**
563
- * Allows to control to which column index the viewport will be scrolled. To ensure that the viewport
564
- * is scrolled to the correct column for the nested header the most left and the most right visual column
565
- * indexes are used.
566
- *
567
- * @param {number} visualColumn A visual column index to which the viewport will be scrolled.
568
- * @param {{ value: 'auto' | 'start' | 'end' }} snapping If `'start'`, viewport is scrolled to show
569
- * the cell on the left of the table. If `'end'`, viewport is scrolled to show the cell on the right of
570
- * the table. When `'auto'`, the viewport is scrolled only when the column is outside of the viewport.
571
- * @returns {number}
572
- */
573
579
  function _onBeforeViewportScrollHorizontally(visualColumn, snapping) {
574
580
  var _classPrivateFieldGet4;
575
- const selection = this.hot.getSelectedRangeLast();
581
+ const selection = this.hot.getSelectedRangeActive();
576
582
  if (!selection) {
577
583
  return visualColumn;
578
584
  }
@@ -788,7 +794,7 @@ function _onBeforeOnCellMouseOver(event, coords, TD, controller) {
788
794
  columnIndex,
789
795
  origColspan
790
796
  } = headerNodeData;
791
- const selectedRange = this.hot.getSelectedRangeLast();
797
+ const selectedRange = this.hot.getSelectedRangeActive();
792
798
  const topStartCoords = selectedRange.getTopStartCorner();
793
799
  const bottomEndCoords = selectedRange.getBottomEndCorner();
794
800
  const {
@@ -849,7 +855,7 @@ function _onBeforeSelectionHighlightSet() {
849
855
  function _onModifyTransformStart(delta) {
850
856
  const {
851
857
  highlight
852
- } = this.hot.getSelectedRangeLast();
858
+ } = this.hot.getSelectedRangeActive();
853
859
  const nextCoords = this.hot._createCellCoords(highlight.row + delta.row, highlight.col + delta.col);
854
860
  const isNestedHeadersRange = nextCoords.isHeader() && nextCoords.col >= 0;
855
861
  if (!isNestedHeadersRange) {
@@ -278,7 +278,7 @@ class NestedRows extends _base.BasePlugin {
278
278
  callback: () => {
279
279
  const {
280
280
  highlight
281
- } = this.hot.getSelectedRangeLast();
281
+ } = this.hot.getSelectedRangeActive();
282
282
  const row = this.collapsingUI.translateTrimmedRow(highlight.row);
283
283
  if (this.collapsingUI.areChildrenCollapsed(row)) {
284
284
  this.collapsingUI.expandChildren(row);
@@ -291,8 +291,8 @@ class NestedRows extends _base.BasePlugin {
291
291
  },
292
292
  runOnlyIf: () => {
293
293
  var _this$hot$getSelected, _this$hot$getSelected2;
294
- const highlight = (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight;
295
- 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.col === -1 && highlight.row >= 0;
294
+ const highlight = (_this$hot$getSelected = this.hot.getSelectedRangeActive()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight;
295
+ 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.col === -1 && highlight.row >= 0;
296
296
  },
297
297
  group: SHORTCUTS_GROUP,
298
298
  relativeToGroup: _shortcutContexts.EDITOR_EDIT_GROUP,
@@ -274,7 +274,7 @@ export class NestedRows extends BasePlugin {
274
274
  callback: () => {
275
275
  const {
276
276
  highlight
277
- } = this.hot.getSelectedRangeLast();
277
+ } = this.hot.getSelectedRangeActive();
278
278
  const row = this.collapsingUI.translateTrimmedRow(highlight.row);
279
279
  if (this.collapsingUI.areChildrenCollapsed(row)) {
280
280
  this.collapsingUI.expandChildren(row);
@@ -287,8 +287,8 @@ export class NestedRows extends BasePlugin {
287
287
  },
288
288
  runOnlyIf: () => {
289
289
  var _this$hot$getSelected, _this$hot$getSelected2;
290
- const highlight = (_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight;
291
- 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.col === -1 && highlight.row >= 0;
290
+ const highlight = (_this$hot$getSelected = this.hot.getSelectedRangeActive()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight;
291
+ 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.col === -1 && highlight.row >= 0;
292
292
  },
293
293
  group: SHORTCUTS_GROUP,
294
294
  relativeToGroup: SHORTCUTS_GROUP_EDITOR,
@@ -460,10 +460,9 @@ class CollapsingUI extends _base.default {
460
460
  * @private
461
461
  */
462
462
  renderAndAdjust() {
463
- this.hot.render();
464
-
465
463
  // Dirty workaround to prevent scroll height not adjusting to the table height. Needs refactoring in the future.
466
464
  this.hot.view.adjustElementsSize();
465
+ this.hot.render();
467
466
  }
468
467
  }
469
468
  var _default = exports.default = CollapsingUI;
@@ -456,10 +456,9 @@ class CollapsingUI extends BaseUI {
456
456
  * @private
457
457
  */
458
458
  renderAndAdjust() {
459
- this.hot.render();
460
-
461
459
  // Dirty workaround to prevent scroll height not adjusting to the table height. Needs refactoring in the future.
462
460
  this.hot.view.adjustElementsSize();
461
+ this.hot.render();
463
462
  }
464
463
  }
465
464
  export default CollapsingUI;
@@ -58,12 +58,12 @@ class ContextMenuUI extends _base.default {
58
58
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD);
59
59
  },
60
60
  callback: () => {
61
- const translatedRowIndex = this.dataManager.translateTrimmedRow(this.hot.getSelectedLast()[0]);
61
+ const translatedRowIndex = this.dataManager.translateTrimmedRow(this.hot.getSelectedActive()[0]);
62
62
  const parent = this.dataManager.getDataObject(translatedRowIndex);
63
63
  this.dataManager.addChild(parent);
64
64
  },
65
65
  disabled: () => {
66
- const selected = this.hot.getSelectedLast();
66
+ const selected = this.hot.getSelectedActive();
67
67
  return !selected || selected[0] < 0 || this.hot.selection.isSelectedByColumnHeader() || this.hot.countRows() >= this.hot.getSettings().maxRows;
68
68
  }
69
69
  }, {
@@ -72,10 +72,10 @@ class ContextMenuUI extends _base.default {
72
72
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD);
73
73
  },
74
74
  callback: () => {
75
- this.dataManager.detachFromParent(this.hot.getSelectedLast());
75
+ this.dataManager.detachFromParent(this.hot.getSelectedActive());
76
76
  },
77
77
  disabled: () => {
78
- const selected = this.hot.getSelectedLast();
78
+ const selected = this.hot.getSelectedActive();
79
79
  const translatedRowIndex = this.dataManager.translateTrimmedRow(selected[0]);
80
80
  const parent = this.dataManager.getRowParent(translatedRowIndex);
81
81
  return !parent || !selected || selected[0] < 0 || this.hot.selection.isSelectedByColumnHeader() || this.hot.countRows() >= this.hot.getSettings().maxRows;
@@ -53,12 +53,12 @@ class ContextMenuUI extends BaseUI {
53
53
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD);
54
54
  },
55
55
  callback: () => {
56
- const translatedRowIndex = this.dataManager.translateTrimmedRow(this.hot.getSelectedLast()[0]);
56
+ const translatedRowIndex = this.dataManager.translateTrimmedRow(this.hot.getSelectedActive()[0]);
57
57
  const parent = this.dataManager.getDataObject(translatedRowIndex);
58
58
  this.dataManager.addChild(parent);
59
59
  },
60
60
  disabled: () => {
61
- const selected = this.hot.getSelectedLast();
61
+ const selected = this.hot.getSelectedActive();
62
62
  return !selected || selected[0] < 0 || this.hot.selection.isSelectedByColumnHeader() || this.hot.countRows() >= this.hot.getSettings().maxRows;
63
63
  }
64
64
  }, {
@@ -67,10 +67,10 @@ class ContextMenuUI extends BaseUI {
67
67
  return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD);
68
68
  },
69
69
  callback: () => {
70
- this.dataManager.detachFromParent(this.hot.getSelectedLast());
70
+ this.dataManager.detachFromParent(this.hot.getSelectedActive());
71
71
  },
72
72
  disabled: () => {
73
- const selected = this.hot.getSelectedLast();
73
+ const selected = this.hot.getSelectedActive();
74
74
  const translatedRowIndex = this.dataManager.translateTrimmedRow(selected[0]);
75
75
  const parent = this.dataManager.getRowParent(translatedRowIndex);
76
76
  return !parent || !selected || selected[0] < 0 || this.hot.selection.isSelectedByColumnHeader() || this.hot.countRows() >= this.hot.getSettings().maxRows;
@@ -68,8 +68,11 @@ class HeadersUI extends _base.default {
68
68
  */
69
69
  appendLevelIndicators(row, TH) {
70
70
  const rowIndex = this.hot.toPhysicalRow(row);
71
- const rowLevel = this.dataManager.getRowLevel(rowIndex);
72
71
  const rowObject = this.dataManager.getDataObject(rowIndex);
72
+ if (!rowObject) {
73
+ return;
74
+ }
75
+ const rowLevel = this.dataManager.getRowLevel(rowIndex);
73
76
  const innerDiv = TH.getElementsByTagName('DIV')[0];
74
77
  const innerSpan = innerDiv.querySelector('span.rowHeader');
75
78
  const previousIndicators = innerDiv.querySelectorAll('[class^="ht_nesting"]');
@@ -64,8 +64,11 @@ class HeadersUI extends BaseUI {
64
64
  */
65
65
  appendLevelIndicators(row, TH) {
66
66
  const rowIndex = this.hot.toPhysicalRow(row);
67
- const rowLevel = this.dataManager.getRowLevel(rowIndex);
68
67
  const rowObject = this.dataManager.getDataObject(rowIndex);
68
+ if (!rowObject) {
69
+ return;
70
+ }
71
+ const rowLevel = this.dataManager.getRowLevel(rowIndex);
69
72
  const innerDiv = TH.getElementsByTagName('DIV')[0];
70
73
  const innerSpan = innerDiv.querySelector('span.rowHeader');
71
74
  const previousIndicators = innerDiv.querySelectorAll('[class^="ht_nesting"]');
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.createPaginationFocusController = createPaginationFocusController;
5
+ var _paginator = require("../../utils/paginator");
6
+ /**
7
+ * Creates a pagination focus controller instance.
8
+ *
9
+ * @private
10
+ * @param {object} options The options for the pagination focus controller.
11
+ * @param {HTMLElement[]} options.focusableElements The focusable elements.
12
+ * @returns {PaginationController} The pagination controller instance.
13
+ */
14
+ function createPaginationFocusController(_ref) {
15
+ let {
16
+ focusableElements
17
+ } = _ref;
18
+ const navigator = (0, _paginator.createPaginator)({
19
+ initialPage: 0,
20
+ size: () => focusableElements().length,
21
+ onItemSelect: currentIndex => {
22
+ const elements = focusableElements();
23
+ elements[currentIndex].focus();
24
+ }
25
+ });
26
+ return navigator;
27
+ }
@@ -0,0 +1,23 @@
1
+ import { createPaginator } from "../../utils/paginator.mjs";
2
+ /**
3
+ * Creates a pagination focus controller instance.
4
+ *
5
+ * @private
6
+ * @param {object} options The options for the pagination focus controller.
7
+ * @param {HTMLElement[]} options.focusableElements The focusable elements.
8
+ * @returns {PaginationController} The pagination controller instance.
9
+ */
10
+ export function createPaginationFocusController(_ref) {
11
+ let {
12
+ focusableElements
13
+ } = _ref;
14
+ const navigator = createPaginator({
15
+ initialPage: 0,
16
+ size: () => focusableElements().length,
17
+ onItemSelect: currentIndex => {
18
+ const elements = focusableElements();
19
+ elements[currentIndex].focus();
20
+ }
21
+ });
22
+ return navigator;
23
+ }
@@ -0,0 +1 @@
1
+ export * from './pagination';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ var _pagination = require("./pagination");
5
+ exports.PLUGIN_KEY = _pagination.PLUGIN_KEY;
6
+ exports.PLUGIN_PRIORITY = _pagination.PLUGIN_PRIORITY;
7
+ exports.Pagination = _pagination.Pagination;
@@ -0,0 +1 @@
1
+ export { PLUGIN_KEY, PLUGIN_PRIORITY, Pagination } from "./pagination.mjs";
@@ -0,0 +1,52 @@
1
+ import Core from '../../core';
2
+ import { BasePlugin } from '../base';
3
+
4
+ type PageSizeOption = number | 'auto';
5
+
6
+ export interface DetailedSettings {
7
+ pageSize?: PageSizeOption;
8
+ pageSizeList?: Array<PageSizeOption>;
9
+ initialPage?: number;
10
+ showPageSize?: boolean;
11
+ showCounter?: boolean;
12
+ showNavigation?: boolean;
13
+ uiContainer?: HTMLElement;
14
+ }
15
+
16
+ export type Settings = boolean | DetailedSettings;
17
+
18
+ type PaginationData = {
19
+ currentPage: number;
20
+ totalPages: number;
21
+ pageSize: number;
22
+ pageSizeList: Array<PageSizeOption>;
23
+ autoPageSize: boolean;
24
+ numberOfRenderedRows: number;
25
+ firstVisibleRowIndex: number;
26
+ lastVisibleRowIndex: number;
27
+ }
28
+
29
+ export class Pagination extends BasePlugin {
30
+ constructor(hotInstance: Core);
31
+ isEnabled(): boolean;
32
+
33
+ getPaginationData(): PaginationData;
34
+ setPage(pageNumber: number): void;
35
+ resetPage(): void;
36
+ setPageSize(pageSize: PageSizeOption): void;
37
+ resetPageSize(): void;
38
+ resetPagination(): void;
39
+ nextPage(): void;
40
+ prevPage(): void;
41
+ firstPage(): void;
42
+ lastPage(): void;
43
+ hasPreviousPage(): boolean;
44
+ hasNextPage(): boolean;
45
+ getCurrentPageData(): any[];
46
+ showPageSizeSection(): void;
47
+ hidePageSizeSection(): void;
48
+ showPageCounterSection(): void;
49
+ hidePageCounterSection(): void;
50
+ showPageNavigationSection(): void;
51
+ hidePageNavigationSection(): void;
52
+ }