import '../../../tandem/js/PhetioIDUtils.js';
import '../../../globals.js';
/**
 * A MultiListener that is designed to pan and zoom a target Node, where you can provide limiting and
 * describing bounds so that the targetNode is limited to a region.
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 * @author Jesse Greenberg (PhET Interactive Simulations)
 */
import Property from '../../../axon/js/Property.js';
import Bounds2 from '../../../dot/js/Bounds2.js';
import { MultiListener, MultiListenerOptions, MultiListenerPress, Node } from '../imports.js';
type SelfOptions = {
    panBounds?: Bounds2;
    targetBounds?: Bounds2 | null;
    targetScale?: number;
};
export type PanZoomListenerOptions = SelfOptions & MultiListenerOptions;
declare class PanZoomListener extends MultiListener {
    protected _panBounds: Bounds2;
    protected _targetBounds: Bounds2;
    protected _targetScale: number;
    protected sourceFramePanBoundsProperty: Property<Bounds2>;
    /**
     * @param targetNode - The Node that should be transformed by this PanZoomListener.
     * @param [providedOptions].
     */
    constructor(targetNode: Node, providedOptions?: PanZoomListenerOptions);
    /**
     * If the targetNode is larger than the panBounds specified, keep the panBounds completely filled with
     * targetNode content.
     */
    protected correctReposition(): void;
    /**
     * If the transformed targetBounds are equal to the panBounds, there is no space for us to pan so do not change
     * the pointer cursor.
     */
    protected addPress(press: MultiListenerPress): void;
    /**
     * Reposition but keep content within this._panBounds.
     */
    protected reposition(): void;
    /**
     * Reset the transform on the targetNode and follow up by making sure that the content is still within panBounds.
     */
    resetTransform(): void;
    /**
     * Set the containing panBounds and then make sure that the targetBounds fully fill the new panBounds.
     */
    setPanBounds(panBounds: Bounds2): void;
    /**
     * Set the targetBounds which should totally fill the panBounds at all times. Useful if the targetNode has bounds
     * which don't accurately describe the node. For instance, if an overlay plane is on top of the node and extends
     * beyond the dimensions of the visible node.
     *
     * targetBounds - in the global coordinate frame
     */
    setTargetBounds(targetBounds: Bounds2): void;
    /**
     * Set the representative scale of the target Node. If the targetBounds are different from the targetNode.bounds
     * it may be useful to correct changes to panning and zooming by a scale that is different from the
     * actual scale applied to the targetNode during panning.
     */
    setTargetScale(scale: number): void;
    /**
     * Get the targetBounds, in the global coordinate frame.
     */
    getTargetBounds(): Bounds2;
}
export default PanZoomListener;
//# sourceMappingURL=PanZoomListener.d.ts.map