import type { PopperPlacementType } from '@mui/material'; import { styled } from '../../styles'; export type PopperDirection = | 'none' | 'left-top' | 'left-bottom' | 'right-top' | 'right-bottom'; const getBorderRadius = (direction: PopperDirection, radius = '0') => { const map: Record = { none: `${radius}`, 'left-top': `0 ${radius} ${radius} ${radius}`, 'left-bottom': `${radius} ${radius} ${radius} 0`, 'right-top': `${radius} 0 ${radius} ${radius}`, 'right-bottom': `${radius} ${radius} 0 ${radius}`, }; return map[direction]; }; export const placementToContainerDirection: Record< PopperPlacementType, PopperDirection > = { top: 'none', 'top-start': 'left-bottom', 'top-end': 'right-bottom', right: 'none', 'right-start': 'left-top', 'right-end': 'left-bottom', bottom: 'none', 'bottom-start': 'left-top', 'bottom-end': 'right-top', left: 'none', 'left-start': 'right-top', 'left-end': 'right-bottom', auto: 'none', 'auto-start': 'none', 'auto-end': 'none', }; export const StyledPopperContainer = styled('div')<{ placement?: PopperPlacementType; }>(({ theme, placement = 'top' }) => { const direction = placementToContainerDirection[placement]; const borderRadius = getBorderRadius( direction, 'var(--affine-popover-radius)' ); return { borderRadius, }; }); export default StyledPopperContainer;