@progress/kendo-vue-dropdowns 3.14.2 → 3.15.0-dev.202309281301

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 (62) hide show
  1. package/dist/cdn/js/kendo-vue-dropdowns.js +1 -1
  2. package/dist/es/ComboBox/ComboBox.js +244 -42
  3. package/dist/es/ComboBox/ComboBoxProps.d.ts +8 -0
  4. package/dist/es/DropDownList/DropDownList.d.ts +3 -0
  5. package/dist/es/DropDownList/DropDownList.js +197 -43
  6. package/dist/es/DropDownList/DropDownListProps.d.ts +8 -0
  7. package/dist/es/DropDownTree/DropDownTree.js +257 -105
  8. package/dist/es/DropDownTree/DropDownTreeProps.d.ts +8 -0
  9. package/dist/es/MultiSelect/MultiSelect.js +340 -65
  10. package/dist/es/MultiSelect/MultiSelectProps.d.ts +8 -0
  11. package/dist/es/MultiSelectTree/MultiSelectTree.js +345 -127
  12. package/dist/es/MultiSelectTree/MultiSelectTreeProps.d.ts +8 -0
  13. package/dist/es/common/DropDownBase.d.ts +7 -0
  14. package/dist/es/common/DropDownBase.js +13 -1
  15. package/dist/es/common/ListFilter.d.ts +1 -0
  16. package/dist/es/common/ListFilter.js +31 -25
  17. package/dist/es/common/constants.d.ts +4 -0
  18. package/dist/es/common/constants.js +4 -0
  19. package/dist/es/messages/main.d.ts +10 -0
  20. package/dist/es/messages/main.js +10 -0
  21. package/dist/es/package-metadata.js +1 -1
  22. package/dist/esm/ComboBox/ComboBox.js +244 -42
  23. package/dist/esm/ComboBox/ComboBoxProps.d.ts +8 -0
  24. package/dist/esm/DropDownList/DropDownList.d.ts +3 -0
  25. package/dist/esm/DropDownList/DropDownList.js +197 -43
  26. package/dist/esm/DropDownList/DropDownListProps.d.ts +8 -0
  27. package/dist/esm/DropDownTree/DropDownTree.js +257 -105
  28. package/dist/esm/DropDownTree/DropDownTreeProps.d.ts +8 -0
  29. package/dist/esm/MultiSelect/MultiSelect.js +340 -65
  30. package/dist/esm/MultiSelect/MultiSelectProps.d.ts +8 -0
  31. package/dist/esm/MultiSelectTree/MultiSelectTree.js +345 -127
  32. package/dist/esm/MultiSelectTree/MultiSelectTreeProps.d.ts +8 -0
  33. package/dist/esm/common/DropDownBase.d.ts +7 -0
  34. package/dist/esm/common/DropDownBase.js +13 -1
  35. package/dist/esm/common/ListFilter.d.ts +1 -0
  36. package/dist/esm/common/ListFilter.js +31 -25
  37. package/dist/esm/common/constants.d.ts +4 -0
  38. package/dist/esm/common/constants.js +4 -0
  39. package/dist/esm/messages/main.d.ts +10 -0
  40. package/dist/esm/messages/main.js +10 -0
  41. package/dist/esm/package-metadata.js +1 -1
  42. package/dist/npm/ComboBox/ComboBox.js +242 -40
  43. package/dist/npm/ComboBox/ComboBoxProps.d.ts +8 -0
  44. package/dist/npm/DropDownList/DropDownList.d.ts +3 -0
  45. package/dist/npm/DropDownList/DropDownList.js +195 -41
  46. package/dist/npm/DropDownList/DropDownListProps.d.ts +8 -0
  47. package/dist/npm/DropDownTree/DropDownTree.js +254 -102
  48. package/dist/npm/DropDownTree/DropDownTreeProps.d.ts +8 -0
  49. package/dist/npm/MultiSelect/MultiSelect.js +338 -63
  50. package/dist/npm/MultiSelect/MultiSelectProps.d.ts +8 -0
  51. package/dist/npm/MultiSelectTree/MultiSelectTree.js +343 -125
  52. package/dist/npm/MultiSelectTree/MultiSelectTreeProps.d.ts +8 -0
  53. package/dist/npm/common/DropDownBase.d.ts +7 -0
  54. package/dist/npm/common/DropDownBase.js +12 -0
  55. package/dist/npm/common/ListFilter.d.ts +1 -0
  56. package/dist/npm/common/ListFilter.js +31 -25
  57. package/dist/npm/common/constants.d.ts +4 -0
  58. package/dist/npm/common/constants.js +10 -0
  59. package/dist/npm/messages/main.d.ts +10 -0
  60. package/dist/npm/messages/main.js +11 -1
  61. package/dist/npm/package-metadata.js +1 -1
  62. package/package.json +12 -9
@@ -19,7 +19,7 @@ var ref = allVue.ref;
19
19
  var inject = allVue.inject;
20
20
  import DropDownBase from '../common/DropDownBase';
21
21
  import { GroupStickyHeader } from '../common/GroupStickyHeader';
22
- import { guid, classNames, Keys, templateRendering, getListeners, getTemplate, kendoThemeMaps, getRef, setRef, Icon } from '@progress/kendo-vue-common';
22
+ import { guid, classNames, Keys, templateRendering, getListeners, kendoThemeMaps, getRef, setRef, Icon, canUseDOM } from '@progress/kendo-vue-common';
23
23
  import { Button as KButton } from '@progress/kendo-vue-buttons';
24
24
  var sizeMap = kendoThemeMaps.sizeMap,
25
25
  roundedMap = kendoThemeMaps.roundedMap;
@@ -30,7 +30,10 @@ import { List } from '../common/List';
30
30
  import { ClearButton } from '../common/ClearButton';
31
31
  import { provideLocalizationService } from '@progress/kendo-vue-intl';
32
32
  import { expandButton, messages } from '../messages/main';
33
- import { caretAltDownIcon } from '@progress/kendo-svg-icons';
33
+ import { caretAltDownIcon, xIcon } from '@progress/kendo-svg-icons';
34
+ import { MOBILE_SMALL_DEVICE, MOBILE_MEDIUM_DEVICE } from '../common/constants';
35
+ import { ActionSheet } from '@progress/kendo-vue-layout';
36
+ import { ListFilter } from '../common/ListFilter';
34
37
  var VALIDATION_MESSAGE = 'Please enter a valid value!';
35
38
  /**
36
39
  * @hidden
@@ -178,6 +181,14 @@ var ComboBoxVue2 = {
178
181
  },
179
182
  groupField: {
180
183
  type: String
184
+ },
185
+ adaptive: {
186
+ type: Boolean,
187
+ default: undefined
188
+ },
189
+ adaptiveTitle: {
190
+ type: String,
191
+ default: undefined
181
192
  }
182
193
  },
183
194
  inject: {
@@ -202,10 +213,13 @@ var ComboBoxVue2 = {
202
213
  suggested: '',
203
214
  group: undefined,
204
215
  isScrolling: false,
205
- itemHeight: 0
216
+ itemHeight: 0,
217
+ state: undefined,
218
+ windowWidth: 0
206
219
  };
207
220
  },
208
221
  created: function created() {
222
+ this.observer = null;
209
223
  this.valueDuringOnChange = undefined;
210
224
  this.currentText = undefined;
211
225
  this.currentValue = undefined;
@@ -232,6 +246,10 @@ var ComboBoxVue2 = {
232
246
  };
233
247
  },
234
248
  mounted: function mounted() {
249
+ this.observer = canUseDOM && new ResizeObserver(this.calculateMedia);
250
+ if ((document === null || document === void 0 ? void 0 : document.body) && this.observer) {
251
+ this.observer.observe(document.body);
252
+ }
235
253
  this.hasMounted = true;
236
254
  // @ts-ignore
237
255
  this.input = this.v3 ? this.inputRef.input : this.$refs.input.input;
@@ -240,6 +258,11 @@ var ComboBoxVue2 = {
240
258
  this.base.didMount();
241
259
  this.setValidity();
242
260
  },
261
+ destroyed: !!isV3 ? undefined : function () {
262
+ if (this.observer) {
263
+ this.observer.disconnect();
264
+ }
265
+ },
243
266
  updated: function updated() {
244
267
  var _a;
245
268
  var _b = this.$props,
@@ -249,7 +272,7 @@ var ComboBoxVue2 = {
249
272
  virtual = _b.virtual,
250
273
  groupField = _b.groupField,
251
274
  textField = _b.textField;
252
- var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
275
+ var opened = this.isOpen;
253
276
  var prevOpened = this.prevOpened !== undefined ? this.prevOpened : this.prevCurrentOpened;
254
277
  var opening = !prevOpened && opened;
255
278
  var closing = prevOpened && !opened;
@@ -331,6 +354,13 @@ var ComboBoxVue2 = {
331
354
  this.virtualTotalHasChanged = true;
332
355
  }
333
356
  this.virtualHasChanged = true;
357
+ },
358
+ isOpen: function isOpen() {
359
+ var _this = this;
360
+ setTimeout(function () {
361
+ var listItem = document.querySelector('.k-list-item');
362
+ _this.itemHeight = _this.base.getListItemHeight(listItem);
363
+ }, 100);
334
364
  }
335
365
  },
336
366
  computed: {
@@ -358,6 +388,30 @@ var ComboBoxVue2 = {
358
388
  'k-rtl': this.$props.dir === 'rtl'
359
389
  };
360
390
  }
391
+ },
392
+ isOpen: {
393
+ get: function get() {
394
+ return this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
395
+ }
396
+ },
397
+ animationStyles: {
398
+ get: function get() {
399
+ return this.windowWidth <= MOBILE_SMALL_DEVICE ? {
400
+ top: 0,
401
+ width: '100%',
402
+ height: '100%'
403
+ } : undefined;
404
+ }
405
+ },
406
+ classNameAdaptive: {
407
+ get: function get() {
408
+ return this.windowWidth <= MOBILE_SMALL_DEVICE ? 'k-adaptive-actionsheet k-actionsheet-fullscreen' : 'k-adaptive-actionsheet k-actionsheet-bottom';
409
+ }
410
+ },
411
+ adaptiveState: {
412
+ get: function get() {
413
+ return this.windowWidth <= MOBILE_MEDIUM_DEVICE && this.$props.adaptive;
414
+ }
361
415
  }
362
416
  },
363
417
  methods: {
@@ -451,8 +505,13 @@ var ComboBoxVue2 = {
451
505
  },
452
506
  toggleBtnClick: function toggleBtnClick(event) {
453
507
  var state = this.base.initState();
508
+ var opened = this.isOpen;
509
+ var renderAdaptive = this.adaptiveState;
454
510
  state.event = event;
455
511
  this.base.togglePopup(state);
512
+ if (!opened && renderAdaptive) {
513
+ this.base.filterChanged('', state);
514
+ }
456
515
  this.applyState(state);
457
516
  },
458
517
  applyValueOnEnter: function applyValueOnEnter(value, state) {
@@ -462,7 +521,7 @@ var ComboBoxVue2 = {
462
521
  dataItems = _c === void 0 ? [] : _c,
463
522
  textField = _b.textField,
464
523
  allowCustom = _b.allowCustom;
465
- var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
524
+ var opened = this.isOpen;
466
525
  var currentValueText = getItemValue(this.computedValue(), textField);
467
526
  var valueIndex = currentValueText === value ? this.index : getItemIndexByText(dataItems, value, textField);
468
527
  var itemSelected = valueIndex !== -1;
@@ -496,11 +555,11 @@ var ComboBoxVue2 = {
496
555
  dataItems = _c === void 0 ? [] : _c,
497
556
  textField = _b.textField,
498
557
  allowCustom = _b.allowCustom;
499
- var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
558
+ var opened = this.isOpen;
500
559
  var valueItemText = getItemValue(this.computedValue(), textField);
501
560
  this.suggested = '';
502
561
  if (text === valueItemText || text === '' && !isPresent(valueItemText)) {
503
- if (opened) {
562
+ if (opened && !this.adaptiveState) {
504
563
  this.base.togglePopup(state);
505
564
  }
506
565
  return this.applyState(state);
@@ -519,13 +578,13 @@ var ComboBoxVue2 = {
519
578
  state.data.currentText = undefined;
520
579
  this.base.filterChanged('', state);
521
580
  }
522
- if (opened) {
581
+ if (opened && !this.adaptiveState) {
523
582
  this.base.togglePopup(state);
524
583
  }
525
584
  this.applyState(state);
526
585
  },
527
586
  selectFocusedItem: function selectFocusedItem(text, state) {
528
- var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
587
+ var opened = this.isOpen;
529
588
  var _a = this.$props,
530
589
  _b = _a.dataItems,
531
590
  dataItems = _b === void 0 ? [] : _b,
@@ -576,7 +635,7 @@ var ComboBoxVue2 = {
576
635
  this.isScrolling = false;
577
636
  }
578
637
  var keyCode = event.keyCode;
579
- var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
638
+ var opened = this.isOpen;
580
639
  var state = this.base.initState();
581
640
  state.event = event;
582
641
  if (!event.altKey && (keyCode === Keys.up || keyCode === Keys.down)) {
@@ -597,6 +656,10 @@ var ComboBoxVue2 = {
597
656
  event.preventDefault();
598
657
  this.applyValueOnEnter(event.currentTarget.value, state);
599
658
  } else if (keyCode === Keys.esc) {
659
+ if (this.adaptiveState) {
660
+ this.toggleBtnClick(event); // Handle the closing on "Esc" key press in adaptive mode
661
+ }
662
+
600
663
  togglePopup();
601
664
  }
602
665
  } else {
@@ -610,7 +673,7 @@ var ComboBoxVue2 = {
610
673
  inputOnChange: function inputOnChange(event) {
611
674
  var state = this.base.initState();
612
675
  state.event = event;
613
- var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
676
+ var opened = this.isOpen;
614
677
  var input = event.currentTarget;
615
678
  var value = input.value;
616
679
  if (this.$props.suggest) {
@@ -656,7 +719,7 @@ var ComboBoxVue2 = {
656
719
  state.data.currentText = undefined;
657
720
  }
658
721
  this.triggerOnChange(null, state);
659
- var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
722
+ var opened = this.isOpen;
660
723
  if (opened) {
661
724
  this.base.togglePopup(state);
662
725
  }
@@ -714,6 +777,12 @@ var ComboBoxVue2 = {
714
777
  this.base.applyState(state);
715
778
  this.valueDuringOnChange = undefined;
716
779
  },
780
+ calculateMedia: function calculateMedia(entries) {
781
+ for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
782
+ var entry = entries_1[_i];
783
+ this.windowWidth = entry.target.clientWidth;
784
+ }
785
+ },
717
786
  repositionPopup: function repositionPopup() {
718
787
  this.base.repositionPopup();
719
788
  },
@@ -727,6 +796,7 @@ var ComboBoxVue2 = {
727
796
  var groupField = this.$props.groupField;
728
797
  var _b = this.$props.dataItems,
729
798
  dataItems = _b === void 0 ? [] : _b;
799
+ var group;
730
800
  if (!groupField || !dataItems.length) {
731
801
  return;
732
802
  }
@@ -735,8 +805,8 @@ var ComboBoxVue2 = {
735
805
  var scrollTop = target.scrollTop - vs.skip * itemHeight;
736
806
  if (groupField) {
737
807
  dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
808
+ group = dataItems[0][groupField];
738
809
  }
739
- var group = dataItems[0][groupField];
740
810
  for (var i = 1; i < dataItems.length; i++) {
741
811
  if (itemHeight * i > scrollTop) {
742
812
  break;
@@ -753,6 +823,7 @@ var ComboBoxVue2 = {
753
823
  },
754
824
  render: function render(createElement) {
755
825
  var _a;
826
+ var _this = this;
756
827
  var h = gh || createElement;
757
828
  var _b = this.$props,
758
829
  dir = _b.dir,
@@ -769,7 +840,12 @@ var ComboBoxVue2 = {
769
840
  virtual = _b.virtual,
770
841
  size = _b.size,
771
842
  fillMode = _b.fillMode,
772
- rounded = _b.rounded;
843
+ rounded = _b.rounded,
844
+ adaptiveTitle = _b.adaptiveTitle,
845
+ header = _b.header,
846
+ footer = _b.footer,
847
+ groupStickyHeaderItemRender = _b.groupStickyHeaderItemRender,
848
+ placeholder = _b.placeholder;
773
849
  var focused = this.currentFocused;
774
850
  var isValid = !this.$props.validityStyles || this.validity().valid;
775
851
  var text = this.$props.filter !== undefined ? this.$props.filter : this.currentText;
@@ -784,12 +860,146 @@ var ComboBoxVue2 = {
784
860
  height: '200px'
785
861
  }, this.$props.popupSettings);
786
862
  var ariaLabelExpandButton = provideLocalizationService(this).toLanguageString(expandButton, messages[expandButton]);
863
+ var opened = this.isOpen;
864
+ var renderAdaptive = this.adaptiveState;
787
865
  vs.enabled = virtual !== undefined;
788
866
  if (virtual !== undefined) {
789
867
  vs.skip = virtual.skip;
790
868
  vs.total = virtual.total;
791
869
  vs.pageSize = virtual.pageSize;
792
870
  }
871
+ if (this.group === undefined && this.$props.groupField !== undefined) {
872
+ this.group = getItemValue(this.$props.dataItems[0], this.$props.groupField);
873
+ }
874
+ var handleMobileFilterChange = function handleMobileFilterChange(event) {
875
+ var state = _this.base.initState();
876
+ state.event = event;
877
+ var eventTargetValue = event.event.target.value;
878
+ state.data.text = eventTargetValue;
879
+ _this.base.filterChanged(eventTargetValue, state);
880
+ _this.applyState(state);
881
+ };
882
+ var adaptiveActionSheetHeaderTemplateDef = function adaptiveActionSheetHeaderTemplateDef() {
883
+ return [h("div", {
884
+ "class": "k-actionsheet-titlebar-group k-hbox"
885
+ }, [h("div", {
886
+ "class": "k-actionsheet-title"
887
+ }, [h("div", {
888
+ "class": "k-text-center"
889
+ }, [adaptiveTitle]), placeholder && h("div", {
890
+ "class": "k-actionsheet-subtitle k-text-center"
891
+ }, [placeholder])]), h("div", {
892
+ "class": "k-actionsheet-actions"
893
+ }, [h(KButton, {
894
+ tabindex: 5,
895
+ attrs: this.v3 ? undefined : {
896
+ tabindex: 5,
897
+ "aria-label": "Cancel",
898
+ "aria-disabled": "false",
899
+ type: "button",
900
+ fillMode: "flat",
901
+ icon: "x",
902
+ svgIcon: xIcon
903
+ },
904
+ "aria-label": "Cancel",
905
+ "aria-disabled": "false",
906
+ type: "button",
907
+ fillMode: "flat",
908
+ onClick: _this.toggleBtnClick,
909
+ on: this.v3 ? undefined : {
910
+ "click": _this.toggleBtnClick
911
+ },
912
+ icon: "x",
913
+ svgIcon: xIcon
914
+ })])]), h("div", {
915
+ "class": "k-actionsheet-titlebar-group k-actionsheet-filter"
916
+ }, [renderMobileListFilter.call(_this)])];
917
+ };
918
+ var adaptiveActionSheetHeaderTemplate = templateRendering.call(this, adaptiveActionSheetHeaderTemplateDef, getListeners.call(this));
919
+ var adaptiveActionSheetContentTemplateDef = function adaptiveActionSheetContentTemplateDef() {
920
+ var _a;
921
+ var headerToRender = base.getTemplateDef.call(_this, header, h);
922
+ var footerToRender = base.getTemplateDef.call(_this, footer, h);
923
+ var groupStickyHeaderTemplate = templateRendering.call(_this, groupStickyHeaderItemRender, getListeners.call(_this));
924
+ var dataItems = _this.$props.dataItems || [];
925
+ return h("div", {
926
+ "class": "k-list-container"
927
+ }, [headerToRender && h("div", {
928
+ "class": "k-list-header"
929
+ }, [headerToRender]), h("div", {
930
+ "class": classNames('k-list', (_a = {}, _a["k-list-".concat(sizeMap[size] || size)] = !renderAdaptive ? size : false, _a['k-list-lg'] = renderAdaptive ? true : false, _a['k-virtual-list'] = vs.enabled, _a))
931
+ }, [header && h("div", {
932
+ "class": "k-list-header"
933
+ }, [header]), _this.group && dataItems.length !== 0 && h(GroupStickyHeader, {
934
+ group: _this.group,
935
+ attrs: this.v3 ? undefined : {
936
+ group: _this.group,
937
+ render: groupStickyHeaderTemplate
938
+ },
939
+ render: groupStickyHeaderTemplate
940
+ }), renderList.call(_this), footerToRender && h("div", {
941
+ className: "k-list-footer",
942
+ attrs: this.v3 ? undefined : {
943
+ className: "k-list-footer"
944
+ }
945
+ }, [footerToRender])])]);
946
+ };
947
+ var adaptiveActionSheetContentTemplate = templateRendering.call(this, adaptiveActionSheetContentTemplateDef, getListeners.call(this));
948
+ var renderAdaptiveListContainer = function renderAdaptiveListContainer() {
949
+ return h(ActionSheet, {
950
+ expand: opened,
951
+ attrs: this.v3 ? undefined : {
952
+ expand: opened,
953
+ animation: true,
954
+ animationStyles: this.animationStyles,
955
+ className: this.classNameAdaptive,
956
+ contentClassName: '!k-overflow-hidden',
957
+ header: adaptiveActionSheetHeaderTemplate,
958
+ content: adaptiveActionSheetContentTemplate,
959
+ navigatableElements: ['input.k-input-inner', '.k-actionsheet-actions > button']
960
+ },
961
+ animation: true,
962
+ animationStyles: this.animationStyles,
963
+ className: this.classNameAdaptive,
964
+ contentClassName: '!k-overflow-hidden',
965
+ header: adaptiveActionSheetHeaderTemplate,
966
+ content: adaptiveActionSheetContentTemplate,
967
+ onClose: this.toggleBtnClick,
968
+ on: this.v3 ? undefined : {
969
+ "close": this.toggleBtnClick
970
+ },
971
+ navigatableElements: ['input.k-input-inner', '.k-actionsheet-actions > button']
972
+ });
973
+ };
974
+ var renderMobileListFilter = function renderMobileListFilter() {
975
+ var state = this.base.initState();
976
+ var mobileText = state.data.text;
977
+ return h(ListFilter, {
978
+ adaptiveMode: true,
979
+ attrs: this.v3 ? undefined : {
980
+ adaptiveMode: true,
981
+ value: mobileText,
982
+ size: this.$props.size,
983
+ rounded: this.$props.rounded,
984
+ fillMode: this.$props.fillMode
985
+ },
986
+ value: mobileText,
987
+ ref: 'filterInput',
988
+ onChange: function onChange(ev) {
989
+ return handleMobileFilterChange(ev);
990
+ },
991
+ on: this.v3 ? undefined : {
992
+ "change": function onChange(ev) {
993
+ return handleMobileFilterChange(ev);
994
+ },
995
+ "keydown": this.onInputKeyDown
996
+ },
997
+ onKeydown: this.onInputKeyDown,
998
+ size: this.$props.size,
999
+ rounded: this.$props.rounded,
1000
+ fillMode: this.$props.fillMode
1001
+ });
1002
+ };
793
1003
  var renderList = function renderList() {
794
1004
  var _this2 = this;
795
1005
  var _a;
@@ -806,7 +1016,6 @@ var ComboBoxVue2 = {
806
1016
  };
807
1017
  }
808
1018
  var skip = virtual.skip;
809
- var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
810
1019
  var translate = "translateY(".concat(vs.translate, "px)");
811
1020
  var focusedIndex = opened ? this.getFocusedIndex() : undefined;
812
1021
  var value = isPresent(text) && text !== selectedItemText ? null : this.computedValue();
@@ -827,7 +1036,7 @@ var ComboBoxVue2 = {
827
1036
  valueField: dataItemKey,
828
1037
  optionsGuid: base.guid,
829
1038
  wrapperStyle: {
830
- maxHeight: popupSettings.height
1039
+ maxHeight: !renderAdaptive ? popupSettings.height : undefined
831
1040
  },
832
1041
  wrapperCssClass: classNames('k-list-content', (_a = {}, _a['k-list-scroller'] = !this.$props.virtual, _a)),
833
1042
  listStyle: vs.enabled ? {
@@ -848,7 +1057,7 @@ var ComboBoxVue2 = {
848
1057
  optionsGuid: base.guid,
849
1058
  ref: 'list',
850
1059
  wrapperStyle: {
851
- maxHeight: popupSettings.height
1060
+ maxHeight: !renderAdaptive ? popupSettings.height : undefined
852
1061
  },
853
1062
  wrapperCssClass: classNames('k-list-content', (_a = {}, _a['k-list-scroller'] = !this.$props.virtual, _a)),
854
1063
  listStyle: vs.enabled ? {
@@ -880,18 +1089,9 @@ var ComboBoxVue2 = {
880
1089
  var renderListContainer = function renderListContainer() {
881
1090
  var _this3 = this;
882
1091
  var _a;
883
- var headerTemplate = templateRendering.call(this, this.$props.header, getListeners.call(this));
884
- var footerTemplate = templateRendering.call(this, this.$props.footer, getListeners.call(this));
885
1092
  var groupStickyHeaderTemplate = templateRendering.call(this, this.$props.groupStickyHeaderItemRender, getListeners.call(this));
886
- var header = getTemplate.call(this, {
887
- h: h,
888
- template: headerTemplate
889
- });
890
- var footer = getTemplate.call(this, {
891
- h: h,
892
- template: footerTemplate
893
- });
894
- var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
1093
+ var headerListContainer = base.getTemplateDef.call(this, header);
1094
+ var footerListContainer = base.getTemplateDef.call(this, footer);
895
1095
  var popupWidth = popupSettings.width !== undefined ? popupSettings.width : base.popupWidth;
896
1096
  var dataItems = this.$props.dataItems || [];
897
1097
  if (this.group === undefined && this.$props.groupField !== undefined) {
@@ -928,36 +1128,35 @@ var ComboBoxVue2 = {
928
1128
  }),
929
1129
  dir: dir !== undefined ? dir : this.base.dirCalculated
930
1130
  }, this.v3 ? function () {
931
- return [header && h("div", {
1131
+ return [headerListContainer && h("div", {
932
1132
  "class": "k-list-header"
933
- }, [header]), _this3.group && dataItems.length !== 0 && h(GroupStickyHeader, {
1133
+ }, [headerListContainer]), _this3.group && dataItems.length !== 0 && h(GroupStickyHeader, {
934
1134
  group: _this3.group,
935
1135
  attrs: _this3.v3 ? undefined : {
936
1136
  group: _this3.group,
937
1137
  render: groupStickyHeaderTemplate
938
1138
  },
939
1139
  render: groupStickyHeaderTemplate
940
- }), renderList.call(_this3), footer && h("div", {
1140
+ }), renderList.call(_this3), footerListContainer && h("div", {
941
1141
  "class": "k-list-footer"
942
- }, [footer])];
943
- } : [header && h("div", {
1142
+ }, [footerListContainer])];
1143
+ } : [headerListContainer && h("div", {
944
1144
  "class": "k-list-header"
945
- }, [header]), _this3.group && dataItems.length !== 0 && h(GroupStickyHeader, {
1145
+ }, [headerListContainer]), _this3.group && dataItems.length !== 0 && h(GroupStickyHeader, {
946
1146
  group: _this3.group,
947
1147
  attrs: _this3.v3 ? undefined : {
948
1148
  group: _this3.group,
949
1149
  render: groupStickyHeaderTemplate
950
1150
  },
951
1151
  render: groupStickyHeaderTemplate
952
- }), renderList.call(_this3), footer && h("div", {
1152
+ }), renderList.call(_this3), footerListContainer && h("div", {
953
1153
  "class": "k-list-footer"
954
- }, [footer])])
1154
+ }, [footerListContainer])])
955
1155
  );
956
1156
  };
957
1157
  var renderSearchBar = function renderSearchBar(searchText, searchId) {
958
1158
  var _this = this;
959
1159
  var _a = this.$props,
960
- placeholder = _a.placeholder,
961
1160
  tabIndex = _a.tabIndex,
962
1161
  _b = _a.dataItems,
963
1162
  dataItems = _b === void 0 ? [] : _b,
@@ -967,7 +1166,6 @@ var ComboBoxVue2 = {
967
1166
  skip: 0
968
1167
  };
969
1168
  }
970
- var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
971
1169
  var value = this.computedValue();
972
1170
  var selectedIndex = Math.max(0, dataItems.findIndex(function (i) {
973
1171
  return areSame(i, value, dataItemKey);
@@ -1022,7 +1220,7 @@ var ComboBoxVue2 = {
1022
1220
  })
1023
1221
  );
1024
1222
  };
1025
- var combobox = h("span", {
1223
+ var comboboxDefault = h("span", {
1026
1224
  "class": classNames('k-combobox k-input', (_a = {}, _a["k-input-".concat(sizeMap[size] || size)] = size, _a["k-rounded-".concat(roundedMap[rounded] || rounded)] = rounded, _a["k-input-".concat(fillMode)] = fillMode, _a['k-invalid'] = !isValid, _a['k-loading'] = loading, _a['k-required'] = this.required, _a['k-disabled'] = disabled, _a['k-focus'] = focused && !disabled, _a), className),
1027
1225
  ref: setRef(this, 'kendoAnchor', this.anchor),
1028
1226
  style: !label ? style : __assign(__assign({}, style), {
@@ -1081,7 +1279,11 @@ var ComboBoxVue2 = {
1081
1279
  onMousedown: function mousedown(e) {
1082
1280
  return e.preventDefault();
1083
1281
  }
1084
- }), renderListContainer.call(this)]);
1282
+ }), !renderAdaptive && renderListContainer.call(this)]);
1283
+ // The following one combines the default rendering of the Combobox and the Adaptive rendering.
1284
+ // This is needed because of Vue 2 specifics
1285
+ var combobox = [comboboxDefault, renderAdaptive && renderAdaptiveListContainer.call(this)];
1286
+ var comboboxToRender = isV3 ? combobox : this.$props.adaptive ? h("span", [combobox]) : comboboxDefault;
1085
1287
  return label ? h("span", {
1086
1288
  "class": this.spanClassNames,
1087
1289
  onFocusin: this.handleFocus,
@@ -1092,7 +1294,7 @@ var ComboBoxVue2 = {
1092
1294
  attrs: this.v3 ? undefined : {
1093
1295
  dir: this.$props.dir
1094
1296
  }
1095
- }, [combobox, this.$props.label ? id ? h("label", {
1297
+ }, [comboboxToRender, this.$props.label ? id ? h("label", {
1096
1298
  "for": id,
1097
1299
  attrs: this.v3 ? undefined : {
1098
1300
  "for": id
@@ -1100,7 +1302,7 @@ var ComboBoxVue2 = {
1100
1302
  "class": "k-label"
1101
1303
  }, [this.$props.label]) : h("span", {
1102
1304
  "class": "k-label"
1103
- }, [this.$props.label]) : null]) : combobox;
1305
+ }, [this.$props.label]) : null]) : comboboxToRender;
1104
1306
  }
1105
1307
  };
1106
1308
  /**
@@ -266,4 +266,12 @@ export interface ComboBoxProps extends FormComponentProps {
266
266
  * Fires when a ComboBox sticky group header item is about to be rendered. Used to override the default appearance of the sticky group header of the component.
267
267
  */
268
268
  groupStickyHeaderItemRender?: any;
269
+ /**
270
+ * Provides different rendering of the popup element based on the screen dimensions ([see example]({% slug adaptive_rendering_combobox %})).
271
+ */
272
+ adaptive?: boolean;
273
+ /**
274
+ * Specifies the text that is rendered as title in the adaptive popup ([see example]({% slug adaptive_rendering_combobox %})).
275
+ */
276
+ adaptiveTitle?: string;
269
277
  }
@@ -83,6 +83,9 @@ export interface DropDownListComputed {
83
83
  [key: string]: any;
84
84
  spanClassNames: any;
85
85
  index: number;
86
+ isOpen: boolean;
87
+ classNameAdaptive: string;
88
+ animationStyles: object | undefined;
86
89
  }
87
90
  /**
88
91
  * @hidden