1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//! Foundation crate for rusty-mermaid: primitives, Scene, Theme, geometry, and text measurement.
//!
//! This crate defines the universal intermediate representation that all diagram
//! types produce and all rendering backends consume. The central type is [`Scene`],
//! a collection of [`Primitive`] drawing elements (rects, circles, paths, text, etc.)
//! that is completely backend-agnostic.
//!
//! # Key types
//!
//! - [`Scene`] / [`Primitive`] -- the contract between layout and rendering
//! - [`Theme`] / [`Style`] / [`TextStyle`] -- visual configuration
//! - [`Color`] / [`Point`] / [`BBox`] -- geometric primitives
//! - [`Shape`] -- node shape catalog (rect, diamond, circle, etc.)
//! - [`Direction`] -- layout flow direction (TB, BT, LR, RL)
//!
//! # Key traits
//!
//! - [`Renderer`] -- backends implement this to consume a [`Scene`]
//! - [`TextMeasure`] -- text dimension measurement for layout
//!
//! # Examples
//!
//! ```
//! use rusty_mermaid_core::{
//! Scene, Primitive, Style, Color, Point, BBox, TextStyle, TextAnchor,
//! };
//!
//! let mut scene = Scene::new(200.0, 100.0);
//!
//! // Add a filled rectangle
//! scene.push(Primitive::Rect {
//! bbox: BBox::new(100.0, 50.0, 120.0, 40.0),
//! rx: 4.0,
//! ry: 4.0,
//! style: Style {
//! fill: Some(Color::rgb(236, 236, 255)),
//! stroke: Some(Color::rgb(147, 112, 219)),
//! stroke_width: Some(2.0),
//! ..Style::default()
//! },
//! });
//!
//! // Add a text label
//! scene.push(Primitive::Text {
//! position: Point::new(100.0, 50.0),
//! content: "Hello".into(),
//! anchor: TextAnchor::Middle,
//! style: TextStyle::default(),
//! });
//!
//! assert_eq!(scene.len(), 2);
//! ```
pub use ;
pub use ;
pub use ;
pub use Renderer;
pub use ;
pub use Shape;
pub use ;
pub use ;
pub use ;