@syncfusion/ej2-dropdowns 27.2.4 → 28.1.33

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 (223) hide show
  1. package/README.md +2 -2
  2. package/dist/ej2-dropdowns.min.js +3 -3
  3. package/dist/ej2-dropdowns.umd.min.js +3 -3
  4. package/dist/ej2-dropdowns.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-dropdowns.es2015.js +507 -39
  6. package/dist/es6/ej2-dropdowns.es2015.js.map +1 -1
  7. package/dist/es6/ej2-dropdowns.es5.js +506 -37
  8. package/dist/es6/ej2-dropdowns.es5.js.map +1 -1
  9. package/dist/global/ej2-dropdowns.min.js +3 -3
  10. package/dist/global/ej2-dropdowns.min.js.map +1 -1
  11. package/dist/global/index.d.ts +2 -2
  12. package/package.json +13 -13
  13. package/src/auto-complete/auto-complete.js +5 -2
  14. package/src/combo-box/combo-box.js +1 -1
  15. package/src/common/incremental-search.d.ts +1 -1
  16. package/src/common/incremental-search.js +5 -1
  17. package/src/common/virtual-scroll.js +2 -1
  18. package/src/drop-down-base/drop-down-base.js +21 -3
  19. package/src/drop-down-list/drop-down-list-model.d.ts +31 -0
  20. package/src/drop-down-list/drop-down-list.d.ts +44 -1
  21. package/src/drop-down-list/drop-down-list.js +202 -13
  22. package/src/drop-down-tree/drop-down-tree.js +4 -1
  23. package/src/list-box/list-box.d.ts +4 -0
  24. package/src/list-box/list-box.js +9 -4
  25. package/src/mention/mention.js +6 -1
  26. package/src/multi-select/multi-select-model.d.ts +31 -0
  27. package/src/multi-select/multi-select.d.ts +45 -0
  28. package/src/multi-select/multi-select.js +251 -10
  29. package/styles/auto-complete/_tailwind3-definition.scss +2 -0
  30. package/styles/auto-complete/bds.css +75 -0
  31. package/styles/auto-complete/bds.scss +4 -0
  32. package/styles/auto-complete/highcontrast.css +1 -1
  33. package/styles/auto-complete/tailwind3.css +101 -0
  34. package/styles/auto-complete/tailwind3.scss +4 -0
  35. package/styles/bds-lite.css +3013 -0
  36. package/styles/bds-lite.scss +28 -0
  37. package/styles/bds.css +3855 -0
  38. package/styles/bds.scss +33 -0
  39. package/styles/bootstrap-dark-lite.css +41 -2
  40. package/styles/bootstrap-dark.css +41 -2
  41. package/styles/bootstrap-lite.css +30 -1
  42. package/styles/bootstrap.css +30 -1
  43. package/styles/bootstrap4-lite.css +30 -0
  44. package/styles/bootstrap4.css +30 -0
  45. package/styles/bootstrap5-dark-lite.css +30 -0
  46. package/styles/bootstrap5-dark.css +30 -0
  47. package/styles/bootstrap5-lite.css +30 -0
  48. package/styles/bootstrap5.3-lite.css +30 -3
  49. package/styles/bootstrap5.3.css +30 -3
  50. package/styles/bootstrap5.css +30 -0
  51. package/styles/combo-box/_tailwind3-definition.scss +2 -0
  52. package/styles/combo-box/bds.css +75 -0
  53. package/styles/combo-box/bds.scss +4 -0
  54. package/styles/combo-box/highcontrast.css +1 -1
  55. package/styles/combo-box/tailwind3.css +101 -0
  56. package/styles/combo-box/tailwind3.scss +4 -0
  57. package/styles/drop-down-base/_bigger.scss +3 -0
  58. package/styles/drop-down-base/_layout.scss +7 -0
  59. package/styles/drop-down-base/_tailwind3-definition.scss +98 -0
  60. package/styles/drop-down-base/bds.css +496 -0
  61. package/styles/drop-down-base/bds.scss +4 -0
  62. package/styles/drop-down-base/bootstrap-dark.css +4 -0
  63. package/styles/drop-down-base/bootstrap.css +4 -0
  64. package/styles/drop-down-base/bootstrap4.css +4 -0
  65. package/styles/drop-down-base/bootstrap5-dark.css +4 -0
  66. package/styles/drop-down-base/bootstrap5.3.css +4 -0
  67. package/styles/drop-down-base/bootstrap5.css +4 -0
  68. package/styles/drop-down-base/fabric-dark.css +4 -0
  69. package/styles/drop-down-base/fabric.css +4 -0
  70. package/styles/drop-down-base/fluent-dark.css +4 -0
  71. package/styles/drop-down-base/fluent.css +4 -0
  72. package/styles/drop-down-base/fluent2.css +9 -5
  73. package/styles/drop-down-base/highcontrast-light.css +4 -0
  74. package/styles/drop-down-base/highcontrast.css +4 -0
  75. package/styles/drop-down-base/material-dark.css +4 -0
  76. package/styles/drop-down-base/material.css +4 -0
  77. package/styles/drop-down-base/material3-dark.css +4 -0
  78. package/styles/drop-down-base/material3.css +4 -0
  79. package/styles/drop-down-base/tailwind-dark.css +4 -0
  80. package/styles/drop-down-base/tailwind.css +4 -0
  81. package/styles/drop-down-base/tailwind3.css +392 -0
  82. package/styles/drop-down-base/tailwind3.scss +4 -0
  83. package/styles/drop-down-list/_highcontrast-definition.scss +1 -1
  84. package/styles/drop-down-list/_layout.scss +18 -2
  85. package/styles/drop-down-list/_tailwind3-definition.scss +135 -0
  86. package/styles/drop-down-list/_theme.scss +3 -1
  87. package/styles/drop-down-list/bds.css +609 -0
  88. package/styles/drop-down-list/bds.scss +10 -0
  89. package/styles/drop-down-list/bootstrap-dark.css +18 -1
  90. package/styles/drop-down-list/bootstrap.css +13 -1
  91. package/styles/drop-down-list/bootstrap4.css +13 -0
  92. package/styles/drop-down-list/bootstrap5-dark.css +13 -0
  93. package/styles/drop-down-list/bootstrap5.3.css +13 -0
  94. package/styles/drop-down-list/bootstrap5.css +13 -0
  95. package/styles/drop-down-list/fabric-dark.css +18 -1
  96. package/styles/drop-down-list/fabric.css +13 -1
  97. package/styles/drop-down-list/fluent-dark.css +13 -1
  98. package/styles/drop-down-list/fluent.css +13 -1
  99. package/styles/drop-down-list/fluent2.css +13 -1
  100. package/styles/drop-down-list/highcontrast-light.css +9 -1
  101. package/styles/drop-down-list/highcontrast.css +19 -1
  102. package/styles/drop-down-list/icons/_bootstrap-dark.scss +4 -0
  103. package/styles/drop-down-list/icons/_bootstrap.scss +4 -0
  104. package/styles/drop-down-list/icons/_bootstrap4.scss +4 -0
  105. package/styles/drop-down-list/icons/_bootstrap5.3.scss +4 -0
  106. package/styles/drop-down-list/icons/_bootstrap5.scss +4 -0
  107. package/styles/drop-down-list/icons/_fabric-dark.scss +4 -0
  108. package/styles/drop-down-list/icons/_fabric.scss +4 -0
  109. package/styles/drop-down-list/icons/_fluent.scss +4 -0
  110. package/styles/drop-down-list/icons/_fluent2.scss +4 -0
  111. package/styles/drop-down-list/icons/_highcontrast.scss +4 -0
  112. package/styles/drop-down-list/icons/_material-dark.scss +4 -0
  113. package/styles/drop-down-list/icons/_material.scss +4 -0
  114. package/styles/drop-down-list/icons/_material3.scss +4 -0
  115. package/styles/drop-down-list/icons/_tailwind.scss +4 -0
  116. package/styles/drop-down-list/icons/_tailwind3.scss +14 -0
  117. package/styles/drop-down-list/material-dark.css +18 -1
  118. package/styles/drop-down-list/material.css +13 -1
  119. package/styles/drop-down-list/material3-dark.css +13 -1
  120. package/styles/drop-down-list/material3.css +13 -1
  121. package/styles/drop-down-list/tailwind-dark.css +13 -1
  122. package/styles/drop-down-list/tailwind.css +13 -1
  123. package/styles/drop-down-list/tailwind3.css +455 -0
  124. package/styles/drop-down-list/tailwind3.scss +10 -0
  125. package/styles/drop-down-tree/_bigger.scss +41 -7
  126. package/styles/drop-down-tree/_layout.scss +34 -10
  127. package/styles/drop-down-tree/_tailwind3-definition.scss +67 -0
  128. package/styles/drop-down-tree/_theme.scss +3 -3
  129. package/styles/drop-down-tree/bds.css +712 -0
  130. package/styles/drop-down-tree/bds.scss +10 -0
  131. package/styles/drop-down-tree/bootstrap5.3.css +0 -3
  132. package/styles/drop-down-tree/icons/_tailwind3.scss +11 -0
  133. package/styles/drop-down-tree/tailwind3.css +512 -0
  134. package/styles/drop-down-tree/tailwind3.scss +10 -0
  135. package/styles/fabric-dark-lite.css +40 -1
  136. package/styles/fabric-dark.css +40 -1
  137. package/styles/fabric-lite.css +30 -1
  138. package/styles/fabric.css +30 -1
  139. package/styles/fluent-dark-lite.css +30 -1
  140. package/styles/fluent-dark.css +30 -1
  141. package/styles/fluent-lite.css +30 -1
  142. package/styles/fluent.css +30 -1
  143. package/styles/fluent2-lite.css +45 -12
  144. package/styles/fluent2.css +45 -12
  145. package/styles/highcontrast-light-lite.css +22 -1
  146. package/styles/highcontrast-light.css +22 -1
  147. package/styles/highcontrast-lite.css +41 -1
  148. package/styles/highcontrast.css +41 -1
  149. package/styles/list-box/_bigger.scss +18 -1
  150. package/styles/list-box/_layout.scss +29 -3
  151. package/styles/list-box/_tailwind3-definition.scss +123 -0
  152. package/styles/list-box/_theme.scss +11 -0
  153. package/styles/list-box/bds.css +971 -0
  154. package/styles/list-box/bds.scss +6 -0
  155. package/styles/list-box/fluent2.css +1 -1
  156. package/styles/list-box/icons/_tailwind3.scss +25 -0
  157. package/styles/list-box/tailwind3.css +991 -0
  158. package/styles/list-box/tailwind3.scss +6 -0
  159. package/styles/material-dark-lite.css +40 -1
  160. package/styles/material-dark.css +40 -1
  161. package/styles/material-lite.css +30 -1
  162. package/styles/material.css +30 -1
  163. package/styles/material3-dark-lite.css +36 -9
  164. package/styles/material3-dark.css +36 -9
  165. package/styles/material3-lite.css +36 -9
  166. package/styles/material3.css +36 -9
  167. package/styles/mention/_tailwind3-definition.scss +1 -0
  168. package/styles/mention/bds.css +78 -0
  169. package/styles/mention/bds.scss +6 -0
  170. package/styles/mention/tailwind3.css +67 -0
  171. package/styles/mention/tailwind3.scss +6 -0
  172. package/styles/multi-select/_bigger.scss +2 -2
  173. package/styles/multi-select/_bootstrap-dark-definition.scss +1 -1
  174. package/styles/multi-select/_layout.scss +27 -2
  175. package/styles/multi-select/_material3-definition.scss +2 -2
  176. package/styles/multi-select/_tailwind3-definition.scss +227 -0
  177. package/styles/multi-select/_theme.scss +1 -1
  178. package/styles/multi-select/bds.css +1575 -0
  179. package/styles/multi-select/bds.scss +10 -0
  180. package/styles/multi-select/bootstrap-dark.css +19 -1
  181. package/styles/multi-select/bootstrap.css +13 -0
  182. package/styles/multi-select/bootstrap4.css +13 -0
  183. package/styles/multi-select/bootstrap5-dark.css +13 -0
  184. package/styles/multi-select/bootstrap5.3.css +13 -0
  185. package/styles/multi-select/bootstrap5.css +13 -0
  186. package/styles/multi-select/fabric-dark.css +18 -0
  187. package/styles/multi-select/fabric.css +13 -0
  188. package/styles/multi-select/fluent-dark.css +13 -0
  189. package/styles/multi-select/fluent.css +13 -0
  190. package/styles/multi-select/fluent2.css +22 -5
  191. package/styles/multi-select/highcontrast-light.css +9 -0
  192. package/styles/multi-select/highcontrast.css +18 -0
  193. package/styles/multi-select/icons/_bootstrap-dark.scss +4 -0
  194. package/styles/multi-select/icons/_bootstrap.scss +4 -0
  195. package/styles/multi-select/icons/_bootstrap4.scss +4 -0
  196. package/styles/multi-select/icons/_bootstrap5.3.scss +4 -0
  197. package/styles/multi-select/icons/_bootstrap5.scss +4 -0
  198. package/styles/multi-select/icons/_fabric-dark.scss +4 -0
  199. package/styles/multi-select/icons/_fabric.scss +4 -0
  200. package/styles/multi-select/icons/_fluent.scss +4 -0
  201. package/styles/multi-select/icons/_fluent2.scss +4 -0
  202. package/styles/multi-select/icons/_highcontrast.scss +4 -0
  203. package/styles/multi-select/icons/_material-dark.scss +4 -0
  204. package/styles/multi-select/icons/_material.scss +4 -0
  205. package/styles/multi-select/icons/_material3.scss +4 -0
  206. package/styles/multi-select/icons/_tailwind.scss +4 -0
  207. package/styles/multi-select/icons/_tailwind3.scss +26 -0
  208. package/styles/multi-select/material-dark.css +18 -0
  209. package/styles/multi-select/material.css +13 -0
  210. package/styles/multi-select/material3-dark.css +19 -8
  211. package/styles/multi-select/material3.css +19 -8
  212. package/styles/multi-select/tailwind-dark.css +13 -0
  213. package/styles/multi-select/tailwind.css +13 -0
  214. package/styles/multi-select/tailwind3.css +1398 -0
  215. package/styles/multi-select/tailwind3.scss +10 -0
  216. package/styles/tailwind-dark-lite.css +30 -1
  217. package/styles/tailwind-dark.css +30 -1
  218. package/styles/tailwind-lite.css +30 -1
  219. package/styles/tailwind.css +30 -1
  220. package/styles/tailwind3-lite.css +2889 -0
  221. package/styles/tailwind3-lite.scss +28 -0
  222. package/styles/tailwind3.css +3550 -0
  223. package/styles/tailwind3.scss +33 -0
@@ -48,6 +48,7 @@ export var dropDownListClasses = {
48
48
  backIcon: 'e-input-group-icon e-back-icon e-icons',
49
49
  filterBarClearIcon: 'e-input-group-icon e-clear-icon e-icons',
50
50
  filterInput: 'e-input-filter',
51
+ resizeIcon: 'e-resizer-right e-icons',
51
52
  filterParent: 'e-filter-parent',
52
53
  mobileFilter: 'e-ddl-device-filter',
53
54
  footer: 'e-ddl-footer',
@@ -90,6 +91,8 @@ var DropDownList = /** @class */ (function (_super) {
90
91
  _this.isTouched = false;
91
92
  _this.isFocused = false;
92
93
  _this.autoFill = false;
94
+ _this.isUpdateHeaderHeight = false;
95
+ _this.isUpdateFooterHeight = false;
93
96
  return _this;
94
97
  }
95
98
  /**
@@ -232,6 +235,10 @@ var DropDownList = /** @class */ (function (_super) {
232
235
  (this.allowObjectBinding && this.previousValue &&
233
236
  this.isObjectInArray(this.previousValue, [this.allowCustom ? this.value ? this.value : dataItem :
234
237
  dataItem.value ? this.getDataByValue(dataItem.value) : dataItem]))) {
238
+ this.checkAndResetCache();
239
+ if (this.enableVirtualization && this.list) {
240
+ this.updateInitialData();
241
+ }
235
242
  return;
236
243
  }
237
244
  this.onChangeEvent(e);
@@ -548,6 +555,22 @@ var DropDownList = /** @class */ (function (_super) {
548
555
  this.updateIconState();
549
556
  this.isFocused = true;
550
557
  };
558
+ DropDownList.prototype.resizingWireEvent = function () {
559
+ // Mouse events
560
+ EventHandler.add(document, 'mousemove', this.resizePopup, this);
561
+ EventHandler.add(document, 'mouseup', this.stopResizing, this);
562
+ // Touch events
563
+ EventHandler.add(document, 'touchmove', this.resizePopup, this);
564
+ EventHandler.add(document, 'touchend', this.stopResizing, this);
565
+ };
566
+ DropDownList.prototype.resizingUnWireEvent = function () {
567
+ // Mouse events
568
+ EventHandler.remove(document, 'mousemove', this.resizePopup);
569
+ EventHandler.remove(document, 'mouseup', this.stopResizing);
570
+ // Touch events
571
+ EventHandler.remove(document, 'touchmove', this.resizePopup);
572
+ EventHandler.remove(document, 'touchend', this.stopResizing);
573
+ };
551
574
  DropDownList.prototype.resetValueHandler = function (e) {
552
575
  var formElement = closest(this.inputElement, 'form');
553
576
  if (formElement && e.target === formElement) {
@@ -642,6 +665,68 @@ var DropDownList = /** @class */ (function (_super) {
642
665
  this.incrementalSearch(e);
643
666
  }
644
667
  };
668
+ DropDownList.prototype.startResizing = function (event) {
669
+ this.isResizing = true;
670
+ this.trigger('resizeStart', event);
671
+ // Get initial touch or mouse coordinates
672
+ var clientX = (event instanceof MouseEvent) ? event.clientX : event.touches[0].clientX;
673
+ var clientY = (event instanceof MouseEvent) ? event.clientY : event.touches[0].clientY;
674
+ // Store the initial dimensions of the popup
675
+ if (this.list && this.list.parentElement) {
676
+ this.originalWidth = this.list.parentElement.offsetWidth;
677
+ this.originalHeight = this.list.parentElement.offsetHeight;
678
+ this.originalMouseX = clientX;
679
+ this.originalMouseY = clientY;
680
+ }
681
+ // Wire up events for resizing
682
+ this.resizingWireEvent();
683
+ if (event) {
684
+ event.preventDefault(); // Prevent selection behavior if event exists
685
+ }
686
+ };
687
+ DropDownList.prototype.resizePopup = function (event) {
688
+ if (!this.isResizing) {
689
+ return;
690
+ }
691
+ this.trigger('resizing', event);
692
+ // Get the current touch or mouse position
693
+ var clientX = (event instanceof MouseEvent) ? event.clientX : event.touches[0].clientX;
694
+ var clientY = (event instanceof MouseEvent) ? event.clientY : event.touches[0].clientY;
695
+ // Calculate the new width and height based on drag
696
+ var dx = clientX - this.originalMouseX;
697
+ var dy = clientY - this.originalMouseY;
698
+ if (this.list && this.list.parentElement) {
699
+ // Minimum width and height (100px)
700
+ var minWidth = parseInt(window.getComputedStyle(this.list.parentElement).minWidth, 10);
701
+ var minHeight = parseInt(window.getComputedStyle(this.list.parentElement).minHeight, 10);
702
+ minWidth = minWidth || 100;
703
+ minHeight = minHeight || 120;
704
+ // Ensure the new width and height are not less than the minimum
705
+ this.resizeWidth = Math.max(this.originalWidth + dx, minWidth);
706
+ this.resizeHeight = Math.max(this.originalHeight + dy, minHeight);
707
+ this.list.parentElement.style.width = this.resizeWidth + "px";
708
+ this.list.parentElement.style.height = this.resizeHeight + "px";
709
+ this.list.parentElement.style.maxHeight = this.resizeHeight + "px";
710
+ this.list.style.maxHeight = this.resizeHeight + "px";
711
+ if (this.fixedHeaderElement && this.ulElement) {
712
+ this.fixedHeaderElement.style.width = this.ulElement.offsetWidth + "px";
713
+ }
714
+ }
715
+ if (event) {
716
+ event.preventDefault(); // Prevent selection behavior if event exists
717
+ }
718
+ };
719
+ DropDownList.prototype.stopResizing = function (event) {
720
+ if (this.isResizing) {
721
+ this.isResizing = false;
722
+ this.trigger('resizeStop', event);
723
+ // Unwire the resize event listeners
724
+ this.resizingUnWireEvent();
725
+ }
726
+ if (event) {
727
+ event.preventDefault(); // Prevent selection behavior if event exists
728
+ }
729
+ };
645
730
  DropDownList.prototype.onMouseClick = function (e) {
646
731
  var target = e.target;
647
732
  this.keyboardEvent = null;
@@ -1113,6 +1198,9 @@ var DropDownList = /** @class */ (function (_super) {
1113
1198
  }
1114
1199
  return;
1115
1200
  }
1201
+ if (!this.enableVirtualization && this.liCollections[findLi] && this.liCollections[findLi].classList.contains('e-disabled')) {
1202
+ return;
1203
+ }
1116
1204
  this.setSelection(this.liCollections[findLi], e);
1117
1205
  }
1118
1206
  };
@@ -1208,6 +1296,19 @@ var DropDownList = /** @class */ (function (_super) {
1208
1296
  };
1209
1297
  DropDownList.prototype.pageUpSelection = function (steps, event, isVirtualKeyAction) {
1210
1298
  var previousItem = steps >= 0 ? this.liCollections[steps + 1] : this.liCollections[0];
1299
+ if (!this.enableVirtualization && previousItem && previousItem.classList.contains('e-disabled')) {
1300
+ var validIndex = steps >= 0 ? steps + 1 : 0;
1301
+ while (validIndex < this.liCollections.length) {
1302
+ previousItem = this.liCollections[validIndex];
1303
+ if (previousItem && !previousItem.classList.contains('e-disabled')) {
1304
+ break;
1305
+ }
1306
+ validIndex--;
1307
+ if (validIndex < 0) {
1308
+ return;
1309
+ }
1310
+ }
1311
+ }
1211
1312
  if ((this.enableVirtualization && this.activeIndex == null)) {
1212
1313
  previousItem = (this.liCollections.length >= steps && steps >= 0) ?
1213
1314
  this.liCollections[steps + this.skeletonCount + 1] : this.liCollections[0];
@@ -1240,6 +1341,15 @@ var DropDownList = /** @class */ (function (_super) {
1240
1341
  DropDownList.prototype.pageDownSelection = function (steps, event, isVirtualKeyAction) {
1241
1342
  var list = this.getItems();
1242
1343
  var previousItem = steps <= list.length ? this.liCollections[steps - 1] : this.liCollections[list.length - 1];
1344
+ if (!this.enableVirtualization && previousItem && previousItem.classList.contains('e-disabled')) {
1345
+ while (steps >= 0 && steps < this.liCollections.length) {
1346
+ previousItem = steps <= list.length ? this.liCollections[steps - 1] : this.liCollections[list.length - 1];
1347
+ if (previousItem && !previousItem.classList.contains('e-disabled')) {
1348
+ break;
1349
+ }
1350
+ steps++;
1351
+ }
1352
+ }
1243
1353
  if (this.enableVirtualization && this.skeletonCount > 0) {
1244
1354
  steps = this.getModuleName() === 'dropdownlist' && this.allowFiltering ? steps + 1 : steps;
1245
1355
  previousItem = steps < list.length ? this.liCollections[steps] : this.liCollections[list.length - 1];
@@ -2018,7 +2128,7 @@ var DropDownList = /** @class */ (function (_super) {
2018
2128
  var virualElement = this.createElement('div', {
2019
2129
  id: this.element.id + '_popup', className: 'e-virtual-ddl', styles: this.GetVirtualTrackHeight()
2020
2130
  });
2021
- document.getElementsByClassName('e-popup')[0].querySelector('.e-dropdownbase').appendChild(virualElement);
2131
+ this.list.parentElement.querySelector('.e-dropdownbase').appendChild(virualElement);
2022
2132
  }
2023
2133
  }
2024
2134
  }
@@ -2057,7 +2167,7 @@ var DropDownList = /** @class */ (function (_super) {
2057
2167
  var virualElement = this.createElement('div', {
2058
2168
  id: this.element.id + '_popup', className: 'e-virtual-ddl', styles: this.GetVirtualTrackHeight()
2059
2169
  });
2060
- document.getElementsByClassName('e-popup')[0].querySelector('.e-dropdownbase').appendChild(virualElement);
2170
+ this.list.parentElement.querySelector('.e-dropdownbase').appendChild(virualElement);
2061
2171
  }
2062
2172
  }
2063
2173
  }
@@ -2416,7 +2526,7 @@ var DropDownList = /** @class */ (function (_super) {
2416
2526
  };
2417
2527
  DropDownList.prototype.updateSelectionList = function () {
2418
2528
  var selectedItem = this.list && this.list.querySelector('.' + 'e-active');
2419
- if (!selectedItem && !isNullOrUndefined(this.value)) {
2529
+ if (!selectedItem && !isNullOrUndefined(this.value) && this.getModuleName() !== 'autocomplete') {
2420
2530
  var value = this.allowObjectBinding ? getValue((this.fields.value) ? this.fields.value : '', this.value) : this.value;
2421
2531
  var findEle = this.findListElement(this.list, 'li', 'data-value', value);
2422
2532
  if (findEle) {
@@ -2449,10 +2559,12 @@ var DropDownList = /** @class */ (function (_super) {
2449
2559
  formatUnit(Math.round(window.outerHeight).toString() + 'px') : formatUnit(_this.popupHeight);
2450
2560
  if (_this.headerTemplate) {
2451
2561
  _this.setHeaderTemplate(popupEle);
2562
+ _this.isUpdateHeaderHeight = _this.header.offsetHeight !== 0;
2452
2563
  }
2453
2564
  append([_this.list], popupEle);
2454
2565
  if (_this.footerTemplate) {
2455
2566
  _this.setFooterTemplate(popupEle);
2567
+ _this.isUpdateFooterHeight = _this.footer.offsetHeight !== 0;
2456
2568
  }
2457
2569
  document.body.appendChild(popupEle);
2458
2570
  popupEle.style.top = '0px';
@@ -2617,12 +2729,57 @@ var DropDownList = /** @class */ (function (_super) {
2617
2729
  if (!isNullOrUndefined(_this.popupObj)) {
2618
2730
  _this.popupObj.show(new Animation(eventArgs.animation), (_this.zIndex === 1000) ? _this.element : null);
2619
2731
  }
2732
+ if (_this.isReact) {
2733
+ setTimeout(function () {
2734
+ if (_this.popupHeight && _this.list && _this.popupHeight !== 'auto' && !(_this.getModuleName() === 'dropdownlist' && _this.allowFiltering)) {
2735
+ var popupHeightValue = typeof _this.popupHeight === 'string' ? parseInt(_this.popupHeight, 10) : _this.popupHeight;
2736
+ if (!_this.isUpdateHeaderHeight && _this.headerTemplate && _this.header) {
2737
+ var listHeight = _this.list.style.maxHeight === '' ? popupHeightValue : parseInt(_this.list.style.maxHeight, 10);
2738
+ _this.list.style.maxHeight = (listHeight - _this.header.offsetHeight).toString() + 'px';
2739
+ _this.isUpdateHeaderHeight = true;
2740
+ }
2741
+ if (!_this.isUpdateFooterHeight && _this.footerTemplate && _this.footer) {
2742
+ var listHeight = _this.list.style.maxHeight === '' ? popupHeightValue : parseInt(_this.list.style.maxHeight, 10);
2743
+ _this.list.style.maxHeight = (listHeight - _this.footer.offsetHeight).toString() + 'px';
2744
+ _this.isUpdateFooterHeight = true;
2745
+ }
2746
+ }
2747
+ }, 15);
2748
+ }
2620
2749
  }
2621
2750
  else {
2622
2751
  _this.beforePopupOpen = false;
2623
2752
  _this.destroyPopup();
2624
2753
  }
2625
2754
  });
2755
+ if (_this.allowResize) {
2756
+ var resizePaddingBottom = 16;
2757
+ // Create the resizer div
2758
+ _this.resizer = _this.createElement('div', {
2759
+ id: _this.element.id + '_resize-popup',
2760
+ className: dropDownListClasses.resizeIcon // Adding class for styling
2761
+ });
2762
+ // Add the resizer div to the popup
2763
+ if (_this.list && _this.list.parentElement) {
2764
+ _this.list.parentElement.classList.add('e-resize');
2765
+ if (_this.popupHeight.toString().toLowerCase() !== 'auto') {
2766
+ _this.list.parentElement.style.height = '100%';
2767
+ }
2768
+ _this.list.parentElement.style.paddingBottom = (_this.getModuleName() === 'dropdownlist' && _this.allowFiltering && _this.searchBoxHeight) ? (_this.searchBoxHeight + resizePaddingBottom).toString() + 'px' : resizePaddingBottom.toString() + 'px';
2769
+ if (_this.header || _this.footer || _this.itemTemplate) {
2770
+ _this.list.parentElement.style.paddingBottom = ((parseInt(_this.list.parentElement.style.maxHeight, 10) - parseInt(_this.list.style.maxHeight, 10)) + resizePaddingBottom).toString() + 'px';
2771
+ }
2772
+ _this.list.parentElement.appendChild(_this.resizer);
2773
+ //hold the popup resize
2774
+ _this.list.parentElement.style.width = _this.resizeWidth + "px";
2775
+ _this.list.parentElement.style.height = _this.resizeHeight + "px";
2776
+ _this.list.parentElement.style.maxHeight = _this.resizeHeight + "px";
2777
+ _this.list.style.maxHeight = _this.resizeHeight + "px";
2778
+ }
2779
+ // Attach mouse and touch events to the resizer
2780
+ EventHandler.add(_this.resizer, 'mousedown', _this.startResizing, _this);
2781
+ EventHandler.add(_this.resizer, 'touchstart', _this.startResizing, _this);
2782
+ }
2626
2783
  }
2627
2784
  else {
2628
2785
  _this.beforePopupOpen = false;
@@ -2861,7 +3018,8 @@ var DropDownList = /** @class */ (function (_super) {
2861
3018
  }
2862
3019
  else {
2863
3020
  this.list.scrollTop = this.virtualListInfo && this.virtualListInfo.startIndex ?
2864
- this.virtualListInfo.startIndex * this.listItemHeight : 0;
3021
+ isInitial && this.virtualListInfo.startIndex ? this.virtualListInfo.startIndex * this.listItemHeight +
3022
+ (this.listItemHeight * 2) : this.virtualListInfo.startIndex * this.listItemHeight : 0;
2865
3023
  }
2866
3024
  isScrollerCHanged = this.isKeyBoardAction;
2867
3025
  isScrollTopChanged = true;
@@ -3011,15 +3169,6 @@ var DropDownList = /** @class */ (function (_super) {
3011
3169
  this.keyboardEvent = null;
3012
3170
  EventHandler.remove(document, 'mousedown', this.onDocumentClick);
3013
3171
  this.isActive = false;
3014
- if (this.getModuleName() === 'dropdownlist') {
3015
- Input.destroy({
3016
- element: this.filterInput,
3017
- floatLabelType: this.floatLabelType,
3018
- properties: { placeholder: this.filterBarPlaceholder },
3019
- buttons: this.clearIconElement
3020
- }, this.clearIconElement);
3021
- }
3022
- this.filterInputObj = null;
3023
3172
  this.isDropDownClick = false;
3024
3173
  this.preventAutoFill = false;
3025
3174
  var scrollableParentElements = this.popupObj.getScrollableParent(this.inputWrapper.container);
@@ -3092,6 +3241,15 @@ var DropDownList = /** @class */ (function (_super) {
3092
3241
  var popupInstance = this.popupObj;
3093
3242
  var eventArgs = { popup: popupInstance, cancel: false, animation: animModel, event: e || null };
3094
3243
  this.trigger('close', eventArgs, function (eventArgs) {
3244
+ if (_this.getModuleName() === 'dropdownlist') {
3245
+ Input.destroy({
3246
+ element: _this.filterInput,
3247
+ floatLabelType: _this.floatLabelType,
3248
+ properties: { placeholder: _this.filterBarPlaceholder },
3249
+ buttons: _this.clearIconElement
3250
+ }, _this.clearIconElement);
3251
+ }
3252
+ _this.filterInputObj = null;
3095
3253
  if (!isNullOrUndefined(_this.popupObj) &&
3096
3254
  !isNullOrUndefined(_this.popupObj.element.querySelector('.e-fixed-head'))) {
3097
3255
  var fixedHeader = _this.popupObj.element.querySelector('.e-fixed-head');
@@ -3162,6 +3320,12 @@ var DropDownList = /** @class */ (function (_super) {
3162
3320
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
3163
3321
  this.list.getElementsByClassName('e-virtual-ddl')[0].style = this.GetVirtualTrackHeight();
3164
3322
  }
3323
+ else if (!this.list.querySelector('.e-virtual-ddl')) {
3324
+ var virualElement = this.createElement('div', {
3325
+ id: this.element.id + '_popup', className: 'e-virtual-ddl', styles: this.GetVirtualTrackHeight()
3326
+ });
3327
+ this.list.parentElement.querySelector('.e-dropdownbase').appendChild(virualElement);
3328
+ }
3165
3329
  if (this.getModuleName() !== 'autocomplete' && this.totalItemCount !== 0 && this.totalItemCount > (this.itemCount * 2)) {
3166
3330
  this.getSkeletonCount();
3167
3331
  }
@@ -3180,6 +3344,10 @@ var DropDownList = /** @class */ (function (_super) {
3180
3344
  this.isFilterFocus = false;
3181
3345
  this.inputElement.removeAttribute('aria-controls');
3182
3346
  if (this.popupObj) {
3347
+ if (this.resizer) {
3348
+ EventHandler.remove(this.resizer, 'mousedown', this.startResizing);
3349
+ EventHandler.remove(this.resizer, 'touchstart', this.startResizing);
3350
+ }
3183
3351
  this.popupObj.destroy();
3184
3352
  detach(this.popupObj.element);
3185
3353
  }
@@ -3899,6 +4067,15 @@ var DropDownList = /** @class */ (function (_super) {
3899
4067
  isOpen: true
3900
4068
  });
3901
4069
  }
4070
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
4071
+ var proxy = this;
4072
+ var duration = (this.element.tagName === this.getNgDirective() && this.itemTemplate) ? 500 : 100;
4073
+ if (!this.isSecondClick && this.isReact && !this.isDropDownClick && this.isFiltering() && this.itemTemplate != null) {
4074
+ setTimeout(function () {
4075
+ proxy.cloneElements();
4076
+ proxy.isSecondClick = true;
4077
+ }, duration);
4078
+ }
3902
4079
  };
3903
4080
  DropDownList.prototype.invokeRenderPopup = function (e) {
3904
4081
  if (Browser.isDevice && this.isFilterLayout()) {
@@ -4235,6 +4412,9 @@ var DropDownList = /** @class */ (function (_super) {
4235
4412
  __decorate([
4236
4413
  Property(false)
4237
4414
  ], DropDownList.prototype, "enableVirtualization", void 0);
4415
+ __decorate([
4416
+ Property(false)
4417
+ ], DropDownList.prototype, "allowResize", void 0);
4238
4418
  __decorate([
4239
4419
  Property(null)
4240
4420
  ], DropDownList.prototype, "text", void 0);
@@ -4274,6 +4454,15 @@ var DropDownList = /** @class */ (function (_super) {
4274
4454
  __decorate([
4275
4455
  Event()
4276
4456
  ], DropDownList.prototype, "focus", void 0);
4457
+ __decorate([
4458
+ Event()
4459
+ ], DropDownList.prototype, "resizeStop", void 0);
4460
+ __decorate([
4461
+ Event()
4462
+ ], DropDownList.prototype, "resizing", void 0);
4463
+ __decorate([
4464
+ Event()
4465
+ ], DropDownList.prototype, "resizeStart", void 0);
4277
4466
  DropDownList = __decorate([
4278
4467
  NotifyPropertyChanges
4279
4468
  ], DropDownList);
@@ -273,7 +273,7 @@ var DropDownTree = /** @class */ (function (_super) {
273
273
  }
274
274
  else {
275
275
  if (!isNOU(this.element.id)) {
276
- this.inputEle = this.createElement('input', { attrs: { role: 'textbox', type: 'text', id: this.element.id } });
276
+ this.inputEle = this.createElement('input', { attrs: { role: 'textbox', type: 'text', id: this.element.id + '_textbox' } });
277
277
  }
278
278
  else {
279
279
  this.inputEle = this.createElement('input', { attrs: { role: 'textbox', type: 'text' } });
@@ -1536,6 +1536,9 @@ var DropDownTree = /** @class */ (function (_super) {
1536
1536
  var id = this.value[0].toString();
1537
1537
  if (this.treeObj.selectedNodes[0] !== id) {
1538
1538
  setValue('selectedNodes', [id], this.treeObj);
1539
+ if (this.fields.dataSource instanceof DataManager) {
1540
+ this.updateSelectedValues();
1541
+ }
1539
1542
  }
1540
1543
  }
1541
1544
  else {
@@ -698,6 +698,10 @@ export interface DragEventArgs {
698
698
  * Specifies the event.
699
699
  */
700
700
  event: Event;
701
+ /**
702
+ * Illustrates whether the current action needs to be prevented or not.
703
+ */
704
+ cancel?: boolean;
701
705
  }
702
706
  /**
703
707
  * Interface for change event args.
@@ -205,7 +205,7 @@ var ListBox = /** @class */ (function (_super) {
205
205
  new Sortable(this.ulElement, {
206
206
  scope: this.scope,
207
207
  itemClass: 'e-list-item',
208
- dragStart: this.triggerDragStart.bind(this),
208
+ beforeDragStart: this.triggerDragStart.bind(this),
209
209
  drag: this.triggerDrag.bind(this),
210
210
  beforeDrop: this.beforeDragEnd.bind(this),
211
211
  drop: this.dragEnd.bind(this),
@@ -455,11 +455,11 @@ var ListBox = /** @class */ (function (_super) {
455
455
  ListBox.prototype.triggerDragStart = function (args) {
456
456
  var _this = this;
457
457
  var badge;
458
- args = extend(this.getDragArgs(args), { dragSelected: true });
458
+ var extendedArgs = extend(this.getDragArgs(args), { dragSelected: true }, { cancel: false });
459
459
  if (Browser.isIos) {
460
460
  this.list.style.overflow = 'hidden';
461
461
  }
462
- this.trigger('dragStart', args, function (dragEventArgs) {
462
+ this.trigger('dragStart', extendedArgs, function (dragEventArgs) {
463
463
  _this.allowDragAll = dragEventArgs.dragSelected;
464
464
  if (!_this.allowDragAll) {
465
465
  badge = _this.ulElement.getElementsByClassName('e-list-badge')[0];
@@ -467,6 +467,9 @@ var ListBox = /** @class */ (function (_super) {
467
467
  detach(badge);
468
468
  }
469
469
  }
470
+ if (dragEventArgs.cancel) {
471
+ args.cancel = true;
472
+ }
470
473
  });
471
474
  };
472
475
  ListBox.prototype.triggerDrag = function (args) {
@@ -697,7 +700,9 @@ var ListBox = /** @class */ (function (_super) {
697
700
  listObj.liCollections = liColl;
698
701
  listObj.jsonData = extend([], [], jsonData, false);
699
702
  listObj.listData = extend([], [], listData, false);
700
- listObj.sortedData = extend([], [], sortedData, false);
703
+ if (listObj.sortOrder === 'None') {
704
+ listObj.sortedData = extend([], [], sortedData, false);
705
+ }
701
706
  if (this.listData.length === 0) {
702
707
  this.l10nUpdate();
703
708
  }
@@ -385,6 +385,9 @@ var Mention = /** @class */ (function (_super) {
385
385
  this.hidePopup();
386
386
  this.lineBreak = true;
387
387
  }
388
+ else if ((e.key === 'Backspace' || e.key === 'Delete') && this.range && this.range.startOffset !== this.range.endOffset) {
389
+ this.range.deleteContents();
390
+ }
388
391
  return;
389
392
  }
390
393
  if (lastWordRange.includes(this.mentionChar)) {
@@ -1162,7 +1165,9 @@ var Mention = /** @class */ (function (_super) {
1162
1165
  };
1163
1166
  Mention.prototype.scrollTop = function () {
1164
1167
  if (!isNullOrUndefined(this.selectedLI)) {
1165
- var nextOffset = this.selectedLI.offsetTop - this.list.scrollTop;
1168
+ var nextOffset = !isNullOrUndefined(this.fields.groupBy) && !isNullOrUndefined(this.fixedHeaderElement) ?
1169
+ this.selectedLI.offsetTop - (this.list.scrollTop + this.fixedHeaderElement.offsetHeight) :
1170
+ this.selectedLI.offsetTop - this.list.scrollTop;
1166
1171
  nextOffset = this.fields.groupBy && nextOffset;
1167
1172
  var boxRange = (this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop);
1168
1173
  if (this.activeIndex === 0) {
@@ -344,6 +344,15 @@ export interface MultiSelectModel extends DropDownBaseModel{
344
344
  */
345
345
  readonly?: boolean;
346
346
 
347
+ /**
348
+ * Gets or sets a value that indicates whether the Multiselect popup can be resized.
349
+ * When set to `true`, a resize handle appears in the bottom-right corner of the popup,
350
+ * allowing the user to resize the width and height of the popup.
351
+ *
352
+ * @default false
353
+ */
354
+ allowResize?: boolean;
355
+
347
356
  /**
348
357
  * Selects the list item which maps the data `text` field in the component.
349
358
  *
@@ -559,6 +568,28 @@ export interface MultiSelectModel extends DropDownBaseModel{
559
568
  */
560
569
  chipSelection?: EmitType<Object>;
561
570
 
571
+ /**
572
+ * Triggers when the user finishes resizing the Multiselect popup.
573
+ *
574
+ * @event resizeStop
575
+ */
576
+ resizeStop?: EmitType<Object>;
577
+
578
+ /**
579
+ * Triggers continuously while the Multiselect popup is being resized by the user.
580
+ * This event provides live updates on the width and height of the popup.
581
+ *
582
+ * @event resizing
583
+ */
584
+ resizing?: EmitType<Object>;
585
+
586
+ /**
587
+ * Triggers when the user starts resizing the Multiselect popup.
588
+ *
589
+ * @event resizeStart
590
+ */
591
+ resizeStart?: EmitType<Object>;
592
+
562
593
  /**
563
594
  * Triggers event,when user types a text in search box.
564
595
  * > For more details about filtering, refer to [`Filtering`](../../multi-select/filtering) documentation.
@@ -56,8 +56,20 @@ export declare class MultiSelect extends DropDownBase implements IInput {
56
56
  private isClearAllItem;
57
57
  private previousFocusItem;
58
58
  private isRemoveSelection;
59
+ private resizer;
60
+ private storedSelectAllHeight;
61
+ private isResizing;
62
+ private originalHeight;
63
+ private originalWidth;
64
+ private originalMouseX;
65
+ private originalMouseY;
66
+ private resizeHeight;
67
+ private resizeWidth;
59
68
  private currentRemoveValue;
60
69
  private selectedListData;
70
+ private isClearAllAction;
71
+ private isUpdateHeaderHeight;
72
+ private isUpdateFooterHeight;
61
73
  /**
62
74
  * The `fields` property maps the columns of the data table and binds the data to the component.
63
75
  * * text - Maps the text column from data table for each list item.
@@ -365,6 +377,14 @@ export declare class MultiSelect extends DropDownBase implements IInput {
365
377
  * @default false
366
378
  */
367
379
  readonly: boolean;
380
+ /**
381
+ * Gets or sets a value that indicates whether the Multiselect popup can be resized.
382
+ * When set to `true`, a resize handle appears in the bottom-right corner of the popup,
383
+ * allowing the user to resize the width and height of the popup.
384
+ *
385
+ * @default false
386
+ */
387
+ allowResize: boolean;
368
388
  /**
369
389
  * Selects the list item which maps the data `text` field in the component.
370
390
  *
@@ -553,6 +573,25 @@ export declare class MultiSelect extends DropDownBase implements IInput {
553
573
  * @event chipSelection
554
574
  */
555
575
  chipSelection: EmitType<Object>;
576
+ /**
577
+ * Triggers when the user finishes resizing the Multiselect popup.
578
+ *
579
+ * @event resizeStop
580
+ */
581
+ resizeStop: EmitType<Object>;
582
+ /**
583
+ * Triggers continuously while the Multiselect popup is being resized by the user.
584
+ * This event provides live updates on the width and height of the popup.
585
+ *
586
+ * @event resizing
587
+ */
588
+ resizing: EmitType<Object>;
589
+ /**
590
+ * Triggers when the user starts resizing the Multiselect popup.
591
+ *
592
+ * @event resizeStart
593
+ */
594
+ resizeStart: EmitType<Object>;
556
595
  /**
557
596
  * Triggers event,when user types a text in search box.
558
597
  * > For more details about filtering, refer to [`Filtering`](../../multi-select/filtering) documentation.
@@ -831,6 +870,8 @@ export declare class MultiSelect extends DropDownBase implements IInput {
831
870
  private updateRemainingText;
832
871
  private getOverflowVal;
833
872
  private unWireEvent;
873
+ protected resizingWireEvent(): void;
874
+ protected resizingUnWireEvent(): void;
834
875
  private selectAllItem;
835
876
  protected virtualSelectionAll(state: boolean, li: NodeListOf<HTMLElement> | HTMLElement[], event: MouseEvent | KeyboardEventArgs): void;
836
877
  private updateValue;
@@ -918,6 +959,10 @@ export declare class MultiSelect extends DropDownBase implements IInput {
918
959
  * @returns {void}
919
960
  */
920
961
  render(): void;
962
+ protected setResize(): void;
963
+ protected startResizing(event: MouseEvent | TouchEvent): void;
964
+ protected resizePopup(event?: MouseEvent | TouchEvent): void;
965
+ protected stopResizing(event: MouseEvent | TouchEvent): void;
921
966
  private getListHeight;
922
967
  /**
923
968
  * Removes disabled values from the given array.