@dimailn/vuetify 2.7.2-alpha33 → 2.7.2-alpha34
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 +14 -1
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +1 -1
- package/dist/vuetify.min.js +2 -2
- package/es5/components/VItemGroup/VItemGroup.js +5 -0
- package/es5/components/VItemGroup/VItemGroup.js.map +1 -1
- package/es5/components/VTabs/VTabs.js +5 -0
- package/es5/components/VTabs/VTabs.js.map +1 -1
- package/es5/components/VTabs/VTabsBar.js +3 -0
- package/es5/components/VTabs/VTabsBar.js.map +1 -1
- package/es5/framework.js +1 -1
- package/lib/components/VItemGroup/VItemGroup.js +5 -0
- package/lib/components/VItemGroup/VItemGroup.js.map +1 -1
- package/lib/components/VTabs/VTabs.js +5 -0
- package/lib/components/VTabs/VTabs.js.map +1 -1
- package/lib/components/VTabs/VTabsBar.js +3 -0
- package/lib/components/VTabs/VTabsBar.js.map +1 -1
- package/lib/framework.js +1 -1
- package/package.json +1 -1
- package/src/components/VItemGroup/VItemGroup.ts +5 -0
- package/src/components/VTabs/VTabs.ts +5 -0
- package/src/components/VTabs/VTabsBar.ts +4 -0
- package/src/components/VTabs/__tests__/VTabs.spec.ts +65 -0
|
@@ -37,6 +37,10 @@ var BaseItemGroup = (0, _mixins.default)(_comparable.default, _proxyable.default
|
|
|
37
37
|
type: String,
|
|
38
38
|
default: 'v-item--active'
|
|
39
39
|
},
|
|
40
|
+
allowDeselect: {
|
|
41
|
+
type: Boolean,
|
|
42
|
+
default: true
|
|
43
|
+
},
|
|
40
44
|
mandatory: Boolean,
|
|
41
45
|
max: {
|
|
42
46
|
type: [Number, String],
|
|
@@ -228,6 +232,7 @@ var BaseItemGroup = (0, _mixins.default)(_comparable.default, _proxyable.default
|
|
|
228
232
|
updateSingle: function updateSingle(value) {
|
|
229
233
|
var isSame = this.valueComparator(this.internalValue, value);
|
|
230
234
|
if (this.mandatory && isSame) return;
|
|
235
|
+
if (!this.allowDeselect && isSame) return;
|
|
231
236
|
this.internalValue = isSame ? undefined : value;
|
|
232
237
|
}
|
|
233
238
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/VItemGroup/VItemGroup.ts"],"names":[],"mappings":"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","sourcesContent":["import {h} from 'vue'\n// Styles\nimport './VItemGroup.sass'\n\n// Mixins\nimport Comparable from '../../mixins/comparable'\nimport Groupable from '../../mixins/groupable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { consoleWarn } from '../../util/console'\nimport { getSlot } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue/types'\nimport { defineComponent } from 'vue'\n\nexport type GroupableInstance = InstanceType<typeof Groupable> & {\n id?: string\n to?: any\n value?: any\n }\n\nexport const BaseItemGroup = mixins(\n Comparable,\n Proxyable,\n Themeable\n).extend({\n name: 'base-item-group',\n\n emits: ['update:modelValue'],\n\n props: {\n activeClass: {\n type: String,\n default: 'v-item--active',\n },\n mandatory: Boolean,\n max: {\n type: [Number, String],\n default: null,\n },\n multiple: Boolean,\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n data () {\n return {\n // As long as a value is defined, show it\n // Otherwise, check if multiple\n // to determine which default to provide\n internalLazyValue: this.modelValue !== undefined\n ? this.modelValue\n : this.multiple ? [] : undefined,\n items: [] as GroupableInstance[],\n }\n },\n\n computed: {\n classes (): Record<string, boolean> {\n return {\n 'v-item-group': true,\n ...this.themeClasses,\n }\n },\n selectedIndex (): number {\n return (this.selectedItem && this.items.indexOf(this.selectedItem)) || -1\n },\n selectedItem (): GroupableInstance | undefined {\n if (this.multiple) return undefined\n\n return this.selectedItems[0]\n },\n selectedItems (): GroupableInstance[] {\n return this.items.filter((item, index) => {\n return this.toggleMethod(this.getValue(item, index))\n })\n },\n selectedValues (): any[] {\n if (this.internalValue == null) return []\n\n return Array.isArray(this.internalValue)\n ? this.internalValue\n : [this.internalValue]\n },\n toggleMethod (): (v: any) => boolean {\n if (!this.multiple) {\n return (v: any) => this.valueComparator(this.internalValue, v)\n }\n\n const internalValue = this.internalValue\n if (Array.isArray(internalValue)) {\n return (v: any) => internalValue.some(intern => this.valueComparator(intern, v))\n }\n\n return () => false\n },\n },\n\n watch: {\n internalValue: 'updateItemsState',\n items: 'updateItemsState'\n },\n\n created () {\n if (this.multiple && !Array.isArray(this.internalValue)) {\n consoleWarn('Model must be bound to an array if the multiple property is true.', this)\n }\n },\n\n methods: {\n\n genData (): object {\n return {\n class: this.classes,\n }\n },\n getValue (item: GroupableInstance, i: number): unknown {\n return item.value === undefined\n ? i\n : item.value\n },\n onClick (item: GroupableInstance) {\n this.updateInternalValue(\n this.getValue(item, this.items.indexOf(item))\n )\n },\n register (item: GroupableInstance) {\n const index = this.items.push(item) - 1\n\n // TODO!!!\n item.$on('change', () => this.onClick(item))\n\n // If no value provided and mandatory,\n // assign first registered item\n if (this.mandatory && !this.selectedValues.length) {\n this.updateMandatory()\n }\n\n this.updateItem(item, index)\n },\n unregister (item: GroupableInstance) {\n if (this._isDestroyed) return\n\n const index = this.items.indexOf(item)\n const value = this.getValue(item, index)\n\n this.items.splice(index, 1)\n\n const valueIndex = this.selectedValues.indexOf(value)\n\n // Items is not selected, do nothing\n if (valueIndex < 0) return\n\n // If not mandatory, use regular update process\n if (!this.mandatory) {\n return this.updateInternalValue(value)\n }\n\n // Remove the value\n if (this.multiple && Array.isArray(this.internalValue)) {\n this.internalValue = this.internalValue.filter(v => v !== value)\n } else {\n this.internalValue = undefined\n }\n\n // If mandatory and we have no selection\n // add the last item as value\n /* istanbul ignore else */\n if (!this.selectedItems.length) {\n this.updateMandatory(true)\n }\n },\n updateItem (item: GroupableInstance, index: number) {\n const value = this.getValue(item, index)\n\n item.isActive = this.toggleMethod(value)\n },\n // https://github.com/vuetifyjs/vuetify/issues/5352\n updateItemsState () {\n this.$nextTick(() => {\n if (this.mandatory &&\n !this.selectedItems.length\n ) {\n return this.updateMandatory()\n }\n\n // TODO: Make this smarter so it\n // doesn't have to iterate every\n // child in an update\n this.items.forEach(this.updateItem)\n })\n },\n updateInternalValue (value: any) {\n this.multiple\n ? this.updateMultiple(value)\n : this.updateSingle(value)\n },\n updateMandatory (last?: boolean) {\n if (!this.items.length) return\n\n const items = this.items.slice()\n\n if (last) items.reverse()\n\n const item = items.find(item => !item.disabled)\n\n // If no tabs are available\n // aborts mandatory value\n if (!item) return\n\n const index = this.items.indexOf(item)\n\n this.updateInternalValue(\n this.getValue(item, index)\n )\n },\n updateMultiple (value: any) {\n const defaultValue = Array.isArray(this.internalValue)\n ? this.internalValue\n : []\n const internalValue = defaultValue.slice()\n const index = internalValue.findIndex(val => this.valueComparator(val, value))\n\n if (\n this.mandatory &&\n // Item already exists\n index > -1 &&\n // value would be reduced below min\n internalValue.length - 1 < 1\n ) return\n\n if (\n // Max is set\n this.max != null &&\n // Item doesn't exist\n index < 0 &&\n // value would be increased above max\n internalValue.length + 1 > this.max\n ) return\n\n index > -1\n ? internalValue.splice(index, 1)\n : internalValue.push(value)\n\n this.internalValue = internalValue\n },\n updateSingle (value: any) {\n const isSame = this.valueComparator(this.internalValue, value)\n\n if (this.mandatory && isSame) return\n\n this.internalValue = isSame ? undefined : value\n },\n },\n\n render (): VNode {\n const data = this.genData()\n return h(this.tag, {\n class: data.class,\n ...data.attrs,\n }, getSlot(this))\n },\n})\n\nexport default defineComponent({\n name: 'v-item-group',\n extends: BaseItemGroup,\n\n provide (): object {\n return {\n itemGroup: this,\n }\n },\n})\n"],"sourceRoot":"","file":"VItemGroup.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VItemGroup/VItemGroup.ts"],"names":[],"mappings":"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","sourcesContent":["import {h} from 'vue'\n// Styles\nimport './VItemGroup.sass'\n\n// Mixins\nimport Comparable from '../../mixins/comparable'\nimport Groupable from '../../mixins/groupable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { consoleWarn } from '../../util/console'\nimport { getSlot } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue/types'\nimport { defineComponent } from 'vue'\n\nexport type GroupableInstance = InstanceType<typeof Groupable> & {\n id?: string\n to?: any\n value?: any\n }\n\nexport const BaseItemGroup = mixins(\n Comparable,\n Proxyable,\n Themeable\n).extend({\n name: 'base-item-group',\n\n emits: ['update:modelValue'],\n\n props: {\n activeClass: {\n type: String,\n default: 'v-item--active',\n },\n allowDeselect: {\n type: Boolean,\n default: true,\n },\n mandatory: Boolean,\n max: {\n type: [Number, String],\n default: null,\n },\n multiple: Boolean,\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n data () {\n return {\n // As long as a value is defined, show it\n // Otherwise, check if multiple\n // to determine which default to provide\n internalLazyValue: this.modelValue !== undefined\n ? this.modelValue\n : this.multiple ? [] : undefined,\n items: [] as GroupableInstance[],\n }\n },\n\n computed: {\n classes (): Record<string, boolean> {\n return {\n 'v-item-group': true,\n ...this.themeClasses,\n }\n },\n selectedIndex (): number {\n return (this.selectedItem && this.items.indexOf(this.selectedItem)) || -1\n },\n selectedItem (): GroupableInstance | undefined {\n if (this.multiple) return undefined\n\n return this.selectedItems[0]\n },\n selectedItems (): GroupableInstance[] {\n return this.items.filter((item, index) => {\n return this.toggleMethod(this.getValue(item, index))\n })\n },\n selectedValues (): any[] {\n if (this.internalValue == null) return []\n\n return Array.isArray(this.internalValue)\n ? this.internalValue\n : [this.internalValue]\n },\n toggleMethod (): (v: any) => boolean {\n if (!this.multiple) {\n return (v: any) => this.valueComparator(this.internalValue, v)\n }\n\n const internalValue = this.internalValue\n if (Array.isArray(internalValue)) {\n return (v: any) => internalValue.some(intern => this.valueComparator(intern, v))\n }\n\n return () => false\n },\n },\n\n watch: {\n internalValue: 'updateItemsState',\n items: 'updateItemsState'\n },\n\n created () {\n if (this.multiple && !Array.isArray(this.internalValue)) {\n consoleWarn('Model must be bound to an array if the multiple property is true.', this)\n }\n },\n\n methods: {\n\n genData (): object {\n return {\n class: this.classes,\n }\n },\n getValue (item: GroupableInstance, i: number): unknown {\n return item.value === undefined\n ? i\n : item.value\n },\n onClick (item: GroupableInstance) {\n this.updateInternalValue(\n this.getValue(item, this.items.indexOf(item))\n )\n },\n register (item: GroupableInstance) {\n const index = this.items.push(item) - 1\n\n // TODO!!!\n item.$on('change', () => this.onClick(item))\n\n // If no value provided and mandatory,\n // assign first registered item\n if (this.mandatory && !this.selectedValues.length) {\n this.updateMandatory()\n }\n\n this.updateItem(item, index)\n },\n unregister (item: GroupableInstance) {\n if (this._isDestroyed) return\n\n const index = this.items.indexOf(item)\n const value = this.getValue(item, index)\n\n this.items.splice(index, 1)\n\n const valueIndex = this.selectedValues.indexOf(value)\n\n // Items is not selected, do nothing\n if (valueIndex < 0) return\n\n // If not mandatory, use regular update process\n if (!this.mandatory) {\n return this.updateInternalValue(value)\n }\n\n // Remove the value\n if (this.multiple && Array.isArray(this.internalValue)) {\n this.internalValue = this.internalValue.filter(v => v !== value)\n } else {\n this.internalValue = undefined\n }\n\n // If mandatory and we have no selection\n // add the last item as value\n /* istanbul ignore else */\n if (!this.selectedItems.length) {\n this.updateMandatory(true)\n }\n },\n updateItem (item: GroupableInstance, index: number) {\n const value = this.getValue(item, index)\n\n item.isActive = this.toggleMethod(value)\n },\n // https://github.com/vuetifyjs/vuetify/issues/5352\n updateItemsState () {\n this.$nextTick(() => {\n if (this.mandatory &&\n !this.selectedItems.length\n ) {\n return this.updateMandatory()\n }\n\n // TODO: Make this smarter so it\n // doesn't have to iterate every\n // child in an update\n this.items.forEach(this.updateItem)\n })\n },\n updateInternalValue (value: any) {\n this.multiple\n ? this.updateMultiple(value)\n : this.updateSingle(value)\n },\n updateMandatory (last?: boolean) {\n if (!this.items.length) return\n\n const items = this.items.slice()\n\n if (last) items.reverse()\n\n const item = items.find(item => !item.disabled)\n\n // If no tabs are available\n // aborts mandatory value\n if (!item) return\n\n const index = this.items.indexOf(item)\n\n this.updateInternalValue(\n this.getValue(item, index)\n )\n },\n updateMultiple (value: any) {\n const defaultValue = Array.isArray(this.internalValue)\n ? this.internalValue\n : []\n const internalValue = defaultValue.slice()\n const index = internalValue.findIndex(val => this.valueComparator(val, value))\n\n if (\n this.mandatory &&\n // Item already exists\n index > -1 &&\n // value would be reduced below min\n internalValue.length - 1 < 1\n ) return\n\n if (\n // Max is set\n this.max != null &&\n // Item doesn't exist\n index < 0 &&\n // value would be increased above max\n internalValue.length + 1 > this.max\n ) return\n\n index > -1\n ? internalValue.splice(index, 1)\n : internalValue.push(value)\n\n this.internalValue = internalValue\n },\n updateSingle (value: any) {\n const isSame = this.valueComparator(this.internalValue, value)\n\n if (this.mandatory && isSame) return\n if (!this.allowDeselect && isSame) return\n\n this.internalValue = isSame ? undefined : value\n },\n },\n\n render (): VNode {\n const data = this.genData()\n return h(this.tag, {\n class: data.class,\n ...data.attrs,\n }, getSlot(this))\n },\n})\n\nexport default defineComponent({\n name: 'v-item-group',\n extends: BaseItemGroup,\n\n provide (): object {\n return {\n itemGroup: this,\n }\n },\n})\n"],"sourceRoot":"","file":"VItemGroup.js"}
|
|
@@ -59,6 +59,10 @@ var _default = baseMixins.extend({
|
|
|
59
59
|
default: ''
|
|
60
60
|
},
|
|
61
61
|
alignWithTitle: Boolean,
|
|
62
|
+
allowDeselect: {
|
|
63
|
+
type: Boolean,
|
|
64
|
+
default: false
|
|
65
|
+
},
|
|
62
66
|
backgroundColor: String,
|
|
63
67
|
centerActive: Boolean,
|
|
64
68
|
centered: Boolean,
|
|
@@ -225,6 +229,7 @@ var _default = baseMixins.extend({
|
|
|
225
229
|
height: (0, _helpers.convertToUnit)(this.height)
|
|
226
230
|
},
|
|
227
231
|
activeClass: this.activeClass,
|
|
232
|
+
allowDeselect: this.allowDeselect,
|
|
228
233
|
centerActive: this.centerActive,
|
|
229
234
|
dark: this.dark,
|
|
230
235
|
light: this.light,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/VTabs/VTabs.ts"],"names":[],"mappings":"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","sourcesContent":["import { h, withDirectives } from 'vue'\n// Styles\nimport './VTabs.sass'\n\n// Components\nimport VTabsBar from './VTabsBar'\nimport VTabsItems from './VTabsItems'\nimport VTabsSlider from './VTabsSlider'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Utilities\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { ExtractVue } from './../../util/mixins'\nimport mixins from '../../util/mixins'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue/types'\n\nconst baseMixins = mixins(\n Colorable,\n Proxyable,\n Themeable\n)\n\ninterface options extends ExtractVue<typeof baseMixins> {\n $refs: {\n items: InstanceType<typeof VTabsBar>\n }\n}\n\nexport default baseMixins.extend({\n name: 'v-tabs',\n\n props: {\n activeClass: {\n type: String,\n default: '',\n },\n alignWithTitle: Boolean,\n backgroundColor: String,\n centerActive: Boolean,\n centered: Boolean,\n fixedTabs: Boolean,\n grow: Boolean,\n height: {\n type: [Number, String],\n default: undefined,\n },\n hideSlider: Boolean,\n iconsAndText: Boolean,\n mobileBreakpoint: [String, Number],\n nextIcon: {\n type: String,\n default: '$next',\n },\n optional: Boolean,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n right: Boolean,\n showArrows: [Boolean, String],\n sliderColor: String,\n sliderSize: {\n type: [Number, String],\n default: 2,\n },\n vertical: Boolean,\n },\n\n data () {\n return {\n resizeTimeout: 0,\n slider: {\n height: null as null | number,\n left: null as null | number,\n right: null as null | number,\n top: null as null | number,\n width: null as null | number,\n },\n transitionTime: 300,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-tabs--align-with-title': this.alignWithTitle,\n 'v-tabs--centered': this.centered,\n 'v-tabs--fixed-tabs': this.fixedTabs,\n 'v-tabs--grow': this.grow,\n 'v-tabs--icons-and-text': this.iconsAndText,\n 'v-tabs--right': this.right,\n 'v-tabs--vertical': this.vertical,\n ...this.themeClasses,\n }\n },\n isReversed (): boolean {\n return this.$vuetify.rtl && this.vertical\n },\n sliderStyles (): object {\n return {\n height: convertToUnit(this.slider.height),\n left: this.isReversed ? undefined : convertToUnit(this.slider.left),\n right: this.isReversed ? convertToUnit(this.slider.right) : undefined,\n top: this.vertical ? convertToUnit(this.slider.top) : undefined,\n transition: this.slider.left != null ? null : 'none',\n width: convertToUnit(this.slider.width),\n }\n },\n computedColor (): string {\n if (this.color) return this.color\n else if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n },\n\n created () {\n const breakingProps = [\n ['value', 'modelValue'],\n ['onChange', 'onUpdate:modelValue'],\n ['onInput', 'onUpdate:modelValue'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n watch: {\n alignWithTitle: 'callSlider',\n centered: 'callSlider',\n centerActive: 'callSlider',\n fixedTabs: 'callSlider',\n grow: 'callSlider',\n iconsAndText: 'callSlider',\n right: 'callSlider',\n showArrows: 'callSlider',\n vertical: 'callSlider',\n '$vuetify.application.left': 'onResize',\n '$vuetify.application.right': 'onResize',\n '$vuetify.rtl': 'onResize',\n modelValue (val: any) {\n this.validateModelValue(val)\n },\n },\n\n mounted () {\n this.validateModelValue(this.modelValue)\n\n if (typeof ResizeObserver !== 'undefined') {\n const obs = new ResizeObserver(() => {\n this.onResize()\n })\n obs.observe(this.$el)\n this.$on('hook:destroyed', () => {\n obs.disconnect()\n })\n }\n\n this.$nextTick(() => {\n window.setTimeout(this.callSlider, 30)\n })\n },\n\n methods: {\n validateModelValue (val: any) {\n if (typeof val === 'number' && val < 0) {\n this.internalValue = 0\n }\n },\n callSlider () {\n if (\n this.hideSlider ||\n !this.$refs.items ||\n !this.$refs.items.selectedItems.length\n ) {\n this.slider.width = 0\n return false\n }\n\n this.$nextTick(() => {\n // Give screen time to paint\n const activeTab = this.$refs.items.selectedItems[0]\n /* istanbul ignore if */\n if (!activeTab || !activeTab.$el) {\n this.slider.width = 0\n this.slider.left = 0\n return\n }\n const el = activeTab.$el as HTMLElement\n\n this.slider = {\n height: !this.vertical ? Number(this.sliderSize) : el.scrollHeight,\n left: this.vertical ? 0 : el.offsetLeft,\n right: this.vertical ? 0 : el.offsetLeft + el.offsetWidth,\n top: el.offsetTop,\n width: this.vertical ? Number(this.sliderSize) : el.scrollWidth,\n }\n })\n\n return true\n },\n genBar (items: VNode[], slider: VNode | null) {\n const data = {\n style: {\n height: convertToUnit(this.height),\n },\n activeClass: this.activeClass,\n centerActive: this.centerActive,\n dark: this.dark,\n light: this.light,\n mandatory: !this.optional,\n mobileBreakpoint: this.mobileBreakpoint,\n nextIcon: this.nextIcon,\n prevIcon: this.prevIcon,\n showArrows: this.showArrows,\n modelValue: this.internalValue,\n 'onCall:slider': this.callSlider,\n 'onUpdate:modelValue': (val: any) => {\n this.internalValue = val\n },\n ref: 'items',\n }\n\n this.setTextColor(this.computedColor, data)\n this.setBackgroundColor(this.backgroundColor, data)\n\n return h(VTabsBar, data, () => [\n this.genSlider(slider),\n items,\n ])\n },\n genItems (items: VNode | null, item: VNode[]) {\n // If user provides items\n // opt to use theirs\n if (items) return items\n\n // If no tabs are provided\n // render nothing\n if (!item.length) return null\n\n return h(VTabsItems, {\n modelValue: this.internalValue,\n 'onUpdate:modelValue': (val: any) => {\n this.internalValue = val\n },\n }, () => item)\n },\n genSlider (slider: VNode | null) {\n if (this.hideSlider) return null\n\n if (!slider) {\n slider = h(VTabsSlider, {\n color: this.sliderColor,\n })\n }\n\n return h('div', {\n class: 'v-tabs-slider-wrapper',\n style: this.sliderStyles,\n }, [slider])\n },\n onResize () {\n if (this._isDestroyed) return\n\n clearTimeout(this.resizeTimeout)\n this.resizeTimeout = window.setTimeout(this.callSlider, 0)\n },\n parseNodes () {\n let items = null\n let slider = null\n const item = []\n const tab = []\n const slot = getSlot(this) || []\n const length = slot.length\n\n for (let i = 0; i < length; i++) {\n const vnode = slot[i]\n\n if (vnode.type) {\n switch (vnode.type.name) {\n case 'v-tabs-slider': slider = vnode\n break\n case 'v-tabs-items': items = vnode\n break\n case 'v-tab-item': item.push(vnode)\n break\n // case 'v-tab' - intentionally omitted\n default: tab.push(vnode)\n }\n } else {\n tab.push(vnode)\n }\n }\n\n /**\n * tab: array of `v-tab`\n * slider: single `v-tabs-slider`\n * items: single `v-tabs-items`\n * item: array of `v-tab-item`\n */\n return { tab, slider, items, item }\n },\n },\n\n render (): VNode {\n const { tab, slider, items, item } = this.parseNodes()\n\n return withDirectives(h('div', {\n class: ['v-tabs', this.classes],\n }, [\n this.genBar(tab, slider),\n this.genItems(items, item),\n ]), [\n [\n Resize,\n this.onResize,\n '',\n { quiet: true },\n ],\n ])\n },\n})\n"],"sourceRoot":"","file":"VTabs.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VTabs/VTabs.ts"],"names":[],"mappings":"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","sourcesContent":["import { h, withDirectives } from 'vue'\n// Styles\nimport './VTabs.sass'\n\n// Components\nimport VTabsBar from './VTabsBar'\nimport VTabsItems from './VTabsItems'\nimport VTabsSlider from './VTabsSlider'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Utilities\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { ExtractVue } from './../../util/mixins'\nimport mixins from '../../util/mixins'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue/types'\n\nconst baseMixins = mixins(\n Colorable,\n Proxyable,\n Themeable\n)\n\ninterface options extends ExtractVue<typeof baseMixins> {\n $refs: {\n items: InstanceType<typeof VTabsBar>\n }\n}\n\nexport default baseMixins.extend({\n name: 'v-tabs',\n\n props: {\n activeClass: {\n type: String,\n default: '',\n },\n alignWithTitle: Boolean,\n allowDeselect: {\n type: Boolean,\n default: false,\n },\n backgroundColor: String,\n centerActive: Boolean,\n centered: Boolean,\n fixedTabs: Boolean,\n grow: Boolean,\n height: {\n type: [Number, String],\n default: undefined,\n },\n hideSlider: Boolean,\n iconsAndText: Boolean,\n mobileBreakpoint: [String, Number],\n nextIcon: {\n type: String,\n default: '$next',\n },\n optional: Boolean,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n right: Boolean,\n showArrows: [Boolean, String],\n sliderColor: String,\n sliderSize: {\n type: [Number, String],\n default: 2,\n },\n vertical: Boolean,\n },\n\n data () {\n return {\n resizeTimeout: 0,\n slider: {\n height: null as null | number,\n left: null as null | number,\n right: null as null | number,\n top: null as null | number,\n width: null as null | number,\n },\n transitionTime: 300,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-tabs--align-with-title': this.alignWithTitle,\n 'v-tabs--centered': this.centered,\n 'v-tabs--fixed-tabs': this.fixedTabs,\n 'v-tabs--grow': this.grow,\n 'v-tabs--icons-and-text': this.iconsAndText,\n 'v-tabs--right': this.right,\n 'v-tabs--vertical': this.vertical,\n ...this.themeClasses,\n }\n },\n isReversed (): boolean {\n return this.$vuetify.rtl && this.vertical\n },\n sliderStyles (): object {\n return {\n height: convertToUnit(this.slider.height),\n left: this.isReversed ? undefined : convertToUnit(this.slider.left),\n right: this.isReversed ? convertToUnit(this.slider.right) : undefined,\n top: this.vertical ? convertToUnit(this.slider.top) : undefined,\n transition: this.slider.left != null ? null : 'none',\n width: convertToUnit(this.slider.width),\n }\n },\n computedColor (): string {\n if (this.color) return this.color\n else if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n },\n\n created () {\n const breakingProps = [\n ['value', 'modelValue'],\n ['onChange', 'onUpdate:modelValue'],\n ['onInput', 'onUpdate:modelValue'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n watch: {\n alignWithTitle: 'callSlider',\n centered: 'callSlider',\n centerActive: 'callSlider',\n fixedTabs: 'callSlider',\n grow: 'callSlider',\n iconsAndText: 'callSlider',\n right: 'callSlider',\n showArrows: 'callSlider',\n vertical: 'callSlider',\n '$vuetify.application.left': 'onResize',\n '$vuetify.application.right': 'onResize',\n '$vuetify.rtl': 'onResize',\n modelValue (val: any) {\n this.validateModelValue(val)\n },\n },\n\n mounted () {\n this.validateModelValue(this.modelValue)\n\n if (typeof ResizeObserver !== 'undefined') {\n const obs = new ResizeObserver(() => {\n this.onResize()\n })\n obs.observe(this.$el)\n this.$on('hook:destroyed', () => {\n obs.disconnect()\n })\n }\n\n this.$nextTick(() => {\n window.setTimeout(this.callSlider, 30)\n })\n },\n\n methods: {\n validateModelValue (val: any) {\n if (typeof val === 'number' && val < 0) {\n this.internalValue = 0\n }\n },\n callSlider () {\n if (\n this.hideSlider ||\n !this.$refs.items ||\n !this.$refs.items.selectedItems.length\n ) {\n this.slider.width = 0\n return false\n }\n\n this.$nextTick(() => {\n // Give screen time to paint\n const activeTab = this.$refs.items.selectedItems[0]\n /* istanbul ignore if */\n if (!activeTab || !activeTab.$el) {\n this.slider.width = 0\n this.slider.left = 0\n return\n }\n const el = activeTab.$el as HTMLElement\n\n this.slider = {\n height: !this.vertical ? Number(this.sliderSize) : el.scrollHeight,\n left: this.vertical ? 0 : el.offsetLeft,\n right: this.vertical ? 0 : el.offsetLeft + el.offsetWidth,\n top: el.offsetTop,\n width: this.vertical ? Number(this.sliderSize) : el.scrollWidth,\n }\n })\n\n return true\n },\n genBar (items: VNode[], slider: VNode | null) {\n const data = {\n style: {\n height: convertToUnit(this.height),\n },\n activeClass: this.activeClass,\n allowDeselect: this.allowDeselect,\n centerActive: this.centerActive,\n dark: this.dark,\n light: this.light,\n mandatory: !this.optional,\n mobileBreakpoint: this.mobileBreakpoint,\n nextIcon: this.nextIcon,\n prevIcon: this.prevIcon,\n showArrows: this.showArrows,\n modelValue: this.internalValue,\n 'onCall:slider': this.callSlider,\n 'onUpdate:modelValue': (val: any) => {\n this.internalValue = val\n },\n ref: 'items',\n }\n\n this.setTextColor(this.computedColor, data)\n this.setBackgroundColor(this.backgroundColor, data)\n\n return h(VTabsBar, data, () => [\n this.genSlider(slider),\n items,\n ])\n },\n genItems (items: VNode | null, item: VNode[]) {\n // If user provides items\n // opt to use theirs\n if (items) return items\n\n // If no tabs are provided\n // render nothing\n if (!item.length) return null\n\n return h(VTabsItems, {\n modelValue: this.internalValue,\n 'onUpdate:modelValue': (val: any) => {\n this.internalValue = val\n },\n }, () => item)\n },\n genSlider (slider: VNode | null) {\n if (this.hideSlider) return null\n\n if (!slider) {\n slider = h(VTabsSlider, {\n color: this.sliderColor,\n })\n }\n\n return h('div', {\n class: 'v-tabs-slider-wrapper',\n style: this.sliderStyles,\n }, [slider])\n },\n onResize () {\n if (this._isDestroyed) return\n\n clearTimeout(this.resizeTimeout)\n this.resizeTimeout = window.setTimeout(this.callSlider, 0)\n },\n parseNodes () {\n let items = null\n let slider = null\n const item = []\n const tab = []\n const slot = getSlot(this) || []\n const length = slot.length\n\n for (let i = 0; i < length; i++) {\n const vnode = slot[i]\n\n if (vnode.type) {\n switch (vnode.type.name) {\n case 'v-tabs-slider': slider = vnode\n break\n case 'v-tabs-items': items = vnode\n break\n case 'v-tab-item': item.push(vnode)\n break\n // case 'v-tab' - intentionally omitted\n default: tab.push(vnode)\n }\n } else {\n tab.push(vnode)\n }\n }\n\n /**\n * tab: array of `v-tab`\n * slider: single `v-tabs-slider`\n * items: single `v-tabs-items`\n * item: array of `v-tab-item`\n */\n return { tab, slider, items, item }\n },\n },\n\n render (): VNode {\n const { tab, slider, items, item } = this.parseNodes()\n\n return withDirectives(h('div', {\n class: ['v-tabs', this.classes],\n }, [\n this.genBar(tab, slider),\n this.genItems(items, item),\n ]), [\n [\n Resize,\n this.onResize,\n '',\n { quiet: true },\n ],\n ])\n },\n})\n"],"sourceRoot":"","file":"VTabs.js"}
|
|
@@ -38,6 +38,9 @@ var _default = (0, _mixins.default)(_VSlideGroup.BaseSlideGroup, _ssrBootable.de
|
|
|
38
38
|
tabsBar: this
|
|
39
39
|
};
|
|
40
40
|
},
|
|
41
|
+
props: {
|
|
42
|
+
allowDeselect: Boolean
|
|
43
|
+
},
|
|
41
44
|
computed: {
|
|
42
45
|
classes: function classes() {
|
|
43
46
|
return _objectSpread(_objectSpread({}, _VSlideGroup.BaseSlideGroup.computed.classes.call(this)), {}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/VTabs/VTabsBar.ts"],"names":[],"mappings":";;;;;;;AAAA;;AAEA;;AAMA;;AACA;;AAGA;;;;;;;;;;;;;;;;eAOe,qBACb,2BADa,EAEb,oBAFa,EAGb;AACA;AAJa,EAKb,MALa,CAKN;AACP,EAAA,IAAI,EAAE,YADC;AAGP,EAAA,OAHO,qBAGA;AACL,WAAO;AACL,MAAA,OAAO,EAAE;AADJ,KAAP;AAGD,GAPM;AASP,EAAA,QAAQ,EAAE;AACR,IAAA,OADQ,qBACD;AACL,6CACK,4BAAe,QAAf,CAAwB,OAAxB,CAAgC,IAAhC,CAAqC,IAArC,CADL;AAEE,sBAAc,IAFhB;AAGE,iCAAyB,KAAK,QAHhC;AAIE;AACA,mCAA2B,KAAK;AALlC,SAMK,KAAK,YANV;AAQD;AAVO,
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VTabs/VTabsBar.ts"],"names":[],"mappings":";;;;;;;AAAA;;AAEA;;AAMA;;AACA;;AAGA;;;;;;;;;;;;;;;;eAOe,qBACb,2BADa,EAEb,oBAFa,EAGb;AACA;AAJa,EAKb,MALa,CAKN;AACP,EAAA,IAAI,EAAE,YADC;AAGP,EAAA,OAHO,qBAGA;AACL,WAAO;AACL,MAAA,OAAO,EAAE;AADJ,KAAP;AAGD,GAPM;AASP,EAAA,KAAK,EAAE;AACL,IAAA,aAAa,EAAE;AADV,GATA;AAaP,EAAA,QAAQ,EAAE;AACR,IAAA,OADQ,qBACD;AACL,6CACK,4BAAe,QAAf,CAAwB,OAAxB,CAAgC,IAAhC,CAAqC,IAArC,CADL;AAEE,sBAAc,IAFhB;AAGE,iCAAyB,KAAK,QAHhC;AAIE;AACA,mCAA2B,KAAK;AALlC,SAMK,KAAK,YANV;AAQD;AAVO,GAbH;AA0BP,EAAA,KAAK,EAAE;AACL,IAAA,KAAK,EAAE,YADF;AAEL,IAAA,aAAa,EAAE,YAFV;AAGL,IAAA,MAAM,EAAE;AAHH,GA1BA;AAgCP,EAAA,OAAO,EAAE;AACP,IAAA,UADO,wBACG;AACR,UAAI,CAAC,KAAK,QAAV,EAAoB;AAEpB,WAAK,KAAL,CAAW,aAAX;AACD,KALM;AAMP,IAAA,UANO,wBAMG;AACR,UAAM,MAAM,GAAG,4BAAe,OAAf,CAAuB,UAAvB,CAAkC,IAAlC,CAAuC,IAAvC,CAAf;;AAEA,MAAA,MAAM,CAAC,KAAP,CAAa,KAAb,IAAsB,sBAAtB;AAEA,aAAO,MAAP;AACD,KAZM;AAaP,IAAA,aAbO,yBAcL,GAdK,EAeL,MAfK,EAe0B;AAE/B;AACA,UAAI,KAAK,SAAT,EAAoB;AAEpB,UAAM,KAAK,GAAI,KAAK,KAApB;AACA,UAAM,OAAO,GAAG,GAAG,CAAC,IAApB;AACA,UAAM,OAAO,GAAG,MAAM,CAAC,IAAvB;AAEA,UAAI,MAAM,GAAG,KAAb;AACA,UAAI,MAAM,GAAG,KAAb;;AAV+B,iDAYZ,KAZY;AAAA;;AAAA;AAY/B,4DAA0B;AAAA,cAAf,IAAe;AACxB,cAAI,IAAI,CAAC,EAAL,KAAY,OAAhB,EAAyB,MAAM,GAAG,IAAT,CAAzB,KACK,IAAI,IAAI,CAAC,EAAL,KAAY,OAAhB,EAAyB,MAAM,GAAG,IAAT;AAE9B,cAAI,MAAM,IAAI,MAAd,EAAsB;AACvB,SAjB8B,CAmB/B;AACA;AACA;;AArB+B;AAAA;AAAA;AAAA;AAAA;;AAsB/B,UAAI,CAAC,MAAD,IAAW,MAAf,EAAuB,KAAK,aAAL,GAAqB,SAArB;AACxB;AAtCM,GAhCF;AAyEP,EAAA,MAzEO,oBAyED;AACJ,QAAM,MAAM,GAAG,4BAAe,MAAf,CAAsB,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,CAAf;;AAEA,IAAA,MAAM,CAAC,IAAP,GAAc,SAAd;AAEA,WAAO,MAAP;AACD;AA/EM,CALM,C","sourcesContent":["import { h, VNode } from 'vue'\n// Extensions\nimport { BaseSlideGroup } from '../VSlideGroup/VSlideGroup'\n\n// Components\nimport VTab from './VTab'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\nimport SSRBootable from '../../mixins/ssr-bootable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n// Types\nimport { RouteLocationNormalized } from 'vue-router'\n\ntype VTabInstance = InstanceType<typeof VTab>\n\nexport default mixins(\n BaseSlideGroup,\n SSRBootable,\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-tabs-bar',\n\n provide () {\n return {\n tabsBar: this,\n }\n },\n\n props: {\n allowDeselect: Boolean,\n },\n\n computed: {\n classes () {\n return {\n ...BaseSlideGroup.computed.classes.call(this),\n 'v-tabs-bar': true,\n 'v-tabs-bar--is-mobile': this.isMobile,\n // TODO: Remove this and move to v-slide-group\n 'v-tabs-bar--show-arrows': this.showArrows,\n ...this.themeClasses,\n }\n },\n },\n\n watch: {\n items: 'callSlider',\n internalValue: 'callSlider',\n $route: 'onRouteChange',\n },\n\n methods: {\n callSlider () {\n if (!this.isBooted) return\n\n this.$emit('call:slider')\n },\n genContent () {\n const render = BaseSlideGroup.methods.genContent.call(this)\n\n render.props.class += ' v-tabs-bar__content'\n\n return render\n },\n onRouteChange (\n val: RouteLocationNormalized,\n oldVal: RouteLocationNormalized\n ) {\n /* istanbul ignore next */\n if (this.mandatory) return\n\n const items = (this.items as unknown) as VTabInstance[]\n const newPath = val.path\n const oldPath = oldVal.path\n\n let hasNew = false\n let hasOld = false\n\n for (const item of items) {\n if (item.to === oldPath) hasOld = true\n else if (item.to === newPath) hasNew = true\n\n if (hasNew && hasOld) break\n }\n\n // If we have an old item and not a new one\n // it's assumed that the user navigated to\n // a path that is not present in the items\n if (!hasNew && hasOld) this.internalValue = undefined\n },\n },\n\n render (): VNode {\n const render = BaseSlideGroup.render.call(this, h)\n\n render.role = 'tablist'\n\n return render\n },\n})\n"],"sourceRoot":"","file":"VTabsBar.js"}
|
package/es5/framework.js
CHANGED
|
@@ -79,7 +79,7 @@ var Vuetify = /*#__PURE__*/function () {
|
|
|
79
79
|
exports.default = Vuetify;
|
|
80
80
|
Vuetify.install = _install.install;
|
|
81
81
|
Vuetify.installed = false;
|
|
82
|
-
Vuetify.version = "2.7.2-
|
|
82
|
+
Vuetify.version = "2.7.2-alpha34";
|
|
83
83
|
Vuetify.config = {
|
|
84
84
|
silent: false
|
|
85
85
|
};
|
|
@@ -18,6 +18,10 @@ export const BaseItemGroup = mixins(Comparable, Proxyable, Themeable).extend({
|
|
|
18
18
|
type: String,
|
|
19
19
|
default: 'v-item--active'
|
|
20
20
|
},
|
|
21
|
+
allowDeselect: {
|
|
22
|
+
type: Boolean,
|
|
23
|
+
default: true
|
|
24
|
+
},
|
|
21
25
|
mandatory: Boolean,
|
|
22
26
|
max: {
|
|
23
27
|
type: [Number, String],
|
|
@@ -204,6 +208,7 @@ export const BaseItemGroup = mixins(Comparable, Proxyable, Themeable).extend({
|
|
|
204
208
|
updateSingle(value) {
|
|
205
209
|
const isSame = this.valueComparator(this.internalValue, value);
|
|
206
210
|
if (this.mandatory && isSame) return;
|
|
211
|
+
if (!this.allowDeselect && isSame) return;
|
|
207
212
|
this.internalValue = isSame ? undefined : value;
|
|
208
213
|
}
|
|
209
214
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/VItemGroup/VItemGroup.ts"],"names":[],"mappings":"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","sourcesContent":["import {h} from 'vue'\n// Styles\nimport './VItemGroup.sass'\n\n// Mixins\nimport Comparable from '../../mixins/comparable'\nimport Groupable from '../../mixins/groupable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { consoleWarn } from '../../util/console'\nimport { getSlot } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue/types'\nimport { defineComponent } from 'vue'\n\nexport type GroupableInstance = InstanceType<typeof Groupable> & {\n id?: string\n to?: any\n value?: any\n }\n\nexport const BaseItemGroup = mixins(\n Comparable,\n Proxyable,\n Themeable\n).extend({\n name: 'base-item-group',\n\n emits: ['update:modelValue'],\n\n props: {\n activeClass: {\n type: String,\n default: 'v-item--active',\n },\n mandatory: Boolean,\n max: {\n type: [Number, String],\n default: null,\n },\n multiple: Boolean,\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n data () {\n return {\n // As long as a value is defined, show it\n // Otherwise, check if multiple\n // to determine which default to provide\n internalLazyValue: this.modelValue !== undefined\n ? this.modelValue\n : this.multiple ? [] : undefined,\n items: [] as GroupableInstance[],\n }\n },\n\n computed: {\n classes (): Record<string, boolean> {\n return {\n 'v-item-group': true,\n ...this.themeClasses,\n }\n },\n selectedIndex (): number {\n return (this.selectedItem && this.items.indexOf(this.selectedItem)) || -1\n },\n selectedItem (): GroupableInstance | undefined {\n if (this.multiple) return undefined\n\n return this.selectedItems[0]\n },\n selectedItems (): GroupableInstance[] {\n return this.items.filter((item, index) => {\n return this.toggleMethod(this.getValue(item, index))\n })\n },\n selectedValues (): any[] {\n if (this.internalValue == null) return []\n\n return Array.isArray(this.internalValue)\n ? this.internalValue\n : [this.internalValue]\n },\n toggleMethod (): (v: any) => boolean {\n if (!this.multiple) {\n return (v: any) => this.valueComparator(this.internalValue, v)\n }\n\n const internalValue = this.internalValue\n if (Array.isArray(internalValue)) {\n return (v: any) => internalValue.some(intern => this.valueComparator(intern, v))\n }\n\n return () => false\n },\n },\n\n watch: {\n internalValue: 'updateItemsState',\n items: 'updateItemsState'\n },\n\n created () {\n if (this.multiple && !Array.isArray(this.internalValue)) {\n consoleWarn('Model must be bound to an array if the multiple property is true.', this)\n }\n },\n\n methods: {\n\n genData (): object {\n return {\n class: this.classes,\n }\n },\n getValue (item: GroupableInstance, i: number): unknown {\n return item.value === undefined\n ? i\n : item.value\n },\n onClick (item: GroupableInstance) {\n this.updateInternalValue(\n this.getValue(item, this.items.indexOf(item))\n )\n },\n register (item: GroupableInstance) {\n const index = this.items.push(item) - 1\n\n // TODO!!!\n item.$on('change', () => this.onClick(item))\n\n // If no value provided and mandatory,\n // assign first registered item\n if (this.mandatory && !this.selectedValues.length) {\n this.updateMandatory()\n }\n\n this.updateItem(item, index)\n },\n unregister (item: GroupableInstance) {\n if (this._isDestroyed) return\n\n const index = this.items.indexOf(item)\n const value = this.getValue(item, index)\n\n this.items.splice(index, 1)\n\n const valueIndex = this.selectedValues.indexOf(value)\n\n // Items is not selected, do nothing\n if (valueIndex < 0) return\n\n // If not mandatory, use regular update process\n if (!this.mandatory) {\n return this.updateInternalValue(value)\n }\n\n // Remove the value\n if (this.multiple && Array.isArray(this.internalValue)) {\n this.internalValue = this.internalValue.filter(v => v !== value)\n } else {\n this.internalValue = undefined\n }\n\n // If mandatory and we have no selection\n // add the last item as value\n /* istanbul ignore else */\n if (!this.selectedItems.length) {\n this.updateMandatory(true)\n }\n },\n updateItem (item: GroupableInstance, index: number) {\n const value = this.getValue(item, index)\n\n item.isActive = this.toggleMethod(value)\n },\n // https://github.com/vuetifyjs/vuetify/issues/5352\n updateItemsState () {\n this.$nextTick(() => {\n if (this.mandatory &&\n !this.selectedItems.length\n ) {\n return this.updateMandatory()\n }\n\n // TODO: Make this smarter so it\n // doesn't have to iterate every\n // child in an update\n this.items.forEach(this.updateItem)\n })\n },\n updateInternalValue (value: any) {\n this.multiple\n ? this.updateMultiple(value)\n : this.updateSingle(value)\n },\n updateMandatory (last?: boolean) {\n if (!this.items.length) return\n\n const items = this.items.slice()\n\n if (last) items.reverse()\n\n const item = items.find(item => !item.disabled)\n\n // If no tabs are available\n // aborts mandatory value\n if (!item) return\n\n const index = this.items.indexOf(item)\n\n this.updateInternalValue(\n this.getValue(item, index)\n )\n },\n updateMultiple (value: any) {\n const defaultValue = Array.isArray(this.internalValue)\n ? this.internalValue\n : []\n const internalValue = defaultValue.slice()\n const index = internalValue.findIndex(val => this.valueComparator(val, value))\n\n if (\n this.mandatory &&\n // Item already exists\n index > -1 &&\n // value would be reduced below min\n internalValue.length - 1 < 1\n ) return\n\n if (\n // Max is set\n this.max != null &&\n // Item doesn't exist\n index < 0 &&\n // value would be increased above max\n internalValue.length + 1 > this.max\n ) return\n\n index > -1\n ? internalValue.splice(index, 1)\n : internalValue.push(value)\n\n this.internalValue = internalValue\n },\n updateSingle (value: any) {\n const isSame = this.valueComparator(this.internalValue, value)\n\n if (this.mandatory && isSame) return\n\n this.internalValue = isSame ? undefined : value\n },\n },\n\n render (): VNode {\n const data = this.genData()\n return h(this.tag, {\n class: data.class,\n ...data.attrs,\n }, getSlot(this))\n },\n})\n\nexport default defineComponent({\n name: 'v-item-group',\n extends: BaseItemGroup,\n\n provide (): object {\n return {\n itemGroup: this,\n }\n },\n})\n"],"sourceRoot":"","file":"VItemGroup.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VItemGroup/VItemGroup.ts"],"names":[],"mappings":"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","sourcesContent":["import {h} from 'vue'\n// Styles\nimport './VItemGroup.sass'\n\n// Mixins\nimport Comparable from '../../mixins/comparable'\nimport Groupable from '../../mixins/groupable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { consoleWarn } from '../../util/console'\nimport { getSlot } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue/types'\nimport { defineComponent } from 'vue'\n\nexport type GroupableInstance = InstanceType<typeof Groupable> & {\n id?: string\n to?: any\n value?: any\n }\n\nexport const BaseItemGroup = mixins(\n Comparable,\n Proxyable,\n Themeable\n).extend({\n name: 'base-item-group',\n\n emits: ['update:modelValue'],\n\n props: {\n activeClass: {\n type: String,\n default: 'v-item--active',\n },\n allowDeselect: {\n type: Boolean,\n default: true,\n },\n mandatory: Boolean,\n max: {\n type: [Number, String],\n default: null,\n },\n multiple: Boolean,\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n data () {\n return {\n // As long as a value is defined, show it\n // Otherwise, check if multiple\n // to determine which default to provide\n internalLazyValue: this.modelValue !== undefined\n ? this.modelValue\n : this.multiple ? [] : undefined,\n items: [] as GroupableInstance[],\n }\n },\n\n computed: {\n classes (): Record<string, boolean> {\n return {\n 'v-item-group': true,\n ...this.themeClasses,\n }\n },\n selectedIndex (): number {\n return (this.selectedItem && this.items.indexOf(this.selectedItem)) || -1\n },\n selectedItem (): GroupableInstance | undefined {\n if (this.multiple) return undefined\n\n return this.selectedItems[0]\n },\n selectedItems (): GroupableInstance[] {\n return this.items.filter((item, index) => {\n return this.toggleMethod(this.getValue(item, index))\n })\n },\n selectedValues (): any[] {\n if (this.internalValue == null) return []\n\n return Array.isArray(this.internalValue)\n ? this.internalValue\n : [this.internalValue]\n },\n toggleMethod (): (v: any) => boolean {\n if (!this.multiple) {\n return (v: any) => this.valueComparator(this.internalValue, v)\n }\n\n const internalValue = this.internalValue\n if (Array.isArray(internalValue)) {\n return (v: any) => internalValue.some(intern => this.valueComparator(intern, v))\n }\n\n return () => false\n },\n },\n\n watch: {\n internalValue: 'updateItemsState',\n items: 'updateItemsState'\n },\n\n created () {\n if (this.multiple && !Array.isArray(this.internalValue)) {\n consoleWarn('Model must be bound to an array if the multiple property is true.', this)\n }\n },\n\n methods: {\n\n genData (): object {\n return {\n class: this.classes,\n }\n },\n getValue (item: GroupableInstance, i: number): unknown {\n return item.value === undefined\n ? i\n : item.value\n },\n onClick (item: GroupableInstance) {\n this.updateInternalValue(\n this.getValue(item, this.items.indexOf(item))\n )\n },\n register (item: GroupableInstance) {\n const index = this.items.push(item) - 1\n\n // TODO!!!\n item.$on('change', () => this.onClick(item))\n\n // If no value provided and mandatory,\n // assign first registered item\n if (this.mandatory && !this.selectedValues.length) {\n this.updateMandatory()\n }\n\n this.updateItem(item, index)\n },\n unregister (item: GroupableInstance) {\n if (this._isDestroyed) return\n\n const index = this.items.indexOf(item)\n const value = this.getValue(item, index)\n\n this.items.splice(index, 1)\n\n const valueIndex = this.selectedValues.indexOf(value)\n\n // Items is not selected, do nothing\n if (valueIndex < 0) return\n\n // If not mandatory, use regular update process\n if (!this.mandatory) {\n return this.updateInternalValue(value)\n }\n\n // Remove the value\n if (this.multiple && Array.isArray(this.internalValue)) {\n this.internalValue = this.internalValue.filter(v => v !== value)\n } else {\n this.internalValue = undefined\n }\n\n // If mandatory and we have no selection\n // add the last item as value\n /* istanbul ignore else */\n if (!this.selectedItems.length) {\n this.updateMandatory(true)\n }\n },\n updateItem (item: GroupableInstance, index: number) {\n const value = this.getValue(item, index)\n\n item.isActive = this.toggleMethod(value)\n },\n // https://github.com/vuetifyjs/vuetify/issues/5352\n updateItemsState () {\n this.$nextTick(() => {\n if (this.mandatory &&\n !this.selectedItems.length\n ) {\n return this.updateMandatory()\n }\n\n // TODO: Make this smarter so it\n // doesn't have to iterate every\n // child in an update\n this.items.forEach(this.updateItem)\n })\n },\n updateInternalValue (value: any) {\n this.multiple\n ? this.updateMultiple(value)\n : this.updateSingle(value)\n },\n updateMandatory (last?: boolean) {\n if (!this.items.length) return\n\n const items = this.items.slice()\n\n if (last) items.reverse()\n\n const item = items.find(item => !item.disabled)\n\n // If no tabs are available\n // aborts mandatory value\n if (!item) return\n\n const index = this.items.indexOf(item)\n\n this.updateInternalValue(\n this.getValue(item, index)\n )\n },\n updateMultiple (value: any) {\n const defaultValue = Array.isArray(this.internalValue)\n ? this.internalValue\n : []\n const internalValue = defaultValue.slice()\n const index = internalValue.findIndex(val => this.valueComparator(val, value))\n\n if (\n this.mandatory &&\n // Item already exists\n index > -1 &&\n // value would be reduced below min\n internalValue.length - 1 < 1\n ) return\n\n if (\n // Max is set\n this.max != null &&\n // Item doesn't exist\n index < 0 &&\n // value would be increased above max\n internalValue.length + 1 > this.max\n ) return\n\n index > -1\n ? internalValue.splice(index, 1)\n : internalValue.push(value)\n\n this.internalValue = internalValue\n },\n updateSingle (value: any) {\n const isSame = this.valueComparator(this.internalValue, value)\n\n if (this.mandatory && isSame) return\n if (!this.allowDeselect && isSame) return\n\n this.internalValue = isSame ? undefined : value\n },\n },\n\n render (): VNode {\n const data = this.genData()\n return h(this.tag, {\n class: data.class,\n ...data.attrs,\n }, getSlot(this))\n },\n})\n\nexport default defineComponent({\n name: 'v-item-group',\n extends: BaseItemGroup,\n\n provide (): object {\n return {\n itemGroup: this,\n }\n },\n})\n"],"sourceRoot":"","file":"VItemGroup.js"}
|
|
@@ -24,6 +24,10 @@ export default baseMixins.extend({
|
|
|
24
24
|
default: ''
|
|
25
25
|
},
|
|
26
26
|
alignWithTitle: Boolean,
|
|
27
|
+
allowDeselect: {
|
|
28
|
+
type: Boolean,
|
|
29
|
+
default: false
|
|
30
|
+
},
|
|
27
31
|
backgroundColor: String,
|
|
28
32
|
centerActive: Boolean,
|
|
29
33
|
centered: Boolean,
|
|
@@ -193,6 +197,7 @@ export default baseMixins.extend({
|
|
|
193
197
|
height: convertToUnit(this.height)
|
|
194
198
|
},
|
|
195
199
|
activeClass: this.activeClass,
|
|
200
|
+
allowDeselect: this.allowDeselect,
|
|
196
201
|
centerActive: this.centerActive,
|
|
197
202
|
dark: this.dark,
|
|
198
203
|
light: this.light,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/VTabs/VTabs.ts"],"names":[],"mappings":"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","sourcesContent":["import { h, withDirectives } from 'vue'\n// Styles\nimport './VTabs.sass'\n\n// Components\nimport VTabsBar from './VTabsBar'\nimport VTabsItems from './VTabsItems'\nimport VTabsSlider from './VTabsSlider'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Utilities\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { ExtractVue } from './../../util/mixins'\nimport mixins from '../../util/mixins'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue/types'\n\nconst baseMixins = mixins(\n Colorable,\n Proxyable,\n Themeable\n)\n\ninterface options extends ExtractVue<typeof baseMixins> {\n $refs: {\n items: InstanceType<typeof VTabsBar>\n }\n}\n\nexport default baseMixins.extend({\n name: 'v-tabs',\n\n props: {\n activeClass: {\n type: String,\n default: '',\n },\n alignWithTitle: Boolean,\n backgroundColor: String,\n centerActive: Boolean,\n centered: Boolean,\n fixedTabs: Boolean,\n grow: Boolean,\n height: {\n type: [Number, String],\n default: undefined,\n },\n hideSlider: Boolean,\n iconsAndText: Boolean,\n mobileBreakpoint: [String, Number],\n nextIcon: {\n type: String,\n default: '$next',\n },\n optional: Boolean,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n right: Boolean,\n showArrows: [Boolean, String],\n sliderColor: String,\n sliderSize: {\n type: [Number, String],\n default: 2,\n },\n vertical: Boolean,\n },\n\n data () {\n return {\n resizeTimeout: 0,\n slider: {\n height: null as null | number,\n left: null as null | number,\n right: null as null | number,\n top: null as null | number,\n width: null as null | number,\n },\n transitionTime: 300,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-tabs--align-with-title': this.alignWithTitle,\n 'v-tabs--centered': this.centered,\n 'v-tabs--fixed-tabs': this.fixedTabs,\n 'v-tabs--grow': this.grow,\n 'v-tabs--icons-and-text': this.iconsAndText,\n 'v-tabs--right': this.right,\n 'v-tabs--vertical': this.vertical,\n ...this.themeClasses,\n }\n },\n isReversed (): boolean {\n return this.$vuetify.rtl && this.vertical\n },\n sliderStyles (): object {\n return {\n height: convertToUnit(this.slider.height),\n left: this.isReversed ? undefined : convertToUnit(this.slider.left),\n right: this.isReversed ? convertToUnit(this.slider.right) : undefined,\n top: this.vertical ? convertToUnit(this.slider.top) : undefined,\n transition: this.slider.left != null ? null : 'none',\n width: convertToUnit(this.slider.width),\n }\n },\n computedColor (): string {\n if (this.color) return this.color\n else if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n },\n\n created () {\n const breakingProps = [\n ['value', 'modelValue'],\n ['onChange', 'onUpdate:modelValue'],\n ['onInput', 'onUpdate:modelValue'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n watch: {\n alignWithTitle: 'callSlider',\n centered: 'callSlider',\n centerActive: 'callSlider',\n fixedTabs: 'callSlider',\n grow: 'callSlider',\n iconsAndText: 'callSlider',\n right: 'callSlider',\n showArrows: 'callSlider',\n vertical: 'callSlider',\n '$vuetify.application.left': 'onResize',\n '$vuetify.application.right': 'onResize',\n '$vuetify.rtl': 'onResize',\n modelValue (val: any) {\n this.validateModelValue(val)\n },\n },\n\n mounted () {\n this.validateModelValue(this.modelValue)\n\n if (typeof ResizeObserver !== 'undefined') {\n const obs = new ResizeObserver(() => {\n this.onResize()\n })\n obs.observe(this.$el)\n this.$on('hook:destroyed', () => {\n obs.disconnect()\n })\n }\n\n this.$nextTick(() => {\n window.setTimeout(this.callSlider, 30)\n })\n },\n\n methods: {\n validateModelValue (val: any) {\n if (typeof val === 'number' && val < 0) {\n this.internalValue = 0\n }\n },\n callSlider () {\n if (\n this.hideSlider ||\n !this.$refs.items ||\n !this.$refs.items.selectedItems.length\n ) {\n this.slider.width = 0\n return false\n }\n\n this.$nextTick(() => {\n // Give screen time to paint\n const activeTab = this.$refs.items.selectedItems[0]\n /* istanbul ignore if */\n if (!activeTab || !activeTab.$el) {\n this.slider.width = 0\n this.slider.left = 0\n return\n }\n const el = activeTab.$el as HTMLElement\n\n this.slider = {\n height: !this.vertical ? Number(this.sliderSize) : el.scrollHeight,\n left: this.vertical ? 0 : el.offsetLeft,\n right: this.vertical ? 0 : el.offsetLeft + el.offsetWidth,\n top: el.offsetTop,\n width: this.vertical ? Number(this.sliderSize) : el.scrollWidth,\n }\n })\n\n return true\n },\n genBar (items: VNode[], slider: VNode | null) {\n const data = {\n style: {\n height: convertToUnit(this.height),\n },\n activeClass: this.activeClass,\n centerActive: this.centerActive,\n dark: this.dark,\n light: this.light,\n mandatory: !this.optional,\n mobileBreakpoint: this.mobileBreakpoint,\n nextIcon: this.nextIcon,\n prevIcon: this.prevIcon,\n showArrows: this.showArrows,\n modelValue: this.internalValue,\n 'onCall:slider': this.callSlider,\n 'onUpdate:modelValue': (val: any) => {\n this.internalValue = val\n },\n ref: 'items',\n }\n\n this.setTextColor(this.computedColor, data)\n this.setBackgroundColor(this.backgroundColor, data)\n\n return h(VTabsBar, data, () => [\n this.genSlider(slider),\n items,\n ])\n },\n genItems (items: VNode | null, item: VNode[]) {\n // If user provides items\n // opt to use theirs\n if (items) return items\n\n // If no tabs are provided\n // render nothing\n if (!item.length) return null\n\n return h(VTabsItems, {\n modelValue: this.internalValue,\n 'onUpdate:modelValue': (val: any) => {\n this.internalValue = val\n },\n }, () => item)\n },\n genSlider (slider: VNode | null) {\n if (this.hideSlider) return null\n\n if (!slider) {\n slider = h(VTabsSlider, {\n color: this.sliderColor,\n })\n }\n\n return h('div', {\n class: 'v-tabs-slider-wrapper',\n style: this.sliderStyles,\n }, [slider])\n },\n onResize () {\n if (this._isDestroyed) return\n\n clearTimeout(this.resizeTimeout)\n this.resizeTimeout = window.setTimeout(this.callSlider, 0)\n },\n parseNodes () {\n let items = null\n let slider = null\n const item = []\n const tab = []\n const slot = getSlot(this) || []\n const length = slot.length\n\n for (let i = 0; i < length; i++) {\n const vnode = slot[i]\n\n if (vnode.type) {\n switch (vnode.type.name) {\n case 'v-tabs-slider': slider = vnode\n break\n case 'v-tabs-items': items = vnode\n break\n case 'v-tab-item': item.push(vnode)\n break\n // case 'v-tab' - intentionally omitted\n default: tab.push(vnode)\n }\n } else {\n tab.push(vnode)\n }\n }\n\n /**\n * tab: array of `v-tab`\n * slider: single `v-tabs-slider`\n * items: single `v-tabs-items`\n * item: array of `v-tab-item`\n */\n return { tab, slider, items, item }\n },\n },\n\n render (): VNode {\n const { tab, slider, items, item } = this.parseNodes()\n\n return withDirectives(h('div', {\n class: ['v-tabs', this.classes],\n }, [\n this.genBar(tab, slider),\n this.genItems(items, item),\n ]), [\n [\n Resize,\n this.onResize,\n '',\n { quiet: true },\n ],\n ])\n },\n})\n"],"sourceRoot":"","file":"VTabs.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VTabs/VTabs.ts"],"names":[],"mappings":"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","sourcesContent":["import { h, withDirectives } from 'vue'\n// Styles\nimport './VTabs.sass'\n\n// Components\nimport VTabsBar from './VTabsBar'\nimport VTabsItems from './VTabsItems'\nimport VTabsSlider from './VTabsSlider'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Utilities\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { ExtractVue } from './../../util/mixins'\nimport mixins from '../../util/mixins'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue/types'\n\nconst baseMixins = mixins(\n Colorable,\n Proxyable,\n Themeable\n)\n\ninterface options extends ExtractVue<typeof baseMixins> {\n $refs: {\n items: InstanceType<typeof VTabsBar>\n }\n}\n\nexport default baseMixins.extend({\n name: 'v-tabs',\n\n props: {\n activeClass: {\n type: String,\n default: '',\n },\n alignWithTitle: Boolean,\n allowDeselect: {\n type: Boolean,\n default: false,\n },\n backgroundColor: String,\n centerActive: Boolean,\n centered: Boolean,\n fixedTabs: Boolean,\n grow: Boolean,\n height: {\n type: [Number, String],\n default: undefined,\n },\n hideSlider: Boolean,\n iconsAndText: Boolean,\n mobileBreakpoint: [String, Number],\n nextIcon: {\n type: String,\n default: '$next',\n },\n optional: Boolean,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n right: Boolean,\n showArrows: [Boolean, String],\n sliderColor: String,\n sliderSize: {\n type: [Number, String],\n default: 2,\n },\n vertical: Boolean,\n },\n\n data () {\n return {\n resizeTimeout: 0,\n slider: {\n height: null as null | number,\n left: null as null | number,\n right: null as null | number,\n top: null as null | number,\n width: null as null | number,\n },\n transitionTime: 300,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-tabs--align-with-title': this.alignWithTitle,\n 'v-tabs--centered': this.centered,\n 'v-tabs--fixed-tabs': this.fixedTabs,\n 'v-tabs--grow': this.grow,\n 'v-tabs--icons-and-text': this.iconsAndText,\n 'v-tabs--right': this.right,\n 'v-tabs--vertical': this.vertical,\n ...this.themeClasses,\n }\n },\n isReversed (): boolean {\n return this.$vuetify.rtl && this.vertical\n },\n sliderStyles (): object {\n return {\n height: convertToUnit(this.slider.height),\n left: this.isReversed ? undefined : convertToUnit(this.slider.left),\n right: this.isReversed ? convertToUnit(this.slider.right) : undefined,\n top: this.vertical ? convertToUnit(this.slider.top) : undefined,\n transition: this.slider.left != null ? null : 'none',\n width: convertToUnit(this.slider.width),\n }\n },\n computedColor (): string {\n if (this.color) return this.color\n else if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n },\n\n created () {\n const breakingProps = [\n ['value', 'modelValue'],\n ['onChange', 'onUpdate:modelValue'],\n ['onInput', 'onUpdate:modelValue'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n watch: {\n alignWithTitle: 'callSlider',\n centered: 'callSlider',\n centerActive: 'callSlider',\n fixedTabs: 'callSlider',\n grow: 'callSlider',\n iconsAndText: 'callSlider',\n right: 'callSlider',\n showArrows: 'callSlider',\n vertical: 'callSlider',\n '$vuetify.application.left': 'onResize',\n '$vuetify.application.right': 'onResize',\n '$vuetify.rtl': 'onResize',\n modelValue (val: any) {\n this.validateModelValue(val)\n },\n },\n\n mounted () {\n this.validateModelValue(this.modelValue)\n\n if (typeof ResizeObserver !== 'undefined') {\n const obs = new ResizeObserver(() => {\n this.onResize()\n })\n obs.observe(this.$el)\n this.$on('hook:destroyed', () => {\n obs.disconnect()\n })\n }\n\n this.$nextTick(() => {\n window.setTimeout(this.callSlider, 30)\n })\n },\n\n methods: {\n validateModelValue (val: any) {\n if (typeof val === 'number' && val < 0) {\n this.internalValue = 0\n }\n },\n callSlider () {\n if (\n this.hideSlider ||\n !this.$refs.items ||\n !this.$refs.items.selectedItems.length\n ) {\n this.slider.width = 0\n return false\n }\n\n this.$nextTick(() => {\n // Give screen time to paint\n const activeTab = this.$refs.items.selectedItems[0]\n /* istanbul ignore if */\n if (!activeTab || !activeTab.$el) {\n this.slider.width = 0\n this.slider.left = 0\n return\n }\n const el = activeTab.$el as HTMLElement\n\n this.slider = {\n height: !this.vertical ? Number(this.sliderSize) : el.scrollHeight,\n left: this.vertical ? 0 : el.offsetLeft,\n right: this.vertical ? 0 : el.offsetLeft + el.offsetWidth,\n top: el.offsetTop,\n width: this.vertical ? Number(this.sliderSize) : el.scrollWidth,\n }\n })\n\n return true\n },\n genBar (items: VNode[], slider: VNode | null) {\n const data = {\n style: {\n height: convertToUnit(this.height),\n },\n activeClass: this.activeClass,\n allowDeselect: this.allowDeselect,\n centerActive: this.centerActive,\n dark: this.dark,\n light: this.light,\n mandatory: !this.optional,\n mobileBreakpoint: this.mobileBreakpoint,\n nextIcon: this.nextIcon,\n prevIcon: this.prevIcon,\n showArrows: this.showArrows,\n modelValue: this.internalValue,\n 'onCall:slider': this.callSlider,\n 'onUpdate:modelValue': (val: any) => {\n this.internalValue = val\n },\n ref: 'items',\n }\n\n this.setTextColor(this.computedColor, data)\n this.setBackgroundColor(this.backgroundColor, data)\n\n return h(VTabsBar, data, () => [\n this.genSlider(slider),\n items,\n ])\n },\n genItems (items: VNode | null, item: VNode[]) {\n // If user provides items\n // opt to use theirs\n if (items) return items\n\n // If no tabs are provided\n // render nothing\n if (!item.length) return null\n\n return h(VTabsItems, {\n modelValue: this.internalValue,\n 'onUpdate:modelValue': (val: any) => {\n this.internalValue = val\n },\n }, () => item)\n },\n genSlider (slider: VNode | null) {\n if (this.hideSlider) return null\n\n if (!slider) {\n slider = h(VTabsSlider, {\n color: this.sliderColor,\n })\n }\n\n return h('div', {\n class: 'v-tabs-slider-wrapper',\n style: this.sliderStyles,\n }, [slider])\n },\n onResize () {\n if (this._isDestroyed) return\n\n clearTimeout(this.resizeTimeout)\n this.resizeTimeout = window.setTimeout(this.callSlider, 0)\n },\n parseNodes () {\n let items = null\n let slider = null\n const item = []\n const tab = []\n const slot = getSlot(this) || []\n const length = slot.length\n\n for (let i = 0; i < length; i++) {\n const vnode = slot[i]\n\n if (vnode.type) {\n switch (vnode.type.name) {\n case 'v-tabs-slider': slider = vnode\n break\n case 'v-tabs-items': items = vnode\n break\n case 'v-tab-item': item.push(vnode)\n break\n // case 'v-tab' - intentionally omitted\n default: tab.push(vnode)\n }\n } else {\n tab.push(vnode)\n }\n }\n\n /**\n * tab: array of `v-tab`\n * slider: single `v-tabs-slider`\n * items: single `v-tabs-items`\n * item: array of `v-tab-item`\n */\n return { tab, slider, items, item }\n },\n },\n\n render (): VNode {\n const { tab, slider, items, item } = this.parseNodes()\n\n return withDirectives(h('div', {\n class: ['v-tabs', this.classes],\n }, [\n this.genBar(tab, slider),\n this.genItems(items, item),\n ]), [\n [\n Resize,\n this.onResize,\n '',\n { quiet: true },\n ],\n ])\n },\n})\n"],"sourceRoot":"","file":"VTabs.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/VTabs/VTabsBar.ts"],"names":[],"mappings":"AAAA,SAAS,CAAT,QAAyB,KAAzB,C,CACA;;AACA,SAAS,cAAT,QAA+B,4BAA/B,C,CAKA;;AACA,OAAO,SAAP,MAAsB,wBAAtB;AACA,OAAO,WAAP,MAAwB,2BAAxB,C,CAEA;;AACA,OAAO,MAAP,MAAmB,mBAAnB;AAOA,eAAe,MAAM,CACnB,cADmB,EAEnB,WAFmB,EAGnB;AACA;AAJmB,CAAN,CAKb,MALa,CAKN;AACP,EAAA,IAAI,EAAE,YADC;;AAGP,EAAA,OAAO,GAAA;AACL,WAAO;AACL,MAAA,OAAO,EAAE;AADJ,KAAP;AAGD,GAPM;;AASP,EAAA,QAAQ,EAAE;AACR,IAAA,OAAO,GAAA;AACL,aAAO,EACL,GAAG,cAAc,CAAC,QAAf,CAAwB,OAAxB,CAAgC,IAAhC,CAAqC,IAArC,CADE;AAEL,sBAAc,IAFT;AAGL,iCAAyB,KAAK,QAHzB;AAIL;AACA,mCAA2B,KAAK,UAL3B;AAML,WAAG,KAAK;AANH,OAAP;AAQD;;AAVO,
|
|
1
|
+
{"version":3,"sources":["../../../src/components/VTabs/VTabsBar.ts"],"names":[],"mappings":"AAAA,SAAS,CAAT,QAAyB,KAAzB,C,CACA;;AACA,SAAS,cAAT,QAA+B,4BAA/B,C,CAKA;;AACA,OAAO,SAAP,MAAsB,wBAAtB;AACA,OAAO,WAAP,MAAwB,2BAAxB,C,CAEA;;AACA,OAAO,MAAP,MAAmB,mBAAnB;AAOA,eAAe,MAAM,CACnB,cADmB,EAEnB,WAFmB,EAGnB;AACA;AAJmB,CAAN,CAKb,MALa,CAKN;AACP,EAAA,IAAI,EAAE,YADC;;AAGP,EAAA,OAAO,GAAA;AACL,WAAO;AACL,MAAA,OAAO,EAAE;AADJ,KAAP;AAGD,GAPM;;AASP,EAAA,KAAK,EAAE;AACL,IAAA,aAAa,EAAE;AADV,GATA;AAaP,EAAA,QAAQ,EAAE;AACR,IAAA,OAAO,GAAA;AACL,aAAO,EACL,GAAG,cAAc,CAAC,QAAf,CAAwB,OAAxB,CAAgC,IAAhC,CAAqC,IAArC,CADE;AAEL,sBAAc,IAFT;AAGL,iCAAyB,KAAK,QAHzB;AAIL;AACA,mCAA2B,KAAK,UAL3B;AAML,WAAG,KAAK;AANH,OAAP;AAQD;;AAVO,GAbH;AA0BP,EAAA,KAAK,EAAE;AACL,IAAA,KAAK,EAAE,YADF;AAEL,IAAA,aAAa,EAAE,YAFV;AAGL,IAAA,MAAM,EAAE;AAHH,GA1BA;AAgCP,EAAA,OAAO,EAAE;AACP,IAAA,UAAU,GAAA;AACR,UAAI,CAAC,KAAK,QAAV,EAAoB;AAEpB,WAAK,KAAL,CAAW,aAAX;AACD,KALM;;AAMP,IAAA,UAAU,GAAA;AACR,YAAM,MAAM,GAAG,cAAc,CAAC,OAAf,CAAuB,UAAvB,CAAkC,IAAlC,CAAuC,IAAvC,CAAf;AAEA,MAAA,MAAM,CAAC,KAAP,CAAa,KAAb,IAAsB,sBAAtB;AAEA,aAAO,MAAP;AACD,KAZM;;AAaP,IAAA,aAAa,CACX,GADW,EAEX,MAFW,EAEoB;AAE/B;AACA,UAAI,KAAK,SAAT,EAAoB;AAEpB,YAAM,KAAK,GAAI,KAAK,KAApB;AACA,YAAM,OAAO,GAAG,GAAG,CAAC,IAApB;AACA,YAAM,OAAO,GAAG,MAAM,CAAC,IAAvB;AAEA,UAAI,MAAM,GAAG,KAAb;AACA,UAAI,MAAM,GAAG,KAAb;;AAEA,WAAK,MAAM,IAAX,IAAmB,KAAnB,EAA0B;AACxB,YAAI,IAAI,CAAC,EAAL,KAAY,OAAhB,EAAyB,MAAM,GAAG,IAAT,CAAzB,KACK,IAAI,IAAI,CAAC,EAAL,KAAY,OAAhB,EAAyB,MAAM,GAAG,IAAT;AAE9B,YAAI,MAAM,IAAI,MAAd,EAAsB;AACvB,OAjB8B,CAmB/B;AACA;AACA;;;AACA,UAAI,CAAC,MAAD,IAAW,MAAf,EAAuB,KAAK,aAAL,GAAqB,SAArB;AACxB;;AAtCM,GAhCF;;AAyEP,EAAA,MAAM,GAAA;AACJ,UAAM,MAAM,GAAG,cAAc,CAAC,MAAf,CAAsB,IAAtB,CAA2B,IAA3B,EAAiC,CAAjC,CAAf;AAEA,IAAA,MAAM,CAAC,IAAP,GAAc,SAAd;AAEA,WAAO,MAAP;AACD;;AA/EM,CALM,CAAf","sourcesContent":["import { h, VNode } from 'vue'\n// Extensions\nimport { BaseSlideGroup } from '../VSlideGroup/VSlideGroup'\n\n// Components\nimport VTab from './VTab'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\nimport SSRBootable from '../../mixins/ssr-bootable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n// Types\nimport { RouteLocationNormalized } from 'vue-router'\n\ntype VTabInstance = InstanceType<typeof VTab>\n\nexport default mixins(\n BaseSlideGroup,\n SSRBootable,\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-tabs-bar',\n\n provide () {\n return {\n tabsBar: this,\n }\n },\n\n props: {\n allowDeselect: Boolean,\n },\n\n computed: {\n classes () {\n return {\n ...BaseSlideGroup.computed.classes.call(this),\n 'v-tabs-bar': true,\n 'v-tabs-bar--is-mobile': this.isMobile,\n // TODO: Remove this and move to v-slide-group\n 'v-tabs-bar--show-arrows': this.showArrows,\n ...this.themeClasses,\n }\n },\n },\n\n watch: {\n items: 'callSlider',\n internalValue: 'callSlider',\n $route: 'onRouteChange',\n },\n\n methods: {\n callSlider () {\n if (!this.isBooted) return\n\n this.$emit('call:slider')\n },\n genContent () {\n const render = BaseSlideGroup.methods.genContent.call(this)\n\n render.props.class += ' v-tabs-bar__content'\n\n return render\n },\n onRouteChange (\n val: RouteLocationNormalized,\n oldVal: RouteLocationNormalized\n ) {\n /* istanbul ignore next */\n if (this.mandatory) return\n\n const items = (this.items as unknown) as VTabInstance[]\n const newPath = val.path\n const oldPath = oldVal.path\n\n let hasNew = false\n let hasOld = false\n\n for (const item of items) {\n if (item.to === oldPath) hasOld = true\n else if (item.to === newPath) hasNew = true\n\n if (hasNew && hasOld) break\n }\n\n // If we have an old item and not a new one\n // it's assumed that the user navigated to\n // a path that is not present in the items\n if (!hasNew && hasOld) this.internalValue = undefined\n },\n },\n\n render (): VNode {\n const render = BaseSlideGroup.render.call(this, h)\n\n render.role = 'tablist'\n\n return render\n },\n})\n"],"sourceRoot":"","file":"VTabsBar.js"}
|
package/lib/framework.js
CHANGED
package/package.json
CHANGED
|
@@ -37,6 +37,10 @@ export const BaseItemGroup = mixins(
|
|
|
37
37
|
type: String,
|
|
38
38
|
default: 'v-item--active',
|
|
39
39
|
},
|
|
40
|
+
allowDeselect: {
|
|
41
|
+
type: Boolean,
|
|
42
|
+
default: true,
|
|
43
|
+
},
|
|
40
44
|
mandatory: Boolean,
|
|
41
45
|
max: {
|
|
42
46
|
type: [Number, String],
|
|
@@ -254,6 +258,7 @@ export const BaseItemGroup = mixins(
|
|
|
254
258
|
const isSame = this.valueComparator(this.internalValue, value)
|
|
255
259
|
|
|
256
260
|
if (this.mandatory && isSame) return
|
|
261
|
+
if (!this.allowDeselect && isSame) return
|
|
257
262
|
|
|
258
263
|
this.internalValue = isSame ? undefined : value
|
|
259
264
|
},
|
|
@@ -45,6 +45,10 @@ export default baseMixins.extend({
|
|
|
45
45
|
default: '',
|
|
46
46
|
},
|
|
47
47
|
alignWithTitle: Boolean,
|
|
48
|
+
allowDeselect: {
|
|
49
|
+
type: Boolean,
|
|
50
|
+
default: false,
|
|
51
|
+
},
|
|
48
52
|
backgroundColor: String,
|
|
49
53
|
centerActive: Boolean,
|
|
50
54
|
centered: Boolean,
|
|
@@ -216,6 +220,7 @@ export default baseMixins.extend({
|
|
|
216
220
|
height: convertToUnit(this.height),
|
|
217
221
|
},
|
|
218
222
|
activeClass: this.activeClass,
|
|
223
|
+
allowDeselect: this.allowDeselect,
|
|
219
224
|
centerActive: this.centerActive,
|
|
220
225
|
dark: this.dark,
|
|
221
226
|
light: this.light,
|
|
@@ -250,4 +250,69 @@ describe('VTabs.ts', () => {
|
|
|
250
250
|
const emitted = wrapper.emitted('update:modelValue')
|
|
251
251
|
expect(emitted).toBeFalsy() // Не должно быть эмиттов при инициализации
|
|
252
252
|
})
|
|
253
|
+
|
|
254
|
+
it('should not close active tab when clicked (allowDeselect=false)', async () => {
|
|
255
|
+
const wrapper = mountFunction({
|
|
256
|
+
props: {
|
|
257
|
+
modelValue: 'first',
|
|
258
|
+
allowDeselect: false, // Запрещаем deselect
|
|
259
|
+
},
|
|
260
|
+
slots: {
|
|
261
|
+
default: () => [h('div', [
|
|
262
|
+
h(VTab, { tabValue: 'first' }, () => 'First Tab'),
|
|
263
|
+
h(VTab, { tabValue: 'second' }, () => 'Second Tab'),
|
|
264
|
+
])],
|
|
265
|
+
},
|
|
266
|
+
})
|
|
267
|
+
|
|
268
|
+
await wrapper.vm.$nextTick()
|
|
269
|
+
|
|
270
|
+
// Проверяем, что первая вкладка активна
|
|
271
|
+
expect(wrapper.vm.internalValue).toBe('first')
|
|
272
|
+
|
|
273
|
+
// Кликаем по активной вкладке (первой)
|
|
274
|
+
const tabs = wrapper.findAllComponents({ name: 'v-tab' })
|
|
275
|
+
const firstTab = tabs[0] // Первая вкладка должна быть активной
|
|
276
|
+
await firstTab.trigger('click')
|
|
277
|
+
|
|
278
|
+
// Проверяем, что значение не изменилось (вкладка осталась активной)
|
|
279
|
+
expect(wrapper.vm.internalValue).toBe('first')
|
|
280
|
+
|
|
281
|
+
// Проверяем, что не было эмиттов update:modelValue
|
|
282
|
+
const emitted = wrapper.emitted('update:modelValue')
|
|
283
|
+
expect(emitted).toBeFalsy()
|
|
284
|
+
})
|
|
285
|
+
|
|
286
|
+
it('should not close active tab when clicked (mandatory=true)', async () => {
|
|
287
|
+
// Тест для проверки, что при mandatory=true активная вкладка не закрывается
|
|
288
|
+
const wrapper = mountFunction({
|
|
289
|
+
props: {
|
|
290
|
+
modelValue: 'first',
|
|
291
|
+
optional: false, // mandatory=true
|
|
292
|
+
},
|
|
293
|
+
slots: {
|
|
294
|
+
default: () => [h('div', [
|
|
295
|
+
h(VTab, { tabValue: 'first' }, () => 'First Tab'),
|
|
296
|
+
h(VTab, { tabValue: 'second' }, () => 'Second Tab'),
|
|
297
|
+
])],
|
|
298
|
+
},
|
|
299
|
+
})
|
|
300
|
+
|
|
301
|
+
await wrapper.vm.$nextTick()
|
|
302
|
+
|
|
303
|
+
// Проверяем, что первая вкладка активна
|
|
304
|
+
expect(wrapper.vm.internalValue).toBe('first')
|
|
305
|
+
|
|
306
|
+
// Кликаем по активной вкладке (первой)
|
|
307
|
+
const tabs = wrapper.findAllComponents({ name: 'v-tab' })
|
|
308
|
+
const firstTab = tabs[0] // Первая вкладка должна быть активной
|
|
309
|
+
await firstTab.trigger('click')
|
|
310
|
+
|
|
311
|
+
// Проверяем, что значение не изменилось (вкладка осталась активной)
|
|
312
|
+
expect(wrapper.vm.internalValue).toBe('first')
|
|
313
|
+
|
|
314
|
+
// Проверяем, что не было эмиттов update:modelValue
|
|
315
|
+
const emitted = wrapper.emitted('update:modelValue')
|
|
316
|
+
expect(emitted).toBeFalsy()
|
|
317
|
+
})
|
|
253
318
|
})
|