import { Doc } from '../view/Doc';
export type Data = Record<string, any>;
type JsonPath = string;
type SubscriptionCallback = (newValue: any, oldValue: any) => void;
/**
 * 数据管理器
 * 用于保存和操作原始 JSON 数据，支持基于 jsonpath 的读写操作
 * 所有数据读写都基于 jsonpath 查询进行
 */
export declare class DataManager {
    private doc;
    private subscriptions;
    private layoutScheduled;
    private rawData;
    /**
     * 默认值 Map
     * key: jsonpath 路径 (支持 [n] 数组索引)
     * value: 默认值
     */
    private defaults;
    constructor(_doc: Doc, data?: Data);
    /**
     * 从 JSON 数据创建 DataManager
     */
    static create(doc: Doc, data?: Data): DataManager;
    /**
     * 调度 layout，自动合并同一微任务队列中的多个操作
     */
    private scheduleLayout;
    /**
     * 根据 jsonpath 获取原始数据（仅返回 rawData 中的值）
     * @param path jsonpath 路径 (例如: "document.body.children[0].text" 或 "user.name")
     * @returns 指定路径的值，不存在返回 undefined
     */
    get<T = any>(path: JsonPath): T | undefined;
    /**
     * 根据 jsonpath 获取标签数据
     * 优先获取带 LABEL_SUFFIX 的值，如果不存在则返回原值
     * @param path jsonpath 路径
     * @returns 指定路径的标签值或原值，不存在返回 undefined
     */
    getLabel<T = any>(path: JsonPath): T | undefined;
    resolve<T = any>(path: JsonPath): T | undefined;
    resolveLabel<T = any>(path: JsonPath): T | undefined;
    /**
     * 根据 jsonpath 设置数据
     * @param path jsonpath 路径
     * @param value 要设置的值
     * @returns 是否设置成功
     */
    set(path: JsonPath, value: any): boolean;
    /**
     * 根据 jsonpath 删除数据
     * @param path jsonpath 路径
     * @returns 是否删除成功
     */
    delete(path: JsonPath): boolean;
    /**
     * 检查指定路径是否存在（检查原始值）
     * @param path jsonpath 路径
     * @returns 是否存在
     */
    has(path: JsonPath): boolean;
    /**
     * 根据 jsonpath 更新数据（使用回调函数）
     * @param path jsonpath 路径
     * @param callback 更新回调函数
     * @returns 是否更新成功
     */
    update<T = any>(path: JsonPath, callback: (value: T) => T): boolean;
    /**
     * 根据 jsonpath 批量设置数据
     * @param updates 路径与值的映射对象
     * @returns 是否全部设置成功
     */
    setMultiple(updates: Record<JsonPath, any>): boolean;
    /**
     * 在数组末尾添加一个或多个元素
     * @param path 数组的 jsonpath 路径
     * @param values 要添加的值，可以是多个值；如果不传则默认添加空对象
     * @returns 是否添加成功
     */
    push(path: JsonPath, ...values: any[]): boolean;
    /**
     * 移除数组末尾的元素
     * @param path 数组的 jsonpath 路径
     * @returns 被移除的元素，如果失败返回 undefined
     */
    pop(path: JsonPath): any | undefined;
    /**
     * 在数组指定位置插入一个或多个元素
     * @param path 数组的 jsonpath 路径
     * @param index 插入位置（0 表示开头）
     * @param values 要插入的值，可以是多个值；如果不传则默认插入空对象
     * @returns 是否插入成功
     */
    insertAt(path: JsonPath, index: number, ...values: any[]): boolean;
    /**
     * 移除数组指定位置的元素
     * @param path 数组的 jsonpath 路径
     * @param index 移除位置
     * @returns 被移除的元素，如果失败返回 undefined
     */
    removeAt(path: JsonPath, index: number): any | undefined;
    /**
     * 获取原始数据的深拷贝
     * @returns 原始 JSON 数据
     */
    getRawData(): Data;
    /**
     * 设置整个原始数据
     * @param data 新的 JSON 数据
     */
    setRawData(data: Data): void;
    /**
     * 内部方法：根据路径获取值
     */
    private getByPath;
    /**
     * 内部方法：根据路径设置值
     */
    private setByPath;
    /**
     * 内部方法：根据路径删除值
     */
    private deleteByPath;
    /**
     * 解析 jsonpath 路径字符串
     * 支持格式: "prop.nested[0].key" 或 "$" (根路径)
     */
    private parsePath;
    /**
     * 深拷贝对象
     */
    private deepClone;
    /**
     * 序列化为 JSON 字符串
     */
    toJSON(): string;
    /**
     * 从 JSON 字符串加载
     */
    static fromJSONString(doc: Doc, jsonString: JsonPath): DataManager;
    /**
     * 订阅指定路径的数据变化
     * @param path jsonpath 路径
     * @param callback 数据变化时的回调函数
     * @returns 取消订阅的函数
     */
    subscribe(path: JsonPath, callback: SubscriptionCallback): () => void;
    /**
     * 取消指定路径的所有订阅
     * @param path jsonpath 路径
     */
    unsubscribe(path?: JsonPath): void;
    /**
     * 清空所有数据
     */
    clear(): void;
    /**
     * 发送数据变化事件
     */
    private emit;
    /**
     * 获取父路径
     */
    private getParentPath;
    /**
     * 设置默认值
     * @param path jsonpath 路径 (支持 [n] 数组索引和 [n] 通配符)
     * @param value 默认值
     */
    setDefault(path: JsonPath, value: any): void;
    /**
     * 批量设置默认值
     * @param defaultsMap 路径与值的映射对象
     */
    setDefaults(defaultsMap: Record<JsonPath, any>): void;
    /**
     * 获取默认值
     * 支持处理 [n] 数组索引的特殊情况
     * 例如：如果找不到 "items[0].name"，尝试找 "items[n].name"
     * @param path jsonpath 路径
     * @returns 默认值，不存在返回 undefined
     */
    getDefault<T = any>(path: JsonPath): T | undefined;
    /**
     * 将路径中的具体数组索引转换为通配符
     * 例如: "items[0].name" -> "items[n].name"
     * @param path 原始路径
     * @returns 转换后的路径
     */
    private convertPathToWildcard;
    private formatRuntimeValue;
    /**
     * 获取所有默认值
     * @returns 默认值 Map 的副本
     */
    getDefaults(): Map<JsonPath, any>;
    /**
     * 清空所有默认值
     */
    clearDefaults(): void;
}
export {};
