import { Logger } from "../core/logger";
import { AnimationFactory, AnimationFunction } from "./animation-factory";
/**
 * Animation engine that wraps GSAP and provides a consistent API.
 */
export declare class AnimationEngine {
    private _gsap;
    private _logger;
    private _factory;
    constructor(gsap: any, logger: Logger);
    /**
     * Get the animation factory.
     */
    getFactory(): AnimationFactory;
    /**
     * Animate an element with an animation function.
     *
     * @param element - The target SVG element
     * @param animation - The animation function to execute
     * @param rootElement - The root SVG element
     * @returns Promise that resolves when animation completes
     */
    animate(element: SVGElement, animation: AnimationFunction, rootElement: SVGElement): Promise<void>;
    /**
     * Animate multiple elements with spreading transitions.
     * All elements are animated in parallel with GSAP.
     *
     * @param shifts - Map of element IDs to their shift amounts {x, y}
     * @param duration - Duration in milliseconds
     * @param rootElement - The root SVG element containing all elements
     * @returns Promise that resolves when all animations complete
     */
    animateSpreading(shifts: Map<string, {
        x: number;
        y: number;
    }>, duration: number, rootElement: SVGElement): Promise<void>;
    /**
     * Fade in multiple elements (used for hilites).
     *
     * @param elements - Array of elements to fade in
     * @param duration - Duration in milliseconds
     * @returns Promise that resolves when animation completes
     */
    fadeIn(elements: SVGElement[], duration: number): Promise<void>;
    /**
     * Fade out multiple elements (used for hilites).
     *
     * @param elements - Array of elements to fade out
     * @param duration - Duration in milliseconds
     * @returns Promise that resolves when animation completes
     */
    fadeOut(elements: SVGElement[], duration: number): Promise<void>;
    /**
     * Animate pan and zoom transition.
     *
     * @param panZoomInstance - The svg-pan-zoom instance
     * @param newPan - New pan coordinates {x, y}
     * @param newZoom - New zoom level
     * @param duration - Duration in milliseconds
     * @returns Promise that resolves when animation completes
     */
    animatePanZoom(panZoomInstance: any, newPan: {
        x: number;
        y: number;
    }, newZoom: number, duration: number): Promise<void>;
    /**
     * Animate prolog panning to make an element visible.
     * This gracefully pans the viewport so there is room to display an element
     * that would otherwise fall outside the visible area.
     *
     * @param panZoomInstance - The svg-pan-zoom instance
     * @param elementBounds - Bounding rectangle of the element to make visible
     * @param viewportWidth - Width of the visible viewport
     * @param viewportHeight - Height of the visible viewport
     * @param duration - Duration in milliseconds
     * @returns Promise that resolves when animation completes
     */
    animateProlog(panZoomInstance: any, elementBounds: {
        x: number;
        y: number;
        width: number;
        height: number;
    }, viewportWidth: number, viewportHeight: number, duration: number): Promise<void>;
    /**
     * Calculate the pan adjustment needed to make an element visible.
     * Returns null if the element is already fully visible.
     *
     * @param elementBounds - Bounding rectangle of the element in SVG coordinates
     * @param panZoomInstance - The svg-pan-zoom instance
     * @param viewportWidth - Width of the visible viewport
     * @param viewportHeight - Height of the visible viewport
     * @returns New pan coordinates or null if no adjustment needed
     */
    private calculatePrologPan;
    /**
     * Check if an element is fully visible in the current viewport.
     *
     * @param elementBounds - Bounding rectangle of the element in SVG coordinates
     * @param panZoomInstance - The svg-pan-zoom instance
     * @param viewportWidth - Width of the visible viewport
     * @param viewportHeight - Height of the visible viewport
     * @returns True if element is fully visible, false otherwise
     */
    isElementVisible(elementBounds: {
        x: number;
        y: number;
        width: number;
        height: number;
    }, panZoomInstance: any, viewportWidth: number, viewportHeight: number): boolean;
    /**
     * Kill all active animations.
     */
    killAll(): void;
    /**
     * Get the GSAP instance.
     */
    getGsap(): any;
}
