Merge pull request #1071 from donglixiaoche/near-keys-for-container

Near keys for container
This commit is contained in:
Alexander Wang 2023-04-06 22:05:02 -07:00 committed by GitHub
commit 2d7cdc5964
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 6037 additions and 780 deletions

View file

@ -1,5 +1,6 @@
#### Features 🚀
- Container with constant key near attribute now can have descendant objects and connections [#1071](https://github.com/terrastruct/d2/pull/1071)
- Multi-board SVG outputs with internal links go to their output paths [#1116](https://github.com/terrastruct/d2/pull/1116)
- New grid layout to place nodes in rows and columns [#1122](https://github.com/terrastruct/d2/pull/1122)

View file

@ -768,31 +768,35 @@ func (c *compiler) validateNear(g *d2graph.Graph) {
}
}
} else if isConst {
is := false
for _, e := range g.Edges {
if e.Src == obj || e.Dst == obj {
is = true
break
}
}
if is {
c.errorf(obj.Attributes.NearKey, "constant near keys cannot be set on connected shapes")
continue
}
if obj.Parent != g.Root {
c.errorf(obj.Attributes.NearKey, "constant near keys can only be set on root level shapes")
continue
}
if len(obj.ChildrenArray) > 0 {
c.errorf(obj.Attributes.NearKey, "constant near keys cannot be set on shapes with children")
continue
}
} else {
c.errorf(obj.Attributes.NearKey, "near key %#v must be the absolute path to a shape or one of the following constants: %s", d2format.Format(obj.Attributes.NearKey), strings.Join(d2graph.NearConstantsArray, ", "))
continue
}
}
}
for _, edge := range g.Edges {
srcNearContainer := edge.Src.OuterNearContainer()
dstNearContainer := edge.Dst.OuterNearContainer()
var isSrcNearConst, isDstNearConst bool
if srcNearContainer != nil {
_, isSrcNearConst = d2graph.NearConstants[d2graph.Key(srcNearContainer.Attributes.NearKey)[0]]
}
if dstNearContainer != nil {
_, isDstNearConst = d2graph.NearConstants[d2graph.Key(dstNearContainer.Attributes.NearKey)[0]]
}
if (isSrcNearConst || isDstNearConst) && srcNearContainer != dstNearContainer {
c.errorf(edge.References[0].Edge, "cannot connect objects from within a container, that has near constant set, to objects outside that container")
}
}
}
func (c *compiler) validateEdges(g *d2graph.Graph) {

View file

@ -1558,25 +1558,27 @@ d2/testdata/d2compiler/TestCompile/near-invalid.d2:14:9: near keys cannot be set
`,
expErr: `d2/testdata/d2compiler/TestCompile/near_bad_constant.d2:1:9: near key "txop-center" must be the absolute path to a shape or one of the following constants: top-left, top-center, top-right, center-left, center-right, bottom-left, bottom-center, bottom-right`,
},
{
name: "near_bad_container",
text: `x: {
near: top-center
y
}
`,
expErr: `d2/testdata/d2compiler/TestCompile/near_bad_container.d2:2:9: constant near keys cannot be set on shapes with children`,
},
{
name: "near_bad_connected",
text: `x: {
text: `
x: {
near: top-center
}
x -> y
`,
expErr: `d2/testdata/d2compiler/TestCompile/near_bad_connected.d2:2:9: constant near keys cannot be set on connected shapes`,
expErr: `d2/testdata/d2compiler/TestCompile/near_bad_connected.d2:5:5: cannot connect objects from within a container, that has near constant set, to objects outside that container`,
},
{
name: "near_descendant_connect_to_outside",
text: `
x: {
near: top-left
y
}
x.y -> z
`,
expErr: "d2/testdata/d2compiler/TestCompile/near_descendant_connect_to_outside.d2:6:5: cannot connect objects from within a container, that has near constant set, to objects outside that container",
},
{
name: "nested_near_constant",

View file

@ -974,6 +974,16 @@ func (obj *Object) GetDefaultSize(mtexts []*d2target.MText, ruler *textmeasure.R
return &dims, nil
}
func (obj *Object) OuterNearContainer() *Object {
for obj != nil {
if obj.Attributes.NearKey != nil {
return obj
}
obj = obj.Parent
}
return nil
}
type Edge struct {
Index int `json:"index"`

View file

@ -10,47 +10,62 @@ import (
"oss.terrastruct.com/d2/d2graph"
"oss.terrastruct.com/d2/lib/geo"
"oss.terrastruct.com/d2/lib/label"
"oss.terrastruct.com/util-go/go2"
)
const pad = 20
// Layout finds the shapes which are assigned constant near keywords and places them.
func Layout(ctx context.Context, g *d2graph.Graph, constantNears []*d2graph.Object) error {
if len(constantNears) == 0 {
func Layout(ctx context.Context, g *d2graph.Graph, constantNearGraphs []*d2graph.Graph) error {
if len(constantNearGraphs) == 0 {
return nil
}
for _, tempGraph := range constantNearGraphs {
tempGraph.Root.ChildrenArray[0].Parent = g.Root
for _, obj := range tempGraph.Objects {
obj.Graph = g
}
}
// Imagine the graph has two long texts, one at top center and one at top left.
// Top left should go left enough to not collide with center.
// So place the center ones first, then the later ones will consider them for bounding box
for _, processCenters := range []bool{true, false} {
for _, obj := range constantNears {
for _, tempGraph := range constantNearGraphs {
obj := tempGraph.Root.ChildrenArray[0]
if processCenters == strings.Contains(d2graph.Key(obj.Attributes.NearKey)[0], "-center") {
prevX, prevY := obj.TopLeft.X, obj.TopLeft.Y
obj.TopLeft = geo.NewPoint(place(obj))
dx, dy := obj.TopLeft.X-prevX, obj.TopLeft.Y-prevY
for _, subObject := range tempGraph.Objects {
// `obj` already been replaced above by `place(obj)`
if subObject == obj {
continue
}
subObject.TopLeft.X += dx
subObject.TopLeft.Y += dy
}
for _, subEdge := range tempGraph.Edges {
for _, point := range subEdge.Route {
point.X += dx
point.Y += dy
}
}
for _, obj := range constantNears {
}
}
for _, tempGraph := range constantNearGraphs {
obj := tempGraph.Root.ChildrenArray[0]
if processCenters == strings.Contains(d2graph.Key(obj.Attributes.NearKey)[0], "-center") {
// The z-index for constant nears does not matter, as it will not collide
g.Objects = append(g.Objects, obj)
g.Objects = append(g.Objects, tempGraph.Objects...)
obj.Parent.Children[strings.ToLower(obj.ID)] = obj
obj.Parent.ChildrenArray = append(obj.Parent.ChildrenArray, obj)
g.Edges = append(g.Edges, tempGraph.Edges...)
}
}
}
// These shapes skipped core layout, which means they also skipped label placements
for _, obj := range constantNears {
if obj.HasOutsideBottomLabel() {
obj.LabelPosition = go2.Pointer(string(label.OutsideBottomCenter))
} else if obj.Attributes.Icon != nil {
obj.LabelPosition = go2.Pointer(string(label.InsideTopCenter))
} else {
obj.LabelPosition = go2.Pointer(string(label.InsideMiddleCenter))
}
}
return nil
}
@ -59,30 +74,66 @@ func place(obj *d2graph.Object) (float64, float64) {
tl, br := boundingBox(obj.Graph)
w := br.X - tl.X
h := br.Y - tl.Y
switch d2graph.Key(obj.Attributes.NearKey)[0] {
nearKeyStr := d2graph.Key(obj.Attributes.NearKey)[0]
var x, y float64
switch nearKeyStr {
case "top-left":
return tl.X - obj.Width - pad, tl.Y - obj.Height - pad
x, y = tl.X-obj.Width-pad, tl.Y-obj.Height-pad
break
case "top-center":
return tl.X + w/2 - obj.Width/2, tl.Y - obj.Height - pad
x, y = tl.X+w/2-obj.Width/2, tl.Y-obj.Height-pad
break
case "top-right":
return br.X + pad, tl.Y - obj.Height - pad
x, y = br.X+pad, tl.Y-obj.Height-pad
break
case "center-left":
return tl.X - obj.Width - pad, tl.Y + h/2 - obj.Height/2
x, y = tl.X-obj.Width-pad, tl.Y+h/2-obj.Height/2
break
case "center-right":
return br.X + pad, tl.Y + h/2 - obj.Height/2
x, y = br.X+pad, tl.Y+h/2-obj.Height/2
break
case "bottom-left":
return tl.X - obj.Width - pad, br.Y + pad
x, y = tl.X-obj.Width-pad, br.Y+pad
break
case "bottom-center":
return br.X - w/2 - obj.Width/2, br.Y + pad
x, y = br.X-w/2-obj.Width/2, br.Y+pad
break
case "bottom-right":
return br.X + pad, br.Y + pad
x, y = br.X+pad, br.Y+pad
break
}
return 0, 0
if obj.LabelPosition != nil && !strings.Contains(*obj.LabelPosition, "INSIDE") {
if strings.Contains(*obj.LabelPosition, "_TOP_") {
// label is on the top, and container is placed on the bottom
if strings.Contains(nearKeyStr, "bottom") {
y += float64(*obj.LabelHeight)
}
} else if strings.Contains(*obj.LabelPosition, "_LEFT_") {
// label is on the left, and container is placed on the right
if strings.Contains(nearKeyStr, "right") {
x += float64(*obj.LabelWidth)
}
} else if strings.Contains(*obj.LabelPosition, "_RIGHT_") {
// label is on the right, and container is placed on the left
if strings.Contains(nearKeyStr, "left") {
x -= float64(*obj.LabelWidth)
}
} else if strings.Contains(*obj.LabelPosition, "_BOTTOM_") {
// label is on the bottom, and container is placed on the top
if strings.Contains(nearKeyStr, "top") {
y -= float64(*obj.LabelHeight)
}
}
}
return x, y
}
// WithoutConstantNears plucks out the graph objects which have "near" set to a constant value
// This is to be called before layout engines so they don't take part in regular positioning
func WithoutConstantNears(ctx context.Context, g *d2graph.Graph) (nears []*d2graph.Object) {
func WithoutConstantNears(ctx context.Context, g *d2graph.Graph) (constantNearGraphs []*d2graph.Graph) {
for i := 0; i < len(g.Objects); i++ {
obj := g.Objects[i]
if obj.Attributes.NearKey == nil {
@ -94,8 +145,20 @@ func WithoutConstantNears(ctx context.Context, g *d2graph.Graph) (nears []*d2gra
}
_, isConst := d2graph.NearConstants[d2graph.Key(obj.Attributes.NearKey)[0]]
if isConst {
nears = append(nears, obj)
g.Objects = append(g.Objects[:i], g.Objects[i+1:]...)
descendantObjects, edges := pluckObjAndEdges(g, obj)
tempGraph := d2graph.NewGraph()
tempGraph.Root.ChildrenArray = []*d2graph.Object{obj}
tempGraph.Root.Children[strings.ToLower(obj.ID)] = obj
for _, descendantObj := range descendantObjects {
descendantObj.Graph = tempGraph
}
tempGraph.Objects = descendantObjects
tempGraph.Edges = edges
constantNearGraphs = append(constantNearGraphs, tempGraph)
i--
delete(obj.Parent.Children, strings.ToLower(obj.ID))
for i := 0; i < len(obj.Parent.ChildrenArray); i++ {
@ -104,9 +167,38 @@ func WithoutConstantNears(ctx context.Context, g *d2graph.Graph) (nears []*d2gra
break
}
}
obj.Parent = tempGraph.Root
}
}
return nears
return constantNearGraphs
}
func pluckObjAndEdges(g *d2graph.Graph, obj *d2graph.Object) (descendantsObjects []*d2graph.Object, edges []*d2graph.Edge) {
for i := 0; i < len(g.Edges); i++ {
edge := g.Edges[i]
if edge.Src == obj || edge.Dst == obj {
edges = append(edges, edge)
g.Edges = append(g.Edges[:i], g.Edges[i+1:]...)
i--
}
}
for i := 0; i < len(g.Objects); i++ {
temp := g.Objects[i]
if temp.AbsID() == obj.AbsID() {
descendantsObjects = append(descendantsObjects, obj)
g.Objects = append(g.Objects[:i], g.Objects[i+1:]...)
for _, child := range obj.ChildrenArray {
subObjects, subEdges := pluckObjAndEdges(g, child)
descendantsObjects = append(descendantsObjects, subObjects...)
edges = append(edges, subEdges...)
}
break
}
}
return descendantsObjects, edges
}
// boundingBox gets the center of the graph as defined by shapes
@ -134,6 +226,9 @@ func boundingBox(g *d2graph.Graph) (tl, br *geo.Point) {
y2 = math.Max(y2, obj.TopLeft.Y+obj.Height)
}
} else {
if obj.OuterNearContainer() != nil {
continue
}
x1 = math.Min(x1, obj.TopLeft.X)
y1 = math.Min(y1, obj.TopLeft.Y)
x2 = math.Max(x2, obj.TopLeft.X+obj.Width)

View file

@ -69,7 +69,14 @@ func compile(ctx context.Context, g *d2graph.Graph, opts *CompileOptions) (*d2ta
return nil, err
}
constantNears := d2near.WithoutConstantNears(ctx, g)
constantNearGraphs := d2near.WithoutConstantNears(ctx, g)
// run core layout for constantNears
for _, tempGraph := range constantNearGraphs {
if err = coreLayout(ctx, tempGraph); err != nil {
return nil, err
}
}
layoutWithGrids := d2grid.Layout(ctx, g, coreLayout)
@ -78,7 +85,7 @@ func compile(ctx context.Context, g *d2graph.Graph, opts *CompileOptions) (*d2ta
return nil, err
}
err = d2near.Layout(ctx, g, constantNears)
err = d2near.Layout(ctx, g, constantNearGraphs)
if err != nil {
return nil, err
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 100 KiB

View file

@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" d2Version="v0.3.0-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 514 665"><svg id="d2-svg" width="514" height="665" viewBox="-206 -166 514 665"><style type="text/css"><![CDATA[
.d2-1015877328 .text {
font-family: "d2-1015877328-font-regular";
.d2-3751819762 .text {
font-family: "d2-3751819762-font-regular";
}
@font-face {
font-family: d2-1015877328-font-regular;
font-family: d2-3751819762-font-regular;
src: url("data:application/font-woff;base64,d09GRgABAAAAAAusAAoAAAAAEhQAAguFAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAGAAAABgXd/Vo2NtYXAAAAFUAAAAkQAAAMADlQPeZ2x5ZgAAAegAAAVuAAAHBDysTkJoZWFkAAAHWAAAADYAAAA2G4Ue32hoZWEAAAeQAAAAJAAAACQKhAXaaG10eAAAB7QAAABgAAAAYCqBBP5sb2NhAAAIFAAAADIAAAAyF3QVqG1heHAAAAhIAAAAIAAAACAAMAD2bmFtZQAACGgAAAMjAAAIFAbDVU1wb3N0AAALjAAAAB0AAAAg/9EAMgADAgkBkAAFAAACigJYAAAASwKKAlgAAAFeADIBIwAAAgsFAwMEAwICBGAAAvcAAAADAAAAAAAAAABBREJPAEAAIP//Au7/BgAAA9gBESAAAZ8AAAAAAeYClAAAACAAA3icfM1NSgIBAIbhZ5rpf5qmv2206xzRukNEBEURUUR0lkod9A5u9ShewCt8guDCje/2WbwolArUKh0utUqNK9du3Lpz79GzV+8+ffn2k7DmD568ePOx8swyzzSTjDPKMF0G6aeX//zld3nbVOHCllJl245de/YdOFQ70jjWOnHqzDkLAAAA//8BAAD//y9UJ1sAAAB4nHSVXWzbah3G/+9rN05ad4mXDydtEid2GzdJ22RxErdN5qxt0nVd26ROq62fqGu3lJXBKNKmSmXjY2hXQC82MQkkEEwaSEgTTBog7jZNBAZDu2GAYOIqm+CCo5xeHOmcOkdO068jnbv3xs///T3P8/4NTTALgBP4HhBgAjOcBDuAxPiZTr8oCpQsybLAErKIGGoW/UvbRuhcnEwmyVND/xvavH0bXbyF7+1+aeBOqfRi6eZN7buV91oMvXoPGAgA7MHbYAIGwEpJYiAgCgYDYZWsgihQL7kX3EmfhTT7/vl26e2s8v8M+srqqnytv/+aNoe3d6+XywAACOK1HdyOfwQegCY+EEjEk0kp5mCpQEDgDQa7zeGQYkmZNRiQqn7z/PidYnrB3dM2FFIWpdi8EhnjesVL9NSD9asP1FO+pJsfvKGqm0NdfLwnVtefA8Bfx9u6vsRIVoeDlZJJ2SoxAhNPygJFCIQoOBx2Zm71Fs3SJG2nty5PGgkyviVvxUmCwtvaT/kcz+d4tLR7HX2xez18X/slmr4fXu/WfgAAWGdAv0JVaIMOAJbXIeR4HYAS6zh2RtDNEWNJOVGHenZ66vs/ZMJdoTGPj18ZmC1kKYKfcgiKsLkco88NFmYYrk/w2fodwWvz2t8G3KEhnrtrTkeCnYCgt7aDHqMquD/Ps33LTp5ZSw+uK9GcK2SPeLpzYnGYH3B0+At0eqOgbqR5Nml1Rmb6iiWPTfb4dZZIbQf9A5fBCr59lrq4mJD2IeTEwaCP5r+cWpZDio8sZinCPe46k+b6vWImMEJ/ZzP/NcXbVvz9bl+/O5gb1txspNh3YQVw/f5/QlVwAneMwG4zUP6DwAl/XB+D2MGrSmZVXryMsPbbpgsjQqrdw+VfIjLTL03RpzfyhQ1la63VZZpYsDNJmxcFxiby9exVAPQGl8FWz95O7WfB1IUpRlUJYSI2cVbtjnamOnH52ao/sryo/RkFs0qgU/sJ1GqQA4An+CkOgAMADMBuwYF2BZeBrmszklWirIJI2dUp4q/zP/vd3PfmcVnzIniu/fu/V7/R+Ka2A3/HZTDvOctIzEFUv+gNqidMJEW1GB10fwJf2b1nZRBSSHKfA1UbHHqBP8ORpQhh8gAEVUaE4xwNzz9AVTBD+zHPddP1YibqWnabA5lTpUymlEpfyWSupDMTExllcrLRl/SGWthIZ0vF6bW16WJJ11VrEvoYVRt9ObydzWAQ+IDI2q372pTd4dBv6s+Hly6lvtDHD/P4ZjqfynGZDr/yF/ykz91196vqDcXbNvMQGUpzhRXeV3Ozh34voaq+bQ48aDR+zwDXaNDDWmibmRt2ocrF3mTzKEnGFK2xZ9y1HfRtVIVQ3XtRrtcsEQ8ExF6ciB95P/rKYb1YB3gdXxKCvmw4GvVL7fxQaDbfM+nuciV9vWFvtF3I9gTztOiWXf4ezsWzza3+RDCV97FxqzPkZj32lla/3CsOddXnn6/toFeoomd4LHum8az+MzFaDEcDKV5n4cfp5UUU195kFTGMZrW28a4oIHAC4KeoAn4AiTiyyw5PhEDs7WGK+PHd6VHjCYo0WkznC+MmxkgazdTZyW+tjpjMJtJoac6iivaOH+b5YR65jpzaUJOQ7ezMCdongICuRdAfUEVvzaFvsnx0PHECz1k8tMVoMwWT5pbnMystrhayxdZ8ofAbJpJ7bSAHcVOqpwO90z7kRnn/qA+17laj4z26LwX0GH6Ofw1NAFZRlChqxUJcJCzo8aOFhUd7ucNDVNH/N/o7U1VU0doA1f6Ix0DGT6EFgKlvqb3SOTnO6eQ4POZxOb1ep8sDnwIAAP//AQAA///EanloAAAAAQAAAAILhYvQ0vFfDzz1AAMD6AAAAADYXaChAAAAAN1mLzb+Ov7bCG8DyAAAAAMAAgAAAAAAAAABAAAD2P7vAAAImP46/joIbwABAAAAAAAAAAAAAAAAAAAAGAKNAFkAyAAAAiAAAwI7ADQC1wBaAfgANAHIAC4CKwAvAfAALgIgAFIA9gBFAe8AUgD/AFICIwBSAh4ALgIrAFIBWwBSAaMAHAIgAEsCzgAYAdMADAD5AFAA9gBSAAD/yQAAACwALABQAIAAsgDqARgBSgF+AaABrAHGAeICBAIwAmQChALEAuYDIANQA2ADbAOCAAAAAQAAABgAjAAMAGYABwABAAAAAAAAAAAAAAAAAAQAA3icnJTdThtXFIU/B9ttVDUXFYrIDTqXbZWM3QiiBK5MCYpVhFOP0x+pqjR4xj9iPDPyDFCqPkCv+xZ9i1z1OfoQVa+rs7wNNqoUgRCwzpy991lnr7UPsMm/bFCrPwT+av5guMZ2c8/wAx41nxre4Ljxt+H6SkyDuPGb4SZfNvqGP+J9/Q/DH7NT/9nwQ7bqR4Y/4Xl90/CnG45/DD9ih/cLXIOX/G64xhaF4Qds8pPhDR5jNWt1HtM23OAztg032QYGTKlImZIxxjFiyphz5iSUhCTMmTIiIcbRpUNKpa8ZkZBj/L9fI0Iq5kSqOKHCkRKSElEysYq/KivnrU4caTW3vQ4VEyJOlXFGRIYjZ0xORsKZ6lRUFOzRokXJUHwLKkoCSqakBOTMGdOixxHHDJgwpcRxpEqeWUjOiIpLIp3vLMJ3ZkhCRmmszsmIxdOJX6LsLsc4ehSKXa18vFbhKY7vlO255Yr9ikC/boXZ+rlLNhEX6meqrqTauZSCE+36czt8K1yxh7tXf9aZfLhHsf5XqnzKufSPpVQmJhnObdEhlINC9wTHgdZdQnXke7oMeEOPdwy07tCnT4cTBnR5rdwefRxf0+OEQ2V0hRd7R3LMCT/i+IauYnztxPqzUCzhFwpzdymOc91jRqGee+aB7prohndX2M9QvuaOUjlDzZGPdNIv05xFjM0VhRjO1MulN0rrX2yOmOkuXtubfT8NFzZ7yym+ItcMe7cuOHnlFow+pGpwyzOX+gmIiMk5VcSQnBktKq7E+y0R56Q4DtW9N5qSis51jj/nSi5JmIlBl0x15hT6G5lvQuM+XPO9s7ckVr5nenZ9q/uc4tSrG43eqXvLvdC6nKwo0DJV8xU3DcU1M+8nmqlV/qFyS71uOc/ok0j1VDe4/Q48J6DNDrvsM9E5Q+1c2BvR1jvR5hX76sEZiaJGcnViFXYJeMEuu7zixVrNDocc0GP/DhwXWT0OeH1rZ12nZRVndf4Um7b4Op5dr17eW6/P7+DLLzRRNy9jX9r4bl9YtRv/nxAx81zc1uqd3BOC/wAAAP//AQAA//8HW0wwAHicYmBmAIP/5xiMGLAAAAAAAP//AQAA//8vAQIDAAAA");
}
.d2-1015877328 .text-bold {
font-family: "d2-1015877328-font-bold";
.d2-3751819762 .text-bold {
font-family: "d2-3751819762-font-bold";
}
@font-face {
font-family: d2-1015877328-font-bold;
font-family: d2-3751819762-font-bold;
src: url("data:application/font-woff;base64,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");
}]]></style><style type="text/css"><![CDATA[.shape {
shape-rendering: geometricPrecision;
@ -25,92 +25,92 @@
opacity: 0.5;
}
.d2-1015877328 .fill-N1{fill:#0A0F25;}
.d2-1015877328 .fill-N2{fill:#676C7E;}
.d2-1015877328 .fill-N3{fill:#9499AB;}
.d2-1015877328 .fill-N4{fill:#CFD2DD;}
.d2-1015877328 .fill-N5{fill:#DEE1EB;}
.d2-1015877328 .fill-N6{fill:#EEF1F8;}
.d2-1015877328 .fill-N7{fill:#FFFFFF;}
.d2-1015877328 .fill-B1{fill:#0D32B2;}
.d2-1015877328 .fill-B2{fill:#0D32B2;}
.d2-1015877328 .fill-B3{fill:#E3E9FD;}
.d2-1015877328 .fill-B4{fill:#E3E9FD;}
.d2-1015877328 .fill-B5{fill:#EDF0FD;}
.d2-1015877328 .fill-B6{fill:#F7F8FE;}
.d2-1015877328 .fill-AA2{fill:#4A6FF3;}
.d2-1015877328 .fill-AA4{fill:#EDF0FD;}
.d2-1015877328 .fill-AA5{fill:#F7F8FE;}
.d2-1015877328 .fill-AB4{fill:#EDF0FD;}
.d2-1015877328 .fill-AB5{fill:#F7F8FE;}
.d2-1015877328 .stroke-N1{stroke:#0A0F25;}
.d2-1015877328 .stroke-N2{stroke:#676C7E;}
.d2-1015877328 .stroke-N3{stroke:#9499AB;}
.d2-1015877328 .stroke-N4{stroke:#CFD2DD;}
.d2-1015877328 .stroke-N5{stroke:#DEE1EB;}
.d2-1015877328 .stroke-N6{stroke:#EEF1F8;}
.d2-1015877328 .stroke-N7{stroke:#FFFFFF;}
.d2-1015877328 .stroke-B1{stroke:#0D32B2;}
.d2-1015877328 .stroke-B2{stroke:#0D32B2;}
.d2-1015877328 .stroke-B3{stroke:#E3E9FD;}
.d2-1015877328 .stroke-B4{stroke:#E3E9FD;}
.d2-1015877328 .stroke-B5{stroke:#EDF0FD;}
.d2-1015877328 .stroke-B6{stroke:#F7F8FE;}
.d2-1015877328 .stroke-AA2{stroke:#4A6FF3;}
.d2-1015877328 .stroke-AA4{stroke:#EDF0FD;}
.d2-1015877328 .stroke-AA5{stroke:#F7F8FE;}
.d2-1015877328 .stroke-AB4{stroke:#EDF0FD;}
.d2-1015877328 .stroke-AB5{stroke:#F7F8FE;}
.d2-1015877328 .background-color-N1{background-color:#0A0F25;}
.d2-1015877328 .background-color-N2{background-color:#676C7E;}
.d2-1015877328 .background-color-N3{background-color:#9499AB;}
.d2-1015877328 .background-color-N4{background-color:#CFD2DD;}
.d2-1015877328 .background-color-N5{background-color:#DEE1EB;}
.d2-1015877328 .background-color-N6{background-color:#EEF1F8;}
.d2-1015877328 .background-color-N7{background-color:#FFFFFF;}
.d2-1015877328 .background-color-B1{background-color:#0D32B2;}
.d2-1015877328 .background-color-B2{background-color:#0D32B2;}
.d2-1015877328 .background-color-B3{background-color:#E3E9FD;}
.d2-1015877328 .background-color-B4{background-color:#E3E9FD;}
.d2-1015877328 .background-color-B5{background-color:#EDF0FD;}
.d2-1015877328 .background-color-B6{background-color:#F7F8FE;}
.d2-1015877328 .background-color-AA2{background-color:#4A6FF3;}
.d2-1015877328 .background-color-AA4{background-color:#EDF0FD;}
.d2-1015877328 .background-color-AA5{background-color:#F7F8FE;}
.d2-1015877328 .background-color-AB4{background-color:#EDF0FD;}
.d2-1015877328 .background-color-AB5{background-color:#F7F8FE;}
.d2-1015877328 .color-N1{color:#0A0F25;}
.d2-1015877328 .color-N2{color:#676C7E;}
.d2-1015877328 .color-N3{color:#9499AB;}
.d2-1015877328 .color-N4{color:#CFD2DD;}
.d2-1015877328 .color-N5{color:#DEE1EB;}
.d2-1015877328 .color-N6{color:#EEF1F8;}
.d2-1015877328 .color-N7{color:#FFFFFF;}
.d2-1015877328 .color-B1{color:#0D32B2;}
.d2-1015877328 .color-B2{color:#0D32B2;}
.d2-1015877328 .color-B3{color:#E3E9FD;}
.d2-1015877328 .color-B4{color:#E3E9FD;}
.d2-1015877328 .color-B5{color:#EDF0FD;}
.d2-1015877328 .color-B6{color:#F7F8FE;}
.d2-1015877328 .color-AA2{color:#4A6FF3;}
.d2-1015877328 .color-AA4{color:#EDF0FD;}
.d2-1015877328 .color-AA5{color:#F7F8FE;}
.d2-1015877328 .color-AB4{color:#EDF0FD;}
.d2-1015877328 .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}]]></style><style type="text/css">.md em,
.d2-3751819762 .fill-N1{fill:#0A0F25;}
.d2-3751819762 .fill-N2{fill:#676C7E;}
.d2-3751819762 .fill-N3{fill:#9499AB;}
.d2-3751819762 .fill-N4{fill:#CFD2DD;}
.d2-3751819762 .fill-N5{fill:#DEE1EB;}
.d2-3751819762 .fill-N6{fill:#EEF1F8;}
.d2-3751819762 .fill-N7{fill:#FFFFFF;}
.d2-3751819762 .fill-B1{fill:#0D32B2;}
.d2-3751819762 .fill-B2{fill:#0D32B2;}
.d2-3751819762 .fill-B3{fill:#E3E9FD;}
.d2-3751819762 .fill-B4{fill:#E3E9FD;}
.d2-3751819762 .fill-B5{fill:#EDF0FD;}
.d2-3751819762 .fill-B6{fill:#F7F8FE;}
.d2-3751819762 .fill-AA2{fill:#4A6FF3;}
.d2-3751819762 .fill-AA4{fill:#EDF0FD;}
.d2-3751819762 .fill-AA5{fill:#F7F8FE;}
.d2-3751819762 .fill-AB4{fill:#EDF0FD;}
.d2-3751819762 .fill-AB5{fill:#F7F8FE;}
.d2-3751819762 .stroke-N1{stroke:#0A0F25;}
.d2-3751819762 .stroke-N2{stroke:#676C7E;}
.d2-3751819762 .stroke-N3{stroke:#9499AB;}
.d2-3751819762 .stroke-N4{stroke:#CFD2DD;}
.d2-3751819762 .stroke-N5{stroke:#DEE1EB;}
.d2-3751819762 .stroke-N6{stroke:#EEF1F8;}
.d2-3751819762 .stroke-N7{stroke:#FFFFFF;}
.d2-3751819762 .stroke-B1{stroke:#0D32B2;}
.d2-3751819762 .stroke-B2{stroke:#0D32B2;}
.d2-3751819762 .stroke-B3{stroke:#E3E9FD;}
.d2-3751819762 .stroke-B4{stroke:#E3E9FD;}
.d2-3751819762 .stroke-B5{stroke:#EDF0FD;}
.d2-3751819762 .stroke-B6{stroke:#F7F8FE;}
.d2-3751819762 .stroke-AA2{stroke:#4A6FF3;}
.d2-3751819762 .stroke-AA4{stroke:#EDF0FD;}
.d2-3751819762 .stroke-AA5{stroke:#F7F8FE;}
.d2-3751819762 .stroke-AB4{stroke:#EDF0FD;}
.d2-3751819762 .stroke-AB5{stroke:#F7F8FE;}
.d2-3751819762 .background-color-N1{background-color:#0A0F25;}
.d2-3751819762 .background-color-N2{background-color:#676C7E;}
.d2-3751819762 .background-color-N3{background-color:#9499AB;}
.d2-3751819762 .background-color-N4{background-color:#CFD2DD;}
.d2-3751819762 .background-color-N5{background-color:#DEE1EB;}
.d2-3751819762 .background-color-N6{background-color:#EEF1F8;}
.d2-3751819762 .background-color-N7{background-color:#FFFFFF;}
.d2-3751819762 .background-color-B1{background-color:#0D32B2;}
.d2-3751819762 .background-color-B2{background-color:#0D32B2;}
.d2-3751819762 .background-color-B3{background-color:#E3E9FD;}
.d2-3751819762 .background-color-B4{background-color:#E3E9FD;}
.d2-3751819762 .background-color-B5{background-color:#EDF0FD;}
.d2-3751819762 .background-color-B6{background-color:#F7F8FE;}
.d2-3751819762 .background-color-AA2{background-color:#4A6FF3;}
.d2-3751819762 .background-color-AA4{background-color:#EDF0FD;}
.d2-3751819762 .background-color-AA5{background-color:#F7F8FE;}
.d2-3751819762 .background-color-AB4{background-color:#EDF0FD;}
.d2-3751819762 .background-color-AB5{background-color:#F7F8FE;}
.d2-3751819762 .color-N1{color:#0A0F25;}
.d2-3751819762 .color-N2{color:#676C7E;}
.d2-3751819762 .color-N3{color:#9499AB;}
.d2-3751819762 .color-N4{color:#CFD2DD;}
.d2-3751819762 .color-N5{color:#DEE1EB;}
.d2-3751819762 .color-N6{color:#EEF1F8;}
.d2-3751819762 .color-N7{color:#FFFFFF;}
.d2-3751819762 .color-B1{color:#0D32B2;}
.d2-3751819762 .color-B2{color:#0D32B2;}
.d2-3751819762 .color-B3{color:#E3E9FD;}
.d2-3751819762 .color-B4{color:#E3E9FD;}
.d2-3751819762 .color-B5{color:#EDF0FD;}
.d2-3751819762 .color-B6{color:#F7F8FE;}
.d2-3751819762 .color-AA2{color:#4A6FF3;}
.d2-3751819762 .color-AA4{color:#EDF0FD;}
.d2-3751819762 .color-AA5{color:#F7F8FE;}
.d2-3751819762 .color-AB4{color:#EDF0FD;}
.d2-3751819762 .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}]]></style><style type="text/css">.md em,
.md dfn {
font-family: "d2-1015877328-font-italic";
font-family: "d2-3751819762-font-italic";
}
.md b,
.md strong {
font-family: "d2-1015877328-font-bold";
font-family: "d2-3751819762-font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "d2-1015877328-font-mono";
font-family: "d2-3751819762-font-mono";
font-size: 1em;
}
@ -126,7 +126,7 @@
margin: 0;
color: var(--color-fg-default);
background-color: transparent; /* we don't want to define the background color */
font-family: "d2-1015877328-font-regular";
font-family: "d2-3751819762-font-regular";
font-size: 16px;
line-height: 1.5;
word-wrap: break-word;
@ -340,7 +340,7 @@
margin-bottom: 16px;
font-weight: 600;
line-height: 1.25;
font-family: "d2-1015877328-font-regular";
font-family: "d2-3751819762-font-regular";
}
.md h2 {
@ -838,7 +838,7 @@
.md .contains-task-list:dir(rtl) .task-list-item-checkbox {
margin: 0 -1.6em 0.25em 0.2em;
}
</style><style type="text/css"><![CDATA[@keyframes d2Transition-d2-1015877328-0 {
</style><style type="text/css"><![CDATA[@keyframes d2Transition-d2-3751819762-0 {
0%, 0.000000% {
opacity: 0;
}
@ -848,7 +848,7 @@
25.000000%, 100% {
opacity: 0;
}
}@keyframes d2Transition-d2-1015877328-1 {
}@keyframes d2Transition-d2-3751819762-1 {
0%, 24.982143% {
opacity: 0;
}
@ -858,7 +858,7 @@
50.000000%, 100% {
opacity: 0;
}
}@keyframes d2Transition-d2-1015877328-2 {
}@keyframes d2Transition-d2-3751819762-2 {
0%, 49.982143% {
opacity: 0;
}
@ -868,23 +868,23 @@
75.000000%, 100% {
opacity: 0;
}
}@keyframes d2Transition-d2-1015877328-3 {
}@keyframes d2Transition-d2-3751819762-3 {
0%, 74.982143% {
opacity: 0;
}
75.000000%, 100.000000% {
opacity: 1;
}
}]]></style><g style="animation: d2Transition-d2-1015877328-0 5600ms infinite" class="d2-1015877328" width="412" height="247" viewBox="-206 -166 412 247"><rect x="-206.000000" y="-166.000000" width="412.000000" height="247.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="&#34;Chicken&#39;s plan&#34;"><g class="shape" ></g><text x="0.000000" y="-30.000000" class="text fill-N1" style="text-anchor:middle;font-size:35px">Chicken&#39;s plan</text></g><mask id="d2-1015877328" maskUnits="userSpaceOnUse" x="-206" y="-166" width="412" height="247">
}]]></style><g style="animation: d2Transition-d2-3751819762-0 5600ms infinite" class="d2-3751819762" width="412" height="247" viewBox="-206 -166 412 247"><rect x="-206.000000" y="-166.000000" width="412.000000" height="247.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="&#34;Chicken&#39;s plan&#34;"><g class="shape" ></g><text x="0.000000" y="-30.000000" class="text fill-N1" style="text-anchor:middle;font-size:35px">Chicken&#39;s plan</text></g><mask id="d2-3751819762" maskUnits="userSpaceOnUse" x="-206" y="-166" width="412" height="247">
<rect x="-206" y="-166" width="412" height="247" fill="white"></rect>
</mask></g><g style="animation: d2Transition-d2-1015877328-1 5600ms infinite" class="d2-1015877328" width="412" height="333" viewBox="-131 -166 412 333"><rect x="-131.000000" y="-166.000000" width="412.000000" height="333.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="Approach road"><g class="shape" ><rect x="0.000000" y="0.000000" width="150.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="75.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Approach road</text></g><g id="&#34;Chicken&#39;s plan&#34;"><g class="shape" ></g><text x="75.000000" y="-30.000000" class="text fill-N1" style="text-anchor:middle;font-size:35px">Chicken&#39;s plan</text></g><mask id="d2-1041619556" maskUnits="userSpaceOnUse" x="-131" y="-166" width="412" height="333">
</mask></g><g style="animation: d2Transition-d2-3751819762-1 5600ms infinite" class="d2-3751819762" width="412" height="333" viewBox="-131 -166 412 333"><rect x="-131.000000" y="-166.000000" width="412.000000" height="333.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="Approach road"><g class="shape" ><rect x="0.000000" y="0.000000" width="150.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="75.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Approach road</text></g><g id="&#34;Chicken&#39;s plan&#34;"><g class="shape" ></g><text x="75.000000" y="-30.000000" class="text fill-N1" style="text-anchor:middle;font-size:35px">Chicken&#39;s plan</text></g><mask id="d2-3302893893" maskUnits="userSpaceOnUse" x="-131" y="-166" width="412" height="333">
<rect x="-131" y="-166" width="412" height="333" fill="white"></rect>
</mask></g><g style="animation: d2Transition-d2-1015877328-2 5600ms infinite" class="d2-1015877328" width="412" height="499" viewBox="-131 -166 412 499"><rect x="-131.000000" y="-166.000000" width="412.000000" height="499.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="Approach road"><g class="shape" ><rect x="0.000000" y="0.000000" width="150.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="75.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Approach road</text></g><g id="Cross road"><g class="shape" ><rect x="15.000000" y="166.000000" width="120.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="75.000000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Cross road</text></g><g id="&#34;Chicken&#39;s plan&#34;"><g class="shape" ></g><text x="75.000000" y="-30.000000" class="text fill-N1" style="text-anchor:middle;font-size:35px">Chicken&#39;s plan</text></g><g id="(Approach road -&gt; Cross road)[0]"><marker id="mk-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 75.000000 68.000000 C 75.000000 106.000000 75.000000 126.000000 75.000000 162.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-681643259)" /></g><mask id="d2-681643259" maskUnits="userSpaceOnUse" x="-131" y="-166" width="412" height="499">
</mask></g><g style="animation: d2Transition-d2-3751819762-2 5600ms infinite" class="d2-3751819762" width="412" height="499" viewBox="-131 -166 412 499"><rect x="-131.000000" y="-166.000000" width="412.000000" height="499.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="Approach road"><g class="shape" ><rect x="0.000000" y="0.000000" width="150.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="75.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Approach road</text></g><g id="Cross road"><g class="shape" ><rect x="15.000000" y="166.000000" width="120.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="75.000000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Cross road</text></g><g id="&#34;Chicken&#39;s plan&#34;"><g class="shape" ></g><text x="75.000000" y="-30.000000" class="text fill-N1" style="text-anchor:middle;font-size:35px">Chicken&#39;s plan</text></g><g id="(Approach road -&gt; Cross road)[0]"><marker id="mk-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 75.000000 68.000000 C 75.000000 106.000000 75.000000 126.000000 75.000000 162.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2369911030)" /></g><mask id="d2-2369911030" maskUnits="userSpaceOnUse" x="-131" y="-166" width="412" height="499">
<rect x="-131" y="-166" width="412" height="499" fill="white"></rect>
</mask></g><g style="animation: d2Transition-d2-1015877328-3 5600ms infinite" class="d2-1015877328" width="412" height="665" viewBox="-104 -166 412 665"><rect x="-104.000000" y="-166.000000" width="412.000000" height="665.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="Approach road"><g class="shape" ><rect x="27.000000" y="0.000000" width="150.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="102.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Approach road</text></g><g id="Cross road"><g class="shape" ><rect x="42.000000" y="166.000000" width="120.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="102.000000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Cross road</text></g><g id="Make you wonder why"><g class="shape" ><rect x="0.000000" y="332.000000" width="203.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="101.500000" y="370.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Make you wonder why</text></g><g id="&#34;Chicken&#39;s plan&#34;"><g class="shape" ></g><text x="102.000000" y="-30.000000" class="text fill-N1" style="text-anchor:middle;font-size:35px">Chicken&#39;s plan</text></g><g id="(Approach road -&gt; Cross road)[0]"><marker id="mk-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 101.500000 68.000000 C 101.500000 106.000000 101.500000 126.000000 101.500000 162.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2302375566)" /></g><g id="(Cross road -&gt; Make you wonder why)[0]"><path d="M 101.500000 234.000000 C 101.500000 272.000000 101.500000 292.000000 101.500000 328.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2302375566)" /></g><mask id="d2-2302375566" maskUnits="userSpaceOnUse" x="-104" y="-166" width="412" height="665">
</mask></g><g style="animation: d2Transition-d2-3751819762-3 5600ms infinite" class="d2-3751819762" width="412" height="665" viewBox="-104 -166 412 665"><rect x="-104.000000" y="-166.000000" width="412.000000" height="665.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><g id="Approach road"><g class="shape" ><rect x="27.000000" y="0.000000" width="150.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="102.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Approach road</text></g><g id="Cross road"><g class="shape" ><rect x="42.000000" y="166.000000" width="120.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="102.000000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Cross road</text></g><g id="Make you wonder why"><g class="shape" ><rect x="0.000000" y="332.000000" width="203.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="101.500000" y="370.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">Make you wonder why</text></g><g id="&#34;Chicken&#39;s plan&#34;"><g class="shape" ></g><text x="102.000000" y="-30.000000" class="text fill-N1" style="text-anchor:middle;font-size:35px">Chicken&#39;s plan</text></g><g id="(Approach road -&gt; Cross road)[0]"><marker id="mk-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 101.500000 68.000000 C 101.500000 106.000000 101.500000 126.000000 101.500000 162.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-1488407051)" /></g><g id="(Cross road -&gt; Make you wonder why)[0]"><path d="M 101.500000 234.000000 C 101.500000 272.000000 101.500000 292.000000 101.500000 328.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-1488407051)" /></g><mask id="d2-1488407051" maskUnits="userSpaceOnUse" x="-104" y="-166" width="412" height="665">
<rect x="-104" y="-166" width="412" height="665" fill="white"></rect>
</mask></g></svg></svg>

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View file

@ -12,6 +12,68 @@ var testMarkdown string
func testStable(t *testing.T) {
tcs := []testCase{
{
name: "legend_with_near_key",
script: `
direction: right
x -> y: {
style.stroke: green
}
y -> z: {
style.stroke: red
}
legend: {
near: bottom-center
color1: foo {
shape: text
style.font-color: green
}
color2: bar {
shape: text
style.font-color: red
}
}
`,
},
{
name: "near_keys_for_container",
script: `
x: {
near: top-left
a -> b
c -> d
}
y: {
near: top-right
a -> b
c -> d
}
z: {
near: bottom-center
a -> b
c -> d
}
a: {
near: top-center
b: {
c
}
}
b: {
near: bottom-right
a: {
c: {
d
}
}
}
`,
},
{
name: "class_and_sqlTable_border_radius",
script: `

View file

@ -531,7 +531,6 @@
"underline": false,
"labelWidth": 639,
"labelHeight": 51,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View file

@ -531,7 +531,6 @@
"underline": false,
"labelWidth": 639,
"labelHeight": 51,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View file

@ -122,7 +122,6 @@
"underline": false,
"labelWidth": 162,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
@ -163,7 +162,6 @@
"underline": false,
"labelWidth": 943,
"labelHeight": 131,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
@ -286,7 +284,6 @@
"underline": false,
"labelWidth": 80,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
@ -327,7 +324,6 @@
"underline": false,
"labelWidth": 90,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
@ -368,7 +364,6 @@
"underline": false,
"labelWidth": 107,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
@ -409,7 +404,6 @@
"underline": false,
"labelWidth": 117,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View file

@ -122,7 +122,6 @@
"underline": false,
"labelWidth": 162,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
@ -163,7 +162,6 @@
"underline": false,
"labelWidth": 943,
"labelHeight": 131,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
@ -286,7 +284,6 @@
"underline": false,
"labelWidth": 80,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
@ -327,7 +324,6 @@
"underline": false,
"labelWidth": 90,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
@ -368,7 +364,6 @@
"underline": false,
"labelWidth": 107,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
@ -409,7 +404,6 @@
"underline": false,
"labelWidth": 117,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View file

@ -245,7 +245,6 @@
"underline": false,
"labelWidth": 266,
"labelHeight": 51,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
}

View file

@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" d2Version="v0.3.0-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 333 637"><svg id="d2-svg" class="d2-1574136658" width="333" height="637" viewBox="-1 -72 333 637"><rect x="-1.000000" y="-72.000000" width="333.000000" height="637.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.d2-1574136658 .text {
font-family: "d2-1574136658-font-regular";
<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" d2Version="v0.3.0-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 333 637"><svg id="d2-svg" class="d2-2349203687" width="333" height="637" viewBox="-1 -72 333 637"><rect x="-1.000000" y="-72.000000" width="333.000000" height="637.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.d2-2349203687 .text {
font-family: "d2-2349203687-font-regular";
}
@font-face {
font-family: d2-1574136658-font-regular;
font-family: d2-2349203687-font-regular;
src: url("data:application/font-woff;base64,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");
}
.d2-1574136658 .text-bold {
font-family: "d2-1574136658-font-bold";
.d2-2349203687 .text-bold {
font-family: "d2-2349203687-font-bold";
}
@font-face {
font-family: d2-1574136658-font-bold;
font-family: d2-2349203687-font-bold;
src: url("data:application/font-woff;base64,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");
}]]></style><style type="text/css"><![CDATA[.shape {
shape-rendering: geometricPrecision;
@ -25,92 +25,92 @@
opacity: 0.5;
}
.d2-1574136658 .fill-N1{fill:#0A0F25;}
.d2-1574136658 .fill-N2{fill:#676C7E;}
.d2-1574136658 .fill-N3{fill:#9499AB;}
.d2-1574136658 .fill-N4{fill:#CFD2DD;}
.d2-1574136658 .fill-N5{fill:#DEE1EB;}
.d2-1574136658 .fill-N6{fill:#EEF1F8;}
.d2-1574136658 .fill-N7{fill:#FFFFFF;}
.d2-1574136658 .fill-B1{fill:#0D32B2;}
.d2-1574136658 .fill-B2{fill:#0D32B2;}
.d2-1574136658 .fill-B3{fill:#E3E9FD;}
.d2-1574136658 .fill-B4{fill:#E3E9FD;}
.d2-1574136658 .fill-B5{fill:#EDF0FD;}
.d2-1574136658 .fill-B6{fill:#F7F8FE;}
.d2-1574136658 .fill-AA2{fill:#4A6FF3;}
.d2-1574136658 .fill-AA4{fill:#EDF0FD;}
.d2-1574136658 .fill-AA5{fill:#F7F8FE;}
.d2-1574136658 .fill-AB4{fill:#EDF0FD;}
.d2-1574136658 .fill-AB5{fill:#F7F8FE;}
.d2-1574136658 .stroke-N1{stroke:#0A0F25;}
.d2-1574136658 .stroke-N2{stroke:#676C7E;}
.d2-1574136658 .stroke-N3{stroke:#9499AB;}
.d2-1574136658 .stroke-N4{stroke:#CFD2DD;}
.d2-1574136658 .stroke-N5{stroke:#DEE1EB;}
.d2-1574136658 .stroke-N6{stroke:#EEF1F8;}
.d2-1574136658 .stroke-N7{stroke:#FFFFFF;}
.d2-1574136658 .stroke-B1{stroke:#0D32B2;}
.d2-1574136658 .stroke-B2{stroke:#0D32B2;}
.d2-1574136658 .stroke-B3{stroke:#E3E9FD;}
.d2-1574136658 .stroke-B4{stroke:#E3E9FD;}
.d2-1574136658 .stroke-B5{stroke:#EDF0FD;}
.d2-1574136658 .stroke-B6{stroke:#F7F8FE;}
.d2-1574136658 .stroke-AA2{stroke:#4A6FF3;}
.d2-1574136658 .stroke-AA4{stroke:#EDF0FD;}
.d2-1574136658 .stroke-AA5{stroke:#F7F8FE;}
.d2-1574136658 .stroke-AB4{stroke:#EDF0FD;}
.d2-1574136658 .stroke-AB5{stroke:#F7F8FE;}
.d2-1574136658 .background-color-N1{background-color:#0A0F25;}
.d2-1574136658 .background-color-N2{background-color:#676C7E;}
.d2-1574136658 .background-color-N3{background-color:#9499AB;}
.d2-1574136658 .background-color-N4{background-color:#CFD2DD;}
.d2-1574136658 .background-color-N5{background-color:#DEE1EB;}
.d2-1574136658 .background-color-N6{background-color:#EEF1F8;}
.d2-1574136658 .background-color-N7{background-color:#FFFFFF;}
.d2-1574136658 .background-color-B1{background-color:#0D32B2;}
.d2-1574136658 .background-color-B2{background-color:#0D32B2;}
.d2-1574136658 .background-color-B3{background-color:#E3E9FD;}
.d2-1574136658 .background-color-B4{background-color:#E3E9FD;}
.d2-1574136658 .background-color-B5{background-color:#EDF0FD;}
.d2-1574136658 .background-color-B6{background-color:#F7F8FE;}
.d2-1574136658 .background-color-AA2{background-color:#4A6FF3;}
.d2-1574136658 .background-color-AA4{background-color:#EDF0FD;}
.d2-1574136658 .background-color-AA5{background-color:#F7F8FE;}
.d2-1574136658 .background-color-AB4{background-color:#EDF0FD;}
.d2-1574136658 .background-color-AB5{background-color:#F7F8FE;}
.d2-1574136658 .color-N1{color:#0A0F25;}
.d2-1574136658 .color-N2{color:#676C7E;}
.d2-1574136658 .color-N3{color:#9499AB;}
.d2-1574136658 .color-N4{color:#CFD2DD;}
.d2-1574136658 .color-N5{color:#DEE1EB;}
.d2-1574136658 .color-N6{color:#EEF1F8;}
.d2-1574136658 .color-N7{color:#FFFFFF;}
.d2-1574136658 .color-B1{color:#0D32B2;}
.d2-1574136658 .color-B2{color:#0D32B2;}
.d2-1574136658 .color-B3{color:#E3E9FD;}
.d2-1574136658 .color-B4{color:#E3E9FD;}
.d2-1574136658 .color-B5{color:#EDF0FD;}
.d2-1574136658 .color-B6{color:#F7F8FE;}
.d2-1574136658 .color-AA2{color:#4A6FF3;}
.d2-1574136658 .color-AA4{color:#EDF0FD;}
.d2-1574136658 .color-AA5{color:#F7F8FE;}
.d2-1574136658 .color-AB4{color:#EDF0FD;}
.d2-1574136658 .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}]]></style><style type="text/css">.md em,
.d2-2349203687 .fill-N1{fill:#0A0F25;}
.d2-2349203687 .fill-N2{fill:#676C7E;}
.d2-2349203687 .fill-N3{fill:#9499AB;}
.d2-2349203687 .fill-N4{fill:#CFD2DD;}
.d2-2349203687 .fill-N5{fill:#DEE1EB;}
.d2-2349203687 .fill-N6{fill:#EEF1F8;}
.d2-2349203687 .fill-N7{fill:#FFFFFF;}
.d2-2349203687 .fill-B1{fill:#0D32B2;}
.d2-2349203687 .fill-B2{fill:#0D32B2;}
.d2-2349203687 .fill-B3{fill:#E3E9FD;}
.d2-2349203687 .fill-B4{fill:#E3E9FD;}
.d2-2349203687 .fill-B5{fill:#EDF0FD;}
.d2-2349203687 .fill-B6{fill:#F7F8FE;}
.d2-2349203687 .fill-AA2{fill:#4A6FF3;}
.d2-2349203687 .fill-AA4{fill:#EDF0FD;}
.d2-2349203687 .fill-AA5{fill:#F7F8FE;}
.d2-2349203687 .fill-AB4{fill:#EDF0FD;}
.d2-2349203687 .fill-AB5{fill:#F7F8FE;}
.d2-2349203687 .stroke-N1{stroke:#0A0F25;}
.d2-2349203687 .stroke-N2{stroke:#676C7E;}
.d2-2349203687 .stroke-N3{stroke:#9499AB;}
.d2-2349203687 .stroke-N4{stroke:#CFD2DD;}
.d2-2349203687 .stroke-N5{stroke:#DEE1EB;}
.d2-2349203687 .stroke-N6{stroke:#EEF1F8;}
.d2-2349203687 .stroke-N7{stroke:#FFFFFF;}
.d2-2349203687 .stroke-B1{stroke:#0D32B2;}
.d2-2349203687 .stroke-B2{stroke:#0D32B2;}
.d2-2349203687 .stroke-B3{stroke:#E3E9FD;}
.d2-2349203687 .stroke-B4{stroke:#E3E9FD;}
.d2-2349203687 .stroke-B5{stroke:#EDF0FD;}
.d2-2349203687 .stroke-B6{stroke:#F7F8FE;}
.d2-2349203687 .stroke-AA2{stroke:#4A6FF3;}
.d2-2349203687 .stroke-AA4{stroke:#EDF0FD;}
.d2-2349203687 .stroke-AA5{stroke:#F7F8FE;}
.d2-2349203687 .stroke-AB4{stroke:#EDF0FD;}
.d2-2349203687 .stroke-AB5{stroke:#F7F8FE;}
.d2-2349203687 .background-color-N1{background-color:#0A0F25;}
.d2-2349203687 .background-color-N2{background-color:#676C7E;}
.d2-2349203687 .background-color-N3{background-color:#9499AB;}
.d2-2349203687 .background-color-N4{background-color:#CFD2DD;}
.d2-2349203687 .background-color-N5{background-color:#DEE1EB;}
.d2-2349203687 .background-color-N6{background-color:#EEF1F8;}
.d2-2349203687 .background-color-N7{background-color:#FFFFFF;}
.d2-2349203687 .background-color-B1{background-color:#0D32B2;}
.d2-2349203687 .background-color-B2{background-color:#0D32B2;}
.d2-2349203687 .background-color-B3{background-color:#E3E9FD;}
.d2-2349203687 .background-color-B4{background-color:#E3E9FD;}
.d2-2349203687 .background-color-B5{background-color:#EDF0FD;}
.d2-2349203687 .background-color-B6{background-color:#F7F8FE;}
.d2-2349203687 .background-color-AA2{background-color:#4A6FF3;}
.d2-2349203687 .background-color-AA4{background-color:#EDF0FD;}
.d2-2349203687 .background-color-AA5{background-color:#F7F8FE;}
.d2-2349203687 .background-color-AB4{background-color:#EDF0FD;}
.d2-2349203687 .background-color-AB5{background-color:#F7F8FE;}
.d2-2349203687 .color-N1{color:#0A0F25;}
.d2-2349203687 .color-N2{color:#676C7E;}
.d2-2349203687 .color-N3{color:#9499AB;}
.d2-2349203687 .color-N4{color:#CFD2DD;}
.d2-2349203687 .color-N5{color:#DEE1EB;}
.d2-2349203687 .color-N6{color:#EEF1F8;}
.d2-2349203687 .color-N7{color:#FFFFFF;}
.d2-2349203687 .color-B1{color:#0D32B2;}
.d2-2349203687 .color-B2{color:#0D32B2;}
.d2-2349203687 .color-B3{color:#E3E9FD;}
.d2-2349203687 .color-B4{color:#E3E9FD;}
.d2-2349203687 .color-B5{color:#EDF0FD;}
.d2-2349203687 .color-B6{color:#F7F8FE;}
.d2-2349203687 .color-AA2{color:#4A6FF3;}
.d2-2349203687 .color-AA4{color:#EDF0FD;}
.d2-2349203687 .color-AA5{color:#F7F8FE;}
.d2-2349203687 .color-AB4{color:#EDF0FD;}
.d2-2349203687 .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}]]></style><style type="text/css">.md em,
.md dfn {
font-family: "d2-1574136658-font-italic";
font-family: "d2-2349203687-font-italic";
}
.md b,
.md strong {
font-family: "d2-1574136658-font-bold";
font-family: "d2-2349203687-font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "d2-1574136658-font-mono";
font-family: "d2-2349203687-font-mono";
font-size: 1em;
}
@ -126,7 +126,7 @@
margin: 0;
color: var(--color-fg-default);
background-color: transparent; /* we don't want to define the background color */
font-family: "d2-1574136658-font-regular";
font-family: "d2-2349203687-font-regular";
font-size: 16px;
line-height: 1.5;
word-wrap: break-word;
@ -340,7 +340,7 @@
margin-bottom: 16px;
font-weight: 600;
line-height: 1.25;
font-family: "d2-1574136658-font-regular";
font-family: "d2-2349203687-font-regular";
}
.md h2 {
@ -839,7 +839,7 @@
margin: 0 -1.6em 0.25em 0.2em;
}
</style><g id="poll the people"><g class="shape" ><rect x="82.000000" y="0.000000" width="150.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="157.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">poll the people</text></g><g id="results"><g class="shape" ><rect x="191.000000" y="166.000000" width="93.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="237.500000" y="204.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">results</text></g><g id="unfavorable"><g class="shape" ><rect x="0.000000" y="332.000000" width="131.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="65.500000" y="370.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">unfavorable</text></g><g id="favorable"><g class="shape" ><rect x="191.000000" y="332.000000" width="113.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="247.500000" y="370.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">favorable</text></g><g id="will of the people"><g class="shape" ><rect x="164.000000" y="498.000000" width="167.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="247.500000" y="536.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">will of the people</text></g><g id="title"><g class="shape" ></g><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="32.000000" y="-71.000000" width="266" height="51"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><h1>A winning strategy</h1>
</div></foreignObject></g></g><g id="(poll the people -&gt; results)[0]"><marker id="mk-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 190.101682 67.431354 C 227.740964 106.000000 237.500000 126.000000 237.500000 162.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-1574136658)" /></g><g id="(results -&gt; unfavorable)[0]"><path d="M 199.841603 233.347768 C 157.463855 272.000000 136.700000 292.000000 100.299714 329.143149" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-1574136658)" /></g><g id="(unfavorable -&gt; poll the people)[0]"><path d="M 61.284863 330.014360 C 56.704819 292.000000 55.500000 265.400000 55.500000 240.500000 C 55.500000 215.600000 67.700000 106.000000 113.406432 68.535712" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-1574136658)" /></g><g id="(results -&gt; favorable)[0]"><path d="M 241.715137 233.985640 C 246.295181 272.000000 247.500000 292.000000 247.500000 328.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-1574136658)" /></g><g id="(favorable -&gt; will of the people)[0]"><path d="M 247.500000 400.000000 C 247.500000 438.000000 247.500000 458.000000 247.500000 494.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-1574136658)" /></g><mask id="d2-1574136658" maskUnits="userSpaceOnUse" x="-1" y="-72" width="333" height="637">
</div></foreignObject></g></g><g id="(poll the people -&gt; results)[0]"><marker id="mk-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 190.101682 67.431354 C 227.740964 106.000000 237.500000 126.000000 237.500000 162.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2349203687)" /></g><g id="(results -&gt; unfavorable)[0]"><path d="M 199.841603 233.347768 C 157.463855 272.000000 136.700000 292.000000 100.299714 329.143149" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2349203687)" /></g><g id="(unfavorable -&gt; poll the people)[0]"><path d="M 61.284863 330.014360 C 56.704819 292.000000 55.500000 265.400000 55.500000 240.500000 C 55.500000 215.600000 67.700000 106.000000 113.406432 68.535712" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2349203687)" /></g><g id="(results -&gt; favorable)[0]"><path d="M 241.715137 233.985640 C 246.295181 272.000000 247.500000 292.000000 247.500000 328.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2349203687)" /></g><g id="(favorable -&gt; will of the people)[0]"><path d="M 247.500000 400.000000 C 247.500000 438.000000 247.500000 458.000000 247.500000 494.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2349203687)" /></g><mask id="d2-2349203687" maskUnits="userSpaceOnUse" x="-1" y="-72" width="333" height="637">
<rect x="-1" y="-72" width="333" height="637" fill="white"></rect>
</mask></svg></svg>

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View file

@ -245,7 +245,6 @@
"underline": false,
"labelWidth": 266,
"labelHeight": 51,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
}

View file

@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" d2Version="v0.3.0-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 293 567"><svg id="d2-svg" class="d2-2292454579" width="293" height="567" viewBox="11 -60 293 567"><rect x="11.000000" y="-60.000000" width="293.000000" height="567.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.d2-2292454579 .text {
font-family: "d2-2292454579-font-regular";
<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" d2Version="v0.3.0-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 293 567"><svg id="d2-svg" class="d2-2541576668" width="293" height="567" viewBox="11 -60 293 567"><rect x="11.000000" y="-60.000000" width="293.000000" height="567.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.d2-2541576668 .text {
font-family: "d2-2541576668-font-regular";
}
@font-face {
font-family: d2-2292454579-font-regular;
font-family: d2-2541576668-font-regular;
src: url("data:application/font-woff;base64,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");
}
.d2-2292454579 .text-bold {
font-family: "d2-2292454579-font-bold";
.d2-2541576668 .text-bold {
font-family: "d2-2541576668-font-bold";
}
@font-face {
font-family: d2-2292454579-font-bold;
font-family: d2-2541576668-font-bold;
src: url("data:application/font-woff;base64,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");
}]]></style><style type="text/css"><![CDATA[.shape {
shape-rendering: geometricPrecision;
@ -25,92 +25,92 @@
opacity: 0.5;
}
.d2-2292454579 .fill-N1{fill:#0A0F25;}
.d2-2292454579 .fill-N2{fill:#676C7E;}
.d2-2292454579 .fill-N3{fill:#9499AB;}
.d2-2292454579 .fill-N4{fill:#CFD2DD;}
.d2-2292454579 .fill-N5{fill:#DEE1EB;}
.d2-2292454579 .fill-N6{fill:#EEF1F8;}
.d2-2292454579 .fill-N7{fill:#FFFFFF;}
.d2-2292454579 .fill-B1{fill:#0D32B2;}
.d2-2292454579 .fill-B2{fill:#0D32B2;}
.d2-2292454579 .fill-B3{fill:#E3E9FD;}
.d2-2292454579 .fill-B4{fill:#E3E9FD;}
.d2-2292454579 .fill-B5{fill:#EDF0FD;}
.d2-2292454579 .fill-B6{fill:#F7F8FE;}
.d2-2292454579 .fill-AA2{fill:#4A6FF3;}
.d2-2292454579 .fill-AA4{fill:#EDF0FD;}
.d2-2292454579 .fill-AA5{fill:#F7F8FE;}
.d2-2292454579 .fill-AB4{fill:#EDF0FD;}
.d2-2292454579 .fill-AB5{fill:#F7F8FE;}
.d2-2292454579 .stroke-N1{stroke:#0A0F25;}
.d2-2292454579 .stroke-N2{stroke:#676C7E;}
.d2-2292454579 .stroke-N3{stroke:#9499AB;}
.d2-2292454579 .stroke-N4{stroke:#CFD2DD;}
.d2-2292454579 .stroke-N5{stroke:#DEE1EB;}
.d2-2292454579 .stroke-N6{stroke:#EEF1F8;}
.d2-2292454579 .stroke-N7{stroke:#FFFFFF;}
.d2-2292454579 .stroke-B1{stroke:#0D32B2;}
.d2-2292454579 .stroke-B2{stroke:#0D32B2;}
.d2-2292454579 .stroke-B3{stroke:#E3E9FD;}
.d2-2292454579 .stroke-B4{stroke:#E3E9FD;}
.d2-2292454579 .stroke-B5{stroke:#EDF0FD;}
.d2-2292454579 .stroke-B6{stroke:#F7F8FE;}
.d2-2292454579 .stroke-AA2{stroke:#4A6FF3;}
.d2-2292454579 .stroke-AA4{stroke:#EDF0FD;}
.d2-2292454579 .stroke-AA5{stroke:#F7F8FE;}
.d2-2292454579 .stroke-AB4{stroke:#EDF0FD;}
.d2-2292454579 .stroke-AB5{stroke:#F7F8FE;}
.d2-2292454579 .background-color-N1{background-color:#0A0F25;}
.d2-2292454579 .background-color-N2{background-color:#676C7E;}
.d2-2292454579 .background-color-N3{background-color:#9499AB;}
.d2-2292454579 .background-color-N4{background-color:#CFD2DD;}
.d2-2292454579 .background-color-N5{background-color:#DEE1EB;}
.d2-2292454579 .background-color-N6{background-color:#EEF1F8;}
.d2-2292454579 .background-color-N7{background-color:#FFFFFF;}
.d2-2292454579 .background-color-B1{background-color:#0D32B2;}
.d2-2292454579 .background-color-B2{background-color:#0D32B2;}
.d2-2292454579 .background-color-B3{background-color:#E3E9FD;}
.d2-2292454579 .background-color-B4{background-color:#E3E9FD;}
.d2-2292454579 .background-color-B5{background-color:#EDF0FD;}
.d2-2292454579 .background-color-B6{background-color:#F7F8FE;}
.d2-2292454579 .background-color-AA2{background-color:#4A6FF3;}
.d2-2292454579 .background-color-AA4{background-color:#EDF0FD;}
.d2-2292454579 .background-color-AA5{background-color:#F7F8FE;}
.d2-2292454579 .background-color-AB4{background-color:#EDF0FD;}
.d2-2292454579 .background-color-AB5{background-color:#F7F8FE;}
.d2-2292454579 .color-N1{color:#0A0F25;}
.d2-2292454579 .color-N2{color:#676C7E;}
.d2-2292454579 .color-N3{color:#9499AB;}
.d2-2292454579 .color-N4{color:#CFD2DD;}
.d2-2292454579 .color-N5{color:#DEE1EB;}
.d2-2292454579 .color-N6{color:#EEF1F8;}
.d2-2292454579 .color-N7{color:#FFFFFF;}
.d2-2292454579 .color-B1{color:#0D32B2;}
.d2-2292454579 .color-B2{color:#0D32B2;}
.d2-2292454579 .color-B3{color:#E3E9FD;}
.d2-2292454579 .color-B4{color:#E3E9FD;}
.d2-2292454579 .color-B5{color:#EDF0FD;}
.d2-2292454579 .color-B6{color:#F7F8FE;}
.d2-2292454579 .color-AA2{color:#4A6FF3;}
.d2-2292454579 .color-AA4{color:#EDF0FD;}
.d2-2292454579 .color-AA5{color:#F7F8FE;}
.d2-2292454579 .color-AB4{color:#EDF0FD;}
.d2-2292454579 .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}]]></style><style type="text/css">.md em,
.d2-2541576668 .fill-N1{fill:#0A0F25;}
.d2-2541576668 .fill-N2{fill:#676C7E;}
.d2-2541576668 .fill-N3{fill:#9499AB;}
.d2-2541576668 .fill-N4{fill:#CFD2DD;}
.d2-2541576668 .fill-N5{fill:#DEE1EB;}
.d2-2541576668 .fill-N6{fill:#EEF1F8;}
.d2-2541576668 .fill-N7{fill:#FFFFFF;}
.d2-2541576668 .fill-B1{fill:#0D32B2;}
.d2-2541576668 .fill-B2{fill:#0D32B2;}
.d2-2541576668 .fill-B3{fill:#E3E9FD;}
.d2-2541576668 .fill-B4{fill:#E3E9FD;}
.d2-2541576668 .fill-B5{fill:#EDF0FD;}
.d2-2541576668 .fill-B6{fill:#F7F8FE;}
.d2-2541576668 .fill-AA2{fill:#4A6FF3;}
.d2-2541576668 .fill-AA4{fill:#EDF0FD;}
.d2-2541576668 .fill-AA5{fill:#F7F8FE;}
.d2-2541576668 .fill-AB4{fill:#EDF0FD;}
.d2-2541576668 .fill-AB5{fill:#F7F8FE;}
.d2-2541576668 .stroke-N1{stroke:#0A0F25;}
.d2-2541576668 .stroke-N2{stroke:#676C7E;}
.d2-2541576668 .stroke-N3{stroke:#9499AB;}
.d2-2541576668 .stroke-N4{stroke:#CFD2DD;}
.d2-2541576668 .stroke-N5{stroke:#DEE1EB;}
.d2-2541576668 .stroke-N6{stroke:#EEF1F8;}
.d2-2541576668 .stroke-N7{stroke:#FFFFFF;}
.d2-2541576668 .stroke-B1{stroke:#0D32B2;}
.d2-2541576668 .stroke-B2{stroke:#0D32B2;}
.d2-2541576668 .stroke-B3{stroke:#E3E9FD;}
.d2-2541576668 .stroke-B4{stroke:#E3E9FD;}
.d2-2541576668 .stroke-B5{stroke:#EDF0FD;}
.d2-2541576668 .stroke-B6{stroke:#F7F8FE;}
.d2-2541576668 .stroke-AA2{stroke:#4A6FF3;}
.d2-2541576668 .stroke-AA4{stroke:#EDF0FD;}
.d2-2541576668 .stroke-AA5{stroke:#F7F8FE;}
.d2-2541576668 .stroke-AB4{stroke:#EDF0FD;}
.d2-2541576668 .stroke-AB5{stroke:#F7F8FE;}
.d2-2541576668 .background-color-N1{background-color:#0A0F25;}
.d2-2541576668 .background-color-N2{background-color:#676C7E;}
.d2-2541576668 .background-color-N3{background-color:#9499AB;}
.d2-2541576668 .background-color-N4{background-color:#CFD2DD;}
.d2-2541576668 .background-color-N5{background-color:#DEE1EB;}
.d2-2541576668 .background-color-N6{background-color:#EEF1F8;}
.d2-2541576668 .background-color-N7{background-color:#FFFFFF;}
.d2-2541576668 .background-color-B1{background-color:#0D32B2;}
.d2-2541576668 .background-color-B2{background-color:#0D32B2;}
.d2-2541576668 .background-color-B3{background-color:#E3E9FD;}
.d2-2541576668 .background-color-B4{background-color:#E3E9FD;}
.d2-2541576668 .background-color-B5{background-color:#EDF0FD;}
.d2-2541576668 .background-color-B6{background-color:#F7F8FE;}
.d2-2541576668 .background-color-AA2{background-color:#4A6FF3;}
.d2-2541576668 .background-color-AA4{background-color:#EDF0FD;}
.d2-2541576668 .background-color-AA5{background-color:#F7F8FE;}
.d2-2541576668 .background-color-AB4{background-color:#EDF0FD;}
.d2-2541576668 .background-color-AB5{background-color:#F7F8FE;}
.d2-2541576668 .color-N1{color:#0A0F25;}
.d2-2541576668 .color-N2{color:#676C7E;}
.d2-2541576668 .color-N3{color:#9499AB;}
.d2-2541576668 .color-N4{color:#CFD2DD;}
.d2-2541576668 .color-N5{color:#DEE1EB;}
.d2-2541576668 .color-N6{color:#EEF1F8;}
.d2-2541576668 .color-N7{color:#FFFFFF;}
.d2-2541576668 .color-B1{color:#0D32B2;}
.d2-2541576668 .color-B2{color:#0D32B2;}
.d2-2541576668 .color-B3{color:#E3E9FD;}
.d2-2541576668 .color-B4{color:#E3E9FD;}
.d2-2541576668 .color-B5{color:#EDF0FD;}
.d2-2541576668 .color-B6{color:#F7F8FE;}
.d2-2541576668 .color-AA2{color:#4A6FF3;}
.d2-2541576668 .color-AA4{color:#EDF0FD;}
.d2-2541576668 .color-AA5{color:#F7F8FE;}
.d2-2541576668 .color-AB4{color:#EDF0FD;}
.d2-2541576668 .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}]]></style><style type="text/css">.md em,
.md dfn {
font-family: "d2-2292454579-font-italic";
font-family: "d2-2541576668-font-italic";
}
.md b,
.md strong {
font-family: "d2-2292454579-font-bold";
font-family: "d2-2541576668-font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "d2-2292454579-font-mono";
font-family: "d2-2541576668-font-mono";
font-size: 1em;
}
@ -126,7 +126,7 @@
margin: 0;
color: var(--color-fg-default);
background-color: transparent; /* we don't want to define the background color */
font-family: "d2-2292454579-font-regular";
font-family: "d2-2541576668-font-regular";
font-size: 16px;
line-height: 1.5;
word-wrap: break-word;
@ -340,7 +340,7 @@
margin-bottom: 16px;
font-weight: 600;
line-height: 1.25;
font-family: "d2-2292454579-font-regular";
font-family: "d2-2541576668-font-regular";
}
.md h2 {
@ -839,7 +839,7 @@
margin: 0 -1.6em 0.25em 0.2em;
}
</style><g id="poll the people"><g class="shape" ><rect x="110.000000" y="12.000000" width="150.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="185.000000" y="50.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">poll the people</text></g><g id="results"><g class="shape" ><rect x="64.000000" y="158.000000" width="93.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="110.500000" y="196.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">results</text></g><g id="unfavorable"><g class="shape" ><rect x="172.000000" y="304.000000" width="131.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="237.500000" y="342.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">unfavorable</text></g><g id="favorable"><g class="shape" ><rect x="39.000000" y="304.000000" width="113.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="95.500000" y="342.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">favorable</text></g><g id="will of the people"><g class="shape" ><rect x="12.000000" y="440.000000" width="167.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="95.500000" y="478.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">will of the people</text></g><g id="title"><g class="shape" ></g><g><foreignObject requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" x="24.000000" y="-59.000000" width="266" height="51"><div xmlns="http://www.w3.org/1999/xhtml" class="md"><h1>A winning strategy</h1>
</div></foreignObject></g></g><g id="(poll the people -&gt; results)[0]"><marker id="mk-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 160.166667 80.000000 L 160.166667 108.000000 S 160.166667 118.000000 150.166667 118.000000 L 121.000000 118.000000 S 111.000000 118.000000 111.000000 128.000000 L 111.000000 154.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2292454579)" /></g><g id="(results -&gt; unfavorable)[0]"><path d="M 126.500000 226.000000 L 126.500000 254.000000 S 126.500000 264.000000 136.500000 264.000000 L 205.666667 264.000000 S 215.666667 264.000000 215.666667 274.000000 L 215.666667 300.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2292454579)" /></g><g id="(unfavorable -&gt; poll the people)[0]"><path d="M 259.333333 302.000000 L 259.333333 128.000000 S 259.333333 118.000000 249.333333 118.000000 L 220.166667 118.000000 S 210.166667 118.000000 210.166667 108.000000 L 210.166667 82.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2292454579)" /></g><g id="(results -&gt; favorable)[0]"><path d="M 95.500000 226.000000 L 95.500000 300.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2292454579)" /></g><g id="(favorable -&gt; will of the people)[0]"><path d="M 95.500000 372.000000 L 95.500000 436.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2292454579)" /></g><mask id="d2-2292454579" maskUnits="userSpaceOnUse" x="11" y="-60" width="293" height="567">
</div></foreignObject></g></g><g id="(poll the people -&gt; results)[0]"><marker id="mk-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 160.166667 80.000000 L 160.166667 108.000000 S 160.166667 118.000000 150.166667 118.000000 L 121.000000 118.000000 S 111.000000 118.000000 111.000000 128.000000 L 111.000000 154.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2541576668)" /></g><g id="(results -&gt; unfavorable)[0]"><path d="M 126.500000 226.000000 L 126.500000 254.000000 S 126.500000 264.000000 136.500000 264.000000 L 205.666667 264.000000 S 215.666667 264.000000 215.666667 274.000000 L 215.666667 300.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2541576668)" /></g><g id="(unfavorable -&gt; poll the people)[0]"><path d="M 259.333333 302.000000 L 259.333333 128.000000 S 259.333333 118.000000 249.333333 118.000000 L 220.166667 118.000000 S 210.166667 118.000000 210.166667 108.000000 L 210.166667 82.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2541576668)" /></g><g id="(results -&gt; favorable)[0]"><path d="M 95.500000 226.000000 L 95.500000 300.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2541576668)" /></g><g id="(favorable -&gt; will of the people)[0]"><path d="M 95.500000 372.000000 L 95.500000 436.000000" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-3488378134)" mask="url(#d2-2541576668)" /></g><mask id="d2-2541576668" maskUnits="userSpaceOnUse" x="11" y="-60" width="293" height="567">
<rect x="11" y="-60" width="293" height="567" fill="white"></rect>
</mask></svg></svg>

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View file

@ -0,0 +1,391 @@
{
"name": "",
"isFolderOnly": false,
"fontFamily": "SourceSansPro",
"shapes": [
{
"id": "x",
"type": "rectangle",
"pos": {
"x": 0,
"y": 0
},
"width": 53,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "B6",
"stroke": "B1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "x",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 8,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "y",
"type": "rectangle",
"pos": {
"x": 153,
"y": 0
},
"width": 54,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "B6",
"stroke": "B1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "y",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 9,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "z",
"type": "rectangle",
"pos": {
"x": 307,
"y": 0
},
"width": 52,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "B6",
"stroke": "B1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "z",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 7,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "legend",
"type": "rectangle",
"pos": {
"x": 87,
"y": 122
},
"width": 184,
"height": 80,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "B4",
"stroke": "B1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "legend",
"fontSize": 28,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 77,
"labelHeight": 36,
"labelPosition": "OUTSIDE_TOP_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "legend.color1",
"type": "text",
"pos": {
"x": 127,
"y": 151
},
"width": 22,
"height": 21,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "transparent",
"stroke": "N1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "foo",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "green",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 22,
"labelHeight": 21,
"zIndex": 0,
"level": 2
},
{
"id": "legend.color2",
"type": "text",
"pos": {
"x": 209,
"y": 151
},
"width": 22,
"height": 21,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "transparent",
"stroke": "N1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "bar",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "red",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 22,
"labelHeight": 21,
"zIndex": 0,
"level": 2
}
],
"connections": [
{
"id": "(x -> y)[0]",
"src": "x",
"srcArrow": "none",
"srcLabel": "",
"dst": "y",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "green",
"borderRadius": 10,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 53,
"y": 33
},
{
"x": 93,
"y": 33
},
{
"x": 113,
"y": 33
},
{
"x": 153,
"y": 33
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "(y -> z)[0]",
"src": "y",
"srcArrow": "none",
"srcLabel": "",
"dst": "z",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "red",
"borderRadius": 10,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 207,
"y": 33
},
{
"x": 247,
"y": 33
},
{
"x": 267,
"y": 33
},
{
"x": 307,
"y": 33
}
],
"isCurve": true,
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
}
],
"root": {
"id": "",
"type": "",
"pos": {
"x": 0,
"y": 0
},
"width": 0,
"height": 0,
"opacity": 0,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 0,
"fill": "N7",
"stroke": "",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 0,
"fontFamily": "",
"language": "",
"color": "",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"zIndex": 0,
"level": 0
}
}

View file

@ -0,0 +1,844 @@
<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" d2Version="v0.3.0-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 361 204"><svg id="d2-svg" class="d2-1518985372" width="361" height="204" viewBox="-1 -1 361 204"><rect x="-1.000000" y="-1.000000" width="361.000000" height="204.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.d2-1518985372 .text {
font-family: "d2-1518985372-font-regular";
}
@font-face {
font-family: d2-1518985372-font-regular;
src: url("data:application/font-woff;base64,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");
}
.d2-1518985372 .text-bold {
font-family: "d2-1518985372-font-bold";
}
@font-face {
font-family: d2-1518985372-font-bold;
src: url("data:application/font-woff;base64,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");
}]]></style><style type="text/css"><![CDATA[.shape {
shape-rendering: geometricPrecision;
stroke-linejoin: round;
}
.connection {
stroke-linecap: round;
stroke-linejoin: round;
}
.blend {
mix-blend-mode: multiply;
opacity: 0.5;
}
.d2-1518985372 .fill-N1{fill:#0A0F25;}
.d2-1518985372 .fill-N2{fill:#676C7E;}
.d2-1518985372 .fill-N3{fill:#9499AB;}
.d2-1518985372 .fill-N4{fill:#CFD2DD;}
.d2-1518985372 .fill-N5{fill:#DEE1EB;}
.d2-1518985372 .fill-N6{fill:#EEF1F8;}
.d2-1518985372 .fill-N7{fill:#FFFFFF;}
.d2-1518985372 .fill-B1{fill:#0D32B2;}
.d2-1518985372 .fill-B2{fill:#0D32B2;}
.d2-1518985372 .fill-B3{fill:#E3E9FD;}
.d2-1518985372 .fill-B4{fill:#E3E9FD;}
.d2-1518985372 .fill-B5{fill:#EDF0FD;}
.d2-1518985372 .fill-B6{fill:#F7F8FE;}
.d2-1518985372 .fill-AA2{fill:#4A6FF3;}
.d2-1518985372 .fill-AA4{fill:#EDF0FD;}
.d2-1518985372 .fill-AA5{fill:#F7F8FE;}
.d2-1518985372 .fill-AB4{fill:#EDF0FD;}
.d2-1518985372 .fill-AB5{fill:#F7F8FE;}
.d2-1518985372 .stroke-N1{stroke:#0A0F25;}
.d2-1518985372 .stroke-N2{stroke:#676C7E;}
.d2-1518985372 .stroke-N3{stroke:#9499AB;}
.d2-1518985372 .stroke-N4{stroke:#CFD2DD;}
.d2-1518985372 .stroke-N5{stroke:#DEE1EB;}
.d2-1518985372 .stroke-N6{stroke:#EEF1F8;}
.d2-1518985372 .stroke-N7{stroke:#FFFFFF;}
.d2-1518985372 .stroke-B1{stroke:#0D32B2;}
.d2-1518985372 .stroke-B2{stroke:#0D32B2;}
.d2-1518985372 .stroke-B3{stroke:#E3E9FD;}
.d2-1518985372 .stroke-B4{stroke:#E3E9FD;}
.d2-1518985372 .stroke-B5{stroke:#EDF0FD;}
.d2-1518985372 .stroke-B6{stroke:#F7F8FE;}
.d2-1518985372 .stroke-AA2{stroke:#4A6FF3;}
.d2-1518985372 .stroke-AA4{stroke:#EDF0FD;}
.d2-1518985372 .stroke-AA5{stroke:#F7F8FE;}
.d2-1518985372 .stroke-AB4{stroke:#EDF0FD;}
.d2-1518985372 .stroke-AB5{stroke:#F7F8FE;}
.d2-1518985372 .background-color-N1{background-color:#0A0F25;}
.d2-1518985372 .background-color-N2{background-color:#676C7E;}
.d2-1518985372 .background-color-N3{background-color:#9499AB;}
.d2-1518985372 .background-color-N4{background-color:#CFD2DD;}
.d2-1518985372 .background-color-N5{background-color:#DEE1EB;}
.d2-1518985372 .background-color-N6{background-color:#EEF1F8;}
.d2-1518985372 .background-color-N7{background-color:#FFFFFF;}
.d2-1518985372 .background-color-B1{background-color:#0D32B2;}
.d2-1518985372 .background-color-B2{background-color:#0D32B2;}
.d2-1518985372 .background-color-B3{background-color:#E3E9FD;}
.d2-1518985372 .background-color-B4{background-color:#E3E9FD;}
.d2-1518985372 .background-color-B5{background-color:#EDF0FD;}
.d2-1518985372 .background-color-B6{background-color:#F7F8FE;}
.d2-1518985372 .background-color-AA2{background-color:#4A6FF3;}
.d2-1518985372 .background-color-AA4{background-color:#EDF0FD;}
.d2-1518985372 .background-color-AA5{background-color:#F7F8FE;}
.d2-1518985372 .background-color-AB4{background-color:#EDF0FD;}
.d2-1518985372 .background-color-AB5{background-color:#F7F8FE;}
.d2-1518985372 .color-N1{color:#0A0F25;}
.d2-1518985372 .color-N2{color:#676C7E;}
.d2-1518985372 .color-N3{color:#9499AB;}
.d2-1518985372 .color-N4{color:#CFD2DD;}
.d2-1518985372 .color-N5{color:#DEE1EB;}
.d2-1518985372 .color-N6{color:#EEF1F8;}
.d2-1518985372 .color-N7{color:#FFFFFF;}
.d2-1518985372 .color-B1{color:#0D32B2;}
.d2-1518985372 .color-B2{color:#0D32B2;}
.d2-1518985372 .color-B3{color:#E3E9FD;}
.d2-1518985372 .color-B4{color:#E3E9FD;}
.d2-1518985372 .color-B5{color:#EDF0FD;}
.d2-1518985372 .color-B6{color:#F7F8FE;}
.d2-1518985372 .color-AA2{color:#4A6FF3;}
.d2-1518985372 .color-AA4{color:#EDF0FD;}
.d2-1518985372 .color-AA5{color:#F7F8FE;}
.d2-1518985372 .color-AB4{color:#EDF0FD;}
.d2-1518985372 .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}]]></style><style type="text/css">.md em,
.md dfn {
font-family: "d2-1518985372-font-italic";
}
.md b,
.md strong {
font-family: "d2-1518985372-font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "d2-1518985372-font-mono";
font-size: 1em;
}
.md {
tab-size: 4;
}
/* variables are provided in d2renderers/d2svg/d2svg.go */
.md {
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
margin: 0;
color: var(--color-fg-default);
background-color: transparent; /* we don't want to define the background color */
font-family: "d2-1518985372-font-regular";
font-size: 16px;
line-height: 1.5;
word-wrap: break-word;
}
.md details,
.md figcaption,
.md figure {
display: block;
}
.md summary {
display: list-item;
}
.md [hidden] {
display: none !important;
}
.md a {
background-color: transparent;
color: var(--color-accent-fg);
text-decoration: none;
}
.md a:active,
.md a:hover {
outline-width: 0;
}
.md abbr[title] {
border-bottom: none;
text-decoration: underline dotted;
}
.md dfn {
font-style: italic;
}
.md h1 {
margin: 0.67em 0;
font-weight: 600;
padding-bottom: 0.3em;
font-size: 2em;
border-bottom: 1px solid var(--color-border-muted);
}
.md mark {
background-color: var(--color-attention-subtle);
color: var(--color-text-primary);
}
.md small {
font-size: 90%;
}
.md sub,
.md sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
.md sub {
bottom: -0.25em;
}
.md sup {
top: -0.5em;
}
.md img {
border-style: none;
max-width: 100%;
box-sizing: content-box;
background-color: var(--color-canvas-default);
}
.md figure {
margin: 1em 40px;
}
.md hr {
box-sizing: content-box;
overflow: hidden;
background: transparent;
border-bottom: 1px solid var(--color-border-muted);
height: 0.25em;
padding: 0;
margin: 24px 0;
background-color: var(--color-border-default);
border: 0;
}
.md input {
font: inherit;
margin: 0;
overflow: visible;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
.md [type="button"],
.md [type="reset"],
.md [type="submit"] {
-webkit-appearance: button;
}
.md [type="button"]::-moz-focus-inner,
.md [type="reset"]::-moz-focus-inner,
.md [type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
.md [type="button"]:-moz-focusring,
.md [type="reset"]:-moz-focusring,
.md [type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
.md [type="checkbox"],
.md [type="radio"] {
box-sizing: border-box;
padding: 0;
}
.md [type="number"]::-webkit-inner-spin-button,
.md [type="number"]::-webkit-outer-spin-button {
height: auto;
}
.md [type="search"] {
-webkit-appearance: textfield;
outline-offset: -2px;
}
.md [type="search"]::-webkit-search-cancel-button,
.md [type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
.md ::-webkit-input-placeholder {
color: inherit;
opacity: 0.54;
}
.md ::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit;
}
.md a:hover {
text-decoration: underline;
}
.md hr::before {
display: table;
content: "";
}
.md hr::after {
display: table;
clear: both;
content: "";
}
.md table {
border-spacing: 0;
border-collapse: collapse;
display: block;
width: max-content;
max-width: 100%;
overflow: auto;
}
.md td,
.md th {
padding: 0;
}
.md details summary {
cursor: pointer;
}
.md details:not([open]) > *:not(summary) {
display: none !important;
}
.md kbd {
display: inline-block;
padding: 3px 5px;
color: var(--color-fg-default);
vertical-align: middle;
background-color: var(--color-canvas-subtle);
border: solid 1px var(--color-neutral-muted);
border-bottom-color: var(--color-neutral-muted);
border-radius: 6px;
box-shadow: inset 0 -1px 0 var(--color-neutral-muted);
}
.md h1,
.md h2,
.md h3,
.md h4,
.md h5,
.md h6 {
margin-top: 24px;
margin-bottom: 16px;
font-weight: 600;
line-height: 1.25;
font-family: "d2-1518985372-font-regular";
}
.md h2 {
font-weight: 600;
padding-bottom: 0.3em;
font-size: 1.5em;
border-bottom: 1px solid var(--color-border-muted);
}
.md h3 {
font-weight: 600;
font-size: 1.25em;
}
.md h4 {
font-weight: 600;
font-size: 1em;
}
.md h5 {
font-weight: 600;
font-size: 0.875em;
}
.md h6 {
font-weight: 600;
font-size: 0.85em;
color: var(--color-fg-muted);
}
.md p {
margin-top: 0;
margin-bottom: 10px;
}
.md blockquote {
margin: 0;
padding: 0 1em;
color: var(--color-fg-muted);
border-left: 0.25em solid var(--color-border-default);
}
.md ul,
.md ol {
margin-top: 0;
margin-bottom: 0;
padding-left: 2em;
}
.md ol ol,
.md ul ol {
list-style-type: lower-roman;
}
.md ul ul ol,
.md ul ol ol,
.md ol ul ol,
.md ol ol ol {
list-style-type: lower-alpha;
}
.md dd {
margin-left: 0;
}
.md pre {
margin-top: 0;
margin-bottom: 0;
word-wrap: normal;
}
.md ::placeholder {
color: var(--color-fg-subtle);
opacity: 1;
}
.md input::-webkit-outer-spin-button,
.md input::-webkit-inner-spin-button {
margin: 0;
-webkit-appearance: none;
appearance: none;
}
.md::before {
display: table;
content: "";
}
.md::after {
display: table;
clear: both;
content: "";
}
.md > *:first-child {
margin-top: 0 !important;
}
.md > *:last-child {
margin-bottom: 0 !important;
}
.md a:not([href]) {
color: inherit;
text-decoration: none;
}
.md .absent {
color: var(--color-danger-fg);
}
.md .anchor {
float: left;
padding-right: 4px;
margin-left: -20px;
line-height: 1;
}
.md .anchor:focus {
outline: none;
}
.md p,
.md blockquote,
.md ul,
.md ol,
.md dl,
.md table,
.md pre,
.md details {
margin-top: 0;
margin-bottom: 16px;
}
.md blockquote > :first-child {
margin-top: 0;
}
.md blockquote > :last-child {
margin-bottom: 0;
}
.md sup > a::before {
content: "[";
}
.md sup > a::after {
content: "]";
}
.md h1:hover .anchor,
.md h2:hover .anchor,
.md h3:hover .anchor,
.md h4:hover .anchor,
.md h5:hover .anchor,
.md h6:hover .anchor {
text-decoration: none;
}
.md h1 tt,
.md h1 code,
.md h2 tt,
.md h2 code,
.md h3 tt,
.md h3 code,
.md h4 tt,
.md h4 code,
.md h5 tt,
.md h5 code,
.md h6 tt,
.md h6 code {
padding: 0 0.2em;
font-size: inherit;
}
.md ul.no-list,
.md ol.no-list {
padding: 0;
list-style-type: none;
}
.md ol[type="1"] {
list-style-type: decimal;
}
.md ol[type="a"] {
list-style-type: lower-alpha;
}
.md ol[type="i"] {
list-style-type: lower-roman;
}
.md div > ol:not([type]) {
list-style-type: decimal;
}
.md ul ul,
.md ul ol,
.md ol ol,
.md ol ul {
margin-top: 0;
margin-bottom: 0;
}
.md li > p {
margin-top: 16px;
}
.md li + li {
margin-top: 0.25em;
}
.md dl {
padding: 0;
}
.md dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: 600;
}
.md dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
.md table th {
font-weight: 600;
}
.md table th,
.md table td {
padding: 6px 13px;
border: 1px solid var(--color-border-default);
}
.md table tr {
background-color: var(--color-canvas-default);
border-top: 1px solid var(--color-border-muted);
}
.md table tr:nth-child(2n) {
background-color: var(--color-canvas-subtle);
}
.md table img {
background-color: transparent;
}
.md img[align="right"] {
padding-left: 20px;
}
.md img[align="left"] {
padding-right: 20px;
}
.md span.frame {
display: block;
overflow: hidden;
}
.md span.frame > span {
display: block;
float: left;
width: auto;
padding: 7px;
margin: 13px 0 0;
overflow: hidden;
border: 1px solid var(--color-border-default);
}
.md span.frame span img {
display: block;
float: left;
}
.md span.frame span span {
display: block;
padding: 5px 0 0;
clear: both;
color: var(--color-fg-default);
}
.md span.align-center {
display: block;
overflow: hidden;
clear: both;
}
.md span.align-center > span {
display: block;
margin: 13px auto 0;
overflow: hidden;
text-align: center;
}
.md span.align-center span img {
margin: 0 auto;
text-align: center;
}
.md span.align-right {
display: block;
overflow: hidden;
clear: both;
}
.md span.align-right > span {
display: block;
margin: 13px 0 0;
overflow: hidden;
text-align: right;
}
.md span.align-right span img {
margin: 0;
text-align: right;
}
.md span.float-left {
display: block;
float: left;
margin-right: 13px;
overflow: hidden;
}
.md span.float-left span {
margin: 13px 0 0;
}
.md span.float-right {
display: block;
float: right;
margin-left: 13px;
overflow: hidden;
}
.md span.float-right > span {
display: block;
margin: 13px auto 0;
overflow: hidden;
text-align: right;
}
.md code,
.md tt {
padding: 0.2em 0.4em;
margin: 0;
font-size: 85%;
background-color: var(--color-neutral-muted);
border-radius: 6px;
}
.md code br,
.md tt br {
display: none;
}
.md del code {
text-decoration: inherit;
}
.md pre code {
font-size: 100%;
}
.md pre > code {
padding: 0;
margin: 0;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
.md .highlight {
margin-bottom: 16px;
}
.md .highlight pre {
margin-bottom: 0;
word-break: normal;
}
.md .highlight pre,
.md pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: var(--color-canvas-subtle);
border-radius: 6px;
}
.md pre code,
.md pre tt {
display: inline;
max-width: auto;
padding: 0;
margin: 0;
overflow: visible;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
.md .csv-data td,
.md .csv-data th {
padding: 5px;
overflow: hidden;
font-size: 12px;
line-height: 1;
text-align: left;
white-space: nowrap;
}
.md .csv-data .blob-num {
padding: 10px 8px 9px;
text-align: right;
background: var(--color-canvas-default);
border: 0;
}
.md .csv-data tr {
border-top: 0;
}
.md .csv-data th {
font-weight: 600;
background: var(--color-canvas-subtle);
border-top: 0;
}
.md .footnotes {
font-size: 12px;
color: var(--color-fg-muted);
border-top: 1px solid var(--color-border-default);
}
.md .footnotes ol {
padding-left: 16px;
}
.md .footnotes li {
position: relative;
}
.md .footnotes li:target::before {
position: absolute;
top: -8px;
right: -8px;
bottom: -8px;
left: -24px;
pointer-events: none;
content: "";
border: 2px solid var(--color-accent-emphasis);
border-radius: 6px;
}
.md .footnotes li:target {
color: var(--color-fg-default);
}
.md .task-list-item {
list-style-type: none;
}
.md .task-list-item label {
font-weight: 400;
}
.md .task-list-item.enabled label {
cursor: pointer;
}
.md .task-list-item + .task-list-item {
margin-top: 3px;
}
.md .task-list-item .handle {
display: none;
}
.md .task-list-item-checkbox {
margin: 0 0.2em 0.25em -1.6em;
vertical-align: middle;
}
.md .contains-task-list:dir(rtl) .task-list-item-checkbox {
margin: 0 -1.6em 0.25em 0.2em;
}
</style><g id="x"><g class="shape" ><rect x="0.000000" y="0.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="26.500000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">x</text></g><g id="y"><g class="shape" ><rect x="153.000000" y="0.000000" width="54.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="180.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">y</text></g><g id="z"><g class="shape" ><rect x="307.000000" y="0.000000" width="52.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="333.000000" y="38.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">z</text></g><g id="legend"><g class="shape" ><rect x="87.000000" y="122.000000" width="184.000000" height="80.000000" class=" stroke-B1 fill-B4" style="stroke-width:2;" /></g><text x="179.000000" y="109.000000" class="text fill-N1" style="text-anchor:middle;font-size:28px">legend</text></g><g id="legend.color1"><g class="shape" ></g><text x="138.000000" y="167.000000" fill="green" class="text" style="text-anchor:middle;font-size:16px">foo</text></g><g id="legend.color2"><g class="shape" ></g><text x="220.000000" y="167.000000" fill="red" class="text" style="text-anchor:middle;font-size:16px">bar</text></g><g id="(x -&gt; y)[0]"><marker id="mk-1457214650" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="green" class="connection" stroke-width="2" /> </marker><path d="M 55.000000 33.000000 C 93.000000 33.000000 113.000000 33.000000 149.000000 33.000000" stroke="green" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-1457214650)" mask="url(#d2-1518985372)" /></g><g id="(y -&gt; z)[0]"><marker id="mk-1222543834" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="red" class="connection" stroke-width="2" /> </marker><path d="M 209.000000 33.000000 C 247.000000 33.000000 267.000000 33.000000 303.000000 33.000000" stroke="red" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-1222543834)" mask="url(#d2-1518985372)" /></g><mask id="d2-1518985372" maskUnits="userSpaceOnUse" x="-1" y="-1" width="361" height="204">
<rect x="-1" y="-1" width="361" height="204" fill="white"></rect>
</mask></svg></svg>

After

Width:  |  Height:  |  Size: 26 KiB

View file

@ -0,0 +1,373 @@
{
"name": "",
"isFolderOnly": false,
"fontFamily": "SourceSansPro",
"shapes": [
{
"id": "x",
"type": "rectangle",
"pos": {
"x": 12,
"y": 12
},
"width": 53,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "B6",
"stroke": "B1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "x",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 8,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "y",
"type": "rectangle",
"pos": {
"x": 135,
"y": 12
},
"width": 54,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "B6",
"stroke": "B1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "y",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 9,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "z",
"type": "rectangle",
"pos": {
"x": 259,
"y": 12
},
"width": 52,
"height": 66,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "B6",
"stroke": "B1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "z",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": true,
"underline": false,
"labelWidth": 7,
"labelHeight": 21,
"labelPosition": "INSIDE_MIDDLE_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "legend",
"type": "rectangle",
"pos": {
"x": 79,
"y": 98
},
"width": 164,
"height": 121,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "B4",
"stroke": "B1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "legend",
"fontSize": 28,
"fontFamily": "DEFAULT",
"language": "",
"color": "N1",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 77,
"labelHeight": 36,
"labelPosition": "INSIDE_TOP_CENTER",
"zIndex": 0,
"level": 1
},
{
"id": "legend.color1",
"type": "text",
"pos": {
"x": 129,
"y": 148
},
"width": 22,
"height": 21,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "transparent",
"stroke": "N1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "foo",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "green",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 22,
"labelHeight": 21,
"zIndex": 0,
"level": 2
},
{
"id": "legend.color2",
"type": "text",
"pos": {
"x": 171,
"y": 148
},
"width": 22,
"height": 21,
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"borderRadius": 0,
"fill": "transparent",
"stroke": "N1",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "bar",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "red",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 22,
"labelHeight": 21,
"zIndex": 0,
"level": 2
}
],
"connections": [
{
"id": "(x -> y)[0]",
"src": "x",
"srcArrow": "none",
"srcLabel": "",
"dst": "y",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "green",
"borderRadius": 10,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 65,
"y": 45
},
{
"x": 135,
"y": 45
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
},
{
"id": "(y -> z)[0]",
"src": "y",
"srcArrow": "none",
"srcLabel": "",
"dst": "z",
"dstArrow": "triangle",
"dstLabel": "",
"opacity": 1,
"strokeDash": 0,
"strokeWidth": 2,
"stroke": "red",
"borderRadius": 10,
"label": "",
"fontSize": 16,
"fontFamily": "DEFAULT",
"language": "",
"color": "N2",
"italic": true,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"labelPosition": "",
"labelPercentage": 0,
"route": [
{
"x": 189,
"y": 45
},
{
"x": 259,
"y": 45
}
],
"animated": false,
"tooltip": "",
"icon": null,
"zIndex": 0
}
],
"root": {
"id": "",
"type": "",
"pos": {
"x": 0,
"y": 0
},
"width": 0,
"height": 0,
"opacity": 0,
"strokeDash": 0,
"strokeWidth": 0,
"borderRadius": 0,
"fill": "N7",
"stroke": "",
"shadow": false,
"3d": false,
"multiple": false,
"double-border": false,
"tooltip": "",
"link": "",
"icon": null,
"iconPosition": "",
"blend": false,
"fields": null,
"methods": null,
"columns": null,
"label": "",
"fontSize": 0,
"fontFamily": "",
"language": "",
"color": "",
"italic": false,
"bold": false,
"underline": false,
"labelWidth": 0,
"labelHeight": 0,
"zIndex": 0,
"level": 0
}
}

View file

@ -0,0 +1,844 @@
<?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" d2Version="v0.3.0-HEAD" preserveAspectRatio="xMinYMin meet" viewBox="0 0 301 209"><svg id="d2-svg" class="d2-1696315703" width="301" height="209" viewBox="11 11 301 209"><rect x="11.000000" y="11.000000" width="301.000000" height="209.000000" rx="0.000000" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
.d2-1696315703 .text {
font-family: "d2-1696315703-font-regular";
}
@font-face {
font-family: d2-1696315703-font-regular;
src: url("data:application/font-woff;base64,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");
}
.d2-1696315703 .text-bold {
font-family: "d2-1696315703-font-bold";
}
@font-face {
font-family: d2-1696315703-font-bold;
src: url("data:application/font-woff;base64,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");
}]]></style><style type="text/css"><![CDATA[.shape {
shape-rendering: geometricPrecision;
stroke-linejoin: round;
}
.connection {
stroke-linecap: round;
stroke-linejoin: round;
}
.blend {
mix-blend-mode: multiply;
opacity: 0.5;
}
.d2-1696315703 .fill-N1{fill:#0A0F25;}
.d2-1696315703 .fill-N2{fill:#676C7E;}
.d2-1696315703 .fill-N3{fill:#9499AB;}
.d2-1696315703 .fill-N4{fill:#CFD2DD;}
.d2-1696315703 .fill-N5{fill:#DEE1EB;}
.d2-1696315703 .fill-N6{fill:#EEF1F8;}
.d2-1696315703 .fill-N7{fill:#FFFFFF;}
.d2-1696315703 .fill-B1{fill:#0D32B2;}
.d2-1696315703 .fill-B2{fill:#0D32B2;}
.d2-1696315703 .fill-B3{fill:#E3E9FD;}
.d2-1696315703 .fill-B4{fill:#E3E9FD;}
.d2-1696315703 .fill-B5{fill:#EDF0FD;}
.d2-1696315703 .fill-B6{fill:#F7F8FE;}
.d2-1696315703 .fill-AA2{fill:#4A6FF3;}
.d2-1696315703 .fill-AA4{fill:#EDF0FD;}
.d2-1696315703 .fill-AA5{fill:#F7F8FE;}
.d2-1696315703 .fill-AB4{fill:#EDF0FD;}
.d2-1696315703 .fill-AB5{fill:#F7F8FE;}
.d2-1696315703 .stroke-N1{stroke:#0A0F25;}
.d2-1696315703 .stroke-N2{stroke:#676C7E;}
.d2-1696315703 .stroke-N3{stroke:#9499AB;}
.d2-1696315703 .stroke-N4{stroke:#CFD2DD;}
.d2-1696315703 .stroke-N5{stroke:#DEE1EB;}
.d2-1696315703 .stroke-N6{stroke:#EEF1F8;}
.d2-1696315703 .stroke-N7{stroke:#FFFFFF;}
.d2-1696315703 .stroke-B1{stroke:#0D32B2;}
.d2-1696315703 .stroke-B2{stroke:#0D32B2;}
.d2-1696315703 .stroke-B3{stroke:#E3E9FD;}
.d2-1696315703 .stroke-B4{stroke:#E3E9FD;}
.d2-1696315703 .stroke-B5{stroke:#EDF0FD;}
.d2-1696315703 .stroke-B6{stroke:#F7F8FE;}
.d2-1696315703 .stroke-AA2{stroke:#4A6FF3;}
.d2-1696315703 .stroke-AA4{stroke:#EDF0FD;}
.d2-1696315703 .stroke-AA5{stroke:#F7F8FE;}
.d2-1696315703 .stroke-AB4{stroke:#EDF0FD;}
.d2-1696315703 .stroke-AB5{stroke:#F7F8FE;}
.d2-1696315703 .background-color-N1{background-color:#0A0F25;}
.d2-1696315703 .background-color-N2{background-color:#676C7E;}
.d2-1696315703 .background-color-N3{background-color:#9499AB;}
.d2-1696315703 .background-color-N4{background-color:#CFD2DD;}
.d2-1696315703 .background-color-N5{background-color:#DEE1EB;}
.d2-1696315703 .background-color-N6{background-color:#EEF1F8;}
.d2-1696315703 .background-color-N7{background-color:#FFFFFF;}
.d2-1696315703 .background-color-B1{background-color:#0D32B2;}
.d2-1696315703 .background-color-B2{background-color:#0D32B2;}
.d2-1696315703 .background-color-B3{background-color:#E3E9FD;}
.d2-1696315703 .background-color-B4{background-color:#E3E9FD;}
.d2-1696315703 .background-color-B5{background-color:#EDF0FD;}
.d2-1696315703 .background-color-B6{background-color:#F7F8FE;}
.d2-1696315703 .background-color-AA2{background-color:#4A6FF3;}
.d2-1696315703 .background-color-AA4{background-color:#EDF0FD;}
.d2-1696315703 .background-color-AA5{background-color:#F7F8FE;}
.d2-1696315703 .background-color-AB4{background-color:#EDF0FD;}
.d2-1696315703 .background-color-AB5{background-color:#F7F8FE;}
.d2-1696315703 .color-N1{color:#0A0F25;}
.d2-1696315703 .color-N2{color:#676C7E;}
.d2-1696315703 .color-N3{color:#9499AB;}
.d2-1696315703 .color-N4{color:#CFD2DD;}
.d2-1696315703 .color-N5{color:#DEE1EB;}
.d2-1696315703 .color-N6{color:#EEF1F8;}
.d2-1696315703 .color-N7{color:#FFFFFF;}
.d2-1696315703 .color-B1{color:#0D32B2;}
.d2-1696315703 .color-B2{color:#0D32B2;}
.d2-1696315703 .color-B3{color:#E3E9FD;}
.d2-1696315703 .color-B4{color:#E3E9FD;}
.d2-1696315703 .color-B5{color:#EDF0FD;}
.d2-1696315703 .color-B6{color:#F7F8FE;}
.d2-1696315703 .color-AA2{color:#4A6FF3;}
.d2-1696315703 .color-AA4{color:#EDF0FD;}
.d2-1696315703 .color-AA5{color:#F7F8FE;}
.d2-1696315703 .color-AB4{color:#EDF0FD;}
.d2-1696315703 .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}]]></style><style type="text/css">.md em,
.md dfn {
font-family: "d2-1696315703-font-italic";
}
.md b,
.md strong {
font-family: "d2-1696315703-font-bold";
}
.md code,
.md kbd,
.md pre,
.md samp {
font-family: "d2-1696315703-font-mono";
font-size: 1em;
}
.md {
tab-size: 4;
}
/* variables are provided in d2renderers/d2svg/d2svg.go */
.md {
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
margin: 0;
color: var(--color-fg-default);
background-color: transparent; /* we don't want to define the background color */
font-family: "d2-1696315703-font-regular";
font-size: 16px;
line-height: 1.5;
word-wrap: break-word;
}
.md details,
.md figcaption,
.md figure {
display: block;
}
.md summary {
display: list-item;
}
.md [hidden] {
display: none !important;
}
.md a {
background-color: transparent;
color: var(--color-accent-fg);
text-decoration: none;
}
.md a:active,
.md a:hover {
outline-width: 0;
}
.md abbr[title] {
border-bottom: none;
text-decoration: underline dotted;
}
.md dfn {
font-style: italic;
}
.md h1 {
margin: 0.67em 0;
font-weight: 600;
padding-bottom: 0.3em;
font-size: 2em;
border-bottom: 1px solid var(--color-border-muted);
}
.md mark {
background-color: var(--color-attention-subtle);
color: var(--color-text-primary);
}
.md small {
font-size: 90%;
}
.md sub,
.md sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
.md sub {
bottom: -0.25em;
}
.md sup {
top: -0.5em;
}
.md img {
border-style: none;
max-width: 100%;
box-sizing: content-box;
background-color: var(--color-canvas-default);
}
.md figure {
margin: 1em 40px;
}
.md hr {
box-sizing: content-box;
overflow: hidden;
background: transparent;
border-bottom: 1px solid var(--color-border-muted);
height: 0.25em;
padding: 0;
margin: 24px 0;
background-color: var(--color-border-default);
border: 0;
}
.md input {
font: inherit;
margin: 0;
overflow: visible;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
.md [type="button"],
.md [type="reset"],
.md [type="submit"] {
-webkit-appearance: button;
}
.md [type="button"]::-moz-focus-inner,
.md [type="reset"]::-moz-focus-inner,
.md [type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
.md [type="button"]:-moz-focusring,
.md [type="reset"]:-moz-focusring,
.md [type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
.md [type="checkbox"],
.md [type="radio"] {
box-sizing: border-box;
padding: 0;
}
.md [type="number"]::-webkit-inner-spin-button,
.md [type="number"]::-webkit-outer-spin-button {
height: auto;
}
.md [type="search"] {
-webkit-appearance: textfield;
outline-offset: -2px;
}
.md [type="search"]::-webkit-search-cancel-button,
.md [type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
.md ::-webkit-input-placeholder {
color: inherit;
opacity: 0.54;
}
.md ::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit;
}
.md a:hover {
text-decoration: underline;
}
.md hr::before {
display: table;
content: "";
}
.md hr::after {
display: table;
clear: both;
content: "";
}
.md table {
border-spacing: 0;
border-collapse: collapse;
display: block;
width: max-content;
max-width: 100%;
overflow: auto;
}
.md td,
.md th {
padding: 0;
}
.md details summary {
cursor: pointer;
}
.md details:not([open]) > *:not(summary) {
display: none !important;
}
.md kbd {
display: inline-block;
padding: 3px 5px;
color: var(--color-fg-default);
vertical-align: middle;
background-color: var(--color-canvas-subtle);
border: solid 1px var(--color-neutral-muted);
border-bottom-color: var(--color-neutral-muted);
border-radius: 6px;
box-shadow: inset 0 -1px 0 var(--color-neutral-muted);
}
.md h1,
.md h2,
.md h3,
.md h4,
.md h5,
.md h6 {
margin-top: 24px;
margin-bottom: 16px;
font-weight: 600;
line-height: 1.25;
font-family: "d2-1696315703-font-regular";
}
.md h2 {
font-weight: 600;
padding-bottom: 0.3em;
font-size: 1.5em;
border-bottom: 1px solid var(--color-border-muted);
}
.md h3 {
font-weight: 600;
font-size: 1.25em;
}
.md h4 {
font-weight: 600;
font-size: 1em;
}
.md h5 {
font-weight: 600;
font-size: 0.875em;
}
.md h6 {
font-weight: 600;
font-size: 0.85em;
color: var(--color-fg-muted);
}
.md p {
margin-top: 0;
margin-bottom: 10px;
}
.md blockquote {
margin: 0;
padding: 0 1em;
color: var(--color-fg-muted);
border-left: 0.25em solid var(--color-border-default);
}
.md ul,
.md ol {
margin-top: 0;
margin-bottom: 0;
padding-left: 2em;
}
.md ol ol,
.md ul ol {
list-style-type: lower-roman;
}
.md ul ul ol,
.md ul ol ol,
.md ol ul ol,
.md ol ol ol {
list-style-type: lower-alpha;
}
.md dd {
margin-left: 0;
}
.md pre {
margin-top: 0;
margin-bottom: 0;
word-wrap: normal;
}
.md ::placeholder {
color: var(--color-fg-subtle);
opacity: 1;
}
.md input::-webkit-outer-spin-button,
.md input::-webkit-inner-spin-button {
margin: 0;
-webkit-appearance: none;
appearance: none;
}
.md::before {
display: table;
content: "";
}
.md::after {
display: table;
clear: both;
content: "";
}
.md > *:first-child {
margin-top: 0 !important;
}
.md > *:last-child {
margin-bottom: 0 !important;
}
.md a:not([href]) {
color: inherit;
text-decoration: none;
}
.md .absent {
color: var(--color-danger-fg);
}
.md .anchor {
float: left;
padding-right: 4px;
margin-left: -20px;
line-height: 1;
}
.md .anchor:focus {
outline: none;
}
.md p,
.md blockquote,
.md ul,
.md ol,
.md dl,
.md table,
.md pre,
.md details {
margin-top: 0;
margin-bottom: 16px;
}
.md blockquote > :first-child {
margin-top: 0;
}
.md blockquote > :last-child {
margin-bottom: 0;
}
.md sup > a::before {
content: "[";
}
.md sup > a::after {
content: "]";
}
.md h1:hover .anchor,
.md h2:hover .anchor,
.md h3:hover .anchor,
.md h4:hover .anchor,
.md h5:hover .anchor,
.md h6:hover .anchor {
text-decoration: none;
}
.md h1 tt,
.md h1 code,
.md h2 tt,
.md h2 code,
.md h3 tt,
.md h3 code,
.md h4 tt,
.md h4 code,
.md h5 tt,
.md h5 code,
.md h6 tt,
.md h6 code {
padding: 0 0.2em;
font-size: inherit;
}
.md ul.no-list,
.md ol.no-list {
padding: 0;
list-style-type: none;
}
.md ol[type="1"] {
list-style-type: decimal;
}
.md ol[type="a"] {
list-style-type: lower-alpha;
}
.md ol[type="i"] {
list-style-type: lower-roman;
}
.md div > ol:not([type]) {
list-style-type: decimal;
}
.md ul ul,
.md ul ol,
.md ol ol,
.md ol ul {
margin-top: 0;
margin-bottom: 0;
}
.md li > p {
margin-top: 16px;
}
.md li + li {
margin-top: 0.25em;
}
.md dl {
padding: 0;
}
.md dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: 600;
}
.md dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
.md table th {
font-weight: 600;
}
.md table th,
.md table td {
padding: 6px 13px;
border: 1px solid var(--color-border-default);
}
.md table tr {
background-color: var(--color-canvas-default);
border-top: 1px solid var(--color-border-muted);
}
.md table tr:nth-child(2n) {
background-color: var(--color-canvas-subtle);
}
.md table img {
background-color: transparent;
}
.md img[align="right"] {
padding-left: 20px;
}
.md img[align="left"] {
padding-right: 20px;
}
.md span.frame {
display: block;
overflow: hidden;
}
.md span.frame > span {
display: block;
float: left;
width: auto;
padding: 7px;
margin: 13px 0 0;
overflow: hidden;
border: 1px solid var(--color-border-default);
}
.md span.frame span img {
display: block;
float: left;
}
.md span.frame span span {
display: block;
padding: 5px 0 0;
clear: both;
color: var(--color-fg-default);
}
.md span.align-center {
display: block;
overflow: hidden;
clear: both;
}
.md span.align-center > span {
display: block;
margin: 13px auto 0;
overflow: hidden;
text-align: center;
}
.md span.align-center span img {
margin: 0 auto;
text-align: center;
}
.md span.align-right {
display: block;
overflow: hidden;
clear: both;
}
.md span.align-right > span {
display: block;
margin: 13px 0 0;
overflow: hidden;
text-align: right;
}
.md span.align-right span img {
margin: 0;
text-align: right;
}
.md span.float-left {
display: block;
float: left;
margin-right: 13px;
overflow: hidden;
}
.md span.float-left span {
margin: 13px 0 0;
}
.md span.float-right {
display: block;
float: right;
margin-left: 13px;
overflow: hidden;
}
.md span.float-right > span {
display: block;
margin: 13px auto 0;
overflow: hidden;
text-align: right;
}
.md code,
.md tt {
padding: 0.2em 0.4em;
margin: 0;
font-size: 85%;
background-color: var(--color-neutral-muted);
border-radius: 6px;
}
.md code br,
.md tt br {
display: none;
}
.md del code {
text-decoration: inherit;
}
.md pre code {
font-size: 100%;
}
.md pre > code {
padding: 0;
margin: 0;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
.md .highlight {
margin-bottom: 16px;
}
.md .highlight pre {
margin-bottom: 0;
word-break: normal;
}
.md .highlight pre,
.md pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: var(--color-canvas-subtle);
border-radius: 6px;
}
.md pre code,
.md pre tt {
display: inline;
max-width: auto;
padding: 0;
margin: 0;
overflow: visible;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
.md .csv-data td,
.md .csv-data th {
padding: 5px;
overflow: hidden;
font-size: 12px;
line-height: 1;
text-align: left;
white-space: nowrap;
}
.md .csv-data .blob-num {
padding: 10px 8px 9px;
text-align: right;
background: var(--color-canvas-default);
border: 0;
}
.md .csv-data tr {
border-top: 0;
}
.md .csv-data th {
font-weight: 600;
background: var(--color-canvas-subtle);
border-top: 0;
}
.md .footnotes {
font-size: 12px;
color: var(--color-fg-muted);
border-top: 1px solid var(--color-border-default);
}
.md .footnotes ol {
padding-left: 16px;
}
.md .footnotes li {
position: relative;
}
.md .footnotes li:target::before {
position: absolute;
top: -8px;
right: -8px;
bottom: -8px;
left: -24px;
pointer-events: none;
content: "";
border: 2px solid var(--color-accent-emphasis);
border-radius: 6px;
}
.md .footnotes li:target {
color: var(--color-fg-default);
}
.md .task-list-item {
list-style-type: none;
}
.md .task-list-item label {
font-weight: 400;
}
.md .task-list-item.enabled label {
cursor: pointer;
}
.md .task-list-item + .task-list-item {
margin-top: 3px;
}
.md .task-list-item .handle {
display: none;
}
.md .task-list-item-checkbox {
margin: 0 0.2em 0.25em -1.6em;
vertical-align: middle;
}
.md .contains-task-list:dir(rtl) .task-list-item-checkbox {
margin: 0 -1.6em 0.25em 0.2em;
}
</style><g id="x"><g class="shape" ><rect x="12.000000" y="12.000000" width="53.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="38.500000" y="50.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">x</text></g><g id="y"><g class="shape" ><rect x="135.000000" y="12.000000" width="54.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="162.000000" y="50.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">y</text></g><g id="z"><g class="shape" ><rect x="259.000000" y="12.000000" width="52.000000" height="66.000000" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="285.000000" y="50.500000" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">z</text></g><g id="legend"><g class="shape" ><rect x="79.000000" y="98.000000" width="164.000000" height="121.000000" class=" stroke-B1 fill-B4" style="stroke-width:2;" /></g><text x="161.000000" y="131.000000" class="text fill-N1" style="text-anchor:middle;font-size:28px">legend</text></g><g id="legend.color1"><g class="shape" ></g><text x="140.000000" y="164.000000" fill="green" class="text" style="text-anchor:middle;font-size:16px">foo</text></g><g id="legend.color2"><g class="shape" ></g><text x="182.000000" y="164.000000" fill="red" class="text" style="text-anchor:middle;font-size:16px">bar</text></g><g id="(x -&gt; y)[0]"><marker id="mk-1457214650" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="green" class="connection" stroke-width="2" /> </marker><path d="M 67.000000 45.000000 L 131.000000 45.000000" stroke="green" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-1457214650)" mask="url(#d2-1696315703)" /></g><g id="(y -&gt; z)[0]"><marker id="mk-1222543834" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="red" class="connection" stroke-width="2" /> </marker><path d="M 191.000000 45.000000 L 255.000000 45.000000" stroke="red" fill="none" class="connection" style="stroke-width:2;" marker-end="url(#mk-1222543834)" mask="url(#d2-1696315703)" /></g><mask id="d2-1696315703" maskUnits="userSpaceOnUse" x="11" y="11" width="301" height="209">
<rect x="11" y="11" width="301" height="209" fill="white"></rect>
</mask></svg></svg>

After

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 19 KiB

View file

@ -4,8 +4,8 @@
"ioerr": null,
"errs": [
{
"range": "d2/testdata/d2compiler/TestCompile/near_bad_connected.d2,1:8:13-1:18:23",
"errmsg": "d2/testdata/d2compiler/TestCompile/near_bad_connected.d2:2:9: constant near keys cannot be set on connected shapes"
"range": "d2/testdata/d2compiler/TestCompile/near_bad_connected.d2,4:4:42-4:10:48",
"errmsg": "d2/testdata/d2compiler/TestCompile/near_bad_connected.d2:5:5: cannot connect objects from within a container, that has near constant set, to objects outside that container"
}
]
}

View file

@ -1,12 +0,0 @@
{
"graph": null,
"err": {
"ioerr": null,
"errs": [
{
"range": "d2/testdata/d2compiler/TestCompile/near_bad_container.d2,1:8:13-1:18:23",
"errmsg": "d2/testdata/d2compiler/TestCompile/near_bad_container.d2:2:9: constant near keys cannot be set on shapes with children"
}
]
}
}

View file

@ -0,0 +1,12 @@
{
"graph": null,
"err": {
"ioerr": null,
"errs": [
{
"range": "d2/testdata/d2compiler/TestCompile/near_descendant_connect_to_outside.d2,5:4:47-5:12:55",
"errmsg": "d2/testdata/d2compiler/TestCompile/near_descendant_connect_to_outside.d2:6:5: cannot connect objects from within a container, that has near constant set, to objects outside that container"
}
]
}
}