# ConceptDiagram
Build concept diagrams as plain Elixir data, then render them to
[Mermaid](https://mermaid.js.org) or [Graphviz DOT](https://graphviz.org).
A concept diagram is a set of labelled nodes connected by labelled, directed
edges. Describe one with a small, pipeline-friendly API and turn it into diagram
source you can drop straight into Markdown (Mermaid) or render with Graphviz (DOT).
## Installation
Add `concept_diagram` to your deps in `mix.exs`:
```elixir
def deps do
[{:concept_diagram, "~> 0.1.0"}]
end
```
## Usage
```elixir
ConceptDiagram.new(direction: :left_right)
|> ConceptDiagram.add_edge("Survey data", "Themes", "coded into")
|> ConceptDiagram.add_edge("Themes", "Framework", "organised as")
|> ConceptDiagram.to_mermaid()
```
produces:
```mermaid
flowchart LR
n0["Survey data"]
n1["Themes"]
n2["Framework"]
n0 -->|coded into| n1
n1 -->|organised as| n2
```
Nodes referenced by an edge are created automatically. Render the same diagram as
Graphviz DOT with `ConceptDiagram.to_dot/1`, or build one from a list of triples:
```elixir
ConceptDiagram.from_triples([
{"Cause", "leads to", "Effect"},
{"Effect", "feeds back into", "Cause"}
])
|> ConceptDiagram.to_dot()
```
Labels are escaped for each target format, and `:direction` (`:top_down`,
`:bottom_up`, `:left_right`, `:right_left`) controls the layout.
## About
`ConceptDiagram` is maintained by the team behind
[Vizcept](https://vizcept.com), an AI concept diagram generator. If you would
rather describe a diagram in plain English and let AI lay it out, try the
[AI concept diagram generator](https://vizcept.com); this library is its
code-first companion for producing diagram source programmatically.
## License
Released under the MIT License.