@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.js';
9
- import { areSame } from './utils.js';
9
+ import { ListGroupItem } from './ListGroupItem.js';
10
+ import { areSame, getItemValue } from './utils.js';
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.js';
@@ -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
@@ -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/esm/main.js CHANGED
@@ -2,8 +2,9 @@ import { DropDownList, DropDownListVue2 } from './DropDownList/DropDownList.js';
2
2
  import { ComboBox, ComboBoxVue2 } from './ComboBox/ComboBox.js';
3
3
  import { AutoComplete, AutoCompleteVue2 } from './AutoComplete/AutoComplete.js';
4
4
  import { MultiSelect, MultiSelectVue2 } from './MultiSelect/MultiSelect.js';
5
+ import { DropDownTree } from './DropDownTree/DropDownTree.js';
5
6
  export * from './DropDownTree/DropDownTreeProps.js';
6
7
  import { MultiSelectTree } from './MultiSelectTree/MultiSelectTree.js';
7
8
  export * from './MultiSelectTree/MultiSelectTreeProps.js';
8
9
  export * from './MultiSelectTree/utils.js';
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
  };
@@ -26,6 +26,7 @@ var SearchBar_1 = require("./../common/SearchBar");
26
26
  var ListContainer_1 = require("./../common/ListContainer");
27
27
  var List_1 = require("./../common/List");
28
28
  var DropDownBase_1 = require("../common/DropDownBase");
29
+ var GroupStickyHeader_1 = require("../common/GroupStickyHeader");
29
30
  var ClearButton_1 = require("../common/ClearButton");
30
31
  var utils_1 = require("../common/utils");
31
32
  var kendo_vue_common_1 = require("@progress/kendo-vue-common");
@@ -103,6 +104,8 @@ var AutoCompleteVue2 = {
103
104
  }
104
105
  },
105
106
  itemRender: [String, Function, Object],
107
+ groupHeaderItemRender: [String, Function, Object],
108
+ groupStickyHeaderItemRender: [String, Function, Object],
106
109
  listNoDataRender: [String, Function, Object],
107
110
  focusedItemIndex: Function,
108
111
  header: [String, Function, Object],
@@ -133,6 +136,9 @@ var AutoCompleteVue2 = {
133
136
  validator: function validator(value) {
134
137
  return ['small', 'medium', 'large'].includes(value);
135
138
  }
139
+ },
140
+ groupField: {
141
+ type: String
136
142
  }
137
143
  },
138
144
  data: function data() {
@@ -148,7 +154,10 @@ var AutoCompleteVue2 = {
148
154
  last: ''
149
155
  },
150
156
  valueDuringOnChange: {},
151
- suggested: ''
157
+ suggested: '',
158
+ group: undefined,
159
+ isScrolling: false,
160
+ itemHeight: 0
152
161
  };
153
162
  },
154
163
  created: function created() {
@@ -196,8 +205,12 @@ var AutoCompleteVue2 = {
196
205
  }
197
206
  },
198
207
  updated: function updated() {
199
- var _a = this.$props.dataItems,
200
- dataItems = _a === void 0 ? [] : _a;
208
+ var _a;
209
+ var _b = this.$props,
210
+ _c = _b.groupField,
211
+ groupField = _c === void 0 ? '' : _c,
212
+ _d = _b.dataItems,
213
+ dataItems = _d === void 0 ? [] : _d;
201
214
  var focusedIndex = this.focusedIndex();
202
215
  var focusedItem = dataItems[focusedIndex];
203
216
  var dataChanged = this.prevData !== dataItems;
@@ -212,8 +225,22 @@ var AutoCompleteVue2 = {
212
225
  // @ts-ignore
213
226
  this.base.list = list.list;
214
227
  }
215
- if (dataItems.length && (opened && (focusedItemChanged || dataChanged) || opening)) {
216
- this.base.scrollToItem(focusedIndex);
228
+ if (groupField === '') {
229
+ if (opened && (focusedItemChanged || dataChanged) || opening) {
230
+ this.base.scrollToItem(focusedIndex);
231
+ }
232
+ } else if (!this.isScrolling) {
233
+ var focusedItemIndex = (_a = this.base.getGroupedDataModernMode(dataItems, groupField)) === null || _a === void 0 ? void 0 : _a.indexOf(focusedItem);
234
+ if (opening) {
235
+ // Resets the sticky header group value for scenarios with open/close of component's popup
236
+ if (dataItems && dataItems.length !== 0) {
237
+ this.base.resetGroupStickyHeader(dataItems[0][groupField], this);
238
+ }
239
+ this.base.scrollToItem(focusedItemIndex);
240
+ }
241
+ if (opened && prevOpened && focusedItemChanged) {
242
+ this.base.scrollToItem(focusedItemIndex);
243
+ }
217
244
  }
218
245
  this.setValidity();
219
246
  },
@@ -383,6 +410,10 @@ var AutoCompleteVue2 = {
383
410
  this.togglePopup(state);
384
411
  }
385
412
  state.data.focusedItem = undefined;
413
+ // Resets the value of the StickyHeader when filtering the data or just entering symbols in the input
414
+ if (this.prevData && this.prevData.length !== this.$props.dataItems) {
415
+ state.data.group = undefined;
416
+ }
386
417
  this.applyState(state);
387
418
  },
388
419
  clearButtonClick: function clearButtonClick(event) {
@@ -402,6 +433,9 @@ var AutoCompleteVue2 = {
402
433
  this.applyState(state);
403
434
  },
404
435
  onInputKeyDown: function onInputKeyDown(event) {
436
+ if (this.isScrolling) {
437
+ this.isScrolling = false;
438
+ }
405
439
  var keyCode = event.keyCode;
406
440
  var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
407
441
  var state = this.base.initState();
@@ -487,6 +521,39 @@ var AutoCompleteVue2 = {
487
521
  },
488
522
  repositionPopup: function repositionPopup() {
489
523
  this.base.repositionPopup();
524
+ },
525
+ onScroll: function onScroll(event) {
526
+ this.isScrolling = true;
527
+ var state = this.base.initState();
528
+ var list = this.base.list;
529
+ var groupField = this.$props.groupField;
530
+ var _a = this.$props.dataItems,
531
+ dataItems = _a === void 0 ? [] : _a;
532
+ if (!groupField || !dataItems.length) {
533
+ return;
534
+ }
535
+ var itemHeight = this.itemHeight || (list.children ? list.children[0].offsetHeight : 0);
536
+ var target = event.target;
537
+ var scrollTop = target.scrollTop;
538
+ if (groupField) {
539
+ dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
540
+ }
541
+ var group = dataItems[0][groupField];
542
+ if (itemHeight === 0) {
543
+ itemHeight = 28;
544
+ }
545
+ for (var i = 1; i < dataItems.length; i++) {
546
+ if (itemHeight * i > scrollTop) {
547
+ break;
548
+ }
549
+ if (dataItems[i] && dataItems[i][groupField]) {
550
+ group = dataItems[i][groupField];
551
+ }
552
+ }
553
+ if (group !== this.group) {
554
+ state.data.group = group;
555
+ this.applyState(state);
556
+ }
490
557
  }
491
558
  },
492
559
  render: function render(createElement) {
@@ -578,11 +645,15 @@ var AutoCompleteVue2 = {
578
645
  var renderList = function renderList() {
579
646
  var _a = this.$props,
580
647
  textField = _a.textField,
581
- _b = _a.dataItems,
582
- dataItems = _b === void 0 ? [] : _b;
648
+ groupField = _a.groupField;
649
+ var dataItems = this.$props.dataItems || [];
583
650
  var itemRender = kendo_vue_common_1.templateRendering.call(this, this.$props.itemRender, kendo_vue_common_1.getListeners.call(this));
651
+ var groupHeaderItemRender = kendo_vue_common_1.templateRendering.call(this, this.$props.groupHeaderItemRender, kendo_vue_common_1.getListeners.call(this));
584
652
  var listNoDataRender = kendo_vue_common_1.templateRendering.call(this, this.$props.listNoDataRender, kendo_vue_common_1.getListeners.call(this));
585
653
  var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
654
+ if (groupField) {
655
+ dataItems = this.base.getGroupedDataModernMode(dataItems, groupField);
656
+ }
586
657
  return (
587
658
  // @ts-ignore
588
659
  h(List_1.List, {
@@ -602,7 +673,9 @@ var AutoCompleteVue2 = {
602
673
  },
603
674
  wrapperCssClass: "k-list-content",
604
675
  itemRender: itemRender,
605
- noDataRender: listNoDataRender
676
+ groupHeaderItemRender: groupHeaderItemRender,
677
+ noDataRender: listNoDataRender,
678
+ groupField: groupField
606
679
  },
607
680
  show: opened,
608
681
  dataItems: dataItems.slice(),
@@ -619,10 +692,14 @@ var AutoCompleteVue2 = {
619
692
  wrapperCssClass: "k-list-content",
620
693
  onListclick: this.handleItemClick,
621
694
  on: this.v3 ? undefined : {
622
- "listclick": this.handleItemClick
695
+ "listclick": this.handleItemClick,
696
+ "scroll": this.onScroll
623
697
  },
624
698
  itemRender: itemRender,
625
- noDataRender: listNoDataRender
699
+ groupHeaderItemRender: groupHeaderItemRender,
700
+ noDataRender: listNoDataRender,
701
+ groupField: groupField,
702
+ onScroll: this.onScroll
626
703
  })
627
704
  );
628
705
  };
@@ -631,6 +708,7 @@ var AutoCompleteVue2 = {
631
708
  var _a;
632
709
  var headerTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.header, kendo_vue_common_1.getListeners.call(this));
633
710
  var footerTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.footer, kendo_vue_common_1.getListeners.call(this));
711
+ var groupStickyHeaderTemplate = kendo_vue_common_1.templateRendering.call(this, this.$props.groupStickyHeaderItemRender, kendo_vue_common_1.getListeners.call(this));
634
712
  var header = kendo_vue_common_1.getTemplate.call(this, {
635
713
  h: h,
636
714
  template: headerTemplate
@@ -641,6 +719,10 @@ var AutoCompleteVue2 = {
641
719
  });
642
720
  var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
643
721
  var popupWidth = popupSettings.width !== undefined ? popupSettings.width : base.popupWidth;
722
+ var dataItems = this.$props.dataItems || [];
723
+ if (this.group === undefined && this.$props.groupField !== undefined) {
724
+ this.group = (0, utils_1.getItemValue)(dataItems[0], this.$props.groupField);
725
+ }
644
726
  return (
645
727
  // @ts-ignore function children
646
728
  h(ListContainer_1.ListContainer, {
@@ -674,12 +756,26 @@ var AutoCompleteVue2 = {
674
756
  }, this.v3 ? function () {
675
757
  return [header && h("div", {
676
758
  "class": "k-list-header"
677
- }, [header]), renderList.call(_this2), footer && h("div", {
759
+ }, [header]), _this2.group && dataItems.length !== 0 && h(GroupStickyHeader_1.GroupStickyHeader, {
760
+ group: _this2.group,
761
+ attrs: _this2.v3 ? undefined : {
762
+ group: _this2.group,
763
+ render: groupStickyHeaderTemplate
764
+ },
765
+ render: groupStickyHeaderTemplate
766
+ }), renderList.call(_this2), footer && h("div", {
678
767
  "class": "k-list-footer"
679
768
  }, [footer])];
680
769
  } : [header && h("div", {
681
770
  "class": "k-list-header"
682
- }, [header]), renderList.call(_this2), footer && h("div", {
771
+ }, [header]), _this2.group && dataItems.length !== 0 && h(GroupStickyHeader_1.GroupStickyHeader, {
772
+ group: _this2.group,
773
+ attrs: _this2.v3 ? undefined : {
774
+ group: _this2.group,
775
+ render: groupStickyHeaderTemplate
776
+ },
777
+ render: groupStickyHeaderTemplate
778
+ }), renderList.call(_this2), footer && h("div", {
683
779
  "class": "k-list-footer"
684
780
  }, [footer])])
685
781
  );
@@ -701,8 +797,12 @@ var AutoCompleteVue2 = {
701
797
  on: this.v3 ? undefined : {
702
798
  "clearclick": this.clearButtonClick
703
799
  }
704
- }), h("span", {
705
- "class": loading ? 'k-input-loading-icon k-icon k-i-loading' : undefined
800
+ }), h(kendo_vue_common_1.Icon, {
801
+ name: loading ? 'loading' : '',
802
+ attrs: this.v3 ? undefined : {
803
+ name: loading ? 'loading' : ''
804
+ },
805
+ "class": 'k-input-loading-icon'
706
806
  }), renderListContainer.call(this)]);
707
807
  return label ? h("span", {
708
808
  "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
  }