diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md
index 4ce46f755b..98a09eb46c 100644
--- a/ci/release/changelogs/next.md
+++ b/ci/release/changelogs/next.md
@@ -2,6 +2,8 @@
#### Improvements 🧹
+- `dagre` layouts that have a connection where one endpoint is a container is much improved. [#1011](https://github.com/terrastruct/d2/pull/1011)
+
#### Bugfixes ⛑️
- Fixes `d2` erroring on malformed user paths (`fdopendir` error). [util-go#10](https://github.com/terrastruct/util-go/pull/10)
diff --git a/d2layouts/d2dagrelayout/layout.go b/d2layouts/d2dagrelayout/layout.go
index be2f699989..3683051d6b 100644
--- a/d2layouts/d2dagrelayout/layout.go
+++ b/d2layouts/d2dagrelayout/layout.go
@@ -177,11 +177,27 @@ func Layout(ctx context.Context, g *d2graph.Graph, opts *ConfigurableOpts) (err
// we will chop the edge where it intersects the container border so it only shows the edge from the container
src := edge.Src
for len(src.Children) > 0 && src.Class == nil && src.SQLTable == nil {
- src = src.ChildrenArray[0]
+ // We want to get the bottom node of sources, setting its rank higher than all children
+ src = getLongestEdgeChainTail(g, src)
}
dst := edge.Dst
for len(dst.Children) > 0 && dst.Class == nil && dst.SQLTable == nil {
dst = dst.ChildrenArray[0]
+
+ // We want to get the top node of destinations
+ for _, child := range dst.ChildrenArray {
+ isHead := true
+ for _, e := range g.Edges {
+ if inContainer(e.Src, child) != nil && inContainer(e.Dst, dst) != nil {
+ isHead = false
+ break
+ }
+ }
+ if isHead {
+ dst = child
+ break
+ }
+ }
}
if edge.SrcArrow && !edge.DstArrow {
// for `b <- a`, edge.Edge is `a -> b` and we expect this routing result
@@ -550,3 +566,66 @@ func generateAddParentLine(childID, parentID string) string {
func generateAddEdgeLine(fromID, toID, edgeID string, width, height int) string {
return fmt.Sprintf("g.setEdge({v:`%s`, w:`%s`, name:`%s`}, { width:%d, height:%d, labelpos: `c` });\n", escapeID(fromID), escapeID(toID), escapeID(edgeID), width, height)
}
+
+// getLongestEdgeChainTail gets the node at the end of the longest edge chain, because that will be the end of the container
+// and is what external connections should connect with
+func getLongestEdgeChainTail(g *d2graph.Graph, container *d2graph.Object) *d2graph.Object {
+ rank := make(map[*d2graph.Object]int)
+
+ for _, obj := range container.ChildrenArray {
+ isHead := true
+ for _, e := range g.Edges {
+ if inContainer(e.Src, container) != nil && inContainer(e.Dst, obj) != nil {
+ isHead = false
+ break
+ }
+ }
+ if !isHead {
+ continue
+ }
+ rank[obj] = 1
+ // BFS
+ queue := []*d2graph.Object{obj}
+ visited := make(map[*d2graph.Object]struct{})
+ for len(queue) > 0 {
+ curr := queue[0]
+ queue = queue[1:]
+ if _, ok := visited[curr]; ok {
+ continue
+ }
+ visited[curr] = struct{}{}
+ for _, e := range g.Edges {
+ child := inContainer(e.Dst, container)
+ if child == curr {
+ continue
+ }
+ if child != nil && inContainer(e.Src, curr) != nil {
+ rank[child] = go2.Max(rank[child], rank[curr]+1)
+ queue = append(queue, child)
+ }
+ }
+ }
+ }
+ max := int(math.MinInt32)
+ var tail *d2graph.Object
+ for _, obj := range container.ChildrenArray {
+ if rank[obj] >= max {
+ max = rank[obj]
+ tail = obj
+ }
+ }
+ return tail
+}
+
+func inContainer(obj, container *d2graph.Object) *d2graph.Object {
+ if obj == nil {
+ return nil
+ }
+ if obj == container {
+ return obj
+ }
+ if obj.Parent == container {
+ return obj
+ }
+ return inContainer(obj.Parent, container)
+}
diff --git a/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf b/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf
index 7c44716266..113e4dbf42 100644
Binary files a/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf and b/e2etests-cli/testdata/TestCLI_E2E/internal_linked_pdf.exp.pdf differ
diff --git a/e2etests/testdata/regression/overlapping-edge-label/dagre/board.exp.json b/e2etests/testdata/regression/overlapping-edge-label/dagre/board.exp.json
index cd711be4bb..5686cfd760 100644
--- a/e2etests/testdata/regression/overlapping-edge-label/dagre/board.exp.json
+++ b/e2etests/testdata/regression/overlapping-edge-label/dagre/board.exp.json
@@ -10,7 +10,7 @@
"x": 0,
"y": 41
},
- "width": 1221,
+ "width": 1200,
"height": 125,
"opacity": 1,
"strokeDash": 0,
@@ -48,7 +48,7 @@
"id": "k8s.m1",
"type": "rectangle",
"pos": {
- "x": 86,
+ "x": 40,
"y": 70
},
"width": 132,
@@ -89,7 +89,7 @@
"id": "k8s.m2",
"type": "rectangle",
"pos": {
- "x": 278,
+ "x": 232,
"y": 70
},
"width": 132,
@@ -130,7 +130,7 @@
"id": "k8s.m3",
"type": "rectangle",
"pos": {
- "x": 470,
+ "x": 424,
"y": 70
},
"width": 132,
@@ -171,7 +171,7 @@
"id": "k8s.w1",
"type": "rectangle",
"pos": {
- "x": 662,
+ "x": 616,
"y": 70
},
"width": 133,
@@ -212,7 +212,7 @@
"id": "k8s.w2",
"type": "rectangle",
"pos": {
- "x": 855,
+ "x": 809,
"y": 70
},
"width": 133,
@@ -253,7 +253,7 @@
"id": "k8s.w3",
"type": "rectangle",
"pos": {
- "x": 1048,
+ "x": 1002,
"y": 70
},
"width": 133,
@@ -294,10 +294,10 @@
"id": "osvc",
"type": "rectangle",
"pos": {
- "x": 0,
+ "x": 826,
"y": 328
},
- "width": 395,
+ "width": 364,
"height": 125,
"opacity": 1,
"strokeDash": 0,
@@ -335,7 +335,7 @@
"id": "osvc.vm1",
"type": "rectangle",
"pos": {
- "x": 131,
+ "x": 926,
"y": 357
},
"width": 76,
@@ -376,7 +376,7 @@
"id": "osvc.vm2",
"type": "rectangle",
"pos": {
- "x": 279,
+ "x": 1074,
"y": 357
},
"width": 76,
@@ -442,19 +442,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 59,
+ "x": 884.75,
"y": 166
},
{
- "x": 59,
+ "x": 884.75,
"y": 214.4
},
{
- "x": 59,
+ "x": 884.75,
"y": 246.9
},
{
- "x": 59,
+ "x": 884.75,
"y": 328.5
}
],
@@ -491,20 +491,20 @@
"labelPercentage": 0,
"route": [
{
- "x": 141,
+ "x": 966.75,
"y": 166
},
{
- "x": 141,
+ "x": 966.75,
"y": 214.4
},
{
- "x": 141,
- "y": 246.9
+ "x": 966.75,
+ "y": 238.7
},
{
- "x": 141,
- "y": 328.5
+ "x": 966.75,
+ "y": 287.5
}
],
"isCurve": true,
@@ -540,19 +540,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 217,
+ "x": 1042.75,
"y": 166
},
{
- "x": 217,
+ "x": 1042.75,
"y": 214.4
},
{
- "x": 217,
+ "x": 1042.75,
"y": 238.7
},
{
- "x": 217,
+ "x": 1042.75,
"y": 287.5
}
],
@@ -589,19 +589,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 278,
+ "x": 1137,
"y": 166
},
{
- "x": 278,
+ "x": 1137,
"y": 214.4
},
{
- "x": 278,
+ "x": 1137,
"y": 246.9
},
{
- "x": 278,
+ "x": 1137,
"y": 328.5
}
],
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 0a38b1a1e1..65b4276b10 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 @@
-
\ No newline at end of file
diff --git a/e2etests/testdata/stable/chaos2/dagre/board.exp.json b/e2etests/testdata/stable/chaos2/dagre/board.exp.json
index 935416fe1a..1fb61555fa 100644
--- a/e2etests/testdata/stable/chaos2/dagre/board.exp.json
+++ b/e2etests/testdata/stable/chaos2/dagre/board.exp.json
@@ -10,8 +10,8 @@
"x": 0,
"y": 41
},
- "width": 738,
- "height": 1480,
+ "width": 806,
+ "height": 1314,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
@@ -51,8 +51,8 @@
"x": 20,
"y": 106
},
- "width": 499,
- "height": 1385,
+ "width": 567,
+ "height": 1219,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
@@ -90,9 +90,9 @@
"type": "rectangle",
"pos": {
"x": 40,
- "y": 887
+ "y": 721
},
- "width": 325,
+ "width": 393,
"height": 572,
"opacity": 1,
"strokeDash": 0,
@@ -130,10 +130,10 @@
"id": "aa.bb.cc.dd",
"type": "rectangle",
"pos": {
- "x": 62,
- "y": 948
+ "x": 60,
+ "y": 782
},
- "width": 237,
+ "width": 223,
"height": 140,
"opacity": 1,
"strokeDash": 0,
@@ -171,8 +171,8 @@
"id": "aa.bb.cc.dd.ee",
"type": "text",
"pos": {
- "x": 126,
- "y": 1008
+ "x": 110,
+ "y": 842
},
"width": 16,
"height": 21,
@@ -211,8 +211,8 @@
"id": "aa.bb.cc.dd.ff",
"type": "rectangle",
"pos": {
- "x": 202,
- "y": 985
+ "x": 186,
+ "y": 819
},
"width": 57,
"height": 66,
@@ -252,8 +252,8 @@
"id": "aa.bb.cc.gg",
"type": "text",
"pos": {
- "x": 244,
- "y": 1209
+ "x": 190,
+ "y": 1043
},
"width": 17,
"height": 21,
@@ -292,8 +292,8 @@
"id": "aa.bb.cc.hh",
"type": "rectangle",
"pos": {
- "x": 221,
- "y": 1355
+ "x": 324,
+ "y": 1189
},
"width": 63,
"height": 66,
@@ -333,10 +333,10 @@
"id": "aa.bb.ii",
"type": "package",
"pos": {
- "x": 50,
+ "x": 52,
"y": 169
},
- "width": 236,
+ "width": 469,
"height": 161,
"opacity": 1,
"strokeDash": 0,
@@ -374,7 +374,7 @@
"id": "aa.bb.ii.jj",
"type": "diamond",
"pos": {
- "x": 148,
+ "x": 431,
"y": 204
},
"width": 50,
@@ -415,8 +415,8 @@
"id": "aa.bb.kk",
"type": "oval",
"pos": {
- "x": 405,
- "y": 1335
+ "x": 474,
+ "y": 1169
},
"width": 74,
"height": 74,
@@ -456,8 +456,8 @@
"id": "aa.ll",
"type": "rectangle",
"pos": {
- "x": 606,
- "y": 651
+ "x": 670,
+ "y": 772
},
"width": 54,
"height": 66,
@@ -497,7 +497,7 @@
"id": "aa.mm",
"type": "cylinder",
"pos": {
- "x": 593,
+ "x": 662,
"y": 433
},
"width": 71,
@@ -538,8 +538,8 @@
"id": "aa.nn",
"type": "text",
"pos": {
- "x": 559,
- "y": 1344
+ "x": 628,
+ "y": 1178
},
"width": 16,
"height": 21,
@@ -578,8 +578,8 @@
"id": "aa.oo",
"type": "rectangle",
"pos": {
- "x": 635,
- "y": 1321
+ "x": 704,
+ "y": 1155
},
"width": 63,
"height": 66,
@@ -644,20 +644,20 @@
"labelPercentage": 0,
"route": [
{
- "x": 134.25,
- "y": 1029.5
+ "x": 118,
+ "y": 863.5
},
{
- "x": 134.25,
- "y": 1076.3
+ "x": 118,
+ "y": 910.3
},
{
- "x": 156.1,
- "y": 1161.6749469214437
+ "x": 132.35,
+ "y": 995.1959501557633
},
{
- "x": 243.5,
- "y": 1214.3747346072187
+ "x": 189.75,
+ "y": 1045.9797507788162
}
],
"isCurve": true,
@@ -693,20 +693,20 @@
"labelPercentage": 0,
"route": [
{
- "x": 252,
- "y": 1230
+ "x": 198.25,
+ "y": 1064
},
{
- "x": 252,
- "y": 1278.4
+ "x": 198.25,
+ "y": 1112.4
},
{
- "x": 252,
- "y": 1303.5
+ "x": 223.45,
+ "y": 1140.1
},
{
- "x": 252,
- "y": 1355.5
+ "x": 324.25,
+ "y": 1202.5
}
],
"isCurve": true,
@@ -742,68 +742,44 @@
"labelPercentage": 0,
"route": [
{
- "x": 102,
+ "x": 104,
"y": 331
},
{
- "x": 102.4,
+ "x": 104,
"y": 379
},
{
- "x": 102.5,
+ "x": 104,
"y": 414.9
},
{
- "x": 102.5,
+ "x": 104,
"y": 450.75
},
{
- "x": 102.5,
+ "x": 104,
"y": 486.6
},
{
- "x": 102.5,
- "y": 532.3
- },
- {
- "x": 102.5,
- "y": 565
- },
- {
- "x": 102.5,
- "y": 597.7
- },
- {
- "x": 102.5,
- "y": 636.1
- },
- {
- "x": 102.5,
- "y": 661
+ "x": 104,
+ "y": 534.4
},
{
- "x": 102.5,
- "y": 685.9
+ "x": 104,
+ "y": 570.25
},
{
- "x": 102.5,
- "y": 721.2
+ "x": 104,
+ "y": 606.1
},
{
- "x": 102.5,
- "y": 749.25
+ "x": 104,
+ "y": 708.8
},
{
- "x": 102.5,
- "y": 777.3
- },
- {
- "x": 102.5,
- "y": 874.8
- },
- {
- "x": 102.5,
- "y": 948
+ "x": 104,
+ "y": 782
}
],
"isCurve": true,
@@ -839,12 +815,12 @@
"labelPercentage": 0,
"route": [
{
- "x": 605.75,
- "y": 689.5313901345291
+ "x": 670.25,
+ "y": 811.7993675333802
},
{
- "x": 518.75,
- "y": 741.5313901345291
+ "x": 587.25,
+ "y": 866.7993675333802
}
],
"animated": false,
@@ -879,32 +855,20 @@
"labelPercentage": 0,
"route": [
{
- "x": 593,
+ "x": 662,
"y": 501
},
{
- "x": 246.2,
- "y": 581.4
- },
- {
- "x": 159.5,
- "y": 618.1
- },
- {
- "x": 159.5,
- "y": 643
+ "x": 284.79999999999995,
+ "y": 589.8
},
{
- "x": 159.5,
- "y": 667.9
+ "x": 190.5,
+ "y": 634
},
{
- "x": 159.5,
- "y": 800
- },
- {
- "x": 159.5,
- "y": 888
+ "x": 190.5,
+ "y": 722
}
],
"isCurve": true,
@@ -940,20 +904,32 @@
"labelPercentage": 0,
"route": [
{
- "x": 631,
+ "x": 697,
"y": 552
},
{
- "x": 632.4,
- "y": 591.6
+ "x": 697.2,
+ "y": 600
},
{
- "x": 632.75,
- "y": 611.5
+ "x": 697.25,
+ "y": 624.1
},
{
- "x": 632.75,
- "y": 651.5
+ "x": 697.25,
+ "y": 642.25
+ },
+ {
+ "x": 697.25,
+ "y": 660.4
+ },
+ {
+ "x": 697.25,
+ "y": 732.5
+ },
+ {
+ "x": 697.25,
+ "y": 772.5
}
],
"isCurve": true,
@@ -989,12 +965,12 @@
"labelPercentage": 0,
"route": [
{
- "x": 593,
- "y": 501
+ "x": 662,
+ "y": 505
},
{
- "x": 519,
- "y": 556.4364896073903
+ "x": 587.75,
+ "y": 568.4633307868602
}
],
"animated": false,
@@ -1029,68 +1005,20 @@
"labelPercentage": 0,
"route": [
{
- "x": 605.75,
- "y": 692.5526315789474
- },
- {
- "x": 376.54999999999995,
- "y": 760.9105263157895
- },
- {
- "x": 319.25,
- "y": 790.1
- },
- {
- "x": 319.25,
- "y": 808.25
- },
- {
- "x": 319.25,
- "y": 826.4
+ "x": 670.25,
+ "y": 811.1842105263158
},
{
- "x": 319.25,
- "y": 848.5
+ "x": 376.45,
+ "y": 873.0368421052632
},
{
- "x": 319.25,
- "y": 863.5
- },
- {
- "x": 319.25,
- "y": 878.5
- },
- {
- "x": 319.25,
- "y": 905.1
- },
- {
- "x": 319.25,
- "y": 930
- },
- {
- "x": 319.25,
- "y": 954.9
- },
- {
- "x": 319.25,
- "y": 988.1
- },
- {
- "x": 319.25,
- "y": 1013
- },
- {
- "x": 319.25,
- "y": 1037.9
- },
- {
- "x": 307.65,
- "y": 1133.9
+ "x": 283.8,
+ "y": 968.7
},
{
- "x": 261.25,
- "y": 1209.5
+ "x": 207,
+ "y": 1047.5
}
],
"isCurve": true,
@@ -1126,19 +1054,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 593,
- "y": 481
+ "x": 662,
+ "y": 473
},
{
- "x": 313.4,
- "y": 394.6
+ "x": 517.8,
+ "y": 393
},
{
- "x": 243.4,
+ "x": 481.8,
"y": 364.6
},
{
- "x": 243,
+ "x": 482,
"y": 331
}
],
@@ -1175,23 +1103,14 @@
"labelPercentage": 0,
"route": [
{
- "x": 238.75,
- "y": 887.5
+ "x": 434,
+ "y": 896.5
},
{
- "x": 238.75,
- "y": 799.9
- },
- {
- "x": 312.15,
- "y": 760.5814720812183
- },
- {
- "x": 605.75,
- "y": 690.9073604060914
+ "x": 670,
+ "y": 813.5
}
],
- "isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
@@ -1224,32 +1143,56 @@
"labelPercentage": 0,
"route": [
{
- "x": 215,
+ "x": 454,
"y": 331
},
{
- "x": 215.4,
+ "x": 453.8,
"y": 364.6
},
{
- "x": 215.5,
+ "x": 453.75,
"y": 396.9
},
{
- "x": 215.5,
+ "x": 453.75,
"y": 432.75
},
{
- "x": 215.5,
+ "x": 453.75,
"y": 468.6
},
{
- "x": 293.55,
- "y": 617.0258238466147
+ "x": 453.75,
+ "y": 516.4
+ },
+ {
+ "x": 453.75,
+ "y": 552.25
+ },
+ {
+ "x": 453.75,
+ "y": 588.1
+ },
+ {
+ "x": 453.75,
+ "y": 624.1
+ },
+ {
+ "x": 453.75,
+ "y": 642.25
+ },
+ {
+ "x": 453.75,
+ "y": 660.4
+ },
+ {
+ "x": 496.95,
+ "y": 737.3
},
{
- "x": 605.75,
- "y": 679.1291192330737
+ "x": 669.75,
+ "y": 796.5
}
],
"isCurve": true,
diff --git a/e2etests/testdata/stable/chaos2/dagre/sketch.exp.svg b/e2etests/testdata/stable/chaos2/dagre/sketch.exp.svg
index 7fcffbc46a..7a64bd729e 100644
--- a/e2etests/testdata/stable/chaos2/dagre/sketch.exp.svg
+++ b/e2etests/testdata/stable/chaos2/dagre/sketch.exp.svg
@@ -1,4 +1,4 @@
-aabbllmmnnoocciikkddgghhjjeeff1122 334455667788
-
-
-
-
-
-
-
-
-
+aabbllmmnnoocciikkddgghhjjeeff1122 334455667788
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/e2etests/testdata/stable/container_edges/dagre/board.exp.json b/e2etests/testdata/stable/container_edges/dagre/board.exp.json
index e8517e03ba..29374e21ec 100644
--- a/e2etests/testdata/stable/container_edges/dagre/board.exp.json
+++ b/e2etests/testdata/stable/container_edges/dagre/board.exp.json
@@ -7,7 +7,7 @@
"id": "a",
"type": "rectangle",
"pos": {
- "x": 253,
+ "x": 276,
"y": 0
},
"width": 53,
@@ -51,7 +51,7 @@
"x": 193,
"y": 207
},
- "width": 153,
+ "width": 176,
"height": 657,
"opacity": 1,
"strokeDash": 0,
@@ -89,7 +89,7 @@
"id": "g.b",
"type": "rectangle",
"pos": {
- "x": 253,
+ "x": 276,
"y": 236
},
"width": 53,
@@ -294,7 +294,7 @@
"id": "f",
"type": "rectangle",
"pos": {
- "x": 244,
+ "x": 267,
"y": 964
},
"width": 51,
@@ -360,19 +360,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 279.5,
+ "x": 302.75,
"y": 66
},
{
- "x": 279.5,
+ "x": 302.75,
"y": 106
},
{
- "x": 279.5,
+ "x": 302.75,
"y": 180.1
},
{
- "x": 279.5,
+ "x": 302.75,
"y": 236.5
}
],
@@ -409,32 +409,32 @@
"labelPercentage": 0,
"route": [
{
- "x": 262.3042168674699,
+ "x": 280.28614457831327,
"y": 302.5
},
{
- "x": 241.460843373494,
+ "x": 253.05722891566265,
"y": 326.1
},
{
- "x": 236.25,
+ "x": 246.25,
"y": 342
},
{
- "x": 236.25,
+ "x": 246.25,
"y": 357
},
{
- "x": 236.25,
+ "x": 246.25,
"y": 372
},
{
- "x": 211.65,
- "y": 453.3
+ "x": 219.65,
+ "y": 453.5
},
{
"x": 113.25,
- "y": 538.5
+ "y": 539.5
}
],
"isCurve": true,
@@ -470,19 +470,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 86.5,
+ "x": 73.25,
"y": 648
},
{
- "x": 224.9,
+ "x": 203.65,
"y": 688
},
{
- "x": 259.5,
+ "x": 239.05,
"y": 712.1
},
{
- "x": 259.5,
+ "x": 250.25,
"y": 768.5
}
],
@@ -527,11 +527,11 @@
"y": 858.1
},
{
- "x": 260.7,
+ "x": 263.5,
"y": 924
},
{
- "x": 265.5,
+ "x": 279.5,
"y": 964
}
],
@@ -568,11 +568,11 @@
"labelPercentage": 0,
"route": [
{
- "x": 291.96385542168673,
+ "x": 305.9698795180723,
"y": 964
},
{
- "x": 319.1927710843373,
+ "x": 321.99397590361446,
"y": 924
},
{
@@ -617,14 +617,23 @@
"labelPercentage": 0,
"route": [
{
- "x": 192.5,
- "y": 508
+ "x": 192.75,
+ "y": 713
+ },
+ {
+ "x": 126.35,
+ "y": 661
},
{
- "x": 152.5,
- "y": 541.5
+ "x": 109.75,
+ "y": 642.1
+ },
+ {
+ "x": 109.75,
+ "y": 618.5
}
],
+ "isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
diff --git a/e2etests/testdata/stable/container_edges/dagre/sketch.exp.svg b/e2etests/testdata/stable/container_edges/dagre/sketch.exp.svg
index dc4e99ad3a..3270a85122 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 @@
-agdfbhec
-
+.fill-N1{fill:#0A0F25;}.fill-N2{fill:#676C7E;}.fill-N3{fill:#9499AB;}.fill-N4{fill:#CFD2DD;}.fill-N5{fill:#DEE1EB;}.fill-N6{fill:#EEF1F8;}.fill-N7{fill:#FFFFFF;}.fill-B1{fill:#0D32B2;}.fill-B2{fill:#0D32B2;}.fill-B3{fill:#E3E9FD;}.fill-B4{fill:#E3E9FD;}.fill-B5{fill:#EDF0FD;}.fill-B6{fill:#F7F8FE;}.fill-AA2{fill:#4A6FF3;}.fill-AA4{fill:#EDF0FD;}.fill-AA5{fill:#F7F8FE;}.fill-AB4{fill:#EDF0FD;}.fill-AB5{fill:#F7F8FE;}.stroke-N1{stroke:#0A0F25;}.stroke-N2{stroke:#676C7E;}.stroke-N3{stroke:#9499AB;}.stroke-N4{stroke:#CFD2DD;}.stroke-N5{stroke:#DEE1EB;}.stroke-N6{stroke:#EEF1F8;}.stroke-N7{stroke:#FFFFFF;}.stroke-B1{stroke:#0D32B2;}.stroke-B2{stroke:#0D32B2;}.stroke-B3{stroke:#E3E9FD;}.stroke-B4{stroke:#E3E9FD;}.stroke-B5{stroke:#EDF0FD;}.stroke-B6{stroke:#F7F8FE;}.stroke-AA2{stroke:#4A6FF3;}.stroke-AA4{stroke:#EDF0FD;}.stroke-AA5{stroke:#F7F8FE;}.stroke-AB4{stroke:#EDF0FD;}.stroke-AB5{stroke:#F7F8FE;}.background-color-N1{background-color:#0A0F25;}.background-color-N2{background-color:#676C7E;}.background-color-N3{background-color:#9499AB;}.background-color-N4{background-color:#CFD2DD;}.background-color-N5{background-color:#DEE1EB;}.background-color-N6{background-color:#EEF1F8;}.background-color-N7{background-color:#FFFFFF;}.background-color-B1{background-color:#0D32B2;}.background-color-B2{background-color:#0D32B2;}.background-color-B3{background-color:#E3E9FD;}.background-color-B4{background-color:#E3E9FD;}.background-color-B5{background-color:#EDF0FD;}.background-color-B6{background-color:#F7F8FE;}.background-color-AA2{background-color:#4A6FF3;}.background-color-AA4{background-color:#EDF0FD;}.background-color-AA5{background-color:#F7F8FE;}.background-color-AB4{background-color:#EDF0FD;}.background-color-AB5{background-color:#F7F8FE;}.color-N1{color:#0A0F25;}.color-N2{color:#676C7E;}.color-N3{color:#9499AB;}.color-N4{color:#CFD2DD;}.color-N5{color:#DEE1EB;}.color-N6{color:#EEF1F8;}.color-N7{color:#FFFFFF;}.color-B1{color:#0D32B2;}.color-B2{color:#0D32B2;}.color-B3{color:#E3E9FD;}.color-B4{color:#E3E9FD;}.color-B5{color:#EDF0FD;}.color-B6{color:#F7F8FE;}.color-AA2{color:#4A6FF3;}.color-AA4{color:#EDF0FD;}.color-AA5{color:#F7F8FE;}.color-AB4{color:#EDF0FD;}.color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>agdfbhec
+
\ No newline at end of file
diff --git a/e2etests/testdata/stable/different_subgraphs/dagre/board.exp.json b/e2etests/testdata/stable/different_subgraphs/dagre/board.exp.json
index 933ee0f3bc..d23f99164b 100644
--- a/e2etests/testdata/stable/different_subgraphs/dagre/board.exp.json
+++ b/e2etests/testdata/stable/different_subgraphs/dagre/board.exp.json
@@ -7,7 +7,7 @@
"id": "a",
"type": "rectangle",
"pos": {
- "x": 229,
+ "x": 301,
"y": 50
},
"width": 53,
@@ -48,7 +48,7 @@
"id": "tree",
"type": "rectangle",
"pos": {
- "x": 218,
+ "x": 75,
"y": 216
},
"width": 74,
@@ -89,7 +89,7 @@
"id": "and",
"type": "rectangle",
"pos": {
- "x": 6,
+ "x": 292,
"y": 216
},
"width": 72,
@@ -130,7 +130,7 @@
"id": "nodes",
"type": "rectangle",
"pos": {
- "x": 352,
+ "x": 424,
"y": 216
},
"width": 87,
@@ -171,7 +171,7 @@
"id": "some",
"type": "rectangle",
"pos": {
- "x": 0,
+ "x": 286,
"y": 382
},
"width": 83,
@@ -212,7 +212,7 @@
"id": "more",
"type": "rectangle",
"pos": {
- "x": 143,
+ "x": 0,
"y": 382
},
"width": 81,
@@ -253,7 +253,7 @@
"id": "many",
"type": "rectangle",
"pos": {
- "x": 284,
+ "x": 141,
"y": 382
},
"width": 85,
@@ -294,7 +294,7 @@
"id": "then",
"type": "rectangle",
"pos": {
- "x": 508,
+ "x": 580,
"y": 50
},
"width": 78,
@@ -335,7 +335,7 @@
"id": "here",
"type": "rectangle",
"pos": {
- "x": 499,
+ "x": 571,
"y": 216
},
"width": 76,
@@ -376,7 +376,7 @@
"id": "you",
"type": "rectangle",
"pos": {
- "x": 501,
+ "x": 573,
"y": 382
},
"width": 72,
@@ -417,7 +417,7 @@
"id": "have",
"type": "rectangle",
"pos": {
- "x": 664,
+ "x": 736,
"y": 50
},
"width": 78,
@@ -458,7 +458,7 @@
"id": "hierarchy",
"type": "rectangle",
"pos": {
- "x": 637,
+ "x": 708,
"y": 216
},
"width": 113,
@@ -499,10 +499,10 @@
"id": "finally",
"type": "rectangle",
"pos": {
- "x": 791,
+ "x": 863,
"y": 41
},
- "width": 321,
+ "width": 311,
"height": 623,
"opacity": 1,
"strokeDash": 0,
@@ -540,8 +540,8 @@
"id": "another",
"type": "rectangle",
"pos": {
- "x": 1303,
- "y": 382
+ "x": 879,
+ "y": 764
},
"width": 103,
"height": 66,
@@ -581,8 +581,8 @@
"id": "of",
"type": "rectangle",
"pos": {
- "x": 1324,
- "y": 548
+ "x": 901,
+ "y": 930
},
"width": 60,
"height": 66,
@@ -622,8 +622,8 @@
"id": "nesting",
"type": "rectangle",
"pos": {
- "x": 1153,
- "y": 216
+ "x": 1214,
+ "y": 548
},
"width": 98,
"height": 66,
@@ -663,8 +663,8 @@
"id": "trees",
"type": "rectangle",
"pos": {
- "x": 1161,
- "y": 382
+ "x": 1168,
+ "y": 764
},
"width": 82,
"height": 66,
@@ -704,7 +704,7 @@
"id": "finally.a",
"type": "rectangle",
"pos": {
- "x": 1002,
+ "x": 1000,
"y": 236
},
"width": 53,
@@ -745,7 +745,7 @@
"id": "finally.tree",
"type": "rectangle",
"pos": {
- "x": 851,
+ "x": 922,
"y": 402
},
"width": 74,
@@ -786,7 +786,7 @@
"id": "finally.inside",
"type": "rectangle",
"pos": {
- "x": 985,
+ "x": 982,
"y": 70
},
"width": 88,
@@ -827,7 +827,7 @@
"id": "finally.hierarchy",
"type": "rectangle",
"pos": {
- "x": 831,
+ "x": 903,
"y": 568
},
"width": 113,
@@ -868,7 +868,7 @@
"id": "finally.root",
"type": "rectangle",
"pos": {
- "x": 985,
+ "x": 1056,
"y": 402
},
"width": 75,
@@ -934,19 +934,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 255,
- "y": 116
+ "x": 301,
+ "y": 93.20649651972158
},
{
- "x": 255,
- "y": 156
+ "x": 149.79999999999998,
+ "y": 151.44129930394433
},
{
- "x": 255,
+ "x": 112,
"y": 176
},
{
- "x": 255,
+ "x": 112,
"y": 216
}
],
@@ -983,19 +983,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 228.5,
- "y": 93.30210772833723
+ "x": 327.5,
+ "y": 116
},
{
- "x": 78.9,
- "y": 151.46042154566746
+ "x": 327.5,
+ "y": 156
},
{
- "x": 41.5,
+ "x": 327.5,
"y": 176
},
{
- "x": 41.5,
+ "x": 327.5,
"y": 216
}
],
@@ -1032,19 +1032,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 282.5,
- "y": 98.65480427046263
+ "x": 354,
+ "y": 98.76702508960574
},
{
- "x": 372.9,
- "y": 152.53096085409254
+ "x": 444.4,
+ "y": 152.55340501792114
},
{
- "x": 395.5,
+ "x": 467,
"y": 176
},
{
- "x": 395.5,
+ "x": 467,
"y": 216
}
],
@@ -1081,19 +1081,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 41.5,
+ "x": 327.5,
"y": 282
},
{
- "x": 41.5,
+ "x": 327.5,
"y": 322
},
{
- "x": 41.5,
+ "x": 327.5,
"y": 342
},
{
- "x": 41.5,
+ "x": 327.5,
"y": 382
}
],
@@ -1130,19 +1130,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 226.5722891566265,
+ "x": 83.57228915662651,
"y": 282
},
{
- "x": 192.1144578313253,
+ "x": 49.1144578313253,
"y": 322
},
{
- "x": 183.5,
+ "x": 40.5,
"y": 342
},
{
- "x": 183.5,
+ "x": 40.5,
"y": 382
}
],
@@ -1179,19 +1179,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 283.52710843373495,
+ "x": 140.4277108433735,
"y": 282
},
{
- "x": 318.105421686747,
+ "x": 174.8855421686747,
"y": 322
},
{
- "x": 326.75,
+ "x": 183.5,
"y": 342
},
{
- "x": 326.75,
+ "x": 183.5,
"y": 382
}
],
@@ -1228,19 +1228,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 543.0240963855422,
+ "x": 614.5240963855422,
"y": 116
},
{
- "x": 538.2048192771084,
+ "x": 609.7048192771084,
"y": 156
},
{
- "x": 537,
+ "x": 608.5,
"y": 176
},
{
- "x": 537,
+ "x": 608.5,
"y": 216
}
],
@@ -1277,19 +1277,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 537,
+ "x": 608.5,
"y": 282
},
{
- "x": 537,
+ "x": 608.5,
"y": 322
},
{
- "x": 537,
+ "x": 608.5,
"y": 342
},
{
- "x": 537,
+ "x": 608.5,
"y": 382
}
],
@@ -1326,19 +1326,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 703.25,
+ "x": 774.75,
"y": 116
},
{
- "x": 703.25,
+ "x": 774.75,
"y": 156
},
{
- "x": 702.05,
+ "x": 773.55,
"y": 176
},
{
- "x": 697.25,
+ "x": 768.75,
"y": 216
}
],
@@ -1375,19 +1375,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 577.7138554216867,
+ "x": 649.2138554216867,
"y": 116
},
{
- "x": 614.9427710843373,
+ "x": 686.4427710843373,
"y": 156
},
{
- "x": 632.65,
+ "x": 704.15,
"y": 176
},
{
- "x": 666.25,
+ "x": 737.75,
"y": 216
}
],
@@ -1424,14 +1424,23 @@
"labelPercentage": 0,
"route": [
{
- "x": 1112.75,
- "y": 344
+ "x": 930.75,
+ "y": 664
},
{
- "x": 1302.75,
- "y": 399.92239858906527
+ "x": 930.75,
+ "y": 704
+ },
+ {
+ "x": 930.75,
+ "y": 724
+ },
+ {
+ "x": 930.75,
+ "y": 764
}
],
+ "isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
@@ -1464,20 +1473,20 @@
"labelPercentage": 0,
"route": [
{
- "x": 1354.25,
- "y": 448
+ "x": 930.75,
+ "y": 830
},
{
- "x": 1354.25,
- "y": 488
+ "x": 930.75,
+ "y": 870
},
{
- "x": 1354.25,
- "y": 508
+ "x": 930.75,
+ "y": 890
},
{
- "x": 1354.25,
- "y": 548
+ "x": 930.75,
+ "y": 930
}
],
"isCurve": true,
@@ -1513,20 +1522,20 @@
"labelPercentage": 0,
"route": [
{
- "x": 1201.75,
- "y": 282
+ "x": 1263.25,
+ "y": 614
},
{
- "x": 1201.75,
- "y": 322
+ "x": 1263.25,
+ "y": 654
},
{
- "x": 1201.75,
- "y": 342
+ "x": 1256.65,
+ "y": 724
},
{
- "x": 1201.75,
- "y": 382
+ "x": 1230.25,
+ "y": 764
}
],
"isCurve": true,
@@ -1562,14 +1571,23 @@
"labelPercentage": 0,
"route": [
{
- "x": 1112.75,
- "y": 366
+ "x": 1055,
+ "y": 664
+ },
+ {
+ "x": 1055,
+ "y": 704
},
{
- "x": 1160.75,
- "y": 392.4635761589404
+ "x": 1077.55,
+ "y": 726.1733333333333
+ },
+ {
+ "x": 1167.75,
+ "y": 774.8666666666667
}
],
+ "isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
@@ -1602,19 +1620,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 1002.25,
- "y": 285.0716814159292
+ "x": 999.75,
+ "y": 302.20631970260223
},
{
- "x": 910.45,
- "y": 339.01433628318586
+ "x": 967.15,
+ "y": 342.44126394052046
},
{
- "x": 887.5,
+ "x": 959,
"y": 362.5
},
{
- "x": 887.5,
+ "x": 959,
"y": 402.5
}
],
@@ -1651,19 +1669,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 1028.75,
+ "x": 1026.25,
"y": 136.5
},
{
- "x": 1028.75,
+ "x": 1026.25,
"y": 176.5
},
{
- "x": 1028.75,
+ "x": 1026.25,
"y": 196.5
},
{
- "x": 1028.75,
+ "x": 1026.25,
"y": 236.5
}
],
@@ -1700,19 +1718,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 887.5,
+ "x": 959,
"y": 468.5
},
{
- "x": 887.5,
+ "x": 959,
"y": 508.5
},
{
- "x": 887.5,
+ "x": 959,
"y": 528.5
},
{
- "x": 887.5,
+ "x": 959,
"y": 568.5
}
],
@@ -1749,19 +1767,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 1026.066265060241,
- "y": 302.5
+ "x": 1052.75,
+ "y": 302.20631970260223
},
{
- "x": 1022.8132530120482,
- "y": 342.5
+ "x": 1085.35,
+ "y": 342.44126394052046
},
{
- "x": 1022,
+ "x": 1093.5,
"y": 362.5
},
{
- "x": 1022,
+ "x": 1093.5,
"y": 402.5
}
],
diff --git a/e2etests/testdata/stable/different_subgraphs/dagre/sketch.exp.svg b/e2etests/testdata/stable/different_subgraphs/dagre/sketch.exp.svg
index cc87982409..6cc2e41159 100644
--- a/e2etests/testdata/stable/different_subgraphs/dagre/sketch.exp.svg
+++ b/e2etests/testdata/stable/different_subgraphs/dagre/sketch.exp.svg
@@ -1,4 +1,4 @@
-atreeandnodessomemoremanythenhereyouhavehierarchyfinallyanotherofnestingtreesatreeinsidehierarchyroot
-
+.fill-N1{fill:#0A0F25;}.fill-N2{fill:#676C7E;}.fill-N3{fill:#9499AB;}.fill-N4{fill:#CFD2DD;}.fill-N5{fill:#DEE1EB;}.fill-N6{fill:#EEF1F8;}.fill-N7{fill:#FFFFFF;}.fill-B1{fill:#0D32B2;}.fill-B2{fill:#0D32B2;}.fill-B3{fill:#E3E9FD;}.fill-B4{fill:#E3E9FD;}.fill-B5{fill:#EDF0FD;}.fill-B6{fill:#F7F8FE;}.fill-AA2{fill:#4A6FF3;}.fill-AA4{fill:#EDF0FD;}.fill-AA5{fill:#F7F8FE;}.fill-AB4{fill:#EDF0FD;}.fill-AB5{fill:#F7F8FE;}.stroke-N1{stroke:#0A0F25;}.stroke-N2{stroke:#676C7E;}.stroke-N3{stroke:#9499AB;}.stroke-N4{stroke:#CFD2DD;}.stroke-N5{stroke:#DEE1EB;}.stroke-N6{stroke:#EEF1F8;}.stroke-N7{stroke:#FFFFFF;}.stroke-B1{stroke:#0D32B2;}.stroke-B2{stroke:#0D32B2;}.stroke-B3{stroke:#E3E9FD;}.stroke-B4{stroke:#E3E9FD;}.stroke-B5{stroke:#EDF0FD;}.stroke-B6{stroke:#F7F8FE;}.stroke-AA2{stroke:#4A6FF3;}.stroke-AA4{stroke:#EDF0FD;}.stroke-AA5{stroke:#F7F8FE;}.stroke-AB4{stroke:#EDF0FD;}.stroke-AB5{stroke:#F7F8FE;}.background-color-N1{background-color:#0A0F25;}.background-color-N2{background-color:#676C7E;}.background-color-N3{background-color:#9499AB;}.background-color-N4{background-color:#CFD2DD;}.background-color-N5{background-color:#DEE1EB;}.background-color-N6{background-color:#EEF1F8;}.background-color-N7{background-color:#FFFFFF;}.background-color-B1{background-color:#0D32B2;}.background-color-B2{background-color:#0D32B2;}.background-color-B3{background-color:#E3E9FD;}.background-color-B4{background-color:#E3E9FD;}.background-color-B5{background-color:#EDF0FD;}.background-color-B6{background-color:#F7F8FE;}.background-color-AA2{background-color:#4A6FF3;}.background-color-AA4{background-color:#EDF0FD;}.background-color-AA5{background-color:#F7F8FE;}.background-color-AB4{background-color:#EDF0FD;}.background-color-AB5{background-color:#F7F8FE;}.color-N1{color:#0A0F25;}.color-N2{color:#676C7E;}.color-N3{color:#9499AB;}.color-N4{color:#CFD2DD;}.color-N5{color:#DEE1EB;}.color-N6{color:#EEF1F8;}.color-N7{color:#FFFFFF;}.color-B1{color:#0D32B2;}.color-B2{color:#0D32B2;}.color-B3{color:#E3E9FD;}.color-B4{color:#E3E9FD;}.color-B5{color:#EDF0FD;}.color-B6{color:#F7F8FE;}.color-AA2{color:#4A6FF3;}.color-AA4{color:#EDF0FD;}.color-AA5{color:#F7F8FE;}.color-AB4{color:#EDF0FD;}.color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>atreeandnodessomemoremanythenhereyouhavehierarchyfinallyanotherofnestingtreesatreeinsidehierarchyroot
+
\ No newline at end of file
diff --git a/e2etests/testdata/stable/direction/dagre/board.exp.json b/e2etests/testdata/stable/direction/dagre/board.exp.json
index 3c67c18f3a..a8b81a5a5a 100644
--- a/e2etests/testdata/stable/direction/dagre/board.exp.json
+++ b/e2etests/testdata/stable/direction/dagre/board.exp.json
@@ -7,7 +7,7 @@
"id": "a",
"type": "rectangle",
"pos": {
- "x": 114,
+ "x": 61,
"y": 0
},
"width": 53,
@@ -51,8 +51,8 @@
"x": 0,
"y": 207
},
- "width": 297,
- "height": 1055,
+ "width": 174,
+ "height": 1553,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
@@ -89,8 +89,8 @@
"id": "c",
"type": "rectangle",
"pos": {
- "x": 338,
- "y": 432
+ "x": 61,
+ "y": 1860
},
"width": 53,
"height": 66,
@@ -130,8 +130,8 @@
"id": "d",
"type": "rectangle",
"pos": {
- "x": 338,
- "y": 598
+ "x": 60,
+ "y": 2026
},
"width": 54,
"height": 66,
@@ -171,8 +171,8 @@
"id": "e",
"type": "rectangle",
"pos": {
- "x": 338,
- "y": 764
+ "x": 61,
+ "y": 2192
},
"width": 53,
"height": 66,
@@ -212,7 +212,7 @@
"id": "b.1",
"type": "rectangle",
"pos": {
- "x": 114,
+ "x": 61,
"y": 236
},
"width": 52,
@@ -256,7 +256,7 @@
"x": 20,
"y": 438
},
- "width": 143,
+ "width": 134,
"height": 794,
"opacity": 1,
"strokeDash": 0,
@@ -294,8 +294,8 @@
"id": "b.3",
"type": "rectangle",
"pos": {
- "x": 204,
- "y": 618
+ "x": 61,
+ "y": 1332
},
"width": 53,
"height": 66,
@@ -335,8 +335,8 @@
"id": "b.4",
"type": "rectangle",
"pos": {
- "x": 204,
- "y": 784
+ "x": 60,
+ "y": 1498
},
"width": 54,
"height": 66,
@@ -376,8 +376,8 @@
"id": "b.5",
"type": "rectangle",
"pos": {
- "x": 204,
- "y": 950
+ "x": 61,
+ "y": 1664
},
"width": 53,
"height": 66,
@@ -417,7 +417,7 @@
"id": "b.2.a",
"type": "rectangle",
"pos": {
- "x": 71,
+ "x": 61,
"y": 470
},
"width": 53,
@@ -647,19 +647,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 140.25,
+ "x": 87,
"y": 66
},
{
- "x": 140.25,
+ "x": 87,
"y": 106
},
{
- "x": 140.25,
+ "x": 87,
"y": 126
},
{
- "x": 140.25,
+ "x": 87,
"y": 166
}
],
@@ -696,14 +696,23 @@
"labelPercentage": 0,
"route": [
{
- "x": 297.75,
- "y": 423
+ "x": 87,
+ "y": 1760
},
{
- "x": 337.75,
- "y": 448
+ "x": 87,
+ "y": 1800
+ },
+ {
+ "x": 87,
+ "y": 1820
+ },
+ {
+ "x": 87,
+ "y": 1860
}
],
+ "isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
@@ -736,20 +745,20 @@
"labelPercentage": 0,
"route": [
{
- "x": 364.75,
- "y": 498
+ "x": 87,
+ "y": 1926
},
{
- "x": 364.75,
- "y": 538
+ "x": 87,
+ "y": 1966
},
{
- "x": 364.75,
- "y": 558
+ "x": 87,
+ "y": 1986
},
{
- "x": 364.75,
- "y": 598
+ "x": 87,
+ "y": 2026
}
],
"isCurve": true,
@@ -785,20 +794,20 @@
"labelPercentage": 0,
"route": [
{
- "x": 364.75,
- "y": 664
+ "x": 87,
+ "y": 2092
},
{
- "x": 364.75,
- "y": 704
+ "x": 87,
+ "y": 2132
},
{
- "x": 364.75,
- "y": 724
+ "x": 87,
+ "y": 2152
},
{
- "x": 364.75,
- "y": 764
+ "x": 87,
+ "y": 2192
}
],
"isCurve": true,
@@ -834,19 +843,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 123.05421686746988,
+ "x": 87,
"y": 302.5
},
{
- "x": 102.21084337349397,
+ "x": 87,
"y": 342.5
},
{
- "x": 97,
+ "x": 87,
"y": 362.5
},
{
- "x": 97,
+ "x": 87,
"y": 402.5
}
],
@@ -883,14 +892,23 @@
"labelPercentage": 0,
"route": [
{
- "x": 163.5,
- "y": 601.5
+ "x": 87,
+ "y": 1232.5
+ },
+ {
+ "x": 87,
+ "y": 1272.5
+ },
+ {
+ "x": 87,
+ "y": 1292.5
},
{
- "x": 204.5,
- "y": 631.5
+ "x": 87,
+ "y": 1332.5
}
],
+ "isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
@@ -923,20 +941,20 @@
"labelPercentage": 0,
"route": [
{
- "x": 230.75,
- "y": 684.5
+ "x": 87,
+ "y": 1398.5
},
{
- "x": 230.75,
- "y": 724.5
+ "x": 87,
+ "y": 1438.5
},
{
- "x": 230.75,
- "y": 744.5
+ "x": 87,
+ "y": 1458.5
},
{
- "x": 230.75,
- "y": 784.5
+ "x": 87,
+ "y": 1498.5
}
],
"isCurve": true,
@@ -972,20 +990,20 @@
"labelPercentage": 0,
"route": [
{
- "x": 230.75,
- "y": 850.5
+ "x": 87,
+ "y": 1564.5
},
{
- "x": 230.75,
- "y": 890.5
+ "x": 87,
+ "y": 1604.5
},
{
- "x": 230.75,
- "y": 910.5
+ "x": 87,
+ "y": 1624.5
},
{
- "x": 230.75,
- "y": 950.5
+ "x": 87,
+ "y": 1664.5
}
],
"isCurve": true,
@@ -1021,11 +1039,11 @@
"labelPercentage": 0,
"route": [
{
- "x": 93.02409638554217,
+ "x": 87,
"y": 536.5
},
{
- "x": 88.20481927710843,
+ "x": 87,
"y": 576.5
},
{
diff --git a/e2etests/testdata/stable/direction/dagre/sketch.exp.svg b/e2etests/testdata/stable/direction/dagre/sketch.exp.svg
index 8350839545..46770f48dc 100644
--- a/e2etests/testdata/stable/direction/dagre/sketch.exp.svg
+++ b/e2etests/testdata/stable/direction/dagre/sketch.exp.svg
@@ -1,4 +1,4 @@
-abcde12345abcde
-
+.fill-N1{fill:#0A0F25;}.fill-N2{fill:#676C7E;}.fill-N3{fill:#9499AB;}.fill-N4{fill:#CFD2DD;}.fill-N5{fill:#DEE1EB;}.fill-N6{fill:#EEF1F8;}.fill-N7{fill:#FFFFFF;}.fill-B1{fill:#0D32B2;}.fill-B2{fill:#0D32B2;}.fill-B3{fill:#E3E9FD;}.fill-B4{fill:#E3E9FD;}.fill-B5{fill:#EDF0FD;}.fill-B6{fill:#F7F8FE;}.fill-AA2{fill:#4A6FF3;}.fill-AA4{fill:#EDF0FD;}.fill-AA5{fill:#F7F8FE;}.fill-AB4{fill:#EDF0FD;}.fill-AB5{fill:#F7F8FE;}.stroke-N1{stroke:#0A0F25;}.stroke-N2{stroke:#676C7E;}.stroke-N3{stroke:#9499AB;}.stroke-N4{stroke:#CFD2DD;}.stroke-N5{stroke:#DEE1EB;}.stroke-N6{stroke:#EEF1F8;}.stroke-N7{stroke:#FFFFFF;}.stroke-B1{stroke:#0D32B2;}.stroke-B2{stroke:#0D32B2;}.stroke-B3{stroke:#E3E9FD;}.stroke-B4{stroke:#E3E9FD;}.stroke-B5{stroke:#EDF0FD;}.stroke-B6{stroke:#F7F8FE;}.stroke-AA2{stroke:#4A6FF3;}.stroke-AA4{stroke:#EDF0FD;}.stroke-AA5{stroke:#F7F8FE;}.stroke-AB4{stroke:#EDF0FD;}.stroke-AB5{stroke:#F7F8FE;}.background-color-N1{background-color:#0A0F25;}.background-color-N2{background-color:#676C7E;}.background-color-N3{background-color:#9499AB;}.background-color-N4{background-color:#CFD2DD;}.background-color-N5{background-color:#DEE1EB;}.background-color-N6{background-color:#EEF1F8;}.background-color-N7{background-color:#FFFFFF;}.background-color-B1{background-color:#0D32B2;}.background-color-B2{background-color:#0D32B2;}.background-color-B3{background-color:#E3E9FD;}.background-color-B4{background-color:#E3E9FD;}.background-color-B5{background-color:#EDF0FD;}.background-color-B6{background-color:#F7F8FE;}.background-color-AA2{background-color:#4A6FF3;}.background-color-AA4{background-color:#EDF0FD;}.background-color-AA5{background-color:#F7F8FE;}.background-color-AB4{background-color:#EDF0FD;}.background-color-AB5{background-color:#F7F8FE;}.color-N1{color:#0A0F25;}.color-N2{color:#676C7E;}.color-N3{color:#9499AB;}.color-N4{color:#CFD2DD;}.color-N5{color:#DEE1EB;}.color-N6{color:#EEF1F8;}.color-N7{color:#FFFFFF;}.color-B1{color:#0D32B2;}.color-B2{color:#0D32B2;}.color-B3{color:#E3E9FD;}.color-B4{color:#E3E9FD;}.color-B5{color:#EDF0FD;}.color-B6{color:#F7F8FE;}.color-AA2{color:#4A6FF3;}.color-AA4{color:#EDF0FD;}.color-AA5{color:#F7F8FE;}.color-AB4{color:#EDF0FD;}.color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>abcde12345abcde
+
\ No newline at end of file
diff --git a/e2etests/testdata/stable/one_container_loop/dagre/board.exp.json b/e2etests/testdata/stable/one_container_loop/dagre/board.exp.json
index 17fa5d4eaa..732fec1420 100644
--- a/e2etests/testdata/stable/one_container_loop/dagre/board.exp.json
+++ b/e2etests/testdata/stable/one_container_loop/dagre/board.exp.json
@@ -10,7 +10,7 @@
"x": 0,
"y": 41
},
- "width": 299,
+ "width": 313,
"height": 125,
"opacity": 1,
"strokeDash": 0,
@@ -48,7 +48,7 @@
"id": "a.b",
"type": "rectangle",
"pos": {
- "x": 60,
+ "x": 40,
"y": 70
},
"width": 53,
@@ -89,7 +89,7 @@
"id": "c",
"type": "rectangle",
"pos": {
- "x": 93,
+ "x": 130,
"y": 764
},
"width": 53,
@@ -130,7 +130,7 @@
"id": "d",
"type": "rectangle",
"pos": {
- "x": 206,
+ "x": 130,
"y": 598
},
"width": 54,
@@ -171,7 +171,7 @@
"id": "e",
"type": "rectangle",
"pos": {
- "x": 93,
+ "x": 244,
"y": 598
},
"width": 53,
@@ -212,7 +212,7 @@
"id": "f",
"type": "rectangle",
"pos": {
- "x": 208,
+ "x": 131,
"y": 432
},
"width": 51,
@@ -253,7 +253,7 @@
"id": "g",
"type": "rectangle",
"pos": {
- "x": 206,
+ "x": 130,
"y": 266
},
"width": 54,
@@ -294,7 +294,7 @@
"id": "a.h",
"type": "rectangle",
"pos": {
- "x": 207,
+ "x": 187,
"y": 70
},
"width": 53,
@@ -360,92 +360,92 @@
"labelPercentage": 0,
"route": [
{
- "x": 73.28012048192771,
+ "x": 66.5,
"y": 136.5
},
{
- "x": 57.256024096385545,
+ "x": 66.5,
"y": 160.1
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 176
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 191
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 206
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 232.6
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 257.5
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 282.4
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 315.6
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 340.5
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 365.4
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 398.6
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 423.5
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 448.4
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 481.6
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 506.5
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 531.4
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 564.6
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 589.5
},
{
- "x": 53.25,
+ "x": 66.5,
"y": 614.4
},
{
- "x": 61.25,
- "y": 724
+ "x": 79.3,
+ "y": 725.8
},
{
- "x": 93.25,
- "y": 764
+ "x": 130.5,
+ "y": 773
}
],
"isCurve": true,
@@ -481,20 +481,20 @@
"labelPercentage": 0,
"route": [
{
- "x": 233.25,
+ "x": 156.5,
"y": 664
},
{
- "x": 233.25,
+ "x": 156.5,
"y": 704
},
{
- "x": 215.85,
- "y": 726.7242290748899
+ "x": 156.5,
+ "y": 724
},
{
- "x": 146.25,
- "y": 777.6211453744494
+ "x": 156.5,
+ "y": 764
}
],
"isCurve": true,
@@ -530,20 +530,20 @@
"labelPercentage": 0,
"route": [
{
- "x": 119.75,
+ "x": 270,
"y": 664
},
{
- "x": 119.75,
+ "x": 270,
"y": 704
},
{
- "x": 119.75,
- "y": 724
+ "x": 252.6,
+ "y": 726.8
},
{
- "x": 119.75,
- "y": 764
+ "x": 183,
+ "y": 778
}
],
"isCurve": true,
@@ -579,19 +579,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 233.25,
+ "x": 156.5,
"y": 498
},
{
- "x": 233.25,
+ "x": 156.5,
"y": 538
},
{
- "x": 233.25,
+ "x": 156.5,
"y": 558
},
{
- "x": 233.25,
+ "x": 156.5,
"y": 598
}
],
@@ -628,55 +628,55 @@
"labelPercentage": 0,
"route": [
{
- "x": 119.75,
+ "x": 270,
"y": 166
},
{
- "x": 119.75,
+ "x": 270,
"y": 206
},
{
- "x": 119.75,
+ "x": 270,
"y": 232.6
},
{
- "x": 119.75,
+ "x": 270,
"y": 257.5
},
{
- "x": 119.75,
+ "x": 270,
"y": 282.4
},
{
- "x": 119.75,
+ "x": 270,
"y": 315.6
},
{
- "x": 119.75,
+ "x": 270,
"y": 340.5
},
{
- "x": 119.75,
+ "x": 270,
"y": 365.4
},
{
- "x": 119.75,
+ "x": 270,
"y": 398.6
},
{
- "x": 119.75,
+ "x": 270,
"y": 423.5
},
{
- "x": 119.75,
+ "x": 270,
"y": 448.4
},
{
- "x": 119.75,
+ "x": 270,
"y": 558
},
{
- "x": 119.75,
+ "x": 270,
"y": 598
}
],
@@ -713,19 +713,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 233.25,
+ "x": 156.5,
"y": 332
},
{
- "x": 233.25,
+ "x": 156.5,
"y": 372
},
{
- "x": 233.25,
+ "x": 156.5,
"y": 392
},
{
- "x": 233.25,
+ "x": 156.5,
"y": 432
}
],
@@ -762,19 +762,19 @@
"labelPercentage": 0,
"route": [
{
- "x": 233.25,
+ "x": 190.6867469879518,
"y": 136.5
},
{
- "x": 233.25,
+ "x": 163.33734939759034,
"y": 160.1
},
{
- "x": 233.25,
+ "x": 156.5,
"y": 226
},
{
- "x": 233.25,
+ "x": 156.5,
"y": 266
}
],
diff --git a/e2etests/testdata/stable/one_container_loop/dagre/sketch.exp.svg b/e2etests/testdata/stable/one_container_loop/dagre/sketch.exp.svg
index 29b4517f53..35deb67a3a 100644
--- a/e2etests/testdata/stable/one_container_loop/dagre/sketch.exp.svg
+++ b/e2etests/testdata/stable/one_container_loop/dagre/sketch.exp.svg
@@ -1,4 +1,4 @@
-acdefgbh
-
+.fill-N1{fill:#0A0F25;}.fill-N2{fill:#676C7E;}.fill-N3{fill:#9499AB;}.fill-N4{fill:#CFD2DD;}.fill-N5{fill:#DEE1EB;}.fill-N6{fill:#EEF1F8;}.fill-N7{fill:#FFFFFF;}.fill-B1{fill:#0D32B2;}.fill-B2{fill:#0D32B2;}.fill-B3{fill:#E3E9FD;}.fill-B4{fill:#E3E9FD;}.fill-B5{fill:#EDF0FD;}.fill-B6{fill:#F7F8FE;}.fill-AA2{fill:#4A6FF3;}.fill-AA4{fill:#EDF0FD;}.fill-AA5{fill:#F7F8FE;}.fill-AB4{fill:#EDF0FD;}.fill-AB5{fill:#F7F8FE;}.stroke-N1{stroke:#0A0F25;}.stroke-N2{stroke:#676C7E;}.stroke-N3{stroke:#9499AB;}.stroke-N4{stroke:#CFD2DD;}.stroke-N5{stroke:#DEE1EB;}.stroke-N6{stroke:#EEF1F8;}.stroke-N7{stroke:#FFFFFF;}.stroke-B1{stroke:#0D32B2;}.stroke-B2{stroke:#0D32B2;}.stroke-B3{stroke:#E3E9FD;}.stroke-B4{stroke:#E3E9FD;}.stroke-B5{stroke:#EDF0FD;}.stroke-B6{stroke:#F7F8FE;}.stroke-AA2{stroke:#4A6FF3;}.stroke-AA4{stroke:#EDF0FD;}.stroke-AA5{stroke:#F7F8FE;}.stroke-AB4{stroke:#EDF0FD;}.stroke-AB5{stroke:#F7F8FE;}.background-color-N1{background-color:#0A0F25;}.background-color-N2{background-color:#676C7E;}.background-color-N3{background-color:#9499AB;}.background-color-N4{background-color:#CFD2DD;}.background-color-N5{background-color:#DEE1EB;}.background-color-N6{background-color:#EEF1F8;}.background-color-N7{background-color:#FFFFFF;}.background-color-B1{background-color:#0D32B2;}.background-color-B2{background-color:#0D32B2;}.background-color-B3{background-color:#E3E9FD;}.background-color-B4{background-color:#E3E9FD;}.background-color-B5{background-color:#EDF0FD;}.background-color-B6{background-color:#F7F8FE;}.background-color-AA2{background-color:#4A6FF3;}.background-color-AA4{background-color:#EDF0FD;}.background-color-AA5{background-color:#F7F8FE;}.background-color-AB4{background-color:#EDF0FD;}.background-color-AB5{background-color:#F7F8FE;}.color-N1{color:#0A0F25;}.color-N2{color:#676C7E;}.color-N3{color:#9499AB;}.color-N4{color:#CFD2DD;}.color-N5{color:#DEE1EB;}.color-N6{color:#EEF1F8;}.color-N7{color:#FFFFFF;}.color-B1{color:#0D32B2;}.color-B2{color:#0D32B2;}.color-B3{color:#E3E9FD;}.color-B4{color:#E3E9FD;}.color-B5{color:#EDF0FD;}.color-B6{color:#F7F8FE;}.color-AA2{color:#4A6FF3;}.color-AA4{color:#EDF0FD;}.color-AA5{color:#F7F8FE;}.color-AB4{color:#EDF0FD;}.color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>acdefgbh
+
\ No newline at end of file