vuetify 2.6.16 → 2.7.1
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/json/attributes.json +33 -1
- package/dist/json/tags.json +8 -0
- package/dist/json/web-types.json +144 -25
- package/dist/vuetify.css +52 -9
- package/dist/vuetify.css.map +1 -1
- package/dist/vuetify.js +688 -259
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +2 -2
- package/es5/components/VCalendar/mixins/calendar-base.js +1 -1
- package/es5/components/VCalendar/mixins/calendar-base.js.map +1 -1
- package/es5/components/VDataTable/VDataTable.js +96 -61
- package/es5/components/VDataTable/VDataTable.js.map +1 -1
- package/es5/components/VExpansionPanel/VExpansionPanelContent.js +3 -1
- package/es5/components/VExpansionPanel/VExpansionPanelContent.js.map +1 -1
- package/es5/components/VExpansionPanel/VExpansionPanelHeader.js +3 -1
- package/es5/components/VExpansionPanel/VExpansionPanelHeader.js.map +1 -1
- package/es5/components/VInput/VInput.js +12 -1
- package/es5/components/VInput/VInput.js.map +1 -1
- package/es5/components/VItemGroup/VItem.js +18 -2
- package/es5/components/VItemGroup/VItem.js.map +1 -1
- package/es5/components/VMenu/VMenu.js +11 -3
- package/es5/components/VMenu/VMenu.js.map +1 -1
- package/es5/components/VPagination/VPagination.js +8 -2
- package/es5/components/VPagination/VPagination.js.map +1 -1
- package/es5/components/VRadioGroup/VRadio.js +14 -4
- package/es5/components/VRadioGroup/VRadio.js.map +1 -1
- package/es5/components/VSelect/VSelect.js +3 -1
- package/es5/components/VSelect/VSelect.js.map +1 -1
- package/es5/components/VSkeletonLoader/VSkeletonLoader.js +10 -5
- package/es5/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
- package/es5/components/VSlideGroup/VSlideGroup.js +5 -1
- package/es5/components/VSlideGroup/VSlideGroup.js.map +1 -1
- package/es5/components/VTabs/VTab.js +4 -0
- package/es5/components/VTabs/VTab.js.map +1 -1
- package/es5/components/VTimePicker/VTimePicker.js +17 -0
- package/es5/components/VTimePicker/VTimePicker.js.map +1 -1
- package/es5/framework.js +1 -1
- package/es5/locale/af.js +7 -1
- package/es5/locale/af.js.map +1 -1
- package/es5/locale/ar.js +7 -1
- package/es5/locale/ar.js.map +1 -1
- package/es5/locale/az.js +7 -1
- package/es5/locale/az.js.map +1 -1
- package/es5/locale/bg.js +7 -1
- package/es5/locale/bg.js.map +1 -1
- package/es5/locale/ca.js +7 -1
- package/es5/locale/ca.js.map +1 -1
- package/es5/locale/ckb.js +7 -1
- package/es5/locale/ckb.js.map +1 -1
- package/es5/locale/cs.js +7 -1
- package/es5/locale/cs.js.map +1 -1
- package/es5/locale/da.js +7 -1
- package/es5/locale/da.js.map +1 -1
- package/es5/locale/de.js +7 -1
- package/es5/locale/de.js.map +1 -1
- package/es5/locale/el.js +7 -1
- package/es5/locale/el.js.map +1 -1
- package/es5/locale/en.js +7 -1
- package/es5/locale/en.js.map +1 -1
- package/es5/locale/es.js +7 -1
- package/es5/locale/es.js.map +1 -1
- package/es5/locale/et.js +7 -1
- package/es5/locale/et.js.map +1 -1
- package/es5/locale/fa.js +7 -1
- package/es5/locale/fa.js.map +1 -1
- package/es5/locale/fi.js +7 -1
- package/es5/locale/fi.js.map +1 -1
- package/es5/locale/fr.js +7 -1
- package/es5/locale/fr.js.map +1 -1
- package/es5/locale/he.js +7 -1
- package/es5/locale/he.js.map +1 -1
- package/es5/locale/hr.js +7 -1
- package/es5/locale/hr.js.map +1 -1
- package/es5/locale/hu.js +7 -1
- package/es5/locale/hu.js.map +1 -1
- package/es5/locale/id.js +7 -1
- package/es5/locale/id.js.map +1 -1
- package/es5/locale/it.js +7 -1
- package/es5/locale/it.js.map +1 -1
- package/es5/locale/ja.js +7 -1
- package/es5/locale/ja.js.map +1 -1
- package/es5/locale/ko.js +7 -1
- package/es5/locale/ko.js.map +1 -1
- package/es5/locale/lt.js +7 -1
- package/es5/locale/lt.js.map +1 -1
- package/es5/locale/lv.js +7 -1
- package/es5/locale/lv.js.map +1 -1
- package/es5/locale/nl.js +7 -1
- package/es5/locale/nl.js.map +1 -1
- package/es5/locale/no.js +7 -1
- package/es5/locale/no.js.map +1 -1
- package/es5/locale/pl.js +7 -1
- package/es5/locale/pl.js.map +1 -1
- package/es5/locale/pt.js +7 -1
- package/es5/locale/pt.js.map +1 -1
- package/es5/locale/ro.js +7 -1
- package/es5/locale/ro.js.map +1 -1
- package/es5/locale/ru.js +7 -1
- package/es5/locale/ru.js.map +1 -1
- package/es5/locale/sk.js +7 -1
- package/es5/locale/sk.js.map +1 -1
- package/es5/locale/sl.js +7 -1
- package/es5/locale/sl.js.map +1 -1
- package/es5/locale/sr-Cyrl.js +7 -1
- package/es5/locale/sr-Cyrl.js.map +1 -1
- package/es5/locale/sr-Latn.js +7 -1
- package/es5/locale/sr-Latn.js.map +1 -1
- package/es5/locale/sv.js +7 -1
- package/es5/locale/sv.js.map +1 -1
- package/es5/locale/th.js +7 -1
- package/es5/locale/th.js.map +1 -1
- package/es5/locale/tr.js +7 -1
- package/es5/locale/tr.js.map +1 -1
- package/es5/locale/uk.js +7 -1
- package/es5/locale/uk.js.map +1 -1
- package/es5/locale/vi.js +7 -1
- package/es5/locale/vi.js.map +1 -1
- package/es5/locale/zh-Hans.js +7 -1
- package/es5/locale/zh-Hans.js.map +1 -1
- package/es5/locale/zh-Hant.js +7 -1
- package/es5/locale/zh-Hant.js.map +1 -1
- package/es5/mixins/groupable/index.js +9 -1
- package/es5/mixins/groupable/index.js.map +1 -1
- package/es5/{components/VCalendar/mixins/mouse.js → mixins/mouse/index.js} +14 -6
- package/es5/mixins/mouse/index.js.map +1 -0
- package/es5/mixins/validatable/index.js +14 -4
- package/es5/mixins/validatable/index.js.map +1 -1
- package/lib/components/VCalendar/mixins/calendar-base.js +1 -1
- package/lib/components/VCalendar/mixins/calendar-base.js.map +1 -1
- package/lib/components/VDataTable/VDataTable.js +56 -24
- package/lib/components/VDataTable/VDataTable.js.map +1 -1
- package/lib/components/VExpansionPanel/VExpansionPanelContent.js +3 -1
- package/lib/components/VExpansionPanel/VExpansionPanelContent.js.map +1 -1
- package/lib/components/VExpansionPanel/VExpansionPanelHeader.js +3 -1
- package/lib/components/VExpansionPanel/VExpansionPanelHeader.js.map +1 -1
- package/lib/components/VInput/VInput.js +11 -1
- package/lib/components/VInput/VInput.js.map +1 -1
- package/lib/components/VItemGroup/VItem.js +14 -3
- package/lib/components/VItemGroup/VItem.js.map +1 -1
- package/lib/components/VMenu/VMenu.js +7 -0
- package/lib/components/VMenu/VMenu.js.map +1 -1
- package/lib/components/VPagination/VPagination.js +8 -2
- package/lib/components/VPagination/VPagination.js.map +1 -1
- package/lib/components/VRadioGroup/VRadio.js +14 -4
- package/lib/components/VRadioGroup/VRadio.js.map +1 -1
- package/lib/components/VSelect/VSelect.js +4 -1
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSkeletonLoader/VSkeletonLoader.js +10 -5
- package/lib/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
- package/lib/components/VSlideGroup/VSlideGroup.js +5 -1
- package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
- package/lib/components/VTabs/VTab.js +4 -0
- package/lib/components/VTabs/VTab.js.map +1 -1
- package/lib/components/VTimePicker/VTimePicker.js +19 -0
- package/lib/components/VTimePicker/VTimePicker.js.map +1 -1
- package/lib/framework.js +1 -1
- package/lib/locale/af.js +7 -1
- package/lib/locale/af.js.map +1 -1
- package/lib/locale/ar.js +7 -1
- package/lib/locale/ar.js.map +1 -1
- package/lib/locale/az.js +7 -1
- package/lib/locale/az.js.map +1 -1
- package/lib/locale/bg.js +7 -1
- package/lib/locale/bg.js.map +1 -1
- package/lib/locale/ca.js +7 -1
- package/lib/locale/ca.js.map +1 -1
- package/lib/locale/ckb.js +7 -1
- package/lib/locale/ckb.js.map +1 -1
- package/lib/locale/cs.js +7 -1
- package/lib/locale/cs.js.map +1 -1
- package/lib/locale/da.js +7 -1
- package/lib/locale/da.js.map +1 -1
- package/lib/locale/de.js +7 -1
- package/lib/locale/de.js.map +1 -1
- package/lib/locale/el.js +7 -1
- package/lib/locale/el.js.map +1 -1
- package/lib/locale/en.js +7 -1
- package/lib/locale/en.js.map +1 -1
- package/lib/locale/es.js +7 -1
- package/lib/locale/es.js.map +1 -1
- package/lib/locale/et.js +7 -1
- package/lib/locale/et.js.map +1 -1
- package/lib/locale/fa.js +7 -1
- package/lib/locale/fa.js.map +1 -1
- package/lib/locale/fi.js +7 -1
- package/lib/locale/fi.js.map +1 -1
- package/lib/locale/fr.js +7 -1
- package/lib/locale/fr.js.map +1 -1
- package/lib/locale/he.js +7 -1
- package/lib/locale/he.js.map +1 -1
- package/lib/locale/hr.js +7 -1
- package/lib/locale/hr.js.map +1 -1
- package/lib/locale/hu.js +7 -1
- package/lib/locale/hu.js.map +1 -1
- package/lib/locale/id.js +7 -1
- package/lib/locale/id.js.map +1 -1
- package/lib/locale/it.js +7 -1
- package/lib/locale/it.js.map +1 -1
- package/lib/locale/ja.js +7 -1
- package/lib/locale/ja.js.map +1 -1
- package/lib/locale/ko.js +7 -1
- package/lib/locale/ko.js.map +1 -1
- package/lib/locale/lt.js +7 -1
- package/lib/locale/lt.js.map +1 -1
- package/lib/locale/lv.js +7 -1
- package/lib/locale/lv.js.map +1 -1
- package/lib/locale/nl.js +7 -1
- package/lib/locale/nl.js.map +1 -1
- package/lib/locale/no.js +7 -1
- package/lib/locale/no.js.map +1 -1
- package/lib/locale/pl.js +7 -1
- package/lib/locale/pl.js.map +1 -1
- package/lib/locale/pt.js +7 -1
- package/lib/locale/pt.js.map +1 -1
- package/lib/locale/ro.js +7 -1
- package/lib/locale/ro.js.map +1 -1
- package/lib/locale/ru.js +7 -1
- package/lib/locale/ru.js.map +1 -1
- package/lib/locale/sk.js +7 -1
- package/lib/locale/sk.js.map +1 -1
- package/lib/locale/sl.js +7 -1
- package/lib/locale/sl.js.map +1 -1
- package/lib/locale/sr-Cyrl.js +7 -1
- package/lib/locale/sr-Cyrl.js.map +1 -1
- package/lib/locale/sr-Latn.js +7 -1
- package/lib/locale/sr-Latn.js.map +1 -1
- package/lib/locale/sv.js +7 -1
- package/lib/locale/sv.js.map +1 -1
- package/lib/locale/th.js +7 -1
- package/lib/locale/th.js.map +1 -1
- package/lib/locale/tr.js +7 -1
- package/lib/locale/tr.js.map +1 -1
- package/lib/locale/uk.js +7 -1
- package/lib/locale/uk.js.map +1 -1
- package/lib/locale/vi.js +7 -1
- package/lib/locale/vi.js.map +1 -1
- package/lib/locale/zh-Hans.js +7 -1
- package/lib/locale/zh-Hans.js.map +1 -1
- package/lib/locale/zh-Hant.js +7 -1
- package/lib/locale/zh-Hant.js.map +1 -1
- package/lib/mixins/groupable/index.js +9 -1
- package/lib/mixins/groupable/index.js.map +1 -1
- package/lib/{components/VCalendar/mixins/mouse.js → mixins/mouse/index.js} +12 -6
- package/lib/mixins/mouse/index.js.map +1 -0
- package/lib/mixins/validatable/index.js +14 -4
- package/lib/mixins/validatable/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/VCalendar/mixins/calendar-base.ts +1 -1
- package/src/components/VDataTable/VDataTable.ts +69 -21
- package/src/components/VDataTable/__tests__/VDataTable.spec.ts +28 -0
- package/src/components/VDataTable/__tests__/__snapshots__/VDataTable.spec.ts.snap +15 -15
- package/src/components/VExpansionPanel/VExpansionPanelContent.ts +1 -1
- package/src/components/VExpansionPanel/VExpansionPanelHeader.ts +1 -1
- package/src/components/VFileInput/__tests__/__snapshots__/VFileInput.spec.ts.snap +18 -18
- package/src/components/VForm/__tests__/VForm.spec.ts +22 -1
- package/src/components/VInput/VInput.ts +12 -1
- package/src/components/VInput/__tests__/VInput.spec.ts +7 -0
- package/src/components/VItemGroup/VItem.sass +4 -0
- package/src/components/VItemGroup/VItem.ts +12 -1
- package/src/components/VMenu/VMenu.ts +8 -1
- package/src/components/VMenu/__tests__/VMenu.spec.ts +130 -0
- package/src/components/VPagination/VPagination.ts +17 -12
- package/src/components/VRadioGroup/VRadio.ts +10 -4
- package/src/components/VSelect/VSelect.ts +4 -1
- package/src/components/VSelect/__tests__/__snapshots__/VSelect2.spec.ts.snap +2 -2
- package/src/components/VSkeletonLoader/VSkeletonLoader.ts +10 -5
- package/src/components/VSkeletonLoader/__tests__/VSkeletonLoader.spec.ts +7 -0
- package/src/components/VSkeletonLoader/__tests__/__snapshots__/VSkeletonLoader.spec.ts.snap +31 -0
- package/src/components/VSlideGroup/VSlideGroup.ts +4 -0
- package/src/components/VTabs/VTab.ts +5 -0
- package/src/components/VTabs/VTabs.sass +1 -1
- package/src/components/VTabs/__tests__/VTabs.spec.ts +22 -0
- package/src/components/VTabs/_variables.scss +1 -0
- package/src/components/VTextField/__tests__/VTextField.spec.ts +15 -8
- package/src/components/VTimePicker/VTimePicker.ts +18 -0
- package/src/components/VTimePicker/__tests__/VTimePicker.spec.ts +65 -0
- package/src/locale/af.ts +6 -0
- package/src/locale/ar.ts +6 -0
- package/src/locale/az.ts +6 -0
- package/src/locale/bg.ts +6 -0
- package/src/locale/ca.ts +6 -0
- package/src/locale/ckb.ts +6 -0
- package/src/locale/cs.ts +6 -0
- package/src/locale/da.ts +6 -0
- package/src/locale/de.ts +6 -0
- package/src/locale/el.ts +6 -0
- package/src/locale/en.ts +6 -0
- package/src/locale/es.ts +6 -0
- package/src/locale/et.ts +6 -0
- package/src/locale/fa.ts +6 -0
- package/src/locale/fi.ts +6 -0
- package/src/locale/fr.ts +6 -0
- package/src/locale/he.ts +6 -0
- package/src/locale/hr.ts +6 -0
- package/src/locale/hu.ts +6 -0
- package/src/locale/id.ts +6 -0
- package/src/locale/it.ts +6 -0
- package/src/locale/ja.ts +6 -0
- package/src/locale/ko.ts +6 -0
- package/src/locale/lt.ts +6 -0
- package/src/locale/lv.ts +6 -0
- package/src/locale/nl.ts +6 -0
- package/src/locale/no.ts +6 -0
- package/src/locale/pl.ts +6 -0
- package/src/locale/pt.ts +6 -0
- package/src/locale/ro.ts +6 -0
- package/src/locale/ru.ts +6 -0
- package/src/locale/sk.ts +6 -0
- package/src/locale/sl.ts +6 -0
- package/src/locale/sr-Cyrl.ts +6 -0
- package/src/locale/sr-Latn.ts +6 -0
- package/src/locale/sv.ts +6 -0
- package/src/locale/th.ts +6 -0
- package/src/locale/tr.ts +6 -0
- package/src/locale/uk.ts +6 -0
- package/src/locale/vi.ts +6 -0
- package/src/locale/zh-Hans.ts +6 -0
- package/src/locale/zh-Hant.ts +6 -0
- package/src/mixins/groupable/index.ts +9 -2
- package/src/{components/VCalendar/mixins → mixins/mouse}/__tests__/mouse.spec.ts +2 -2
- package/src/{components/VCalendar/mixins/mouse.ts → mixins/mouse/index.ts} +10 -4
- package/src/mixins/validatable/index.ts +10 -4
- package/src/services/presets/__tests__/__snapshots__/presets.spec.ts.snap +2 -2
- package/src/styles/settings/_variables.scss +3 -2
- package/types/index.d.ts +6 -0
- package/es5/components/VCalendar/mixins/mouse.js.map +0 -1
- package/lib/components/VCalendar/mixins/mouse.js.map +0 -1
|
@@ -12,7 +12,10 @@ const baseMixins = mixins(Colorable, RegistrableInject('form'), Themeable);
|
|
|
12
12
|
export default baseMixins.extend({
|
|
13
13
|
name: 'validatable',
|
|
14
14
|
props: {
|
|
15
|
-
disabled:
|
|
15
|
+
disabled: {
|
|
16
|
+
type: Boolean,
|
|
17
|
+
default: null
|
|
18
|
+
},
|
|
16
19
|
error: Boolean,
|
|
17
20
|
errorCount: {
|
|
18
21
|
type: [Number, String],
|
|
@@ -26,7 +29,10 @@ export default baseMixins.extend({
|
|
|
26
29
|
type: [String, Array],
|
|
27
30
|
default: () => []
|
|
28
31
|
},
|
|
29
|
-
readonly:
|
|
32
|
+
readonly: {
|
|
33
|
+
type: Boolean,
|
|
34
|
+
default: null
|
|
35
|
+
},
|
|
30
36
|
rules: {
|
|
31
37
|
type: Array,
|
|
32
38
|
default: () => []
|
|
@@ -115,7 +121,9 @@ export default baseMixins.extend({
|
|
|
115
121
|
},
|
|
116
122
|
|
|
117
123
|
isDisabled() {
|
|
118
|
-
|
|
124
|
+
var _a;
|
|
125
|
+
|
|
126
|
+
return (_a = this.disabled) !== null && _a !== void 0 ? _a : !!this.form && this.form.disabled;
|
|
119
127
|
},
|
|
120
128
|
|
|
121
129
|
isInteractive() {
|
|
@@ -123,7 +131,9 @@ export default baseMixins.extend({
|
|
|
123
131
|
},
|
|
124
132
|
|
|
125
133
|
isReadonly() {
|
|
126
|
-
|
|
134
|
+
var _a;
|
|
135
|
+
|
|
136
|
+
return (_a = this.readonly) !== null && _a !== void 0 ? _a : !!this.form && this.form.readonly;
|
|
127
137
|
},
|
|
128
138
|
|
|
129
139
|
shouldValidate() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mixins/validatable/index.ts"],"names":[],"mappings":"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","sourcesContent":["// Mixins\nimport Colorable from '../colorable'\nimport Themeable from '../themeable'\nimport { inject as RegistrableInject } from '../registrable'\n\n// Utilities\nimport { deepEqual } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { PropValidator } from 'vue/types/options'\nimport { InputMessage, InputValidationRules } from 'vuetify/types'\n\nconst baseMixins = mixins(\n Colorable,\n RegistrableInject<'form', any>('form'),\n Themeable,\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'validatable',\n\n props: {\n disabled: Boolean,\n error: Boolean,\n errorCount: {\n type: [Number, String],\n default: 1,\n },\n errorMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n messages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n readonly: Boolean,\n rules: {\n type: Array,\n default: () => [],\n } as PropValidator<InputValidationRules>,\n success: Boolean,\n successMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n validateOnBlur: Boolean,\n value: { required: false },\n },\n\n data () {\n return {\n errorBucket: [] as string[],\n hasColor: false,\n hasFocused: false,\n hasInput: false,\n isFocused: false,\n isResetting: false,\n lazyValue: this.value,\n valid: false,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.color) return this.color\n // It's assumed that if the input is on a\n // dark background, the user will want to\n // have a white color. If the entire app\n // is setup to be dark, then they will\n // like want to use their primary color\n if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n hasError (): boolean {\n return (\n this.internalErrorMessages.length > 0 ||\n this.errorBucket.length > 0 ||\n this.error\n )\n },\n // TODO: Add logic that allows the user to enable based\n // upon a good validation\n hasSuccess (): boolean {\n return (\n this.internalSuccessMessages.length > 0 ||\n this.success\n )\n },\n externalError (): boolean {\n return this.internalErrorMessages.length > 0 || this.error\n },\n hasMessages (): boolean {\n return this.validationTarget.length > 0\n },\n hasState (): boolean {\n if (this.isDisabled) return false\n\n return (\n this.hasSuccess ||\n (this.shouldValidate && this.hasError)\n )\n },\n internalErrorMessages (): InputValidationRules {\n return this.genInternalMessages(this.errorMessages)\n },\n internalMessages (): InputValidationRules {\n return this.genInternalMessages(this.messages)\n },\n internalSuccessMessages (): InputValidationRules {\n return this.genInternalMessages(this.successMessages)\n },\n internalValue: {\n get (): unknown {\n return this.lazyValue\n },\n set (val: any) {\n this.lazyValue = val\n\n this.$emit('input', val)\n },\n },\n isDisabled (): boolean {\n return this.disabled || (\n !!this.form &&\n this.form.disabled\n )\n },\n isInteractive (): boolean {\n return !this.isDisabled && !this.isReadonly\n },\n isReadonly (): boolean {\n return this.readonly || (\n !!this.form &&\n this.form.readonly\n )\n },\n shouldValidate (): boolean {\n if (this.externalError) return true\n if (this.isResetting) return false\n\n return this.validateOnBlur\n ? this.hasFocused && !this.isFocused\n : (this.hasInput || this.hasFocused)\n },\n validations (): InputValidationRules {\n return this.validationTarget.slice(0, Number(this.errorCount))\n },\n validationState (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor) return this.computedColor\n return undefined\n },\n validationTarget (): InputValidationRules {\n if (this.internalErrorMessages.length > 0) {\n return this.internalErrorMessages\n } else if (this.successMessages && this.successMessages.length > 0) {\n return this.internalSuccessMessages\n } else if (this.messages && this.messages.length > 0) {\n return this.internalMessages\n } else if (this.shouldValidate) {\n return this.errorBucket\n } else return []\n },\n },\n\n watch: {\n rules: {\n handler (newVal, oldVal) {\n if (deepEqual(newVal, oldVal)) return\n this.validate()\n },\n deep: true,\n },\n internalValue () {\n // If it's the first time we're setting input,\n // mark it with hasInput\n this.hasInput = true\n this.validateOnBlur || this.$nextTick(this.validate)\n },\n isFocused (val) {\n // Should not check validation\n // if disabled\n if (\n !val &&\n !this.isDisabled\n ) {\n this.hasFocused = true\n this.validateOnBlur && this.$nextTick(this.validate)\n }\n },\n isResetting () {\n setTimeout(() => {\n this.hasInput = false\n this.hasFocused = false\n this.isResetting = false\n this.validate()\n }, 0)\n },\n hasError (val) {\n if (this.shouldValidate) {\n this.$emit('update:error', val)\n }\n },\n value (val) {\n this.lazyValue = val\n },\n },\n\n beforeMount () {\n this.validate()\n },\n\n created () {\n this.form && this.form.register(this)\n },\n\n beforeDestroy () {\n this.form && this.form.unregister(this)\n },\n\n methods: {\n genInternalMessages (messages: InputMessage | null): InputValidationRules {\n if (!messages) return []\n else if (Array.isArray(messages)) return messages\n else return [messages]\n },\n /** @public */\n reset () {\n this.isResetting = true\n this.internalValue = Array.isArray(this.internalValue)\n ? []\n : null\n },\n /** @public */\n resetValidation () {\n this.isResetting = true\n },\n /** @public */\n validate (force = false, value?: any): boolean {\n const errorBucket = []\n value = value || this.internalValue\n\n if (force) this.hasInput = this.hasFocused = true\n\n for (let index = 0; index < this.rules.length; index++) {\n const rule = this.rules[index]\n const valid = typeof rule === 'function' ? rule(value) : rule\n\n if (valid === false || typeof valid === 'string') {\n errorBucket.push(valid || '')\n } else if (typeof valid !== 'boolean') {\n consoleError(`Rules should return a string or boolean, received '${typeof valid}' instead`, this)\n }\n }\n\n this.errorBucket = errorBucket\n this.valid = errorBucket.length === 0\n\n return this.valid\n },\n },\n})\n"],"sourceRoot":"","file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/mixins/validatable/index.ts"],"names":[],"mappings":"AAAA;AACA,OAAO,SAAP,MAAsB,cAAtB;AACA,OAAO,SAAP,MAAsB,cAAtB;AACA,SAAS,MAAM,IAAI,iBAAnB,QAA4C,gBAA5C,C,CAEA;;AACA,SAAS,SAAT,QAA0B,oBAA1B;AACA,SAAS,YAAT,QAA6B,oBAA7B;AACA,OAAO,MAAP,MAAmB,mBAAnB;AAMA,MAAM,UAAU,GAAG,MAAM,CACvB,SADuB,EAEvB,iBAAiB,CAAc,MAAd,CAFM,EAGvB,SAHuB,CAAzB;AAMA;;AACA,eAAe,UAAU,CAAC,MAAX,CAAkB;AAC/B,EAAA,IAAI,EAAE,aADyB;AAG/B,EAAA,KAAK,EAAE;AACL,IAAA,QAAQ,EAAE;AACR,MAAA,IAAI,EAAE,OADE;AAER,MAAA,OAAO,EAAE;AAFD,KADL;AAKL,IAAA,KAAK,EAAE,OALF;AAML,IAAA,UAAU,EAAE;AACV,MAAA,IAAI,EAAE,CAAC,MAAD,EAAS,MAAT,CADI;AAEV,MAAA,OAAO,EAAE;AAFC,KANP;AAUL,IAAA,aAAa,EAAE;AACb,MAAA,IAAI,EAAE,CAAC,MAAD,EAAS,KAAT,CADO;AAEb,MAAA,OAAO,EAAE,MAAM;AAFF,KAVV;AAcL,IAAA,QAAQ,EAAE;AACR,MAAA,IAAI,EAAE,CAAC,MAAD,EAAS,KAAT,CADE;AAER,MAAA,OAAO,EAAE,MAAM;AAFP,KAdL;AAkBL,IAAA,QAAQ,EAAE;AACR,MAAA,IAAI,EAAE,OADE;AAER,MAAA,OAAO,EAAE;AAFD,KAlBL;AAsBL,IAAA,KAAK,EAAE;AACL,MAAA,IAAI,EAAE,KADD;AAEL,MAAA,OAAO,EAAE,MAAM;AAFV,KAtBF;AA0BL,IAAA,OAAO,EAAE,OA1BJ;AA2BL,IAAA,eAAe,EAAE;AACf,MAAA,IAAI,EAAE,CAAC,MAAD,EAAS,KAAT,CADS;AAEf,MAAA,OAAO,EAAE,MAAM;AAFA,KA3BZ;AA+BL,IAAA,cAAc,EAAE,OA/BX;AAgCL,IAAA,KAAK,EAAE;AAAE,MAAA,QAAQ,EAAE;AAAZ;AAhCF,GAHwB;;AAsC/B,EAAA,IAAI,GAAA;AACF,WAAO;AACL,MAAA,WAAW,EAAE,EADR;AAEL,MAAA,QAAQ,EAAE,KAFL;AAGL,MAAA,UAAU,EAAE,KAHP;AAIL,MAAA,QAAQ,EAAE,KAJL;AAKL,MAAA,SAAS,EAAE,KALN;AAML,MAAA,WAAW,EAAE,KANR;AAOL,MAAA,SAAS,EAAE,KAAK,KAPX;AAQL,MAAA,KAAK,EAAE;AARF,KAAP;AAUD,GAjD8B;;AAmD/B,EAAA,QAAQ,EAAE;AACR,IAAA,aAAa,GAAA;AACX,UAAI,KAAK,UAAT,EAAqB,OAAO,SAAP;AACrB,UAAI,KAAK,KAAT,EAAgB,OAAO,KAAK,KAAZ,CAFL,CAGX;AACA;AACA;AACA;AACA;;AACA,UAAI,KAAK,MAAL,IAAe,CAAC,KAAK,SAAzB,EAAoC,OAAO,OAAP,CAApC,KACK,OAAO,SAAP;AACN,KAXO;;AAYR,IAAA,QAAQ,GAAA;AACN,aACE,KAAK,qBAAL,CAA2B,MAA3B,GAAoC,CAApC,IACA,KAAK,WAAL,CAAiB,MAAjB,GAA0B,CAD1B,IAEA,KAAK,KAHP;AAKD,KAlBO;;AAmBR;AACA;AACA,IAAA,UAAU,GAAA;AACR,aACE,KAAK,uBAAL,CAA6B,MAA7B,GAAsC,CAAtC,IACA,KAAK,OAFP;AAID,KA1BO;;AA2BR,IAAA,aAAa,GAAA;AACX,aAAO,KAAK,qBAAL,CAA2B,MAA3B,GAAoC,CAApC,IAAyC,KAAK,KAArD;AACD,KA7BO;;AA8BR,IAAA,WAAW,GAAA;AACT,aAAO,KAAK,gBAAL,CAAsB,MAAtB,GAA+B,CAAtC;AACD,KAhCO;;AAiCR,IAAA,QAAQ,GAAA;AACN,UAAI,KAAK,UAAT,EAAqB,OAAO,KAAP;AAErB,aACE,KAAK,UAAL,IACC,KAAK,cAAL,IAAuB,KAAK,QAF/B;AAID,KAxCO;;AAyCR,IAAA,qBAAqB,GAAA;AACnB,aAAO,KAAK,mBAAL,CAAyB,KAAK,aAA9B,CAAP;AACD,KA3CO;;AA4CR,IAAA,gBAAgB,GAAA;AACd,aAAO,KAAK,mBAAL,CAAyB,KAAK,QAA9B,CAAP;AACD,KA9CO;;AA+CR,IAAA,uBAAuB,GAAA;AACrB,aAAO,KAAK,mBAAL,CAAyB,KAAK,eAA9B,CAAP;AACD,KAjDO;;AAkDR,IAAA,aAAa,EAAE;AACb,MAAA,GAAG,GAAA;AACD,eAAO,KAAK,SAAZ;AACD,OAHY;;AAIb,MAAA,GAAG,CAAE,GAAF,EAAU;AACX,aAAK,SAAL,GAAiB,GAAjB;AAEA,aAAK,KAAL,CAAW,OAAX,EAAoB,GAApB;AACD;;AARY,KAlDP;;AA4DR,IAAA,UAAU,GAAA;;;AACR,aAAO,CAAA,EAAA,GAAA,KAAK,QAAL,MAAa,IAAb,IAAa,EAAA,KAAA,KAAA,CAAb,GAAa,EAAb,GACL,CAAC,CAAC,KAAK,IAAP,IACA,KAAK,IAAL,CAAU,QAFZ;AAID,KAjEO;;AAkER,IAAA,aAAa,GAAA;AACX,aAAO,CAAC,KAAK,UAAN,IAAoB,CAAC,KAAK,UAAjC;AACD,KApEO;;AAqER,IAAA,UAAU,GAAA;;;AACR,aAAO,CAAA,EAAA,GAAA,KAAK,QAAL,MAAa,IAAb,IAAa,EAAA,KAAA,KAAA,CAAb,GAAa,EAAb,GACL,CAAC,CAAC,KAAK,IAAP,IACA,KAAK,IAAL,CAAU,QAFZ;AAID,KA1EO;;AA2ER,IAAA,cAAc,GAAA;AACZ,UAAI,KAAK,aAAT,EAAwB,OAAO,IAAP;AACxB,UAAI,KAAK,WAAT,EAAsB,OAAO,KAAP;AAEtB,aAAO,KAAK,cAAL,GACH,KAAK,UAAL,IAAmB,CAAC,KAAK,SADtB,GAEF,KAAK,QAAL,IAAiB,KAAK,UAF3B;AAGD,KAlFO;;AAmFR,IAAA,WAAW,GAAA;AACT,aAAO,KAAK,gBAAL,CAAsB,KAAtB,CAA4B,CAA5B,EAA+B,MAAM,CAAC,KAAK,UAAN,CAArC,CAAP;AACD,KArFO;;AAsFR,IAAA,eAAe,GAAA;AACb,UAAI,KAAK,UAAT,EAAqB,OAAO,SAAP;AACrB,UAAI,KAAK,QAAL,IAAiB,KAAK,cAA1B,EAA0C,OAAO,OAAP;AAC1C,UAAI,KAAK,UAAT,EAAqB,OAAO,SAAP;AACrB,UAAI,KAAK,QAAT,EAAmB,OAAO,KAAK,aAAZ;AACnB,aAAO,SAAP;AACD,KA5FO;;AA6FR,IAAA,gBAAgB,GAAA;AACd,UAAI,KAAK,qBAAL,CAA2B,MAA3B,GAAoC,CAAxC,EAA2C;AACzC,eAAO,KAAK,qBAAZ;AACD,OAFD,MAEO,IAAI,KAAK,eAAL,IAAwB,KAAK,eAAL,CAAqB,MAArB,GAA8B,CAA1D,EAA6D;AAClE,eAAO,KAAK,uBAAZ;AACD,OAFM,MAEA,IAAI,KAAK,QAAL,IAAiB,KAAK,QAAL,CAAc,MAAd,GAAuB,CAA5C,EAA+C;AACpD,eAAO,KAAK,gBAAZ;AACD,OAFM,MAEA,IAAI,KAAK,cAAT,EAAyB;AAC9B,eAAO,KAAK,WAAZ;AACD,OAFM,MAEA,OAAO,EAAP;AACR;;AAvGO,GAnDqB;AA6J/B,EAAA,KAAK,EAAE;AACL,IAAA,KAAK,EAAE;AACL,MAAA,OAAO,CAAE,MAAF,EAAU,MAAV,EAAgB;AACrB,YAAI,SAAS,CAAC,MAAD,EAAS,MAAT,CAAb,EAA+B;AAC/B,aAAK,QAAL;AACD,OAJI;;AAKL,MAAA,IAAI,EAAE;AALD,KADF;;AAQL,IAAA,aAAa,GAAA;AACX;AACA;AACA,WAAK,QAAL,GAAgB,IAAhB;AACA,WAAK,cAAL,IAAuB,KAAK,SAAL,CAAe,KAAK,QAApB,CAAvB;AACD,KAbI;;AAcL,IAAA,SAAS,CAAE,GAAF,EAAK;AACZ;AACA;AACA,UACE,CAAC,GAAD,IACA,CAAC,KAAK,UAFR,EAGE;AACA,aAAK,UAAL,GAAkB,IAAlB;AACA,aAAK,cAAL,IAAuB,KAAK,SAAL,CAAe,KAAK,QAApB,CAAvB;AACD;AACF,KAxBI;;AAyBL,IAAA,WAAW,GAAA;AACT,MAAA,UAAU,CAAC,MAAK;AACd,aAAK,QAAL,GAAgB,KAAhB;AACA,aAAK,UAAL,GAAkB,KAAlB;AACA,aAAK,WAAL,GAAmB,KAAnB;AACA,aAAK,QAAL;AACD,OALS,EAKP,CALO,CAAV;AAMD,KAhCI;;AAiCL,IAAA,QAAQ,CAAE,GAAF,EAAK;AACX,UAAI,KAAK,cAAT,EAAyB;AACvB,aAAK,KAAL,CAAW,cAAX,EAA2B,GAA3B;AACD;AACF,KArCI;;AAsCL,IAAA,KAAK,CAAE,GAAF,EAAK;AACR,WAAK,SAAL,GAAiB,GAAjB;AACD;;AAxCI,GA7JwB;;AAwM/B,EAAA,WAAW,GAAA;AACT,SAAK,QAAL;AACD,GA1M8B;;AA4M/B,EAAA,OAAO,GAAA;AACL,SAAK,IAAL,IAAa,KAAK,IAAL,CAAU,QAAV,CAAmB,IAAnB,CAAb;AACD,GA9M8B;;AAgN/B,EAAA,aAAa,GAAA;AACX,SAAK,IAAL,IAAa,KAAK,IAAL,CAAU,UAAV,CAAqB,IAArB,CAAb;AACD,GAlN8B;;AAoN/B,EAAA,OAAO,EAAE;AACP,IAAA,mBAAmB,CAAE,QAAF,EAA+B;AAChD,UAAI,CAAC,QAAL,EAAe,OAAO,EAAP,CAAf,KACK,IAAI,KAAK,CAAC,OAAN,CAAc,QAAd,CAAJ,EAA6B,OAAO,QAAP,CAA7B,KACA,OAAO,CAAC,QAAD,CAAP;AACN,KALM;;AAMP;AACA,IAAA,KAAK,GAAA;AACH,WAAK,WAAL,GAAmB,IAAnB;AACA,WAAK,aAAL,GAAqB,KAAK,CAAC,OAAN,CAAc,KAAK,aAAnB,IACjB,EADiB,GAEjB,IAFJ;AAGD,KAZM;;AAaP;AACA,IAAA,eAAe,GAAA;AACb,WAAK,WAAL,GAAmB,IAAnB;AACD,KAhBM;;AAiBP;AACA,IAAA,QAAQ,CAAE,KAAK,GAAG,KAAV,EAAiB,KAAjB,EAA4B;AAClC,YAAM,WAAW,GAAG,EAApB;AACA,MAAA,KAAK,GAAG,KAAK,IAAI,KAAK,aAAtB;AAEA,UAAI,KAAJ,EAAW,KAAK,QAAL,GAAgB,KAAK,UAAL,GAAkB,IAAlC;;AAEX,WAAK,IAAI,KAAK,GAAG,CAAjB,EAAoB,KAAK,GAAG,KAAK,KAAL,CAAW,MAAvC,EAA+C,KAAK,EAApD,EAAwD;AACtD,cAAM,IAAI,GAAG,KAAK,KAAL,CAAW,KAAX,CAAb;AACA,cAAM,KAAK,GAAG,OAAO,IAAP,KAAgB,UAAhB,GAA6B,IAAI,CAAC,KAAD,CAAjC,GAA2C,IAAzD;;AAEA,YAAI,KAAK,KAAK,KAAV,IAAmB,OAAO,KAAP,KAAiB,QAAxC,EAAkD;AAChD,UAAA,WAAW,CAAC,IAAZ,CAAiB,KAAK,IAAI,EAA1B;AACD,SAFD,MAEO,IAAI,OAAO,KAAP,KAAiB,SAArB,EAAgC;AACrC,UAAA,YAAY,CAAC,sDAAsD,OAAO,KAAK,WAAnE,EAAgF,IAAhF,CAAZ;AACD;AACF;;AAED,WAAK,WAAL,GAAmB,WAAnB;AACA,WAAK,KAAL,GAAa,WAAW,CAAC,MAAZ,KAAuB,CAApC;AAEA,aAAO,KAAK,KAAZ;AACD;;AAvCM;AApNsB,CAAlB,CAAf","sourcesContent":["// Mixins\nimport Colorable from '../colorable'\nimport Themeable from '../themeable'\nimport { inject as RegistrableInject } from '../registrable'\n\n// Utilities\nimport { deepEqual } from '../../util/helpers'\nimport { consoleError } from '../../util/console'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { PropValidator } from 'vue/types/options'\nimport { InputMessage, InputValidationRules } from 'vuetify/types'\n\nconst baseMixins = mixins(\n Colorable,\n RegistrableInject<'form', any>('form'),\n Themeable,\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'validatable',\n\n props: {\n disabled: {\n type: Boolean,\n default: null,\n },\n error: Boolean,\n errorCount: {\n type: [Number, String],\n default: 1,\n },\n errorMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n messages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n readonly: {\n type: Boolean,\n default: null,\n },\n rules: {\n type: Array,\n default: () => [],\n } as PropValidator<InputValidationRules>,\n success: Boolean,\n successMessages: {\n type: [String, Array],\n default: () => [],\n } as PropValidator<InputMessage | null>,\n validateOnBlur: Boolean,\n value: { required: false },\n },\n\n data () {\n return {\n errorBucket: [] as string[],\n hasColor: false,\n hasFocused: false,\n hasInput: false,\n isFocused: false,\n isResetting: false,\n lazyValue: this.value,\n valid: false,\n }\n },\n\n computed: {\n computedColor (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.color) return this.color\n // It's assumed that if the input is on a\n // dark background, the user will want to\n // have a white color. If the entire app\n // is setup to be dark, then they will\n // like want to use their primary color\n if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n hasError (): boolean {\n return (\n this.internalErrorMessages.length > 0 ||\n this.errorBucket.length > 0 ||\n this.error\n )\n },\n // TODO: Add logic that allows the user to enable based\n // upon a good validation\n hasSuccess (): boolean {\n return (\n this.internalSuccessMessages.length > 0 ||\n this.success\n )\n },\n externalError (): boolean {\n return this.internalErrorMessages.length > 0 || this.error\n },\n hasMessages (): boolean {\n return this.validationTarget.length > 0\n },\n hasState (): boolean {\n if (this.isDisabled) return false\n\n return (\n this.hasSuccess ||\n (this.shouldValidate && this.hasError)\n )\n },\n internalErrorMessages (): InputValidationRules {\n return this.genInternalMessages(this.errorMessages)\n },\n internalMessages (): InputValidationRules {\n return this.genInternalMessages(this.messages)\n },\n internalSuccessMessages (): InputValidationRules {\n return this.genInternalMessages(this.successMessages)\n },\n internalValue: {\n get (): unknown {\n return this.lazyValue\n },\n set (val: any) {\n this.lazyValue = val\n\n this.$emit('input', val)\n },\n },\n isDisabled (): boolean {\n return this.disabled ?? (\n !!this.form &&\n this.form.disabled\n )\n },\n isInteractive (): boolean {\n return !this.isDisabled && !this.isReadonly\n },\n isReadonly (): boolean {\n return this.readonly ?? (\n !!this.form &&\n this.form.readonly\n )\n },\n shouldValidate (): boolean {\n if (this.externalError) return true\n if (this.isResetting) return false\n\n return this.validateOnBlur\n ? this.hasFocused && !this.isFocused\n : (this.hasInput || this.hasFocused)\n },\n validations (): InputValidationRules {\n return this.validationTarget.slice(0, Number(this.errorCount))\n },\n validationState (): string | undefined {\n if (this.isDisabled) return undefined\n if (this.hasError && this.shouldValidate) return 'error'\n if (this.hasSuccess) return 'success'\n if (this.hasColor) return this.computedColor\n return undefined\n },\n validationTarget (): InputValidationRules {\n if (this.internalErrorMessages.length > 0) {\n return this.internalErrorMessages\n } else if (this.successMessages && this.successMessages.length > 0) {\n return this.internalSuccessMessages\n } else if (this.messages && this.messages.length > 0) {\n return this.internalMessages\n } else if (this.shouldValidate) {\n return this.errorBucket\n } else return []\n },\n },\n\n watch: {\n rules: {\n handler (newVal, oldVal) {\n if (deepEqual(newVal, oldVal)) return\n this.validate()\n },\n deep: true,\n },\n internalValue () {\n // If it's the first time we're setting input,\n // mark it with hasInput\n this.hasInput = true\n this.validateOnBlur || this.$nextTick(this.validate)\n },\n isFocused (val) {\n // Should not check validation\n // if disabled\n if (\n !val &&\n !this.isDisabled\n ) {\n this.hasFocused = true\n this.validateOnBlur && this.$nextTick(this.validate)\n }\n },\n isResetting () {\n setTimeout(() => {\n this.hasInput = false\n this.hasFocused = false\n this.isResetting = false\n this.validate()\n }, 0)\n },\n hasError (val) {\n if (this.shouldValidate) {\n this.$emit('update:error', val)\n }\n },\n value (val) {\n this.lazyValue = val\n },\n },\n\n beforeMount () {\n this.validate()\n },\n\n created () {\n this.form && this.form.register(this)\n },\n\n beforeDestroy () {\n this.form && this.form.unregister(this)\n },\n\n methods: {\n genInternalMessages (messages: InputMessage | null): InputValidationRules {\n if (!messages) return []\n else if (Array.isArray(messages)) return messages\n else return [messages]\n },\n /** @public */\n reset () {\n this.isResetting = true\n this.internalValue = Array.isArray(this.internalValue)\n ? []\n : null\n },\n /** @public */\n resetValidation () {\n this.isResetting = true\n },\n /** @public */\n validate (force = false, value?: any): boolean {\n const errorBucket = []\n value = value || this.internalValue\n\n if (force) this.hasInput = this.hasFocused = true\n\n for (let index = 0; index < this.rules.length; index++) {\n const rule = this.rules[index]\n const valid = typeof rule === 'function' ? rule(value) : rule\n\n if (valid === false || typeof valid === 'string') {\n errorBucket.push(valid || '')\n } else if (typeof valid !== 'boolean') {\n consoleError(`Rules should return a string or boolean, received '${typeof valid}' instead`, this)\n }\n }\n\n this.errorBucket = errorBucket\n this.valid = errorBucket.length === 0\n\n return this.valid\n },\n },\n})\n"],"sourceRoot":"","file":"index.js"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vuetify",
|
|
3
3
|
"description": "Vue Material Component Framework",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.7.1",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "John Leider",
|
|
7
7
|
"email": "john@vuetifyjs.com"
|
|
@@ -114,5 +114,5 @@
|
|
|
114
114
|
"attributes": "dist/json/attributes.json"
|
|
115
115
|
},
|
|
116
116
|
"web-types": "dist/json/web-types.json",
|
|
117
|
-
"gitHead": "
|
|
117
|
+
"gitHead": "2127ff1fb332700f4e1a2e4a41843162217f5bb3"
|
|
118
118
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import mixins from '../../../util/mixins'
|
|
4
4
|
import Colorable from '../../../mixins/colorable'
|
|
5
5
|
import Localable from '../../../mixins/localable'
|
|
6
|
-
import Mouse from '
|
|
6
|
+
import Mouse from '../../../mixins/mouse'
|
|
7
7
|
import Themeable from '../../../mixins/themeable'
|
|
8
8
|
import Times from './times'
|
|
9
9
|
|
|
@@ -13,7 +13,9 @@ import {
|
|
|
13
13
|
DataItemsPerPageOption,
|
|
14
14
|
ItemGroup,
|
|
15
15
|
RowClassFunction,
|
|
16
|
+
RowStyleFunction,
|
|
16
17
|
DataTableItemProps,
|
|
18
|
+
DataTableFilterMode,
|
|
17
19
|
} from 'vuetify/types'
|
|
18
20
|
|
|
19
21
|
// Components
|
|
@@ -31,6 +33,7 @@ import MobileRow from './MobileRow'
|
|
|
31
33
|
|
|
32
34
|
// Mixins
|
|
33
35
|
import Loadable from '../../mixins/loadable'
|
|
36
|
+
import Mouse from '../../mixins/mouse'
|
|
34
37
|
|
|
35
38
|
// Directives
|
|
36
39
|
import ripple from '../../directives/ripple'
|
|
@@ -39,7 +42,7 @@ import ripple from '../../directives/ripple'
|
|
|
39
42
|
import mixins from '../../util/mixins'
|
|
40
43
|
import { deepEqual, getObjectValueByPath, getPrefixedScopedSlots, getSlot, defaultFilter, camelizeObjectKeys, getPropertyFromItem } from '../../util/helpers'
|
|
41
44
|
import { breaking } from '../../util/console'
|
|
42
|
-
import { mergeClasses } from '../../util/mergeData'
|
|
45
|
+
import { mergeClasses, mergeStyles } from '../../util/mergeData'
|
|
43
46
|
|
|
44
47
|
function filterFn (item: any, search: string | null, filter: DataTableFilterFunction) {
|
|
45
48
|
return (header: DataTableHeader) => {
|
|
@@ -53,27 +56,46 @@ function searchTableItems (
|
|
|
53
56
|
search: string | null,
|
|
54
57
|
headersWithCustomFilters: DataTableHeader[],
|
|
55
58
|
headersWithoutCustomFilters: DataTableHeader[],
|
|
56
|
-
customFilter: DataTableFilterFunction
|
|
59
|
+
customFilter: DataTableFilterFunction,
|
|
60
|
+
filterMode: DataTableFilterMode,
|
|
57
61
|
) {
|
|
58
62
|
search = typeof search === 'string' ? search.trim() : null
|
|
59
63
|
|
|
60
|
-
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
const matchesColumnFilters = headersWithCustomFilters.every(filterFn(item, search, defaultFilter))
|
|
64
|
+
if (filterMode === 'union') {
|
|
65
|
+
// If the `search` property is empty and there are no custom filters in use, there is nothing to do.
|
|
66
|
+
if (!(search && headersWithoutCustomFilters.length) && !headersWithCustomFilters.length) return items
|
|
64
67
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
+
return items.filter(item => {
|
|
69
|
+
// Headers with custom filters are evaluated whether or not a search term has been provided.
|
|
70
|
+
if (headersWithCustomFilters.length && headersWithCustomFilters.every(filterFn(item, search, defaultFilter))) {
|
|
71
|
+
return true
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Otherwise, the `search` property is used to filter columns without a custom filter.
|
|
75
|
+
return (search && headersWithoutCustomFilters.some(filterFn(item, search, customFilter)))
|
|
76
|
+
})
|
|
77
|
+
} else if (filterMode === 'intersection') {
|
|
78
|
+
return items.filter(item => {
|
|
79
|
+
// Headers with custom filters are evaluated whether or not a search term has been provided.
|
|
80
|
+
// We need to match every filter to be included in the results.
|
|
81
|
+
const matchesColumnFilters = headersWithCustomFilters.every(filterFn(item, search, defaultFilter))
|
|
82
|
+
|
|
83
|
+
// Headers without custom filters are only filtered by the `search` property if it is defined.
|
|
84
|
+
// We only need a single column to match the search term to be included in the results.
|
|
85
|
+
const matchesSearchTerm = !search || headersWithoutCustomFilters.some(filterFn(item, search, customFilter))
|
|
68
86
|
|
|
69
|
-
|
|
70
|
-
|
|
87
|
+
return matchesColumnFilters && matchesSearchTerm
|
|
88
|
+
})
|
|
89
|
+
} else {
|
|
90
|
+
return items
|
|
91
|
+
}
|
|
71
92
|
}
|
|
72
93
|
|
|
73
94
|
/* @vue/component */
|
|
74
95
|
export default mixins(
|
|
75
96
|
VDataIterator,
|
|
76
97
|
Loadable,
|
|
98
|
+
Mouse,
|
|
77
99
|
).extend({
|
|
78
100
|
name: 'v-data-table',
|
|
79
101
|
|
|
@@ -109,10 +131,18 @@ export default mixins(
|
|
|
109
131
|
type: Function,
|
|
110
132
|
default: defaultFilter,
|
|
111
133
|
} as PropValidator<typeof defaultFilter>,
|
|
134
|
+
filterMode: {
|
|
135
|
+
type: String,
|
|
136
|
+
default: 'intersection',
|
|
137
|
+
} as PropValidator<DataTableFilterMode>,
|
|
112
138
|
itemClass: {
|
|
113
139
|
type: [String, Function],
|
|
114
140
|
default: () => '',
|
|
115
141
|
} as PropValidator<RowClassFunction | string>,
|
|
142
|
+
itemStyle: {
|
|
143
|
+
type: [String, Function],
|
|
144
|
+
default: () => '',
|
|
145
|
+
} as PropValidator<RowStyleFunction | string>,
|
|
116
146
|
loaderHeight: {
|
|
117
147
|
type: [Number, String],
|
|
118
148
|
default: 4,
|
|
@@ -222,15 +252,38 @@ export default mixins(
|
|
|
222
252
|
this.widths = Array.from(this.$el.querySelectorAll('th')).map(e => e.clientWidth)
|
|
223
253
|
},
|
|
224
254
|
customFilterWithColumns (items: any[], search: string) {
|
|
225
|
-
return searchTableItems(
|
|
255
|
+
return searchTableItems(
|
|
256
|
+
items,
|
|
257
|
+
search,
|
|
258
|
+
this.headersWithCustomFilters,
|
|
259
|
+
this.headersWithoutCustomFilters,
|
|
260
|
+
this.customFilter,
|
|
261
|
+
this.filterMode
|
|
262
|
+
)
|
|
226
263
|
},
|
|
227
264
|
customSortWithHeaders (items: any[], sortBy: string[], sortDesc: boolean[], locale: string) {
|
|
228
265
|
return this.customSort(items, sortBy, sortDesc, locale, this.columnSorters)
|
|
229
266
|
},
|
|
230
267
|
createItemProps (item: any, index: number): DataTableItemProps {
|
|
231
|
-
const
|
|
268
|
+
const data = {
|
|
269
|
+
...VDataIterator.options.methods.createItemProps.call(this, item, index),
|
|
270
|
+
headers: this.computedHeaders,
|
|
271
|
+
}
|
|
232
272
|
|
|
233
|
-
return
|
|
273
|
+
return {
|
|
274
|
+
...data,
|
|
275
|
+
attrs: {
|
|
276
|
+
class: {
|
|
277
|
+
'v-data-table__selected': data.isSelected,
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
on: {
|
|
281
|
+
...this.getDefaultMouseEventHandlers(':row', () => data, true),
|
|
282
|
+
// TODO: the first argument should be the event, and the second argument should be data,
|
|
283
|
+
// but this is a breaking change so it's for v3
|
|
284
|
+
click: (event: MouseEvent) => this.$emit('click:row', item, data, event),
|
|
285
|
+
},
|
|
286
|
+
}
|
|
234
287
|
},
|
|
235
288
|
genCaption (props: DataScopeProps) {
|
|
236
289
|
if (this.caption) return [this.$createElement('caption', [this.caption])]
|
|
@@ -502,6 +555,7 @@ export default mixins(
|
|
|
502
555
|
{ ...classes, 'v-data-table__selected': data.isSelected },
|
|
503
556
|
getPropertyFromItem(item, this.itemClass)
|
|
504
557
|
),
|
|
558
|
+
style: mergeStyles({}, getPropertyFromItem(item, this.itemStyle)),
|
|
505
559
|
props: {
|
|
506
560
|
headers: this.computedHeaders,
|
|
507
561
|
hideDefaultHeader: this.hideDefaultHeader,
|
|
@@ -510,13 +564,7 @@ export default mixins(
|
|
|
510
564
|
rtl: this.$vuetify.rtl,
|
|
511
565
|
},
|
|
512
566
|
scopedSlots,
|
|
513
|
-
on:
|
|
514
|
-
// TODO: for click, the first argument should be the event, and the second argument should be data,
|
|
515
|
-
// but this is a breaking change so it's for v3
|
|
516
|
-
click: (event: MouseEvent) => this.$emit('click:row', item, data, event),
|
|
517
|
-
contextmenu: (event: MouseEvent) => this.$emit('contextmenu:row', event, data),
|
|
518
|
-
dblclick: (event: MouseEvent) => this.$emit('dblclick:row', event, data),
|
|
519
|
-
},
|
|
567
|
+
on: data.on,
|
|
520
568
|
})
|
|
521
569
|
},
|
|
522
570
|
genBody (props: DataScopeProps): VNode | string | VNodeChildren {
|
|
@@ -957,11 +957,34 @@ describe('VDataTable.ts', () => {
|
|
|
957
957
|
expect(wrapper.html()).toMatchSnapshot()
|
|
958
958
|
})
|
|
959
959
|
|
|
960
|
+
// https://github.com/vuetifyjs/vuetify/issues/11600
|
|
961
|
+
it('should return rows from columns that match custom filters', async () => {
|
|
962
|
+
const wrapper = mountFunction({
|
|
963
|
+
propsData: {
|
|
964
|
+
items: testItems,
|
|
965
|
+
filterMode: 'union',
|
|
966
|
+
headers: [
|
|
967
|
+
{ text: 'Dessert (100g serving)', align: 'left', value: 'name' },
|
|
968
|
+
{ text: 'Calories', value: 'calories', filter: value => value === 159 },
|
|
969
|
+
{ text: 'Fat (g)', value: 'fat' },
|
|
970
|
+
{ text: 'Carbs (g)', value: 'carbs' },
|
|
971
|
+
{ text: 'Protein (g)', value: 'protein' },
|
|
972
|
+
{ text: 'Iron (%)', value: 'iron' },
|
|
973
|
+
],
|
|
974
|
+
},
|
|
975
|
+
})
|
|
976
|
+
|
|
977
|
+
wrapper.setProps({ search: 'eclair' })
|
|
978
|
+
await wrapper.vm.$nextTick()
|
|
979
|
+
expect(wrapper.vm.internalCurrentItems).toHaveLength(2)
|
|
980
|
+
})
|
|
981
|
+
|
|
960
982
|
// https://github.com/vuetifyjs/vuetify/issues/11179
|
|
961
983
|
it('should return rows from columns that exclusively match custom filters', async () => {
|
|
962
984
|
const wrapper = mountFunction({
|
|
963
985
|
propsData: {
|
|
964
986
|
items: testItems,
|
|
987
|
+
filterMode: 'intersection',
|
|
965
988
|
headers: [
|
|
966
989
|
{ text: 'Dessert (100g serving)', align: 'left', value: 'name' },
|
|
967
990
|
{ text: 'Calories', value: 'calories', filter: value => value === 159 },
|
|
@@ -973,6 +996,11 @@ describe('VDataTable.ts', () => {
|
|
|
973
996
|
},
|
|
974
997
|
})
|
|
975
998
|
|
|
999
|
+
wrapper.setProps({ search: 'eclair' })
|
|
1000
|
+
await wrapper.vm.$nextTick()
|
|
1001
|
+
expect(wrapper.vm.internalCurrentItems).toHaveLength(0)
|
|
1002
|
+
|
|
1003
|
+
wrapper.setProps({ search: 'frozen' })
|
|
976
1004
|
await wrapper.vm.$nextTick()
|
|
977
1005
|
expect(wrapper.vm.internalCurrentItems).toHaveLength(1)
|
|
978
1006
|
})
|
|
@@ -2874,18 +2874,18 @@ exports[`VDataTable.ts should hide group button when column is not groupable 1`]
|
|
|
2874
2874
|
<div role="button"
|
|
2875
2875
|
aria-haspopup="listbox"
|
|
2876
2876
|
aria-expanded="false"
|
|
2877
|
-
aria-owns="list-
|
|
2877
|
+
aria-owns="list-763"
|
|
2878
2878
|
class="v-input__slot"
|
|
2879
2879
|
>
|
|
2880
2880
|
<div class="v-select__slot">
|
|
2881
|
-
<label for="input-
|
|
2881
|
+
<label for="input-763"
|
|
2882
2882
|
class="v-label theme--light"
|
|
2883
2883
|
style="left: 0px; position: absolute;"
|
|
2884
2884
|
>
|
|
2885
2885
|
Sort by
|
|
2886
2886
|
</label>
|
|
2887
2887
|
<div class="v-select__selections">
|
|
2888
|
-
<input id="input-
|
|
2888
|
+
<input id="input-763"
|
|
2889
2889
|
readonly="readonly"
|
|
2890
2890
|
type="text"
|
|
2891
2891
|
aria-readonly="false"
|
|
@@ -3424,7 +3424,7 @@ exports[`VDataTable.ts should hide group button when column is not groupable 1`]
|
|
|
3424
3424
|
<div role="button"
|
|
3425
3425
|
aria-haspopup="listbox"
|
|
3426
3426
|
aria-expanded="false"
|
|
3427
|
-
aria-owns="list-
|
|
3427
|
+
aria-owns="list-767"
|
|
3428
3428
|
class="v-input__slot"
|
|
3429
3429
|
>
|
|
3430
3430
|
<div class="v-select__slot">
|
|
@@ -3433,7 +3433,7 @@ exports[`VDataTable.ts should hide group button when column is not groupable 1`]
|
|
|
3433
3433
|
10
|
|
3434
3434
|
</div>
|
|
3435
3435
|
<input aria-label="Rows per page:"
|
|
3436
|
-
id="input-
|
|
3436
|
+
id="input-767"
|
|
3437
3437
|
readonly="readonly"
|
|
3438
3438
|
type="text"
|
|
3439
3439
|
aria-readonly="false"
|
|
@@ -9436,19 +9436,19 @@ exports[`VDataTable.ts should render with item scoped slot 1`] = `
|
|
|
9436
9436
|
</thead>
|
|
9437
9437
|
<tbody>
|
|
9438
9438
|
<div>
|
|
9439
|
-
{"item":{"name":"Frozen Yogurt","calories":159,"fat":6,"carbs":24,"protein":4,"iron":"1%","class":"test"},"index":0,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}]}
|
|
9439
|
+
{"item":{"name":"Frozen Yogurt","calories":159,"fat":6,"carbs":24,"protein":4,"iron":"1%","class":"test"},"index":0,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}],"attrs":{"class":{"v-data-table__selected":false}},"on":{}}
|
|
9440
9440
|
</div>
|
|
9441
9441
|
<div>
|
|
9442
|
-
{"item":{"name":"Ice cream sandwich","calories":237,"fat":9,"carbs":37,"protein":4.3,"iron":"1%","class":["test","second"]},"index":1,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}]}
|
|
9442
|
+
{"item":{"name":"Ice cream sandwich","calories":237,"fat":9,"carbs":37,"protein":4.3,"iron":"1%","class":["test","second"]},"index":1,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}],"attrs":{"class":{"v-data-table__selected":false}},"on":{}}
|
|
9443
9443
|
</div>
|
|
9444
9444
|
<div>
|
|
9445
|
-
{"item":{"name":"Eclair","calories":262,"fat":16,"carbs":23,"protein":6,"iron":"7%","class":{"test":true,"second":false}},"index":2,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}]}
|
|
9445
|
+
{"item":{"name":"Eclair","calories":262,"fat":16,"carbs":23,"protein":6,"iron":"7%","class":{"test":true,"second":false}},"index":2,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}],"attrs":{"class":{"v-data-table__selected":false}},"on":{}}
|
|
9446
9446
|
</div>
|
|
9447
9447
|
<div>
|
|
9448
|
-
{"item":{"name":"Cupcake","calories":305,"fat":3.7,"carbs":67,"protein":4.3,"iron":"8%"},"index":3,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}]}
|
|
9448
|
+
{"item":{"name":"Cupcake","calories":305,"fat":3.7,"carbs":67,"protein":4.3,"iron":"8%"},"index":3,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}],"attrs":{"class":{"v-data-table__selected":false}},"on":{}}
|
|
9449
9449
|
</div>
|
|
9450
9450
|
<div>
|
|
9451
|
-
{"item":{"name":"Gingerbread","calories":356,"fat":16,"carbs":49,"protein":3.9,"iron":"16%"},"index":4,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}]}
|
|
9451
|
+
{"item":{"name":"Gingerbread","calories":356,"fat":16,"carbs":49,"protein":3.9,"iron":"16%"},"index":4,"isSelected":false,"isExpanded":false,"isMobile":true,"headers":[{"text":"Dessert (100g serving)","align":"left","sortable":false,"value":"name"},{"text":"Calories","value":"calories"},{"text":"Fat (g)","value":"fat"},{"text":"Carbs (g)","value":"carbs"},{"text":"Protein (g)","value":"protein"},{"text":"Iron (%)","value":"iron"}],"attrs":{"class":{"v-data-table__selected":false}},"on":{}}
|
|
9452
9452
|
</div>
|
|
9453
9453
|
</tbody>
|
|
9454
9454
|
</table>
|
|
@@ -11354,18 +11354,18 @@ exports[`VDataTable.ts should respect mustSort property on options 1`] = `
|
|
|
11354
11354
|
<div role="button"
|
|
11355
11355
|
aria-haspopup="listbox"
|
|
11356
11356
|
aria-expanded="false"
|
|
11357
|
-
aria-owns="list-
|
|
11357
|
+
aria-owns="list-747"
|
|
11358
11358
|
class="v-input__slot"
|
|
11359
11359
|
>
|
|
11360
11360
|
<div class="v-select__slot">
|
|
11361
|
-
<label for="input-
|
|
11361
|
+
<label for="input-747"
|
|
11362
11362
|
class="v-label theme--light"
|
|
11363
11363
|
style="left: 0px; position: absolute;"
|
|
11364
11364
|
>
|
|
11365
11365
|
Sort by
|
|
11366
11366
|
</label>
|
|
11367
11367
|
<div class="v-select__selections">
|
|
11368
|
-
<input id="input-
|
|
11368
|
+
<input id="input-747"
|
|
11369
11369
|
readonly="readonly"
|
|
11370
11370
|
type="text"
|
|
11371
11371
|
aria-readonly="false"
|
|
@@ -11504,7 +11504,7 @@ exports[`VDataTable.ts should respect mustSort property on options 1`] = `
|
|
|
11504
11504
|
<div role="button"
|
|
11505
11505
|
aria-haspopup="listbox"
|
|
11506
11506
|
aria-expanded="false"
|
|
11507
|
-
aria-owns="list-
|
|
11507
|
+
aria-owns="list-751"
|
|
11508
11508
|
class="v-input__slot"
|
|
11509
11509
|
>
|
|
11510
11510
|
<div class="v-select__slot">
|
|
@@ -11513,7 +11513,7 @@ exports[`VDataTable.ts should respect mustSort property on options 1`] = `
|
|
|
11513
11513
|
10
|
|
11514
11514
|
</div>
|
|
11515
11515
|
<input aria-label="Rows per page:"
|
|
11516
|
-
id="input-
|
|
11516
|
+
id="input-751"
|
|
11517
11517
|
readonly="readonly"
|
|
11518
11518
|
type="text"
|
|
11519
11519
|
aria-readonly="false"
|
|
@@ -67,7 +67,7 @@ export default baseMixins.extend<options>().extend({
|
|
|
67
67
|
value: this.isActive,
|
|
68
68
|
}],
|
|
69
69
|
}), [
|
|
70
|
-
h('div', { class: 'v-expansion-panel-content__wrap' }, getSlot(this)),
|
|
70
|
+
h('div', { class: 'v-expansion-panel-content__wrap' }, getSlot(this, 'default', { open: this.isActive })),
|
|
71
71
|
]),
|
|
72
72
|
]))
|
|
73
73
|
},
|
|
@@ -80,7 +80,7 @@ export default baseMixins.extend<options>().extend({
|
|
|
80
80
|
this.$emit('click', e)
|
|
81
81
|
},
|
|
82
82
|
genIcon () {
|
|
83
|
-
const icon = getSlot(this, 'actions') ||
|
|
83
|
+
const icon = getSlot(this, 'actions', { open: this.isActive }) ||
|
|
84
84
|
[this.$createElement(VIcon, this.expandIcon)]
|
|
85
85
|
|
|
86
86
|
return this.$createElement(VFadeTransition, [
|