For AI agents: the complete documentation index is available at https://a3s-lab.github.io/Office/docs/0.1.0/llms.txt, the full documentation bundle is available at https://a3s-lab.github.io/Office/docs/0.1.0/llms-full.txt, and this page is available as Markdown at https://a3s-lab.github.io/Office/docs/0.1.0/components/document.md.
  • 简体中文
  • 0.1.0
  • DocumentEditor

    DocumentEditor 用于编辑需要分页的 DOCX 兼容文档、报告和长篇内容。 TipTap 负责逻辑文档与选区,A3S Office 内核负责确定性分页、文本塑形和文件语义。

    属性

    属性类型必填默认值说明
    contentDocumentContent受控文档内容。
    onChange(content: DocumentContent) => void返回完整的新内容。
    artifactIdstring在线 PDF 导出使用的稳定宿主 ID。
    previewbooleanfalse使用同一分页结果的只读渲染。
    saveStatusstring'Saved automatically'由宿主管理的保存状态。
    fileActionsreadonly OfficeFileAction[][]宿主文件操作。
    extensionsExtensions[]名称不重复的附加 TipTap Extension。
    kernelWasmUrlstring内置内核覆盖 Office 排版内核地址。
    layoutFontsreadonly DocumentLayoutFont[]内置字体浏览器与塑形内核共用、并显示在字体菜单中的字体。
    onAgentRequest(request: EditorAgentRequest) => void | Promise<void>把类型化编辑请求发送给宿主 AI 流程。
    getSelectionMenuItemsGetDocumentSelectionMenuItems内置菜单完全替换选中文本后的右键菜单。
    theme'light' | 'dark' | 'system''system'配色模式。

    内容结构

    字段类型说明
    type'document'内容类型标识。
    htmlstring与结构化模型一起保存的兼容表示。
    modelWorkDocumentModel带版本的 TipTap 文档树,也是精确编辑源。
    pageSize'a4' | 'letter'默认纸张;分节可以覆盖。
    pageColorstringDOCX 与 PDF 导出保留的页面颜色。
    orientation, margins, columns文档布局字段分节覆盖前的默认布局。
    pageChromeWorkDocumentPageChrome首页、奇数页、偶数页的页眉、页脚和页码。
    trackChangesboolean是否记录修订。
    commentsWorkDocumentComment[]批注、回复与解决状态。
    bibliographyWorkDocumentBibliography引用样式与文献记录。

    内置导航

    “视图”选项卡会在宽屏打开固定的标题导航,在窄屏打开可管理焦点的抽屉。 导航搜索同时覆盖标题与正文,按当前章节组织结果,高亮所有命中项,并把编辑器选区 移动到目标位置,但不会增加撤销记录。窄屏选择结果后,抽屉先关闭,再把焦点和精确 文本范围还给正文。

    引用与题注

    “引用”选项卡可以插入题注、交叉引用、脚注、尾注、页码字段、日期与文献引用。 删除或移动题注会在同一事务中更新相关交叉引用:有效目标会重新编号,目标缺失时显示 Missing reference,而不是继续显示过期编号。一次撤销会同时恢复题注与引用字段。

    自定义选区菜单

    菜单工厂会收到不可变的选区快照,其中包含精确文本、结构化片段、前后文、全文纯文本、 同步 HTML 与当前受控内容,同时提供能检测冲突的编辑命令。

    import type {
      DocumentContent,
      GetDocumentSelectionMenuItems,
    } from '@a3s-lab/office/core';
    import { DocumentEditor } from '@a3s-lab/office/react';
    
    const getSelectionMenuItems: GetDocumentSelectionMenuItems = (snapshot) => [
      {
        id: 'rewrite',
        label: '润色',
        onSelect: async (context) => {
          const replacement = await rewriteWithModel({
            selection: snapshot.selection.text,
            before: snapshot.selection.beforeText,
            after: snapshot.selection.afterText,
            document: snapshot.document.text,
          });
          context.commands.replaceText(replacement);
        },
      },
    ];
    
    export function Editor(props: {
      content: DocumentContent;
      onChange: (content: DocumentContent) => void;
    }) {
      return (
        <DocumentEditor
          {...props}
          getSelectionMenuItems={getSelectionMenuItems}
        />
      );
    }

    异步操作需要返回 Promise。编辑器会在无关事务发生后重新映射原选区;如果选中的文本 本身已经变化,后续 replaceText 会返回 stale-selection,不会改错内容。

    “询问 AI”这类开放操作,应先在宿主界面收集用户问题,再发出请求。Playground 的实现 会打开独立问题输入框;提交后仍可查看所附上下文,但不会用整篇上下文占满助手消息流。

    Extension

    extensions 接收 TipTap Extension。数组引用应保持稳定,每个 Extension 必须使用 唯一名称。如果自定义 Node 或 Mark 需要经过 DOCX 导入导出后仍然存在,还要提供相应 文件语义。详见扩展机制