handsontable 14.4.0 → 14.5.0-next-7541a88-20240725

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 (467) hide show
  1. package/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleColumns.js +126 -0
  2. package/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleColumns.mjs +122 -0
  3. package/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleRows.js +119 -0
  4. package/3rdparty/walkontable/src/calculator/calculationType/fullyVisibleRows.mjs +115 -0
  5. package/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleColumns.js +125 -0
  6. package/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleColumns.mjs +121 -0
  7. package/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleRows.js +118 -0
  8. package/3rdparty/walkontable/src/calculator/calculationType/partiallyVisibleRows.mjs +114 -0
  9. package/3rdparty/walkontable/src/calculator/{renderAllColumns.js → calculationType/renderedAllColumns.js} +33 -10
  10. package/3rdparty/walkontable/src/calculator/{renderAllColumns.mjs → calculationType/renderedAllColumns.mjs} +32 -9
  11. package/3rdparty/walkontable/src/calculator/{renderAllRows.js → calculationType/renderedAllRows.js} +33 -10
  12. package/3rdparty/walkontable/src/calculator/{renderAllRows.mjs → calculationType/renderedAllRows.mjs} +32 -9
  13. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +37 -0
  14. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +33 -0
  15. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +37 -0
  16. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +33 -0
  17. package/3rdparty/walkontable/src/calculator/index.js +18 -17
  18. package/3rdparty/walkontable/src/calculator/index.mjs +11 -6
  19. package/3rdparty/walkontable/src/calculator/viewportBase.js +92 -0
  20. package/3rdparty/walkontable/src/calculator/viewportBase.mjs +88 -0
  21. package/3rdparty/walkontable/src/calculator/viewportColumns.js +52 -146
  22. package/3rdparty/walkontable/src/calculator/viewportColumns.mjs +52 -146
  23. package/3rdparty/walkontable/src/calculator/viewportRows.js +60 -142
  24. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +60 -142
  25. package/3rdparty/walkontable/src/cell/coords.js +3 -3
  26. package/3rdparty/walkontable/src/cell/coords.mjs +3 -3
  27. package/3rdparty/walkontable/src/cell/range.js +4 -4
  28. package/3rdparty/walkontable/src/cell/range.mjs +3 -3
  29. package/3rdparty/walkontable/src/core/_base.js +2 -2
  30. package/3rdparty/walkontable/src/core/_base.mjs +1 -1
  31. package/3rdparty/walkontable/src/core/clone.js +2 -2
  32. package/3rdparty/walkontable/src/core/clone.mjs +1 -1
  33. package/3rdparty/walkontable/src/core/core.js +17 -1
  34. package/3rdparty/walkontable/src/core/core.mjs +16 -0
  35. package/3rdparty/walkontable/src/event.js +2 -2
  36. package/3rdparty/walkontable/src/event.mjs +2 -2
  37. package/3rdparty/walkontable/src/facade/core.js +4 -1
  38. package/3rdparty/walkontable/src/facade/core.mjs +3 -0
  39. package/3rdparty/walkontable/src/filter/column.js +1 -1
  40. package/3rdparty/walkontable/src/filter/column.mjs +1 -1
  41. package/3rdparty/walkontable/src/filter/row.js +1 -1
  42. package/3rdparty/walkontable/src/filter/row.mjs +1 -1
  43. package/3rdparty/walkontable/src/index.js +3 -1
  44. package/3rdparty/walkontable/src/index.mjs +2 -2
  45. package/3rdparty/walkontable/src/overlay/_base.js +2 -2
  46. package/3rdparty/walkontable/src/overlay/_base.mjs +1 -1
  47. package/3rdparty/walkontable/src/overlay/bottom.js +2 -2
  48. package/3rdparty/walkontable/src/overlay/bottom.mjs +1 -1
  49. package/3rdparty/walkontable/src/overlay/bottomInlineStartCorner.js +1 -1
  50. package/3rdparty/walkontable/src/overlay/inlineStart.js +1 -1
  51. package/3rdparty/walkontable/src/overlay/top.js +2 -2
  52. package/3rdparty/walkontable/src/overlay/top.mjs +1 -1
  53. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.js +2 -2
  54. package/3rdparty/walkontable/src/overlay/topInlineStartCorner.mjs +1 -1
  55. package/3rdparty/walkontable/src/overlays.js +36 -4
  56. package/3rdparty/walkontable/src/overlays.mjs +36 -4
  57. package/3rdparty/walkontable/src/renderer/_base.js +2 -2
  58. package/3rdparty/walkontable/src/renderer/_base.mjs +1 -1
  59. package/3rdparty/walkontable/src/renderer/cells.js +2 -2
  60. package/3rdparty/walkontable/src/renderer/cells.mjs +1 -1
  61. package/3rdparty/walkontable/src/renderer/colGroup.js +1 -1
  62. package/3rdparty/walkontable/src/renderer/columnHeaders.js +1 -1
  63. package/3rdparty/walkontable/src/renderer/index.js +12 -1
  64. package/3rdparty/walkontable/src/renderer/index.mjs +11 -0
  65. package/3rdparty/walkontable/src/renderer/rowHeaders.js +2 -2
  66. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +1 -1
  67. package/3rdparty/walkontable/src/renderer/rows.js +2 -2
  68. package/3rdparty/walkontable/src/renderer/rows.mjs +1 -1
  69. package/3rdparty/walkontable/src/renderer/table.js +17 -2
  70. package/3rdparty/walkontable/src/renderer/table.mjs +17 -2
  71. package/3rdparty/walkontable/src/scroll.js +3 -3
  72. package/3rdparty/walkontable/src/scroll.mjs +3 -3
  73. package/3rdparty/walkontable/src/selection/index.js +1 -1
  74. package/3rdparty/walkontable/src/selection/manager.js +4 -4
  75. package/3rdparty/walkontable/src/selection/manager.mjs +3 -3
  76. package/3rdparty/walkontable/src/selection/scanner.js +3 -3
  77. package/3rdparty/walkontable/src/selection/scanner.mjs +3 -3
  78. package/3rdparty/walkontable/src/selection/selection.js +1 -1
  79. package/3rdparty/walkontable/src/settings.js +6 -2
  80. package/3rdparty/walkontable/src/settings.mjs +6 -2
  81. package/3rdparty/walkontable/src/table/bottom.js +1 -1
  82. package/3rdparty/walkontable/src/table/bottomInlineStartCorner.js +1 -1
  83. package/3rdparty/walkontable/src/table/inlineStart.js +1 -1
  84. package/3rdparty/walkontable/src/table/master.js +1 -1
  85. package/3rdparty/walkontable/src/table/top.js +1 -1
  86. package/3rdparty/walkontable/src/table/topInlineStartCorner.js +1 -1
  87. package/3rdparty/walkontable/src/table.js +8 -14
  88. package/3rdparty/walkontable/src/table.mjs +7 -13
  89. package/3rdparty/walkontable/src/utils/column.js +3 -2
  90. package/3rdparty/walkontable/src/utils/column.mjs +3 -2
  91. package/3rdparty/walkontable/src/utils/columnStretching.js +13 -22
  92. package/3rdparty/walkontable/src/utils/columnStretching.mjs +13 -22
  93. package/3rdparty/walkontable/src/utils/nodesPool.js +1 -1
  94. package/3rdparty/walkontable/src/utils/nodesPool.mjs +1 -1
  95. package/3rdparty/walkontable/src/utils/orderView/index.js +1 -1
  96. package/3rdparty/walkontable/src/utils/orderView/sharedView.js +1 -1
  97. package/3rdparty/walkontable/src/utils/orderView/view.js +2 -2
  98. package/3rdparty/walkontable/src/utils/orderView/view.mjs +1 -1
  99. package/3rdparty/walkontable/src/utils/orderView/viewSize.js +1 -1
  100. package/3rdparty/walkontable/src/utils/orderView/viewSize.mjs +1 -1
  101. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.js +2 -2
  102. package/3rdparty/walkontable/src/utils/orderView/viewSizeSet.mjs +1 -1
  103. package/3rdparty/walkontable/src/utils/row.js +17 -1
  104. package/3rdparty/walkontable/src/utils/row.mjs +17 -1
  105. package/3rdparty/walkontable/src/viewport.js +35 -46
  106. package/3rdparty/walkontable/src/viewport.mjs +36 -47
  107. package/CHANGELOG.md +27 -1
  108. package/base.js +3 -3
  109. package/base.mjs +2 -2
  110. package/cellTypes/registry.js +1 -1
  111. package/common.d.ts +3 -0
  112. package/core.d.ts +2 -0
  113. package/core.js +37 -32
  114. package/core.mjs +37 -32
  115. package/dataMap/dataMap.js +1 -1
  116. package/dataMap/dataMap.mjs +1 -1
  117. package/dataMap/dataSource.js +1 -1
  118. package/dataMap/dataSource.mjs +1 -1
  119. package/dataMap/index.js +1 -1
  120. package/dataMap/metaManager/index.js +1 -1
  121. package/dataMap/metaManager/lazyFactoryMap.js +1 -1
  122. package/dataMap/metaManager/lazyFactoryMap.mjs +1 -1
  123. package/dataMap/metaManager/metaLayers/cellMeta.js +2 -2
  124. package/dataMap/metaManager/metaLayers/cellMeta.mjs +1 -1
  125. package/dataMap/metaManager/metaLayers/columnMeta.js +2 -2
  126. package/dataMap/metaManager/metaLayers/columnMeta.mjs +1 -1
  127. package/dataMap/metaManager/metaLayers/globalMeta.js +2 -2
  128. package/dataMap/metaManager/metaLayers/globalMeta.mjs +1 -1
  129. package/dataMap/metaManager/metaLayers/tableMeta.js +1 -1
  130. package/dataMap/metaManager/metaLayers/tableMeta.mjs +1 -1
  131. package/dataMap/metaManager/metaSchema.js +25 -0
  132. package/dataMap/metaManager/metaSchema.mjs +25 -0
  133. package/dataMap/metaManager/mods/dynamicCellMeta.js +2 -2
  134. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
  135. package/dataMap/metaManager/mods/extendMetaProperties.js +3 -3
  136. package/dataMap/metaManager/mods/extendMetaProperties.mjs +3 -3
  137. package/dataMap/replaceData.js +1 -1
  138. package/dist/handsontable.css +134 -88
  139. package/dist/handsontable.full.css +134 -88
  140. package/dist/handsontable.full.js +4084 -2863
  141. package/dist/handsontable.full.min.css +7 -7
  142. package/dist/handsontable.full.min.js +153 -153
  143. package/dist/handsontable.js +4074 -2801
  144. package/dist/handsontable.min.css +6 -6
  145. package/dist/handsontable.min.js +33 -33
  146. package/dist/languages/all.js +3 -3
  147. package/dist/languages/ar-AR.js +3 -3
  148. package/dist/languages/cs-CZ.js +3 -3
  149. package/dist/languages/de-CH.js +3 -3
  150. package/dist/languages/de-DE.js +3 -3
  151. package/dist/languages/en-US.js +3 -3
  152. package/dist/languages/es-MX.js +3 -3
  153. package/dist/languages/fr-FR.js +3 -3
  154. package/dist/languages/hr-HR.js +3 -3
  155. package/dist/languages/it-IT.js +3 -3
  156. package/dist/languages/ja-JP.js +3 -3
  157. package/dist/languages/ko-KR.js +3 -3
  158. package/dist/languages/lv-LV.js +3 -3
  159. package/dist/languages/nb-NO.js +3 -3
  160. package/dist/languages/nl-NL.js +3 -3
  161. package/dist/languages/pl-PL.js +3 -3
  162. package/dist/languages/pt-BR.js +3 -3
  163. package/dist/languages/ru-RU.js +3 -3
  164. package/dist/languages/sr-SP.js +3 -3
  165. package/dist/languages/zh-CN.js +3 -3
  166. package/dist/languages/zh-TW.js +3 -3
  167. package/editorManager.js +4 -4
  168. package/editorManager.mjs +3 -3
  169. package/editors/autocompleteEditor/autocompleteEditor.js +3 -3
  170. package/editors/autocompleteEditor/autocompleteEditor.mjs +3 -3
  171. package/editors/baseEditor/baseEditor.js +2 -2
  172. package/editors/baseEditor/baseEditor.mjs +1 -1
  173. package/editors/dateEditor/dateEditor.js +2 -2
  174. package/editors/dateEditor/dateEditor.mjs +1 -1
  175. package/editors/dropdownEditor/dropdownEditor.js +1 -1
  176. package/editors/registry.js +1 -1
  177. package/editors/textEditor/textEditor.js +2 -2
  178. package/editors/textEditor/textEditor.mjs +1 -1
  179. package/eventManager.js +1 -1
  180. package/eventManager.mjs +1 -1
  181. package/focusManager.js +3 -3
  182. package/focusManager.mjs +3 -3
  183. package/helpers/dom/event.d.ts +1 -0
  184. package/helpers/dom/event.js +11 -0
  185. package/helpers/dom/event.mjs +10 -0
  186. package/helpers/mixed.js +3 -3
  187. package/helpers/mixed.mjs +2 -2
  188. package/helpers/string.js +1 -1
  189. package/i18n/languages/index.js +1 -1
  190. package/i18n/phraseFormatters/index.js +1 -1
  191. package/i18n/registry.js +1 -1
  192. package/index.js +1 -1
  193. package/languages/all.js +3 -3
  194. package/languages/ar-AR.js +3 -3
  195. package/languages/cs-CZ.js +3 -3
  196. package/languages/de-CH.js +3 -3
  197. package/languages/de-DE.js +3 -3
  198. package/languages/en-US.js +3 -3
  199. package/languages/es-MX.js +3 -3
  200. package/languages/fr-FR.js +3 -3
  201. package/languages/hr-HR.js +3 -3
  202. package/languages/index.js +3 -3
  203. package/languages/it-IT.js +3 -3
  204. package/languages/ja-JP.js +3 -3
  205. package/languages/ko-KR.js +3 -3
  206. package/languages/lv-LV.js +3 -3
  207. package/languages/nb-NO.js +3 -3
  208. package/languages/nl-NL.js +3 -3
  209. package/languages/pl-PL.js +3 -3
  210. package/languages/pt-BR.js +3 -3
  211. package/languages/ru-RU.js +3 -3
  212. package/languages/sr-SP.js +3 -3
  213. package/languages/zh-CN.js +3 -3
  214. package/languages/zh-TW.js +3 -3
  215. package/package.json +1 -5
  216. package/pluginHooks.d.ts +3 -1
  217. package/pluginHooks.js +12 -1
  218. package/pluginHooks.mjs +12 -1
  219. package/plugins/autoColumnSize/autoColumnSize.d.ts +1 -1
  220. package/plugins/autoColumnSize/autoColumnSize.js +124 -124
  221. package/plugins/autoColumnSize/autoColumnSize.mjs +124 -124
  222. package/plugins/autoRowSize/autoRowSize.d.ts +2 -1
  223. package/plugins/autoRowSize/autoRowSize.js +162 -100
  224. package/plugins/autoRowSize/autoRowSize.mjs +161 -99
  225. package/plugins/autofill/autofill.js +4 -4
  226. package/plugins/autofill/autofill.mjs +3 -3
  227. package/plugins/base/base.js +5 -5
  228. package/plugins/base/base.mjs +4 -4
  229. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +4 -4
  230. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +3 -3
  231. package/plugins/collapsibleColumns/collapsibleColumns.js +4 -4
  232. package/plugins/collapsibleColumns/collapsibleColumns.mjs +4 -4
  233. package/plugins/columnSorting/columnSorting.js +6 -5
  234. package/plugins/columnSorting/columnSorting.mjs +5 -4
  235. package/plugins/columnSorting/columnStatesManager.js +1 -1
  236. package/plugins/columnSorting/columnStatesManager.mjs +1 -1
  237. package/plugins/columnSorting/sortService/registry.js +1 -1
  238. package/plugins/columnSorting/utils.js +1 -1
  239. package/plugins/columnSummary/columnSummary.d.ts +1 -1
  240. package/plugins/columnSummary/columnSummary.js +4 -4
  241. package/plugins/columnSummary/columnSummary.mjs +3 -3
  242. package/plugins/columnSummary/endpoints.js +1 -1
  243. package/plugins/columnSummary/endpoints.mjs +1 -1
  244. package/plugins/comments/commentEditor.js +74 -39
  245. package/plugins/comments/commentEditor.mjs +73 -39
  246. package/plugins/comments/comments.js +25 -44
  247. package/plugins/comments/comments.mjs +25 -44
  248. package/plugins/comments/displaySwitch.js +2 -2
  249. package/plugins/comments/displaySwitch.mjs +1 -1
  250. package/plugins/comments/editorResizeObserver.js +100 -0
  251. package/plugins/comments/editorResizeObserver.mjs +95 -0
  252. package/plugins/contextMenu/commandExecutor.js +1 -1
  253. package/plugins/contextMenu/commandExecutor.mjs +1 -1
  254. package/plugins/contextMenu/contextMenu.js +4 -4
  255. package/plugins/contextMenu/contextMenu.mjs +3 -3
  256. package/plugins/contextMenu/itemsFactory.js +1 -1
  257. package/plugins/contextMenu/itemsFactory.mjs +1 -1
  258. package/plugins/contextMenu/menu/cursor.js +1 -1
  259. package/plugins/contextMenu/menu/cursor.mjs +1 -1
  260. package/plugins/contextMenu/menu/menu.js +5 -4
  261. package/plugins/contextMenu/menu/menu.mjs +4 -3
  262. package/plugins/contextMenu/menu/positioner.js +2 -2
  263. package/plugins/contextMenu/menu/positioner.mjs +2 -2
  264. package/plugins/copyPaste/copyPaste.js +5 -5
  265. package/plugins/copyPaste/copyPaste.mjs +4 -4
  266. package/plugins/copyPaste/copyableRanges.js +3 -3
  267. package/plugins/copyPaste/copyableRanges.mjs +3 -3
  268. package/plugins/copyPaste/pasteEvent.js +1 -1
  269. package/plugins/customBorders/contextMenuItem/index.js +1 -1
  270. package/plugins/customBorders/customBorders.js +3 -3
  271. package/plugins/customBorders/customBorders.mjs +3 -3
  272. package/plugins/dragToScroll/dragToScroll.js +4 -4
  273. package/plugins/dragToScroll/dragToScroll.mjs +4 -4
  274. package/plugins/dropdownMenu/dropdownMenu.js +5 -5
  275. package/plugins/dropdownMenu/dropdownMenu.mjs +4 -4
  276. package/plugins/exportFile/dataProvider.js +1 -1
  277. package/plugins/exportFile/dataProvider.mjs +1 -1
  278. package/plugins/exportFile/exportFile.js +1 -1
  279. package/plugins/exportFile/typeFactory.js +1 -1
  280. package/plugins/exportFile/types/_base.js +1 -1
  281. package/plugins/exportFile/types/_base.mjs +1 -1
  282. package/plugins/exportFile/types/csv.js +1 -1
  283. package/plugins/filters/component/_base.js +2 -2
  284. package/plugins/filters/component/_base.mjs +1 -1
  285. package/plugins/filters/component/actionBar.js +3 -3
  286. package/plugins/filters/component/actionBar.mjs +3 -3
  287. package/plugins/filters/component/condition.js +3 -3
  288. package/plugins/filters/component/condition.mjs +3 -3
  289. package/plugins/filters/component/operators.js +3 -3
  290. package/plugins/filters/component/operators.mjs +3 -3
  291. package/plugins/filters/component/value.js +3 -3
  292. package/plugins/filters/component/value.mjs +3 -3
  293. package/plugins/filters/condition/date/after.js +1 -1
  294. package/plugins/filters/condition/date/before.js +1 -1
  295. package/plugins/filters/condition/date/today.js +1 -1
  296. package/plugins/filters/condition/date/tomorrow.js +1 -1
  297. package/plugins/filters/condition/date/yesterday.js +1 -1
  298. package/plugins/filters/conditionCollection.js +2 -2
  299. package/plugins/filters/conditionCollection.mjs +1 -1
  300. package/plugins/filters/conditionUpdateObserver.js +4 -4
  301. package/plugins/filters/conditionUpdateObserver.mjs +3 -3
  302. package/plugins/filters/dataFilter.js +1 -1
  303. package/plugins/filters/dataFilter.mjs +1 -1
  304. package/plugins/filters/filters.js +5 -5
  305. package/plugins/filters/filters.mjs +4 -4
  306. package/plugins/filters/ui/_base.js +2 -2
  307. package/plugins/filters/ui/_base.mjs +1 -1
  308. package/plugins/filters/ui/input.js +3 -3
  309. package/plugins/filters/ui/input.mjs +3 -3
  310. package/plugins/filters/ui/link.js +2 -2
  311. package/plugins/filters/ui/link.mjs +2 -2
  312. package/plugins/filters/ui/multipleSelect.js +3 -3
  313. package/plugins/filters/ui/multipleSelect.mjs +3 -3
  314. package/plugins/filters/ui/radioInput.js +2 -2
  315. package/plugins/filters/ui/radioInput.mjs +2 -2
  316. package/plugins/filters/ui/select.js +3 -3
  317. package/plugins/filters/ui/select.mjs +3 -3
  318. package/plugins/formulas/engine/register.js +1 -1
  319. package/plugins/formulas/formulas.js +7 -7
  320. package/plugins/formulas/formulas.mjs +6 -6
  321. package/plugins/formulas/indexSyncer/axisSyncer.js +2 -2
  322. package/plugins/formulas/indexSyncer/axisSyncer.mjs +2 -2
  323. package/plugins/formulas/indexSyncer/index.js +3 -3
  324. package/plugins/formulas/indexSyncer/index.mjs +2 -2
  325. package/plugins/formulas/utils.js +1 -1
  326. package/plugins/hiddenColumns/hiddenColumns.js +4 -4
  327. package/plugins/hiddenColumns/hiddenColumns.mjs +3 -3
  328. package/plugins/hiddenRows/hiddenRows.js +4 -4
  329. package/plugins/hiddenRows/hiddenRows.mjs +3 -3
  330. package/plugins/manualColumnFreeze/manualColumnFreeze.js +4 -4
  331. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +3 -3
  332. package/plugins/manualColumnMove/manualColumnMove.js +4 -4
  333. package/plugins/manualColumnMove/manualColumnMove.mjs +3 -3
  334. package/plugins/manualColumnMove/ui/_base.js +1 -1
  335. package/plugins/manualColumnMove/ui/_base.mjs +1 -1
  336. package/plugins/manualColumnMove/ui/backlight.js +1 -1
  337. package/plugins/manualColumnMove/ui/guideline.js +1 -1
  338. package/plugins/manualColumnResize/manualColumnResize.js +3 -3
  339. package/plugins/manualColumnResize/manualColumnResize.mjs +3 -3
  340. package/plugins/manualRowMove/manualRowMove.js +4 -4
  341. package/plugins/manualRowMove/manualRowMove.mjs +3 -3
  342. package/plugins/manualRowMove/ui/_base.js +1 -1
  343. package/plugins/manualRowMove/ui/_base.mjs +1 -1
  344. package/plugins/manualRowMove/ui/backlight.js +1 -1
  345. package/plugins/manualRowMove/ui/guideline.js +1 -1
  346. package/plugins/manualRowResize/manualRowResize.js +4 -4
  347. package/plugins/manualRowResize/manualRowResize.mjs +5 -5
  348. package/plugins/mergeCells/calculations/autofill.js +2 -2
  349. package/plugins/mergeCells/calculations/autofill.mjs +2 -2
  350. package/plugins/mergeCells/calculations/selection.js +1 -1
  351. package/plugins/mergeCells/calculations/selection.mjs +1 -1
  352. package/plugins/mergeCells/cellCoords.js +81 -24
  353. package/plugins/mergeCells/cellCoords.mjs +81 -24
  354. package/plugins/mergeCells/cellsCollection.js +167 -91
  355. package/plugins/mergeCells/cellsCollection.mjs +166 -90
  356. package/plugins/mergeCells/contextMenuItem/toggleMerge.js +1 -1
  357. package/plugins/mergeCells/focusOrder.js +4 -4
  358. package/plugins/mergeCells/focusOrder.mjs +3 -3
  359. package/plugins/mergeCells/mergeCells.js +171 -122
  360. package/plugins/mergeCells/mergeCells.mjs +171 -122
  361. package/plugins/mergeCells/renderer.js +74 -0
  362. package/plugins/mergeCells/renderer.mjs +70 -0
  363. package/plugins/multiColumnSorting/multiColumnSorting.js +2 -1
  364. package/plugins/multiColumnSorting/multiColumnSorting.mjs +2 -1
  365. package/plugins/multiColumnSorting/utils.js +1 -1
  366. package/plugins/multiColumnSorting/utils.mjs +1 -1
  367. package/plugins/multipleSelectionHandles/multipleSelectionHandles.js +1 -1
  368. package/plugins/multipleSelectionHandles/multipleSelectionHandles.mjs +1 -1
  369. package/plugins/nestedHeaders/nestedHeaders.d.ts +1 -0
  370. package/plugins/nestedHeaders/nestedHeaders.js +20 -9
  371. package/plugins/nestedHeaders/nestedHeaders.mjs +20 -9
  372. package/plugins/nestedHeaders/stateManager/headersTree.js +3 -3
  373. package/plugins/nestedHeaders/stateManager/headersTree.mjs +2 -2
  374. package/plugins/nestedHeaders/stateManager/index.js +3 -3
  375. package/plugins/nestedHeaders/stateManager/index.mjs +2 -2
  376. package/plugins/nestedHeaders/stateManager/settingsNormalizer.js +5 -1
  377. package/plugins/nestedHeaders/stateManager/settingsNormalizer.mjs +5 -1
  378. package/plugins/nestedHeaders/stateManager/sourceSettings.js +2 -2
  379. package/plugins/nestedHeaders/stateManager/sourceSettings.mjs +2 -2
  380. package/plugins/nestedHeaders/stateManager/utils.js +6 -2
  381. package/plugins/nestedHeaders/stateManager/utils.mjs +6 -2
  382. package/plugins/nestedHeaders/utils/ghostTable.js +1 -1
  383. package/plugins/nestedHeaders/utils/ghostTable.mjs +1 -1
  384. package/plugins/nestedRows/data/dataManager.js +1 -1
  385. package/plugins/nestedRows/data/dataManager.mjs +1 -1
  386. package/plugins/nestedRows/nestedRows.js +5 -5
  387. package/plugins/nestedRows/nestedRows.mjs +4 -4
  388. package/plugins/nestedRows/ui/_base.js +1 -1
  389. package/plugins/nestedRows/ui/_base.mjs +1 -1
  390. package/plugins/nestedRows/ui/collapsing.js +1 -1
  391. package/plugins/nestedRows/ui/contextMenu.js +4 -4
  392. package/plugins/nestedRows/ui/contextMenu.mjs +3 -3
  393. package/plugins/nestedRows/ui/headers.js +1 -1
  394. package/plugins/nestedRows/utils/rowMoveController.js +1 -1
  395. package/plugins/nestedRows/utils/rowMoveController.mjs +1 -1
  396. package/plugins/persistentState/persistentState.js +2 -2
  397. package/plugins/persistentState/persistentState.mjs +1 -1
  398. package/plugins/persistentState/storage.js +1 -1
  399. package/plugins/persistentState/storage.mjs +1 -1
  400. package/plugins/search/search.js +3 -3
  401. package/plugins/search/search.mjs +3 -3
  402. package/plugins/touchScroll/touchScroll.js +3 -3
  403. package/plugins/touchScroll/touchScroll.mjs +3 -3
  404. package/plugins/trimRows/trimRows.js +3 -3
  405. package/plugins/trimRows/trimRows.mjs +3 -3
  406. package/plugins/undoRedo/undoRedo.js +38 -1
  407. package/plugins/undoRedo/undoRedo.mjs +37 -0
  408. package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -1
  409. package/renderers/checkboxRenderer/checkboxRenderer.js +1 -1
  410. package/renderers/numericRenderer/numericRenderer.js +1 -1
  411. package/renderers/registry.js +1 -1
  412. package/selection/highlight/highlight.js +3 -3
  413. package/selection/highlight/highlight.mjs +3 -3
  414. package/selection/highlight/types/activeHeader.js +1 -1
  415. package/selection/highlight/types/area.js +1 -1
  416. package/selection/highlight/types/areaLayered.js +1 -1
  417. package/selection/highlight/types/column.js +1 -1
  418. package/selection/highlight/types/customSelection.js +1 -1
  419. package/selection/highlight/types/fill.js +1 -1
  420. package/selection/highlight/types/focus.js +1 -1
  421. package/selection/highlight/types/header.js +1 -1
  422. package/selection/highlight/types/row.js +1 -1
  423. package/selection/highlight/visualSelection.js +1 -1
  424. package/selection/highlight/visualSelection.mjs +1 -1
  425. package/selection/index.js +1 -1
  426. package/selection/range.js +1 -1
  427. package/selection/range.mjs +1 -1
  428. package/selection/selection.js +8 -4
  429. package/selection/selection.mjs +7 -3
  430. package/selection/transformation.js +14 -4
  431. package/selection/transformation.mjs +13 -3
  432. package/settings.d.ts +1 -0
  433. package/shortcuts/utils.js +18 -27
  434. package/shortcuts/utils.mjs +18 -27
  435. package/tableView.js +126 -28
  436. package/tableView.mjs +125 -27
  437. package/translations/changesObservable/observable.js +2 -2
  438. package/translations/changesObservable/observable.mjs +2 -2
  439. package/translations/changesObservable/observer.js +3 -3
  440. package/translations/changesObservable/observer.mjs +2 -2
  441. package/translations/indexMapper.js +2 -2
  442. package/translations/indexMapper.mjs +1 -1
  443. package/translations/mapCollections/aggregatedCollection.js +1 -1
  444. package/translations/mapCollections/aggregatedCollection.mjs +1 -1
  445. package/translations/mapCollections/mapCollection.js +2 -2
  446. package/translations/mapCollections/mapCollection.mjs +1 -1
  447. package/translations/maps/indexMap.js +2 -2
  448. package/translations/maps/indexMap.mjs +1 -1
  449. package/translations/maps/linkedPhysicalIndexToValueMap.js +1 -1
  450. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +1 -1
  451. package/utils/dataStructures/linkedList.js +1 -1
  452. package/utils/dataStructures/linkedList.mjs +1 -1
  453. package/utils/dataStructures/tree.js +1 -1
  454. package/utils/dataStructures/tree.mjs +1 -1
  455. package/utils/ghostTable.js +1 -1
  456. package/utils/ghostTable.mjs +1 -1
  457. package/utils/interval.js +4 -4
  458. package/utils/interval.mjs +4 -4
  459. package/utils/samplesGenerator.js +1 -1
  460. package/utils/samplesGenerator.mjs +1 -1
  461. package/validators/dateValidator/dateValidator.js +1 -1
  462. package/validators/registry.js +1 -1
  463. package/validators/timeValidator/timeValidator.js +1 -1
  464. package/3rdparty/walkontable/src/calculator/constants.js +0 -26
  465. package/3rdparty/walkontable/src/calculator/constants.mjs +0 -23
  466. package/plugins/mergeCells/utils.js +0 -28
  467. package/plugins/mergeCells/utils.mjs +0 -24
@@ -31,6 +31,8 @@ class Viewport {
31
31
  this.rowHeaderWidth = NaN;
32
32
  this.rowsVisibleCalculator = null;
33
33
  this.columnsVisibleCalculator = null;
34
+ this.rowsCalculatorTypes = new Map([['rendered', () => this.wtSettings.getSetting('renderAllRows') ? new _calculator.RenderedAllRowsCalculationType() : new _calculator.RenderedRowsCalculationType()], ['fullyVisible', () => new _calculator.FullyVisibleRowsCalculationType()], ['partiallyVisible', () => new _calculator.PartiallyVisibleRowsCalculationType()]]);
35
+ this.columnsCalculatorTypes = new Map([['rendered', () => this.wtSettings.getSetting('renderAllColumns') ? new _calculator.RenderedAllColumnsCalculationType() : new _calculator.RenderedColumnsCalculationType()], ['fullyVisible', () => new _calculator.FullyVisibleColumnsCalculationType()], ['partiallyVisible', () => new _calculator.PartiallyVisibleColumnsCalculationType()]]);
34
36
  this.eventManager = eventManager;
35
37
  this.eventManager.addEventListener(this.domBindings.rootWindow, 'resize', () => {
36
38
  this.clientHeight = this.getWorkspaceHeight();
@@ -241,25 +243,20 @@ class Viewport {
241
243
  }
242
244
 
243
245
  /**
244
- * Creates:
245
- * - rowsRenderCalculator (before draw, to qualify rows for rendering)
246
- * - rowsVisibleCalculator (after draw, to measure which rows are actually visible).
246
+ * Creates rows calculators. The type of the calculations can be chosen from the list:
247
+ * - 'rendered' Calculates rows that should be rendered within the current table's viewport;
248
+ * - 'fullyVisible' Calculates rows that are fully visible (used mostly for scrolling purposes);
249
+ * - 'partiallyVisible' Calculates rows that are partially visible (used mostly for scrolling purposes).
247
250
  *
248
- * @param {number} calculationType The render type ID, which determines for what type of
249
- * calculation calculator is created.
251
+ * @param {'rendered' | 'fullyVisible' | 'partiallyVisible'} calculatorTypes The list of the calculation types.
250
252
  * @returns {ViewportRowsCalculator}
251
253
  */
252
254
  createRowsCalculator() {
253
- let calculationType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _calculator.RENDER_TYPE;
255
+ let calculatorTypes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['rendered', 'fullyVisible', 'partiallyVisible'];
254
256
  const {
255
257
  wtSettings,
256
258
  wtTable
257
259
  } = this;
258
- if (wtSettings.getSetting('renderAllRows') && calculationType === _calculator.RENDER_TYPE) {
259
- return new _calculator.RenderAllRowsCalculator({
260
- totalRows: wtSettings.getSetting('totalRows')
261
- });
262
- }
263
260
  let height = this.getViewportHeight();
264
261
  let scrollbarHeight;
265
262
  let fixedRowsHeight;
@@ -283,36 +280,31 @@ class Viewport {
283
280
  scrollbarHeight = (0, _element.getScrollbarWidth)(this.domBindings.rootDocument);
284
281
  }
285
282
  return new _calculator.ViewportRowsCalculator({
283
+ calculationTypes: calculatorTypes.map(type => [type, this.rowsCalculatorTypes.get(type)()]),
286
284
  viewportHeight: height,
287
285
  scrollOffset: pos,
288
286
  totalRows: wtSettings.getSetting('totalRows'),
289
287
  rowHeightFn: sourceRow => wtTable.getRowHeight(sourceRow),
290
288
  overrideFn: wtSettings.getSettingPure('viewportRowCalculatorOverride'),
291
- calculationType,
292
289
  horizontalScrollbarHeight: scrollbarHeight
293
290
  });
294
291
  }
295
292
 
296
293
  /**
297
- * Creates:
298
- * - columnsRenderCalculator (before draw, to qualify columns for rendering)
299
- * - columnsVisibleCalculator (after draw, to measure which columns are actually visible).
294
+ * Creates columns calculators. The type of the calculations can be chosen from the list:
295
+ * - 'rendered' Calculates columns that should be rendered within the current table's viewport;
296
+ * - 'fullyVisible' Calculates columns that are fully visible (used mostly for scrolling purposes);
297
+ * - 'partiallyVisible' Calculates columns that are partially visible (used mostly for scrolling purposes).
300
298
  *
301
- * @param {number} calculationType The render type ID, which determines for what type of
302
- * calculation calculator is created.
299
+ * @param {'rendered' | 'fullyVisible' | 'partiallyVisible'} calculatorTypes The list of the calculation types.
303
300
  * @returns {ViewportColumnsCalculator}
304
301
  */
305
302
  createColumnsCalculator() {
306
- let calculationType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _calculator.RENDER_TYPE;
303
+ let calculatorTypes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['rendered', 'fullyVisible', 'partiallyVisible'];
307
304
  const {
308
305
  wtSettings,
309
306
  wtTable
310
307
  } = this;
311
- if (wtSettings.getSetting('renderAllColumns') && calculationType === _calculator.RENDER_TYPE) {
312
- return new _calculator.RenderAllColumnsCalculator({
313
- totalColumns: wtSettings.getSetting('totalColumns')
314
- });
315
- }
316
308
  let width = this.getViewportWidth();
317
309
  let pos = Math.abs(this.dataAccessObject.inlineStartScrollPosition) - this.dataAccessObject.inlineStartParentOffset;
318
310
  this.columnHeaderHeight = NaN;
@@ -326,12 +318,12 @@ class Viewport {
326
318
  width -= (0, _element.getScrollbarWidth)(this.domBindings.rootDocument);
327
319
  }
328
320
  return new _calculator.ViewportColumnsCalculator({
321
+ calculationTypes: calculatorTypes.map(type => [type, this.columnsCalculatorTypes.get(type)()]),
329
322
  viewportWidth: width,
330
323
  scrollOffset: pos,
331
324
  totalColumns: wtSettings.getSetting('totalColumns'),
332
325
  columnWidthFn: sourceCol => wtTable.getColumnWidth(sourceCol),
333
326
  overrideFn: wtSettings.getSettingPure('viewportColumnCalculatorOverride'),
334
- calculationType,
335
327
  inlineStartOffset: this.dataAccessObject.inlineStartParentOffset
336
328
  });
337
329
  }
@@ -344,46 +336,43 @@ class Viewport {
344
336
  * If `false` or `undefined`, will perform a full redraw.
345
337
  * @returns {boolean} The fastDraw value, possibly modified.
346
338
  */
347
- createRenderCalculators() {
339
+ createCalculators() {
348
340
  let fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
349
341
  const {
350
342
  wtSettings
351
343
  } = this;
344
+ const rowsCalculator = this.createRowsCalculator();
345
+ const columnsCalculator = this.createColumnsCalculator();
352
346
  if (fastDraw && !wtSettings.getSetting('renderAllRows')) {
353
- const proposedRowsVisibleCalculator = this.createRowsCalculator(_calculator.FULLY_VISIBLE_TYPE);
347
+ const proposedRowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');
354
348
  fastDraw = this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator);
355
349
  }
356
350
  if (fastDraw && !wtSettings.getSetting('renderAllColumns')) {
357
- const proposedColumnsVisibleCalculator = this.createColumnsCalculator(_calculator.FULLY_VISIBLE_TYPE);
351
+ const proposedColumnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');
358
352
  fastDraw = this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator);
359
353
  }
360
354
  if (!fastDraw) {
361
- this.rowsRenderCalculator = this.createRowsCalculator(_calculator.RENDER_TYPE);
362
- this.columnsRenderCalculator = this.createColumnsCalculator(_calculator.RENDER_TYPE);
355
+ this.rowsRenderCalculator = rowsCalculator.getResultsFor('rendered');
356
+ this.columnsRenderCalculator = columnsCalculator.getResultsFor('rendered');
363
357
  }
364
-
365
- // delete temporarily to make sure that renderers always use rowsRenderCalculator, not rowsVisibleCalculator
366
- this.rowsVisibleCalculator = null;
367
- this.columnsVisibleCalculator = null;
358
+ this.rowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');
359
+ this.columnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');
360
+ this.rowsPartiallyVisibleCalculator = rowsCalculator.getResultsFor('partiallyVisible');
361
+ this.columnsPartiallyVisibleCalculator = columnsCalculator.getResultsFor('partiallyVisible');
368
362
  return fastDraw;
369
363
  }
370
364
 
371
365
  /**
372
- * Creates rowsVisibleCalculator and columnsVisibleCalculator (after draw, to determine what are
373
- * the actually fully visible rows and columns).
366
+ * Creates rows and columns calculators (after draw, to determine what are
367
+ * the actually fully visible and partially visible rows and columns).
374
368
  */
375
369
  createVisibleCalculators() {
376
- this.rowsVisibleCalculator = this.createRowsCalculator(_calculator.FULLY_VISIBLE_TYPE);
377
- this.columnsVisibleCalculator = this.createColumnsCalculator(_calculator.FULLY_VISIBLE_TYPE);
378
- }
379
-
380
- /**
381
- * Creates rowsPartiallyVisibleCalculator and columnsPartiallyVisibleCalculator (after draw, to determine what are
382
- * the actually partially visible rows and columns).
383
- */
384
- createPartiallyVisibleCalculators() {
385
- this.rowsPartiallyVisibleCalculator = this.createRowsCalculator(_calculator.PARTIALLY_VISIBLE_TYPE);
386
- this.columnsPartiallyVisibleCalculator = this.createColumnsCalculator(_calculator.PARTIALLY_VISIBLE_TYPE);
370
+ const rowsCalculator = this.createRowsCalculator(['fullyVisible', 'partiallyVisible']);
371
+ const columnsCalculator = this.createColumnsCalculator(['fullyVisible', 'partiallyVisible']);
372
+ this.rowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');
373
+ this.columnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');
374
+ this.rowsPartiallyVisibleCalculator = rowsCalculator.getResultsFor('partiallyVisible');
375
+ this.columnsPartiallyVisibleCalculator = columnsCalculator.getResultsFor('partiallyVisible');
387
376
  }
388
377
 
389
378
  /**
@@ -1,6 +1,6 @@
1
1
  import { getScrollbarWidth, getStyle, offset, outerHeight, outerWidth } from "../../../helpers/dom/element.mjs";
2
2
  import { objectEach } from "../../../helpers/object.mjs";
3
- import { RENDER_TYPE, FULLY_VISIBLE_TYPE, PARTIALLY_VISIBLE_TYPE, RenderAllColumnsCalculator, RenderAllRowsCalculator, ViewportColumnsCalculator, ViewportRowsCalculator } from "./calculator/index.mjs";
3
+ import { FullyVisibleColumnsCalculationType, FullyVisibleRowsCalculationType, PartiallyVisibleColumnsCalculationType, PartiallyVisibleRowsCalculationType, RenderedAllColumnsCalculationType, RenderedAllRowsCalculationType, RenderedColumnsCalculationType, RenderedRowsCalculationType, ViewportColumnsCalculator, ViewportRowsCalculator } from "./calculator/index.mjs";
4
4
  /**
5
5
  * @class Viewport
6
6
  */
@@ -28,6 +28,8 @@ class Viewport {
28
28
  this.rowHeaderWidth = NaN;
29
29
  this.rowsVisibleCalculator = null;
30
30
  this.columnsVisibleCalculator = null;
31
+ this.rowsCalculatorTypes = new Map([['rendered', () => this.wtSettings.getSetting('renderAllRows') ? new RenderedAllRowsCalculationType() : new RenderedRowsCalculationType()], ['fullyVisible', () => new FullyVisibleRowsCalculationType()], ['partiallyVisible', () => new PartiallyVisibleRowsCalculationType()]]);
32
+ this.columnsCalculatorTypes = new Map([['rendered', () => this.wtSettings.getSetting('renderAllColumns') ? new RenderedAllColumnsCalculationType() : new RenderedColumnsCalculationType()], ['fullyVisible', () => new FullyVisibleColumnsCalculationType()], ['partiallyVisible', () => new PartiallyVisibleColumnsCalculationType()]]);
31
33
  this.eventManager = eventManager;
32
34
  this.eventManager.addEventListener(this.domBindings.rootWindow, 'resize', () => {
33
35
  this.clientHeight = this.getWorkspaceHeight();
@@ -238,25 +240,20 @@ class Viewport {
238
240
  }
239
241
 
240
242
  /**
241
- * Creates:
242
- * - rowsRenderCalculator (before draw, to qualify rows for rendering)
243
- * - rowsVisibleCalculator (after draw, to measure which rows are actually visible).
243
+ * Creates rows calculators. The type of the calculations can be chosen from the list:
244
+ * - 'rendered' Calculates rows that should be rendered within the current table's viewport;
245
+ * - 'fullyVisible' Calculates rows that are fully visible (used mostly for scrolling purposes);
246
+ * - 'partiallyVisible' Calculates rows that are partially visible (used mostly for scrolling purposes).
244
247
  *
245
- * @param {number} calculationType The render type ID, which determines for what type of
246
- * calculation calculator is created.
248
+ * @param {'rendered' | 'fullyVisible' | 'partiallyVisible'} calculatorTypes The list of the calculation types.
247
249
  * @returns {ViewportRowsCalculator}
248
250
  */
249
251
  createRowsCalculator() {
250
- let calculationType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : RENDER_TYPE;
252
+ let calculatorTypes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['rendered', 'fullyVisible', 'partiallyVisible'];
251
253
  const {
252
254
  wtSettings,
253
255
  wtTable
254
256
  } = this;
255
- if (wtSettings.getSetting('renderAllRows') && calculationType === RENDER_TYPE) {
256
- return new RenderAllRowsCalculator({
257
- totalRows: wtSettings.getSetting('totalRows')
258
- });
259
- }
260
257
  let height = this.getViewportHeight();
261
258
  let scrollbarHeight;
262
259
  let fixedRowsHeight;
@@ -280,36 +277,31 @@ class Viewport {
280
277
  scrollbarHeight = getScrollbarWidth(this.domBindings.rootDocument);
281
278
  }
282
279
  return new ViewportRowsCalculator({
280
+ calculationTypes: calculatorTypes.map(type => [type, this.rowsCalculatorTypes.get(type)()]),
283
281
  viewportHeight: height,
284
282
  scrollOffset: pos,
285
283
  totalRows: wtSettings.getSetting('totalRows'),
286
284
  rowHeightFn: sourceRow => wtTable.getRowHeight(sourceRow),
287
285
  overrideFn: wtSettings.getSettingPure('viewportRowCalculatorOverride'),
288
- calculationType,
289
286
  horizontalScrollbarHeight: scrollbarHeight
290
287
  });
291
288
  }
292
289
 
293
290
  /**
294
- * Creates:
295
- * - columnsRenderCalculator (before draw, to qualify columns for rendering)
296
- * - columnsVisibleCalculator (after draw, to measure which columns are actually visible).
291
+ * Creates columns calculators. The type of the calculations can be chosen from the list:
292
+ * - 'rendered' Calculates columns that should be rendered within the current table's viewport;
293
+ * - 'fullyVisible' Calculates columns that are fully visible (used mostly for scrolling purposes);
294
+ * - 'partiallyVisible' Calculates columns that are partially visible (used mostly for scrolling purposes).
297
295
  *
298
- * @param {number} calculationType The render type ID, which determines for what type of
299
- * calculation calculator is created.
296
+ * @param {'rendered' | 'fullyVisible' | 'partiallyVisible'} calculatorTypes The list of the calculation types.
300
297
  * @returns {ViewportColumnsCalculator}
301
298
  */
302
299
  createColumnsCalculator() {
303
- let calculationType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : RENDER_TYPE;
300
+ let calculatorTypes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['rendered', 'fullyVisible', 'partiallyVisible'];
304
301
  const {
305
302
  wtSettings,
306
303
  wtTable
307
304
  } = this;
308
- if (wtSettings.getSetting('renderAllColumns') && calculationType === RENDER_TYPE) {
309
- return new RenderAllColumnsCalculator({
310
- totalColumns: wtSettings.getSetting('totalColumns')
311
- });
312
- }
313
305
  let width = this.getViewportWidth();
314
306
  let pos = Math.abs(this.dataAccessObject.inlineStartScrollPosition) - this.dataAccessObject.inlineStartParentOffset;
315
307
  this.columnHeaderHeight = NaN;
@@ -323,12 +315,12 @@ class Viewport {
323
315
  width -= getScrollbarWidth(this.domBindings.rootDocument);
324
316
  }
325
317
  return new ViewportColumnsCalculator({
318
+ calculationTypes: calculatorTypes.map(type => [type, this.columnsCalculatorTypes.get(type)()]),
326
319
  viewportWidth: width,
327
320
  scrollOffset: pos,
328
321
  totalColumns: wtSettings.getSetting('totalColumns'),
329
322
  columnWidthFn: sourceCol => wtTable.getColumnWidth(sourceCol),
330
323
  overrideFn: wtSettings.getSettingPure('viewportColumnCalculatorOverride'),
331
- calculationType,
332
324
  inlineStartOffset: this.dataAccessObject.inlineStartParentOffset
333
325
  });
334
326
  }
@@ -341,46 +333,43 @@ class Viewport {
341
333
  * If `false` or `undefined`, will perform a full redraw.
342
334
  * @returns {boolean} The fastDraw value, possibly modified.
343
335
  */
344
- createRenderCalculators() {
336
+ createCalculators() {
345
337
  let fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
346
338
  const {
347
339
  wtSettings
348
340
  } = this;
341
+ const rowsCalculator = this.createRowsCalculator();
342
+ const columnsCalculator = this.createColumnsCalculator();
349
343
  if (fastDraw && !wtSettings.getSetting('renderAllRows')) {
350
- const proposedRowsVisibleCalculator = this.createRowsCalculator(FULLY_VISIBLE_TYPE);
344
+ const proposedRowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');
351
345
  fastDraw = this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator);
352
346
  }
353
347
  if (fastDraw && !wtSettings.getSetting('renderAllColumns')) {
354
- const proposedColumnsVisibleCalculator = this.createColumnsCalculator(FULLY_VISIBLE_TYPE);
348
+ const proposedColumnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');
355
349
  fastDraw = this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator);
356
350
  }
357
351
  if (!fastDraw) {
358
- this.rowsRenderCalculator = this.createRowsCalculator(RENDER_TYPE);
359
- this.columnsRenderCalculator = this.createColumnsCalculator(RENDER_TYPE);
352
+ this.rowsRenderCalculator = rowsCalculator.getResultsFor('rendered');
353
+ this.columnsRenderCalculator = columnsCalculator.getResultsFor('rendered');
360
354
  }
361
-
362
- // delete temporarily to make sure that renderers always use rowsRenderCalculator, not rowsVisibleCalculator
363
- this.rowsVisibleCalculator = null;
364
- this.columnsVisibleCalculator = null;
355
+ this.rowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');
356
+ this.columnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');
357
+ this.rowsPartiallyVisibleCalculator = rowsCalculator.getResultsFor('partiallyVisible');
358
+ this.columnsPartiallyVisibleCalculator = columnsCalculator.getResultsFor('partiallyVisible');
365
359
  return fastDraw;
366
360
  }
367
361
 
368
362
  /**
369
- * Creates rowsVisibleCalculator and columnsVisibleCalculator (after draw, to determine what are
370
- * the actually fully visible rows and columns).
363
+ * Creates rows and columns calculators (after draw, to determine what are
364
+ * the actually fully visible and partially visible rows and columns).
371
365
  */
372
366
  createVisibleCalculators() {
373
- this.rowsVisibleCalculator = this.createRowsCalculator(FULLY_VISIBLE_TYPE);
374
- this.columnsVisibleCalculator = this.createColumnsCalculator(FULLY_VISIBLE_TYPE);
375
- }
376
-
377
- /**
378
- * Creates rowsPartiallyVisibleCalculator and columnsPartiallyVisibleCalculator (after draw, to determine what are
379
- * the actually partially visible rows and columns).
380
- */
381
- createPartiallyVisibleCalculators() {
382
- this.rowsPartiallyVisibleCalculator = this.createRowsCalculator(PARTIALLY_VISIBLE_TYPE);
383
- this.columnsPartiallyVisibleCalculator = this.createColumnsCalculator(PARTIALLY_VISIBLE_TYPE);
367
+ const rowsCalculator = this.createRowsCalculator(['fullyVisible', 'partiallyVisible']);
368
+ const columnsCalculator = this.createColumnsCalculator(['fullyVisible', 'partiallyVisible']);
369
+ this.rowsVisibleCalculator = rowsCalculator.getResultsFor('fullyVisible');
370
+ this.columnsVisibleCalculator = columnsCalculator.getResultsFor('fullyVisible');
371
+ this.rowsPartiallyVisibleCalculator = rowsCalculator.getResultsFor('partiallyVisible');
372
+ this.columnsPartiallyVisibleCalculator = columnsCalculator.getResultsFor('partiallyVisible');
384
373
  }
385
374
 
386
375
  /**
package/CHANGELOG.md CHANGED
@@ -9,6 +9,32 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
 
10
10
  <!-- UNVERSIONED -->
11
11
 
12
+ ## [14.5.0] - 2024-07-24
13
+
14
+ ### Added
15
+ - Added support for other keyboard layouts than QWERTY (e.g. AZERTY etc.). [#11027](https://github.com/handsontable/handsontable/pull/11027)
16
+ - Added missing "this" typing for ColumnSummary plugin. [#11036](https://github.com/handsontable/handsontable/pull/11036)
17
+ - Implemented the Undo/Redo logic for the ColumnSorting/ManualColumnSorting plugins and made some adjustments for it to work properly. [#11037](https://github.com/handsontable/handsontable/pull/11037)
18
+ - Implement the `headerClassName` option, which allows adding custom css classes to the column headers. [#11076](https://github.com/handsontable/handsontable/pull/11076)
19
+
20
+ ### Changed
21
+ - Improved the precision of calculating the height and width of columns and rows. [#11049](https://github.com/handsontable/handsontable/pull/11049)
22
+
23
+ ### Fixed
24
+ - fix Context.getShortcuts type [#10910](https://github.com/handsontable/handsontable/pull/10910)
25
+ - Improved performance of the cells merging. [#10995](https://github.com/handsontable/handsontable/pull/10995)
26
+ - Fixed a problem where clicking and dragging on cells on a window-controlled scrolled instances would end up in unpredictable results. [#10996](https://github.com/handsontable/handsontable/pull/10996)
27
+ - Fixed a bug that prevented column sorting of the checkbox cell types. [#11004](https://github.com/handsontable/handsontable/pull/11004)
28
+ - Fixed merged cells misalignment in overlays [#11007](https://github.com/handsontable/handsontable/pull/11007)
29
+ - Fixed selection expanding for merged cells. [#11010](https://github.com/handsontable/handsontable/pull/11010)
30
+ - Fixed a problem where the table could go into an endless resize loop when one of the instance's parents were using `dvh` values for sizing and the table was not given any size itself. [#11021](https://github.com/handsontable/handsontable/pull/11021)
31
+ - Fixed a bug where the `afterSetCellMeta` was unnecessarily triggered after clicking on the comments textarea element. [#11033](https://github.com/handsontable/handsontable/pull/11033)
32
+ - Fixed invalid cells states after data population that was canceled in the `beforeChange` hook. [#11035](https://github.com/handsontable/handsontable/pull/11035)
33
+ - Fixed a problem with the Formulas plugin using wrong indexes when performing autofill. [#11038](https://github.com/handsontable/handsontable/pull/11038)
34
+ - Fixed a problem, where disabling `navigableHeaders` broke keyboard navigation in the first row, if the option was previously enabled and used. [#11043](https://github.com/handsontable/handsontable/pull/11043)
35
+ - Fixed a problem where the Dropdown Menu would not close after tapping on the table cells on mobile browsers. [#11044](https://github.com/handsontable/handsontable/pull/11044)
36
+ - Fixed the header selection with `nestedHeaders` enabled not working on mobile devices. [#11051](https://github.com/handsontable/handsontable/pull/11051)
37
+
12
38
  ## [14.4.0] - 2024-06-11
13
39
 
14
40
  ### Added
@@ -48,7 +74,7 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
48
74
 
49
75
  For more information on Handsontable 14.4.0, see:
50
76
 
51
- - [Blog post (14.4.0)](https://handsontable.com/blog/handsontable-14.4.0-enhanced-navigation-and-bug-fixes)
77
+ - [Blog post (14.4.0)](https://handsontable.com/blog/handsontable-14.4.0-improved-stability)
52
78
  - [Documentation (14.4)](https://handsontable.com/docs/14.4)
53
79
  - [Release notes (14.4.0)](https://handsontable.com/docs/release-notes/#_14-4-0)
54
80
 
package/base.js CHANGED
@@ -12,7 +12,7 @@ var _baseEditor = require("./editors/baseEditor");
12
12
  var _src = require("./3rdparty/walkontable/src");
13
13
  exports.CellCoords = _src.CellCoords;
14
14
  exports.CellRange = _src.CellRange;
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
16
  // FIXME: Bug in eslint-plugin-import: https://github.com/benmosher/eslint-plugin-import/issues/1883
17
17
  /* eslint-disable import/named */
18
18
 
@@ -45,8 +45,8 @@ Handsontable.hooks = _pluginHooks.default.getSingleton();
45
45
  Handsontable.CellCoords = _src.CellCoords;
46
46
  Handsontable.CellRange = _src.CellRange;
47
47
  Handsontable.packageName = 'handsontable';
48
- Handsontable.buildDate = "11/06/2024 09:51:30";
49
- Handsontable.version = "14.4.0";
48
+ Handsontable.buildDate = "25/07/2024 07:59:38";
49
+ Handsontable.version = "14.5.0-next-7541a88-20240725";
50
50
  Handsontable.languages = {
51
51
  dictionaryKeys: _registry.dictionaryKeys,
52
52
  getLanguageDictionary: _registry.getLanguageDictionary,
package/base.mjs CHANGED
@@ -35,8 +35,8 @@ Handsontable.hooks = Hooks.getSingleton();
35
35
  Handsontable.CellCoords = CellCoords;
36
36
  Handsontable.CellRange = CellRange;
37
37
  Handsontable.packageName = 'handsontable';
38
- Handsontable.buildDate = "11/06/2024 09:51:42";
39
- Handsontable.version = "14.4.0";
38
+ Handsontable.buildDate = "25/07/2024 07:59:43";
39
+ Handsontable.version = "14.5.0-next-7541a88-20240725";
40
40
  Handsontable.languages = {
41
41
  dictionaryKeys,
42
42
  getLanguageDictionary,
@@ -8,7 +8,7 @@ var _staticRegister = _interopRequireDefault(require("../utils/staticRegister"))
8
8
  var _registry = require("../editors/registry");
9
9
  var _registry2 = require("../renderers/registry");
10
10
  var _registry3 = require("../validators/registry");
11
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
12
  const {
13
13
  register,
14
14
  getItem,
package/common.d.ts CHANGED
@@ -72,3 +72,6 @@ export interface ColumnDataGetterSetterFunction {
72
72
  (row: RowObject | CellValue[]): CellValue;
73
73
  (row: RowObject | CellValue[], value: CellValue): void;
74
74
  }
75
+
76
+ export type OverlayType = 'inline_start' | 'top' | 'top_inline_start_corner' | 'bottom' |
77
+ 'bottom_inline_start_corner' | 'master';
package/core.d.ts CHANGED
@@ -9,6 +9,7 @@ import {
9
9
  GridSettings,
10
10
  CellMeta,
11
11
  CellProperties,
12
+ ColumnSettings,
12
13
  } from './settings';
13
14
  import CellCoords from './3rdparty/walkontable/src/cell/coords';
14
15
  import CellRange from './3rdparty/walkontable/src/cell/range';
@@ -67,6 +68,7 @@ export default class Core {
67
68
  getCellValidator(row: number, column: number): BaseValidator | RegExp | undefined;
68
69
  getColHeader(): Array<number | string>;
69
70
  getColHeader(column: number, headerLevel?: number): number | string;
71
+ getColumnMeta(column: number): ColumnSettings;
70
72
  getColWidth(column: number): number;
71
73
  getCoords(element: Element | null): CellCoords;
72
74
  getCopyableData(row: number, column: number): string;
package/core.js CHANGED
@@ -43,7 +43,7 @@ var _index3 = require("./core/index");
43
43
  var _uniqueMap = require("./utils/dataStructures/uniqueMap");
44
44
  var _shortcuts = require("./shortcuts");
45
45
  var _shortcutContexts = require("./shortcutContexts");
46
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
46
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
47
47
  let activeGuid = null;
48
48
 
49
49
  /**
@@ -1109,16 +1109,17 @@ function Core(rootElement, userSettings) {
1109
1109
  */
1110
1110
  function validateChanges(changes, source, callback) {
1111
1111
  if (!changes.length) {
1112
+ callback();
1112
1113
  return;
1113
1114
  }
1114
1115
  const activeEditor = instance.getActiveEditor();
1115
1116
  const waitingForValidator = new ValidatorsQueue();
1116
1117
  let shouldBeCanceled = true;
1117
- waitingForValidator.onQueueEmpty = isValid => {
1118
+ waitingForValidator.onQueueEmpty = () => {
1118
1119
  if (activeEditor && shouldBeCanceled) {
1119
1120
  activeEditor.cancelChanges();
1120
1121
  }
1121
- callback(isValid); // called when async validators are resolved and beforeChange was not async
1122
+ callback(); // called when async validators are resolved and beforeChange was not async
1122
1123
  };
1123
1124
  for (let i = changes.length - 1; i >= 0; i--) {
1124
1125
  const [row, prop,, newValue] = changes[i];
@@ -1150,11 +1151,6 @@ function Core(rootElement, userSettings) {
1150
1151
  shouldBeCanceled = false;
1151
1152
  changes.splice(index, 1); // cancel the change
1152
1153
  cellPropertiesReference.valid = true; // we cancelled the change, so cell value is still valid
1153
-
1154
- const cell = instance.getCell(cellPropertiesReference.visualRow, cellPropertiesReference.visualCol);
1155
- if (cell !== null) {
1156
- (0, _element.removeClass)(cell, tableMeta.invalidCellClassName);
1157
- }
1158
1154
  }
1159
1155
  waitingForValidator.removeValidatorFormQueue();
1160
1156
  };
@@ -1174,11 +1170,7 @@ function Core(rootElement, userSettings) {
1174
1170
  * @fires Hooks#afterChange
1175
1171
  */
1176
1172
  function applyChanges(changes, source) {
1177
- let i = changes.length - 1;
1178
- if (i < 0) {
1179
- return;
1180
- }
1181
- for (; i >= 0; i--) {
1173
+ for (let i = changes.length - 1; i >= 0; i--) {
1182
1174
  let skipThisChange = false;
1183
1175
  if (changes[i] === null) {
1184
1176
  changes.splice(i, 1);
@@ -1221,17 +1213,23 @@ function Core(rootElement, userSettings) {
1221
1213
  }
1222
1214
  datamap.set(changes[i][0], changes[i][1], changes[i][3]);
1223
1215
  }
1224
- instance.forceFullRender = true; // used when data was changed
1225
- grid.adjustRowsAndCols();
1226
- instance.runHooks('beforeChangeRender', changes, source);
1227
- editorManager.closeEditor();
1228
- instance.view.render();
1229
- editorManager.prepareEditor();
1230
- instance.view.adjustElementsSize();
1231
- instance.runHooks('afterChange', changes, source || 'edit');
1232
- const activeEditor = instance.getActiveEditor();
1233
- if (activeEditor && (0, _mixed.isDefined)(activeEditor.refreshValue)) {
1234
- activeEditor.refreshValue();
1216
+ const hasChanges = changes.length > 0;
1217
+ instance.forceFullRender = true; // used when data was changed or when all cells need to be re-rendered
1218
+
1219
+ if (hasChanges) {
1220
+ grid.adjustRowsAndCols();
1221
+ instance.runHooks('beforeChangeRender', changes, source);
1222
+ editorManager.closeEditor();
1223
+ instance.view.render();
1224
+ editorManager.prepareEditor();
1225
+ instance.view.adjustElementsSize();
1226
+ instance.runHooks('afterChange', changes, source || 'edit');
1227
+ const activeEditor = instance.getActiveEditor();
1228
+ if (activeEditor && (0, _mixed.isDefined)(activeEditor.refreshValue)) {
1229
+ activeEditor.refreshValue();
1230
+ }
1231
+ } else {
1232
+ instance.view.render();
1235
1233
  }
1236
1234
  }
1237
1235
 
@@ -1791,7 +1789,7 @@ function Core(rootElement, userSettings) {
1791
1789
  this.render = function () {
1792
1790
  if (this.view) {
1793
1791
  this.renderCall = true;
1794
- this.forceFullRender = true; // used when data was changed
1792
+ this.forceFullRender = true; // used when data was changed or when all cells need to be re-rendered
1795
1793
 
1796
1794
  if (!this.isRenderSuspended()) {
1797
1795
  instance.view.render();
@@ -3067,6 +3065,19 @@ function Core(rootElement, userSettings) {
3067
3065
  });
3068
3066
  };
3069
3067
 
3068
+ /**
3069
+ * Returns the meta information for the provided column.
3070
+ *
3071
+ * @since 14.5.0
3072
+ * @memberof Core#
3073
+ * @function getColumnMeta
3074
+ * @param {number} column Visual column index.
3075
+ * @returns {object}
3076
+ */
3077
+ this.getColumnMeta = function (column) {
3078
+ return metaManager.getColumnMeta(this.toPhysicalColumn(column));
3079
+ };
3080
+
3070
3081
  /**
3071
3082
  * Returns an array of cell meta objects for specified physical row index.
3072
3083
  *
@@ -3490,7 +3501,7 @@ function Core(rootElement, userSettings) {
3490
3501
  let width = instance._getColWidthFromSettings(column);
3491
3502
  width = instance.runHooks('modifyColWidth', width, column);
3492
3503
  if (width === undefined) {
3493
- width = _src.ViewportColumnsCalculator.DEFAULT_WIDTH;
3504
+ width = _src.DEFAULT_COLUMN_WIDTH;
3494
3505
  }
3495
3506
  return width;
3496
3507
  };
@@ -3505,12 +3516,6 @@ function Core(rootElement, userSettings) {
3505
3516
  * @returns {number}
3506
3517
  */
3507
3518
  this._getRowHeightFromSettings = function (row) {
3508
- // let cellProperties = instance.getCellMeta(row, 0);
3509
- // let height = cellProperties.height;
3510
- //
3511
- // if (height === undefined || height === tableMeta.height) {
3512
- // height = cellProperties.rowHeights;
3513
- // }
3514
3519
  let height = tableMeta.rowHeights;
3515
3520
  if (height !== undefined && height !== null) {
3516
3521
  switch (typeof height) {