This commit is contained in:
darenhsu
2022-07-17 13:16:16 +08:00
parent 84759556ff
commit befd344ab0
28070 changed files with 4008428 additions and 1 deletions
+82
View File
@@ -0,0 +1,82 @@
// Mixins
import { factory as GroupableFactory } from '../../mixins/groupable';
import Routable from '../../mixins/routable';
import Themeable from '../../mixins/themeable'; // Utilities
import { keyCodes } from './../../util/helpers';
import mixins from '../../util/mixins';
const baseMixins = mixins(Routable, // Must be after routable
// to overwrite activeClass
GroupableFactory('tabsBar'), Themeable);
export default baseMixins.extend().extend().extend({
name: 'v-tab',
props: {
ripple: {
type: [Boolean, Object],
default: true
}
},
data: () => ({
proxyClass: 'v-tab--active'
}),
computed: {
classes() {
return {
'v-tab': true,
...Routable.options.computed.classes.call(this),
'v-tab--disabled': this.disabled,
...this.groupClasses
};
},
value() {
let to = this.to || this.href || '';
if (this.$router && this.to === Object(this.to)) {
const resolve = this.$router.resolve(this.to, this.$route, this.append);
to = resolve.href;
}
return to.replace('#', '');
}
},
mounted() {
this.onRouteChange();
},
methods: {
click(e) {
// If user provides an
// actual link, do not
// prevent default
if (this.href && this.href.indexOf('#') > -1) e.preventDefault();
if (e.detail) this.$el.blur();
this.$emit('click', e);
this.to || this.toggle();
}
},
render(h) {
const {
tag,
data
} = this.generateRouteLink();
data.attrs = { ...data.attrs,
'aria-selected': String(this.isActive),
role: 'tab',
tabindex: 0
};
data.on = { ...data.on,
keydown: e => {
if (e.keyCode === keyCodes.enter) this.click(e);
this.$emit('keydown', e);
}
};
return h(tag, data, this.$slots.default);
}
});
//# sourceMappingURL=VTab.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/components/VTabs/VTab.ts"],"names":[],"mappings":"AAAA;AACA,SAAS,OAAO,IAAI,gBAApB,QAA4C,wBAA5C;AACA,OAAO,QAAP,MAAqB,uBAArB;AACA,OAAO,SAAP,MAAsB,wBAAtB,C,CAEA;;AACA,SAAS,QAAT,QAAyB,sBAAzB;AACA,OAAO,MAAP,MAAmB,mBAAnB;AAMA,MAAM,UAAU,GAAG,MAAM,CACvB,QADuB,EAEvB;AACA;AACA,gBAAgB,CAAC,SAAD,CAJO,EAKvB,SALuB,CAAzB;AAYA,eAAe,UAAU,CAAC,MAAX,GAA6B,MAA7B,GAEb,MAFa,CAEN;AACP,EAAA,IAAI,EAAE,OADC;AAGP,EAAA,KAAK,EAAE;AACL,IAAA,MAAM,EAAE;AACN,MAAA,IAAI,EAAE,CAAC,OAAD,EAAU,MAAV,CADA;AAEN,MAAA,OAAO,EAAE;AAFH;AADH,GAHA;AAUP,EAAA,IAAI,EAAE,OAAO;AACX,IAAA,UAAU,EAAE;AADD,GAAP,CAVC;AAcP,EAAA,QAAQ,EAAE;AACR,IAAA,OAAO,GAAA;AACL,aAAO;AACL,iBAAS,IADJ;AAEL,WAAG,QAAQ,CAAC,OAAT,CAAiB,QAAjB,CAA0B,OAA1B,CAAkC,IAAlC,CAAuC,IAAvC,CAFE;AAGL,2BAAmB,KAAK,QAHnB;AAIL,WAAG,KAAK;AAJH,OAAP;AAMD,KARO;;AASR,IAAA,KAAK,GAAA;AACH,UAAI,EAAE,GAAG,KAAK,EAAL,IAAW,KAAK,IAAhB,IAAwB,EAAjC;;AAEA,UAAI,KAAK,OAAL,IACF,KAAK,EAAL,KAAY,MAAM,CAAC,KAAK,EAAN,CADpB,EAEE;AACA,cAAM,OAAO,GAAG,KAAK,OAAL,CAAa,OAAb,CACd,KAAK,EADS,EAEd,KAAK,MAFS,EAGd,KAAK,MAHS,CAAhB;AAMA,QAAA,EAAE,GAAG,OAAO,CAAC,IAAb;AACD;;AAED,aAAO,EAAE,CAAC,OAAH,CAAW,GAAX,EAAgB,EAAhB,CAAP;AACD;;AAzBO,GAdH;;AA0CP,EAAA,OAAO,GAAA;AACL,SAAK,aAAL;AACD,GA5CM;;AA8CP,EAAA,OAAO,EAAE;AACP,IAAA,KAAK,CAAE,CAAF,EAA+B;AAClC;AACA;AACA;AACA,UAAI,KAAK,IAAL,IACF,KAAK,IAAL,CAAU,OAAV,CAAkB,GAAlB,IAAyB,CAAC,CAD5B,EAEE,CAAC,CAAC,cAAF;AAEF,UAAI,CAAC,CAAC,MAAN,EAAc,KAAK,GAAL,CAAS,IAAT;AAEd,WAAK,KAAL,CAAW,OAAX,EAAoB,CAApB;AAEA,WAAK,EAAL,IAAW,KAAK,MAAL,EAAX;AACD;;AAdM,GA9CF;;AA+DP,EAAA,MAAM,CAAE,CAAF,EAAG;AACP,UAAM;AAAE,MAAA,GAAF;AAAO,MAAA;AAAP,QAAgB,KAAK,iBAAL,EAAtB;AAEA,IAAA,IAAI,CAAC,KAAL,GAAa,EACX,GAAG,IAAI,CAAC,KADG;AAEX,uBAAiB,MAAM,CAAC,KAAK,QAAN,CAFZ;AAGX,MAAA,IAAI,EAAE,KAHK;AAIX,MAAA,QAAQ,EAAE;AAJC,KAAb;AAMA,IAAA,IAAI,CAAC,EAAL,GAAU,EACR,GAAG,IAAI,CAAC,EADA;AAER,MAAA,OAAO,EAAG,CAAD,IAAqB;AAC5B,YAAI,CAAC,CAAC,OAAF,KAAc,QAAQ,CAAC,KAA3B,EAAkC,KAAK,KAAL,CAAW,CAAX;AAElC,aAAK,KAAL,CAAW,SAAX,EAAsB,CAAtB;AACD;AANO,KAAV;AASA,WAAO,CAAC,CAAC,GAAD,EAAM,IAAN,EAAY,KAAK,MAAL,CAAY,OAAxB,CAAR;AACD;;AAlFM,CAFM,CAAf","sourcesContent":["// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Routable from '../../mixins/routable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport { keyCodes } from './../../util/helpers'\nimport mixins from '../../util/mixins'\nimport { ExtractVue } from './../../util/mixins'\n\n// Types\nimport { VNode } from 'vue/types'\n\nconst baseMixins = mixins(\n Routable,\n // Must be after routable\n // to overwrite activeClass\n GroupableFactory('tabsBar'),\n Themeable\n)\n\ninterface options extends ExtractVue<typeof baseMixins> {\n $el: HTMLElement\n}\n\nexport default baseMixins.extend<options>().extend(\n /* @vue/component */\n).extend({\n name: 'v-tab',\n\n props: {\n ripple: {\n type: [Boolean, Object],\n default: true,\n },\n },\n\n data: () => ({\n proxyClass: 'v-tab--active',\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-tab': true,\n ...Routable.options.computed.classes.call(this),\n 'v-tab--disabled': this.disabled,\n ...this.groupClasses,\n }\n },\n value (): any {\n let to = this.to || this.href || ''\n\n if (this.$router &&\n this.to === Object(this.to)\n ) {\n const resolve = this.$router.resolve(\n this.to,\n this.$route,\n this.append\n )\n\n to = resolve.href\n }\n\n return to.replace('#', '')\n },\n },\n\n mounted () {\n this.onRouteChange()\n },\n\n methods: {\n click (e: KeyboardEvent | MouseEvent): void {\n // If user provides an\n // actual link, do not\n // prevent default\n if (this.href &&\n this.href.indexOf('#') > -1\n ) e.preventDefault()\n\n if (e.detail) this.$el.blur()\n\n this.$emit('click', e)\n\n this.to || this.toggle()\n },\n },\n\n render (h): VNode {\n const { tag, data } = this.generateRouteLink()\n\n data.attrs = {\n ...data.attrs,\n 'aria-selected': String(this.isActive),\n role: 'tab',\n tabindex: 0,\n }\n data.on = {\n ...data.on,\n keydown: (e: KeyboardEvent) => {\n if (e.keyCode === keyCodes.enter) this.click(e)\n\n this.$emit('keydown', e)\n },\n }\n\n return h(tag, data, this.$slots.default)\n },\n})\n"],"sourceRoot":"","file":"VTab.js"}
+20
View File
@@ -0,0 +1,20 @@
// Extensions
import VWindowItem from '../VWindow/VWindowItem';
/* @vue/component */
export default VWindowItem.extend({
name: 'v-tab-item',
props: {
id: String
},
methods: {
genWindowItem() {
const item = VWindowItem.options.methods.genWindowItem.call(this);
item.data.domProps = item.data.domProps || {};
item.data.domProps.id = this.id || this.value;
return item;
}
}
});
//# sourceMappingURL=VTabItem.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/components/VTabs/VTabItem.ts"],"names":[],"mappings":"AAAA;AACA,OAAO,WAAP,MAAwB,wBAAxB;AAEA;;AACA,eAAe,WAAW,CAAC,MAAZ,CAAmB;AAChC,EAAA,IAAI,EAAE,YAD0B;AAGhC,EAAA,KAAK,EAAE;AACL,IAAA,EAAE,EAAE;AADC,GAHyB;AAOhC,EAAA,OAAO,EAAE;AACP,IAAA,aAAa,GAAA;AACX,YAAM,IAAI,GAAG,WAAW,CAAC,OAAZ,CAAoB,OAApB,CAA4B,aAA5B,CAA0C,IAA1C,CAA+C,IAA/C,CAAb;AAEA,MAAA,IAAI,CAAC,IAAL,CAAW,QAAX,GAAsB,IAAI,CAAC,IAAL,CAAW,QAAX,IAAuB,EAA7C;AACA,MAAA,IAAI,CAAC,IAAL,CAAW,QAAX,CAAoB,EAApB,GAAyB,KAAK,EAAL,IAAW,KAAK,KAAzC;AAEA,aAAO,IAAP;AACD;;AARM;AAPuB,CAAnB,CAAf","sourcesContent":["// Extensions\nimport VWindowItem from '../VWindow/VWindowItem'\n\n/* @vue/component */\nexport default VWindowItem.extend({\n name: 'v-tab-item',\n\n props: {\n id: String,\n },\n\n methods: {\n genWindowItem () {\n const item = VWindowItem.options.methods.genWindowItem.call(this)\n\n item.data!.domProps = item.data!.domProps || {}\n item.data!.domProps.id = this.id || this.value\n\n return item\n },\n },\n})\n"],"sourceRoot":"","file":"VTabItem.js"}
+301
View File
@@ -0,0 +1,301 @@
// Styles
import "../../../src/components/VTabs/VTabs.sass"; // Components
import VTabsBar from './VTabsBar';
import VTabsItems from './VTabsItems';
import VTabsSlider from './VTabsSlider'; // Mixins
import Colorable from '../../mixins/colorable';
import Proxyable from '../../mixins/proxyable';
import Themeable from '../../mixins/themeable'; // Directives
import Resize from '../../directives/resize'; // Utilities
import { convertToUnit } from '../../util/helpers';
import mixins from '../../util/mixins';
const baseMixins = mixins(Colorable, Proxyable, Themeable);
export default baseMixins.extend().extend({
name: 'v-tabs',
directives: {
Resize
},
props: {
activeClass: {
type: String,
default: ''
},
alignWithTitle: Boolean,
backgroundColor: String,
centerActive: Boolean,
centered: Boolean,
fixedTabs: Boolean,
grow: Boolean,
height: {
type: [Number, String],
default: undefined
},
hideSlider: Boolean,
iconsAndText: Boolean,
mobileBreakpoint: [String, Number],
nextIcon: {
type: String,
default: '$next'
},
optional: Boolean,
prevIcon: {
type: String,
default: '$prev'
},
right: Boolean,
showArrows: [Boolean, String],
sliderColor: String,
sliderSize: {
type: [Number, String],
default: 2
},
vertical: Boolean
},
data() {
return {
resizeTimeout: 0,
slider: {
height: null,
left: null,
right: null,
top: null,
width: null
},
transitionTime: 300
};
},
computed: {
classes() {
return {
'v-tabs--align-with-title': this.alignWithTitle,
'v-tabs--centered': this.centered,
'v-tabs--fixed-tabs': this.fixedTabs,
'v-tabs--grow': this.grow,
'v-tabs--icons-and-text': this.iconsAndText,
'v-tabs--right': this.right,
'v-tabs--vertical': this.vertical,
...this.themeClasses
};
},
isReversed() {
return this.$vuetify.rtl && this.vertical;
},
sliderStyles() {
return {
height: convertToUnit(this.slider.height),
left: this.isReversed ? undefined : convertToUnit(this.slider.left),
right: this.isReversed ? convertToUnit(this.slider.right) : undefined,
top: this.vertical ? convertToUnit(this.slider.top) : undefined,
transition: this.slider.left != null ? null : 'none',
width: convertToUnit(this.slider.width)
};
},
computedColor() {
if (this.color) return this.color;else if (this.isDark && !this.appIsDark) return 'white';else return 'primary';
}
},
watch: {
alignWithTitle: 'callSlider',
centered: 'callSlider',
centerActive: 'callSlider',
fixedTabs: 'callSlider',
grow: 'callSlider',
right: 'callSlider',
showArrows: 'callSlider',
vertical: 'callSlider',
'$vuetify.application.left': 'onResize',
'$vuetify.application.right': 'onResize',
'$vuetify.rtl': 'onResize'
},
mounted() {
this.$nextTick(() => {
window.setTimeout(this.callSlider, 30);
});
},
methods: {
callSlider() {
if (this.hideSlider || !this.$refs.items || !this.$refs.items.selectedItems.length) {
this.slider.width = 0;
return false;
}
this.$nextTick(() => {
// Give screen time to paint
const activeTab = this.$refs.items.selectedItems[0];
/* istanbul ignore if */
if (!activeTab || !activeTab.$el) {
this.slider.width = 0;
this.slider.left = 0;
return;
}
const el = activeTab.$el;
this.slider = {
height: !this.vertical ? Number(this.sliderSize) : el.scrollHeight,
left: this.vertical ? 0 : el.offsetLeft,
right: this.vertical ? 0 : el.offsetLeft + el.offsetWidth,
top: el.offsetTop,
width: this.vertical ? Number(this.sliderSize) : el.scrollWidth
};
});
return true;
},
genBar(items, slider) {
const data = {
style: {
height: convertToUnit(this.height)
},
props: {
activeClass: this.activeClass,
centerActive: this.centerActive,
dark: this.dark,
light: this.light,
mandatory: !this.optional,
mobileBreakpoint: this.mobileBreakpoint,
nextIcon: this.nextIcon,
prevIcon: this.prevIcon,
showArrows: this.showArrows,
value: this.internalValue
},
on: {
'call:slider': this.callSlider,
change: val => {
this.internalValue = val;
}
},
ref: 'items'
};
this.setTextColor(this.computedColor, data);
this.setBackgroundColor(this.backgroundColor, data);
return this.$createElement(VTabsBar, data, [this.genSlider(slider), items]);
},
genItems(items, item) {
// If user provides items
// opt to use theirs
if (items) return items; // If no tabs are provided
// render nothing
if (!item.length) return null;
return this.$createElement(VTabsItems, {
props: {
value: this.internalValue
},
on: {
change: val => {
this.internalValue = val;
}
}
}, item);
},
genSlider(slider) {
if (this.hideSlider) return null;
if (!slider) {
slider = this.$createElement(VTabsSlider, {
props: {
color: this.sliderColor
}
});
}
return this.$createElement('div', {
staticClass: 'v-tabs-slider-wrapper',
style: this.sliderStyles
}, [slider]);
},
onResize() {
if (this._isDestroyed) return;
clearTimeout(this.resizeTimeout);
this.resizeTimeout = window.setTimeout(this.callSlider, 0);
},
parseNodes() {
let items = null;
let slider = null;
const item = [];
const tab = [];
const slot = this.$slots.default || [];
const length = slot.length;
for (let i = 0; i < length; i++) {
const vnode = slot[i];
if (vnode.componentOptions) {
switch (vnode.componentOptions.Ctor.options.name) {
case 'v-tabs-slider':
slider = vnode;
break;
case 'v-tabs-items':
items = vnode;
break;
case 'v-tab-item':
item.push(vnode);
break;
// case 'v-tab' - intentionally omitted
default:
tab.push(vnode);
}
} else {
tab.push(vnode);
}
}
/**
* tab: array of `v-tab`
* slider: single `v-tabs-slider`
* items: single `v-tabs-items`
* item: array of `v-tab-item`
*/
return {
tab,
slider,
items,
item
};
}
},
render(h) {
const {
tab,
slider,
items,
item
} = this.parseNodes();
return h('div', {
staticClass: 'v-tabs',
class: this.classes,
directives: [{
name: 'resize',
modifiers: {
quiet: true
},
value: this.onResize
}]
}, [this.genBar(tab, slider), this.genItems(items, item)]);
}
});
//# sourceMappingURL=VTabs.js.map
File diff suppressed because one or more lines are too long
+80
View File
@@ -0,0 +1,80 @@
// Extensions
import { BaseSlideGroup } from '../VSlideGroup/VSlideGroup'; // Mixins
import Themeable from '../../mixins/themeable';
import SSRBootable from '../../mixins/ssr-bootable'; // Utilities
import mixins from '../../util/mixins';
export default mixins(BaseSlideGroup, SSRBootable, Themeable
/* @vue/component */
).extend({
name: 'v-tabs-bar',
provide() {
return {
tabsBar: this
};
},
computed: {
classes() {
return { ...BaseSlideGroup.options.computed.classes.call(this),
'v-tabs-bar': true,
'v-tabs-bar--is-mobile': this.isMobile,
// TODO: Remove this and move to v-slide-group
'v-tabs-bar--show-arrows': this.showArrows,
...this.themeClasses
};
}
},
watch: {
items: 'callSlider',
internalValue: 'callSlider',
$route: 'onRouteChange'
},
methods: {
callSlider() {
if (!this.isBooted) return;
this.$emit('call:slider');
},
genContent() {
const render = BaseSlideGroup.options.methods.genContent.call(this);
render.data = render.data || {};
render.data.staticClass += ' v-tabs-bar__content';
return render;
},
onRouteChange(val, oldVal) {
/* istanbul ignore next */
if (this.mandatory) return;
const items = this.items;
const newPath = val.path;
const oldPath = oldVal.path;
let hasNew = false;
let hasOld = false;
for (const item of items) {
if (item.to === newPath) hasNew = true;else if (item.to === oldPath) hasOld = true;
if (hasNew && hasOld) break;
} // If we have an old item and not a new one
// it's assumed that the user navigated to
// a path that is not present in the items
if (!hasNew && hasOld) this.internalValue = undefined;
}
},
render(h) {
const render = BaseSlideGroup.options.render.call(this, h);
render.data.attrs = {
role: 'tablist'
};
return render;
}
});
//# sourceMappingURL=VTabsBar.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/components/VTabs/VTabsBar.ts"],"names":[],"mappings":"AAAA;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;AAQA,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,OAAf,CAAuB,QAAvB,CAAgC,OAAhC,CAAwC,IAAxC,CAA6C,IAA7C,CADE;AAEL,sBAAc,IAFT;AAGL,iCAAyB,KAAK,QAHzB;AAIL;AACA,mCAA2B,KAAK,UAL3B;AAML,WAAG,KAAK;AANH,OAAP;AAQD;;AAVO,GATH;AAsBP,EAAA,KAAK,EAAE;AACL,IAAA,KAAK,EAAE,YADF;AAEL,IAAA,aAAa,EAAE,YAFV;AAGL,IAAA,MAAM,EAAE;AAHH,GAtBA;AA4BP,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,OAAvB,CAA+B,UAA/B,CAA0C,IAA1C,CAA+C,IAA/C,CAAf;AAEA,MAAA,MAAM,CAAC,IAAP,GAAc,MAAM,CAAC,IAAP,IAAe,EAA7B;AACA,MAAA,MAAM,CAAC,IAAP,CAAY,WAAZ,IAA2B,sBAA3B;AAEA,aAAO,MAAP;AACD,KAbM;;AAcP,IAAA,aAAa,CAAE,GAAF,EAAc,MAAd,EAA2B;AACtC;AACA,UAAI,KAAK,SAAT,EAAoB;AAEpB,YAAM,KAAK,GAAG,KAAK,KAAnB;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,OAhBqC,CAkBtC;AACA;AACA;;;AACA,UAAI,CAAC,MAAD,IAAW,MAAf,EAAuB,KAAK,aAAL,GAAqB,SAArB;AACxB;;AApCM,GA5BF;;AAmEP,EAAA,MAAM,CAAE,CAAF,EAAG;AACP,UAAM,MAAM,GAAG,cAAc,CAAC,OAAf,CAAuB,MAAvB,CAA8B,IAA9B,CAAmC,IAAnC,EAAyC,CAAzC,CAAf;AAEA,IAAA,MAAM,CAAC,IAAP,CAAa,KAAb,GAAqB;AACnB,MAAA,IAAI,EAAE;AADa,KAArB;AAIA,WAAO,MAAP;AACD;;AA3EM,CALM,CAAf","sourcesContent":["// 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 { Route } from 'vue-router'\nimport { VNode } from 'vue'\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 computed: {\n classes () {\n return {\n ...BaseSlideGroup.options.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.options.methods.genContent.call(this)\n\n render.data = render.data || {}\n render.data.staticClass += ' v-tabs-bar__content'\n\n return render\n },\n onRouteChange (val: Route, oldVal: Route) {\n /* istanbul ignore next */\n if (this.mandatory) return\n\n const items = this.items 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 === newPath) hasNew = true\n else if (item.to === oldPath) hasOld = 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 (h): VNode {\n const render = BaseSlideGroup.options.render.call(this, h)\n\n render.data!.attrs = {\n role: 'tablist',\n }\n\n return render\n },\n})\n"],"sourceRoot":"","file":"VTabsBar.js"}
+34
View File
@@ -0,0 +1,34 @@
// Extensions
import VWindow from '../VWindow/VWindow'; // Types & Components
import { BaseItemGroup } from './../VItemGroup/VItemGroup';
/* @vue/component */
export default VWindow.extend({
name: 'v-tabs-items',
props: {
mandatory: {
type: Boolean,
default: false
}
},
computed: {
classes() {
return { ...VWindow.options.computed.classes.call(this),
'v-tabs-items': true
};
},
isDark() {
return this.rootIsDark;
}
},
methods: {
getValue(item, i) {
return item.id || BaseItemGroup.options.methods.getValue.call(this, item, i);
}
}
});
//# sourceMappingURL=VTabsItems.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/components/VTabs/VTabsItems.ts"],"names":[],"mappings":"AAAA;AACA,OAAO,OAAP,MAAoB,oBAApB,C,CAEA;;AACA,SAAS,aAAT,QAAiD,4BAAjD;AAEA;;AACA,eAAe,OAAO,CAAC,MAAR,CAAe;AAC5B,EAAA,IAAI,EAAE,cADsB;AAG5B,EAAA,KAAK,EAAE;AACL,IAAA,SAAS,EAAE;AACT,MAAA,IAAI,EAAE,OADG;AAET,MAAA,OAAO,EAAE;AAFA;AADN,GAHqB;AAU5B,EAAA,QAAQ,EAAE;AACR,IAAA,OAAO,GAAA;AACL,aAAO,EACL,GAAG,OAAO,CAAC,OAAR,CAAgB,QAAhB,CAAyB,OAAzB,CAAiC,IAAjC,CAAsC,IAAtC,CADE;AAEL,wBAAgB;AAFX,OAAP;AAID,KANO;;AAOR,IAAA,MAAM,GAAA;AACJ,aAAO,KAAK,UAAZ;AACD;;AATO,GAVkB;AAsB5B,EAAA,OAAO,EAAE;AACP,IAAA,QAAQ,CAAE,IAAF,EAA2B,CAA3B,EAAoC;AAC1C,aAAO,IAAI,CAAC,EAAL,IAAW,aAAa,CAAC,OAAd,CAAsB,OAAtB,CAA8B,QAA9B,CAAuC,IAAvC,CAA4C,IAA5C,EAAkD,IAAlD,EAAwD,CAAxD,CAAlB;AACD;;AAHM;AAtBmB,CAAf,CAAf","sourcesContent":["// Extensions\nimport VWindow from '../VWindow/VWindow'\n\n// Types & Components\nimport { BaseItemGroup, GroupableInstance } from './../VItemGroup/VItemGroup'\n\n/* @vue/component */\nexport default VWindow.extend({\n name: 'v-tabs-items',\n\n props: {\n mandatory: {\n type: Boolean,\n default: false,\n },\n },\n\n computed: {\n classes (): object {\n return {\n ...VWindow.options.computed.classes.call(this),\n 'v-tabs-items': true,\n }\n },\n isDark (): boolean {\n return this.rootIsDark\n },\n },\n\n methods: {\n getValue (item: GroupableInstance, i: number) {\n return item.id || BaseItemGroup.options.methods.getValue.call(this, item, i)\n },\n },\n})\n"],"sourceRoot":"","file":"VTabsItems.js"}
+17
View File
@@ -0,0 +1,17 @@
// Mixins
import Colorable from '../../mixins/colorable'; // Utilities
import mixins from '../../util/mixins';
/* @vue/component */
export default mixins(Colorable).extend({
name: 'v-tabs-slider',
render(h) {
return h('div', this.setBackgroundColor(this.color, {
staticClass: 'v-tabs-slider'
}));
}
});
//# sourceMappingURL=VTabsSlider.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/components/VTabs/VTabsSlider.ts"],"names":[],"mappings":"AAAA;AACA,OAAO,SAAP,MAAsB,wBAAtB,C,CAEA;;AACA,OAAO,MAAP,MAAmB,mBAAnB;AAKA;;AACA,eAAe,MAAM,CAAC,SAAD,CAAN,CAAkB,MAAlB,CAAyB;AACtC,EAAA,IAAI,EAAE,eADgC;;AAGtC,EAAA,MAAM,CAAE,CAAF,EAAG;AACP,WAAO,CAAC,CAAC,KAAD,EAAQ,KAAK,kBAAL,CAAwB,KAAK,KAA7B,EAAoC;AAClD,MAAA,WAAW,EAAE;AADqC,KAApC,CAAR,CAAR;AAGD;;AAPqC,CAAzB,CAAf","sourcesContent":["// Mixins\nimport Colorable from '../../mixins/colorable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue/types'\n\n/* @vue/component */\nexport default mixins(Colorable).extend({\n name: 'v-tabs-slider',\n\n render (h): VNode {\n return h('div', this.setBackgroundColor(this.color, {\n staticClass: 'v-tabs-slider',\n }))\n },\n})\n"],"sourceRoot":"","file":"VTabsSlider.js"}
+16
View File
@@ -0,0 +1,16 @@
import VTabs from './VTabs';
import VTab from './VTab';
import VTabsItems from './VTabsItems';
import VTabItem from './VTabItem';
import VTabsSlider from './VTabsSlider';
export { VTabs, VTab, VTabItem, VTabsItems, VTabsSlider };
export default {
$_vuetify_subcomponents: {
VTabs,
VTab,
VTabsItems,
VTabItem,
VTabsSlider
}
};
//# sourceMappingURL=index.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/components/VTabs/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAP,MAAkB,SAAlB;AACA,OAAO,IAAP,MAAiB,QAAjB;AACA,OAAO,UAAP,MAAuB,cAAvB;AACA,OAAO,QAAP,MAAqB,YAArB;AACA,OAAO,WAAP,MAAwB,eAAxB;AAEA,SAAS,KAAT,EAAgB,IAAhB,EAAsB,QAAtB,EAAgC,UAAhC,EAA4C,WAA5C;AAEA,eAAe;AACb,EAAA,uBAAuB,EAAE;AACvB,IAAA,KADuB;AAEvB,IAAA,IAFuB;AAGvB,IAAA,UAHuB;AAIvB,IAAA,QAJuB;AAKvB,IAAA;AALuB;AADZ,CAAf","sourcesContent":["import VTabs from './VTabs'\nimport VTab from './VTab'\nimport VTabsItems from './VTabsItems'\nimport VTabItem from './VTabItem'\nimport VTabsSlider from './VTabsSlider'\n\nexport { VTabs, VTab, VTabItem, VTabsItems, VTabsSlider }\n\nexport default {\n $_vuetify_subcomponents: {\n VTabs,\n VTab,\n VTabsItems,\n VTabItem,\n VTabsSlider,\n },\n}\n"],"sourceRoot":"","file":"index.js"}