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/VProgressLinear/VProgressLinear.js
2019-08-11 20:48:02 +02:00

228 lines
No EOL
5.8 KiB
JavaScript

import "../../../src/components/VProgressLinear/VProgressLinear.sass"; // Components
import { VFadeTransition, VSlideXTransition } from '../transitions'; // Mixins
import Colorable from '../../mixins/colorable';
import { factory as PositionableFactory } from '../../mixins/positionable';
import Proxyable from '../../mixins/proxyable';
import Themeable from '../../mixins/themeable'; // Utilities
import { convertToUnit, getSlot } from '../../util/helpers';
import mixins from '../../util/mixins';
const baseMixins = mixins(Colorable, PositionableFactory(['absolute', 'fixed', 'top', 'bottom']), Proxyable, Themeable);
/* @vue/component */
export default baseMixins.extend({
name: 'v-progress-linear',
props: {
active: {
type: Boolean,
default: true
},
backgroundColor: {
type: String,
default: null
},
backgroundOpacity: {
type: [Number, String],
default: null
},
bufferValue: {
type: [Number, String],
default: 100
},
color: {
type: String,
default: 'primary'
},
height: {
type: [Number, String],
default: 4
},
indeterminate: Boolean,
query: Boolean,
rounded: Boolean,
stream: Boolean,
striped: Boolean,
value: {
type: [Number, String],
default: 0
}
},
data() {
return {
internalLazyValue: this.value || 0
};
},
computed: {
__cachedBackground() {
return this.$createElement('div', this.setBackgroundColor(this.backgroundColor || this.color, {
staticClass: 'v-progress-linear__background',
style: this.backgroundStyle
}));
},
__cachedBar() {
return this.$createElement(this.computedTransition, [this.__cachedBarType]);
},
__cachedBarType() {
return this.indeterminate ? this.__cachedIndeterminate : this.__cachedDeterminate;
},
__cachedBuffer() {
return this.$createElement('div', {
staticClass: 'v-progress-linear__buffer',
style: this.styles
});
},
__cachedDeterminate() {
return this.$createElement('div', this.setBackgroundColor(this.color, {
staticClass: `v-progress-linear__determinate`,
style: {
width: convertToUnit(this.normalizedValue, '%')
}
}));
},
__cachedIndeterminate() {
return this.$createElement('div', {
staticClass: 'v-progress-linear__indeterminate',
class: {
'v-progress-linear__indeterminate--active': this.active
}
}, [this.genProgressBar('long'), this.genProgressBar('short')]);
},
__cachedStream() {
if (!this.stream) return null;
return this.$createElement('div', this.setTextColor(this.color, {
staticClass: 'v-progress-linear__stream',
style: {
width: convertToUnit(100 - this.normalizedBuffer, '%')
}
}));
},
backgroundStyle() {
const backgroundOpacity = this.backgroundOpacity == null ? this.backgroundColor ? 1 : 0.3 : parseFloat(this.backgroundOpacity);
return {
opacity: backgroundOpacity,
width: convertToUnit(this.normalizedBuffer, '%')
};
},
classes() {
return {
'v-progress-linear--absolute': this.absolute,
'v-progress-linear--fixed': this.fixed,
'v-progress-linear--query': this.query,
'v-progress-linear--reactive': this.reactive,
'v-progress-linear--rounded': this.rounded,
'v-progress-linear--striped': this.striped,
...this.themeClasses
};
},
computedTransition() {
return this.indeterminate ? VFadeTransition : VSlideXTransition;
},
normalizedBuffer() {
return this.normalize(this.bufferValue);
},
normalizedValue() {
return this.normalize(this.internalLazyValue);
},
reactive() {
return Boolean(this.$listeners.change);
},
styles() {
const styles = {};
if (!this.active) {
styles.height = 0;
}
if (!this.indeterminate && parseFloat(this.normalizedBuffer) !== 100) {
styles.width = convertToUnit(this.normalizedBuffer, '%');
}
return styles;
}
},
methods: {
genContent() {
const slot = getSlot(this, 'default', {
value: this.internalLazyValue
});
if (!slot) return null;
return this.$createElement('div', {
staticClass: 'v-progress-linear__content'
}, slot);
},
genListeners() {
const listeners = this.$listeners;
if (this.reactive) {
listeners.click = this.onClick;
}
return listeners;
},
genProgressBar(name) {
return this.$createElement('div', this.setBackgroundColor(this.color, {
staticClass: 'v-progress-linear__indeterminate',
class: {
[name]: true
}
}));
},
onClick(e) {
if (!this.reactive) return;
const {
width
} = this.$el.getBoundingClientRect();
this.internalValue = e.offsetX / width * 100;
},
normalize(value) {
if (value < 0) return 0;
if (value > 100) return 100;
return parseFloat(value);
}
},
render(h) {
const data = {
staticClass: 'v-progress-linear',
attrs: {
role: 'progressbar',
'aria-valuemin': 0,
'aria-valuemax': this.normalizedBuffer,
'aria-valuenow': this.indeterminate ? undefined : this.normalizedValue
},
class: this.classes,
style: {
bottom: this.bottom ? 0 : undefined,
height: this.active ? convertToUnit(this.height) : 0,
top: this.top ? 0 : undefined
},
on: this.genListeners()
};
return h('div', data, [this.__cachedStream, this.__cachedBackground, this.__cachedBuffer, this.__cachedBar, this.genContent()]);
}
});
//# sourceMappingURL=VProgressLinear.js.map