vuetify eingebunden + erster Versuch Combobox

This commit is contained in:
2019-04-17 15:58:15 +02:00
parent 24642ca1a8
commit 56f4a3f940
1846 changed files with 219701 additions and 53848 deletions
+118
View File
@@ -0,0 +1,118 @@
// Styles
import '../../../src/stylus/components/_windows.styl';
// Components
import { BaseItemGroup } from '../VItemGroup/VItemGroup';
// Directives
import Touch from '../../directives/touch';
/* @vue/component */
export default BaseItemGroup.extend({
name: 'v-window',
provide: function provide() {
return {
windowGroup: this
};
},
directives: { Touch: Touch },
props: {
mandatory: {
type: Boolean,
default: true
},
reverse: {
type: Boolean,
default: undefined
},
touch: Object,
touchless: Boolean,
value: {
required: false
},
vertical: Boolean
},
data: function data() {
return {
internalHeight: undefined,
isActive: false,
isBooted: false,
isReverse: false
};
},
computed: {
computedTransition: function computedTransition() {
if (!this.isBooted) return '';
var axis = this.vertical ? 'y' : 'x';
var direction = this.internalReverse === !this.$vuetify.rtl ? '-reverse' : '';
return 'v-window-' + axis + direction + '-transition';
},
internalIndex: function internalIndex() {
var _this = this;
return this.items.findIndex(function (item, i) {
return _this.internalValue === _this.getValue(item, i);
});
},
internalReverse: function internalReverse() {
if (this.reverse !== undefined) return this.reverse;
return this.isReverse;
}
},
watch: {
internalIndex: 'updateReverse'
},
mounted: function mounted() {
var _this2 = this;
this.$nextTick(function () {
return _this2.isBooted = true;
});
},
methods: {
genContainer: function genContainer() {
return this.$createElement('div', {
staticClass: 'v-window__container',
class: {
'v-window__container--is-active': this.isActive
},
style: {
height: this.internalHeight
}
}, this.$slots.default);
},
next: function next() {
this.isReverse = false;
var nextIndex = (this.internalIndex + 1) % this.items.length;
var item = this.items[nextIndex];
this.internalValue = this.getValue(item, nextIndex);
},
prev: function prev() {
this.isReverse = true;
var lastIndex = (this.internalIndex + this.items.length - 1) % this.items.length;
var item = this.items[lastIndex];
this.internalValue = this.getValue(item, lastIndex);
},
updateReverse: function updateReverse(val, oldVal) {
this.isReverse = val < oldVal;
}
},
render: function render(h) {
var data = {
staticClass: 'v-window',
directives: []
};
if (!this.touchless) {
var value = this.touch || {
left: this.next,
right: this.prev
};
data.directives.push({
name: 'touch',
value: value
});
}
return h('div', data, [this.genContainer()]);
}
});
//# sourceMappingURL=VWindow.js.map
File diff suppressed because one or more lines are too long
+123
View File
@@ -0,0 +1,123 @@
// Mixins
import Bootable from '../../mixins/bootable';
import { factory as GroupableFactory } from '../../mixins/groupable';
// Directives
import Touch from '../../directives/touch';
// Utilities
import { convertToUnit } from '../../util/helpers';
import mixins from '../../util/mixins';
export default mixins(Bootable, GroupableFactory('windowGroup', 'v-window-item', 'v-window')
/* @vue/component */
).extend({
name: 'v-window-item',
directives: {
Touch: Touch
},
props: {
reverseTransition: {
type: [Boolean, String],
default: undefined
},
transition: {
type: [Boolean, String],
default: undefined
},
value: {
required: false
}
},
data: function data() {
return {
done: null,
isActive: false,
wasCancelled: false
};
},
computed: {
computedTransition: function computedTransition() {
if (!this.windowGroup.internalReverse) {
return typeof this.transition !== 'undefined' ? this.transition || '' : this.windowGroup.computedTransition;
}
return typeof this.reverseTransition !== 'undefined' ? this.reverseTransition || '' : this.windowGroup.computedTransition;
}
},
mounted: function mounted() {
this.$el.addEventListener('transitionend', this.onTransitionEnd, false);
},
beforeDestroy: function beforeDestroy() {
this.$el.removeEventListener('transitionend', this.onTransitionEnd, false);
},
methods: {
genDefaultSlot: function genDefaultSlot() {
return this.$slots.default;
},
onAfterEnter: function onAfterEnter() {
var _this = this;
if (this.wasCancelled) {
this.wasCancelled = false;
return;
}
requestAnimationFrame(function () {
_this.windowGroup.internalHeight = undefined;
_this.windowGroup.isActive = false;
});
},
onBeforeEnter: function onBeforeEnter() {
this.windowGroup.isActive = true;
},
onLeave: function onLeave(el) {
this.windowGroup.internalHeight = convertToUnit(el.clientHeight);
},
onEnterCancelled: function onEnterCancelled() {
this.wasCancelled = true;
},
onEnter: function onEnter(el, done) {
var _this2 = this;
var isBooted = this.windowGroup.isBooted;
if (isBooted) this.done = done;
requestAnimationFrame(function () {
if (!_this2.computedTransition) return done();
_this2.windowGroup.internalHeight = convertToUnit(el.clientHeight);
// On initial render, there is no transition
// Vue leaves a `enter` transition class
// if done is called too fast
!isBooted && setTimeout(done, 100);
});
},
onTransitionEnd: function onTransitionEnd(e) {
// This ensures we only call done
// when the element transform
// completes
if (e.propertyName !== 'transform' || e.target !== this.$el || !this.done) return;
this.done();
this.done = null;
}
},
render: function render(h) {
var div = h('div', {
staticClass: 'v-window-item',
directives: [{
name: 'show',
value: this.isActive
}],
on: this.$listeners
}, this.showLazyContent(this.genDefaultSlot()));
return h('transition', {
props: {
name: this.computedTransition
},
on: {
afterEnter: this.onAfterEnter,
beforeEnter: this.onBeforeEnter,
leave: this.onLeave,
enter: this.onEnter,
enterCancelled: this.onEnterCancelled
}
}, [div]);
}
});
//# sourceMappingURL=VWindowItem.js.map
File diff suppressed because one or more lines are too long
+10
View File
@@ -0,0 +1,10 @@
import VWindow from './VWindow';
import VWindowItem from './VWindowItem';
export { VWindow, VWindowItem };
export default {
$_vuetify_subcomponents: {
VWindow: VWindow,
VWindowItem: VWindowItem
}
};
//# sourceMappingURL=index.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/components/VWindow/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAP,MAAoB,WAApB;AACA,OAAO,WAAP,MAAwB,eAAxB;AAEA,SAAS,OAAT,EAAkB,WAAlB;AAEA,eAAe;AACb,6BAAyB;AACvB,wBADuB;AAEvB;AAFuB;AADZ,CAAf","sourcesContent":["import VWindow from './VWindow'\nimport VWindowItem from './VWindowItem'\n\nexport { VWindow, VWindowItem }\n\nexport default {\n $_vuetify_subcomponents: {\n VWindow,\n VWindowItem\n }\n}\n"],"sourceRoot":""}