diff --git a/d2renderers/d2svg/class.go b/d2renderers/d2svg/class.go index ba0bd0ded..acaaba3e1 100644 --- a/d2renderers/d2svg/class.go +++ b/d2renderers/d2svg/class.go @@ -3,7 +3,6 @@ package d2svg import ( "fmt" "io" - "strings" "oss.terrastruct.com/d2/d2target" "oss.terrastruct.com/d2/d2themes" @@ -18,10 +17,7 @@ func classHeader(labelMaskID string, shape d2target.Shape, box *geo.Box, text st rectEl.Width, rectEl.Height = box.Width, box.Height rectEl.Fill = shape.Fill rectEl.ClassName = "class_header" - str := rectEl.Render() - if shape.BorderRadius != 0 { - str = strings.Replace(str, "/>", fmt.Sprintf(`clip-path="url(#%v-%v)" />`, labelMaskID, shape.ID), 1) - } + str := rectEl.RenderWithClipPath(fmt.Sprintf("%v-%v", labelMaskID, shape.ID)) if text != "" { tl := label.InsideMiddleCenter.GetPointOnBox( diff --git a/d2renderers/d2svg/table.go b/d2renderers/d2svg/table.go index 1a04edef6..30d18aa85 100644 --- a/d2renderers/d2svg/table.go +++ b/d2renderers/d2svg/table.go @@ -3,7 +3,6 @@ package d2svg import ( "fmt" "io" - "strings" "oss.terrastruct.com/d2/d2target" "oss.terrastruct.com/d2/d2themes" @@ -47,10 +46,7 @@ func tableHeader(labelMaskID string, shape d2target.Shape, box *geo.Box, text st rectEl.Width, rectEl.Height = box.Width, box.Height rectEl.Fill = shape.Fill rectEl.ClassName = "class_header" - str := rectEl.Render() - if shape.BorderRadius != 0 { - str = strings.Replace(str, "/>", fmt.Sprintf(`clip-path="url(#%v-%v)" />`, labelMaskID, shape.ID), 1) - } + str := rectEl.RenderWithClipPath(fmt.Sprintf("%v-%v", labelMaskID, shape.ID)) if text != "" { tl := label.InsideMiddleLeft.GetPointOnBox( diff --git a/d2themes/element.go b/d2themes/element.go index e881c0d78..b663b173f 100644 --- a/d2themes/element.go +++ b/d2themes/element.go @@ -3,6 +3,7 @@ package d2themes import ( "fmt" "math" + "strings" "oss.terrastruct.com/d2/lib/color" ) @@ -100,6 +101,13 @@ func (el *ThemableElement) SetMaskUrl(url string) { el.Mask = fmt.Sprintf("url(#%s)", url) } +func (el *ThemableElement) RenderWithClipPath(id string) string { + out := el.Render() + out = strings.Replace(out, "/>", fmt.Sprintf(`clip-path="url(#%v)" />`, id), 1) + + return out +} + func (el *ThemableElement) Render() string { out := "<" + el.tag