@progress/kendo-vue-dropdowns 3.10.2 → 3.11.0-dev.202305230751

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 (83) hide show
  1. package/dist/cdn/js/kendo-vue-dropdowns.js +1 -1
  2. package/dist/es/AutoComplete/AutoComplete.js +115 -15
  3. package/dist/es/AutoComplete/AutoCompleteProps.d.ts +12 -0
  4. package/dist/es/ComboBox/ComboBox.js +115 -16
  5. package/dist/es/ComboBox/ComboBoxProps.d.ts +12 -0
  6. package/dist/es/DropDownList/DropDownList.js +101 -14
  7. package/dist/es/DropDownList/DropDownListProps.d.ts +12 -0
  8. package/dist/es/DropDownTree/DropDownTree.d.ts +49 -1
  9. package/dist/es/DropDownTree/DropDownTree.js +863 -638
  10. package/dist/es/DropDownTree/DropDownTreeProps.d.ts +19 -8
  11. package/dist/es/MultiSelect/MultiSelect.js +122 -28
  12. package/dist/es/MultiSelect/MultiSelectProps.d.ts +12 -0
  13. package/dist/es/MultiSelectTree/MultiSelectTree.js +12 -12
  14. package/dist/es/common/DropDownBase.d.ts +2 -0
  15. package/dist/es/common/DropDownBase.js +20 -0
  16. package/dist/es/common/GroupStickyHeader.d.ts +29 -0
  17. package/dist/es/common/GroupStickyHeader.js +59 -0
  18. package/dist/es/common/List.d.ts +2 -0
  19. package/dist/es/common/List.js +53 -25
  20. package/dist/es/common/ListFilter.js +47 -25
  21. package/dist/es/common/ListGroupItem.d.ts +41 -0
  22. package/dist/es/common/ListGroupItem.js +71 -0
  23. package/dist/es/common/settings.d.ts +1 -0
  24. package/dist/es/main.d.ts +2 -1
  25. package/dist/es/main.js +2 -1
  26. package/dist/es/package-metadata.js +1 -1
  27. package/dist/esm/AutoComplete/AutoComplete.js +115 -15
  28. package/dist/esm/AutoComplete/AutoCompleteProps.d.ts +12 -0
  29. package/dist/esm/ComboBox/ComboBox.js +115 -16
  30. package/dist/esm/ComboBox/ComboBoxProps.d.ts +12 -0
  31. package/dist/esm/DropDownList/DropDownList.js +101 -14
  32. package/dist/esm/DropDownList/DropDownListProps.d.ts +12 -0
  33. package/dist/esm/DropDownTree/DropDownTree.d.ts +49 -1
  34. package/dist/esm/DropDownTree/DropDownTree.js +863 -638
  35. package/dist/esm/DropDownTree/DropDownTreeProps.d.ts +19 -8
  36. package/dist/esm/MultiSelect/MultiSelect.js +122 -28
  37. package/dist/esm/MultiSelect/MultiSelectProps.d.ts +12 -0
  38. package/dist/esm/MultiSelectTree/MultiSelectTree.js +12 -12
  39. package/dist/esm/common/DropDownBase.d.ts +2 -0
  40. package/dist/esm/common/DropDownBase.js +20 -0
  41. package/dist/esm/common/GroupStickyHeader.d.ts +29 -0
  42. package/dist/esm/common/GroupStickyHeader.js +59 -0
  43. package/dist/esm/common/List.d.ts +2 -0
  44. package/dist/esm/common/List.js +53 -25
  45. package/dist/esm/common/ListFilter.js +47 -25
  46. package/dist/esm/common/ListGroupItem.d.ts +41 -0
  47. package/dist/esm/common/ListGroupItem.js +71 -0
  48. package/dist/esm/common/settings.d.ts +1 -0
  49. package/dist/esm/main.d.ts +2 -1
  50. package/dist/esm/main.js +2 -1
  51. package/dist/esm/package-metadata.js +1 -1
  52. package/dist/npm/AutoComplete/AutoComplete.js +114 -14
  53. package/dist/npm/AutoComplete/AutoCompleteProps.d.ts +12 -0
  54. package/dist/npm/ComboBox/ComboBox.js +115 -16
  55. package/dist/npm/ComboBox/ComboBoxProps.d.ts +12 -0
  56. package/dist/npm/DropDownList/DropDownList.js +101 -14
  57. package/dist/npm/DropDownList/DropDownListProps.d.ts +12 -0
  58. package/dist/npm/DropDownTree/DropDownTree.d.ts +49 -1
  59. package/dist/npm/DropDownTree/DropDownTree.js +868 -639
  60. package/dist/npm/DropDownTree/DropDownTreeProps.d.ts +19 -8
  61. package/dist/npm/MultiSelect/MultiSelect.js +122 -28
  62. package/dist/npm/MultiSelect/MultiSelectProps.d.ts +12 -0
  63. package/dist/npm/MultiSelectTree/MultiSelectTree.js +12 -12
  64. package/dist/npm/common/DropDownBase.d.ts +2 -0
  65. package/dist/npm/common/DropDownBase.js +20 -0
  66. package/dist/npm/common/GroupStickyHeader.d.ts +29 -0
  67. package/dist/npm/common/GroupStickyHeader.js +66 -0
  68. package/dist/npm/common/List.d.ts +2 -0
  69. package/dist/npm/common/List.js +52 -24
  70. package/dist/npm/common/ListFilter.js +47 -25
  71. package/dist/npm/common/ListGroupItem.d.ts +41 -0
  72. package/dist/npm/common/ListGroupItem.js +78 -0
  73. package/dist/npm/common/settings.d.ts +1 -0
  74. package/dist/npm/main.d.ts +2 -1
  75. package/dist/npm/main.js +3 -1
  76. package/dist/npm/package-metadata.js +1 -1
  77. package/package.json +10 -8
  78. package/dist/es/DropDownTree/useDropdownWidth.d.ts +0 -4
  79. package/dist/es/DropDownTree/useDropdownWidth.js +0 -10
  80. package/dist/esm/DropDownTree/useDropdownWidth.d.ts +0 -4
  81. package/dist/esm/DropDownTree/useDropdownWidth.js +0 -10
  82. package/dist/npm/DropDownTree/useDropdownWidth.d.ts +0 -4
  83. package/dist/npm/DropDownTree/useDropdownWidth.js +0 -17
@@ -6,7 +6,8 @@ var isV3 = allVue.version && allVue.version[0] === '3';
6
6
  var ref = allVue.ref;
7
7
  var inject = allVue.inject;
8
8
  import { ListItem } from './ListItem';
9
- import { areSame } from './utils';
9
+ import { ListGroupItem } from './ListGroupItem';
10
+ import { areSame, getItemValue } from './utils';
10
11
  import { getTemplate, getDefaultSlots, setRef, getRef } from '@progress/kendo-vue-common';
11
12
  import { provideLocalizationService } from '@progress/kendo-vue-intl';
12
13
  import { messages, nodata } from '../messages/main';
@@ -38,8 +39,10 @@ var ListVue2 = {
38
39
  default: true
39
40
  },
40
41
  itemRender: [String, Function, Object],
42
+ groupHeaderItemRender: [String, Function, Object],
41
43
  noDataRender: [String, Function, Object],
42
- scroller: Boolean
44
+ scroller: Boolean,
45
+ groupField: String
43
46
  },
44
47
  inject: {
45
48
  kendoLocalizationService: {
@@ -101,39 +104,64 @@ var ListVue2 = {
101
104
  focusedIndex = _a.focusedIndex,
102
105
  highlightSelected = _a.highlightSelected,
103
106
  value = _a.value,
104
- itemRender = _a.itemRender;
107
+ groupField = _a.groupField,
108
+ itemRender = _a.itemRender,
109
+ groupHeaderItemRender = _a.groupHeaderItemRender,
110
+ dataItems = _a.dataItems;
105
111
  var isArray = Array.isArray(value);
106
- return this.$props.dataItems.map(function (item, index) {
112
+ var groupCounter = 0;
113
+ return dataItems.map(function (item, index) {
107
114
  var realIndex = skip + index;
108
115
  var selected = highlightSelected && (!isArray && areSame(item, value, valueField) || isArray && value.findIndex(function (i) {
109
116
  return areSame(i, item, valueField);
110
117
  }) !== -1);
111
- return (
112
- // @ts-ignore
113
- h(ListItem, {
118
+ var group = undefined;
119
+ var current, previous;
120
+ if (index > 0 && groupField !== undefined) {
121
+ current = getItemValue(item, groupField);
122
+ previous = getItemValue(dataItems[index - 1], groupField);
123
+ if (current && previous && current !== previous !== undefined) {
124
+ group = current;
125
+ }
126
+ }
127
+ if (group !== undefined && Object.keys(item).length === 1) {
128
+ groupCounter += 1;
129
+ }
130
+ return group !== undefined && item[groupField] !== undefined && Object.keys(item).length === 1 ? h(ListGroupItem, {
131
+ id: "option-".concat(optionsGuid, "-").concat(realIndex),
132
+ attrs: this.v3 ? undefined : {
133
+ id: "option-".concat(optionsGuid, "-").concat(realIndex),
134
+ group: group,
135
+ render: groupHeaderItemRender
136
+ },
137
+ key: realIndex + '-group-item',
138
+ group: group,
139
+ render: groupHeaderItemRender
140
+ }) : h(ListItem, {
141
+ id: "option-".concat(optionsGuid, "-").concat(realIndex),
142
+ attrs: this.v3 ? undefined : {
114
143
  id: "option-".concat(optionsGuid, "-").concat(realIndex),
115
- attrs: this.v3 ? undefined : {
116
- id: "option-".concat(optionsGuid, "-").concat(realIndex),
117
- dataItem: item,
118
- selected: selected,
119
- focused: focusedIndex === index,
120
- index: realIndex,
121
- textField: textField,
122
- render: itemRender
123
- },
124
144
  dataItem: item,
125
145
  selected: selected,
126
- focused: focusedIndex === index,
127
- index: realIndex,
128
- key: realIndex,
129
- onItemclick: this.handleClick,
130
- on: this.v3 ? undefined : {
131
- "itemclick": this.handleClick
132
- },
146
+ focused: focusedIndex === realIndex - groupCounter,
147
+ index: realIndex - groupCounter,
133
148
  textField: textField,
149
+ group: group,
134
150
  render: itemRender
135
- })
136
- );
151
+ },
152
+ dataItem: item,
153
+ selected: selected,
154
+ focused: focusedIndex === realIndex - groupCounter,
155
+ index: realIndex - groupCounter,
156
+ key: realIndex - groupCounter,
157
+ onItemclick: this.handleClick,
158
+ on: this.v3 ? undefined : {
159
+ "itemclick": this.handleClick
160
+ },
161
+ textField: textField,
162
+ group: group,
163
+ render: itemRender
164
+ });
137
165
  }, this);
138
166
  };
139
167
  var items = renderItems.call(this);
@@ -1,3 +1,15 @@
1
+ var __assign = this && this.__assign || function () {
2
+ __assign = Object.assign || function (t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) {
6
+ if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
7
+ }
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
1
13
  // @ts-ignore
2
14
  import * as Vue from 'vue';
3
15
  var allVue = Vue;
@@ -6,6 +18,7 @@ var isV3 = allVue.version && allVue.version[0] === '3';
6
18
  var ref = allVue.ref;
7
19
  import { getRef, Icon, kendoThemeMaps, setRef } from '@progress/kendo-vue-common';
8
20
  import { searchIcon } from '@progress/kendo-svg-icons';
21
+ import { TextBox } from '@progress/kendo-vue-inputs';
9
22
  var sizeMap = kendoThemeMaps.sizeMap,
10
23
  roundedMap = kendoThemeMaps.roundedMap;
11
24
  /**
@@ -77,48 +90,57 @@ var ListFilterVue2 = {
77
90
  },
78
91
  handleBlur: function handleBlur(e) {
79
92
  this.$emit('blur', e);
93
+ },
94
+ prefixRender: function prefixRender(h) {
95
+ var iconProps = {
96
+ class: 'k-input-icon',
97
+ name: 'search',
98
+ icon: searchIcon
99
+ };
100
+ return h(Icon, __assign({
101
+ props: this.v3 ? undefined : iconProps
102
+ }, iconProps));
80
103
  }
81
104
  },
82
105
  mounted: function mounted() {
83
- this.input = getRef(this, 'input');
106
+ this.input = getRef(this, 'input')._input;
84
107
  },
85
108
  // @ts-ignore
86
109
  render: function render(createElement) {
87
110
  var h = gh || createElement;
88
- return h("span", {
111
+ var _a = this.$props,
112
+ size = _a.size,
113
+ rounded = _a.rounded,
114
+ fillMode = _a.fillMode;
115
+ return h("div", {
89
116
  "class": "k-list-filter"
90
- }, [h("span", {
91
- "class": this.spanClass
92
- }, [h(Icon, {
93
- name: "search",
94
- attrs: this.v3 ? undefined : {
95
- name: "search",
96
- icon: searchIcon
97
- },
98
- icon: searchIcon,
99
- "class": "k-input-icon"
100
- }), h("input", {
117
+ }, [
118
+ // @ts-ignore
119
+ h(TextBox, {
101
120
  ref: setRef(this, 'input'),
102
- type: "text",
121
+ value: this.$props.value,
103
122
  attrs: this.v3 ? undefined : {
104
- type: "text"
105
- },
106
- value: this.v3 ? this.$props.value || '' : null,
107
- domProps: this.v3 ? undefined : {
108
- "value": this.$props.value || ''
123
+ value: this.$props.value,
124
+ size: size,
125
+ fillMode: fillMode,
126
+ rounded: rounded,
127
+ inputPrefix: this.prefixRender
109
128
  },
110
- "class": "k-input-inner",
111
129
  onInput: this.onChange,
112
130
  on: this.v3 ? undefined : {
113
131
  "input": this.onChange,
114
132
  "keydown": this.onKeyDown,
115
- "focusin": this.handleFocus,
116
- "focusout": this.handleBlur
133
+ "focus": this.handleFocus,
134
+ "blur": this.handleBlur
117
135
  },
118
136
  onKeydown: this.onKeyDown,
119
- onFocusin: this.handleFocus,
120
- onFocusout: this.handleBlur
121
- })])]);
137
+ onFocus: this.handleFocus,
138
+ onBlur: this.handleBlur,
139
+ size: size,
140
+ fillMode: fillMode,
141
+ rounded: rounded,
142
+ inputPrefix: this.prefixRender
143
+ })]);
122
144
  }
123
145
  };
124
146
  /**
@@ -0,0 +1,41 @@
1
+ import { DefineComponent, RecordPropsDefinition, ComponentOptions, Vue2type } from '../additionalTypes';
2
+ declare type DefaultData<V> = object | ((this: V) => {});
3
+ declare type DefaultMethods<V> = {
4
+ [key: string]: (this: V, ...args: any[]) => any;
5
+ };
6
+ /**
7
+ * Represents the props of the ListItem component.
8
+ */
9
+ export interface ListGroupItemProps {
10
+ /**
11
+ * Specifies the id that will be added to the group header item element.
12
+ */
13
+ id?: string;
14
+ /**
15
+ * The group that will be rendered.
16
+ */
17
+ group?: string;
18
+ /**
19
+ * @hidden
20
+ */
21
+ virtual?: boolean;
22
+ /**
23
+ * Fires when the group header item is about to be rendered. Used to override the default appearance of the group header item.
24
+ */
25
+ render?: any;
26
+ }
27
+ /**
28
+ * @hidden
29
+ */
30
+ export interface ListItemAll extends Vue2type {
31
+ itemClass: object;
32
+ }
33
+ /**
34
+ * @hidden
35
+ */
36
+ declare let ListGroupItemVue2: ComponentOptions<Vue2type, DefaultData<{}>, DefaultMethods<ListItemAll>, {}, RecordPropsDefinition<ListGroupItemProps>>;
37
+ /**
38
+ * @hidden
39
+ */
40
+ declare const ListGroupItem: DefineComponent<ListGroupItemProps, any, {}, {}, {}, {}, {}, {}, string, ListGroupItemProps, ListGroupItemProps, {}>;
41
+ export { ListGroupItem, ListGroupItemVue2 };
@@ -0,0 +1,71 @@
1
+ var __assign = this && this.__assign || function () {
2
+ __assign = Object.assign || function (t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) {
6
+ if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
7
+ }
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ // @ts-ignore
14
+ import * as Vue from 'vue';
15
+ var allVue = Vue;
16
+ var gh = allVue.h;
17
+ var isV3 = allVue.version && allVue.version[0] === '3';
18
+ import { getTemplate } from '@progress/kendo-vue-common';
19
+ /**
20
+ * @hidden
21
+ */
22
+ var ListGroupItemVue2 = {
23
+ name: 'KendoListItem',
24
+ inheritAttrs: false,
25
+ props: {
26
+ id: String,
27
+ group: String,
28
+ render: Object
29
+ },
30
+ // @ts-ignore
31
+ setup: !isV3 ? undefined : function () {
32
+ var v3 = !!isV3;
33
+ return {
34
+ v3: v3
35
+ };
36
+ },
37
+ // @ts-ignore
38
+ render: function render(createElement) {
39
+ var h = gh || createElement;
40
+ var _a = this.$props,
41
+ id = _a.id,
42
+ group = _a.group,
43
+ virtual = _a.virtual,
44
+ renderer = _a.render;
45
+ var defaultRendering = h("li", {
46
+ id: id,
47
+ attrs: this.v3 ? undefined : {
48
+ id: id,
49
+ role: "group"
50
+ },
51
+ role: "group",
52
+ "class": 'k-list-group-item',
53
+ style: {
54
+ position: virtual ? 'relative' : 'unset'
55
+ }
56
+ }, [h("span", {
57
+ "class": !renderer ? 'k-list-item-text' : undefined
58
+ }, [group])]);
59
+ return getTemplate.call(this, {
60
+ h: h,
61
+ template: this.$props.render,
62
+ defaultRendering: defaultRendering,
63
+ additionalProps: __assign({}, this.$props)
64
+ });
65
+ }
66
+ };
67
+ /**
68
+ * @hidden
69
+ */
70
+ var ListGroupItem = ListGroupItemVue2;
71
+ export { ListGroupItem, ListGroupItemVue2 };
@@ -92,6 +92,7 @@ export interface DropDownStateBase {
92
92
  value?: any;
93
93
  focused?: boolean;
94
94
  opened?: boolean;
95
+ group?: string;
95
96
  }
96
97
  /**
97
98
  * @hidden
package/dist/es/main.d.ts CHANGED
@@ -10,8 +10,9 @@ import { AutoCompleteProps, AutoCompleteChangeEvent, AutoCompleteOpenEvent, Auto
10
10
  import { MultiSelect, MultiSelectVue2 } from './MultiSelect/MultiSelect';
11
11
  import { MultiSelectProps, MultiSelectChangeEvent, MultiSelectPageChangeEvent, MultiSelectFilterChangeEvent, MultiSelectOpenEvent, MultiSelectCloseEvent, MultiSelectFocusEvent, MultiSelectBlurEvent } from './MultiSelect/MultiSelectProps';
12
12
  import { TagData as MultiSelectTagData } from './MultiSelect/TagList';
13
+ import { DropDownTree } from './DropDownTree/DropDownTree';
13
14
  export * from './DropDownTree/DropDownTreeProps';
14
15
  import { MultiSelectTree } from './MultiSelectTree/MultiSelectTree';
15
16
  export * from './MultiSelectTree/MultiSelectTreeProps';
16
17
  export * from './MultiSelectTree/utils';
17
- export { AutoComplete, AutoCompleteVue2, AutoCompleteProps, AutoCompleteChangeEvent, AutoCompleteOpenEvent, AutoCompleteCloseEvent, AutoCompleteFocusEvent, AutoCompleteBlurEvent, DropDownList, DropDownListVue2, DropDownListProps, DropDownListFilterChangeEvent, DropDownListChangeEvent, DropDownListOpenEvent, DropDownListCloseEvent, DropDownListFocusEvent, DropDownListBlurEvent, DropDownListPageChangeEvent, Page, VirtualizationSettings, DropDownsPopupSettings, ListItemProps, Suggestion, ComboBox, ComboBoxVue2, ComboBoxProps, ComboBoxFilterChangeEvent, ComboBoxChangeEvent, ComboBoxOpenEvent, ComboBoxCloseEvent, ComboBoxFocusEvent, ComboBoxBlurEvent, ComboBoxPageChangeEvent, MultiSelect, MultiSelectVue2, MultiSelectProps, MultiSelectChangeEvent, MultiSelectPageChangeEvent, MultiSelectFilterChangeEvent, MultiSelectOpenEvent, MultiSelectCloseEvent, MultiSelectFocusEvent, MultiSelectBlurEvent, MultiSelectTagData, FormComponentValidity, MultiSelectTree };
18
+ export { AutoComplete, AutoCompleteVue2, AutoCompleteProps, AutoCompleteChangeEvent, AutoCompleteOpenEvent, AutoCompleteCloseEvent, AutoCompleteFocusEvent, AutoCompleteBlurEvent, DropDownList, DropDownListVue2, DropDownListProps, DropDownListFilterChangeEvent, DropDownListChangeEvent, DropDownListOpenEvent, DropDownListCloseEvent, DropDownListFocusEvent, DropDownListBlurEvent, DropDownListPageChangeEvent, Page, VirtualizationSettings, DropDownsPopupSettings, ListItemProps, Suggestion, ComboBox, ComboBoxVue2, ComboBoxProps, ComboBoxFilterChangeEvent, ComboBoxChangeEvent, ComboBoxOpenEvent, ComboBoxCloseEvent, ComboBoxFocusEvent, ComboBoxBlurEvent, ComboBoxPageChangeEvent, MultiSelect, MultiSelectVue2, MultiSelectProps, MultiSelectChangeEvent, MultiSelectPageChangeEvent, MultiSelectFilterChangeEvent, MultiSelectOpenEvent, MultiSelectCloseEvent, MultiSelectFocusEvent, MultiSelectBlurEvent, MultiSelectTagData, FormComponentValidity, MultiSelectTree, DropDownTree };
package/dist/es/main.js CHANGED
@@ -2,8 +2,9 @@ import { DropDownList, DropDownListVue2 } from './DropDownList/DropDownList';
2
2
  import { ComboBox, ComboBoxVue2 } from './ComboBox/ComboBox';
3
3
  import { AutoComplete, AutoCompleteVue2 } from './AutoComplete/AutoComplete';
4
4
  import { MultiSelect, MultiSelectVue2 } from './MultiSelect/MultiSelect';
5
+ import { DropDownTree } from './DropDownTree/DropDownTree';
5
6
  export * from './DropDownTree/DropDownTreeProps';
6
7
  import { MultiSelectTree } from './MultiSelectTree/MultiSelectTree';
7
8
  export * from './MultiSelectTree/MultiSelectTreeProps';
8
9
  export * from './MultiSelectTree/utils';
9
- export { AutoComplete, AutoCompleteVue2, DropDownList, DropDownListVue2, ComboBox, ComboBoxVue2, MultiSelect, MultiSelectVue2, MultiSelectTree };
10
+ export { AutoComplete, AutoCompleteVue2, DropDownList, DropDownListVue2, ComboBox, ComboBoxVue2, MultiSelect, MultiSelectVue2, MultiSelectTree, DropDownTree };
@@ -5,7 +5,7 @@ export var packageMetadata = {
5
5
  name: '@progress/kendo-vue-dropdowns',
6
6
  productName: 'Kendo UI for Vue',
7
7
  productCodes: ['KENDOUIVUE', 'KENDOUICOMPLETE'],
8
- publishDate: 1684762609,
8
+ publishDate: 1684827665,
9
9
  version: '',
10
10
  licensingDocsUrl: 'https://www.telerik.com/kendo-vue-ui/my-license/?utm_medium=product&utm_source=kendovue&utm_campaign=kendo-ui-vue-purchase-license-keys-warning'
11
11
  };
@@ -20,9 +20,10 @@ import { SearchBar } from './../common/SearchBar.js';
20
20
  import { ListContainer } from './../common/ListContainer.js';
21
21
  import { List } from './../common/List.js';
22
22
  import DropDownBase from '../common/DropDownBase.js';
23
+ import { GroupStickyHeader } from '../common/GroupStickyHeader.js';
23
24
  import { ClearButton } from '../common/ClearButton.js';
24
25
  import { itemIndexStartsWith, getItemValue, areSame, getFocusedItem } from '../common/utils.js';
25
- import { guid, Keys, classNames, templateRendering, getListeners, getTemplate, kendoThemeMaps, setRef, getRef } from '@progress/kendo-vue-common';
26
+ import { guid, Keys, classNames, templateRendering, getListeners, getTemplate, kendoThemeMaps, setRef, getRef, Icon } from '@progress/kendo-vue-common';
26
27
  var sizeMap = kendoThemeMaps.sizeMap,
27
28
  roundedMap = kendoThemeMaps.roundedMap;
28
29
  var VALIDATION_MESSAGE = 'Please enter a valid value!';
@@ -97,6 +98,8 @@ var AutoCompleteVue2 = {
97
98
  }
98
99
  },
99
100
  itemRender: [String, Function, Object],
101
+ groupHeaderItemRender: [String, Function, Object],
102
+ groupStickyHeaderItemRender: [String, Function, Object],
100
103
  listNoDataRender: [String, Function, Object],
101
104
  focusedItemIndex: Function,
102
105
  header: [String, Function, Object],
@@ -127,6 +130,9 @@ var AutoCompleteVue2 = {
127
130
  validator: function validator(value) {
128
131
  return ['small', 'medium', 'large'].includes(value);
129
132
  }
133
+ },
134
+ groupField: {
135
+ type: String
130
136
  }
131
137
  },
132
138
  data: function data() {
@@ -142,7 +148,10 @@ var AutoCompleteVue2 = {
142
148
  last: ''
143
149
  },
144
150
  valueDuringOnChange: {},
145
- suggested: ''
151
+ suggested: '',
152
+ group: undefined,
153
+ isScrolling: false,
154
+ itemHeight: 0
146
155
  };
147
156
  },
148
157
  created: function created() {
@@ -190,8 +199,12 @@ var AutoCompleteVue2 = {
190
199
  }
191
200
  },
192
201
  updated: function updated() {
193
- var _a = this.$props.dataItems,
194
- dataItems = _a === void 0 ? [] : _a;
202
+ var _a;
203
+ var _b = this.$props,
204
+ _c = _b.groupField,
205
+ groupField = _c === void 0 ? '' : _c,
206
+ _d = _b.dataItems,
207
+ dataItems = _d === void 0 ? [] : _d;
195
208
  var focusedIndex = this.focusedIndex();
196
209
  var focusedItem = dataItems[focusedIndex];
197
210
  var dataChanged = this.prevData !== dataItems;
@@ -206,8 +219,22 @@ var AutoCompleteVue2 = {
206
219
  // @ts-ignore
207
220
  this.base.list = list.list;
208
221
  }
209
- if (dataItems.length && (opened && (focusedItemChanged || dataChanged) || opening)) {
210
- this.base.scrollToItem(focusedIndex);
222
+ if (groupField === '') {
223
+ if (opened && (focusedItemChanged || dataChanged) || opening) {
224
+ this.base.scrollToItem(focusedIndex);
225
+ }
226
+ } else if (!this.isScrolling) {
227
+ var focusedItemIndex = (_a = this.base.getGroupedDataModernMode(dataItems, groupField)) === null || _a === void 0 ? void 0 : _a.indexOf(focusedItem);
228
+ if (opening) {
229
+ // Resets the sticky header group value for scenarios with open/close of component's popup
230
+ if (dataItems && dataItems.length !== 0) {
231
+ this.base.resetGroupStickyHeader(dataItems[0][groupField], this);
232
+ }
233
+ this.base.scrollToItem(focusedItemIndex);
234
+ }
235
+ if (opened && prevOpened && focusedItemChanged) {
236
+ this.base.scrollToItem(focusedItemIndex);
237
+ }
211
238
  }
212
239
  this.setValidity();
213
240
  },
@@ -377,6 +404,10 @@ var AutoCompleteVue2 = {
377
404
  this.togglePopup(state);
378
405
  }
379
406
  state.data.focusedItem = undefined;
407
+ // Resets the value of the StickyHeader when filtering the data or just entering symbols in the input
408
+ if (this.prevData && this.prevData.length !== this.$props.dataItems) {
409
+ state.data.group = undefined;
410
+ }
380
411
  this.applyState(state);
381
412
  },
382
413
  clearButtonClick: function clearButtonClick(event) {
@@ -396,6 +427,9 @@ var AutoCompleteVue2 = {
396
427
  this.applyState(state);
397
428
  },
398
429
  onInputKeyDown: function onInputKeyDown(event) {
430
+ if (this.isScrolling) {
431
+ this.isScrolling = false;
432
+ }
399
433
  var keyCode = event.keyCode;
400
434
  var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
401
435
  var state = this.base.initState();
@@ -481,6 +515,39 @@ var AutoCompleteVue2 = {
481
515
  },
482
516
  repositionPopup: function repositionPopup() {
483
517
  this.base.repositionPopup();
518
+ },
519
+ onScroll: function onScroll(event) {
520
+ this.isScrolling = true;
521
+ var state = this.base.initState();
522
+ var list = this.base.list;
523
+ var groupField = this.$props.groupField;
524
+ var _a = this.$props.dataItems,
525
+ dataItems = _a === void 0 ? [] : _a;
526
+ if (!groupField || !dataItems.length) {
527
+ return;
528
+ }
529
+ var itemHeight = this.itemHeight || (list.children ? list.children[0].offsetHeight : 0);
530
+ var target = event.target;
531
+ var scrollTop = target.scrollTop;
532
+ if (groupField) {
533
+ dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
534
+ }
535
+ var group = dataItems[0][groupField];
536
+ if (itemHeight === 0) {
537
+ itemHeight = 28;
538
+ }
539
+ for (var i = 1; i < dataItems.length; i++) {
540
+ if (itemHeight * i > scrollTop) {
541
+ break;
542
+ }
543
+ if (dataItems[i] && dataItems[i][groupField]) {
544
+ group = dataItems[i][groupField];
545
+ }
546
+ }
547
+ if (group !== this.group) {
548
+ state.data.group = group;
549
+ this.applyState(state);
550
+ }
484
551
  }
485
552
  },
486
553
  render: function render(createElement) {
@@ -572,11 +639,15 @@ var AutoCompleteVue2 = {
572
639
  var renderList = function renderList() {
573
640
  var _a = this.$props,
574
641
  textField = _a.textField,
575
- _b = _a.dataItems,
576
- dataItems = _b === void 0 ? [] : _b;
642
+ groupField = _a.groupField;
643
+ var dataItems = this.$props.dataItems || [];
577
644
  var itemRender = templateRendering.call(this, this.$props.itemRender, getListeners.call(this));
645
+ var groupHeaderItemRender = templateRendering.call(this, this.$props.groupHeaderItemRender, getListeners.call(this));
578
646
  var listNoDataRender = templateRendering.call(this, this.$props.listNoDataRender, getListeners.call(this));
579
647
  var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
648
+ if (groupField) {
649
+ dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
650
+ }
580
651
  return (
581
652
  // @ts-ignore
582
653
  h(List, {
@@ -596,7 +667,9 @@ var AutoCompleteVue2 = {
596
667
  },
597
668
  wrapperCssClass: "k-list-content",
598
669
  itemRender: itemRender,
599
- noDataRender: listNoDataRender
670
+ groupHeaderItemRender: groupHeaderItemRender,
671
+ noDataRender: listNoDataRender,
672
+ groupField: groupField
600
673
  },
601
674
  show: opened,
602
675
  dataItems: dataItems.slice(),
@@ -613,10 +686,14 @@ var AutoCompleteVue2 = {
613
686
  wrapperCssClass: "k-list-content",
614
687
  onListclick: this.handleItemClick,
615
688
  on: this.v3 ? undefined : {
616
- "listclick": this.handleItemClick
689
+ "listclick": this.handleItemClick,
690
+ "scroll": this.onScroll
617
691
  },
618
692
  itemRender: itemRender,
619
- noDataRender: listNoDataRender
693
+ groupHeaderItemRender: groupHeaderItemRender,
694
+ noDataRender: listNoDataRender,
695
+ groupField: groupField,
696
+ onScroll: this.onScroll
620
697
  })
621
698
  );
622
699
  };
@@ -625,6 +702,7 @@ var AutoCompleteVue2 = {
625
702
  var _a;
626
703
  var headerTemplate = templateRendering.call(this, this.$props.header, getListeners.call(this));
627
704
  var footerTemplate = templateRendering.call(this, this.$props.footer, getListeners.call(this));
705
+ var groupStickyHeaderTemplate = templateRendering.call(this, this.$props.groupStickyHeaderItemRender, getListeners.call(this));
628
706
  var header = getTemplate.call(this, {
629
707
  h: h,
630
708
  template: headerTemplate
@@ -635,6 +713,10 @@ var AutoCompleteVue2 = {
635
713
  });
636
714
  var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
637
715
  var popupWidth = popupSettings.width !== undefined ? popupSettings.width : base.popupWidth;
716
+ var dataItems = this.$props.dataItems || [];
717
+ if (this.group === undefined && this.$props.groupField !== undefined) {
718
+ this.group = getItemValue(dataItems[0], this.$props.groupField);
719
+ }
638
720
  return (
639
721
  // @ts-ignore function children
640
722
  h(ListContainer, {
@@ -668,12 +750,26 @@ var AutoCompleteVue2 = {
668
750
  }, this.v3 ? function () {
669
751
  return [header && h("div", {
670
752
  "class": "k-list-header"
671
- }, [header]), renderList.call(_this2), footer && h("div", {
753
+ }, [header]), _this2.group && dataItems.length !== 0 && h(GroupStickyHeader, {
754
+ group: _this2.group,
755
+ attrs: _this2.v3 ? undefined : {
756
+ group: _this2.group,
757
+ render: groupStickyHeaderTemplate
758
+ },
759
+ render: groupStickyHeaderTemplate
760
+ }), renderList.call(_this2), footer && h("div", {
672
761
  "class": "k-list-footer"
673
762
  }, [footer])];
674
763
  } : [header && h("div", {
675
764
  "class": "k-list-header"
676
- }, [header]), renderList.call(_this2), footer && h("div", {
765
+ }, [header]), _this2.group && dataItems.length !== 0 && h(GroupStickyHeader, {
766
+ group: _this2.group,
767
+ attrs: _this2.v3 ? undefined : {
768
+ group: _this2.group,
769
+ render: groupStickyHeaderTemplate
770
+ },
771
+ render: groupStickyHeaderTemplate
772
+ }), renderList.call(_this2), footer && h("div", {
677
773
  "class": "k-list-footer"
678
774
  }, [footer])])
679
775
  );
@@ -695,8 +791,12 @@ var AutoCompleteVue2 = {
695
791
  on: this.v3 ? undefined : {
696
792
  "clearclick": this.clearButtonClick
697
793
  }
698
- }), h("span", {
699
- "class": loading ? 'k-input-loading-icon k-icon k-i-loading' : undefined
794
+ }), h(Icon, {
795
+ name: loading ? 'loading' : '',
796
+ attrs: this.v3 ? undefined : {
797
+ name: loading ? 'loading' : ''
798
+ },
799
+ "class": 'k-input-loading-icon'
700
800
  }), renderListContainer.call(this)]);
701
801
  return label ? h("span", {
702
802
  "class": this.spanClassNames,
@@ -215,4 +215,16 @@ export interface AutoCompleteProps extends FormComponentProps {
215
215
  * @default `solid`
216
216
  */
217
217
  fillMode?: null | 'solid' | 'outline' | 'flat' | string;
218
+ /**
219
+ * Sets the data item field that represents the start of a group. Applicable to objects data.
220
+ */
221
+ groupField?: string;
222
+ /**
223
+ * Fires when a AutoComplete group header item is about to be rendered. Used to override the default appearance of the group's headers.
224
+ */
225
+ groupHeaderItemRender?: any;
226
+ /**
227
+ * Fires when a AutoComplete sticky group header item is about to be rendered. Used to override the default appearance of the sticky group header of the component.
228
+ */
229
+ groupStickyHeaderItemRender?: any;
218
230
  }