@gravity-ui/uikit
Version:
Gravity UI base styling and components
82 lines (81 loc) • 2.57 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.arrowStylesMiddleware = void 0;
exports.getOffsetOptions = getOffsetOptions;
exports.getPlacementOptions = getPlacementOptions;
const react_1 = require("@floating-ui/react");
const constants_1 = require("./constants.js");
function getOffsetOptions(offsetProp, hasArrow) {
let offset = offsetProp;
if (hasArrow) {
if (typeof offset === 'number') {
offset += constants_1.ARROW_SIZE;
}
else {
offset = { ...offset, mainAxis: (offset.mainAxis ?? 0) + constants_1.ARROW_SIZE };
}
}
return { offset };
}
function isAutoPlacement(placement) {
return Boolean(placement && constants_1.AUTO_PLACEMENTS.includes(placement));
}
function getPlacementOptions(placementProp, disablePortal) {
let placement;
let middleware;
if (Array.isArray(placementProp)) {
placement = placementProp[0];
middleware = (0, react_1.flip)({
padding: constants_1.OVERFLOW_PADDING,
altBoundary: disablePortal,
fallbackPlacements: placementProp.slice(1),
});
}
else if (isAutoPlacement(placementProp)) {
let alignment;
if (placementProp === 'auto-start') {
alignment = 'start';
}
else if (placementProp === 'auto-end') {
alignment = 'end';
}
placement = undefined;
middleware = (0, react_1.autoPlacement)({
padding: constants_1.OVERFLOW_PADDING,
altBoundary: disablePortal,
alignment,
});
}
else {
let fallbackAxisSideDirection;
if (placementProp?.startsWith('top') || placementProp?.startsWith('left')) {
fallbackAxisSideDirection = 'start';
}
else {
fallbackAxisSideDirection = 'end';
}
placement = placementProp;
middleware = (0, react_1.flip)({
padding: constants_1.OVERFLOW_PADDING,
altBoundary: disablePortal,
fallbackAxisSideDirection,
});
}
return { placement, middleware };
}
const arrowStylesMiddleware = () => ({
name: 'arrowStyles',
fn({ middlewareData }) {
if (!middlewareData.arrow) {
return {};
}
return {
data: {
left: middlewareData.arrow.x,
top: middlewareData.arrow.y,
},
};
},
});
exports.arrowStylesMiddleware = arrowStylesMiddleware;
//# sourceMappingURL=utils.js.map
;