@progress/kendo-vue-dropdowns 3.5.0 → 3.5.1-dev.202208150613

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 (90) hide show
  1. package/dist/cdn/js/kendo-vue-dropdowns.js +1 -1
  2. package/dist/es/AutoComplete/AutoComplete.js +9 -13
  3. package/dist/es/AutoComplete/AutoCompleteProps.js +1 -0
  4. package/dist/es/ComboBox/ComboBox.js +11 -14
  5. package/dist/es/ComboBox/ComboBoxProps.d.ts +1 -1
  6. package/dist/es/ComboBox/ComboBoxProps.js +1 -0
  7. package/dist/es/DropDownList/DropDownList.js +11 -21
  8. package/dist/es/DropDownList/DropDownListProps.js +1 -0
  9. package/dist/es/MultiSelect/MultiSelect.js +23 -30
  10. package/dist/es/MultiSelect/MultiSelectProps.d.ts +1 -1
  11. package/dist/es/MultiSelect/MultiSelectProps.js +1 -0
  12. package/dist/es/MultiSelect/TagList.js +3 -3
  13. package/dist/es/common/List.js +2 -2
  14. package/dist/es/common/ListContainer.js +8 -5
  15. package/dist/es/common/ListFilter.js +1 -1
  16. package/dist/es/common/events.js +1 -0
  17. package/dist/es/common/filterDescriptor.js +1 -0
  18. package/dist/es/package-metadata.js +1 -1
  19. package/dist/esm/AutoComplete/AutoComplete.d.ts +107 -0
  20. package/dist/esm/AutoComplete/AutoComplete.js +757 -0
  21. package/dist/esm/AutoComplete/AutoCompleteProps.d.ts +202 -0
  22. package/dist/esm/AutoComplete/AutoCompleteProps.js +2 -0
  23. package/dist/esm/ComboBox/ComboBox.d.ts +99 -0
  24. package/dist/esm/ComboBox/ComboBox.js +1060 -0
  25. package/dist/esm/ComboBox/ComboBoxProps.d.ts +244 -0
  26. package/dist/esm/ComboBox/ComboBoxProps.js +2 -0
  27. package/dist/esm/DropDownList/DropDownList.d.ts +100 -0
  28. package/dist/esm/DropDownList/DropDownList.js +1086 -0
  29. package/dist/esm/DropDownList/DropDownListProps.d.ts +274 -0
  30. package/dist/esm/DropDownList/DropDownListProps.js +2 -0
  31. package/dist/esm/MultiSelect/MultiSelect.d.ts +115 -0
  32. package/dist/esm/MultiSelect/MultiSelect.js +1246 -0
  33. package/dist/esm/MultiSelect/MultiSelectProps.d.ts +262 -0
  34. package/dist/esm/MultiSelect/MultiSelectProps.js +2 -0
  35. package/dist/esm/MultiSelect/TagList.d.ts +51 -0
  36. package/dist/esm/MultiSelect/TagList.js +180 -0
  37. package/dist/esm/additionalTypes.ts +21 -0
  38. package/dist/esm/common/ClearButton.d.ts +21 -0
  39. package/dist/esm/common/ClearButton.js +68 -0
  40. package/dist/esm/common/DropDownBase.d.ts +84 -0
  41. package/dist/esm/common/DropDownBase.js +303 -0
  42. package/dist/esm/common/List.d.ts +58 -0
  43. package/dist/esm/common/List.js +176 -0
  44. package/dist/esm/common/ListContainer.d.ts +40 -0
  45. package/dist/esm/common/ListContainer.js +134 -0
  46. package/dist/esm/common/ListDefaultItem.d.ts +29 -0
  47. package/dist/esm/common/ListDefaultItem.js +62 -0
  48. package/dist/esm/common/ListFilter.d.ts +46 -0
  49. package/dist/esm/common/ListFilter.js +112 -0
  50. package/dist/esm/common/ListItem.d.ts +71 -0
  51. package/dist/esm/common/ListItem.js +105 -0
  52. package/dist/esm/common/Navigation.d.ts +12 -0
  53. package/dist/esm/common/Navigation.js +34 -0
  54. package/dist/esm/common/SearchBar.d.ts +65 -0
  55. package/dist/esm/common/SearchBar.js +177 -0
  56. package/dist/esm/common/VirtualScroll.d.ts +42 -0
  57. package/dist/esm/common/VirtualScroll.js +196 -0
  58. package/dist/esm/common/events.d.ts +63 -0
  59. package/dist/esm/common/events.js +1 -0
  60. package/dist/esm/common/filterDescriptor.d.ts +41 -0
  61. package/dist/esm/common/filterDescriptor.js +2 -0
  62. package/dist/esm/common/settings.d.ts +102 -0
  63. package/dist/esm/common/settings.js +8 -0
  64. package/dist/esm/common/utils.d.ts +57 -0
  65. package/dist/esm/common/utils.js +184 -0
  66. package/dist/esm/main.d.ts +13 -0
  67. package/dist/esm/main.js +5 -0
  68. package/dist/esm/messages/index.d.ts +20 -0
  69. package/dist/esm/messages/index.js +21 -0
  70. package/dist/esm/package-metadata.d.ts +5 -0
  71. package/dist/esm/package-metadata.js +11 -0
  72. package/dist/esm/package.json +3 -0
  73. package/dist/npm/AutoComplete/AutoComplete.js +24 -28
  74. package/dist/npm/ComboBox/ComboBox.js +43 -46
  75. package/dist/npm/ComboBox/ComboBoxProps.d.ts +1 -1
  76. package/dist/npm/DropDownList/DropDownList.js +42 -52
  77. package/dist/npm/MultiSelect/MultiSelect.js +41 -48
  78. package/dist/npm/MultiSelect/MultiSelectProps.d.ts +1 -1
  79. package/dist/npm/MultiSelect/TagList.js +3 -3
  80. package/dist/npm/common/ClearButton.js +1 -1
  81. package/dist/npm/common/DropDownBase.js +6 -6
  82. package/dist/npm/common/List.js +8 -8
  83. package/dist/npm/common/ListContainer.js +9 -6
  84. package/dist/npm/common/ListDefaultItem.js +2 -2
  85. package/dist/npm/common/ListFilter.js +3 -3
  86. package/dist/npm/common/ListItem.js +2 -2
  87. package/dist/npm/common/Navigation.js +1 -1
  88. package/dist/npm/common/SearchBar.js +2 -2
  89. package/dist/npm/package-metadata.js +1 -1
  90. package/package.json +11 -5
@@ -0,0 +1,1060 @@
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
+
6
+ for (var p in s) {
7
+ if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
8
+ }
9
+ }
10
+
11
+ return t;
12
+ };
13
+
14
+ return __assign.apply(this, arguments);
15
+ }; // @ts-ignore
16
+
17
+
18
+ import * as Vue from 'vue';
19
+ var allVue = Vue;
20
+ var gh = allVue.h;
21
+ var isV3 = allVue.version && allVue.version[0] === '3';
22
+ var ref = allVue.ref;
23
+ var inject = allVue.inject;
24
+ import DropDownBase from '../common/DropDownBase.js';
25
+ import { guid, classNames, Keys, templateRendering, getListeners, getTemplate, kendoThemeMaps, getRef, setRef } from '@progress/kendo-vue-common';
26
+ import { Button as KButton } from '@progress/kendo-vue-buttons';
27
+ var sizeMap = kendoThemeMaps.sizeMap,
28
+ roundedMap = kendoThemeMaps.roundedMap;
29
+ import { areSame, itemIndexStartsWith, getItemIndexByText, getItemValue, isPresent, suggestValue as _suggestValue } from '../common/utils.js';
30
+ import { SearchBar } from '../common/SearchBar.js';
31
+ import { ListContainer } from '../common/ListContainer.js';
32
+ import { List } from '../common/List.js';
33
+ import { ClearButton } from '../common/ClearButton.js';
34
+ import { provideLocalizationService } from '@progress/kendo-vue-intl';
35
+ import { expandButton, messages } from '../messages.js';
36
+ var VALIDATION_MESSAGE = 'Please enter a valid value!';
37
+ /**
38
+ * @hidden
39
+ */
40
+
41
+ var ComboBoxVue2 = {
42
+ name: 'KendoComboBox',
43
+ model: {
44
+ event: 'changemodel'
45
+ },
46
+ // @ts-ignore
47
+ emits: {
48
+ 'changemodel': null,
49
+ 'update:modelValue': null,
50
+ 'filterchange': null,
51
+ pagechange: null,
52
+ change: null,
53
+ focus: null,
54
+ blur: null,
55
+ open: null,
56
+ close: null,
57
+ scroll: null
58
+ },
59
+ props: {
60
+ id: String,
61
+ dataItemKey: {
62
+ type: [Object, String]
63
+ },
64
+ defaultValue: {
65
+ type: [String, Object, Number, Boolean],
66
+ default: undefined
67
+ },
68
+ name: String,
69
+ modelValue: {
70
+ type: [String, Object, Number, Boolean],
71
+ default: undefined
72
+ },
73
+ value: {
74
+ type: [String, Object, Number, Boolean],
75
+ default: undefined
76
+ },
77
+ label: {
78
+ type: String
79
+ },
80
+ placeholder: String,
81
+ required: {
82
+ type: Boolean,
83
+ default: false
84
+ },
85
+ valid: {
86
+ type: Boolean,
87
+ default: undefined
88
+ },
89
+ validationMessage: {
90
+ type: String,
91
+ default: undefined
92
+ },
93
+ validityStyles: {
94
+ type: Boolean,
95
+ default: true
96
+ },
97
+ iconClassName: String,
98
+ opened: {
99
+ type: Boolean,
100
+ default: undefined
101
+ },
102
+ disabled: Boolean,
103
+ dir: {
104
+ type: String,
105
+ default: undefined
106
+ },
107
+ tabIndex: {
108
+ type: Number,
109
+ default: 0
110
+ },
111
+ accessKey: String,
112
+ dataItems: Array,
113
+ textField: String,
114
+ className: String,
115
+ loading: Boolean,
116
+ popupSettings: {
117
+ type: Object,
118
+ default: function _default() {
119
+ return {
120
+ animate: true,
121
+ height: '200px'
122
+ };
123
+ }
124
+ },
125
+ itemRender: [String, Function, Object],
126
+ listNoDataRender: [String, Function, Object],
127
+ focusedItemIndex: Function,
128
+ header: [String, Function, Object],
129
+ footer: [String, Function, Object],
130
+ filterable: Boolean,
131
+ filter: {
132
+ type: String,
133
+ default: undefined
134
+ },
135
+ virtual: {
136
+ type: Object,
137
+ default: undefined
138
+ },
139
+ suggest: {
140
+ type: Boolean,
141
+ default: false
142
+ },
143
+ allowCustom: {
144
+ type: Boolean,
145
+ default: false
146
+ },
147
+ clearButton: {
148
+ type: Boolean,
149
+ default: true
150
+ },
151
+ ariaLabelledBy: String,
152
+ ariaDescribedBy: String,
153
+ valueField: String,
154
+ valuePrimitive: Boolean,
155
+ rounded: {
156
+ type: String,
157
+ default: 'medium',
158
+ validator: function validator(value) {
159
+ return ['small', 'medium', 'large', 'full'].includes(value);
160
+ }
161
+ },
162
+ fillMode: {
163
+ type: String,
164
+ default: 'solid',
165
+ validator: function validator(value) {
166
+ return ['solid', 'flat', 'outline'].includes(value);
167
+ }
168
+ },
169
+ size: {
170
+ type: String,
171
+ default: 'medium',
172
+ validator: function validator(value) {
173
+ return ['small', 'medium', 'large'].includes(value);
174
+ }
175
+ }
176
+ },
177
+ inject: {
178
+ kendoLocalizationService: {
179
+ default: null
180
+ }
181
+ },
182
+ data: function data() {
183
+ return {
184
+ hasMounted: false,
185
+ currentText: '',
186
+ currentValue: '',
187
+ currentFocused: false,
188
+ currentOpened: false,
189
+ searchState: {
190
+ word: '',
191
+ last: ''
192
+ },
193
+ _skipFocusEvent: false,
194
+ valueDuringOnChange: {},
195
+ _navigated: false,
196
+ suggested: ''
197
+ };
198
+ },
199
+ created: function created() {
200
+ this.valueDuringOnChange = undefined;
201
+ this.currentText = undefined;
202
+ this.currentValue = undefined;
203
+ this.currentFocused = undefined;
204
+ this.currentOpened = undefined;
205
+ this.prevCurrentValue = this.computedValue();
206
+ this.base = new DropDownBase(this);
207
+ this.anchor = guid();
208
+ this.inputId = guid();
209
+ },
210
+ // @ts-ignore
211
+ setup: !isV3 ? undefined : function () {
212
+ var v3 = !!isV3;
213
+ var inputRef = ref(null);
214
+ var elementRef = ref(null);
215
+ var kendoAnchorRef = ref(null);
216
+ var kendoLocalizationService = inject('kendoLocalizationService', {});
217
+ return {
218
+ v3: v3,
219
+ inputRef: inputRef,
220
+ elementRef: elementRef,
221
+ kendoAnchorRef: kendoAnchorRef,
222
+ kendoLocalizationService: kendoLocalizationService
223
+ };
224
+ },
225
+ mounted: function mounted() {
226
+ this.hasMounted = true; // @ts-ignore
227
+
228
+ this.input = this.v3 ? this.inputRef.input : this.$refs.input.input;
229
+ this.base.wrapper = getRef(this, 'kendoAnchor', this.anchor);
230
+ this.element = getRef(this, 'kendoAnchor', this.anchor);
231
+ this.base.didMount();
232
+ this.setValidity();
233
+ },
234
+ updated: function updated() {
235
+ var _a = this.$props,
236
+ _b = _a.dataItems,
237
+ dataItems = _b === void 0 ? [] : _b,
238
+ dataItemKey = _a.dataItemKey,
239
+ virtual = _a.virtual;
240
+ var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
241
+ var prevOpened = this.prevOpened !== undefined ? this.prevOpened : this.prevCurrentOpened;
242
+ var opening = !prevOpened && opened;
243
+ var closing = prevOpened && !opened;
244
+ var list = this.$refs.list;
245
+ var scrollElement = this.$refs.scrollElement;
246
+ var selectedItem = this.computedValue();
247
+ this.valueOnDidUpdate = selectedItem;
248
+
249
+ if (list) {
250
+ // @ts-ignore
251
+ this.base.vs.list = list.list; // @ts-ignore
252
+
253
+ this.base.list = list.list;
254
+ }
255
+
256
+ if (scrollElement) {
257
+ this.base.vs.scrollElement = scrollElement;
258
+ }
259
+
260
+ if (list && dataItems.length) {
261
+ // @ts-ignore
262
+ this.base.vs.scrollerRef(list.$el);
263
+ } // @ts-ignore
264
+
265
+
266
+ if (virtual && this.virtualTotalHasChanged) {
267
+ this.base.vs.calcScrollElementHeight();
268
+ this.base.vs.reset();
269
+ this.virtualTotalHasChanged = false;
270
+ } else {
271
+ var prevSelectedItem = this.prevCurrentValue;
272
+ var selectedItemIndex = dataItems.findIndex(function (i) {
273
+ return areSame(i, selectedItem, dataItemKey);
274
+ });
275
+ var selectedItemChanged = !areSame(prevSelectedItem, selectedItem, dataItemKey);
276
+
277
+ if (opening && virtual) {
278
+ this.base.scrollToVirtualItem(virtual, selectedItemIndex);
279
+ this.prevCurrentOpened = true;
280
+ } else if (opening && !virtual) {
281
+ this.base.scrollToItem(selectedItemIndex);
282
+ this.prevCurrentOpened = true;
283
+ } else if (opened && prevOpened && selectedItem && selectedItemChanged) {
284
+ this.base.scrollToItem(selectedItemIndex);
285
+ }
286
+ }
287
+
288
+ if (opening && this.input) {
289
+ this.input.focus();
290
+ }
291
+
292
+ this.prevCurrentValue = this.computedValue();
293
+ this.setValidity();
294
+ },
295
+ watch: {
296
+ currentOpened: function currentOpened(_, oldValue) {
297
+ this.prevCurrentOpened = oldValue;
298
+ },
299
+ opened: function opened(_, oldValue) {
300
+ this.prevOpened = oldValue;
301
+ },
302
+ virtual: function virtual(newValue, oldValue) {
303
+ if (newValue && oldValue && newValue.total !== oldValue.total) {
304
+ this.virtualTotalHasChanged = true;
305
+ }
306
+
307
+ this.virtualHasChanged = true;
308
+ }
309
+ },
310
+ computed: {
311
+ index: {
312
+ get: function get() {
313
+ var _a = this.$props,
314
+ _b = _a.dataItems,
315
+ dataItems = _b === void 0 ? [] : _b,
316
+ dataItemKey = _a.dataItemKey;
317
+ var value = this.computedValue(); // TO DO: deprecate it!
318
+
319
+ return dataItems.findIndex(function (i) {
320
+ return areSame(i, value, dataItemKey);
321
+ });
322
+ }
323
+ },
324
+ spanClassNames: {
325
+ get: function get() {
326
+ var isValid = !this.hasMounted || !this.$props.validityStyles || this.validity().valid;
327
+ return {
328
+ 'k-floating-label-container': true,
329
+ 'k-focus': this.currentFocused,
330
+ 'k-empty': !this.computedValue(),
331
+ 'k-invalid': !isValid && isValid !== undefined,
332
+ 'k-rtl': this.$props.dir === 'rtl'
333
+ };
334
+ }
335
+ }
336
+ },
337
+ methods: {
338
+ focus: function focus() {
339
+ if (this.input) {
340
+ this.input.focus();
341
+ }
342
+ },
343
+ computedValue: function computedValue() {
344
+ var value;
345
+
346
+ if (this.valueDuringOnChange !== undefined) {
347
+ value = this.valueDuringOnChange;
348
+ } else if (this.$props.value !== undefined) {
349
+ value = this.$props.value;
350
+ } else if (this.$props.modelValue !== undefined) {
351
+ value = this.$props.modelValue;
352
+ } else if (this.currentValue !== undefined) {
353
+ value = this.currentValue;
354
+ } else if (this.$props.defaultValue !== undefined) {
355
+ value = this.$props.defaultValue;
356
+ }
357
+
358
+ return this.valuePrimitive ? this.findByFieldValue(this.valueField, value) || value : value;
359
+ },
360
+ findByFieldValue: function findByFieldValue(field, value) {
361
+ var index = this.dataItems.findIndex(function (i) {
362
+ return getItemValue(i, field) === value;
363
+ });
364
+ return this.dataItems[index];
365
+ },
366
+ primitiveValue: function primitiveValue() {
367
+ var value = this.computedValue();
368
+ return this.valuePrimitive ? getItemValue(value, this.valueField) : value;
369
+ },
370
+ validity: function validity() {
371
+ var customError = this.$props.validationMessage !== undefined;
372
+ var isValid = !this.$props.required || this.computedValue() !== null && this.computedValue() !== '' && this.computedValue() !== undefined;
373
+ var valid = this.$props.valid !== undefined ? this.$props.valid : isValid;
374
+ return {
375
+ customError: customError,
376
+ valid: valid,
377
+ valueMissing: this.computedValue() === null
378
+ };
379
+ },
380
+ handleItemSelect: function handleItemSelect(index, state) {
381
+ var _a = this.$props,
382
+ _b = _a.dataItems,
383
+ dataItems = _b === void 0 ? [] : _b,
384
+ virtual = _a.virtual,
385
+ dataItemKey = _a.dataItemKey;
386
+ var skip = virtual ? virtual.skip : 0;
387
+ var item = dataItems[index - skip];
388
+ var newSelected = !areSame(item, this.computedValue(), dataItemKey);
389
+ this.triggerOnChange(item, state);
390
+
391
+ if (this.currentText !== undefined) {
392
+ // @ts-ignore
393
+ state.data.currentText = undefined;
394
+ }
395
+
396
+ if (newSelected) {
397
+ this.base.triggerPageChangeCornerItems(item, state);
398
+ }
399
+ },
400
+ onNavigate: function onNavigate(state, keyCode) {
401
+ var _a = this.$props,
402
+ _b = _a.dataItems,
403
+ dataItems = _b === void 0 ? [] : _b,
404
+ _c = _a.virtual,
405
+ virtual = _c === void 0 ? {
406
+ skip: 0
407
+ } : _c;
408
+ var text = this.$props.filter ? this.$props.filter : this.currentText;
409
+ var focusedIndex = this.getFocusedIndex();
410
+ var vs = this.base.vs;
411
+ var value = this.computedValue();
412
+ this.suggested = '';
413
+
414
+ if (focusedIndex !== -1 && !isPresent(value)) {
415
+ this.handleItemSelect(focusedIndex, state);
416
+ } else if (text === '') {
417
+ this.handleItemSelect(0, state);
418
+ } else {
419
+ var currentIndex = virtual.skip + focusedIndex;
420
+ var newIndex = this.base.navigation.navigate({
421
+ keyCode: keyCode,
422
+ current: currentIndex,
423
+ max: (vs.enabled ? vs.total : dataItems.length) - 1,
424
+ min: 0
425
+ });
426
+
427
+ if (newIndex !== undefined) {
428
+ this.handleItemSelect(newIndex, state);
429
+ }
430
+ }
431
+ },
432
+ toggleBtnClick: function toggleBtnClick(event) {
433
+ var state = this.base.initState();
434
+ state.event = event;
435
+ this.base.togglePopup(state);
436
+ this.applyState(state);
437
+ },
438
+ applyValueOnEnter: function applyValueOnEnter(value, state) {
439
+ var _a;
440
+
441
+ var _b = this.$props,
442
+ _c = _b.dataItems,
443
+ dataItems = _c === void 0 ? [] : _c,
444
+ textField = _b.textField,
445
+ allowCustom = _b.allowCustom;
446
+ var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
447
+ var currentValueText = getItemValue(this.computedValue(), textField);
448
+ var valueIndex = currentValueText === value ? this.index : getItemIndexByText(dataItems, value, textField);
449
+ var itemSelected = valueIndex !== -1;
450
+ var newSelected = undefined;
451
+ this.suggested = '';
452
+
453
+ if (itemSelected) {
454
+ // typed text match item from list
455
+ newSelected = dataItems[valueIndex];
456
+ } else {
457
+ if (allowCustom) {
458
+ // any custom text not in list
459
+ newSelected = textField !== undefined ? (_a = {}, _a[textField] = value, _a) : value;
460
+ } else {
461
+ return this.selectFocusedItem(value, state);
462
+ }
463
+ }
464
+
465
+ this.triggerOnChange(newSelected, state);
466
+
467
+ if (opened) {
468
+ this.base.togglePopup(state);
469
+ }
470
+
471
+ if (this.$props.filter === undefined && this.currentText !== undefined) {
472
+ // @ts-ignore
473
+ state.data.currentText = undefined;
474
+ }
475
+
476
+ this.applyState(state);
477
+ },
478
+ applyValueOnRejectSuggestions: function applyValueOnRejectSuggestions(text, state) {
479
+ var _a;
480
+
481
+ var _b = this.$props,
482
+ _c = _b.dataItems,
483
+ dataItems = _c === void 0 ? [] : _c,
484
+ textField = _b.textField,
485
+ allowCustom = _b.allowCustom;
486
+ var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
487
+ var valueItemText = getItemValue(this.computedValue(), textField);
488
+ this.suggested = '';
489
+
490
+ if (text === valueItemText || text === '' && !isPresent(valueItemText)) {
491
+ if (opened) {
492
+ this.base.togglePopup(state);
493
+ }
494
+
495
+ return this.applyState(state);
496
+ }
497
+
498
+ var valueIndex = getItemIndexByText(dataItems, text, textField, true);
499
+ var itemSelected = valueIndex !== -1;
500
+ var newSelected = null;
501
+
502
+ if (itemSelected) {
503
+ newSelected = dataItems[valueIndex];
504
+ } else if (allowCustom) {
505
+ newSelected = text ? textField ? (_a = {}, _a[textField] = text, _a) : text : null;
506
+ }
507
+
508
+ this.triggerOnChange(newSelected, state);
509
+
510
+ if (this.currentText !== undefined) {
511
+ // @ts-ignore
512
+ state.data.currentText = undefined;
513
+ this.base.filterChanged('', state);
514
+ }
515
+
516
+ if (opened) {
517
+ this.base.togglePopup(state);
518
+ }
519
+
520
+ this.applyState(state);
521
+ },
522
+ selectFocusedItem: function selectFocusedItem(text, state) {
523
+ var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
524
+ var _a = this.$props,
525
+ _b = _a.dataItems,
526
+ dataItems = _b === void 0 ? [] : _b,
527
+ textField = _a.textField,
528
+ _c = _a.virtual,
529
+ virtual = _c === void 0 ? {
530
+ skip: 0
531
+ } : _c,
532
+ _d = _a.focusedItemIndex,
533
+ focusedItemIndex = _d === void 0 ? itemIndexStartsWith : _d;
534
+ var skip = virtual.skip;
535
+ var focusedIndex = text === '' && skip === 0 ? 0 : focusedItemIndex(dataItems, text, textField);
536
+
537
+ if (focusedIndex !== -1) {
538
+ this.handleItemSelect(focusedIndex + skip, state);
539
+ } else {
540
+ this.triggerOnChange(null, state);
541
+
542
+ if (this.currentText !== undefined) {
543
+ // @ts-ignore
544
+ state.data.currentText = undefined;
545
+ }
546
+ }
547
+
548
+ if (opened) {
549
+ this.base.togglePopup(state);
550
+ }
551
+
552
+ return this.applyState(state);
553
+ },
554
+ handleItemClick: function handleItemClick(index, event) {
555
+ this.base.handleItemClick(index, event);
556
+ this.valueDuringOnChange = undefined;
557
+ },
558
+ handleFocus: function handleFocus(event) {
559
+ this.$emit('focus', event);
560
+ },
561
+ handleBlur: function handleBlur(event) {
562
+ if (this.currentFocused) {
563
+ var state = this.base.initState();
564
+ state.data.currentFocused = false;
565
+ state.events.push({
566
+ type: 'blur'
567
+ });
568
+ state.event = event;
569
+ this.applyValueOnRejectSuggestions(event.currentTarget.value, state);
570
+ }
571
+ },
572
+ onInputKeyDown: function onInputKeyDown(event) {
573
+ var _this = this;
574
+
575
+ var keyCode = event.keyCode;
576
+ var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
577
+ var state = this.base.initState();
578
+ state.event = event;
579
+
580
+ if (!event.altKey && (keyCode === Keys.up || keyCode === Keys.down)) {
581
+ event.preventDefault();
582
+ this.onNavigate(state, keyCode);
583
+ this.applyState(state);
584
+ return;
585
+ }
586
+
587
+ var togglePopup = function togglePopup() {
588
+ event.preventDefault();
589
+
590
+ _this.base.togglePopup(state);
591
+
592
+ _this.applyState(state);
593
+ };
594
+
595
+ if (opened) {
596
+ if (event.altKey && keyCode === Keys.up) {
597
+ togglePopup();
598
+ } else if (keyCode === Keys.enter) {
599
+ event.preventDefault();
600
+ this.applyValueOnEnter(event.currentTarget.value, state);
601
+ } else if (keyCode === Keys.esc) {
602
+ togglePopup();
603
+ }
604
+ } else {
605
+ if (event.altKey && keyCode === Keys.down) {
606
+ togglePopup();
607
+ } else if (keyCode === Keys.esc) {
608
+ this.applyValueOnRejectSuggestions(event.currentTarget.value, state);
609
+ }
610
+ }
611
+ },
612
+ inputOnChange: function inputOnChange(event) {
613
+ var state = this.base.initState();
614
+ state.event = event;
615
+ var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
616
+ var input = event.currentTarget;
617
+ var value = input.value;
618
+
619
+ if (this.$props.suggest) {
620
+ var selectionAtEnd = input.selectionEnd === value.length;
621
+ var prevText = this.$props.filter !== undefined ? this.$props.filter : this.currentText;
622
+
623
+ if (!isPresent(prevText)) {
624
+ prevText = getItemValue(this.computedValue(), this.$props.textField) || '';
625
+ }
626
+
627
+ var deletedSuggestion = prevText && prevText === value;
628
+ var deleting = prevText && prevText.length > value.length;
629
+
630
+ if (deletedSuggestion || deleting || !selectionAtEnd) {
631
+ this.suggested = '';
632
+ } else {
633
+ this.suggestValue(value);
634
+ }
635
+ }
636
+
637
+ if (this.$props.filter === undefined) {
638
+ // @ts-ignore
639
+ state.data.currentText = value;
640
+ }
641
+
642
+ if (this.currentFocusedItem !== undefined) {
643
+ // @ts-ignore
644
+ state.data.focusedItem = undefined;
645
+ }
646
+
647
+ if (!opened) {
648
+ this.base.togglePopup(state);
649
+ }
650
+
651
+ this.base.filterChanged(value, state);
652
+ this.applyState(state);
653
+ },
654
+ clearButtonClick: function clearButtonClick(event) {
655
+ var state = this.base.initState();
656
+ state.event = event;
657
+ event.stopPropagation();
658
+ this.suggested = '';
659
+ this.base.filterChanged('', state);
660
+
661
+ if (this.$props.filter === undefined && this.currentText !== undefined) {
662
+ // @ts-ignore
663
+ state.data.currentText = undefined;
664
+ }
665
+
666
+ this.triggerOnChange(null, state);
667
+ var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
668
+
669
+ if (opened) {
670
+ this.base.togglePopup(state);
671
+ }
672
+
673
+ this.applyState(state);
674
+ },
675
+ getFocusedIndex: function getFocusedIndex() {
676
+ var value = this.computedValue();
677
+ var _a = this.$props,
678
+ _b = _a.dataItems,
679
+ dataItems = _b === void 0 ? [] : _b,
680
+ textField = _a.textField,
681
+ dataItemKey = _a.dataItemKey,
682
+ _c = _a.virtual,
683
+ virtual = _c === void 0 ? {
684
+ skip: 0
685
+ } : _c,
686
+ _d = _a.focusedItemIndex,
687
+ focusedItemIndex = _d === void 0 ? itemIndexStartsWith : _d;
688
+ var text = this.$props.filter ? this.$props.filter : this.currentText;
689
+
690
+ if (isPresent(value) && text === undefined) {
691
+ return dataItems.findIndex(function (i) {
692
+ return areSame(i, value, dataItemKey);
693
+ });
694
+ } else if (text) {
695
+ return focusedItemIndex(dataItems, text, textField);
696
+ } else {
697
+ return virtual.skip === 0 ? 0 : -1;
698
+ }
699
+ },
700
+ suggestValue: function suggestValue(value) {
701
+ var _a = this.$props,
702
+ dataItems = _a.dataItems,
703
+ textField = _a.textField;
704
+ this.suggested = _suggestValue(value, dataItems, textField);
705
+ },
706
+ setValidity: function setValidity() {
707
+ if (this.input && this.input.setCustomValidity) {
708
+ this.input.setCustomValidity(this.validity().valid ? '' : this.$props.validationMessage || VALIDATION_MESSAGE);
709
+ }
710
+ },
711
+ triggerOnChange: function triggerOnChange(item, state) {
712
+ var value = this.computedValue();
713
+
714
+ if (!isPresent(value) && !isPresent(item) || areSame(value, item, this.$props.dataItemKey)) {
715
+ return;
716
+ }
717
+
718
+ if (this.$props.value === undefined) {
719
+ this.currentValue = item;
720
+ }
721
+
722
+ this.valueDuringOnChange = item;
723
+ state.events.push({
724
+ type: 'change'
725
+ });
726
+ },
727
+ applyState: function applyState(state) {
728
+ this.base.applyState(state);
729
+ this.valueDuringOnChange = undefined;
730
+ }
731
+ },
732
+ render: function render(createElement) {
733
+ var _a;
734
+
735
+ var h = gh || createElement;
736
+ var _b = this.$props,
737
+ dir = _b.dir,
738
+ disabled = _b.disabled,
739
+ clearButton = _b.clearButton,
740
+ label = _b.label,
741
+ textField = _b.textField,
742
+ className = _b.className,
743
+ style = _b.style,
744
+ loading = _b.loading,
745
+ iconClassName = _b.iconClassName,
746
+ virtual = _b.virtual,
747
+ size = _b.size,
748
+ fillMode = _b.fillMode,
749
+ rounded = _b.rounded;
750
+ var focused = this.currentFocused;
751
+ var isValid = !this.$props.validityStyles || this.validity().valid;
752
+ var text = this.$props.filter !== undefined ? this.$props.filter : this.currentText;
753
+ var selectedItemText = getItemValue(this.computedValue(), textField);
754
+ var inputText = isPresent(text) ? text : selectedItemText;
755
+ var renderClearButton = clearButton && (!!inputText || isPresent(this.computedValue()));
756
+ var base = this.base;
757
+ var vs = base.vs;
758
+ var id = this.$props.id || this.inputId;
759
+ var popupSettings = Object.assign({}, {
760
+ animate: true,
761
+ height: '200px'
762
+ }, this.$props.popupSettings);
763
+ var ariaLabelExpandButton = provideLocalizationService(this).toLanguageString(expandButton, messages[expandButton]);
764
+ vs.enabled = virtual !== undefined;
765
+
766
+ if (virtual !== undefined) {
767
+ vs.skip = virtual.skip;
768
+ vs.total = virtual.total;
769
+ vs.pageSize = virtual.pageSize;
770
+ }
771
+
772
+ var renderList = function renderList() {
773
+ var _this2 = this;
774
+
775
+ var _a = this.$props,
776
+ dataItemKey = _a.dataItemKey,
777
+ _b = _a.dataItems,
778
+ dataItems = _b === void 0 ? [] : _b;
779
+ var itemRender = templateRendering.call(this, this.$props.itemRender, getListeners.call(this));
780
+ var listNoDataRender = templateRendering.call(this, this.$props.listNoDataRender, getListeners.call(this));
781
+
782
+ if (!virtual) {
783
+ virtual = {
784
+ skip: 0
785
+ };
786
+ }
787
+
788
+ var skip = virtual.skip;
789
+ var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
790
+ var translate = "translateY(".concat(vs.translate, "px)");
791
+ var focusedIndex = opened ? this.getFocusedIndex() : undefined;
792
+ var value = isPresent(text) && text !== selectedItemText ? null : this.computedValue();
793
+ return (// @ts-ignore function children
794
+ h(List, {
795
+ id: base.listBoxId,
796
+ attrs: this.v3 ? undefined : {
797
+ id: base.listBoxId,
798
+ show: opened,
799
+ dataItems: dataItems,
800
+ focusedIndex: focusedIndex,
801
+ value: value,
802
+ textField: textField,
803
+ valueField: dataItemKey,
804
+ optionsGuid: base.guid,
805
+ wrapperStyle: {
806
+ maxHeight: popupSettings.height
807
+ },
808
+ wrapperCssClass: 'k-list-content',
809
+ listStyle: vs.enabled ? {
810
+ transform: translate
811
+ } : undefined,
812
+ skip: skip,
813
+ itemRender: itemRender,
814
+ noDataRender: listNoDataRender
815
+ },
816
+ show: opened,
817
+ dataItems: dataItems,
818
+ focusedIndex: focusedIndex,
819
+ value: value,
820
+ textField: textField,
821
+ valueField: dataItemKey,
822
+ optionsGuid: base.guid,
823
+ ref: 'list',
824
+ wrapperStyle: {
825
+ maxHeight: popupSettings.height
826
+ },
827
+ wrapperCssClass: 'k-list-content',
828
+ listStyle: vs.enabled ? {
829
+ transform: translate
830
+ } : undefined,
831
+ key: "listkey",
832
+ skip: skip,
833
+ onListclick: this.handleItemClick,
834
+ on: this.v3 ? undefined : {
835
+ "listclick": this.handleItemClick,
836
+ "scroll": vs.scrollHandler
837
+ },
838
+ itemRender: itemRender,
839
+ noDataRender: listNoDataRender,
840
+ onScroll: vs.scrollHandler
841
+ }, this.v3 ? function () {
842
+ return [renderScrollElement.call(_this2)];
843
+ } : [renderScrollElement.call(_this2)])
844
+ );
845
+ };
846
+
847
+ var renderScrollElement = function renderScrollElement() {
848
+ return vs.enabled && h("div", {
849
+ ref: 'scrollElement',
850
+ key: 'scrollElementKey'
851
+ });
852
+ };
853
+
854
+ var renderListContainer = function renderListContainer() {
855
+ var _this3 = this;
856
+
857
+ var _a;
858
+
859
+ var headerTemplate = templateRendering.call(this, this.$props.header, getListeners.call(this));
860
+ var footerTemplate = templateRendering.call(this, this.$props.footer, getListeners.call(this));
861
+ var header = getTemplate.call(this, {
862
+ h: h,
863
+ template: headerTemplate
864
+ });
865
+ var footer = getTemplate.call(this, {
866
+ h: h,
867
+ template: footerTemplate
868
+ });
869
+ var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
870
+ var popupWidth = popupSettings.width !== undefined ? popupSettings.width : base.popupWidth;
871
+ return (// @ts-ignore function children
872
+ h(ListContainer, {
873
+ onMousedown: function onMousedown(e) {
874
+ return e.preventDefault();
875
+ },
876
+ on: this.v3 ? undefined : {
877
+ "mousedown": function onMousedown(e) {
878
+ return e.preventDefault();
879
+ }
880
+ },
881
+ width: popupWidth,
882
+ attrs: this.v3 ? undefined : {
883
+ width: popupWidth,
884
+ popupSettings: __assign(__assign({}, popupSettings), {
885
+ anchor: this.anchor,
886
+ show: opened,
887
+ popupClass: classNames(popupSettings.popupClass, 'k-list', (_a = {}, _a["k-list-".concat(sizeMap[size] || size)] = size, _a['k-virtual-list'] = this.base.vs.enabled, _a)),
888
+ className: classNames('k-list-container', popupSettings.className)
889
+ }),
890
+ dir: dir !== undefined ? dir : this.base.dirCalculated
891
+ },
892
+ popupSettings: __assign(__assign({}, popupSettings), {
893
+ anchor: this.anchor,
894
+ show: opened,
895
+ popupClass: classNames(popupSettings.popupClass, 'k-list', (_a = {}, _a["k-list-".concat(sizeMap[size] || size)] = size, _a['k-virtual-list'] = this.base.vs.enabled, _a)),
896
+ className: classNames('k-list-container', popupSettings.className)
897
+ }),
898
+ dir: dir !== undefined ? dir : this.base.dirCalculated
899
+ }, this.v3 ? function () {
900
+ return [header && h("div", {
901
+ "class": "k-list-header"
902
+ }, [header]), renderList.call(_this3), footer && h("div", {
903
+ "class": "k-list-footer"
904
+ }, [footer])];
905
+ } : [header && h("div", {
906
+ "class": "k-list-header"
907
+ }, [header]), renderList.call(_this3), footer && h("div", {
908
+ "class": "k-list-footer"
909
+ }, [footer])])
910
+ );
911
+ };
912
+
913
+ var renderSearchBar = function renderSearchBar(searchText, searchId) {
914
+ var _this = this;
915
+
916
+ var _a = this.$props,
917
+ placeholder = _a.placeholder,
918
+ tabIndex = _a.tabIndex,
919
+ _b = _a.dataItems,
920
+ dataItems = _b === void 0 ? [] : _b,
921
+ dataItemKey = _a.dataItemKey;
922
+
923
+ if (!virtual) {
924
+ virtual = {
925
+ skip: 0
926
+ };
927
+ }
928
+
929
+ var opened = this.$props.opened !== undefined ? this.$props.opened : this.currentOpened;
930
+ var value = this.computedValue();
931
+ var selectedIndex = Math.max(0, dataItems.findIndex(function (i) {
932
+ return areSame(i, value, dataItemKey);
933
+ }));
934
+
935
+ if (this.suggested && !areSame(this.valueOnDidUpdate, value, dataItemKey)) {
936
+ this.suggested = '';
937
+ }
938
+
939
+ return (// @ts-ignore function children
940
+ h(SearchBar, {
941
+ id: searchId,
942
+ attrs: this.v3 ? undefined : {
943
+ id: searchId,
944
+ placeholder: placeholder,
945
+ tabIndex: tabIndex || undefined,
946
+ accessKey: this.$props.accessKey,
947
+ value: searchText + this.suggested,
948
+ suggestedText: this.suggested,
949
+ disabled: disabled,
950
+ expanded: opened,
951
+ owns: this.base.listBoxId,
952
+ activedescendant: this.base.guid + '-' + (selectedIndex + virtual.skip),
953
+ ariaLabelledBy: this.$props.ariaLabelledBy,
954
+ ariaDescribedBy: this.$props.ariaDescribedBy
955
+ },
956
+ placeholder: placeholder,
957
+ tabIndex: tabIndex || undefined,
958
+ accessKey: this.$props.accessKey,
959
+ value: searchText + this.suggested,
960
+ suggestedText: this.suggested,
961
+ ref: this.v3 ? function (el) {
962
+ _this.inputRef = el;
963
+ } : 'input',
964
+ onKeydown: this.onInputKeyDown,
965
+ on: this.v3 ? undefined : {
966
+ "keydown": this.onInputKeyDown,
967
+ "change": this.inputOnChange,
968
+ "focus": this.base.handleFocus,
969
+ "blur": this.handleBlur
970
+ },
971
+ onChange: this.inputOnChange,
972
+ onFocus: this.base.handleFocus,
973
+ onBlur: this.handleBlur,
974
+ disabled: disabled,
975
+ expanded: opened,
976
+ owns: this.base.listBoxId,
977
+ activedescendant: this.base.guid + '-' + (selectedIndex + virtual.skip),
978
+ ariaLabelledBy: this.$props.ariaLabelledBy,
979
+ ariaDescribedBy: this.$props.ariaDescribedBy
980
+ })
981
+ );
982
+ };
983
+
984
+ var combobox = h("span", {
985
+ "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),
986
+ ref: setRef(this, 'kendoAnchor', this.anchor),
987
+ style: !label ? style : __assign(__assign({}, style), {
988
+ width: undefined
989
+ }),
990
+ dir: dir,
991
+ attrs: this.v3 ? undefined : {
992
+ dir: dir
993
+ }
994
+ }, [renderSearchBar.call(this, inputText || '', id), renderClearButton && !loading && // @ts-ignore function children
995
+ h(ClearButton, {
996
+ onClearclick: this.clearButtonClick,
997
+ on: this.v3 ? undefined : {
998
+ "clearclick": this.clearButtonClick
999
+ },
1000
+ key: "clearbutton"
1001
+ }), loading && h("span", {
1002
+ "class": "k-icon k-input-loading-icon k-i-loading",
1003
+ key: "loading"
1004
+ }), // @ts-ignore
1005
+ h(KButton, {
1006
+ type: "button",
1007
+ attrs: this.v3 ? undefined : {
1008
+ type: "button",
1009
+ tabIndex: -1,
1010
+ "aria-label": ariaLabelExpandButton,
1011
+ size: size,
1012
+ fillMode: fillMode,
1013
+ rounded: null,
1014
+ iconClass: classNames('k-icon k-i-arrow-s', iconClassName)
1015
+ },
1016
+ tabIndex: -1,
1017
+ "aria-label": ariaLabelExpandButton,
1018
+ size: size,
1019
+ fillMode: fillMode,
1020
+ rounded: null,
1021
+ "class": 'k-input-button',
1022
+ iconClass: classNames('k-icon k-i-arrow-s', iconClassName),
1023
+ onClick: this.toggleBtnClick,
1024
+ on: this.v3 ? undefined : {
1025
+ "click": this.toggleBtnClick,
1026
+ "mousedown": function mousedown(e) {
1027
+ return e.preventDefault();
1028
+ }
1029
+ },
1030
+ onMousedown: function mousedown(e) {
1031
+ return e.preventDefault();
1032
+ }
1033
+ }), renderListContainer.call(this)]);
1034
+ return label ? h("span", {
1035
+ "class": this.spanClassNames,
1036
+ onFocusin: this.handleFocus,
1037
+ on: this.v3 ? undefined : {
1038
+ "focusin": this.handleFocus
1039
+ },
1040
+ dir: this.$props.dir,
1041
+ attrs: this.v3 ? undefined : {
1042
+ dir: this.$props.dir
1043
+ }
1044
+ }, [combobox, this.$props.label ? id ? h("label", {
1045
+ "for": id,
1046
+ attrs: this.v3 ? undefined : {
1047
+ "for": id
1048
+ },
1049
+ "class": "k-label"
1050
+ }, [this.$props.label]) : h("span", {
1051
+ "class": "k-label"
1052
+ }, [this.$props.label]) : null]) : combobox;
1053
+ }
1054
+ };
1055
+ /**
1056
+ * @hidden
1057
+ */
1058
+
1059
+ var ComboBox = ComboBoxVue2;
1060
+ export { ComboBox, ComboBoxVue2 };