import type { GsapHandle, GsapTimeline } from '../../core/gsap-detect'; /** * Augmented timeline returned by horizontalLoop. Adds index navigation methods, * a Draggable handle, and an optional touchCleanup function. */ export interface SliderLoop extends GsapTimeline { next: (vars?: Record) => unknown; previous: (vars?: Record) => unknown; toIndex: (index: number, vars?: Record) => unknown; current: () => number; closestIndex: (setCurrent?: boolean) => number; refresh: (deep?: boolean) => void; times: number[]; draggable?: DraggableInstance; touchCleanup?: () => void; } export interface DraggableInstance { kill: () => void; enable: () => void; disable: () => void; startX: number; startY: number; x: number; y: number; pointerX: number; pointerY: number; isThrowing: boolean; vars: Record; } export interface HorizontalLoopConfig { speed?: number; paused?: boolean; repeat?: number; draggable?: boolean; center?: boolean | string; reversed?: boolean; paddingRight?: number; snap?: number | false; onChange?: (item: Element, index: number) => void; /** Fires once on drag press-init, before the timeline pause. */ onDragStart?: () => void; /** * Fires on every drag release. `isThrowing` is true when the release * triggered an inertia throw — `onThrowComplete` will fire after that * lands. False on a static press / click with no movement, in which case * `onThrowComplete` will NOT fire and the caller is responsible for any * post-press cleanup. */ onRelease?: (isThrowing: boolean) => void; /** Fires after the inertia throw lands on a new slide boundary. */ onThrowComplete?: (index: number) => void; } /** * Seamless horizontal looping timeline ported from v7's horizontalLoop helper * (originally https://gsap.com/docs/v3/HelperFunctions/helpers/seamlessLoop). * The math is delicate; this is a near-verbatim port — do not "improve" it. */ export declare function horizontalLoop(gsapHandle: GsapHandle, rawItems: ArrayLike, config?: HorizontalLoopConfig): SliderLoop; //# sourceMappingURL=horizontal-loop.d.ts.map