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
@@ -1,18 +1,17 @@
1
1
  import "core-js/modules/es.array.push.js";
2
- import { Positioner } from "./positioner.mjs";
3
- import { Navigator } from "./navigator.mjs";
4
- import { SEPARATOR, NO_ITEMS, predefinedItems } from "./../predefinedItems/index.mjs";
5
- import { filterSeparators, hasSubMenu, isItemHidden, normalizeSelection, isItemSubMenu, isItemDisabled, isItemSelectionDisabled, isItemSeparator } from "./utils.mjs";
6
- import EventManager from "../../../eventManager.mjs";
7
- import { arrayEach, arrayFilter, arrayReduce } from "../../../helpers/array.mjs";
8
- import { isWindowsOS, isMobileBrowser, isIpadOS } from "../../../helpers/browser.mjs";
9
- import { addClass, empty, fastInnerHTML, isChildOf, isInput, removeClass, getParentWindow, hasClass, setAttribute } from "../../../helpers/dom/element.mjs";
10
- import { isRightClick } from "../../../helpers/dom/event.mjs";
11
- import { debounce, isFunction } from "../../../helpers/function.mjs";
12
- import { isUndefined, isDefined } from "../../../helpers/mixed.mjs";
13
- import { mixin } from "../../../helpers/object.mjs";
14
- import localHooks from "../../../mixins/localHooks.mjs";
15
- import { A11Y_DISABLED, A11Y_EXPANDED, A11Y_LABEL, A11Y_MENU, A11Y_MENU_ITEM } from "../../../helpers/a11y.mjs";
2
+ import Cursor from "./cursor.mjs";
3
+ import { SEPARATOR, NO_ITEMS, predefinedItems } from "./predefinedItems.mjs";
4
+ import { filterSeparators, hasSubMenu, isDisabled, isItemHidden, isSeparator, isSelectionDisabled, normalizeSelection } from "./utils.mjs";
5
+ import Core from "../../core.mjs";
6
+ import EventManager from "../../eventManager.mjs";
7
+ import { arrayEach, arrayFilter, arrayReduce } from "../../helpers/array.mjs";
8
+ import { isWindowsOS, isMobileBrowser, isIpadOS } from "../../helpers/browser.mjs";
9
+ import { addClass, empty, fastInnerHTML, isChildOf, isInput, removeClass, getParentWindow, hasClass } from "../../helpers/dom/element.mjs";
10
+ import { isRightClick } from "../../helpers/dom/event.mjs";
11
+ import { debounce, isFunction } from "../../helpers/function.mjs";
12
+ import { isUndefined, isDefined } from "../../helpers/mixed.mjs";
13
+ import { mixin, hasOwnProperty } from "../../helpers/object.mjs";
14
+ import localHooks from "../../mixins/localHooks.mjs";
16
15
  const MIN_WIDTH = 215;
17
16
  const SHORTCUTS_CONTEXT = 'menu';
18
17
  const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
@@ -32,7 +31,7 @@ const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
32
31
  * @private
33
32
  * @class Menu
34
33
  */
35
- export class Menu {
34
+ class Menu {
36
35
  /**
37
36
  * @param {Core} hotInstance Handsontable instance.
38
37
  * @param {MenuOptions} [options] Menu options.
@@ -50,13 +49,18 @@ export class Menu {
50
49
  };
51
50
  this.eventManager = new EventManager(this);
52
51
  this.container = this.createContainer(this.options.name);
53
- this.positioner = new Positioner(this.options.keepInViewport);
54
- this.navigator = new Navigator();
55
52
  this.hotMenu = null;
56
53
  this.hotSubMenus = {};
57
54
  this.parentMenu = this.options.parent || null;
58
55
  this.menuItems = null;
59
56
  this.origOutsideClickDeselects = null;
57
+ this.keyEvent = false;
58
+ this.offset = {
59
+ above: 0,
60
+ below: 0,
61
+ left: 0,
62
+ right: 0
63
+ };
60
64
  this._afterScrollCallback = null;
61
65
  this.registerEvents();
62
66
  }
@@ -102,6 +106,17 @@ export class Menu {
102
106
  return Array.isArray(this.hotMenu.getSelectedLast());
103
107
  }
104
108
 
109
+ /**
110
+ * Set offset menu position for specified area (`above`, `below`, `left` or `right`).
111
+ *
112
+ * @param {string} area Specified area name (`above`, `below`, `left` or `right`).
113
+ * @param {number} offset Offset value.
114
+ */
115
+ setOffset(area) {
116
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
117
+ this.offset[area] = offset;
118
+ }
119
+
105
120
  /**
106
121
  * Check if menu is using as sub-menu.
107
122
  *
@@ -118,6 +133,7 @@ export class Menu {
118
133
  * @fires Hooks#afterContextMenuShow
119
134
  */
120
135
  open() {
136
+ var _this = this;
121
137
  this.runLocalHooks('beforeOpen');
122
138
  this.container.removeAttribute('style');
123
139
  this.container.style.display = 'block';
@@ -162,7 +178,6 @@ export class Menu {
162
178
  outsideClickDeselects: false,
163
179
  disableVisualSelection: 'area',
164
180
  layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',
165
- ariaTags: false,
166
181
  afterOnCellMouseOver: (event, coords) => {
167
182
  if (this.isAllSubMenusClosed()) {
168
183
  delayedOpenSubMenu(coords.row);
@@ -180,12 +195,6 @@ export class Menu {
180
195
  this.close(true);
181
196
  }
182
197
  },
183
- afterSelection: (row, column, row2, column2, preventScrolling) => {
184
- // do not scroll the viewport when mouse clicks on partially visible menu item
185
- if (this.hotMenu.view.isMouseDown()) {
186
- preventScrolling.value = true;
187
- }
188
- },
189
198
  beforeOnCellMouseUp: event => {
190
199
  if (this.hasSelectedItem()) {
191
200
  shouldAutoCloseMenu = !this.isCommandPassive(this.getSelectedItem());
@@ -203,7 +212,7 @@ export class Menu {
203
212
  // event hides the tapped element, the click event grabs the element below. As a result, the filter
204
213
  // by condition menu is closed and immediately open on tapping the "None" item.
205
214
  if (isMobileBrowser() || isIpadOS()) {
206
- this.hot._registerTimeout(() => this.close(true), 325);
215
+ setTimeout(() => this.close(true), 325);
207
216
  } else {
208
217
  this.close(true);
209
218
  }
@@ -219,11 +228,13 @@ export class Menu {
219
228
  };
220
229
  this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects;
221
230
  this.hot.getSettings().outsideClickDeselects = false;
222
- this.hotMenu = new this.hot.constructor(this.container, settings);
231
+ this.hotMenu = new Core(this.container, settings);
223
232
  this.hotMenu.addHook('afterInit', () => this.onAfterInit());
233
+ this.hotMenu.addHook('afterSelection', function () {
234
+ return _this.onAfterSelection(...arguments);
235
+ });
224
236
  this.hotMenu.init();
225
237
  this.hotMenu.listen();
226
- this.navigator.setMenu(this.hotMenu);
227
238
  const shortcutManager = this.hotMenu.getShortcutManager();
228
239
  const menuContext = shortcutManager.addContext(SHORTCUTS_GROUP);
229
240
  const config = {
@@ -231,84 +242,105 @@ export class Menu {
231
242
  };
232
243
  const menuContextConfig = {
233
244
  ...config,
234
- runOnlyIf: event => !isInput(event.target) || !this.container.contains(event.target)
245
+ runOnlyIf: event => isInput(event.target) === false || this.container.contains(event.target) === false
235
246
  };
236
247
 
237
248
  // Default shortcuts for Handsontable should not be handled. Changing context will help with that.
238
249
  shortcutManager.setActiveContextName('menu');
239
250
  menuContext.addShortcuts([{
240
- keys: [['Tab'], ['Shift', 'Tab'], ['Control/Meta', 'A']],
241
- forwardToContext: this.hot.getShortcutManager().getContext('grid'),
242
- callback: () => this.close(true)
243
- }, {
244
251
  keys: [['Escape']],
245
- callback: () => this.close(true)
252
+ callback: () => {
253
+ this.keyEvent = true;
254
+ this.close();
255
+ this.keyEvent = false;
256
+ }
246
257
  }, {
247
258
  keys: [['ArrowDown']],
248
- callback: () => this.navigator.selectNext()
259
+ callback: () => {
260
+ const selection = this.hotMenu.getSelectedLast();
261
+ this.keyEvent = true;
262
+ if (selection) {
263
+ this.selectNextCell(selection[0], selection[1]);
264
+ } else {
265
+ this.selectFirstCell();
266
+ }
267
+ this.keyEvent = false;
268
+ }
249
269
  }, {
250
270
  keys: [['ArrowUp']],
251
- callback: () => this.navigator.selectPrev()
271
+ callback: () => {
272
+ const selection = this.hotMenu.getSelectedLast();
273
+ this.keyEvent = true;
274
+ if (selection) {
275
+ this.selectPrevCell(selection[0], selection[1]);
276
+ } else {
277
+ this.selectLastCell();
278
+ }
279
+ this.keyEvent = false;
280
+ }
252
281
  }, {
253
282
  keys: [['ArrowRight']],
254
283
  callback: () => {
255
284
  const selection = this.hotMenu.getSelectedLast();
285
+ this.keyEvent = true;
256
286
  if (selection) {
257
- const subMenu = this.openSubMenu(selection[0]);
258
- if (subMenu) {
259
- subMenu.navigator.selectFirst();
287
+ const menu = this.openSubMenu(selection[0]);
288
+ if (menu) {
289
+ menu.selectFirstCell();
260
290
  }
261
291
  }
292
+ this.keyEvent = false;
262
293
  }
263
294
  }, {
264
295
  keys: [['ArrowLeft']],
265
296
  callback: () => {
266
297
  const selection = this.hotMenu.getSelectedLast();
298
+ this.keyEvent = true;
267
299
  if (selection && this.isSubMenu()) {
268
300
  this.close();
269
- if (this.isSubMenu()) {
301
+ if (this.parentMenu) {
270
302
  this.parentMenu.hotMenu.listen();
271
303
  }
272
304
  }
305
+ this.keyEvent = false;
273
306
  }
274
307
  }, {
275
- keys: [['Control/Meta', 'ArrowUp'], ['Home']],
276
- callback: () => this.navigator.selectFirst()
277
- }, {
278
- keys: [['Control/Meta', 'ArrowDown'], ['End']],
279
- callback: () => this.navigator.selectLast()
280
- }, {
281
- keys: [['Enter'], ['Space']],
308
+ keys: [['Enter']],
282
309
  callback: event => {
283
310
  const selection = this.hotMenu.getSelectedLast();
284
- if (this.hotMenu.getSourceDataAtRow(selection[0]).submenu) {
285
- this.openSubMenu(selection[0]).navigator.selectFirst();
286
- } else {
311
+ this.keyEvent = true;
312
+ if (!this.hotMenu.getSourceDataAtRow(selection[0]).submenu) {
287
313
  this.executeCommand(event);
288
314
  this.close(true);
289
315
  }
316
+ this.keyEvent = false;
290
317
  }
291
318
  }, {
292
319
  keys: [['PageUp']],
293
320
  callback: () => {
294
321
  const selection = this.hotMenu.getSelectedLast();
322
+ this.keyEvent = true;
295
323
  if (selection) {
296
324
  this.hotMenu.selection.transformStart(-this.hotMenu.countVisibleRows(), 0);
297
325
  } else {
298
- this.navigator.selectFirst();
326
+ this.selectFirstCell();
299
327
  }
328
+ this.keyEvent = false;
300
329
  }
301
330
  }, {
302
331
  keys: [['PageDown']],
303
332
  callback: () => {
304
333
  const selection = this.hotMenu.getSelectedLast();
334
+ this.keyEvent = true;
305
335
  if (selection) {
306
336
  this.hotMenu.selection.transformStart(this.hotMenu.countVisibleRows(), 0);
307
337
  } else {
308
- this.navigator.selectLast();
338
+ this.selectLastCell();
309
339
  }
340
+ this.keyEvent = false;
310
341
  }
311
342
  }], menuContextConfig);
343
+ this.blockMainTableCallbacks();
312
344
  this.runLocalHooks('afterOpen');
313
345
  }
314
346
 
@@ -322,24 +354,17 @@ export class Menu {
322
354
  if (!this.isOpened()) {
323
355
  return;
324
356
  }
325
- if (closeParent && this.isSubMenu()) {
357
+ if (closeParent && this.parentMenu) {
326
358
  this.parentMenu.close();
327
359
  } else {
328
- this.navigator.clear();
329
360
  this.closeAllSubMenus();
330
361
  this.container.style.display = 'none';
362
+ this.releaseMainTableCallbacks();
331
363
  this.hotMenu.destroy();
332
364
  this.hotMenu = null;
333
365
  this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects;
334
366
  this.runLocalHooks('afterClose');
335
- if (this.isSubMenu()) {
336
- if (this.hot.getSettings().ariaTags) {
337
- const selection = this.parentMenu.hotMenu.getSelectedLast();
338
- if (selection) {
339
- const cell = this.parentMenu.hotMenu.getCell(selection[0], 0);
340
- setAttribute(cell, [A11Y_EXPANDED(false)]);
341
- }
342
- }
367
+ if (this.parentMenu) {
343
368
  this.parentMenu.hotMenu.listen();
344
369
  }
345
370
  }
@@ -372,11 +397,6 @@ export class Menu {
372
397
  subMenu.open();
373
398
  subMenu.setPosition(cell.getBoundingClientRect());
374
399
  this.hotSubMenus[dataItem.key] = subMenu;
375
-
376
- // Update the accessibility tags on the cell being the base for the submenu.
377
- if (this.hot.getSettings().ariaTags) {
378
- setAttribute(cell, [A11Y_EXPANDED(true)]);
379
- }
380
400
  return subMenu;
381
401
  }
382
402
 
@@ -391,12 +411,6 @@ export class Menu {
391
411
  if (menus) {
392
412
  menus.destroy();
393
413
  delete this.hotSubMenus[dataItem.key];
394
- const cell = this.hotMenu.getCell(row, 0);
395
-
396
- // Update the accessibility tags on the cell being the base for the submenu.
397
- if (this.hot.getSettings().ariaTags) {
398
- setAttribute(cell, [A11Y_EXPANDED(false)]);
399
- }
400
414
  }
401
415
  }
402
416
 
@@ -475,30 +489,196 @@ export class Menu {
475
489
  * @returns {boolean}
476
490
  */
477
491
  isCommandPassive(commandDescriptor) {
478
- return commandDescriptor.isCommand === false || isItemSeparator(commandDescriptor) || isItemDisabled(commandDescriptor, this.hot) || isItemSubMenu(commandDescriptor);
492
+ const {
493
+ isCommand,
494
+ name: commandName,
495
+ disabled,
496
+ submenu
497
+ } = commandDescriptor;
498
+ const isItemDisabled = disabled === true || typeof disabled === 'function' && disabled.call(this.hot) === true;
499
+ return isCommand === false || commandName === SEPARATOR || isItemDisabled === true || submenu;
479
500
  }
480
501
 
481
502
  /**
482
- * Set offset menu position for specified area (`above`, `below`, `left` or `right`).
503
+ * Set menu position based on dom event or based on literal object.
483
504
  *
484
- * @param {string} area Specified area name (`above`, `below`, `left` or `right`).
485
- * @param {number} offset Offset value.
505
+ * @param {Event|object} coords Event or literal Object with coordinates.
486
506
  */
487
- setOffset(area) {
488
- let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
489
- this.positioner.setOffset(area, offset);
507
+ setPosition(coords) {
508
+ const cursor = new Cursor(coords, this.container.ownerDocument.defaultView);
509
+ if (this.options.keepInViewport) {
510
+ if (cursor.fitsBelow(this.container)) {
511
+ this.setPositionBelowCursor(cursor);
512
+ } else if (cursor.fitsAbove(this.container)) {
513
+ this.setPositionAboveCursor(cursor);
514
+ } else {
515
+ this.setPositionBelowCursor(cursor);
516
+ }
517
+ if (this.hot.isLtr()) {
518
+ this.setHorizontalPositionForLtr(cursor);
519
+ } else {
520
+ this.setHorizontalPositionForRtl(cursor);
521
+ }
522
+ } else {
523
+ this.setPositionBelowCursor(cursor);
524
+ this.setPositionOnRightOfCursor(cursor);
525
+ }
490
526
  }
491
527
 
492
528
  /**
493
- * Set menu position based on dom event or based on literal object.
529
+ * Set menu horizontal position for RTL mode.
494
530
  *
495
- * @param {Event|object} coords Event or literal Object with coordinates.
531
+ * @param {Cursor} cursor `Cursor` object.
496
532
  */
497
- setPosition(coords) {
533
+ setHorizontalPositionForRtl(cursor) {
534
+ if (cursor.fitsOnLeft(this.container)) {
535
+ this.setPositionOnLeftOfCursor(cursor);
536
+ } else {
537
+ this.setPositionOnRightOfCursor(cursor);
538
+ }
539
+ }
540
+
541
+ /**
542
+ * Set menu horizontal position for LTR mode.
543
+ *
544
+ * @param {Cursor} cursor `Cursor` object.
545
+ */
546
+ setHorizontalPositionForLtr(cursor) {
547
+ if (cursor.fitsOnRight(this.container)) {
548
+ this.setPositionOnRightOfCursor(cursor);
549
+ } else {
550
+ this.setPositionOnLeftOfCursor(cursor);
551
+ }
552
+ }
553
+
554
+ /**
555
+ * Set menu position above cursor object.
556
+ *
557
+ * @param {Cursor} cursor `Cursor` object.
558
+ */
559
+ setPositionAboveCursor(cursor) {
560
+ let top = this.offset.above + cursor.top - this.container.offsetHeight;
561
+ if (this.isSubMenu()) {
562
+ top = cursor.top + cursor.cellHeight - this.container.offsetHeight + 3;
563
+ }
564
+ this.container.style.top = `${top}px`;
565
+ }
566
+
567
+ /**
568
+ * Set menu position below cursor object.
569
+ *
570
+ * @param {Cursor} cursor `Cursor` object.
571
+ */
572
+ setPositionBelowCursor(cursor) {
573
+ let top = this.offset.below + cursor.top + 1;
574
+ if (this.isSubMenu()) {
575
+ top = cursor.top - 1;
576
+ }
577
+ this.container.style.top = `${top}px`;
578
+ }
579
+
580
+ /**
581
+ * Set menu position on the right of cursor object.
582
+ *
583
+ * @param {Cursor} cursor `Cursor` object.
584
+ */
585
+ setPositionOnRightOfCursor(cursor) {
586
+ let left = cursor.left;
587
+ if (this.isSubMenu()) {
588
+ const {
589
+ right: parentMenuRight
590
+ } = this.parentMenu.container.getBoundingClientRect();
591
+
592
+ // move the sub menu by the width of the parent's border (usually by 1-2 pixels)
593
+ left += cursor.cellWidth + parentMenuRight - (cursor.left + cursor.cellWidth);
594
+ } else {
595
+ left += this.offset.right;
596
+ }
597
+ this.container.style.left = `${left}px`;
598
+ }
599
+
600
+ /**
601
+ * Set menu position on the left of cursor object.
602
+ *
603
+ * @param {Cursor} cursor `Cursor` object.
604
+ */
605
+ setPositionOnLeftOfCursor(cursor) {
606
+ let left = this.offset.left + cursor.left - this.container.offsetWidth;
498
607
  if (this.isSubMenu()) {
499
- this.positioner.setParentElement(this.parentMenu.container);
608
+ const {
609
+ left: parentMenuLeft
610
+ } = this.parentMenu.container.getBoundingClientRect();
611
+
612
+ // move the sub menu by the width of the parent's border (usually by 1-2 pixels)
613
+ left -= cursor.left - parentMenuLeft;
614
+ }
615
+ this.container.style.left = `${left}px`;
616
+ }
617
+
618
+ /**
619
+ * Select first cell in opened menu.
620
+ */
621
+ selectFirstCell() {
622
+ const cell = this.hotMenu.getCell(0, 0);
623
+ if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
624
+ this.selectNextCell(0, 0);
625
+ } else {
626
+ this.hotMenu.selectCell(0, 0);
627
+ }
628
+ }
629
+
630
+ /**
631
+ * Select last cell in opened menu.
632
+ */
633
+ selectLastCell() {
634
+ const lastRow = this.hotMenu.countRows() - 1;
635
+ const cell = this.hotMenu.getCell(lastRow, 0);
636
+ if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
637
+ this.selectPrevCell(lastRow, 0);
638
+ } else {
639
+ // disable default "scroll-to-cell" option and instead of that...
640
+ this.hotMenu.selectCell(lastRow, 0, undefined, undefined, false);
641
+ // ...scroll to the cell with "snap to the bottom" option
642
+ this.hotMenu.scrollViewportTo(lastRow, 0, true, false);
643
+ }
644
+ }
645
+
646
+ /**
647
+ * Select next cell in opened menu.
648
+ *
649
+ * @param {number} row Row index.
650
+ * @param {number} col Column index.
651
+ */
652
+ selectNextCell(row, col) {
653
+ const nextRow = row + 1;
654
+ const cell = nextRow < this.hotMenu.countRows() ? this.hotMenu.getCell(nextRow, col) : null;
655
+ if (!cell) {
656
+ return;
657
+ }
658
+ if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
659
+ this.selectNextCell(nextRow, col);
660
+ } else {
661
+ this.hotMenu.selectCell(nextRow, col);
662
+ }
663
+ }
664
+
665
+ /**
666
+ * Select previous cell in opened menu.
667
+ *
668
+ * @param {number} row Row index.
669
+ * @param {number} col Column index.
670
+ */
671
+ selectPrevCell(row, col) {
672
+ const prevRow = row - 1;
673
+ const cell = prevRow >= 0 ? this.hotMenu.getCell(prevRow, col) : null;
674
+ if (!cell) {
675
+ return;
676
+ }
677
+ if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
678
+ this.selectPrevCell(prevRow, col);
679
+ } else {
680
+ this.hotMenu.selectCell(prevRow, col);
500
681
  }
501
- this.positioner.setElement(this.container).updatePosition(coords);
502
682
  }
503
683
 
504
684
  /**
@@ -515,17 +695,18 @@ export class Menu {
515
695
  menuItemRenderer(hot, TD, row, col, prop, value) {
516
696
  const item = hot.getSourceDataAtRow(row);
517
697
  const wrapper = this.hot.rootDocument.createElement('div');
698
+ const isSubMenu = itemToTest => hasOwnProperty(itemToTest, 'submenu');
699
+ const itemIsSeparator = itemToTest => new RegExp(SEPARATOR, 'i').test(itemToTest.name);
700
+ const itemIsDisabled = itemToTest => itemToTest.disabled === true || typeof itemToTest.disabled === 'function' && itemToTest.disabled.call(this.hot) === true;
701
+ const itemIsSelectionDisabled = itemToTest => itemToTest.disableSelection;
518
702
  let itemValue = value;
519
703
  if (typeof itemValue === 'function') {
520
704
  itemValue = itemValue.call(this.hot);
521
705
  }
522
706
  empty(TD);
523
707
  addClass(wrapper, 'htItemWrapper');
524
- if (this.hot.getSettings().ariaTags) {
525
- setAttribute(TD, [A11Y_MENU_ITEM(), A11Y_LABEL(itemValue), ...(isItemDisabled(item, this.hot) ? [A11Y_DISABLED()] : []), ...(isItemSubMenu(item) ? [A11Y_EXPANDED(false)] : [])]);
526
- }
527
708
  TD.appendChild(wrapper);
528
- if (isItemSeparator(item)) {
709
+ if (itemIsSeparator(item)) {
529
710
  addClass(TD, 'htSeparator');
530
711
  } else if (typeof item.renderer === 'function') {
531
712
  addClass(TD, 'htCustomMenuRenderer');
@@ -533,22 +714,22 @@ export class Menu {
533
714
  } else {
534
715
  fastInnerHTML(wrapper, itemValue);
535
716
  }
536
- if (isItemDisabled(item, this.hot)) {
717
+ if (itemIsDisabled(item)) {
537
718
  addClass(TD, 'htDisabled');
538
719
  this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
539
- } else if (isItemSelectionDisabled(item)) {
720
+ } else if (itemIsSelectionDisabled(item)) {
540
721
  addClass(TD, 'htSelectionDisabled');
541
722
  this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
542
- } else if (isItemSubMenu(item)) {
723
+ } else if (isSubMenu(item)) {
543
724
  addClass(TD, 'htSubmenu');
544
- if (isItemSelectionDisabled(item)) {
725
+ if (itemIsSelectionDisabled(item)) {
545
726
  this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
546
727
  } else {
547
728
  this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
548
729
  }
549
730
  } else {
550
731
  removeClass(TD, ['htSubmenu', 'htDisabled']);
551
- if (isItemSelectionDisabled(item)) {
732
+ if (itemIsSelectionDisabled(item)) {
552
733
  this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
553
734
  } else {
554
735
  this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
@@ -592,6 +773,26 @@ export class Menu {
592
773
  return container;
593
774
  }
594
775
 
776
+ /**
777
+ * @private
778
+ */
779
+ blockMainTableCallbacks() {
780
+ this._afterScrollCallback = function () {};
781
+ this.hot.addHook('afterScrollVertically', this._afterScrollCallback);
782
+ this.hot.addHook('afterScrollHorizontally', this._afterScrollCallback);
783
+ }
784
+
785
+ /**
786
+ * @private
787
+ */
788
+ releaseMainTableCallbacks() {
789
+ if (this._afterScrollCallback) {
790
+ this.hot.removeHook('afterScrollVertically', this._afterScrollCallback);
791
+ this.hot.removeHook('afterScrollHorizontally', this._afterScrollCallback);
792
+ this._afterScrollCallback = null;
793
+ }
794
+ }
795
+
595
796
  /**
596
797
  * On after init listener.
597
798
  *
@@ -611,10 +812,20 @@ export class Menu {
611
812
  holderStyle.width = `${currentHiderWidth + 3}px`;
612
813
  holderStyle.height = `${realHeight + 3}px`;
613
814
  hiderStyle.height = holderStyle.height;
815
+ }
614
816
 
615
- // Replace the default accessibility tags with the context menu's
616
- if (this.hot.getSettings().ariaTags) {
617
- setAttribute(this.hotMenu.rootElement, [A11Y_MENU()]);
817
+ /**
818
+ * On after selection listener.
819
+ *
820
+ * @param {number} r Selection start row index.
821
+ * @param {number} c Selection start column index.
822
+ * @param {number} r2 Selection end row index.
823
+ * @param {number} c2 Selection end column index.
824
+ * @param {object} preventScrolling Object with `value` property where its value change will be observed.
825
+ */
826
+ onAfterSelection(r, c, r2, c2, preventScrolling) {
827
+ if (this.keyEvent === false) {
828
+ preventScrolling.value = true;
618
829
  }
619
830
  }
620
831
 
@@ -654,4 +865,5 @@ export class Menu {
654
865
  }
655
866
  }
656
867
  }
657
- mixin(Menu, localHooks);
868
+ mixin(Menu, localHooks);
869
+ export default Menu;
@@ -23,13 +23,6 @@ function alignmentItem() {
23
23
  if (this.countRows() === 0 || this.countCols() === 0) {
24
24
  return true;
25
25
  }
26
- const range = this.getSelectedRangeLast();
27
- if (!range) {
28
- return true;
29
- }
30
- if (range.isSingleHeader()) {
31
- return true;
32
- }
33
26
  return !(this.getSelectedRange() && !this.selection.isSelectedByCorner());
34
27
  },
35
28
  submenu: {
@@ -16,13 +16,6 @@ export default function alignmentItem() {
16
16
  if (this.countRows() === 0 || this.countCols() === 0) {
17
17
  return true;
18
18
  }
19
- const range = this.getSelectedRangeLast();
20
- if (!range) {
21
- return true;
22
- }
23
- if (range.isSingleHeader()) {
24
- return true;
25
- }
26
19
  return !(this.getSelectedRange() && !this.selection.isSelectedByCorner());
27
20
  },
28
21
  submenu: {
@@ -2,6 +2,7 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  exports.default = clearColumnItem;
5
+ var _utils = require("../utils");
5
6
  var C = _interopRequireWildcard(require("../../../i18n/constants"));
6
7
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
7
8
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -25,11 +26,8 @@ function clearColumnItem() {
25
26
  }
26
27
  },
27
28
  disabled() {
28
- const range = this.getSelectedRangeLast();
29
- if (!range) {
30
- return true;
31
- }
32
- if (range.isSingleHeader() && range.highlight.col < 0) {
29
+ const selected = (0, _utils.getValidSelection)(this);
30
+ if (!selected) {
33
31
  return true;
34
32
  }
35
33
  return !this.selection.isSelectedByColumnHeader();