handsontable 0.0.0-next-9379dd1-20231020 → 0.0.0-next-b0a4ea2-20231024

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of handsontable might be problematic. Click here for more details.

Files changed (57) hide show
  1. package/base.js +2 -2
  2. package/base.mjs +2 -2
  3. package/dist/handsontable.css +13 -12
  4. package/dist/handsontable.full.css +13 -12
  5. package/dist/handsontable.full.js +1864 -1143
  6. package/dist/handsontable.full.min.css +5 -5
  7. package/dist/handsontable.full.min.js +70 -70
  8. package/dist/handsontable.js +1864 -1143
  9. package/dist/handsontable.min.css +5 -5
  10. package/dist/handsontable.min.js +24 -24
  11. package/helpers/mixed.js +1 -1
  12. package/helpers/mixed.mjs +1 -1
  13. package/package.json +1 -1
  14. package/plugins/contextMenu/menu/defaultShortcutsList.js +88 -0
  15. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
  16. package/plugins/contextMenu/menu/menu.js +87 -151
  17. package/plugins/contextMenu/menu/menu.mjs +90 -154
  18. package/plugins/contextMenu/menu/menuItemRenderer.js +58 -0
  19. package/plugins/contextMenu/menu/menuItemRenderer.mjs +54 -0
  20. package/plugins/contextMenu/menu/navigator.js +19 -144
  21. package/plugins/contextMenu/menu/navigator.mjs +18 -143
  22. package/plugins/contextMenu/menu/shortcuts.js +114 -0
  23. package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
  24. package/plugins/dropdownMenu/dropdownMenu.js +32 -4
  25. package/plugins/dropdownMenu/dropdownMenu.mjs +33 -5
  26. package/plugins/filters/component/_base.js +23 -8
  27. package/plugins/filters/component/_base.mjs +23 -8
  28. package/plugins/filters/component/actionBar.js +29 -27
  29. package/plugins/filters/component/actionBar.mjs +26 -23
  30. package/plugins/filters/component/condition.js +46 -59
  31. package/plugins/filters/component/condition.mjs +40 -52
  32. package/plugins/filters/component/operators.js +21 -22
  33. package/plugins/filters/component/operators.mjs +18 -18
  34. package/plugins/filters/component/value.js +35 -26
  35. package/plugins/filters/component/value.mjs +32 -22
  36. package/plugins/filters/filters.js +75 -48
  37. package/plugins/filters/filters.mjs +68 -41
  38. package/plugins/filters/menu/focusController.js +123 -0
  39. package/plugins/filters/menu/focusController.mjs +119 -0
  40. package/plugins/filters/menu/focusNavigator.js +30 -0
  41. package/plugins/filters/menu/focusNavigator.mjs +26 -0
  42. package/plugins/filters/ui/_base.js +35 -13
  43. package/plugins/filters/ui/_base.mjs +35 -13
  44. package/plugins/filters/ui/input.js +43 -32
  45. package/plugins/filters/ui/input.mjs +42 -30
  46. package/plugins/filters/ui/link.js +44 -12
  47. package/plugins/filters/ui/link.mjs +44 -11
  48. package/plugins/filters/ui/multipleSelect.js +234 -129
  49. package/plugins/filters/ui/multipleSelect.mjs +232 -127
  50. package/plugins/filters/ui/radioInput.js +42 -18
  51. package/plugins/filters/ui/radioInput.mjs +42 -17
  52. package/plugins/filters/ui/select.js +144 -75
  53. package/plugins/filters/ui/select.mjs +140 -70
  54. package/shortcuts/context.js +3 -2
  55. package/shortcuts/context.mjs +3 -2
  56. package/utils/paginator.js +151 -0
  57. package/utils/paginator.mjs +147 -0
package/helpers/mixed.js CHANGED
@@ -134,7 +134,7 @@ const domMessages = {
134
134
  function _injectProductInfo(key, element) {
135
135
  const hasValidType = !isEmpty(key);
136
136
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
137
- const hotVersion = "0.0.0-next-9379dd1-20231020";
137
+ const hotVersion = "0.0.0-next-b0a4ea2-20231024";
138
138
  let keyValidityDate;
139
139
  let consoleMessageState = 'invalid';
140
140
  let domMessageState = 'invalid';
package/helpers/mixed.mjs CHANGED
@@ -124,7 +124,7 @@ const domMessages = {
124
124
  export function _injectProductInfo(key, element) {
125
125
  const hasValidType = !isEmpty(key);
126
126
  const isNonCommercial = typeof key === 'string' && key.toLowerCase() === 'non-commercial-and-evaluation';
127
- const hotVersion = "0.0.0-next-9379dd1-20231020";
127
+ const hotVersion = "0.0.0-next-b0a4ea2-20231024";
128
128
  let keyValidityDate;
129
129
  let consoleMessageState = 'invalid';
130
130
  let domMessageState = 'invalid';
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "url": "https://github.com/handsontable/handsontable/issues"
11
11
  },
12
12
  "author": "Handsoncode <hello@handsontable.com>",
13
- "version": "0.0.0-next-9379dd1-20231020",
13
+ "version": "0.0.0-next-b0a4ea2-20231024",
14
14
  "main": "index",
15
15
  "module": "index.mjs",
16
16
  "jsnext:main": "index.mjs",
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.createDefaultShortcutsList = createDefaultShortcutsList;
5
+ /**
6
+ * Creates a keyboard shortcuts list with default keyboards binds.
7
+ *
8
+ * @param {Menu} menu The main menu instance.
9
+ * @returns {KeyboardShortcut[]}
10
+ */
11
+ function createDefaultShortcutsList(menu) {
12
+ return [{
13
+ keys: [['Tab'], ['Shift', 'Tab'], ['Control/Meta', 'A']],
14
+ forwardToContext: menu.hot.getShortcutManager().getContext('grid'),
15
+ callback: () => menu.close(true)
16
+ }, {
17
+ keys: [['Escape']],
18
+ callback: () => menu.close()
19
+ }, {
20
+ keys: [['ArrowDown']],
21
+ callback: () => menu.getNavigator().toNextItem()
22
+ }, {
23
+ keys: [['ArrowUp']],
24
+ callback: () => menu.getNavigator().toPreviousItem()
25
+ }, {
26
+ keys: [['ArrowRight']],
27
+ callback: () => {
28
+ const selection = menu.hotMenu.getSelectedLast();
29
+ if (selection) {
30
+ const subMenu = menu.openSubMenu(selection[0]);
31
+ if (subMenu) {
32
+ subMenu.getNavigator().toFirstItem();
33
+ }
34
+ }
35
+ }
36
+ }, {
37
+ keys: [['ArrowLeft']],
38
+ callback: () => {
39
+ const selection = menu.hotMenu.getSelectedLast();
40
+ if (selection && menu.isSubMenu()) {
41
+ menu.close();
42
+ if (menu.isSubMenu()) {
43
+ menu.parentMenu.hotMenu.listen();
44
+ }
45
+ }
46
+ }
47
+ }, {
48
+ keys: [['Control/Meta', 'ArrowUp'], ['Home']],
49
+ callback: () => menu.getNavigator().toFirstItem()
50
+ }, {
51
+ keys: [['Control/Meta', 'ArrowDown'], ['End']],
52
+ callback: () => menu.getNavigator().toLastItem()
53
+ }, {
54
+ keys: [['Enter'], ['Space']],
55
+ callback: event => {
56
+ const selection = menu.hotMenu.getSelectedLast();
57
+ if (!selection) {
58
+ return;
59
+ }
60
+ if (menu.hotMenu.getSourceDataAtRow(selection[0]).submenu) {
61
+ menu.openSubMenu(selection[0]).getNavigator().toFirstItem();
62
+ } else {
63
+ menu.executeCommand(event);
64
+ menu.close(true);
65
+ }
66
+ }
67
+ }, {
68
+ keys: [['PageUp']],
69
+ callback: () => {
70
+ const selection = menu.hotMenu.getSelectedLast();
71
+ if (selection) {
72
+ menu.hotMenu.selection.transformStart(-menu.hotMenu.countVisibleRows(), 0);
73
+ } else {
74
+ menu.getNavigator().toFirstItem();
75
+ }
76
+ }
77
+ }, {
78
+ keys: [['PageDown']],
79
+ callback: () => {
80
+ const selection = menu.hotMenu.getSelectedLast();
81
+ if (selection) {
82
+ menu.hotMenu.selection.transformStart(menu.hotMenu.countVisibleRows(), 0);
83
+ } else {
84
+ menu.getNavigator().toLastItem();
85
+ }
86
+ }
87
+ }];
88
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Creates a keyboard shortcuts list with default keyboards binds.
3
+ *
4
+ * @param {Menu} menu The main menu instance.
5
+ * @returns {KeyboardShortcut[]}
6
+ */
7
+ export function createDefaultShortcutsList(menu) {
8
+ return [{
9
+ keys: [['Tab'], ['Shift', 'Tab'], ['Control/Meta', 'A']],
10
+ forwardToContext: menu.hot.getShortcutManager().getContext('grid'),
11
+ callback: () => menu.close(true)
12
+ }, {
13
+ keys: [['Escape']],
14
+ callback: () => menu.close()
15
+ }, {
16
+ keys: [['ArrowDown']],
17
+ callback: () => menu.getNavigator().toNextItem()
18
+ }, {
19
+ keys: [['ArrowUp']],
20
+ callback: () => menu.getNavigator().toPreviousItem()
21
+ }, {
22
+ keys: [['ArrowRight']],
23
+ callback: () => {
24
+ const selection = menu.hotMenu.getSelectedLast();
25
+ if (selection) {
26
+ const subMenu = menu.openSubMenu(selection[0]);
27
+ if (subMenu) {
28
+ subMenu.getNavigator().toFirstItem();
29
+ }
30
+ }
31
+ }
32
+ }, {
33
+ keys: [['ArrowLeft']],
34
+ callback: () => {
35
+ const selection = menu.hotMenu.getSelectedLast();
36
+ if (selection && menu.isSubMenu()) {
37
+ menu.close();
38
+ if (menu.isSubMenu()) {
39
+ menu.parentMenu.hotMenu.listen();
40
+ }
41
+ }
42
+ }
43
+ }, {
44
+ keys: [['Control/Meta', 'ArrowUp'], ['Home']],
45
+ callback: () => menu.getNavigator().toFirstItem()
46
+ }, {
47
+ keys: [['Control/Meta', 'ArrowDown'], ['End']],
48
+ callback: () => menu.getNavigator().toLastItem()
49
+ }, {
50
+ keys: [['Enter'], ['Space']],
51
+ callback: event => {
52
+ const selection = menu.hotMenu.getSelectedLast();
53
+ if (!selection) {
54
+ return;
55
+ }
56
+ if (menu.hotMenu.getSourceDataAtRow(selection[0]).submenu) {
57
+ menu.openSubMenu(selection[0]).getNavigator().toFirstItem();
58
+ } else {
59
+ menu.executeCommand(event);
60
+ menu.close(true);
61
+ }
62
+ }
63
+ }, {
64
+ keys: [['PageUp']],
65
+ callback: () => {
66
+ const selection = menu.hotMenu.getSelectedLast();
67
+ if (selection) {
68
+ menu.hotMenu.selection.transformStart(-menu.hotMenu.countVisibleRows(), 0);
69
+ } else {
70
+ menu.getNavigator().toFirstItem();
71
+ }
72
+ }
73
+ }, {
74
+ keys: [['PageDown']],
75
+ callback: () => {
76
+ const selection = menu.hotMenu.getSelectedLast();
77
+ if (selection) {
78
+ menu.hotMenu.selection.transformStart(menu.hotMenu.countVisibleRows(), 0);
79
+ } else {
80
+ menu.getNavigator().toLastItem();
81
+ }
82
+ }
83
+ }];
84
+ }
@@ -1,9 +1,11 @@
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
6
  var _positioner = require("./positioner");
6
- var _navigator = require("./navigator");
7
+ var _navigator2 = require("./navigator");
8
+ var _shortcuts = require("./shortcuts");
7
9
  var _predefinedItems = require("./../predefinedItems");
8
10
  var _utils = require("./utils");
9
11
  var _eventManager = _interopRequireDefault(require("../../../eventManager"));
@@ -15,11 +17,17 @@ var _function = require("../../../helpers/function");
15
17
  var _mixed = require("../../../helpers/mixed");
16
18
  var _object = require("../../../helpers/object");
17
19
  var _localHooks = _interopRequireDefault(require("../../../mixins/localHooks"));
20
+ var _menuItemRenderer = require("./menuItemRenderer");
18
21
  var _a11y = require("../../../helpers/a11y");
19
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; }
20
30
  const MIN_WIDTH = 215;
21
- const SHORTCUTS_CONTEXT = 'menu';
22
- const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
23
31
 
24
32
  /**
25
33
  * @typedef MenuOptions
@@ -36,12 +44,33 @@ const SHORTCUTS_GROUP = SHORTCUTS_CONTEXT;
36
44
  * @private
37
45
  * @class Menu
38
46
  */
47
+ var _navigator = /*#__PURE__*/new WeakMap();
48
+ var _shortcutsCtrl = /*#__PURE__*/new WeakMap();
39
49
  class Menu {
40
50
  /**
41
51
  * @param {Core} hotInstance Handsontable instance.
42
52
  * @param {MenuOptions} [options] Menu options.
43
53
  */
44
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
+ });
45
74
  this.hot = hotInstance;
46
75
  this.options = options || {
47
76
  parent: null,
@@ -55,14 +84,20 @@ class Menu {
55
84
  this.eventManager = new _eventManager.default(this);
56
85
  this.container = this.createContainer(this.options.name);
57
86
  this.positioner = new _positioner.Positioner(this.options.keepInViewport);
58
- this.navigator = new _navigator.Navigator();
59
87
  this.hotMenu = null;
60
88
  this.hotSubMenus = {};
61
89
  this.parentMenu = this.options.parent || null;
62
90
  this.menuItems = null;
63
91
  this.origOutsideClickDeselects = null;
64
- this._afterScrollCallback = null;
65
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
+ }
66
101
  }
67
102
 
68
103
  /**
@@ -88,6 +123,24 @@ class Menu {
88
123
  this.menuItems = menuItems;
89
124
  }
90
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
+
91
144
  /**
92
145
  * Returns currently selected menu item. Returns `null` if no item was selected.
93
146
  *
@@ -156,10 +209,11 @@ class Menu {
156
209
  readOnly: true,
157
210
  editor: false,
158
211
  copyPaste: false,
212
+ hiddenRows: true,
159
213
  maxCols: 1,
160
214
  columns: [{
161
215
  data: 'name',
162
- renderer: (hot, TD, row, col, prop, value) => this.menuItemRenderer(hot, TD, row, col, prop, value)
216
+ renderer: (0, _menuItemRenderer.createMenuItemRenderer)(this.hot)
163
217
  }],
164
218
  renderAllRows: true,
165
219
  fragmentSelection: false,
@@ -167,6 +221,9 @@ class Menu {
167
221
  disableVisualSelection: 'area',
168
222
  layoutDirection: this.hot.isRtl() ? 'rtl' : 'ltr',
169
223
  ariaTags: false,
224
+ beforeOnCellMouseOver: (event, coords) => {
225
+ _classPrivateFieldGet(this, _navigator).setCurrentPage(coords.row);
226
+ },
170
227
  afterOnCellMouseOver: (event, coords) => {
171
228
  if (this.isAllSubMenusClosed()) {
172
229
  delayedOpenSubMenu(coords.row);
@@ -189,6 +246,7 @@ class Menu {
189
246
  if (this.hotMenu.view.isMouseDown()) {
190
247
  preventScrolling.value = true;
191
248
  }
249
+ this.runLocalHooks('afterSelectionChange', this.getSelectedItem());
192
250
  },
193
251
  beforeOnCellMouseUp: event => {
194
252
  if (this.hasSelectedItem()) {
@@ -226,94 +284,14 @@ class Menu {
226
284
  this.hotMenu = new this.hot.constructor(this.container, settings);
227
285
  this.hotMenu.addHook('afterInit', () => this.onAfterInit());
228
286
  this.hotMenu.init();
229
- this.hotMenu.listen();
230
- this.navigator.setMenu(this.hotMenu);
231
- const shortcutManager = this.hotMenu.getShortcutManager();
232
- const menuContext = shortcutManager.addContext(SHORTCUTS_GROUP);
233
- const config = {
234
- group: SHORTCUTS_CONTEXT
235
- };
236
- const menuContextConfig = {
237
- ...config,
238
- runOnlyIf: event => !(0, _element.isInput)(event.target) || !this.container.contains(event.target)
239
- };
240
-
241
- // Default shortcuts for Handsontable should not be handled. Changing context will help with that.
242
- shortcutManager.setActiveContextName('menu');
243
- menuContext.addShortcuts([{
244
- keys: [['Tab'], ['Shift', 'Tab'], ['Control/Meta', 'A']],
245
- forwardToContext: this.hot.getShortcutManager().getContext('grid'),
246
- callback: () => this.close(true)
247
- }, {
248
- keys: [['Escape']],
249
- callback: () => this.close(true)
250
- }, {
251
- keys: [['ArrowDown']],
252
- callback: () => this.navigator.selectNext()
253
- }, {
254
- keys: [['ArrowUp']],
255
- callback: () => this.navigator.selectPrev()
256
- }, {
257
- keys: [['ArrowRight']],
258
- callback: () => {
259
- const selection = this.hotMenu.getSelectedLast();
260
- if (selection) {
261
- const subMenu = this.openSubMenu(selection[0]);
262
- if (subMenu) {
263
- subMenu.navigator.selectFirst();
264
- }
265
- }
266
- }
267
- }, {
268
- keys: [['ArrowLeft']],
269
- callback: () => {
270
- const selection = this.hotMenu.getSelectedLast();
271
- if (selection && this.isSubMenu()) {
272
- this.close();
273
- if (this.isSubMenu()) {
274
- this.parentMenu.hotMenu.listen();
275
- }
276
- }
277
- }
278
- }, {
279
- keys: [['Control/Meta', 'ArrowUp'], ['Home']],
280
- callback: () => this.navigator.selectFirst()
281
- }, {
282
- keys: [['Control/Meta', 'ArrowDown'], ['End']],
283
- callback: () => this.navigator.selectLast()
284
- }, {
285
- keys: [['Enter'], ['Space']],
286
- callback: event => {
287
- const selection = this.hotMenu.getSelectedLast();
288
- if (this.hotMenu.getSourceDataAtRow(selection[0]).submenu) {
289
- this.openSubMenu(selection[0]).navigator.selectFirst();
290
- } else {
291
- this.executeCommand(event);
292
- this.close(true);
293
- }
294
- }
295
- }, {
296
- keys: [['PageUp']],
297
- callback: () => {
298
- const selection = this.hotMenu.getSelectedLast();
299
- if (selection) {
300
- this.hotMenu.selection.transformStart(-this.hotMenu.countVisibleRows(), 0);
301
- } else {
302
- this.navigator.selectFirst();
303
- }
304
- }
305
- }, {
306
- keys: [['PageDown']],
307
- callback: () => {
308
- const selection = this.hotMenu.getSelectedLast();
309
- if (selection) {
310
- this.hotMenu.selection.transformStart(this.hotMenu.countVisibleRows(), 0);
311
- } else {
312
- this.navigator.selectLast();
313
- }
314
- }
315
- }], menuContextConfig);
316
- 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);
317
295
  }
318
296
 
319
297
  /**
@@ -329,7 +307,7 @@ class Menu {
329
307
  if (closeParent && this.isSubMenu()) {
330
308
  this.parentMenu.close();
331
309
  } else {
332
- this.navigator.clear();
310
+ _classPrivateFieldGet(this, _navigator).clear();
333
311
  this.closeAllSubMenus();
334
312
  this.container.style.display = 'none';
335
313
  this.hotMenu.destroy();
@@ -420,6 +398,19 @@ class Menu {
420
398
  return Object.keys(this.hotSubMenus).length === 0;
421
399
  }
422
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
+
423
414
  /**
424
415
  * Destroy instance.
425
416
  */
@@ -505,61 +496,6 @@ class Menu {
505
496
  this.positioner.setElement(this.container).updatePosition(coords);
506
497
  }
507
498
 
508
- /**
509
- * Menu item renderer.
510
- *
511
- * @private
512
- * @param {Core} hot The Handsontable instance.
513
- * @param {HTMLCellElement} TD The rendered cell element.
514
- * @param {number} row The visual index.
515
- * @param {number} col The visual index.
516
- * @param {string} prop The column property if used.
517
- * @param {string} value The cell value.
518
- */
519
- menuItemRenderer(hot, TD, row, col, prop, value) {
520
- const item = hot.getSourceDataAtRow(row);
521
- const wrapper = this.hot.rootDocument.createElement('div');
522
- let itemValue = value;
523
- if (typeof itemValue === 'function') {
524
- itemValue = itemValue.call(this.hot);
525
- }
526
- (0, _element.empty)(TD);
527
- (0, _element.addClass)(wrapper, 'htItemWrapper');
528
- if (this.hot.getSettings().ariaTags) {
529
- (0, _element.setAttribute)(TD, [(0, _a11y.A11Y_MENU_ITEM)(), (0, _a11y.A11Y_LABEL)(itemValue), ...((0, _utils.isItemDisabled)(item, this.hot) ? [(0, _a11y.A11Y_DISABLED)()] : []), ...((0, _utils.isItemSubMenu)(item) ? [(0, _a11y.A11Y_EXPANDED)(false)] : [])]);
530
- }
531
- TD.appendChild(wrapper);
532
- if ((0, _utils.isItemSeparator)(item)) {
533
- (0, _element.addClass)(TD, 'htSeparator');
534
- } else if (typeof item.renderer === 'function') {
535
- (0, _element.addClass)(TD, 'htCustomMenuRenderer');
536
- TD.appendChild(item.renderer(hot, wrapper, row, col, prop, itemValue));
537
- } else {
538
- (0, _element.fastInnerHTML)(wrapper, itemValue);
539
- }
540
- if ((0, _utils.isItemDisabled)(item, this.hot)) {
541
- (0, _element.addClass)(TD, 'htDisabled');
542
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
543
- } else if ((0, _utils.isItemSelectionDisabled)(item)) {
544
- (0, _element.addClass)(TD, 'htSelectionDisabled');
545
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
546
- } else if ((0, _utils.isItemSubMenu)(item)) {
547
- (0, _element.addClass)(TD, 'htSubmenu');
548
- if ((0, _utils.isItemSelectionDisabled)(item)) {
549
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
550
- } else {
551
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
552
- }
553
- } else {
554
- (0, _element.removeClass)(TD, ['htSubmenu', 'htDisabled']);
555
- if ((0, _utils.isItemSelectionDisabled)(item)) {
556
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.deselectCell());
557
- } else {
558
- this.eventManager.addEventListener(TD, 'mouseenter', () => hot.selectCell(row, col, void 0, void 0, false, false));
559
- }
560
- }
561
- }
562
-
563
499
  /**
564
500
  * Create container/wrapper for handsontable.
565
501
  *
@@ -618,7 +554,7 @@ class Menu {
618
554
 
619
555
  // Replace the default accessibility tags with the context menu's
620
556
  if (this.hot.getSettings().ariaTags) {
621
- (0, _element.setAttribute)(this.hotMenu.rootElement, [(0, _a11y.A11Y_MENU)()]);
557
+ (0, _element.setAttribute)(this.hotMenu.rootElement, [(0, _a11y.A11Y_MENU)(), (0, _a11y.A11Y_TABINDEX)(-1)]);
622
558
  }
623
559
  }
624
560