// Pure gesture helper for the reader's single-page swipe navigation. Kept // UI-free so the "is this a page-turn swipe, and which way" decision is // unit-testable without dispatching pointer events. export const SWIPE_THRESHOLD_PX = 45; /** * Classifies a pointer displacement as a page-turn swipe. Returns `'next'` * for a leftward swipe, `'prev'` for a rightward one, or `null` when the * gesture is too short or too vertical to be a deliberate horizontal swipe * (so vertical panning never turns the page). */ export function swipeDirection( dx: number, dy: number, threshold: number = SWIPE_THRESHOLD_PX ): 'next' | 'prev' | null { if (Math.abs(dx) < threshold) return null; // Must be predominantly horizontal — a diagonal or vertical drag is not // a page turn. if (Math.abs(dx) <= Math.abs(dy)) return null; return dx < 0 ? 'next' : 'prev'; }