@syncfusion/ej2-dropdowns 29.1.41 → 29.2.5

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 +275 -128
  5. package/dist/es6/ej2-dropdowns.es2015.js.map +1 -1
  6. package/dist/es6/ej2-dropdowns.es5.js +283 -132
  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 +1 -9
  15. package/src/combo-box/combo-box.d.ts +0 -7
  16. package/src/combo-box/combo-box.js +22 -17
  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 +71 -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 +42 -24
  23. package/src/drop-down-tree/drop-down-tree.d.ts +1 -0
  24. package/src/drop-down-tree/drop-down-tree.js +14 -11
  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 +88 -50
  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
@@ -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) {
@@ -1638,7 +1649,8 @@ var DropDownTree = /** @class */ (function (_super) {
1638
1649
  loadOnDemand: this.treeSettings.loadOnDemand,
1639
1650
  nodeSelecting: this.onBeforeSelect.bind(this),
1640
1651
  nodeTemplate: this.itemTemplate,
1641
- checkDisabledChildren: this.treeSettings.checkDisabledChildren
1652
+ checkDisabledChildren: this.treeSettings.checkDisabledChildren,
1653
+ checkOnClick: true
1642
1654
  });
1643
1655
  this.treeObj.root = this.root ? this.root : this;
1644
1656
  this.treeObj.appendTo(this.tree);
@@ -1719,7 +1731,7 @@ var DropDownTree = /** @class */ (function (_super) {
1719
1731
  _this.popupObj.refreshPosition();
1720
1732
  if (!(_this.showSelectAll || _this.allowFiltering) && (!_this.popupDiv.classList.contains(NODATA)
1721
1733
  && _this.treeItems.length > 0)) {
1722
- var focusedElement = _this.value != null && _this.text != null ? _this.treeObj.element.querySelector('[data-uid="' + _this.value[0] + '"]') : null;
1734
+ var focusedElement = _this.value != null && _this.text != null ? _this.treeObj.element.querySelector('[data-uid="' + _this.value[_this.value.length - 1] + '"]') : null;
1723
1735
  if (focusedElement) {
1724
1736
  _this.treeObj.element.querySelector('li').setAttribute('tabindex', '-1');
1725
1737
  focusedElement.setAttribute('tabindex', '0');
@@ -2166,15 +2178,6 @@ var DropDownTree = /** @class */ (function (_super) {
2166
2178
  }
2167
2179
  var target = args.event.target;
2168
2180
  if ((target.classList.contains('e-fullrow') || target.classList.contains('e-list-text')) && this.showCheckBox) {
2169
- this.isClicked = true;
2170
- var getNodeDetails = this.treeObj.getNode(args.node);
2171
- if (getNodeDetails.isChecked === 'true') {
2172
- this.treeObj.uncheckAll([args.node]);
2173
- }
2174
- else {
2175
- this.treeObj.checkAll([args.node]);
2176
- }
2177
- this.isClicked = false;
2178
2181
  this.setMultiSelect();
2179
2182
  this.ensurePlaceHolder();
2180
2183
  }
@@ -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: {
@@ -38,7 +38,9 @@ var Mention = /** @class */ (function (_super) {
38
38
  * @private
39
39
  */
40
40
  function Mention(options, element) {
41
- return _super.call(this, options, element) || this;
41
+ var _this = _super.call(this, options, element) || this;
42
+ _this.debounceTimer = null;
43
+ return _this;
42
44
  }
43
45
  /**
44
46
  * When property value changes happened, then onPropertyChanged method will execute the respective changes in this component.
@@ -473,22 +475,8 @@ var Mention = /** @class */ (function (_super) {
473
475
  this.range = this.inputElement.ownerDocument.getSelection().getRangeAt(0);
474
476
  return this.range;
475
477
  };
476
- Mention.prototype.searchLists = function (e) {
478
+ Mention.prototype.performFiltering = function (e) {
477
479
  var _this = this;
478
- this.isDataFetched = false;
479
- if (isNullOrUndefined(this.list)) {
480
- _super.prototype.render.call(this);
481
- this.unWireListEvents();
482
- this.wireListEvents();
483
- }
484
- if (e.type !== 'mousedown' && (e.keyCode === 40 || e.keyCode === 38)) {
485
- this.queryString = this.queryString === '' ? null : this.queryString;
486
- this.beforePopupOpen = true;
487
- this.resetList(this.dataSource, this.fields);
488
- return;
489
- }
490
- this.isSelected = false;
491
- this.activeIndex = null;
492
480
  var eventArgs = {
493
481
  preventDefaultAction: false,
494
482
  text: this.queryString,
@@ -507,6 +495,28 @@ var Mention = /** @class */ (function (_super) {
507
495
  }
508
496
  });
509
497
  };
498
+ Mention.prototype.searchLists = function (e) {
499
+ this.isDataFetched = false;
500
+ if (isNullOrUndefined(this.list)) {
501
+ _super.prototype.render.call(this);
502
+ this.unWireListEvents();
503
+ this.wireListEvents();
504
+ }
505
+ if (e.type !== 'mousedown' && (e.keyCode === 40 || e.keyCode === 38)) {
506
+ this.queryString = this.queryString === '' ? null : this.queryString;
507
+ this.beforePopupOpen = true;
508
+ this.resetList(this.dataSource, this.fields);
509
+ return;
510
+ }
511
+ this.isSelected = false;
512
+ this.activeIndex = null;
513
+ if (this.queryString !== '' && this.debounceDelay > 0) {
514
+ this.debouncedFiltering(e, this.debounceDelay);
515
+ }
516
+ else {
517
+ this.performFiltering(e);
518
+ }
519
+ };
510
520
  Mention.prototype.filterAction = function (dataSource, query, fields) {
511
521
  this.beforePopupOpen = true;
512
522
  if (this.queryString.length >= this.minLength) {
@@ -1704,6 +1714,9 @@ var Mention = /** @class */ (function (_super) {
1704
1714
  __decorate([
1705
1715
  Property('300px')
1706
1716
  ], Mention.prototype, "popupHeight", void 0);
1717
+ __decorate([
1718
+ Property(300)
1719
+ ], Mention.prototype, "debounceDelay", void 0);
1707
1720
  __decorate([
1708
1721
  Property(null)
1709
1722
  ], Mention.prototype, "displayTemplate", void 0);
@@ -298,6 +298,13 @@ export interface MultiSelectModel extends DropDownBaseModel{
298
298
  */
299
299
  allowFiltering?: boolean;
300
300
 
301
+ /**
302
+ * Specifies the delay time in milliseconds for filtering operations.
303
+ *
304
+ * @default 300
305
+ */
306
+ debounceDelay?: number;
307
+
301
308
  /**
302
309
  * 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.
303
310
  *
@@ -74,6 +74,7 @@ export declare class MultiSelect extends DropDownBase implements IInput {
74
74
  private isBlurDispatching;
75
75
  private isFilterPrevented;
76
76
  private isFilteringAction;
77
+ private headerTemplateHeight;
77
78
  /**
78
79
  * The `fields` property maps the columns of the data table and binds the data to the component.
79
80
  * * text - Maps the text column from data table for each list item.
@@ -341,6 +342,12 @@ export declare class MultiSelect extends DropDownBase implements IInput {
341
342
  * @default null
342
343
  */
343
344
  allowFiltering: boolean;
345
+ /**
346
+ * Specifies the delay time in milliseconds for filtering operations.
347
+ *
348
+ * @default 300
349
+ */
350
+ debounceDelay: number;
344
351
  /**
345
352
  * 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.
346
353
  *
@@ -663,6 +670,7 @@ export declare class MultiSelect extends DropDownBase implements IInput {
663
670
  private preventSetCurrentData;
664
671
  private virtualCustomData;
665
672
  private isSelectAllLoop;
673
+ private initialPopupHeight;
666
674
  private enableRTL;
667
675
  requiredModules(): ModuleDeclaration[];
668
676
  private updateHTMLAttribute;
@@ -807,6 +815,7 @@ export declare class MultiSelect extends DropDownBase implements IInput {
807
815
  protected wireEvent(): void;
808
816
  private onInput;
809
817
  private pasteHandler;
818
+ protected performFiltering(e: KeyboardEventArgs | MouseEvent): void;
810
819
  protected search(e: KeyboardEventArgs): void;
811
820
  protected preRender(): void;
812
821
  protected getLocaleName(): string;
@@ -615,7 +615,7 @@ var MultiSelect = /** @class */ (function (_super) {
615
615
  valuecheck = this.presentItemValue(this.ulElement);
616
616
  }
617
617
  if (valuecheck.length > 0 && this.dataSource instanceof DataManager && !isNullOrUndefined(this.value)
618
- && this.listData != null) {
618
+ && this.listData != null && !(valuecheck.length === 1 && valuecheck[0] == null)) {
619
619
  this.isaddNonPresentItems = true;
620
620
  this.addNonPresentItems(valuecheck, this.ulElement, this.listData);
621
621
  this.isaddNonPresentItems = false;
@@ -1237,13 +1237,18 @@ var MultiSelect = /** @class */ (function (_super) {
1237
1237
  this.checkAndScrollParent();
1238
1238
  };
1239
1239
  MultiSelect.prototype.checkAndScrollParent = function () {
1240
- var parentElement = this.overAllWrapper ? this.overAllWrapper.parentElement : null;
1241
- if (parentElement) {
1242
- var wrapperHeight = parseFloat(getComputedStyle(this.overAllWrapper).height);
1243
- var parentMaxHeight = parseFloat(getComputedStyle(parentElement).maxHeight);
1244
- if (!isNaN(parentMaxHeight) && wrapperHeight > parentMaxHeight) {
1245
- parentElement.scrollTop = parentElement.scrollHeight;
1240
+ var scrollElement = this.overAllWrapper ? this.overAllWrapper.parentElement : null;
1241
+ while (scrollElement) {
1242
+ var scrollElementStyle = getComputedStyle(scrollElement);
1243
+ var scrollElmentHeight = parseFloat(scrollElementStyle.maxHeight) || parseFloat(scrollElementStyle.height);
1244
+ if (!isNaN(scrollElmentHeight)) {
1245
+ var overflowY = scrollElementStyle.overflowY;
1246
+ if (overflowY === 'auto' || overflowY === 'scroll') {
1247
+ scrollElement.scrollTop = scrollElement.scrollHeight;
1248
+ return;
1249
+ }
1246
1250
  }
1251
+ scrollElement = scrollElement.parentElement;
1247
1252
  }
1248
1253
  };
1249
1254
  MultiSelect.prototype.enable = function (state) {
@@ -1493,7 +1498,7 @@ var MultiSelect = /** @class */ (function (_super) {
1493
1498
  MultiSelect.prototype.pageDownSelection = function (steps, isVirtualKeyAction) {
1494
1499
  var list = this.getItems();
1495
1500
  var collection = this.list.querySelectorAll('li.'
1496
- + dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');
1501
+ + dropDownBaseClasses.li + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)' + ':not(.e-virtual-list-end)');
1497
1502
  var previousItem = steps <= collection.length ? collection[steps - 1] : collection[collection.length - 1];
1498
1503
  if (this.fields.disabled && previousItem && !this.enableVirtualization) {
1499
1504
  while (previousItem && (previousItem.classList.contains('e-disabled') || previousItem.classList.contains(HIDE_LIST) ||
@@ -1510,6 +1515,9 @@ var MultiSelect = /** @class */ (function (_super) {
1510
1515
  if (this.enableVirtualization && isVirtualKeyAction) {
1511
1516
  previousItem = steps <= list.length ? this.liCollections[steps] : this.liCollections[list.length - 1];
1512
1517
  }
1518
+ if (this.enableVirtualization && previousItem && previousItem.classList.contains('e-virtual-list-end')) {
1519
+ previousItem = collection[collection.length - 1];
1520
+ }
1513
1521
  this.isKeyBoardAction = true;
1514
1522
  this.addListFocus(previousItem);
1515
1523
  this.previousFocusItem = previousItem;
@@ -1994,9 +2002,10 @@ var MultiSelect = /** @class */ (function (_super) {
1994
2002
  var selectedListMargin = selectedLI && !isNaN(parseInt(window.getComputedStyle(selectedLI).marginBottom, 10)) ?
1995
2003
  parseInt(window.getComputedStyle(selectedLI).marginBottom, 10) : 0;
1996
2004
  this.isUpwardScrolling = false;
1997
- var virtualListCount = this.list.querySelectorAll('.e-virtual-list').length;
1998
- var lastElementValue = this.list.querySelector('li:last-of-type') ?
1999
- this.list.querySelector('li:last-of-type').getAttribute('data-value') : null;
2005
+ var virtualListCount = this.list.querySelectorAll('.e-virtual-list:not(.e-virtual-list-end)').length;
2006
+ var liItems = this.list.querySelectorAll('li:not(.e-virtual-list-end)');
2007
+ var lastElementValue = liItems && liItems.length > 0 && liItems[liItems.length - 1] ?
2008
+ liItems[liItems.length - 1].getAttribute('data-value') : null;
2000
2009
  var selectedLiOffsetTop = this.virtualListInfo && this.virtualListInfo.startIndex ?
2001
2010
  selectedLI.offsetTop + (this.virtualListInfo.startIndex * (selectedLI.offsetHeight + selectedListMargin))
2002
2011
  : selectedLI.offsetTop;
@@ -2052,7 +2061,7 @@ var MultiSelect = /** @class */ (function (_super) {
2052
2061
  };
2053
2062
  MultiSelect.prototype.scrollTop = function (selectedLI, activeIndex, keyCode) {
2054
2063
  if (keyCode === void 0) { keyCode = null; }
2055
- var virtualListCount = this.list.querySelectorAll('.e-virtual-list').length;
2064
+ var virtualListCount = this.list.querySelectorAll('.e-virtual-list:not(.e-virtual-list-end)').length;
2056
2065
  var selectedListMargin = selectedLI && !isNaN(parseInt(window.getComputedStyle(selectedLI).marginBottom, 10)) ?
2057
2066
  parseInt(window.getComputedStyle(selectedLI).marginBottom, 10) : 0;
2058
2067
  var selectedLiOffsetTop = (this.virtualListInfo && this.virtualListInfo.startIndex) ?
@@ -2281,11 +2290,11 @@ var MultiSelect = /** @class */ (function (_super) {
2281
2290
  if (this.list) {
2282
2291
  var elements = this.list.querySelectorAll('li.'
2283
2292
  + dropDownBaseClasses.li
2284
- + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');
2293
+ + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)' + ':not(.e-virtual-list-end)');
2285
2294
  if (this.mode === 'CheckBox' && this.enableGroupCheckBox && !isNullOrUndefined(this.fields.groupBy)) {
2286
2295
  elements = this.list.querySelectorAll('li.'
2287
2296
  + dropDownBaseClasses.li + ',li.' + dropDownBaseClasses.group
2288
- + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)');
2297
+ + ':not(.' + HIDE_LIST + ')' + ':not(.e-reorder-hide)' + ':not(.e-virtual-list-end)');
2289
2298
  }
2290
2299
  var selectedElem = this.list.querySelector('li.' + dropDownBaseClasses.focus);
2291
2300
  if (this.enableVirtualization && isVirtualKeyAction && !isNullOrUndefined(this.currentFocuedListElement)) {
@@ -2984,7 +2993,7 @@ var MultiSelect = /** @class */ (function (_super) {
2984
2993
  var inputWidth = (this.componentWrapper.offsetWidth) * parseFloat(width) / 100;
2985
2994
  width = inputWidth.toString() + 'px';
2986
2995
  }
2987
- return width;
2996
+ return (this.allowResize && this.resizeWidth) ? this.resizeWidth + 'px' : width;
2988
2997
  };
2989
2998
  MultiSelect.prototype.mouseIn = function () {
2990
2999
  if (this.enabled && !this.readonly) {
@@ -3259,7 +3268,7 @@ var MultiSelect = /** @class */ (function (_super) {
3259
3268
  MultiSelect.prototype.updateInitialData = function () {
3260
3269
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
3261
3270
  var currentData = this.selectData;
3262
- var ulElement = this.renderItems(currentData, this.fields);
3271
+ var ulElement = this.renderItems(currentData, this.fields, false, this.isClearAllAction);
3263
3272
  this.list.scrollTop = 0;
3264
3273
  this.virtualListInfo = {
3265
3274
  currentPageNumber: null,
@@ -3480,8 +3489,40 @@ var MultiSelect = /** @class */ (function (_super) {
3480
3489
  _this.search(event);
3481
3490
  });
3482
3491
  };
3483
- MultiSelect.prototype.search = function (e) {
3492
+ MultiSelect.prototype.performFiltering = function (e) {
3484
3493
  var _this = this;
3494
+ var eventArgs = {
3495
+ preventDefaultAction: false,
3496
+ text: this.targetElement(),
3497
+ updateData: function (dataSource, query, fields) {
3498
+ if (eventArgs.cancel) {
3499
+ return;
3500
+ }
3501
+ _this.isFiltered = true;
3502
+ _this.customFilterQuery = query;
3503
+ _this.remoteFilterAction = true;
3504
+ _this.isCustomFiltering = true;
3505
+ _this.dataUpdater(dataSource, query, fields);
3506
+ },
3507
+ event: e,
3508
+ cancel: false
3509
+ };
3510
+ this.trigger('filtering', eventArgs, function (eventArgs) {
3511
+ _this.isFilterPrevented = eventArgs.cancel;
3512
+ if (!eventArgs.cancel) {
3513
+ if (!_this.isFiltered && !eventArgs.preventDefaultAction) {
3514
+ _this.filterAction = true;
3515
+ _this.isFilteringAction = true;
3516
+ if (_this.dataSource instanceof DataManager && _this.allowCustomValue) {
3517
+ _this.isCustomRendered = false;
3518
+ }
3519
+ _this.dataUpdater(_this.dataSource, null, _this.fields);
3520
+ _this.isFilteringAction = false;
3521
+ }
3522
+ }
3523
+ });
3524
+ };
3525
+ MultiSelect.prototype.search = function (e) {
3485
3526
  this.preventSetCurrentData = false;
3486
3527
  this.firstItem = this.dataSource && this.dataSource.length > 0 ? this.dataSource[0] : null;
3487
3528
  if (!isNullOrUndefined(e)) {
@@ -3502,36 +3543,12 @@ var MultiSelect = /** @class */ (function (_super) {
3502
3543
  }
3503
3544
  this.checkAndResetCache();
3504
3545
  this.isRequesting = false;
3505
- var eventArgs_1 = {
3506
- preventDefaultAction: false,
3507
- text: this.targetElement(),
3508
- updateData: function (dataSource, query, fields) {
3509
- if (eventArgs_1.cancel) {
3510
- return;
3511
- }
3512
- _this.isFiltered = true;
3513
- _this.customFilterQuery = query;
3514
- _this.remoteFilterAction = true;
3515
- _this.isCustomFiltering = true;
3516
- _this.dataUpdater(dataSource, query, fields);
3517
- },
3518
- event: e,
3519
- cancel: false
3520
- };
3521
- this.trigger('filtering', eventArgs_1, function (eventArgs) {
3522
- _this.isFilterPrevented = eventArgs.cancel;
3523
- if (!eventArgs.cancel) {
3524
- if (!_this.isFiltered && !eventArgs.preventDefaultAction) {
3525
- _this.filterAction = true;
3526
- _this.isFilteringAction = true;
3527
- if (_this.dataSource instanceof DataManager && _this.allowCustomValue) {
3528
- _this.isCustomRendered = false;
3529
- }
3530
- _this.dataUpdater(_this.dataSource, null, _this.fields);
3531
- _this.isFilteringAction = false;
3532
- }
3533
- }
3534
- });
3546
+ if (this.targetElement() !== '' && this.debounceDelay > 0) {
3547
+ this.debouncedFiltering(e, this.debounceDelay);
3548
+ }
3549
+ else {
3550
+ this.performFiltering(e);
3551
+ }
3535
3552
  }
3536
3553
  else if (this.allowCustomValue) {
3537
3554
  var query = new Query();
@@ -4645,7 +4662,7 @@ var MultiSelect = /** @class */ (function (_super) {
4645
4662
  };
4646
4663
  MultiSelect.prototype.checkClearIconWidth = function () {
4647
4664
  if (this.showClearButton) {
4648
- this.clearIconWidth = parseInt(window.getComputedStyle(this.overAllClear).width, 10);
4665
+ this.clearIconWidth = parseInt(window.getComputedStyle(this.overAllClear).width, 10) || this.overAllClear.offsetWidth;
4649
4666
  }
4650
4667
  };
4651
4668
  MultiSelect.prototype.updateRemainWidth = function (viewWrapper, totalWidth) {
@@ -5564,7 +5581,9 @@ var MultiSelect = /** @class */ (function (_super) {
5564
5581
  _this.list.parentElement.style.paddingBottom = '';
5565
5582
  var overAllHeight = parseInt(_this.popupHeight, 10);
5566
5583
  _this.list.style.maxHeight = formatUnit(overAllHeight);
5567
- _this.list.parentElement.style.height = formatUnit(_this.popupHeight);
5584
+ if (_this.popupHeight.toString().toLowerCase() !== 'auto' && _this.initialPopupHeight >= (parseInt(_this.popupHeight.toString(), 10) - 2)) {
5585
+ _this.list.parentElement.style.height = formatUnit(_this.popupHeight);
5586
+ }
5568
5587
  _this.list.parentElement.style.maxHeight = formatUnit(_this.popupHeight);
5569
5588
  }
5570
5589
  if (_this.resizer) {
@@ -5892,7 +5911,8 @@ var MultiSelect = /** @class */ (function (_super) {
5892
5911
  }
5893
5912
  if (this.list && this.list.parentElement) {
5894
5913
  this.list.parentElement.classList.add('e-resize');
5895
- if (this.popupHeight.toString().toLowerCase() !== 'auto') {
5914
+ this.initialPopupHeight = this.list.parentElement.clientHeight;
5915
+ if (this.popupHeight.toString().toLowerCase() !== 'auto' && this.initialPopupHeight >= (parseInt(this.popupHeight.toString(), 10) - 2)) {
5896
5916
  this.list.parentElement.style.height = '100%';
5897
5917
  }
5898
5918
  this.list.parentElement.style.boxSizing = 'border-box'; // Ensures padding doesn't affect element size
@@ -5903,6 +5923,18 @@ var MultiSelect = /** @class */ (function (_super) {
5903
5923
  this.list.parentElement.style.height = this.resizeHeight + 'px';
5904
5924
  this.list.parentElement.style.maxHeight = this.resizeHeight + 'px';
5905
5925
  this.list.style.maxHeight = this.resizeHeight + "px";
5926
+ if (this.headerTemplate) {
5927
+ var headerElem = this.list.parentElement.querySelector('.e-ddl-header');
5928
+ if (headerElem && headerElem.offsetHeight) {
5929
+ this.headerTemplateHeight = headerElem.offsetHeight;
5930
+ }
5931
+ if (this.resizeHeight) {
5932
+ this.list.style.maxHeight = this.resizeHeight - this.headerTemplateHeight - 16 + "px";
5933
+ }
5934
+ else {
5935
+ this.list.style.maxHeight = parseInt(this.list.style.maxHeight, 10) - 16 + "px";
5936
+ }
5937
+ }
5906
5938
  }
5907
5939
  if (this.resizer) {
5908
5940
  EventHandler.add(this.resizer, 'mousedown', this.startResizing, this);
@@ -5957,6 +5989,9 @@ var MultiSelect = /** @class */ (function (_super) {
5957
5989
  this.list.parentElement.style.height = this.resizeHeight + "px";
5958
5990
  this.list.parentElement.style.maxHeight = this.resizeHeight + "px";
5959
5991
  this.list.style.maxHeight = this.resizeHeight + "px";
5992
+ if (this.headerTemplate) {
5993
+ this.list.style.maxHeight = this.resizeHeight - this.headerTemplateHeight - 16 + "px";
5994
+ }
5960
5995
  if (this.fixedHeaderElement && this.ulElement) {
5961
5996
  this.fixedHeaderElement.style.width = this.ulElement.offsetWidth + "px";
5962
5997
  }
@@ -6456,6 +6491,9 @@ var MultiSelect = /** @class */ (function (_super) {
6456
6491
  __decorate([
6457
6492
  Property(null)
6458
6493
  ], MultiSelect.prototype, "allowFiltering", void 0);
6494
+ __decorate([
6495
+ Property(300)
6496
+ ], MultiSelect.prototype, "debounceDelay", void 0);
6459
6497
  __decorate([
6460
6498
  Property(true)
6461
6499
  ], MultiSelect.prototype, "isDeviceFullScreen", void 0);
@@ -1613,7 +1613,7 @@ ejs-dropdownlist {
1613
1613
  }
1614
1614
 
1615
1615
  .e-multi-select-wrapper .e-delim-values {
1616
- font-family: "Inter";
1616
+ font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", arial, "Noto Sans", "Liberation Sans", sans-serif, "apple color emoji", "Segoe UI emoji", "Segoe UI Symbol", "Noto color emoji";
1617
1617
  font-size: 14px;
1618
1618
  line-height: 28px;
1619
1619
  max-width: 100%;
package/styles/bds.css CHANGED
@@ -1979,7 +1979,7 @@ ejs-dropdownlist {
1979
1979
  }
1980
1980
 
1981
1981
  .e-multi-select-wrapper .e-delim-values {
1982
- font-family: "Inter";
1982
+ font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", arial, "Noto Sans", "Liberation Sans", sans-serif, "apple color emoji", "Segoe UI emoji", "Segoe UI Symbol", "Noto color emoji";
1983
1983
  font-size: 14px;
1984
1984
  line-height: 28px;
1985
1985
  max-width: 100%;
@@ -199,6 +199,7 @@ $ddl-multi-list-hover-bg-color: $content-bg-color-hover !default;
199
199
  $ddl-delim-font-color: $content-text-color !default;
200
200
  $ddl-close-icon-color: $icon-color !default;
201
201
  $ddl-close-icon-hover-color: $icon-color-hover !default;
202
+ $multi-select-delim-font-family: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', arial, 'Noto Sans', 'Liberation Sans', sans-serif, 'apple color emoji', 'Segoe UI emoji', 'Segoe UI Symbol', 'Noto color emoji' !default;
202
203
 
203
204
  @include export-module('multiselect-bds') {
204
205
  .e-multi-select-wrapper .e-chips-collection .e-chips .e-chips-close.e-icon::before {
@@ -411,7 +411,12 @@
411
411
  }
412
412
 
413
413
  .e-multi-select-wrapper .e-delim-values {
414
- font-family: $ddl-chip-font-family;
414
+ @if $ddl-multiselect-skin-name == 'tailwind' {
415
+ font-family: $multi-select-delim-font-family;
416
+ }
417
+ @else {
418
+ font-family: $ddl-chip-font-family;
419
+ }
415
420
  font-size: $ddl-delim-font-size;
416
421
  line-height: $ddl-delimviewheight;
417
422
  max-width: 100%;
@@ -199,6 +199,7 @@ $ddl-multi-list-hover-bg-color: $content-bg-color-hover !default;
199
199
  $ddl-delim-font-color: $content-text-color !default;
200
200
  $ddl-close-icon-color: $icon-color !default;
201
201
  $ddl-close-icon-hover-color: $icon-color-hover !default;
202
+ $multi-select-delim-font-family: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', arial, 'Noto Sans', 'Liberation Sans', sans-serif, 'apple color emoji', 'Segoe UI emoji', 'Segoe UI Symbol', 'Noto color emoji' !default;
202
203
 
203
204
  @include export-module('multiselect-tailwind') {
204
205
  .e-multi-select-wrapper .e-chips-collection .e-chips .e-chips-close.e-icon::before {
@@ -607,7 +607,7 @@
607
607
  }
608
608
 
609
609
  .e-multi-select-wrapper .e-delim-values {
610
- font-family: "Inter";
610
+ font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", arial, "Noto Sans", "Liberation Sans", sans-serif, "apple color emoji", "Segoe UI emoji", "Segoe UI Symbol", "Noto color emoji";
611
611
  font-size: 14px;
612
612
  line-height: 28px;
613
613
  max-width: 100%;
@@ -457,7 +457,7 @@
457
457
  }
458
458
 
459
459
  .e-multi-select-wrapper .e-delim-values {
460
- font-family: "Inter";
460
+ font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", arial, "Noto Sans", "Liberation Sans", sans-serif, "apple color emoji", "Segoe UI emoji", "Segoe UI Symbol", "Noto color emoji";
461
461
  font-size: 14px;
462
462
  line-height: 28px;
463
463
  max-width: 100%;
@@ -457,7 +457,7 @@
457
457
  }
458
458
 
459
459
  .e-multi-select-wrapper .e-delim-values {
460
- font-family: "Inter";
460
+ font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", arial, "Noto Sans", "Liberation Sans", sans-serif, "apple color emoji", "Segoe UI emoji", "Segoe UI Symbol", "Noto color emoji";
461
461
  font-size: 14px;
462
462
  line-height: 28px;
463
463
  max-width: 100%;
@@ -1467,7 +1467,7 @@ ejs-dropdownlist {
1467
1467
  }
1468
1468
 
1469
1469
  .e-multi-select-wrapper .e-delim-values {
1470
- font-family: "Inter";
1470
+ font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", arial, "Noto Sans", "Liberation Sans", sans-serif, "apple color emoji", "Segoe UI emoji", "Segoe UI Symbol", "Noto color emoji";
1471
1471
  font-size: 14px;
1472
1472
  line-height: 28px;
1473
1473
  max-width: 100%;
@@ -1833,7 +1833,7 @@ ejs-dropdownlist {
1833
1833
  }
1834
1834
 
1835
1835
  .e-multi-select-wrapper .e-delim-values {
1836
- font-family: "Inter";
1836
+ font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", arial, "Noto Sans", "Liberation Sans", sans-serif, "apple color emoji", "Segoe UI emoji", "Segoe UI Symbol", "Noto color emoji";
1837
1837
  font-size: 14px;
1838
1838
  line-height: 28px;
1839
1839
  max-width: 100%;
@@ -1467,7 +1467,7 @@ ejs-dropdownlist {
1467
1467
  }
1468
1468
 
1469
1469
  .e-multi-select-wrapper .e-delim-values {
1470
- font-family: "Inter";
1470
+ font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", arial, "Noto Sans", "Liberation Sans", sans-serif, "apple color emoji", "Segoe UI emoji", "Segoe UI Symbol", "Noto color emoji";
1471
1471
  font-size: 14px;
1472
1472
  line-height: 28px;
1473
1473
  max-width: 100%;
@@ -1833,7 +1833,7 @@ ejs-dropdownlist {
1833
1833
  }
1834
1834
 
1835
1835
  .e-multi-select-wrapper .e-delim-values {
1836
- font-family: "Inter";
1836
+ font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", arial, "Noto Sans", "Liberation Sans", sans-serif, "apple color emoji", "Segoe UI emoji", "Segoe UI Symbol", "Noto color emoji";
1837
1837
  font-size: 14px;
1838
1838
  line-height: 28px;
1839
1839
  max-width: 100%;