namespace RackPeek.Domain.Graph; public record GraphNode( string Id, string Label, string Kind, string? Subtitle = null, IReadOnlyDictionary? Data = null); public record GraphEdge( string Source, string Target, string? Label, string Kind, IReadOnlyDictionary? Data = null); /// /// A labelled cluster of nodes. Used to drive Mermaid subgraph /// blocks. Groups may nest via . /// public record GraphGroup( string Id, string Label, IReadOnlyList NodeIds, string? ParentGroupId = null); public record Graph( IReadOnlyList Nodes, IReadOnlyList Edges, IReadOnlyList? Groups = null) { public static Graph Empty { get; } = new([], [], null); }