code: function getPopperOffsets(popper, referenceOffsets, placement) {
    placement = placement.split('-')[0];
  
    // Get popper node sizes
    const popperRect = getOuterSizes(popper);
  
    // Add position, width and height to our offsets object
    const popperOffsets = {
      width: popperRect.width,
      height: popperRect.height
    };
  
    // depending by the popper placement we have to compute its offsets slightly differently
    const isHoriz = ['right', 'left'].indexOf(placement) !== -1;
    const mainSide = isHoriz ? 'top' : 'left';
    const secondarySide = isHoriz ? 'left' : 'top';
    const measurement = isHoriz ? 'height' : 'width';
    const secondaryMeasurement = !isHoriz ? 'height' : 'width';
  
    popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;
    if (placement === secondarySide) {
      popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];
    } else {
      popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];
    }
  
    return popperOffsets;
  }
docs: Get offsets to the popper
  @method
  @memberof Popper.Utils
  @param {Object} position - CSS position the Popper will get applied
  @param {HTMLElement} popper - the popper element
  @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)
  @param {String} placement - one of the valid placement options
  @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper