handsontable 14.6.1-next-689aaa6-20241016 → 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,8 +1,8 @@
1
- import { addClass, hasClass, removeClass, getComputedStyle, getTrimmingContainer, innerWidth, innerHeight, offset, outerHeight, outerWidth } from "../../../../../helpers/dom/element.mjs";
1
+ import { addClass, hasClass, removeClass, getTrimmingContainer, innerWidth, innerHeight, offset, outerHeight, outerWidth } from "../../../../../helpers/dom/element.mjs";
2
2
  import { stopImmediatePropagation } from "../../../../../helpers/dom/event.mjs";
3
3
  import { objectEach } from "../../../../../helpers/object.mjs";
4
4
  import { isMobileBrowser } from "../../../../../helpers/browser.mjs";
5
- import { CORNER_DEFAULT_STYLE } from "./constants.mjs";
5
+ import { getCornerStyle } from "./utils.mjs";
6
6
  /**
7
7
  *
8
8
  */
@@ -32,9 +32,9 @@ class Border {
32
32
  this.bottomStyle = null;
33
33
  this.startStyle = null;
34
34
  this.endStyle = null;
35
- this.cornerDefaultStyle = CORNER_DEFAULT_STYLE;
35
+ this.cornerDefaultStyle = getCornerStyle(this.instance);
36
36
  // Offset to moving the corner to be centered relative to the grid.
37
- this.cornerCenterPointOffset = -(parseInt(this.cornerDefaultStyle.width, 10) / 2);
37
+ this.cornerCenterPointOffset = -Math.ceil(parseInt(this.cornerDefaultStyle.width, 10) / 2);
38
38
  this.corner = null;
39
39
  this.cornerStyle = null;
40
40
  this.createBorders(settings);
@@ -163,9 +163,9 @@ class Border {
163
163
  this.corner = this.main.childNodes[4];
164
164
  this.corner.className += ' corner';
165
165
  this.cornerStyle = this.corner.style;
166
- this.cornerStyle.width = this.cornerDefaultStyle.width;
167
- this.cornerStyle.height = this.cornerDefaultStyle.height;
168
- this.cornerStyle.border = [this.cornerDefaultStyle.borderWidth, this.cornerDefaultStyle.borderStyle, this.cornerDefaultStyle.borderColor].join(' ');
166
+ this.cornerStyle.width = `${this.cornerDefaultStyle.width}px`;
167
+ this.cornerStyle.height = `${this.cornerDefaultStyle.height}px`;
168
+ this.cornerStyle.border = [`${this.cornerDefaultStyle.borderWidth}px`, this.cornerDefaultStyle.borderStyle, this.cornerDefaultStyle.borderColor].join(' ');
169
169
  if (isMobileBrowser() && this.instance.getSetting('isDataViewInstance')) {
170
170
  this.createMultipleSelectorHandles();
171
171
  }
@@ -319,66 +319,52 @@ class Border {
319
319
  if (this.disabled) {
320
320
  return;
321
321
  }
322
+ let [fromRow, fromColumn, toRow, toColumn] = corners;
323
+
324
+ // borders can not be rendered on headers so hide them
325
+ if (fromRow < 0 && toRow < 0 || fromColumn < 0 && toColumn < 0) {
326
+ this.disappear();
327
+ return;
328
+ }
322
329
  const {
323
330
  wtTable,
324
331
  rootDocument,
325
332
  rootWindow
326
- } = this.wot; // todo refactoring: consider about using internal facade (it is given by external code)
327
- let fromRow;
328
- let toRow;
329
- let fromColumn;
330
- let toColumn;
331
- let rowHeader;
332
- let columnHeader;
333
- const rowsCount = wtTable.getRenderedRowsCount();
334
- for (let i = 0; i < rowsCount; i += 1) {
335
- const s = wtTable.rowFilter.renderedToSource(i);
336
- if (s >= corners[0] && s <= corners[2]) {
337
- fromRow = s;
338
- rowHeader = corners[0];
339
- break;
340
- }
341
- }
342
- for (let i = rowsCount - 1; i >= 0; i -= 1) {
343
- const s = wtTable.rowFilter.renderedToSource(i);
344
- if (s >= corners[0] && s <= corners[2]) {
345
- toRow = s;
346
- break;
347
- }
348
- }
349
- const columnsCount = wtTable.getRenderedColumnsCount();
350
- for (let i = 0; i < columnsCount; i += 1) {
351
- const s = wtTable.columnFilter.renderedToSource(i);
352
- if (s >= corners[1] && s <= corners[3]) {
353
- fromColumn = s;
354
- columnHeader = corners[1];
355
- break;
333
+ } = this.wot;
334
+ const isMultiple = fromRow !== toRow || fromColumn !== toColumn;
335
+ const firstRenderedRow = wtTable.getFirstRenderedRow();
336
+ const lastRenderedRow = wtTable.getLastRenderedRow();
337
+ const firstRenderedColumn = wtTable.getFirstRenderedColumn();
338
+ const lastRenderedColumn = wtTable.getLastRenderedColumn();
339
+ let fromTD;
340
+ if (isMultiple) {
341
+ fromColumn = Math.max(fromColumn, firstRenderedColumn);
342
+ toColumn = Math.min(toColumn, lastRenderedColumn);
343
+ fromRow = Math.max(fromRow, firstRenderedRow);
344
+ toRow = Math.min(toRow, lastRenderedRow);
345
+ if (toColumn < fromColumn || toRow < fromRow) {
346
+ this.disappear();
347
+ return;
356
348
  }
357
- }
358
- for (let i = columnsCount - 1; i >= 0; i -= 1) {
359
- const s = wtTable.columnFilter.renderedToSource(i);
360
- if (s >= corners[1] && s <= corners[3]) {
361
- toColumn = s;
362
- break;
349
+ fromTD = wtTable.getCell(this.wot.createCellCoords(fromRow, fromColumn));
350
+ } else {
351
+ fromTD = wtTable.getCell(this.wot.createCellCoords(fromRow, fromColumn));
352
+ if (!(fromTD instanceof HTMLElement)) {
353
+ this.disappear();
354
+ return;
363
355
  }
364
356
  }
365
- if (fromRow === undefined || fromColumn === undefined) {
366
- this.disappear();
367
- return;
368
- }
369
- let fromTD = wtTable.getCell(this.wot.createCellCoords(fromRow, fromColumn));
370
- const isMultiple = fromRow !== toRow || fromColumn !== toColumn;
371
357
  const toTD = isMultiple ? wtTable.getCell(this.wot.createCellCoords(toRow, toColumn)) : fromTD;
372
358
  const fromOffset = offset(fromTD);
373
359
  const toOffset = isMultiple ? offset(toTD) : fromOffset;
374
360
  const containerOffset = offset(wtTable.TABLE);
375
- const containerWidth = outerWidth(wtTable.TABLE);
376
361
  const minTop = fromOffset.top;
377
362
  const minLeft = fromOffset.left;
378
363
  const isRtl = this.wot.wtSettings.getSetting('rtlMode');
379
364
  let inlineStartPos = 0;
380
365
  let width = 0;
381
366
  if (isRtl) {
367
+ const containerWidth = outerWidth(wtTable.TABLE);
382
368
  const fromWidth = outerWidth(fromTD);
383
369
  const gridRightPos = rootWindow.innerWidth - containerOffset.left - containerWidth;
384
370
  width = minLeft + fromWidth - toOffset.left;
@@ -388,6 +374,7 @@ class Border {
388
374
  inlineStartPos = minLeft - containerOffset.left - 1;
389
375
  }
390
376
  if (this.isEntireColumnSelected(fromRow, toRow)) {
377
+ const rowHeader = fromRow;
391
378
  const modifiedValues = this.getDimensionsFromHeader('columns', fromColumn, toColumn, rowHeader, containerOffset);
392
379
  let fromTH = null;
393
380
  if (modifiedValues) {
@@ -400,6 +387,7 @@ class Border {
400
387
  let top = minTop - containerOffset.top - 1;
401
388
  let height = toOffset.top + outerHeight(toTD) - minTop;
402
389
  if (this.isEntireRowSelected(fromColumn, toColumn)) {
390
+ const columnHeader = fromColumn;
403
391
  const modifiedValues = this.getDimensionsFromHeader('rows', fromRow, toRow, columnHeader, containerOffset);
404
392
  let fromTH = null;
405
393
  if (modifiedValues) {
@@ -409,7 +397,7 @@ class Border {
409
397
  fromTD = fromTH;
410
398
  }
411
399
  }
412
- const style = getComputedStyle(fromTD, rootWindow);
400
+ const style = rootWindow.getComputedStyle(fromTD);
413
401
  if (parseInt(style.borderTopWidth, 10) > 0) {
414
402
  top += 1;
415
403
  height = height > 0 ? height - 1 : 0;
@@ -438,7 +426,7 @@ class Border {
438
426
  this.endStyle.display = 'block';
439
427
  let cornerVisibleSetting = this.settings.border.cornerVisible;
440
428
  cornerVisibleSetting = typeof cornerVisibleSetting === 'function' ? cornerVisibleSetting(this.settings.layerLevel) : cornerVisibleSetting;
441
- const hookResult = this.wot.getSetting('onModifyGetCellCoords', toRow, toColumn);
429
+ const hookResult = this.wot.getSetting('onModifyGetCellCoords', toRow, toColumn, false, 'render');
442
430
  let [checkRow, checkCol] = [toRow, toColumn];
443
431
  if (hookResult && Array.isArray(hookResult)) {
444
432
  [,, checkRow, checkCol] = hookResult;
@@ -446,9 +434,11 @@ class Border {
446
434
  if (isMobileBrowser() || !cornerVisibleSetting || this.isPartRange(checkRow, checkCol)) {
447
435
  this.cornerStyle.display = 'none';
448
436
  } else {
449
- this.cornerStyle.top = `${top + height + this.cornerCenterPointOffset - 1}px`;
450
- this.cornerStyle[inlinePosProperty] = `${inlineStartPos + width + this.cornerCenterPointOffset - 1}px`;
451
- this.cornerStyle.borderRightWidth = this.cornerDefaultStyle.borderWidth;
437
+ this.cornerStyle.top = `${top + height + this.cornerCenterPointOffset - this.cornerDefaultStyle.borderWidth}px`;
438
+ this.cornerStyle[inlinePosProperty] = `${inlineStartPos + width + this.cornerCenterPointOffset - this.cornerDefaultStyle.borderWidth}px`;
439
+ this.cornerStyle.borderRightWidth = `${this.cornerDefaultStyle.borderWidth}px`;
440
+ this.cornerStyle.borderLeftWidth = `${this.cornerDefaultStyle.borderWidth}px`;
441
+ this.cornerStyle.borderBottomWidth = `${this.cornerDefaultStyle.borderWidth}px`;
452
442
  this.cornerStyle.width = this.cornerDefaultStyle.width;
453
443
 
454
444
  // Hide the fill handle, so the possible further adjustments won't force unneeded scrollbars.
@@ -458,8 +448,12 @@ class Border {
458
448
  if (trimToWindow) {
459
449
  trimmingContainer = rootDocument.documentElement;
460
450
  }
461
- const cornerHalfWidth = parseInt(this.cornerDefaultStyle.width, 10) / 2;
462
- const cornerHalfHeight = parseInt(this.cornerDefaultStyle.height, 10) / 2;
451
+
452
+ // -1 was initially removed from the base position to compansate for the table border. We need to exclude it from
453
+ // the corner width.
454
+ const cornerBorderCompensation = parseInt(this.cornerDefaultStyle.borderWidth, 10) - 1;
455
+ const cornerHalfWidth = Math.ceil(parseInt(this.cornerDefaultStyle.width, 10) / 2);
456
+ const cornerHalfHeight = Math.ceil(parseInt(this.cornerDefaultStyle.height, 10) / 2);
463
457
  if (toColumn === this.wot.getSetting('totalColumns') - 1) {
464
458
  const toTdOffsetLeft = trimToWindow ? toTD.getBoundingClientRect().left : toTD.offsetLeft;
465
459
  let cornerOverlappingContainer = false;
@@ -472,7 +466,7 @@ class Border {
472
466
  cornerOverlappingContainer = cornerEdge >= innerWidth(trimmingContainer);
473
467
  }
474
468
  if (cornerOverlappingContainer) {
475
- this.cornerStyle[inlinePosProperty] = `${Math.floor(inlineStartPos + width + this.cornerCenterPointOffset - cornerHalfWidth)}px`;
469
+ this.cornerStyle[inlinePosProperty] = `${Math.floor(inlineStartPos + width + this.cornerCenterPointOffset - cornerHalfWidth - cornerBorderCompensation)}px`;
476
470
  this.cornerStyle[isRtl ? 'borderLeftWidth' : 'borderRightWidth'] = 0;
477
471
  }
478
472
  }
@@ -481,7 +475,7 @@ class Border {
481
475
  const cornerBottomEdge = toTdOffsetTop + outerHeight(toTD) + parseInt(this.cornerDefaultStyle.height, 10) / 2;
482
476
  const cornerOverlappingContainer = cornerBottomEdge >= innerHeight(trimmingContainer);
483
477
  if (cornerOverlappingContainer) {
484
- this.cornerStyle.top = `${Math.floor(top + height + this.cornerCenterPointOffset - cornerHalfHeight)}px`;
478
+ this.cornerStyle.top = `${Math.floor(top + height + this.cornerCenterPointOffset - cornerHalfHeight - cornerBorderCompensation)}px`;
485
479
  this.cornerStyle.borderBottomWidth = 0;
486
480
  }
487
481
  }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ const getCornerStyle = wot => {
5
+ const stylesHandler = wot.stylesHandler;
6
+ if (stylesHandler.isClassicTheme()) {
7
+ return Object.freeze({
8
+ width: 6,
9
+ height: 6,
10
+ borderWidth: 1,
11
+ borderStyle: 'solid',
12
+ borderColor: '#FFF'
13
+ });
14
+ }
15
+ const cornerSizeFromVar = stylesHandler.getCSSVariableValue('cell-autofill-size');
16
+ const cornerBorderWidthFromVar = stylesHandler.getCSSVariableValue('cell-autofill-border-width');
17
+ const cornerColorFromVar = stylesHandler.getCSSVariableValue('cell-autofill-border-color');
18
+ return Object.freeze({
19
+ width: cornerSizeFromVar,
20
+ height: cornerSizeFromVar,
21
+ borderWidth: cornerBorderWidthFromVar,
22
+ borderStyle: 'solid',
23
+ borderColor: cornerColorFromVar
24
+ });
25
+ };
26
+ exports.getCornerStyle = getCornerStyle;
@@ -0,0 +1,22 @@
1
+ export const getCornerStyle = wot => {
2
+ const stylesHandler = wot.stylesHandler;
3
+ if (stylesHandler.isClassicTheme()) {
4
+ return Object.freeze({
5
+ width: 6,
6
+ height: 6,
7
+ borderWidth: 1,
8
+ borderStyle: 'solid',
9
+ borderColor: '#FFF'
10
+ });
11
+ }
12
+ const cornerSizeFromVar = stylesHandler.getCSSVariableValue('cell-autofill-size');
13
+ const cornerBorderWidthFromVar = stylesHandler.getCSSVariableValue('cell-autofill-border-width');
14
+ const cornerColorFromVar = stylesHandler.getCSSVariableValue('cell-autofill-border-color');
15
+ return Object.freeze({
16
+ width: cornerSizeFromVar,
17
+ height: cornerSizeFromVar,
18
+ borderWidth: cornerBorderWidthFromVar,
19
+ borderStyle: 'solid',
20
+ borderColor: cornerColorFromVar
21
+ });
22
+ };
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ require("core-js/modules/esnext.iterator.constructor.js");
4
+ require("core-js/modules/esnext.iterator.for-each.js");
3
5
  exports.__esModule = true;
4
6
  var _exportNames = {
5
7
  SelectionManager: true,
@@ -14,12 +16,12 @@ Object.keys(_constants).forEach(function (key) {
14
16
  if (key in exports && exports[key] === _constants[key]) return;
15
17
  exports[key] = _constants[key];
16
18
  });
17
- var _constants2 = require("./border/constants");
18
- Object.keys(_constants2).forEach(function (key) {
19
+ var _utils = require("./border/utils");
20
+ Object.keys(_utils).forEach(function (key) {
19
21
  if (key === "default" || key === "__esModule") return;
20
22
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
21
- if (key in exports && exports[key] === _constants2[key]) return;
22
- exports[key] = _constants2[key];
23
+ if (key in exports && exports[key] === _utils[key]) return;
24
+ exports[key] = _utils[key];
23
25
  });
24
26
  var _manager = require("./manager");
25
27
  exports.SelectionManager = _manager.SelectionManager;
@@ -1,5 +1,5 @@
1
1
  import Selection from "./selection.mjs";
2
2
  export * from "./constants.mjs";
3
- export * from "./border/constants.mjs";
3
+ export * from "./border/utils.mjs";
4
4
  export { SelectionManager } from "./manager.mjs";
5
5
  export { Selection };
@@ -11,6 +11,9 @@ require("core-js/modules/es.set.is-subset-of.v2.js");
11
11
  require("core-js/modules/es.set.is-superset-of.v2.js");
12
12
  require("core-js/modules/es.set.symmetric-difference.v2.js");
13
13
  require("core-js/modules/es.set.union.v2.js");
14
+ require("core-js/modules/esnext.iterator.constructor.js");
15
+ require("core-js/modules/esnext.iterator.for-each.js");
16
+ require("core-js/modules/esnext.iterator.map.js");
14
17
  var _element = require("../../../../helpers/dom/element");
15
18
  var _scanner2 = require("./scanner");
16
19
  var _border = _interopRequireDefault(require("./border/border"));
@@ -8,6 +8,9 @@ import "core-js/modules/es.set.is-subset-of.v2.js";
8
8
  import "core-js/modules/es.set.is-superset-of.v2.js";
9
9
  import "core-js/modules/es.set.symmetric-difference.v2.js";
10
10
  import "core-js/modules/es.set.union.v2.js";
11
+ import "core-js/modules/esnext.iterator.constructor.js";
12
+ import "core-js/modules/esnext.iterator.for-each.js";
13
+ import "core-js/modules/esnext.iterator.map.js";
11
14
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
12
15
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
13
16
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -195,21 +195,18 @@ class SelectionScanner {
195
195
  * @param {function(HTMLTableElement): void} callback The callback function to trigger.
196
196
  */
197
197
  scanCellsRange(callback) {
198
- const [topRow, topColumn, bottomRow, bottomColumn] = _classPrivateFieldGet(_selection, this).getCorners();
199
198
  const {
200
199
  wtTable
201
200
  } = _classPrivateFieldGet(_activeOverlaysWot, this);
202
201
  _assertClassBrand(_SelectionScanner_brand, this, _scanCellsRange).call(this, (sourceRow, sourceColumn) => {
203
- if (sourceRow >= topRow && sourceRow <= bottomRow && sourceColumn >= topColumn && sourceColumn <= bottomColumn) {
204
- const cell = wtTable.getCell(_classPrivateFieldGet(_activeOverlaysWot, this).createCellCoords(sourceRow, sourceColumn));
202
+ const cell = wtTable.getCell(_classPrivateFieldGet(_activeOverlaysWot, this).createCellCoords(sourceRow, sourceColumn));
205
203
 
206
- // support for old API
207
- const additionalSelectionClass = _classPrivateFieldGet(_activeOverlaysWot, this).getSetting('onAfterDrawSelection', sourceRow, sourceColumn, _classPrivateFieldGet(_selection, this).settings.layerLevel);
208
- if (typeof additionalSelectionClass === 'string') {
209
- (0, _element.addClass)(cell, additionalSelectionClass);
210
- }
211
- callback(cell);
204
+ // support for old API
205
+ const additionalSelectionClass = _classPrivateFieldGet(_activeOverlaysWot, this).getSetting('onAfterDrawSelection', sourceRow, sourceColumn, _classPrivateFieldGet(_selection, this).settings.layerLevel);
206
+ if (typeof additionalSelectionClass === 'string') {
207
+ (0, _element.addClass)(cell, additionalSelectionClass);
212
208
  }
209
+ callback(cell);
213
210
  });
214
211
  }
215
212
 
@@ -225,7 +222,7 @@ class SelectionScanner {
225
222
  const {
226
223
  wtTable
227
224
  } = _classPrivateFieldGet(_activeOverlaysWot, this);
228
- _assertClassBrand(_SelectionScanner_brand, this, _scanCellsRange).call(this, (sourceRow, sourceColumn) => {
225
+ _assertClassBrand(_SelectionScanner_brand, this, _scanViewportRange).call(this, (sourceRow, sourceColumn) => {
229
226
  if (sourceRow >= topRow && sourceRow <= bottomRow) {
230
227
  const cell = wtTable.getCell(_classPrivateFieldGet(_activeOverlaysWot, this).createCellCoords(sourceRow, sourceColumn));
231
228
  callback(cell);
@@ -244,7 +241,7 @@ class SelectionScanner {
244
241
  const {
245
242
  wtTable
246
243
  } = _classPrivateFieldGet(_activeOverlaysWot, this);
247
- _assertClassBrand(_SelectionScanner_brand, this, _scanCellsRange).call(this, (sourceRow, sourceColumn) => {
244
+ _assertClassBrand(_SelectionScanner_brand, this, _scanViewportRange).call(this, (sourceRow, sourceColumn) => {
248
245
  if (sourceColumn >= topColumn && sourceColumn <= bottomColumn) {
249
246
  const cell = wtTable.getCell(_classPrivateFieldGet(_activeOverlaysWot, this).createCellCoords(sourceRow, sourceColumn));
250
247
  callback(cell);
@@ -254,6 +251,44 @@ class SelectionScanner {
254
251
  }
255
252
  exports.SelectionScanner = SelectionScanner;
256
253
  function _scanCellsRange(callback) {
254
+ let [topRow, startColumn, bottomRow, endColumn] = _classPrivateFieldGet(_selection, this).getCorners();
255
+ if (topRow < 0 && bottomRow < 0 || startColumn < 0 && endColumn < 0) {
256
+ return;
257
+ }
258
+ const {
259
+ wtTable
260
+ } = _classPrivateFieldGet(_activeOverlaysWot, this);
261
+ const isMultiple = topRow !== bottomRow || startColumn !== endColumn;
262
+ startColumn = Math.max(startColumn, 0);
263
+ endColumn = Math.max(endColumn, 0);
264
+ topRow = Math.max(topRow, 0);
265
+ bottomRow = Math.max(bottomRow, 0);
266
+ if (isMultiple) {
267
+ startColumn = Math.max(startColumn, wtTable.getFirstRenderedColumn());
268
+ endColumn = Math.min(endColumn, wtTable.getLastRenderedColumn());
269
+ topRow = Math.max(topRow, wtTable.getFirstRenderedRow());
270
+ bottomRow = Math.min(bottomRow, wtTable.getLastRenderedRow());
271
+ if (endColumn < startColumn || bottomRow < topRow) {
272
+ return;
273
+ }
274
+ } else {
275
+ const cell = wtTable.getCell(_classPrivateFieldGet(_activeOverlaysWot, this).createCellCoords(topRow, startColumn));
276
+ if (!(cell instanceof HTMLElement)) {
277
+ return;
278
+ }
279
+ }
280
+ for (let row = topRow; row <= bottomRow; row += 1) {
281
+ for (let column = startColumn; column <= endColumn; column += 1) {
282
+ callback(row, column);
283
+ }
284
+ }
285
+ }
286
+ /**
287
+ * The method triggers a callback for each rendered cell including headers.
288
+ *
289
+ * @param {function(number, number): void} callback The callback function to trigger.
290
+ */
291
+ function _scanViewportRange(callback) {
257
292
  const {
258
293
  wtTable
259
294
  } = _classPrivateFieldGet(_activeOverlaysWot, this);
@@ -193,21 +193,18 @@ export class SelectionScanner {
193
193
  * @param {function(HTMLTableElement): void} callback The callback function to trigger.
194
194
  */
195
195
  scanCellsRange(callback) {
196
- const [topRow, topColumn, bottomRow, bottomColumn] = _classPrivateFieldGet(_selection, this).getCorners();
197
196
  const {
198
197
  wtTable
199
198
  } = _classPrivateFieldGet(_activeOverlaysWot, this);
200
199
  _assertClassBrand(_SelectionScanner_brand, this, _scanCellsRange).call(this, (sourceRow, sourceColumn) => {
201
- if (sourceRow >= topRow && sourceRow <= bottomRow && sourceColumn >= topColumn && sourceColumn <= bottomColumn) {
202
- const cell = wtTable.getCell(_classPrivateFieldGet(_activeOverlaysWot, this).createCellCoords(sourceRow, sourceColumn));
200
+ const cell = wtTable.getCell(_classPrivateFieldGet(_activeOverlaysWot, this).createCellCoords(sourceRow, sourceColumn));
203
201
 
204
- // support for old API
205
- const additionalSelectionClass = _classPrivateFieldGet(_activeOverlaysWot, this).getSetting('onAfterDrawSelection', sourceRow, sourceColumn, _classPrivateFieldGet(_selection, this).settings.layerLevel);
206
- if (typeof additionalSelectionClass === 'string') {
207
- addClass(cell, additionalSelectionClass);
208
- }
209
- callback(cell);
202
+ // support for old API
203
+ const additionalSelectionClass = _classPrivateFieldGet(_activeOverlaysWot, this).getSetting('onAfterDrawSelection', sourceRow, sourceColumn, _classPrivateFieldGet(_selection, this).settings.layerLevel);
204
+ if (typeof additionalSelectionClass === 'string') {
205
+ addClass(cell, additionalSelectionClass);
210
206
  }
207
+ callback(cell);
211
208
  });
212
209
  }
213
210
 
@@ -223,7 +220,7 @@ export class SelectionScanner {
223
220
  const {
224
221
  wtTable
225
222
  } = _classPrivateFieldGet(_activeOverlaysWot, this);
226
- _assertClassBrand(_SelectionScanner_brand, this, _scanCellsRange).call(this, (sourceRow, sourceColumn) => {
223
+ _assertClassBrand(_SelectionScanner_brand, this, _scanViewportRange).call(this, (sourceRow, sourceColumn) => {
227
224
  if (sourceRow >= topRow && sourceRow <= bottomRow) {
228
225
  const cell = wtTable.getCell(_classPrivateFieldGet(_activeOverlaysWot, this).createCellCoords(sourceRow, sourceColumn));
229
226
  callback(cell);
@@ -242,7 +239,7 @@ export class SelectionScanner {
242
239
  const {
243
240
  wtTable
244
241
  } = _classPrivateFieldGet(_activeOverlaysWot, this);
245
- _assertClassBrand(_SelectionScanner_brand, this, _scanCellsRange).call(this, (sourceRow, sourceColumn) => {
242
+ _assertClassBrand(_SelectionScanner_brand, this, _scanViewportRange).call(this, (sourceRow, sourceColumn) => {
246
243
  if (sourceColumn >= topColumn && sourceColumn <= bottomColumn) {
247
244
  const cell = wtTable.getCell(_classPrivateFieldGet(_activeOverlaysWot, this).createCellCoords(sourceRow, sourceColumn));
248
245
  callback(cell);
@@ -251,6 +248,44 @@ export class SelectionScanner {
251
248
  }
252
249
  }
253
250
  function _scanCellsRange(callback) {
251
+ let [topRow, startColumn, bottomRow, endColumn] = _classPrivateFieldGet(_selection, this).getCorners();
252
+ if (topRow < 0 && bottomRow < 0 || startColumn < 0 && endColumn < 0) {
253
+ return;
254
+ }
255
+ const {
256
+ wtTable
257
+ } = _classPrivateFieldGet(_activeOverlaysWot, this);
258
+ const isMultiple = topRow !== bottomRow || startColumn !== endColumn;
259
+ startColumn = Math.max(startColumn, 0);
260
+ endColumn = Math.max(endColumn, 0);
261
+ topRow = Math.max(topRow, 0);
262
+ bottomRow = Math.max(bottomRow, 0);
263
+ if (isMultiple) {
264
+ startColumn = Math.max(startColumn, wtTable.getFirstRenderedColumn());
265
+ endColumn = Math.min(endColumn, wtTable.getLastRenderedColumn());
266
+ topRow = Math.max(topRow, wtTable.getFirstRenderedRow());
267
+ bottomRow = Math.min(bottomRow, wtTable.getLastRenderedRow());
268
+ if (endColumn < startColumn || bottomRow < topRow) {
269
+ return;
270
+ }
271
+ } else {
272
+ const cell = wtTable.getCell(_classPrivateFieldGet(_activeOverlaysWot, this).createCellCoords(topRow, startColumn));
273
+ if (!(cell instanceof HTMLElement)) {
274
+ return;
275
+ }
276
+ }
277
+ for (let row = topRow; row <= bottomRow; row += 1) {
278
+ for (let column = startColumn; column <= endColumn; column += 1) {
279
+ callback(row, column);
280
+ }
281
+ }
282
+ }
283
+ /**
284
+ * The method triggers a callback for each rendered cell including headers.
285
+ *
286
+ * @param {function(number, number): void} callback The callback function to trigger.
287
+ */
288
+ function _scanViewportRange(callback) {
254
289
  const {
255
290
  wtTable
256
291
  } = _classPrivateFieldGet(_activeOverlaysWot, this);
@@ -19,12 +19,10 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
19
19
  * @property {Option} currentRowClassName Option `currentRowClassName`.
20
20
  * @property {Option} data Option `data`.
21
21
  * @property {Option} defaultColumnWidth Option `defaultColumnWidth`.
22
- * @property {Option} defaultRowHeight Option `defaultRowHeight`.
23
22
  * @property {Option} externalRowCalculator Option `externalRowCalculator`.
24
23
  * @property {Option} fixedColumnsStart Option `fixedColumnsStart`.
25
24
  * @property {Option} fixedRowsBottom Option `fixedRowsBottom`.
26
25
  * @property {Option} fixedRowsTop Option `fixedRowsTop`.
27
- * @property {Option} freezeOverlays Option `freezeOverlays`.
28
26
  * @property {Option} groups Option `groups`.
29
27
  * @property {Option} hideBorderOnMouseDownOver Option `hideBorderOnMouseDownOver`.
30
28
  * @property {Option} isRtl Option `isRtl`.
@@ -33,7 +31,6 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
33
31
  * @property {Option} onBeforeHighlightingColumnHeader Option `onBeforeHighlightingColumnHeader`.
34
32
  * @property {Option} onBeforeHighlightingRowHeader Option `onBeforeHighlightingRowHeader`.
35
33
  * @property {Option} onBeforeRemoveCellClassNames Option `onBeforeRemoveCellClassNames`.
36
- * @property {Option} onBeforeStretchingColumnWidth Option `onBeforeStretchingColumnWidth`.
37
34
  * @property {Option} preventOverflow Option `preventOverflow`.
38
35
  * @property {Option} preventWheel Option `preventWheel`.
39
36
  * @property {Option} renderAllColumns Option `renderAllColumns`.
@@ -44,7 +41,6 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
44
41
  * @property {Option} shouldRenderBottomOverlay Option `shouldRenderBottomOverlay`.
45
42
  * @property {Option} shouldRenderInlineStartOverlay Option `shouldRenderInlineStartOverlay`.
46
43
  * @property {Option} shouldRenderTopOverlay Option `shouldRenderTopOverlay`.
47
- * @property {Option} stretchH Option `stretchH`.
48
44
  * @property {Option} table Option `table`.
49
45
  * @property {Option} totalColumns Option `totalColumns`.
50
46
  * @property {Option} totalRows Option `totalRows`.
@@ -66,6 +62,8 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
66
62
  * @property {?Option} onCellMouseUp Option `onCellMouseUp`.
67
63
  * @property {?Option} onDraw Option `onDraw`.
68
64
  * @property {?Option} onModifyGetCellCoords Option `onModifyGetCellCoords`.
65
+ * @property {?Option} onModifyGetCoordsElement Option `onModifyGetCoordsElement`.
66
+ * @property {?Option} onModifyGetCoords Option `onModifyGetCoords`.
69
67
  * @property {?Option} onModifyRowHeaderWidth Option `onModifyRowHeaderWidth`.
70
68
  * @property {?Option} onBeforeViewportScrollHorizontally Option `onBeforeViewportScrollHorizontally`.
71
69
  * @property {?Option} onBeforeViewportScrollVertically Option `onBeforeViewportScrollVertically`.
@@ -76,6 +74,8 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
76
74
  * @property {?Option} selections Option `selections`.
77
75
  * @property {?Option} viewportColumnCalculatorOverride Option `viewportColumnCalculatorOverride`.
78
76
  * @property {?Option} viewportRowCalculatorOverride Option `viewportRowCalculatorOverride`.
77
+ * @property {?Option} viewportColumnRenderingThreshold Option `viewportColumnRenderingThreshold`.
78
+ * @property {?Option} viewportRowRenderingThreshold Option `viewportRowRenderingThreshold`.
79
79
  */
80
80
 
81
81
  /**
@@ -133,8 +133,6 @@ class Settings {
133
133
  isDataViewInstance: true,
134
134
  // presentation mode
135
135
  externalRowCalculator: false,
136
- stretchH: 'none',
137
- // values: all, last, none
138
136
  currentRowClassName: null,
139
137
  currentColumnClassName: null,
140
138
  preventOverflow() {
@@ -143,7 +141,6 @@ class Settings {
143
141
  preventWheel: false,
144
142
  // data source
145
143
  data: undefined,
146
- freezeOverlays: false,
147
144
  // Number of renderable columns for the left overlay.
148
145
  fixedColumnsStart: 0,
149
146
  // Number of renderable rows for the top overlay.
@@ -187,12 +184,13 @@ class Settings {
187
184
  rowHeightByOverlayName() {
188
185
  // return undefined means use default size for the rendered cell content
189
186
  },
190
- defaultRowHeight: 23,
191
187
  defaultColumnWidth: 50,
192
188
  selections: null,
193
189
  hideBorderOnMouseDownOver: false,
194
190
  viewportRowCalculatorOverride: null,
195
191
  viewportColumnCalculatorOverride: null,
192
+ viewportRowRenderingThreshold: null,
193
+ viewportColumnRenderingThreshold: null,
196
194
  // callbacks
197
195
  onCellMouseDown: null,
198
196
  onCellContextMenu: null,
@@ -217,9 +215,10 @@ class Settings {
217
215
  //
218
216
  onBeforeTouchScroll: null,
219
217
  onAfterMomentumScroll: null,
220
- onBeforeStretchingColumnWidth: width => width,
221
218
  onModifyRowHeaderWidth: null,
222
219
  onModifyGetCellCoords: null,
220
+ onModifyGetCoordsElement: null,
221
+ onModifyGetCoords: null,
223
222
  onBeforeHighlightingRowHeader: sourceRow => sourceRow,
224
223
  onBeforeHighlightingColumnHeader: sourceCol => sourceCol,
225
224
  onWindowResize: null,