import { Boundary, CoordinatesTransform, CoreSettings, CropperImage, CropperInteractions, CropperState, CropperTransitionsSettings, ImageTransform, InitializeSettings, ModifierSettings, MoveDirections, Nullable, PostprocessAction, PostprocessFunction, ResizeAnchor, Rotate, Scale, VisibleArea } from "../types/index";
import { CreateStateAlgorithm, MoveAlgorithm, ReconcileStateAlgorithm, ResizeAlgorithm, SetBoundaryAlgorithm, SetCoordinatesAlgorithm, SetVisibleAreaAlgorithm, TransformImageAlgorithm } from "../state/index";
interface TransitionOptions {
    transitions?: boolean;
}
interface InteractionOptions {
    interaction?: boolean;
}
interface ImmediatelyOptions {
    immediately?: boolean;
}
interface PostprocessOptions {
    postprocess?: boolean;
}
interface NormalizeOptions {
    normalize?: boolean;
}
type AbstractCropperInstancePostprocess = 'interactionEnd' | 'createState' | 'reconcileState' | 'transformImage' | 'transformImageEnd' | 'setCoordinates' | 'setVisibleArea' | 'setBoundary' | 'moveCoordinates' | 'moveCoordinatesEnd' | 'resizeCoordinates' | 'resizeCoordinatesEnd';
interface AbstractCropperInstanceData {
    state: CropperState | null;
    transitions: boolean;
    interactions: CropperInteractions;
}
type StateModifier = (state: CropperState | null, settings: CoreSettings) => CropperState | null;
type AbstractCropperInstanceSettings = CoreSettings & ModifierSettings & InitializeSettings;
type AbstractCropperInstanceProps<Settings extends AbstractCropperInstanceSettings, Instance> = AbstractCropperInstanceParameters<Settings> & AbstractCropperInstanceCallbacks<Instance> & {
    settings: Settings;
};
type AbstractCropperInstanceCallback<Instance> = (instance: NonNullable<Instance>) => void;
interface AbstractCropperInstanceCallbacks<Instance = unknown> {
    getInstance?: () => Nullable<Instance>;
    onTransitionsStart?: AbstractCropperInstanceCallback<Instance>;
    onTransitionsEnd?: AbstractCropperInstanceCallback<Instance>;
    onChange?: AbstractCropperInstanceCallback<Instance>;
    onResizeEnd?: AbstractCropperInstanceCallback<Instance>;
    onMoveEnd?: AbstractCropperInstanceCallback<Instance>;
    onMove?: AbstractCropperInstanceCallback<Instance>;
    onResize?: AbstractCropperInstanceCallback<Instance>;
    onTransformImage?: AbstractCropperInstanceCallback<Instance>;
    onTransformImageEnd?: AbstractCropperInstanceCallback<Instance>;
    onInteractionStart?: AbstractCropperInstanceCallback<Instance>;
    onInteractionEnd?: AbstractCropperInstanceCallback<Instance>;
    onUpdate?: AbstractCropperInstanceCallback<Instance>;
}
interface AbstractCropperInstanceParameters<Settings extends CoreSettings & InitializeSettings> {
    transitions?: CropperTransitionsSettings | boolean;
    postProcess?: PostprocessFunction<Settings> | PostprocessFunction<Settings>[];
    setCoordinatesAlgorithm?: SetCoordinatesAlgorithm<Settings>;
    setVisibleAreaAlgorithm?: SetVisibleAreaAlgorithm<Settings>;
    setBoundaryAlgorithm?: SetBoundaryAlgorithm<Settings>;
    transformImageAlgorithm?: TransformImageAlgorithm<Settings>;
    moveCoordinatesAlgorithm?: MoveAlgorithm<Settings>;
    resizeCoordinatesAlgorithm?: ResizeAlgorithm<Settings>;
    createStateAlgorithm?: CreateStateAlgorithm<Settings>;
    reconcileStateAlgorithm?: ReconcileStateAlgorithm<Settings>;
}
declare abstract class AbstractCropperInstance<Settings extends AbstractCropperInstanceSettings, Instance = unknown> {
    protected abstract setData(data: AbstractCropperInstanceData): void;
    protected abstract getData(): AbstractCropperInstanceData;
    protected abstract getProps(): AbstractCropperInstanceProps<Settings, Instance>;
    getTransitions: () => any;
    getInteractions: () => CropperInteractions;
    hasInteractions: () => boolean;
    startTransitions: () => void;
    protected endTransitions: {
        (): void;
        clear(): void;
    };
    protected applyPostProcess: (action: PostprocessAction, state: CropperState) => CropperState;
    protected updateState: (modifier: StateModifier | CropperState | null, options?: TransitionOptions, callbacks?: (AbstractCropperInstanceCallback<Instance> | undefined)[]) => void;
    protected setInteractions: (interactions: Partial<CropperInteractions>) => void;
    resetState: (boundary: Boundary, image: CropperImage) => void;
    clear: () => void;
    reconcileState: (options?: TransitionOptions) => void;
    transformImage: (transform: ImageTransform, options?: InteractionOptions & ImmediatelyOptions & NormalizeOptions & TransitionOptions) => void;
    transformImageEnd: (options?: ImmediatelyOptions & TransitionOptions) => void;
    zoomImage: (scale: Scale | number, options?: InteractionOptions & ImmediatelyOptions & NormalizeOptions & TransitionOptions) => void;
    moveImage: (left: number, top?: number | undefined, options?: InteractionOptions & ImmediatelyOptions & NormalizeOptions & TransitionOptions) => void;
    flipImage: (horizontal?: boolean | undefined, vertical?: boolean | undefined, options?: InteractionOptions & ImmediatelyOptions & NormalizeOptions & TransitionOptions) => void;
    rotateImage: (rotate: number | Rotate, options?: InteractionOptions & ImmediatelyOptions & NormalizeOptions & TransitionOptions) => void;
    reset: (boundary: Boundary, image: CropperImage) => void;
    setState: (modifier: CropperState | StateModifier | null, options?: TransitionOptions & ImmediatelyOptions & InteractionOptions & PostprocessOptions) => void;
    setCoordinates: (transforms: CoordinatesTransform | CoordinatesTransform[], options?: ImmediatelyOptions & TransitionOptions) => void;
    setVisibleArea: (visibleArea: VisibleArea, options?: ImmediatelyOptions & TransitionOptions) => void;
    setBoundary: (boundary: Boundary, options?: ImmediatelyOptions & TransitionOptions) => void;
    moveCoordinates: (directions: Partial<MoveDirections>, options?: InteractionOptions & ImmediatelyOptions & NormalizeOptions & TransitionOptions) => void;
    moveCoordinatesEnd: (options?: ImmediatelyOptions & TransitionOptions) => void;
    resizeCoordinates: (anchor: ResizeAnchor, directions: Partial<MoveDirections>, parameters?: unknown, options?: InteractionOptions & ImmediatelyOptions & NormalizeOptions & TransitionOptions) => void;
    resizeCoordinatesEnd: (options?: ImmediatelyOptions & TransitionOptions) => void;
    getStencilCoordinates: () => {
        left: number;
        top: number;
        width: number;
        height: number;
    };
    getCoordinates: (options?: {
        round?: boolean;
    }) => import("../types/index").Coordinates | null;
    getVisibleArea: () => {
        width: number;
        height: number;
        top: number;
        left: number;
    } | null;
    getSettings: () => Settings;
    getState: () => CropperState | null;
    getTransforms: () => import("../types/index").Transforms;
    createDefaultState: (boundary: Boundary, image: CropperImage) => CropperState;
    isConsistent: () => boolean;
}
export { TransitionOptions, InteractionOptions, ImmediatelyOptions, PostprocessOptions, NormalizeOptions, AbstractCropperInstancePostprocess, AbstractCropperInstanceData, AbstractCropperInstanceSettings, AbstractCropperInstanceProps, AbstractCropperInstanceCallback, AbstractCropperInstanceCallbacks, AbstractCropperInstanceParameters, AbstractCropperInstance };
