Skip to content

块图文档

🌐 Block Diagrams Documentation

块图简介

🌐 Introduction to Block Diagrams

定义与目的

🌐 Definition and Purpose

方块图是一种直观且高效的方式,用于以可视化形式表示复杂的系统、流程或架构。它们由方块和连接器组成,其中方块表示基本组件或功能,连接器展示这些组件之间的关系或流程。这种制图方法在工程、软件开发和流程管理等各个字段都非常重要。

🌐 Block diagrams are an intuitive and efficient way to represent complex systems, processes, or architectures visually. They are composed of blocks and connectors, where blocks represent the fundamental components or functions, and connectors show the relationship or flow between these components. This method of diagramming is essential in various fields such as engineering, software development, and process management.

方块图的主要目的是提供系统的高层视图,使人们能够轻松理解和分析,而无需深入了解每个组件的复杂细节。这使它们在简化复杂系统以及解释系统中各组件的整体结构和相互作用时特别有用。

🌐 The primary purpose of block diagrams is to provide a high-level view of a system, allowing for easy understanding and analysis without delving into the intricate details of each component. This makes them particularly useful for simplifying complex systems and for explaining the overall structure and interaction of components within a system.

很多人为了这个目的使用 Mermaid 流程图。其副作用是,自动布局有时会将形状移动到图表制作者不希望的位置。块图采用了不同的方法。在这个图中,我们让作者完全控制形状的位置。

🌐 Many people use mermaid flowcharts for this purpose. A side-effect of this is that the automatic layout sometimes move shapes to positions that the diagram maker does not want. Block diagrams use a different approach. In this diagram we give the author full control over where the shapes are positioned.

一般使用场景

🌐 General Use Cases

块图在各行各业和各个学科中都有广泛的应用。一些主要的使用场景包括:

🌐 Block diagrams have a wide range of applications across various industries and disciplines. Some of the key use cases include:

  • 软件架构:在软件开发中,方块图可以用来展示软件应用的架构。这包括显示不同模块或服务如何交互、数据流以及高层组件的交互情况。
  • 网络图:方框图非常适合表示 IT 和电信中的网络架构。它们可以展示不同网络设备和服务如何互相连接,包括路由、交换机、防火墙,以及数据在网络中的流动。
  • 流程图:在商业和制造业中,方块图可以用来创建流程图。这些流程图表示商业或制造过程的各个阶段,帮助可视化步骤顺序、决策点以及控制流程。
  • 电气系统:工程师使用方框图来表示电气系统和电路。它们可以展示电气系统的高级结构、不同电气组件之间的相互作用以及电流的流动。
  • 教育目的:方框图也广泛用于教育材料中,以简化的方式解释复杂的概念和系统。它们有助于分解和可视化科学理论、工程原理以及技术系统。

这些例子展示了方块图在提供清晰简明的复杂系统表示方面的多功能性。它们的简洁性和清晰性使其成为各个字段的专业人士有效交流复杂理念的宝贵工具。

🌐 These examples demonstrate the versatility of block diagrams in providing clear and concise representations of complex systems. Their simplicity and clarity make them a valuable tool for professionals across various fields to communicate complex ideas effectively.

在接下来的部分中,我们将深入探讨如何使用 Mermaid 创建和操作流程图,涵盖从基本语法到高级配置和样式的所有内容。

🌐 In the following sections, we will delve into the specifics of creating and manipulating block diagrams using Mermaid, covering everything from basic syntax to advanced configurations and styling.

使用 Mermaid 创建流程图既简单又易于上手。本节介绍开始构建简单图表所需的基本语法和结构。理解这些基础概念是高效使用 Mermaid 进行更复杂图表绘制的关键。

🌐 Creating block diagrams with Mermaid is straightforward and accessible. This section introduces the basic syntax and structure needed to start building simple diagrams. Understanding these foundational concepts is key to efficiently utilizing Mermaid for more complex diagramming tasks.

简单方块图

🌐 Simple Block Diagrams

基本结构

🌐 Basic Structure

从本质上讲,块图由表示不同实体或组件的方块组成。在 Mermaid 中,这些方块可以通过简单的文本标签轻松创建。最基本的块图形式可以是一系列没有任何连接线的方块。

🌐 At its core, a block diagram consists of blocks representing different entities or components. In Mermaid, these blocks are easily created using simple text labels. The most basic form of a block diagram can be a series of blocks without any connectors.

示例 - 简单方块图: 要创建一个包含三个标记为 'a'、'b' 和 'c' 的方框的简单方块图,语法如下:

这个例子将产生一排水平的三个区块。每个区块都会自动间隔并对齐,以达到最佳可读性。

🌐 This example will produce a horizontal sequence of three blocks. Each block is automatically spaced and aligned for optimal readability.

定义要使用的列数

🌐 Defining the number of columns to use

列使用

🌐 Column Usage

虽然简单的方块图是线性且直接的,但更复杂的系统可能需要一个结构化的布局。Mermaid 允许将方块组织成多列,从而便于创建更复杂和更详细的图表。

🌐 While simple block diagrams are linear and straightforward, more complex systems may require a structured layout. Mermaid allows for the organization of blocks into multiple columns, facilitating the creation of more intricate and detailed diagrams.

示例 - 多列图: 在需要将块分布在多列的情况下,你可以指定列数并相应地排列块。以下是如何创建一个包含三列四个块的块图,其中第四个块出现在第二行的方法:

此语法指示 Mermaid 将块 'a'、'b'、'c' 和 'd' 排列在三列中,必要时换行到下一行。此功能对于表示分层或多层系统特别有用,例如网络层或层级结构。

🌐 This syntax instructs Mermaid to arrange the blocks 'a', 'b', 'c', and 'd' across three columns, wrapping to the next row as needed. This feature is particularly useful for representing layered or multi-tiered systems, such as network layers or hierarchical structures.

这些 Mermaid 块图的基本构建模块为更复杂的图表提供了基础。语法的简洁性使得图表可以快速创建和迭代,使其成为可视化想法和概念的高效工具。在下一节中,我们将探讨高级块配置选项,包括设置块宽度和创建复合块。

🌐 These basic building blocks of Mermaid's block diagrams provide a foundation for more complex diagramming. The simplicity of the syntax allows for quick creation and iteration of diagrams, making it an efficient tool for visualizing ideas and concepts. In the next section, we'll explore advanced block configuration options, including setting block widths and creating composite blocks.

3. 高级区块配置

🌐 3. Advanced Block Configuration

在掌握基础知识的基础上,本节深入探讨了 Mermaid 中流程图绘制的更高级功能。这些功能使图表设计更加灵活和复杂,能够适应更广泛的使用场景和案例。

🌐 Building upon the basics, this section delves into more advanced features of block diagramming in Mermaid. These features allow for greater flexibility and complexity in diagram design, accommodating a wider range of use cases and scenarios.

设置区块宽度

🌐 Setting Block Width

跨越多列

🌐 Spanning Multiple Columns

在更复杂的图表中,你可能需要跨越多列的模块,以强调某些组件或表示更大的实体。Mermaid 允许调整模块的宽度以覆盖多列,从而提高图表的可读性和结构性。

🌐 In more complex diagrams, you may need blocks that span multiple columns to emphasize certain components or to represent larger entities. Mermaid allows for the adjustment of block widths to cover multiple columns, enhancing the diagram's readability and structure.

示例 - 跨多列的块: 要创建一个跨越两列的块图,可以为每个块指定所需的宽度:

在这个例子中,标记为“A labels”的块占据一列,而块“b”和“c”各占两列,块“d”则再次分配到它自己的列。块大小的这种灵活性对于准确表示具有不同重要性或大小组件的系统至关重要。

🌐 In this example, the block labeled "A labels" spans one column, while blocks 'b', 'c' span 2 columns, and 'd' is again allocated its own column. This flexibility in block sizing is crucial for accurately representing systems with components of varying significance or size.

创建复合模块

🌐 Creating Composite Blocks

嵌套块

🌐 Nested Blocks

复合块,或称块中块,是 Mermaid 块图语法中的高级功能。它们允许表示嵌套或分层系统,其中一个组件包含多个子组件。

🌐 Composite blocks, or blocks within blocks, are an advanced feature in Mermaid's block diagram syntax. They allow for the representation of nested or hierarchical systems, where one component encompasses several subcomponents.

示例 - 复合块: 创建复合块涉及定义一个父块,然后在其中嵌套其他块。以下是如何定义带有嵌套元素的复合块的方法:

在这个语法中,“D”是一个嵌套在更大父块中的块。这个功能对于描述复杂结构特别有用,例如具有多个服务的服务器或更大组织框架中的一个部门。

🌐 In this syntax, 'D' is a nested block within a larger parent block. This feature is particularly useful for depicting complex structures, such as a server with multiple services or a department within a larger organizational framework.

列宽动态

🌐 Column Width Dynamics

调整宽度

🌐 Adjusting Widths

Mermaid 还允许根据块的内容动态调整列宽。列的宽度由列中最宽的块决定,以确保图表保持平衡且易于阅读。

🌐 Mermaid also allows for dynamic adjustment of column widths based on the content of the blocks. The width of the columns is determined by the widest block in the column, ensuring that the diagram remains balanced and readable.

示例 - 动态列宽: 在块大小不一的图表中,Mermaid 会自动调整列宽以适应每列中最大的块。示例如下:

这个例子演示了 Mermaid 如何动态调整列的宽度以适应最宽的块,在本例中是“a”和复合块“e”。这种动态调整对于创建视觉上平衡且易于理解的图表至关重要。

🌐 This example demonstrates how Mermaid dynamically adjusts the width of the columns to accommodate the widest block, in this case, 'a' and the composite block 'e'. This dynamic adjustment is essential for creating visually balanced and easy-to-understand diagrams.

水平合并块: 在需要水平堆叠块的情况下,你可以使用列宽来完成此任务。将块放在单列中可以实现垂直排列。以下是如何创建一个将 4 个块叠在一起的块图示例:

在这个例子中,合并块的宽度会根据最大子块的宽度动态调整。

🌐 In this example, the width of the merged block dynamically adjusts to the width of the largest child block.

通过这些高级配置选项,Mermaid 的块状图可以定制用于表示各种复杂系统和结构。这些功能提供的灵活性使用户能够创建既具有信息性又具有视觉吸引力的图表。在接下来的章节中,我们将进一步探讨其他功能,包括不同的块形状和链接选项。

🌐 With these advanced configuration options, Mermaid's block diagrams can be tailored to represent a wide array of complex systems and structures. The flexibility offered by these features enables users to create diagrams that are both informative and visually appealing. In the following sections, we will explore further capabilities, including different block shapes and linking options.

4. 块状物的种类与形状

🌐 4. Block Varieties and Shapes

Mermaid 的流程图并不限于标准的矩形形状。提供多种方块形状,可用于更细致和定制化地表示不同类型的信息或实体。本节概述了在 Mermaid 中可以使用的不同方块形状及其具体应用。

🌐 Mermaid's block diagrams are not limited to standard rectangular shapes. A variety of block shapes are available, allowing for a more nuanced and tailored representation of different types of information or entities. This section outlines the different block shapes you can use in Mermaid and their specific applications.

标准和特殊方块形状

🌐 Standard and Special Block Shapes

Mermaid 支持多种块形,以满足不同的图表需求,从基本的几何形状到更专业的形式。

🌐 Mermaid supports a range of block shapes to suit different diagramming needs, from basic geometric shapes to more specialized forms.

示例 - 圆角方块

🌐 Example - Round Edged Block

要创建一个带圆角的块,可以用来表示更柔软或更灵活的组件:

🌐 To create a block with round edges, which can be used to represent a softer or more flexible component:

示例 - 体育场形状的区块

🌐 Example - Stadium-Shaped Block

可以使用类似于拉长圆形的体育场形状块来表示面向流程的组件:

🌐 A stadium-shaped block, resembling an elongated circle, can be used for components that are process-oriented:

示例 - 子程序形状

🌐 Example - Subroutine Shape

用于表示子程序或包含的过程时,带有双竖线的方框很有用:

🌐 For representing subroutines or contained processes, a block with double vertical lines is useful:

示例 - 圆柱形

🌐 Example - Cylindrical Shape

圆柱形非常适合表示数据库或存储组件:

🌐 The cylindrical shape is ideal for representing databases or storage components:

示例 - 圆形

🌐 Example - Circle Shape

圆形可以用于集中或关键的组件:

🌐 A circle can be used for centralized or pivotal components:

示例 - 不对称形状、菱形和六边形

🌐 Example - Asymmetric, Rhombus, and Hexagon Shapes

对于决策点,使用菱形,而对于独特或专业的流程,可以使用不对称形状和六边形:

🌐 For decision points, use a rhombus, and for unique or specialized processes, asymmetric and hexagon shapes can be utilized:

不对称

菱形

六边形

示例 - 平行四边形和梯形形状

🌐 Example - Parallelogram and Trapezoid Shapes

平行四边形和梯形形状非常适合表示输入/输出和过渡过程:

🌐 Parallelogram and trapezoid shapes are perfect for inputs/outputs and transitional processes:

示例 - 双圈

🌐 Example - Double Circle

对于强调关键或高优先级的组件,使用双圆圈会很有效:

🌐 For highlighting critical or high-priority components, a double circle can be effective:

阻塞箭头和空间块

🌐 Block Arrows and Space Blocks

Mermaid 还提供独特的形状,如块状箭头和空格块,用于表示方向流动和间距。

🌐 Mermaid also offers unique shapes like block arrows and space blocks for directional flow and spacing.

示例 - 块状箭头

🌐 Example - Block Arrows

块状箭头可以直观地显示流程中的方向或流动:

🌐 Block arrows can visually indicate direction or flow within a process:

示例 - 太空方块

🌐 Example - Space Blocks

空格模块可用于在图表中创建有意的空白,这对于布局和可读性非常有用:

🌐 Space blocks can be used to create intentional empty spaces in the diagram, which is useful for layout and readability:

或者

🌐 or

请注意,你可以使用数字表示法 space:num 来设置空格块占用的列数,其中 num 表示列宽的数值。你也可以使用 space,默认占用一列。

🌐 Note that you can set how many columns the space block occupied using the number notation space:num where num is a number indicating the num columns width. You can also use space which defaults to one column.

Mermaid 图中的各种形状和特殊块增强了流程图的表达力,使其能够更准确、更具情境的表示。这些选项为用户提供了灵活性,可以创建既信息丰富又视觉上吸引人的图表。在接下来的部分,我们将探讨连接这些块的方法以及自定义其外观的方式。

🌐 The variety of shapes and special blocks in Mermaid enhances the expressive power of block diagrams, allowing for more accurate and context-specific representations. These options give users the flexibility to create diagrams that are both informative and visually appealing. In the next sections, we will explore the ways to connect these blocks and customize their appearance.

标准和特殊方块形状

🌐 Standard and Special Block Shapes

讨论方块可用的各种形状,包括标准形状以及特殊形式,如方块箭头和空格方块。

🌐 Discuss the various shapes available for blocks, including standard shapes and special forms like block arrows and space blocks.

5. 用边连接方块

🌐 5. Connecting Blocks with Edges

Mermaid 中流程图的一个关键特性是能够使用各种类型的边或链接连接各个模块。本节将探讨模块之间相互连接的不同方式,以表示组件之间的关系和流程。

🌐 One of the key features of block diagrams in Mermaid is the ability to connect blocks using various types of edges or links. This section explores the different ways blocks can be interconnected to represent relationships and flows between components.

基本连接和箭头类型

🌐 Basic Linking and Arrow Types

连接模块的最基本方面是使用箭头或链接。这些连接器表示模块之间的关系或信息流。Mermaid 提供了多种箭头类型,以满足不同的图表需求。

🌐 The most fundamental aspect of connecting blocks is the use of arrows or links. These connectors depict the relationships or the flow of information between the blocks. Mermaid offers a range of arrow types to suit different diagramming needs.

示例 - 基本链接

可以创建一个带箭头的简单链接,以显示从一个块到另一个块的方向或流程:

🌐 A simple link with an arrow can be created to show direction or flow from one block to another:

这个例子展示了从块 'A' 到块 'B' 的直接连接,使用了一条简单的箭头。

🌐 This example illustrates a direct connection from block 'A' to block 'B', using a straightforward arrow.

这种语法创建了一条连接“A”和“B”的线,表示存在关系或联系,但不指示具体方向。

🌐 This syntax creates a line connecting 'A' and 'B', implying a relationship or connection without indicating a specific direction.

🌐 Text on Links

除了连接模块外,通常还需要描述或标注它们之间的关系。Mermaid 允许在连接线上添加文本,为连接提供上下文信息。

🌐 In addition to connecting blocks, it's often necessary to describe or label the relationship. Mermaid allows for the inclusion of text on links, providing context to the connections.

示例 - 带有链接的文本 要向链接添加文本,语法是在链接定义中包含该文本:

🌐 Example - Text with Links To add text to a link, the syntax includes the text within the link definition:

此示例展示了如何为链接添加描述性文本,以增强图表所传达的信息。

🌐 This example show how to add descriptive text to the links, enhancing the information conveyed by the diagram.

示例 - 边缘和样式:

🌐 Example - Edges and Styles:

6. 样式和自定义

🌐 6. Styling and Customization

除了块图的结构和布局之外,Mermaid 还提供了广泛的样式选项。这些自定义功能可以创建更具视觉特色和信息性的图表。本节将介绍如何对单个块应用样式,以及如何使用类在多个元素之间实现一致的样式。

🌐 Beyond the structure and layout of block diagrams, Mermaid offers extensive styling options. These customization features allow for the creation of more visually distinctive and informative diagrams. This section covers how to apply individual styles to blocks and how to use classes for consistent styling across multiple elements.

单独块样式

🌐 Individual Block Styling

Mermaid 允许对单个模块进行详细的样式设置,你可以应用各种 CSS 属性,如颜色、描边和边框厚度。此功能尤其适用于高亮图表的特定部分或遵循某些视觉主题。

🌐 Mermaid enables detailed styling of individual blocks, allowing you to apply various CSS properties such as color, stroke, and border thickness. This feature is especially useful for highlighting specific parts of a diagram or for adhering to certain visual themes.

示例 - 样式化单个区块

🌐 Example - Styling a Single Block

要对一个区块应用自定义样式,你可以使用 style 关键字,后跟区块标识符和所需的 CSS 属性:

🌐 To apply custom styles to a block, you can use the style keyword followed by the block identifier and the desired CSS properties:

类样式

🌐 Class Styling

Mermaid 允许对类应用样式,如果你希望将某一组样式应用到多个元素,这可以使样式设置更容易,因为你只需将这些元素链接到一个类即可。

🌐 Mermaid enables applying styling to classes, which could make styling easier if you want to apply a certain set of styles to multiple elements, as you could just link those elements to a class.

示例 - 为单个类设置样式

🌐 Example - Styling a Single Class

在这个例子中,定义了一个名为“blue”的类并应用于方块“ A”,而方块“ B”则接收单独的样式。这展示了 Mermaid 在同一图表中同时应用共享和独特样式的灵活性。

🌐 In this example, a class named 'blue' is defined and applied to block 'A', while block 'B' receives individual styling. This demonstrates the flexibility of Mermaid in applying both shared and unique styles within the same diagram.

单独或通过类对块进行样式设置的能力,为增强块图的视觉冲击力和清晰度提供了强大的工具。无论是强调某些元素,还是在整个图表中保持一致的设计,这些样式设置功能都是有效绘图的核心。接下来的章节将展示实际示例和使用案例,并提供解决常见问题的技巧。

🌐 The ability to style blocks individually or through classes provides a powerful tool for enhancing the visual impact and clarity of block diagrams. Whether emphasizing certain elements or maintaining a cohesive design across the diagram, these styling capabilities are central to effective diagramming. The next sections will present practical examples and use cases, followed by tips for troubleshooting common issues.

7. 实际例子与使用案例

🌐 7. Practical Examples and Use Cases

当 Mermaid 图表的模块化图表应用于实际场景时,其多功能性表现得淋漓尽致。本节提供了实际示例,演示了前几节讨论的各种功能的应用。这些示例展示了模块化图表如何以易于理解和信息丰富的方式表示复杂的系统和流程。

🌐 The versatility of Mermaid's block diagrams becomes evident when applied to real-world scenarios. This section provides practical examples demonstrating the application of various features discussed in previous sections. These examples showcase how block diagrams can be used to represent complex systems and processes in an accessible and informative manner.

展示各种功能的详细示例

🌐 Detailed Examples Illustrating Various Features

通过结合结构、链接和样式元素,我们可以创建在不同情境下发挥特定作用的综合图表。

🌐 Combining the elements of structure, linking, and styling, we can create comprehensive diagrams that serve specific purposes in different contexts.

示例 - 系统架构

🌐 Example - System Architecture

说明一个具有互联组件的简单软件系统架构:

🌐 Illustrating a simple software system architecture with interconnected components:

这个示例展示了一个包含前端、后端和数据库的基本架构。各个模块的样式不同,以区分组件类型。

🌐 This example shows a basic architecture with a frontend, backend, and database. The blocks are styled to differentiate between types of components.

示例 - 业务流程

🌐 Example - Business Process Flow

用决策点和多个阶段表示业务流程:

🌐 Representing a business process flow with decision points and multiple stages:

这些实际的例子和场景强调了 Mermaid 区块图在简化和有效传达各个字段复杂信息方面的作用。

🌐 These practical examples and scenarios underscore the utility of Mermaid block diagrams in simplifying and effectively communicating complex information across various domains.

下一部分“故障排除与常见问题”将提供解决使用 Mermaid 块状图时遇到的常见问题的见解,确保顺利的绘图体验。

🌐 The next section, 'Troubleshooting and Common Issues', will provide insights into resolving common challenges encountered when working with Mermaid block diagrams, ensuring a smooth diagramming experience.

8. 故障排除与常见问题

🌐 8. Troubleshooting and Common Issues

使用 Mermaid 方格图有时可能会遇到挑战,特别是随着图表复杂性的增加。本节旨在提供解决常见问题的指导,并提供管理更复杂图表结构的技巧。

🌐 Working with Mermaid block diagrams can sometimes present challenges, especially as the complexity of the diagrams increases. This section aims to provide guidance on resolving common issues and offers tips for managing more intricate diagram structures.

常见语法错误

🌐 Common Syntax Errors

理解并避免常见的语法错误是顺利使用 Mermaid 图表的关键。

🌐 Understanding and avoiding common syntax errors is key to a smooth experience with Mermaid diagrams.

示例 - 链接错误

🌐 Example - Incorrect Linking

一个常见的错误是链接语法不正确,这可能导致意外的结果或损坏的图表:

🌐 A common mistake is incorrect linking syntax, which can lead to unexpected results or broken diagrams:

block
  A - B

更正: 确保块之间的链接用箭头(--> 或 ---)正确指定,以定义连接的方向和类型。同时请记住,方块图的基本原则之一是让作者完全控制方框的位置,因此在示例中需要在方框之间添加空格:

示例 - 样式位置错误

🌐 Example - Misplaced Styling

在错误的上下文中或使用不正确的语法应用样式可能导致块无法按预期进行样式设置:

🌐 Applying styles in the wrong context or with incorrect syntax can lead to blocks not being styled as intended:

更正: 通过确保样式属性之间用逗号正确分隔,并使用正确的 CSS 属性格式来纠正语法:

复杂图表结构的技巧

🌐 Tips for Complex Diagram Structures

管理 Mermaid 图表的复杂性需要进行规划并采用最佳实践。

🌐 Managing complexity in Mermaid diagrams involves planning and employing best practices.

模块化设计

🌐 Modular Design

将复杂的图表分解为更小、更易管理的部分。这种方法不仅使图表更易于理解,还简化了创建和维护的过程。

🌐 Break down complex diagrams into smaller, more manageable components. This approach not only makes the diagram easier to understand but also simplifies the creation and maintenance process.

统一样式

🌐 Consistent Styling

使用类可以在类似元素之间保持一致的样式。这不仅节省时间,还能确保整体外观协调专业。

🌐 Use classes to maintain consistent styling across similar elements. This not only saves time but also ensures a cohesive and professional appearance.

注释和文档

🌐 Comments and Documentation

在 Mermaid 语法中使用 %% 添加注释,以记录图表各部分的用途。这种做法对于保持清晰性非常重要,特别是在团队协作或过一段时间后重新查看图表时。

🌐 Use comments with %% within the Mermaid syntax to document the purpose of various parts of the diagram. This practice is invaluable for maintaining clarity, especially when working in teams or returning to a diagram after some time.

通过这些故障排除技巧和最佳实践,你可以有效地管理和解决 Mermaid 块图中的常见问题。最后一部分“结论”将总结本指南中涵盖的关键要点,并邀请用户反馈以持续改进。

🌐 With these troubleshooting tips and best practices, you can effectively manage and resolve common issues in Mermaid block diagrams. The final section, 'Conclusion', will summarize the key points covered in this documentation and invite user feedback for continuous improvement.

Opens in mermaid.ai