handsontable 14.6.1-next-689aaa6-20241016 → 15.0.0-next-4472a60-20241203

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