handsontable 0.0.0-next-9059914-20231025 → 0.0.0-next-21d91d0-20231025

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

Potentially problematic release.


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

Files changed (446) hide show
  1. package/3rdparty/walkontable/src/cell/coords.d.ts +6 -1
  2. package/3rdparty/walkontable/src/cell/coords.js +50 -11
  3. package/3rdparty/walkontable/src/cell/coords.mjs +50 -11
  4. package/3rdparty/walkontable/src/cell/range.d.ts +9 -2
  5. package/3rdparty/walkontable/src/cell/range.js +38 -7
  6. package/3rdparty/walkontable/src/cell/range.mjs +38 -7
  7. package/3rdparty/walkontable/src/core/_base.js +9 -3
  8. package/3rdparty/walkontable/src/core/_base.mjs +9 -3
  9. package/3rdparty/walkontable/src/core/clone.js +2 -2
  10. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  11. package/3rdparty/walkontable/src/core/core.js +3 -2
  12. package/3rdparty/walkontable/src/core/core.mjs +3 -2
  13. package/3rdparty/walkontable/src/event.js +12 -10
  14. package/3rdparty/walkontable/src/event.mjs +12 -10
  15. package/3rdparty/walkontable/src/facade/core.js +2 -2
  16. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  17. package/3rdparty/walkontable/src/index.js +10 -2
  18. package/3rdparty/walkontable/src/index.mjs +2 -2
  19. package/3rdparty/walkontable/src/overlay/_base.js +13 -2
  20. package/3rdparty/walkontable/src/overlay/_base.mjs +14 -3
  21. package/3rdparty/walkontable/src/overlay/inlineStart.js +2 -6
  22. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +2 -6
  23. package/3rdparty/walkontable/src/overlay/top.js +2 -6
  24. package/3rdparty/walkontable/src/overlay/top.mjs +2 -6
  25. package/3rdparty/walkontable/src/renderer/cells.js +10 -0
  26. package/3rdparty/walkontable/src/renderer/cells.mjs +11 -1
  27. package/3rdparty/walkontable/src/renderer/columnHeaders.js +10 -0
  28. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +11 -1
  29. package/3rdparty/walkontable/src/renderer/rowHeaders.js +5 -0
  30. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +5 -0
  31. package/3rdparty/walkontable/src/renderer/rows.js +13 -0
  32. package/3rdparty/walkontable/src/renderer/rows.mjs +13 -0
  33. package/3rdparty/walkontable/src/renderer/table.js +9 -0
  34. package/3rdparty/walkontable/src/renderer/table.mjs +9 -0
  35. package/3rdparty/walkontable/src/scroll.js +2 -0
  36. package/3rdparty/walkontable/src/scroll.mjs +2 -0
  37. package/3rdparty/walkontable/src/{border.js → selection/border/border.js} +7 -12
  38. package/3rdparty/walkontable/src/{border.mjs → selection/border/border.mjs} +7 -12
  39. package/3rdparty/walkontable/src/selection/border/constants.js +16 -0
  40. package/3rdparty/walkontable/src/selection/border/constants.mjs +12 -0
  41. package/3rdparty/walkontable/src/selection/constants.js +62 -0
  42. package/3rdparty/walkontable/src/selection/constants.mjs +51 -0
  43. package/3rdparty/walkontable/src/selection/index.js +26 -0
  44. package/3rdparty/walkontable/src/selection/index.mjs +5 -0
  45. package/3rdparty/walkontable/src/selection/manager.js +274 -0
  46. package/3rdparty/walkontable/src/selection/manager.mjs +269 -0
  47. package/3rdparty/walkontable/src/selection/scanner.js +270 -0
  48. package/3rdparty/walkontable/src/selection/scanner.mjs +267 -0
  49. package/3rdparty/walkontable/src/selection/selection.js +101 -0
  50. package/3rdparty/walkontable/src/selection/selection.mjs +96 -0
  51. package/3rdparty/walkontable/src/settings.js +13 -4
  52. package/3rdparty/walkontable/src/settings.mjs +13 -4
  53. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +9 -0
  54. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +9 -0
  55. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +9 -0
  56. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +9 -0
  57. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +9 -0
  58. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +9 -0
  59. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +9 -0
  60. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +9 -0
  61. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +9 -0
  62. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +9 -0
  63. package/3rdparty/walkontable/src/table.js +19 -78
  64. package/3rdparty/walkontable/src/table.mjs +20 -79
  65. package/base.js +2 -2
  66. package/base.mjs +2 -2
  67. package/cellTypes/dateType/dateType.d.ts +3 -3
  68. package/cellTypes/dateType/dateType.js +2 -2
  69. package/cellTypes/dateType/dateType.mjs +2 -2
  70. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  71. package/cellTypes/handsontableType/handsontableType.js +2 -2
  72. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  73. package/cellTypes/index.d.ts +3 -0
  74. package/cellTypes/index.js +4 -0
  75. package/cellTypes/index.mjs +3 -1
  76. package/cellTypes/selectType/index.d.ts +1 -0
  77. package/cellTypes/selectType/index.js +6 -0
  78. package/cellTypes/selectType/index.mjs +1 -0
  79. package/cellTypes/selectType/selectType.d.ts +14 -0
  80. package/cellTypes/selectType/selectType.js +13 -0
  81. package/cellTypes/selectType/selectType.mjs +8 -0
  82. package/core/focusCatcher/focusDetector.js +63 -0
  83. package/core/focusCatcher/focusDetector.mjs +59 -0
  84. package/core/focusCatcher/index.js +142 -0
  85. package/core/focusCatcher/index.mjs +138 -0
  86. package/core/index.js +9 -0
  87. package/core/index.mjs +1 -0
  88. package/core.d.ts +9 -4
  89. package/core.js +285 -327
  90. package/core.mjs +285 -327
  91. package/dataMap/metaManager/metaSchema.js +65 -0
  92. package/dataMap/metaManager/metaSchema.mjs +65 -0
  93. package/dataMap/metaManager/mods/extendMetaProperties.js +7 -1
  94. package/dataMap/metaManager/mods/extendMetaProperties.mjs +7 -1
  95. package/dataMap/replaceData.js +5 -0
  96. package/dataMap/replaceData.mjs +5 -0
  97. package/dist/handsontable.css +51 -15
  98. package/dist/handsontable.full.css +51 -15
  99. package/dist/handsontable.full.js +13360 -7840
  100. package/dist/handsontable.full.min.css +7 -7
  101. package/dist/handsontable.full.min.js +136 -136
  102. package/dist/handsontable.js +20955 -15435
  103. package/dist/handsontable.min.css +6 -6
  104. package/dist/handsontable.min.js +24 -24
  105. package/dist/languages/all.js +6 -2
  106. package/dist/languages/all.min.js +1 -1
  107. package/dist/languages/en-US.js +3 -1
  108. package/dist/languages/en-US.min.js +1 -1
  109. package/dist/languages/pl-PL.js +3 -1
  110. package/dist/languages/pl-PL.min.js +1 -1
  111. package/editorManager.js +15 -87
  112. package/editorManager.mjs +16 -87
  113. package/editors/autocompleteEditor/autocompleteEditor.js +53 -2
  114. package/editors/autocompleteEditor/autocompleteEditor.mjs +54 -3
  115. package/editors/dateEditor/dateEditor.js +26 -7
  116. package/editors/dateEditor/dateEditor.mjs +27 -8
  117. package/editors/handsontableEditor/handsontableEditor.js +9 -1
  118. package/editors/handsontableEditor/handsontableEditor.mjs +10 -2
  119. package/editors/textEditor/textEditor.js +19 -27
  120. package/editors/textEditor/textEditor.mjs +22 -30
  121. package/focusManager.d.ts +12 -0
  122. package/focusManager.js +265 -0
  123. package/focusManager.mjs +261 -0
  124. package/helpers/a11y.js +79 -0
  125. package/helpers/a11y.mjs +38 -0
  126. package/helpers/dom/element.js +188 -9
  127. package/helpers/dom/element.mjs +182 -9
  128. package/helpers/mixed.js +1 -1
  129. package/helpers/mixed.mjs +1 -1
  130. package/helpers/number.d.ts +1 -0
  131. package/helpers/number.js +18 -0
  132. package/helpers/number.mjs +17 -0
  133. package/i18n/constants.js +7 -1
  134. package/i18n/constants.mjs +4 -1
  135. package/i18n/languages/en-US.js +3 -1
  136. package/i18n/languages/en-US.mjs +3 -1
  137. package/i18n/languages/pl-PL.js +3 -1
  138. package/i18n/languages/pl-PL.mjs +3 -1
  139. package/languages/all.js +6 -2
  140. package/languages/en-US.js +3 -1
  141. package/languages/en-US.mjs +3 -1
  142. package/languages/index.js +6 -2
  143. package/languages/pl-PL.js +3 -1
  144. package/languages/pl-PL.mjs +3 -1
  145. package/package.json +21 -1
  146. package/pluginHooks.d.ts +12 -1
  147. package/pluginHooks.js +152 -1
  148. package/pluginHooks.mjs +152 -1
  149. package/plugins/collapsibleColumns/collapsibleColumns.js +74 -4
  150. package/plugins/collapsibleColumns/collapsibleColumns.mjs +75 -5
  151. package/plugins/columnSorting/columnSorting.js +43 -0
  152. package/plugins/columnSorting/columnSorting.mjs +44 -3
  153. package/plugins/columnSorting/index.js +3 -1
  154. package/plugins/columnSorting/index.mjs +1 -1
  155. package/plugins/comments/commentEditor.js +1 -0
  156. package/plugins/comments/commentEditor.mjs +1 -0
  157. package/plugins/comments/comments.js +252 -189
  158. package/plugins/comments/comments.mjs +251 -190
  159. package/plugins/comments/contextMenuItem/addEditComment.js +41 -0
  160. package/plugins/comments/contextMenuItem/addEditComment.mjs +35 -0
  161. package/plugins/comments/contextMenuItem/readOnlyComment.js +49 -0
  162. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +43 -0
  163. package/plugins/comments/contextMenuItem/removeComment.js +38 -0
  164. package/plugins/comments/contextMenuItem/removeComment.mjs +32 -0
  165. package/plugins/contextMenu/commandExecutor.js +2 -3
  166. package/plugins/contextMenu/commandExecutor.mjs +2 -3
  167. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  168. package/plugins/contextMenu/contextMenu.js +75 -36
  169. package/plugins/contextMenu/contextMenu.mjs +74 -35
  170. package/plugins/contextMenu/itemsFactory.js +2 -3
  171. package/plugins/contextMenu/itemsFactory.mjs +3 -4
  172. package/plugins/contextMenu/{cursor.mjs → menu/cursor.js} +6 -4
  173. package/plugins/contextMenu/{cursor.js → menu/cursor.mjs} +4 -10
  174. package/plugins/contextMenu/menu/defaultShortcutsList.js +88 -0
  175. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
  176. package/plugins/contextMenu/menu/index.js +9 -0
  177. package/plugins/contextMenu/menu/index.mjs +1 -0
  178. package/plugins/contextMenu/{menu.js → menu/menu.js} +145 -421
  179. package/plugins/contextMenu/{menu.mjs → menu/menu.mjs} +146 -422
  180. package/plugins/contextMenu/menu/menuItemRenderer.js +58 -0
  181. package/plugins/contextMenu/menu/menuItemRenderer.mjs +54 -0
  182. package/plugins/contextMenu/menu/navigator.js +27 -0
  183. package/plugins/contextMenu/menu/navigator.mjs +23 -0
  184. package/plugins/contextMenu/menu/positioner.js +213 -0
  185. package/plugins/contextMenu/menu/positioner.mjs +209 -0
  186. package/plugins/contextMenu/menu/shortcuts.js +114 -0
  187. package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
  188. package/plugins/contextMenu/menu/utils.js +177 -0
  189. package/plugins/contextMenu/menu/utils.mjs +163 -0
  190. package/plugins/contextMenu/predefinedItems/alignment.js +7 -0
  191. package/plugins/contextMenu/predefinedItems/alignment.mjs +7 -0
  192. package/plugins/contextMenu/predefinedItems/clearColumn.js +5 -3
  193. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +5 -3
  194. package/plugins/contextMenu/predefinedItems/columnLeft.js +5 -3
  195. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +5 -3
  196. package/plugins/contextMenu/predefinedItems/columnRight.js +5 -3
  197. package/plugins/contextMenu/predefinedItems/columnRight.mjs +5 -3
  198. package/plugins/contextMenu/{predefinedItems.js → predefinedItems/index.js} +14 -14
  199. package/plugins/contextMenu/predefinedItems/index.mjs +68 -0
  200. package/plugins/contextMenu/predefinedItems/readOnly.js +7 -0
  201. package/plugins/contextMenu/predefinedItems/readOnly.mjs +7 -0
  202. package/plugins/contextMenu/predefinedItems/removeColumn.js +7 -5
  203. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +5 -3
  204. package/plugins/contextMenu/predefinedItems/removeRow.js +7 -5
  205. package/plugins/contextMenu/predefinedItems/removeRow.mjs +5 -3
  206. package/plugins/contextMenu/predefinedItems/rowAbove.js +5 -3
  207. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +5 -3
  208. package/plugins/contextMenu/predefinedItems/rowBelow.js +5 -3
  209. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +5 -3
  210. package/plugins/contextMenu/utils.js +35 -151
  211. package/plugins/contextMenu/utils.mjs +35 -144
  212. package/plugins/copyPaste/contextMenuItem/copy.js +7 -0
  213. package/plugins/copyPaste/contextMenuItem/copy.mjs +7 -0
  214. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +9 -1
  215. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +9 -1
  216. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +9 -1
  217. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +9 -1
  218. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +9 -1
  219. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +9 -1
  220. package/plugins/copyPaste/contextMenuItem/cut.js +7 -0
  221. package/plugins/copyPaste/contextMenuItem/cut.mjs +7 -0
  222. package/plugins/copyPaste/copyPaste.js +127 -78
  223. package/plugins/copyPaste/copyPaste.mjs +128 -79
  224. package/plugins/customBorders/customBorders.js +23 -20
  225. package/plugins/customBorders/customBorders.mjs +24 -21
  226. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  227. package/plugins/dropdownMenu/dropdownMenu.js +127 -40
  228. package/plugins/dropdownMenu/dropdownMenu.mjs +126 -39
  229. package/plugins/filters/component/_base.js +23 -8
  230. package/plugins/filters/component/_base.mjs +23 -8
  231. package/plugins/filters/component/actionBar.js +29 -27
  232. package/plugins/filters/component/actionBar.mjs +26 -23
  233. package/plugins/filters/component/condition.js +46 -59
  234. package/plugins/filters/component/condition.mjs +40 -52
  235. package/plugins/filters/component/operators.js +21 -22
  236. package/plugins/filters/component/operators.mjs +18 -18
  237. package/plugins/filters/component/value.js +35 -26
  238. package/plugins/filters/component/value.mjs +32 -22
  239. package/plugins/filters/constants.mjs +1 -1
  240. package/plugins/filters/filters.js +106 -62
  241. package/plugins/filters/filters.mjs +99 -55
  242. package/plugins/filters/menu/focusController.js +123 -0
  243. package/plugins/filters/menu/focusController.mjs +119 -0
  244. package/plugins/filters/menu/focusNavigator.js +30 -0
  245. package/plugins/filters/menu/focusNavigator.mjs +26 -0
  246. package/plugins/filters/ui/_base.js +35 -13
  247. package/plugins/filters/ui/_base.mjs +35 -13
  248. package/plugins/filters/ui/input.js +43 -32
  249. package/plugins/filters/ui/input.mjs +42 -30
  250. package/plugins/filters/ui/link.js +44 -12
  251. package/plugins/filters/ui/link.mjs +44 -11
  252. package/plugins/filters/ui/multipleSelect.js +234 -129
  253. package/plugins/filters/ui/multipleSelect.mjs +232 -127
  254. package/plugins/filters/ui/radioInput.js +42 -18
  255. package/plugins/filters/ui/radioInput.mjs +42 -17
  256. package/plugins/filters/ui/select.js +144 -75
  257. package/plugins/filters/ui/select.mjs +142 -72
  258. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  259. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  260. package/plugins/manualColumnMove/manualColumnMove.js +3 -1
  261. package/plugins/manualColumnMove/manualColumnMove.mjs +3 -1
  262. package/plugins/mergeCells/mergeCells.js +5 -16
  263. package/plugins/mergeCells/mergeCells.mjs +5 -16
  264. package/plugins/multiColumnSorting/multiColumnSorting.js +37 -2
  265. package/plugins/multiColumnSorting/multiColumnSorting.mjs +37 -2
  266. package/plugins/nestedHeaders/nestedHeaders.js +240 -10
  267. package/plugins/nestedHeaders/nestedHeaders.mjs +241 -11
  268. package/plugins/nestedHeaders/stateManager/index.js +102 -3
  269. package/plugins/nestedHeaders/stateManager/index.mjs +102 -3
  270. package/plugins/nestedRows/nestedRows.js +41 -0
  271. package/plugins/nestedRows/nestedRows.mjs +41 -0
  272. package/plugins/nestedRows/ui/headers.js +11 -0
  273. package/plugins/nestedRows/ui/headers.mjs +12 -1
  274. package/renderers/autocompleteRenderer/autocompleteRenderer.js +8 -0
  275. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +8 -0
  276. package/renderers/baseRenderer/baseRenderer.js +17 -0
  277. package/renderers/baseRenderer/baseRenderer.mjs +18 -1
  278. package/renderers/checkboxRenderer/checkboxRenderer.js +9 -4
  279. package/renderers/checkboxRenderer/checkboxRenderer.mjs +9 -4
  280. package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
  281. package/renderers/dateRenderer/dateRenderer.js +29 -0
  282. package/renderers/dateRenderer/dateRenderer.mjs +24 -0
  283. package/renderers/dateRenderer/index.d.ts +1 -0
  284. package/renderers/dateRenderer/index.js +6 -0
  285. package/renderers/dateRenderer/index.mjs +1 -0
  286. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
  287. package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
  288. package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
  289. package/renderers/handsontableRenderer/index.d.ts +1 -0
  290. package/renderers/handsontableRenderer/index.js +6 -0
  291. package/renderers/handsontableRenderer/index.mjs +1 -0
  292. package/renderers/index.d.ts +9 -0
  293. package/renderers/selectRenderer/index.d.ts +1 -0
  294. package/renderers/selectRenderer/index.js +6 -0
  295. package/renderers/selectRenderer/index.mjs +1 -0
  296. package/renderers/selectRenderer/selectRenderer.d.ts +5 -0
  297. package/renderers/selectRenderer/selectRenderer.js +27 -0
  298. package/renderers/selectRenderer/selectRenderer.mjs +22 -0
  299. package/selection/highlight/highlight.js +256 -71
  300. package/selection/highlight/highlight.mjs +250 -71
  301. package/selection/highlight/types/activeHeader.js +10 -8
  302. package/selection/highlight/types/activeHeader.mjs +10 -8
  303. package/selection/highlight/types/area.js +6 -18
  304. package/selection/highlight/types/area.mjs +6 -18
  305. package/selection/highlight/types/areaLayered.js +31 -0
  306. package/selection/highlight/types/areaLayered.mjs +26 -0
  307. package/selection/highlight/types/column.js +27 -0
  308. package/selection/highlight/types/column.mjs +22 -0
  309. package/selection/highlight/types/customSelection.js +7 -9
  310. package/selection/highlight/types/customSelection.mjs +7 -9
  311. package/selection/highlight/types/fill.js +5 -7
  312. package/selection/highlight/types/fill.mjs +5 -7
  313. package/selection/highlight/types/{cell.js → focus.js} +5 -7
  314. package/selection/highlight/types/{cell.mjs → focus.mjs} +5 -7
  315. package/selection/highlight/types/header.js +9 -18
  316. package/selection/highlight/types/header.mjs +9 -18
  317. package/selection/highlight/types/row.js +27 -0
  318. package/selection/highlight/types/row.mjs +22 -0
  319. package/selection/highlight/visualSelection.js +31 -27
  320. package/selection/highlight/visualSelection.mjs +31 -27
  321. package/selection/index.js +4 -7
  322. package/selection/index.mjs +2 -3
  323. package/selection/mouseEventHandler.js +7 -1
  324. package/selection/mouseEventHandler.mjs +7 -1
  325. package/selection/range.js +8 -8
  326. package/selection/range.mjs +8 -8
  327. package/selection/selection.js +321 -152
  328. package/selection/selection.mjs +318 -151
  329. package/selection/transformation.js +232 -90
  330. package/selection/transformation.mjs +232 -90
  331. package/selection/utils.js +15 -21
  332. package/selection/utils.mjs +16 -21
  333. package/settings.d.ts +4 -0
  334. package/shortcutContexts/commands/editor/closeAndSave.js +12 -0
  335. package/shortcutContexts/commands/editor/closeAndSave.mjs +8 -0
  336. package/shortcutContexts/commands/editor/closeWithoutSaving.js +12 -0
  337. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +8 -0
  338. package/shortcutContexts/commands/editor/fastOpen.js +16 -0
  339. package/shortcutContexts/commands/editor/fastOpen.mjs +12 -0
  340. package/shortcutContexts/commands/editor/index.js +16 -0
  341. package/shortcutContexts/commands/editor/index.mjs +12 -0
  342. package/shortcutContexts/commands/editor/open.js +27 -0
  343. package/shortcutContexts/commands/editor/open.mjs +23 -0
  344. package/shortcutContexts/commands/emptySelectedCells.js +11 -0
  345. package/shortcutContexts/commands/emptySelectedCells.mjs +7 -0
  346. package/shortcutContexts/commands/extendCellsSelection/down.js +15 -0
  347. package/shortcutContexts/commands/extendCellsSelection/down.mjs +11 -0
  348. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +25 -0
  349. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +21 -0
  350. package/shortcutContexts/commands/extendCellsSelection/index.js +26 -0
  351. package/shortcutContexts/commands/extendCellsSelection/index.mjs +22 -0
  352. package/shortcutContexts/commands/extendCellsSelection/left.js +15 -0
  353. package/shortcutContexts/commands/extendCellsSelection/left.mjs +11 -0
  354. package/shortcutContexts/commands/extendCellsSelection/right.js +15 -0
  355. package/shortcutContexts/commands/extendCellsSelection/right.mjs +11 -0
  356. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +19 -0
  357. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +15 -0
  358. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +29 -0
  359. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +25 -0
  360. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +19 -0
  361. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +15 -0
  362. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +19 -0
  363. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +15 -0
  364. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +29 -0
  365. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +25 -0
  366. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +29 -0
  367. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +25 -0
  368. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +29 -0
  369. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +25 -0
  370. package/shortcutContexts/commands/extendCellsSelection/toRows.js +19 -0
  371. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +15 -0
  372. package/shortcutContexts/commands/extendCellsSelection/up.js +15 -0
  373. package/shortcutContexts/commands/extendCellsSelection/up.mjs +11 -0
  374. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +25 -0
  375. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +21 -0
  376. package/shortcutContexts/commands/index.js +35 -0
  377. package/shortcutContexts/commands/index.mjs +31 -0
  378. package/shortcutContexts/commands/moveCellSelection/down.js +13 -0
  379. package/shortcutContexts/commands/moveCellSelection/down.mjs +9 -0
  380. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +33 -0
  381. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +29 -0
  382. package/shortcutContexts/commands/moveCellSelection/index.js +28 -0
  383. package/shortcutContexts/commands/moveCellSelection/index.mjs +24 -0
  384. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +12 -0
  385. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +8 -0
  386. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +12 -0
  387. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +8 -0
  388. package/shortcutContexts/commands/moveCellSelection/left.js +10 -0
  389. package/shortcutContexts/commands/moveCellSelection/left.mjs +6 -0
  390. package/shortcutContexts/commands/moveCellSelection/right.js +10 -0
  391. package/shortcutContexts/commands/moveCellSelection/right.mjs +6 -0
  392. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +17 -0
  393. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +13 -0
  394. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +18 -0
  395. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +14 -0
  396. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +14 -0
  397. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +10 -0
  398. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +17 -0
  399. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +13 -0
  400. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +19 -0
  401. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +15 -0
  402. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +21 -0
  403. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +17 -0
  404. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +17 -0
  405. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +13 -0
  406. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +19 -0
  407. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +15 -0
  408. package/shortcutContexts/commands/moveCellSelection/up.js +13 -0
  409. package/shortcutContexts/commands/moveCellSelection/up.mjs +9 -0
  410. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +33 -0
  411. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +29 -0
  412. package/shortcutContexts/commands/populateSelectedCellsData.js +29 -0
  413. package/shortcutContexts/commands/populateSelectedCellsData.mjs +25 -0
  414. package/shortcutContexts/commands/scrollToFocusedCell.js +35 -0
  415. package/shortcutContexts/commands/scrollToFocusedCell.mjs +31 -0
  416. package/shortcutContexts/commands/selectAll.js +12 -0
  417. package/shortcutContexts/commands/selectAll.mjs +8 -0
  418. package/shortcutContexts/constants.js +13 -0
  419. package/shortcutContexts/constants.mjs +8 -0
  420. package/shortcutContexts/editor.js +25 -0
  421. package/shortcutContexts/editor.mjs +21 -0
  422. package/shortcutContexts/grid.js +163 -0
  423. package/shortcutContexts/grid.mjs +159 -0
  424. package/shortcutContexts/index.js +24 -0
  425. package/shortcutContexts/index.mjs +11 -0
  426. package/shortcuts/context.js +23 -4
  427. package/shortcuts/context.mjs +23 -5
  428. package/shortcuts/manager.js +25 -7
  429. package/shortcuts/manager.mjs +26 -7
  430. package/shortcuts/recorder.js +3 -3
  431. package/shortcuts/recorder.mjs +3 -3
  432. package/shortcuts/utils.js +19 -5
  433. package/shortcuts/utils.mjs +18 -4
  434. package/tableView.js +111 -13
  435. package/tableView.mjs +112 -14
  436. package/utils/paginator.js +151 -0
  437. package/utils/paginator.mjs +147 -0
  438. package/3rdparty/walkontable/src/selection.js +0 -295
  439. package/3rdparty/walkontable/src/selection.mjs +0 -290
  440. package/plugins/contextMenu/predefinedItems.mjs +0 -68
  441. package/plugins/copyPaste/focusableElement.js +0 -186
  442. package/plugins/copyPaste/focusableElement.mjs +0 -180
  443. package/selection/highlight/constants.js +0 -15
  444. package/selection/highlight/constants.mjs +0 -6
  445. package/selection/highlight/types/index.js +0 -35
  446. package/selection/highlight/types/index.mjs +0 -31
@@ -1,24 +1,33 @@
1
1
  "use strict";
2
2
 
3
+ require("core-js/modules/es.error.cause.js");
3
4
  exports.__esModule = true;
4
5
  require("core-js/modules/es.array.push.js");
5
- var _cursor = _interopRequireDefault(require("./cursor"));
6
- var _predefinedItems = require("./predefinedItems");
6
+ var _positioner = require("./positioner");
7
+ var _navigator2 = require("./navigator");
8
+ var _shortcuts = require("./shortcuts");
9
+ var _predefinedItems = require("./../predefinedItems");
7
10
  var _utils = require("./utils");
8
- var _core = _interopRequireDefault(require("../../core"));
9
- var _eventManager = _interopRequireDefault(require("../../eventManager"));
10
- var _array = require("../../helpers/array");
11
- var _browser = require("../../helpers/browser");
12
- var _element = require("../../helpers/dom/element");
13
- var _event = require("../../helpers/dom/event");
14
- var _function = require("../../helpers/function");
15
- var _mixed = require("../../helpers/mixed");
16
- var _object = require("../../helpers/object");
17
- var _localHooks = _interopRequireDefault(require("../../mixins/localHooks"));
11
+ var _eventManager = _interopRequireDefault(require("../../../eventManager"));
12
+ var _array = require("../../../helpers/array");
13
+ var _browser = require("../../../helpers/browser");
14
+ var _element = require("../../../helpers/dom/element");
15
+ var _event = require("../../../helpers/dom/event");
16
+ var _function = require("../../../helpers/function");
17
+ var _mixed = require("../../../helpers/mixed");
18
+ var _object = require("../../../helpers/object");
19
+ var _localHooks = _interopRequireDefault(require("../../../mixins/localHooks"));
20
+ var _menuItemRenderer = require("./menuItemRenderer");
21
+ var _a11y = require("../../../helpers/a11y");
18
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
24
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
25
+ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
26
+ function _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError("attempted to set read only private field"); } descriptor.value = value; } }
27
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
28
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
29
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
19
30
  const MIN_WIDTH = 215;
20
- const SHORTCUTS_CONTEXT = 'menu';
21
- const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
22
31
 
23
32
  /**
24
33
  * @typedef MenuOptions
@@ -35,12 +44,33 @@ const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
35
44
  * @private
36
45
  * @class Menu
37
46
  */
47
+ var _navigator = /*#__PURE__*/new WeakMap();
48
+ var _shortcutsCtrl = /*#__PURE__*/new WeakMap();
38
49
  class Menu {
39
50
  /**
40
51
  * @param {Core} hotInstance Handsontable instance.
41
52
  * @param {MenuOptions} [options] Menu options.
42
53
  */
43
54
  constructor(hotInstance, options) {
55
+ var _this = this;
56
+ /**
57
+ * The controller module that allows modifying the menu item selection positions.
58
+ *
59
+ * @type {Paginator}
60
+ */
61
+ _classPrivateFieldInitSpec(this, _navigator, {
62
+ writable: true,
63
+ value: void 0
64
+ });
65
+ /**
66
+ * The controller module that allows extending the keyboard shortcuts for the menu.
67
+ *
68
+ * @type {KeyboardShortcutsMenuController}
69
+ */
70
+ _classPrivateFieldInitSpec(this, _shortcutsCtrl, {
71
+ writable: true,
72
+ value: void 0
73
+ });
44
74
  this.hot = hotInstance;
45
75
  this.options = options || {
46
76
  parent: null,
@@ -53,20 +83,21 @@ class Menu {
53
83
  };
54
84
  this.eventManager = new _eventManager.default(this);
55
85
  this.container = this.createContainer(this.options.name);
86
+ this.positioner = new _positioner.Positioner(this.options.keepInViewport);
56
87
  this.hotMenu = null;
57
88
  this.hotSubMenus = {};
58
89
  this.parentMenu = this.options.parent || null;
59
90
  this.menuItems = null;
60
91
  this.origOutsideClickDeselects = null;
61
- this.keyEvent = false;
62
- this.offset = {
63
- above: 0,
64
- below: 0,
65
- left: 0,
66
- right: 0
67
- };
68
- this._afterScrollCallback = null;
69
92
  this.registerEvents();
93
+ if (this.isSubMenu()) {
94
+ this.addLocalHook('afterSelectionChange', function () {
95
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
96
+ args[_key] = arguments[_key];
97
+ }
98
+ return _this.parentMenu.runLocalHooks('afterSelectionChange', ...args);
99
+ });
100
+ }
70
101
  }
71
102
 
72
103
  /**
@@ -92,6 +123,24 @@ class Menu {
92
123
  this.menuItems = menuItems;
93
124
  }
94
125
 
126
+ /**
127
+ * Gets the controller object that allows modifying the the menu item selection.
128
+ *
129
+ * @returns {Paginator | undefined}
130
+ */
131
+ getNavigator() {
132
+ return _classPrivateFieldGet(this, _navigator);
133
+ }
134
+
135
+ /**
136
+ * Gets the controller object that allows extending the keyboard shortcuts of the menu.
137
+ *
138
+ * @returns {KeyboardShortcutsMenuController | undefined}
139
+ */
140
+ getKeyboardShortcutsCtrl() {
141
+ return _classPrivateFieldGet(this, _shortcutsCtrl);
142
+ }
143
+
95
144
  /**
96
145
  * Returns currently selected menu item. Returns `null` if no item was selected.
97
146
  *
@@ -110,17 +159,6 @@ class Menu {
110
159
  return Array.isArray(this.hotMenu.getSelectedLast());
111
160
  }
112
161
 
113
- /**
114
- * Set offset menu position for specified area (`above`, `below`, `left` or `right`).
115
- *
116
- * @param {string} area Specified area name (`above`, `below`, `left` or `right`).
117
- * @param {number} offset Offset value.
118
- */
119
- setOffset(area) {
120
- let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
121
- this.offset[area] = offset;
122
- }
123
-
124
162
  /**
125
163
  * Check if menu is using as sub-menu.
126
164
  *
@@ -137,7 +175,6 @@ class Menu {
137
175
  * @fires Hooks#afterContextMenuShow
138
176
  */
139
177
  open() {
140
- var _this = this;
141
178
  this.runLocalHooks('beforeOpen');
142
179
  this.container.removeAttribute('style');
143
180
  this.container.style.display = 'block';
@@ -172,16 +209,21 @@ class Menu {
172
209
  readOnly: true,
173
210
  editor: false,
174
211
  copyPaste: false,
212
+ hiddenRows: true,
175
213
  maxCols: 1,
176
214
  columns: [{
177
215
  data: 'name',
178
- renderer: (hot, TD, row, col, prop, value) => this.menuItemRenderer(hot, TD, row, col, prop, value)
216
+ renderer: (0, _menuItemRenderer.createMenuItemRenderer)(this.hot)
179
217
  }],
180
218
  renderAllRows: true,
181
219
  fragmentSelection: false,
182
220
  outsideClickDeselects: false,
183
221
  disableVisualSelection: 'area',
184
222
  layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',
223
+ ariaTags: false,
224
+ beforeOnCellMouseOver: (event, coords) => {
225
+ _classPrivateFieldGet(this, _navigator).setCurrentPage(coords.row);
226
+ },
185
227
  afterOnCellMouseOver: (event, coords) => {
186
228
  if (this.isAllSubMenusClosed()) {
187
229
  delayedOpenSubMenu(coords.row);
@@ -199,6 +241,13 @@ class Menu {
199
241
  this.close(true);
200
242
  }
201
243
  },
244
+ afterSelection: (row, column, row2, column2, preventScrolling) => {
245
+ // do not scroll the viewport when mouse clicks on partially visible menu item
246
+ if (this.hotMenu.view.isMouseDown()) {
247
+ preventScrolling.value = true;
248
+ }
249
+ this.runLocalHooks('afterSelectionChange', this.getSelectedItem());
250
+ },
202
251
  beforeOnCellMouseUp: event => {
203
252
  if (this.hasSelectedItem()) {
204
253
  shouldAutoCloseMenu = !this.isCommandPassive(this.getSelectedItem());
@@ -216,7 +265,7 @@ class Menu {
216
265
  // event hides the tapped element, the click event grabs the element below. As a result, the filter
217
266
  // by condition menu is closed and immediately open on tapping the "None" item.
218
267
  if ((0, _browser.isMobileBrowser)() || (0, _browser.isIpadOS)()) {
219
- setTimeout(() => this.close(true), 325);
268
+ this.hot._registerTimeout(() => this.close(true), 325);
220
269
  } else {
221
270
  this.close(true);
222
271
  }
@@ -232,120 +281,17 @@ class Menu {
232
281
  };
233
282
  this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects;
234
283
  this.hot.getSettings().outsideClickDeselects = false;
235
- this.hotMenu = new _core.default(this.container, settings);
284
+ this.hotMenu = new this.hot.constructor(this.container, settings);
236
285
  this.hotMenu.addHook('afterInit', () => this.onAfterInit());
237
- this.hotMenu.addHook('afterSelection', function () {
238
- return _this.onAfterSelection(...arguments);
239
- });
240
286
  this.hotMenu.init();
241
- this.hotMenu.listen();
242
- const shortcutManager = this.hotMenu.getShortcutManager();
243
- const menuContext = shortcutManager.addContext(SHORTCUTS_GROUP);
244
- const config = {
245
- group: SHORTCUTS_CONTEXT
246
- };
247
- const menuContextConfig = {
248
- ...config,
249
- runOnlyIf: event => (0, _element.isInput)(event.target) === false || this.container.contains(event.target) === false
250
- };
251
-
252
- // Default shortcuts for Handsontable should not be handled. Changing context will help with that.
253
- shortcutManager.setActiveContextName('menu');
254
- menuContext.addShortcuts([{
255
- keys: [['Escape']],
256
- callback: () => {
257
- this.keyEvent = true;
258
- this.close();
259
- this.keyEvent = false;
260
- }
261
- }, {
262
- keys: [['ArrowDown']],
263
- callback: () => {
264
- const selection = this.hotMenu.getSelectedLast();
265
- this.keyEvent = true;
266
- if (selection) {
267
- this.selectNextCell(selection[0], selection[1]);
268
- } else {
269
- this.selectFirstCell();
270
- }
271
- this.keyEvent = false;
272
- }
273
- }, {
274
- keys: [['ArrowUp']],
275
- callback: () => {
276
- const selection = this.hotMenu.getSelectedLast();
277
- this.keyEvent = true;
278
- if (selection) {
279
- this.selectPrevCell(selection[0], selection[1]);
280
- } else {
281
- this.selectLastCell();
282
- }
283
- this.keyEvent = false;
284
- }
285
- }, {
286
- keys: [['ArrowRight']],
287
- callback: () => {
288
- const selection = this.hotMenu.getSelectedLast();
289
- this.keyEvent = true;
290
- if (selection) {
291
- const menu = this.openSubMenu(selection[0]);
292
- if (menu) {
293
- menu.selectFirstCell();
294
- }
295
- }
296
- this.keyEvent = false;
297
- }
298
- }, {
299
- keys: [['ArrowLeft']],
300
- callback: () => {
301
- const selection = this.hotMenu.getSelectedLast();
302
- this.keyEvent = true;
303
- if (selection && this.isSubMenu()) {
304
- this.close();
305
- if (this.parentMenu) {
306
- this.parentMenu.hotMenu.listen();
307
- }
308
- }
309
- this.keyEvent = false;
310
- }
311
- }, {
312
- keys: [['Enter']],
313
- callback: event => {
314
- const selection = this.hotMenu.getSelectedLast();
315
- this.keyEvent = true;
316
- if (!this.hotMenu.getSourceDataAtRow(selection[0]).submenu) {
317
- this.executeCommand(event);
318
- this.close(true);
319
- }
320
- this.keyEvent = false;
321
- }
322
- }, {
323
- keys: [['PageUp']],
324
- callback: () => {
325
- const selection = this.hotMenu.getSelectedLast();
326
- this.keyEvent = true;
327
- if (selection) {
328
- this.hotMenu.selection.transformStart(-this.hotMenu.countVisibleRows(), 0);
329
- } else {
330
- this.selectFirstCell();
331
- }
332
- this.keyEvent = false;
333
- }
334
- }, {
335
- keys: [['PageDown']],
336
- callback: () => {
337
- const selection = this.hotMenu.getSelectedLast();
338
- this.keyEvent = true;
339
- if (selection) {
340
- this.hotMenu.selection.transformStart(this.hotMenu.countVisibleRows(), 0);
341
- } else {
342
- this.selectLastCell();
343
- }
344
- this.keyEvent = false;
345
- }
346
- }], menuContextConfig);
347
- this.blockMainTableCallbacks();
348
- this.runLocalHooks('afterOpen');
287
+ _classPrivateFieldSet(this, _navigator, (0, _navigator2.createMenuNavigator)(this.hotMenu));
288
+ _classPrivateFieldSet(this, _shortcutsCtrl, (0, _shortcuts.createKeyboardShortcutsCtrl)(this));
289
+ _classPrivateFieldGet(this, _shortcutsCtrl).listen();
290
+ this.focus();
291
+ if (this.isSubMenu()) {
292
+ this.addLocalHook('afterOpen', () => this.parentMenu.runLocalHooks('afterSubmenuOpen', this));
293
+ }
294
+ this.runLocalHooks('afterOpen', this);
349
295
  }
350
296
 
351
297
  /**
@@ -358,17 +304,24 @@ class Menu {
358
304
  if (!this.isOpened()) {
359
305
  return;
360
306
  }
361
- if (closeParent && this.parentMenu) {
307
+ if (closeParent && this.isSubMenu()) {
362
308
  this.parentMenu.close();
363
309
  } else {
310
+ _classPrivateFieldGet(this, _navigator).clear();
364
311
  this.closeAllSubMenus();
365
312
  this.container.style.display = 'none';
366
- this.releaseMainTableCallbacks();
367
313
  this.hotMenu.destroy();
368
314
  this.hotMenu = null;
369
315
  this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects;
370
316
  this.runLocalHooks('afterClose');
371
- if (this.parentMenu) {
317
+ if (this.isSubMenu()) {
318
+ if (this.hot.getSettings().ariaTags) {
319
+ const selection = this.parentMenu.hotMenu.getSelectedLast();
320
+ if (selection) {
321
+ const cell = this.parentMenu.hotMenu.getCell(selection[0], 0);
322
+ (0, _element.setAttribute)(cell, [(0, _a11y.A11Y_EXPANDED)(false)]);
323
+ }
324
+ }
372
325
  this.parentMenu.hotMenu.listen();
373
326
  }
374
327
  }
@@ -401,6 +354,11 @@ class Menu {
401
354
  subMenu.open();
402
355
  subMenu.setPosition(cell.getBoundingClientRect());
403
356
  this.hotSubMenus[dataItem.key] = subMenu;
357
+
358
+ // Update the accessibility tags on the cell being the base for the submenu.
359
+ if (this.hot.getSettings().ariaTags) {
360
+ (0, _element.setAttribute)(cell, [(0, _a11y.A11Y_EXPANDED)(true)]);
361
+ }
404
362
  return subMenu;
405
363
  }
406
364
 
@@ -415,6 +373,12 @@ class Menu {
415
373
  if (menus) {
416
374
  menus.destroy();
417
375
  delete this.hotSubMenus[dataItem.key];
376
+ const cell = this.hotMenu.getCell(row, 0);
377
+
378
+ // Update the accessibility tags on the cell being the base for the submenu.
379
+ if (this.hot.getSettings().ariaTags) {
380
+ (0, _element.setAttribute)(cell, [(0, _a11y.A11Y_EXPANDED)(false)]);
381
+ }
418
382
  }
419
383
  }
420
384
 
@@ -434,6 +398,19 @@ class Menu {
434
398
  return Object.keys(this.hotSubMenus).length === 0;
435
399
  }
436
400
 
401
+ /**
402
+ * Focus the menu so all keyboard shortcuts become active.
403
+ */
404
+ focus() {
405
+ if (this.isOpened()) {
406
+ this.hotMenu.rootElement.focus({
407
+ preventScroll: true
408
+ });
409
+ this.getKeyboardShortcutsCtrl().listen();
410
+ this.hotMenu.listen();
411
+ }
412
+ }
413
+
437
414
  /**
438
415
  * Destroy instance.
439
416
  */
@@ -493,252 +470,30 @@ class Menu {
493
470
  * @returns {boolean}
494
471
  */
495
472
  isCommandPassive(commandDescriptor) {
496
- const {
497
- isCommand,
498
- name: commandName,
499
- disabled,
500
- submenu
501
- } = commandDescriptor;
502
- const isItemDisabled = disabled === true || typeof disabled === 'function' && disabled.call(this.hot) === true;
503
- return isCommand === false || commandName === _predefinedItems.SEPARATOR || isItemDisabled === true || submenu;
473
+ return commandDescriptor.isCommand === false || (0, _utils.isItemSeparator)(commandDescriptor) || (0, _utils.isItemDisabled)(commandDescriptor, this.hot) || (0, _utils.isItemSubMenu)(commandDescriptor);
504
474
  }
505
475
 
506
476
  /**
507
- * Set menu position based on dom event or based on literal object.
508
- *
509
- * @param {Event|object} coords Event or literal Object with coordinates.
510
- */
511
- setPosition(coords) {
512
- const cursor = new _cursor.default(coords, this.container.ownerDocument.defaultView);
513
- if (this.options.keepInViewport) {
514
- if (cursor.fitsBelow(this.container)) {
515
- this.setPositionBelowCursor(cursor);
516
- } else if (cursor.fitsAbove(this.container)) {
517
- this.setPositionAboveCursor(cursor);
518
- } else {
519
- this.setPositionBelowCursor(cursor);
520
- }
521
- if (this.hot.isLtr()) {
522
- this.setHorizontalPositionForLtr(cursor);
523
- } else {
524
- this.setHorizontalPositionForRtl(cursor);
525
- }
526
- } else {
527
- this.setPositionBelowCursor(cursor);
528
- this.setPositionOnRightOfCursor(cursor);
529
- }
530
- }
531
-
532
- /**
533
- * Set menu horizontal position for RTL mode.
534
- *
535
- * @param {Cursor} cursor `Cursor` object.
536
- */
537
- setHorizontalPositionForRtl(cursor) {
538
- if (cursor.fitsOnLeft(this.container)) {
539
- this.setPositionOnLeftOfCursor(cursor);
540
- } else {
541
- this.setPositionOnRightOfCursor(cursor);
542
- }
543
- }
544
-
545
- /**
546
- * Set menu horizontal position for LTR mode.
547
- *
548
- * @param {Cursor} cursor `Cursor` object.
549
- */
550
- setHorizontalPositionForLtr(cursor) {
551
- if (cursor.fitsOnRight(this.container)) {
552
- this.setPositionOnRightOfCursor(cursor);
553
- } else {
554
- this.setPositionOnLeftOfCursor(cursor);
555
- }
556
- }
557
-
558
- /**
559
- * Set menu position above cursor object.
560
- *
561
- * @param {Cursor} cursor `Cursor` object.
562
- */
563
- setPositionAboveCursor(cursor) {
564
- let top = this.offset.above + cursor.top - this.container.offsetHeight;
565
- if (this.isSubMenu()) {
566
- top = cursor.top + cursor.cellHeight - this.container.offsetHeight + 3;
567
- }
568
- this.container.style.top = `${top}px`;
569
- }
570
-
571
- /**
572
- * Set menu position below cursor object.
573
- *
574
- * @param {Cursor} cursor `Cursor` object.
575
- */
576
- setPositionBelowCursor(cursor) {
577
- let top = this.offset.below + cursor.top + 1;
578
- if (this.isSubMenu()) {
579
- top = cursor.top - 1;
580
- }
581
- this.container.style.top = `${top}px`;
582
- }
583
-
584
- /**
585
- * Set menu position on the right of cursor object.
477
+ * Set offset menu position for specified area (`above`, `below`, `left` or `right`).
586
478
  *
587
- * @param {Cursor} cursor `Cursor` object.
479
+ * @param {string} area Specified area name (`above`, `below`, `left` or `right`).
480
+ * @param {number} offset Offset value.
588
481
  */
589
- setPositionOnRightOfCursor(cursor) {
590
- let left = cursor.left;
591
- if (this.isSubMenu()) {
592
- const {
593
- right: parentMenuRight
594
- } = this.parentMenu.container.getBoundingClientRect();
595
-
596
- // move the sub menu by the width of the parent's border (usually by 1-2 pixels)
597
- left += cursor.cellWidth + parentMenuRight - (cursor.left + cursor.cellWidth);
598
- } else {
599
- left += this.offset.right;
600
- }
601
- this.container.style.left = `${left}px`;
482
+ setOffset(area) {
483
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
484
+ this.positioner.setOffset(area, offset);
602
485
  }
603
486
 
604
487
  /**
605
- * Set menu position on the left of cursor object.
488
+ * Set menu position based on dom event or based on literal object.
606
489
  *
607
- * @param {Cursor} cursor `Cursor` object.
490
+ * @param {Event|object} coords Event or literal Object with coordinates.
608
491
  */
609
- setPositionOnLeftOfCursor(cursor) {
610
- let left = this.offset.left + cursor.left - this.container.offsetWidth;
492
+ setPosition(coords) {
611
493
  if (this.isSubMenu()) {
612
- const {
613
- left: parentMenuLeft
614
- } = this.parentMenu.container.getBoundingClientRect();
615
-
616
- // move the sub menu by the width of the parent's border (usually by 1-2 pixels)
617
- left -= cursor.left - parentMenuLeft;
618
- }
619
- this.container.style.left = `${left}px`;
620
- }
621
-
622
- /**
623
- * Select first cell in opened menu.
624
- */
625
- selectFirstCell() {
626
- const cell = this.hotMenu.getCell(0, 0);
627
- if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {
628
- this.selectNextCell(0, 0);
629
- } else {
630
- this.hotMenu.selectCell(0, 0);
631
- }
632
- }
633
-
634
- /**
635
- * Select last cell in opened menu.
636
- */
637
- selectLastCell() {
638
- const lastRow = this.hotMenu.countRows() - 1;
639
- const cell = this.hotMenu.getCell(lastRow, 0);
640
- if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {
641
- this.selectPrevCell(lastRow, 0);
642
- } else {
643
- // disable default "scroll-to-cell" option and instead of that...
644
- this.hotMenu.selectCell(lastRow, 0, undefined, undefined, false);
645
- // ...scroll to the cell with "snap to the bottom" option
646
- this.hotMenu.scrollViewportTo(lastRow, 0, true, false);
647
- }
648
- }
649
-
650
- /**
651
- * Select next cell in opened menu.
652
- *
653
- * @param {number} row Row index.
654
- * @param {number} col Column index.
655
- */
656
- selectNextCell(row, col) {
657
- const nextRow = row + 1;
658
- const cell = nextRow < this.hotMenu.countRows() ? this.hotMenu.getCell(nextRow, col) : null;
659
- if (!cell) {
660
- return;
661
- }
662
- if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {
663
- this.selectNextCell(nextRow, col);
664
- } else {
665
- this.hotMenu.selectCell(nextRow, col);
666
- }
667
- }
668
-
669
- /**
670
- * Select previous cell in opened menu.
671
- *
672
- * @param {number} row Row index.
673
- * @param {number} col Column index.
674
- */
675
- selectPrevCell(row, col) {
676
- const prevRow = row - 1;
677
- const cell = prevRow >= 0 ? this.hotMenu.getCell(prevRow, col) : null;
678
- if (!cell) {
679
- return;
680
- }
681
- if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {
682
- this.selectPrevCell(prevRow, col);
683
- } else {
684
- this.hotMenu.selectCell(prevRow, col);
685
- }
686
- }
687
-
688
- /**
689
- * Menu item renderer.
690
- *
691
- * @private
692
- * @param {Core} hot The Handsontable instance.
693
- * @param {HTMLCellElement} TD The rendered cell element.
694
- * @param {number} row The visual index.
695
- * @param {number} col The visual index.
696
- * @param {string} prop The column property if used.
697
- * @param {string} value The cell value.
698
- */
699
- menuItemRenderer(hot, TD, row, col, prop, value) {
700
- const item = hot.getSourceDataAtRow(row);
701
- const wrapper = this.hot.rootDocument.createElement('div');
702
- const isSubMenu = itemToTest => (0, _object.hasOwnProperty)(itemToTest, 'submenu');
703
- const itemIsSeparator = itemToTest => new RegExp(_predefinedItems.SEPARATOR, 'i').test(itemToTest.name);
704
- const itemIsDisabled = itemToTest => itemToTest.disabled === true || typeof itemToTest.disabled === 'function' && itemToTest.disabled.call(this.hot) === true;
705
- const itemIsSelectionDisabled = itemToTest => itemToTest.disableSelection;
706
- let itemValue = value;
707
- if (typeof itemValue === 'function') {
708
- itemValue = itemValue.call(this.hot);
709
- }
710
- (0, _element.empty)(TD);
711
- (0, _element.addClass)(wrapper, 'htItemWrapper');
712
- TD.appendChild(wrapper);
713
- if (itemIsSeparator(item)) {
714
- (0, _element.addClass)(TD, 'htSeparator');
715
- } else if (typeof item.renderer === 'function') {
716
- (0, _element.addClass)(TD, 'htCustomMenuRenderer');
717
- TD.appendChild(item.renderer(hot, wrapper, row, col, prop, itemValue));
718
- } else {
719
- (0, _element.fastInnerHTML)(wrapper, itemValue);
720
- }
721
- if (itemIsDisabled(item)) {
722
- (0, _element.addClass)(TD, 'htDisabled');
723
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
724
- } else if (itemIsSelectionDisabled(item)) {
725
- (0, _element.addClass)(TD, 'htSelectionDisabled');
726
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
727
- } else if (isSubMenu(item)) {
728
- (0, _element.addClass)(TD, 'htSubmenu');
729
- if (itemIsSelectionDisabled(item)) {
730
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
731
- } else {
732
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
733
- }
734
- } else {
735
- (0, _element.removeClass)(TD, ['htSubmenu', 'htDisabled']);
736
- if (itemIsSelectionDisabled(item)) {
737
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
738
- } else {
739
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
740
- }
494
+ this.positioner.setParentElement(this.parentMenu.container);
741
495
  }
496
+ this.positioner.setElement(this.container).updatePosition(coords);
742
497
  }
743
498
 
744
499
  /**
@@ -777,26 +532,6 @@ class Menu {
777
532
  return container;
778
533
  }
779
534
 
780
- /**
781
- * @private
782
- */
783
- blockMainTableCallbacks() {
784
- this._afterScrollCallback = function () {};
785
- this.hot.addHook('afterScrollVertically', this._afterScrollCallback);
786
- this.hot.addHook('afterScrollHorizontally', this._afterScrollCallback);
787
- }
788
-
789
- /**
790
- * @private
791
- */
792
- releaseMainTableCallbacks() {
793
- if (this._afterScrollCallback) {
794
- this.hot.removeHook('afterScrollVertically', this._afterScrollCallback);
795
- this.hot.removeHook('afterScrollHorizontally', this._afterScrollCallback);
796
- this._afterScrollCallback = null;
797
- }
798
- }
799
-
800
535
  /**
801
536
  * On after init listener.
802
537
  *
@@ -816,20 +551,10 @@ class Menu {
816
551
  holderStyle.width = `${currentHiderWidth + 3}px`;
817
552
  holderStyle.height = `${realHeight + 3}px`;
818
553
  hiderStyle.height = holderStyle.height;
819
- }
820
554
 
821
- /**
822
- * On after selection listener.
823
- *
824
- * @param {number} r Selection start row index.
825
- * @param {number} c Selection start column index.
826
- * @param {number} r2 Selection end row index.
827
- * @param {number} c2 Selection end column index.
828
- * @param {object} preventScrolling Object with `value` property where its value change will be observed.
829
- */
830
- onAfterSelection(r, c, r2, c2, preventScrolling) {
831
- if (this.keyEvent === false) {
832
- preventScrolling.value = true;
555
+ // Replace the default accessibility tags with the context menu's
556
+ if (this.hot.getSettings().ariaTags) {
557
+ (0, _element.setAttribute)(this.hotMenu.rootElement, [(0, _a11y.A11Y_MENU)(), (0, _a11y.A11Y_TABINDEX)(-1)]);
833
558
  }
834
559
  }
835
560
 
@@ -869,6 +594,5 @@ class Menu {
869
594
  }
870
595
  }
871
596
  }
872
- (0, _object.mixin)(Menu, _localHooks.default);
873
- var _default = Menu;
874
- exports.default = _default;
597
+ exports.Menu = Menu;
598
+ (0, _object.mixin)(Menu, _localHooks.default);