import { PanInfo } from 'motion-dom';
import { TransformPoint } from 'motion-utils';
export type { PanInfo };
export type PanHandler = (event: PointerEvent, info: PanInfo) => void;
interface PanSessionHandlers {
    onSessionStart: PanHandler;
    onStart: PanHandler;
    onMove: PanHandler;
    onEnd: PanHandler;
    onSessionEnd: PanHandler;
    resumeAnimation: () => void;
}
interface PanSessionOptions {
    transformPagePoint?: TransformPoint;
    contextWindow?: (Window & typeof globalThis) | null;
    dragSnapToOrigin?: boolean | 'x' | 'y';
    distanceThreshold?: number;
    element?: HTMLElement | null;
}
/**
 * @internal
 */
export declare class PanSession {
    /**
     * @internal
     */
    private history;
    /**
     * @internal
     */
    private startEvent;
    /**
     * @internal
     */
    private lastMoveEvent;
    /**
     * @internal
     */
    private lastMoveEventInfo;
    /**
     * Raw (untransformed) event info, re-transformed each frame
     * so transformPagePoint sees the current parent matrix.
     * @internal
     */
    private lastRawMoveEventInfo;
    /**
     * Whether a pointermove has arrived since the last updatePoint.
     * @internal
     */
    private hasPendingMove?;
    /**
     * @internal
     */
    private transformPagePoint?;
    /**
     * @internal
     */
    private handlers;
    /**
     * @internal
     */
    private removeListeners;
    /**
     * For determining if an animation should resume after it is interrupted
     *
     * @internal
     */
    private dragSnapToOrigin;
    /**
     * The distance after which panning should start.
     *
     * @internal
     */
    private distanceThreshold;
    /**
     * @internal
     */
    private contextWindow;
    /**
     * Element being dragged. When provided, scroll events on its
     * ancestors and window are compensated so the gesture continues
     * smoothly during scroll.
     */
    element?: HTMLElement | null;
    /**
     * Track scroll positions of all ancestors when drag starts
     *
     * @internal
     */
    private scrollPositions;
    /**
     * Store cleanup function for scroll listeners
     *
     * @internal
     */
    private removeScrollListeners?;
    constructor(event: PointerEvent, handlers: Partial<PanSessionHandlers>, { transformPagePoint, contextWindow, dragSnapToOrigin, distanceThreshold, element }?: PanSessionOptions);
    /**
     * Start tracking scroll on ancestors and window.
     */
    private startScrollTracking;
    /**
     * Handle scroll events on elements
     */
    private onElementScroll;
    /**
     * Handle window scroll
     */
    private onWindowScroll;
    /**
     * Handle scroll compensation during drag.
     *
     * For element scroll: adjusts history origin since pageX/pageY doesn't change.
     * For window scroll: adjusts lastMoveEventInfo since pageX/pageY would change.
     */
    private handleScroll;
    private updatePoint;
    private handlePointerMove;
    private handlePointerUp;
    updateHandlers(handlers: Partial<PanSessionHandlers>): void;
    end(): void;
}
