import type { ComputedRef, Ref } from "vue"; /** 触点坐标 */ export type DraggableTouch = { clientX: number; clientY: number; }; /** * 拖拽所需的触摸事件形状 * * 用 ArrayLike 而不是数组或 DOM 的 TouchEvent: * 一是包内 lib 不含 DOM,二是小程序端给的 touches / changedTouches 是普通数组、 * H5 端给的是 TouchList,按 ArrayLike 声明才能同时接住两者。 */ export type DraggableTouchEvent = { touches: ArrayLike; changedTouches: ArrayLike; }; /** 拖拽配置 */ export type UseDraggableOptions = { /** 初始横坐标(px),默认贴右边缘 */ initialX?: number; /** 初始纵坐标(px),默认距底部 bottomOffset */ initialY?: number; /** 元素宽度(px),用于边界约束与吸附计算 */ elementWidth?: number; /** 元素高度(px),用于边界约束 */ elementHeight?: number; /** * 松手后是否吸附到最近的水平边缘 * @default true */ edgeSnap?: boolean; /** 位置持久化的缓存 key,留空则不持久化 */ storageKey?: string; /** * 位移小于该值(px)视为点击而非拖拽 * @default 10 */ threshold?: number; /** * 默认初始位置距屏幕底部的偏移(rpx) * @default 204 */ bottomOffset?: number; }; /** 拖拽返回值 */ export type UseDraggableReturn = { /** 当前位置(px) */ position: Ref<{ x: number; y: number; }>; /** 当前实例是否正在拖拽 */ isDragging: Ref; /** 本次手势是否被判定为点击 */ isTap: Ref; onTouchStart: (e: DraggableTouchEvent) => void; onTouchMove: (e: DraggableTouchEvent) => void; onTouchEnd: (e: DraggableTouchEvent) => void; /** 手动吸附到最近的水平边缘 */ snapToEdge: () => void; }; /** * 读取全局拖拽状态 * * 典型用途是在页面 onPullDownRefresh 中判断当前是否有元素正在被拖拽,避免误触发下拉刷新。 */ export declare function useDragState(): { dragging: ComputedRef; }; /** * 可拖拽悬浮元素 * * 提供边界约束、边缘吸附、点击与拖拽区分、位置持久化。 * @param options 配置项 */ export declare function useDraggable(options?: UseDraggableOptions): UseDraggableReturn;