handsontable 0.0.0-next-9059914-20231025 → 0.0.0-next-cecf979-20231026

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 (447) 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.d.ts +1 -0
  427. package/shortcuts/context.js +23 -4
  428. package/shortcuts/context.mjs +23 -5
  429. package/shortcuts/manager.js +25 -7
  430. package/shortcuts/manager.mjs +26 -7
  431. package/shortcuts/recorder.js +3 -3
  432. package/shortcuts/recorder.mjs +3 -3
  433. package/shortcuts/utils.js +19 -5
  434. package/shortcuts/utils.mjs +18 -4
  435. package/tableView.js +111 -13
  436. package/tableView.mjs +112 -14
  437. package/utils/paginator.js +151 -0
  438. package/utils/paginator.mjs +147 -0
  439. package/3rdparty/walkontable/src/selection.js +0 -295
  440. package/3rdparty/walkontable/src/selection.mjs +0 -290
  441. package/plugins/contextMenu/predefinedItems.mjs +0 -68
  442. package/plugins/copyPaste/focusableElement.js +0 -186
  443. package/plugins/copyPaste/focusableElement.mjs +0 -180
  444. package/selection/highlight/constants.js +0 -15
  445. package/selection/highlight/constants.mjs +0 -6
  446. package/selection/highlight/types/index.js +0 -35
  447. package/selection/highlight/types/index.mjs +0 -31
@@ -1,16 +1,23 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
+ require("core-js/modules/es.error.cause.js");
4
5
  var _base = require("../base");
5
6
  var _array = require("../../helpers/array");
6
- var _commandExecutor = _interopRequireDefault(require("../contextMenu/commandExecutor"));
7
+ var _object = require("../../helpers/object");
8
+ var _commandExecutor = require("../contextMenu/commandExecutor");
9
+ var _utils = require("../contextMenu/utils");
7
10
  var _eventManager = _interopRequireDefault(require("../../eventManager"));
8
11
  var _element = require("../../helpers/dom/element");
9
- var _itemsFactory = _interopRequireDefault(require("../contextMenu/itemsFactory"));
10
- var _menu = _interopRequireDefault(require("../contextMenu/menu"));
12
+ var _itemsFactory = require("../contextMenu/itemsFactory");
13
+ var _menu = require("../contextMenu/menu");
11
14
  var _pluginHooks = _interopRequireDefault(require("../../pluginHooks"));
12
15
  var _predefinedItems = require("../contextMenu/predefinedItems");
16
+ var _a11y = require("../../helpers/a11y");
13
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
19
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
20
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
14
21
  _pluginHooks.default.getSingleton().register('afterDropdownMenuDefaultOptions');
15
22
  _pluginHooks.default.getSingleton().register('beforeDropdownMenuShow');
16
23
  _pluginHooks.default.getSingleton().register('afterDropdownMenuShow');
@@ -21,6 +28,7 @@ exports.PLUGIN_KEY = PLUGIN_KEY;
21
28
  const PLUGIN_PRIORITY = 230;
22
29
  exports.PLUGIN_PRIORITY = PLUGIN_PRIORITY;
23
30
  const BUTTON_CLASS_NAME = 'changeType';
31
+ const SHORTCUTS_GROUP = PLUGIN_KEY;
24
32
 
25
33
  /* eslint-disable jsdoc/require-description-complete-sentence */
26
34
  /**
@@ -72,7 +80,7 @@ const BUTTON_CLASS_NAME = 'changeType';
72
80
  * ```
73
81
  * :::
74
82
  */
75
-
83
+ var _addCustomShortcuts = /*#__PURE__*/new WeakSet();
76
84
  class DropdownMenu extends _base.BasePlugin {
77
85
  static get PLUGIN_KEY() {
78
86
  return PLUGIN_KEY;
@@ -100,6 +108,12 @@ class DropdownMenu extends _base.BasePlugin {
100
108
  * @private
101
109
  * @type {EventManager}
102
110
  */
111
+ /**
112
+ * Add custom shortcuts to the provided menu instance.
113
+ *
114
+ * @param {Menu} menuInstance The menu instance.
115
+ */
116
+ _classPrivateMethodInitSpec(this, _addCustomShortcuts);
103
117
  this.eventManager = new _eventManager.default(this);
104
118
  /**
105
119
  * Instance of {@link CommandExecutor}.
@@ -107,7 +121,7 @@ class DropdownMenu extends _base.BasePlugin {
107
121
  * @private
108
122
  * @type {CommandExecutor}
109
123
  */
110
- this.commandExecutor = new _commandExecutor.default(this.hot);
124
+ this.commandExecutor = new _commandExecutor.CommandExecutor(this.hot);
111
125
  /**
112
126
  * Instance of {@link ItemsFactory}.
113
127
  *
@@ -148,7 +162,7 @@ class DropdownMenu extends _base.BasePlugin {
148
162
  if (this.enabled) {
149
163
  return;
150
164
  }
151
- this.itemsFactory = new _itemsFactory.default(this.hot, DropdownMenu.DEFAULT_ITEMS);
165
+ this.itemsFactory = new _itemsFactory.ItemsFactory(this.hot, DropdownMenu.DEFAULT_ITEMS);
152
166
  const settings = this.hot.getSettings()[PLUGIN_KEY];
153
167
  const predefinedItems = {
154
168
  items: this.itemsFactory.getItems(settings)
@@ -157,6 +171,7 @@ class DropdownMenu extends _base.BasePlugin {
157
171
  if (typeof settings.callback === 'function') {
158
172
  this.commandExecutor.setCommonCallback(settings.callback);
159
173
  }
174
+ this.registerShortcuts();
160
175
  super.enablePlugin();
161
176
  this.callOnPluginsReady(() => {
162
177
  this.hot.runHooks('afterDropdownMenuDefaultOptions', predefinedItems);
@@ -165,7 +180,7 @@ class DropdownMenu extends _base.BasePlugin {
165
180
  if (this.menu) {
166
181
  this.menu.destroy();
167
182
  }
168
- this.menu = new _menu.default(this.hot, {
183
+ this.menu = new _menu.Menu(this.hot, {
169
184
  className: 'htDropdownMenu',
170
185
  keepInViewport: true,
171
186
  container: settings.uiContainer || this.hot.rootDocument.body
@@ -174,6 +189,7 @@ class DropdownMenu extends _base.BasePlugin {
174
189
  this.menu.setMenuItems(menuItems);
175
190
  this.menu.addLocalHook('beforeOpen', () => this.onMenuBeforeOpen());
176
191
  this.menu.addLocalHook('afterOpen', () => this.onMenuAfterOpen());
192
+ this.menu.addLocalHook('afterSubmenuOpen', subMenuInstance => this.onSubMenuAfterOpen(subMenuInstance));
177
193
  this.menu.addLocalHook('afterClose', () => this.onMenuAfterClose());
178
194
  this.menu.addLocalHook('executeCommand', function () {
179
195
  for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
@@ -207,9 +223,66 @@ class DropdownMenu extends _base.BasePlugin {
207
223
  if (this.menu) {
208
224
  this.menu.destroy();
209
225
  }
226
+ this.unregisterShortcuts();
210
227
  super.disablePlugin();
211
228
  }
212
229
 
230
+ /**
231
+ * Register shortcuts responsible for toggling dropdown menu.
232
+ *
233
+ * @private
234
+ */
235
+ registerShortcuts() {
236
+ const gridContext = this.hot.getShortcutManager().getContext('grid');
237
+ const callback = () => {
238
+ const {
239
+ highlight
240
+ } = this.hot.getSelectedRangeLast();
241
+ if ((highlight.isHeader() && highlight.row === -1 || highlight.isCell()) && highlight.col >= 0) {
242
+ this.hot.selectColumns(highlight.col, highlight.col, -1);
243
+ const {
244
+ from
245
+ } = this.hot.getSelectedRangeLast();
246
+ const offset = (0, _utils.getDocumentOffsetByElement)(this.menu.container, this.hot.rootDocument);
247
+ const target = this.hot.getCell(-1, from.col, true);
248
+ const rect = target.getBoundingClientRect();
249
+ this.open({
250
+ left: rect.left + offset.left,
251
+ top: rect.top + target.offsetHeight + offset.top
252
+ }, {
253
+ left: rect.width
254
+ });
255
+ }
256
+ };
257
+ gridContext.addShortcuts([{
258
+ keys: [['Shift', 'Alt', 'ArrowDown'], ['Control/Meta', 'Enter']],
259
+ callback,
260
+ runOnlyIf: () => {
261
+ var _this$hot$getSelected;
262
+ return ((_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isHeader()) && !this.menu.isOpened();
263
+ },
264
+ captureCtrl: true,
265
+ group: SHORTCUTS_GROUP
266
+ }, {
267
+ keys: [['Shift', 'Alt', 'ArrowDown']],
268
+ callback,
269
+ runOnlyIf: () => {
270
+ var _this$hot$getSelected2;
271
+ return ((_this$hot$getSelected2 = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected2 === void 0 ? void 0 : _this$hot$getSelected2.highlight.isCell()) && !this.menu.isOpened();
272
+ },
273
+ group: SHORTCUTS_GROUP
274
+ }]);
275
+ }
276
+
277
+ /**
278
+ * Unregister shortcuts responsible for toggling dropdown menu.
279
+ *
280
+ * @private
281
+ */
282
+ unregisterShortcuts() {
283
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
284
+ }
285
+
213
286
  /**
214
287
  * Registers the DOM listeners.
215
288
  *
@@ -222,23 +295,30 @@ class DropdownMenu extends _base.BasePlugin {
222
295
  /**
223
296
  * Opens menu and re-position it based on the passed coordinates.
224
297
  *
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.
298
+ * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties
299
+ * which contains coordinates relative to the browsers viewport (without included scroll offsets).
300
+ * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`
301
+ * coordinates.
302
+ * @param {{ above: number, below: number, left: number, right: number }} offset An object allows applying
303
+ * the offset to the menu position.
230
304
  * @fires Hooks#beforeDropdownMenuShow
231
305
  * @fires Hooks#afterDropdownMenuShow
232
306
  */
233
-
234
307
  open(position) {
235
- if (!this.menu) {
308
+ var _this$menu;
309
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
310
+ above: 0,
311
+ below: 0,
312
+ left: 0,
313
+ right: 0
314
+ };
315
+ if ((_this$menu = this.menu) !== null && _this$menu !== void 0 && _this$menu.isOpened()) {
236
316
  return;
237
317
  }
238
318
  this.menu.open();
239
- if (position.width) {
240
- this.menu.setOffset('left', position.width);
241
- }
319
+ (0, _object.objectEach)(offset, (value, key) => {
320
+ this.menu.setOffset(key, value);
321
+ });
242
322
  this.menu.setPosition(position);
243
323
  }
244
324
 
@@ -246,10 +326,8 @@ class DropdownMenu extends _base.BasePlugin {
246
326
  * Closes dropdown menu.
247
327
  */
248
328
  close() {
249
- if (!this.menu) {
250
- return;
251
- }
252
- this.menu.close();
329
+ var _this$menu2;
330
+ (_this$menu2 = this.menu) === null || _this$menu2 === void 0 || _this$menu2.close();
253
331
  }
254
332
 
255
333
  /**
@@ -305,7 +383,6 @@ class DropdownMenu extends _base.BasePlugin {
305
383
  }
306
384
  }
307
385
  }
308
-
309
386
  /**
310
387
  * Table click listener.
311
388
  *
@@ -314,26 +391,14 @@ class DropdownMenu extends _base.BasePlugin {
314
391
  */
315
392
  onTableClick(event) {
316
393
  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
- }
394
+ if ((0, _element.hasClass)(event.target, BUTTON_CLASS_NAME)) {
395
+ const offset = (0, _utils.getDocumentOffsetByElement)(this.menu.container, this.hot.rootDocument);
331
396
  const rect = event.target.getBoundingClientRect();
332
397
  this.open({
333
- left: rect.left + offsetLeft,
334
- top: rect.top + event.target.offsetHeight + 3 + offsetTop,
335
- width: rect.width,
336
- height: rect.height
398
+ left: rect.left + offset.left,
399
+ top: rect.top + event.target.offsetHeight + 3 + offset.top
400
+ }, {
401
+ left: rect.width
337
402
  });
338
403
  }
339
404
  }
@@ -372,6 +437,11 @@ class DropdownMenu extends _base.BasePlugin {
372
437
  const button = this.hot.rootDocument.createElement('button');
373
438
  button.className = BUTTON_CLASS_NAME;
374
439
  button.type = 'button';
440
+ button.tabIndex = -1;
441
+ if (this.hot.getSettings().ariaTags) {
442
+ (0, _element.setAttribute)(button, [(0, _a11y.A11Y_HIDDEN)()]);
443
+ (0, _element.setAttribute)(TH, [(0, _a11y.A11Y_HASPOPUP)('menu')]);
444
+ }
375
445
 
376
446
  // prevent page reload on button click
377
447
  button.onclick = function () {
@@ -398,6 +468,17 @@ class DropdownMenu extends _base.BasePlugin {
398
468
  */
399
469
  onMenuAfterOpen() {
400
470
  this.hot.runHooks('afterDropdownMenuShow', this);
471
+ _classPrivateMethodGet(this, _addCustomShortcuts, _addCustomShortcuts2).call(this, this.menu);
472
+ }
473
+
474
+ /**
475
+ * Listener for the `afterSubmenuOpen` hook.
476
+ *
477
+ * @private
478
+ * @param {Menu} subMenuInstance The opened sub menu instance.
479
+ */
480
+ onSubMenuAfterOpen(subMenuInstance) {
481
+ _classPrivateMethodGet(this, _addCustomShortcuts, _addCustomShortcuts2).call(this, subMenuInstance);
401
482
  }
402
483
 
403
484
  /**
@@ -423,6 +504,12 @@ class DropdownMenu extends _base.BasePlugin {
423
504
  }
424
505
  }
425
506
  exports.DropdownMenu = DropdownMenu;
507
+ function _addCustomShortcuts2(menuInstance) {
508
+ menuInstance.getKeyboardShortcutsCtrl().addCustomShortcuts([{
509
+ keys: [['Control/Meta', 'A']],
510
+ callback: () => false
511
+ }]);
512
+ }
426
513
  DropdownMenu.SEPARATOR = {
427
514
  name: _predefinedItems.SEPARATOR
428
515
  };
@@ -1,12 +1,19 @@
1
+ import "core-js/modules/es.error.cause.js";
2
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
3
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
4
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
1
5
  import { BasePlugin } from "../base/index.mjs";
2
6
  import { arrayEach } from "../../helpers/array.mjs";
3
- import CommandExecutor from "../contextMenu/commandExecutor.mjs";
7
+ import { objectEach } from "../../helpers/object.mjs";
8
+ import { CommandExecutor } from "../contextMenu/commandExecutor.mjs";
9
+ import { getDocumentOffsetByElement } from "../contextMenu/utils.mjs";
4
10
  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";
11
+ import { hasClass, setAttribute } from "../../helpers/dom/element.mjs";
12
+ import { ItemsFactory } from "../contextMenu/itemsFactory.mjs";
13
+ import { Menu } from "../contextMenu/menu/index.mjs";
8
14
  import Hooks from "../../pluginHooks.mjs";
9
- import { COLUMN_LEFT, COLUMN_RIGHT, REMOVE_COLUMN, CLEAR_COLUMN, READ_ONLY, ALIGNMENT, SEPARATOR } from "../contextMenu/predefinedItems.mjs";
15
+ import { COLUMN_LEFT, COLUMN_RIGHT, REMOVE_COLUMN, CLEAR_COLUMN, READ_ONLY, ALIGNMENT, SEPARATOR } from "../contextMenu/predefinedItems/index.mjs";
16
+ import { A11Y_HASPOPUP, A11Y_HIDDEN } from "../../helpers/a11y.mjs";
10
17
  Hooks.getSingleton().register('afterDropdownMenuDefaultOptions');
11
18
  Hooks.getSingleton().register('beforeDropdownMenuShow');
12
19
  Hooks.getSingleton().register('afterDropdownMenuShow');
@@ -15,6 +22,7 @@ Hooks.getSingleton().register('afterDropdownMenuExecute');
15
22
  export const PLUGIN_KEY = 'dropdownMenu';
16
23
  export const PLUGIN_PRIORITY = 230;
17
24
  const BUTTON_CLASS_NAME = 'changeType';
25
+ const SHORTCUTS_GROUP = PLUGIN_KEY;
18
26
 
19
27
  /* eslint-disable jsdoc/require-description-complete-sentence */
20
28
  /**
@@ -66,7 +74,7 @@ const BUTTON_CLASS_NAME = 'changeType';
66
74
  * ```
67
75
  * :::
68
76
  */
69
-
77
+ var _addCustomShortcuts = /*#__PURE__*/new WeakSet();
70
78
  export class DropdownMenu extends BasePlugin {
71
79
  static get PLUGIN_KEY() {
72
80
  return PLUGIN_KEY;
@@ -94,6 +102,12 @@ export class DropdownMenu extends BasePlugin {
94
102
  * @private
95
103
  * @type {EventManager}
96
104
  */
105
+ /**
106
+ * Add custom shortcuts to the provided menu instance.
107
+ *
108
+ * @param {Menu} menuInstance The menu instance.
109
+ */
110
+ _classPrivateMethodInitSpec(this, _addCustomShortcuts);
97
111
  this.eventManager = new EventManager(this);
98
112
  /**
99
113
  * Instance of {@link CommandExecutor}.
@@ -151,6 +165,7 @@ export class DropdownMenu extends BasePlugin {
151
165
  if (typeof settings.callback === 'function') {
152
166
  this.commandExecutor.setCommonCallback(settings.callback);
153
167
  }
168
+ this.registerShortcuts();
154
169
  super.enablePlugin();
155
170
  this.callOnPluginsReady(() => {
156
171
  this.hot.runHooks('afterDropdownMenuDefaultOptions', predefinedItems);
@@ -168,6 +183,7 @@ export class DropdownMenu extends BasePlugin {
168
183
  this.menu.setMenuItems(menuItems);
169
184
  this.menu.addLocalHook('beforeOpen', () => this.onMenuBeforeOpen());
170
185
  this.menu.addLocalHook('afterOpen', () => this.onMenuAfterOpen());
186
+ this.menu.addLocalHook('afterSubmenuOpen', subMenuInstance => this.onSubMenuAfterOpen(subMenuInstance));
171
187
  this.menu.addLocalHook('afterClose', () => this.onMenuAfterClose());
172
188
  this.menu.addLocalHook('executeCommand', function () {
173
189
  for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
@@ -201,9 +217,66 @@ export class DropdownMenu extends BasePlugin {
201
217
  if (this.menu) {
202
218
  this.menu.destroy();
203
219
  }
220
+ this.unregisterShortcuts();
204
221
  super.disablePlugin();
205
222
  }
206
223
 
224
+ /**
225
+ * Register shortcuts responsible for toggling dropdown menu.
226
+ *
227
+ * @private
228
+ */
229
+ registerShortcuts() {
230
+ const gridContext = this.hot.getShortcutManager().getContext('grid');
231
+ const callback = () => {
232
+ const {
233
+ highlight
234
+ } = this.hot.getSelectedRangeLast();
235
+ if ((highlight.isHeader() && highlight.row === -1 || highlight.isCell()) && highlight.col >= 0) {
236
+ this.hot.selectColumns(highlight.col, highlight.col, -1);
237
+ const {
238
+ from
239
+ } = this.hot.getSelectedRangeLast();
240
+ const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);
241
+ const target = this.hot.getCell(-1, from.col, true);
242
+ const rect = target.getBoundingClientRect();
243
+ this.open({
244
+ left: rect.left + offset.left,
245
+ top: rect.top + target.offsetHeight + offset.top
246
+ }, {
247
+ left: rect.width
248
+ });
249
+ }
250
+ };
251
+ gridContext.addShortcuts([{
252
+ keys: [['Shift', 'Alt', 'ArrowDown'], ['Control/Meta', 'Enter']],
253
+ callback,
254
+ runOnlyIf: () => {
255
+ var _this$hot$getSelected;
256
+ return ((_this$hot$getSelected = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected === void 0 ? void 0 : _this$hot$getSelected.highlight.isHeader()) && !this.menu.isOpened();
257
+ },
258
+ captureCtrl: true,
259
+ group: SHORTCUTS_GROUP
260
+ }, {
261
+ keys: [['Shift', 'Alt', 'ArrowDown']],
262
+ callback,
263
+ runOnlyIf: () => {
264
+ var _this$hot$getSelected2;
265
+ return ((_this$hot$getSelected2 = this.hot.getSelectedRangeLast()) === null || _this$hot$getSelected2 === void 0 ? void 0 : _this$hot$getSelected2.highlight.isCell()) && !this.menu.isOpened();
266
+ },
267
+ group: SHORTCUTS_GROUP
268
+ }]);
269
+ }
270
+
271
+ /**
272
+ * Unregister shortcuts responsible for toggling dropdown menu.
273
+ *
274
+ * @private
275
+ */
276
+ unregisterShortcuts() {
277
+ this.hot.getShortcutManager().getContext('grid').removeShortcutsByGroup(SHORTCUTS_GROUP);
278
+ }
279
+
207
280
  /**
208
281
  * Registers the DOM listeners.
209
282
  *
@@ -216,23 +289,30 @@ export class DropdownMenu extends BasePlugin {
216
289
  /**
217
290
  * Opens menu and re-position it based on the passed coordinates.
218
291
  *
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.
292
+ * @param {{ top: number, left: number }|Event} position An object with `top` and `left` properties
293
+ * which contains coordinates relative to the browsers viewport (without included scroll offsets).
294
+ * Or if the native event is passed the menu will be positioned based on the `pageX` and `pageY`
295
+ * coordinates.
296
+ * @param {{ above: number, below: number, left: number, right: number }} offset An object allows applying
297
+ * the offset to the menu position.
224
298
  * @fires Hooks#beforeDropdownMenuShow
225
299
  * @fires Hooks#afterDropdownMenuShow
226
300
  */
227
-
228
301
  open(position) {
229
- if (!this.menu) {
302
+ var _this$menu;
303
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
304
+ above: 0,
305
+ below: 0,
306
+ left: 0,
307
+ right: 0
308
+ };
309
+ if ((_this$menu = this.menu) !== null && _this$menu !== void 0 && _this$menu.isOpened()) {
230
310
  return;
231
311
  }
232
312
  this.menu.open();
233
- if (position.width) {
234
- this.menu.setOffset('left', position.width);
235
- }
313
+ objectEach(offset, (value, key) => {
314
+ this.menu.setOffset(key, value);
315
+ });
236
316
  this.menu.setPosition(position);
237
317
  }
238
318
 
@@ -240,10 +320,8 @@ export class DropdownMenu extends BasePlugin {
240
320
  * Closes dropdown menu.
241
321
  */
242
322
  close() {
243
- if (!this.menu) {
244
- return;
245
- }
246
- this.menu.close();
323
+ var _this$menu2;
324
+ (_this$menu2 = this.menu) === null || _this$menu2 === void 0 || _this$menu2.close();
247
325
  }
248
326
 
249
327
  /**
@@ -299,7 +377,6 @@ export class DropdownMenu extends BasePlugin {
299
377
  }
300
378
  }
301
379
  }
302
-
303
380
  /**
304
381
  * Table click listener.
305
382
  *
@@ -308,26 +385,14 @@ export class DropdownMenu extends BasePlugin {
308
385
  */
309
386
  onTableClick(event) {
310
387
  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
- }
388
+ if (hasClass(event.target, BUTTON_CLASS_NAME)) {
389
+ const offset = getDocumentOffsetByElement(this.menu.container, this.hot.rootDocument);
325
390
  const rect = event.target.getBoundingClientRect();
326
391
  this.open({
327
- left: rect.left + offsetLeft,
328
- top: rect.top + event.target.offsetHeight + 3 + offsetTop,
329
- width: rect.width,
330
- height: rect.height
392
+ left: rect.left + offset.left,
393
+ top: rect.top + event.target.offsetHeight + 3 + offset.top
394
+ }, {
395
+ left: rect.width
331
396
  });
332
397
  }
333
398
  }
@@ -366,6 +431,11 @@ export class DropdownMenu extends BasePlugin {
366
431
  const button = this.hot.rootDocument.createElement('button');
367
432
  button.className = BUTTON_CLASS_NAME;
368
433
  button.type = 'button';
434
+ button.tabIndex = -1;
435
+ if (this.hot.getSettings().ariaTags) {
436
+ setAttribute(button, [A11Y_HIDDEN()]);
437
+ setAttribute(TH, [A11Y_HASPOPUP('menu')]);
438
+ }
369
439
 
370
440
  // prevent page reload on button click
371
441
  button.onclick = function () {
@@ -392,6 +462,17 @@ export class DropdownMenu extends BasePlugin {
392
462
  */
393
463
  onMenuAfterOpen() {
394
464
  this.hot.runHooks('afterDropdownMenuShow', this);
465
+ _classPrivateMethodGet(this, _addCustomShortcuts, _addCustomShortcuts2).call(this, this.menu);
466
+ }
467
+
468
+ /**
469
+ * Listener for the `afterSubmenuOpen` hook.
470
+ *
471
+ * @private
472
+ * @param {Menu} subMenuInstance The opened sub menu instance.
473
+ */
474
+ onSubMenuAfterOpen(subMenuInstance) {
475
+ _classPrivateMethodGet(this, _addCustomShortcuts, _addCustomShortcuts2).call(this, subMenuInstance);
395
476
  }
396
477
 
397
478
  /**
@@ -416,6 +497,12 @@ export class DropdownMenu extends BasePlugin {
416
497
  super.destroy();
417
498
  }
418
499
  }
500
+ function _addCustomShortcuts2(menuInstance) {
501
+ menuInstance.getKeyboardShortcutsCtrl().addCustomShortcuts([{
502
+ keys: [['Control/Meta', 'A']],
503
+ callback: () => false
504
+ }]);
505
+ }
419
506
  DropdownMenu.SEPARATOR = {
420
507
  name: SEPARATOR
421
508
  };
@@ -7,6 +7,9 @@ var _object = require("../../../helpers/object");
7
7
  var _localHooks = _interopRequireDefault(require("../../../mixins/localHooks"));
8
8
  var _translations = require("../../../translations");
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
12
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
10
13
  /**
11
14
  * @private
12
15
  * @class BaseComponent
@@ -22,39 +25,52 @@ class BaseComponent {
22
25
  *
23
26
  * @type {Core}
24
27
  */
25
- this.hot = hotInstance;
28
+ _defineProperty(this, "hot", void 0);
26
29
  /**
27
30
  * The component uniq id.
28
31
  *
29
32
  * @type {string}
30
33
  */
31
- this.id = id;
34
+ _defineProperty(this, "id", void 0);
32
35
  /**
33
36
  * List of registered component UI elements.
34
37
  *
35
38
  * @type {Array}
36
39
  */
37
- this.elements = [];
40
+ _defineProperty(this, "elements", []);
38
41
  /**
39
42
  * Flag which determines if element is hidden.
40
43
  *
41
44
  * @type {boolean}
42
45
  */
43
- this.hidden = false;
46
+ _defineProperty(this, "hidden", false);
44
47
  /**
45
48
  * The component states id.
46
49
  *
47
50
  * @type {string}
48
51
  */
49
- this.stateId = `Filters.component.${this.id}`;
52
+ _defineProperty(this, "stateId", '');
50
53
  /**
51
54
  * Index map which stores component states for each column.
52
55
  *
53
56
  * @type {LinkedPhysicalIndexToValueMap|null}
54
57
  */
58
+ _defineProperty(this, "state", void 0);
59
+ this.hot = hotInstance;
60
+ this.id = id;
61
+ this.stateId = `Filters.component.${this.id}`;
55
62
  this.state = stateless ? null : this.hot.columnIndexMapper.registerMap(this.stateId, new _translations.LinkedPhysicalIndexToValueMap());
56
63
  }
57
64
 
65
+ /**
66
+ * Gets the list of elements from which the component is built.
67
+ *
68
+ * @returns {BaseUI[]}
69
+ */
70
+ getElements() {
71
+ return this.elements;
72
+ }
73
+
58
74
  /**
59
75
  * Reset elements to its initial state.
60
76
  */
@@ -137,6 +153,5 @@ class BaseComponent {
137
153
  this.hot = null;
138
154
  }
139
155
  }
140
- (0, _object.mixin)(BaseComponent, _localHooks.default);
141
- var _default = BaseComponent;
142
- exports.default = _default;
156
+ exports.BaseComponent = BaseComponent;
157
+ (0, _object.mixin)(BaseComponent, _localHooks.default);