@starzhuimeng/formula-editor
Version:
A configurable formula editor with customizable symbols
255 lines (254 loc) • 6.32 kB
TypeScript
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;
}