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

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

Potentially problematic release.


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

Files changed (414) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +50 -11
  3. package/3rdparty/walkontable/src/cell/coords.mjs +50 -11
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +38 -7
  6. package/3rdparty/walkontable/src/cell/range.mjs +38 -7
  7. package/3rdparty/walkontable/src/core/_base.js +9 -3
  8. package/3rdparty/walkontable/src/core/_base.mjs +9 -3
  9. package/3rdparty/walkontable/src/core/clone.js +2 -2
  10. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  11. package/3rdparty/walkontable/src/core/core.js +3 -2
  12. package/3rdparty/walkontable/src/core/core.mjs +3 -2
  13. package/3rdparty/walkontable/src/event.js +12 -10
  14. package/3rdparty/walkontable/src/event.mjs +12 -10
  15. package/3rdparty/walkontable/src/facade/core.js +2 -2
  16. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  17. package/3rdparty/walkontable/src/index.js +10 -2
  18. package/3rdparty/walkontable/src/index.mjs +2 -2
  19. package/3rdparty/walkontable/src/overlay/_base.js +13 -2
  20. package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
  21. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
  22. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
  23. package/3rdparty/walkontable/src/overlay/top.js +2 -6
  24. package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
  25. package/3rdparty/walkontable/src/renderer/cells.js +10 -0
  26. package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
  27. package/3rdparty/walkontable/src/renderer/columnHeaders.js +10 -0
  28. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +11 -1
  29. package/3rdparty/walkontable/src/renderer/rowHeaders.js +5 -0
  30. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +5 -0
  31. package/3rdparty/walkontable/src/renderer/rows.js +13 -0
  32. package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
  33. package/3rdparty/walkontable/src/renderer/table.js +9 -0
  34. package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
  35. package/3rdparty/walkontable/src/scroll.js +2 -0
  36. package/3rdparty/walkontable/src/scroll.mjs +2 -0
  37. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
  38. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  39. package/3rdparty/walkontable/src/selection/border/constants.js +16 -0
  40. package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
  41. package/3rdparty/walkontable/src/selection/constants.js +62 -0
  42. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  43. package/3rdparty/walkontable/src/selection/index.js +26 -0
  44. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  45. package/3rdparty/walkontable/src/selection/manager.js +274 -0
  46. package/3rdparty/walkontable/src/selection/manager.mjs +269 -0
  47. package/3rdparty/walkontable/src/selection/scanner.js +270 -0
  48. package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
  49. package/3rdparty/walkontable/src/selection/selection.js +101 -0
  50. package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
  51. package/3rdparty/walkontable/src/settings.js +13 -4
  52. package/3rdparty/walkontable/src/settings.mjs +13 -4
  53. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
  54. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  55. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
  56. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  57. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
  58. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  59. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
  60. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  61. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
  62. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  63. package/3rdparty/walkontable/src/table.js +19 -78
  64. package/3rdparty/walkontable/src/table.mjs +20 -79
  65. package/base.js +2 -2
  66. package/base.mjs +2 -2
  67. package/cellTypes/dateType/dateType.d.ts +3 -3
  68. package/cellTypes/dateType/dateType.js +2 -2
  69. package/cellTypes/dateType/dateType.mjs +2 -2
  70. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  71. package/cellTypes/handsontableType/handsontableType.js +2 -2
  72. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  73. package/cellTypes/index.d.ts +3 -0
  74. package/cellTypes/index.js +4 -0
  75. package/cellTypes/index.mjs +3 -1
  76. package/cellTypes/selectType/index.d.ts +1 -0
  77. package/cellTypes/selectType/index.js +6 -0
  78. package/cellTypes/selectType/index.mjs +1 -0
  79. package/cellTypes/selectType/selectType.d.ts +14 -0
  80. package/cellTypes/selectType/selectType.js +13 -0
  81. package/cellTypes/selectType/selectType.mjs +8 -0
  82. package/core/focusCatcher/focusDetector.js +63 -0
  83. package/core/focusCatcher/focusDetector.mjs +59 -0
  84. package/core/focusCatcher/index.js +142 -0
  85. package/core/focusCatcher/index.mjs +138 -0
  86. package/core/index.js +9 -0
  87. package/core/index.mjs +1 -0
  88. package/core.d.ts +9 -4
  89. package/core.js +285 -327
  90. package/core.mjs +285 -327
  91. package/dataMap/metaManager/metaSchema.js +65 -0
  92. package/dataMap/metaManager/metaSchema.mjs +65 -0
  93. package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
  94. package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
  95. package/dataMap/replaceData.js +5 -0
  96. package/dataMap/replaceData.mjs +5 -0
  97. package/dist/handsontable.css +40 -5
  98. package/dist/handsontable.full.css +40 -5
  99. package/dist/handsontable.full.js +11744 -6945
  100. package/dist/handsontable.full.min.css +4 -4
  101. package/dist/handsontable.full.min.js +141 -141
  102. package/dist/handsontable.js +14036 -9237
  103. package/dist/handsontable.min.css +3 -3
  104. package/dist/handsontable.min.js +21 -21
  105. package/dist/languages/all.js +6 -2
  106. package/dist/languages/all.min.js +1 -1
  107. package/dist/languages/en-US.js +3 -1
  108. package/dist/languages/en-US.min.js +1 -1
  109. package/dist/languages/pl-PL.js +3 -1
  110. package/dist/languages/pl-PL.min.js +1 -1
  111. package/editorManager.js +15 -87
  112. package/editorManager.mjs +16 -87
  113. package/editors/autocompleteEditor/autocompleteEditor.js +53 -2
  114. package/editors/autocompleteEditor/autocompleteEditor.mjs +54 -3
  115. package/editors/dateEditor/dateEditor.js +26 -7
  116. package/editors/dateEditor/dateEditor.mjs +27 -8
  117. package/editors/handsontableEditor/handsontableEditor.js +9 -1
  118. package/editors/handsontableEditor/handsontableEditor.mjs +10 -2
  119. package/editors/textEditor/textEditor.js +19 -27
  120. package/editors/textEditor/textEditor.mjs +22 -30
  121. package/focusManager.d.ts +12 -0
  122. package/focusManager.js +265 -0
  123. package/focusManager.mjs +261 -0
  124. package/helpers/a11y.js +79 -0
  125. package/helpers/a11y.mjs +38 -0
  126. package/helpers/dom/element.js +188 -9
  127. package/helpers/dom/element.mjs +182 -9
  128. package/helpers/mixed.js +1 -1
  129. package/helpers/mixed.mjs +1 -1
  130. package/helpers/number.d.ts +1 -0
  131. package/helpers/number.js +18 -0
  132. package/helpers/number.mjs +17 -0
  133. package/i18n/constants.js +7 -1
  134. package/i18n/constants.mjs +4 -1
  135. package/i18n/languages/en-US.js +3 -1
  136. package/i18n/languages/en-US.mjs +3 -1
  137. package/i18n/languages/pl-PL.js +3 -1
  138. package/i18n/languages/pl-PL.mjs +3 -1
  139. package/languages/all.js +6 -2
  140. package/languages/en-US.js +3 -1
  141. package/languages/en-US.mjs +3 -1
  142. package/languages/index.js +6 -2
  143. package/languages/pl-PL.js +3 -1
  144. package/languages/pl-PL.mjs +3 -1
  145. package/package.json +21 -1
  146. package/pluginHooks.d.ts +12 -1
  147. package/pluginHooks.js +152 -1
  148. package/pluginHooks.mjs +152 -1
  149. package/plugins/collapsibleColumns/collapsibleColumns.js +74 -4
  150. package/plugins/collapsibleColumns/collapsibleColumns.mjs +75 -5
  151. package/plugins/columnSorting/columnSorting.js +43 -0
  152. package/plugins/columnSorting/columnSorting.mjs +44 -3
  153. package/plugins/columnSorting/index.js +3 -1
  154. package/plugins/columnSorting/index.mjs +1 -1
  155. package/plugins/comments/commentEditor.js +1 -0
  156. package/plugins/comments/commentEditor.mjs +1 -0
  157. package/plugins/comments/comments.js +252 -189
  158. package/plugins/comments/comments.mjs +251 -190
  159. package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
  160. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  161. package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
  162. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
  163. package/plugins/comments/contextMenuItem/removeComment.js +38 -0
  164. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  165. package/plugins/contextMenu/commandExecutor.js +2 -3
  166. package/plugins/contextMenu/commandExecutor.mjs +2 -3
  167. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  168. package/plugins/contextMenu/contextMenu.js +75 -36
  169. package/plugins/contextMenu/contextMenu.mjs +74 -35
  170. package/plugins/contextMenu/itemsFactory.js +2 -3
  171. package/plugins/contextMenu/itemsFactory.mjs +3 -4
  172. package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
  173. package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
  174. package/plugins/contextMenu/menu/index.js +9 -0
  175. package/plugins/contextMenu/menu/index.mjs +1 -0
  176. package/plugins/contextMenu/{menu.js → menu/menu.js} +96 -308
  177. package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +97 -309
  178. package/plugins/contextMenu/menu/navigator.js +152 -0
  179. package/plugins/contextMenu/menu/navigator.mjs +148 -0
  180. package/plugins/contextMenu/menu/positioner.js +213 -0
  181. package/plugins/contextMenu/menu/positioner.mjs +209 -0
  182. package/plugins/contextMenu/menu/utils.js +177 -0
  183. package/plugins/contextMenu/menu/utils.mjs +163 -0
  184. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  185. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  186. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  187. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  188. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  189. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  190. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  191. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  192. package/plugins/contextMenu/{predefinedItems.js → predefinedItems/index.js} +14 -14
  193. package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
  194. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  195. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  196. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  197. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  198. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  199. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  200. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  201. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  202. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  203. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  204. package/plugins/contextMenu/utils.js +35 -151
  205. package/plugins/contextMenu/utils.mjs +35 -144
  206. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  207. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  208. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  209. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  210. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  211. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  212. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  213. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  214. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  215. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  216. package/plugins/copyPaste/copyPaste.js +127 -78
  217. package/plugins/copyPaste/copyPaste.mjs +128 -79
  218. package/plugins/customBorders/customBorders.js +23 -20
  219. package/plugins/customBorders/customBorders.mjs +24 -21
  220. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  221. package/plugins/dropdownMenu/dropdownMenu.js +97 -38
  222. package/plugins/dropdownMenu/dropdownMenu.mjs +96 -37
  223. package/plugins/filters/constants.mjs +1 -1
  224. package/plugins/filters/filters.js +31 -14
  225. package/plugins/filters/filters.mjs +31 -14
  226. package/plugins/filters/ui/select.js +3 -3
  227. package/plugins/filters/ui/select.mjs +2 -2
  228. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  229. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  230. package/plugins/manualColumnMove/manualColumnMove.js +3 -1
  231. package/plugins/manualColumnMove/manualColumnMove.mjs +3 -1
  232. package/plugins/mergeCells/mergeCells.js +5 -16
  233. package/plugins/mergeCells/mergeCells.mjs +5 -16
  234. package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
  235. package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
  236. package/plugins/nestedHeaders/nestedHeaders.js +240 -10
  237. package/plugins/nestedHeaders/nestedHeaders.mjs +241 -11
  238. package/plugins/nestedHeaders/stateManager/index.js +102 -3
  239. package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
  240. package/plugins/nestedRows/nestedRows.js +41 -0
  241. package/plugins/nestedRows/nestedRows.mjs +41 -0
  242. package/plugins/nestedRows/ui/headers.js +11 -0
  243. package/plugins/nestedRows/ui/headers.mjs +12 -1
  244. package/renderers/autocompleteRenderer/autocompleteRenderer.js +8 -0
  245. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
  246. package/renderers/baseRenderer/baseRenderer.js +17 -0
  247. package/renderers/baseRenderer/baseRenderer.mjs +18 -1
  248. package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
  249. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  250. package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
  251. package/renderers/dateRenderer/dateRenderer.js +29 -0
  252. package/renderers/dateRenderer/dateRenderer.mjs +24 -0
  253. package/renderers/dateRenderer/index.d.ts +1 -0
  254. package/renderers/dateRenderer/index.js +6 -0
  255. package/renderers/dateRenderer/index.mjs +1 -0
  256. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
  257. package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
  258. package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
  259. package/renderers/handsontableRenderer/index.d.ts +1 -0
  260. package/renderers/handsontableRenderer/index.js +6 -0
  261. package/renderers/handsontableRenderer/index.mjs +1 -0
  262. package/renderers/index.d.ts +9 -0
  263. package/renderers/selectRenderer/index.d.ts +1 -0
  264. package/renderers/selectRenderer/index.js +6 -0
  265. package/renderers/selectRenderer/index.mjs +1 -0
  266. package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
  267. package/renderers/selectRenderer/selectRenderer.js +27 -0
  268. package/renderers/selectRenderer/selectRenderer.mjs +22 -0
  269. package/selection/highlight/highlight.js +256 -71
  270. package/selection/highlight/highlight.mjs +250 -71
  271. package/selection/highlight/types/activeHeader.js +10 -8
  272. package/selection/highlight/types/activeHeader.mjs +10 -8
  273. package/selection/highlight/types/area.js +6 -18
  274. package/selection/highlight/types/area.mjs +6 -18
  275. package/selection/highlight/types/areaLayered.js +31 -0
  276. package/selection/highlight/types/areaLayered.mjs +26 -0
  277. package/selection/highlight/types/column.js +27 -0
  278. package/selection/highlight/types/column.mjs +22 -0
  279. package/selection/highlight/types/customSelection.js +7 -9
  280. package/selection/highlight/types/customSelection.mjs +7 -9
  281. package/selection/highlight/types/fill.js +5 -7
  282. package/selection/highlight/types/fill.mjs +5 -7
  283. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  284. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  285. package/selection/highlight/types/header.js +9 -18
  286. package/selection/highlight/types/header.mjs +9 -18
  287. package/selection/highlight/types/row.js +27 -0
  288. package/selection/highlight/types/row.mjs +22 -0
  289. package/selection/highlight/visualSelection.js +31 -27
  290. package/selection/highlight/visualSelection.mjs +31 -27
  291. package/selection/index.js +4 -7
  292. package/selection/index.mjs +2 -3
  293. package/selection/mouseEventHandler.js +7 -1
  294. package/selection/mouseEventHandler.mjs +7 -1
  295. package/selection/range.js +8 -8
  296. package/selection/range.mjs +8 -8
  297. package/selection/selection.js +321 -152
  298. package/selection/selection.mjs +318 -151
  299. package/selection/transformation.js +232 -90
  300. package/selection/transformation.mjs +232 -90
  301. package/selection/utils.js +15 -21
  302. package/selection/utils.mjs +16 -21
  303. package/settings.d.ts +4 -0
  304. package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
  305. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  306. package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
  307. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  308. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  309. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  310. package/shortcutContexts/commands/editor/index.js +16 -0
  311. package/shortcutContexts/commands/editor/index.mjs +12 -0
  312. package/shortcutContexts/commands/editor/open.js +27 -0
  313. package/shortcutContexts/commands/editor/open.mjs +23 -0
  314. package/shortcutContexts/commands/emptySelectedCells.js +11 -0
  315. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  316. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  317. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  318. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +25 -0
  319. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
  320. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  321. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  322. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  323. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  324. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  325. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  326. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  327. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  328. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
  329. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  330. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
  331. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  332. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
  333. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  334. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
  335. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  336. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
  337. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  338. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
  339. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  340. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  341. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  342. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  343. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  344. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +25 -0
  345. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
  346. package/shortcutContexts/commands/index.js +35 -0
  347. package/shortcutContexts/commands/index.mjs +31 -0
  348. package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
  349. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  350. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +33 -0
  351. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
  352. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  353. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  354. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
  355. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  356. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
  357. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  358. package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
  359. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  360. package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
  361. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  362. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
  363. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  364. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
  365. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  366. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
  367. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  368. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
  369. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  370. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
  371. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  372. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
  373. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  374. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
  375. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  376. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
  377. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  378. package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
  379. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  380. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +33 -0
  381. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
  382. package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
  383. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  384. package/shortcutContexts/commands/scrollToFocusedCell.js +35 -0
  385. package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
  386. package/shortcutContexts/commands/selectAll.js +12 -0
  387. package/shortcutContexts/commands/selectAll.mjs +8 -0
  388. package/shortcutContexts/constants.js +13 -0
  389. package/shortcutContexts/constants.mjs +8 -0
  390. package/shortcutContexts/editor.js +25 -0
  391. package/shortcutContexts/editor.mjs +21 -0
  392. package/shortcutContexts/grid.js +163 -0
  393. package/shortcutContexts/grid.mjs +159 -0
  394. package/shortcutContexts/index.js +24 -0
  395. package/shortcutContexts/index.mjs +11 -0
  396. package/shortcuts/context.js +20 -2
  397. package/shortcuts/context.mjs +20 -3
  398. package/shortcuts/manager.js +25 -7
  399. package/shortcuts/manager.mjs +26 -7
  400. package/shortcuts/recorder.js +3 -3
  401. package/shortcuts/recorder.mjs +3 -3
  402. package/shortcuts/utils.js +19 -5
  403. package/shortcuts/utils.mjs +18 -4
  404. package/tableView.js +111 -13
  405. package/tableView.mjs +112 -14
  406. package/3rdparty/walkontable/src/selection.js +0 -295
  407. package/3rdparty/walkontable/src/selection.mjs +0 -290
  408. package/plugins/contextMenu/predefinedItems.mjs +0 -68
  409. package/plugins/copyPaste/focusableElement.js +0 -186
  410. package/plugins/copyPaste/focusableElement.mjs +0 -180
  411. package/selection/highlight/constants.js +0 -15
  412. package/selection/highlight/constants.mjs +0 -6
  413. package/selection/highlight/types/index.js +0 -35
  414. package/selection/highlight/types/index.mjs +0 -31
@@ -3,13 +3,16 @@
3
3
  exports.__esModule = true;
4
4
  var _base = require("../base");
5
5
  var _array = require("../../helpers/array");
6
- var _commandExecutor = _interopRequireDefault(require("../contextMenu/commandExecutor"));
6
+ var _object = require("../../helpers/object");
7
+ var _commandExecutor = require("../contextMenu/commandExecutor");
8
+ var _utils = require("../contextMenu/utils");
7
9
  var _eventManager = _interopRequireDefault(require("../../eventManager"));
8
10
  var _element = require("../../helpers/dom/element");
9
- var _itemsFactory = _interopRequireDefault(require("../contextMenu/itemsFactory"));
10
- var _menu = _interopRequireDefault(require("../contextMenu/menu"));
11
+ var _itemsFactory = require("../contextMenu/itemsFactory");
12
+ var _menu = require("../contextMenu/menu");
11
13
  var _pluginHooks = _interopRequireDefault(require("../../pluginHooks"));
12
14
  var _predefinedItems = require("../contextMenu/predefinedItems");
15
+ var _a11y = require("../../helpers/a11y");
13
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
17
  _pluginHooks.default.getSingleton().register('afterDropdownMenuDefaultOptions');
15
18
  _pluginHooks.default.getSingleton().register('beforeDropdownMenuShow');
@@ -21,6 +24,7 @@ exports.PLUGIN_KEY = PLUGIN_KEY;
21
24
  const PLUGIN_PRIORITY = 230;
22
25
  exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
23
26
  const BUTTON_CLASS_NAME = 'changeType';
27
+ const SHORTCUTS_GROUP = PLUGIN_KEY;
24
28
 
25
29
  /* eslint-disable jsdoc/require-description-complete-sentence */
26
30
  /**
@@ -107,7 +111,7 @@ class DropdownMenu extends _base.BasePlugin {
107
111
  * @private
108
112
  * @type {CommandExecutor}
109
113
  */
110
- this.commandExecutor = new _commandExecutor.default(this.hot);
114
+ this.commandExecutor = new _commandExecutor.CommandExecutor(this.hot);
111
115
  /**
112
116
  * Instance of {@link ItemsFactory}.
113
117
  *
@@ -148,7 +152,7 @@ class DropdownMenu extends _base.BasePlugin {
148
152
  if (this.enabled) {
149
153
  return;
150
154
  }
151
- this.itemsFactory = new _itemsFactory.default(this.hot, DropdownMenu.DEFAULT_ITEMS);
155
+ this.itemsFactory = new _itemsFactory.ItemsFactory(this.hot, DropdownMenu.DEFAULT_ITEMS);
152
156
  const settings = this.hot.getSettings()[PLUGIN_KEY];
153
157
  const predefinedItems = {
154
158
  items: this.itemsFactory.getItems(settings)
@@ -157,6 +161,7 @@ class DropdownMenu extends _base.BasePlugin {
157
161
  if (typeof settings.callback === 'function') {
158
162
  this.commandExecutor.setCommonCallback(settings.callback);
159
163
  }
164
+ this.registerShortcuts();
160
165
  super.enablePlugin();
161
166
  this.callOnPluginsReady(() => {
162
167
  this.hot.runHooks('afterDropdownMenuDefaultOptions', predefinedItems);
@@ -165,7 +170,7 @@ class DropdownMenu extends _base.BasePlugin {
165
170
  if (this.menu) {
166
171
  this.menu.destroy();
167
172
  }
168
- this.menu = new _menu.default(this.hot, {
173
+ this.menu = new _menu.Menu(this.hot, {
169
174
  className: 'htDropdownMenu',
170
175
  keepInViewport: true,
171
176
  container: settings.uiContainer || this.hot.rootDocument.body
@@ -207,9 +212,66 @@ class DropdownMenu extends _base.BasePlugin {
207
212
  if (this.menu) {
208
213
  this.menu.destroy();
209
214
  }
215
+ this.unregisterShortcuts();
210
216
  super.disablePlugin();
211
217
  }
212
218
 
219
+ /**
220
+ * Register shortcuts responsible for toggling dropdown menu.
221
+ *
222
+ * @private
223
+ */
224
+ registerShortcuts() {
225
+ const context = this.hot.getShortcutManager().getContext('grid');
226
+ const callback = () => {
227
+ const {
228
+ highlight
229
+ } = this.hot.getSelectedRangeLast();
230
+ if ((highlight.isHeader() && highlight.row === -1 || highlight.isCell()) && highlight.col >= 0) {
231
+ this.hot.selectColumns(highlight.col, highlight.col, -1);
232
+ const {
233
+ from
234
+ } = this.hot.getSelectedRangeLast();
235
+ const offset = (0, _utils.getDocumentOffsetByElement)(this.menu.container, this.hot.rootDocument);
236
+ const target = this.hot.getCell(-1, from.col, true);
237
+ const rect = target.getBoundingClientRect();
238
+ this.open({
239
+ left: rect.left + offset.left,
240
+ top: rect.top + target.offsetHeight + offset.top
241
+ }, {
242
+ left: rect.width
243
+ });
244
+ }
245
+ };
246
+ context.addShortcuts([{
247
+ keys: [['Shift', 'Alt', 'ArrowDown'], ['Control/Meta', 'Enter']],
248
+ callback,
249
+ runOnlyIf: () => {
250
+ var _this$hot$getSelected;
251
+ return ((_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isHeader()) && !this.menu.isOpened();
252
+ },
253
+ captureCtrl: true,
254
+ group: SHORTCUTS_GROUP
255
+ }, {
256
+ keys: [['Shift', 'Alt', 'ArrowDown']],
257
+ callback,
258
+ runOnlyIf: () => {
259
+ var _this$hot$getSelected2;
260
+ return ((_this$hot$getSelected2 = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected2 === void 0 ? void 0 : _this$hot$getSelected2.highlight.isCell()) && !this.menu.isOpened();
261
+ },
262
+ group: SHORTCUTS_GROUP
263
+ }]);
264
+ }
265
+
266
+ /**
267
+ * Unregister shortcuts responsible for toggling dropdown menu.
268
+ *
269
+ * @private
270
+ */
271
+ unregisterShortcuts() {
272
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
273
+ }
274
+
213
275
  /**
214
276
  * Registers the DOM listeners.
215
277
  *
@@ -222,23 +284,30 @@ class DropdownMenu extends _base.BasePlugin {
222
284
  /**
223
285
  * Opens menu and re-position it based on the passed coordinates.
224
286
  *
225
- * @param {object|Event} position An object with `pageX` and `pageY` properties which contains values relative to
226
- * the top left of the fully rendered content area in the browser or with `clientX`
227
- * and `clientY` properties which contains values relative to the upper left edge
228
- * of the content area (the viewport) of the browser window. This object is structurally
229
- * compatible with native mouse event so it can be used either.
287
+ * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties
288
+ * which contains coordinates relative to the browsers viewport (without included scroll offsets).
289
+ * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`
290
+ * coordinates.
291
+ * @param {{ above: number, below: number, left: number, right: number }} offset An object allows applying
292
+ * the offset to the menu position.
230
293
  * @fires Hooks#beforeDropdownMenuShow
231
294
  * @fires Hooks#afterDropdownMenuShow
232
295
  */
233
-
234
296
  open(position) {
235
- if (!this.menu) {
297
+ var _this$menu;
298
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
299
+ above: 0,
300
+ below: 0,
301
+ left: 0,
302
+ right: 0
303
+ };
304
+ if ((_this$menu = this.menu) !== null && _this$menu !== void 0 && _this$menu.isOpened()) {
236
305
  return;
237
306
  }
238
307
  this.menu.open();
239
- if (position.width) {
240
- this.menu.setOffset('left', position.width);
241
- }
308
+ (0, _object.objectEach)(offset, (value, key) => {
309
+ this.menu.setOffset(key, value);
310
+ });
242
311
  this.menu.setPosition(position);
243
312
  }
244
313
 
@@ -246,10 +315,8 @@ class DropdownMenu extends _base.BasePlugin {
246
315
  * Closes dropdown menu.
247
316
  */
248
317
  close() {
249
- if (!this.menu) {
250
- return;
251
- }
252
- this.menu.close();
318
+ var _this$menu2;
319
+ (_this$menu2 = this.menu) === null || _this$menu2 === void 0 || _this$menu2.close();
253
320
  }
254
321
 
255
322
  /**
@@ -314,26 +381,14 @@ class DropdownMenu extends _base.BasePlugin {
314
381
  */
315
382
  onTableClick(event) {
316
383
  event.stopPropagation();
317
- if ((0, _element.hasClass)(event.target, BUTTON_CLASS_NAME) && !this.menu.isOpened()) {
318
- let offsetTop = 0;
319
- let offsetLeft = 0;
320
- if (this.hot.rootDocument !== this.menu.container.ownerDocument) {
321
- const {
322
- frameElement
323
- } = this.hot.rootWindow;
324
- const {
325
- top,
326
- left
327
- } = frameElement.getBoundingClientRect();
328
- offsetTop = top;
329
- offsetLeft = left;
330
- }
384
+ if ((0, _element.hasClass)(event.target, BUTTON_CLASS_NAME)) {
385
+ const offset = (0, _utils.getDocumentOffsetByElement)(this.menu.container, this.hot.rootDocument);
331
386
  const rect = event.target.getBoundingClientRect();
332
387
  this.open({
333
- left: rect.left + offsetLeft,
334
- top: rect.top + event.target.offsetHeight + 3 + offsetTop,
335
- width: rect.width,
336
- height: rect.height
388
+ left: rect.left + offset.left,
389
+ top: rect.top + event.target.offsetHeight + 3 + offset.top
390
+ }, {
391
+ left: rect.width
337
392
  });
338
393
  }
339
394
  }
@@ -372,6 +427,10 @@ class DropdownMenu extends _base.BasePlugin {
372
427
  const button = this.hot.rootDocument.createElement('button');
373
428
  button.className = BUTTON_CLASS_NAME;
374
429
  button.type = 'button';
430
+ button.tabIndex = -1;
431
+ if (this.hot.getSettings().ariaTags) {
432
+ (0, _element.setAttribute)(button, [(0, _a11y.A11Y_HIDDEN)()]);
433
+ }
375
434
 
376
435
  // prevent page reload on button click
377
436
  button.onclick = function () {
@@ -1,12 +1,15 @@
1
1
  import { BasePlugin } from "../base/index.mjs";
2
2
  import { arrayEach } from "../../helpers/array.mjs";
3
- import CommandExecutor from "../contextMenu/commandExecutor.mjs";
3
+ import { objectEach } from "../../helpers/object.mjs";
4
+ import { CommandExecutor } from "../contextMenu/commandExecutor.mjs";
5
+ import { getDocumentOffsetByElement } from "../contextMenu/utils.mjs";
4
6
  import EventManager from "../../eventManager.mjs";
5
- import { hasClass } from "../../helpers/dom/element.mjs";
6
- import ItemsFactory from "../contextMenu/itemsFactory.mjs";
7
- import Menu from "../contextMenu/menu.mjs";
7
+ import { hasClass, setAttribute } from "../../helpers/dom/element.mjs";
8
+ import { ItemsFactory } from "../contextMenu/itemsFactory.mjs";
9
+ import { Menu } from "../contextMenu/menu/index.mjs";
8
10
  import Hooks from "../../pluginHooks.mjs";
9
- import { COLUMN_LEFT, COLUMN_RIGHT, REMOVE_COLUMN, CLEAR_COLUMN, READ_ONLY, ALIGNMENT, SEPARATOR } from "../contextMenu/predefinedItems.mjs";
11
+ import { COLUMN_LEFT, COLUMN_RIGHT, REMOVE_COLUMN, CLEAR_COLUMN, READ_ONLY, ALIGNMENT, SEPARATOR } from "../contextMenu/predefinedItems/index.mjs";
12
+ import { A11Y_HIDDEN } from "../../helpers/a11y.mjs";
10
13
  Hooks.getSingleton().register('afterDropdownMenuDefaultOptions');
11
14
  Hooks.getSingleton().register('beforeDropdownMenuShow');
12
15
  Hooks.getSingleton().register('afterDropdownMenuShow');
@@ -15,6 +18,7 @@ Hooks.getSingleton().register('afterDropdownMenuExecute');
15
18
  export const PLUGIN_KEY = 'dropdownMenu';
16
19
  export const PLUGIN_PRIORITY = 230;
17
20
  const BUTTON_CLASS_NAME = 'changeType';
21
+ const SHORTCUTS_GROUP = PLUGIN_KEY;
18
22
 
19
23
  /* eslint-disable jsdoc/require-description-complete-sentence */
20
24
  /**
@@ -151,6 +155,7 @@ export class DropdownMenu extends BasePlugin {
151
155
  if (typeof settings.callback === 'function') {
152
156
  this.commandExecutor.setCommonCallback(settings.callback);
153
157
  }
158
+ this.registerShortcuts();
154
159
  super.enablePlugin();
155
160
  this.callOnPluginsReady(() => {
156
161
  this.hot.runHooks('afterDropdownMenuDefaultOptions', predefinedItems);
@@ -201,9 +206,66 @@ export class DropdownMenu extends BasePlugin {
201
206
  if (this.menu) {
202
207
  this.menu.destroy();
203
208
  }
209
+ this.unregisterShortcuts();
204
210
  super.disablePlugin();
205
211
  }
206
212
 
213
+ /**
214
+ * Register shortcuts responsible for toggling dropdown menu.
215
+ *
216
+ * @private
217
+ */
218
+ registerShortcuts() {
219
+ const context = this.hot.getShortcutManager().getContext('grid');
220
+ const callback = () => {
221
+ const {
222
+ highlight
223
+ } = this.hot.getSelectedRangeLast();
224
+ if ((highlight.isHeader() && highlight.row === -1 || highlight.isCell()) && highlight.col >= 0) {
225
+ this.hot.selectColumns(highlight.col, highlight.col, -1);
226
+ const {
227
+ from
228
+ } = this.hot.getSelectedRangeLast();
229
+ const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);
230
+ const target = this.hot.getCell(-1, from.col, true);
231
+ const rect = target.getBoundingClientRect();
232
+ this.open({
233
+ left: rect.left + offset.left,
234
+ top: rect.top + target.offsetHeight + offset.top
235
+ }, {
236
+ left: rect.width
237
+ });
238
+ }
239
+ };
240
+ context.addShortcuts([{
241
+ keys: [['Shift', 'Alt', 'ArrowDown'], ['Control/Meta', 'Enter']],
242
+ callback,
243
+ runOnlyIf: () => {
244
+ var _this$hot$getSelected;
245
+ return ((_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isHeader()) && !this.menu.isOpened();
246
+ },
247
+ captureCtrl: true,
248
+ group: SHORTCUTS_GROUP
249
+ }, {
250
+ keys: [['Shift', 'Alt', 'ArrowDown']],
251
+ callback,
252
+ runOnlyIf: () => {
253
+ var _this$hot$getSelected2;
254
+ return ((_this$hot$getSelected2 = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected2 === void 0 ? void 0 : _this$hot$getSelected2.highlight.isCell()) && !this.menu.isOpened();
255
+ },
256
+ group: SHORTCUTS_GROUP
257
+ }]);
258
+ }
259
+
260
+ /**
261
+ * Unregister shortcuts responsible for toggling dropdown menu.
262
+ *
263
+ * @private
264
+ */
265
+ unregisterShortcuts() {
266
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
267
+ }
268
+
207
269
  /**
208
270
  * Registers the DOM listeners.
209
271
  *
@@ -216,23 +278,30 @@ export class DropdownMenu extends BasePlugin {
216
278
  /**
217
279
  * Opens menu and re-position it based on the passed coordinates.
218
280
  *
219
- * @param {object|Event} position An object with `pageX` and `pageY` properties which contains values relative to
220
- * the top left of the fully rendered content area in the browser or with `clientX`
221
- * and `clientY` properties which contains values relative to the upper left edge
222
- * of the content area (the viewport) of the browser window. This object is structurally
223
- * compatible with native mouse event so it can be used either.
281
+ * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties
282
+ * which contains coordinates relative to the browsers viewport (without included scroll offsets).
283
+ * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`
284
+ * coordinates.
285
+ * @param {{ above: number, below: number, left: number, right: number }} offset An object allows applying
286
+ * the offset to the menu position.
224
287
  * @fires Hooks#beforeDropdownMenuShow
225
288
  * @fires Hooks#afterDropdownMenuShow
226
289
  */
227
-
228
290
  open(position) {
229
- if (!this.menu) {
291
+ var _this$menu;
292
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
293
+ above: 0,
294
+ below: 0,
295
+ left: 0,
296
+ right: 0
297
+ };
298
+ if ((_this$menu = this.menu) !== null && _this$menu !== void 0 && _this$menu.isOpened()) {
230
299
  return;
231
300
  }
232
301
  this.menu.open();
233
- if (position.width) {
234
- this.menu.setOffset('left', position.width);
235
- }
302
+ objectEach(offset, (value, key) => {
303
+ this.menu.setOffset(key, value);
304
+ });
236
305
  this.menu.setPosition(position);
237
306
  }
238
307
 
@@ -240,10 +309,8 @@ export class DropdownMenu extends BasePlugin {
240
309
  * Closes dropdown menu.
241
310
  */
242
311
  close() {
243
- if (!this.menu) {
244
- return;
245
- }
246
- this.menu.close();
312
+ var _this$menu2;
313
+ (_this$menu2 = this.menu) === null || _this$menu2 === void 0 || _this$menu2.close();
247
314
  }
248
315
 
249
316
  /**
@@ -308,26 +375,14 @@ export class DropdownMenu extends BasePlugin {
308
375
  */
309
376
  onTableClick(event) {
310
377
  event.stopPropagation();
311
- if (hasClass(event.target, BUTTON_CLASS_NAME) && !this.menu.isOpened()) {
312
- let offsetTop = 0;
313
- let offsetLeft = 0;
314
- if (this.hot.rootDocument !== this.menu.container.ownerDocument) {
315
- const {
316
- frameElement
317
- } = this.hot.rootWindow;
318
- const {
319
- top,
320
- left
321
- } = frameElement.getBoundingClientRect();
322
- offsetTop = top;
323
- offsetLeft = left;
324
- }
378
+ if (hasClass(event.target, BUTTON_CLASS_NAME)) {
379
+ const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);
325
380
  const rect = event.target.getBoundingClientRect();
326
381
  this.open({
327
- left: rect.left + offsetLeft,
328
- top: rect.top + event.target.offsetHeight + 3 + offsetTop,
329
- width: rect.width,
330
- height: rect.height
382
+ left: rect.left + offset.left,
383
+ top: rect.top + event.target.offsetHeight + 3 + offset.top
384
+ }, {
385
+ left: rect.width
331
386
  });
332
387
  }
333
388
  }
@@ -366,6 +421,10 @@ export class DropdownMenu extends BasePlugin {
366
421
  const button = this.hot.rootDocument.createElement('button');
367
422
  button.className = BUTTON_CLASS_NAME;
368
423
  button.type = 'button';
424
+ button.tabIndex = -1;
425
+ if (this.hot.getSettings().ariaTags) {
426
+ setAttribute(button, [A11Y_HIDDEN()]);
427
+ }
369
428
 
370
429
  // prevent page reload on button click
371
430
  button.onclick = function () {
@@ -1,7 +1,7 @@
1
1
  import "core-js/modules/es.array.push.js";
2
2
  import { clone } from "../../helpers/object.mjs";
3
3
  import { arrayEach } from "../../helpers/array.mjs";
4
- import { SEPARATOR } from "../contextMenu/predefinedItems.mjs";
4
+ import { SEPARATOR } from "../contextMenu/predefinedItems/index.mjs";
5
5
  import { getConditionDescriptor } from "./conditionRegisterer.mjs";
6
6
  import { CONDITION_NAME as CONDITION_NONE } from "./condition/none.mjs";
7
7
  import { CONDITION_NAME as CONDITION_EMPTY } from "./condition/empty.mjs";
@@ -27,6 +27,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
27
27
  const PLUGIN_KEY = 'filters';
28
28
  exports.PLUGIN_KEY = PLUGIN_KEY;
29
29
  const PLUGIN_PRIORITY = 250;
30
+ exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
31
+ const SHORTCUTS_GROUP = PLUGIN_KEY;
30
32
 
31
33
  /**
32
34
  * @plugin Filters
@@ -63,7 +65,6 @@ const PLUGIN_PRIORITY = 250;
63
65
  * ```
64
66
  * :::
65
67
  */
66
- exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
67
68
  class Filters extends _base.BasePlugin {
68
69
  static get PLUGIN_KEY() {
69
70
  return PLUGIN_KEY;
@@ -210,6 +211,7 @@ class Filters extends _base.BasePlugin {
210
211
  this.dropdownMenuPlugin.disablePlugin();
211
212
  this.dropdownMenuPlugin.enablePlugin();
212
213
  }
214
+ this.registerShortcuts();
213
215
  super.enablePlugin();
214
216
  }
215
217
 
@@ -230,9 +232,36 @@ class Filters extends _base.BasePlugin {
230
232
  this.conditionCollection = null;
231
233
  this.hot.rowIndexMapper.unregisterMap(this.pluginName);
232
234
  }
235
+ this.unregisterShortcuts();
233
236
  super.disablePlugin();
234
237
  }
235
238
 
239
+ /**
240
+ * Register shortcuts responsible for clearing the filters.
241
+ *
242
+ * @private
243
+ */
244
+ registerShortcuts() {
245
+ this.hot.getShortcutManager().getContext('grid').addShortcut({
246
+ keys: [['Alt', 'A']],
247
+ stopPropagation: true,
248
+ callback: () => {
249
+ this.clearConditions();
250
+ this.filter();
251
+ },
252
+ group: SHORTCUTS_GROUP
253
+ });
254
+ }
255
+
256
+ /**
257
+ * Unregister shortcuts responsible for clearing the filters.
258
+ *
259
+ * @private
260
+ */
261
+ unregisterShortcuts() {
262
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
263
+ }
264
+
236
265
  /* eslint-disable jsdoc/require-description-complete-sentence */
237
266
  /**
238
267
  * @memberof Filters#
@@ -422,7 +451,6 @@ class Filters extends _base.BasePlugin {
422
451
  this.hot.runHooks('afterFilter', conditions);
423
452
  this.hot.view.adjustElementsSize(true);
424
453
  this.hot.render();
425
- this.clearColumnSelection();
426
454
  }
427
455
 
428
456
  /**
@@ -444,18 +472,6 @@ class Filters extends _base.BasePlugin {
444
472
  };
445
473
  }
446
474
 
447
- /**
448
- * Clears column selection.
449
- *
450
- * @private
451
- */
452
- clearColumnSelection() {
453
- const selectedColumn = this.getSelectedColumn();
454
- if (selectedColumn !== null) {
455
- this.hot.selectCell(0, selectedColumn.visualIndex);
456
- }
457
- }
458
-
459
475
  /**
460
476
  * Returns handsontable source data with cell meta based on current selection.
461
477
  *
@@ -655,6 +671,7 @@ class Filters extends _base.BasePlugin {
655
671
  this.components.forEach(component => component.saveState(physicalIndex));
656
672
  this.filtersRowsMap.clear();
657
673
  this.filter();
674
+ this.hot.selectCell(0, selectedColumn.visualIndex);
658
675
  }
659
676
  (_this$dropdownMenuPlu3 = this.dropdownMenuPlugin) === null || _this$dropdownMenuPlu3 === void 0 || _this$dropdownMenuPlu3.close();
660
677
  }
@@ -6,7 +6,7 @@ import { warn } from "../../helpers/console.mjs";
6
6
  import { rangeEach } from "../../helpers/number.mjs";
7
7
  import EventManager from "../../eventManager.mjs";
8
8
  import { addClass, removeClass } from "../../helpers/dom/element.mjs";
9
- import { SEPARATOR } from "../contextMenu/predefinedItems.mjs";
9
+ import { SEPARATOR } from "../contextMenu/predefinedItems/index.mjs";
10
10
  import * as constants from "../../i18n/constants.mjs";
11
11
  import ConditionComponent from "./component/condition.mjs";
12
12
  import OperatorsComponent from "./component/operators.mjs";
@@ -20,6 +20,7 @@ import { CONDITION_NONE, CONDITION_BY_VALUE, OPERATION_AND, OPERATION_OR, OPERAT
20
20
  import { TrimmingMap } from "../../translations/index.mjs";
21
21
  export const PLUGIN_KEY = 'filters';
22
22
  export const PLUGIN_PRIORITY = 250;
23
+ const SHORTCUTS_GROUP = PLUGIN_KEY;
23
24
 
24
25
  /**
25
26
  * @plugin Filters
@@ -202,6 +203,7 @@ export class Filters extends BasePlugin {
202
203
  this.dropdownMenuPlugin.disablePlugin();
203
204
  this.dropdownMenuPlugin.enablePlugin();
204
205
  }
206
+ this.registerShortcuts();
205
207
  super.enablePlugin();
206
208
  }
207
209
 
@@ -222,9 +224,36 @@ export class Filters extends BasePlugin {
222
224
  this.conditionCollection = null;
223
225
  this.hot.rowIndexMapper.unregisterMap(this.pluginName);
224
226
  }
227
+ this.unregisterShortcuts();
225
228
  super.disablePlugin();
226
229
  }
227
230
 
231
+ /**
232
+ * Register shortcuts responsible for clearing the filters.
233
+ *
234
+ * @private
235
+ */
236
+ registerShortcuts() {
237
+ this.hot.getShortcutManager().getContext('grid').addShortcut({
238
+ keys: [['Alt', 'A']],
239
+ stopPropagation: true,
240
+ callback: () => {
241
+ this.clearConditions();
242
+ this.filter();
243
+ },
244
+ group: SHORTCUTS_GROUP
245
+ });
246
+ }
247
+
248
+ /**
249
+ * Unregister shortcuts responsible for clearing the filters.
250
+ *
251
+ * @private
252
+ */
253
+ unregisterShortcuts() {
254
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
255
+ }
256
+
228
257
  /* eslint-disable jsdoc/require-description-complete-sentence */
229
258
  /**
230
259
  * @memberof Filters#
@@ -414,7 +443,6 @@ export class Filters extends BasePlugin {
414
443
  this.hot.runHooks('afterFilter', conditions);
415
444
  this.hot.view.adjustElementsSize(true);
416
445
  this.hot.render();
417
- this.clearColumnSelection();
418
446
  }
419
447
 
420
448
  /**
@@ -436,18 +464,6 @@ export class Filters extends BasePlugin {
436
464
  };
437
465
  }
438
466
 
439
- /**
440
- * Clears column selection.
441
- *
442
- * @private
443
- */
444
- clearColumnSelection() {
445
- const selectedColumn = this.getSelectedColumn();
446
- if (selectedColumn !== null) {
447
- this.hot.selectCell(0, selectedColumn.visualIndex);
448
- }
449
- }
450
-
451
467
  /**
452
468
  * Returns handsontable source data with cell meta based on current selection.
453
469
  *
@@ -647,6 +663,7 @@ export class Filters extends BasePlugin {
647
663
  this.components.forEach(component => component.saveState(physicalIndex));
648
664
  this.filtersRowsMap.clear();
649
665
  this.filter();
666
+ this.hot.selectCell(0, selectedColumn.visualIndex);
650
667
  }
651
668
  (_this$dropdownMenuPlu3 = this.dropdownMenuPlugin) === null || _this$dropdownMenuPlu3 === void 0 || _this$dropdownMenuPlu3.close();
652
669
  }
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
- var _menu = _interopRequireDefault(require("../../../plugins/contextMenu/menu"));
4
+ var _menu = require("../../../plugins/contextMenu/menu");
5
5
  var _object = require("../../../helpers/object");
6
6
  var _array = require("../../../helpers/array");
7
7
  var C = _interopRequireWildcard(require("../../../i18n/constants"));
8
8
  var _predefinedItems = require("../../../plugins/contextMenu/predefinedItems");
9
9
  var _base = _interopRequireDefault(require("./_base"));
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
11
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
12
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
13
  const privatePool = new WeakMap();
14
14
 
15
15
  /**
@@ -78,7 +78,7 @@ class SelectUI extends _base.default {
78
78
  */
79
79
  build() {
80
80
  super.build();
81
- this.menu = new _menu.default(this.hot, {
81
+ this.menu = new _menu.Menu(this.hot, {
82
82
  className: 'htSelectUI htFiltersConditionsMenu',
83
83
  keepInViewport: false,
84
84
  standalone: true,
@@ -1,8 +1,8 @@
1
- import Menu from "../../../plugins/contextMenu/menu.mjs";
1
+ import { Menu } from "../../../plugins/contextMenu/menu/index.mjs";
2
2
  import { clone, extend } from "../../../helpers/object.mjs";
3
3
  import { arrayEach } from "../../../helpers/array.mjs";
4
4
  import * as C from "../../../i18n/constants.mjs";
5
- import { SEPARATOR } from "../../../plugins/contextMenu/predefinedItems.mjs";
5
+ import { SEPARATOR } from "../../../plugins/contextMenu/predefinedItems/index.mjs";
6
6
  import BaseUI from "./_base.mjs";
7
7
  const privatePool = new WeakMap();
8
8
 
@@ -13,7 +13,7 @@ import { rangeEach } from "../../helpers/number.mjs";
13
13
  import { arrayEach, arrayMap, arrayReduce } from "../../helpers/array.mjs";
14
14
  import { isObject } from "../../helpers/object.mjs";
15
15
  import { isUndefined } from "../../helpers/mixed.mjs";
16
- import { SEPARATOR } from "../contextMenu/predefinedItems.mjs";
16
+ import { SEPARATOR } from "../contextMenu/predefinedItems/index.mjs";
17
17
  import Hooks from "../../pluginHooks.mjs";
18
18
  import hideColumnItem from "./contextMenuItem/hideColumn.mjs";
19
19
  import showColumnItem from "./contextMenuItem/showColumn.mjs";