# types/diagram.types.ts

> 137 lines of code and 33 definitions.

Tree: GovLab Docs
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/docs#file-docs-types-diagram-types-ts
Source text: https://banes-lab.com/source/docs/types/diagram.types.ts.txt

Listed in [types](https://banes-lab.com/api/source/docs/types.md), after [types/code.types.ts](https://banes-lab.com/source/docs/types/code.types.ts.md) and before [types/document.output.types.ts](https://banes-lab.com/source/docs/types/document.output.types.ts.md).

## Definitions

- `NodeShape` (type_alias_declaration, line 1, exported)
- `EdgeWeight` (type_alias_declaration, line 2, exported)
- `GraphNode` (interface_declaration, line 4, exported)
- `GraphEdge` (interface_declaration, line 11, exported)
- `GraphSubgraph` (interface_declaration, line 18, exported)
- `ClassDef` (interface_declaration, line 24, exported)
- `AccessibleText` (interface_declaration, line 29, exported)
- `GraphModel` (interface_declaration, line 34, exported)
- `ModuleDep` (interface_declaration, line 43, exported)
- `MessageKind` (type_alias_declaration, line 48, exported)
- `SequenceParticipant` (interface_declaration, line 50, exported)
- `SequenceMessage` (interface_declaration, line 55, exported)
- `SequenceNote` (interface_declaration, line 62, exported)
- `SequenceStep` (interface_declaration, line 67, exported)
- `SequenceModel` (interface_declaration, line 72, exported)
- `ClassRelationKind` (type_alias_declaration, line 78, exported)
- `ClassMember` (interface_declaration, line 80, exported)
- `ClassBox` (interface_declaration, line 84, exported)
- `ClassRelation` (interface_declaration, line 90, exported)
- `ClassModel` (interface_declaration, line 97, exported)
- `StateNode` (interface_declaration, line 102, exported)
- `StateTransition` (interface_declaration, line 107, exported)
- `StateModel` (interface_declaration, line 113, exported)
- `MermaidBlock` (interface_declaration, line 119, exported)
- `MermaidHardeningCode` (type_alias_declaration, line 124, exported)
- `MermaidHardeningHit` (interface_declaration, line 132, exported)
- `MermaidParser` (type_alias_declaration, line 139, exported)
- `AvailableParser` (interface_declaration, line 142, exported)
- `ChartFinding` (interface_declaration, line 146, exported)
- `ChartReport` (interface_declaration, line 151, exported)
- `ChartChecker` (interface_declaration, line 157, exported)
- `NodeEntry` (type_alias_declaration, line 161, exported)
- `FlowchartSpec` (interface_declaration, line 163, exported)

## Contained in

- [types](https://banes-lab.com/anatomy/docs/folder-docs-types.md)

## Source

```typescript
export type NodeShape = "collaborator" | "decision" | "endpoint" | "rect" | "store";
export type EdgeWeight = "branch" | "call" | "dependency" | "hook" | "teardown";

export interface GraphNode {
    id: string;
    label: string;
    shape?: NodeShape;
    class?: string;
}

export interface GraphEdge {
    from: string;
    to: string;
    label?: string | undefined;
    weight?: EdgeWeight | undefined;
}

export interface GraphSubgraph {
    id: string;
    title: string;
    nodeIds: string[];
}

export interface ClassDef {
    name: string;
    stroke: string;
}

export interface AccessibleText {
    accTitle?: string;
    accDescr?: string;
}

export interface GraphModel extends AccessibleText {
    kind: "flowchart" | "graph";
    direction: "LR" | "TB" | "TD";
    nodes: GraphNode[];
    edges: GraphEdge[];
    subgraphs?: GraphSubgraph[];
    classDefs?: ClassDef[];
}

export interface ModuleDep {
    name: string;
    deps: string[];
}

export type MessageKind = "async" | "return" | "sync";

export interface SequenceParticipant {
    id: string;
    label: string;
}

export interface SequenceMessage {
    from: string;
    to: string;
    text: string;
    kind: MessageKind;
}

export interface SequenceNote {
    over: string[];
    text: string;
}

export interface SequenceStep {
    message?: SequenceMessage;
    note?: SequenceNote;
}

export interface SequenceModel extends AccessibleText {
    participants: SequenceParticipant[];
    steps: SequenceStep[];
    autonumber?: boolean;
}

export type ClassRelationKind = "aggregation" | "composition" | "dependency" | "realization";

export interface ClassMember {
    name: string;
}

export interface ClassBox {
    id: string;
    label: string;
    members: ClassMember[];
}

export interface ClassRelation {
    from: string;
    to: string;
    kind: ClassRelationKind;
    label?: string | undefined;
}

export interface ClassModel extends AccessibleText {
    classes: ClassBox[];
    relations: ClassRelation[];
}

export interface StateNode {
    id: string;
    label: string;
}

export interface StateTransition {
    from: string;
    to: string;
    label?: string | undefined;
}

export interface StateModel extends AccessibleText {
    initial?: string;
    nodes: StateNode[];
    transitions: StateTransition[];
}

export interface MermaidBlock {
    startLine: number;
    code: string;
}

export type MermaidHardeningCode =
    | "mermaid-html-break"
    | "mermaid-label-reserved"
    | "mermaid-non-ascii"
    | "mermaid-paren"
    | "mermaid-semicolon"
    | "mermaid-subgraph-direction";

export interface MermaidHardeningHit {
    code: MermaidHardeningCode;
    line: number;
    col: number;
    detail: string;
}

export type MermaidParser =
    { available: false; reason: string } | { available: true; parse: (code: string) => Promise<string | null> };

export interface AvailableParser {
    parse: (code: string) => Promise<string | null>;
}

export interface ChartFinding {
    line: number;
    message: string;
}

export interface ChartReport {
    available: boolean;
    findings: ChartFinding[];
    reason?: string;
}

export interface ChartChecker {
    check: (source: string) => Promise<ChartFinding[]>;
}

export type NodeEntry = [string, GraphNode];

export interface FlowchartSpec extends AccessibleText {
    direction: GraphModel["direction"];
    edges: GraphEdge[];
    nodeEntries: NodeEntry[];
    subgraphs?: GraphSubgraph[];
}
```
