handsontable 14.6.1 → 15.0.0-next-4472a60-20241203

Sign up to get free protection for your applications and to get access to all the features.
Files changed (392) hide show
  1. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +23 -0
  2. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +23 -0
  3. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +23 -0
  4. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +23 -0
  5. package/3rdparty/walkontable/src/calculator/index.js +1 -2
  6. package/3rdparty/walkontable/src/calculator/index.mjs +2 -2
  7. package/3rdparty/walkontable/src/calculator/viewportBase.js +2 -0
  8. package/3rdparty/walkontable/src/calculator/viewportBase.mjs +2 -0
  9. package/3rdparty/walkontable/src/calculator/viewportRows.js +3 -3
  10. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +3 -3
  11. package/3rdparty/walkontable/src/core/_base.js +29 -23
  12. package/3rdparty/walkontable/src/core/_base.mjs +29 -23
  13. package/3rdparty/walkontable/src/core/clone.js +1 -0
  14. package/3rdparty/walkontable/src/core/clone.mjs +1 -0
  15. package/3rdparty/walkontable/src/core/core.js +2 -0
  16. package/3rdparty/walkontable/src/core/core.mjs +2 -0
  17. package/3rdparty/walkontable/src/facade/core.js +12 -6
  18. package/3rdparty/walkontable/src/facade/core.mjs +12 -6
  19. package/3rdparty/walkontable/src/index.js +0 -1
  20. package/3rdparty/walkontable/src/index.mjs +2 -2
  21. package/3rdparty/walkontable/src/overlay/_base.js +8 -1
  22. package/3rdparty/walkontable/src/overlay/_base.mjs +8 -1
  23. package/3rdparty/walkontable/src/overlay/bottom.js +5 -6
  24. package/3rdparty/walkontable/src/overlay/bottom.mjs +5 -6
  25. package/3rdparty/walkontable/src/overlay/index.js +2 -0
  26. package/3rdparty/walkontable/src/overlay/inlineStart.js +8 -7
  27. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +9 -8
  28. package/3rdparty/walkontable/src/overlay/top.js +9 -8
  29. package/3rdparty/walkontable/src/overlay/top.mjs +10 -9
  30. package/3rdparty/walkontable/src/overlays.js +10 -26
  31. package/3rdparty/walkontable/src/overlays.mjs +10 -26
  32. package/3rdparty/walkontable/src/renderer/colGroup.js +1 -1
  33. package/3rdparty/walkontable/src/renderer/colGroup.mjs +1 -1
  34. package/3rdparty/walkontable/src/renderer/index.js +4 -2
  35. package/3rdparty/walkontable/src/renderer/index.mjs +4 -2
  36. package/3rdparty/walkontable/src/renderer/table.js +13 -4
  37. package/3rdparty/walkontable/src/renderer/table.mjs +13 -4
  38. package/3rdparty/walkontable/src/scroll.js +46 -37
  39. package/3rdparty/walkontable/src/scroll.mjs +46 -37
  40. package/3rdparty/walkontable/src/selection/border/border.js +52 -58
  41. package/3rdparty/walkontable/src/selection/border/border.mjs +53 -59
  42. package/3rdparty/walkontable/src/selection/border/utils.js +26 -0
  43. package/3rdparty/walkontable/src/selection/border/utils.mjs +22 -0
  44. package/3rdparty/walkontable/src/selection/index.js +6 -4
  45. package/3rdparty/walkontable/src/selection/index.mjs +1 -1
  46. package/3rdparty/walkontable/src/selection/manager.js +3 -0
  47. package/3rdparty/walkontable/src/selection/manager.mjs +3 -0
  48. package/3rdparty/walkontable/src/selection/scanner.js +46 -11
  49. package/3rdparty/walkontable/src/selection/scanner.mjs +46 -11
  50. package/3rdparty/walkontable/src/settings.js +8 -9
  51. package/3rdparty/walkontable/src/settings.mjs +8 -9
  52. package/3rdparty/walkontable/src/table/master.js +1 -1
  53. package/3rdparty/walkontable/src/table/master.mjs +2 -2
  54. package/3rdparty/walkontable/src/table.js +25 -36
  55. package/3rdparty/walkontable/src/table.mjs +25 -36
  56. package/3rdparty/walkontable/src/types.js +1 -0
  57. package/3rdparty/walkontable/src/types.mjs +1 -0
  58. package/3rdparty/walkontable/src/utils/column.js +1 -43
  59. package/3rdparty/walkontable/src/utils/column.mjs +1 -43
  60. package/3rdparty/walkontable/src/utils/stylesHandler.js +295 -0
  61. package/3rdparty/walkontable/src/utils/stylesHandler.mjs +291 -0
  62. package/3rdparty/walkontable/src/viewport.js +94 -91
  63. package/3rdparty/walkontable/src/viewport.mjs +95 -92
  64. package/CHANGELOG.md +36 -0
  65. package/README.md +1 -1
  66. package/base.js +4 -4
  67. package/base.mjs +3 -3
  68. package/core/focusCatcher/focusDetector.js +1 -0
  69. package/core/focusCatcher/focusDetector.mjs +1 -0
  70. package/core/hooks/bucket.js +184 -0
  71. package/core/hooks/bucket.mjs +180 -0
  72. package/{pluginHooks.mjs → core/hooks/constants.js} +38 -486
  73. package/{pluginHooks.js → core/hooks/constants.mjs} +34 -489
  74. package/{pluginHooks.d.ts → core/hooks/index.d.ts} +22 -25
  75. package/core/hooks/index.js +385 -0
  76. package/core/hooks/index.mjs +381 -0
  77. package/core/index.js +2 -0
  78. package/core.d.ts +5 -3
  79. package/core.js +77 -35
  80. package/core.mjs +69 -27
  81. package/dataMap/dataMap.js +3 -0
  82. package/dataMap/dataMap.mjs +3 -0
  83. package/dataMap/dataSource.js +2 -0
  84. package/dataMap/dataSource.mjs +2 -0
  85. package/dataMap/metaManager/index.js +2 -0
  86. package/dataMap/metaManager/index.mjs +2 -0
  87. package/dataMap/metaManager/metaSchema.js +91 -5
  88. package/dataMap/metaManager/metaSchema.mjs +91 -5
  89. package/dataMap/metaManager/mods/dynamicCellMeta.js +2 -3
  90. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
  91. package/dataMap/metaManager/mods/extendMetaProperties.js +2 -0
  92. package/dataMap/metaManager/mods/extendMetaProperties.mjs +2 -0
  93. package/dist/handsontable.css +84 -72
  94. package/dist/handsontable.full.css +317 -304
  95. package/dist/handsontable.full.js +14826 -7294
  96. package/dist/handsontable.full.min.css +15 -10
  97. package/dist/handsontable.full.min.js +262 -69
  98. package/dist/handsontable.js +7826 -5552
  99. package/dist/handsontable.min.css +10 -6
  100. package/dist/handsontable.min.js +33 -33
  101. package/dist/languages/all.js +1 -1
  102. package/dist/languages/ar-AR.js +1 -1
  103. package/dist/languages/cs-CZ.js +1 -1
  104. package/dist/languages/de-CH.js +1 -1
  105. package/dist/languages/de-DE.js +1 -1
  106. package/dist/languages/en-US.js +1 -1
  107. package/dist/languages/es-MX.js +1 -1
  108. package/dist/languages/fr-FR.js +1 -1
  109. package/dist/languages/hr-HR.js +1 -1
  110. package/dist/languages/it-IT.js +1 -1
  111. package/dist/languages/ja-JP.js +1 -1
  112. package/dist/languages/ko-KR.js +1 -1
  113. package/dist/languages/lv-LV.js +1 -1
  114. package/dist/languages/nb-NO.js +1 -1
  115. package/dist/languages/nl-NL.js +1 -1
  116. package/dist/languages/pl-PL.js +1 -1
  117. package/dist/languages/pt-BR.js +1 -1
  118. package/dist/languages/ru-RU.js +1 -1
  119. package/dist/languages/sr-SP.js +1 -1
  120. package/dist/languages/zh-CN.js +1 -1
  121. package/dist/languages/zh-TW.js +1 -1
  122. package/editorManager.js +2 -2
  123. package/editorManager.mjs +2 -2
  124. package/editors/autocompleteEditor/autocompleteEditor.js +34 -16
  125. package/editors/autocompleteEditor/autocompleteEditor.mjs +34 -16
  126. package/editors/baseEditor/baseEditor.js +25 -18
  127. package/editors/baseEditor/baseEditor.mjs +26 -19
  128. package/editors/dateEditor/dateEditor.js +9 -0
  129. package/editors/dateEditor/dateEditor.mjs +10 -1
  130. package/editors/dropdownEditor/dropdownEditor.js +4 -3
  131. package/editors/dropdownEditor/dropdownEditor.mjs +3 -1
  132. package/editors/handsontableEditor/handsontableEditor.js +36 -2
  133. package/editors/handsontableEditor/handsontableEditor.mjs +36 -2
  134. package/editors/passwordEditor/passwordEditor.js +18 -0
  135. package/editors/passwordEditor/passwordEditor.mjs +18 -0
  136. package/editors/registry.js +2 -2
  137. package/editors/registry.mjs +1 -1
  138. package/editors/selectEditor/selectEditor.js +20 -9
  139. package/editors/selectEditor/selectEditor.mjs +20 -9
  140. package/editors/textEditor/textEditor.js +5 -12
  141. package/editors/textEditor/textEditor.mjs +6 -13
  142. package/focusManager.js +5 -7
  143. package/focusManager.mjs +5 -7
  144. package/helpers/array.js +2 -0
  145. package/helpers/array.mjs +2 -0
  146. package/helpers/data.js +3 -0
  147. package/helpers/data.mjs +3 -0
  148. package/helpers/dom/element.js +39 -18
  149. package/helpers/dom/element.mjs +38 -17
  150. package/helpers/mixed.js +3 -3
  151. package/helpers/mixed.mjs +3 -3
  152. package/helpers/moves.js +3 -0
  153. package/helpers/moves.mjs +3 -0
  154. package/helpers/number.js +1 -0
  155. package/helpers/number.mjs +1 -0
  156. package/helpers/object.js +2 -0
  157. package/helpers/object.mjs +2 -0
  158. package/helpers/themes.js +17 -0
  159. package/helpers/themes.mjs +13 -0
  160. package/i18n/index.js +2 -0
  161. package/i18n/languages/index.d.ts +8 -0
  162. package/i18n/languages/ja-JP.d.ts +1 -1
  163. package/i18n/phraseFormatters/substituteVariables.js +1 -0
  164. package/i18n/phraseFormatters/substituteVariables.mjs +1 -0
  165. package/index.d.ts +9 -1
  166. package/languages/all.js +1 -1
  167. package/languages/ar-AR.js +1 -1
  168. package/languages/cs-CZ.js +1 -1
  169. package/languages/de-CH.js +1 -1
  170. package/languages/de-DE.js +1 -1
  171. package/languages/en-US.js +1 -1
  172. package/languages/es-MX.js +1 -1
  173. package/languages/fr-FR.js +1 -1
  174. package/languages/hr-HR.js +1 -1
  175. package/languages/index.js +1 -1
  176. package/languages/it-IT.js +1 -1
  177. package/languages/ja-JP.js +1 -1
  178. package/languages/ko-KR.js +1 -1
  179. package/languages/lv-LV.js +1 -1
  180. package/languages/nb-NO.js +1 -1
  181. package/languages/nl-NL.js +1 -1
  182. package/languages/pl-PL.js +1 -1
  183. package/languages/pt-BR.js +1 -1
  184. package/languages/ru-RU.js +1 -1
  185. package/languages/sr-SP.js +1 -1
  186. package/languages/zh-CN.js +1 -1
  187. package/languages/zh-TW.js +1 -1
  188. package/package.json +22 -7
  189. package/plugins/autoColumnSize/autoColumnSize.js +22 -27
  190. package/plugins/autoColumnSize/autoColumnSize.mjs +22 -27
  191. package/plugins/autoRowSize/autoRowSize.js +20 -22
  192. package/plugins/autoRowSize/autoRowSize.mjs +21 -23
  193. package/plugins/autofill/autofill.js +4 -5
  194. package/plugins/autofill/autofill.mjs +1 -1
  195. package/plugins/base/base.d.ts +1 -1
  196. package/plugins/base/base.js +41 -0
  197. package/plugins/base/base.mjs +42 -1
  198. package/plugins/base/index.js +2 -1
  199. package/plugins/base/index.mjs +1 -1
  200. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +2 -5
  201. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +2 -5
  202. package/plugins/columnSorting/columnSorting.js +5 -4
  203. package/plugins/columnSorting/columnSorting.mjs +3 -1
  204. package/plugins/columnSorting/columnStatesManager.js +1 -0
  205. package/plugins/columnSorting/columnStatesManager.mjs +1 -0
  206. package/plugins/columnSorting/utils.js +3 -0
  207. package/plugins/columnSorting/utils.mjs +3 -0
  208. package/plugins/columnSummary/endpoints.js +3 -0
  209. package/plugins/columnSummary/endpoints.mjs +3 -0
  210. package/plugins/comments/commentEditor.js +9 -0
  211. package/plugins/comments/commentEditor.mjs +9 -0
  212. package/plugins/comments/comments.js +24 -18
  213. package/plugins/comments/comments.mjs +26 -20
  214. package/plugins/comments/editorResizeObserver.js +2 -0
  215. package/plugins/comments/editorResizeObserver.mjs +2 -0
  216. package/plugins/contextMenu/contextMenu.d.ts +2 -1
  217. package/plugins/contextMenu/contextMenu.js +6 -7
  218. package/plugins/contextMenu/contextMenu.mjs +1 -1
  219. package/plugins/contextMenu/menu/index.js +2 -0
  220. package/plugins/contextMenu/menu/menu.js +10 -5
  221. package/plugins/contextMenu/menu/menu.mjs +11 -6
  222. package/plugins/contextMenu/menu/positioner.js +4 -2
  223. package/plugins/contextMenu/menu/positioner.mjs +4 -2
  224. package/plugins/contextMenu/menu/shortcuts.js +3 -1
  225. package/plugins/contextMenu/menu/shortcuts.mjs +3 -1
  226. package/plugins/contextMenu/predefinedItems/alignment.js +7 -84
  227. package/plugins/contextMenu/predefinedItems/alignment.mjs +8 -85
  228. package/plugins/contextMenu/utils.js +0 -10
  229. package/plugins/contextMenu/utils.mjs +0 -9
  230. package/plugins/copyPaste/copyPaste.d.ts +1 -0
  231. package/plugins/copyPaste/copyPaste.js +32 -23
  232. package/plugins/copyPaste/copyPaste.mjs +24 -15
  233. package/plugins/customBorders/utils.js +2 -0
  234. package/plugins/customBorders/utils.mjs +2 -0
  235. package/plugins/dropdownMenu/dropdownMenu.d.ts +2 -1
  236. package/plugins/dropdownMenu/dropdownMenu.js +6 -7
  237. package/plugins/dropdownMenu/dropdownMenu.mjs +1 -1
  238. package/plugins/exportFile/types/csv.js +1 -0
  239. package/plugins/exportFile/types/csv.mjs +1 -0
  240. package/plugins/filters/component/condition.js +2 -0
  241. package/plugins/filters/component/condition.mjs +2 -0
  242. package/plugins/filters/component/operators.js +2 -0
  243. package/plugins/filters/component/operators.mjs +2 -0
  244. package/plugins/filters/component/value.js +3 -0
  245. package/plugins/filters/component/value.mjs +3 -0
  246. package/plugins/filters/conditionCollection.js +3 -0
  247. package/plugins/filters/conditionCollection.mjs +3 -0
  248. package/plugins/filters/conditionUpdateObserver.js +2 -0
  249. package/plugins/filters/conditionUpdateObserver.mjs +2 -0
  250. package/plugins/filters/filters.js +43 -13
  251. package/plugins/filters/filters.mjs +43 -13
  252. package/plugins/filters/logicalOperations/conjunction.js +2 -0
  253. package/plugins/filters/logicalOperations/conjunction.mjs +2 -0
  254. package/plugins/filters/logicalOperations/disjunction.js +2 -0
  255. package/plugins/filters/logicalOperations/disjunction.mjs +2 -0
  256. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +2 -0
  257. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.mjs +2 -0
  258. package/plugins/filters/menu/focusController.js +38 -14
  259. package/plugins/filters/menu/focusController.mjs +38 -14
  260. package/plugins/filters/ui/multipleSelect.js +10 -0
  261. package/plugins/filters/ui/multipleSelect.mjs +10 -0
  262. package/plugins/formulas/engine/register.js +3 -0
  263. package/plugins/formulas/engine/register.mjs +3 -0
  264. package/plugins/formulas/engine/settings.js +3 -0
  265. package/plugins/formulas/engine/settings.mjs +3 -0
  266. package/plugins/formulas/formulas.js +12 -7
  267. package/plugins/formulas/formulas.mjs +6 -1
  268. package/plugins/formulas/indexSyncer/axisSyncer.js +3 -0
  269. package/plugins/formulas/indexSyncer/axisSyncer.mjs +3 -0
  270. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +2 -0
  271. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +2 -0
  272. package/plugins/hiddenColumns/hiddenColumns.js +22 -30
  273. package/plugins/hiddenColumns/hiddenColumns.mjs +18 -26
  274. package/plugins/hiddenRows/contextMenuItem/showRow.js +2 -0
  275. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +2 -0
  276. package/plugins/hiddenRows/hiddenRows.js +21 -29
  277. package/plugins/hiddenRows/hiddenRows.mjs +17 -25
  278. package/plugins/index.d.ts +3 -0
  279. package/plugins/index.js +3 -0
  280. package/plugins/index.mjs +3 -1
  281. package/plugins/manualColumnFreeze/manualColumnFreeze.js +7 -5
  282. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +3 -1
  283. package/plugins/manualColumnMove/manualColumnMove.js +6 -6
  284. package/plugins/manualColumnMove/manualColumnMove.mjs +4 -4
  285. package/plugins/manualColumnResize/manualColumnResize.js +26 -12
  286. package/plugins/manualColumnResize/manualColumnResize.mjs +26 -12
  287. package/plugins/manualRowMove/manualRowMove.js +8 -6
  288. package/plugins/manualRowMove/manualRowMove.mjs +6 -4
  289. package/plugins/manualRowResize/manualRowResize.js +3 -2
  290. package/plugins/manualRowResize/manualRowResize.mjs +4 -3
  291. package/plugins/mergeCells/cellsCollection.js +19 -3
  292. package/plugins/mergeCells/cellsCollection.mjs +20 -4
  293. package/plugins/mergeCells/mergeCells.d.ts +6 -2
  294. package/plugins/mergeCells/mergeCells.js +84 -56
  295. package/plugins/mergeCells/mergeCells.mjs +82 -54
  296. package/plugins/mergeCells/renderer.js +13 -3
  297. package/plugins/mergeCells/renderer.mjs +13 -3
  298. package/plugins/multiColumnSorting/domHelpers.js +2 -0
  299. package/plugins/multiColumnSorting/domHelpers.mjs +2 -0
  300. package/plugins/nestedHeaders/nestedHeaders.js +63 -16
  301. package/plugins/nestedHeaders/nestedHeaders.mjs +63 -16
  302. package/plugins/nestedHeaders/stateManager/index.js +1 -0
  303. package/plugins/nestedHeaders/stateManager/index.mjs +1 -0
  304. package/plugins/nestedRows/nestedRows.js +3 -0
  305. package/plugins/nestedRows/nestedRows.mjs +3 -0
  306. package/plugins/nestedRows/ui/headers.js +7 -1
  307. package/plugins/nestedRows/ui/headers.mjs +7 -1
  308. package/plugins/nestedRows/utils/rowMoveController.js +4 -0
  309. package/plugins/nestedRows/utils/rowMoveController.mjs +4 -0
  310. package/plugins/persistentState/persistentState.js +4 -4
  311. package/plugins/persistentState/persistentState.mjs +1 -1
  312. package/plugins/stretchColumns/calculator.js +162 -0
  313. package/plugins/stretchColumns/calculator.mjs +158 -0
  314. package/plugins/stretchColumns/index.d.ts +1 -0
  315. package/plugins/stretchColumns/index.js +7 -0
  316. package/plugins/stretchColumns/index.mjs +1 -0
  317. package/plugins/stretchColumns/strategies/_base.js +85 -0
  318. package/plugins/stretchColumns/strategies/_base.mjs +81 -0
  319. package/plugins/stretchColumns/strategies/all.js +71 -0
  320. package/plugins/stretchColumns/strategies/all.mjs +67 -0
  321. package/plugins/stretchColumns/strategies/last.js +79 -0
  322. package/plugins/stretchColumns/strategies/last.mjs +75 -0
  323. package/plugins/stretchColumns/stretchColumns.d.ts +11 -0
  324. package/plugins/stretchColumns/stretchColumns.js +222 -0
  325. package/plugins/stretchColumns/stretchColumns.mjs +218 -0
  326. package/plugins/trimRows/trimRows.js +2 -0
  327. package/plugins/trimRows/trimRows.mjs +2 -0
  328. package/plugins/undoRedo/undoRedo.js +9 -5
  329. package/plugins/undoRedo/undoRedo.mjs +8 -3
  330. package/renderers/checkboxRenderer/checkboxRenderer.js +19 -8
  331. package/renderers/checkboxRenderer/checkboxRenderer.mjs +18 -7
  332. package/selection/index.js +2 -0
  333. package/selection/range.js +2 -0
  334. package/selection/range.mjs +2 -0
  335. package/selection/selection.js +7 -2
  336. package/selection/selection.mjs +7 -2
  337. package/selection/utils.js +2 -0
  338. package/selection/utils.mjs +2 -0
  339. package/settings.d.ts +4 -1
  340. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +1 -1
  341. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +1 -1
  342. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +1 -1
  343. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +1 -1
  344. package/shortcutContexts/commands/index.js +2 -0
  345. package/shortcutContexts/commands/index.mjs +2 -0
  346. package/shortcutContexts/commands/scrollToFocusedCell.js +4 -4
  347. package/shortcutContexts/commands/scrollToFocusedCell.mjs +4 -4
  348. package/shortcutContexts/index.js +2 -0
  349. package/shortcutContexts/index.mjs +2 -0
  350. package/shortcuts/context.js +3 -0
  351. package/shortcuts/context.mjs +3 -0
  352. package/shortcuts/recorder.js +3 -3
  353. package/shortcuts/recorder.mjs +3 -3
  354. package/shortcuts/utils.js +1 -0
  355. package/shortcuts/utils.mjs +1 -0
  356. package/styles/handsontable.css +2307 -0
  357. package/styles/handsontable.min.css +30 -0
  358. package/styles/ht-theme-horizon.css +607 -0
  359. package/styles/ht-theme-horizon.min.css +30 -0
  360. package/styles/ht-theme-main.css +613 -0
  361. package/styles/ht-theme-main.min.css +30 -0
  362. package/tableView.js +205 -33
  363. package/tableView.mjs +206 -34
  364. package/translations/changesObservable/observable.js +2 -0
  365. package/translations/changesObservable/observable.mjs +2 -0
  366. package/translations/index.js +2 -0
  367. package/translations/indexMapper.js +4 -0
  368. package/translations/indexMapper.mjs +4 -0
  369. package/translations/mapCollections/index.js +2 -0
  370. package/translations/mapCollections/mapCollection.js +2 -0
  371. package/translations/mapCollections/mapCollection.mjs +2 -0
  372. package/translations/maps/index.js +2 -0
  373. package/translations/maps/linkedPhysicalIndexToValueMap.js +1 -0
  374. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +1 -0
  375. package/translations/maps/utils/actionsOnIndexes.js +2 -0
  376. package/translations/maps/utils/actionsOnIndexes.mjs +2 -0
  377. package/translations/maps/utils/physicallyIndexed.js +1 -0
  378. package/translations/maps/utils/physicallyIndexed.mjs +1 -0
  379. package/utils/autoResize.js +11 -3
  380. package/utils/autoResize.mjs +11 -3
  381. package/utils/dataStructures/priorityMap.js +1 -0
  382. package/utils/dataStructures/priorityMap.mjs +1 -0
  383. package/utils/dataStructures/uniqueMap.js +2 -0
  384. package/utils/dataStructures/uniqueMap.mjs +2 -0
  385. package/utils/ghostTable.js +7 -3
  386. package/utils/ghostTable.mjs +7 -3
  387. package/utils/parseTable.js +4 -0
  388. package/utils/parseTable.mjs +4 -0
  389. package/3rdparty/walkontable/src/selection/border/constants.js +0 -15
  390. package/3rdparty/walkontable/src/selection/border/constants.mjs +0 -12
  391. package/3rdparty/walkontable/src/utils/columnStretching.js +0 -197
  392. package/3rdparty/walkontable/src/utils/columnStretching.mjs +0 -193
@@ -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()]);