handsontable 13.1.0 → 14.0.0-next-e8f87aa-20231030

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 (691) hide show
  1. package/3rdparty/walkontable/src/calculator/constants.js +3 -6
  2. package/3rdparty/walkontable/src/calculator/viewportColumns.js +1 -2
  3. package/3rdparty/walkontable/src/calculator/viewportRows.js +1 -2
  4. package/3rdparty/walkontable/src/cell/coords.d.ts +8 -1
  5. package/3rdparty/walkontable/src/cell/coords.js +81 -13
  6. package/3rdparty/walkontable/src/cell/coords.mjs +80 -11
  7. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  8. package/3rdparty/walkontable/src/cell/range.js +39 -9
  9. package/3rdparty/walkontable/src/cell/range.mjs +38 -7
  10. package/3rdparty/walkontable/src/core/_base.js +9 -3
  11. package/3rdparty/walkontable/src/core/_base.mjs +9 -3
  12. package/3rdparty/walkontable/src/core/clone.js +2 -2
  13. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  14. package/3rdparty/walkontable/src/core/core.js +3 -2
  15. package/3rdparty/walkontable/src/core/core.mjs +3 -2
  16. package/3rdparty/walkontable/src/event.js +13 -12
  17. package/3rdparty/walkontable/src/event.mjs +12 -10
  18. package/3rdparty/walkontable/src/facade/core.js +2 -2
  19. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  20. package/3rdparty/walkontable/src/filter/column.js +1 -2
  21. package/3rdparty/walkontable/src/filter/row.js +1 -2
  22. package/3rdparty/walkontable/src/index.js +12 -4
  23. package/3rdparty/walkontable/src/index.mjs +2 -2
  24. package/3rdparty/walkontable/src/overlay/_base.js +13 -2
  25. package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
  26. package/3rdparty/walkontable/src/overlay/constants.js +7 -14
  27. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
  28. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
  29. package/3rdparty/walkontable/src/overlay/top.js +2 -6
  30. package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
  31. package/3rdparty/walkontable/src/overlays.js +1 -2
  32. package/3rdparty/walkontable/src/renderer/cells.js +10 -0
  33. package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
  34. package/3rdparty/walkontable/src/renderer/columnHeaders.js +13 -0
  35. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +14 -1
  36. package/3rdparty/walkontable/src/renderer/rowHeaders.js +8 -0
  37. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +8 -0
  38. package/3rdparty/walkontable/src/renderer/rows.js +13 -0
  39. package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
  40. package/3rdparty/walkontable/src/renderer/table.js +9 -0
  41. package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
  42. package/3rdparty/walkontable/src/scroll.js +3 -2
  43. package/3rdparty/walkontable/src/scroll.mjs +2 -0
  44. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +8 -14
  45. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  46. package/3rdparty/walkontable/src/selection/border/constants.js +15 -0
  47. package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
  48. package/3rdparty/walkontable/src/selection/constants.js +54 -0
  49. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  50. package/3rdparty/walkontable/src/selection/index.js +26 -0
  51. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  52. package/3rdparty/walkontable/src/selection/manager.js +274 -0
  53. package/3rdparty/walkontable/src/selection/manager.mjs +269 -0
  54. package/3rdparty/walkontable/src/selection/scanner.js +270 -0
  55. package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
  56. package/3rdparty/walkontable/src/selection/selection.js +100 -0
  57. package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
  58. package/3rdparty/walkontable/src/settings.js +13 -4
  59. package/3rdparty/walkontable/src/settings.mjs +13 -4
  60. package/3rdparty/walkontable/src/table/bottom.js +1 -2
  61. package/3rdparty/walkontable/src/table/bottomInlineStartCorner.js +1 -2
  62. package/3rdparty/walkontable/src/table/inlineStart.js +1 -2
  63. package/3rdparty/walkontable/src/table/master.js +3 -6
  64. package/3rdparty/walkontable/src/table/master.mjs +2 -4
  65. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +10 -2
  66. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  67. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +10 -2
  68. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  69. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +10 -2
  70. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  71. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +10 -2
  72. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  73. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +10 -2
  74. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  75. package/3rdparty/walkontable/src/table/top.js +1 -2
  76. package/3rdparty/walkontable/src/table/topInlineStartCorner.js +1 -2
  77. package/3rdparty/walkontable/src/table.js +20 -80
  78. package/3rdparty/walkontable/src/table.mjs +20 -79
  79. package/3rdparty/walkontable/src/utils/orderView/constants.js +3 -6
  80. package/3rdparty/walkontable/src/viewport.js +1 -2
  81. package/CHANGELOG.md +51 -0
  82. package/base.js +3 -4
  83. package/base.mjs +2 -2
  84. package/cellTypes/autocompleteType/autocompleteType.js +3 -5
  85. package/cellTypes/checkboxType/checkboxType.js +3 -5
  86. package/cellTypes/dateType/dateType.d.ts +3 -3
  87. package/cellTypes/dateType/dateType.js +5 -7
  88. package/cellTypes/dateType/dateType.mjs +2 -2
  89. package/cellTypes/dropdownType/dropdownType.js +3 -5
  90. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  91. package/cellTypes/handsontableType/handsontableType.js +5 -7
  92. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  93. package/cellTypes/index.d.ts +3 -0
  94. package/cellTypes/index.js +4 -0
  95. package/cellTypes/index.mjs +3 -1
  96. package/cellTypes/numericType/numericType.js +3 -5
  97. package/cellTypes/passwordType/passwordType.js +3 -5
  98. package/cellTypes/selectType/index.d.ts +1 -0
  99. package/cellTypes/selectType/index.js +6 -0
  100. package/cellTypes/selectType/index.mjs +1 -0
  101. package/cellTypes/selectType/selectType.d.ts +14 -0
  102. package/cellTypes/selectType/selectType.js +11 -0
  103. package/cellTypes/selectType/selectType.mjs +8 -0
  104. package/cellTypes/textType/textType.js +3 -5
  105. package/cellTypes/timeType/timeType.js +3 -5
  106. package/common.d.ts +1 -1
  107. package/core/focusCatcher/focusDetector.js +63 -0
  108. package/core/focusCatcher/focusDetector.mjs +59 -0
  109. package/core/focusCatcher/index.js +148 -0
  110. package/core/focusCatcher/index.mjs +144 -0
  111. package/core/index.js +9 -0
  112. package/core/index.mjs +1 -0
  113. package/core.d.ts +10 -5
  114. package/core.js +327 -359
  115. package/core.mjs +327 -359
  116. package/dataMap/dataMap.js +1 -2
  117. package/dataMap/dataSource.js +1 -2
  118. package/dataMap/metaManager/metaSchema.js +65 -0
  119. package/dataMap/metaManager/metaSchema.mjs +65 -0
  120. package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
  121. package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
  122. package/dataMap/replaceData.js +5 -0
  123. package/dataMap/replaceData.mjs +5 -0
  124. package/dist/handsontable.css +94 -76
  125. package/dist/handsontable.full.css +94 -76
  126. package/dist/handsontable.full.js +23133 -15992
  127. package/dist/handsontable.full.min.css +8 -8
  128. package/dist/handsontable.full.min.js +170 -152
  129. package/dist/handsontable.js +21856 -15085
  130. package/dist/handsontable.min.css +7 -7
  131. package/dist/handsontable.min.js +30 -22
  132. package/dist/languages/all.js +47 -40
  133. package/dist/languages/all.min.js +1 -1
  134. package/dist/languages/ar-AR.js +1 -2
  135. package/dist/languages/cs-CZ.js +1 -2
  136. package/dist/languages/de-CH.js +1 -2
  137. package/dist/languages/de-DE.js +1 -2
  138. package/dist/languages/en-US.js +15 -3
  139. package/dist/languages/en-US.min.js +1 -1
  140. package/dist/languages/es-MX.js +1 -2
  141. package/dist/languages/fr-FR.js +1 -2
  142. package/dist/languages/it-IT.js +1 -2
  143. package/dist/languages/ja-JP.js +1 -2
  144. package/dist/languages/ko-KR.js +1 -2
  145. package/dist/languages/lv-LV.js +1 -2
  146. package/dist/languages/nb-NO.js +1 -2
  147. package/dist/languages/nl-NL.js +1 -2
  148. package/dist/languages/pl-PL.js +15 -3
  149. package/dist/languages/pl-PL.min.js +1 -1
  150. package/dist/languages/pt-BR.js +1 -2
  151. package/dist/languages/ru-RU.js +1 -2
  152. package/dist/languages/sr-SP.js +1 -2
  153. package/dist/languages/zh-CN.js +1 -2
  154. package/dist/languages/zh-TW.js +1 -2
  155. package/editorManager.js +17 -91
  156. package/editorManager.mjs +16 -87
  157. package/editors/autocompleteEditor/autocompleteEditor.js +65 -11
  158. package/editors/autocompleteEditor/autocompleteEditor.mjs +65 -10
  159. package/editors/baseEditor/baseEditor.js +19 -13
  160. package/editors/baseEditor/baseEditor.mjs +16 -7
  161. package/editors/checkboxEditor/checkboxEditor.js +1 -2
  162. package/editors/dateEditor/dateEditor.js +27 -9
  163. package/editors/dateEditor/dateEditor.mjs +27 -8
  164. package/editors/dropdownEditor/dropdownEditor.js +1 -2
  165. package/editors/handsontableEditor/handsontableEditor.js +14 -7
  166. package/editors/handsontableEditor/handsontableEditor.mjs +14 -6
  167. package/editors/numericEditor/numericEditor.js +1 -2
  168. package/editors/passwordEditor/passwordEditor.js +1 -2
  169. package/editors/selectEditor/selectEditor.js +1 -2
  170. package/editors/textEditor/textEditor.js +20 -29
  171. package/editors/textEditor/textEditor.mjs +22 -30
  172. package/editors/timeEditor/timeEditor.js +1 -2
  173. package/eventManager.js +1 -2
  174. package/focusManager.d.ts +12 -0
  175. package/focusManager.js +265 -0
  176. package/focusManager.mjs +261 -0
  177. package/helpers/a11y.js +81 -0
  178. package/helpers/a11y.mjs +39 -0
  179. package/helpers/dom/element.js +224 -12
  180. package/helpers/dom/element.mjs +216 -10
  181. package/helpers/dom/event.d.ts +1 -0
  182. package/helpers/dom/event.js +25 -0
  183. package/helpers/dom/event.mjs +24 -0
  184. package/helpers/mixed.js +2 -2
  185. package/helpers/mixed.mjs +2 -2
  186. package/helpers/number.d.ts +1 -0
  187. package/helpers/number.js +18 -0
  188. package/helpers/number.mjs +17 -0
  189. package/helpers/unicode.js +1 -2
  190. package/i18n/constants.js +97 -160
  191. package/i18n/constants.mjs +17 -1
  192. package/i18n/languages/ar-AR.js +3 -4
  193. package/i18n/languages/cs-CZ.js +3 -4
  194. package/i18n/languages/de-CH.js +3 -4
  195. package/i18n/languages/de-DE.js +3 -4
  196. package/i18n/languages/en-US.js +17 -5
  197. package/i18n/languages/en-US.mjs +14 -1
  198. package/i18n/languages/es-MX.js +3 -4
  199. package/i18n/languages/fr-FR.js +3 -4
  200. package/i18n/languages/it-IT.js +3 -4
  201. package/i18n/languages/ja-JP.js +3 -4
  202. package/i18n/languages/ko-KR.js +3 -4
  203. package/i18n/languages/lv-LV.js +3 -4
  204. package/i18n/languages/nb-NO.js +3 -4
  205. package/i18n/languages/nl-NL.js +3 -4
  206. package/i18n/languages/pl-PL.js +17 -5
  207. package/i18n/languages/pl-PL.mjs +14 -1
  208. package/i18n/languages/pt-BR.js +3 -4
  209. package/i18n/languages/ru-RU.js +3 -4
  210. package/i18n/languages/sr-SP.js +3 -4
  211. package/i18n/languages/zh-CN.js +3 -4
  212. package/i18n/languages/zh-TW.js +3 -4
  213. package/i18n/registry.js +4 -6
  214. package/index.js +3 -4
  215. package/languages/all.js +47 -40
  216. package/languages/ar-AR.js +1 -2
  217. package/languages/cs-CZ.js +1 -2
  218. package/languages/de-CH.js +1 -2
  219. package/languages/de-DE.js +1 -2
  220. package/languages/en-US.js +15 -3
  221. package/languages/en-US.mjs +14 -1
  222. package/languages/es-MX.js +1 -2
  223. package/languages/fr-FR.js +1 -2
  224. package/languages/index.js +47 -40
  225. package/languages/it-IT.js +1 -2
  226. package/languages/ja-JP.js +1 -2
  227. package/languages/ko-KR.js +1 -2
  228. package/languages/lv-LV.js +1 -2
  229. package/languages/nb-NO.js +1 -2
  230. package/languages/nl-NL.js +1 -2
  231. package/languages/pl-PL.js +15 -3
  232. package/languages/pl-PL.mjs +14 -1
  233. package/languages/pt-BR.js +1 -2
  234. package/languages/ru-RU.js +1 -2
  235. package/languages/sr-SP.js +1 -2
  236. package/languages/zh-CN.js +1 -2
  237. package/languages/zh-TW.js +1 -2
  238. package/mixins/hooksRefRegisterer.js +1 -2
  239. package/mixins/localHooks.js +1 -2
  240. package/package.json +119 -96
  241. package/pluginHooks.d.ts +42 -7
  242. package/pluginHooks.js +301 -65
  243. package/pluginHooks.mjs +300 -63
  244. package/plugins/autoColumnSize/autoColumnSize.d.ts +2 -0
  245. package/plugins/autoColumnSize/autoColumnSize.js +2 -4
  246. package/plugins/autoRowSize/autoRowSize.d.ts +2 -0
  247. package/plugins/autoRowSize/autoRowSize.js +15 -10
  248. package/plugins/autoRowSize/autoRowSize.mjs +13 -6
  249. package/plugins/autofill/autofill.js +2 -4
  250. package/plugins/autofill/utils.js +1 -2
  251. package/plugins/base/base.js +1 -2
  252. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +2 -4
  253. package/plugins/bindRowsWithHeaders/maps/looseBindsMap.js +1 -2
  254. package/plugins/bindRowsWithHeaders/maps/strictBindsMap.js +1 -2
  255. package/plugins/collapsibleColumns/collapsibleColumns.js +77 -8
  256. package/plugins/collapsibleColumns/collapsibleColumns.mjs +76 -5
  257. package/plugins/columnSorting/columnSorting.js +71 -6
  258. package/plugins/columnSorting/columnSorting.mjs +70 -3
  259. package/plugins/columnSorting/index.js +3 -1
  260. package/plugins/columnSorting/index.mjs +1 -1
  261. package/plugins/columnSorting/sortFunction/checkbox.js +1 -2
  262. package/plugins/columnSorting/sortFunction/date.js +1 -2
  263. package/plugins/columnSorting/sortFunction/default.js +1 -2
  264. package/plugins/columnSorting/sortFunction/numeric.js +1 -2
  265. package/plugins/columnSorting/sortService/engine.js +3 -6
  266. package/plugins/columnSorting/utils.js +3 -6
  267. package/plugins/columnSummary/columnSummary.js +2 -4
  268. package/plugins/columnSummary/endpoints.js +1 -2
  269. package/plugins/comments/commentEditor.js +2 -2
  270. package/plugins/comments/commentEditor.mjs +1 -0
  271. package/plugins/comments/comments.js +254 -197
  272. package/plugins/comments/comments.mjs +251 -190
  273. package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
  274. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  275. package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
  276. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
  277. package/plugins/comments/contextMenuItem/removeComment.js +38 -0
  278. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  279. package/plugins/comments/displaySwitch.js +1 -2
  280. package/plugins/contextMenu/commandExecutor.js +2 -3
  281. package/plugins/contextMenu/commandExecutor.mjs +2 -3
  282. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  283. package/plugins/contextMenu/contextMenu.js +77 -40
  284. package/plugins/contextMenu/contextMenu.mjs +74 -35
  285. package/plugins/contextMenu/itemsFactory.js +2 -3
  286. package/plugins/contextMenu/itemsFactory.mjs +3 -4
  287. package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
  288. package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
  289. package/plugins/contextMenu/menu/defaultShortcutsList.js +88 -0
  290. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
  291. package/plugins/contextMenu/menu/index.js +9 -0
  292. package/plugins/contextMenu/menu/index.mjs +1 -0
  293. package/plugins/contextMenu/{menu.js → menu/menu.js} +145 -421
  294. package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +146 -422
  295. package/plugins/contextMenu/menu/menuItemRenderer.js +70 -0
  296. package/plugins/contextMenu/menu/menuItemRenderer.mjs +66 -0
  297. package/plugins/contextMenu/menu/navigator.js +27 -0
  298. package/plugins/contextMenu/menu/navigator.mjs +23 -0
  299. package/plugins/contextMenu/menu/positioner.js +213 -0
  300. package/plugins/contextMenu/menu/positioner.mjs +209 -0
  301. package/plugins/contextMenu/menu/shortcuts.js +114 -0
  302. package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
  303. package/plugins/contextMenu/menu/utils.js +177 -0
  304. package/plugins/contextMenu/menu/utils.mjs +163 -0
  305. package/plugins/contextMenu/predefinedItems/alignment.js +10 -4
  306. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  307. package/plugins/contextMenu/predefinedItems/clearColumn.js +8 -7
  308. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  309. package/plugins/contextMenu/predefinedItems/columnLeft.js +8 -7
  310. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  311. package/plugins/contextMenu/predefinedItems/columnRight.js +8 -7
  312. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  313. package/plugins/contextMenu/predefinedItems/index.js +75 -0
  314. package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
  315. package/plugins/contextMenu/predefinedItems/noItems.js +1 -2
  316. package/plugins/contextMenu/predefinedItems/readOnly.js +10 -4
  317. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  318. package/plugins/contextMenu/predefinedItems/redo.js +3 -4
  319. package/plugins/contextMenu/predefinedItems/removeColumn.js +10 -9
  320. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  321. package/plugins/contextMenu/predefinedItems/removeRow.js +10 -9
  322. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  323. package/plugins/contextMenu/predefinedItems/rowAbove.js +8 -7
  324. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  325. package/plugins/contextMenu/predefinedItems/rowBelow.js +8 -7
  326. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  327. package/plugins/contextMenu/predefinedItems/separator.js +1 -2
  328. package/plugins/contextMenu/predefinedItems/undo.js +3 -4
  329. package/plugins/contextMenu/utils.js +35 -151
  330. package/plugins/contextMenu/utils.mjs +35 -144
  331. package/plugins/copyPaste/clipboardData/clipboardData.js +516 -0
  332. package/plugins/copyPaste/clipboardData/clipboardData.mjs +512 -0
  333. package/plugins/copyPaste/clipboardData/copyClipboardData.js +69 -0
  334. package/plugins/copyPaste/clipboardData/copyClipboardData.mjs +65 -0
  335. package/plugins/copyPaste/clipboardData/index.js +9 -0
  336. package/plugins/copyPaste/clipboardData/index.mjs +4 -0
  337. package/plugins/copyPaste/clipboardData/pasteClipboardData.js +81 -0
  338. package/plugins/copyPaste/clipboardData/pasteClipboardData.mjs +77 -0
  339. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  340. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  341. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  342. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  343. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  344. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  345. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  346. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  347. package/plugins/copyPaste/contextMenuItem/cut.js +9 -2
  348. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  349. package/plugins/copyPaste/copyPaste.js +160 -167
  350. package/plugins/copyPaste/copyPaste.mjs +161 -166
  351. package/plugins/customBorders/contextMenuItem/bottom.js +2 -2
  352. package/plugins/customBorders/contextMenuItem/left.js +2 -2
  353. package/plugins/customBorders/contextMenuItem/noBorders.js +2 -2
  354. package/plugins/customBorders/contextMenuItem/right.js +2 -2
  355. package/plugins/customBorders/contextMenuItem/top.js +2 -2
  356. package/plugins/customBorders/customBorders.js +27 -26
  357. package/plugins/customBorders/customBorders.mjs +24 -21
  358. package/plugins/dragToScroll/dragToScroll.js +2 -4
  359. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  360. package/plugins/dropdownMenu/dropdownMenu.js +130 -44
  361. package/plugins/dropdownMenu/dropdownMenu.mjs +127 -39
  362. package/plugins/exportFile/dataProvider.js +1 -2
  363. package/plugins/exportFile/exportFile.js +4 -6
  364. package/plugins/exportFile/typeFactory.js +5 -8
  365. package/plugins/exportFile/types/_base.js +1 -2
  366. package/plugins/exportFile/types/csv.js +1 -2
  367. package/plugins/filters/component/_base.js +23 -8
  368. package/plugins/filters/component/_base.mjs +23 -8
  369. package/plugins/filters/component/actionBar.js +31 -29
  370. package/plugins/filters/component/actionBar.mjs +26 -23
  371. package/plugins/filters/component/condition.js +48 -61
  372. package/plugins/filters/component/condition.mjs +40 -52
  373. package/plugins/filters/component/operators.js +21 -22
  374. package/plugins/filters/component/operators.mjs +18 -18
  375. package/plugins/filters/component/value.js +37 -28
  376. package/plugins/filters/component/value.mjs +32 -22
  377. package/plugins/filters/condition/beginsWith.js +3 -4
  378. package/plugins/filters/condition/between.js +3 -4
  379. package/plugins/filters/condition/byValue.js +1 -2
  380. package/plugins/filters/condition/contains.js +3 -4
  381. package/plugins/filters/condition/date/after.js +3 -4
  382. package/plugins/filters/condition/date/before.js +3 -4
  383. package/plugins/filters/condition/date/today.js +3 -4
  384. package/plugins/filters/condition/date/tomorrow.js +3 -4
  385. package/plugins/filters/condition/date/yesterday.js +3 -4
  386. package/plugins/filters/condition/empty.js +3 -4
  387. package/plugins/filters/condition/endsWith.js +3 -4
  388. package/plugins/filters/condition/equal.js +3 -4
  389. package/plugins/filters/condition/false.js +1 -2
  390. package/plugins/filters/condition/greaterThan.js +3 -4
  391. package/plugins/filters/condition/greaterThanOrEqual.js +3 -4
  392. package/plugins/filters/condition/lessThan.js +3 -4
  393. package/plugins/filters/condition/lessThanOrEqual.js +3 -4
  394. package/plugins/filters/condition/none.js +3 -4
  395. package/plugins/filters/condition/notBetween.js +3 -4
  396. package/plugins/filters/condition/notContains.js +3 -4
  397. package/plugins/filters/condition/notEmpty.js +3 -4
  398. package/plugins/filters/condition/notEqual.js +3 -4
  399. package/plugins/filters/condition/true.js +1 -2
  400. package/plugins/filters/conditionCollection.d.ts +3 -2
  401. package/plugins/filters/conditionCollection.js +1 -2
  402. package/plugins/filters/conditionRegisterer.js +1 -2
  403. package/plugins/filters/conditionUpdateObserver.js +1 -2
  404. package/plugins/filters/constants.js +4 -8
  405. package/plugins/filters/constants.mjs +1 -1
  406. package/plugins/filters/dataFilter.js +1 -2
  407. package/plugins/filters/filters.d.ts +3 -5
  408. package/plugins/filters/filters.js +118 -67
  409. package/plugins/filters/filters.mjs +109 -56
  410. package/plugins/filters/logicalOperationRegisterer.js +1 -2
  411. package/plugins/filters/logicalOperations/conjunction.js +4 -6
  412. package/plugins/filters/logicalOperations/disjunction.js +4 -6
  413. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +4 -6
  414. package/plugins/filters/menu/focusController.js +123 -0
  415. package/plugins/filters/menu/focusController.mjs +119 -0
  416. package/plugins/filters/menu/focusNavigator.js +30 -0
  417. package/plugins/filters/menu/focusNavigator.mjs +26 -0
  418. package/plugins/filters/ui/_base.js +37 -15
  419. package/plugins/filters/ui/_base.mjs +35 -13
  420. package/plugins/filters/ui/input.js +43 -35
  421. package/plugins/filters/ui/input.mjs +42 -33
  422. package/plugins/filters/ui/link.js +44 -12
  423. package/plugins/filters/ui/link.mjs +44 -11
  424. package/plugins/filters/ui/multipleSelect.js +237 -133
  425. package/plugins/filters/ui/multipleSelect.mjs +232 -127
  426. package/plugins/filters/ui/radioInput.js +42 -18
  427. package/plugins/filters/ui/radioInput.mjs +42 -17
  428. package/plugins/filters/ui/select.js +152 -77
  429. package/plugins/filters/ui/select.mjs +148 -72
  430. package/plugins/formulas/engine/settings.js +2 -4
  431. package/plugins/formulas/formulas.js +3 -6
  432. package/plugins/formulas/indexSyncer/axisSyncer.js +1 -2
  433. package/plugins/formulas/indexSyncer/index.js +1 -2
  434. package/plugins/hiddenColumns/contextMenuItem/hideColumn.js +2 -2
  435. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +2 -2
  436. package/plugins/hiddenColumns/hiddenColumns.d.ts +1 -0
  437. package/plugins/hiddenColumns/hiddenColumns.js +49 -6
  438. package/plugins/hiddenColumns/hiddenColumns.mjs +48 -3
  439. package/plugins/hiddenRows/contextMenuItem/hideRow.js +2 -2
  440. package/plugins/hiddenRows/contextMenuItem/showRow.js +2 -2
  441. package/plugins/hiddenRows/hiddenRows.d.ts +1 -0
  442. package/plugins/hiddenRows/hiddenRows.js +49 -6
  443. package/plugins/hiddenRows/hiddenRows.mjs +48 -3
  444. package/plugins/manualColumnFreeze/contextMenuItem/freezeColumn.js +2 -2
  445. package/plugins/manualColumnFreeze/contextMenuItem/unfreezeColumn.js +2 -2
  446. package/plugins/manualColumnFreeze/manualColumnFreeze.js +2 -4
  447. package/plugins/manualColumnMove/manualColumnMove.js +9 -17
  448. package/plugins/manualColumnMove/manualColumnMove.mjs +7 -13
  449. package/plugins/manualColumnMove/ui/_base.js +1 -2
  450. package/plugins/manualColumnMove/ui/backlight.js +1 -2
  451. package/plugins/manualColumnMove/ui/guideline.js +1 -2
  452. package/plugins/manualColumnResize/manualColumnResize.js +2 -4
  453. package/plugins/manualRowMove/manualRowMove.js +6 -23
  454. package/plugins/manualRowMove/manualRowMove.mjs +4 -19
  455. package/plugins/manualRowMove/ui/_base.js +1 -2
  456. package/plugins/manualRowMove/ui/backlight.js +1 -2
  457. package/plugins/manualRowMove/ui/guideline.js +1 -2
  458. package/plugins/manualRowResize/manualRowResize.js +2 -4
  459. package/plugins/mergeCells/calculations/autofill.js +1 -2
  460. package/plugins/mergeCells/calculations/selection.js +1 -2
  461. package/plugins/mergeCells/cellCoords.js +1 -2
  462. package/plugins/mergeCells/cellsCollection.js +1 -2
  463. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +2 -2
  464. package/plugins/mergeCells/mergeCells.js +7 -20
  465. package/plugins/mergeCells/mergeCells.mjs +5 -16
  466. package/plugins/multiColumnSorting/multiColumnSorting.js +60 -6
  467. package/plugins/multiColumnSorting/multiColumnSorting.mjs +59 -3
  468. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +2 -4
  469. package/plugins/nestedHeaders/nestedHeaders.js +263 -36
  470. package/plugins/nestedHeaders/nestedHeaders.mjs +262 -33
  471. package/plugins/nestedHeaders/stateManager/index.js +102 -3
  472. package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
  473. package/plugins/nestedHeaders/stateManager/sourceSettings.js +1 -2
  474. package/plugins/nestedHeaders/utils/ghostTable.js +1 -2
  475. package/plugins/nestedRows/data/dataManager.js +1 -2
  476. package/plugins/nestedRows/nestedRows.js +47 -10
  477. package/plugins/nestedRows/nestedRows.mjs +45 -6
  478. package/plugins/nestedRows/ui/_base.js +1 -2
  479. package/plugins/nestedRows/ui/collapsing.js +1 -2
  480. package/plugins/nestedRows/ui/contextMenu.js +3 -4
  481. package/plugins/nestedRows/ui/headers.js +13 -3
  482. package/plugins/nestedRows/ui/headers.mjs +13 -2
  483. package/plugins/persistentState/persistentState.js +2 -4
  484. package/plugins/persistentState/storage.js +1 -2
  485. package/plugins/search/search.js +2 -4
  486. package/plugins/touchScroll/touchScroll.js +2 -4
  487. package/plugins/trimRows/trimRows.js +2 -4
  488. package/plugins/undoRedo/index.js +2 -2
  489. package/plugins/undoRedo/undoRedo.js +2 -4
  490. package/renderers/autocompleteRenderer/autocompleteRenderer.js +9 -2
  491. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
  492. package/renderers/baseRenderer/baseRenderer.js +18 -2
  493. package/renderers/baseRenderer/baseRenderer.mjs +18 -1
  494. package/renderers/checkboxRenderer/checkboxRenderer.js +10 -6
  495. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  496. package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
  497. package/renderers/dateRenderer/dateRenderer.js +28 -0
  498. package/renderers/dateRenderer/dateRenderer.mjs +24 -0
  499. package/renderers/dateRenderer/index.d.ts +1 -0
  500. package/renderers/dateRenderer/index.js +6 -0
  501. package/renderers/dateRenderer/index.mjs +1 -0
  502. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
  503. package/renderers/handsontableRenderer/handsontableRenderer.js +28 -0
  504. package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
  505. package/renderers/handsontableRenderer/index.d.ts +1 -0
  506. package/renderers/handsontableRenderer/index.js +6 -0
  507. package/renderers/handsontableRenderer/index.mjs +1 -0
  508. package/renderers/htmlRenderer/htmlRenderer.js +1 -2
  509. package/renderers/index.d.ts +9 -0
  510. package/renderers/numericRenderer/numericRenderer.js +1 -2
  511. package/renderers/passwordRenderer/passwordRenderer.js +1 -2
  512. package/renderers/selectRenderer/index.d.ts +1 -0
  513. package/renderers/selectRenderer/index.js +6 -0
  514. package/renderers/selectRenderer/index.mjs +1 -0
  515. package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
  516. package/renderers/selectRenderer/selectRenderer.js +26 -0
  517. package/renderers/selectRenderer/selectRenderer.mjs +22 -0
  518. package/renderers/textRenderer/textRenderer.js +1 -2
  519. package/renderers/timeRenderer/timeRenderer.js +1 -2
  520. package/selection/highlight/highlight.js +257 -73
  521. package/selection/highlight/highlight.mjs +250 -71
  522. package/selection/highlight/types/activeHeader.js +10 -8
  523. package/selection/highlight/types/activeHeader.mjs +10 -8
  524. package/selection/highlight/types/area.js +6 -18
  525. package/selection/highlight/types/area.mjs +6 -18
  526. package/selection/highlight/types/areaLayered.js +31 -0
  527. package/selection/highlight/types/areaLayered.mjs +26 -0
  528. package/selection/highlight/types/column.js +27 -0
  529. package/selection/highlight/types/column.mjs +22 -0
  530. package/selection/highlight/types/customSelection.js +7 -9
  531. package/selection/highlight/types/customSelection.mjs +7 -9
  532. package/selection/highlight/types/fill.js +5 -7
  533. package/selection/highlight/types/fill.mjs +5 -7
  534. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  535. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  536. package/selection/highlight/types/header.js +9 -18
  537. package/selection/highlight/types/header.mjs +9 -18
  538. package/selection/highlight/types/row.js +27 -0
  539. package/selection/highlight/types/row.mjs +22 -0
  540. package/selection/highlight/visualSelection.js +32 -29
  541. package/selection/highlight/visualSelection.mjs +31 -27
  542. package/selection/index.js +4 -7
  543. package/selection/index.mjs +2 -3
  544. package/selection/mouseEventHandler.js +7 -1
  545. package/selection/mouseEventHandler.mjs +7 -1
  546. package/selection/range.js +9 -10
  547. package/selection/range.mjs +8 -8
  548. package/selection/selection.js +334 -154
  549. package/selection/selection.mjs +330 -151
  550. package/selection/transformation.js +233 -94
  551. package/selection/transformation.mjs +232 -92
  552. package/selection/utils.js +20 -31
  553. package/selection/utils.mjs +16 -21
  554. package/settings.d.ts +4 -0
  555. package/shortcutContexts/commands/editor/closeAndSave.js +11 -0
  556. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  557. package/shortcutContexts/commands/editor/closeWithoutSaving.js +11 -0
  558. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  559. package/shortcutContexts/commands/editor/fastOpen.js +15 -0
  560. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  561. package/shortcutContexts/commands/editor/index.js +16 -0
  562. package/shortcutContexts/commands/editor/index.mjs +12 -0
  563. package/shortcutContexts/commands/editor/open.js +26 -0
  564. package/shortcutContexts/commands/editor/open.mjs +23 -0
  565. package/shortcutContexts/commands/emptySelectedCells.js +10 -0
  566. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  567. package/shortcutContexts/commands/extendCellsSelection/down.js +14 -0
  568. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  569. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +24 -0
  570. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
  571. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  572. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  573. package/shortcutContexts/commands/extendCellsSelection/left.js +14 -0
  574. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  575. package/shortcutContexts/commands/extendCellsSelection/right.js +14 -0
  576. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  577. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +18 -0
  578. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  579. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +28 -0
  580. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  581. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +18 -0
  582. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  583. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +18 -0
  584. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  585. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +28 -0
  586. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  587. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +28 -0
  588. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  589. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +28 -0
  590. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  591. package/shortcutContexts/commands/extendCellsSelection/toRows.js +18 -0
  592. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  593. package/shortcutContexts/commands/extendCellsSelection/up.js +14 -0
  594. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  595. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +24 -0
  596. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
  597. package/shortcutContexts/commands/index.js +35 -0
  598. package/shortcutContexts/commands/index.mjs +31 -0
  599. package/shortcutContexts/commands/moveCellSelection/down.js +12 -0
  600. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  601. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +32 -0
  602. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
  603. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  604. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  605. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +11 -0
  606. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  607. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +11 -0
  608. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  609. package/shortcutContexts/commands/moveCellSelection/left.js +9 -0
  610. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  611. package/shortcutContexts/commands/moveCellSelection/right.js +9 -0
  612. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  613. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +16 -0
  614. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  615. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +17 -0
  616. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  617. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +13 -0
  618. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  619. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +16 -0
  620. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  621. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +18 -0
  622. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  623. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +20 -0
  624. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  625. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +16 -0
  626. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  627. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +18 -0
  628. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  629. package/shortcutContexts/commands/moveCellSelection/up.js +12 -0
  630. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  631. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +32 -0
  632. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
  633. package/shortcutContexts/commands/populateSelectedCellsData.js +28 -0
  634. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  635. package/shortcutContexts/commands/scrollToFocusedCell.js +34 -0
  636. package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
  637. package/shortcutContexts/commands/selectAll.js +11 -0
  638. package/shortcutContexts/commands/selectAll.mjs +8 -0
  639. package/shortcutContexts/constants.js +11 -0
  640. package/shortcutContexts/constants.mjs +8 -0
  641. package/shortcutContexts/editor.js +25 -0
  642. package/shortcutContexts/editor.mjs +21 -0
  643. package/shortcutContexts/grid.js +167 -0
  644. package/shortcutContexts/grid.mjs +163 -0
  645. package/shortcutContexts/index.js +24 -0
  646. package/shortcutContexts/index.mjs +11 -0
  647. package/shortcuts/context.d.ts +1 -0
  648. package/shortcuts/context.js +23 -4
  649. package/shortcuts/context.mjs +23 -5
  650. package/shortcuts/manager.js +31 -7
  651. package/shortcuts/manager.mjs +32 -7
  652. package/shortcuts/recorder.js +30 -14
  653. package/shortcuts/recorder.mjs +30 -14
  654. package/shortcuts/utils.js +19 -5
  655. package/shortcuts/utils.mjs +18 -4
  656. package/tableView.js +113 -16
  657. package/tableView.mjs +113 -15
  658. package/utils/dataStructures/linkedList.js +1 -2
  659. package/utils/dataStructures/priorityMap.js +2 -4
  660. package/utils/dataStructures/queue.js +1 -2
  661. package/utils/dataStructures/stack.js +1 -2
  662. package/utils/dataStructures/tree.js +3 -6
  663. package/utils/ghostTable.js +32 -17
  664. package/utils/ghostTable.mjs +31 -15
  665. package/utils/interval.js +1 -2
  666. package/utils/paginator.js +151 -0
  667. package/utils/paginator.mjs +147 -0
  668. package/utils/parseTable.js +527 -83
  669. package/utils/parseTable.mjs +523 -82
  670. package/utils/rootInstance.js +2 -4
  671. package/utils/samplesGenerator.js +21 -13
  672. package/utils/samplesGenerator.mjs +20 -11
  673. package/utils/staticRegister.js +1 -2
  674. package/validators/autocompleteValidator/autocompleteValidator.js +1 -2
  675. package/validators/dateValidator/dateValidator.js +1 -2
  676. package/validators/numericValidator/numericValidator.js +1 -2
  677. package/validators/timeValidator/timeValidator.js +1 -2
  678. package/3rdparty/walkontable/src/selection.js +0 -295
  679. package/3rdparty/walkontable/src/selection.mjs +0 -290
  680. package/plugins/contextMenu/predefinedItems.js +0 -76
  681. package/plugins/contextMenu/predefinedItems.mjs +0 -68
  682. package/plugins/copyPaste/clipboardData.js +0 -18
  683. package/plugins/copyPaste/clipboardData.mjs +0 -14
  684. package/plugins/copyPaste/focusableElement.js +0 -186
  685. package/plugins/copyPaste/focusableElement.mjs +0 -180
  686. package/plugins/copyPaste/pasteEvent.js +0 -14
  687. package/plugins/copyPaste/pasteEvent.mjs +0 -9
  688. package/selection/highlight/constants.js +0 -15
  689. package/selection/highlight/constants.mjs +0 -6
  690. package/selection/highlight/types/index.js +0 -35
  691. package/selection/highlight/types/index.mjs +0 -31
@@ -11,9 +11,9 @@ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classEx
11
11
  function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
12
12
  function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
13
13
  import { addClass, removeClass } from "../../helpers/dom/element.mjs";
14
- import { isNumeric } from "../../helpers/number.mjs";
15
- import { isLeftClick, isRightClick } from "../../helpers/dom/event.mjs";
14
+ import { isNumeric, clamp } from "../../helpers/number.mjs";
16
15
  import { toSingleLine } from "../../helpers/templateLiteralTag.mjs";
16
+ import { isLeftClick, isRightClick } from "../../helpers/dom/event.mjs";
17
17
  import { warn } from "../../helpers/console.mjs";
18
18
  import { ACTIVE_HEADER_TYPE, HEADER_TYPE } from "../../selection/index.mjs";
19
19
  import { BasePlugin } from "../base/index.mjs";
@@ -69,13 +69,14 @@ export const PLUGIN_PRIORITY = 280;
69
69
  */
70
70
  var _stateManager = /*#__PURE__*/new WeakMap();
71
71
  var _hidingIndexMapObserver = /*#__PURE__*/new WeakMap();
72
+ var _focusInitialCoords = /*#__PURE__*/new WeakMap();
73
+ var _isColumnsSelectionInProgress = /*#__PURE__*/new WeakMap();
72
74
  export class NestedHeaders extends BasePlugin {
73
75
  constructor() {
74
76
  super(...arguments);
75
77
  /**
76
78
  * The state manager for the nested headers.
77
79
  *
78
- * @private
79
80
  * @type {StateManager}
80
81
  */
81
82
  _classPrivateFieldInitSpec(this, _stateManager, {
@@ -86,13 +87,30 @@ export class NestedHeaders extends BasePlugin {
86
87
  * The instance of the ChangesObservable class that allows track the changes that happens in the
87
88
  * column indexes.
88
89
  *
89
- * @private
90
90
  * @type {ChangesObservable}
91
91
  */
92
92
  _classPrivateFieldInitSpec(this, _hidingIndexMapObserver, {
93
93
  writable: true,
94
94
  value: null
95
95
  });
96
+ /**
97
+ * Holds the coords that points to the place where the column selection starts.
98
+ *
99
+ * @type {number|null}
100
+ */
101
+ _classPrivateFieldInitSpec(this, _focusInitialCoords, {
102
+ writable: true,
103
+ value: null
104
+ });
105
+ /**
106
+ * Determines if there is performed the column selection.
107
+ *
108
+ * @type {boolean}
109
+ */
110
+ _classPrivateFieldInitSpec(this, _isColumnsSelectionInProgress, {
111
+ writable: true,
112
+ value: false
113
+ });
96
114
  /**
97
115
  * Custom helper for getting widths of the nested headers.
98
116
  *
@@ -152,6 +170,19 @@ export class NestedHeaders extends BasePlugin {
152
170
  this.addHook('beforeOnCellMouseOver', function () {
153
171
  return _this.onBeforeOnCellMouseOver(...arguments);
154
172
  });
173
+ this.addHook('beforeOnCellMouseUp', function () {
174
+ return _this.onBeforeOnCellMouseUp(...arguments);
175
+ });
176
+ this.addHook('beforeSelectionHighlightSet', function () {
177
+ return _this.onBeforeSelectionHighlightSet(...arguments);
178
+ });
179
+ this.addHook('modifyTransformStart', function () {
180
+ return _this.onModifyTransformStart(...arguments);
181
+ });
182
+ this.addHook('afterSelection', () => this.updateFocusHighlightPosition());
183
+ this.addHook('beforeViewportScrollHorizontally', function () {
184
+ return _this.onBeforeViewportScrollHorizontally(...arguments);
185
+ });
155
186
  this.addHook('afterGetColumnHeaderRenderers', array => this.onAfterGetColumnHeaderRenderers(array));
156
187
  this.addHook('modifyColWidth', function () {
157
188
  return _this.onModifyColWidth(...arguments);
@@ -165,9 +196,17 @@ export class NestedHeaders extends BasePlugin {
165
196
  this.addHook('beforeCopy', function () {
166
197
  return _this.onBeforeCopy(...arguments);
167
198
  });
199
+ this.addHook('beforeSelectColumns', function () {
200
+ return _this.onBeforeSelectColumns(...arguments);
201
+ });
168
202
  this.addHook('afterViewportColumnCalculatorOverride', function () {
169
203
  return _this.onAfterViewportColumnCalculatorOverride(...arguments);
170
204
  });
205
+ this.addHook('modifyFocusedElement', function () {
206
+ return _this.onModifyFocusedElement(...arguments);
207
+ });
208
+ this.hot.columnIndexMapper.addLocalHook('cacheUpdated', () => this.updateFocusHighlightPosition());
209
+ this.hot.rowIndexMapper.addLocalHook('cacheUpdated', () => this.updateFocusHighlightPosition());
171
210
  super.enablePlugin();
172
211
  this.updatePlugin(); // @TODO: Workaround for broken plugin initialization abstraction.
173
212
  }
@@ -383,6 +422,67 @@ export class NestedHeaders extends BasePlugin {
383
422
  return this.hot.getColHeader(visualColumnIndex, headerLevel);
384
423
  }
385
424
 
425
+ /**
426
+ * Updates the selection focus highlight position to point to the nested header root element (TH)
427
+ * even when the logical coordinates point in-between the header.
428
+ *
429
+ * @private
430
+ */
431
+ updateFocusHighlightPosition() {
432
+ var _this$hot;
433
+ const selection = (_this$hot = this.hot) === null || _this$hot === void 0 ? void 0 : _this$hot.getSelectedRangeLast();
434
+ if (!selection) {
435
+ return;
436
+ }
437
+ const {
438
+ highlight
439
+ } = selection;
440
+ const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
441
+ if (isNestedHeadersRange) {
442
+ const columnIndex = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(highlight.row, highlight.col);
443
+ const focusHighlight = this.hot.selection.highlight.getFocus();
444
+
445
+ // Correct the highlight/focus selection to highlight the correct TH element
446
+ focusHighlight.visualCellRange.highlight.col = columnIndex;
447
+ focusHighlight.visualCellRange.from.col = columnIndex;
448
+ focusHighlight.visualCellRange.to.col = columnIndex;
449
+ focusHighlight.commit();
450
+ }
451
+ }
452
+
453
+ /**
454
+ * Allows to control to which column index the viewport will be scrolled. To ensure that the viewport
455
+ * is scrolled to the correct column for the nested header the most left and the most right visual column
456
+ * indexes are used.
457
+ *
458
+ * @private
459
+ * @param {number} visualColumn A visual column index to which the viewport will be scrolled.
460
+ * @returns {number}
461
+ */
462
+ onBeforeViewportScrollHorizontally(visualColumn) {
463
+ const selection = this.hot.getSelectedRangeLast();
464
+ if (!selection) {
465
+ return visualColumn;
466
+ }
467
+ const {
468
+ highlight
469
+ } = selection;
470
+ const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
471
+ if (!isNestedHeadersRange) {
472
+ return visualColumn;
473
+ }
474
+ const firstColumn = this.hot.view.getFirstFullyVisibleColumn();
475
+ const lastColumn = this.hot.view.getLastFullyVisibleColumn();
476
+ const mostLeftColumnIndex = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(highlight.row, highlight.col);
477
+ const mostRightColumnIndex = _classPrivateFieldGet(this, _stateManager).findRightMostColumnIndex(highlight.row, highlight.col);
478
+
479
+ // do not scroll the viewport when the header is wider than the viewport
480
+ if (mostLeftColumnIndex < firstColumn && mostRightColumnIndex > lastColumn) {
481
+ return visualColumn;
482
+ }
483
+ return mostLeftColumnIndex < firstColumn ? mostLeftColumnIndex : mostRightColumnIndex;
484
+ }
485
+
386
486
  /**
387
487
  * Allows to control which header DOM element will be used to highlight.
388
488
  *
@@ -398,7 +498,6 @@ export class NestedHeaders extends BasePlugin {
398
498
  return visualColumn;
399
499
  }
400
500
  const {
401
- classNames,
402
501
  columnCursor,
403
502
  selectionType,
404
503
  selectionWidth
@@ -413,8 +512,8 @@ export class NestedHeaders extends BasePlugin {
413
512
  }
414
513
  } else if (selectionType === ACTIVE_HEADER_TYPE) {
415
514
  if (colspan > selectionWidth - columnCursor || !isRoot) {
416
- // Reset the class names array so the generated TH element won't be modified.
417
- classNames.length = 0;
515
+ // Prevents adding any CSS class names to the TH element
516
+ return null;
418
517
  }
419
518
  }
420
519
  return visualColumn;
@@ -426,45 +525,44 @@ export class NestedHeaders extends BasePlugin {
426
525
  * of the column.
427
526
  *
428
527
  * @private
429
- * @param {Array[]} data An array of arrays which contains data to copied.
430
- * @param {object[]} copyableRanges An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)
431
- * which will copied.
432
- * @param {{ columnHeadersCount: number }} copiedHeadersCount An object with keys that holds information with
433
- * the number of copied headers.
528
+ * @param {object} clipboardData Information about already performed copy action.
529
+ * @param {Function} clipboardData.removeRow Remove row from the copied/pasted dataset.
530
+ * @param {Function} clipboardData.removeColumn Remove column from the copied/pasted dataset.
531
+ * @param {Function} clipboardData.insertAtRow Insert values at row index.
532
+ * @param {Function} clipboardData.insertAtColumn Insert values at column index.
533
+ * @param {Function} clipboardData.setCellAt Change headers or cells in the copied/pasted dataset.
534
+ * @param {Function} clipboardData.getCellAt Get headers or cells from the copied/pasted dataset.
535
+ * @param {Function} clipboardData.getData Gets copied data stored as array of arrays.
536
+ * @param {Function} clipboardData.getMetaInfo Gets grid settings for copied data.
537
+ * @param {Function} clipboardData.getRanges Returns ranges related to copied part of Handsontable.
434
538
  */
435
- onBeforeCopy(data, copyableRanges, _ref2) {
436
- let {
437
- columnHeadersCount
438
- } = _ref2;
439
- if (columnHeadersCount === 0) {
440
- return;
441
- }
442
- for (let rangeIndex = 0; rangeIndex < copyableRanges.length; rangeIndex++) {
539
+ onBeforeCopy(clipboardData) {
540
+ const copyableRanges = clipboardData.getRanges();
541
+ for (let rangeIndex = 0; rangeIndex < copyableRanges.length; rangeIndex += 1) {
443
542
  const {
444
543
  startRow,
445
544
  startCol,
446
545
  endRow,
447
546
  endCol
448
547
  } = copyableRanges[rangeIndex];
449
- const rowsCount = endRow - startRow + 1;
450
548
  const columnsCount = startCol - endCol + 1;
451
549
 
452
550
  // do not process dataset ranges and column headers where only one column is copied
453
551
  if (startRow >= 0 || columnsCount === 1) {
454
552
  break;
455
553
  }
456
- for (let column = startCol; column <= endCol; column++) {
457
- for (let row = startRow; row <= endRow; row++) {
458
- var _classPrivateFieldGet4;
459
- const zeroBasedColumnHeaderLevel = rowsCount + row;
554
+ for (let column = startCol; column <= endCol; column += 1) {
555
+ for (let row = startRow; row <= endRow; row += 1) {
556
+ var _classPrivateFieldGet4, _classPrivateFieldGet5;
460
557
  const zeroBasedColumnIndex = column - startCol;
461
558
  if (zeroBasedColumnIndex === 0) {
462
559
  continue; // eslint-disable-line no-continue
463
560
  }
464
561
 
465
562
  const isRoot = (_classPrivateFieldGet4 = _classPrivateFieldGet(this, _stateManager).getHeaderTreeNodeData(row, column)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.isRoot;
466
- if (isRoot === false) {
467
- data[zeroBasedColumnHeaderLevel][zeroBasedColumnIndex] = '';
563
+ const collapsible = (_classPrivateFieldGet5 = _classPrivateFieldGet(this, _stateManager).getHeaderTreeNodeData(row, column)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.collapsible;
564
+ if (collapsible === true && isRoot === false) {
565
+ clipboardData.setCellAt(row, zeroBasedColumnIndex, '');
468
566
  }
469
567
  }
470
568
  }
@@ -502,6 +600,8 @@ export class NestedHeaders extends BasePlugin {
502
600
  if (!headerNodeData) {
503
601
  return;
504
602
  }
603
+ _classPrivateFieldSet(this, _focusInitialCoords, coords.clone());
604
+ _classPrivateFieldSet(this, _isColumnsSelectionInProgress, true);
505
605
  const {
506
606
  selection
507
607
  } = this.hot;
@@ -567,14 +667,129 @@ export class NestedHeaders extends BasePlugin {
567
667
  controller.column = true;
568
668
  controller.cell = true;
569
669
  const columnsToSelect = [];
670
+ const headerLevel = clamp(coords.row, -Infinity, -1);
570
671
  if (coords.col < from.col) {
571
- columnsToSelect.push(bottomEndCoords.col, columnIndex);
672
+ columnsToSelect.push(bottomEndCoords.col, columnIndex, headerLevel);
572
673
  } else if (coords.col > from.col) {
573
- columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1);
674
+ columnsToSelect.push(topStartCoords.col, columnIndex + origColspan - 1, headerLevel);
574
675
  } else {
575
- columnsToSelect.push(columnIndex, columnIndex + origColspan - 1);
676
+ columnsToSelect.push(columnIndex, columnIndex + origColspan - 1, headerLevel);
677
+ }
678
+ this.hot.selection.selectColumns(...columnsToSelect);
679
+ }
680
+
681
+ /**
682
+ * Switches internal flag about selection progress to `false`.
683
+ *
684
+ * @private
685
+ */
686
+ onBeforeOnCellMouseUp() {
687
+ _classPrivateFieldSet(this, _isColumnsSelectionInProgress, false);
688
+ }
689
+
690
+ /**
691
+ * The hook checks and ensures that the focus position that depends on the selected columns
692
+ * range is always positioned within the range.
693
+ *
694
+ * @private
695
+ */
696
+ onBeforeSelectionHighlightSet() {
697
+ const {
698
+ navigableHeaders
699
+ } = this.hot.getSettings();
700
+ if (!this.hot.view.isMouseDown() || !_classPrivateFieldGet(this, _isColumnsSelectionInProgress) || !navigableHeaders) {
701
+ return;
702
+ }
703
+ const selectedRange = this.hot.getSelectedRangeLast();
704
+ const columnStart = selectedRange.getTopStartCorner().col;
705
+ const columnEnd = selectedRange.getBottomEndCorner().col;
706
+ const {
707
+ columnIndex,
708
+ origColspan
709
+ } = _classPrivateFieldGet(this, _stateManager).getHeaderTreeNodeData(_classPrivateFieldGet(this, _focusInitialCoords).row, _classPrivateFieldGet(this, _focusInitialCoords).col);
710
+ selectedRange.setHighlight(_classPrivateFieldGet(this, _focusInitialCoords));
711
+ if (origColspan > selectedRange.getWidth() || columnIndex < columnStart || columnIndex + origColspan - 1 > columnEnd) {
712
+ const headerLevel = _classPrivateFieldGet(this, _stateManager).findTopMostEntireHeaderLevel(clamp(columnStart, columnIndex, columnIndex + origColspan - 1), clamp(columnEnd, columnIndex, columnIndex + origColspan - 1));
713
+ selectedRange.highlight.row = headerLevel;
714
+ selectedRange.highlight.col = selectedRange.from.col;
715
+ }
716
+ }
717
+
718
+ /**
719
+ * `modifyTransformStart` hook is called every time the keyboard navigation is used.
720
+ *
721
+ * @private
722
+ * @param {object} delta The transformation delta.
723
+ */
724
+ onModifyTransformStart(delta) {
725
+ const {
726
+ highlight
727
+ } = this.hot.getSelectedRangeLast();
728
+ const nextCoords = this.hot._createCellCoords(highlight.row + delta.row, highlight.col + delta.col);
729
+ const isNestedHeadersRange = nextCoords.isHeader() && nextCoords.col >= 0;
730
+ if (!isNestedHeadersRange) {
731
+ return;
732
+ }
733
+ const visualColumnIndexStart = _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(nextCoords.row, nextCoords.col);
734
+ const visualColumnIndexEnd = _classPrivateFieldGet(this, _stateManager).findRightMostColumnIndex(nextCoords.row, nextCoords.col);
735
+ if (delta.col < 0) {
736
+ const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexStart - 1 : visualColumnIndexEnd;
737
+ const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, -1);
738
+ if (notHiddenColumnIndex === null) {
739
+ // There are no visible columns anymore, so move the selection out of the table edge. This will
740
+ // be processed by the selection Transformer class as a move selection to the previous row (if autoWrapRow is enabled).
741
+ delta.col = -this.hot.view.countRenderableColumnsInRange(0, highlight.col);
742
+ } else {
743
+ delta.col = -Math.max(this.hot.view.countRenderableColumnsInRange(notHiddenColumnIndex, highlight.col) - 1, 1);
744
+ }
745
+ } else if (delta.col > 0) {
746
+ const nextColumn = highlight.col >= visualColumnIndexStart && highlight.col <= visualColumnIndexEnd ? visualColumnIndexEnd + 1 : visualColumnIndexStart;
747
+ const notHiddenColumnIndex = this.hot.columnIndexMapper.getNearestNotHiddenIndex(nextColumn, 1);
748
+ if (notHiddenColumnIndex === null) {
749
+ // There are no visible columns anymore, so move the selection out of the table edge. This will
750
+ // be processed by the selection Transformer class as a move selection to the next row (if autoWrapRow is enabled).
751
+ delta.col = this.hot.view.countRenderableColumnsInRange(highlight.col, this.hot.countCols());
752
+ } else {
753
+ delta.col = Math.max(this.hot.view.countRenderableColumnsInRange(highlight.col, notHiddenColumnIndex) - 1, 1);
754
+ }
755
+ }
756
+ }
757
+
758
+ /**
759
+ * The hook observes the column selection from the Selection API and modifies the column range to
760
+ * ensure that the whole nested column will be covered.
761
+ *
762
+ * @private
763
+ * @param {CellCoords} from The coords object where the selection starts.
764
+ * @param {CellCoords} to The coords object where the selection ends.
765
+ */
766
+ onBeforeSelectColumns(from, to) {
767
+ const headerLevel = from.row;
768
+ const startNodeData = this._getHeaderTreeNodeDataByCoords({
769
+ row: headerLevel,
770
+ col: from.col
771
+ });
772
+ const endNodeData = this._getHeaderTreeNodeDataByCoords({
773
+ row: headerLevel,
774
+ col: to.col
775
+ });
776
+ if (to.col < from.col) {
777
+ // Column selection from right to left
778
+ if (startNodeData) {
779
+ from.col = startNodeData.columnIndex + startNodeData.origColspan - 1;
780
+ }
781
+ if (endNodeData) {
782
+ to.col = endNodeData.columnIndex;
783
+ }
784
+ } else if (to.col >= from.col) {
785
+ // Column selection from left to right or a single column selection
786
+ if (startNodeData) {
787
+ from.col = startNodeData.columnIndex;
788
+ }
789
+ if (endNodeData) {
790
+ to.col = endNodeData.columnIndex + endNodeData.origColspan - 1;
791
+ }
576
792
  }
577
- this.hot.selectColumns(...columnsToSelect);
578
793
  }
579
794
 
580
795
  /**
@@ -650,15 +865,29 @@ export class NestedHeaders extends BasePlugin {
650
865
  * @returns {string} Returns the column header value to update.
651
866
  */
652
867
  onModifyColumnHeaderValue(value, visualColumnIndex, headerLevel) {
653
- var _classPrivateFieldGet5;
868
+ var _classPrivateFieldGet6;
654
869
  const {
655
870
  label
656
- } = (_classPrivateFieldGet5 = _classPrivateFieldGet(this, _stateManager).getHeaderTreeNodeData(headerLevel, visualColumnIndex)) !== null && _classPrivateFieldGet5 !== void 0 ? _classPrivateFieldGet5 : {
871
+ } = (_classPrivateFieldGet6 = _classPrivateFieldGet(this, _stateManager).getHeaderTreeNodeData(headerLevel, visualColumnIndex)) !== null && _classPrivateFieldGet6 !== void 0 ? _classPrivateFieldGet6 : {
657
872
  label: ''
658
873
  };
659
874
  return label;
660
875
  }
661
876
 
877
+ /**
878
+ * `modifyFocusedElement` hook callback.
879
+ *
880
+ * @private
881
+ * @param {number} row Row index.
882
+ * @param {number} column Column index.
883
+ * @returns {HTMLTableCellElement} The `TH` element to be focused.
884
+ */
885
+ onModifyFocusedElement(row, column) {
886
+ if (row < 0) {
887
+ return this.hot.getCell(row, _classPrivateFieldGet(this, _stateManager).findLeftMostColumnIndex(row, column), true);
888
+ }
889
+ }
890
+
662
891
  /**
663
892
  * Updates the plugin state after HoT initialization.
664
893
  *
@@ -8,6 +8,7 @@ var _sourceSettings2 = _interopRequireDefault(require("./sourceSettings"));
8
8
  var _headersTree2 = _interopRequireDefault(require("./headersTree"));
9
9
  var _nodeModifiers = require("./nodeModifiers");
10
10
  var _matrixGenerator = require("./matrixGenerator");
11
+ var _tree = require("../../../utils/dataStructures/tree");
11
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
13
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
13
14
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
@@ -317,6 +318,23 @@ class StateManager {
317
318
  * @returns {object|null}
318
319
  */
319
320
  getHeaderTreeNodeData(headerLevel, columnIndex) {
321
+ const node = this.getHeaderTreeNode(headerLevel, columnIndex);
322
+ if (!node) {
323
+ return null;
324
+ }
325
+ return {
326
+ ...node.data
327
+ };
328
+ }
329
+
330
+ /**
331
+ * Gets tree node that is connected to the column header.
332
+ *
333
+ * @param {number} headerLevel Header level (there is support for negative and positive values).
334
+ * @param {number} columnIndex A visual column index.
335
+ * @returns {TreeNode|null}
336
+ */
337
+ getHeaderTreeNode(headerLevel, columnIndex) {
320
338
  if (headerLevel < 0) {
321
339
  headerLevel = this.rowCoordsToLevel(headerLevel);
322
340
  }
@@ -327,9 +345,53 @@ class StateManager {
327
345
  if (!node) {
328
346
  return null;
329
347
  }
330
- return {
331
- ...node.data
332
- };
348
+ return node;
349
+ }
350
+
351
+ /**
352
+ * Finds the most top header level of the column header that is rendered entirely within
353
+ * the passed visual columns range. If multiple columns headers are found within the range the
354
+ * most top header level value will be returned.
355
+ *
356
+ * @param {number} columnIndexFrom A visual column index.
357
+ * @param {number} [columnIndexTo] A visual column index.
358
+ * @returns {number} Returns a header level in format -1 to -N.
359
+ */
360
+ findTopMostEntireHeaderLevel(columnIndexFrom) {
361
+ var _headerLevel;
362
+ let columnIndexTo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : columnIndexFrom;
363
+ const columnsWidth = columnIndexTo - columnIndexFrom + 1;
364
+ let atLeastOneRootFound = false;
365
+ let headerLevel = null;
366
+ for (let columnIndex = columnIndexFrom; columnIndex <= columnIndexTo; columnIndex++) {
367
+ const rootNode = _classPrivateFieldGet(this, _headersTree).getRootByColumn(columnIndex);
368
+ if (!rootNode) {
369
+ break;
370
+ }
371
+ atLeastOneRootFound = true;
372
+
373
+ // eslint-disable-next-line
374
+ rootNode.walkDown(node => {
375
+ const {
376
+ columnIndex: nodeColumnIndex,
377
+ headerLevel: nodeHeaderLevel,
378
+ origColspan,
379
+ isHidden
380
+ } = node.data;
381
+ if (isHidden) {
382
+ return;
383
+ }
384
+
385
+ // if the header fits entirely within the columns range get and save the node header level
386
+ if (origColspan <= columnsWidth && nodeColumnIndex >= columnIndexFrom && nodeColumnIndex + origColspan - 1 <= columnIndexTo && (headerLevel === null || nodeHeaderLevel < headerLevel)) {
387
+ headerLevel = nodeHeaderLevel;
388
+ }
389
+ }, _tree.TRAVERSAL_DF_PRE);
390
+ }
391
+ if (atLeastOneRootFound && headerLevel === null) {
392
+ return -1;
393
+ }
394
+ return this.levelToRowCoords((_headerLevel = headerLevel) !== null && _headerLevel !== void 0 ? _headerLevel : 0);
333
395
  }
334
396
 
335
397
  /**
@@ -367,6 +429,43 @@ class StateManager {
367
429
  return stepBackColumn;
368
430
  }
369
431
 
432
+ /**
433
+ * The method is helpful in cases where the column index targets in-between currently
434
+ * collapsed column. In that case, the method returns the right-most column index
435
+ * where the nested header ends.
436
+ *
437
+ * @param {number} headerLevel Header level (there is support for negative and positive values).
438
+ * @param {number} columnIndex A visual column index.
439
+ * @returns {number}
440
+ */
441
+ findRightMostColumnIndex(headerLevel, columnIndex) {
442
+ var _this$getHeaderSettin3;
443
+ const {
444
+ isRoot,
445
+ origColspan
446
+ } = (_this$getHeaderSettin3 = this.getHeaderSettings(headerLevel, columnIndex)) !== null && _this$getHeaderSettin3 !== void 0 ? _this$getHeaderSettin3 : {
447
+ isRoot: true,
448
+ origColspan: 1
449
+ };
450
+ if (isRoot) {
451
+ return columnIndex + origColspan - 1;
452
+ }
453
+ let stepForthColumn = columnIndex + 1;
454
+ while (stepForthColumn < this.getColumnsCount()) {
455
+ var _this$getHeaderSettin4;
456
+ const {
457
+ isRoot: isRootNode
458
+ } = (_this$getHeaderSettin4 = this.getHeaderSettings(headerLevel, stepForthColumn)) !== null && _this$getHeaderSettin4 !== void 0 ? _this$getHeaderSettin4 : {
459
+ isRoot: true
460
+ };
461
+ if (isRootNode) {
462
+ break;
463
+ }
464
+ stepForthColumn += 1;
465
+ }
466
+ return stepForthColumn - 1;
467
+ }
468
+
370
469
  /**
371
470
  * Gets a total number of headers levels.
372
471
  *
@@ -12,6 +12,7 @@ import SourceSettings from "./sourceSettings.mjs";
12
12
  import HeadersTree from "./headersTree.mjs";
13
13
  import { triggerNodeModification } from "./nodeModifiers/index.mjs";
14
14
  import { generateMatrix } from "./matrixGenerator.mjs";
15
+ import { TRAVERSAL_DF_PRE } from "../../../utils/dataStructures/tree.mjs";
15
16
  /**
16
17
  * The state manager is a source of truth for nested headers configuration.
17
18
  * The state generation process is divided into three stages.
@@ -313,6 +314,23 @@ export default class StateManager {
313
314
  * @returns {object|null}
314
315
  */
315
316
  getHeaderTreeNodeData(headerLevel, columnIndex) {
317
+ const node = this.getHeaderTreeNode(headerLevel, columnIndex);
318
+ if (!node) {
319
+ return null;
320
+ }
321
+ return {
322
+ ...node.data
323
+ };
324
+ }
325
+
326
+ /**
327
+ * Gets tree node that is connected to the column header.
328
+ *
329
+ * @param {number} headerLevel Header level (there is support for negative and positive values).
330
+ * @param {number} columnIndex A visual column index.
331
+ * @returns {TreeNode|null}
332
+ */
333
+ getHeaderTreeNode(headerLevel, columnIndex) {
316
334
  if (headerLevel < 0) {
317
335
  headerLevel = this.rowCoordsToLevel(headerLevel);
318
336
  }
@@ -323,9 +341,53 @@ export default class StateManager {
323
341
  if (!node) {
324
342
  return null;
325
343
  }
326
- return {
327
- ...node.data
328
- };
344
+ return node;
345
+ }
346
+
347
+ /**
348
+ * Finds the most top header level of the column header that is rendered entirely within
349
+ * the passed visual columns range. If multiple columns headers are found within the range the
350
+ * most top header level value will be returned.
351
+ *
352
+ * @param {number} columnIndexFrom A visual column index.
353
+ * @param {number} [columnIndexTo] A visual column index.
354
+ * @returns {number} Returns a header level in format -1 to -N.
355
+ */
356
+ findTopMostEntireHeaderLevel(columnIndexFrom) {
357
+ var _headerLevel;
358
+ let columnIndexTo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : columnIndexFrom;
359
+ const columnsWidth = columnIndexTo - columnIndexFrom + 1;
360
+ let atLeastOneRootFound = false;
361
+ let headerLevel = null;
362
+ for (let columnIndex = columnIndexFrom; columnIndex <= columnIndexTo; columnIndex++) {
363
+ const rootNode = _classPrivateFieldGet(this, _headersTree).getRootByColumn(columnIndex);
364
+ if (!rootNode) {
365
+ break;
366
+ }
367
+ atLeastOneRootFound = true;
368
+
369
+ // eslint-disable-next-line
370
+ rootNode.walkDown(node => {
371
+ const {
372
+ columnIndex: nodeColumnIndex,
373
+ headerLevel: nodeHeaderLevel,
374
+ origColspan,
375
+ isHidden
376
+ } = node.data;
377
+ if (isHidden) {
378
+ return;
379
+ }
380
+
381
+ // if the header fits entirely within the columns range get and save the node header level
382
+ if (origColspan <= columnsWidth && nodeColumnIndex >= columnIndexFrom && nodeColumnIndex + origColspan - 1 <= columnIndexTo && (headerLevel === null || nodeHeaderLevel < headerLevel)) {
383
+ headerLevel = nodeHeaderLevel;
384
+ }
385
+ }, TRAVERSAL_DF_PRE);
386
+ }
387
+ if (atLeastOneRootFound && headerLevel === null) {
388
+ return -1;
389
+ }
390
+ return this.levelToRowCoords((_headerLevel = headerLevel) !== null && _headerLevel !== void 0 ? _headerLevel : 0);
329
391
  }
330
392
 
331
393
  /**
@@ -363,6 +425,43 @@ export default class StateManager {
363
425
  return stepBackColumn;
364
426
  }
365
427
 
428
+ /**
429
+ * The method is helpful in cases where the column index targets in-between currently
430
+ * collapsed column. In that case, the method returns the right-most column index
431
+ * where the nested header ends.
432
+ *
433
+ * @param {number} headerLevel Header level (there is support for negative and positive values).
434
+ * @param {number} columnIndex A visual column index.
435
+ * @returns {number}
436
+ */
437
+ findRightMostColumnIndex(headerLevel, columnIndex) {
438
+ var _this$getHeaderSettin3;
439
+ const {
440
+ isRoot,
441
+ origColspan
442
+ } = (_this$getHeaderSettin3 = this.getHeaderSettings(headerLevel, columnIndex)) !== null && _this$getHeaderSettin3 !== void 0 ? _this$getHeaderSettin3 : {
443
+ isRoot: true,
444
+ origColspan: 1
445
+ };
446
+ if (isRoot) {
447
+ return columnIndex + origColspan - 1;
448
+ }
449
+ let stepForthColumn = columnIndex + 1;
450
+ while (stepForthColumn < this.getColumnsCount()) {
451
+ var _this$getHeaderSettin4;
452
+ const {
453
+ isRoot: isRootNode
454
+ } = (_this$getHeaderSettin4 = this.getHeaderSettings(headerLevel, stepForthColumn)) !== null && _this$getHeaderSettin4 !== void 0 ? _this$getHeaderSettin4 : {
455
+ isRoot: true
456
+ };
457
+ if (isRootNode) {
458
+ break;
459
+ }
460
+ stepForthColumn += 1;
461
+ }
462
+ return stepForthColumn - 1;
463
+ }
464
+
366
465
  /**
367
466
  * Gets a total number of headers levels.
368
467
  *