Mermaid
Renderiza diagramas do Mermaid (fluxo, sequência, classes, estados,
gantt…) como um web component independente de framework. O <r-mermaid> carrega a biblioteca
mermaid sob demanda no primeiro render (aplicações que nunca a usam não pagam nada) e desenha o
diagrama no próprio shadow root, ficando isolado dos estilos da página.
Use quando quiser colocar em qualquer página um diagrama escrito como texto sem ligar o mermaid você mesmo, opcionalmente com uma barra de copiar / baixar / tela cheia e um visualizador com deslocamento e zoom.
Início rápido
<r-mermaid>graph LR; A[Request] --> B[Validate]; B --> C[Store]</r-mermaid>import 'ranui'; // ou a entrada independente:
import 'ranui/mermaid';A fonte do diagrama é lida do conteúdo de texto do elemento ou de um atributo code codificado
em URI (use code quando a sintaxe contiver <, por exemplo o <|-- de classDiagram, para que
ela sobreviva à análise do HTML):
el.code = 'classDiagram\n Dog --|> Animal'; // o setter da propriedade codifica em URI para vocêControles
Cada controle é opcional e ligado por um atributo booleano; um <r-mermaid> sem nada é um
diagrama estático e limpo. A barra aparece ao passar o mouse (canto superior direito).
<r-mermaid copy download fullscreen>graph TD; A --> B; B --> C</r-mermaid>- copy: copia a fonte do diagrama para a área de transferência.
- download: SVG / PNG / fonte (
.mmd); com um único formato baixa direto, com vários mostra um menu. Restrinja comdownload="svg"oudownload="svg png". - fullscreen: abre uma caixa de luz sem cabeçalho (r-modal) com deslocamento e zoom (roda
para ampliar, arrastar para mover, com reinício); fecha pelo ✕, clique no fundo ou
Esc.
Referência da API
Atributos
| Atributo | Tipo | Padrão | Descrição |
|---|---|---|---|
code |
string (codificado em URI) |
— | Fonte do diagrama. Na falta dele, recorre ao conteúdo de texto do elemento. |
theme |
'auto' | 'light' | 'dark' |
'auto' |
Tema do mermaid. auto segue a página (.dark / [data-ran-theme]) e re-renderiza ao alternar. |
copy |
booleano | desligado | Mostra o botão de copiar a fonte. |
download |
booleano / "svg png source" |
desligado | Mostra o botão de download; o valor restringe os formatos oferecidos. |
fullscreen |
booleano | desligado | Mostra o botão de tela cheia. |
sheet |
string |
— | CSS extra injetado no shadow root. |
label-* |
string |
Inglês | Sobrescreve os rótulos: label-copy, label-download, label-fullscreen, label-zoom-in, label-zoom-out, label-reset, label-diagram (nome do diálogo). |
Eventos
Todos os eventos borbulham e cruzam a fronteira do shadow (composed).
| Evento | detail |
Disparado quando |
|---|---|---|
render |
{ ok: true } |
um diagrama terminou de renderizar |
copied |
{ kind: 'source' } |
a fonte foi copiada |
download |
{ format: 'svg' | 'png' | 'source' } |
um arquivo foi baixado |
error |
{ message: string } |
o diagrama falhou ao analisar ou renderizar |
fullscreenchange |
{ open: boolean } |
a caixa de luz abriu ou fechou |
Partes CSS
| Parte | Descrição |
|---|---|
mermaid |
O invólucro externo. |
diagram |
O contêiner do diagrama renderizado. |
toolbar |
A barra de controles que aparece ao passar. |
button |
Cada botão de ícone da barra. |
error |
A caixa de mensagem de erro (quando falha). |
r-mermaid::part(toolbar) {
background: var(--surface);
}Variáveis CSS
Sobrescreva no elemento (cada uma recorre a um token semântico e depois a um literal):
--ran-mermaid-padding, --ran-mermaid-toolbar-background, --ran-mermaid-toolbar-gap,
--ran-mermaid-button-size, --ran-mermaid-button-color, --ran-mermaid-button-hover-background,
--ran-mermaid-error-color.
Notas
- Carregado sob demanda: o mermaid (e o r-modal usado na tela cheia) são importações dinâmicas, então chegam como blocos assíncronos separados só quando um diagrama renderiza ou a tela cheia abre.
- Fidelidade do render: o
<r-mermaid>usa o render do próprio mermaid, então todos os tipos de diagrama e temas são suportados. - Exportar PNG: diagramas que usam rótulos HTML (
htmlLabelsdo mermaid) são desenhados com<foreignObject>, o que pode contaminar o canvas e fazer a exportação PNG falhar; nesse caso um eventoerroré despachado. Exportar SVG e a fonte sempre funciona.