| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | // @flowimport getBasePlacement from './getBasePlacement';import getVariation from './getVariation';import getMainAxisFromPlacement from './getMainAxisFromPlacement';import type {  Rect,  PositioningStrategy,  Offsets,  ClientRectObject,} from '../types';import { top, right, bottom, left, start, end, type Placement } from '../enums';export default function computeOffsets({  reference,  element,  placement,}: {  reference: Rect | ClientRectObject,  element: Rect | ClientRectObject,  strategy: PositioningStrategy,  placement?: Placement,}): Offsets {  const basePlacement = placement ? getBasePlacement(placement) : null;  const variation = placement ? getVariation(placement) : null;  const commonX = reference.x + reference.width / 2 - element.width / 2;  const commonY = reference.y + reference.height / 2 - element.height / 2;  let offsets;  switch (basePlacement) {    case top:      offsets = {        x: commonX,        y: reference.y - element.height,      };      break;    case bottom:      offsets = {        x: commonX,        y: reference.y + reference.height,      };      break;    case right:      offsets = {        x: reference.x + reference.width,        y: commonY,      };      break;    case left:      offsets = {        x: reference.x - element.width,        y: commonY,      };      break;    default:      offsets = {        x: reference.x,        y: reference.y,      };  }  const mainAxis = basePlacement    ? getMainAxisFromPlacement(basePlacement)    : null;  if (mainAxis != null) {    const len = mainAxis === 'y' ? 'height' : 'width';    switch (variation) {      case start:        offsets[mainAxis] =          offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);        break;      case end:        offsets[mainAxis] =          offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);        break;      default:    }  }  return offsets;}
 |