export declare enum Location {
    start = "start",
    center = "center",
    end = "end"
}
export interface IOrigin {
    horizontal: Location;
    vertical: Location;
}
export interface IOffset {
    horizontal: number;
    vertical: number;
}
export interface IPoint {
    x: number;
    y: number;
}
/**
 * Calculates the distance between two points
 * @param pointA First point
 * @param pointB Second point
 */
export declare function distance(pointA: IPoint, pointB: IPoint): number;
/**
 * The position method is used to set the location of an absolutely positioned element
 * using the standard positioning properties. The names of these properties conform to
 * the naming patterns used in the Material Popover https://material-ui.com. They
 * are not exact but follow the same pattern.
 *
 * For an example usage, look at the Callout component and how it uses this method to
 * position the element in the page.
 *
 * @param transformElement The element that is being positioned/transformed.
 * @param transformOrigin The origin within the transformed element to align with the
 *  anchor position.
 * @param anchorOffset Offset on the anchorElement that is applied to the computed location
 *  given the element/origin/point.
 * @param anchorElement The element used to anchor the position of the transformed element.
 *  The caller must supply either an anchorElement and anchorOrigin, or anchorPoint.
 * @param anchorOrigin When an anchorElement is supplied the anchorOrigin defines the location
 *  on the anchorElement used for positioning.
 * @param anchorPoint Instead of an anchorElement the caller can use an explicit point
 *  to be used as the basis for the anchorLocation. The anchorOffset will still be applied.
 * @param extraSpaceSize Sets the value of how much the container is larger than the window in all directions.
 */
export declare function position(transformElement: HTMLElement, transformOrigin: IOrigin, anchorOffset?: IOffset, anchorElement?: HTMLElement, anchorOrigin?: IOrigin, anchorPoint?: IPoint, extraSpaceSize?: number): void;
/**
 * updateLayout is used to move an element to the "best" location based on it
 * layout. This will look at all the positioning attributes and move the
 * transformElement to a new location based on its size. This is usually done
 * after an initial call to position. After the element is positioned the
 * caller determines if the transformElement is in the desired location, which
 * generally translates to, is it clipped in the window.
 *
 * This is delayed because when position is called the transformElement is
 * frequently not fully laid out and we need to wait other a force reflow will
 * happen and cause performance issues.
 *
 * @param transformElement The element that is being positioned/transformed.
 * @param transformOrigin The origin within the transformed element to align with the
 *  anchor position.
 * @param anchorOffset Offset on the anchorElement that is applied to the computed location
 *  given the element/origin/point.
 * @param anchorElement The element used to anchor the position of the transformed element.
 *  The caller must supply either an anchorElement and anchorOrigin, or anchorPoint.
 * @param anchorOrigin When an anchorElement is supplie the anchorOrigin defines the location
 *  on the anchorElement used for positioning.
 * @param anchorPoint Instead of an anchorElement the caller can use an explicit point
 *  to be used as the basis for the anchorLocation. The anchorOffset will still be applied.
 * @param extraSpaceSize Sets the value of how much the container is larger than the window in all directions.
 * @param recursionControl Use it to avoid infinite loop and call this function LAYOUT_CALCULATION_MAX_TIMES times at most.
 */
export declare function updateLayout(transformElement: HTMLElement, transformOrigin: IOrigin, anchorOffset?: IOffset, anchorElement?: HTMLElement, anchorOrigin?: IOrigin, anchorPoint?: IPoint, extraSpaceSize?: number, recursionControl?: number): void;
