流程图

流程图用于表示步骤、状态或实体及其关系,例如业务流程、时序交互或思维导图。您以文本编写源内容,再由扩展绘制。
新标签页

flowDiagram 节点以以下三种格式之一存储流程图的源文本:

  • Mermaid 文本,用于流程图、序列图、甘特图、思维导图及其他 Mermaid 类型。
  • draw.io XML,用于在 draw.io 编辑器中绘制的流程图。
  • BPMN XML,用于 BPMN 业务流程模型。

快速入门

安装扩展包和 mermaid.js(用于绘制 Mermaid 流程图的库)。示例还使用 @tiptap/core 和 @tiptap/starter-kit;若项目尚未安装它们,也请一并安装:

npm install @tiptap-pro/extension-diagrams mermaid

然后注册 Mermaid 渲染器并插入第一个流程图:

import { Editor } from '@tiptap/core'
import StarterKit from '@tiptap/starter-kit'
import { Diagrams, chartStyleRules, flowDiagramStyleRules } from '@tiptap-pro/extension-diagrams'
import { mermaidDiagramRenderer } from '@tiptap-pro/extension-diagrams/mermaid'
import rendererUrl from '@tiptap-pro/extension-diagrams/mermaid-renderer?url&no-inline'
import mermaidUrl from 'mermaid/dist/mermaid.min.js?url'

const style = document.createElement('style')
style.textContent = chartStyleRules() + flowDiagramStyleRules()
document.head.append(style)

const editor = new Editor({
  element: document.querySelector('#editor'),
  extensions: [
    StarterKit,
    Diagrams.configure({
      diagramRenderers: [mermaidDiagramRenderer({ mermaidUrl, rendererUrl })],
    }),
  ],
})

editor.commands.insertFlowDiagram({
  source: 'flowchart LR\n  A[Order] --> B{Paid?}\n  B -->|yes| C[Ship]',
  title: 'How an order moves',
})

流程图渲染器使用绘图库绘制流程图。您可以通过 diagramRenderers 选项传入渲染器。渲染器页面介绍了 Mermaid、Pele、draw.io 和 BPMN。Mermaid页面说明了 mermaidUrl、rendererUrl 和 ?url 导入。

流程图相关页面

页面涵盖
格式Mermaid、draw.io、BPMN 和您自己的格式
在流程图中编辑双击文本进行编辑,或移动流程图中的形状
从表格生成流程图每行对应一个步骤的流程图
渲染器Mermaid、Pele、draw.io 和 BPMN,以及各自支持绘制的内容

Mermaid 流程图类型

Mermaid 源码的第一行指定流程图类型,例如 flowchart 或 sequenceDiagram。Mermaid 流程图支持 Mermaid 11.17 中除图表类型之外的所有类型。MERMAID_DIAGRAM_KINDS 列出这些类型,mermaidDiagramKind(source) 返回源码类型。

种类第一行
flowchartflowchart、graph
sequencesequenceDiagram
statestateDiagram-v2、stateDiagram
classclassDiagram、classDiagram-v2
ererDiagram
journeyjourney
ganttgantt
mindmapmindmap
timelinetimeline
quadrantquadrantChart
gitgitGraph
kanbankanban
architecturearchitecture-beta、architecture
blockblock-beta、block
c4C4Context、C4Container、C4Component、C4Dynamic、C4Deployment
requirementrequirementDiagram、requirement
packetpacket-beta、packet
vennvenn-beta
ishikawaishikawa-beta、ishikawa
treeViewtreeView-beta
wardleywardley-beta
cynefincynefin-beta
swimlaneswimlane-beta
railroadrailroad-beta、railroad-ebnf-beta、railroad-abnf-beta、railroad-peg-beta
eventModelingeventmodeling

mermaid.js 和 Pele 两种 Mermaid 渲染器都支持此列表中的类型。对于没有已注册渲染器支持的类型,请参阅哪个渲染器绘制流程图。在流程图中编辑列出了可以直接编辑文本的类型。

图表或流程图

Mermaid 的 pie、xychart、sankey、radar 和 treemap 类型会转换为 chart 节点,并保留可编辑数据,参见 importMermaidChart。Mermaid 流程图类型列表中的其他类型都会转换为流程图。insertFlowDiagram 和 updateFlowDiagram 不接受图表源码。

流程图的存储方式

属性内容
format'mermaid'、'drawio'、'bpmn' 或已注册渲染器绘制的其他格式 ID
sourceMermaid 文本(最多 50,000 个字符)或 XML
title显示在流程图下方的标题,或 null
descriptionAlt 文本和可访问说明,或 null
view'diagram' 显示绘制结果,'code' 显示源文本
options源之外的设置,如下表所示。其他内容保持原样
键入 options内容
size流程图的大小,参见 setDiagramSize
link流程图所跟随的表格
positions移动形状的偏移量,请参阅移动形状

文档不会存储绘制后的流程图、它在屏幕上的尺寸或加载状态。

源是数据

源绝不会在应用的网页中作为代码运行。编写图表时,扩展会删除 %%{init: …}%% 指令和 frontmatter 块,因此文档无法更改 Mermaid 的运行方式。前面的 title 将成为图表的标题,除非您给出标题。颜色来自页面的 CSS,而不是源代码。

在 HTML 和纯文本中

在 HTML 中,流程图使用 <figure data-type="flow-diagram">。源文本保存在 <pre><code class="language-mermaid"> 中,标题保存在 <figcaption> 中。draw.io 和 BPMN 流程图分别使用 language-drawio 和 language-bpmn。

未启用扩展的 HTML 或 Markdown 导出会将源文本保留为代码块。将这些 HTML 粘贴到启用了扩展的编辑器中,即可还原流程图。

在纯文本中,Mermaid 流程图以 [diagram: title] 开头,后接源文本。其他格式的流程图则只包含 [diagram: title] 或 [diagram],不带标题时省略 : title。

更改流程图

您可以使用 命令:

editor.commands.updateFlowDiagram({ source: 'sequenceDiagram\n  A->>B: Hello' })
editor.commands.setFlowDiagramView({ view: 'code' })

您自己的表单可以在有人键入时对每个输入调用 updateFlowDiagram。每次调用都是一个撤消步骤。

每次更改后都会重新绘制流程图。新绘制完成后,旧图形会被移除。Mermaid 源码存在语法错误时会显示错误状态和消息,直到源码修复。

编辑流程图或源码

每个流程图都有自己的视图。要一次切换所有流程图(例如 Mermaid 演示),请将 setFlowDiagramView 加入命令链:

const chain = editor.chain()
for (const { pos } of editor.storage.diagrams.listDiagrams()) {
  chain.setFlowDiagramView({ pos, view: 'code' })
}
chain.run()

列出、缩放和导出流程图

列出流程图

editor.storage.diagrams.listDiagrams() 返回每个流程图的信息:

字段内容
pos其位置
属性其属性
kindMermaid 流程图类型;若源文本为空、不是可绘制类型或格式为 XML,则为 null
drawable是否有已注册的渲染器可以绘制该格式的源文本

缩放和最大化

setZoom、getZoom、setMaximized 和 getMaximized 使用流程图在文档中的位置进行操作。参见尺寸与视图。

导出

export({ pos })、exportAll() 和 exportDocx() 都会导出流程图。在 Word 中,流程图会作为 PNG 图像插入。参见导出了解选项和返回值。

mermaid.js、draw.io 和 BPMN 流程图渲染器仅在浏览器中绘制。在服务器上,export 会抛出错误,而 exportDocx 会跳过这些流程图并附上注释。Pele 的 renderPeleDiagram 仍可在服务器上绘制 Mermaid 源码。

命令

insertFlowDiagram

在当前选区或 pos 处插入流程图,并选中新流程图;若 select 为 false,则保留原选区。

editor.commands.insertFlowDiagram({
  source: 'flowchart LR\n  order[Order placed] --> ship[Shipped]',
  title: 'Order flow',
})
选项类型描述
sourcestringMermaid 源码;或在 format: 'drawio' 时使用 draw.io XML,在 format: 'bpmn' 时使用 BPMN 2.0 XML。可以为空
formatstring'mermaid'(默认)、'drawio'、'bpmn' 或已注册渲染器支持的其他格式
titlestring | null流程图标题
descriptionstring | null替代文本和可访问说明
posnumber插入的位置。默认为选择
selectbooleanfalse 将选择保留在原来的位置。默认 true

所选内容中的空段落会被替换。粘贴流程图源码时也会调用此命令,参见粘贴。

当 Mermaid 源码表示 pie、xychart、sankey、radar 或 treemap 图表时,或类型不在 Mermaid 流程图类型列表中(例如 zenuml),或 draw.io/BPMN 源码不是有效 XML 时,返回 false。

updateFlowDiagram

更改所选流程图或 pos 处流程图的源码、格式、标题或说明。未提供的字段保持不变。

editor.commands.updateFlowDiagram({ title: 'Order flow, revised' })
选项类型说明
sourcestring新源码。若流程图原本跟随表格,更新后将不再跟随该表格
formatstring新格式。需要该格式的 source
titlestring | null新标题。 null 删除
descriptionstring | null新描述。 null 删除它
posnumber流程图的位置,默认使用所选流程图

新源码不是对应格式支持的类型,或更改 format 时未同时提供 source,则返回 false,且不做任何更改。

setFlowDiagramView

切换为显示绘制后的流程图或其源码。

editor.commands.setFlowDiagramView({ view: 'code' })
选项类型描述
view'diagram' | 'code''diagram' 显示流程图,'code' 显示源码
posnumber流程图的位置,默认使用所选流程图

视图存储在文档中,因此每个打开文档的人都会看到相同的视图。

convertCodeBlockToDiagram

将当前选区或 pos 处的代码块转换为 Mermaid 流程图,并选中新流程图。

if (editor.can().convertCodeBlockToDiagram()) editor.commands.convertCodeBlockToDiagram()
选项类型说明
posnumber代码块内的位置。默认选择

代码块中的 Mod-Enter 也会运行它,请参阅代码块中的 Mod-Enter。

代码块包含 Mermaid 图表源码,或包含其他类型的源码时,返回 false。