handsontable 0.0.0-next-9059914-20231025 → 0.0.0-next-21d91d0-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/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 +51 -15
  98. package/dist/handsontable.full.css +51 -15
  99. package/dist/handsontable.full.js +13360 -7840
  100. package/dist/handsontable.full.min.css +7 -7
  101. package/dist/handsontable.full.min.js +136 -136
  102. package/dist/handsontable.js +20955 -15435
  103. package/dist/handsontable.min.css +6 -6
  104. package/dist/handsontable.min.js +24 -24
  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/defaultShortcutsList.js +88 -0
  175. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
  176. package/plugins/contextMenu/menu/index.js +9 -0
  177. package/plugins/contextMenu/menu/index.mjs +1 -0
  178. package/plugins/contextMenu/{menu.js → menu/menu.js} +145 -421
  179. package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +146 -422
  180. package/plugins/contextMenu/menu/menuItemRenderer.js +58 -0
  181. package/plugins/contextMenu/menu/menuItemRenderer.mjs +54 -0
  182. package/plugins/contextMenu/menu/navigator.js +27 -0
  183. package/plugins/contextMenu/menu/navigator.mjs +23 -0
  184. package/plugins/contextMenu/menu/positioner.js +213 -0
  185. package/plugins/contextMenu/menu/positioner.mjs +209 -0
  186. package/plugins/contextMenu/menu/shortcuts.js +114 -0
  187. package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
  188. package/plugins/contextMenu/menu/utils.js +177 -0
  189. package/plugins/contextMenu/menu/utils.mjs +163 -0
  190. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  191. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  192. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  193. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  194. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  195. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  196. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  197. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  198. package/plugins/contextMenu/{predefinedItems.js → predefinedItems/index.js} +14 -14
  199. package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
  200. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  201. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  202. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  203. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  204. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  205. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  206. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  207. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  208. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  209. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  210. package/plugins/contextMenu/utils.js +35 -151
  211. package/plugins/contextMenu/utils.mjs +35 -144
  212. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  213. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  214. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  215. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  216. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  217. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  218. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  219. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  220. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  221. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  222. package/plugins/copyPaste/copyPaste.js +127 -78
  223. package/plugins/copyPaste/copyPaste.mjs +128 -79
  224. package/plugins/customBorders/customBorders.js +23 -20
  225. package/plugins/customBorders/customBorders.mjs +24 -21
  226. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  227. package/plugins/dropdownMenu/dropdownMenu.js +127 -40
  228. package/plugins/dropdownMenu/dropdownMenu.mjs +126 -39
  229. package/plugins/filters/component/_base.js +23 -8
  230. package/plugins/filters/component/_base.mjs +23 -8
  231. package/plugins/filters/component/actionBar.js +29 -27
  232. package/plugins/filters/component/actionBar.mjs +26 -23
  233. package/plugins/filters/component/condition.js +46 -59
  234. package/plugins/filters/component/condition.mjs +40 -52
  235. package/plugins/filters/component/operators.js +21 -22
  236. package/plugins/filters/component/operators.mjs +18 -18
  237. package/plugins/filters/component/value.js +35 -26
  238. package/plugins/filters/component/value.mjs +32 -22
  239. package/plugins/filters/constants.mjs +1 -1
  240. package/plugins/filters/filters.js +106 -62
  241. package/plugins/filters/filters.mjs +99 -55
  242. package/plugins/filters/menu/focusController.js +123 -0
  243. package/plugins/filters/menu/focusController.mjs +119 -0
  244. package/plugins/filters/menu/focusNavigator.js +30 -0
  245. package/plugins/filters/menu/focusNavigator.mjs +26 -0
  246. package/plugins/filters/ui/_base.js +35 -13
  247. package/plugins/filters/ui/_base.mjs +35 -13
  248. package/plugins/filters/ui/input.js +43 -32
  249. package/plugins/filters/ui/input.mjs +42 -30
  250. package/plugins/filters/ui/link.js +44 -12
  251. package/plugins/filters/ui/link.mjs +44 -11
  252. package/plugins/filters/ui/multipleSelect.js +234 -129
  253. package/plugins/filters/ui/multipleSelect.mjs +232 -127
  254. package/plugins/filters/ui/radioInput.js +42 -18
  255. package/plugins/filters/ui/radioInput.mjs +42 -17
  256. package/plugins/filters/ui/select.js +144 -75
  257. package/plugins/filters/ui/select.mjs +142 -72
  258. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  259. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  260. package/plugins/manualColumnMove/manualColumnMove.js +3 -1
  261. package/plugins/manualColumnMove/manualColumnMove.mjs +3 -1
  262. package/plugins/mergeCells/mergeCells.js +5 -16
  263. package/plugins/mergeCells/mergeCells.mjs +5 -16
  264. package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
  265. package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
  266. package/plugins/nestedHeaders/nestedHeaders.js +240 -10
  267. package/plugins/nestedHeaders/nestedHeaders.mjs +241 -11
  268. package/plugins/nestedHeaders/stateManager/index.js +102 -3
  269. package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
  270. package/plugins/nestedRows/nestedRows.js +41 -0
  271. package/plugins/nestedRows/nestedRows.mjs +41 -0
  272. package/plugins/nestedRows/ui/headers.js +11 -0
  273. package/plugins/nestedRows/ui/headers.mjs +12 -1
  274. package/renderers/autocompleteRenderer/autocompleteRenderer.js +8 -0
  275. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
  276. package/renderers/baseRenderer/baseRenderer.js +17 -0
  277. package/renderers/baseRenderer/baseRenderer.mjs +18 -1
  278. package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
  279. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  280. package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
  281. package/renderers/dateRenderer/dateRenderer.js +29 -0
  282. package/renderers/dateRenderer/dateRenderer.mjs +24 -0
  283. package/renderers/dateRenderer/index.d.ts +1 -0
  284. package/renderers/dateRenderer/index.js +6 -0
  285. package/renderers/dateRenderer/index.mjs +1 -0
  286. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
  287. package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
  288. package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
  289. package/renderers/handsontableRenderer/index.d.ts +1 -0
  290. package/renderers/handsontableRenderer/index.js +6 -0
  291. package/renderers/handsontableRenderer/index.mjs +1 -0
  292. package/renderers/index.d.ts +9 -0
  293. package/renderers/selectRenderer/index.d.ts +1 -0
  294. package/renderers/selectRenderer/index.js +6 -0
  295. package/renderers/selectRenderer/index.mjs +1 -0
  296. package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
  297. package/renderers/selectRenderer/selectRenderer.js +27 -0
  298. package/renderers/selectRenderer/selectRenderer.mjs +22 -0
  299. package/selection/highlight/highlight.js +256 -71
  300. package/selection/highlight/highlight.mjs +250 -71
  301. package/selection/highlight/types/activeHeader.js +10 -8
  302. package/selection/highlight/types/activeHeader.mjs +10 -8
  303. package/selection/highlight/types/area.js +6 -18
  304. package/selection/highlight/types/area.mjs +6 -18
  305. package/selection/highlight/types/areaLayered.js +31 -0
  306. package/selection/highlight/types/areaLayered.mjs +26 -0
  307. package/selection/highlight/types/column.js +27 -0
  308. package/selection/highlight/types/column.mjs +22 -0
  309. package/selection/highlight/types/customSelection.js +7 -9
  310. package/selection/highlight/types/customSelection.mjs +7 -9
  311. package/selection/highlight/types/fill.js +5 -7
  312. package/selection/highlight/types/fill.mjs +5 -7
  313. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  314. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  315. package/selection/highlight/types/header.js +9 -18
  316. package/selection/highlight/types/header.mjs +9 -18
  317. package/selection/highlight/types/row.js +27 -0
  318. package/selection/highlight/types/row.mjs +22 -0
  319. package/selection/highlight/visualSelection.js +31 -27
  320. package/selection/highlight/visualSelection.mjs +31 -27
  321. package/selection/index.js +4 -7
  322. package/selection/index.mjs +2 -3
  323. package/selection/mouseEventHandler.js +7 -1
  324. package/selection/mouseEventHandler.mjs +7 -1
  325. package/selection/range.js +8 -8
  326. package/selection/range.mjs +8 -8
  327. package/selection/selection.js +321 -152
  328. package/selection/selection.mjs +318 -151
  329. package/selection/transformation.js +232 -90
  330. package/selection/transformation.mjs +232 -90
  331. package/selection/utils.js +15 -21
  332. package/selection/utils.mjs +16 -21
  333. package/settings.d.ts +4 -0
  334. package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
  335. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  336. package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
  337. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  338. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  339. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  340. package/shortcutContexts/commands/editor/index.js +16 -0
  341. package/shortcutContexts/commands/editor/index.mjs +12 -0
  342. package/shortcutContexts/commands/editor/open.js +27 -0
  343. package/shortcutContexts/commands/editor/open.mjs +23 -0
  344. package/shortcutContexts/commands/emptySelectedCells.js +11 -0
  345. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  346. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  347. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  348. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +25 -0
  349. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
  350. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  351. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  352. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  353. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  354. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  355. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  356. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  357. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  358. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
  359. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  360. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
  361. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  362. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
  363. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  364. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
  365. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  366. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
  367. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  368. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
  369. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  370. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  371. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  372. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  373. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  374. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +25 -0
  375. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
  376. package/shortcutContexts/commands/index.js +35 -0
  377. package/shortcutContexts/commands/index.mjs +31 -0
  378. package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
  379. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  380. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +33 -0
  381. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
  382. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  383. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  384. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
  385. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  386. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
  387. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  388. package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
  389. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  390. package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
  391. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  392. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
  393. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  394. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
  395. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  396. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
  397. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  398. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
  399. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  400. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
  401. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  402. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
  403. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  404. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
  405. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  406. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
  407. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  408. package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
  409. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  410. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +33 -0
  411. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
  412. package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
  413. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  414. package/shortcutContexts/commands/scrollToFocusedCell.js +35 -0
  415. package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
  416. package/shortcutContexts/commands/selectAll.js +12 -0
  417. package/shortcutContexts/commands/selectAll.mjs +8 -0
  418. package/shortcutContexts/constants.js +13 -0
  419. package/shortcutContexts/constants.mjs +8 -0
  420. package/shortcutContexts/editor.js +25 -0
  421. package/shortcutContexts/editor.mjs +21 -0
  422. package/shortcutContexts/grid.js +163 -0
  423. package/shortcutContexts/grid.mjs +159 -0
  424. package/shortcutContexts/index.js +24 -0
  425. package/shortcutContexts/index.mjs +11 -0
  426. package/shortcuts/context.js +23 -4
  427. package/shortcuts/context.mjs +23 -5
  428. package/shortcuts/manager.js +25 -7
  429. package/shortcuts/manager.mjs +26 -7
  430. package/shortcuts/recorder.js +3 -3
  431. package/shortcuts/recorder.mjs +3 -3
  432. package/shortcuts/utils.js +19 -5
  433. package/shortcuts/utils.mjs +18 -4
  434. package/tableView.js +111 -13
  435. package/tableView.mjs +112 -14
  436. package/utils/paginator.js +151 -0
  437. package/utils/paginator.mjs +147 -0
  438. package/3rdparty/walkontable/src/selection.js +0 -295
  439. package/3rdparty/walkontable/src/selection.mjs +0 -290
  440. package/plugins/contextMenu/predefinedItems.mjs +0 -68
  441. package/plugins/copyPaste/focusableElement.js +0 -186
  442. package/plugins/copyPaste/focusableElement.mjs +0 -180
  443. package/selection/highlight/constants.js +0 -15
  444. package/selection/highlight/constants.mjs +0 -6
  445. package/selection/highlight/types/index.js +0 -35
  446. package/selection/highlight/types/index.mjs +0 -31
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
+ exports.isContextObject = isContextObject;
4
5
  require("core-js/modules/es.error.cause.js");
5
6
  require("core-js/modules/es.array.push.js");
6
7
  var _uniqueMap = require("../utils/dataStructures/uniqueMap");
@@ -9,6 +10,18 @@ var _mixed = require("../helpers/mixed");
9
10
  var _function = require("../helpers/function");
10
11
  var _object = require("../helpers/object");
11
12
  var _templateLiteralTag = require("../helpers/templateLiteralTag");
13
+ const __kindOf = Symbol('shortcut-context');
14
+
15
+ /**
16
+ * Checks if the provided object is a context object.
17
+ *
18
+ * @param {*} objectToCheck An object to check.
19
+ * @returns {boolean}
20
+ */
21
+ function isContextObject(objectToCheck) {
22
+ return (0, _object.isObject)(objectToCheck) && objectToCheck.__kindOf === __kindOf;
23
+ }
24
+
12
25
  /* eslint-disable jsdoc/require-description-complete-sentence */
13
26
  /**
14
27
  * The `ShortcutContext` API lets you store and manage [keyboard shortcuts](@/guides/accessories-and-menus/keyboard-shortcuts.md) in a given [context](@/guides/accessories-and-menus/keyboard-shortcuts.md#keyboard-shortcut-contexts).
@@ -36,13 +49,13 @@ const createContext = name => {
36
49
  * @param {Function} options.callback The shortcut's action
37
50
  * @param {object} options.group A group of shortcuts to which the shortcut belongs
38
51
  * @param {object} [options.runOnlyIf] A condition on which the shortcut's action runs
39
- * @param {object} [options.stopPropagation=true] If set to `true`: stops the event's propagation
52
+ * @param {object} [options.stopPropagation=false] If set to `true`: stops the event's propagation
40
53
  * @param {object} [options.captureCtrl=false] If set to `true`: captures the state of the Control/Meta modifier key
41
54
  * @param {object} [options.preventDefault=true] If set to `true`: prevents the default behavior
42
55
  * @param {object} [options.position='after'] The order in which the shortcut's action runs:
43
56
  * `'before'` or `'after'` the `relativeToGroup` group of actions
44
57
  * @param {object} [options.relativeToGroup] The name of a group of actions, used to determine an action's `position`
45
- *
58
+ * @param {object} [options.forwardToContext] The context object where the event will be forwarded to.
46
59
  */
47
60
  const addShortcut = function () {
48
61
  let {
@@ -54,7 +67,8 @@ const createContext = name => {
54
67
  preventDefault = true,
55
68
  stopPropagation = false,
56
69
  relativeToGroup,
57
- position
70
+ position,
71
+ forwardToContext
58
72
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
59
73
  if ((0, _mixed.isUndefined)(group)) {
60
74
  throw new Error('You need to define the shortcut\'s group.');
@@ -78,6 +92,9 @@ const createContext = name => {
78
92
  if ((0, _mixed.isDefined)(relativeToGroup)) {
79
93
  [newShortcut.relativeToGroup, newShortcut.position] = [relativeToGroup, position];
80
94
  }
95
+ if (isContextObject(forwardToContext)) {
96
+ newShortcut.forwardToContext = forwardToContext;
97
+ }
81
98
  keys.forEach(keyCombination => {
82
99
  const normalizedKeys = (0, _utils.normalizeKeys)(keyCombination);
83
100
  const hasKeyCombination = SHORTCUTS.hasItem(normalizedKeys);
@@ -109,11 +126,12 @@ const createContext = name => {
109
126
  * @param {Function} [options.callback] A shortcut's action
110
127
  * @param {object} [options.group] A group of shortcuts to which a shortcut belongs
111
128
  * @param {object} [options.runOnlyIf] A condition on which a shortcut's action runs
112
- * @param {object} [options.stopPropagation=true] If set to `true`: stops the event's propagation
129
+ * @param {object} [options.stopPropagation=false] If set to `true`: stops the event's propagation
113
130
  * @param {object} [options.preventDefault=true] If set to `true`: prevents the default behavior
114
131
  * @param {object} [options.position='after'] The order in which a shortcut's action runs:
115
132
  * `'before'` or `'after'` a `relativeToGroup` group of actions
116
133
  * @param {object} [options.relativeToGroup] The name of a group of actions, used to determine an action's `position`
134
+ * @param {object} [options.forwardToContext] The context object where the event will be forwarded to.
117
135
  */
118
136
  const addShortcuts = function (shortcuts) {
119
137
  let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -189,6 +207,7 @@ const createContext = name => {
189
207
  return SHORTCUTS.hasItem(normalizedKeys);
190
208
  };
191
209
  return {
210
+ __kindOf,
192
211
  addShortcut,
193
212
  addShortcuts,
194
213
  getShortcuts,
@@ -4,8 +4,20 @@ import { createUniqueMap } from "../utils/dataStructures/uniqueMap.mjs";
4
4
  import { normalizeKeys, getKeysList } from "./utils.mjs";
5
5
  import { isUndefined, isDefined } from "../helpers/mixed.mjs";
6
6
  import { isFunction } from "../helpers/function.mjs";
7
- import { objectEach } from "../helpers/object.mjs";
7
+ import { objectEach, isObject } from "../helpers/object.mjs";
8
8
  import { toSingleLine } from "../helpers/templateLiteralTag.mjs";
9
+ const __kindOf = Symbol('shortcut-context');
10
+
11
+ /**
12
+ * Checks if the provided object is a context object.
13
+ *
14
+ * @param {*} objectToCheck An object to check.
15
+ * @returns {boolean}
16
+ */
17
+ export function isContextObject(objectToCheck) {
18
+ return isObject(objectToCheck) && objectToCheck.__kindOf === __kindOf;
19
+ }
20
+
9
21
  /* eslint-disable jsdoc/require-description-complete-sentence */
10
22
  /**
11
23
  * The `ShortcutContext` API lets you store and manage [keyboard shortcuts](@/guides/accessories-and-menus/keyboard-shortcuts.md) in a given [context](@/guides/accessories-and-menus/keyboard-shortcuts.md#keyboard-shortcut-contexts).
@@ -33,13 +45,13 @@ export const createContext = name => {
33
45
  * @param {Function} options.callback The shortcut's action
34
46
  * @param {object} options.group A group of shortcuts to which the shortcut belongs
35
47
  * @param {object} [options.runOnlyIf] A condition on which the shortcut's action runs
36
- * @param {object} [options.stopPropagation=true] If set to `true`: stops the event's propagation
48
+ * @param {object} [options.stopPropagation=false] If set to `true`: stops the event's propagation
37
49
  * @param {object} [options.captureCtrl=false] If set to `true`: captures the state of the Control/Meta modifier key
38
50
  * @param {object} [options.preventDefault=true] If set to `true`: prevents the default behavior
39
51
  * @param {object} [options.position='after'] The order in which the shortcut's action runs:
40
52
  * `'before'` or `'after'` the `relativeToGroup` group of actions
41
53
  * @param {object} [options.relativeToGroup] The name of a group of actions, used to determine an action's `position`
42
- *
54
+ * @param {object} [options.forwardToContext] The context object where the event will be forwarded to.
43
55
  */
44
56
  const addShortcut = function () {
45
57
  let {
@@ -51,7 +63,8 @@ export const createContext = name => {
51
63
  preventDefault = true,
52
64
  stopPropagation = false,
53
65
  relativeToGroup,
54
- position
66
+ position,
67
+ forwardToContext
55
68
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
56
69
  if (isUndefined(group)) {
57
70
  throw new Error('You need to define the shortcut\'s group.');
@@ -75,6 +88,9 @@ export const createContext = name => {
75
88
  if (isDefined(relativeToGroup)) {
76
89
  [newShortcut.relativeToGroup, newShortcut.position] = [relativeToGroup, position];
77
90
  }
91
+ if (isContextObject(forwardToContext)) {
92
+ newShortcut.forwardToContext = forwardToContext;
93
+ }
78
94
  keys.forEach(keyCombination => {
79
95
  const normalizedKeys = normalizeKeys(keyCombination);
80
96
  const hasKeyCombination = SHORTCUTS.hasItem(normalizedKeys);
@@ -106,11 +122,12 @@ export const createContext = name => {
106
122
  * @param {Function} [options.callback] A shortcut's action
107
123
  * @param {object} [options.group] A group of shortcuts to which a shortcut belongs
108
124
  * @param {object} [options.runOnlyIf] A condition on which a shortcut's action runs
109
- * @param {object} [options.stopPropagation=true] If set to `true`: stops the event's propagation
125
+ * @param {object} [options.stopPropagation=false] If set to `true`: stops the event's propagation
110
126
  * @param {object} [options.preventDefault=true] If set to `true`: prevents the default behavior
111
127
  * @param {object} [options.position='after'] The order in which a shortcut's action runs:
112
128
  * `'before'` or `'after'` a `relativeToGroup` group of actions
113
129
  * @param {object} [options.relativeToGroup] The name of a group of actions, used to determine an action's `position`
130
+ * @param {object} [options.forwardToContext] The context object where the event will be forwarded to.
114
131
  */
115
132
  const addShortcuts = function (shortcuts) {
116
133
  let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -186,6 +203,7 @@ export const createContext = name => {
186
203
  return SHORTCUTS.hasItem(normalizedKeys);
187
204
  };
188
205
  return {
206
+ __kindOf,
189
207
  addShortcut,
190
208
  addShortcuts,
191
209
  getShortcuts,
@@ -3,11 +3,11 @@
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.error.cause.js");
5
5
  var _uniqueMap = require("../utils/dataStructures/uniqueMap");
6
+ var _event = require("../helpers/dom/event");
6
7
  var _context = require("./context");
7
8
  var _recorder = require("./recorder");
8
9
  var _templateLiteralTag = require("../helpers/templateLiteralTag");
9
10
  /* eslint-disable jsdoc/require-description-complete-sentence */
10
-
11
11
  /**
12
12
  * The `ShortcutManager` API lets you store and manage [keyboard shortcut contexts](@/guides/accessories-and-menus/keyboard-shortcuts.md#keyboard-shortcut-contexts) ([`ShortcutContext`](@/api/shortcutContext.md)).
13
13
  *
@@ -103,12 +103,18 @@ const createShortcutManager = _ref => {
103
103
  let isCtrlKeySilenced = false;
104
104
 
105
105
  /**
106
- * Internal key recorder.
106
+ * A callback function for listening events from the recorder.
107
107
  *
108
- * @private
108
+ * @param {KeyboardEvent} event The keyboard event.
109
+ * @param {string[]} keys Names of the shortcut's keys,
110
+ * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),
111
+ * in lowercase or uppercase, unified across browsers.
112
+ * @param {object | string} context The context object or name.
113
+ * @returns {boolean}
109
114
  */
110
- const keyRecorder = (0, _recorder.useRecorder)(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, (event, keys) => {
111
- const activeContext = getContext(getActiveContextName());
115
+ const recorderCallback = function (event, keys) {
116
+ let context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getActiveContextName();
117
+ const activeContext = (0, _context.isContextObject)(context) ? context : getContext(context);
112
118
  let isExecutionCancelled = false;
113
119
  if (!activeContext.hasShortcut(keys)) {
114
120
  return isExecutionCancelled;
@@ -122,7 +128,8 @@ const createShortcutManager = _ref => {
122
128
  runOnlyIf,
123
129
  preventDefault,
124
130
  stopPropagation,
125
- captureCtrl
131
+ captureCtrl,
132
+ forwardToContext
126
133
  } = shortcuts[index];
127
134
  if (runOnlyIf(event) !== false) {
128
135
  isCtrlKeySilenced = captureCtrl;
@@ -132,15 +139,26 @@ const createShortcutManager = _ref => {
132
139
  event.preventDefault();
133
140
  }
134
141
  if (stopPropagation) {
142
+ (0, _event.stopImmediatePropagation)(event);
135
143
  event.stopPropagation();
136
144
  }
137
145
  if (isExecutionCancelled) {
138
146
  break;
139
147
  }
148
+ if (forwardToContext) {
149
+ recorderCallback(event, keys, forwardToContext);
150
+ }
140
151
  }
141
152
  }
142
153
  return isExecutionCancelled;
143
- });
154
+ };
155
+
156
+ /**
157
+ * Internal key recorder.
158
+ *
159
+ * @private
160
+ */
161
+ const keyRecorder = (0, _recorder.useRecorder)(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, recorderCallback);
144
162
  keyRecorder.mount();
145
163
  return {
146
164
  addContext,
@@ -1,6 +1,7 @@
1
1
  import "core-js/modules/es.error.cause.js";
2
2
  import { createUniqueMap } from "../utils/dataStructures/uniqueMap.mjs";
3
- import { createContext } from "./context.mjs";
3
+ import { stopImmediatePropagation } from "../helpers/dom/event.mjs";
4
+ import { createContext, isContextObject } from "./context.mjs";
4
5
  import { useRecorder } from "./recorder.mjs";
5
6
  import { toSingleLine } from "../helpers/templateLiteralTag.mjs";
6
7
  /* eslint-disable jsdoc/require-description-complete-sentence */
@@ -99,12 +100,18 @@ export const createShortcutManager = _ref => {
99
100
  let isCtrlKeySilenced = false;
100
101
 
101
102
  /**
102
- * Internal key recorder.
103
+ * A callback function for listening events from the recorder.
103
104
  *
104
- * @private
105
+ * @param {KeyboardEvent} event The keyboard event.
106
+ * @param {string[]} keys Names of the shortcut's keys,
107
+ * (coming from [`KeyboardEvent.key`](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)),
108
+ * in lowercase or uppercase, unified across browsers.
109
+ * @param {object | string} context The context object or name.
110
+ * @returns {boolean}
105
111
  */
106
- const keyRecorder = useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, (event, keys) => {
107
- const activeContext = getContext(getActiveContextName());
112
+ const recorderCallback = function (event, keys) {
113
+ let context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getActiveContextName();
114
+ const activeContext = isContextObject(context) ? context : getContext(context);
108
115
  let isExecutionCancelled = false;
109
116
  if (!activeContext.hasShortcut(keys)) {
110
117
  return isExecutionCancelled;
@@ -118,7 +125,8 @@ export const createShortcutManager = _ref => {
118
125
  runOnlyIf,
119
126
  preventDefault,
120
127
  stopPropagation,
121
- captureCtrl
128
+ captureCtrl,
129
+ forwardToContext
122
130
  } = shortcuts[index];
123
131
  if (runOnlyIf(event) !== false) {
124
132
  isCtrlKeySilenced = captureCtrl;
@@ -128,15 +136,26 @@ export const createShortcutManager = _ref => {
128
136
  event.preventDefault();
129
137
  }
130
138
  if (stopPropagation) {
139
+ stopImmediatePropagation(event);
131
140
  event.stopPropagation();
132
141
  }
133
142
  if (isExecutionCancelled) {
134
143
  break;
135
144
  }
145
+ if (forwardToContext) {
146
+ recorderCallback(event, keys, forwardToContext);
147
+ }
136
148
  }
137
149
  }
138
150
  return isExecutionCancelled;
139
- });
151
+ };
152
+
153
+ /**
154
+ * Internal key recorder.
155
+ *
156
+ * @private
157
+ */
158
+ const keyRecorder = useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, recorderCallback);
140
159
  keyRecorder.mount();
141
160
  return {
142
161
  addContext,
@@ -87,7 +87,7 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
87
87
  if (event.keyCode === 229 || result === false || (0, _event.isImmediatePropagationStopped)(event)) {
88
88
  return;
89
89
  }
90
- const pressedKey = (0, _utils.normalizeEventKey)(event.key);
90
+ const pressedKey = (0, _utils.normalizeEventKey)(event);
91
91
  let extraModifierKeys = [];
92
92
  if (!isModifierKey(pressedKey)) {
93
93
  extraModifierKeys = getPressedModifierKeys(event);
@@ -108,7 +108,7 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
108
108
  * @param {KeyboardEvent} event The event object
109
109
  */
110
110
  const onkeydownForModKeys = event => {
111
- const pressedKey = (0, _utils.normalizeEventKey)(event.key);
111
+ const pressedKey = (0, _utils.normalizeEventKey)(event);
112
112
  if (isModifierKey(pressedKey)) {
113
113
  modifierKeysObserver.press(pressedKey);
114
114
  }
@@ -121,7 +121,7 @@ function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDown, call
121
121
  * @param {KeyboardEvent} event The event object
122
122
  */
123
123
  const onkeyupForModKeys = event => {
124
- const pressedKey = (0, _utils.normalizeEventKey)(event.key);
124
+ const pressedKey = (0, _utils.normalizeEventKey)(event);
125
125
  if (isModifierKey(pressedKey)) {
126
126
  modifierKeysObserver.release(pressedKey);
127
127
  }
@@ -83,7 +83,7 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
83
83
  if (event.keyCode === 229 || result === false || isImmediatePropagationStopped(event)) {
84
84
  return;
85
85
  }
86
- const pressedKey = normalizeEventKey(event.key);
86
+ const pressedKey = normalizeEventKey(event);
87
87
  let extraModifierKeys = [];
88
88
  if (!isModifierKey(pressedKey)) {
89
89
  extraModifierKeys = getPressedModifierKeys(event);
@@ -104,7 +104,7 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
104
104
  * @param {KeyboardEvent} event The event object
105
105
  */
106
106
  const onkeydownForModKeys = event => {
107
- const pressedKey = normalizeEventKey(event.key);
107
+ const pressedKey = normalizeEventKey(event);
108
108
  if (isModifierKey(pressedKey)) {
109
109
  modifierKeysObserver.press(pressedKey);
110
110
  }
@@ -117,7 +117,7 @@ export function useRecorder(ownerWindow, handleEvent, beforeKeyDown, afterKeyDow
117
117
  * @param {KeyboardEvent} event The event object
118
118
  */
119
119
  const onkeyupForModKeys = event => {
120
- const pressedKey = normalizeEventKey(event.key);
120
+ const pressedKey = normalizeEventKey(event);
121
121
  if (isModifierKey(pressedKey)) {
122
122
  modifierKeysObserver.release(pressedKey);
123
123
  }
@@ -37,13 +37,27 @@ const getKeysList = normalizedKeys => {
37
37
  };
38
38
 
39
39
  /**
40
- * Normalize a `KeyboardEvent.key` property, to use it for keyboard shortcuts.
40
+ * The regex tests if the event.code matches to the pattern and it's used to extract letters and digits from
41
+ * the string.
42
+ */
43
+ exports.getKeysList = getKeysList;
44
+ const codeToKeyRegExp = new RegExp('^(?:Key|Digit)([A-Z0-9])$');
45
+
46
+ /**
47
+ * Normalizes a keyboard event key value to a key before its modification. When the keyboard event
48
+ * is triggered with Alt, Control or Shift keys the `key` property contains modified key e.g. for Alt+L
49
+ * it will be `ł`. But that value is only valid for polish keyboard layout. To fix that limitations, for
50
+ * letters and digits the value is taken from the `code` property which holds original value before
51
+ * transformation.
41
52
  *
42
- * @param {string} key KeyboardEvent's key property.
53
+ * @param {Event} event The KeyboardEvent object.
43
54
  * @returns {string}
44
55
  */
45
- exports.getKeysList = getKeysList;
46
- const normalizeEventKey = key => {
47
- return key.toLowerCase();
56
+ const normalizeEventKey = _ref => {
57
+ let {
58
+ key,
59
+ code
60
+ } = _ref;
61
+ return (codeToKeyRegExp.test(code) ? code.replace(codeToKeyRegExp, '$1') : key).toLowerCase();
48
62
  };
49
63
  exports.normalizeEventKey = normalizeEventKey;
@@ -33,11 +33,25 @@ export const getKeysList = normalizedKeys => {
33
33
  };
34
34
 
35
35
  /**
36
- * Normalize a `KeyboardEvent.key` property, to use it for keyboard shortcuts.
36
+ * The regex tests if the event.code matches to the pattern and it's used to extract letters and digits from
37
+ * the string.
38
+ */
39
+ const codeToKeyRegExp = new RegExp('^(?:Key|Digit)([A-Z0-9])$');
40
+
41
+ /**
42
+ * Normalizes a keyboard event key value to a key before its modification. When the keyboard event
43
+ * is triggered with Alt, Control or Shift keys the `key` property contains modified key e.g. for Alt+L
44
+ * it will be `ł`. But that value is only valid for polish keyboard layout. To fix that limitations, for
45
+ * letters and digits the value is taken from the `code` property which holds original value before
46
+ * transformation.
37
47
  *
38
- * @param {string} key KeyboardEvent's key property.
48
+ * @param {Event} event The KeyboardEvent object.
39
49
  * @returns {string}
40
50
  */
41
- export const normalizeEventKey = key => {
42
- return key.toLowerCase();
51
+ export const normalizeEventKey = _ref => {
52
+ let {
53
+ key,
54
+ code
55
+ } = _ref;
56
+ return (codeToKeyRegExp.test(code) ? code.replace(codeToKeyRegExp, '$1') : key).toLowerCase();
43
57
  };
package/tableView.js CHANGED
@@ -9,6 +9,7 @@ var _event = require("./helpers/dom/event");
9
9
  var _src = _interopRequireDefault(require("./3rdparty/walkontable/src"));
10
10
  var _mouseEventHandler = require("./selection/mouseEventHandler");
11
11
  var _rootInstance = require("./utils/rootInstance");
12
+ var _a11y = require("./helpers/a11y");
12
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
14
15
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
@@ -259,6 +260,10 @@ class TableView {
259
260
  if (this.instance.getSettings().tableClassName) {
260
261
  (0, _element.addClass)(priv.table, this.instance.getSettings().tableClassName);
261
262
  }
263
+ if (this.settings.ariaTags) {
264
+ (0, _element.setAttribute)(priv.table, [(0, _a11y.A11Y_PRESENTATION)()]);
265
+ (0, _element.setAttribute)(rootElement, [(0, _a11y.A11Y_TREEGRID)(), (0, _a11y.A11Y_ROWCOUNT)(this.instance.countRows()), (0, _a11y.A11Y_COLCOUNT)(this.instance.countCols()), (0, _a11y.A11Y_MULTISELECTABLE)()]);
266
+ }
262
267
  this.THEAD = rootDocument.createElement('THEAD');
263
268
  priv.table.appendChild(this.THEAD);
264
269
  this.TBODY = rootDocument.createElement('TBODY');
@@ -312,11 +317,14 @@ class TableView {
312
317
  });
313
318
  this.eventManager.addEventListener(documentElement, 'mouseup', event => {
314
319
  if (selection.isInProgress() && (0, _event.isLeftClick)(event)) {
315
- // is left mouse button
316
320
  selection.finish();
317
321
  }
318
322
  priv.mouseDown = false;
319
- if ((0, _element.isOutsideInput)(rootDocument.activeElement) || !selection.isSelected() && !selection.isSelectedByAnyHeader() && !rootElement.contains(event.target) && !(0, _event.isRightClick)(event)) {
323
+ const isOutsideInputElement = (0, _element.isOutsideInput)(rootDocument.activeElement);
324
+ if (!isOutsideInputElement) {
325
+ return;
326
+ }
327
+ if (isOutsideInputElement || !selection.isSelected() && !selection.isSelectedByAnyHeader() && !rootElement.contains(event.target) && !(0, _event.isRightClick)(event)) {
320
328
  this.instance.unlisten();
321
329
  }
322
330
  });
@@ -550,6 +558,40 @@ class TableView {
550
558
  return this.countNotHiddenRowIndexes(visualFixedRowsBottom, 1);
551
559
  }
552
560
 
561
+ /**
562
+ * The function returns the number of renderable column indexes within the passed range of the visual indexes.
563
+ *
564
+ * @param {number} columnStart The column visual start index.
565
+ * @param {number} columnEnd The column visual end index.
566
+ * @returns {number}
567
+ */
568
+ countRenderableColumnsInRange(columnStart, columnEnd) {
569
+ let count = 0;
570
+ for (let column = columnStart; column <= columnEnd; column++) {
571
+ if (this.instance.columnIndexMapper.getRenderableFromVisualIndex(column) !== null) {
572
+ count += 1;
573
+ }
574
+ }
575
+ return count;
576
+ }
577
+
578
+ /**
579
+ * The function returns the number of renderable row indexes within the passed range of the visual indexes.
580
+ *
581
+ * @param {number} rowStart The row visual start index.
582
+ * @param {number} rowEnd The row visual end index.
583
+ * @returns {number}
584
+ */
585
+ countRenderableRowsInRange(rowStart, rowEnd) {
586
+ let count = 0;
587
+ for (let row = rowStart; row <= rowEnd; row++) {
588
+ if (this.instance.rowIndexMapper.getRenderableFromVisualIndex(row) !== null) {
589
+ count += 1;
590
+ }
591
+ }
592
+ return count;
593
+ }
594
+
553
595
  /**
554
596
  * Checks if at least one cell than belongs to the main table is not covered by the top, left or
555
597
  * bottom overlay.
@@ -570,6 +612,7 @@ class TableView {
570
612
  initializeWalkontable() {
571
613
  const priv = privatePool.get(this);
572
614
  const walkontableConfig = {
615
+ ariaTags: this.settings.ariaTags,
573
616
  rtlMode: this.instance.isRtl(),
574
617
  externalRowCalculator: this.instance.getPlugin('autoRowSize') && this.instance.getPlugin('autoRowSize').isEnabled(),
575
618
  table: priv.table,
@@ -769,20 +812,78 @@ class TableView {
769
812
  },
770
813
  beforeDraw: (force, skipRender) => this.beforeRender(force, skipRender),
771
814
  onDraw: force => this.afterRender(force),
772
- onScrollVertically: () => this.instance.runHooks('afterScrollVertically'),
773
- onScrollHorizontally: () => this.instance.runHooks('afterScrollHorizontally'),
815
+ onBeforeViewportScrollVertically: renderableRow => {
816
+ const rowMapper = this.instance.rowIndexMapper;
817
+ const areColumnHeadersSelected = renderableRow < 0;
818
+ let visualRow = renderableRow;
819
+ if (!areColumnHeadersSelected) {
820
+ visualRow = rowMapper.getVisualFromRenderableIndex(renderableRow);
821
+
822
+ // for an empty data return index as is
823
+ if (visualRow === null) {
824
+ return renderableRow;
825
+ }
826
+ }
827
+ visualRow = this.instance.runHooks('beforeViewportScrollVertically', visualRow);
828
+ this.instance.runHooks('beforeViewportScroll');
829
+ if (!areColumnHeadersSelected) {
830
+ return rowMapper.getRenderableFromVisualIndex(visualRow);
831
+ }
832
+ return visualRow;
833
+ },
834
+ onBeforeViewportScrollHorizontally: renderableColumn => {
835
+ const columnMapper = this.instance.columnIndexMapper;
836
+ const areRowHeadersSelected = renderableColumn < 0;
837
+ let visualColumn = renderableColumn;
838
+ if (!areRowHeadersSelected) {
839
+ visualColumn = columnMapper.getVisualFromRenderableIndex(renderableColumn);
840
+
841
+ // for an empty data return index as is
842
+ if (visualColumn === null) {
843
+ return renderableColumn;
844
+ }
845
+ }
846
+ visualColumn = this.instance.runHooks('beforeViewportScrollHorizontally', visualColumn);
847
+ this.instance.runHooks('beforeViewportScroll');
848
+ if (!areRowHeadersSelected) {
849
+ return columnMapper.getRenderableFromVisualIndex(visualColumn);
850
+ }
851
+ return visualColumn;
852
+ },
853
+ onScrollVertically: () => {
854
+ this.instance.runHooks('afterScrollVertically');
855
+ this.instance.runHooks('afterScroll');
856
+ },
857
+ onScrollHorizontally: () => {
858
+ this.instance.runHooks('afterScrollHorizontally');
859
+ this.instance.runHooks('afterScroll');
860
+ },
774
861
  onBeforeRemoveCellClassNames: () => this.instance.runHooks('beforeRemoveCellClassNames'),
775
862
  onBeforeHighlightingRowHeader: (renderableRow, headerLevel, highlightMeta) => {
776
863
  const rowMapper = this.instance.rowIndexMapper;
777
- const visualRow = rowMapper.getVisualFromRenderableIndex(renderableRow);
864
+ const areColumnHeadersSelected = renderableRow < 0;
865
+ let visualRow = renderableRow;
866
+ if (!areColumnHeadersSelected) {
867
+ visualRow = rowMapper.getVisualFromRenderableIndex(renderableRow);
868
+ }
778
869
  const newVisualRow = this.instance.runHooks('beforeHighlightingRowHeader', visualRow, headerLevel, highlightMeta);
779
- return rowMapper.getRenderableFromVisualIndex(rowMapper.getNearestNotHiddenIndex(newVisualRow, 1));
870
+ if (!areColumnHeadersSelected) {
871
+ return rowMapper.getRenderableFromVisualIndex(rowMapper.getNearestNotHiddenIndex(newVisualRow, 1));
872
+ }
873
+ return newVisualRow;
780
874
  },
781
875
  onBeforeHighlightingColumnHeader: (renderableColumn, headerLevel, highlightMeta) => {
782
876
  const columnMapper = this.instance.columnIndexMapper;
783
- const visualColumn = columnMapper.getVisualFromRenderableIndex(renderableColumn);
877
+ const areRowHeadersSelected = renderableColumn < 0;
878
+ let visualColumn = renderableColumn;
879
+ if (!areRowHeadersSelected) {
880
+ visualColumn = columnMapper.getVisualFromRenderableIndex(renderableColumn);
881
+ }
784
882
  const newVisualColumn = this.instance.runHooks('beforeHighlightingColumnHeader', visualColumn, headerLevel, highlightMeta);
785
- return columnMapper.getRenderableFromVisualIndex(columnMapper.getNearestNotHiddenIndex(newVisualColumn, 1));
883
+ if (!areRowHeadersSelected) {
884
+ return columnMapper.getRenderableFromVisualIndex(columnMapper.getNearestNotHiddenIndex(newVisualColumn, 1));
885
+ }
886
+ return newVisualColumn;
786
887
  },
787
888
  onAfterDrawSelection: (currentRow, currentColumn, layerLevel) => {
788
889
  let cornersOfSelection;
@@ -790,10 +891,7 @@ class TableView {
790
891
  const selectedRange = this.instance.selection.getSelectedRange();
791
892
  const selectionRangeSize = selectedRange.size();
792
893
  if (selectionRangeSize > 0) {
793
- // Selection layers are stored from the "oldest" to the "newest". We should calculate the offset.
794
- // Please look at the `SelectedRange` class and it's method for getting selection's layer for more information.
795
- const selectionOffset = (layerLevel !== null && layerLevel !== void 0 ? layerLevel : 0) + 1 - selectionRangeSize;
796
- const selectionForLayer = selectedRange.peekByIndex(selectionOffset);
894
+ const selectionForLayer = selectedRange.peekByIndex(layerLevel !== null && layerLevel !== void 0 ? layerLevel : 0);
797
895
  cornersOfSelection = [selectionForLayer.from.row, selectionForLayer.from.col, selectionForLayer.to.row, selectionForLayer.to.col];
798
896
  }
799
897
  return this.instance.runHooks('afterDrawSelection', visualRowIndex, visualColumnIndex, cornersOfSelection, layerLevel);
@@ -946,7 +1044,7 @@ class TableView {
946
1044
  */
947
1045
  isSelectedOnlyCell() {
948
1046
  var _this$instance$getSel, _this$instance$getSel2;
949
- return (_this$instance$getSel = (_this$instance$getSel2 = this.instance.getSelectedRangeLast()) === null || _this$instance$getSel2 === void 0 ? void 0 : _this$instance$getSel2.isSingle()) !== null && _this$instance$getSel !== void 0 ? _this$instance$getSel : false;
1047
+ return (_this$instance$getSel = (_this$instance$getSel2 = this.instance.getSelectedRangeLast()) === null || _this$instance$getSel2 === void 0 ? void 0 : _this$instance$getSel2.isSingleCell()) !== null && _this$instance$getSel !== void 0 ? _this$instance$getSel : false;
950
1048
  }
951
1049
 
952
1050
  /**