import { Ref } from 'vue';

/**
 * useTimer 返回结果
 */
export type UseTimerResult = [
    (callback?: () => void, timeout?: number) => void,
    () => void,
    Ref<boolean>
];
/**
 * 定时器
 * @param ms 等待时间
 * @param cb 执行方法
 */
export declare function useTimer(ms?: number | (() => number), cb?: () => void): UseTimerResult;
/**
 * useMediaQuery 返回结果
 */
export type UseMediaQueryResult = [MediaQueryList, () => void, () => void];
/**
 * 媒体查询
 * @param query 媒体查询字符串
 * @param onChange 改变回调
 */
export declare function useMediaQuery(query: string, onChange?: () => void): UseMediaQueryResult;
/**
 * 窗口事件监听
 * @param event 事件
 * @param listener 回调
 */
export declare function useWindowListener(event: string | EventListenerOrEventListenerObject, listener?: EventListenerOrEventListenerObject): void;
/**
 * 折叠展开动画
 */
export declare function useCollapseAnim(): {
    handleBeforeEnter: (el: HTMLElement) => void;
    handleEnter: (el: HTMLElement) => void;
    handleAfterEnter: (el: HTMLElement) => void;
    handleBeforeLeave: (el: HTMLElement) => void;
    handleLeave: (el: HTMLElement) => void;
    handleAfterLeave: (el: HTMLElement) => void;
};
/**
 * 鼠标滚轮事件回调方法参数
 */
export interface UseMousewheelCallbackParam {
    /** 事件对象 */
    e: MouseEvent;
    /** 方向 */
    direction: 'up' | 'down';
}
/**
 * 鼠标滚轮事件
 * @param cb 回调
 */
export declare function useMousewheel(cb?: (p: UseMousewheelCallbackParam) => void): {
    handleMousewheel: (e: MouseEvent) => void;
    handleFirefoxMousewheel: (e: MouseEvent) => void;
    bindMousewheel: (el: HTMLElement) => void;
    unbindMousewheel: (el: HTMLElement) => void;
};
/**
 * 触摸事件回调参数
 */
export interface UseTouchEventCallbackParam<T> {
    /** 事件对象 */
    e: T;
    /** 开始横向位置 */
    startX: number | null;
    /** 开始纵向位置 */
    startY: number | null;
    /** 横向移动距离 */
    distanceX?: number | null;
    /** 纵向移动距离 */
    distanceY?: number | null;
}
/**
 * 触摸事件参数
 */
export interface UseTouchEventOption<T> {
    /** 触摸开始的回调 */
    start?: (param: UseTouchEventCallbackParam<T>) => void;
    /** 触摸移动的回调 */
    move?: (param: UseTouchEventCallbackParam<T>) => void;
    /** 触摸结束的回调 */
    end?: (param: UseTouchEventCallbackParam<T>) => void;
    /** touchmove 事件参数 */
    touchmoveOptions?: any;
}
/**
 * 触摸事件
 * @param option 参数
 */
export declare function useTouchEvent(option?: UseTouchEventOption<TouchEvent>): {
    handleTouchStart: (e: TouchEvent) => void;
    handleTouchMove: (e: TouchEvent) => void;
    handleTouchEnd: (e: TouchEvent) => void;
    bindTouchEvent: (el: HTMLElement) => void;
    unbindTouchEvent: (el: HTMLElement) => void;
};
/**
 * 移动事件对象
 */
export type MoveEvent = MouseEvent | TouchEvent;
/**
 * 鼠标移动事件或触摸移动事件
 * @param option 参数
 */
export declare function useMoveEvent(option?: UseTouchEventOption<MoveEvent>): {
    handleMousedown: (e: MouseEvent) => void;
    handleTouchstart: (e: TouchEvent) => void;
};
