跳转到内容

AI Rich Editor API 参考

属性类型默认值说明
valuestringDEFAULT_HTML当前 HTML 内容
onChange(value: string) => void—内容变化回调(应用时刻已作用域化)
chatAiRichChatSource—必填,对话接入:已鉴权的 OpenAI 端点 URL,或自定义适配器函数
mediaMediaConfig—媒体能力(顶层属性,非 config)
toolsAiRichEditorTools—宿主注入的能力集合,目前含文档解析
allowedUrlSchemesreadonly string[][]追加允许的 URL 协议(只增不减)
onNotifyAiRichNotifyHandler包内置轻提示通知上报(可见文案)
onErrorAiRichErrorHandlerconsole.error错误上报(错误实例)
heightnumber | string640工作台整体高度
configAiRichEditorConfig见下统一配置,仅初始值、非受控
onConfigChange(config: AiRichEditorConfig) => void—设置面板保存后回写,用于持久化

chat 只给协议,包内不持有端点、鉴权与模型知识。传字符串走包内 OpenAI 路径,传函数则由宿主自行请求:

/** 接入点:字符串为已鉴权的 OpenAI 端点(包内负责请求与 SSE 解析),函数为自定义适配器 */
type AiRichChatSource = string | AiRichChatAdapter;
/** 函数接入点:把协议请求包成自己的协议请求,流式返回增量 */
type AiRichChatAdapter = (
request: AiRichChatRequest,
signal: AbortSignal,
) => AsyncIterable<AiRichChatChunk>;
interface AiRichChatRequest {
messages: AiRichChatMessage[];
}
interface AiRichChatMessage {
role: 'system' | 'user' | 'assistant';
content: string | AiRichChatContentPart[];
}
type AiRichChatContentPart =
| { type: 'text'; text: string }
| { type: 'image_url'; image_url: { url: string } };
interface AiRichChatChunk {
content?: string; // 正文增量
reasoning?: string; // 思考增量
finishReason?: string; // 结束原因
}
  • 字符串接入:请求体固定 { messages, stream: true },不带 model(模型由端点侧决定),用 credentials: 'same-origin',可依托同源 cookie 鉴权
  • 字符串接入的结束判定以 [DONE] 或 finish_reason 为准;函数接入以迭代器正常结束为准,异常中断请自行抛错
  • 需要自定义请求头 / 额外请求体字段 / 非 OpenAI 协议时,一律传函数适配器
字段类型默认值说明
autoApplybooleantrue回复结束后自动应用到编辑器
previewEditMenubooleantrue预览区右键「用 AI 修改」入口
systemPromptstring内置模板自定义 system 提示词,作为 messages[0] 发送
previewHeadstring—预览 <head> 附加代码(原始 HTML)
sendImagesAsMultimodalbooleantrue图片附件以多模态 content parts 发送

错误同时走两条通道:可见文案走 onNotify,错误实例走 onError。

通道类型承载未注入时的兜底
onNotifyAiRichNotifyHandler用户可见文案包内置轻提示
onErrorAiRichErrorHandler错误实例console.error(不上浮 UI)
type AiRichNotifyHandler = (
type: 'success' | 'warning' | 'error',
content: string,
) => void;
type AiRichErrorHandler = (error: Error) => void;

错误类:MediaNotConfiguredError、InvalidMediaUrlError。

媒体能力经顶层 media 按类型注入,未配置的类型即不可用。

interface MediaConfig {
image?: MediaUploadConfig;
video?: MediaUploadConfig;
audio?: MediaUploadConfig;
attachment?: MediaUploadConfig; // 其余文件的兜底
}
interface MediaUploadConfig {
upload: (file: File, onProgress?: MediaUploadProgress) => Promise<MediaItem>;
getList?: (params: MediaListParams) => Promise<MediaListResult>;
}
interface MediaItem {
id: string;
url: string;
name: string;
size?: number;
thumbnailUrl?: string;
fileType?: string;
}
type MediaKind = 'image' | 'video' | 'audio' | 'attachment';

MediaItem / MediaListParams / MediaListResult / MediaUploadConfig / MediaKind / MediaUploadProgress 与 @easyx/editor 共用同一套媒体契约,宿主接口可复用。

tools.parseDocument 是异步方法,本地或服务端解析皆可;不传则文档入口不出现。

interface AiRichEditorTools {
parseDocument?: AiRichDocumentParser;
}
type AiRichDocumentParser = (file: File) => Promise<AiRichParsedDocument>;
interface AiRichParsedDocument {
name?: string;
kind?: 'docx' | 'pdf';
html?: string;
text?: string;
pageCount?: number;
warnings?: string[];
}

./parsers 入口(可选 peer 依赖 mammoth / unpdf 按需加载):

导出说明
createDefaultDocumentParser()按扩展名分派(.docx → HTML,.pdf → 文本)
createDocxParser() / createPdfParser()只解析单一类型
UnsupportedDocumentError / DocumentParseError错误类,供 onError 分支判断
resolveDocumentKind(fileName)扩展名 → 文档类型
isDocumentFile(fileName, extensions?) / isLegacyDoc(fileName)扩展名判定 / 旧版 .doc 判定
documentAccept(extensions?)文件选择框 accept
DEFAULT_DOCUMENT_EXTENSIONS默认扩展名清单

详见文档解析。

导出类型说明
AiRichEditor组件主组件
DEFAULT_HTMLstring首次打开时的默认 HTML 片段
DEFAULT_CONFIGAiRichEditorConfig默认配置
DEFAULT_SYSTEM_PROMPT_TEMPLATEstring内置 system 提示词模板
PRESET_PROMPTSreadonly string[]空态推荐指令
PREVIEW_DEVICESAiRichPreviewDevice[]预览设备档位
buildDefaultSystemPrompt()() => string构建内置 system 提示词
extractHtmlFragments(content)(content: string) => string[]提取回复中的全部 HTML 片段
buildPreviewDocument(html, head?)(html: string, head?: string) => string构建预览 iframe 文档
buildMediaSnippet(input)(input) => string | undefined生成自包含媒体片段(默认校验地址,宿主来源可传 { trusted: true })
mediaKindLabel(kind)(kind: MediaKind) => string媒体类型中文名
resolveMediaKind(fileType)(fileType: string) => MediaKind文件 MIME → 媒体类型
sanitizeUrl(url, options?)(url, options?) => string | undefined地址协议白名单校验(不安全返回 undefined)
listAllowedSchemes(options?)(options?) => readonly string[]当前生效的协议清单
MediaNotConfiguredError / InvalidMediaUrlError错误类供 onError 分支判断
类型说明
AiRichEditorProps组件 Props
AiRichEditorConfig可序列化配置(设置面板编辑)
AiRichEditorTools宿主注入的能力集合
AiRichNotifyHandler / AiRichErrorHandler通知 / 错误回调
AiRichChatSource / AiRichChatAdapter / AiRichChatRequest / AiRichChatMessage / AiRichChatContentPart / AiRichChatChunk对话接入协议
AiRichPreviewDevice预览设备档位 { key, label, width?, height? }
MediaConfig / MediaUploadConfig / MediaItem / MediaListParams / MediaListResult / MediaKind / MediaUploadProgress媒体契约
AiRichDocumentParser / AiRichParsedDocument / AiRichDocumentKind文档解析

--easyx-ai-rich-editor-* 覆盖背景、边框、文字、主色、阴影、圆角、字号与层级等;--easyx-ai-rich-editor-code-* 覆盖代码面板的选区、当前行与语法高亮。亮暗两套取值由包内定义,宿主可在自己的选择器内覆盖任一变量。

变量说明
--easyx-ai-rich-editor-bg面板背景色
--easyx-ai-rich-editor-bg-subtle次级背景色(代码块、预览舞台)
--easyx-ai-rich-editor-border边框 / 分隔线色
--easyx-ai-rich-editor-text / -text-secondary / -text-tertiary文字色三级
--easyx-ai-rich-editor-primary / -primary-hover / -primary-soft主色三态
--easyx-ai-rich-editor-shadow / -radius浮层阴影 / 圆角
--easyx-ai-rich-editor-preview-bg预览画布背景(固定白底)
--easyx-ai-rich-editor-code-selection / -match / -active-line代码面板选区与当前行
--easyx-ai-rich-editor-code-tag / -attr / -string / -keyword / -comment …代码面板语法高亮