/// <reference types="react" />
/**
 * useAutoScroll Hook - 自动滚动 Hook
 *
 * 提供智能的"跟随底部"滚动能力，常用于聊天消息、流式输出等场景。
 *
 * @description
 * - 内容增长时若处于"跟随状态"则平滑跟随到底部
 * - 通过监听 wheel/touchmove/keydown 等用户交互事件来判断是否脱离跟随
 *   （而非依赖 scroll 事件，避免程序滚动期间被自己派发的 scroll 误判）
 * - 使用 ResizeObserver + MutationObserver 双重监听内容尺寸/结构变化，
 *   覆盖图片懒加载、代码块异步高亮等不会触发 mutation 的场景
 * - 平滑滚动基于 requestAnimationFrame 渐进推进，新内容进来时会无缝接续，
 *   不会被浏览器原生 smooth 动画打断造成抖动
 *
 * @template T - 容器元素类型
 * @param props - Hook 配置参数
 * @param props.scrollTolerance - 判定"已贴底"的容差阈值（px），默认 20
 * @param props.SCROLL_TOLERANCE - **已废弃**，请使用 `scrollTolerance`，仅作向后兼容保留
 * @param props.pinThreshold - 判定"已脱离底部"的阈值（px），默认 80。距离底部超过该值才认为用户已离开
 * @param props.onResize - 容器尺寸变化回调
 * @param props.onScrollStateChange - 跟随状态/贴底状态变化回调
 * @param props.deps - 依赖数组，依赖变化会重新初始化所有监听
 * @param props.scrollBehavior - 自动跟随时的滚动行为，'smooth' 使用 rAF 渐进、'auto' 立即跳转，默认 'smooth'
 *
 * @returns
 * - containerRef：滚动容器 ref
 * - scrollToBottom(behavior?)：手动滚动到底部，默认 'auto' 立即滚动
 * - isAtBottom()：当前是否处于贴底状态
 *
 * @example
 * ```tsx
 * const { containerRef, scrollToBottom, isAtBottom } = useAutoScroll({
 *   pinThreshold: 80,
 *   onScrollStateChange: ({ isAtBottom, isPinned }) => {
 *     setShowBackToBottom(!isAtBottom);
 *   },
 * });
 * ```
 */
export interface AutoScrollState {
    /** 是否贴近底部（距离 <= SCROLL_TOLERANCE） */
    isAtBottom: boolean;
    /** 是否处于"跟随底部"状态（用户未主动上滑离开） */
    isPinned: boolean;
}
export interface UseAutoScrollProps {
    /** 判定"已贴底"的容差阈值（px），默认 20 */
    scrollTolerance?: number;
    /**
     * @deprecated 已废弃，请使用 `scrollTolerance`，下个大版本将移除。
     * 同时传入时优先使用 `scrollTolerance`。
     */
    SCROLL_TOLERANCE?: number;
    pinThreshold?: number;
    onResize?: (size: {
        width: number;
        height: number;
    }) => void;
    onScrollStateChange?: (state: AutoScrollState) => void;
    deps?: React.DependencyList;
    /** @deprecated 已无作用，rAF 渐进滚动不再需要节流时间窗口 */
    timeout?: number;
    scrollBehavior?: 'smooth' | 'auto';
}
export declare const useAutoScroll: <T extends HTMLDivElement>(props?: UseAutoScrollProps) => {
    readonly containerRef: import("react").MutableRefObject<T | null>;
    readonly scrollToBottom: (behavior?: 'smooth' | 'auto') => void;
    readonly isAtBottom: () => boolean;
};
export default useAutoScroll;
