handsontable 16.1.1 → 16.2.0-next-216dbd0-20251112

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/3rdparty/walkontable/src/overlays.js +1 -1
  2. package/3rdparty/walkontable/src/overlays.mjs +1 -1
  3. package/3rdparty/walkontable/src/selection/border/border.js +19 -3
  4. package/3rdparty/walkontable/src/selection/border/border.mjs +19 -3
  5. package/CHANGELOG.md +39 -0
  6. package/base.js +2 -2
  7. package/base.mjs +2 -2
  8. package/core/coordsMapper/index.js +11 -0
  9. package/core/coordsMapper/index.mjs +1 -0
  10. package/core/hooks/bucket.js +7 -1
  11. package/core/hooks/bucket.mjs +7 -1
  12. package/core/hooks/constants.js +54 -0
  13. package/core/hooks/constants.mjs +54 -0
  14. package/core/hooks/index.d.ts +6 -0
  15. package/core/index.js +10 -4
  16. package/core/index.mjs +2 -1
  17. package/core.d.ts +3 -2
  18. package/core.js +67 -26
  19. package/core.mjs +56 -15
  20. package/dataMap/metaManager/metaSchema.js +197 -20
  21. package/dataMap/metaManager/metaSchema.mjs +197 -20
  22. package/dist/handsontable.css +175 -3
  23. package/dist/handsontable.full.css +175 -3
  24. package/dist/handsontable.full.js +10864 -8426
  25. package/dist/handsontable.full.min.css +5 -4
  26. package/dist/handsontable.full.min.js +194 -193
  27. package/dist/handsontable.js +7126 -4827
  28. package/dist/handsontable.min.css +4 -4
  29. package/dist/handsontable.min.js +43 -42
  30. package/dist/languages/all.js +168 -21
  31. package/dist/languages/all.min.js +1 -1
  32. package/dist/languages/ar-AR.js +8 -1
  33. package/dist/languages/ar-AR.min.js +1 -1
  34. package/dist/languages/cs-CZ.js +8 -1
  35. package/dist/languages/cs-CZ.min.js +1 -1
  36. package/dist/languages/de-CH.js +8 -1
  37. package/dist/languages/de-CH.min.js +1 -1
  38. package/dist/languages/de-DE.js +8 -1
  39. package/dist/languages/de-DE.min.js +1 -1
  40. package/dist/languages/en-US.js +8 -1
  41. package/dist/languages/en-US.min.js +1 -1
  42. package/dist/languages/es-MX.js +8 -1
  43. package/dist/languages/es-MX.min.js +1 -1
  44. package/dist/languages/fa-IR.js +8 -1
  45. package/dist/languages/fa-IR.min.js +1 -1
  46. package/dist/languages/fr-FR.js +8 -1
  47. package/dist/languages/fr-FR.min.js +1 -1
  48. package/dist/languages/hr-HR.js +8 -1
  49. package/dist/languages/hr-HR.min.js +1 -1
  50. package/dist/languages/it-IT.js +8 -1
  51. package/dist/languages/it-IT.min.js +1 -1
  52. package/dist/languages/ja-JP.js +8 -1
  53. package/dist/languages/ja-JP.min.js +1 -1
  54. package/dist/languages/ko-KR.js +8 -1
  55. package/dist/languages/ko-KR.min.js +1 -1
  56. package/dist/languages/lv-LV.js +8 -1
  57. package/dist/languages/lv-LV.min.js +1 -1
  58. package/dist/languages/nb-NO.js +8 -1
  59. package/dist/languages/nb-NO.min.js +1 -1
  60. package/dist/languages/nl-NL.js +8 -1
  61. package/dist/languages/nl-NL.min.js +1 -1
  62. package/dist/languages/pl-PL.js +8 -1
  63. package/dist/languages/pl-PL.min.js +1 -1
  64. package/dist/languages/pt-BR.js +8 -1
  65. package/dist/languages/pt-BR.min.js +1 -1
  66. package/dist/languages/ru-RU.js +8 -1
  67. package/dist/languages/ru-RU.min.js +1 -1
  68. package/dist/languages/sr-SP.js +8 -1
  69. package/dist/languages/sr-SP.min.js +1 -1
  70. package/dist/languages/zh-CN.js +8 -1
  71. package/dist/languages/zh-CN.min.js +1 -1
  72. package/dist/languages/zh-TW.js +8 -1
  73. package/dist/languages/zh-TW.min.js +1 -1
  74. package/editors/autocompleteEditor/autocompleteEditor.js +21 -1
  75. package/editors/autocompleteEditor/autocompleteEditor.mjs +22 -2
  76. package/focusManager/constants.js +25 -0
  77. package/focusManager/constants.mjs +22 -0
  78. package/focusManager/eventListener.js +107 -0
  79. package/focusManager/eventListener.mjs +103 -0
  80. package/{focusManager.d.ts → focusManager/grid.d.ts} +1 -1
  81. package/{focusManager.js → focusManager/grid.js} +48 -17
  82. package/{focusManager.mjs → focusManager/grid.mjs} +47 -16
  83. package/focusManager/index.d.ts +2 -0
  84. package/focusManager/index.js +20 -0
  85. package/focusManager/index.mjs +20 -0
  86. package/focusManager/scope.js +133 -0
  87. package/focusManager/scope.mjs +129 -0
  88. package/focusManager/scopeManager.d.ts +19 -0
  89. package/focusManager/scopeManager.js +268 -0
  90. package/focusManager/scopeManager.mjs +263 -0
  91. package/focusManager/scopes/grid.js +120 -0
  92. package/focusManager/scopes/grid.mjs +116 -0
  93. package/focusManager/scopes/index.js +13 -0
  94. package/focusManager/scopes/index.mjs +9 -0
  95. package/{utils → focusManager/utils}/focusDetector.js +21 -31
  96. package/{utils → focusManager/utils}/focusDetector.mjs +21 -31
  97. package/focusManager/utils/utils.js +95 -0
  98. package/focusManager/utils/utils.mjs +89 -0
  99. package/helpers/dom/element.js +1 -1
  100. package/helpers/dom/element.mjs +2 -2
  101. package/helpers/dom/event.js +1 -1
  102. package/helpers/dom/event.mjs +1 -1
  103. package/helpers/mixed.js +2 -65
  104. package/helpers/mixed.mjs +2 -63
  105. package/i18n/constants.js +10 -1
  106. package/i18n/constants.mjs +10 -1
  107. package/i18n/languages/ar-AR.js +8 -1
  108. package/i18n/languages/ar-AR.mjs +8 -1
  109. package/i18n/languages/cs-CZ.js +8 -1
  110. package/i18n/languages/cs-CZ.mjs +8 -1
  111. package/i18n/languages/de-CH.js +8 -1
  112. package/i18n/languages/de-CH.mjs +8 -1
  113. package/i18n/languages/de-DE.js +8 -1
  114. package/i18n/languages/de-DE.mjs +8 -1
  115. package/i18n/languages/en-US.js +8 -1
  116. package/i18n/languages/en-US.mjs +8 -1
  117. package/i18n/languages/es-MX.js +8 -1
  118. package/i18n/languages/es-MX.mjs +8 -1
  119. package/i18n/languages/fa-IR.js +8 -1
  120. package/i18n/languages/fa-IR.mjs +8 -1
  121. package/i18n/languages/fr-FR.js +8 -1
  122. package/i18n/languages/fr-FR.mjs +8 -1
  123. package/i18n/languages/hr-HR.js +8 -1
  124. package/i18n/languages/hr-HR.mjs +8 -1
  125. package/i18n/languages/it-IT.js +8 -1
  126. package/i18n/languages/it-IT.mjs +8 -1
  127. package/i18n/languages/ja-JP.js +8 -1
  128. package/i18n/languages/ja-JP.mjs +8 -1
  129. package/i18n/languages/ko-KR.js +8 -1
  130. package/i18n/languages/ko-KR.mjs +8 -1
  131. package/i18n/languages/lv-LV.js +8 -1
  132. package/i18n/languages/lv-LV.mjs +8 -1
  133. package/i18n/languages/nb-NO.js +8 -1
  134. package/i18n/languages/nb-NO.mjs +8 -1
  135. package/i18n/languages/nl-NL.js +8 -1
  136. package/i18n/languages/nl-NL.mjs +8 -1
  137. package/i18n/languages/pl-PL.js +8 -1
  138. package/i18n/languages/pl-PL.mjs +8 -1
  139. package/i18n/languages/pt-BR.js +8 -1
  140. package/i18n/languages/pt-BR.mjs +8 -1
  141. package/i18n/languages/ru-RU.js +8 -1
  142. package/i18n/languages/ru-RU.mjs +8 -1
  143. package/i18n/languages/sr-SP.js +8 -1
  144. package/i18n/languages/sr-SP.mjs +8 -1
  145. package/i18n/languages/zh-CN.js +8 -1
  146. package/i18n/languages/zh-CN.mjs +8 -1
  147. package/i18n/languages/zh-TW.js +8 -1
  148. package/i18n/languages/zh-TW.mjs +8 -1
  149. package/index.d.ts +9 -0
  150. package/languages/all.js +168 -21
  151. package/languages/ar-AR.js +8 -1
  152. package/languages/ar-AR.mjs +8 -1
  153. package/languages/cs-CZ.js +8 -1
  154. package/languages/cs-CZ.mjs +8 -1
  155. package/languages/de-CH.js +8 -1
  156. package/languages/de-CH.mjs +8 -1
  157. package/languages/de-DE.js +8 -1
  158. package/languages/de-DE.mjs +8 -1
  159. package/languages/en-US.js +8 -1
  160. package/languages/en-US.mjs +8 -1
  161. package/languages/es-MX.js +8 -1
  162. package/languages/es-MX.mjs +8 -1
  163. package/languages/fa-IR.js +8 -1
  164. package/languages/fa-IR.mjs +8 -1
  165. package/languages/fr-FR.js +8 -1
  166. package/languages/fr-FR.mjs +8 -1
  167. package/languages/hr-HR.js +8 -1
  168. package/languages/hr-HR.mjs +8 -1
  169. package/languages/index.js +168 -21
  170. package/languages/it-IT.js +8 -1
  171. package/languages/it-IT.mjs +8 -1
  172. package/languages/ja-JP.js +8 -1
  173. package/languages/ja-JP.mjs +8 -1
  174. package/languages/ko-KR.js +8 -1
  175. package/languages/ko-KR.mjs +8 -1
  176. package/languages/lv-LV.js +8 -1
  177. package/languages/lv-LV.mjs +8 -1
  178. package/languages/nb-NO.js +8 -1
  179. package/languages/nb-NO.mjs +8 -1
  180. package/languages/nl-NL.js +8 -1
  181. package/languages/nl-NL.mjs +8 -1
  182. package/languages/pl-PL.js +8 -1
  183. package/languages/pl-PL.mjs +8 -1
  184. package/languages/pt-BR.js +8 -1
  185. package/languages/pt-BR.mjs +8 -1
  186. package/languages/ru-RU.js +8 -1
  187. package/languages/ru-RU.mjs +8 -1
  188. package/languages/sr-SP.js +8 -1
  189. package/languages/sr-SP.mjs +8 -1
  190. package/languages/zh-CN.js +8 -1
  191. package/languages/zh-CN.mjs +8 -1
  192. package/languages/zh-TW.js +8 -1
  193. package/languages/zh-TW.mjs +8 -1
  194. package/package.json +25 -7
  195. package/plugins/autoRowSize/autoRowSize.js +8 -1
  196. package/plugins/autoRowSize/autoRowSize.mjs +8 -1
  197. package/plugins/base/base.js +36 -10
  198. package/plugins/base/base.mjs +36 -10
  199. package/plugins/columnSummary/endpoints.js +13 -3
  200. package/plugins/columnSummary/endpoints.mjs +13 -3
  201. package/plugins/customBorders/customBorders.d.ts +1 -0
  202. package/plugins/customBorders/customBorders.js +32 -2
  203. package/plugins/customBorders/customBorders.mjs +32 -2
  204. package/plugins/dialog/constants.js +7 -0
  205. package/plugins/dialog/constants.mjs +4 -0
  206. package/plugins/dialog/dialog.d.ts +22 -2
  207. package/plugins/dialog/dialog.js +197 -81
  208. package/plugins/dialog/dialog.mjs +196 -81
  209. package/plugins/dialog/templates/base.js +60 -0
  210. package/plugins/dialog/templates/base.mjs +56 -0
  211. package/plugins/dialog/templates/confirm.js +106 -0
  212. package/plugins/dialog/templates/confirm.mjs +102 -0
  213. package/plugins/dialog/templates/index.js +6 -0
  214. package/plugins/dialog/templates/index.mjs +4 -0
  215. package/plugins/dialog/ui.js +125 -41
  216. package/plugins/dialog/ui.mjs +119 -35
  217. package/plugins/emptyDataState/emptyDataState.d.ts +24 -0
  218. package/plugins/emptyDataState/emptyDataState.js +526 -0
  219. package/plugins/emptyDataState/emptyDataState.mjs +521 -0
  220. package/plugins/emptyDataState/index.d.ts +1 -0
  221. package/plugins/emptyDataState/index.js +7 -0
  222. package/plugins/emptyDataState/index.mjs +1 -0
  223. package/plugins/emptyDataState/ui.js +282 -0
  224. package/plugins/emptyDataState/ui.mjs +278 -0
  225. package/plugins/filters/component/value.js +16 -1
  226. package/plugins/filters/component/value.mjs +16 -1
  227. package/plugins/filters/filters.d.ts +5 -1
  228. package/plugins/filters/filters.js +22 -1
  229. package/plugins/filters/filters.mjs +22 -1
  230. package/plugins/filters/ui/multipleSelect.js +90 -79
  231. package/plugins/filters/ui/multipleSelect.mjs +90 -79
  232. package/plugins/index.d.ts +3 -0
  233. package/plugins/index.js +3 -0
  234. package/plugins/index.mjs +3 -1
  235. package/plugins/mergeCells/utils.js +1 -5
  236. package/plugins/mergeCells/utils.mjs +1 -5
  237. package/plugins/pagination/pagination.js +37 -175
  238. package/plugins/pagination/pagination.mjs +37 -175
  239. package/plugins/pagination/strategies/autoPageSize.js +2 -2
  240. package/plugins/pagination/strategies/autoPageSize.mjs +2 -2
  241. package/plugins/pagination/ui.js +6 -10
  242. package/plugins/pagination/ui.mjs +7 -11
  243. package/plugins/stretchColumns/calculator.js +3 -1
  244. package/plugins/stretchColumns/calculator.mjs +3 -1
  245. package/plugins/undoRedo/undoRedo.js +16 -6
  246. package/plugins/undoRedo/undoRedo.mjs +16 -5
  247. package/renderers/checkboxRenderer/checkboxRenderer.js +12 -15
  248. package/renderers/checkboxRenderer/checkboxRenderer.mjs +12 -15
  249. package/selection/selection.js +1 -1
  250. package/selection/selection.mjs +1 -1
  251. package/settings.d.ts +3 -0
  252. package/shortcutContexts/commands/index.js +2 -1
  253. package/shortcutContexts/commands/index.mjs +2 -1
  254. package/shortcutContexts/commands/tabNavigation.js +51 -0
  255. package/shortcutContexts/commands/tabNavigation.mjs +48 -0
  256. package/shortcutContexts/constants.js +16 -1
  257. package/shortcutContexts/constants.mjs +16 -1
  258. package/shortcutContexts/editor.js +2 -2
  259. package/shortcutContexts/editor.mjs +3 -3
  260. package/shortcutContexts/grid.js +19 -3
  261. package/shortcutContexts/grid.mjs +20 -4
  262. package/shortcuts/manager.d.ts +1 -0
  263. package/shortcuts/manager.js +17 -2
  264. package/shortcuts/manager.mjs +17 -2
  265. package/styles/handsontable.css +192 -35
  266. package/styles/handsontable.min.css +3 -3
  267. package/styles/ht-icons-horizon.css +233 -0
  268. package/styles/ht-icons-horizon.min.css +30 -0
  269. package/styles/ht-icons-main.css +233 -0
  270. package/styles/ht-icons-main.min.css +30 -0
  271. package/styles/ht-theme-classic-no-icons.css +399 -0
  272. package/styles/ht-theme-classic-no-icons.min.css +30 -0
  273. package/styles/ht-theme-classic.css +308 -556
  274. package/styles/ht-theme-classic.min.css +3 -3
  275. package/styles/ht-theme-horizon-no-icons.css +405 -0
  276. package/styles/ht-theme-horizon-no-icons.min.css +30 -0
  277. package/styles/ht-theme-horizon.css +312 -556
  278. package/styles/ht-theme-horizon.min.css +3 -3
  279. package/styles/ht-theme-main-no-icons.css +396 -0
  280. package/styles/ht-theme-main-no-icons.min.css +30 -0
  281. package/styles/ht-theme-main.css +303 -556
  282. package/styles/ht-theme-main.min.css +3 -3
  283. package/tableView.js +23 -5
  284. package/tableView.mjs +23 -5
  285. package/utils/dataStructures/uniqueMap.js +10 -0
  286. package/utils/dataStructures/uniqueMap.mjs +10 -0
  287. package/utils/ghostTable.js +0 -3
  288. package/utils/ghostTable.mjs +0 -3
  289. package/utils/stylesHandler.js +19 -4
  290. package/utils/stylesHandler.mjs +19 -4
  291. package/core/focusCatcher/index.js +0 -131
  292. package/core/focusCatcher/index.mjs +0 -127
  293. package/core/focusCatcher/utils.js +0 -31
  294. package/core/focusCatcher/utils.mjs +0 -27
  295. package/plugins/pagination/focusController.js +0 -27
  296. package/plugins/pagination/focusController.mjs +0 -23
@@ -0,0 +1,282 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.error.cause.js");
4
+ exports.__esModule = true;
5
+ require("core-js/modules/esnext.iterator.constructor.js");
6
+ require("core-js/modules/esnext.iterator.for-each.js");
7
+ require("core-js/modules/esnext.iterator.map.js");
8
+ var _templateLiteralTag = require("../../helpers/templateLiteralTag");
9
+ var _element = require("../../helpers/dom/element");
10
+ var _a11y = require("../../helpers/a11y");
11
+ var _string = require("../../helpers/string");
12
+ function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
13
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
14
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
15
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
16
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
17
+ const EMPTY_DATA_STATE_CLASS_NAME = 'ht-empty-data-state';
18
+ const MIN_HEIGHT = 150;
19
+ const TEMPLATE = `<div data-ref="emptyDataStateElement" class="${EMPTY_DATA_STATE_CLASS_NAME} handsontable">
20
+ <div class="${EMPTY_DATA_STATE_CLASS_NAME}__content-wrapper">
21
+ <div data-ref="emptyDataStateInner" class="${EMPTY_DATA_STATE_CLASS_NAME}__content-wrapper-inner"></div>
22
+ </div>
23
+ </div>`;
24
+ const templateContent = _ref => {
25
+ let {
26
+ title,
27
+ description,
28
+ buttons
29
+ } = _ref;
30
+ return `
31
+ <div class="${EMPTY_DATA_STATE_CLASS_NAME}__content">
32
+ ${title ? `<h2 class="${EMPTY_DATA_STATE_CLASS_NAME}__title">${(0, _string.stripTags)(title)}</h2>` : ''}
33
+ ${description ? `<p class="${EMPTY_DATA_STATE_CLASS_NAME}__description">${(0, _string.stripTags)(description)}</p>` : ''}
34
+ </div>
35
+ <div
36
+ data-ref="emptyDataStateButtons"
37
+ class="${EMPTY_DATA_STATE_CLASS_NAME}__buttons${(buttons === null || buttons === void 0 ? void 0 : buttons.length) > 0 ? ` ${EMPTY_DATA_STATE_CLASS_NAME}__buttons--has-buttons` : ''}"
38
+ >${(buttons === null || buttons === void 0 ? void 0 : buttons.length) > 0 ? buttons.map(button => `<button class="ht-button ht-button--${button.type}">${(0, _string.stripTags)(button.text)}</button>`).join('') : ''}</div>`;
39
+ };
40
+
41
+ /**
42
+ * EmptyDataStateUI is a UI component that renders and manages empty data state elements.
43
+ *
44
+ * @private
45
+ * @class EmptyDataStateUI
46
+ */
47
+ var _rootElement = /*#__PURE__*/new WeakMap();
48
+ var _rootDocument = /*#__PURE__*/new WeakMap();
49
+ var _refs = /*#__PURE__*/new WeakMap();
50
+ var _placeholderElement = /*#__PURE__*/new WeakMap();
51
+ class EmptyDataStateUI {
52
+ constructor(_ref2) {
53
+ let {
54
+ rootElement,
55
+ rootDocument
56
+ } = _ref2;
57
+ /**
58
+ * The root element where the emptyDataState UI will be installed.
59
+ *
60
+ * @type {HTMLElement}
61
+ */
62
+ _classPrivateFieldInitSpec(this, _rootElement, void 0);
63
+ /**
64
+ * The root document where the emptyDataState UI will be installed.
65
+ *
66
+ * @type {Document}
67
+ */
68
+ _classPrivateFieldInitSpec(this, _rootDocument, void 0);
69
+ /**
70
+ * The references to the UI elements.
71
+ *
72
+ * @type {object}
73
+ */
74
+ _classPrivateFieldInitSpec(this, _refs, void 0);
75
+ /**
76
+ * The placeholder element.
77
+ *
78
+ * @type {HTMLElement}
79
+ */
80
+ _classPrivateFieldInitSpec(this, _placeholderElement, void 0);
81
+ _classPrivateFieldSet(_rootElement, this, rootElement);
82
+ _classPrivateFieldSet(_rootDocument, this, rootDocument);
83
+ this.install();
84
+ }
85
+
86
+ /**
87
+ * Creates the emptyDataState UI elements and sets up the structure.
88
+ */
89
+ install() {
90
+ var _classPrivateFieldGet2;
91
+ if ((_classPrivateFieldGet2 = _classPrivateFieldGet(_refs, this)) !== null && _classPrivateFieldGet2 !== void 0 && _classPrivateFieldGet2.emptyDataStateElement) {
92
+ return;
93
+ }
94
+ const elements = (0, _templateLiteralTag.html)`${TEMPLATE}`;
95
+ _classPrivateFieldSet(_refs, this, elements.refs);
96
+ const {
97
+ emptyDataStateInner,
98
+ emptyDataStateElement
99
+ } = _classPrivateFieldGet(_refs, this);
100
+ (0, _element.setAttribute)(emptyDataStateInner, [(0, _a11y.A11Y_TABINDEX)(-1)]);
101
+ (0, _element.setAttribute)(emptyDataStateElement, [(0, _a11y.A11Y_TABINDEX)(-1)]);
102
+ _classPrivateFieldGet(_rootElement, this).after(elements.fragment);
103
+ }
104
+
105
+ /**
106
+ * Gets the emptyDataState element.
107
+ *
108
+ * @returns {HTMLElement} The empty data state element.
109
+ */
110
+ getElement() {
111
+ var _classPrivateFieldGet3;
112
+ return (_classPrivateFieldGet3 = _classPrivateFieldGet(_refs, this)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.emptyDataStateElement;
113
+ }
114
+
115
+ /**
116
+ * Gets the focusable elements of the emptyDataState element.
117
+ *
118
+ * @returns {HTMLElement[]} The focusable elements.
119
+ */
120
+ getFocusableElements() {
121
+ const {
122
+ emptyDataStateButtons,
123
+ emptyDataStateInner
124
+ } = _classPrivateFieldGet(_refs, this);
125
+ const emptyDataStateButtonsElements = Array.from(emptyDataStateButtons === null || emptyDataStateButtons === void 0 ? void 0 : emptyDataStateButtons.children);
126
+ if (emptyDataStateButtonsElements.length === 0) {
127
+ return [emptyDataStateInner];
128
+ }
129
+ return emptyDataStateButtonsElements;
130
+ }
131
+
132
+ /**
133
+ * Shows the emptyDataState element.
134
+ */
135
+ show() {
136
+ var _classPrivateFieldGet4;
137
+ if (!((_classPrivateFieldGet4 = _classPrivateFieldGet(_refs, this)) !== null && _classPrivateFieldGet4 !== void 0 && _classPrivateFieldGet4.emptyDataStateElement)) {
138
+ return;
139
+ }
140
+ _classPrivateFieldGet(_refs, this).emptyDataStateElement.style.display = 'block';
141
+ }
142
+
143
+ /**
144
+ * Hides the emptyDataState element.
145
+ */
146
+ hide() {
147
+ var _classPrivateFieldGet5, _classPrivateFieldGet6;
148
+ if (!((_classPrivateFieldGet5 = _classPrivateFieldGet(_refs, this)) !== null && _classPrivateFieldGet5 !== void 0 && _classPrivateFieldGet5.emptyDataStateElement)) {
149
+ return;
150
+ }
151
+ (_classPrivateFieldGet6 = _classPrivateFieldGet(_placeholderElement, this)) === null || _classPrivateFieldGet6 === void 0 || _classPrivateFieldGet6.remove();
152
+ _classPrivateFieldSet(_placeholderElement, this, null);
153
+ _classPrivateFieldGet(_refs, this).emptyDataStateElement.style.display = 'none';
154
+ }
155
+
156
+ /**
157
+ * Updates the content of the emptyDataState element.
158
+ *
159
+ * @param {string | object} message - The message to update.
160
+ */
161
+ updateContent(message) {
162
+ var _content$buttons;
163
+ const {
164
+ emptyDataStateInner
165
+ } = _classPrivateFieldGet(_refs, this);
166
+ let content = '';
167
+ if (typeof message === 'string') {
168
+ content = {
169
+ title: message
170
+ };
171
+ } else {
172
+ content = {
173
+ title: message === null || message === void 0 ? void 0 : message.title,
174
+ description: message === null || message === void 0 ? void 0 : message.description,
175
+ buttons: message === null || message === void 0 ? void 0 : message.buttons
176
+ };
177
+ }
178
+ const template = (0, _templateLiteralTag.html)`${templateContent(content)}`;
179
+ _classPrivateFieldSet(_refs, this, {
180
+ ..._classPrivateFieldGet(_refs, this),
181
+ ...template.refs
182
+ });
183
+ emptyDataStateInner.innerHTML = '';
184
+ emptyDataStateInner.appendChild(template.fragment);
185
+ if (((_content$buttons = content.buttons) === null || _content$buttons === void 0 ? void 0 : _content$buttons.length) > 0) {
186
+ Array.from(_classPrivateFieldGet(_refs, this).emptyDataStateButtons.children).forEach((button, index) => {
187
+ button.addEventListener('click', content.buttons[index].callback);
188
+ });
189
+ }
190
+ }
191
+
192
+ /**
193
+ * Updates the class names of the emptyDataState element.
194
+ *
195
+ * @param {View} view - The view instance.
196
+ */
197
+ updateClassNames(view) {
198
+ const {
199
+ emptyDataStateElement
200
+ } = _classPrivateFieldGet(_refs, this);
201
+ if (view.countRenderableColumns() > 0 && view.getColumnHeadersCount() > 0) {
202
+ (0, _element.addClass)(emptyDataStateElement, `${EMPTY_DATA_STATE_CLASS_NAME}--disable-top-border`);
203
+ } else {
204
+ (0, _element.removeClass)(emptyDataStateElement, `${EMPTY_DATA_STATE_CLASS_NAME}--disable-top-border`);
205
+ }
206
+ if (view.countRenderableRows() > 0 && view.getRowHeadersCount() > 0) {
207
+ (0, _element.addClass)(emptyDataStateElement, `${EMPTY_DATA_STATE_CLASS_NAME}--disable-inline-border`);
208
+ } else {
209
+ (0, _element.removeClass)(emptyDataStateElement, `${EMPTY_DATA_STATE_CLASS_NAME}--disable-inline-border`);
210
+ }
211
+ if (view.hasHorizontalScroll() && !view.isHorizontallyScrollableByWindow()) {
212
+ (0, _element.addClass)(emptyDataStateElement, `${EMPTY_DATA_STATE_CLASS_NAME}--disable-bottom-border`);
213
+ } else {
214
+ (0, _element.removeClass)(emptyDataStateElement, `${EMPTY_DATA_STATE_CLASS_NAME}--disable-bottom-border`);
215
+ }
216
+ }
217
+
218
+ /**
219
+ * Updates the size of the emptyDataState element.
220
+ *
221
+ * @param {View} view - The view instance.
222
+ */
223
+ updateSize(view) {
224
+ const {
225
+ emptyDataStateElement
226
+ } = _classPrivateFieldGet(_refs, this);
227
+ const scrollbarSize = view.hasHorizontalScroll() ? (0, _element.getScrollbarWidth)(view.hot.rootDocument) : 0;
228
+ const rows = view.countRenderableRows();
229
+ const cols = view.countRenderableColumns();
230
+ emptyDataStateElement.style.top = cols > 0 ? `${view.getColumnHeaderHeight()}px` : '0px';
231
+ emptyDataStateElement.style.insetInlineStart = rows > 0 ? `${view.getRowHeaderWidth()}px` : '0px';
232
+ if (rows === 0) {
233
+ if (!_classPrivateFieldGet(_placeholderElement, this)) {
234
+ _classPrivateFieldSet(_placeholderElement, this, _classPrivateFieldGet(_rootDocument, this).createElement('div'));
235
+ _classPrivateFieldGet(_placeholderElement, this).classList.add(`${EMPTY_DATA_STATE_CLASS_NAME}-placeholder`);
236
+ view._wt.wtTable.holder.appendChild(_classPrivateFieldGet(_placeholderElement, this));
237
+ }
238
+ _classPrivateFieldGet(_placeholderElement, this).style.width = '100%';
239
+ _classPrivateFieldGet(_placeholderElement, this).style.height = `${MIN_HEIGHT}px`;
240
+ } else {
241
+ var _classPrivateFieldGet7;
242
+ (_classPrivateFieldGet7 = _classPrivateFieldGet(_placeholderElement, this)) === null || _classPrivateFieldGet7 === void 0 || _classPrivateFieldGet7.remove();
243
+ _classPrivateFieldSet(_placeholderElement, this, null);
244
+ }
245
+ let width = view.getWorkspaceWidth();
246
+ let height = view.getTableHeight();
247
+ if (view.isHorizontallyScrollableByWindow()) {
248
+ if (cols > 0) {
249
+ width = view.getTotalTableWidth();
250
+ } else if (rows > 0) {
251
+ width = view.getViewportWidth();
252
+ }
253
+ } else if (rows > 0) {
254
+ width = view.getViewportWidth();
255
+ } else if (view.getTableWidth() - view.getRowHeaderWidth() < view.getViewportWidth() && cols > 0) {
256
+ width = view.getTableWidth();
257
+ }
258
+ if (view.isVerticallyScrollableByWindow() || view.hasVerticalScroll()) {
259
+ if (cols > 0) {
260
+ height = view.hot.getTableHeight() - view.getColumnHeaderHeight();
261
+ } else {
262
+ height = view.hot.getTableHeight();
263
+ }
264
+ } else if (rows === 0) {
265
+ height = view.getViewportHeight() - scrollbarSize;
266
+ }
267
+ emptyDataStateElement.style.width = `${width}px`;
268
+ emptyDataStateElement.style.height = `${height}px`;
269
+ }
270
+
271
+ /**
272
+ * Removes the emptyDataState UI elements from the DOM and clears the refs.
273
+ */
274
+ destroy() {
275
+ var _classPrivateFieldGet8, _classPrivateFieldGet9;
276
+ (_classPrivateFieldGet8 = _classPrivateFieldGet(_refs, this)) === null || _classPrivateFieldGet8 === void 0 || (_classPrivateFieldGet8 = _classPrivateFieldGet8.emptyDataStateElement) === null || _classPrivateFieldGet8 === void 0 || _classPrivateFieldGet8.remove();
277
+ (_classPrivateFieldGet9 = _classPrivateFieldGet(_placeholderElement, this)) === null || _classPrivateFieldGet9 === void 0 || _classPrivateFieldGet9.remove();
278
+ _classPrivateFieldSet(_placeholderElement, this, null);
279
+ _classPrivateFieldSet(_refs, this, null);
280
+ }
281
+ }
282
+ exports.EmptyDataStateUI = EmptyDataStateUI;
@@ -0,0 +1,278 @@
1
+ function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
2
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
3
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
4
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
5
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
6
+ import "core-js/modules/es.error.cause.js";
7
+ import "core-js/modules/esnext.iterator.constructor.js";
8
+ import "core-js/modules/esnext.iterator.for-each.js";
9
+ import "core-js/modules/esnext.iterator.map.js";
10
+ import { html } from "../../helpers/templateLiteralTag.mjs";
11
+ import { addClass, removeClass, getScrollbarWidth, setAttribute } from "../../helpers/dom/element.mjs";
12
+ import { A11Y_TABINDEX } from "../../helpers/a11y.mjs";
13
+ import { stripTags } from "../../helpers/string.mjs";
14
+ const EMPTY_DATA_STATE_CLASS_NAME = 'ht-empty-data-state';
15
+ const MIN_HEIGHT = 150;
16
+ const TEMPLATE = `<div data-ref="emptyDataStateElement" class="${EMPTY_DATA_STATE_CLASS_NAME} handsontable">
17
+ <div class="${EMPTY_DATA_STATE_CLASS_NAME}__content-wrapper">
18
+ <div data-ref="emptyDataStateInner" class="${EMPTY_DATA_STATE_CLASS_NAME}__content-wrapper-inner"></div>
19
+ </div>
20
+ </div>`;
21
+ const templateContent = _ref => {
22
+ let {
23
+ title,
24
+ description,
25
+ buttons
26
+ } = _ref;
27
+ return `
28
+ <div class="${EMPTY_DATA_STATE_CLASS_NAME}__content">
29
+ ${title ? `<h2 class="${EMPTY_DATA_STATE_CLASS_NAME}__title">${stripTags(title)}</h2>` : ''}
30
+ ${description ? `<p class="${EMPTY_DATA_STATE_CLASS_NAME}__description">${stripTags(description)}</p>` : ''}
31
+ </div>
32
+ <div
33
+ data-ref="emptyDataStateButtons"
34
+ class="${EMPTY_DATA_STATE_CLASS_NAME}__buttons${(buttons === null || buttons === void 0 ? void 0 : buttons.length) > 0 ? ` ${EMPTY_DATA_STATE_CLASS_NAME}__buttons--has-buttons` : ''}"
35
+ >${(buttons === null || buttons === void 0 ? void 0 : buttons.length) > 0 ? buttons.map(button => `<button class="ht-button ht-button--${button.type}">${stripTags(button.text)}</button>`).join('') : ''}</div>`;
36
+ };
37
+
38
+ /**
39
+ * EmptyDataStateUI is a UI component that renders and manages empty data state elements.
40
+ *
41
+ * @private
42
+ * @class EmptyDataStateUI
43
+ */
44
+ var _rootElement = /*#__PURE__*/new WeakMap();
45
+ var _rootDocument = /*#__PURE__*/new WeakMap();
46
+ var _refs = /*#__PURE__*/new WeakMap();
47
+ var _placeholderElement = /*#__PURE__*/new WeakMap();
48
+ export class EmptyDataStateUI {
49
+ constructor(_ref2) {
50
+ let {
51
+ rootElement,
52
+ rootDocument
53
+ } = _ref2;
54
+ /**
55
+ * The root element where the emptyDataState UI will be installed.
56
+ *
57
+ * @type {HTMLElement}
58
+ */
59
+ _classPrivateFieldInitSpec(this, _rootElement, void 0);
60
+ /**
61
+ * The root document where the emptyDataState UI will be installed.
62
+ *
63
+ * @type {Document}
64
+ */
65
+ _classPrivateFieldInitSpec(this, _rootDocument, void 0);
66
+ /**
67
+ * The references to the UI elements.
68
+ *
69
+ * @type {object}
70
+ */
71
+ _classPrivateFieldInitSpec(this, _refs, void 0);
72
+ /**
73
+ * The placeholder element.
74
+ *
75
+ * @type {HTMLElement}
76
+ */
77
+ _classPrivateFieldInitSpec(this, _placeholderElement, void 0);
78
+ _classPrivateFieldSet(_rootElement, this, rootElement);
79
+ _classPrivateFieldSet(_rootDocument, this, rootDocument);
80
+ this.install();
81
+ }
82
+
83
+ /**
84
+ * Creates the emptyDataState UI elements and sets up the structure.
85
+ */
86
+ install() {
87
+ var _classPrivateFieldGet2;
88
+ if ((_classPrivateFieldGet2 = _classPrivateFieldGet(_refs, this)) !== null && _classPrivateFieldGet2 !== void 0 && _classPrivateFieldGet2.emptyDataStateElement) {
89
+ return;
90
+ }
91
+ const elements = html`${TEMPLATE}`;
92
+ _classPrivateFieldSet(_refs, this, elements.refs);
93
+ const {
94
+ emptyDataStateInner,
95
+ emptyDataStateElement
96
+ } = _classPrivateFieldGet(_refs, this);
97
+ setAttribute(emptyDataStateInner, [A11Y_TABINDEX(-1)]);
98
+ setAttribute(emptyDataStateElement, [A11Y_TABINDEX(-1)]);
99
+ _classPrivateFieldGet(_rootElement, this).after(elements.fragment);
100
+ }
101
+
102
+ /**
103
+ * Gets the emptyDataState element.
104
+ *
105
+ * @returns {HTMLElement} The empty data state element.
106
+ */
107
+ getElement() {
108
+ var _classPrivateFieldGet3;
109
+ return (_classPrivateFieldGet3 = _classPrivateFieldGet(_refs, this)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.emptyDataStateElement;
110
+ }
111
+
112
+ /**
113
+ * Gets the focusable elements of the emptyDataState element.
114
+ *
115
+ * @returns {HTMLElement[]} The focusable elements.
116
+ */
117
+ getFocusableElements() {
118
+ const {
119
+ emptyDataStateButtons,
120
+ emptyDataStateInner
121
+ } = _classPrivateFieldGet(_refs, this);
122
+ const emptyDataStateButtonsElements = Array.from(emptyDataStateButtons === null || emptyDataStateButtons === void 0 ? void 0 : emptyDataStateButtons.children);
123
+ if (emptyDataStateButtonsElements.length === 0) {
124
+ return [emptyDataStateInner];
125
+ }
126
+ return emptyDataStateButtonsElements;
127
+ }
128
+
129
+ /**
130
+ * Shows the emptyDataState element.
131
+ */
132
+ show() {
133
+ var _classPrivateFieldGet4;
134
+ if (!((_classPrivateFieldGet4 = _classPrivateFieldGet(_refs, this)) !== null && _classPrivateFieldGet4 !== void 0 && _classPrivateFieldGet4.emptyDataStateElement)) {
135
+ return;
136
+ }
137
+ _classPrivateFieldGet(_refs, this).emptyDataStateElement.style.display = 'block';
138
+ }
139
+
140
+ /**
141
+ * Hides the emptyDataState element.
142
+ */
143
+ hide() {
144
+ var _classPrivateFieldGet5, _classPrivateFieldGet6;
145
+ if (!((_classPrivateFieldGet5 = _classPrivateFieldGet(_refs, this)) !== null && _classPrivateFieldGet5 !== void 0 && _classPrivateFieldGet5.emptyDataStateElement)) {
146
+ return;
147
+ }
148
+ (_classPrivateFieldGet6 = _classPrivateFieldGet(_placeholderElement, this)) === null || _classPrivateFieldGet6 === void 0 || _classPrivateFieldGet6.remove();
149
+ _classPrivateFieldSet(_placeholderElement, this, null);
150
+ _classPrivateFieldGet(_refs, this).emptyDataStateElement.style.display = 'none';
151
+ }
152
+
153
+ /**
154
+ * Updates the content of the emptyDataState element.
155
+ *
156
+ * @param {string | object} message - The message to update.
157
+ */
158
+ updateContent(message) {
159
+ var _content$buttons;
160
+ const {
161
+ emptyDataStateInner
162
+ } = _classPrivateFieldGet(_refs, this);
163
+ let content = '';
164
+ if (typeof message === 'string') {
165
+ content = {
166
+ title: message
167
+ };
168
+ } else {
169
+ content = {
170
+ title: message === null || message === void 0 ? void 0 : message.title,
171
+ description: message === null || message === void 0 ? void 0 : message.description,
172
+ buttons: message === null || message === void 0 ? void 0 : message.buttons
173
+ };
174
+ }
175
+ const template = html`${templateContent(content)}`;
176
+ _classPrivateFieldSet(_refs, this, {
177
+ ..._classPrivateFieldGet(_refs, this),
178
+ ...template.refs
179
+ });
180
+ emptyDataStateInner.innerHTML = '';
181
+ emptyDataStateInner.appendChild(template.fragment);
182
+ if (((_content$buttons = content.buttons) === null || _content$buttons === void 0 ? void 0 : _content$buttons.length) > 0) {
183
+ Array.from(_classPrivateFieldGet(_refs, this).emptyDataStateButtons.children).forEach((button, index) => {
184
+ button.addEventListener('click', content.buttons[index].callback);
185
+ });
186
+ }
187
+ }
188
+
189
+ /**
190
+ * Updates the class names of the emptyDataState element.
191
+ *
192
+ * @param {View} view - The view instance.
193
+ */
194
+ updateClassNames(view) {
195
+ const {
196
+ emptyDataStateElement
197
+ } = _classPrivateFieldGet(_refs, this);
198
+ if (view.countRenderableColumns() > 0 && view.getColumnHeadersCount() > 0) {
199
+ addClass(emptyDataStateElement, `${EMPTY_DATA_STATE_CLASS_NAME}--disable-top-border`);
200
+ } else {
201
+ removeClass(emptyDataStateElement, `${EMPTY_DATA_STATE_CLASS_NAME}--disable-top-border`);
202
+ }
203
+ if (view.countRenderableRows() > 0 && view.getRowHeadersCount() > 0) {
204
+ addClass(emptyDataStateElement, `${EMPTY_DATA_STATE_CLASS_NAME}--disable-inline-border`);
205
+ } else {
206
+ removeClass(emptyDataStateElement, `${EMPTY_DATA_STATE_CLASS_NAME}--disable-inline-border`);
207
+ }
208
+ if (view.hasHorizontalScroll() && !view.isHorizontallyScrollableByWindow()) {
209
+ addClass(emptyDataStateElement, `${EMPTY_DATA_STATE_CLASS_NAME}--disable-bottom-border`);
210
+ } else {
211
+ removeClass(emptyDataStateElement, `${EMPTY_DATA_STATE_CLASS_NAME}--disable-bottom-border`);
212
+ }
213
+ }
214
+
215
+ /**
216
+ * Updates the size of the emptyDataState element.
217
+ *
218
+ * @param {View} view - The view instance.
219
+ */
220
+ updateSize(view) {
221
+ const {
222
+ emptyDataStateElement
223
+ } = _classPrivateFieldGet(_refs, this);
224
+ const scrollbarSize = view.hasHorizontalScroll() ? getScrollbarWidth(view.hot.rootDocument) : 0;
225
+ const rows = view.countRenderableRows();
226
+ const cols = view.countRenderableColumns();
227
+ emptyDataStateElement.style.top = cols > 0 ? `${view.getColumnHeaderHeight()}px` : '0px';
228
+ emptyDataStateElement.style.insetInlineStart = rows > 0 ? `${view.getRowHeaderWidth()}px` : '0px';
229
+ if (rows === 0) {
230
+ if (!_classPrivateFieldGet(_placeholderElement, this)) {
231
+ _classPrivateFieldSet(_placeholderElement, this, _classPrivateFieldGet(_rootDocument, this).createElement('div'));
232
+ _classPrivateFieldGet(_placeholderElement, this).classList.add(`${EMPTY_DATA_STATE_CLASS_NAME}-placeholder`);
233
+ view._wt.wtTable.holder.appendChild(_classPrivateFieldGet(_placeholderElement, this));
234
+ }
235
+ _classPrivateFieldGet(_placeholderElement, this).style.width = '100%';
236
+ _classPrivateFieldGet(_placeholderElement, this).style.height = `${MIN_HEIGHT}px`;
237
+ } else {
238
+ var _classPrivateFieldGet7;
239
+ (_classPrivateFieldGet7 = _classPrivateFieldGet(_placeholderElement, this)) === null || _classPrivateFieldGet7 === void 0 || _classPrivateFieldGet7.remove();
240
+ _classPrivateFieldSet(_placeholderElement, this, null);
241
+ }
242
+ let width = view.getWorkspaceWidth();
243
+ let height = view.getTableHeight();
244
+ if (view.isHorizontallyScrollableByWindow()) {
245
+ if (cols > 0) {
246
+ width = view.getTotalTableWidth();
247
+ } else if (rows > 0) {
248
+ width = view.getViewportWidth();
249
+ }
250
+ } else if (rows > 0) {
251
+ width = view.getViewportWidth();
252
+ } else if (view.getTableWidth() - view.getRowHeaderWidth() < view.getViewportWidth() && cols > 0) {
253
+ width = view.getTableWidth();
254
+ }
255
+ if (view.isVerticallyScrollableByWindow() || view.hasVerticalScroll()) {
256
+ if (cols > 0) {
257
+ height = view.hot.getTableHeight() - view.getColumnHeaderHeight();
258
+ } else {
259
+ height = view.hot.getTableHeight();
260
+ }
261
+ } else if (rows === 0) {
262
+ height = view.getViewportHeight() - scrollbarSize;
263
+ }
264
+ emptyDataStateElement.style.width = `${width}px`;
265
+ emptyDataStateElement.style.height = `${height}px`;
266
+ }
267
+
268
+ /**
269
+ * Removes the emptyDataState UI elements from the DOM and clears the refs.
270
+ */
271
+ destroy() {
272
+ var _classPrivateFieldGet8, _classPrivateFieldGet9;
273
+ (_classPrivateFieldGet8 = _classPrivateFieldGet(_refs, this)) === null || _classPrivateFieldGet8 === void 0 || (_classPrivateFieldGet8 = _classPrivateFieldGet8.emptyDataStateElement) === null || _classPrivateFieldGet8 === void 0 || _classPrivateFieldGet8.remove();
274
+ (_classPrivateFieldGet9 = _classPrivateFieldGet(_placeholderElement, this)) === null || _classPrivateFieldGet9 === void 0 || _classPrivateFieldGet9.remove();
275
+ _classPrivateFieldSet(_placeholderElement, this, null);
276
+ _classPrivateFieldSet(_refs, this, null);
277
+ }
278
+ }
@@ -47,8 +47,17 @@ class ValueComponent extends _base.BaseComponent {
47
47
  * @type {string}
48
48
  */
49
49
  _defineProperty(this, "name", '');
50
+ /**
51
+ * Whether to uncheck filtered queries.
52
+ *
53
+ * @type {string}
54
+ */
55
+ _defineProperty(this, "searchMode", void 0);
50
56
  this.name = options.name;
51
- this.elements.push(new _multipleSelect.MultipleSelectUI(this.hot));
57
+ this.searchMode = options.searchMode;
58
+ this.elements.push(new _multipleSelect.MultipleSelectUI(this.hot, {
59
+ searchMode: this.searchMode
60
+ }));
52
61
  this.registerHooks();
53
62
  }
54
63
 
@@ -235,6 +244,12 @@ function _onInputKeyDown(event) {
235
244
  this.runLocalHooks('cancel');
236
245
  (0, _event.stopImmediatePropagation)(event);
237
246
  }
247
+ if ((0, _unicode.isKey)(event.keyCode, 'ENTER')) {
248
+ if (this.searchMode === 'apply') {
249
+ this.runLocalHooks('accept');
250
+ }
251
+ (0, _event.stopImmediatePropagation)(event);
252
+ }
238
253
  }
239
254
  /**
240
255
  * Trigger the `modifyFiltersMultiSelectValue` hook.
@@ -43,8 +43,17 @@ export class ValueComponent extends BaseComponent {
43
43
  * @type {string}
44
44
  */
45
45
  _defineProperty(this, "name", '');
46
+ /**
47
+ * Whether to uncheck filtered queries.
48
+ *
49
+ * @type {string}
50
+ */
51
+ _defineProperty(this, "searchMode", void 0);
46
52
  this.name = options.name;
47
- this.elements.push(new MultipleSelectUI(this.hot));
53
+ this.searchMode = options.searchMode;
54
+ this.elements.push(new MultipleSelectUI(this.hot, {
55
+ searchMode: this.searchMode
56
+ }));
48
57
  this.registerHooks();
49
58
  }
50
59
 
@@ -230,6 +239,12 @@ function _onInputKeyDown(event) {
230
239
  this.runLocalHooks('cancel');
231
240
  stopImmediatePropagation(event);
232
241
  }
242
+ if (isKey(event.keyCode, 'ENTER')) {
243
+ if (this.searchMode === 'apply') {
244
+ this.runLocalHooks('accept');
245
+ }
246
+ stopImmediatePropagation(event);
247
+ }
233
248
  }
234
249
  /**
235
250
  * Trigger the `modifyFiltersMultiSelectValue` hook.
@@ -36,7 +36,11 @@ export interface CellLikeData {
36
36
  value: string;
37
37
  }
38
38
 
39
- export type Settings = boolean;
39
+ export interface FiltersConfig {
40
+ searchMode: string;
41
+ }
42
+
43
+ export type Settings = boolean | FiltersConfig;
40
44
 
41
45
  export declare class Filters extends BasePlugin {
42
46
  constructor(hotInstance: Core);
@@ -105,6 +105,16 @@ class Filters extends _base.BasePlugin {
105
105
  static get PLUGIN_PRIORITY() {
106
106
  return PLUGIN_PRIORITY;
107
107
  }
108
+ static get DEFAULT_SETTINGS() {
109
+ return {
110
+ searchMode: 'show'
111
+ };
112
+ }
113
+ static get SETTINGS_VALIDATORS() {
114
+ return {
115
+ searchMode: value => typeof value === 'string' && ['show', 'apply'].includes(value)
116
+ };
117
+ }
108
118
  static get PLUGIN_DEPS() {
109
119
  return ['plugin:DropdownMenu', 'plugin:HiddenRows', 'cell-type:checkbox'];
110
120
  }
@@ -241,9 +251,11 @@ class Filters extends _base.BasePlugin {
241
251
  this.components.set('filter_by_condition2', addConfirmationHooks(conditionComponent));
242
252
  }
243
253
  if (!this.components.get('filter_by_value')) {
254
+ const searchMode = this.getSetting('searchMode');
244
255
  this.components.set('filter_by_value', addConfirmationHooks(new _value.ValueComponent(this.hot, {
245
256
  id: 'filter_by_value',
246
- name: filterValueLabel
257
+ name: filterValueLabel,
258
+ searchMode
247
259
  })));
248
260
  }
249
261
  if (!this.components.get('filter_action_bar')) {
@@ -315,6 +327,15 @@ class Filters extends _base.BasePlugin {
315
327
  super.enablePlugin();
316
328
  }
317
329
 
330
+ /**
331
+ * Update plugin state after Handsontable settings update.
332
+ */
333
+ updatePlugin() {
334
+ this.disablePlugin();
335
+ this.enablePlugin();
336
+ super.updatePlugin();
337
+ }
338
+
318
339
  /**
319
340
  * Disables the plugin functionality for this Handsontable instance.
320
341
  */