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,85 @@
|
|
|
1
|
+
= Block Diagram Examples
|
|
2
|
+
|
|
3
|
+
== Purpose
|
|
4
|
+
|
|
5
|
+
Block diagrams provide a flexible way to visualize system components and their relationships using a column-based layout. They are ideal for showing architectural overviews, data flows, and component interactions with spatial organization.
|
|
6
|
+
|
|
7
|
+
== When to Use
|
|
8
|
+
|
|
9
|
+
* System architecture and component layout
|
|
10
|
+
* Data flow and pipeline visualization
|
|
11
|
+
* Infrastructure and deployment diagrams
|
|
12
|
+
* Microservices architecture overview
|
|
13
|
+
* Multi-tier application structure
|
|
14
|
+
|
|
15
|
+
== Syntax Overview
|
|
16
|
+
|
|
17
|
+
[source,mermaid]
|
|
18
|
+
----
|
|
19
|
+
block-beta
|
|
20
|
+
columns 3
|
|
21
|
+
|
|
22
|
+
Frontend["Frontend"]
|
|
23
|
+
Backend["Backend"]
|
|
24
|
+
Database["Database"]
|
|
25
|
+
|
|
26
|
+
Frontend --> Backend
|
|
27
|
+
Backend --> Database
|
|
28
|
+
----
|
|
29
|
+
|
|
30
|
+
**Layout**: `columns N` - Define column-based grid layout
|
|
31
|
+
|
|
32
|
+
**Block Types**:
|
|
33
|
+
- `Label["Text"]` - Basic block
|
|
34
|
+
- `Label(("Text"))` - Circle block
|
|
35
|
+
- `Label{{"Text"}}` - Hexagon block
|
|
36
|
+
- `Label[["Text"]]` - Subroutine block
|
|
37
|
+
- `space` - Empty cell
|
|
38
|
+
|
|
39
|
+
**Connections**:
|
|
40
|
+
- `-->` - Arrow connection between blocks
|
|
41
|
+
- Multi-line connections for complex flows
|
|
42
|
+
|
|
43
|
+
**Compound Blocks**: Group related blocks together
|
|
44
|
+
|
|
45
|
+
== Examples
|
|
46
|
+
|
|
47
|
+
=== 01: Basic Blocks
|
|
48
|
+
|
|
49
|
+
Demonstrates a simple architecture layout with frontend, backend, database, cache, and message queue components connected in a column-based grid.
|
|
50
|
+
|
|
51
|
+
**File**: link:01-basic-blocks.mmd[01-basic-blocks.mmd]
|
|
52
|
+
|
|
53
|
+
[source,mermaid]
|
|
54
|
+
----
|
|
55
|
+
include::01-basic-blocks.mmd[]
|
|
56
|
+
----
|
|
57
|
+
|
|
58
|
+
image::01-basic-blocks.svg[]
|
|
59
|
+
|
|
60
|
+
== Features Demonstrated
|
|
61
|
+
|
|
62
|
+
[%header,cols="1,1"]
|
|
63
|
+
|===
|
|
64
|
+
| Feature | Example
|
|
65
|
+
|
|
66
|
+
| Column-based layout
|
|
67
|
+
| 01
|
|
68
|
+
|
|
69
|
+
| Basic blocks
|
|
70
|
+
| 01
|
|
71
|
+
|
|
72
|
+
| Block connections
|
|
73
|
+
| 01
|
|
74
|
+
|
|
75
|
+
| Space elements
|
|
76
|
+
| 01
|
|
77
|
+
|
|
78
|
+
| Multi-component architecture
|
|
79
|
+
| 01
|
|
80
|
+
|===
|
|
81
|
+
|
|
82
|
+
== Additional Resources
|
|
83
|
+
|
|
84
|
+
* link:../../README.adoc[Main Documentation]
|
|
85
|
+
* https://mermaid.js.org/syntax/block.html[Mermaid Block Diagram Documentation]
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
C4Context
|
|
2
|
+
title System Context Diagram
|
|
3
|
+
Person(user, "User", "A system user")
|
|
4
|
+
System(webapp, "Web Application", "Main application")
|
|
5
|
+
System_Ext(email, "Email System", "Sends notifications")
|
|
6
|
+
SystemDb(db, "Database", "Stores user data")
|
|
7
|
+
|
|
8
|
+
Rel(user, webapp, "Uses")
|
|
9
|
+
Rel(webapp, email, "Sends emails")
|
|
10
|
+
Rel(webapp, db, "Reads/Writes")
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
width="790.0"
|
|
3
|
+
height="450.0"
|
|
4
|
+
viewBox="0 0 790 450"
|
|
5
|
+
version="1.2"
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
>
|
|
8
|
+
<g id="rel_0">
|
|
9
|
+
<line stroke="#707070" stroke-width="2" x1="120.0" y1="140.0" x2="372.0" y2="110.0"/>
|
|
10
|
+
<polygon fill="#707070" stroke="#707070" points="380,110 372,106 372,114"/>
|
|
11
|
+
<text fill="#000000" x="250.0" y="110.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Uses</text>
|
|
12
|
+
</g>
|
|
13
|
+
<g id="rel_1">
|
|
14
|
+
<line stroke="#707070" stroke-width="2" x1="380.0" y1="110.0" x2="622.0" y2="110.0"/>
|
|
15
|
+
<polygon fill="#707070" stroke="#707070" points="630,110 622,106 622,114"/>
|
|
16
|
+
<text fill="#000000" x="505.0" y="95.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Sends emails</text>
|
|
17
|
+
</g>
|
|
18
|
+
<g id="rel_2">
|
|
19
|
+
<line stroke="#707070" stroke-width="2" x1="380.0" y1="110.0" x2="122.0" y2="310.0"/>
|
|
20
|
+
<polygon fill="#707070" stroke="#707070" points="130,310 138,306 138,314"/>
|
|
21
|
+
<text fill="#000000" x="255.0" y="195.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Reads/Writes</text>
|
|
22
|
+
</g>
|
|
23
|
+
<g id="element-user">
|
|
24
|
+
<rect fill="#08427B" stroke="#073B6F" stroke-width="2" x="50.0" y="50.0" width="140.0" height="180.0" rx="10.0" ry="10.0"/>
|
|
25
|
+
<circle fill="#FFFFFF" cx="120.0" cy="80.0" r="16.0"/>
|
|
26
|
+
<ellipse fill="#FFFFFF"/>
|
|
27
|
+
<text fill="#FFFFFF" x="120.0" y="145.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">User</text>
|
|
28
|
+
<text fill="#FFFFFF" x="120.0" y="161.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">A system user</text>
|
|
29
|
+
</g>
|
|
30
|
+
<g id="element-webapp">
|
|
31
|
+
<rect fill="#1168BD" stroke="#0B4884" stroke-width="2" x="300.0" y="50.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
|
|
32
|
+
<text fill="#FFFFFF" x="380.0" y="70.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Web Application</text>
|
|
33
|
+
<text fill="#FFFFFF" x="380.0" y="86.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Main application</text>
|
|
34
|
+
</g>
|
|
35
|
+
<g id="element-email">
|
|
36
|
+
<rect fill="#1168BD" stroke="#0B4884" stroke-width="2" x="550.0" y="50.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
|
|
37
|
+
<text fill="#FFFFFF" x="630.0" y="70.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Email System</text>
|
|
38
|
+
<text fill="#FFFFFF" x="630.0" y="86.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Sends notifications</text>
|
|
39
|
+
</g>
|
|
40
|
+
<g id="element-db">
|
|
41
|
+
<rect fill="#1168BD" stroke="#0B4884" stroke-width="2" x="50.0" y="250.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
|
|
42
|
+
<text fill="#FFFFFF" x="130.0" y="270.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Database</text>
|
|
43
|
+
<text fill="#FFFFFF" x="130.0" y="286.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Stores user data</text>
|
|
44
|
+
</g>
|
|
45
|
+
</svg>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
C4Container
|
|
2
|
+
title Container Diagram - E-commerce System
|
|
3
|
+
|
|
4
|
+
Person(customer, "Customer", "Online shopper")
|
|
5
|
+
|
|
6
|
+
System_Boundary(ecommerce, "E-commerce System") {
|
|
7
|
+
Container(webapp, "Web Application", "React", "Provides UI")
|
|
8
|
+
Container(api, "API Gateway", "Node.js", "Routes requests")
|
|
9
|
+
Container(order, "Order Service", "Java", "Handles orders")
|
|
10
|
+
Container(payment, "Payment Service", "Python", "Processes payments")
|
|
11
|
+
ContainerDb(db, "Database", "PostgreSQL", "Stores data")
|
|
12
|
+
Container(cache, "Cache", "Redis", "Session storage")
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
System_Ext(paymentGW, "Payment Gateway", "External payment processor")
|
|
16
|
+
|
|
17
|
+
Rel(customer, webapp, "Uses", "HTTPS")
|
|
18
|
+
Rel(webapp, api, "Calls", "REST/JSON")
|
|
19
|
+
Rel(api, order, "Routes to")
|
|
20
|
+
Rel(api, payment, "Routes to")
|
|
21
|
+
Rel(order, db, "Reads/Writes", "SQL")
|
|
22
|
+
Rel(payment, db, "Reads/Writes", "SQL")
|
|
23
|
+
Rel(webapp, cache, "Stores sessions")
|
|
24
|
+
Rel(payment, paymentGW, "Processes via", "HTTPS")
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
width="930.0"
|
|
3
|
+
height="660.0"
|
|
4
|
+
viewBox="0 0 930 660"
|
|
5
|
+
version="1.2"
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
>
|
|
8
|
+
<g id="boundary-ecommerce">
|
|
9
|
+
<rect fill="#FFFFFF" stroke="#9BA7B4" stroke-width="2" x="50.0" y="50.0" width="800.0" height="530.0" rx="8.0" ry="8.0" stroke-dasharray="10,5"/>
|
|
10
|
+
<text fill="#000000" x="60.0" y="70.0" font-family="Arial, sans-serif" font-size="16" font-weight="bold">E-commerce System</text>
|
|
11
|
+
</g>
|
|
12
|
+
<g id="rel_0">
|
|
13
|
+
<line stroke="#707070" stroke-width="2" x1="370.0" y1="140.0" x2="122.0" y2="110.0"/>
|
|
14
|
+
<polygon fill="#707070" stroke="#707070" points="130,110 138,106 138,114"/>
|
|
15
|
+
<text fill="#000000" x="250.0" y="110.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Uses</text>
|
|
16
|
+
<text fill="#000000" x="250.0" y="124.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10">[HTTPS]</text>
|
|
17
|
+
</g>
|
|
18
|
+
<g id="rel_1">
|
|
19
|
+
<line stroke="#707070" stroke-width="2" x1="130.0" y1="110.0" x2="372.0" y2="110.0"/>
|
|
20
|
+
<polygon fill="#707070" stroke="#707070" points="380,110 372,106 372,114"/>
|
|
21
|
+
<text fill="#000000" x="255.0" y="95.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Calls</text>
|
|
22
|
+
<text fill="#000000" x="255.0" y="109.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10">[REST/JSON]</text>
|
|
23
|
+
</g>
|
|
24
|
+
<g id="rel_2">
|
|
25
|
+
<line stroke="#707070" stroke-width="2" x1="380.0" y1="110.0" x2="622.0" y2="110.0"/>
|
|
26
|
+
<polygon fill="#707070" stroke="#707070" points="630,110 622,106 622,114"/>
|
|
27
|
+
<text fill="#000000" x="505.0" y="95.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Routes to</text>
|
|
28
|
+
</g>
|
|
29
|
+
<g id="rel_3">
|
|
30
|
+
<line stroke="#707070" stroke-width="2" x1="380.0" y1="110.0" x2="122.0" y2="310.0"/>
|
|
31
|
+
<polygon fill="#707070" stroke="#707070" points="130,310 138,306 138,314"/>
|
|
32
|
+
<text fill="#000000" x="255.0" y="195.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Routes to</text>
|
|
33
|
+
</g>
|
|
34
|
+
<g id="rel_4">
|
|
35
|
+
<line stroke="#707070" stroke-width="2" x1="630.0" y1="110.0" x2="372.0" y2="310.0"/>
|
|
36
|
+
<polygon fill="#707070" stroke="#707070" points="380,310 388,306 388,314"/>
|
|
37
|
+
<text fill="#000000" x="505.0" y="195.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Reads/Writes</text>
|
|
38
|
+
<text fill="#000000" x="505.0" y="209.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10">[SQL]</text>
|
|
39
|
+
</g>
|
|
40
|
+
<g id="rel_5">
|
|
41
|
+
<line stroke="#707070" stroke-width="2" x1="130.0" y1="310.0" x2="372.0" y2="310.0"/>
|
|
42
|
+
<polygon fill="#707070" stroke="#707070" points="380,310 372,306 372,314"/>
|
|
43
|
+
<text fill="#000000" x="255.0" y="295.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Reads/Writes</text>
|
|
44
|
+
<text fill="#000000" x="255.0" y="309.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10">[SQL]</text>
|
|
45
|
+
</g>
|
|
46
|
+
<g id="rel_6">
|
|
47
|
+
<line stroke="#707070" stroke-width="2" x1="130.0" y1="110.0" x2="622.0" y2="310.0"/>
|
|
48
|
+
<polygon fill="#707070" stroke="#707070" points="630,310 622,306 622,314"/>
|
|
49
|
+
<text fill="#000000" x="380.0" y="195.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Stores sessions</text>
|
|
50
|
+
</g>
|
|
51
|
+
<g id="rel_7">
|
|
52
|
+
<line stroke="#707070" stroke-width="2" x1="130.0" y1="310.0" x2="622.0" y2="110.0"/>
|
|
53
|
+
<polygon fill="#707070" stroke="#707070" points="630,110 622,106 622,114"/>
|
|
54
|
+
<text fill="#000000" x="380.0" y="195.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="12">Processes via</text>
|
|
55
|
+
<text fill="#000000" x="380.0" y="209.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10">[HTTPS]</text>
|
|
56
|
+
</g>
|
|
57
|
+
<g id="element-webapp">
|
|
58
|
+
<rect fill="#438DD5" stroke="#2E6295" stroke-width="2" x="50.0" y="50.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
|
|
59
|
+
<text fill="#FFFFFF" x="130.0" y="70.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Web Application</text>
|
|
60
|
+
<text fill="#FFFFFF" x="130.0" y="86.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">React</text>
|
|
61
|
+
<text fill="#FFFFFF" x="130.0" y="102.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="normal" font-style="italic">[Provides UI]</text>
|
|
62
|
+
</g>
|
|
63
|
+
<g id="element-api">
|
|
64
|
+
<rect fill="#438DD5" stroke="#2E6295" stroke-width="2" x="300.0" y="50.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
|
|
65
|
+
<text fill="#FFFFFF" x="380.0" y="70.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">API Gateway</text>
|
|
66
|
+
<text fill="#FFFFFF" x="380.0" y="86.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Node.js</text>
|
|
67
|
+
<text fill="#FFFFFF" x="380.0" y="102.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="normal" font-style="italic">[Routes requests]</text>
|
|
68
|
+
</g>
|
|
69
|
+
<g id="element-order">
|
|
70
|
+
<rect fill="#438DD5" stroke="#2E6295" stroke-width="2" x="550.0" y="50.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
|
|
71
|
+
<text fill="#FFFFFF" x="630.0" y="70.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Order Service</text>
|
|
72
|
+
<text fill="#FFFFFF" x="630.0" y="86.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Java</text>
|
|
73
|
+
<text fill="#FFFFFF" x="630.0" y="102.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="normal" font-style="italic">[Handles orders]</text>
|
|
74
|
+
</g>
|
|
75
|
+
<g id="element-payment">
|
|
76
|
+
<rect fill="#438DD5" stroke="#2E6295" stroke-width="2" x="50.0" y="250.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
|
|
77
|
+
<text fill="#FFFFFF" x="130.0" y="270.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Payment Service</text>
|
|
78
|
+
<text fill="#FFFFFF" x="130.0" y="286.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Python</text>
|
|
79
|
+
<text fill="#FFFFFF" x="130.0" y="302.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="normal" font-style="italic">[Processes payments]</text>
|
|
80
|
+
</g>
|
|
81
|
+
<g id="element-db">
|
|
82
|
+
<rect fill="#438DD5" stroke="#2E6295" stroke-width="2" x="300.0" y="250.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
|
|
83
|
+
<text fill="#FFFFFF" x="380.0" y="270.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Database</text>
|
|
84
|
+
<text fill="#FFFFFF" x="380.0" y="286.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">PostgreSQL</text>
|
|
85
|
+
<text fill="#FFFFFF" x="380.0" y="302.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="normal" font-style="italic">[Stores data]</text>
|
|
86
|
+
</g>
|
|
87
|
+
<g id="element-cache">
|
|
88
|
+
<rect fill="#438DD5" stroke="#2E6295" stroke-width="2" x="550.0" y="250.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
|
|
89
|
+
<text fill="#FFFFFF" x="630.0" y="270.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Cache</text>
|
|
90
|
+
<text fill="#FFFFFF" x="630.0" y="286.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Redis</text>
|
|
91
|
+
<text fill="#FFFFFF" x="630.0" y="302.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="10" font-weight="normal" font-style="italic">[Session storage]</text>
|
|
92
|
+
</g>
|
|
93
|
+
<g id="element-customer">
|
|
94
|
+
<rect fill="#08427B" stroke="#073B6F" stroke-width="2" x="300.0" y="50.0" width="140.0" height="180.0" rx="10.0" ry="10.0"/>
|
|
95
|
+
<circle fill="#FFFFFF" cx="370.0" cy="80.0" r="16.0"/>
|
|
96
|
+
<ellipse fill="#FFFFFF"/>
|
|
97
|
+
<text fill="#FFFFFF" x="370.0" y="145.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Customer</text>
|
|
98
|
+
<text fill="#FFFFFF" x="370.0" y="161.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">Online shopper</text>
|
|
99
|
+
</g>
|
|
100
|
+
<g id="element-paymentGW">
|
|
101
|
+
<rect fill="#8F8F8F" stroke="#6B6B6B" stroke-width="2" x="550.0" y="50.0" width="160.0" height="120.0" rx="5.0" ry="5.0"/>
|
|
102
|
+
<text fill="#FFFFFF" x="630.0" y="70.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="14" font-weight="bold" font-style="normal">Payment Gateway</text>
|
|
103
|
+
<text fill="#FFFFFF" x="630.0" y="86.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11" font-weight="normal" font-style="normal">External payment processor</text>
|
|
104
|
+
</g>
|
|
105
|
+
</svg>
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
= C4 Diagram Examples
|
|
2
|
+
|
|
3
|
+
== Purpose
|
|
4
|
+
|
|
5
|
+
C4 diagrams provide a hierarchical approach to software architecture visualization through four levels: Context, Container, Component, and Code. They help communicate system architecture to different audiences with varying levels of technical detail.
|
|
6
|
+
|
|
7
|
+
== When to Use
|
|
8
|
+
|
|
9
|
+
* Software system architecture documentation
|
|
10
|
+
* Microservices and distributed system design
|
|
11
|
+
* System context and external dependencies
|
|
12
|
+
* Container-level deployment architecture
|
|
13
|
+
* Component-level internal structure
|
|
14
|
+
|
|
15
|
+
== Syntax Overview
|
|
16
|
+
|
|
17
|
+
[source,mermaid]
|
|
18
|
+
----
|
|
19
|
+
C4Context
|
|
20
|
+
title System Context
|
|
21
|
+
|
|
22
|
+
Person(user, "User", "System user")
|
|
23
|
+
System(app, "Application", "Main system")
|
|
24
|
+
System_Ext(ext, "External", "External system")
|
|
25
|
+
|
|
26
|
+
Rel(user, app, "Uses")
|
|
27
|
+
Rel(app, ext, "Calls")
|
|
28
|
+
----
|
|
29
|
+
|
|
30
|
+
**Element Types**:
|
|
31
|
+
- `Person(id, label, descr)` - User/actor
|
|
32
|
+
- `System(id, label, descr)` - Internal system
|
|
33
|
+
- `System_Ext(id, label, descr)` - External system
|
|
34
|
+
- `SystemDb(id, label, descr)` - Database
|
|
35
|
+
- `Container(id, label, tech, descr)` - Container
|
|
36
|
+
- `Component(id, label, tech, descr)` - Component
|
|
37
|
+
|
|
38
|
+
**Relationships**:
|
|
39
|
+
- `Rel(from, to, label)` - Basic relationship
|
|
40
|
+
- `Rel(from, to, label, tech)` - With technology
|
|
41
|
+
- `BiRel()` - Bidirectional relationship
|
|
42
|
+
|
|
43
|
+
**Boundaries**:
|
|
44
|
+
- `Boundary(id, label)` - Group elements
|
|
45
|
+
- `System_Boundary()` - System boundary
|
|
46
|
+
- `Enterprise_Boundary()` - Enterprise boundary
|
|
47
|
+
|
|
48
|
+
== Examples
|
|
49
|
+
|
|
50
|
+
=== 01: Context Diagram
|
|
51
|
+
|
|
52
|
+
Demonstrates a system context view showing users, the main application, and external dependencies with their relationships.
|
|
53
|
+
|
|
54
|
+
**File**: link:01-context-diagram.mmd[01-context-diagram.mmd]
|
|
55
|
+
|
|
56
|
+
[source,mermaid]
|
|
57
|
+
----
|
|
58
|
+
include::01-context-diagram.mmd[]
|
|
59
|
+
----
|
|
60
|
+
|
|
61
|
+
image::01-context-diagram.svg[]
|
|
62
|
+
|
|
63
|
+
== Features Demonstrated
|
|
64
|
+
|
|
65
|
+
[%header,cols="1,1"]
|
|
66
|
+
|===
|
|
67
|
+
| Feature | Example
|
|
68
|
+
|
|
69
|
+
| Person/User definition
|
|
70
|
+
| 01
|
|
71
|
+
|
|
72
|
+
| System definition
|
|
73
|
+
| 01
|
|
74
|
+
|
|
75
|
+
| External systems
|
|
76
|
+
| 01
|
|
77
|
+
|
|
78
|
+
| Database systems
|
|
79
|
+
| 01
|
|
80
|
+
|
|
81
|
+
| Basic relationships
|
|
82
|
+
| 01
|
|
83
|
+
|
|
84
|
+
| Diagram titles
|
|
85
|
+
| 01
|
|
86
|
+
|===
|
|
87
|
+
|
|
88
|
+
== Additional Resources
|
|
89
|
+
|
|
90
|
+
* link:../../README.adoc[Main Documentation]
|
|
91
|
+
* https://c4model.com/[C4 Model Official Site]
|
|
92
|
+
* https://mermaid.js.org/syntax/c4.html[Mermaid C4 Diagram Documentation]
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
classDiagram
|
|
2
|
+
class Animal {
|
|
3
|
+
+String name
|
|
4
|
+
+int age
|
|
5
|
+
+String species
|
|
6
|
+
+makeSound() void
|
|
7
|
+
+eat(food Food) void
|
|
8
|
+
+sleep() void
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
class Mammal {
|
|
12
|
+
+String furColor
|
|
13
|
+
+bool warmBlooded
|
|
14
|
+
+giveBirth() void
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
class Bird {
|
|
18
|
+
+bool canFly
|
|
19
|
+
+String featherColor
|
|
20
|
+
+layEggs() void
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
class Dog {
|
|
24
|
+
+String breed
|
|
25
|
+
+bark() void
|
|
26
|
+
+fetch(item Item) void
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
class Cat {
|
|
30
|
+
+bool indoor
|
|
31
|
+
+int lives
|
|
32
|
+
+meow() void
|
|
33
|
+
+purr() void
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
class Eagle {
|
|
37
|
+
+float wingSpan
|
|
38
|
+
+hunt() void
|
|
39
|
+
+soar() void
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
class Penguin {
|
|
43
|
+
+swim() void
|
|
44
|
+
+slide() void
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
Animal <|-- Mammal
|
|
48
|
+
Animal <|-- Bird
|
|
49
|
+
Mammal <|-- Dog
|
|
50
|
+
Mammal <|-- Cat
|
|
51
|
+
Bird <|-- Eagle
|
|
52
|
+
Bird <|-- Penguin
|
|
53
|
+
|
|
54
|
+
class Owner {
|
|
55
|
+
+String name
|
|
56
|
+
+String address
|
|
57
|
+
+List~Animal~ pets
|
|
58
|
+
+adoptPet(pet Animal) void
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
Owner "1" --> "*" Animal : owns
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg
|
|
3
|
+
width="247.0"
|
|
4
|
+
height="244.0"
|
|
5
|
+
viewBox="0 0 247.0 244"
|
|
6
|
+
version="1.2"
|
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
8
|
+
>
|
|
9
|
+
<g id="defs"/>
|
|
10
|
+
<g id="rel-Mammal_to_Animal">
|
|
11
|
+
<line stroke="#000000" stroke-width="2"/>
|
|
12
|
+
<polygon fill="#000000" stroke="#000000" stroke-width="2" points="70,0 65.0,8.660254037844387 75.0,8.660254037844387"/>
|
|
13
|
+
</g>
|
|
14
|
+
<g id="rel-Bird_to_Animal">
|
|
15
|
+
<line stroke="#000000" stroke-width="2"/>
|
|
16
|
+
<polygon fill="#000000" stroke="#000000" stroke-width="2" points="70,0 65.0,8.660254037844387 75.0,8.660254037844387"/>
|
|
17
|
+
</g>
|
|
18
|
+
<g id="rel-Dog_to_Mammal">
|
|
19
|
+
<line stroke="#000000" stroke-width="2"/>
|
|
20
|
+
<polygon fill="#000000" stroke="#000000" stroke-width="2" points="70,52 61.33974596215561,47.0 61.33974596215561,57.0"/>
|
|
21
|
+
</g>
|
|
22
|
+
<g id="rel-Cat_to_Mammal">
|
|
23
|
+
<line stroke="#000000" stroke-width="2"/>
|
|
24
|
+
<polygon fill="#000000" stroke="#000000" stroke-width="2" points="70,104 75.0,95.33974596215562 65.0,95.33974596215562"/>
|
|
25
|
+
</g>
|
|
26
|
+
<g id="rel-Eagle_to_Bird">
|
|
27
|
+
<line stroke="#000000" stroke-width="2"/>
|
|
28
|
+
<polygon fill="#000000" stroke="#000000" stroke-width="2" points="70,52 61.33974596215561,47.0 61.33974596215561,57.0"/>
|
|
29
|
+
</g>
|
|
30
|
+
<g id="rel-Penguin_to_Bird">
|
|
31
|
+
<line stroke="#000000" stroke-width="2"/>
|
|
32
|
+
<polygon fill="#000000" stroke="#000000" stroke-width="2" points="70,0 65.0,8.660254037844387 75.0,8.660254037844387"/>
|
|
33
|
+
</g>
|
|
34
|
+
<g id="rel-Owner_to_Animal">
|
|
35
|
+
<line stroke="#000000" stroke-width="2"/>
|
|
36
|
+
<text fill="#000000" x="70.0" y="77.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="11">owns</text>
|
|
37
|
+
<text fill="#000000" x="5.0" y="77.0" font-family="Arial, sans-serif" font-size="10">1</text>
|
|
38
|
+
<text fill="#000000" x="135.0" y="77.0" text-anchor="end" font-family="Arial, sans-serif" font-size="10">*</text>
|
|
39
|
+
</g>
|
|
40
|
+
<g id="class-Animal">
|
|
41
|
+
<rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="164.0" rx="3.0" ry="3.0"/>
|
|
42
|
+
<text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Animal</text>
|
|
43
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
44
|
+
<text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ String</text>
|
|
45
|
+
<text fill="#000000" x="10.0" y="61.0" font-family="monospace" font-size="12">+ int</text>
|
|
46
|
+
<text fill="#000000" x="10.0" y="79.0" font-family="monospace" font-size="12">+ String</text>
|
|
47
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
48
|
+
<text fill="#000000" x="10.0" y="112.0" font-family="monospace" font-size="12">+ makeSound()</text>
|
|
49
|
+
<text fill="#000000" x="10.0" y="130.0" font-family="monospace" font-size="12">+ eat(foodFood)</text>
|
|
50
|
+
<text fill="#000000" x="10.0" y="148.0" font-family="monospace" font-size="12">+ sleep()</text>
|
|
51
|
+
</g>
|
|
52
|
+
<g id="class-Mammal">
|
|
53
|
+
<rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="104.0" rx="3.0" ry="3.0"/>
|
|
54
|
+
<text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Mammal</text>
|
|
55
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
56
|
+
<text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ String</text>
|
|
57
|
+
<text fill="#000000" x="10.0" y="61.0" font-family="monospace" font-size="12">+ bool</text>
|
|
58
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
59
|
+
<text fill="#000000" x="10.0" y="94.0" font-family="monospace" font-size="12">+ giveBirth()</text>
|
|
60
|
+
</g>
|
|
61
|
+
<g id="class-Bird">
|
|
62
|
+
<rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="104.0" rx="3.0" ry="3.0"/>
|
|
63
|
+
<text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Bird</text>
|
|
64
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
65
|
+
<text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ bool</text>
|
|
66
|
+
<text fill="#000000" x="10.0" y="61.0" font-family="monospace" font-size="12">+ String</text>
|
|
67
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
68
|
+
<text fill="#000000" x="10.0" y="94.0" font-family="monospace" font-size="12">+ layEggs()</text>
|
|
69
|
+
</g>
|
|
70
|
+
<g id="class-Dog">
|
|
71
|
+
<rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="104.0" rx="3.0" ry="3.0"/>
|
|
72
|
+
<text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Dog</text>
|
|
73
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
74
|
+
<text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ String</text>
|
|
75
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
76
|
+
<text fill="#000000" x="10.0" y="76.0" font-family="monospace" font-size="12">+ bark()</text>
|
|
77
|
+
<text fill="#000000" x="10.0" y="94.0" font-family="monospace" font-size="12">+ fetch(itemItem)</text>
|
|
78
|
+
</g>
|
|
79
|
+
<g id="class-Cat">
|
|
80
|
+
<rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="124.0" rx="3.0" ry="3.0"/>
|
|
81
|
+
<text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Cat</text>
|
|
82
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
83
|
+
<text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ bool</text>
|
|
84
|
+
<text fill="#000000" x="10.0" y="61.0" font-family="monospace" font-size="12">+ int</text>
|
|
85
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
86
|
+
<text fill="#000000" x="10.0" y="94.0" font-family="monospace" font-size="12">+ meow()</text>
|
|
87
|
+
<text fill="#000000" x="10.0" y="112.0" font-family="monospace" font-size="12">+ purr()</text>
|
|
88
|
+
</g>
|
|
89
|
+
<g id="class-Eagle">
|
|
90
|
+
<rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="104.0" rx="3.0" ry="3.0"/>
|
|
91
|
+
<text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Eagle</text>
|
|
92
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
93
|
+
<text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ float</text>
|
|
94
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
95
|
+
<text fill="#000000" x="10.0" y="76.0" font-family="monospace" font-size="12">+ hunt()</text>
|
|
96
|
+
<text fill="#000000" x="10.0" y="94.0" font-family="monospace" font-size="12">+ soar()</text>
|
|
97
|
+
</g>
|
|
98
|
+
<g id="class-Penguin">
|
|
99
|
+
<rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="140.0" height="82.0" rx="3.0" ry="3.0"/>
|
|
100
|
+
<text fill="#000000" x="70.0" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Penguin</text>
|
|
101
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
102
|
+
<text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ swim()</text>
|
|
103
|
+
<text fill="#000000" x="10.0" y="61.0" font-family="monospace" font-size="12">+ slide()</text>
|
|
104
|
+
</g>
|
|
105
|
+
<g id="class-Owner">
|
|
106
|
+
<rect fill="#ffffff" stroke="#000000" stroke-width="2" x="0.0" y="0.0" width="167.0" height="164.0" rx="3.0" ry="3.0"/>
|
|
107
|
+
<text fill="#000000" x="83.5" y="10.0" text-anchor="middle" font-family="Arial, sans-serif" font-size="16" font-weight="bold">Owner</text>
|
|
108
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
109
|
+
<text fill="#000000" x="10.0" y="43.0" font-family="monospace" font-size="12">+ String</text>
|
|
110
|
+
<text fill="#000000" x="10.0" y="61.0" font-family="monospace" font-size="12">+ String</text>
|
|
111
|
+
<text fill="#000000" x="10.0" y="79.0" font-family="monospace" font-size="12">+ List</text>
|
|
112
|
+
<text fill="#000000" x="10.0" y="97.0" font-family="monospace" font-size="12">~ Animal</text>
|
|
113
|
+
<text fill="#000000" x="10.0" y="115.0" font-family="monospace" font-size="12">~ pets</text>
|
|
114
|
+
<line stroke="#000000" stroke-width="1"/>
|
|
115
|
+
<text fill="#000000" x="10.0" y="148.0" font-family="monospace" font-size="12">+ adoptPet(petAnimal)</text>
|
|
116
|
+
</g>
|
|
117
|
+
</svg>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
classDiagram
|
|
2
|
+
class Animal {
|
|
3
|
+
+String name
|
|
4
|
+
+int age
|
|
5
|
+
+String species
|
|
6
|
+
+makeSound() void
|
|
7
|
+
+eat(food Food) void
|
|
8
|
+
+sleep() void
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
class Mammal {
|
|
12
|
+
+String furColor
|
|
13
|
+
+bool warmBlooded
|
|
14
|
+
+giveBirth() void
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
class Bird {
|
|
18
|
+
+bool canFly
|
|
19
|
+
+String featherColor
|
|
20
|
+
+layEggs() void
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
class Dog {
|
|
24
|
+
+String breed
|
|
25
|
+
+bark() void
|
|
26
|
+
+fetch(item Item) void
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
class Cat {
|
|
30
|
+
+bool indoor
|
|
31
|
+
+int lives
|
|
32
|
+
+meow() void
|
|
33
|
+
+purr() void
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
class Eagle {
|
|
37
|
+
+float wingSpan
|
|
38
|
+
+hunt() void
|
|
39
|
+
+soar() void
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
class Penguin {
|
|
43
|
+
+swim() void
|
|
44
|
+
+slide() void
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
Animal <|-- Mammal
|
|
48
|
+
Animal <|-- Bird
|
|
49
|
+
Mammal <|-- Dog
|
|
50
|
+
Mammal <|-- Cat
|
|
51
|
+
Bird <|-- Eagle
|
|
52
|
+
Bird <|-- Penguin
|
|
53
|
+
|
|
54
|
+
class Owner {
|
|
55
|
+
+String name
|
|
56
|
+
+String address
|
|
57
|
+
+List~Animal~ pets
|
|
58
|
+
+adoptPet(pet Animal) void
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
Owner "1" --> "*" Animal : owns
|