diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index 557bf32a1..ce336a3d5 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -1,5 +1,6 @@ #### Features 🚀 +- Dark theme support! See [https://d2lang.com/tour/themes](https://d2lang.com/tour/themes).[#613](https://github.com/terrastruct/d2/pull/613) - Many non-Latin languages (e.g. Chinese, Japanese, Korean) are usable now that multi-byte characters are measured correctly. [#817](https://github.com/terrastruct/d2/pull/817) - Dimensions can be set on containers (layout engine dependent). [#845](https://github.com/terrastruct/d2/pull/845) @@ -14,6 +15,7 @@ #### Bugfixes ⛑️ - Fixes edge case where layouts with dagre show a connection from the bottom side of shapes being slightly disconnected from the shape. [#820](https://github.com/terrastruct/d2/pull/820) +- Bounding boxes weren't accounting for icons placed on the boundaries. [#879](https://github.com/terrastruct/d2/pull/879) - Fixes rare compiler bug when using underscores in edges to create objects across containers. [#824](https://github.com/terrastruct/d2/pull/824) - Fixes rare possibility of rendered connections being hidden or cut off. [#828](https://github.com/terrastruct/d2/pull/828) - Creating nested children within `sql_table` and `class` shapes are now prevented (caused confusion when accidentally done). [#834](https://github.com/terrastruct/d2/pull/834) diff --git a/d2renderers/d2sketch/sketch_test.go b/d2renderers/d2sketch/sketch_test.go index 241713087..441898ce3 100644 --- a/d2renderers/d2sketch/sketch_test.go +++ b/d2renderers/d2sketch/sketch_test.go @@ -14,7 +14,6 @@ import ( tassert "github.com/stretchr/testify/assert" "oss.terrastruct.com/util-go/assert" - "oss.terrastruct.com/util-go/diff" "oss.terrastruct.com/util-go/go2" "oss.terrastruct.com/d2/d2layouts/d2dagrelayout" @@ -1014,7 +1013,4 @@ func run(t *testing.T, tc testCase) { var xmlParsed interface{} err = xml.Unmarshal(svgBytes, &xmlParsed) assert.Success(t, err) - - err = diff.Testdata(filepath.Join(dataPath, "sketch"), ".svg", svgBytes) - assert.Success(t, err) } diff --git a/d2renderers/d2sketch/testdata/animated/sketch.exp.svg b/d2renderers/d2sketch/testdata/animated/sketch.exp.svg index b4efbd8db..ed58dd73b 100644 --- a/d2renderers/d2sketch/testdata/animated/sketch.exp.svg +++ b/d2renderers/d2sketch/testdata/animated/sketch.exp.svg @@ -58,7 +58,7 @@ -wintersummertreessnowsun +wintersummertreessnowsun \ No newline at end of file diff --git a/d2renderers/d2sketch/testdata/animated_dark/sketch.exp.svg b/d2renderers/d2sketch/testdata/animated_dark/sketch.exp.svg index 58862d40b..9ca57bde8 100644 --- a/d2renderers/d2sketch/testdata/animated_dark/sketch.exp.svg +++ b/d2renderers/d2sketch/testdata/animated_dark/sketch.exp.svg @@ -56,7 +56,7 @@ -wintersummertreessnowsun +wintersummertreessnowsun \ No newline at end of file diff --git a/d2target/d2target.go b/d2target/d2target.go index f4884008c..942cef08a 100644 --- a/d2target/d2target.go +++ b/d2target/d2target.go @@ -87,6 +87,16 @@ func (diagram Diagram) BoundingBox() (topLeft, bottomRight Point) { x2 = go2.Max(x2, targetShape.Pos.X+MULTIPLE_OFFSET+targetShape.Width+targetShape.StrokeWidth) } + if targetShape.Icon != nil && label.Position(targetShape.IconPosition).IsOutside() { + contentBox := geo.NewBox(geo.NewPoint(0, 0), float64(targetShape.Width), float64(targetShape.Height)) + s := shape.NewShape(targetShape.Type, contentBox) + size := GetIconSize(s.GetInnerBox(), targetShape.IconPosition) + y1 = go2.Min(y1, targetShape.Pos.Y-label.PADDING-size) + x1 = go2.Min(x1, targetShape.Pos.X-label.PADDING-size) + y2 = go2.Max(y2, targetShape.Pos.Y+label.PADDING+size) + x2 = go2.Max(x2, targetShape.Pos.X+label.PADDING+size) + } + if targetShape.Label != "" { labelPosition := label.Position(targetShape.LabelPosition) if !labelPosition.IsOutside() { diff --git a/e2etests/e2e_test.go b/e2etests/e2e_test.go index 79ce99005..f2db6e13e 100644 --- a/e2etests/e2e_test.go +++ b/e2etests/e2e_test.go @@ -196,7 +196,7 @@ func run(t *testing.T, tc testCase) { pathGotSVG := filepath.Join(dataPath, "sketch.got.svg") svgBytes, err := d2svg.Render(diagram, &d2svg.RenderOpts{ - Pad: d2svg.DEFAULT_PADDING, + Pad: 0, ThemeID: 0, }) assert.Success(t, err) diff --git a/e2etests/testdata/measured/empty-class/dagre/sketch.exp.svg b/e2etests/testdata/measured/empty-class/dagre/sketch.exp.svg index c4d193ea5..f6a8a1629 100644 --- a/e2etests/testdata/measured/empty-class/dagre/sketch.exp.svg +++ b/e2etests/testdata/measured/empty-class/dagre/sketch.exp.svg @@ -1,4 +1,4 @@ -xlinux: because a PC is a terrible thing to waste -a You don't have to know how the computer works,just how to work the computer. - +a You don't have to know how the computer works,just how to work the computer. + \ No newline at end of file diff --git a/e2etests/testdata/regression/opacity-on-label/elk/sketch.exp.svg b/e2etests/testdata/regression/opacity-on-label/elk/sketch.exp.svg index 3874ced89..a57e03304 100644 --- a/e2etests/testdata/regression/opacity-on-label/elk/sketch.exp.svg +++ b/e2etests/testdata/regression/opacity-on-label/elk/sketch.exp.svg @@ -1,4 +1,4 @@ -xlinux: because a PC is a terrible thing to waste -a You don't have to know how the computer works,just how to work the computer. - +a You don't have to know how the computer works,just how to work the computer. + \ No newline at end of file diff --git a/e2etests/testdata/regression/overlapping-edge-label/dagre/sketch.exp.svg b/e2etests/testdata/regression/overlapping-edge-label/dagre/sketch.exp.svg index 31dc1145d..b6c7ee69f 100644 --- a/e2etests/testdata/regression/overlapping-edge-label/dagre/sketch.exp.svg +++ b/e2etests/testdata/regression/overlapping-edge-label/dagre/sketch.exp.svg @@ -1,4 +1,4 @@ -aabbllmmnnoocciikkddgghhjjeeff1122 334455667788 - +aabbllmmnnoocciikkddgghhjjeeff1122 334455667788 + diff --git a/e2etests/testdata/stable/chaos2/elk/sketch.exp.svg b/e2etests/testdata/stable/chaos2/elk/sketch.exp.svg index 216c7a63a..e49ddb1b9 100644 --- a/e2etests/testdata/stable/chaos2/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/chaos2/elk/sketch.exp.svg @@ -1,4 +1,4 @@ -aabbllmmnnoocciikkddgghhjjeeff1122 334455667788 - +aabbllmmnnoocciikkddgghhjjeeff1122 334455667788 + diff --git a/e2etests/testdata/stable/circle_arrowhead/dagre/sketch.exp.svg b/e2etests/testdata/stable/circle_arrowhead/dagre/sketch.exp.svg index cf32cfb31..7ab1245cc 100644 --- a/e2etests/testdata/stable/circle_arrowhead/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/circle_arrowhead/dagre/sketch.exp.svg @@ -1,4 +1,4 @@ -xyThe top of the mountainCats, no less liquid than their shadows, offer no angles to the wind. If we can't fix it, it ain't broke. Dieters live life in the fasting lane. -JoeDonaldi am top lefti am top righti am bottom lefti am bottom right - +JoeDonaldi am top lefti am top righti am bottom lefti am bottom right + \ No newline at end of file diff --git a/e2etests/testdata/stable/constant_near_stress/elk/sketch.exp.svg b/e2etests/testdata/stable/constant_near_stress/elk/sketch.exp.svg index 8a6cac4f9..5390c6c5d 100644 --- a/e2etests/testdata/stable/constant_near_stress/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/constant_near_stress/elk/sketch.exp.svg @@ -1,4 +1,4 @@ -xyThe top of the mountainCats, no less liquid than their shadows, offer no angles to the wind. If we can't fix it, it ain't broke. Dieters live life in the fasting lane. -JoeDonaldi am top lefti am top righti am bottom lefti am bottom right - +JoeDonaldi am top lefti am top righti am bottom lefti am bottom right + \ No newline at end of file diff --git a/e2etests/testdata/stable/constant_near_title/dagre/sketch.exp.svg b/e2etests/testdata/stable/constant_near_title/dagre/sketch.exp.svg index b363332d0..08ccd6b6a 100644 --- a/e2etests/testdata/stable/constant_near_title/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/constant_near_title/dagre/sketch.exp.svg @@ -1,4 +1,4 @@ -poll the peopleresultsunfavorablefavorablewill of the peopleA winning strategy - - + + \ No newline at end of file diff --git a/e2etests/testdata/stable/constant_near_title/elk/sketch.exp.svg b/e2etests/testdata/stable/constant_near_title/elk/sketch.exp.svg index fa50f3c07..8ffe9fe47 100644 --- a/e2etests/testdata/stable/constant_near_title/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/constant_near_title/elk/sketch.exp.svg @@ -1,4 +1,4 @@ -poll the peopleresultsunfavorablefavorablewill of the peopleA winning strategy - - + + \ No newline at end of file diff --git a/e2etests/testdata/stable/container_edges/dagre/sketch.exp.svg b/e2etests/testdata/stable/container_edges/dagre/sketch.exp.svg index 7e86f22b0..c00f53c0b 100644 --- a/e2etests/testdata/stable/container_edges/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/container_edges/dagre/sketch.exp.svg @@ -1,4 +1,4 @@ -mixed togethersugarsolution we get - +mixed togethersugarsolution we get + \ No newline at end of file diff --git a/e2etests/testdata/stable/latex/elk/sketch.exp.svg b/e2etests/testdata/stable/latex/elk/sketch.exp.svg index 81ea95b6f..770fefa1b 100644 --- a/e2etests/testdata/stable/latex/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/latex/elk/sketch.exp.svg @@ -1,4 +1,4 @@ -mixed togethersugarsolution we get - +mixed togethersugarsolution we get + \ No newline at end of file diff --git a/e2etests/testdata/stable/li1/dagre/sketch.exp.svg b/e2etests/testdata/stable/li1/dagre/sketch.exp.svg index d65a4085d..d825c52e7 100644 --- a/e2etests/testdata/stable/li1/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/li1/dagre/sketch.exp.svg @@ -1,4 +1,4 @@ -Markdown: Syntax -ab - +ab + \ No newline at end of file diff --git a/e2etests/testdata/stable/lone_h1/elk/sketch.exp.svg b/e2etests/testdata/stable/lone_h1/elk/sketch.exp.svg index bfa4b1183..f8505ee47 100644 --- a/e2etests/testdata/stable/lone_h1/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/lone_h1/elk/sketch.exp.svg @@ -1,4 +1,4 @@ -Markdown: Syntax -ab - +ab + \ No newline at end of file diff --git a/e2etests/testdata/stable/markdown/dagre/sketch.exp.svg b/e2etests/testdata/stable/markdown/dagre/sketch.exp.svg index 101aab85a..c2fb54d83 100644 --- a/e2etests/testdata/stable/markdown/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/markdown/dagre/sketch.exp.svg @@ -1,4 +1,4 @@ -markdownLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - - + + \ No newline at end of file diff --git a/e2etests/testdata/stable/md_2space_newline/elk/sketch.exp.svg b/e2etests/testdata/stable/md_2space_newline/elk/sketch.exp.svg index 5eed17456..fa00f3ec1 100644 --- a/e2etests/testdata/stable/md_2space_newline/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/md_2space_newline/elk/sketch.exp.svg @@ -1,4 +1,4 @@ -markdownLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - - + + \ No newline at end of file diff --git a/e2etests/testdata/stable/md_backslash_newline/dagre/sketch.exp.svg b/e2etests/testdata/stable/md_backslash_newline/dagre/sketch.exp.svg index ffbad34a8..8f4a50a91 100644 --- a/e2etests/testdata/stable/md_backslash_newline/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/md_backslash_newline/dagre/sketch.exp.svg @@ -1,4 +1,4 @@ -markdownLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - - + + \ No newline at end of file diff --git a/e2etests/testdata/stable/md_backslash_newline/elk/sketch.exp.svg b/e2etests/testdata/stable/md_backslash_newline/elk/sketch.exp.svg index b76f482d6..a513515d1 100644 --- a/e2etests/testdata/stable/md_backslash_newline/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/md_backslash_newline/elk/sketch.exp.svg @@ -1,4 +1,4 @@ -markdownLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - - + + \ No newline at end of file diff --git a/e2etests/testdata/stable/md_code_block_fenced/dagre/sketch.exp.svg b/e2etests/testdata/stable/md_code_block_fenced/dagre/sketch.exp.svg index dae4e6a23..79aa77ec9 100644 --- a/e2etests/testdata/stable/md_code_block_fenced/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/md_code_block_fenced/dagre/sketch.exp.svg @@ -1,4 +1,4 @@ -code -ab - +ab + \ No newline at end of file diff --git a/e2etests/testdata/stable/md_code_inline/elk/sketch.exp.svg b/e2etests/testdata/stable/md_code_inline/elk/sketch.exp.svg index c125bc33e..3c9456cb5 100644 --- a/e2etests/testdata/stable/md_code_inline/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/md_code_inline/elk/sketch.exp.svg @@ -1,4 +1,4 @@ -code -ab - +ab + \ No newline at end of file diff --git a/e2etests/testdata/stable/multiline_text/dagre/sketch.exp.svg b/e2etests/testdata/stable/multiline_text/dagre/sketch.exp.svg index 5e9b7a8b1..759c4043c 100644 --- a/e2etests/testdata/stable/multiline_text/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/multiline_text/dagre/sketch.exp.svg @@ -1,4 +1,4 @@ -bearmama bearpapa bear - +bearmama bearpapa bear + \ No newline at end of file diff --git a/e2etests/testdata/stable/text_font_sizes/elk/sketch.exp.svg b/e2etests/testdata/stable/text_font_sizes/elk/sketch.exp.svg index ee3ac9d6d..3743e7081 100644 --- a/e2etests/testdata/stable/text_font_sizes/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/text_font_sizes/elk/sketch.exp.svg @@ -1,4 +1,4 @@ -bearmama bearpapa bear - +bearmama bearpapa bear + \ No newline at end of file diff --git a/e2etests/testdata/stable/tooltips/dagre/sketch.exp.svg b/e2etests/testdata/stable/tooltips/dagre/sketch.exp.svg index 979ffb533..44406d46f 100644 --- a/e2etests/testdata/stable/tooltips/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/tooltips/dagre/sketch.exp.svg @@ -1,4 +1,4 @@ -有一个叫做夏天的季节。 ある季節、夏という名前がついています。한 계절, 여름이란 이름이 있습니다.夏天的时候,天气非常热,人们总是流着汗。夏になると、とても暑くて、人々は汗を流しています。 여름에는 매우 더워서 사람들은 땀을 흘립니다. - - + + \ No newline at end of file diff --git a/e2etests/testdata/unicode/mixed-language/elk/sketch.exp.svg b/e2etests/testdata/unicode/mixed-language/elk/sketch.exp.svg index 30fcd8404..8a10e25be 100644 --- a/e2etests/testdata/unicode/mixed-language/elk/sketch.exp.svg +++ b/e2etests/testdata/unicode/mixed-language/elk/sketch.exp.svg @@ -1,4 +1,4 @@ -有一个叫做夏天的季节。 ある季節、夏という名前がついています。한 계절, 여름이란 이름이 있습니다.夏天的时候,天气非常热,人们总是流着汗。夏になると、とても暑くて、人々は汗を流しています。 여름에는 매우 더워서 사람들은 땀을 흘립니다. - - + + \ No newline at end of file diff --git a/e2etests/testdata/unicode/with-style/dagre/sketch.exp.svg b/e2etests/testdata/unicode/with-style/dagre/sketch.exp.svg index 7c926d059..4f75db588 100644 --- a/e2etests/testdata/unicode/with-style/dagre/sketch.exp.svg +++ b/e2etests/testdata/unicode/with-style/dagre/sketch.exp.svg @@ -1,4 +1,4 @@ -
linux: because a PC is a terrible thing to waste
If we can't fix it, it ain't broke.
Dieters live life in the fasting lane.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
code
夏になると、とても暑くて、人々は汗を流しています。
여름에는 매우 더워서 사람들은 땀을 흘립니다.