@syncfusion/ej2-dropdowns 29.1.40 → 29.2.4

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 (42) hide show
  1. package/dist/ej2-dropdowns.min.js +2 -2
  2. package/dist/ej2-dropdowns.umd.min.js +2 -2
  3. package/dist/ej2-dropdowns.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-dropdowns.es2015.js +229 -96
  5. package/dist/es6/ej2-dropdowns.es2015.js.map +1 -1
  6. package/dist/es6/ej2-dropdowns.es5.js +240 -105
  7. package/dist/es6/ej2-dropdowns.es5.js.map +1 -1
  8. package/dist/global/ej2-dropdowns.min.js +2 -2
  9. package/dist/global/ej2-dropdowns.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/package.json +12 -12
  12. package/src/auto-complete/auto-complete.d.ts +1 -0
  13. package/src/auto-complete/auto-complete.js +9 -1
  14. package/src/combo-box/combo-box-model.d.ts +0 -8
  15. package/src/combo-box/combo-box.d.ts +0 -7
  16. package/src/combo-box/combo-box.js +0 -3
  17. package/src/common/virtual-scroll.js +8 -3
  18. package/src/drop-down-base/drop-down-base.d.ts +5 -1
  19. package/src/drop-down-base/drop-down-base.js +54 -10
  20. package/src/drop-down-list/drop-down-list-model.d.ts +7 -0
  21. package/src/drop-down-list/drop-down-list.d.ts +7 -0
  22. package/src/drop-down-list/drop-down-list.js +52 -28
  23. package/src/drop-down-tree/drop-down-tree.d.ts +1 -0
  24. package/src/drop-down-tree/drop-down-tree.js +11 -0
  25. package/src/mention/mention-model.d.ts +7 -0
  26. package/src/mention/mention.d.ts +8 -0
  27. package/src/mention/mention.js +29 -16
  28. package/src/multi-select/multi-select-model.d.ts +7 -0
  29. package/src/multi-select/multi-select.d.ts +9 -0
  30. package/src/multi-select/multi-select.js +77 -44
  31. package/styles/bds-lite.css +1 -1
  32. package/styles/bds.css +1 -1
  33. package/styles/multi-select/_bds-definition.scss +1 -0
  34. package/styles/multi-select/_layout.scss +6 -1
  35. package/styles/multi-select/_tailwind-definition.scss +1 -0
  36. package/styles/multi-select/bds.css +1 -1
  37. package/styles/multi-select/tailwind-dark.css +1 -1
  38. package/styles/multi-select/tailwind.css +1 -1
  39. package/styles/tailwind-dark-lite.css +1 -1
  40. package/styles/tailwind-dark.css +1 -1
  41. package/styles/tailwind-lite.css +1 -1
  42. package/styles/tailwind.css +1 -1
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 29.1.40
3
+ * version : 29.2.4
4
4
  * Copyright Syncfusion Inc. 2001 - 2024. All rights reserved.
5
5
  * Use of this code is subject to the terms of our license.
6
6
  * A copy of the current license can be obtained at any time by e-mailing
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_from": "@syncfusion/ej2-dropdowns@*",
3
- "_id": "@syncfusion/ej2-dropdowns@29.1.38",
3
+ "_id": "@syncfusion/ej2-dropdowns@29.1.41",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-gpwV4cYn4VY9b7JRqcRU0RSqHNaFKKf0+NpBSHbvOwtISLqIGyehQR7atEDT+1g0z0mdGZ7+l2WuaqyvuLNvDA==",
5
+ "_integrity": "sha512-MguJkedxJ1fsjo2kpSIDWlIMg4AM/9Sivaogd+NwxyxjKdkn5jg5325cmvC/cO1A+ZenI0w5fwOotB1ANtPDiA==",
6
6
  "_location": "/@syncfusion/ej2-dropdowns",
7
7
  "_phantomChildren": {},
8
8
  "_requested": {
@@ -36,8 +36,8 @@
36
36
  "/@syncfusion/ej2-spreadsheet",
37
37
  "/@syncfusion/ej2-vue-dropdowns"
38
38
  ],
39
- "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-29.1.38.tgz",
40
- "_shasum": "db56179d8beddcc910e61558b906e2ce82c31ce6",
39
+ "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-29.1.41.tgz",
40
+ "_shasum": "7a112cc2e360ea39ea9a4c681a580cdffa9ef3ff",
41
41
  "_spec": "@syncfusion/ej2-dropdowns@*",
42
42
  "_where": "/jenkins/workspace/elease-automation_release_29.1.1/packages/included",
43
43
  "author": {
@@ -45,13 +45,13 @@
45
45
  },
46
46
  "bundleDependencies": false,
47
47
  "dependencies": {
48
- "@syncfusion/ej2-base": "~29.1.36",
49
- "@syncfusion/ej2-data": "~29.1.33",
50
- "@syncfusion/ej2-inputs": "~29.1.39",
51
- "@syncfusion/ej2-lists": "~29.1.40",
52
- "@syncfusion/ej2-navigations": "~29.1.40",
53
- "@syncfusion/ej2-notifications": "~29.1.33",
54
- "@syncfusion/ej2-popups": "~29.1.37"
48
+ "@syncfusion/ej2-base": "~29.2.4",
49
+ "@syncfusion/ej2-data": "~29.2.4",
50
+ "@syncfusion/ej2-inputs": "~29.2.4",
51
+ "@syncfusion/ej2-lists": "~29.2.4",
52
+ "@syncfusion/ej2-navigations": "~29.2.4",
53
+ "@syncfusion/ej2-notifications": "~29.2.4",
54
+ "@syncfusion/ej2-popups": "~29.2.4"
55
55
  },
56
56
  "deprecated": false,
57
57
  "description": "Essential JS 2 DropDown Components",
@@ -76,7 +76,7 @@
76
76
  "module": "./index.js",
77
77
  "name": "@syncfusion/ej2-dropdowns",
78
78
  "typings": "index.d.ts",
79
- "version": "29.1.40",
79
+ "version": "29.2.4",
80
80
  "sideEffects": false,
81
81
  "homepage": "https://www.syncfusion.com/javascript-ui-controls"
82
82
  }
@@ -217,6 +217,7 @@ export declare class AutoComplete extends ComboBox {
217
217
  protected getNgDirective(): string;
218
218
  protected getQuery(query: Query): Query;
219
219
  protected searchLists(e: KeyboardEventArgs | MouseEvent): void;
220
+ protected performFiltering(e: KeyboardEventArgs | MouseEvent): void;
220
221
  /**
221
222
  * To filter the data from given data source by using query
222
223
  *
@@ -163,7 +163,6 @@ var AutoComplete = /** @class */ (function (_super) {
163
163
  return filterQuery;
164
164
  };
165
165
  AutoComplete.prototype.searchLists = function (e) {
166
- var _this_1 = this;
167
166
  this.isTyped = true;
168
167
  this.isDataFetched = this.isSelectCustom = false;
169
168
  this.firstItem = this.dataSource && this.dataSource.length > 0 ? this.dataSource[0] : null;
@@ -181,6 +180,15 @@ var AutoComplete = /** @class */ (function (_super) {
181
180
  this.isSelected = false;
182
181
  this.activeIndex = null;
183
182
  this.isRequesting = false;
183
+ if (this.queryString !== '' && this.debounceDelay > 0) {
184
+ this.debouncedFiltering(e, this.debounceDelay);
185
+ }
186
+ else {
187
+ this.performFiltering(e);
188
+ }
189
+ };
190
+ AutoComplete.prototype.performFiltering = function (e) {
191
+ var _this_1 = this;
184
192
  var eventArgs = {
185
193
  preventDefaultAction: false,
186
194
  text: this.filterInput.value,
@@ -86,14 +86,6 @@ export interface ComboBoxModel extends DropDownListModel{
86
86
  */
87
87
  showClearButton?: boolean;
88
88
 
89
- /**
90
- * Enable or disable rendering component in right to left direction.
91
- *
92
- * @default false
93
-
94
- */
95
- enableRtl?: boolean;
96
-
97
89
  /**
98
90
  * Triggers on set a
99
91
  * [`custom value`](../../combo-box/getting-started#custom-values) to this component.
@@ -96,13 +96,6 @@ export declare class ComboBox extends DropDownList {
96
96
  * @default true
97
97
  */
98
98
  showClearButton: boolean;
99
- /**
100
- * Enable or disable rendering component in right to left direction.
101
- *
102
- * @default false
103
-
104
- */
105
- enableRtl: boolean;
106
99
  /**
107
100
  * Triggers on set a
108
101
  * [`custom value`](../../combo-box/getting-started#custom-values) to this component.
@@ -1028,9 +1028,6 @@ var ComboBox = /** @class */ (function (_super) {
1028
1028
  __decorate([
1029
1029
  Property(true)
1030
1030
  ], ComboBox.prototype, "showClearButton", void 0);
1031
- __decorate([
1032
- Property(false)
1033
- ], ComboBox.prototype, "enableRtl", void 0);
1034
1031
  __decorate([
1035
1032
  Event()
1036
1033
  ], ComboBox.prototype, "customValueSpecifier", void 0);
@@ -286,6 +286,7 @@ var VirtualScroll = /** @class */ (function () {
286
286
  query = query.skip(this.parent.viewPortInfo.startIndex);
287
287
  }
288
288
  this.parent.setCurrentView = false;
289
+ this.parent.isPreventScrollAction = true;
289
290
  this.parent.resetList(this.parent.dataSource, this.parent.fields, query);
290
291
  isResetListCalled = true;
291
292
  break;
@@ -333,6 +334,7 @@ var VirtualScroll = /** @class */ (function () {
333
334
  }
334
335
  }
335
336
  this.parent.renderItems(currentData, this.parent.fields, this.component === 'multiselect' && this.parent.mode === 'CheckBox');
337
+ this.parent.updateSelectionList();
336
338
  }
337
339
  if (this.component === 'multiselect') {
338
340
  this.parent.updatevirtualizationList();
@@ -344,7 +346,8 @@ var VirtualScroll = /** @class */ (function () {
344
346
  (this.parent.totalItemCount <= this.parent.itemCount))) ? 0 : this.parent.skeletonCount;
345
347
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
346
348
  var virtualTrackElement = this.parent.list.getElementsByClassName('e-virtual-ddl')[0];
347
- if (virtualTrackElement) {
349
+ var preventAction = this.component !== 'multiselect' || (this.component === 'multiselect' && ((!(this.parent.dataSource instanceof DataManager))) || (this.parent.dataSource instanceof DataManager && !isResetListCalled));
350
+ if (virtualTrackElement && preventAction) {
348
351
  virtualTrackElement.style = this.parent.GetVirtualTrackHeight();
349
352
  }
350
353
  else if (!virtualTrackElement && this.parent.skeletonCount > 0 && this.parent.popupWrapper) {
@@ -353,11 +356,13 @@ var VirtualScroll = /** @class */ (function () {
353
356
  });
354
357
  this.parent.popupWrapper.querySelector('.e-dropdownbase').appendChild(virualElement);
355
358
  }
356
- this.parent.UpdateSkeleton();
359
+ if (this.component !== 'multiselect' || (this.component === 'multiselect' && ((!(this.parent.dataSource instanceof DataManager))) || (this.parent.dataSource instanceof DataManager && (!isResetListCalled || this.parent.viewPortInfo.startIndex === 0)))) {
360
+ this.parent.UpdateSkeleton();
361
+ }
357
362
  this.parent.liCollections = this.parent.list.querySelectorAll('.e-list-item');
358
363
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
359
364
  var virtualContentElement = this.parent.list.getElementsByClassName('e-virtual-ddl-content')[0];
360
- if (virtualContentElement) {
365
+ if (virtualContentElement && preventAction) {
361
366
  (virtualContentElement).style = this.parent.getTransformValues();
362
367
  }
363
368
  if (this.parent.fields.groupBy) {
@@ -296,6 +296,7 @@ export declare class DropDownBase extends Component<HTMLElement> implements INot
296
296
  protected isDynamicData: boolean;
297
297
  protected isPrimitiveData: boolean;
298
298
  protected isCustomFiltering: boolean;
299
+ protected debounceTimer: ReturnType<typeof setTimeout> | null;
299
300
  protected virtualListInfo: VirtualInfo;
300
301
  protected viewPortInfo: VirtualInfo;
301
302
  protected selectedValueInfo: VirtualInfo;
@@ -605,6 +606,8 @@ export declare class DropDownBase extends Component<HTMLElement> implements INot
605
606
  * @returns {Query} Returns the query to do the data query operation.
606
607
  */
607
608
  protected getQuery(query: Query): Query;
609
+ protected performFiltering(e: KeyboardEventArgs | MouseEvent): void;
610
+ protected debouncedFiltering(e: KeyboardEventArgs | MouseEvent, debounceDelay: number): void;
608
611
  protected updateVirtualizationProperties(itemCount: number, filtering: boolean, isCheckbox?: boolean): void;
609
612
  /**
610
613
  * To render the template content for group header element.
@@ -638,11 +641,12 @@ export declare class DropDownBase extends Component<HTMLElement> implements INot
638
641
  * @param {object[]} listData - Specifies the list of array of data.
639
642
  * @param {FieldSettingsModel} fields - Maps the columns of the data table and binds the data to the component.
640
643
  * @param {boolean} isCheckBoxUpdate - Specifies whether the list item is updated with checkbox.
644
+ * @param {boolean} isClearAll - Specifies whether the current action is clearAll.
641
645
  * @returns {HTMLElement} Return the list items.
642
646
  */
643
647
  protected renderItems(listData: {
644
648
  [key: string]: Object;
645
- }[], fields: FieldSettingsModel, isCheckBoxUpdate?: boolean): HTMLElement;
649
+ }[], fields: FieldSettingsModel, isCheckBoxUpdate?: boolean, isClearAll?: boolean): HTMLElement;
646
650
  private createVirtualContent;
647
651
  private updateListElements;
648
652
  protected templateListItem(dataSource: {
@@ -138,6 +138,7 @@ var DropDownBase = /** @class */ (function (_super) {
138
138
  _this.isDynamicData = false;
139
139
  _this.isPrimitiveData = false;
140
140
  _this.isCustomFiltering = false;
141
+ _this.debounceTimer = null;
141
142
  _this.virtualListInfo = {
142
143
  currentPageNumber: null,
143
144
  direction: null,
@@ -499,6 +500,29 @@ var DropDownBase = /** @class */ (function (_super) {
499
500
  isContainSkeleton.firstChild.insertBefore(liElement, isContainSkeleton.firstChild.children[0]);
500
501
  }
501
502
  }
503
+ if (this.getModuleName() === 'multiselect') {
504
+ for (var i = 0; i < totalSkeletonCount && this.totalItemCount !== this.viewPortInfo.endIndex; i++) {
505
+ var liElement = this.createElement('li', { className: dropDownBaseClasses.virtualList + " e-virtual-list-end", styles: 'overflow: inherit' });
506
+ if (this.isVirtualizationEnabled && this.itemTemplate) {
507
+ liElement.style.height = (this.listItemHeight - parseInt(window.getComputedStyle(this.getItems()[1]).marginBottom, 10)) + 'px';
508
+ }
509
+ var skeleton = new Skeleton({
510
+ shape: 'Text',
511
+ height: '10px',
512
+ width: '95%',
513
+ cssClass: 'e-skeleton-text-end'
514
+ });
515
+ skeleton.appendTo(this.createElement('div'));
516
+ liElement.appendChild(skeleton.element);
517
+ if (isContainSkeleton.firstChild) {
518
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
519
+ isContainSkeleton.firstChild.appendChild(liElement);
520
+ }
521
+ }
522
+ if (this.totalItemCount === this.viewPortInfo.endIndex) {
523
+ isContainSkeleton.querySelectorAll('.e-virtual-list-end').forEach(function (el) { return el.remove(); });
524
+ }
525
+ }
502
526
  }
503
527
  };
504
528
  DropDownBase.prototype.getLocaleName = function () {
@@ -779,7 +803,9 @@ var DropDownBase = /** @class */ (function (_super) {
779
803
  _this.preventPopupOpen = false;
780
804
  return;
781
805
  }
806
+ var isSetCurrentcall = false;
782
807
  if (_this.isVirtualizationEnabled && _this.setCurrentView) {
808
+ isSetCurrentcall = true;
783
809
  _this.notify('setCurrentViewDataAsync', {
784
810
  module: 'VirtualScroll'
785
811
  });
@@ -787,7 +813,8 @@ var DropDownBase = /** @class */ (function (_super) {
787
813
  if (_this.keyboardEvent != null) {
788
814
  _this.handleVirtualKeyboardActions(_this.keyboardEvent, _this.pageCount);
789
815
  }
790
- if (_this.isVirtualizationEnabled) {
816
+ var preventSkeleton = _this.getModuleName() !== 'multiselect' || (_this.getModuleName() === 'multiselect' && (!(_this.dataSource instanceof DataManager) || (_this.dataSource instanceof DataManager && !isSetCurrentcall)));
817
+ if (_this.isVirtualizationEnabled && preventSkeleton) {
791
818
  _this.getFilteringSkeletonCount();
792
819
  _this.updatePopupPosition();
793
820
  }
@@ -1032,10 +1059,12 @@ var DropDownBase = /** @class */ (function (_super) {
1032
1059
  DropDownBase.prototype.postRender = function (listElement, list, bindEvent) {
1033
1060
  if (this.fields.disabled) {
1034
1061
  var liCollections = listElement.querySelectorAll('.' + dropDownBaseClasses.li);
1062
+ var data = this.sortOrder !== 'None' ? !isNullOrUndefined(this.fields.groupBy) ?
1063
+ this.sortedData.filter(function (item) { return !('isHeader' in item) || item.isHeader !== true; }) : this.sortedData : this.listData;
1035
1064
  for (var index = 0; index < liCollections.length; index++) {
1036
- if (JSON.parse(JSON.stringify(this.listData[index]))[this.fields.disabled]) {
1065
+ if (JSON.parse(JSON.stringify(data[index]))[this.fields.disabled]) {
1037
1066
  if (!isNullOrUndefined(this.fields.groupBy)) {
1038
- var item = this.listData[index];
1067
+ var item = data[index];
1039
1068
  var value = getValue((this.fields.value ? this.fields.value : 'value'), item);
1040
1069
  var li = listElement.querySelector('li[data-value="' + value + '"]');
1041
1070
  if (!isNullOrUndefined(li)) {
@@ -1077,6 +1106,18 @@ var DropDownBase = /** @class */ (function (_super) {
1077
1106
  DropDownBase.prototype.getQuery = function (query) {
1078
1107
  return query ? query : this.query ? this.query : new Query();
1079
1108
  };
1109
+ DropDownBase.prototype.performFiltering = function (e) {
1110
+ // this is for component wise
1111
+ };
1112
+ DropDownBase.prototype.debouncedFiltering = function (e, debounceDelay) {
1113
+ var _this = this;
1114
+ if (this.debounceTimer !== null) {
1115
+ clearTimeout(this.debounceTimer);
1116
+ }
1117
+ this.debounceTimer = setTimeout(function () {
1118
+ _this.performFiltering(e);
1119
+ }, debounceDelay);
1120
+ };
1080
1121
  DropDownBase.prototype.updateVirtualizationProperties = function (itemCount, filtering, isCheckbox) {
1081
1122
  this.isVirtualizationEnabled = true;
1082
1123
  this.virtualizedItemsCount = itemCount;
@@ -1258,9 +1299,10 @@ var DropDownBase = /** @class */ (function (_super) {
1258
1299
  * @param {object[]} listData - Specifies the list of array of data.
1259
1300
  * @param {FieldSettingsModel} fields - Maps the columns of the data table and binds the data to the component.
1260
1301
  * @param {boolean} isCheckBoxUpdate - Specifies whether the list item is updated with checkbox.
1302
+ * @param {boolean} isClearAll - Specifies whether the current action is clearAll.
1261
1303
  * @returns {HTMLElement} Return the list items.
1262
1304
  */
1263
- DropDownBase.prototype.renderItems = function (listData, fields, isCheckBoxUpdate) {
1305
+ DropDownBase.prototype.renderItems = function (listData, fields, isCheckBoxUpdate, isClearAll) {
1264
1306
  var ulElement;
1265
1307
  if (this.itemTemplate && listData) {
1266
1308
  if (this.getModuleName() === 'multiselect' && this.virtualSelectAll) {
@@ -1314,7 +1356,7 @@ var DropDownBase = /** @class */ (function (_super) {
1314
1356
  }
1315
1357
  }
1316
1358
  else {
1317
- if (this.getModuleName() === 'multiselect' && this.virtualSelectAll) {
1359
+ if (this.getModuleName() === 'multiselect' && (this.virtualSelectAll && !isClearAll)) {
1318
1360
  this.virtualSelectAllData = listData;
1319
1361
  listData = listData.slice(this.virtualItemStartIndex, this.virtualItemEndIndex);
1320
1362
  }
@@ -1333,11 +1375,13 @@ var DropDownBase = /** @class */ (function (_super) {
1333
1375
  oldUlElement = this.list.querySelector('.e-list-parent' + '.e-reorder');
1334
1376
  }
1335
1377
  if ((listData.length >= this.virtualizedItemsCount && oldUlElement && virtualUlElement) || (oldUlElement && virtualUlElement && this.isAllowFiltering) || (oldUlElement && virtualUlElement && (this.getModuleName() === 'autocomplete' || this.getModuleName() === 'multiselect')) || isRemovedUlelement) {
1336
- if (!this.appendUncheckList) {
1337
- virtualUlElement.replaceChild(ulElement, oldUlElement);
1338
- }
1339
- else {
1340
- virtualUlElement.appendChild(ulElement);
1378
+ if (this.getModuleName() !== 'multiselect' || (this.getModuleName() === 'multiselect' && (!(this.dataSource instanceof DataManager) || (this.dataSource instanceof DataManager && !this.setCurrentView)))) {
1379
+ if (!this.appendUncheckList) {
1380
+ virtualUlElement.replaceChild(ulElement, oldUlElement);
1381
+ }
1382
+ else {
1383
+ virtualUlElement.appendChild(ulElement);
1384
+ }
1341
1385
  }
1342
1386
  this.updateListElements(listData);
1343
1387
  }
@@ -145,6 +145,13 @@ export interface DropDownListModel extends DropDownBaseModel{
145
145
  */
146
146
  allowFiltering?: boolean;
147
147
 
148
+ /**
149
+ * Specifies the delay time in milliseconds for filtering operations.
150
+ *
151
+ * @default 300
152
+ */
153
+ debounceDelay?: number;
154
+
148
155
  /**
149
156
  * Defines whether the popup opens in fullscreen mode on mobile devices when filtering is enabled. When set to false, the popup will display similarly on both mobile and desktop devices.
150
157
  *
@@ -248,6 +248,12 @@ export declare class DropDownList extends DropDownBase implements IInput {
248
248
  * @default false
249
249
  */
250
250
  allowFiltering: boolean;
251
+ /**
252
+ * Specifies the delay time in milliseconds for filtering operations.
253
+ *
254
+ * @default 300
255
+ */
256
+ debounceDelay: number;
251
257
  /**
252
258
  * Defines whether the popup opens in fullscreen mode on mobile devices when filtering is enabled. When set to false, the popup will display similarly on both mobile and desktop devices.
253
259
  *
@@ -549,6 +555,7 @@ export declare class DropDownList extends DropDownBase implements IInput {
549
555
  protected getSelectionPoints(): {
550
556
  [key: string]: number;
551
557
  };
558
+ protected performFiltering(e: KeyboardEventArgs | MouseEvent): void;
552
559
  protected searchLists(e: KeyboardEventArgs | MouseEvent): void;
553
560
  /**
554
561
  * To filter the data from given data source by using query
@@ -2064,8 +2064,31 @@ var DropDownList = /** @class */ (function (_super) {
2064
2064
  var input = this.inputElement;
2065
2065
  return { start: Math.abs(input.selectionStart), end: Math.abs(input.selectionEnd) };
2066
2066
  };
2067
- DropDownList.prototype.searchLists = function (e) {
2067
+ DropDownList.prototype.performFiltering = function (e) {
2068
2068
  var _this = this;
2069
+ this.checkAndResetCache();
2070
+ this.isRequesting = false;
2071
+ var eventArgs = {
2072
+ preventDefaultAction: false,
2073
+ text: this.filterInput.value,
2074
+ updateData: function (dataSource, query, fields) {
2075
+ if (eventArgs.cancel) {
2076
+ return;
2077
+ }
2078
+ _this.isCustomFilter = true;
2079
+ _this.customFilterQuery = query ? query.clone() : query;
2080
+ _this.filteringAction(dataSource, query, fields);
2081
+ },
2082
+ baseEventArgs: e,
2083
+ cancel: false
2084
+ };
2085
+ this.trigger('filtering', eventArgs, function (eventArgs) {
2086
+ if (!eventArgs.cancel && !_this.isCustomFilter && !eventArgs.preventDefaultAction) {
2087
+ _this.filteringAction(_this.dataSource, null, _this.fields);
2088
+ }
2089
+ });
2090
+ };
2091
+ DropDownList.prototype.searchLists = function (e) {
2069
2092
  this.isTyped = true;
2070
2093
  this.activeIndex = null;
2071
2094
  this.isListSearched = true;
@@ -2075,27 +2098,12 @@ var DropDownList = /** @class */ (function (_super) {
2075
2098
  }
2076
2099
  this.isDataFetched = false;
2077
2100
  if (this.isFiltering()) {
2078
- this.checkAndResetCache();
2079
- this.isRequesting = false;
2080
- var eventArgs_1 = {
2081
- preventDefaultAction: false,
2082
- text: this.filterInput.value,
2083
- updateData: function (dataSource, query, fields) {
2084
- if (eventArgs_1.cancel) {
2085
- return;
2086
- }
2087
- _this.isCustomFilter = true;
2088
- _this.customFilterQuery = query ? query.clone() : query;
2089
- _this.filteringAction(dataSource, query, fields);
2090
- },
2091
- baseEventArgs: e,
2092
- cancel: false
2093
- };
2094
- this.trigger('filtering', eventArgs_1, function (eventArgs) {
2095
- if (!eventArgs.cancel && !_this.isCustomFilter && !eventArgs.preventDefaultAction) {
2096
- _this.filteringAction(_this.dataSource, null, _this.fields);
2097
- }
2098
- });
2101
+ if (this.typedString !== '' && this.debounceDelay > 0) {
2102
+ this.debouncedFiltering(e, this.debounceDelay);
2103
+ }
2104
+ else {
2105
+ this.performFiltering(e);
2106
+ }
2099
2107
  }
2100
2108
  };
2101
2109
  /**
@@ -2365,7 +2373,19 @@ var DropDownList = /** @class */ (function (_super) {
2365
2373
  this.dataSource.executeQuery(this.getQuery(this.query).where(new Predicate(checkField_1, 'equal', value_1)))
2366
2374
  .then(function (e) {
2367
2375
  if (e.result.length > 0) {
2368
- _this.addItem(e.result, list.length);
2376
+ if (!_this.enableVirtualization) {
2377
+ _this.addItem(e.result, list.length);
2378
+ }
2379
+ else {
2380
+ _this.itemData = e.result[0];
2381
+ var dataItem = _this.getItemData();
2382
+ var value_2 = _this.allowObjectBinding ?
2383
+ _this.getDataByValue(dataItem.value) : dataItem.value;
2384
+ if ((_this.value === dataItem.value && _this.text !== dataItem.text) ||
2385
+ (_this.value !== dataItem.value && _this.text === dataItem.text)) {
2386
+ _this.setProperties({ 'text': dataItem.text ? dataItem.text.toString() : dataItem.text, 'value': value_2 });
2387
+ }
2388
+ }
2369
2389
  _this.updateValues();
2370
2390
  }
2371
2391
  else {
@@ -2492,10 +2512,10 @@ var DropDownList = /** @class */ (function (_super) {
2492
2512
  DropDownList.prototype.addNewItem = function (listData, newElement) {
2493
2513
  var _this = this;
2494
2514
  if (!isNullOrUndefined(this.itemData) && !isNullOrUndefined(newElement)) {
2495
- var value_2 = this.getItemData().value;
2515
+ var value_3 = this.getItemData().value;
2496
2516
  var isExist = listData.some(function (data) {
2497
- return (((typeof data === 'string' || typeof data === 'number' || typeof data === 'boolean') && data === value_2) ||
2498
- (getValue(_this.fields.value, data) === value_2));
2517
+ return (((typeof data === 'string' || typeof data === 'number' || typeof data === 'boolean') && data === value_3) ||
2518
+ (getValue(_this.fields.value, data) === value_3));
2499
2519
  });
2500
2520
  if (!isExist) {
2501
2521
  this.addItem(this.itemData);
@@ -3872,9 +3892,9 @@ var DropDownList = /** @class */ (function (_super) {
3872
3892
  var listLength_2 = this_1.getItems().length;
3873
3893
  var checkField = isNullOrUndefined(this_1.fields.value) ? this_1.fields.text : this_1.fields.value;
3874
3894
  this_1.typedString = '';
3875
- var value_3 = this_1.allowObjectBinding && !isNullOrUndefined(newProp.value) ?
3895
+ var value_4 = this_1.allowObjectBinding && !isNullOrUndefined(newProp.value) ?
3876
3896
  getValue(checkField, newProp.value) : newProp.value;
3877
- this_1.dataSource.executeQuery(this_1.getQuery(this_1.query).where(new Predicate(checkField, 'equal', value_3)))
3897
+ this_1.dataSource.executeQuery(this_1.getQuery(this_1.query).where(new Predicate(checkField, 'equal', value_4)))
3878
3898
  .then(function (e) {
3879
3899
  if (e.result.length > 0) {
3880
3900
  _this.addItem(e.result, listLength_2);
@@ -4331,6 +4351,7 @@ var DropDownList = /** @class */ (function (_super) {
4331
4351
  this.inputElement.classList.remove('e-input');
4332
4352
  Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);
4333
4353
  }
4354
+ this.element.removeAttribute('tabindex');
4334
4355
  this.element.style.display = 'block';
4335
4356
  if (this.inputWrapper.container && this.inputWrapper.container.parentElement) {
4336
4357
  if (this.inputWrapper.container.parentElement.tagName === this.getNgDirective()) {
@@ -4450,6 +4471,9 @@ var DropDownList = /** @class */ (function (_super) {
4450
4471
  __decorate([
4451
4472
  Property(false)
4452
4473
  ], DropDownList.prototype, "allowFiltering", void 0);
4474
+ __decorate([
4475
+ Property(300)
4476
+ ], DropDownList.prototype, "debounceDelay", void 0);
4453
4477
  __decorate([
4454
4478
  Property(true)
4455
4479
  ], DropDownList.prototype, "isDeviceFullScreen", void 0);
@@ -778,6 +778,7 @@ export declare class DropDownTree extends Component<HTMLElement> implements INot
778
778
  private wireTreeEvents;
779
779
  private wireCheckAllWrapperEvents;
780
780
  private unWireEvents;
781
+ private handleIosTouch;
781
782
  private dropDownClick;
782
783
  private mouseIn;
783
784
  private onMouseLeave;
@@ -647,6 +647,9 @@ var DropDownTree = /** @class */ (function (_super) {
647
647
  };
648
648
  /* To wire events for the dropdown tree */
649
649
  DropDownTree.prototype.wireEvents = function () {
650
+ if (Browser.isIos) {
651
+ EventHandler.add(this.inputWrapper, 'touchstart', this.handleIosTouch, this);
652
+ }
650
653
  EventHandler.add(this.inputWrapper, 'mouseup', this.dropDownClick, this);
651
654
  EventHandler.add(this.inputWrapper, 'focus', this.focusIn, this);
652
655
  EventHandler.add(this.inputWrapper, 'blur', this.focusOut, this);
@@ -680,6 +683,9 @@ var DropDownTree = /** @class */ (function (_super) {
680
683
  };
681
684
  /* To unwire events for the dropdown tree */
682
685
  DropDownTree.prototype.unWireEvents = function () {
686
+ if (Browser.isIos) {
687
+ EventHandler.remove(this.inputWrapper, 'touchstart', this.handleIosTouch);
688
+ }
683
689
  EventHandler.remove(this.inputWrapper, 'mouseup', this.dropDownClick);
684
690
  EventHandler.remove(this.inputWrapper, 'focus', this.focusIn);
685
691
  EventHandler.remove(this.inputWrapper, 'blur', this.focusOut);
@@ -697,6 +703,11 @@ var DropDownTree = /** @class */ (function (_super) {
697
703
  }
698
704
  document.removeEventListener('mousedown', this.documentClickContext);
699
705
  };
706
+ /* Handles touch events specifically for iOS devices */
707
+ DropDownTree.prototype.handleIosTouch = function (e) {
708
+ e.preventDefault();
709
+ this.dropDownClick(e);
710
+ };
700
711
  /* Trigger when the dropdown is clicked */
701
712
  DropDownTree.prototype.dropDownClick = function (e) {
702
713
  if (!this.enabled || this.readonly) {
@@ -116,6 +116,13 @@ export interface MentionModel {
116
116
  */
117
117
  popupHeight?: string | number;
118
118
 
119
+ /**
120
+ * Specifies the delay time in milliseconds for filtering operations.
121
+ *
122
+ * @default 300
123
+ */
124
+ debounceDelay?: number;
125
+
119
126
  /**
120
127
  * Specifies the template for the selected value from the suggestion list.
121
128
  *
@@ -59,6 +59,7 @@ export declare class Mention extends DropDownBase {
59
59
  private isUpDownKey;
60
60
  private isRTE;
61
61
  private keyEventName;
62
+ protected debounceTimer: ReturnType<typeof setTimeout> | null;
62
63
  /**
63
64
  * Defines class/multiple classes separated by a space for the mention component.
64
65
  *
@@ -155,6 +156,12 @@ export declare class Mention extends DropDownBase {
155
156
  * @aspType string
156
157
  */
157
158
  popupHeight: string | number;
159
+ /**
160
+ * Specifies the delay time in milliseconds for filtering operations.
161
+ *
162
+ * @default 300
163
+ */
164
+ debounceDelay: number;
158
165
  /**
159
166
  * Specifies the template for the selected value from the suggestion list.
160
167
  *
@@ -373,6 +380,7 @@ export declare class Mention extends DropDownBase {
373
380
  private onKeyUp;
374
381
  private isMatchedText;
375
382
  private getCurrentRange;
383
+ protected performFiltering(e: KeyboardEventArgs | MouseEvent): void;
376
384
  private searchLists;
377
385
  private filterAction;
378
386
  protected onActionComplete(ulElement: HTMLElement, list: {