49 lines
1.7 KiB
JavaScript

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
/**
* Menu position
*
* @mixin
*
* Used for calculating an automatic position (used for VSelect)
* Will position the VMenu content properly over the VSelect
*/
/* @vue/component */
exports.default = {
data: function data() {
return {
calculatedTopAuto: 0
};
},
methods: {
calcScrollPosition: function calcScrollPosition() {
var $el = this.$refs.content;
var activeTile = $el.querySelector('.v-list__tile--active');
var maxScrollTop = $el.scrollHeight - $el.offsetHeight;
return activeTile ? Math.min(maxScrollTop, Math.max(0, activeTile.offsetTop - $el.offsetHeight / 2 + activeTile.offsetHeight / 2)) : $el.scrollTop;
},
calcLeftAuto: function calcLeftAuto() {
if (this.isAttached) return 0;
return parseInt(this.dimensions.activator.left - this.defaultOffset * 2);
},
calcTopAuto: function calcTopAuto() {
var $el = this.$refs.content;
var activeTile = $el.querySelector('.v-list__tile--active');
if (!activeTile) {
this.selectedIndex = null;
}
if (this.offsetY || !activeTile) {
return this.computedTop;
}
this.selectedIndex = Array.from(this.tiles).indexOf(activeTile);
var tileDistanceFromMenuTop = activeTile.offsetTop - this.calcScrollPosition();
var firstTileOffsetTop = $el.querySelector('.v-list__tile').offsetTop;
return this.computedTop - tileDistanceFromMenuTop - firstTileOffsetTop;
}
}
};
//# sourceMappingURL=menu-position.js.map