mce
    Preparing search index...

    Interface Editor

    interface Editor {
        aabbToDrawboardAabb: (aabb: Aabb2D) => Aabb2D;
        activateTool: (tool: string | undefined) => void;
        activeStrategy: ActiveStrategy;
        activeTool: Ref<Tool>;
        addElement: (element: Element, options?: AddElementOptions) => Element2D;
        addElements: (
            element: Element<Meta>[],
            options?: AddElementOptions,
        ) => Element2D[];
        animationPresets: Ref<AnimationPreset[]>;
        applyResizeOverride: (
            element: Element2D,
            context: ResizeOverrideContext,
        ) => boolean;
        assets: Assets;
        camera: Ref<Camera2D>;
        canLoad: (source: any) => Promise<boolean>;
        canRedo: Ref<boolean>;
        canUndo: Ref<boolean>;
        captureElementScreenshot: (
            element: Element<Meta> | Element2D,
        ) => Promise<HTMLCanvasElement>;
        captureFrameScreenshot: (index: number) => void;
        clearDoc: () => void;
        commands: Reactive<Map<string, Command>>;
        contextMenu: ComputedRef<MenuItem[]>;
        copiedData: Ref<any>;
        currentTime: WritableComputedRef<number>;
        docLoading: Ref<boolean>;
        doubleclickStrategy: DoubleclickStrategy;
        drawboardAabb: Ref<Aabb2D>;
        drawboardContextMenuPointer: Ref<Vector2 | undefined>;
        drawboardDom: Ref<HTMLElement | undefined>;
        drawboardEffect: Ref<DrawboardEffect>;
        drawboardPointer: Ref<Vector2 | undefined>;
        drawboardToGlobal: (
            point: { x: number; y: number },
        ) => { x: number; y: number };
        editingStates: Set<string>;
        elementSelection: Ref<Element2D[]>;
        endTime: WritableComputedRef<number>;
        enterHandlers: EnterHandler[];
        exec: <K extends keyof Commands>(
            command: K,
            ...args: Parameters<Commands[K]>,
        ) => ReturnType<Commands[K]>;
        export: <K extends keyof Exporters>(
            name: K,
            options?: ExportOptions,
        ) => Exporters[K];
        exportConfig: () => Blob;
        exporters: Reactive<Map<string, Exporter>>;
        exporting: Ref<boolean>;
        exportProgress: Ref<number>;
        findFrame: (target: "next" | "previous") => Element2D | undefined;
        findSibling: (target: "next" | "previous") => Node | undefined;
        fonts: Fonts;
        fps: Ref<number>;
        frames: ComputedRef<Element2D[]>;
        frameThumbs: Ref<FrameThumb[]>;
        getAabb: (
            node: Node | Node[] | undefined,
            inTarget?: "parent" | "drawboard" | "frame",
        ) => Aabb2D;
        getAncestorFrame: (node?: Node, isTop?: boolean) => Element2D | undefined;
        getAnimationPreset: (id: string) => AnimationPreset | undefined;
        getConfig: (path: string, defaultValue?: any) => any;
        getConfigRef: <T = any>(path: string) => WritableComputedRef<T>;
        getDoc: () => JsonData;
        getGlobalPointer: () => Vector2Like;
        getImagePipeline: (name: string) => ImagePipeline | undefined;
        getKbd: (command: string) => string;
        getNodeById: (id: string) => Node | undefined;
        getObb: (
            node: Node | Node[] | undefined,
            inTarget?: "parent" | "drawboard" | "frame",
        ) => Obb2D;
        getTimeRange: (
            node?: Node | Node[],
        ) => { endTime: number; startTime: number };
        globalToDrawboard: (
            point: { x: number; y: number },
        ) => { x: number; y: number };
        hasTextSelectionRange: Ref<boolean>;
        hotkeys: Reactive<Map<string, Hotkey>>;
        hotkeysData: WritableComputedRef<HotkeyData[]>;
        hoverElement: Ref<Element2D | undefined>;
        hoverStrategy: HoverStrategy;
        http: Http;
        icons: Ref<Record<string, string>>;
        imagePipelines: Ref<ImagePipeline[]>;
        importConfig: () => Promise<Config | undefined>;
        inEditorIs: (node: Node, inEditorIs?: EditorNodeType) => boolean;
        interactionsRev: Ref<number>;
        isContentEditing: () => boolean;
        isElement: (value: any) => value is Element2D;
        isFrameNode: (node: Node, isTop?: boolean) => boolean;
        isLock: (node: Node) => boolean;
        isNode: (value: any) => value is Node;
        isPointerInSelection: ComputedRef<boolean>;
        isRootNode: (node: Node) => boolean;
        isTextAllSelected: Ref<boolean>;
        isUndoRedoing: Ref<boolean>;
        isVisible: (node: Node) => boolean;
        keyframeEditing: Ref<KeyframeEditing | null>;
        load: <T = NormalizedElement<Meta>>(source: any) => Promise<T[]>;
        loadDoc: (source: any) => Promise<Doc>;
        loaders: Reactive<Map<string, Loader>>;
        loadFont: (
            source: FontSource,
            options?: FontLoadOptions,
        ) => Promise<FontLoadedResult>;
        loopMode: Ref<LoopMode>;
        mainMenu: ComputedRef<MenuItem[]>;
        mode: Ref<Mode>;
        modes: Ref<string[]>;
        msPerPx: Ref<number>;
        newDoc: () => void;
        nodeIndexMap: Map<string, number>;
        nodes: Ref<Node[]>;
        obbToDrawboardObb: (aabb: Obb2D) => Obb2D;
        obbToFit: (element: Element2D) => void;
        openDoc: () => Promise<void>;
        openFileDialog: (options?: { multiple?: boolean }) => Promise<File[]>;
        panels: PanelsApi;
        parseAnchor: (anchor: Anchor, isRtl?: boolean) => ParsedAnchor;
        paused: Ref<boolean>;
        playbackRate: Ref<number>;
        previewMode: Ref<boolean>;
        readonly: Ref<boolean>;
        recomputeTimelineEndTime: () => Promise<void>;
        redo: () => void;
        registerAnimationPreset: (preset: AnimationPreset) => void;
        registerCommand: (value: Command | Command[]) => void;
        registerConfig: <T>(
            path: string,
            declaration?: ConfigDeclaration<T>,
        ) => WritableComputedRef<T>;
        registerEditingState: (state: string) => void;
        registerEnterHandler: (fn: EnterHandler) => void;
        registerExporter: (value: Exporter | Exporter[]) => void;
        registerHotkey: (value: Hotkey | Hotkey[]) => void;
        registerIcon: (name: string, path: string) => void;
        registerImagePipeline: (pipeline: ImagePipeline) => void;
        registerLoader: (value: Loader | Loader[]) => void;
        registerMessages: (
            messages: Partial<Record<string, LocaleMessages>>,
        ) => void;
        registerMode: (mode: string) => void;
        registerResizeOverride: (fn: ResizeOverride) => void;
        registerSelectionRedirect: (fn: SelectionRedirect) => void;
        registerSnapper: (key: string, snapper: Snapper) => void;
        registerStatusbarItem: (component: Component) => void;
        registerTool: (tool: Tool | Tool[]) => void;
        registerToolbeltItem: (item: ToolbeltItem) => void;
        registerToolbeltShapeItem: (key: string) => void;
        renderEngine: Ref<Engine>;
        renderFrames: (options: RenderFramesOptions) => Promise<void>;
        resizeElement: (
            element: Element2D,
            newWidth: number,
            newHeight: number,
            options?: ResizeElementOptions,
        ) => void;
        resizeOverrides: ResizeOverride[];
        resizeStrategy?: ResizeStrategy;
        resolveImagePipelines: (
            steps: ImagePipeline[],
            image: PipelineImage,
        ) => Promise<PipelineImage>;
        resolveSelectionRedirect: (
            node: Element2D | undefined,
        ) => Element2D | undefined;
        root: Ref<Doc>;
        rootAabb: ComputedRef<Aabb2D>;
        runExclusiveRender: <T>(fn: () => T | Promise<T>) => Promise<T>;
        save: (reason?: SaveReason) => void;
        saveAsConfig: (filename?: string) => void;
        screenCenter: ComputedRef<{ x: number; y: number }>;
        screenCenterOffset: ComputedRef<Required<ScreenPadding>>;
        screenControlsOffset: ComputedRef<Required<ScreenPadding>>;
        scrollDriven: Ref<boolean>;
        selection: Ref<Node[]>;
        selectionAabb: ComputedRef<Aabb2D>;
        selectionAabbInDrawboard: ComputedRef<Aabb2D>;
        selectionMarquee: Ref<Aabb2D>;
        selectionObb: ComputedRef<Obb2D>;
        selectionObbInDrawboard: ComputedRef<Aabb2D>;
        selectionRedirects: SelectionRedirect[];
        setConfig: (path: string, value: any) => void;
        setCursor: (mode: string | undefined) => void;
        setDefaultFont: (
            source: FontSource,
            options?: FontLoadOptions,
        ) => Promise<void>;
        setDoc: (doc: DocumentSource) => Doc;
        setLock: (node: Node, lock: boolean) => void;
        setUploader: (uploader: Upload) => void;
        setVisible: (node: Node, visible: boolean) => void;
        snap: (
            box: { height: number; left: number; top: number; width: number },
        ) => void;
        snappers: Reactive<Map<string, Snapper>>;
        snapResize: (
            box: { height: number; left: number; top: number; width: number },
            dir: string,
        ) => void;
        snapshot: () => void;
        startTime: WritableComputedRef<number>;
        state: Ref<State>;
        statusbarItems: Ref<Component[]>;
        t: Translation;
        textSelection: Ref<IndexCharacter[] | undefined>;
        timeline: Ref<Timeline>;
        to: <K extends keyof Exporters>(
            name: K,
            options?: ExportOptions,
        ) => Exporters[K];
        toolbeltItems: Ref<ToolbeltItem[]>;
        toolbeltShapeItems: Ref<string[]>;
        tools: Reactive<Map<string, Tool>>;
        undo: () => void;
        unregisterCommand: (command: string) => void;
        unregisterExporter: (name: string) => void;
        unregisterHotkey: (command: string) => void;
        unregisterLoader: (name: string) => void;
        unregisterSnapper: (key: string) => void;
        unregisterTool: (tool: string) => void;
        upload: Upload;
        viewportAabb: ComputedRef<Aabb2D>;
        waitUntilFontLoad: () => Promise<void>;
    }
    Index

    Properties

    aabbToDrawboardAabb activateTool activeStrategy activeTool addElement addElements animationPresets applyResizeOverride assets camera canLoad canRedo canUndo captureElementScreenshot captureFrameScreenshot clearDoc commands contextMenu copiedData currentTime docLoading doubleclickStrategy drawboardAabb drawboardContextMenuPointer drawboardDom drawboardEffect drawboardPointer drawboardToGlobal editingStates elementSelection endTime enterHandlers exec export exportConfig exporters exporting exportProgress findFrame findSibling fonts fps frames frameThumbs getAabb getAncestorFrame getAnimationPreset getConfig getConfigRef getDoc getGlobalPointer getImagePipeline getKbd getNodeById getObb getTimeRange globalToDrawboard hasTextSelectionRange hotkeys hotkeysData hoverElement hoverStrategy http icons imagePipelines importConfig inEditorIs interactionsRev isContentEditing isElement isFrameNode isLock isNode isPointerInSelection isRootNode isTextAllSelected isUndoRedoing isVisible keyframeEditing load loadDoc loaders loadFont loopMode mainMenu mode modes msPerPx newDoc nodeIndexMap nodes obbToDrawboardObb obbToFit openDoc openFileDialog panels parseAnchor paused playbackRate previewMode readonly recomputeTimelineEndTime redo registerAnimationPreset registerCommand registerConfig registerEditingState registerEnterHandler registerExporter registerHotkey registerIcon registerImagePipeline registerLoader registerMessages registerMode registerResizeOverride registerSelectionRedirect registerSnapper registerStatusbarItem registerTool registerToolbeltItem registerToolbeltShapeItem renderEngine renderFrames resizeElement resizeOverrides resizeStrategy? resolveImagePipelines resolveSelectionRedirect root rootAabb runExclusiveRender save saveAsConfig screenCenter screenCenterOffset screenControlsOffset scrollDriven selection selectionAabb selectionAabbInDrawboard selectionMarquee selectionObb selectionObbInDrawboard selectionRedirects setConfig setCursor setDefaultFont setDoc setLock setUploader setVisible snap snappers snapResize snapshot startTime state statusbarItems t textSelection timeline to toolbeltItems toolbeltShapeItems tools undo unregisterCommand unregisterExporter unregisterHotkey unregisterLoader unregisterSnapper unregisterTool upload viewportAabb waitUntilFontLoad

    Properties

    aabbToDrawboardAabb: (aabb: Aabb2D) => Aabb2D
    activateTool: (tool: string | undefined) => void
    activeStrategy: ActiveStrategy
    activeTool: Ref<Tool>
    addElement: (element: Element, options?: AddElementOptions) => Element2D
    addElements: (
        element: Element<Meta>[],
        options?: AddElementOptions,
    ) => Element2D[]
    animationPresets: Ref<AnimationPreset[]>

    插件注册的动画预设(进入 / 退出 / 强调)。核心不内置任何预设—— Timeline / Trackhead 的「添加动画」菜单据此生成,为空时不显示添加入口。 注册同 id 则覆盖。预设的显示名走 i18n(t(preset.id)),由注册方提供文案。

    applyResizeOverride: (
        element: Element2D,
        context: ResizeOverrideContext,
    ) => boolean

    应用覆盖;返回 true 表示某插件已处理缩放。

    assets: Assets
    camera: Ref<Camera2D>
    canLoad: (source: any) => Promise<boolean>
    canRedo: Ref<boolean>
    canUndo: Ref<boolean>
    captureElementScreenshot: (
        element: Element<Meta> | Element2D,
    ) => Promise<HTMLCanvasElement>
    captureFrameScreenshot: (index: number) => void
    clearDoc: () => void
    commands: Reactive<Map<string, Command>>
    contextMenu: ComputedRef<MenuItem[]>
    copiedData: Ref<any>
    currentTime: WritableComputedRef<number>
    docLoading: Ref<boolean>
    doubleclickStrategy: DoubleclickStrategy
    drawboardAabb: Ref<Aabb2D>
    drawboardContextMenuPointer: Ref<Vector2 | undefined>
    drawboardDom: Ref<HTMLElement | undefined>
    drawboardEffect: Ref<DrawboardEffect>
    drawboardPointer: Ref<Vector2 | undefined>
    drawboardToGlobal: (point: { x: number; y: number }) => { x: number; y: number }
    editingStates: Set<string>

    内容编辑态集合:处于这些 state 时隐藏选择框 / 浮动条、抑制快捷键。 默认空;由插件注册自己的编辑态(如 table 注册 'tableEditing')。 注意:核心的 'typing' 不在此集合,仍按原有逻辑各处单独处理。

    elementSelection: Ref<Element2D[]>
    endTime: WritableComputedRef<number>
    enterHandlers: EnterHandler[]

    进入编辑处理链。

    exec: <K extends keyof Commands>(
        command: K,
        ...args: Parameters<Commands[K]>,
    ) => ReturnType<Commands[K]>
    export: <K extends keyof Exporters>(
        name: K,
        options?: ExportOptions,
    ) => Exporters[K]
    exportConfig: () => Blob
    exporters: Reactive<Map<string, Exporter>>
    exporting: Ref<boolean>
    exportProgress: Ref<number>
    findFrame: (target: "next" | "previous") => Element2D | undefined
    findSibling: (target: "next" | "previous") => Node | undefined
    fonts: Fonts
    fps: Ref<number>
    frames: ComputedRef<Element2D[]>
    frameThumbs: Ref<FrameThumb[]>
    getAabb: (
        node: Node | Node[] | undefined,
        inTarget?: "parent" | "drawboard" | "frame",
    ) => Aabb2D
    getAncestorFrame: (node?: Node, isTop?: boolean) => Element2D | undefined
    getAnimationPreset: (id: string) => AnimationPreset | undefined
    getConfig: (path: string, defaultValue?: any) => any
    getConfigRef: <T = any>(path: string) => WritableComputedRef<T>
    getDoc: () => JsonData
    getGlobalPointer: () => Vector2Like
    getImagePipeline: (name: string) => ImagePipeline | undefined
    getKbd: (command: string) => string
    getNodeById: (id: string) => Node | undefined

    按 id 取节点:走 SceneTree 的 nodeMap(随 nodeEnter/nodeExit 增量维护),O(1) 且始终最新。

    getObb: (
        node: Node | Node[] | undefined,
        inTarget?: "parent" | "drawboard" | "frame",
    ) => Obb2D
    getTimeRange: (node?: Node | Node[]) => { endTime: number; startTime: number }
    globalToDrawboard: (point: { x: number; y: number }) => { x: number; y: number }
    hasTextSelectionRange: Ref<boolean>
    hotkeys: Reactive<Map<string, Hotkey>>
    hotkeysData: WritableComputedRef<HotkeyData[]>
    hoverElement: Ref<Element2D | undefined>
    hoverStrategy: HoverStrategy
    http: Http
    icons: Ref<Record<string, string>>

    插件注册的图标:alias 名(不含 $)→ SVG path。会在 EditorLayout 创建图标集时 合并进 IconsSymbol 的 aliases,从而让 $<name> 可解析。供 @mce/table、@mce/chart 等把自己的图标随插件携带,核心图标集不再硬编码它们。

    imagePipelines: Ref<ImagePipeline[]>

    插件 / 宿主注册的图片处理管线(image → image,如描边/调色/抠图)。 数据只记录管线名与参数(ImageFill.imagePipelines),处理函数为运行时黑盒。 注册同 name 则覆盖。渲染端经引擎解析器烘焙;导出端把同款解析器注入各底层导出库自行烘焙。

    importConfig: () => Promise<Config | undefined>
    inEditorIs: (node: Node, inEditorIs?: EditorNodeType) => boolean
    interactionsRev: Ref<number>

    交互数据变更计数(meta 写入非响应式,用它驱动 UI 刷新)。

    isContentEditing: () => boolean

    当前是否处于某个已注册的内容编辑态。

    isElement: (value: any) => value is Element2D
    isFrameNode: (node: Node, isTop?: boolean) => boolean
    isLock: (node: Node) => boolean
    isNode: (value: any) => value is Node
    isPointerInSelection: ComputedRef<boolean>
    isRootNode: (node: Node) => boolean
    isTextAllSelected: Ref<boolean>
    isUndoRedoing: Ref<boolean>

    撤回 / 重做进行中(同步触发底层回退、本 tick 内为 true)。供需要区分「用户操作」与「历史回退」来源的逻辑使用。

    isVisible: (node: Node) => boolean
    keyframeEditing: Ref<KeyframeEditing | null>
    load: <T = NormalizedElement<Meta>>(source: any) => Promise<T[]>
    loadDoc: (source: any) => Promise<Doc>
    loaders: Reactive<Map<string, Loader>>
    loadFont: (
        source: FontSource,
        options?: FontLoadOptions,
    ) => Promise<FontLoadedResult>
    loopMode: Ref<LoopMode>
    mainMenu: ComputedRef<MenuItem[]>
    mode: Ref<Mode>
    modes: Ref<string[]>

    插件注册的编辑模式(除核心 'canvas' 外,如 @mce/workflow 的 'workflow')。 菜单的模式切换项据此生成;模式 UI 由插件以 overlay 组件按 mode 自行条件渲染。

    msPerPx: Ref<number>
    newDoc: () => void
    nodeIndexMap: Map<string, number>
    nodes: Ref<Node[]>
    obbToDrawboardObb: (aabb: Obb2D) => Obb2D
    obbToFit: (element: Element2D) => void
    openDoc: () => Promise<void>
    openFileDialog: (options?: { multiple?: boolean }) => Promise<File[]>
    panels: PanelsApi

    面板运行时状态的单一数据源(float 与 dock 共用)。

    parseAnchor: (anchor: Anchor, isRtl?: boolean) => ParsedAnchor
    paused: Ref<boolean>
    playbackRate: Ref<number>

    播放倍速,1 为正常速度。

    previewMode: Ref<boolean>

    预览(可交互)模式:开启后点击元素触发其交互,编辑操作被禁用。

    readonly: Ref<boolean>

    前端只读模式:禁用一切编辑(选择拖动 / 变换 / 工具 / 双击编辑 / 变更类快捷键),仅保留浏览 / 平移 / 缩放。

    recomputeTimelineEndTime: () => Promise<void>
    redo: () => void
    registerAnimationPreset: (preset: AnimationPreset) => void
    registerCommand: (value: Command | Command[]) => void
    registerConfig: <T>(
        path: string,
        declaration?: ConfigDeclaration<T>,
    ) => WritableComputedRef<T>
    registerEditingState: (state: string) => void
    registerEnterHandler: (fn: EnterHandler) => void
    registerExporter: (value: Exporter | Exporter[]) => void
    registerHotkey: (value: Hotkey | Hotkey[]) => void
    registerIcon: (name: string, path: string) => void
    registerImagePipeline: (pipeline: ImagePipeline) => void
    registerLoader: (value: Loader | Loader[]) => void
    registerMessages: (messages: Partial<Record<string, LocaleMessages>>) => void

    插件追加自己的 i18n 文案,按 locale(如 en / zhHans)合并,避免全部聚合到核心 locale。

    registerMode: (mode: string) => void
    registerResizeOverride: (fn: ResizeOverride) => void
    registerSelectionRedirect: (fn: SelectionRedirect) => void
    registerSnapper: (key: string, snapper: Snapper) => void
    registerStatusbarItem: (component: Component) => void
    registerTool: (tool: Tool | Tool[]) => void
    registerToolbeltItem: (item: ToolbeltItem) => void
    registerToolbeltShapeItem: (key: string) => void
    renderEngine: Ref<Engine>
    renderFrames: (options: RenderFramesOptions) => Promise<void>

    按 step 逐帧渲染时间轴并回调像素,供 gif/mp4 等视频导出复用。

    resizeElement: (
        element: Element2D,
        newWidth: number,
        newHeight: number,
        options?: ResizeElementOptions,
    ) => void
    resizeOverrides: ResizeOverride[]

    缩放行为覆盖链。

    resizeStrategy?: ResizeStrategy
    resolveImagePipelines: (
        steps: ImagePipeline[],
        image: PipelineImage,
    ) => Promise<PipelineImage>

    把一串管线步骤依次作用到图片像素上(引擎解析器与导出物化共用)。

    resolveSelectionRedirect: (node: Element2D | undefined) => Element2D | undefined

    依次应用所有重定向,得到最终应被选中的节点。

    root: Ref<Doc>
    rootAabb: ComputedRef<Aabb2D>
    runExclusiveRender: <T>(fn: () => T | Promise<T>) => Promise<T>
    save: (reason?: SaveReason) => void

    请求保存:仅对外抛出 'save' 事件,实际持久化由外部消费者处理

    saveAsConfig: (filename?: string) => void
    screenCenter: ComputedRef<{ x: number; y: number }>
    screenCenterOffset: ComputedRef<Required<ScreenPadding>>
    screenControlsOffset: ComputedRef<Required<ScreenPadding>>
    scrollDriven: Ref<boolean>

    滚动驱动:预览态下用滚轮进度驱动时间轴播放头(scrollytelling)。

    selection: Ref<Node[]>
    selectionAabb: ComputedRef<Aabb2D>
    selectionAabbInDrawboard: ComputedRef<Aabb2D>
    selectionMarquee: Ref<Aabb2D>
    selectionObb: ComputedRef<Obb2D>
    selectionObbInDrawboard: ComputedRef<Aabb2D>
    selectionRedirects: SelectionRedirect[]

    选择重定向链。

    setConfig: (path: string, value: any) => void
    setCursor: (mode: string | undefined) => void
    setDefaultFont: (source: FontSource, options?: FontLoadOptions) => Promise<void>
    setDoc: (doc: DocumentSource) => Doc
    setLock: (node: Node, lock: boolean) => void
    setUploader: (uploader: Upload) => void

    运行时设置/替换上传实现(返回上传后的可访问 URL)。

    setVisible: (node: Node, visible: boolean) => void
    snap: (
        box: { height: number; left: number; top: number; width: number },
    ) => void
    snappers: Reactive<Map<string, Snapper>>
    snapResize: (
        box: { height: number; left: number; top: number; width: number },
        dir: string,
    ) => void

    缩放吸附:按被拖动的边(dir 含 t/l/r/b)将该边对齐到最近的吸附线,调整对应宽高。

    snapshot: () => void
    startTime: WritableComputedRef<number>
    state: Ref<State>
    statusbarItems: Ref<Component[]>

    插件向状态栏右侧追加的组件(如 @mce/collaboration 的连接状态 / 在场头像)。 Statusbar 据此渲染,核心状态栏不再直接 import 插件组件。

    textSelection: Ref<IndexCharacter[] | undefined>
    timeline: Ref<Timeline>
    to: <K extends keyof Exporters>(
        name: K,
        options?: ExportOptions,
    ) => Exporters[K]
    toolbeltItems: Ref<ToolbeltItem[]>

    插件向工具腰带追加的一级按钮(如 @mce/comments 的评论工具)。 Toolbelt 据此渲染,核心不再硬编码插件工具。

    toolbeltShapeItems: Ref<string[]>

    插件向工具栏「形状」下拉追加的工具 key(如 @mce/table 的 'table'、@mce/chart 的图表)。 key 同时是工具名(activateTool(key))与图标 / 文案 key。

    tools: Reactive<Map<string, Tool>>
    undo: () => void
    unregisterCommand: (command: string) => void
    unregisterExporter: (name: string) => void
    unregisterHotkey: (command: string) => void
    unregisterLoader: (name: string) => void
    unregisterSnapper: (key: string) => void
    unregisterTool: (tool: string) => void
    upload: Upload
    viewportAabb: ComputedRef<Aabb2D>
    waitUntilFontLoad: () => Promise<void>