UNPKG

@starzhuimeng/formula-editor

Version:

A configurable formula editor with customizable symbols

255 lines (254 loc) 6.32 kB
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; }