import { Optional } from '@ephox/katamari';
import { SugarElement, SugarPosition } from '@ephox/sugar';
import * as Boxes from '../../alien/Boxes';
import { PositionCss } from '../view/PositionCss';
import { RepositionDecision } from '../view/Reposition';
type NoneOrigin<T> = () => T;
type RelativeOrigin<T> = (x: number, y: number, width: number, height: number) => T;
type FixedOrigin<T> = (x: number, y: number, width: number, height: number) => T;
export interface OriginAdt {
    fold: <T>(none: NoneOrigin<T>, relative: RelativeOrigin<T>, fixed: FixedOrigin<T>) => T;
    match: <T>(branches: {
        none: NoneOrigin<T>;
        relative: RelativeOrigin<T>;
        fixed: FixedOrigin<T>;
    }) => T;
    log: (label: string) => void;
}
declare const reposition: (origin: OriginAdt, decision: RepositionDecision) => PositionCss;
declare const toBox: (origin: OriginAdt, element: SugarElement<HTMLElement>) => Boxes.Bounds;
declare const viewport: (origin: OriginAdt, optBounds: Optional<Boxes.Bounds>) => Boxes.Bounds;
declare const translate: (origin: OriginAdt, x: number, y: number) => SugarPosition;
declare const cata: <B>(subject: OriginAdt, onNone: NoneOrigin<B>, onRelative: RelativeOrigin<B>, onFixed: FixedOrigin<B>) => B;
declare const none: NoneOrigin<OriginAdt>;
declare const relative: RelativeOrigin<OriginAdt>;
declare const fixed: FixedOrigin<OriginAdt>;
export { none, relative, fixed, reposition, viewport, toBox, translate, cata };
//# sourceMappingURL=Origins.d.ts.map