diff --git a/packages/mermaid/src/rendering-util/rendering-elements/edges.js b/packages/mermaid/src/rendering-util/rendering-elements/edges.js index 154040d87..db48e313c 100644 --- a/packages/mermaid/src/rendering-util/rendering-elements/edges.js +++ b/packages/mermaid/src/rendering-util/rendering-elements/edges.js @@ -637,8 +637,9 @@ export const insertEdge = function (elem, edge, clusterDb, diagramType, startNod log.info('arrowTypeEnd', edge.arrowTypeEnd); addEdgeMarkers(svgPath, edge, url, id, diagramType, strokeColor); - - if (!utils.isPointInDAttr(points, svgPath.attr('d'))) { + const midIndex = Math.floor(points.length / 2); + const point = points[midIndex]; + if (!utils.isLabelCoordinateInPath(point, svgPath.attr('d'))) { pointsHasChanged = true; } diff --git a/packages/mermaid/src/utils.ts b/packages/mermaid/src/utils.ts index 61157f827..0f1bfbecf 100644 --- a/packages/mermaid/src/utils.ts +++ b/packages/mermaid/src/utils.ts @@ -884,7 +884,7 @@ export default { runFunc, entityDecode, insertTitle, - isPointInDAttr, + isLabelCoordinateInPath, parseFontSize, InitIDGenerator, }; @@ -962,12 +962,16 @@ 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]; +/** + * Checks if the x or y coordinate of the edge label + * appears in the given SVG path data string. + * + * @param point - The Point object with x and y properties to check. + * @param dAttr - SVG path data string (the 'd' attribute of an SVG path element). + * @returns - True if the rounded x or y coordinate of the edge label is found + * in the sanitized path data string; otherwise, false. + */ +export function isLabelCoordinateInPath(point: Point, dAttr: string) { const roundedX = Math.round(point.x); const roundedY = Math.round(point.y);