/**
 * 创建一个防抖函数，延迟执行目标函数，直到停止调用一段时间后。
 *
 * @template T - 被包装函数的类型
 * @param {T} fn - 需要防抖处理的目标函数
 * @param {number} [wait=0] - 延迟等待的时间（毫秒）
 * @param {boolean} [leading=true] - 是否在首次调用时立即执行一次函数
 * @param {boolean} [trailing=false] - 当 `leading` 为 `true` 时，是否允许在**等待期间发生过后续调用**的情况下，于延迟结束后再次执行一次函数
 * @returns {T} - 返回新的防抖函数
 *
 * @example
 * // 默认行为：首次调用立即执行，后续调用重置计时器，停止调用后不再执行
 * const debouncedFn = debounce(fn, 500);
 *
 * @example
 * // 仅延迟执行：等待 500ms 无新调用后才执行一次
 * const debouncedFn = debounce(fn, 500, false);
 *
 * @example
 * // 立即执行 + 尾部执行：首次立即执行，若在 500ms 内又调用了，则停止调用 500ms 后再执行一次
 * const debouncedFn = debounce(fn, 500, true, true);
 *
 * @remarks
 * - 当 `leading` 和 `trailing` 均为 `true` 时，函数在连续快速调用中最多执行两次：开始一次，结束一次。
 * - 如果在等待期间只调用了一次（即没有后续调用重置计时器），则不会触发 `trailing` 执行。
 */
export declare function debounce<T extends (...args: Array<any>) => any>(fn: T, wait?: number, leading?: false): T;
export declare function debounce<T extends (...args: Array<any>) => any>(fn: T, wait: number, leading: true, trailing?: boolean): T;
/**
 * @description 基于 requestAnimationFrame 的防抖，仅在客户端环境下有意义。
 * 调用方应确保仅在客户端激活后使用此函数。
 *
 * @template T - 被包装函数的类型
 * @param {T} fn - 需要防抖处理的目标函数
 * @returns {T & { cancel: () => void }} 返回防抖函数，附带 cancel 方法用于取消待执行帧
 */
export declare function debounceRAF<T extends (...args: Array<any>) => any>(fn: T): {
    (...args: Array<any>): void;
    cancel(): void;
};
/**
 * @description 基于 requestAnimationFrame 的节流，仅在客户端环境下有意义。
 * 调用方应确保仅在客户端激活后使用此函数。
 *
 * @template T - 被包装函数的类型
 * @param {T} fn - 需要节流处理的目标函数
 * @returns {T & { cancel: () => void }} 返回节流函数，附带 cancel 方法用于取消待执行帧
 */
export declare function throttleRAF<T extends (...args: Array<any>) => any>(fn: T): {
    (...args: Array<any>): void;
    cancel(): void;
};
/**
 * 颜色池
 */
export declare class ColorPool {
    pool: Array<string>;
    tmpPool: Array<string>;
    constructor(pool: Array<string>);
    /**
     * 返回指定位置颜色，或者从颜色池随机返回一个颜色
     * @param index
     * @returns
     */
    pick(index?: number): string;
}
/**
 * 生成随机字符串
 * @param prefix 前缀
 * @param length 字符串长度
 */
export declare function uniqueId(prefix?: string, length?: number): string;
/**
 * 将数组拆分成多个指定长度的区块
 * @param arr 被拆分数组
 * @param size 区块长度
 */
export declare function chunk(arr?: any[], size?: number): any[][];
/**
 * 异步some
 * @param array 遍历数组
 * @param judgeFn 判断函数
 */
export declare function asyncSome<T>(array: Array<T>, judgeFn: (arrayItem: T) => Promise<boolean | undefined>): Promise<boolean>;
/**
 * 根据path从对象中获取值
 */
export declare function getValueByPath(obj: object, path: string): any;
/**
 * 根据path设置对象中的值
 */
export declare function setValueByPath(obj: {
    [k: string]: any;
}, path: string, value: any): void;
/**
 * 将数组中的某一项移到第一项
 * @param arr 被移动的数组
 * @param item 需要移动的项
 * @returns Array
 */
export declare function moveToFirst<T>(arr: T[], item: T): T[];
/**
 * 转换为字符串，对于undefined、null、NaN转换为''
 * @param val
 * @returns string
 */
export declare function formateToString(val: unknown): string;
/**
 * 使用图片url请求加载图片
 * @param src s
 * @returns
 */
export declare function requestImage(src: string): Promise<unknown>;
/**
 * 从对象中挑选属性
 */
export declare function pick(source: object, keys: string[]): Record<string, any>;
/**
 * 分批执行大量任务
 * tasks: 任务列表 Array<() => void>
 * sheduler：调度器函数，用于分批执行任务
 *    runChunk：分批执行函数 (toContinue:(currentTaskIndex: number)=>boolean)=>void
 *        toContinue:(currentTaskIndex: number)=>boolean 是否继续执行的条件
 */
export declare function performTask(tasks: Array<() => void>, sheduler: (runChunk: (toContinue: (currentTaskIndex: number) => boolean) => void) => void): void;
/**
 * 分时执行大量任务,使用requestIdleCallback
 * tasks: 任务列表 Array<() => void>
 */
export declare function idlePerformTask(tasks: Array<() => void>): void;
/**
 * polyfill to Promise.withResolvers (ES2024)
 */
export declare function promiseWithResolvers<T = unknown>(): {
    promise: Promise<T>;
    resolve: (value: T | PromiseLike<T>) => void;
    reject: (reason?: any) => void;
};
