53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
|
import getBasePlacement from "../utils/getBasePlacement.js";
|
||
|
import { top, left, right, placements } from "../enums.js";
|
||
|
export function distanceAndSkiddingToXY(placement, rects, offset) {
|
||
|
var basePlacement = getBasePlacement(placement);
|
||
|
var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
|
||
|
|
||
|
var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
|
||
|
placement: placement
|
||
|
})) : offset,
|
||
|
skidding = _ref[0],
|
||
|
distance = _ref[1];
|
||
|
|
||
|
skidding = skidding || 0;
|
||
|
distance = (distance || 0) * invertDistance;
|
||
|
return [left, right].indexOf(basePlacement) >= 0 ? {
|
||
|
x: distance,
|
||
|
y: skidding
|
||
|
} : {
|
||
|
x: skidding,
|
||
|
y: distance
|
||
|
};
|
||
|
}
|
||
|
|
||
|
function offset(_ref2) {
|
||
|
var state = _ref2.state,
|
||
|
options = _ref2.options,
|
||
|
name = _ref2.name;
|
||
|
var _options$offset = options.offset,
|
||
|
offset = _options$offset === void 0 ? [0, 0] : _options$offset;
|
||
|
var data = placements.reduce(function (acc, placement) {
|
||
|
acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
|
||
|
return acc;
|
||
|
}, {});
|
||
|
var _data$state$placement = data[state.placement],
|
||
|
x = _data$state$placement.x,
|
||
|
y = _data$state$placement.y;
|
||
|
|
||
|
if (state.modifiersData.popperOffsets != null) {
|
||
|
state.modifiersData.popperOffsets.x += x;
|
||
|
state.modifiersData.popperOffsets.y += y;
|
||
|
}
|
||
|
|
||
|
state.modifiersData[name] = data;
|
||
|
} // eslint-disable-next-line import/no-unused-modules
|
||
|
|
||
|
|
||
|
export default {
|
||
|
name: 'offset',
|
||
|
enabled: true,
|
||
|
phase: 'main',
|
||
|
requires: ['popperOffsets'],
|
||
|
fn: offset
|
||
|
};
|