sirena 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/build_deploy.yml +59 -0
- data/.github/workflows/links.yml +85 -0
- data/.github/workflows/rake.yml +15 -0
- data/.github/workflows/release.yml +27 -0
- data/.gitignore +68 -0
- data/.rspec +3 -0
- data/.rubocop.yml +14 -0
- data/.rubocop_todo.yml +70 -0
- data/ARCHITECTURE.md +744 -0
- data/Gemfile +12 -0
- data/LICENSE +25 -0
- data/README.adoc +357 -0
- data/Rakefile +11 -0
- data/docs/.gitignore +1 -0
- data/docs/Gemfile +13 -0
- data/docs/_config.yml +182 -0
- data/docs/_diagram_types/architecture-diagram.adoc +314 -0
- data/docs/_diagram_types/block-diagram.adoc +345 -0
- data/docs/_diagram_types/c4-diagram.adoc +559 -0
- data/docs/_diagram_types/class-diagram.adoc +816 -0
- data/docs/_diagram_types/er-diagram.adoc +719 -0
- data/docs/_diagram_types/error-diagram.adoc +114 -0
- data/docs/_diagram_types/examples/flowchart-examples.adoc +29 -0
- data/docs/_diagram_types/flowchart.adoc +488 -0
- data/docs/_diagram_types/gantt-chart.adoc +502 -0
- data/docs/_diagram_types/git-graph.adoc +600 -0
- data/docs/_diagram_types/index.adoc +192 -0
- data/docs/_diagram_types/info-diagram.adoc +103 -0
- data/docs/_diagram_types/kanban-diagram.adoc +262 -0
- data/docs/_diagram_types/mindmap.adoc +603 -0
- data/docs/_diagram_types/packet-diagram.adoc +378 -0
- data/docs/_diagram_types/pie-chart.adoc +335 -0
- data/docs/_diagram_types/quadrant-chart.adoc +406 -0
- data/docs/_diagram_types/radar-chart.adoc +528 -0
- data/docs/_diagram_types/requirement-diagram.adoc +416 -0
- data/docs/_diagram_types/sankey-diagram.adoc +357 -0
- data/docs/_diagram_types/sequence-diagram.adoc +664 -0
- data/docs/_diagram_types/state-diagram.adoc +658 -0
- data/docs/_diagram_types/timeline.adoc +352 -0
- data/docs/_diagram_types/treemap-diagram.adoc +462 -0
- data/docs/_diagram_types/user-journey.adoc +602 -0
- data/docs/_features/index.adoc +129 -0
- data/docs/_guides/cli-reference.adoc +203 -0
- data/docs/_guides/index.adoc +56 -0
- data/docs/_guides/installation.adoc +100 -0
- data/docs/_guides/quick-start.adoc +132 -0
- data/docs/_pages/comparison.adoc +441 -0
- data/docs/_pages/compatibility.adoc +300 -0
- data/docs/_pages/index.adoc +39 -0
- data/docs/_references/index.adoc +103 -0
- data/docs/_tutorials/index.adoc +57 -0
- data/docs/index.adoc +166 -0
- data/docs/lychee.toml +54 -0
- data/examples/.gitignore +10 -0
- data/examples/README.adoc +196 -0
- data/examples/README.md +64 -0
- data/examples/architecture/01-basic-services.mmd +9 -0
- data/examples/architecture/01-basic-services.svg +37 -0
- data/examples/architecture/02-service-groups.mmd +16 -0
- data/examples/architecture/02-service-groups.svg +55 -0
- data/examples/architecture/README.adoc +79 -0
- data/examples/block/01-basic-blocks.mmd +13 -0
- data/examples/block/01-basic-blocks.svg +44 -0
- data/examples/block/02-block-shapes.mmd +13 -0
- data/examples/block/02-block-shapes.svg +47 -0
- data/examples/block/README.adoc +85 -0
- data/examples/c4/01-context-diagram.mmd +10 -0
- data/examples/c4/01-context-diagram.svg +45 -0
- data/examples/c4/02-container-diagram.mmd +24 -0
- data/examples/c4/02-container-diagram.svg +105 -0
- data/examples/c4/README.adoc +92 -0
- data/examples/class_diagram/01-basic-classes.mmd +61 -0
- data/examples/class_diagram/01-basic-classes.svg +117 -0
- data/examples/class_diagram/02-relationships.mmd +61 -0
- data/examples/class_diagram/02-relationships.svg +129 -0
- data/examples/class_diagram/README.adoc +93 -0
- data/examples/er_diagram/01-basic-entities.mmd +64 -0
- data/examples/er_diagram/01-basic-entities.svg +5 -0
- data/examples/er_diagram/02-cardinality.mmd +57 -0
- data/examples/er_diagram/02-cardinality.svg +125 -0
- data/examples/er_diagram/README.adoc +88 -0
- data/examples/error/01-basic-error.mmd +1 -0
- data/examples/error/01-basic-error.svg +13 -0
- data/examples/error/02-error-display.mmd +1 -0
- data/examples/error/02-error-display.svg +13 -0
- data/examples/error/README.adoc +71 -0
- data/examples/error_message_example.svg +13 -0
- data/examples/flowchart/00-original.mmd +13 -0
- data/examples/flowchart/00-original.svg +5 -0
- data/examples/flowchart/01-basic-flow.mmd +7 -0
- data/examples/flowchart/01-basic-flow.svg +52 -0
- data/examples/flowchart/01-basic-flow.yml +13 -0
- data/examples/flowchart/02*.svg +87 -0
- data/examples/flowchart/02-node-shapes.mmd +9 -0
- data/examples/flowchart/02-node-shapes.svg +33 -0
- data/examples/flowchart/03-edge-types.mmd +7 -0
- data/examples/flowchart/03-edge-types.svg +53 -0
- data/examples/flowchart/04-subgraphs.mmd +9 -0
- data/examples/flowchart/04-subgraphs.svg +33 -0
- data/examples/flowchart/05-styling.mmd +9 -0
- data/examples/flowchart/05-styling.svg +33 -0
- data/examples/flowchart/06-complex-flow.mmd +8 -0
- data/examples/flowchart/06-complex-flow.svg +59 -0
- data/examples/flowchart/README.adoc +167 -0
- data/examples/gantt/01-simple-timeline.* +14 -0
- data/examples/gantt/01-simple-timeline.mmd +6 -0
- data/examples/gantt/01-simple-timeline.svg +26 -0
- data/examples/gantt/02-task-dependencies.mmd +6 -0
- data/examples/gantt/02-task-dependencies.svg +26 -0
- data/examples/gantt/README.adoc +86 -0
- data/examples/git_graph/01-linear-history.mmd +12 -0
- data/examples/git_graph/01-linear-history.svg +26 -0
- data/examples/git_graph/02-branching.mmd +12 -0
- data/examples/git_graph/02-branching.svg +26 -0
- data/examples/git_graph/README.adoc +73 -0
- data/examples/info/02-showinfo.mmd +1 -0
- data/examples/info/02-showinfo.svg +10 -0
- data/examples/info/README.adoc +58 -0
- data/examples/info_showinfo_example.svg +10 -0
- data/examples/kanban/01-simple-board.mmd +8 -0
- data/examples/kanban/01-simple-board.svg +43 -0
- data/examples/kanban/02-workflow.mmd +8 -0
- data/examples/kanban/02-workflow.svg +43 -0
- data/examples/kanban/README.adoc +79 -0
- data/examples/mindmap/01-simple-tree.mmd +19 -0
- data/examples/mindmap/01-simple-tree.svg +61 -0
- data/examples/mindmap/02-knowledge-map.mmd +19 -0
- data/examples/mindmap/02-knowledge-map.svg +61 -0
- data/examples/mindmap/README.adoc +77 -0
- data/examples/packet/01-basic-packet.* +17 -0
- data/examples/packet/01-basic-packet.mmd +4 -0
- data/examples/packet/01-basic-packet.svg +82 -0
- data/examples/packet/README.adoc +58 -0
- data/examples/pie/01-simple-chart.mmd +5 -0
- data/examples/pie/01-simple-chart.svg +17 -0
- data/examples/pie/02-labeled-slices.mmd +6 -0
- data/examples/pie/02-labeled-slices.svg +19 -0
- data/examples/pie/README.adoc +75 -0
- data/examples/quadrant/01-basic-quadrant.mmd +13 -0
- data/examples/quadrant/01-basic-quadrant.svg +33 -0
- data/examples/quadrant/02-positioned-items.mmd +14 -0
- data/examples/quadrant/02-positioned-items.svg +35 -0
- data/examples/quadrant/README.adoc +84 -0
- data/examples/radar/01-simple-radar.* +5 -0
- data/examples/radar/01-simple-radar.mmd +3 -0
- data/examples/radar/01-simple-radar.svg +25 -0
- data/examples/radar/02-multiple-curves.mmd +4 -0
- data/examples/radar/02-multiple-curves.svg +43 -0
- data/examples/radar/README.adoc +75 -0
- data/examples/requirement/01-basic-requirements.mmd +23 -0
- data/examples/requirement/01-basic-requirements.svg +49 -0
- data/examples/requirement/02-risk-levels.mmd +23 -0
- data/examples/requirement/02-risk-levels.svg +49 -0
- data/examples/requirement/README.adoc +85 -0
- data/examples/sankey/01-simple-flow.mmd +7 -0
- data/examples/sankey/01-simple-flow.svg +34 -0
- data/examples/sankey/02-multi-stage.mmd +11 -0
- data/examples/sankey/02-multi-stage.svg +44 -0
- data/examples/sankey/README.adoc +74 -0
- data/examples/sequence/01-basic-sequence.mmd +27 -0
- data/examples/sequence/01-basic-sequence.svg +5 -0
- data/examples/sequence/02-activations.mmd +17 -0
- data/examples/sequence/02-activations.svg +78 -0
- data/examples/sequence/README.adoc +86 -0
- data/examples/state_diagram/01-simple-states.mmd +29 -0
- data/examples/state_diagram/01-simple-states.svg +5 -0
- data/examples/state_diagram/02-composite.mmd +19 -0
- data/examples/state_diagram/02-composite.svg +81 -0
- data/examples/state_diagram/README.adoc +90 -0
- data/examples/timeline/01-simple-timeline.mmd +11 -0
- data/examples/timeline/01-simple-timeline.svg +36 -0
- data/examples/timeline/02-periods.mmd +15 -0
- data/examples/timeline/02-periods.svg +47 -0
- data/examples/timeline/README.adoc +78 -0
- data/examples/treemap/01-basic-treemap.mmd +12 -0
- data/examples/treemap/01-basic-treemap.svg +59 -0
- data/examples/treemap/README.adoc +59 -0
- data/examples/user_journey/01-simple-journey.mmd +23 -0
- data/examples/user_journey/01-simple-journey.svg +5 -0
- data/examples/user_journey/02-multi-actor.mmd +18 -0
- data/examples/user_journey/02-multi-actor.svg +129 -0
- data/examples/user_journey/README.adoc +81 -0
- data/examples/xychart/01-line-chart.mmd +5 -0
- data/examples/xychart/01-line-chart.svg +43 -0
- data/examples/xychart/02-bar-chart.mmd +7 -0
- data/examples/xychart/02-bar-chart.svg +48 -0
- data/examples/xychart/README.adoc +80 -0
- data/exe/sirena +7 -0
- data/lib/sirena/cli.rb +138 -0
- data/lib/sirena/commands/batch.rb +117 -0
- data/lib/sirena/commands/render.rb +80 -0
- data/lib/sirena/commands/types.rb +29 -0
- data/lib/sirena/commands/version.rb +24 -0
- data/lib/sirena/diagram/architecture.rb +46 -0
- data/lib/sirena/diagram/base.rb +61 -0
- data/lib/sirena/diagram/block.rb +81 -0
- data/lib/sirena/diagram/c4.rb +328 -0
- data/lib/sirena/diagram/class_diagram.rb +385 -0
- data/lib/sirena/diagram/er_diagram.rb +238 -0
- data/lib/sirena/diagram/error.rb +38 -0
- data/lib/sirena/diagram/flowchart.rb +160 -0
- data/lib/sirena/diagram/gantt.rb +71 -0
- data/lib/sirena/diagram/git_graph.rb +36 -0
- data/lib/sirena/diagram/info.rb +38 -0
- data/lib/sirena/diagram/kanban.rb +178 -0
- data/lib/sirena/diagram/mindmap.rb +54 -0
- data/lib/sirena/diagram/packet.rb +79 -0
- data/lib/sirena/diagram/pie.rb +115 -0
- data/lib/sirena/diagram/quadrant.rb +138 -0
- data/lib/sirena/diagram/radar.rb +52 -0
- data/lib/sirena/diagram/requirement.rb +133 -0
- data/lib/sirena/diagram/sankey.rb +217 -0
- data/lib/sirena/diagram/sequence.rb +242 -0
- data/lib/sirena/diagram/state_diagram.rb +237 -0
- data/lib/sirena/diagram/timeline.rb +171 -0
- data/lib/sirena/diagram/treemap.rb +84 -0
- data/lib/sirena/diagram/user_journey.rb +149 -0
- data/lib/sirena/diagram/xy_chart.rb +76 -0
- data/lib/sirena/diagram.rb +8 -0
- data/lib/sirena/diagram_registry.rb +101 -0
- data/lib/sirena/engine.rb +292 -0
- data/lib/sirena/parser/architecture.rb +41 -0
- data/lib/sirena/parser/base.rb +41 -0
- data/lib/sirena/parser/block.rb +72 -0
- data/lib/sirena/parser/c4.rb +53 -0
- data/lib/sirena/parser/class_diagram.rb +63 -0
- data/lib/sirena/parser/er_diagram.rb +40 -0
- data/lib/sirena/parser/error.rb +49 -0
- data/lib/sirena/parser/flowchart.rb +71 -0
- data/lib/sirena/parser/gantt.rb +60 -0
- data/lib/sirena/parser/git_graph.rb +95 -0
- data/lib/sirena/parser/grammars/architecture.rb +145 -0
- data/lib/sirena/parser/grammars/block.rb +190 -0
- data/lib/sirena/parser/grammars/c4.rb +226 -0
- data/lib/sirena/parser/grammars/class_diagram.rb +284 -0
- data/lib/sirena/parser/grammars/common.rb +84 -0
- data/lib/sirena/parser/grammars/er_diagram.rb +114 -0
- data/lib/sirena/parser/grammars/error.rb +40 -0
- data/lib/sirena/parser/grammars/flowchart.rb +298 -0
- data/lib/sirena/parser/grammars/gantt.rb +252 -0
- data/lib/sirena/parser/grammars/git_graph.rb +167 -0
- data/lib/sirena/parser/grammars/info.rb +58 -0
- data/lib/sirena/parser/grammars/kanban.rb +83 -0
- data/lib/sirena/parser/grammars/mindmap.rb +115 -0
- data/lib/sirena/parser/grammars/packet.rb +73 -0
- data/lib/sirena/parser/grammars/pie.rb +128 -0
- data/lib/sirena/parser/grammars/quadrant.rb +199 -0
- data/lib/sirena/parser/grammars/radar.rb +150 -0
- data/lib/sirena/parser/grammars/requirement.rb +188 -0
- data/lib/sirena/parser/grammars/sankey.rb +104 -0
- data/lib/sirena/parser/grammars/sequence.rb +247 -0
- data/lib/sirena/parser/grammars/state_diagram.rb +172 -0
- data/lib/sirena/parser/grammars/timeline.rb +142 -0
- data/lib/sirena/parser/grammars/treemap.rb +120 -0
- data/lib/sirena/parser/grammars/xy_chart.rb +120 -0
- data/lib/sirena/parser/info.rb +49 -0
- data/lib/sirena/parser/kanban.rb +97 -0
- data/lib/sirena/parser/mindmap.rb +106 -0
- data/lib/sirena/parser/packet.rb +76 -0
- data/lib/sirena/parser/pie.rb +49 -0
- data/lib/sirena/parser/quadrant.rb +57 -0
- data/lib/sirena/parser/radar.rb +104 -0
- data/lib/sirena/parser/requirement.rb +70 -0
- data/lib/sirena/parser/sankey.rb +64 -0
- data/lib/sirena/parser/sequence.rb +51 -0
- data/lib/sirena/parser/state_diagram.rb +69 -0
- data/lib/sirena/parser/timeline.rb +57 -0
- data/lib/sirena/parser/transforms/architecture.rb +97 -0
- data/lib/sirena/parser/transforms/block.rb +254 -0
- data/lib/sirena/parser/transforms/c4.rb +347 -0
- data/lib/sirena/parser/transforms/class_diagram.rb +352 -0
- data/lib/sirena/parser/transforms/er_diagram.rb +169 -0
- data/lib/sirena/parser/transforms/error.rb +58 -0
- data/lib/sirena/parser/transforms/flowchart.rb +293 -0
- data/lib/sirena/parser/transforms/gantt.rb +215 -0
- data/lib/sirena/parser/transforms/git_graph.rb +160 -0
- data/lib/sirena/parser/transforms/info.rb +58 -0
- data/lib/sirena/parser/transforms/kanban.rb +176 -0
- data/lib/sirena/parser/transforms/mindmap.rb +227 -0
- data/lib/sirena/parser/transforms/packet.rb +63 -0
- data/lib/sirena/parser/transforms/pie.rb +143 -0
- data/lib/sirena/parser/transforms/quadrant.rb +177 -0
- data/lib/sirena/parser/transforms/radar.rb +126 -0
- data/lib/sirena/parser/transforms/requirement.rb +272 -0
- data/lib/sirena/parser/transforms/sankey.rb +122 -0
- data/lib/sirena/parser/transforms/sequence.rb +342 -0
- data/lib/sirena/parser/transforms/state_diagram.rb +292 -0
- data/lib/sirena/parser/transforms/timeline.rb +177 -0
- data/lib/sirena/parser/transforms/treemap.rb +81 -0
- data/lib/sirena/parser/transforms/xy_chart.rb +132 -0
- data/lib/sirena/parser/treemap.rb +98 -0
- data/lib/sirena/parser/user_journey.rb +120 -0
- data/lib/sirena/parser/xy_chart.rb +114 -0
- data/lib/sirena/parser.rb +8 -0
- data/lib/sirena/renderer/architecture.rb +251 -0
- data/lib/sirena/renderer/base.rb +251 -0
- data/lib/sirena/renderer/block.rb +286 -0
- data/lib/sirena/renderer/c4.rb +490 -0
- data/lib/sirena/renderer/class_diagram.rb +499 -0
- data/lib/sirena/renderer/er_diagram.rb +417 -0
- data/lib/sirena/renderer/error.rb +131 -0
- data/lib/sirena/renderer/flowchart.rb +301 -0
- data/lib/sirena/renderer/gantt.rb +331 -0
- data/lib/sirena/renderer/git_graph.rb +368 -0
- data/lib/sirena/renderer/info.rb +93 -0
- data/lib/sirena/renderer/kanban.rb +295 -0
- data/lib/sirena/renderer/mindmap.rb +396 -0
- data/lib/sirena/renderer/packet.rb +239 -0
- data/lib/sirena/renderer/pie.rb +235 -0
- data/lib/sirena/renderer/quadrant.rb +292 -0
- data/lib/sirena/renderer/radar.rb +323 -0
- data/lib/sirena/renderer/requirement.rb +371 -0
- data/lib/sirena/renderer/sankey.rb +255 -0
- data/lib/sirena/renderer/sequence.rb +424 -0
- data/lib/sirena/renderer/state_diagram.rb +328 -0
- data/lib/sirena/renderer/timeline.rb +304 -0
- data/lib/sirena/renderer/treemap.rb +152 -0
- data/lib/sirena/renderer/user_journey.rb +331 -0
- data/lib/sirena/renderer/xy_chart.rb +452 -0
- data/lib/sirena/renderer.rb +8 -0
- data/lib/sirena/svg/circle.rb +41 -0
- data/lib/sirena/svg/document.rb +103 -0
- data/lib/sirena/svg/element.rb +65 -0
- data/lib/sirena/svg/ellipse.rb +33 -0
- data/lib/sirena/svg/group.rb +71 -0
- data/lib/sirena/svg/line.rb +49 -0
- data/lib/sirena/svg/path.rb +76 -0
- data/lib/sirena/svg/polygon.rb +43 -0
- data/lib/sirena/svg/polyline.rb +35 -0
- data/lib/sirena/svg/rect.rb +57 -0
- data/lib/sirena/svg/style.rb +44 -0
- data/lib/sirena/svg/text.rb +72 -0
- data/lib/sirena/svg.rb +19 -0
- data/lib/sirena/text_measurement.rb +71 -0
- data/lib/sirena/theme/builtin/dark.yml +70 -0
- data/lib/sirena/theme/builtin/default.yml +80 -0
- data/lib/sirena/theme/builtin/high_contrast.yml +70 -0
- data/lib/sirena/theme/builtin/light.yml +70 -0
- data/lib/sirena/theme/color_palette.rb +48 -0
- data/lib/sirena/theme/effect_styles.rb +28 -0
- data/lib/sirena/theme/registry.rb +41 -0
- data/lib/sirena/theme/shape_styles.rb +28 -0
- data/lib/sirena/theme/spacing_config.rb +24 -0
- data/lib/sirena/theme/typography.rb +30 -0
- data/lib/sirena/theme.rb +69 -0
- data/lib/sirena/transform/architecture.rb +273 -0
- data/lib/sirena/transform/base.rb +199 -0
- data/lib/sirena/transform/block.rb +215 -0
- data/lib/sirena/transform/c4.rb +288 -0
- data/lib/sirena/transform/class_diagram.rb +296 -0
- data/lib/sirena/transform/er_diagram.rb +204 -0
- data/lib/sirena/transform/error.rb +39 -0
- data/lib/sirena/transform/flowchart.rb +161 -0
- data/lib/sirena/transform/gantt.rb +253 -0
- data/lib/sirena/transform/git_graph.rb +283 -0
- data/lib/sirena/transform/info.rb +39 -0
- data/lib/sirena/transform/kanban.rb +180 -0
- data/lib/sirena/transform/mindmap.rb +251 -0
- data/lib/sirena/transform/packet.rb +185 -0
- data/lib/sirena/transform/pie.rb +62 -0
- data/lib/sirena/transform/quadrant.rb +167 -0
- data/lib/sirena/transform/radar.rb +227 -0
- data/lib/sirena/transform/requirement.rb +233 -0
- data/lib/sirena/transform/sankey.rb +212 -0
- data/lib/sirena/transform/sequence.rb +143 -0
- data/lib/sirena/transform/state_diagram.rb +228 -0
- data/lib/sirena/transform/timeline.rb +139 -0
- data/lib/sirena/transform/treemap.rb +120 -0
- data/lib/sirena/transform/user_journey.rb +207 -0
- data/lib/sirena/transform/xy_chart.rb +273 -0
- data/lib/sirena/transform.rb +8 -0
- data/lib/sirena/version.rb +5 -0
- data/lib/sirena.rb +328 -0
- data/lib/tasks/benchmark.rake +532 -0
- data/lib/tasks/examples.rake +468 -0
- data/lib/tasks/generate_mermaid_fixtures.rake +363 -0
- data/lib/tasks/mermaid_fixtures.rake +46 -0
- data/scripts/extract_mermaid_tests.rb +493 -0
- data/scripts/rename_to_sirena.rb +73 -0
- data/sirena.gemspec +47 -0
- metadata +529 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
= Sankey diagrams
|
|
2
|
+
:toc:
|
|
3
|
+
:toclevels: 3
|
|
4
|
+
|
|
5
|
+
== Overview
|
|
6
|
+
|
|
7
|
+
Sankey diagrams in Sirena visualize flow quantities between nodes, where the width of arrows or connections is proportional to the flow rate. Sankey diagrams are ideal for showing how quantities move through a system, making them excellent for energy flows, material flows, cost distributions, and other transfer visualizations.
|
|
8
|
+
|
|
9
|
+
Sankey diagrams are useful for:
|
|
10
|
+
|
|
11
|
+
* Visualizing energy flows in systems
|
|
12
|
+
* Showing material flows in manufacturing processes
|
|
13
|
+
* Illustrating budget allocations and spending
|
|
14
|
+
* Mapping website traffic flows
|
|
15
|
+
* Displaying data transfer in networks
|
|
16
|
+
* Representing ecological cycles and resource flows
|
|
17
|
+
|
|
18
|
+
== Syntax specification
|
|
19
|
+
|
|
20
|
+
=== Diagram declaration
|
|
21
|
+
|
|
22
|
+
Sankey diagrams are declared using the `sankey-beta` keyword:
|
|
23
|
+
|
|
24
|
+
[source,mermaid]
|
|
25
|
+
----
|
|
26
|
+
sankey-beta
|
|
27
|
+
<diagram-content>
|
|
28
|
+
----
|
|
29
|
+
|
|
30
|
+
=== Flow syntax
|
|
31
|
+
|
|
32
|
+
Flows are defined in CSV format: `source,target,value`
|
|
33
|
+
|
|
34
|
+
[source,mermaid]
|
|
35
|
+
----
|
|
36
|
+
source,target,value
|
|
37
|
+
----
|
|
38
|
+
|
|
39
|
+
Where:
|
|
40
|
+
|
|
41
|
+
* `source`: The ID of the source node
|
|
42
|
+
* `target`: The ID of the target node
|
|
43
|
+
* `value`: The flow value (numeric, can be integer or float)
|
|
44
|
+
|
|
45
|
+
Example:
|
|
46
|
+
|
|
47
|
+
[source,mermaid]
|
|
48
|
+
----
|
|
49
|
+
A,B,10
|
|
50
|
+
B,C,7.5
|
|
51
|
+
B,D,2.5
|
|
52
|
+
----
|
|
53
|
+
|
|
54
|
+
=== Node label declarations (optional)
|
|
55
|
+
|
|
56
|
+
Nodes can have custom labels defined separately:
|
|
57
|
+
|
|
58
|
+
[source,mermaid]
|
|
59
|
+
----
|
|
60
|
+
NodeID [Node Label]
|
|
61
|
+
----
|
|
62
|
+
|
|
63
|
+
Example:
|
|
64
|
+
|
|
65
|
+
[source,mermaid]
|
|
66
|
+
----
|
|
67
|
+
Source [Energy Source]
|
|
68
|
+
Process [Processing Plant]
|
|
69
|
+
Output [Useful Energy]
|
|
70
|
+
----
|
|
71
|
+
|
|
72
|
+
== Examples
|
|
73
|
+
|
|
74
|
+
=== Simple Sankey diagram
|
|
75
|
+
|
|
76
|
+
.Basic flow visualization
|
|
77
|
+
[example]
|
|
78
|
+
====
|
|
79
|
+
[source,mermaid]
|
|
80
|
+
----
|
|
81
|
+
sankey-beta
|
|
82
|
+
A,B,10
|
|
83
|
+
B,C,20
|
|
84
|
+
A,D,5
|
|
85
|
+
----
|
|
86
|
+
|
|
87
|
+
This creates a simple Sankey diagram showing flows from node A to nodes B and D, and from B to C. The flow widths are proportional to the values.
|
|
88
|
+
====
|
|
89
|
+
|
|
90
|
+
=== Sankey with node labels
|
|
91
|
+
|
|
92
|
+
.Energy flow with labeled nodes
|
|
93
|
+
[example]
|
|
94
|
+
====
|
|
95
|
+
[source,mermaid]
|
|
96
|
+
----
|
|
97
|
+
sankey-beta
|
|
98
|
+
Source [Energy Source]
|
|
99
|
+
Process [Processing Plant]
|
|
100
|
+
Output [Useful Energy]
|
|
101
|
+
Waste [Waste Heat]
|
|
102
|
+
|
|
103
|
+
Source,Process,100
|
|
104
|
+
Process,Output,70
|
|
105
|
+
Process,Waste,30
|
|
106
|
+
----
|
|
107
|
+
|
|
108
|
+
This demonstrates energy flow through a processing plant with custom labels for nodes.
|
|
109
|
+
====
|
|
110
|
+
|
|
111
|
+
=== Complex flow network
|
|
112
|
+
|
|
113
|
+
.Multi-path flow distribution
|
|
114
|
+
[example]
|
|
115
|
+
====
|
|
116
|
+
[source,mermaid]
|
|
117
|
+
----
|
|
118
|
+
sankey-beta
|
|
119
|
+
A,B,10
|
|
120
|
+
A,C,5
|
|
121
|
+
B,D,8
|
|
122
|
+
B,E,2
|
|
123
|
+
C,D,3
|
|
124
|
+
C,F,2
|
|
125
|
+
----
|
|
126
|
+
|
|
127
|
+
This shows a more complex network where flows split and merge across multiple paths.
|
|
128
|
+
====
|
|
129
|
+
|
|
130
|
+
=== Budget allocation example
|
|
131
|
+
|
|
132
|
+
.Financial flow visualization
|
|
133
|
+
[example]
|
|
134
|
+
====
|
|
135
|
+
[source,mermaid]
|
|
136
|
+
----
|
|
137
|
+
sankey-beta
|
|
138
|
+
Revenue [Total Revenue],Operations,60
|
|
139
|
+
Revenue,Marketing,25
|
|
140
|
+
Revenue,Research,15
|
|
141
|
+
Operations,Salaries,40
|
|
142
|
+
Operations,Infrastructure,20
|
|
143
|
+
Marketing,Digital,15
|
|
144
|
+
Marketing,Events,10
|
|
145
|
+
Research,Development,10
|
|
146
|
+
Research,Innovation,5
|
|
147
|
+
----
|
|
148
|
+
|
|
149
|
+
This demonstrates using Sankey diagrams for visualizing budget allocations across departments and categories.
|
|
150
|
+
====
|
|
151
|
+
|
|
152
|
+
== Features
|
|
153
|
+
|
|
154
|
+
=== Proportional flow widths
|
|
155
|
+
|
|
156
|
+
The width of each flow path is automatically calculated proportional to its value:
|
|
157
|
+
|
|
158
|
+
* Larger values result in wider flow paths
|
|
159
|
+
* Smaller values result in narrower flow paths
|
|
160
|
+
* Visual width helps quickly identify major vs minor flows
|
|
161
|
+
|
|
162
|
+
=== Automatic node discovery
|
|
163
|
+
|
|
164
|
+
Nodes are automatically discovered from flow definitions:
|
|
165
|
+
|
|
166
|
+
[source,mermaid]
|
|
167
|
+
----
|
|
168
|
+
sankey-beta
|
|
169
|
+
A,B,10
|
|
170
|
+
B,C,20
|
|
171
|
+
----
|
|
172
|
+
|
|
173
|
+
Creates three nodes (A, B, C) automatically without explicit declaration.
|
|
174
|
+
|
|
175
|
+
=== Layer-based layout
|
|
176
|
+
|
|
177
|
+
The layout algorithm automatically:
|
|
178
|
+
|
|
179
|
+
* Assigns nodes to layers (left to right)
|
|
180
|
+
* Positions nodes vertically to minimize crossing flows
|
|
181
|
+
* Calculates optimal spacing between nodes
|
|
182
|
+
* Balances node positions based on flow magnitudes
|
|
183
|
+
|
|
184
|
+
=== Source and sink detection
|
|
185
|
+
|
|
186
|
+
The renderer automatically identifies:
|
|
187
|
+
|
|
188
|
+
* **Source nodes**: Nodes with no incoming flows
|
|
189
|
+
* **Sink nodes**: Nodes with no outgoing flows
|
|
190
|
+
* **Intermediate nodes**: Nodes with both incoming and outgoing flows
|
|
191
|
+
|
|
192
|
+
== Best practices
|
|
193
|
+
|
|
194
|
+
=== Choose meaningful node IDs
|
|
195
|
+
|
|
196
|
+
Use descriptive node identifiers:
|
|
197
|
+
|
|
198
|
+
[source,mermaid]
|
|
199
|
+
----
|
|
200
|
+
%% Good
|
|
201
|
+
Solar,Battery,100
|
|
202
|
+
Battery,Home,80
|
|
203
|
+
|
|
204
|
+
%% Less clear
|
|
205
|
+
A,B,100
|
|
206
|
+
B,C,80
|
|
207
|
+
----
|
|
208
|
+
|
|
209
|
+
=== Balance your flows
|
|
210
|
+
|
|
211
|
+
For physically meaningful diagrams, ensure conservation of flow:
|
|
212
|
+
|
|
213
|
+
[source,mermaid]
|
|
214
|
+
----
|
|
215
|
+
%% Good - balanced flows
|
|
216
|
+
Input,Process,100
|
|
217
|
+
Process,Output,70
|
|
218
|
+
Process,Waste,30 %% 70 + 30 = 100
|
|
219
|
+
|
|
220
|
+
%% Unbalanced - may be intentional or an error
|
|
221
|
+
Input,Process,100
|
|
222
|
+
Process,Output,120 %% Where did extra 20 come from?
|
|
223
|
+
----
|
|
224
|
+
|
|
225
|
+
=== Use appropriate value scales
|
|
226
|
+
|
|
227
|
+
Choose flow values that represent the actual quantities:
|
|
228
|
+
|
|
229
|
+
* Energy: use Watts, kWh, etc.
|
|
230
|
+
* Materials: use tons, kg, liters, etc.
|
|
231
|
+
* Money: use currency amounts
|
|
232
|
+
* Data: use bytes, packets, etc.
|
|
233
|
+
|
|
234
|
+
=== Add labels for clarity
|
|
235
|
+
|
|
236
|
+
For complex diagrams, use node labels to make the visualization self-explanatory:
|
|
237
|
+
|
|
238
|
+
[source,mermaid]
|
|
239
|
+
----
|
|
240
|
+
sankey-beta
|
|
241
|
+
PV [Solar Panels]
|
|
242
|
+
Batt [Battery Storage]
|
|
243
|
+
Grid [Grid Connection]
|
|
244
|
+
Load [House Load]
|
|
245
|
+
|
|
246
|
+
PV,Batt,5
|
|
247
|
+
PV,Load,3
|
|
248
|
+
Batt,Load,2
|
|
249
|
+
Grid,Load,4
|
|
250
|
+
----
|
|
251
|
+
|
|
252
|
+
=== Limit complexity
|
|
253
|
+
|
|
254
|
+
For readability, keep diagrams focused:
|
|
255
|
+
|
|
256
|
+
* Limit to 10-15 nodes for clarity
|
|
257
|
+
* Avoid too many crossing flows
|
|
258
|
+
* Consider breaking complex systems into multiple diagrams
|
|
259
|
+
|
|
260
|
+
== Rendering behavior
|
|
261
|
+
|
|
262
|
+
=== Flow width calculation
|
|
263
|
+
|
|
264
|
+
Flow widths are calculated as:
|
|
265
|
+
|
|
266
|
+
* Proportional to the flow value
|
|
267
|
+
* Scaled between minimum and maximum widths
|
|
268
|
+
* The largest flow gets the maximum width
|
|
269
|
+
* The smallest flow gets the minimum width
|
|
270
|
+
|
|
271
|
+
=== Node positioning
|
|
272
|
+
|
|
273
|
+
Nodes are positioned using:
|
|
274
|
+
|
|
275
|
+
* **Layer assignment**: Topological sort from sources to sinks
|
|
276
|
+
* **Vertical positioning**: Based on total flow magnitudes
|
|
277
|
+
* **Width calculation**: Proportional to total throughput
|
|
278
|
+
|
|
279
|
+
=== Flow path rendering
|
|
280
|
+
|
|
281
|
+
Flows are rendered as:
|
|
282
|
+
|
|
283
|
+
* Bezier curves connecting nodes
|
|
284
|
+
* Gradient or solid colors
|
|
285
|
+
* Semi-transparent to show overlapping flows
|
|
286
|
+
* Optional value labels at midpoints
|
|
287
|
+
|
|
288
|
+
== Limitations
|
|
289
|
+
|
|
290
|
+
=== Currently not supported
|
|
291
|
+
|
|
292
|
+
The following features are not yet supported:
|
|
293
|
+
|
|
294
|
+
* Custom colors for specific flows or nodes
|
|
295
|
+
* Flow labels displayed on paths
|
|
296
|
+
* Interactive tooltips
|
|
297
|
+
* Animation of flows
|
|
298
|
+
* Curved or custom path routing
|
|
299
|
+
* Self-loops (flows from node to itself)
|
|
300
|
+
|
|
301
|
+
=== Known issues
|
|
302
|
+
|
|
303
|
+
* Very complex networks may have crossing flows
|
|
304
|
+
* Extremely small values may be difficult to see
|
|
305
|
+
* Node labels may overlap in dense diagrams
|
|
306
|
+
|
|
307
|
+
== Use cases
|
|
308
|
+
|
|
309
|
+
=== Energy systems
|
|
310
|
+
|
|
311
|
+
Visualizing energy production, conversion, and consumption:
|
|
312
|
+
|
|
313
|
+
[source,mermaid]
|
|
314
|
+
----
|
|
315
|
+
sankey-beta
|
|
316
|
+
Coal,Electricity,40
|
|
317
|
+
Gas,Electricity,30
|
|
318
|
+
Solar,Electricity,20
|
|
319
|
+
Wind,Electricity,10
|
|
320
|
+
Electricity,Residential,30
|
|
321
|
+
Electricity,Commercial,40
|
|
322
|
+
Electricity,Industrial,30
|
|
323
|
+
----
|
|
324
|
+
|
|
325
|
+
=== Material flows
|
|
326
|
+
|
|
327
|
+
Tracking materials through manufacturing:
|
|
328
|
+
|
|
329
|
+
[source,mermaid]
|
|
330
|
+
----
|
|
331
|
+
sankey-beta
|
|
332
|
+
RawMaterial,Processing,100
|
|
333
|
+
Processing,ProductA,60
|
|
334
|
+
Processing,ProductB,30
|
|
335
|
+
Processing,Waste,10
|
|
336
|
+
----
|
|
337
|
+
|
|
338
|
+
=== Website analytics
|
|
339
|
+
|
|
340
|
+
Showing user journey through a website:
|
|
341
|
+
|
|
342
|
+
[source,mermaid]
|
|
343
|
+
----
|
|
344
|
+
sankey-beta
|
|
345
|
+
Homepage,Products,500
|
|
346
|
+
Homepage,About,200
|
|
347
|
+
Products,Checkout,300
|
|
348
|
+
Products,Back,200
|
|
349
|
+
Checkout,Purchase,250
|
|
350
|
+
Checkout,Abandon,50
|
|
351
|
+
----
|
|
352
|
+
|
|
353
|
+
== Related documentation
|
|
354
|
+
|
|
355
|
+
* link:flowchart.adoc[Flowchart diagrams]
|
|
356
|
+
* link:timeline.adoc[Timeline diagrams]
|
|
357
|
+
* link:https://mermaid.js.org/syntax/sankey.html[Official Mermaid Sankey documentation]
|