import { FormulaEditorOptions, EventType, FormulaElement, ValidationRule, ValidationResult } from '../types';
/**
 * 公式编辑器类
 */
export declare class FormulaEditor {
    private container;
    private editorContainer;
    private editArea;
    private symbolButton;
    private symbolPanel;
    private options;
    private formulaElements;
    private elementTags;
    private currentFocus;
    private textInputElement;
    private eventListeners;
    private errorMessageElement;
    private lastValidationResult;
    /**
     * 构造函数
     * @param options 编辑器选项
     */
    constructor(options: FormulaEditorOptions);
    /**
     * 合并默认配置
     */
    private mergeWithDefaults;
    /**
     * 初始化编辑器
     */
    private init;
    /**
     * 处理区域点击事件
     */
    private handleAreaClick;
    /**
     * 将焦点设置到末尾
     */
    private setFocusToEnd;
    /**
     * 处理键盘事件
     */
    private handleKeyDown;
    /**
     * 强制显示文本输入框（跳过常规检查）
     */
    private forceShowTextInput;
    /**
     * 显示文本输入框
     */
    private showTextInput;
    /**
     * 隐藏文本输入框
     */
    private hideTextInput;
    /**
     * 处理文本输入框的键盘事件
     */
    private handleTextInputKeyDown;
    /**
     * 提交文本输入框的内容
     */
    private commitTextInput;
    /**
     * 插入整个文本作为一个标签
     * @param text 要插入的文本
     */
    private insertText;
    /**
     * 插入符号
     */
    private insertSymbol;
    /**
     * 创建元素标签
     */
    private createElementTag;
    /**
     * 触发变更事件
     */
    private triggerChangeEvent;
    /**
     * 设置公式
     * @param formula 公式字符串
     */
    setFormula(formula: string): void;
    /**
     * 获取公式字符串
     * @returns 公式字符串
     */
    getFormula(): string;
    /**
     * 获取公式元素数组
     * @returns 公式元素数组
     */
    getFormulaElements(): FormulaElement[];
    /**
     * 获取指定索引位置的公式元素
     * @param index 元素索引
     * @returns 公式元素，如果索引无效则返回null
     */
    getElementAt(index: number): FormulaElement | null;
    /**
     * 在指定位置插入新元素
     * @param element 要插入的元素
     * @param index 插入位置索引，默认为当前焦点位置
     * @returns 成功插入的元素
     */
    insertElement(element: Omit<FormulaElement, 'id'>, index?: number): FormulaElement;
    /**
     * 更新指定索引位置的元素
     * @param index 元素索引
     * @param elementUpdate 元素更新数据
     * @returns 成功返回true，失败返回false
     */
    updateElement(index: number, elementUpdate: Partial<Omit<FormulaElement, 'id'>>): boolean;
    /**
     * 从指定位置删除元素
     * @param index 要删除的元素索引
     * @returns 成功返回true，失败返回false
     */
    removeElement(index: number): boolean;
    /**
     * 添加元素到公式末尾
     * @param element 要添加的元素
     * @returns 添加的元素
     */
    appendElement(element: Omit<FormulaElement, 'id'>): FormulaElement;
    /**
     * 查找符合条件的元素
     * @param predicate 查找条件函数
     * @returns 满足条件的元素索引数组
     */
    findElements(predicate: (element: FormulaElement, index: number) => boolean): number[];
    /**
     * 移动焦点到指定索引位置
     * @param index 目标索引
     * @returns 成功返回true，失败返回false
     */
    setFocusToIndex(index: number): boolean;
    /**
     * 获取当前焦点位置
     * @returns 当前焦点索引
     */
    getCurrentFocusIndex(): number;
    /**
     * 批量更新公式元素
     * @param elements 新的元素数组
     */
    setElements(elements: Omit<FormulaElement, 'id'>[]): void;
    /**
     * 复制指定元素到剪贴板
     * @param index 要复制的元素索引
     * @returns 成功返回true，失败返回false
     */
    copyElement(index: number): boolean;
    /**
     * 获取公式的纯文本表示
     * @returns 公式的纯文本
     */
    getFormulaText(): string;
    /**
     * 公开的删除当前选中元素的方法
     * @returns 成功返回true，失败返回false
     */
    deleteCurrentElement(): boolean;
    /**
     * 设置只读模式
     */
    setReadOnly(readOnly: boolean): void;
    /**
     * 清空编辑器
     */
    clear(): void;
    /**
     * 添加事件监听器
     */
    addEventListener(event: EventType, callback: Function): void;
    /**
     * 移除事件监听器
     */
    removeEventListener(event: EventType, callback: Function): void;
    /**
     * 触发事件
     */
    private triggerEvent;
    /**
     * 移动焦点到左边
     */
    private moveFocusLeft;
    /**
     * 移动焦点到右边
     */
    private moveFocusRight;
    /**
     * 更新焦点指示器
     */
    private updateFocusIndicator;
    /**
     * 删除元素
     */
    private deleteElement;
    /**
     * 创建工具栏
     */
    private createToolbar;
    /**
     * 创建编辑区域
     */
    private createEditArea;
    /**
     * 创建文本输入组件
     */
    private createTextInput;
    /**
     * 创建错误信息显示元素
     */
    private createErrorMessageElement;
    /**
     * 显示错误信息
     */
    private showErrorMessage;
    /**
     * 隐藏错误信息
     */
    private hideErrorMessage;
    /**
     * 验证公式
     */
    validateFormula(): ValidationResult;
    /**
     * 高亮显示错误元素
     */
    private highlightErrorElement;
    /**
     * 清除错误高亮
     */
    private clearErrorHighlights;
    /**
     * 获取最后一次验证结果
     */
    getLastValidationResult(): ValidationResult | null;
    /**
     * 设置验证规则
     */
    setValidationRules(rules: ValidationRule[]): void;
    /**
     * 启用/禁用自动验证
     */
    setAutoValidate(autoValidate: boolean): void;
    /**
     * 设置自定义验证器
     */
    setCustomValidator(validator: (formula: string, elements: FormulaElement[]) => ValidationResult): void;
}
