handsontable 13.1.0 → 14.0.0-next-e8f87aa-20231030

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