handsontable 14.6.1-next-689aaa6-20241016 → 15.0.0-next-4472a60-20241203

Sign up to get free protection for your applications and to get access to all the features.
Files changed (392) hide show
  1. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +23 -0
  2. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +23 -0
  3. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +23 -0
  4. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +23 -0
  5. package/3rdparty/walkontable/src/calculator/index.js +1 -2
  6. package/3rdparty/walkontable/src/calculator/index.mjs +2 -2
  7. package/3rdparty/walkontable/src/calculator/viewportBase.js +2 -0
  8. package/3rdparty/walkontable/src/calculator/viewportBase.mjs +2 -0
  9. package/3rdparty/walkontable/src/calculator/viewportRows.js +3 -3
  10. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +3 -3
  11. package/3rdparty/walkontable/src/core/_base.js +29 -23
  12. package/3rdparty/walkontable/src/core/_base.mjs +29 -23
  13. package/3rdparty/walkontable/src/core/clone.js +1 -0
  14. package/3rdparty/walkontable/src/core/clone.mjs +1 -0
  15. package/3rdparty/walkontable/src/core/core.js +2 -0
  16. package/3rdparty/walkontable/src/core/core.mjs +2 -0
  17. package/3rdparty/walkontable/src/facade/core.js +12 -6
  18. package/3rdparty/walkontable/src/facade/core.mjs +12 -6
  19. package/3rdparty/walkontable/src/index.js +0 -1
  20. package/3rdparty/walkontable/src/index.mjs +2 -2
  21. package/3rdparty/walkontable/src/overlay/_base.js +8 -1
  22. package/3rdparty/walkontable/src/overlay/_base.mjs +8 -1
  23. package/3rdparty/walkontable/src/overlay/bottom.js +5 -6
  24. package/3rdparty/walkontable/src/overlay/bottom.mjs +5 -6
  25. package/3rdparty/walkontable/src/overlay/index.js +2 -0
  26. package/3rdparty/walkontable/src/overlay/inlineStart.js +8 -7
  27. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +9 -8
  28. package/3rdparty/walkontable/src/overlay/top.js +9 -8
  29. package/3rdparty/walkontable/src/overlay/top.mjs +10 -9
  30. package/3rdparty/walkontable/src/overlays.js +10 -26
  31. package/3rdparty/walkontable/src/overlays.mjs +10 -26
  32. package/3rdparty/walkontable/src/renderer/colGroup.js +1 -1
  33. package/3rdparty/walkontable/src/renderer/colGroup.mjs +1 -1
  34. package/3rdparty/walkontable/src/renderer/index.js +4 -2
  35. package/3rdparty/walkontable/src/renderer/index.mjs +4 -2
  36. package/3rdparty/walkontable/src/renderer/table.js +13 -4
  37. package/3rdparty/walkontable/src/renderer/table.mjs +13 -4
  38. package/3rdparty/walkontable/src/scroll.js +46 -37
  39. package/3rdparty/walkontable/src/scroll.mjs +46 -37
  40. package/3rdparty/walkontable/src/selection/border/border.js +52 -58
  41. package/3rdparty/walkontable/src/selection/border/border.mjs +53 -59
  42. package/3rdparty/walkontable/src/selection/border/utils.js +26 -0
  43. package/3rdparty/walkontable/src/selection/border/utils.mjs +22 -0
  44. package/3rdparty/walkontable/src/selection/index.js +6 -4
  45. package/3rdparty/walkontable/src/selection/index.mjs +1 -1
  46. package/3rdparty/walkontable/src/selection/manager.js +3 -0
  47. package/3rdparty/walkontable/src/selection/manager.mjs +3 -0
  48. package/3rdparty/walkontable/src/selection/scanner.js +46 -11
  49. package/3rdparty/walkontable/src/selection/scanner.mjs +46 -11
  50. package/3rdparty/walkontable/src/settings.js +8 -9
  51. package/3rdparty/walkontable/src/settings.mjs +8 -9
  52. package/3rdparty/walkontable/src/table/master.js +1 -1
  53. package/3rdparty/walkontable/src/table/master.mjs +2 -2
  54. package/3rdparty/walkontable/src/table.js +25 -36
  55. package/3rdparty/walkontable/src/table.mjs +25 -36
  56. package/3rdparty/walkontable/src/types.js +1 -0
  57. package/3rdparty/walkontable/src/types.mjs +1 -0
  58. package/3rdparty/walkontable/src/utils/column.js +1 -43
  59. package/3rdparty/walkontable/src/utils/column.mjs +1 -43
  60. package/3rdparty/walkontable/src/utils/stylesHandler.js +295 -0
  61. package/3rdparty/walkontable/src/utils/stylesHandler.mjs +291 -0
  62. package/3rdparty/walkontable/src/viewport.js +94 -91
  63. package/3rdparty/walkontable/src/viewport.mjs +95 -92
  64. package/CHANGELOG.md +36 -0
  65. package/README.md +1 -1
  66. package/base.js +4 -4
  67. package/base.mjs +3 -3
  68. package/core/focusCatcher/focusDetector.js +1 -0
  69. package/core/focusCatcher/focusDetector.mjs +1 -0
  70. package/core/hooks/bucket.js +184 -0
  71. package/core/hooks/bucket.mjs +180 -0
  72. package/{pluginHooks.mjs → core/hooks/constants.js} +38 -486
  73. package/{pluginHooks.js → core/hooks/constants.mjs} +34 -489
  74. package/{pluginHooks.d.ts → core/hooks/index.d.ts} +22 -25
  75. package/core/hooks/index.js +385 -0
  76. package/core/hooks/index.mjs +381 -0
  77. package/core/index.js +2 -0
  78. package/core.d.ts +5 -3
  79. package/core.js +77 -35
  80. package/core.mjs +69 -27
  81. package/dataMap/dataMap.js +3 -0
  82. package/dataMap/dataMap.mjs +3 -0
  83. package/dataMap/dataSource.js +2 -0
  84. package/dataMap/dataSource.mjs +2 -0
  85. package/dataMap/metaManager/index.js +2 -0
  86. package/dataMap/metaManager/index.mjs +2 -0
  87. package/dataMap/metaManager/metaSchema.js +91 -5
  88. package/dataMap/metaManager/metaSchema.mjs +91 -5
  89. package/dataMap/metaManager/mods/dynamicCellMeta.js +2 -3
  90. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
  91. package/dataMap/metaManager/mods/extendMetaProperties.js +2 -0
  92. package/dataMap/metaManager/mods/extendMetaProperties.mjs +2 -0
  93. package/dist/handsontable.css +84 -72
  94. package/dist/handsontable.full.css +317 -304
  95. package/dist/handsontable.full.js +14826 -7294
  96. package/dist/handsontable.full.min.css +15 -10
  97. package/dist/handsontable.full.min.js +262 -69
  98. package/dist/handsontable.js +7826 -5552
  99. package/dist/handsontable.min.css +10 -6
  100. package/dist/handsontable.min.js +33 -33
  101. package/dist/languages/all.js +1 -1
  102. package/dist/languages/ar-AR.js +1 -1
  103. package/dist/languages/cs-CZ.js +1 -1
  104. package/dist/languages/de-CH.js +1 -1
  105. package/dist/languages/de-DE.js +1 -1
  106. package/dist/languages/en-US.js +1 -1
  107. package/dist/languages/es-MX.js +1 -1
  108. package/dist/languages/fr-FR.js +1 -1
  109. package/dist/languages/hr-HR.js +1 -1
  110. package/dist/languages/it-IT.js +1 -1
  111. package/dist/languages/ja-JP.js +1 -1
  112. package/dist/languages/ko-KR.js +1 -1
  113. package/dist/languages/lv-LV.js +1 -1
  114. package/dist/languages/nb-NO.js +1 -1
  115. package/dist/languages/nl-NL.js +1 -1
  116. package/dist/languages/pl-PL.js +1 -1
  117. package/dist/languages/pt-BR.js +1 -1
  118. package/dist/languages/ru-RU.js +1 -1
  119. package/dist/languages/sr-SP.js +1 -1
  120. package/dist/languages/zh-CN.js +1 -1
  121. package/dist/languages/zh-TW.js +1 -1
  122. package/editorManager.js +2 -2
  123. package/editorManager.mjs +2 -2
  124. package/editors/autocompleteEditor/autocompleteEditor.js +34 -16
  125. package/editors/autocompleteEditor/autocompleteEditor.mjs +34 -16
  126. package/editors/baseEditor/baseEditor.js +25 -18
  127. package/editors/baseEditor/baseEditor.mjs +26 -19
  128. package/editors/dateEditor/dateEditor.js +9 -0
  129. package/editors/dateEditor/dateEditor.mjs +10 -1
  130. package/editors/dropdownEditor/dropdownEditor.js +4 -3
  131. package/editors/dropdownEditor/dropdownEditor.mjs +3 -1
  132. package/editors/handsontableEditor/handsontableEditor.js +36 -2
  133. package/editors/handsontableEditor/handsontableEditor.mjs +36 -2
  134. package/editors/passwordEditor/passwordEditor.js +18 -0
  135. package/editors/passwordEditor/passwordEditor.mjs +18 -0
  136. package/editors/registry.js +2 -2
  137. package/editors/registry.mjs +1 -1
  138. package/editors/selectEditor/selectEditor.js +20 -9
  139. package/editors/selectEditor/selectEditor.mjs +20 -9
  140. package/editors/textEditor/textEditor.js +5 -12
  141. package/editors/textEditor/textEditor.mjs +6 -13
  142. package/focusManager.js +5 -7
  143. package/focusManager.mjs +5 -7
  144. package/helpers/array.js +2 -0
  145. package/helpers/array.mjs +2 -0
  146. package/helpers/data.js +3 -0
  147. package/helpers/data.mjs +3 -0
  148. package/helpers/dom/element.js +39 -18
  149. package/helpers/dom/element.mjs +38 -17
  150. package/helpers/mixed.js +3 -3
  151. package/helpers/mixed.mjs +3 -3
  152. package/helpers/moves.js +3 -0
  153. package/helpers/moves.mjs +3 -0
  154. package/helpers/number.js +1 -0
  155. package/helpers/number.mjs +1 -0
  156. package/helpers/object.js +2 -0
  157. package/helpers/object.mjs +2 -0
  158. package/helpers/themes.js +17 -0
  159. package/helpers/themes.mjs +13 -0
  160. package/i18n/index.js +2 -0
  161. package/i18n/languages/index.d.ts +8 -0
  162. package/i18n/languages/ja-JP.d.ts +1 -1
  163. package/i18n/phraseFormatters/substituteVariables.js +1 -0
  164. package/i18n/phraseFormatters/substituteVariables.mjs +1 -0
  165. package/index.d.ts +9 -1
  166. package/languages/all.js +1 -1
  167. package/languages/ar-AR.js +1 -1
  168. package/languages/cs-CZ.js +1 -1
  169. package/languages/de-CH.js +1 -1
  170. package/languages/de-DE.js +1 -1
  171. package/languages/en-US.js +1 -1
  172. package/languages/es-MX.js +1 -1
  173. package/languages/fr-FR.js +1 -1
  174. package/languages/hr-HR.js +1 -1
  175. package/languages/index.js +1 -1
  176. package/languages/it-IT.js +1 -1
  177. package/languages/ja-JP.js +1 -1
  178. package/languages/ko-KR.js +1 -1
  179. package/languages/lv-LV.js +1 -1
  180. package/languages/nb-NO.js +1 -1
  181. package/languages/nl-NL.js +1 -1
  182. package/languages/pl-PL.js +1 -1
  183. package/languages/pt-BR.js +1 -1
  184. package/languages/ru-RU.js +1 -1
  185. package/languages/sr-SP.js +1 -1
  186. package/languages/zh-CN.js +1 -1
  187. package/languages/zh-TW.js +1 -1
  188. package/package.json +22 -7
  189. package/plugins/autoColumnSize/autoColumnSize.js +22 -27
  190. package/plugins/autoColumnSize/autoColumnSize.mjs +22 -27
  191. package/plugins/autoRowSize/autoRowSize.js +20 -22
  192. package/plugins/autoRowSize/autoRowSize.mjs +21 -23
  193. package/plugins/autofill/autofill.js +4 -5
  194. package/plugins/autofill/autofill.mjs +1 -1
  195. package/plugins/base/base.d.ts +1 -1
  196. package/plugins/base/base.js +41 -0
  197. package/plugins/base/base.mjs +42 -1
  198. package/plugins/base/index.js +2 -1
  199. package/plugins/base/index.mjs +1 -1
  200. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +2 -5
  201. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +2 -5
  202. package/plugins/columnSorting/columnSorting.js +5 -4
  203. package/plugins/columnSorting/columnSorting.mjs +3 -1
  204. package/plugins/columnSorting/columnStatesManager.js +1 -0
  205. package/plugins/columnSorting/columnStatesManager.mjs +1 -0
  206. package/plugins/columnSorting/utils.js +3 -0
  207. package/plugins/columnSorting/utils.mjs +3 -0
  208. package/plugins/columnSummary/endpoints.js +3 -0
  209. package/plugins/columnSummary/endpoints.mjs +3 -0
  210. package/plugins/comments/commentEditor.js +9 -0
  211. package/plugins/comments/commentEditor.mjs +9 -0
  212. package/plugins/comments/comments.js +24 -18
  213. package/plugins/comments/comments.mjs +26 -20
  214. package/plugins/comments/editorResizeObserver.js +2 -0
  215. package/plugins/comments/editorResizeObserver.mjs +2 -0
  216. package/plugins/contextMenu/contextMenu.d.ts +2 -1
  217. package/plugins/contextMenu/contextMenu.js +6 -7
  218. package/plugins/contextMenu/contextMenu.mjs +1 -1
  219. package/plugins/contextMenu/menu/index.js +2 -0
  220. package/plugins/contextMenu/menu/menu.js +10 -5
  221. package/plugins/contextMenu/menu/menu.mjs +11 -6
  222. package/plugins/contextMenu/menu/positioner.js +4 -2
  223. package/plugins/contextMenu/menu/positioner.mjs +4 -2
  224. package/plugins/contextMenu/menu/shortcuts.js +3 -1
  225. package/plugins/contextMenu/menu/shortcuts.mjs +3 -1
  226. package/plugins/contextMenu/predefinedItems/alignment.js +7 -84
  227. package/plugins/contextMenu/predefinedItems/alignment.mjs +8 -85
  228. package/plugins/contextMenu/utils.js +0 -10
  229. package/plugins/contextMenu/utils.mjs +0 -9
  230. package/plugins/copyPaste/copyPaste.d.ts +1 -0
  231. package/plugins/copyPaste/copyPaste.js +32 -23
  232. package/plugins/copyPaste/copyPaste.mjs +24 -15
  233. package/plugins/customBorders/utils.js +2 -0
  234. package/plugins/customBorders/utils.mjs +2 -0
  235. package/plugins/dropdownMenu/dropdownMenu.d.ts +2 -1
  236. package/plugins/dropdownMenu/dropdownMenu.js +6 -7
  237. package/plugins/dropdownMenu/dropdownMenu.mjs +1 -1
  238. package/plugins/exportFile/types/csv.js +1 -0
  239. package/plugins/exportFile/types/csv.mjs +1 -0
  240. package/plugins/filters/component/condition.js +2 -0
  241. package/plugins/filters/component/condition.mjs +2 -0
  242. package/plugins/filters/component/operators.js +2 -0
  243. package/plugins/filters/component/operators.mjs +2 -0
  244. package/plugins/filters/component/value.js +3 -0
  245. package/plugins/filters/component/value.mjs +3 -0
  246. package/plugins/filters/conditionCollection.js +3 -0
  247. package/plugins/filters/conditionCollection.mjs +3 -0
  248. package/plugins/filters/conditionUpdateObserver.js +2 -0
  249. package/plugins/filters/conditionUpdateObserver.mjs +2 -0
  250. package/plugins/filters/filters.js +43 -13
  251. package/plugins/filters/filters.mjs +43 -13
  252. package/plugins/filters/logicalOperations/conjunction.js +2 -0
  253. package/plugins/filters/logicalOperations/conjunction.mjs +2 -0
  254. package/plugins/filters/logicalOperations/disjunction.js +2 -0
  255. package/plugins/filters/logicalOperations/disjunction.mjs +2 -0
  256. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +2 -0
  257. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.mjs +2 -0
  258. package/plugins/filters/menu/focusController.js +38 -14
  259. package/plugins/filters/menu/focusController.mjs +38 -14
  260. package/plugins/filters/ui/multipleSelect.js +10 -0
  261. package/plugins/filters/ui/multipleSelect.mjs +10 -0
  262. package/plugins/formulas/engine/register.js +3 -0
  263. package/plugins/formulas/engine/register.mjs +3 -0
  264. package/plugins/formulas/engine/settings.js +3 -0
  265. package/plugins/formulas/engine/settings.mjs +3 -0
  266. package/plugins/formulas/formulas.js +12 -7
  267. package/plugins/formulas/formulas.mjs +6 -1
  268. package/plugins/formulas/indexSyncer/axisSyncer.js +3 -0
  269. package/plugins/formulas/indexSyncer/axisSyncer.mjs +3 -0
  270. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +2 -0
  271. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +2 -0
  272. package/plugins/hiddenColumns/hiddenColumns.js +22 -30
  273. package/plugins/hiddenColumns/hiddenColumns.mjs +18 -26
  274. package/plugins/hiddenRows/contextMenuItem/showRow.js +2 -0
  275. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +2 -0
  276. package/plugins/hiddenRows/hiddenRows.js +21 -29
  277. package/plugins/hiddenRows/hiddenRows.mjs +17 -25
  278. package/plugins/index.d.ts +3 -0
  279. package/plugins/index.js +3 -0
  280. package/plugins/index.mjs +3 -1
  281. package/plugins/manualColumnFreeze/manualColumnFreeze.js +7 -5
  282. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +3 -1
  283. package/plugins/manualColumnMove/manualColumnMove.js +6 -6
  284. package/plugins/manualColumnMove/manualColumnMove.mjs +4 -4
  285. package/plugins/manualColumnResize/manualColumnResize.js +26 -12
  286. package/plugins/manualColumnResize/manualColumnResize.mjs +26 -12
  287. package/plugins/manualRowMove/manualRowMove.js +8 -6
  288. package/plugins/manualRowMove/manualRowMove.mjs +6 -4
  289. package/plugins/manualRowResize/manualRowResize.js +3 -2
  290. package/plugins/manualRowResize/manualRowResize.mjs +4 -3
  291. package/plugins/mergeCells/cellsCollection.js +19 -3
  292. package/plugins/mergeCells/cellsCollection.mjs +20 -4
  293. package/plugins/mergeCells/mergeCells.d.ts +6 -2
  294. package/plugins/mergeCells/mergeCells.js +84 -56
  295. package/plugins/mergeCells/mergeCells.mjs +82 -54
  296. package/plugins/mergeCells/renderer.js +13 -3
  297. package/plugins/mergeCells/renderer.mjs +13 -3
  298. package/plugins/multiColumnSorting/domHelpers.js +2 -0
  299. package/plugins/multiColumnSorting/domHelpers.mjs +2 -0
  300. package/plugins/nestedHeaders/nestedHeaders.js +63 -16
  301. package/plugins/nestedHeaders/nestedHeaders.mjs +63 -16
  302. package/plugins/nestedHeaders/stateManager/index.js +1 -0
  303. package/plugins/nestedHeaders/stateManager/index.mjs +1 -0
  304. package/plugins/nestedRows/nestedRows.js +3 -0
  305. package/plugins/nestedRows/nestedRows.mjs +3 -0
  306. package/plugins/nestedRows/ui/headers.js +7 -1
  307. package/plugins/nestedRows/ui/headers.mjs +7 -1
  308. package/plugins/nestedRows/utils/rowMoveController.js +4 -0
  309. package/plugins/nestedRows/utils/rowMoveController.mjs +4 -0
  310. package/plugins/persistentState/persistentState.js +4 -4
  311. package/plugins/persistentState/persistentState.mjs +1 -1
  312. package/plugins/stretchColumns/calculator.js +162 -0
  313. package/plugins/stretchColumns/calculator.mjs +158 -0
  314. package/plugins/stretchColumns/index.d.ts +1 -0
  315. package/plugins/stretchColumns/index.js +7 -0
  316. package/plugins/stretchColumns/index.mjs +1 -0
  317. package/plugins/stretchColumns/strategies/_base.js +85 -0
  318. package/plugins/stretchColumns/strategies/_base.mjs +81 -0
  319. package/plugins/stretchColumns/strategies/all.js +71 -0
  320. package/plugins/stretchColumns/strategies/all.mjs +67 -0
  321. package/plugins/stretchColumns/strategies/last.js +79 -0
  322. package/plugins/stretchColumns/strategies/last.mjs +75 -0
  323. package/plugins/stretchColumns/stretchColumns.d.ts +11 -0
  324. package/plugins/stretchColumns/stretchColumns.js +222 -0
  325. package/plugins/stretchColumns/stretchColumns.mjs +218 -0
  326. package/plugins/trimRows/trimRows.js +2 -0
  327. package/plugins/trimRows/trimRows.mjs +2 -0
  328. package/plugins/undoRedo/undoRedo.js +9 -5
  329. package/plugins/undoRedo/undoRedo.mjs +8 -3
  330. package/renderers/checkboxRenderer/checkboxRenderer.js +19 -8
  331. package/renderers/checkboxRenderer/checkboxRenderer.mjs +18 -7
  332. package/selection/index.js +2 -0
  333. package/selection/range.js +2 -0
  334. package/selection/range.mjs +2 -0
  335. package/selection/selection.js +7 -2
  336. package/selection/selection.mjs +7 -2
  337. package/selection/utils.js +2 -0
  338. package/selection/utils.mjs +2 -0
  339. package/settings.d.ts +4 -1
  340. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +1 -1
  341. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +1 -1
  342. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +1 -1
  343. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +1 -1
  344. package/shortcutContexts/commands/index.js +2 -0
  345. package/shortcutContexts/commands/index.mjs +2 -0
  346. package/shortcutContexts/commands/scrollToFocusedCell.js +4 -4
  347. package/shortcutContexts/commands/scrollToFocusedCell.mjs +4 -4
  348. package/shortcutContexts/index.js +2 -0
  349. package/shortcutContexts/index.mjs +2 -0
  350. package/shortcuts/context.js +3 -0
  351. package/shortcuts/context.mjs +3 -0
  352. package/shortcuts/recorder.js +3 -3
  353. package/shortcuts/recorder.mjs +3 -3
  354. package/shortcuts/utils.js +1 -0
  355. package/shortcuts/utils.mjs +1 -0
  356. package/styles/handsontable.css +2307 -0
  357. package/styles/handsontable.min.css +30 -0
  358. package/styles/ht-theme-horizon.css +607 -0
  359. package/styles/ht-theme-horizon.min.css +30 -0
  360. package/styles/ht-theme-main.css +613 -0
  361. package/styles/ht-theme-main.min.css +30 -0
  362. package/tableView.js +205 -33
  363. package/tableView.mjs +206 -34
  364. package/translations/changesObservable/observable.js +2 -0
  365. package/translations/changesObservable/observable.mjs +2 -0
  366. package/translations/index.js +2 -0
  367. package/translations/indexMapper.js +4 -0
  368. package/translations/indexMapper.mjs +4 -0
  369. package/translations/mapCollections/index.js +2 -0
  370. package/translations/mapCollections/mapCollection.js +2 -0
  371. package/translations/mapCollections/mapCollection.mjs +2 -0
  372. package/translations/maps/index.js +2 -0
  373. package/translations/maps/linkedPhysicalIndexToValueMap.js +1 -0
  374. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +1 -0
  375. package/translations/maps/utils/actionsOnIndexes.js +2 -0
  376. package/translations/maps/utils/actionsOnIndexes.mjs +2 -0
  377. package/translations/maps/utils/physicallyIndexed.js +1 -0
  378. package/translations/maps/utils/physicallyIndexed.mjs +1 -0
  379. package/utils/autoResize.js +11 -3
  380. package/utils/autoResize.mjs +11 -3
  381. package/utils/dataStructures/priorityMap.js +1 -0
  382. package/utils/dataStructures/priorityMap.mjs +1 -0
  383. package/utils/dataStructures/uniqueMap.js +2 -0
  384. package/utils/dataStructures/uniqueMap.mjs +2 -0
  385. package/utils/ghostTable.js +7 -3
  386. package/utils/ghostTable.mjs +7 -3
  387. package/utils/parseTable.js +4 -0
  388. package/utils/parseTable.mjs +4 -0
  389. package/3rdparty/walkontable/src/selection/border/constants.js +0 -15
  390. package/3rdparty/walkontable/src/selection/border/constants.mjs +0 -12
  391. package/3rdparty/walkontable/src/utils/columnStretching.js +0 -197
  392. package/3rdparty/walkontable/src/utils/columnStretching.mjs +0 -193
@@ -7,6 +7,11 @@ import "core-js/modules/es.set.is-subset-of.v2.js";
7
7
  import "core-js/modules/es.set.is-superset-of.v2.js";
8
8
  import "core-js/modules/es.set.symmetric-difference.v2.js";
9
9
  import "core-js/modules/es.set.union.v2.js";
10
+ import "core-js/modules/esnext.iterator.constructor.js";
11
+ import "core-js/modules/esnext.iterator.filter.js";
12
+ import "core-js/modules/esnext.iterator.for-each.js";
13
+ import "core-js/modules/esnext.iterator.map.js";
14
+ import "core-js/modules/esnext.iterator.reduce.js";
10
15
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
11
16
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
12
17
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -16,8 +21,8 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
16
21
  function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
17
22
  function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
18
23
  function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
19
- import { BasePlugin } from "../base/index.mjs";
20
- import Hooks from "../../pluginHooks.mjs";
24
+ import { BasePlugin, defaultMainSettingSymbol } from "../base/index.mjs";
25
+ import { Hooks } from "../../core/hooks/index.mjs";
21
26
  import MergedCellsCollection from "./cellsCollection.mjs";
22
27
  import MergedCellCoords from "./cellCoords.mjs";
23
28
  import AutofillCalculations from "./calculations/autofill.mjs";
@@ -26,7 +31,7 @@ import toggleMergeItem from "./contextMenuItem/toggleMerge.mjs";
26
31
  import { arrayEach } from "../../helpers/array.mjs";
27
32
  import { isObject } from "../../helpers/object.mjs";
28
33
  import { warn } from "../../helpers/console.mjs";
29
- import { rangeEach } from "../../helpers/number.mjs";
34
+ import { rangeEach, clamp } from "../../helpers/number.mjs";
30
35
  import { getStyle } from "../../helpers/dom/element.mjs";
31
36
  import { isChrome } from "../../helpers/browser.mjs";
32
37
  import { FocusOrder } from "./focusOrder.mjs";
@@ -149,6 +154,13 @@ export class MergeCells extends BasePlugin {
149
154
  static get PLUGIN_PRIORITY() {
150
155
  return PLUGIN_PRIORITY;
151
156
  }
157
+ static get DEFAULT_SETTINGS() {
158
+ return {
159
+ [defaultMainSettingSymbol]: 'cells',
160
+ virtualized: false,
161
+ cells: []
162
+ };
163
+ }
152
164
  /**
153
165
  * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}
154
166
  * hook and if it returns `true` then the {@link MergeCells#enablePlugin} method is called.
@@ -236,102 +248,108 @@ export class MergeCells extends BasePlugin {
236
248
  }
237
249
  return _assertClassBrand(_MergeCells_brand, _this, _onModifyGetCellCoords).call(_this, ...args);
238
250
  });
239
- this.addHook('afterIsMultipleSelection', function () {
251
+ this.addHook('modifyGetCoordsElement', function () {
240
252
  for (var _len12 = arguments.length, args = new Array(_len12), _key12 = 0; _key12 < _len12; _key12++) {
241
253
  args[_key12] = arguments[_key12];
242
254
  }
255
+ return _assertClassBrand(_MergeCells_brand, _this, _onModifyGetCellCoords).call(_this, ...args);
256
+ });
257
+ this.addHook('afterIsMultipleSelection', function () {
258
+ for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {
259
+ args[_key13] = arguments[_key13];
260
+ }
243
261
  return _assertClassBrand(_MergeCells_brand, _this, _onAfterIsMultipleSelection).call(_this, ...args);
244
262
  });
245
263
  this.addHook('afterRenderer', function () {
246
264
  return _classPrivateFieldGet(_cellRenderer, _this).after(...arguments);
247
265
  });
248
266
  this.addHook('afterContextMenuDefaultOptions', function () {
249
- for (var _len13 = arguments.length, args = new Array(_len13), _key13 = 0; _key13 < _len13; _key13++) {
250
- args[_key13] = arguments[_key13];
267
+ for (var _len14 = arguments.length, args = new Array(_len14), _key14 = 0; _key14 < _len14; _key14++) {
268
+ args[_key14] = arguments[_key14];
251
269
  }
252
270
  return _assertClassBrand(_MergeCells_brand, _this, _addMergeActionsToContextMenu).call(_this, ...args);
253
271
  });
254
272
  this.addHook('afterGetCellMeta', function () {
255
- for (var _len14 = arguments.length, args = new Array(_len14), _key14 = 0; _key14 < _len14; _key14++) {
256
- args[_key14] = arguments[_key14];
273
+ for (var _len15 = arguments.length, args = new Array(_len15), _key15 = 0; _key15 < _len15; _key15++) {
274
+ args[_key15] = arguments[_key15];
257
275
  }
258
276
  return _assertClassBrand(_MergeCells_brand, _this, _onAfterGetCellMeta).call(_this, ...args);
259
277
  });
260
278
  this.addHook('afterViewportRowCalculatorOverride', function () {
261
- for (var _len15 = arguments.length, args = new Array(_len15), _key15 = 0; _key15 < _len15; _key15++) {
262
- args[_key15] = arguments[_key15];
279
+ for (var _len16 = arguments.length, args = new Array(_len16), _key16 = 0; _key16 < _len16; _key16++) {
280
+ args[_key16] = arguments[_key16];
263
281
  }
264
282
  return _assertClassBrand(_MergeCells_brand, _this, _onAfterViewportRowCalculatorOverride).call(_this, ...args);
265
283
  });
266
284
  this.addHook('afterViewportColumnCalculatorOverride', function () {
267
- for (var _len16 = arguments.length, args = new Array(_len16), _key16 = 0; _key16 < _len16; _key16++) {
268
- args[_key16] = arguments[_key16];
285
+ for (var _len17 = arguments.length, args = new Array(_len17), _key17 = 0; _key17 < _len17; _key17++) {
286
+ args[_key17] = arguments[_key17];
269
287
  }
270
288
  return _assertClassBrand(_MergeCells_brand, _this, _onAfterViewportColumnCalculatorOverride).call(_this, ...args);
271
289
  });
272
290
  this.addHook('modifyAutofillRange', function () {
273
- for (var _len17 = arguments.length, args = new Array(_len17), _key17 = 0; _key17 < _len17; _key17++) {
274
- args[_key17] = arguments[_key17];
291
+ for (var _len18 = arguments.length, args = new Array(_len18), _key18 = 0; _key18 < _len18; _key18++) {
292
+ args[_key18] = arguments[_key18];
275
293
  }
276
294
  return _assertClassBrand(_MergeCells_brand, _this, _onModifyAutofillRange).call(_this, ...args);
277
295
  });
278
296
  this.addHook('afterCreateCol', function () {
279
- for (var _len18 = arguments.length, args = new Array(_len18), _key18 = 0; _key18 < _len18; _key18++) {
280
- args[_key18] = arguments[_key18];
297
+ for (var _len19 = arguments.length, args = new Array(_len19), _key19 = 0; _key19 < _len19; _key19++) {
298
+ args[_key19] = arguments[_key19];
281
299
  }
282
300
  return _assertClassBrand(_MergeCells_brand, _this, _onAfterCreateCol).call(_this, ...args);
283
301
  });
284
302
  this.addHook('afterRemoveCol', function () {
285
- for (var _len19 = arguments.length, args = new Array(_len19), _key19 = 0; _key19 < _len19; _key19++) {
286
- args[_key19] = arguments[_key19];
303
+ for (var _len20 = arguments.length, args = new Array(_len20), _key20 = 0; _key20 < _len20; _key20++) {
304
+ args[_key20] = arguments[_key20];
287
305
  }
288
306
  return _assertClassBrand(_MergeCells_brand, _this, _onAfterRemoveCol).call(_this, ...args);
289
307
  });
290
308
  this.addHook('afterCreateRow', function () {
291
- for (var _len20 = arguments.length, args = new Array(_len20), _key20 = 0; _key20 < _len20; _key20++) {
292
- args[_key20] = arguments[_key20];
309
+ for (var _len21 = arguments.length, args = new Array(_len21), _key21 = 0; _key21 < _len21; _key21++) {
310
+ args[_key21] = arguments[_key21];
293
311
  }
294
312
  return _assertClassBrand(_MergeCells_brand, _this, _onAfterCreateRow).call(_this, ...args);
295
313
  });
296
314
  this.addHook('afterRemoveRow', function () {
297
- for (var _len21 = arguments.length, args = new Array(_len21), _key21 = 0; _key21 < _len21; _key21++) {
298
- args[_key21] = arguments[_key21];
315
+ for (var _len22 = arguments.length, args = new Array(_len22), _key22 = 0; _key22 < _len22; _key22++) {
316
+ args[_key22] = arguments[_key22];
299
317
  }
300
318
  return _assertClassBrand(_MergeCells_brand, _this, _onAfterRemoveRow).call(_this, ...args);
301
319
  });
302
320
  this.addHook('afterChange', function () {
303
- for (var _len22 = arguments.length, args = new Array(_len22), _key22 = 0; _key22 < _len22; _key22++) {
304
- args[_key22] = arguments[_key22];
321
+ for (var _len23 = arguments.length, args = new Array(_len23), _key23 = 0; _key23 < _len23; _key23++) {
322
+ args[_key23] = arguments[_key23];
305
323
  }
306
324
  return _assertClassBrand(_MergeCells_brand, _this, _onAfterChange).call(_this, ...args);
307
325
  });
308
326
  this.addHook('beforeDrawBorders', function () {
309
- for (var _len23 = arguments.length, args = new Array(_len23), _key23 = 0; _key23 < _len23; _key23++) {
310
- args[_key23] = arguments[_key23];
327
+ for (var _len24 = arguments.length, args = new Array(_len24), _key24 = 0; _key24 < _len24; _key24++) {
328
+ args[_key24] = arguments[_key24];
311
329
  }
312
330
  return _assertClassBrand(_MergeCells_brand, _this, _onBeforeDrawAreaBorders).call(_this, ...args);
313
331
  });
314
332
  this.addHook('afterDrawSelection', function () {
315
- for (var _len24 = arguments.length, args = new Array(_len24), _key24 = 0; _key24 < _len24; _key24++) {
316
- args[_key24] = arguments[_key24];
333
+ for (var _len25 = arguments.length, args = new Array(_len25), _key25 = 0; _key25 < _len25; _key25++) {
334
+ args[_key25] = arguments[_key25];
317
335
  }
318
336
  return _assertClassBrand(_MergeCells_brand, _this, _onAfterDrawSelection).call(_this, ...args);
319
337
  });
320
338
  this.addHook('beforeRemoveCellClassNames', function () {
321
- for (var _len25 = arguments.length, args = new Array(_len25), _key25 = 0; _key25 < _len25; _key25++) {
322
- args[_key25] = arguments[_key25];
339
+ for (var _len26 = arguments.length, args = new Array(_len26), _key26 = 0; _key26 < _len26; _key26++) {
340
+ args[_key26] = arguments[_key26];
323
341
  }
324
342
  return _assertClassBrand(_MergeCells_brand, _this, _onBeforeRemoveCellClassNames).call(_this, ...args);
325
343
  });
326
344
  this.addHook('beforeBeginEditing', function () {
327
- for (var _len26 = arguments.length, args = new Array(_len26), _key26 = 0; _key26 < _len26; _key26++) {
328
- args[_key26] = arguments[_key26];
345
+ for (var _len27 = arguments.length, args = new Array(_len27), _key27 = 0; _key27 < _len27; _key27++) {
346
+ args[_key27] = arguments[_key27];
329
347
  }
330
348
  return _assertClassBrand(_MergeCells_brand, _this, _onBeforeBeginEditing).call(_this, ...args);
331
349
  });
332
350
  this.addHook('modifyRowHeightByOverlayName', function () {
333
- for (var _len27 = arguments.length, args = new Array(_len27), _key27 = 0; _key27 < _len27; _key27++) {
334
- args[_key27] = arguments[_key27];
351
+ for (var _len28 = arguments.length, args = new Array(_len28), _key28 = 0; _key28 < _len28; _key28++) {
352
+ args[_key28] = arguments[_key28];
335
353
  }
336
354
  return _assertClassBrand(_MergeCells_brand, _this, _onModifyRowHeightByOverlayName).call(_this, ...args);
337
355
  });
@@ -362,10 +380,9 @@ export class MergeCells extends BasePlugin {
362
380
  * - [`mergeCells`](@/api/options.md#mergecells)
363
381
  */
364
382
  updatePlugin() {
365
- const settings = this.hot.getSettings()[PLUGIN_KEY];
366
383
  this.disablePlugin();
367
384
  this.enablePlugin();
368
- this.generateFromSettings(settings);
385
+ this.generateFromSettings();
369
386
  super.updatePlugin();
370
387
  }
371
388
 
@@ -450,13 +467,9 @@ export class MergeCells extends BasePlugin {
450
467
  * Generates the merged cells from the settings provided to the plugin.
451
468
  *
452
469
  * @private
453
- * @param {Array|boolean} settings The settings provided to the plugin.
454
470
  */
455
- generateFromSettings(settings) {
456
- if (!Array.isArray(settings)) {
457
- return;
458
- }
459
- const validSettings = settings.filter(mergeCellInfo => this.validateSetting(mergeCellInfo));
471
+ generateFromSettings() {
472
+ const validSettings = this.getSetting('cells').filter(mergeCellInfo => this.validateSetting(mergeCellInfo));
460
473
  const nonOverlappingSettings = this.mergedCellsCollection.filterOverlappingMergeCells(validSettings);
461
474
  const populatedNulls = [];
462
475
  nonOverlappingSettings.forEach(mergeCellInfo => {
@@ -898,7 +911,7 @@ export class MergeCells extends BasePlugin {
898
911
  */
899
912
  }
900
913
  function _onAfterInit() {
901
- this.generateFromSettings(this.hot.getSettings()[PLUGIN_KEY]);
914
+ this.generateFromSettings();
902
915
  this.hot.render();
903
916
  }
904
917
  function _onAfterIsMultipleSelection(isMultiple) {
@@ -1092,13 +1105,16 @@ function _onBeforeSelectionHighlightSet() {
1092
1105
  }
1093
1106
  }
1094
1107
  /**
1095
- * `modifyGetCellCoords` hook callback. Swaps the `getCell` coords with the merged parent coords.
1108
+ * The `modifyGetCellCoords` hook callback allows forwarding all `getCell` calls that point in-between the merged cells
1109
+ * to the root element of the cell.
1096
1110
  *
1097
1111
  * @param {number} row Row index.
1098
1112
  * @param {number} column Visual column index.
1113
+ * @param {boolean} topmost Indicates if the requested element belongs to the topmost layer (any overlay) or not.
1114
+ * @param {string} [source] String that identifies how this coords change will be processed.
1099
1115
  * @returns {Array|undefined} Visual coordinates of the merge.
1100
1116
  */
1101
- function _onModifyGetCellCoords(row, column) {
1117
+ function _onModifyGetCellCoords(row, column, topmost, source) {
1102
1118
  if (row < 0 || column < 0) {
1103
1119
  return;
1104
1120
  }
@@ -1112,11 +1128,17 @@ function _onModifyGetCellCoords(row, column) {
1112
1128
  colspan,
1113
1129
  rowspan
1114
1130
  } = mergeParent;
1115
- return [
1116
- // Most top-left merged cell coords.
1117
- mergeRow, mergeColumn,
1118
- // Most bottom-right merged cell coords.
1119
- mergeRow + rowspan - 1, mergeColumn + colspan - 1];
1131
+ const topStartRow = mergeRow;
1132
+ const topStartColumn = mergeColumn;
1133
+ const bottomEndRow = mergeRow + rowspan - 1;
1134
+ const bottomEndColumn = mergeColumn + colspan - 1;
1135
+ if (source === 'render' && this.getSetting('virtualized')) {
1136
+ const overlayName = this.hot.view.getActiveOverlayName();
1137
+ const firstRenderedRow = ['top', 'top_inline_start_corner'].includes(overlayName) ? 0 : this.hot.getFirstRenderedVisibleRow();
1138
+ const firstRenderedColumn = ['inline_start', 'top_inline_start_corner', 'bottom_inline_start_corner'].includes(overlayName) ? 0 : this.hot.getFirstRenderedVisibleColumn();
1139
+ return [clamp(firstRenderedRow, topStartRow, bottomEndRow), clamp(firstRenderedColumn, topStartColumn, bottomEndColumn), clamp(this.hot.getLastRenderedVisibleRow(), topStartRow, bottomEndRow), clamp(this.hot.getLastRenderedVisibleColumn(), topStartColumn, bottomEndColumn)];
1140
+ }
1141
+ return [topStartRow, topStartColumn, bottomEndRow, bottomEndColumn];
1120
1142
  }
1121
1143
  /**
1122
1144
  * `afterContextMenuDefaultOptions` hook callback.
@@ -1252,11 +1274,17 @@ function _onAfterGetCellMeta(row, col, cellProperties) {
1252
1274
  * @param {object} calc The row calculator object.
1253
1275
  */
1254
1276
  function _onAfterViewportRowCalculatorOverride(calc) {
1277
+ if (this.getSetting('virtualized')) {
1278
+ return;
1279
+ }
1255
1280
  const nrOfColumns = this.hot.countCols();
1256
1281
  this.modifyViewportRowStart(calc, nrOfColumns);
1257
1282
  this.modifyViewportRowEnd(calc, nrOfColumns);
1258
1283
  }
1259
1284
  function _onAfterViewportColumnCalculatorOverride(calc) {
1285
+ if (this.getSetting('virtualized')) {
1286
+ return;
1287
+ }
1260
1288
  const nrOfRows = this.hot.countRows();
1261
1289
  this.modifyViewportColumnStart(calc, nrOfRows);
1262
1290
  this.modifyViewportColumnEnd(calc, nrOfRows);
@@ -1415,8 +1443,8 @@ function _onModifyRowHeightByOverlayName(height, row, overlayType) {
1415
1443
  let firstColumn;
1416
1444
  let lastColumn;
1417
1445
  if (overlayType === 'master') {
1418
- firstColumn = this.hot.view.getFirstRenderedVisibleColumn();
1419
- lastColumn = this.hot.view.getLastRenderedVisibleColumn();
1446
+ firstColumn = this.hot.getFirstRenderedVisibleColumn();
1447
+ lastColumn = this.hot.getLastRenderedVisibleColumn();
1420
1448
  } else {
1421
1449
  const activeOverlay = this.hot.view.getOverlayByName(overlayType);
1422
1450
  firstColumn = this.hot.columnIndexMapper.getVisualFromRenderableIndex(activeOverlay.clone.wtTable.getFirstRenderedColumn());
@@ -1429,7 +1457,7 @@ function _onModifyRowHeightByOverlayName(height, row, overlayType) {
1429
1457
  const from = this.hot._createCellCoords(row, firstColumn);
1430
1458
  const to = this.hot._createCellCoords(row, lastColumn);
1431
1459
  const viewportRange = this.hot._createCellRange(from, from, to);
1432
- const mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(viewportRange);
1460
+ const mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(viewportRange, true);
1433
1461
  const maxRowspan = mergedCellsWithinRange.reduce((acc, _ref) => {
1434
1462
  let {
1435
1463
  rowspan
@@ -1463,7 +1491,7 @@ function _onModifyRowHeightByOverlayName(height, row, overlayType) {
1463
1491
  * @returns {number}
1464
1492
  */
1465
1493
  function _sumCellsHeights(row, rowspan) {
1466
- const defaultHeight = this.hot.view._wt.wtSettings.getSettingPure('defaultRowHeight');
1494
+ const defaultHeight = this.hot.view.getDefaultRowHeight();
1467
1495
  const autoRowSizePlugin = this.hot.getPlugin('autoRowSize');
1468
1496
  let height = 0;
1469
1497
  for (let i = row; i < row + rowspan; i++) {
@@ -31,7 +31,7 @@ function createMergeCellRenderer(plugin) {
31
31
  *
32
32
  * @private
33
33
  * @param {HTMLElement} TD The cell to be modified.
34
- * @param {number} row Row index.
34
+ * @param {number} row Visual row index.
35
35
  * @param {number} col Visual column index.
36
36
  */
37
37
  function after(TD, row, col) {
@@ -49,13 +49,23 @@ function createMergeCellRenderer(plugin) {
49
49
  rowspan: origRowspan
50
50
  } = mergedCell;
51
51
  const [lastMergedRowIndex, lastMergedColumnIndex] = plugin.translateMergedCellToRenderable(origRow, origRowspan, origColumn, origColspan);
52
+ const isVirtualRenderingEnabled = plugin.getSetting('virtualized');
52
53
  const renderedRowIndex = rowMapper.getRenderableFromVisualIndex(row);
53
54
  const renderedColumnIndex = columnMapper.getRenderableFromVisualIndex(col);
54
55
  const maxRowSpan = lastMergedRowIndex - renderedRowIndex + 1; // Number of rendered columns.
55
56
  const maxColSpan = lastMergedColumnIndex - renderedColumnIndex + 1; // Number of rendered columns.
56
57
 
57
- const notHiddenRow = rowMapper.getNearestNotHiddenIndex(origRow, 1);
58
- const notHiddenColumn = columnMapper.getNearestNotHiddenIndex(origColumn, 1);
58
+ let notHiddenRow = rowMapper.getNearestNotHiddenIndex(origRow, 1);
59
+ let notHiddenColumn = columnMapper.getNearestNotHiddenIndex(origColumn, 1);
60
+ if (isVirtualRenderingEnabled) {
61
+ const overlayName = hot.view.getActiveOverlayName();
62
+ if (!['top', 'top_inline_start_corner'].includes(overlayName)) {
63
+ notHiddenRow = Math.max(notHiddenRow, hot.getFirstRenderedVisibleRow());
64
+ }
65
+ if (!['inline_start', 'top_inline_start_corner', 'bottom_inline_start_corner'].includes(overlayName)) {
66
+ notHiddenColumn = Math.max(notHiddenColumn, hot.getFirstRenderedVisibleColumn());
67
+ }
68
+ }
59
69
  const notHiddenRowspan = Math.min(origRowspan, maxRowSpan);
60
70
  const notHiddenColspan = Math.min(origColspan, maxColSpan);
61
71
  if (notHiddenRow === row && notHiddenColumn === col) {
@@ -27,7 +27,7 @@ export function createMergeCellRenderer(plugin) {
27
27
  *
28
28
  * @private
29
29
  * @param {HTMLElement} TD The cell to be modified.
30
- * @param {number} row Row index.
30
+ * @param {number} row Visual row index.
31
31
  * @param {number} col Visual column index.
32
32
  */
33
33
  function after(TD, row, col) {
@@ -45,13 +45,23 @@ export function createMergeCellRenderer(plugin) {
45
45
  rowspan: origRowspan
46
46
  } = mergedCell;
47
47
  const [lastMergedRowIndex, lastMergedColumnIndex] = plugin.translateMergedCellToRenderable(origRow, origRowspan, origColumn, origColspan);
48
+ const isVirtualRenderingEnabled = plugin.getSetting('virtualized');
48
49
  const renderedRowIndex = rowMapper.getRenderableFromVisualIndex(row);
49
50
  const renderedColumnIndex = columnMapper.getRenderableFromVisualIndex(col);
50
51
  const maxRowSpan = lastMergedRowIndex - renderedRowIndex + 1; // Number of rendered columns.
51
52
  const maxColSpan = lastMergedColumnIndex - renderedColumnIndex + 1; // Number of rendered columns.
52
53
 
53
- const notHiddenRow = rowMapper.getNearestNotHiddenIndex(origRow, 1);
54
- const notHiddenColumn = columnMapper.getNearestNotHiddenIndex(origColumn, 1);
54
+ let notHiddenRow = rowMapper.getNearestNotHiddenIndex(origRow, 1);
55
+ let notHiddenColumn = columnMapper.getNearestNotHiddenIndex(origColumn, 1);
56
+ if (isVirtualRenderingEnabled) {
57
+ const overlayName = hot.view.getActiveOverlayName();
58
+ if (!['top', 'top_inline_start_corner'].includes(overlayName)) {
59
+ notHiddenRow = Math.max(notHiddenRow, hot.getFirstRenderedVisibleRow());
60
+ }
61
+ if (!['inline_start', 'top_inline_start_corner', 'bottom_inline_start_corner'].includes(overlayName)) {
62
+ notHiddenColumn = Math.max(notHiddenColumn, hot.getFirstRenderedVisibleColumn());
63
+ }
64
+ }
55
65
  const notHiddenRowspan = Math.min(origRowspan, maxRowSpan);
56
66
  const notHiddenColspan = Math.min(origColspan, maxColSpan);
57
67
  if (notHiddenRow === row && notHiddenColumn === col) {
@@ -4,6 +4,8 @@ exports.__esModule = true;
4
4
  exports.getClassesToAdd = getClassesToAdd;
5
5
  exports.getClassesToRemove = getClassesToRemove;
6
6
  require("core-js/modules/es.array.push.js");
7
+ require("core-js/modules/esnext.iterator.constructor.js");
8
+ require("core-js/modules/esnext.iterator.filter.js");
7
9
  const COLUMN_ORDER_PREFIX = 'sort';
8
10
 
9
11
  /**
@@ -1,4 +1,6 @@
1
1
  import "core-js/modules/es.array.push.js";
2
+ import "core-js/modules/esnext.iterator.constructor.js";
3
+ import "core-js/modules/esnext.iterator.filter.js";
2
4
  const COLUMN_ORDER_PREFIX = 'sort';
3
5
 
4
6
  /**
@@ -3,6 +3,8 @@
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.error.cause.js");
5
5
  require("core-js/modules/es.array.push.js");
6
+ require("core-js/modules/esnext.iterator.constructor.js");
7
+ require("core-js/modules/esnext.iterator.for-each.js");
6
8
  var _element = require("../../helpers/dom/element");
7
9
  var _number = require("../../helpers/number");
8
10
  var _templateLiteralTag = require("../../helpers/templateLiteralTag");
@@ -75,6 +77,7 @@ var _stateManager = /*#__PURE__*/new WeakMap();
75
77
  var _hidingIndexMapObserver = /*#__PURE__*/new WeakMap();
76
78
  var _focusInitialCoords = /*#__PURE__*/new WeakMap();
77
79
  var _isColumnsSelectionInProgress = /*#__PURE__*/new WeakMap();
80
+ var _recentlyHighlightCoords = /*#__PURE__*/new WeakMap();
78
81
  var _NestedHeaders_brand = /*#__PURE__*/new WeakSet();
79
82
  class NestedHeaders extends _base.BasePlugin {
80
83
  constructor() {
@@ -109,6 +112,14 @@ class NestedHeaders extends _base.BasePlugin {
109
112
  * @type {boolean}
110
113
  */
111
114
  _classPrivateFieldInitSpec(this, _isColumnsSelectionInProgress, false);
115
+ /**
116
+ * Keeps the last highlight position made by column selection. The coords are necessary to scroll
117
+ * the viewport to the correct position when the nested header is clicked when the `navigableHeaders`
118
+ * option is disabled.
119
+ *
120
+ * @type {CellCoords | null}
121
+ */
122
+ _classPrivateFieldInitSpec(this, _recentlyHighlightCoords, null);
112
123
  /**
113
124
  * Custom helper for getting widths of the nested headers.
114
125
  *
@@ -529,9 +540,13 @@ function _updateFocusHighlightPosition() {
529
540
  * indexes are used.
530
541
  *
531
542
  * @param {number} visualColumn A visual column index to which the viewport will be scrolled.
543
+ * @param {{ value: 'auto' | 'start' | 'end' }} snapping If `'start'`, viewport is scrolled to show
544
+ * the cell on the left of the table. If `'end'`, viewport is scrolled to show the cell on the right of
545
+ * the table. When `'auto'`, the viewport is scrolled only when the column is outside of the viewport.
532
546
  * @returns {number}
533
547
  */
534
- function _onBeforeViewportScrollHorizontally(visualColumn) {
548
+ function _onBeforeViewportScrollHorizontally(visualColumn, snapping) {
549
+ var _classPrivateFieldGet4;
535
550
  const selection = this.hot.getSelectedRangeLast();
536
551
  if (!selection) {
537
552
  return visualColumn;
@@ -539,20 +554,50 @@ function _onBeforeViewportScrollHorizontally(visualColumn) {
539
554
  const {
540
555
  highlight
541
556
  } = selection;
542
- const isNestedHeadersRange = highlight.isHeader() && highlight.col >= 0;
557
+ const {
558
+ navigableHeaders
559
+ } = this.hot.getSettings();
560
+ const isSelectedByColumnHeader = this.hot.selection.isSelectedByColumnHeader();
561
+ const highlightRow = navigableHeaders ? highlight.row : (_classPrivateFieldGet4 = _classPrivateFieldGet(_recentlyHighlightCoords, this)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.row;
562
+ const highlightColumn = isSelectedByColumnHeader ? visualColumn : highlight.col;
563
+ const isNestedHeadersRange = highlightRow < 0 && highlightColumn >= 0;
564
+ _classPrivateFieldSet(_recentlyHighlightCoords, this, null);
543
565
  if (!isNestedHeadersRange) {
544
566
  return visualColumn;
545
567
  }
546
- const firstColumn = this.hot.view.getFirstFullyVisibleColumn();
547
- const lastColumn = this.hot.view.getLastFullyVisibleColumn();
548
- const mostLeftColumnIndex = _classPrivateFieldGet(_stateManager, this).findLeftMostColumnIndex(highlight.row, highlight.col);
549
- const mostRightColumnIndex = _classPrivateFieldGet(_stateManager, this).findRightMostColumnIndex(highlight.row, highlight.col);
568
+ const firstVisibleColumn = this.hot.getFirstFullyVisibleColumn();
569
+ const lastVisibleColumn = this.hot.getLastFullyVisibleColumn();
570
+ const viewportWidth = lastVisibleColumn - firstVisibleColumn + 1;
571
+ const mostLeftColumnIndex = _classPrivateFieldGet(_stateManager, this).findLeftMostColumnIndex(highlightRow, highlightColumn);
572
+ const mostRightColumnIndex = _classPrivateFieldGet(_stateManager, this).findRightMostColumnIndex(highlightRow, highlightColumn);
573
+ const headerWidth = mostRightColumnIndex - mostLeftColumnIndex + 1;
550
574
 
551
- // do not scroll the viewport when the header is wider than the viewport
552
- if (mostLeftColumnIndex < firstColumn && mostRightColumnIndex > lastColumn) {
553
- return visualColumn;
575
+ // scroll the viewport always to the left when the header is wider than the viewport
576
+ if (mostLeftColumnIndex < firstVisibleColumn && mostRightColumnIndex > lastVisibleColumn) {
577
+ return mostLeftColumnIndex;
578
+ }
579
+ if (isSelectedByColumnHeader) {
580
+ let scrollColumnIndex = null;
581
+ if (mostLeftColumnIndex >= firstVisibleColumn && mostRightColumnIndex > lastVisibleColumn) {
582
+ if (headerWidth > viewportWidth) {
583
+ snapping.value = 'start';
584
+ scrollColumnIndex = mostLeftColumnIndex;
585
+ } else {
586
+ snapping.value = 'end';
587
+ scrollColumnIndex = mostRightColumnIndex;
588
+ }
589
+ } else if (mostLeftColumnIndex < firstVisibleColumn && mostRightColumnIndex <= lastVisibleColumn) {
590
+ if (headerWidth > viewportWidth) {
591
+ snapping.value = 'end';
592
+ scrollColumnIndex = mostRightColumnIndex;
593
+ } else {
594
+ snapping.value = 'start';
595
+ scrollColumnIndex = mostLeftColumnIndex;
596
+ }
597
+ }
598
+ return scrollColumnIndex;
554
599
  }
555
- return mostLeftColumnIndex < firstColumn ? mostLeftColumnIndex : mostRightColumnIndex;
600
+ return mostLeftColumnIndex <= firstVisibleColumn ? mostLeftColumnIndex : mostRightColumnIndex;
556
601
  }
557
602
  /**
558
603
  * Allows to control which header DOM element will be used to highlight.
@@ -623,13 +668,13 @@ function _onBeforeCopy(data, copyableRanges, _ref2) {
623
668
  }
624
669
  for (let column = startCol; column <= endCol; column++) {
625
670
  for (let row = startRow; row <= endRow; row++) {
626
- var _classPrivateFieldGet4;
671
+ var _classPrivateFieldGet5;
627
672
  const zeroBasedColumnHeaderLevel = rowsCount + row;
628
673
  const zeroBasedColumnIndex = column - startCol;
629
674
  if (zeroBasedColumnIndex === 0) {
630
675
  continue; // eslint-disable-line no-continue
631
676
  }
632
- const isRoot = (_classPrivateFieldGet4 = _classPrivateFieldGet(_stateManager, this).getHeaderTreeNodeData(row, column)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.isRoot;
677
+ const isRoot = (_classPrivateFieldGet5 = _classPrivateFieldGet(_stateManager, this).getHeaderTreeNodeData(row, column)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.isRoot;
633
678
  if (isRoot === false) {
634
679
  data[zeroBasedColumnHeaderLevel][zeroBasedColumnIndex] = '';
635
680
  }
@@ -707,7 +752,7 @@ function _onAfterOnCellMouseDown(event, coords) {
707
752
  * a boolean value that allows or disallows changing the selection for that particular area.
708
753
  */
709
754
  function _onBeforeOnCellMouseOver(event, coords, TD, controller) {
710
- if (!this.hot.view.isMouseDown()) {
755
+ if (!this.hot.view.isMouseDown() || controller.column) {
711
756
  return;
712
757
  }
713
758
  const headerNodeData = this._getHeaderTreeNodeDataByCoords(coords);
@@ -815,8 +860,9 @@ function _onModifyTransformStart(delta) {
815
860
  *
816
861
  * @param {CellCoords} from The coords object where the selection starts.
817
862
  * @param {CellCoords} to The coords object where the selection ends.
863
+ * @param {CellCoords} highlight The coords object where the focus is.
818
864
  */
819
- function _onBeforeSelectColumns(from, to) {
865
+ function _onBeforeSelectColumns(from, to, highlight) {
820
866
  const headerLevel = from.row;
821
867
  const startNodeData = this._getHeaderTreeNodeDataByCoords({
822
868
  row: headerLevel,
@@ -826,6 +872,7 @@ function _onBeforeSelectColumns(from, to) {
826
872
  row: headerLevel,
827
873
  col: to.col
828
874
  });
875
+ _classPrivateFieldSet(_recentlyHighlightCoords, this, highlight.clone());
829
876
  if (to.col < from.col) {
830
877
  // Column selection from right to left
831
878
  if (startNodeData) {
@@ -910,10 +957,10 @@ function _onModifyColWidth(width, column) {
910
957
  * @returns {string} Returns the column header value to update.
911
958
  */
912
959
  function _onModifyColumnHeaderValue(value, visualColumnIndex, headerLevel) {
913
- var _classPrivateFieldGet5;
960
+ var _classPrivateFieldGet6;
914
961
  const {
915
962
  label
916
- } = (_classPrivateFieldGet5 = _classPrivateFieldGet(_stateManager, this).getHeaderTreeNodeData(headerLevel, visualColumnIndex)) !== null && _classPrivateFieldGet5 !== void 0 ? _classPrivateFieldGet5 : {
963
+ } = (_classPrivateFieldGet6 = _classPrivateFieldGet(_stateManager, this).getHeaderTreeNodeData(headerLevel, visualColumnIndex)) !== null && _classPrivateFieldGet6 !== void 0 ? _classPrivateFieldGet6 : {
917
964
  label: ''
918
965
  };
919
966
  return label;