import { TransformationMatrix } from './TransformationMatrix';
import { Pinch } from './core-math';
interface InertiaOptions {
    minimumTime: number;
    minimumSnapshots: number;
    brakingTime: number;
    maximumPinchReleaseTime: number;
}
export interface InertiaApplyResult {
    isRunning(): boolean;
    stop(): void;
}
export interface TranslationSnapshot {
    dx: number;
    dy: number;
    dt: number;
}
export interface TranslationInertia {
    vx: number;
    vy: number;
}
export declare function calculateTranslateInertia(translationHistory: TranslationSnapshot[], options?: InertiaOptions): TranslationInertia | null;
export declare function applyTranslateInertia(inertia: TranslationInertia, callback: (dx: number, dy: number) => void, options?: InertiaOptions): InertiaApplyResult;
export interface PinchSnapshot {
    pinch: Pinch;
    dt: number;
}
export interface FidgetSpinInertia {
    angularVelocity: number;
    scalingConstant: number;
}
export declare function calculateFidgetSpinInertia(pinchHistory: PinchSnapshot[], options?: InertiaOptions): FidgetSpinInertia | null;
export declare function applyFidgetSpinInertia(inertia: FidgetSpinInertia, callback: (rotation: number, scale: number) => void, options?: InertiaOptions): InertiaApplyResult;
export interface PinchInertia {
    angularVelocity: number;
    scalingConstant: number;
    transformOrigin: {
        x: number;
        y: number;
    } | null;
    velocityX: number;
    velocityY: number;
}
export declare function calculatePinchInertia(pinchHistory: PinchSnapshot[], options?: InertiaOptions): PinchInertia | null;
export declare function applyPinchInertia(inertia: PinchInertia, callback: (transform: TransformationMatrix) => void, options?: InertiaOptions): InertiaApplyResult;
export declare function isPinchRelease(time: number, options?: InertiaOptions): boolean;
export {};
