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

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

Potentially problematic release.


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

Files changed (446) hide show
  1. package/3rdparty/walkontable/src/{selection/border/border.js → border.js} +12 -7
  2. package/3rdparty/walkontable/src/{selection/border/border.mjs → border.mjs} +12 -7
  3. package/3rdparty/walkontable/src/cell/coords.d.ts +1 -6
  4. package/3rdparty/walkontable/src/cell/coords.js +11 -50
  5. package/3rdparty/walkontable/src/cell/coords.mjs +11 -50
  6. package/3rdparty/walkontable/src/cell/range.d.ts +2 -9
  7. package/3rdparty/walkontable/src/cell/range.js +7 -38
  8. package/3rdparty/walkontable/src/cell/range.mjs +7 -38
  9. package/3rdparty/walkontable/src/core/_base.js +3 -9
  10. package/3rdparty/walkontable/src/core/_base.mjs +3 -9
  11. package/3rdparty/walkontable/src/core/clone.js +2 -2
  12. package/3rdparty/walkontable/src/core/clone.mjs +2 -2
  13. package/3rdparty/walkontable/src/core/core.js +2 -3
  14. package/3rdparty/walkontable/src/core/core.mjs +2 -3
  15. package/3rdparty/walkontable/src/event.js +10 -12
  16. package/3rdparty/walkontable/src/event.mjs +10 -12
  17. package/3rdparty/walkontable/src/facade/core.js +2 -2
  18. package/3rdparty/walkontable/src/facade/core.mjs +2 -2
  19. package/3rdparty/walkontable/src/index.js +2 -10
  20. package/3rdparty/walkontable/src/index.mjs +2 -2
  21. package/3rdparty/walkontable/src/overlay/_base.js +2 -13
  22. package/3rdparty/walkontable/src/overlay/_base.mjs +3 -14
  23. package/3rdparty/walkontable/src/overlay/inlineStart.js +6 -2
  24. package/3rdparty/walkontable/src/overlay/inlineStart.mjs +6 -2
  25. package/3rdparty/walkontable/src/overlay/top.js +6 -2
  26. package/3rdparty/walkontable/src/overlay/top.mjs +6 -2
  27. package/3rdparty/walkontable/src/renderer/cells.js +0 -10
  28. package/3rdparty/walkontable/src/renderer/cells.mjs +1 -11
  29. package/3rdparty/walkontable/src/renderer/columnHeaders.js +0 -10
  30. package/3rdparty/walkontable/src/renderer/columnHeaders.mjs +1 -11
  31. package/3rdparty/walkontable/src/renderer/rowHeaders.js +0 -5
  32. package/3rdparty/walkontable/src/renderer/rowHeaders.mjs +0 -5
  33. package/3rdparty/walkontable/src/renderer/rows.js +0 -13
  34. package/3rdparty/walkontable/src/renderer/rows.mjs +0 -13
  35. package/3rdparty/walkontable/src/renderer/table.js +0 -9
  36. package/3rdparty/walkontable/src/renderer/table.mjs +0 -9
  37. package/3rdparty/walkontable/src/scroll.js +0 -2
  38. package/3rdparty/walkontable/src/scroll.mjs +0 -2
  39. package/3rdparty/walkontable/src/selection.js +295 -0
  40. package/3rdparty/walkontable/src/selection.mjs +290 -0
  41. package/3rdparty/walkontable/src/settings.js +4 -13
  42. package/3rdparty/walkontable/src/settings.mjs +4 -13
  43. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.js +0 -9
  44. package/3rdparty/walkontable/src/table/mixin/calculatedColumns.mjs +0 -9
  45. package/3rdparty/walkontable/src/table/mixin/calculatedRows.js +0 -9
  46. package/3rdparty/walkontable/src/table/mixin/calculatedRows.mjs +0 -9
  47. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.js +0 -9
  48. package/3rdparty/walkontable/src/table/mixin/stickyColumnsStart.mjs +0 -9
  49. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.js +0 -9
  50. package/3rdparty/walkontable/src/table/mixin/stickyRowsBottom.mjs +0 -9
  51. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.js +0 -9
  52. package/3rdparty/walkontable/src/table/mixin/stickyRowsTop.mjs +0 -9
  53. package/3rdparty/walkontable/src/table.js +78 -19
  54. package/3rdparty/walkontable/src/table.mjs +79 -20
  55. package/base.js +2 -2
  56. package/base.mjs +2 -2
  57. package/cellTypes/dateType/dateType.d.ts +3 -3
  58. package/cellTypes/dateType/dateType.js +2 -2
  59. package/cellTypes/dateType/dateType.mjs +2 -2
  60. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  61. package/cellTypes/handsontableType/handsontableType.js +2 -2
  62. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  63. package/cellTypes/index.d.ts +0 -3
  64. package/cellTypes/index.js +0 -4
  65. package/cellTypes/index.mjs +1 -3
  66. package/core.d.ts +4 -9
  67. package/core.js +327 -285
  68. package/core.mjs +327 -285
  69. package/dataMap/metaManager/metaSchema.js +0 -65
  70. package/dataMap/metaManager/metaSchema.mjs +0 -65
  71. package/dataMap/metaManager/mods/extendMetaProperties.js +1 -7
  72. package/dataMap/metaManager/mods/extendMetaProperties.mjs +1 -7
  73. package/dataMap/replaceData.js +0 -5
  74. package/dataMap/replaceData.mjs +0 -5
  75. package/dist/handsontable.css +15 -51
  76. package/dist/handsontable.full.css +15 -51
  77. package/dist/handsontable.full.js +8668 -14188
  78. package/dist/handsontable.full.min.css +7 -7
  79. package/dist/handsontable.full.min.js +136 -136
  80. package/dist/handsontable.js +22829 -28349
  81. package/dist/handsontable.min.css +6 -6
  82. package/dist/handsontable.min.js +24 -24
  83. package/dist/languages/all.js +2 -6
  84. package/dist/languages/all.min.js +1 -1
  85. package/dist/languages/en-US.js +1 -3
  86. package/dist/languages/en-US.min.js +1 -1
  87. package/dist/languages/pl-PL.js +1 -3
  88. package/dist/languages/pl-PL.min.js +1 -1
  89. package/editorManager.js +87 -15
  90. package/editorManager.mjs +87 -16
  91. package/editors/autocompleteEditor/autocompleteEditor.js +2 -53
  92. package/editors/autocompleteEditor/autocompleteEditor.mjs +3 -54
  93. package/editors/dateEditor/dateEditor.js +7 -26
  94. package/editors/dateEditor/dateEditor.mjs +8 -27
  95. package/editors/handsontableEditor/handsontableEditor.js +1 -9
  96. package/editors/handsontableEditor/handsontableEditor.mjs +2 -10
  97. package/editors/textEditor/textEditor.js +27 -19
  98. package/editors/textEditor/textEditor.mjs +30 -22
  99. package/helpers/dom/element.js +9 -188
  100. package/helpers/dom/element.mjs +9 -182
  101. package/helpers/mixed.js +1 -1
  102. package/helpers/mixed.mjs +1 -1
  103. package/helpers/number.d.ts +0 -1
  104. package/helpers/number.js +0 -18
  105. package/helpers/number.mjs +0 -17
  106. package/i18n/constants.js +1 -7
  107. package/i18n/constants.mjs +1 -4
  108. package/i18n/languages/en-US.js +1 -3
  109. package/i18n/languages/en-US.mjs +1 -3
  110. package/i18n/languages/pl-PL.js +1 -3
  111. package/i18n/languages/pl-PL.mjs +1 -3
  112. package/languages/all.js +2 -6
  113. package/languages/en-US.js +1 -3
  114. package/languages/en-US.mjs +1 -3
  115. package/languages/index.js +2 -6
  116. package/languages/pl-PL.js +1 -3
  117. package/languages/pl-PL.mjs +1 -3
  118. package/package.json +99 -116
  119. package/pluginHooks.d.ts +1 -12
  120. package/pluginHooks.js +1 -152
  121. package/pluginHooks.mjs +1 -152
  122. package/plugins/collapsibleColumns/collapsibleColumns.js +4 -74
  123. package/plugins/collapsibleColumns/collapsibleColumns.mjs +5 -75
  124. package/plugins/columnSorting/columnSorting.js +0 -43
  125. package/plugins/columnSorting/columnSorting.mjs +3 -44
  126. package/plugins/columnSorting/index.js +1 -3
  127. package/plugins/columnSorting/index.mjs +1 -1
  128. package/plugins/comments/commentEditor.js +0 -1
  129. package/plugins/comments/commentEditor.mjs +0 -1
  130. package/plugins/comments/comments.js +189 -252
  131. package/plugins/comments/comments.mjs +190 -251
  132. package/plugins/contextMenu/commandExecutor.js +3 -2
  133. package/plugins/contextMenu/commandExecutor.mjs +3 -2
  134. package/plugins/contextMenu/contextMenu.d.ts +1 -1
  135. package/plugins/contextMenu/contextMenu.js +36 -75
  136. package/plugins/contextMenu/contextMenu.mjs +35 -74
  137. package/plugins/contextMenu/{menu/cursor.mjs → cursor.js} +10 -4
  138. package/plugins/contextMenu/{menu/cursor.js → cursor.mjs} +4 -6
  139. package/plugins/contextMenu/itemsFactory.js +3 -2
  140. package/plugins/contextMenu/itemsFactory.mjs +4 -3
  141. package/plugins/contextMenu/{menu/menu.js → menu.js} +421 -145
  142. package/plugins/contextMenu/{menu/menu.mjs → menu.mjs} +422 -146
  143. package/plugins/contextMenu/predefinedItems/alignment.js +0 -7
  144. package/plugins/contextMenu/predefinedItems/alignment.mjs +0 -7
  145. package/plugins/contextMenu/predefinedItems/clearColumn.js +3 -5
  146. package/plugins/contextMenu/predefinedItems/clearColumn.mjs +3 -5
  147. package/plugins/contextMenu/predefinedItems/columnLeft.js +3 -5
  148. package/plugins/contextMenu/predefinedItems/columnLeft.mjs +3 -5
  149. package/plugins/contextMenu/predefinedItems/columnRight.js +3 -5
  150. package/plugins/contextMenu/predefinedItems/columnRight.mjs +3 -5
  151. package/plugins/contextMenu/predefinedItems/readOnly.js +0 -7
  152. package/plugins/contextMenu/predefinedItems/readOnly.mjs +0 -7
  153. package/plugins/contextMenu/predefinedItems/removeColumn.js +5 -7
  154. package/plugins/contextMenu/predefinedItems/removeColumn.mjs +3 -5
  155. package/plugins/contextMenu/predefinedItems/removeRow.js +5 -7
  156. package/plugins/contextMenu/predefinedItems/removeRow.mjs +3 -5
  157. package/plugins/contextMenu/predefinedItems/rowAbove.js +3 -5
  158. package/plugins/contextMenu/predefinedItems/rowAbove.mjs +3 -5
  159. package/plugins/contextMenu/predefinedItems/rowBelow.js +3 -5
  160. package/plugins/contextMenu/predefinedItems/rowBelow.mjs +3 -5
  161. package/plugins/contextMenu/{predefinedItems/index.js → predefinedItems.js} +14 -14
  162. package/plugins/contextMenu/predefinedItems.mjs +68 -0
  163. package/plugins/contextMenu/utils.js +151 -35
  164. package/plugins/contextMenu/utils.mjs +144 -35
  165. package/plugins/copyPaste/contextMenuItem/copy.js +0 -7
  166. package/plugins/copyPaste/contextMenuItem/copy.mjs +0 -7
  167. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.js +1 -9
  168. package/plugins/copyPaste/contextMenuItem/copyColumnHeadersOnly.mjs +1 -9
  169. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.js +1 -9
  170. package/plugins/copyPaste/contextMenuItem/copyWithColumnGroupHeaders.mjs +1 -9
  171. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.js +1 -9
  172. package/plugins/copyPaste/contextMenuItem/copyWithColumnHeaders.mjs +1 -9
  173. package/plugins/copyPaste/contextMenuItem/cut.js +0 -7
  174. package/plugins/copyPaste/contextMenuItem/cut.mjs +0 -7
  175. package/plugins/copyPaste/copyPaste.js +78 -127
  176. package/plugins/copyPaste/copyPaste.mjs +79 -128
  177. package/plugins/copyPaste/focusableElement.js +186 -0
  178. package/plugins/copyPaste/focusableElement.mjs +180 -0
  179. package/plugins/customBorders/customBorders.js +20 -23
  180. package/plugins/customBorders/customBorders.mjs +21 -24
  181. package/plugins/dropdownMenu/dropdownMenu.d.ts +1 -1
  182. package/plugins/dropdownMenu/dropdownMenu.js +40 -127
  183. package/plugins/dropdownMenu/dropdownMenu.mjs +39 -126
  184. package/plugins/filters/component/_base.js +8 -23
  185. package/plugins/filters/component/_base.mjs +8 -23
  186. package/plugins/filters/component/actionBar.js +27 -29
  187. package/plugins/filters/component/actionBar.mjs +23 -26
  188. package/plugins/filters/component/condition.js +59 -46
  189. package/plugins/filters/component/condition.mjs +52 -40
  190. package/plugins/filters/component/operators.js +22 -21
  191. package/plugins/filters/component/operators.mjs +18 -18
  192. package/plugins/filters/component/value.js +26 -35
  193. package/plugins/filters/component/value.mjs +22 -32
  194. package/plugins/filters/constants.mjs +1 -1
  195. package/plugins/filters/filters.js +62 -106
  196. package/plugins/filters/filters.mjs +55 -99
  197. package/plugins/filters/ui/_base.js +13 -35
  198. package/plugins/filters/ui/_base.mjs +13 -35
  199. package/plugins/filters/ui/input.js +32 -43
  200. package/plugins/filters/ui/input.mjs +30 -42
  201. package/plugins/filters/ui/link.js +12 -44
  202. package/plugins/filters/ui/link.mjs +11 -44
  203. package/plugins/filters/ui/multipleSelect.js +129 -234
  204. package/plugins/filters/ui/multipleSelect.mjs +127 -232
  205. package/plugins/filters/ui/radioInput.js +18 -42
  206. package/plugins/filters/ui/radioInput.mjs +17 -42
  207. package/plugins/filters/ui/select.js +75 -144
  208. package/plugins/filters/ui/select.mjs +72 -142
  209. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  210. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  211. package/plugins/manualColumnMove/manualColumnMove.js +1 -3
  212. package/plugins/manualColumnMove/manualColumnMove.mjs +1 -3
  213. package/plugins/mergeCells/mergeCells.js +16 -5
  214. package/plugins/mergeCells/mergeCells.mjs +16 -5
  215. package/plugins/multiColumnSorting/multiColumnSorting.js +2 -37
  216. package/plugins/multiColumnSorting/multiColumnSorting.mjs +2 -37
  217. package/plugins/nestedHeaders/nestedHeaders.js +10 -240
  218. package/plugins/nestedHeaders/nestedHeaders.mjs +11 -241
  219. package/plugins/nestedHeaders/stateManager/index.js +3 -102
  220. package/plugins/nestedHeaders/stateManager/index.mjs +3 -102
  221. package/plugins/nestedRows/nestedRows.js +0 -41
  222. package/plugins/nestedRows/nestedRows.mjs +0 -41
  223. package/plugins/nestedRows/ui/headers.js +0 -11
  224. package/plugins/nestedRows/ui/headers.mjs +1 -12
  225. package/renderers/autocompleteRenderer/autocompleteRenderer.js +0 -8
  226. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +0 -8
  227. package/renderers/baseRenderer/baseRenderer.js +0 -17
  228. package/renderers/baseRenderer/baseRenderer.mjs +1 -18
  229. package/renderers/checkboxRenderer/checkboxRenderer.js +4 -9
  230. package/renderers/checkboxRenderer/checkboxRenderer.mjs +4 -9
  231. package/renderers/index.d.ts +0 -9
  232. package/selection/highlight/constants.js +15 -0
  233. package/selection/highlight/constants.mjs +6 -0
  234. package/selection/highlight/highlight.js +71 -256
  235. package/selection/highlight/highlight.mjs +71 -250
  236. package/selection/highlight/types/activeHeader.js +8 -10
  237. package/selection/highlight/types/activeHeader.mjs +8 -10
  238. package/selection/highlight/types/area.js +18 -6
  239. package/selection/highlight/types/area.mjs +18 -6
  240. package/selection/highlight/types/{focus.js → cell.js} +7 -5
  241. package/selection/highlight/types/{focus.mjs → cell.mjs} +7 -5
  242. package/selection/highlight/types/customSelection.js +9 -7
  243. package/selection/highlight/types/customSelection.mjs +9 -7
  244. package/selection/highlight/types/fill.js +7 -5
  245. package/selection/highlight/types/fill.mjs +7 -5
  246. package/selection/highlight/types/header.js +18 -9
  247. package/selection/highlight/types/header.mjs +18 -9
  248. package/selection/highlight/types/index.js +35 -0
  249. package/selection/highlight/types/index.mjs +31 -0
  250. package/selection/highlight/visualSelection.js +27 -31
  251. package/selection/highlight/visualSelection.mjs +27 -31
  252. package/selection/index.js +7 -4
  253. package/selection/index.mjs +3 -2
  254. package/selection/mouseEventHandler.js +1 -7
  255. package/selection/mouseEventHandler.mjs +1 -7
  256. package/selection/range.js +8 -8
  257. package/selection/range.mjs +8 -8
  258. package/selection/selection.js +152 -321
  259. package/selection/selection.mjs +151 -318
  260. package/selection/transformation.js +90 -232
  261. package/selection/transformation.mjs +90 -232
  262. package/selection/utils.js +21 -15
  263. package/selection/utils.mjs +21 -16
  264. package/settings.d.ts +0 -4
  265. package/shortcuts/context.js +4 -23
  266. package/shortcuts/context.mjs +5 -23
  267. package/shortcuts/manager.js +7 -25
  268. package/shortcuts/manager.mjs +7 -26
  269. package/shortcuts/recorder.js +3 -3
  270. package/shortcuts/recorder.mjs +3 -3
  271. package/shortcuts/utils.js +5 -19
  272. package/shortcuts/utils.mjs +4 -18
  273. package/tableView.js +13 -111
  274. package/tableView.mjs +14 -112
  275. package/3rdparty/walkontable/src/selection/border/constants.js +0 -16
  276. package/3rdparty/walkontable/src/selection/border/constants.mjs +0 -12
  277. package/3rdparty/walkontable/src/selection/constants.js +0 -62
  278. package/3rdparty/walkontable/src/selection/constants.mjs +0 -51
  279. package/3rdparty/walkontable/src/selection/index.js +0 -26
  280. package/3rdparty/walkontable/src/selection/index.mjs +0 -5
  281. package/3rdparty/walkontable/src/selection/manager.js +0 -274
  282. package/3rdparty/walkontable/src/selection/manager.mjs +0 -269
  283. package/3rdparty/walkontable/src/selection/scanner.js +0 -270
  284. package/3rdparty/walkontable/src/selection/scanner.mjs +0 -267
  285. package/3rdparty/walkontable/src/selection/selection.js +0 -101
  286. package/3rdparty/walkontable/src/selection/selection.mjs +0 -96
  287. package/cellTypes/selectType/index.d.ts +0 -1
  288. package/cellTypes/selectType/index.js +0 -6
  289. package/cellTypes/selectType/index.mjs +0 -1
  290. package/cellTypes/selectType/selectType.d.ts +0 -14
  291. package/cellTypes/selectType/selectType.js +0 -13
  292. package/cellTypes/selectType/selectType.mjs +0 -8
  293. package/core/focusCatcher/focusDetector.js +0 -63
  294. package/core/focusCatcher/focusDetector.mjs +0 -59
  295. package/core/focusCatcher/index.js +0 -142
  296. package/core/focusCatcher/index.mjs +0 -138
  297. package/core/index.js +0 -9
  298. package/core/index.mjs +0 -1
  299. package/focusManager.d.ts +0 -12
  300. package/focusManager.js +0 -265
  301. package/focusManager.mjs +0 -261
  302. package/helpers/a11y.js +0 -79
  303. package/helpers/a11y.mjs +0 -38
  304. package/plugins/comments/contextMenuItem/addEditComment.js +0 -41
  305. package/plugins/comments/contextMenuItem/addEditComment.mjs +0 -35
  306. package/plugins/comments/contextMenuItem/readOnlyComment.js +0 -49
  307. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +0 -43
  308. package/plugins/comments/contextMenuItem/removeComment.js +0 -38
  309. package/plugins/comments/contextMenuItem/removeComment.mjs +0 -32
  310. package/plugins/contextMenu/menu/defaultShortcutsList.js +0 -88
  311. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +0 -84
  312. package/plugins/contextMenu/menu/index.js +0 -9
  313. package/plugins/contextMenu/menu/index.mjs +0 -1
  314. package/plugins/contextMenu/menu/menuItemRenderer.js +0 -58
  315. package/plugins/contextMenu/menu/menuItemRenderer.mjs +0 -54
  316. package/plugins/contextMenu/menu/navigator.js +0 -27
  317. package/plugins/contextMenu/menu/navigator.mjs +0 -23
  318. package/plugins/contextMenu/menu/positioner.js +0 -213
  319. package/plugins/contextMenu/menu/positioner.mjs +0 -209
  320. package/plugins/contextMenu/menu/shortcuts.js +0 -114
  321. package/plugins/contextMenu/menu/shortcuts.mjs +0 -110
  322. package/plugins/contextMenu/menu/utils.js +0 -177
  323. package/plugins/contextMenu/menu/utils.mjs +0 -163
  324. package/plugins/contextMenu/predefinedItems/index.mjs +0 -68
  325. package/plugins/filters/menu/focusController.js +0 -123
  326. package/plugins/filters/menu/focusController.mjs +0 -119
  327. package/plugins/filters/menu/focusNavigator.js +0 -30
  328. package/plugins/filters/menu/focusNavigator.mjs +0 -26
  329. package/renderers/dateRenderer/dateRenderer.d.ts +0 -5
  330. package/renderers/dateRenderer/dateRenderer.js +0 -29
  331. package/renderers/dateRenderer/dateRenderer.mjs +0 -24
  332. package/renderers/dateRenderer/index.d.ts +0 -1
  333. package/renderers/dateRenderer/index.js +0 -6
  334. package/renderers/dateRenderer/index.mjs +0 -1
  335. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +0 -5
  336. package/renderers/handsontableRenderer/handsontableRenderer.js +0 -29
  337. package/renderers/handsontableRenderer/handsontableRenderer.mjs +0 -24
  338. package/renderers/handsontableRenderer/index.d.ts +0 -1
  339. package/renderers/handsontableRenderer/index.js +0 -6
  340. package/renderers/handsontableRenderer/index.mjs +0 -1
  341. package/renderers/selectRenderer/index.d.ts +0 -1
  342. package/renderers/selectRenderer/index.js +0 -6
  343. package/renderers/selectRenderer/index.mjs +0 -1
  344. package/renderers/selectRenderer/selectRenderer.d.ts +0 -5
  345. package/renderers/selectRenderer/selectRenderer.js +0 -27
  346. package/renderers/selectRenderer/selectRenderer.mjs +0 -22
  347. package/selection/highlight/types/areaLayered.js +0 -31
  348. package/selection/highlight/types/areaLayered.mjs +0 -26
  349. package/selection/highlight/types/column.js +0 -27
  350. package/selection/highlight/types/column.mjs +0 -22
  351. package/selection/highlight/types/row.js +0 -27
  352. package/selection/highlight/types/row.mjs +0 -22
  353. package/shortcutContexts/commands/editor/closeAndSave.js +0 -12
  354. package/shortcutContexts/commands/editor/closeAndSave.mjs +0 -8
  355. package/shortcutContexts/commands/editor/closeWithoutSaving.js +0 -12
  356. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +0 -8
  357. package/shortcutContexts/commands/editor/fastOpen.js +0 -16
  358. package/shortcutContexts/commands/editor/fastOpen.mjs +0 -12
  359. package/shortcutContexts/commands/editor/index.js +0 -16
  360. package/shortcutContexts/commands/editor/index.mjs +0 -12
  361. package/shortcutContexts/commands/editor/open.js +0 -27
  362. package/shortcutContexts/commands/editor/open.mjs +0 -23
  363. package/shortcutContexts/commands/emptySelectedCells.js +0 -11
  364. package/shortcutContexts/commands/emptySelectedCells.mjs +0 -7
  365. package/shortcutContexts/commands/extendCellsSelection/down.js +0 -15
  366. package/shortcutContexts/commands/extendCellsSelection/down.mjs +0 -11
  367. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +0 -25
  368. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +0 -21
  369. package/shortcutContexts/commands/extendCellsSelection/index.js +0 -26
  370. package/shortcutContexts/commands/extendCellsSelection/index.mjs +0 -22
  371. package/shortcutContexts/commands/extendCellsSelection/left.js +0 -15
  372. package/shortcutContexts/commands/extendCellsSelection/left.mjs +0 -11
  373. package/shortcutContexts/commands/extendCellsSelection/right.js +0 -15
  374. package/shortcutContexts/commands/extendCellsSelection/right.mjs +0 -11
  375. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +0 -19
  376. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +0 -15
  377. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +0 -29
  378. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +0 -25
  379. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +0 -19
  380. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +0 -15
  381. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +0 -19
  382. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +0 -15
  383. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +0 -29
  384. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +0 -25
  385. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +0 -29
  386. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +0 -25
  387. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +0 -29
  388. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +0 -25
  389. package/shortcutContexts/commands/extendCellsSelection/toRows.js +0 -19
  390. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +0 -15
  391. package/shortcutContexts/commands/extendCellsSelection/up.js +0 -15
  392. package/shortcutContexts/commands/extendCellsSelection/up.mjs +0 -11
  393. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +0 -25
  394. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +0 -21
  395. package/shortcutContexts/commands/index.js +0 -35
  396. package/shortcutContexts/commands/index.mjs +0 -31
  397. package/shortcutContexts/commands/moveCellSelection/down.js +0 -13
  398. package/shortcutContexts/commands/moveCellSelection/down.mjs +0 -9
  399. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +0 -33
  400. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +0 -29
  401. package/shortcutContexts/commands/moveCellSelection/index.js +0 -28
  402. package/shortcutContexts/commands/moveCellSelection/index.mjs +0 -24
  403. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +0 -12
  404. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +0 -8
  405. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +0 -12
  406. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +0 -8
  407. package/shortcutContexts/commands/moveCellSelection/left.js +0 -10
  408. package/shortcutContexts/commands/moveCellSelection/left.mjs +0 -6
  409. package/shortcutContexts/commands/moveCellSelection/right.js +0 -10
  410. package/shortcutContexts/commands/moveCellSelection/right.mjs +0 -6
  411. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +0 -17
  412. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +0 -13
  413. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +0 -18
  414. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +0 -14
  415. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +0 -14
  416. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +0 -10
  417. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +0 -17
  418. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +0 -13
  419. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +0 -19
  420. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +0 -15
  421. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +0 -21
  422. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +0 -17
  423. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +0 -17
  424. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +0 -13
  425. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +0 -19
  426. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +0 -15
  427. package/shortcutContexts/commands/moveCellSelection/up.js +0 -13
  428. package/shortcutContexts/commands/moveCellSelection/up.mjs +0 -9
  429. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +0 -33
  430. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +0 -29
  431. package/shortcutContexts/commands/populateSelectedCellsData.js +0 -29
  432. package/shortcutContexts/commands/populateSelectedCellsData.mjs +0 -25
  433. package/shortcutContexts/commands/scrollToFocusedCell.js +0 -35
  434. package/shortcutContexts/commands/scrollToFocusedCell.mjs +0 -31
  435. package/shortcutContexts/commands/selectAll.js +0 -12
  436. package/shortcutContexts/commands/selectAll.mjs +0 -8
  437. package/shortcutContexts/constants.js +0 -13
  438. package/shortcutContexts/constants.mjs +0 -8
  439. package/shortcutContexts/editor.js +0 -25
  440. package/shortcutContexts/editor.mjs +0 -21
  441. package/shortcutContexts/grid.js +0 -163
  442. package/shortcutContexts/grid.mjs +0 -159
  443. package/shortcutContexts/index.js +0 -24
  444. package/shortcutContexts/index.mjs +0 -11
  445. package/utils/paginator.js +0 -151
  446. package/utils/paginator.mjs +0 -147
@@ -1,33 +1,24 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/es.error.cause.js");
4
3
  exports.__esModule = true;
5
4
  require("core-js/modules/es.array.push.js");
6
- var _positioner = require("./positioner");
7
- var _navigator2 = require("./navigator");
8
- var _shortcuts = require("./shortcuts");
9
- var _predefinedItems = require("./../predefinedItems");
5
+ var _cursor = _interopRequireDefault(require("./cursor"));
6
+ var _predefinedItems = require("./predefinedItems");
10
7
  var _utils = require("./utils");
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");
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"));
22
18
  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; }
30
19
  const MIN_WIDTH = 215;
20
+ const SHORTCUTS_CONTEXT = 'menu';
21
+ const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
31
22
 
32
23
  /**
33
24
  * @typedef MenuOptions
@@ -44,33 +35,12 @@ const MIN_WIDTH = 215;
44
35
  * @private
45
36
  * @class Menu
46
37
  */
47
- var _navigator = /*#__PURE__*/new WeakMap();
48
- var _shortcutsCtrl = /*#__PURE__*/new WeakMap();
49
38
  class Menu {
50
39
  /**
51
40
  * @param {Core} hotInstance Handsontable instance.
52
41
  * @param {MenuOptions} [options] Menu options.
53
42
  */
54
43
  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
- });
74
44
  this.hot = hotInstance;
75
45
  this.options = options || {
76
46
  parent: null,
@@ -83,21 +53,20 @@ class Menu {
83
53
  };
84
54
  this.eventManager = new _eventManager.default(this);
85
55
  this.container = this.createContainer(this.options.name);
86
- this.positioner = new _positioner.Positioner(this.options.keepInViewport);
87
56
  this.hotMenu = null;
88
57
  this.hotSubMenus = {};
89
58
  this.parentMenu = this.options.parent || null;
90
59
  this.menuItems = null;
91
60
  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;
92
69
  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
- }
101
70
  }
102
71
 
103
72
  /**
@@ -123,24 +92,6 @@ class Menu {
123
92
  this.menuItems = menuItems;
124
93
  }
125
94
 
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
-
144
95
  /**
145
96
  * Returns currently selected menu item. Returns `null` if no item was selected.
146
97
  *
@@ -159,6 +110,17 @@ class Menu {
159
110
  return Array.isArray(this.hotMenu.getSelectedLast());
160
111
  }
161
112
 
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
+
162
124
  /**
163
125
  * Check if menu is using as sub-menu.
164
126
  *
@@ -175,6 +137,7 @@ class Menu {
175
137
  * @fires Hooks#afterContextMenuShow
176
138
  */
177
139
  open() {
140
+ var _this = this;
178
141
  this.runLocalHooks('beforeOpen');
179
142
  this.container.removeAttribute('style');
180
143
  this.container.style.display = 'block';
@@ -209,21 +172,16 @@ class Menu {
209
172
  readOnly: true,
210
173
  editor: false,
211
174
  copyPaste: false,
212
- hiddenRows: true,
213
175
  maxCols: 1,
214
176
  columns: [{
215
177
  data: 'name',
216
- renderer: (0, _menuItemRenderer.createMenuItemRenderer)(this.hot)
178
+ renderer: (hot, TD, row, col, prop, value) => this.menuItemRenderer(hot, TD, row, col, prop, value)
217
179
  }],
218
180
  renderAllRows: true,
219
181
  fragmentSelection: false,
220
182
  outsideClickDeselects: false,
221
183
  disableVisualSelection: 'area',
222
184
  layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',
223
- ariaTags: false,
224
- beforeOnCellMouseOver: (event, coords) => {
225
- _classPrivateFieldGet(this, _navigator).setCurrentPage(coords.row);
226
- },
227
185
  afterOnCellMouseOver: (event, coords) => {
228
186
  if (this.isAllSubMenusClosed()) {
229
187
  delayedOpenSubMenu(coords.row);
@@ -241,13 +199,6 @@ class Menu {
241
199
  this.close(true);
242
200
  }
243
201
  },
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
- },
251
202
  beforeOnCellMouseUp: event => {
252
203
  if (this.hasSelectedItem()) {
253
204
  shouldAutoCloseMenu = !this.isCommandPassive(this.getSelectedItem());
@@ -265,7 +216,7 @@ class Menu {
265
216
  // event hides the tapped element, the click event grabs the element below. As a result, the filter
266
217
  // by condition menu is closed and immediately open on tapping the "None" item.
267
218
  if ((0, _browser.isMobileBrowser)() || (0, _browser.isIpadOS)()) {
268
- this.hot._registerTimeout(() => this.close(true), 325);
219
+ setTimeout(() => this.close(true), 325);
269
220
  } else {
270
221
  this.close(true);
271
222
  }
@@ -281,17 +232,120 @@ class Menu {
281
232
  };
282
233
  this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects;
283
234
  this.hot.getSettings().outsideClickDeselects = false;
284
- this.hotMenu = new this.hot.constructor(this.container, settings);
235
+ this.hotMenu = new _core.default(this.container, settings);
285
236
  this.hotMenu.addHook('afterInit', () => this.onAfterInit());
237
+ this.hotMenu.addHook('afterSelection', function () {
238
+ return _this.onAfterSelection(...arguments);
239
+ });
286
240
  this.hotMenu.init();
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);
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');
295
349
  }
296
350
 
297
351
  /**
@@ -304,24 +358,17 @@ class Menu {
304
358
  if (!this.isOpened()) {
305
359
  return;
306
360
  }
307
- if (closeParent && this.isSubMenu()) {
361
+ if (closeParent && this.parentMenu) {
308
362
  this.parentMenu.close();
309
363
  } else {
310
- _classPrivateFieldGet(this, _navigator).clear();
311
364
  this.closeAllSubMenus();
312
365
  this.container.style.display = 'none';
366
+ this.releaseMainTableCallbacks();
313
367
  this.hotMenu.destroy();
314
368
  this.hotMenu = null;
315
369
  this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects;
316
370
  this.runLocalHooks('afterClose');
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
- }
371
+ if (this.parentMenu) {
325
372
  this.parentMenu.hotMenu.listen();
326
373
  }
327
374
  }
@@ -354,11 +401,6 @@ class Menu {
354
401
  subMenu.open();
355
402
  subMenu.setPosition(cell.getBoundingClientRect());
356
403
  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
- }
362
404
  return subMenu;
363
405
  }
364
406
 
@@ -373,12 +415,6 @@ class Menu {
373
415
  if (menus) {
374
416
  menus.destroy();
375
417
  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
- }
382
418
  }
383
419
  }
384
420
 
@@ -398,19 +434,6 @@ class Menu {
398
434
  return Object.keys(this.hotSubMenus).length === 0;
399
435
  }
400
436
 
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
-
414
437
  /**
415
438
  * Destroy instance.
416
439
  */
@@ -470,30 +493,252 @@ class Menu {
470
493
  * @returns {boolean}
471
494
  */
472
495
  isCommandPassive(commandDescriptor) {
473
- return commandDescriptor.isCommand === false || (0, _utils.isItemSeparator)(commandDescriptor) || (0, _utils.isItemDisabled)(commandDescriptor, this.hot) || (0, _utils.isItemSubMenu)(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;
474
504
  }
475
505
 
476
506
  /**
477
- * Set offset menu position for specified area (`above`, `below`, `left` or `right`).
507
+ * Set menu position based on dom event or based on literal object.
478
508
  *
479
- * @param {string} area Specified area name (`above`, `below`, `left` or `right`).
480
- * @param {number} offset Offset value.
509
+ * @param {Event|object} coords Event or literal Object with coordinates.
481
510
  */
482
- setOffset(area) {
483
- let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
484
- this.positioner.setOffset(area, offset);
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
+ }
485
530
  }
486
531
 
487
532
  /**
488
- * Set menu position based on dom event or based on literal object.
533
+ * Set menu horizontal position for RTL mode.
489
534
  *
490
- * @param {Event|object} coords Event or literal Object with coordinates.
535
+ * @param {Cursor} cursor `Cursor` object.
491
536
  */
492
- setPosition(coords) {
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.
586
+ *
587
+ * @param {Cursor} cursor `Cursor` object.
588
+ */
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`;
602
+ }
603
+
604
+ /**
605
+ * Set menu position on the left of cursor object.
606
+ *
607
+ * @param {Cursor} cursor `Cursor` object.
608
+ */
609
+ setPositionOnLeftOfCursor(cursor) {
610
+ let left = this.offset.left + cursor.left - this.container.offsetWidth;
493
611
  if (this.isSubMenu()) {
494
- this.positioner.setParentElement(this.parentMenu.container);
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
+ }
495
741
  }
496
- this.positioner.setElement(this.container).updatePosition(coords);
497
742
  }
498
743
 
499
744
  /**
@@ -532,6 +777,26 @@ class Menu {
532
777
  return container;
533
778
  }
534
779
 
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
+
535
800
  /**
536
801
  * On after init listener.
537
802
  *
@@ -551,10 +816,20 @@ class Menu {
551
816
  holderStyle.width = `${currentHiderWidth + 3}px`;
552
817
  holderStyle.height = `${realHeight + 3}px`;
553
818
  hiderStyle.height = holderStyle.height;
819
+ }
554
820
 
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)]);
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;
558
833
  }
559
834
  }
560
835
 
@@ -594,5 +869,6 @@ class Menu {
594
869
  }
595
870
  }
596
871
  }
597
- exports.Menu = Menu;
598
- (0, _object.mixin)(Menu, _localHooks.default);
872
+ (0, _object.mixin)(Menu, _localHooks.default);
873
+ var _default = Menu;
874
+ exports.default = _default;