handsontable 14.6.1 → 15.0.0-next-4472a60-20241203

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 (392) hide show
  1. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +23 -0
  2. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +23 -0
  3. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +23 -0
  4. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +23 -0
  5. package/3rdparty/walkontable/src/calculator/index.js +1 -2
  6. package/3rdparty/walkontable/src/calculator/index.mjs +2 -2
  7. package/3rdparty/walkontable/src/calculator/viewportBase.js +2 -0
  8. package/3rdparty/walkontable/src/calculator/viewportBase.mjs +2 -0
  9. package/3rdparty/walkontable/src/calculator/viewportRows.js +3 -3
  10. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +3 -3
  11. package/3rdparty/walkontable/src/core/_base.js +29 -23
  12. package/3rdparty/walkontable/src/core/_base.mjs +29 -23
  13. package/3rdparty/walkontable/src/core/clone.js +1 -0
  14. package/3rdparty/walkontable/src/core/clone.mjs +1 -0
  15. package/3rdparty/walkontable/src/core/core.js +2 -0
  16. package/3rdparty/walkontable/src/core/core.mjs +2 -0
  17. package/3rdparty/walkontable/src/facade/core.js +12 -6
  18. package/3rdparty/walkontable/src/facade/core.mjs +12 -6
  19. package/3rdparty/walkontable/src/index.js +0 -1
  20. package/3rdparty/walkontable/src/index.mjs +2 -2
  21. package/3rdparty/walkontable/src/overlay/_base.js +8 -1
  22. package/3rdparty/walkontable/src/overlay/_base.mjs +8 -1
  23. package/3rdparty/walkontable/src/overlay/bottom.js +5 -6
  24. package/3rdparty/walkontable/src/overlay/bottom.mjs +5 -6
  25. package/3rdparty/walkontable/src/overlay/index.js +2 -0
  26. package/3rdparty/walkontable/src/overlay/inlineStart.js +8 -7
  27. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +9 -8
  28. package/3rdparty/walkontable/src/overlay/top.js +9 -8
  29. package/3rdparty/walkontable/src/overlay/top.mjs +10 -9
  30. package/3rdparty/walkontable/src/overlays.js +10 -26
  31. package/3rdparty/walkontable/src/overlays.mjs +10 -26
  32. package/3rdparty/walkontable/src/renderer/colGroup.js +1 -1
  33. package/3rdparty/walkontable/src/renderer/colGroup.mjs +1 -1
  34. package/3rdparty/walkontable/src/renderer/index.js +4 -2
  35. package/3rdparty/walkontable/src/renderer/index.mjs +4 -2
  36. package/3rdparty/walkontable/src/renderer/table.js +13 -4
  37. package/3rdparty/walkontable/src/renderer/table.mjs +13 -4
  38. package/3rdparty/walkontable/src/scroll.js +46 -37
  39. package/3rdparty/walkontable/src/scroll.mjs +46 -37
  40. package/3rdparty/walkontable/src/selection/border/border.js +52 -58
  41. package/3rdparty/walkontable/src/selection/border/border.mjs +53 -59
  42. package/3rdparty/walkontable/src/selection/border/utils.js +26 -0
  43. package/3rdparty/walkontable/src/selection/border/utils.mjs +22 -0
  44. package/3rdparty/walkontable/src/selection/index.js +6 -4
  45. package/3rdparty/walkontable/src/selection/index.mjs +1 -1
  46. package/3rdparty/walkontable/src/selection/manager.js +3 -0
  47. package/3rdparty/walkontable/src/selection/manager.mjs +3 -0
  48. package/3rdparty/walkontable/src/selection/scanner.js +46 -11
  49. package/3rdparty/walkontable/src/selection/scanner.mjs +46 -11
  50. package/3rdparty/walkontable/src/settings.js +8 -9
  51. package/3rdparty/walkontable/src/settings.mjs +8 -9
  52. package/3rdparty/walkontable/src/table/master.js +1 -1
  53. package/3rdparty/walkontable/src/table/master.mjs +2 -2
  54. package/3rdparty/walkontable/src/table.js +25 -36
  55. package/3rdparty/walkontable/src/table.mjs +25 -36
  56. package/3rdparty/walkontable/src/types.js +1 -0
  57. package/3rdparty/walkontable/src/types.mjs +1 -0
  58. package/3rdparty/walkontable/src/utils/column.js +1 -43
  59. package/3rdparty/walkontable/src/utils/column.mjs +1 -43
  60. package/3rdparty/walkontable/src/utils/stylesHandler.js +295 -0
  61. package/3rdparty/walkontable/src/utils/stylesHandler.mjs +291 -0
  62. package/3rdparty/walkontable/src/viewport.js +94 -91
  63. package/3rdparty/walkontable/src/viewport.mjs +95 -92
  64. package/CHANGELOG.md +36 -0
  65. package/README.md +1 -1
  66. package/base.js +4 -4
  67. package/base.mjs +3 -3
  68. package/core/focusCatcher/focusDetector.js +1 -0
  69. package/core/focusCatcher/focusDetector.mjs +1 -0
  70. package/core/hooks/bucket.js +184 -0
  71. package/core/hooks/bucket.mjs +180 -0
  72. package/{pluginHooks.mjs → core/hooks/constants.js} +38 -486
  73. package/{pluginHooks.js → core/hooks/constants.mjs} +34 -489
  74. package/{pluginHooks.d.ts → core/hooks/index.d.ts} +22 -25
  75. package/core/hooks/index.js +385 -0
  76. package/core/hooks/index.mjs +381 -0
  77. package/core/index.js +2 -0
  78. package/core.d.ts +5 -3
  79. package/core.js +77 -35
  80. package/core.mjs +69 -27
  81. package/dataMap/dataMap.js +3 -0
  82. package/dataMap/dataMap.mjs +3 -0
  83. package/dataMap/dataSource.js +2 -0
  84. package/dataMap/dataSource.mjs +2 -0
  85. package/dataMap/metaManager/index.js +2 -0
  86. package/dataMap/metaManager/index.mjs +2 -0
  87. package/dataMap/metaManager/metaSchema.js +91 -5
  88. package/dataMap/metaManager/metaSchema.mjs +91 -5
  89. package/dataMap/metaManager/mods/dynamicCellMeta.js +2 -3
  90. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
  91. package/dataMap/metaManager/mods/extendMetaProperties.js +2 -0
  92. package/dataMap/metaManager/mods/extendMetaProperties.mjs +2 -0
  93. package/dist/handsontable.css +84 -72
  94. package/dist/handsontable.full.css +317 -304
  95. package/dist/handsontable.full.js +14826 -7294
  96. package/dist/handsontable.full.min.css +15 -10
  97. package/dist/handsontable.full.min.js +262 -69
  98. package/dist/handsontable.js +7826 -5552
  99. package/dist/handsontable.min.css +10 -6
  100. package/dist/handsontable.min.js +33 -33
  101. package/dist/languages/all.js +1 -1
  102. package/dist/languages/ar-AR.js +1 -1
  103. package/dist/languages/cs-CZ.js +1 -1
  104. package/dist/languages/de-CH.js +1 -1
  105. package/dist/languages/de-DE.js +1 -1
  106. package/dist/languages/en-US.js +1 -1
  107. package/dist/languages/es-MX.js +1 -1
  108. package/dist/languages/fr-FR.js +1 -1
  109. package/dist/languages/hr-HR.js +1 -1
  110. package/dist/languages/it-IT.js +1 -1
  111. package/dist/languages/ja-JP.js +1 -1
  112. package/dist/languages/ko-KR.js +1 -1
  113. package/dist/languages/lv-LV.js +1 -1
  114. package/dist/languages/nb-NO.js +1 -1
  115. package/dist/languages/nl-NL.js +1 -1
  116. package/dist/languages/pl-PL.js +1 -1
  117. package/dist/languages/pt-BR.js +1 -1
  118. package/dist/languages/ru-RU.js +1 -1
  119. package/dist/languages/sr-SP.js +1 -1
  120. package/dist/languages/zh-CN.js +1 -1
  121. package/dist/languages/zh-TW.js +1 -1
  122. package/editorManager.js +2 -2
  123. package/editorManager.mjs +2 -2
  124. package/editors/autocompleteEditor/autocompleteEditor.js +34 -16
  125. package/editors/autocompleteEditor/autocompleteEditor.mjs +34 -16
  126. package/editors/baseEditor/baseEditor.js +25 -18
  127. package/editors/baseEditor/baseEditor.mjs +26 -19
  128. package/editors/dateEditor/dateEditor.js +9 -0
  129. package/editors/dateEditor/dateEditor.mjs +10 -1
  130. package/editors/dropdownEditor/dropdownEditor.js +4 -3
  131. package/editors/dropdownEditor/dropdownEditor.mjs +3 -1
  132. package/editors/handsontableEditor/handsontableEditor.js +36 -2
  133. package/editors/handsontableEditor/handsontableEditor.mjs +36 -2
  134. package/editors/passwordEditor/passwordEditor.js +18 -0
  135. package/editors/passwordEditor/passwordEditor.mjs +18 -0
  136. package/editors/registry.js +2 -2
  137. package/editors/registry.mjs +1 -1
  138. package/editors/selectEditor/selectEditor.js +20 -9
  139. package/editors/selectEditor/selectEditor.mjs +20 -9
  140. package/editors/textEditor/textEditor.js +5 -12
  141. package/editors/textEditor/textEditor.mjs +6 -13
  142. package/focusManager.js +5 -7
  143. package/focusManager.mjs +5 -7
  144. package/helpers/array.js +2 -0
  145. package/helpers/array.mjs +2 -0
  146. package/helpers/data.js +3 -0
  147. package/helpers/data.mjs +3 -0
  148. package/helpers/dom/element.js +39 -18
  149. package/helpers/dom/element.mjs +38 -17
  150. package/helpers/mixed.js +3 -3
  151. package/helpers/mixed.mjs +3 -3
  152. package/helpers/moves.js +3 -0
  153. package/helpers/moves.mjs +3 -0
  154. package/helpers/number.js +1 -0
  155. package/helpers/number.mjs +1 -0
  156. package/helpers/object.js +2 -0
  157. package/helpers/object.mjs +2 -0
  158. package/helpers/themes.js +17 -0
  159. package/helpers/themes.mjs +13 -0
  160. package/i18n/index.js +2 -0
  161. package/i18n/languages/index.d.ts +8 -0
  162. package/i18n/languages/ja-JP.d.ts +1 -1
  163. package/i18n/phraseFormatters/substituteVariables.js +1 -0
  164. package/i18n/phraseFormatters/substituteVariables.mjs +1 -0
  165. package/index.d.ts +9 -1
  166. package/languages/all.js +1 -1
  167. package/languages/ar-AR.js +1 -1
  168. package/languages/cs-CZ.js +1 -1
  169. package/languages/de-CH.js +1 -1
  170. package/languages/de-DE.js +1 -1
  171. package/languages/en-US.js +1 -1
  172. package/languages/es-MX.js +1 -1
  173. package/languages/fr-FR.js +1 -1
  174. package/languages/hr-HR.js +1 -1
  175. package/languages/index.js +1 -1
  176. package/languages/it-IT.js +1 -1
  177. package/languages/ja-JP.js +1 -1
  178. package/languages/ko-KR.js +1 -1
  179. package/languages/lv-LV.js +1 -1
  180. package/languages/nb-NO.js +1 -1
  181. package/languages/nl-NL.js +1 -1
  182. package/languages/pl-PL.js +1 -1
  183. package/languages/pt-BR.js +1 -1
  184. package/languages/ru-RU.js +1 -1
  185. package/languages/sr-SP.js +1 -1
  186. package/languages/zh-CN.js +1 -1
  187. package/languages/zh-TW.js +1 -1
  188. package/package.json +22 -7
  189. package/plugins/autoColumnSize/autoColumnSize.js +22 -27
  190. package/plugins/autoColumnSize/autoColumnSize.mjs +22 -27
  191. package/plugins/autoRowSize/autoRowSize.js +20 -22
  192. package/plugins/autoRowSize/autoRowSize.mjs +21 -23
  193. package/plugins/autofill/autofill.js +4 -5
  194. package/plugins/autofill/autofill.mjs +1 -1
  195. package/plugins/base/base.d.ts +1 -1
  196. package/plugins/base/base.js +41 -0
  197. package/plugins/base/base.mjs +42 -1
  198. package/plugins/base/index.js +2 -1
  199. package/plugins/base/index.mjs +1 -1
  200. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +2 -5
  201. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +2 -5
  202. package/plugins/columnSorting/columnSorting.js +5 -4
  203. package/plugins/columnSorting/columnSorting.mjs +3 -1
  204. package/plugins/columnSorting/columnStatesManager.js +1 -0
  205. package/plugins/columnSorting/columnStatesManager.mjs +1 -0
  206. package/plugins/columnSorting/utils.js +3 -0
  207. package/plugins/columnSorting/utils.mjs +3 -0
  208. package/plugins/columnSummary/endpoints.js +3 -0
  209. package/plugins/columnSummary/endpoints.mjs +3 -0
  210. package/plugins/comments/commentEditor.js +9 -0
  211. package/plugins/comments/commentEditor.mjs +9 -0
  212. package/plugins/comments/comments.js +24 -18
  213. package/plugins/comments/comments.mjs +26 -20
  214. package/plugins/comments/editorResizeObserver.js +2 -0
  215. package/plugins/comments/editorResizeObserver.mjs +2 -0
  216. package/plugins/contextMenu/contextMenu.d.ts +2 -1
  217. package/plugins/contextMenu/contextMenu.js +6 -7
  218. package/plugins/contextMenu/contextMenu.mjs +1 -1
  219. package/plugins/contextMenu/menu/index.js +2 -0
  220. package/plugins/contextMenu/menu/menu.js +10 -5
  221. package/plugins/contextMenu/menu/menu.mjs +11 -6
  222. package/plugins/contextMenu/menu/positioner.js +4 -2
  223. package/plugins/contextMenu/menu/positioner.mjs +4 -2
  224. package/plugins/contextMenu/menu/shortcuts.js +3 -1
  225. package/plugins/contextMenu/menu/shortcuts.mjs +3 -1
  226. package/plugins/contextMenu/predefinedItems/alignment.js +7 -84
  227. package/plugins/contextMenu/predefinedItems/alignment.mjs +8 -85
  228. package/plugins/contextMenu/utils.js +0 -10
  229. package/plugins/contextMenu/utils.mjs +0 -9
  230. package/plugins/copyPaste/copyPaste.d.ts +1 -0
  231. package/plugins/copyPaste/copyPaste.js +32 -23
  232. package/plugins/copyPaste/copyPaste.mjs +24 -15
  233. package/plugins/customBorders/utils.js +2 -0
  234. package/plugins/customBorders/utils.mjs +2 -0
  235. package/plugins/dropdownMenu/dropdownMenu.d.ts +2 -1
  236. package/plugins/dropdownMenu/dropdownMenu.js +6 -7
  237. package/plugins/dropdownMenu/dropdownMenu.mjs +1 -1
  238. package/plugins/exportFile/types/csv.js +1 -0
  239. package/plugins/exportFile/types/csv.mjs +1 -0
  240. package/plugins/filters/component/condition.js +2 -0
  241. package/plugins/filters/component/condition.mjs +2 -0
  242. package/plugins/filters/component/operators.js +2 -0
  243. package/plugins/filters/component/operators.mjs +2 -0
  244. package/plugins/filters/component/value.js +3 -0
  245. package/plugins/filters/component/value.mjs +3 -0
  246. package/plugins/filters/conditionCollection.js +3 -0
  247. package/plugins/filters/conditionCollection.mjs +3 -0
  248. package/plugins/filters/conditionUpdateObserver.js +2 -0
  249. package/plugins/filters/conditionUpdateObserver.mjs +2 -0
  250. package/plugins/filters/filters.js +43 -13
  251. package/plugins/filters/filters.mjs +43 -13
  252. package/plugins/filters/logicalOperations/conjunction.js +2 -0
  253. package/plugins/filters/logicalOperations/conjunction.mjs +2 -0
  254. package/plugins/filters/logicalOperations/disjunction.js +2 -0
  255. package/plugins/filters/logicalOperations/disjunction.mjs +2 -0
  256. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +2 -0
  257. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.mjs +2 -0
  258. package/plugins/filters/menu/focusController.js +38 -14
  259. package/plugins/filters/menu/focusController.mjs +38 -14
  260. package/plugins/filters/ui/multipleSelect.js +10 -0
  261. package/plugins/filters/ui/multipleSelect.mjs +10 -0
  262. package/plugins/formulas/engine/register.js +3 -0
  263. package/plugins/formulas/engine/register.mjs +3 -0
  264. package/plugins/formulas/engine/settings.js +3 -0
  265. package/plugins/formulas/engine/settings.mjs +3 -0
  266. package/plugins/formulas/formulas.js +12 -7
  267. package/plugins/formulas/formulas.mjs +6 -1
  268. package/plugins/formulas/indexSyncer/axisSyncer.js +3 -0
  269. package/plugins/formulas/indexSyncer/axisSyncer.mjs +3 -0
  270. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +2 -0
  271. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +2 -0
  272. package/plugins/hiddenColumns/hiddenColumns.js +22 -30
  273. package/plugins/hiddenColumns/hiddenColumns.mjs +18 -26
  274. package/plugins/hiddenRows/contextMenuItem/showRow.js +2 -0
  275. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +2 -0
  276. package/plugins/hiddenRows/hiddenRows.js +21 -29
  277. package/plugins/hiddenRows/hiddenRows.mjs +17 -25
  278. package/plugins/index.d.ts +3 -0
  279. package/plugins/index.js +3 -0
  280. package/plugins/index.mjs +3 -1
  281. package/plugins/manualColumnFreeze/manualColumnFreeze.js +7 -5
  282. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +3 -1
  283. package/plugins/manualColumnMove/manualColumnMove.js +6 -6
  284. package/plugins/manualColumnMove/manualColumnMove.mjs +4 -4
  285. package/plugins/manualColumnResize/manualColumnResize.js +26 -12
  286. package/plugins/manualColumnResize/manualColumnResize.mjs +26 -12
  287. package/plugins/manualRowMove/manualRowMove.js +8 -6
  288. package/plugins/manualRowMove/manualRowMove.mjs +6 -4
  289. package/plugins/manualRowResize/manualRowResize.js +3 -2
  290. package/plugins/manualRowResize/manualRowResize.mjs +4 -3
  291. package/plugins/mergeCells/cellsCollection.js +19 -3
  292. package/plugins/mergeCells/cellsCollection.mjs +20 -4
  293. package/plugins/mergeCells/mergeCells.d.ts +6 -2
  294. package/plugins/mergeCells/mergeCells.js +84 -56
  295. package/plugins/mergeCells/mergeCells.mjs +82 -54
  296. package/plugins/mergeCells/renderer.js +13 -3
  297. package/plugins/mergeCells/renderer.mjs +13 -3
  298. package/plugins/multiColumnSorting/domHelpers.js +2 -0
  299. package/plugins/multiColumnSorting/domHelpers.mjs +2 -0
  300. package/plugins/nestedHeaders/nestedHeaders.js +63 -16
  301. package/plugins/nestedHeaders/nestedHeaders.mjs +63 -16
  302. package/plugins/nestedHeaders/stateManager/index.js +1 -0
  303. package/plugins/nestedHeaders/stateManager/index.mjs +1 -0
  304. package/plugins/nestedRows/nestedRows.js +3 -0
  305. package/plugins/nestedRows/nestedRows.mjs +3 -0
  306. package/plugins/nestedRows/ui/headers.js +7 -1
  307. package/plugins/nestedRows/ui/headers.mjs +7 -1
  308. package/plugins/nestedRows/utils/rowMoveController.js +4 -0
  309. package/plugins/nestedRows/utils/rowMoveController.mjs +4 -0
  310. package/plugins/persistentState/persistentState.js +4 -4
  311. package/plugins/persistentState/persistentState.mjs +1 -1
  312. package/plugins/stretchColumns/calculator.js +162 -0
  313. package/plugins/stretchColumns/calculator.mjs +158 -0
  314. package/plugins/stretchColumns/index.d.ts +1 -0
  315. package/plugins/stretchColumns/index.js +7 -0
  316. package/plugins/stretchColumns/index.mjs +1 -0
  317. package/plugins/stretchColumns/strategies/_base.js +85 -0
  318. package/plugins/stretchColumns/strategies/_base.mjs +81 -0
  319. package/plugins/stretchColumns/strategies/all.js +71 -0
  320. package/plugins/stretchColumns/strategies/all.mjs +67 -0
  321. package/plugins/stretchColumns/strategies/last.js +79 -0
  322. package/plugins/stretchColumns/strategies/last.mjs +75 -0
  323. package/plugins/stretchColumns/stretchColumns.d.ts +11 -0
  324. package/plugins/stretchColumns/stretchColumns.js +222 -0
  325. package/plugins/stretchColumns/stretchColumns.mjs +218 -0
  326. package/plugins/trimRows/trimRows.js +2 -0
  327. package/plugins/trimRows/trimRows.mjs +2 -0
  328. package/plugins/undoRedo/undoRedo.js +9 -5
  329. package/plugins/undoRedo/undoRedo.mjs +8 -3
  330. package/renderers/checkboxRenderer/checkboxRenderer.js +19 -8
  331. package/renderers/checkboxRenderer/checkboxRenderer.mjs +18 -7
  332. package/selection/index.js +2 -0
  333. package/selection/range.js +2 -0
  334. package/selection/range.mjs +2 -0
  335. package/selection/selection.js +7 -2
  336. package/selection/selection.mjs +7 -2
  337. package/selection/utils.js +2 -0
  338. package/selection/utils.mjs +2 -0
  339. package/settings.d.ts +4 -1
  340. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +1 -1
  341. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +1 -1
  342. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +1 -1
  343. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +1 -1
  344. package/shortcutContexts/commands/index.js +2 -0
  345. package/shortcutContexts/commands/index.mjs +2 -0
  346. package/shortcutContexts/commands/scrollToFocusedCell.js +4 -4
  347. package/shortcutContexts/commands/scrollToFocusedCell.mjs +4 -4
  348. package/shortcutContexts/index.js +2 -0
  349. package/shortcutContexts/index.mjs +2 -0
  350. package/shortcuts/context.js +3 -0
  351. package/shortcuts/context.mjs +3 -0
  352. package/shortcuts/recorder.js +3 -3
  353. package/shortcuts/recorder.mjs +3 -3
  354. package/shortcuts/utils.js +1 -0
  355. package/shortcuts/utils.mjs +1 -0
  356. package/styles/handsontable.css +2307 -0
  357. package/styles/handsontable.min.css +30 -0
  358. package/styles/ht-theme-horizon.css +607 -0
  359. package/styles/ht-theme-horizon.min.css +30 -0
  360. package/styles/ht-theme-main.css +613 -0
  361. package/styles/ht-theme-main.min.css +30 -0
  362. package/tableView.js +205 -33
  363. package/tableView.mjs +206 -34
  364. package/translations/changesObservable/observable.js +2 -0
  365. package/translations/changesObservable/observable.mjs +2 -0
  366. package/translations/index.js +2 -0
  367. package/translations/indexMapper.js +4 -0
  368. package/translations/indexMapper.mjs +4 -0
  369. package/translations/mapCollections/index.js +2 -0
  370. package/translations/mapCollections/mapCollection.js +2 -0
  371. package/translations/mapCollections/mapCollection.mjs +2 -0
  372. package/translations/maps/index.js +2 -0
  373. package/translations/maps/linkedPhysicalIndexToValueMap.js +1 -0
  374. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +1 -0
  375. package/translations/maps/utils/actionsOnIndexes.js +2 -0
  376. package/translations/maps/utils/actionsOnIndexes.mjs +2 -0
  377. package/translations/maps/utils/physicallyIndexed.js +1 -0
  378. package/translations/maps/utils/physicallyIndexed.mjs +1 -0
  379. package/utils/autoResize.js +11 -3
  380. package/utils/autoResize.mjs +11 -3
  381. package/utils/dataStructures/priorityMap.js +1 -0
  382. package/utils/dataStructures/priorityMap.mjs +1 -0
  383. package/utils/dataStructures/uniqueMap.js +2 -0
  384. package/utils/dataStructures/uniqueMap.mjs +2 -0
  385. package/utils/ghostTable.js +7 -3
  386. package/utils/ghostTable.mjs +7 -3
  387. package/utils/parseTable.js +4 -0
  388. package/utils/parseTable.mjs +4 -0
  389. package/3rdparty/walkontable/src/selection/border/constants.js +0 -15
  390. package/3rdparty/walkontable/src/selection/border/constants.mjs +0 -12
  391. package/3rdparty/walkontable/src/utils/columnStretching.js +0 -197
  392. package/3rdparty/walkontable/src/utils/columnStretching.mjs +0 -193
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
+ require("core-js/modules/esnext.iterator.map.js");
4
5
  var _element = require("../../../helpers/dom/element");
5
6
  var _object = require("../../../helpers/object");
6
7
  var _calculator = require("./calculator");
@@ -27,7 +28,6 @@ class Viewport {
27
28
  this.oversizedColumnHeaders = [];
28
29
  this.hasOversizedColumnHeadersMarked = {};
29
30
  this.clientHeight = 0;
30
- this.containerWidth = NaN;
31
31
  this.rowHeaderWidth = NaN;
32
32
  this.rowsVisibleCalculator = null;
33
33
  this.columnsVisibleCalculator = null;
@@ -56,55 +56,65 @@ class Viewport {
56
56
  }
57
57
  return height;
58
58
  }
59
+
60
+ /**
61
+ * @returns {number}
62
+ */
63
+ getViewportHeight() {
64
+ let containerHeight = this.getWorkspaceHeight();
65
+ if (containerHeight === Infinity) {
66
+ return containerHeight;
67
+ }
68
+ const columnHeaderHeight = this.getColumnHeaderHeight();
69
+ if (columnHeaderHeight > 0) {
70
+ containerHeight -= columnHeaderHeight;
71
+ }
72
+ return containerHeight;
73
+ }
74
+
75
+ /**
76
+ * Gets the width of the table workspace (in pixels). The workspace size in the current
77
+ * implementation returns the width of the table holder element including scrollbar width when
78
+ * the table has defined size and the width of the window excluding scrollbar width when
79
+ * the table has no defined size (the window is a scrollable container).
80
+ *
81
+ * This is a bug, as the method should always return stable values, always without scrollbar width.
82
+ * Changing this behavior would break the column calculators, which would also need to be adjusted.
83
+ *
84
+ * @returns {number}
85
+ */
59
86
  getWorkspaceWidth() {
60
- const {
61
- wtSettings
62
- } = this;
63
87
  const {
64
88
  rootDocument,
65
89
  rootWindow
66
90
  } = this.domBindings;
67
91
  const trimmingContainer = this.dataAccessObject.inlineStartOverlayTrimmingContainer;
68
- const docOffsetWidth = rootDocument.documentElement.offsetWidth;
69
- const totalColumns = wtSettings.getSetting('totalColumns');
70
- const preventOverflow = wtSettings.getSetting('preventOverflow');
71
- const isRtl = wtSettings.getSetting('rtlMode');
72
- const tableRect = this.wtTable.TABLE.getBoundingClientRect();
73
- const inlineStart = isRtl ? tableRect.right - docOffsetWidth : tableRect.left;
74
- const tableOffset = docOffsetWidth - inlineStart;
75
92
  let width;
76
- let overflow;
77
- if (preventOverflow) {
78
- return (0, _element.outerWidth)(this.wtTable.wtRootElement);
79
- }
80
- if (wtSettings.getSetting('freezeOverlays')) {
81
- width = Math.min(tableOffset, docOffsetWidth);
93
+ if (trimmingContainer === rootWindow) {
94
+ const totalColumns = this.wtSettings.getSetting('totalColumns');
95
+ width = this.wtTable.holder.offsetWidth;
96
+ if (this.getRowHeaderWidth() + this.sumColumnWidths(0, totalColumns) > width) {
97
+ width = rootDocument.documentElement.clientWidth;
98
+ }
82
99
  } else {
83
- width = Math.min(this.getContainerFillWidth(), tableOffset, docOffsetWidth);
84
- }
85
- if (trimmingContainer === rootWindow && totalColumns > 0 && this.sumColumnWidths(0, totalColumns - 1) > width) {
86
- // in case sum of column widths is higher than available stylesheet width, let's assume using the whole window
87
- // otherwise continue below, which will allow stretching
88
- // this is used in `scroll_window.html`
89
- // TODO test me
90
- return rootDocument.documentElement.clientWidth;
100
+ width = trimmingContainer.clientWidth;
91
101
  }
92
- if (trimmingContainer !== rootWindow) {
93
- overflow = (0, _element.getStyle)(this.dataAccessObject.inlineStartOverlayTrimmingContainer, 'overflow', rootWindow);
94
- if (overflow === 'scroll' || overflow === 'hidden' || overflow === 'auto') {
95
- // this is used in `scroll.html`
96
- // TODO test me
97
- return Math.max(width, trimmingContainer.clientWidth);
98
- }
102
+ return width;
103
+ }
104
+
105
+ /**
106
+ * @returns {number}
107
+ */
108
+ getViewportWidth() {
109
+ const containerWidth = this.getWorkspaceWidth();
110
+ if (containerWidth === Infinity) {
111
+ return containerWidth;
99
112
  }
100
- const stretchSetting = wtSettings.getSetting('stretchH');
101
- if (stretchSetting === 'none' || !stretchSetting) {
102
- // if no stretching is used, return the maximum used workspace width
103
- return Math.max(width, (0, _element.outerWidth)(this.wtTable.TABLE));
113
+ const rowHeaderWidth = this.getRowHeaderWidth();
114
+ if (rowHeaderWidth > 0) {
115
+ return containerWidth - rowHeaderWidth;
104
116
  }
105
-
106
- // if stretching is used, return the actual container width, so the columns can fit inside it
107
- return width;
117
+ return containerWidth;
108
118
  }
109
119
 
110
120
  /**
@@ -125,6 +135,24 @@ class Viewport {
125
135
  return this.wtTable.hider.offsetWidth > this.getWorkspaceWidth();
126
136
  }
127
137
 
138
+ /**
139
+ * Checks if the table uses the window as a viewport and if there is a vertical scrollbar.
140
+ *
141
+ * @returns {boolean}
142
+ */
143
+ isVerticallyScrollableByWindow() {
144
+ return this.dataAccessObject.topOverlayTrimmingContainer === this.domBindings.rootWindow;
145
+ }
146
+
147
+ /**
148
+ * Checks if the table uses the window as a viewport and if there is a horizontal scrollbar.
149
+ *
150
+ * @returns {boolean}
151
+ */
152
+ isHorizontallyScrollableByWindow() {
153
+ return this.dataAccessObject.inlineStartOverlayTrimmingContainer === this.domBindings.rootWindow;
154
+ }
155
+
128
156
  /**
129
157
  * @param {number} from The visual column index from the width sum is start calculated.
130
158
  * @param {number} length The length of the column to traverse.
@@ -140,24 +168,6 @@ class Viewport {
140
168
  return sum;
141
169
  }
142
170
 
143
- /**
144
- * @returns {number}
145
- */
146
- getContainerFillWidth() {
147
- if (this.containerWidth) {
148
- return this.containerWidth;
149
- }
150
- const mainContainer = this.wtTable.holder;
151
- const dummyElement = this.domBindings.rootDocument.createElement('div');
152
- dummyElement.style.width = '100%';
153
- dummyElement.style.height = '1px';
154
- mainContainer.appendChild(dummyElement);
155
- const fillWidth = dummyElement.offsetWidth;
156
- this.containerWidth = fillWidth;
157
- mainContainer.removeChild(dummyElement);
158
- return fillWidth;
159
- }
160
-
161
171
  /**
162
172
  * @returns {number}
163
173
  */
@@ -178,21 +188,6 @@ class Viewport {
178
188
  return this.columnHeaderHeight;
179
189
  }
180
190
 
181
- /**
182
- * @returns {number}
183
- */
184
- getViewportHeight() {
185
- let containerHeight = this.getWorkspaceHeight();
186
- if (containerHeight === Infinity) {
187
- return containerHeight;
188
- }
189
- const columnHeaderHeight = this.getColumnHeaderHeight();
190
- if (columnHeaderHeight > 0) {
191
- containerHeight -= columnHeaderHeight;
192
- }
193
- return containerHeight;
194
- }
195
-
196
191
  /**
197
192
  * @returns {number}
198
193
  */
@@ -227,21 +222,6 @@ class Viewport {
227
222
  return this.rowHeaderWidth;
228
223
  }
229
224
 
230
- /**
231
- * @returns {number}
232
- */
233
- getViewportWidth() {
234
- const containerWidth = this.getWorkspaceWidth();
235
- if (containerWidth === Infinity) {
236
- return containerWidth;
237
- }
238
- const rowHeaderWidth = this.getRowHeaderWidth();
239
- if (rowHeaderWidth > 0) {
240
- return containerWidth - rowHeaderWidth;
241
- }
242
- return containerWidth;
243
- }
244
-
245
225
  /**
246
226
  * Creates rows calculators. The type of the calculations can be chosen from the list:
247
227
  * - 'rendered' Calculates rows that should be rendered within the current table's viewport;
@@ -284,6 +264,7 @@ class Viewport {
284
264
  viewportHeight: height,
285
265
  scrollOffset: pos,
286
266
  totalRows: wtSettings.getSetting('totalRows'),
267
+ defaultRowHeight: this.instance.stylesHandler.getDefaultRowHeight(),
287
268
  rowHeightFn: sourceRow => wtTable.getRowHeight(sourceRow),
288
269
  overrideFn: wtSettings.getSettingPure('viewportRowCalculatorOverride'),
289
270
  horizontalScrollbarHeight: scrollbarHeight
@@ -403,11 +384,22 @@ class Viewport {
403
384
  }
404
385
  const {
405
386
  startRow: renderedStartRow,
406
- endRow: renderedEndRow
387
+ endRow: renderedEndRow,
388
+ rowStartOffset,
389
+ rowEndOffset
407
390
  } = this.rowsRenderCalculator;
391
+ const totalRows = this.wtSettings.getSetting('totalRows') - 1;
392
+ const renderingThreshold = this.wtSettings.getSetting('viewportRowRenderingThreshold');
393
+ if (Number.isInteger(renderingThreshold) && renderingThreshold > 0) {
394
+ startRow = Math.max(0, startRow - Math.min(rowStartOffset, renderingThreshold));
395
+ endRow = Math.min(totalRows, endRow + Math.min(rowEndOffset, renderingThreshold));
396
+ } else if (renderingThreshold === 'auto') {
397
+ startRow = Math.max(0, startRow - Math.ceil(rowStartOffset / 2));
398
+ endRow = Math.min(totalRows, endRow + Math.ceil(rowEndOffset / 2));
399
+ }
408
400
  if (startRow < renderedStartRow || startRow === renderedStartRow && startRow > 0) {
409
401
  return false;
410
- } else if (endRow > renderedEndRow || endRow === renderedEndRow && endRow < this.wtSettings.getSetting('totalRows') - 1) {
402
+ } else if (endRow > renderedEndRow || endRow === renderedEndRow && endRow < totalRows) {
411
403
  return false;
412
404
  }
413
405
  return true;
@@ -441,11 +433,22 @@ class Viewport {
441
433
  }
442
434
  const {
443
435
  startColumn: renderedStartColumn,
444
- endColumn: renderedEndColumn
436
+ endColumn: renderedEndColumn,
437
+ columnStartOffset,
438
+ columnEndOffset
445
439
  } = this.columnsRenderCalculator;
440
+ const totalColumns = this.wtSettings.getSetting('totalColumns') - 1;
441
+ const renderingThreshold = this.wtSettings.getSetting('viewportColumnRenderingThreshold');
442
+ if (Number.isInteger(renderingThreshold) && renderingThreshold > 0) {
443
+ startColumn = Math.max(0, startColumn - Math.min(columnStartOffset, renderingThreshold));
444
+ endColumn = Math.min(totalColumns, endColumn + Math.min(columnEndOffset, renderingThreshold));
445
+ } else if (renderingThreshold === 'auto') {
446
+ startColumn = Math.max(0, startColumn - Math.ceil(columnStartOffset / 2));
447
+ endColumn = Math.min(totalColumns, endColumn + Math.ceil(columnEndOffset / 2));
448
+ }
446
449
  if (startColumn < renderedStartColumn || startColumn === renderedStartColumn && startColumn > 0) {
447
450
  return false;
448
- } else if (endColumn > renderedEndColumn || endColumn === renderedEndColumn && endColumn < this.wtSettings.getSetting('totalColumns') - 1) {
451
+ } else if (endColumn > renderedEndColumn || endColumn === renderedEndColumn && endColumn < totalColumns) {
449
452
  return false;
450
453
  }
451
454
  return true;
@@ -1,4 +1,5 @@
1
- import { getScrollbarWidth, getStyle, offset, outerHeight, outerWidth } from "../../../helpers/dom/element.mjs";
1
+ import "core-js/modules/esnext.iterator.map.js";
2
+ import { getScrollbarWidth, offset, outerHeight, outerWidth } from "../../../helpers/dom/element.mjs";
2
3
  import { objectEach } from "../../../helpers/object.mjs";
3
4
  import { FullyVisibleColumnsCalculationType, FullyVisibleRowsCalculationType, PartiallyVisibleColumnsCalculationType, PartiallyVisibleRowsCalculationType, RenderedAllColumnsCalculationType, RenderedAllRowsCalculationType, RenderedColumnsCalculationType, RenderedRowsCalculationType, ViewportColumnsCalculator, ViewportRowsCalculator } from "./calculator/index.mjs";
4
5
  /**
@@ -24,7 +25,6 @@ class Viewport {
24
25
  this.oversizedColumnHeaders = [];
25
26
  this.hasOversizedColumnHeadersMarked = {};
26
27
  this.clientHeight = 0;
27
- this.containerWidth = NaN;
28
28
  this.rowHeaderWidth = NaN;
29
29
  this.rowsVisibleCalculator = null;
30
30
  this.columnsVisibleCalculator = null;
@@ -53,55 +53,65 @@ class Viewport {
53
53
  }
54
54
  return height;
55
55
  }
56
+
57
+ /**
58
+ * @returns {number}
59
+ */
60
+ getViewportHeight() {
61
+ let containerHeight = this.getWorkspaceHeight();
62
+ if (containerHeight === Infinity) {
63
+ return containerHeight;
64
+ }
65
+ const columnHeaderHeight = this.getColumnHeaderHeight();
66
+ if (columnHeaderHeight > 0) {
67
+ containerHeight -= columnHeaderHeight;
68
+ }
69
+ return containerHeight;
70
+ }
71
+
72
+ /**
73
+ * Gets the width of the table workspace (in pixels). The workspace size in the current
74
+ * implementation returns the width of the table holder element including scrollbar width when
75
+ * the table has defined size and the width of the window excluding scrollbar width when
76
+ * the table has no defined size (the window is a scrollable container).
77
+ *
78
+ * This is a bug, as the method should always return stable values, always without scrollbar width.
79
+ * Changing this behavior would break the column calculators, which would also need to be adjusted.
80
+ *
81
+ * @returns {number}
82
+ */
56
83
  getWorkspaceWidth() {
57
- const {
58
- wtSettings
59
- } = this;
60
84
  const {
61
85
  rootDocument,
62
86
  rootWindow
63
87
  } = this.domBindings;
64
88
  const trimmingContainer = this.dataAccessObject.inlineStartOverlayTrimmingContainer;
65
- const docOffsetWidth = rootDocument.documentElement.offsetWidth;
66
- const totalColumns = wtSettings.getSetting('totalColumns');
67
- const preventOverflow = wtSettings.getSetting('preventOverflow');
68
- const isRtl = wtSettings.getSetting('rtlMode');
69
- const tableRect = this.wtTable.TABLE.getBoundingClientRect();
70
- const inlineStart = isRtl ? tableRect.right - docOffsetWidth : tableRect.left;
71
- const tableOffset = docOffsetWidth - inlineStart;
72
89
  let width;
73
- let overflow;
74
- if (preventOverflow) {
75
- return outerWidth(this.wtTable.wtRootElement);
76
- }
77
- if (wtSettings.getSetting('freezeOverlays')) {
78
- width = Math.min(tableOffset, docOffsetWidth);
90
+ if (trimmingContainer === rootWindow) {
91
+ const totalColumns = this.wtSettings.getSetting('totalColumns');
92
+ width = this.wtTable.holder.offsetWidth;
93
+ if (this.getRowHeaderWidth() + this.sumColumnWidths(0, totalColumns) > width) {
94
+ width = rootDocument.documentElement.clientWidth;
95
+ }
79
96
  } else {
80
- width = Math.min(this.getContainerFillWidth(), tableOffset, docOffsetWidth);
81
- }
82
- if (trimmingContainer === rootWindow && totalColumns > 0 && this.sumColumnWidths(0, totalColumns - 1) > width) {
83
- // in case sum of column widths is higher than available stylesheet width, let's assume using the whole window
84
- // otherwise continue below, which will allow stretching
85
- // this is used in `scroll_window.html`
86
- // TODO test me
87
- return rootDocument.documentElement.clientWidth;
97
+ width = trimmingContainer.clientWidth;
88
98
  }
89
- if (trimmingContainer !== rootWindow) {
90
- overflow = getStyle(this.dataAccessObject.inlineStartOverlayTrimmingContainer, 'overflow', rootWindow);
91
- if (overflow === 'scroll' || overflow === 'hidden' || overflow === 'auto') {
92
- // this is used in `scroll.html`
93
- // TODO test me
94
- return Math.max(width, trimmingContainer.clientWidth);
95
- }
99
+ return width;
100
+ }
101
+
102
+ /**
103
+ * @returns {number}
104
+ */
105
+ getViewportWidth() {
106
+ const containerWidth = this.getWorkspaceWidth();
107
+ if (containerWidth === Infinity) {
108
+ return containerWidth;
96
109
  }
97
- const stretchSetting = wtSettings.getSetting('stretchH');
98
- if (stretchSetting === 'none' || !stretchSetting) {
99
- // if no stretching is used, return the maximum used workspace width
100
- return Math.max(width, outerWidth(this.wtTable.TABLE));
110
+ const rowHeaderWidth = this.getRowHeaderWidth();
111
+ if (rowHeaderWidth > 0) {
112
+ return containerWidth - rowHeaderWidth;
101
113
  }
102
-
103
- // if stretching is used, return the actual container width, so the columns can fit inside it
104
- return width;
114
+ return containerWidth;
105
115
  }
106
116
 
107
117
  /**
@@ -122,6 +132,24 @@ class Viewport {
122
132
  return this.wtTable.hider.offsetWidth > this.getWorkspaceWidth();
123
133
  }
124
134
 
135
+ /**
136
+ * Checks if the table uses the window as a viewport and if there is a vertical scrollbar.
137
+ *
138
+ * @returns {boolean}
139
+ */
140
+ isVerticallyScrollableByWindow() {
141
+ return this.dataAccessObject.topOverlayTrimmingContainer === this.domBindings.rootWindow;
142
+ }
143
+
144
+ /**
145
+ * Checks if the table uses the window as a viewport and if there is a horizontal scrollbar.
146
+ *
147
+ * @returns {boolean}
148
+ */
149
+ isHorizontallyScrollableByWindow() {
150
+ return this.dataAccessObject.inlineStartOverlayTrimmingContainer === this.domBindings.rootWindow;
151
+ }
152
+
125
153
  /**
126
154
  * @param {number} from The visual column index from the width sum is start calculated.
127
155
  * @param {number} length The length of the column to traverse.
@@ -137,24 +165,6 @@ class Viewport {
137
165
  return sum;
138
166
  }
139
167
 
140
- /**
141
- * @returns {number}
142
- */
143
- getContainerFillWidth() {
144
- if (this.containerWidth) {
145
- return this.containerWidth;
146
- }
147
- const mainContainer = this.wtTable.holder;
148
- const dummyElement = this.domBindings.rootDocument.createElement('div');
149
- dummyElement.style.width = '100%';
150
- dummyElement.style.height = '1px';
151
- mainContainer.appendChild(dummyElement);
152
- const fillWidth = dummyElement.offsetWidth;
153
- this.containerWidth = fillWidth;
154
- mainContainer.removeChild(dummyElement);
155
- return fillWidth;
156
- }
157
-
158
168
  /**
159
169
  * @returns {number}
160
170
  */
@@ -175,21 +185,6 @@ class Viewport {
175
185
  return this.columnHeaderHeight;
176
186
  }
177
187
 
178
- /**
179
- * @returns {number}
180
- */
181
- getViewportHeight() {
182
- let containerHeight = this.getWorkspaceHeight();
183
- if (containerHeight === Infinity) {
184
- return containerHeight;
185
- }
186
- const columnHeaderHeight = this.getColumnHeaderHeight();
187
- if (columnHeaderHeight > 0) {
188
- containerHeight -= columnHeaderHeight;
189
- }
190
- return containerHeight;
191
- }
192
-
193
188
  /**
194
189
  * @returns {number}
195
190
  */
@@ -224,21 +219,6 @@ class Viewport {
224
219
  return this.rowHeaderWidth;
225
220
  }
226
221
 
227
- /**
228
- * @returns {number}
229
- */
230
- getViewportWidth() {
231
- const containerWidth = this.getWorkspaceWidth();
232
- if (containerWidth === Infinity) {
233
- return containerWidth;
234
- }
235
- const rowHeaderWidth = this.getRowHeaderWidth();
236
- if (rowHeaderWidth > 0) {
237
- return containerWidth - rowHeaderWidth;
238
- }
239
- return containerWidth;
240
- }
241
-
242
222
  /**
243
223
  * Creates rows calculators. The type of the calculations can be chosen from the list:
244
224
  * - 'rendered' Calculates rows that should be rendered within the current table's viewport;
@@ -281,6 +261,7 @@ class Viewport {
281
261
  viewportHeight: height,
282
262
  scrollOffset: pos,
283
263
  totalRows: wtSettings.getSetting('totalRows'),
264
+ defaultRowHeight: this.instance.stylesHandler.getDefaultRowHeight(),
284
265
  rowHeightFn: sourceRow => wtTable.getRowHeight(sourceRow),
285
266
  overrideFn: wtSettings.getSettingPure('viewportRowCalculatorOverride'),
286
267
  horizontalScrollbarHeight: scrollbarHeight
@@ -400,11 +381,22 @@ class Viewport {
400
381
  }
401
382
  const {
402
383
  startRow: renderedStartRow,
403
- endRow: renderedEndRow
384
+ endRow: renderedEndRow,
385
+ rowStartOffset,
386
+ rowEndOffset
404
387
  } = this.rowsRenderCalculator;
388
+ const totalRows = this.wtSettings.getSetting('totalRows') - 1;
389
+ const renderingThreshold = this.wtSettings.getSetting('viewportRowRenderingThreshold');
390
+ if (Number.isInteger(renderingThreshold) && renderingThreshold > 0) {
391
+ startRow = Math.max(0, startRow - Math.min(rowStartOffset, renderingThreshold));
392
+ endRow = Math.min(totalRows, endRow + Math.min(rowEndOffset, renderingThreshold));
393
+ } else if (renderingThreshold === 'auto') {
394
+ startRow = Math.max(0, startRow - Math.ceil(rowStartOffset / 2));
395
+ endRow = Math.min(totalRows, endRow + Math.ceil(rowEndOffset / 2));
396
+ }
405
397
  if (startRow < renderedStartRow || startRow === renderedStartRow && startRow > 0) {
406
398
  return false;
407
- } else if (endRow > renderedEndRow || endRow === renderedEndRow && endRow < this.wtSettings.getSetting('totalRows') - 1) {
399
+ } else if (endRow > renderedEndRow || endRow === renderedEndRow && endRow < totalRows) {
408
400
  return false;
409
401
  }
410
402
  return true;
@@ -438,11 +430,22 @@ class Viewport {
438
430
  }
439
431
  const {
440
432
  startColumn: renderedStartColumn,
441
- endColumn: renderedEndColumn
433
+ endColumn: renderedEndColumn,
434
+ columnStartOffset,
435
+ columnEndOffset
442
436
  } = this.columnsRenderCalculator;
437
+ const totalColumns = this.wtSettings.getSetting('totalColumns') - 1;
438
+ const renderingThreshold = this.wtSettings.getSetting('viewportColumnRenderingThreshold');
439
+ if (Number.isInteger(renderingThreshold) && renderingThreshold > 0) {
440
+ startColumn = Math.max(0, startColumn - Math.min(columnStartOffset, renderingThreshold));
441
+ endColumn = Math.min(totalColumns, endColumn + Math.min(columnEndOffset, renderingThreshold));
442
+ } else if (renderingThreshold === 'auto') {
443
+ startColumn = Math.max(0, startColumn - Math.ceil(columnStartOffset / 2));
444
+ endColumn = Math.min(totalColumns, endColumn + Math.ceil(columnEndOffset / 2));
445
+ }
443
446
  if (startColumn < renderedStartColumn || startColumn === renderedStartColumn && startColumn > 0) {
444
447
  return false;
445
- } else if (endColumn > renderedEndColumn || endColumn === renderedEndColumn && endColumn < this.wtSettings.getSetting('totalColumns') - 1) {
448
+ } else if (endColumn > renderedEndColumn || endColumn === renderedEndColumn && endColumn < totalColumns) {
446
449
  return false;
447
450
  }
448
451
  return true;
package/CHANGELOG.md CHANGED
@@ -9,6 +9,42 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
 
10
10
  <!-- UNVERSIONED -->
11
11
 
12
+ ## [15.0.0] - 2024-12-11
13
+
14
+ ### Added
15
+ - Added support for rows/columns virtualization of the merged cells. [#11162](https://github.com/handsontable/handsontable/pull/11162)
16
+ - Added missing typings for language files [#11236](https://github.com/handsontable/handsontable/pull/11236)
17
+ - Added ability to cache renderers [#11264](https://github.com/handsontable/handsontable/pull/11264)
18
+ - React: Added `@handsontable/react-wrapper` to the monorepo. [#11212](https://github.com/handsontable/handsontable/pull/11212)
19
+
20
+ ### Changed
21
+ - **Breaking change**: Updated production dependencies (remove `pikaday` - using `@handsontable/pikaday` instead, bump `numbro`, and `dompurify`) [#10929](https://github.com/handsontable/handsontable/pull/10929)
22
+ - Refactor the column stretching logic, move to the separate plugin and fix bugs related to the columns widths misalignments. [#11210](https://github.com/handsontable/handsontable/pull/11210)
23
+ - Updated typings for dropdown and context menu options [#11237](https://github.com/handsontable/handsontable/pull/11237)
24
+ - Use node 22 [#11265](https://github.com/handsontable/handsontable/pull/11265)
25
+
26
+ ### Removed
27
+ - **Breaking change**: Removed check marks from alignment submenu. [#11278](https://github.com/handsontable/handsontable/pull/11278)
28
+ - Removed `aria-hidden` from the TextEditor and PasswordEditor's `TEXTAREA` elements. [#11218](https://github.com/handsontable/handsontable/pull/11218)
29
+
30
+ ### Fixed
31
+ - Fixed the Autocomplete and Dropdown editor's container size counting [#11201](https://github.com/handsontable/handsontable/pull/11201)
32
+ - Fixed focus management for dropdown menu after `updateSettings` call [#11205](https://github.com/handsontable/handsontable/pull/11205)
33
+ - Fixed columns selection while the column is moving when the _NestedHeaders_ plugin is enabled. [#11206](https://github.com/handsontable/handsontable/pull/11206)
34
+ - Fixed copying values when fast IME edit was enabled [#11243](https://github.com/handsontable/handsontable/pull/11243)
35
+ - Fixed an issue with export of common lib in package.json [#11247](https://github.com/handsontable/handsontable/pull/11247)
36
+ - Fixed checkbox switching in merged cells [#11252](https://github.com/handsontable/handsontable/pull/11252)
37
+ - Added missing "name" attribute to the focus catcher [#11256](https://github.com/handsontable/handsontable/pull/11256)
38
+ - Fixed data deletion for checkbox cell types [#11263](https://github.com/handsontable/handsontable/pull/11263)
39
+ - Fixed horizontal scrolling for nested headers [#11269](https://github.com/handsontable/handsontable/pull/11269)
40
+ - Fixed a problem where the Filters' dropdown container did not match the dropdown content size. [#11273](https://github.com/handsontable/handsontable/pull/11273)
41
+ - Fixed an error that thrown on hiding already selected columns [#11277](https://github.com/handsontable/handsontable/pull/11277)
42
+ - Fixed cell fast edit mode when a comment is shown. [#11280](https://github.com/handsontable/handsontable/pull/11280)
43
+ - Fixed an error for cases where the keyboard event was triggered with `key` as `undefined`. [#11281](https://github.com/handsontable/handsontable/pull/11281)
44
+ - Fixed input width calculation for password cell type [#11283](https://github.com/handsontable/handsontable/pull/11283)
45
+ - Fixed missing `source` argument for `setDataAtCell` method [#11287](https://github.com/handsontable/handsontable/pull/11287)
46
+ - Fixed top overlay misalignment after vertical scrollbar disappears [#11289](https://github.com/handsontable/handsontable/pull/11289)
47
+
12
48
  ## [14.6.1] - 2024-10-17
13
49
 
14
50
  ### Removed
package/README.md CHANGED
@@ -18,7 +18,7 @@ It provides data binding, data validation, filtering, sorting, and CRUD operatio
18
18
  <tr>
19
19
  <td>
20
20
  <img src="https://raw.githubusercontent.com/handsontable/handsontable/develop/resources/icons/react-icon.svg" width="14" height="14">
21
- <a href="https://github.com/handsontable/handsontable/tree/master/wrappers/react"> <strong>React</strong></a>&nbsp;
21
+ <a href="https://github.com/handsontable/handsontable/tree/master/wrappers/react-wrapper"> <strong>React</strong></a>&nbsp;
22
22
  </td>
23
23
  <td>
24
24
  <img src="https://raw.githubusercontent.com/handsontable/handsontable/develop/resources/icons/angular-icon.svg" width="14" height="14">
package/base.js CHANGED
@@ -4,7 +4,7 @@ exports.__esModule = true;
4
4
  var _core = _interopRequireDefault(require("./core"));
5
5
  var _rootInstance = require("./utils/rootInstance");
6
6
  var _dataMap = require("./dataMap");
7
- var _pluginHooks = _interopRequireDefault(require("./pluginHooks"));
7
+ var _hooks = require("./core/hooks");
8
8
  var _registry = require("./i18n/registry");
9
9
  var _registry2 = require("./cellTypes/registry");
10
10
  var _textType = require("./cellTypes/textType");
@@ -41,12 +41,12 @@ Handsontable.Core = function (rootElement) {
41
41
  return new _core.default(rootElement, userSettings, _rootInstance.rootInstanceSymbol);
42
42
  };
43
43
  Handsontable.DefaultSettings = (0, _dataMap.metaSchemaFactory)();
44
- Handsontable.hooks = _pluginHooks.default.getSingleton();
44
+ Handsontable.hooks = _hooks.Hooks.getSingleton();
45
45
  Handsontable.CellCoords = _src.CellCoords;
46
46
  Handsontable.CellRange = _src.CellRange;
47
47
  Handsontable.packageName = 'handsontable';
48
- Handsontable.buildDate = "17/10/2024 09:16:13";
49
- Handsontable.version = "14.6.1";
48
+ Handsontable.buildDate = "03/12/2024 15:05:57";
49
+ Handsontable.version = "15.0.0-next-4472a60-20241203";
50
50
  Handsontable.languages = {
51
51
  dictionaryKeys: _registry.dictionaryKeys,
52
52
  getLanguageDictionary: _registry.getLanguageDictionary,
package/base.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import Core from "./core.mjs";
2
2
  import { rootInstanceSymbol } from "./utils/rootInstance.mjs";
3
3
  import { metaSchemaFactory } from "./dataMap/index.mjs";
4
- import Hooks from "./pluginHooks.mjs"; // FIXME: Bug in eslint-plugin-import: https://github.com/benmosher/eslint-plugin-import/issues/1883
4
+ import { Hooks } from "./core/hooks/index.mjs"; // FIXME: Bug in eslint-plugin-import: https://github.com/benmosher/eslint-plugin-import/issues/1883
5
5
  /* eslint-disable import/named */
6
6
  import { dictionaryKeys, getTranslatedPhrase, registerLanguageDictionary, getLanguagesDictionaries, getLanguageDictionary } from "./i18n/registry.mjs";
7
7
  /* eslint-enable import/named */
@@ -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 = "17/10/2024 09:16:16";
39
- Handsontable.version = "14.6.1";
38
+ Handsontable.buildDate = "03/12/2024 15:06:03";
39
+ Handsontable.version = "15.0.0-next-4472a60-20241203";
40
40
  Handsontable.languages = {
41
41
  dictionaryKeys,
42
42
  getLanguageDictionary,
@@ -55,6 +55,7 @@ function createInputElement(hot) {
55
55
  const rootDocument = hot.rootDocument;
56
56
  const input = rootDocument.createElement('input');
57
57
  input.type = 'text';
58
+ input.name = '__htFocusCatcher';
58
59
  input.classList.add('htFocusCatcher');
59
60
  if (hot.getSettings().ariaTags) {
60
61
  (0, _element.setAttribute)(input, [(0, _a11y.A11Y_PRESENTATION)(), (0, _a11y.A11Y_HIDDEN)()]);
@@ -51,6 +51,7 @@ function createInputElement(hot) {
51
51
  const rootDocument = hot.rootDocument;
52
52
  const input = rootDocument.createElement('input');
53
53
  input.type = 'text';
54
+ input.name = '__htFocusCatcher';
54
55
  input.classList.add('htFocusCatcher');
55
56
  if (hot.getSettings().ariaTags) {
56
57
  setAttribute(input, [A11Y_PRESENTATION(), A11Y_HIDDEN()]);