mirror of
				https://github.com/mermaid-js/mermaid.git
				synced 2025-11-04 12:54:08 +01:00 
			
		
		
		
	Merge branch 'develop' into 6638-sequence-diagram-additional-messages
This commit is contained in:
		@@ -125,4 +125,43 @@ describe('flow db getData', () => {
 | 
			
		||||
    const { edges } = flowDb.getData();
 | 
			
		||||
    expect(edges[0].curve).toBe('basis');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should support modifying interpolate using edge id syntax', () => {
 | 
			
		||||
    flowDb.addVertex('A', { text: 'A', type: 'text' }, undefined, [], [], '', {}, undefined);
 | 
			
		||||
    flowDb.addVertex('B', { text: 'B', type: 'text' }, undefined, [], [], '', {}, undefined);
 | 
			
		||||
    flowDb.addVertex('C', { text: 'C', type: 'text' }, undefined, [], [], '', {}, undefined);
 | 
			
		||||
    flowDb.addVertex('D', { text: 'D', type: 'text' }, undefined, [], [], '', {}, undefined);
 | 
			
		||||
    flowDb.addLink(['A'], ['B'], {});
 | 
			
		||||
    flowDb.addLink(['A'], ['C'], { id: 'e2' });
 | 
			
		||||
    flowDb.addLink(['B'], ['D'], { id: 'e3' });
 | 
			
		||||
    flowDb.addLink(['C'], ['D'], {});
 | 
			
		||||
    flowDb.updateLinkInterpolate(['default'], 'stepBefore');
 | 
			
		||||
    flowDb.updateLinkInterpolate([0], 'basis');
 | 
			
		||||
    flowDb.addVertex(
 | 
			
		||||
      'e2',
 | 
			
		||||
      { text: 'Shouldnt be used', type: 'text' },
 | 
			
		||||
      undefined,
 | 
			
		||||
      [],
 | 
			
		||||
      [],
 | 
			
		||||
      '',
 | 
			
		||||
      {},
 | 
			
		||||
      ' curve: monotoneX '
 | 
			
		||||
    );
 | 
			
		||||
    flowDb.addVertex(
 | 
			
		||||
      'e3',
 | 
			
		||||
      { text: 'Shouldnt be used', type: 'text' },
 | 
			
		||||
      undefined,
 | 
			
		||||
      [],
 | 
			
		||||
      [],
 | 
			
		||||
      '',
 | 
			
		||||
      {},
 | 
			
		||||
      ' curve: catmullRom '
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    const { edges } = flowDb.getData();
 | 
			
		||||
    expect(edges[0].curve).toBe('basis');
 | 
			
		||||
    expect(edges[1].curve).toBe('monotoneX');
 | 
			
		||||
    expect(edges[2].curve).toBe('catmullRom');
 | 
			
		||||
    expect(edges[3].curve).toBe('stepBefore');
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -139,6 +139,9 @@ export class FlowDB implements DiagramDB {
 | 
			
		||||
      if (edgeDoc?.animation !== undefined) {
 | 
			
		||||
        edge.animation = edgeDoc.animation;
 | 
			
		||||
      }
 | 
			
		||||
      if (edgeDoc?.curve !== undefined) {
 | 
			
		||||
        edge.interpolate = edgeDoc.curve;
 | 
			
		||||
      }
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,59 @@ describe('[Lines] when parsing', () => {
 | 
			
		||||
    expect(edges[1].interpolate).toBe('cardinal');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should handle edge curve properties using edge ID', function () {
 | 
			
		||||
    const res = flow.parser.parse(
 | 
			
		||||
      'graph TD\n' +
 | 
			
		||||
        'A e1@-->B\n' +
 | 
			
		||||
        'A uniqueName@-->C\n' +
 | 
			
		||||
        'e1@{curve: basis}\n' +
 | 
			
		||||
        'uniqueName@{curve: cardinal}'
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    const vert = flow.parser.yy.getVertices();
 | 
			
		||||
    const edges = flow.parser.yy.getEdges();
 | 
			
		||||
 | 
			
		||||
    expect(edges[0].interpolate).toBe('basis');
 | 
			
		||||
    expect(edges[1].interpolate).toBe('cardinal');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should handle edge curve properties using edge ID but without overriding default', function () {
 | 
			
		||||
    const res = flow.parser.parse(
 | 
			
		||||
      'graph TD\n' +
 | 
			
		||||
        'A e1@-->B\n' +
 | 
			
		||||
        'A-->C\n' +
 | 
			
		||||
        'linkStyle default interpolate linear\n' +
 | 
			
		||||
        'e1@{curve: stepAfter}'
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    const vert = flow.parser.yy.getVertices();
 | 
			
		||||
    const edges = flow.parser.yy.getEdges();
 | 
			
		||||
 | 
			
		||||
    expect(edges[0].interpolate).toBe('stepAfter');
 | 
			
		||||
    expect(edges.defaultInterpolate).toBe('linear');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should handle edge curve properties using edge ID mixed with line interpolation', function () {
 | 
			
		||||
    const res = flow.parser.parse(
 | 
			
		||||
      'graph TD\n' +
 | 
			
		||||
        'A e1@-->B-->D\n' +
 | 
			
		||||
        'A-->C e4@-->D-->E\n' +
 | 
			
		||||
        'linkStyle default interpolate linear\n' +
 | 
			
		||||
        'linkStyle 1 interpolate basis\n' +
 | 
			
		||||
        'e1@{curve: monotoneX}\n' +
 | 
			
		||||
        'e4@{curve: stepBefore}'
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    const vert = flow.parser.yy.getVertices();
 | 
			
		||||
    const edges = flow.parser.yy.getEdges();
 | 
			
		||||
 | 
			
		||||
    expect(edges[0].interpolate).toBe('monotoneX');
 | 
			
		||||
    expect(edges[1].interpolate).toBe('basis');
 | 
			
		||||
    expect(edges.defaultInterpolate).toBe('linear');
 | 
			
		||||
    expect(edges[3].interpolate).toBe('stepBefore');
 | 
			
		||||
    expect(edges.defaultInterpolate).toBe('linear');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should handle line interpolation multi-numbered definitions', function () {
 | 
			
		||||
    const res = flow.parser.parse(
 | 
			
		||||
      'graph TD\n' + 'A-->B\n' + 'A-->C\n' + 'linkStyle 0,1 interpolate basis'
 | 
			
		||||
 
 | 
			
		||||
@@ -1135,15 +1135,46 @@ It is possible to style the type of curve used for lines between items, if the d
 | 
			
		||||
Available curve styles include `basis`, `bumpX`, `bumpY`, `cardinal`, `catmullRom`, `linear`, `monotoneX`, `monotoneY`,
 | 
			
		||||
`natural`, `step`, `stepAfter`, and `stepBefore`.
 | 
			
		||||
 | 
			
		||||
For a full list of available curves, including an explanation of custom curves, refer to
 | 
			
		||||
the [Shapes](https://d3js.org/d3-shape/curve) documentation in the [d3-shape](https://github.com/d3/d3-shape/) project.
 | 
			
		||||
 | 
			
		||||
Line styling can be achieved in two ways:
 | 
			
		||||
 | 
			
		||||
1. Change the curve style of all the lines
 | 
			
		||||
2. Change the curve style of a particular line
 | 
			
		||||
 | 
			
		||||
#### Diagram level curve style
 | 
			
		||||
 | 
			
		||||
In this example, a left-to-right graph uses the `stepBefore` curve style:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
%%{ init: { 'flowchart': { 'curve': 'stepBefore' } } }%%
 | 
			
		||||
---
 | 
			
		||||
config:
 | 
			
		||||
  flowchart:
 | 
			
		||||
    curve: stepBefore
 | 
			
		||||
---
 | 
			
		||||
graph LR
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
For a full list of available curves, including an explanation of custom curves, refer to
 | 
			
		||||
the [Shapes](https://d3js.org/d3-shape/curve) documentation in the [d3-shape](https://github.com/d3/d3-shape/) project.
 | 
			
		||||
#### Edge level curve style using Edge IDs (v<MERMAID_RELEASE_VERSION>+)
 | 
			
		||||
 | 
			
		||||
You can assign IDs to [edges](#attaching-an-id-to-edges). After assigning an ID you can modify the line style by modifying the edge's `curve` property using the following syntax:
 | 
			
		||||
 | 
			
		||||
```mermaid
 | 
			
		||||
flowchart LR
 | 
			
		||||
    A e1@==> B
 | 
			
		||||
    A e2@--> C
 | 
			
		||||
    e1@{ curve: linear }
 | 
			
		||||
    e2@{ curve: natural }
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```info
 | 
			
		||||
Any edge curve style modified at the edge level overrides the diagram level style.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```info
 | 
			
		||||
If the same edge is modified multiple times the last modification will be rendered.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Styling a node
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,19 @@ export interface NodeMetaData {
 | 
			
		||||
export interface EdgeMetaData {
 | 
			
		||||
  animation?: 'fast' | 'slow';
 | 
			
		||||
  animate?: boolean;
 | 
			
		||||
  curve?:
 | 
			
		||||
    | 'basis'
 | 
			
		||||
    | 'bumpX'
 | 
			
		||||
    | 'bumpY'
 | 
			
		||||
    | 'cardinal'
 | 
			
		||||
    | 'catmullRom'
 | 
			
		||||
    | 'linear'
 | 
			
		||||
    | 'monotoneX'
 | 
			
		||||
    | 'monotoneY'
 | 
			
		||||
    | 'natural'
 | 
			
		||||
    | 'step'
 | 
			
		||||
    | 'stepAfter'
 | 
			
		||||
    | 'stepBefore';
 | 
			
		||||
}
 | 
			
		||||
import type { MermaidConfig } from './config.type.js';
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user