mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-04 16:16:41 +02:00
Fix for state diagram curve
This commit is contained in:
@@ -757,6 +757,11 @@ export interface StateDiagramConfig extends BaseDiagramConfig {
|
|||||||
edgeLengthFactor?: string;
|
edgeLengthFactor?: string;
|
||||||
compositTitleSize?: number;
|
compositTitleSize?: number;
|
||||||
radius?: number;
|
radius?: number;
|
||||||
|
/**
|
||||||
|
* Defines how mermaid renders curves for flowcharts.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
curve?: 'basis' | 'linear' | 'cardinal' | 'rounded';
|
||||||
/**
|
/**
|
||||||
* Decides which rendering engine that is to be used for the rendering.
|
* Decides which rendering engine that is to be used for the rendering.
|
||||||
*
|
*
|
||||||
|
@@ -54,16 +54,46 @@ export function stateDomId(itemId = '', counter = 0, type = '', typeSpacer = DOM
|
|||||||
return `${DOMID_STATE}-${itemId}${typeStr}-${counter}`;
|
return `${DOMID_STATE}-${itemId}${typeStr}-${counter}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const setupDoc = (parentParsedItem, doc, diagramStates, nodes, edges, altFlag, look, classes) => {
|
const setupDoc = (
|
||||||
|
parentParsedItem,
|
||||||
|
doc,
|
||||||
|
diagramStates,
|
||||||
|
nodes,
|
||||||
|
edges,
|
||||||
|
altFlag,
|
||||||
|
look,
|
||||||
|
classes,
|
||||||
|
config
|
||||||
|
) => {
|
||||||
// graphItemCount = 0;
|
// graphItemCount = 0;
|
||||||
log.trace('items', doc);
|
log.trace('items', doc);
|
||||||
doc.forEach((item) => {
|
doc.forEach((item) => {
|
||||||
switch (item.stmt) {
|
switch (item.stmt) {
|
||||||
case STMT_STATE:
|
case STMT_STATE:
|
||||||
dataFetcher(parentParsedItem, item, diagramStates, nodes, edges, altFlag, look, classes);
|
dataFetcher(
|
||||||
|
parentParsedItem,
|
||||||
|
item,
|
||||||
|
diagramStates,
|
||||||
|
nodes,
|
||||||
|
edges,
|
||||||
|
altFlag,
|
||||||
|
look,
|
||||||
|
classes,
|
||||||
|
config
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case DEFAULT_STATE_TYPE:
|
case DEFAULT_STATE_TYPE:
|
||||||
dataFetcher(parentParsedItem, item, diagramStates, nodes, edges, altFlag, look, classes);
|
dataFetcher(
|
||||||
|
parentParsedItem,
|
||||||
|
item,
|
||||||
|
diagramStates,
|
||||||
|
nodes,
|
||||||
|
edges,
|
||||||
|
altFlag,
|
||||||
|
look,
|
||||||
|
classes,
|
||||||
|
config
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case STMT_RELATION:
|
case STMT_RELATION:
|
||||||
{
|
{
|
||||||
@@ -75,7 +105,8 @@ const setupDoc = (parentParsedItem, doc, diagramStates, nodes, edges, altFlag, l
|
|||||||
edges,
|
edges,
|
||||||
altFlag,
|
altFlag,
|
||||||
look,
|
look,
|
||||||
classes
|
classes,
|
||||||
|
config
|
||||||
);
|
);
|
||||||
dataFetcher(
|
dataFetcher(
|
||||||
parentParsedItem,
|
parentParsedItem,
|
||||||
@@ -85,7 +116,8 @@ const setupDoc = (parentParsedItem, doc, diagramStates, nodes, edges, altFlag, l
|
|||||||
edges,
|
edges,
|
||||||
altFlag,
|
altFlag,
|
||||||
look,
|
look,
|
||||||
classes
|
classes,
|
||||||
|
config
|
||||||
);
|
);
|
||||||
const edgeData = {
|
const edgeData = {
|
||||||
id: 'edge' + graphItemCount,
|
id: 'edge' + graphItemCount,
|
||||||
@@ -102,6 +134,7 @@ const setupDoc = (parentParsedItem, doc, diagramStates, nodes, edges, altFlag, l
|
|||||||
thickness: G_EDGE_THICKNESS,
|
thickness: G_EDGE_THICKNESS,
|
||||||
classes: CSS_EDGE,
|
classes: CSS_EDGE,
|
||||||
look,
|
look,
|
||||||
|
curve: config.state?.curve,
|
||||||
};
|
};
|
||||||
edges.push(edgeData);
|
edges.push(edgeData);
|
||||||
graphItemCount++;
|
graphItemCount++;
|
||||||
@@ -181,7 +214,8 @@ export const dataFetcher = (
|
|||||||
edges,
|
edges,
|
||||||
altFlag,
|
altFlag,
|
||||||
look,
|
look,
|
||||||
classes
|
classes,
|
||||||
|
config
|
||||||
) => {
|
) => {
|
||||||
const itemId = parsedItem.id;
|
const itemId = parsedItem.id;
|
||||||
const dbState = diagramStates.get(itemId);
|
const dbState = diagramStates.get(itemId);
|
||||||
@@ -362,6 +396,7 @@ export const dataFetcher = (
|
|||||||
labelType: G_EDGE_LABELTYPE,
|
labelType: G_EDGE_LABELTYPE,
|
||||||
thickness: G_EDGE_THICKNESS,
|
thickness: G_EDGE_THICKNESS,
|
||||||
look,
|
look,
|
||||||
|
curve: config.state?.curve,
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
insertOrUpdateNode(nodes, nodeData, classes);
|
insertOrUpdateNode(nodes, nodeData, classes);
|
||||||
@@ -369,7 +404,17 @@ export const dataFetcher = (
|
|||||||
}
|
}
|
||||||
if (parsedItem.doc) {
|
if (parsedItem.doc) {
|
||||||
log.trace('Adding nodes children ');
|
log.trace('Adding nodes children ');
|
||||||
setupDoc(parsedItem, parsedItem.doc, diagramStates, nodes, edges, !altFlag, look, classes);
|
setupDoc(
|
||||||
|
parsedItem,
|
||||||
|
parsedItem.doc,
|
||||||
|
diagramStates,
|
||||||
|
nodes,
|
||||||
|
edges,
|
||||||
|
!altFlag,
|
||||||
|
look,
|
||||||
|
classes,
|
||||||
|
config
|
||||||
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -221,7 +221,7 @@ const extract = (_doc) => {
|
|||||||
const config = getConfig();
|
const config = getConfig();
|
||||||
const look = config.look;
|
const look = config.look;
|
||||||
resetDataFetching();
|
resetDataFetching();
|
||||||
dataFetcher(undefined, getRootDocV2(), diagramStates, nodes, edges, true, look, classes);
|
dataFetcher(undefined, getRootDocV2(), diagramStates, nodes, edges, true, look, classes, config);
|
||||||
nodes.forEach((node) => {
|
nodes.forEach((node) => {
|
||||||
if (Array.isArray(node.label)) {
|
if (Array.isArray(node.label)) {
|
||||||
// add the rest as description
|
// add the rest as description
|
||||||
|
@@ -478,7 +478,6 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod
|
|||||||
}
|
}
|
||||||
let curve = curveBasis;
|
let curve = curveBasis;
|
||||||
curve = curveLinear;
|
curve = curveLinear;
|
||||||
// let curve = curveCardinal;
|
|
||||||
switch (edge.curve) {
|
switch (edge.curve) {
|
||||||
case 'linear':
|
case 'linear':
|
||||||
curve = curveLinear;
|
curve = curveLinear;
|
||||||
|
@@ -1375,6 +1375,12 @@ $defs: # JSON Schema definition (maybe we should move these to a separate file)
|
|||||||
radius:
|
radius:
|
||||||
type: number
|
type: number
|
||||||
default: 5
|
default: 5
|
||||||
|
curve:
|
||||||
|
description: |
|
||||||
|
Defines how mermaid renders curves for flowcharts.
|
||||||
|
type: string
|
||||||
|
enum: ['basis', 'linear', 'cardinal', 'rounded']
|
||||||
|
default: 'rounded'
|
||||||
defaultRenderer:
|
defaultRenderer:
|
||||||
description: |
|
description: |
|
||||||
Decides which rendering engine that is to be used for the rendering.
|
Decides which rendering engine that is to be used for the rendering.
|
||||||
|
Reference in New Issue
Block a user