handsontable 0.0.0-next-010265d-20231005 → 0.0.0-next-9379dd1-20231020

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of handsontable might be problematic. Click here for more details.

Files changed (414) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +50 -11
  3. package/3rdparty/walkontable/src/cell/coords.mjs +50 -11
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +38 -7
  6. package/3rdparty/walkontable/src/cell/range.mjs +38 -7
  7. package/3rdparty/walkontable/src/core/_base.js +9 -3
  8. package/3rdparty/walkontable/src/core/_base.mjs +9 -3
  9. package/3rdparty/walkontable/src/core/clone.js +2 -2
  10. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  11. package/3rdparty/walkontable/src/core/core.js +3 -2
  12. package/3rdparty/walkontable/src/core/core.mjs +3 -2
  13. package/3rdparty/walkontable/src/event.js +12 -10
  14. package/3rdparty/walkontable/src/event.mjs +12 -10
  15. package/3rdparty/walkontable/src/facade/core.js +2 -2
  16. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  17. package/3rdparty/walkontable/src/index.js +10 -2
  18. package/3rdparty/walkontable/src/index.mjs +2 -2
  19. package/3rdparty/walkontable/src/overlay/_base.js +13 -2
  20. package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
  21. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
  22. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
  23. package/3rdparty/walkontable/src/overlay/top.js +2 -6
  24. package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
  25. package/3rdparty/walkontable/src/renderer/cells.js +10 -0
  26. package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
  27. package/3rdparty/walkontable/src/renderer/columnHeaders.js +10 -0
  28. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +11 -1
  29. package/3rdparty/walkontable/src/renderer/rowHeaders.js +5 -0
  30. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +5 -0
  31. package/3rdparty/walkontable/src/renderer/rows.js +13 -0
  32. package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
  33. package/3rdparty/walkontable/src/renderer/table.js +9 -0
  34. package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
  35. package/3rdparty/walkontable/src/scroll.js +2 -0
  36. package/3rdparty/walkontable/src/scroll.mjs +2 -0
  37. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
  38. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  39. package/3rdparty/walkontable/src/selection/border/constants.js +16 -0
  40. package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
  41. package/3rdparty/walkontable/src/selection/constants.js +62 -0
  42. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  43. package/3rdparty/walkontable/src/selection/index.js +26 -0
  44. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  45. package/3rdparty/walkontable/src/selection/manager.js +274 -0
  46. package/3rdparty/walkontable/src/selection/manager.mjs +269 -0
  47. package/3rdparty/walkontable/src/selection/scanner.js +270 -0
  48. package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
  49. package/3rdparty/walkontable/src/selection/selection.js +101 -0
  50. package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
  51. package/3rdparty/walkontable/src/settings.js +13 -4
  52. package/3rdparty/walkontable/src/settings.mjs +13 -4
  53. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
  54. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  55. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
  56. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  57. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
  58. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  59. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
  60. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  61. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
  62. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  63. package/3rdparty/walkontable/src/table.js +19 -78
  64. package/3rdparty/walkontable/src/table.mjs +20 -79
  65. package/base.js +2 -2
  66. package/base.mjs +2 -2
  67. package/cellTypes/dateType/dateType.d.ts +3 -3
  68. package/cellTypes/dateType/dateType.js +2 -2
  69. package/cellTypes/dateType/dateType.mjs +2 -2
  70. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  71. package/cellTypes/handsontableType/handsontableType.js +2 -2
  72. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  73. package/cellTypes/index.d.ts +3 -0
  74. package/cellTypes/index.js +4 -0
  75. package/cellTypes/index.mjs +3 -1
  76. package/cellTypes/selectType/index.d.ts +1 -0
  77. package/cellTypes/selectType/index.js +6 -0
  78. package/cellTypes/selectType/index.mjs +1 -0
  79. package/cellTypes/selectType/selectType.d.ts +14 -0
  80. package/cellTypes/selectType/selectType.js +13 -0
  81. package/cellTypes/selectType/selectType.mjs +8 -0
  82. package/core/focusCatcher/focusDetector.js +63 -0
  83. package/core/focusCatcher/focusDetector.mjs +59 -0
  84. package/core/focusCatcher/index.js +142 -0
  85. package/core/focusCatcher/index.mjs +138 -0
  86. package/core/index.js +9 -0
  87. package/core/index.mjs +1 -0
  88. package/core.d.ts +9 -4
  89. package/core.js +285 -327
  90. package/core.mjs +285 -327
  91. package/dataMap/metaManager/metaSchema.js +65 -0
  92. package/dataMap/metaManager/metaSchema.mjs +65 -0
  93. package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
  94. package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
  95. package/dataMap/replaceData.js +5 -0
  96. package/dataMap/replaceData.mjs +5 -0
  97. package/dist/handsontable.css +40 -5
  98. package/dist/handsontable.full.css +40 -5
  99. package/dist/handsontable.full.js +11744 -6945
  100. package/dist/handsontable.full.min.css +4 -4
  101. package/dist/handsontable.full.min.js +141 -141
  102. package/dist/handsontable.js +14036 -9237
  103. package/dist/handsontable.min.css +3 -3
  104. package/dist/handsontable.min.js +21 -21
  105. package/dist/languages/all.js +6 -2
  106. package/dist/languages/all.min.js +1 -1
  107. package/dist/languages/en-US.js +3 -1
  108. package/dist/languages/en-US.min.js +1 -1
  109. package/dist/languages/pl-PL.js +3 -1
  110. package/dist/languages/pl-PL.min.js +1 -1
  111. package/editorManager.js +15 -87
  112. package/editorManager.mjs +16 -87
  113. package/editors/autocompleteEditor/autocompleteEditor.js +53 -2
  114. package/editors/autocompleteEditor/autocompleteEditor.mjs +54 -3
  115. package/editors/dateEditor/dateEditor.js +26 -7
  116. package/editors/dateEditor/dateEditor.mjs +27 -8
  117. package/editors/handsontableEditor/handsontableEditor.js +9 -1
  118. package/editors/handsontableEditor/handsontableEditor.mjs +10 -2
  119. package/editors/textEditor/textEditor.js +19 -27
  120. package/editors/textEditor/textEditor.mjs +22 -30
  121. package/focusManager.d.ts +12 -0
  122. package/focusManager.js +265 -0
  123. package/focusManager.mjs +261 -0
  124. package/helpers/a11y.js +79 -0
  125. package/helpers/a11y.mjs +38 -0
  126. package/helpers/dom/element.js +188 -9
  127. package/helpers/dom/element.mjs +182 -9
  128. package/helpers/mixed.js +1 -1
  129. package/helpers/mixed.mjs +1 -1
  130. package/helpers/number.d.ts +1 -0
  131. package/helpers/number.js +18 -0
  132. package/helpers/number.mjs +17 -0
  133. package/i18n/constants.js +7 -1
  134. package/i18n/constants.mjs +4 -1
  135. package/i18n/languages/en-US.js +3 -1
  136. package/i18n/languages/en-US.mjs +3 -1
  137. package/i18n/languages/pl-PL.js +3 -1
  138. package/i18n/languages/pl-PL.mjs +3 -1
  139. package/languages/all.js +6 -2
  140. package/languages/en-US.js +3 -1
  141. package/languages/en-US.mjs +3 -1
  142. package/languages/index.js +6 -2
  143. package/languages/pl-PL.js +3 -1
  144. package/languages/pl-PL.mjs +3 -1
  145. package/package.json +21 -1
  146. package/pluginHooks.d.ts +12 -1
  147. package/pluginHooks.js +152 -1
  148. package/pluginHooks.mjs +152 -1
  149. package/plugins/collapsibleColumns/collapsibleColumns.js +74 -4
  150. package/plugins/collapsibleColumns/collapsibleColumns.mjs +75 -5
  151. package/plugins/columnSorting/columnSorting.js +43 -0
  152. package/plugins/columnSorting/columnSorting.mjs +44 -3
  153. package/plugins/columnSorting/index.js +3 -1
  154. package/plugins/columnSorting/index.mjs +1 -1
  155. package/plugins/comments/commentEditor.js +1 -0
  156. package/plugins/comments/commentEditor.mjs +1 -0
  157. package/plugins/comments/comments.js +252 -189
  158. package/plugins/comments/comments.mjs +251 -190
  159. package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
  160. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  161. package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
  162. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
  163. package/plugins/comments/contextMenuItem/removeComment.js +38 -0
  164. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  165. package/plugins/contextMenu/commandExecutor.js +2 -3
  166. package/plugins/contextMenu/commandExecutor.mjs +2 -3
  167. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  168. package/plugins/contextMenu/contextMenu.js +75 -36
  169. package/plugins/contextMenu/contextMenu.mjs +74 -35
  170. package/plugins/contextMenu/itemsFactory.js +2 -3
  171. package/plugins/contextMenu/itemsFactory.mjs +3 -4
  172. package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
  173. package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
  174. package/plugins/contextMenu/menu/index.js +9 -0
  175. package/plugins/contextMenu/menu/index.mjs +1 -0
  176. package/plugins/contextMenu/{menu.js → menu/menu.js} +96 -308
  177. package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +97 -309
  178. package/plugins/contextMenu/menu/navigator.js +152 -0
  179. package/plugins/contextMenu/menu/navigator.mjs +148 -0
  180. package/plugins/contextMenu/menu/positioner.js +213 -0
  181. package/plugins/contextMenu/menu/positioner.mjs +209 -0
  182. package/plugins/contextMenu/menu/utils.js +177 -0
  183. package/plugins/contextMenu/menu/utils.mjs +163 -0
  184. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  185. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  186. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  187. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  188. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  189. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  190. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  191. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  192. package/plugins/contextMenu/{predefinedItems.js → predefinedItems/index.js} +14 -14
  193. package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
  194. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  195. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  196. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  197. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  198. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  199. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  200. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  201. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  202. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  203. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  204. package/plugins/contextMenu/utils.js +35 -151
  205. package/plugins/contextMenu/utils.mjs +35 -144
  206. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  207. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  208. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  209. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  210. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  211. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  212. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  213. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  214. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  215. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  216. package/plugins/copyPaste/copyPaste.js +127 -78
  217. package/plugins/copyPaste/copyPaste.mjs +128 -79
  218. package/plugins/customBorders/customBorders.js +23 -20
  219. package/plugins/customBorders/customBorders.mjs +24 -21
  220. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  221. package/plugins/dropdownMenu/dropdownMenu.js +97 -38
  222. package/plugins/dropdownMenu/dropdownMenu.mjs +96 -37
  223. package/plugins/filters/constants.mjs +1 -1
  224. package/plugins/filters/filters.js +31 -14
  225. package/plugins/filters/filters.mjs +31 -14
  226. package/plugins/filters/ui/select.js +3 -3
  227. package/plugins/filters/ui/select.mjs +2 -2
  228. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  229. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  230. package/plugins/manualColumnMove/manualColumnMove.js +3 -1
  231. package/plugins/manualColumnMove/manualColumnMove.mjs +3 -1
  232. package/plugins/mergeCells/mergeCells.js +5 -16
  233. package/plugins/mergeCells/mergeCells.mjs +5 -16
  234. package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
  235. package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
  236. package/plugins/nestedHeaders/nestedHeaders.js +240 -10
  237. package/plugins/nestedHeaders/nestedHeaders.mjs +241 -11
  238. package/plugins/nestedHeaders/stateManager/index.js +102 -3
  239. package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
  240. package/plugins/nestedRows/nestedRows.js +41 -0
  241. package/plugins/nestedRows/nestedRows.mjs +41 -0
  242. package/plugins/nestedRows/ui/headers.js +11 -0
  243. package/plugins/nestedRows/ui/headers.mjs +12 -1
  244. package/renderers/autocompleteRenderer/autocompleteRenderer.js +8 -0
  245. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
  246. package/renderers/baseRenderer/baseRenderer.js +17 -0
  247. package/renderers/baseRenderer/baseRenderer.mjs +18 -1
  248. package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
  249. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  250. package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
  251. package/renderers/dateRenderer/dateRenderer.js +29 -0
  252. package/renderers/dateRenderer/dateRenderer.mjs +24 -0
  253. package/renderers/dateRenderer/index.d.ts +1 -0
  254. package/renderers/dateRenderer/index.js +6 -0
  255. package/renderers/dateRenderer/index.mjs +1 -0
  256. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
  257. package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
  258. package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
  259. package/renderers/handsontableRenderer/index.d.ts +1 -0
  260. package/renderers/handsontableRenderer/index.js +6 -0
  261. package/renderers/handsontableRenderer/index.mjs +1 -0
  262. package/renderers/index.d.ts +9 -0
  263. package/renderers/selectRenderer/index.d.ts +1 -0
  264. package/renderers/selectRenderer/index.js +6 -0
  265. package/renderers/selectRenderer/index.mjs +1 -0
  266. package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
  267. package/renderers/selectRenderer/selectRenderer.js +27 -0
  268. package/renderers/selectRenderer/selectRenderer.mjs +22 -0
  269. package/selection/highlight/highlight.js +256 -71
  270. package/selection/highlight/highlight.mjs +250 -71
  271. package/selection/highlight/types/activeHeader.js +10 -8
  272. package/selection/highlight/types/activeHeader.mjs +10 -8
  273. package/selection/highlight/types/area.js +6 -18
  274. package/selection/highlight/types/area.mjs +6 -18
  275. package/selection/highlight/types/areaLayered.js +31 -0
  276. package/selection/highlight/types/areaLayered.mjs +26 -0
  277. package/selection/highlight/types/column.js +27 -0
  278. package/selection/highlight/types/column.mjs +22 -0
  279. package/selection/highlight/types/customSelection.js +7 -9
  280. package/selection/highlight/types/customSelection.mjs +7 -9
  281. package/selection/highlight/types/fill.js +5 -7
  282. package/selection/highlight/types/fill.mjs +5 -7
  283. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  284. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  285. package/selection/highlight/types/header.js +9 -18
  286. package/selection/highlight/types/header.mjs +9 -18
  287. package/selection/highlight/types/row.js +27 -0
  288. package/selection/highlight/types/row.mjs +22 -0
  289. package/selection/highlight/visualSelection.js +31 -27
  290. package/selection/highlight/visualSelection.mjs +31 -27
  291. package/selection/index.js +4 -7
  292. package/selection/index.mjs +2 -3
  293. package/selection/mouseEventHandler.js +7 -1
  294. package/selection/mouseEventHandler.mjs +7 -1
  295. package/selection/range.js +8 -8
  296. package/selection/range.mjs +8 -8
  297. package/selection/selection.js +321 -152
  298. package/selection/selection.mjs +318 -151
  299. package/selection/transformation.js +232 -90
  300. package/selection/transformation.mjs +232 -90
  301. package/selection/utils.js +15 -21
  302. package/selection/utils.mjs +16 -21
  303. package/settings.d.ts +4 -0
  304. package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
  305. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  306. package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
  307. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  308. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  309. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  310. package/shortcutContexts/commands/editor/index.js +16 -0
  311. package/shortcutContexts/commands/editor/index.mjs +12 -0
  312. package/shortcutContexts/commands/editor/open.js +27 -0
  313. package/shortcutContexts/commands/editor/open.mjs +23 -0
  314. package/shortcutContexts/commands/emptySelectedCells.js +11 -0
  315. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  316. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  317. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  318. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +25 -0
  319. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
  320. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  321. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  322. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  323. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  324. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  325. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  326. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  327. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  328. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
  329. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  330. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
  331. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  332. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
  333. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  334. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
  335. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  336. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
  337. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  338. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
  339. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  340. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  341. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  342. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  343. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  344. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +25 -0
  345. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
  346. package/shortcutContexts/commands/index.js +35 -0
  347. package/shortcutContexts/commands/index.mjs +31 -0
  348. package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
  349. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  350. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +33 -0
  351. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
  352. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  353. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  354. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
  355. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  356. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
  357. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  358. package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
  359. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  360. package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
  361. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  362. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
  363. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  364. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
  365. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  366. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
  367. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  368. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
  369. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  370. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
  371. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  372. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
  373. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  374. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
  375. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  376. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
  377. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  378. package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
  379. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  380. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +33 -0
  381. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
  382. package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
  383. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  384. package/shortcutContexts/commands/scrollToFocusedCell.js +35 -0
  385. package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
  386. package/shortcutContexts/commands/selectAll.js +12 -0
  387. package/shortcutContexts/commands/selectAll.mjs +8 -0
  388. package/shortcutContexts/constants.js +13 -0
  389. package/shortcutContexts/constants.mjs +8 -0
  390. package/shortcutContexts/editor.js +25 -0
  391. package/shortcutContexts/editor.mjs +21 -0
  392. package/shortcutContexts/grid.js +163 -0
  393. package/shortcutContexts/grid.mjs +159 -0
  394. package/shortcutContexts/index.js +24 -0
  395. package/shortcutContexts/index.mjs +11 -0
  396. package/shortcuts/context.js +20 -2
  397. package/shortcuts/context.mjs +20 -3
  398. package/shortcuts/manager.js +25 -7
  399. package/shortcuts/manager.mjs +26 -7
  400. package/shortcuts/recorder.js +3 -3
  401. package/shortcuts/recorder.mjs +3 -3
  402. package/shortcuts/utils.js +19 -5
  403. package/shortcuts/utils.mjs +18 -4
  404. package/tableView.js +111 -13
  405. package/tableView.mjs +112 -14
  406. package/3rdparty/walkontable/src/selection.js +0 -295
  407. package/3rdparty/walkontable/src/selection.mjs +0 -290
  408. package/plugins/contextMenu/predefinedItems.mjs +0 -68
  409. package/plugins/copyPaste/focusableElement.js +0 -186
  410. package/plugins/copyPaste/focusableElement.mjs +0 -180
  411. package/selection/highlight/constants.js +0 -15
  412. package/selection/highlight/constants.mjs +0 -6
  413. package/selection/highlight/types/index.js +0 -35
  414. package/selection/highlight/types/index.mjs +0 -31
@@ -0,0 +1,267 @@
1
+ import "core-js/modules/es.error.cause.js";
2
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
3
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
4
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
5
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
6
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
7
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
8
+ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
9
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
10
+ function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
11
+ /* eslint-disable no-continue */
12
+ import { addClass } from "../../../../helpers/dom/element.mjs";
13
+ /**
14
+ * Selection scanner module scans the rendered cells and headers and if it finds an intersection with
15
+ * the coordinates of the Selection class (highlight) it returns the DOM elements.
16
+ *
17
+ * @private
18
+ */
19
+ var _selection = /*#__PURE__*/new WeakMap();
20
+ var _activeOverlaysWot = /*#__PURE__*/new WeakMap();
21
+ var _scanCellsRange = /*#__PURE__*/new WeakSet();
22
+ export class SelectionScanner {
23
+ constructor() {
24
+ /**
25
+ * The method triggers a callback for each rendered cell.
26
+ *
27
+ * @param {function(number, number): void} callback The callback function to trigger.
28
+ */
29
+ _classPrivateMethodInitSpec(this, _scanCellsRange);
30
+ /**
31
+ * Active Selection instance to process.
32
+ *
33
+ * @type {Selection}
34
+ */
35
+ _classPrivateFieldInitSpec(this, _selection, {
36
+ writable: true,
37
+ value: void 0
38
+ });
39
+ /**
40
+ * The Walkontable instance that the scans depends on.
41
+ *
42
+ * @type {Walkontable}
43
+ */
44
+ _classPrivateFieldInitSpec(this, _activeOverlaysWot, {
45
+ writable: true,
46
+ value: void 0
47
+ });
48
+ }
49
+ /**
50
+ * Sets the Walkontable instance that will be taking into account while scanning the table.
51
+ *
52
+ * @param {Walkontable} activeOverlaysWot The Walkontable instance.
53
+ * @returns {SelectionScanner}
54
+ */
55
+ setActiveOverlay(activeOverlaysWot) {
56
+ _classPrivateFieldSet(this, _activeOverlaysWot, activeOverlaysWot);
57
+ return this;
58
+ }
59
+
60
+ /**
61
+ * Sets the Selection instance to process.
62
+ *
63
+ * @param {Selection} selection The Selection instance.
64
+ * @returns {SelectionScanner}
65
+ */
66
+ setActiveSelection(selection) {
67
+ _classPrivateFieldSet(this, _selection, selection);
68
+ return this;
69
+ }
70
+
71
+ /**
72
+ * Scans the rendered table with selection and returns elements that intersects
73
+ * with selection coordinates.
74
+ *
75
+ * @returns {HTMLTableElement[]}
76
+ */
77
+ scan() {
78
+ const selectionType = _classPrivateFieldGet(this, _selection).settings.selectionType;
79
+ const elements = new Set();
80
+
81
+ // TODO(improvement): use heuristics from coords to detect what type of scan
82
+ // the Selection needs instead of using `selectionType` property.
83
+ if (selectionType === 'active-header') {
84
+ this.scanColumnsInHeadersRange(element => elements.add(element));
85
+ this.scanRowsInHeadersRange(element => elements.add(element));
86
+ } else if (selectionType === 'area') {
87
+ this.scanCellsRange(element => elements.add(element));
88
+ } else if (selectionType === 'focus') {
89
+ this.scanColumnsInHeadersRange(element => elements.add(element));
90
+ this.scanRowsInHeadersRange(element => elements.add(element));
91
+ this.scanCellsRange(element => elements.add(element));
92
+ } else if (selectionType === 'fill') {
93
+ this.scanCellsRange(element => elements.add(element));
94
+ } else if (selectionType === 'header') {
95
+ this.scanColumnsInHeadersRange(element => elements.add(element));
96
+ this.scanRowsInHeadersRange(element => elements.add(element));
97
+ } else if (selectionType === 'row') {
98
+ this.scanRowsInHeadersRange(element => elements.add(element));
99
+ this.scanRowsInCellsRange(element => elements.add(element));
100
+ } else if (selectionType === 'column') {
101
+ this.scanColumnsInHeadersRange(element => elements.add(element));
102
+ this.scanColumnsInCellsRange(element => elements.add(element));
103
+ }
104
+ return elements;
105
+ }
106
+
107
+ /**
108
+ * Scans the table (only rendered headers) and collect all column headers (TH) that match
109
+ * the coordinates passed in the Selection instance.
110
+ *
111
+ * @param {function(HTMLTableElement): void} callback The callback function to trigger.
112
+ */
113
+ scanColumnsInHeadersRange(callback) {
114
+ const [topRow, topColumn, bottomRow, bottomColumn] = _classPrivateFieldGet(this, _selection).getCorners();
115
+ const {
116
+ wtTable
117
+ } = _classPrivateFieldGet(this, _activeOverlaysWot);
118
+ const renderedColumnsCount = wtTable.getRenderedColumnsCount();
119
+ const columnHeadersCount = wtTable.getColumnHeadersCount();
120
+ let cursor = 0;
121
+ for (let column = -wtTable.getRowHeadersCount(); column < renderedColumnsCount; column++) {
122
+ const sourceColumn = wtTable.columnFilter.renderedToSource(column);
123
+ if (sourceColumn < topColumn || sourceColumn > bottomColumn) {
124
+ continue;
125
+ }
126
+ for (let headerLevel = -columnHeadersCount; headerLevel < 0; headerLevel++) {
127
+ if (headerLevel < topRow || headerLevel > bottomRow) {
128
+ continue;
129
+ }
130
+ const positiveBasedHeaderLevel = headerLevel + columnHeadersCount;
131
+ let TH = wtTable.getColumnHeader(sourceColumn, positiveBasedHeaderLevel);
132
+ const newSourceCol = _classPrivateFieldGet(this, _activeOverlaysWot).getSetting('onBeforeHighlightingColumnHeader', sourceColumn, positiveBasedHeaderLevel, {
133
+ selectionType: _classPrivateFieldGet(this, _selection).settings.selectionType,
134
+ columnCursor: cursor,
135
+ selectionWidth: bottomColumn - topColumn + 1
136
+ });
137
+ if (newSourceCol === null) {
138
+ continue;
139
+ }
140
+ if (newSourceCol !== sourceColumn) {
141
+ TH = wtTable.getColumnHeader(newSourceCol, positiveBasedHeaderLevel);
142
+ }
143
+ callback(TH);
144
+ }
145
+ cursor += 1;
146
+ }
147
+ }
148
+
149
+ /**
150
+ * Scans the table (only rendered headers) and collect all row headers (TH) that match
151
+ * the coordinates passed in the Selection instance.
152
+ *
153
+ * @param {function(HTMLTableElement): void} callback The callback function to trigger.
154
+ */
155
+ scanRowsInHeadersRange(callback) {
156
+ const [topRow, topColumn, bottomRow, bottomColumn] = _classPrivateFieldGet(this, _selection).getCorners();
157
+ const {
158
+ wtTable
159
+ } = _classPrivateFieldGet(this, _activeOverlaysWot);
160
+ const renderedRowsCount = wtTable.getRenderedRowsCount();
161
+ const rowHeadersCount = wtTable.getRowHeadersCount();
162
+ let cursor = 0;
163
+ for (let row = -wtTable.getColumnHeadersCount(); row < renderedRowsCount; row++) {
164
+ const sourceRow = wtTable.rowFilter.renderedToSource(row);
165
+ if (sourceRow < topRow || sourceRow > bottomRow) {
166
+ continue;
167
+ }
168
+ for (let headerLevel = -rowHeadersCount; headerLevel < 0; headerLevel++) {
169
+ if (headerLevel < topColumn || headerLevel > bottomColumn) {
170
+ continue;
171
+ }
172
+ const positiveBasedHeaderLevel = headerLevel + rowHeadersCount;
173
+ let TH = wtTable.getRowHeader(sourceRow, positiveBasedHeaderLevel);
174
+ const newSourceRow = _classPrivateFieldGet(this, _activeOverlaysWot).getSetting('onBeforeHighlightingRowHeader', sourceRow, positiveBasedHeaderLevel, {
175
+ selectionType: _classPrivateFieldGet(this, _selection).settings.selectionType,
176
+ rowCursor: cursor,
177
+ selectionHeight: bottomRow - topRow + 1
178
+ });
179
+ if (newSourceRow === null) {
180
+ continue;
181
+ }
182
+ if (newSourceRow !== sourceRow) {
183
+ TH = wtTable.getRowHeader(newSourceRow, positiveBasedHeaderLevel);
184
+ }
185
+ callback(TH);
186
+ }
187
+ cursor += 1;
188
+ }
189
+ }
190
+
191
+ /**
192
+ * Scans the table (only rendered cells) and collect all cells (TR) that match
193
+ * the coordinates passed in the Selection instance.
194
+ *
195
+ * @param {function(HTMLTableElement): void} callback The callback function to trigger.
196
+ */
197
+ scanCellsRange(callback) {
198
+ const [topRow, topColumn, bottomRow, bottomColumn] = _classPrivateFieldGet(this, _selection).getCorners();
199
+ const {
200
+ wtTable
201
+ } = _classPrivateFieldGet(this, _activeOverlaysWot);
202
+ _classPrivateMethodGet(this, _scanCellsRange, _scanCellsRange2).call(this, (sourceRow, sourceColumn) => {
203
+ if (sourceRow >= topRow && sourceRow <= bottomRow && sourceColumn >= topColumn && sourceColumn <= bottomColumn) {
204
+ const cell = wtTable.getCell(_classPrivateFieldGet(this, _activeOverlaysWot).createCellCoords(sourceRow, sourceColumn));
205
+
206
+ // support for old API
207
+ const additionalSelectionClass = _classPrivateFieldGet(this, _activeOverlaysWot).getSetting('onAfterDrawSelection', sourceRow, sourceColumn, _classPrivateFieldGet(this, _selection).settings.layerLevel);
208
+ if (typeof additionalSelectionClass === 'string') {
209
+ addClass(cell, additionalSelectionClass);
210
+ }
211
+ callback(cell);
212
+ }
213
+ });
214
+ }
215
+
216
+ /**
217
+ * Scans the table (only rendered cells) and collects all cells (TR) that match the coordinates
218
+ * passed in the Selection instance but only for the X axis (rows).
219
+ *
220
+ * @param {function(HTMLTableElement): void} callback The callback function to trigger.
221
+ */
222
+ scanRowsInCellsRange(callback) {
223
+ // eslint-disable-next-line comma-spacing
224
+ const [topRow,, bottomRow] = _classPrivateFieldGet(this, _selection).getCorners();
225
+ const {
226
+ wtTable
227
+ } = _classPrivateFieldGet(this, _activeOverlaysWot);
228
+ _classPrivateMethodGet(this, _scanCellsRange, _scanCellsRange2).call(this, (sourceRow, sourceColumn) => {
229
+ if (sourceRow >= topRow && sourceRow <= bottomRow) {
230
+ const cell = wtTable.getCell(_classPrivateFieldGet(this, _activeOverlaysWot).createCellCoords(sourceRow, sourceColumn));
231
+ callback(cell);
232
+ }
233
+ });
234
+ }
235
+
236
+ /**
237
+ * Scans the table (only rendered cells) and collects all cells (TR) that match the coordinates
238
+ * passed in the Selection instance but only for the Y axis (columns).
239
+ *
240
+ * @param {function(HTMLTableElement): void} callback The callback function to trigger.
241
+ */
242
+ scanColumnsInCellsRange(callback) {
243
+ const [, topColumn,, bottomColumn] = _classPrivateFieldGet(this, _selection).getCorners();
244
+ const {
245
+ wtTable
246
+ } = _classPrivateFieldGet(this, _activeOverlaysWot);
247
+ _classPrivateMethodGet(this, _scanCellsRange, _scanCellsRange2).call(this, (sourceRow, sourceColumn) => {
248
+ if (sourceColumn >= topColumn && sourceColumn <= bottomColumn) {
249
+ const cell = wtTable.getCell(_classPrivateFieldGet(this, _activeOverlaysWot).createCellCoords(sourceRow, sourceColumn));
250
+ callback(cell);
251
+ }
252
+ });
253
+ }
254
+ }
255
+ function _scanCellsRange2(callback) {
256
+ const {
257
+ wtTable
258
+ } = _classPrivateFieldGet(this, _activeOverlaysWot);
259
+ const renderedRowsCount = wtTable.getRenderedRowsCount();
260
+ const renderedColumnsCount = wtTable.getRenderedColumnsCount();
261
+ for (let row = 0; row < renderedRowsCount; row += 1) {
262
+ const sourceRow = wtTable.rowFilter.renderedToSource(row);
263
+ for (let column = 0; column < renderedColumnsCount; column += 1) {
264
+ callback(sourceRow, wtTable.columnFilter.renderedToSource(column));
265
+ }
266
+ }
267
+ }
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ var _object = require("../../../../helpers/object");
5
+ var _localHooks = _interopRequireDefault(require("../../../../mixins/localHooks"));
6
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7
+ /**
8
+ * The Selection class allows highlighting (by applying CSS class) the table's cells or headers
9
+ * and setting up the borders if defined in the settings.
10
+ *
11
+ * The Selection coordinates may point to the cells (positive numbers) or headers (negative numbers).
12
+ *
13
+ * @class Selection
14
+ */
15
+ class Selection {
16
+ /**
17
+ * @param {object} settings The selection settings object. @todo type.
18
+ * @param {CellRange} cellRange The cell range instance.
19
+ */
20
+ constructor(settings, cellRange) {
21
+ this.settings = settings;
22
+ this.cellRange = cellRange || null;
23
+ }
24
+
25
+ /**
26
+ * Checks if selection is empty.
27
+ *
28
+ * @returns {boolean}
29
+ */
30
+ isEmpty() {
31
+ return this.cellRange === null;
32
+ }
33
+
34
+ /**
35
+ * Adds a cell coords to the selection.
36
+ *
37
+ * @param {CellCoords} coords The cell coordinates to add.
38
+ * @returns {Selection}
39
+ */
40
+ add(coords) {
41
+ if (this.isEmpty()) {
42
+ this.cellRange = this.settings.createCellRange(coords);
43
+ } else {
44
+ this.cellRange.expand(coords);
45
+ }
46
+ return this;
47
+ }
48
+
49
+ /**
50
+ * If selection range from or to property equals oldCoords, replace it with newCoords. Return boolean
51
+ * information about success.
52
+ *
53
+ * @param {CellCoords} oldCoords An old cell coordinates to replace.
54
+ * @param {CellCoords} newCoords The new cell coordinates.
55
+ * @returns {boolean}
56
+ */
57
+ replace(oldCoords, newCoords) {
58
+ if (!this.isEmpty()) {
59
+ if (this.cellRange.from.isEqual(oldCoords)) {
60
+ this.cellRange.from = newCoords;
61
+ return true;
62
+ }
63
+ if (this.cellRange.to.isEqual(oldCoords)) {
64
+ this.cellRange.to = newCoords;
65
+ return true;
66
+ }
67
+ }
68
+ return false;
69
+ }
70
+
71
+ /**
72
+ * Clears selection.
73
+ *
74
+ * @returns {Selection}
75
+ */
76
+ clear() {
77
+ this.cellRange = null;
78
+ return this;
79
+ }
80
+
81
+ /**
82
+ * Returns the top left (or top right in RTL) and bottom right (or bottom left in RTL) selection coordinates.
83
+ *
84
+ * @returns {number[]} Returns array of coordinates for example `[1, 1, 5, 5]`.
85
+ */
86
+ getCorners() {
87
+ const topStart = this.cellRange.getOuterTopStartCorner();
88
+ const bottomEnd = this.cellRange.getOuterBottomEndCorner();
89
+ return [topStart.row, topStart.col, bottomEnd.row, bottomEnd.col];
90
+ }
91
+
92
+ /**
93
+ * Destroys the instance.
94
+ */
95
+ destroy() {
96
+ this.runLocalHooks('destroy');
97
+ }
98
+ }
99
+ (0, _object.mixin)(Selection, _localHooks.default);
100
+ var _default = Selection;
101
+ exports.default = _default;
@@ -0,0 +1,96 @@
1
+ import { mixin } from "../../../../helpers/object.mjs";
2
+ import localHooks from "../../../../mixins/localHooks.mjs";
3
+ /**
4
+ * The Selection class allows highlighting (by applying CSS class) the table's cells or headers
5
+ * and setting up the borders if defined in the settings.
6
+ *
7
+ * The Selection coordinates may point to the cells (positive numbers) or headers (negative numbers).
8
+ *
9
+ * @class Selection
10
+ */
11
+ class Selection {
12
+ /**
13
+ * @param {object} settings The selection settings object. @todo type.
14
+ * @param {CellRange} cellRange The cell range instance.
15
+ */
16
+ constructor(settings, cellRange) {
17
+ this.settings = settings;
18
+ this.cellRange = cellRange || null;
19
+ }
20
+
21
+ /**
22
+ * Checks if selection is empty.
23
+ *
24
+ * @returns {boolean}
25
+ */
26
+ isEmpty() {
27
+ return this.cellRange === null;
28
+ }
29
+
30
+ /**
31
+ * Adds a cell coords to the selection.
32
+ *
33
+ * @param {CellCoords} coords The cell coordinates to add.
34
+ * @returns {Selection}
35
+ */
36
+ add(coords) {
37
+ if (this.isEmpty()) {
38
+ this.cellRange = this.settings.createCellRange(coords);
39
+ } else {
40
+ this.cellRange.expand(coords);
41
+ }
42
+ return this;
43
+ }
44
+
45
+ /**
46
+ * If selection range from or to property equals oldCoords, replace it with newCoords. Return boolean
47
+ * information about success.
48
+ *
49
+ * @param {CellCoords} oldCoords An old cell coordinates to replace.
50
+ * @param {CellCoords} newCoords The new cell coordinates.
51
+ * @returns {boolean}
52
+ */
53
+ replace(oldCoords, newCoords) {
54
+ if (!this.isEmpty()) {
55
+ if (this.cellRange.from.isEqual(oldCoords)) {
56
+ this.cellRange.from = newCoords;
57
+ return true;
58
+ }
59
+ if (this.cellRange.to.isEqual(oldCoords)) {
60
+ this.cellRange.to = newCoords;
61
+ return true;
62
+ }
63
+ }
64
+ return false;
65
+ }
66
+
67
+ /**
68
+ * Clears selection.
69
+ *
70
+ * @returns {Selection}
71
+ */
72
+ clear() {
73
+ this.cellRange = null;
74
+ return this;
75
+ }
76
+
77
+ /**
78
+ * Returns the top left (or top right in RTL) and bottom right (or bottom left in RTL) selection coordinates.
79
+ *
80
+ * @returns {number[]} Returns array of coordinates for example `[1, 1, 5, 5]`.
81
+ */
82
+ getCorners() {
83
+ const topStart = this.cellRange.getOuterTopStartCorner();
84
+ const bottomEnd = this.cellRange.getOuterBottomEndCorner();
85
+ return [topStart.row, topStart.col, bottomEnd.row, bottomEnd.col];
86
+ }
87
+
88
+ /**
89
+ * Destroys the instance.
90
+ */
91
+ destroy() {
92
+ this.runLocalHooks('destroy');
93
+ }
94
+ }
95
+ mixin(Selection, localHooks);
96
+ export default Selection;
@@ -12,6 +12,7 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
12
12
  * @typedef SettingsPure
13
13
  *
14
14
  * @property {Option} facade @todo desc.
15
+ * @property {Option} ariaTags Option `ariaTags`.
15
16
  * @property {Option} cellRenderer Option `cellRenderer`.
16
17
  * @property {Option} columnHeaders Option `columnHeaders`.
17
18
  * @property {Option} columnWidth Option `columnWidth`.
@@ -64,6 +65,8 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
64
65
  * @property {?Option} onDraw Option `onDraw`.
65
66
  * @property {?Option} onModifyGetCellCoords Option `onModifyGetCellCoords`.
66
67
  * @property {?Option} onModifyRowHeaderWidth Option `onModifyRowHeaderWidth`.
68
+ * @property {?Option} onBeforeViewportScrollHorizontally Option `onBeforeViewportScrollHorizontally`.
69
+ * @property {?Option} onBeforeViewportScrollVertically Option `onBeforeViewportScrollVertically`.
67
70
  * @property {?Option} onScrollHorizontally Option `onScrollHorizontally`.
68
71
  * @property {?Option} onScrollVertically Option `onScrollVertically`.
69
72
  * @property {?Option} onWindowResize Option `onWindowResize`.
@@ -190,7 +193,7 @@ class Settings {
190
193
  onCellMouseOver: null,
191
194
  onCellMouseOut: null,
192
195
  onCellMouseUp: null,
193
- // onCellMouseOut: null,
196
+ // onCellMouseOut: null,
194
197
  onCellDblClick: null,
195
198
  onCellCornerMouseDown: null,
196
199
  onCellCornerDblClick: null,
@@ -199,8 +202,13 @@ class Settings {
199
202
  onBeforeRemoveCellClassNames: null,
200
203
  onAfterDrawSelection: null,
201
204
  onBeforeDrawBorders: null,
202
- onScrollVertically: null,
205
+ // viewport scroll hooks
206
+ onBeforeViewportScrollHorizontally: column => column,
207
+ onBeforeViewportScrollVertically: row => row,
208
+ // native scroll hooks
203
209
  onScrollHorizontally: null,
210
+ onScrollVertically: null,
211
+ //
204
212
  onBeforeTouchScroll: null,
205
213
  onAfterMomentumScroll: null,
206
214
  onBeforeStretchingColumnWidth: width => width,
@@ -215,14 +223,15 @@ class Settings {
215
223
  rowHeaderWidth: null,
216
224
  columnHeaderHeight: null,
217
225
  headerClassName: null,
218
- rtlMode: false
226
+ rtlMode: false,
227
+ ariaTags: true
219
228
  };
220
229
  }
221
230
 
222
231
  /**
223
232
  * Update settings.
224
233
  *
225
- * @param {object} settings The singular settings to update or if passed as object to merge with.
234
+ * @param {object|string} settings The singular settings to update or if passed as object to merge with.
226
235
  * @param {*} value The value to set if the first argument is passed as string.
227
236
  * @returns {Settings}
228
237
  */
@@ -9,6 +9,7 @@ import { objectEach } from "../../../helpers/object.mjs";
9
9
  * @typedef SettingsPure
10
10
  *
11
11
  * @property {Option} facade @todo desc.
12
+ * @property {Option} ariaTags Option `ariaTags`.
12
13
  * @property {Option} cellRenderer Option `cellRenderer`.
13
14
  * @property {Option} columnHeaders Option `columnHeaders`.
14
15
  * @property {Option} columnWidth Option `columnWidth`.
@@ -61,6 +62,8 @@ import { objectEach } from "../../../helpers/object.mjs";
61
62
  * @property {?Option} onDraw Option `onDraw`.
62
63
  * @property {?Option} onModifyGetCellCoords Option `onModifyGetCellCoords`.
63
64
  * @property {?Option} onModifyRowHeaderWidth Option `onModifyRowHeaderWidth`.
65
+ * @property {?Option} onBeforeViewportScrollHorizontally Option `onBeforeViewportScrollHorizontally`.
66
+ * @property {?Option} onBeforeViewportScrollVertically Option `onBeforeViewportScrollVertically`.
64
67
  * @property {?Option} onScrollHorizontally Option `onScrollHorizontally`.
65
68
  * @property {?Option} onScrollVertically Option `onScrollVertically`.
66
69
  * @property {?Option} onWindowResize Option `onWindowResize`.
@@ -186,7 +189,7 @@ export default class Settings {
186
189
  onCellMouseOver: null,
187
190
  onCellMouseOut: null,
188
191
  onCellMouseUp: null,
189
- // onCellMouseOut: null,
192
+ // onCellMouseOut: null,
190
193
  onCellDblClick: null,
191
194
  onCellCornerMouseDown: null,
192
195
  onCellCornerDblClick: null,
@@ -195,8 +198,13 @@ export default class Settings {
195
198
  onBeforeRemoveCellClassNames: null,
196
199
  onAfterDrawSelection: null,
197
200
  onBeforeDrawBorders: null,
198
- onScrollVertically: null,
201
+ // viewport scroll hooks
202
+ onBeforeViewportScrollHorizontally: column => column,
203
+ onBeforeViewportScrollVertically: row => row,
204
+ // native scroll hooks
199
205
  onScrollHorizontally: null,
206
+ onScrollVertically: null,
207
+ //
200
208
  onBeforeTouchScroll: null,
201
209
  onAfterMomentumScroll: null,
202
210
  onBeforeStretchingColumnWidth: width => width,
@@ -211,14 +219,15 @@ export default class Settings {
211
219
  rowHeaderWidth: null,
212
220
  columnHeaderHeight: null,
213
221
  headerClassName: null,
214
- rtlMode: false
222
+ rtlMode: false,
223
+ ariaTags: true
215
224
  };
216
225
  }
217
226
 
218
227
  /**
219
228
  * Update settings.
220
229
  *
221
- * @param {object} settings The singular settings to update or if passed as object to merge with.
230
+ * @param {object|string} settings The singular settings to update or if passed as object to merge with.
222
231
  * @param {*} value The value to set if the first argument is passed as string.
223
232
  * @returns {Settings}
224
233
  */
@@ -82,6 +82,15 @@ const calculatedColumns = {
82
82
  */
83
83
  getVisibleColumnsCount() {
84
84
  return this.dataAccessObject.countColumnsVisible;
85
+ },
86
+ /**
87
+ * Get the number of rendered row headers.
88
+ *
89
+ * @returns {number}
90
+ * @this Table
91
+ */
92
+ getRowHeadersCount() {
93
+ return this.dataAccessObject.rowHeaders.length;
85
94
  }
86
95
  };
87
96
  (0, _object.defineGetter)(calculatedColumns, 'MIXIN_NAME', MIXIN_NAME, {
@@ -79,6 +79,15 @@ const calculatedColumns = {
79
79
  */
80
80
  getVisibleColumnsCount() {
81
81
  return this.dataAccessObject.countColumnsVisible;
82
+ },
83
+ /**
84
+ * Get the number of rendered row headers.
85
+ *
86
+ * @returns {number}
87
+ * @this Table
88
+ */
89
+ getRowHeadersCount() {
90
+ return this.dataAccessObject.rowHeaders.length;
82
91
  }
83
92
  };
84
93
  defineGetter(calculatedColumns, 'MIXIN_NAME', MIXIN_NAME, {
@@ -82,6 +82,15 @@ const calculatedRows = {
82
82
  */
83
83
  getVisibleRowsCount() {
84
84
  return this.dataAccessObject.countRowsVisible;
85
+ },
86
+ /**
87
+ * Get the number of rendered column headers.
88
+ *
89
+ * @returns {number}
90
+ * @this Table
91
+ */
92
+ getColumnHeadersCount() {
93
+ return this.dataAccessObject.columnHeaders.length;
85
94
  }
86
95
  };
87
96
  (0, _object.defineGetter)(calculatedRows, 'MIXIN_NAME', MIXIN_NAME, {
@@ -79,6 +79,15 @@ const calculatedRows = {
79
79
  */
80
80
  getVisibleRowsCount() {
81
81
  return this.dataAccessObject.countRowsVisible;
82
+ },
83
+ /**
84
+ * Get the number of rendered column headers.
85
+ *
86
+ * @returns {number}
87
+ * @this Table
88
+ */
89
+ getColumnHeadersCount() {
90
+ return this.dataAccessObject.columnHeaders.length;
82
91
  }
83
92
  };
84
93
  defineGetter(calculatedRows, 'MIXIN_NAME', MIXIN_NAME, {
@@ -74,6 +74,15 @@ const stickyColumnsStart = {
74
74
  */
75
75
  getVisibleColumnsCount() {
76
76
  return this.getRenderedColumnsCount();
77
+ },
78
+ /**
79
+ * Get the number of rendered row headers.
80
+ *
81
+ * @returns {number}
82
+ * @this Table
83
+ */
84
+ getRowHeadersCount() {
85
+ return this.dataAccessObject.rowHeaders.length;
77
86
  }
78
87
  };
79
88
  (0, _object.defineGetter)(stickyColumnsStart, 'MIXIN_NAME', MIXIN_NAME, {
@@ -71,6 +71,15 @@ const stickyColumnsStart = {
71
71
  */
72
72
  getVisibleColumnsCount() {
73
73
  return this.getRenderedColumnsCount();
74
+ },
75
+ /**
76
+ * Get the number of rendered row headers.
77
+ *
78
+ * @returns {number}
79
+ * @this Table
80
+ */
81
+ getRowHeadersCount() {
82
+ return this.dataAccessObject.rowHeaders.length;
74
83
  }
75
84
  };
76
85
  defineGetter(stickyColumnsStart, 'MIXIN_NAME', MIXIN_NAME, {