@vuesax-alpha/nightly
Version:
A Component Library for Vue 3
75 lines (72 loc) • 1.92 kB
JavaScript
import { computeCoordsFromPlacement } from './compute-coord-from-placement.mjs';
const computePosition = async (reference, floating, config) => {
var _a;
const {
placement = "bottom",
strategy = "absolute",
middleware = [],
platform
} = config;
const validMiddleware = middleware.filter(Boolean);
const rtl = await ((_a = platform.isRTL) == null ? void 0 : _a.call(platform, floating));
let rects = await platform.getElementRects({ reference, floating, strategy });
let { x, y } = computeCoordsFromPlacement(rects, placement, rtl);
let statefulPlacement = placement;
let middlewareData = {};
let resetCount = 0;
for (let i = 0; i < validMiddleware.length; i++) {
const { name, fn } = validMiddleware[i];
const {
x: nextX,
y: nextY,
data,
reset
} = await fn({
x,
y,
initialPlacement: placement,
placement: statefulPlacement,
strategy,
middlewareData,
rects,
platform,
elements: { reference, floating }
});
x = nextX != null ? nextX : x;
y = nextY != null ? nextY : y;
middlewareData = {
...middlewareData,
[name]: {
...middlewareData[name],
...data
}
};
if (reset && resetCount <= 50) {
resetCount++;
if (typeof reset === "object") {
if (reset.placement) {
statefulPlacement = reset.placement;
}
if (reset.rects) {
rects = reset.rects === true ? await platform.getElementRects({
reference,
floating,
strategy
}) : reset.rects;
}
;
({ x, y } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));
}
i = -1;
}
}
return {
x,
y,
placement: statefulPlacement,
strategy,
middlewareData
};
};
export { computePosition };
//# sourceMappingURL=compute-position.mjs.map