handsontable 14.6.1 → 15.0.0-next-4472a60-20241203

Sign up to get free protection for your applications and to get access to all the features.
Files changed (392) hide show
  1. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.js +23 -0
  2. package/3rdparty/walkontable/src/calculator/calculationType/renderedColumns.mjs +23 -0
  3. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.js +23 -0
  4. package/3rdparty/walkontable/src/calculator/calculationType/renderedRows.mjs +23 -0
  5. package/3rdparty/walkontable/src/calculator/index.js +1 -2
  6. package/3rdparty/walkontable/src/calculator/index.mjs +2 -2
  7. package/3rdparty/walkontable/src/calculator/viewportBase.js +2 -0
  8. package/3rdparty/walkontable/src/calculator/viewportBase.mjs +2 -0
  9. package/3rdparty/walkontable/src/calculator/viewportRows.js +3 -3
  10. package/3rdparty/walkontable/src/calculator/viewportRows.mjs +3 -3
  11. package/3rdparty/walkontable/src/core/_base.js +29 -23
  12. package/3rdparty/walkontable/src/core/_base.mjs +29 -23
  13. package/3rdparty/walkontable/src/core/clone.js +1 -0
  14. package/3rdparty/walkontable/src/core/clone.mjs +1 -0
  15. package/3rdparty/walkontable/src/core/core.js +2 -0
  16. package/3rdparty/walkontable/src/core/core.mjs +2 -0
  17. package/3rdparty/walkontable/src/facade/core.js +12 -6
  18. package/3rdparty/walkontable/src/facade/core.mjs +12 -6
  19. package/3rdparty/walkontable/src/index.js +0 -1
  20. package/3rdparty/walkontable/src/index.mjs +2 -2
  21. package/3rdparty/walkontable/src/overlay/_base.js +8 -1
  22. package/3rdparty/walkontable/src/overlay/_base.mjs +8 -1
  23. package/3rdparty/walkontable/src/overlay/bottom.js +5 -6
  24. package/3rdparty/walkontable/src/overlay/bottom.mjs +5 -6
  25. package/3rdparty/walkontable/src/overlay/index.js +2 -0
  26. package/3rdparty/walkontable/src/overlay/inlineStart.js +8 -7
  27. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +9 -8
  28. package/3rdparty/walkontable/src/overlay/top.js +9 -8
  29. package/3rdparty/walkontable/src/overlay/top.mjs +10 -9
  30. package/3rdparty/walkontable/src/overlays.js +10 -26
  31. package/3rdparty/walkontable/src/overlays.mjs +10 -26
  32. package/3rdparty/walkontable/src/renderer/colGroup.js +1 -1
  33. package/3rdparty/walkontable/src/renderer/colGroup.mjs +1 -1
  34. package/3rdparty/walkontable/src/renderer/index.js +4 -2
  35. package/3rdparty/walkontable/src/renderer/index.mjs +4 -2
  36. package/3rdparty/walkontable/src/renderer/table.js +13 -4
  37. package/3rdparty/walkontable/src/renderer/table.mjs +13 -4
  38. package/3rdparty/walkontable/src/scroll.js +46 -37
  39. package/3rdparty/walkontable/src/scroll.mjs +46 -37
  40. package/3rdparty/walkontable/src/selection/border/border.js +52 -58
  41. package/3rdparty/walkontable/src/selection/border/border.mjs +53 -59
  42. package/3rdparty/walkontable/src/selection/border/utils.js +26 -0
  43. package/3rdparty/walkontable/src/selection/border/utils.mjs +22 -0
  44. package/3rdparty/walkontable/src/selection/index.js +6 -4
  45. package/3rdparty/walkontable/src/selection/index.mjs +1 -1
  46. package/3rdparty/walkontable/src/selection/manager.js +3 -0
  47. package/3rdparty/walkontable/src/selection/manager.mjs +3 -0
  48. package/3rdparty/walkontable/src/selection/scanner.js +46 -11
  49. package/3rdparty/walkontable/src/selection/scanner.mjs +46 -11
  50. package/3rdparty/walkontable/src/settings.js +8 -9
  51. package/3rdparty/walkontable/src/settings.mjs +8 -9
  52. package/3rdparty/walkontable/src/table/master.js +1 -1
  53. package/3rdparty/walkontable/src/table/master.mjs +2 -2
  54. package/3rdparty/walkontable/src/table.js +25 -36
  55. package/3rdparty/walkontable/src/table.mjs +25 -36
  56. package/3rdparty/walkontable/src/types.js +1 -0
  57. package/3rdparty/walkontable/src/types.mjs +1 -0
  58. package/3rdparty/walkontable/src/utils/column.js +1 -43
  59. package/3rdparty/walkontable/src/utils/column.mjs +1 -43
  60. package/3rdparty/walkontable/src/utils/stylesHandler.js +295 -0
  61. package/3rdparty/walkontable/src/utils/stylesHandler.mjs +291 -0
  62. package/3rdparty/walkontable/src/viewport.js +94 -91
  63. package/3rdparty/walkontable/src/viewport.mjs +95 -92
  64. package/CHANGELOG.md +36 -0
  65. package/README.md +1 -1
  66. package/base.js +4 -4
  67. package/base.mjs +3 -3
  68. package/core/focusCatcher/focusDetector.js +1 -0
  69. package/core/focusCatcher/focusDetector.mjs +1 -0
  70. package/core/hooks/bucket.js +184 -0
  71. package/core/hooks/bucket.mjs +180 -0
  72. package/{pluginHooks.mjs → core/hooks/constants.js} +38 -486
  73. package/{pluginHooks.js → core/hooks/constants.mjs} +34 -489
  74. package/{pluginHooks.d.ts → core/hooks/index.d.ts} +22 -25
  75. package/core/hooks/index.js +385 -0
  76. package/core/hooks/index.mjs +381 -0
  77. package/core/index.js +2 -0
  78. package/core.d.ts +5 -3
  79. package/core.js +77 -35
  80. package/core.mjs +69 -27
  81. package/dataMap/dataMap.js +3 -0
  82. package/dataMap/dataMap.mjs +3 -0
  83. package/dataMap/dataSource.js +2 -0
  84. package/dataMap/dataSource.mjs +2 -0
  85. package/dataMap/metaManager/index.js +2 -0
  86. package/dataMap/metaManager/index.mjs +2 -0
  87. package/dataMap/metaManager/metaSchema.js +91 -5
  88. package/dataMap/metaManager/metaSchema.mjs +91 -5
  89. package/dataMap/metaManager/mods/dynamicCellMeta.js +2 -3
  90. package/dataMap/metaManager/mods/dynamicCellMeta.mjs +1 -1
  91. package/dataMap/metaManager/mods/extendMetaProperties.js +2 -0
  92. package/dataMap/metaManager/mods/extendMetaProperties.mjs +2 -0
  93. package/dist/handsontable.css +84 -72
  94. package/dist/handsontable.full.css +317 -304
  95. package/dist/handsontable.full.js +14826 -7294
  96. package/dist/handsontable.full.min.css +15 -10
  97. package/dist/handsontable.full.min.js +262 -69
  98. package/dist/handsontable.js +7826 -5552
  99. package/dist/handsontable.min.css +10 -6
  100. package/dist/handsontable.min.js +33 -33
  101. package/dist/languages/all.js +1 -1
  102. package/dist/languages/ar-AR.js +1 -1
  103. package/dist/languages/cs-CZ.js +1 -1
  104. package/dist/languages/de-CH.js +1 -1
  105. package/dist/languages/de-DE.js +1 -1
  106. package/dist/languages/en-US.js +1 -1
  107. package/dist/languages/es-MX.js +1 -1
  108. package/dist/languages/fr-FR.js +1 -1
  109. package/dist/languages/hr-HR.js +1 -1
  110. package/dist/languages/it-IT.js +1 -1
  111. package/dist/languages/ja-JP.js +1 -1
  112. package/dist/languages/ko-KR.js +1 -1
  113. package/dist/languages/lv-LV.js +1 -1
  114. package/dist/languages/nb-NO.js +1 -1
  115. package/dist/languages/nl-NL.js +1 -1
  116. package/dist/languages/pl-PL.js +1 -1
  117. package/dist/languages/pt-BR.js +1 -1
  118. package/dist/languages/ru-RU.js +1 -1
  119. package/dist/languages/sr-SP.js +1 -1
  120. package/dist/languages/zh-CN.js +1 -1
  121. package/dist/languages/zh-TW.js +1 -1
  122. package/editorManager.js +2 -2
  123. package/editorManager.mjs +2 -2
  124. package/editors/autocompleteEditor/autocompleteEditor.js +34 -16
  125. package/editors/autocompleteEditor/autocompleteEditor.mjs +34 -16
  126. package/editors/baseEditor/baseEditor.js +25 -18
  127. package/editors/baseEditor/baseEditor.mjs +26 -19
  128. package/editors/dateEditor/dateEditor.js +9 -0
  129. package/editors/dateEditor/dateEditor.mjs +10 -1
  130. package/editors/dropdownEditor/dropdownEditor.js +4 -3
  131. package/editors/dropdownEditor/dropdownEditor.mjs +3 -1
  132. package/editors/handsontableEditor/handsontableEditor.js +36 -2
  133. package/editors/handsontableEditor/handsontableEditor.mjs +36 -2
  134. package/editors/passwordEditor/passwordEditor.js +18 -0
  135. package/editors/passwordEditor/passwordEditor.mjs +18 -0
  136. package/editors/registry.js +2 -2
  137. package/editors/registry.mjs +1 -1
  138. package/editors/selectEditor/selectEditor.js +20 -9
  139. package/editors/selectEditor/selectEditor.mjs +20 -9
  140. package/editors/textEditor/textEditor.js +5 -12
  141. package/editors/textEditor/textEditor.mjs +6 -13
  142. package/focusManager.js +5 -7
  143. package/focusManager.mjs +5 -7
  144. package/helpers/array.js +2 -0
  145. package/helpers/array.mjs +2 -0
  146. package/helpers/data.js +3 -0
  147. package/helpers/data.mjs +3 -0
  148. package/helpers/dom/element.js +39 -18
  149. package/helpers/dom/element.mjs +38 -17
  150. package/helpers/mixed.js +3 -3
  151. package/helpers/mixed.mjs +3 -3
  152. package/helpers/moves.js +3 -0
  153. package/helpers/moves.mjs +3 -0
  154. package/helpers/number.js +1 -0
  155. package/helpers/number.mjs +1 -0
  156. package/helpers/object.js +2 -0
  157. package/helpers/object.mjs +2 -0
  158. package/helpers/themes.js +17 -0
  159. package/helpers/themes.mjs +13 -0
  160. package/i18n/index.js +2 -0
  161. package/i18n/languages/index.d.ts +8 -0
  162. package/i18n/languages/ja-JP.d.ts +1 -1
  163. package/i18n/phraseFormatters/substituteVariables.js +1 -0
  164. package/i18n/phraseFormatters/substituteVariables.mjs +1 -0
  165. package/index.d.ts +9 -1
  166. package/languages/all.js +1 -1
  167. package/languages/ar-AR.js +1 -1
  168. package/languages/cs-CZ.js +1 -1
  169. package/languages/de-CH.js +1 -1
  170. package/languages/de-DE.js +1 -1
  171. package/languages/en-US.js +1 -1
  172. package/languages/es-MX.js +1 -1
  173. package/languages/fr-FR.js +1 -1
  174. package/languages/hr-HR.js +1 -1
  175. package/languages/index.js +1 -1
  176. package/languages/it-IT.js +1 -1
  177. package/languages/ja-JP.js +1 -1
  178. package/languages/ko-KR.js +1 -1
  179. package/languages/lv-LV.js +1 -1
  180. package/languages/nb-NO.js +1 -1
  181. package/languages/nl-NL.js +1 -1
  182. package/languages/pl-PL.js +1 -1
  183. package/languages/pt-BR.js +1 -1
  184. package/languages/ru-RU.js +1 -1
  185. package/languages/sr-SP.js +1 -1
  186. package/languages/zh-CN.js +1 -1
  187. package/languages/zh-TW.js +1 -1
  188. package/package.json +22 -7
  189. package/plugins/autoColumnSize/autoColumnSize.js +22 -27
  190. package/plugins/autoColumnSize/autoColumnSize.mjs +22 -27
  191. package/plugins/autoRowSize/autoRowSize.js +20 -22
  192. package/plugins/autoRowSize/autoRowSize.mjs +21 -23
  193. package/plugins/autofill/autofill.js +4 -5
  194. package/plugins/autofill/autofill.mjs +1 -1
  195. package/plugins/base/base.d.ts +1 -1
  196. package/plugins/base/base.js +41 -0
  197. package/plugins/base/base.mjs +42 -1
  198. package/plugins/base/index.js +2 -1
  199. package/plugins/base/index.mjs +1 -1
  200. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.js +2 -5
  201. package/plugins/bindRowsWithHeaders/bindRowsWithHeaders.mjs +2 -5
  202. package/plugins/columnSorting/columnSorting.js +5 -4
  203. package/plugins/columnSorting/columnSorting.mjs +3 -1
  204. package/plugins/columnSorting/columnStatesManager.js +1 -0
  205. package/plugins/columnSorting/columnStatesManager.mjs +1 -0
  206. package/plugins/columnSorting/utils.js +3 -0
  207. package/plugins/columnSorting/utils.mjs +3 -0
  208. package/plugins/columnSummary/endpoints.js +3 -0
  209. package/plugins/columnSummary/endpoints.mjs +3 -0
  210. package/plugins/comments/commentEditor.js +9 -0
  211. package/plugins/comments/commentEditor.mjs +9 -0
  212. package/plugins/comments/comments.js +24 -18
  213. package/plugins/comments/comments.mjs +26 -20
  214. package/plugins/comments/editorResizeObserver.js +2 -0
  215. package/plugins/comments/editorResizeObserver.mjs +2 -0
  216. package/plugins/contextMenu/contextMenu.d.ts +2 -1
  217. package/plugins/contextMenu/contextMenu.js +6 -7
  218. package/plugins/contextMenu/contextMenu.mjs +1 -1
  219. package/plugins/contextMenu/menu/index.js +2 -0
  220. package/plugins/contextMenu/menu/menu.js +10 -5
  221. package/plugins/contextMenu/menu/menu.mjs +11 -6
  222. package/plugins/contextMenu/menu/positioner.js +4 -2
  223. package/plugins/contextMenu/menu/positioner.mjs +4 -2
  224. package/plugins/contextMenu/menu/shortcuts.js +3 -1
  225. package/plugins/contextMenu/menu/shortcuts.mjs +3 -1
  226. package/plugins/contextMenu/predefinedItems/alignment.js +7 -84
  227. package/plugins/contextMenu/predefinedItems/alignment.mjs +8 -85
  228. package/plugins/contextMenu/utils.js +0 -10
  229. package/plugins/contextMenu/utils.mjs +0 -9
  230. package/plugins/copyPaste/copyPaste.d.ts +1 -0
  231. package/plugins/copyPaste/copyPaste.js +32 -23
  232. package/plugins/copyPaste/copyPaste.mjs +24 -15
  233. package/plugins/customBorders/utils.js +2 -0
  234. package/plugins/customBorders/utils.mjs +2 -0
  235. package/plugins/dropdownMenu/dropdownMenu.d.ts +2 -1
  236. package/plugins/dropdownMenu/dropdownMenu.js +6 -7
  237. package/plugins/dropdownMenu/dropdownMenu.mjs +1 -1
  238. package/plugins/exportFile/types/csv.js +1 -0
  239. package/plugins/exportFile/types/csv.mjs +1 -0
  240. package/plugins/filters/component/condition.js +2 -0
  241. package/plugins/filters/component/condition.mjs +2 -0
  242. package/plugins/filters/component/operators.js +2 -0
  243. package/plugins/filters/component/operators.mjs +2 -0
  244. package/plugins/filters/component/value.js +3 -0
  245. package/plugins/filters/component/value.mjs +3 -0
  246. package/plugins/filters/conditionCollection.js +3 -0
  247. package/plugins/filters/conditionCollection.mjs +3 -0
  248. package/plugins/filters/conditionUpdateObserver.js +2 -0
  249. package/plugins/filters/conditionUpdateObserver.mjs +2 -0
  250. package/plugins/filters/filters.js +43 -13
  251. package/plugins/filters/filters.mjs +43 -13
  252. package/plugins/filters/logicalOperations/conjunction.js +2 -0
  253. package/plugins/filters/logicalOperations/conjunction.mjs +2 -0
  254. package/plugins/filters/logicalOperations/disjunction.js +2 -0
  255. package/plugins/filters/logicalOperations/disjunction.mjs +2 -0
  256. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.js +2 -0
  257. package/plugins/filters/logicalOperations/disjunctionWithExtraCondition.mjs +2 -0
  258. package/plugins/filters/menu/focusController.js +38 -14
  259. package/plugins/filters/menu/focusController.mjs +38 -14
  260. package/plugins/filters/ui/multipleSelect.js +10 -0
  261. package/plugins/filters/ui/multipleSelect.mjs +10 -0
  262. package/plugins/formulas/engine/register.js +3 -0
  263. package/plugins/formulas/engine/register.mjs +3 -0
  264. package/plugins/formulas/engine/settings.js +3 -0
  265. package/plugins/formulas/engine/settings.mjs +3 -0
  266. package/plugins/formulas/formulas.js +12 -7
  267. package/plugins/formulas/formulas.mjs +6 -1
  268. package/plugins/formulas/indexSyncer/axisSyncer.js +3 -0
  269. package/plugins/formulas/indexSyncer/axisSyncer.mjs +3 -0
  270. package/plugins/hiddenColumns/contextMenuItem/showColumn.js +2 -0
  271. package/plugins/hiddenColumns/contextMenuItem/showColumn.mjs +2 -0
  272. package/plugins/hiddenColumns/hiddenColumns.js +22 -30
  273. package/plugins/hiddenColumns/hiddenColumns.mjs +18 -26
  274. package/plugins/hiddenRows/contextMenuItem/showRow.js +2 -0
  275. package/plugins/hiddenRows/contextMenuItem/showRow.mjs +2 -0
  276. package/plugins/hiddenRows/hiddenRows.js +21 -29
  277. package/plugins/hiddenRows/hiddenRows.mjs +17 -25
  278. package/plugins/index.d.ts +3 -0
  279. package/plugins/index.js +3 -0
  280. package/plugins/index.mjs +3 -1
  281. package/plugins/manualColumnFreeze/manualColumnFreeze.js +7 -5
  282. package/plugins/manualColumnFreeze/manualColumnFreeze.mjs +3 -1
  283. package/plugins/manualColumnMove/manualColumnMove.js +6 -6
  284. package/plugins/manualColumnMove/manualColumnMove.mjs +4 -4
  285. package/plugins/manualColumnResize/manualColumnResize.js +26 -12
  286. package/plugins/manualColumnResize/manualColumnResize.mjs +26 -12
  287. package/plugins/manualRowMove/manualRowMove.js +8 -6
  288. package/plugins/manualRowMove/manualRowMove.mjs +6 -4
  289. package/plugins/manualRowResize/manualRowResize.js +3 -2
  290. package/plugins/manualRowResize/manualRowResize.mjs +4 -3
  291. package/plugins/mergeCells/cellsCollection.js +19 -3
  292. package/plugins/mergeCells/cellsCollection.mjs +20 -4
  293. package/plugins/mergeCells/mergeCells.d.ts +6 -2
  294. package/plugins/mergeCells/mergeCells.js +84 -56
  295. package/plugins/mergeCells/mergeCells.mjs +82 -54
  296. package/plugins/mergeCells/renderer.js +13 -3
  297. package/plugins/mergeCells/renderer.mjs +13 -3
  298. package/plugins/multiColumnSorting/domHelpers.js +2 -0
  299. package/plugins/multiColumnSorting/domHelpers.mjs +2 -0
  300. package/plugins/nestedHeaders/nestedHeaders.js +63 -16
  301. package/plugins/nestedHeaders/nestedHeaders.mjs +63 -16
  302. package/plugins/nestedHeaders/stateManager/index.js +1 -0
  303. package/plugins/nestedHeaders/stateManager/index.mjs +1 -0
  304. package/plugins/nestedRows/nestedRows.js +3 -0
  305. package/plugins/nestedRows/nestedRows.mjs +3 -0
  306. package/plugins/nestedRows/ui/headers.js +7 -1
  307. package/plugins/nestedRows/ui/headers.mjs +7 -1
  308. package/plugins/nestedRows/utils/rowMoveController.js +4 -0
  309. package/plugins/nestedRows/utils/rowMoveController.mjs +4 -0
  310. package/plugins/persistentState/persistentState.js +4 -4
  311. package/plugins/persistentState/persistentState.mjs +1 -1
  312. package/plugins/stretchColumns/calculator.js +162 -0
  313. package/plugins/stretchColumns/calculator.mjs +158 -0
  314. package/plugins/stretchColumns/index.d.ts +1 -0
  315. package/plugins/stretchColumns/index.js +7 -0
  316. package/plugins/stretchColumns/index.mjs +1 -0
  317. package/plugins/stretchColumns/strategies/_base.js +85 -0
  318. package/plugins/stretchColumns/strategies/_base.mjs +81 -0
  319. package/plugins/stretchColumns/strategies/all.js +71 -0
  320. package/plugins/stretchColumns/strategies/all.mjs +67 -0
  321. package/plugins/stretchColumns/strategies/last.js +79 -0
  322. package/plugins/stretchColumns/strategies/last.mjs +75 -0
  323. package/plugins/stretchColumns/stretchColumns.d.ts +11 -0
  324. package/plugins/stretchColumns/stretchColumns.js +222 -0
  325. package/plugins/stretchColumns/stretchColumns.mjs +218 -0
  326. package/plugins/trimRows/trimRows.js +2 -0
  327. package/plugins/trimRows/trimRows.mjs +2 -0
  328. package/plugins/undoRedo/undoRedo.js +9 -5
  329. package/plugins/undoRedo/undoRedo.mjs +8 -3
  330. package/renderers/checkboxRenderer/checkboxRenderer.js +19 -8
  331. package/renderers/checkboxRenderer/checkboxRenderer.mjs +18 -7
  332. package/selection/index.js +2 -0
  333. package/selection/range.js +2 -0
  334. package/selection/range.mjs +2 -0
  335. package/selection/selection.js +7 -2
  336. package/selection/selection.mjs +7 -2
  337. package/selection/utils.js +2 -0
  338. package/selection/utils.mjs +2 -0
  339. package/settings.d.ts +4 -1
  340. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +1 -1
  341. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +1 -1
  342. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +1 -1
  343. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +1 -1
  344. package/shortcutContexts/commands/index.js +2 -0
  345. package/shortcutContexts/commands/index.mjs +2 -0
  346. package/shortcutContexts/commands/scrollToFocusedCell.js +4 -4
  347. package/shortcutContexts/commands/scrollToFocusedCell.mjs +4 -4
  348. package/shortcutContexts/index.js +2 -0
  349. package/shortcutContexts/index.mjs +2 -0
  350. package/shortcuts/context.js +3 -0
  351. package/shortcuts/context.mjs +3 -0
  352. package/shortcuts/recorder.js +3 -3
  353. package/shortcuts/recorder.mjs +3 -3
  354. package/shortcuts/utils.js +1 -0
  355. package/shortcuts/utils.mjs +1 -0
  356. package/styles/handsontable.css +2307 -0
  357. package/styles/handsontable.min.css +30 -0
  358. package/styles/ht-theme-horizon.css +607 -0
  359. package/styles/ht-theme-horizon.min.css +30 -0
  360. package/styles/ht-theme-main.css +613 -0
  361. package/styles/ht-theme-main.min.css +30 -0
  362. package/tableView.js +205 -33
  363. package/tableView.mjs +206 -34
  364. package/translations/changesObservable/observable.js +2 -0
  365. package/translations/changesObservable/observable.mjs +2 -0
  366. package/translations/index.js +2 -0
  367. package/translations/indexMapper.js +4 -0
  368. package/translations/indexMapper.mjs +4 -0
  369. package/translations/mapCollections/index.js +2 -0
  370. package/translations/mapCollections/mapCollection.js +2 -0
  371. package/translations/mapCollections/mapCollection.mjs +2 -0
  372. package/translations/maps/index.js +2 -0
  373. package/translations/maps/linkedPhysicalIndexToValueMap.js +1 -0
  374. package/translations/maps/linkedPhysicalIndexToValueMap.mjs +1 -0
  375. package/translations/maps/utils/actionsOnIndexes.js +2 -0
  376. package/translations/maps/utils/actionsOnIndexes.mjs +2 -0
  377. package/translations/maps/utils/physicallyIndexed.js +1 -0
  378. package/translations/maps/utils/physicallyIndexed.mjs +1 -0
  379. package/utils/autoResize.js +11 -3
  380. package/utils/autoResize.mjs +11 -3
  381. package/utils/dataStructures/priorityMap.js +1 -0
  382. package/utils/dataStructures/priorityMap.mjs +1 -0
  383. package/utils/dataStructures/uniqueMap.js +2 -0
  384. package/utils/dataStructures/uniqueMap.mjs +2 -0
  385. package/utils/ghostTable.js +7 -3
  386. package/utils/ghostTable.mjs +7 -3
  387. package/utils/parseTable.js +4 -0
  388. package/utils/parseTable.mjs +4 -0
  389. package/3rdparty/walkontable/src/selection/border/constants.js +0 -15
  390. package/3rdparty/walkontable/src/selection/border/constants.mjs +0 -12
  391. package/3rdparty/walkontable/src/utils/columnStretching.js +0 -197
  392. package/3rdparty/walkontable/src/utils/columnStretching.mjs +0 -193
@@ -3,6 +3,7 @@
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.error.cause.js");
5
5
  var _element = require("../../../helpers/dom/element");
6
+ var _object = require("../../../helpers/object");
6
7
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
7
8
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
8
9
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
@@ -39,15 +40,20 @@ class Scroll {
39
40
  * Scrolls viewport to a cell.
40
41
  *
41
42
  * @param {CellCoords} coords The cell coordinates.
42
- * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.
43
- * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.
44
- * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.
45
- * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.
43
+ * @param {'auto' | 'start' | 'end'} [horizontalSnap='auto'] If `'start'`, viewport is scrolled to show
44
+ * the cell on the left of the table. If `'end'`, viewport is scrolled to show the cell on the right of
45
+ * the table. When `'auto'`, the viewport is scrolled only when the column is outside of the viewport.
46
+ * @param {'auto' | 'top' | 'bottom'} [verticalSnap='auto'] If `'top'`, viewport is scrolled to show
47
+ * the cell on the top of the table. If `'bottom'`, viewport is scrolled to show the cell on the bottom of
48
+ * the table. When `'auto'`, the viewport is scrolled only when the row is outside of the viewport.
46
49
  * @returns {boolean}
47
50
  */
48
- scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {
49
- const scrolledHorizontally = this.scrollViewportHorizontally(coords.col, snapToRight, snapToLeft);
50
- const scrolledVertically = this.scrollViewportVertically(coords.row, snapToTop, snapToBottom);
51
+ scrollViewport(coords, horizontalSnap, verticalSnap) {
52
+ if (coords.col < 0 || coords.row < 0) {
53
+ return false;
54
+ }
55
+ const scrolledHorizontally = this.scrollViewportHorizontally(coords.col, horizontalSnap);
56
+ const scrolledVertically = this.scrollViewportVertically(coords.row, verticalSnap);
51
57
  return scrolledHorizontally || scrolledVertically;
52
58
  }
53
59
 
@@ -55,42 +61,43 @@ class Scroll {
55
61
  * Scrolls viewport to a column.
56
62
  *
57
63
  * @param {number} column Visual column index.
58
- * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.
59
- * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.
64
+ * @param {'auto' | 'start' | 'end'} [snapping='auto'] If `'start'`, viewport is scrolled to show
65
+ * the cell on the left of the table. If `'end'`, viewport is scrolled to show the cell on the right of
66
+ * the table. When `'auto'`, the viewport is scrolled only when the column is outside of the viewport.
60
67
  * @returns {boolean}
61
68
  */
62
- scrollViewportHorizontally(column, snapToRight, snapToLeft) {
69
+ scrollViewportHorizontally(column) {
70
+ let snapping = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'auto';
63
71
  const {
64
72
  drawn,
65
73
  totalColumns
66
74
  } = this.dataAccessObject;
67
-
68
- // do not scroll the viewport when the column points to a range outside of the dataset
69
- if (!drawn || !Number.isInteger(column) || column < 0 || column > totalColumns) {
75
+ if (!drawn) {
76
+ return false;
77
+ }
78
+ const snappingObject = (0, _object.createObjectPropListener)(snapping);
79
+ column = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollHorizontally', column, snappingObject);
80
+ if (!Number.isInteger(column) || column < 0 || column > totalColumns) {
70
81
  return false;
71
82
  }
72
- const autoSnapping = snapToRight === undefined && snapToLeft === undefined;
83
+ snapping = snappingObject.value;
73
84
  const {
74
85
  fixedColumnsStart,
75
86
  inlineStartOverlay
76
87
  } = this.dataAccessObject;
88
+ const autoSnapping = snapping === 'auto';
77
89
 
78
- // for auto-snapping (both snap* arguments are undefined) do not scroll the viewport
79
- // when the columns points to the overlays
90
+ // for auto-snapping do not scroll the viewport when the columns points to the overlays
80
91
  if (autoSnapping && column < fixedColumnsStart) {
81
92
  return false;
82
93
  }
83
- column = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollHorizontally', column);
84
- if (!Number.isInteger(column) || column < 0 || column > totalColumns) {
85
- return false;
86
- }
87
94
  const firstColumn = this.getFirstVisibleColumn();
88
95
  const lastColumn = this.getLastVisibleColumn();
89
96
  let result = false;
90
97
  if (autoSnapping && (column < firstColumn || column > lastColumn) || !autoSnapping) {
91
98
  // if there is at least one fully visible column determine the snapping direction based on
92
- // that columns or by snapToRight/snapToLeft flags, if provided.
93
- result = inlineStartOverlay.scrollTo(column, autoSnapping ? column >= this.getLastPartiallyVisibleColumn() : snapToRight);
99
+ // that columns or by snapping flag, if provided.
100
+ result = inlineStartOverlay.scrollTo(column, autoSnapping ? column >= this.getLastPartiallyVisibleColumn() : snapping === 'end');
94
101
  }
95
102
  return result;
96
103
  }
@@ -99,43 +106,45 @@ class Scroll {
99
106
  * Scrolls viewport to a row.
100
107
  *
101
108
  * @param {number} row Visual row index.
102
- * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.
103
- * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.
109
+ * @param {'auto' | 'top' | 'bottom'} [snapping='auto'] If `'top'`, viewport is scrolled to show
110
+ * the cell on the top of the table. If `'bottom'`, viewport is scrolled to show the cell on
111
+ * the bottom of the table. When `'auto'`, the viewport is scrolled only when the row is outside of
112
+ * the viewport.
104
113
  * @returns {boolean}
105
114
  */
106
- scrollViewportVertically(row, snapToTop, snapToBottom) {
115
+ scrollViewportVertically(row) {
116
+ let snapping = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'auto';
107
117
  const {
108
118
  drawn,
109
119
  totalRows
110
120
  } = this.dataAccessObject;
111
-
112
- // do not scroll the viewport when the row points to a range outside of the dataset
113
- if (!drawn || !Number.isInteger(row) || row < 0 || row > totalRows) {
121
+ if (!drawn) {
122
+ return false;
123
+ }
124
+ const snappingObject = (0, _object.createObjectPropListener)(snapping);
125
+ row = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollVertically', row, snappingObject);
126
+ if (!Number.isInteger(row) || row < 0 || row > totalRows) {
114
127
  return false;
115
128
  }
116
- const autoSnapping = snapToTop === undefined && snapToBottom === undefined;
129
+ snapping = snappingObject.value;
117
130
  const {
118
131
  fixedRowsBottom,
119
132
  fixedRowsTop,
120
133
  topOverlay
121
134
  } = this.dataAccessObject;
135
+ const autoSnapping = snapping === 'auto';
122
136
 
123
- // for auto-snapping (both snap* arguments are undefined) do not scroll the viewport
124
- // when the rows points to the overlays
137
+ // for auto-snapping do not scroll the viewport when the rows points to the overlays
125
138
  if (autoSnapping && (row < fixedRowsTop || row > totalRows - fixedRowsBottom - 1)) {
126
139
  return false;
127
140
  }
128
- row = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollVertically', row);
129
- if (!Number.isInteger(row) || row < 0 || row > totalRows) {
130
- return false;
131
- }
132
141
  const firstRow = this.getFirstVisibleRow();
133
142
  const lastRow = this.getLastVisibleRow();
134
143
  let result = false;
135
144
  if (autoSnapping && (row < firstRow || row > lastRow) || !autoSnapping) {
136
145
  // if there is at least one fully visible row determine the snapping direction based on
137
- // that rows or by snapToTop/snapToBottom flags, if provided.
138
- result = topOverlay.scrollTo(row, autoSnapping ? row >= this.getLastPartiallyVisibleRow() : snapToBottom);
146
+ // that rows or by snapping flag, if provided.
147
+ result = topOverlay.scrollTo(row, autoSnapping ? row >= this.getLastPartiallyVisibleRow() : snapping === 'bottom');
139
148
  }
140
149
  return result;
141
150
  }
@@ -6,6 +6,7 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
6
6
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
7
  function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
8
8
  import { innerHeight, innerWidth, getScrollLeft, getScrollTop, offset } from "../../../helpers/dom/element.mjs";
9
+ import { createObjectPropListener } from "../../../helpers/object.mjs";
9
10
  /**
10
11
  * @class Scroll
11
12
  */
@@ -36,15 +37,20 @@ class Scroll {
36
37
  * Scrolls viewport to a cell.
37
38
  *
38
39
  * @param {CellCoords} coords The cell coordinates.
39
- * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.
40
- * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.
41
- * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.
42
- * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.
40
+ * @param {'auto' | 'start' | 'end'} [horizontalSnap='auto'] If `'start'`, viewport is scrolled to show
41
+ * the cell on the left of the table. If `'end'`, viewport is scrolled to show the cell on the right of
42
+ * the table. When `'auto'`, the viewport is scrolled only when the column is outside of the viewport.
43
+ * @param {'auto' | 'top' | 'bottom'} [verticalSnap='auto'] If `'top'`, viewport is scrolled to show
44
+ * the cell on the top of the table. If `'bottom'`, viewport is scrolled to show the cell on the bottom of
45
+ * the table. When `'auto'`, the viewport is scrolled only when the row is outside of the viewport.
43
46
  * @returns {boolean}
44
47
  */
45
- scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {
46
- const scrolledHorizontally = this.scrollViewportHorizontally(coords.col, snapToRight, snapToLeft);
47
- const scrolledVertically = this.scrollViewportVertically(coords.row, snapToTop, snapToBottom);
48
+ scrollViewport(coords, horizontalSnap, verticalSnap) {
49
+ if (coords.col < 0 || coords.row < 0) {
50
+ return false;
51
+ }
52
+ const scrolledHorizontally = this.scrollViewportHorizontally(coords.col, horizontalSnap);
53
+ const scrolledVertically = this.scrollViewportVertically(coords.row, verticalSnap);
48
54
  return scrolledHorizontally || scrolledVertically;
49
55
  }
50
56
 
@@ -52,42 +58,43 @@ class Scroll {
52
58
  * Scrolls viewport to a column.
53
59
  *
54
60
  * @param {number} column Visual column index.
55
- * @param {boolean} [snapToRight] If `true`, viewport is scrolled to show the cell on the right of the table.
56
- * @param {boolean} [snapToLeft] If `true`, viewport is scrolled to show the cell on the left of the table.
61
+ * @param {'auto' | 'start' | 'end'} [snapping='auto'] If `'start'`, viewport is scrolled to show
62
+ * the cell on the left of the table. If `'end'`, viewport is scrolled to show the cell on the right of
63
+ * the table. When `'auto'`, the viewport is scrolled only when the column is outside of the viewport.
57
64
  * @returns {boolean}
58
65
  */
59
- scrollViewportHorizontally(column, snapToRight, snapToLeft) {
66
+ scrollViewportHorizontally(column) {
67
+ let snapping = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'auto';
60
68
  const {
61
69
  drawn,
62
70
  totalColumns
63
71
  } = this.dataAccessObject;
64
-
65
- // do not scroll the viewport when the column points to a range outside of the dataset
66
- if (!drawn || !Number.isInteger(column) || column < 0 || column > totalColumns) {
72
+ if (!drawn) {
73
+ return false;
74
+ }
75
+ const snappingObject = createObjectPropListener(snapping);
76
+ column = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollHorizontally', column, snappingObject);
77
+ if (!Number.isInteger(column) || column < 0 || column > totalColumns) {
67
78
  return false;
68
79
  }
69
- const autoSnapping = snapToRight === undefined && snapToLeft === undefined;
80
+ snapping = snappingObject.value;
70
81
  const {
71
82
  fixedColumnsStart,
72
83
  inlineStartOverlay
73
84
  } = this.dataAccessObject;
85
+ const autoSnapping = snapping === 'auto';
74
86
 
75
- // for auto-snapping (both snap* arguments are undefined) do not scroll the viewport
76
- // when the columns points to the overlays
87
+ // for auto-snapping do not scroll the viewport when the columns points to the overlays
77
88
  if (autoSnapping && column < fixedColumnsStart) {
78
89
  return false;
79
90
  }
80
- column = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollHorizontally', column);
81
- if (!Number.isInteger(column) || column < 0 || column > totalColumns) {
82
- return false;
83
- }
84
91
  const firstColumn = this.getFirstVisibleColumn();
85
92
  const lastColumn = this.getLastVisibleColumn();
86
93
  let result = false;
87
94
  if (autoSnapping && (column < firstColumn || column > lastColumn) || !autoSnapping) {
88
95
  // if there is at least one fully visible column determine the snapping direction based on
89
- // that columns or by snapToRight/snapToLeft flags, if provided.
90
- result = inlineStartOverlay.scrollTo(column, autoSnapping ? column >= this.getLastPartiallyVisibleColumn() : snapToRight);
96
+ // that columns or by snapping flag, if provided.
97
+ result = inlineStartOverlay.scrollTo(column, autoSnapping ? column >= this.getLastPartiallyVisibleColumn() : snapping === 'end');
91
98
  }
92
99
  return result;
93
100
  }
@@ -96,43 +103,45 @@ class Scroll {
96
103
  * Scrolls viewport to a row.
97
104
  *
98
105
  * @param {number} row Visual row index.
99
- * @param {boolean} [snapToTop] If `true`, viewport is scrolled to show the cell on the top of the table.
100
- * @param {boolean} [snapToBottom] If `true`, viewport is scrolled to show the cell on the bottom of the table.
106
+ * @param {'auto' | 'top' | 'bottom'} [snapping='auto'] If `'top'`, viewport is scrolled to show
107
+ * the cell on the top of the table. If `'bottom'`, viewport is scrolled to show the cell on
108
+ * the bottom of the table. When `'auto'`, the viewport is scrolled only when the row is outside of
109
+ * the viewport.
101
110
  * @returns {boolean}
102
111
  */
103
- scrollViewportVertically(row, snapToTop, snapToBottom) {
112
+ scrollViewportVertically(row) {
113
+ let snapping = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'auto';
104
114
  const {
105
115
  drawn,
106
116
  totalRows
107
117
  } = this.dataAccessObject;
108
-
109
- // do not scroll the viewport when the row points to a range outside of the dataset
110
- if (!drawn || !Number.isInteger(row) || row < 0 || row > totalRows) {
118
+ if (!drawn) {
119
+ return false;
120
+ }
121
+ const snappingObject = createObjectPropListener(snapping);
122
+ row = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollVertically', row, snappingObject);
123
+ if (!Number.isInteger(row) || row < 0 || row > totalRows) {
111
124
  return false;
112
125
  }
113
- const autoSnapping = snapToTop === undefined && snapToBottom === undefined;
126
+ snapping = snappingObject.value;
114
127
  const {
115
128
  fixedRowsBottom,
116
129
  fixedRowsTop,
117
130
  topOverlay
118
131
  } = this.dataAccessObject;
132
+ const autoSnapping = snapping === 'auto';
119
133
 
120
- // for auto-snapping (both snap* arguments are undefined) do not scroll the viewport
121
- // when the rows points to the overlays
134
+ // for auto-snapping do not scroll the viewport when the rows points to the overlays
122
135
  if (autoSnapping && (row < fixedRowsTop || row > totalRows - fixedRowsBottom - 1)) {
123
136
  return false;
124
137
  }
125
- row = this.dataAccessObject.wtSettings.getSetting('onBeforeViewportScrollVertically', row);
126
- if (!Number.isInteger(row) || row < 0 || row > totalRows) {
127
- return false;
128
- }
129
138
  const firstRow = this.getFirstVisibleRow();
130
139
  const lastRow = this.getLastVisibleRow();
131
140
  let result = false;
132
141
  if (autoSnapping && (row < firstRow || row > lastRow) || !autoSnapping) {
133
142
  // if there is at least one fully visible row determine the snapping direction based on
134
- // that rows or by snapToTop/snapToBottom flags, if provided.
135
- result = topOverlay.scrollTo(row, autoSnapping ? row >= this.getLastPartiallyVisibleRow() : snapToBottom);
143
+ // that rows or by snapping flag, if provided.
144
+ result = topOverlay.scrollTo(row, autoSnapping ? row >= this.getLastPartiallyVisibleRow() : snapping === 'bottom');
136
145
  }
137
146
  return result;
138
147
  }
@@ -5,7 +5,7 @@ var _element = require("../../../../../helpers/dom/element");
5
5
  var _event = require("../../../../../helpers/dom/event");
6
6
  var _object = require("../../../../../helpers/object");
7
7
  var _browser = require("../../../../../helpers/browser");
8
- var _constants = require("./constants");
8
+ var _utils = require("./utils");
9
9
  /**
10
10
  *
11
11
  */
@@ -35,9 +35,9 @@ class Border {
35
35
  this.bottomStyle = null;
36
36
  this.startStyle = null;
37
37
  this.endStyle = null;
38
- this.cornerDefaultStyle = _constants.CORNER_DEFAULT_STYLE;
38
+ this.cornerDefaultStyle = (0, _utils.getCornerStyle)(this.instance);
39
39
  // Offset to moving the corner to be centered relative to the grid.
40
- this.cornerCenterPointOffset = -(parseInt(this.cornerDefaultStyle.width, 10) / 2);
40
+ this.cornerCenterPointOffset = -Math.ceil(parseInt(this.cornerDefaultStyle.width, 10) / 2);
41
41
  this.corner = null;
42
42
  this.cornerStyle = null;
43
43
  this.createBorders(settings);
@@ -166,9 +166,9 @@ class Border {
166
166
  this.corner = this.main.childNodes[4];
167
167
  this.corner.className += ' corner';
168
168
  this.cornerStyle = this.corner.style;
169
- this.cornerStyle.width = this.cornerDefaultStyle.width;
170
- this.cornerStyle.height = this.cornerDefaultStyle.height;
171
- this.cornerStyle.border = [this.cornerDefaultStyle.borderWidth, this.cornerDefaultStyle.borderStyle, this.cornerDefaultStyle.borderColor].join(' ');
169
+ this.cornerStyle.width = `${this.cornerDefaultStyle.width}px`;
170
+ this.cornerStyle.height = `${this.cornerDefaultStyle.height}px`;
171
+ this.cornerStyle.border = [`${this.cornerDefaultStyle.borderWidth}px`, this.cornerDefaultStyle.borderStyle, this.cornerDefaultStyle.borderColor].join(' ');
172
172
  if ((0, _browser.isMobileBrowser)() && this.instance.getSetting('isDataViewInstance')) {
173
173
  this.createMultipleSelectorHandles();
174
174
  }
@@ -322,66 +322,52 @@ class Border {
322
322
  if (this.disabled) {
323
323
  return;
324
324
  }
325
+ let [fromRow, fromColumn, toRow, toColumn] = corners;
326
+
327
+ // borders can not be rendered on headers so hide them
328
+ if (fromRow < 0 && toRow < 0 || fromColumn < 0 && toColumn < 0) {
329
+ this.disappear();
330
+ return;
331
+ }
325
332
  const {
326
333
  wtTable,
327
334
  rootDocument,
328
335
  rootWindow
329
- } = this.wot; // todo refactoring: consider about using internal facade (it is given by external code)
330
- let fromRow;
331
- let toRow;
332
- let fromColumn;
333
- let toColumn;
334
- let rowHeader;
335
- let columnHeader;
336
- const rowsCount = wtTable.getRenderedRowsCount();
337
- for (let i = 0; i < rowsCount; i += 1) {
338
- const s = wtTable.rowFilter.renderedToSource(i);
339
- if (s >= corners[0] && s <= corners[2]) {
340
- fromRow = s;
341
- rowHeader = corners[0];
342
- break;
343
- }
344
- }
345
- for (let i = rowsCount - 1; i >= 0; i -= 1) {
346
- const s = wtTable.rowFilter.renderedToSource(i);
347
- if (s >= corners[0] && s <= corners[2]) {
348
- toRow = s;
349
- break;
350
- }
351
- }
352
- const columnsCount = wtTable.getRenderedColumnsCount();
353
- for (let i = 0; i < columnsCount; i += 1) {
354
- const s = wtTable.columnFilter.renderedToSource(i);
355
- if (s >= corners[1] && s <= corners[3]) {
356
- fromColumn = s;
357
- columnHeader = corners[1];
358
- break;
336
+ } = this.wot;
337
+ const isMultiple = fromRow !== toRow || fromColumn !== toColumn;
338
+ const firstRenderedRow = wtTable.getFirstRenderedRow();
339
+ const lastRenderedRow = wtTable.getLastRenderedRow();
340
+ const firstRenderedColumn = wtTable.getFirstRenderedColumn();
341
+ const lastRenderedColumn = wtTable.getLastRenderedColumn();
342
+ let fromTD;
343
+ if (isMultiple) {
344
+ fromColumn = Math.max(fromColumn, firstRenderedColumn);
345
+ toColumn = Math.min(toColumn, lastRenderedColumn);
346
+ fromRow = Math.max(fromRow, firstRenderedRow);
347
+ toRow = Math.min(toRow, lastRenderedRow);
348
+ if (toColumn < fromColumn || toRow < fromRow) {
349
+ this.disappear();
350
+ return;
359
351
  }
360
- }
361
- for (let i = columnsCount - 1; i >= 0; i -= 1) {
362
- const s = wtTable.columnFilter.renderedToSource(i);
363
- if (s >= corners[1] && s <= corners[3]) {
364
- toColumn = s;
365
- break;
352
+ fromTD = wtTable.getCell(this.wot.createCellCoords(fromRow, fromColumn));
353
+ } else {
354
+ fromTD = wtTable.getCell(this.wot.createCellCoords(fromRow, fromColumn));
355
+ if (!(fromTD instanceof HTMLElement)) {
356
+ this.disappear();
357
+ return;
366
358
  }
367
359
  }
368
- if (fromRow === undefined || fromColumn === undefined) {
369
- this.disappear();
370
- return;
371
- }
372
- let fromTD = wtTable.getCell(this.wot.createCellCoords(fromRow, fromColumn));
373
- const isMultiple = fromRow !== toRow || fromColumn !== toColumn;
374
360
  const toTD = isMultiple ? wtTable.getCell(this.wot.createCellCoords(toRow, toColumn)) : fromTD;
375
361
  const fromOffset = (0, _element.offset)(fromTD);
376
362
  const toOffset = isMultiple ? (0, _element.offset)(toTD) : fromOffset;
377
363
  const containerOffset = (0, _element.offset)(wtTable.TABLE);
378
- const containerWidth = (0, _element.outerWidth)(wtTable.TABLE);
379
364
  const minTop = fromOffset.top;
380
365
  const minLeft = fromOffset.left;
381
366
  const isRtl = this.wot.wtSettings.getSetting('rtlMode');
382
367
  let inlineStartPos = 0;
383
368
  let width = 0;
384
369
  if (isRtl) {
370
+ const containerWidth = (0, _element.outerWidth)(wtTable.TABLE);
385
371
  const fromWidth = (0, _element.outerWidth)(fromTD);
386
372
  const gridRightPos = rootWindow.innerWidth - containerOffset.left - containerWidth;
387
373
  width = minLeft + fromWidth - toOffset.left;
@@ -391,6 +377,7 @@ class Border {
391
377
  inlineStartPos = minLeft - containerOffset.left - 1;
392
378
  }
393
379
  if (this.isEntireColumnSelected(fromRow, toRow)) {
380
+ const rowHeader = fromRow;
394
381
  const modifiedValues = this.getDimensionsFromHeader('columns', fromColumn, toColumn, rowHeader, containerOffset);
395
382
  let fromTH = null;
396
383
  if (modifiedValues) {
@@ -403,6 +390,7 @@ class Border {
403
390
  let top = minTop - containerOffset.top - 1;
404
391
  let height = toOffset.top + (0, _element.outerHeight)(toTD) - minTop;
405
392
  if (this.isEntireRowSelected(fromColumn, toColumn)) {
393
+ const columnHeader = fromColumn;
406
394
  const modifiedValues = this.getDimensionsFromHeader('rows', fromRow, toRow, columnHeader, containerOffset);
407
395
  let fromTH = null;
408
396
  if (modifiedValues) {
@@ -412,7 +400,7 @@ class Border {
412
400
  fromTD = fromTH;
413
401
  }
414
402
  }
415
- const style = (0, _element.getComputedStyle)(fromTD, rootWindow);
403
+ const style = rootWindow.getComputedStyle(fromTD);
416
404
  if (parseInt(style.borderTopWidth, 10) > 0) {
417
405
  top += 1;
418
406
  height = height > 0 ? height - 1 : 0;
@@ -441,7 +429,7 @@ class Border {
441
429
  this.endStyle.display = 'block';
442
430
  let cornerVisibleSetting = this.settings.border.cornerVisible;
443
431
  cornerVisibleSetting = typeof cornerVisibleSetting === 'function' ? cornerVisibleSetting(this.settings.layerLevel) : cornerVisibleSetting;
444
- const hookResult = this.wot.getSetting('onModifyGetCellCoords', toRow, toColumn);
432
+ const hookResult = this.wot.getSetting('onModifyGetCellCoords', toRow, toColumn, false, 'render');
445
433
  let [checkRow, checkCol] = [toRow, toColumn];
446
434
  if (hookResult && Array.isArray(hookResult)) {
447
435
  [,, checkRow, checkCol] = hookResult;
@@ -449,9 +437,11 @@ class Border {
449
437
  if ((0, _browser.isMobileBrowser)() || !cornerVisibleSetting || this.isPartRange(checkRow, checkCol)) {
450
438
  this.cornerStyle.display = 'none';
451
439
  } else {
452
- this.cornerStyle.top = `${top + height + this.cornerCenterPointOffset - 1}px`;
453
- this.cornerStyle[inlinePosProperty] = `${inlineStartPos + width + this.cornerCenterPointOffset - 1}px`;
454
- this.cornerStyle.borderRightWidth = this.cornerDefaultStyle.borderWidth;
440
+ this.cornerStyle.top = `${top + height + this.cornerCenterPointOffset - this.cornerDefaultStyle.borderWidth}px`;
441
+ this.cornerStyle[inlinePosProperty] = `${inlineStartPos + width + this.cornerCenterPointOffset - this.cornerDefaultStyle.borderWidth}px`;
442
+ this.cornerStyle.borderRightWidth = `${this.cornerDefaultStyle.borderWidth}px`;
443
+ this.cornerStyle.borderLeftWidth = `${this.cornerDefaultStyle.borderWidth}px`;
444
+ this.cornerStyle.borderBottomWidth = `${this.cornerDefaultStyle.borderWidth}px`;
455
445
  this.cornerStyle.width = this.cornerDefaultStyle.width;
456
446
 
457
447
  // Hide the fill handle, so the possible further adjustments won't force unneeded scrollbars.
@@ -461,8 +451,12 @@ class Border {
461
451
  if (trimToWindow) {
462
452
  trimmingContainer = rootDocument.documentElement;
463
453
  }
464
- const cornerHalfWidth = parseInt(this.cornerDefaultStyle.width, 10) / 2;
465
- const cornerHalfHeight = parseInt(this.cornerDefaultStyle.height, 10) / 2;
454
+
455
+ // -1 was initially removed from the base position to compansate for the table border. We need to exclude it from
456
+ // the corner width.
457
+ const cornerBorderCompensation = parseInt(this.cornerDefaultStyle.borderWidth, 10) - 1;
458
+ const cornerHalfWidth = Math.ceil(parseInt(this.cornerDefaultStyle.width, 10) / 2);
459
+ const cornerHalfHeight = Math.ceil(parseInt(this.cornerDefaultStyle.height, 10) / 2);
466
460
  if (toColumn === this.wot.getSetting('totalColumns') - 1) {
467
461
  const toTdOffsetLeft = trimToWindow ? toTD.getBoundingClientRect().left : toTD.offsetLeft;
468
462
  let cornerOverlappingContainer = false;
@@ -475,7 +469,7 @@ class Border {
475
469
  cornerOverlappingContainer = cornerEdge >= (0, _element.innerWidth)(trimmingContainer);
476
470
  }
477
471
  if (cornerOverlappingContainer) {
478
- this.cornerStyle[inlinePosProperty] = `${Math.floor(inlineStartPos + width + this.cornerCenterPointOffset - cornerHalfWidth)}px`;
472
+ this.cornerStyle[inlinePosProperty] = `${Math.floor(inlineStartPos + width + this.cornerCenterPointOffset - cornerHalfWidth - cornerBorderCompensation)}px`;
479
473
  this.cornerStyle[isRtl ? 'borderLeftWidth' : 'borderRightWidth'] = 0;
480
474
  }
481
475
  }
@@ -484,7 +478,7 @@ class Border {
484
478
  const cornerBottomEdge = toTdOffsetTop + (0, _element.outerHeight)(toTD) + parseInt(this.cornerDefaultStyle.height, 10) / 2;
485
479
  const cornerOverlappingContainer = cornerBottomEdge >= (0, _element.innerHeight)(trimmingContainer);
486
480
  if (cornerOverlappingContainer) {
487
- this.cornerStyle.top = `${Math.floor(top + height + this.cornerCenterPointOffset - cornerHalfHeight)}px`;
481
+ this.cornerStyle.top = `${Math.floor(top + height + this.cornerCenterPointOffset - cornerHalfHeight - cornerBorderCompensation)}px`;
488
482
  this.cornerStyle.borderBottomWidth = 0;
489
483
  }
490
484
  }