跳转到内容

Editor

@easyx/editor 是零框架依赖的 Tiptap 富文本编辑器:工具栏、气泡菜单、媒体浮层全部以原生 DOM 构建,可接入任何前端技术栈。

零 UI 框架依赖

工具栏、气泡菜单与选中浮层均为原生 DOM,不引入 React / Vue。

表格增强

集成 @easyx/tiptap-table-plus,支持单元格样式、选区手柄、右键菜单与块级背景色。

媒体能力

图片、视频、音频、附件支持上传 / 网络地址 / 媒体库三种插入方式。

高度可控

height / minHeight / maxHeight / resizable 覆盖自适应、定高与拖拽调节。

主题内建

全部颜色由 CSS 自定义属性控制,setTheme() 运行时切换并同步表格主题。

样式内联

SCSS 编译后内联进 JS,宿主无需单独引入样式文件。

Terminal window
pnpm add @easyx/editor
  1. 准备一个空容器元素。

    <div id="editor"></div>
  2. 调用 createEditor 创建实例。

    import { createEditor } from '@easyx/editor';
    const container = document.querySelector<HTMLElement>('#editor')!;
    const editor = createEditor(container, {
    placeholder: '请输入…',
    defaultTheme: 'light',
    height: 320,
    resizable: true,
    image: {
    upload: async (file) => ({
    id: file.name,
    url: URL.createObjectURL(file),
    name: file.name,
    size: file.size,
    }),
    },
    onChange: (content) => console.log(content),
    });
  3. 按需读写内容或销毁实例。

    editor.setHTML('<p>Hello World</p>');
    // …
    editor.destroy();

createEditor 返回的实例完全独立于 UI 框架,配套方法见 API 参考。

image / video / audio / attachment 接受同一套 MediaUploadConfig:upload 为必需,getList 提供后媒体下拉才出现「媒体库」页签。

interface MediaUploadConfig {
upload: (file: File, onProgress?: (progress: number) => void) => Promise<MediaItem>;
getList?: (params: MediaListParams) => Promise<MediaListResult>;
}

编辑器内容区支持直接粘贴或拖入文件:仅当剪贴板 / 拖放只包含文件(无富文本)时接管,按类型路由到对应 upload。上传失败触发 uploadError 事件。

通过 setTheme() 切换亮 / 暗主题,编辑器自动在容器上添加 / 移除 easyx-editor-dark 类,并同步表格主题。所有颜色由 CSS 自定义属性控制,可在外部覆盖。

editor.setTheme('dark');
  • 高度模式:height / minHeight / maxHeight / resizable 的行为差异
  • API 参考:全部配置项、实例方法、事件与类型
  • Table Plus:独立的表格增强套件