@nex-ui/react
Version:
🎉 A beautiful, modern, and reliable React component library.
85 lines (82 loc) • 2.52 kB
JavaScript
;
const getSide = (placement)=>{
return placement.split('-')[0];
};
const getAlignment = (placement)=>{
return placement.split('-')[1];
};
const isWebKit = ()=>{
if (typeof CSS === 'undefined' || !CSS.supports) return false;
/* istanbul ignore next */ return CSS.supports('-webkit-backdrop-filter', 'none');
};
const oppositeSide = {
top: 'bottom',
right: 'left',
bottom: 'top',
left: 'right'
};
const getOppositeSide = (side)=>{
return oppositeSide[side];
};
const getOppositeAlignment = (alignment)=>{
return alignment === 'start' ? 'end' : 'start';
};
const getFallbackPlacements = (placement, flipAlignment)=>{
const side = getSide(placement);
const alignment = getAlignment(placement);
const oppositeSide = getOppositeSide(side);
if (!alignment) {
return [
oppositeSide
];
}
if (!flipAlignment) {
return [
`${oppositeSide}-${alignment}`
];
}
const oppositeAlignment = getOppositeAlignment(alignment);
return [
`${side}-${oppositeAlignment}`,
`${oppositeSide}-${alignment}`,
`${oppositeSide}-${oppositeAlignment}`
];
};
const getOppositeAxis = (axis)=>{
return axis === 'x' ? 'y' : 'x';
};
const yAxisSides = new Set([
'top',
'bottom'
]);
const getSideAxis = (placement)=>{
return yAxisSides.has(getSide(placement)) ? 'y' : 'x';
};
const getAlignmentAxis = (placement)=>{
return getOppositeAxis(getSideAxis(placement));
};
const getAxisLength = (axis)=>{
return axis === 'y' ? 'height' : 'width';
};
const getAlignmentSides = (placement, rects)=>{
const alignment = getAlignment(placement);
const alignmentAxis = getAlignmentAxis(placement);
const length = getAxisLength(alignmentAxis);
let mainAlignmentSide = alignmentAxis === 'x' ? alignment === 'start' ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';
if (rects.reference[length] > rects.popper[length]) {
mainAlignmentSide = getOppositeSide(mainAlignmentSide);
}
return [
mainAlignmentSide,
getOppositeSide(mainAlignmentSide)
];
};
exports.getAlignment = getAlignment;
exports.getAlignmentAxis = getAlignmentAxis;
exports.getAlignmentSides = getAlignmentSides;
exports.getAxisLength = getAxisLength;
exports.getFallbackPlacements = getFallbackPlacements;
exports.getOppositeAxis = getOppositeAxis;
exports.getSide = getSide;
exports.getSideAxis = getSideAxis;
exports.isWebKit = isWebKit;