diff --git a/cypress/integration/rendering/flowchart.spec.js b/cypress/integration/rendering/flowchart.spec.js index c88129ddc..1a7c41163 100644 --- a/cypress/integration/rendering/flowchart.spec.js +++ b/cypress/integration/rendering/flowchart.spec.js @@ -640,4 +640,16 @@ describe('Flowchart', () => { { flowchart: { htmlLabels: false } } ); }); + + it('31: should not slice off edges that are to the left of the left-most vertex', () => { + imgSnapshotTest( + `graph TD + work --> sleep + sleep --> work + eat --> sleep + work --> eat + `, + { flowchart: { htmlLabels: false } } + ); + }); }); diff --git a/src/diagrams/flowchart/flowRenderer.js b/src/diagrams/flowchart/flowRenderer.js index e572f9188..bfe407b16 100644 --- a/src/diagrams/flowchart/flowRenderer.js +++ b/src/diagrams/flowchart/flowRenderer.js @@ -380,10 +380,6 @@ export const draw = function(text, id) { const svgBounds = svg.node().getBBox(); const width = svgBounds.width + padding * 2; const height = svgBounds.height + padding * 2; - logger.debug( - `new ViewBox 0 0 ${width} ${height}`, - `translate(${padding - g._label.marginx}, ${padding - g._label.marginy})` - ); if (conf.useMaxWidth) { svg.attr('width', '100%'); @@ -393,10 +389,10 @@ export const draw = function(text, id) { svg.attr('width', width); } - svg.attr('viewBox', `0 0 ${width} ${height}`); - svg - .select('g') - .attr('transform', `translate(${padding - g._label.marginx}, ${padding - svgBounds.y})`); + // Ensure the viewBox includes the whole svgBounds area with extra space for padding + const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`; + logger.debug(`viewBox ${vBox}`); + svg.attr('viewBox', vBox); // Index nodes flowDb.indexNodes('subGraph' + i);