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,20 +1,29 @@
1
1
  import "core-js/modules/es.array.push.js";
2
- import Cursor from "./cursor.mjs";
3
- import { SEPARATOR, NO_ITEMS, predefinedItems } from "./predefinedItems.mjs";
4
- import { filterSeparators, hasSubMenu, isDisabled, isItemHidden, isSeparator, isSelectionDisabled, normalizeSelection } from "./utils.mjs";
5
- import Core from "../../core.mjs";
6
- import EventManager from "../../eventManager.mjs";
7
- import { arrayEach, arrayFilter, arrayReduce } from "../../helpers/array.mjs";
8
- import { isWindowsOS, isMobileBrowser, isIpadOS } from "../../helpers/browser.mjs";
9
- import { addClass, empty, fastInnerHTML, isChildOf, isInput, removeClass, getParentWindow, hasClass } from "../../helpers/dom/element.mjs";
10
- import { isRightClick } from "../../helpers/dom/event.mjs";
11
- import { debounce, isFunction } from "../../helpers/function.mjs";
12
- import { isUndefined, isDefined } from "../../helpers/mixed.mjs";
13
- import { mixin, hasOwnProperty } from "../../helpers/object.mjs";
14
- import localHooks from "../../mixins/localHooks.mjs";
2
+ import "core-js/modules/es.error.cause.js";
3
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
4
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
5
+ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
6
+ 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; } }
7
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
8
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
9
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
10
+ import { Positioner } from "./positioner.mjs";
11
+ import { createMenuNavigator } from "./navigator.mjs";
12
+ import { createKeyboardShortcutsCtrl } from "./shortcuts.mjs";
13
+ import { SEPARATOR, NO_ITEMS, predefinedItems } from "./../predefinedItems/index.mjs";
14
+ import { filterSeparators, hasSubMenu, isItemHidden, normalizeSelection, isItemSubMenu, isItemDisabled, isItemSeparator } from "./utils.mjs";
15
+ import EventManager from "../../../eventManager.mjs";
16
+ import { arrayEach, arrayFilter, arrayReduce } from "../../../helpers/array.mjs";
17
+ import { isWindowsOS, isMobileBrowser, isIpadOS } from "../../../helpers/browser.mjs";
18
+ import { addClass, isChildOf, getParentWindow, hasClass, setAttribute } from "../../../helpers/dom/element.mjs";
19
+ import { isRightClick } from "../../../helpers/dom/event.mjs";
20
+ import { debounce, isFunction } from "../../../helpers/function.mjs";
21
+ import { isUndefined, isDefined } from "../../../helpers/mixed.mjs";
22
+ import { mixin } from "../../../helpers/object.mjs";
23
+ import localHooks from "../../../mixins/localHooks.mjs";
24
+ import { createMenuItemRenderer } from "./menuItemRenderer.mjs";
25
+ import { A11Y_EXPANDED, A11Y_MENU, A11Y_TABINDEX } from "../../../helpers/a11y.mjs";
15
26
  const MIN_WIDTH = 215;
16
- const SHORTCUTS_CONTEXT = 'menu';
17
- const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
18
27
 
19
28
  /**
20
29
  * @typedef MenuOptions
@@ -31,12 +40,33 @@ const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
31
40
  * @private
32
41
  * @class Menu
33
42
  */
34
- class Menu {
43
+ var _navigator = /*#__PURE__*/new WeakMap();
44
+ var _shortcutsCtrl = /*#__PURE__*/new WeakMap();
45
+ export class Menu {
35
46
  /**
36
47
  * @param {Core} hotInstance Handsontable instance.
37
48
  * @param {MenuOptions} [options] Menu options.
38
49
  */
39
50
  constructor(hotInstance, options) {
51
+ var _this = this;
52
+ /**
53
+ * The controller module that allows modifying the menu item selection positions.
54
+ *
55
+ * @type {Paginator}
56
+ */
57
+ _classPrivateFieldInitSpec(this, _navigator, {
58
+ writable: true,
59
+ value: void 0
60
+ });
61
+ /**
62
+ * The controller module that allows extending the keyboard shortcuts for the menu.
63
+ *
64
+ * @type {KeyboardShortcutsMenuController}
65
+ */
66
+ _classPrivateFieldInitSpec(this, _shortcutsCtrl, {
67
+ writable: true,
68
+ value: void 0
69
+ });
40
70
  this.hot = hotInstance;
41
71
  this.options = options || {
42
72
  parent: null,
@@ -49,20 +79,21 @@ class Menu {
49
79
  };
50
80
  this.eventManager = new EventManager(this);
51
81
  this.container = this.createContainer(this.options.name);
82
+ this.positioner = new Positioner(this.options.keepInViewport);
52
83
  this.hotMenu = null;
53
84
  this.hotSubMenus = {};
54
85
  this.parentMenu = this.options.parent || null;
55
86
  this.menuItems = null;
56
87
  this.origOutsideClickDeselects = null;
57
- this.keyEvent = false;
58
- this.offset = {
59
- above: 0,
60
- below: 0,
61
- left: 0,
62
- right: 0
63
- };
64
- this._afterScrollCallback = null;
65
88
  this.registerEvents();
89
+ if (this.isSubMenu()) {
90
+ this.addLocalHook('afterSelectionChange', function () {
91
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
92
+ args[_key] = arguments[_key];
93
+ }
94
+ return _this.parentMenu.runLocalHooks('afterSelectionChange', ...args);
95
+ });
96
+ }
66
97
  }
67
98
 
68
99
  /**
@@ -88,6 +119,24 @@ class Menu {
88
119
  this.menuItems = menuItems;
89
120
  }
90
121
 
122
+ /**
123
+ * Gets the controller object that allows modifying the the menu item selection.
124
+ *
125
+ * @returns {Paginator | undefined}
126
+ */
127
+ getNavigator() {
128
+ return _classPrivateFieldGet(this, _navigator);
129
+ }
130
+
131
+ /**
132
+ * Gets the controller object that allows extending the keyboard shortcuts of the menu.
133
+ *
134
+ * @returns {KeyboardShortcutsMenuController | undefined}
135
+ */
136
+ getKeyboardShortcutsCtrl() {
137
+ return _classPrivateFieldGet(this, _shortcutsCtrl);
138
+ }
139
+
91
140
  /**
92
141
  * Returns currently selected menu item. Returns `null` if no item was selected.
93
142
  *
@@ -106,17 +155,6 @@ class Menu {
106
155
  return Array.isArray(this.hotMenu.getSelectedLast());
107
156
  }
108
157
 
109
- /**
110
- * Set offset menu position for specified area (`above`, `below`, `left` or `right`).
111
- *
112
- * @param {string} area Specified area name (`above`, `below`, `left` or `right`).
113
- * @param {number} offset Offset value.
114
- */
115
- setOffset(area) {
116
- let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
117
- this.offset[area] = offset;
118
- }
119
-
120
158
  /**
121
159
  * Check if menu is using as sub-menu.
122
160
  *
@@ -133,7 +171,6 @@ class Menu {
133
171
  * @fires Hooks#afterContextMenuShow
134
172
  */
135
173
  open() {
136
- var _this = this;
137
174
  this.runLocalHooks('beforeOpen');
138
175
  this.container.removeAttribute('style');
139
176
  this.container.style.display = 'block';
@@ -168,16 +205,21 @@ class Menu {
168
205
  readOnly: true,
169
206
  editor: false,
170
207
  copyPaste: false,
208
+ hiddenRows: true,
171
209
  maxCols: 1,
172
210
  columns: [{
173
211
  data: 'name',
174
- renderer: (hot, TD, row, col, prop, value) => this.menuItemRenderer(hot, TD, row, col, prop, value)
212
+ renderer: createMenuItemRenderer(this.hot)
175
213
  }],
176
214
  renderAllRows: true,
177
215
  fragmentSelection: false,
178
216
  outsideClickDeselects: false,
179
217
  disableVisualSelection: 'area',
180
218
  layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',
219
+ ariaTags: false,
220
+ beforeOnCellMouseOver: (event, coords) => {
221
+ _classPrivateFieldGet(this, _navigator).setCurrentPage(coords.row);
222
+ },
181
223
  afterOnCellMouseOver: (event, coords) => {
182
224
  if (this.isAllSubMenusClosed()) {
183
225
  delayedOpenSubMenu(coords.row);
@@ -195,6 +237,13 @@ class Menu {
195
237
  this.close(true);
196
238
  }
197
239
  },
240
+ afterSelection: (row, column, row2, column2, preventScrolling) => {
241
+ // do not scroll the viewport when mouse clicks on partially visible menu item
242
+ if (this.hotMenu.view.isMouseDown()) {
243
+ preventScrolling.value = true;
244
+ }
245
+ this.runLocalHooks('afterSelectionChange', this.getSelectedItem());
246
+ },
198
247
  beforeOnCellMouseUp: event => {
199
248
  if (this.hasSelectedItem()) {
200
249
  shouldAutoCloseMenu = !this.isCommandPassive(this.getSelectedItem());
@@ -212,7 +261,7 @@ class Menu {
212
261
  // event hides the tapped element, the click event grabs the element below. As a result, the filter
213
262
  // by condition menu is closed and immediately open on tapping the "None" item.
214
263
  if (isMobileBrowser() || isIpadOS()) {
215
- setTimeout(() => this.close(true), 325);
264
+ this.hot._registerTimeout(() => this.close(true), 325);
216
265
  } else {
217
266
  this.close(true);
218
267
  }
@@ -228,120 +277,17 @@ class Menu {
228
277
  };
229
278
  this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects;
230
279
  this.hot.getSettings().outsideClickDeselects = false;
231
- this.hotMenu = new Core(this.container, settings);
280
+ this.hotMenu = new this.hot.constructor(this.container, settings);
232
281
  this.hotMenu.addHook('afterInit', () => this.onAfterInit());
233
- this.hotMenu.addHook('afterSelection', function () {
234
- return _this.onAfterSelection(...arguments);
235
- });
236
282
  this.hotMenu.init();
237
- this.hotMenu.listen();
238
- const shortcutManager = this.hotMenu.getShortcutManager();
239
- const menuContext = shortcutManager.addContext(SHORTCUTS_GROUP);
240
- const config = {
241
- group: SHORTCUTS_CONTEXT
242
- };
243
- const menuContextConfig = {
244
- ...config,
245
- runOnlyIf: event => isInput(event.target) === false || this.container.contains(event.target) === false
246
- };
247
-
248
- // Default shortcuts for Handsontable should not be handled. Changing context will help with that.
249
- shortcutManager.setActiveContextName('menu');
250
- menuContext.addShortcuts([{
251
- keys: [['Escape']],
252
- callback: () => {
253
- this.keyEvent = true;
254
- this.close();
255
- this.keyEvent = false;
256
- }
257
- }, {
258
- keys: [['ArrowDown']],
259
- callback: () => {
260
- const selection = this.hotMenu.getSelectedLast();
261
- this.keyEvent = true;
262
- if (selection) {
263
- this.selectNextCell(selection[0], selection[1]);
264
- } else {
265
- this.selectFirstCell();
266
- }
267
- this.keyEvent = false;
268
- }
269
- }, {
270
- keys: [['ArrowUp']],
271
- callback: () => {
272
- const selection = this.hotMenu.getSelectedLast();
273
- this.keyEvent = true;
274
- if (selection) {
275
- this.selectPrevCell(selection[0], selection[1]);
276
- } else {
277
- this.selectLastCell();
278
- }
279
- this.keyEvent = false;
280
- }
281
- }, {
282
- keys: [['ArrowRight']],
283
- callback: () => {
284
- const selection = this.hotMenu.getSelectedLast();
285
- this.keyEvent = true;
286
- if (selection) {
287
- const menu = this.openSubMenu(selection[0]);
288
- if (menu) {
289
- menu.selectFirstCell();
290
- }
291
- }
292
- this.keyEvent = false;
293
- }
294
- }, {
295
- keys: [['ArrowLeft']],
296
- callback: () => {
297
- const selection = this.hotMenu.getSelectedLast();
298
- this.keyEvent = true;
299
- if (selection && this.isSubMenu()) {
300
- this.close();
301
- if (this.parentMenu) {
302
- this.parentMenu.hotMenu.listen();
303
- }
304
- }
305
- this.keyEvent = false;
306
- }
307
- }, {
308
- keys: [['Enter']],
309
- callback: event => {
310
- const selection = this.hotMenu.getSelectedLast();
311
- this.keyEvent = true;
312
- if (!this.hotMenu.getSourceDataAtRow(selection[0]).submenu) {
313
- this.executeCommand(event);
314
- this.close(true);
315
- }
316
- this.keyEvent = false;
317
- }
318
- }, {
319
- keys: [['PageUp']],
320
- callback: () => {
321
- const selection = this.hotMenu.getSelectedLast();
322
- this.keyEvent = true;
323
- if (selection) {
324
- this.hotMenu.selection.transformStart(-this.hotMenu.countVisibleRows(), 0);
325
- } else {
326
- this.selectFirstCell();
327
- }
328
- this.keyEvent = false;
329
- }
330
- }, {
331
- keys: [['PageDown']],
332
- callback: () => {
333
- const selection = this.hotMenu.getSelectedLast();
334
- this.keyEvent = true;
335
- if (selection) {
336
- this.hotMenu.selection.transformStart(this.hotMenu.countVisibleRows(), 0);
337
- } else {
338
- this.selectLastCell();
339
- }
340
- this.keyEvent = false;
341
- }
342
- }], menuContextConfig);
343
- this.blockMainTableCallbacks();
344
- this.runLocalHooks('afterOpen');
283
+ _classPrivateFieldSet(this, _navigator, createMenuNavigator(this.hotMenu));
284
+ _classPrivateFieldSet(this, _shortcutsCtrl, createKeyboardShortcutsCtrl(this));
285
+ _classPrivateFieldGet(this, _shortcutsCtrl).listen();
286
+ this.focus();
287
+ if (this.isSubMenu()) {
288
+ this.addLocalHook('afterOpen', () => this.parentMenu.runLocalHooks('afterSubmenuOpen', this));
289
+ }
290
+ this.runLocalHooks('afterOpen', this);
345
291
  }
346
292
 
347
293
  /**
@@ -354,17 +300,24 @@ class Menu {
354
300
  if (!this.isOpened()) {
355
301
  return;
356
302
  }
357
- if (closeParent && this.parentMenu) {
303
+ if (closeParent && this.isSubMenu()) {
358
304
  this.parentMenu.close();
359
305
  } else {
306
+ _classPrivateFieldGet(this, _navigator).clear();
360
307
  this.closeAllSubMenus();
361
308
  this.container.style.display = 'none';
362
- this.releaseMainTableCallbacks();
363
309
  this.hotMenu.destroy();
364
310
  this.hotMenu = null;
365
311
  this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects;
366
312
  this.runLocalHooks('afterClose');
367
- if (this.parentMenu) {
313
+ if (this.isSubMenu()) {
314
+ if (this.hot.getSettings().ariaTags) {
315
+ const selection = this.parentMenu.hotMenu.getSelectedLast();
316
+ if (selection) {
317
+ const cell = this.parentMenu.hotMenu.getCell(selection[0], 0);
318
+ setAttribute(cell, [A11Y_EXPANDED(false)]);
319
+ }
320
+ }
368
321
  this.parentMenu.hotMenu.listen();
369
322
  }
370
323
  }
@@ -397,6 +350,11 @@ class Menu {
397
350
  subMenu.open();
398
351
  subMenu.setPosition(cell.getBoundingClientRect());
399
352
  this.hotSubMenus[dataItem.key] = subMenu;
353
+
354
+ // Update the accessibility tags on the cell being the base for the submenu.
355
+ if (this.hot.getSettings().ariaTags) {
356
+ setAttribute(cell, [A11Y_EXPANDED(true)]);
357
+ }
400
358
  return subMenu;
401
359
  }
402
360
 
@@ -411,6 +369,12 @@ class Menu {
411
369
  if (menus) {
412
370
  menus.destroy();
413
371
  delete this.hotSubMenus[dataItem.key];
372
+ const cell = this.hotMenu.getCell(row, 0);
373
+
374
+ // Update the accessibility tags on the cell being the base for the submenu.
375
+ if (this.hot.getSettings().ariaTags) {
376
+ setAttribute(cell, [A11Y_EXPANDED(false)]);
377
+ }
414
378
  }
415
379
  }
416
380
 
@@ -430,6 +394,19 @@ class Menu {
430
394
  return Object.keys(this.hotSubMenus).length === 0;
431
395
  }
432
396
 
397
+ /**
398
+ * Focus the menu so all keyboard shortcuts become active.
399
+ */
400
+ focus() {
401
+ if (this.isOpened()) {
402
+ this.hotMenu.rootElement.focus({
403
+ preventScroll: true
404
+ });
405
+ this.getKeyboardShortcutsCtrl().listen();
406
+ this.hotMenu.listen();
407
+ }
408
+ }
409
+
433
410
  /**
434
411
  * Destroy instance.
435
412
  */
@@ -489,252 +466,30 @@ class Menu {
489
466
  * @returns {boolean}
490
467
  */
491
468
  isCommandPassive(commandDescriptor) {
492
- const {
493
- isCommand,
494
- name: commandName,
495
- disabled,
496
- submenu
497
- } = commandDescriptor;
498
- const isItemDisabled = disabled === true || typeof disabled === 'function' && disabled.call(this.hot) === true;
499
- return isCommand === false || commandName === SEPARATOR || isItemDisabled === true || submenu;
469
+ return commandDescriptor.isCommand === false || isItemSeparator(commandDescriptor) || isItemDisabled(commandDescriptor, this.hot) || isItemSubMenu(commandDescriptor);
500
470
  }
501
471
 
502
472
  /**
503
- * Set menu position based on dom event or based on literal object.
504
- *
505
- * @param {Event|object} coords Event or literal Object with coordinates.
506
- */
507
- setPosition(coords) {
508
- const cursor = new Cursor(coords, this.container.ownerDocument.defaultView);
509
- if (this.options.keepInViewport) {
510
- if (cursor.fitsBelow(this.container)) {
511
- this.setPositionBelowCursor(cursor);
512
- } else if (cursor.fitsAbove(this.container)) {
513
- this.setPositionAboveCursor(cursor);
514
- } else {
515
- this.setPositionBelowCursor(cursor);
516
- }
517
- if (this.hot.isLtr()) {
518
- this.setHorizontalPositionForLtr(cursor);
519
- } else {
520
- this.setHorizontalPositionForRtl(cursor);
521
- }
522
- } else {
523
- this.setPositionBelowCursor(cursor);
524
- this.setPositionOnRightOfCursor(cursor);
525
- }
526
- }
527
-
528
- /**
529
- * Set menu horizontal position for RTL mode.
530
- *
531
- * @param {Cursor} cursor `Cursor` object.
532
- */
533
- setHorizontalPositionForRtl(cursor) {
534
- if (cursor.fitsOnLeft(this.container)) {
535
- this.setPositionOnLeftOfCursor(cursor);
536
- } else {
537
- this.setPositionOnRightOfCursor(cursor);
538
- }
539
- }
540
-
541
- /**
542
- * Set menu horizontal position for LTR mode.
543
- *
544
- * @param {Cursor} cursor `Cursor` object.
545
- */
546
- setHorizontalPositionForLtr(cursor) {
547
- if (cursor.fitsOnRight(this.container)) {
548
- this.setPositionOnRightOfCursor(cursor);
549
- } else {
550
- this.setPositionOnLeftOfCursor(cursor);
551
- }
552
- }
553
-
554
- /**
555
- * Set menu position above cursor object.
556
- *
557
- * @param {Cursor} cursor `Cursor` object.
558
- */
559
- setPositionAboveCursor(cursor) {
560
- let top = this.offset.above + cursor.top - this.container.offsetHeight;
561
- if (this.isSubMenu()) {
562
- top = cursor.top + cursor.cellHeight - this.container.offsetHeight + 3;
563
- }
564
- this.container.style.top = `${top}px`;
565
- }
566
-
567
- /**
568
- * Set menu position below cursor object.
569
- *
570
- * @param {Cursor} cursor `Cursor` object.
571
- */
572
- setPositionBelowCursor(cursor) {
573
- let top = this.offset.below + cursor.top + 1;
574
- if (this.isSubMenu()) {
575
- top = cursor.top - 1;
576
- }
577
- this.container.style.top = `${top}px`;
578
- }
579
-
580
- /**
581
- * Set menu position on the right of cursor object.
473
+ * Set offset menu position for specified area (`above`, `below`, `left` or `right`).
582
474
  *
583
- * @param {Cursor} cursor `Cursor` object.
475
+ * @param {string} area Specified area name (`above`, `below`, `left` or `right`).
476
+ * @param {number} offset Offset value.
584
477
  */
585
- setPositionOnRightOfCursor(cursor) {
586
- let left = cursor.left;
587
- if (this.isSubMenu()) {
588
- const {
589
- right: parentMenuRight
590
- } = this.parentMenu.container.getBoundingClientRect();
591
-
592
- // move the sub menu by the width of the parent's border (usually by 1-2 pixels)
593
- left += cursor.cellWidth + parentMenuRight - (cursor.left + cursor.cellWidth);
594
- } else {
595
- left += this.offset.right;
596
- }
597
- this.container.style.left = `${left}px`;
478
+ setOffset(area) {
479
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
480
+ this.positioner.setOffset(area, offset);
598
481
  }
599
482
 
600
483
  /**
601
- * Set menu position on the left of cursor object.
484
+ * Set menu position based on dom event or based on literal object.
602
485
  *
603
- * @param {Cursor} cursor `Cursor` object.
486
+ * @param {Event|object} coords Event or literal Object with coordinates.
604
487
  */
605
- setPositionOnLeftOfCursor(cursor) {
606
- let left = this.offset.left + cursor.left - this.container.offsetWidth;
488
+ setPosition(coords) {
607
489
  if (this.isSubMenu()) {
608
- const {
609
- left: parentMenuLeft
610
- } = this.parentMenu.container.getBoundingClientRect();
611
-
612
- // move the sub menu by the width of the parent's border (usually by 1-2 pixels)
613
- left -= cursor.left - parentMenuLeft;
614
- }
615
- this.container.style.left = `${left}px`;
616
- }
617
-
618
- /**
619
- * Select first cell in opened menu.
620
- */
621
- selectFirstCell() {
622
- const cell = this.hotMenu.getCell(0, 0);
623
- if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
624
- this.selectNextCell(0, 0);
625
- } else {
626
- this.hotMenu.selectCell(0, 0);
627
- }
628
- }
629
-
630
- /**
631
- * Select last cell in opened menu.
632
- */
633
- selectLastCell() {
634
- const lastRow = this.hotMenu.countRows() - 1;
635
- const cell = this.hotMenu.getCell(lastRow, 0);
636
- if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
637
- this.selectPrevCell(lastRow, 0);
638
- } else {
639
- // disable default "scroll-to-cell" option and instead of that...
640
- this.hotMenu.selectCell(lastRow, 0, undefined, undefined, false);
641
- // ...scroll to the cell with "snap to the bottom" option
642
- this.hotMenu.scrollViewportTo(lastRow, 0, true, false);
643
- }
644
- }
645
-
646
- /**
647
- * Select next cell in opened menu.
648
- *
649
- * @param {number} row Row index.
650
- * @param {number} col Column index.
651
- */
652
- selectNextCell(row, col) {
653
- const nextRow = row + 1;
654
- const cell = nextRow < this.hotMenu.countRows() ? this.hotMenu.getCell(nextRow, col) : null;
655
- if (!cell) {
656
- return;
657
- }
658
- if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
659
- this.selectNextCell(nextRow, col);
660
- } else {
661
- this.hotMenu.selectCell(nextRow, col);
662
- }
663
- }
664
-
665
- /**
666
- * Select previous cell in opened menu.
667
- *
668
- * @param {number} row Row index.
669
- * @param {number} col Column index.
670
- */
671
- selectPrevCell(row, col) {
672
- const prevRow = row - 1;
673
- const cell = prevRow >= 0 ? this.hotMenu.getCell(prevRow, col) : null;
674
- if (!cell) {
675
- return;
676
- }
677
- if (isSeparator(cell) || isDisabled(cell) || isSelectionDisabled(cell)) {
678
- this.selectPrevCell(prevRow, col);
679
- } else {
680
- this.hotMenu.selectCell(prevRow, col);
681
- }
682
- }
683
-
684
- /**
685
- * Menu item renderer.
686
- *
687
- * @private
688
- * @param {Core} hot The Handsontable instance.
689
- * @param {HTMLCellElement} TD The rendered cell element.
690
- * @param {number} row The visual index.
691
- * @param {number} col The visual index.
692
- * @param {string} prop The column property if used.
693
- * @param {string} value The cell value.
694
- */
695
- menuItemRenderer(hot, TD, row, col, prop, value) {
696
- const item = hot.getSourceDataAtRow(row);
697
- const wrapper = this.hot.rootDocument.createElement('div');
698
- const isSubMenu = itemToTest => hasOwnProperty(itemToTest, 'submenu');
699
- const itemIsSeparator = itemToTest => new RegExp(SEPARATOR, 'i').test(itemToTest.name);
700
- const itemIsDisabled = itemToTest => itemToTest.disabled === true || typeof itemToTest.disabled === 'function' && itemToTest.disabled.call(this.hot) === true;
701
- const itemIsSelectionDisabled = itemToTest => itemToTest.disableSelection;
702
- let itemValue = value;
703
- if (typeof itemValue === 'function') {
704
- itemValue = itemValue.call(this.hot);
705
- }
706
- empty(TD);
707
- addClass(wrapper, 'htItemWrapper');
708
- TD.appendChild(wrapper);
709
- if (itemIsSeparator(item)) {
710
- addClass(TD, 'htSeparator');
711
- } else if (typeof item.renderer === 'function') {
712
- addClass(TD, 'htCustomMenuRenderer');
713
- TD.appendChild(item.renderer(hot, wrapper, row, col, prop, itemValue));
714
- } else {
715
- fastInnerHTML(wrapper, itemValue);
716
- }
717
- if (itemIsDisabled(item)) {
718
- addClass(TD, 'htDisabled');
719
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
720
- } else if (itemIsSelectionDisabled(item)) {
721
- addClass(TD, 'htSelectionDisabled');
722
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
723
- } else if (isSubMenu(item)) {
724
- addClass(TD, 'htSubmenu');
725
- if (itemIsSelectionDisabled(item)) {
726
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
727
- } else {
728
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
729
- }
730
- } else {
731
- removeClass(TD, ['htSubmenu', 'htDisabled']);
732
- if (itemIsSelectionDisabled(item)) {
733
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
734
- } else {
735
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
736
- }
490
+ this.positioner.setParentElement(this.parentMenu.container);
737
491
  }
492
+ this.positioner.setElement(this.container).updatePosition(coords);
738
493
  }
739
494
 
740
495
  /**
@@ -773,26 +528,6 @@ class Menu {
773
528
  return container;
774
529
  }
775
530
 
776
- /**
777
- * @private
778
- */
779
- blockMainTableCallbacks() {
780
- this._afterScrollCallback = function () {};
781
- this.hot.addHook('afterScrollVertically', this._afterScrollCallback);
782
- this.hot.addHook('afterScrollHorizontally', this._afterScrollCallback);
783
- }
784
-
785
- /**
786
- * @private
787
- */
788
- releaseMainTableCallbacks() {
789
- if (this._afterScrollCallback) {
790
- this.hot.removeHook('afterScrollVertically', this._afterScrollCallback);
791
- this.hot.removeHook('afterScrollHorizontally', this._afterScrollCallback);
792
- this._afterScrollCallback = null;
793
- }
794
- }
795
-
796
531
  /**
797
532
  * On after init listener.
798
533
  *
@@ -812,20 +547,10 @@ class Menu {
812
547
  holderStyle.width = `${currentHiderWidth + 3}px`;
813
548
  holderStyle.height = `${realHeight + 3}px`;
814
549
  hiderStyle.height = holderStyle.height;
815
- }
816
550
 
817
- /**
818
- * On after selection listener.
819
- *
820
- * @param {number} r Selection start row index.
821
- * @param {number} c Selection start column index.
822
- * @param {number} r2 Selection end row index.
823
- * @param {number} c2 Selection end column index.
824
- * @param {object} preventScrolling Object with `value` property where its value change will be observed.
825
- */
826
- onAfterSelection(r, c, r2, c2, preventScrolling) {
827
- if (this.keyEvent === false) {
828
- preventScrolling.value = true;
551
+ // Replace the default accessibility tags with the context menu's
552
+ if (this.hot.getSettings().ariaTags) {
553
+ setAttribute(this.hotMenu.rootElement, [A11Y_MENU(), A11Y_TABINDEX(-1)]);
829
554
  }
830
555
  }
831
556
 
@@ -865,5 +590,4 @@ class Menu {
865
590
  }
866
591
  }
867
592
  }
868
- mixin(Menu, localHooks);
869
- export default Menu;
593
+ mixin(Menu, localHooks);