diff --git a/d2renderers/d2svg/d2svg.go b/d2renderers/d2svg/d2svg.go
index 66de5a515..3147a6958 100644
--- a/d2renderers/d2svg/d2svg.go
+++ b/d2renderers/d2svg/d2svg.go
@@ -1353,7 +1353,7 @@ func RenderText(text string, x, height float64) string {
return strings.Join(rendered, "")
}
-func embedFonts(buf *bytes.Buffer, source string, fontFamily *d2fonts.FontFamily) {
+func embedFonts(buf *bytes.Buffer, diagramHash, source string, fontFamily *d2fonts.FontFamily) {
fmt.Fprint(buf, ``, mdCSS)
+ css := mdCSS
+ css = strings.ReplaceAll(css, "font-italic", fmt.Sprintf("%s-font-italic", diagramHash))
+ css = strings.ReplaceAll(css, "font-bold", fmt.Sprintf("%s-font-bold", diagramHash))
+ css = strings.ReplaceAll(css, "font-mono", fmt.Sprintf("%s-font-mono", diagramHash))
+ css = strings.ReplaceAll(css, "font-regular", fmt.Sprintf("%s-font-regular", diagramHash))
+ fmt.Fprintf(upperBuf, ``, css)
}
if sketchRunner != nil {
d2sketch.DefineFillPatterns(upperBuf)
@@ -1790,9 +1779,10 @@ func Render(diagram *d2target.Diagram, opts *RenderOpts) ([]byte, error) {
)
// TODO minify
- docRendered := fmt.Sprintf(`%s%s`,
+ docRendered := fmt.Sprintf(`%s%s`,
``,
fitToScreenWrapper,
+ diagramHash,
w, h, left, top, w, h,
doubleBorderElStr,
backgroundEl.Render(),
@@ -1803,14 +1793,14 @@ func Render(diagram *d2target.Diagram, opts *RenderOpts) ([]byte, error) {
}
// TODO include only colors that are being used to reduce size
-func themeCSS(themeID int64, darkThemeID *int64) (stylesheet string, err error) {
- out, err := singleThemeRulesets(themeID)
+func themeCSS(diagramHash string, themeID int64, darkThemeID *int64) (stylesheet string, err error) {
+ out, err := singleThemeRulesets(diagramHash, themeID)
if err != nil {
return "", err
}
if darkThemeID != nil {
- darkOut, err := singleThemeRulesets(*darkThemeID)
+ darkOut, err := singleThemeRulesets(diagramHash, *darkThemeID)
if err != nil {
return "", err
}
@@ -1820,30 +1810,66 @@ func themeCSS(themeID int64, darkThemeID *int64) (stylesheet string, err error)
return out, nil
}
-func singleThemeRulesets(themeID int64) (rulesets string, err error) {
+func singleThemeRulesets(diagramHash string, themeID int64) (rulesets string, err error) {
out := ""
theme := d2themescatalog.Find(themeID)
// Global theme colors
for _, property := range []string{"fill", "stroke", "background-color", "color"} {
- out += fmt.Sprintf(".%s-N1{%s:%s;}.%s-N2{%s:%s;}.%s-N3{%s:%s;}.%s-N4{%s:%s;}.%s-N5{%s:%s;}.%s-N6{%s:%s;}.%s-N7{%s:%s;}.%s-B1{%s:%s;}.%s-B2{%s:%s;}.%s-B3{%s:%s;}.%s-B4{%s:%s;}.%s-B5{%s:%s;}.%s-B6{%s:%s;}.%s-AA2{%s:%s;}.%s-AA4{%s:%s;}.%s-AA5{%s:%s;}.%s-AB4{%s:%s;}.%s-AB5{%s:%s;}",
+ out += fmt.Sprintf(`
+ .%s .%s-N1{%s:%s;}
+ .%s .%s-N2{%s:%s;}
+ .%s .%s-N3{%s:%s;}
+ .%s .%s-N4{%s:%s;}
+ .%s .%s-N5{%s:%s;}
+ .%s .%s-N6{%s:%s;}
+ .%s .%s-N7{%s:%s;}
+ .%s .%s-B1{%s:%s;}
+ .%s .%s-B2{%s:%s;}
+ .%s .%s-B3{%s:%s;}
+ .%s .%s-B4{%s:%s;}
+ .%s .%s-B5{%s:%s;}
+ .%s .%s-B6{%s:%s;}
+ .%s .%s-AA2{%s:%s;}
+ .%s .%s-AA4{%s:%s;}
+ .%s .%s-AA5{%s:%s;}
+ .%s .%s-AB4{%s:%s;}
+ .%s .%s-AB5{%s:%s;}`,
+ diagramHash,
property, property, theme.Colors.Neutrals.N1,
+ diagramHash,
property, property, theme.Colors.Neutrals.N2,
+ diagramHash,
property, property, theme.Colors.Neutrals.N3,
+ diagramHash,
property, property, theme.Colors.Neutrals.N4,
+ diagramHash,
property, property, theme.Colors.Neutrals.N5,
+ diagramHash,
property, property, theme.Colors.Neutrals.N6,
+ diagramHash,
property, property, theme.Colors.Neutrals.N7,
+ diagramHash,
property, property, theme.Colors.B1,
+ diagramHash,
property, property, theme.Colors.B2,
+ diagramHash,
property, property, theme.Colors.B3,
+ diagramHash,
property, property, theme.Colors.B4,
+ diagramHash,
property, property, theme.Colors.B5,
+ diagramHash,
property, property, theme.Colors.B6,
+ diagramHash,
property, property, theme.Colors.AA2,
+ diagramHash,
property, property, theme.Colors.AA4,
+ diagramHash,
property, property, theme.Colors.AA5,
+ diagramHash,
property, property, theme.Colors.AB4,
+ diagramHash,
property, property, theme.Colors.AB5,
)
}