/**
 * @typedef {import("../spec/scale.js").NumericDomain} NumericDomain
 * @typedef {import("../spec/scale.js").ScalarDomain} ScalarDomain
 * @typedef {import("../spec/scale.js").ComplexDomain} ComplexDomain
 * @typedef {import("../spec/scale.js").ZoomParams} ZoomParams
 * @typedef {import("../types/encoder.js").VegaScale} VegaScale
 * @typedef {import("../types/scaleResolutionApi.js").ZoomToOptions} ZoomToOptions
 * @typedef {VegaScale & { props: import("../spec/scale.js").Scale }} ScaleWithProps
 */
export default class ScaleInteractionController {
    /**
     * @param {object} options
     * @param {() => ScaleWithProps} options.getScale
     * @param {() => import("../utils/animator.js").default} options.getAnimator
     * @param {() => void} options.renderImmediately
     * @param {() => number[]} options.getInitialDomainSnapshot
     * @param {() => number[]} options.getResetDomain
     * @param {(domain: ScalarDomain | ComplexDomain) => number[]} options.fromComplexInterval
     * @param {() => number[]} options.getGenomeExtent
     */
    constructor({ getScale, getAnimator, renderImmediately, getInitialDomainSnapshot, getResetDomain, fromComplexInterval, getGenomeExtent, }: {
        getScale: () => ScaleWithProps;
        getAnimator: () => import("../utils/animator.js").default;
        renderImmediately: () => void;
        getInitialDomainSnapshot: () => number[];
        getResetDomain: () => number[];
        fromComplexInterval: (domain: ScalarDomain | ComplexDomain) => number[];
        getGenomeExtent: () => number[];
    });
    getZoomExtent(): number[];
    isZoomable(): boolean;
    isZoomingSupported(): boolean;
    /**
     * @param {number[]} previousDomain
     * @param {number[]} newDomain
     * @returns {"restore" | "animate" | "notify" | "none"}
     */
    getDomainChangeAction(previousDomain: number[], newDomain: number[]): "restore" | "animate" | "notify" | "none";
    /**
     * Return true if the scale is zoomable and the current domain differs from the initial domain.
     *
     * @returns true if zoomed
     */
    isZoomed(): boolean;
    /**
     * Pans (translates) and zooms using a specified scale factor.
     *
     * @param {number} scaleFactor
     * @param {number} scaleAnchor
     * @param {number} pan
     * @returns {boolean} true if the scale was zoomed
     */
    zoom(scaleFactor: number, scaleAnchor: number, pan: number): boolean;
    /**
     * Immediately zooms to the given interval.
     *
     * @param {NumericDomain | ComplexDomain} domain
     * @param {ZoomToOptions | boolean | number} [options] Zoom options.
     *      Passing the duration directly as a boolean or number is deprecated.
     */
    zoomTo(domain: NumericDomain | ComplexDomain, options?: ZoomToOptions | boolean | number): Promise<void>;
    /**
     * Resets the current domain to the initial one
     *
     * @returns true if the domain was changed
     */
    resetZoom(): boolean;
    /**
     * Returns the zoom level with respect to the reference domain span (the original domain).
     */
    getZoomLevel(): number;
    #private;
}
export type NumericDomain = import("../spec/scale.js").NumericDomain;
export type ScalarDomain = import("../spec/scale.js").ScalarDomain;
export type ComplexDomain = import("../spec/scale.js").ComplexDomain;
export type ZoomParams = import("../spec/scale.js").ZoomParams;
export type VegaScale = import("../types/encoder.js").VegaScale;
export type ZoomToOptions = import("../types/scaleResolutionApi.js").ZoomToOptions;
export type ScaleWithProps = VegaScale & {
    props: import("../spec/scale.js").Scale;
};
//# sourceMappingURL=scaleInteractionController.d.ts.map