handsontable 14.6.1 → 15.0.0-next-fdd4480-20241205

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,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,