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

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