From 24257de8a631cd61604eb08015e32cf2fab4acc7 Mon Sep 17 00:00:00 2001 From: darshanr0107 Date: Tue, 24 Jun 2025 14:50:20 +0530 Subject: [PATCH] fix state diagram edge label position --- .../rendering-util/rendering-elements/edges.js | 4 ++++ packages/mermaid/src/utils.ts | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/packages/mermaid/src/rendering-util/rendering-elements/edges.js b/packages/mermaid/src/rendering-util/rendering-elements/edges.js index a97668d5f..154040d87 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/edges.js +++ b/packages/mermaid/src/rendering-util/rendering-elements/edges.js @@ -638,6 +638,10 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod addEdgeMarkers(svgPath, edge, url, id, diagramType, strokeColor); + if (!utils.isPointInDAttr(points, svgPath.attr('d'))) { + pointsHasChanged = true; + } + let paths = {}; if (pointsHasChanged) { paths.updatedPath = points; diff --git a/packages/mermaid/src/utils.ts b/packages/mermaid/src/utils.ts index 6ed935cf6..61157f827 100644 --- a/packages/mermaid/src/utils.ts +++ b/packages/mermaid/src/utils.ts @@ -884,6 +884,7 @@ export default { runFunc, entityDecode, insertTitle, + isPointInDAttr, parseFontSize, InitIDGenerator, }; @@ -960,3 +961,19 @@ export function handleUndefinedAttr( ) { return attrValue ?? null; } + +export function isPointInDAttr(points: Point[], dAttr: string) { + if (!points || points.length < 2 || !dAttr) { + return false; + } + + const point = points[1]; + const roundedX = Math.round(point.x); + const roundedY = Math.round(point.y); + + const sanitizedD = dAttr.replace(/(\d+\.\d+)/g, (match) => + Math.round(parseFloat(match)).toString() + ); + + return sanitizedD.includes(roundedX.toString()) || sanitizedD.includes(roundedY.toString()); +}