import { GalileoPhysicsSystem, PhysicsBody } from '../../animations/physics/galileoPhysicsSystem';
export interface GalileoSpringConfig {
    /** Spring stiffness */
    stiffness?: number;
    /** Spring damping */
    damping?: number;
    /** Spring mass */
    mass?: number;
    /** Rest precision */
    precision?: number;
    /** Initial velocity */
    velocity?: number;
    /** Enable gravity */
    gravity?: boolean;
    /** Gravity strength */
    gravityStrength?: number;
    /** Enable collisions */
    enableCollisions?: boolean;
    /** Bounds for physics world */
    bounds?: {
        left: number;
        right: number;
        top: number;
        bottom: number;
    };
}
export interface GalileoSpringTarget {
    id: string;
    position: {
        x: number;
        y: number;
    };
    target?: {
        x: number;
        y: number;
    };
    velocity?: {
        x: number;
        y: number;
    };
    mass?: number;
    radius?: number;
    fixed?: boolean;
}
export declare function useGalileoSprings(targets?: GalileoSpringTarget[], config?: GalileoSpringConfig): {
    positions: Record<string, {
        x: number;
        y: number;
    }>;
    isAnimating: boolean;
    springTo: (id: string, target: {
        x: number;
        y: number;
    }, customConfig?: Partial<GalileoSpringConfig>) => void;
    impulse: (id: string, impulse: {
        x: number;
        y: number;
    }) => void;
    setPosition: (id: string, position: {
        x: number;
        y: number;
    }) => void;
    addBody: (body: GalileoSpringTarget) => void;
    removeBody: (id: string) => void;
    getBody: (id: string) => PhysicsBody | undefined;
    updateConfig: (newConfig: Partial<GalileoSpringConfig>) => void;
    batchUpdate: (updates: Array<{
        type: "springTo" | "impulse" | "setPosition" | "addBody" | "removeBody";
        id: string;
        data?: any;
    }>) => void;
    physicsSystem: GalileoPhysicsSystem | undefined;
};
export declare function useChainReaction(bodies: GalileoSpringTarget[], connections: Array<{
    from: string;
    to: string;
    strength: number;
}>, config?: GalileoSpringConfig): {
    triggerChainReaction: (startId: string, initialImpulse: {
        x: number;
        y: number;
    }) => void;
    positions: Record<string, {
        x: number;
        y: number;
    }>;
    isAnimating: boolean;
    springTo: (id: string, target: {
        x: number;
        y: number;
    }, customConfig?: Partial<GalileoSpringConfig>) => void;
    impulse: (id: string, impulse: {
        x: number;
        y: number;
    }) => void;
    setPosition: (id: string, position: {
        x: number;
        y: number;
    }) => void;
    addBody: (body: GalileoSpringTarget) => void;
    removeBody: (id: string) => void;
    getBody: (id: string) => PhysicsBody | undefined;
    updateConfig: (newConfig: Partial<GalileoSpringConfig>) => void;
    batchUpdate: (updates: Array<{
        type: "springTo" | "impulse" | "setPosition" | "addBody" | "removeBody";
        id: string;
        data?: any;
    }>) => void;
    physicsSystem: GalileoPhysicsSystem | undefined;
};
export declare function useOrbitalMechanics(centralBody: GalileoSpringTarget, orbitingBodies: GalileoSpringTarget[], config?: GalileoSpringConfig & {
    gravitationalConstant?: number;
    timeScale?: number;
}): {
    centralBody: string;
    orbitingBodies: any[];
    updateOrbits: () => void;
    positions: Record<string, {
        x: number;
        y: number;
    }>;
    isAnimating: boolean;
    springTo: (id: string, target: {
        x: number;
        y: number;
    }, customConfig?: Partial<GalileoSpringConfig>) => void;
    impulse: (id: string, impulse: {
        x: number;
        y: number;
    }) => void;
    setPosition: (id: string, position: {
        x: number;
        y: number;
    }) => void;
    addBody: (body: GalileoSpringTarget) => void;
    removeBody: (id: string) => void;
    getBody: (id: string) => PhysicsBody | undefined;
    updateConfig: (newConfig: Partial<GalileoSpringConfig>) => void;
    batchUpdate: (updates: Array<{
        type: "springTo" | "impulse" | "setPosition" | "addBody" | "removeBody";
        id: string;
        data?: any;
    }>) => void;
    physicsSystem: GalileoPhysicsSystem | undefined;
};
export declare function useParticleSystem(emitterPosition: {
    x: number;
    y: number;
}, config?: {
    particleCount?: number;
    emissionRate?: number;
    particleLife?: number;
    initialVelocity?: {
        x: number;
        y: number;
    };
    spread?: number;
    gravity?: number;
}): {
    particleIds: string[];
    emit: () => void;
    updateEmitter: (newPosition: {
        x: number;
        y: number;
    }) => void;
    positions: Record<string, {
        x: number;
        y: number;
    }>;
    isAnimating: boolean;
    springTo: (id: string, target: {
        x: number;
        y: number;
    }, customConfig?: Partial<GalileoSpringConfig>) => void;
    impulse: (id: string, impulse: {
        x: number;
        y: number;
    }) => void;
    setPosition: (id: string, position: {
        x: number;
        y: number;
    }) => void;
    addBody: (body: GalileoSpringTarget) => void;
    removeBody: (id: string) => void;
    getBody: (id: string) => PhysicsBody | undefined;
    updateConfig: (newConfig: Partial<GalileoSpringConfig>) => void;
    batchUpdate: (updates: Array<{
        type: "springTo" | "impulse" | "setPosition" | "addBody" | "removeBody";
        id: string;
        data?: any;
    }>) => void;
    physicsSystem: GalileoPhysicsSystem | undefined;
};
export declare function useSoftBodyPhysics(bodyDefinition: {
    nodes: Array<{
        id: string;
        x: number;
        y: number;
        mass: number;
    }>;
    springs: Array<{
        from: string;
        to: string;
        stiffness: number;
        restLength: number;
    }>;
}, config?: GalileoSpringConfig): {
    springs: {
        from: string;
        to: string;
        stiffness: number;
        restLength: number;
    }[];
    updateSprings: () => void;
    positions: Record<string, {
        x: number;
        y: number;
    }>;
    isAnimating: boolean;
    springTo: (id: string, target: {
        x: number;
        y: number;
    }, customConfig?: Partial<GalileoSpringConfig>) => void;
    impulse: (id: string, impulse: {
        x: number;
        y: number;
    }) => void;
    setPosition: (id: string, position: {
        x: number;
        y: number;
    }) => void;
    addBody: (body: GalileoSpringTarget) => void;
    removeBody: (id: string) => void;
    getBody: (id: string) => PhysicsBody | undefined;
    updateConfig: (newConfig: Partial<GalileoSpringConfig>) => void;
    batchUpdate: (updates: Array<{
        type: "springTo" | "impulse" | "setPosition" | "addBody" | "removeBody";
        id: string;
        data?: any;
    }>) => void;
    physicsSystem: GalileoPhysicsSystem | undefined;
};
//# sourceMappingURL=useGalileoSprings.d.ts.map