@dimailn/vuetify 2.7.2-alpha28 → 2.7.2-alpha29
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.
- package/dist/vuetify.js +1416 -304
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +1 -1
- package/dist/vuetify.min.js +2 -2
- package/es5/components/VAlert/VAlert.js +38 -8
- package/es5/components/VAlert/VAlert.js.map +1 -1
- package/es5/components/VAutocomplete/VAutocomplete.js +1 -0
- package/es5/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/es5/components/VBadge/VBadge.js +28 -0
- package/es5/components/VBadge/VBadge.js.map +1 -1
- package/es5/components/VBanner/VBanner.js +34 -6
- package/es5/components/VBanner/VBanner.js.map +1 -1
- package/es5/components/VBottomNavigation/VBottomNavigation.js +25 -0
- package/es5/components/VBottomNavigation/VBottomNavigation.js.map +1 -1
- package/es5/components/VCarousel/VCarousel.js +28 -3
- package/es5/components/VCarousel/VCarousel.js.map +1 -1
- package/es5/components/VCheckbox/VSimpleCheckbox.js +30 -2
- package/es5/components/VCheckbox/VSimpleCheckbox.js.map +1 -1
- package/es5/components/VColorPicker/VColorPicker.js +30 -2
- package/es5/components/VColorPicker/VColorPicker.js.map +1 -1
- package/es5/components/VCombobox/VCombobox.js +1 -0
- package/es5/components/VCombobox/VCombobox.js.map +1 -1
- package/es5/components/VDataIterator/VDataFooter.js +16 -7
- package/es5/components/VDataIterator/VDataFooter.js.map +1 -1
- package/es5/components/VDataIterator/VDataIterator.js +42 -47
- package/es5/components/VDataIterator/VDataIterator.js.map +1 -1
- package/es5/components/VDataTable/RowGroup.js +46 -15
- package/es5/components/VDataTable/RowGroup.js.map +1 -1
- package/es5/components/VDataTable/VDataTable.js +10 -18
- package/es5/components/VDataTable/VDataTable.js.map +1 -1
- package/es5/components/VDataTable/VDataTableHeader.js.map +1 -1
- package/es5/components/VDataTable/VDataTableHeaderDesktop.js +3 -0
- package/es5/components/VDataTable/VDataTableHeaderDesktop.js.map +1 -1
- package/es5/components/VDataTable/VDataTableHeaderMobile.js +28 -37
- package/es5/components/VDataTable/VDataTableHeaderMobile.js.map +1 -1
- package/es5/components/VDataTable/VEditDialog.js +3 -4
- package/es5/components/VDataTable/VEditDialog.js.map +1 -1
- package/es5/components/VDataTable/VSimpleTable.js +1 -1
- package/es5/components/VDataTable/VSimpleTable.js.map +1 -1
- package/es5/components/VDataTable/VVirtualTable.js +5 -5
- package/es5/components/VDataTable/VVirtualTable.js.map +1 -1
- package/es5/components/VDataTable/mixins/header.js +1 -1
- package/es5/components/VDataTable/mixins/header.js.map +1 -1
- package/es5/components/VDatePicker/VDatePicker.js +21 -9
- package/es5/components/VDatePicker/VDatePicker.js.map +1 -1
- package/es5/components/VDatePicker/VDatePickerHeader.js +24 -8
- package/es5/components/VDatePicker/VDatePickerHeader.js.map +1 -1
- package/es5/components/VDatePicker/VDatePickerTitle.js +33 -8
- package/es5/components/VDatePicker/VDatePickerTitle.js.map +1 -1
- package/es5/components/VDatePicker/VDatePickerYears.js +38 -13
- package/es5/components/VDatePicker/VDatePickerYears.js.map +1 -1
- package/es5/components/VDatePicker/mixins/date-picker-table.js +33 -17
- package/es5/components/VDatePicker/mixins/date-picker-table.js.map +1 -1
- package/es5/components/VInput/VInput.js +36 -8
- package/es5/components/VInput/VInput.js.map +1 -1
- package/es5/components/VList/VListGroup.js +47 -21
- package/es5/components/VList/VListGroup.js.map +1 -1
- package/es5/components/VList/VListItem.js +29 -4
- package/es5/components/VList/VListItem.js.map +1 -1
- package/es5/components/VMenu/VMenu.js +55 -30
- package/es5/components/VMenu/VMenu.js.map +1 -1
- package/es5/components/VMessages/VMessages.js +30 -7
- package/es5/components/VMessages/VMessages.js.map +1 -1
- package/es5/components/VNavigationDrawer/VNavigationDrawer.js +36 -9
- package/es5/components/VNavigationDrawer/VNavigationDrawer.js.map +1 -1
- package/es5/components/VOverlay/VOverlay.js +28 -0
- package/es5/components/VOverlay/VOverlay.js.map +1 -1
- package/es5/components/VPagination/VPagination.js +30 -6
- package/es5/components/VPagination/VPagination.js.map +1 -1
- package/es5/components/VProgressLinear/VProgressLinear.js +28 -0
- package/es5/components/VProgressLinear/VProgressLinear.js.map +1 -1
- package/es5/components/VRadioGroup/VRadioGroup.js +28 -0
- package/es5/components/VRadioGroup/VRadioGroup.js.map +1 -1
- package/es5/components/VRating/VRating.js +45 -17
- package/es5/components/VRating/VRating.js.map +1 -1
- package/es5/components/VSelect/VSelect.js +112 -84
- package/es5/components/VSelect/VSelect.js.map +1 -1
- package/es5/components/VSelect/VSelectList.js +58 -17
- package/es5/components/VSelect/VSelectList.js.map +1 -1
- package/es5/components/VSlider/VSlider.js +42 -16
- package/es5/components/VSlider/VSlider.js.map +1 -1
- package/es5/components/VSpeedDial/VSpeedDial.js +10 -8
- package/es5/components/VSpeedDial/VSpeedDial.js.map +1 -1
- package/es5/components/VTabs/VTabs.js +45 -17
- package/es5/components/VTabs/VTabs.js.map +1 -1
- package/es5/framework.js +1 -1
- package/es5/mixins/validatable/index.js +24 -0
- package/es5/mixins/validatable/index.js.map +1 -1
- package/es5/util/console.js +49 -18
- package/es5/util/console.js.map +1 -1
- package/es5/util/helpers.js +5 -1
- package/es5/util/helpers.js.map +1 -1
- package/lib/components/VAlert/VAlert.js +12 -6
- package/lib/components/VAlert/VAlert.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.js +1 -0
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VBadge/VBadge.js +11 -0
- package/lib/components/VBadge/VBadge.js.map +1 -1
- package/lib/components/VBanner/VBanner.js +11 -0
- package/lib/components/VBanner/VBanner.js.map +1 -1
- package/lib/components/VBottomNavigation/VBottomNavigation.js +7 -0
- package/lib/components/VBottomNavigation/VBottomNavigation.js.map +1 -1
- package/lib/components/VCarousel/VCarousel.js +7 -0
- package/lib/components/VCarousel/VCarousel.js.map +1 -1
- package/lib/components/VCheckbox/VSimpleCheckbox.js +11 -0
- package/lib/components/VCheckbox/VSimpleCheckbox.js.map +1 -1
- package/lib/components/VColorPicker/VColorPicker.js +12 -1
- package/lib/components/VColorPicker/VColorPicker.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.js +1 -0
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VDataIterator/VDataFooter.js +14 -7
- package/lib/components/VDataIterator/VDataFooter.js.map +1 -1
- package/lib/components/VDataIterator/VDataIterator.js +26 -31
- package/lib/components/VDataIterator/VDataIterator.js.map +1 -1
- package/lib/components/VDataTable/RowGroup.js +30 -14
- package/lib/components/VDataTable/RowGroup.js.map +1 -1
- package/lib/components/VDataTable/VDataTable.js +8 -15
- package/lib/components/VDataTable/VDataTable.js.map +1 -1
- package/lib/components/VDataTable/VDataTableHeader.js +1 -1
- package/lib/components/VDataTable/VDataTableHeader.js.map +1 -1
- package/lib/components/VDataTable/VDataTableHeaderDesktop.js +3 -0
- package/lib/components/VDataTable/VDataTableHeaderDesktop.js.map +1 -1
- package/lib/components/VDataTable/VDataTableHeaderMobile.js +17 -25
- package/lib/components/VDataTable/VDataTableHeaderMobile.js.map +1 -1
- package/lib/components/VDataTable/VEditDialog.js +3 -4
- package/lib/components/VDataTable/VEditDialog.js.map +1 -1
- package/lib/components/VDataTable/VSimpleTable.js +1 -1
- package/lib/components/VDataTable/VSimpleTable.js.map +1 -1
- package/lib/components/VDataTable/VVirtualTable.js +1 -2
- package/lib/components/VDataTable/VVirtualTable.js.map +1 -1
- package/lib/components/VDataTable/mixins/header.js +1 -1
- package/lib/components/VDataTable/mixins/header.js.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.js +7 -1
- package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
- package/lib/components/VDatePicker/VDatePickerHeader.js +12 -1
- package/lib/components/VDatePicker/VDatePickerHeader.js.map +1 -1
- package/lib/components/VDatePicker/VDatePickerTitle.js +11 -0
- package/lib/components/VDatePicker/VDatePickerTitle.js.map +1 -1
- package/lib/components/VDatePicker/VDatePickerYears.js +11 -1
- package/lib/components/VDatePicker/VDatePickerYears.js.map +1 -1
- package/lib/components/VDatePicker/mixins/date-picker-table.js +12 -1
- package/lib/components/VDatePicker/mixins/date-picker-table.js.map +1 -1
- package/lib/components/VInput/VInput.js +13 -3
- package/lib/components/VInput/VInput.js.map +1 -1
- package/lib/components/VList/VListGroup.js +16 -8
- package/lib/components/VList/VListGroup.js.map +1 -1
- package/lib/components/VList/VListItem.js +8 -1
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VMenu/VMenu.js +14 -3
- package/lib/components/VMenu/VMenu.js.map +1 -1
- package/lib/components/VMessages/VMessages.js +13 -2
- package/lib/components/VMessages/VMessages.js.map +1 -1
- package/lib/components/VNavigationDrawer/VNavigationDrawer.js +11 -2
- package/lib/components/VNavigationDrawer/VNavigationDrawer.js.map +1 -1
- package/lib/components/VOverlay/VOverlay.js +11 -0
- package/lib/components/VOverlay/VOverlay.js.map +1 -1
- package/lib/components/VPagination/VPagination.js +11 -0
- package/lib/components/VPagination/VPagination.js.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.js +11 -0
- package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
- package/lib/components/VRadioGroup/VRadioGroup.js +11 -0
- package/lib/components/VRadioGroup/VRadioGroup.js.map +1 -1
- package/lib/components/VRating/VRating.js +11 -0
- package/lib/components/VRating/VRating.js.map +1 -1
- package/lib/components/VSelect/VSelect.js +52 -36
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSelect/VSelectList.js +21 -3
- package/lib/components/VSelect/VSelectList.js.map +1 -1
- package/lib/components/VSlider/VSlider.js +11 -1
- package/lib/components/VSlider/VSlider.js.map +1 -1
- package/lib/components/VSpeedDial/VSpeedDial.js +7 -7
- package/lib/components/VSpeedDial/VSpeedDial.js.map +1 -1
- package/lib/components/VTabs/VTabs.js +11 -0
- package/lib/components/VTabs/VTabs.js.map +1 -1
- package/lib/framework.js +1 -1
- package/lib/mixins/validatable/index.js +7 -1
- package/lib/mixins/validatable/index.js.map +1 -1
- package/lib/util/console.js +47 -17
- package/lib/util/console.js.map +1 -1
- package/lib/util/helpers.js +5 -1
- package/lib/util/helpers.js.map +1 -1
- package/package.json +1 -1
- package/src/components/VAlert/VAlert.ts +17 -7
- package/src/components/VAlert/__tests__/VAlert.spec.ts +78 -50
- package/src/components/VAlert/__tests__/__snapshots__/VAlert.spec.ts.snap +16 -18
- package/src/components/VAutocomplete/VAutocomplete.ts +22 -0
- package/src/components/VAutocomplete/__tests__/VAutocomplete.spec.ts +51 -53
- package/src/components/VAutocomplete/__tests__/VAutocomplete2.spec.ts +77 -48
- package/src/components/VAutocomplete/__tests__/VAutocomplete3.spec.ts +101 -39
- package/src/components/VBadge/VBadge.ts +13 -0
- package/src/components/VBanner/VBanner.ts +13 -0
- package/src/components/VBottomNavigation/VBottomNavigation.ts +10 -0
- package/src/components/VCarousel/VCarousel.ts +11 -0
- package/src/components/VCheckbox/VSimpleCheckbox.ts +13 -0
- package/src/components/VColorPicker/VColorPicker.ts +13 -0
- package/src/components/VCombobox/VCombobox.ts +23 -0
- package/src/components/VCombobox/__tests__/VCombobox-multiple.spec.ts +118 -110
- package/src/components/VCombobox/__tests__/VCombobox.spec.ts +119 -93
- package/src/components/VDataIterator/VDataFooter.ts +14 -9
- package/src/components/VDataIterator/VDataIterator.ts +46 -34
- package/src/components/VDataIterator/__tests__/VDataFooter.spec.ts +38 -39
- package/src/components/VDataIterator/__tests__/VDataIterator.spec.ts +90 -122
- package/src/components/VDataIterator/__tests__/__snapshots__/VDataFooter.spec.ts.snap +92 -82
- package/src/components/VDataIterator/__tests__/__snapshots__/VDataIterator.spec.ts.snap +79 -69
- package/src/components/VDataTable/RowGroup.ts +33 -16
- package/src/components/VDataTable/VDataTable.ts +8 -15
- package/src/components/VDataTable/VDataTableHeader.ts +2 -2
- package/src/components/VDataTable/VDataTableHeaderDesktop.ts +4 -0
- package/src/components/VDataTable/VDataTableHeaderMobile.ts +16 -25
- package/src/components/VDataTable/VEditDialog.ts +3 -3
- package/src/components/VDataTable/VSimpleTable.ts +2 -3
- package/src/components/VDataTable/VVirtualTable.ts +1 -2
- package/src/components/VDataTable/__tests__/VDataTable.spec.ts +18 -22
- package/src/components/VDataTable/__tests__/VDataTableHeader.spec.ts +39 -29
- package/src/components/VDataTable/__tests__/VEditDialog.spec.ts +7 -2
- package/src/components/VDataTable/__tests__/VSimpleTable.spec.ts +11 -16
- package/src/components/VDataTable/__tests__/__snapshots__/VDataTable.spec.ts.snap +2543 -2086
- package/src/components/VDataTable/__tests__/__snapshots__/VDataTableHeader.spec.ts.snap +115 -144
- package/src/components/VDataTable/__tests__/__snapshots__/VEditDialog.spec.ts.snap +4 -12
- package/src/components/VDataTable/__tests__/__snapshots__/VSimpleTable.spec.ts.snap +22 -18
- package/src/components/VDataTable/mixins/__tests__/__snapshots__/header.spec.ts.snap +9 -12
- package/src/components/VDataTable/mixins/__tests__/header.spec.ts +15 -15
- package/src/components/VDataTable/mixins/header.ts +1 -1
- package/src/components/VDatePicker/VDatePicker.ts +11 -1
- package/src/components/VDatePicker/VDatePickerHeader.ts +13 -0
- package/src/components/VDatePicker/VDatePickerTitle.ts +12 -0
- package/src/components/VDatePicker/VDatePickerYears.ts +13 -0
- package/src/components/VDatePicker/mixins/date-picker-table.ts +13 -0
- package/src/components/VInput/VInput.ts +18 -5
- package/src/components/VList/VListGroup.ts +22 -10
- package/src/components/VList/VListItem.ts +10 -1
- package/src/components/VMenu/VMenu.ts +21 -3
- package/src/components/VMenu/__tests__/VMenu.spec.ts +90 -69
- package/src/components/VMenu/__tests__/__snapshots__/VMenu.spec.ts.snap +3 -5
- package/src/components/VMessages/VMessages.ts +15 -4
- package/src/components/VMessages/__tests__/VMessages.spec.ts +43 -5
- package/src/components/VMessages/__tests__/__snapshots__/VMessages.spec.ts.snap +16 -25
- package/src/components/VNavigationDrawer/VNavigationDrawer.ts +21 -11
- package/src/components/VOverlay/VOverlay.ts +12 -0
- package/src/components/VPagination/VPagination.ts +23 -9
- package/src/components/VProgressLinear/VProgressLinear.ts +13 -0
- package/src/components/VRadioGroup/VRadioGroup.ts +14 -0
- package/src/components/VRating/VRating.ts +13 -0
- package/src/components/VSelect/VSelect.ts +60 -43
- package/src/components/VSelect/VSelectList.ts +29 -8
- package/src/components/VSlider/VSlider.ts +14 -1
- package/src/components/VSpeedDial/VSpeedDial.ts +7 -8
- package/src/components/VSpeedDial/__tests__/VSpeedDial.spec.ts +21 -13
- package/src/components/VSpeedDial/__tests__/__snapshots__/VSpeedDial.spec.ts.snap +6 -6
- package/src/components/VTabs/VTabs.ts +14 -0
- package/src/mixins/validatable/index.ts +11 -1
- package/src/util/__tests__/console.spec.ts +124 -11
- package/src/util/__tests__/helpers.spec.ts +59 -31
- package/src/util/console.ts +43 -24
- package/src/util/helpers.ts +8 -4
|
@@ -2,30 +2,27 @@
|
|
|
2
2
|
import VAlert from '../VAlert'
|
|
3
3
|
|
|
4
4
|
// Utilities
|
|
5
|
-
import {
|
|
6
|
-
mount,
|
|
7
|
-
Wrapper,
|
|
8
|
-
} from '@vue/test-utils'
|
|
5
|
+
import { mount, enableAutoUnmount, VueWrapper, config } from '@vue/test-utils'
|
|
9
6
|
|
|
10
7
|
// Types
|
|
11
8
|
import { ExtractVue } from '../../../util/mixins'
|
|
12
9
|
|
|
13
10
|
describe('VAlert.ts', () => {
|
|
14
|
-
type Instance = ExtractVue<typeof VAlert
|
|
15
|
-
let mountFunction: (options?: object) =>
|
|
11
|
+
type Instance = ExtractVue<typeof VAlert>;
|
|
12
|
+
let mountFunction: (options?: object) => VueWrapper<Instance>
|
|
13
|
+
|
|
14
|
+
enableAutoUnmount(afterEach)
|
|
16
15
|
|
|
17
16
|
beforeEach(() => {
|
|
18
17
|
mountFunction = (options = {}) => {
|
|
18
|
+
console.log('options', options)
|
|
19
19
|
return mount(VAlert, {
|
|
20
20
|
...options,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
$vuetify: {
|
|
25
|
-
lang: {
|
|
26
|
-
t: (val: string) => val,
|
|
27
|
-
},
|
|
21
|
+
global: {
|
|
22
|
+
mocks: {
|
|
23
|
+
...config.global.mocks,
|
|
28
24
|
},
|
|
25
|
+
...options.global,
|
|
29
26
|
},
|
|
30
27
|
})
|
|
31
28
|
}
|
|
@@ -37,16 +34,18 @@ describe('VAlert.ts', () => {
|
|
|
37
34
|
expect(wrapper.element.style.display).toBe('')
|
|
38
35
|
expect(wrapper.html()).toMatchSnapshot()
|
|
39
36
|
|
|
40
|
-
wrapper.setProps({
|
|
41
|
-
await wrapper.vm.$nextTick()
|
|
37
|
+
await wrapper.setProps({ modelValue: false })
|
|
42
38
|
|
|
39
|
+
// Check that isActive is false
|
|
40
|
+
expect(wrapper.vm.isActive).toBe(false)
|
|
41
|
+
// Check that element is hidden
|
|
43
42
|
expect(wrapper.element.style.display).toBe('none')
|
|
44
43
|
expect(wrapper.html()).toMatchSnapshot()
|
|
45
44
|
})
|
|
46
45
|
|
|
47
46
|
it('should have a close icon', () => {
|
|
48
47
|
const wrapper = mountFunction({
|
|
49
|
-
|
|
48
|
+
props: { dismissible: true },
|
|
50
49
|
})
|
|
51
50
|
|
|
52
51
|
expect(wrapper.html()).toMatchSnapshot()
|
|
@@ -54,66 +53,61 @@ describe('VAlert.ts', () => {
|
|
|
54
53
|
|
|
55
54
|
it('should be dismissible', async () => {
|
|
56
55
|
const wrapper = mountFunction({
|
|
57
|
-
|
|
56
|
+
props: {
|
|
58
57
|
dismissible: true,
|
|
59
58
|
},
|
|
60
59
|
})
|
|
61
60
|
|
|
62
61
|
const icon = wrapper.find('.v-alert__dismissible')
|
|
63
|
-
const input = jest.fn(show => wrapper.setProps({ show }))
|
|
64
|
-
|
|
65
|
-
wrapper.vm.$on('input', input)
|
|
66
62
|
|
|
67
|
-
icon.trigger('click')
|
|
68
|
-
await wrapper.vm.$nextTick()
|
|
63
|
+
await icon.trigger('click')
|
|
69
64
|
|
|
70
|
-
expect(
|
|
65
|
+
expect(wrapper.emitted('update:modelValue')).toBeTruthy()
|
|
66
|
+
expect(wrapper.emitted('update:modelValue')?.[0]).toEqual([false])
|
|
71
67
|
expect(wrapper.html()).toMatchSnapshot()
|
|
72
68
|
})
|
|
73
69
|
|
|
74
70
|
it('should have a custom icon', () => {
|
|
75
71
|
const wrapper = mountFunction({
|
|
76
|
-
|
|
77
|
-
icon: 'list',
|
|
72
|
+
props: {
|
|
73
|
+
icon: 'mdi-list',
|
|
78
74
|
},
|
|
79
75
|
})
|
|
80
76
|
|
|
81
77
|
const icon = wrapper.find('.v-alert__icon')
|
|
82
78
|
|
|
83
|
-
expect(icon.
|
|
79
|
+
expect(icon.exists()).toBe(true)
|
|
80
|
+
// С component: null иконки рендерятся как font-иконки с содержимым
|
|
81
|
+
expect(icon.classes()).toContain('v-icon')
|
|
82
|
+
expect(icon.classes()).toContain('v-alert__icon')
|
|
84
83
|
})
|
|
85
84
|
|
|
86
85
|
it('should have no icon', () => {
|
|
87
86
|
const wrapper = mountFunction()
|
|
88
87
|
|
|
89
|
-
expect(wrapper.
|
|
88
|
+
expect(wrapper.find('.v-icon').exists()).toBe(false)
|
|
90
89
|
})
|
|
91
90
|
|
|
92
|
-
|
|
93
|
-
// https://github.com/vuejs/vue-test-utils/issues/1130
|
|
94
|
-
it.skip('should display contextual colors by type', async () => {
|
|
91
|
+
it('should display contextual colors by type', async () => {
|
|
95
92
|
const wrapper = mountFunction({
|
|
96
|
-
|
|
93
|
+
props: { type: 'error' },
|
|
97
94
|
})
|
|
98
95
|
|
|
99
96
|
expect(wrapper.classes('error')).toBe(true)
|
|
100
97
|
|
|
101
|
-
wrapper.setProps({ type: 'success' })
|
|
102
|
-
await wrapper.vm.$nextTick()
|
|
98
|
+
await wrapper.setProps({ type: 'success' })
|
|
103
99
|
expect(wrapper.classes('success')).toBe(true)
|
|
104
100
|
|
|
105
|
-
wrapper.setProps({ type: 'warning' })
|
|
106
|
-
await wrapper.vm.$nextTick()
|
|
101
|
+
await wrapper.setProps({ type: 'warning' })
|
|
107
102
|
expect(wrapper.classes('warning')).toBe(true)
|
|
108
103
|
|
|
109
|
-
wrapper.setProps({ type: 'info' })
|
|
110
|
-
await wrapper.vm.$nextTick()
|
|
104
|
+
await wrapper.setProps({ type: 'info' })
|
|
111
105
|
expect(wrapper.classes('info')).toBe(true)
|
|
112
106
|
})
|
|
113
107
|
|
|
114
108
|
it('should allow overriding color for contextual alert', () => {
|
|
115
109
|
const wrapper = mountFunction({
|
|
116
|
-
|
|
110
|
+
props: {
|
|
117
111
|
type: 'error',
|
|
118
112
|
color: 'primary',
|
|
119
113
|
},
|
|
@@ -124,28 +118,33 @@ describe('VAlert.ts', () => {
|
|
|
124
118
|
|
|
125
119
|
it('should allow overriding icon for contextual alert', () => {
|
|
126
120
|
const wrapper = mountFunction({
|
|
127
|
-
|
|
121
|
+
props: {
|
|
128
122
|
type: 'error',
|
|
129
|
-
icon: 'block',
|
|
123
|
+
icon: 'mdi-block',
|
|
130
124
|
},
|
|
131
125
|
})
|
|
132
126
|
|
|
133
127
|
const icon = wrapper.find('.v-alert__icon')
|
|
134
128
|
|
|
135
|
-
expect(icon.
|
|
129
|
+
expect(icon.exists()).toBe(true)
|
|
130
|
+
// С component: null иконки рендерятся как font-иконки с содержимым
|
|
131
|
+
expect(icon.classes()).toContain('v-icon')
|
|
132
|
+
expect(icon.classes()).toContain('v-alert__icon')
|
|
136
133
|
})
|
|
137
134
|
|
|
138
135
|
it('should render custom dismissible icon', () => {
|
|
139
136
|
const wrapper = mountFunction({
|
|
140
|
-
|
|
137
|
+
props: {
|
|
141
138
|
dismissible: true,
|
|
142
|
-
closeIcon: '
|
|
139
|
+
closeIcon: 'mdi-close',
|
|
143
140
|
},
|
|
144
141
|
})
|
|
145
142
|
|
|
146
|
-
const icon = wrapper.find('.v-alert__content + .v-btn')
|
|
143
|
+
const icon = wrapper.find('.v-alert__content + .v-btn .v-icon')
|
|
147
144
|
|
|
148
|
-
expect(icon.
|
|
145
|
+
expect(icon.exists()).toBe(true)
|
|
146
|
+
// С component: null иконки рендерятся как font-иконки с содержимым
|
|
147
|
+
expect(icon.classes()).toContain('v-icon')
|
|
149
148
|
})
|
|
150
149
|
|
|
151
150
|
it('should show border', async () => {
|
|
@@ -155,8 +154,7 @@ describe('VAlert.ts', () => {
|
|
|
155
154
|
expect(wrapper.classes('v-alert--border')).toBe(false)
|
|
156
155
|
|
|
157
156
|
for (const border of directions) {
|
|
158
|
-
wrapper.setProps({ border })
|
|
159
|
-
await wrapper.vm.$nextTick()
|
|
157
|
+
await wrapper.setProps({ border })
|
|
160
158
|
|
|
161
159
|
expect(wrapper.classes('v-alert--border')).toBe(true)
|
|
162
160
|
expect(wrapper.classes(`v-alert--border-${border}`)).toBe(true)
|
|
@@ -165,7 +163,7 @@ describe('VAlert.ts', () => {
|
|
|
165
163
|
|
|
166
164
|
it('should move color classes to border and icon elements', async () => {
|
|
167
165
|
const wrapper = mountFunction({
|
|
168
|
-
|
|
166
|
+
props: {
|
|
169
167
|
color: 'pink',
|
|
170
168
|
border: 'left',
|
|
171
169
|
},
|
|
@@ -175,8 +173,7 @@ describe('VAlert.ts', () => {
|
|
|
175
173
|
expect(wrapper.classes('pink')).toBe(true)
|
|
176
174
|
expect(border.classes('pink')).toBe(false)
|
|
177
175
|
|
|
178
|
-
wrapper.setProps({ coloredBorder: true })
|
|
179
|
-
await wrapper.vm.$nextTick()
|
|
176
|
+
await wrapper.setProps({ coloredBorder: true })
|
|
180
177
|
expect(wrapper.classes('pink')).toBe(false)
|
|
181
178
|
expect(border.classes('pink')).toBe(true)
|
|
182
179
|
expect(border.classes('v-alert__border--has-color')).toBe(true)
|
|
@@ -191,4 +188,35 @@ describe('VAlert.ts', () => {
|
|
|
191
188
|
|
|
192
189
|
expect(wrapper.vm.isActive).toBe(false)
|
|
193
190
|
})
|
|
191
|
+
|
|
192
|
+
it('should render font icons with proper classes', () => {
|
|
193
|
+
const wrapper = mountFunction({
|
|
194
|
+
props: {
|
|
195
|
+
type: 'error',
|
|
196
|
+
icon: 'mdi-alert',
|
|
197
|
+
},
|
|
198
|
+
})
|
|
199
|
+
|
|
200
|
+
const icon = wrapper.find('.v-alert__icon')
|
|
201
|
+
|
|
202
|
+
expect(icon.exists()).toBe(true)
|
|
203
|
+
// С component: null иконки рендерятся как font-иконки с CSS классами
|
|
204
|
+
// В JSDOM текстовое содержимое не отображается, но классы присутствуют
|
|
205
|
+
expect(icon.classes()).toContain('v-icon')
|
|
206
|
+
expect(icon.classes()).toContain('v-alert__icon')
|
|
207
|
+
expect(icon.classes()).toContain('mdi')
|
|
208
|
+
expect(icon.classes()).toContain('mdi-alert')
|
|
209
|
+
})
|
|
210
|
+
|
|
211
|
+
it('should translate aria-label correctly', () => {
|
|
212
|
+
const wrapper = mountFunction({
|
|
213
|
+
props: { dismissible: true },
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
const button = wrapper.find('.v-alert__dismissible')
|
|
217
|
+
|
|
218
|
+
expect(button.exists()).toBe(true)
|
|
219
|
+
// Проверяем что перевод $vuetify.close работает правильно
|
|
220
|
+
expect(button.element.getAttribute('aria-label')).toBe('Close')
|
|
221
|
+
})
|
|
194
222
|
})
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
2
|
|
|
3
3
|
exports[`VAlert.ts should be dismissible 1`] = `
|
|
4
|
-
<div
|
|
5
|
-
|
|
4
|
+
<div class="v-alert v-sheet theme--light"
|
|
5
|
+
role="alert"
|
|
6
6
|
style="display: none;"
|
|
7
7
|
>
|
|
8
8
|
<div class="v-alert__wrapper">
|
|
9
9
|
<div class="v-alert__content">
|
|
10
10
|
</div>
|
|
11
|
-
<button
|
|
12
|
-
|
|
13
|
-
aria-label="
|
|
11
|
+
<button class="v-btn v-btn--icon v-btn--round theme--light v-size--small v-alert__dismissible"
|
|
12
|
+
type="button"
|
|
13
|
+
aria-label="Close"
|
|
14
14
|
>
|
|
15
15
|
<span class="v-btn__content">
|
|
16
16
|
<i aria-hidden="true"
|
|
17
|
-
class="v-icon notranslate
|
|
17
|
+
class="v-icon notranslate mdi mdi-close-circle theme--light"
|
|
18
18
|
>
|
|
19
|
-
$cancel
|
|
20
19
|
</i>
|
|
21
20
|
</span>
|
|
22
21
|
</button>
|
|
@@ -25,8 +24,8 @@ exports[`VAlert.ts should be dismissible 1`] = `
|
|
|
25
24
|
`;
|
|
26
25
|
|
|
27
26
|
exports[`VAlert.ts should be open by default 1`] = `
|
|
28
|
-
<div
|
|
29
|
-
|
|
27
|
+
<div class="v-alert v-sheet theme--light"
|
|
28
|
+
role="alert"
|
|
30
29
|
>
|
|
31
30
|
<div class="v-alert__wrapper">
|
|
32
31
|
<div class="v-alert__content">
|
|
@@ -36,8 +35,8 @@ exports[`VAlert.ts should be open by default 1`] = `
|
|
|
36
35
|
`;
|
|
37
36
|
|
|
38
37
|
exports[`VAlert.ts should be open by default 2`] = `
|
|
39
|
-
<div
|
|
40
|
-
|
|
38
|
+
<div class="v-alert v-sheet theme--light"
|
|
39
|
+
role="alert"
|
|
41
40
|
style="display: none;"
|
|
42
41
|
>
|
|
43
42
|
<div class="v-alert__wrapper">
|
|
@@ -48,21 +47,20 @@ exports[`VAlert.ts should be open by default 2`] = `
|
|
|
48
47
|
`;
|
|
49
48
|
|
|
50
49
|
exports[`VAlert.ts should have a close icon 1`] = `
|
|
51
|
-
<div
|
|
52
|
-
|
|
50
|
+
<div class="v-alert v-sheet theme--light"
|
|
51
|
+
role="alert"
|
|
53
52
|
>
|
|
54
53
|
<div class="v-alert__wrapper">
|
|
55
54
|
<div class="v-alert__content">
|
|
56
55
|
</div>
|
|
57
|
-
<button
|
|
58
|
-
|
|
59
|
-
aria-label="
|
|
56
|
+
<button class="v-btn v-btn--icon v-btn--round theme--light v-size--small v-alert__dismissible"
|
|
57
|
+
type="button"
|
|
58
|
+
aria-label="Close"
|
|
60
59
|
>
|
|
61
60
|
<span class="v-btn__content">
|
|
62
61
|
<i aria-hidden="true"
|
|
63
|
-
class="v-icon notranslate
|
|
62
|
+
class="v-icon notranslate mdi mdi-close-circle theme--light"
|
|
64
63
|
>
|
|
65
|
-
$cancel
|
|
66
64
|
</i>
|
|
67
65
|
</span>
|
|
68
66
|
</button>
|
|
@@ -29,6 +29,28 @@ export default defineComponent({
|
|
|
29
29
|
name: 'v-autocomplete',
|
|
30
30
|
extends: VSelect,
|
|
31
31
|
|
|
32
|
+
emits: [
|
|
33
|
+
'update:search-input',
|
|
34
|
+
'update:modelValue',
|
|
35
|
+
'change',
|
|
36
|
+
'focus',
|
|
37
|
+
'blur',
|
|
38
|
+
'keydown',
|
|
39
|
+
'click',
|
|
40
|
+
'update:list-index',
|
|
41
|
+
'mousedown',
|
|
42
|
+
'mouseup',
|
|
43
|
+
'touchstart',
|
|
44
|
+
'touchend',
|
|
45
|
+
'click:prepend',
|
|
46
|
+
'click:append',
|
|
47
|
+
'click:append-outer',
|
|
48
|
+
'click:prepend-inner',
|
|
49
|
+
'click:clear',
|
|
50
|
+
'input',
|
|
51
|
+
'update:error',
|
|
52
|
+
],
|
|
53
|
+
|
|
32
54
|
props: {
|
|
33
55
|
autoSelectFirst: {
|
|
34
56
|
type: Boolean,
|
|
@@ -4,13 +4,16 @@ import VAutocomplete from '../VAutocomplete'
|
|
|
4
4
|
// Utilities
|
|
5
5
|
import {
|
|
6
6
|
mount,
|
|
7
|
-
|
|
7
|
+
VueWrapper,
|
|
8
|
+
enableAutoUnmount,
|
|
8
9
|
} from '@vue/test-utils'
|
|
9
10
|
import { keyCodes } from '../../../util/helpers'
|
|
10
11
|
|
|
11
12
|
describe('VAutocomplete.ts', () => {
|
|
12
13
|
type Instance = InstanceType<typeof VAutocomplete>
|
|
13
|
-
let mountFunction: (options?: object) =>
|
|
14
|
+
let mountFunction: (options?: object) => VueWrapper<Instance>
|
|
15
|
+
|
|
16
|
+
enableAutoUnmount(afterEach)
|
|
14
17
|
|
|
15
18
|
beforeEach(() => {
|
|
16
19
|
document.body.setAttribute('data-app', 'true')
|
|
@@ -18,15 +21,18 @@ describe('VAutocomplete.ts', () => {
|
|
|
18
21
|
mountFunction = (options = {}) => {
|
|
19
22
|
return mount(VAutocomplete, {
|
|
20
23
|
...options,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
global: {
|
|
25
|
+
mocks: {
|
|
26
|
+
$vuetify: {
|
|
27
|
+
lang: {
|
|
28
|
+
t: (val: string) => val,
|
|
29
|
+
},
|
|
30
|
+
theme: {
|
|
31
|
+
dark: false,
|
|
32
|
+
},
|
|
33
|
+
icons: {
|
|
34
|
+
component: null,
|
|
35
|
+
},
|
|
30
36
|
},
|
|
31
37
|
},
|
|
32
38
|
},
|
|
@@ -46,28 +52,23 @@ describe('VAutocomplete.ts', () => {
|
|
|
46
52
|
})
|
|
47
53
|
|
|
48
54
|
it('should emit search input changes', async () => {
|
|
49
|
-
const wrapper = mountFunction(
|
|
50
|
-
propsData: {
|
|
51
|
-
},
|
|
52
|
-
})
|
|
55
|
+
const wrapper = mountFunction()
|
|
53
56
|
|
|
54
57
|
const input = wrapper.find('input')
|
|
55
58
|
const element = input.element as HTMLInputElement
|
|
56
59
|
|
|
57
|
-
const update = jest.fn()
|
|
58
|
-
wrapper.vm.$on('update:search-input', update)
|
|
59
|
-
|
|
60
60
|
element.value = 'test'
|
|
61
61
|
input.trigger('input')
|
|
62
62
|
|
|
63
63
|
await wrapper.vm.$nextTick()
|
|
64
64
|
|
|
65
|
-
expect(
|
|
65
|
+
expect(wrapper.emitted('update:search-input')).toBeTruthy()
|
|
66
|
+
expect(wrapper.emitted('update:search-input')?.[0]).toEqual(['test'])
|
|
66
67
|
})
|
|
67
68
|
|
|
68
69
|
it('should filter autocomplete search results', async () => {
|
|
69
70
|
const wrapper = mountFunction({
|
|
70
|
-
|
|
71
|
+
props: { items: ['foo', 'bar'] },
|
|
71
72
|
})
|
|
72
73
|
|
|
73
74
|
wrapper.setData({ internalSearch: 'foo' })
|
|
@@ -78,7 +79,7 @@ describe('VAutocomplete.ts', () => {
|
|
|
78
79
|
|
|
79
80
|
it('should filter numeric primitives', () => {
|
|
80
81
|
const wrapper = mountFunction({
|
|
81
|
-
|
|
82
|
+
props: {
|
|
82
83
|
items: [1, 2],
|
|
83
84
|
},
|
|
84
85
|
})
|
|
@@ -91,7 +92,7 @@ describe('VAutocomplete.ts', () => {
|
|
|
91
92
|
|
|
92
93
|
it('should activate when search changes and not active', async () => {
|
|
93
94
|
const wrapper = mountFunction({
|
|
94
|
-
|
|
95
|
+
props: {
|
|
95
96
|
items: [1, 2, 3, 4],
|
|
96
97
|
multiple: true,
|
|
97
98
|
},
|
|
@@ -109,7 +110,7 @@ describe('VAutocomplete.ts', () => {
|
|
|
109
110
|
// https://github.com/vuejs/vue-test-utils/issues/1130
|
|
110
111
|
it.skip('should set searchValue to null when deactivated', async () => {
|
|
111
112
|
const wrapper = mountFunction({
|
|
112
|
-
|
|
113
|
+
props: {
|
|
113
114
|
items: [1, 2, 3, 4],
|
|
114
115
|
multiple: true,
|
|
115
116
|
},
|
|
@@ -128,7 +129,7 @@ describe('VAutocomplete.ts', () => {
|
|
|
128
129
|
|
|
129
130
|
wrapper.setProps({
|
|
130
131
|
multiple: false,
|
|
131
|
-
|
|
132
|
+
modelValue: 1,
|
|
132
133
|
})
|
|
133
134
|
|
|
134
135
|
await wrapper.vm.$nextTick()
|
|
@@ -154,7 +155,7 @@ describe('VAutocomplete.ts', () => {
|
|
|
154
155
|
|
|
155
156
|
it('should not duplicate items after items update when caching is turned on', async () => {
|
|
156
157
|
const wrapper = mountFunction({
|
|
157
|
-
|
|
158
|
+
props: {
|
|
158
159
|
cacheItems: true,
|
|
159
160
|
returnObject: true,
|
|
160
161
|
itemText: 'text',
|
|
@@ -171,7 +172,7 @@ describe('VAutocomplete.ts', () => {
|
|
|
171
172
|
|
|
172
173
|
it('should cache items passed via prop', async () => {
|
|
173
174
|
const wrapper = mountFunction({
|
|
174
|
-
|
|
175
|
+
props: {
|
|
175
176
|
cacheItems: true,
|
|
176
177
|
items: [1, 2, 3, 4],
|
|
177
178
|
},
|
|
@@ -186,7 +187,7 @@ describe('VAutocomplete.ts', () => {
|
|
|
186
187
|
|
|
187
188
|
it('should not filter text with no items', async () => {
|
|
188
189
|
const wrapper = mountFunction({
|
|
189
|
-
|
|
190
|
+
props: {
|
|
190
191
|
eager: true,
|
|
191
192
|
items: ['foo', 'bar'],
|
|
192
193
|
},
|
|
@@ -206,9 +207,9 @@ describe('VAutocomplete.ts', () => {
|
|
|
206
207
|
|
|
207
208
|
it('should not display menu when tab focused', async () => {
|
|
208
209
|
const wrapper = mountFunction({
|
|
209
|
-
|
|
210
|
+
props: {
|
|
210
211
|
items: [1, 2],
|
|
211
|
-
|
|
212
|
+
modelValue: 1,
|
|
212
213
|
},
|
|
213
214
|
})
|
|
214
215
|
|
|
@@ -225,11 +226,11 @@ describe('VAutocomplete.ts', () => {
|
|
|
225
226
|
// eslint-disable-next-line max-statements
|
|
226
227
|
it.skip('should change selected index', async () => {
|
|
227
228
|
const wrapper = mountFunction({
|
|
228
|
-
|
|
229
|
-
|
|
229
|
+
attachTo: document.body,
|
|
230
|
+
props: {
|
|
230
231
|
items: ['foo', 'bar', 'fizz'],
|
|
231
232
|
multiple: true,
|
|
232
|
-
|
|
233
|
+
modelValue: ['foo', 'bar', 'fizz'],
|
|
233
234
|
},
|
|
234
235
|
})
|
|
235
236
|
|
|
@@ -304,7 +305,7 @@ describe('VAutocomplete.ts', () => {
|
|
|
304
305
|
|
|
305
306
|
expect(wrapper.vm.selectedIndex).toBe(-1)
|
|
306
307
|
|
|
307
|
-
wrapper.setProps({
|
|
308
|
+
wrapper.setProps({ modelValue: ['foo', 'bar', 'fizz'] })
|
|
308
309
|
|
|
309
310
|
await wrapper.vm.$nextTick()
|
|
310
311
|
|
|
@@ -313,7 +314,7 @@ describe('VAutocomplete.ts', () => {
|
|
|
313
314
|
wrapper.vm.selectedIndex = 2
|
|
314
315
|
|
|
315
316
|
// Simulating removing items when an index already selected
|
|
316
|
-
wrapper.setProps({
|
|
317
|
+
wrapper.setProps({ modelValue: ['foo', 'bar'] })
|
|
317
318
|
|
|
318
319
|
await wrapper.vm.$nextTick()
|
|
319
320
|
|
|
@@ -326,8 +327,8 @@ describe('VAutocomplete.ts', () => {
|
|
|
326
327
|
|
|
327
328
|
it('should conditionally show the menu', async () => {
|
|
328
329
|
const wrapper = mountFunction({
|
|
329
|
-
|
|
330
|
-
|
|
330
|
+
attachTo: document.body,
|
|
331
|
+
props: {
|
|
331
332
|
items: ['foo', 'bar', 'fizz'],
|
|
332
333
|
},
|
|
333
334
|
})
|
|
@@ -367,10 +368,10 @@ describe('VAutocomplete.ts', () => {
|
|
|
367
368
|
// https://github.com/vuejs/vue-test-utils/issues/1130
|
|
368
369
|
it.skip('should have the correct selected item', async () => {
|
|
369
370
|
const wrapper = mountFunction({
|
|
370
|
-
|
|
371
|
+
props: {
|
|
371
372
|
items: ['foo', 'bar', 'fizz'],
|
|
372
373
|
multiple: true,
|
|
373
|
-
|
|
374
|
+
modelValue: ['foo'],
|
|
374
375
|
},
|
|
375
376
|
})
|
|
376
377
|
|
|
@@ -378,7 +379,7 @@ describe('VAutocomplete.ts', () => {
|
|
|
378
379
|
|
|
379
380
|
wrapper.setProps({
|
|
380
381
|
multiple: false,
|
|
381
|
-
|
|
382
|
+
modelValue: 'foo',
|
|
382
383
|
})
|
|
383
384
|
|
|
384
385
|
expect(wrapper.vm.selectedItem).toBe('foo')
|
|
@@ -386,7 +387,7 @@ describe('VAutocomplete.ts', () => {
|
|
|
386
387
|
|
|
387
388
|
it('should reset lazySearch', async () => {
|
|
388
389
|
const wrapper = mountFunction({
|
|
389
|
-
|
|
390
|
+
props: {
|
|
390
391
|
chips: true,
|
|
391
392
|
items: ['foo', 'bar', 'fizz'],
|
|
392
393
|
searchInput: 'foo',
|
|
@@ -406,7 +407,7 @@ describe('VAutocomplete.ts', () => {
|
|
|
406
407
|
|
|
407
408
|
it('should select input text on focus', async () => {
|
|
408
409
|
const wrapper = mountFunction({
|
|
409
|
-
|
|
410
|
+
attachTo: document.body,
|
|
410
411
|
})
|
|
411
412
|
const select = jest.fn()
|
|
412
413
|
wrapper.vm.$refs.input.select = select
|
|
@@ -430,9 +431,9 @@ describe('VAutocomplete.ts', () => {
|
|
|
430
431
|
it('should not respond to click', () => {
|
|
431
432
|
const onFocus = jest.fn()
|
|
432
433
|
const wrapper = mountFunction({
|
|
433
|
-
|
|
434
|
-
methods: { onFocus },
|
|
434
|
+
props: { disabled: true },
|
|
435
435
|
})
|
|
436
|
+
wrapper.vm.onFocus = onFocus
|
|
436
437
|
const slot = wrapper.find('.v-input__slot')
|
|
437
438
|
|
|
438
439
|
slot.trigger('click')
|
|
@@ -457,14 +458,11 @@ describe('VAutocomplete.ts', () => {
|
|
|
457
458
|
const changeSelectedIndex = jest.fn()
|
|
458
459
|
const onEscDown = jest.fn()
|
|
459
460
|
const onTabDown = jest.fn()
|
|
460
|
-
const wrapper = mountFunction(
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
onTabDown,
|
|
466
|
-
},
|
|
467
|
-
})
|
|
461
|
+
const wrapper = mountFunction()
|
|
462
|
+
wrapper.vm.activateMenu = activateMenu
|
|
463
|
+
wrapper.vm.changeSelectedIndex = changeSelectedIndex
|
|
464
|
+
wrapper.vm.onEscDown = onEscDown
|
|
465
|
+
wrapper.vm.onTabDown = onTabDown
|
|
468
466
|
|
|
469
467
|
const input = wrapper.find('input')
|
|
470
468
|
const element = input.element as HTMLInputElement
|
|
@@ -509,10 +507,10 @@ describe('VAutocomplete.ts', () => {
|
|
|
509
507
|
|
|
510
508
|
it('should not delete item if readonly', async () => {
|
|
511
509
|
const wrapper = mountFunction({
|
|
512
|
-
|
|
510
|
+
props: {
|
|
513
511
|
items: ['a', 'b', 'c'],
|
|
514
512
|
multiple: true,
|
|
515
|
-
|
|
513
|
+
modelValue: ['a', 'b', 'c'],
|
|
516
514
|
},
|
|
517
515
|
})
|
|
518
516
|
wrapper.vm.changeSelectedIndex(keyCodes.right)
|