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, { 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): void; end(): void; }