handsontable 0.0.0-next-b0a4ea2-20231024 → 0.0.0-next-9059914-20231025

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 (446) hide show
  1. package/3rdparty/walkontable/src/{selection/border/border.js → border.js} +12 -7
  2. package/3rdparty/walkontable/src/{selection/border/border.mjs → border.mjs} +12 -7
  3. package/3rdparty/walkontable/src/cell/coords.d.ts +1 -6
  4. package/3rdparty/walkontable/src/cell/coords.js +11 -50
  5. package/3rdparty/walkontable/src/cell/coords.mjs +11 -50
  6. package/3rdparty/walkontable/src/cell/range.d.ts +2 -9
  7. package/3rdparty/walkontable/src/cell/range.js +7 -38
  8. package/3rdparty/walkontable/src/cell/range.mjs +7 -38
  9. package/3rdparty/walkontable/src/core/_base.js +3 -9
  10. package/3rdparty/walkontable/src/core/_base.mjs +3 -9
  11. package/3rdparty/walkontable/src/core/clone.js +2 -2
  12. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  13. package/3rdparty/walkontable/src/core/core.js +2 -3
  14. package/3rdparty/walkontable/src/core/core.mjs +2 -3
  15. package/3rdparty/walkontable/src/event.js +10 -12
  16. package/3rdparty/walkontable/src/event.mjs +10 -12
  17. package/3rdparty/walkontable/src/facade/core.js +2 -2
  18. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  19. package/3rdparty/walkontable/src/index.js +2 -10
  20. package/3rdparty/walkontable/src/index.mjs +2 -2
  21. package/3rdparty/walkontable/src/overlay/_base.js +2 -13
  22. package/3rdparty/walkontable/src/overlay/_base.mjs +3 -14
  23. package/3rdparty/walkontable/src/overlay/inlineStart.js +6 -2
  24. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +6 -2
  25. package/3rdparty/walkontable/src/overlay/top.js +6 -2
  26. package/3rdparty/walkontable/src/overlay/top.mjs +6 -2
  27. package/3rdparty/walkontable/src/renderer/cells.js +0 -10
  28. package/3rdparty/walkontable/src/renderer/cells.mjs +1 -11
  29. package/3rdparty/walkontable/src/renderer/columnHeaders.js +0 -10
  30. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +1 -11
  31. package/3rdparty/walkontable/src/renderer/rowHeaders.js +0 -5
  32. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +0 -5
  33. package/3rdparty/walkontable/src/renderer/rows.js +0 -13
  34. package/3rdparty/walkontable/src/renderer/rows.mjs +0 -13
  35. package/3rdparty/walkontable/src/renderer/table.js +0 -9
  36. package/3rdparty/walkontable/src/renderer/table.mjs +0 -9
  37. package/3rdparty/walkontable/src/scroll.js +0 -2
  38. package/3rdparty/walkontable/src/scroll.mjs +0 -2
  39. package/3rdparty/walkontable/src/selection.js +295 -0
  40. package/3rdparty/walkontable/src/selection.mjs +290 -0
  41. package/3rdparty/walkontable/src/settings.js +4 -13
  42. package/3rdparty/walkontable/src/settings.mjs +4 -13
  43. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +0 -9
  44. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +0 -9
  45. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +0 -9
  46. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +0 -9
  47. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +0 -9
  48. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +0 -9
  49. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +0 -9
  50. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +0 -9
  51. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +0 -9
  52. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +0 -9
  53. package/3rdparty/walkontable/src/table.js +78 -19
  54. package/3rdparty/walkontable/src/table.mjs +79 -20
  55. package/base.js +2 -2
  56. package/base.mjs +2 -2
  57. package/cellTypes/dateType/dateType.d.ts +3 -3
  58. package/cellTypes/dateType/dateType.js +2 -2
  59. package/cellTypes/dateType/dateType.mjs +2 -2
  60. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  61. package/cellTypes/handsontableType/handsontableType.js +2 -2
  62. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  63. package/cellTypes/index.d.ts +0 -3
  64. package/cellTypes/index.js +0 -4
  65. package/cellTypes/index.mjs +1 -3
  66. package/core.d.ts +4 -9
  67. package/core.js +327 -285
  68. package/core.mjs +327 -285
  69. package/dataMap/metaManager/metaSchema.js +0 -65
  70. package/dataMap/metaManager/metaSchema.mjs +0 -65
  71. package/dataMap/metaManager/mods/extendMetaProperties.js +1 -7
  72. package/dataMap/metaManager/mods/extendMetaProperties.mjs +1 -7
  73. package/dataMap/replaceData.js +0 -5
  74. package/dataMap/replaceData.mjs +0 -5
  75. package/dist/handsontable.css +15 -51
  76. package/dist/handsontable.full.css +15 -51
  77. package/dist/handsontable.full.js +8668 -14188
  78. package/dist/handsontable.full.min.css +7 -7
  79. package/dist/handsontable.full.min.js +136 -136
  80. package/dist/handsontable.js +22829 -28349
  81. package/dist/handsontable.min.css +6 -6
  82. package/dist/handsontable.min.js +24 -24
  83. package/dist/languages/all.js +2 -6
  84. package/dist/languages/all.min.js +1 -1
  85. package/dist/languages/en-US.js +1 -3
  86. package/dist/languages/en-US.min.js +1 -1
  87. package/dist/languages/pl-PL.js +1 -3
  88. package/dist/languages/pl-PL.min.js +1 -1
  89. package/editorManager.js +87 -15
  90. package/editorManager.mjs +87 -16
  91. package/editors/autocompleteEditor/autocompleteEditor.js +2 -53
  92. package/editors/autocompleteEditor/autocompleteEditor.mjs +3 -54
  93. package/editors/dateEditor/dateEditor.js +7 -26
  94. package/editors/dateEditor/dateEditor.mjs +8 -27
  95. package/editors/handsontableEditor/handsontableEditor.js +1 -9
  96. package/editors/handsontableEditor/handsontableEditor.mjs +2 -10
  97. package/editors/textEditor/textEditor.js +27 -19
  98. package/editors/textEditor/textEditor.mjs +30 -22
  99. package/helpers/dom/element.js +9 -188
  100. package/helpers/dom/element.mjs +9 -182
  101. package/helpers/mixed.js +1 -1
  102. package/helpers/mixed.mjs +1 -1
  103. package/helpers/number.d.ts +0 -1
  104. package/helpers/number.js +0 -18
  105. package/helpers/number.mjs +0 -17
  106. package/i18n/constants.js +1 -7
  107. package/i18n/constants.mjs +1 -4
  108. package/i18n/languages/en-US.js +1 -3
  109. package/i18n/languages/en-US.mjs +1 -3
  110. package/i18n/languages/pl-PL.js +1 -3
  111. package/i18n/languages/pl-PL.mjs +1 -3
  112. package/languages/all.js +2 -6
  113. package/languages/en-US.js +1 -3
  114. package/languages/en-US.mjs +1 -3
  115. package/languages/index.js +2 -6
  116. package/languages/pl-PL.js +1 -3
  117. package/languages/pl-PL.mjs +1 -3
  118. package/package.json +99 -116
  119. package/pluginHooks.d.ts +1 -12
  120. package/pluginHooks.js +1 -152
  121. package/pluginHooks.mjs +1 -152
  122. package/plugins/collapsibleColumns/collapsibleColumns.js +4 -74
  123. package/plugins/collapsibleColumns/collapsibleColumns.mjs +5 -75
  124. package/plugins/columnSorting/columnSorting.js +0 -43
  125. package/plugins/columnSorting/columnSorting.mjs +3 -44
  126. package/plugins/columnSorting/index.js +1 -3
  127. package/plugins/columnSorting/index.mjs +1 -1
  128. package/plugins/comments/commentEditor.js +0 -1
  129. package/plugins/comments/commentEditor.mjs +0 -1
  130. package/plugins/comments/comments.js +189 -252
  131. package/plugins/comments/comments.mjs +190 -251
  132. package/plugins/contextMenu/commandExecutor.js +3 -2
  133. package/plugins/contextMenu/commandExecutor.mjs +3 -2
  134. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  135. package/plugins/contextMenu/contextMenu.js +36 -75
  136. package/plugins/contextMenu/contextMenu.mjs +35 -74
  137. package/plugins/contextMenu/{menu/cursor.mjs → cursor.js} +10 -4
  138. package/plugins/contextMenu/{menu/cursor.js → cursor.mjs} +4 -6
  139. package/plugins/contextMenu/itemsFactory.js +3 -2
  140. package/plugins/contextMenu/itemsFactory.mjs +4 -3
  141. package/plugins/contextMenu/{menu/menu.js → menu.js} +421 -145
  142. package/plugins/contextMenu/{menu/menu.mjs → menu.mjs} +422 -146
  143. package/plugins/contextMenu/predefinedItems/alignment.js +0 -7
  144. package/plugins/contextMenu/predefinedItems/alignment.mjs +0 -7
  145. package/plugins/contextMenu/predefinedItems/clearColumn.js +3 -5
  146. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +3 -5
  147. package/plugins/contextMenu/predefinedItems/columnLeft.js +3 -5
  148. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +3 -5
  149. package/plugins/contextMenu/predefinedItems/columnRight.js +3 -5
  150. package/plugins/contextMenu/predefinedItems/columnRight.mjs +3 -5
  151. package/plugins/contextMenu/predefinedItems/readOnly.js +0 -7
  152. package/plugins/contextMenu/predefinedItems/readOnly.mjs +0 -7
  153. package/plugins/contextMenu/predefinedItems/removeColumn.js +5 -7
  154. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +3 -5
  155. package/plugins/contextMenu/predefinedItems/removeRow.js +5 -7
  156. package/plugins/contextMenu/predefinedItems/removeRow.mjs +3 -5
  157. package/plugins/contextMenu/predefinedItems/rowAbove.js +3 -5
  158. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +3 -5
  159. package/plugins/contextMenu/predefinedItems/rowBelow.js +3 -5
  160. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +3 -5
  161. package/plugins/contextMenu/{predefinedItems/index.js → predefinedItems.js} +14 -14
  162. package/plugins/contextMenu/predefinedItems.mjs +68 -0
  163. package/plugins/contextMenu/utils.js +151 -35
  164. package/plugins/contextMenu/utils.mjs +144 -35
  165. package/plugins/copyPaste/contextMenuItem/copy.js +0 -7
  166. package/plugins/copyPaste/contextMenuItem/copy.mjs +0 -7
  167. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +1 -9
  168. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +1 -9
  169. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +1 -9
  170. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +1 -9
  171. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +1 -9
  172. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +1 -9
  173. package/plugins/copyPaste/contextMenuItem/cut.js +0 -7
  174. package/plugins/copyPaste/contextMenuItem/cut.mjs +0 -7
  175. package/plugins/copyPaste/copyPaste.js +78 -127
  176. package/plugins/copyPaste/copyPaste.mjs +79 -128
  177. package/plugins/copyPaste/focusableElement.js +186 -0
  178. package/plugins/copyPaste/focusableElement.mjs +180 -0
  179. package/plugins/customBorders/customBorders.js +20 -23
  180. package/plugins/customBorders/customBorders.mjs +21 -24
  181. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  182. package/plugins/dropdownMenu/dropdownMenu.js +40 -127
  183. package/plugins/dropdownMenu/dropdownMenu.mjs +39 -126
  184. package/plugins/filters/component/_base.js +8 -23
  185. package/plugins/filters/component/_base.mjs +8 -23
  186. package/plugins/filters/component/actionBar.js +27 -29
  187. package/plugins/filters/component/actionBar.mjs +23 -26
  188. package/plugins/filters/component/condition.js +59 -46
  189. package/plugins/filters/component/condition.mjs +52 -40
  190. package/plugins/filters/component/operators.js +22 -21
  191. package/plugins/filters/component/operators.mjs +18 -18
  192. package/plugins/filters/component/value.js +26 -35
  193. package/plugins/filters/component/value.mjs +22 -32
  194. package/plugins/filters/constants.mjs +1 -1
  195. package/plugins/filters/filters.js +62 -106
  196. package/plugins/filters/filters.mjs +55 -99
  197. package/plugins/filters/ui/_base.js +13 -35
  198. package/plugins/filters/ui/_base.mjs +13 -35
  199. package/plugins/filters/ui/input.js +32 -43
  200. package/plugins/filters/ui/input.mjs +30 -42
  201. package/plugins/filters/ui/link.js +12 -44
  202. package/plugins/filters/ui/link.mjs +11 -44
  203. package/plugins/filters/ui/multipleSelect.js +129 -234
  204. package/plugins/filters/ui/multipleSelect.mjs +127 -232
  205. package/plugins/filters/ui/radioInput.js +18 -42
  206. package/plugins/filters/ui/radioInput.mjs +17 -42
  207. package/plugins/filters/ui/select.js +75 -144
  208. package/plugins/filters/ui/select.mjs +72 -142
  209. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  210. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  211. package/plugins/manualColumnMove/manualColumnMove.js +1 -3
  212. package/plugins/manualColumnMove/manualColumnMove.mjs +1 -3
  213. package/plugins/mergeCells/mergeCells.js +16 -5
  214. package/plugins/mergeCells/mergeCells.mjs +16 -5
  215. package/plugins/multiColumnSorting/multiColumnSorting.js +2 -37
  216. package/plugins/multiColumnSorting/multiColumnSorting.mjs +2 -37
  217. package/plugins/nestedHeaders/nestedHeaders.js +10 -240
  218. package/plugins/nestedHeaders/nestedHeaders.mjs +11 -241
  219. package/plugins/nestedHeaders/stateManager/index.js +3 -102
  220. package/plugins/nestedHeaders/stateManager/index.mjs +3 -102
  221. package/plugins/nestedRows/nestedRows.js +0 -41
  222. package/plugins/nestedRows/nestedRows.mjs +0 -41
  223. package/plugins/nestedRows/ui/headers.js +0 -11
  224. package/plugins/nestedRows/ui/headers.mjs +1 -12
  225. package/renderers/autocompleteRenderer/autocompleteRenderer.js +0 -8
  226. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +0 -8
  227. package/renderers/baseRenderer/baseRenderer.js +0 -17
  228. package/renderers/baseRenderer/baseRenderer.mjs +1 -18
  229. package/renderers/checkboxRenderer/checkboxRenderer.js +4 -9
  230. package/renderers/checkboxRenderer/checkboxRenderer.mjs +4 -9
  231. package/renderers/index.d.ts +0 -9
  232. package/selection/highlight/constants.js +15 -0
  233. package/selection/highlight/constants.mjs +6 -0
  234. package/selection/highlight/highlight.js +71 -256
  235. package/selection/highlight/highlight.mjs +71 -250
  236. package/selection/highlight/types/activeHeader.js +8 -10
  237. package/selection/highlight/types/activeHeader.mjs +8 -10
  238. package/selection/highlight/types/area.js +18 -6
  239. package/selection/highlight/types/area.mjs +18 -6
  240. package/selection/highlight/types/{focus.js → cell.js} +7 -5
  241. package/selection/highlight/types/{focus.mjs → cell.mjs} +7 -5
  242. package/selection/highlight/types/customSelection.js +9 -7
  243. package/selection/highlight/types/customSelection.mjs +9 -7
  244. package/selection/highlight/types/fill.js +7 -5
  245. package/selection/highlight/types/fill.mjs +7 -5
  246. package/selection/highlight/types/header.js +18 -9
  247. package/selection/highlight/types/header.mjs +18 -9
  248. package/selection/highlight/types/index.js +35 -0
  249. package/selection/highlight/types/index.mjs +31 -0
  250. package/selection/highlight/visualSelection.js +27 -31
  251. package/selection/highlight/visualSelection.mjs +27 -31
  252. package/selection/index.js +7 -4
  253. package/selection/index.mjs +3 -2
  254. package/selection/mouseEventHandler.js +1 -7
  255. package/selection/mouseEventHandler.mjs +1 -7
  256. package/selection/range.js +8 -8
  257. package/selection/range.mjs +8 -8
  258. package/selection/selection.js +152 -321
  259. package/selection/selection.mjs +151 -318
  260. package/selection/transformation.js +90 -232
  261. package/selection/transformation.mjs +90 -232
  262. package/selection/utils.js +21 -15
  263. package/selection/utils.mjs +21 -16
  264. package/settings.d.ts +0 -4
  265. package/shortcuts/context.js +4 -23
  266. package/shortcuts/context.mjs +5 -23
  267. package/shortcuts/manager.js +7 -25
  268. package/shortcuts/manager.mjs +7 -26
  269. package/shortcuts/recorder.js +3 -3
  270. package/shortcuts/recorder.mjs +3 -3
  271. package/shortcuts/utils.js +5 -19
  272. package/shortcuts/utils.mjs +4 -18
  273. package/tableView.js +13 -111
  274. package/tableView.mjs +14 -112
  275. package/3rdparty/walkontable/src/selection/border/constants.js +0 -16
  276. package/3rdparty/walkontable/src/selection/border/constants.mjs +0 -12
  277. package/3rdparty/walkontable/src/selection/constants.js +0 -62
  278. package/3rdparty/walkontable/src/selection/constants.mjs +0 -51
  279. package/3rdparty/walkontable/src/selection/index.js +0 -26
  280. package/3rdparty/walkontable/src/selection/index.mjs +0 -5
  281. package/3rdparty/walkontable/src/selection/manager.js +0 -274
  282. package/3rdparty/walkontable/src/selection/manager.mjs +0 -269
  283. package/3rdparty/walkontable/src/selection/scanner.js +0 -270
  284. package/3rdparty/walkontable/src/selection/scanner.mjs +0 -267
  285. package/3rdparty/walkontable/src/selection/selection.js +0 -101
  286. package/3rdparty/walkontable/src/selection/selection.mjs +0 -96
  287. package/cellTypes/selectType/index.d.ts +0 -1
  288. package/cellTypes/selectType/index.js +0 -6
  289. package/cellTypes/selectType/index.mjs +0 -1
  290. package/cellTypes/selectType/selectType.d.ts +0 -14
  291. package/cellTypes/selectType/selectType.js +0 -13
  292. package/cellTypes/selectType/selectType.mjs +0 -8
  293. package/core/focusCatcher/focusDetector.js +0 -63
  294. package/core/focusCatcher/focusDetector.mjs +0 -59
  295. package/core/focusCatcher/index.js +0 -142
  296. package/core/focusCatcher/index.mjs +0 -138
  297. package/core/index.js +0 -9
  298. package/core/index.mjs +0 -1
  299. package/focusManager.d.ts +0 -12
  300. package/focusManager.js +0 -265
  301. package/focusManager.mjs +0 -261
  302. package/helpers/a11y.js +0 -79
  303. package/helpers/a11y.mjs +0 -38
  304. package/plugins/comments/contextMenuItem/addEditComment.js +0 -41
  305. package/plugins/comments/contextMenuItem/addEditComment.mjs +0 -35
  306. package/plugins/comments/contextMenuItem/readOnlyComment.js +0 -49
  307. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +0 -43
  308. package/plugins/comments/contextMenuItem/removeComment.js +0 -38
  309. package/plugins/comments/contextMenuItem/removeComment.mjs +0 -32
  310. package/plugins/contextMenu/menu/defaultShortcutsList.js +0 -88
  311. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +0 -84
  312. package/plugins/contextMenu/menu/index.js +0 -9
  313. package/plugins/contextMenu/menu/index.mjs +0 -1
  314. package/plugins/contextMenu/menu/menuItemRenderer.js +0 -58
  315. package/plugins/contextMenu/menu/menuItemRenderer.mjs +0 -54
  316. package/plugins/contextMenu/menu/navigator.js +0 -27
  317. package/plugins/contextMenu/menu/navigator.mjs +0 -23
  318. package/plugins/contextMenu/menu/positioner.js +0 -213
  319. package/plugins/contextMenu/menu/positioner.mjs +0 -209
  320. package/plugins/contextMenu/menu/shortcuts.js +0 -114
  321. package/plugins/contextMenu/menu/shortcuts.mjs +0 -110
  322. package/plugins/contextMenu/menu/utils.js +0 -177
  323. package/plugins/contextMenu/menu/utils.mjs +0 -163
  324. package/plugins/contextMenu/predefinedItems/index.mjs +0 -68
  325. package/plugins/filters/menu/focusController.js +0 -123
  326. package/plugins/filters/menu/focusController.mjs +0 -119
  327. package/plugins/filters/menu/focusNavigator.js +0 -30
  328. package/plugins/filters/menu/focusNavigator.mjs +0 -26
  329. package/renderers/dateRenderer/dateRenderer.d.ts +0 -5
  330. package/renderers/dateRenderer/dateRenderer.js +0 -29
  331. package/renderers/dateRenderer/dateRenderer.mjs +0 -24
  332. package/renderers/dateRenderer/index.d.ts +0 -1
  333. package/renderers/dateRenderer/index.js +0 -6
  334. package/renderers/dateRenderer/index.mjs +0 -1
  335. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +0 -5
  336. package/renderers/handsontableRenderer/handsontableRenderer.js +0 -29
  337. package/renderers/handsontableRenderer/handsontableRenderer.mjs +0 -24
  338. package/renderers/handsontableRenderer/index.d.ts +0 -1
  339. package/renderers/handsontableRenderer/index.js +0 -6
  340. package/renderers/handsontableRenderer/index.mjs +0 -1
  341. package/renderers/selectRenderer/index.d.ts +0 -1
  342. package/renderers/selectRenderer/index.js +0 -6
  343. package/renderers/selectRenderer/index.mjs +0 -1
  344. package/renderers/selectRenderer/selectRenderer.d.ts +0 -5
  345. package/renderers/selectRenderer/selectRenderer.js +0 -27
  346. package/renderers/selectRenderer/selectRenderer.mjs +0 -22
  347. package/selection/highlight/types/areaLayered.js +0 -31
  348. package/selection/highlight/types/areaLayered.mjs +0 -26
  349. package/selection/highlight/types/column.js +0 -27
  350. package/selection/highlight/types/column.mjs +0 -22
  351. package/selection/highlight/types/row.js +0 -27
  352. package/selection/highlight/types/row.mjs +0 -22
  353. package/shortcutContexts/commands/editor/closeAndSave.js +0 -12
  354. package/shortcutContexts/commands/editor/closeAndSave.mjs +0 -8
  355. package/shortcutContexts/commands/editor/closeWithoutSaving.js +0 -12
  356. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +0 -8
  357. package/shortcutContexts/commands/editor/fastOpen.js +0 -16
  358. package/shortcutContexts/commands/editor/fastOpen.mjs +0 -12
  359. package/shortcutContexts/commands/editor/index.js +0 -16
  360. package/shortcutContexts/commands/editor/index.mjs +0 -12
  361. package/shortcutContexts/commands/editor/open.js +0 -27
  362. package/shortcutContexts/commands/editor/open.mjs +0 -23
  363. package/shortcutContexts/commands/emptySelectedCells.js +0 -11
  364. package/shortcutContexts/commands/emptySelectedCells.mjs +0 -7
  365. package/shortcutContexts/commands/extendCellsSelection/down.js +0 -15
  366. package/shortcutContexts/commands/extendCellsSelection/down.mjs +0 -11
  367. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +0 -25
  368. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +0 -21
  369. package/shortcutContexts/commands/extendCellsSelection/index.js +0 -26
  370. package/shortcutContexts/commands/extendCellsSelection/index.mjs +0 -22
  371. package/shortcutContexts/commands/extendCellsSelection/left.js +0 -15
  372. package/shortcutContexts/commands/extendCellsSelection/left.mjs +0 -11
  373. package/shortcutContexts/commands/extendCellsSelection/right.js +0 -15
  374. package/shortcutContexts/commands/extendCellsSelection/right.mjs +0 -11
  375. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +0 -19
  376. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +0 -15
  377. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +0 -29
  378. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +0 -25
  379. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +0 -19
  380. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +0 -15
  381. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +0 -19
  382. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +0 -15
  383. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +0 -29
  384. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +0 -25
  385. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +0 -29
  386. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +0 -25
  387. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +0 -29
  388. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +0 -25
  389. package/shortcutContexts/commands/extendCellsSelection/toRows.js +0 -19
  390. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +0 -15
  391. package/shortcutContexts/commands/extendCellsSelection/up.js +0 -15
  392. package/shortcutContexts/commands/extendCellsSelection/up.mjs +0 -11
  393. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +0 -25
  394. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +0 -21
  395. package/shortcutContexts/commands/index.js +0 -35
  396. package/shortcutContexts/commands/index.mjs +0 -31
  397. package/shortcutContexts/commands/moveCellSelection/down.js +0 -13
  398. package/shortcutContexts/commands/moveCellSelection/down.mjs +0 -9
  399. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +0 -33
  400. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +0 -29
  401. package/shortcutContexts/commands/moveCellSelection/index.js +0 -28
  402. package/shortcutContexts/commands/moveCellSelection/index.mjs +0 -24
  403. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +0 -12
  404. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +0 -8
  405. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +0 -12
  406. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +0 -8
  407. package/shortcutContexts/commands/moveCellSelection/left.js +0 -10
  408. package/shortcutContexts/commands/moveCellSelection/left.mjs +0 -6
  409. package/shortcutContexts/commands/moveCellSelection/right.js +0 -10
  410. package/shortcutContexts/commands/moveCellSelection/right.mjs +0 -6
  411. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +0 -17
  412. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +0 -13
  413. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +0 -18
  414. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +0 -14
  415. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +0 -14
  416. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +0 -10
  417. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +0 -17
  418. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +0 -13
  419. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +0 -19
  420. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +0 -15
  421. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +0 -21
  422. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +0 -17
  423. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +0 -17
  424. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +0 -13
  425. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +0 -19
  426. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +0 -15
  427. package/shortcutContexts/commands/moveCellSelection/up.js +0 -13
  428. package/shortcutContexts/commands/moveCellSelection/up.mjs +0 -9
  429. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +0 -33
  430. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +0 -29
  431. package/shortcutContexts/commands/populateSelectedCellsData.js +0 -29
  432. package/shortcutContexts/commands/populateSelectedCellsData.mjs +0 -25
  433. package/shortcutContexts/commands/scrollToFocusedCell.js +0 -35
  434. package/shortcutContexts/commands/scrollToFocusedCell.mjs +0 -31
  435. package/shortcutContexts/commands/selectAll.js +0 -12
  436. package/shortcutContexts/commands/selectAll.mjs +0 -8
  437. package/shortcutContexts/constants.js +0 -13
  438. package/shortcutContexts/constants.mjs +0 -8
  439. package/shortcutContexts/editor.js +0 -25
  440. package/shortcutContexts/editor.mjs +0 -21
  441. package/shortcutContexts/grid.js +0 -163
  442. package/shortcutContexts/grid.mjs +0 -159
  443. package/shortcutContexts/index.js +0 -24
  444. package/shortcutContexts/index.mjs +0 -11
  445. package/utils/paginator.js +0 -151
  446. package/utils/paginator.mjs +0 -147
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ require("core-js/modules/es.array.push.js");
5
+ var _element = require("./../../../helpers/dom/element");
6
+ var _border = _interopRequireDefault(require("./border"));
7
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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
+ this.instanceBorders = {};
20
+ this.classNames = [this.settings.className];
21
+ this.classNameGenerator = this.linearClassNameGenerator(this.settings.className, this.settings.layerLevel);
22
+ }
23
+
24
+ /**
25
+ * Each Walkontable clone requires it's own border for every selection. This method creates and returns selection
26
+ * borders per instance.
27
+ *
28
+ * @param {WalkontableFacade} wotInstance The Walkontable instance.
29
+ * @returns {Border}
30
+ */
31
+ getBorder(wotInstance) {
32
+ if (!this.instanceBorders[wotInstance.guid]) {
33
+ this.instanceBorders[wotInstance.guid] = new _border.default(wotInstance, this.settings);
34
+ }
35
+ return this.instanceBorders[wotInstance.guid];
36
+ }
37
+
38
+ /**
39
+ * Checks if selection is empty.
40
+ *
41
+ * @returns {boolean}
42
+ */
43
+ isEmpty() {
44
+ return this.cellRange === null;
45
+ }
46
+
47
+ /**
48
+ * Adds a cell coords to the selection.
49
+ *
50
+ * @param {CellCoords} coords The cell coordinates to add.
51
+ * @returns {Selection}
52
+ */
53
+ add(coords) {
54
+ if (this.isEmpty()) {
55
+ this.cellRange = this.settings.createCellRange(coords);
56
+ } else {
57
+ this.cellRange.expand(coords);
58
+ }
59
+ return this;
60
+ }
61
+
62
+ /**
63
+ * If selection range from or to property equals oldCoords, replace it with newCoords. Return boolean
64
+ * information about success.
65
+ *
66
+ * @param {CellCoords} oldCoords An old cell coordinates to replace.
67
+ * @param {CellCoords} newCoords The new cell coordinates.
68
+ * @returns {boolean}
69
+ */
70
+ replace(oldCoords, newCoords) {
71
+ if (!this.isEmpty()) {
72
+ if (this.cellRange.from.isEqual(oldCoords)) {
73
+ this.cellRange.from = newCoords;
74
+ return true;
75
+ }
76
+ if (this.cellRange.to.isEqual(oldCoords)) {
77
+ this.cellRange.to = newCoords;
78
+ return true;
79
+ }
80
+ }
81
+ return false;
82
+ }
83
+
84
+ /**
85
+ * Clears selection.
86
+ *
87
+ * @returns {Selection}
88
+ */
89
+ clear() {
90
+ this.cellRange = null;
91
+ return this;
92
+ }
93
+
94
+ /**
95
+ * Returns the top left (or top right in RTL) and bottom right (or bottom left in RTL) selection coordinates.
96
+ *
97
+ * @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]`.
98
+ */
99
+ getCorners() {
100
+ const topStart = this.cellRange.getOuterTopStartCorner();
101
+ const bottomEnd = this.cellRange.getOuterBottomEndCorner();
102
+ return [topStart.row, topStart.col, bottomEnd.row, bottomEnd.col];
103
+ }
104
+
105
+ /**
106
+ * Adds class name to cell element at given coords.
107
+ *
108
+ * @param {WalkontableFacade} wotInstance Walkontable instance.
109
+ * @param {number} sourceRow Cell row coord.
110
+ * @param {number} sourceColumn Cell column coord.
111
+ * @param {string} className Class name.
112
+ * @param {boolean} [markIntersections=false] If `true`, linear className generator will be used to add CSS classes
113
+ * in a continuous way.
114
+ * @returns {Selection}
115
+ */
116
+ addClassAtCoords(wotInstance, sourceRow, sourceColumn, className) {
117
+ let markIntersections = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
118
+ const TD = wotInstance.wtTable.getCell(this.settings.createCellCoords(sourceRow, sourceColumn));
119
+ if (typeof TD === 'object') {
120
+ let cellClassName = className;
121
+ if (markIntersections) {
122
+ cellClassName = this.classNameGenerator(TD);
123
+ if (!this.classNames.includes(cellClassName)) {
124
+ this.classNames.push(cellClassName);
125
+ }
126
+ }
127
+ (0, _element.addClass)(TD, cellClassName);
128
+ }
129
+ return this;
130
+ }
131
+
132
+ /**
133
+ * Generate helper for calculating classNames based on previously added base className.
134
+ * The generated className is always generated as a continuation of the previous className. For example, when
135
+ * the currently checked element has 'area-2' className the generated new className will be 'area-3'. When
136
+ * the element doesn't have any classNames than the base className will be returned ('area');.
137
+ *
138
+ * @param {string} baseClassName Base className to be used.
139
+ * @param {number} layerLevelOwner Layer level which the instance of the Selection belongs to.
140
+ * @returns {Function}
141
+ */
142
+ linearClassNameGenerator(baseClassName, layerLevelOwner) {
143
+ // TODO: Make this recursive function Proper Tail Calls (TCO/PTC) friendly.
144
+ return function calcClassName(element) {
145
+ let previousIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
146
+ if (layerLevelOwner === 0 || previousIndex === 0) {
147
+ return baseClassName;
148
+ }
149
+ let index = previousIndex >= 0 ? previousIndex : layerLevelOwner;
150
+ let className = baseClassName;
151
+ index -= 1;
152
+ const previousClassName = index === 0 ? baseClassName : `${baseClassName}-${index}`;
153
+ if ((0, _element.hasClass)(element, previousClassName)) {
154
+ const currentLayer = index + 1;
155
+ className = `${baseClassName}-${currentLayer}`;
156
+ } else {
157
+ className = calcClassName(element, index);
158
+ }
159
+ return className;
160
+ };
161
+ }
162
+
163
+ /**
164
+ * @param {WalkontableFacade} wotInstance The Walkontable instance.
165
+ */
166
+ draw(wotInstance) {
167
+ if (this.isEmpty()) {
168
+ if (this.settings.border) {
169
+ this.getBorder(wotInstance).disappear();
170
+ }
171
+ return;
172
+ }
173
+ const renderedRows = wotInstance.wtTable.getRenderedRowsCount();
174
+ const renderedColumns = wotInstance.wtTable.getRenderedColumnsCount();
175
+ const corners = this.getCorners();
176
+ const [topRow, topColumn, bottomRow, bottomColumn] = corners;
177
+ const {
178
+ highlightHeaderClassName,
179
+ highlightColumnClassName,
180
+ highlightRowClassName,
181
+ highlightOnlyClosestHeader,
182
+ selectionType
183
+ } = this.settings;
184
+ const isHeaderSelectionType = selectionType === void 0 || ['active-header', 'header'].includes(selectionType);
185
+ if (isHeaderSelectionType && topColumn !== null && bottomColumn !== null) {
186
+ let selectionColumnCursor = 0;
187
+ for (let column = 0; column < renderedColumns; column += 1) {
188
+ const sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column);
189
+ if (sourceCol >= topColumn && sourceCol <= bottomColumn) {
190
+ let THs = wotInstance.wtTable.getColumnHeaders(sourceCol);
191
+ const closestHeaderLevel = THs.length - 1;
192
+ if (highlightOnlyClosestHeader && THs.length > 1) {
193
+ THs = [THs[closestHeaderLevel]];
194
+ }
195
+ for (let headerLevel = 0; headerLevel < THs.length; headerLevel += 1) {
196
+ const newClasses = [];
197
+ let TH = THs[headerLevel];
198
+ if (highlightHeaderClassName) {
199
+ newClasses.push(highlightHeaderClassName);
200
+ }
201
+ if (highlightColumnClassName) {
202
+ newClasses.push(highlightColumnClassName);
203
+ }
204
+ headerLevel = highlightOnlyClosestHeader ? closestHeaderLevel : headerLevel;
205
+ const newSourceCol = wotInstance.getSetting('onBeforeHighlightingColumnHeader', sourceCol, headerLevel, {
206
+ selectionType,
207
+ columnCursor: selectionColumnCursor,
208
+ selectionWidth: bottomColumn - topColumn + 1,
209
+ classNames: newClasses
210
+ });
211
+ if (newSourceCol !== sourceCol) {
212
+ TH = wotInstance.wtTable.getColumnHeader(newSourceCol, headerLevel);
213
+ }
214
+ (0, _element.addClass)(TH, newClasses);
215
+ }
216
+ selectionColumnCursor += 1;
217
+ }
218
+ }
219
+ }
220
+ if (topRow !== null && bottomRow !== null) {
221
+ let selectionRowCursor = 0;
222
+ for (let row = 0; row < renderedRows; row += 1) {
223
+ const sourceRow = wotInstance.wtTable.rowFilter.renderedToSource(row);
224
+ if (isHeaderSelectionType && sourceRow >= topRow && sourceRow <= bottomRow) {
225
+ let THs = wotInstance.wtTable.getRowHeaders(sourceRow);
226
+ const closestHeaderLevel = THs.length - 1;
227
+ if (highlightOnlyClosestHeader && THs.length > 1) {
228
+ THs = [THs[closestHeaderLevel]];
229
+ }
230
+ for (let headerLevel = 0; headerLevel < THs.length; headerLevel += 1) {
231
+ const newClasses = [];
232
+ let TH = THs[headerLevel];
233
+ if (highlightHeaderClassName) {
234
+ newClasses.push(highlightHeaderClassName);
235
+ }
236
+ if (highlightRowClassName) {
237
+ newClasses.push(highlightRowClassName);
238
+ }
239
+ headerLevel = highlightOnlyClosestHeader ? closestHeaderLevel : headerLevel;
240
+ const newSourceRow = wotInstance.getSetting('onBeforeHighlightingRowHeader', sourceRow, headerLevel, {
241
+ selectionType,
242
+ rowCursor: selectionRowCursor,
243
+ selectionHeight: bottomRow - topRow + 1,
244
+ classNames: newClasses
245
+ });
246
+ if (newSourceRow !== sourceRow) {
247
+ TH = wotInstance.wtTable.getRowHeader(newSourceRow, headerLevel);
248
+ }
249
+ (0, _element.addClass)(TH, newClasses);
250
+ }
251
+ selectionRowCursor += 1;
252
+ }
253
+ if (topColumn !== null && bottomColumn !== null) {
254
+ for (let column = 0; column < renderedColumns; column += 1) {
255
+ const sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column);
256
+ if (sourceRow >= topRow && sourceRow <= bottomRow && sourceCol >= topColumn && sourceCol <= bottomColumn) {
257
+ // selected cell
258
+ if (this.settings.className) {
259
+ this.addClassAtCoords(wotInstance, sourceRow, sourceCol, this.settings.className, this.settings.markIntersections);
260
+ }
261
+ } else if (sourceRow >= topRow && sourceRow <= bottomRow) {
262
+ // selection is in this row
263
+ if (highlightRowClassName) {
264
+ this.addClassAtCoords(wotInstance, sourceRow, sourceCol, highlightRowClassName);
265
+ }
266
+ } else if (sourceCol >= topColumn && sourceCol <= bottomColumn) {
267
+ // selection is in this column
268
+ if (highlightColumnClassName) {
269
+ this.addClassAtCoords(wotInstance, sourceRow, sourceCol, highlightColumnClassName);
270
+ }
271
+ }
272
+ const additionalSelectionClass = wotInstance.getSetting('onAfterDrawSelection', sourceRow, sourceCol, this.settings.layerLevel);
273
+ if (typeof additionalSelectionClass === 'string') {
274
+ this.addClassAtCoords(wotInstance, sourceRow, sourceCol, additionalSelectionClass);
275
+ }
276
+ }
277
+ }
278
+ }
279
+ }
280
+ wotInstance.getSetting('onBeforeDrawBorders', corners, this.settings.className);
281
+ if (this.settings.border) {
282
+ // warning! border.appear modifies corners!
283
+ this.getBorder(wotInstance).appear(corners);
284
+ }
285
+ }
286
+
287
+ /**
288
+ * Cleans up all the DOM state related to a Selection instance. Call this prior to deleting a Selection instance.
289
+ */
290
+ destroy() {
291
+ Object.values(this.instanceBorders).forEach(border => border.destroy());
292
+ }
293
+ }
294
+ var _default = Selection;
295
+ exports.default = _default;
@@ -0,0 +1,290 @@
1
+ import "core-js/modules/es.array.push.js";
2
+ import { addClass, hasClass } from "./../../../helpers/dom/element.mjs";
3
+ import Border from "./border.mjs";
4
+ /**
5
+ * @class Selection
6
+ */
7
+ class Selection {
8
+ /**
9
+ * @param {object} settings The selection settings object. @todo type.
10
+ * @param {CellRange} cellRange The cell range instance.
11
+ */
12
+ constructor(settings, cellRange) {
13
+ this.settings = settings;
14
+ this.cellRange = cellRange || null;
15
+ this.instanceBorders = {};
16
+ this.classNames = [this.settings.className];
17
+ this.classNameGenerator = this.linearClassNameGenerator(this.settings.className, this.settings.layerLevel);
18
+ }
19
+
20
+ /**
21
+ * Each Walkontable clone requires it's own border for every selection. This method creates and returns selection
22
+ * borders per instance.
23
+ *
24
+ * @param {WalkontableFacade} wotInstance The Walkontable instance.
25
+ * @returns {Border}
26
+ */
27
+ getBorder(wotInstance) {
28
+ if (!this.instanceBorders[wotInstance.guid]) {
29
+ this.instanceBorders[wotInstance.guid] = new Border(wotInstance, this.settings);
30
+ }
31
+ return this.instanceBorders[wotInstance.guid];
32
+ }
33
+
34
+ /**
35
+ * Checks if selection is empty.
36
+ *
37
+ * @returns {boolean}
38
+ */
39
+ isEmpty() {
40
+ return this.cellRange === null;
41
+ }
42
+
43
+ /**
44
+ * Adds a cell coords to the selection.
45
+ *
46
+ * @param {CellCoords} coords The cell coordinates to add.
47
+ * @returns {Selection}
48
+ */
49
+ add(coords) {
50
+ if (this.isEmpty()) {
51
+ this.cellRange = this.settings.createCellRange(coords);
52
+ } else {
53
+ this.cellRange.expand(coords);
54
+ }
55
+ return this;
56
+ }
57
+
58
+ /**
59
+ * If selection range from or to property equals oldCoords, replace it with newCoords. Return boolean
60
+ * information about success.
61
+ *
62
+ * @param {CellCoords} oldCoords An old cell coordinates to replace.
63
+ * @param {CellCoords} newCoords The new cell coordinates.
64
+ * @returns {boolean}
65
+ */
66
+ replace(oldCoords, newCoords) {
67
+ if (!this.isEmpty()) {
68
+ if (this.cellRange.from.isEqual(oldCoords)) {
69
+ this.cellRange.from = newCoords;
70
+ return true;
71
+ }
72
+ if (this.cellRange.to.isEqual(oldCoords)) {
73
+ this.cellRange.to = newCoords;
74
+ return true;
75
+ }
76
+ }
77
+ return false;
78
+ }
79
+
80
+ /**
81
+ * Clears selection.
82
+ *
83
+ * @returns {Selection}
84
+ */
85
+ clear() {
86
+ this.cellRange = null;
87
+ return this;
88
+ }
89
+
90
+ /**
91
+ * Returns the top left (or top right in RTL) and bottom right (or bottom left in RTL) selection coordinates.
92
+ *
93
+ * @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]`.
94
+ */
95
+ getCorners() {
96
+ const topStart = this.cellRange.getOuterTopStartCorner();
97
+ const bottomEnd = this.cellRange.getOuterBottomEndCorner();
98
+ return [topStart.row, topStart.col, bottomEnd.row, bottomEnd.col];
99
+ }
100
+
101
+ /**
102
+ * Adds class name to cell element at given coords.
103
+ *
104
+ * @param {WalkontableFacade} wotInstance Walkontable instance.
105
+ * @param {number} sourceRow Cell row coord.
106
+ * @param {number} sourceColumn Cell column coord.
107
+ * @param {string} className Class name.
108
+ * @param {boolean} [markIntersections=false] If `true`, linear className generator will be used to add CSS classes
109
+ * in a continuous way.
110
+ * @returns {Selection}
111
+ */
112
+ addClassAtCoords(wotInstance, sourceRow, sourceColumn, className) {
113
+ let markIntersections = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
114
+ const TD = wotInstance.wtTable.getCell(this.settings.createCellCoords(sourceRow, sourceColumn));
115
+ if (typeof TD === 'object') {
116
+ let cellClassName = className;
117
+ if (markIntersections) {
118
+ cellClassName = this.classNameGenerator(TD);
119
+ if (!this.classNames.includes(cellClassName)) {
120
+ this.classNames.push(cellClassName);
121
+ }
122
+ }
123
+ addClass(TD, cellClassName);
124
+ }
125
+ return this;
126
+ }
127
+
128
+ /**
129
+ * Generate helper for calculating classNames based on previously added base className.
130
+ * The generated className is always generated as a continuation of the previous className. For example, when
131
+ * the currently checked element has 'area-2' className the generated new className will be 'area-3'. When
132
+ * the element doesn't have any classNames than the base className will be returned ('area');.
133
+ *
134
+ * @param {string} baseClassName Base className to be used.
135
+ * @param {number} layerLevelOwner Layer level which the instance of the Selection belongs to.
136
+ * @returns {Function}
137
+ */
138
+ linearClassNameGenerator(baseClassName, layerLevelOwner) {
139
+ // TODO: Make this recursive function Proper Tail Calls (TCO/PTC) friendly.
140
+ return function calcClassName(element) {
141
+ let previousIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
142
+ if (layerLevelOwner === 0 || previousIndex === 0) {
143
+ return baseClassName;
144
+ }
145
+ let index = previousIndex >= 0 ? previousIndex : layerLevelOwner;
146
+ let className = baseClassName;
147
+ index -= 1;
148
+ const previousClassName = index === 0 ? baseClassName : `${baseClassName}-${index}`;
149
+ if (hasClass(element, previousClassName)) {
150
+ const currentLayer = index + 1;
151
+ className = `${baseClassName}-${currentLayer}`;
152
+ } else {
153
+ className = calcClassName(element, index);
154
+ }
155
+ return className;
156
+ };
157
+ }
158
+
159
+ /**
160
+ * @param {WalkontableFacade} wotInstance The Walkontable instance.
161
+ */
162
+ draw(wotInstance) {
163
+ if (this.isEmpty()) {
164
+ if (this.settings.border) {
165
+ this.getBorder(wotInstance).disappear();
166
+ }
167
+ return;
168
+ }
169
+ const renderedRows = wotInstance.wtTable.getRenderedRowsCount();
170
+ const renderedColumns = wotInstance.wtTable.getRenderedColumnsCount();
171
+ const corners = this.getCorners();
172
+ const [topRow, topColumn, bottomRow, bottomColumn] = corners;
173
+ const {
174
+ highlightHeaderClassName,
175
+ highlightColumnClassName,
176
+ highlightRowClassName,
177
+ highlightOnlyClosestHeader,
178
+ selectionType
179
+ } = this.settings;
180
+ const isHeaderSelectionType = selectionType === void 0 || ['active-header', 'header'].includes(selectionType);
181
+ if (isHeaderSelectionType && topColumn !== null && bottomColumn !== null) {
182
+ let selectionColumnCursor = 0;
183
+ for (let column = 0; column < renderedColumns; column += 1) {
184
+ const sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column);
185
+ if (sourceCol >= topColumn && sourceCol <= bottomColumn) {
186
+ let THs = wotInstance.wtTable.getColumnHeaders(sourceCol);
187
+ const closestHeaderLevel = THs.length - 1;
188
+ if (highlightOnlyClosestHeader && THs.length > 1) {
189
+ THs = [THs[closestHeaderLevel]];
190
+ }
191
+ for (let headerLevel = 0; headerLevel < THs.length; headerLevel += 1) {
192
+ const newClasses = [];
193
+ let TH = THs[headerLevel];
194
+ if (highlightHeaderClassName) {
195
+ newClasses.push(highlightHeaderClassName);
196
+ }
197
+ if (highlightColumnClassName) {
198
+ newClasses.push(highlightColumnClassName);
199
+ }
200
+ headerLevel = highlightOnlyClosestHeader ? closestHeaderLevel : headerLevel;
201
+ const newSourceCol = wotInstance.getSetting('onBeforeHighlightingColumnHeader', sourceCol, headerLevel, {
202
+ selectionType,
203
+ columnCursor: selectionColumnCursor,
204
+ selectionWidth: bottomColumn - topColumn + 1,
205
+ classNames: newClasses
206
+ });
207
+ if (newSourceCol !== sourceCol) {
208
+ TH = wotInstance.wtTable.getColumnHeader(newSourceCol, headerLevel);
209
+ }
210
+ addClass(TH, newClasses);
211
+ }
212
+ selectionColumnCursor += 1;
213
+ }
214
+ }
215
+ }
216
+ if (topRow !== null && bottomRow !== null) {
217
+ let selectionRowCursor = 0;
218
+ for (let row = 0; row < renderedRows; row += 1) {
219
+ const sourceRow = wotInstance.wtTable.rowFilter.renderedToSource(row);
220
+ if (isHeaderSelectionType && sourceRow >= topRow && sourceRow <= bottomRow) {
221
+ let THs = wotInstance.wtTable.getRowHeaders(sourceRow);
222
+ const closestHeaderLevel = THs.length - 1;
223
+ if (highlightOnlyClosestHeader && THs.length > 1) {
224
+ THs = [THs[closestHeaderLevel]];
225
+ }
226
+ for (let headerLevel = 0; headerLevel < THs.length; headerLevel += 1) {
227
+ const newClasses = [];
228
+ let TH = THs[headerLevel];
229
+ if (highlightHeaderClassName) {
230
+ newClasses.push(highlightHeaderClassName);
231
+ }
232
+ if (highlightRowClassName) {
233
+ newClasses.push(highlightRowClassName);
234
+ }
235
+ headerLevel = highlightOnlyClosestHeader ? closestHeaderLevel : headerLevel;
236
+ const newSourceRow = wotInstance.getSetting('onBeforeHighlightingRowHeader', sourceRow, headerLevel, {
237
+ selectionType,
238
+ rowCursor: selectionRowCursor,
239
+ selectionHeight: bottomRow - topRow + 1,
240
+ classNames: newClasses
241
+ });
242
+ if (newSourceRow !== sourceRow) {
243
+ TH = wotInstance.wtTable.getRowHeader(newSourceRow, headerLevel);
244
+ }
245
+ addClass(TH, newClasses);
246
+ }
247
+ selectionRowCursor += 1;
248
+ }
249
+ if (topColumn !== null && bottomColumn !== null) {
250
+ for (let column = 0; column < renderedColumns; column += 1) {
251
+ const sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column);
252
+ if (sourceRow >= topRow && sourceRow <= bottomRow && sourceCol >= topColumn && sourceCol <= bottomColumn) {
253
+ // selected cell
254
+ if (this.settings.className) {
255
+ this.addClassAtCoords(wotInstance, sourceRow, sourceCol, this.settings.className, this.settings.markIntersections);
256
+ }
257
+ } else if (sourceRow >= topRow && sourceRow <= bottomRow) {
258
+ // selection is in this row
259
+ if (highlightRowClassName) {
260
+ this.addClassAtCoords(wotInstance, sourceRow, sourceCol, highlightRowClassName);
261
+ }
262
+ } else if (sourceCol >= topColumn && sourceCol <= bottomColumn) {
263
+ // selection is in this column
264
+ if (highlightColumnClassName) {
265
+ this.addClassAtCoords(wotInstance, sourceRow, sourceCol, highlightColumnClassName);
266
+ }
267
+ }
268
+ const additionalSelectionClass = wotInstance.getSetting('onAfterDrawSelection', sourceRow, sourceCol, this.settings.layerLevel);
269
+ if (typeof additionalSelectionClass === 'string') {
270
+ this.addClassAtCoords(wotInstance, sourceRow, sourceCol, additionalSelectionClass);
271
+ }
272
+ }
273
+ }
274
+ }
275
+ }
276
+ wotInstance.getSetting('onBeforeDrawBorders', corners, this.settings.className);
277
+ if (this.settings.border) {
278
+ // warning! border.appear modifies corners!
279
+ this.getBorder(wotInstance).appear(corners);
280
+ }
281
+ }
282
+
283
+ /**
284
+ * Cleans up all the DOM state related to a Selection instance. Call this prior to deleting a Selection instance.
285
+ */
286
+ destroy() {
287
+ Object.values(this.instanceBorders).forEach(border => border.destroy());
288
+ }
289
+ }
290
+ export default Selection;
@@ -12,7 +12,6 @@ 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`.
16
15
  * @property {Option} cellRenderer Option `cellRenderer`.
17
16
  * @property {Option} columnHeaders Option `columnHeaders`.
18
17
  * @property {Option} columnWidth Option `columnWidth`.
@@ -65,8 +64,6 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
65
64
  * @property {?Option} onDraw Option `onDraw`.
66
65
  * @property {?Option} onModifyGetCellCoords Option `onModifyGetCellCoords`.
67
66
  * @property {?Option} onModifyRowHeaderWidth Option `onModifyRowHeaderWidth`.
68
- * @property {?Option} onBeforeViewportScrollHorizontally Option `onBeforeViewportScrollHorizontally`.
69
- * @property {?Option} onBeforeViewportScrollVertically Option `onBeforeViewportScrollVertically`.
70
67
  * @property {?Option} onScrollHorizontally Option `onScrollHorizontally`.
71
68
  * @property {?Option} onScrollVertically Option `onScrollVertically`.
72
69
  * @property {?Option} onWindowResize Option `onWindowResize`.
@@ -193,7 +190,7 @@ class Settings {
193
190
  onCellMouseOver: null,
194
191
  onCellMouseOut: null,
195
192
  onCellMouseUp: null,
196
- // onCellMouseOut: null,
193
+ // onCellMouseOut: null,
197
194
  onCellDblClick: null,
198
195
  onCellCornerMouseDown: null,
199
196
  onCellCornerDblClick: null,
@@ -202,13 +199,8 @@ class Settings {
202
199
  onBeforeRemoveCellClassNames: null,
203
200
  onAfterDrawSelection: null,
204
201
  onBeforeDrawBorders: null,
205
- // viewport scroll hooks
206
- onBeforeViewportScrollHorizontally: column => column,
207
- onBeforeViewportScrollVertically: row => row,
208
- // native scroll hooks
209
- onScrollHorizontally: null,
210
202
  onScrollVertically: null,
211
- //
203
+ onScrollHorizontally: null,
212
204
  onBeforeTouchScroll: null,
213
205
  onAfterMomentumScroll: null,
214
206
  onBeforeStretchingColumnWidth: width => width,
@@ -223,15 +215,14 @@ class Settings {
223
215
  rowHeaderWidth: null,
224
216
  columnHeaderHeight: null,
225
217
  headerClassName: null,
226
- rtlMode: false,
227
- ariaTags: true
218
+ rtlMode: false
228
219
  };
229
220
  }
230
221
 
231
222
  /**
232
223
  * Update settings.
233
224
  *
234
- * @param {object|string} settings The singular settings to update or if passed as object to merge with.
225
+ * @param {object} settings The singular settings to update or if passed as object to merge with.
235
226
  * @param {*} value The value to set if the first argument is passed as string.
236
227
  * @returns {Settings}
237
228
  */