handsontable 14.4.0 → 14.5.0-next-7541a88-20240725

Sign up to get free protection for your applications and to get access to all the features.
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) {