import type { Animation, AnimatableValue, Timestamp } from '../commonTypes';
export type SpringConfig = {
    stiffness?: number;
    overshootClamping?: boolean;
    restDisplacementThreshold?: number;
    restSpeedThreshold?: number;
    velocity?: number;
} & ({
    mass?: number;
    damping?: number;
    duration?: never;
    dampingRatio?: never;
} | {
    mass?: never;
    damping?: never;
    duration?: number;
    dampingRatio?: number;
});
export interface SpringConfigInner {
    useDuration: boolean;
    configIsInvalid: boolean;
}
export interface SpringAnimation extends Animation<SpringAnimation> {
    current: AnimatableValue;
    toValue: AnimatableValue;
    velocity: number;
    lastTimestamp: Timestamp;
    startTimestamp: Timestamp;
    startValue: number;
    zeta: number;
    omega0: number;
    omega1: number;
}
export interface InnerSpringAnimation extends Omit<SpringAnimation, 'toValue' | 'current'> {
    toValue: number;
    current: number;
}
export declare function initialCalculations(mass: number | undefined, config: Record<keyof SpringConfig, any> & SpringConfigInner): {
    zeta: number;
    omega0: number;
    omega1: number;
};
export declare function calculateNewMassToMatchDuration(x0: number, config: Record<keyof SpringConfig, any> & SpringConfigInner, v0: number): number;
export declare function criticallyDampedSpringCalculations(animation: InnerSpringAnimation, precalculatedValues: {
    v0: number;
    x0: number;
    omega0: number;
    t: number;
}): {
    position: number;
    velocity: number;
};
export declare function underDampedSpringCalculations(animation: InnerSpringAnimation, precalculatedValues: {
    zeta: number;
    v0: number;
    x0: number;
    omega0: number;
    omega1: number;
    t: number;
}): {
    position: number;
    velocity: number;
};
export declare function isAnimationTerminatingCalculation(animation: InnerSpringAnimation, config: Partial<SpringConfig> & Required<Pick<SpringConfig, 'restSpeedThreshold' | 'restDisplacementThreshold'>>): {
    isOvershooting: boolean;
    isVelocity: boolean;
    isDisplacement: boolean;
};
