// Styles import "../../../src/components/VBanner/VBanner.sass"; // Extensions import VSheet from '../VSheet'; // Components import VAvatar from '../VAvatar'; import VIcon from '../VIcon'; import { VExpandTransition } from '../transitions'; // Mixins import Toggleable from '../../mixins/toggleable'; import mixins from '../../util/mixins'; /* @vue/component */ export default mixins(VSheet, Toggleable).extend({ name: 'v-banner', inheritAttrs: false, props: { icon: String, iconColor: String, mobileBreakPoint: { type: [Number, String], default: 960 }, singleLine: Boolean, sticky: Boolean, tile: { type: Boolean, default: true }, value: { type: Boolean, default: true } }, computed: { classes() { return { ...VSheet.options.computed.classes.call(this), 'v-banner--has-icon': this.hasIcon, 'v-banner--is-mobile': this.isMobile, 'v-banner--single-line': this.singleLine, 'v-banner--sticky': this.sticky }; }, hasActions() { return Boolean(this.$slots.actions || this.$scopedSlots.actions); }, hasIcon() { return Boolean(this.icon || this.$slots.icon); }, isMobile() { return this.$vuetify.breakpoint.width < Number(this.mobileBreakPoint); }, styles() { const styles = VSheet.options.computed.styles.call(this); if (!this.sticky) return styles; const { bar, top } = this.$vuetify.application; return { ...styles, position: 'sticky', top: `${bar + top}px`, zIndex: 1 }; } }, methods: { /** @public */ toggle() { this.isActive = !this.isActive; }, iconClick(e) { this.$emit('click:icon', e); }, genIcon() { if (!this.hasIcon) return undefined; let content; if (this.icon) { content = this.$createElement(VIcon, { props: { color: this.iconColor, size: 28 } }, [this.icon]); } else { content = this.$slots.icon; } return this.$createElement(VAvatar, { staticClass: 'v-banner__icon', props: { color: this.color, size: 40 }, on: { click: this.iconClick } }, [content]); }, genText() { return this.$createElement('div', { staticClass: 'v-banner__text' }, this.$slots.default); }, genActions() { if (!this.hasActions) return undefined; const children = this.$scopedSlots.actions ? this.$scopedSlots.actions({ dismiss: () => this.isActive = false }) : this.$slots.actions; return this.$createElement('div', { staticClass: 'v-banner__actions' }, children); }, genContent() { return this.$createElement('div', { staticClass: 'v-banner__content' }, [this.genIcon(), this.genText()]); }, genWrapper() { return this.$createElement('div', { staticClass: 'v-banner__wrapper' }, [this.genContent(), this.genActions()]); } }, render(h) { return h(VExpandTransition, [h('div', { staticClass: 'v-banner', class: this.classes, style: this.styles, directives: [{ name: 'show', value: this.isActive }] }, [this.genWrapper()])]); } }); //# sourceMappingURL=VBanner.js.map