flows.md · documentação · Blocos
mermaid#
Um diagrama a partir de texto, na gramática do mermaid: fluxograma, sequência, estados, gantt e os outros tipos da documentação do mermaid. É o único bloco sem @: uma cerca mermaid também é desenhada no GitHub, no Obsidian, no Notion e no GitLab, e o diagrama continua funcionando onde a página for exportada.
Fluxograma#
flowchart LR
A[Encomenda] --> B{Tem a peça?}
B -- sim --> C[Embalar]
B -- não --> D[Tornear] --> E[Queimar] --> C
C --> F[Enviar]
```mermaid
flowchart LR
A[Encomenda] --> B{Tem a peça?}
B -- sim --> C[Embalar]
B -- não --> D[Tornear] --> E[Queimar] --> C
C --> F[Enviar]
```
Sequência#
sequenceDiagram
Cliente->>Loja: Envia o formulário
Loja-->>Cliente: Confirma por e-mail
Loja->>Ateliê: Pede a peça
Ateliê-->>Loja: Peça pronta
```mermaid
sequenceDiagram
Cliente->>Loja: Envia o formulário
Loja-->>Cliente: Confirma por e-mail
Loja->>Ateliê: Pede a peça
Ateliê-->>Loja: Peça pronta
```
O corpo é a gramática do próprio mermaid; a documentação dele lista todos os tipos de diagrama.
Quem desenha#
Por padrão, o Pele, o renderizador do Obsidian. Para um diagrama ser desenhado pelo próprio mermaid, diga na linha da cerca:
```mermaid renderer:mermaid
flowchart LR
A --> B
```
O GitHub, o Obsidian e o GitLab leem só a primeira palavra da linha, então a cerca continua sendo um diagrama lá.
| Pele (padrão) | mermaid | |
|---|---|---|
| Velocidade | um diagrama em menos de 1 ms, na própria página | dezenas de ms cada, em segundo plano |
| Tamanho que a página baixa | 258 kB | 947 kB |
| No celular | o desenho se reorganiza para a tela (um flowchart LR fica vertical) |
o desenho encolhe |
| Claro e escuro | troca na hora, sem desenhar de novo | desenha de novo |
| Só ele faz | — | ZenUML, o visual handDrawn, themeCSS
|
Um diagrama que pede o que só o mermaid faz (ZenUML, look: handDrawn, themeCSS) vai para o mermaid sozinho, sem precisar de renderer:. Quem lê pode comparar uma página dos dois jeitos com ?diagrams=pele ou ?diagrams=mermaid no endereço.
Cores#
Os dois renderizadores pintam com as mesmas cores, e há duas formas de escolhê-las.
Pelo tema da página. Sem nada escrito, o diagrama usa as cores do tema: um nó leva um tom do acento, uma linha a cor do texto, e muda junto com o claro e o escuro. Para escolher as suas, o tema aceita:
| Chave | O que pinta |
|---|---|
diagram_fill |
o fundo dos nós |
diagram_line |
as linhas (e as bordas, sem diagram_border) |
diagram_border |
as bordas dos nós e dos grupos |
diagram_group |
o fundo dos grupos, subgrafos e notas |
diagram_palette |
até 8 cores, em ordem, separadas por vírgula: as fatias de uma pizza, os ramos de um git graph, as seções de um mindmap ou de uma linha do tempo |
Cada uma tem a sua versão para o escuro: dark_diagram_fill, dark_diagram_line, dark_diagram_border, dark_diagram_group e dark_diagram_palette.
Pelo próprio diagrama, como no mermaid, e então valem em qualquer página (e no GitHub também): um dos temas do mermaid (default, neutral, dark, forest, base) e as variáveis dele, na diretiva %%{init}%% ou no config: do cabeçalho. O que o diagrama diz vale mais que o tema da página.
%%{init: {"theme": "forest"}}%%
flowchart LR
A[Semente] --> B[Muda] --> C[Árvore]
```mermaid
%%{init: {"theme": "forest"}}%%
flowchart LR
A[Semente] --> B[Muda] --> C[Árvore]
```
---
config:
themeVariables:
primaryColor: "#fde68a"
lineColor: "#92400e"
---
flowchart LR
A[Pedido] --> B[Forno] --> C[Entrega]
```mermaid
---
config:
themeVariables:
primaryColor: "#fde68a"
lineColor: "#92400e"
---
flowchart LR
A[Pedido] --> B[Forno] --> C[Entrega]
```
As variáveis que o Pele segue: background, primaryColor, primaryBorderColor, primaryTextColor, textColor, lineColor, clusterBkg, critBkgColor, fontFamily, pie1…pie8, git0…git7, cScale0…cScale7 e o plotColorPalette de um xychart. O mermaid segue todas as dele. Um nó sozinho muda com style ou classDef, nos dois.
Estilo editorial#
look:editorial desenha o diagrama no jeito do diagram-design: um acento só, no nó marcado com a classe focal; os outros em tinta e cinza conforme a classe (store, external, input, optional, security), pela sintaxe :::classe do mermaid; a primeira linha do rótulo é o nome, em negrito, e as linhas depois do <br/> são o detalhe, em mono; os rótulos das setas em versalete mono; e as setas em degrau quando a configuração pede curve: stepAfter. As cores continuam sendo as do tema. É o mesmo desenho do Pele, com outra roupa: para o @diagram, que tem tipos próprios, veja @diagram.
%%{init: {"flowchart": {"curve": "stepAfter"}}}%%
flowchart LR
leitor["Leitor<br/>navegador"]:::input -- HTTPS --> cf["Cloudflare<br/>edge · cache"]:::external
cf -- SSR --> app["App web<br/>Rails 8 · Puma"]:::focal
app --> db[("PostgreSQL<br/>páginas · coleções")]:::store
app -.-> worker["Worker<br/>Solid Queue"]:::optional
```mermaid look:editorial
%%{init: {"flowchart": {"curve": "stepAfter"}}}%%
flowchart LR
leitor["Leitor<br/>navegador"]:::input -- HTTPS --> cf["Cloudflare<br/>edge · cache"]:::external
cf -- SSR --> app["App web<br/>Rails 8 · Puma"]:::focal
app --> db[("PostgreSQL<br/>páginas · coleções")]:::store
app -.-> worker["Worker<br/>Solid Queue"]:::optional
```
Zoom e tela cheia#
Todo diagrama, do Pele ou do mermaid, tem os controles de quem lê: diminuir, aumentar, voltar à vista inicial, selecionar ou mover, e tela cheia. No computador eles aparecem quando o mouse passa pelo diagrama; Ctrl (ou ⌘) com a roda do mouse, ou a pinça do trackpad, aproxima onde o ponteiro está, e um duplo clique aproxima e volta. Com a mão, arrastar move o desenho; com a seta, dá para selecionar o texto dele. No celular fica só o botão de tela cheia, e lá dentro um dedo move o desenho e dois dão zoom.
Pelo teclado, com o foco no diagrama: + e - aproximam e afastam, 0 volta, V seleciona, H move, F abre a tela cheia e Esc sai dela.
Exemplos: Diagramas.