handsontable 0.0.0-next-010265d-20231005 → 0.0.0-next-9379dd1-20231020

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

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