handsontable 0.0.0-next-9379dd1-20231020 → 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 (414) 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 +5 -40
  76. package/dist/handsontable.full.css +5 -40
  77. package/dist/handsontable.full.js +8038 -12837
  78. package/dist/handsontable.full.min.css +4 -4
  79. package/dist/handsontable.full.min.js +141 -141
  80. package/dist/handsontable.js +11488 -16287
  81. package/dist/handsontable.min.css +3 -3
  82. package/dist/handsontable.min.js +21 -21
  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} +308 -96
  142. package/plugins/contextMenu/{menu/menu.mjs → menu.mjs} +309 -97
  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 +38 -97
  183. package/plugins/dropdownMenu/dropdownMenu.mjs +37 -96
  184. package/plugins/filters/constants.mjs +1 -1
  185. package/plugins/filters/filters.js +14 -31
  186. package/plugins/filters/filters.mjs +14 -31
  187. package/plugins/filters/ui/select.js +3 -3
  188. package/plugins/filters/ui/select.mjs +2 -2
  189. package/plugins/hiddenColumns/hiddenColumns.mjs +1 -1
  190. package/plugins/hiddenRows/hiddenRows.mjs +1 -1
  191. package/plugins/manualColumnMove/manualColumnMove.js +1 -3
  192. package/plugins/manualColumnMove/manualColumnMove.mjs +1 -3
  193. package/plugins/mergeCells/mergeCells.js +16 -5
  194. package/plugins/mergeCells/mergeCells.mjs +16 -5
  195. package/plugins/multiColumnSorting/multiColumnSorting.js +2 -37
  196. package/plugins/multiColumnSorting/multiColumnSorting.mjs +2 -37
  197. package/plugins/nestedHeaders/nestedHeaders.js +10 -240
  198. package/plugins/nestedHeaders/nestedHeaders.mjs +11 -241
  199. package/plugins/nestedHeaders/stateManager/index.js +3 -102
  200. package/plugins/nestedHeaders/stateManager/index.mjs +3 -102
  201. package/plugins/nestedRows/nestedRows.js +0 -41
  202. package/plugins/nestedRows/nestedRows.mjs +0 -41
  203. package/plugins/nestedRows/ui/headers.js +0 -11
  204. package/plugins/nestedRows/ui/headers.mjs +1 -12
  205. package/renderers/autocompleteRenderer/autocompleteRenderer.js +0 -8
  206. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +0 -8
  207. package/renderers/baseRenderer/baseRenderer.js +0 -17
  208. package/renderers/baseRenderer/baseRenderer.mjs +1 -18
  209. package/renderers/checkboxRenderer/checkboxRenderer.js +4 -9
  210. package/renderers/checkboxRenderer/checkboxRenderer.mjs +4 -9
  211. package/renderers/index.d.ts +0 -9
  212. package/selection/highlight/constants.js +15 -0
  213. package/selection/highlight/constants.mjs +6 -0
  214. package/selection/highlight/highlight.js +71 -256
  215. package/selection/highlight/highlight.mjs +71 -250
  216. package/selection/highlight/types/activeHeader.js +8 -10
  217. package/selection/highlight/types/activeHeader.mjs +8 -10
  218. package/selection/highlight/types/area.js +18 -6
  219. package/selection/highlight/types/area.mjs +18 -6
  220. package/selection/highlight/types/{focus.js → cell.js} +7 -5
  221. package/selection/highlight/types/{focus.mjs → cell.mjs} +7 -5
  222. package/selection/highlight/types/customSelection.js +9 -7
  223. package/selection/highlight/types/customSelection.mjs +9 -7
  224. package/selection/highlight/types/fill.js +7 -5
  225. package/selection/highlight/types/fill.mjs +7 -5
  226. package/selection/highlight/types/header.js +18 -9
  227. package/selection/highlight/types/header.mjs +18 -9
  228. package/selection/highlight/types/index.js +35 -0
  229. package/selection/highlight/types/index.mjs +31 -0
  230. package/selection/highlight/visualSelection.js +27 -31
  231. package/selection/highlight/visualSelection.mjs +27 -31
  232. package/selection/index.js +7 -4
  233. package/selection/index.mjs +3 -2
  234. package/selection/mouseEventHandler.js +1 -7
  235. package/selection/mouseEventHandler.mjs +1 -7
  236. package/selection/range.js +8 -8
  237. package/selection/range.mjs +8 -8
  238. package/selection/selection.js +152 -321
  239. package/selection/selection.mjs +151 -318
  240. package/selection/transformation.js +90 -232
  241. package/selection/transformation.mjs +90 -232
  242. package/selection/utils.js +21 -15
  243. package/selection/utils.mjs +21 -16
  244. package/settings.d.ts +0 -4
  245. package/shortcuts/context.js +2 -20
  246. package/shortcuts/context.mjs +3 -20
  247. package/shortcuts/manager.js +7 -25
  248. package/shortcuts/manager.mjs +7 -26
  249. package/shortcuts/recorder.js +3 -3
  250. package/shortcuts/recorder.mjs +3 -3
  251. package/shortcuts/utils.js +5 -19
  252. package/shortcuts/utils.mjs +4 -18
  253. package/tableView.js +13 -111
  254. package/tableView.mjs +14 -112
  255. package/3rdparty/walkontable/src/selection/border/constants.js +0 -16
  256. package/3rdparty/walkontable/src/selection/border/constants.mjs +0 -12
  257. package/3rdparty/walkontable/src/selection/constants.js +0 -62
  258. package/3rdparty/walkontable/src/selection/constants.mjs +0 -51
  259. package/3rdparty/walkontable/src/selection/index.js +0 -26
  260. package/3rdparty/walkontable/src/selection/index.mjs +0 -5
  261. package/3rdparty/walkontable/src/selection/manager.js +0 -274
  262. package/3rdparty/walkontable/src/selection/manager.mjs +0 -269
  263. package/3rdparty/walkontable/src/selection/scanner.js +0 -270
  264. package/3rdparty/walkontable/src/selection/scanner.mjs +0 -267
  265. package/3rdparty/walkontable/src/selection/selection.js +0 -101
  266. package/3rdparty/walkontable/src/selection/selection.mjs +0 -96
  267. package/cellTypes/selectType/index.d.ts +0 -1
  268. package/cellTypes/selectType/index.js +0 -6
  269. package/cellTypes/selectType/index.mjs +0 -1
  270. package/cellTypes/selectType/selectType.d.ts +0 -14
  271. package/cellTypes/selectType/selectType.js +0 -13
  272. package/cellTypes/selectType/selectType.mjs +0 -8
  273. package/core/focusCatcher/focusDetector.js +0 -63
  274. package/core/focusCatcher/focusDetector.mjs +0 -59
  275. package/core/focusCatcher/index.js +0 -142
  276. package/core/focusCatcher/index.mjs +0 -138
  277. package/core/index.js +0 -9
  278. package/core/index.mjs +0 -1
  279. package/focusManager.d.ts +0 -12
  280. package/focusManager.js +0 -265
  281. package/focusManager.mjs +0 -261
  282. package/helpers/a11y.js +0 -79
  283. package/helpers/a11y.mjs +0 -38
  284. package/plugins/comments/contextMenuItem/addEditComment.js +0 -41
  285. package/plugins/comments/contextMenuItem/addEditComment.mjs +0 -35
  286. package/plugins/comments/contextMenuItem/readOnlyComment.js +0 -49
  287. package/plugins/comments/contextMenuItem/readOnlyComment.mjs +0 -43
  288. package/plugins/comments/contextMenuItem/removeComment.js +0 -38
  289. package/plugins/comments/contextMenuItem/removeComment.mjs +0 -32
  290. package/plugins/contextMenu/menu/index.js +0 -9
  291. package/plugins/contextMenu/menu/index.mjs +0 -1
  292. package/plugins/contextMenu/menu/navigator.js +0 -152
  293. package/plugins/contextMenu/menu/navigator.mjs +0 -148
  294. package/plugins/contextMenu/menu/positioner.js +0 -213
  295. package/plugins/contextMenu/menu/positioner.mjs +0 -209
  296. package/plugins/contextMenu/menu/utils.js +0 -177
  297. package/plugins/contextMenu/menu/utils.mjs +0 -163
  298. package/plugins/contextMenu/predefinedItems/index.mjs +0 -68
  299. package/renderers/dateRenderer/dateRenderer.d.ts +0 -5
  300. package/renderers/dateRenderer/dateRenderer.js +0 -29
  301. package/renderers/dateRenderer/dateRenderer.mjs +0 -24
  302. package/renderers/dateRenderer/index.d.ts +0 -1
  303. package/renderers/dateRenderer/index.js +0 -6
  304. package/renderers/dateRenderer/index.mjs +0 -1
  305. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +0 -5
  306. package/renderers/handsontableRenderer/handsontableRenderer.js +0 -29
  307. package/renderers/handsontableRenderer/handsontableRenderer.mjs +0 -24
  308. package/renderers/handsontableRenderer/index.d.ts +0 -1
  309. package/renderers/handsontableRenderer/index.js +0 -6
  310. package/renderers/handsontableRenderer/index.mjs +0 -1
  311. package/renderers/selectRenderer/index.d.ts +0 -1
  312. package/renderers/selectRenderer/index.js +0 -6
  313. package/renderers/selectRenderer/index.mjs +0 -1
  314. package/renderers/selectRenderer/selectRenderer.d.ts +0 -5
  315. package/renderers/selectRenderer/selectRenderer.js +0 -27
  316. package/renderers/selectRenderer/selectRenderer.mjs +0 -22
  317. package/selection/highlight/types/areaLayered.js +0 -31
  318. package/selection/highlight/types/areaLayered.mjs +0 -26
  319. package/selection/highlight/types/column.js +0 -27
  320. package/selection/highlight/types/column.mjs +0 -22
  321. package/selection/highlight/types/row.js +0 -27
  322. package/selection/highlight/types/row.mjs +0 -22
  323. package/shortcutContexts/commands/editor/closeAndSave.js +0 -12
  324. package/shortcutContexts/commands/editor/closeAndSave.mjs +0 -8
  325. package/shortcutContexts/commands/editor/closeWithoutSaving.js +0 -12
  326. package/shortcutContexts/commands/editor/closeWithoutSaving.mjs +0 -8
  327. package/shortcutContexts/commands/editor/fastOpen.js +0 -16
  328. package/shortcutContexts/commands/editor/fastOpen.mjs +0 -12
  329. package/shortcutContexts/commands/editor/index.js +0 -16
  330. package/shortcutContexts/commands/editor/index.mjs +0 -12
  331. package/shortcutContexts/commands/editor/open.js +0 -27
  332. package/shortcutContexts/commands/editor/open.mjs +0 -23
  333. package/shortcutContexts/commands/emptySelectedCells.js +0 -11
  334. package/shortcutContexts/commands/emptySelectedCells.mjs +0 -7
  335. package/shortcutContexts/commands/extendCellsSelection/down.js +0 -15
  336. package/shortcutContexts/commands/extendCellsSelection/down.mjs +0 -11
  337. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.js +0 -25
  338. package/shortcutContexts/commands/extendCellsSelection/downByViewportHeight.mjs +0 -21
  339. package/shortcutContexts/commands/extendCellsSelection/index.js +0 -26
  340. package/shortcutContexts/commands/extendCellsSelection/index.mjs +0 -22
  341. package/shortcutContexts/commands/extendCellsSelection/left.js +0 -15
  342. package/shortcutContexts/commands/extendCellsSelection/left.mjs +0 -11
  343. package/shortcutContexts/commands/extendCellsSelection/right.js +0 -15
  344. package/shortcutContexts/commands/extendCellsSelection/right.mjs +0 -11
  345. package/shortcutContexts/commands/extendCellsSelection/toColumns.js +0 -19
  346. package/shortcutContexts/commands/extendCellsSelection/toColumns.mjs +0 -15
  347. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.js +0 -29
  348. package/shortcutContexts/commands/extendCellsSelection/toMostBottom.mjs +0 -25
  349. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.js +0 -19
  350. package/shortcutContexts/commands/extendCellsSelection/toMostInlineEnd.mjs +0 -15
  351. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.js +0 -19
  352. package/shortcutContexts/commands/extendCellsSelection/toMostInlineStart.mjs +0 -15
  353. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.js +0 -29
  354. package/shortcutContexts/commands/extendCellsSelection/toMostLeft.mjs +0 -25
  355. package/shortcutContexts/commands/extendCellsSelection/toMostRight.js +0 -29
  356. package/shortcutContexts/commands/extendCellsSelection/toMostRight.mjs +0 -25
  357. package/shortcutContexts/commands/extendCellsSelection/toMostTop.js +0 -29
  358. package/shortcutContexts/commands/extendCellsSelection/toMostTop.mjs +0 -25
  359. package/shortcutContexts/commands/extendCellsSelection/toRows.js +0 -19
  360. package/shortcutContexts/commands/extendCellsSelection/toRows.mjs +0 -15
  361. package/shortcutContexts/commands/extendCellsSelection/up.js +0 -15
  362. package/shortcutContexts/commands/extendCellsSelection/up.mjs +0 -11
  363. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.js +0 -25
  364. package/shortcutContexts/commands/extendCellsSelection/upByViewportHeight.mjs +0 -21
  365. package/shortcutContexts/commands/index.js +0 -35
  366. package/shortcutContexts/commands/index.mjs +0 -31
  367. package/shortcutContexts/commands/moveCellSelection/down.js +0 -13
  368. package/shortcutContexts/commands/moveCellSelection/down.mjs +0 -9
  369. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.js +0 -33
  370. package/shortcutContexts/commands/moveCellSelection/downByViewportHeight.mjs +0 -29
  371. package/shortcutContexts/commands/moveCellSelection/index.js +0 -28
  372. package/shortcutContexts/commands/moveCellSelection/index.mjs +0 -24
  373. package/shortcutContexts/commands/moveCellSelection/inlineEnd.js +0 -12
  374. package/shortcutContexts/commands/moveCellSelection/inlineEnd.mjs +0 -8
  375. package/shortcutContexts/commands/moveCellSelection/inlineStart.js +0 -12
  376. package/shortcutContexts/commands/moveCellSelection/inlineStart.mjs +0 -8
  377. package/shortcutContexts/commands/moveCellSelection/left.js +0 -10
  378. package/shortcutContexts/commands/moveCellSelection/left.mjs +0 -6
  379. package/shortcutContexts/commands/moveCellSelection/right.js +0 -10
  380. package/shortcutContexts/commands/moveCellSelection/right.mjs +0 -6
  381. package/shortcutContexts/commands/moveCellSelection/toMostBottom.js +0 -17
  382. package/shortcutContexts/commands/moveCellSelection/toMostBottom.mjs +0 -13
  383. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.js +0 -18
  384. package/shortcutContexts/commands/moveCellSelection/toMostBottomInlineEnd.mjs +0 -14
  385. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.js +0 -14
  386. package/shortcutContexts/commands/moveCellSelection/toMostInlineEnd.mjs +0 -10
  387. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.js +0 -17
  388. package/shortcutContexts/commands/moveCellSelection/toMostInlineStart.mjs +0 -13
  389. package/shortcutContexts/commands/moveCellSelection/toMostLeft.js +0 -19
  390. package/shortcutContexts/commands/moveCellSelection/toMostLeft.mjs +0 -15
  391. package/shortcutContexts/commands/moveCellSelection/toMostRight.js +0 -21
  392. package/shortcutContexts/commands/moveCellSelection/toMostRight.mjs +0 -17
  393. package/shortcutContexts/commands/moveCellSelection/toMostTop.js +0 -17
  394. package/shortcutContexts/commands/moveCellSelection/toMostTop.mjs +0 -13
  395. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.js +0 -19
  396. package/shortcutContexts/commands/moveCellSelection/toMostTopInlineStart.mjs +0 -15
  397. package/shortcutContexts/commands/moveCellSelection/up.js +0 -13
  398. package/shortcutContexts/commands/moveCellSelection/up.mjs +0 -9
  399. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.js +0 -33
  400. package/shortcutContexts/commands/moveCellSelection/upByViewportHeight.mjs +0 -29
  401. package/shortcutContexts/commands/populateSelectedCellsData.js +0 -29
  402. package/shortcutContexts/commands/populateSelectedCellsData.mjs +0 -25
  403. package/shortcutContexts/commands/scrollToFocusedCell.js +0 -35
  404. package/shortcutContexts/commands/scrollToFocusedCell.mjs +0 -31
  405. package/shortcutContexts/commands/selectAll.js +0 -12
  406. package/shortcutContexts/commands/selectAll.mjs +0 -8
  407. package/shortcutContexts/constants.js +0 -13
  408. package/shortcutContexts/constants.mjs +0 -8
  409. package/shortcutContexts/editor.js +0 -25
  410. package/shortcutContexts/editor.mjs +0 -21
  411. package/shortcutContexts/grid.js +0 -163
  412. package/shortcutContexts/grid.mjs +0 -159
  413. package/shortcutContexts/index.js +0 -24
  414. package/shortcutContexts/index.mjs +0 -11
@@ -2,20 +2,19 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.array.push.js");
5
- var _positioner = require("./positioner");
6
- var _navigator = require("./navigator");
7
- var _predefinedItems = require("./../predefinedItems");
5
+ var _cursor = _interopRequireDefault(require("./cursor"));
6
+ var _predefinedItems = require("./predefinedItems");
8
7
  var _utils = require("./utils");
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"));
18
- 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"));
19
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
19
  const MIN_WIDTH = 215;
21
20
  const SHORTCUTS_CONTEXT = 'menu';
@@ -54,13 +53,18 @@ class Menu {
54
53
  };
55
54
  this.eventManager = new _eventManager.default(this);
56
55
  this.container = this.createContainer(this.options.name);
57
- this.positioner = new _positioner.Positioner(this.options.keepInViewport);
58
- this.navigator = new _navigator.Navigator();
59
56
  this.hotMenu = null;
60
57
  this.hotSubMenus = {};
61
58
  this.parentMenu = this.options.parent || null;
62
59
  this.menuItems = null;
63
60
  this.origOutsideClickDeselects = null;
61
+ this.keyEvent = false;
62
+ this.offset = {
63
+ above: 0,
64
+ below: 0,
65
+ left: 0,
66
+ right: 0
67
+ };
64
68
  this._afterScrollCallback = null;
65
69
  this.registerEvents();
66
70
  }
@@ -106,6 +110,17 @@ class Menu {
106
110
  return Array.isArray(this.hotMenu.getSelectedLast());
107
111
  }
108
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
+
109
124
  /**
110
125
  * Check if menu is using as sub-menu.
111
126
  *
@@ -122,6 +137,7 @@ class Menu {
122
137
  * @fires Hooks#afterContextMenuShow
123
138
  */
124
139
  open() {
140
+ var _this = this;
125
141
  this.runLocalHooks('beforeOpen');
126
142
  this.container.removeAttribute('style');
127
143
  this.container.style.display = 'block';
@@ -166,7 +182,6 @@ class Menu {
166
182
  outsideClickDeselects: false,
167
183
  disableVisualSelection: 'area',
168
184
  layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',
169
- ariaTags: false,
170
185
  afterOnCellMouseOver: (event, coords) => {
171
186
  if (this.isAllSubMenusClosed()) {
172
187
  delayedOpenSubMenu(coords.row);
@@ -184,12 +199,6 @@ class Menu {
184
199
  this.close(true);
185
200
  }
186
201
  },
187
- afterSelection: (row, column, row2, column2, preventScrolling) => {
188
- // do not scroll the viewport when mouse clicks on partially visible menu item
189
- if (this.hotMenu.view.isMouseDown()) {
190
- preventScrolling.value = true;
191
- }
192
- },
193
202
  beforeOnCellMouseUp: event => {
194
203
  if (this.hasSelectedItem()) {
195
204
  shouldAutoCloseMenu = !this.isCommandPassive(this.getSelectedItem());
@@ -207,7 +216,7 @@ class Menu {
207
216
  // event hides the tapped element, the click event grabs the element below. As a result, the filter
208
217
  // by condition menu is closed and immediately open on tapping the "None" item.
209
218
  if ((0, _browser.isMobileBrowser)() || (0, _browser.isIpadOS)()) {
210
- this.hot._registerTimeout(() => this.close(true), 325);
219
+ setTimeout(() => this.close(true), 325);
211
220
  } else {
212
221
  this.close(true);
213
222
  }
@@ -223,11 +232,13 @@ class Menu {
223
232
  };
224
233
  this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects;
225
234
  this.hot.getSettings().outsideClickDeselects = false;
226
- this.hotMenu = new this.hot.constructor(this.container, settings);
235
+ this.hotMenu = new _core.default(this.container, settings);
227
236
  this.hotMenu.addHook('afterInit', () => this.onAfterInit());
237
+ this.hotMenu.addHook('afterSelection', function () {
238
+ return _this.onAfterSelection(...arguments);
239
+ });
228
240
  this.hotMenu.init();
229
241
  this.hotMenu.listen();
230
- this.navigator.setMenu(this.hotMenu);
231
242
  const shortcutManager = this.hotMenu.getShortcutManager();
232
243
  const menuContext = shortcutManager.addContext(SHORTCUTS_GROUP);
233
244
  const config = {
@@ -235,84 +246,105 @@ class Menu {
235
246
  };
236
247
  const menuContextConfig = {
237
248
  ...config,
238
- runOnlyIf: event => !(0, _element.isInput)(event.target) || !this.container.contains(event.target)
249
+ runOnlyIf: event => (0, _element.isInput)(event.target) === false || this.container.contains(event.target) === false
239
250
  };
240
251
 
241
252
  // Default shortcuts for Handsontable should not be handled. Changing context will help with that.
242
253
  shortcutManager.setActiveContextName('menu');
243
254
  menuContext.addShortcuts([{
244
- keys: [['Tab'], ['Shift', 'Tab'], ['Control/Meta', 'A']],
245
- forwardToContext: this.hot.getShortcutManager().getContext('grid'),
246
- callback: () => this.close(true)
247
- }, {
248
255
  keys: [['Escape']],
249
- callback: () => this.close(true)
256
+ callback: () => {
257
+ this.keyEvent = true;
258
+ this.close();
259
+ this.keyEvent = false;
260
+ }
250
261
  }, {
251
262
  keys: [['ArrowDown']],
252
- callback: () => this.navigator.selectNext()
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
+ }
253
273
  }, {
254
274
  keys: [['ArrowUp']],
255
- callback: () => this.navigator.selectPrev()
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
+ }
256
285
  }, {
257
286
  keys: [['ArrowRight']],
258
287
  callback: () => {
259
288
  const selection = this.hotMenu.getSelectedLast();
289
+ this.keyEvent = true;
260
290
  if (selection) {
261
- const subMenu = this.openSubMenu(selection[0]);
262
- if (subMenu) {
263
- subMenu.navigator.selectFirst();
291
+ const menu = this.openSubMenu(selection[0]);
292
+ if (menu) {
293
+ menu.selectFirstCell();
264
294
  }
265
295
  }
296
+ this.keyEvent = false;
266
297
  }
267
298
  }, {
268
299
  keys: [['ArrowLeft']],
269
300
  callback: () => {
270
301
  const selection = this.hotMenu.getSelectedLast();
302
+ this.keyEvent = true;
271
303
  if (selection && this.isSubMenu()) {
272
304
  this.close();
273
- if (this.isSubMenu()) {
305
+ if (this.parentMenu) {
274
306
  this.parentMenu.hotMenu.listen();
275
307
  }
276
308
  }
309
+ this.keyEvent = false;
277
310
  }
278
311
  }, {
279
- keys: [['Control/Meta', 'ArrowUp'], ['Home']],
280
- callback: () => this.navigator.selectFirst()
281
- }, {
282
- keys: [['Control/Meta', 'ArrowDown'], ['End']],
283
- callback: () => this.navigator.selectLast()
284
- }, {
285
- keys: [['Enter'], ['Space']],
312
+ keys: [['Enter']],
286
313
  callback: event => {
287
314
  const selection = this.hotMenu.getSelectedLast();
288
- if (this.hotMenu.getSourceDataAtRow(selection[0]).submenu) {
289
- this.openSubMenu(selection[0]).navigator.selectFirst();
290
- } else {
315
+ this.keyEvent = true;
316
+ if (!this.hotMenu.getSourceDataAtRow(selection[0]).submenu) {
291
317
  this.executeCommand(event);
292
318
  this.close(true);
293
319
  }
320
+ this.keyEvent = false;
294
321
  }
295
322
  }, {
296
323
  keys: [['PageUp']],
297
324
  callback: () => {
298
325
  const selection = this.hotMenu.getSelectedLast();
326
+ this.keyEvent = true;
299
327
  if (selection) {
300
328
  this.hotMenu.selection.transformStart(-this.hotMenu.countVisibleRows(), 0);
301
329
  } else {
302
- this.navigator.selectFirst();
330
+ this.selectFirstCell();
303
331
  }
332
+ this.keyEvent = false;
304
333
  }
305
334
  }, {
306
335
  keys: [['PageDown']],
307
336
  callback: () => {
308
337
  const selection = this.hotMenu.getSelectedLast();
338
+ this.keyEvent = true;
309
339
  if (selection) {
310
340
  this.hotMenu.selection.transformStart(this.hotMenu.countVisibleRows(), 0);
311
341
  } else {
312
- this.navigator.selectLast();
342
+ this.selectLastCell();
313
343
  }
344
+ this.keyEvent = false;
314
345
  }
315
346
  }], menuContextConfig);
347
+ this.blockMainTableCallbacks();
316
348
  this.runLocalHooks('afterOpen');
317
349
  }
318
350
 
@@ -326,24 +358,17 @@ class Menu {
326
358
  if (!this.isOpened()) {
327
359
  return;
328
360
  }
329
- if (closeParent && this.isSubMenu()) {
361
+ if (closeParent && this.parentMenu) {
330
362
  this.parentMenu.close();
331
363
  } else {
332
- this.navigator.clear();
333
364
  this.closeAllSubMenus();
334
365
  this.container.style.display = 'none';
366
+ this.releaseMainTableCallbacks();
335
367
  this.hotMenu.destroy();
336
368
  this.hotMenu = null;
337
369
  this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects;
338
370
  this.runLocalHooks('afterClose');
339
- if (this.isSubMenu()) {
340
- if (this.hot.getSettings().ariaTags) {
341
- const selection = this.parentMenu.hotMenu.getSelectedLast();
342
- if (selection) {
343
- const cell = this.parentMenu.hotMenu.getCell(selection[0], 0);
344
- (0, _element.setAttribute)(cell, [(0, _a11y.A11Y_EXPANDED)(false)]);
345
- }
346
- }
371
+ if (this.parentMenu) {
347
372
  this.parentMenu.hotMenu.listen();
348
373
  }
349
374
  }
@@ -376,11 +401,6 @@ class Menu {
376
401
  subMenu.open();
377
402
  subMenu.setPosition(cell.getBoundingClientRect());
378
403
  this.hotSubMenus[dataItem.key] = subMenu;
379
-
380
- // Update the accessibility tags on the cell being the base for the submenu.
381
- if (this.hot.getSettings().ariaTags) {
382
- (0, _element.setAttribute)(cell, [(0, _a11y.A11Y_EXPANDED)(true)]);
383
- }
384
404
  return subMenu;
385
405
  }
386
406
 
@@ -395,12 +415,6 @@ class Menu {
395
415
  if (menus) {
396
416
  menus.destroy();
397
417
  delete this.hotSubMenus[dataItem.key];
398
- const cell = this.hotMenu.getCell(row, 0);
399
-
400
- // Update the accessibility tags on the cell being the base for the submenu.
401
- if (this.hot.getSettings().ariaTags) {
402
- (0, _element.setAttribute)(cell, [(0, _a11y.A11Y_EXPANDED)(false)]);
403
- }
404
418
  }
405
419
  }
406
420
 
@@ -479,30 +493,196 @@ class Menu {
479
493
  * @returns {boolean}
480
494
  */
481
495
  isCommandPassive(commandDescriptor) {
482
- 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;
483
504
  }
484
505
 
485
506
  /**
486
- * 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.
487
508
  *
488
- * @param {string} area Specified area name (`above`, `below`, `left` or `right`).
489
- * @param {number} offset Offset value.
509
+ * @param {Event|object} coords Event or literal Object with coordinates.
490
510
  */
491
- setOffset(area) {
492
- let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
493
- 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
+ }
494
530
  }
495
531
 
496
532
  /**
497
- * Set menu position based on dom event or based on literal object.
533
+ * Set menu horizontal position for RTL mode.
498
534
  *
499
- * @param {Event|object} coords Event or literal Object with coordinates.
535
+ * @param {Cursor} cursor `Cursor` object.
500
536
  */
501
- 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;
502
611
  if (this.isSubMenu()) {
503
- 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);
504
685
  }
505
- this.positioner.setElement(this.container).updatePosition(coords);
506
686
  }
507
687
 
508
688
  /**
@@ -519,17 +699,18 @@ class Menu {
519
699
  menuItemRenderer(hot, TD, row, col, prop, value) {
520
700
  const item = hot.getSourceDataAtRow(row);
521
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;
522
706
  let itemValue = value;
523
707
  if (typeof itemValue === 'function') {
524
708
  itemValue = itemValue.call(this.hot);
525
709
  }
526
710
  (0, _element.empty)(TD);
527
711
  (0, _element.addClass)(wrapper, 'htItemWrapper');
528
- if (this.hot.getSettings().ariaTags) {
529
- (0, _element.setAttribute)(TD, [(0, _a11y.A11Y_MENU_ITEM)(), (0, _a11y.A11Y_LABEL)(itemValue), ...((0, _utils.isItemDisabled)(item, this.hot) ? [(0, _a11y.A11Y_DISABLED)()] : []), ...((0, _utils.isItemSubMenu)(item) ? [(0, _a11y.A11Y_EXPANDED)(false)] : [])]);
530
- }
531
712
  TD.appendChild(wrapper);
532
- if ((0, _utils.isItemSeparator)(item)) {
713
+ if (itemIsSeparator(item)) {
533
714
  (0, _element.addClass)(TD, 'htSeparator');
534
715
  } else if (typeof item.renderer === 'function') {
535
716
  (0, _element.addClass)(TD, 'htCustomMenuRenderer');
@@ -537,22 +718,22 @@ class Menu {
537
718
  } else {
538
719
  (0, _element.fastInnerHTML)(wrapper, itemValue);
539
720
  }
540
- if ((0, _utils.isItemDisabled)(item, this.hot)) {
721
+ if (itemIsDisabled(item)) {
541
722
  (0, _element.addClass)(TD, 'htDisabled');
542
723
  this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
543
- } else if ((0, _utils.isItemSelectionDisabled)(item)) {
724
+ } else if (itemIsSelectionDisabled(item)) {
544
725
  (0, _element.addClass)(TD, 'htSelectionDisabled');
545
726
  this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
546
- } else if ((0, _utils.isItemSubMenu)(item)) {
727
+ } else if (isSubMenu(item)) {
547
728
  (0, _element.addClass)(TD, 'htSubmenu');
548
- if ((0, _utils.isItemSelectionDisabled)(item)) {
729
+ if (itemIsSelectionDisabled(item)) {
549
730
  this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
550
731
  } else {
551
732
  this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
552
733
  }
553
734
  } else {
554
735
  (0, _element.removeClass)(TD, ['htSubmenu', 'htDisabled']);
555
- if ((0, _utils.isItemSelectionDisabled)(item)) {
736
+ if (itemIsSelectionDisabled(item)) {
556
737
  this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
557
738
  } else {
558
739
  this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
@@ -596,6 +777,26 @@ class Menu {
596
777
  return container;
597
778
  }
598
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
+
599
800
  /**
600
801
  * On after init listener.
601
802
  *
@@ -615,10 +816,20 @@ class Menu {
615
816
  holderStyle.width = `${currentHiderWidth + 3}px`;
616
817
  holderStyle.height = `${realHeight + 3}px`;
617
818
  hiderStyle.height = holderStyle.height;
819
+ }
618
820
 
619
- // Replace the default accessibility tags with the context menu's
620
- if (this.hot.getSettings().ariaTags) {
621
- (0, _element.setAttribute)(this.hotMenu.rootElement, [(0, _a11y.A11Y_MENU)()]);
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;
622
833
  }
623
834
  }
624
835
 
@@ -658,5 +869,6 @@ class Menu {
658
869
  }
659
870
  }
660
871
  }
661
- exports.Menu = Menu;
662
- (0, _object.mixin)(Menu, _localHooks.default);
872
+ (0, _object.mixin)(Menu, _localHooks.default);
873
+ var _default = Menu;
874
+ exports.default = _default;