/** 基础工具 */
/**
 * 生成唯一 id
 */
export declare function uuid(): string;
export declare const halfPixel: (n: number) => number;
export declare const isEmptyValue: (value: any) => boolean;
/**
 * 安全解析 JSON
 * @param data 待解析数据
 * @param fallback 失败时返回值，默认 null
 * @param validator 结果校验器
 */
export declare function safeParseJson<T = any>(data: unknown, fallback?: T | null, validator?: (value: unknown) => value is T): T | null;
/** 设置字段的默认valuePath */
export declare function generateValuePath(fieldLink: string, subFieldKey: string): string;
/**
 * 按分隔符截取字符串最后一个片段，处理空值/无分隔符边界
 * @param str 待截取的字符串（允许空/undefined）
 * @param separator 分隔符，默认.
 * @returns 最后一个片段，空值返回空字符串
 */
export declare function getLastSegment(str?: string, separator?: string): string;
/**
 * 根据参考路径 / index 替换模板中的占位符
 *
 * - 传入 x 时替换 [n_x]
 * - 传入 y 时替换 [n_y]
 * - 未传入时保留原占位符
 * - 最后再统一处理普通 [n]
 *
 * 示例：
 * replacePathIndexPlaceholders({
 *   x: 1,
 *   y: undefined,
 *   templatePath: '$.table[n_y].cross[n_x].value[n]',
 * })
 * =>
 * '$.table[n_y].cross[1].value[n]'
 */
export declare function replacePathIndexPlaceholders(params: {
    refPath?: string;
    n?: number;
    x?: number;
    y?: number;
    templatePath: string;
}): string;
/**
 * 提取参考路径中的索引，替换模板路径中的占位符
 *
 * @param refPath 参考路径（如 $.a[1].b）或直接传数字
 * @param templatePath 模板路径（如 $.list[n].value）
 * @param placeholder 占位符名称，默认 n
 *
 * @example
 * replacePathIndexPlaceholder(1, '$.a[n].b')
 * // $.a[1].b
 *
 * @example
 * replacePathIndexPlaceholder(2, '$.a[n_x].b', 'n_x')
 * // $.a[2].b
 */
export declare function replacePathIndexPlaceholder(refPath: string | number | undefined, templatePath: string, placeholder?: string): string;
export interface ParsedValuePath {
    /** 原始路径 */
    raw: string;
    /** 去掉 $. 后 */
    normalized: string;
    /** 最终字段 */
    fieldKey: string;
    fieldPath: string;
    /** 父级字段 */
    parentFieldKey?: string;
    parentFieldPath?: string;
    /** 是否根字段 */
    isRoot: boolean;
    /** 是否子表 */
    isSubTable: boolean;
    /** 是否 link */
    isLink: boolean;
    /** linkFieldKey */
    linkFieldKey?: string;
    linkFieldPath?: string;
    /** 是否含 index */
    hasIndex: boolean;
    /** path segments */
    segments: string[];
}
export declare function parseValuePath(valuePath?: string): ParsedValuePath;
/**
 * 提取 $.变量名[内容] 格式的方法（截取到 ] 并包含 ]）
 * @param str
 * @returns
 */
export declare function getBeforeBracket(str: string): string;
/** 防抖特性的RAF，同一帧内多次调用 schedule() 只会执行一次  */
export declare function createRafOnce(): {
    schedule: (fn: () => void) => void;
    syncSchedule: <T>(fn: () => T) => Promise<T>;
    cancel: () => void;
};
export declare function listToTree<T extends {
    value: any;
    label: string;
    _item?: {
        parentId?: string;
    };
}>(list: T[], transform?: (node: T) => any): any[];
export declare function flattenTree<T extends Record<string, any>>(tree: T[], childrenKey?: string): T[];
/** 从 URL 提取 name */
export declare function getFileName(url: string): string;
/**
 * 合并两个按钮数组
 * @param {Array} A - 基础数组
 * @param {Array} B - 更新数组
 * @param {Object} options
 * @param {string[]} options.keyFields - 用于唯一匹配的字段
 * @param {string[]} options.fieldsToMerge - 从 B 合并到 A 的字段
 * @param {boolean} options.isAllowMerge - 是否允许合并
 * @param {boolean} options.isConcat - 如果 A数组是空是否直接用B 数组
 * @returns {Array} 合并后的数组
 */
export declare function mergeByMultiKey(A: any[], B: any[], { keyFields, fieldsToMerge, isAllowMerge, isConcat, }?: {
    keyFields?: string[] | undefined;
    fieldsToMerge?: string[] | undefined;
    isAllowMerge?: boolean | undefined;
    isConcat?: boolean | undefined;
}): any[];
