import { Optional } from '@ephox/katamari';
import { SugarPosition } from '@ephox/sugar';
export declare type DragCoords<T = number, U = CoordAdt<T>> = (x: T, y: T) => U;
export interface CoordAdt<T = number> {
    fold: <U>(offset: DragCoords<T, U>, absolute: DragCoords<T, U>, fixed: DragCoords<T, U>) => U;
    match: <U>(branches: {
        offset: DragCoords<T, U>;
        absolute: DragCoords<T, U>;
        fixed: DragCoords<T, U>;
    }) => U;
    log: (label: string) => void;
}
export declare type StylesCoord = {
    left: Optional<string>;
    right: Optional<string>;
    top: Optional<string>;
    bottom: Optional<string>;
    position: Optional<string>;
};
export declare type CoordStencil = (coord: CoordAdt<number>, scroll: SugarPosition, origin: SugarPosition) => SugarPosition;
declare const asFixed: CoordStencil;
declare const asAbsolute: CoordStencil;
declare const asOffset: CoordStencil;
declare const toString: (coord: CoordAdt<number>) => string;
declare const withinRange: (coord1: CoordAdt<number>, coord2: CoordAdt<number>, xRange: number, yRange: number, scroll: SugarPosition, origin: SugarPosition) => boolean;
declare const getDeltas: (coord1: CoordAdt<number>, coord2: CoordAdt<number>, xRange: number, yRange: number, scroll: SugarPosition, origin: SugarPosition) => SugarPosition;
declare const toStyles: (coord: CoordAdt<number>, scroll: SugarPosition, origin: SugarPosition) => StylesCoord;
declare const translate: (coord: CoordAdt<number>, deltaX: number, deltaY: number) => CoordAdt<number>;
declare const absorb: (partialCoord: CoordAdt<Optional<number>>, originalCoord: CoordAdt<number>, scroll: SugarPosition, origin: SugarPosition) => CoordAdt<number>;
declare const offset: {
    (x: number, y: number): CoordAdt<number>;
    (x: Optional<number>, y: Optional<number>): CoordAdt<Optional<number>>;
};
declare const absolute: {
    (x: number, y: number): CoordAdt<number>;
    (x: Optional<number>, y: Optional<number>): CoordAdt<Optional<number>>;
};
declare const fixed: {
    (x: number, y: number): CoordAdt<number>;
    (x: Optional<number>, y: Optional<number>): CoordAdt<Optional<number>>;
};
export { offset, absolute, fixed, asFixed, asAbsolute, asOffset, withinRange, getDeltas, toStyles, translate, absorb, toString };
//# sourceMappingURL=DragCoord.d.ts.map