import { DeepMaybeObservable, ReadonlyObservable } from '@usels/core'; import { MaybeEventTarget } from '../../types.mjs'; type UseSwipeDirection = "up" | "down" | "left" | "right" | "none"; type PointerType = "mouse" | "touch" | "pen"; interface UsePointerSwipeOptions { /** Minimum distance in px to trigger swipe. Default: 50 */ threshold?: number; /** Callback on swipe start */ onSwipeStart?: (e: PointerEvent) => void; /** Callback on swipe move */ onSwipe?: (e: PointerEvent) => void; /** Callback on swipe end */ onSwipeEnd?: (e: PointerEvent, direction: UseSwipeDirection) => void; /** Pointer types to listen to. Default: ['mouse', 'touch', 'pen'] */ pointerTypes?: PointerType[]; /** Disable text selection during swipe. Default: false */ disableTextSelect?: boolean; } interface UsePointerSwipeReturn { /** Whether swiping is in progress */ isSwiping$: ReadonlyObservable; /** Swipe direction */ direction$: ReadonlyObservable; /** Distance swiped on X axis */ distanceX$: ReadonlyObservable; /** Distance swiped on Y axis */ distanceY$: ReadonlyObservable; /** Start position */ posStart$: ReadonlyObservable<{ x: number; y: number; }>; /** End position */ posEnd$: ReadonlyObservable<{ x: number; y: number; }>; /** Stop listening */ stop: () => void; } /** * Framework-agnostic reactive pointer-swipe detector. * * Listens to `pointerdown` / `pointermove` / `pointerup` on the target and * tracks swipe direction, distance, and start/end positions. `options` fields * are read reactively via `opts$`, so threshold / pointerTypes / callbacks * may be swapped at runtime. */ declare function createPointerSwipe(target: MaybeEventTarget, options?: DeepMaybeObservable): UsePointerSwipeReturn; export { type PointerType, type UsePointerSwipeOptions, type UsePointerSwipeReturn, type UseSwipeDirection, createPointerSwipe };