handsontable 0.0.0-next-ff8465d-20231006 → 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 (117) hide show
  1. package/base.js +2 -2
  2. package/base.mjs +2 -2
  3. package/cellTypes/dateType/dateType.d.ts +3 -3
  4. package/cellTypes/dateType/dateType.js +2 -2
  5. package/cellTypes/dateType/dateType.mjs +2 -2
  6. package/cellTypes/handsontableType/handsontableType.d.ts +3 -3
  7. package/cellTypes/handsontableType/handsontableType.js +2 -2
  8. package/cellTypes/handsontableType/handsontableType.mjs +2 -2
  9. package/core.d.ts +1 -1
  10. package/core.js +10 -5
  11. package/core.mjs +10 -5
  12. package/dataMap/metaManager/metaSchema.js +1 -1
  13. package/dataMap/metaManager/metaSchema.mjs +1 -1
  14. package/dist/handsontable.css +13 -12
  15. package/dist/handsontable.full.css +13 -12
  16. package/dist/handsontable.full.js +2260 -1403
  17. package/dist/handsontable.full.min.css +5 -5
  18. package/dist/handsontable.full.min.js +10 -10
  19. package/dist/handsontable.js +2260 -1403
  20. package/dist/handsontable.min.css +5 -5
  21. package/dist/handsontable.min.js +24 -24
  22. package/dist/languages/all.js +6 -2
  23. package/dist/languages/all.min.js +1 -1
  24. package/dist/languages/en-US.js +3 -1
  25. package/dist/languages/en-US.min.js +1 -1
  26. package/dist/languages/pl-PL.js +3 -1
  27. package/dist/languages/pl-PL.min.js +1 -1
  28. package/editors/autocompleteEditor/autocompleteEditor.js +1 -1
  29. package/editors/autocompleteEditor/autocompleteEditor.mjs +1 -1
  30. package/editors/dateEditor/dateEditor.js +26 -7
  31. package/editors/dateEditor/dateEditor.mjs +27 -8
  32. package/editors/handsontableEditor/handsontableEditor.js +7 -0
  33. package/editors/handsontableEditor/handsontableEditor.mjs +8 -1
  34. package/helpers/a11y.js +3 -1
  35. package/helpers/a11y.mjs +2 -1
  36. package/helpers/mixed.js +1 -1
  37. package/helpers/mixed.mjs +1 -1
  38. package/i18n/constants.js +7 -1
  39. package/i18n/constants.mjs +4 -1
  40. package/i18n/languages/en-US.js +3 -1
  41. package/i18n/languages/en-US.mjs +3 -1
  42. package/i18n/languages/pl-PL.js +3 -1
  43. package/i18n/languages/pl-PL.mjs +3 -1
  44. package/languages/all.js +6 -2
  45. package/languages/en-US.js +3 -1
  46. package/languages/en-US.mjs +3 -1
  47. package/languages/index.js +6 -2
  48. package/languages/pl-PL.js +3 -1
  49. package/languages/pl-PL.mjs +3 -1
  50. package/package.json +11 -1
  51. package/pluginHooks.js +1 -1
  52. package/pluginHooks.mjs +1 -1
  53. package/plugins/contextMenu/menu/defaultShortcutsList.js +88 -0
  54. package/plugins/contextMenu/menu/defaultShortcutsList.mjs +84 -0
  55. package/plugins/contextMenu/menu/menu.js +87 -151
  56. package/plugins/contextMenu/menu/menu.mjs +90 -154
  57. package/plugins/contextMenu/menu/menuItemRenderer.js +58 -0
  58. package/plugins/contextMenu/menu/menuItemRenderer.mjs +54 -0
  59. package/plugins/contextMenu/menu/navigator.js +19 -144
  60. package/plugins/contextMenu/menu/navigator.mjs +18 -143
  61. package/plugins/contextMenu/menu/shortcuts.js +114 -0
  62. package/plugins/contextMenu/menu/shortcuts.mjs +110 -0
  63. package/plugins/dropdownMenu/dropdownMenu.js +32 -4
  64. package/plugins/dropdownMenu/dropdownMenu.mjs +33 -5
  65. package/plugins/filters/component/_base.js +23 -8
  66. package/plugins/filters/component/_base.mjs +23 -8
  67. package/plugins/filters/component/actionBar.js +29 -27
  68. package/plugins/filters/component/actionBar.mjs +26 -23
  69. package/plugins/filters/component/condition.js +46 -59
  70. package/plugins/filters/component/condition.mjs +40 -52
  71. package/plugins/filters/component/operators.js +21 -22
  72. package/plugins/filters/component/operators.mjs +18 -18
  73. package/plugins/filters/component/value.js +35 -26
  74. package/plugins/filters/component/value.mjs +32 -22
  75. package/plugins/filters/filters.js +75 -48
  76. package/plugins/filters/filters.mjs +68 -41
  77. package/plugins/filters/menu/focusController.js +123 -0
  78. package/plugins/filters/menu/focusController.mjs +119 -0
  79. package/plugins/filters/menu/focusNavigator.js +30 -0
  80. package/plugins/filters/menu/focusNavigator.mjs +26 -0
  81. package/plugins/filters/ui/_base.js +35 -13
  82. package/plugins/filters/ui/_base.mjs +35 -13
  83. package/plugins/filters/ui/input.js +43 -32
  84. package/plugins/filters/ui/input.mjs +42 -30
  85. package/plugins/filters/ui/link.js +44 -12
  86. package/plugins/filters/ui/link.mjs +44 -11
  87. package/plugins/filters/ui/multipleSelect.js +234 -129
  88. package/plugins/filters/ui/multipleSelect.mjs +232 -127
  89. package/plugins/filters/ui/radioInput.js +42 -18
  90. package/plugins/filters/ui/radioInput.mjs +42 -17
  91. package/plugins/filters/ui/select.js +144 -75
  92. package/plugins/filters/ui/select.mjs +140 -70
  93. package/renderers/autocompleteRenderer/autocompleteRenderer.js +1 -1
  94. package/renderers/autocompleteRenderer/autocompleteRenderer.mjs +1 -1
  95. package/renderers/checkboxRenderer/checkboxRenderer.js +3 -3
  96. package/renderers/checkboxRenderer/checkboxRenderer.mjs +4 -4
  97. package/renderers/dateRenderer/dateRenderer.d.ts +5 -0
  98. package/renderers/dateRenderer/dateRenderer.js +29 -0
  99. package/renderers/dateRenderer/dateRenderer.mjs +24 -0
  100. package/renderers/dateRenderer/index.d.ts +1 -0
  101. package/renderers/dateRenderer/index.js +6 -0
  102. package/renderers/dateRenderer/index.mjs +1 -0
  103. package/renderers/handsontableRenderer/handsontableRenderer.d.ts +5 -0
  104. package/renderers/handsontableRenderer/handsontableRenderer.js +29 -0
  105. package/renderers/handsontableRenderer/handsontableRenderer.mjs +24 -0
  106. package/renderers/handsontableRenderer/index.d.ts +1 -0
  107. package/renderers/handsontableRenderer/index.js +6 -0
  108. package/renderers/handsontableRenderer/index.mjs +1 -0
  109. package/renderers/index.d.ts +6 -0
  110. package/renderers/selectRenderer/selectRenderer.js +2 -1
  111. package/renderers/selectRenderer/selectRenderer.mjs +2 -1
  112. package/selection/selection.js +2 -2
  113. package/selection/selection.mjs +2 -2
  114. package/shortcuts/context.js +3 -2
  115. package/shortcuts/context.mjs +3 -2
  116. package/utils/paginator.js +151 -0
  117. package/utils/paginator.mjs +147 -0
@@ -6,25 +6,34 @@ require("core-js/modules/es.error.cause.js");
6
6
  var _element = require("../../../helpers/dom/element");
7
7
  var _array = require("../../../helpers/array");
8
8
  var _templateLiteralTag = require("../../../helpers/templateLiteralTag");
9
- var _base = _interopRequireDefault(require("./_base"));
9
+ var _base = require("./_base");
10
10
  var _logicalOperationRegisterer = require("../logicalOperationRegisterer");
11
11
  var _conjunction = require("../logicalOperations/conjunction");
12
12
  var _disjunction = require("../logicalOperations/disjunction");
13
13
  var _disjunctionWithExtraCondition = require("../logicalOperations/disjunctionWithExtraCondition");
14
- var _radioInput = _interopRequireDefault(require("../ui/radioInput"));
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ var _radioInput = require("../ui/radioInput");
15
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
16
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
17
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
16
18
  const SELECTED_AT_START_ELEMENT_INDEX = 0;
17
19
 
18
20
  /**
19
21
  * @private
20
22
  * @class OperatorsComponent
21
23
  */
22
- class OperatorsComponent extends _base.default {
24
+ var _onRadioInputChange = /*#__PURE__*/new WeakSet();
25
+ class OperatorsComponent extends _base.BaseComponent {
23
26
  constructor(hotInstance, options) {
24
27
  super(hotInstance, {
25
28
  id: options.id,
26
29
  stateless: false
27
30
  });
31
+ /**
32
+ * OnChange listener.
33
+ *
34
+ * @param {Event} event The DOM event object.
35
+ */
36
+ _classPrivateMethodInitSpec(this, _onRadioInputChange);
28
37
  this.name = options.name;
29
38
  this.buildOperatorsElement();
30
39
  }
@@ -43,9 +52,7 @@ class OperatorsComponent extends _base.default {
43
52
  hidden: () => this.isHidden(),
44
53
  renderer: (hot, wrapper) => {
45
54
  (0, _element.addClass)(wrapper.parentNode, 'htFiltersMenuOperators');
46
- if (!wrapper.parentNode.hasAttribute('ghost-table')) {
47
- (0, _array.arrayEach)(this.elements, ui => wrapper.appendChild(ui.element));
48
- }
55
+ (0, _array.arrayEach)(this.elements, ui => wrapper.appendChild(ui.element));
49
56
  return wrapper;
50
57
  }
51
58
  };
@@ -59,7 +66,7 @@ class OperatorsComponent extends _base.default {
59
66
  buildOperatorsElement() {
60
67
  const operationKeys = [_conjunction.OPERATION_ID, _disjunction.OPERATION_ID];
61
68
  (0, _array.arrayEach)(operationKeys, operation => {
62
- const radioInput = new _radioInput.default(this.hot, {
69
+ const radioInput = new _radioInput.RadioInputUI(this.hot, {
63
70
  name: 'operator',
64
71
  label: {
65
72
  htmlFor: operation,
@@ -69,7 +76,7 @@ class OperatorsComponent extends _base.default {
69
76
  checked: operation === operationKeys[SELECTED_AT_START_ELEMENT_INDEX],
70
77
  id: operation
71
78
  });
72
- radioInput.addLocalHook('change', event => this.onRadioInputChange(event));
79
+ radioInput.addLocalHook('change', event => _classPrivateMethodGet(this, _onRadioInputChange, _onRadioInputChange2).call(this, event));
73
80
  this.elements.push(radioInput);
74
81
  });
75
82
  }
@@ -94,7 +101,7 @@ class OperatorsComponent extends _base.default {
94
101
  * @returns {string}
95
102
  */
96
103
  getActiveOperationId() {
97
- const operationElement = this.elements.find(element => element instanceof _radioInput.default && element.isChecked());
104
+ const operationElement = this.elements.find(element => element instanceof _radioInput.RadioInputUI && element.isChecked());
98
105
  if (operationElement) {
99
106
  return operationElement.getValue();
100
107
  }
@@ -146,16 +153,8 @@ class OperatorsComponent extends _base.default {
146
153
  reset() {
147
154
  this.setChecked(SELECTED_AT_START_ELEMENT_INDEX);
148
155
  }
149
-
150
- /**
151
- * OnChange listener.
152
- *
153
- * @private
154
- * @param {Event} event The DOM event object.
155
- */
156
- onRadioInputChange(event) {
157
- this.setState(event.target.value);
158
- }
159
156
  }
160
- var _default = OperatorsComponent;
161
- exports.default = _default;
157
+ exports.OperatorsComponent = OperatorsComponent;
158
+ function _onRadioInputChange2(event) {
159
+ this.setState(event.target.value);
160
+ }
@@ -1,26 +1,36 @@
1
1
  import "core-js/modules/es.array.push.js";
2
2
  import "core-js/modules/es.error.cause.js";
3
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
4
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
5
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
3
6
  import { addClass } from "../../../helpers/dom/element.mjs";
4
7
  import { arrayEach } from "../../../helpers/array.mjs";
5
8
  import { toSingleLine } from "../../../helpers/templateLiteralTag.mjs";
6
- import BaseComponent from "./_base.mjs";
9
+ import { BaseComponent } from "./_base.mjs";
7
10
  import { getOperationName } from "../logicalOperationRegisterer.mjs";
8
11
  import { OPERATION_ID as OPERATION_AND } from "../logicalOperations/conjunction.mjs";
9
12
  import { OPERATION_ID as OPERATION_OR } from "../logicalOperations/disjunction.mjs";
10
13
  import { OPERATION_ID as OPERATION_OR_THEN_VARIABLE } from "../logicalOperations/disjunctionWithExtraCondition.mjs";
11
- import RadioInputUI from "../ui/radioInput.mjs";
14
+ import { RadioInputUI } from "../ui/radioInput.mjs";
12
15
  const SELECTED_AT_START_ELEMENT_INDEX = 0;
13
16
 
14
17
  /**
15
18
  * @private
16
19
  * @class OperatorsComponent
17
20
  */
18
- class OperatorsComponent extends BaseComponent {
21
+ var _onRadioInputChange = /*#__PURE__*/new WeakSet();
22
+ export class OperatorsComponent extends BaseComponent {
19
23
  constructor(hotInstance, options) {
20
24
  super(hotInstance, {
21
25
  id: options.id,
22
26
  stateless: false
23
27
  });
28
+ /**
29
+ * OnChange listener.
30
+ *
31
+ * @param {Event} event The DOM event object.
32
+ */
33
+ _classPrivateMethodInitSpec(this, _onRadioInputChange);
24
34
  this.name = options.name;
25
35
  this.buildOperatorsElement();
26
36
  }
@@ -39,9 +49,7 @@ class OperatorsComponent extends BaseComponent {
39
49
  hidden: () => this.isHidden(),
40
50
  renderer: (hot, wrapper) => {
41
51
  addClass(wrapper.parentNode, 'htFiltersMenuOperators');
42
- if (!wrapper.parentNode.hasAttribute('ghost-table')) {
43
- arrayEach(this.elements, ui => wrapper.appendChild(ui.element));
44
- }
52
+ arrayEach(this.elements, ui => wrapper.appendChild(ui.element));
45
53
  return wrapper;
46
54
  }
47
55
  };
@@ -65,7 +73,7 @@ class OperatorsComponent extends BaseComponent {
65
73
  checked: operation === operationKeys[SELECTED_AT_START_ELEMENT_INDEX],
66
74
  id: operation
67
75
  });
68
- radioInput.addLocalHook('change', event => this.onRadioInputChange(event));
76
+ radioInput.addLocalHook('change', event => _classPrivateMethodGet(this, _onRadioInputChange, _onRadioInputChange2).call(this, event));
69
77
  this.elements.push(radioInput);
70
78
  });
71
79
  }
@@ -142,15 +150,7 @@ class OperatorsComponent extends BaseComponent {
142
150
  reset() {
143
151
  this.setChecked(SELECTED_AT_START_ELEMENT_INDEX);
144
152
  }
145
-
146
- /**
147
- * OnChange listener.
148
- *
149
- * @private
150
- * @param {Event} event The DOM event object.
151
- */
152
- onRadioInputChange(event) {
153
- this.setState(event.target.value);
154
- }
155
153
  }
156
- export default OperatorsComponent;
154
+ function _onRadioInputChange2(event) {
155
+ this.setState(event.target.value);
156
+ }
@@ -2,31 +2,41 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  require("core-js/modules/es.array.push.js");
5
+ require("core-js/modules/es.error.cause.js");
5
6
  var _element = require("../../../helpers/dom/element");
6
7
  var _event = require("../../../helpers/dom/event");
7
8
  var _array = require("../../../helpers/array");
8
9
  var _unicode = require("../../../helpers/unicode");
9
10
  var C = _interopRequireWildcard(require("../../../i18n/constants"));
10
11
  var _utils = require("../utils");
11
- var _base = _interopRequireDefault(require("./_base"));
12
- var _multipleSelect = _interopRequireDefault(require("../ui/multipleSelect"));
12
+ var _base = require("./_base");
13
+ var _multipleSelect = require("../ui/multipleSelect");
13
14
  var _constants2 = require("../constants");
14
15
  var _conditionRegisterer = require("../conditionRegisterer");
15
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
16
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
17
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
19
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
20
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
18
21
  /**
19
22
  * @private
20
23
  * @class ValueComponent
21
24
  */
22
- class ValueComponent extends _base.default {
25
+ var _onInputKeyDown = /*#__PURE__*/new WeakSet();
26
+ class ValueComponent extends _base.BaseComponent {
23
27
  constructor(hotInstance, options) {
24
28
  super(hotInstance, {
25
29
  id: options.id,
26
30
  stateless: false
27
31
  });
32
+ /**
33
+ * Key down listener.
34
+ *
35
+ * @param {Event} event The DOM event object.
36
+ */
37
+ _classPrivateMethodInitSpec(this, _onInputKeyDown);
28
38
  this.name = options.name;
29
- this.elements.push(new _multipleSelect.default(this.hot));
39
+ this.elements.push(new _multipleSelect.MultipleSelectUI(this.hot));
30
40
  this.registerHooks();
31
41
  }
32
42
 
@@ -36,7 +46,17 @@ class ValueComponent extends _base.default {
36
46
  * @private
37
47
  */
38
48
  registerHooks() {
39
- this.getMultipleSelectElement().addLocalHook('keydown', event => this.onInputKeyDown(event));
49
+ this.getMultipleSelectElement().addLocalHook('keydown', event => _classPrivateMethodGet(this, _onInputKeyDown, _onInputKeyDown2).call(this, event)).addLocalHook('listTabKeydown', event => this.runLocalHooks('listTabKeydown', event));
50
+ }
51
+
52
+ /**
53
+ * Gets the list of elements from which the component is built.
54
+ *
55
+ * @returns {BaseUI[]}
56
+ */
57
+ getElements() {
58
+ const selectElement = this.getMultipleSelectElement();
59
+ return [selectElement.getSearchInputElement(), selectElement.getSelectAllElement(), selectElement.getClearAllElement(), this.getMultipleSelectElement()];
40
60
  }
41
61
 
42
62
  /**
@@ -121,7 +141,7 @@ class ValueComponent extends _base.default {
121
141
  * @returns {MultipleSelectUI}
122
142
  */
123
143
  getMultipleSelectElement() {
124
- return this.elements.filter(element => element instanceof _multipleSelect.default)[0];
144
+ return this.elements.filter(element => element instanceof _multipleSelect.MultipleSelectUI)[0];
125
145
  }
126
146
 
127
147
  /**
@@ -142,9 +162,7 @@ class ValueComponent extends _base.default {
142
162
  (0, _element.addClass)(label, 'htFiltersMenuLabel');
143
163
  label.textContent = value;
144
164
  wrapper.appendChild(label);
145
- if (!wrapper.parentNode.hasAttribute('ghost-table')) {
146
- (0, _array.arrayEach)(this.elements, ui => wrapper.appendChild(ui.element));
147
- }
165
+ (0, _array.arrayEach)(this.elements, ui => wrapper.appendChild(ui.element));
148
166
  return wrapper;
149
167
  }
150
168
  };
@@ -165,20 +183,6 @@ class ValueComponent extends _base.default {
165
183
  this.getMultipleSelectElement().setLocale(this.hot.getCellMeta(0, selectedColumn.visualIndex).locale);
166
184
  }
167
185
  }
168
-
169
- /**
170
- * Key down listener.
171
- *
172
- * @private
173
- * @param {Event} event The DOM event object.
174
- */
175
- onInputKeyDown(event) {
176
- if ((0, _unicode.isKey)(event.keyCode, 'ESCAPE')) {
177
- this.runLocalHooks('cancel');
178
- (0, _event.stopImmediatePropagation)(event);
179
- }
180
- }
181
-
182
186
  /**
183
187
  * Get data for currently selected column.
184
188
  *
@@ -193,5 +197,10 @@ class ValueComponent extends _base.default {
193
197
  return (0, _array.arrayMap)(this.hot.getDataAtCol(selectedColumn.visualIndex), v => (0, _utils.toEmptyString)(v));
194
198
  }
195
199
  }
196
- var _default = ValueComponent;
197
- exports.default = _default;
200
+ exports.ValueComponent = ValueComponent;
201
+ function _onInputKeyDown2(event) {
202
+ if ((0, _unicode.isKey)(event.keyCode, 'ESCAPE')) {
203
+ this.runLocalHooks('cancel');
204
+ (0, _event.stopImmediatePropagation)(event);
205
+ }
206
+ }
@@ -1,24 +1,35 @@
1
1
  import "core-js/modules/es.array.push.js";
2
+ import "core-js/modules/es.error.cause.js";
3
+ function _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }
4
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
5
+ function _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return fn; }
2
6
  import { addClass } from "../../../helpers/dom/element.mjs";
3
7
  import { stopImmediatePropagation } from "../../../helpers/dom/event.mjs";
4
8
  import { arrayEach, arrayFilter, arrayMap } from "../../../helpers/array.mjs";
5
9
  import { isKey } from "../../../helpers/unicode.mjs";
6
10
  import * as C from "../../../i18n/constants.mjs";
7
11
  import { unifyColumnValues, intersectValues, toEmptyString } from "../utils.mjs";
8
- import BaseComponent from "./_base.mjs";
9
- import MultipleSelectUI from "../ui/multipleSelect.mjs";
12
+ import { BaseComponent } from "./_base.mjs";
13
+ import { MultipleSelectUI } from "../ui/multipleSelect.mjs";
10
14
  import { CONDITION_BY_VALUE, CONDITION_NONE } from "../constants.mjs";
11
15
  import { getConditionDescriptor } from "../conditionRegisterer.mjs";
12
16
  /**
13
17
  * @private
14
18
  * @class ValueComponent
15
19
  */
16
- class ValueComponent extends BaseComponent {
20
+ var _onInputKeyDown = /*#__PURE__*/new WeakSet();
21
+ export class ValueComponent extends BaseComponent {
17
22
  constructor(hotInstance, options) {
18
23
  super(hotInstance, {
19
24
  id: options.id,
20
25
  stateless: false
21
26
  });
27
+ /**
28
+ * Key down listener.
29
+ *
30
+ * @param {Event} event The DOM event object.
31
+ */
32
+ _classPrivateMethodInitSpec(this, _onInputKeyDown);
22
33
  this.name = options.name;
23
34
  this.elements.push(new MultipleSelectUI(this.hot));
24
35
  this.registerHooks();
@@ -30,7 +41,17 @@ class ValueComponent extends BaseComponent {
30
41
  * @private
31
42
  */
32
43
  registerHooks() {
33
- this.getMultipleSelectElement().addLocalHook('keydown', event => this.onInputKeyDown(event));
44
+ this.getMultipleSelectElement().addLocalHook('keydown', event => _classPrivateMethodGet(this, _onInputKeyDown, _onInputKeyDown2).call(this, event)).addLocalHook('listTabKeydown', event => this.runLocalHooks('listTabKeydown', event));
45
+ }
46
+
47
+ /**
48
+ * Gets the list of elements from which the component is built.
49
+ *
50
+ * @returns {BaseUI[]}
51
+ */
52
+ getElements() {
53
+ const selectElement = this.getMultipleSelectElement();
54
+ return [selectElement.getSearchInputElement(), selectElement.getSelectAllElement(), selectElement.getClearAllElement(), this.getMultipleSelectElement()];
34
55
  }
35
56
 
36
57
  /**
@@ -136,9 +157,7 @@ class ValueComponent extends BaseComponent {
136
157
  addClass(label, 'htFiltersMenuLabel');
137
158
  label.textContent = value;
138
159
  wrapper.appendChild(label);
139
- if (!wrapper.parentNode.hasAttribute('ghost-table')) {
140
- arrayEach(this.elements, ui => wrapper.appendChild(ui.element));
141
- }
160
+ arrayEach(this.elements, ui => wrapper.appendChild(ui.element));
142
161
  return wrapper;
143
162
  }
144
163
  };
@@ -159,20 +178,6 @@ class ValueComponent extends BaseComponent {
159
178
  this.getMultipleSelectElement().setLocale(this.hot.getCellMeta(0, selectedColumn.visualIndex).locale);
160
179
  }
161
180
  }
162
-
163
- /**
164
- * Key down listener.
165
- *
166
- * @private
167
- * @param {Event} event The DOM event object.
168
- */
169
- onInputKeyDown(event) {
170
- if (isKey(event.keyCode, 'ESCAPE')) {
171
- this.runLocalHooks('cancel');
172
- stopImmediatePropagation(event);
173
- }
174
- }
175
-
176
181
  /**
177
182
  * Get data for currently selected column.
178
183
  *
@@ -187,4 +192,9 @@ class ValueComponent extends BaseComponent {
187
192
  return arrayMap(this.hot.getDataAtCol(selectedColumn.visualIndex), v => toEmptyString(v));
188
193
  }
189
194
  }
190
- export default ValueComponent;
195
+ function _onInputKeyDown2(event) {
196
+ if (isKey(event.keyCode, 'ESCAPE')) {
197
+ this.runLocalHooks('cancel');
198
+ stopImmediatePropagation(event);
199
+ }
200
+ }
@@ -1,29 +1,42 @@
1
1
  "use strict";
2
2
 
3
+ require("core-js/modules/es.error.cause.js");
3
4
  exports.__esModule = true;
5
+ require("core-js/modules/es.array.unscopables.flat.js");
4
6
  require("core-js/modules/es.array.push.js");
5
7
  var _base = require("../base");
6
8
  var _array = require("../../helpers/array");
7
9
  var _templateLiteralTag = require("../../helpers/templateLiteralTag");
8
10
  var _console = require("../../helpers/console");
9
11
  var _number = require("../../helpers/number");
10
- var _eventManager = _interopRequireDefault(require("../../eventManager"));
11
12
  var _element = require("../../helpers/dom/element");
13
+ var _unicode = require("../../helpers/unicode");
12
14
  var _predefinedItems = require("../contextMenu/predefinedItems");
13
15
  var constants = _interopRequireWildcard(require("../../i18n/constants"));
14
- var _condition = _interopRequireDefault(require("./component/condition"));
15
- var _operators = _interopRequireDefault(require("./component/operators"));
16
- var _value = _interopRequireDefault(require("./component/value"));
17
- var _actionBar = _interopRequireDefault(require("./component/actionBar"));
16
+ var _condition = require("./component/condition");
17
+ var _operators = require("./component/operators");
18
+ var _value = require("./component/value");
19
+ var _actionBar = require("./component/actionBar");
18
20
  var _conditionCollection = _interopRequireDefault(require("./conditionCollection"));
19
21
  var _dataFilter = _interopRequireDefault(require("./dataFilter"));
20
22
  var _conditionUpdateObserver = _interopRequireDefault(require("./conditionUpdateObserver"));
21
23
  var _utils = require("./utils");
24
+ var _focusController = require("./menu/focusController");
22
25
  var _constants2 = require("./constants");
23
26
  var _translations = require("../../translations");
27
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
28
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
29
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
26
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
30
+ function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
31
+ function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
32
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
33
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
34
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
35
+ function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
36
+ 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; } }
37
+ function _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "get"); return _classApplyDescriptorGet(receiver, descriptor); }
38
+ function _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to " + action + " private field on non-instance"); } return privateMap.get(receiver); }
39
+ function _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
27
40
  const PLUGIN_KEY = 'filters';
28
41
  exports.PLUGIN_KEY = PLUGIN_KEY;
29
42
  const PLUGIN_PRIORITY = 250;
@@ -65,6 +78,7 @@ const SHORTCUTS_GROUP = PLUGIN_KEY;
65
78
  * ```
66
79
  * :::
67
80
  */
81
+ var _menuFocusNavigator = /*#__PURE__*/new WeakMap();
68
82
  class Filters extends _base.BasePlugin {
69
83
  static get PLUGIN_KEY() {
70
84
  return PLUGIN_KEY;
@@ -75,52 +89,55 @@ class Filters extends _base.BasePlugin {
75
89
  static get PLUGIN_DEPS() {
76
90
  return ['plugin:DropdownMenu', 'plugin:HiddenRows', 'cell-type:checkbox'];
77
91
  }
92
+
93
+ /**
94
+ * Instance of {@link DropdownMenu}.
95
+ *
96
+ * @private
97
+ * @type {DropdownMenu}
98
+ */
99
+
78
100
  constructor(hotInstance) {
79
101
  super(hotInstance);
80
- /**
81
- * Instance of {@link EventManager}.
82
- *
83
- * @private
84
- * @type {EventManager}
85
- */
86
- this.eventManager = new _eventManager.default(this);
87
- /**
88
- * Instance of {@link DropdownMenu}.
89
- *
90
- * @private
91
- * @type {DropdownMenu}
92
- */
93
- this.dropdownMenuPlugin = null;
102
+ // One listener for the enable/disable functionality
103
+ _defineProperty(this, "dropdownMenuPlugin", null);
94
104
  /**
95
105
  * Instance of {@link ConditionCollection}.
96
106
  *
97
107
  * @private
98
108
  * @type {ConditionCollection}
99
109
  */
100
- this.conditionCollection = null;
110
+ _defineProperty(this, "conditionCollection", null);
101
111
  /**
102
112
  * Instance of {@link ConditionUpdateObserver}.
103
113
  *
104
114
  * @private
105
115
  * @type {ConditionUpdateObserver}
106
116
  */
107
- this.conditionUpdateObserver = null;
117
+ _defineProperty(this, "conditionUpdateObserver", null);
108
118
  /**
109
119
  * Map, where key is component identifier and value represent `BaseComponent` element or it derivatives.
110
120
  *
111
121
  * @private
112
122
  * @type {Map}
113
123
  */
114
- this.components = new Map([['filter_by_condition', null], ['filter_operators', null], ['filter_by_condition2', null], ['filter_by_value', null], ['filter_action_bar', null]]);
124
+ _defineProperty(this, "components", new Map([['filter_by_condition', null], ['filter_operators', null], ['filter_by_condition2', null], ['filter_by_value', null], ['filter_action_bar', null]]));
115
125
  /**
116
126
  * Map of skipped rows by plugin.
117
127
  *
118
128
  * @private
119
129
  * @type {null|TrimmingMap}
120
130
  */
121
- this.filtersRowsMap = null;
122
-
123
- // One listener for the enable/disable functionality
131
+ _defineProperty(this, "filtersRowsMap", null);
132
+ /**
133
+ * Menu focus navigator allows switching the focus position through Tab and Shift Tab keys.
134
+ *
135
+ * @type {MenuFocusNavigator|undefined}
136
+ */
137
+ _classPrivateFieldInitSpec(this, _menuFocusNavigator, {
138
+ writable: true,
139
+ value: void 0
140
+ });
124
141
  this.hot.addHook('afterGetColHeader', (col, TH) => this.onAfterGetColHeader(col, TH));
125
142
  }
126
143
 
@@ -155,7 +172,7 @@ class Filters extends _base.BasePlugin {
155
172
  const filterByConditionLabel = () => `${this.hot.getTranslatedPhrase(constants.FILTERS_DIVS_FILTER_BY_CONDITION)}:`;
156
173
  const filterValueLabel = () => `${this.hot.getTranslatedPhrase(constants.FILTERS_DIVS_FILTER_BY_VALUE)}:`;
157
174
  if (!this.components.get('filter_by_condition')) {
158
- const conditionComponent = new _condition.default(this.hot, {
175
+ const conditionComponent = new _condition.ConditionComponent(this.hot, {
159
176
  id: 'filter_by_condition',
160
177
  name: filterByConditionLabel,
161
178
  addSeparator: false,
@@ -165,13 +182,13 @@ class Filters extends _base.BasePlugin {
165
182
  this.components.set('filter_by_condition', addConfirmationHooks(conditionComponent));
166
183
  }
167
184
  if (!this.components.get('filter_operators')) {
168
- this.components.set('filter_operators', new _operators.default(this.hot, {
185
+ this.components.set('filter_operators', new _operators.OperatorsComponent(this.hot, {
169
186
  id: 'filter_operators',
170
187
  name: 'Operators'
171
188
  }));
172
189
  }
173
190
  if (!this.components.get('filter_by_condition2')) {
174
- const conditionComponent = new _condition.default(this.hot, {
191
+ const conditionComponent = new _condition.ConditionComponent(this.hot, {
175
192
  id: 'filter_by_condition2',
176
193
  name: '',
177
194
  addSeparator: true,
@@ -181,13 +198,13 @@ class Filters extends _base.BasePlugin {
181
198
  this.components.set('filter_by_condition2', addConfirmationHooks(conditionComponent));
182
199
  }
183
200
  if (!this.components.get('filter_by_value')) {
184
- this.components.set('filter_by_value', addConfirmationHooks(new _value.default(this.hot, {
201
+ this.components.set('filter_by_value', addConfirmationHooks(new _value.ValueComponent(this.hot, {
185
202
  id: 'filter_by_value',
186
203
  name: filterValueLabel
187
204
  })));
188
205
  }
189
206
  if (!this.components.get('filter_action_bar')) {
190
- this.components.set('filter_action_bar', addConfirmationHooks(new _actionBar.default(this.hot, {
207
+ this.components.set('filter_action_bar', addConfirmationHooks(new _actionBar.ActionBarComponent(this.hot, {
191
208
  id: 'filter_action_bar',
192
209
  name: 'Action bar'
193
210
  })));
@@ -200,7 +217,6 @@ class Filters extends _base.BasePlugin {
200
217
  this.conditionUpdateObserver.addLocalHook('update', conditionState => this.updateComponents(conditionState));
201
218
  }
202
219
  this.components.forEach(component => component.show());
203
- this.addHook('beforeDropdownMenuSetItems', items => this.onBeforeDropdownMenuSetItems(items));
204
220
  this.addHook('afterDropdownMenuDefaultOptions', defaultOptions => this.onAfterDropdownMenuDefaultOptions(defaultOptions));
205
221
  this.addHook('afterDropdownMenuShow', () => this.onAfterDropdownMenuShow());
206
222
  this.addHook('afterDropdownMenuHide', () => this.onAfterDropdownMenuHide());
@@ -211,6 +227,32 @@ class Filters extends _base.BasePlugin {
211
227
  this.dropdownMenuPlugin.disablePlugin();
212
228
  this.dropdownMenuPlugin.enablePlugin();
213
229
  }
230
+ if (!_classPrivateFieldGet(this, _menuFocusNavigator) && this.dropdownMenuPlugin.enabled) {
231
+ const mainMenu = this.dropdownMenuPlugin.menu;
232
+ const focusableItems = [
233
+ // A fake menu item that once focused allows escaping from the focus navigation (using Tab keys)
234
+ // to the menu navigation using arrow keys.
235
+ {
236
+ focus: () => mainMenu.focus()
237
+ }, ...Array.from(this.components).map(_ref => {
238
+ let [, component] = _ref;
239
+ return component.getElements();
240
+ }).flat()];
241
+ _classPrivateFieldSet(this, _menuFocusNavigator, (0, _focusController.createMenuFocusController)(mainMenu, focusableItems));
242
+ const forwardToFocusNavigation = event => {
243
+ _classPrivateFieldGet(this, _menuFocusNavigator).listen();
244
+ event.preventDefault();
245
+ if ((0, _unicode.isKey)(event.keyCode, 'TAB')) {
246
+ if (event.shiftKey) {
247
+ _classPrivateFieldGet(this, _menuFocusNavigator).toPreviousItem();
248
+ } else {
249
+ _classPrivateFieldGet(this, _menuFocusNavigator).toNextItem();
250
+ }
251
+ }
252
+ };
253
+ this.components.get('filter_by_value').addLocalHook('listTabKeydown', forwardToFocusNavigation);
254
+ this.components.get('filter_by_condition').addLocalHook('selectTabKeydown', forwardToFocusNavigation);
255
+ }
214
256
  this.registerShortcuts();
215
257
  super.enablePlugin();
216
258
  }
@@ -578,21 +620,6 @@ class Filters extends _base.BasePlugin {
578
620
  this.components.get('filter_by_condition2').getSelectElement().closeOptions();
579
621
  }
580
622
 
581
- /**
582
- * Before dropdown menu set menu items listener.
583
- *
584
- * @private
585
- */
586
- onBeforeDropdownMenuSetItems() {
587
- if (this.dropdownMenuPlugin) {
588
- this.dropdownMenuPlugin.menu.addLocalHook('afterOpen', () => {
589
- this.dropdownMenuPlugin.menu.hotMenu.updateSettings({
590
- hiddenRows: true
591
- });
592
- });
593
- }
594
- }
595
-
596
623
  /**
597
624
  * After dropdown menu default options listener.
598
625
  *
@@ -685,7 +712,7 @@ class Filters extends _base.BasePlugin {
685
712
  */
686
713
  onComponentChange(component, command) {
687
714
  this.updateDependentComponentsVisibility();
688
- if (component.constructor === _condition.default && !command.inputsCount) {
715
+ if (component.constructor === _condition.ConditionComponent && !command.inputsCount) {
689
716
  this.setListeningDropdownMenu();
690
717
  }
691
718
  }