import { Subject } from 'rxjs'; import { MarkdownEditorProps } from '../../BaseMarkdownEditor'; import { EditorStore } from '../store'; export type Methods = { [P in keyof T]: T[P] extends Function ? P : never; }[keyof T]; export declare class KeyboardTask { store: EditorStore; editor: EditorStore['editor']; props: MarkdownEditorProps; constructor(store: EditorStore, props: MarkdownEditorProps); /** * 获取当前编辑器中的最低层级元素节点 * * @returns 编辑器中所有匹配的元素节点及其路径 */ get curNodes(): Generator, void, undefined>; /** * 全选编辑器内容 * * 如果当前位于表格单元格内,则选中整个表格; * 否则选中编辑器中的所有内容 */ selectAll(): void; /** * 选择当前行的文本。 * * 如果编辑器中有选区,则选择当前行的文本,并打开浮动工具栏。 * * @remarks * 该方法首先检查编辑器中是否有选区。如果有选区,则选择当前行的文本路径。 * 然后获取当前行的文本内容,如果文本内容存在,则打开浮动工具栏。 */ selectLine(): void; /** * 将选中文本转换为行内代码 * * 如果编辑器存在选区,将选中的文本转换为行内代码格式 */ selectFormatToCode(): void; /** * 选择当前光标所在的单词或汉字。 * * 如果当前选区是折叠的(即光标没有选中任何文本),则会尝试选择光标所在位置的整个单词或汉字。 * * 具体步骤如下: * 1. 获取当前选区,如果选区是折叠的,则继续。 * 2. 获取光标所在位置的文本内容。 * 3. 根据光标位置,向前和向后查找单词或汉字的边界。 * 4. 更新选区,使其包含整个单词或汉字。 * 5. 如果选区不再是折叠的,则打开浮动工具栏。 * * @remarks * 该方法支持英文单词和中文汉字的选择。 */ selectWord(): void; /** * 从剪贴板粘贴纯文本内容到编辑器中。 * * 该方法首先从剪贴板读取文本内容,然后根据当前节点的类型决定如何插入文本。 * 如果当前节点是表格单元格类型,则将换行符替换为空格后插入文本; * 否则,直接插入文本。 * * @returns {Promise} 一个表示异步操作的 Promise 对象。 */ pastePlainText(): Promise; /** * 上传图片 * * 创建文件上传输入框,允许用户选择图片文件上传, * 然后根据当前节点位置将图片插入到编辑器中适当的位置。 * 支持列单元格、普通节点和空编辑器的不同插入逻辑。 */ uploadImage(): void; /** * 设置标题级别 * * 将当前段落或标题节点转换为指定级别的标题。 * 如果级别为4,则转换为普通段落。 * * @param level 标题级别(1-3)或4(表示普通段落) */ head(level: number): void; /** * 将标题转换为普通段落 * * 如果当前节点是标题类型,将其转换为普通段落 */ paragraph(): void; /** * 增加标题级别(使标题变小) * * 将段落转换为4级标题, * 或将标题级别从1级改为普通段落, * 或将其他级别标题升级一级(数字变小) */ increaseHead(): void; /** * 降低标题级别(使标题变大) * * 将段落转换为1级标题, * 或将4级标题改为普通段落, * 或将其他级别标题降级一级(数字变大) */ decreaseHead(): void; /** * 插入或移除引用块 * * 如果当前节点已在引用块中,则移除引用块; * 否则,将当前节点转换为引用块。 * 如果当前节点是标题,先将其转换为普通段落。 */ insertQuote(): void; /** * 插入表格 * * 在当前位置插入一个3x3的表格(包含表头行)。 * 根据当前节点类型(段落、标题或列单元格) * 决定在何处插入表格及如何处理现有内容。 */ insertTable(): void; /** * 插入分栏组 * * 在当前位置插入一个两列的分栏布局。 * 如果当前节点是空段落,会被删除。 */ /** * 插入代码块 * * 在当前位置插入代码块,并根据传入的类型设置语言和渲染模式。 * 支持在列单元格内或普通段落/标题后插入代码块。 * * @param type 可选的代码块类型,'mermaid'表示流程图,'html'表示HTML渲染 */ insertCode(type?: 'mermaid' | 'html'): void; /** * 插入水平分割线 * * 在当前位置插入水平分割线,并将光标定位到分割线后的位置。 * 如果分割线后没有内容,则自动插入一个空段落并将光标定位到该段落。 */ horizontalLine(): void; /** * 创建或转换列表 * * 将当前段落或标题转换为指定类型的列表。 * 如果已经是列表项,则更改列表类型。 * * @param mode 列表类型 'ordered'(有序列表), 'unordered'(无序列表), 'task'(任务列表) */ list(mode: 'ordered' | 'unordered' | 'task'): void; /** * 切换文本格式 * * 在当前选区上应用或取消指定的文本格式(如加粗、斜体等) * * @param type 要应用的格式类型('bold'、'italic'、'strikethrough'等) */ format(type: string): void; /** * 清除文本格式 * * 移除当前选区中的所有格式标记。 * 如果选区是折叠的(只有光标),则清除光标所在位置的所有标记 */ clear(): void; /** * 撤销上一步操作 * * 调用编辑器的undo方法,回退到上一个历史状态 */ undo(): void; /** * 重做上一步被撤销的操作 * * 调用编辑器的redo方法,前进到下一个历史状态 */ redo(): void; } export declare const useSystemKeyboard: (keyTask$: Subject<{ key: Methods; args?: any[]; }>, store: EditorStore, props: MarkdownEditorProps, markdownContainerRef?: React.RefObject) => void;