70 lines
1.7 KiB
JavaScript
70 lines
1.7 KiB
JavaScript
|
import getBasePlacement from "./getBasePlacement.js";
|
||
|
import getVariation from "./getVariation.js";
|
||
|
import getMainAxisFromPlacement from "./getMainAxisFromPlacement.js";
|
||
|
import { top, right, bottom, left, start, end } from "../enums.js";
|
||
|
export default function computeOffsets(_ref) {
|
||
|
var reference = _ref.reference,
|
||
|
element = _ref.element,
|
||
|
placement = _ref.placement;
|
||
|
var basePlacement = placement ? getBasePlacement(placement) : null;
|
||
|
var variation = placement ? getVariation(placement) : null;
|
||
|
var commonX = reference.x + reference.width / 2 - element.width / 2;
|
||
|
var commonY = reference.y + reference.height / 2 - element.height / 2;
|
||
|
var offsets;
|
||
|
|
||
|
switch (basePlacement) {
|
||
|
case top:
|
||
|
offsets = {
|
||
|
x: commonX,
|
||
|
y: reference.y - element.height
|
||
|
};
|
||
|
break;
|
||
|
|
||
|
case bottom:
|
||
|
offsets = {
|
||
|
x: commonX,
|
||
|
y: reference.y + reference.height
|
||
|
};
|
||
|
break;
|
||
|
|
||
|
case right:
|
||
|
offsets = {
|
||
|
x: reference.x + reference.width,
|
||
|
y: commonY
|
||
|
};
|
||
|
break;
|
||
|
|
||
|
case left:
|
||
|
offsets = {
|
||
|
x: reference.x - element.width,
|
||
|
y: commonY
|
||
|
};
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
offsets = {
|
||
|
x: reference.x,
|
||
|
y: reference.y
|
||
|
};
|
||
|
}
|
||
|
|
||
|
var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
|
||
|
|
||
|
if (mainAxis != null) {
|
||
|
var len = mainAxis === 'y' ? 'height' : 'width';
|
||
|
|
||
|
switch (variation) {
|
||
|
case start:
|
||
|
offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
|
||
|
break;
|
||
|
|
||
|
case end:
|
||
|
offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return offsets;
|
||
|
}
|