This repository has been archived on 2024-07-27. You can view files and clone it, but cannot push or open issues or pull requests.
keksAccountGUI/node_modulesOLD/vuetify/lib/components/VAlert/VAlert.js
2019-08-11 20:48:02 +02:00

237 lines
No EOL
5.4 KiB
JavaScript

// Styles
import "../../../src/components/VAlert/VAlert.sass"; // Extensions
import VSheet from '../VSheet'; // Components
import VBtn from '../VBtn';
import VIcon from '../VIcon'; // Mixins
import Toggleable from '../../mixins/toggleable';
import Themeable from '../../mixins/themeable';
import Transitionable from '../../mixins/transitionable'; // Utilities
import mixins from '../../util/mixins';
import { breaking } from '../../util/console';
/* @vue/component */
export default mixins(VSheet, Toggleable, Transitionable).extend({
name: 'v-alert',
props: {
border: {
type: String,
validator(val) {
return ['top', 'right', 'bottom', 'left'].includes(val);
}
},
closeLabel: {
type: String,
default: '$vuetify.close'
},
coloredBorder: Boolean,
dense: Boolean,
dismissible: Boolean,
icon: {
default: '',
type: [Boolean, String],
validator(val) {
return typeof val === 'string' || val === false;
}
},
outlined: Boolean,
prominent: Boolean,
text: Boolean,
type: {
type: String,
validator(val) {
return ['info', 'error', 'success', 'warning'].includes(val);
}
},
value: {
type: Boolean,
default: true
}
},
computed: {
__cachedBorder() {
if (!this.border) return null;
let data = {
staticClass: 'v-alert__border',
class: {
[`v-alert__border--${this.border}`]: true
}
};
if (this.coloredBorder) {
data = this.setBackgroundColor(this.computedColor, data);
data.class['v-alert__border--has-color'] = true;
}
return this.$createElement('div', data);
},
__cachedDismissible() {
if (!this.dismissible) return null;
const color = this.iconColor;
return this.$createElement(VBtn, {
staticClass: 'v-alert__dismissible',
props: {
color,
icon: true
},
attrs: {
'aria-label': this.$vuetify.lang.t(this.closeLabel)
},
on: {
click: () => this.isActive = false
}
}, [this.$createElement(VIcon, {
props: {
color
}
}, '$vuetify.icons.cancel')]);
},
__cachedIcon() {
if (!this.computedIcon) return null;
return this.$createElement(VIcon, {
staticClass: 'v-alert__icon',
props: {
color: this.iconColor
}
}, this.computedIcon);
},
classes() {
const classes = { ...VSheet.options.computed.classes.call(this),
'v-alert--border': Boolean(this.border),
'v-alert--dense': this.dense,
'v-alert--outlined': this.outlined,
'v-alert--prominent': this.prominent,
'v-alert--text': this.text
};
if (this.border) {
classes[`v-alert--border-${this.border}`] = true;
}
return classes;
},
computedColor() {
return this.color || this.type;
},
computedIcon() {
if (this.icon === false) return false;
if (typeof this.icon === 'string' && this.icon) return this.icon;
switch (this.type) {
case 'info':
return '$vuetify.icons.info';
case 'error':
return '$vuetify.icons.error';
case 'success':
return '$vuetify.icons.success';
case 'warning':
return '$vuetify.icons.warning';
default:
return false;
}
},
hasColoredIcon() {
return this.hasText || Boolean(this.border) && this.coloredBorder;
},
hasText() {
return this.text || this.outlined;
},
iconColor() {
return this.hasColoredIcon ? this.computedColor : undefined;
},
isDark() {
if (this.type && !this.coloredBorder && !this.outlined) return true;
return Themeable.options.computed.isDark.call(this);
}
},
created() {
/* istanbul ignore next */
if (this.$attrs.hasOwnProperty('outline')) {
breaking('outline', 'outlined', this);
}
},
methods: {
genWrapper() {
const children = [this.$slots.prepend || this.__cachedIcon, this.genContent(), this.__cachedBorder, this.$slots.append, this.$scopedSlots.close ? this.$scopedSlots.close({
toggle: this.toggle
}) : this.__cachedDismissible];
const data = {
staticClass: 'v-alert__wrapper'
};
return this.$createElement('div', data, children);
},
genContent() {
return this.$createElement('div', {
staticClass: 'v-alert__content'
}, this.$slots.default);
},
genAlert() {
let data = {
staticClass: 'v-alert',
attrs: {
role: 'alert'
},
class: this.classes,
style: this.styles,
directives: [{
name: 'show',
value: this.isActive
}]
};
if (!this.coloredBorder) {
const setColor = this.hasText ? this.setTextColor : this.setBackgroundColor;
data = setColor(this.computedColor, data);
}
return this.$createElement('div', data, [this.genWrapper()]);
},
/** @public */
toggle() {
this.isActive = !this.isActive;
}
},
render(h) {
const render = this.genAlert();
if (!this.transition) return render;
return h('transition', {
props: {
name: this.transition,
origin: this.origin,
mode: this.mode
}
}, [render]);
}
});
//# sourceMappingURL=VAlert.js.map