LovelyMermaid

CIElixirLicense: Apache-2.0Hex.pm

Elixir port of lovely-mermaid — render Mermaid diagrams as Unicode box-drawing art for terminals.

LovelyMermaid.render("flowchart LR\n A[Start] --> B[Done]")
# => %LovelyMermaid.Art{
# plain: ["┌───────┐ ┌──────┐", "│ Start ├───▶│ Done │", ...],
# styled: [...], width: 21, class_defs: %{}, warnings: []}

Installation

def deps do
[{:lovely_mermaid, "~> 0.1"}]
end

API

FunctionReturns
LovelyMermaid.render(src)%LovelyMermaid.Art{} or nil
LovelyMermaid.diagram_kind(src):flowchart | :state | :class | :er | :sequence | :pie | :mindmap | :timeline | :gitgraph | nil
LovelyMermaid.SourceBox.source_box(src, max_width \\ nil)%LovelyMermaid.Art{} — framed source lines, for when a diagram won't render
LovelyMermaid.Ansi.to_ansi(art, theme \\ Ansi.default_theme())[String.t()] — ANSI-coloured lines from art.styled
LovelyMermaid.ClassStyle.resolve_class_style(classes, class_defs)map() | nil — merged classDef style for a span

Each span in styled is a LovelyMermaid.Span%Span{text, role} with classes (author-assigned names from :::name / class A,B name) and href (a click/link target), both nil when the node had neither. to_ansi/2 styles classed spans from art.class_defs (best effort) and wraps linked spans in OSC 8 hyperlinks.

A YAML frontmatter title: is drawn centred above the art in the title role.

render/1 returns nil for blank input, syntax errors, unsupported kinds, and diagrams refused by layout caps. Flowcharts report dropped statements in warnings; the other grammars fail the whole diagram (with one retry dropping the final line, so streaming sources stay on screen).

Supported diagrams

graph/flowchart (including subgraph), stateDiagram, classDiagram, erDiagram, sequenceDiagram, pie, mindmap, timeline, gitGraph — mirroring lovely-mermaid. Flowchart nodes accept both the v1 shape brackets and the v2 id@{shape: …, label: …} syntax; state X { … } composites nest as frames with -- region dividers; diamond nodes draw as double-line boxes with mixed edge tees.

Porting notes

See PORTING.md for the module map against the TypeScript and Rust references.

License

Apache-2.0 (same as the original lovely-mermaid).