diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md
index 3f80a0c09..537b89ad1 100644
--- a/ci/release/changelogs/next.md
+++ b/ci/release/changelogs/next.md
@@ -42,3 +42,4 @@
- Images can now be set to sizes smaller than 128x128. [#702](https://github.com/terrastruct/d2/pull/702)
- Tooltips with ampersand would result in invalid SVGs. [#798](https://github.com/terrastruct/d2/pull/798)
- Fixes class height when there are no rows. [#756](https://github.com/terrastruct/d2/pull/756)
+- Border radius was not firefox-compatible. [#799](https://github.com/terrastruct/d2/pull/799)
diff --git a/d2renderers/d2svg/d2svg.go b/d2renderers/d2svg/d2svg.go
index 8d4cb68cb..25c5dd88e 100644
--- a/d2renderers/d2svg/d2svg.go
+++ b/d2renderers/d2svg/d2svg.go
@@ -802,13 +802,17 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
// TODO should standardize "" to rectangle
case d2target.ShapeRectangle, d2target.ShapeSequenceDiagram, "":
+ rx := ""
+ if targetShape.BorderRadius != 0 {
+ rx = fmt.Sprintf(` rx="%d"`, targetShape.BorderRadius)
+ }
if targetShape.ThreeDee {
fmt.Fprint(writer, render3dRect(targetShape))
} else {
if !targetShape.DoubleBorder {
if targetShape.Multiple {
- fmt.Fprintf(writer, ``,
- targetShape.Pos.X+10, targetShape.Pos.Y-10, targetShape.Width, targetShape.Height, style)
+ fmt.Fprintf(writer, ``,
+ targetShape.Pos.X+10, targetShape.Pos.Y-10, targetShape.Width, targetShape.Height, style, rx)
}
if sketchRunner != nil {
out, err := d2sketch.Rect(sketchRunner, targetShape)
@@ -817,15 +821,15 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
}
fmt.Fprint(writer, out)
} else {
- fmt.Fprintf(writer, ``,
- targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, style)
+ fmt.Fprintf(writer, ``,
+ targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, style, rx)
}
} else {
if targetShape.Multiple {
- fmt.Fprintf(writer, ``,
- targetShape.Pos.X+10, targetShape.Pos.Y-10, targetShape.Width, targetShape.Height, style)
- fmt.Fprintf(writer, ``,
- targetShape.Pos.X+10+d2target.INNER_BORDER_OFFSET, targetShape.Pos.Y-10+d2target.INNER_BORDER_OFFSET, targetShape.Width-2*d2target.INNER_BORDER_OFFSET, targetShape.Height-2*d2target.INNER_BORDER_OFFSET, style)
+ fmt.Fprintf(writer, ``,
+ targetShape.Pos.X+10, targetShape.Pos.Y-10, targetShape.Width, targetShape.Height, style, rx)
+ fmt.Fprintf(writer, ``,
+ targetShape.Pos.X+10+d2target.INNER_BORDER_OFFSET, targetShape.Pos.Y-10+d2target.INNER_BORDER_OFFSET, targetShape.Width-2*d2target.INNER_BORDER_OFFSET, targetShape.Height-2*d2target.INNER_BORDER_OFFSET, style, rx)
}
if sketchRunner != nil {
out, err := d2sketch.DoubleRect(sketchRunner, targetShape)
@@ -834,10 +838,10 @@ func drawShape(writer io.Writer, targetShape d2target.Shape, sketchRunner *d2ske
}
fmt.Fprint(writer, out)
} else {
- fmt.Fprintf(writer, ``,
- targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, style)
- fmt.Fprintf(writer, ``,
- targetShape.Pos.X+d2target.INNER_BORDER_OFFSET, targetShape.Pos.Y+d2target.INNER_BORDER_OFFSET, targetShape.Width-2*d2target.INNER_BORDER_OFFSET, targetShape.Height-2*d2target.INNER_BORDER_OFFSET, style)
+ fmt.Fprintf(writer, ``,
+ targetShape.Pos.X, targetShape.Pos.Y, targetShape.Width, targetShape.Height, style, rx)
+ fmt.Fprintf(writer, ``,
+ targetShape.Pos.X+d2target.INNER_BORDER_OFFSET, targetShape.Pos.Y+d2target.INNER_BORDER_OFFSET, targetShape.Width-2*d2target.INNER_BORDER_OFFSET, targetShape.Height-2*d2target.INNER_BORDER_OFFSET, style, rx)
}
}
}
diff --git a/d2target/d2target.go b/d2target/d2target.go
index a9647f8e8..e5cf20cdb 100644
--- a/d2target/d2target.go
+++ b/d2target/d2target.go
@@ -199,9 +199,6 @@ func (s Shape) CSSStyle() string {
dashSize, gapSize := svg.GetStrokeDashAttributes(float64(s.StrokeWidth), s.StrokeDash)
out += fmt.Sprintf(`stroke-dasharray:%f,%f;`, dashSize, gapSize)
}
- if s.BorderRadius != 0 {
- out += fmt.Sprintf(`rx:%d;`, s.BorderRadius)
- }
return out
}
diff --git a/e2etests/stable_test.go b/e2etests/stable_test.go
index 99322c205..bca51d2e7 100644
--- a/e2etests/stable_test.go
+++ b/e2etests/stable_test.go
@@ -2013,6 +2013,18 @@ x: {
y: {
style.border-radius: 10
}
+multiple2: {
+ style.border-radius: 6
+ style.multiple: true
+}
+double: {
+ style.border-radius: 6
+ style.double-border: true
+}
+three-dee: {
+ style.border-radius: 6
+ style.3d: true
+}
`,
},
{
diff --git a/e2etests/testdata/stable/arrowhead_adjustment/dagre/sketch.exp.svg b/e2etests/testdata/stable/arrowhead_adjustment/dagre/sketch.exp.svg
index 5ced08a2f..a1676a6a8 100644
--- a/e2etests/testdata/stable/arrowhead_adjustment/dagre/sketch.exp.svg
+++ b/e2etests/testdata/stable/arrowhead_adjustment/dagre/sketch.exp.svg
@@ -39,7 +39,7 @@ width="380" height="824" viewBox="-140 -108 380 824">