UNPKG

@nex-ui/react

Version:

🎉 A beautiful, modern, and reliable React component library.

85 lines (82 loc) • 2.52 kB
'use strict'; 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;